diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index e0b65771..63d78c8b 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -7,10 +7,9 @@ assignees: '9001' --- -NOTE: + ### Describe the bug a description of what the bug is @@ -45,5 +44,11 @@ if the issue is possibly on the client-side, then mention some of the following: * OS version: * browser version: +### The rest of the stack +if you are connecting directly to copyparty then that's cool, otherwise please mention everything else between copyparty and the browser (reverseproxy, tunnels, etc.) + +### Server log +if the issue might be server-related, include everything that appears in the copyparty log during startup, and also anything else you think might be relevant + ### Additional context any other context about the problem here diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 2df6b4bb..390943c9 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -7,9 +7,9 @@ assignees: '9001' --- -NOTE: + **is your feature request related to a problem? Please describe.** a description of what the problem is, for example, `I'm always frustrated when [...]` or `Why is it not possible to [...]` diff --git a/.gitignore b/.gitignore index b70c56b7..2f48b149 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,7 @@ scripts/docker/*.err # nix build output link result +result-* # IDEA config .idea/ diff --git a/.vscode/launch.json b/.vscode/launch.json index 9ab69494..4a4217be 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -3,7 +3,7 @@ "configurations": [ { "name": "Run copyparty", - "type": "python", + "type": "debugpy", "request": "launch", "module": "copyparty", "console": "integratedTerminal", @@ -11,30 +11,46 @@ "justMyCode": false, "env": { "PYDEVD_DISABLE_FILE_VALIDATION": "1", - "PYTHONWARNINGS": "always", //error + "PYTHONWARNINGS": "always" //error }, "args": [ - //"-nw", - "-ed", - "-emp", + //"-nw", // no-write; for testing uploads without writing to disk + //"-q", // quiet; speedboost when console output is not needed + + // # increase debugger performance: + //"no-htp", + //"hash-mt=0", + //"mtag-mt=1", + //"th-mt=1", + + // # listen for FTP and TFTP + "--ftp=3921", + "--ftp-pr=12000-12099", + "--tftp=3969", + + // # listen on all IPv6, all IPv4, and unix-socket + "-i::,unix:777:a.sock", + + // # misc + "--dedup", "-e2dsa", "-e2ts", - "-mtp=.bpm=f,bin/mtag/audio-bpm.py", + "--rss", + "--shr=/shr", + "--stats", + "-z", + + // # users + volumes "-aed:wark", - "-vsrv::r:rw,ed:c,dupe", - "-vdist:dist:r" + "-vdist:dist:r", + "-vsrv::r:rw,ed", + "-vsrv/junk:junk:r:A,ed", + "--ver" ] }, - { - "name": "No debug", - "preLaunchTask": "no_dbg", - "type": "python", - //"request": "attach", "port": 42069 - // fork: nc -l 42069 +* **translations** -- the copyparty web-UI has translations in [copyparty/web/tl](https://github.com/9001/copyparty/tree/hovudstraum/copyparty/web/tl); if you'd like to [add a translation](https://github.com/9001/copyparty/tree/hovudstraum/docs/rice#translations) for another language then that'd be welcome! and if that language has a grammar that doesn't fit into the way the strings are assembled, then we'll fix that as we go :> * but please note that support for [RTL (Right-to-Left) languages](https://en.wikipedia.org/wiki/Right-to-left_script) is currently not planned, since the javascript is a bit too jank for that diff --git a/README.md b/README.md index 2c2e9e1d..b5baa67a 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ turn almost any device into a file server with resumable uploads/downloads using [*any*](#browser-support) web browser * server only needs Python (2 or 3), all dependencies optional -* ๐ protocols: [http](#the-browser) // [webdav](#webdav-server) // [ftp](#ftp-server) // [tftp](#tftp-server) // [smb/cifs](#smb-server) +* ๐ protocols: [http(s)](#the-browser) // [webdav](#webdav-server) // [sftp](#sftp-server) // [ftp(s)](#ftp-server) // [tftp](#tftp-server) // [smb/cifs](#smb-server) * ๐ฑ [android app](#android-app) // [iPhone shortcuts](#ios-shortcuts) ๐ **[get started](#quickstart)!** or visit the **[read-only demo server](https://a.ocv.me/pub/demo/)** ๐ running on a nuc in my basement @@ -14,50 +14,46 @@ turn almost any device into a file server with resumable uploads/downloads using ๐ฌ **videos:** [upload](https://a.ocv.me/pub/demo/pics-vids/up2k.webm) // [cli-upload](https://a.ocv.me/pub/demo/pics-vids/u2cli.webm) // [race-the-beam](https://a.ocv.me/pub/g/nerd-stuff/cpp/2024-0418-race-the-beam.webm) // ๐ **[feature-showcase](https://a.ocv.me/pub/demo/showcase-hq.webm)** ([youtube](https://www.youtube.com/watch?v=15_-hgsX2V0)) -made in Norway ๐ณ๐ด +built in Norway ๐ณ๐ด with contributions from [not-norway](https://github.com/9001/copyparty/graphs/contributors) -# readme table of contents +## readme toc -### 1. TOP ([START HERE](#quickstart)) - * [**quickstart**](#quickstart) - just run **[copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py)** โ that's it! ๐ - * [at home](#at-home) - make it accessible over the internet - * [on servers](#on-servers) - you may also want these, especially on servers - * [features](#features) - also see [comparison to similar software](./docs/versus.md) - * [testimonials](#testimonials) - small collection of user feedback - -### 2. [MOTIVATIONS](#motivations) - project goals / philosophy - * [notes](#notes) - general notes - -### 3. [BUGS](#bugs) - roughly sorted by chance of encounter - * [not my bugs](#not-my-bugs) - same order here too - -### 4. [BREAKING CHANGES](#breaking-changes) - upgrade notes - -### 5. [FAQ](#faq) - "frequently" asked questions - -### 6. [ACCOUNTS & VOLUMES](#accounts-and-volumes) - per-folder, per-user permissions - * [shadowing](#shadowing) - hiding specific subfolders - * [dotfiles](#dotfiles) - unix-style hidden files/folders - -### 7. [THE BROWSER](#the-browser) - accessing a copyparty server using a web browser - * [tabs](#tabs) - the main tabs in the ui - * [hotkeys](#hotkeys) - the browser has the following hotkeys - * [navpane](#navpane) - switching between breadcrumbs or navpane - * [thumbnails](#thumbnails) - press `g` or `็ฐ` to toggle grid-view instead of the file listing - * [zip downloads](#zip-downloads) - download folders (or file selections) as `zip` or `tar` files - * [uploading](#uploading) - drag files/folders into the web-browser to upload +* top + * [quickstart](#quickstart) - just run **[copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py)** -- that's it! ๐ + * [mirrors](#mirrors) - other places to download copyparty from + * [at home](#at-home) - make it accessible over the internet + * [on servers](#on-servers) - you may also want these, especially on servers + * [features](#features) - also see [comparison to similar software](./docs/versus.md) + * [testimonials](#testimonials) - small collection of user feedback +* [motivations](#motivations) - project goals / philosophy + * [notes](#notes) - general notes +* [bugs](#bugs) - roughly sorted by chance of encounter + * [not my bugs](#not-my-bugs) - same order here too +* [breaking changes](#breaking-changes) - upgrade notes +* [FAQ](#FAQ) - "frequently" asked questions +* [accounts and volumes](#accounts-and-volumes) - per-folder, per-user permissions + * [shadowing](#shadowing) - hiding specific subfolders + * [dotfiles](#dotfiles) - unix-style hidden files/folders +* [the browser](#the-browser) - accessing a copyparty server using a web-browser + * [tabs](#tabs) - the main tabs in the ui + * [hotkeys](#hotkeys) - the browser has the following hotkeys + * [navpane](#navpane) - switching between breadcrumbs or navpane + * [thumbnails](#thumbnails) - press `g` or `็ฐ` to toggle grid-view instead of the file listing + * [zip downloads](#zip-downloads) - download folders (or file selections) as `zip` or `tar` files + * [uploading](#uploading) - drag files/folders into the web-browser to upload * [file-search](#file-search) - dropping files into the browser also lets you see if they exist on the server * [unpost](#unpost) - undo/delete accidental uploads * [self-destruct](#self-destruct) - uploads can be given a lifetime * [race the beam](#race-the-beam) - download files while they're still uploading ([demo video](http://a.ocv.me/pub/g/nerd-stuff/cpp/2024-0418-race-the-beam.webm)) * [incoming files](#incoming-files) - the control-panel shows the ETA for all incoming files - * [file manager](#file-manager) - cut/paste, rename, and delete files/folders (if you have permission) - * [shares](#shares) - share a file or folder by creating a temporary link - * [batch rename](#batch-rename) - select some files and press `F2` to bring up the rename UI - * [rss feeds](#rss-feeds) - monitor a folder with your RSS reader - * [recent uploads](#recent-uploads) - list all recent uploads - * [media player](#media-player) - plays almost every audio format there is + * [file manager](#file-manager) - cut/paste, rename, and delete files/folders (if you have permission) + * [shares](#shares) - share a file or folder by creating a temporary link + * [batch rename](#batch-rename) - select some files and press `F2` to bring up the rename UI + * [rss feeds](#rss-feeds) - monitor a folder with your RSS reader + * [opds feeds](#opds-feeds) - browse and download files from your e-book reader + * [recent uploads](#recent-uploads) - list all recent uploads + * [media player](#media-player) - plays almost every audio format there is * [playlists](#playlists) - create and play [m3u8](https://en.wikipedia.org/wiki/M3U) playlists * [creating a playlist](#creating-a-playlist) - with a standalone mediaplayer or copyparty * [audio equalizer](#audio-equalizer) - and [dynamic range compressor](https://en.wikipedia.org/wiki/Dynamic_range_compression) @@ -72,9 +68,10 @@ made in Norway ๐ณ๐ด * [zeroconf](#zeroconf) - announce enabled services on the LAN ([pic](https://user-images.githubusercontent.com/241032/215344737-0eae8d98-9496-4256-9aa8-cd2f6971810d.png)) * [mdns](#mdns) - LAN domain-name and feature announcer * [ssdp](#ssdp) - windows-explorer announcer - * [qr-code](#qr-code) - print a qr code [(screenshot)](https://user-images.githubusercontent.com/241032/194728533-6f00849b-c6ac-43c6-9359-83e454d11e00.png) for quick access - * [ftp server](#ftp-server) - an FTP server can be started using `--ftp 3921` - * [webdav server](#webdav-server) - with read-write support + * [qr-code](#qr-code) - print a qr-code [(screenshot)](https://user-images.githubusercontent.com/241032/194728533-6f00849b-c6ac-43c6-9359-83e454d11e00.png) for quick access + * [ftp server](#ftp-server) - an FTP server can be started using `--ftp 3921` + * [sftp server](#sftp-server) - goes roughly 700 MiB/s (slower than webdav and ftp) + * [webdav server](#webdav-server) - with read-write support * [connecting to webdav from windows](#connecting-to-webdav-from-windows) - using the GUI * [tftp server](#tftp-server) - a TFTP server (read/write) can be started using `--tftp 3969` * [smb server](#smb-server) - unsafe, slow, not recommended for wan @@ -116,30 +113,25 @@ made in Norway ๐ณ๐ด * [GDPR compliance](#gdpr-compliance) - imagine using copyparty professionally... * [feature chickenbits](#feature-chickenbits) - buggy feature? rip it out * [feature beefybits](#feature-beefybits) - force-enable features with known issues on your OS/env - -### 9. [PACKAGES](#packages) - the party might be closer than you think - * [arch package](#arch-package) - `pacman -S copyparty` (in [arch linux extra](https://archlinux.org/packages/extra/any/copyparty/)) - * [fedora package](#fedora-package) - does not exist yet - * [homebrew formulae](#homebrew-formulae) - `brew install copyparty ffmpeg` - * [nix package](#nix-package) - `nix profile install github:9001/copyparty` - * [nixos module](#nixos-module) - -### 10. [BROWSER SUPPORT](#browser-support) - TLDR: yes - -### 11. [CLIENT EXAMPLES](#client-examples) - interact with copyparty using non-browser clients - * [folder sync](#folder-sync) - sync folders to/from copyparty - * [mount as drive](#mount-as-drive) - a remote copyparty server as a local filesystem - -### 12. [ANDROID APP](#android-app) - upload to copyparty with one tap -* [ios shortcuts](#ios-shortcuts) - there is no iPhone app, but - -### 13. [PERFORMANCE](#performance) - defaults are usually fine - expect `8 GiB/s` download, `1 GiB/s` upload - * [client-side](#client-side) - when uploading files - -### 14. [SECURITY](#security) - there is a [discord server](https://discord.gg/25J8CdTT6G) - * [gotchas](#gotchas) - behavior that might be unexpected - * [cors](#cors) - cross-site request config - * [filekeys](#filekeys) - prevent filename bruteforcing +* [packages](#packages) - the party might be closer than you think + * [arch package](#arch-package) - `pacman -S copyparty` (in [arch linux extra](https://archlinux.org/packages/extra/any/copyparty/)) + * [fedora package](#fedora-package) - does not exist yet + * [homebrew formulae](#homebrew-formulae) - `brew install copyparty ffmpeg` + * [nix package](#nix-package) - `nix profile install github:9001/copyparty` + * [nixos module](#nixos-module) +* [browser support](#browser-support) - TLDR: yes +* [server hall of fame](#server-hall-of-fame) - unexpected things that run copyparty +* [client examples](#client-examples) - interact with copyparty using non-browser clients + * [folder sync](#folder-sync) - sync folders to/from copyparty + * [mount as drive](#mount-as-drive) - a remote copyparty server as a local filesystem +* [android app](#android-app) - upload to copyparty with one tap +* [iOS shortcuts](#iOS-shortcuts) - there is no iPhone app, but +* [performance](#performance) - defaults are usually fine - expect `8 GiB/s` download, `1 GiB/s` upload + * [client-side](#client-side) - when uploading files +* [security](#security) - there is a [discord server](https://discord.gg/25J8CdTT6G) with announcements + * [gotchas](#gotchas) - behavior that might be unexpected + * [cors](#cors) - cross-site request config + * [filekeys](#filekeys) - prevent filename bruteforcing * [dirkeys](#dirkeys) - share specific folders in a volume * [password hashing](#password-hashing) - you can hash passwords * [https](#https) - both HTTP and HTTPS are accepted @@ -150,21 +142,17 @@ made in Norway ๐ณ๐ด ### 16. [HTTP API](#HTTP-API) - see [devnotes](./docs/devnotes.md#http-api) * [dependencies](#dependencies) - mandatory deps - * [optional dependencies](#optional-dependencies) - install these to enable bonus features + * [optional dependencies](#optional-dependencies) - enable bonus features * [dependency chickenbits](#dependency-chickenbits) - prevent loading an optional dependency - * [optional gpl stuff](#optional-gpl-stuff) - -### 17. [SFX](#sfx) - the self-contained "binary" (recommended!) - * [copyparty.exe](#copypartyexe) - download [copyparty.exe](https://github.com/9001/copyparty/releases/latest/download/copyparty.exe) (win8+) or [copyparty32.exe](https://github.com/9001/copyparty/releases/latest/download/copyparty32.exe) (win7+) - * [zipapp](#zipapp) - another emergency alternative, [copyparty.pyz](https://github.com/9001/copyparty/releases/latest/download/copyparty.pyz) - -### 18. [INSTALL ON ANDROID](#install-on-android) - -### 19. [INSTALL ON ios](#install-on-ios) - -### 20. [REPORTING BUGS](#reporting-bugs) - ideas for context to include, and where to submit them - -### 21. [DEV NOTES](#devnotes) - for build instructions etc, see [./docs/devnotes.md](./docs/devnotes.md) + * [dependency unvendoring](#dependency-unvendoring) - force use of system modules + * [optional gpl stuff](#optional-gpl-stuff) +* [sfx](#sfx) - the self-contained "binary" (recommended!) + * [copyparty.exe](#copypartyexe) - download [copyparty.exe](https://github.com/9001/copyparty/releases/latest/download/copyparty.exe) (win8+) or [copyparty32.exe](https://github.com/9001/copyparty/releases/latest/download/copyparty32.exe) (win7+) + * [zipapp](#zipapp) - another emergency alternative, [copyparty.pyz](https://github.com/9001/copyparty/releases/latest/download/copyparty.pyz) +* [install on android](#install-on-android) +* [install on iOS](#install-on-iOS) +* [reporting bugs](#reporting-bugs) - ideas for context to include, and where to submit them +* [devnotes](#devnotes) - for build instructions etc, see [./docs/devnotes.md](./docs/devnotes.md) # quickstart @@ -175,7 +163,7 @@ just run **[copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/ * or install through [pypi](https://pypi.org/project/copyparty/): `python3 -m pip install --user -U copyparty` * or if you cannot install python, you can use [copyparty.exe](#copypartyexe) instead -* or install [on arch](#arch-package) โฑ [on NixOS](#nixos-module) โฑ [through nix](#nix-package) +* or install [on arch](#arch-package) / [homebrew](#homebrew-formulae) โฑ [on NixOS](#nixos-module) โฑ [through nix](#nix-package) * or if you are on android, [install copyparty in termux](#install-on-android) * or maybe an iPhone or iPad? [install in a-Shell on ios](#install-on-ios) * or maybe you have a [synology nas / dsm](./docs/synology-dsm.md) @@ -210,7 +198,19 @@ some recommended options: * `-e2ts` enables audio metadata indexing (needs either FFprobe or Mutagen) * `-v /mnt/music:/music:r:rw,foo -a foo:bar` shares `/mnt/music` as `/music`, `r`eadable by anyone, and read-write for user `foo`, password `bar` * replace `:r:rw,foo` with `:r,foo` to only make the folder readable by `foo` and nobody else - * see [accounts and volumes](#accounts-and-volumes) (or `--help-accounts`) for the syntax and other permissions + * see [accounts and volumes](#accounts-and-volumes) (or [`--help-accounts`](https://copyparty.eu/cli/#accounts-help-page)) for the syntax and other permissions + + +### mirrors + +other places to download copyparty from (non-github links): + +* https://copyparty.eu/ (hetzner, finland, official mirror): + * https://copyparty.eu/py = https://copyparty.eu/copyparty-sfx.py = the sfx + * https://copyparty.eu/en = https://copyparty.eu/copyparty-en.py = the english-only sfx + * https://copyparty.eu/pyz = https://copyparty.eu/copyparty.pyz = the zipapp + * https://copyparty.eu/enz = https://copyparty.eu/copyparty-en.pyz = the enterprise pyz + * https://copyparty.eu/cli = online cli helptext ### at home @@ -232,6 +232,7 @@ you may also want these, especially on servers: * [contrib/systemd/copyparty.service](contrib/systemd/copyparty.service) to run copyparty as a systemd service (see guide inside) * [contrib/systemd/prisonparty.service](contrib/systemd/prisonparty.service) to run it in a chroot (for extra security) +* [contrib/podman-systemd/](contrib/podman-systemd/) to run copyparty in a Podman container as a systemd service (see guide inside) * [contrib/openrc/copyparty](contrib/openrc/copyparty) to run copyparty on Alpine / Gentoo * [contrib/rc/copyparty](contrib/rc/copyparty) to run copyparty on FreeBSD * [nixos module](#nixos-module) to run copyparty on NixOS hosts @@ -239,12 +240,12 @@ you may also want these, especially on servers: and remember to open the ports you want; here's a complete example including every feature copyparty has to offer: ``` -firewall-cmd --permanent --add-port={80,443,3921,3923,3945,3990}/tcp # --zone=libvirt +firewall-cmd --permanent --add-port={80,443,3921,3922,3923,3945,3990}/tcp # --zone=libvirt firewall-cmd --permanent --add-port=12000-12099/tcp # --zone=libvirt firewall-cmd --permanent --add-port={69,1900,3969,5353}/udp # --zone=libvirt firewall-cmd --reload ``` -(69:tftp, 1900:ssdp, 3921:ftp, 3923:http/https, 3945:smb, 3969:tftp, 3990:ftps, 5353:mdns, 12000:passive-ftp) +(69:tftp, 1900:ssdp, 3921:ftp, 3922:sftp, 3923:http/https, 3945:smb, 3969:tftp, 3990:ftps, 5353:mdns, 12000:passive-ftp) ## features @@ -264,7 +265,7 @@ also see [comparison to similar software](./docs/versus.md) * โ [upnp / zeroconf / mdns / ssdp](#zeroconf) * โ [event hooks](#event-hooks) / script runner * โ [reverse-proxy support](https://github.com/9001/copyparty#reverse-proxy) - * โ cross-platform (Windows, Linux, Macos, Android, ios, FreeBSD, arm32/arm64, ppc64le, s390x, risc-v/riscv64) + * โ cross-platform (Windows, Linux, Macos, Android, iOS, FreeBSD, arm32/arm64, ppc64le, s390x, risc-v/riscv64, SGI IRIX) * upload * โ basic: plain multipart, ie6 support * โ [up2k](#uploading): js, resumable, multithreaded @@ -326,7 +327,7 @@ small collection of user feedback project goals / philosophy -* inverse linux philosophy โ do all the things, and do an *okay* job +* inverse unix philosophy -- do all the things, and do an *okay* job * quick drop-in service to get a lot of features in a pinch * some of [the alternatives](./docs/versus.md) might be a better fit for you * run anywhere, support everything @@ -454,6 +455,12 @@ upgrade notes * CopyParty? * **nope**! the name is either copyparty (all-lowercase) or Copyparty -- it's [one word](https://en.wiktionary.org/wiki/copyparty) after all :> +* what is a volflag? + * per-volume configuration; many (not all) global-options can be set as volflags, and most (not all) volflags can be set as global-options; [complete list of volflags](https://copyparty.eu/cli/#flags-help-page) + +* what is a volume? + * a mapping from a URL (`/music/`) to a folder on your server's local filesystem (`C:\Users\ed\Music`) which can then be accessed through copyparty, depending on the permissions and options you set on it -- see [accounts and volumes](#accounts-and-volumes) + * can I change the ๐ฒ spinning pine-tree loading animation? * [yeah...](https://github.com/9001/copyparty/tree/hovudstraum/docs/rice#boring-loader-spinner) :-( @@ -464,6 +471,7 @@ upgrade notes * can I link someone to a password-protected volume/file by including the password in the URL? * yes, by adding `?pw=hunter2` to the end; replace `?` with `&` if there are parameters in the URL already, meaning it contains a `?` near the end * if you have enabled `--usernames` then do `?pw=username:password` instead + * `?pw` can be disabled with `--pw-urlp=A` but this breaks support for many clients * how do I stop `.hist` folders from appearing everywhere on my HDD? * by default, a `.hist` folder is created inside each volume for the filesystem index, thumbnails, audio transcodes, and markdown document history. Use the `--hist` global-option or the `hist` volflag to move it somewhere else; see [database location](#database-location) @@ -501,7 +509,7 @@ per-folder, per-user permissions - if your setup is getting complex, consider m * much easier to manage, and you can modify the config at runtime with `systemctl reload copyparty` or more conveniently using the `[reload cfg]` button in the control-panel (if the user has `a`/admin in any volume) * changes to the `[global]` config section requires a restart to take effect -a quick summary can be seen using `--help-accounts` +a quick summary can be seen using [`--help-accounts`](https://copyparty.eu/cli/#accounts-help-page) configuring accounts/volumes with arguments: * `-a usr:pwd` adds account `usr` with password `pwd` @@ -540,6 +548,9 @@ examples: if you want to grant access to all users who are logged in, the group `acct` will always contain all known users, so for example `-v /mnt/music:music:r,@acct` +* to do the opposite, granting access to everyone who is NOT logged in. `*,-@acct` does the trick, for example `-v /srv/welcome:welcome:r,*,-@acct` +* single users can also be subtracted from a group: `@admins,-james` + anyone trying to bruteforce a password gets banned according to `--ban-pw`; default is 24h ban for 9 failed attempts in 1 hour and if you want to use config files instead of commandline args (good!) then here's the same examples as a configfile; save it as `foobar.conf` and use it like this: `python copyparty-sfx.py -c foobar.conf` @@ -635,7 +646,7 @@ the main tabs in the ui * `[๐งฏ]` [unpost](#unpost): undo/delete accidental uploads * `[๐]` and `[๐]` are the [uploaders](#uploading) * `[๐]` mkdir: create directories -* `[๐]` new-md: create a new markdown document +* `[๐]` new-file: create a new textfile * `[๐]` send-msg: either to server-log or into textfiles if `--urlform save` * `[๐บ]` audio-player config options * `[โ๏ธ]` general client config options @@ -748,6 +759,10 @@ to show `/icons/exe.png` and `/icons/elf.gif` as the thumbnail for all `.exe` an * the supported image formats are [jpg, png, gif, webp, ico](https://developer.mozilla.org/en-US/docs/Web/Media/Guides/Formats/Image_types) * be careful with svg; chrome will crash if you have too many unique svg files showing on the same page (the limit is 250 or so) -- showing the same handful of svg files thousands of times is ok however +note: +* heif/heifs/heic/heics images usually require the `libvips` [optional dependency](#optional-dependencies) (available in the `iv` docker image, `withFastThumbnails` in nixos) + * technical trivia: FFmpeg has basic support for tiled heic as of v7.0; need `-show_stream_groups` for correct resolution + config file example: ```yaml @@ -802,6 +817,7 @@ you can also zip a selection of files or folders by clicking them in the browser cool trick: download a folder by appending url-params `?tar&opus` or `?tar&mp3` to transcode all audio files (except aac|m4a|mp3|ogg|opus|wma) to opus/mp3 before they're added to the archive * super useful if you're 5 minutes away from takeoff and realize you don't have any music on your phone but your server only has flac files and downloading those will burn through all your data + there wouldn't be enough time anyways +* and url-param `&nodot` skips dotfiles/dotfolders; they are included by default if your account has permission to see them * and url-params `&j` / `&w` produce jpeg/webm thumbnails/spectrograms instead of the original audio/video/images (`&p` for audio waveforms) * can also be used to pregenerate thumbnails; combine with `--th-maxage=9999999` or `--th-clean=0` @@ -888,6 +904,8 @@ the files will be hashed on the client-side, and each hash is sent to the server files go into `[ok]` if they exist (and you get a link to where it is), otherwise they land in `[ng]` * the main reason filesearch is combined with the uploader is cause the code was too spaghetti to separate it out somewhere else, this is no longer the case but now i've warmed up to the idea too much +if you have a "wark" (file-identifier/checksum) then you can also search for that in the [๐] tab by putting `w = kFpDiztbZc8Z1Lzi` in the `raw` field + ### unpost @@ -1014,6 +1032,8 @@ available functions: * `$lpad(text, length, pad_char)` * `$rpad(text, length, pad_char)` +two counters are available; `.n.s` is the nth file in the selection, and `.n.d` the nth file in the folder, for example rename-output `file(.n.d).(ext)` gives `file5.bin`, and `beach-$lpad((.n.s),3,0).(ext)` is `beach-017.jpg` and the initial value of each counter can be set in the textboxes underneath the preset dropdown + so, say you have a file named [`meganeko - Eclipse - 07 Sirius A.mp3`](https://www.youtube.com/watch?v=-dtb0vDPruI) (absolutely fantastic album btw) and the tags are: `Album:Eclipse`, `Artist:meganeko`, `Title:Sirius A`, `tn:7` @@ -1049,6 +1069,8 @@ url parameters: * `pw=hunter2` for password auth * if you enabled `--usernames` then do `pw=username:password` instead +* `nopw` disables embedding the password (if provided) into item-URLs in the feed +* `nopw=a` disables mentioning the password anywhere at all in the feed; may break some readers * `recursive` to also include subfolders * `title=foo` changes the feed title (default: folder name) * `fext=mp3,opus` only include mp3 and opus files (default: all) @@ -1060,6 +1082,28 @@ url parameters: * uppercase = reverse-sort; `M` = oldest file first +## opds feeds + +browse and download files from your e-book reader + +enabled with the `opds` volflag or `--opds` global option + +add `?opds` to the end of the url you would like to browse, then input that in your opds client. +for example: `https://copyparty.example/books/?opds`. + +to log in with a password, enter it into either of the username or password fields in your client. + +- if you've enabled `--usernames`, then you need to enter both username and password . + +note: some clients (e.g. Moon+ Reader) will not send the password when downloading cover images, which will +cause your ip to be banned by copyparty. to work around this, you can grant the [`g` permission](#accounts-and-volumes) +to unauthenticated requests and enable [filekeys](#filekeys) to prevent guessing filenames. for example: +`-vbooks:books:r,ed:g:c,fk,opds` + +by default, not all file types will be listed in opds feeds. to change this, add the extension to +`--opds-exts` (volflag: `opds_exts`), or empty the list to list everything + + ## recent uploads list all recent uploads by clicking "show recent uploads" in the controlpanel @@ -1093,6 +1137,7 @@ some highlights: * shows the audio waveform in the seekbar * not perfectly gapless but can get really close (see settings + eq below); good enough to enjoy gapless albums as intended * videos can be played as audio, without wasting bandwidth on the video +* adding `?v` to the end of an audio/video/image link will make it open in the mediaplayer click the `play` link next to an audio file, or copy the link target to [share it](https://a.ocv.me/pub/demo/music/Ubiktune%20-%20SOUNDSHOCK%202%20-%20FM%20FUNK%20TERRROR!!/#af-1fbfba61&t=18) (optionally with a timestamp to start playing from, like that example does) @@ -1230,7 +1275,7 @@ see [./srv/expand/](./srv/expand/) for usage and examples * and `PREADME.md` / `preadme.md` is shown above directory listings unless `--no-readme` or `.prologue.html` -* `README.md` and `*logue.html` can contain placeholder values which are replaced server-side before embedding into directory listings; see `--help-exp` +* `README.md` and `*logue.html` can contain placeholder values which are replaced server-side before embedding into directory listings; see [`--help-exp`](https://copyparty.eu/cli/#exp-help-page) ## searching @@ -1260,10 +1305,9 @@ using arguments or config files, or a mix of both: * or click the `[reload cfg]` button in the control-panel if the user has `a`/admin in any volume * changes to the `[global]` config section requires a restart to take effect -**NB:** as humongous as this readme is, there is also a lot of undocumented features. Run copyparty with `--help` to see all available global options; all of those can be used in the `[global]` section of config files, and everything listed in `--help-flags` can be used in volumes as volflags. +**NB:** as humongous as this readme is, there is also a lot of undocumented features. Run copyparty with [`--help`](https://copyparty.eu/cli/) (or click that link) to see all available global options; all of those can be used in the `[global]` section of config files, and everything listed in [`--help-flags`](https://copyparty.eu/cli/#flags-help-page) can be used in volumes as volflags (per-volume configuration). * if running in docker/podman, try this: `docker run --rm -it copyparty/ac --help` -* or see this: https://ocv.me/copyparty/helptext.html -* or if you prefer plaintext, https://ocv.me/copyparty/helptext.txt +* or if you prefer plaintext, https://copyparty.eu/helptext.txt ## zeroconf @@ -1360,6 +1404,26 @@ config file example, which restricts FTP to only use ports 3921 and 12000-12099 ``` +## sftp server + +goes roughly 700 MiB/s (slower than webdav and ftp) + +> this is **not** [ftps](#ftp-server) (which copyparty also supports); [ftps](#ftp-server) is ftp-tls (think http/https), while **sftp** is ssh-based and (preferably) uses ssh-keys for authentication + +the sftp-server requires the optional dependency [paramiko](https://pypi.org/project/paramiko/); +* if you are **not** using docker, then install paramiko somehow +* if you **are** using docker, then use one of the following image variants: `ac` / `im` / `iv` / `dj` + +enable sftpd with `--sftp 3922` to listen on port 3922; +* use global-option `sftp-key` to associate an ssh-key with a user; + * commandline: `--sftp-key 'david ssh-ed25519 AAAAC3NzaC...'` + * config-file: `sftp-key: david ssh-ed25519 AAAAC3NzaC...` +* `--sftp-pw` enables login with passwords (default is ssh-keys only) +* `--sftp-anon foo` enables login with username `foo` and no password; gives the same access/permissions as the website does when not logged in + +see the [sftp section in --help](https://copyparty.eu/cli/#g-sftp) for the other options + + ## webdav server with read-write support, supports winXP and later, macos, nautilus/gvfs ... a great way to [access copyparty straight from the file explorer in your OS](#mount-as-drive) @@ -1373,7 +1437,7 @@ general usage: on macos, connect from finder: * [Go] -> [Connect to Server...] -> http://192.168.123.1:3923/ -in order to grant full write-access to webdav clients, the volflag `daw` must be set and the account must also have delete-access (otherwise the client won't be allowed to replace the contents of existing files, which is how webdav works) +to upload or edit files with WebDAV clients, enable the `daw` volflag (because most WebDAV clients expect this) and give your account the delete-permission. This avoids getting several copies of the same file on the server. HOWEVER: This will also make all PUT-uploads overwrite existing files if the user has delete-access, so use with caution. > note: if you have enabled [IdP authentication](#identity-providers) then that may cause issues for some/most webdav clients; see [the webdav section in the IdP docs](https://github.com/9001/copyparty/blob/hovudstraum/docs/idp.md#connecting-webdav-clients) @@ -1434,7 +1498,7 @@ unsafe, slow, not recommended for wan, enable with `--smb` for read-only or `-- click the [connect](http://127.0.0.1:3923/?hc) button in the control-panel to see connection instructions for windows, linux, macos -dependencies: `python3 -m pip install --user -U impacket==0.11.0` +dependencies: `python3 -m pip install --user -U impacket==0.13.0` * newer versions of impacket will hopefully work just fine but there is monkeypatching so maybe not some **BIG WARNINGS** specific to SMB/CIFS, in decreasing importance: @@ -1477,7 +1541,12 @@ tweaking the ui * to sort in music order (album, track, artist, title) with filename as fallback, you could `--sort tags/Circle,tags/.tn,tags/Artist,tags/Title,href` * to sort by upload date, first enable showing the upload date in the listing with `-e2d -mte +.up_at` and then `--sort tags/.up_at` -see [./docs/rice](./docs/rice) for more, including how to add stuff (css/``/...) to the html `
` tag, or to add your own translation +see [./docs/rice](./docs/rice) for more, including: +* how to [hide ui-elements](./docs/rice/README.md#hide-ui-elements) +* [custom fonts](./docs/rice/README.md#custom-fonts) +* [custom loading-spinner](./docs/rice/README.md#boring-loader-spinner) +* adding stuff (css/``/...) [to the html `` tag](./docs/rice/README.md#head) +* [adding your own translation](./docs/rice/README.md#translations) ## opengraph @@ -1574,6 +1643,7 @@ the same arguments can be set as volflags, in addition to `d2d`, `d2ds`, `d2t`, note: * upload-times can be displayed in the file listing by enabling the `.up_at` metadata key, either globally with `-e2d -mte +.up_at` or per-volume with volflags `e2d,mte=+.up_at` (will have a ~17% performance impact on directory listings) + * and file checksums can be shown with global-option `-e2d -mte +w` or volflag `e2d,mte=+w` (always active for users with permission `a`) * `e2tsr` is probably always overkill, since `e2ds`/`e2dsa` would pick up any file modifications and `e2ts` would then reindex those, unless there is a new copyparty version with new parsers and the release note says otherwise config file example (these options are recommended btw): @@ -1657,6 +1727,7 @@ set upload rules using volflags, some examples: * `:c,nosub` disallow uploading into subdirectories; goes well with `rotn` and `rotf`: * `:c,rotn=1000,2` moves uploads into subfolders, up to 1000 files in each folder before making a new one, two levels deep (must be at least 1) * `:c,rotf=%Y/%m/%d/%H` enforces files to be uploaded into a structure of subfolders according to that date format + * `:c,rotf_tz=Europe/Oslo` sets the timezone (default is UTC unless global-option `rotf-tz` is changed) * if someone uploads to `/foo/bar` the path would be rewritten to `/foo/bar/2021/08/06/23` for example * but the actual value is not verified, just the structure, so the uploader can choose any values which conform to the format string * just to avoid additional complexity in up2k which is enough of a mess already @@ -1743,6 +1814,8 @@ notes: * `:c,magic` enables filetype detection for nameless uploads, same as `--magic` * needs https://pypi.org/project/python-magic/ `python3 -m pip install --user -U python-magic` * on windows grab this instead `python3 -m pip install --user -U python-magic-bin` +* `cachectl` changes how webbrowser will cache responses (the `Cache-Control` response-header); default is `no-cache` which will prevent repeated downloading of the same file unless necessary (browser will ask copyparty if the file has changed) + * adding `?cache` to a link will override this with "fully cache this for 69 seconds"; `?cache=321` is 321 seconds, and `?cache=i` is 7 days ## database location @@ -1849,7 +1922,7 @@ trigger a program on uploads, renames etc ([examples](./bin/hooks/)) you can set hooks before and/or after an event happens, and currently you can hook uploads, moves/renames, and deletes -there's a bunch of flags and stuff, see `--help-hooks` +there's a bunch of flags and stuff, see [`--help-hooks`](https://copyparty.eu/cli/#hooks-help-page) if you want to write your own hooks, see [devnotes](./docs/devnotes.md#event-hooks) @@ -2372,6 +2445,8 @@ it comes with a [systemd service](./contrib/systemd/copyparty@.service) as well after installing, start either the system service or the user service and navigate to http://127.0.0.1:3923 for further instructions (unless you already edited the config files, in which case you are good to go, probably) +> to start the systemd service, either do `systemctl start --user copyparty` to start it as your own user, or `systemctl start copyparty@bob` to use unix-user `bob` + ## fedora package @@ -2458,6 +2533,10 @@ copyparty on NixOS is configured via `services.copyparty` options, for example: ```nix services.copyparty = { enable = true; + # the user to run the service as + user = "copyparty"; + # the group to run the service as + group = "copyparty"; # directly maps to values in the [global] section of the copyparty config. # see `copyparty --help` for available options settings = { @@ -2482,6 +2561,12 @@ services.copyparty = { k.passwordFile = "/run/keys/copyparty/k_password"; }; + # create a group + groups = { + # users "ed" and "k" are part of the group g1 + g1 = [ "ed" "k" ]; + }; + # create a volume volumes = { # create a volume at "/" (the webroot), which will @@ -2574,6 +2659,17 @@ quick summary of more eccentric web-browsers trying to view a directory index:upload rejected, file already exists" in txt:
return [], False
- elif sc == 403:
+ elif sc == 403 or sc == 401:
print("\nERROR: login required, or wrong password:\n%s" % (txt,))
raise BadAuth()
@@ -979,6 +988,7 @@ class Ctl(object):
self.nfiles, self.nbytes = self.stats
self.filegen = walkdirs([], ar.files, ar.x)
self.recheck = [] # type: list[File]
+ self.last_file = None
if ar.safe:
self._safe()
@@ -1015,6 +1025,11 @@ class Ctl(object):
self._fancy()
+ file = self.last_file
+ if self.up_br and file:
+ zs = quotep(file.name.encode("utf-8", WTF8))
+ web.req("POST", file.url, {}, b"msg=upload-queue-empty;" + zs, MM)
+
self.ok = not self.errs
def _safe(self):
@@ -1225,9 +1240,7 @@ class Ctl(object):
while req:
print("DELETING ~%s#%s" % (srd, len(req)))
body = json.dumps(req).encode("utf-8")
- sc, txt = web.req(
- "POST", self.ar.url + "?delete", {}, body, MJ
- )
+ sc, txt = web.req("POST", "/?delete", {}, body, MJ)
if sc == 413 and "json 2big" in txt:
print(" (delete request too big; slicing...)")
req = req[: len(req) // 2]
@@ -1455,6 +1468,7 @@ class Ctl(object):
file = fsl.file
cids = fsl.cids
+ self.last_file = file
with self.mutex:
if not self.uploader_busy:
@@ -1538,7 +1552,8 @@ NOTE: if server has --usernames enabled, then password is "username:password"
ap.add_argument("url", type=unicode, help="server url, including destination folder")
ap.add_argument("files", type=files_decoder, nargs="+", help="files and/or folders to process")
ap.add_argument("-v", action="store_true", help="verbose")
- ap.add_argument("-a", metavar="PASSWD", help="password or $filepath")
+ ap.add_argument("-a", metavar="PASSWD", default="", help="password (or $filepath) for copyparty (is sent in header 'PW')")
+ ap.add_argument("--ba", metavar="PASSWD", default="", help="password (or $filepath) for basic-auth (usually not necessary)")
ap.add_argument("-s", action="store_true", help="file-search (disables upload)")
ap.add_argument("-x", type=unicode, metavar="REGEX", action="append", help="skip file if filesystem-abspath matches REGEX (option can be repeated), example: '.*/\\.hist/.*'")
ap.add_argument("--ok", action="store_true", help="continue even if some local files are inaccessible")
@@ -1581,6 +1596,7 @@ NOTE: if server has --usernames enabled, then password is "username:password"
ap = app.add_argument_group("tls")
ap.add_argument("-te", metavar="PATH", help="path to ca.pem or cert.pem to expect/verify")
+ ap.add_argument("-teh", action="store_true", help="require correct hostname in -te cert")
ap.add_argument("-td", action="store_true", help="disable certificate check")
# fmt: on
@@ -1676,11 +1692,15 @@ NOTE: if server has --usernames enabled, then password is "username:password"
print("\n\n %s\n\n" % (t,))
raise
- if ar.a and ar.a.startswith("$"):
- fn = ar.a[1:]
- print("reading password from file [{0}]".format(fn))
- with open(fn, "rb") as f:
- ar.a = f.read().decode("utf-8").strip()
+ for k in ("a", "ba"):
+ zs = getattr(ar, k)
+ if zs.startswith("$"):
+ print("reading password from file [%s]" % (zs[1:],))
+ with open(zs[1:], "rb") as f:
+ setattr(ar, k, f.read().decode("utf-8").strip())
+
+ if ar.ba:
+ ar.ba = "Basic " + base64.b64encode(ar.ba.encode("utf-8")).decode("utf-8")
for n in range(ar.rh):
try:
diff --git a/bin/zmq-recv.py b/bin/zmq-recv.py
index 72fa24f7..93e0c168 100755
--- a/bin/zmq-recv.py
+++ b/bin/zmq-recv.py
@@ -61,6 +61,8 @@ def rep_server():
print("copyparty says %r" % (sck.recv_string(),))
reply = b"thx"
# reply = b"return 1" # non-zero to block an upload
+ # reply = b'{"rc":1}' # or as json, that's fine too
+ # reply = b'{"rejectmsg":"naw dude"}' # or custom message
sck.send(reply)
diff --git a/contrib/README.md b/contrib/README.md
index 7256766b..e924f3db 100644
--- a/contrib/README.md
+++ b/contrib/README.md
@@ -7,6 +7,12 @@
* works on windows, linux and macos
* assumes `copyparty-sfx.py` was renamed to `copyparty.py` in the same folder as `copyparty.bat`
+### [`setup-ashell.sh`](setup-ashell.sh)
+* run copyparty on an iPhone/iPad using [a-Shell](https://holzschu.github.io/a-Shell_iOS/)
+* not very useful due to limitations in iOS:
+ * not able to share all of your phone's storage
+ * cannot run in the background
+
### [`index.html`](index.html)
* drop-in redirect from an httpd to copyparty
* assumes the webserver and copyparty is running on the same server/IP
diff --git a/contrib/nginx/copyparty.conf b/contrib/nginx/copyparty.conf
index f0d382cc..440e22c3 100644
--- a/contrib/nginx/copyparty.conf
+++ b/contrib/nginx/copyparty.conf
@@ -6,7 +6,7 @@
#
# to reverse-proxy a specific path/subpath/location below a domain
# (rather than a complete subdomain), for example "/qw/er", you must
-# run copyparty with --rp-loc /qw/as and also change the following:
+# run copyparty with --rp-loc /qw/er and also change the following:
# location / {
# proxy_pass http://cpp_tcp;
# to this:
diff --git a/contrib/nixos/modules/copyparty.nix b/contrib/nixos/modules/copyparty.nix
index 1f8242df..6bb51b68 100644
--- a/contrib/nixos/modules/copyparty.nix
+++ b/contrib/nixos/modules/copyparty.nix
@@ -48,10 +48,13 @@ let
accountsWithPlaceholders = mapAttrs (name: attrs: passwordPlaceholder name);
+ volumesWithoutVariables = filterAttrs (k: v: !(hasInfix "\${" v.path)) cfg.volumes;
+
configStr = ''
${mkSection "global" cfg.settings}
${cfg.globalExtraConfig}
${mkSection "accounts" (accountsWithPlaceholders cfg.accounts)}
+ ${mkSection "groups" cfg.groups}
${concatStringsSep "\n" (mapAttrsToList mkVolume cfg.volumes)}
'';
@@ -167,6 +170,19 @@ in
'';
};
+ groups = mkOption {
+ type = types.attrsOf (types.listOf types.str);
+ description = ''
+ A set of copyparty groups to create and the users that should be part of each group.
+ '';
+ default = { };
+ example = literalExpression ''
+ {
+ group_name = [ "user1" "user2" ];
+ };
+ '';
+ };
+
volumes = mkOption {
type = types.attrsOf (
types.submodule (
@@ -311,7 +327,7 @@ in
BindPaths =
(if cfg.settings ? hist then [ cfg.settings.hist ] else [ ])
++ [ externalStateDir ]
- ++ (mapAttrsToList (k: v: v.path) cfg.volumes);
+ ++ (mapAttrsToList (k: v: v.path) volumesWithoutVariables);
# ProtectSystem = "strict";
# Note that unlike what 'ro' implies,
# this actually makes it impossible to read anything in the root FS,
@@ -350,18 +366,32 @@ in
#: in front of things means it wont change it if the directory already exists.
group = ":${cfg.group}";
user = ":${cfg.user}";
- mode = ":755";
+ mode = ":${
+ # Use volume permissions if set
+ if (value.flags ? chmod_d) then
+ value.flags.chmod_d
+ # Else, use global permission if set
+ else if (cfg.settings ? chmod-d) then
+ cfg.settings.chmod-d
+ # Else, use the default permission
+ else
+ "755"
+ }";
};
}
- ) cfg.volumes
+ ) volumesWithoutVariables
);
- users.groups.copyparty = lib.mkIf (cfg.user == "copyparty" && cfg.group == "copyparty") { };
- users.users.copyparty = lib.mkIf (cfg.user == "copyparty" && cfg.group == "copyparty") {
- description = "Service user for copyparty";
- group = "copyparty";
- home = externalStateDir;
- isSystemUser = true;
+ users.groups = lib.mkIf (cfg.group == "copyparty") {
+ copyparty = { };
+ };
+ users.users = lib.mkIf (cfg.user == "copyparty") {
+ copyparty = {
+ description = "Service user for copyparty";
+ group = cfg.group;
+ home = externalStateDir;
+ isSystemUser = true;
+ };
};
environment.systemPackages = lib.mkIf cfg.mkHashWrapper [
(pkgs.writeShellScriptBin "copyparty-hash" ''
@@ -380,4 +410,3 @@ in
}
);
}
-
diff --git a/contrib/package/arch/PKGBUILD b/contrib/package/arch/PKGBUILD
index 49125029..6da55748 100644
--- a/contrib/package/arch/PKGBUILD
+++ b/contrib/package/arch/PKGBUILD
@@ -3,9 +3,9 @@
# NOTE: You generally shouldn't use this PKGBUILD on Arch, as it is mainly for testing purposes. Install copyparty using pacman instead.
pkgname=copyparty
-pkgver="1.19.7"
+pkgver="1.20.0"
pkgrel=1
-pkgdesc="File server with accelerated resumable uploads, dedup, WebDAV, FTP, TFTP, zeroconf, media indexer, thumbnails++"
+pkgdesc="File server with accelerated resumable uploads, dedup, WebDAV, SFTP, FTP, TFTP, zeroconf, media indexer, thumbnails++"
arch=("any")
url="https://github.com/9001/${pkgname}"
license=('MIT')
@@ -14,6 +14,7 @@ makedepends=("python-wheel" "python-setuptools" "python-build" "python-installer
optdepends=("ffmpeg: thumbnails for videos, images (slower) and audio, music tags"
"cfssl: generate TLS certificates on startup"
"python-mutagen: music tags (alternative)"
+ "python-paramiko: sftp server",
"python-pillow: thumbnails for images"
"python-pyvips: thumbnails for images (higher quality, faster, uses more ram)"
"libkeyfinder: detection of musical keys"
@@ -23,7 +24,7 @@ optdepends=("ffmpeg: thumbnails for videos, images (slower) and audio, music tag
)
source=("https://github.com/9001/${pkgname}/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz")
backup=("etc/${pkgname}/copyparty.conf" )
-sha256sums=("229476fc111de22a46d56c564d5e615bce6ce222321bcb73b336a3ead03d01f9")
+sha256sums=("a1fd3aab51f30435f07f1d128cf773262ee69a1554c9c32ea1e36d06438eb291")
build() {
cd "${srcdir}/${pkgname}-${pkgver}/copyparty/web"
diff --git a/contrib/package/makedeb-mpr/PKGBUILD b/contrib/package/makedeb-mpr/PKGBUILD
index f491eaee..2be27fb5 100644
--- a/contrib/package/makedeb-mpr/PKGBUILD
+++ b/contrib/package/makedeb-mpr/PKGBUILD
@@ -2,9 +2,9 @@
pkgname=copyparty
-pkgver=1.19.7
+pkgver=1.20.0
pkgrel=1
-pkgdesc="File server with accelerated resumable uploads, dedup, WebDAV, FTP, TFTP, zeroconf, media indexer, thumbnails++"
+pkgdesc="File server with accelerated resumable uploads, dedup, WebDAV, SFTP, FTP, TFTP, zeroconf, media indexer, thumbnails++"
arch=("any")
url="https://github.com/9001/${pkgname}"
license=('MIT')
@@ -13,6 +13,7 @@ makedepends=("python3-wheel" "python3-setuptools" "python3-build" "python3-insta
optdepends=("ffmpeg: thumbnails for videos, images (slower) and audio, music tags"
"golang-cfssl: generate TLS certificates on startup"
"python3-mutagen: music tags (alternative)"
+ "python3-paramiko: sftp server"
"python3-pil: thumbnails for images"
"python3-openssl: ftps functionality"
"python3-zmq: send zeromq messages from event-hooks"
@@ -20,7 +21,7 @@ optdepends=("ffmpeg: thumbnails for videos, images (slower) and audio, music tag
)
source=("https://github.com/9001/${pkgname}/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz")
backup=("/etc/${pkgname}.d/init" )
-sha256sums=("229476fc111de22a46d56c564d5e615bce6ce222321bcb73b336a3ead03d01f9")
+sha256sums=("a1fd3aab51f30435f07f1d128cf773262ee69a1554c9c32ea1e36d06438eb291")
build() {
cd "${srcdir}/${pkgname}-${pkgver}/copyparty/web"
diff --git a/contrib/package/makedeb-mpr/copyparty.service b/contrib/package/makedeb-mpr/copyparty.service
index 22dac3d6..e6f3b229 100644
--- a/contrib/package/makedeb-mpr/copyparty.service
+++ b/contrib/package/makedeb-mpr/copyparty.service
@@ -26,7 +26,7 @@ Environment=XDG_CONFIG_HOME=/home/cpp/.config
ExecStartPre=+/bin/bash -c 'mkdir -p /run/tmpfiles.d/ && echo "x /tmp/pe-copyparty*" > /run/tmpfiles.d/copyparty.conf'
# run copyparty
-ExecStart=/usr/bin/python3 /usr/bin/copyparty -c /etc/copyparty.d/init
+ExecStart=/usr/bin/python3 /usr/local/bin/copyparty -c /etc/copyparty.d/init
[Install]
WantedBy=multi-user.target
diff --git a/contrib/package/nix/copyparty/default.nix b/contrib/package/nix/copyparty/default.nix
index 22ae5bcd..d622ca64 100644
--- a/contrib/package/nix/copyparty/default.nix
+++ b/contrib/package/nix/copyparty/default.nix
@@ -15,6 +15,7 @@
pyzmq,
ffmpeg,
mutagen,
+ paramiko,
pyftpdlib,
magic,
partftpy,
@@ -44,6 +45,9 @@
# send ZeroMQ messages from event-hooks
withZeroMQ ? true,
+ # enable SFTP server
+ withSFTP ? false,
+
# enable FTP server
withFTP ? true,
@@ -67,24 +71,71 @@
# additional dependencies
extraPythonPackages ? (_p: [ ]),
+ # to build stable + unstable with the same file
+ stable ? true,
+
+ # for commit date, only used when stable = false
+ copypartyFlake ? null,
+
+ nix-gitignore,
}:
let
pinData = lib.importJSON ./pin.json;
runtimeDeps = ([ util-linux ] ++ extraPackages ++ lib.optional withMediaProcessing ffmpeg);
+ inherit (copypartyFlake) lastModifiedDate;
+ # ex: "1970" "01" "01"
+ dateStringsZeroPrefixed = {
+ year = builtins.substring 0 4 lastModifiedDate;
+ month = builtins.substring 4 2 lastModifiedDate;
+ day = builtins.substring 6 2 lastModifiedDate;
+ };
+ # ex: "1970" "1" "1"
+ dateStringsShort = builtins.mapAttrs (_: val: toString (lib.toIntBase10 val)) dateStringsZeroPrefixed;
+ unstableVersion =
+ if copypartyFlake == null then
+ "${pinData.version}-unstable"
+ else
+ with dateStringsZeroPrefixed; "${pinData.version}-unstable-${year}-${month}-${day}"
+ ;
+ version = if stable then pinData.version else unstableVersion;
+ stableSrc = fetchurl {
+ inherit (pinData) url hash;
+ };
+ root = ../../../..;
+ unstableSrc = nix-gitignore.gitignoreSource [] root;
+ src = if stable then stableSrc else unstableSrc;
+ rev = copypartyFlake.shortRev or copypartyFlake.dirtyShortRev or "unknown";
+ unstableCodename = "unstable" + (lib.optionalString (copypartyFlake != null) "-${rev}");
in
buildPythonApplication {
pname = "copyparty";
- inherit (pinData) version;
- src = fetchurl {
- inherit (pinData) url hash;
- };
+ inherit version src;
+ postPatch = lib.optionalString (!stable) ''
+ old_src="$(mktemp -d)"
+ tar -C "$old_src" -xf ${stableSrc}
+ declare -a folders
+ folders=("$old_src"/*)
+ count_folders="''${#folders[@]}"
+ if [[ $count_folders != 1 ]]; then
+ declare -p folders
+ echo "Expected 1 folder, found $count_folders" >&2
+ exit 1
+ fi
+ old_src_folder="''${folders[0]}"
+ cp -r "$old_src_folder"/copyparty/web/deps copyparty/web/deps
+ sed -i 's/^CODENAME =.*$/CODENAME = "${unstableCodename}"/' copyparty/__version__.py
+ ${lib.optionalString (copypartyFlake != null) (with dateStringsShort; ''
+ sed -i 's/^BUILD_DT =.*$/BUILD_DT = (${year}, ${month}, ${day})/' copyparty/__version__.py
+ '')}
+ '';
dependencies =
[
jinja2
fusepy
]
++ lib.optional withSMB impacket
+ ++ lib.optional withSFTP paramiko
++ lib.optional withFTP pyftpdlib
++ lib.optional withFTPS pyopenssl
++ lib.optional withTFTP partftpy
@@ -106,7 +157,7 @@ buildPythonApplication {
meta = {
description = "Turn almost any device into a file server";
longDescription = ''
- Portable file server with accelerated resumable uploads, dedup, WebDAV,
+ Portable file server with accelerated resumable uploads, dedup, WebDAV, SFTP,
FTP, TFTP, zeroconf, media indexer, thumbnails++ all in one file, no deps
'';
homepage = "https://github.com/9001/copyparty";
diff --git a/contrib/package/nix/copyparty/pin.json b/contrib/package/nix/copyparty/pin.json
index 02c7e1ba..53efdd47 100644
--- a/contrib/package/nix/copyparty/pin.json
+++ b/contrib/package/nix/copyparty/pin.json
@@ -1,5 +1,5 @@
{
- "url": "https://github.com/9001/copyparty/releases/download/v1.19.7/copyparty-1.19.7.tar.gz",
- "version": "1.19.7",
- "hash": "sha256-IpR2/BEd4ipG1WxWTV5hW85s4iIyG8tzszaj6tA9Afk="
+ "url": "https://github.com/9001/copyparty/releases/download/v1.20.0/copyparty-1.20.0.tar.gz",
+ "version": "1.20.0",
+ "hash": "sha256-of06q1HzBDXwfx0SjPdzJi7mmhVUycMuoeNtBkOOspE="
}
\ No newline at end of file
diff --git a/contrib/package/nix/overlay.nix b/contrib/package/nix/overlay.nix
index ca8d5c6e..d6e3a895 100644
--- a/contrib/package/nix/overlay.nix
+++ b/contrib/package/nix/overlay.nix
@@ -1,8 +1,29 @@
-final: prev: {
- copyparty = final.python3.pkgs.callPackage ./copyparty {
- ffmpeg = final.ffmpeg-full;
+final: prev:
+let
+ fullAttrs = {
+ withHashedPasswords = true;
+ withCertgen = true;
+ withThumbnails = true;
+ withFastThumbnails = true;
+ withMediaProcessing = true;
+ withBasicAudioMetadata = true;
+ withZeroMQ = true;
+ withSFTP = true;
+ withFTP = true;
+ withFTPS = true;
+ withTFTP = true;
+ withSMB = true;
+ withMagic = true;
};
+ call = attrs: final.python3.pkgs.callPackage ./copyparty ({ ffmpeg = final.ffmpeg-full; } // attrs);
+in
+{
+ copyparty = call { stable = true; };
+ copyparty-unstable = call { stable = false; };
+ copyparty-full = call (fullAttrs // { stable = true; });
+ copyparty-unstable-full = call (fullAttrs // { stable = false; });
+
python3 = prev.python3.override {
packageOverrides = pyFinal: pyPrev: {
partftpy = pyFinal.callPackage ./partftpy { };
diff --git a/contrib/package/rpm/copyparty.spec b/contrib/package/rpm/copyparty.spec
index 6d3ebb3f..69ac26ee 100644
--- a/contrib/package/rpm/copyparty.spec
+++ b/contrib/package/rpm/copyparty.spec
@@ -5,15 +5,15 @@ License: MIT
Group: Utilities
URL: https://github.com/9001/copyparty
Source0: copyparty-$pkgver.tar.gz
-Summary: File server with accelerated resumable uploads, dedup, WebDAV, FTP, TFTP, zeroconf, media indexer, thumbnails++
+Summary: File server with accelerated resumable uploads, dedup, WebDAV, SFTP, FTP, TFTP, zeroconf, media indexer, thumbnails++
BuildArch: noarch
BuildRequires: python3, python3-devel, pyproject-rpm-macros, python-setuptools, python-wheel, make
Requires: python3, (python3-jinja2 or python-jinja2), lsof
Recommends: ffmpeg, (golang-github-cloudflare-cfssl or cfssl), python-mutagen, python-pillow, python-pyvips
-Recommends: qm-vamp-plugins, python-argon2-cffi, (python-pyopenssl or pyopenssl), python-impacket
+Recommends: qm-vamp-plugins, python-argon2-cffi, (python-pyopenssl or pyopenssl), python-paramiko, python-impacket
%description
-Portable file server with accelerated resumable uploads, dedup, WebDAV, FTP, TFTP, zeroconf, media indexer, thumbnails++ all in one file, no deps
+Portable file server with accelerated resumable uploads, dedup, WebDAV, SFTP, FTP, TFTP, zeroconf, media indexer, thumbnails++ all in one file, no deps
See release at https://github.com/9001/copyparty/releases
diff --git a/contrib/plugins/README.md b/contrib/plugins/README.md
index a27d1213..32906986 100644
--- a/contrib/plugins/README.md
+++ b/contrib/plugins/README.md
@@ -39,3 +39,9 @@ point `--css-browser` to one of these by URL:
* turns copyparty into chromecast just more flexible (and probably way more buggy)
* usage: put the js somewhere in the webroot and `--js-browser /memes/meadup.js`
+
+
+
+# junk
+
+* [**rave.js**](./rave.js): april-fools joke, [demo (epilepsy warning)](https://cd.ocv.me/b/d2/d21/#af-9b927c42,sorthref), not maintained, very buggy
\ No newline at end of file
diff --git a/contrib/podman-systemd/README.md b/contrib/podman-systemd/README.md
new file mode 100644
index 00000000..02d1a73c
--- /dev/null
+++ b/contrib/podman-systemd/README.md
@@ -0,0 +1,173 @@
+# copyparty with Podman and Systemd
+
+Use this configuration if you want to run copyparty in a Podman container, with the reliability of running the container under a systemd service.
+
+Documentation for `.container` files can be found in the [Container unit](https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html#container-units-container) docs. Systemd does not understand `.container` files natively, so Podman converts these to `.service` files with a [systemd-generator](https://www.freedesktop.org/software/systemd/man/latest/systemd.generator.html). This process is transparent, but sometimes needs to be debugged in case your `.container` file is malformed. There are instructions to debug the systemd generator in the Troubleshooting section below.
+
+To run copyparty in this way, you must already have podman installed. To install Podman, see: https://podman.io/docs/installation
+
+There is a sample configuration file in the same directory as this file (`copyparty.conf`).
+
+## Run the container as root
+
+Running the container as the root user is easy to set up, but less secure. There are instructions in the next section to run the container as a rootless user if you'd rather run the container like that.
+
+First, change this line in the `copyparty.container` file to reflect the directory you want to share. By default, it shares `/mnt/` but you'll probably want to change that.
+
+```
+# Change /mnt to something you want to share
+Volume=/mnt:/w:z
+```
+
+Note that you can select the owner and group of this volume by changing the `uid:` and `gid:` of the volume in `copyparty.conf`, but for simplicity let's assume you want it to be owned by `root:root`.
+
+To install and start copyparty with Podman and systemd as the root user, run the following:
+
+```shell
+sudo mkdir -pv /etc/containers/systemd/ /etc/copyparty/
+sudo cp -v copyparty.container /etc/containers/systemd/
+sudo cp -v copyparty.conf /etc/copyparty/
+sudo systemctl daemon-reload
+sudo systemctl start copyparty
+```
+
+Note: You can't "enable" this kind of Podman service. The `[Install]` section of the `.container` file effectively handles enabling the service so that it starts when the server reboots.
+
+You can see the status of the service with:
+
+```shell
+sudo systemctl status -a copyparty
+```
+
+You can see (and follow) the logs with either of these commands:
+
+```shell
+sudo podman logs -f copyparty
+
+# -a is required or else you'll get output like: copyparty[549025]: [649B blob data]
+sudo journalctl -a -f -u copyparty
+```
+
+## Run the container as a non-root user
+
+This configuration is more secure, but is more involved and requires ensuring files have proper permissions. You will need a root user account to do some of this setup.
+
+First, you need a user to run the container as. In this example we'll create a "podman" user with UID=1001 and GID=1001.
+
+```shell
+sudo groupadd -g 1001 podman
+sudo useradd -u 1001 -m podman
+sudo usermod -aG podman podman
+sudo loginctl enable-linger podman
+# Set a strong password for this user
+sudo -u podman passwd
+```
+
+The `enable-linger` command allows the podman user to run systemd user services that persist even when the user is not logged in. You could use a user that already exists in the system to run this service as, just make sure to run `loginctl enable-linger USERNAME` for that user.
+
+Next, change these lines in the `copyparty.container` file to reflect the config directory and the directory you want to share. By default, the config shares `/home/podman/copyparty/sharing/` but you'll probably want to change this:
+
+```
+# Change to reflect your non-root user's home directory
+Volume=/home/podman/copyparty/config:/cfg:z
+
+# Change to the directory you want to share
+Volume=/home/podman/copyparty/sharing:/w:z
+```
+
+Make sure the podman user has read/write access to both of these directories.
+
+Next, **log in to the server as the podman user**.
+
+To install and start copyparty as the non-root podman user, run the following:
+
+```shell
+mkdir -pv /home/podman/.config/containers/systemd/ /home/podman/copyparty/config
+cp -v copyparty.container /home/podman/.config/containers/systemd/copyparty.container
+cp -v copyparty.conf /home/podman/copyparty/config
+systemctl --user daemon-reload
+systemctl --user start copyparty
+```
+
+**Important note: Never use `sudo` with `systemctl --user`!**
+
+You can check the status of the user service with:
+
+```shell
+systemctl --user status -a copyparty
+```
+
+You can see (and follow) the logs with:
+
+```shell
+podman logs -f copyparty
+
+journalctl --user -a -f -u copyparty
+```
+
+## Troubleshooting
+
+If the container fails to start, and you've modified the `.container` service, it's likely that your `.container` file failed to be translated into a `.service` file. You can debug the podman service generator with this command:
+
+```shell
+sudo /usr/lib/systemd/system-generators/podman-system-generator --dryrun
+```
+
+## Allowing Traffic from Outside your Server
+
+To allow traffic on port 3923 of your server, you should run:
+
+```shell
+sudo firewall-cmd --permanent --add-port=3923/tcp
+sudo firewall-cmd --reload
+```
+
+Otherwise, you won't be able to access the copyparty server from anywhere other than the server itself.
+
+## Updating copyparty
+
+To update the version of copyparty used in the container, you can:
+
+```shell
+# If root:
+sudo podman pull docker.io/copyparty/ac:latest
+sudo systemctl restart copyparty
+
+# If non-root:
+podman pull docker.io/copyparty/ac:latest
+systemctl --user restart copyparty
+```
+
+Or, you can change the pinned version of the image in the `[Container]` section of the `.container` file and run:
+
+```shell
+# If root:
+sudo systemctl daemon-reload
+sudo systemctl restart copyparty
+
+# If non-root:
+systemctl --user daemon-reload
+systemctl --user restart copyparty
+```
+
+Podman will pull the image you've specified when restarting. If you have it set to `:latest`, Podman does not know to re-pull the container.
+
+### Enabling auto-update
+
+Alternatively, you can enable auto-updates by un-commenting this line:
+
+```
+# AutoUpdate=registry
+```
+
+You will also need to enable the [podman auto-updater service](https://docs.podman.io/en/latest/markdown/podman-auto-update.1.html) with:
+
+```shell
+# If root:
+sudo systemctl enable podman-auto-update.timer podman-auto-update.service
+
+# If non-root:
+systemctl --user enable podman-auto-update.timer podman-auto-update.service
+```
+
+This works best if you always want the latest version of copyparty. The auto-updater runs once every 24 hours.
diff --git a/contrib/podman-systemd/copyparty.conf b/contrib/podman-systemd/copyparty.conf
new file mode 100644
index 00000000..350adaae
--- /dev/null
+++ b/contrib/podman-systemd/copyparty.conf
@@ -0,0 +1,36 @@
+[global]
+ e2dsa # enable file indexing and filesystem scanning
+ e2ts # and enable multimedia indexing
+ ansi # and colors in log messages
+
+ # uncomment the line starting with q, lo: to log to a file instead of stdout/journalctl;
+ # $LOGS_DIRECTORY is usually /var/log/copyparty (comes from systemd)
+ # and copyparty replaces %Y-%m%d with Year-MonthDay, so the
+ # full path will be something like /var/log/copyparty/2023-1130.txt
+ # (note: enable compression by adding .xz at the end)
+ # q, lo: $LOGS_DIRECTORY/%Y-%m%d.log
+
+ # p: 80,443,3923 # listen on 80/443 as well (requires CAP_NET_BIND_SERVICE)
+ # i: 127.0.0.1 # only allow connections from localhost (reverse-proxies)
+ # ftp: 3921 # enable ftp server on port 3921
+ # p: 3939 # listen on another port
+ # df: 16 # stop accepting uploads if less than 16 GB free disk space
+ # ver # show copyparty version in the controlpanel
+ # grid # show thumbnails/grid-view by default
+ # theme: 2 # monokai
+ # name: datasaver # change the server-name that's displayed in the browser
+ # stats, nos-dup # enable the prometheus endpoint, but disable the dupes counter (too slow)
+ # no-robots, force-js # make it harder for search engines to read your server
+
+
+[accounts]
+ ed: wark # username: password
+
+
+[/] # create a volume at "/" (the webroot), which will
+ /w # share the contents of the "/w" folder
+ accs:
+ rw: * # everyone gets read-write access, but
+ rwmda: ed # the user "ed" gets read-write-move-delete-admin
+ # uid: 1000 # If you're running as root, you can change the owner of this volume here
+ # gid: 1000 # If you're running as root, you can change the group of this volume here
diff --git a/contrib/podman-systemd/copyparty.container b/contrib/podman-systemd/copyparty.container
new file mode 100644
index 00000000..1f354279
--- /dev/null
+++ b/contrib/podman-systemd/copyparty.container
@@ -0,0 +1,55 @@
+[Container]
+# It's recommended to replace :latest with a specific version
+# for example: docker.io/copyparty/ac:1.19.15
+Image=docker.io/copyparty/ac:latest
+ContainerName=copyparty
+
+# Uncomment to enable auto-updates
+# AutoUpdate=registry
+
+# Environment variables
+# enable mimalloc by replacing "NOPE" with "2" for a nice speed-boost (will use twice as much ram)
+Environment=LD_PRELOAD=/usr/lib/libmimalloc-secure.so.NOPE
+# ensures log-messages are not delayed (but can reduce speed a tiny bit)
+Environment=PYTHONUNBUFFERED=1
+
+# Ports
+PublishPort=3923:3923
+
+
+# Volumes (PLEASE LOOK!)
+
+# Rootful setup:
+# Leave as-is
+# Non-root setup:
+# Change /etc/copyparty to /home//copyparty/config
+Volume=/etc/copyparty:/cfg:z
+
+# Rootful setup:
+# Change /mnt to the directory you want to share
+# Non-root setup:
+# Change /mnt to something owned by your user, e.g., /home//copyparty/sharing:/w:z
+Volume=/mnt:/w:z
+
+
+# Give the container time to stop in case the thumbnailer is still running.
+# It's allowed to continue finishing up for 10s after the shutdown signal, give it a 5s buffer
+StopTimeout=15
+
+# hide it from logs with "/._" so it matches the default --lf-url filter
+HealthCmd="wget --spider -q 127.0.0.1:3923/?reset=/._"
+HealthInterval=1m
+HealthTimeout=2s
+HealthRetries=5
+HealthStartPeriod=15s
+
+[Unit]
+After=default.target
+
+[Install]
+# Start by default on boot
+WantedBy=default.target
+
+[Service]
+# Give the container time to start in case it needs to pull the image
+TimeoutStartSec=600
diff --git a/contrib/rc/copyparty b/contrib/rc/copyparty
index 0f3bc80c..7fcc4e88 100644
--- a/contrib/rc/copyparty
+++ b/contrib/rc/copyparty
@@ -10,7 +10,7 @@ name="copyparty"
rcvar="copyparty_enable"
copyparty_user="copyparty"
copyparty_args="-e2dsa -v /storage:/storage:r" # change as you see fit
-copyparty_command="/usr/local/bin/python3.9 /usr/local/copyparty/copyparty-sfx.py ${copyparty_args}"
+copyparty_command="/usr/local/bin/python3.11 /usr/local/copyparty/copyparty-sfx.py ${copyparty_args}"
pidfile="/var/run/copyparty/${name}.pid"
command="/usr/sbin/daemon"
command_args="-P ${pidfile} -r -f ${copyparty_command}"
diff --git a/contrib/setup-ashell.sh b/contrib/setup-ashell.sh
index 006da444..0883aff3 100644
--- a/contrib/setup-ashell.sh
+++ b/contrib/setup-ashell.sh
@@ -6,7 +6,7 @@
# https://apps.apple.com/us/app/a-shell/id1473805438
#
# step 2: copypaste the following command into a-Shell:
-# curl https://github.com/9001/copyparty/raw/refs/heads/hovudstraum/contrib/setup-ashell.sh
+# curl -L https://github.com/9001/copyparty/raw/refs/heads/hovudstraum/contrib/setup-ashell.sh | sh
#
# step 3: launch copyparty with this command: cpp
#
diff --git a/copyparty/__init__.py b/copyparty/__init__.py
index f9e7da5b..ed48dc50 100644
--- a/copyparty/__init__.py
+++ b/copyparty/__init__.py
@@ -55,7 +55,7 @@ except:
zs = """
web/a/partyfuse.py
web/a/u2c.py
-web/a/webdav-cfg.bat
+web/a/webdav-cfg.txt
web/baguettebox.js
web/browser.css
web/browser.html
@@ -86,8 +86,8 @@ web/md2.js
web/mde.css
web/mde.html
web/mde.js
-web/msg.css
web/msg.html
+web/opds.xml
web/rups.css
web/rups.html
web/rups.js
@@ -99,12 +99,37 @@ web/splash.html
web/splash.js
web/svcs.html
web/svcs.js
+web/tl/chi.js
+web/tl/cze.js
+web/tl/deu.js
+web/tl/epo.js
+web/tl/fin.js
+web/tl/fra.js
+web/tl/grc.js
+web/tl/ita.js
+web/tl/kor.js
+web/tl/nld.js
+web/tl/nno.js
+web/tl/nor.js
+web/tl/pol.js
+web/tl/por.js
+web/tl/rus.js
+web/tl/spa.js
+web/tl/swe.js
+web/tl/tur.js
+web/tl/ukr.js
+web/tl/vie.js
web/ui.css
web/up2k.js
web/util.js
web/w.hash.js
"""
RES = set(zs.strip().split("\n"))
+RESM = {
+ "web/a/partyfuse.txt": "web/a/partyfuse.py",
+ "web/a/u2c.txt": "web/a/u2c.py",
+ "web/a/webdav-cfg.bat": "web/a/webdav-cfg.txt",
+}
class EnvParams(object):
diff --git a/copyparty/__main__.py b/copyparty/__main__.py
index 9751fb26..ede8472b 100644
--- a/copyparty/__main__.py
+++ b/copyparty/__main__.py
@@ -48,6 +48,7 @@ from .util import (
HAVE_IPV6,
IMPLICATIONS,
JINJA_VER,
+ MIKO_VER,
MIMES,
PARTFTPY_VER,
PY_DESC,
@@ -649,8 +650,11 @@ def get_sects():
if no accounts or volumes are configured,
current folder will be read/write for everyone
- the group @acct will always have every user with an account
- (the name of that group can be changed with --grp-all)
+ the group \033[33m@acct\033[0m will always have every user with an account
+ (the name of that group can be changed with \033[32m--grp-all\033[0m)
+
+ to hide a volume from authenticated users, specify \033[33m*,-@acct\033[0m
+ to subtract \033[33m@acct\033[0m from \033[33m*\033[0m (can subtract users from groups too)
consider the config file for more flexible account/volume management,
including dynamic reload at runtime (and being more readable w)
@@ -672,12 +676,12 @@ def get_sects():
send the password in the '\033[36mPW\033[0m' http-header:
\033[36mPW: \033[35mhunter2\033[0m
- or if you have \033[33m--accounts\033[0m enabled,
+ or if you have \033[33m--usernames\033[0m enabled,
\033[36mPW: \033[35med:hunter2\033[0m
send the password in the URL itself:
\033[36mhttp://127.0.0.1:3923/\033[35m?pw=hunter2\033[0m
- or if you have \033[33m--accounts\033[0m enabled,
+ or if you have \033[33m--usernames\033[0m enabled,
\033[36mhttp://127.0.0.1:3923/\033[35m?pw=ed:hunter2\033[0m
use basic-authentication:
@@ -806,16 +810,19 @@ def get_sects():
\033[0m
hooks specified as commandline --args are appended to volflags;
each commandline --arg and volflag can be specified multiple times,
- each hook will execute in order unless one returns non-zero
+ each hook will execute in order unless one returns non-zero, or
+ "100" which means "stop daisychaining and return 0 (success/OK)"
optionally prefix the command with comma-sep. flags similar to -mtp:
\033[36mf\033[35m forks the process, doesn't wait for completion
\033[36mc\033[35m checks return code, blocks the action if non-zero
\033[36mj\033[35m provides json with info as 1st arg instead of filepath
+ \033[36ms\033[35m provides input data on stdin (instead of 1st arg)
\033[36mwN\033[35m waits N sec after command has been started before continuing
\033[36mtN\033[35m sets an N sec timeout before the command is abandoned
\033[36miN\033[35m xiu only: volume must be idle for N sec (default = 5)
+ \033[36mI\033[35m import and run as module, not as subprocess
\033[36mar\033[35m only run hook if user has read-access
\033[36marw\033[35m only run hook if user has read-write-access
@@ -845,6 +852,9 @@ def get_sects():
the \033[33m--\033[35m stops notify-send from reading the message as args
and the alert will be "hey" followed by the messagetext
+ \033[36m--xm s,,tee,-a,log.txt\033[35m appends each msg to log.txt;
+ \033[36m--xm s,j,,tee,-a,log.txt\033[35m writes it as json instead
+
\033[36m--xau zmq:pub:tcp://*:5556\033[35m announces uploads on zeromq;
\033[36m--xau t3,zmq:push:tcp://*:5557\033[35m also works, and you can
\033[36m--xau t3,j,zmq:req:tcp://localhost:5555\033[35m too for example
@@ -854,7 +864,8 @@ def get_sects():
as soon as the volume has been idle for iN seconds (5 by default)
\033[36mxiu\033[0m is also unique in that it will pass the metadata to the
- executed program on STDIN instead of as argv arguments, and
+ executed program on STDIN instead of as argv arguments (so
+ just like the \033[36ms\033[0m option does for the other hook types), and
it also includes the wark (file-id/hash) as a json property
\033[36mxban\033[0m can be used to overrule / cancel a user ban event;
@@ -865,6 +876,12 @@ def get_sects():
on new uploads, but with certain limitations. See
bin/hooks/reloc* and docs/devnotes.md#hook-effects
+ the \033[36mI\033[0m option will override most other options, because
+ it entirely hands over control to the hook, which is
+ then able to tamper with copyparty's internal memory
+ and wreck havoc if it wants to -- but this is worh it
+ because it makes the hook 140x faster
+
except for \033[36mxm\033[0m, only one hook / one action can run at a time,
so it's recommended to use the \033[36mf\033[0m flag unless you really need
to wait for the hook to finish before continuing (without \033[36mf\033[0m
@@ -956,7 +973,7 @@ def get_sects():
\033[36m{{vf.thsize}} \033[35mthumbnail size
\033[36m{{srv.itime}} \033[35mserver time in seconds
\033[36m{{srv.htime}} \033[35mserver time as YY-mm-dd, HH:MM:SS (UTC)
- \033[36m{{hdr.cf_ipcountry}} \033[35mthe "CF-IPCountry" client header (probably blank)
+ \033[36m{{hdr.cf-ipcountry}} \033[35mthe "CF-IPCountry" client header (probably blank)
\033[0m
so the following types of placeholders can be added to the lists:
* any client header can be accessed through {{hdr.*}}
@@ -1145,7 +1162,6 @@ def add_general(ap, nc, srvname):
ap2 = ap.add_argument_group("general options")
ap2.add_argument("-c", metavar="PATH", type=u, default=CFG_DEF, action="append", help="\033[34mREPEATABLE:\033[0m add config file")
ap2.add_argument("-nc", metavar="NUM", type=int, default=nc, help="max num clients")
- ap2.add_argument("-j", metavar="CORES", type=int, default=1, help="max num cpu cores, 0=all")
ap2.add_argument("-a", metavar="ACCT", type=u, action="append", help="\033[34mREPEATABLE:\033[0m add account, \033[33mUSER\033[0m:\033[33mPASS\033[0m; example [\033[32med:wark\033[0m]")
ap2.add_argument("-v", metavar="VOL", type=u, action="append", help="\033[34mREPEATABLE:\033[0m add volume, \033[33mSRC\033[0m:\033[33mDST\033[0m:\033[33mFLAG\033[0m; examples [\033[32m.::r\033[0m], [\033[32m/mnt/nas/music:/music:r:aed\033[0m], see --help-accounts")
ap2.add_argument("--grp", metavar="G:N,N", type=u, action="append", help="\033[34mREPEATABLE:\033[0m add group, \033[33mNAME\033[0m:\033[33mUSER1\033[0m,\033[33mUSER2\033[0m,\033[33m...\033[0m; example [\033[32madmins:ed,foo,bar\033[0m]")
@@ -1155,11 +1171,15 @@ def add_general(ap, nc, srvname):
ap2.add_argument("--urlform", metavar="MODE", type=u, default="print,xm", help="how to handle url-form POSTs; see \033[33m--help-urlform\033[0m")
ap2.add_argument("--wintitle", metavar="TXT", type=u, default="cpp @ $pub", help="server terminal title, for example [\033[32m$ip-10.1.2.\033[0m] or [\033[32m$ip-]")
ap2.add_argument("--name", metavar="TXT", type=u, default=srvname, help="server name (displayed topleft in browser and in mDNS)")
+ ap2.add_argument("--name-url", metavar="TXT", type=u, help="URL for server name hyperlink (displayed topleft in browser)")
+ ap2.add_argument("--name-html", type=u, help=argparse.SUPPRESS)
ap2.add_argument("--mime", metavar="EXT=MIME", type=u, action="append", help="\033[34mREPEATABLE:\033[0m map file \033[33mEXT\033[0mension to \033[33mMIME\033[0mtype, for example [\033[32mjpg=image/jpeg\033[0m]")
ap2.add_argument("--mimes", action="store_true", help="list default mimetype mapping and exit")
ap2.add_argument("--rmagic", action="store_true", help="do expensive analysis to improve accuracy of returned mimetypes; will make file-downloads, rss, and webdav slower (volflag=rmagic)")
+ ap2.add_argument("-j", metavar="CORES", type=int, default=1, help="num cpu-cores for uploads/downloads (0=all); keeping the default is almost always best")
ap2.add_argument("--license", action="store_true", help="show licenses and exit")
ap2.add_argument("--version", action="store_true", help="show versions and exit")
+ ap2.add_argument("--versionb", action="store_true", help="show version and exit")
def add_qr(ap, tty):
@@ -1177,11 +1197,15 @@ def add_qr(ap, tty):
ap2.add_argument("--qr-every", metavar="SEC", type=float, default=0, help="print the qr-code every \033[33mSEC\033[0m (try this with/without --qr-pin in case of issues)")
ap2.add_argument("--qr-winch", metavar="SEC", type=float, default=0, help="when --qr-pin is enabled, check for terminal size change every \033[33mSEC\033[0m")
ap2.add_argument("--qr-file", metavar="TXT", type=u, action="append", help="\033[34mREPEATABLE:\033[0m write qr-code to file.\n โโTo create txt or svg, \033[33mTXT\033[0m is Filepath:Zoom:Pad, for example [\033[32mqr.txt:1:2\033[0m]\n โโTo create png or gif, \033[33mTXT\033[0m is Filepath:Zoom:Pad:Foreground:Background, for example [\033[32mqr.png:8:2:333333:ffcc55\033[0m], or [\033[32mqr.png:8:2::ffcc55\033[0m] for transparent")
+ ap2.add_argument("--qr-stdout", action="store_true", help="always display the QR-code on STDOUT in the terminal, even if \033[33m-q\033[0m")
+ ap2.add_argument("--qr-stderr", action="store_true", help="always display the QR-code on STDERR in the terminal, even if \033[33m-q\033[0m")
def add_fs(ap):
ap2 = ap.add_argument_group("filesystem options")
rm_re_def = "15/0.1" if ANYWIN else "0/0"
+ ap2.add_argument("--casechk", metavar="N", type=u, default="auto", help="detect and prevent CI (case-insensitive) behavior if the underlying filesystem is CI? [\033[32my\033[0m] = detect and prevent, [\033[32mn\033[0m] = ignore and allow, [\033[32mauto\033[0m] = \033[32my\033[0m if CI fs detected. NOTE: \033[32my\033[0m is very slow but necessary for correct WebDAV behavior on Windows/Macos (volflag=casechk)")
+ ap2.add_argument("--fsnt", metavar="OS", type=u, default="auto", help="which characters to allow in file/folder names; [\033[32mwin\033[0m] = windows (not <>:|?*\"\\/), [\033[32mmac\033[0m] = macos (not :), [\033[32mlin\033[0m] = linux (anything goes) (volflag=fsnt)")
ap2.add_argument("--rm-retry", metavar="T/R", type=u, default=rm_re_def, help="if a file cannot be deleted because it is busy, continue trying for \033[33mT\033[0m seconds, retry every \033[33mR\033[0m seconds; disable with 0/0 (volflag=rm_retry)")
ap2.add_argument("--mv-retry", metavar="T/R", type=u, default=rm_re_def, help="if a file cannot be renamed because it is busy, continue trying for \033[33mT\033[0m seconds, retry every \033[33mR\033[0m seconds; disable with 0/0 (volflag=mv_retry)")
ap2.add_argument("--iobuf", metavar="BYTES", type=int, default=256*1024, help="file I/O buffer-size; if your volumes are on a network drive, try increasing to \033[32m524288\033[0m or even \033[32m4194304\033[0m (and let me know if that improves your performance)")
@@ -1193,6 +1217,7 @@ def add_share(ap):
ap2 = ap.add_argument_group("share-url options")
ap2.add_argument("--shr", metavar="DIR", type=u, default="", help="toplevel virtual folder for shared files/folders, for example [\033[32m/share\033[0m]")
ap2.add_argument("--shr-db", metavar="FILE", type=u, default=db_path, help="database to store shares in")
+ ap2.add_argument("--shr-who", metavar="TXT", type=u, default="auth", help="who can create a share? [\033[32mno\033[0m]=nobody, [\033[32ma\033[0m]=admin-permission, [\033[32mauth\033[0m]=authenticated (volflag=shr_who)")
ap2.add_argument("--shr-adm", metavar="U,U", type=u, default="", help="comma-separated list of users allowed to view/delete any share")
ap2.add_argument("--shr-rt", metavar="MIN", type=int, default=1440, help="shares can be revived by their owner if they expired less than MIN minutes ago; [\033[32m60\033[0m]=hour, [\033[32m1440\033[0m]=day, [\033[32m10080\033[0m]=week")
ap2.add_argument("--shr-v", action="store_true", help="debug")
@@ -1207,6 +1232,7 @@ def add_upload(ap):
ap2.add_argument("--bup-ck", metavar="ALG", type=u, default="sha512", help="default checksum-hasher for bup/basic-uploader: no / md5 / sha1 / sha256 / sha512 / b2 / blake2 / b2s / blake2s (volflag=bup_ck)")
ap2.add_argument("--unpost", metavar="SEC", type=int, default=3600*12, help="grace period where uploads can be deleted by the uploader, even without delete permissions; 0=disabled, default=12h")
ap2.add_argument("--unp-who", metavar="NUM", type=int, default=1, help="clients can undo recent uploads by using the unpost tab (requires \033[33m-e2d\033[0m). [\033[32m0\033[0m] = never allowed (disable feature), [\033[32m1\033[0m] = allow if client has the same IP as the upload AND is using the same account, [\033[32m2\033[0m] = just check the IP, [\033[32m3\033[0m] = just check account-name (volflag=unp_who)")
+ ap2.add_argument("--apnd-who", metavar="NUM", type=u, default="dw", help="who can append to existing files? [\033[32mno\033[0m]=nobody, [\033[32maw\033[0m]=admin+write, [\033[32mdw\033[0m]=delete+write, [\033[32mw\033[0m]=write (volflag=apnd_who)")
ap2.add_argument("--u2abort", metavar="NUM", type=int, default=1, help="clients can abort incomplete uploads by using the unpost tab (requires \033[33m-e2d\033[0m). [\033[32m0\033[0m] = never allowed (disable feature), [\033[32m1\033[0m] = allow if client has the same IP as the upload AND is using the same account, [\033[32m2\033[0m] = just check the IP, [\033[32m3\033[0m] = just check account-name (volflag=u2abort)")
ap2.add_argument("--blank-wt", metavar="SEC", type=int, default=300, help="file write grace period (any client can write to a blank file last-modified more recently than \033[33mSEC\033[0m seconds ago)")
ap2.add_argument("--reg-cap", metavar="N", type=int, default=38400, help="max number of uploads to keep in memory when running without \033[33m-e2d\033[0m; roughly 1 MiB RAM per 600")
@@ -1216,17 +1242,21 @@ def add_upload(ap):
ap2.add_argument("--chmod-d", metavar="UGO", type=u, default="755", help="unix file permissions to use when creating directories; see --help-chmod. Examples: [\033[32m755\033[0m] = owner-RW + all-R, [\033[32m777\033[0m] = full-yolo (volflag=chmod_d)")
ap2.add_argument("--uid", metavar="N", type=int, default=-1, help="unix user-id to chown new files/folders to; default = -1 = do-not-change (volflag=uid)")
ap2.add_argument("--gid", metavar="N", type=int, default=-1, help="unix group-id to chown new files/folders to; default = -1 = do-not-change (volflag=gid)")
+ ap2.add_argument("--wram", action="store_true", help="allow uploading even if a volume is inside a ramdisk, meaning that all data will be lost on the next server reboot (volflag=wram)")
ap2.add_argument("--dedup", action="store_true", help="enable symlink-based upload deduplication (volflag=dedup)")
ap2.add_argument("--safe-dedup", metavar="N", type=int, default=50, help="how careful to be when deduplicating files; [\033[32m1\033[0m] = just verify the filesize, [\033[32m50\033[0m] = verify file contents have not been altered (volflag=safededup)")
ap2.add_argument("--hardlink", action="store_true", help="enable hardlink-based dedup; will fallback on symlinks when that is impossible (across filesystems) (volflag=hardlink)")
ap2.add_argument("--hardlink-only", action="store_true", help="do not fallback to symlinks when a hardlink cannot be made (volflag=hardlinkonly)")
ap2.add_argument("--reflink", action="store_true", help="enable reflink-based dedup; will fallback on full copies when that is impossible (non-CoW filesystem) (volflag=reflink)")
ap2.add_argument("--no-dupe", action="store_true", help="reject duplicate files during upload; only matches within the same volume (volflag=nodupe)")
+ ap2.add_argument("--no-dupe-m", action="store_true", help="also reject dupes when moving a file into another volume (volflag=nodupem)")
ap2.add_argument("--no-clone", action="store_true", help="do not use existing data on disk to satisfy dupe uploads; reduces server HDD reads in exchange for much more network load (volflag=noclone)")
ap2.add_argument("--no-snap", action="store_true", help="disable snapshots -- forget unfinished uploads on shutdown; don't create .hist/up2k.snap files -- abandoned/interrupted uploads must be cleaned up manually")
ap2.add_argument("--snap-wri", metavar="SEC", type=int, default=300, help="write upload state to ./hist/up2k.snap every \033[33mSEC\033[0m seconds; allows resuming incomplete uploads after a server crash")
ap2.add_argument("--snap-drop", metavar="MIN", type=float, default=1440.0, help="forget unfinished uploads after \033[33mMIN\033[0m minutes; impossible to resume them after that (360=6h, 1440=24h)")
+ ap2.add_argument("--rm-partial", action="store_true", help="delete the .PARTIAL file when an unfinished upload expires after \033[33m--snap-drop\033[0m (volflag=rm_partial)")
ap2.add_argument("--u2ts", metavar="TXT", type=u, default="c", help="how to timestamp uploaded files; [\033[32mc\033[0m]=client-last-modified, [\033[32mu\033[0m]=upload-time, [\033[32mfc\033[0m]=force-c, [\033[32mfu\033[0m]=force-u (volflag=u2ts)")
+ ap2.add_argument("--rotf-tz", metavar="TXT", type=u, default="UTC", help="default timezone for the rotf upload rule; examples: [\033[32mEurope/Oslo\033[0m], [\033[32mAmerica/Toronto\033[0m], [\033[32mAntarctica/South_Pole\033[0m] (volflag=rotf_tz)")
ap2.add_argument("--rand", action="store_true", help="force randomized filenames, \033[33m--nrand\033[0m chars long (volflag=rand)")
ap2.add_argument("--nrand", metavar="NUM", type=int, default=9, help="randomized filenames length (volflag=nrand)")
ap2.add_argument("--magic", action="store_true", help="enable filetype detection on nameless uploads (volflag=magic)")
@@ -1248,9 +1278,16 @@ def add_network(ap):
ap2.add_argument("--ll", action="store_true", help="include link-local IPv4/IPv6 in mDNS replies, even if the NIC has routable IPs (breaks some mDNS clients)")
ap2.add_argument("--rproxy", metavar="DEPTH", type=int, default=9999999, help="which ip to associate clients with; [\033[32m0\033[0m]=tcp, [\033[32m1\033[0m]=origin (first x-fwd, unsafe), [\033[32m-1\033[0m]=closest-proxy, [\033[32m-2\033[0m]=second-hop, [\033[32m-3\033[0m]=third-hop")
ap2.add_argument("--xff-hdr", metavar="NAME", type=u, default="x-forwarded-for", help="if reverse-proxied, which http header to read the client's real ip from")
+ ap2.add_argument("--xf-host", metavar="NAME", type=u, default="x-forwarded-host", help="if reverse-proxied, which http header to read the correct Host value from; this header must contain the server's external domain name")
+ ap2.add_argument("--xf-proto", metavar="NAME", type=u, default="x-forwarded-proto", help="if reverse-proxied, which http header to read the correct protocol value from; this header must contain either 'http' or 'https'")
+ ap2.add_argument("--xf-proto-fb", metavar="T", type=u, default="", help="protocol to assume if the X-Forwarded-Proto header (\033[33m--xf-proto\033[0m) is not provided by the reverseproxy; either 'http' or 'https'")
ap2.add_argument("--xff-src", metavar="CIDR", type=u, default="127.0.0.0/8, ::1/128", help="list of trusted reverse-proxy CIDRs (comma-separated); only accept the real-ip header (\033[33m--xff-hdr\033[0m) and IdP headers if the incoming connection is from an IP within either of these subnets. Specify [\033[32mlan\033[0m] to allow all LAN / private / non-internet IPs. Can be disabled with [\033[32many\033[0m] if you are behind cloudflare (or similar) and are using \033[32m--xff-hdr=cf-connecting-ip\033[0m (or similar)")
- ap2.add_argument("--ipa", metavar="CIDR", type=u, default="", help="only accept connections from IP-addresses inside \033[33mCIDR\033[0m (comma-separated); examples: [\033[32mlan\033[0m] or [\033[32m10.89.0.0/16, 192.168.33.0/24\033[0m]")
+ ap2.add_argument("--ipa", metavar="CIDR", type=u, default="", help="only accept connections from IP-addresses inside \033[33mCIDR\033[0m (comma-separated); examples: [\033[32mlan\033[0m] or [\033[32m10.89.0.0/16, 192.168.33.0/24\033[0m]\n โโfor performance and security, this only looks at the TCP/Network-level IP, and will NOT work behind a reverseproxy")
+ ap2.add_argument("--ipar", metavar="CIDR", type=u, default="", help="only accept connections from IP-addresses inside \033[33mCIDR\033[0m (comma-separated).\n โโthis is reverseproxy-compatible; reads client-IP from 'X-Forwarded-For' if possible, with TCP/Network IP as fallback")
ap2.add_argument("--rp-loc", metavar="PATH", type=u, default="", help="if reverse-proxying on a location instead of a dedicated domain/subdomain, provide the base location here; example: [\033[32m/foo/bar\033[0m]")
+ ap2.add_argument("--cachectl", metavar="TXT", default="no-cache", help="default-value of the 'Cache-Control' response-header (controls caching in webbrowsers). Default prevents repeated downloading of the same file unless necessary (browser will ask copyparty if the file has changed). Examples: [\033[32mmax-age=604869\033[0m] will cache for 7 days, [\033[32mno-store, max-age=0\033[0m] will always redownload. (volflag=cachectl)")
+ ap2.add_argument("--http-vary", metavar="TXT", type=u, default="Origin, PW, Cookie", help="value of the 'Vary' response-header; a hint for caching proxies")
+ ap2.add_argument("--http-no-tcp", action="store_true", help="do not listen on TCP/IP for http/https; only listen on unix-domain-sockets")
if ANYWIN:
ap2.add_argument("--reuseaddr", action="store_true", help="set reuseaddr on listening sockets on windows; allows rapid restart of copyparty at the expense of being able to accidentally start multiple instances")
elif not MACOS:
@@ -1305,6 +1342,7 @@ def add_auth(ap):
ap2.add_argument("--idp-h-grp", metavar="HN", type=u, default="", help="assume the request-header \033[33mHN\033[0m contains the groupname of the requesting user; can be referenced in config files for group-based access control")
ap2.add_argument("--idp-h-key", metavar="HN", type=u, default="", help="optional but recommended safeguard; your reverse-proxy will insert a secret header named \033[33mHN\033[0m into all requests, and the other IdP headers will be ignored if this header is not present")
ap2.add_argument("--idp-gsep", metavar="RE", type=u, default="|:;+,", help="if there are multiple groups in \033[33m--idp-h-grp\033[0m, they are separated by one of the characters in \033[33mRE\033[0m")
+ ap2.add_argument("--idp-chsub", metavar="TXT", type=u, default="", help="characters to replace in usernames/groupnames; a list of pairs of characters separated by | so for example | _| will replace spaces with _ to make configuration easier, or |%%_|^_|@_| will replace %%/^/@ with _")
ap2.add_argument("--idp-db", metavar="PATH", type=u, default=idp_db, help="where to store the known IdP users/groups (if you run multiple copyparty instances, make sure they use different DBs)")
ap2.add_argument("--idp-store", metavar="N", type=int, default=1, help="how to use \033[33m--idp-db\033[0m; [\033[32m0\033[0m] = entirely disable, [\033[32m1\033[0m] = write-only (effectively disabled), [\033[32m2\033[0m] = remember users, [\033[32m3\033[0m] = remember users and groups.\nNOTE: Will remember and restore the IdP-volumes of all users for all eternity if set to 2 or 3, even when user is deleted from your IdP")
ap2.add_argument("--idp-adm", metavar="U,U", type=u, default="", help="comma-separated list of users allowed to use /?idp (the cache management UI)")
@@ -1313,6 +1351,8 @@ def add_auth(ap):
ap2.add_argument("--idp-login-t", metavar="T", type=u, default="Login with SSO", help="the label/text for the idp-login button")
ap2.add_argument("--idp-logout", metavar="L", type=u, default="", help="replace all logout-buttons with a link to URL \033[33mL\033[0m")
ap2.add_argument("--auth-ord", metavar="TXT", type=u, default="idp,ipu", help="controls auth precedence; examples: [\033[32mpw,idp,ipu\033[0m], [\033[32mipu,pw,idp\033[0m], see --help-auth-ord")
+ ap2.add_argument("--pw-hdr", metavar="NAME", type=u, default="pw", help="lowercase name of password-header (NAME: foo); \033[1;31mWARNING:\033[0m Changing this will break support for many clients")
+ ap2.add_argument("--pw-urlp", metavar="NAME", type=u, default="pw", help="lowercase name of password url-param (?NAME=foo); \033[1;31mWARNING:\033[0m Changing this will break support for many clients")
ap2.add_argument("--no-bauth", action="store_true", help="disable basic-authentication support; do not accept passwords from the 'Authenticate' header at all. NOTE: This breaks support for the android app")
ap2.add_argument("--bauth-last", action="store_true", help="keeps basic-authentication enabled, but only as a last-resort; if a cookie is also provided then the cookie wins")
ap2.add_argument("--ses-db", metavar="PATH", type=u, default=ses_db, help="where to store the sessions database (if you run multiple copyparty instances, make sure they use different DBs)")
@@ -1358,6 +1398,8 @@ def add_zc_mdns(ap):
ap2.add_argument("--zm6", action="store_true", help="IPv6 only")
ap2.add_argument("--zmv", action="store_true", help="verbose mdns")
ap2.add_argument("--zmvv", action="store_true", help="verboser mdns")
+ ap2.add_argument("--zm-http", metavar="PORT", type=int, default=-1, help="port to announce for http/webdav; [\033[32m-1\033[0m] = auto, [\033[32m0\033[0m] = disabled, [\033[32m4649\033[0m] = port 4649")
+ ap2.add_argument("--zm-https", metavar="PORT", type=int, default=-1, help="port to announce for https/webdavs; [\033[32m-1\033[0m] = auto, [\033[32m0\033[0m] = disabled, [\033[32m4649\033[0m] = port 4649")
ap2.add_argument("--zm-no-pe", action="store_true", help="mute parser errors (invalid incoming MDNS packets)")
ap2.add_argument("--zm-nwa-1", action="store_true", help="disable workaround for avahi-bug #379 (corruption in Avahi's mDNS reflection feature)")
ap2.add_argument("--zms", metavar="dhf", type=u, default="", help="list of services to announce -- d=webdav h=http f=ftp s=smb -- lowercase=plaintext uppercase=TLS -- default: all enabled services except http/https (\033[32mDdfs\033[0m if \033[33m--ftp\033[0m and \033[33m--smb\033[0m is set, \033[32mDd\033[0m otherwise)")
@@ -1382,13 +1424,28 @@ def add_zc_ssdp(ap):
ap2.add_argument("--zsid", metavar="UUID", type=u, default=zsid, help="USN (device identifier) to announce")
+def add_sftp(ap):
+ ap2 = ap.add_argument_group("SFTP options")
+ ap2.add_argument("--sftp", metavar="PORT", type=int, default=0, help="enable SFTP server on \033[33mPORT\033[0m, for example \033[32m3922")
+ ap2.add_argument("--sftpv", action="store_true", help="verbose")
+ ap2.add_argument("--sftpvv", action="store_true", help="verboser")
+ ap2.add_argument("--sftp4", action="store_true", help="only listen on IPv4")
+ ap2.add_argument("--sftp-key", metavar="U K", type=u, action="append", help="\033[34mREPEATABLE:\033[0m add ssh-key \033[33mK\033[0m for user \033[33mU\033[0m (username, space, key-type, space, base64); if user has multiple keys, then repeat this option for each key\n โโcommandline example: --sftp-key 'david ssh-ed25519 AAAAC3NzaC...'\n โโconfig-file example: sftp-key: david ssh-ed25519 AAAAC3NzaC...")
+ ap2.add_argument("--sftp-key2u", action="append", help=argparse.SUPPRESS)
+ ap2.add_argument("--sftp-pw", action="store_true", help="allow password-authentication with sftp (not just ssh-keys)")
+ ap2.add_argument("--sftp-anon", metavar="TXT", type=u, default="", help="allow anonymous/unauthenticated connections with \033[33mTXT\033[0m as username")
+ ap2.add_argument("--sftp-hostk", metavar="FP", type=u, default=E.cfg, help="path to folder with hostkeys, for example 'ssh_host_rsa_key'; missing keys will be generated")
+ ap2.add_argument("--sftp-banner", metavar="T", type=u, default="", help="bannertext to send when someone connects; can be @filepath")
+ ap2.add_argument("--sftp-ipa", metavar="CIDR", type=u, default="", help="only accept connections from IP-addresses inside \033[33mCIDR\033[0m (comma-separated); specify [\033[32many\033[0m] to disable inheriting \033[33m--ipa\033[0m / \033[33m--ipar\033[0m. Examples: [\033[32mlan\033[0m] or [\033[32m10.89.0.0/16, 192.168.33.0/24\033[0m]")
+
+
def add_ftp(ap):
ap2 = ap.add_argument_group("FTP options (TCP only)")
ap2.add_argument("--ftp", metavar="PORT", type=int, default=0, help="enable FTP server on \033[33mPORT\033[0m, for example \033[32m3921")
ap2.add_argument("--ftps", metavar="PORT", type=int, default=0, help="enable FTPS server on \033[33mPORT\033[0m, for example \033[32m3990")
ap2.add_argument("--ftpv", action="store_true", help="verbose")
ap2.add_argument("--ftp4", action="store_true", help="only listen on IPv4")
- ap2.add_argument("--ftp-ipa", metavar="CIDR", type=u, default="", help="only accept connections from IP-addresses inside \033[33mCIDR\033[0m (comma-separated); specify [\033[32many\033[0m] to disable inheriting \033[33m--ipa\033[0m. Examples: [\033[32mlan\033[0m] or [\033[32m10.89.0.0/16, 192.168.33.0/24\033[0m]")
+ ap2.add_argument("--ftp-ipa", metavar="CIDR", type=u, default="", help="only accept connections from IP-addresses inside \033[33mCIDR\033[0m (comma-separated); specify [\033[32many\033[0m] to disable inheriting \033[33m--ipa\033[0m / \033[33m--ipar\033[0m. Examples: [\033[32mlan\033[0m] or [\033[32m10.89.0.0/16, 192.168.33.0/24\033[0m]")
ap2.add_argument("--ftp-no-ow", action="store_true", help="if target file exists, reject upload instead of overwrite")
ap2.add_argument("--ftp-wt", metavar="SEC", type=int, default=7, help="grace period for resuming interrupted uploads (any client can write to any file last-modified more recently than \033[33mSEC\033[0m seconds ago)")
ap2.add_argument("--ftp-nat", metavar="ADDR", type=u, default="", help="the NAT address to use for passive connections")
@@ -1402,7 +1459,10 @@ def add_webdav(ap):
ap2.add_argument("--dav-mac", action="store_true", help="disable apple-garbage filter -- allow macos to create junk files (._* and .DS_Store, .Spotlight-*, .fseventsd, .Trashes, .AppleDouble, __MACOS)")
ap2.add_argument("--dav-rt", action="store_true", help="show symlink-destination's lastmodified instead of the link itself; always enabled for recursive listings (volflag=davrt)")
ap2.add_argument("--dav-auth", action="store_true", help="force auth for all folders (required by davfs2 when only some folders are world-readable) (volflag=davauth)")
- ap2.add_argument("--dav-ua1", metavar="PTN", type=u, default=r" kioworker/", help="regex of tricky user-agents which expect 401 from GET requests; disable with [\033[32mno\033[0m] or blank")
+ ap2.add_argument("--dav-ua1", metavar="PTN", type=u, default=r" kioworker/", help="regex of user-agents which ARE webdav-clients, and expect 401 from GET requests; disable with [\033[32mno\033[0m] or blank")
+ ap2.add_argument("--dav-port", metavar="P", type=int, default=0, help="additional port to listen on for misbehaving webdav clients which pretend they are graphical browsers; an alternative/supplement to dav-ua1")
+ ap2.add_argument("--ua-nodav", metavar="PTN", type=u, default=r"^(Mozilla/|NetworkingExtension/|com\.apple\.WebKit)", help="regex of user-agents which are NOT webdav-clients")
+ ap2.add_argument("--p-nodav", metavar="P,P", type=u, default="", help="server-ports (comma-sep.) which are NOT webdav-clients; an alternative/supplement to ua-nodav")
def add_tftp(ap):
@@ -1414,7 +1474,7 @@ def add_tftp(ap):
ap2.add_argument("--tftp-no-fast", action="store_true", help="debug: disable optimizations")
ap2.add_argument("--tftp-lsf", metavar="PTN", type=u, default="\\.?(dir|ls)(\\.txt)?", help="return a directory listing if a file with this name is requested and it does not exist; defaults matches .ls, dir, .dir.txt, ls.txt, ...")
ap2.add_argument("--tftp-nols", action="store_true", help="if someone tries to download a directory, return an error instead of showing its directory listing")
- ap2.add_argument("--tftp-ipa", metavar="CIDR", type=u, default="", help="only accept connections from IP-addresses inside \033[33mCIDR\033[0m (comma-separated); specify [\033[32many\033[0m] to disable inheriting \033[33m--ipa\033[0m. Examples: [\033[32mlan\033[0m] or [\033[32m10.89.0.0/16, 192.168.33.0/24\033[0m]")
+ ap2.add_argument("--tftp-ipa", metavar="CIDR", type=u, default="", help="only accept connections from IP-addresses inside \033[33mCIDR\033[0m (comma-separated); specify [\033[32many\033[0m] to disable inheriting \033[33m--ipa\033[0m / \033[33m--ipar\033[0m. Examples: [\033[32mlan\033[0m] or [\033[32m10.89.0.0/16, 192.168.33.0/24\033[0m]")
ap2.add_argument("--tftp-pr", metavar="P-P", type=u, default="", help="the range of UDP ports to use for data transfer, for example \033[32m12000-13000")
@@ -1431,6 +1491,10 @@ def add_smb(ap):
ap2.add_argument("--smbvv", action="store_true", help="verboser")
ap2.add_argument("--smbvvv", action="store_true", help="verbosest")
+def add_opds(ap):
+ ap2 = ap.add_argument_group("OPDS options")
+ ap2.add_argument("--opds", action="store_true", help="enable opds -- allows e-book readers to browse and download files (volflag=opds)")
+ ap2.add_argument("--opds-exts", metavar="T,T", type=u, default="epub,cbz,pdf", help="file formats to list in OPDS feeds; leave empty to show everything (volflag=opds_exts)")
def add_handlers(ap):
ap2 = ap.add_argument_group("handlers (see --help-handlers)")
@@ -1458,6 +1522,7 @@ def add_hooks(ap):
def add_stats(ap):
ap2 = ap.add_argument_group("grafana/prometheus metrics endpoint")
ap2.add_argument("--stats", action="store_true", help="enable openmetrics at /.cpr/metrics for admin accounts")
+ ap2.add_argument("--stats-u", metavar="U,U", type=u, default="", help="comma-separated list of users allowed to access /.cpr/metrics even if they aren't admin")
ap2.add_argument("--nos-hdd", action="store_true", help="disable disk-space metrics (used/free space)")
ap2.add_argument("--nos-vol", action="store_true", help="disable volume size metrics (num files, total bytes, vmaxb/vmaxn)")
ap2.add_argument("--nos-vst", action="store_true", help="disable volume state metrics (indexing, analyzing, activity)")
@@ -1500,12 +1565,13 @@ def add_optouts(ap):
ap2.add_argument("--no-pipe", action="store_true", help="disable race-the-beam (lockstep download of files which are currently being uploaded) (volflag=nopipe)")
ap2.add_argument("--no-tail", action="store_true", help="disable streaming a growing files with ?tail (volflag=notail)")
ap2.add_argument("--no-db-ip", action="store_true", help="do not write uploader-IP into the database; will also disable unpost, you may want \033[32m--forget-ip\033[0m instead (volflag=no_db_ip)")
+ ap2.add_argument("--no-zls", action="store_true", help="disable browsing the contents of zip/cbz files, does not affect thumbnails")
def add_safety(ap):
ap2 = ap.add_argument_group("safety options")
ap2.add_argument("-s", action="count", default=0, help="increase safety: Disable thumbnails / potentially dangerous software (ffmpeg/pillow/vips), hide partial uploads, avoid crawlers.\n โโAlias of\033[32m --dotpart --no-thumb --no-mtag-ff --no-robots --force-js")
- ap2.add_argument("-ss", action="store_true", help="further increase safety: Prevent js-injection, accidental move/delete, broken symlinks, webdav requires login, 404 on 403, ban on excessive 404s.\n โโAlias of\033[32m -s --unpost=0 --no-del --no-mv --hardlink --dav-auth --vague-403 -nih")
+ ap2.add_argument("-ss", action="store_true", help="further increase safety: Prevent js-injection, accidental move/delete, broken symlinks, webdav requires login, 404 on 403, ban on excessive 404s.\n โโAlias of\033[32m -s --unpost=0 --no-del --no-mv --reflink --dav-auth --vague-403 -nih")
ap2.add_argument("-sss", action="store_true", help="further increase safety: Enable logging to disk, scan for dangerous symlinks.\n โโAlias of\033[32m -ss --no-dav --no-logues --no-readme -lo=cpp-%%Y-%%m%%d-%%H%%M%%S.txt.xz --ls=**,*,ln,p,r")
ap2.add_argument("--ls", metavar="U[,V[,F]]", type=u, default="", help="do a sanity/safety check of all volumes on startup; arguments \033[33mUSER\033[0m,\033[33mVOL\033[0m,\033[33mFLAGS\033[0m (see \033[33m--help-ls\033[0m); example [\033[32m**,*,ln,p,r\033[0m]")
ap2.add_argument("--xvol", action="store_true", help="never follow symlinks leaving the volume root, unless the link is into another volume where the user has similar access (volflag=xvol)")
@@ -1514,10 +1580,12 @@ def add_safety(ap):
ap2.add_argument("--no-dot-ren", action="store_true", help="disallow renaming dotfiles; makes it impossible to turn something into a dotfile")
ap2.add_argument("--no-logues", action="store_true", help="disable rendering .prologue/.epilogue.html into directory listings")
ap2.add_argument("--no-readme", action="store_true", help="disable rendering readme/preadme.md into directory listings")
- ap2.add_argument("--vague-403", action="store_true", help="send 404 instead of 403 (security through ambiguity, very enterprise)")
+ ap2.add_argument("--vague-403", action="store_true", help="send 404 instead of 403 (security through ambiguity, very enterprise). \033[1;31mWARNING:\033[0m Not compatible with WebDAV")
ap2.add_argument("--force-js", action="store_true", help="don't send folder listings as HTML, force clients to use the embedded json instead -- slight protection against misbehaving search engines which ignore \033[33m--no-robots\033[0m")
ap2.add_argument("--no-robots", action="store_true", help="adds http and html headers asking search engines to not index anything (volflag=norobots)")
ap2.add_argument("--logout", metavar="H", type=float, default=8086.0, help="logout clients after \033[33mH\033[0m hours of inactivity; [\033[32m0.0028\033[0m]=10sec, [\033[32m0.1\033[0m]=6min, [\033[32m24\033[0m]=day, [\033[32m168\033[0m]=week, [\033[32m720\033[0m]=month, [\033[32m8760\033[0m]=year)")
+ ap2.add_argument("--dont-ban", metavar="TXT", type=u, default="no", help="anyone at this accesslevel or above will not get banned: [\033[32mav\033[0m]=admin-in-volume, [\033[32maa\033[0m]=has-admin-anywhere, [\033[32mrw\033[0m]=read-write, [\033[32mauth\033[0m]=authenticated, [\033[32many\033[0m]=disable-all-bans, [\033[32mno\033[0m]=anyone-can-get-banned")
+ ap2.add_argument("--banmsg", metavar="TXT", type=u, default="thank you for playing \u00a0 (see serverlog and readme)", help="the response to send to banned users; can be @ban.html to send the contents of ban.html")
ap2.add_argument("--ban-pw", metavar="N,W,B", type=u, default="9,60,1440", help="more than \033[33mN\033[0m wrong passwords in \033[33mW\033[0m minutes = ban for \033[33mB\033[0m minutes; disable with [\033[32mno\033[0m]")
ap2.add_argument("--ban-pwc", metavar="N,W,B", type=u, default="5,60,1440", help="more than \033[33mN\033[0m password-changes in \033[33mW\033[0m minutes = ban for \033[33mB\033[0m minutes; disable with [\033[32mno\033[0m]")
ap2.add_argument("--ban-404", metavar="N,W,B", type=u, default="50,60,1440", help="hitting more than \033[33mN\033[0m 404's in \033[33mW\033[0m minutes = ban for \033[33mB\033[0m minutes; only affects users who cannot see directory listings because their access is either g/G/h")
@@ -1525,7 +1593,7 @@ def add_safety(ap):
ap2.add_argument("--ban-422", metavar="N,W,B", type=u, default="9,2,1440", help="hitting more than \033[33mN\033[0m 422's in \033[33mW\033[0m minutes = ban for \033[33mB\033[0m minutes (invalid requests, attempted exploits ++)")
ap2.add_argument("--ban-url", metavar="N,W,B", type=u, default="9,2,1440", help="hitting more than \033[33mN\033[0m sus URL's in \033[33mW\033[0m minutes = ban for \033[33mB\033[0m minutes; applies only to permissions g/G/h (decent replacement for \033[33m--ban-404\033[0m if that can't be used)")
ap2.add_argument("--sus-urls", metavar="R", type=u, default=r"\.php$|(^|/)wp-(admin|content|includes)/", help="URLs which are considered sus / eligible for banning; disable with blank or [\033[32mno\033[0m]")
- ap2.add_argument("--nonsus-urls", metavar="R", type=u, default=r"^(favicon\.ico|robots\.txt)$|^apple-touch-icon|^\.well-known", help="harmless URLs ignored from 404-bans; disable with blank or [\033[32mno\033[0m]")
+ ap2.add_argument("--nonsus-urls", metavar="R", type=u, default=r"^(favicon\..{3}|robots\.txt)$|^apple-touch-icon|^\.well-known", help="harmless URLs ignored from 403/404-bans; disable with blank or [\033[32mno\033[0m]")
ap2.add_argument("--early-ban", action="store_true", help="if a client is banned, reject its connection as soon as possible; not a good idea to enable when proxied behind cloudflare since it could ban your reverse-proxy")
ap2.add_argument("--cookie-nmax", metavar="N", type=int, default=50, help="reject HTTP-request from client if they send more than N cookies")
ap2.add_argument("--cookie-cmax", metavar="N", type=int, default=8192, help="reject HTTP-request from client if more than N characters in Cookie header")
@@ -1566,6 +1634,7 @@ def add_logging(ap):
ap2.add_argument("--no-voldump", action="store_true", help="do not list volumes and permissions on startup")
ap2.add_argument("--log-utc", action="store_true", help="do not use local timezone; assume the TZ env-var is UTC (tiny bit faster)")
ap2.add_argument("--log-tdec", metavar="N", type=int, default=3, help="timestamp resolution / number of timestamp decimals")
+ ap2.add_argument("--log-date", metavar="TXT", type=u, default="", help="date-format, for example [\033[32m%%Y-%%m-%%d\033[0m] (default is disabled; no date, just HH:MM:SS)")
ap2.add_argument("--log-badpwd", metavar="N", type=int, default=2, help="log failed login attempt passwords: 0=terse, 1=plaintext, 2=hashed")
ap2.add_argument("--log-badxml", action="store_true", help="log any invalid XML received from a client")
ap2.add_argument("--log-conn", action="store_true", help="debug: print tcp-server msgs")
@@ -1573,18 +1642,23 @@ def add_logging(ap):
ap2.add_argument("--ihead", metavar="HEADER", type=u, action='append', help="print request \033[33mHEADER\033[0m; [\033[32m*\033[0m]=all")
ap2.add_argument("--ohead", metavar="HEADER", type=u, action='append', help="print response \033[33mHEADER\033[0m; [\033[32m*\033[0m]=all")
ap2.add_argument("--lf-url", metavar="RE", type=u, default=r"^/\.cpr/|[?&]th=[wjp]|/\.(_|ql_|DS_Store$|localized$)", help="dont log URLs matching regex \033[33mRE\033[0m")
+ ap2.add_argument("--scan-st-r", metavar="SEC", type=float, default=0.1, help="fs-indexing: wait \033[33mSEC\033[0m between each status-message")
+ ap2.add_argument("--scan-pr-r", metavar="SEC", type=float, default=10, help="fs-indexing: wait \033[33mSEC\033[0m between each 'progress:' message")
+ ap2.add_argument("--scan-pr-s", metavar="MiB", type=float, default=1, help="fs-indexing: say 'file: ' when a file larger than \033[33mMiB\033[0m is about to be hashed")
def add_admin(ap):
ap2 = ap.add_argument_group("admin panel options")
ap2.add_argument("--no-reload", action="store_true", help="disable ?reload=cfg (reload users/volumes/volflags from config file)")
ap2.add_argument("--no-rescan", action="store_true", help="disable ?scan (volume reindexing)")
- ap2.add_argument("--no-stack", action="store_true", help="disable ?stack (list all stacks)")
+ ap2.add_argument("--no-stack", action="store_true", help="disable ?stack (list all stacks); same as --stack-who=no")
ap2.add_argument("--no-ups-page", action="store_true", help="disable ?ru (list of recent uploads)")
ap2.add_argument("--no-up-list", action="store_true", help="don't show list of incoming files in controlpanel")
ap2.add_argument("--dl-list", metavar="LVL", type=int, default=2, help="who can see active downloads in the controlpanel? [\033[32m0\033[0m]=nobody, [\033[32m1\033[0m]=admins, [\033[32m2\033[0m]=everyone")
ap2.add_argument("--ups-who", metavar="LVL", type=int, default=2, help="who can see recent uploads on the ?ru page? [\033[32m0\033[0m]=nobody, [\033[32m1\033[0m]=admins, [\033[32m2\033[0m]=everyone (volflag=ups_who)")
ap2.add_argument("--ups-when", action="store_true", help="let everyone see upload timestamps on the ?ru page, not just admins")
+ ap2.add_argument("--stack-who", metavar="LVL", type=u, default="a", help="who can see the ?stack page (list of threads)? [\033[32mno\033[0m]=nobody, [\033[32ma\033[0m]=admins, [\033[32mrw\033[0m]=read+write, [\033[32mall\033[0m]=everyone")
+ ap2.add_argument("--stack-v", action="store_true", help="verbose ?stack")
def add_thumbnail(ap):
@@ -1601,6 +1675,7 @@ def add_thumbnail(ap):
ap2.add_argument("--th-ram-max", metavar="GB", type=float, default=th_ram, help="max memory usage (GiB) permitted by thumbnailer; not very accurate")
ap2.add_argument("--th-crop", metavar="TXT", type=u, default="y", help="crop thumbnails to 4:3 or keep dynamic height; client can override in UI unless force. [\033[32my\033[0m]=crop, [\033[32mn\033[0m]=nocrop, [\033[32mfy\033[0m]=force-y, [\033[32mfn\033[0m]=force-n (volflag=crop)")
ap2.add_argument("--th-x3", metavar="TXT", type=u, default="n", help="show thumbs at 3x resolution; client can override in UI unless force. [\033[32my\033[0m]=yes, [\033[32mn\033[0m]=no, [\033[32mfy\033[0m]=force-yes, [\033[32mfn\033[0m]=force-no (volflag=th3x)")
+ ap2.add_argument("--th-qv", metavar="N", type=int, default=40, help="thumbnail quality (10~90); higher is larger filesize and better quality (volflag=th_qv)")
ap2.add_argument("--th-dec", metavar="LIBS", default="vips,pil,raw,ff", help="image decoders, in order of preference")
ap2.add_argument("--th-no-jpg", action="store_true", help="disable jpg output")
ap2.add_argument("--th-no-webp", action="store_true", help="disable webp output")
@@ -1653,7 +1728,9 @@ def add_rss(ap):
ap2.add_argument("--rss", action="store_true", help="enable RSS output (experimental) (volflag=rss)")
ap2.add_argument("--rss-nf", metavar="HITS", type=int, default=250, help="default number of files to return (url-param 'nf')")
ap2.add_argument("--rss-fext", metavar="E,E", type=u, default="", help="default list of file extensions to include (url-param 'fext'); blank=all")
- ap2.add_argument("--rss-sort", metavar="ORD", type=u, default="m", help="default sort order (url-param 'sort'); [\033[32mm\033[0m]=last-modified [\033[32mu\033[0m]=upload-time [\033[32mn\033[0m]=filename [\033[32ms\033[0m]=filesize; Uppercase=oldest-first. Note that upload-time is 0 for non-uploaded files")
+ ap2.add_argument("--rss-sort", metavar="ORD", type=u, default="m", help="default sort order (url-param 'sort'); [\033[32mm\033[0m]=last-modified [\033[32mu\033[0m]=upload-time [\033[32mn\033[0m]=filename [\033[32ms\033[0m]=filesize; Uppercase=oldest-first. Note that upload-time is 0 for non-uploaded files (volflag=rss_sort)")
+ ap2.add_argument("--rss-fmt-t", metavar="TXT", type=u, default="{fname}", help="title format (url-param 'rss_fmt_t') (volflag=rss_fmt_t)")
+ ap2.add_argument("--rss-fmt-d", metavar="TXT", type=u, default="{artist} - {title}", help="description format (url-param 'rss_fmt_d') (volflag=rss_fmt_d)")
def add_db_general(ap, hcores):
@@ -1680,6 +1757,7 @@ def add_db_general(ap, hcores):
ap2.add_argument("--hash-mt", metavar="CORES", type=int, default=hcores, help="num cpu cores to use for file hashing; set 0 or 1 for single-core hashing")
ap2.add_argument("--re-maxage", metavar="SEC", type=int, default=0, help="rescan filesystem for changes every \033[33mSEC\033[0m seconds; 0=off (volflag=scan)")
ap2.add_argument("--db-act", metavar="SEC", type=float, default=10.0, help="defer any scheduled volume reindexing until \033[33mSEC\033[0m seconds after last db write (uploads, renames, ...)")
+ ap2.add_argument("--srch-icase", action="store_true", help="case-insensitive search for all unicode characters (the default is icase for just ascii). NOTE: will make searches much slower (around 4x), and NOTE: only applies to filenames/paths, not tags")
ap2.add_argument("--srch-time", metavar="SEC", type=int, default=45, help="search deadline -- terminate searches running for more than \033[33mSEC\033[0m seconds")
ap2.add_argument("--srch-hits", metavar="N", type=int, default=7999, help="max search results to allow clients to fetch; 125 results will be shown initially")
ap2.add_argument("--srch-excl", metavar="PTN", type=u, default="", help="regex: exclude files from search results if the file-URL matches \033[33mPTN\033[0m (case-sensitive). Example: [\033[32mpassword|logs/[0-9]\033[0m] any URL containing 'password' or 'logs/DIGIT' (volflag=srch_excl)")
@@ -1734,12 +1812,13 @@ def add_og(ap):
ap2.add_argument("--uqe", action="store_true", help="query-string parceling; translate a request for \033[33m/foo/.uqe/BASE64\033[0m into \033[33m/foo?TEXT\033[0m, or \033[33m/foo/?TEXT\033[0m if the first character in \033[33mTEXT\033[0m is a slash. Automatically enabled for \033[33m--og\033[0m")
-def add_ui(ap, retry):
+def add_ui(ap, retry: int):
THEMES = 10
ap2 = ap.add_argument_group("ui options")
ap2.add_argument("--grid", action="store_true", help="show grid/thumbnails by default (volflag=grid)")
ap2.add_argument("--gsel", action="store_true", help="select files in grid by ctrl-click (volflag=gsel)")
ap2.add_argument("--localtime", action="store_true", help="default to local timezone instead of UTC")
+ ap2.add_argument("--ui-filesz", metavar="FMT", type=u, default="1", help="default filesize format; one of these: 0, 1, 2, 2c, 3, 3c, 4, 4c, 5, 5c, fuzzy (see UI)")
ap2.add_argument("--lang", metavar="LANG", type=u, default="eng", help="language, for example \033[32meng\033[0m / \033[32mnor\033[0m / ...")
ap2.add_argument("--theme", metavar="NUM", type=int, default=0, help="default theme to use (0..%d)" % (THEMES - 1,))
ap2.add_argument("--themes", metavar="NUM", type=int, default=THEMES, help="number of themes installed")
@@ -1749,18 +1828,26 @@ def add_ui(ap, retry):
ap2.add_argument("--hsortn", metavar="N", type=int, default=2, help="number of sorting rules to include in media URLs by default (volflag=hsortn)")
ap2.add_argument("--see-dots", action="store_true", help="default-enable seeing dotfiles; only takes effect if user has the necessary permissions")
ap2.add_argument("--qdel", metavar="LVL", type=int, default=2, help="number of confirmations to show when deleting files (2/1/0)")
+ ap2.add_argument("--dlni", action="store_true", help="force download (don't show inline) when files are clicked (volflag:dlni)")
ap2.add_argument("--unlist", metavar="REGEX", type=u, default="", help="don't show files/folders matching \033[33mREGEX\033[0m in file list. WARNING: Purely cosmetic! Does not affect API calls, just the browser. Example: [\033[32m\\.(js|css)$\033[0m] (volflag=unlist)")
ap2.add_argument("--favico", metavar="TXT", type=u, default="c 000 none" if retry else "๐ 000 none", help="\033[33mfavicon-text\033[0m [ \033[33mforeground\033[0m [ \033[33mbackground\033[0m ] ], set blank to disable")
+ ap2.add_argument("--ufavico", metavar="TXT", type=u, default="", help="URL to .ico/png/gif/svg file; \033[33m--favico\033[0m takes precedence unless disabled (volflag=ufavico)")
ap2.add_argument("--ext-th", metavar="E=VP", type=u, action="append", help="\033[34mREPEATABLE:\033[0m use thumbnail-image \033[33mVP\033[0m for file-extension \033[33mE\033[0m, example: [\033[32mexe=/.res/exe.png\033[0m] (volflag=ext_th)")
ap2.add_argument("--mpmc", type=u, default="", help=argparse.SUPPRESS)
+ ap2.add_argument("--notooltips", action="store_true", help="tooltips disabled as default")
ap2.add_argument("--spinner", metavar="TXT", type=u, default="๐ฒ", help="\033[33memoji\033[0m or \033[33memoji,css\033[0m Example: [\033[32m๐ฅ,padding:0\033[0m]")
ap2.add_argument("--css-browser", metavar="L", type=u, default="", help="URL to additional CSS to include in the filebrowser html")
ap2.add_argument("--js-browser", metavar="L", type=u, default="", help="URL to additional JS to include in the filebrowser html")
ap2.add_argument("--js-other", metavar="L", type=u, default="", help="URL to additional JS to include in all other pages")
ap2.add_argument("--html-head", metavar="TXT", type=u, default="", help="text to append to the of all HTML pages (except for basic-browser); can be @PATH to send the contents of a file at PATH, and/or begin with %% to render as jinja2 template (volflag=html_head)")
+ ap2.add_argument("--html-head-s", metavar="T", type=u, default="", help="text to append to the of all HTML pages (except for basic-browser); similar to (and can be combined with) --html-head but only accepts static text (volflag=html_head_s)")
ap2.add_argument("--ih", action="store_true", help="if a folder contains index.html, show that instead of the directory listing by default (can be changed in the client settings UI, or add ?v to URL for override)")
ap2.add_argument("--textfiles", metavar="CSV", type=u, default="txt,nfo,diz,cue,readme", help="file extensions to present as plaintext")
ap2.add_argument("--txt-max", metavar="KiB", type=int, default=64, help="max size of embedded textfiles on ?doc= (anything bigger will be lazy-loaded by JS)")
+ ap2.add_argument("--prologues", metavar="T,T", type=u, default=".prologue.html", help="comma-sep. list of filenames to scan for and use as prologues (embed above/before directory listing) (volflag=prologues)")
+ ap2.add_argument("--epilogues", metavar="T,T", type=u, default=".epilogue.html", help="comma-sep. list of filenames to scan for and use as epilogues (embed below/after directory listing) (volflag=epilogues)")
+ ap2.add_argument("--preadmes", metavar="T,T", type=u, default="preadme.md,PREADME.md", help="comma-sep. list of filenames to scan for and use as preadmes (embed above/before directory listing) (volflag=preadmes)")
+ ap2.add_argument("--readmes", metavar="T,T", type=u, default="readme.md,README.md", help="comma-sep. list of filenames to scan for and use as readmes (embed below/after directory listing) (volflag=readmes)")
ap2.add_argument("--doctitle", metavar="TXT", type=u, default="copyparty @ --name", help="title / service-name to show in html documents")
ap2.add_argument("--bname", metavar="TXT", type=u, default="--name", help="server name (displayed in filebrowser document title)")
ap2.add_argument("--pb-url", metavar="URL", type=u, default=URL_PRJ, help="powered-by link; disable with \033[33m-nb\033[0m")
@@ -1778,6 +1865,15 @@ def add_ui(ap, retry):
ap2.add_argument("--lg-sba", metavar="TXT", type=u, default="", help="the value of the iframe 'allow' attribute for prologue/epilogue docs (volflag=lg_sba); see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Permissions-Policy#iframes")
ap2.add_argument("--no-sb-md", action="store_true", help="don't sandbox README/PREADME.md documents (volflags: no_sb_md | sb_md)")
ap2.add_argument("--no-sb-lg", action="store_true", help="don't sandbox prologue/epilogue docs (volflags: no_sb_lg | sb_lg); enables non-js support")
+ ap2.add_argument("--ui-nombar", action="store_true", help="hide top-menu in the UI (volflag=ui_nombar)")
+ ap2.add_argument("--ui-noacci", action="store_true", help="hide account-info in the UI (volflag=ui_noacci)")
+ ap2.add_argument("--ui-nosrvi", action="store_true", help="hide server-info in the UI (volflag=ui_nosrvi)")
+ ap2.add_argument("--ui-nonav", action="store_true", help="hide navpane+breadcrumbs (volflag=ui_nonav)")
+ ap2.add_argument("--ui-notree", action="store_true", help="hide navpane in the UI (volflag=ui_notree)")
+ ap2.add_argument("--ui-nocpla", action="store_true", help="hide cpanel-link in the UI (volflag=ui_nocpla)")
+ ap2.add_argument("--ui-nolbar", action="store_true", help="hide link-bar in the UI (volflag=ui_nolbar)")
+ ap2.add_argument("--ui-noctxb", action="store_true", help="hide context-buttons in the UI (volflag=ui_noctxb)")
+ ap2.add_argument("--ui-norepl", action="store_true", help="hide repl-button in the UI (volflag=ui_norepl)")
ap2.add_argument("--have-unlistc", action="store_true", help=argparse.SUPPRESS)
@@ -1809,7 +1905,7 @@ def add_debug(ap):
def run_argparse(
- argv: list[str], formatter: Any, retry: bool, nc: int, verbose=True
+ argv: list[str], formatter: Any, retry: int, nc: int, verbose=True
) -> argparse.Namespace:
ap = argparse.ArgumentParser(
formatter_class=formatter,
@@ -1851,10 +1947,12 @@ def run_argparse(
add_thumbnail(ap)
add_transcoding(ap)
add_rss(ap)
+ add_sftp(ap)
add_ftp(ap)
add_webdav(ap)
add_tftp(ap)
add_smb(ap)
+ add_opds(ap)
add_safety(ap)
add_salt(ap, fk_salt, dk_salt, ah_salt)
add_optouts(ap)
@@ -1876,18 +1974,21 @@ def run_argparse(
for k, h, _ in sects:
ap2.add_argument("--help-" + k, action="store_true", help=h)
- try:
- if not retry:
- raise Exception()
-
+ if retry:
+ a = ["ascii", "replace"]
for x in ap._actions:
- if not x.help:
- continue
+ try:
+ x.default = x.default.encode(*a).decode(*a)
+ except:
+ pass
- a = ["ascii", "replace"]
- x.help = x.help.encode(*a).decode(*a) + "\033[0m"
- except:
- pass
+ try:
+ if x.help and x.help is not argparse.SUPPRESS:
+ x.help = x.help.replace("โโ", "`-").encode(*a).decode(*a)
+ if retry > 2:
+ x.help = RE_ANSI.sub("", x.help)
+ except:
+ pass
ret = ap.parse_args(args=argv[1:])
for k, h, t in sects:
@@ -1901,16 +2002,20 @@ def run_argparse(
def main(argv: Optional[list[str]] = None) -> None:
+ if argv is None:
+ argv = sys.argv
+
+ if "--versionb" in argv:
+ print(S_VERSION)
+ sys.exit(0)
+
time.strptime("19970815", "%Y%m%d") # python#7980
if WINDOWS:
os.system("rem") # enables colors
init_E(E)
- if argv is None:
- argv = sys.argv
-
- f = '\033[36mcopyparty v{} "\033[35m{}\033[36m" ({})\n{}\033[0;36m\n sqlite {} | jinja {} | pyftpd {} | tftp {}\n\033[0m'
+ f = '\033[36mcopyparty v{} "\033[35m{}\033[36m" ({})\n{}\033[0;36m\n sqlite {} | jinja {} | pyftpd {} | tftp {} | miko {}\n\033[0m'
f = f.format(
S_VERSION,
CODENAME,
@@ -1920,6 +2025,7 @@ def main(argv: Optional[list[str]] = None) -> None:
JINJA_VER,
PYFTPD_VER,
PARTFTPY_VER,
+ MIKO_VER,
)
lprint(f)
@@ -1997,7 +2103,7 @@ def main(argv: Optional[list[str]] = None) -> None:
except:
nc = 486 # mdns/ssdp restart headroom; select() maxfd is 512 on windows
- retry = False
+ retry = 0
for fmtr in [RiceFormatter, RiceFormatter, Dodge11874, BasicDodge11874]:
try:
al = run_argparse(argv, fmtr, retry, nc)
@@ -2006,8 +2112,9 @@ def main(argv: Optional[list[str]] = None) -> None:
except SystemExit:
raise
except:
- retry = True
- lprint("\n[ {} ]:\n{}\n".format(fmtr, min_ex()))
+ retry += 1
+ t = "WARNING: due to limitations in your terminal and/or OS, the helptext cannot be displayed correctly. Will show a simplified version due to the following error:\n[ %s ]:\n%s\n"
+ lprint(t % (fmtr, min_ex()))
try:
assert al # type: ignore
@@ -2035,7 +2142,7 @@ def main(argv: Optional[list[str]] = None) -> None:
# propagate implications
for k1, k2 in IMPLICATIONS:
- if getattr(al, k1):
+ if getattr(al, k1, None):
setattr(al, k2, True)
# propagate unplications
diff --git a/copyparty/__version__.py b/copyparty/__version__.py
index 2b7fbbf9..c773bd66 100644
--- a/copyparty/__version__.py
+++ b/copyparty/__version__.py
@@ -1,8 +1,8 @@
# coding: utf-8
-VERSION = (1, 19, 7)
-CODENAME = "usernames"
-BUILD_DT = (2025, 8, 28)
+VERSION = (1, 20, 0)
+CODENAME = "sftp is fine too"
+BUILD_DT = (2026, 1, 2)
S_VERSION = ".".join(map(str, VERSION))
S_BUILD_DT = "{0:04d}-{1:02d}-{2:02d}".format(*BUILD_DT)
diff --git a/copyparty/authsrv.py b/copyparty/authsrv.py
index f68a9f7b..ce782bc3 100644
--- a/copyparty/authsrv.py
+++ b/copyparty/authsrv.py
@@ -13,7 +13,7 @@ import threading
import time
from datetime import datetime
-from .__init__ import ANYWIN, PY2, TYPE_CHECKING, WINDOWS, E
+from .__init__ import ANYWIN, MACOS, PY2, TYPE_CHECKING, WINDOWS, E
from .bos import bos
from .cfg import flagdescs, permdescs, vf_bmap, vf_cmap, vf_vmap
from .pwhash import PWHash
@@ -21,8 +21,10 @@ from .util import (
DEF_MTE,
DEF_MTH,
EXTS,
+ FAVICON_MIMES,
HAVE_SQLITE3,
IMPLICATIONS,
+ META_NOBOTS,
MIMES,
SQLITE_VER,
UNPLICATIONS,
@@ -91,6 +93,13 @@ LEELOO_DALLAS = "leeloo_dallas"
## thanks for coming to my ted talk
+UP_MTE_MAP = { # db-order
+ "w": "substr(w,1,16)",
+ "up_ip": "ip",
+ ".up_at": "at",
+ "up_by": "un",
+}
+
SEE_LOG = "see log for details"
SEESLOG = " (see serverlog for details)"
SSEELOG = " ({})".format(SEE_LOG)
@@ -99,6 +108,8 @@ SBADCFG = " ({})".format(BAD_CFG)
PTN_U_GRP = re.compile(r"\$\{u(%[+-][^}]+)\}")
PTN_G_GRP = re.compile(r"\$\{g(%[+-][^}]+)\}")
+PTN_U_ANY = re.compile(r"(\${[u][}%])")
+PTN_G_ANY = re.compile(r"(\${[g][}%])")
PTN_SIGIL = re.compile(r"(\${[ug][}%])")
@@ -156,6 +167,9 @@ class Lim(object):
self.vbmax = 0 # volume bytes max
self.vnmax = 0 # volume max num files
+ self.c_vb_v = 0 # cache: volume bytes used (value)
+ self.c_vb_r = 0 # cache: volume bytes used (ref)
+
self.smin = 0 # filesize min
self.smax = 0 # filesize max
@@ -167,14 +181,19 @@ class Lim(object):
self.rotn = 0 # rot num files
self.rotl = 0 # rot depth
self.rotf = "" # rot datefmt
+ self.rotf_tz = UTC # rot timezone
self.rot_re = re.compile("") # rotf check
def log(self, msg: str, c: Union[int, str] = 0) -> None:
if self.log_func:
self.log_func("up-lim", msg, c)
- def set_rotf(self, fmt: str) -> None:
+ def set_rotf(self, fmt: str, tz: str) -> None:
self.rotf = fmt
+ if tz != "UTC":
+ from zoneinfo import ZoneInfo
+
+ self.rotf_tz = ZoneInfo(tz)
r = re.escape(fmt).replace("%Y", "[0-9]{4}").replace("%j", "[0-9]{3}")
r = re.sub("%[mdHMSWU]", "[0-9]{2}", r)
self.rot_re = re.compile("(^|/)" + r + "$")
@@ -278,7 +297,7 @@ class Lim(object):
if self.rot_re.search(path.replace("\\", "/")):
return path, ""
- suf = datetime.now(UTC).strftime(self.rotf)
+ suf = datetime.now(self.rotf_tz).strftime(self.rotf)
if path:
path += "/"
@@ -389,6 +408,9 @@ class VFS(object):
self.vpath = vpath # absolute path in the virtual filesystem
self.vpath0 = vpath0 # original vpath (before idp expansion)
self.axs = axs
+ self.uaxs: dict[
+ str, tuple[bool, bool, bool, bool, bool, bool, bool, bool, bool]
+ ] = {}
self.flags = flags # config options
self.root = self
self.dev = 0 # st_dev
@@ -414,6 +436,7 @@ class VFS(object):
self.js_htm = ""
self.all_vols: dict[str, VFS] = {} # flattened recursive
self.all_nodes: dict[str, VFS] = {} # also jumpvols/shares
+ self.all_fvols: dict[str, VFS] = {} # volumes which are files
if realpath:
rp = realpath + ("" if realpath.endswith(os.sep) else os.sep)
@@ -424,10 +447,14 @@ class VFS(object):
self.all_nodes[vpath] = self
self.all_aps = [(rp, [self])]
self.all_vps = [(vp, self)]
+ self.canonical = self._canonical
+ self.dcanonical = self._dcanonical
else:
self.histpath = self.dbpath = ""
self.all_aps = []
self.all_vps = []
+ self.canonical = self._canonical_null
+ self.dcanonical = self._dcanonical_null
self.get_dbv = self._get_dbv
self.ls = self._ls
@@ -542,29 +569,19 @@ class VFS(object):
def can_access(
self, vpath: str, uname: str
- ) -> tuple[bool, bool, bool, bool, bool, bool, bool, bool]:
- """can Read,Write,Move,Delete,Get,Upget,Admin,Dot"""
+ ) -> tuple[bool, bool, bool, bool, bool, bool, bool, bool, bool]:
+ """can Read,Write,Move,Delete,Get,Upget,Html,Admin,Dot"""
+ # NOTE: only used by get_perms, which is only used by hooks; the lowest of fruits
if vpath:
vn, _ = self._find(undot(vpath))
else:
vn = self
- c = vn.axs
- return (
- uname in c.uread,
- uname in c.uwrite,
- uname in c.umove,
- uname in c.udel,
- uname in c.uget,
- uname in c.upget,
- uname in c.uadmin,
- uname in c.udot,
- )
- # skip uhtml because it's rarely needed
+ return vn.uaxs[uname]
def get_perms(self, vpath: str, uname: str) -> str:
zbl = self.can_access(vpath, uname)
- ret = "".join(ch for ch, ok in zip("rwmdgGa.", zbl) if ok)
+ ret = "".join(ch for ch, ok in zip("rwmdgGha.", zbl) if ok)
if "rwmd" in ret and "a." in ret:
ret += "A"
return ret
@@ -624,7 +641,39 @@ class VFS(object):
vrem = vjoin(self.vpath[len(dbv.vpath) :].lstrip("/"), vrem)
return dbv, vrem
- def canonical(self, rem: str, resolve: bool = True) -> str:
+ def casechk(self, rem: str, do_stat: bool) -> bool:
+ ap = self.canonical(rem, False)
+ if do_stat and not bos.path.exists(ap):
+ return True # doesn't exist at all; good to go
+ dp, fn = os.path.split(ap)
+ if not fn:
+ return True # filesystem root
+ try:
+ fns = os.listdir(dp)
+ except:
+ return True # maybe chmod 111; assume ok
+ if fn in fns:
+ return True
+ hit = ">"
+ lfn = fn.lower()
+ for zs in fns:
+ if lfn == zs.lower():
+ hit = zs
+ break
+ if not hit:
+ return True # NFC/NFD or something, can't be helped either way
+ if self.log:
+ t = "returning 404 due to underlying case-insensitive filesystem:\n http-req: %r\n local-fs: %r"
+ self.log("vfs", t % (fn, hit))
+ return False
+
+ def _canonical_null(self, rem: str, resolve: bool = True) -> str:
+ return ""
+
+ def _dcanonical_null(self, rem: str) -> str:
+ return ""
+
+ def _canonical(self, rem: str, resolve: bool = True) -> str:
"""returns the canonical path (fully-resolved absolute fs path)"""
ap = self.realpath
if rem:
@@ -632,7 +681,7 @@ class VFS(object):
return absreal(ap) if resolve else ap
- def dcanonical(self, rem: str) -> str:
+ def _dcanonical(self, rem: str) -> str:
"""resolves until the final component (filename)"""
ap = self.realpath
if rem:
@@ -641,6 +690,44 @@ class VFS(object):
ad, fn = os.path.split(ap)
return os.path.join(absreal(ad), fn)
+ def _canonical_shr(self, rem: str, resolve: bool = True) -> str:
+ """returns the canonical path (fully-resolved absolute fs path)"""
+ ap = self.realpath
+ if rem:
+ ap += "/" + rem
+
+ rap = absreal(ap)
+ if self.shr_files:
+ assert self.shr_src # !rm
+ vn, rem = self.shr_src
+ chk = absreal(os.path.join(vn.realpath, rem))
+ if chk != rap:
+ # not the dir itself; assert file allowed
+ ad, fn = os.path.split(rap)
+ if chk != ad or fn not in self.shr_files:
+ return "\n\n"
+
+ return rap if resolve else ap
+
+ def _dcanonical_shr(self, rem: str) -> str:
+ """resolves until the final component (filename)"""
+ ap = self.realpath
+ if rem:
+ ap += "/" + rem
+
+ ad, fn = os.path.split(ap)
+ ad = absreal(ad)
+ if self.shr_files:
+ assert self.shr_src # !rm
+ vn, rem = self.shr_src
+ chk = absreal(os.path.join(vn.realpath, rem))
+ if chk != absreal(ap):
+ # not the dir itself; assert file allowed
+ if ad != chk or fn not in self.shr_files:
+ return "\n\n"
+
+ return os.path.join(ad, fn)
+
def _ls_nope(
self, *a, **ka
) -> tuple[str, list[tuple[str, os.stat_result]], dict[str, "VFS"]]:
@@ -673,8 +760,12 @@ class VFS(object):
"""return user-readable [fsdir,real,virt] items at vpath"""
virt_vis = {} # nodes readable by user
abspath = self.canonical(rem)
- real = list(statdir(self.log, scandir, lstat, abspath, throw))
- real.sort()
+ if abspath:
+ real = list(statdir(self.log, scandir, lstat, abspath, throw))
+ real.sort()
+ else:
+ real = []
+
if not rem:
# no vfs nodes in the list of real inodes
real = [x for x in real if x[0] not in self.nodes]
@@ -685,20 +776,17 @@ class VFS(object):
virt_vis[name] = vn2
continue
- ok = False
- zx = vn2.axs
- axs = [zx.uread, zx.uwrite, zx.umove, zx.udel, zx.uget]
+ u_has = vn2.uaxs.get(uname) or [False] * 9
for pset in permsets:
ok = True
- for req, lst in zip(pset, axs):
- if req and uname not in lst:
+ for req, zb in zip(pset, u_has):
+ if req and not zb:
ok = False
+ break
if ok:
+ virt_vis[name] = vn2
break
- if ok:
- virt_vis[name] = vn2
-
if ".hist" in abspath:
p = abspath.replace("\\", "/") if WINDOWS else abspath
if p.endswith("/.hist"):
@@ -809,6 +897,7 @@ class VFS(object):
flt: set[str],
uname: str,
dirs: bool,
+ dots: int,
scandir: bool,
wrap: bool = True,
) -> Generator[dict[str, Any], None, None]:
@@ -817,7 +906,7 @@ class VFS(object):
# if single folder: the folder itself is the top-level item
folder = "" if flt or not wrap else (vpath.split("/")[-1].lstrip(".") or "top")
- g = self.walk(folder, vrem, [], uname, [[True, False]], 1, scandir, False)
+ g = self.walk(folder, vrem, [], uname, [[True, False]], dots, scandir, False)
for _, _, vpath, apath, files, rd, vd in g:
if flt:
files = [x for x in files if x[0] in flt]
@@ -976,6 +1065,16 @@ class AuthSrv(object):
self.indent = ""
self.is_lxc = args.c == ["/z/initcfg"]
+ self._vf0b = {
+ "cachectl": self.args.cachectl,
+ "tcolor": self.args.tcolor,
+ "du_iwho": self.args.du_iwho,
+ "shr_who": self.args.shr_who if self.args.shr else "no",
+ "ls_q_m": ("", ""),
+ }
+ self._vf0 = self._vf0b.copy()
+ self._vf0["d2d"] = True
+
# fwd-decl
self.vfs = VFS(log_func, "", "", "", AXS(), {})
self.acct: dict[str, str] = {} # uname->pw
@@ -1014,17 +1113,14 @@ class AuthSrv(object):
yield prev, True
def vf0(self):
- return {"d2d": True, "tcolor": self.args.tcolor, "du_iwho": self.args.du_iwho}
+ return self._vf0.copy()
def vf0b(self):
- return {"tcolor": self.args.tcolor, "du_iwho": self.args.du_iwho}
+ return self._vf0b.copy()
def idp_checkin(
self, broker: Optional["BrokerCli"], uname: str, gname: str
) -> bool:
- if uname in self.acct:
- return False
-
if self.idp_usr_gh.get(uname) == gname:
return False
@@ -1083,6 +1179,16 @@ class AuthSrv(object):
src0 = src # abspath
dst0 = dst # vpath
+ zsl = []
+ for ptn, sigil in ((PTN_U_ANY, "${u}"), (PTN_G_ANY, "${g}")):
+ if bool(ptn.search(src)) != bool(ptn.search(dst)):
+ zsl.append(sigil)
+ if zsl:
+ t = "ERROR: if %s is mentioned in a volume definition, it must be included in both the filesystem-path [%s] and the volume-url [/%s]"
+ t = "\n".join([t % (x, src, dst) for x in zsl])
+ self.log(t, 1)
+ raise Exception(t)
+
un_gn = [(un, gn) for un, gns in un_gns.items() for gn in gns]
if not un_gn:
# ensure volume creation if there's no users
@@ -1175,8 +1281,8 @@ class AuthSrv(object):
self.log(t, c=3)
raise Exception(BAD_CFG)
- if not bos.path.isdir(src):
- self.log("warning: filesystem-path does not exist: {}".format(src), 3)
+ if not bos.path.exists(src):
+ self.log("warning: filesystem-path did not exist: %r" % (src,), 3)
mount[dst] = (src, dst0)
daxs[dst] = AXS()
@@ -1362,7 +1468,10 @@ class AuthSrv(object):
t = "group [%s] = " % (gn,)
t += ", ".join("user [%s]" % (x,) for x in uns)
self._l(ln, 5, t)
- grps[gn] = uns
+ if gn in grps:
+ grps[gn].extend(uns)
+ else:
+ grps[gn] = uns
except:
t = 'lines inside the [groups] section must be "groupname: user1, user2, user..."'
raise Exception(t + SBADCFG)
@@ -1494,7 +1603,7 @@ class AuthSrv(object):
uns = [x[0] for x in un_gns.items() if grp in x[1]]
if grp == "${g}":
unames.append(un)
- elif not uns and not self.args.idp_h_grp:
+ elif not uns and not self.args.idp_h_grp and grp != self.args.grp_all:
t = "group [%s] must be defined with --grp argument (or in a [groups] config section)"
raise CfgEx(t % (grp,))
@@ -1714,10 +1823,18 @@ class AuthSrv(object):
self.log("\n{0}\n{1}{0}".format(t, "\n".join(slns)))
raise
- self.args.have_idp_hdrs = bool(self.args.idp_h_usr or self.args.idp_hm_usr)
- self.args.have_ipu_or_ipr = bool(self.args.ipu or self.args.ipr)
+ derive_args(self.args)
self.setup_auth_ord()
+ if self.args.ipu and not self.args.have_idp_hdrs:
+ # syntax (CIDR=UNAME) is verified in load_ipu
+ zsl = [x.split("=", 1)[1] for x in self.args.ipu]
+ zsl = [x for x in zsl if x not in acct]
+ if zsl:
+ t = "ERROR: unknown users in ipu: %s" % (zsl,)
+ self.log(t, 1)
+ raise Exception(t)
+
self.setup_pwhash(acct)
defpw = acct.copy()
self.setup_chpw(acct)
@@ -1798,7 +1915,7 @@ class AuthSrv(object):
vol.all_vps.sort(key=lambda x: len(x[0]), reverse=True)
vol.root = vfs
- zs = "neversymlink"
+ zs = "du_iwho ls_q_m neversymlink"
k_ign = set(zs.split())
for vol in vfs.all_vols.values():
unknown_flags = set()
@@ -1868,9 +1985,18 @@ class AuthSrv(object):
axs_key = "u" + perm
for vp, vol in vfs.all_vols.items():
zx = getattr(vol.axs, axs_key)
- if "*" in zx:
+ if "*" in zx and "-@acct" not in zx:
for usr in unames:
zx.add(usr)
+ for zs in list(zx):
+ if zs.startswith("-"):
+ zx.discard(zs)
+ zs = zs[1:]
+ zx.discard(zs)
+ if zs.startswith("@"):
+ zs = zs[1:]
+ for zs in grps.get(zs) or []:
+ zx.discard(zs)
# aread,... = dict[uname, list[volnames] or []]
umap: dict[str, list[str]] = {x: [] for x in unames}
@@ -1882,6 +2008,23 @@ class AuthSrv(object):
umap[usr].sort()
setattr(vfs, "a" + perm, umap)
+ for vol in vfs.all_nodes.values():
+ za = vol.axs
+ vol.uaxs = {
+ un: (
+ un in za.uread,
+ un in za.uwrite,
+ un in za.umove,
+ un in za.udel,
+ un in za.uget,
+ un in za.upget,
+ un in za.uhtml,
+ un in za.uadmin,
+ un in za.udot,
+ )
+ for un in unames
+ }
+
all_users = {}
missing_users = {}
associated_users = {}
@@ -1950,6 +2093,8 @@ class AuthSrv(object):
promote = []
demote = []
for vol in vfs.all_vols.values():
+ if not vol.realpath:
+ continue
hid = self.hid_cache.get(vol.realpath)
if not hid:
zb = hashlib.sha512(afsenc(vol.realpath)).digest()
@@ -1988,6 +2133,8 @@ class AuthSrv(object):
vol.histpath = absreal(vol.histpath)
for vol in vfs.all_vols.values():
+ if not vol.realpath:
+ continue
hid = self.hid_cache[vol.realpath]
vflag = vol.flags.get("dbpath")
if vflag == "-":
@@ -2116,7 +2263,7 @@ class AuthSrv(object):
zs = vol.flags.get("rotf")
if zs:
use = True
- lim.set_rotf(zs)
+ lim.set_rotf(zs, vol.flags.get("rotf_tz") or "UTC")
zs = vol.flags.get("maxn")
if zs:
@@ -2211,6 +2358,10 @@ class AuthSrv(object):
free_umask = False
have_reflink = False
for vol in vfs.all_nodes.values():
+ if os.path.isfile(vol.realpath):
+ vol.flags["is_file"] = True
+ vol.flags["d2d"] = True
+
if (self.args.e2ds and vol.axs.uwrite) or self.args.e2dsa:
vol.flags["e2ds"] = True
@@ -2247,7 +2398,7 @@ class AuthSrv(object):
if vf not in vol.flags:
vol.flags[vf] = getattr(self.args, ga)
- zs = "forget_ip gid nrand tail_who th_spec_p u2abort u2ow uid unp_who ups_who zip_who"
+ zs = "forget_ip gid nrand tail_who th_qv th_spec_p u2abort u2ow uid unp_who ups_who zip_who"
for k in zs.split():
if k in vol.flags:
vol.flags[k] = int(vol.flags[k])
@@ -2298,6 +2449,9 @@ class AuthSrv(object):
vol.flags["du_iwho"] = n_du_who(vol.flags["du_who"])
+ if not enshare:
+ vol.flags["shr_who"] = self.args.shr_who = "no"
+
if vol.flags.get("og"):
self.args.uqe = True
@@ -2384,6 +2538,57 @@ class AuthSrv(object):
t = "WARNING: volume [/%s]: invalid value specified for ext-th: %s"
self.log(t % (vol.vpath, etv), 3)
+ zsl1 = [x for x in vol.flags["preadmes"].split(",") if x]
+ zsl2 = [x for x in vol.flags["readmes"].split(",") if x]
+ zsl3 = list(set([x.lower() for x in zsl1]))
+ zsl4 = list(set([x.lower() for x in zsl2]))
+ vol.flags["emb_mds"] = [[0, zsl1, zsl3], [1, zsl2, zsl4]]
+
+ zsl1 = [x for x in vol.flags["prologues"].split(",") if x]
+ zsl2 = [x for x in vol.flags["epilogues"].split(",") if x]
+ zsl3 = list(set([x.lower() for x in zsl1]))
+ zsl4 = list(set([x.lower() for x in zsl2]))
+ vol.flags["emb_lgs"] = [[0, zsl1, zsl3], [1, zsl2, zsl4]]
+
+ zs = str(vol.flags.get("html_head") or "")
+ if zs and zs[:1] in "%@":
+ vol.flags["html_head_d"] = zs
+ head_s = str(vol.flags.get("html_head_s") or "")
+ else:
+ zs2 = str(vol.flags.get("html_head_s") or "")
+ if zs2 and zs:
+ head_s = "%s\n%s\n" % (zs2.strip(), zs.strip())
+ else:
+ head_s = zs2 or zs
+
+ if head_s and not head_s.endswith("\n"):
+ head_s += "\n"
+
+ if "norobots" in vol.flags:
+ head_s += META_NOBOTS
+
+ ico_url = vol.flags.get("ufavico")
+ if ico_url:
+ ico_h = ""
+ ico_ext = ico_url.split("?")[0].split(".")[-1].lower()
+ if ico_ext in FAVICON_MIMES:
+ zs = '\n'
+ ico_h = zs % (FAVICON_MIMES[ico_ext], ico_url)
+ elif ico_ext == "ico":
+ zs = '\n'
+ ico_h = zs % (ico_url,)
+ if ico_h:
+ vol.flags["ufavico_h"] = ico_h
+ head_s += ico_h
+
+ if head_s:
+ vol.flags["html_head_s"] = head_s
+ else:
+ vol.flags.pop("html_head_s", None)
+
+ if not vol.flags.get("html_head_d"):
+ vol.flags.pop("html_head_d", None)
+
vol.check_landmarks()
# d2d drops all database features for a volume
@@ -2425,18 +2630,25 @@ class AuthSrv(object):
vol.flags[k] = int(vol.flags[k])
if "e2d" not in vol.flags:
- if "lifetime" in vol.flags:
- t = 'removing lifetime config from volume "/{}" because e2d is disabled'
- self.log(t.format(vol.vpath), 1)
- del vol.flags["lifetime"]
+ zs = "lifetime rss"
+ drop = [x for x in zs.split() if x in vol.flags]
- needs_e2d = [x for x in hooks if x in ("xau", "xiu")]
- drop = [x for x in needs_e2d if vol.flags.get(x)]
- if drop:
- t = 'removing [{}] from volume "/{}" because e2d is disabled'
- self.log(t.format(", ".join(drop), vol.vpath), 1)
- for x in drop:
- vol.flags.pop(x)
+ zs = "xau xiu"
+ drop += [x for x in zs.split() if vol.flags.get(x)]
+
+ for k in drop:
+ t = 'cannot enable [%s] for volume "/%s" because this requires one of the following: e2d / e2ds / e2dsa (either as volflag or global-option)'
+ self.log(t % (k, vol.vpath), 1)
+ vol.flags.pop(k)
+
+ zi = vol.flags.get("lifetime") or 0
+ zi2 = time.time() // (86400 * 365)
+ zi3 = zi2 * 86400 * 365
+ if zi < 0 or zi > zi3:
+ t = "the lifetime of volume [/%s] (%d) exceeds max value (%d years; %d)"
+ t = t % (vol.vpath, zi, zi2, zi3)
+ self.log(t, 1)
+ raise Exception(t)
# verify tags mentioned by -mt[mp] are used by -mte
local_mtp = {}
@@ -2473,6 +2685,64 @@ class AuthSrv(object):
self.log(t.format(vol.vpath, mtp), 1)
errors = True
+ mte = vol.flags.get("mte") or {}
+ up_m = [x for x in UP_MTE_MAP if x in mte]
+ up_q = [UP_MTE_MAP[x] for x in up_m]
+ zs = "select %s from up where rd=? and fn=?" % (", ".join(up_q),)
+ vol.flags["ls_q_m"] = (zs if up_m else "", up_m)
+
+ vfs.all_fvols = {
+ zs: vol for zs, vol in vfs.all_vols.items() if "is_file" in vol.flags
+ }
+
+ for vol in vfs.all_nodes.values():
+ if not vol.flags.get("is_file"):
+ continue
+ zs = "og opds xlink"
+ for zs in zs.split():
+ vol.flags.pop(zs, None)
+
+ for vol in vfs.all_nodes.values():
+ if not vol.realpath or vol.flags.get("is_file"):
+ continue
+ ccs = vol.flags["casechk"][:1].lower()
+ if ccs in ("y", "n"):
+ if ccs == "y":
+ vol.flags["bcasechk"] = True
+ continue
+ try:
+ bos.makedirs(vol.realpath, vf=vol.flags)
+ files = os.listdir(vol.realpath)
+ for fn in files:
+ fn2 = fn.lower()
+ if fn == fn2:
+ fn2 = fn.upper()
+ if fn == fn2 or fn2 in files:
+ continue
+ is_ci = os.path.exists(os.path.join(vol.realpath, fn2))
+ ccs = "y" if is_ci else "n"
+ break
+ if ccs not in ("y", "n"):
+ ap = os.path.join(vol.realpath, "casechk")
+ open(ap, "wb").close()
+ ccs = "y" if os.path.exists(ap[:-1] + "K") else "n"
+ os.unlink(ap)
+ except Exception as ex:
+ if ANYWIN:
+ zs = "Windows"
+ ccs = "y"
+ elif MACOS:
+ zs = "Macos"
+ ccs = "y"
+ else:
+ zs = "Linux"
+ ccs = "n"
+ t = "unable to determine if filesystem at %r is case-insensitive due to %r; assuming casechk=%s due to %s"
+ self.log(t % (vol.realpath, ex, ccs, zs), 3)
+ vol.flags["casechk"] = ccs
+ if ccs == "y":
+ vol.flags["bcasechk"] = True
+
tags = self.args.mtp or []
tags = [x.split("=")[0] for x in tags]
tags = [y for x in tags for y in x.split(",")]
@@ -2563,9 +2833,13 @@ class AuthSrv(object):
["uadmin", "uadmin"],
]:
u = list(sorted(getattr(zv.axs, attr)))
- u = ["*"] if "*" in u else u
- u = ", ".join("\033[35meverybody\033[0m" if x == "*" else x for x in u)
- u = u if u else "\033[36m--none--\033[0m"
+ if u == ["*"] and acct:
+ u = ["\033[35monly-anonymous\033[0m"]
+ elif "*" in u:
+ u = ["\033[35meverybody\033[0m"]
+ if not u:
+ u = ["\033[36m--none--\033[0m"]
+ u = ", ".join(u)
t += "\n| {}: {}".format(txt, u)
if "e2d" in zv.flags:
@@ -2576,7 +2850,11 @@ class AuthSrv(object):
if "dedup" in zv.flags:
have_dedup = True
- if "e2d" not in zv.flags and "hardlink" not in zv.flags:
+ if (
+ "e2d" not in zv.flags
+ and "hardlink" not in zv.flags
+ and "reflink" not in zv.flags
+ ):
unsafe_dedup.append("/" + zv.vpath)
t += "\n"
@@ -2673,8 +2951,6 @@ class AuthSrv(object):
if have_reflink:
t = "WARNING: Reflink-based dedup was requested, but %s. This will not work; files will be full copies instead."
- if sys.version_info < (3, 14):
- self.log(t % "your python version is not new enough", 1)
if not sys.platform.startswith("linux"):
self.log(t % "your OS is not Linux", 1)
@@ -2694,9 +2970,11 @@ class AuthSrv(object):
pwds.extend([x.split(":", 1)[1] for x in pwds if ":" in x])
if pwds:
if self.ah.on:
- zs = r"(\[H\] pw:.*|[?&]pw=)([^&]+)"
+ zs = r"(\[H\] %s:.*|[?&]%s=)([^&]+)"
+ zs = zs % (self.args.pw_hdr, self.args.pw_urlp)
else:
- zs = r"(\[H\] pw:.*|=)(" + "|".join(pwds) + r")([]&; ]|$)"
+ zs = r"(\[H\] %s:.*|=)(" % (self.args.pw_hdr,)
+ zs += "|".join(pwds) + r")([]&; ]|$)"
self.re_pwd = re.compile(zs)
@@ -2740,13 +3018,23 @@ class AuthSrv(object):
shn.shr_files = set(fns)
shn.ls = shn._ls_shr
+ shn.canonical = shn._canonical_shr
+ shn.dcanonical = shn._dcanonical_shr
else:
shn.ls = shn._ls
+ shn.canonical = shn._canonical
+ shn.dcanonical = shn._dcanonical
shn.shr_owner = s_un
shn.shr_src = (s_vfs, s_rem)
shn.realpath = s_vfs.canonical(s_rem)
+ o_vn, _ = shn._get_share_src("")
+ shn.lim = o_vn.lim
+ shn.flags = o_vn.flags.copy()
+ shn.dbpath = o_vn.dbpath
+ shn.histpath = o_vn.histpath
+
# root.all_aps doesn't include any shares, so make a copy where the
# share appears in all abspaths it can provide (for example for chk_ap)
ap = shn.realpath
@@ -2798,17 +3086,23 @@ class AuthSrv(object):
vn.js_ls = {
"idx": "e2d" in vf,
"itag": "e2t" in vf,
+ "dlni": "dlni" in vf,
+ "dgrid": "grid" in vf,
"dnsort": "nsort" in vf,
"dhsortn": vf["hsortn"],
"dsort": vf["sort"],
"dcrop": vf["crop"],
"dth3x": vf["th3x"],
"u2ts": vf["u2ts"],
+ "shr_who": vf["shr_who"],
"frand": bool(vf.get("rand")),
"lifetime": vf.get("lifetime") or 0,
"unlist": vf.get("unlist") or "",
"sb_lg": "" if "no_sb_lg" in vf else (vf.get("lg_sbf") or "y"),
+ "sb_md": "" if "no_sb_md" in vf else (vf.get("md_sbf") or "y"),
}
+ if "ufavico_h" in vf:
+ vn.js_ls["ufavico"] = vf["ufavico_h"]
js_htm = {
"SPINNER": self.args.spinner,
"s_name": self.args.bname,
@@ -2818,14 +3112,17 @@ class AuthSrv(object):
"have_c2flac": self.args.allow_flac,
"have_c2wav": self.args.allow_wav,
"have_shr": self.args.shr,
+ "shr_who": vf["shr_who"],
"have_zip": not self.args.no_zip,
+ "have_zls": not self.args.no_zls,
"have_mv": not self.args.no_mv,
"have_del": not self.args.no_del,
"have_unpost": int(self.args.unpost),
"have_emp": int(self.args.emp),
"md_no_br": int(vf.get("md_no_br") or 0),
"ext_th": vf.get("ext_th_d") or {},
- "sb_md": "" if "no_sb_md" in vf else (vf.get("md_sbf") or "y"),
+ "sb_lg": vn.js_ls["sb_lg"],
+ "sb_md": vn.js_ls["sb_md"],
"sba_md": vf.get("md_sba") or "",
"sba_lg": vf.get("lg_sba") or "",
"txt_ext": self.args.textfiles.replace(",", " "),
@@ -2833,7 +3130,8 @@ class AuthSrv(object):
"unlist0": vf.get("unlist") or "",
"see_dots": self.args.see_dots,
"dqdel": self.args.qdel,
- "dgrid": "grid" in vf,
+ "dlni": vn.js_ls["dlni"],
+ "dgrid": vn.js_ls["dgrid"],
"dgsel": "gsel" in vf,
"dnsort": "nsort" in vf,
"dhsortn": vf["hsortn"],
@@ -2843,6 +3141,7 @@ class AuthSrv(object):
"dvol": self.args.au_vol,
"idxh": int(self.args.ih),
"dutc": not self.args.localtime,
+ "dfszf": self.args.ui_filesz.strip("-"),
"themes": self.args.themes,
"turbolvl": self.args.turbo,
"nosubtle": self.args.nosubtle,
@@ -2854,6 +3153,14 @@ class AuthSrv(object):
"lifetime": vn.js_ls["lifetime"],
"u2sort": self.args.u2sort,
}
+ zs = "ui_noacci ui_nocpla ui_noctxb ui_nolbar ui_nombar ui_nonav ui_notree ui_norepl ui_nosrvi"
+ for zs in zs.split():
+ if vf.get(zs):
+ js_htm[zs] = 1
+ zs = "notooltips"
+ for zs in zs.split():
+ if getattr(self.args, zs, False):
+ js_htm[zs] = 1
vn.js_htm = json_hesc(json.dumps(js_htm))
vols = list(vfs.all_nodes.values())
@@ -2864,7 +3171,10 @@ class AuthSrv(object):
self.log("BUG: /%s not in all_nodes" % (vol.vpath,), 1)
vols.append(vol)
if shr in vfs.all_nodes:
- self.log("BUG: %s found in all_nodes" % (shr,), 1)
+ t = "invalid config: a volume is overlapping with the --shr global-option (/%s)"
+ t = t % (shr,)
+ self.log(t, 1)
+ raise Exception(t)
for vol in vols:
dbv = vol.get_dbv("")[0]
@@ -3023,7 +3333,7 @@ class AuthSrv(object):
pwdb = {}
else:
jtxt = read_utf8(self.log, ap, True)
- pwdb = json.loads(jtxt)
+ pwdb = json.loads(jtxt) if jtxt.strip() else {}
pwdb = [x for x in pwdb if x[0] != uname]
pwdb.append((uname, self.defpw[uname], hpw))
@@ -3047,7 +3357,7 @@ class AuthSrv(object):
return
jtxt = read_utf8(self.log, ap, True)
- pwdb = json.loads(jtxt)
+ pwdb = json.loads(jtxt) if jtxt.strip() else {}
useen = set()
urst = set()
@@ -3202,7 +3512,7 @@ class AuthSrv(object):
raise Exception("volume not found: " + zs)
self.log(str({"users": users, "vols": vols, "flags": flags}))
- t = "/{}: read({}) write({}) move({}) del({}) dots({}) get({}) upGet({}) uadmin({})"
+ t = "/{}: read({}) write({}) move({}) del({}) dots({}) get({}) upGet({}) html({}) uadmin({})"
for k, zv in self.vfs.all_vols.items():
vc = zv.axs
vs = [
@@ -3478,6 +3788,11 @@ class AuthSrv(object):
self.log("generated config:\n\n" + "\n".join(ret))
+def derive_args(args: argparse.Namespace) -> None:
+ args.have_idp_hdrs = bool(args.idp_h_usr or args.idp_hm_usr)
+ args.have_ipu_or_ipr = bool(args.ipu or args.ipr)
+
+
def n_du_who(s: str) -> int:
if s == "all":
return 9
diff --git a/copyparty/bos/bos.py b/copyparty/bos/bos.py
index 408244b9..9013a066 100644
--- a/copyparty/bos/bos.py
+++ b/copyparty/bos/bos.py
@@ -40,7 +40,7 @@ def makedirs(name: str, vf: dict[str, Any] = MKD_755, exist_ok: bool = True) ->
todo = []
bname = fsenc(name)
while bname:
- if os.path.isdir(bname):
+ if os.path.isdir(bname) or bname in todo:
break
todo.append(bname)
bname = os.path.dirname(bname)
@@ -104,7 +104,11 @@ def utime(
def utime_c(
- log: Union["NamedLogger", Any], p: str, ts: int, follow_symlinks: bool = True, throw: bool = False
+ log: Union["NamedLogger", Any],
+ p: str,
+ ts: int,
+ follow_symlinks: bool = True,
+ throw: bool = False,
) -> Optional[int]:
clamp = 0
ov = ts
diff --git a/copyparty/broker_mpw.py b/copyparty/broker_mpw.py
index f1db3a29..c921cd7e 100644
--- a/copyparty/broker_mpw.py
+++ b/copyparty/broker_mpw.py
@@ -12,6 +12,7 @@ import queue
from .__init__ import ANYWIN
from .authsrv import AuthSrv
from .broker_util import BrokerCli, ExceptionalQueue, NotExQueue
+from .fsutil import ramdisk_chk
from .httpsrv import HttpSrv
from .util import FAKE_MP, Daemon, HMaccas
@@ -56,6 +57,7 @@ class MpWorker(BrokerCli):
# starting to look like a good idea
self.asrv = AuthSrv(args, None, False)
+ ramdisk_chk(self.asrv)
# instantiate all services here (TODO: inheritance?)
self.iphash = HMaccas(os.path.join(self.args.E.cfg, "iphash"), 8)
@@ -99,6 +101,7 @@ class MpWorker(BrokerCli):
if dest == "reload":
self.logw("mpw.asrv reloading")
self.asrv.reload()
+ ramdisk_chk(self.asrv)
self.logw("mpw.asrv reloaded")
continue
diff --git a/copyparty/cert.py b/copyparty/cert.py
index 49fa9ea2..18859536 100644
--- a/copyparty/cert.py
+++ b/copyparty/cert.py
@@ -2,6 +2,7 @@ import calendar
import errno
import json
import os
+import shutil
import time
from .__init__ import ANYWIN
@@ -19,6 +20,19 @@ else:
VF = {"mv_re_t": 0, "rm_re_t": 0}
+def _sp_err(exe, what, rc, so, se, sin):
+ try:
+ zs = shutil.which(exe)
+ except:
+ zs = ">"
+ try:
+ zi = os.path.getsize(zs)
+ except:
+ zi = 0
+ t = "failed to %s; error %s using %s (%s):\n STDOUT: %s\n STDERR: %s\n STDIN: %s\n"
+ raise Exception(t % (what, rc, zs, zi, so, se, sin.decode("utf-8")))
+
+
def ensure_cert(log: "RootLogger", args) -> None:
"""
the default cert (and the entire TLS support) is only here to enable the
@@ -107,13 +121,13 @@ def _gen_ca(log: "RootLogger", args):
cmd = "cfssl gencert -initca -"
rc, so, se = runcmd(cmd.split(), 30, sin=sin)
if rc:
- raise Exception("failed to create ca-cert: {}, {}".format(rc, se), 3)
+ _sp_err("cfssl", "create ca-cert", rc, so, se, sin)
cmd = "cfssljson -bare ca"
sin = so.encode("utf-8")
rc, so, se = runcmd(cmd.split(), 10, sin=sin, cwd=args.crt_dir)
if rc:
- raise Exception("failed to translate ca-cert: {}, {}".format(rc, se), 3)
+ _sp_err("cfssljson", "translate ca-cert", rc, so, se, sin)
bname = os.path.join(args.crt_dir, "ca")
try:
@@ -201,13 +215,13 @@ def _gen_srv(log: "RootLogger", args, netdevs: dict[str, Netdev]):
acmd = cmd.split() + ["-hostname=" + ",".join(names), "-"]
rc, so, se = runcmd(acmd, 30, sin=sin, cwd=args.crt_dir)
if rc:
- raise Exception("failed to create cert: {}, {}".format(rc, se))
+ _sp_err("cfssl", "create cert", rc, so, se, sin)
cmd = "cfssljson -bare srv"
sin = so.encode("utf-8")
rc, so, se = runcmd(cmd.split(), 10, sin=sin, cwd=args.crt_dir)
if rc:
- raise Exception("failed to translate cert: {}, {}".format(rc, se))
+ _sp_err("cfssljson", "translate cert", rc, so, se, sin)
bname = os.path.join(args.crt_dir, "srv")
try:
diff --git a/copyparty/cfg.py b/copyparty/cfg.py
index 549ffa10..d33287e9 100644
--- a/copyparty/cfg.py
+++ b/copyparty/cfg.py
@@ -19,6 +19,7 @@ def vf_bmap() -> dict[str, str]:
"no_clone": "noclone",
"no_dirsz": "nodirsz",
"no_dupe": "nodupe",
+ "no_dupe_m": "nodupem",
"no_forget": "noforget",
"no_pipe": "nopipe",
"no_robots": "norobots",
@@ -29,6 +30,7 @@ def vf_bmap() -> dict[str, str]:
}
for k in (
"dedup",
+ "dlni",
"dotsrch",
"e2d",
"e2ds",
@@ -52,11 +54,23 @@ def vf_bmap() -> dict[str, str]:
"og",
"og_no_head",
"og_s_title",
+ "opds",
"rand",
"reflink",
+ "rm_partial",
"rmagic",
"rss",
+ "ui_noacci",
+ "ui_nocpla",
+ "ui_nolbar",
+ "ui_nombar",
+ "ui_nonav",
+ "ui_notree",
+ "ui_norepl",
+ "ui_nosrvi",
+ "ui_noctxb",
"wo_up_readme",
+ "wram",
"xdev",
"xlink",
"xvol",
@@ -80,14 +94,21 @@ def vf_vmap() -> dict[str, str]:
"th_x3": "th3x",
}
for k in (
+ "apnd_who",
"bup_ck",
+ "cachectl",
+ "casechk",
"chmod_d",
"chmod_f",
"dbd",
"du_who",
+ "epilogues",
+ "ufavico",
"forget_ip",
+ "fsnt",
"hsortn",
"html_head",
+ "html_head_s",
"lg_sbf",
"md_sbf",
"lg_sba",
@@ -104,16 +125,25 @@ def vf_vmap() -> dict[str, str]:
"og_title_i",
"og_tpl",
"og_ua",
+ "opds_exts",
+ "prologues",
+ "preadmes",
"put_ck",
"put_name",
+ "readmes",
"mv_retry",
"rm_retry",
+ "rss_sort",
+ "rss_fmt_t",
+ "rss_fmt_d",
+ "shr_who",
"sort",
"tail_fd",
"tail_rate",
"tail_tmax",
"tail_who",
"tcolor",
+ "th_qv",
"th_spec_p",
"txt_eol",
"unlist",
@@ -181,12 +211,17 @@ flagcats = {
"safededup": "verify on-disk data before using it for dedup",
"noclone": "take dupe data from clients, even if available on HDD",
"nodupe": "rejects existing files (instead of linking/cloning them)",
+ "nodupem": "rejects existing files during moves as well",
+ "casechk=auto": "actively prevent case-insensitive filesystem? y/n",
"chmod_d=755": "unix-permission for new dirs/folders",
"chmod_f=644": "unix-permission for new files",
"uid=573": "change owner of new files/folders to unix-user 573",
"gid=999": "change owner of new files/folders to unix-group 999",
+ "fsnt=auto": "filesystem filename traits (lin/win/mac/auto)",
+ "wram": "allow uploading into ramdisks",
"sparse": "force use of sparse files, mainly for s3-backed storage",
"nosparse": "deny use of sparse files, mainly for slow storage",
+ "rm_partial": "delete unfinished uploads from HDD when they timeout",
"daw": "enable full WebDAV write support (dangerous);\nPUT-operations will now \033[1;31mOVERWRITE\033[0;35m existing files",
"nosub": "forces all uploads into the top folder of the vfs",
"magic": "enables filetype detection for nameless uploads",
@@ -198,6 +233,7 @@ flagcats = {
"pk": "forces server-side compression, optional arg: xz,9",
},
"upload rules": {
+ "apnd_who=dw": "who can append? (aw/dw/w/no)",
"maxn=250,600": "max 250 uploads over 15min",
"maxb=1g,300": "max 1 GiB over 5min (suffixes: b, k, m, g, t)",
"vmaxb=1g": "total volume size max 1 GiB (suffixes: b, k, m, g, t)",
@@ -215,6 +251,7 @@ flagcats = {
"upload rotation\n(moves all uploads into the specified folder structure)": {
"rotn=100,3": "3 levels of subfolders with 100 entries in each",
"rotf=%Y-%m/%d-%H": "date-formatted organizing",
+ "rotf_tz=Europe/Oslo": "timezone (default=UTC)",
"lifetime=3600": "uploads are deleted after 1 hour",
},
"database, general": {
@@ -265,6 +302,7 @@ flagcats = {
"thsize": "thumbnail res; WxH",
"crop": "center-cropping (y/n/fy/fn)",
"th3x": "3x resolution (y/n/fy/fn)",
+ "th_qv=40": "thumbnail quality (10~90)",
"convt": "convert-to-image timeout in seconds",
"aconvt": "convert-to-audio timeout in seconds",
"th_spec_p=1": "make spectrograms? 0=never 1=fallback 2=always",
@@ -293,8 +331,11 @@ flagcats = {
"sort": "default sort order",
"nsort": "natural-sort of leading digits in filenames",
"hsortn": "number of sort-rules to add to media URLs",
+ "ufavico=URL": "per-volume favicon (.ico/png/gif/svg)",
"unlist": "dont list files matching REGEX",
+ "dlni": "force-download (no-inline) files on click",
"html_head=TXT": "includes TXT in the , or @PATH for file at PATH",
+ "html_head_s=TXT": "additional static text in the html ",
"tcolor=#fc0": "theme color (a hint for webbrowsers, discord, etc.)",
"nodirsz": "don't show total folder size",
"du_who=all": "show disk-usage info to everyone",
@@ -302,6 +343,10 @@ flagcats = {
"norobots": "kindly asks search engines to leave",
"unlistcr": "don't list read-access in controlpanel",
"unlistcw": "don't list write-access in controlpanel",
+ "prologues=.prologue.html": "files to embed above/before files",
+ "epilogues=.epilogue.html": "files to embed below/after files",
+ "readmes=readme.md,README.md": "files to embed as readmes",
+ "preadmes=preadme.md,PREADME.md": "files to embed as preadmes",
"no_sb_md": "disable js sandbox for markdown files",
"no_sb_lg": "disable js sandbox for prologue/epilogue",
"sb_md": "enable js sandbox for markdown files (default)",
@@ -311,6 +356,15 @@ flagcats = {
"md_sba": "value of iframe allow-prop for markdown-sandbox",
"lg_sba": "value of iframe allow-prop for *logue-sandbox",
"nohtml": "return html and markdown as text/html",
+ "ui_noacci": "hide account-info in the UI",
+ "ui_nocpla": "hide cpanel-link in the UI",
+ "ui_nolbar": "hide link-bar in the UI",
+ "ui_nombar": "hide top-menu in the UI",
+ "ui_nonav": "hide navpane+breadcrumbs in the UI",
+ "ui_notree": "hide navpane in the UI",
+ "ui_norepl": "hide repl-button in the UI",
+ "ui_nosrvi": "hide server-info in the UI",
+ "ui_noctxb": "hide context-buttons in the UI",
},
"opengraph (discord embeds)": {
"og": "enable OG (disables hotlinking)",
@@ -326,6 +380,10 @@ flagcats = {
"og_no_head": "you want to add tags manually with og_tpl",
"og_ua": "if defined: only send OG html if useragent matches this regex",
},
+ "opds": {
+ "opds": "enable OPDS",
+ "opds_exts": "file formats to list in OPDS feeds; leave empty to show everything",
+ },
"textfiles": {
"md_no_br": "newline only on double-newline or two tailing spaces",
"md_hist": "where to put markdown backups; s=subfolder, v=volHist, n=nope",
@@ -341,6 +399,12 @@ flagcats = {
"tail_tmax=30": "kill connection after 30 sec",
"tail_who=2": "restrict ?tail access (1=admins,2=authed,3=everyone)",
},
+ "rss": {
+ "rss": "allow '?rss' URL suffix (experimental)",
+ "rss_sort=m": "default sort-order (m/u/n/s)",
+ "rss_fmt_t={fname}": "default title-format",
+ "rss_fmt_d={album},{.tn}": "default description-format",
+ },
"others": {
"dots": "allow all users with read-access to\nenable the option to show dotfiles in listings",
"fk=8": 'generates per-file accesskeys,\nwhich are then required at the "g" permission;\nkeys are invalidated if filesize or inode changes',
@@ -348,8 +412,8 @@ flagcats = {
"dk=8": 'generates per-directory accesskeys,\nwhich are then required at the "g" permission;\nkeys are invalidated if filesize or inode changes',
"dks": "per-directory accesskeys allow browsing into subdirs",
"dky": 'allow seeing files (not folders) inside a specific folder\nwith "g" perm, and does not require a valid dirkey to do so',
- "rss": "allow '?rss' URL suffix (experimental)",
"rmagic": "expensive analysis for mimetype accuracy",
+ "shr_who=auth": "who can create shares? no/auth/a",
"unp_who=2": "unpost only if same... 1=ip+name, 2=ip, 3=name",
"ups_who=2": "restrict viewing the list of recent uploads",
"zip_who=2": "restrict access to download-as-zip/tar",
@@ -358,6 +422,7 @@ flagcats = {
"zipmaxt=no": "reply with 'no' if download-as-zip exceeds max",
"zipmaxu": "zip-size-limit does not apply to authenticated users",
"nopipe": "disable race-the-beam (download unfinished uploads)",
+ "cachectl=no-cache": "controls caching in webbrowsers",
"mv_retry": "ms-windows: timeout for renaming busy files",
"rm_retry": "ms-windows: timeout for deleting busy files",
"davauth": "ask webdav clients to login for all folders",
diff --git a/copyparty/fsutil.py b/copyparty/fsutil.py
index 606cea49..9b2540c2 100644
--- a/copyparty/fsutil.py
+++ b/copyparty/fsutil.py
@@ -2,14 +2,15 @@
from __future__ import print_function, unicode_literals
import argparse
+import json
import os
import re
import time
from .__init__ import ANYWIN, MACOS
-from .authsrv import AXS, VFS
+from .authsrv import AXS, VFS, AuthSrv
from .bos import bos
-from .util import chkcmd, min_ex, undot
+from .util import chkcmd, json_hesc, min_ex, undot
if True: # pylint: disable=using-constant-test
from typing import Optional, Union
@@ -18,22 +19,25 @@ if True: # pylint: disable=using-constant-test
class Fstab(object):
- def __init__(self, log: "RootLogger", args: argparse.Namespace):
+ def __init__(self, log: "RootLogger", args: argparse.Namespace, verbose: bool):
self.log_func = log
+ self.verbose = verbose
self.warned = False
self.trusted = False
self.tab: Optional[VFS] = None
self.oldtab: Optional[VFS] = None
self.srctab = "a"
- self.cache: dict[str, str] = {}
+ self.cache: dict[str, tuple[str, str]] = {}
self.age = 0.0
self.maxage = args.mtab_age
def log(self, msg: str, c: Union[int, str] = 0) -> None:
+ if not c or self.verbose:
+ return
self.log_func("fstab", msg, c)
- def get(self, path: str) -> str:
+ def get(self, path: str) -> tuple[str, str]:
now = time.time()
if now - self.age > self.maxage or len(self.cache) > 9000:
self.age = now
@@ -41,6 +45,7 @@ class Fstab(object):
self.tab = None
self.cache = {}
+ mp = ""
fs = "ext4"
msg = "failed to determine filesystem at %r; assuming %s\n%s"
@@ -50,7 +55,7 @@ class Fstab(object):
path = self._winpath(path)
except:
self.log(msg % (path, fs, min_ex()), 3)
- return fs
+ return fs, ""
path = undot(path)
try:
@@ -59,14 +64,14 @@ class Fstab(object):
pass
try:
- fs = self.get_w32(path) if ANYWIN else self.get_unix(path)
+ fs, mp = self.get_w32(path) if ANYWIN else self.get_unix(path)
except:
self.log(msg % (path, fs, min_ex()), 3)
fs = fs.lower()
- self.cache[path] = fs
- self.log("found %s at %r" % (fs, path))
- return fs
+ self.cache[path] = (fs, mp)
+ self.log("found %s at %r, %r" % (fs, mp, path))
+ return fs, mp
def _winpath(self, path: str) -> str:
# try to combine volume-label + st_dev (vsn)
@@ -81,34 +86,67 @@ class Fstab(object):
self.tab = VFS(self.log_func, "idk", "/", "/", AXS(), {})
self.trusted = False
- def build_tab(self) -> None:
- self.log("inspecting mtab for changes")
-
+ def _from_sp_mount(self) -> dict[str, str]:
sptn = r"^.*? on (.*) type ([^ ]+) \(.*"
if MACOS:
sptn = r"^.*? on (.*) \(([^ ]+), .*"
ptn = re.compile(sptn)
so, _ = chkcmd(["mount"])
- tab1: list[tuple[str, str]] = []
- atab = []
+ dtab: dict[str, str] = {}
for ln in so.split("\n"):
m = ptn.match(ln)
if not m:
continue
zs1, zs2 = m.groups()
- tab1.append((str(zs1), str(zs2)))
- atab.append(ln)
+ dtab[str(zs1)] = str(zs2)
+
+ return dtab
+
+ def _from_proc(self) -> dict[str, str]:
+ ret: dict[str, str] = {}
+ with open("/proc/self/mounts", "rb", 262144) as f:
+ src = f.read(262144).decode("utf-8", "replace").split("\n")
+ for zsl in [x.split(" ") for x in src]:
+ if len(zsl) < 3:
+ continue
+ zs = zsl[1]
+ zs = zs.replace("\\011", "\t").replace("\\040", " ").replace("\\134", "\\")
+ ret[zs] = zsl[2]
+ return ret
+
+ def build_tab(self) -> None:
+ self.log("inspecting mtab for changes")
+ dtab = self._from_sp_mount() if MACOS else self._from_proc()
# keep empirically-correct values if mounttab unchanged
- srctab = "\n".join(sorted(atab))
+ srctab = str(sorted(dtab.items()))
if srctab == self.srctab:
self.tab = self.oldtab
return
self.log("mtab has changed; reevaluating support for sparse files")
+ try:
+ fuses = [mp for mp, fs in dtab.items() if fs == "fuseblk"]
+ if not fuses or MACOS:
+ raise Exception()
+ try:
+ so, _ = chkcmd(["lsblk", "-nrfo", "FSTYPE,MOUNTPOINT"]) # centos6
+ except:
+ so, _ = chkcmd(["lsblk", "-nrfo", "FSTYPE,MOUNTPOINTS"]) # future
+ for ln in so.split("\n"):
+ zsl = ln.split(" ", 1)
+ if len(zsl) != 2:
+ continue
+ fs, mp = zsl
+ if mp in fuses:
+ dtab[mp] = fs
+ except:
+ pass
+
+ tab1 = list(dtab.items())
tab1.sort(key=lambda x: (len(x[0]), x[0]))
path1, fs1 = tab1[0]
tab = VFS(self.log_func, fs1, path1, path1, AXS(), {})
@@ -146,7 +184,7 @@ class Fstab(object):
vn.realpath = ptn.sub(nval, vn.realpath)
visit.extend(list(vn.nodes.values()))
- def get_unix(self, path: str) -> str:
+ def get_unix(self, path: str) -> tuple[str, str]:
if not self.tab:
try:
self.build_tab()
@@ -155,20 +193,73 @@ class Fstab(object):
# prisonparty or other restrictive environment
if not self.warned:
self.warned = True
- self.log("failed to build tab:\n{}".format(min_ex()), 3)
+ t = "failed to associate fs-mounts with the VFS (this is fine):\n%s"
+ self.log(t % (min_ex(),), 6)
self.build_fallback()
assert self.tab # !rm
ret = self.tab._find(path)[0]
if self.trusted or path == ret.vpath:
- return ret.realpath.split("/")[0]
+ return ret.realpath.split("/")[0], ret.vpath
else:
- return "idk"
+ return "idk", ""
- def get_w32(self, path: str) -> str:
+ def get_w32(self, path: str) -> tuple[str, str]:
if not self.tab:
self.build_fallback()
assert self.tab # !rm
ret = self.tab._find(path)[0]
- return ret.realpath
+ return ret.realpath, ""
+
+
+_fstab: Optional[Fstab] = None
+winfs = set(("msdos", "vfat", "ntfs", "exfat"))
+# "msdos" = vfat on macos
+
+
+def ramdisk_chk(asrv: AuthSrv) -> None:
+ # should have been in authsrv but that's a circular import
+ global _fstab
+ mods = []
+ ramfs = ("tmpfs", "overlay")
+ log = asrv.log_func or print
+ if not _fstab:
+ _fstab = Fstab(log, asrv.args, False)
+ for vn in asrv.vfs.all_nodes.values():
+ if not vn.axs.uwrite or "wram" in vn.flags:
+ continue
+ ap = vn.realpath
+ if not ap or os.path.isfile(ap):
+ continue
+ fs, mp = _fstab.get(ap)
+ mp = "/" + mp.strip("/")
+ if fs == "tmpfs" or (mp == "/" and fs in ramfs):
+ mods.append((vn.vpath, ap, fs, mp))
+ vn.axs.uwrite.clear()
+ vn.axs.umove.clear()
+ for un, ztsp in list(vn.uaxs.items()):
+ zsl = list(ztsp)
+ zsl[1] = False
+ zsl[2] = False
+ vn.uaxs[un] = tuple(zsl) # type: ignore
+ if mods:
+ t = "WARNING: write-access was removed from the following volumes because they are not mapped to an actual HDD for storage! All uploaded data would live in RAM only, and all uploaded files would be LOST on next reboot. To allow uploading and ignore this hazard, enable the 'wram' option (global/volflag). List of affected volumes:"
+ t2 = ["\n volume=[/%s], abspath=%r, type=%s, root=%r" % x for x in mods]
+ log("vfs", t + "".join(t2) + "\n", 1)
+
+ assume = "mac" if MACOS else "lin"
+ for vol in asrv.vfs.all_nodes.values():
+ if not vol.realpath or vol.flags.get("is_file"):
+ continue
+ zs = vol.flags["fsnt"].strip()[:3].lower()
+ if ANYWIN and not zs:
+ zs = "win"
+ if zs in ("lin", "win", "mac"):
+ vol.flags["fsnt"] = zs
+ continue
+ fs = _fstab.get(vol.realpath)[0]
+ fs = "win" if fs in winfs else assume
+ htm = json.loads(vol.js_htm)
+ vol.flags["fsnt"] = vol.js_ls["fsnt"] = htm["fsnt"] = fs
+ vol.js_htm = json_hesc(json.dumps(htm))
diff --git a/copyparty/ftpd.py b/copyparty/ftpd.py
index ab8db97f..be091c18 100644
--- a/copyparty/ftpd.py
+++ b/copyparty/ftpd.py
@@ -86,7 +86,7 @@ class FtpAuth(DummyAuthorizer):
if args.usernames:
alts = ["%s:%s" % (username, password)]
else:
- alts = password, username
+ alts = [password, username]
for zs in alts:
zs = asrv.iacct.get(asrv.ah.hash(zs), "")
@@ -174,7 +174,7 @@ class FtpFs(AbstractedFS):
t = "Unsupported characters in [{}]"
raise FSE(t.format(vpath), 1)
- fn = sanitize_fn(fn or "", "")
+ fn = sanitize_fn(fn or "")
vpath = vjoin(rd, fn)
vfs, rem = self.hub.asrv.vfs.get(vpath, self.uname, r, w, m, d)
if (
@@ -198,10 +198,13 @@ class FtpFs(AbstractedFS):
if not avfs:
raise FSE(t.format(vpath), 1)
- cr, cw, cm, cd, _, _, _, _ = avfs.can_access("", self.h.uname)
+ cr, cw, cm, cd, _, _, _, _, _ = avfs.uaxs[self.h.uname]
if r and not cr or w and not cw or m and not cm or d and not cd:
raise FSE(t.format(vpath), 1)
+ if "bcasechk" in vfs.flags and not vfs.casechk(rem, True):
+ raise FSE("No such file or directory", 1)
+
return os.path.join(vfs.realpath, rem), vfs, rem
except Pebkac as ex:
raise FSE(str(ex))
@@ -246,9 +249,36 @@ class FtpFs(AbstractedFS):
need_unlink = False
td = 0
- if w and need_unlink:
+ xbu = vfs.flags.get("xbu")
+ if xbu:
+ hr = runhook(
+ self.log,
+ None,
+ self.hub.up2k,
+ "xbu.ftp",
+ xbu,
+ ap,
+ filename,
+ "",
+ "",
+ "",
+ 0,
+ 0,
+ "1.3.8.7",
+ time.time(),
+ None,
+ )
+ t = hr.get("rejectmsg") or ""
+ if t or hr.get("rc") != 0:
+ if not t:
+ t = "upload blocked by xbu server config: %r" % (filename,)
+ self.log(t, 3)
+ raise FSE(t)
+
+ if w and need_unlink: # type: ignore # !rm
+ assert td # type: ignore # !rm
if td >= -1 and td <= self.args.ftp_wt:
- # within permitted timeframe; unlink and accept
+ # within permitted timeframe; allow overwrite or resume
do_it = True
elif self.args.no_del or self.args.ftp_no_ow:
# file too old, or overwrite not allowed; reject
@@ -265,7 +295,9 @@ class FtpFs(AbstractedFS):
if not do_it:
raise FSE("File already exists")
- wunlink(self.log, ap, VF_CAREFUL)
+ # Don't unlink file for append mode
+ elif "a" not in mode:
+ wunlink(self.log, ap, VF_CAREFUL)
ret = open(fsenc(ap), mode, self.args.iobuf)
if w and "fperms" in vfs.flags:
@@ -276,6 +308,10 @@ class FtpFs(AbstractedFS):
def chdir(self, path: str) -> None:
nwd = join(self.cwd, path)
vfs, rem = self.hub.asrv.vfs.get(nwd, self.uname, False, False)
+ if not vfs.realpath:
+ self.cwd = nwd
+ return
+
ap = vfs.canonical(rem)
try:
st = bos.stat(ap)
@@ -285,12 +321,9 @@ class FtpFs(AbstractedFS):
# returning 550 is library-default and suitable
raise FSE("No such file or directory")
- if vfs.realpath:
- avfs = vfs.chk_ap(ap, st)
- if not avfs:
- raise FSE("Permission denied", 1)
- else:
- avfs = vfs
+ avfs = vfs.chk_ap(ap, st)
+ if not avfs:
+ raise FSE("Permission denied", 1)
self.cwd = nwd
@@ -489,24 +522,30 @@ class FtpHandler(FTPHandler):
return
self.vfs_map[ap] = vp
xbu = vfs.flags.get("xbu")
- if xbu and not runhook(
- None,
- None,
- self.hub.up2k,
- "xbu.ftpd",
- xbu,
- ap,
- vp,
- "",
- self.uname,
- self.hub.asrv.vfs.get_perms(vp, self.uname),
- 0,
- 0,
- self.cli_ip,
- time.time(),
- "",
- ):
- raise FSE("Upload blocked by xbu server config")
+ if xbu:
+ hr = runhook(
+ None,
+ None,
+ self.hub.up2k,
+ "xbu.ftpd",
+ xbu,
+ ap,
+ vp,
+ "",
+ self.uname,
+ self.hub.asrv.vfs.get_perms(vp, self.uname),
+ 0,
+ 0,
+ self.cli_ip,
+ time.time(),
+ None,
+ )
+ t = hr.get("rejectmsg") or ""
+ if t or hr.get("rc") != 0:
+ if not t:
+ t = "Upload blocked by xbu server config: %r" % (vp,)
+ self.respond("550 %s" % (t,), logging.info)
+ return
# print("ftp_STOR: {} {} => {}".format(vp, mode, ap))
ret = FTPHandler.ftp_STOR(self, file, mode)
diff --git a/copyparty/httpcli.py b/copyparty/httpcli.py
index dd4d958e..e58867c4 100644
--- a/copyparty/httpcli.py
+++ b/copyparty/httpcli.py
@@ -30,12 +30,12 @@ try:
except:
pass
-from .__init__ import ANYWIN, RES, TYPE_CHECKING, EnvParams, unicode
+from .__init__ import ANYWIN, RES, RESM, TYPE_CHECKING, EnvParams, unicode
from .__version__ import S_VERSION
from .authsrv import LEELOO_DALLAS, VFS # typechk
from .bos import bos
+from .qrkode import QrCode, qr2svg, qrgen
from .star import StreamTar
-from .stolen.qrcodegen import QrCode, qr2svg
from .sutil import StreamArc, gfilter
from .szip import StreamZip
from .up2k import up2k_chunksize
@@ -48,8 +48,10 @@ from .util import (
FN_EMB,
HAVE_SQLITE3,
HTTPCODE,
- META_NOBOTS,
UTC,
+ VPTL_MAC,
+ VPTL_OS,
+ VPTL_WIN,
Garda,
MultipartParser,
ODict,
@@ -125,7 +127,17 @@ from .util import (
if True: # pylint: disable=using-constant-test
import typing
- from typing import Any, Generator, Iterable, Match, Optional, Pattern, Type, Union
+ from typing import (
+ Any,
+ Generator,
+ Iterable,
+ Match,
+ Optional,
+ Pattern,
+ Sequence,
+ Type,
+ Union,
+ )
if TYPE_CHECKING:
from .httpconn import HttpConn
@@ -137,19 +149,16 @@ _ = (argparse, threading)
USED4SEC = {"usedforsecurity": False} if sys.version_info > (3, 9) else {}
-NO_CACHE = {"Cache-Control": "no-cache"}
-
ALL_COOKIES = "k304 no304 js idxh dots cppwd cppws".split()
BADXFF = " due to dangerous misconfiguration (the http-header specified by --xff-hdr was received from an untrusted reverse-proxy)"
+BADXFF2 = ". Some copyparty features are now disabled as a safety measure.\n\n\n"
+BADXFP = ', or change the copyparty global-option "xf-proto" to another header-name to read this value from. Alternatively, if your reverseproxy is not able to provide a header similar to "X-Forwarded-Proto", then you must tell copyparty which protocol to assume by setting global-option --xf-proto-fb to either http or https'
+BADXFFB = "NOTE: serverlog has a message regarding your reverse-proxy config"
H_CONN_KEEPALIVE = "Connection: Keep-Alive"
H_CONN_CLOSE = "Connection: Close"
-LOGUES = [[0, ".prologue.html"], [1, ".epilogue.html"]]
-
-READMES = [[0, ["preadme.md", "PREADME.md"]], [1, ["readme.md", "README.md"]]]
-
RSS_SORT = {"m": "mt", "u": "at", "n": "fn", "s": "sz"}
A_FILE = os.stat_result(
@@ -157,15 +166,35 @@ A_FILE = os.stat_result(
)
RE_CC = re.compile(r"[\x00-\x1f]") # search always faster
+RE_USAFE = re.compile(r'[\x00-\x1f<>"]') # search always faster
RE_HSAFE = re.compile(r"[\x00-\x1f<>\"'&]") # search always much faster
RE_HOST = re.compile(r"[^][0-9a-zA-Z.:_-]") # search faster <=17ch
RE_MHOST = re.compile(r"^[][0-9a-zA-Z.:_-]+$") # match faster >=18ch
RE_K = re.compile(r"[^0-9a-zA-Z_-]") # search faster <=17ch
RE_HR = re.compile(r"[<>\"'&]")
RE_MDV = re.compile(r"(.*)\.([0-9]+\.[0-9]{3})(\.[Mm][Dd])$")
+RE_RSS_KW = re.compile(r"(\{[^} ]+\})")
UPARAM_CC_OK = set("doc move tree".split())
+PERMS_rwh = [
+ [True, False],
+ [False, True],
+ [False, False, False, False, False, False, True],
+]
+
+
+def _build_zip_xcode() -> Sequence[str]:
+ ret = "opus mp3 flac wav p".split()
+ for codec in ("w", "j"):
+ for suf in ("", "f", "f3", "3"):
+ ret.append("%s%s" % (codec, suf))
+ return ret
+
+
+ZIP_XCODE_L = _build_zip_xcode()
+ZIP_XCODE_S = set(ZIP_XCODE_L)
+
class HttpCli(object):
"""
@@ -194,12 +223,11 @@ class HttpCli(object):
self.log_func = conn.log_func # mypy404
self.log_src = conn.log_src # mypy404
self.gen_fk = self._gen_fk if self.args.log_fk else gen_filekey
- self.tls: bool = hasattr(self.s, "cipher")
+ self.tls = self.is_https = hasattr(self.s, "cipher")
self.is_vproxied = bool(self.args.R)
# placeholders; assigned by run()
self.keepalive = False
- self.is_https = False
self.in_hdr_recv = True
self.headers: dict[str, str] = {}
self.mode = " " # http verb
@@ -220,8 +248,8 @@ class HttpCli(object):
self.dl_id = ""
self.gctx = " " # additional context for garda
self.trailing_slash = True
- self.uname = " "
- self.pw = " "
+ self.uname = "*"
+ self.pw = ""
self.rvol = self.wvol = self.avol = empty_stringlist
self.do_log = True
self.can_read = False
@@ -230,6 +258,7 @@ class HttpCli(object):
self.can_delete = False
self.can_get = False
self.can_upget = False
+ self.can_html = False
self.can_admin = False
self.can_dot = False
self.out_headerlist: list[tuple[str, str]] = []
@@ -276,7 +305,7 @@ class HttpCli(object):
tpl = self.conn.hsrv.j2[name]
ka["r"] = self.args.SR if self.is_vproxied else ""
ka["ts"] = self.conn.hsrv.cachebuster()
- ka["lang"] = self.args.lang
+ ka["lang"] = self.cookies.get("cplng") or self.args.lang
ka["favico"] = self.args.favico
ka["s_doctitle"] = self.args.doctitle
ka["tcolor"] = self.vn.flags["tcolor"]
@@ -286,10 +315,9 @@ class HttpCli(object):
zs += "&" if "?" in zs else "?"
ka["js"] = zs
- zso = self.vn.flags.get("html_head")
- if zso:
+ if "html_head_d" in self.vn.flags:
ka["this"] = self
- self._build_html_head(zso, ka)
+ self._build_html_head(ka)
ka["html_head"] = self.html_head
return tpl.render(**ka) # type: ignore
@@ -300,7 +328,7 @@ class HttpCli(object):
def run(self) -> bool:
"""returns true if connection can be reused"""
self.out_headers = {
- "Vary": "Origin, PW, Cookie",
+ "Vary": self.args.http_vary,
"Cache-Control": "no-store, max-age=0",
}
@@ -333,6 +361,7 @@ class HttpCli(object):
k, zs = header_line.split(":", 1)
self.headers[k.lower()] = zs.strip()
except:
+ headerlines = [repr(x) for x in headerlines]
msg = "#[ " + " ]\n#[ ".join(headerlines) + " ]"
raise Pebkac(400, "bad headers", log=msg)
@@ -362,9 +391,6 @@ class HttpCli(object):
self.keepalive = "close" not in zs and (
self.http_ver != "HTTP/1.0" or zs == "keep-alive"
)
- self.is_https = (
- self.headers.get("x-forwarded-proto", "").lower() == "https" or self.tls
- )
self.host = self.headers.get("host") or ""
if not self.host:
if self.s.family == socket.AF_UNIX:
@@ -389,7 +415,7 @@ class HttpCli(object):
self.bad_xff = True
if self.args.rproxy != 9999999:
t = "global-option --rproxy %d could not be used (out-of-bounds) for the received header [%s]"
- self.log(t % (self.args.rproxy, zso), c=3)
+ self.log(t % (self.args.rproxy, zso) + BADXFF2, c=3)
else:
zsl = [
" rproxy: %d if this client's IP-address is [%s]"
@@ -398,7 +424,24 @@ class HttpCli(object):
]
t = 'could not determine the client\'s IP-address because the global-option --rproxy has not been configured, so the request-header [%s] specified by global-option --xff-hdr cannot be used safely! The raw header value was [%s]. Please see the "reverse-proxy" section in the readme. The best approach is to configure your reverse-proxy to give copyparty the exact IP-address to assume (perhaps in another header), but you may also try the following:'
t = t % (self.args.xff_hdr, zso)
- self.log("%s\n\n%s\n" % (t, "\n".join(zsl)), 3)
+ t = "%s\n\n%s\n" % (t, "\n".join(zsl))
+
+ zs = self.headers.get(self.args.xf_proto)
+ t2 = "\nFurthermore, the following request-headers are also relevant, and you should check that the values below are sensible:\n\n request-header [%s] (configured with global-option --xf-proto) has the value [%s]; this should be the protocol that the webbrowser is using, so either 'http' or 'https'"
+ t += t2 % (self.args.xf_proto, zs or "NOT-PROVIDED")
+ if not zs:
+ t += ". Because the header is not provided by the reverse-proxy, you must either fix the reverseproxy config"
+ t += BADXFP
+ zs = self.headers.get(self.args.xf_host)
+ t2 = "\n\n request-header [%s] (configured with global-option --xf-host) has the value [%s]; this should be the website domain or external IP-address which the webbrowser is accessing"
+ t += t2 % (self.args.xf_host, zs or "NOT-PROVIDED")
+ if not zs:
+ zs = self.headers.get("host")
+ t2 = ". Because the header is not provided by the reverse-proxy, copyparty is using the standard [Host] header which has the value [%s]"
+ t += t2 % (zs or "NOT-PROVIDED")
+ if zs:
+ t += ". If that is the address that visitors are supposed to use to access your server -- or, in other words, it is not some internal address you wish to keep secret -- then the current choice of using the [Host] header is fine (usually the case)"
+ self.log(t + "\n\n\n", 3)
pip = self.conn.addr[0]
xffs = self.conn.xff_nm
@@ -408,6 +451,7 @@ class HttpCli(object):
t += ' Note: if you are behind cloudflare, then this default header is not a good choice; please first make sure your local reverse-proxy (if any) does not allow non-cloudflare IPs from providing cf-* headers, and then add this additional global setting: "--xff-hdr=cf-connecting-ip"'
else:
t += ' Note: depending on your reverse-proxy, and/or WAF, and/or other intermediates, you may want to read the true client IP from another header by also specifying "--xff-hdr=SomeOtherHeader"'
+ t += BADXFF2
if "." in pip:
zs = ".".join(pip.split(".")[:2]) + ".0.0/16"
@@ -420,7 +464,22 @@ class HttpCli(object):
else:
self.ip = cli_ip
self.log_src = self.conn.set_rproxy(self.ip)
- self.host = self.headers.get("x-forwarded-host") or self.host
+ self.host = self.headers.get(self.args.xf_host, self.host)
+ try:
+ self.is_https = len(self.headers[self.args.xf_proto]) == 5
+ except:
+ if self.args.xf_proto_fb:
+ self.is_https = len(self.args.xf_proto_fb) == 5
+ else:
+ self.bad_xff = True
+ self.host = "example.com"
+ t = 'got proxied request without header "%s" (global-option "xf-proto"). This header must contain either "http" or "https". Either fix your reverse-proxy config to include this header%s%s'
+ self.log(t % (self.args.xf_proto, BADXFP, BADXFF2), 3)
+
+ # the semantics of trusted_xff and bad_xff are different;
+ # trusted_xff is whether the connection came from a trusted reverseproxy,
+ # regardless of whether the client ip detection is correctly configured
+ # (the primary safeguard for idp is --idp-h-key)
trusted_xff = True
m = RE_HOST.search(self.host)
@@ -435,6 +494,11 @@ class HttpCli(object):
if self.is_banned():
return False
+ if self.conn.ipar_nm and not self.conn.ipar_nm.map(self.ip):
+ self.log("client rejected (--ipar)", 3)
+ self.terse_reply(b"", 500)
+ return False
+
if self.conn.aclose:
nka = self.conn.aclose
ip = ipnorm(self.ip)
@@ -477,8 +541,7 @@ class HttpCli(object):
self.loud_reply(t, status=400)
return False
- ptn_cc = RE_CC
- m = ptn_cc.search(self.req)
+ m = RE_USAFE.search(self.req)
if m:
zs = self.req
t = "malicious user; Cc in req0 %r => %r"
@@ -500,6 +563,7 @@ class HttpCli(object):
vpath = undot(vpath)
re_k = RE_K
+ ptn_cc = RE_CC
k_safe = UPARAM_CC_OK
for k in arglist.split("&"):
if "=" in k:
@@ -582,20 +646,21 @@ class HttpCli(object):
self.loud_reply("u wot m8", status=400)
return False
+ if VPTL_OS:
+ vpath = vpath.translate(VPTL_OS)
+
self.uparam = uparam
self.cookies = cookies
self.vpath = vpath
- self.vpaths = (
- self.vpath + "/" if self.trailing_slash and self.vpath else self.vpath
- )
+ self.vpaths = vpath + "/" if self.trailing_slash and vpath else vpath
if "qr" in uparam:
return self.tx_qr()
- if relchk(self.vpath) and (self.vpath != "*" or self.mode != "OPTIONS"):
+ if "\x00" in vpath or (ANYWIN and ("\n" in vpath or "\r" in vpath)):
self.log("illegal relpath; req(%r) => %r" % (self.req, "/" + self.vpath))
self.cbonk(self.conn.hsrv.gmal, self.req, "bad_vp", "invalid relpaths")
- return self.tx_404() and self.keepalive
+ return self.tx_404() and False
zso = self.headers.get("authorization")
bauth = ""
@@ -617,7 +682,12 @@ class HttpCli(object):
except:
pass
- self.pw = uparam.get("pw") or self.headers.get("pw") or bauth or cookie_pw
+ self.pw = (
+ uparam.get(self.args.pw_urlp)
+ or self.headers.get(self.args.pw_hdr)
+ or bauth
+ or cookie_pw
+ )
self.uname = (
self.asrv.sesa.get(self.pw)
or self.asrv.iacct.get(self.asrv.ah.hash(self.pw))
@@ -648,6 +718,9 @@ class HttpCli(object):
if self.args.idp_h_grp
else ""
)
+ if self.args.idp_chsub:
+ idp_usr = idp_usr.translate(self.args.idp_chsub_tr)
+ idp_grp = idp_grp.translate(self.args.idp_chsub_tr)
if not trusted_xff:
pip = self.conn.addr[0]
@@ -735,18 +808,25 @@ class HttpCli(object):
else:
avn = vn
- (
- self.can_read,
- self.can_write,
- self.can_move,
- self.can_delete,
- self.can_get,
- self.can_upget,
- self.can_admin,
- self.can_dot,
- ) = (
- avn.can_access("", self.uname) if avn else [False] * 8
- )
+ if "bcasechk" in vn.flags and not vn.casechk(rem, True):
+ return self.tx_404() and False
+
+ try:
+ assert avn # type: ignore # !rm
+ (
+ self.can_read,
+ self.can_write,
+ self.can_move,
+ self.can_delete,
+ self.can_get,
+ self.can_upget,
+ self.can_html,
+ self.can_admin,
+ self.can_dot,
+ ) = avn.uaxs[self.uname]
+ except:
+ pass # default is all-false
+
self.avn = avn
self.vn = vn # note: do not dbv due to walk/zipgen
self.rem = rem
@@ -754,9 +834,11 @@ class HttpCli(object):
self.s.settimeout(self.args.s_tbody or None)
if "norobots" in vn.flags:
- self.html_head += META_NOBOTS
self.out_headers["X-Robots-Tag"] = "noindex, nofollow"
+ if "html_head_s" in vn.flags:
+ self.html_head += vn.flags["html_head_s"]
+
try:
cors_k = self._cors()
if self.mode in ("GET", "HEAD"):
@@ -771,7 +853,7 @@ class HttpCli(object):
guess = "modifying" if (origin and host) else "stripping"
t = "cors-reject %s because request-header Origin=%r does not match request-protocol %r and host %r based on request-header Host=%r (note: if this request is not malicious, check if your reverse-proxy is accidentally %s request headers, in particular 'Origin', for example by running copyparty with --ihead='*' to show all request headers)"
self.log(t % (self.mode, origin, proto, self.host, host, guess), 3)
- raise Pebkac(403, "rejected by cors-check")
+ raise Pebkac(403, "rejected by cors-check (see serverlog)")
# getattr(self.mode) is not yet faster than this
if self.mode == "POST":
@@ -793,7 +875,7 @@ class HttpCli(object):
elif self.mode in ("MOVE", "COPY"):
return self.handle_cpmv() and self.keepalive
else:
- raise Pebkac(400, 'invalid HTTP verb "{0}"'.format(self.mode))
+ raise Pebkac(400, "invalid HTTP verb %r" % (self.mode,))
except Exception as ex:
if not isinstance(ex, Pebkac):
@@ -858,6 +940,16 @@ class HttpCli(object):
return self.conn.iphash.s(self.ip)
def cbonk(self, g: Garda, v: str, reason: str, descr: str) -> bool:
+ cond = self.args.dont_ban
+ if (
+ cond == "any"
+ or (cond == "auth" and self.uname != "*")
+ or (cond == "aa" and self.avol)
+ or (cond == "av" and self.can_admin)
+ or (cond == "rw" and self.can_read and self.can_write)
+ ):
+ return False
+
self.conn.hsrv.nsus += 1
if not g.lim:
return False
@@ -867,29 +959,31 @@ class HttpCli(object):
return False
xban = self.vn.flags.get("xban")
- if not xban or not runhook(
- self.log,
- self.conn.hsrv.broker,
- None,
- "xban",
- xban,
- self.vn.canonical(self.rem),
- self.vpath,
- self.host,
- self.uname,
- "",
- time.time(),
- 0,
- self.ip,
- time.time(),
- reason,
- ):
- self.log("client banned: %s" % (descr,), 1)
- self.conn.hsrv.bans[ip] = bonk
- self.conn.hsrv.nban += 1
- return True
+ if xban:
+ hr = runhook(
+ self.log,
+ self.conn.hsrv.broker,
+ None,
+ "xban",
+ xban,
+ self.vn.canonical(self.rem),
+ self.vpath,
+ self.host,
+ self.uname,
+ "",
+ time.time(),
+ 0,
+ self.ip,
+ time.time(),
+ [reason, reason],
+ )
+ if hr.get("rv") == 0:
+ return False
- return False
+ self.log("client banned: %s" % (descr,), 1)
+ self.conn.hsrv.bans[ip] = bonk
+ self.conn.hsrv.nban += 1
+ return True
def is_banned(self) -> bool:
if not self.conn.bans:
@@ -907,13 +1001,13 @@ class HttpCli(object):
return False
self.log("banned for {:.0f} sec".format(rt), 6)
- self.terse_reply(b"thank you for playing", 403)
+ self.terse_reply(self.args.banmsg_b, 403)
return True
def permit_caching(self) -> None:
cache = self.uparam.get("cache")
if cache is None:
- self.out_headers.update(NO_CACHE)
+ self.out_headers["Cache-Control"] = self.vn.flags["cachectl"]
return
n = 69 if not cache else 604869 if cache == "i" else int(cache)
@@ -927,8 +1021,8 @@ class HttpCli(object):
no304 = self.cookies.get("no304")
return no304 == "y" or (self.args.no304 == 2 and no304 != "n")
- def _build_html_head(self, maybe_html: Any, kv: dict[str, Any]) -> None:
- html = str(maybe_html)
+ def _build_html_head(self, kv: dict[str, Any]) -> None:
+ html = str(self.vn.flags["html_head_d"])
is_jinja = html[:2] in "%@%"
if is_jinja:
html = html.replace("%", "", 1)
@@ -1090,7 +1184,10 @@ class HttpCli(object):
]
if body:
- lines.append("Content-Length: " + unicode(len(body)))
+ lines.append(
+ "Content-Type: text/html; charset=utf-8\r\nContent-Length: "
+ + unicode(len(body))
+ )
lines.append("\r\n")
self.s.sendall("\r\n".join(lines).encode("utf-8") + body)
@@ -1107,6 +1204,7 @@ class HttpCli(object):
return ""
kv = {k: zs for k, zs in self.uparam.items() if k not in rm}
+ # no reason to consider args.pw_urlp
if "pw" in kv:
pw = self.cookies.get("cppws") or self.cookies.get("cppwd")
if kv["pw"] == pw:
@@ -1120,6 +1218,7 @@ class HttpCli(object):
return "?" + "&".join(r)
def ourlq(self) -> str:
+ # no reason to consider args.pw_urlp
skip = ("pw", "h", "k")
ret = []
for k, v in self.ouparam.items():
@@ -1183,12 +1282,15 @@ class HttpCli(object):
proto = "https" if self.is_https else "http"
good_origins = self.args.acao + ["%s://%s" % (proto, host)]
- if "pw" in ih or re.sub(r"(:[0-9]{1,5})?/?$", "", origin) in good_origins:
+ if (
+ self.args.pw_hdr in ih
+ or re.sub(r"(:[0-9]{1,5})?/?$", "", origin) in good_origins
+ ):
good_origin = True
bad_hdrs = ("",)
else:
good_origin = False
- bad_hdrs = ("", "pw")
+ bad_hdrs = ("", self.args.pw_hdr)
# '*' blocks auth through cookies / WWW-Authenticate;
# exact-match for Origin is necessary to unlock those,
@@ -1261,6 +1363,20 @@ class HttpCli(object):
else:
return self.tx_res(res_path)
+ if res_path in RESM:
+ ap = self.E.mod_ + RESM[res_path]
+ if (
+ "txt" not in self.uparam
+ and "mime" not in self.uparam
+ and not self.ouparam.get("dl")
+ ):
+ # return mimetype matching request extension
+ self.ouparam["dl"] = res_path.split("/")[-1]
+ if bos.path.exists(ap) or bos.path.exists(ap + ".gz"):
+ return self.tx_file(ap)
+ else:
+ return self.tx_res(res_path)
+
self.tx_404()
return False
@@ -1271,7 +1387,7 @@ class HttpCli(object):
if not self.can_read and not self.can_write and not self.can_get:
t = "@%s has no access to %r"
- if "on403" in self.vn.flags:
+ if self.vn.realpath and "on403" in self.vn.flags:
t += " (on403)"
self.log(t % (self.uname, "/" + self.vpath))
ret = self.on40x(self.vn.flags["on403"], self.vn, self.rem)
@@ -1305,6 +1421,9 @@ class HttpCli(object):
self.reply(html.encode("utf-8", "replace"), 500)
return True
+ if "ls" in self.uparam:
+ return self.tx_ls_vols()
+
if self.vpath:
ptn = self.args.nonsus_urls
if not ptn or not ptn.search(self.vpath):
@@ -1404,7 +1523,7 @@ class HttpCli(object):
uv.append(ext)
uq += " and ( %s )" % (" or ".join(zsl),)
- zs1 = self.uparam.get("sort", self.args.rss_sort)
+ zs1 = self.uparam.get("sort") or self.args.rss_sort
zs2 = zs1.lower()
zs = RSS_SORT.get(zs2)
if not zs:
@@ -1418,10 +1537,11 @@ class HttpCli(object):
hits = idx.run_query(self.uname, [self.vn], uq, uv, False, False, nmax)[0]
- pw = self.ouparam.get("pw")
- if pw:
- q_pw = "?pw=%s" % (html_escape(pw, True, True),)
- a_pw = "&pw=%s" % (html_escape(pw, True, True),)
+ pwk = self.args.pw_urlp
+ if pwk in self.ouparam and "nopw" not in self.ouparam:
+ zs = self.ouparam[pwk]
+ q_pw = "?%s=%s" % (pwk, quotep(zs))
+ a_pw = "&%s=%s" % (pwk, quotep(zs))
for i in hits:
i["rp"] += a_pw if "?" in i["rp"] else q_pw
else:
@@ -1435,6 +1555,8 @@ class HttpCli(object):
self.host,
)
feed = baseurl + self.req[1:]
+ if pwk in self.ouparam and self.ouparam.get("nopw") == "a":
+ feed = re.sub(r"&%s=[^&]*" % (pwk,), "", feed)
if self.is_vproxied:
baseurl += self.args.RS
efeed = html_escape(feed, True, True)
@@ -1475,18 +1597,31 @@ class HttpCli(object):
ap = ""
use_magic = "rmagic" in self.vn.flags
+ tpl_t = self.uparam.get("fmt_t") or self.vn.flags["rss_fmt_t"]
+ tpl_d = self.uparam.get("fmt_d") or self.vn.flags["rss_fmt_d"]
+ kw_t = [[x, x[1:-1]] for x in RE_RSS_KW.findall(tpl_t)]
+ kw_d = [[x, x[1:-1]] for x in RE_RSS_KW.findall(tpl_d)]
+
for i in hits:
if use_magic:
ap = os.path.join(self.vn.realpath, i["rp"])
+ tags = i["tags"]
iurl = html_escape("%s%s" % (baseurl, i["rp"]), True, True)
- title = unquotep(i["rp"].split("?")[0].split("/")[-1])
- title = html_escape(title, True, True)
- tag_t = str(i["tags"].get("title") or "")
- tag_a = str(i["tags"].get("artist") or "")
- desc = "%s - %s" % (tag_a, tag_t) if tag_t and tag_a else (tag_t or tag_a)
- desc = html_escape(desc, True, True) if desc else title
- mime = html_escape(guess_mime(title, ap))
+ fname = tags["fname"] = unquotep(i["rp"].split("?")[0].split("/")[-1])
+ title = tpl_t
+ desc = tpl_d
+ for zs1, zs2 in kw_t:
+ title = title.replace(zs1, str(tags.get(zs2, "")))
+ for zs1, zs2 in kw_d:
+ desc = desc.replace(zs1, str(tags.get(zs2, "")))
+ title = html_escape(title.strip(), True, True)
+ if desc.strip(" -,"):
+ desc = html_escape(desc.strip(), True, True)
+ else:
+ desc = title
+
+ mime = html_escape(guess_mime(fname, ap))
lmod = formatdate(max(0, i["ts"]))
zsa = (iurl, iurl, title, desc, lmod, iurl, mime, i["sz"])
zs = (
@@ -1512,6 +1647,64 @@ class HttpCli(object):
self.log("rss: %d hits, %d bytes" % (len(hits), len(bret)))
return True
+ def tx_zls(self, abspath) -> bool:
+ if self.do_log:
+ self.log("zls %s @%s" % (self.req, self.uname))
+ if self.args.no_zls:
+ raise Pebkac(405, "zip browsing is disabled in server config")
+
+ import zipfile
+
+ try:
+ with zipfile.ZipFile(abspath, "r") as zf:
+ filelist = [{"fn": f.filename} for f in zf.infolist()]
+ ret = json.dumps(filelist).encode("utf-8", "replace")
+ self.reply(ret, mime="application/json")
+ return True
+ except (zipfile.BadZipfile, RuntimeError):
+ raise Pebkac(404, "requested file is not a valid zip file")
+
+ def tx_zget(self, abspath) -> bool:
+ maxsz = 1024 * 1024 * 64
+
+ inner_path = self.uparam.get("zget")
+ if not inner_path:
+ raise Pebkac(405, "inner path is required")
+ if self.do_log:
+ self.log(
+ "zget %s \033[35m%s\033[0m @%s" % (self.req, inner_path, self.uname)
+ )
+ if self.args.no_zls:
+ raise Pebkac(405, "zip browsing is disabled in server config")
+
+ import zipfile
+
+ try:
+ with zipfile.ZipFile(abspath, "r") as zf:
+ zi = zf.getinfo(inner_path)
+ if zi.file_size >= maxsz:
+ raise Pebkac(404, "zip bomb defused")
+ with zf.open(zi, "r") as fi:
+ self.send_headers(length=zi.file_size, mime=guess_mime(inner_path))
+
+ sendfile_py(
+ self.log,
+ 0,
+ zi.file_size,
+ fi,
+ self.s,
+ self.args.s_wr_sz,
+ self.args.s_wr_slp,
+ not self.args.no_poll,
+ {},
+ "",
+ )
+ except KeyError:
+ raise Pebkac(404, "no such file in archive")
+ except (zipfile.BadZipfile, RuntimeError):
+ raise Pebkac(404, "requested file is not a valid zip file")
+ return True
+
def handle_propfind(self) -> bool:
if self.do_log:
self.log("PFIND %s @%s" % (self.req, self.uname))
@@ -1551,6 +1744,7 @@ class HttpCli(object):
if xtag is not None:
props = set([y.tag.split("}")[-1] for y in xtag])
# assume otherwise; nobody ever gonna
+ self.hint = ""
zi = int(time.time())
vst = os.stat_result((16877, -1, -1, 1, 1000, 1000, 8, zi, zi, zi))
@@ -1560,7 +1754,9 @@ class HttpCli(object):
except OSError as ex:
if ex.errno not in (errno.ENOENT, errno.ENOTDIR):
raise
- raise Pebkac(404)
+ if tap:
+ raise Pebkac(404)
+ st = vst
topdir = {"vp": "", "st": st}
fgen: Iterable[dict[str, Any]] = []
@@ -1595,11 +1791,15 @@ class HttpCli(object):
set(),
self.uname,
True,
+ 1,
not self.args.no_scandir,
wrap=False,
)
elif depth == "0" or not stat.S_ISDIR(st.st_mode):
+ if depth == "0" and not self.vpath and not vn.realpath:
+ # rootless server; give dummy listing
+ self.can_read = True
# propfind on a file; return as topdir
if not self.can_read and not self.can_get:
self.log("inaccessible: %r" % ("/" + self.vpath,))
@@ -1632,7 +1832,11 @@ class HttpCli(object):
self.log("inaccessible: %r" % ("/" + self.vpath,))
raise Pebkac(401, "authenticate")
- zi = vn.flags["du_iwho"] if "quota-available-bytes" in props else 0
+ zi = (
+ vn.flags["du_iwho"]
+ if vn.realpath and "quota-available-bytes" in props
+ else 0
+ )
if zi and (
zi == 9
or (zi == 7 and self.uname != "*")
@@ -1642,6 +1846,21 @@ class HttpCli(object):
):
bfree, btot, _ = get_df(vn.realpath, False)
if btot:
+ if "vmaxb" in vn.flags:
+ assert vn.lim # type: ignore # !rm
+ btot = vn.lim.vbmax
+ if bfree == vn.lim.c_vb_r:
+ bfree = min(bfree, max(0, vn.lim.vbmax - vn.lim.c_vb_v))
+ else:
+ try:
+ zi, _ = self.conn.hsrv.broker.ask(
+ "up2k.get_volsizes", [vn.realpath]
+ ).get()[0]
+ vn.lim.c_vb_v = zi
+ vn.lim.c_vb_r = bfree
+ bfree = min(bfree, max(0, vn.lim.vbmax - zi))
+ except:
+ pass
df = {
"quota-available-bytes": str(bfree),
"quota-used-bytes": str(btot - bfree),
@@ -1767,6 +1986,7 @@ class HttpCli(object):
assert xprop # !rm
for ze in xprop:
ze.clear()
+ self.hint = ""
txt = """HTTP/1.1 403 Forbidden """
xroot = parse_xml(txt)
@@ -1824,6 +2044,7 @@ class HttpCli(object):
ET.register_namespace("D", "DAV:")
lk = parse_xml(txt)
assert lk.tag == "{DAV:}lockinfo"
+ self.hint = ""
token = str(uuid.uuid4())
@@ -2066,7 +2287,7 @@ class HttpCli(object):
t = "urlform_raw %d @ %r\n %r\n"
self.log(t % (len(orig), "/" + self.vpath, orig))
try:
- zb = unquote(buf.replace(b"+", b" "))
+ zb = unquote(buf.replace(b"+", b" ").replace(b"&", b"\n"))
plain = zb.decode("utf-8", "replace")
if buf.startswith(b"msg="):
plain = plain[4:]
@@ -2087,7 +2308,7 @@ class HttpCli(object):
len(buf),
self.ip,
time.time(),
- plain,
+ [plain, orig],
)
t = "urlform_dec %d @ %r\n %r\n"
@@ -2106,9 +2327,9 @@ class HttpCli(object):
if "get" in opt:
return self.handle_get()
- raise Pebkac(405, "POST({}) is disabled in server config".format(ctype))
+ raise Pebkac(405, "POST(%r) is disabled in server config" % (ctype,))
- raise Pebkac(405, "don't know how to handle POST({})".format(ctype))
+ raise Pebkac(405, "don't know how to handle POST(%r)" % (ctype,))
def get_xml_enc(self, txt: str) -> str:
ofs = txt[:512].find(' encoding="')
@@ -2226,7 +2447,7 @@ class HttpCli(object):
if rnd:
fn = rand_name(fdir, fn, rnd)
- fn = sanitize_fn(fn or "", "")
+ fn = sanitize_fn(fn or "")
path = os.path.join(fdir, fn)
@@ -2248,10 +2469,12 @@ class HttpCli(object):
remains,
self.ip,
at,
- "",
+ None,
)
- if not hr:
- t = "upload blocked by xbu server config"
+ t = hr.get("rejectmsg") or ""
+ if t or hr.get("rc") != 0:
+ if not t:
+ t = "upload blocked by xbu server config: %r" % (vp,)
self.log(t, 1)
raise Pebkac(403, t)
if hr.get("reloc"):
@@ -2269,7 +2492,12 @@ class HttpCli(object):
self.vpath = vjoin(self.vpath, fn)
params["fdir"] = fdir
- if is_put and not (self.args.no_dav or self.args.nw) and bos.path.exists(path):
+ if (
+ is_put
+ and not (self.args.no_dav or self.args.nw)
+ and "append" not in self.uparam
+ and bos.path.exists(path)
+ ):
# allow overwrite if...
# * volflag 'daw' is set, or client is definitely webdav
# * and account has delete-access
@@ -2283,7 +2511,11 @@ class HttpCli(object):
if (
self.can_delete
- and (vfs.flags.get("daw") or "x-oc-mtime" in self.headers)
+ and (
+ vfs.flags.get("daw")
+ or "replace" in self.headers
+ or "x-oc-mtime" in self.headers
+ )
) or (
not bos.path.exists(os.path.join(fdir, tnam))
and not bos.path.getsize(path)
@@ -2313,7 +2545,22 @@ class HttpCli(object):
else:
raise Pebkac(500, "unknown hash alg")
- f, fn = ren_open(fn, *open_a, **params)
+ if "apnd" in self.uparam and not self.args.nw and bos.path.exists(path):
+ zs = vfs.flags["apnd_who"]
+ if (
+ zs == "w"
+ or (zs == "aw" and self.can_admin)
+ or (zs == "dw" and self.can_delete)
+ ):
+ pass
+ else:
+ raise Pebkac(400, "you do not have permission to append")
+ zs = os.path.join(params["fdir"], fn)
+ self.log("upload will append to [%s]" % (zs,))
+ f = open(zs, "ab")
+ else:
+ f, fn = ren_open(fn, *open_a, **params)
+
try:
path = os.path.join(fdir, fn)
post_sz, sha_hex, sha_b64 = copier(reader, f, hasher, 0, self.args.s_wr_slp)
@@ -2377,10 +2624,12 @@ class HttpCli(object):
post_sz,
self.ip,
at,
- "",
+ None,
)
- if not hr:
- t = "upload blocked by xau server config"
+ t = hr.get("rejectmsg") or ""
+ if t or hr.get("rc") != 0:
+ if not t:
+ t = "upload blocked by xau server config: %r" % (vp,)
self.log(t, 1)
wunlink(self.log, path, vfs.flags)
raise Pebkac(403, t)
@@ -2574,7 +2823,7 @@ class HttpCli(object):
if act == "logout":
return self.handle_logout()
- raise Pebkac(422, 'invalid action "{}"'.format(act))
+ raise Pebkac(422, "invalid action %r" % (act,))
def handle_zip_post(self) -> bool:
assert self.parser # !rm
@@ -2649,9 +2898,14 @@ class HttpCli(object):
raise Pebkac(400, "your client is old; press CTRL-SHIFT-R and try again")
vfs, rem = self.asrv.vfs.get(self.vpath, self.uname, False, True)
+ fsnt = vfs.flags["fsnt"]
+ if fsnt != "lin":
+ tl = VPTL_WIN if fsnt == "win" else VPTL_MAC
+ rem = rem.translate(tl)
+ name = name.translate(tl)
dbv, vrem = vfs.get_dbv(rem)
- name = sanitize_fn(name, "")
+ name = sanitize_fn(name)
if (
not self.can_read
and self.can_write
@@ -2669,7 +2923,7 @@ class HttpCli(object):
body["addr"] = self.ip
body["vcfg"] = dbv.flags
- if not self.can_delete:
+ if not self.can_delete and not body.get("replace") == "skip":
body.pop("replace", None)
if rem:
@@ -2818,51 +3072,51 @@ class HttpCli(object):
bail1 = False # used in sad path to avoid contradicting error-text
treport = time.time() # ratelimit up2k reporting to reduce overhead
- if "x-up2k-subc" in self.headers:
- sc_ofs = int(self.headers["x-up2k-subc"])
- chash = chashes[0]
-
- u2sc = self.conn.hsrv.u2sc
- try:
- sc_pofs, hasher = u2sc[chash]
- if not sc_ofs:
- t = "client restarted the chunk; forgetting subchunk offset %d"
- self.log(t % (sc_pofs,))
- raise Exception()
- except:
- sc_pofs = 0
- hasher = hashlib.sha512()
-
- et = "subchunk protocol error; resetting chunk "
- if sc_pofs != sc_ofs:
- u2sc.pop(chash, None)
- t = "%s[%s]: the expected resume-point was %d, not %d"
- raise Pebkac(400, t % (et, chash, sc_pofs, sc_ofs))
- if len(cstarts) > 1:
- u2sc.pop(chash, None)
- t = "%s[%s]: only a single subchunk can be uploaded in one request; you are sending %d chunks"
- raise Pebkac(400, t % (et, chash, len(cstarts)))
- csize = min(chunksize, fsize - cstart0[0])
- cstart0[0] += sc_ofs # also sets cstarts[0][0]
- sc_next_ofs = sc_ofs + postsize
- if sc_next_ofs > csize:
- u2sc.pop(chash, None)
- t = "%s[%s]: subchunk offset (%d) plus postsize (%d) exceeds chunksize (%d)"
- raise Pebkac(400, t % (et, chash, sc_ofs, postsize, csize))
- else:
- final_subchunk = sc_next_ofs == csize
- t = "subchunk %s %d:%d/%d %s"
- zs = "END" if final_subchunk else ""
- self.log(t % (chash[:15], sc_ofs, sc_next_ofs, csize, zs), 6)
- if final_subchunk:
- u2sc.pop(chash, None)
- else:
- u2sc[chash] = (sc_next_ofs, hasher)
- else:
- hasher = None
- final_subchunk = True
-
try:
+ if "x-up2k-subc" in self.headers:
+ sc_ofs = int(self.headers["x-up2k-subc"])
+ chash = chashes[0]
+
+ u2sc = self.conn.hsrv.u2sc
+ try:
+ sc_pofs, hasher = u2sc[chash]
+ if not sc_ofs:
+ t = "client restarted the chunk; forgetting subchunk offset %d"
+ self.log(t % (sc_pofs,))
+ raise Exception()
+ except:
+ sc_pofs = 0
+ hasher = hashlib.sha512()
+
+ et = "subchunk protocol error; resetting chunk "
+ if sc_pofs != sc_ofs:
+ u2sc.pop(chash, None)
+ t = "%s[%s]: the expected resume-point was %d, not %d"
+ raise Pebkac(400, t % (et, chash, sc_pofs, sc_ofs))
+ if len(cstarts) > 1:
+ u2sc.pop(chash, None)
+ t = "%s[%s]: only a single subchunk can be uploaded in one request; you are sending %d chunks"
+ raise Pebkac(400, t % (et, chash, len(cstarts)))
+ csize = min(chunksize, fsize - cstart0[0])
+ cstart0[0] += sc_ofs # also sets cstarts[0][0]
+ sc_next_ofs = sc_ofs + postsize
+ if sc_next_ofs > csize:
+ u2sc.pop(chash, None)
+ t = "%s[%s]: subchunk offset (%d) plus postsize (%d) exceeds chunksize (%d)"
+ raise Pebkac(400, t % (et, chash, sc_ofs, postsize, csize))
+ else:
+ final_subchunk = sc_next_ofs == csize
+ t = "subchunk %s %d:%d/%d %s"
+ zs = "END" if final_subchunk else ""
+ self.log(t % (chash[:15], sc_ofs, sc_next_ofs, csize, zs), 6)
+ if final_subchunk:
+ u2sc.pop(chash, None)
+ else:
+ u2sc[chash] = (sc_next_ofs, hasher)
+ else:
+ hasher = None
+ final_subchunk = True
+
if self.args.nw:
path = os.devnull
@@ -2934,7 +3188,9 @@ class HttpCli(object):
if now - treport < 1:
continue
treport = now
- x = broker.ask("up2k.fast_confirm_chunks", ptop, wark, written)
+ x = broker.ask(
+ "up2k.fast_confirm_chunks", ptop, wark, written, locked
+ )
num_left, t = x.get()
if num_left < -1:
self.loud_reply(t, status=500)
@@ -3145,7 +3401,7 @@ class HttpCli(object):
if "nosub" in vfs.flags:
raise Pebkac(403, "mkdir is forbidden below this folder")
- rem = sanitize_vpath(rem, "/")
+ rem = sanitize_vpath(rem)
fn = vfs.canonical(rem)
if not nullwrite:
@@ -3185,21 +3441,47 @@ class HttpCli(object):
vfs, rem = self.asrv.vfs.get(self.vpath, self.uname, False, True)
self._assert_safe_rem(rem)
- ext = "" if "." not in new_file else new_file.split(".")[-1]
- if not ext or len(ext) > 5 or not self.can_delete:
- new_file += ".md"
+ if not self.can_delete and not new_file.lower().endswith(".md"):
+ t = "you can only create .md files because you don't have the delete-permission"
+ raise Pebkac(400, t)
- sanitized = sanitize_fn(new_file, "")
+ sanitized = sanitize_fn(new_file)
+ fdir = vfs.canonical(rem)
+ fn = os.path.join(fdir, sanitized)
+
+ for hn in ("xbu", "xau"):
+ xxu = vfs.flags.get(hn)
+ if xxu:
+ hr = runhook(
+ self.log,
+ self.conn.hsrv.broker,
+ None,
+ "%s.http.new-md" % (hn,),
+ xxu,
+ fn,
+ vjoin(self.vpath, sanitized),
+ self.host,
+ self.uname,
+ self.asrv.vfs.get_perms(self.vpath, self.uname),
+ time.time(),
+ 0,
+ self.ip,
+ time.time(),
+ None,
+ )
+ t = hr.get("rejectmsg") or ""
+ if t or hr.get("rc") != 0:
+ if not t:
+ t = "new-md blocked by " + hn + " server config: %r"
+ t = t % (vjoin(vfs.vpath, rem),)
+ self.log(t, 1)
+ raise Pebkac(403, t)
if not nullwrite:
- fdir = vfs.canonical(rem)
- fn = os.path.join(fdir, sanitized)
-
if bos.path.exists(fn):
raise Pebkac(500, "that file exists already")
with open(fsenc(fn), "wb") as f:
- f.write(b"`GRUNNUR`\n")
if "fperms" in vfs.flags:
set_fperms(f, vfs.flags)
@@ -3315,7 +3597,7 @@ class HttpCli(object):
# fallthrough
fdir = fdir_base
- fname = sanitize_fn(p_file or "", "")
+ fname = sanitize_fn(p_file or "")
abspath = os.path.join(fdir, fname)
suffix = "-%.6f-%s" % (time.time(), dip)
if p_file and not nullwrite:
@@ -3324,7 +3606,7 @@ class HttpCli(object):
open_args = {"fdir": fdir, "suffix": suffix, "vf": vfs.flags}
- if "replace" in self.uparam:
+ if "replace" in self.uparam or "replace" in self.headers:
if not self.can_delete:
self.log("user not allowed to overwrite with ?replace")
elif bos.path.exists(abspath):
@@ -3356,10 +3638,13 @@ class HttpCli(object):
0,
self.ip,
at,
- "",
+ None,
)
- if not hr:
- t = "upload blocked by xbu server config"
+ t = hr.get("rejectmsg") or ""
+ if t or hr.get("rc") != 0:
+ if not t:
+ t = "upload blocked by xbu server config: %r"
+ t = t % (vjoin(upload_vpath, fname),)
self.log(t, 1)
raise Pebkac(403, t)
if hr.get("reloc"):
@@ -3419,8 +3704,6 @@ class HttpCli(object):
sz, sha_hex, sha_b64 = copier(
p_data, f, hasher, max_sz, self.args.s_wr_slp
)
- if sz == 0:
- raise Pebkac(400, "empty files in post")
finally:
f.close()
@@ -3462,10 +3745,13 @@ class HttpCli(object):
sz,
self.ip,
at,
- "",
+ None,
)
- if not hr:
- t = "upload blocked by xau server config"
+ t = hr.get("rejectmsg") or ""
+ if t or hr.get("rc") != 0:
+ if not t:
+ t = "upload blocked by xau server config: %r"
+ t = t % (vjoin(upload_vpath, fname),)
self.log(t, 1)
wunlink(self.log, abspath, vfs.flags)
raise Pebkac(403, t)
@@ -3750,14 +4036,14 @@ class HttpCli(object):
assert self.parser.gen # !rm
p_field, _, p_data = next(self.parser.gen)
if p_field != "body":
- raise Pebkac(400, "expected body, got {}".format(p_field))
+ raise Pebkac(400, "expected body, got %r" % (p_field,))
if "txt_eol" in vfs.flags:
p_data = eol_conv(p_data, vfs.flags["txt_eol"])
xbu = vfs.flags.get("xbu")
if xbu:
- if not runhook(
+ hr = runhook(
self.log,
self.conn.hsrv.broker,
None,
@@ -3772,9 +4058,12 @@ class HttpCli(object):
0,
self.ip,
time.time(),
- "",
- ):
- t = "save blocked by xbu server config"
+ None,
+ )
+ t = hr.get("rejectmsg") or ""
+ if t or hr.get("rc") != 0:
+ if not t:
+ t = "save blocked by xbu server config"
self.log(t, 1)
raise Pebkac(403, t)
@@ -3801,27 +4090,31 @@ class HttpCli(object):
sha512 = sha512[:56]
xau = vfs.flags.get("xau")
- if xau and not runhook(
- self.log,
- self.conn.hsrv.broker,
- None,
- "xau.http.txt",
- xau,
- fp,
- self.vpath,
- self.host,
- self.uname,
- self.asrv.vfs.get_perms(self.vpath, self.uname),
- new_lastmod,
- sz,
- self.ip,
- new_lastmod,
- "",
- ):
- t = "save blocked by xau server config"
- self.log(t, 1)
- wunlink(self.log, fp, vfs.flags)
- raise Pebkac(403, t)
+ if xau:
+ hr = runhook(
+ self.log,
+ self.conn.hsrv.broker,
+ None,
+ "xau.http.txt",
+ xau,
+ fp,
+ self.vpath,
+ self.host,
+ self.uname,
+ self.asrv.vfs.get_perms(self.vpath, self.uname),
+ new_lastmod,
+ sz,
+ self.ip,
+ new_lastmod,
+ None,
+ )
+ t = hr.get("rejectmsg") or ""
+ if t or hr.get("rc") != 0:
+ if not t:
+ t = "save blocked by xau server config"
+ self.log(t, 1)
+ wunlink(self.log, fp, vfs.flags)
+ raise Pebkac(403, t)
self.conn.hsrv.broker.say(
"up2k.hash_file",
@@ -3926,40 +4219,36 @@ class HttpCli(object):
self, vn: VFS, abspath: str, lnames: Optional[dict[str, str]]
) -> tuple[list[str], list[str]]:
logues = ["", ""]
- if not self.args.no_logues:
- for n, fn in LOGUES:
- if lnames is not None and fn not in lnames:
- continue
+ for n, fns1, fns2 in [] if self.args.no_logues else vn.flags["emb_lgs"]:
+ for fn in fns1 if lnames is None else fns2:
+ if lnames is not None:
+ fn = lnames.get(fn)
+ if not fn:
+ continue
fn = "%s/%s" % (abspath, fn)
- if bos.path.isfile(fn):
- logues[n] = read_utf8(self.log, fsenc(fn), False)
- if "exp" in vn.flags:
- logues[n] = self._expand(
- logues[n], vn.flags.get("exp_lg") or []
- )
+ if not bos.path.isfile(fn):
+ continue
+ logues[n] = read_utf8(self.log, fsenc(fn), False)
+ if "exp" in vn.flags:
+ logues[n] = self._expand(logues[n], vn.flags.get("exp_lg") or [])
+ break
readmes = ["", ""]
- for n, fns in [] if self.args.no_readme else READMES:
+ for n, fns1, fns2 in [] if self.args.no_readme else vn.flags["emb_mds"]:
if logues[n]:
continue
- elif lnames is None:
- pass
- elif fns[0] in lnames:
- fns = [lnames[fns[0]]]
- else:
- fns = []
-
- txt = ""
- for fn in fns:
+ for fn in fns1 if lnames is None else fns2:
+ if lnames is not None:
+ fn = lnames.get(fn.lower())
+ if not fn:
+ continue
fn = "%s/%s" % (abspath, fn)
- if bos.path.isfile(fn):
- txt = read_utf8(self.log, fsenc(fn), False)
- break
-
- if txt and "exp" in vn.flags:
- txt = self._expand(txt, vn.flags.get("exp_md") or [])
-
- readmes[n] = txt
+ if not bos.path.isfile(fn):
+ continue
+ readmes[n] = read_utf8(self.log, fsenc(fn), False)
+ if "exp" in vn.flags:
+ readmes[n] = self._expand(readmes[n], vn.flags.get("exp_md") or [])
+ break
return logues, readmes
@@ -4042,8 +4331,11 @@ class HttpCli(object):
# force download
if "dl" in self.ouparam:
- cdis = gen_content_disposition(os.path.basename(req_path))
- self.out_headers["Content-Disposition"] = cdis
+ cdis = self.ouparam["dl"] or req_path
+ zs = gen_content_disposition(os.path.basename(cdis))
+ self.out_headers["Content-Disposition"] = zs
+ else:
+ cdis = req_path
#
# if-modified
@@ -4109,7 +4401,7 @@ class HttpCli(object):
elif "mime" in self.uparam:
mime = str(self.uparam.get("mime"))
else:
- mime = guess_mime(req_path)
+ mime = guess_mime(cdis)
logmsg += unicode(status) + logtail
@@ -4217,8 +4509,11 @@ class HttpCli(object):
# force download
if "dl" in self.ouparam:
- cdis = gen_content_disposition(os.path.basename(req_path))
- self.out_headers["Content-Disposition"] = cdis
+ cdis = self.ouparam["dl"] or req_path
+ zs = gen_content_disposition(os.path.basename(cdis))
+ self.out_headers["Content-Disposition"] = zs
+ else:
+ cdis = req_path
#
# if-modified
@@ -4346,7 +4641,7 @@ class HttpCli(object):
elif "rmagic" in self.vn.flags:
mime = guess_mime(req_path, fs_path)
else:
- mime = guess_mime(req_path)
+ mime = guess_mime(cdis)
if "nohtml" in self.vn.flags and "html" in mime:
mime = "text/plain; charset=utf-8"
@@ -4733,11 +5028,12 @@ class HttpCli(object):
packer = StreamZip
ext = "zip"
- fn = items[0] if items and items[0] else self.vpath
- if fn:
- fn = fn.rstrip("/").split("/")[-1]
- else:
- fn = self.host.split(":")[0]
+ dots = 0 if "nodot" in self.uparam else 1
+ scandir = not self.args.no_scandir
+
+ fn = self.vpath.split("/")[-1] or self.host.split(":")[0]
+ if items:
+ fn = "sel-" + fn
if vn.flags.get("zipmax") and not (
vn.flags.get("zipmaxu") and self.uname != "*"
@@ -4746,9 +5042,7 @@ class HttpCli(object):
maxn = vn.flags.get("zipmaxn_v") or 0
nf = 0
nb = 0
- fgen = vn.zipgen(
- vpath, rem, set(items), self.uname, False, not self.args.no_scandir
- )
+ fgen = vn.zipgen(vpath, rem, set(items), self.uname, False, dots, scandir)
t = "total size exceeds a limit specified in server config"
t = vn.flags.get("zipmaxt") or t
if maxs and maxn:
@@ -4772,15 +5066,16 @@ class HttpCli(object):
self.log(repr(cdis))
self.send_headers(None, mime=mime, headers={"Content-Disposition": cdis})
- fgen = vn.zipgen(
- vpath, rem, set(items), self.uname, False, not self.args.no_scandir
- )
+ fgen = vn.zipgen(vpath, rem, set(items), self.uname, False, dots, scandir)
# for f in fgen: print(repr({k: f[k] for k in ["vp", "ap"]}))
cfmt = ""
if self.thumbcli and not self.args.no_bacode:
- for zs in ("opus", "mp3", "flac", "wav", "w", "j", "p"):
- if zs in self.ouparam or uarg == zs:
- cfmt = zs
+ if uarg in ZIP_XCODE_S:
+ cfmt = uarg
+ else:
+ for zs in ZIP_XCODE_L:
+ if zs in self.ouparam:
+ cfmt = zs
if cfmt:
self.log("transcoding to [{}]".format(cfmt))
@@ -4886,7 +5181,7 @@ class HttpCli(object):
url += "#" + uhash
self.log("qrcode(%r)" % (url,))
- ret = qr2svg(QrCode.encode_binary(url.encode("utf-8")), 2)
+ ret = qr2svg(qrgen(url.encode("utf-8")), 2)
self.reply(ret.encode("utf-8"), mime="image/svg+xml")
return True
@@ -4913,8 +5208,8 @@ class HttpCli(object):
else:
fullfile = b""
- if not sz_md and b"\n" in buf[:2]:
- lead = buf[: buf.find(b"\n") + 1]
+ if not sz_md and buf.startswith((b"\n", b"\r\n")):
+ lead = b"\n" if buf.startswith(b"\n") else b"\r\n"
sz_md += len(lead)
sz_md += len(buf)
@@ -4939,7 +5234,7 @@ class HttpCli(object):
file_ts = int(max(ts_md, self.E.t0))
file_lastmod, do_send, _ = self._chk_lastmod(file_ts)
self.out_headers["Last-Modified"] = file_lastmod
- self.out_headers.update(NO_CACHE)
+ self.out_headers["Cache-Control"] = "no-cache"
status = 200 if do_send else 304
arg_base = "?"
@@ -4953,7 +5248,7 @@ class HttpCli(object):
"edit": "edit" in self.uparam,
"title": html_escape(self.vpath, crlf=True),
"lastmod": int(ts_md * 1000),
- "lang": self.args.lang,
+ "lang": self.cookies.get("cplng") or self.args.lang,
"favico": self.args.favico,
"have_emp": int(self.args.emp),
"md_no_br": int(vn.flags.get("md_no_br") or 0),
@@ -4967,10 +5262,9 @@ class HttpCli(object):
zs += "&" if "?" in zs else "?"
targs["js"] = zs
- zfv = self.vn.flags.get("html_head")
- if zfv:
+ if "html_head_d" in self.vn.flags:
targs["this"] = self
- self._build_html_head(zfv, targs)
+ self._build_html_head(targs)
targs["html_head"] = self.html_head
zs = template.render(**targs).encode("utf-8", "replace")
@@ -5027,7 +5321,7 @@ class HttpCli(object):
defpw = "dave:hunter2" if self.args.usernames else "hunter2"
vp = (self.uparam["hc"] or "").lstrip("/")
- pw = self.ouparam.get("pw") or defpw
+ pw = self.ouparam.get(self.args.pw_urlp) or defpw
if pw in self.asrv.sesa:
pw = defpw
@@ -5065,6 +5359,13 @@ class HttpCli(object):
[("/" + x).rstrip("/") + "/" for x in y]
for y in [self.rvol, self.wvol, self.avol]
]
+ for zs in self.asrv.vfs.all_fvols:
+ if not zs:
+ continue # webroot
+ zs2 = ("/" + zs).rstrip("/") + "/"
+ for zsl in (rvol, wvol, avol):
+ if zs2 in zsl:
+ zsl[zsl.index(zs2)] = zs2[:-1]
ups = []
now = time.time()
@@ -5079,10 +5380,11 @@ class HttpCli(object):
fdone = max(0.001, 1 - rem)
td = max(0.1, now - t0)
rd, fn = vsplit(vp.replace(os.sep, "/"))
- if not rd:
- rd = "/"
- erd = quotep(rd)
- rds = rd.replace("/", " / ")
+ if rd:
+ rds = rd.replace("/", " / ")
+ erd = "/%s/" % (quotep(rd),)
+ else:
+ erd = rds = "/"
spd = humansize(sz * fdone / td, True) + "/s"
eta = s2hms((td / fdone) - td, True) if rem < 1 else "--"
idle = s2hms(now - poke, True)
@@ -5099,7 +5401,7 @@ class HttpCli(object):
"dbwt": None,
}
- assert vstate.items and vs # type: ignore # !rm
+ assert vstate is not None and vstate.items and vs # type: ignore # !rm
dls = dl_list = []
if self.conn.hsrv.tdls:
@@ -5109,10 +5411,11 @@ class HttpCli(object):
for t0, t1, sent, sz, vp, dl_id, uname in dl_list:
td = max(0.1, now - t0)
rd, fn = vsplit(vp)
- if not rd:
- rd = "/"
- erd = quotep(rd)
- rds = rd.replace("/", " / ")
+ if rd:
+ rds = rd.replace("/", " / ")
+ erd = "/%s/" % (quotep(rd),)
+ else:
+ erd = rds = "/"
spd = humansize(sent / td, True) + "/s"
hsent = humansize(sent, True)
idle = s2hms(now - t1, True)
@@ -5127,7 +5430,7 @@ class HttpCli(object):
dls.append((perc, hsent, spd, eta, idle, usr, erd, rds, fn))
if self.args.have_unlistc:
- allvols = self.asrv.vfs.all_vols
+ allvols = self.asrv.vfs.all_nodes
rvol = [x for x in rvol if "unlistcr" not in allvols[x[1:-1]].flags]
wvol = [x for x in wvol if "unlistcw" not in allvols[x[1:-1]].flags]
@@ -5206,6 +5509,7 @@ class HttpCli(object):
no304=self.no304(),
k304vis=self.args.k304 > 0,
no304vis=self.args.no304 > 0,
+ msg=BADXFFB if hasattr(self, "bad_xff") else "",
ver=S_VERSION if show_ver else "",
chpw=self.args.chpw and self.uname != "*",
ahttps="" if self.is_https else "https://" + self.host + self.req,
@@ -5216,7 +5520,7 @@ class HttpCli(object):
def setck(self) -> bool:
k, v = self.uparam["setck"].split("=", 1)
t = 0 if v in ("", "x") else 86400 * 299
- ck = gencookie(k, v, self.args.R, self.args.cookie_lax, False, t)
+ ck = gencookie(k, v, self.args.R, True, False, t)
self.out_headerlist.append(("Set-Cookie", ck))
if "cc" in self.ouparam:
self.redirect("", "?h#cc")
@@ -5228,7 +5532,7 @@ class HttpCli(object):
for k in ALL_COOKIES:
if k not in self.cookies:
continue
- cookie = gencookie(k, "x", self.args.R, self.args.cookie_lax, False)
+ cookie = gencookie(k, "x", self.args.R, True, False)
self.out_headerlist.append(("Set-Cookie", cookie))
self.redirect("", "?h#cc")
@@ -5258,17 +5562,19 @@ class HttpCli(object):
# most webdav clients will not send credentials until they
# get 401'd, so send a challenge if we're Absolutely Sure
# that the client is not a graphical browser
- if (
- rc == 403
- and self.uname == "*"
- and "sec-fetch-site" not in self.headers
- and (
- not self.ua.startswith("Mozilla/")
- or (self.args.dav_ua1 and self.args.dav_ua1.search(self.ua))
- )
- ):
- rc = 401
- self.out_headers["WWW-Authenticate"] = 'Basic realm="a"'
+ if rc == 403 and self.uname == "*":
+ sport = self.s.getsockname()[1]
+ if self.args.dav_port == sport or (
+ "sec-fetch-site" not in self.headers
+ and self.cookies.get("js") != "y"
+ and sport not in self.args.p_nodav
+ and (
+ not self.args.ua_nodav.search(self.ua)
+ or (self.args.dav_ua1 and self.args.dav_ua1.search(self.ua))
+ )
+ ):
+ rc = 401
+ self.out_headers["WWW-Authenticate"] = 'Basic realm="a"'
t = t.format(self.args.SR)
qv = quotep(self.vpaths) + self.ourlq()
@@ -5340,13 +5646,20 @@ class HttpCli(object):
return self.redirect("", "?h", x.get(), "return to", False)
def tx_stack(self) -> bool:
- if not self.avol and not [x for x in self.wvol if x in self.rvol]:
+ zs = self.args.stack_who
+ if zs == "all" or (
+ (zs == "a" and self.avol)
+ or (zs == "rw" and [x for x in self.wvol if x in self.rvol])
+ ):
+ pass
+ else:
raise Pebkac(403, "'stack' not allowed for user " + self.uname)
- if self.args.no_stack:
- raise Pebkac(403, "the stackdump feature is disabled in server config")
-
- ret = "{}\n{}".format(time.time(), html_escape(alltrace()))
+ ret = html_escape(alltrace(self.args.stack_v))
+ if self.args.stack_v:
+ ret = "%s\n%s" % (time.time(), ret)
+ else:
+ ret = "%s" % (ret,)
self.reply(ret.encode("utf-8"))
return True
@@ -5399,7 +5712,7 @@ class HttpCli(object):
rem,
self.uname,
not self.args.no_scandir,
- [[True, False], [False, True]],
+ PERMS_rwh,
)
dots = self.uname in vn.axs.udot
dk_sz = vn.flags.get("dk")
@@ -5431,7 +5744,13 @@ class HttpCli(object):
for x in vfs_virt:
if x != excl:
try:
- dvn, drem = vfs.get(vjoin(top, x), self.uname, True, False)
+ dvn, drem = vfs.get(vjoin(top, x), self.uname, False, False)
+ if (
+ self.uname not in dvn.axs.uread
+ and self.uname not in dvn.axs.uwrite
+ and self.uname not in dvn.axs.uhtml
+ ):
+ raise Exception()
bos.stat(dvn.canonical(drem, False))
except:
x += "\n"
@@ -5512,17 +5831,18 @@ class HttpCli(object):
and (self.uname in vol.axs.uread or self.uname in vol.axs.upget)
}
- bad_xff = hasattr(self, "bad_xff")
- if bad_xff:
+ if hasattr(self, "bad_xff"):
allvols = []
t = "will not return list of recent uploads" + BADXFF
self.log(t, 1)
if self.avol:
raise Pebkac(500, t)
- x = self.conn.hsrv.broker.ask(
- "up2k.get_unfinished_by_user", self.uname, "" if bad_xff else self.ip
- )
+ x = self.conn.hsrv.broker.ask("up2k.get_unfinished_by_user", self.uname, "")
+ else:
+ x = self.conn.hsrv.broker.ask(
+ "up2k.get_unfinished_by_user", self.uname, self.ip
+ )
zdsa: dict[str, Any] = x.get()
uret: list[dict[str, Any]] = []
if "timeout" in zdsa:
@@ -5632,7 +5952,7 @@ class HttpCli(object):
if shr_dbv:
# translate vpaths from share-target to share-url
# to satisfy access checks
- assert shr_vrem.split # type: ignore # !rm
+ assert shr_vrem is not None and shr_vrem.split # type: ignore # !rm
vp_shr, vp_vfs = vroots(self.vpath, vjoin(shr_dbv.vpath, shr_vrem))
for v in ret:
vp = v["vp"]
@@ -5837,6 +6157,15 @@ class HttpCli(object):
if self.uname != self.args.shr_adm:
rows = [x for x in rows if x[5] == self.uname]
+ q = "select vp from sf where k=? limit 99"
+ for r in rows:
+ if not r[4]:
+ r[4] = "---"
+ else:
+ zstl = cur.execute(q, (r[0],)).fetchall()
+ zsl = [html_escape(zst[0]) for zst in zstl]
+ r[4] = "
".join(zsl)
+
html = self.j2s(
"shares", this=self, shr=self.args.shr, rows=rows, now=int(time.time())
)
@@ -5921,7 +6250,7 @@ class HttpCli(object):
vp2, fn = zs.rsplit("/", 1)
fns.append(fn)
if vp != vp2:
- t = "mismatching base paths in selection:\n [%s]\n [%s]"
+ t = "mismatching base paths in selection:\n %r\n %r"
raise Pebkac(400, t % (vp, vp2))
vp = vp.strip("/")
@@ -5930,7 +6259,7 @@ class HttpCli(object):
m = re.search(r"([^0-9a-zA-Z_-])", skey)
if m:
- raise Pebkac(400, "sharekey has illegal character [%s]" % (m[1],))
+ raise Pebkac(400, "sharekey has illegal character %r" % (m[1],))
if vp.startswith(self.args.shr1):
raise Pebkac(400, "yo dawg...")
@@ -5943,7 +6272,7 @@ class HttpCli(object):
qr = cur.execute(q, (skey,)).fetchall()
if qr and qr[0]:
self.log("sharekey taken by %r" % (qr,))
- raise Pebkac(400, "sharekey [%s] is already in use" % (skey,))
+ raise Pebkac(400, "sharekey %r is already in use" % (skey,))
# ensure user has requested perms
s_rd = "read" in req["perms"]
@@ -5955,13 +6284,21 @@ class HttpCli(object):
except:
raise Pebkac(400, "you dont have all the perms you tried to grant")
+ zs = vfs.flags["shr_who"]
+ if zs == "auth" and self.uname != "*":
+ pass
+ elif zs == "a" and self.uname in vfs.axs.uadmin:
+ pass
+ else:
+ raise Pebkac(400, "you dont have perms to create shares from this volume")
+
ap, reals, _ = vfs.ls(
rem, self.uname, not self.args.no_scandir, [[s_rd, s_wr, s_mv, s_del]]
)
rfns = set([x[0] for x in reals])
for fn in fns:
if fn not in rfns:
- raise Pebkac(400, "selected file not found on disk: [%s]" % (fn,))
+ raise Pebkac(400, "selected file not found on disk: %r" % (fn,))
pw = req.get("pw") or ""
pw = self.asrv.ah.hash(pw)
@@ -5984,6 +6321,7 @@ class HttpCli(object):
fn = quotep(fns[0]) if len(fns) == 1 else ""
+ # NOTE: several clients (frontend, party-up) expect url at response[15:]
surl = "created share: %s://%s%s%s%s/%s" % (
"https" if self.is_https else "http",
self.host,
@@ -6009,6 +6347,9 @@ class HttpCli(object):
self.log("unpost was denied" + BADXFF, 1)
raise Pebkac(403, "the delete feature is disabled in server config")
+ if not unpost and self.vn.shr_src:
+ raise Pebkac(403, "files in shares can only be deleted with unpost")
+
if not req:
req = [self.vpath]
elif self.is_vproxied:
@@ -6097,6 +6438,48 @@ class HttpCli(object):
self.loud_reply("aborting", status=200)
return True
+ def tx_ls_vols(self) -> bool:
+ e_d = {}
+ eses = ["", ""]
+ rvol = self.rvol
+ wvol = self.wvol
+ allvols = self.asrv.vfs.all_nodes
+ if self.args.have_unlistc:
+ rvol = [x for x in rvol if "unlistcr" not in allvols[x].flags]
+ wvol = [x for x in wvol if "unlistcw" not in allvols[x].flags]
+ vols = list(set(rvol + wvol))
+ if self.vpath:
+ zs = "%s/" % (self.vpath,)
+ vols = [x[len(zs) :] for x in vols if x.startswith(zs)]
+ vols = [x.split("/", 1)[0] for x in vols if x]
+ if not vols and self.vpath:
+ return self.tx_404(True)
+ dirs = [
+ {
+ "lead": "",
+ "href": "%s/" % (x,),
+ "ext": "---",
+ "sz": 0,
+ "ts": 0,
+ "tags": e_d,
+ "dt": 0,
+ "name": 0,
+ "perms": allvols[x].get_perms("", self.uname),
+ }
+ for x in sorted(vols)
+ ]
+ ls = {
+ "dirs": dirs,
+ "files": [],
+ "acct": self.uname,
+ "perms": [],
+ "taglist": [],
+ "logues": eses,
+ "readmes": eses,
+ "srvinf": "" if self.args.nih else self.args.name,
+ }
+ return self.tx_ls(ls)
+
def tx_ls(self, ls: dict[str, Any]) -> bool:
dirs = ls["dirs"]
files = ls["files"]
@@ -6215,17 +6598,15 @@ class HttpCli(object):
add_og = "og" in vn.flags
if add_og:
- if "th" in self.uparam or "raw" in self.uparam:
- og_ua = add_og = False
- elif self.args.og_ua:
- og_ua = add_og = self.args.og_ua.search(self.ua)
- else:
- og_ua = False
- add_og = True
+ if "th" in self.uparam or "raw" in self.uparam or "opds" in self.uparam:
+ add_og = False
+ elif vn.flags["og_ua"]:
+ add_og = vn.flags["og_ua"].search(self.ua)
og_fn = ""
if "v" in self.uparam:
- add_og = og_ua = True
+ add_og = True
+ og_fn = ""
if "b" in self.uparam:
self.out_headers["X-Robots-Tag"] = "noindex, nofollow"
@@ -6310,8 +6691,7 @@ class HttpCli(object):
return self.tx_svg("upload\nonly")
if not self.can_read and self.can_get and self.avn:
- axs = self.avn.axs
- if self.uname not in axs.uhtml:
+ if not self.can_html:
pass
elif is_dir:
for fn in ("index.htm", "index.html"):
@@ -6332,6 +6712,7 @@ class HttpCli(object):
fk_pass = True
is_dir = False
+ add_og = False
rem = vjoin(rem, fn)
vrem = vjoin(vrem, fn)
abspath = ap2
@@ -6346,7 +6727,7 @@ class HttpCli(object):
is_md = abspath.lower().endswith(".md")
if add_og and not is_md:
- if og_ua or self.host not in self.headers.get("referer", ""):
+ if self.host not in self.headers.get("referer", ""):
self.vpath, og_fn = vsplit(self.vpath)
vpath = self.vpath
vn, rem = self.asrv.vfs.get(self.vpath, self.uname, False, False)
@@ -6367,14 +6748,23 @@ class HttpCli(object):
):
return self.tx_md(vn, abspath)
+ if "zls" in self.uparam:
+ return self.tx_zls(abspath)
+ if "zget" in self.uparam:
+ return self.tx_zget(abspath)
+
if not add_og or not og_fn:
- return self.tx_file(
- abspath, None if st.st_size or "nopipe" in vn.flags else vn.realpath
- )
+ if st.st_size or "nopipe" in vn.flags:
+ return self.tx_file(abspath, None)
+ else:
+ return self.tx_file(abspath, vn.get_dbv("")[0].realpath)
elif is_dir and not self.can_read:
if use_dirkey:
is_dk = True
+ elif self.can_get and "doc" in self.uparam:
+ zs = vjoin(self.vpath, self.uparam["doc"]) + "?v"
+ return self.redirect(zs, flavor="redirecting to", use302=True)
elif not self.can_write:
return self.tx_404(True)
@@ -6382,7 +6772,7 @@ class HttpCli(object):
try:
if not self.args.nih:
- srv_info.append(self.args.name)
+ srv_info.append(self.args.name_html)
except:
self.log("#wow #whoa")
@@ -6396,6 +6786,21 @@ class HttpCli(object):
):
free, total, zs = get_df(abspath, False)
if total:
+ if "vmaxb" in vn.flags:
+ assert vn.lim # type: ignore # !rm
+ total = vn.lim.vbmax
+ if free == vn.lim.c_vb_r:
+ free = min(free, max(0, vn.lim.vbmax - vn.lim.c_vb_v))
+ else:
+ try:
+ zi, _ = self.conn.hsrv.broker.ask(
+ "up2k.get_volsizes", [vn.realpath]
+ ).get()[0]
+ vn.lim.c_vb_v = zi
+ vn.lim.c_vb_r = free
+ free = min(free, max(0, vn.lim.vbmax - zi))
+ except:
+ pass
h1 = humansize(free or 0)
h2 = humansize(total)
srv_info.append("{} free of {}".format(h1, h2))
@@ -6422,6 +6827,7 @@ class HttpCli(object):
url_suf = self.urlq({}, ["k"])
is_ls = "ls" in self.uparam
+ is_opds = "opds" in self.uparam
is_js = self.args.force_js or self.cookies.get("js") == "y"
if not is_ls and not add_og and self.ua.startswith(("curl/", "fetch")):
@@ -6432,6 +6838,13 @@ class HttpCli(object):
if "b" in self.uparam:
tpl = "browser2"
is_js = False
+ elif is_opds:
+ # Display directory listing as OPDS v1.2 catalog feed
+ if not (self.args.opds or "opds" in self.vn.flags):
+ raise Pebkac(405, "OPDS is disabled in server config")
+ if not self.can_read:
+ raise Pebkac(401, "OPDS requires read permission")
+ is_js = is_ls = False
vf = vn.flags
ls_ret = {
@@ -6448,6 +6861,7 @@ class HttpCli(object):
"acct": self.uname,
"perms": perms,
}
+ # also see `js_htm` in authsrv.py
j2a = {
"cgv1": vn.js_htm,
"cgv": cgv,
@@ -6507,7 +6921,7 @@ class HttpCli(object):
rem,
self.uname,
not self.args.no_scandir,
- [[True, False], [False, True]],
+ PERMS_rwh,
lstat="lt" in self.uparam,
throw=True,
)
@@ -6561,10 +6975,17 @@ class HttpCli(object):
dirs = []
files = []
ptn_hr = RE_HR
+ use_abs_url = (
+ not is_opds
+ and not is_ls
+ and not is_js
+ and not self.trailing_slash
+ and vpath
+ )
for fn in ls_names:
base = ""
href = fn
- if not is_ls and not is_js and not self.trailing_slash and vpath:
+ if use_abs_url:
base = "/" + vpath + "/"
href = base + fn
@@ -6664,6 +7085,7 @@ class HttpCli(object):
self.cookies.get("idxh") == "y"
and "ls" not in self.uparam
and "v" not in self.uparam
+ and not is_opds
):
idx_html = set(["index.htm", "index.html"])
for item in files:
@@ -6674,62 +7096,53 @@ class HttpCli(object):
ap = vn.canonical(rem)
return self.tx_file(ap) # is no-cache
- mte = vn.flags.get("mte", {})
- add_up_at = ".up_at" in mte
- is_admin = self.can_admin
- tagset: set[str] = set()
- rd = vrem
- for fe in files if icur else []:
- assert icur # !rm
- fn = fe["name"]
- erd_efn = (rd, fn)
- q = "select mt.k, mt.v from up inner join mt on mt.w = substr(up.w,1,16) where up.rd = ? and up.fn = ? and +mt.k != 'x'"
- try:
- r = icur.execute(q, erd_efn)
- except Exception as ex:
- if "database is locked" in str(ex):
- break
-
- try:
- erd_efn = s3enc(idx.mem_cur, rd, fn)
- r = icur.execute(q, erd_efn)
- except:
- self.log("tag read error, %r / %r\n%s" % (rd, fn, min_ex()))
- break
-
- tags = {k: v for k, v in r}
-
- if is_admin:
- q = "select ip, at, un from up where rd=? and fn=?"
- try:
- zs1, zs2, zs3 = icur.execute(q, erd_efn).fetchone()
- if zs1:
- tags["up_ip"] = zs1
- if zs2:
- tags[".up_at"] = zs2
- if zs3:
- tags["up_by"] = zs3
- except:
- pass
- elif add_up_at:
- q = "select at from up where rd=? and fn=?"
- try:
- (zs1,) = icur.execute(q, erd_efn).fetchone()
- if zs1:
- tags[".up_at"] = zs1
- except:
- pass
-
- _ = [tagset.add(k) for k in tags]
- fe["tags"] = tags
-
if icur:
+ mte = vn.flags.get("mte") or {}
+ tagset: set[str] = set()
+ rd = vrem
+ if self.can_admin:
+ up_q = "select substr(w,1,16), ip, at, un from up where rd=? and fn=?"
+ up_m = ["w", "up_ip", ".up_at", "up_by"]
+ else:
+ up_q, up_m = vn.flags["ls_q_m"]
+
+ mt_q = "select mt.k, mt.v from up inner join mt on mt.w = substr(up.w,1,16) where up.rd = ? and up.fn = ? and +mt.k != 'x'"
+ for fe in files:
+ fn = fe["name"]
+ erd_efn = (rd, fn)
+ try:
+ r = icur.execute(mt_q, erd_efn)
+ except Exception as ex:
+ if "database is locked" in str(ex):
+ break
+
+ try:
+ erd_efn = s3enc(idx.mem_cur, rd, fn)
+ r = icur.execute(mt_q, erd_efn)
+ except:
+ self.log("tag read error, %r / %r\n%s" % (rd, fn, min_ex()))
+ break
+
+ tags = {k: v for k, v in r}
+
+ if up_q:
+ try:
+ up_v = icur.execute(up_q, erd_efn).fetchone()
+ for zs1, zs2 in zip(up_m, up_v):
+ if zs2:
+ tags[zs1] = zs2
+ except:
+ pass
+
+ _ = [tagset.add(k) for k in tags]
+ fe["tags"] = tags
+
for fe in dirs:
fe["tags"] = ODict()
lmte = list(mte)
if self.can_admin:
- lmte.extend(("up_by", "up_ip", ".up_at"))
+ lmte.extend(("w", "up_by", "up_ip", ".up_at"))
if "nodirsz" not in vf:
tagset.add(".files")
@@ -6744,7 +7157,7 @@ class HttpCli(object):
taglist = [k for k in lmte if k in tagset]
else:
- taglist = list(tagset)
+ taglist = []
logues, readmes = self._add_logues(vn, abspath, lnames)
ls_ret["logues"] = j2a["logues"] = logues
@@ -6764,6 +7177,7 @@ class HttpCli(object):
os.path.join(abspath, lnames["descript.ion"])
):
rem = []
+ items = {x["name"].lower(): x for x in files + dirs}
with open(os.path.join(abspath, lnames["descript.ion"]), "rb") as f:
for bln in [x.strip() for x in f]:
try:
@@ -6776,12 +7190,9 @@ class HttpCli(object):
fn = fn[1:]
else:
fn, desc = ln.split(" ", 1)
- fe = next(
- (x for x in files if x["name"].lower() == fn.lower()), None
- )
- if fe:
- fe["tags"]["descript.ion"] = desc
- else:
+ try:
+ items[fn.lower()]["tags"]["descript.ion"] = desc
+ except:
t = "
%s %s "
rem.append(t % (html_escape(fn), html_escape(desc)))
except:
@@ -6832,6 +7243,48 @@ class HttpCli(object):
dirs.sort(key=itemgetter("name"))
+ if is_opds:
+ # exclude files which don't match --opds-exts
+ allowed_exts = vf.get("opds_exts") or self.args.opds_exts
+ if allowed_exts:
+ files = [
+ x for x in files if x["name"].rsplit(".", 1)[-1] in allowed_exts
+ ]
+ for item in dirs:
+ href = item["href"]
+ href += ("&" if "?" in href else "?") + "opds"
+ item["href"] = href
+ item["iso8601"] = "%sZ" % (item["dt"].replace(" ", "T"),)
+
+ for item in files:
+ href = item["href"]
+ href += ("&" if "?" in href else "?") + "dl"
+ item["href"] = href
+ item["iso8601"] = "%sZ" % (item["dt"].replace(" ", "T"),)
+
+ if "rmagic" in self.vn.flags:
+ ap = "%s/%s" % (fsroot, item["name"])
+ item["mime"] = guess_mime(item["name"], ap)
+ else:
+ item["mime"] = guess_mime(item["name"])
+
+ # Make sure we can actually generate JPEG thumbnails
+ if (
+ not self.args.th_no_jpg
+ and self.thumbcli
+ and "dthumb" not in dbv.flags
+ and "dithumb" not in dbv.flags
+ ):
+ item["jpeg_thumb_href"] = href + "&th=jf"
+ item["jpeg_thumb_href_hires"] = item["jpeg_thumb_href"] + "3"
+
+ j2a["files"] = files
+ j2a["dirs"] = dirs
+ html = self.j2s("opds", **j2a)
+ mime = "application/atom+xml;profile=opds-catalog"
+ self.reply(html.encode("utf-8", "replace"), mime=mime)
+ return True
+
if is_js:
j2a["ls0"] = cgv["ls0"] = {
"dirs": dirs,
@@ -6931,7 +7384,16 @@ class HttpCli(object):
if zs not in ("", "-"):
ogh["og:site_name"] = zs
+ try:
+ assert file is not None # type: ignore # !rm
+ zs1, zs2 = file["tags"]["res"].split("x")
+ file["tags"][".resw"] = zs1
+ file["tags"][".resh"] = zs2
+ except:
+ pass
+
tagmap = {}
+
if is_au:
title = str(vn.flags.get("og_title_a") or "")
ogh["og:type"] = "music.song"
@@ -6945,16 +7407,25 @@ class HttpCli(object):
title = str(vn.flags.get("og_title_v") or "")
ogh["og:type"] = "video.other"
ogh["og:video"] = j2a["og_raw"]
+
tagmap = {
"title": "og:title",
".dur": "og:video:duration",
+ ".resw": "og:video:width",
+ ".resh": "og:video:height",
}
elif is_pic:
title = str(vn.flags.get("og_title_i") or "")
ogh["twitter:card"] = "summary_large_image"
ogh["twitter:image"] = ogh["og:image"] = j2a["og_raw"]
+ tagmap = {
+ ".resw": "og:image:width",
+ ".resh": "og:image:height",
+ }
+
try:
+ assert file is not None # type: ignore # !rm
for k, v in file["tags"].items():
zs = "{{ %s }}" % (k,)
title = title.replace(zs, str(v))
@@ -6971,6 +7442,7 @@ class HttpCli(object):
for tag, hname in tagmap.items():
try:
+ assert file is not None # type: ignore # !rm
v = file["tags"][tag]
if not v:
continue
diff --git a/copyparty/httpconn.py b/copyparty/httpconn.py
index 11e00d1c..e36e5122 100644
--- a/copyparty/httpconn.py
+++ b/copyparty/httpconn.py
@@ -62,6 +62,7 @@ class HttpConn(object):
self.ipu_iu: Optional[dict[str, str]] = hsrv.ipu_iu
self.ipu_nm: Optional[NetMap] = hsrv.ipu_nm
self.ipa_nm: Optional[NetMap] = hsrv.ipa_nm
+ self.ipar_nm: Optional[NetMap] = hsrv.ipar_nm
self.xff_nm: Optional[NetMap] = hsrv.xff_nm
self.xff_lan: NetMap = hsrv.xff_lan # type: ignore
self.iphash: HMaccas = hsrv.broker.iphash
diff --git a/copyparty/httpsrv.py b/copyparty/httpsrv.py
index 8e4e4a4e..f6cdef40 100644
--- a/copyparty/httpsrv.py
+++ b/copyparty/httpsrv.py
@@ -187,6 +187,7 @@ class HttpSrv(object):
"svcs",
]
self.j2 = {x: env.get_template(x + ".html") for x in jn}
+ self.j2["opds"] = env.get_template("opds.xml")
self.prism = has_resource(self.E, "web/deps/prism.js.gz")
if self.args.ipu:
@@ -200,6 +201,7 @@ class HttpSrv(object):
self.ipr = None
self.ipa_nm = build_netmap(self.args.ipa)
+ self.ipar_nm = build_netmap(self.args.ipar)
self.xff_nm = build_netmap(self.args.xff_src)
self.xff_lan = build_netmap("lan")
@@ -382,8 +384,8 @@ class HttpSrv(object):
if nloris < nconn / 2:
continue
- t = "slowloris (idle-conn): {} banned for {} min"
- self.log(self.name, t.format(ip, self.args.loris, nclose), 1)
+ t = "slow%s (idle-conn): %s banned for %d min" # slowloris
+ self.log(self.name, t % ("loris", ip, self.args.loris), 1)
self.bans[ip] = int(time.time() + self.args.loris * 60)
if self.args.log_conn:
diff --git a/copyparty/mdns.py b/copyparty/mdns.py
index d80e5142..f64ce605 100644
--- a/copyparty/mdns.py
+++ b/copyparty/mdns.py
@@ -2,6 +2,7 @@
from __future__ import print_function, unicode_literals
import errno
+import os
import random
import select
import socket
@@ -12,29 +13,64 @@ from ipaddress import IPv4Network, IPv6Network
from .__init__ import TYPE_CHECKING
from .__init__ import unicode as U
from .multicast import MC_Sck, MCast
-from .stolen.dnslib import AAAA
-from .stolen.dnslib import CLASS as DC
-from .stolen.dnslib import (
- NSEC,
- PTR,
- QTYPE,
- RR,
- SRV,
- TXT,
- A,
- DNSHeader,
- DNSQuestion,
- DNSRecord,
- set_avahi_379,
-)
from .util import IP6_LL, CachedSet, Daemon, Netdev, list_ips, min_ex
+try:
+ if os.getenv("PRTY_SYS_ALL") or os.getenv("PRTY_SYS_DNSLIB"):
+ raise ImportError()
+ from .stolen.dnslib import (
+ AAAA,
+ )
+ from .stolen.dnslib import CLASS as DC
+ from .stolen.dnslib import (
+ NSEC,
+ PTR,
+ QTYPE,
+ RR,
+ SRV,
+ TXT,
+ A,
+ DNSHeader,
+ DNSQuestion,
+ DNSRecord,
+ set_avahi_379,
+ )
+
+ DNS_VND = True
+except ImportError:
+ DNS_VND = False
+ from dnslib import (
+ AAAA,
+ )
+ from dnslib import CLASS as DC
+ from dnslib import (
+ NSEC,
+ PTR,
+ QTYPE,
+ RR,
+ SRV,
+ TXT,
+ A,
+ Bimap,
+ DNSHeader,
+ DNSQuestion,
+ DNSRecord,
+ )
+
+ DC.forward[0x8001] = "F_IN"
+ DC.reverse["F_IN"] = 0x8001
+
if TYPE_CHECKING:
from .svchub import SvcHub
if True: # pylint: disable=using-constant-test
from typing import Any, Optional, Union
+if os.getenv("PRTY_MODSPEC"):
+ from inspect import getsourcefile
+
+ print("PRTY_MODSPEC: dnslib:", getsourcefile(A))
+
MDNS4 = "224.0.0.251"
MDNS6 = "ff02::fb"
@@ -73,8 +109,8 @@ class MDNS(MCast):
self.ngen = ngen
self.ttl = 300
- if not self.args.zm_nwa_1:
- set_avahi_379()
+ if not self.args.zm_nwa_1 and DNS_VND:
+ set_avahi_379() # type: ignore
zs = self.args.zm_fqdn or (self.args.name + ".local")
zs = zs.replace("--name", self.args.name).rstrip(".") + "."
@@ -100,9 +136,14 @@ class MDNS(MCast):
self.log_func(self.logsrc, msg, c)
def build_svcs(self) -> tuple[dict[str, dict[str, Any]], set[str]]:
+ ar = self.args
zms = self.args.zms
- http = {"port": 80 if 80 in self.args.p else self.args.p[0]}
- https = {"port": 443 if 443 in self.args.p else self.args.p[0]}
+
+ zi = ar.zm_http
+ http = {"port": zi if zi != -1 else 80 if 80 in ar.p else ar.p[0]}
+ zi = ar.zm_https
+ https = {"port": zi if zi != -1 else 443 if 443 in ar.p else ar.p[0]}
+
webdav = http.copy()
webdavs = https.copy()
webdav["u"] = webdavs["u"] = "u" # KDE requires username
@@ -127,16 +168,16 @@ class MDNS(MCast):
svcs: dict[str, dict[str, Any]] = {}
- if "d" in zms:
+ if "d" in zms and http["port"]:
svcs["_webdav._tcp.local."] = webdav
- if "D" in zms:
+ if "D" in zms and https["port"]:
svcs["_webdavs._tcp.local."] = webdavs
- if "h" in zms:
+ if "h" in zms and http["port"]:
svcs["_http._tcp.local."] = http
- if "H" in zms:
+ if "H" in zms and https["port"]:
svcs["_https._tcp.local."] = https
if "f" in zms.lower():
diff --git a/copyparty/metrics.py b/copyparty/metrics.py
index 0ad65abe..cd2e4a00 100644
--- a/copyparty/metrics.py
+++ b/copyparty/metrics.py
@@ -17,10 +17,10 @@ class Metrics(object):
self.hsrv = hsrv
def tx(self, cli: "HttpCli") -> bool:
- if not cli.avol:
+ args = cli.args
+ if not cli.avol and cli.uname.lower() not in args.stats_u_set:
raise Pebkac(403, "'stats' not allowed for user " + cli.uname)
- args = cli.args
if not args.stats:
raise Pebkac(403, "the stats feature is not enabled in server config")
diff --git a/copyparty/mtag.py b/copyparty/mtag.py
index 29750733..41c28a09 100644
--- a/copyparty/mtag.py
+++ b/copyparty/mtag.py
@@ -168,16 +168,17 @@ def au_unpk(
znil = [x for x in znil if "cover" in x[0]] or znil
znil = [x for x in znil if CBZ_01.search(x[0])] or znil
t = "cbz: %d files, %d hits" % (nf, len(znil))
+ if not znil:
+ raise Exception("no images inside cbz")
using = sorted(znil)[0][1].filename
if znil:
t += ", using " + using
log(t)
- if not znil:
- raise Exception("no images inside cbz")
fi = zf.open(using)
elif pk == "epub":
fi = get_cover_from_epub(log, abspath)
+ assert fi # !rm
else:
raise Exception("unknown compression %s" % (pk,))
@@ -199,9 +200,10 @@ def au_unpk(
except Exception as ex:
if ret:
- t = "failed to decompress audio file %r: %r"
+ t = "failed to decompress file %r: %r"
log(t % (abspath, ex))
wunlink(log, ret, vn.flags if vn else VF_CAREFUL)
+ return ""
return abspath
@@ -383,7 +385,7 @@ def get_cover_from_epub(log: "NamedLogger", abspath: str) -> Optional[IO[bytes]]
from .dxml import parse_xml
try:
- from urlparse import urljoin # Python2
+ from urlparse import urljoin # type: ignore # Python2
except ImportError:
from urllib.parse import urljoin # Python3
@@ -421,10 +423,17 @@ def get_cover_from_epub(log: "NamedLogger", abspath: str) -> Optional[IO[bytes]]
# This might be an EPUB2 file, try the legacy way of specifying covers
coverimage_path = _get_cover_from_epub2(log, package_root, package_ns)
+ if not coverimage_path:
+ raise Exception("no cover inside epub")
+
# This url is either absolute (in the .epub) or relative to the package document
adjusted_cover_path = urljoin(rootfile_path, coverimage_path)
- return z.open(adjusted_cover_path)
+ try:
+ return z.open(adjusted_cover_path)
+ except KeyError:
+ t = "epub: cover specified in package document, but doesn't exist: %s"
+ log(t % (adjusted_cover_path,))
def _get_cover_from_epub2(
@@ -432,9 +441,8 @@ def _get_cover_from_epub2(
) -> Optional[str]:
# in , then
# - in
- cover_id = package_root.find("./metadata/meta[@name='cover']", package_ns).get(
- "content"
- )
+ xn = package_root.find("./metadata/meta[@name='cover']", package_ns)
+ cover_id = xn.get("content") if xn is not None else None
if not cover_id:
return None
@@ -510,13 +518,12 @@ class MTag(object):
"album-artist",
"tpe2",
"aart",
- "conductor",
"organization",
"band",
],
".tn": ["tracknumber", "trck", "trkn", "track"],
"genre": ["genre", "tcon", "\u00a9gen"],
- "date": [
+ "tdate": [
"original-release-date",
"release-date",
"date",
@@ -644,6 +651,9 @@ class MTag(object):
return self._get(abspath)
ap = au_unpk(self.log, self.args.au_unpk, abspath)
+ if not ap:
+ return {}
+
ret = self._get(ap)
if ap != abspath:
wunlink(self.log, ap, VF_CAREFUL)
@@ -749,6 +759,9 @@ class MTag(object):
ap = abspath
ret: dict[str, Any] = {}
+ if not ap:
+ return ret
+
for tagname, parser in sorted(parsers.items(), key=lambda x: (x[1].pri, x[0])):
try:
cmd = [parser.bin, ap]
diff --git a/copyparty/multicast.py b/copyparty/multicast.py
index ea2f223e..7459696e 100644
--- a/copyparty/multicast.py
+++ b/copyparty/multicast.py
@@ -96,7 +96,10 @@ class MCast(object):
def create_servers(self) -> list[str]:
bound: list[str] = []
netdevs = self.hub.tcpsrv.netdevs
- ips = [x[0] for x in self.hub.tcpsrv.bound]
+ blist = self.hub.tcpsrv.bound
+ if self.args.http_no_tcp:
+ blist = self.hub.tcpsrv.seen_eps
+ ips = [x[0] for x in blist]
if "::" in ips:
ips = [x for x in ips if x != "::"] + list(
diff --git a/copyparty/qrkode.py b/copyparty/qrkode.py
new file mode 100644
index 00000000..34ebbcca
--- /dev/null
+++ b/copyparty/qrkode.py
@@ -0,0 +1,112 @@
+# coding: utf-8
+from __future__ import print_function, unicode_literals
+
+import os
+
+try:
+ if os.getenv("PRTY_SYS_ALL") or os.getenv("PRTY_SYS_QRCG"):
+ raise ImportError()
+ from .stolen.qrcodegen import QrCode
+
+ qrgen = QrCode.encode_binary
+ VENDORED = True
+except ImportError:
+ VENDORED = False
+ from qrcodegen import QrCode
+
+if os.getenv("PRTY_MODSPEC"):
+ from inspect import getsourcefile
+
+ print("PRTY_MODSPEC: qrcode:", getsourcefile(QrCode))
+
+if True: # pylint: disable=using-constant-test
+ import typing
+ from typing import Any, Optional, Sequence, Union
+
+
+if not VENDORED:
+
+ def _qrgen(data: Union[bytes, Sequence[int]]) -> "QrCode":
+ ret = None
+ V = QrCode.Ecc
+ for e in [V.HIGH, V.QUARTILE, V.MEDIUM, V.LOW]:
+ qr = QrCode.encode_binary(data, e)
+ qr.size = qr._size
+ qr.modules = qr._modules
+ if not ret or ret.size > qr.size:
+ ret = qr
+ return ret
+
+ qrgen = _qrgen
+
+
+def qr2txt(qr: QrCode, zoom: int = 1, pad: int = 4) -> str:
+ tab = qr.modules
+ sz = qr.size
+ if sz % 2 and zoom == 1:
+ tab.append([False] * sz)
+
+ tab = [[False] * sz] * pad + tab + [[False] * sz] * pad
+ tab = [[False] * pad + x + [False] * pad for x in tab]
+
+ rows: list[str] = []
+ if zoom == 1:
+ for y in range(0, len(tab), 2):
+ row = ""
+ for x in range(len(tab[y])):
+ v = 2 if tab[y][x] else 0
+ v += 1 if tab[y + 1][x] else 0
+ row += " โโโ"[v]
+ rows.append(row)
+ else:
+ for tr in tab:
+ row = ""
+ for zb in tr:
+ row += " โ"[int(zb)] * 2
+ rows.append(row)
+
+ return "\n".join(rows)
+
+
+def qr2png(
+ qr: QrCode,
+ zoom: int,
+ pad: int,
+ bg: Optional[tuple[int, int, int]],
+ fg: Optional[tuple[int, int, int]],
+ ap: str,
+) -> None:
+ from PIL import Image
+
+ tab = qr.modules
+ sz = qr.size
+ psz = sz + pad * 2
+ if bg:
+ img = Image.new("RGB", (psz, psz), bg)
+ else:
+ img = Image.new("RGBA", (psz, psz), (0, 0, 0, 0))
+ fg = (fg[0], fg[1], fg[2], 255)
+ for y in range(sz):
+ for x in range(sz):
+ if tab[y][x]:
+ img.putpixel((x + pad, y + pad), fg)
+ if zoom != 1:
+ img = img.resize((sz * zoom, sz * zoom), Image.Resampling.NEAREST)
+ img.save(ap)
+
+
+def qr2svg(qr: QrCode, border: int) -> str:
+ parts: list[str] = []
+ for y in range(qr.size):
+ sy = border + y
+ for x in range(qr.size):
+ if qr.modules[y][x]:
+ parts.append("M%d,%dh1v1h-1z" % (border + x, sy))
+ t = """\
+
+
+"""
+ return t.format(qr.size + border * 2, " ".join(parts))
diff --git a/copyparty/sftpd.py b/copyparty/sftpd.py
new file mode 100644
index 00000000..2221caf1
--- /dev/null
+++ b/copyparty/sftpd.py
@@ -0,0 +1,804 @@
+# coding: utf-8
+from __future__ import print_function, unicode_literals
+
+import errno
+import hashlib
+import logging
+import os
+import select
+import socket
+import time
+from threading import ExceptHookArgs
+
+import paramiko
+import paramiko.common
+import paramiko.sftp_attr
+from paramiko.common import AUTH_FAILED, AUTH_SUCCESSFUL
+from paramiko.sftp import (
+ SFTP_FAILURE,
+ SFTP_NO_SUCH_FILE,
+ SFTP_OK,
+ SFTP_OP_UNSUPPORTED,
+ SFTP_PERMISSION_DENIED,
+)
+
+from .__init__ import ANYWIN, TYPE_CHECKING
+from .authsrv import LEELOO_DALLAS, VFS, AuthSrv
+from .bos import bos
+from .util import (
+ FN_EMB,
+ VF_CAREFUL,
+ Daemon,
+ ODict,
+ Pebkac,
+ ipnorm,
+ min_ex,
+ read_utf8,
+ relchk,
+ runhook,
+ sanitize_fn,
+ ub64enc,
+ undot,
+ vjoin,
+ wunlink,
+)
+
+if TYPE_CHECKING:
+ from .svchub import SvcHub
+
+if True: # pylint: disable=using-constant-test
+ from typing import Any, BinaryIO, Optional, Union
+
+SATTR = paramiko.sftp_attr.SFTPAttributes
+
+
+class SSH_Srv(paramiko.ServerInterface):
+ def __init__(self, hub: "SvcHub", addr: Any):
+ self.hub = hub
+ self.args = args = hub.args
+ self.log_func = hub.log
+ self.uname = "*"
+
+ self.addr = addr
+ self.ip = addr[0]
+ if self.ip.startswith("::ffff:"):
+ self.ip = self.ip[7:]
+
+ zsl = []
+ if args.sftp_anon:
+ zsl.append("none")
+ if args.sftp_key2u:
+ zsl.append("publickey")
+ if args.sftp_pw or args.sftp_anon:
+ zsl.append("password")
+ self._auths = ",".join(zsl)
+
+ def log(self, msg: str, c: Union[int, str] = 0) -> None:
+ self.hub.log("sftp:%s" % (self.ip,), msg, c)
+
+ def get_allowed_auths(self, username: str) -> str:
+ return self._auths
+
+ def get_banner(self) -> tuple[Optional[str], Optional[str]]:
+ if self.args.sftpv:
+ self.log("get_banner")
+ t = self.args.sftp_banner
+ if not t:
+ return (None, None)
+ if t.startswith("@"):
+ t = read_utf8(self.log, t[1:], False)
+ if t and not t.endswith("\n"):
+ t += "\n"
+ return (t, "en-US")
+
+ def check_channel_request(self, kind: str, chanid: int) -> int:
+ if self.args.sftpv:
+ self.log("channel-request: %r, %r" % (kind, chanid))
+ if kind == "session":
+ return paramiko.common.OPEN_SUCCEEDED
+ return paramiko.common.OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED
+
+ def check_auth_none(self, username: str) -> int:
+ try:
+ return self._check_auth_none(username)
+ except:
+ self.log("unhandled exception: %s" % (min_ex(),), 1)
+ return AUTH_FAILED
+
+ def _check_auth_none(self, uname: str) -> int:
+ args = self.args
+ if uname != args.sftp_anon or not uname:
+ return AUTH_FAILED
+
+ ipn = ipnorm(self.ip)
+ bans = self.hub.bans
+ if ipn in bans:
+ rt = bans[ipn] - time.time()
+ if rt < 0:
+ self.log("client unbanned")
+ del bans[ipn]
+ else:
+ self.log("client is banned")
+ return AUTH_FAILED
+
+ self.uname = "*"
+ self.log("auth-none OK: *")
+ return AUTH_SUCCESSFUL
+
+ def check_auth_password(self, username: str, password: str) -> int:
+ try:
+ return self._check_auth_password(username, password)
+ except:
+ self.log("unhandled exception: %s" % (min_ex(),), 1)
+ return AUTH_FAILED
+
+ def _check_auth_password(self, uname: str, pw: str) -> int:
+ args = self.args
+ if args.sftpv:
+ logpw = pw
+ if args.log_badpwd == 0:
+ logpw = ""
+ elif args.log_badpwd == 2:
+ zb = hashlib.sha512(pw.encode("utf-8", "replace")).digest()
+ logpw = "%" + ub64enc(zb[:12]).decode("ascii")
+ self.log("auth-pw: %r, %r" % (uname, logpw))
+
+ ipn = ipnorm(self.ip)
+ bans = self.hub.bans
+ if ipn in bans:
+ rt = bans[ipn] - time.time()
+ if rt < 0:
+ self.log("client unbanned")
+ del bans[ipn]
+ else:
+ self.log("client is banned")
+ return AUTH_FAILED
+
+ anon = args.sftp_anon
+ if anon and uname == anon:
+ self.uname = "*"
+ self.log("auth-pw OK: *")
+ return AUTH_SUCCESSFUL
+
+ if not args.sftp_pw:
+ return AUTH_FAILED
+
+ if args.usernames:
+ alts = ["%s:%s" % (uname, pw)]
+ else:
+ alts = [pw, uname]
+
+ attempt = "%s:%s" % (uname, pw)
+ uname = ""
+ asrv = self.hub.asrv
+ for zs in alts:
+ zs = asrv.iacct.get(asrv.ah.hash(zs), "")
+ if zs:
+ uname = zs
+ break
+
+ if args.ipu and uname == "*":
+ uname = args.ipu_iu[args.ipu_nm.map(self.ip)]
+ if args.ipr and uname in args.ipr_u:
+ if not args.ipr_u[uname].map(self.ip):
+ logging.warning("username [%s] rejected by --ipr", uname)
+ return AUTH_FAILED
+
+ if not uname or not (asrv.vfs.aread.get(uname) or asrv.vfs.awrite.get(uname)):
+ g = self.hub.gpwd
+ if g.lim:
+ bonk, ip = g.bonk(self.ip, attempt)
+ if bonk:
+ logging.warning("client banned: invalid passwords")
+ bans[self.ip] = bonk
+ try:
+ # only possible if multiprocessing disabled
+ self.hub.broker.httpsrv.bans[ip] = bonk # type: ignore
+ self.hub.broker.httpsrv.nban += 1 # type: ignore
+ except:
+ pass
+ return AUTH_FAILED
+
+ self.uname = uname
+ self.log("auth-pw OK: %s" % (uname,))
+ return AUTH_SUCCESSFUL
+
+ def check_auth_publickey(self, username: str, key: paramiko.PKey) -> int:
+ try:
+ return self._check_auth_publickey(username, key)
+ except:
+ self.log("unhandled exception: %s" % (min_ex(),), 1)
+ return AUTH_FAILED
+
+ def _check_auth_publickey(self, uname: str, key: paramiko.PKey) -> int:
+ args = self.args
+ if args.sftpv:
+ zs = key.get_name() + "," + key.get_base64()[:32]
+ self.log("auth-key: %r, %r" % (uname, zs))
+
+ ipn = ipnorm(self.ip)
+ bans = self.hub.bans
+ if ipn in bans:
+ rt = bans[ipn] - time.time()
+ if rt < 0:
+ self.log("client unbanned")
+ del bans[ipn]
+ else:
+ self.log("client is banned")
+ return AUTH_FAILED
+
+ anon = args.sftp_anon
+ if anon and uname == anon:
+ self.uname = "*"
+ self.log("auth-key OK: *")
+ return AUTH_SUCCESSFUL
+
+ attempt = "%s %s" % (key.get_name(), key.get_base64())
+ ok = args.sftp_key2u.get(attempt) == uname
+
+ if ok and args.ipr and uname in args.ipr_u:
+ if not args.ipr_u[uname].map(self.ip):
+ logging.warning("username [%s] rejected by --ipr", uname)
+ return AUTH_FAILED
+
+ asrv = self.hub.asrv
+ if not ok or not (asrv.vfs.aread.get(uname) or asrv.vfs.awrite.get(uname)):
+ self.log("auth-key REJECTED: %s" % (uname,))
+ return AUTH_FAILED
+
+ self.uname = uname
+ self.log("auth-key OK: %s" % (uname,))
+ return AUTH_SUCCESSFUL
+
+
+class SFTP_FH(paramiko.SFTPHandle):
+ def __init__(self, flags: int = 0) -> None:
+ self.filename = ""
+ self.readfile: Optional[BinaryIO] = None
+ self.writefile: Optional[BinaryIO] = None
+ super(SFTP_FH, self).__init__(flags)
+
+ def stat(self):
+ try:
+ f = self.readfile or self.writefile
+ return SATTR.from_stat(os.fstat(f.fileno()))
+ except OSError as ex:
+ return paramiko.SFTPServer.convert_errno(ex.errno)
+
+ def chattr(self, attr):
+ # python doesn't have equivalents to fchown or fchmod, so we have to
+ # use the stored filename
+ if not self.writefile:
+ return SFTP_PERMISSION_DENIED
+ try:
+ paramiko.SFTPServer.set_file_attr(self.filename, attr)
+ return SFTP_OK
+ except OSError as ex:
+ return paramiko.SFTPServer.convert_errno(ex.errno)
+
+
+class SFTP_Srv(paramiko.SFTPServerInterface):
+ def __init__(self, ssh: paramiko.ServerInterface, *a, **ka):
+ super(SFTP_Srv, self).__init__(ssh, *a, **ka)
+ self.ssh = ssh
+ self.ip: str = ssh.ip # type: ignore
+ self.hub: "SvcHub" = ssh.hub # type: ignore
+ self.uname: str = ssh.uname # type: ignore
+ self.args = self.hub.args
+ self.asrv: "AuthSrv" = self.hub.asrv
+
+ if self.uname == LEELOO_DALLAS:
+ raise Exception("send her back")
+
+ def log(self, msg: str, c: Union[int, str] = 0) -> None:
+ self.hub.log("sftp:%s" % (self.ip,), msg, c)
+
+ def v2a(
+ self,
+ vpath: str,
+ r: bool = False,
+ w: bool = False,
+ m: bool = False,
+ d: bool = False,
+ ) -> tuple[str, VFS, str]:
+ vpath = vpath.replace(os.sep, "/").strip("/")
+ rd, fn = os.path.split(vpath)
+ if relchk(rd):
+ self.log("malicious vpath: %s", vpath)
+ raise Exception("Unsupported characters in [%s]" % (vpath,))
+
+ fn = sanitize_fn(fn or "")
+ vpath = vjoin(rd, fn)
+ vn, rem = self.hub.asrv.vfs.get(vpath, self.uname, r, w, m, d)
+ if (
+ w
+ and fn.lower() in FN_EMB
+ and self.uname not in vn.axs.uread
+ and "wo_up_readme" not in vn.flags
+ ):
+ fn = "_wo_" + fn
+ vpath = vjoin(rd, fn)
+ vn, rem = self.hub.asrv.vfs.get(vpath, self.uname, r, w, m, d)
+
+ if not vn.realpath:
+ # return "", vn, rem
+ raise OSError(errno.ENOENT, "no filesystem mounted at [/%s]" % (vpath,))
+
+ if "xdev" in vn.flags or "xvol" in vn.flags:
+ ap = vn.canonical(rem)
+ avn = vn.chk_ap(ap)
+ t = "Permission denied in [{}]"
+ if not avn:
+ raise OSError(errno.EPERM, "permission denied in [/%s]" % (vpath,))
+
+ cr, cw, cm, cd, _, _, _, _, _ = avn.uaxs[self.uname]
+ if r and not cr or w and not cw or m and not cm or d and not cd:
+ raise OSError(errno.EPERM, "permission denied in [/%s]" % (vpath,))
+
+ if "bcasechk" in vn.flags and not vn.casechk(rem, True):
+ raise OSError(errno.ENOENT, "file does not exist case-sensitively")
+
+ return os.path.join(vn.realpath, rem), vn, rem
+
+ def list_folder(self, path: str) -> list[SATTR] | int:
+ try:
+ return self._list_folder(path)
+ except Pebkac as ex:
+ if ex.code == 404:
+ self.log("folder 404: %s" % (path,))
+ return SFTP_NO_SUCH_FILE
+ return SFTP_PERMISSION_DENIED
+ except:
+ self.log("unhandled exception: %s" % (min_ex(),), 1)
+ return SFTP_FAILURE
+
+ def _list_folder(self, path: str) -> list[SATTR] | int:
+ try:
+ ap, vn, rem = self.v2a(path, r=True)
+ except Pebkac:
+ try:
+ self.v2a(path, w=True)
+ return [] # display write-only folders as empty
+ except:
+ pass
+ if self.asrv.vfs.realpath or path.strip("/"):
+ return SFTP_PERMISSION_DENIED
+ # list of accessible volumes
+ ret = []
+ zi = int(time.time())
+ vst = os.stat_result((16877, -1, -1, 1, 1000, 1000, 8, zi, zi, zi))
+ for vn in self.asrv.vfs.all_vols.values():
+ if "/" in vn.vpath or not vn.vpath:
+ continue # only include toplevel-mounted vols
+ try:
+ self.hub.asrv.vfs.get(vn.vpath, self.uname, True, False)
+ ret.append(SATTR.from_stat(vst, filename=vn.vpath))
+ except:
+ pass
+ ret.sort(key=lambda x: x.filename)
+ return ret
+
+ _, vfs_ls, vfs_virt = vn.ls(
+ rem,
+ self.uname,
+ not self.args.no_scandir,
+ [[True, False], [False, True]],
+ throw=True,
+ )
+ ret = [SATTR.from_stat(x[1], filename=x[0]) for x in vfs_ls]
+ for zs, vn2 in vfs_virt.items():
+ if not vn2.realpath:
+ continue
+ st = bos.stat(vn2.realpath)
+ ret.append(SATTR.from_stat(st, filename=zs))
+ if self.uname not in vn.axs.udot:
+ ret = [x for x in ret if not x.filename.split("/")[-1].startswith(".")]
+ ret.sort(key=lambda x: x.filename)
+ return ret
+
+ def stat(self, path: str) -> SATTR | int:
+ try:
+ return self._stat(path)
+ except:
+ self.log("unhandled exception: %s" % (min_ex(),), 1)
+ return SFTP_FAILURE
+
+ def lstat(self, path: str) -> SATTR | int:
+ try:
+ return self._stat(path)
+ except:
+ self.log("unhandled exception: %s" % (min_ex(),), 1)
+ return SFTP_FAILURE
+
+ def _stat(self, vp: str) -> SATTR | int:
+ try:
+ ap = self.v2a(vp, r=True)[0]
+ st = bos.stat(ap)
+ except:
+ if vp.strip("/") or self.asrv.vfs.realpath:
+ try:
+ self.v2a(vp, w=True)[0]
+ except:
+ return SFTP_PERMISSION_DENIED
+ zi = int(time.time())
+ st = os.stat_result((16877, -1, -1, 1, 1000, 1000, 8, zi, zi, zi))
+ return SATTR.from_stat(st)
+
+ def open(self, path: str, flags: int, attr: SATTR) -> paramiko.SFTPHandle | int:
+ try:
+ return self._open(path, flags, attr)
+ except:
+ self.log("unhandled exception: %s" % (min_ex(),), 1)
+ return SFTP_FAILURE
+
+ def _open(self, vp: str, iflag: int, attr: SATTR) -> paramiko.SFTPHandle | int:
+ if ANYWIN:
+ iflag |= os.O_BINARY
+ if iflag & os.O_WRONLY:
+ rd = False
+ wr = True
+ if iflag & os.O_APPEND:
+ smode = "ab"
+ else:
+ smode = "wb"
+ elif iflag & os.O_RDWR:
+ rd = wr = True
+ if iflag & os.O_APPEND:
+ smode = "a+b"
+ else:
+ smode = "r+b"
+ else:
+ rd = True
+ wr = False
+ smode = "rb"
+
+ try:
+ vn, rem = self.asrv.vfs.get(vp, self.uname, rd, wr)
+ ap = os.path.join(vn.realpath, rem)
+ vf = vn.flags
+ except Pebkac as ex:
+ t = "denied open file [%s], iflag=%s, attr=%s, read=%s, write=%s: %s"
+ self.log(t % (vp, iflag, attr, rd, wr, ex))
+ return SFTP_PERMISSION_DENIED
+
+ if wr:
+ try:
+ st = bos.stat(ap)
+ td = time.time() - st.st_mtime
+ need_unlink = True
+ except:
+ need_unlink = False
+ td = 0
+
+ xbu = vn.flags.get("xbu")
+ if xbu:
+ hr = runhook(
+ self.log,
+ None,
+ self.hub.up2k,
+ "xbu.sftp",
+ xbu,
+ ap,
+ vp,
+ "",
+ "",
+ "",
+ 0,
+ 0,
+ "7.3.8.7",
+ time.time(),
+ None,
+ )
+ t = hr.get("rejectmsg") or ""
+ if t or hr.get("rc") != 0:
+ if not t:
+ t = "upload blocked by xbu server config: %r" % (vp,)
+ self.log(t, 3)
+ return SFTP_PERMISSION_DENIED
+
+ if wr and need_unlink: # type: ignore # !rm
+ assert td # type: ignore # !rm
+ if td >= -1 and td <= self.args.ftp_wt:
+ # within permitted timeframe; allow overwrite or resume
+ do_it = True
+ elif self.args.no_del or self.args.ftp_no_ow:
+ # file too old, or overwrite not allowed; reject
+ do_it = False
+ else:
+ # allow overwrite if user has delete permission
+ do_it = self.uname in vn.axs.udel
+
+ if not do_it:
+ t = "file already exists and no permission to overwrite: %s"
+ self.log(t % (vp,))
+ return SFTP_PERMISSION_DENIED
+
+ # Don't unlink file for append mode
+ elif "a" not in smode:
+ wunlink(self.log, ap, VF_CAREFUL)
+
+ chmod = getattr(attr, "st_mode", None)
+ if chmod is None:
+ chmod = vf.get("chmod_f", 644)
+
+ try:
+ fd = os.open(ap, iflag, chmod)
+ except OSError as ex:
+ t = "failed to os.open [%s] -> [%s] with iflag [%s] and chmod [%s]"
+ self.log(t % (vp, ap, iflag, chmod), 3)
+ return paramiko.SFTPServer.convert_errno(ex.errno)
+
+ if iflag & os.O_CREAT:
+ paramiko.SFTPServer.set_file_attr(ap, attr)
+
+ try:
+ f = os.fdopen(fd, smode)
+ except OSError as ex:
+ t = "failed to os.fdpen [%s] -> [%s] with smode [%s]"
+ self.log(t % (vp, ap, smode), 3)
+ return paramiko.SFTPServer.convert_errno(ex.errno)
+
+ ret = SFTP_FH(iflag)
+ ret.filename = ap
+ ret.readfile = f if rd else None
+ ret.writefile = f if wr else None
+ return ret
+
+ def remove(self, path: str) -> int:
+ try:
+ return self._remove(path)
+ except:
+ self.log("unhandled exception: %s" % (min_ex(),), 1)
+ return SFTP_FAILURE
+
+ def _remove(self, vp: str) -> int:
+ if self.args.no_del:
+ self.log("The delete feature is disabled in server config")
+ return SFTP_PERMISSION_DENIED
+ try:
+ self.hub.up2k.handle_rm(self.uname, self.ip, [vp], [], False, False)
+ return SFTP_OK
+ except Pebkac as ex:
+ t = "denied delete [%s]: %s"
+ self.log(t % (vp, ex))
+ return SFTP_PERMISSION_DENIED
+ except OSError as ex:
+ return paramiko.SFTPServer.convert_errno(ex.errno)
+
+ def rename(self, oldpath: str, newpath: str) -> int:
+ try:
+ return self._rename(oldpath, newpath)
+ except:
+ self.log("unhandled exception: %s" % (min_ex(),), 1)
+ return SFTP_FAILURE
+
+ def _rename(self, svp: str, dvp: str) -> int:
+ if self.args.no_mv:
+ self.log("The rename/move feature is disabled in server config")
+ svp = svp.strip("/")
+ dvp = dvp.strip("/")
+ try:
+ self.hub.up2k.handle_mv("", self.uname, self.ip, svp, dvp)
+ return SFTP_OK
+ except Pebkac as ex:
+ t = "denied rename [%s] to [%s]: %s"
+ self.log(t % (svp, dvp, ex))
+ return SFTP_PERMISSION_DENIED
+ except OSError as ex:
+ return paramiko.SFTPServer.convert_errno(ex.errno)
+
+ def mkdir(self, path: str, attr: SATTR) -> int:
+ try:
+ return self._mkdir(path, attr)
+ except:
+ self.log("unhandled exception: %s" % (min_ex(),), 1)
+ return SFTP_FAILURE
+
+ def _mkdir(self, vp: str, attr: SATTR) -> int:
+ try:
+ vn, rem = self.asrv.vfs.get(vp, self.uname, False, True)
+ ap = os.path.join(vn.realpath, rem)
+ bos.makedirs(ap, vf=vn.flags) # filezilla expects this
+ if attr is not None:
+ paramiko.SFTPServer.set_file_attr(ap, attr)
+ return SFTP_OK
+ except Pebkac as ex:
+ t = "denied mkdir [%s]: %s"
+ self.log(t % (vp, ex))
+ return SFTP_PERMISSION_DENIED
+ except OSError as ex:
+ return paramiko.SFTPServer.convert_errno(ex.errno)
+
+ def rmdir(self, path: str) -> int:
+ try:
+ return self._rmdir(path)
+ except:
+ self.log("unhandled exception: %s" % (min_ex(),), 1)
+ return SFTP_FAILURE
+
+ def _rmdir(self, vp: str) -> int:
+ try:
+ vn, rem = self.asrv.vfs.get(vp, self.uname, False, False, will_del=True)
+ ap = os.path.join(vn.realpath, rem)
+ bos.rmdir(ap)
+ return SFTP_OK
+ except Pebkac as ex:
+ t = "denied rmdir [%s]: %s"
+ self.log(t % (vp, ex))
+ return SFTP_PERMISSION_DENIED
+ except OSError as ex:
+ return paramiko.SFTPServer.convert_errno(ex.errno)
+
+ def chattr(self, path: str, attr: SATTR) -> int:
+ try:
+ return self._chattr(path, attr)
+ except:
+ self.log("unhandled exception: %s" % (min_ex(),), 1)
+ return SFTP_FAILURE
+
+ def _chattr(self, vp: str, attr: SATTR) -> int:
+ try:
+ vn, rem = self.asrv.vfs.get(vp, self.uname, False, True, will_del=True)
+ ap = os.path.join(vn.realpath, rem)
+ paramiko.SFTPServer.set_file_attr(ap, attr)
+ return SFTP_OK
+ except Pebkac as ex:
+ t = "denied chattr [%s]: %s"
+ self.log(t % (vp, ex))
+ return SFTP_PERMISSION_DENIED
+ except OSError as ex:
+ return paramiko.SFTPServer.convert_errno(ex.errno)
+
+ def symlink(self, target_path: str, path: str) -> int:
+ return SFTP_OP_UNSUPPORTED
+
+ def readlink(self, path: str) -> str | int:
+ return path
+
+ def canonicalize(self, path: str) -> str:
+ return "/%s" % (undot(path),)
+
+
+class Sftpd(object):
+ def __init__(self, hub: "SvcHub") -> None:
+ self.hub = hub
+ self.args = args = hub.args
+ self.log_func = hub.log
+ self.srv: list[socket.socket] = []
+ self.bound: list[str] = []
+ self.sessions = {}
+
+ ips = args.i
+ if "::" in ips:
+ ips.append("0.0.0.0")
+
+ ips = [x for x in ips if not x.startswith(("unix:", "fd:"))]
+
+ if args.sftp4:
+ ips = [x for x in ips if ":" not in x]
+
+ if not ips:
+ self.log("cannot start sftp-server; no compatible IPs in -i", 1)
+ return
+
+ self.hostkeys = []
+ hostkeytypes = (
+ ("ed25519", "Ed25519Key", {}), # best
+ ("ecdsa", "ECDSAKey", {"bits": 384}),
+ ("rsa", "RSAKey", {"bits": 4096}),
+ ("dsa", "DSSKey", {}), # worst
+ )
+ for fname, aname, opts in hostkeytypes:
+ fpath = "%s/ssh_host_%s_key" % (args.sftp_hostk, fname.lower())
+ try:
+ pkey = getattr(paramiko, aname).from_private_key_file(fpath)
+ except Exception as ex:
+ try:
+ genfun = getattr(paramiko, aname).generate
+ except Exception as ex2:
+ if args.sftpv or fname not in ("dsa", "ed25519"):
+ # dsa dropped in 4.0
+ # ed25519 not supported yet
+ self.log("cannot generate %s hostkey: %r" % (aname, ex2), 3)
+ continue
+ self.log("generating hostkey [%s] due to %r" % (fpath, ex))
+ pkey = genfun(**opts)
+ pkey.write_private_key_file(fpath)
+ pkey = getattr(paramiko, aname).from_private_key_file(fpath)
+ self.hostkeys.append(pkey)
+ if args.sftpv:
+ self.log("loaded hostkey %r" % (pkey,))
+
+ ips = list(ODict.fromkeys(ips)) # dedup
+
+ for ip in ips:
+ self._bind(ip)
+
+ self.log("listening on %s port %s" % (self.srv, args.sftp))
+
+ def log(self, msg: str, c: Union[int, str] = 0) -> None:
+ self.hub.log("sftp", msg, c)
+
+ def _bind(self, ip: str) -> None:
+ port = self.args.sftp
+ try:
+ ipv = socket.AF_INET6 if ":" in ip else socket.AF_INET
+ srv = socket.socket(ipv, socket.SOCK_STREAM)
+ if not ANYWIN or self.args.reuseaddr:
+ srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+ srv.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
+ srv.settimeout(0) # == srv.setblocking(False)
+ try:
+ srv.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, False)
+ except:
+ pass # will create another ipv4 socket instead
+ if getattr(self.args, "freebind", False):
+ srv.setsockopt(socket.SOL_IP, socket.IP_FREEBIND, 1)
+ srv.bind((ip, port))
+ srv.listen(10)
+ self.srv.append(srv)
+ self.bound.append(ip)
+ except Exception as ex:
+ if ip == "0.0.0.0" and "::" in self.bound:
+ return # dualstack
+ self.log("could not listen on (%s,%s): %r" % (ip, port, ex), 3)
+
+ def _accept(self, srv: socket.socket) -> None:
+ cli, addr = srv.accept()
+ # cli.settimeout(0) # == srv.setblocking(False)
+ self.log("%r is connecting" % (addr,))
+ zs = "sftp-%s" % (addr[0],)
+ # Daemon(self._accept2, zs, (cli, addr))
+ self._accept2(cli, addr)
+
+ def _accept2(self, cli, addr) -> None:
+ tra = paramiko.Transport(cli)
+ for hkey in self.hostkeys:
+ tra.add_server_key(hkey)
+ tra.set_subsystem_handler("sftp", paramiko.SFTPServer, SFTP_Srv)
+ psrv = SSH_Srv(self.hub, addr)
+ try:
+ tra.start_server(server=psrv)
+ except Exception as ex:
+ self.log("%r could not establish connection: %r" % (addr, ex), 3)
+ cli.close()
+ return
+
+ chan = tra.accept()
+ if chan is None:
+ self.log("%r did not open an sftp channel" % (addr,), 3)
+ cli.close()
+ return
+
+ self.sessions[addr] = (chan, tra, psrv)
+ # tra.join()
+ # self.log("%r disconnected" % (addr,))
+
+ def run(self):
+ lgr = logging.getLogger("paramiko.transport")
+ lgr.setLevel(logging.DEBUG if self.args.sftpvv else logging.INFO)
+
+ if self.args.no_poll:
+ fun = self._run_select
+ else:
+ fun = self._run_poll
+ Daemon(fun, "sftpd")
+
+ def _run_select(self):
+ while not self.hub.stopping:
+ rx, _, _ = select.select(self.srv, [], [], 180)
+ for sck in rx:
+ self._accept(sck)
+
+ def _run_poll(self):
+ fd2sck = {}
+ poll = select.poll()
+ for sck in self.srv:
+ fd = sck.fileno()
+ fd2sck[fd] = sck
+ poll.register(fd, select.POLLIN)
+ while not self.hub.stopping:
+ pr = poll.poll(180 * 1000)
+ rx = [fd2sck[x[0]] for x in pr if x[1] & select.POLLIN]
+ for sck in rx:
+ self._accept(sck)
diff --git a/copyparty/smbd.py b/copyparty/smbd.py
index 3fbc1130..0d48a733 100644
--- a/copyparty/smbd.py
+++ b/copyparty/smbd.py
@@ -246,24 +246,29 @@ class SMB(object):
ap = absreal(ap)
xbu = vfs.flags.get("xbu")
- if xbu and not runhook(
- self.nlog,
- None,
- self.hub.up2k,
- "xbu.smb",
- xbu,
- ap,
- vpath,
- "",
- "",
- "",
- 0,
- 0,
- "1.7.6.2",
- time.time(),
- "",
- ):
- yeet("blocked by xbu server config: %r" % (vpath,))
+ if xbu:
+ hr = runhook(
+ self.nlog,
+ None,
+ self.hub.up2k,
+ "xbu.smb",
+ xbu,
+ ap,
+ vpath,
+ "",
+ "",
+ "",
+ 0,
+ 0,
+ "1.7.6.2",
+ time.time(),
+ None,
+ )
+ t = hr.get("rejectmsg") or ""
+ if t or hr.get("rc") != 0:
+ if not t:
+ t = "blocked by xbu server config: %r" % (vpath,)
+ yeet(t)
ret = bos.open(ap, flags, *a, mode=chmod, **ka)
if wr:
diff --git a/copyparty/stolen/qrcodegen.py b/copyparty/stolen/qrcodegen.py
index 8790e859..937dc88e 100644
--- a/copyparty/stolen/qrcodegen.py
+++ b/copyparty/stolen/qrcodegen.py
@@ -4,7 +4,7 @@
# https://github.com/nayuki/QR-Code-generator/blob/daa3114/python/qrcodegen.py
# the original ^ is extremely well commented so refer to that for explanations
-# hacks: binary-only, auto-ecc, render, py2-compat
+# hacks: binary-only, auto-ecc, py2-compat
from __future__ import print_function, unicode_literals
@@ -173,52 +173,6 @@ class QrCode(object):
self._apply_mask(msk) # Apply the final choice of mask
self._draw_format_bits(msk) # Overwrite old format bits
- def render(self, zoom=1, pad=4) -> str:
- tab = self.modules
- sz = self.size
- if sz % 2 and zoom == 1:
- tab.append([False] * sz)
-
- tab = [[False] * sz] * pad + tab + [[False] * sz] * pad
- tab = [[False] * pad + x + [False] * pad for x in tab]
-
- rows: list[str] = []
- if zoom == 1:
- for y in range(0, len(tab), 2):
- row = ""
- for x in range(len(tab[y])):
- v = 2 if tab[y][x] else 0
- v += 1 if tab[y + 1][x] else 0
- row += " โโโ"[v]
- rows.append(row)
- else:
- for tr in tab:
- row = ""
- for zb in tr:
- row += " โ"[int(zb)] * 2
- rows.append(row)
-
- return "\n".join(rows)
-
- def to_png(self, zoom, pad, bg, fg, ap) -> None:
- from PIL import Image
-
- tab = self.modules
- sz = self.size
- psz = sz + pad * 2
- if bg:
- img = Image.new("RGB", (psz, psz), bg)
- else:
- img = Image.new("RGBA", (psz, psz), (0, 0, 0, 0))
- fg = (fg[0], fg[1], fg[2], 255)
- for y in range(sz):
- for x in range(sz):
- if tab[y][x]:
- img.putpixel((x + pad, y + pad), fg)
- if zoom != 1:
- img = img.resize((sz * zoom, sz * zoom), Image.Resampling.NEAREST)
- img.save(ap)
-
def _draw_function_patterns(self) -> None:
# Draw horizontal and vertical timing patterns
for i in range(self.size):
@@ -613,20 +567,3 @@ def _get_bit(x: int, i: int) -> bool:
class DataTooLongError(ValueError):
pass
-
-
-def qr2svg(qr: QrCode, border: int) -> str:
- parts: list[str] = []
- for y in range(qr.size):
- sy = border + y
- for x in range(qr.size):
- if qr.modules[y][x]:
- parts.append("M%d,%dh1v1h-1z" % (border + x, sy))
- t = """\
-
-
-"""
- return t.format(qr.size + border * 2, " ".join(parts))
diff --git a/copyparty/svchub.py b/copyparty/svchub.py
index 75a269ad..a66848b1 100644
--- a/copyparty/svchub.py
+++ b/copyparty/svchub.py
@@ -27,9 +27,10 @@ if True: # pylint: disable=using-constant-test
from typing import Any, Optional, Union
from .__init__ import ANYWIN, EXE, MACOS, PY2, TYPE_CHECKING, E, EnvParams, unicode
-from .authsrv import BAD_CFG, AuthSrv, n_du_who, n_ver_who
+from .authsrv import BAD_CFG, AuthSrv, derive_args, n_du_who, n_ver_who
from .bos import bos
from .cert import ensure_cert
+from .fsutil import ramdisk_chk
from .mtag import HAVE_FFMPEG, HAVE_FFPROBE, HAVE_MUTAGEN
from .pwhash import HAVE_ARGON2
from .tcpsrv import TcpSrv
@@ -66,6 +67,7 @@ from .util import (
build_netmap,
expat_ver,
gzip,
+ html_escape,
load_ipr,
load_ipu,
lock_file,
@@ -77,6 +79,7 @@ from .util import (
start_stackmon,
termsize,
ub64enc,
+ umktrans,
)
if HAVE_SQLITE3:
@@ -156,7 +159,7 @@ class SvcHub(object):
args.unpost = 0
args.no_del = True
args.no_mv = True
- args.hardlink = True
+ args.reflink = True
args.dav_auth = True
args.vague_403 = True
args.nih = True
@@ -217,6 +220,10 @@ class SvcHub(object):
self.log("root", t.format(args.j), c=3)
args.no_fpool = True
+ args.p_nodav = [int(x.strip()) for x in args.p_nodav.split(",") if x]
+ if args.dav_port and args.dav_port not in args.p:
+ args.p.append(args.dav_port)
+
for name, arg in (
("iobuf", "iobuf"),
("s-rd-sz", "s_rd_sz"),
@@ -246,8 +253,8 @@ class SvcHub(object):
t = "WARNING: --th-ram-max is very small (%.2f GiB); will not be able to %s"
self.log("root", t % (args.th_ram_max, zs), 3)
- if args.chpw and args.have_idp_hdrs:
- t = "ERROR: user-changeable passwords is incompatible with IdP/identity-providers; you must disable either --chpw or --idp-h-usr"
+ if args.chpw and args.have_idp_hdrs and "pw" not in args.auth_ord.split(","):
+ t = "ERROR: user-changeable passwords is not compatible with your current configuration. Choose one of these options to fix it:\n option1: disable --chpw\n option2: remove all use of IdP features; --idp-*\n option3: change --auth-ord to something like pw,idp,ipu"
self.log("root", t, 1)
raise Exception(t)
@@ -289,6 +296,9 @@ class SvcHub(object):
ch = "abcdefghijklmnopqrstuvwx"[int(args.theme / 2)]
args.theme = "{0}{1} {0} {1}".format(ch, bri)
+ if args.no_stack:
+ args.stack_who = "no"
+
if args.nid:
args.du_who = "no"
args.du_iwho = n_du_who(args.du_who)
@@ -310,6 +320,7 @@ class SvcHub(object):
# initiate all services to manage
self.asrv = AuthSrv(self.args, self.log, dargs=self.dargs)
+ ramdisk_chk(self.asrv)
if args.cgen:
self.asrv.cgen()
@@ -389,7 +400,10 @@ class SvcHub(object):
t = "invalid mp3 transcoding quality [%s] specified; only supports [0] to disable, a CBR value such as [192k], or a CQ/CRF value such as [v2]"
raise Exception(t % (args.q_mp3,))
else:
- args.au_unpk = {}
+ zss = set(args.th_r_ffa.split(",") + args.th_r_ffv.split(","))
+ args.au_unpk = {
+ k: v for k, v in args.au_unpk.items() if v.split(".")[0] not in zss
+ }
args.th_poke = min(args.th_poke, args.th_maxage, args.ac_maxage)
@@ -399,6 +413,11 @@ class SvcHub(object):
if not args.http_only:
zms += "D"
+ if args.sftp:
+ from .sftpd import Sftpd
+
+ self.sftpd: Optional[Sftpd] = None
+
if args.ftp or args.ftps:
from .ftpd import Ftpd
@@ -410,7 +429,7 @@ class SvcHub(object):
self.tftpd: Optional[Tftpd] = None
- if args.ftp or args.ftps or args.tftp:
+ if args.sftp or args.ftp or args.ftps or args.tftp:
Daemon(self.start_ftpd, "start_tftpd")
if args.smb:
@@ -737,12 +756,28 @@ class SvcHub(object):
def start_ftpd(self) -> None:
time.sleep(30)
+ if hasattr(self, "sftpd") and not self.sftpd:
+ self.restart_sftpd()
+
if hasattr(self, "ftpd") and not self.ftpd:
self.restart_ftpd()
if hasattr(self, "tftpd") and not self.tftpd:
self.restart_tftpd()
+ def restart_sftpd(self) -> None:
+ if not hasattr(self, "sftpd"):
+ return
+
+ from .sftpd import Sftpd
+
+ if self.sftpd:
+ return # todo
+
+ self.sftpd = Sftpd(self)
+ self.sftpd.run()
+ self.log("root", "started SFTPd")
+
def restart_ftpd(self) -> None:
if not hasattr(self, "ftpd"):
return
@@ -852,6 +887,10 @@ class SvcHub(object):
if w8:
time.sleep(w8)
self.log("qr-code", qr)
+ if self.args.qr_stdout:
+ self.pr(self.tcpsrv.qr)
+ if self.args.qr_stderr:
+ self.pr(self.tcpsrv.qr, file=sys.stderr)
w8 = self.args.qr_every
msg = "%s\033[%dA" % (qr, len(qr.split("\n")))
while w8:
@@ -875,9 +914,9 @@ class SvcHub(object):
return
ar = self.args
- for _ in range(10 if ar.ftp or ar.ftps else 0):
+ for _ in range(10 if ar.sftp or ar.ftp or ar.ftps else 0):
time.sleep(0.03)
- if self.ftpd:
+ if self.ftpd if ar.ftp or ar.ftps else ar.sftp:
break
if self.tcpsrv.qr:
@@ -885,8 +924,13 @@ class SvcHub(object):
self.sticky_qr()
if self.args.qr_wait or self.args.qr_every or self.args.qr_winch:
Daemon(self._qr_thr, "qr")
- elif not self.args.qr_pin:
- self.log("qr-code", self.tcpsrv.qr)
+ else:
+ if not self.args.qr_pin:
+ self.log("qr-code", self.tcpsrv.qr)
+ if self.args.qr_stdout:
+ self.pr(self.tcpsrv.qr)
+ if self.args.qr_stderr:
+ self.pr(self.tcpsrv.qr, file=sys.stderr)
else:
self.log("root", "workers OK\n")
@@ -1063,13 +1107,13 @@ class SvcHub(object):
vs = os.path.expandvars(os.path.expanduser(vs))
setattr(al, k, vs)
- for k in "idp_adm".split(" "):
+ for k in "idp_adm stats_u".split(" "):
vs = getattr(al, k)
vsa = [x.strip() for x in vs.split(",")]
vsa = [x.lower() for x in vsa if x]
setattr(al, k + "_set", set(vsa))
- zs = "dav_ua1 sus_urls nonsus_urls ua_nodoc ua_nozip"
+ zs = "dav_ua1 sus_urls nonsus_urls ua_nodav ua_nodoc ua_nozip"
for k in zs.split(" "):
vs = getattr(al, k)
if not vs or vs == "no":
@@ -1084,6 +1128,12 @@ class SvcHub(object):
else:
setattr(al, k, re.compile("^" + vs + "$"))
+ if al.banmsg.startswith("@"):
+ with open(al.banmsg[1:], "rb") as f:
+ al.banmsg_b = f.read()
+ else:
+ al.banmsg_b = al.banmsg.encode("utf-8") + b"\n"
+
if not al.sus_urls:
al.ban_url = "no"
elif al.ban_url == "no":
@@ -1107,8 +1157,25 @@ class SvcHub(object):
except:
raise Exception("invalid --idp-hm-usr [%s]" % (zs0,))
- al.ftp_ipa_nm = build_netmap(al.ftp_ipa or al.ipa, True)
- al.tftp_ipa_nm = build_netmap(al.tftp_ipa or al.ipa, True)
+ zs1 = ""
+ zs2 = ""
+ zs = al.idp_chsub
+ while zs:
+ if zs[:1] != "|":
+ raise Exception("invalid --idp-chsub; expected another | but got " + zs)
+ zs1 += zs[1:2]
+ zs2 += zs[2:3]
+ zs = zs[3:]
+ al.idp_chsub_tr = umktrans(zs1, zs2)
+
+ al.sftp_ipa_nm = build_netmap(al.sftp_ipa or al.ipa or al.ipar, True)
+ al.ftp_ipa_nm = build_netmap(al.ftp_ipa or al.ipa or al.ipar, True)
+ al.tftp_ipa_nm = build_netmap(al.tftp_ipa or al.ipa or al.ipar, True)
+
+ al.sftp_key2u = {
+ "%s %s" % (x[1], x[2]): x[0]
+ for x in [x.split(" ") for x in al.sftp_key or []]
+ }
mte = ODict.fromkeys(DEF_MTE.split(","), True)
al.mte = odfusion(mte, al.mte)
@@ -1157,6 +1224,13 @@ class SvcHub(object):
if len(al.tcolor) == 3: # fc5 => ffcc55
al.tcolor = "".join([x * 2 for x in al.tcolor])
+ if self.args.name_url:
+ zs = html_escape(self.args.name_url, True, True)
+ zs = '%s' % (zs, self.args.name)
+ else:
+ zs = self.args.name
+ self.args.name_html = zs
+
zs = al.u2sz
zsl = [x.strip() for x in zs.split(",")]
if len(zsl) not in (1, 3):
@@ -1175,6 +1249,7 @@ class SvcHub(object):
zi2 = zi
al.u2sz = ",".join(zsl)
+ derive_args(al)
return True
def _ipa2re(self, txt) -> Optional[re.Pattern]:
@@ -1350,6 +1425,7 @@ class SvcHub(object):
with self.reload_mutex:
self.log("root", "reloading config")
self.asrv.reload(9 if up2k else 4)
+ ramdisk_chk(self.asrv)
if up2k:
self.up2k.reload(rescan_all_vols)
t += "; volumes are now reinitializing"
@@ -1525,6 +1601,9 @@ class SvcHub(object):
with self.log_mutex:
dt = datetime.now(self.tz)
if dt.day != self.cday or dt.month != self.cmon:
+ if self.args.log_date:
+ zs = dt.strftime(self.args.log_date)
+ self.log_efmt = "%s %s" % (zs, self.log_efmt.split(" ")[-1])
zs = "{}\n" if self.no_ansi else "\033[36m{}\033[0m\n"
zs = zs.format(dt.strftime("%Y-%m-%d"))
print(zs, end="")
diff --git a/copyparty/szip.py b/copyparty/szip.py
index 91fa2a34..12caf91f 100644
--- a/copyparty/szip.py
+++ b/copyparty/szip.py
@@ -8,7 +8,7 @@ import time
from .authsrv import AuthSrv
from .bos import bos
from .sutil import StreamArc, errdesc
-from .util import min_ex, sanitize_fn, spack, sunpack, yieldfile, zlib
+from .util import VPTL_WIN, min_ex, sanitize_to, spack, sunpack, yieldfile, zlib
if True: # pylint: disable=using-constant-test
from typing import Any, Generator, Optional
@@ -104,7 +104,7 @@ def gen_hdr(
ret += spack(b" dict[str, Netdev]:
- from .stolen.ifaddr import get_adapters
-
listen_ips = [x for x in listen_ips if not x.startswith(("unix:", "fd:"))]
nics = get_adapters(True)
@@ -625,7 +630,7 @@ class TcpSrv(object):
pad = self.args.qrp
zoom = self.args.qrz
- qrc = QrCode.encode_binary(btxt)
+ qrc = qrgen(btxt)
for zs in self.args.qr_file or []:
self._qr2file(qrc, zs)
@@ -638,7 +643,7 @@ class TcpSrv(object):
except:
zoom = 1
- qr = qrc.render(zoom, pad)
+ qr = qr2txt(qrc, zoom, pad)
if self.args.no_ansi:
return "{}\n{}".format(txt, qr)
@@ -679,12 +684,12 @@ class TcpSrv(object):
if zoom not in (1, 2):
raise Exception("invalid zoom for qr.txt; must be 1 or 2")
with open(ap, "wb") as f:
- f.write(qrc.render(zoom, pad).encode("utf-8"))
+ f.write(qr2txt(qrc, zoom, pad).encode("utf-8"))
elif ap.endswith(".svg"):
with open(ap, "wb") as f:
f.write(qr2svg(qrc, pad).encode("utf-8"))
else:
- qrc.to_png(zoom, pad, self._h2i(bg), self._h2i(fg), ap)
+ qr2png(qrc, zoom, pad, self._h2i(bg), self._h2i(fg), ap)
def _h2i(self, hs):
try:
diff --git a/copyparty/tftpd.py b/copyparty/tftpd.py
index 4ef01103..e1f75c8b 100644
--- a/copyparty/tftpd.py
+++ b/copyparty/tftpd.py
@@ -363,24 +363,29 @@ class Tftpd(object):
yeet("blocked write; folder not world-deletable: /%s" % (vpath,))
xbu = vfs.flags.get("xbu")
- if xbu and not runhook(
- self.nlog,
- None,
- self.hub.up2k,
- "xbu.tftpd",
- xbu,
- ap,
- vpath,
- "",
- "",
- "",
- 0,
- 0,
- "8.3.8.7",
- time.time(),
- "",
- ):
- yeet("blocked by xbu server config: %r" % (vpath,))
+ if xbu:
+ hr = runhook(
+ self.nlog,
+ None,
+ self.hub.up2k,
+ "xbu.tftpd",
+ xbu,
+ ap,
+ vpath,
+ "",
+ "",
+ "",
+ 0,
+ 0,
+ "8.3.8.7",
+ time.time(),
+ None,
+ )
+ t = hr.get("rejectmsg") or ""
+ if t or hr.get("rc") != 0:
+ if not t:
+ t = "upload blocked by xbu server config: %r" % (vpath,)
+ yeet(t)
if not self.args.tftp_nols and bos.path.isdir(ap):
return self._ls(vpath, "", 0, True)
diff --git a/copyparty/th_srv.py b/copyparty/th_srv.py
index 86c3c469..84906dfc 100644
--- a/copyparty/th_srv.py
+++ b/copyparty/th_srv.py
@@ -14,7 +14,7 @@ import time
from queue import Queue
-from .__init__ import ANYWIN, PY2, TYPE_CHECKING
+from .__init__ import ANYWIN, PY2, TYPE_CHECKING, unicode
from .authsrv import VFS
from .bos import bos
from .mtag import HAVE_FFMPEG, HAVE_FFPROBE, au_unpk, ffprobe
@@ -56,6 +56,56 @@ EXTS_SPEC_SAFE = set("aif aiff flac mp3 opus wav".split())
PTN_TS = re.compile("^-?[0-9a-f]{8,10}$")
+# for n in {1..100}; do rm -rf /home/ed/Pictures/wp/.hist/th/ ; python3 -m copyparty -qv /home/ed/Pictures/wp/::r --th-no-webp --th-qv $n --th-dec pil >/dev/null 2>&1 & p=$!; printf '\033[A\033[J%3d ' $n; while true; do sleep 0.1; curl -s 127.1:3923 >/dev/null && break; done; curl -s '127.1:3923/?tar=j' >/dev/null ; cat /home/ed/Pictures/wp/.hist/th/1n/bs/1nBsjDetfie1iDq3y2D4YzF5/*.* | wc -c; kill $p; wait >/dev/null 2>&1; done
+# filesize-equivalent, not quality (ff looks much shittier)
+FF_JPG_Q = {
+ 0: b"30", # 0
+ 1: b"30", # 5
+ 2: b"30", # 10
+ 3: b"30", # 15
+ 4: b"28", # 20
+ 5: b"21", # 25
+ 6: b"17", # 30
+ 7: b"15", # 35
+ 8: b"13", # 40
+ 9: b"12", # 45
+ 10: b"11", # 50
+ 11: b"10", # 55
+ 12: b"9", # 60
+ 13: b"8", # 65
+ 14: b"7", # 70
+ 15: b"6", # 75
+ 16: b"5", # 80
+ 17: b"4", # 85
+ 18: b"3", # 90
+ 19: b"2", # 95
+ 20: b"2", # 100
+}
+# FF_JPG_Q = {xn: ("%d" % (xn,)).encode("ascii") for xn in range(2, 33)}
+VIPS_JPG_Q = {
+ 0: 4, # 0
+ 1: 7, # 5
+ 2: 12, # 10
+ 3: 17, # 15
+ 4: 22, # 20
+ 5: 27, # 25
+ 6: 32, # 30
+ 7: 37, # 35
+ 8: 42, # 40
+ 9: 47, # 45
+ 10: 52, # 50
+ 11: 56, # 55
+ 12: 61, # 60
+ 13: 66, # 65
+ 14: 71, # 70
+ 15: 75, # 75
+ 16: 80, # 80
+ 17: 85, # 85
+ 18: 89, # 90 (vips explodes past this point)
+ 19: 91, # 95
+ 20: 97, # 100
+}
+
try:
if os.environ.get("PRTY_NO_PIL"):
@@ -270,6 +320,9 @@ class ThumbSrv(object):
def shutdown(self) -> None:
self.stopping = True
+ Daemon(self._fire_sentinels, "thumbstopper")
+
+ def _fire_sentinels(self):
for _ in range(self.nthr):
self.q.put(None)
@@ -305,6 +358,7 @@ class ThumbSrv(object):
if not bos.path.exists(inf_path):
with open(inf_path, "wb") as f:
f.write(afsenc(os.path.dirname(abspath)))
+ self.writevolcfg(histpath)
self.busy[tpath] = [cond]
do_conv = True
@@ -348,6 +402,47 @@ class ThumbSrv(object):
"ffa": self.fmt_ffa,
}
+ def volcfgi(self, vn: VFS) -> str:
+ ret = []
+ zs = "th_dec th_no_webp th_no_jpg"
+ for zs in zs.split(" "):
+ ret.append("%s(%s)\n" % (zs, getattr(self.args, zs)))
+ zs = "th_qv thsize th_spec_p convt"
+ for zs in zs.split(" "):
+ ret.append("%s(%s)\n" % (zs, vn.flags.get(zs)))
+ return "".join(ret)
+
+ def volcfga(self, vn: VFS) -> str:
+ ret = []
+ zs = "q_opus q_mp3"
+ for zs in zs.split(" "):
+ ret.append("%s(%s)\n" % (zs, getattr(self.args, zs)))
+ zs = "aconvt"
+ for zs in zs.split(" "):
+ ret.append("%s(%s)\n" % (zs, vn.flags.get(zs)))
+ return "".join(ret)
+
+ def writevolcfg(self, histpath: str) -> None:
+ try:
+ bos.stat(os.path.join(histpath, "th", "cfg.txt"))
+ bos.stat(os.path.join(histpath, "ac", "cfg.txt"))
+ return
+ except:
+ pass
+ cfgi = cfga = ""
+ for vn in self.asrv.vfs.all_vols.values():
+ if vn.histpath == histpath:
+ cfgi = self.volcfgi(vn)
+ cfga = self.volcfga(vn)
+ break
+ t = "writing thumbnailer-config %d,%d to %s"
+ self.log(t % (len(cfgi), len(cfga), histpath))
+ chmod = bos.MKD_700 if self.args.free_umask else bos.MKD_755
+ for cfg, cat in ((cfgi, "th"), (cfga, "ac")):
+ bos.makedirs(os.path.join(histpath, cat), vf=chmod)
+ with open(os.path.join(histpath, cat, "cfg.txt"), "wb") as f:
+ f.write(cfg.encode("utf-8"))
+
def wait4ram(self, need: float, ttpath: str) -> None:
ram = self.args.th_ram_max
if need > ram * 0.99:
@@ -381,7 +476,7 @@ class ThumbSrv(object):
else:
ap_unpk = abspath
- if not bos.path.exists(tpath):
+ if ap_unpk and not bos.path.exists(tpath):
tex = tpath.rsplit(".", 1)[-1]
want_mp3 = tex == "mp3"
want_opus = tex in ("opus", "owa", "caf")
@@ -424,12 +519,14 @@ class ThumbSrv(object):
except:
pass
+ conv_ok = False
for fun in funs:
try:
if not png_ok and tpath.endswith(".png"):
raise Exception("png only allowed for waveforms")
fun(ap_unpk, ttpath, fmt, vn)
+ conv_ok = True
break
except Exception as ex:
msg = "%s could not create thumbnail of %r\n%s"
@@ -451,16 +548,20 @@ class ThumbSrv(object):
except:
pass
- if abspath != ap_unpk:
+ if abspath != ap_unpk and ap_unpk:
wunlink(self.log, ap_unpk, vn.flags)
try:
atomic_move(self.log, ttpath, tpath, vn.flags)
except Exception as ex:
- if not os.path.exists(tpath):
+ if conv_ok and not os.path.exists(tpath):
t = "failed to move [%s] to [%s]: %r"
self.log(t % (ttpath, tpath, ex), 3)
- pass
+ elif not conv_ok:
+ try:
+ open(tpath, "ab").close()
+ except:
+ pass
untemp = []
with self.mutex:
@@ -520,7 +621,7 @@ class ThumbSrv(object):
im.thumbnail(self.getres(vn, fmt))
fmts = ["RGB", "L"]
- args = {"quality": 40}
+ args = {"quality": vn.flags["th_qv"]}
if tpath.endswith(".webp"):
# quality 80 = pillow-default
@@ -564,7 +665,12 @@ class ThumbSrv(object):
raise
assert img # type: ignore # !rm
- img.write_to_file(tpath, Q=40)
+ args = {}
+ qv = vn.flags["th_qv"]
+ if tpath.endswith("jpg"):
+ qv = VIPS_JPG_Q[qv // 5]
+ args["optimize_coding"] = True
+ img.write_to_file(tpath, Q=qv, strip=True, **args)
def conv_raw(self, abspath: str, tpath: str, fmt: str, vn: VFS) -> None:
self.wait4ram(0.2, tpath)
@@ -598,7 +704,12 @@ class ThumbSrv(object):
raise
assert img # type: ignore # !rm
- img.write_to_file(tpath, Q=40)
+ args = {}
+ qv = vn.flags["th_qv"]
+ if tpath.endswith("jpg"):
+ qv = VIPS_JPG_Q[qv // 5]
+ args["optimize_coding"] = True
+ img.write_to_file(tpath, Q=qv, strip=True, **args)
elif HAVE_PIL:
if thumb.format == rawpy.ThumbFormat.BITMAP:
im = Image.fromarray(thumb.data, "RGB")
@@ -662,12 +773,12 @@ class ThumbSrv(object):
if tpath.endswith(".jpg"):
cmd += [
b"-q:v",
- b"6", # default=??
+ FF_JPG_Q[vn.flags["th_qv"] // 5], # default=??
]
else:
cmd += [
b"-q:v",
- b"50", # default=75
+ unicode(vn.flags["th_qv"]).encode("ascii"), # default=75
b"-compression_level:v",
b"6", # default=4, 0=fast, 6=max
]
@@ -682,7 +793,7 @@ class ThumbSrv(object):
return
c: Union[str, int] = "90"
- t = "FFmpeg failed (probably a corrupt video file):\n"
+ t = "FFmpeg failed (probably a corrupt file):\n"
if (
(not self.args.th_ff_jpg or time.time() - int(self.args.th_ff_jpg) < 60)
and cmd[-1].lower().endswith(b".webp")
@@ -713,7 +824,7 @@ class ThumbSrv(object):
if len(lines) > 50:
lines = lines[:25] + ["[...]"] + lines[-25:]
- txt = "\n".join(["ff: " + str(x) for x in lines])
+ txt = "\n".join(["ff: " + unicode(x) for x in lines])
if len(txt) > 5000:
txt = txt[:2500] + "...\nff: [...]\nff: ..." + txt[-2500:]
@@ -871,12 +982,12 @@ class ThumbSrv(object):
if tpath.endswith(".jpg"):
cmd += [
b"-q:v",
- b"6", # default=??
+ FF_JPG_Q[vn.flags["th_qv"] // 5], # default=??
]
else:
cmd += [
b"-q:v",
- b"50", # default=75
+ unicode(vn.flags["th_qv"]).encode("ascii"), # default=75
b"-compression_level:v",
b"6", # default=4, 0=fast, 6=max
]
@@ -1134,7 +1245,7 @@ class ThumbSrv(object):
ret = []
for k, vs in raw_tags.items():
for v in vs:
- if len(str(v)) >= 1024:
+ if len(unicode(v)) >= 1024:
bv = k.encode("utf-8", "replace")
ret += [b"-metadata", bv + b"="]
break
@@ -1172,6 +1283,28 @@ class ThumbSrv(object):
time.sleep(interval)
def clean(self, histpath: str) -> int:
+ cfgi = cfga = ""
+ for vn in self.asrv.vfs.all_vols.values():
+ if vn.histpath == histpath:
+ cfgi = self.volcfgi(vn)
+ cfga = self.volcfga(vn)
+ break
+ for cfg, cat in ((cfgi, "th"), (cfga, "ac")):
+ if not cfg:
+ continue
+ try:
+ with open(os.path.join(histpath, cat, "cfg.txt"), "rb") as f:
+ oldcfg = f.read().decode("utf-8")
+ except:
+ oldcfg = ""
+ if cfg == oldcfg:
+ continue
+ zs = os.path.join(histpath, cat)
+ if not os.path.exists(zs):
+ continue
+ self.log("thumbnailer-config changed; deleting %s" % (zs,), 3)
+ shutil.rmtree(zs)
+
ret = 0
for cat in ["th", "ac"]:
top = os.path.join(histpath, cat)
@@ -1230,7 +1363,7 @@ class ThumbSrv(object):
if len(b64) != 24 or len(ts) != 8 or ext not in exts:
raise Exception()
except:
- if f != "dir.txt":
+ if f != "dir.txt" and f != "cfg.txt":
self.log("foreign file in thumbs dir: [{}]".format(fp), 1)
continue
diff --git a/copyparty/u2idx.py b/copyparty/u2idx.py
index 45b479c5..ca1014d1 100644
--- a/copyparty/u2idx.py
+++ b/copyparty/u2idx.py
@@ -53,6 +53,11 @@ class U2idx(object):
self.log("your python does not have sqlite3; searching will be disabled")
return
+ if self.args.srch_icase:
+ self._open_db = self._open_db_icase
+ else:
+ self._open_db = self._open_db_std
+
assert sqlite3 # type: ignore # !rm
self.active_id = ""
@@ -69,6 +74,16 @@ class U2idx(object):
def log(self, msg: str, c: Union[int, str] = 0) -> None:
self.log_func("u2idx", msg, c)
+ def _open_db_std(self, *args, **kwargs):
+ assert sqlite3 # type: ignore # !rm
+ kwargs["check_same_thread"] = False
+ return sqlite3.connect(*args, **kwargs)
+
+ def _open_db_icase(self, *args, **kwargs):
+ db = self._open_db_std(*args, **kwargs)
+ db.create_function("casefold", 1, lambda x: x.casefold() if x else x)
+ return db
+
def shutdown(self) -> None:
if not HAVE_SQLITE3:
return
@@ -148,8 +163,7 @@ class U2idx(object):
uri = ""
try:
uri = "{}?mode=ro&nolock=1".format(Path(db_path).as_uri())
- db = sqlite3.connect(uri, timeout=2, uri=True, check_same_thread=False)
- cur = db.cursor()
+ cur = self._open_db(uri, timeout=2, uri=True).cursor()
cur.execute('pragma table_info("up")').fetchone()
self.log("ro: %r" % (db_path,))
except:
@@ -160,7 +174,7 @@ class U2idx(object):
if not cur:
# on windows, this steals the write-lock from up2k.deferred_init --
# seen on win 10.0.17763.2686, py 3.10.4, sqlite 3.37.2
- cur = sqlite3.connect(db_path, timeout=2, check_same_thread=False).cursor()
+ cur = self._open_db(db_path, timeout=2).cursor()
self.log("opened %r" % (db_path,))
self.cur[ptop] = cur
@@ -173,6 +187,8 @@ class U2idx(object):
if not HAVE_SQLITE3:
return [], [], False
+ icase = self.args.srch_icase
+
q = ""
v: Union[str, int] = ""
va: list[Union[str, int]] = []
@@ -180,6 +196,7 @@ class U2idx(object):
is_key = True
is_size = False
is_date = False
+ is_wark = False
field_end = "" # closing parenthesis or whatever
kw_key = ["(", ")", "and ", "or ", "not "]
kw_val = ["==", "=", "!=", ">", ">=", "<", "<=", "like "]
@@ -198,6 +215,8 @@ class U2idx(object):
is_key = kw in kw_key
uq = uq[len(kw) :]
ok = True
+ if is_wark:
+ kw = "= "
q += kw
break
@@ -232,9 +251,17 @@ class U2idx(object):
elif v == "path":
v = "trim(?||up.rd,'/')"
va.append("\nrd")
+ if icase:
+ v = "casefold(%s)" % (v,)
elif v == "name":
v = "up.fn"
+ if icase:
+ v = "casefold(%s)" % (v,)
+
+ elif v == "w":
+ v = "substr(up.w,1,16)"
+ is_wark = True
elif v == "tags" or ptn_mt.match(v):
have_mt = True
@@ -247,7 +274,7 @@ class U2idx(object):
v = "exists(select 1 from mt where mt.w = mtw and " + vq
else:
- raise Pebkac(400, "invalid key [{}]".format(v))
+ raise Pebkac(400, "invalid key %r" % (v,))
q += v + " "
continue
@@ -276,6 +303,14 @@ class U2idx(object):
is_size = False
v = int(float(v) * 1024 * 1024)
+ elif is_wark:
+ is_wark = False
+ v = v.strip("*")
+ if len(v) > 16:
+ v = v[:16]
+ if len(v) < 16:
+ raise Pebkac(400, "w/filehash must be 16+ chars")
+
else:
if v.startswith("*"):
head = "'%'||"
@@ -285,6 +320,12 @@ class U2idx(object):
tail = "||'%'"
v = v[:-1]
+ if icase and "casefold(" in q:
+ try:
+ v = unicode(v).casefold()
+ except:
+ v = unicode(v).lower()
+
q += " {}?{} ".format(head, tail)
va.append(v)
is_key = True
@@ -319,7 +360,7 @@ class U2idx(object):
uname: str,
vols: list[VFS],
uq: str,
- uv: list[Union[str, int]],
+ uv: Union[list[str], list[Union[str, int]]],
have_mt: bool,
sort: bool,
lim: int,
diff --git a/copyparty/up2k.py b/copyparty/up2k.py
index 3acf3918..079001ee 100644
--- a/copyparty/up2k.py
+++ b/copyparty/up2k.py
@@ -10,6 +10,7 @@ import re
import shutil
import stat
import subprocess as sp
+import sys
import tempfile
import threading
import time
@@ -18,13 +19,16 @@ from copy import deepcopy
from queue import Queue
-from .__init__ import ANYWIN, PY2, TYPE_CHECKING, WINDOWS, E
+from .__init__ import ANYWIN, MACOS, PY2, TYPE_CHECKING, WINDOWS, E
from .authsrv import LEELOO_DALLAS, SEESLOG, VFS, AuthSrv
from .bos import bos
from .cfg import vf_bmap, vf_cmap, vf_vmap
from .fsutil import Fstab
from .mtag import MParser, MTag
from .util import (
+ E_FS_CRIT,
+ E_FS_MEH,
+ HAVE_FICLONE,
HAVE_SQLITE3,
SYMTIME,
VF_CAREFUL,
@@ -60,6 +64,7 @@ from .util import (
sfsenc,
spack,
statdir,
+ trystat_shutil_copy2,
ub64enc,
unhumanize,
vjoin,
@@ -85,13 +90,17 @@ if True: # pylint: disable=using-constant-test
if TYPE_CHECKING:
from .svchub import SvcHub
+USE_FICLONE = HAVE_FICLONE and sys.version_info < (3, 14)
+if USE_FICLONE:
+ import fcntl
+
zsg = "avif,avifs,bmp,gif,heic,heics,heif,heifs,ico,j2p,j2k,jp2,jpeg,jpg,jpx,png,tga,tif,tiff,webp"
ICV_EXTS = set(zsg.split(","))
zsg = "3gp,asf,av1,avc,avi,flv,m4v,mjpeg,mjpg,mkv,mov,mp4,mpeg,mpeg2,mpegts,mpg,mpg2,mts,nut,ogm,ogv,rm,vob,webm,wmv"
VCV_EXTS = set(zsg.split(","))
-zsg = "aif,aiff,alac,ape,flac,m4a,mp3,oga,ogg,opus,tak,tta,wav,wma,wv"
+zsg = "aif,aiff,alac,ape,flac,m4a,mp3,oga,ogg,opus,tak,tta,wav,wma,wv,cbz,epub"
ACV_EXTS = set(zsg.split(","))
zsg = "nohash noidx xdev xvol"
@@ -212,7 +221,7 @@ class Up2k(object):
t = "could not initialize sqlite3, will use in-memory registry only"
self.log(t, 3)
- self.fstab = Fstab(self.log_func, self.args)
+ self.fstab = Fstab(self.log_func, self.args, True)
self.gen_fk = self._gen_fk if self.args.log_fk else gen_filekey
if self.args.hash_mt < 2:
@@ -1139,7 +1148,7 @@ class Up2k(object):
ft = "\033[0;32m{}{:.0}"
ff = "\033[0;35m{}{:.0}"
fv = "\033[0;36m{}:\033[90m{}"
- zs = "du_iwho ext_th_d html_head put_name2 mv_re_r mv_re_t rm_re_r rm_re_t srch_re_dots srch_re_nodot zipmax zipmaxn_v zipmaxs_v"
+ zs = "bcasechk du_iwho emb_lgs emb_mds ext_th_d html_head html_head_d html_head_s ls_q_m put_name2 mv_re_r mv_re_t rm_re_r rm_re_t srch_re_dots srch_re_nodot zipmax zipmaxn_v zipmaxs_v"
fx = set(zs.split())
fd = vf_bmap()
fd.update(vf_cmap())
@@ -1498,6 +1507,7 @@ class Up2k(object):
th_cvd = self.args.th_coversd
th_cvds = self.args.th_coversd_set
+ scan_pr_s = self.args.scan_pr_s
assert self.pp and self.mem_cur # !rm
self.pp.msg = "a%d %s" % (self.pp.n, cdir)
@@ -1710,7 +1720,7 @@ class Up2k(object):
if nohash or not sz:
wark = up2k_wark_from_metadata(self.salt, sz, lmod, rd, fn)
else:
- if sz > 1024 * 1024:
+ if sz > 1024 * 1024 * scan_pr_s:
self.log("file: %r" % (abspath,))
try:
@@ -1718,7 +1728,7 @@ class Up2k(object):
abspath, "a{}, ".format(self.pp.n)
)
except Exception as ex:
- self.log("hash: %r @ %r" % (ex, abspath))
+ self._ex_hash(ex, abspath)
continue
if not hashes:
@@ -1979,7 +1989,7 @@ class Up2k(object):
try:
hashes, _ = self._hashlist_from_file(abspath, pf)
except Exception as ex:
- self.log("hash: %r @ %r" % (ex, abspath))
+ self._ex_hash(ex, abspath)
continue
if not hashes:
@@ -2768,7 +2778,7 @@ class Up2k(object):
cur.close()
db.close()
- shutil.copy2(fsenc(db_path), fsenc(bak))
+ trystat_shutil_copy2(self.log, fsenc(db_path), fsenc(bak))
return self._orz(db_path)
def _read_ver(self, cur: "sqlite3.Cursor") -> Optional[int]:
@@ -3005,7 +3015,7 @@ class Up2k(object):
# check if filesystem supports sparse files;
# refuse out-of-order / multithreaded uploading if sprs False
- sprs = self.fstab.get(pdir) != "ng"
+ sprs = self.fstab.get(pdir)[0] != "ng"
if True:
jcur = self.cur.get(ptop)
@@ -3294,10 +3304,13 @@ class Up2k(object):
job["size"],
job["addr"],
job["at"],
- "",
+ None,
)
- if not hr:
- t = "upload blocked by xbu server config: %r" % (dst,)
+ t = hr.get("rejectmsg") or ""
+ if t or hr.get("rc") != 0:
+ if not t:
+ t = "upload blocked by xbu server config: %r"
+ t = t % (vp,)
self.log(t, 1)
raise Pebkac(403, t)
if hr.get("reloc"):
@@ -3310,7 +3323,7 @@ class Up2k(object):
job["ptop"] = vfs.realpath
job["vtop"] = vfs.vpath
job["prel"] = rem
- job["name"] = sanitize_fn(job["name"], "")
+ job["name"] = sanitize_fn(job["name"])
ud2 = (vfs.vpath, job["prel"], job["name"])
if ud1 != ud2:
# print(json.dumps(job, sort_keys=True, indent=4))
@@ -3455,7 +3468,15 @@ class Up2k(object):
fp = djoin(fdir, fname)
ow = job.get("replace") and bos.path.exists(fp)
- if ow and "mt" in str(job["replace"]).lower():
+ if ow:
+ replace_arg = str(job["replace"]).lower()
+
+ if ow and "skip" in replace_arg: # type: ignore
+ self.log("skipping upload, filename already exists: %r" % fp)
+ err = "upload rejected, a file with that name already exists"
+ raise Pebkac(409, err)
+
+ if ow and "mt" in replace_arg: # type: ignore
mts = bos.stat(fp).st_mtime
mtc = job["lmod"]
if mtc < mts:
@@ -3523,11 +3544,26 @@ class Up2k(object):
linked = False
try:
- if "reflink" in flags:
- raise Exception("reflink")
+ if rm and bos.path.exists(dst):
+ wunlink(self.log, dst, flags)
+
if not is_mv and not flags.get("dedup"):
raise Exception("dedup is disabled in config")
+ if "reflink" in flags:
+ if not USE_FICLONE:
+ raise Exception("reflink") # python 3.14 or newer; no need
+ try:
+ with open(fsenc(src), "rb") as fi, open(fsenc(dst), "wb") as fo:
+ fcntl.ioctl(fo.fileno(), fcntl.FICLONE, fi.fileno())
+ except:
+ if bos.path.exists(dst):
+ wunlink(self.log, dst, flags)
+ raise
+ if lmod:
+ bos.utime_c(self.log, dst, int(lmod), False)
+ return
+
lsrc = src
ldst = dst
fs1 = bos.stat(os.path.dirname(src)).st_dev
@@ -3554,9 +3590,6 @@ class Up2k(object):
lsrc = lsrc.replace("/", "\\")
ldst = ldst.replace("/", "\\")
- if rm and bos.path.exists(dst):
- wunlink(self.log, dst, flags)
-
try:
if "hardlink" in flags:
os.link(fsenc(absreal(src)), fsenc(dst))
@@ -3591,7 +3624,7 @@ class Up2k(object):
t = "BUG: no valid sources to link from! orig(%r) fsrc(%r) link(%r)"
self.log(t, 1)
raise Exception(t % (src, fsrc, dst))
- shutil.copy2(fsenc(csrc), fsenc(dst))
+ trystat_shutil_copy2(self.log, fsenc(csrc), fsenc(dst))
if lmod and (not linked or SYMTIME):
bos.utime_c(self.log, dst, int(lmod), False)
@@ -3677,14 +3710,15 @@ class Up2k(object):
t = t.format(job["name"], nchunks[0][0], coffsets[0][0], cur_sz)
raise Pebkac(400, t)
- job["busy"][chash] = 1
+ for chash in chashes:
+ job["busy"][chash] = 1
job["poke"] = time.time()
return chashes, chunksize, coffsets, path, job["lmod"], job["size"], job["sprs"]
def fast_confirm_chunks(
- self, ptop: str, wark: str, chashes: list[str]
+ self, ptop: str, wark: str, chashes: list[str], locked: list[str]
) -> tuple[int, str]:
if not self.mutex.acquire(False):
return -1, ""
@@ -3692,7 +3726,7 @@ class Up2k(object):
self.mutex.release()
return -1, ""
try:
- return self._confirm_chunks(ptop, wark, chashes, chashes)
+ return self._confirm_chunks(ptop, wark, chashes, locked, False)
finally:
self.reg_mutex.release()
self.mutex.release()
@@ -3701,10 +3735,10 @@ class Up2k(object):
self, ptop: str, wark: str, written: list[str], locked: list[str]
) -> tuple[int, str]:
with self.mutex, self.reg_mutex:
- return self._confirm_chunks(ptop, wark, written, locked)
+ return self._confirm_chunks(ptop, wark, written, locked, True)
def _confirm_chunks(
- self, ptop: str, wark: str, written: list[str], locked: list[str]
+ self, ptop: str, wark: str, written: list[str], locked: list[str], final: bool
) -> tuple[int, str]:
if True:
self.db_act = self.vol_act[ptop] = time.time()
@@ -3716,14 +3750,16 @@ class Up2k(object):
except Exception as ex:
return -2, "confirm_chunk, wark(%r)" % (ex,) # type: ignore
- for chash in locked:
+ for chash in locked if final else written:
job["busy"].pop(chash, None)
try:
for chash in written:
job["need"].remove(chash)
except Exception as ex:
- # dead tcp connections can get here by timeout (OK)
+ for zs in locked:
+ if job["busy"].pop(zs, None):
+ self.log("panic-unlock wark(%s) chunk(%s)" % (wark, zs), 1)
return -2, "confirm_chunk, chash(%s) %r" % (chash, ex) # type: ignore
ret = len(job["need"])
@@ -3972,10 +4008,13 @@ class Up2k(object):
sz,
ip,
at or time.time(),
- "",
+ None,
)
- if not hr:
- t = "upload blocked by xau server config"
+ t = hr.get("rejectmsg") or ""
+ if t or hr.get("rc") != 0:
+ if not t:
+ t = "upload blocked by xau server config: %r"
+ t = t % (djoin(vtop, rd, fn),)
self.log(t, 1)
wunlink(self.log, dst, vflags)
self.registry[ptop].pop(wark, None)
@@ -4145,6 +4184,9 @@ class Up2k(object):
except:
raise Pebkac(400, "file not found on disk (already deleted?)")
+ if "bcasechk" in vn.flags and not vn.casechk(rem, False):
+ raise Pebkac(400, "file does not exist case-sensitively")
+
scandir = not self.args.no_scandir
if is_dir:
# note: deletion inside shares would require a rewrite here;
@@ -4187,7 +4229,7 @@ class Up2k(object):
_ = dbv.get(volpath, uname, *permsets[0])
if xbd:
- if not runhook(
+ hr = runhook(
self.log,
None,
self,
@@ -4202,10 +4244,13 @@ class Up2k(object):
st.st_size,
ip,
time.time(),
- "",
- ):
- t = "delete blocked by xbd server config: %r"
- self.log(t % (abspath,), 1)
+ None,
+ )
+ t = hr.get("rejectmsg") or ""
+ if t or hr.get("rc") != 0:
+ if not t:
+ t = "delete blocked by xbd server config: %r" % (abspath,)
+ self.log(t, 1)
continue
n_files += 1
@@ -4242,7 +4287,7 @@ class Up2k(object):
st.st_size,
ip,
time.time(),
- "",
+ None,
)
if is_dir:
@@ -4269,6 +4314,9 @@ class Up2k(object):
self.db_act = self.vol_act[svn_dbv.realpath] = time.time()
st = bos.stat(sabs)
+ if "bcasechk" in svn.flags and not svn.casechk(srem, False):
+ raise Pebkac(400, "file does not exist case-sensitively")
+
if stat.S_ISREG(st.st_mode) or stat.S_ISLNK(st.st_mode):
with self.mutex:
try:
@@ -4352,7 +4400,7 @@ class Up2k(object):
xbc = svn.flags.get("xbc")
xac = dvn.flags.get("xac")
if xbc:
- if not runhook(
+ hr = runhook(
self.log,
None,
self,
@@ -4367,9 +4415,12 @@ class Up2k(object):
fsize,
ip,
time.time(),
- "",
- ):
- t = "copy blocked by xbr server config: %r" % (svp,)
+ None,
+ )
+ t = hr.get("rejectmsg") or ""
+ if t or hr.get("rc") != 0:
+ if not t:
+ t = "copy blocked by xbr server config: %r" % (svp,)
self.log(t, 1)
raise Pebkac(405, t)
@@ -4427,7 +4478,7 @@ class Up2k(object):
b1, b2 = fsenc(sabs), fsenc(dabs)
is_link = os.path.islink(b1) # due to _relink
try:
- shutil.copy2(b1, b2)
+ trystat_shutil_copy2(self.log, b1, b2)
except:
try:
wunlink(self.log, dabs, dvn.flags)
@@ -4468,7 +4519,7 @@ class Up2k(object):
fsize,
ip,
time.time(),
- "",
+ None,
)
return "k"
@@ -4487,6 +4538,9 @@ class Up2k(object):
raise Pebkac(400, "mv: cannot move a mountpoint")
st = bos.lstat(sabs)
+ if "bcasechk" in svn.flags and not svn.casechk(srem, False):
+ raise Pebkac(400, "file does not exist case-sensitively")
+
if stat.S_ISREG(st.st_mode) or stat.S_ISLNK(st.st_mode):
with self.mutex:
try:
@@ -4601,7 +4655,7 @@ class Up2k(object):
xbr = svn.flags.get("xbr")
xar = dvn.flags.get("xar")
if xbr:
- if not runhook(
+ hr = runhook(
self.log,
None,
self,
@@ -4616,9 +4670,12 @@ class Up2k(object):
fsize,
ip,
time.time(),
- "",
- ):
- t = "move blocked by xbr server config: %r" % (svp,)
+ None,
+ )
+ t = hr.get("rejectmsg") or ""
+ if t or hr.get("rc") != 0:
+ if not t:
+ t = "move blocked by xbr server config: %r" % (svp,)
self.log(t, 1)
raise Pebkac(405, t)
@@ -4656,7 +4713,7 @@ class Up2k(object):
fsize,
ip,
time.time(),
- "",
+ None,
)
return "k"
@@ -4668,6 +4725,12 @@ class Up2k(object):
if w:
assert c1 # !rm
if c2 and c2 != c1:
+ if "nodupem" in dvn.flags:
+ q = "select w from up where substr(w,1,16) = ?"
+ for (w2,) in c2.execute(q, (w[:16],)):
+ if w == w2:
+ t = "file exists in target volume, and dupes are forbidden in config"
+ raise Pebkac(400, t)
self._copy_tags(c1, c2, w)
xlink = bool(svn.flags.get("xlink"))
@@ -4733,7 +4796,7 @@ class Up2k(object):
b1, b2 = fsenc(sabs), fsenc(dabs)
is_link = os.path.islink(b1) # due to _relink
try:
- shutil.copy2(b1, b2)
+ trystat_shutil_copy2(self.log, b1, b2)
except:
try:
wunlink(self.log, dabs, dvn.flags)
@@ -4776,7 +4839,7 @@ class Up2k(object):
fsize,
ip,
time.time(),
- "",
+ None,
)
return "k"
@@ -5016,7 +5079,7 @@ class Up2k(object):
for k in cj["hash"]:
if not self.r_hash.match(k):
raise Pebkac(
- 400, "at least one hash is not according to spec: {}".format(k)
+ 400, "at least one hash is not according to spec: %r" % (k,)
)
# try to use client-provided timestamp, don't care if it fails somehow
@@ -5073,6 +5136,16 @@ class Up2k(object):
return ret, st
+ def _ex_hash(self, ex: Exception, ap: str) -> None:
+ eno = getattr(ex, "errno", 0)
+ if eno in E_FS_MEH:
+ return self.log("hashing failed; %r @ %r" % (ex, ap))
+ if eno not in E_FS_CRIT:
+ return self.log("hashing failed; %r @ %r\n%s" % (ex, ap, min_ex()), 3)
+ t = "hashing failed; %r @ %r\n%s\nWARNING: This MAY indicate a serious issue with your harddisk or filesystem! Please investigate %sOS-logs\n"
+ t2 = "" if ANYWIN or MACOS else "dmesg and "
+ return self.log(t % (ex, ap, min_ex(), t2), 1)
+
def _new_upload(self, job: dict[str, Any], vfs: VFS, depth: int) -> dict[str, str]:
pdir = djoin(job["ptop"], job["prel"])
if not job["size"]:
@@ -5104,10 +5177,12 @@ class Up2k(object):
job["size"],
job["addr"],
job["t0"],
- "",
+ None,
)
- if not hr:
- t = "upload blocked by xbu server config: %r" % (vp_chk,)
+ t = hr.get("rejectmsg") or ""
+ if t or hr.get("rc") != 0:
+ if not t:
+ t = "upload blocked by xbu server config: %r" % (vp_chk,)
self.log(t, 1)
raise Pebkac(403, t)
if hr.get("reloc"):
@@ -5119,7 +5194,7 @@ class Up2k(object):
job["ptop"] = vfs.realpath
job["vtop"] = vfs.vpath
job["prel"] = rem
- job["name"] = sanitize_fn(job["name"], "")
+ job["name"] = sanitize_fn(job["name"])
ud2 = (vfs.vpath, job["prel"], job["name"])
if ud1 != ud2:
self.log("xbu reloc2:%d..." % (depth,), 6)
@@ -5169,7 +5244,7 @@ class Up2k(object):
sprs = False
if not ANYWIN and sprs and sz > 1024 * 1024:
- fs = self.fstab.get(pdir)
+ fs, mnt = self.fstab.get(pdir)
if fs == "ok":
pass
elif "nosparse" in vf:
@@ -5255,17 +5330,21 @@ class Up2k(object):
self.log("\n".join([t] + vis))
for job in rm:
del reg[job["wark"]]
+ rsv_cleared = False
try:
# remove the filename reservation
path = djoin(job["ptop"], job["prel"], job["name"])
if bos.path.getsize(path) == 0:
bos.unlink(path)
+ rsv_cleared = True
except:
pass
try:
- if len(job["hash"]) == len(job["need"]):
- # PARTIAL is empty, delete that too
+ if len(job["hash"]) == len(job["need"]) or (
+ rsv_cleared and "rm_partial" in self.flags[job["ptop"]]
+ ):
+ # PARTIAL is empty (hash==need) or --rm-partial, so delete that too
path = djoin(job["ptop"], job["prel"], job["tnam"])
bos.unlink(path)
except:
diff --git a/copyparty/util.py b/copyparty/util.py
index c476a2ea..ff5c8c10 100644
--- a/copyparty/util.py
+++ b/copyparty/util.py
@@ -55,7 +55,6 @@ from .__init__ import (
unicode,
)
from .__version__ import S_BUILD_DT, S_VERSION
-from .stolen import surrogateescape
try:
from datetime import datetime, timezone
@@ -81,6 +80,9 @@ except:
if PY2:
range = xrange # type: ignore
+ from .stolen import surrogateescape
+
+ surrogateescape.register_surrogateescape()
if sys.version_info >= (3, 7) or (
@@ -111,6 +113,8 @@ E_ADDR_NOT_AVAIL = _ens("EADDRNOTAVAIL WSAEADDRNOTAVAIL")
E_ADDR_IN_USE = _ens("EADDRINUSE WSAEADDRINUSE")
E_ACCESS = _ens("EACCES WSAEACCES")
E_UNREACH = _ens("EHOSTUNREACH WSAEHOSTUNREACH ENETUNREACH WSAENETUNREACH")
+E_FS_MEH = _ens("EPERM EACCES ENOENT ENOTCAPABLE")
+E_FS_CRIT = _ens("EIO EFAULT EUCLEAN ENOTBLK")
IP6ALL = "0:0:0:0:0:0:0:0"
IP6_LL = ("fe8", "fe9", "fea", "feb")
@@ -125,8 +129,10 @@ try:
import fcntl
HAVE_FCNTL = True
+ HAVE_FICLONE = hasattr(fcntl, "FICLONE")
except:
HAVE_FCNTL = False
+ HAVE_FICLONE = False
try:
import ctypes
@@ -134,6 +140,25 @@ try:
except:
pass
+try:
+ if os.environ.get("PRTY_NO_IFADDR"):
+ raise Exception()
+ try:
+ if os.getenv("PRTY_SYS_ALL") or os.getenv("PRTY_SYS_IFADDR"):
+ raise ImportError()
+
+ from .stolen.ifaddr import get_adapters
+ except ImportError:
+ from ifaddr import get_adapters
+
+ HAVE_IFADDR = True
+except:
+ HAVE_IFADDR = False
+
+ def get_adapters(include_unconfigured=False):
+ return []
+
+
try:
if os.environ.get("PRTY_NO_SQLITE"):
raise Exception()
@@ -171,6 +196,11 @@ try:
except:
pass
+if os.getenv("PRTY_MODSPEC"):
+ from inspect import getsourcefile
+
+ print("PRTY_MODSPEC: ifaddr:", getsourcefile(get_adapters))
+
if True: # pylint: disable=using-constant-test
import types
from collections.abc import Callable, Iterable
@@ -264,10 +294,26 @@ RE_MEMTOTAL = re.compile("^MemTotal:.* kB")
RE_MEMAVAIL = re.compile("^MemAvailable:.* kB")
+if PY2:
+
+ def umktrans(s1, s2):
+ return {ord(c1): ord(c2) for c1, c2 in zip(s1, s2)}
+
+else:
+ umktrans = str.maketrans
+
+FNTL_WIN = umktrans('<>:|?*"\\/', "๏ผ๏ผ๏ผ๏ฝ๏ผ๏ผ๏ผ๏ผผ๏ผ")
+VPTL_WIN = umktrans('<>:|?*"\\', "๏ผ๏ผ๏ผ๏ฝ๏ผ๏ผ๏ผ๏ผผ")
+APTL_WIN = umktrans('<>:|?*"/', "๏ผ๏ผ๏ผ๏ฝ๏ผ๏ผ๏ผ๏ผ")
+FNTL_MAC = VPTL_MAC = APTL_MAC = umktrans(":", "๏ผ")
+FNTL_OS = FNTL_WIN if ANYWIN else FNTL_MAC if MACOS else None
+VPTL_OS = VPTL_WIN if ANYWIN else VPTL_MAC if MACOS else None
+APTL_OS = APTL_WIN if ANYWIN else APTL_MAC if MACOS else None
+
+
BOS_SEP = ("%s" % (os.sep,)).encode("ascii")
-surrogateescape.register_surrogateescape()
if WINDOWS and PY2:
FS_ENCODING = "utf-8"
else:
@@ -329,6 +375,8 @@ IMPLICATIONS = [
["hardlink_only", "hardlink"],
["hardlink", "dedup"],
["tftpvv", "tftpv"],
+ ["nodupem", "nodupe"],
+ ["no_dupe_m", "no_dupe"],
["smbw", "smb"],
["smb1", "smb"],
["smbvvv", "smbvv"],
@@ -376,6 +424,13 @@ DAV_ALLPROP_L = [
DAV_ALLPROPS = set(DAV_ALLPROP_L)
+FAVICON_MIMES = {
+ "gif": "image/gif",
+ "png": "image/png",
+ "svg": "image/svg+xml",
+}
+
+
MIMES = {
"opus": "audio/ogg; codecs=opus",
"owa": "audio/webm; codecs=opus",
@@ -430,11 +485,11 @@ EXTS["vnd.mozilla.apng"] = "png"
MAGIC_MAP = {"jpeg": "jpg"}
-DEF_EXP = "self.ip self.ua self.uname self.host cfg.name cfg.logout vf.scan vf.thsize hdr.cf_ipcountry srv.itime srv.htime"
+DEF_EXP = "self.ip self.ua self.uname self.host cfg.name cfg.logout vf.scan vf.thsize hdr.cf-ipcountry srv.itime srv.htime"
-DEF_MTE = ".files,circle,album,.tn,artist,title,.bpm,key,.dur,.q,.vq,.aq,vc,ac,fmt,res,.fps,ahash,vhash"
+DEF_MTE = ".files,circle,album,.tn,artist,title,tdate,.bpm,key,.dur,.q,.vq,.aq,vc,ac,fmt,res,.fps,ahash,vhash"
-DEF_MTH = ".vq,.aq,vc,ac,fmt,res,.fps"
+DEF_MTH = "tdate,.vq,.aq,vc,ac,fmt,res,.fps"
REKOBO_KEY = {
@@ -546,6 +601,8 @@ def py_desc() -> str:
ofs = py_ver.find(".final.")
if ofs > 0:
py_ver = py_ver[:ofs]
+ if "free-threading" in sys.version:
+ py_ver += "t"
host_os = platform.system()
compiler = platform.python_compiler().split("http")[0]
@@ -597,22 +654,41 @@ except:
JINJA_VER = "(None)"
try:
+ if os.environ.get("PRTY_NO_PYFTPD"):
+ raise Exception()
+
from pyftpdlib.__init__ import __ver__ as PYFTPD_VER
except:
PYFTPD_VER = "(None)"
try:
+ if os.environ.get("PRTY_NO_PARTFTPY"):
+ raise Exception()
+
from partftpy.__init__ import __version__ as PARTFTPY_VER
except:
PARTFTPY_VER = "(None)"
+try:
+ if os.environ.get("PRTY_NO_PARAMIKO"):
+ raise Exception()
+
+ from paramiko import __version__ as MIKO_VER
+except:
+ MIKO_VER = "(None)"
+
PY_DESC = py_desc()
-VERSIONS = (
- "copyparty v{} ({})\n{}\n sqlite {} | jinja {} | pyftpd {} | tftp {}".format(
- S_VERSION, S_BUILD_DT, PY_DESC, SQLITE_VER, JINJA_VER, PYFTPD_VER, PARTFTPY_VER
- )
+VERSIONS = "copyparty v{} ({})\n{}\n sqlite {} | jinja {} | pyftpd {} | tftp {} | miko {}".format(
+ S_VERSION,
+ S_BUILD_DT,
+ PY_DESC,
+ SQLITE_VER,
+ JINJA_VER,
+ PYFTPD_VER,
+ PARTFTPY_VER,
+ MIKO_VER,
)
@@ -644,7 +720,7 @@ except Exception as ex:
ub64dec = base64.urlsafe_b64decode # type: ignore
b64enc = base64.b64encode # type: ignore
b64dec = base64.b64decode # type: ignore
- if not PY36:
+ if PY36:
print("using fallback base64 codec due to %r" % (ex,))
@@ -656,6 +732,9 @@ def read_utf8(log: Optional["NamedLogger"], ap: Union[str, bytes], strict: bool)
with open(ap, "rb") as f:
buf = f.read()
+ if buf.startswith(b"\xef\xbb\xbf"):
+ buf = buf[3:]
+
try:
return buf.decode("utf-8", "strict")
except UnicodeDecodeError as ex:
@@ -1121,16 +1200,18 @@ class ProgressPrinter(threading.Thread):
sigblock()
tp = 0
msg = None
- no_stdout = self.args.q
+ slp_pr = self.args.scan_pr_r
+ slp_ps = min(slp_pr, self.args.scan_st_r)
+ no_stdout = self.args.q or slp_pr == slp_ps
fmt = " {}\033[K\r" if VT100 else " {} $\r"
while not self.end:
- time.sleep(0.1)
+ time.sleep(slp_ps)
if msg == self.msg or self.end:
continue
msg = self.msg
now = time.time()
- if msg and now - tp > 10:
+ if msg and now - tp >= slp_pr:
tp = now
self.log("progress: %r" % (msg,), 6)
@@ -1188,21 +1269,21 @@ class MTHash(object):
for nch in range(nchunks):
self.work_q.put(nch)
- ex = ""
+ ex: Optional[Exception] = None
for nch in range(nchunks):
qe = self.done_q.get()
try:
nch, dig, ofs, csz = qe
chunks[nch] = (dig, ofs, csz)
except:
- ex = ex or str(qe)
+ ex = ex or qe # type: ignore
if pp:
mb = (fsz - nch * chunksz) // (1024 * 1024)
pp.msg = prefix + str(mb) + suffix
if ex:
- raise Exception(ex)
+ raise ex
ret = []
for n in range(nchunks):
@@ -1219,7 +1300,7 @@ class MTHash(object):
try:
v = self.hash_at(ofs)
except Exception as ex:
- v = str(ex) # type: ignore
+ v = ex # type: ignore
self.done_q.put(v)
@@ -1457,20 +1538,24 @@ def trace(*args: Any, **kwargs: Any) -> None:
nuprint(msg)
-def alltrace() -> str:
+def alltrace(verbose: bool = True) -> str:
threads: dict[str, types.FrameType] = {}
names = dict([(t.ident, t.name) for t in threading.enumerate()])
for tid, stack in sys._current_frames().items():
- name = "%s (%x)" % (names.get(tid), tid)
+ if verbose:
+ name = "%s (%x)" % (names.get(tid), tid)
+ else:
+ name = str(names.get(tid))
threads[name] = stack
rret: list[str] = []
bret: list[str] = []
+ np = -3 if verbose else -2
for name, stack in sorted(threads.items()):
ret = ["\n\n# %s" % (name,)]
pad = None
for fn, lno, name, line in traceback.extract_stack(stack):
- fn = os.sep.join(fn.split(os.sep)[-3:])
+ fn = os.sep.join(fn.split(os.sep)[np:])
ret.append('File: "%s", line %d, in %s' % (fn, lno, name))
if line:
ret.append(" " + str(line.strip()))
@@ -1577,10 +1662,12 @@ def vol_san(vols: list["VFS"], txt: bytes) -> bytes:
bvp = vol.vpath.encode("utf-8")
bvph = b"$hist(/" + bvp + b")"
- txt = txt.replace(bap, bvp)
- txt = txt.replace(bhp, bvph)
- txt = txt.replace(bap.replace(b"\\", b"\\\\"), bvp)
- txt = txt.replace(bhp.replace(b"\\", b"\\\\"), bvph)
+ if bap:
+ txt = txt.replace(bap, bvp)
+ txt = txt.replace(bap.replace(b"\\", b"\\\\"), bvp)
+ if bhp:
+ txt = txt.replace(bhp, bvph)
+ txt = txt.replace(bhp.replace(b"\\", b"\\\\"), bvph)
if vol.histpath != vol.dbpath:
bdp = vol.dbpath.encode("utf-8")
@@ -1759,12 +1846,12 @@ class MultipartParser(object):
continue
if m.group(1).lower() != "form-data":
- raise Pebkac(400, "not form-data: {}".format(ln))
+ raise Pebkac(400, "not form-data: %r" % (ln,))
try:
field = self.re_cdisp_field.match(ln).group(1) # type: ignore
except:
- raise Pebkac(400, "missing field name: {}".format(ln))
+ raise Pebkac(400, "missing field name: %r" % (ln,))
try:
fn = self.re_cdisp_file.match(ln).group(1) # type: ignore
@@ -1936,7 +2023,7 @@ def get_boundary(headers: dict[str, str]) -> str:
ct = headers["content-type"]
m = re.match(ptn, ct, re.IGNORECASE)
if not m:
- raise Pebkac(400, "invalid content-type for a multipart post: {}".format(ct))
+ raise Pebkac(400, "invalid content-type for a multipart post: %r" % (ct,))
return m.group(2)
@@ -2108,6 +2195,7 @@ def humansize(sz: float, terse: bool = False) -> str:
sz /= 1024.0
+ assert unit # type: ignore # !rm
if terse:
return "%s%s" % (str(sz)[:4].rstrip("."), unit[:1])
else:
@@ -2176,38 +2264,30 @@ def undot(path: str) -> str:
return "/".join(ret)
-def sanitize_fn(fn: str, ok: str) -> str:
- if "/" not in ok:
- fn = fn.replace("\\", "/").split("/")[-1]
+def sanitize_fn(fn: str) -> str:
+ fn = fn.replace("\\", "/").split("/")[-1]
+ if APTL_OS:
+ fn = sanitize_to(fn, APTL_OS)
+ return fn.strip()
+
+def sanitize_to(fn: str, tl: dict[int, int]) -> str:
+ fn = fn.translate(tl)
if ANYWIN:
- remap = [
- ["<", "๏ผ"],
- [">", "๏ผ"],
- [":", "๏ผ"],
- ['"', "๏ผ"],
- ["/", "๏ผ"],
- ["\\", "๏ผผ"],
- ["|", "๏ฝ"],
- ["?", "๏ผ"],
- ["*", "๏ผ"],
- ]
- for a, b in [x for x in remap if x[0] not in ok]:
- fn = fn.replace(a, b)
-
bad = ["con", "prn", "aux", "nul"]
for n in range(1, 10):
bad += ("com%s lpt%s" % (n, n)).split(" ")
if fn.lower().split(".")[0] in bad:
fn = "_" + fn
-
- return fn.strip()
+ return fn
-def sanitize_vpath(vp: str, ok: str) -> str:
+def sanitize_vpath(vp: str) -> str:
+ if not APTL_OS:
+ return vp
parts = vp.replace(os.sep, "/").split("/")
- ret = [sanitize_fn(x, ok) for x in parts]
+ ret = [sanitize_to(x, APTL_OS) for x in parts]
return "/".join(ret)
@@ -2260,14 +2340,14 @@ def odfusion(
ret = base.copy()
if oth.startswith("+"):
for k in words1:
- ret[k] = True
+ ret[k] = True # type: ignore
elif oth[:1] in ("-", "/"):
for k in words1:
- ret.pop(k, None)
+ ret.pop(k, None) # type: ignore
else:
ret = ODict.fromkeys(words0, True)
- return ret
+ return ret # type: ignore
def ipnorm(ip: str) -> str:
@@ -2512,12 +2592,12 @@ def pathmod(
def _w8dec2(txt: bytes) -> str:
"""decodes filesystem-bytes to wtf8"""
- return surrogateescape.decodefilename(txt)
+ return surrogateescape.decodefilename(txt) # type: ignore
def _w8enc2(txt: str) -> bytes:
"""encodes wtf8 to filesystem-bytes"""
- return surrogateescape.encodefilename(txt)
+ return surrogateescape.encodefilename(txt) # type: ignore
def _w8dec3(txt: bytes) -> str:
@@ -2639,6 +2719,24 @@ def set_fperms(f: Union[typing.BinaryIO, typing.IO[Any]], vf: dict[str, Any]) ->
os.fchown(fno, vf["uid"], vf["gid"])
+def trystat_shutil_copy2(log: "NamedLogger", src: bytes, dst: bytes) -> bytes:
+ try:
+ return shutil.copy2(src, dst)
+ except:
+ # ignore failed mtime on linux+ntfs; for example:
+ # shutil.py:437 : copystat(src, dst, follow_symlinks=follow_symlinks)
+ # shutil.py:376 : lookup("utime")(dst, ns=(st.st_atime_ns, st.st_mtime_ns),
+ # [PermissionError] [Errno 1] Operation not permitted, '/windows/_videos'
+ _, _, tb = sys.exc_info()
+ for _, _, fun, _ in traceback.extract_tb(tb):
+ if fun == "copystat":
+ if log:
+ t = "warning: failed to retain some file attributes (timestamp and/or permissions) during copy from %r to %r:\n%s"
+ log(t % (src, dst, min_ex()), 3)
+ return dst # close enough
+ raise
+
+
def _fs_mvrm(
log: "NamedLogger", src: str, dst: str, atomic: bool, flags: dict[str, Any]
) -> bool:
@@ -2677,7 +2775,7 @@ def _fs_mvrm(
t = "something appeared at dst; aborting rename %r ==> %r"
log(t % (src, dst), 1)
return False
- osfun(*args)
+ osfun(*args) # type: ignore
if attempt:
now = time.time()
t = "%sd in %.2f sec, attempt %d: %r"
@@ -2727,7 +2825,7 @@ def atomic_move(log: "NamedLogger", src: str, dst: str, flags: dict[str, Any]) -
os.unlink(bdst)
except:
pass
- shutil.move(bsrc, bdst)
+ shutil.move(bsrc, bdst) # type: ignore
def wunlink(log: "NamedLogger", abspath: str, flags: dict[str, Any]) -> bool:
@@ -2770,6 +2868,8 @@ def get_df(abspath: str, prune: bool) -> tuple[int, int, str]:
if not ANYWIN and not MACOS:
def siocoutq(sck: socket.socket) -> int:
+ assert fcntl # type: ignore # !rm
+ assert termios # type: ignore # !rm
# SIOCOUTQ^sockios.h == TIOCOUTQ^ioctl.h
try:
zb = fcntl.ioctl(sck.fileno(), termios.TIOCOUTQ, b"AAAA")
@@ -2889,8 +2989,6 @@ def read_socket_chunked(
def list_ips() -> list[str]:
- from .stolen.ifaddr import get_adapters
-
ret: set[str] = set()
for nic in get_adapters():
for ipo in nic.ips:
@@ -3133,7 +3231,7 @@ def sendfile_kern(
try:
req = min(0x2000000, upper - ofs) # 32 MiB
if use_poll:
- poll.poll(10000)
+ poll.poll(10000) # type: ignore
else:
select.select([], [out_fd], [], 10)
n = os.sendfile(out_fd, in_fd, ofs, req)
@@ -3423,7 +3521,9 @@ NICEB = NICES.encode("utf-8")
def runcmd(
- argv: Union[list[bytes], list[str]], timeout: Optional[float] = None, **ka: Any
+ argv: Union[list[bytes], list[str], list["LiteralString"]],
+ timeout: Optional[float] = None,
+ **ka: Any
) -> tuple[int, str, str]:
isbytes = isinstance(argv[0], (bytes, bytearray))
oom = ka.pop("oom", 0) # 0..1000
@@ -3442,19 +3542,19 @@ def runcmd(
if ANYWIN:
if isbytes:
if argv[0] in CMD_EXEB:
- argv[0] += b".exe"
+ argv[0] += b".exe" # type: ignore
else:
if argv[0] in CMD_EXES:
- argv[0] += ".exe"
+ argv[0] += ".exe" # type: ignore
if ka.pop("nice", None):
if WINDOWS:
ka["creationflags"] = 0x4000
elif NICEB:
if isbytes:
- argv = [NICEB] + argv
+ argv = [NICEB] + argv # type: ignore
else:
- argv = [NICES] + argv
+ argv = [NICES] + argv # type: ignore
p = sp.Popen(argv, stdout=cout, stderr=cerr, **ka)
@@ -3466,10 +3566,10 @@ def runcmd(
pass
if not timeout or PY2:
- bout, berr = p.communicate(sin)
+ bout, berr = p.communicate(sin) # type: ignore
else:
try:
- bout, berr = p.communicate(sin, timeout=timeout)
+ bout, berr = p.communicate(sin, timeout=timeout) # type: ignore
except sp.TimeoutExpired:
if kill == "n":
return -18, "", "" # SIGCONT; leave it be
@@ -3479,7 +3579,7 @@ def runcmd(
killtree(p.pid)
try:
- bout, berr = p.communicate(timeout=1)
+ bout, berr = p.communicate(timeout=1) # type: ignore
except:
bout = b""
berr = b""
@@ -3565,11 +3665,13 @@ def retchk(
def _parsehook(
log: Optional["NamedLogger"], cmd: str
-) -> tuple[str, bool, bool, bool, float, dict[str, Any], list[str]]:
+) -> tuple[str, bool, bool, bool, bool, bool, float, dict[str, Any], list[str]]:
areq = ""
chk = False
fork = False
jtxt = False
+ imp = False
+ sin = False
wait = 0.0
tout = 0.0
kill = "t"
@@ -3583,6 +3685,10 @@ def _parsehook(
fork = True
elif arg == "j":
jtxt = True
+ elif arg == "I":
+ imp = True
+ elif arg == "s":
+ sin = True
elif arg.startswith("w"):
wait = float(arg[1:])
elif arg.startswith("t"):
@@ -3627,7 +3733,7 @@ def _parsehook(
argv[0] = os.path.expandvars(os.path.expanduser(argv[0]))
- return areq, chk, fork, jtxt, wait, sp_ka, argv
+ return areq, chk, imp, fork, sin, jtxt, wait, sp_ka, argv
def runihook(
@@ -3637,7 +3743,7 @@ def runihook(
vol: "VFS",
ups: list[tuple[str, int, int, str, str, str, int, str]],
) -> bool:
- _, chk, fork, jtxt, wait, sp_ka, acmd = _parsehook(log, cmd)
+ _, chk, _, fork, _, jtxt, wait, sp_ka, acmd = _parsehook(log, cmd)
bcmd = [sfsenc(x) for x in acmd]
if acmd[0].endswith(".py"):
bcmd = [sfsenc(pybin)] + bcmd
@@ -3813,10 +3919,10 @@ def _runhook(
sz: int,
ip: str,
at: float,
- txt: str,
+ txt: Optional[list[str]],
) -> dict[str, Any]:
ret = {"rc": 0}
- areq, chk, fork, jtxt, wait, sp_ka, acmd = _parsehook(log, cmd)
+ areq, chk, imp, fork, sin, jtxt, wait, sp_ka, acmd = _parsehook(log, cmd)
if areq:
for ch in areq:
if ch not in perms:
@@ -3824,7 +3930,7 @@ def _runhook(
if log:
log(t % (uname, cmd, areq, perms))
return ret # fallthrough to next hook
- if jtxt:
+ if imp or jtxt:
ja = {
"ap": ap,
"vp": vp,
@@ -3836,19 +3942,35 @@ def _runhook(
"user": uname,
"perms": perms,
"src": src,
- "txt": txt,
}
+ if txt:
+ ja["txt"] = txt[0]
+ ja["body"] = txt[1]
+ if imp:
+ ja["log"] = log
+ mod = loadpy(acmd[0], False)
+ return mod.main(ja)
arg = json.dumps(ja)
else:
- arg = txt or ap
+ arg = txt[0] if txt else ap
if acmd[0].startswith("zmq:"):
zi, zs = _zmq_hook(log, verbose, src, acmd[0][4:].lower(), arg, wait, sp_ka)
if zi:
raise Exception("zmq says %d" % (zi,))
- return {"rc": 0, "stdout": zs}
+ try:
+ ret = json.loads(zs)
+ if "rc" not in ret:
+ ret["rc"] = 0
+ return ret
+ except:
+ return {"rc": 0, "stdout": zs}
+
+ if sin:
+ sp_ka["sin"] = (arg + "\n").encode("utf-8", "replace")
+ else:
+ acmd += [arg]
- acmd += [arg]
if acmd[0].endswith(".py"):
acmd = [pybin] + acmd
@@ -3861,20 +3983,23 @@ def _runhook(
rc, v, err = runcmd(bcmd, **sp_ka) # type: ignore
if chk and rc:
ret["rc"] = rc
- retchk(rc, bcmd, err, log, 5)
+ zi = 0 if rc == 100 else rc
+ retchk(zi, bcmd, err, log, 5)
else:
try:
ret = json.loads(v)
except:
- ret = {}
+ pass
try:
if "stdout" not in ret:
ret["stdout"] = v
+ if "stderr" not in ret:
+ ret["stderr"] = err
if "rc" not in ret:
ret["rc"] = rc
except:
- ret = {"rc": rc, "stdout": v}
+ ret = {"rc": rc, "stdout": v, "stderr": err}
if wait:
wait -= time.time() - t0
@@ -3899,13 +4024,14 @@ def runhook(
sz: int,
ip: str,
at: float,
- txt: str,
+ txt: Optional[list[str]],
) -> dict[str, Any]:
assert broker or up2k # !rm
- args = (broker or up2k).args
+ args = (broker or up2k).args # type: ignore
verbose = args.hook_v
vp = vp.replace("\\", "/")
ret = {"rc": 0}
+ stop = False
for cmd in cmds:
try:
hr = _runhook(
@@ -3913,28 +4039,30 @@ def runhook(
)
if verbose and log:
log("hook(%s) %r => \033[32m%s" % (src, cmd, hr), 6)
- if not hr:
- return {}
for k, v in hr.items():
if k in ("idx", "del") and v:
if broker:
broker.say("up2k.hook_fx", k, v, vp)
else:
+ assert up2k # !rm
up2k.fx_backlog.append((k, v, vp))
elif k == "reloc" and v:
# idk, just take the last one ig
ret["reloc"] = v
+ elif k == "rc" and v:
+ stop = True
+ ret[k] = 0 if v == 100 else v
elif k in ret:
- if k == "rc" and v:
- ret[k] = v
- elif k == "stdout" and v and not ret[k]:
+ if k == "stdout" and v and not ret[k]:
ret[k] = v
else:
ret[k] = v
except Exception as ex:
- (log or print)("hook: {}".format(ex))
+ (log or print)("hook: %r, %s" % (ex, ex))
if ",c," in "," + cmd:
- return {}
+ return {"rc": 1}
+ break
+ if stop:
break
return ret
@@ -4075,10 +4203,17 @@ def wrap(txt: str, maxlen: int, maxlen2: int) -> list[str]:
def termsize() -> tuple[int, int]:
- # from hashwalk
+ try:
+ w, h = os.get_terminal_size()
+ return w, h
+ except:
+ pass
+
env = os.environ
def ioctl_GWINSZ(fd: int) -> Optional[tuple[int, int]]:
+ assert fcntl # type: ignore # !rm
+ assert termios # type: ignore # !rm
try:
cr = sunpack(b"hh", fcntl.ioctl(fd, termios.TIOCGWINSZ, b"AAAA"))
return cr[::-1]
diff --git a/copyparty/web/Makefile b/copyparty/web/Makefile
index 3989e931..2ca0f107 100644
--- a/copyparty/web/Makefile
+++ b/copyparty/web/Makefile
@@ -2,11 +2,14 @@
# which should help on really slow connections
# but then why are you using copyparty in the first place
-pk: $(addsuffix .gz, $(wildcard *.js *.css))
-un: $(addsuffix .un, $(wildcard *.gz))
+pk: $(addsuffix .gz, $(wildcard tl/*.js *.js *.css) \
+ a/webdav-cfg.txt )
+un: $(addsuffix .un, $(wildcard tl/*.gz *.gz a/*.gz))
%.gz: %
- pigz -11 -J 34 -I 573 $<
+ pigz -c11 -J 34 -I 573 <$< >$@
+ touch -r $< $@
+ rm $<
%.un: %
pigz -d $<
diff --git a/copyparty/web/a/webdav-cfg.bat b/copyparty/web/a/webdav-cfg.txt
similarity index 100%
rename from copyparty/web/a/webdav-cfg.bat
rename to copyparty/web/a/webdav-cfg.txt
diff --git a/copyparty/web/baguettebox.js b/copyparty/web/baguettebox.js
index 931d5195..4b132a49 100644
--- a/copyparty/web/baguettebox.js
+++ b/copyparty/web/baguettebox.js
@@ -1,3 +1,5 @@
+"use strict";
+
/*!
* baguetteBox.js
* @author feimosi
@@ -5,6 +7,8 @@
* @url https://github.com/feimosi/baguetteBox.js
*/
+var J_BBX = 1;
+
window.baguetteBox = (function () {
'use strict';
@@ -22,8 +26,9 @@ window.baguetteBox = (function () {
afterHide: null,
duringHide: null,
onChange: null,
+ readDirRtl: false,
},
- overlay, slider, btnPrev, btnNext, btnHelp, btnAnim, btnRotL, btnRotR, btnSel, btnFull, btnVmode, btnClose,
+ overlay, slider, btnPrev, btnNext, btnHelp, btnAnim, btnRotL, btnRotR, btnSel, btnFull, btnZoom, btnVmode, btnReadDir, btnClose,
currentGallery = [],
currentIndex = 0,
isOverlayVisible = false,
@@ -33,6 +38,8 @@ window.baguetteBox = (function () {
scrollTimer = 0,
re_i = /^[^?]+\.(a?png|avif|bmp|gif|heif|jpe?g|jfif|svg|webp)(\?|$)/i,
re_v = /^[^?]+\.(webm|mkv|mp4|m4v|mov)(\?|$)/i,
+ re_cbz = /^[^?]+\.(cbz)(\?|$)/i,
+ cbz_pics = ["png", "jpg", "jpeg", "gif", "bmp", "tga", "tif", "tiff", "webp", "avif"],
anims = ['slideIn', 'fadeIn', 'none'],
data = {}, // all galleries
imagesElements = [],
@@ -57,6 +64,15 @@ window.baguetteBox = (function () {
hideOverlay();
};
+ var vtouch = function (e) {
+ var v = vid(),
+ bv = v.getBoundingClientRect(),
+ tp = e.changedTouches[0];
+
+ if (bv.bottom - tp.clientY < 90)
+ touchFlag = true;
+ };
+
var touchstartHandler = function (e) {
touch.count = e.touches.length;
if (touch.count > 1)
@@ -73,10 +89,10 @@ window.baguetteBox = (function () {
var touchEvent = e.touches[0] || e.changedTouches[0];
if (touchEvent.pageX - touch.startX > 40) {
touchFlag = true;
- showPreviousImage();
+ showLeftImage();
} else if (touchEvent.pageX - touch.startX < -40) {
touchFlag = true;
- showNextImage();
+ showRightImage();
} else if (touch.startY - touchEvent.pageY > 100) {
hideOverlay();
}
@@ -114,9 +130,9 @@ window.baguetteBox = (function () {
scrollTimer = Date.now();
if (d > 0)
- showNextImage();
+ showNextImageIgnoreReadDir();
else
- showPreviousImage();
+ showPreviousImageIgnoreReadDir();
};
var trapFocusInsideOverlay = function (e) {
@@ -146,6 +162,8 @@ window.baguetteBox = (function () {
tagsNodeList = [galleryElement];
else
tagsNodeList = galleryElement.getElementsByTagName('a');
+ if (have_zls)
+ bindCbzClickListeners(tagsNodeList, userOptions);
tagsNodeList = [].filter.call(tagsNodeList, function (element) {
if (element.className.indexOf(userOptions && userOptions.ignoreClass) === -1)
@@ -166,7 +184,7 @@ window.baguetteBox = (function () {
};
var imageItem = {
eventHandler: imageElementClickHandler,
- imageElement: imageElement
+ imageElement: imageElement,
};
bind(imageElement, 'click', imageElementClickHandler);
gallery.push(imageItem);
@@ -177,6 +195,86 @@ window.baguetteBox = (function () {
return [selectorData.galleries, options];
}
+ function bindCbzClickListeners(tagsNodeList, userOptions) {
+ var cbzNodes = [].filter.call(tagsNodeList, function (element) {
+ return re_cbz.test(element.href);
+ });
+ if (!tagsNodeList.length) {
+ return;
+ }
+
+ [].forEach.call(cbzNodes, function (cbzElement, index) {
+ var gallery = [];
+ var eventHandler = function (e) {
+ if (ctrl(e) || e && e.shiftKey)
+ return true;
+
+ e.preventDefault ? e.preventDefault() : e.returnValue = false;
+ fillCbzGallery(gallery, cbzElement, eventHandler).then(function () {
+ prepareOverlay(gallery, userOptions);
+ showOverlay(0);
+ }
+ ).catch(function (reason) {
+ console.error("cbz-ded", reason);
+ var t;
+ try {
+ t = uricom_dec(cbzElement.href.split('/').pop());
+ } catch (ex) { }
+
+ var msg = "Could not browse " + (t ? t : 'archive');
+ try {
+ msg += "\n\n" + reason.message;
+ } catch (ex) { }
+ toast.err(20, msg, 'cbz-ded');
+ });
+ }
+
+ bind(cbzElement, "click", eventHandler);
+ })
+ }
+
+ function fillCbzGallery(gallery, cbzElement, eventHandler) {
+ if (gallery.length !== 0) {
+ return Promise.resolve();
+ }
+ var href = cbzElement.href;
+ var zlsHref = href + (href.indexOf("?") === -1 ? "?" : "&") + "zls";
+ return fetch(zlsHref)
+ .then(function (response) {
+ if (response.ok) {
+ return response.json();
+ } else {
+ throw new Error("Archive is invalid");
+ }
+ })
+ .then(function (fileList) {
+ var imagesList = fileList.map(function (file) {
+ return file["fn"];
+ }).filter(function (file) {
+ return file.indexOf(".") !== -1
+ && cbz_pics.indexOf(file.split(".").pop()) !== -1;
+ }).sort();
+
+ if (imagesList.length === 0) {
+ throw new Error("Archive does not contain any images");
+ }
+
+ imagesList.forEach(function (imageName, index) {
+ var imageHref = href
+ + (href.indexOf("?") === -1 ? "?" : "&")
+ + "zget="
+ + encodeURIComponent(imageName);
+
+ var galleryItem = {
+ href: imageHref,
+ imageElement: cbzElement,
+ eventHandler: eventHandler,
+ };
+ gallery.push(galleryItem);
+ });
+ });
+ }
+
function clearCachedData() {
for (var selector in data)
if (data.hasOwnProperty(selector))
@@ -212,10 +310,12 @@ window.baguetteBox = (function () {
'' +
'' +
'' +
+ '' +
'' +
'' +
'' +
- '' +
+ '' +
+ '' +
'' +
'' +
''
@@ -229,12 +329,17 @@ window.baguetteBox = (function () {
btnNext = ebi('bbox-next');
btnHelp = ebi('bbox-help');
btnAnim = ebi('bbox-anim');
+ btnReadDir = ebi('bbox-readdir');
btnRotL = ebi('bbox-rotl');
btnRotR = ebi('bbox-rotr');
btnSel = ebi('bbox-tsel');
btnFull = ebi('bbox-full');
+ btnZoom = ebi('bbzoom');
btnVmode = ebi('bbox-vmode');
btnClose = ebi('bbox-close');
+
+ bcfg_bind(options, 'bbzoom', 'bbzoom', false, setzoom);
+ setzoom();
}
function halp() {
@@ -250,10 +355,11 @@ window.baguetteBox = (function () {
['end', 'last file'],
['R', 'rotate (shift=ccw)'],
['F', 'toggle fullscreen'],
+ ['Z', 'toggle zoom/stretch'],
['S', 'toggle file selection'],
['space, P, K', 'video: play / pause'],
['U', 'video: seek 10sec back'],
- ['P', 'video: seek 10sec ahead'],
+ ['O', 'video: seek 10sec ahead'],
['0..9', 'video: seek 0%..90%'],
['M', 'video: toggle mute'],
['V', 'video: toggle loop'],
@@ -301,9 +407,9 @@ window.baguetteBox = (function () {
else if (e.shiftKey && kl != "r")
return;
else if (k == "ArrowLeft" || k == "Left" || kl == "j")
- showPreviousImage();
+ showLeftImage();
else if (k == "ArrowRight" || k == "Right" || kl == "l")
- showNextImage();
+ showRightImage();
else if (k == "Escape" || k == "Esc")
hideOverlay();
else if (k == "Home")
@@ -332,6 +438,8 @@ window.baguetteBox = (function () {
}
else if (kl == "f")
tglfull();
+ else if (kl == "z")
+ btnZoom.click();
else if (kl == "s")
tglsel();
else if (kl == "r")
@@ -353,6 +461,21 @@ window.baguetteBox = (function () {
tt.show.call(this);
}
+ function toggleReadDir() {
+ var o = options,
+ next = options.readDirRtl ? "ltr" : "rtl";
+ swrite('greaddir', next);
+ slider.className = "no-transition";
+ options = {};
+ setOptions(o);
+ updateOffset(true);
+ window.getComputedStyle(slider).opacity; // force a restyle
+ slider.className = "";
+
+ if (tt.en)
+ tt.show.call(this);
+ }
+
function setVmode() {
var v = vid();
ebi('bbox-vmode').style.display = v ? '' : 'none';
@@ -424,6 +547,12 @@ window.baguetteBox = (function () {
}
}
+ function setzoom() {
+ var sel = clgot(btnZoom, 'on')
+ clmod(ebi('bbox-overlay'), 'fill', sel);
+ btnState(btnZoom, sel);
+ }
+
function tglsel() {
var o = findfile()[3];
clmod(o.closest('tr'), 'sel', 't');
@@ -451,10 +580,14 @@ window.baguetteBox = (function () {
'rgba(153,34,85,0.7)' : '';
img.style.borderRadius = sel ? '1em' : '';
- btnSel.style.color = sel ? '#fff' : '';
- btnSel.style.background = sel ? '#d48' : '';
- btnSel.style.textShadow = sel ? '1px 1px 0 #b38' : '';
- btnSel.style.boxShadow = sel ? '.15em .15em 0 #502' : '';
+ btnState(btnSel, sel);
+ }
+
+ function btnState(btn, sel) {
+ btn.style.color = sel ? '#fff' : '';
+ btn.style.background = sel ? '#d48' : '';
+ btn.style.textShadow = sel ? '1px 1px 0 #b38' : '';
+ btn.style.boxShadow = sel ? '.15em .15em 0 #502' : '';
}
function keyUpHandler(e) {
@@ -492,12 +625,13 @@ window.baguetteBox = (function () {
bind(document, 'fullscreenchange', onFSC);
bind(overlay, 'click', overlayClickHandler);
bind(overlay, 'wheel', overlayWheelHandler);
- bind(btnPrev, 'click', showPreviousImage);
- bind(btnNext, 'click', showNextImage);
+ bind(btnPrev, 'click', showLeftImage);
+ bind(btnNext, 'click', showRightImage);
bind(btnClose, 'click', hideOverlay);
bind(btnVmode, 'click', tglVmode);
bind(btnHelp, 'click', halp);
bind(btnAnim, 'click', anim);
+ bind(btnReadDir, 'click', toggleReadDir);
bind(btnRotL, 'click', rotl);
bind(btnRotR, 'click', rotr);
bind(btnSel, 'click', tglsel);
@@ -515,12 +649,13 @@ window.baguetteBox = (function () {
unbind(document, 'fullscreenchange', onFSC);
unbind(overlay, 'click', overlayClickHandler);
unbind(overlay, 'wheel', overlayWheelHandler);
- unbind(btnPrev, 'click', showPreviousImage);
- unbind(btnNext, 'click', showNextImage);
+ unbind(btnPrev, 'click', showLeftImage);
+ unbind(btnNext, 'click', showRightImage);
unbind(btnClose, 'click', hideOverlay);
unbind(btnVmode, 'click', tglVmode);
unbind(btnHelp, 'click', halp);
unbind(btnAnim, 'click', anim);
+ unbind(btnReadDir, 'click', toggleReadDir);
unbind(btnRotL, 'click', rotl);
unbind(btnRotR, 'click', rotr);
unbind(btnSel, 'click', tglsel);
@@ -571,6 +706,23 @@ window.baguetteBox = (function () {
btnAnim.textContent = ['โ', 'โฎบ', 'โก'][anims.indexOf(an)];
btnAnim.setAttribute('tt', 'animation: ' + an);
+ options.readDirRtl = sread('greaddir') === "rtl";
+ var msg;
+ if (options.readDirRtl) {
+ btnReadDir.innerText = "rtl";
+ msg = "browse from right to left";
+ slider.style.display = "flex";
+ slider.style.flexDirection = "row-reverse";
+ } else {
+ btnReadDir.innerText = "ltr";
+ msg = "browse from left to right";
+ slider.style.flexDirection = "";
+ slider.style.display = "block";
+ }
+ btnReadDir.setAttribute("tt", msg);
+ btnReadDir.setAttribute("aria-label", msg);
+
+
slider.style.transition = (options.animation === 'fadeIn' ? 'opacity .3s ease' :
options.animation === 'slideIn' ? '' : 'none');
@@ -612,7 +764,7 @@ window.baguetteBox = (function () {
overlay.style.display = 'block';
// Fade in overlay
setTimeout(function () {
- overlay.className = 'visible';
+ clmod(overlay, 'visible', 1);
if (options.bodyClass && document.body.classList)
document.body.classList.add(options.bodyClass);
@@ -621,7 +773,7 @@ window.baguetteBox = (function () {
}, 50);
if (options.onChange && !url_ts)
- options.onChange(currentIndex, imagesElements.length);
+ options.onChange.call(currentGallery, currentIndex, imagesElements.length);
url_ts = null;
documentLastFocus = document.activeElement;
@@ -658,7 +810,7 @@ window.baguetteBox = (function () {
unbindEvents();
// Fade out and hide the overlay
- overlay.className = '';
+ clmod(overlay, 'visible');
setTimeout(function () {
overlay.style.display = 'none';
if (options.bodyClass && document.body.classList)
@@ -683,6 +835,7 @@ window.baguetteBox = (function () {
if (v == keep)
continue;
+ unbind(v, 'touchstart', vtouch, nonPassiveEvent);
unbind(v, 'error', lerr);
v.src = '';
v.load();
@@ -749,11 +902,11 @@ window.baguetteBox = (function () {
imageContainer.removeChild(imageContainer.firstChild);
var imageElement = galleryItem.imageElement,
- imageSrc = imageElement.href,
+ imageSrc = galleryItem.href || imageElement.href,
is_vid = re_v.test(imageSrc),
thumbnailElement = imageElement.querySelector('img, video'),
imageCaption = typeof options.captions === 'function' ?
- options.captions.call(currentGallery, imageElement) :
+ options.captions.call(currentGallery, imageElement, index) :
imageElement.getAttribute('data-caption') || imageElement.title;
imageSrc = addq(imageSrc, 'cache');
@@ -812,15 +965,27 @@ window.baguetteBox = (function () {
un_pp = 0;
return playpause(); // browser undid space hotkey
}
- show_buttons(this.paused ? 1 : 0);
+ show_buttons(this.paused ? 0 : 1);
}
- function showNextImage(e) {
+ function showRightImage(e) {
+ ev(e);
+ var dir = options.readDirRtl ? -1 : 1;
+ return show(currentIndex + dir);
+ }
+
+ function showLeftImage(e) {
+ ev(e);
+ var dir = options.readDirRtl ? 1 : -1;
+ return show(currentIndex + dir);
+ }
+
+ function showNextImageIgnoreReadDir(e) {
ev(e);
return show(currentIndex + 1);
}
- function showPreviousImage(e) {
+ function showPreviousImageIgnoreReadDir(e) {
ev(e);
return show(currentIndex - 1);
}
@@ -848,12 +1013,14 @@ window.baguetteBox = (function () {
}
if (index < 0)
- return bounceAnimation('left');
+ return bounceAnimation(options.readDirRtl ? 'right' : 'left');
if (index >= imagesElements.length)
- return bounceAnimation('right');
+ return bounceAnimation(options.readDirRtl ? 'left' : 'right');
+ var orot;
try {
+ orot = vidimg().getAttribute('rot');
vid().pause();
}
catch (ex) { }
@@ -871,6 +1038,9 @@ window.baguetteBox = (function () {
else if (toast.tag == 'bb-ded')
toast.hide();
+ if (orot && im.getAttribute('rot') === null)
+ rotn(orot / 90, 1);
+
if (options.animation == 'none')
unvid(vid());
else
@@ -881,13 +1051,13 @@ window.baguetteBox = (function () {
unfig(index);
if (options.onChange)
- options.onChange(currentIndex, imagesElements.length);
+ options.onChange.call(currentGallery, currentIndex, imagesElements.length);
return true;
}
var prev_cw = 0, prev_ch = 0, unrot_timer = null;
- function rotn(n) {
+ function rotn(n, asap) {
var el = vidimg(),
orot = parseInt(el.getAttribute('rot') || 0),
frot = orot + (n || 0) * 90;
@@ -902,6 +1072,8 @@ window.baguetteBox = (function () {
if (!n && prev_cw === cw && prev_ch === ch)
return; // reflow noop
+ clmod(el, 'asap', asap);
+
prev_cw = cw;
prev_ch = ch;
var rot = frot,
@@ -911,8 +1083,13 @@ window.baguetteBox = (function () {
dl = el.closest('div').querySelector('figcaption a'),
vw = cw,
vh = ch - dl.offsetHeight + magic,
- pmag = Math.min(1, Math.min(vw / ih, vh / iw)),
- wmag = Math.min(1, Math.min(vw / iw, vh / ih));
+ pmag = Math.min(vw / ih, vh / iw),
+ wmag = Math.min(vw / iw, vh / ih);
+
+ if (!options.bbzoom) {
+ pmag = Math.min(1, pmag);
+ wmag = Math.min(1, wmag);
+ }
while (rot < 0) rot += 360;
while (rot >= 360) rot -= 360;
@@ -956,7 +1133,7 @@ window.baguetteBox = (function () {
return;
clmod(el, 'nt', 1);
- el.removeAttribute('rot');
+ el.setAttribute('rot', 0);
el.removeAttribute("style");
rot = el.offsetHeight;
clmod(el, 'nt');
@@ -1005,7 +1182,7 @@ window.baguetteBox = (function () {
function vidEnd() {
if (this == vid() && vnext)
- showNextImage();
+ showNextImageIgnoreReadDir();
}
function setloop(side) {
@@ -1066,11 +1243,12 @@ window.baguetteBox = (function () {
return false;
}
- function updateOffset() {
- var offset = -currentIndex * 100 + '%',
+ function updateOffset(noTransition) {
+ var dir = options.readDirRtl ? 1 : -1,
+ offset = dir * currentIndex * 100 + '%',
xform = slider.style.perspective !== undefined;
- if (options.animation === 'fadeIn') {
+ if (options.animation === 'fadeIn' && !noTransition) {
slider.style.opacity = 0;
setTimeout(function () {
xform ?
@@ -1098,6 +1276,7 @@ window.baguetteBox = (function () {
setloop();
}
}
+ bind(v, 'touchstart', vtouch, nonPassiveEvent);
}
selbg();
mp_ctl();
@@ -1116,10 +1295,10 @@ window.baguetteBox = (function () {
fx = x / (rc.right - rc.left);
if (fx < 0.3)
- return showPreviousImage();
+ return showLeftImage();
if (fx > 0.7)
- return showNextImage();
+ return showRightImage();
show_buttons('t');
@@ -1175,8 +1354,8 @@ window.baguetteBox = (function () {
return {
run: run,
show: show,
- showNext: showNextImage,
- showPrevious: showPreviousImage,
+ showNext: showRightImage,
+ showPrevious: showLeftImage,
relseek: relseek,
urltime: urltime,
playpause: playpause,
@@ -1184,3 +1363,5 @@ window.baguetteBox = (function () {
destroy: destroyPlugin
};
})();
+
+J_BBX = 2;
diff --git a/copyparty/web/browser.css b/copyparty/web/browser.css
index a40c72e2..53b59bff 100644
--- a/copyparty/web/browser.css
+++ b/copyparty/web/browser.css
@@ -84,6 +84,13 @@
--sort-1: #fb0;
--sort-2: #d09;
+ --sz-b: #aaa;
+ --sz-k: #4ff;
+ --sz-m: var(--tab-alt);
+ --sz-g: var(--a);
+ --sz-t: var(--sz-g);
+ --sz-p: var(--sz-t);
+
--srv-1: #aaa;
--srv-2: #a73;
--srv-3: #f4c;
@@ -187,6 +194,9 @@ html.y {
--sort-1: #059;
--sort-2: #f5d;
+ --sz-b: #777;
+ --sz-k: #380;
+
--srv-1: #555;
--srv-2: #c83;
--srv-3: #c0a;
@@ -344,6 +354,9 @@ html.cz {
--btn-1-bb: .2em solid #e90;
--btn-1-bs: 0 .1em .8em rgba(255,205,0,0.9);
+ --sz-b: #ddd;
+ --sz-k: #c9f;
+
--srv-3: #fff;
--u2-tab-b1: var(--bg-d3);
@@ -740,6 +753,15 @@ html.y #files tr.fade a {
#files tbody tr td:last-child {
white-space: nowrap;
}
+#files span.fsz_B { color: var(--sz-b); }
+#files span.fsz_K { color: var(--sz-k); }
+#files span.fsz_M { color: var(--sz-m); }
+#files span.fsz_G { color: var(--sz-g); }
+#files span.fsz_T { color: var(--sz-t); }
+#files span.fsz_P { color: var(--sz-p); }
+html.y #files span.fsz_G,
+html.y #files span.fsz_T,
+html.y #files span.fsz_P { font-weight: bold }
#files thead th[style] {
width: auto !important;
}
@@ -865,6 +887,9 @@ html.y #path a:hover {
#srv_info2 span {
color: var(--srv-1);
}
+#srv_info2 a {
+ padding: 0;
+}
#srv_info2 {
display: none;
}
@@ -1011,6 +1036,7 @@ html.dz #flogout {
box-shadow: 0 .1em 1.2em var(--g-play-sh);
}
#files tbody tr.sel td,
+#files tbody tr.sel span,
#ggrid>a.sel,
#ggrid>a[tt].sel {
color: var(--g-sel-fg);
@@ -1155,6 +1181,9 @@ html.y #widget.open {
border: 1px solid var(--bg-u5);
border-width: 0 .1em 0 0;
}
+#wzip1 {
+ margin-right: .2em;
+}
#wfm.act+#wzip1+#wzip,
#wfm.act+#wzip1+#wzip+#wnp {
margin-left: .2em;
@@ -1911,6 +1940,8 @@ html.y #tree.nowrap .ntree a+a:hover {
#rui td input[type="text"] {
width: 100%;
}
+#rui #rn_n_d,
+#rui #rn_n_s,
#shui td.exs input[type="text"] {
width: 3em;
}
@@ -2115,6 +2146,7 @@ html.noscroll .sbar::-webkit-scrollbar {
width: 100%;
height: 100%;
text-align: center;
+ flex: none;
}
.full-image figure {
display: inline;
@@ -2134,6 +2166,16 @@ html.noscroll .sbar::-webkit-scrollbar {
vertical-align: middle;
transition: transform .23s, left .23s, top .23s, width .23s, height .23s;
}
+.full-image img.asap,
+.full-image video.asap {
+ transition: none;
+}
+#bbox-overlay.fill .full-image img,
+#bbox-overlay.fill .full-image video {
+ width: 100%;
+ height: 100%;
+ object-fit: contain;
+}
html.bb_fsc .full-image img,
html.bb_fsc .full-image video {
max-height: 100%;
@@ -2309,6 +2351,9 @@ html.y #bbox-overlay figcaption a {
0%, 100% {transform: scale(0)}
50% {transform: scale(1)}
}
+.no-transition {
+ transition: none !important;
+}
@@ -3106,9 +3151,6 @@ html.bz .ghead {
html.b #files td {
padding: .5em .7em;
}
-html.b #ggrid>a {
- margin: .8em;
-}
html.b .btn {
top: -.1em;
}
@@ -3253,8 +3295,8 @@ html.d #treepar {
}
html.b #ggrid {
- padding: 0 2em 2em 0;
- gap: .5em 3em;
+ padding: 0 0 2em 0;
+ gap: 1em 1.5em;
}
#ggrid > a {
@@ -3496,7 +3538,6 @@ html.ez {
html.e {
text-shadow: none;
}
-
html.e #files,
html.e #u2conf input[type="checkbox"]:hover + label,
html.e .tgl.btn.on:hover,
@@ -3596,6 +3637,10 @@ html.e #srv_info {
display: flex;
align-items: center;
}
+html.e #acc_info span.warn,
+html.e #acc_info a {
+ color: var(--white);
+}
html.e #flogout:before {
padding-left: 0.2em;
padding-right: 0.4em;
@@ -4080,3 +4125,47 @@ html.e #doc {
html.e #detree {
padding: 0px;
}
+
+#rcm {
+ position: absolute;
+ display: none;
+ background: #fff;
+ background: var(--bg);
+ border: 1px solid var(--bg-u3);
+ outline: none;
+ border-radius: .3rem;
+ box-shadow: 0 0 .3rem var(--bg-d3);
+ z-index: 3;
+}
+
+#rcm > * {
+ display: block;
+}
+
+#rcm > a {
+ padding: .2rem .3rem;
+}
+
+#rcm > .hide {
+ display: none;
+}
+
+#rcm > a:hover {
+ background: var(--bg-d2);
+}
+
+#rcm > .sep {
+ margin: 0 .2rem;
+ border-bottom: 1px solid var(--a-gray);
+}
+
+#tempname {
+ color: var(--fg);
+ background: var(--txt-bg);
+ border: none;
+ box-shadow: 0 0 2px var(--txt-sh);
+ border-bottom: 1px solid #999;
+ border-color: var(--a);
+ border-radius: .2em;
+ padding: .2em .3em;
+}
\ No newline at end of file
diff --git a/copyparty/web/browser.html b/copyparty/web/browser.html
index 3b5c89ba..e8a91c5a 100644
--- a/copyparty/web/browser.html
+++ b/copyparty/web/browser.html
@@ -9,7 +9,7 @@
-{{- html_head }}
+{{ html_head }}
{%- if css %}
{%- endif %}
@@ -51,8 +51,9 @@
+
@@ -128,17 +129,17 @@
+
+
+ {%- if lang != "eng" %}
+
+ {%- endif %}
{%- if js %}
{%- endif %}
+
-
diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js
index 6c1f6184..4f5c4382 100644
--- a/copyparty/web/browser.js
+++ b/copyparty/web/browser.js
@@ -1,12 +1,12 @@
"use strict";
+var J_BRW = 1;
+
var XHR = XMLHttpRequest,
img_re = /\.(a?png|avif|bmp|gif|heif|jpe?g|jfif|svg|webp|webm|mkv|mp4|m4v|mov)(\?|$)/i;
-// please add translations in alphabetic order, but keep "eng" and "nor" first
-// (lines ending with //m are machine translations)
-var Ls = {
- "eng": {
+if (1)
+ Ls.eng = {
"tt": "English",
"cols": {
@@ -26,7 +26,7 @@ var Ls = {
"resw": "horizontal resolution",
"resh": "vertical resolution",
"chs": "audio channels",
- "hz": "sample rate"
+ "hz": "sample rate",
},
"hks": [
@@ -89,6 +89,8 @@ var Ls = {
["M", "close textfile"],
["E", "edit textfile"],
["S", "select file (for cut/copy/rename)"],
+ ["Y", "download textfile"],
+ ["โง J", "beautify json"],
]
],
@@ -121,7 +123,7 @@ var Ls = {
"ot_unpost": "unpost: delete your recent uploads, or abort unfinished ones",
"ot_bup": "bup: basic uploader, even supports netscape 4.0",
"ot_mkdir": "mkdir: create a new directory",
- "ot_md": "new-md: create a new markdown document",
+ "ot_md": "new-file: create a new textfile",
"ot_msg": "msg: send a message to the server log",
"ot_mp": "media player options",
"ot_cfg": "configuration options",
@@ -130,7 +132,7 @@ var Ls = {
"ot_noie": 'Please use Chrome / Firefox / Edge',
"ab_mkdir": "make directory",
- "ab_mkdoc": "new markdown doc",
+ "ab_mkdoc": "new textfile",
"ab_msg": "send msg to srv log",
"ay_path": "skip to folders",
@@ -158,7 +160,7 @@ var Ls = {
"ul_par": "parallel uploads:",
"ut_rand": "randomize filenames",
"ut_u2ts": "copy the last-modified timestamp$Nfrom your filesystem to the server\">๐
",
- "ut_ow": "overwrite existing files on the server?$N๐ก๏ธ: never (will generate a new filename instead)$N๐: overwrite if server-file is older than yours$Nโป๏ธ: always overwrite if the files are different",
+ "ut_ow": "overwrite existing files on the server?$N๐ก๏ธ: never (will generate a new filename instead)$N๐: overwrite if server-file is older than yours$Nโป๏ธ: always overwrite if the files are different$Nโญ๏ธ: unconditionally skip all existing files",
"ut_mt": "continue hashing other files while uploading$N$Nmaybe disable if your CPU or HDD is a bottleneck",
"ut_ask": 'ask for confirmation before upload starts">๐ญ',
"ut_pot": "improve upload speed on slow devices$Nby making the UI less complex",
@@ -209,6 +211,7 @@ var Ls = {
"u_nav_b": 'FilesOne folder',
"cl_opts": "switches",
+ "cl_hfsz": "filesize",
"cl_themes": "theme",
"cl_langs": "language",
"cl_ziptype": "folder download",
@@ -222,11 +225,13 @@ var Ls = {
"cl_reset": "reset",
"cl_hpick": "tap on column headers to hide in the table below",
"cl_hcancel": "column hiding aborted",
+ "cl_rcm": "right-click menu",
"ct_grid": '็ฐ the grid',
"ct_ttips": 'โ โก โ">โน๏ธ tooltips',
"ct_thumb": 'in grid-view, toggle icons or thumbnails$NHotkey: T">๐ผ๏ธ thumbs',
"ct_csel": 'use CTRL and SHIFT for file selection in grid-view">sel',
+ "ct_dl": 'force download (don\'t display inline) when a file is clicked">dl',
"ct_ihop": 'when the image viewer is closed, scroll down to the last viewed file">gโฎฏ',
"ct_dots": 'show hidden files (if server permits)">dotfiles',
"ct_qdel": 'when deleting files, only ask for confirmation once">qdel',
@@ -263,6 +268,7 @@ var Ls = {
"cdt_lim": "max number of files to show in a folder",
"cdt_ask": "when scrolling to the bottom,$Ninstead of loading more files,$Nask what to do",
"cdt_hsort": "how many sorting rules (<code>,sorthref</code>) to include in media-URLs. Setting this to 0 will also ignore sorting-rules included in media links when clicking them",
+ "cdt_ren": "enable custom right-click menu, you can still access the regular menu by pressing the shift key and right-clicking",
"tt_entree": "show navpane (directory tree sidebar)$NHotkey: B",
"tt_detree": "show breadcrumbs$NHotkey: B",
@@ -420,9 +426,10 @@ var Ls = {
"fcc_warn": 'copied {0} items to clipboard\n\nbut: only this browser-tab can paste them\n(since the selection is so absolutely massive)',
"fp_apply": "use these names",
+ "fp_skip": "skip conflicts", // TLNote: "skip existing names" (filenames taken in target folder)
"fp_ecut": "first cut or copy some files / folders to paste / move\n\nnote: you can cut / paste across different browser tabs",
- "fp_ename": "{0} items cannot be moved here because the names are already taken. Give them new names below to continue, or blank the name to skip them:",
- "fcp_ename": "{0} items cannot be copied here because the names are already taken. Give them new names below to continue, or blank the name to skip them:",
+ "fp_ename": "{0} items cannot be moved here because the names are already taken. Give them new names below to continue, or blank the name (\"skip conflicts\") to skip them:",
+ "fcp_ename": "{0} items cannot be copied here because the names are already taken. Give them new names below to continue, or blank the name (\"skip conflicts\") to skip them:",
"fp_emore": "there are still some filename collisions left to fix",
"fp_ok": "move OK",
"fcp_ok": "copy OK",
@@ -441,6 +448,8 @@ var Ls = {
"fcp_both_b": 'CopyUpload',
"mk_noname": "type a name into the text field on the left before you do that :p",
+ "nmd_i1": "also add the file extension you want, for example .md",
+ "nmd_i2": "you can only create .md files because you don't have the delete-permission",
"tv_load": "Loading text document:\n\n{0}\n\n{1}% ({2} of {3} MiB loaded)",
"tv_xe1": "could not load textfile:\n\nerror ",
@@ -451,6 +460,7 @@ var Ls = {
"tvt_prev": "show previous document$NHotkey: i\">โฌ prev",
"tvt_next": "show next document$NHotkey: K\">โฌ next",
"tvt_sel": "select file ( for cut / copy / delete / ... )$NHotkey: S\">sel",
+ "tvt_j": "beautify json$NHotkey: shift-J\">j",
"tvt_edit": "open file in text editor$NHotkey: E\">โ๏ธ edit",
"tvt_tail": "monitor file for changes; show new lines in real time\">๐ก follow",
"tvt_wrap": "word-wrap\">โต",
@@ -635,10751 +645,64 @@ var Ls = {
"ur_um": "Finished;\n{0} uploads OK,\n{1} uploads failed, sorry",
"ur_sm": "Finished;\n{0} files found on server,\n{1} files NOT found on server",
+ "rc_opn": "open",
+ "rc_ply": "play",
+ "rc_pla": "play as audio",
+ "rc_txt": "open in textfile viewer",
+ "rc_md": "open in text editor",
+ "rc_dl": "download",
+ "rc_zip": "download as archive",
+ "rc_cpl": "copy link",
+ "rc_del": "delete",
+ "rc_cut": "cut",
+ "rc_cpy": "copy",
+ "rc_pst": "paste",
+ "rc_nfo": "new folder",
+ "rc_nfi": "new file",
+ "rc_sal": "select all",
+ "rc_sin": "invert selection",
+
"lang_set": "refresh to make the change take effect?",
- },
- "nor": {
- "tt": "Norsk",
-
- "cols": {
- "c": "handlingsknapper",
- "dur": "varighet",
- "q": "kvalitet / bitrate",
- "Ac": "lyd-format",
- "Vc": "video-format",
- "Fmt": "format / innpakning",
- "Ahash": "lyd-kontrollsum",
- "Vhash": "video-kontrollsum",
- "Res": "opplรธsning",
- "T": "filtype",
- "aq": "lydkvalitet / bitrate",
- "vq": "videokvalitet / bitrate",
- "pixfmt": "fargekoding / detaljenivรฅ",
- "resw": "horisontal opplรธsning",
- "resh": "vertikal opplรธsning",
- "chs": "lydkanaler",
- "hz": "lyd-opplรธsning"
- },
-
- "hks": [
- [
- "ymse",
- ["ESC", "lukk saker og ting"],
-
- "filbehandler",
- ["G", "listevisning eller ikoner"],
- ["T", "miniatyrbilder pรฅ/av"],
- ["โง A/D", "ikonstรธrrelse"],
- ["ctrl-K", "slett valgte"],
- ["ctrl-X", "klipp ut valgte"],
- ["ctrl-C", "kopiรฉr til utklippstavle"],
- ["ctrl-V", "lim inn (flytt/kopiรฉr)"],
- ["Y", "last ned valgte"],
- ["F2", "endre navn pรฅ valgte"],
-
- "filmarkering",
- ["space", "marker fil"],
- ["โ/โ", "flytt markรธr"],
- ["ctrl โ/โ", "flytt markรธr og scroll"],
- ["โง โ/โ", "velg forr./neste fil"],
- ["ctrl-A", "velg alle filer / mapper"],
- ], [
- "navigering",
- ["B", "mappehierarki eller filsti"],
- ["I/K", "forr./neste mappe"],
- ["M", "ett nivรฅ opp (eller lukk)"],
- ["V", "vis mapper eller tekstfiler"],
- ["A/D", "panelstรธrrelse"],
- ], [
- "musikkspiller",
- ["J/L", "forr./neste sang"],
- ["U/O", "hopp 10sek bak/frem"],
- ["0..9", "hopp til 0%..90%"],
- ["P", "pause, eller start / fortsett"],
- ["S", "marker spillende sang"],
- ["Y", "last ned sang"],
- ], [
- "bildeviser",
- ["J/L, โ/โ", "forr./neste bilde"],
- ["Home/End", "fรธrste/siste bilde"],
- ["F", "fullskjermvisning"],
- ["R", "rotere mot hรธyre"],
- ["โง R", "rotere mot venstre"],
- ["S", "marker bilde"],
- ["Y", "last ned bilde"],
- ], [
- "videospiller",
- ["U/O", "hopp 10sek bak/frem"],
- ["P/K/Space", "pause / fortsett"],
- ["C", "fortsett til neste fil"],
- ["V", "gjenta avspilling"],
- ["M", "lyd av/pรฅ"],
- ["[ og ]", "gjentaksintervall"],
- ], [
- "dokumentviser",
- ["I/K", "forr./neste fil"],
- ["M", "lukk tekstdokument"],
- ["E", "rediger tekstdokument"],
- ["S", "marker fil (for F2/ctrl-x/...)"],
- ["Y", "last ned tekstfil"],
- ]
- ],
-
- "m_ok": "OK",
- "m_ng": "Avbryt",
-
- "enable": "Aktiv",
- "danger": "VARSKU",
- "clipped": "kopiert til utklippstavlen",
-
- "ht_s1": "sekund",
- "ht_s2": "sekunder",
- "ht_m1": "minutt",
- "ht_m2": "minutter",
- "ht_h1": "time",
- "ht_h2": "timer",
- "ht_d1": "dag",
- "ht_d2": "dager",
- "ht_and": " og ",
-
- "goh": "kontrollpanel",
- "gop": 'naviger til mappen fรธr denne">forr.',
- "gou": 'naviger ett nivรฅ opp">opp',
- "gon": 'naviger til mappen etter denne">neste',
- "logout": "Logg ut ",
- "login": "Logg inn",
- "access": " tilgang",
- "ot_close": "lukk verktรธy",
- "ot_search": "sรธk etter filer ved รฅ angi filnavn, mappenavn, tid, stรธrrelse, eller metadata som sangtittel / artist / osv.$N$N<code>foo bar</code> = inneholder bรฅde ยซfooยป og ยซbarยป,$N<code>foo -bar</code> = inneholder ยซfooยป men ikke ยซbarยป,$N<code>^yana .opus$</code> = starter med ยซyanaยป, filtype ยซopusยป$N<code>"try unite"</code> = ยซtry uniteยป eksakt$N$Ndatoformat er iso-8601, sรฅ f.eks.$N<code>2009-12-31</code> eller <code>2020-09-12 23:30:00</code>",
- "ot_unpost": "unpost: slett filer som du nylig har lastet opp; ยซangre-knappenยป",
- "ot_bup": "bup: tradisjonell / primitiv filopplastning,$N$Nfungerer i omtrent samtlige nettlesere",
- "ot_mkdir": "mkdir: lag en ny mappe",
- "ot_md": "new-md: lag et nytt markdown-dokument",
- "ot_msg": "msg: send en beskjed til serverloggen",
- "ot_mp": "musikkspiller-instillinger",
- "ot_cfg": "andre innstillinger",
- "ot_u2i": 'up2k: last opp filer (hvis du har skrivetilgang) eller bytt til sรธkemodus for รฅ sjekke om filene finnes et-eller-annet sted pรฅ serveren$N$Nopplastninger kan gjenopptas etter avbrudd, skjer stykkevis for potensielt hรธyere ytelse, og ivaretar datostempling -- men bruker litt mer prosessorkraft enn [๐] (den primitive opplasteren "bup")
mens opplastninger foregรฅr sรฅ vises fremdriften her oppe!',
- "ot_u2w": 'up2k: filopplastning med stรธtte for รฅ gjenoppta avbrutte opplastninger -- steng ned nettleseren og dra de samme filene inn i nettleseren igjen for รฅ plukke opp igjen der du slapp$N$Nopplastninger skjer stykkevis for potensielt hรธyere ytelse, og ivaretar datostempling -- men bruker litt mer prosessorkraft enn [๐] (den primitive opplasteren "bup")
mens opplastninger foregรฅr sรฅ vises fremdriften her oppe!',
- "ot_noie": 'Fungerer mye bedre i Chrome / Firefox / Edge',
-
- "ab_mkdir": "lag mappe",
- "ab_mkdoc": "nytt dokument",
- "ab_msg": "send melding",
-
- "ay_path": "gรฅ videre til mapper",
- "ay_files": "gรฅ videre til filer",
-
- "wt_ren": "gi nye navn til de valgte filene$NSnarvei: F2",
- "wt_del": "slett de valgte filene$NSnarvei: ctrl-K",
- "wt_cut": "klipp ut de valgte filene <small>(for รฅ lime inn et annet sted)</small>$NSnarvei: ctrl-X",
- "wt_cpy": "kopiรฉr de valgte filene til utklippstavlen$N(for รฅ lime inn et annet sted)$NSnarvei: ctrl-C",
- "wt_pst": "lim inn filer (som tidligere ble klippet ut / kopiert et annet sted)$NSnarvei: ctrl-V",
- "wt_selall": "velg alle filer$NSnarvei: ctrl-A (mens fokus er pรฅ en fil)",
- "wt_selinv": "inverter utvalg",
- "wt_zip1": "last ned denne mappen som et arkiv",
- "wt_selzip": "last ned de valgte filene som et arkiv",
- "wt_seldl": "last ned de valgte filene$NSnarvei: Y",
- "wt_npirc": "kopiรฉr sang-info (irc-formatert)",
- "wt_nptxt": "kopiรฉr sang-info",
- "wt_m3ua": "legg til sang i m3u-spilleliste$N(husk รฅ klikke pรฅ ๐ปcopy senere)",
- "wt_m3uc": "kopiรฉr m3u-spillelisten til utklippstavlen",
- "wt_grid": "bytt mellom ikoner og listevisning$NSnarvei: G",
- "wt_prev": "forrige sang$NSnarvei: J",
- "wt_play": "play / pause$NSnarvei: P",
- "wt_next": "neste sang$NSnarvei: L",
-
- "ul_par": "samtidige handl.:",
- "ut_rand": "finn opp nye tilfeldige filnavn",
- "ut_u2ts": "gi filen pรฅ serveren samme$Ntidsstempel som lokalt hos deg\">๐
",
- "ut_ow": "overskrive eksisterende filer pรฅ serveren?$N๐ก๏ธ: aldri (finner pรฅ et nytt filnavn istedenfor)$N๐: overskriv hvis serverens fil er eldre$Nโป๏ธ: alltid, gitt at innholdet er forskjellig",
- "ut_mt": "fortsett รฅ befare kรธen mens opplastning foregรฅr$N$Nskru denne av dersom du har en$Ntreg prosessor eller harddisk",
- "ut_ask": 'bekreft filutvalg fรธr opplastning starter">๐ญ',
- "ut_pot": "forbedre ytelsen pรฅ trege enheter ved รฅ$Nforenkle brukergrensesnittet",
- "ut_srch": "utfรธr sรธk istedenfor รฅ laste opp --$Nleter igjennom alle mappene du har lov til รฅ se",
- "ut_par": "sett til 0 for รฅ midlertidig stanse opplastning$N$Nhรธye verdier (4 eller 8) kan gi bedre ytelse,$Nspesielt pรฅ trege internettlinjer$N$Nbรธr ikke vรฆre hรธyere enn 1 pรฅ LAN$Neller hvis serveren sin harddisk er treg",
- "ul_btn": "slipp filer / mapper
her (eller klikk meg)",
- "ul_btnu": "L A S T O P P",
- "ul_btns": "F I L S ร K",
-
- "ul_hash": "befar",
- "ul_send": " send",
- "ul_done": "total",
- "ul_idle1": "ingen handlinger i kรธen",
- "ut_etah": "snitthastighet for <em>befaring</em> samt gjenstรฅende tid",
- "ut_etau": "snitthastighet for <em>opplastning</em> samt gjenstรฅende tid",
- "ut_etat": "<em>total</em> snitthastighet og gjenstรฅende tid",
-
- "uct_ok": "fullfรธrt uten problemer",
- "uct_ng": "fullfรธrt under tvil (duplikat, ikke funnet, ...)",
- "uct_done": "fullfรธrt (enten <em>ok</em> eller <em>ng</em>)",
- "uct_bz": "aktive handlinger (befaring / opplastning)",
- "uct_q": "kรธen",
-
- "utl_name": "filnavn",
- "utl_ulist": "vis",
- "utl_ucopy": "kopiรฉr",
- "utl_links": "lenker",
- "utl_stat": "status",
- "utl_prog": "fremdrift",
-
- // mรฅ vรฆre korte:
- "utl_404": "404",
- "utl_err": "FEIL!",
- "utl_oserr": "OS-feil",
- "utl_found": "funnet",
- "utl_defer": "senere",
- "utl_yolo": "YOLO",
- "utl_done": "ferdig",
-
- "ul_flagblk": "filene har blitt lagt i kรธen
men det er en annen nettleserfane som holder pรฅ med befaring eller opplastning akkurat nรฅ,
sรฅ venter til den er ferdig fรธrst",
- "ul_btnlk": "bryteren har blitt lรฅst til denne tilstanden i serverens konfigurasjon",
-
- "udt_up": "Last opp",
- "udt_srch": "Sรธk",
- "udt_drop": "Slipp filene her",
-
- "u_nav_m": 'hva har du?
Enter = Filer (รฉn eller flere)\nESC = รn mappe (inkludert undermapper)',
- "u_nav_b": 'Filerรn mappe',
-
- "cl_opts": "brytere",
- "cl_themes": "utseende",
- "cl_langs": "sprรฅk",
- "cl_ziptype": "nedlastning av mapper",
- "cl_uopts": "up2k-brytere",
- "cl_favico": "favicon",
- "cl_bigdir": "store mapper",
- "cl_hsort": "#sort",
- "cl_keytype": "notasjon for musikalsk dur",
- "cl_hiddenc": "skjulte kolonner",
- "cl_hidec": "skjul",
- "cl_reset": "nullstill",
- "cl_hpick": "klikk pรฅ overskriften til kolonnene du รธnsker รฅ skjule i tabellen nedenfor",
- "cl_hcancel": "kolonne-skjuling avbrutt",
-
- "ct_grid": '็ฐ ikoner',
- "ct_ttips": 'vis hjelpetekst ved รฅ holde musen over ting">โน๏ธ tips',
- "ct_thumb": 'vis miniatyrbilder istedenfor ikoner$NSnarvei: T">๐ผ๏ธ bilder',
- "ct_csel": 'bruk tastene CTRL og SHIFT for markering av filer i ikonvisning">merk',
- "ct_ihop": 'bla ned til sist viste bilde nรฅr bildeviseren lukkes">gโฎฏ',
- "ct_dots": 'vis skjulte filer (gitt at serveren tillater det)">.synlig',
- "ct_qdel": 'sletteknappen spรธr bare รฉn gang om bekreftelse">hurtig๐๏ธ',
- "ct_dir1st": 'sorter slik at mapper kommer foran filer">๐ fรธrst',
- "ct_nsort": 'naturlig sortering (forstรฅr tall i filnavn)">nsort',
- "ct_utc": 'bruk UTC for alle klokkeslett">UTC',
- "ct_readme": 'vis README.md nedenfor filene">๐ readme',
- "ct_idxh": 'vis index.html istedenfor fil-liste">htm',
- "ct_sbars": 'vis rullgardiner / skrollefelt">โ',
-
- "cut_umod": 'i tilfelle en fil du laster opp allerede finnes pรฅ serveren, sรฅ skal serverens tidsstempel oppdateres slik at det stemmer overens med din lokale fil (krever rettighetene write+delete)">re๐
',
-
- "cut_turbo": "forenklet befaring ved opplastning; bรธr sannsynlig ikke skrus pรฅ:$N$Nnyttig dersom du var midt i en svรฆr opplastning som mรฅtte restartes av en eller annen grunn, og du vil komme igang igjen sรฅ raskt som overhodet mulig.$N$Nnรฅr denne er skrudd pรฅ sรฅ forenkles befaringen kraftig; istedenfor รฅ utfรธre en trygg sjekk pรฅ om filene finnes pรฅ serveren i god stand, sรฅ sjekkes kun om filstรธrrelsen stemmer. Sรฅ dersom en korrupt fil skulle befinne seg pรฅ serveren allerede, pรฅ samme sted med samme stรธrrelse og navn, sรฅ blir det ikke oppdaget.$N$Ndet anbefales รฅ kun benytte denne funksjonen for รฅ komme seg raskt igjennom selve opplastningen, for sรฅ รฅ skru den av, og til slutt "laste opp" de samme filene รฉn gang til -- slik at integriteten kan verifiseres\">turbo",
-
- "cut_datechk": "har ingen effekt dersom turbo er avslรฅtt$N$Ngjรธr turbo bittelitt tryggere ved รฅ sjekke datostemplingen pรฅ filene (i tillegg til filstรธrrelse)$N$Nburde oppdage og gjenoppta de fleste ufullstendige opplastninger, men er ikke en fullverdig erstatning for รฅ deaktivere turbo og gjรธre en skikkelig sjekk\">date-chk",
-
- "cut_u2sz": "stรธrrelse i megabyte for hvert bruddstykke for opplastning. Store verdier flyr bedre over atlanteren. Smรฅ verdier kan vรฆre bedre pรฅ sรฆrdeles ustabile forbindelser",
-
- "cut_flag": "samkjรธrer nettleserfaner slik at bare รฉn $N kan holde pรฅ med befaring / opplastning $N -- andre faner mรฅ ogsรฅ ha denne skrudd pรฅ $N -- fungerer kun innenfor samme domene",
-
- "cut_az": "last opp filer i alfabetisk rekkefรธlge, istedenfor minste-fil-fรธrst$N$Nalfabetisk kan gjรธre det lettere รฅ anslรฅ om alt gikk bra, men er bittelitt tregere pรฅ fiber / LAN",
-
- "cut_nag": "meldingsvarsel nรฅr opplastning er ferdig$N(kun om nettleserfanen ikke er synlig)",
- "cut_sfx": "lydvarsel nรฅr opplastning er ferdig$N(kun om nettleserfanen ikke er synlig)",
-
- "cut_mt": "raskere befaring ved รฅ bruke hele CPU'en$N$Ndenne funksjonen anvender web-workers$Nog krever mer RAM (opptil 512 MiB ekstra)$N$Ngjรธr https 30% raskere, http 4.5x raskere\">mt",
-
- "cut_wasm": "bruk wasm istedenfor nettleserens sha512-funksjon; gir bedre ytelse pรฅ chrome-baserte nettlesere, men bruker mere CPU, og eldre versjoner av chrome tรฅler det ikke (spiser opp all RAM og krasjer)\">wasm",
-
- "cft_text": "ikontekst (blank ut og last siden pรฅ nytt for รฅ deaktivere)",
- "cft_fg": "farge",
- "cft_bg": "bakgrunnsfarge",
-
- "cdt_lim": "maks antall filer รฅ vise per mappe",
- "cdt_ask": "vis knapper for รฅ laste flere filer nederst pรฅ siden istedenfor รฅ gradvis laste mer av mappen nรฅr man scroller ned",
- "cdt_hsort": "antall sorterings-regler (<code>,sorthref</code>) som skal inkluderes nรฅr media-URL'er genereres. Hvis denne er 0 sรฅ vil sorterings-regler i URL'er hverken bli generert eller lest",
-
- "tt_entree": "bytt til mappehierarki$NSnarvei: B",
- "tt_detree": "bytt til tradisjonell sti-visning$NSnarvei: B",
- "tt_visdir": "bla ned til den รฅpne mappen",
- "tt_ftree": "bytt mellom filstruktur og tekstfiler$NSnarvei: V",
- "tt_pdock": "vis de overordnede mappene i et panel",
- "tt_dynt": "รธk bredden pรฅ panelet ettersom treet utvider seg",
- "tt_wrap": "linjebryting",
- "tt_hover": "vis hele mappenavnet nรฅr musepekeren treffer mappen$N( gjรธr dessverre at scrollhjulet fusker dersom musepekeren ikke befinner seg i grรธfta )",
-
- "ml_pmode": "ved enden av mappen",
- "ml_btns": "knapper",
- "ml_tcode": "konvertering",
- "ml_tcode2": "konverter til",
- "ml_tint": "tint",
- "ml_eq": "audio equalizer (tonejustering)",
- "ml_drc": "compressor (volum-utjevning)",
-
- "mt_loop": "spill den samme sangen om og om igjen\">๐",
- "mt_one": "spill kun รฉn sang\">1๏ธโฃ",
- "mt_shuf": "sangene i hver mappe$Nspilles i tilfeldig rekkefรธlge\">๐",
- "mt_aplay": "forsรธk รฅ starte avspilling hvis linken du klikket pรฅ for รฅ รฅpne nettsiden inneholder en sang-ID$N$Nhvis denne deaktiveres sรฅ vil heller ikke nettside-URL'en bli oppdatert med sang-ID'er nรฅr musikk spilles, i tilfelle innstillingene skulle gรฅ tapt og nettsiden lastes pรฅ ny\">aโถ",
- "mt_preload": "hent ned litt av neste sang i forkant,$Nslik at pausen i overgangen blir mindre\">forles",
- "mt_prescan": "ved behov, bla til neste mappe$Nslik at nettleseren lar oss$Nfortsette รฅ spille musikk\">bla",
- "mt_fullpre": "hent ned hele neste sang, ikke bare litt:$Nโ
skru pรฅ hvis nettet ditt er ustabilt,$Nโ skru av hvis nettet ditt er tregt\">full",
- "mt_fau": "for telefoner: forhindre at avspilling stopper hvis nettet er for tregt til รฅ laste neste sang i tide. Hvis pรฅskrudd, kan forรฅrsake at sang-info ikke vises korrekt i OS'et\">โ๏ธ",
- "mt_waves": "waveform seekbar:$Nvis volumkurve i avspillingsfeltet\">~s",
- "mt_npclip": "vis knapper for รฅ kopiere info om sangen du hรธrer pรฅ\">/np",
- "mt_m3u_c": "vis knapper for รฅ kopiere de valgte$Nsangene som innslag i en m3u8 spilleliste\">๐ป",
- "mt_octl": "integrering med operativsystemet (fjernkontroll, info-skjerm)\">os-ctl",
- "mt_oseek": "tillat spoling med fjernkontroll$N$Nmerk: pรฅ noen enheter (iPhones) sรฅ vil$Ndette erstatte knappen for neste sang\">spoling",
- "mt_oscv": "vis album-cover pรฅ infoskjermen\">bilde",
- "mt_follow": "bla slik at sangen som spilles alltid er synlig\">๐ฏ",
- "mt_compact": "tettpakket avspillerpanel\">โ",
- "mt_uncache": "prรธv denne hvis en sang ikke spiller riktig\">oppfrisk",
- "mt_mloop": "repeter hele mappen\">๐ gjenta",
- "mt_mnext": "hopp til neste mappe og fortsett\">๐ neste",
- "mt_mstop": "stopp avspilling\">โธ stopp",
- "mt_cflac": "konverter flac / wav-filer til {0}\">flac",
- "mt_caac": "konverter aac / m4a-filer til to {0}\">aac",
- "mt_coth": "konverter alt annet (men ikke mp3) til {0}\">andre",
- "mt_c2opus": "det beste valget for alle PCer og Android\">opus",
- "mt_c2owa": "opus-weba, for iOS 17.5 og nyere\">owa",
- "mt_c2caf": "opus-caf, for iOS 11 tilogmed 17\">caf",
- "mt_c2mp3": "bra valg for steinalder-utstyr (slรฅr aldri feil)\">mp3",
- "mt_c2flac": "gir best lydkvalitet, men eter nettet ditt\">flac",
- "mt_c2wav": "helt rรฅ lydstrรธm (bruker enda mere data enn flac)\">wav",
- "mt_c2ok": "bra valg!",
- "mt_c2nd": "ikke det foretrukne valget for din enhet, men funker sikkert greit",
- "mt_c2ng": "ser virkelig ikke ut som enheten din takler dette formatet... men ok, vi prรธver",
- "mt_xowa": "iOS har fortsatt problemer med avspilling av owa-musikk i bakgrunnen. Bruk caf eller mp3 istedenfor",
- "mt_tint": "nivรฅ av bakgrunnsfarge pรฅ sรธkestripa (0-100),$Ngjรธr oppdateringer mindre distraherende",
- "mt_eq": "aktiver tonekontroll og forsterker;$N$Nboost <code>0</code> = normal volumskala$N$Nwidth <code>1 </code> = normal stereo$Nwidth <code>0.5</code> = 50% blanding venstre-hรธyre$Nwidth <code>0 </code> = mono$N$Nboost <code>-0.8</code> & width <code>10</code> = instrumental :^)$N$Nreduserer ogsรฅ dรธdtid imellom sangfiler",
- "mt_drc": "aktiver volum-utjevning (dynamic range compressor); vil ogsรฅ aktivere tonejustering, sรฅ sett alle EQ-feltene bortsett fra 'width' til 0 hvis du ikke vil ha noe EQ$N$Nfilteret vil dempe volumet pรฅ alt som er hรธyere enn TRESH dB; for hver RATIO dB over grensen er det 1dB som treffer hรธyttalerne, sรฅ standardverdiene tresh -24 og ratio 12 skal bety at volumet ikke gรฅr hรธyere enn -22 dB, slik at man trygt kan รธke boost-verdien i equalizer'n til rundt 0.8, eller 1.8 kombinert med ATK 0 og RLS 90 (bare mulig i firefox; andre nettlesere tar ikke hรธyere RLS enn 1)$N$Nwikipedia forklarer dette mye bedre forresten",
-
- "mb_play": "lytt",
- "mm_hashplay": "spill denne sangen?",
- "mm_m3u": "trykk Enter/OK for รฅ spille\ntrykk ESC/Avbryt for รฅ redigere",
- "mp_breq": "krever firefox 82+, chrome 73+, eller iOS 15+",
- "mm_bload": "laster inn...",
- "mm_bconv": "konverterer til {0}, vent litt...",
- "mm_opusen": "nettleseren din forstรฅr ikke aac / m4a;\nkonvertering til opus er nรฅ aktivert",
- "mm_playerr": "avspilling feilet: ",
- "mm_eabrt": "Avspillingsforespรธrselen ble avbrutt",
- "mm_enet": "Nettet ditt er ustabilt",
- "mm_edec": "Noe er galt med musikkfilen",
- "mm_esupp": "Nettleseren din forstรฅr ikke filtypen",
- "mm_eunk": "Ukjent feil",
- "mm_e404": "Avspilling feilet: Fil ikke funnet.",
- "mm_e403": "Avspilling feilet: Tilgang nektet.\n\nKanskje du ble logget ut?\nPrรธv รฅ trykk F5 for รฅ laste siden pรฅ nytt.",
- "mm_e500": "Avspilling feilet: Rusk i maskineriet, sjekk serverloggen.",
- "mm_e5xx": "Avspilling feilet: ",
- "mm_nof": "finner ikke flere sanger i nรฆrheten",
- "mm_prescan": "Leter etter neste sang...",
- "mm_scank": "Fant neste sang:",
- "mm_uncache": "alle sanger vil lastes pรฅ nytt ved neste avspilling",
- "mm_hnf": "sangen finnes ikke lenger",
-
- "im_hnf": "bildet finnes ikke lenger",
-
- "f_empty": 'denne mappen er tom',
- "f_chide": 'dette vil skjule kolonnen ยซ{0}ยป\n\nfanen for "andre innstillinger" lar deg vise kolonnen igjen',
- "f_bigtxt": "denne filen er hele {0} MiB -- vis som tekst?",
- "f_bigtxt2": "vil du se bunnen av filen istedenfor? du vil da ogsรฅ se nye linjer som blir lagt til pรฅ slutten av filen i sanntid",
- "fbd_more": '',
- "fbd_all": '',
- "f_anota": "kun {0} av totalt {1} elementer ble markert;\nfor รฅ velge alt mรฅ du bla til bunnen av mappen fรธrst",
-
- "f_dls": 'linkene i denne mappen er nรฅ\nomgjort til nedlastningsknapper',
-
- "f_partial": "For รฅ laste ned en fil som enda ikke er ferdig opplastet, klikk pรฅ filen som har samme filnavn som denne, men uten .PARTIAL pรฅ slutten. Da vil serveren passe pรฅ at nedlastning gรฅr bra. Derfor anbefales det sterkt รฅ trykke AVBRYT eller Escape-tasten.\n\nHvis du virkelig รธnsker รฅ laste ned denne .PARTIAL-filen pรฅ en ukontrollert mรฅte, trykk OK / Enter for รฅ ignorere denne advarselen. Slik vil du hรธyst sannsynlig motta korrupt data.",
-
- "ft_paste": "Lim inn {0} filer$NSnarvei: ctrl-V",
- "fr_eperm": 'kan ikke endre navn:\ndu har ikke โmoveโ-rettigheten i denne mappen',
- "fd_eperm": 'kan ikke slette:\ndu har ikke โdeleteโ-rettigheten i denne mappen',
- "fc_eperm": 'kan ikke klippe ut:\ndu har ikke โmoveโ-rettigheten i denne mappen',
- "fp_eperm": 'kan ikke lime inn:\ndu har ikke โwriteโ-rettigheten i denne mappen',
- "fr_emore": "velg minst รฉn fil som skal fรฅ nytt navn",
- "fd_emore": "velg minst รฉn fil som skal slettes",
- "fc_emore": "velg minst รฉn fil som skal klippes ut",
- "fcp_emore": "velg minst รฉn fil som skal kopieres til utklippstavlen",
-
- "fs_sc": "del mappen du er i nรฅ",
- "fs_ss": "del de valgte filene",
- "fs_just1d": "du kan ikke markere flere mapper samtidig,\neller kombinere mapper og filer",
- "fs_abrt": "โ avbryt",
- "fs_rand": "๐ฒ tilfeldig navn",
- "fs_go": "โ
opprett deling",
- "fs_name": "navn",
- "fs_src": "kilde",
- "fs_pwd": "passord",
- "fs_exp": "varighet",
- "fs_tmin": "min",
- "fs_thrs": "timer",
- "fs_tdays": "dager",
- "fs_never": "for evig",
- "fs_pname": "frivillig navn (blir noe tilfeldig ellers)",
- "fs_tsrc": "fil/mappe som skal deles",
- "fs_ppwd": "frivillig passord",
- "fs_w8": "oppretter deling...",
- "fs_ok": "trykk Enter/OK for รฅ kopiere linken (for CTRL-V)\ntrykk ESC/Avbryt for รฅ bare bekrefte",
-
- "frt_dec": "kan korrigere visse รธdelagte filnavn\">url-decode",
- "frt_rst": "nullstiller endringer (tilbake til de originale filnavnene)\">โบ reset",
- "frt_abrt": "avbryt og lukk dette vinduet\">โ avbryt",
- "frb_apply": "IVERKSETT",
- "fr_adv": "automasjon basert pรฅ metadata
og / eller mรธnster (regulรฆre uttrykk)\">avansert",
- "fr_case": "versalfรธlsomme uttrykk\">Aa",
- "fr_win": "bytt ut bokstavene <>:"\\|?* med$Ntilsvarende som windows ikke fรฅr panikk av\">win",
- "fr_slash": "bytt ut bokstaven / slik at den ikke forรฅrsaker at nye mapper opprettes\">ikke /",
- "fr_re": "regex-mรธnster som kjรธres pรฅ hvert filnavn. Grupper kan leses ut i format-feltet nedenfor, f.eks. <code>(1)</code> og <code>(2)</code> osv.",
- "fr_fmt": "inspirert av foobar2000:$N<code>(title)</code> byttes ut med sangtittel,$N<code>[(artist) - ](title)</code> dropper [dette] hvis artist er blank$N<code>$lpad((tn),2,0)</code> viser sangnr. med 2 siffer",
- "fr_pdel": "slett",
- "fr_pnew": "lagre som",
- "fr_pname": "gi innstillingene dine et navn",
- "fr_aborted": "avbrutt",
- "fr_lold": "gammelt navn",
- "fr_lnew": "nytt navn",
- "fr_tags": "metadata for de valgte filene (kun for referanse):",
- "fr_busy": "endrer navn pรฅ {0} filer...\n\n{1}",
- "fr_efail": "endring av navn feilet:\n",
- "fr_nchg": "{0} av navnene ble justert pga. win og/eller ikke /\n\nvil du fortsette med de nye navnene som ble valgt?",
-
- "fd_ok": "sletting OK",
- "fd_err": "sletting feilet:\n",
- "fd_none": "ingenting ble slettet; kanskje avvist av serverkonfigurasjon (xbd)?",
- "fd_busy": "sletter {0} filer...\n\n{1}",
- "fd_warn1": "SLETT disse {0} filene?",
- "fd_warn2": "Siste sjanse! Dette kan ikke angres. Slett?",
-
- "fc_ok": "klippet ut {0} filer",
- "fc_warn": 'klippet ut {0} filer\n\nmen: kun denne nettleserfanen har mulighet til รฅ lime dem inn et annet sted, siden antallet filer er helt hinsides',
-
- "fcc_ok": "kopierte {0} filer til utklippstavlen",
- "fcc_warn": 'kopierte {0} filer til utklippstavlen\n\nmen: kun denne nettleserfanen har mulighet til รฅ lime dem inn et annet sted, siden antallet filer er helt hinsides',
-
- "fp_apply": "bekreft og lim inn nรฅ",
- "fp_ecut": "du mรฅ klippe ut eller kopiere noen filer / mapper fรธrst\n\nmerk: du kan gjerne jobbe pรฅ kryss av nettleserfaner; klippe ut i รฉn fane, lime inn i en annen",
- "fp_ename": "{0} filer kan ikke flyttes til mรฅlmappen fordi det allerede finnes filer med samme navn. Gi dem nye navn nedenfor, eller gi dem et blankt navn for รฅ hoppe over dem:",
- "fcp_ename": "{0} filer kan ikke kopieres til mรฅlmappen fordi det allerede finnes filer med samme navn. Gi dem nye navn nedenfor, eller gi dem et blankt navn for รฅ hoppe over dem:",
- "fp_emore": "det er fortsatt flere navn som mรฅ endres",
- "fp_ok": "flytting OK",
- "fcp_ok": "kopiering OK",
- "fp_busy": "flytter {0} filer...\n\n{1}",
- "fcp_busy": "kopierer {0} filer...\n\n{1}",
- "fp_abrt": "avbryter...",
- "fp_err": "flytting feilet:\n",
- "fcp_err": "kopiering feilet:\n",
- "fp_confirm": "flytt disse {0} filene hit?",
- "fcp_confirm": "kopiรฉr disse {0} filene hit?",
- "fp_etab": 'kunne ikke lese listen med filer ifra den andre nettleserfanen',
- "fp_name": "Laster opp รฉn fil fra enheten din. Velg filnavn:",
- "fp_both_m": 'hva skal limes inn her?
Enter = Flytt {0} filer fra ยซ{1}ยป\nESC = Last opp {2} filer fra enheten din',
- "fcp_both_m": 'hva skal limes inn her?
Enter = Kopiรฉr {0} filer fra ยซ{1}ยป\nESC = Last opp {2} filer fra enheten din',
- "fp_both_b": 'FlyttLast opp',
- "fcp_both_b": 'KopiรฉrLast opp',
-
- "mk_noname": "skriv inn et navn i tekstboksen til venstre fรธrst :p",
-
- "tv_load": "Laster inn tekstfil:\n\n{0}\n\n{1}% ({2} av {3} MiB lastet ned)",
- "tv_xe1": "kunne ikke laste tekstfil:\n\nfeil ",
- "tv_xe2": "404, Fil ikke funnet",
- "tv_lst": "tekstfiler i mappen",
- "tvt_close": "gรฅ tilbake til mappen$NSnarvei: M (eller Esc)\">โ lukk",
- "tvt_dl": "last ned denne filen$NSnarvei: Y\">๐พ last ned",
- "tvt_prev": "vis forrige dokument$NSnarvei: i\">โฌ forr.",
- "tvt_next": "vis neste dokument$NSnarvei: K\">โฌ neste",
- "tvt_sel": "markรฉr filen ( for utklipp / sletting / ... )$NSnarvei: S\">merk",
- "tvt_edit": "redigรฉr filen$NSnarvei: E\">โ๏ธ endre",
- "tvt_tail": "overvรฅk filen for endringer og vis nye linjer i sanntid\">๐ก fรธlg",
- "tvt_wrap": "tekstbryting\">โต",
- "tvt_atail": "hold de nyeste linjene synlig (lรฅs til bunnen av siden)\">โ",
- "tvt_ctail": "forstรฅ og vis terminalfarger (ansi-sekvenser)\">๐",
- "tvt_ntail": "maks-grense for antall bokstaver som skal vises i vinduet",
-
- "m3u_add1": "sangen ble lagt til i m3u-spillelisten",
- "m3u_addn": "{0} sanger ble lagt til i m3u-spillelisten",
- "m3u_clip": "m3u-spillelisten ble kopiert til utklippstavlen\n\nneste steg er รฅ opprette et tekstdokument med filnavn som slutter pรฅ .m3u og lime inn spillelisten der",
-
- "gt_vau": "ikke vis videofiler, bare spill lyden\">๐ง",
- "gt_msel": "markรฉr filer istedenfor รฅ รฅpne dem; ctrl-klikk filer for รฅ overstyre$N$N<em>nรฅr aktiv: dobbelklikk en fil / mappe for รฅ รฅpne</em>$N$NSnarvei: S\">markering",
- "gt_crop": "beskjรฆr ikonene sรฅ de passer bedre\">โ",
- "gt_3x": "hรธyere opplรธsning pรฅ ikoner\">3x",
- "gt_zoom": "zoom",
- "gt_chop": "trim",
- "gt_sort": "sorter",
- "gt_name": "navn",
- "gt_sz": "stรธrr.",
- "gt_ts": "dato",
- "gt_ext": "type",
- "gt_c1": "reduser maks-lengde pรฅ filnavn",
- "gt_c2": "รธk maks-lengde pรฅ filnavn",
-
- "sm_w8": "sรธker...",
- "sm_prev": "sรธkeresultatene er fra et tidligere sรธk:\n ",
- "sl_close": "lukk sรธkeresultater",
- "sl_hits": "viser {0} treff",
- "sl_moar": "hent flere",
-
- "s_sz": "stรธrr.",
- "s_dt": "dato",
- "s_rd": "sti",
- "s_fn": "navn",
- "s_ta": "meta",
- "s_ua": "up@",
- "s_ad": "avns.",
- "s_s1": "stรธrre enn โ MiB",
- "s_s2": "mindre enn โ MiB",
- "s_d1": "nyere enn <dato>",
- "s_d2": "eldre enn",
- "s_u1": "lastet opp etter",
- "s_u2": "og/eller fรธr",
- "s_r1": "mappenavn inneholder",
- "s_f1": "filnavn inneholder",
- "s_t1": "sang-info inneholder",
- "s_a1": "konkrete egenskaper",
-
- "md_eshow": "viser forenklet ",
- "md_off": "[๐readme] er avskrudd i [โ๏ธ] -- dokument skjult",
-
- "badreply": "Ugyldig svar ifra serveren",
-
- "xhr403": "403: Tilgang nektet\n\nkanskje du ble logget ut? prรธv รฅ trykk F5",
- "xhr0": "ukjent (enten nettverksproblemer eller serverkrasj)",
- "cf_ok": "beklager -- liten tilfeldig kontroll, alt OK\n\nting skal fortsette om ca. 30 sekunder\n\nhvis ikkeno skjer, trykk F5 for รฅ laste siden pรฅ nytt",
- "tl_xe1": "kunne ikke hente undermapper:\n\nfeil ",
- "tl_xe2": "404: Mappen finnes ikke",
- "fl_xe1": "kunne ikke hente filer i mappen:\n\nfeil ",
- "fl_xe2": "404: Mappen finnes ikke",
- "fd_xe1": "kan ikke opprette ny mappe:\n\nfeil ",
- "fd_xe2": "404: Den overordnede mappen finnes ikke",
- "fsm_xe1": "kunne ikke sende melding:\n\nfeil ",
- "fsm_xe2": "404: Den overordnede mappen finnes ikke",
- "fu_xe1": "kunne ikke hente listen med nylig opplastede filer ifra serveren:\n\nfeil ",
- "fu_xe2": "404: Filen finnes ikke??",
-
- "fz_tar": "ukomprimert gnu-tar arkiv, for linux og mac",
- "fz_pax": "ukomprimert pax-tar arkiv, litt tregere",
- "fz_targz": "gnu-tar pakket med gzip (nivรฅ 3)$N$NNB: denne er veldig treg;$Nukomprimert tar er bedre",
- "fz_tarxz": "gnu-tar pakket med xz (nivรฅ 1)$N$NNB: denne er veldig treg;$Nukomprimert tar er bedre",
- "fz_zip8": "zip med filnavn i utf8 (noe problematisk pรฅ windows 7 og eldre)",
- "fz_zipd": "zip med filnavn i cp437, for hรธggamle maskiner",
- "fz_zipc": "cp437 med tidlig crc32,$Nfor MS-DOS PKZIP v2.04g (oktober 1993)$N(รธker behandlingstid pรฅ server)",
-
- "un_m1": "nedenfor kan du angre / slette filer som du nylig har lastet opp, eller avbryte ufullstendige opplastninger",
- "un_upd": "oppdater",
- "un_m4": "eller hvis du vil dele nedlastnings-lenkene:",
- "un_ulist": "vis",
- "un_ucopy": "kopiรฉr",
- "un_flt": "valgfritt filter: filnavn / filsti mรฅ inneholde",
- "un_fclr": "nullstill filter",
- "un_derr": 'unpost-sletting feilet:\n',
- "un_f5": 'noe gikk galt, prรธv รฅ oppdatere listen eller trykk F5',
- "un_uf5": "beklager, men du mรฅ laste siden pรฅ nytt (f.eks. ved รฅ trykke F5 eller CTRL-R) fรธr denne opplastningen kan avbrytes",
- "un_nou": 'advarsel: kan ikke vise ufullstendige opplastninger akkurat nรฅ; klikk pรฅ oppdater-linken om litt',
- "un_noc": 'advarsel: angring av fullfรธrte opplastninger er deaktivert i serverkonfigurasjonen',
- "un_max": "viser de fรธrste 2000 filene (bruk filteret for รฅ innsnevre)",
- "un_avail": "{0} nylig opplastede filer kan slettes
{1} ufullstendige opplastninger kan avbrytes",
- "un_m2": "sortert etter opplastningstid; nyeste fรธrst:",
- "un_no1": "men nei, her var det jaggu ikkeno som slettes kan",
- "un_no2": "men nei, her var det jaggu ingenting som passet overens med filteret",
- "un_next": "slett de neste {0} filene nedenfor",
- "un_abrt": "avbryt",
- "un_del": "slett",
- "un_m3": "henter listen med nylig opplastede filer...",
- "un_busy": "sletter {0} filer...",
- "un_clip": "{0} lenker kopiert til utklippstavlen",
-
- "u_https1": "du burde",
- "u_https2": "bytte til https",
- "u_https3": "for hรธyere hastighet",
- "u_ancient": 'nettleseren din er prehistorisk -- mulig du burde bruke bup istedenfor',
- "u_nowork": "krever firefox 53+, chrome 57+, eller iOS 11+",
- "tail_2old": "krever firefox 105+, chrome 71+, eller iOS 14.5+",
- "u_nodrop": 'nettleseren din er for gammel til รฅ laste opp filer ved รฅ dra dem inn i vinduet',
- "u_notdir": "mottok ikke mappen!\n\nnettleseren din er for gammel,\nprรธv รฅ dra mappen inn i vinduet istedenfor",
- "u_uri": "for รฅ laste opp bilder ifra andre nettleservinduer,\nslipp bildet rett pรฅ den store last-opp-knappen",
- "u_enpot": 'bytt til enkelt UI (gir sannsynlig raskere opplastning)',
- "u_depot": 'bytt til snรฆsent UI (gir sannsynlig tregere opplastning)',
- "u_gotpot": 'byttet til et enklere UI for รฅ laste opp raskere,\n\ndu kan gjerne bytte tilbake altsรฅ!',
- "u_pott": "filer: {0} ferdig, {1} feilet, {2} behandles, {3} i kรธ
",
- "u_ever": "dette er den primitive opplasteren; up2k krever minst:
chrome 21 // firefox 13 // edge 12 // opera 12 // safari 5.1",
- "u_su2k": 'dette er den primitive opplasteren; up2k er bedre',
- "u_uput": 'litt raskere (uten sha512)',
- "u_ewrite": 'du har ikke skrivetilgang i denne mappen',
- "u_eread": 'du har ikke lesetilgang i denne mappen',
- "u_enoi": 'filsรธk er deaktivert i serverkonfigurasjonen',
- "u_enoow": "kan ikke overskrive filer her (Delete-rettigheten er nรธdvendig)",
- "u_badf": 'Disse {0} filene (av totalt {1}) kan ikke leses, kanskje pga rettighetsproblemer i filsystemet pรฅ datamaskinen din:\n\n',
- "u_blankf": 'Disse {0} filene (av totalt {1}) er blanke / uten innhold; รธnsker du รฅ laste dem opp uansett?\n\n',
- "u_applef": 'Disse {0} filene (av totalt {1}) er antagelig uรธnskede;\nTrykk OK/Enter for รฅ HOPPE OVER disse filene,\nTrykk Avbryt/ESC for รฅ LASTE OPP disse filene ogsรฅ:\n\n',
- "u_just1": '\nFunker kanskje bedre hvis du bare tar รฉn fil om gangen',
- "u_ff_many": 'Hvis du bruker Linux / MacOS / Android, sรฅ kan dette antallet filer
kanskje krasje Firefox! Hvis det skjer, sรฅ prรธv igjen (eller bruk Chrome).',
- "u_up_life": "Filene slettes fra serveren {0}\netter at opplastningen er fullfรธrt",
- "u_asku": 'Laste opp disse {0} filene til {1}',
- "u_unpt": "Du kan angre / slette opplastningen med ๐งฏ oppe til venstre",
- "u_bigtab": 'Vil nรฅ vise {0} filer...\n\nDette kan krasje nettleseren din. Fortsette?',
- "u_scan": 'Leser mappene...',
- "u_dirstuck": 'Nettleseren din fikk ikke tilgang til รฅ lese fรธlgende {0} filer/mapper, sรฅ de blir hoppet over:',
- "u_etadone": 'Ferdig ({0}, {1} filer)',
- "u_etaprep": '(forbereder opplastning)',
- "u_hashdone": 'befaring ferdig',
- "u_hashing": 'les',
- "u_hs": 'serveren tenker...',
- "u_started": "filene blir nรฅ lastet opp ๐",
- "u_dupdefer": "duplikat; vil bli hรฅndtert til slutt",
- "u_actx": "klikk her for รฅ forhindre tap av
ytelse ved bytte til andre vinduer/faner",
- "u_fixed": "OK! Lรธste seg ๐",
- "u_cuerr": "kunne ikke laste opp del {0} av {1};\nsikkert greit, fortsetter\n\nfil: {2}",
- "u_cuerr2": "server nektet opplastningen (del {0} av {1});\nprรธver igjen senere\n\nfil: {2}\n\nerror ",
- "u_ehstmp": "prรธver igjen; se mld nederst",
- "u_ehsfin": "server nektet forespรธrselen om รฅ ferdigstille filen; prรธver igjen...",
- "u_ehssrch": "server nektet forespรธrselen om รฅ utfรธre sรธk; prรธver igjen...",
- "u_ehsinit": "server nektet forespรธrselen om รฅ begynne en ny opplastning; prรธver igjen...",
- "u_eneths": "et problem med nettverket gjorde at avtale om opplastning ikke kunne inngรฅs; prรธver igjen...",
- "u_enethd": "et problem med nettverket gjorde at filsjekk ikke kunne utfรธres; prรธver igjen...",
- "u_cbusy": "venter pรฅ klarering ifra server etter et lite nettverksglipp...",
- "u_ehsdf": "serveren er full!\n\nprรธver igjen regelmessig,\ni tilfelle noen rydder litt...",
- "u_emtleak1": "uff, det er mulig at nettleseren din har en minnelekkasje...\nForeslรฅr",
- "u_emtleak2": ' helst at du bytter til https, eller ',
- "u_emtleak3": ' at du ',
- "u_emtleakc": 'prรธver fรธlgende:\n- trykk F5 for รฅ laste siden pรฅ nytt
- sรฅ skru av
mt bryteren under โ๏ธ innstillinger - og forsรธk den samme opplastningen igjen
Opplastning vil gรฅ litt tregere, men det fรฅr sรฅ vรฆre.\nBeklager bryderiet !\n\nPS: feilen skal vรฆre fikset i chrome v107',
- "u_emtleakf": 'prรธver fรธlgende:\n- trykk F5 for รฅ laste siden pรฅ nytt
- sรฅ skru pรฅ
๐ฅ ("enkelt UI") i opplasteren - og forsรธk den samme opplastningen igjen
\nPS: Firefox fikser forhรฅpentligvis feilen en eller annen gang',
- "u_s404": "ikke funnet pรฅ serveren",
- "u_expl": "forklar",
- "u_maxconn": "de fleste nettlesere tillater ikke mer enn 6, men firefox lar deg รธke grensen med connections-per-server i about:config",
- "u_tu": 'ADVARSEL: turbo er pรฅ, avbrutte opplastninger vil muligens ikke oppdages og gjenopptas; hold musepekeren over turbo-knappen for mer info
',
- "u_ts": 'ADVARSEL: turbo er pรฅ, sรธkeresultater kan vรฆre feil; hold musepekeren over turbo-knappen for mer info
',
- "u_turbo_c": "turbo er deaktivert i serverkonfigurasjonen",
- "u_turbo_g": 'turbo ble deaktivert fordi du ikke har\ntilgang til รฅ se mappeinnhold i dette volumet',
- "u_life_cfg": 'slett opplastning etter min (eller timer)',
- "u_life_est": 'opplastningen slettes ---',
- "u_life_max": 'denne mappen tillater ikke รฅ \noppbevare filer i mer enn {0}',
- "u_unp_ok": 'opplastning kan angres i {0}',
- "u_unp_ng": 'opplastning kan IKKE angres',
- "ue_ro": 'du har ikke skrivetilgang i denne mappen\n\n',
- "ue_nl": 'du er ikke logget inn',
- "ue_la": 'du er logget inn som "{0}"',
- "ue_sr": 'du er i filsรธk-modus\n\nbytt til opplastning ved รฅ klikke pรฅ forstรธrrelsesglasset ๐ (ved siden av den store FILSรK-knappen) og prรธv igjen\n\nsorry',
- "ue_ta": 'prรธv รฅ laste opp igjen, det burde funke nรฅ',
- "ue_ab": "den samme filen er allerede under opplastning til en annen mappe, og den mรฅ fullfรธres der fรธr filen kan lastes opp andre steder.\n\nDu kan avbryte og glemme den pรฅbegynte opplastningen ved hjelp av ๐งฏ oppe til venstre",
- "ur_1uo": "OK: Filen ble lastet opp",
- "ur_auo": "OK: Alle {0} filene ble lastet opp",
- "ur_1so": "OK: Filen ble funnet pรฅ serveren",
- "ur_aso": "OK: Alle {0} filene ble funnet pรฅ serveren",
- "ur_1un": "Opplastning feilet!",
- "ur_aun": "Alle {0} opplastningene gikk feil!",
- "ur_1sn": "Filen finnes IKKE pรฅ serveren",
- "ur_asn": "Fant INGEN av de {0} filene pรฅ serveren",
- "ur_um": "Ferdig;\n{0} opplastninger gikk bra,\n{1} opplastninger gikk feil",
- "ur_sm": "Ferdig;\n{0} filer ble funnet,\n{1} filer finnes IKKE pรฅ serveren",
-
- "lang_set": "passer det รฅ laste siden pรฅ nytt?",
- },
- "chi": {
- // ไปฅ //m ็ปๅฐพ็่กๆฏๆช็ป้ช่ฏ็ๆบๅจ็ฟป่ฏ
- "tt": "ไธญๆ",
- "cols": {
- "c": "ๆไฝๆ้ฎ",
- "dur": "ๆ็ปญๆถ้ด",
- "q": "่ดจ้ / ๆฏ็น็",
- "Ac": "้ณ้ข็ผ็ ",
- "Vc": "่ง้ข็ผ็ ",
- "Fmt": "ๆ ผๅผ / ๅฎนๅจ",
- "Ahash": "้ณ้ขๆ ก้ชๅ",
- "Vhash": "่ง้ขๆ ก้ชๅ",
- "Res": "ๅ่พจ็",
- "T": "ๆไปถ็ฑปๅ",
- "aq": "้ณ้ข่ดจ้ / ๆฏ็น็",
- "vq": "่ง้ข่ดจ้ / ๆฏ็น็",
- "pixfmt": "ๅญ้ๆ ท / ๅ็ด ็ปๆ",
- "resw": "ๆฐดๅนณๅ่พจ็",
- "resh": "ๅ็ดๅ่พจ็",
- "chs": "้ณ้ข้ข้",
- "hz": "้ๆ ท็"
- },
-
- "hks": [
- [
- "misc",
- ["ESC", "ๅ
ณ้ญๅ็ง็ชๅฃ"],
-
- "file-manager",
- ["G", "ๅๆขๅ่กจ / ็ฝๆ ผ่งๅพ"],
- ["T", "ๅๆข็ผฉ็ฅๅพ / ๅพๆ "],
- ["โง A/D", "็ผฉ็ฅๅพๅคงๅฐ"],
- ["ctrl-K", "ๅ ้ค้ไธญ้กน"],
- ["ctrl-X", "ๅชๅ้ไธญ้กน"],
- ["ctrl-C", "ๅคๅถ้ไธญ้กน"], //m
- ["ctrl-V", "็ฒ่ดดๅฐๆไปถๅคน"],
- ["Y", "ไธ่ฝฝ้ไธญ้กน"],
- ["F2", "้ๅฝๅ้ไธญ้กน"],
-
- "file-list-sel",
- ["space", "ๅๆขๆไปถ้ๆฉ"],
- ["โ/โ", "็งปๅจ้ๆฉๅ
ๆ "],
- ["ctrl โ/โ", "็งปๅจๅ
ๆ ๅ่งๅพ"],
- ["โง โ/โ", "้ๆฉไธไธไธช/ไธไธไธชๆไปถ"],
- ["ctrl-A", "้ๆฉๆๆๆไปถ / ๆไปถๅคน"]
- ], [
- "navigation",
- ["B", "ๅๆข้ขๅ
ๅฑๅฏผ่ช / ๅฏผ่ช็ชๆ ผ"],
- ["I/K", "ๅไธไธช/ไธไธไธชๆไปถๅคน"],
- ["M", "็ถๆไปถๅคน๏ผๆๆๅ ๅฝๅๆไปถๅคน๏ผ"],
- ["V", "ๅๆขๅฏผ่ช็ชๆ ผไธญ็ๆไปถๅคน / ๆๆฌๆไปถ"],
- ["A/D", "ๅฏผ่ช็ชๆ ผๅคงๅฐ"]
- ], [
- "audio-player",
- ["J/L", "ไธไธ้ฆ/ไธไธ้ฆๆญๆฒ"],
- ["U/O", "่ทณ่ฟ10็งๅๅ/ๅๅ"],
- ["0..9", "่ทณ่ฝฌๅฐ0%..90%"],
- ["P", "ๆญๆพ/ๆๅ๏ผไนๅฏไปฅๅฏๅจ๏ผ"],
- ["S", "้ๆฉๆญฃๅจๆญๆพ็ๆญๆฒ"], //m
- ["Y", "ไธ่ฝฝๆญๆฒ"]
- ], [
- "image-viewer",
- ["J/L, โ/โ", "ไธไธๅผ /ไธไธๅผ ๅพ็"],
- ["Home/End", "็ฌฌไธๅผ /ๆๅไธๅผ ๅพ็"],
- ["F", "ๅ
จๅฑ"],
- ["R", "้กบๆถ้ๆ่ฝฌ"],
- ["โง R", "้ๆถ้ๆ่ฝฌ"],
- ["S", "้ๆฉๅพ็"], //m
- ["Y", "ไธ่ฝฝๅพ็"]
- ], [
- "video-player",
- ["U/O", "่ทณ่ฟ10็งๅๅ/ๅๅ"],
- ["P/K/Space", "ๆญๆพ/ๆๅ"],
- ["C", "็ปง็ปญๆญๆพไธไธๆฎต"],
- ["V", "ๅพช็ฏ"],
- ["M", "้้ณ"],
- ["[ and ]", "่ฎพ็ฝฎๅพช็ฏๅบ้ด"]
- ], [
- "textfile-viewer",
- ["I/K", "ๅไธไธช/ไธไธไธชๆไปถ"],
- ["M", "ๅ
ณ้ญๆๆฌๆไปถ"],
- ["E", "็ผ่พๆๆฌๆไปถ"],
- ["S", "้ๆฉๆไปถ๏ผ็จไบๅชๅ/้ๅฝๅ๏ผ"]
- ]
- ],
-
- "m_ok": "็กฎๅฎ",
- "m_ng": "ๅๆถ",
-
- "enable": "ๅฏ็จ",
- "danger": "ๅฑ้ฉ",
- "clipped": "ๅทฒๅคๅถๅฐๅช่ดดๆฟ",
-
- "ht_s1": "็ง",
- "ht_s2": "็ง",
- "ht_m1": "ๅ",
- "ht_m2": "ๅ",
- "ht_h1": "ๆถ",
- "ht_h2": "ๆถ",
- "ht_d1": "ๅคฉ",
- "ht_d2": "ๅคฉ",
- "ht_and": " ๅ ",
-
- "goh": "ๆงๅถ้ขๆฟ",
- "gop": 'ๅไธ้กน">pre',
- "gou": '้กถ้จ">up',
- "gon": 'ไธไธ้กน">next',
- "logout": " ็ปๅบ",
- "login": "็ปๅฝ", //m
- "access": " ่ฎฟ้ฎ",
- "ot_close": "ๅ
ณ้ญๅญ่ๅ",
- "ot_search": "ๆๅฑๆงใ่ทฏๅพ/ๅ็งฐใ้ณไนๆ ็ญพๆไธ่ฟฐๅ
ๅฎน็ไปปๆ็ปๅๆ็ดขๆไปถ$N$N<code>foo bar</code> = ๅฟ
้กปๅ
ๅซ ยซfooยป ๅ ยซbarยป,$N<code>foo -bar</code> = ๅ
ๅซ ยซfooยป ่ไธๅ
ๅซ ยซbarยป,$N<code>^yana .opus$</code> = ไปฅ ยซyamaยป ไธบๅผๅคด็ ยซopusยป ๆไปถ$N<code>"try unite"</code> = ๆญฃๅฅฝๅ
ๅซ ยซtry uniteยป$N$Nๆถ้ดๆ ผๅผไธบ iso-8601, ๆฏๅฆ:$N<code>2009-12-31</code> or <code>2020-09-12 23:30:00</code>",
- "ot_unpost": "ๅๆถๅๅธ๏ผๅ ้คๆ่ฟไธไผ ็ๅ
ๅฎน๏ผๆไธญๆญขๆชๅฎๆ็ๅ
ๅฎน",
- "ot_bup": "bup๏ผๅบ็กไธไผ ๅจ๏ผ็่ณๆฏๆ Netscape 4.0",
- "ot_mkdir": "mkdir๏ผๅๅปบๆฐ็ฎๅฝ",
- "ot_md": "new-md๏ผๅๅปบๆฐ Markdown ๆๆกฃ",
- "ot_msg": "msg๏ผๅๆๅกๅจๆฅๅฟๅ้ๆถๆฏ",
- "ot_mp": "ๅชไฝๆญๆพๅจ้้กน",
- "ot_cfg": "้
็ฝฎ้้กน",
- "ot_u2i": 'up2k๏ผไธไผ ๆไปถ๏ผๅฆๆไฝ ๆๅๅ
ฅๆ้๏ผ๏ผๆๅๆขๅฐๆ็ดขๆจกๅผไปฅๆฅ็ๆไปถๆฏๅฆๅญๅจไบๆๅกๅจไธ,$N$Nไธไผ ๆฏๅฏๆขๅค็๏ผๅค็บฟ็จ็๏ผไฟ็ๆไปถๆถ้ดๆณ๏ผไฝๆฏ [๐] ๏ผๅบ็กไธไผ ๅจ๏ผๅ ็จ ๆดๅค็CPU
ไธไผ ่ฟ็จไธญ๏ผๆญคๅพๆ ไผๅๆ่ฟๅบฆๆ็คบๅจ๏ผ',
- "ot_u2w": 'up2k๏ผๅธฆๆๆขๅคๆฏๆ็ๆไปถไธไผ ๏ผๅ
ณ้ญๆต่งๅจๅ๏ผ้ๆฐไธไผ ็ธๅๆไปถ๏ผ$N$Nๅค็บฟ็จ็๏ผๆไปถๆถ้ดๆณๅพไปฅไฟ็๏ผไฝๆฏ [๐] ๏ผๅบ็กไธไผ ๅจ๏ผไฝฟ็จๆดๅคCPU
ไธไผ ่ฟ็จไธญ๏ผ่ฟไธชๅพๆ ไผๅๆ่ฟๅบฆๆ็คบๅจ๏ผ',
- "ot_noie": '่ฏทไฝฟ็จ Chrome / Firefox / Edge',
-
- "ab_mkdir": "ๅๅปบ็ฎๅฝ",
- "ab_mkdoc": "ๆฐๅปบ Markdown ๆๆกฃ",
- "ab_msg": "ๅ้ๆถๆฏๅฐๆๅกๅจๆฅๅฟ",
-
- "ay_path": "่ทณ่ฝฌๅฐๆไปถๅคน",
- "ay_files": "่ทณ่ฝฌๅฐๆไปถ",
-
- "wt_ren": "้ๅฝๅ้ไธญ็้กน็ฎ$Nๅฟซๆท้ฎ: F2",
- "wt_del": "ๅ ้ค้ไธญ็้กน็ฎ$Nๅฟซๆท้ฎ: ctrl-K",
- "wt_cut": "ๅชๅ้ไธญ็้กน็ฎ<small>๏ผ็ถๅ็ฒ่ดดๅฐๅ
ถไปๅฐๆน๏ผ</small>$Nๅฟซๆท้ฎ: ctrl-X",
- "wt_cpy": "ๅฐ้ไธญ็้กน็ฎๅคๅถๅฐๅช่ดดๆฟ<small>๏ผ็ถๅ็ฒ่ดดๅฐๅ
ถไปๅฐๆน๏ผ</small>$Nๅฟซๆท้ฎ: ctrl-C", //m
- "wt_pst": "็ฒ่ดดไนๅๅชๅ/ๅคๅถ็้ๆฉ$Nๅฟซๆท้ฎ: ctrl-V",
- "wt_selall": "้ๆฉๆๆๆไปถ$Nๅฟซๆท้ฎ: ctrl-A๏ผๅฝๆไปถ่ขซ่็ฆๆถ๏ผ",
- "wt_selinv": "ๅ่ฝฌ้ๆฉ",
- "wt_zip1": "ๅฐๆญคๆไปถๅคนไธ่ฝฝไธบๅฝๆกฃๆไปถ", //m
- "wt_selzip": "ๅฐ้ๆฉไธ่ฝฝไธบๅฝๆกฃๆไปถ",
- "wt_seldl": "ๅฐ้ๆฉไธ่ฝฝไธบๅ็ฌ็ๆไปถ$Nๅฟซๆท้ฎ: Y",
- "wt_npirc": "ๅคๅถ IRC ๆ ผๅผ็ๆฒ็ฎไฟกๆฏ",
- "wt_nptxt": "ๅคๅถ็บฏๆๆฌๆ ผๅผ็ๆฒ็ฎไฟกๆฏ",
- "wt_m3ua": "ๆทปๅ ๅฐ m3u ๆญๆพๅ่กจ๏ผ็จๅ็นๅป ๐ปcopy๏ผ", //m
- "wt_m3uc": "ๅคๅถ m3u ๆญๆพๅ่กจๅฐๅช่ดดๆฟ", //m
- "wt_grid": "ๅๆข็ฝๆ ผ/ๅ่กจ่งๅพ$Nๅฟซๆท้ฎ: G",
- "wt_prev": "ไธไธๆฒ$Nๅฟซๆท้ฎ: J",
- "wt_play": "ๆญๆพ/ๆๅ$Nๅฟซๆท้ฎ: P",
- "wt_next": "ไธไธๆฒ$Nๅฟซๆท้ฎ: L",
-
- "ul_par": "ๅนถ่กไธไผ ๏ผ",
- "ut_rand": "้ๆบๅๆไปถๅ",
- "ut_u2ts": "ๅฐๆๅไฟฎๆน็ๆถ้ดๆณ$Nไปไฝ ็ๆไปถ็ณป็ปๅคๅถๅฐๆๅกๅจ\">๐
",
- "ut_ow": "่ฆ็ๆๅกๅจไธ็็ฐๆๆไปถ๏ผ$N๐ก๏ธ: ไปไธ๏ผไผ็ๆไธไธชๆฐๆไปถๅ๏ผ$N๐: ๆๅกๅจๆไปถ่พๆงๅ่ฆ็$Nโป๏ธ: ๆปๆฏ่ฆ็๏ผๅฆๆๆไปถๅ
ๅฎนไธๅ", //m
- "ut_mt": "ๅจไธไผ ๆถ็ปง็ปญๅๅธๅ
ถไปๆไปถ$N$Nๅฆๆไฝ ็ CPU ๆ็กฌ็ๆฏ็ถ้ข๏ผๅฏ่ฝ้่ฆ็ฆ็จ",
- "ut_ask": 'ไธไผ ๅผๅงๅ่ฏข้ฎ็กฎ่ฎค">๐ญ',
- "ut_pot": "้่ฟ็ฎๅ UI ๆฅ$Nๆ้ซๆ
ข่ฎพๅคไธ็ไธไผ ้ๅบฆ",
- "ut_srch": "ๅฎ้
ไธไธไผ ๏ผ่ๆฏๆฃๆฅๆไปถๆฏๅฆ$Nๅทฒ็ปๅญๅจไบๆๅกๅจไธ๏ผๅฐๆซๆไฝ ๅฏไปฅ่ฏปๅ็ๆๆๆไปถๅคน๏ผ",
- "ut_par": "้่ฟๅฐๅ
ถ่ฎพ็ฝฎไธบ 0 ๆฅๆๅไธไผ $N$Nๅฆๆไฝ ็่ฟๆฅๅพๆ
ข/ๅปถ่ฟ้ซ๏ผ$N$N่ฏทๅขๅ ๅจๅฑๅ็ฝๆๆๅกๅจ็กฌ็ๆฏ็ถ้ขๆถไฟๆไธบ 1",
- "ul_btn": "ๅฐๆไปถ/ๆไปถๅคนๆๆพๅฐ่ฟ้๏ผๆ็นๅปๆ๏ผ",
- "ul_btnu": "ไธ ไผ ",
- "ul_btns": "ๆ ็ดข",
-
- "ul_hash": "ๅๅธ",
- "ul_send": "ๅ้",
- "ul_done": "ๅฎๆ",
- "ul_idle1": "ๆฒกๆๆ้็ไธไผ ไปปๅก",
- "ut_etah": "ๅนณๅ <em>hashing</em> ้ๅบฆๅไผฐ่ฎกๅฎๆๆถ้ด",
- "ut_etau": "ๅนณๅ <em>ไธไผ </em> ้ๅบฆๅไผฐ่ฎกๅฎๆๆถ้ด",
- "ut_etat": "ๅนณๅ <em>ๆป</em> ้ๅบฆๅไผฐ่ฎกๅฎๆๆถ้ด",
-
- "uct_ok": "ๆๅๅฎๆ",
- "uct_ng": "ๅคฑ่ดฅ/ๆ็ป/ๆชๆพๅฐ",
- "uct_done": "ๆๅๅๅคฑ่ดฅ็็ปๅ",
- "uct_bz": "ๆญฃๅจๅๅธๆไธไผ ",
- "uct_q": "็ฉบ้ฒ๏ผๅพ
ๅค็",
-
- "utl_name": "ๆไปถๅ",
- "utl_ulist": "ๅ่กจ",
- "utl_ucopy": "ๅคๅถ",
- "utl_links": "้พๆฅ",
- "utl_stat": "็ถๆ",
- "utl_prog": "่ฟๅบฆ",
-
- // ไฟๆ็ฎ็ญ:
- "utl_404": "404",
- "utl_err": "้่ฏฏ",
- "utl_oserr": "OS้่ฏฏ",
- "utl_found": "ๅทฒๆพๅฐ",
- "utl_defer": "ๅปถๆ",
- "utl_yolo": "ๅ ้",
- "utl_done": "ๅฎๆ",
-
- "ul_flagblk": "ๆไปถๅทฒๆทปๅ ๅฐ้ๅ
ไฝๅฆไธไธชๆต่งๅจๆ ็ญพไธญๆไธไธช็นๅฟ็ up2k๏ผ
ๅ ๆญค็ญๅพ
ๅฎๅฎๆ",
- "ul_btnlk": "ๆๅกๅจ้
็ฝฎๅทฒๅฐๆญคๅผๅ
ณ้ๅฎๅฐๆญค็ถๆ",
-
- "udt_up": "ไธไผ ",
- "udt_srch": "ๆ็ดข",
- "udt_drop": "ๅฐๆไปถๆๆพๅฐ่ฟ้",
-
- "u_nav_m": 'ๅฅฝ็๏ผไฝ ๆไปไน๏ผ
Enter = ๆไปถ๏ผไธไธชๆๅคไธช๏ผ\nESC = ไธไธชๆไปถๅคน๏ผๅ
ๆฌๅญๆไปถๅคน๏ผ',
- "u_nav_b": 'ๆไปถไธไธชๆไปถๅคน',
-
- "cl_opts": "ๅผๅ
ณ้้กน",
- "cl_themes": "ไธป้ข",
- "cl_langs": "่ฏญ่จ",
- "cl_ziptype": "ๆไปถๅคนไธ่ฝฝ",
- "cl_uopts": "up2k ๅผๅ
ณ",
- "cl_favico": "็ฝ็ซๅพๆ ",
- "cl_bigdir": "ๆๅคง็ฎๅฝๆฐ",
- "cl_hsort": "#sort", //m
- "cl_keytype": "้ฎไฝ็ฌฆๅท",
- "cl_hiddenc": "้่ๅ",
- "cl_hidec": "้่",
- "cl_reset": "้็ฝฎ",
- "cl_hpick": "็นๅปๅๆ ้ขไปฅๅจไธ่กจไธญ้่",
- "cl_hcancel": "ๅ้่ๅทฒๅๆถ",
-
- "ct_grid": '็ฝๆ ผ่งๅพ',
- "ct_ttips": 'โ โก โ">โน๏ธ ๅทฅๅ
ทๆ็คบ',
- "ct_thumb": 'ๅจ็ฝๆ ผ่งๅพไธญ๏ผๅๆขๅพๆ ๆ็ผฉ็ฅๅพ$Nๅฟซๆท้ฎ: T">๐ผ๏ธ ็ผฉ็ฅๅพ',
- "ct_csel": 'ๅจ็ฝๆ ผ่งๅพไธญไฝฟ็จ CTRL ๅ SHIFT ่ฟ่กๆไปถ้ๆฉ">CTRL',
- "ct_ihop": 'ๅฝๅพๅๆฅ็ๅจๅ
ณ้ญๆถ๏ผๆปๅจๅฐๆๅๆฅ็็ๆไปถ">ๆปๅจ',
- "ct_dots": 'ๆพ็คบ้่ๆไปถ๏ผๅฆๆๆๅกๅจๅ
่ฎธ๏ผ">้่ๆไปถ',
- "ct_qdel": 'ๅ ้คๆไปถๆถ๏ผๅช้็กฎ่ฎคไธๆฌก">ๅฟซๅ ', //m
- "ct_dir1st": 'ๅจๆไปถไนๅๆๅบๆไปถๅคน">๐ ๆๅบ',
- "ct_nsort": 'ๆญฃ็กฎๆๅบไปฅๆฐๅญๅผๅคด็ๆไปถๅ">ๆฐๅญๆๅบ', //m
- "ct_utc": 'ๆๆๆถ้ด่ฏทไฝฟ็จUTC">UTC', //m
- "ct_readme": 'ๅจๆไปถๅคนๅ่กจไธญๆพ็คบ README.md">๐ readme',
- "ct_idxh": 'ๆพ็คบ index.html ไปฃๆฟๆไปถๅคนๅ่กจ">htm',
- "ct_sbars": 'ๆพ็คบๆปๅจๆก">โ',
-
- "cut_umod": "ๅฆๆๆไปถๅทฒๅญๅจไบๆๅกๅจไธ๏ผๅฐๆๅกๅจ็ๆๅไฟฎๆนๆถ้ดๆณๆดๆฐไธบไธไฝ ็ๆฌๅฐๆไปถๅน้
๏ผ้่ฆๅๅ
ฅๅๅ ้คๆ้๏ผ\">re๐
",
-
- "cut_turbo": "YOLO ๆ้ฎ๏ผไฝ ๅฏ่ฝไธๆณๅฏ็จ่ฟไธช๏ผ$N$Nๅฆๆไฝ ไธไผ ไบๅคง้ๆไปถๅนถไธ็ฑไบๆไบๅๅ ้่ฆ้ๆฐๅฏๅจ๏ผ$Nๅนถไธๆณ่ฆๅฐฝๅฟซ็ปง็ปญไธไผ ๏ผไฝฟ็จๆญค้้กน$N$N่ฟไผ็จ็ฎๅ็ "ๆๅกๅจไธ็ๆไปถๅคงๅฐๆฏๅฆ็ธๅ๏ผ" ๆฟไปฃๅๅธๆฃๆฅ๏ผ$Nๅ ๆญคๅฆๆๆไปถๅ
ๅฎนไธๅ๏ผๅฎๅฐไธไผ่ขซไธไผ $N$Nไธไผ ๅฎๆๅ๏ผไฝ ๅบ่ฏฅๅ
ณ้ญๆญค้้กน๏ผ$N็ถๅ้ๆฐ"ไธไผ "็ธๅ็ๆไปถไปฅ่ฎฉๅฎขๆท็ซฏ้ช่ฏๅฎไปฌ\">ๅ ้",
-
- "cut_datechk": "้ค้ๅฏ็จใๅ ้ใๆ้ฎ๏ผๅฆๅๆฒกๆๆๆ$N$N็ฅๅพฎๅๅฐ YOLO ๅ ็ด ๏ผๆฃๆฅๆๅกๅจไธ็ๆไปถๆถ้ดๆณๆฏๅฆไธไฝ ็ไธ่ด$N$N็่ฎบไธ ๅบ่ฏฅ่ฝๆๆๅฐๅคงๅคๆฐๆชๅฎๆ/ๆๅ็ไธไผ ๏ผ$Nไฝไธ่ฝๆฟไปฃไนๅ็ฆ็จใๅ ้ใ่ฟ่ก็้ช่ฏ\">ๆฅๆๆฃๆฅ",
-
- "cut_u2sz": "ๆฏไธชไธไผ ๅ็ๅคงๅฐ๏ผไปฅ MiB ไธบๅไฝ๏ผ๏ผ่พๅคง็ๅผ่ทจๅคง่ฅฟๆดไผ ่พๆๆๆดๅฅฝใๅจ้ๅธธไธๅฏ้ ็่ฟๆฅไธๅฐ่ฏ่พๅฐ็ๅผ",
-
- "cut_flag": "็กฎไฟไธๆฌกๅชๆไธไธชๆ ็ญพ้กตๅจไธไผ $N -- ๅ
ถไปๆ ็ญพ้กตไนๅฟ
้กปๅฏ็จๆญค้้กน$N -- ไป
ๅฝฑๅๅไธๅๅไธ็ๆ ็ญพ้กต",
-
- "cut_az": "ๆๅญๆฏ้กบๅบไธไผ ๆไปถ๏ผ่ไธๆฏๆๆๅฐๆไปถไผๅ
$N$Nๆๅญๆฏ้กบๅบๅฏไปฅๆดๅฎนๆๅฐๆฅ็ๆๅกๅจไธๆฏๅฆๅบ็ฐไบ้ฎ้ข๏ผไฝๅจๅ
็บค/ๅฑๅ็ฝไธไผ ็จๅพฎๆ
ขไธไบ",
-
- "cut_nag": "ไธไผ ๅฎๆๆถ็ๆไฝ็ณป็ป้็ฅ$N๏ผไป
ๅฝๆต่งๅจๆๆ ็ญพ้กตไธๆดป่ทๆถ๏ผ",
- "cut_sfx": "ไธไผ ๅฎๆๆถ็ๅฃฐ้ณ่ญฆๆฅ$N๏ผไป
ๅฝๆต่งๅจๆๆ ็ญพ้กตไธๆดป่ทๆถ๏ผ",
-
- "cut_mt": "ไฝฟ็จๅค็บฟ็จๅ ้ๆไปถๅๅธ$N$N่ฟไฝฟ็จ Web Worker ๅนถไธ้่ฆๆดๅคๅ
ๅญ๏ผ้ขๅคๆๅค 512 MiB๏ผ$N$N่ฟไฝฟๅพ https ๅฟซ 30%๏ผhttp ๅฟซ 4.5 ๅ\">mt",
-
- "cut_wasm": "ไฝฟ็จๅบไบ WASM ็ๅๅธ่ฎก็ฎๅจไปฃๆฟๆต่งๅจๅ
็ฝฎ็ๅๅธๅ่ฝ๏ผ่ฟๅฏไปฅๆๅๅจๅบไบ Chrome ็ๆต่งๅจไธ็้ๅบฆ๏ผไฝไผๅขๅ CPU ไฝฟ็จ็๏ผ่ไธ่ฎธๅคๆง็ๆฌ็ Chrome ๅญๅจๆผๆด๏ผๅฏ็จๆญคๅ่ฝไผๅฏผ่ดๆต่งๅจๅ ็จๆๆๅ
ๅญๅนถๅดฉๆบใ\">wasm", //m
-
- "cft_text": "็ฝ็ซๅพๆ ๆๆฌ๏ผไธบ็ฉบๅนถๅทๆฐไปฅ็ฆ็จ๏ผ",
- "cft_fg": "ๅๆฏ่ฒ",
- "cft_bg": "่ๆฏ่ฒ",
-
- "cdt_lim": "ๆไปถๅคนไธญๆพ็คบ็ๆๅคงๆไปถๆฐ",
- "cdt_ask": "ๆปๅจๅฐๅบ้จๆถ๏ผ$Nไธไผๅ ่ฝฝๆดๅคๆไปถ๏ผ$N่ๆฏ่ฏข้ฎไฝ ่ฏฅๆไนๅ",
- "cdt_hsort": "ๅ
ๅซๅจๅชไฝ URL ไธญ็ๆๅบ่งๅ (<code>,sorthref</code>) ๆฐ้ใๅฐๅ
ถ่ฎพ็ฝฎไธบ 0 ๆถ๏ผ็นๅปๅชไฝ้พๆฅๆถไนไผๅฟฝ็ฅๆๅบ่งๅใ", //m
-
- "tt_entree": "ๆพ็คบๅฏผ่ช้ขๆฟ๏ผ็ฎๅฝๆ ไพง่พนๆ ๏ผ$Nๅฟซๆท้ฎ: B",
- "tt_detree": "ๆพ็คบ้ขๅ
ๅฑๅฏผ่ช$Nๅฟซๆท้ฎ: B",
- "tt_visdir": "ๆปๅจๅฐ้ๅฎ็ๆไปถๅคน",
- "tt_ftree": "ๅๆขๆไปถๅคนๆ / ๆๆฌๆไปถ$Nๅฟซๆท้ฎ: V",
- "tt_pdock": "ๅจ้กถ้จ็ๅ้ ็ชๆ ผไธญๆพ็คบ็ถๆไปถๅคน",
- "tt_dynt": "้็ๆ ็ๅฑๅผ่ชๅจๅข้ฟ",
- "tt_wrap": "่ชๅจๆข่ก",
- "tt_hover": "ๆฌๅๆถๆพ็คบๆบขๅบ็่ก$N๏ผๅฝ้ผ ๆ ๅ
ๆ ๅจๅทฆไพง่พนๆ ไธญๆถ๏ผๆปๅจๅฏ่ฝไผไธญๆญ๏ผ",
-
- "ml_pmode": "ๅจๆไปถๅคนๆซๅฐพๆถ...",
- "ml_btns": "ๅฝไปค",
- "ml_tcode": "่ฝฌ็ ",
- "ml_tcode2": "่ฝฌๆขไธบ", //m
- "ml_tint": "้ๆๅบฆ",
- "ml_eq": "้ณ้ขๅ่กกๅจ",
- "ml_drc": "ๅจๆ่ๅดๅ็ผฉๅจ",
-
- "mt_loop": "ๅพช็ฏๆญๆพๅฝๅ็ๆญๆฒ\">๐", //m
- "mt_one": "ๅชๆญๆพไธ้ฆๆญๅๅๆญข\">1๏ธโฃ", //m
- "mt_shuf": "ๅจๆฏไธชๆไปถๅคนไธญ้ๆบๆญๆพๆญๆฒ\">๐",
- "mt_aplay": "ๅฆๆ้พๆฅไธญๆๆญๆฒ ID๏ผๅ่ชๅจๆญๆพ,็ฆ็จๆญค้้กนๅฐๅๆญขๅจๆญๆพ้ณไนๆถๆดๆฐ้กต้ข URL ไธญ็ๆญๆฒ ID๏ผไปฅ้ฒๆญขๅจ่ฎพ็ฝฎไธขๅคฑไฝ URL ไฟ็ๆถ่ชๅจๆญๆพ\">่ชๅจๆญๆพโถ",
- "mt_preload": "ๅจๆญๆฒๅฟซ็ปๆๆถๅผๅงๅ ่ฝฝไธไธ้ฆๆญ๏ผไปฅๅฎ็ฐๆ ็ผๆญๆพ\">้ขๅ ่ฝฝ",
- "mt_prescan": "ๅจๆๅไธ้ฆๆญ็ปๆไนๅๅๆขๅฐไธไธไธชๆไปถๅคน$Nไฟๆ็ฝ้กตๆต่งๅจๆดป่ท$Nไปฅๅ
ๅๆญขๆญๆพ\">่ชๅจๅๆข",
- "mt_fullpre": "ๅฐ่ฏ้ขๅ ่ฝฝๆด้ฆๆญ๏ผ$Nโ
ๅจ ไธๅฏ้ ่ฟๆฅไธๅฏ็จ๏ผ$Nโ ๅฏ่ฝๅจๆ
ข้่ฟๆฅไธ็ฆ็จ\">ๅ ่ฝฝๆด้ฆๆญ",
- "mt_fau": "ๅจๆๆบไธ๏ผๅฆๆไธไธ้ฆๆญๆช่ฝๅฟซ้้ขๅ ่ฝฝ๏ผ้ฒๆญข้ณไนๅๆญข๏ผๅฏ่ฝๅฏผ่ดๆ ็ญพๆพ็คบๅผๅธธ๏ผ\">โ๏ธ",
- "mt_waves": "ๆณขๅฝข่ฟๅบฆๆก๏ผ$Nๆพ็คบ้ณ้ขๅน
ๅบฆ\">่ฟๅบฆๆก",
- "mt_npclip": "ๆพ็คบๅฝๅๆญๆพๆญๆฒ็ๅช่ดดๆฟๆ้ฎ\">โชๅชๅๆฟ",
- "mt_m3u_c": "ๆพ็คบๆ้ฎไปฅๅฐๆ้ๆญๆฒ$Nๅคๅถไธบ m3u8 ๆญๆพๅ่กจๆก็ฎ\">๐ป", //m
- "mt_octl": "ๆไฝ็ณป็ป้ๆ๏ผๅชไฝๅฟซๆท้ฎ / OSD๏ผ\">OSD",
- "mt_oseek": "ๅ
่ฎธ้่ฟๆไฝ็ณป็ป้ๆ่ฟ่ก่ทณ่ฝฌ$N$Nๆณจๆ๏ผๅจๆไบ่ฎพๅค๏ผๅฆ iPhone๏ผไธ๏ผ$N่ฟๅฐๆฟไปฃไธไธ้ฆๆญๆ้ฎ\">seek",
- "mt_oscv": "ๅจ OSD ไธญๆพ็คบไธ่พๅฐ้ข\">ๅฐ้ข",
- "mt_follow": "ไฟๆๆญฃๅจๆญๆพ็ๆฒ็ฎๆปๅจๅฐ่งๅพไธญ\">๐ฏ",
- "mt_compact": "็ดงๅ็ๆงๅถๆ้ฎ\">โ",
- "mt_uncache": "ๆธ
้ค็ผๅญ $N๏ผๅฆๆไฝ ็ๆต่งๅจ็ผๅญไบไธไธชๆๅ็ๆญๆฒๅฏๆฌ่ๆ็ปๆญๆพ๏ผ่ฏทๅฐ่ฏๆญคๆไฝ๏ผ\">uncache",
- "mt_mloop": "ๅพช็ฏๆๅผ็ๆไปถๅคน\">๐ ๅพช็ฏ",
- "mt_mnext": "ๅ ่ฝฝไธไธไธชๆไปถๅคนๅนถ็ปง็ปญ\">๐ ไธไธ้ฆ",
- "mt_mstop": "ๅๆญขๆญๆพ\">โธ ๅๆญข", //m
- "mt_cflac": "ๅฐ flac / wav ่ฝฌๆขไธบ {0}\">flac",
- "mt_caac": "ๅฐ aac / m4a ่ฝฌๆขไธบ {0}\">aac",
- "mt_coth": "ๅฐๆๆๅ
ถไป๏ผไธๆฏ mp3๏ผ่ฝฌๆขไธบ {0}\">oth",
- "mt_c2opus": "้ๅๆก้ข็ต่ใ็ฌ่ฎฐๆฌ็ต่ๅๅฎๅ่ฎพๅค็ๆไฝณ้ๆฉ\">opus", //m
- "mt_c2owa": "opus-weba๏ผ้็จไบ iOS 17.5 ๅๆดๆฐ็ๆฌ๏ผ\">owa", //m
- "mt_c2caf": "opus-caf๏ผ้็จไบ iOS 11 ๅฐ iOS 17๏ผ\">caf", //m
- "mt_c2mp3": "้็จไบ้ๅธธๆง็่ฎพๅค\">mp3", //m
- "mt_c2flac": "ๆไฝณ้ณ่ดจ๏ผไฝไธ่ฝฝ้ๅพๅคง\">flac", //m
- "mt_c2wav": "ๆ ๅ็ผฉๆญๆพ๏ผๆดๅ ็ฉบ้ด๏ผ\">wav", //m
- "mt_c2ok": "ไธ้็้ๆฉ๏ผ", //m
- "mt_c2nd": "่ฟไธๆฏๆจ็่ฎพๅคๆจ่็่พๅบๆ ผๅผ๏ผไฝๅบ่ฏฅๆฒก้ฎ้ขใ", //m
- "mt_c2ng": "ๆจ็่ฎพๅคไผผไนไธๆฏๆๆญค่พๅบๆ ผๅผ๏ผไธ่ฟๆไปฌ่ฟๆฏ่ฏ่ฏ็ๅงใ", //m
- "mt_xowa": "iOS ็ณป็ปไปๅญๅจๆ ๆณๅๅฐๆญๆพ owa ้ณไน็้่ฏฏ๏ผ่ฏทๆน็จ caf ๆ mp3 ๆ ผๅผใ", //m
- "mt_tint": "ๅจ่ฟๅบฆๆกไธ่ฎพ็ฝฎ่ๆฏ็บงๅซ๏ผ0-100๏ผ",
- "mt_eq": "ๅฏ็จๅ่กกๅจๅๅข็ๆงๅถ๏ผ$N$Nboost <code>0</code> = ๆ ๅ 100% ้ณ้๏ผ้ป่ฎค๏ผ$N$Nwidth <code>1 </code> = ๆ ๅ็ซไฝๅฃฐ๏ผ้ป่ฎค๏ผ$Nwidth <code>0.5</code> = 50% ๅทฆๅณไบคๅๅ้ฆ$Nwidth <code>0 </code> = ๅๅฃฐ้$N$Nboost <code>-0.8</code> & width <code>10</code> = ไบบๅฃฐ็งป้ค )$N$Nๅฏ็จๅ่กกๅจไฝฟๆ ็ผไธ่พๅฎๅ
จๆ ็ผ๏ผๆไปฅๅฆๆไฝ ๅจไน่ฟไธ็น๏ผ่ฏทไฟๆๅฏ็จ๏ผๆๆๅผ่ฎพไธบ้ถ๏ผ้คไบๅฎฝๅบฆ = 1๏ผ",
- "mt_drc": "ๅฏ็จๅจๆ่ๅดๅ็ผฉๅจ๏ผ้ณ้ๅนณๆปๅจ / ้ๅน
ๅจ๏ผ๏ผ่ฟไผๅฏ็จๅ่กกๅจไปฅๅนณ่กก้ณ้ข๏ผๅ ๆญคๅฆๆไฝ ไธๆณ่ฆๅฎ๏ผ่ฏทๅฐๅ่กกๅจๅญๆฎต้คไบ 'ๅฎฝๅบฆ' ๅค็ๆๆๅญๆฎต่ฎพ็ฝฎไธบ 0$N$N้ไฝ THRESHOLD dB ไปฅไธ็้ณ้ข็้ณ้๏ผๆฏ่ถ
่ฟ THRESHOLD dB ็ RATIO ไผๆ 1 dB ่พๅบ๏ผๆไปฅ้ป่ฎคๅผ tresh -24 ๅ ratio 12 ๆๅณ็ๅฎ็้ณ้ไธๅบ่ถ
่ฟ -22 dB๏ผๅฏไปฅๅฎๅ
จๅฐๅฐๅ่กกๅจๅข็ๆ้ซๅฐ 0.8๏ผ็่ณๅจ ATK 0 ๅ RLS ๅฆ 90 ็ๆ
ๅตไธๆ้ซๅฐ 1.8๏ผไป
ๅจ Firefox ไธญๆๆ๏ผๅ
ถไปๆต่งๅจไธญ RLS ๆๅคงไธบ 1๏ผ$N$N๏ผ่ง็ปดๅบ็พ็ง๏ผไปไปฌ่งฃ้ๅพๆดๅฅฝ๏ผ",
-
- "mb_play": "ๆญๆพ",
- "mm_hashplay": "ๆญๆพ่ฟไธช้ณ้ขๆไปถ๏ผ",
- "mm_m3u": "ๆ Enter/็กฎๅฎ ๆญๆพ\nๆ ESC/ๅๆถ ็ผ่พ", //m
- "mp_breq": "้่ฆ Firefox 82+ ๆ Chrome 73+ ๆ iOS 15+",
- "mm_bload": "ๆญฃๅจๅ ่ฝฝ...",
- "mm_bconv": "ๆญฃๅจ่ฝฌๆขไธบ {0}๏ผ่ฏท็จ็ญ...",
- "mm_opusen": "ไฝ ็ๆต่งๅจๆ ๆณๆญๆพ aac / m4a ๆไปถ๏ผ\n็ฐๅจๅฏ็จ่ฝฌ็ ไธบ opus",
- "mm_playerr": "ๆญๆพๅคฑ่ดฅ๏ผ",
- "mm_eabrt": "ๆญๆพๅฐ่ฏๅทฒๅๆถ",
- "mm_enet": "ไฝ ็ไบ่็ฝ่ฟๆฅๆ้ฎ้ข",
- "mm_edec": "่ฟไธชๆไปถๅฏ่ฝๅทฒๆๅ๏ผ๏ผ",
- "mm_esupp": "ไฝ ็ๆต่งๅจไธๆฏๆ่ฟไธช้ณ้ขๆ ผๅผ",
- "mm_eunk": "ๆช็ฅ้่ฏฏ",
- "mm_e404": "ๆ ๆณๆญๆพ้ณ้ข๏ผ้่ฏฏ 404๏ผๆไปถๆชๆพๅฐใ",
- "mm_e403": "ๆ ๆณๆญๆพ้ณ้ข๏ผ้่ฏฏ 403๏ผ่ฎฟ้ฎ่ขซๆ็ปใ\n\nๅฐ่ฏๆ F5 ้ๆฐๅ ่ฝฝ๏ผไน่ฎธไฝ ๅทฒ่ขซๆณจ้",
- "mm_e500": "ๆ ๆณๆญๆพ้ณ้ข๏ผ้่ฏฏ 500๏ผๆฃๆฅๆๅกๅจๆฅๅฟใ", //m
- "mm_e5xx": "ๆ ๆณๆญๆพ้ณ้ข๏ผๆๅกๅจ้่ฏฏ",
- "mm_nof": "้่ฟๆพไธๅฐๆดๅค้ณ้ขๆไปถ",
- "mm_prescan": "ๆญฃๅจๅฏปๆพไธไธ้ฆ้ณไน...",
- "mm_scank": "ๆพๅฐไธไธ้ฆๆญ๏ผ",
- "mm_uncache": "็ผๅญๅทฒๆธ
้ค๏ผๆๆๆญๆฒๅฐๅจไธๆฌกๆญๆพๆถ้ๆฐไธ่ฝฝ",
- "mm_hnf": "้ฃ้ฆๆญไธๅๅญๅจ",
-
- "im_hnf": "้ฃๅผ ๅพ็ไธๅๅญๅจ",
-
- "f_empty": '่ฏฅๆไปถๅคนไธบ็ฉบ',
- "f_chide": '้่ๅ ยซ{0}ยป\n\nไฝ ๅฏไปฅๅจ่ฎพ็ฝฎ้้กนๅกไธญ้ๆฐๆพ็คบๅ',
- "f_bigtxt": "่ฟไธชๆไปถๅคงๅฐไธบ {0} MiB -- ็็ไปฅๆๆฌๅฝขๅผๆฅ็๏ผ",
- "f_bigtxt2": " ไฝ ๆณๆฅ็ๆไปถ็็ปๅฐพ้จๅๅ๏ผ่ฟไนๅฐๅฏ็จๅฎๆถ่ท่ธชๅ่ฝ๏ผ่ฝๅคๅฎๆถๆพ็คบๆฐๆทปๅ ็ๆๆฌ่กใ", //m
- "fbd_more": '',
- "fbd_all": '',
- "f_anota": "ไป
้ๆฉไบ {0} ไธช้กน็ฎ๏ผๅ
ฑ {1} ไธช๏ผ\n่ฆ้ๆฉๆดไธชๆไปถๅคน๏ผ่ฏทๅ
ๆปๅจๅฐๅบ้จ", //m
-
- "f_dls": 'ๅฝๅๆไปถๅคนไธญ็ๆไปถ้พๆฅๅทฒ\nๆดๆนไธบไธ่ฝฝ้พๆฅ',
-
- "f_partial": "่ฆๅฎๅ
จไธ่ฝฝๆญฃๅจไธไผ ็ๆไปถ๏ผ่ฏท็นๅปๆฒกๆ .PARTIAL ๆไปถๆฉๅฑๅ็ๅๅๆไปถใ่ฏทๆๅๆถๆ Escape ๆง่กๆญคๆไฝใ\n\nๆ ็กฎๅฎ / Enter ๅฐๅฟฝ็ฅๆญค่ญฆๅๅนถ็ปง็ปญไธ่ฝฝ .PARTIAL ไธดๆถๆไปถ๏ผ่ฟๅ ไน่ฏๅฎไผๅฏผ่ดๆฐๆฎๆๅใ",
-
- "ft_paste": "็ฒ่ดด {0} ้กน$Nๅฟซๆท้ฎ: ctrl-V",
- "fr_eperm": 'ๆ ๆณ้ๅฝๅ๏ผ\nไฝ ๅจๆญคๆไปถๅคนไธญๆฒกๆ โ็งปๅจโ ๆ้',
- "fd_eperm": 'ๆ ๆณๅ ้ค๏ผ\nไฝ ๅจๆญคๆไปถๅคนไธญๆฒกๆ โๅ ้คโ ๆ้',
- "fc_eperm": 'ๆ ๆณๅชๅ๏ผ\nไฝ ๅจๆญคๆไปถๅคนไธญๆฒกๆ โ็งปๅจโ ๆ้',
- "fp_eperm": 'ๆ ๆณ็ฒ่ดด๏ผ\nไฝ ๅจๆญคๆไปถๅคนไธญๆฒกๆ โๅๅ
ฅโ ๆ้',
- "fr_emore": "้ๆฉ่ณๅฐไธไธช้กน็ฎไปฅ้ๅฝๅ",
- "fd_emore": "้ๆฉ่ณๅฐไธไธช้กน็ฎไปฅๅ ้ค",
- "fc_emore": "้ๆฉ่ณๅฐไธไธช้กน็ฎไปฅๅชๅ",
- "fcp_emore": "้ๆฉ่ณๅฐไธไธช่ฆๅคๅถๅฐๅช่ดดๆฟ็้กน็ฎ", //m
-
- "fs_sc": "ๅไบซไฝ ๆๅจ็ๆไปถๅคน",
- "fs_ss": "ๅไบซ้ๅฎ็ๆไปถ",
- "fs_just1d": "ไฝ ไธ่ฝๅๆถ้ๆฉๅคไธชๆไปถๅคน๏ผไนไธ่ฝๅๆถ้ๆฉๆไปถๅคนๅๆไปถ",
- "fs_abrt": "โ ๅๆถ",
- "fs_rand": "๐ฒ ้ๆบๅ็งฐ",
- "fs_go": "โ
ๅๅปบๅไบซ",
- "fs_name": "ๅ็งฐ",
- "fs_src": "ๆบ",
- "fs_pwd": "ๅฏ็ ",
- "fs_exp": "่ฟๆ",
- "fs_tmin": "ๅ",
- "fs_thrs": "ๆถ",
- "fs_tdays": "ๅคฉ",
- "fs_never": "ๆฐธไน
",
- "fs_pname": "้พๆฅๅ็งฐๅฏ้๏ผๅฆๆไธบ็ฉบๅ้ๆบ",
- "fs_tsrc": "ๅ
ฑไบซ็ๆไปถๆๆไปถๅคน",
- "fs_ppwd": "ๅฏ็ ๅฏ้",
- "fs_w8": "ๆญฃๅจๅๅปบๆไปถๅ
ฑไบซ...",
- "fs_ok": "ๆ Enter/็กฎๅฎ ๅคๅถๅฐๅช่ดดๆฟ\nๆ ESC/ๅๆถ ๅ
ณ้ญ",
-
- "frt_dec": "ๅฏ่ฝไฟฎๅคไธไบๆๅ็ๆไปถๅ\">url-decode",
- "frt_rst": "ๅฐไฟฎๆนๅ็ๆไปถๅ้็ฝฎไธบๅๅงๆไปถๅ\">โบ ้็ฝฎ",
- "frt_abrt": "ไธญๆญขๅนถๅ
ณ้ญๆญค็ชๅฃ\">โ ๅๆถ",
- "frb_apply": "ๅบ็จ้ๅฝๅ",
- "fr_adv": "ๆน้ / ๅ
ๆฐๆฎ / ๆจกๅผ้ๅฝๅ\">้ซ็บง",
- "fr_case": "ๅบๅๅคงๅฐๅ็ๆญฃๅ่กจ่พพๅผ\">case",
- "fr_win": "Windows ๅฎๅ
จๅ็งฐ๏ผๅฐ <>:"\\|?* ๆฟๆขไธบๆฅๆๅ
จ่งๅญ็ฌฆ\">win",
- "fr_slash": "ๅฐ / ๆฟๆขไธบไธไผๅฏผ่ดๆฐๆไปถๅคนๅๅปบ็ๅญ็ฌฆ\">ไธไฝฟ็จ /",
- "fr_re": "ๆญฃๅ่กจ่พพๅผๆ็ดขๆจกๅผๅบ็จไบๅๅงๆไปถๅ๏ผ$Nๅฏไปฅๅจไธ้ข็ๆ ผๅผๅญๆฎตไธญๅผ็จๆ่ท็ป๏ผๅฆ<code>(1)</code>ๅ<code>(2)</code>็ญ็ญใ",
- "fr_fmt": "ๅๅฐ foobar2000 ็ๅฏๅ๏ผ$N<code>(title)</code> ่ขซๆญๆฒๅ็งฐๆฟๆข,$N<code>[(artist) - ](title)</code> ไป
ๅฝๆญๆฒ่บๆฏๅฎถไธไธบ็ฉบๆถๆๅ
ๅซ<code>[ๆญค]</code>้จๅ$N<code>$lpad((tn),2,0)</code> ๅฐๆฒ็ฎ็ผๅทๅกซๅ
ไธบ 2 ไฝๆฐๅญ",
- "fr_pdel": "ๅ ้ค",
- "fr_pnew": "ๅฆๅญไธบ",
- "fr_pname": "ไธบไฝ ็ๆฐ้ข่ฎพๆไพไธไธชๅ็งฐ",
- "fr_aborted": "ๅทฒไธญๆญข",
- "fr_lold": "ๆงๅ็งฐ",
- "fr_lnew": "ๆฐๅ็งฐ",
- "fr_tags": "้ๅฎๆไปถ็ๆ ็ญพ๏ผๅช่ฏป๏ผไป
ไพๅ่๏ผ๏ผ",
- "fr_busy": "ๆญฃๅจ้ๅฝๅ {0} ้กน...\n\n{1}",
- "fr_efail": "้ๅฝๅๅคฑ่ดฅ๏ผ\n",
- "fr_nchg": "{0} ไธชๆฐๅ็งฐ็ฑไบ win ๅ/ๆ ไธไฝฟ็จ / ่ขซๆดๆน\n\n็กฎๅฎ็ปง็ปญไฝฟ็จ่ฟไบๆดๆน็ๆฐๅ็งฐ๏ผ",
-
- "fd_ok": "ๅ ้คๆๅ",
- "fd_err": "ๅ ้คๅคฑ่ดฅ๏ผ\n",
- "fd_none": "ๆฒกๆๆไปถ่ขซๅ ้ค๏ผๅฏ่ฝ่ขซๆๅกๅจ้
็ฝฎ๏ผxbd๏ผ้ปๆญข๏ผ",
- "fd_busy": "ๆญฃๅจๅ ้ค {0} ้กน...\n\n{1}",
- "fd_warn1": "ๅ ้ค่ฟ {0} ้กน๏ผ",
- "fd_warn2": "ๆๅๆบไผ๏ผ ๆ ๆณๆค้ใๅ ้ค๏ผ",
-
- "fc_ok": "ๅชๅ {0} ้กน",
- "fc_warn": 'ๅชๅ {0} ้กน\n\nไฝ๏ผๅชๆ ่ฟไธช ๆต่งๅจๆ ็ญพ้กตๅฏไปฅ็ฒ่ดดๅฎไปฌ\n๏ผๅ ไธบ้ๆฉ้ๅธธๅบๅคง๏ผ',
-
- "fcc_ok": "ๅทฒๅฐ {0} ้กนๅคๅถๅฐๅช่ดดๆฟ", //m
- "fcc_warn": 'ๅทฒๅฐ {0} ้กนๅคๅถๅฐๅช่ดดๆฟ\n\nไฝ๏ผๅชๆ ่ฟไธช ๆต่งๅจๆ ็ญพ้กตๅฏไปฅ็ฒ่ดดๅฎไปฌ\n๏ผๅ ไธบ้ๆฉ้ๅธธๅบๅคง๏ผ', //m
-
- "fp_apply": "็กฎ่ฎคๅนถ็ซๅณ็ฒ่ดด", //m
- "fp_ecut": "้ฆๅ
ๅชๅๆๅคๅถไธไบๆไปถ/ๆไปถๅคนไปฅ็ฒ่ดด/็งปๅจ\n\nๆณจๆ๏ผไฝ ๅฏไปฅๅจไธๅ็ๆต่งๅจๆ ็ญพ้กตไน้ดๅชๅ/็ฒ่ดด", //m
- "fp_ename": "{0} ้กนไธ่ฝ็งปๅจๅฐ่ฟ้๏ผๅ ไธบๅ็งฐๅทฒ่ขซๅ ็จใ่ฏทๅจไธๆน่พๅ
ฅๆฐๅ็งฐไปฅ็ปง็ปญ๏ผๆๅฐๅ็งฐ็็ฉบไปฅ่ทณ่ฟ่ฟไบ้กน๏ผ", //m
- "fcp_ename": "{0} ้กนไธ่ฝๅคๅถๅฐ่ฟ้๏ผๅ ไธบๅ็งฐๅทฒ่ขซๅ ็จใ่ฏทๅจไธๆน่พๅ
ฅๆฐๅ็งฐไปฅ็ปง็ปญ๏ผๆๅฐๅ็งฐ็็ฉบไปฅ่ทณ่ฟ่ฟไบ้กน๏ผ", //m
- "fp_emore": "่ฟๆไธไบๆไปถๅๅฒ็ช้่ฆ่งฃๅณ", //m
- "fp_ok": "็งปๅจๆๅ",
- "fcp_ok": "ๅคๅถๆๅ", //m
- "fp_busy": "ๆญฃๅจ็งปๅจ {0} ้กน...\n\n{1}",
- "fcp_busy": "ๆญฃๅจๅคๅถ {0} ้กน...\n\n{1}", //m
- "fp_abrt": "ๆญฃๅจไธญๆญข...", //m
- "fp_err": "็งปๅจๅคฑ่ดฅ๏ผ\n",
- "fcp_err": "ๅคๅถๅคฑ่ดฅ๏ผ\n", //m
- "fp_confirm": "ๅฐ่ฟไบ {0} ้กน็งปๅจๅฐ่ฟ้๏ผ",
- "fcp_confirm": "ๅฐ่ฟไบ {0} ้กนๅคๅถๅฐ่ฟ้๏ผ", //m
- "fp_etab": 'ๆ ๆณไปๅ
ถไปๆต่งๅจๆ ็ญพ้กต่ฏปๅๅช่ดดๆฟ',
- "fp_name": "ไปไฝ ็่ฎพๅคไธไผ ไธไธชๆไปถใ็ปๅฎไธไธชๅๅญ๏ผ",
- "fp_both_m": '้ๆฉ็ฒ่ดดๅ
ๅฎน
Enter = ไป ยซ{1}ยป ็งปๅจ {0} ไธชๆไปถ\nESC = ไปไฝ ็่ฎพๅคไธไผ {2} ไธชๆไปถ',
- "fcp_both_m": '้ๆฉ็ฒ่ดดๅ
ๅฎน
Enter = ไป ยซ{1}ยป ๅคๅถ {0} ไธชๆไปถ\nESC = ไปไฝ ็่ฎพๅคไธไผ {2} ไธชๆไปถ', //m
- "fp_both_b": '็งปๅจไธไผ ',
- "fcp_both_b": 'ๅคๅถไธไผ ', //m
-
- "mk_noname": "ๅจๅทฆไพงๆๆฌๆกไธญ่พๅ
ฅๅ็งฐ๏ผ็ถๅๅๆง่กๆญคๆไฝ :p",
-
- "tv_load": "ๅ ่ฝฝๆๆฌๆไปถ๏ผ\n\n{0}\n\n{1}% ({2} ็ {3} MiB ๅทฒๅ ่ฝฝ)",
- "tv_xe1": "ๆ ๆณๅ ่ฝฝๆๆฌๆไปถ๏ผ\n\n้่ฏฏ ",
- "tv_xe2": "404๏ผๆไปถๆชๆพๅฐ",
- "tv_lst": "ๆๆฌๆไปถๅ่กจ",
- "tvt_close": "่ฟๅๅฐๆไปถๅคน่งๅพ$Nๅฟซๆท้ฎ: M๏ผๆ Esc๏ผ\">โ ๅ
ณ้ญ",
- "tvt_dl": "ไธ่ฝฝๆญคๆไปถ$Nๅฟซๆท้ฎ: Y\">๐พ ไธ่ฝฝ",
- "tvt_prev": "ๆพ็คบไธไธไธชๆๆกฃ$Nๅฟซๆท้ฎ: i\">โฌ ไธไธไธช",
- "tvt_next": "ๆพ็คบไธไธไธชๆๆกฃ$Nๅฟซๆท้ฎ: K\">โฌ ไธไธไธช",
- "tvt_sel": "้ๆฉๆไปถ ๏ผ็จไบๅชๅ/ๅ ้ค/...๏ผ$Nๅฟซๆท้ฎ: S\">้ๆฉ",
- "tvt_edit": "ๅจๆๆฌ็ผ่พๅจไธญๆๅผๆไปถ$Nๅฟซๆท้ฎ: E\">โ๏ธ ็ผ่พ",
- "tvt_tail": "็่งๆไปถๆดๆน๏ผๅนถๅฎๆถๆพ็คบๆฐๅข็่ก\">๐ก ่ท่ธช", //m
- "tvt_wrap": "่ชๅจๆข่ก\">โต", //m
- "tvt_atail": "้ๅฎๅฐๅบ้จ๏ผๆพ็คบๆๆฐๅ
ๅฎน\">โ", //m
- "tvt_ctail": "่งฃๆ็ป็ซฏ้ข่ฒ๏ผANSI ่ฝฌไน็ ๏ผ\">๐", //m
- "tvt_ntail": "ๆปๅจๅๅฒไธ้๏ผไฟ็ๅคๅฐๅญ่็ๆๆฌ๏ผ", //m
-
- "m3u_add1": "ๆญๆฒๅทฒๆทปๅ ๅฐ m3u ๆญๆพๅ่กจ", //m
- "m3u_addn": "ๅทฒๆทปๅ {0} ้ฆๆญๆฒๅฐ m3u ๆญๆพๅ่กจ", //m
- "m3u_clip": "m3u ๆญๆพๅ่กจๅทฒๅคๅถๅฐๅช่ดดๆฟ\n\n่ฏทๅๅปบไธไธชไปฅ .m3u ็ปๅฐพ็ๆๆฌๆไปถ๏ผ\nๅนถๅฐๆญๆพๅ่กจ็ฒ่ดดๅฐ่ฏฅๆไปถไธญ๏ผ\n่ฟๆ ทๅฐฑๅฏไปฅๆญๆพไบ", //m
-
- "gt_vau": "ไธๆพ็คบ่ง้ข๏ผไป
ๆญๆพ้ณ้ข\">๐ง",
- "gt_msel": "ๅฏ็จๆไปถ้ๆฉ๏ผๆไฝ ctrl ้ฎ็นๅปๆไปถไปฅ่ฆ็$N$N<em>ๅฝๅฏ็จๆถ๏ผๅๅปๆไปถ/ๆไปถๅคนไปฅๆๅผๅฎ</em>$N$Nๅฟซๆท้ฎ๏ผS\">ๅค้",
- "gt_crop": "ไธญๅฟ่ฃๅช็ผฉ็ฅๅพ\">่ฃๅช",
- "gt_3x": "้ซๅ่พจ็็ผฉ็ฅๅพ\">3x",
- "gt_zoom": "็ผฉๆพ",
- "gt_chop": "ๅช่ฃ",
- "gt_sort": "ๆๅบไพๆฎ",
- "gt_name": "ๅ็งฐ",
- "gt_sz": "ๅคงๅฐ",
- "gt_ts": "ๆฅๆ",
- "gt_ext": "็ฑปๅ",
- "gt_c1": "ๆชๆญๆไปถๅๆดๅค๏ผๆพ็คบๆดๅฐ๏ผ",
- "gt_c2": "ๆชๆญๆไปถๅๆดๅฐ๏ผๆพ็คบๆดๅค๏ผ",
-
- "sm_w8": "ๆญฃๅจๆ็ดข...",
- "sm_prev": "ไธๆฌกๆฅ่ฏข็ๆ็ดข็ปๆ๏ผ\n ",
- "sl_close": "ๅ
ณ้ญๆ็ดข็ปๆ",
- "sl_hits": "ๆพ็คบ {0} ไธช็ปๆ",
- "sl_moar": "ๅ ่ฝฝๆดๅค",
-
- "s_sz": "ๅคงๅฐ",
- "s_dt": "ๆฅๆ",
- "s_rd": "่ทฏๅพ",
- "s_fn": "ๅ็งฐ",
- "s_ta": "ๆ ็ญพ",
- "s_ua": "ไธไผ ไบ",
- "s_ad": "้ซ็บง",
- "s_s1": "ๆๅฐ MiB",
- "s_s2": "ๆๅคง MiB",
- "s_d1": "ๆๆฉ iso8601",
- "s_d2": "ๆๆ iso8601",
- "s_u1": "ไธไผ ๅ",
- "s_u2": "ๅ/ๆไนๅ",
- "s_r1": "่ทฏๅพๅ
ๅซ ๏ผ็ฉบๆ ผๅ้๏ผ",
- "s_f1": "ๅ็งฐๅ
ๅซ ๏ผ็จ -nope ๅฆๅฎ๏ผ",
- "s_t1": "ๆ ็ญพๅ
ๅซ ๏ผ^=ๅผๅคด๏ผ$=็ปๅฐพ๏ผ",
- "s_a1": "็นๅฎๅ
ๆฐๆฎๅฑๆง",
-
- "md_eshow": "ๆ ๆณๆธฒๆ ",
- "md_off": "[๐readme] ๅจ [โ๏ธ] ไธญ็ฆ็จ -- ๆๆกฃ้่",
-
- "badreply": "่งฃๆๆๅกๅจๅๅคๅคฑ่ดฅ",
-
- "xhr403": "403: ่ฎฟ้ฎ่ขซๆ็ป\n\nๅฐ่ฏๆ F5 ๅฏ่ฝไผ้ๆฐ็ปๅฝ",
- "xhr0": "ๆช็ฅ๏ผๅฏ่ฝไธขๅคฑ่ฟๆฅๅฐๆๅกๅจ๏ผๆๆๅกๅจ็ฆป็บฟ๏ผ",
- "cf_ok": "ๆฑๆญ -- DD" + wah + "oS ไฟๆคๅฏๅจ\n\nไบๆ
ๅบ่ฏฅๅจๅคง็บฆ 30 ็งๅๆขๅค\n\nๅฆๆๆฒกๆไปปไฝๅๅ๏ผๆ F5 ้ๆฐๅ ่ฝฝ้กต้ข",
- "tl_xe1": "ๆ ๆณๅๅบๅญๆไปถๅคน๏ผ\n\n้่ฏฏ ",
- "tl_xe2": "404: ๆไปถๅคนๆชๆพๅฐ",
- "fl_xe1": "ๆ ๆณๅๅบๆไปถๅคนไธญ็ๆไปถ๏ผ\n\n้่ฏฏ ",
- "fl_xe2": "404: ๆไปถๅคนๆชๆพๅฐ",
- "fd_xe1": "ๆ ๆณๅๅปบๅญๆไปถๅคน๏ผ\n\n้่ฏฏ ",
- "fd_xe2": "404: ็ถๆไปถๅคนๆชๆพๅฐ",
- "fsm_xe1": "ๆ ๆณๅ้ๆถๆฏ๏ผ\n\n้่ฏฏ ",
- "fsm_xe2": "404: ็ถๆไปถๅคนๆชๆพๅฐ",
- "fu_xe1": "ๆ ๆณไปๆๅกๅจๅ ่ฝฝๆชๅๅธๅ่กจ๏ผ\n\n้่ฏฏ ",
- "fu_xe2": "404: ๆไปถๆชๆพๅฐ??",
-
- "fz_tar": "ๆชๅ็ผฉ็ gnu-tar ๆไปถ๏ผlinux / mac๏ผ",
- "fz_pax": "ๆชๅ็ผฉ็ pax ๆ ผๅผ tar๏ผ่พๆ
ข๏ผ",
- "fz_targz": "gnu-tar ๅธฆ gzip ็บงๅซ 3 ๅ็ผฉ$N$N้ๅธธ้ๅธธๆ
ข๏ผๆไปฅ$Nๅปบ่ฎฎไฝฟ็จๆชๅ็ผฉ็ tar",
- "fz_tarxz": "gnu-tar ๅธฆ xz ็บงๅซ 1 ๅ็ผฉ$N$N้ๅธธ้ๅธธๆ
ข๏ผๆไปฅ$Nๅปบ่ฎฎไฝฟ็จๆชๅ็ผฉ็ tar",
- "fz_zip8": "zip ๅธฆ utf8 ๆไปถๅ๏ผๅจ windows 7 ๅๆดๆฉ็ๆฌไธๅฏ่ฝไผๅบ็ฐ้ฎ้ข๏ผ",
- "fz_zipd": "zip ๅธฆไผ ็ป cp437 ๆไปถๅ๏ผ้็จไบ้ๅธธๆง็่ฝฏไปถ",
- "fz_zipc": "cp437 ๅธฆ crc32 ๆๅ่ฎก็ฎ๏ผ$N้็จไบ MS-DOS PKZIP v2.04g๏ผ1993 ๅนด 10 ๆ๏ผ$N๏ผๅค็ๆถ้ด่พ้ฟ๏ผๅจไธ่ฝฝๅผๅงไนๅ๏ผ",
-
- "un_m1": "ไฝ ๅฏไปฅๅ ้คไธ้ข็่ฟๆไธไผ ๏ผๆไธญๆญขๆชๅฎๆ็ไธไผ ๏ผ",
- "un_upd": "ๅทๆฐ",
- "un_m4": "ๆๅไบซไธ้ขๅฏ่ง็ๆไปถ๏ผ",
- "un_ulist": "ๆพ็คบ",
- "un_ucopy": "ๅคๅถ",
- "un_flt": "ๅฏ้่ฟๆปคๅจ๏ผ URL ๅฟ
้กปๅ
ๅซ",
- "un_fclr": "ๆธ
้ค่ฟๆปคๅจ",
- "un_derr": 'ๆชๅๅธๅ ้คๅคฑ่ดฅ๏ผ\n',
- "un_f5": 'ๅบ็ฐ้ฎ้ข๏ผ่ฏทๅฐ่ฏๅทๆฐๆๆ F5',
- "un_uf5": "ๆฑๆญ๏ผไฝ ๅฟ
้กปๅทๆฐ้กต้ข๏ผไพๅฆ๏ผๆ F5 ๆ CTRL-R๏ผ๏ผ็ถๅๆ่ฝไธญๆญขๆญคไธไผ ",
- "un_nou": '่ญฆๅ๏ผ ๆๅกๅจๅคชๅฟ๏ผๆ ๆณๆพ็คบๆชๅฎๆ็ไธไผ ๏ผ็จๅ็นๅปโๅทๆฐโ้พๆฅ',
- "un_noc": '่ญฆๅ๏ผ ๆๅกๅจ้
็ฝฎไธญๆชๅฏ็จ/ๅ
่ฎธๅฎๅ
จไธไผ ๆไปถ็ๅๆถๅๅธ',
- "un_max": "ๆพ็คบๅ 2000 ไธชๆไปถ๏ผไฝฟ็จ่ฟๆปคๅจ๏ผ",
- "un_avail": "{0} ไธช่ฟๆไธไผ ๅฏไปฅ่ขซๅ ้ค
{1} ไธชๆชๅฎๆ็ไธไผ ๅฏไปฅ่ขซไธญๆญข",
- "un_m2": "ๆไธไผ ๆถ้ดๆๅบ๏ผๆๆฐ็ๅจๅ๏ผ",
- "un_no1": "ๅๅ๏ผๆฒกๆ่ถณๅคๆฐ็ไธไผ ",
- "un_no2": "ๅๅ๏ผๆฒกๆ็ฌฆๅ่ฏฅ่ฟๆปคๅจ็่ถณๅคๆฐ็ไธไผ ",
- "un_next": "ๅ ้คไธ้ข็ไธไธไธช {0} ไธชๆไปถ",
- "un_abrt": "ไธญๆญข",
- "un_del": "ๅ ้ค",
- "un_m3": "ๆญฃๅจๅ ่ฝฝไฝ ็่ฟๆไธไผ ...",
- "un_busy": "ๆญฃๅจๅ ้ค {0} ไธชๆไปถ...",
- "un_clip": "{0} ไธช้พๆฅๅทฒๅคๅถๅฐๅช่ดดๆฟ",
-
- "u_https1": "ไฝ ๅบ่ฏฅ",
- "u_https2": "ๅๆขๅฐ https",
- "u_https3": "ไปฅ่ทๅพๆดๅฅฝ็ๆง่ฝ",
- "u_ancient": 'ไฝ ็ๆต่งๅจ้ๅธธๅค่ -- ไน่ฎธไฝ ๅบ่ฏฅ ๆน็จ bup',
- "u_nowork": "้่ฆ Firefox 53+ ๆ Chrome 57+ ๆ iOS 11+",
- "tail_2old": "้่ฆ Firefox 105+ ๆ Chrome 71+ ๆ iOS 14.5+",
- "u_nodrop": 'ๆต่งๅจ็ๆฌไฝ๏ผไธๆฏๆ้่ฟๆๅจๆไปถๅฐ็ชๅฃๆฅไธไผ ๆไปถ',
- "u_notdir": "ไธๆฏๆไปถๅคน๏ผ\n\nๆจ็ๆต่งๅจๅคชๆง๏ผ\n่ฏทๅฐ่ฏๅฐๆไปถๅคนๆๅ
ฅ็ชๅฃ",
- "u_uri": "่ฆไปๅ
ถไปๆต่งๅจ็ชๅฃๆๆพๅพ็๏ผ\n่ฏทๅฐๅ
ถๆๆพๅฐๅคง็ไธไผ ๆ้ฎไธ",
- "u_enpot": 'ๅๆขๅฐ ็ฎ็บฆ UI๏ผๅฏ่ฝๆ้ซไธไผ ้ๅบฆ๏ผ',
- "u_depot": 'ๅๆขๅฐ ็ฒพ็พ UI๏ผๅฏ่ฝ้ไฝไธไผ ้ๅบฆ๏ผ',
- "u_gotpot": 'ๅๆขๅฐ็ฎๅUIไปฅๆ้ซไธไผ ้ๅบฆ๏ผ\n\n้ๆถๅฏไปฅไธๅๆๅนถๅๆขๅๅป๏ผ',
- "u_pott": "ไธชๆไปถ๏ผ {0} ๅทฒๅฎๆ๏ผ {1} ๅคฑ่ดฅ๏ผ {2} ๆญฃๅจๅค็๏ผ {3} ๆ้ไธญ
",
- "u_ever": "่ฟๆฏๅบๆฌ็ไธไผ ๅทฅๅ
ท๏ผ up2k ้่ฆ่ณๅฐ
chrome 21 // firefox 13 // edge 12 // opera 12 // safari 5.1",
- "u_su2k": '่ฟๆฏๅบๆฌ็ไธไผ ๅทฅๅ
ท๏ผup2k ๆดๅฅฝ',
- "u_uput": 'ๆ้ซ้ๅบฆ๏ผ่ทณ่ฟๆ ก้ชๅ๏ผ',
- "u_ewrite": 'ไฝ ๅฏน่ฟไธชๆไปถๅคนๆฒกๆๅๅ
ฅๆ้',
- "u_eread": 'ไฝ ๅฏน่ฟไธชๆไปถๅคนๆฒกๆ่ฏปๅๆ้',
- "u_enoi": 'ๆไปถๆ็ดขๅจๆๅกๅจ้
็ฝฎไธญๆชๅฏ็จ',
- "u_enoow": "ๆ ๆณ่ฆ็ๆญคๅค็ๆไปถ๏ผ้่ฆๅ ้คๆ้", //m
- "u_badf": '่ฟไบ {0} ไธชๆไปถ๏ผๅ
ฑ {1} ไธช๏ผ่ขซ่ทณ่ฟ๏ผๅฏ่ฝๆฏ็ฑไบๆไปถ็ณป็ปๆ้๏ผ\n\n',
- "u_blankf": '่ฟไบ {0} ไธชๆไปถ๏ผๅ
ฑ {1} ไธช๏ผๆฏ็ฉบ็ฝ็๏ผๆฏๅฆไป็ถไธไผ ๏ผ\n\n',
- "u_applef": "่ฟไบ {0} ไธชๆไปถ๏ผๅ
ฑ {1} ไธช๏ผๅฏ่ฝๆฏไธ้่ฆ็๏ผ\nๆ ็กฎๅฎ/Enter ่ทณ่ฟไปฅไธๆไปถ๏ผ\nๆ ๅๆถ/ESC ๅๆถๆ้ค๏ผๅนถไธไผ ่ฟไบๆไปถ๏ผ\n\n", //m
- "u_just1": '\nไน่ฎธๅฆๆไฝ ๅช้ๆฉไธไธชๆไปถไผๆดๅฅฝ',
- "u_ff_many": "ๅฆๆไฝ ไฝฟ็จ็ๆฏ Linux / MacOS / Android๏ผ ้ฃไน่ฟไธชๆไปถๆฐ้ ๅฏ่ฝ ๅดฉๆบ Firefox!\nๅฆๆๅ็่ฟ็งๆ
ๅต๏ผ่ฏทๅ่ฏไธๆฌก๏ผๆไฝฟ็จ Chrome๏ผใ",
- "u_up_life": "ๆญคไธไผ ๅฐๅจ {0} ๅไปๆๅกๅจๅ ้ค",
- "u_asku": 'ๅฐ่ฟไบ {0} ไธชๆไปถไธไผ ๅฐ {1}',
- "u_unpt": "ไฝ ๅฏไปฅไฝฟ็จๅทฆไธ่ง็ ๐งฏ ๆค้/ๅ ้คๆญคไธไผ ",
- "u_bigtab": 'ๅฐๆพ็คบ {0} ไธชๆไปถ,ๅฏ่ฝไผๅฏผ่ดๆจ็ๆต่งๅจๅดฉๆบใๆจ็กฎๅฎๅ๏ผ',
- "u_scan": 'ๆญฃๅจๆซๆๆไปถ...',
- "u_dirstuck": 'ๆจ็ๆต่งๅจๆ ๆณ่ฎฟ้ฎไปฅไธ {0} ไธชๆไปถ/ๆไปถๅคน๏ผๅฎไปฌๅฐ่ขซ่ทณ่ฟ๏ผ',
- "u_etadone": 'ๅฎๆ ({0}, {1} ไธชๆไปถ)',
- "u_etaprep": '(ๅๅคไธไผ )',
- "u_hashdone": 'ๅๅธๅฎๆ',
- "u_hashing": 'ๅๅธ',
- "u_hs": 'ๆญฃๅจ็ญๅพ
ๆๅกๅจ...',
- "u_started": "ๆไปถ็ฐๅจๆญฃๅจไธไผ ๐", //m
- "u_dupdefer": "่ฟๆฏไธไธช้ๅคๆไปถใๅฎๅฐๅจๆๆๅ
ถไปๆไปถไธไผ ๅ่ฟ่กๅค็",
- "u_actx": "ๅๅปๆญคๆๆฌไปฅ้ฒๆญขๅๆขๅฐๅ
ถไป็ชๅฃ/้้กนๅกๆถๆง่ฝไธ้",
- "u_fixed": "ๅฅฝ๏ผ ๅทฒไฟฎๅค ๐",
- "u_cuerr": "ไธไผ ๅ {0} ็ {1} ๅคฑ่ดฅ๏ผ\nๅฏ่ฝๆ ๅฎณ๏ผ็ปง็ปญไธญ\n\nๆไปถ๏ผ{2}",
- "u_cuerr2": "ๆๅกๅจๆ็ปไธไผ ๏ผๅ {0} ็ {1}๏ผ๏ผ\n็จๅ้่ฏ\n\nๆไปถ๏ผ{2}\n\n้่ฏฏ ",
- "u_ehstmp": "ๅฐ้่ฏ๏ผ่งๅณไธ่ง",
- "u_ehsfin": "ๆๅกๅจๆ็ปไบๆ็ปไธไผ ่ฏทๆฑ๏ผๆญฃๅจ้่ฏ...",
- "u_ehssrch": "ๆๅกๅจๆ็ปไบๆ็ดข่ฏทๆฑ๏ผๆญฃๅจ้่ฏ...",
- "u_ehsinit": "ๆๅกๅจๆ็ปไบๅฏๅจไธไผ ่ฏทๆฑ๏ผๆญฃๅจ้่ฏ...",
- "u_eneths": "่ฟ่กไธไผ ๆกๆๆถ็็ฝ็ป้่ฏฏ๏ผๆญฃๅจ้่ฏ...",
- "u_enethd": "ๆต่ฏ็ฎๆ ๅญๅจๆถ็็ฝ็ป้่ฏฏ๏ผๆญฃๅจ้่ฏ...",
- "u_cbusy": "็ญๅพ
ๆๅกๅจๅจ็ฝ็ปๆ
้ๅๅๆฌกไฟกไปปๆไปฌ...",
- "u_ehsdf": "ๆๅกๅจ็ฃ็็ฉบ้ดไธ่ถณ๏ผ\n\nๅฐ็ปง็ปญ้่ฏ๏ผไปฅ้ฒๆไบบ\n้ๆพ่ถณๅค็็ฉบ้ดไปฅ็ปง็ปญ",
- "u_emtleak1": "็่ตทๆฅไฝ ็็ฝ้กตๆต่งๅจๅฏ่ฝๆๅ
ๅญๆณๆผ๏ผ\n่ฏท",
- "u_emtleak2": ' ๅๆขๅฐ https๏ผๆจ่๏ผ ๆ ',
- "u_emtleak3": ' ',
- "u_emtleakc": 'ๅฐ่ฏไปฅไธๆไฝ๏ผ\n- ๆ
F5 ๅทๆฐ้กต้ข - ็ถๅๅจ
โ๏ธ ่ฎพ็ฝฎ ไธญ็ฆ็จ mt ๆ้ฎ - ็ถๅๅๆฌกๅฐ่ฏไธไผ
ไธไผ ไผ็จๅพฎๆ
ขไธไบ๏ผไธ่ฟๆฒกๅ
ณ็ณปใ\nๆฑๆญๅธฆๆฅ้บป็ฆ๏ผ\n\nPS๏ผchrome v107 ๅทฒไฟฎๅคๆญค้ฎ้ข',
- "u_emtleakf": 'ๅฐ่ฏไปฅไธๆไฝ๏ผ\n- ๆ
F5 ๅทๆฐ้กต้ข - ็ถๅๅจไธไผ UI ไธญๅฏ็จ
๐ฅ๏ผๅ่ฑ๏ผ - ็ถๅๅๆฌกๅฐ่ฏไธไผ
\nPS: firefox ๅธๆไผๅจๆไธชๆถ็นไฟฎๅคๆญค้ฎ้ข',
- "u_s404": "ๅจๆๅกๅจไธๆชๆพๅฐ",
- "u_expl": "่งฃ้",
- "u_maxconn": "ๅคงๅคๆฐๆต่งๅจ้ๅถไธบ 6๏ผไฝ Firefox ๅ
่ฎธไฝ ้่ฟ connections-per-server ๅจ about:config ไธญๆ้ซ้ๅถ",
- "u_tu": '่ญฆๅ๏ผๅฏ็จไบ turbo๏ผ ๅฎขๆท็ซฏๅฏ่ฝๆ ๆณๆฃๆตๅๆขๅคไธๅฎๆด็ไธไผ ๏ผๆฅ็ turbo ๆ้ฎๅทฅๅ
ทๆ็คบ
',
- "u_ts": '่ญฆๅ๏ผๅฏ็จไบ turbo๏ผ ๆ็ดข็ปๆๅฏ่ฝไธๆญฃ็กฎ๏ผๆฅ็ turbo ๆ้ฎๅทฅๅ
ทๆ็คบ
',
- "u_turbo_c": "ๆๅกๅจ้
็ฝฎไธญ็ฆ็จไบ turbo",
- "u_turbo_g": "็ฆ็จ turbo๏ผๅ ไธบไฝ ๅจๆญคๅทไธญๆฒกๆ\n็ฎๅฝๅ่กจๆ้",
- "u_life_cfg": '่ชๅจๅ ้คๆถ้ดไธบ ๅ้๏ผๆ ๅฐๆถ๏ผ',
- "u_life_est": 'ไธไผ ๅฐๅจ --- ๅ ้ค',
- "u_life_max": 'ๆญคๆไปถๅคนๅผบๅถๆง่ก\nๆๅคงๅฏฟๅฝไธบ {0}',
- "u_unp_ok": 'ๅ
่ฎธๅๆถๅๅธ {0}',
- "u_unp_ng": 'ๅๆถๅๅธๅฐไธ่ขซๅ
่ฎธ',
- "ue_ro": 'ไฝ ๅฏน่ฟไธชๆไปถๅคน็่ฎฟ้ฎๆฏๅช่ฏป็\n\n',
- "ue_nl": 'ไฝ ๅฝๅๆช็ปๅฝ',
- "ue_la": 'ไฝ ๅฝๅไปฅ "{0}" ็ปๅฝ',
- "ue_sr": 'ไฝ ๅฝๅๅคไบๆไปถๆ็ดขๆจกๅผ\n\n้่ฟ็นๅปๅคงๆ็ดขๆ้ฎๆ่พน็ๆพๅคง้ ๐ ๅๆขๅฐไธไผ ๆจกๅผ๏ผ็ถๅ้่ฏไธไผ \n\nๆฑๆญ',
- "ue_ta": 'ๅฐ่ฏๅๆฌกไธไผ ๏ผ็ฐๅจๅบ่ฏฅ่ฝๆญฃๅธธๅทฅไฝ',
- "ue_ab": "่ฟไปฝๆไปถๆญฃๅจไธไผ ๅฐๅฆไธไธชๆไปถๅคน๏ผๅฟ
้กปๅฎๆ่ฏฅไธไผ ๅ๏ผๆ่ฝๅฐๆไปถไธไผ ๅฐๅ
ถไปไฝ็ฝฎใ\n\nๆจๅฏไปฅ้่ฟๅทฆไธ่ง็๐งฏไธญๆญขๅนถๅฟ่ฎฐ่ฏฅไธไผ ใ", //m
- "ur_1uo": "ๆๅ๏ผๆไปถไธไผ ๆๅ",
- "ur_auo": "ๆๅ๏ผๆๆ {0} ไธชๆไปถไธไผ ๆๅ",
- "ur_1so": "ๆๅ๏ผๆไปถๅจๆๅกๅจไธๆพๅฐ",
- "ur_aso": "ๆๅ๏ผๆๆ {0} ไธชๆไปถๅจๆๅกๅจไธๆพๅฐ",
- "ur_1un": "ไธไผ ๅคฑ่ดฅ๏ผๆฑๆญ",
- "ur_aun": "ๆๆ {0} ไธชไธไผ ๅคฑ่ดฅ๏ผๆฑๆญ",
- "ur_1sn": "ๆไปถๆชๅจๆๅกๅจไธๆพๅฐ",
- "ur_asn": "่ฟไบ {0} ไธชๆไปถๆชๅจๆๅกๅจไธๆพๅฐ",
- "ur_um": "ๅฎๆ๏ผ\n{0} ไธชไธไผ ๆๅ๏ผ\n{1} ไธชไธไผ ๅคฑ่ดฅ๏ผๆฑๆญ",
- "ur_sm": "ๅฎๆ๏ผ\n{0} ไธชๆไปถๅจๆๅกๅจไธๆพๅฐ๏ผ\n{1} ไธชๆไปถๆชๅจๆๅกๅจไธๆพๅฐ",
-
- "lang_set": "ๅทๆฐไปฅไฝฟๆดๆน็ๆ๏ผ",
- },
- "cze": {
- "tt": "ฤeลกtina",
-
- "cols": {
- "c": "tlaฤรญtka akcรญ",
- "dur": "doba trvรกnรญ",
- "q": "kvalita / bitrate",
- "Ac": "audio kodek",
- "Vc": "video kodek",
- "Fmt": "formรกt / kontejner",
- "Ahash": "kontrolnรญ souฤet audia",
- "Vhash": "kontrolnรญ souฤet videa",
- "Res": "rozliลกenรญ",
- "T": "typ souboru",
- "aq": "kvalita zvuku / bitrate",
- "vq": "kvalita videa / bitrate",
- "pixfmt": "podvzorkovรกnรญ / struktura pixelลฏ",
- "resw": "horizontรกlnรญ rozliลกenรญ",
- "resh": "vertikรกlnรญ rozliลกenรญ",
- "chs": "audio kanรกly",
- "hz": "vzorkovacรญ frekvence"
- },
-
- "hks": [
- [
- "rลฏznรฉ",
- ["ESC", "zavลรญt rลฏznรฉ vฤci"],
-
- "sprรกvce souborลฏ",
- ["G", "pลepnout seznam / zobrazenรญ mลรญลพky"],
- ["T", "pลepnout nรกhledy / ikony"],
- ["โง A/D", "velikost nรกhledลฏ"],
- ["ctrl-K", "smazat vybranรฉ"],
- ["ctrl-X", "vyjmout vรฝbฤr do schrรกnky"],
- ["ctrl-C", "kopรญrovat vรฝbฤr do schrรกnky"],
- ["ctrl-V", "vloลพit (pลesunout/kopรญrovat) zde"],
- ["Y", "stรกhnout vybranรฉ"],
- ["F2", "pลejmenovat vybranรฉ"],
-
- "vรฝbฤr souborลฏ",
- ["space", "pลepnout vรฝbฤr souboru"],
- ["โ/โ", "posunout kurzor vรฝbฤru"],
- ["ctrl โ/โ", "posunout kurzor a zobrazenรญ"],
- ["โง โ/โ", "vybrat pลedchozรญ/nรกsledujรญcรญ soubor"],
- ["ctrl-A", "vybrat vลกechny soubory / sloลพky"],
- ], [
- "navigace",
- ["B", "pลepnout drobeฤkovou navigaci / navigaฤnรญ panel"],
- ["I/K", "pลedchozรญ/nรกsledujรญcรญ sloลพka"],
- ["M", "nadลazenรก sloลพka (nebo sbalit aktuรกlnรญ)"],
- ["V", "pลepnout sloลพky / textovรฉ soubory v navigaฤnรญm panelu"],
- ["A/D", "velikost navigaฤnรญho panelu"],
- ], [
- "audio pลehrรกvaฤ",
- ["J/L", "pลedchozรญ/nรกsledujรญcรญ skladba"],
- ["U/O", "pลeskoฤit 10 sekund zpฤt/vpลed"],
- ["0..9", "pลejรญt na 0%..90%"],
- ["P", "pลehrรกt/pozastavit (takรฉ spustit)"],
- ["S", "vybrat pลehrรกvanou skladbu"],
- ["Y", "stรกhnout skladbu"],
- ], [
- "prohlรญลพeฤ obrรกzkลฏ",
- ["J/L, โ/โ", "pลedchozรญ/nรกsledujรญcรญ obrรกzek"],
- ["Home/End", "prvnรญ/poslednรญ obrรกzek"],
- ["F", "celรก obrazovka"],
- ["R", "otoฤit po smฤru hodinovรฝch ruฤiฤek"],
- ["โง R", "otoฤit proti smฤru hodinovรฝch ruฤiฤek"],
- ["S", "vybrat obrรกzek"],
- ["Y", "stรกhnout obrรกzek"],
- ], [
- "video pลehrรกvaฤ",
- ["U/O", "pลeskoฤit 10 sekund zpฤt/vpลed"],
- ["P/K/Space", "pลehrรกt/pozastavit"],
- ["C", "pokraฤovat pลehrรกvรกnรญm nรกsledujรญcรญ"],
- ["V", "smyฤka"],
- ["M", "ztlumit"],
- ["[ and ]", "nastavit interval smyฤky"],
- ], [
- "prohlรญลพeฤ textovรฝch souborลฏ",
- ["I/K", "pลedchozรญ/nรกsledujรญcรญ soubor"],
- ["M", "zavลรญt textovรฝ soubor"],
- ["E", "upravit textovรฝ soubor"],
- ["S", "vybrat soubor (pro vyjmutรญ/kopรญrovรกnรญ/pลejmenovรกnรญ)"],
- ]
- ],
-
- "m_ok": "OK",
- "m_ng": "Zruลกit",
-
- "enable": "Povolit",
- "danger": "NEBEZPEฤร",
- "clipped": "zkopรญrovรกno do schrรกnky",
-
- "ht_s1": "sekunda",
- "ht_s2": "sekundy",
- "ht_s5": "sekund",
- "ht_m1": "minuta",
- "ht_m2": "minuty",
- "ht_m5": "minut",
- "ht_h1": "hodina",
- "ht_h2": "hodiny",
- "ht_h5": "hodin",
- "ht_d1": "den",
- "ht_d2": "dny",
- "ht_d5": "dnรญ",
- "ht_and": " a ",
-
- "goh": "ovlรกdacรญ panel",
- "gop": 'pลedchozรญ sourozenec">pลedchozรญ',
- "gou": 'nadลazenรก sloลพka">nahoru',
- "gon": 'nรกsledujรญcรญ sloลพka">nรกsledujรญcรญ',
- "logout": "Odhlรกsit ",
- "login": "Pลihlรกsit se", //m
- "access": " pลรญstup",
- "ot_close": "zavลรญt podnabรญdku",
- "ot_search": "hledat soubory podle atributลฏ, cesty / nรกzvu, hudebnรญch tagลฏ nebo jejich kombinace$N$N<code>foo bar</code> = musรญ obsahovat jak ยซfooยป tak ยซbarยป,$N<code>foo -bar</code> = musรญ obsahovat ยซfooยป ale ne ยซbarยป,$N<code>^yana .opus$</code> = zaฤรญnรก na ยซyanaยป a je to ยซopusยป soubor$N<code>"try unite"</code> = obsahuje pลesnฤ ยซtry uniteยป$N$Nformรกt data je iso-8601, jako$N<code>2009-12-31</code> nebo <code>2020-09-12 23:30:00</code>",
- "ot_unpost": "unpost: smazat vaลกe nedรกvnรฉ nahrรกnรญ nebo zruลกit nedokonฤenรฉ",
- "ot_bup": "bup: zรกkladnรญ nahrรกvaฤ, podporuje i netscape 4.0",
- "ot_mkdir": "mkdir: vytvoลit novรฝ adresรกล",
- "ot_md": "new-md: vytvoลit novรฝ markdown dokument",
- "ot_msg": "msg: poslat zprรกvu do logu serveru",
- "ot_mp": "moลพnosti pลehrรกvaฤe mรฉdiรญ",
- "ot_cfg": "moลพnosti konfigurace",
- "ot_u2i": 'up2k: nahrรกt soubory (pokud mรกte oprรกvnฤnรญ k zรกpisu) nebo pลepnout do vyhledรกvacรญho reลพimu a podรญvat se, zda existujรญ nฤkde na serveru$N$Nnahrรกvรกnรญ je obnovitelnรฉ, vรญcevlรกknovรฉ a ฤasovรฉ znaฤky souborลฏ jsou zachovรกny, ale pouลพรญvรก vรญce CPU neลพ [๐] (zรกkladnรญ nahrรกvaฤ)
bฤhem nahrรกvรกnรญ se tato ikona stรกvรก indikรกtorem prลฏbฤhu!',
- "ot_u2w": 'up2k: nahrรกt soubory s podporou obnovenรญ (zavลete prohlรญลพeฤ a stejnรฉ soubory pลetรกhnฤte pozdฤji)$N$Nvรญcevlรกknovรฉ a ฤasovรฉ znaฤky souborลฏ jsou zachovรกny, ale pouลพรญvรก vรญce CPU neลพ [๐] (zรกkladnรญ nahrรกvaฤ)
bฤhem nahrรกvรกnรญ se tato ikona stรกvรก indikรกtorem prลฏbฤhu!',
- "ot_noie": 'Prosรญm pouลพijte Chrome / Firefox / Edge',
-
- "ab_mkdir": "vytvoลit adresรกล",
- "ab_mkdoc": "novรฝ markdown dokument",
- "ab_msg": "poslat zprรกvu do logu serveru",
-
- "ay_path": "pลejรญt na sloลพky",
- "ay_files": "pลejรญt na soubory",
-
- "wt_ren": "pลejmenovat vybranรฉ poloลพky$NKlรกvesovรก zkratka: F2",
- "wt_del": "smazat vybranรฉ poloลพky$NKlรกvesovรก zkratka: ctrl-K",
- "wt_cut": "vyjmout vybranรฉ poloลพky <small>(pak je vloลพit nฤkam jinam)</small>$NKlรกvesovรก zkratka: ctrl-X",
- "wt_cpy": "kopรญrovat vybranรฉ poloลพky do schrรกnky$N(pro vloลพenรญ nฤkam jinam)$NKlรกvesovรก zkratka: ctrl-C",
- "wt_pst": "vloลพit dลรญve vyjmutรฝ / zkopรญrovanรฝ vรฝbฤr$NKlรกvesovรก zkratka: ctrl-V",
- "wt_selall": "vybrat vลกechny soubory$NKlรกvesovรก zkratka: ctrl-A (kdyลพ je zamฤลen soubor)",
- "wt_selinv": "invertovat vรฝbฤr",
- "wt_zip1": "stรกhnout tuto sloลพku jako archiv",
- "wt_selzip": "stรกhnout vรฝbฤr jako archiv",
- "wt_seldl": "stรกhnout vรฝbฤr jako samostatnรฉ soubory$NKlรกvesovรก zkratka: Y",
- "wt_npirc": "kopรญrovat informace o stopฤ ve formรกtu irc",
- "wt_nptxt": "kopรญrovat informace o stopฤ v prostรฉm textu",
- "wt_m3ua": "pลidat do m3u playlistu (kliknฤte pozdฤji na ๐ปkopรญrovat)",
- "wt_m3uc": "kopรญrovat m3u playlist do schrรกnky",
- "wt_grid": "pลepnout zobrazenรญ mลรญลพky / seznamu$NKlรกvesovรก zkratka: G",
- "wt_prev": "pลedchozรญ stopa$NKlรกvesovรก zkratka: J",
- "wt_play": "pลehrรกt / pozastavit$NKlรกvesovรก zkratka: P",
- "wt_next": "nรกsledujรญcรญ stopa$NKlรกvesovรก zkratka: L",
-
- "ul_par": "paralelnรญ nahrรกvรกnรญ:",
- "ut_rand": "nรกhodnรฉ nรกzvy souborลฏ",
- "ut_u2ts": "kopรญrovat ฤasovou znaฤku poslednรญ zmฤny$Nz vaลกeho souborovรฉho systรฉmu na server\">๐
",
- "ut_ow": "pลepsat existujรญcรญ soubory na serveru?$N๐ก๏ธ: nikdy (mรญsto toho vytvoลรญ novรฝ nรกzev souboru)$N๐: pลepsat pokud je soubor na serveru starลกรญ neลพ vรกลก$Nโป๏ธ: vลพdy pลepsat pokud se soubory liลกรญ",
- "ut_mt": "pokraฤovat v hashovรกnรญ ostatnรญch souborลฏ bฤhem nahrรกvรกnรญ$N$Nmoลพnรก zakรกzat pokud je vaลกe CPU nebo HDD bottleneckem",
- "ut_ask": 'poลพรกdat o potvrzenรญ pลed zahรกjenรญm nahrรกvรกnรญ">๐ญ',
- "ut_pot": "zlepลกit rychlost nahrรกvรกnรญ na pomalรฝch zaลรญzenรญch$Nzjednoduลกenรญm UI",
- "ut_srch": "skuteฤnฤ nenahrรกvat, mรญsto toho zkontrolovat zda soubory jiลพ $N existujรญ na serveru (prohledรก vลกechny sloลพky kterรฉ mลฏลพete ฤรญst)",
- "ut_par": "pozastavit nahrรกvรกnรญ nastavenรญm na 0$N$Nzvรฝลกit pokud je vaลกe pลipojenรญ pomalรฉ / vysokรก latence$N$Nponechat na 1 v LAN nebo pokud je HDD serveru bottleneckem",
- "ul_btn": "pลetรกhnฤte soubory / sloลพky
sem (nebo sem kliknฤte)",
- "ul_btnu": "N A H R ร T",
- "ul_btns": "H L E D A T",
-
- "ul_hash": "hash",
- "ul_send": "odeslat",
- "ul_done": "hotovo",
- "ul_idle1": "zatรญm nejsou zaลazena ลพรกdnรก nahrรกvรกnรญ",
- "ut_etah": "prลฏmฤrnรก rychlost <em>hashovรกnรญ</em> a odhadovanรฝ ฤas do dokonฤenรญ",
- "ut_etau": "prลฏmฤrnรก rychlost <em>nahrรกvรกnรญ</em> a odhadovanรฝ ฤas do dokonฤenรญ",
- "ut_etat": "prลฏmฤrnรก <em>celkovรก</em> rychlost a odhadovanรฝ ฤas do dokonฤenรญ",
-
- "uct_ok": "รบspฤลกnฤ dokonฤeno",
- "uct_ng": "nedobrรฉ: selhalo / odmรญtnuto / nenalezeno",
- "uct_done": "celkem",
- "uct_bz": "hashovรกnรญ nebo nahrรกvรกnรญ",
- "uct_q": "neฤinnรฉ, ฤekajรญcรญ",
-
- "utl_name": "nรกzev souboru",
- "utl_ulist": "seznam",
- "utl_ucopy": "kopรญrovat",
- "utl_links": "odkazy",
- "utl_stat": "stav",
- "utl_prog": "prลฏbฤh",
-
- // keep short:
- "utl_404": "404",
- "utl_err": "CHYBA",
- "utl_oserr": "chyba OS",
- "utl_found": "nalezeno",
- "utl_defer": "odloลพit",
- "utl_yolo": "YOLO",
- "utl_done": "hotovo",
-
- "ul_flagblk": "soubory byly pลidรกny do fronty
nicmรฉnฤ v jinรฉ kartฤ prohlรญลพeฤe bฤลพรญ up2k,
takลพe ฤekรกme aลพ skonฤรญ",
- "ul_btnlk": "konfigurace serveru uzamkla tento pลepรญnaฤ v tomto stavu",
-
- "udt_up": "Nahrรกvรกnรญ",
- "udt_srch": "Hledรกnรญ",
- "udt_drop": "pลetรกhnฤte to sem",
-
- "u_nav_m": 'jasnaฤka, co mรกte?
Enter = Soubory (jeden nebo vรญce)\nESC = Jednu sloลพku (vฤetnฤ podsloลพek)',
- "u_nav_b": 'SouboryJedna sloลพka',
-
- "cl_opts": "pลepรญnaฤe",
- "cl_themes": "tรฉma",
- "cl_langs": "jazyk",
- "cl_ziptype": "stahovรกnรญ sloลพky",
- "cl_uopts": "up2k pลepรญnaฤe",
- "cl_favico": "favicon",
- "cl_bigdir": "velkรฉ adresรกลe",
- "cl_hsort": "#ลazenรญ",
- "cl_keytype": "notace klรกves",
- "cl_hiddenc": "skrytรฉ sloupce",
- "cl_hidec": "skrรฝt",
- "cl_reset": "resetovat",
- "cl_hpick": "klepnฤte na zรกhlavรญ sloupcลฏ pro skrytรญ v tabulce nรญลพe",
- "cl_hcancel": "skrรฝvรกnรญ sloupcลฏ zruลกeno",
-
- "ct_grid": '็ฐ mลรญลพka',
- "ct_ttips": 'โ โก โ">โน๏ธ nรกpovฤdy',
- "ct_thumb": 'v zobrazenรญ mลรญลพky pลepnout ikony nebo nรกhledy$NKlรกvesovรก zkratka: T">๐ผ๏ธ nรกhledy',
- "ct_csel": 'pouลพรญt CTRL a SHIFT pro vรฝbฤr souborลฏ v zobrazenรญ mลรญลพky">vรฝbฤr',
- "ct_ihop": 'kdyลพ se zavลe prohlรญลพeฤ obrรกzkลฏ, posunout dolลฏ k naposledy zobrazenรฉmu souboru">gโฎฏ',
- "ct_dots": 'zobrazit skrytรฉ soubory (pokud to server povoluje)">dotfiles',
- "ct_qdel": 'pลi mazรกnรญ souborลฏ poลพรกdat o potvrzenรญ jen jednou">rychlรฉ mazรกnรญ',
- "ct_dir1st": 'ลadit sloลพky pลed soubory">๐ prvnรญ',
- "ct_nsort": 'pลirozenรฉ ลazenรญ (pro nรกzvy souborลฏ s รบvodnรญmi ฤรญslicemi)">pลirozenรฉ ลazenรญ',
- "ct_utc": 'zobrazit vลกechny ฤasy v UTC">UTC',
- "ct_readme": 'zobrazit README.md v seznamech sloลพek">๐ readme',
- "ct_idxh": 'zobrazit index.html mรญsto seznamu sloลพky">htm',
- "ct_sbars": 'zobrazit posuvnรญky">โ',
-
- "cut_umod": "pokud soubor na serveru jiลพ existuje, aktualizovat ฤasovou znaฤku poslednรญho zmฤny serveru tak, aby odpovรญdala vaลกemu lokรกlnรญmu souboru (vyลพaduje oprรกvnฤnรญ k zรกpisu+mazรกnรญ)\">re๐
",
-
- "cut_turbo": "yolo tlaฤรญtko, pravdฤpodobnฤ to NECHCETE povolit:$N$Npouลพijte to pokud jste nahrรกvali obrovskรฉ mnoลพstvรญ souborลฏ a museli jste restartovat z nฤjakรฉho dลฏvodu a chcete pokraฤovat v nahrรกvรกnรญ ASAP$N$Ntoto nahradรญ hash-kontrolu jednoduchรฝm "mรก to stejnou velikost souboru na serveru?" takลพe pokud se obsah souborลฏ liลกรญ, NEBUDE nahrรกn$N$Nmฤli byste to vypnout kdyลพ nahrรกvรกnรญ skonฤรญ a pak znovu "nahrรกt" stejnรฉ soubory aby je klient ovฤลil\">turbo",
-
- "cut_datechk": "nemรก ลพรกdnรฝ efekt pokud nenรญ povoleno turbo tlaฤรญtko$N$Nsniลพuje yolo faktor o trochu; kontroluje zda ฤasovรฉ znaฤky souborลฏ na serveru odpovรญdajรญ vaลกim$N$Nmฤl by teoreticky zachytit vฤtลกinu nedokonฤenรฝch / poลกkozenรฝch nahrรกvรกnรญ, ale nenรญ nรกhradou za ovฤลovacรญ prลฏchod s turbem vypnutรฝm potรฉ\">kontrola data",
-
- "cut_u2sz": "velikost (v MiB) kaลพdรฉho kusu nahrรกvรกnรญ; velkรฉ hodnoty lรฉpe lรฉtajรญ pลes atlantik. Zkuste nรญzkรฉ hodnoty na velmi nespolehlivรฝch pลipojenรญch",
-
- "cut_flag": "zajistit aby nahrรกvala jen jedna karta najednou $N -- ostatnรญ karty to musรญ mรญt takรฉ povoleno $N -- ovlivลuje jen karty na stejnรฉ domรฉnฤ",
-
- "cut_az": "nahrรกvat soubory v abecednรญm poลadรญ, spรญลกe neลพ nejmenลกรญ-soubor-prvnรญ$N$Nabecednรญ poลadรญ mลฏลพe usnadnit kontrolu zda se nฤco pokazilo na serveru, ale ฤinรญ nahrรกvรกnรญ mรญrnฤ pomalejลกรญ na optice / LAN",
-
- "cut_nag": "notifikace OS kdyลพ nahrรกvรกnรญ skonฤรญ$N(jen pokud prohlรญลพeฤ nebo karta nenรญ aktivnรญ)",
- "cut_sfx": "zvukovรฉ upozornฤnรญ kdyลพ nahrรกvรกnรญ skonฤรญ$N(jen pokud prohlรญลพeฤ nebo karta nenรญ aktivnรญ)",
-
- "cut_mt": "pouลพรญt vรญcevlรกknovรฉ zpracovรกnรญ pro zrychlenรญ hashovรกnรญ souborลฏ$N$Ntoto pouลพรญvรก web-workers a vyลพaduje$Nvรญce RAM (aลพ 512 MiB navรญc)$N$Ndฤlรก https o 30% rychlejลกรญ a http 4,5x rychlejลกรญ\">mt",
-
- "cut_wasm": "pouลพijte wasm mรญsto vestavฤnรฉho hashovรกnรญ prohlรญลพeฤe; zlepลกuje rychlost na prohlรญลพeฤรญch zaloลพenรฝch na chrome ale zvyลกuje zรกtฤลพ CPU, mnoho starลกรญch verzรญ chrome mรก chyby kterรฉ zpลฏsobujรญ ลพe prohlรญลพeฤ spotลebuje veลกkerou RAM a spadne pokud je toto povoleno\">wasm",
-
- "cft_text": "text favicon (prรกzdnรฉ a obnovte pro zakรกzรกnรญ)",
- "cft_fg": "barva popลedรญ",
- "cft_bg": "barva pozadรญ",
-
- "cdt_lim": "maximรกlnรญ poฤet souborลฏ k zobrazenรญ ve sloลพce",
- "cdt_ask": "pลi posunovรกnรญ na konec,$Nmรญsto naฤรญtรกnรญ vรญce souborลฏ,$N se zeptat co dฤlat",
- "cdt_hsort": "kolik pravidel ลazenรญ (<code>,sorthref</code>) zahrnout do media-URL. Nastavenรญ na 0 bude takรฉ ignorovat pravidla ลazenรญ zahrnutรก v media odkazech pลi kliknutรญ na nฤ",
-
- "tt_entree": "zobrazit navigaฤnรญ panel (postrannรญ strom adresรกลลฏ)$NKlรกvesovรก zkratka: B",
- "tt_detree": "zobrazit drobeฤkovou navigaci$NKlรกvesovรก zkratka: B",
- "tt_visdir": "posunout k vybranรฉ sloลพce",
- "tt_ftree": "pลepnout strom sloลพek / textovรฉ soubory$NKlรกvesovรก zkratka: V",
- "tt_pdock": "zobrazit nadลazenรฉ sloลพky v ukotvenรฉm panelu nahoลe",
- "tt_dynt": "automaticky rozrลฏstat jak se strom rozลกiลuje",
- "tt_wrap": "zalomenรญ ลรกdkลฏ",
- "tt_hover": "odhalit pลetรฉkajรญcรญ ลรกdky pลi najetรญ$N( ruลกรญ posun pokud kurzor myลกi $N nenรญ v levรฉm okraji )",
-
- "ml_pmode": "na konci sloลพky...",
- "ml_btns": "pลรญkazy",
- "ml_tcode": "transkรณdovat",
- "ml_tcode2": "transkรณdovat na",
- "ml_tint": "odstรญn",
- "ml_eq": "audio ekvalizรฉr",
- "ml_drc": "kompresor dynamickรฉho rozsahu",
-
- "mt_loop": "smyฤka/opakovat jednu skladbu\">๐",
- "mt_one": "zastavit po jednรฉ skladbฤ\">1๏ธโฃ",
- "mt_shuf": "zamรญchat skladby v kaลพdรฉ sloลพce\">๐",
- "mt_aplay": "automatickรฉ pลehrรกvรกnรญ pokud je ID skladby v odkazu kterรฝm jste pลiลกli na server$N$Nzakรกzรกnรญ toho takรฉ zastavรญ aktualizaci URL strรกnky s ID skladby pลi pลehrรกvรกnรญ hudby, aby se zabrรกnilo automatickรฉmu pลehrรกvรกnรญ pokud se tato nastavenรญ ztratรญ ale URL zลฏstane\">aโถ",
- "mt_preload": "zaฤรญt naฤรญtat nรกsledujรญcรญ skladbu pลed koncem pro plynulรฉ pลehrรกvรกnรญ\">pลednahrรกnรญ",
- "mt_prescan": "pลejรญt do nรกsledujรญcรญ sloลพky pลed tรญm neลพ$Nskonฤรญ poslednรญ skladba, aby byl webprohlรญลพeฤ$Nspokojen aby nezastavil pลehrรกvรกnรญ\">nav",
- "mt_fullpre": "zkusit pลednahrรกt celou skladbu;$Nโ
povolit na nespolehlivรฝch pลipojenรญch,$Nโ zakรกzat na pomalรฝch pลipojenรญch pravdฤpodobnฤ\">รบplnรฉ",
- "mt_fau": "na telefonech zabrรกnit zastavenรญ hudby, pokud se dalลกรญ pรญseล nenahraje dostateฤnฤ rychle (mลฏลพe zpลฏsobit chybnรฉ zobrazenรญ tagลฏ)\">โ๏ธ",
- "mt_waves": "vlnovรฝ posuvnรญk:$Nzobrazit amplitudu zvuku v posuvnรญku\">~s",
- "mt_npclip": "zobrazit tlaฤรญtka pro kopรญrovรกnรญ aktuรกlnฤ pลehrรกvanรฉ pรญsnฤ do schrรกnky\">/np",
- "mt_m3u_c": "zobrazit tlaฤรญtka pro kopรญrovรกnรญ$Nvybranรฝch pรญsnรญ jako poloลพky m3u8 playlistu\">๐ป",
- "mt_octl": "integrace s OS (mediรกlnรญ klรกvesy / osd)\">os-ctl",
- "mt_oseek": "povolit posunovรกnรญ pลes integraci s OS$N$Npoznรกmka: na nฤkterรฝch zaลรญzenรญch (iPhone),$Nto nahradรญ tlaฤรญtko dalลกรญ pรญsnฤ\">seek",
- "mt_oscv": "zobrazit obal alba v osd\">art",
- "mt_follow": "udrลพet pลehrรกvanou stopu v zobrazenรญ\">๐ฏ",
- "mt_compact": "kompaktnรญ ovlรกdรกnรญ\">โ",
- "mt_uncache": "vymazat cache (zkuste to, pokud vรกลก prohlรญลพeฤ uloลพil$Nporuลกenou kopii pรญsnฤ a odmรญtรก ji pลehrรกt)\">uncache",
- "mt_mloop": "opakovat otevลenou sloลพku\">๐ loop",
- "mt_mnext": "naฤรญst dalลกรญ sloลพku a pokraฤovat\">๐ next",
- "mt_mstop": "zastavit pลehrรกvรกnรญ\">โธ stop",
- "mt_cflac": "pลevรฉst flac / wav na {0}\">flac",
- "mt_caac": "pลevรฉst aac / m4a na {0}\">aac",
- "mt_coth": "pลevรฉst vลกechny ostatnรญ (ne mp3) na {0}\">oth",
- "mt_c2opus": "nejlepลกรญ volba pro desktopy, laptopy, android\">opus",
- "mt_c2owa": "opus-weba, pro iOS 17.5 a novฤjลกรญ\">owa",
- "mt_c2caf": "opus-caf, pro iOS 11 aลพ 17\">caf",
- "mt_c2mp3": "pouลพijte na velmi starรฝch zaลรญzenรญch\">mp3",
- "mt_c2flac": "nejlepลกรญ kvalita zvuku, ale obrovskรฉ stahovรกnรญ\">flac",
- "mt_c2wav": "nekomprimovanรฉ pลehrรกvรกnรญ (jeลกtฤ vฤtลกรญ)\">wav",
- "mt_c2ok": "vรฝbornฤ, dobrรก volba",
- "mt_c2nd": "to nenรญ doporuฤenรฝ vรฝstupnรญ formรกt pro vaลกe zaลรญzenรญ, ale v poลรกdku",
- "mt_c2ng": "vaลกe zaลรญzenรญ, zdรก se, nepodporuje tento vรฝstupnรญ formรกt, ale zkusรญme to",
- "mt_xowa": "v iOS jsou chyby brรกnรญcรญ pลehrรกvรกnรญ na pozadรญ s tรญmto formรกtem; pouลพijte prosรญm caf nebo mp3",
- "mt_tint": "รบroveล pozadรญ (0-100) na posuvnรญku$Nabyste uฤinili uklรกdรกnรญ do vyrovnรกvacรญ pamฤti mรฉnฤ ruลกivรฝm",
- "mt_eq": "povoluje ekvalizรฉr a ovlรกdรกnรญ zisku;$N$Nboost <code>0</code> = standardnรญ 100% hlasitost (nezmฤnฤno)$N$Nwidth <code>1 </code> = standardnรญ stereo (nezmฤnฤno)$Nwidth <code>0.5</code> = 50% levรฝ-pravรฝ crossfeed$Nwidth <code>0 </code> = mono$N$Nboost <code>-0.8</code> & width <code>10</code> = odstranฤnรญ vokรกlลฏ :^)$N$Npovolenรญ ekvalizรฉru ฤinรญ alba bez mezer zcela bez mezer, takลพe to nechte zapnutรฉ se vลกemi hodnotami na nule (kromฤ width = 1), pokud vรกm na tom zรกleลพรญ",
- "mt_drc": "povoluje kompresor dynamickรฉho rozsahu (vyrovnรกvaฤ hlasitosti / brickwaller); takรฉ povolรญ EQ pro vyvรกลพenรญ ลกpaget, takลพe nastavte vลกechna EQ pole kromฤ 'width' na 0, pokud to nechcete$N$Nsniลพuje hlasitost zvuku nad THRESHOLD dB; pro kaลพdรฝ RATIO dB za THRESHOLD je 1 dB vรฝstupu, takลพe vรฝchozรญ hodnoty tresh -24 a ratio 12 znamenajรญ, ลพe by nikdy nemฤlo bรฝt hlasitฤjลกรญ neลพ -22 dB a je bezpeฤnรฉ zvรฝลกit boost ekvalizรฉru na 0.8, nebo dokonce 1.8 s ATK 0 a obrovskรฝm RLS jako 90 (funguje pouze ve firefoxu; RLS je max 1 v jinรฝch prohlรญลพeฤรญch)$N$N(viz wikipedia, vysvฤtlujรญ to mnohem lรฉpe)",
-
- "mb_play": "pลehrรกt",
- "mm_hashplay": "pลehrรกt tento audio soubor?",
- "mm_m3u": "stisknฤte Enter/OK pro Pลehrรกnรญ\nstisknฤte ESC/Zruลกit pro รpravu",
- "mp_breq": "potลebujete firefox 82+ nebo chrome 73+ nebo iOS 15+",
- "mm_bload": "nynรญ se naฤรญtรก...",
- "mm_bconv": "pลevรกdรญ se na {0}, ฤekejte prosรญm...",
- "mm_opusen": "vรกลก prohlรญลพeฤ nemลฏลพe pลehrรกt aac / m4a soubory;\ntranscoding na opus je nynรญ povolen",
- "mm_playerr": "pลehrรกvรกnรญ selhalo: ",
- "mm_eabrt": "Pokus o pลehrรกvรกnรญ byl zruลกen",
- "mm_enet": "Vaลกe internetovรฉ pลipojenรญ je nestabilnรญ",
- "mm_edec": "Tento soubor je รบdajnฤ poลกkozenรฝ??",
- "mm_esupp": "Vรกลก prohlรญลพeฤ nerozumรญ tomuto audio formรกtu",
- "mm_eunk": "Neznรกmรก chyba",
- "mm_e404": "Nelze pลehrรกt audio; chyba 404: Soubor nenalezen.",
- "mm_e403": "Nelze pลehrรกt audio; chyba 403: Pลรญstup odepลen.\n\nZkuste stisknout F5 pro obnovenรญ, moลพnรก jste se odhlรกsili",
- "mm_e500": "Nelze pลehrรกt audio; chyba 500: Zkontrolujte logy serveru.",
- "mm_e5xx": "Nelze pลehrรกt audio; chyba serveru ",
- "mm_nof": "ลพรกdnรฉ dalลกรญ audio soubory v okolรญ nenalezeny",
- "mm_prescan": "Hledรกm hudbu k dalลกรญmu pลehrรกnรญ...",
- "mm_scank": "Dalลกรญ pรญseล nalezena:",
- "mm_uncache": "cache vymazรกna; vลกechny pรญsnฤ se znovu stรกhnou pลi dalลกรญm pลehrรกvรกnรญ",
- "mm_hnf": "tato pรญseล jiลพ neexistuje",
-
- "im_hnf": "tento obrรกzek jiลพ neexistuje",
-
- "f_empty": 'tato sloลพka je prรกzdnรก',
- "f_chide": 'toto skryje sloupec ยซ{0}ยป\n\nmลฏลพete odkrรฝt sloupce v zรกloลพce nastavenรญ',
- "f_bigtxt": "tento soubor mรก {0} MiB -- opravdu zobrazit jako text?",
- "f_bigtxt2": "zobrazit pouze konec souboru? to takรฉ povolรญ sledovรกnรญ/tailing, zobrazรญ novฤ pลidanรฉ ลรกdky textu v reรกlnรฉm ฤase",
- "fbd_more": '',
- "fbd_all": '',
- "f_anota": "pouze {0} z {1} poloลพek bylo vybrรกno;\npro vรฝbฤr celรฉ sloลพky nejprve pลejdฤte na konec",
-
- "f_dls": 'odkazy na soubory v aktuรกlnรญ sloลพce byly\nzmฤnฤny na odkazy ke staลพenรญ',
-
- "f_partial": "Pro bezpeฤnรฉ staลพenรญ souboru, kterรฝ se aktuรกlnฤ nahrรกvรก, kliknฤte prosรญm na soubor se stejnรฝm nรกzvem, ale bez pลรญpony .PARTIAL. Stisknฤte prosรญm Zruลกit nebo Escape.\n\nStisknutรญm OK / Enter ignorujete toto varovรกnรญ a pokraฤujete ve stahovรกnรญ .PARTIAL doฤasnรฉho souboru, coลพ tรฉmฤล jistฤ vyรบstรญ jako poลกkozenรก data.",
-
- "ft_paste": "vloลพit {0} poloลพek$NKlรกvesovรก zkratka: ctrl-V",
- "fr_eperm": 'nelze pลejmenovat:\nnemรกte oprรกvnฤnรญ โpลesunoutโ v tรฉto sloลพce',
- "fd_eperm": 'nelze smazat:\nnemรกte oprรกvnฤnรญ โsmazatโ v tรฉto sloลพce',
- "fc_eperm": 'nelze vyjmout:\nnemรกte oprรกvnฤnรญ โpลesunoutโ v tรฉto sloลพce',
- "fp_eperm": 'nelze vloลพit:\nnemรกte oprรกvnฤnรญ โzapisovatโ v tรฉto sloลพce',
- "fr_emore": "vyberte alespoล jednu poloลพku k pลejmenovรกnรญ",
- "fd_emore": "vyberte alespoล jednu poloลพku ke smazรกnรญ",
- "fc_emore": "vyberte alespoล jednu poloลพku k vyjmutรญ",
- "fcp_emore": "vyberte alespoล jednu poloลพku k zkopรญrovรกnรญ do schrรกnky",
-
- "fs_sc": "sdรญlet sloลพku, ve kterรฉ se nachรกzรญte",
- "fs_ss": "sdรญlet vybranรฉ soubory",
- "fs_just1d": "nelze vybrat vรญce neลพ jednu sloลพku,\nnebo mรญchat soubory a sloลพky v jednom vรฝbฤru",
- "fs_abrt": "โ zruลกit",
- "fs_rand": "๐ฒ nรกhodnรฝ.nรกzev",
- "fs_go": "โ
vytvoลit sdรญlenรญ",
- "fs_name": "nรกzev",
- "fs_src": "zdroj",
- "fs_pwd": "heslo",
- "fs_exp": "vyprลกenรญ",
- "fs_tmin": "min",
- "fs_thrs": "hodin",
- "fs_tdays": "dnรญ",
- "fs_never": "navลพdy",
- "fs_pname": "volitelnรฝ nรกzev odkazu; bude nรกhodnรฝ, pokud je prรกzdnรฝ",
- "fs_tsrc": "soubor nebo sloลพka ke sdรญlenรญ",
- "fs_ppwd": "volitelnรฉ heslo",
- "fs_w8": "vytvรกลenรญ sdรญlenรญ...",
- "fs_ok": "stisknฤte Enter/OK pro zkopรญrovรกnรญ do schrรกnky\nstisknฤte ESC/Zruลกit pro zavลenรญ",
-
- "frt_dec": "mลฏลพe opravit nฤkterรฉ pลรญpady poruลกenรฝch nรกzvลฏ souborลฏ\">url-decode",
- "frt_rst": "resetovat zmฤnฤnรฉ nรกzvy souborลฏ zpฤt na pลฏvodnรญ\">โบ reset",
- "frt_abrt": "zruลกit a zavลรญt toto okno\">โ cancel",
- "frb_apply": "PลEJMENOVAT",
- "fr_adv": "dรกvkovรฉ / metadata / pลejmenovรกnรญ podle vzoru\">pokroฤilรฉ",
- "fr_case": "regex citlivรฝ na velikost pรญsmen\">velikost",
- "fr_win": "nรกzvy bezpeฤnรฉ pro windows; nahradit <>:"\\|?* japonskรฝmi plnoลกรญลkovรฝmi znaky\">win",
- "fr_slash": "nahradit / znakem kterรฝ nezpลฏsobรญ vytvoลenรญ novรฝch sloลพek\">ลพรกdnรฉ /",
- "fr_re": "vzor regex hledรกnรญ k aplikaci na pลฏvodnรญ nรกzvy souborลฏ; zachycenรฉ skupiny mohou bรฝt odkazovรกny v poli formรกtu nรญลพe jako <code>(1)</code> a <code>(2)</code> atd.",
- "fr_fmt": "inspirovรกno foobar2000:$N<code>(title)</code> je nahrazeno nรกzvem skladby,$N<code>[(artist) - ](title)</code> pลeskoฤรญ [tuto] ฤรกst pokud je umฤlec prรกzdnรฝ$N<code>$lpad((tn),2,0)</code> doplnรญ ฤรญslo stopy na 2 ฤรญslice",
- "fr_pdel": "smazat",
- "fr_pnew": "uloลพit jako",
- "fr_pname": "zadejte nรกzev pro vaลกe novรฉ pลednastavenรญ",
- "fr_aborted": "zruลกeno",
- "fr_lold": "starรฝ nรกzev",
- "fr_lnew": "novรฝ nรกzev",
- "fr_tags": "tagy pro vybranรฉ soubory (pouze pro ฤtenรญ, jen pro referenci):",
- "fr_busy": "pลejmenovรกvรกm {0} poloลพek...\n\n{1}",
- "fr_efail": "pลejmenovรกnรญ selhalo:\n",
- "fr_nchg": "{0} z novรฝch nรกzvลฏ bylo zmฤnฤno kvลฏli win a/nebo ลพรกdnรฉ /\n\nPokraฤovat s tฤmito zmฤnฤnรฝmi novรฝmi nรกzvy?",
-
- "fd_ok": "mazรกnรญ OK",
- "fd_err": "mazรกnรญ selhalo:\n",
- "fd_none": "nic nebylo smazรกno; moลพnรก blokovรกno konfiguracรญ serveru (xbd)?",
- "fd_busy": "maลพu {0} poloลพek...\n\n{1}",
- "fd_warn1": "SMAZAT tฤchto {0} poloลพek?",
- "fd_warn2": "Poslednรญ ลกance! Nelze vrรกtit zpฤt. Smazat?",
-
- "fc_ok": "vyjmout {0} poloลพek",
- "fc_warn": 'vyjmout {0} poloลพek\n\nale: pouze tato karta prohlรญลพeฤe je mลฏลพe vloลพit\n(protoลพe vรฝbฤr je tak absolutnฤ masivnรญ)',
-
- "fcc_ok": "zkopรญrovรกno {0} poloลพek do schrรกnky",
- "fcc_warn": 'zkopรญrovรกno {0} poloลพek do schrรกnky\n\nale: pouze tato karta prohlรญลพeฤe je mลฏลพe vloลพit\n(protoลพe vรฝbฤr je tak absolutnฤ masivnรญ)',
-
- "fp_apply": "pouลพรญt tyto nรกzvy",
- "fp_ecut": "nejprve vyjmฤte nebo zkopรญrujte nฤjakรฉ soubory / sloลพky k vloลพenรญ / pลesunutรญ\n\npoznรกmka: mลฏลพete vyjmout / vloลพit pลes rลฏznรฉ karty prohlรญลพeฤe",
- "fp_ename": "{0} poloลพek sem nelze pลesunout protoลพe nรกzvy jsou jiลพ obsazenรฉ. Dejte jim novรฉ nรกzvy nรญลพe pro pokraฤovรกnรญ, nebo nรกzev nechte prรกzdnรฝ pro pลeskoฤenรญ:",
- "fcp_ename": "{0} poloลพek sem nelze zkopรญrovat protoลพe nรกzvy jsou jiลพ obsazenรฉ. Dejte jim novรฉ nรกzvy nรญลพe pro pokraฤovรกnรญ, nebo nรกzev nechte prรกzdnรฝ pro pลeskoฤenรญ:",
- "fp_emore": "stรกle jsou nฤkterรฉ kolize nรกzvลฏ souborลฏ k opravฤ",
- "fp_ok": "pลesun OK",
- "fcp_ok": "kopรญrovรกnรญ OK",
- "fp_busy": "pลesouvรกm {0} poloลพek...\n\n{1}",
- "fcp_busy": "kopรญruji {0} poloลพek...\n\n{1}",
- "fp_abrt": "pลeruลกuji...", //m
- "fp_err": "pลesun selhal:\n",
- "fcp_err": "kopรญrovรกnรญ selhalo:\n",
- "fp_confirm": "pลesunout tฤchto {0} poloลพek sem?",
- "fcp_confirm": "zkopรญrovat tฤchto {0} poloลพek sem?",
- "fp_etab": 'selhalo ฤtenรญ schrรกnky z jinรฉ karty prohlรญลพeฤe',
- "fp_name": "nahrรกvรกnรญ souboru z vaลกeho zaลรญzenรญ. Dejte mu nรกzev:",
- "fp_both_m": 'vyberte co vloลพit
Enter = Pลesunout {0} souborลฏ z ยซ{1}ยป\nESC = Nahrรกt {2} souborลฏ z vaลกeho zaลรญzenรญ',
- "fcp_both_m": 'vyberte co vloลพit
Enter = Kopรญrovat {0} souborลฏ z ยซ{1}ยป\nESC = Nahrรกt {2} souborลฏ z vaลกeho zaลรญzenรญ',
- "fp_both_b": 'PลesunoutNahrรกt',
- "fcp_both_b": 'KopรญrovatNahrรกt',
-
- "mk_noname": "napiลกte nรกzev do textovรฉho pole vlevo pลedtรญm neลพ to udฤlรกte :p",
-
- "tv_load": "Naฤรญtรกnรญ textovรฉho dokumentu:\n\n{0}\n\n{1}% ({2} z {3} MiB naฤteno)",
- "tv_xe1": "nelze naฤรญst textovรฝ soubor:\n\nchyba ",
- "tv_xe2": "404, soubor nenalezen",
- "tv_lst": "seznam textovรฝch souborลฏ v",
- "tvt_close": "nรกvrat do zobrazenรญ sloลพky$NKlรกvesovรก zkratka: M (nebo Esc)\">โ zavลรญt",
- "tvt_dl": "stรกhnout tento soubor$NKlรกvesovรก zkratka: Y\">๐พ stรกhnout",
- "tvt_prev": "zobrazit pลedchozรญ dokument$NKlรกvesovรก zkratka: i\">โฌ pลedchozรญ",
- "tvt_next": "zobrazit nรกsledujรญcรญ dokument$NKlรกvesovรก zkratka: K\">โฌ dalลกรญ",
- "tvt_sel": "vybrat soubor ( pro vyjmutรญ / kopรญrovรกnรญ / mazรกnรญ / ... )$NKlรกvesovรก zkratka: S\">vรฝbฤr",
- "tvt_edit": "otevลรญt soubor v textovรฉm editoru$NKlรกvesovรก zkratka: E\">โ๏ธ upravit",
- "tvt_tail": "sledovat soubor pro zmฤny; zobrazit novรฉ ลรกdky v reรกlnรฉm ฤase\">๐ก sledovat",
- "tvt_wrap": "zalamovรกnรญ slov\">โต",
- "tvt_atail": "zamknout posun na konec strรกnky\">โ",
- "tvt_ctail": "dekรณdovat barvy terminรกlu (ansi escape kรณdy)\">๐",
- "tvt_ntail": "limit zpฤtnรฉho posouvรกnรญ (kolik bajtลฏ textu ponechat naฤtenรฝch)",
-
- "m3u_add1": "skladba pลidรกna do m3u playlistu",
- "m3u_addn": "{0} skladeb pลidรกno do m3u playlistu",
- "m3u_clip": "m3u playlist nynรญ zkopรญrovรกn do schrรกnky\n\nmฤli byste vytvoลit novรฝ textovรฝ soubor pojmenovanรฝ nฤco.m3u a vloลพit playlist do tohoto dokumentu; toto ho uฤinรญ pลehratelnรฝm",
-
- "gt_vau": "nezobrazovat videa, jen pลehrรกt zvuk\">๐ง",
- "gt_msel": "povolit vรฝbฤr souborลฏ; ctrl-klik na soubor pro pลepsรกnรญ$N$N<em>kdyลพ aktivnรญ: dvojklik na soubor / sloลพku pro otevลenรญ</em>$N$NKlรกvesovรก zkratka: S\">vรฝbฤr vรญce",
- "gt_crop": "oลez nรกhledลฏ na stลed\">oลez",
- "gt_3x": "nรกhledy s vysokรฝm rozliลกenรญm\">3x",
- "gt_zoom": "zoom",
- "gt_chop": "rozdฤlit",
- "gt_sort": "ลadit podle",
- "gt_name": "nรกzev",
- "gt_sz": "velikost",
- "gt_ts": "datum",
- "gt_ext": "typ",
- "gt_c1": "vรญce zkrรกtit nรกzvy souborลฏ (zobrazit mรฉnฤ)",
- "gt_c2": "mรฉnฤ zkrรกtit nรกzvy souborลฏ (zobrazit vรญce)",
-
- "sm_w8": "hledรกm...",
- "sm_prev": "vรฝsledky hledรกnรญ nรญลพe jsou z pลedchozรญho dotazu:\n ",
- "sl_close": "zavลรญt vรฝsledky hledรกnรญ",
- "sl_hits": "zobrazuji {0} zรกsahลฏ",
- "sl_moar": "naฤรญst vรญce",
-
- "s_sz": "velikost",
- "s_dt": "datum",
- "s_rd": "cesta",
- "s_fn": "nรกzev",
- "s_ta": "tagy",
- "s_ua": "nahrรกno@",
- "s_ad": "pokroฤilรฉ",
- "s_s1": "minimum MiB",
- "s_s2": "maximum MiB",
- "s_d1": "min. iso8601",
- "s_d2": "max. iso8601",
- "s_u1": "nahrรกno po",
- "s_u2": "a/nebo pลed",
- "s_r1": "cesta obsahuje (oddฤlenรฉ mezerami)",
- "s_f1": "nรกzev obsahuje (negace s -ne)",
- "s_t1": "tagy obsahujรญ (^=zaฤรกtek, konec=$)",
- "s_a1": "specifickรฉ vlastnosti metadat",
-
- "md_eshow": "nelze vykreslit ",
- "md_off": "[๐readme] zakรกzรกno v [โ๏ธ] -- dokument skryt",
-
- "badreply": "Selhalo parsovรกnรญ odpovฤdi ze serveru",
-
- "xhr403": "403: Pลรญstup odepลen\n\nzkuste stisknout F5, moลพnรก jste se odhlรกsili",
- "xhr0": "neznรกmรฝ (pravdฤpodobnฤ ztraceno spojenรญ se serverem, nebo server je offline)",
- "cf_ok": "omlouvรกme se za to -- DD" + wah + "oS ochrana se aktivovala\n\nvฤci by se mฤly obnovit asi za 30 sekund\n\npokud se nic nestane, stisknฤte F5 pro obnovenรญ strรกnky",
- "tl_xe1": "nelze vypsat podsloลพky:\n\nchyba ",
- "tl_xe2": "404: Sloลพka nenalezena",
- "fl_xe1": "nelze vypsat soubory ve sloลพce:\n\nchyba ",
- "fl_xe2": "404: Sloลพka nenalezena",
- "fd_xe1": "nelze vytvoลit podsloลพku:\n\nchyba ",
- "fd_xe2": "404: Nadลazenรก sloลพka nenalezena",
- "fsm_xe1": "nelze odeslat zprรกvu:\n\nchyba ",
- "fsm_xe2": "404: Nadลazenรก sloลพka nenalezena",
- "fu_xe1": "selhalo naฤtenรญ unpost seznamu ze serveru:\n\nchyba ",
- "fu_xe2": "404: Soubor nenalezen??",
-
- "fz_tar": "nekomprimovanรฝ gnu-tar soubor (linux / mac)",
- "fz_pax": "nekomprimovanรฝ tar formรกtu pax (pomalejลกรญ)",
- "fz_targz": "gnu-tar s gzip kompresรญ รบrovnฤ 3$N$Nto je obvykle velmi pomalรฉ, takลพe$Npouลพijte mรญsto toho nekomprimovanรฝ tar",
- "fz_tarxz": "gnu-tar s xz kompresรญ รบrovnฤ 1$N$Nto je obvykle velmi pomalรฉ, takลพe$Npouลพijte mรญsto toho nekomprimovanรฝ tar",
- "fz_zip8": "zip s utf8 nรกzvy souborลฏ (moลพnรก problematickรฉ na windows 7 a starลกรญch)",
- "fz_zipd": "zip s tradiฤnรญmi cp437 nรกzvy souborลฏ, pro opravdu starรฝ software",
- "fz_zipc": "cp437 s crc32 vypoฤรญtanรฝm brzy,$Npro MS-DOS PKZIP v2.04g (ลรญjen 1993)$N(trvรก dรฉle zpracovat pลed zaฤรกtkem stahovรกnรญ)",
-
- "un_m1": "mลฏลพete smazat vaลกe nedรกvnรฉ nahrรกnรญ (nebo zruลกit nedokonฤenรฉ) nรญลพe",
- "un_upd": "obnovit",
- "un_m4": "nebo sdรญlet soubory viditelnรฉ nรญลพe:",
- "un_ulist": "zobrazit",
- "un_ucopy": "kopรญrovat",
- "un_flt": "volitelnรฝ filtr: URL musรญ obsahovat",
- "un_fclr": "vymazat filtr",
- "un_derr": 'unpost-delete selhalo:\n',
- "un_f5": 'nฤco se pokazilo, zkuste prosรญm obnovit, nebo stisknฤte F5',
- "un_uf5": "omlouvรกme se ale musรญte obnovit strรกnku (napลรญklad stisknutรญm F5 nebo CTRL-R) pลedtรญm neลพ toto nahrรกvรกnรญ mลฏลพe bรฝt zruลกeno",
- "un_nou": 'varovรกnรญ: server je pลรญliลก zaneprรกzdnฤn pro zobrazenรญ nedokonฤenรฝch nahrรกvรกnรญ; za chvรญli kliknฤte na odkaz "obnovit"',
- "un_noc": 'varovรกnรญ: unpost plnฤ nahranรฝch souborลฏ nenรญ povoleno/dovoleno v konfiguraci serveru',
- "un_max": "zobrazuji prvnรญch 2000 souborลฏ (pouลพijte filtr)",
- "un_avail": "{0} nedรกvnรฝch nahrรกvรกnรญ mลฏลพe bรฝt smazรกno
{1} nedokonฤenรฝch mลฏลพe bรฝt zruลกeno",
- "un_m2": "ลazeno podle ฤasu nahrรกvรกnรญ; nejnovฤjลกรญ prvnรญ:",
- "un_no1": "poฤkej! ลพรกdnรก nahrรกvรกnรญ nejsou dostateฤnฤ nedรกvnรก",
- "un_no2": "poฤkej! ลพรกdnรก nahrรกvรกnรญ odpovรญdajรญcรญ tomuto filtru nejsou dostateฤnฤ nedรกvnรก",
- "un_next": "smazat dalลกรญch {0} souborลฏ nรญลพe",
- "un_abrt": "zruลกit",
- "un_del": "smazat",
- "un_m3": "naฤรญtรกm vaลกe nedรกvnรฉ nahrรกnรญ...",
- "un_busy": "maลพu {0} souborลฏ...",
- "un_clip": "{0} odkazลฏ zkopรญrovรกno do schrรกnky",
-
- "u_https1": "mฤli byste",
- "u_https2": "pลejรญt na https",
- "u_https3": "pro lepลกรญ vรฝkon",
- "u_ancient": "vรกลก prohlรญลพeฤ je รบctyhodnฤ starรฝ -- moลพnรก byste mฤli pouลพรญt bup",
- "u_nowork": "vyลพadovรกn firefox 53+ nebo chrome 57+ nebo iOS 11+",
- "tail_2old": "vyลพadovรกn firefox 105+ nebo chrome 71+ nebo iOS 14.5+",
- "u_nodrop": "vรกลก prohlรญลพeฤ je pลรญliลก starรฝ pro nahrรกvรกnรญ pลetaลพenรญm (drag-and-drop)",
- "u_notdir": "toto nenรญ sloลพka!\n\nvรกลก prohlรญลพeฤ je pลรญliลก starรฝ,\nzkuste prosรญm soubory pลetรกhnout",
- "u_uri": "pro pลetaลพenรญ obrรกzkลฏ z jinรฝch oken prohlรญลพeฤe,\nje prosรญm pลetรกhnฤte na velkรฉ tlaฤรญtko pro nahrรกvรกnรญ",
- "u_enpot": "pลepnout na potato UI (mลฏลพe zrychlit nahrรกvรกnรญ)",
- "u_depot": "pลepnout na fancy UI (mลฏลพe zpomalit nahrรกvรกnรญ)",
- "u_gotpot": "pลepรญnรกm na potato UI pro zrychlenรญ nahrรกvรกnรญ,\n\npokud nesouhlasรญte, klidnฤ jej pลepnฤte zpฤt!",
- "u_pott": "soubory: {0} dokonฤeno, {1} selhalo, {2} nahrรกvรก se, {3} ve frontฤ
",
- "u_ever": "toto je zรกkladnรญ nahrรกvรกnรญ; up2k vyลพaduje alespoล
chrome 21 // firefox 13 // edge 12 // opera 12 // safari 5.1",
- "u_su2k": "toto je zรกkladnรญ nahrรกvรกnรญ; up2k je lepลกรญ",
- "u_uput": "optimalizovat pro rychlost (pลeskoฤit kontrolnรญ souฤet)",
- "u_ewrite": "nemรกte oprรกvnฤnรญ k zรกpisu do tรฉto sloลพky",
- "u_eread": "nemรกte oprรกvnฤnรญ ke ฤtenรญ tรฉto sloลพky",
- "u_enoi": "vyhledรกvรกnรญ souborลฏ nenรญ povoleno v konfiguraci serveru",
- "u_enoow": "pลepsรกnรญ zde nebude fungovat; je vyลพadovรกno oprรกvnฤnรญ k mazรกnรญ",
- "u_badf": "Tฤchto {0} souborลฏ (z celkem {1}) bylo pลeskoฤeno, pravdฤpodobnฤ kvลฏli oprรกvnฤnรญm v souborovรฉm systรฉmu:\n\n",
- "u_blankf": "Tฤchto {0} souborลฏ (z celkem {1}) je prรกzdnรฝch; pลesto je nahrรกt?\n\n",
- "u_applef": "Tฤchto {0} souborลฏ (z celkem {1}) je pravdฤpodobnฤ neลพรกdoucรญch;\nStisknฤte OK/Enter pro PลESKOฤENร nรกsledujรญcรญch souborลฏ,\nStisknฤte Zruลกit/ESC pro Zahrnutรญ a NAHRรNร i tฤchto souborลฏ:\n\n",
- "u_just1": "\nMoลพnรก to bude fungovat lรฉpe, kdyลพ vyberete pouze jeden soubor",
- "u_ff_many": "pokud pouลพรญvรกte Linux / MacOS / Android, takovรฉ mnoลพstvรญ souborลฏ mลฏลพe shodit Firefox!\npokud se to stane, zkuste to prosรญm znovu (nebo pouลพijte Chrome).",
- "u_up_life": "Tento upload bude smazรกn ze serveru\n{0} po jeho dokonฤenรญ",
- "u_asku": "Nahrรกt {0} souborลฏ do {1}",
- "u_unpt": "toto nahrรกvรกnรญ mลฏลพete vrรกtit zpฤt / smazat pomocรญ ๐งฏ vlevo nahoลe",
- "u_bigtab": "chystรกm se zobrazit {0} souborลฏ\n\nto mลฏลพe shodit vรกลก prohlรญลพeฤ, jste si jisti?",
- "u_scan": "Skenuji soubory...",
- "u_dirstuck": "prochรกzenรญ adresรกลe se zaseklo pลi pokusu o pลรญstup k nรกsledujรญcรญm {0} poloลพkรกm; budou pลeskoฤeny:",
- "u_etadone": "Hotovo ({0}, {1} souborลฏ)",
- "u_etaprep": "(pลรญprava na nahrรกvรกnรญ)",
- "u_hashdone": "hashovรกnรญ dokonฤeno",
- "u_hashing": "hashovรกnรญ",
- "u_hs": "navazuji spojenรญ...",
- "u_started": "soubory se nynรญ nahrรกvajรญ; viz [๐]",
- "u_dupdefer": "duplikรกt; bude zpracovรกn po vลกech ostatnรญch souborech",
- "u_actx": "kliknฤte na tento text, abyste zabrรกnili ztrรกtฤ
vรฝkonu pลi pลepรญnรกnรญ do jinรฝch oken/zรกloลพek",
- "u_fixed": "OK! Opraveno ๐",
- "u_cuerr": "nepodaลilo se nahrรกt ฤรกst {0} z {1};\npatrnฤ neลกkodnรฉ, pokraฤuji\n\nsoubor: {2}",
- "u_cuerr2": "server odmรญtl nahrรกnรญ (ฤรกst {0} z {1});\nzopakuji pozdฤji\n\nsoubor: {2}\n\nchyba ",
- "u_ehstmp": "zopakuji pokus; viz vpravo dole",
- "u_ehsfin": "server odmรญtl poลพadavek na dokonฤenรญ nahrรกvรกnรญ; opakuji pokus...",
- "u_ehssrch": "server odmรญtl poลพadavek na vyhledรกvรกnรญ; opakuji pokus...",
- "u_ehsinit": "server odmรญtl poลพadavek na zahรกjenรญ nahrรกvรกnรญ; opakuji pokus...",
- "u_eneths": "sรญลฅovรก chyba pลi navazovรกnรญ spojenรญ pro nahrรกvรกnรญ; opakuji pokus...",
- "u_enethd": "sรญลฅovรก chyba pลi ovฤลovรกnรญ existence cรญle; opakuji pokus...",
- "u_cbusy": "ฤekรกm, aลพ nรกm server po sรญลฅovรฉm problรฉmu zaฤne znovu dลฏvฤลovat...",
- "u_ehsdf": "na serveru doลกlo mรญsto na disku!\n\nbudu to zkouลกet dรกl, pro pลรญpad, ลพe nฤkdo\nuvolnรญ dostatek mรญsta pro pokraฤovรกnรญ",
- "u_emtleak1": "vypadรก to, ลพe vรกลก webovรฝ prohlรญลพeฤ mลฏลพe mรญt รบnik pamฤti (memory leak);\nprosรญm",
- "u_emtleak2": " pลejdฤte na https (doporuฤeno) nebo ",
- "u_emtleak3": " ",
- "u_emtleakc": "zkuste nรกsledujรญcรญ:\n- stisknฤte
F5 pro obnovenรญ strรกnky - potรฉ vypnฤte tlaฤรญtko
mt v โ๏ธ nastavenรญ - a zkuste nahrรกvรกnรญ znovu
Nahrรกvรกnรญ bude o nฤco pomalejลกรญ, ale co se dรก dฤlat.\nOmlouvรกme se za potรญลพe!\n\nPS: chrome v107 obsahuje opravu pro tento problรฉm",
- "u_emtleakf": "zkuste nรกsledujรญcรญ:\n- stisknฤte
F5 pro obnovenรญ strรกnky - potรฉ zapnฤte
๐ฅ (potato) v rozhranรญ nahrรกvรกnรญ - a zkuste nahrรกvรกnรญ znovu
\nPS: firefox snad bude mรญt opravu v nฤkterรฉ z pลรญลกtรญch verzรญ",
- "u_s404": "nenalezeno na serveru",
- "u_expl": "vysvฤtlit",
- "u_maxconn": "vฤtลกina prohlรญลพeฤลฏ omezuje poฤet na 6, ale firefox umoลพลuje toto navรฝลกit pomocรญ connections-per-server v about:config",
- "u_tu": "VAROVรNร: turbo zapnuto, klient nemusรญ detekovat a obnovit nedokonฤenรฉ nahrรกvรกnรญ; viz nรกpovฤdu u tlaฤรญtka turbo
",
- "u_ts": "VAROVรNร: turbo zapnuto, vรฝsledky vyhledรกvรกnรญ mohou bรฝt nesprรกvnรฉ; viz nรกpovฤdu u tlaฤรญtka turbo
",
- "u_turbo_c": "turbo je vypnuto v konfiguraci serveru",
- "u_turbo_g": "vypรญnรกm turbo, protoลพe nemรกte oprรกvnฤnรญ\nk vรฝpisu adresรกลลฏ na tomto svazku",
- "u_life_cfg": 'automatickรฉ smazรกnรญ po min (nebo hodinรกch)',
- "u_life_est": 'nahrรกnรญ bude smazรกno ---',
- "u_life_max": 'tato sloลพka vynucuje\nmax. ลพivotnost {0}',
- "u_unp_ok": 'unpost je povoleno pro {0}',
- "u_unp_ng": 'unpost NEBUDE povoleno',
- "ue_ro": 'vรกลก pลรญstup k tรฉto sloลพce je pouze pro ฤtenรญ\n\n',
- "ue_nl": 'momentรกlnฤ nejste pลihlรกลกeni',
- "ue_la": 'momentรกlnฤ jste pลihlรกลกeni jako "{0}"',
- "ue_sr": 'momentรกlnฤ jste v reลพimu vyhledรกvรกnรญ souborลฏ\n\npลepnฤte do reลพimu nahrรกvรกnรญ kliknutรญm na lupu ๐ (vedle velkรฉho tlaฤรญtka HLEDAT) a zkuste nahrรกvรกnรญ znovu\n\nomlouvรกme se',
- "ue_ta": 'zkuste nahrรกvรกnรญ znovu, nynรญ by to mฤlo fungovat',
- "ue_ab": "tento soubor se jiลพ nahrรกvรก do jinรฉ sloลพky a toto nahrรกvรกnรญ musรญ bรฝt dokonฤeno pลedtรญm, neลพ mลฏลพe bรฝt soubor nahrรกn jinam.\n\nMลฏลพete zruลกit a zapomenout na pลฏvodnรญ nahrรกvรกnรญ pomocรญ levรฉho hornรญho ๐งฏ",
- "ur_1uo": "OK: Soubor รบspฤลกnฤ nahrรกn",
- "ur_auo": "OK: Vลกech {0} souborลฏ รบspฤลกnฤ nahrรกno",
- "ur_1so": "OK: Soubor nalezen na serveru",
- "ur_aso": "OK: Vลกech {0} souborลฏ nalezeno na serveru",
- "ur_1un": "Nahrรกnรญ selhalo, omlouvรกme se",
- "ur_aun": "Vลกech {0} nahrรกnรญ selhalo, omlouvรกme se",
- "ur_1sn": "Soubor NEBYL nalezen na serveru",
- "ur_asn": "{0} souborลฏ NEBYLO nalezeno na serveru",
- "ur_um": "Dokonฤeno;\n{0} nahrรกnรญ OK,\n{1} nahrรกnรญ selhalo, omlouvรกme se",
- "ur_sm": "Dokonฤeno;\n{0} souborลฏ nalezeno na serveru,\n{1} souborลฏ NENALEZENO na serveru",
-
- "lang_set": "obnovit strรกnku, aby se zmฤna projevila?",
- },
- "deu": {
- "tt": "Deutsch",
-
- "cols": {
- "c": "Aktionen",
- "dur": "Dauer",
- "q": "Qualitรคt / Bitrate",
- "Ac": "Audiocodec",
- "Vc": "Videocodec",
- "Fmt": "Format / Container",
- "Ahash": "Audio Checksumme",
- "Vhash": "Video Checksumme",
- "Res": "Auflรถsung",
- "T": "Dateityp",
- "aq": "Audioqualitรคt / Bitrate",
- "vq": "Videoqualitรคt / Bitrate",
- "pixfmt": "Subsampling / Pixelstruktur",
- "resw": "horizontale Auflรถsung",
- "resh": "vertikale Auflรถsung",
- "chs": "Audiokanรคle",
- "hz": "Abtastrate"
- },
-
- "hks": [
- [
- "misc",
- ["ESC", "Dinge schliessen"],
-
- "file-manager",
- ["G", "zwischen Liste und Gitter wechseln"],
- ["T", "zwischen Vorschaubildern und Symbolen wechseln"],
- ["โง A/D", "Vorschaubildergrรถsse รคndern"],
- ["STRG-K", "Auswahl lรถschen"],
- ["STRG-X", "Auswahl ausschneiden"],
- ["STRG-C", "Auswahl in Zwischenablage kopieren"],
- ["STRG-V", "Zwischenablage hier einfรผgen"],
- ["Y", "Auswahl herunterladen"],
- ["F2", "Auswahl umbenennen"],
-
- "file-list-sel",
- ["LEER", "Dateiauswahl aktivieren"],
- ["โ/โ", "Cursor verschieben"],
- ["STRG โ/โ", "Cursor und Bildschirm verschieben"],
- ["โง โ/โ", "Vorherige / nรคchste Datei auswรคhlen"],
- ["STRG-A", "Alle Dateien / Ordner auswรคhlen"],
- ], [
- "navigation",
- ["B", "Zwischen Brotkrumen und Navpane wechseln"],
- ["I/K", "vorheriger / nรคchster Ordner"],
- ["M", "รผbergeordneter Ordner (oder Vorherigen einklappen)"],
- ["V", "Zwischen Textdateien und Navpane wechseln"],
- ["A/D", "Grรถsse der Navpane รคndern"],
- ], [
- "audio-player",
- ["J/L", "Vorheriger / nรคchster Song"],
- ["U/O", "10 Sek. vor- / zurรผckspringen"],
- ["0..9", "zu 0%..90% springen"],
- ["P", "Wiedergabe / Pause"],
- ["S", "aktuell abgespielten Song auswรคhlen"],
- ["Y", "Sing herunterladen"],
- ], [
- "image-viewer",
- ["J/L, โ/โ", "vorheriges / nรคchstes Bild"],
- ["Pos1/Ende", "erstes / letztes Bild"],
- ["F", "Vollbild"],
- ["R", "im Uhrzeigersinn drehen"],
- ["โง R", "gegen den Uhrzeigensinn drehen"],
- ["S", "Bild auswรคhlen"],
- ["Y", "Bild herunterladen"],
- ], [
- "video-player",
- ["U/O", "10 Sek. vor- / zurรผckspringen"],
- ["P/K/LEER", "Wiedergabe / Pause"],
- ["C", "continue playing next"],
- ["V", "Wiederholungs-Wiedergabe (Loop)"],
- ["M", "Stummschalten"],
- ["[ und ]", "Loop-Interval einstellen"],
- ], [
- "textfile-viewer",
- ["I/K", "vorherige / nรคchste Datei"],
- ["M", "Textdatei schliessen"],
- ["E", "Textdatei bearbeiten"],
- ["S", "Textdatei auswรคhlen (fรผr Ausschneiden / Kopieren / Umbenennen)"],
- ]
- ],
-
- "m_ok": "OK",
- "m_ng": "Abbrechen",
-
- "enable": "Aktivieren",
- "danger": "ACHTUNG",
- "clipped": "in Zwischenablage kopiert",
-
- "ht_s1": "Sekunde",
- "ht_s2": "Sekunden",
- "ht_m1": "Minute",
- "ht_m2": "Minuten",
- "ht_h1": "Stunde",
- "ht_h2": "Stunden",
- "ht_d1": "Tag",
- "ht_d2": "Tage",
- "ht_and": " und ",
-
- "goh": "Einstellungen",
- "gop": 'zum vorherigen Ordner springen">vorh.',
- "gou": 'zum รผbergeordneter Ordner springen">hoch',
- "gon": 'zum nรคchsten Ordner springen">nรคchst.',
- "logout": "Abmelden ",
- "login": "Anmelden", //m
- "access": " Zugriff",
- "ot_close": "Submenu schliessen",
- "ot_search": "Dateien nach Attributen, Pfad/Name, Musiktags oder beliebiger Kombination suchen$N$N<code>foo bar</code> = muss ยซfooยป und ยซbarยป enthalten,$N<code>foo -bar</code> = muss ยซfooยป aber nicht ยซbarยป enthalten,$N<code>^yana .opus$</code> = beginnt mit ยซyanaยป und ist ยซopusยป-Datei$N<code>"try unite"</code> = genau ยซtry uniteยป enthalten$N$NDatumsformat ist iso-8601, z.B.$N<code>2009-12-31</code> oder <code>2020-09-12 23:30:00</code>",
- "ot_unpost": "unpost: lรถsche deine letzten Uploads oder breche unvollstรคndige ab",
- "ot_bup": "bup: Basic Uploader, unterstรผtzt sogar Neuheiten wie Netscape 4.0",
- "ot_mkdir": "mkdir: Neuen Ordner erstellen",
- "ot_md": "new-md: Neues Markdown-Dokument erstellen",
- "ot_msg": "msg: Eine Nachricht an das Server-Log schicken",
- "ot_mp": "Media Player-Optionen",
- "ot_cfg": "Konfigurationsoptionen",
- "ot_u2i": 'up2k: Dateien hochladen (wenn du Schreibrechte hast) oder in den Suchmodus wechseln, um zu prรผfen, ob sie bereits auf dem Server existieren$N$NUploads sind fortsetzbar, multithreaded und behalten Dateizeitstempel, verbrauchen aber mehr CPU als [๐] (der einfache Uploader)
wรคhrend Uploads wird dieses Symbol zu einem Fortschrittsanzeiger!',
- "ot_u2w": 'up2k: Dateien mit Wiederaufnahme-Unterstรผtzung hochladen (Browser schlieรen und spรคter dieselben Dateien erneut hochladen)$N$Nmultithreaded, behรคlt Dateizeitstempel, verbraucht aber mehr CPU als [๐] (der einfache Uploader)
wรคhrend Uploads wird dieses Symbol zu einem Fortschrittsanzeiger!',
- "ot_noie": 'Bitte benutze Chrome / Firefox / Edge',
-
- "ab_mkdir": "Ordner erstellen",
- "ab_mkdoc": "Markdown Doc erstellen",
- "ab_msg": "Nachricht an Server Log senden",
-
- "ay_path": "zu Ordnern springen",
- "ay_files": "zu Dateien springen",
-
- "wt_ren": "ausgewรคhlte Elemente umbenennen$NHotkey: F2",
- "wt_del": "ausgewรคhlte Elemente lรถschen$NHotkey: STRG-K",
- "wt_cut": "ausgewรคhlte Elemente ausschneiden <small>(um sie dann irgendwo anders einzufรผgen)</small>$NHotkey: STRG-X",
- "wt_cpy": "ausgewรคhlte Elemente in Zwischenablage kopieren$N(um sie dann irgendwo anders einzufรผgen)$NHotkey: ctrl-C",
- "wt_pst": "zuvor ausgeschnittenen / kopierte Elemente einfรผgen$NHotkey: STRG-V",
- "wt_selall": "alle Dateien auswรคhlen$NHotkey: STRG-A (wenn Datei fokusiert)",
- "wt_selinv": "Auswahl invertieren",
- "wt_zip1": "Diesen Ordner als Archiv herunterladen",
- "wt_selzip": "Auswahl als Archiv herunterladen",
- "wt_seldl": "Auswahl als separate Dateien herunterladen$NHotkey: Y",
- "wt_npirc": "kopiere Titelinfo als IRC-formattierten Text",
- "wt_nptxt": "kopiere Titelinfo als Text",
- "wt_m3ua": "Zu M3U-Wiedergabeliste hinzufรผgen (wรคhle spรคter ๐ปcopy)",
- "wt_m3uc": "M3U-Wiedergabeliste in Zwischenablage kopieren",
- "wt_grid": "Zwischen Gitter und Liste wechseln$NHotkey: G",
- "wt_prev": "Vorheriger Titel$NHotkey: J",
- "wt_play": "Wiedergabe / Pause$NHotkey: P",
- "wt_next": "Nรคchster Titel$NHotkey: L",
-
- "ul_par": "Parallele Uploads:",
- "ut_rand": "Zufรคllige Dateinamen",
- "ut_u2ts": "Zuletzt geรคndert-Zeitstempel von$Ndeinem Dateisystem auf den Server รผbertragen\">๐
",
- "ut_ow": "Existierende Dateien auf dem Server รผberschreiben?$N๐ก๏ธ: Nie (generiert einen neuen Dateinamen)$N๐: รberschreiben, wenn Server-Datei รคlter ist als meine$Nโป๏ธ: รberschreiben, wenn der Dateiinhalt anders ist",
- "ut_mt": "Andere Dateien wรคhrend des Uploads hashen$N$Nsolltest du deaktivieren, falls deine CPU oder Festplatte zum Flaschenhals werden kรถnnte",
- "ut_ask": 'Vor dem Upload nach Bestรคtigung fragen">๐ญ',
- "ut_pot": "Verbessert Upload-Geschwindigkeit$Nindem das UI weniger komplex gemacht wird",
- "ut_srch": "nicht wirklich hochladen, stattdessen prรผfen ob Datei bereits auf dem Server existiert (scannt alle Ordner, die du lesen kannst)",
- "ut_par": "setze auf 0 zum Pausieren$N$Nerhรถhe, wenn deine Verbindung langsam / instabil ist$N$lass auf 1 im LAN oder wenn die Festplatte auf dem Server ein Flaschenhals ist",
- "ul_btn": "Dateien / Ordner hier
ablegen (oder klick mich)",
- "ul_btnu": "U P L O A D",
- "ul_btns": "S U C H E N",
-
- "ul_hash": "hash",
- "ul_send": "senden",
- "ul_done": "fertig",
- "ul_idle1": "keine Uploads in der Warteschlange",
- "ut_etah": "durchschnittl. <em>hashing</em> Geschw. & gesch. Restzeit",
- "ut_etau": "durchschnittl. <em>upload</em> Geschw. & gesch. Restzeit",
- "ut_etat": "durchschnittl. <em>total</em> Geschw. & gesch. Restzeit",
-
- "uct_ok": "Erfolgreich abgeschlossen",
- "uct_ng": "no-good: fehlgeschlagen / abgelehnt / nicht gefunden",
- "uct_done": "ok and ng zusammen",
- "uct_bz": "wird gehasht oder hochgeladen",
- "uct_q": "ausstehend",
-
- "utl_name": "Dateiname",
- "utl_ulist": "Liste",
- "utl_ucopy": "kopieren",
- "utl_links": "Links",
- "utl_stat": "Status",
- "utl_prog": "Fortschritt",
-
- // keep short:
- "utl_404": "404",
- "utl_err": "Fehler",
- "utl_oserr": "OS-Fehler",
- "utl_found": "gefunden",
- "utl_defer": "zurรผckstellen",
- "utl_yolo": "YOLO",
- "utl_done": "fertig",
-
- "ul_flagblk": "Die Dateien wurden zur Warteschlange hinzugefรผgt
jedoch ist up2k gerade in einem anderen Browsertab aktiv.
Ich warte, bis der Upload abgeschlossen ist.",
- "ul_btnlk": "Die Serverkonfiguration hat diese Einstellung gesperrt",
-
- "udt_up": "Upload",
- "udt_srch": "Suchen",
- "udt_drop": "hier ablegen",
-
- "u_nav_m": 'okay, was gibts??
Eingabe = Dateien (1 oder mehr)\nESC = 1 Ordner (inkl. Unterordner)',
- "u_nav_b": 'Dateien1 Ordner',
-
- "cl_opts": "Schalter",
- "cl_themes": "Themes",
- "cl_langs": "Sprache",
- "cl_ziptype": "Ordner Download",
- "cl_uopts": "up2k Schalter",
- "cl_favico": "Favicon",
- "cl_bigdir": "grosse Ordner",
- "cl_hsort": "#sort",
- "cl_keytype": "Schlรผsselnotation",
- "cl_hiddenc": "Spalten verstecken",
- "cl_hidec": "verstecken",
- "cl_reset": "zurรผcksetzen",
- "cl_hpick": "zum Verstecken, tippe auf Spaltenรผberschriften in der Tabelle unten",
- "cl_hcancel": "Spaltenbearbeitung abgebrochen",
-
- "ct_grid": '็ฐ Das Raster™',
- "ct_ttips": 'โ โก โ">โน๏ธ Tooltips',
- "ct_thumb": 'In Raster-Ansicht, zwischen Icons und Vorschau wechseln$NHotkey: T">๐ผ๏ธ Vorschaubilder',
- "ct_csel": 'Benutze STRG und UMSCHALT fรผr Dateiauswahl in Raster-Ansicht">sel',
- "ct_ihop": 'Wenn die Bildanzeige geschlossen ist, scrolle runter zu den zuletzt angesehenen Dateien">gโฎฏ',
- "ct_dots": 'Verstecke Dateien anzeigen (wenn erlaubt durch Server)">dotfiles',
- "ct_qdel": 'Nur einmal fragen, wenn mehrere Dateien gelรถscht werden">qdel',
- "ct_dir1st": 'Ordner vor Dateien sortieren">๐ zuerst',
- "ct_nsort": 'Natรผrliche Sortierung (fรผr Dateinamen mit fรผhrenden Ziffern)">nsort',
- "ct_utc": 'Verwenden Sie UTC fรผr alle Zeitangaben">UTC', //m
- "ct_readme": 'README.md in Dateiliste anzeigen">๐ readme',
- "ct_idxh": 'index.html anstelle von Dateiliste anzeigen">htm',
- "ct_sbars": 'Scrollbars zeigen">โ',
-
- "cut_umod": "Sollte die Datei bereits auf dem Server existieren, den 'Zuletzt geรคndert'-Zeitstempel an deine lokale Datei anpassen (benรถtigt Lese- und Lรถschrechte)\">re๐
",
-
- "cut_turbo": "der YOLO-Knopf, den du wahrscheinlich NICHT aktivieren willst:$N$NBenutze ihn, falls du ne Menge Zeug hochladen wolltest und aus irgendeinem Grund neustarten musstest und du so schnell wie mรถglich weitermachen willst.$N$Ndies ersetzt den Hash-Check mit einem einfachen "Ist die Datei auf dem Server gleich gross?", wenn die Datei also anderen Inhalt hat, wird sie NICHT nochmal hochgeladen!$N$NDu solltest dieses Feature ausschalten, sobald der Upload fertig ist und dann die gleichen Dateien nochmal "hochladen", damit der Client sie verifizieren kann.\">turbo",
-
- "cut_datechk": "Funktioniert nur in kombination mit dem Turbo-Knopf$N$NReduziert den YOLO-Faktor ein bisschen; prรผft, ob der Zeitstempel deiner Datei mit dem auf dem Server รผbereinstimmt$N$Nsollte theoretisch die meisten unfertigen / korrupten Uploads erwischen, ist aber nicht zu gebrauchen, um einen Prรผfdurchgang nach einem Turbo-Upload zu machen\">date-chk",
-
- "cut_u2sz": "Grรถsse (in MiB) fรผr jeden Upload-Chunk; mit grossen Werten fliegen die Bits besser รผber den Atlantik. Versuche kleine Werte, wenn du eine schlechte Verbindung hast (z.B. du benutzt mobile Daten in Deutschland)",
-
- "cut_flag": "Stelle sicher, dass nur ein Tab auf einmal Dateien hochlรคdt$N -- andere Tabs mรผssen diese Funktion auch aktiviert haben $N -- funktioniert nur bei Tabs mit der gleichen Domรคne",
-
- "cut_az": "Lรคdt Dateien in alphabetischer Reihenfolge hoch, anstatt nach Dateigrรถsse$N$NAlphabethische Reihenfolge kann es einfacher machen, Server-Fehler mit naktem Auge zu erkennen, macht aber Uploads รผber Glassfaser / LAN etwas langsamer",
-
- "cut_nag": "Benachrichtigung รผber das Betriebssystem abgeben, wenn Upload fertig ist$N(nur wenn Browser oder Tab nicht im Vordergrund ist)",
- "cut_sfx": "Spielt ein Ton ab, wenn Upload fertig ist$N(nur wenn Browser oder Tab nicht im Vordergrund ist)",
-
- "cut_mt": "Multithreading benutzen um Datei-Hashing zu beschleunigen$N$NDies nutzt Web-Workers und benรถtigt$Nmehr RAM (bis zu 512 MiB extra)$N$Nbeschleunigt HTTPS 30% schneller, HTTP um 4.5x\">mt",
-
- "cut_wasm": "benutzt WASM anstelle des Browser-eigenen Hashers; verbessert Geschwindigkeit auf Chromium-basierten Browsern, erhรถht aber die CPU-Auslastung. Viele รคltere Versionen von Chrome haben Memory-Leaks, die den gesamten RAM verbrauchen und dann crashen, wenn diese Funktion aktiviert ist.\">wasm",
-
- "cft_text": "Favicon Text (leer lassen und neuladen zum Deaktivieren)",
- "cft_fg": "Vordergrundfarbe",
- "cft_bg": "Hintergrundfarbe",
-
- "cdt_lim": "max. Anz. Dateien, die in einem Ordner gezeigt werden sollen",
- "cdt_ask": "beim Runterscrollen nach $NAktion fragen statt mehr,$NDateien zu laden",
- "cdt_hsort": "Menge an Sortierregeln (<code>,sorthref</code>) in Media-URLs enthalten sein sollen. Ein Wert von 0 sorgt dafรผr, dass Sortierregeln in Media-URLs ignoriert werden",
-
- "tt_entree": "Navpane anzeigen (Ordnerbaum Sidebar)$NHotkey: B",
- "tt_detree": "Breadcrumbs anzeigen$NHotkey: B",
- "tt_visdir": "zu ausgewรคhltem Ordner scrollen",
- "tt_ftree": "zw. Ordnerbaum / Textdateien wechseln$NHotkey: V",
- "tt_pdock": "รผbergeordnete Ordner in einem angedockten Fenster oben anzeigen",
- "tt_dynt": "autom. wachsen wenn Baum wรคchst",
- "tt_wrap": "Zeilenumbruch",
- "tt_hover": "Beim Hovern รผberlange Zeilen anzeigen$N(Scrollen funktioniert nicht ausser $N Cursor ist im linken Gutter)",
-
- "ml_pmode": "am Ende des Ordners...",
- "ml_btns": "cmds",
- "ml_tcode": "transcodieren",
- "ml_tcode2": "transcodieren zu",
- "ml_tint": "fรคrben",
- "ml_eq": "Audio Equalizer",
- "ml_drc": "Dynamic Range Compressor",
-
- "mt_loop": "Song wiederholen\">๐",
- "mt_one": "Wiedergabe nach diesem Song beenden\">1๏ธโฃ",
- "mt_shuf": "Zufรคllige Wiedergabe im Ordner\">๐",
- "mt_aplay": "automatisch abspielen, wenn der Link, mit dem du auf den Server zugreifst, eine Titel-ID enthรคlt$N$NDeaktivieren verhindert auch, dass die Seiten-URL bei Musikwiedergabe mit Titel-IDs aktualisiert wird, um Autoplay zu verhindern, falls diese Einstellungen verloren gehen, die URL aber bestehen bleibt\">aโถ",
- "mt_preload": "nรคchsten Titel gegen Ende vorladen fรผr nahtlose Wiedergabe\">Vorladen",
- "mt_prescan": "vor Ende des letzten Titels zum nรคchsten Ordner wechseln,$Ndamit der Browser die$NWiedergabe nicht stoppt\">Navigation",
- "mt_fullpre": "versuchen, den gesamten Titel vorzuladen;$Nโ
bei unzuverlรคssiger Verbindung aktivieren,$Nโ bei langsamer Verbindung deaktivieren\">vollständig",
- "mt_fau": "auf Handys verhindern, dass Musik stoppt, wenn der nรคchste Titel nicht schnell genug vorlรคdt (kann zu fehlerhafter Tag-Anzeige fรผhren)\">โ๏ธ",
- "mt_waves": "Wellenform-Suchleiste:$NAudio-Amplitude in der Leiste anzeigen\">~s",
- "mt_npclip": "Buttons zum Kopieren des aktuellen Titels anzeigen\">/np",
- "mt_m3u_c": "Buttons zum Kopieren der$Nausgewรคhlten Titel als m3u8-Wiedergabeliste anzeigen\">๐ป",
- "mt_octl": "OS-Integration (Media-Hotkeys/OSD)\">os-ctl",
- "mt_oseek": "Suchen via OS-Integration erlauben$N$NHinweis: auf einigen Gerรคten (iPhones)$Nersetzt dies den nรคchsten-Titel-Button\">Suchen",
- "mt_oscv": "Albumcover in OSD anzeigen\">Cover",
- "mt_follow": "den spielenden Titel im Blick behalten\">๐ฏ",
- "mt_compact": "kompakte Steuerelemente\">โ",
- "mt_uncache": "Cache leeren (probier das, wenn dein Browser$Neine defekte Kopie eines Titels zwischenspeichert und sich weigert, ihn abzuspielen)\">Cache leeren",
- "mt_mloop": "offenen Ordner wiederholen\">๐ Schleife",
- "mt_mnext": "nรคchsten Ordner laden und fortfahren\">๐ nรคchster",
- "mt_mstop": "Wiedergabe beenden\">โธ Stop",
- "mt_cflac": "FLAC / WAV zu {0} konvertierebn\">flac",
- "mt_caac": "AAC / M4A zu {0} konvertieren\">aac",
- "mt_coth": "Convertiere alle Dateien (die nicht MP3 sind) zu {0}\">oth",
- "mt_c2opus": "Beste Wahl fรผr Desktops, Laptops, Android\">opus",
- "mt_c2owa": "opus-weba, fรผr iOS 17.5 und neuer\">owa",
- "mt_c2caf": "opus-caf, fรผr iOS 11 bis 17\">caf",
- "mt_c2mp3": "benutze dieses Format fรผr รคltere Gerรคte\">mp3",
- "mt_c2flac": "beste Klangqualitรคt, aber groรe Downloads\">flac", //m
- "mt_c2wav": "unkomprimierte Wiedergabe (noch grรถรer)\">wav", //m
- "mt_c2ok": "Gute Wahl, Chef!",
- "mt_c2nd": "Das ist nicht das empfohlene Ausgabeformat fรผr dein Gerรคt, aber passt schon",
- "mt_c2ng": "Dein Gerรคt scheint dieses Ausgabeformat nicht zu unterstรผtzen, aber lass trotzdem mal probieren",
- "mt_xowa": "Es gibt Bugs in iOS, die die Hintergrund-Wiedergabe mit diesem Format verhindern; bitte nutze caf oder mp3 stattdessen",
- "mt_tint": "Hintergrundlevel (0-100) auf der Seekbar$Num Buffern weniger ablenkend zu machen",
- "mt_eq": "Aktiviert Equalizer und Lautstรคrkeregelung;$N$Nboost <code>0</code> = Standard 100% Lautstรคrke (unverรคndert)$N$Nwidth <code>1 </code> = Standard Stereo (unverรคndert)$Nwidth <code>0.5</code> = 50% Links-Rechts-Crossfeed$Nwidth <code>0 </code> = Mono$N$Nboost <code>-0.8</code> & width <code>10</code> = Gesangsentfernung :^)$N$NDer Equalizer macht nahtlose Alben vollstรคndig nahtlos, also lass' ihn mit allen Werten auf Null (auรer width = 1) aktiviert, wenn dir das wichtig ist",
- "mt_drc": "Aktiviert den Dynamic Range Compressor (Lautstรคrkeglรคttung/-begrenzung); aktiviert auch den Equalizer zum Ausgleich, setze alle EQ-Felder auรer 'width' auf 0, wenn du das nicht willst$N$Nsenkt die Lautstรคrke von Audio รผber SCHWELLENWERT dB; fรผr jedes VERHรLTNIS dB รผber SCHWELLENWERT gibt es 1 dB Ausgabe, also bedeuten Standardwerte von tresh -24 und ratio 12, dass es nie lauter als -22 dB werden sollte und der Equalizer-Boost sicher auf 0.8 oder sogar 1.8 mit ATK 0 und einem groรen RLS wie 90 erhรถht werden kann (funktioniert nur in Firefox; in anderen Browsern ist RLS max. 1)$N$N(siehe Wikipedia, dort wird es viel besser erklรคrt)",
-
- "mb_play": "Abspielen",
- "mm_hashplay": "Diese Audiodatei abspielen?",
- "mm_m3u": "Drรผcke Eingabe/OK zum Abspielen\nDrรผcke ESC/Abbrechen zum Bearbeiten",
- "mp_breq": "Benรถtigt Firefox 82+ oder Chrome 73+ oder iOS 15+",
- "mm_bload": "Lรคdt...",
- "mm_bconv": "Konvertiere zu {0}, bitte warte...",
- "mm_opusen": "Dein Browser kann AAC- / M4A-Dateien nicht abspielen;\nUmwandlung zu Opus ist jetzt aktiv",
- "mm_playerr": "Wiedergabefehler: ",
- "mm_eabrt": "Der Wiedergabeversuch wurde abgebrochen",
- "mm_enet": "Dein Internet lรคuft auf Edge, wa?",
- "mm_edec": "Die Datei scheint beschรคdigt zu sein??",
- "mm_esupp": "Dein Browser versteht dieses Audioformat nicht",
- "mm_eunk": "Unbekannter Fehler",
- "mm_e404": "Konnte Datei nicht abspielen; Fehler 404: Datei nicht gefunden.",
- "mm_e403": "Konnte Datei nicht abspielen; Fehler 403: Zugriff verweigert.\n\nDrรผcke F5 zum Neuladen, vielleicht wurdest du abgemeldet",
- "mm_e500": "Konnte Datei nicht abspielen; Fehler 500: Prรผfe die Serverlogs.",
- "mm_e5xx": "Konnte Datei nicht abspielen; Server Fehler ",
- "mm_nof": "finde keine weiteren Audiodateien in der Nรคhe",
- "mm_prescan": "Suche nach Musik zum Abspielen...",
- "mm_scank": "Nรคchster Song gefunden:",
- "mm_uncache": "Cache geleert; Alle Songs werden beim nรคchsten Abspielversuch neu heruntergeladen",
- "mm_hnf": "dieser Song existiert nicht mehr",
-
- "im_hnf": "dieses Bild existiert nicht mehr",
-
- "f_empty": 'Dieser Ordner ist leer',
- "f_chide": 'Dies blendet die Spalte ยซ{0}ยป aus\n\nDu kannst Spalten in den Einstellungen wieder einblenden.',
- "f_bigtxt": "Diese Datei ist {0} MiB gross -- Sicher, dass du sie als Text anzeigen willst?",
- "f_bigtxt2": "Mรถchtest du stattdessen nur das Ende der Datei anzeigen? Das aktiviert ausserdem die Folgen- und Verfolgen-Funktion, welche neu hinzugefรผgte Textzeilen in Echtzeit anzeigt",
- "fbd_more": '',
- "fbd_all": '',
- "f_anota": "nur {0} der {1} Elemente wurden ausgewรคhlt;\num den gesamten Ordner auszuwรคhlen, zuerst nach unten scrollen",
-
- "f_dls": 'die Dateilinks im aktuellen Ordner wurden\nin Downloadlinks geรคndert',
-
- "f_partial": "Um eine Datei sicher herunterzuladen, die gerade hochgeladen wird, klicke bitte die Datei mit dem gleichen Namen, aber ohne die .PARTIAL-Endung. Bitte drรผcke Abbrechen oder Escape, um dies zu tun.\n\nWenn du auf OK / Eingabe drรผckst, ignorierst du diese Warnung und lรคdst die .PARTIAL-Datei herunter, die ziemlich sicher beschรคdigte Daten enthรคlt.",
-
- "ft_paste": "{0} Elemente einfรผgen$NHotkey: STRG-V",
- "fr_eperm": 'Umbenennen fehlgeschlagen:\nDir fehlt die "Verschieben"-Berechtigung in diesem Ordner',
- "fd_eperm": 'Lรถschen fehlgeschlagen:\nDir fehlt die "Lรถschen"-Berechtigung in diesem Ordner',
- "fc_eperm": 'Ausschneiden fehlgeschlagen:\nDir fehlt die "Verschieben"-Berechtigung in diesem Ordner',
- "fp_eperm": 'Einfรผgen fehlgeschlagen:\nDir fehlt die "Schreiben"-Berechtigung in diesem Ordner',
- "fr_emore": "Wรคhle mindestens ein Element zum Umbenennen aus",
- "fd_emore": "Wรคhle mindestens ein Element zum Lรถschen aus",
- "fc_emore": "Wรคhle mindestens ein Element zum Ausschneiden aus",
- "fcp_emore": "Wรคhle mindestens ein Element aus, um es in die Zwischenablage zu kopieren",
-
- "fs_sc": "Teile diesen Ordner",
- "fs_ss": "Teile die ausgewรคhlten Dateien",
- "fs_just1d": "Du kannst nicht mehrere Ordner auswรคhlen \noder Dateien und Ordner in der Auswahl mischen.",
- "fs_abrt": "โ Abbrechen",
- "fs_rand": "๐ฒ Zufallsname",
- "fs_go": "โ
Share erstellen",
- "fs_name": "Name",
- "fs_src": "Quelle",
- "fs_pwd": "Passwort",
- "fs_exp": "Ablauf",
- "fs_tmin": "Minuten",
- "fs_thrs": "Stunden",
- "fs_tdays": "Tage",
- "fs_never": "nie",
- "fs_pname": "optionaler Linkname; zufรคllig wenn leer",
- "fs_tsrc": "zu teilende Datei oder Ordner",
- "fs_ppwd": "optionales Passwort",
- "fs_w8": "erstelle Share...",
- "fs_ok": "drรผcke Eingabe/OK fรผr Zwischenablage\ndrรผcke ESC/Abbrechen zum Schliessen",
-
- "frt_dec": "Kann Fรคlle von beschรคdigten Dateien beheben\">url-decode",
- "frt_rst": "Geรคnderte Dateinamen auf Orginale zurรผcksetzen\">โบ zurรผcksetzen",
- "frt_abrt": "Abbrechen und dieses Fenster schliessen\">โ abbrechen",
- "frb_apply": "รBERNEHMEN",
- "fr_adv": "Stapel-/Metadaten-/Musterumbenennung\">erweitert",
- "fr_case": "Groร-/Kleinschreibung beachten (Regex)\">Groรschreibung",
- "fr_win": "Windows-kompatible Namen; ersetzt <>:"\\|?* durch japanische Fullwidth-Zeichen\">win",
- "fr_slash": "Ersetzt / durch ein Zeichen, das keine neuen Ordner erstellt\">no /",
- "fr_re": "Regex-Suchmuster fรผr Originaldateinamen; Erfassungsgruppen kรถnnen im Formatfeld unten als <code>(1)</code> und <code>(2)</code> usw. referenziert werden",
- "fr_fmt": "inspiriert von foobar2000:$N<code>(title)</code> wird durch Songtitel ersetzt,$N<code>[(artist) - ](title)</code> รผberspringt [diesen] Teil falls Interpret leer$N<code>$lpad((tn),2,0)</code> fรผllt die Titelnummer auf 2 Ziffern auf",
- "fr_pdel": "Lรถschen",
- "fr_pnew": "Speichern als",
- "fr_pname": "Gib der Vorlage einen Namen",
- "fr_aborted": "Abgebrochen",
- "fr_lold": "Alter Name",
- "fr_lnew": "Neuer Name",
- "fr_tags": "Tags fรผr die ausgewรคhlten Dateien (liest nur, als Referenz):",
- "fr_busy": "Benenne {0} Elemente um...\n\n{1}",
- "fr_efail": "Umbenennen fehlgeschlagen:\n",
- "fr_nchg": "{0} der neuen Namen wurden angepasst durch win und/oder no /\n\nMรถchtest du mit diesen geรคnderten Namen fortfahren?",
-
- "fd_ok": "Lรถschen OK",
- "fd_err": "Lรถschen fehlgeschlagen:\n",
- "fd_none": "Nichts wรผrde gelรถscht; vielleicht durch die Serverkonfiguration blockiert (xbd)?",
- "fd_busy": "Lรถsche {0} Elemente...\n\n{1}",
- "fd_warn1": "Diese {0} Elemente LรSCHEN?",
- "fd_warn2": "Ich frage das letzte Mal! Was weg ist, ist weg. Keine Chance, das rรผckgรคngig zu machen. Lรถschen?",
-
- "fc_ok": "{0} Elemente ausgeschnitten",
- "fc_warn": '{0} Elemente in die Zwischenablage kopiert\n\nAber: nur dieses Browsertab kann sie einfรผgen\n(da deine Auswahl so abartig riesig war)',
-
- "fcc_ok": "{0} Elemente in die Zwischenablage kopiert",
- "fcc_warn": '{0} Elemente in die Zwischenablage kopiert\n\nAber: nur dieses Browsertab kann sie einfรผgen\n(da deine Auswahl so abartig riesig war)',
-
- "fp_apply": "Diese Namen verwenden",
- "fp_ecut": "Kopiere erst ein paar Dateien / Ordner, um sie einzufรผgen\n\nTipp: Ausschneiden und Kopieren funktioniert รผber Browsertabs hinweg",
- "fp_ename": "{0} Elemente konnten nicht verschoben werden, weil bereits andere Dateien mit diesen Namen existieren. Gib ihnen unten neue Namen um fortzufahren, oder lass das Feld leer zum รberspringen:",
- "fcp_ename": "{0} Elemente konnten nicht kopiert werden, weil bereits andere Dateien mit diesen Namen existieren. Gib ihnen unten neue Namen um fortzufahren, oder lass das Feld leer zum รberspringen:",
- "fp_emore": "Es gibt noch ein paar Dateinamen, die geรคndert werden mรผssen",
- "fp_ok": "Verschieben OK",
- "fcp_ok": "Kopieren OK",
- "fp_busy": "Verschiebe {0} Elemente...\n\n{1}",
- "fcp_busy": "Kopiere {0} Elemente...\n\n{1}",
- "fp_abrt": "Abbrechen...", //m
- "fp_err": "Verschieben fehlgeschlagen:\n",
- "fcp_err": "Kopieren fehlgeschlagen:\n",
- "fp_confirm": "Diese {0} Elemente hierher verschieben?",
- "fcp_confirm": "Diese {0} Elemente hierher kopieren?",
- "fp_etab": 'Konnte die Zwischenablage nicht vom anderen Browsertab lesen',
- "fp_name": "Lade Datei von deinem Gerรคt hoch. Gib ihr einen Namen:",
- "fp_both_m": 'Wรคhle, was eingefรผgt werden soll
Eingabe = {0} Dateien von ยซ{1}ยป verschieben\nESC = {2} Dateien von deinem Gerรคt hochladen',
- "fcp_both_m": 'Wรคhle, was eingefรผgt werden soll
Eingabe = {0} Dateien von ยซ{1}ยป kopieren\nESC = {2} Dateien von deinem Gerรคt hochladen',
- "fp_both_b": 'VerschiebenHochladen',
- "fcp_both_b": 'KopierenHochladen',
-
- "mk_noname": "Tipp' mal vorher lieber einen Namen in das Textfeld links, bevor du das machst :p",
-
- "tv_load": "Textdatei wird geladen:\n\n{0}\n\n{1}% ({2} von {3} MiB geladen)",
- "tv_xe1": "Konnte Textdatei nicht laden:\n\nFehler ",
- "tv_xe2": "404, Datei nicht gefunden",
- "tv_lst": "Liste der Textdateien in",
- "tvt_close": "Zu Ordneransicht zurรผck$NHotkey: M (oder Esc)\">โ Schliessen",
- "tvt_dl": "Diese Datei herunterladen$NHotkey: Y\">๐พ Herunterladen",
- "tvt_prev": "Vorheriges Dokument zeigen$NHotkey: i\">โฌ vorh.",
- "tvt_next": "Nรคchstes Dokument zeigen$NHotkey: K\">โฌ nรคchst.",
- "tvt_sel": "Wรคhlt diese Datei aus ( zum Ausschneiden / Kopieren / Lรถschen / ... )$NHotkey: S\">ausw.",
- "tvt_edit": "Datei im Texteditor zum Bearbeiten รถffnen$NHotkey: E\">โ๏ธ bearb.",
- "tvt_tail": "Datei auf Verรคnderungen รผberwachen; Neue Zeilen werden in Echtzeit angezeigt\">๐ก folgen",
- "tvt_wrap": "Zeilenumbruch\">โต",
- "tvt_atail": "Automatisch nach unten scrollen\">โ",
- "tvt_ctail": "Terminal-Farben dekodieren (ANSI Escape Codes)\">๐",
- "tvt_ntail": "Scrollback limitieren (Menge an Bytes an Text, die geladen bleiben sollen)",
-
- "m3u_add1": "Song wurde zur M3U-Playlist hinzugefรผgt",
- "m3u_addn": "{0} Songs zur M3U-Playlist hinzugefรผgt",
- "m3u_clip": "M3U-Playlist in die Zwischenablage kopiert\n\nDu solltest eine neue Datei mit dem Namen something.m3u erstellen und die Playlist da rein kopieren; damit wird die Playlist abspielbar",
-
- "gt_vau": "nur Ton abspielen, kein Video zeigen\">๐ง",
- "gt_msel": "Dateiauswahl aktivieren; STRG-klicke eine Datei zum รผberschreiben$N$N<em>wenn aktiv: Datei / Ordner doppelklicken zum รffnen</em>$N$NHotkey: S\">multiselect",
- "gt_crop": "Vorschaubilder mittig zuschneiden\">crop",
- "gt_3x": "hochauflรถsende Vorschaubilder\">3x",
- "gt_zoom": "zoom",
- "gt_chop": "kรผrzen",
- "gt_sort": "sortieren nach",
- "gt_name": "Name",
- "gt_sz": "Grรถsse",
- "gt_ts": "Datum",
- "gt_ext": "Typ",
- "gt_c1": "Dateinamen mehr kรผrzen (weniger zeigen)",
- "gt_c2": "Dateinamen weniger kรผrzen (mehr zeigen)",
-
- "sm_w8": "Suche ...",
- "sm_prev": "Die Suchresultate gehรถren zu einer vorherigen Suchanfrage:\n ",
- "sl_close": "Suchresultate schliessen",
- "sl_hits": "Zeige {0} Treffer",
- "sl_moar": "Mehr laden",
-
- "s_sz": "Grรถsse",
- "s_dt": "Datum",
- "s_rd": "Pfad",
- "s_fn": "Name",
- "s_ta": "Tags",
- "s_ua": "up@",
- "s_ad": "adv.",
- "s_s1": "minimum MiB",
- "s_s2": "maximum MiB",
- "s_d1": "min. iso8601",
- "s_d2": "max. iso8601",
- "s_u1": "hochgeladen nach",
- "s_u2": "und/oder vor",
- "s_r1": "Pfad enthรคlt (Leerzeichen-separiert)",
- "s_f1": "Name enthรคlt (negieren mit -nope)",
- "s_t1": "Tags enthรคlt (^=start, end=$)",
- "s_a1": "spezifische Metadaten-Eigenschaften",
-
- "md_eshow": "Kann nicht rendern ",
- "md_off": "[๐readme] deaktiviert in [โ๏ธ] -- Dokument versteckt",
-
- "badreply": "Hab die Antwort vom Server nicht verstanden. (badreply)",
-
- "xhr403": "403: Zugriff verweigert\n\nVersuche, F5 zu drรผcken. Vielleicht wurdest du abgemeldet.",
- "xhr0": "Unbekannt (wahrschenlich Verbindung zum Server verloren oder der Server ist offline)",
- "cf_ok": "Sorry dafรผr -- Der DD" + wah + "oS-Schutz hat angeschlagen.\n\nEs sollte in etwa 30 Sekunden weitergehen.\n\nFalls nichts passiert, drรผck' F5, um die Seite neuzuladen",
- "tl_xe1": "Konnte Unterordner nicht auflisten:\n\nFehler ",
- "tl_xe2": "404: Ordner nicht gefunden",
- "fl_xe1": "Konnte Dateien in Ordner nicht auflisten:\n\nFehler ",
- "fl_xe2": "404: Ordner nicht gefunden",
- "fd_xe1": "Konnte Unterordner nicht erstellen:\n\nFehler ",
- "fd_xe2": "404: รbergeordneter Ordner nicht gefunden",
- "fsm_xe1": "Konnte Nachricht nicht senden:\n\nFehler ",
- "fsm_xe2": "404: รbergeordneter Ordner nicht gefunden",
- "fu_xe1": "Konnte unpost-Liste nicht laden:\n\nFehler ",
- "fu_xe2": "404: Datei nicht gefunden??",
-
- "fz_tar": "Unkomprimierte GNU TAR-Datei (Linux / Mac)",
- "fz_pax": "Unkomprimierte pax-format TAR-Datei (etwas langsamer)", //m
- "fz_targz": "GNU-TAR mit gzip Level 3 Kompression$N$Nรผblicherweise recht langsam,$Nbenutze stattdessen ein unkomprimiertes TAR",
- "fz_tarxz": "GNU-TAR mit xz level 1 Kompression$N$Nรผblicherweise recht langsam,$Nbenutze stattdessen ein unkomprimiertes TAR",
- "fz_zip8": "ZIP mit UTF8-Dateinamen (kรถnnte kaputt gehen auf Windows 7 oder รคlter)",
- "fz_zipd": "ZIP mit traditionellen CP437-Dateinamen, fรผr richtig alte Software",
- "fz_zipc": "CP437 mit CRC32 frรผh berechnet,$Nfรผr MS-DOS PKZIP v2.04g (Oktober 1993)$N(braucht lรคnger zum Verarbeiten, bevor der Download starten kann)",
-
- "un_m1": "Unten kannst du deine neusten Uploads lรถschen (oder Unvollstรคndige abbrechen)",
- "un_upd": "Neu laden",
- "un_m4": "Oder die unten sichtbaren Dateien teilen:",
- "un_ulist": "Anzeigen",
- "un_ucopy": "Kopieren",
- "un_flt": "Optionale Filter: URL muss enthalten",
- "un_fclr": "Filter lรถschen",
- "un_derr": 'unpost-delete fehlgeschlagen:\n',
- "un_f5": 'Etwas ist kaputt gegangen, versuche die Seite neuzuladen (drรผcke dazu F5)',
- "un_uf5": "Sorry, aber du musst die Seite neuladen (z.B. in dem du F5 oder STRG-R drรผckst) bevor zu diesen Upload abbrechen kannst",
- "un_nou": 'Warnung: Der Server ist grade zu beschรคftigt, um unvollstรคndige Uploads anzuzeigen; Drรผcke den "Neu laden"-Link in ein paar Sekunden',
- "un_noc": 'Warnung: unpost von vollstรคndig hochgeladenen Dateien ist รผber die Serverkonfiguration gesperrt',
- "un_max": "Zeige die ersten 2000 Dateien (benutze Filter, um die gewรผnschten Dateien zu finden)",
- "un_avail": "{0} zuletzt hochgeladene Dateien kรถnnen gelรถscht werden
{1} Unvollstรคndige kรถnnen abgebrochen werden",
- "un_m2": "Sortiert nach Upload-Zeitpunkt; neuste zuerst:",
- "un_no1": "Hoppala! Es gibt keine ausreichend aktuellen Uploads.",
- "un_no2": "Pech gehabt! Kein Upload, der zu dem Filter passen wรผrde, ist neu genug",
- "un_next": "Lรถsche die nรคchsten {0} Dateien",
- "un_abrt": "Abbrechen",
- "un_del": "Lรถschen",
- "un_m3": "Deine letzten Uploads werden geladen ...",
- "un_busy": "Lรถsche {0} Dateien ...",
- "un_clip": "{0} Links in die Zwischenablage kopiert",
-
- "u_https1": "fรผr bessere Performance solltest du",
- "u_https2": "auf HTTPS wechseln",
- "u_https3": " ",
- "u_ancient": 'Dein Browser ist verdammt antik -- vielleicht solltest du stattdessen bup benutzen',
- "u_nowork": "Benรถtigt Firefox 53+ oder Chrome 57+ oder iOS 11+",
- "tail_2old": "Benรถtigt Firefox 105+ oder Chrome 71+ oder iOS 14.5+",
- "u_nodrop": 'Dein Browser ist zu alt fรผr Drag-and-Drop Uploads',
- "u_notdir": "Das ist kein Ordner!\n\nDein Browser ist zu alt,\nversuch stattdessen dragdrop",
- "u_uri": "Um Bilder per Drag-and-Drop aus anderen Browserfenstern hochzuladen,\nlass' sie bitte รผber dem grossen Upload-Button fallen",
- "u_enpot": 'Zu Potato UI wechseln (kann Upload-Geschw. verbessern)',
- "u_depot": 'Zu fancy UI wechseln (kann Upload-Geschw. verschlechtern)',
- "u_gotpot": 'Wechsle zu Potato UI fรผr verbesserte Upload-Geschwindigkeit,\n\nwenn du anderer Meinung bist, kannst du gerne zurรผck wechseln',
- "u_pott": "Dateien: {0} fertig, {1} fehlgeschlagen, {2} in Bearbeitung, {3} ausstehend
",
- "u_ever": "Dies ist der Basic Uploader; up2k benรถtigt mind.
Chrome 21 // Firefox 13 // Edge 12 // Opera 12 // Safari 5.1",
- "u_su2k": 'Dies ist der Basic Uploader; up2k ist besser',
- "u_uput": 'Fรผr Geschwindigkeit optimieren (Checksum รผberspringen)',
- "u_ewrite": 'Du hast kein Schreibzugriff auf diesen Ordner',
- "u_eread": 'Du hast kein Lesezugriff auf diesen Ordner',
- "u_enoi": 'file-search ist in der Serverkonfiguration nicht aktiviert',
- "u_enoow": "รberschreiben wird hier nicht funktionieren; benรถtige Lรถsch-Berechtigung",
- "u_badf": 'Diese {0} Dateien (von insgesammt {1}) wurden รผbersprungen, wahrscheinlich wegen Dateisystem-Berechtigungen:\n\n',
- "u_blankf": 'Diese {0} Dateien (von insgesammt {1}) sind leer; trotzdem hochladen?\n\n',
- "u_applef": 'Diese {0} Dateien (von insgesammt {1}) sind mรถglicherweise unerwรผnscht;\nOK/Eingabe drรผcken, um die folgenden Dateien zu รผberspringen.\nDrรผcke Abbrechen/ESC um sie NICHT zu รผberspringen und diese AUCH HOCHZULADEN:\n\n',
- "u_just1": '\nFunktioniert vielleicht besser, wenn du nur eine Datei auswรคhlst',
- "u_ff_many": "Falls du Linux / MacOS / Android benutzt, kรถnnte Firefox mit dieser Menge an Dateien crashen!\nFalls das passiert, probier nochmal (oder benutz Chrome).",
- "u_up_life": "Dieser Upload wird vom Server gelรถscht\n{0} nachdem er abgeschlossen ist",
- "u_asku": 'Diese {0} Dateien nach {1} hochladen',
- "u_unpt": "Du kannst diesen Upload rรผckgรคngig machen mit dem ๐งฏ oben-links",
- "u_bigtab": 'Versuche {0} Dateien anzuzeigen.\n\nDas kรถnnte dein Browser crashen, bist du dir wirklich sicher?',
- "u_scan": 'Scanne Dateien...',
- "u_dirstuck": 'Ordner-Iterator blieb hรคngen beim Versuch, diese {0} Eintrรคge zu lesen; รผberspringe:',
- "u_etadone": 'Fertig ({0}, {1} Dateien)',
- "u_etaprep": '(Upload wird vorbereitet)',
- "u_hashdone": 'Hashing vollstรคndig',
- "u_hashing": 'Hash',
- "u_hs": 'Wir schรผtteln uns die Hรคnde ("handshaking")...',
- "u_started": "Dateien werden hochgeladen; siehe [๐]",
- "u_dupdefer": "Duplikat; wird nach allen anderen Dateien verarbeitet",
- "u_actx": "Klicke diesen Text um Performance-
Einbusen zu Vermeiden beim Wechsel auf andere Fenster/Tabs",
- "u_fixed": "OK! Habs repariert ๐",
- "u_cuerr": "failed to upload chunk {0} of {1};\nprobably harmless, continuing\n\nfile: {2}",
- "u_cuerr2": "server rejected upload (chunk {0} of {1});\nwill retry later\n\nfile: {2}\n\nerror ",
- "u_ehstmp": "versuche nochmal; siehe unten-rechts",
- "u_ehsfin": "Der Server hat die Anfrage zum Abschluss des Uploads abgelehnt; versuche nochmal...",
- "u_ehssrch": "Der Server hat die Anfrage zur Suche abgelehnt; versuche nochmal...",
- "u_ehsinit": "Der Server hat die Anfrage zum Start des Uploads abgelehnt; versuche nochmal...",
- "u_eneths": "Netzwerkfehler beim Upload-Handshake; versuche nochmal...",
- "u_enethd": "Netzwerkfehler beim Testen der Existenz des Ziels; versuche nochmal...",
- "u_cbusy": "Der Server mag uns grade nicht mehr nach einem Netzwerkglitch, warte einen Moment...",
- "u_ehsdf": "Server hat kein Speicherplatz mehr!\n\nwerde es erneut versuchen, falls jemand\ngenug Platz schafft um fortzufahren",
- "u_emtleak1": "scheint, als ob dein Browser ein Memory Leak hรคtte;\nbitte",
- "u_emtleak2": ' wechsle auf HTTPS (empfohlen) oder ',
- "u_emtleak3": ' ',
- "u_emtleakc": 'versuche folgendes:\n- drรผcke
F5 um die Seite neu zu laden - deaktivere dann den
mt Button in den โ๏ธ Einstellungen - und versuche den Upload nochmal.
Uploads werden etwas langsamer sein, aber man kann ja nicht alles haben.\nSorry fรผr die Umstรคnde !\n\nPS: Chrome v107 hat ein Bugfix dafรผr',
- "u_emtleakf": 'versuche folgendes:\n- drรผcke
F5 um die Seite neu zu laden - aktivere dann
๐ฅ (potato) im Upload UI - und versuche den Upload nochmal
\nPS: Firefox hat hoffentlich irgendwann ein Bugfix',
- "u_s404": "nicht auf dem Server gefunden",
- "u_expl": "erklรคren",
- "u_maxconn": "die meisten Browser limitieren dies auf 6, aber Firefox lรคsst mehr zu unter connections-per-server in about:config",
- "u_tu": 'WARNUNG: Turbo aktiviert, Client kรถnnte unvollstรคndige Uploads verpassen und nicht wiederholen; siehe Turbo-Button Tooltip
',
- "u_ts": 'WARNUNG: Turbo aktiviert, Suchresultate kรถnnen inkorrekt sein; siehe Turbo-Button Tooltip
',
- "u_turbo_c": "Turbo deaktiviert in der Serverkonfiguration",
- "u_turbo_g": "Turbo deaktiviert, da du keine Listen-Berechtigung\nauf diesem Volume hast",
- "u_life_cfg": 'Autodelete nach min (or h)',
- "u_life_est": 'Upload wird gelรถscht ---',
- "u_life_max": 'Dieser Ordner erzwingt eine\nmax Lebensdauer von {0}',
- "u_unp_ok": 'unpost ist erlaubt fรผr {0}',
- "u_unp_ng": 'unpost wird NICHT erlaubt',
- "ue_ro": 'Du hast nur Lese-Zugriff auf diesen Ordner\n\n',
- "ue_nl": 'Du bist nicht angemeldet',
- "ue_la": 'Du bist angemeldet als "{0}"',
- "ue_sr": 'Du bist derzeit im Suchmodus\n\nWechsle zum Upload-Modus indem du auf die Lupe ๐ klickst (neben dem grossen SUCHEN Button), und versuche den Upload nochmal.\n\nSorry',
- "ue_ta": 'Versuche den Upload nochmal, sollte jetzt klappen',
- "ue_ab": "Diese Datei wird gerade in einem anderen Ordner hochgeladen, dieser Upload muss zuerst abgeschlossen werden, bevor die Datei woanders hochgeladen werden kann.\n\nDu kannst den Upload abbrechen und vergessen mit dem ๐งฏ oben-links",
- "ur_1uo": "OK: Datei erfolgreich hochgeladen",
- "ur_auo": "OK: Alle {0} Dateien erfolgreich hochgeladen",
- "ur_1so": "OK: Datei auf dem Server gefunden",
- "ur_aso": "OK: Alle {0} Dateien auf dem Server gefunden",
- "ur_1un": "Upload fehlgeschlagen, sorry",
- "ur_aun": "Alle {0} Uploads fehlgeschlagen, sorry",
- "ur_1sn": "Datei wurde NICHT auf dem Server gefunden",
- "ur_asn": "Die {0} Dateien wurden NICHT auf dem Server gefunden",
- "ur_um": "Fertig;\n{0} Uploads OK,\n{1} Uploads fehlgeschlagen, sorry",
- "ur_sm": "Fertig;\n{0} Uploads gefunden auf dem Server,\n{1} Dateien NICHT gefunden auf dem Server",
-
- "lang_set": "Neuladen um รnderungen anzuwenden?",
- },
- "fin": {
- "tt": "Suomi",
-
- "cols": {
- "c": "toimintopainikkeet",
- "dur": "kesto",
- "q": "laatu / bittinopeus",
- "Ac": "รครคnikoodekki",
- "Vc": "videokoodekki",
- "Fmt": "formaatti / sรคiliรถ",
- "Ahash": "รครคnen tarkistussumma",
- "Vhash": "videon tarkistussumma",
- "Res": "resoluutio",
- "T": "tiedostotyyppi",
- "aq": "รครคnenlaatu / bittinopeus",
- "vq": "kuvalaatu / bittinopeus",
- "pixfmt": "alinรคytteistys / pikselirakenne",
- "resw": "horisontaalinen resoluutio",
- "resh": "vertikaalinen resoluutio",
- "chs": "รครคnikanavat",
- "hz": "nรคytteenottotaajuus"
- },
-
- "hks": [
- [
- "misc",
- ["ESC", "sulje asioita"],
-
- "file-manager",
- ["G", "vaihda lista/kuvanรคkymรครคn"],
- ["T", "vaihda pienoiskuviin/kuvakkeisiin"],
- ["โง A/D", "pienoiskuvien koko"],
- ["ctrl-K", "poista valitut"],
- ["ctrl-X", "siirrรค valitut leikepรถydรคlle"],
- ["ctrl-C", "kopioi valitut leikepรถydรคlle"],
- ["ctrl-V", "siirrรค tai kopioi tรคhรคn"],
- ["Y", "lataa valitut"],
- ["F2", "uudelleennimeรค valitut"],
-
- "file-list-sel",
- ["space", "vaihda tiedostonvalintatilaan"],
- ["โ/โ", "siirrรค valintaosoitinta"],
- ["ctrl โ/โ", "siirrรค osoitinta ja nรคkymรครค"],
- ["โง โ/โ", "valitse edellinen/seuraava tiedosto"],
- ["ctrl-A", "valitse kaikki tiedostot / hakemistot"],
- ], [
- "navigation",
- ["B", "nรคytรค linkkipolku"],
- ["I/K", "siirry edelliseen/seuraavaan hakemistoon"],
- ["M", "siirry ylรคhakemistoon/supista nykyinen hakemisto"],
- ["V", "nรคytรค hakemistot/tekstitiedostot navigointipaneelissa"],
- ["A/D", "navigointipaneelin koko"],
- ], [
- "audio-player",
- ["J/L", "edellinen/seuraava kappale"],
- ["U/O", "kelaa 10s taaksepรคin/eteenpรคin"],
- ["0..9", "siirry 0%..90%"],
- ["P", "toista/pysรคytรค kappale"],
- ["S", "valitse toistossa oleva kappale"],
- ["Y", "lataa kappale"],
- ], [
- "image-viewer",
- ["J/L, โ/โ", "edellinen/seuraava kuva"],
- ["Home/End", "ensimmรคinen/viimeinen kuva"],
- ["F", "siirry koko nรคytรถn tilaan"],
- ["R", "kierrรค myรถtรคpรคivรครคn"],
- ["โง R", "kierrรค vastapรคivรครคn"],
- ["S", "valitse kuva"],
- ["Y", "lataa kuva"],
- ], [
- "video-player",
- ["U/O", "kelaa 10s taaksepรคin/eteenpรคin"],
- ["P/K/Space", "toista/pysรคytรค video"],
- ["C", "jatka toistoa seuraavaan videoon"],
- ["V", "toista uudelleen"],
- ["M", "vaimenna"],
- ["[ ja ]", "aseta videon uudelleentoistovรคli"],
- ], [
- "textfile-viewer",
- ["I/K", "edellinen/seuraava tiedosto"],
- ["M", "sulje tekstitiedosto"],
- ["E", "muokkaa tekstitiedostoa"],
- ["S", "valitse tiedosto (leikkausta/kopiointia/uudelleennimeรคmistรค varten)"],
- ]
- ],
-
- "m_ok": "OK",
- "m_ng": "Peruuta",
-
- "enable": "Aktivoi",
- "danger": "HUOMIO!",
- "clipped": "kopioitu leikepรถydรคlle",
-
- "ht_s1": "sekunti",
- "ht_s2": "sekuntia",
- "ht_m1": "minuutti",
- "ht_m2": "minuuttia",
- "ht_h1": "tunti",
- "ht_h2": "tuntia",
- "ht_d1": "pรคivรค",
- "ht_d2": "pรคivรครค",
- "ht_and": " ja ",
-
- "goh": "hallintapaneeli",
- "gop": 'viereinen hakemisto">edell',
- "gou": 'ylempi hakemisto">ylรถs',
- "gon": 'seuraava hakemisto">seur',
- "logout": "Kirjaudu ulos ",
- "login": "Kirjaudu sisรครคn", //m
- "access": " -oikeudet",
- "ot_close": "sulje alavalikko",
- "ot_search": "etsi tiedostoja ominaisuuksien, tiedostopolun tai -nimen, musiikkitรคgien tai nรคiden yhdistelmรคn perusteella$N$N<code>foo bar</code> = tรคytyy sisรคltรครค sekรค ยซfooยป ettรค ยซbarยป,$N<code>foo -bar</code> = tรคytyy sisรคltรครค ยซfooยป mutta ei ยซbarยป,$N<code>^yana .opus$</code> = alkaa ยซyanaยป ja on ยซopusยป-tiedosto$N<code>"try unite"</code> = sisรคltรครค tรคsmรคlleen ยซtry uniteยป$N$Npรคivรคmรครคrรคn muoto on iso-8601, kuten$N<code>2009-12-31</code> tai <code>2020-09-12 23:30:00</code>",
- "ot_unpost": "unpost: poista viimeaikaiset tai keskeytรค keskenerรคiset lataukset",
- "ot_bup": "bup: tiedostojen 'perus'lรคhetysohjelma, tukee jopa netscape 4.0",
- "ot_mkdir": "mkdir: luo uusi hakemisto",
- "ot_md": "new-md: luo uusi markdown-dokumentti",
- "ot_msg": "msg: lรคhetรค viesti palvelinlokiin",
- "ot_mp": "mediasoittimen asetukset",
- "ot_cfg": "asetukset",
- "ot_u2i": 'up2k: lรคhetรค tiedostoja (vaatii write-oikeudet) tai vaihda hakutilaan nรคhdรคksesi, ovatko tiedostot jo olemassa jossain pรคin palvelinta$N$Nlatauksia voi jatkaa, ne ovat monisรคikeistettyjรค, ja tiedostojen aikaleimat sรคilytetรครคn; nuijii prosessoria enemmรคn kuin [๐] (peruslatausohjelma)
tiedostojen lรคhetyksen aikana tรคmรค kuvake muuttuu kertoo lรคhetyksen edistymisestilanteen!',
- "ot_u2w": 'up2k: lรคhetรค tiedostoja jatkamistoiminnolla (voit sulkea selaimen ja vetรครค samat tiedostot selainikkunaan myรถhemmin)$N$monisรคikeistetty, ja tiedostojen aikaleimat sรคilyvรคt; nuijii prosessoria enemmรคn kuin [๐] (peruslatausohjelma)
tiedostojen lรคhetyksen aikana tรคmรค kuvake muuttuu kertoo lรคhetyksen edistymisestilanteen!',
- "ot_noie": 'Suosittelemme kรคyttรคmรครคn uudempaa selainta.',
-
- "ab_mkdir": "luo hakemisto",
- "ab_mkdoc": "luo markdown-tiedosto",
- "ab_msg": "lรคhetรค viesti palvelinlokiin",
-
- "ay_path": "siirry hakemistoihin",
- "ay_files": "siirry tiedostoihin",
-
- "wt_ren": "uudelleennimeรค valitut kohteet$NPikanรคppรคin: F2",
- "wt_del": "poista valitut kohteet$NPikanรคppรคin: ctrl-K",
- "wt_cut": "siirrรค valitut kohteet leikepรถydรคlle <small>(siirtรครคksesi ne muualle)</small>$NPikanรคppรคin: ctrl-X",
- "wt_cpy": "kopioi valitut kohteet leikepรถydรคlle$N(liittรครคksesi ne muualle)$NPikanรคppรคin: ctrl-C",
- "wt_pst": "liitรค aiemmin leikatut / kopioidut valinnat$NPikanรคppรคin: ctrl-V",
- "wt_selall": "valitse kaikki tiedostot$NPikanรคppรคin: ctrl-A (kun tiedosto on kohdistettu)",
- "wt_selinv": "valitse vastakkaiset tiedostot",
- "wt_zip1": "lataa tรคmรค hakemisto pakattuna",
- "wt_selzip": "lataa valitut kohteet pakattuna",
- "wt_seldl": "lataa valitut kohteet paketoimatta$NPikanรคppรคin: Y",
- "wt_npirc": "kopioi kappaletiedot IRC-muotoilulla",
- "wt_nptxt": "kopioi kappaletiedot ilman muotoilua",
- "wt_m3ua": "lisรครค m3u-soittolistaan (klikkaa ๐ปkopioi myรถhemmin)",
- "wt_m3uc": "kopioi m3u-soittolista leikepรถydรคlle",
- "wt_grid": "vaihda kuva- ja listanรคkymรคn vรคlillรค$NPikanรคppรคin: G",
- "wt_prev": "edellinen kappale$NPikanรคppรคin: J",
- "wt_play": "toista / pysรคytรค$NPikanรคppรคin: P",
- "wt_next": "seuraava kappale$NPikanรคppรคin: L",
-
- "ul_par": "rinnakkaislatausten lkm:",
- "ut_rand": "satunnaisgeneroidut tiedostonimet",
- "ut_u2ts": "kopioi viimeksi muokattu aikaleima$Ntiedostojรคrjestelmรคstรคsi palvelimelle\">๐
",
- "ut_ow": "korvaa olemassa olevat tiedostot palvelimella?$N๐ก๏ธ: ei koskaan (luo sen sijaan uuden tiedostonimen)$N๐: korvaa jos palvelintiedosto on vanhempi kuin omasi$Nโป๏ธ: korvaa aina jos tiedostot ovat erilaisia",
- "ut_mt": "jatka muiden tiedostojen tiivisteiden laskemista latauksen aikana$N$Nkannattanee poistaa kรคytรถstรค, mikรคli prosessori tai kovalevy on vanhempaa mallia",
- "ut_ask": 'kysy vahvistusta ennen latauksen aloittamista">๐ญ',
- "ut_pot": "paranna latausnopeutta hitailla laitteilla$Nvรคhentรคmรคllรค kรคyttรถliittymรคn monimutkaisuutta",
- "ut_srch": "lataamisen sijaan tarkista, ovatko tiedostot jo $N olemassa palvelimella (kรคy lรคpi kaikki hakemistot, joihin sinulla on read-oikeudet)",
- "ut_par": "keskeytรค lataukset asettamalla se nollaan$N$Nnosta, jos yhteytesi on hidas tai viive on suuri$N$Npidรค se 1:ssรค lรคhiverkossa tai jos palvelimen kovalevy on pullonkaula",
- "ul_btn": "vedรค tiedostoja / hakemistoja tรคhรคn
(tai klikkaa minua)",
- "ul_btnu": "L ร H E T ร",
- "ul_btns": "E T S I",
-
- "ul_hash": "tiiviste",
- "ul_send": "lรคhetรค",
- "ul_done": "valmis",
- "ul_idle1": "ei latauksia jonossa",
- "ut_etah": "keskimรครคrรคinen <em>tiivisteiden lasku</em>nopeus ja arvioitu aika valmistumiseen",
- "ut_etau": "keskimรครคrรคinen <em>lataus</em>nopeus ja arvioitu aika valmistumiseen",
- "ut_etat": "keskimรครคrรคinen <em>kokonais</em>nopeus ja arvioitu aika valmistumiseen",
-
- "uct_ok": "onnistui",
- "uct_ng": "ei-hyvรค: epรคonnistui / hylรคtty / ei lรถydy",
- "uct_done": "ok ja ng yhdistettynรค",
- "uct_bz": "laskee tiivisteitรค tai lataa",
- "uct_q": "tyhjรคkรคynnillรค, odottaa",
-
- "utl_name": "tiedostonimi",
- "utl_ulist": "lista",
- "utl_ucopy": "kopioi",
- "utl_links": "linkit",
- "utl_stat": "tila",
- "utl_prog": "edistyminen",
-
- // keep short:
- "utl_404": "404",
- "utl_err": "VIRHE",
- "utl_oserr": "Kรคyttรถjรคrjestelmรคvirhe",
- "utl_found": "lรถytyi",
- "utl_defer": "lykkรครค",
- "utl_yolo": "YOLO",
- "utl_done": "valmis",
-
- "ul_flagblk": "tiedostot lisรคttiin jonoon
mutta toisen selainvรคlilehden up2k on kiireinen,
joten odotetaan sen valmistumista ensin",
- "ul_btnlk": "palvelinkonfiguraatio on lukinnut tรคmรคn kytkimen tรคhรคn tilaan",
-
- "udt_up": "Lataa",
- "udt_srch": "Etsi",
- "udt_drop": "pudota se tรคhรคn",
-
- "u_nav_m": 'selvรค, mitรคs sulla on?
Enter = Tiedostoja (yksi tai useampi)\nESC = Yksi hakemisto (mukaan lukien alihakemistot)',
- "u_nav_b": 'TiedostojaYksi hakemisto',
-
- "cl_opts": "asetukset",
- "cl_themes": "teema",
- "cl_langs": "kieli",
- "cl_ziptype": "hakemiston pakkaustyyppi",
- "cl_uopts": "up2k-kytkimet",
- "cl_favico": "favicon",
- "cl_bigdir": "suuret hakemistot",
- "cl_hsort": "#sort",
- "cl_keytype": "sรคvellajin notaatiotyyppi",
- "cl_hiddenc": "piilotetut sarakkeet",
- "cl_hidec": "piilota",
- "cl_reset": "palauta",
- "cl_hpick": "napauta sarakeotsikoita piilottaaksesi alla olevassa taulukossa",
- "cl_hcancel": "sarakkeiden piilotus peruttu",
-
- "ct_grid": '็ฐ kuvanรคkymรค',
- "ct_ttips": 'โ โก โ">โน๏ธ vihjelaatikot',
- "ct_thumb": 'valitse kuvakkeiden / pienoiskuvien vรคlillรค kuvanรคkymรคssรค $NPikanรคppรคin: T">๐ผ๏ธ pienoiskuvat',
- "ct_csel": 'kรคytรค CTRL ja SHIFT tiedostojen valintaan kuvanรคkymรคssรค">valitse',
- "ct_ihop": 'kun kuvakatselin suljetaan, vieritรค alas viimeksi katsottuun tiedostoon">gโฎฏ',
- "ct_dots": 'nรคytรค piilotetut tiedostot (jos palvelin sallii)">piilotiedostot',
- "ct_qdel": 'kysy vahvistusta vain kerran tiedostoja poistaessa">qdel',
- "ct_dir1st": 'lajittele hakemistot ennen tiedostoja">๐ ensin',
- "ct_nsort": 'luonnollinen lajittelu (tiedostonimille jotka ovat numeroalkuisia)">nsort',
- "ct_utc": 'nรคytรค kaikki aikaleimat UTC-ajassa">UTC',
- "ct_readme": 'nรคytรค README.md hakemistolistauksissa">๐ readme',
- "ct_idxh": 'nรคytรค index.html hakemistolistan sijasta">htm',
- "ct_sbars": 'nรคytรค vierityspalkit">โ',
-
- "cut_umod": "jos tiedosto on jo olemassa palvelimella, pรคivitรค palvelimen viimeksi muokattu aikaleima vastaamaan paikallista tiedostoasi (vaatii write- ja delete-oikeudet)\">re๐
",
-
- "cut_turbo": "yolo-painike -- et todennรคkรถisesti halua ottaa tรคtรค kรคyttรถรถn:$N$Nkรคytรค tรคtรค jos latasit valtavan mรครคrรคn tiedostoja ja jouduit kรคynnistรคmรครคn uudelleen jostain syystรค, ja haluat jatkaa latausta vรคlittรถmรคsti$N$Ntรคmรค korvaa tiivistetarkistuksen yksinkertaisella "onko tรคllรค sama tiedostokoko palvelimella?" joten jos tiedoston sisรคltรถ on erilainen sitรค EI ladata$N$Nsinun pitรคisi poistaa tรคmรค kรคytรถstรค kun lataus on valmis, ja sitten "ladata" samat tiedostot uudelleen antaaksesi selaimesi varmistaa ne\">turbo",
-
- "cut_datechk": "ei vaikutusta ellei turbo-painike ole kรคytรถssรค$N$Nvรคhentรครค yolo-tekijรครค hieman; tarkistaa vastaavatko tiedostojen aikaleimat palvelimella omia$N$Npitรคisi teoriassa napata useimmat keskenerรคiset / vioittuneet lataukset, mutta ei ole korvike varmistuskierrokselle turbo poistettuna kรคytรถstรค jรคlkeenpรคin\">pรคivรคysvarmistin",
-
- "cut_u2sz": "kunkin lรคhetyspalan koko (MiB:ssรค); suuret arvot lentรคvรคt paremmin atlantin yli. kokeile pieniรค arvoja erittรคin heikoilla yhteyksillรค",
-
- "cut_flag": "varmista ettรค vain yksi vรคlilehti lataa kerrallaan $N -- muissa vรคlilehdissรค tรคytyy olla tรคmรค kรคytรถssรค myรถs $N -- vaikuttaa vain saman verkkotunnuksen vรคlilehtiin",
-
- "cut_az": "lรคhetรค tiedostot aakkosjรคrjestyksessรค, eikรค pienin-tiedosto-ensiksi$N$Naakkosjรคrjestys voi tehdรค helpommaksi silmรคillรค jos jokin meni vikaan palvelimella, mutta se tekee latauksesta hieman hitaamman kuitu- ja lรคhiverkossa",
-
- "cut_nag": "kรคyttรถjรคrjestelmรคilmoitus kun lataus valmistuu$N(vain jos selain tai vรคlilehti ei ole aktiivinen)",
- "cut_sfx": "รครคnivaroitus kun lataus valmistuu$N(vain jos selain tai vรคlilehti ei ole aktiivinen)",
-
- "cut_mt": "monisรคikeistรค tiedostojen tiivistysarvojen laskeminen$N$Ntรคmรค kรคyttรครค web-workereitรค ja vaatii$Nenemmรคn RAM-muistia (jopa 512 MiB ekstraa)$N$Ntekee https:n 30% nopeammaksi, http:n 4.5x nopeammaksi\">mt",
-
- "cut_wasm": "kรคytรค wasm:ia selaimen sisรครคnrakennetun tiivistรคjรคn sijaan; parantaa nopeutta chrome-pohjaisissa selaimissa mutta lisรครค prosessorikuormaa, ja monissa vanhemmissa chrome-versioissa on bugeja jotka saavat selaimen kuluttamaan kaiken RAM-muistin ja kaatumaan jos tรคmรค on kรคytรถssรค\">wasm",
-
- "cft_text": "favicon-teksti (tyhjennรค ja pรคivitรค poistaaksesi kรคytรถstรค)",
- "cft_fg": "edustavรคri",
- "cft_bg": "taustavรคri",
-
- "cdt_lim": "tiedostojen enimmรคismรครคrรค nรคytettรคvรคksi hakemistossa",
- "cdt_ask": "sivun lopussa, sen sijaan ettรค lataa $Nautomaattisesti lisรครค tiedostoja, kysy mitรค tehdรค",
- "cdt_hsort": "kuinka monta lajittelusรครคntรถรค (<code>,sorthref</code>) sisรคllyttรครค media-URL:eihin. Tรคmรคn asettaminen nollaan jรคttรครค myรถs huomioimatta media-linkeissรค sisรคllytetyt lajittelusรครคnnรถt kun napsautat niitรค",
-
- "tt_entree": "nรคytรค navigointipaneeli$NPikanรคppรคin: B",
- "tt_detree": "nรคytรค linkkipolku$NPikanรคppรคin: B",
- "tt_visdir": "nรคytรค valittu hakemisto",
- "tt_ftree": "vaihda linkkipolku- / tekstitiedostonรคkymรครคn$NPikanรคppรคin: V",
- "tt_pdock": "nรคytรค ylรคhakemistot telakoitussa paneelissa ylhรครคllรค",
- "tt_dynt": "kasvata automaattisesti hakemistosyvyyden kasvaessa",
- "tt_wrap": "rivitys",
- "tt_hover": "paljasta ylivuotavat rivit leijutettaessa$N( rikkoo vierityksen ellei hiiri $N ole vasemmassa marginaalissa )",
-
- "ml_pmode": "hakemiston lopussa...",
- "ml_btns": "komennot",
- "ml_tcode": "muunna nรคmรค",
- "ml_tcode2": "tรคhรคn muotoon",
- "ml_tint": "sรคvy",
- "ml_eq": "taajuuskorjain",
- "ml_drc": "dynaaminen alueen kompressori",
-
- "mt_loop": "toista samaa kappaletta\">๐",
- "mt_one": "lopeta yhden toiston jรคlkeen\">1๏ธโฃ",
- "mt_shuf": "aktivoi satunnaistoisto\">๐",
- "mt_aplay": "automaattitoisto jos linkissรค jolla pรครคsit palvelimelle oli kappale-ID$N$Ntรคmรคn poistaminen kรคytรถstรค pysรคyttรครค myรถs sivun URL:n pรคivittรคmisen kappale-ID:lla musiikkia toistettaessa, estรครคksesi automaattitoiston jos nรคmรค asetukset menetetรครคn mutta URL sรคilyy\">aโถ",
- "mt_preload": "aloita seuraavan kappaleen lataaminen lรคhellรค loppua, mahdollistaen saumattoman toiston\">esilataus",
- "mt_prescan": "siirry seuraavaan hakemistoon ennen viimeisen kappaleen$Nloppumista, pitรคen verkkoselaimen tyytyvรคisenรค$Njotta se ei pysรคytรค toistoa\">nav",
- "mt_fullpre": "yritรค esiladata koko kappale;$Nโ
ota kรคyttรถรถn heikoilla yhteyksillรค,$Nโ poista kรคytรถstรค hitailla yhteyksillรค\">esi+",
- "mt_fau": "puhelimissa: estรค musiikin pysรคhtyminen jos seuraava kappale ei esilataudu tarpeeksi nopeasti (voi aiheuttaa ongelmia kappaletietojen nรคyttรคmisessรค)\">โ๏ธ",
- "mt_waves": "aaltomuoto-hakupalkki:$Nnรคytรค รครคnenvahvuus selaimessa\">~s",
- "mt_npclip": "nรคytรค painikkeet parhaillaan soivan kappaleen leikepรถydรคlle kopioimiseen\">/np",
- "mt_m3u_c": "nรคytรค painikkeet valittujen$Nkappaleiden kopioimiseen m3u8-soittolistana leikepรถydรคlle\">๐ป",
- "mt_octl": "kรคyttรถjรคrjestelmรคintegraatio (medianรคppรคimet / osd)\">os-ctl",
- "mt_oseek": "salli haku kรคyttรถjรคrjestelmรคintegraation kautta$N$Nhuom: joissakin laitteissa (iPhonet),$Ntรคmรค korvaa 'seuraava kappale' -painikkeen\">kelaus",
- "mt_oscv": "nรคytรค albumin kansi osd:ssรค\">kansikuvat",
- "mt_follow": "pidรค soiva kappale nรคkyvissรค\">๐ฏ",
- "mt_compact": "kompaktit sรครคtimet\">โ",
- "mt_uncache": "tyhjennรค vรคlimuisti (kokeile tรคtรค jos selaimesi vรคlimuistissa on$Nrikkinรคinen kopio kappaleesta)\">uncache",
- "mt_mloop": "toista avoinna olevaa hakemistoa loputtomasti\">๐ alkuun",
- "mt_mnext": "lataa seuraava hakemisto ja jatka\">๐ seuraava",
- "mt_mstop": "pysรคytรค toisto\">โธ pysรคytรค",
- "mt_cflac": "muunna flac / wav {0}-muotoon\">flac",
- "mt_caac": "muunna aac / m4a {0}-muotoon\">aac",
- "mt_coth": "muunna kaikki muut paitsi mp3 {0}-muotoon\">muut",
- "mt_c2opus": "paras valinta pรถytรคkoneille, kannettaville, androidille\">opus",
- "mt_c2owa": "opus-weba, iOS 17.5:lle ja uudemmille\">owa",
- "mt_c2caf": "opus-caf, iOS 11:lle - 17:lle\">caf",
- "mt_c2mp3": "kรคytรค tรคtรค erittรคin vanhoissa laitteissa\">mp3",
- "mt_c2flac": "paras รครคnenlaatu, mutta isot lataukset\">flac", //m
- "mt_c2wav": "pakkaamaton toisto (vielรค suurempi tiedosto)\">wav", //m
- "mt_c2ok": "hienoa, hyvรค valinta",
- "mt_c2nd": "tuo ei ole suositeltu formaatti laitteellesi, mutta tee miten lystรครคt",
- "mt_c2ng": "laitteesi ei nรคytรค tukevan tรคtรค formaattia, mutta yritetรครคn nyt silti",
- "mt_xowa": "iOS:ssรค on bugeja jotka estรคvรคt taustatoiston tรคllรค formaatilla; kรคytรค caf:ia tai mp3:a sen sijaan",
- "mt_tint": "taustan taso (0-100) liukupalkissa$Ntehden puskuroinnista vรคhemmรคn hรคiritsevรคn",
- "mt_eq": "aktivoi taajuuskorjaimen ja vahvistussรครคtimen;$N$Nvahvistus <code>0</code> = normaali 100% รครคnenvoimakkuus (muokkaamaton)$N$Nleveys <code>1 </code> = normaali stereo (muokkaamaton)$Nleveys <code>0.5</code> = 50% vasen-oikea ristisyรถttรถ$Nleveys <code>0 </code> = mono$N$Nvahvistus <code>-0.8</code> & leveys <code>10</code> = laulun poisto :^)$N$Nequalizerin kรคyttรถรถnotto tekee saumattomista albumeista tรคysin saumattomia, joten jรคtรค se pรครคlle kaikilla arvoilla nollassa (paitsi leveys = 1) jos vรคlitรคt siitรค",
- "mt_drc": "aktivoi dynaamisen alueen kompressorin; ottaa myรถs kรคyttรถรถn taajuuskorjaimen tasapainottamaan spagettia, joten aseta kaikki EQ-kentรคt paitsi 'leveys' nollaan jos et halua sitรค$N$Nalentaa รครคnenvoimakkuutta KYNNYS dB:n ylรคpuolella; jokaisesta SUHDE dB:stรค KYNNYKSEN yli tulee 1 dB ulos, joten oletusarvot kynnys -24 ja suhde 12 tarkoittaa ettei sen pitรคisi koskaan tulla kovempaa kuin -22 dB ja on turvallista nostaa equalizerin vahvistus 0.8:aan, tai jopa 1.8:aan ATK 0:lla ja valtavalla RLS:llรค kuten 90 (toimii vain firefoxissa; RLS on max 1 muissa selaimissa)$N$N(katso wikipedia, he selittรคvรคt sen paljon paremmin)",
-
- "mb_play": "toista",
- "mm_hashplay": "soita tรคmรค รครคnitiedosto?",
- "mm_m3u": "paina Enter/OK Toistaaksesi\npaina ESC/Peruuta Muokataksesi",
- "mp_breq": "tarvitset firefox 82+ tai chrome 73+ tai iOS 15+",
- "mm_bload": "ladataan...",
- "mm_bconv": "muunnetaan muotoon {0}, odota...",
- "mm_opusen": "selaimesi ei voi toistaa aac / m4a -tiedostoja;\ntranskoodaus opukseen on nyt kรคytรถssรค",
- "mm_playerr": "toisto epรคonnistui: ",
- "mm_eabrt": "Toistoyritys peruttiin",
- "mm_enet": "Internet-yhteytesi on epรคvakaa",
- "mm_edec": "Tรคmรค tiedosto on vรคitetysti vioittunut??",
- "mm_esupp": "Selaimesi ei ymmรคrrรค tรคtรค รครคnimuotoa",
- "mm_eunk": "Tuntematon virhe",
- "mm_e404": "Kappaletta ei voitu toistaa; virhe 404: Tiedostoa ei lรถydy.",
- "mm_e403": "Kappaletta ei voitu toistaa; virhe 403: Pรครคsy kielletty.\n\nKokeile painaa F5 pรคivittรครคksesi, ehkรค kirjauduit ulos",
- "mm_e500": "Kappaletta ei voitu toistaa; virhe 500: Tarkista palvelinlokit.",
- "mm_e5xx": "Kappaletta ei voitu toistaa; palvelinvirhe ",
- "mm_nof": "ei lรถydy enempรครค รครคnitiedostoja lรคhistรถltรค",
- "mm_prescan": "Etsitรครคn musiikkia toistettavaksi seuraavaksi...",
- "mm_scank": "Lรถytyi seuraava kappale:",
- "mm_uncache": "vรคlimuisti tyhjennetty; kaikki kappaleet ladataan uudelleen seuraavalla toistolla",
- "mm_hnf": "tuota kappaletta ei enรครค ole olemassa",
-
- "im_hnf": "tuota kuvaa ei enรครค ole olemassa",
-
- "f_empty": 'tรคmรค hakemisto on tyhjรค',
- "f_chide": 'tรคmรค piilottaa sarakkeen ยซ{0}ยป\n\nvoit palauttaa sarakkeet asetuksista',
- "f_bigtxt": "tรคmรค tiedosto on {0} Mt kokoinen -- nรคytetรครคnkรถ silti tekstinรค?",
- "f_bigtxt2": "nรคytetรครคnkรถ vain tiedoston loppu? tรคmรค myรถs mahdollistaa seuraamisen/tailing, nรคyttรคen uudet tekstirivit reaaliaikaisesti",
- "fbd_more": '',
- "fbd_all": '',
- "f_anota": "vain {0} / {1} kohdetta valittiin;\nvalitaksesi koko hakemiston, vieritรค ensin loppuun",
-
- "f_dls": 'nykyisen hakemiston tiedostolinkit on\nvaihdettu latauslinkeiksi',
-
- "f_partial": "Ladataksesi turvallisesti tiedoston joka on parhaillaan latautumassa, klikkaa tiedostoa jolla on sama nimi mutta ilman .PARTIAL pรครคtettรค. Paina PERUUTA tai Escape tehdรคksesi tรคmรคn.\n\nOK / Enter painaminen sivuuttaa tรคmรคn varoituksen ja jatkaa .PARTIAL vรคliaikaistiedoston lataamista, mikรค todennรคkรถisesti antaa sinulle vioittunutta dataa.",
-
- "ft_paste": "liitรค {0} kohdetta$NPikanรคppรคin: ctrl-V",
- "fr_eperm": 'ei voida nimetรค uudelleen:\nsinulla ei ole โmoveโ-oikeutta tรคssรค hakemistossa',
- "fd_eperm": 'ei voida poistaa:\nsinulla ei ole โdeleteโ oikeutta tรคssรค hakemistossa',
- "fc_eperm": 'ei voida leikata:\nsinulla ei ole โmoveโ oikeutta tรคssรค hakemistossa',
- "fp_eperm": 'ei voida liittรครค:\nsinulla ei ole โwriteโ oikeutta tรคssรค hakemistossa',
- "fr_emore": "valitse vรคhintรครคn yksi kohde uudelleennimettรคvรคksi",
- "fd_emore": "valitse vรคhintรครคn yksi kohde poistettavaksi",
- "fc_emore": "valitse vรคhintรครคn yksi kohde leikattavaksi",
- "fcp_emore": "valitse vรคhintรครคn yksi kohde kopioitavaksi leikepรถydรคlle",
-
- "fs_sc": "jaa hakemisto jossa olet",
- "fs_ss": "jaa valitut tiedostot",
- "fs_just1d": "et voi valita useampaa kuin yhtรค,\ntai sekoittaa tiedostoja ja hakemistoja yhdessรค valinnassa",
- "fs_abrt": "โ keskeytรค",
- "fs_rand": "๐ฒ joku.nimi",
- "fs_go": "โ
luo share",
- "fs_name": "nimi",
- "fs_src": "lรคhde",
- "fs_pwd": "salasana",
- "fs_exp": "vanheneminen",
- "fs_tmin": "min",
- "fs_thrs": "tuntia",
- "fs_tdays": "pรคivรครค",
- "fs_never": "ikuinen",
- "fs_pname": "valinnainen linkin nimi; on satunnainen jos tyhjรค",
- "fs_tsrc": "jaettava tiedosto tai hakemisto",
- "fs_ppwd": "valinnainen salasana",
- "fs_w8": "luodaan sharea...",
- "fs_ok": "paina Enter/OK lisรคtรคksesi leikepรถydรคlle\npaina ESC/Peruuta sulkeaksesi",
-
- "frt_dec": "saattaa korjata joitakin rikkinรคisiรค tiedostonimiรค\">url-decode",
- "frt_rst": "palauta muokatut tiedostonimet takaisin alkuperรคisiksi\">โบ palauta",
- "frt_abrt": "keskeytรค ja sulje tรคmรค ikkuna\">โ peruuta",
- "frb_apply": "UUDELLEENNIMEร",
- "fr_adv": "erรค / liitรคnnรคistiedot / kaava uudelleennimeรคminen\">lisรคasetukset",
- "fr_case": "isot ja pienet kirjaimet erottava regex\">kirjainkoko",
- "fr_win": "windows-yhteensopivat nimet; korvaa <>:"\\|?* japanilaisilla leveillรค merkeillรค\">win",
- "fr_slash": "korvaa / merkillรค joka ei aiheuta uusien hakemistoiden luomista\">ei /",
- "fr_re": "regex hakukuvio jota kรคytetรครคn alkuperรคisiin tiedostonimiin; kaappausryhmiin voi viitata alla olevassa muotoilukentรคssรค kuten <code>(1)</code> ja <code>(2)</code> ja niin edelleen",
- "fr_fmt": "foobar2000 innoittama:$N<code>(title)</code> korvataan kappaleen nimellรค,$N<code>[(artist) - ](title)</code> sivuuttaa [tรคmรคn] osan jos artisti on tyhjรค$N<code>$lpad((tn),2,0)</code> ",
- "fr_pdel": "poista",
- "fr_pnew": "tallenna nimellรค",
- "fr_pname": "anna nimi uudelle esiasetuksellesi",
- "fr_aborted": "keskeytetty",
- "fr_lold": "vanha nimi",
- "fr_lnew": "uusi nimi",
- "fr_tags": "valittujen tiedostojen tagit (vain luku, viitetarkoituksiin):",
- "fr_busy": "nimetรครคn uudelleen {0} kohdetta...\n\n{1}",
- "fr_efail": "uudelleennimeรคminen epรคonnistui:\n",
- "fr_nchg": "{0} uusista nimistรค muutettiin win ja/tai ei / vuoksi\n\nJatketaanko nรคillรค muutetuilla uusilla nimillรค?",
-
- "fd_ok": "poisto OK",
- "fd_err": "poisto epรคonnistui:\n",
- "fd_none": "mitรครคn ei poistettu; ehkรค palvelimen asetukset estivรคt (xbd)?",
- "fd_busy": "poistetaan {0} kohdetta...\n\n{1}",
- "fd_warn1": "POISTA nรคmรค {0} kohdetta?",
- "fd_warn2": "Viimeinen varoitus! Haluatko varmasti poistaa?",
-
- "fc_ok": "siirettiin {0} kohdetta leikepรถydรคlle",
- "fc_warn": 'siirettiin {0} kohdetta leikepรถydรคlle\n\nmutta: vain tรคmรค selain-vรคlilehti voi liittรครค ne\n(koska valinta on niin valtavan suuri)',
-
- "fcc_ok": "kopioitiin {0} kohdetta leikepรถydรคlle",
- "fcc_warn": 'kopioitiin {0} kohdetta leikepรถydรคlle\n\nmutta: vain tรคmรค selain-vรคlilehti voi liittรครค ne\n(koska valinta on niin valtavan suuri)',
-
- "fp_apply": "kรคytรค nรคitรค nimiรค",
- "fp_ecut": "leikkaa tai kopioi ensin joitakin tiedostoja / hakemistoja liitettรคvรคksi / siirrettรคvรคksi\n\nhuom: voit leikata / liittรครค eri selain-vรคlilehtien vรคlillรค",
- "fp_ename": "{0} kohdetta ei voida siirtรครค tรคnne koska nimet ovat jo kรคytรถssรค. Anna niille uudet nimet alla jatkaaksesi, tai tyhjennรค nimi ohittaaksesi ne:",
- "fcp_ename": "{0} kohdetta ei voida kopioida tรคnne koska nimet ovat jo kรคytรถssรค. Anna niille uudet nimet alla jatkaaksesi, tai tyhjennรค nimi ohittaaksesi ne:",
- "fp_emore": "tiedostonimien tรถrmรคyksiรค on vielรค korjaamatta",
- "fp_ok": "siirto OK",
- "fcp_ok": "kopiointi OK",
- "fp_busy": "siirretรครคn {0} kohdetta...\n\n{1}",
- "fcp_busy": "kopioidaan {0} kohdetta...\n\n{1}",
- "fp_abrt": "keskeytetรครคn...", //m
- "fp_err": "siirto epรคonnistui:\n",
- "fcp_err": "kopiointi epรคonnistui:\n",
- "fp_confirm": "siirrรค nรคmรค {0} kohdetta tรคnne?",
- "fcp_confirm": "kopioi nรคmรค {0} kohdetta tรคnne?",
- "fp_etab": 'leikepรถydรคn lukeminen toisesta selain-vรคlilehdestรค epรคonnistui',
- "fp_name": "ladataan tiedostoa laitteeltasi. Anna sille nimi:",
- "fp_both_m": 'valitse mitรค liittรครค
Enter = Siirrรค {0} tiedostoa kohteesta ยซ{1}ยป\nESC = Lataa {2} tiedostoa laitteeltasi',
- "fcp_both_m": 'valitse mitรค liittรครค
Enter = Kopioi {0} tiedostoa kohteesta ยซ{1}ยป\nESC = Lataa {2} tiedostoa laitteeltasi',
- "fp_both_b": 'SiirrรคLรคhetรค',
- "fcp_both_b": 'KopioiLรคhetรค',
-
- "mk_noname": "kirjoita nimi vasemmalla olevaan tekstikenttรครคn ennen kuin teet tuon :p",
-
- "tv_load": "Ladataan tekstidokumenttia:\n\n{0}\n\n{1}% ({2} / {3} Mt ladattu)",
- "tv_xe1": "tekstitiedoston lataaminen epรคonnistui:\n\nvirhe ",
- "tv_xe2": "404, tiedostoa ei lรถydy",
- "tv_lst": "tekstitiedostojen lista hakemistossa",
- "tvt_close": "palaa hakemistonรคkymรครคn$NPikanรคppรคin: M (tai Esc)\">โ sulje",
- "tvt_dl": "lataa tรคmรค tiedosto$NPikanรคppรคin: Y\">๐พ lataa",
- "tvt_prev": "nรคytรค edellinen dokumentti$NPikanรคppรคin: i\">โฌ edell",
- "tvt_next": "nรคytรค seuraava dokumentti$NPikanรคppรคin: K\">โฌ seur",
- "tvt_sel": "valitse tiedosto ( leikkausta / kopiointia / poistoa / ... varten )$NPikanรคppรคin: S\">val",
- "tvt_edit": "avaa tiedosto tekstieditorissa$NPikanรคppรคin: E\">โ๏ธ muokkaa",
- "tvt_tail": "seuraa tiedoston muutoksia; nรคytรค uudet rivit reaaliaikaisesti\">๐ก seuraa",
- "tvt_wrap": "rivitys\">โต",
- "tvt_atail": "lukitse vieritys sivun alaosaan\">โ",
- "tvt_ctail": "dekoodaa terminaalin vรคrit (ansi escape koodit)\">๐",
- "tvt_ntail": "vieritysbufferin raja (kuinka monta tavua tekstiรค pidetรครคn ladattuna)",
-
- "m3u_add1": "kappale lisรคtty m3u soittolistaan",
- "m3u_addn": "{0} kappaletta lisรคtty m3u soittolistaan",
- "m3u_clip": "m3u soittolista nyt kopioitu leikepรถydรคlle\n\nsinun tulisi luoda uusi tekstitiedosto nimeltรค jotain.m3u ja liittรครค soittolista siihen dokumenttiin; tรคmรค tekee siitรค soitettavan",
-
- "gt_vau": "รคlรค nรคytรค videoita, toista vain รครคni\">๐ง",
- "gt_msel": "aktivoi tiedostonvalintatila; ctrl-klikkaa ohittaaksesi valitsemisen vรคliaikaisesti$N$N<em>tuplaklikkaa tiedostoa / hakemistoa avataksesi sen</em>$N$NPikanรคppรคin: S\">valitsin",
- "gt_crop": "rajaa pienoiskuvat keskeltรค\">rajaa",
- "gt_3x": "korkearesoluutioiset pienoiskuvat\">3x",
- "gt_zoom": "zoomaa",
- "gt_chop": "pilko",
- "gt_sort": "jรคrjestรค",
- "gt_name": "nimi",
- "gt_sz": "koko",
- "gt_ts": "pรคivรคys",
- "gt_ext": "tyyppi",
- "gt_c1": "rajaa tiedostonimiรค enemmรคn (nรคytรค vรคhemmรคn)",
- "gt_c2": "rajaa tiedostonimiรค vรคhemmรคn (nรคytรค enemmรคn)",
-
- "sm_w8": "haetaan...",
- "sm_prev": "alla olevat hakutulokset ovat edellisestรค hausta:\n ",
- "sl_close": "sulje hakutulokset",
- "sl_hits": "nรคytetรครคn {0} osumaa",
- "sl_moar": "lataa lisรครค",
-
- "s_sz": "koko",
- "s_dt": "pรคivรคys",
- "s_rd": "polku",
- "s_fn": "nimi",
- "s_ta": "tagit",
- "s_ua": "ylรถs@",
- "s_ad": "edist.",
- "s_s1": "minimi Mt",
- "s_s2": "maksimi Mt",
- "s_d1": "min. iso8601",
- "s_d2": "maks. iso8601",
- "s_u1": "ladattu jรคlkeen",
- "s_u2": "ja/tai ennen",
- "s_r1": "polku sisรคltรครค (vรคlilyรถnnillรค erotetuttuina)",
- "s_f1": "nimi sisรคltรครค (negatoi kรคyttรคmรคllรค -nope)",
- "s_t1": "tagit sisรคltรครค (^=alku, loppu=$)",
- "s_a1": "tietyt metadatan ominaisuudet",
-
- "md_eshow": "ei voida renderoida ",
- "md_off": "[๐readme] poistettu kรคytรถstรค [โ๏ธ] -- dokumentti piilotettu",
-
- "badreply": "Palvelimen vastauksen jรคsentรคminen epรคonnistui.",
-
- "xhr403": "403: Pรครคsy kielletty\n\nkokeile painaa F5, ehkรค sinut kirjattiin ulos",
- "xhr0": "tuntematon (todennรคkรถisesti yhteys palvelimeen katosi, tai palvelin on pois pรครคltรค)",
- "cf_ok": "sori siitรค -- DD" + wah + "oS suojaus aktivoitui\n\nasioiden pitรคisi jatkua noin 30 sekunnissa\n\njos mitรครคn ei tapahdu, paina F5 ladataksesi sivun uudelleen",
- "tl_xe1": "alihakemistojen listaaminen epรคonnistui:\n\nvirhe ",
- "tl_xe2": "404: hakemistoa ei lรถydy",
- "fl_xe1": "hakemiston tiedostojen listaaminen epรคonnistui:\n\nvirhe ",
- "fl_xe2": "404: hakemistoa ei lรถydy",
- "fd_xe1": "alihakemiston luominen epรคonnistui:\n\nvirhe ",
- "fd_xe2": "404: Ylรคhakemistoa ei lรถydy",
- "fsm_xe1": "viestin lรคhettรคminen epรคonnistui:\n\nvirhe ",
- "fsm_xe2": "404: Ylรคhakemistoa ei lรถydy",
- "fu_xe1": "unpost-listan lataaminen palvelimelta epรคonnistui:\n\nvirhe ",
- "fu_xe2": "404: Tiedostoa ei lรถydy??",
-
- "fz_tar": "pakkaamaton gnu-tar tiedosto (linux / mac)",
- "fz_pax": "pakkaamaton pax-formaatin tar (hitaampi)",
- "fz_targz": "gnu-tar gzip tason 3 pakkauksella$N$Nyleensรค hyvin hidas, $Nkรคytรค pakkamatonta tar:ia tรคmรคn sijasta",
- "fz_tarxz": "gnu-tar xz tason 1 pakkauksella$N$Nyleensรค hyvin hidas, $Nkรคytรค pakkamatonta tar:ia tรคmรคn sijasta",
- "fz_zip8": "zip utf8-tiedostonimillรค (suattaapi olla epรคvakaa windows 7:ssa ja vanhemmissa)",
- "fz_zipd": "zip perinteisillรค cp437 tiedostonimillรค esihistoriallisille ohjelmistoille",
- "fz_zipc": "cp437, jossa crc32 laskettu aikaisin,$NMS-DOS PKZIP v2.04g:lle (lokakuu 1993)$N(kestรครค kauemmin kรคsitellรค ennen latauksen alkua)",
-
- "un_m1": "voit poistaa tuoreet tai keskeyttรครค keskenerรคiset latauksesi alta",
- "un_upd": "pรคivitรค",
- "un_m4": "tai jakaa alla nรคkyvรคt tiedostot:",
- "un_ulist": "nรคytรค",
- "un_ucopy": "kopioi",
- "un_flt": "valinnainen suodatin: URL:n tรคytyy sisรคltรครค",
- "un_fclr": "tyhjennรค suodatin",
- "un_derr": 'unpost-poisto epรคonnistui:\n',
- "un_f5": 'jotain hajosi, kokeile pรคivitystรค tai paina F5',
- "un_uf5": "pahoittelen mutta sinun tรคytyy pรคivittรครค sivu (esimerkiksi painamalla F5 tai CTRL-R) ennen kuin tรคmรค lataus voidaan keskeyttรครค",
- "un_nou": 'huom! palvelin liian kiireinen nรคyttรครคkseen keskenerรคiset lataukset; klikkaa "pรคivitรค" linkkiรค hetken kuluttua',
- "un_noc": 'huom! tรคysin ladattujen tiedostojen unpost ei ole kรคytรถssรค/sallittu palvelimen asetuksissa',
- "un_max": "nรคytetรครคn ensimmรคiset 2000 tiedostoa (kรคytรค suodatinta)",
- "un_avail": "{0} viimeaikaista latausta voidaan poistaa
{1} keskenerรคistรค voidaan keskeyttรครค",
- "un_m2": "jรคrjestetty latausajan mukaan; viimeisimmรคt ensin:",
- "un_no1": "hupsis! yksikรครคn lataus ei ole riittรคvรคn tuore",
- "un_no2": "hupsis! yksikรครคn tuota suodatinta vastaava lataus ei ole riittรคvรคn tuore",
- "un_next": "poista seuraavat {0} tiedostoa alla",
- "un_abrt": "keskeytรค",
- "un_del": "poista",
- "un_m3": "ladataan viimeaikana lรคhettรคmiรคsi tiedostoja...",
- "un_busy": "poistetaan {0} tiedostoa...",
- "un_clip": "{0} linkkiรค kopioitu leikepรถydรคlle",
-
- "u_https1": "sinun kannattaisi",
- "u_https2": "vaihtaa https:รครคn",
- "u_https3": "paremman suorituskyvyn vuoksi",
- "u_ancient": 'selaimesi on ns. vaikuttavan ikivanha -- kannattais varmaan kรคyttรครค bup:ia tรคn sijaan',
- "u_nowork": "tarvitaan firefox 53+ tai chrome 57+ tai iOS 11+",
- "tail_2old": "tarvitaan firefox 105+ tai chrome 71+ tai iOS 14.5+",
- "u_nodrop": 'selaimesi on liian vanha vedรค-ja-pudota lataamiseen',
- "u_notdir": "tuo ei ole hakemisto!\n\nselaimesi on liian vanha,\nkokeile sen sijaan 'vedรค-pudota'-tekniikkaa.",
- "u_uri": "'vedรค-pudottaaksesi' kuvia muista selainikkunoista,\npudota se isoon latausnapppiin",
- "u_enpot": 'vaihda peruna UI:hin (voi parantaa latausnopeutta)',
- "u_depot": 'vaihda ylelliseen UI:hin (voi vรคhentรครค latausnopeutta)',
- "u_gotpot": 'vaihdetaan peruna UI:hin paremman latausnopeuden vuoksi,\n\ntee miten lystรครคt, jos ei kelpaa!',
- "u_pott": "tiedostot: {0} valmis, {1} epรคonnistui, {2} kiireinen, {3} jonossa
",
- "u_ever": "tรคmรค on peruslatain; up2k tarvitsee vรคhintรครคn
chrome 21 // firefox 13 // edge 12 // opera 12 // safari 5.1",
- "u_su2k": 'peruslatain; up2k on parempi',
- "u_uput": 'optimoi latausnopeus (รคlรค laske tarkistussummia)',
- "u_ewrite": 'sinulla ei ole move-oikeutta tรคhรคn hakemistoon',
- "u_eread": 'sinulla ei ole read-oikeutta tรคhรคn hakemistoon',
- "u_enoi": 'tiedostohaku ei ole kรคytรถssรค palvelimen asetuksissa',
- "u_enoow": "ylikirjoitus ei toimi tรครคllรค; tarvitaan โDeleteโ-oikeus",
- "u_badf": 'Nรคmรค {0} tiedostoa ({1} yhteensรค) ohitettiin, mahdollisesti tiedostojรคrjestelmรคn oikeuksien vuoksi:\n\n',
- "u_blankf": 'Nรคmรค {0} tiedostoa ({1} yhteensรค) ovat tyhjiรค; ladataanko ne silti?\n\n',
- "u_applef": 'Nรคmรค {0} tiedostoa ({1} yhteensรค) ovat todennรคkรถisesti ei-toivottuja;\nPaina OK/Enter OHITTAAKSESI seuraavat tiedostot,\nPaina Peruuta/ESC jos ET halua sulkea pois, ja LATAA nekin:\n\n',
- "u_just1": '\nEhkรค toimii paremmin jos valitset vain yhden tiedoston',
- "u_ff_many": "jos kรคytรคt Linux / MacOS / Android, niin tรคmรค mรครคrรค tiedostoja saattaa kaataa Firefoxin!\njos niin kรคy, kokeile uudelleen (tai kรคytรค Chromea).",
- "u_up_life": "Tรคmรค lataus poistetaan palvelimelta\n{0} sen valmistumisen jรคlkeen",
- "u_asku": 'lataa nรคmรค {0} tiedostoa kohteeseen {1}',
- "u_unpt": "voit perua / poistaa tรคmรคn latauksen kรคyttรคmรคllรค vasemmalla ylhรครคllรค olevaa ๐งฏ",
- "u_bigtab": 'nรคytetรครคn {0} tiedostoa\n\ntรคmรค voi kaataa selaimesi, oletko varma?',
- "u_scan": 'Skannataan tiedostoja...',
- "u_dirstuck": 'hakemistoiteraattori jumittui yrittรคessรครคn kรคyttรครค seuraavia {0} kohdetta; ohitetaan:',
- "u_etadone": 'Valmis ({0}, {1} tiedostoa)',
- "u_etaprep": '(valmistellaan latausta)',
- "u_hashdone": 'hajautus valmis',
- "u_hashing": 'hajautus',
- "u_hs": 'kรคtellรครคn...',
- "u_started": "tiedostoja ladataan nyt; tsekkaa [๐]",
- "u_dupdefer": "duplikaatti; kรคsitellรครคn kaikkien muiden tiedostojen jรคlkeen",
- "u_actx": "klikkaa tรคtรค tekstiรค estรครคksesi suorituskyvyn
heikkenemisen vaihtaessasi muihin ikkunoihin/vรคlilehtiin",
- "u_fixed": "OK! Hommat hoidossa ๐",
- "u_cuerr": "chunk {0} / {1} lataus epรคonnistui;\ntuskin haittaa, jatketaan\n\ntiedosto: {2}",
- "u_cuerr2": "palvelin hylkรคsi latauksen (chunk {0} / {1});\nyritetรครคn myรถhemmin uudelleen\n\ntiedosto: {2}\n\nvirhe ",
- "u_ehstmp": "yritetรครคn uudelleen; katso oikealta alhaalta",
- "u_ehsfin": "palvelin hylkรคsi pyynnรถn viimeistellรค lataus; yritetรครคn uudelleen...",
- "u_ehssrch": "palvelin hylkรคsi pyynnรถn suorittaa haku; yritetรครคn uudelleen...",
- "u_ehsinit": "palvelin hylkรคsi pyynnรถn aloittaa lataus; yritetรครคn uudelleen...",
- "u_eneths": "verkkovirhe latauksen kรคttelyssรค; yritetรครคn uudelleen...",
- "u_enethd": "verkkovirhe kohteen olemassaolon testauksessa; yritetรครคn uudelleen...",
- "u_cbusy": "odotetaan palvelimen luottavan meihin taas verkko-ongelman jรคlkeen...",
- "u_ehsdf": "palvelimen levytila loppui!\n\nyritetรครคn jatkuvasti, siinรค tapauksessa ettรค joku\nvapauttaa tarpeeksi tilaa jatkamiseen",
- "u_emtleak1": "nรคyttรครค siltรค ettรค selaimessasi saattaa olla muistivuoto;\nole hyvรค ja",
- "u_emtleak2": ' vaihda https:รครคn (suositeltu) tai ',
- "u_emtleak3": ' ',
- "u_emtleakc": 'kokeile seuraavaa:\n- paina
F5 pรคivittรครคksesi sivun - sitten poista kรคytรถstรค
mt nappi โ๏ธ asetuksissa - ja kokeile latausta uudelleen
Lataukset ovat hieman hitaampia, minkรคs teet.\nSori siitรค!\n\nPS: chrome v107 sisรคltรครค bugfixin tรคtรค varten',
- "u_emtleakf": 'kokeile seuraavaa:\n- paina
F5 pรคivittรครคksesi sivun - sitten ota kรคyttรถรถn
๐ฅ (peruna) lataus UI:ssa - ja kokeile latausta uudelleen
\nPS: firefox toivottavasti saa kerรคttyรค itsensรค kasaan jossain vaiheessa',
- "u_s404": "ei lรถydy palvelimelta",
- "u_expl": "selitรค",
- "u_maxconn": "useimmat selaimet rajoittavat tรคmรคn 6:een, mutta firefox antaa nostaa sitรค connections-per-server asetuksella about:config:issa",
- "u_tu": 'VAROITUS: turbo pรครคllรค, asiakasohjelma ei vรคlttรคmรคttรค huomaa jatkaa keskenerรคisiรค latauksia; katso turbo-napin vihje
',
- "u_ts": 'VAROITUS: turbo pรครคllรค, hakutulokset voivat olla vรครคriรค; katso turbo-napin vihje
',
- "u_turbo_c": "turbo on poistettu kรคytรถstรค palvelimen asetuksissa",
- "u_turbo_g": "poistetaan turbo kรคytรถstรค koska sinulla ei ole\nhakemistolistausoikeuksia tรคssรค asemassa",
- "u_life_cfg": 'automaattinen poisto min kuluttua (tai tuntia)',
- "u_life_est": 'lataus poistetaan ---',
- "u_life_max": 'tรคmรค hakemisto pakottaa\nmaksimi elinajan {0}',
- "u_unp_ok": 'unpost on sallittu {0}',
- "u_unp_ng": 'unpost EI ole sallittu',
- "ue_ro": 'sinulla on vain read-oikeus tรคhรคn hakemistoon\n\n',
- "ue_nl": 'et ole tรคllรค hetkellรค kirjautunut sisรครคn',
- "ue_la": 'olet tรคllรค hetkellรค kirjautunut sisรครคn nimellรค "{0}"',
- "ue_sr": 'olet tรคllรค hetkellรค tiedostohaku-tilassa\n\nvaihda lataus-tilaan klikkaamalla suurennuslasia ๐ (suuren HAKU napin vieressรค), ja yritรค latausta uudelleen\n\npahoittelen',
- "ue_ta": 'yritรค latausta uudelleen, sen pitรคisi toimia nyt',
- "ue_ab": "tรคtรค tiedostoa ladataan jo toiseen hakemistoon, ja se lataus tรคytyy suorittaa loppuun ennen kuin tiedostoa voidaan ladata muualle.\n\nVoit keskeyttรครค ja unohtaa alkuperรคisen latauksen kรคyttรคmรคllรค vasemmalla ylhรครคllรค olevaa ๐งฏ",
- "ur_1uo": "OK: Tiedosto ladattu onnistuneesti",
- "ur_auo": "OK: Kaikki {0} tiedostoa ladattu onnistuneesti",
- "ur_1so": "OK: Tiedosto lรถytyi palvelimelta",
- "ur_aso": "OK: Kaikki {0} tiedostoa lรถytyi palvelimelta",
- "ur_1un": "Lataus epรคonnistui, pahoittelen",
- "ur_aun": "Kaikki {0} latausta epรคonnistui, pahoittelen",
- "ur_1sn": "Tiedostoa EI lรถytynyt palvelimelta",
- "ur_asn": "{0} tiedostoa EI lรถytynyt palvelimelta",
- "ur_um": "Valmis;\n{0} latausta OK,\n{1} latausta epรคonnistui, pahoittelen",
- "ur_sm": "Valmis;\n{0} tiedostoa lรถytyi palvelimelta,\n{1} tiedostoa EI lรถytynyt palvelimelta",
-
- "lang_set": "ladataanko sivu uudestaan kielen vaihtamiseksi?",
- },
- "fra": {
- "tt": "franรงais",
-
- "cols": {
- "c": "bouton d'action",
- "dur": "durรฉe",
- "q": "qualitรฉ / dรฉbit binaire",
- "Ac": "codec audio",
- "Vc": "codec vidรฉo",
- "Fmt": "format / conteneur",
- "Ahash": "somme de contrรดle audio",
- "Vhash": "somme de contrรดle vidรฉo",
- "Res": "rรฉsolution",
- "T": "type de fichier",
- "aq": "qualitรฉ audio / dรฉbit binaire",
- "vq": "qualitรฉ vidรฉo / dรฉbit binaire",
- "pixfmt": "sous-รฉchantillonnage / structure de pixel",
- "resw": "rรฉsolution horizontale",
- "resh": "rรฉsolution verticale",
- "chs": "canaux audio",
- "hz": "frรฉquence"
- },
-
- "hks": [
- [
- "misc",
- ["รchap", "ferme divers menus"],
-
- "gestionaire de fichiers",
- ["G", "activer vue en liste / vue en grille"],
- ["T", "activer les miniatures / icรดnes"],
- ["โง A/D", "taille des miniatures"],
- ["ctrl-K", "suprimer la sรฉlection"],
- ["ctrl-X", "couper la sรฉlection au presse-papier"],
- ["ctrl-C", "copier la sรฉlection au presse-papier"],
- ["ctrl-V", "coller (dรฉplacer/copier) ici"],
- ["Y", "tรฉlรฉcharger la sรฉlection"],
- ["F2", "renomer la sรฉlection"],
-
- "file-list-sel",
- ["Espace", "activer la sรฉlection de fichiers"],
- ["โ/โ", "dรฉplacer le selecteur"],
- ["ctrl โ/โ", "dรฉplacer le curseur et la zone d'affichage"],
- ["โง โ/โ", "sรฉlectioner le fichier prรฉcรฉdent/suivant"],
- ["ctrl-A", "sรฉlectionner tout les fichiers / dossiers"],
- ], [
- "navigation",
- ["B", "basculer la vue en fil d'Ariane / panneau de navigation"],
- ["I/K", "dossier prรฉcรฉdent/suivant"],
- ["M", "dossier parent (ou rรฉduire le dossier actuel)"],
- ["V", "activer les dossiers / fichiers texte dans le volet de navigation"],
- ["A/D", "taille du volet de navigation"],
- ], [
- "lecteur-audio",
- ["J/L", "chanson prรฉcรฉdente/suivante"],
- ["U/O", "sauter 10s en arriรจre/avant"],
- ["0..9", "sauter ร 0%..90%"],
- ["P", "lecture/pause (dรฉmarre รฉgalement la lecture)"],
- ["S", "sรฉlectionner la chanson en cours"],
- ["Y", "tรฉlรฉcharger le morceau"],
- ], [
- "visionneuse d'image",
- ["J/L, โ/โ", "image prรฉcรฉdente/suivante"],
- ["Dรฉbut/Fin, โญฆ/Fin", "premiรจre/derniรจre image"],
- ["F", "plein รฉcran"],
- ["R", "rotation horaire"],
- ["โง R", "rotation antihoraire"],
- ["S", "sรฉlectionner l'image"],
- ["Y", "tรฉlรฉcharger l'image"],
- ], [
- "lecteur vidรฉo",
- ["U/O", "sauter 10s en arriรจre/avant"],
- ["P/K/Espace", "lecture/pause"],
- ["C", "continuer de lire la suivante"],
- ["V", "lire en boucle"],
- ["M", "couper le son"],
- ["[ and ]", "dรฉfinir l'intervalle de boucle"],
- ], [
- "visionneuse de texte",
- ["I/K", "fichier prรฉcรฉdent/suivant"],
- ["M", "fermer le fichier texte"],
- ["E", "modifier le fichier texte"],
- ["S", "sรฉlectioner le fichier (pour le couper/copier/renommer)"],
- ]
- ],
-
- "m_ok": "OK",
- "m_ng": "Annuler",
-
- "enable": "Activer",
- "danger": "DANGER",
- "clipped": "copiรฉ dans le presse-papier",
-
- "ht_s1": "seconde",
- "ht_s2": "secondes",
- "ht_m1": "minute",
- "ht_m2": "minutes",
- "ht_h1": "heure",
- "ht_h2": "heures",
- "ht_d1": "jour",
- "ht_d2": "jours",
- "ht_and": " et ",
-
- "goh": "panneau-de-commande",
- "gop": 'รฉlรฉment "frรจre" prรฉcรฉdent">prรฉcรฉdent',
- "gou": 'dossier parent">haut',
- "gon": 'dossier suivant">suivant',
- "logout": "Dรฉconnexion ",
- "login": "Se connecter", //m
- "access": " accรจs",
- "ot_close": "fermer le sous-menu",
- "ot_search": "chercher des fichiers par leurs attributs, chemin / nom, tag musicaux, ou nimporte quelle combinaison de ces options$N$N<code>foo bar</code> = doit contenir ร la fois ยซfooยป et ยซbarยป,$N<code>foo -bar</code> = doit contenir ยซfooยป mais pas ยซbarยป,$N<code>^yana .opus$</code> = commence par ยซyanaยป et est un fichier ยซopusยป$N<code>"try unite"</code> = contient exactement ยซtry uniteยป$N$Nle format de date est iso-8601, comme$N<code>2009-12-31</code> ou <code>2020-09-12 23:30:00</code>",
- "ot_unpost": "unpost: supprimer vos tรฉlรฉchargements rรฉcents, ou annuler ceux en cours",
- "ot_bup": "bup: tรฉlรฉverseur de base, prend mรชme en charge netscape 4.0",
- "ot_mkdir": "mkdir: crรฉer un nouveau rรฉpertoire",
- "ot_md": "new-md: crรฉer un nouveau document markdown",
- "ot_msg": "msg: envoyer un message au journal du serveur",
- "ot_mp": "options du lecteur multimedia",
- "ot_cfg": "options de configuration",
- "ot_u2i": 'up2k : tรฉlรฉverser des fichiers (si vous avez un accรจs en รฉcriture) ou basculer en mode recherche pour voir s\'ils existent quelque part sur le serveur$N$Nles tรฉlรฉversements peuvent รชtre repris, ils sont multithreadรฉ, et les horodatages des fichiers sont prรฉservรฉs, mais cela utilise plus de CPU que [๐] (le tรฉlรฉverseur de base)
pendant les tรฉlรฉversements, cette icรดne devient un indicateur de progression!',
- "ot_u2w": 'up2k : tรฉlรฉverser des fichiers avec prise en charge de la reprise (fermez votre navigateur et dรฉposez les mรชmes fichiers plus tard)$N$multithreadรฉ, et les horodatages des fichiers sont prรฉservรฉs, mais cela utilise plus de CPU que [๐] (le tรฉlรฉverseur de base)
pendant les tรฉlรฉversements, cette icรดne devient un indicateur de progression!',
- "ot_noie": 'Utilisez Chrome / Firefox / Edge',
-
- "ab_mkdir": "crรฉer un nouveau rรฉpertoire",
- "ab_mkdoc": "faire un nouveau document markdown",
- "ab_msg": "envoyer un message au journal du serveur",
-
- "ay_path": "passer aux dossiers",
- "ay_files": "passer aux fichiers",
-
- "wt_ren": "renommer les รฉlรฉments sรฉlectionnรฉs$NHotkey: F2",
- "wt_del": "supprimer les รฉlรฉments sรฉlectionnรฉs$NHotkey: ctrl-K",
- "wt_cut": "couper les รฉlรฉments sรฉlectionnรฉs <small>(puis coller ailleurs)</small>$NHotkey: ctrl-X",
- "wt_cpy": "copier les รฉlรฉments sรฉlectionnรฉs dans le presse-papiers$N(pour les coller ailleurs)$NHotkey: ctrl-C",
- "wt_pst": "coller une sรฉlection prรฉcรฉdemment coupรฉe / copiรฉe$NHotkey: ctrl-V",
- "wt_selall": "sรฉlectionner tous les fichiers$NHotkey: ctrl-A (lorsque le fichier est sรฉlectionnรฉ)",
- "wt_selinv": "inverser la sรฉlection",
- "wt_zip1": "tรฉlรฉcharger ce dossier en tant qu'archive",
- "wt_selzip": "tรฉlรฉcharger la sรฉlection en tant qu'archive",
- "wt_seldl": "tรฉlรฉcharger la sรฉlection en tant que fichiers sรฉparรฉs$NHotkey: Y",
- "wt_npirc": "copier les informations de la musique au format irc",
- "wt_nptxt": "copier les informations de la musique en texte brut",
- "wt_m3ua": "ajouter ร la playlist m3u (cliquez sur ๐ปcopier plus tard)",
- "wt_m3uc": "copier la playlist m3u dans le presse-papiers",
- "wt_grid": "basculer entre la vue en grille / liste$NHotkey: G",
- "wt_prev": "musique prรฉcรฉdente$NHotkey: J",
- "wt_play": "lecture / pause$NHotkey: P",
- "wt_next": "musique suivante$NHotkey: L",
-
- "ul_par": "tรฉlรฉversements parallรจles:",
- "ut_rand": "attribution de noms de fichiers alรฉatoires",
- "ut_u2ts": "copier l'horodatage de derniรจre modification$Nde votre systรจme de fichiers vers le serveur\">๐
",
- "ut_ow": "รฉcraser les fichiers existants sur le serveur?$N๐ก๏ธ: jamais (gรฉnรฉrera un nouveau nom de fichier ร la place)$N๐: รฉcraser si le fichier sur le serveur est plus ancien que le vรดtre$Nโป๏ธ: toujours รฉcraser si les fichiers sont diffรฉrents",
- "ut_mt": "continuer ร calculer la somme de contrรดle d'autres fichiers pendant le tรฉlรฉversement$N$Npeut-รชtre dรฉsactiver si votre CPU ou HDD est la cause de perte de performances",
- "ut_ask": 'demander confirmation avant le dรฉbut du tรฉlรฉversement">๐ญ',
- "ut_pot": "amรฉliorer la vitesse de tรฉlรฉversement sur les appareils lents$Nen simplifiant l'interface utilisateur",
- "ut_srch": "ne pas rรฉellement tรฉlรฉverser, mais vรฉrifier si les fichiers existent dรฉjร $N sur le serveur (scannera tous les dossiers que vous pouvez lire)",
- "ut_par": "mettre en pause les tรฉlรฉversements en le rรฉglant sur 0$N$Naugmenter si votre connexion est lente / ร forte latence$N$Nle garder ร 1 sur le LAN ou si le HDD du serveur est un goulot d'รฉtranglement",
- "ul_btn": "dรฉposer des fichiers / dossiers
ici (ou cliquez sur moi)",
- "ul_btnu": "T ร L ร V E R S E R",
- "ul_btns": "C H E R C H E R",
-
- "ul_hash": "somme de contrรดle",
- "ul_send": "envoyer",
- "ul_done": "terminรฉ",
- "ul_idle1": "aucun tรฉlรฉversement n'est encore dans la file d'attente",
- "ut_etah": "moyenne <em>hashing</em> vitesse, et temps estimรฉ jusqu'ร la fin",
- "ut_etau": "moyenne <em>upload</em> vitesse et temps estimรฉ jusqu'ร la fin",
- "ut_etat": "moyenne <em>total</em> vitesse et temps estimรฉ jusqu'ร la fin",
-
- "uct_ok": "terminรฉ avec succรจs",
- "uct_ng": "non rรฉussi : รฉchouรฉ / rejetรฉ / non trouvรฉ",
- "uct_done": "terminรฉs et รฉchouรฉ combinรฉs",
- "uct_bz": "hachage ou tรฉlรฉversement",
- "uct_q": "inactif, en attente",
-
- "utl_name": "nom de fichier",
- "utl_ulist": "liste",
- "utl_ucopy": "copie",
- "utl_links": "liens",
- "utl_stat": "รฉtat",
- "utl_prog": "progrรจs",
-
- // keep short:
- "utl_404": "404",
- "utl_err": "ERREUR",
- "utl_oserr": "OS-ERREUR",
- "utl_found": "trouvรฉ",
- "utl_defer": "รฉtat",
- "utl_yolo": "YOLO",
- "utl_done": "terminรฉ",
-
- "ul_flagblk": "les fichiers ont รฉtรฉ ajoutรฉs ร la file d'attente
cependant, il y a un processus up2k actif dans un autre onglet du navigateur,
en attente qu'il finisse d'abord",
- "ul_btnlk": "la configuration du serveur a verrouillรฉ cette options dans cet รฉtat",
-
- "udt_up": "Tรฉlรฉverser",
- "udt_srch": "Chercher",
- "udt_drop": "dรฉposer ici",
-
- "u_nav_m": 'aight, ques-que tu ร ?
Enter = Fichiers (un ou plus)\nESC = Un dossier (sous-dossiers inclus)',
- "u_nav_b": 'FichiersUn dossier',
-
- "cl_opts": "options",
- "cl_themes": "thรจme",
- "cl_langs": "langue",
- "cl_ziptype": "tรฉlรฉchargement de dossier",
- "cl_uopts": "up2k",
- "cl_favico": "favicon",
- "cl_bigdir": "gros dossiers",
- "cl_hsort": "#sort",
- "cl_keytype": "notation des touches",
- "cl_hiddenc": "colonnes masquรฉes",
- "cl_hidec": "masquer",
- "cl_reset": "rรฉinitialiser",
- "cl_hpick": "cliquez sur les en-tรชtes de colonnes pour les masquer dans le tableau ci-dessous",
- "cl_hcancel": "masquage des colonnes annulรฉ",
-
- "ct_grid": '็ฐ grille',
- "ct_ttips": 'โ โก โ">โน๏ธ infobulles',
- "ct_thumb": 'vue en grille, activer les icรดnes ou les miniatures$NHotkey: T">๐ผ๏ธ minia',
- "ct_csel": 'utiliser CTRL et MAJ pour selectioner des fichiers en vue en grille">sel',
- "ct_ihop": 'quand le visionneuse d\'image est fermรฉ, faire defiller vers le bas jusqu\'au dernier fichier">gโฎฏ',
- "ct_dots": 'voir les fichiers cachรฉ (si le serveur le permet)">dotfiles',
- "ct_qdel": 'ne demander qu\'une confirmation lors de la suppression de fichiers>qdel',
- "ct_dir1st": 'trier les dossiers avant les fichiers">๐ first',
- "ct_nsort": 'triage par numรฉrotation (pour les nom de fichiers qui sont numรฉrotรฉs)">nsort',
- "ct_utc": 'voir tout les horodatage en format UTC">UTC',
- "ct_readme": 'voir le fichier README.md dans le listage des dossiers">๐ readme',
- "ct_idxh": 'voir une version html (index.html) au-lieu du listage des dossiers normal">htm',
- "ct_sbars": 'montrer la barre de defilement">โ',
-
- "cut_umod": "si un fichier existe dรฉjร sur le server, mettre ร jour l'horodatage de derniรจre modification du serveur pour qu'il corresponde ร votre fichier local (nรฉcessite des autorisations d'รฉcriture et de suppression)\">re๐
",
-
- "cut_turbo": "le bouton yolo, vous ne voulez probablement PAS activer ceci:$N$Nutilisez ceci si vous tรฉlรฉchargez une grande quantitรฉ de fichiers et que vous devez redรฉmarrer pour une raison quelconque, et que vous souhaitez continuer le tรฉlรฉchargement dรจs que possible$N$Ncela remplace la vรฉrification de hachage par une simple "est-ce que cela a la mรชme taille de fichier sur le serveur?" donc si le contenu du fichier est diffรฉrent, il ne sera PAS tรฉlรฉchargรฉ$N$Nvous devriez dรฉsactiver cela lorsque le tรฉlรฉchargement est terminรฉ, puis "tรฉlรฉcharger" les mรชmes fichiers ร nouveau pour laisser le client les vรฉrifier\">turbo",
-
- "cut_datechk": "n'a aucun effet ร moins que le bouton turbo ne soit activรฉ$N$Nrรฉduit le facteur yolo d'un tout petit peu ; vรฉrifie si les horodatages des fichiers sur le serveur correspondent aux vรดtres$N$Ndevrait thรฉoriquement attraper la plupart des tรฉlรฉchargements inachevรฉs / corrompus, mais n'est pas un substitut ร un passage de vรฉrification avec turbo dรฉsactivรฉ par la suite\">date-chk",
-
- "cut_u2sz": "taille (en MiB) de chaque morceau de tรฉlรฉversement; des grosse valeurs vont mieux passer si la distance entre le serveur et vous est trรฉs grande. Si vous avez une connection trรฉs instable, essayer de plus petites valeurs",
-
- "cut_flag": "s'assurer qu'un seul onglet est entrain de mettre un fichier en ligne a la fois $N -- les autres onglets doivent avoir cette option activรฉ aussi $N -- affecte seulement les onglets qui sont sur le mรชme domaine",
-
- "cut_az": "mettre en ligne les fichiers dans l'ordre alphabรฉtique, plutรดt que le plus petit fichier en premier$N$Nl'ordre alphabรฉtique peut rendre la lecture plus douce sur pour les yeux si quelque chose s'est mal passรฉ sur le serveur, mais cela rend le tรฉlรฉversement lรฉgรจrement plus lent sur fibre / LAN",
-
- "cut_nag": "recevoir une notification via l'OS quand un tรฉlรฉversement finit$N(seulement si le navigateur ou l'onglet n'est pas actif)",
- "cut_sfx": "alerte audible quand le tรฉlรฉversement finit$N(seulement si le navigateur ou l'onglet n'est pas actif)",
-
- "cut_mt": "utiliser le calcul de somme de contrรดle multithreadรฉ pour accelerer le processus$N$Ncela utilise des web-workers et nรฉcessite$Nplus de RAM (jusqu'ร 512 MiB supplรฉmentaires)$N$NCela rend https 30% plus rapide, http 4.5x plus rapide\">mt",
-
- "cut_wasm": "utiliser wasm au lieu du hachage intรฉgrรฉ du navigateur; amรฉliore la vitesse sur les navigateurs basรฉs sur chrome mais augmente la charge CPU, et de nombreuses anciennes versions de chrome ont des bugs qui font que le navigateur consomme toute la RAM et plante si cela est activรฉ\">wasm",
-
- "cft_text": "text favicon (laisser vide et rafraรฎchir pour dรฉsactiver)",
- "cft_fg": "couleur de premier plan",
- "cft_bg": "couleur d'arriรจre-plan",
-
- "cdt_lim": "nombre maximum de fichiers ร afficher dans un dossier",
- "cdt_ask": "lorsque vous faites dรฉfiler vers le bas,$Nau lieu de charger plus de fichiers,$Ndemander quoi faire",
- "cdt_hsort": "combien de rรจgles de tri (<code>,sorthref</code>) ร inclure dans les media-URLs. Dรฉfinir cette valeur ร 0 ignorera รฉgalement les rรจgles de tri incluses dans les liens mรฉdia lorsque vous cliquez dessus.",
-
- "tt_entree": "afficher le panneau de navigation (arborescence des dossiers)$NHotkey: B",
- "tt_detree": "afficher le fil dโAriane$NHotkey: B",
- "tt_visdir": "faire dรฉfiler jusqu'au dossier sรฉlectionnรฉ",
- "tt_ftree": "basculer l'arborescence des dossiers / fichiers texte$NHotkey: V",
- "tt_pdock": "afficher les dossiers parents dans un panneau ancrรฉ en haut",
- "tt_dynt": "croissance automatique ร mesure que l'arborescence s'รฉtend",
- "tt_wrap": "retour ร la ligne",
- "tt_hover": "rรฉvรฉler les lignes dรฉbordantes au survol$N( interrompt le dรฉfilement ร moins que le curseur de la souris ne soit dans la gouttiรจre gauche )",
-
- "ml_pmode": "ร la fin du dossierโฆ",
- "ml_btns": "cmds",
- "ml_tcode": "transcoder",
- "ml_tcode2": "transcoder vers",
- "ml_tint": "teinte",
- "ml_eq": "รฉgaliseur audio",
- "ml_drc": "compresseur de plage dynamique",
-
- "mt_loop": "rรฉpรฉter en boucle une musique\">๐",
- "mt_one": "stopper aprรจs une musique\">1๏ธโฃ",
- "mt_shuf": "mรฉlanger les musiques dans chaque dossiers\">๐",
- "mt_aplay": "jouer automatiquement si le lien utilisรฉ pour accรฉder au serveur a un song-ID $N$N, dรฉsactiver cela arrรชtera รฉgalement la mise ร jour de l'URL de la page avec les song-IDs lors de la lecture de la musique, pour รฉviter la lecture automatique si ces paramรจtres sont perdus mais que l'URL reste\">aโถ",
- "mt_preload": "commencer ร charger la prochaine chanson prรจs de la fin pour une lecture sans interruption\">preload",
- "mt_prescan": "explorer le dossier suivant avant la derniรจre musique$Nne finisse, pour garder le navigateur content$Npour qu'il n'arrรชte pas la lecture\">nav",
- "mt_fullpre": "essayer de prรฉ-charger la musique entiรจre;$Nโ
activer en cas de connection instable,$Nโ dรฉsactiver en revanche sur une connection lente va probablement รชtre mieux\">full",
- "mt_fau": "sur tรฉlรฉphone, empรชche la musique de s'arrรชter de jouer si la prochaine n'est pas prรฉ-chargรฉe assez rapidement (peut rendre l'affichage des tags buggรฉ)\">โ๏ธ",
- "mt_waves": "barre de progression en spectrograme:$Nmontrer l'amplitude audio dans la miniature\">~s",
- "mt_npclip": "montrer les boutons pour copier le morceau en cours de lecture\">/np",
- "mt_m3u_c": "montrer les boutons pour copier les$morceaux sรฉlectionnรฉes en tant qu'entrรฉes de playlist m3u8\">๐ป",
- "mt_octl": "intรฉgration os (touches de raccourci multimรฉdia / osd)\">os-ctl",
- "mt_oseek": "permettre la recherche via l'intรฉgration os$N$Nremarque : sur certains appareils (iPhones),$Ncela remplace le bouton de la chanson suivante\">seek",
- "mt_oscv": "montrer la couverture de l'album dans l'osd\">art",
- "mt_follow": "garder la piste en cours dรฉfilรฉe dans la vue\">๐ฏ",
- "mt_compact": "contrรดles compacts\">โ",
- "mt_uncache": "effacer le cache (essayez ceci si votre navigateur a mis en cache$Nun copie dรฉfectueuse d'une chanson, ce qui empรชche sa lecture)\">uncache",
- "mt_mloop": "lire en boucle le dossier ouvert\">๐ loop",
- "mt_mnext": "charger le dossier suivant et continuer\">๐ next",
- "mt_mstop": "arrรชter la lecture\">โธ stop",
- "mt_cflac": "convertir flac / wav en {0}\">flac",
- "mt_caac": "convertir aac / m4a en {0}\">aac",
- "mt_coth": "convertir tout les autres (pas mp3) en {0}\">oth",
- "mt_c2opus": "meilleur choix pour PC fixe, PC portable, android\">opus",
- "mt_c2owa": "opus-weba, pour iOS 17.5 et supรฉrieur\">owa",
- "mt_c2caf": "opus-caf, pour iOS 11 ร 17\">caf",
- "mt_c2mp3": "utilisez ceci sur des appareils trรจs anciens\">mp3",
- "mt_c2flac": "meilleure qualitรฉ sonore, mais tรฉlรฉchargements รฉnormes\">flac",
- "mt_c2wav": "lecture non compressรฉe (encore plus gros)\">wav",
- "mt_c2ok": "bien, bon choix",
- "mt_c2nd": "ce n'est pas le format de sortie recommandรฉ pour votre appareil, mais รงa devrait aller",
- "mt_c2ng": "votre appareil ne semble pas prendre en charge ce format de sortie, mais essayons quand mรชme",
- "mt_xowa": "il y a des bugs dans iOS qui empeche d'avoir une lecture en ariere plan en utilisant ce format; utilisez caf ou mp3 ร la place",
- "mt_tint": "niveau dโarriรจre-plan (0โ100) de la barre de progression$Npour rendre la mise en mรฉmoire tampon moins gรชnante",
- "mt_eq": "active l'รฉgaliseur et le contrรดle de gain;$N$Nboost <code>0</code> = volume standard 100% (non modifiรฉ)$N$Nwidth <code>1 </code> = stรฉrรฉo standard (non modifiรฉ)$Nwidth <code>0.5</code> = 50% de crossfeed gauche-droite$Nwidth <code>0 </code> = mono$N$Nboost <code>-0.8</code> & width <code>10</code> = suppression vocale :^)$N$Nl'activation de l'รฉgaliseur rend les albums gapless entiรจrement gapless, alors laissez-le activรฉ avec toutes les valeurs ร zรฉro (sauf largeur = 1) si vous vous en souciez",
- "mt_drc": "active le compresseur de plage dynamique (aplanisseur de volume / brickwaller); activera รฉgalement l'EQ pour รฉquilibrer les choses, donc dรฉfinissez tous les champs EQ sauf 'width' sur 0 si vous ne le voulez pas$N$Ndiminue le volume de l'audio au-dessus de THRESHOLD dB; pour chaque RATIO dB au-delร de THRESHOLD, il y a 1 dB de sortie, donc des valeurs par dรฉfaut de tresh -24 et ratio 12 signifient qu'il ne devrait jamais รชtre plus fort que -22 dB et qu'il est sรปr d'augmenter le boost de l'รฉgaliseur ร 0.8, ou mรชme 1.8 avec ATK 0 et un รฉnorme RLS comme 90 (ne fonctionne que dans firefox; RLS est max 1 dans les autres navigateurs)$N$N(voir wikipedia, ils expliquent cela beaucoup mieux)",
-
- "mb_play": "lecture",
- "mm_hashplay": "lire ce fichier audio ?",
- "mm_m3u": "appuyez sur Entrรฉe/OK pour lire\nappuyez sur รchap/Annuler pour modifier",
- "mp_breq": "nรฉcessite firefox 82+ ou chrome 73+ ou iOS 15+",
- "mm_bload": "chargement en coursโฆ",
- "mm_bconv": "conversion en {0}, veuillez patienterโฆ",
- "mm_opusen": "votre navigateur ne peut pas lire les fichiers aac / m4a ;\nle transcodage en opus est maintenant activรฉ",
- "mm_playerr": "รฉchec de la lecture : ",
- "mm_eabrt": "La tentative de lecture a รฉtรฉ annulรฉe",
- "mm_enet": "Votre connexion internet est instable ou inexistante",
- "mm_edec": "Ce fichier est supposรฉment corrompu??",
- "mm_esupp": "Votre navigateur ne comprend pas ce format audio",
- "mm_eunk": "Erreur inconnue",
- "mm_e404": "Impossible de lire l'audio ; erreur 404 : fichier introuvable.",
- "mm_e403": "Impossible de lire l'audio ; erreur 403 : accรจs refusรฉ.\n\nEssayez d'appuyer sur F5 pour recharger, peut-รชtre que vous avez รฉtรฉ dรฉconnectรฉ",
- "mm_e500": "Impossible de lire l'audio ; erreur 500 : vรฉrifiez les journaux du serveur.",
- "mm_e5xx": "Impossible de lire l'audio ; erreur serveur ",
- "mm_nof": "Pas d'autres fichiers audio trouvรฉs par ici",
- "mm_prescan": "En recherche d'une autre musique ร lireโฆ",
- "mm_scank": "Prochaine musique trouvรฉe :",
- "mm_uncache": "cache vidรฉ ; toutes les chansons seront retรฉlรฉchargรฉes lors de la prochaine lecture",
- "mm_hnf": "cette chanson n'existe plus",
-
- "im_hnf": "cette image n'existe plus",
-
- "f_empty": 'ce dossier est vide',
- "f_chide": 'ceci va cacher les colonnes ยซ{0}ยป\n\ntu peut les rรฉafficher dans les options',
- "f_bigtxt": "ce fichier fait {0} MiB -- tu veut vraiment le voir en tant que texte ?",
- "f_bigtxt2": "voir seulement la fin du fichier ร la place ? ceci activera aussi le suivi en temps rรฉel, affichant les nouvelles lignes de texte au fur et ร mesure",
- "fbd_more": '',
- "fbd_all": '',
- "f_anota": "seulement {0} des {1} elements sont selectionรฉ;\npour selectioner le dossier entier, fait dรฉfiler jusqu'au fond",
-
- "f_dls": 'le lien de fichier dans le rรฉpertoire actuel\nร รฉtรฉ changรฉ en lien de tรฉlรฉchargement',
-
- "f_partial": "Pour tรฉlรฉcharger de faรงon sรฉcurisรฉe un fichier qui est entrain de se faire tรฉlรฉverser, cliquez sur le fichier qui a le mรชme nom, mais sans l'extension de fichier .PARTIAL. Choisissez ANNULER ou appuiez sur la touche รchap pour faire cela.\n\nAppuyer sur OK / Entrรฉe ignorera cet avertissement et continuera ร tรฉlรฉcharger le fichier temporaire .PARTIAL ร la place, ce qui donnera presque certainement des donnรฉes corrompues.",
-
- "ft_paste": "coller {0} รฉlรฉments$NHotkey: ctrl-V",
- "fr_eperm": 'impossible de renommer:\n vous n\'avez pas la permission โmoveโ dans ce dossier',
- "fd_eperm": 'impossible de supprimer:\nvous n\'avez pas la permission โdeleteโ dans ce dossier',
- "fc_eperm": 'impossible de couper:\nvous n\'avez pas la permission โmoveโ dans ce dossier',
- "fp_eperm": 'impossible de coller:\nvous n\'avez pas la permission โwriteโ dans ce dossier',
- "fr_emore": "sรฉlectionnez au moins un รฉlรฉment ร renommer",
- "fd_emore": "sรฉlectionnez au moins un รฉlรฉment ร supprimer",
- "fc_emore": "sรฉlectionnez au moins un รฉlรฉment ร couper",
- "fcp_emore": "sรฉlectionnez au moins un รฉlรฉment ร copier dans le presse-papiers",
-
- "fs_sc": "partager le dossier dans lequel vous vous trouvez",
- "fs_ss": "partager les fichiers sรฉlectionnรฉs",
- "fs_just1d": "vous ne pouvez pas sรฉlectionner plus d'un dossier,\nou mรฉlanger des fichiers et des dossiers dans une seule sรฉlection",
- "fs_abrt": "โ abandonner",
- "fs_rand": "๐ฒ nom.aleatoire",
- "fs_go": "โ
crรฉer partage",
- "fs_name": "nom",
- "fs_src": "source",
- "fs_pwd": "mdp",
- "fs_exp": "expiration",
- "fs_tmin": "min",
- "fs_thrs": "heures",
- "fs_tdays": "jours",
- "fs_never": "รฉternel",
- "fs_pname": "nom de lien optionnel ; sera alรฉatoire si vide",
- "fs_tsrc": "le fichier ou le dossier ร partager",
- "fs_ppwd": "mot de passe optionnel",
- "fs_w8": "crรฉation du partageโฆ",
- "fs_ok": "appuyez sur Entrรฉe/OK pour le Presse-papiers\nappuyez sur รchap/Annuler pour fermer",
-
- "frt_dec": "peut potentiellement rรฉparer certaines instances de noms de fichiers cassรฉs\">url-decode",
- "frt_rst": "rรฉinitialiser les noms de fichiers modifiรฉs ร leurs originaux\">โบ reset",
- "frt_abrt": "abandonner et fermer cette fenรชtre\">โ cancel",
- "frb_apply": "APPLIQUER RENOMMER",
- "fr_adv": "renommage par lot / mรฉtadonnรฉes / motif\">advanced",
- "fr_case": "regex sensible ร la casse\">case",
- "fr_win": "noms windows-safe; remplacer <>:"\\|?* par des caractรจres japonais en pleine largeur\">win",
- "fr_slash": "remplacer / par un caractรจre qui ne provoque pas la crรฉation de nouveaux dossiers\">no /",
- "fr_re": "modรจle de recherche regex ร appliquer aux noms de fichiers originaux ; les groupes capturรฉs peuvent รชtre rรฉfรฉrencรฉs dans le champ de format ci-dessous comme <code>(1)</code> et <code>(2)</code> et ainsi de suite",
- "fr_fmt": "inspirรฉ par foobar2000 : $N<code>(title)</code> est remplacรฉ par le titre de la chanson, $N<code>[(artist) - ](title)</code> saute [cette] partie si l'artiste est vide, $N<code>$lpad((tn),2,0)</code> remplit le numรฉro de piste ร 2 chiffres",
- "fr_pdel": "supprimer",
- "fr_pnew": "enregistrer sous",
- "fr_pname": "donnez un nom pour le nouveau preset",
- "fr_aborted": "abandonnรฉ",
- "fr_lold": "ancien nom",
- "fr_lnew": "nouveau nom",
- "fr_tags": "tags pour les fichier selectionรฉ (lecture-seule, juste pour rรฉfรฉrence):",
- "fr_busy": "renomage de {0} itemsโฆ\n\n{1}",
- "fr_efail": "renomage a รฉchouรฉ:\n",
- "fr_nchg": "{0} des nouveaux noms ont รฉtรฉ modifiรฉs en raison de win et/ou no /\n\nOK pour continuer avec ces nouveaux noms modifiรฉs ?",
-
- "fd_ok": "suppression rรฉussie",
- "fd_err": "impossible de supprimer:\n",
- "fd_none": "rien n'a รฉtรฉ supprimรฉ ; peut-รชtre bloquรฉ par la configuration du serveur (xbd) ?",
- "fd_busy": "suppression de {0} รฉlรฉmentsโฆ\n\n{1}",
- "fd_warn1": "SUPPRIMER ces {0} รฉlรฉments ?",
- "fd_warn2": "Derniรจre chance ! Impossible de revenir en arriรจre. Supprimer ?",
-
- "fc_ok": "couper {0} รฉlรฉments",
- "fc_warn": 'couper {0} รฉlรฉments\n\nmais : seul cet onglets peut les coller\n(puisque la sรฉlection est si absolument massive)',
-
- "fcc_ok": "copiรฉ {0} รฉlรฉments dans le presse-papiers",
- "fcc_warn": 'copiรฉ {0} รฉlรฉments dans le presse-papiers\n\nmais : seul cet onglet peut les coller\n(puisque la sรฉlection est si absolument massive)',
-
- "fp_apply": "utiliser ces noms",
- "fp_ecut": "en premier, coupez ou copiez quelques fichiers / dossiers ร coller / dรฉplacer\n\nnote: vous pouvez couper / coller a travers different onglets",
- "fp_ename": "{0} รฉlรฉments ne peuvent pas รชtre dรฉplacรฉs ici parceque leurs noms sont dรฉjร pris. Donnez leurs un nouveau nom ci-dessous pour continuer, ou laissez les vides pour les sauter:",
- "fcp_ename": "{0} รฉlรฉments ne peuvent pas รชtre copiรฉs ici parce que les noms sont dรฉjร pris. Donnez-leur un nouveau nom ci-dessous pour continuer, ou laissez-les vides pour les sauter :",
- "fp_emore": "il reste encore des collisions de noms de fichiers ร corriger",
- "fp_ok": "dรฉplacement OK",
- "fcp_ok": "copie OK",
- "fp_busy": "dรฉplacement de {0} รฉlรฉmentsโฆ\n\n{1}",
- "fcp_busy": "copie de {0} รฉlรฉmentsโฆ\n\n{1}",
- "fp_abrt": "abandon en cours...", //m
- "fp_err": "deplacement รฉchouรฉ:\n",
- "fcp_err": "copie รฉchouรฉe:\n",
- "fp_confirm": "dรฉplacer ces {0} รฉlรฉments ici ?",
- "fcp_confirm": "copier ces {0} รฉlรฉments ici ?",
- "fp_etab": 'lecture du presse-papier venant d\'un autre onglet รฉchouรฉ',
- "fp_name": "tรฉlรฉversement d'un fichier de votre apareil. Donnez lui un nom:",
- "fp_both_m": 'choisisez ce qu\'il faut coller
Entrer = Dรฉplacer {0} fichiers de ยซ{1}ยป\nESC = Tรฉlรฉverser {2} fichiers de votre appareil',
- "fcp_both_m": 'choisissez ce qu\'il faut coller
Entrer = Copier {0} fichiers de ยซ{1}ยป\nESC = Tรฉlรฉverser {2} fichiers de votre appareil',
- "fp_both_b": 'DรฉplacerTรฉlรฉverser',
- "fcp_both_b": 'CopierTรฉlรฉverser',
-
- "mk_noname": "entrez un nom dans le champ de texte ร gauche avant de faire รงa :p",
-
- "tv_load": "Chargement du document texte:\n\n{0}\n\n{1}% ({2} de {3} MiB chargรฉs)",
- "tv_xe1": "impossible de charger le fichier texte:\n\nerreur",
- "tv_xe2": "404, fichier introuvable",
- "tv_lst": "liste des fichiers texte dans",
- "tvt_close": "retour a la vue de dossier$NHotkey: M (ou รchap)\">โ fermer",
- "tvt_dl": "tรฉlรฉcharger ce fichier$NHotkey: Y\">๐พ tรฉlรฉcharger",
- "tvt_prev": "montrer le document prรฉcรฉdent$NHotkey: i\">โฌ prรฉcรฉdent",
- "tvt_next": "montrer le document suivant$NHotkey: K\">โฌ suivant",
- "tvt_sel": "sรฉlectionner le fichier ( pour couper / copier / supprimer / โฆ )$NHotkey: S\">sel",
- "tvt_edit": "ouvrir le fichier dans l'รฉditeur de texte$NHotkey: E\">โ๏ธ modifier",
- "tvt_tail": "surveiller le fichier pour les changements; montrer les nouvelles lignes en temps rรฉel\">๐ก suivre",
- "tvt_wrap": "retour ร la ligne\">โต",
- "tvt_atail": "ancrer le dรฉfilement au fond de la page\">โ",
- "tvt_ctail": "dรฉcoder les couleurs du terminal (ansi escape codes)\">๐",
- "tvt_ntail": "limite de dรฉfilement en arriรจre (combien d'octets de texte ร garder chargรฉ)",
-
- "m3u_add1": "musique ajoutรฉe ร la playlist m3u",
- "m3u_addn": "{0} musiques ajoutรฉes ร la playlist m3u",
- "m3u_clip": "la playlist m3u est maintenant copiรฉe dans le presse-papier\n\nvous devriez crรฉer un nouveau fichier texte nommรฉ par exemple playlist.m3u et coller la playlist dans ce fichier ; cela la rendra lisible en tant que playlist",
-
- "gt_vau": "ne pas voir les vidรฉos, juste jouer l'audio\">๐ง",
- "gt_msel": "activer la sรฉlรฉction de fichiers ; ctrl-clic sur un fichier pour override รฉcraser$N$Nquand actif : double-cliquer sur un fichier / dossier pour l'ouvrir$N$NHotkey: S\">multisรฉlรฉction",
- "gt_crop": "rogner les miniatures au centre\">rogner",
- "gt_3x": "miniatures haute rรฉsolution\">3x",
- "gt_zoom": "zoomer",
- "gt_chop": "rogner",
- "gt_sort": "trier par",
- "gt_name": "nom",
- "gt_sz": "taille",
- "gt_ts": "date",
- "gt_ext": "type",
- "gt_c1": "tronquer les noms de fichiers (montrer moins)",
- "gt_c2": "tronquer les noms de fichiers (montrer plus)",
-
- "sm_w8": "rechercheโฆ",
- "sm_prev": "les rรฉsultats de recherche ci-dessous proviennent d'une requรชte prรฉcรฉdente:\n ",
- "sl_close": "fermer les rรฉsultats de recherche",
- "sl_hits": "affichage de {0} rรฉsultats",
- "sl_moar": "chercher plus",
-
- "s_sz": "taille",
- "s_dt": "date",
- "s_rd": "chemin",
- "s_fn": "nom",
- "s_ta": "tags",
- "s_ua": "up@",
- "s_ad": "adv.",
- "s_s1": "minimum MiB",
- "s_s2": "maximum MiB",
- "s_d1": "min. iso8601",
- "s_d2": "max. iso8601",
- "s_u1": "tรฉlรฉverser aprรจs",
- "s_u2": "et/ou avant",
- "s_r1": "le chemin contient (sรฉparรฉ par des espaces)",
- "s_f1": "le nom contient (nรฉgation avec -nope)",
- "s_t1": "les tags contiennent (^=dรฉbut, fin=$)",
- "s_a1": "propriรฉtรฉs de mรฉtadonnรฉes spรฉcifiques",
-
- "md_eshow": "impossible d'afficher le rendu ",
- "md_off": "[๐readme] disabled in [โ๏ธ] -- document cachรฉ",
-
- "badreply": "รchec de l'analyse de la rรฉponse du serveur",
-
- "xhr403": "403: Accรจs refusรฉ\n\nessayez d'appuyer sur F5, peut-รชtre que vous avez รฉtรฉ dรฉconnectรฉ",
- "xhr0": "inconnu (vous avez probablement perdu la connexion au serveur, ou le serveur est hors ligne)",
- "cf_ok": "dรฉsolรฉ pour cela -- la protection DD" + wah + "oS a รฉtรฉ dรฉclenchรฉ\n\nles choses devraient reprendre dans environ 30 secondes\n\nsi rien ne se passe, appuyez sur F5 pour recharger la page",
- "tl_xe1": "impossible de lister les sous-dossiers:\n\nerreur ",
- "tl_xe2": "404: Dossier introuvable",
- "fl_xe1": "impossible de lister les fichiers dans le dossier:\n\nerreur ",
- "fl_xe2": "404: Dossier introuvable",
- "fd_xe1": "impossible de crรฉer le sous-dossier:\n\nerreur ",
- "fd_xe2": "404: Dossier parent introuvable",
- "fsm_xe1": "impossible d'envoyer le message:\n\nerreur ",
- "fsm_xe2": "404: Dossier parent introuvable",
- "fu_xe1": "รฉchec du chargement de la liste des unpost du serveur:\n\nerreur ",
- "fu_xe2": "404: Fichier introuvable??",
-
- "fz_tar": "fichier gnu-tar non compressรฉ (linux / mac)",
- "fz_pax": "tar au format pax non compressรฉ (plus lent)",
- "fz_targz": "gnu-tar avec compression gzip niveau 3$N$Ncela est gรฉnรฉralement trรจs lent, donc$Nutilisez plutรดt tar non compressรฉ",
- "fz_tarxz": "gnu-tar avec compression xz niveau 1$N$Ncela est gรฉnรฉralement trรจs lent, donc$Nutilisez plutรดt tar non compressรฉ",
- "fz_zip8": "zip avec noms de fichiers utf8 (peut รชtre instable sur windows 7 et versions antรฉrieures)",
- "fz_zipd": "zip avec noms de fichiers cp437 traditionnels, pour les trรจs anciens logiciels",
- "fz_zipc": "cp437 avec crc32 calculรฉ tรดt,$Nfor MS-DOS PKZIP v2.04g (octobre 1993)$N(prend plus de temps ร charger avant que le tรฉlรฉchargement ne commence)",
-
- "un_m1": "vous pouvez supprimer vos tรฉlรฉchargements rรฉcents (ou annuler ceux en cours) ci-dessous",
- "un_upd": "rafraรฎchir",
- "un_m4": "ou partager les fichiers visibles ci-dessous:",
- "un_ulist": "montrer",
- "un_ucopy": "copier",
- "un_flt": "filtre optionnel: l'URL doit contenir",
- "un_fclr": "effacer le filtre",
- "un_derr": 'รฉchec de l\'unpost-delete:\n',
- "un_f5": 'quelque chose a cassรฉ, veuillez essayer de rafraรฎchir ou d\'appuyer sur F5',
- "un_uf5": "dรฉsolรฉ mais vous devez rafraรฎchir la page (par exemple en appuyant sur F5 ou CTRL-R) avant que ce tรฉlรฉchargement puisse รชtre annulรฉ",
- "un_nou": 'warning: serveur trop occupรฉ pour afficher les tรฉlรฉversements non finis; cliquez sur le lien "rafraรฎchir" dans un instant',
- "un_noc": 'warning: unpost des fichiers entiรจrement tรฉlรฉchargรฉs n\'est pas activรฉ/permis dans la configuration du serveur',
- "un_max": "affichage des 2000 premiers fichiers (utilisez le filtre)",
- "un_avail": "{0} tรฉlรฉchargements rรฉcents peuvent รชtre supprimรฉs
{1} ceux en cours peuvent รชtre annulรฉs",
- "un_m2": "triรฉs par date de tรฉlรฉchargement; les plus rรฉcents en premier:",
- "un_no1": "sike! aucun tรฉlรฉchargement n'est suffisamment rรฉcent",
- "un_no2": "sike! aucun tรฉlรฉchargement correspondant ร ce filtre n'est suffisamment rรฉcent",
- "un_next": "supprimer les {0} fichiers suivants ci-dessous",
- "un_abrt": "abandonner",
- "un_del": "supprimer",
- "un_m3": "chargement de vos tรฉlรฉchargements rรฉcentsโฆ",
- "un_busy": "suppression de {0} fichiersโฆ",
- "un_clip": "{0} liens copiรฉs dans le presse-papiers",
-
- "u_https1": "vous devriez",
- "u_https2": "passer ร https",
- "u_https3": "pour de meilleure performances",
- "u_ancient": 'votre navigateur est impressionnamment ancien -- vous devriez peut-รชtre utiliser bup ร la place',
- "u_nowork": "nรฉcessite firefox 53+ ou chrome 57+ ou iOS 11+",
- "tail_2old": "nรฉcessite firefox 105+ ou chrome 71+ ou iOS 14.5+",
- "u_nodrop": 'votre navigateur est trop ancien pour le tรฉlรฉversement par glisser-dรฉposer',
- "u_notdir": "ce n'est pas un dossier!\n\nvotre navigateur est trop ancien,\nveuillez essayer le glisser-dรฉposer ร la place",
- "u_uri": "pour glisser-dรฉposer des images depuis d'autres fenรชtres de navigateur,\nveuillez les dรฉposer sur le gros bouton de tรฉlรฉversement",
- "u_enpot": 'passer ร l\'interface utilisateur potato (peut amรฉliorer la vitesse de tรฉlรฉversement)',
- "u_depot": 'passer ร l\'interface utilisateur fancy (peut rรฉduire la vitesse de tรฉlรฉversement)',
- "u_gotpot": 'passage ร l\'interface utilisateur potato pour une vitesse de tรฉlรฉversement amรฉliorรฉe,\n\nn\'hรฉsitez pas ร revenir en arriรจre si รงa ne vous plaรฎt pas !',
- "u_pott": "fichiers: {0} fini, {1} รฉchouรฉ, {2} en cours, {3} en attente
",
- "u_ever": "ceci est le tรฉlรฉverseur de base ; up2k nรฉcessite au moins chrome 21 // firefox 13 // edge 12 // opera 12 // safari 5.1",
- "u_su2k": 'ceci est le tรฉlรฉverseur de base; up2k est meilleur',
- "u_uput": 'optimiser pour la vitesse (ignorer la somme de contrรดle)',
- "u_ewrite": 'vous n\'avez pas accรจs en รฉcriture ร ce dossier',
- "u_eread": 'vous n\'avez pas accรจs en lecture ร ce dossier',
- "u_enoi": 'la recherche de fichiers n\'est pas activรฉe dans la configuration du serveur',
- "u_enoow": "l'รฉcrasage ne fonctionnera pas ici; besoin de permissions de suppression",
- "u_badf": 'Ces {0} fichiers (sur {1} au total) ont รฉtรฉ ignorรฉs, probablement en raison de permissions systรจme de fichiers:\n\n',
- "u_blankf": 'Ces {0} fichiers (sur {1} au total) sont vides; les tรฉlรฉverser quand mรชme ?\n\n',
- "u_applef": 'Ces {0} fichiers (sur {1} au total) sont probablement indรฉsirables;\nAppuyez sur OK/Enter pour IGNORER les fichiers suivants,\nAppuyez sur Annuler/รchap pour NE PAS exclure, et TรLรVERSER ceux-ci รฉgalement:\n\n',
- "u_just1": '\nPeut-รชtre que cela fonctionne mieux si vous sรฉlectionnez juste un fichier',
- "u_ff_many": "si vous utilisez Linux / MacOS / Android, alors ce nombre de fichiers peut faire planter Firefox!\nSi cela se produit, veuillez rรฉessayer (ou utiliser Chrome).",
- "u_up_life": "Ce tรฉlรฉversement va รชtre supprimรฉ du serveur\n{0} aprรจs son achรจvement",
- "u_asku": 'tรฉlรฉverser ces {0} fichiers vers {1}',
- "u_unpt": "vous pouvez dรฉfaire / supprimer ce tรฉlรฉversement en utilisant le ๐งฏ en haut ร gauche",
- "u_bigtab": 'sur le point d\'afficher {0} fichiers\n\ncela peut faire planter votre navigateur, รชtes-vous sรปr ?',
- "u_scan": 'Analyse des fichiersโฆ',
- "u_dirstuck": 'l\'itรฉrateur de rรฉpertoire est bloquรฉ en essayant d\'accรฉder aux {0} รฉlรฉments suivants ; il sera ignorรฉ :',
- "u_etadone": 'Terminรฉ ({0}, {1} fichiers)',
- "u_etaprep": '(prรฉparation au tรฉlรฉversement)',
- "u_hashdone": 'calcul de la somme de contrรดle terminรฉ',
- "u_hashing": 'calcul de la somme de contrรดle',
- "u_hs": 'รฉtablissement d\'une liaisonโฆ',
- "u_started": "les fichiers sont maintenant en cours de tรฉlรฉversement ; voir [๐]",
- "u_dupdefer": "dupliquรฉ ; sera traitรฉ aprรจs tous les autres fichiers",
- "u_actx": "cliquez sur ce texte pour รฉviter la perte de
performance lors du passage ร d'autres fenรชtres/onglets",
- "u_fixed": "OK! Rรฉsolu ๐",
- "u_cuerr": "echec du tรฉlรฉversement du morceau {0} de {1};\nprobablement inoffensif, poursuite\n\nfichier : {2}",
- "u_cuerr2": "le serveur a rejetรฉ le tรฉlรฉversement (morceau {0} de {1});\nrรฉessaiera plus tard\n\nfichier : {2}\n\nerreur ",
- "u_ehstmp": "rรฉessaiera ; voir en bas ร droite",
- "u_ehsfin": "le serveur a rejetรฉ la demande de finalisation du tรฉlรฉversement ; nouvelle tentativeโฆ",
- "u_ehssrch": "le serveur a rejetรฉ la demande d'effectuer une recherche ; nouvelle tentativeโฆ",
- "u_ehsinit": "le serveur a rejetรฉ la demande d'initier le tรฉlรฉversement ; nouvelle tentativeโฆ",
- "u_eneths": "erreur rรฉseau lors de l'exรฉcution de l'initialisation du tรฉlรฉversement ; nouvelle tentativeโฆ",
- "u_enethd": "erreur rรฉseau lors du test de l'existence de la cible ; nouvelle tentativeโฆ",
- "u_cbusy": "attente que le serveur nous fasse ร nouveau confiance aprรจs un problรจme rรฉseauโฆ",
- "u_ehsdf": "le serveur est ร court d'espace disque !\n\nil va continuer de rรฉessayer, au cas oรน quelqu'un\nlibรฉrerait suffisamment d'espace pour continuer",
- "u_emtleak1": "il semble que votre navigateur web ait une fuite de mรฉmoire ;\nveuillez",
- "u_emtleak2": ' passer ร https (recommandรฉ) ou ',
- "u_emtleak3": ' ',
- "u_emtleakc": 'essayez la solution suivante:\n- appuyez sur
F5 pour rafraรฎchir la page - ensuite dรฉsactivez le bouton
mt dans les โ๏ธ paramรจtres - et rรฉessayez ce tรฉlรฉversement
Les tรฉlรฉversements seront un peu plus lents, mais tant pis.\nDรฉsolรฉ pour le dรฉrangement !\n\nPS : chrome v107 a un correctif pour cela',
- "u_emtleakf": 'essayez la solution suivante:\n- appuyez sur
F5 pour rafraรฎchir la page - ensuite activez
๐ฅ (pomme de terre) dans l\'interface de tรฉlรฉversement - et rรฉessayez ce tรฉlรฉversement
\nPS : firefox aura probablement un correctif ร un moment donnรฉ',
- "u_s404": "pas trouvรฉ sur le serveur",
- "u_expl": "expliquer",
- "u_maxconn": "la plupart des navigateur limite ceci ร 6, mais firefox vous permet de l'augmenter avec connections-per-server dans about:config",
- "u_tu": 'WARNING: turbo enclenchรฉ, le client peut ne pas dรฉtecter et reprendre les tรฉlรฉversements incomplets ; voir l\'info-bulle du bouton turbo
',
- "u_ts": 'WARNING: turbo enclenchรฉ, les rรฉsultats de recherche peuvent รชtre incorrects ; voir l\'info-bulle du bouton turbo
',
- "u_turbo_c": "turbo est dรฉsactivรฉ dans la configuration du serveur",
- "u_turbo_g": "dรฉsactivation de turbo car vous n'avez pas de\nprivilรจges de listing de rรฉpertoires dans ce volume",
- "u_life_cfg": 'suppression automatique aprรจs min (ou heures)',
- "u_life_est": 'le tรฉlรฉversement sera supprimรฉ ---',
- "u_life_max": 'ce dossier impose une\ndurรฉe de vie maximale de {0}',
- "u_unp_ok": 'unpost est autorisรฉ pour {0}',
- "u_unp_ng": 'unpost ne sera PAS autorisรฉ',
- "ue_ro": 'votre accรจs ร ce dossier est en lecture seule\n\n',
- "ue_nl": 'vous n\'รชtes actuellement pas connectรฉ',
- "ue_la": 'vous รชtes actuellement connectรฉ en tant que "{0}"',
- "ue_sr": 'vous รชtes actuellement en mode recherche de fichiers\n\nchangez en mode tรฉlรฉversement en cliquant sur la loupe ๐ (ร cรดtรฉ du grand bouton RECHERCHER), et essayez de tรฉlรฉverser ร nouveau\n\ndรฉsolรฉ',
- "ue_ta": 'essayez de tรฉlรฉverser ร nouveau, cela devrait fonctionner maintenant',
- "ue_ab": "ce fichier a dรฉjร รฉtรฉ tรฉlรฉversรฉ dans un autre dossier, et ce tรฉlรฉversement doit รชtre terminรฉ avant que le fichier puisse รชtre tรฉlรฉversรฉ ailleurs.\n\nVous pouvez annuler et oublier le tรฉlรฉversement initial en utilisant le bouton ๐งฏ en haut ร gauche.",
- "ur_1uo": "OK: Fichier tรฉlรฉversรฉ avec succรจs",
- "ur_auo": "OK: Tous les {0} fichiers tรฉlรฉversรฉs avec succรจs",
- "ur_1so": "OK: Fichier trouvรฉ sur le serveur",
- "ur_aso": "OK: Tous les {0} fichiers trouvรฉs sur le serveur",
- "ur_1un": "รchec du tรฉlรฉversement, dรฉsolรฉ",
- "ur_aun": "Tous les {0} tรฉlรฉversements ont รฉchouรฉ, dรฉsolรฉ",
- "ur_1sn": "Fichier NON trouvรฉ sur le serveur",
- "ur_asn": "Les {0} fichiers n'ont PAS รTร trouvรฉs sur le serveur",
- "ur_um": "Terminรฉ;\n{0} tรฉlรฉversements OK,\n{1} tรฉlรฉversements รฉchouรฉs, dรฉsolรฉ",
- "ur_sm": "Terminรฉ;\n{0} fichiers trouvรฉs sur le serveur,\n{1} fichiers NON trouvรฉs sur le serveur",
-
- "lang_set": "rafraรฎchir pour que les changements prennent effet ?",
- },
- "grc": {
- "tt": "ฮฮปฮปฮทฮฝฮนฮบฮฌ",
-
- "cols": {
- "c": "ฮบฮฟฯ
ฮผฯฮนฮฌ ฮตฮฝฮตฯฮณฮตฮนฯฮฝ",
- "dur": "ฮดฮนฮฌฯฮบฮตฮนฮฑ",
- "q": "ฯฮฟฮนฯฯฮทฯฮฑ / bitrate",
- "Ac": "ฮบฯฮดฮนฮบฮฟฯฮฟฮนฮทฯฮฎฯ ฮฎฯฮฟฯ
",
- "Vc": "ฮบฯฮดฮนฮบฮฟฯฮฟฮนฮทฯฮฎฯ ฮฒฮฏฮฝฯฮตฮฟ",
- "Fmt": "ฮผฮฟฯฯฮฎ / container",
- "Ahash": "checksum ฮฎฯฮฟฯ
",
- "Vhash": "checksum ฮฒฮฏฮฝฯฮตฮฟ",
- "Res": "ฮฑฮฝฮฌฮปฯ
ฯฮท",
- "T": "ฯฯฯฮฟฯ ฮฑฯฯฮตฮฏฮฟฯ
",
- "aq": "ฯฮฟฮนฯฯฮทฯฮฑ ฮฎฯฮฟฯ
/ bitrate",
- "vq": "ฯฮฟฮนฯฯฮทฯฮฑ ฮฒฮฏฮฝฯฮตฮฟ / bitrate",
- "pixfmt": "subsampling / ฮดฮฟฮผฮฎ ฮตฮนฮบฮฟฮฝฮฟฯฯฮฟฮนฯฮตฮฏฯฮฝ",
- "resw": "ฮฟฯฮนฮถฯฮฝฯฮนฮฑ ฮฑฮฝฮฌฮปฯ
ฯฮท",
- "resh": "ฮบฮฌฮธฮตฯฮท ฮฑฮฝฮฌฮปฯ
ฯฮท",
- "chs": "ฮบฮฑฮฝฮฌฮปฮนฮฑ ฮฎฯฮฟฯ
",
- "hz": "ฯฯ
ฯฮฝฯฯฮทฯฮฑ ฮดฮตฮนฮณฮผฮฑฯฮฟฮปฮทฯฮฏฮฑฯ"
- },
-
- "hks": [
- [
- "ฮดฮนฮฌฯฮฟฯฮฑ",
- ["ESC", "ฮบฮปฮตฮฏฯฮนฮผฮฟ ฮดฮนฮฑฯฯฯฯฮฝ ฮปฮตฮนฯฮฟฯ
ฯฮณฮนฯฮฝ"],
-
- "ฮดฮนฮฑฯฮตฮนฯฮนฯฯฮฎฯ ฮฑฯฯฮตฮฏฯฮฝ",
- ["G", "ฮตฮฝฮฑฮปฮปฮฑฮณฮฎ ฮปฮฏฯฯฮฑฯ / ฯฮปฮญฮณฮผฮฑฯฮฟฯ"],
- ["T", "ฮตฮฝฮฑฮปฮปฮฑฮณฮฎ ฮผฮนฮบฯฮฟฮณฯฮฑฯฮนฯฮฝ / ฮตฮนฮบฮฟฮฝฮนฮดฮฏฯฮฝ"],
- ["โง A/D", "ฮผฮญฮณฮตฮธฮฟฯ ฮผฮนฮบฯฮฟฮณฯฮฑฯฮนฯฮฝ"],
- ["ctrl-K", "ฮดฮนฮฑฮณฯฮฑฯฮฎ ฮตฯฮนฮปฮตฮณฮผฮญฮฝฯฮฝ"],
- ["ctrl-X", "ฮฑฯฮฟฮบฮฟฯฮฎ ฮตฯฮนฮปฮฟฮณฮฎฯ ฯฯฮฟ ฯฯฯฯฮตฮนฯฮฟ"],
- ["ctrl-C", "ฮฑฮฝฯฮนฮณฯฮฑฯฮฎ ฮตฯฮนฮปฮฟฮณฮฎฯ ฯฯฮฟ ฯฯฯฯฮตฮนฯฮฟ"],
- ["ctrl-V", "ฮตฯฮนฮบฯฮปฮปฮทฯฮท (ฮผฮตฯฮฑฮบฮฏฮฝฮทฯฮท/ฮฑฮฝฯฮนฮณฯฮฑฯฮฎ) ฮตฮดฯ"],
- ["Y", "ฮปฮฎฯฮท ฮตฯฮนฮปฮตฮณฮผฮญฮฝฯฮฝ"],
- ["F2", "ฮผฮตฯฮฟฮฝฮฟฮผฮฑฯฮฏฮฑ ฮตฯฮนฮปฮตฮณฮผฮญฮฝฯฮฝ"],
-
- "ฮปฮฏฯฯฮฑ ฮฑฯฯฮตฮฏฯฮฝ",
- ["space", "ฮตฮฝฮฑฮปฮปฮฑฮณฮฎ ฮตฯฮนฮปฮฟฮณฮฎฯ ฮฑฯฯฮตฮฏฮฟฯ
"],
- ["โ/โ", "ฮผฮตฯฮฑฮบฮฏฮฝฮทฯฮท ฮดฮตฮฏฮบฯฮท ฮตฯฮนฮปฮฟฮณฮฎฯ"],
- ["ctrl โ/โ", "ฮผฮตฯฮฑฮบฮฏฮฝฮทฯฮท ฮดฮตฮฏฮบฯฮท ฮบฮฑฮน ฯฯฮฟฮฒฮฟฮปฮฎฯ"],
- ["โง โ/โ", "ฮตฯฮนฮปฮฟฮณฮฎ ฯฯฮฟฮทฮณฮฟฯฮผฮตฮฝฮฟฯ
/ฮตฯฯฮผฮตฮฝฮฟฯ
ฮฑฯฯฮตฮฏฮฟฯ
"],
- ["ctrl-A", "ฮตฯฮนฮปฮฟฮณฮฎ ฯฮปฯฮฝ ฯฯฮฝ ฮฑฯฯฮตฮฏฯฮฝ / ฯฮฑฮบฮญฮปฯฮฝ"]
- ], [
- "ฯฮปฮฟฮฎฮณฮทฯฮท",
- ["B", "ฮตฮฝฮฑฮปฮปฮฑฮณฮฎ ฯฮต ฮบฮฑฯฯฮญฮปฮตฯ ฮดฮนฮฑฮดฯฮฟฮผฯฮฝ / ฮดฮญฮฝฯฯฮฟ ฮดฮนฮฑฮดฯฮฟฮผฯฮฝ"],
- ["I/K", "ฯฯฮฟฮทฮณฮฟฯฮผฮตฮฝฮฟฯ/ฮตฯฯฮผฮตฮฝฮฟฯ ฯฮฌฮบฮตฮปฮฟฯ"],
- ["M", "ฮณฮฟฮฝฮนฮบฯฯ ฯฮฌฮบฮตฮปฮฟฯ (ฮฎ ฯฮผฮฏฮบฯฯ
ฮฝฯฮท ฯฯฮญฯฮฟฮฝฯฮฟฯ)"],
- ["V", "ฮตฮฝฮฑฮปฮปฮฑฮณฮฎ ฯฮฑฮบฮญฮปฯฮฝ / ฮดฮญฮฝฯฯฮฟ ฮฑฯฯฮตฮฏฯฮฝ ฮบฮตฮนฮผฮญฮฝฮฟฯ
"],
- ["A/D", "ฮผฮญฮณฮตฮธฮฟฯ ฯฮฏฮฝฮฑฮบฮฑ ฯฮปฮฟฮฎฮณฮทฯฮทฯ"]
- ], [
- "ฮผฮฟฯ
ฯฮนฮบฮฎ",
- ["J/L", "ฯฯฮฟฮทฮณฮฟฯฮผฮตฮฝฮฟ/ฮตฯฯฮผฮตฮฝฮฟ ฯฯฮฑฮณฮฟฯฮดฮน"],
- ["U/O", "ฮผฮตฯฮฌฮฒฮฑฯฮท 10ฮดฮตฯ
ฯ ฯฮฏฯฯ/ฮผฯฯฮฟฯฯฮฌ"],
- ["0..9", "ฮผฮตฯฮฌฮฒฮฑฯฮท ฯฯฮฟ 0%..90%"],
- ["P", "ฮฑฮฝฮฑฯฮฑฯฮฑฮณฯฮณฮฎ/ฯฮฑฯฯฮท (ฮพฮตฮบฮนฮฝฮฌฮตฮน ฮบฮนฯฮปฮฑฯ)"],
- ["S", "ฮตฯฮนฮปฮฟฮณฮฎ ฮฑฮฝฮฑฯฮฑฯฮฑฮณฯฮผฮตฮฝฮฟฯ
ฯฯฮฑฮณฮฟฯ
ฮดฮนฮฟฯ"],
- ["Y", "ฮปฮฎฯฮท ฯฯฮฑฮณฮฟฯ
ฮดฮนฮฟฯ"]
- ], [
- "ฮตฮนฮบฯฮฝฮตฯ",
- ["J/L, โ/โ", "ฯฯฮฟฮทฮณฮฟฯฮผฮตฮฝฮท/ฮตฯฯฮผฮตฮฝฮท ฮตฮนฮบฯฮฝฮฑ"],
- ["Home/End", "ฯฯฯฯฮท/ฯฮตฮปฮตฯ
ฯฮฑฮฏฮฑ ฮตฮนฮบฯฮฝฮฑ"],
- ["F", "ฯฮปฮฎฯฮทฯ ฮฟฮธฯฮฝฮท"],
- ["R", "ฯฮตฯฮนฯฯฯฮฟฯฮฎ ฮดฮตฮพฮนฯฯฯฯฮฟฯฮฑ"],
- ["โง R", "ฯฮตฯฮนฯฯฯฮฟฯฮฎ ฮฑฯฮนฯฯฮตฯฯฯฯฯฮฟฯฮฑ"],
- ["S", "ฮตฯฮนฮปฮฟฮณฮฎ ฮตฮนฮบฯฮฝฮฑฯ"],
- ["Y", "ฮปฮฎฯฮท ฮตฮนฮบฯฮฝฮฑฯ"]
- ], [
- "ฮฒฮฏฮฝฯฮตฮฟ",
- ["U/O", "ฮผฮตฯฮฌฮฒฮฑฯฮท 10ฮดฮตฯ
ฯ ฯฮฏฯฯ/ฮผฯฯฮฟฯฯฮฌ"],
- ["P/K/Space", "ฮฑฮฝฮฑฯฮฑฯฮฑฮณฯฮณฮฎ/ฯฮฑฯฯฮท"],
- ["C", "ฯฯ
ฮฝฮญฯฮตฮนฮฑ ฯฯฮฟ ฮตฯฯฮผฮตฮฝฮฟ"],
- ["V", "ฮตฯฮฑฮฝฮฌฮปฮทฯฮท"],
- ["M", "ฯฮฏฮณฮฑฯฮท"],
- ["[ ฮบฮฑฮน ]", "ฮฟฯฮนฯฮผฯฯ ฮดฮนฮฑฯฯฮฎฮผฮฑฯฮฟฯ ฮตฯฮฑฮฝฮฌฮปฮทฯฮทฯ"]
- ], [
- "ฮฑฯฯฮตฮฏฮฑ ฮบฮตฮนฮผฮญฮฝฮฟฯ
",
- ["I/K", "ฯฯฮฟฮทฮณฮฟฯฮผฮตฮฝฮฟ/ฮตฯฯฮผฮตฮฝฮฟ ฮฑฯฯฮตฮฏฮฟ"],
- ["M", "ฮบฮปฮตฮฏฯฮนฮผฮฟ ฮฑฯฯฮตฮฏฮฟฯ
"],
- ["E", "ฮตฯฮตฮพฮตฯฮณฮฑฯฮฏฮฑ ฮฑฯฯฮตฮฏฮฟฯ
"],
- ["S", "ฮตฯฮนฮปฮฟฮณฮฎ ฮฑฯฯฮตฮฏฮฟฯ
(ฮณฮนฮฑ ฮฑฯฮฟฮบฮฟฯฮฎ/ฮฑฮฝฯฮนฮณฯฮฑฯฮฎ/ฮผฮตฯฮฟฮฝฮฟฮผฮฑฯฮฏฮฑ)"]
- ]
- ],
-
- "m_ok": "ฮฮฝฯฮฌฮพฮตฮน",
- "m_ng": "ฮฮบฯ
ฯฮฟ",
-
- "enable": "ฮฮฝฮตฯฮณฮฟฯฮฟฮฏฮทฯฮท",
- "danger": "ฮฮฮฮฮฅฮฮฮฃ",
- "clipped": "ฮฑฮฝฯฮนฮณฯฮฌฯฮทฮบฮต ฯฯฮฟ ฯฯฯฯฮตฮนฯฮฟ",
-
- "ht_s1": "ฮดฮตฯ
ฯฮตฯฯฮปฮตฯฯฮฟ",
- "ht_s2": "ฮดฮตฯ
ฯฮตฯฯฮปฮตฯฯฮฑ",
- "ht_m1": "ฮปฮตฯฯฯ",
- "ht_m2": "ฮปฮตฯฯฮฌ",
- "ht_h1": "ฯฯฮฑ",
- "ht_h2": "ฯฯฮตฯ",
- "ht_d1": "ฮผฮญฯฮฑ",
- "ht_d2": "ฮผฮญฯฮตฯ",
- "ht_and": " ฮบฮฑฮน ",
-
- "goh": "ฯฮฏฮฝฮฑฮบฮฑฯ ฮตฮปฮญฮณฯฮฟฯ
",
- "gop": 'ฯฯฮฟฮทฮณฮฟฯฮผฮตฮฝฮฟฯ ฯฮฌฮบฮตฮปฮฟฯ ฯฯฮฟ ฮฏฮดฮนฮฟ ฮตฯฮฏฯฮตฮดฮฟ">ฯฯฮฟฮทฮณฮฟฯฮผฮตฮฝฮฟ',
- "gou": 'ฮณฮฟฮฝฮนฮบฯฯ ฯฮฌฮบฮตฮปฮฟฯ">ฯฮฌฮฝฯ',
- "gon": 'ฮตฯฯฮผฮตฮฝฮฟฯ ฯฮฌฮบฮตฮปฮฟฯ">ฮตฯฯฮผฮตฮฝฮฟ',
- "logout": "ฮฯฮฟฯฯฮฝฮดฮตฯฮท ",
- "login": "ฮฃฯฮฝฮดฮตฯฮท", //m
- "access": " ฯฯฯฯฮฒฮฑฯฮท",
- "ot_close": "ฮบฮปฮตฮฏฯฮนฮผฮฟ ฯ
ฯฮฟฮผฮตฮฝฮฟฯ",
- "ot_search": "ฮฑฮฝฮฑฮถฮฎฯฮทฯฮท ฮฑฯฯฮตฮฏฯฮฝ ฮผฮต ฮฒฮฌฯฮท ฯฮฑฯฮฑฮบฯฮทฯฮนฯฯฮนฮบฮฌ, ฮดฮนฮฑฮดฯฮฟฮผฮฎ / ฯฮฝฮฟฮผฮฑ, ฮผฮฟฯ
ฯฮนฮบฮฌ tags ฮฎ ฮฟฯฮฟฮนฮฟฮฝฮดฮฎฯฮฟฯฮต ฯฯ
ฮฝฮดฯ
ฮฑฯฮผฯ$N$N<code>foo bar</code> = ฯฯฮญฯฮตฮน ฮฝฮฑ ฯฮตฯฮนฮญฯฮตฮน ฮบฮฑฮน ฯฮฑ ยซfooยป ฮบฮฑฮน ยซbarยป,$N<code>foo -bar</code> = ฯฯฮญฯฮตฮน ฮฝฮฑ ฯฮตฯฮนฮญฯฮตฮน ฯฮฟ ยซfooยป ฮฑฮปฮปฮฌ ฯฯฮน ฯฮฟ ยซbarยป,$N<code>^yana .opus$</code> = ฮฝฮฑ ฮพฮตฮบฮนฮฝฮฌ ฮผฮต ยซyanaยป ฮบฮฑฮน ฮฝฮฑ ฮตฮฏฮฝฮฑฮน ฮฑฯฯฮตฮฏฮฟ ยซopusยป$N<code>"try unite"</code> = ฮฝฮฑ ฯฮตฯฮนฮญฯฮตฮน ฮฑฮบฯฮนฮฒฯฯ ยซtry uniteยป$N$Nฮท ฮผฮฟฯฯฮฎ ฮทฮผฮตฯฮฟฮผฮทฮฝฮฏฮฑฯ ฮตฮฏฮฝฮฑฮน iso-8601, ฯฯฯฯ$N<code>2009-12-31</code> ฮฎ <code>2020-09-12 23:30:00</code>",
- "ot_unpost": "unpost: ฮดฮนฮฑฮณฯฮฑฯฮฎ ฯฯฯฯฯฮฑฯฯฮฝ ฮผฮตฯฮฑฯฮฟฯฯฯฯฮตฯฮฝ ฮฎ ฮฑฮบฯฯฯฯฮท ฮฑฮฝฮฟฮปฮฟฮบฮปฮฎฯฯฯฯฮฝ",
- "ot_bup": "bup: ฮฒฮฑฯฮนฮบฯฯ uploader, ฯ
ฯฮฟฯฯฮทฯฮฏฮถฮตฮน ฮผฮญฯฯฮน ฮบฮฑฮน netscape 4.0",
- "ot_mkdir": "mkdir: ฮดฮทฮผฮนฮฟฯ
ฯฮณฮฏฮฑ ฮฝฮญฮฟฯ
ฯฮฑฮบฮญฮปฮฟฯ
",
- "ot_md": "new-md: ฮดฮทฮผฮนฮฟฯ
ฯฮณฮฏฮฑ ฮฝฮญฮฟฯ
markdown ฮตฮณฮณฯฮฌฯฮฟฯ
",
- "ot_msg": "msg: ฮฑฯฮฟฯฯฮฟฮปฮฎ ฮผฮทฮฝฯฮผฮฑฯฮฟฯ ฯฯฮฟ server log",
- "ot_mp": "ฮตฯฮนฮปฮฟฮณฮญฯ media player",
- "ot_cfg": "ฮตฯฮนฮปฮฟฮณฮญฯ ฯฯ
ฮธฮผฮฏฯฮตฯฮฝ",
- "ot_u2i": 'up2k: ฮฑฮฝฮญฮฒฮฑฯฮต ฮฑฯฯฮตฮฏฮฑ (ฮฑฮฝ ฮญฯฮตฮนฯ ฮดฮนฮบฮฑฮฏฯฮผฮฑ ฮตฮณฮณฯฮฑฯฮฎฯ) ฮฎ ฮตฮฝฮตฯฮณฮฟฯฮฟฮฏฮทฯฮต ฯฮท ฮปฮตฮนฯฮฟฯ
ฯฮณฮฏฮฑ ฮฑฮฝฮฑฮถฮฎฯฮทฯฮทฯ ฮณฮนฮฑ ฮฝฮฑ ฮดฮตฮนฯ ฮฑฮฝ ฯ
ฯฮฌฯฯฮฟฯ
ฮฝ ฮฎฮดฮท ฯฯฮฟ server$N$Nฮฟฮน ฮผฮตฯฮฑฯฮฟฯฯฯฯฮตฮนฯ ฯฯ
ฮฝฮตฯฮฏฮถฮฟฮฝฯฮฑฮน ฮฑฮฝ ฮดฮนฮฑฮบฮฟฯฮฟฯฮฝ, ฮตฮฏฮฝฮฑฮน ฯฮฟฮปฯ
ฮฝฮทฮผฮฑฯฮนฮบฮญฯ ฮบฮฑฮน ฮดฮนฮฑฯฮทฯฮฟฯฮฝ ฯฮนฯ ฯฯฮฟฮฝฮฟฯฯฯฮฑฮณฮฏฮดฮตฯ, ฮฑฮปฮปฮฌ ฮบฮฑฯฮฑฮฝฮฑฮปฯฮฝฮฟฯ
ฮฝ ฯฮตฯฮนฯฯฯฯฮตฯฮฟ CPU ฮฑฯฯ ฯฮฟฮฝ [๐] (ฮฒฮฑฯฮนฮบฯฯ uploader)
ฮบฮฑฯฮฌ ฯฮท ฮดฮนฮฌฯฮบฮตฮนฮฑ ฯฮทฯ ฮผฮตฯฮฑฯฯฯฯฯฯฮทฯ, ฮฑฯ
ฯฯ ฯฮฟ ฮตฮนฮบฮฟฮฝฮฏฮดฮนฮฟ ฮดฮตฮฏฯฮฝฮตฮน ฯฮทฮฝ ฯฯฯฮฟฮดฯ ฯฮทฯ!',
- "ot_u2w": 'up2k: ฮฑฮฝฮญฮฒฮฑฯฮต ฮฑฯฯฮตฮฏฮฑ ฮผฮต ฯ
ฯฮฟฯฯฮฎฯฮนฮพฮท ฯฯ
ฮฝฮญฯฮนฯฮทฯ (ฮบฮปฮตฮฏฯฮต ฯฮฟฮฝ browser ฮบฮฑฮน ฯฮฏฮพฮต ฯฮฑ ฮฏฮดฮนฮฑ ฮฑฯฯฮตฮฏฮฑ ฮพฮฑฮฝฮฌ ฮผฮตฯฮฌ)$N$Nฯฮฟฮปฯ
ฮฝฮทฮผฮฑฯฮนฮบฯ, ฮดฮนฮฑฯฮทฯฮตฮฏ ฯฮนฯ ฯฯฮฟฮฝฮฟฯฯฯฮฑฮณฮฏฮดฮตฯ, ฮฑฮปฮปฮฌ ฮบฮฑฯฮฑฮฝฮฑฮปฯฮฝฮตฮน ฯฮตฯฮนฯฯฯฯฮตฯฮฟ CPU ฮฑฯฯ ฯฮฟฮฝ [๐] (ฮฒฮฑฯฮนฮบฯฯ uploader)
ฮบฮฑฯฮฌ ฯฮท ฮดฮนฮฌฯฮบฮตฮนฮฑ ฯฮทฯ ฮผฮตฯฮฑฯฯฯฯฯฯฮทฯ, ฮฑฯ
ฯฯ ฯฮฟ ฮตฮนฮบฮฟฮฝฮฏฮดฮนฮฟ ฮดฮตฮฏฯฮฝฮตฮน ฯฮทฮฝ ฯฯฯฮฟฮดฯ ฯฮทฯ!',
- "ot_noie": 'ฮงฯฮทฯฮนฮผฮฟฯฮฟฮฏฮทฯฮต Chrome / Firefox / Edge',
-
- "ab_mkdir": "ฮดฮทฮผฮนฮฟฯ
ฯฮณฮฏฮฑ ฯฮฑฮบฮญฮปฮฟฯ
",
- "ab_mkdoc": "ฮฝฮญฮฟ markdown ฮญฮณฮณฯฮฑฯฮฟ",
- "ab_msg": "ฯฯฮตฮฏฮปฮต ฮผฮฎฮฝฯ
ฮผฮฑ ฯฯฮฟ server log",
-
- "ay_path": "ฯฮฎฮณฮฑฮนฮฝฮต ฯฮต ฯฮฑฮบฮญฮปฮฟฯ
ฯ",
- "ay_files": "ฯฮฎฮณฮฑฮนฮฝฮต ฯฮต ฮฑฯฯฮตฮฏฮฑ",
-
- "wt_ren": "ฮผฮตฯฮฟฮฝฮฟฮผฮฑฯฮฏฮฑ ฮตฯฮนฮปฮตฮณฮผฮญฮฝฯฮฝ$Nฮฃฯ
ฮฝฯฯฮผฮตฯ
ฯฮท: F2",
- "wt_del": "ฮดฮนฮฑฮณฯฮฑฯฮฎ ฮตฯฮนฮปฮตฮณฮผฮญฮฝฯฮฝ$Nฮฃฯ
ฮฝฯฯฮผฮตฯ
ฯฮท: ctrl-K",
- "wt_cut": "ฮฑฯฮฟฮบฮฟฯฮฎ ฮตฯฮนฮปฮตฮณฮผฮญฮฝฯฮฝ <small>(ฮบฮฑฮน ฮตฯฮนฮบฯฮปฮปฮทฯฮท ฮฑฮปฮปฮฟฯ)</small>$Nฮฃฯ
ฮฝฯฯฮผฮตฯ
ฯฮท: ctrl-X",
- "wt_cpy": "ฮฑฮฝฯฮนฮณฯฮฑฯฮฎ ฮตฯฮนฮปฮตฮณฮผฮญฮฝฯฮฝ ฯฯฮฟ ฯฯฯฯฮตฮนฯฮฟ$N(ฮณฮนฮฑ ฮตฯฮนฮบฯฮปฮปฮทฯฮท ฮฑฮปฮปฮฟฯ)$Nฮฃฯ
ฮฝฯฯฮผฮตฯ
ฯฮท: ctrl-C",
- "wt_pst": "ฮตฯฮนฮบฯฮปฮปฮทฯฮท ฮฑฯฮฟฮบฮฟฮผฮผฮญฮฝฯฮฝ / ฮฑฮฝฯฮตฮณฯฮฑฮผฮผฮญฮฝฯฮฝ$Nฮฃฯ
ฮฝฯฯฮผฮตฯ
ฯฮท: ctrl-V",
- "wt_selall": "ฮตฯฮนฮปฮฟฮณฮฎ ฯฮปฯฮฝ$Nฮฃฯ
ฮฝฯฯฮผฮตฯ
ฯฮท: ctrl-A (ฮผฮต ฯฮฟ ฮฑฯฯฮตฮฏฮฟ ฮตฯฮนฮปฮตฮณฮผฮญฮฝฮฟ)",
- "wt_selinv": "ฮฑฮฝฯฮนฯฯฯฮฟฯฮฎ ฮตฯฮนฮปฮฟฮณฮฎฯ",
- "wt_zip1": "ฮบฮฑฯฮญฮฒฮฑฯฮผฮฑ ฯฮฑฮบฮญฮปฮฟฯ
ฯฯ ฯฯ
ฮผฯฮนฮตฯฮผฮญฮฝฮฟ ฮฑฯฯฮตฮฏฮฟ",
- "wt_selzip": "ฮบฮฑฯฮญฮฒฮฑฯฮผฮฑ ฮตฯฮนฮปฮฟฮณฮฎฯ ฯฯ ฯฯ
ฮผฯฮนฮตฯฮผฮญฮฝฮฟ ฮฑฯฯฮตฮฏฮฟ",
- "wt_seldl": "ฮบฮฑฯฮญฮฒฮฑฯฮผฮฑ ฮตฯฮนฮปฮฟฮณฮฎฯ ฯฯ ฮผฮตฮผฮฟฮฝฯฮผฮญฮฝฮฑ ฮฑฯฯฮตฮฏฮฑ$Nฮฃฯ
ฮฝฯฯฮผฮตฯ
ฯฮท: Y",
- "wt_npirc": "ฮฑฮฝฯฮนฮณฯฮฑฯฮฎ ฯฮปฮทฯฮฟฯฮฟฯฮนฯฮฝ ฯฯฮฑฮณฮฟฯ
ฮดฮนฮฟฯ ฯฮต ฮผฮฟฯฯฮฎ irc",
- "wt_nptxt": "ฮฑฮฝฯฮนฮณฯฮฑฯฮฎ ฯฮปฮทฯฮฟฯฮฟฯฮนฯฮฝ ฯฯฮฑฮณฮฟฯ
ฮดฮนฮฟฯ ฯฯ ฮบฮตฮฏฮผฮตฮฝฮฟ",
- "wt_m3ua": "ฯฯฮฟฯฮธฮฎฮบฮท ฯฮต m3u ฮปฮฏฯฯฮฑ ฮฑฮฝฮฑฯฮฑฯฮฑฮณฯฮณฮฎฯ (ฮผฮตฯฮฌ ฯฮฌฯฮทฯฮต ๐ปฮฑฮฝฯฮนฮณฯฮฑฯฮฎ)",
- "wt_m3uc": "ฮฑฮฝฯฮนฮณฯฮฑฯฮฎ m3u ฮปฮฏฯฯฮฑฯ ฮฑฮฝฮฑฯฮฑฯฮฑฮณฯฮณฮฎฯ ฯฯฮฟ ฯฯฯฯฮตฮนฯฮฟ",
- "wt_grid": "ฮตฮฝฮฑฮปฮปฮฑฮณฮฎ ฯฮปฮญฮณฮผฮฑฯฮฟฯ / ฮปฮฏฯฯฮฑฯ$Nฮฃฯ
ฮฝฯฯฮผฮตฯ
ฯฮท: G",
- "wt_prev": "ฯฯฮฟฮทฮณฮฟฯฮผฮตฮฝฮฟ ฮบฮฟฮผฮผฮฌฯฮน$Nฮฃฯ
ฮฝฯฯฮผฮตฯ
ฯฮท: J",
- "wt_play": "ฮฑฮฝฮฑฯฮฑฯฮฑฮณฯฮณฮฎ / ฯฮฑฯฯฮท$Nฮฃฯ
ฮฝฯฯฮผฮตฯ
ฯฮท: P",
- "wt_next": "ฮตฯฯฮผฮตฮฝฮฟ ฮบฮฟฮผฮผฮฌฯฮน$Nฮฃฯ
ฮฝฯฯฮผฮตฯ
ฯฮท: L",
-
- "ul_par": "ฯฮฑฯฮฌฮปฮปฮทฮปฮตฯ ฮผฮตฯฮฑฯฮฟฯฯฯฯฮตฮนฯ:",
- "ut_rand": "ฯฯ
ฯฮฑฮนฮฟฯฮฟฮฏฮทฯฮท ฮฟฮฝฮฟฮผฮฌฯฯฮฝ ฮฑฯฯฮตฮฏฯฮฝ",
- "ut_u2ts": "ฮฑฮฝฯฮนฮณฯฮฑฯฮฎ ฯฮทฯ ฯฮตฮปฮตฯ
ฯฮฑฮฏฮฑฯ ฯฯฮฟฯฮฟฯฮฟฮนฮทฮผฮญฮฝฮทฯ ฯฯฮฟฮฝฮฟฯฯฯฮฑฮณฮฏฮดฮฑฯ ฮฑฮปฮปฮฑฮณฮฎฯ$Nฮฑฯฯ ฯฮฟ ฯฯฯฯฮทฮผฮฌ ฯฮฟฯ
ฯฯฮฟฮฝ server\">๐
",
- "ut_ow": "ฮฑฮฝฯฮนฮบฮฑฯฮฌฯฯฮฑฯฮท ฯฮต ฮฎฮดฮท ฯ
ฯฮฌฯฯฮฟฮฝฯฮฑ ฮฑฯฯฮตฮฏฮฑ ฯฮฟฯ
server?$N๐ก๏ธ: ฯฮฟฯฮญ (ฮธฮฑ ฮดฮทฮผฮนฮฟฯ
ฯฮณฮทฮธฮตฮฏ ฮฝฮญฮฟ ฯฮฝฮฟฮผฮฑ)$N๐: ฮฑฮฝ ฯฮฟ ฮฑฯฯฮตฮฏฮฟ ฯฮฟฯ
server ฮตฮฏฮฝฮฑฮน ฯฮฑฮปฮฑฮนฯฯฮตฯฮฟ$Nโป๏ธ: ฯฮฌฮฝฯฮฑ ฮฝฮฑ ฮฑฮฝฯฮนฮบฮฑฮธฮฏฯฯฮฑฮฝฯฮฑฮน ฮฑฮฝ ฮดฮนฮฑฯฮญฯฮฟฯ
ฮฝ",
- "ut_mt": "ฯฯ
ฮฝฮญฯฮนฯฮท ฯ
ฯฮฟฮปฮฟฮณฮนฯฮผฮฟฯ hash ฮณฮนฮฑ ฮฌฮปฮปฮฑ ฮฑฯฯฮตฮฏฮฑ ฮบฮฑฯฮฌ ฯฮท ฮผฮตฯฮฑฯฯฯฯฯฯฮท$N$Nฮฑฯฮตฮฝฮตฯฮณฮฟฯฮฟฮฏฮทฯฮญ ฯฮฟ ฮฑฮฝ ฮท CPU ฮฎ ฮฟ ฮดฮฏฯฮบฮฟฯ ฯฮฟฯ
ฮถฮฟฯฮฏฮถฮฟฮฝฯฮฑฮน",
- "ut_ask": 'ฮตฯฮนฮฒฮตฮฒฮฑฮฏฯฯฮท ฯฯฮนฮฝ ฮพฮตฮบฮนฮฝฮฎฯฮตฮน ฮท ฮผฮตฯฮฑฯฯฯฯฯฯฮท">๐ญ',
- "ut_pot": "ฮฒฮตฮปฯฮฏฯฯฮท ฯฮฑฯฯฯฮทฯฮฑฯ ฮผฮตฯฮฑฯฯฯฯฯฯฮทฯ ฯฮต ฮฑฯฮณฮญฯ ฯฯ
ฯฮบฮตฯ
ฮญฯ$Nฮผฮต ฮฑฯฮปฮฟฯฮฟฮฏฮทฯฮท ฯฮฟฯ
UI",
- "ut_srch": "ฮผฮทฮฝ ฮฑฮฝฮตฮฒฮฌฮถฮตฮนฯ, ฮญฮปฮตฮณฮพฮต ฮฑฮฝ ฯฮฑ ฮฑฯฯฮตฮฏฮฑ$Nฯ
ฯฮฌฯฯฮฟฯ
ฮฝ ฮฎฮดฮท ฯฯฮฟฮฝ server (ฯฮฌฯฮฝฮตฮน ฯฮต ฯฮปฮฟฯ
ฯ ฯฮฟฯ
ฯ ฯฮฑฮบฮญฮปฮฟฯ
ฯ ฯฮฟฯ
ฮญฯฮตฮนฯ ฯฯฯฯฮฒฮฑฯฮท)",
- "ut_par": "ฮบฮฌฮฝฮต ฯฮฑฯฯฮท ฯฯฮนฯ ฮผฮตฯฮฑฯฮฟฯฯฯฯฮตฮนฯ ฮฒฮฌฮถฮฟฮฝฯฮฌฯ ฯฮฟ 0$N$Nฮฑฯฮพฮทฯฮต ฯฮฟ ฮฑฮฝ ฮญฯฮตฮนฯ ฮฑฯฮณฮฎ/ฮผฮตฮณฮฌฮปฮท ฮบฮฑฮธฯ
ฯฯฮญฯฮทฯฮท ฯฯฮฝฮดฮตฯฮทฯ$N$Nฮบฯฮฌฯฮฑ ฯฮฟ 1 ฯฮต LAN ฮฎ ฮฑฮฝ ฮฟ server ฮญฯฮตฮน ฮฑฯฮณฯ ฮดฮฏฯฮบฮฟ",
- "ul_btn": "ฯฮฏฮพฮต ฮฑฯฯฮตฮฏฮฑ / ฯฮฑฮบฮญฮปฮฟฯ
ฯ
ฮตฮดฯ (ฮฎ ฮบฮฌฮฝฮต ฮบฮปฮนฮบ ฯฮต ฮผฮญฮฝฮฑ)",
- "ul_btnu": "ฮ ฮ ฮค ฮ ฮฆ ฮ ฮก ฮค ฮฉ ฮฃ ฮ",
- "ul_btns": "ฮ ฮ ฮ ฮ ฮ ฮค ฮ ฮฃ ฮ",
-
- "ul_hash": "ฯ
ฯฮฟฮปฮฟฮณฮนฯฮผฯฯ hash",
- "ul_send": "ฮฑฯฮฟฯฯฮฟฮปฮฎ",
- "ul_done": "ฮฟฮปฮฟฮบฮปฮทฯฯฮธฮทฮบฮต",
- "ul_idle1": "ฮบฮฑฮผฮฏฮฑ ฮผฮตฯฮฑฯฯฯฯฯฯฮท ฯฯฮทฮฝ ฮฟฯ
ฯฮฌ ฮณฮนฮฑ ฯฮทฮฝ ฯฯฮฑ",
- "ut_etah": "ฮผฮญฯฮท ฯฮฑฯฯฯฮทฯฮฑ <em>ฯ
ฯฮฟฮปฮฟฮณฮนฯฮผฮฟฯ hash</em> ฮบฮฑฮน ฮตฮบฯฮฏฮผฮทฯฮท ฯฯฯฮฝฮฟฯ
ฮผฮญฯฯฮน ฯฮทฮฝ ฮฟฮปฮฟฮบฮปฮฎฯฯฯฮท",
- "ut_etau": "ฮผฮญฯฮท ฯฮฑฯฯฯฮทฯฮฑ <em>ฮผฮตฯฮฑฯฯฯฯฯฯฮทฯ</em> ฮบฮฑฮน ฮตฮบฯฮฏฮผฮทฯฮท ฯฯฯฮฝฮฟฯ
ฮผฮญฯฯฮน ฯฮทฮฝ ฮฟฮปฮฟฮบฮปฮฎฯฯฯฮท",
- "ut_etat": "ฮผฮญฯฮท <em>ฯฯ
ฮฝฮฟฮปฮนฮบฮฎ</em> ฯฮฑฯฯฯฮทฯฮฑ ฮบฮฑฮน ฮตฮบฯฮฏฮผฮทฯฮท ฯฯฯฮฝฮฟฯ
ฮผฮญฯฯฮน ฯฮทฮฝ ฮฟฮปฮฟฮบฮปฮฎฯฯฯฮท",
-
- "uct_ok": "ฮฟฮปฮฟฮบฮปฮทฯฯฮธฮทฮบฮต ฮตฯฮนฯฯ
ฯฯฯ",
- "uct_ng": "no-good: ฮฑฯฮญฯฯ
ฯฮต / ฮฑฯฮฟฯฯฮฏฯฮธฮทฮบฮต / ฮดฮตฮฝ ฮฒฯฮญฮธฮทฮบฮต",
- "uct_done": "ฮฟฮปฮฟฮบฮปฮทฯฯฮผฮญฮฝฮฑ ฮบฮฑฮน ฮฑฯฮฟฯฯ
ฯฮทฮผฮญฮฝฮฑ",
- "uct_bz": "ฮบฮฌฮฝฮตฮน hash ฮฎ ฮผฮตฯฮฑฯฮฟฯฯฯฮฝฮตฮน",
- "uct_q": "ฯฮต ฮฑฮฝฮฑฮผฮฟฮฝฮฎ, ฮตฮบฮบฯฮตฮผฮตฮฏ",
-
- "utl_name": "ฯฮฝฮฟฮผฮฑ ฮฑฯฯฮตฮฏฮฟฯ
",
- "utl_ulist": "ฮปฮฏฯฯฮฑ",
- "utl_ucopy": "ฮฑฮฝฯฮนฮณฯฮฑฯฮฎ",
- "utl_links": "ฯฯฮฝฮดฮตฯฮผฮฟฮน",
- "utl_stat": "ฮบฮฑฯฮฌฯฯฮฑฯฮท",
- "utl_prog": "ฯฯฯฮฟฮดฮฟฯ",
-
- // keep short:
- "utl_404": "404",
- "utl_err": "ฮฃฮฆฮฮฮฮ",
- "utl_oserr": "ฮฃฮฆ-ฮฮ",
- "utl_found": "ฮฒฯฮญฮธฮทฮบฮต",
- "utl_defer": "ฮฑฮฝฮฑฮฒฮฟฮปฮฎ",
- "utl_yolo": "YOLO",
- "utl_done": "ฮญฮณฮนฮฝฮต",
-
- "ul_flagblk": "ฯฮฑ ฮฑฯฯฮตฮฏฮฑ ฯฯฮฟฯฯฮญฮธฮทฮบฮฑฮฝ ฯฯฮทฮฝ ฮฟฯ
ฯฮฌ
ฮฑฮปฮปฮฌ ฯ
ฯฮฌฯฯฮตฮน ฮฌฮปฮปฮท ฮตฮฝฮตฯฮณฮฎ ฮผฮตฯฮฑฯฯฯฯฯฯฮท ฯฮต ฮฌฮปฮปฮท ฮบฮฑฯฯฮญฮปฮฑ,
ฮฟฯฯฯฮต ฯฮตฯฮฏฮผฮตฮฝฮต ฮฝฮฑ ฯฮตฮปฮตฮนฯฯฮตฮน ฮฑฯ
ฯฯ ฯฯฯฯฮฑ",
- "ul_btnlk": "ฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎฯ ฮญฯฮตฮน ฮบฮปฮตฮนฮดฯฯฮตฮน ฮฑฯ
ฯฮฎฮฝ ฯฮทฮฝ ฮตฯฮนฮปฮฟฮณฮฎ ฯฮต ฮฑฯ
ฯฮฎฮฝ ฯฮทฮฝ ฮบฮฑฯฮฌฯฯฮฑฯฮท",
-
- "udt_up": "ฮฮตฯฮฑฯฯฯฯฯฯฮท",
- "udt_srch": "ฮฮฝฮฑฮถฮฎฯฮทฯฮท",
- "udt_drop": "ฯฮฏฮพ' ฯฮฟ ฮตฮดฯ",
-
- "u_nav_m": 'ฮฟฮบ, ฯฮน ฮญฯฮฟฯ
ฮผฮต ฮตฮดฯ;
Enter = ฮฯฯฮตฮฏฮฑ (ฮญฮฝฮฑ ฮฎ ฯฮตฯฮนฯฯฯฯฮตฯฮฑ)\nESC = ฮฮฝฮฑฯ ฯฮฌฮบฮตฮปฮฟฯ (ฮผฮฑฮถฮฏ ฮผฮต ฯ
ฯฮฟฯฮฑฮบฮญฮปฮฟฯ
ฯ)',
- "u_nav_b": 'ฮฯฯฮตฮฏฮฑฮฮฝฮฑฯ ฯฮฌฮบฮตฮปฮฟฯ',
-
- "cl_opts": "ฮดฮนฮฑฮบฯฯฯฮตฯ",
- "cl_themes": "ฮธฮญฮผฮฑ",
- "cl_langs": "ฮณฮปฯฯฯฮฑ",
- "cl_ziptype": "ฮปฮฎฯฮท ฯฮฑฮบฮญฮปฮฟฯ
",
- "cl_uopts": "ฮดฮนฮฑฮบฯฯฯฮตฯ ฮผฮตฯฮฑฯฯฯฯฯฯฮทฯ",
- "cl_favico": "favicon",
- "cl_bigdir": "ฮผฮตฮณฮฌฮปฮฟฮน ฯฮฌฮบฮตฮปฮฟฮน",
- "cl_hsort": "#ฯฮฑฮพฮนฮฝฯฮผฮทฯฮท",
- "cl_keytype": "ฯฮทฮผฮตฮฏฯฯฮท ฯฮปฮฎฮบฯฯฯฮฝ",
- "cl_hiddenc": "ฮบฯฯ
ฯฮญฯ ฯฯฮฎฮปฮตฯ",
- "cl_hidec": "ฮบฯฯฯฮต",
- "cl_reset": "ฮตฯฮฑฮฝฮตฮบฮบฮฏฮฝฮทฯฮท",
- "cl_hpick": "ฯฮฌฯฮทฯฮต ฯฯฮนฯ ฮบฮตฯฮฑฮปฮฏฮดฮตฯ ฯฯฮทฮปฯฮฝ ฮณฮนฮฑ ฮฝฮฑ ฯฮนฯ ฮบฯฯฯฮตฮนฯ ฯฯฮฟฮฝ ฯฮฏฮฝฮฑฮบฮฑ ฯฮฑฯฮฑฮบฮฌฯฯ",
- "cl_hcancel": "ฮท ฮฑฯฯฮบฯฯ
ฯฮท ฯฯฮทฮปฯฮฝ ฮฑฮบฯ
ฯฯฮธฮทฮบฮต",
-
- "ct_grid": '็ฐ ฯฮฟ ฯฮปฮญฮณฮผฮฑ',
- "ct_ttips": 'โ โก โ">โน๏ธ ฯฯ
ฮผฮฒฮฟฯ
ฮปฮญฯ ฮตฯฮณฮฑฮปฮตฮฏฯฮฝ',
- "ct_thumb": 'ฯฮต ฯฯฮฟฮฒฮฟฮปฮฎ ฯฮปฮญฮณฮผฮฑฯฮฟฯ, ฮตฮฝฮฑฮปฮปฮฑฮณฮฎ ฮตฮนฮบฮฟฮฝฮนฮดฮฏฯฮฝ ฮฎ ฮผฮนฮบฯฮฟฮณฯฮฑฯฮนฯฮฝ$Nฮ ฮปฮฎฮบฯฯฮฟ ฯฯ
ฮฝฯฯฮผฮตฯ
ฯฮทฯ: T">๐ผ๏ธ ฮผฮนฮบฯฮฟฮณฯฮฑฯฮฏฮตฯ',
- "ct_csel": 'ฯฯฮทฯฮนฮผฮฟฯฮฟฮฏฮทฯฮต CTRL ฮบฮฑฮน SHIFT ฮณฮนฮฑ ฮตฯฮนฮปฮฟฮณฮฎ ฮฑฯฯฮตฮฏฯฮฝ ฯฮต ฯฯฮฟฮฒฮฟฮปฮฎ ฯฮปฮญฮณฮผฮฑฯฮฟฯ">ฮตฯฮนฮปฮฟฮณฮฎ',
- "ct_ihop": 'ฯฯฮฑฮฝ ฮท ฯฯฮฟฮฒฮฟฮปฮฎ ฮตฮนฮบฯฮฝฯฮฝ ฮบฮปฮตฮฏฮฝฮตฮน, ฮบฮฌฮฝฮต scroll ฯฯฮฟ ฯฮตฮปฮตฯ
ฯฮฑฮฏฮฟ ฯฯฮฟฮฒฮฑฮปฮปฯฮผฮตฮฝฮฟ ฮฑฯฯฮตฮฏฮฟ">gโฎฏ',
- "ct_dots": 'ฮตฮผฯฮฌฮฝฮนฯฮท ฮบฯฯ
ฯฯฮฝ ฮฑฯฯฮตฮฏฯฮฝ (ฮฑฮฝ ฯฮฟ ฮตฯฮนฯฯฮญฯฮตฮน ฮฟ server)">dotfiles',
- "ct_qdel": 'ฯฯฮฑฮฝ ฮดฮนฮฑฮณฯฮฌฯฮตฮนฯ ฮฑฯฯฮตฮฏฮฑ, ฮถฮฎฯฮฑ ฮตฯฮนฮฒฮตฮฒฮฑฮฏฯฯฮท ฮผฯฮฝฮฟ ฮผฮฏฮฑ ฯฮฟฯฮฌ">ฮณฯฮฎฮณฮฟฯฮท ฮดฮนฮฑฮณฯฮฑฯฮฎ',
- "ct_dir1st": 'ฯฮฑฮพฮนฮฝฯฮผฮทฯฮท ฯฮฑฮบฮญฮปฯฮฝ ฯฯฮนฮฝ ฮฑฯฯ ฯฮฑ ฮฑฯฯฮตฮฏฮฑ">๐ ฯฯฯฯฮฑ',
- "ct_nsort": 'ฯฯ
ฯฮนฮบฮฎ ฯฮฑฮพฮนฮฝฯฮผฮทฯฮท (ฮณฮนฮฑ ฮฟฮฝฯฮผฮฑฯฮฑ ฮฑฯฯฮตฮฏฯฮฝ ฮผฮต ฮฑฯฮนฮธฮผฮฟฯฯ ฯฯฮทฮฝ ฮฑฯฯฮฎ)">ฯฯ
ฯฮนฮบฮฎ ฯฮฑฮพฮนฮฝฯฮผฮทฯฮท',
- "ct_utc": 'ฮตฮผฯฮฌฮฝฮนฯฮท ฯฮปฯฮฝ ฯฯฮฝ ฮทฮผฮตฯฮฟฮผฮทฮฝฮนฯฮฝ ฯฮต UTC">UTC',
- "ct_readme": 'ฮตฮผฯฮฌฮฝฮนฯฮท README.md ฯฯฮนฯ ฮปฮฏฯฯฮตฯ ฯฮฑฮบฮญฮปฯฮฝ">๐ ฯฮปฮทฯฮฟฯฮฟฯฮฏฮตฯ',
- "ct_idxh": 'ฮตฮผฯฮฌฮฝฮนฯฮท index.html ฮฑฮฝฯฮฏ ฮณฮนฮฑ ฮปฮฏฯฯฮฑ ฯฮฑฮบฮญฮปฯฮฝ">html',
- "ct_sbars": 'ฮตฮผฯฮฌฮฝฮนฯฮท ฮผฯฮฑฯฯฮฝ ฮบฯฮปฮนฯฮทฯ">โ',
-
- "cut_umod": "ฮฑฮฝ ฯฮฟ ฮฑฯฯฮตฮฏฮฟ ฯ
ฯฮฌฯฯฮตฮน ฮฎฮดฮท ฯฯฮฟฮฝ server, ฮตฮฝฮทฮผฮญฯฯฯฮญ ฯฮฟ ฮผฮต ฯฮทฮฝ ฯฮตฮปฮตฯ
ฯฮฑฮฏฮฑ ฯฯฮฟฮฝฮฟฯฯฯฮฑฮณฮฏฮดฮฑ ฯฯฮฟฯฮฟฯฮฟฮฏฮทฯฮทฯ ฮณฮนฮฑ ฮฝฮฑ ฯฮฑฮนฯฮนฮฌฮถฮตฮน ฮผฮต ฯฮฟ ฯฮฟฯฮนฮบฯ ฮฑฯฯฮตฮฏฮฟ (ฮฑฯฮฑฮนฯฮตฮฏ ฮดฮนฮบฮฑฮนฯฮผฮฑฯฮฑ ฮตฮณฮณฯฮฑฯฮฎฯ+ฮดฮนฮฑฮณฯฮฑฯฮฎฯ)\">re๐
",
-
- "cut_turbo": "ฯฮฟ ฮบฮฟฯ
ฮผฯฮฏ yolo, ฯฮนฮธฮฑฮฝฯฮฝ ฮฝฮฑ ฮฮฮ ฮฮฮฮฮฮฃ ฮฝฮฑ ฯฮฟ ฮตฮฝฮตฯฮณฮฟฯฮฟฮนฮฎฯฮตฮนฯ:$N$Nฯฯฮทฯฮนฮผฮฟฯฮฟฮฏฮทฯฮญ ฯฮฟ ฮฑฮฝ ฮผฮตฯฮฑฯฮฟฯฯฯฮฝฮตฮนฯ ฯฮฟฮปฮปฮฌ ฮฑฯฯฮตฮฏฮฑ ฮบฮฑฮน ฯฯฮตฮนฮฌฯฯฮทฮบฮต ฮฝฮฑ ฮพฮฑฮฝฮฑฯฯฮฏฯฮตฮนฯ, ฮบฮฑฮน ฮธฮตฯ ฮฝฮฑ ฯฯ
ฮฝฮตฯฮฏฯฮตฮนฯ ฯฮท ฮผฮตฯฮฑฯฯฯฯฯฯฮท ฯฯฮฟ ฯฮฟ ฮดฯ
ฮฝฮฑฯฯฮฝ ฯฮนฮฟ ฮณฯฮฎฮณฮฟฯฮฑ$N$Nฮฑฮฝฯฮนฮบฮฑฮธฮนฯฯฮฌ ฯฮฟฮฝ ฮญฮปฮตฮณฯฮฟ hash ฮผฮต ฮฑฯฮปฯ "ฮญฯฮตฮน ฯฮฟ ฮฏฮดฮนฮฟ ฮผฮญฮณฮตฮธฮฟฯ ฮฑฯฯฮตฮฏฮฟฯ
ฯฯฮฟฮฝ server?" ฮฟฯฯฯฮต ฮฑฮฝ ฯฮฟ ฯฮตฯฮนฮตฯฯฮผฮตฮฝฮฟ ฮตฮฏฮฝฮฑฮน ฮดฮนฮฑฯฮฟฯฮตฯฮนฮบฯ, ฮฮฮ ฮธฮฑ ฮฑฮฝฮญฮฒฮตฮน$N$Nฯฯฮญฯฮตฮน ฮฝฮฑ ฯฮฟ ฮบฮปฮตฮฏฯฮตฮนฯ ฯฯฮฑฮฝ ฯฮตฮปฮตฮนฯฯฮตฮน ฮท ฮผฮตฯฮฑฯฯฯฯฯฯฮท ฮบฮฑฮน ฮผฮตฯฮฌ ฮฝฮฑ "ฮผฮตฯฮฑฯฮฟฯฯฯฯฮตฮนฯ" ฯฮฌฮปฮน ฯฮฑ ฮฏฮดฮนฮฑ ฮฑฯฯฮตฮฏฮฑ ฮณฮนฮฑ ฮฝฮฑ ฯฮฑ ฮตฯฮนฮฒฮตฮฒฮฑฮนฯฯฮตฮน ฯฮฟ ฯฮฟฯฮนฮบฯ ฯฮฟฯ
ฯฯฯฮณฯฮฑฮผฮผฮฑ\">turbo",
-
- "cut_datechk": "ฮดฮตฮฝ ฮตฯฮทฯฮตฮฌฮถฮตฮน ฯฮฏฯฮฟฯฮฑ ฮตฮบฯฯฯ ฮฑฮฝ ฯฮฟ turbo ฮตฮฏฮฝฮฑฮน ฮตฮฝฮตฯฮณฮฟฯฮฟฮนฮทฮผฮญฮฝฮฟ$N$Nฮผฮตฮนฯฮฝฮตฮน ฮปฮฏฮณฮฟ ฯฮฟฮฝ ฯฮฑฯฮฌฮณฮฟฮฝฯฮฑ yolo; ฮตฮปฮญฮณฯฮตฮน ฮฑฮฝ ฮฟฮน ฯฯฮฟฮฝฮฟฯฯฯฮฑฮณฮฏฮดฮตฯ ฯฯฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ ฯฮฑฮนฯฮนฮฌฮถฮฟฯ
ฮฝ ฮผฮต ฯฮฑ ฮดฮนฮบฮฌ ฯฮฟฯ
$N$Nฯฮนฮฌฮฝฮตฮน ฮธฮตฯฯฮทฯฮนฮบฮฌ ฯฮนฯ ฯฮตฯฮนฯฯฯฯฮตฯฮตฯ ฮผฮนฯฮฟฯฮตฮปฮตฮนฯฮผฮญฮฝฮตฯ/ฮบฮฑฯฮตฯฯฯฮฑฮผฮผฮญฮฝฮตฯ ฮผฮตฯฮฑฯฮฟฯฯฯฯฮตฮนฯ, ฮฑฮปฮปฮฌ ฮดฮตฮฝ ฮฑฮฝฯฮนฮบฮฑฮธฮนฯฯฮฌ ฯฮฟฮฝ ฮญฮปฮตฮณฯฮฟ ฮผฮต ฯฮฟ turbo ฮฑฯฮตฮฝฮตฯฮณฮฟฯฮฟฮนฮทฮผฮญฮฝฮฟ ฮผฮตฯฮญฯฮตฮนฯฮฑ\">ฮญฮปฮตฮณฯฮฟฯ ฮทฮผฮตฯฮฟฮผฮทฮฝฮฏฮฑฯ",
-
- "cut_u2sz": "ฮผฮญฮณฮตฮธฮฟฯ (ฯฮต MiB) ฮบฮฌฮธฮต ฮบฮฟฮผฮผฮฑฯฮนฮฟฯ ฮผฮตฯฮฑฯฯฯฯฯฯฮทฯ; ฮผฮตฮณฮฌฮปฮตฯ ฯฮนฮผฮญฯ ฮปฮตฮนฯฮฟฯ
ฯฮณฮฟฯฮฝ ฮบฮฑฮปฯฯฮตฯฮฑ ฯฮต ฮผฮตฮณฮฑฮปฯฯฮตฯฮตฯ ฮฑฯฮฟฯฯฮฌฯฮตฮนฯ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ-ฯฮตฮปฮฌฯฮท. ฮฮฟฮบฮฏฮผฮฑฯฮต ฮผฮนฮบฯฮญฯ ฯฮนฮผฮญฯ ฯฮต ฯฮฟฮปฯ ฮฌฯฯฮฑฯฮตฯ ฯฯ
ฮฝฮดฮญฯฮตฮนฯ",
-
- "cut_flag": "ฮตฮพฮฑฯฯฮฑฮปฮฏฮถฮตฮน ฯฯฮน ฮผฯฮฝฮฟ ฮผฮฏฮฑ ฮบฮฑฯฯฮญฮปฮฑ ฮผฮตฯฮฑฯฮฟฯฯฯฮฝฮตฮน ฮบฮฌฮธฮต ฯฮฟฯฮฌ $N -- ฮฟฮน ฮฌฮปฮปฮตฯ ฮบฮฑฯฯฮญฮปฮตฯ ฯฯฮญฯฮตฮน ฮฝฮฑ ฯฮฟ ฮญฯฮฟฯ
ฮฝ ฮบฮน ฮฑฯ
ฯฮญฯ ฮตฮฝฮตฯฮณฯ $N -- ฮตฯฮทฯฮตฮฌฮถฮตฮน ฮผฯฮฝฮฟ ฯฮนฯ ฮบฮฑฯฯฮญฮปฮตฯ ฯฮฟฯ
ฮฒฯฮฏฯฮบฮฟฮฝฯฮฑฮน ฯฯฮฟ ฮฏฮดฮนฮฟ ฮดฮนฮตฯฮธฯ
ฮฝฯฮท",
-
- "cut_az": "ฮผฮตฯฮฑฯฯฯฯฯฯฮต ฯฮฑ ฮฑฯฯฮตฮฏฮฑ ฮฑฮปฯฮฑฮฒฮทฯฮนฮบฮฌ, ฮฑฮฝฯฮฏ ฮณฮนฮฑ ฯฮฟ ฮผฮนฮบฯฯฯฮตฯฮฟ ฮฑฯฯฮตฮฏฮฟ, ฯฯฯฯฮฑ$N$Nฮท ฮฑฮปฯฮฑฮฒฮทฯฮนฮบฮฎ ฯฮตฮนฯฮฌ ฮฒฮฟฮทฮธฮฌ ฮฝฮฑ ฮบฮฑฯฮฑฮปฮฌฮฒฮตฮนฯ ฮฑฮฝ ฮบฮฌฯฮน ฯฮฌฮปฮฑฯฮต ฯฯฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ ฮฑฮปฮปฮฌ ฮบฮฌฮฝฮตฮน ฯฮฟ ฮฑฮฝฮญฮฒฮฑฯฮผฮฑ ฮปฮฏฮณฮฟ ฯฮนฮฟ ฮฑฯฮณฯ ฯฮต fiber / LAN",
-
- "cut_nag": "ฮตฮนฮดฮฟฯฮฟฮฏฮทฯฮท ฮปฮตฮนฯฮฟฯ
ฯฮณฮนฮบฮฟฯ ฯฯ
ฯฯฮฎฮผฮฑฯฮฟฯ ฯฯฮฑฮฝ ฯฮตฮปฮตฮนฯฯฮตฮน ฮท ฮผฮตฯฮฑฯฯฯฯฯฯฮท$N(ฮผฯฮฝฮฟ ฮฑฮฝ ฮฟ browser ฮฎ ฮท ฮบฮฑฯฯฮญฮปฮฑ ฮดฮตฮฝ ฮตฮฏฮฝฮฑฮน ฮตฮฝฮตฯฮณฮฌ)",
- "cut_sfx": "ฮทฯฮทฯฮนฮบฮฎ ฮตฮนฮดฮฟฯฮฟฮฏฮทฯฮท ฯฯฮฑฮฝ ฯฮตฮปฮตฮนฯฯฮตฮน ฮท ฮผฮตฯฮฑฯฯฯฯฯฯฮท$N(ฮผฯฮฝฮฟ ฮฑฮฝ ฮฟ browser ฮฎ ฮท ฮบฮฑฯฯฮญฮปฮฑ ฮดฮตฮฝ ฮตฮฏฮฝฮฑฮน ฮตฮฝฮตฯฮณฮฌ)",
-
- "cut_mt": "ฯฯฮทฯฮนฮผฮฟฯฮฟฮฏฮทฯฮต multithreading ฮณฮนฮฑ ฮฝฮฑ ฮตฯฮนฯฮฑฯฯฮฝฮตฮนฯ ฯฮฟ hashing ฯฯฮฝ ฮฑฯฯฮตฮฏฯฮฝ$N$Nฯฯฮทฯฮนฮผฮฟฯฮฟฮนฮตฮฏ web-workers ฮบฮฑฮน ฯฯฮตฮนฮฌฮถฮตฯฮฑฮน$Nฯฮตฯฮนฯฯฯฯฮตฯฮท RAM (ฮผฮญฯฯฮน 512 MiB ฮตฯฮนฯฮปฮญฮฟฮฝ)$N$Nฮบฮฌฮฝฮตฮน ฯฮฟ https 30% ฯฮนฮฟ ฮณฯฮฎฮณฮฟฯฮฟ, ฯฮฟ http 4.5x ฯฮนฮฟ ฮณฯฮฎฮณฮฟฯฮฟ\">mt",
-
- "cut_wasm": "ฯฯฮทฯฮนฮผฮฟฯฮฟฮฏฮทฯฮต wasm ฮฑฮฝฯฮฏ ฮณฮนฮฑ ฯฮฟฮฝ ฮตฮฝฯฯฮผฮฑฯฯฮผฮญฮฝฮฟ hasher ฯฮฟฯ
browser; ฮฒฮตฮปฯฮนฯฮฝฮตฮน ฯฮทฮฝ ฯฮฑฯฯฯฮทฯฮฑ ฯฮต chrome-based browsers ฮฑฮปฮปฮฌ ฮฑฯ
ฮพฮฌฮฝฮตฮน ฯฮฟ ฯฮฟฯฯฮฏฮฟ ฯฮทฯ CPU, ฮบฮฑฮน ฯฮฑฮปฮนฮญฯ ฮตฮบฮดฯฯฮตฮนฯ chrome ฮญฯฮฟฯ
ฮฝ bugs ฯฮฟฯ
ฮบฮฌฮฝฮฟฯ
ฮฝ ฯฮฟ browser ฮฝฮฑ ฯฯฯฮตฮน ฯฮปฮท ฯฮท RAM ฮบฮฑฮน ฮฝฮฑ ฮบฯฮฑฯฮฌฯฮตฮน ฮฑฮฝ ฮตฮฝฮตฯฮณฮฟฯฮฟฮนฮทฮธฮตฮฏ\">wasm",
-
- "cft_text": "ฮบฮตฮฏฮผฮตฮฝฮฟ favicon (ฮบฮตฮฝฯ ฮบฮฑฮน ฮฑฮฝฮฑฮฝฮญฯฯฮท ฮณฮนฮฑ ฮฑฯฮตฮฝฮตฯฮณฮฟฯฮฟฮฏฮทฯฮท)",
- "cft_fg": "ฯฯฯฮผฮฑ ฯฯฮฟฯฮบฮทฮฝฮฏฮฟฯ
",
- "cft_bg": "ฯฯฯฮผฮฑ ฯฮฑฯฮฑฯฮบฮทฮฝฮฏฮฟฯ
",
-
- "cdt_lim": "ฮผฮญฮณฮนฯฯฮฟฯ ฮฑฯฮนฮธฮผฯฯ ฮฑฯฯฮตฮฏฯฮฝ ฯฯฮฟฯ ฮตฮผฯฮฌฮฝฮนฯฮท ฯฮต ฮญฮฝฮฑ ฯฮฌฮบฮตฮปฮฟ",
- "cdt_ask": "ฯฯฮฑฮฝ ฯฯฮฌฮฝฮตฮนฯ ฯฯฮฟ ฯฮญฮปฮฟฯ,$Nฮฑฮฝฯฮฏ ฮฝฮฑ ฯฮฟฯฯฯฯฮตฮน ฯฮตฯฮนฯฯฯฯฮตฯฮฑ ฮฑฯฯฮตฮฏฮฑ,$Nฯฯฯฮฌ ฯฮน ฮฝฮฑ ฮบฮฌฮฝฮตฮน",
- "cdt_hsort": "ฯฯฯฮฟฯ
ฯ ฮบฮฑฮฝฯฮฝฮตฯ ฯฮฑฮพฮนฮฝฯฮผฮทฯฮทฯ (<code>,sorthref</code>) ฮฝฮฑ ฯฯ
ฮผฯฮตฯฮนฮปฮฌฮฒฮตฮน ฯฮต URLs ฯฮฟฮปฯ
ฮผฮญฯฯฮฝ. ฮฮฝ ฯฮฟ ฮฒฮฌฮปฮตฮนฯ 0 ฮฑฮณฮฝฮฟฮตฮฏ ฮบฮฑฮน ฮบฮฑฮฝฯฮฝฮตฯ ฯฮฑฮพฮนฮฝฯฮผฮทฯฮทฯ ฯฯฮฟฯ
ฯ ฯฯ
ฮฝฮดฮญฯฮผฮฟฯ
ฯ ฯฮฟฮปฯ
ฮผฮญฯฯฮฝ",
-
- "tt_entree": "ฮตฮผฯฮฌฮฝฮนฯฮท navpane (ฮดฮญฮฝฯฯฮฟ ฮดฮนฮฑฮดฯฮฟฮผฯฮฝ)$Nฮ ฮปฮฎฮบฯฯฮฟ ฯฯ
ฮฝฯฯฮผฮตฯ
ฯฮทฯ: B",
- "tt_detree": "ฮตฮผฯฮฌฮฝฮนฯฮท breadcrumbs (ฮบฮฑฯฯฮญฮปฮตฯ ฮดฮนฮฑฮดฯฮฟฮผฯฮฝ)$Nฮ ฮปฮฎฮบฯฯฮฟ ฯฯ
ฮฝฯฯฮผฮตฯ
ฯฮทฯ: B",
- "tt_visdir": "ฮบฯฮปฮนฯฮท ฯฯฮฟฮฝ ฮตฯฮนฮปฮตฮณฮผฮญฮฝฮฟ ฯฮฌฮบฮตฮปฮฟ",
- "tt_ftree": "ฮตฮฝฮฑฮปฮปฮฑฮณฮฎ ฮดฮญฮฝฯฯฮฟฯ
ฮดฮนฮฑฮดฯฮฟฮผฯฮฝ / ฮฑฯฯฮตฮฏฯฮฝ ฮบฮตฮนฮผฮญฮฝฮฟฯ
$Nฮ ฮปฮฎฮบฯฯฮฟ ฯฯ
ฮฝฯฯฮผฮตฯ
ฯฮทฯ: V",
- "tt_pdock": "ฮตฮผฯฮฌฮฝฮนฯฮท ฮณฮฟฮฝฮนฮบฯฮฝ ฯฮฑฮบฮญฮปฯฮฝ ฯฮต ฯฯฮฑฮธฮตฯฮฎ ฮผฯฮฌฯฮฑ ฮตฯฮฌฮฝฯ",
- "tt_dynt": "ฮฑฯ
ฯฯฮผฮฑฯฮท ฮตฯฮญฮบฯฮฑฯฮท ฮบฮฑฮธฯฯ ฮตฯฮตฮบฯฮตฮฏฮฝฮตฯฮฑฮน ฯฮฟ ฮดฮญฮฝฯฯฮฟ ฮดฮนฮฑฮดฯฮฟฮผฯฮฝ",
- "tt_wrap": "ฮฑฮฝฮฑฮดฮฏฯฮปฯฯฮท ฮปฮญฮพฮตฯฮฝ",
- "tt_hover": "ฮฑฯฮฟฮบฮฌฮปฯ
ฯฮท ฯฯฮฝ ฮณฯฮฑฮผฮผฯฮฝ ฯฮฟฯ
ฮพฮตฯฮตฯฮฝฮฟฯฮฝ ฯฮฟ ฯฮปฮฌฯฮฟฯ ฮผฮต ฯฮฟ ฯฮฟฮฝฯฮฏฮบฮน ฯฮฌฮฝฯ ฯฮฟฯ
ฯ$N( ฯฯฮฌฮตฮน ฯฮฟ scroll ฮตฮบฯฯฯ ฮฑฮฝ ฯฮฟ ฯฮฟฮฝฯฮฏฮบฮน $N ฮตฮฏฮฝฮฑฮน ฯฯฮทฮฝ ฮฑฯฮนฯฯฮตฯฮฎ ฯฯฮฎฮปฮท )",
-
- "ml_pmode": "ฯฯฮฟ ฯฮญฮปฮฟฯ ฯฮฟฯ
ฯฮฑฮบฮญฮปฮฟฯ
...",
- "ml_btns": "ฮตฮฝฯฮฟฮปฮญฯ",
- "ml_tcode": "ฮผฮตฯฮฑฮบฯฮดฮนฮบฮฟฯฮฟฮฏฮทฯฮท",
- "ml_tcode2": "ฮผฮตฯฮฑฮบฯฮดฮนฮบฮฟฯฮฟฮฏฮทฯฮท ฯฮต",
- "ml_tint": "ฯฮฏฮปฯฯฮฟ ฯฯฯฮผฮฑฯฮฟฯ",
- "ml_eq": "ฮนฯฮฟฯฯฮฑฮธฮผฮนฯฯฮฎฯ ฮฎฯฮฟฯ
",
- "ml_drc": "ฯฯ
ฮผฯฮนฮตฯฯฮฎฯ ฮดฯ
ฮฝฮฑฮผฮนฮบฮฎฯ ฮตฮผฮฒฮญฮปฮตฮนฮฑฯ",
-
- "mt_loop": "ฮตฯฮฑฮฝฮฌฮปฮทฯฮท ฮตฮฝฯฯ ฯฯฮฑฮณฮฟฯ
ฮดฮนฮฟฯ\">๐",
- "mt_one": "ฯฯฮฑฮผฮฌฯฮฑ ฮผฮตฯฮฌ ฮฑฯฯ ฮญฮฝฮฑ ฯฯฮฑฮณฮฟฯฮดฮน\">1๏ธโฃ",
- "mt_shuf": "ฯฯ
ฯฮฑฮฏฮฑ ฯฮตฮนฯฮฌ ฯฯฮฑฮณฮฟฯ
ฮดฮนฯฮฝ ฯฮต ฮบฮฌฮธฮต ฯฮฌฮบฮตฮปฮฟ\">๐",
- "mt_aplay": "ฮฑฯ
ฯฯฮผฮฑฯฮท ฮฑฮฝฮฑฯฮฑฯฮฑฮณฯฮณฮฎ ฮฑฮฝ ฯ
ฯฮฌฯฯฮตฮน song-ID ฯฯฮท ฮดฮนฮตฯฮธฯ
ฮฝฯฮท ฯฮฟฯ
ฮผฯฮฎฮบฮตฯ ฯฯฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ$N$Nฮท ฮฑฯฮตฮฝฮตฯฮณฮฟฯฮฟฮฏฮทฯฮท ฮฑฯ
ฯฮฟฯ, ฯฯฮฑฮผฮฑฯฮฌ ฯฮฟ URL ฮฑฯฯ ฯฮฟ ฮฝฮฑ ฮตฮฝฮทฮผฮตฯฯฮฝฮตฯฮฑฮน ฮผฮต ฯฮฑ song-ID ฮตฮฝฯ ฯฮฑฮฏฮถฮตฮน ฮท ฮผฮฟฯ
ฯฮนฮบฮฎ ฮณฮนฮฑ ฮฝฮฑ ฮฑฯฮฟฯฯฮฑฯฮตฮฏ ฮท ฮฑฯ
ฯฯฮผฮฑฯฮท ฮฑฮฝฮฑฯฮฑฯฮฑฮณฯฮณฮฎ ฮฑฮฝ ฯฮฑฮธฮฟฯฮฝ ฮฑฯ
ฯฮญฯ ฮฟฮน ฯฯ
ฮธฮผฮฏฯฮตฮนฯ ฮฑฮปฮปฮฌ ฯฮฟ URL ฯฮฑฯฮฑฮผฮตฮฏฮฝฮตฮน ฯฮฟ ฮฏฮดฮนฮฟ\">aโถ",
- "mt_preload": "ฮพฮตฮบฮฏฮฝฮฑ ฯฮท ฯฯฯฯฯฯฮท ฯฮฟฯ
ฮตฯฯฮผฮตฮฝฮฟฯ
ฯฯฮฑฮณฮฟฯ
ฮดฮนฮฟฯ ฮบฮฟฮฝฯฮฌ ฯฯฮฟ ฯฮญฮปฮฟฯ ฮณฮนฮฑ ฯฯ
ฮฝฮตฯฯฮผฮตฮฝฮท ฮฑฮบฯฯฮฑฯฮท\">ฯฯฮฟฯฯฯฯฯฯฮท",
- "mt_prescan": "ฯฮฎฮณฮฑฮนฮฝฮต ฯฯฮฟฮฝ ฮตฯฯฮผฮตฮฝฮฟ ฯฮฌฮบฮตฮปฮฟ ฯฯฮนฮฝ ฯฮตฮปฮตฮนฯฯฮตฮน ฯฮฟ ฯฮตฮปฮตฯ
ฯฮฑฮฏฮฟ ฯฯฮฑฮณฮฟฯฮดฮน$Nฮณฮนฮฑ ฮฝฮฑ ฮผฮท ฯฯฮฑฮผฮฑฯฮฎฯฮตฮน ฯฮฟ ฯฯฯฮณฯฮฑฮผฮผฮฑ ฯฮตฯฮนฮฎฮณฮทฯฮทฯ ฮฝฮฑ ฯฮฑฮฏฮถฮตฮน ฮผฮฟฯ
ฯฮนฮบฮฎ\">nav",
- "mt_fullpre": "ฯฯฮฟฯฯฮฌฮธฮทฯฮต ฮฝฮฑ ฯฯฮฟฯฮฟฯฯฯฯฮตฮนฯ ฮฟฮปฯฮบฮปฮทฯฮฟ ฯฮฟ ฯฯฮฑฮณฮฟฯฮดฮน;$Nโ
ฮตฮฝฮตฯฮณฯ ฯฮต ฮฑฮฝฮฑฮพฮนฯฯฮนฯฯฮตฯ ฯฯ
ฮฝฮดฮญฯฮตฮนฯ,$Nโ ฯฮนฮธฮฑฮฝฯฯฮฑฯฮฑ ฮฑฯฮตฮฝฮตฯฮณฮฟฯฮฟฮนฮทฮผฮญฮฝฮฟ ฯฮต ฮฑฯฮณฮญฯ ฯฯ
ฮฝฮดฮญฯฮตฮนฯ\">ฯฮปฮฎฯฮตฯ",
- "mt_fau": "ฯฮต ฮบฮนฮฝฮทฯฮฌ, ฯฯฯฮปฮฑฮฒฮต ฮฝฮฑ ฮผฮทฮฝ ฯฯฮฑฮผฮฑฯฮฎฯฮตฮน ฮท ฮผฮฟฯ
ฯฮนฮบฮฎ ฮฑฮฝ ฯฮฟ ฮตฯฯฮผฮตฮฝฮฟ ฯฯฮฑฮณฮฟฯฮดฮน ฮดฮตฮฝ ฯฯฮฟฯฮฟฯฯฯฮธฮทฮบฮต ฮณฯฮฎฮณฮฟฯฮฑ (ฮผฯฮฟฯฮตฮฏ ฮฝฮฑ ฯฯฮฟฮบฮฑฮปฮญฯฮตฮน ฯฯฯฮฒฮปฮทฮผฮฑ ฯฯฮทฮฝ ฮตฮผฯฮฌฮฝฮนฯฮท ฯฯฮฝ ฮตฯฮนฮบฮตฯฯฮฝ)\">โ๏ธ",
- "mt_waves": "ฮณฯฮฑฮผฮผฮฎ ฮฑฮฝฮฑฮถฮฎฯฮทฯฮทฯ ฮบฯ
ฮผฮฑฯฮฟฮผฮฟฯฯฮฎฯ:$Nฮตฮผฯฮฌฮฝฮนฯฮท ฮญฮฝฯฮฑฯฮทฯ ฮฎฯฮฟฯ
ฯฯฮทฮฝ ฮผฯฮฌฯฮฑ ฮฑฮฝฮฑฮถฮฎฯฮทฯฮทฯ\">~s",
- "mt_npclip": "ฮตฮผฯฮฌฮฝฮนฯฮต ฮบฮฟฯ
ฮผฯฮนฮฌ ฮณฮนฮฑ ฮฑฮฝฯฮนฮณฯฮฑฯฮฎ ฯฮฟฯ
ฯฯฮญฯฮฟฮฝฯฮฟฯ ฯฯฮฑฮณฮฟฯ
ฮดฮนฮฟฯ\">/np",
- "mt_m3u_c": "ฮตฮผฯฮฌฮฝฮนฯฮต ฮบฮฟฯ
ฮผฯฮนฮฌ ฮณฮนฮฑ ฮฑฮฝฯฮนฮณฯฮฑฯฮฎ ฯฯฮฝ$Nฮตฯฮนฮปฮตฮณฮผฮญฮฝฯฮฝ ฯฯฮฑฮณฮฟฯ
ฮดฮนฯฮฝ ฯฯ ฮบฮฑฯฮฑฯฯฯฮฎฯฮตฮนฯ ฮปฮฏฯฯฮฑฯ m3u8\">๐ป",
- "mt_octl": "ฮตฮฝฯฯฮผฮฌฯฯฯฮท ฯฯฮฟ ฮปฮตฮนฯฮฟฯ
ฯฮณฮนฮบฯ ฯฯฯฯฮทฮผฮฑ (ฯฮทฮฝฯฮฟฮผฮตฯฯฮตฮนฯ ฯฮปฮฎฮบฯฯฯฮฝ ฯฮฟฮปฯ
ฮผฮญฯฯฮฝ / osd)\">ฮญฮปฮตฮณฯฮฟฯ-OS",
- "mt_oseek": "ฮตฯฮนฯฯฮญฯฮตฮน ฯฮทฮฝ ฮฑฮฝฮฑฮถฮฎฯฮทฯฮท ฮผฮญฯฯ ฮตฮฝฯฯฮผฮฌฯฯฯฮทฯ ฯฮฟฯ
ฮปฮตฮนฯฮฟฯ
ฯฮณฮนฮบฮฟฯ ฯฯ
ฯฯฮฎฮผฮฑฯฮฟฯ$N$Nฯฮทฮผฮตฮฏฯฯฮท: ฯฮต ฮผฮตฯฮนฮบฮญฯ ฯฯ
ฯฮบฮตฯ
ฮญฯ (iPhones),$Nฮฑฮฝฯฮนฮบฮฑฮธฮนฯฯฮฌ ฯฮฟ ฮบฮฟฯ
ฮผฯฮฏ ฮตฯฯฮผฮตฮฝฮฟฯ
ฯฯฮฑฮณฮฟฯ
ฮดฮนฮฟฯ\">ฮฑฮฝฮฑฮถฮฎฯฮทฯฮท",
- "mt_oscv": "ฮตฮผฯฮฌฮฝฮนฯฮท ฮตฮพฯฯฯฮปฮปฮฟฯ
ฮฌฮปฮผฯฮฟฯ
ฮผ ฯฮต osd\">ฮตฮพฯฯฯ
ฮปฮปฮฟ",
- "mt_follow": "ฮบฯฮฑฯฮฌ ฯฮฟ ฯฯฮญฯฮฟฮฝ ฮบฮฟฮผฮผฮฌฯฮน ฮฟฯฮฑฯฯ ฮบฮฑฯฮฌ ฯฮทฮฝ ฮบฯฮปฮนฯฮท\">๐ฏ",
- "mt_compact": "ฯฯ
ฮผฯฮฑฮณฮฎ ฮบฮฟฯ
ฮผฯฮนฮฌ ฮตฮปฮญฮณฯฮฟฯ
\">โ",
- "mt_uncache": "ฮบฮฑฮธฮฌฯฮนฯฮต ฯฮทฮฝ ฯฯฮฟฯฯฯฮนฮฝฮฎ ฮผฮฝฮฎฮผฮท (ฮดฮฟฮบฮฏฮผฮฑฯฮต ฮฑฯ
ฯฯ ฮฑฮฝ ฮฟ browser ฮญฯฮตฮน ฮฑฯฮฟฮธฮทฮบฮตฯฯฮตฮน$Nฯฮฑฮปฮฑฯฮผฮญฮฝฮฟ ฮฑฮฝฯฮฏฮณฯฮฑฯฮฟ ฯฯฮฑฮณฮฟฯ
ฮดฮนฮฟฯ ฮบฮฑฮน ฮฑฯฮฝฮตฮฏฯฮฑฮน ฮฝฮฑ ฯฮฑฮฏฮพฮตฮน)\">ฮตฮบฮบฮฑฮธฮฌฯฮนฯฮท",
- "mt_mloop": "ฯฯ
ฯฮฑฮฏฮฑ ฮฑฮฝฮฑฯฮฑฯฮฑฮณฯฮณฮฎ ฯฯฮฟฮฝ ฮฑฮฝฮฟฮนฮบฯฯ ฯฮฌฮบฮตฮปฮฟ\">๐ ฯฯ
ฯฮฑฮฏฮฑ ฮฑฮฝฮฑฯฮฑฯฮฑฮณฯฮณฮฎ",
- "mt_mnext": "ฯฯฯฯฯฯฮท ฮตฯฯฮผฮตฮฝฮฟฯ
ฯฮฑฮบฮญฮปฮฟฯ
ฮบฮฑฮน ฯฯ
ฮฝฮญฯฮนฯฮท\">๐ ฮตฯฯฮผฮตฮฝฮฟ",
- "mt_mstop": "ฯฯฮฑฮผฮฌฯฮทฯฮต ฯฮทฮฝ ฮฑฮฝฮฑฯฮฑฯฮฑฮณฯฮณฮฎ\">โธ ฯฯฮฑฮผฮฌฯฮทฮผฮฑ",
- "mt_cflac": "ฮผฮตฯฮฑฯฯฮฟฯฮฎ flac / wav ฯฮต {0}\">flac",
- "mt_caac": "ฮผฮตฯฮฑฯฯฮฟฯฮฎ aac / m4a ฯฮต {0}\">aac",
- "mt_coth": "ฮผฮตฯฮฑฯฯฮฟฯฮฎ ฯฮปฯฮฝ ฯฯฮฝ ฮฌฮปฮปฯฮฝ (ฮตฮบฯฯฯ ฯฯฮฝ mp3) ฯฮต {0}\">ฮฌฮปฮปฮฟ",
- "mt_c2opus": "ฮบฮฑฮปฯฯฮตฯฮท ฮตฯฮนฮปฮฟฮณฮฎ ฮณฮนฮฑ desktop, laptop, android\">opus",
- "mt_c2owa": "opus-weba, ฮณฮนฮฑ iOS 17.5 ฮบฮฑฮน ฮฝฮตฯฯฮตฯฮฑ\">owa",
- "mt_c2caf": "opus-caf, ฮณฮนฮฑ iOS 11 ฮญฯฯ 17\">caf",
- "mt_c2mp3": "ฯฯฮทฯฮนฮผฮฟฯฮฟฮฏฮทฯฮต ฮฑฯ
ฯฯ ฯฮต ฯฮฟฮปฯ ฯฮฑฮปฮนฮญฯ ฯฯ
ฯฮบฮตฯ
ฮญฯ\">mp3",
- "mt_c2flac": "ฮฒฮญฮปฯฮนฯฯฮท ฯฮฟฮนฯฯฮทฯฮฑ ฮฎฯฮฟฯ
ฮฑฮปฮปฮฌ ฯฮตฯฮฌฯฯฮนฮฟ ฮฑฯฯฮตฮฏฮฟ ฮณฮนฮฑ ฮผฮตฯฮฑฯฯฯฯฯฯฮท\">flac",
- "mt_c2wav": "ฮฑฯฯ
ฮผฯฮฏฮตฯฯฮท ฮฑฮฝฮฑฯฮฑฯฮฑฮณฯฮณฮฎ (ฮฑฮบฯฮผฮฑ ฮผฮตฮณฮฑฮปฯฯฮตฯฮฟ ฮฑฯฯฮตฮฏฮฟ)\">wav",
- "mt_c2ok": "ฮผฮนฮฑ ฯฮฑฯฮฌ, ฯฮฟฯฮฎ ฮตฯฮนฮปฮฟฮณฮฎ",
- "mt_c2nd": "ฮดฮตฮฝ ฮตฮฏฮฝฮฑฮน ฮท ฯฯฮฟฯฮตฮนฮฝฯฮผฮตฮฝฮท ฮผฮฟฯฯฮฎ ฮตฮพฯฮดฮฟฯ
ฮณฮนฮฑ ฯฮท ฯฯ
ฯฮบฮตฯ
ฮฎ ฯฮฟฯ
, ฮฑฮปฮปฮฌ ฮฑฯ
ฯฯ ฮตฮฏฮฝฮฑฮน ok",
- "mt_c2ng": "ฮท ฯฯ
ฯฮบฮตฯ
ฮฎ ฯฮฟฯ
ฯฮฑฮฏฮฝฮตฯฮฑฮน ฮฝฮฑ ฮผฮทฮฝ ฯ
ฯฮฟฯฯฮทฯฮฏฮถฮตฮน ฮฑฯ
ฯฮฎฮฝ ฯฮท ฮผฮฟฯฯฮฎ ฮตฮพฯฮดฮฟฯ
, ฮฑฮปฮปฮฌ ฮฑฯ ฯฮฟ ฮดฮฟฮบฮนฮผฮฌฯฮฟฯ
ฮผฮต ฮฟฯฯฯฯ ฮฎ ฮฌฮปฮปฯฯ",
- "mt_xowa": "ฯ
ฯฮฌฯฯฮฟฯ
ฮฝ bugs ฯฮต iOS ฯฮฟฯ
ฮตฮผฯฮฟฮดฮฏฮถฮฟฯ
ฮฝ ฯฮทฮฝ ฮฑฮฝฮฑฯฮฑฯฮฑฮณฯฮณฮฎ ฯฯฮฟ ฯฮฑฯฮฑฯฮบฮฎฮฝฮนฮฟ ฮผฮต ฮฑฯ
ฯฮฎฮฝ ฯฮท ฮผฮฟฯฯฮฎยท ฯฯฮทฯฮนฮผฮฟฯฮฟฮฏฮทฯฮต caf ฮฎ mp3 ฮฑฮฝฯโ ฮฑฯ
ฯฮฟฯ",
- "mt_tint": "ฮตฯฮฏฯฮตฮดฮฟ ฯฯฮฝฯฮฟฯ
(0-100) ฯฯฮทฮฝ ฮผฯฮฌฯฮฑ ฮฑฮฝฮฑฮถฮฎฯฮทฯฮทฯ$Nฮณฮนฮฑ ฮฝฮฑ ฮบฮฌฮฝฮตฮนฯ ฯฮฟ buffering ฮปฮนฮณฯฯฮตฯฮฟ ฮตฮฝฮฟฯฮปฮทฯฮนฮบฯ",
- "mt_eq": "ฮตฮฝฮตฯฮณฮฟฯฮฟฮนฮตฮฏ ฯฮฟฮฝ ฮนฯฮฟฯฯฮฑฮธฮผฮนฯฯฮฎ ฮบฮฑฮน ฯฮฟฮฝ ฮญฮปฮตฮณฯฮฟ ฮตฮฝฮฏฯฯฯ
ฯฮทฯ;$N$Nฮตฮฝฮฏฯฯฯ
ฯฮท <code>0</code> = ฯฯฮฌฮฝฯฮฑฯ 100% ฮญฮฝฯฮฑฯฮท (ฮฑฯฮฑฯฮฌฮปฮปฮฑฯฯฮท)$N$Nฮตฯฯฮฟฯ <code>1 </code> = ฯฯฮฌฮฝฯฮฑฯ ฯฯฮตฯฮตฮฟฯฯฮฝฮนฮบฯ (ฮฑฯฮฑฯฮฌฮปฮปฮฑฯฯฮฟ)$Nฮตฯฯฮฟฯ <code>0.5</code> = 50% ฮฑฯฮนฯฯฮตฯฮฌ-ฮดฮตฮพฮนฮฌ ฮผฮฏฮพฮท ฮฎฯฮฟฯ
$Nฮตฯฯฮฟฯ <code>0 </code> = ฮผฮฟฮฝฮฟฯฯฮฝฮนฮบฯ$N$Nฮตฮฝฮฏฯฯฯ
ฯฮท <code>-0.8</code> & ฮตฯฯฮฟฯ <code>10</code> = ฮฑฯฮฑฮฏฯฮตฯฮท ฯฯฮฝฮฎฯ :^)$N$Nฮท ฮตฮฝฮตฯฮณฮฟฯฮฟฮฏฮทฯฮท ฯฮฟฯ
ฮนฯฮฟฯฯฮฑฮธฮผฮนฯฯฮฎ ฮบฮฌฮฝฮตฮน ฯฮฑ ฮฌฮปฮผฯฮฟฯ
ฮผ ฯฯฯฮฏฯ ฮบฮตฮฝฮฌ, ฮฝฮฑ ฯฮฑฮฏฮถฮฟฯ
ฮฝ ฯฯฯฮฏฯ ฮบฮฑฮธฯฮปฮฟฯ
ฮบฮตฮฝฮฌ, ฮฟฯฯฯฮต ฮฌฯฮทฯฮญ ฯฮฟ ฮตฮฝฮตฯฮณฯ ฮผฮต ฯฮปฮตฯ ฯฮนฯ ฯฮนฮผฮญฯ ฯฯฮฟ ฮผฮทฮดฮญฮฝ (ฮตฮบฯฯฯ ฮฑฯฯ ฮตฯฯฮฟฯ = 1) ฮฑฮฝ ฯฮต ฮฝฮฟฮนฮฌฮถฮตฮน",
- "mt_drc": "ฮตฮฝฮตฯฮณฮฟฯฮฟฮนฮตฮฏ ฯฮฟฮฝ ฯฯ
ฮผฯฮนฮตฯฯฮฎ ฮดฯ
ฮฝฮฑฮผฮนฮบฮฎฯ ฮตฮผฮฒฮญฮปฮตฮนฮฑฯ (ฮตฮพฮฟฮผฮฌฮปฯ
ฮฝฯฮท ฮญฮฝฯฮฑฯฮทฯ / ฮฑฮบฯฮฑฮฏฮฑ ฯฯ
ฮผฯฮฏฮตฯฮท ฮญฮฝฯฮฑฯฮทฯ); ฮธฮฑ ฮตฮฝฮตฯฮณฮฟฯฮฟฮนฮฎฯฮตฮน ฮบฮฑฮน ฯฮฟฮฝ ฮนฯฮฟฯฯฮฑฮธฮผฮนฯฯฮฎ ฮณฮนฮฑ ฮฝฮฑ ฮนฯฮฟฯฯฮฟฯฮฎฯฮตฮน ฯฮฟฮฝ ฮฎฯฮฟ, ฮฟฯฯฯฮต ฮฒฮฌฮปฮต ฯฮปฮฑ ฯฮฑ ฯฮตฮดฮฏฮฑ ฮนฯฮฟฯฯฮฑฮธฮผฮนฯฯฮฎ ฮตฮบฯฯฯ ฮฑฯฯ ฯฮฟ 'ฮตฯฯฮฟฯ' ฯฯฮฟ 0 ฮฑฮฝ ฮดฮตฮฝ ฯฮฟ ฮธฮตฯ$N$Nฯฮฑฮผฮทฮปฯฮฝฮตฮน ฯฮทฮฝ ฮญฮฝฯฮฑฯฮท ฯฮฟฯ
ฮฎฯฮฟฯ
ฯฮฌฮฝฯ ฮฑฯฯ ฯฮฟ ฯฯฮนฮฟ (THRESHOLD) dB; ฮณฮนฮฑ ฮบฮฌฮธฮต RATIO dB ฯฮญฯฮฑ ฮฑฯฯ ฯฮฟ ฯฯฮนฮฟ ฯ
ฯฮฌฯฯฮตฮน 1 dB ฮตฮพฯฮดฮฟฯ
, ฮฟฯฯฯฮต ฮฟฮน ฯฯฮฟฮตฯฮนฮปฮตฮณฮผฮญฮฝฮตฯ ฯฮนฮผฮญฯ ฯฯฮนฮฟ -24 ฮบฮฑฮน 'ฮปฯฮณฮฟฯ' 12 ฯฮทฮผฮฑฮฏฮฝฮฟฯ
ฮฝ ฯฯฮน ฮดฮตฮฝ ฮธฮฑ ฮพฮตฯฮตฯฮฌฯฮตฮน ฯฮฟฯฮญ ฯฮฑ -22 dB ฮบฮฑฮน ฮตฮฏฮฝฮฑฮน ฮฑฯฯฮฑฮปฮญฯ ฮฝฮฑ ฮฑฯ
ฮพฮฎฯฮตฮนฯ ฯฮทฮฝ ฮตฮฝฮฏฯฯฯ
ฯฮท ฮนฯฮฟฯฯฮฑฮธฮผฮนฯฯฮฎ ฯฮต 0.8, ฮฎ ฮบฮฑฮน 1.8 ฮผฮต ATK 0 ฮบฮฑฮน ฮผฮตฮณฮฌฮปฮฟ RLS ฯฯฯฯ 90 (ฮดฮฟฯ
ฮปฮตฯฮตฮน ฮผฯฮฝฮฟ ฯฮต firefoxยท ฯฮฟ RLS ฮตฮฏฮฝฮฑฮน max 1 ฯฮต ฮฌฮปฮปฮฟฯ
ฯ browsers)$N$N(ฮดฮตฯ wikipedia, ฯฮฟ ฮตฮพฮทฮณฮฟฯฮฝ ฮบฮฑฮปฯฯฮตฯฮฑ)",
-
- "mb_play": "ฯฮฑฮฏฮพฮต",
- "mm_hashplay": "ฮฝฮฑ ฯฮฑฮฏฮพฯ ฮฑฯ
ฯฯ ฯฮฟ ฮฑฯฯฮตฮฏฮฟ ฮฎฯฮฟฯ
;",
- "mm_m3u": "ฯฮฌฯฮฑ Enter/ฮฮฝฯฮฌฮพฮตฮน ฮณฮนฮฑ ฮฮฝฮฑฯฮฑฯฮฑฮณฯฮณฮฎ\nฯฮฌฯฮฑ ESC/ฮฮบฯ
ฯฮฟ ฮณฮนฮฑ ฮฯฮตฮพฮตฯฮณฮฑฯฮฏฮฑ",
- "mp_breq": "ฯฯฮตฮนฮฌฮถฮตฯฮฑฮน firefox 82+ ฮฎ chrome 73+ ฮฎ iOS 15+",
- "mm_bload": "ฯฮฟฯฯฯฮฝฮตฮน...",
- "mm_bconv": "ฮผฮตฯฮฑฯฯฮฟฯฮฎ ฯฮต {0}, ฯฮตฯฮฏฮผฮตฮฝฮต...",
- "mm_opusen": "ฮฟ browser ฯฮฟฯ
ฮดฮตฮฝ ฯฮฑฮฏฮถฮตฮน ฮฑฯฯฮตฮฏฮฑ aac / m4a;\nฮท ฮผฮตฯฮฑฯฯฮฟฯฮฎ ฯฮต opus ฮตฮฏฮฝฮฑฮน ฯฯฯฮฑ ฮตฮฝฮตฯฮณฮฎ",
- "mm_playerr": "ฮท ฮฑฮฝฮฑฯฮฑฯฮฑฮณฯฮณฮฎ, ฮฑฯฮญฯฯ
ฯฮต: ",
- "mm_eabrt": "ฮ ฯฯฮฟฯฯฮฌฮธฮตฮนฮฑ ฮฑฮฝฮฑฯฮฑฯฮฑฮณฯฮณฮฎฯ ฮฑฮบฯ
ฯฯฮธฮทฮบฮต",
- "mm_enet": "ฮ ฯฯฮฝฮดฮตฯฮท ฯฮฟฯ
ฮฏฮฝฯฮตฯฮฝฮญฯ ฯฮฟฯ
ฮตฮฏฮฝฮฑฮน ฯฮฌฮปฮนฮฑ",
- "mm_edec": "ฮคฮฟ ฮฑฯฯฮตฮฏฮฟ ฮฑฯ
ฯฯ ฮตฮฏฮฝฮฑฮน ฮผฮฌฮปฮปฮฟฮฝ ฮบฮฑฯฮตฯฯฯฮฑฮผฮผฮญฮฝฮฟ;;",
- "mm_esupp": "ฮ browser ฯฮฟฯ
ฮดฮตฮฝ ฮบฮฑฯฮฑฮปฮฑฮฒฮฑฮฏฮฝฮตฮน ฮฑฯ
ฯฮฎ ฯฮท ฮผฮฟฯฯฮฎ ฮฎฯฮฟฯ
",
- "mm_eunk": "ฮฮณฮฝฯฯฯฮฟ ฯฯฮฌฮปฮผฮฑ",
- "mm_e404": "ฮฮดฯฮฝฮฑฯฮท ฮท ฮฑฮฝฮฑฯฮฑฯฮฑฮณฯฮณฮฎ ฮฎฯฮฟฯ
; ฯฯฮฌฮปฮผฮฑ 404: ฮคฮฟ ฮฑฯฯฮตฮฏฮฟ ฮดฮตฮฝ ฮฒฯฮญฮธฮทฮบฮต.",
- "mm_e403": "ฮฮดฯฮฝฮฑฯฮท ฮท ฮฑฮฝฮฑฯฮฑฯฮฑฮณฯฮณฮฎ ฮฎฯฮฟฯ
; ฯฯฮฌฮปฮผฮฑ 403: ฮฯฮฝฮทฯฮท ฯฯฯฯฮฒฮฑฯฮทฯ.\n\nฮฮฟฮบฮฏฮผฮฑฯฮต F5 ฮณฮนฮฑ ฮตฯฮฑฮฝฮฑฯฯฯฯฯฯฮท, ฮฏฯฯฯ ฮฝฮฑ ฮญฯฮตฮนฯ ฮฑฯฮฟฯฯ
ฮฝฮดฮตฮธฮตฮฏ",
- "mm_e500": "ฮฮดฯฮฝฮฑฯฮท ฮท ฮฑฮฝฮฑฯฮฑฯฮฑฮณฯฮณฮฎ ฮฎฯฮฟฯ
; ฯฯฮฌฮปฮผฮฑ 500: ฮฮปฮตฮณฮพฮต ฯฮฑ logs ฯฮฟฯ
ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ.",
- "mm_e5xx": "ฮฮดฯฮฝฮฑฯฮท ฮท ฮฑฮฝฮฑฯฮฑฯฮฑฮณฯฮณฮฎ ฮฎฯฮฟฯ
; ฯฯฮฌฮปฮผฮฑ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ",
- "mm_nof": "ฮดฮตฮฝ ฮฒฯฮญฮธฮทฮบฮฑฮฝ ฮฌฮปฮปฮฑ ฮฑฯฯฮตฮฏฮฑ ฮฎฯฮฟฯ
ฯฯฮนฮณฯฯฯ",
- "mm_prescan": "ฮฮฝฮฑฮถฮฎฯฮทฯฮท ฮผฮฟฯ
ฯฮนฮบฮฎฯ ฮณฮนฮฑ ฮตฯฯฮผฮตฮฝฮฟ ฯฯฮฑฮณฮฟฯฮดฮน...",
- "mm_scank": "ฮฯฮญฮธฮทฮบฮต ฯฮฟ ฮตฯฯฮผฮตฮฝฮฟ ฯฯฮฑฮณฮฟฯฮดฮน:",
- "mm_uncache": "ฮบฯฯ
ฯฮฎ ฮผฮฝฮฎฮผฮท ฮบฮฑฮธฮฑฯฮฏฯฯฮทฮบฮตยท ฯฮปฮฑ ฯฮฑ ฯฯฮฑฮณฮฟฯฮดฮนฮฑ ฮธฮฑ ฮพฮฑฮฝฮฑฮบฮฑฯฮตฮฒฮฟฯฮฝ ฯฯฮทฮฝ ฮตฯฯฮผฮตฮฝฮท ฮฑฮฝฮฑฯฮฑฯฮฑฮณฯฮณฮฎ",
- "mm_hnf": "ฯฮฟ ฯฯฮฑฮณฮฟฯฮดฮน ฮฑฯ
ฯฯ ฯฮปฮญฮฟฮฝ ฮดฮตฮฝ ฯ
ฯฮฌฯฯฮตฮน",
-
- "im_hnf": "ฮท ฮตฮนฮบฯฮฝฮฑ ฮฑฯ
ฯฮฎ ฯฮปฮญฮฟฮฝ ฮดฮตฮฝ ฯ
ฯฮฌฯฯฮตฮน",
-
- "f_empty": "ฮฑฯ
ฯฯฯ ฮฟ ฯฮฌฮบฮตฮปฮฟฯ ฮตฮฏฮฝฮฑฮน ฮฌฮดฮตฮนฮฟฯ",
- "f_chide": "ฮฑฯ
ฯฯ ฮธฮฑ ฮบฯฯฯฮตฮน ฯฮท ฯฯฮฎฮปฮท ยซ{0}ยป\n\nฮผฯฮฟฯฮตฮฏฯ ฮฝฮฑ ฮตฮผฯฮฑฮฝฮฏฯฮตฮนฯ ฯฮนฯ ฯฯฮฎฮปฮตฯ ฮฑฯฯ ฯฮนฯ ฯฯ
ฮธฮผฮฏฯฮตฮนฯ",
- "f_bigtxt": "ฮฑฯ
ฯฯ ฯฮฟ ฮฑฯฯฮตฮฏฮฟ ฮตฮฏฮฝฮฑฮน {0} MiB ฯฮต ฮผฮญฮณฮตฮธฮฟฯ โ ฯฮฏฮณฮฟฯ
ฯฮฑ ฮธฮญฮปฮตฮนฯ ฮฝฮฑ ฯฮฟ ฮดฮตฮนฯ ฯฯ ฮบฮตฮฏฮผฮตฮฝฮฟ;",
- "f_bigtxt2": "ฮฝฮฑ ฮดฮตฮนฯ ฮผฯฮฝฮฟ ฯฮฟ ฯฮญฮปฮฟฯ ฯฮฟฯ
ฮฑฯฯฮตฮฏฮฟฯ
ฮฑฮฝฯฮฏ ฮณฮนฮฑ ฯฮปฮฟ; ฮฑฯ
ฯฯ ฮตฮฝฮตฯฮณฮฟฯฮฟฮนฮตฮฏ ฮบฮฑฮน ฯฮฟ following/tailing, ฯฮฟฯ
ฮดฮตฮฏฯฮฝฮตฮน ฮฝฮญฮตฯ ฮณฯฮฑฮผฮผฮญฯ ฯฮฟฯ
ฯฯฮฟฯฯฮฏฮธฮตฮฝฯฮฑฮน ฮถฯฮฝฯฮฑฮฝฮฌ",
- "fbd_more": '',
- "fbd_all": '',
- "f_anota": "ฮผฯฮฝฮฟ {0} ฮฑฯฯ ฯฮฑ {1} ฮฑฮฝฯฮนฮบฮตฮฏฮผฮตฮฝฮฑ ฮตฯฮนฮปฮญฯฮธฮทฮบฮฑฮฝ;\nฮณฮนฮฑ ฮฝฮฑ ฮตฯฮนฮปฮญฮพฮตฮนฯ ฮฟฮปฯฮบฮปฮทฯฮฟ ฯฮฟ ฯฮฌฮบฮตฮปฮฟ, ฮบฯฮปฮทฯฮต ฯฯฯฯฮฑ ฮผฮญฯฯฮน ฮบฮฌฯฯ",
-
- "f_dls": 'ฮฟฮน ฯฯฮฝฮดฮตฯฮผฮฟฮน ฮฑฯฯฮตฮฏฯฮฝ ฯฯฮฟฮฝ ฯฯฮญฯฮฟฮฝฯฮฑ ฯฮฌฮบฮตฮปฮฟ ฮญฯฮฟฯ
ฮฝ\nฮผฮตฯฮฑฯฯฮฑฯฮตฮฏ ฯฮต ฯฯ
ฮฝฮดฮญฯฮผฮฟฯ
ฯ ฮปฮฎฯฮทฯ',
-
- "f_partial": "ฮฮนฮฑ ฮฝฮฑ ฮบฮฑฯฮตฮฒฮฌฯฮตฮนฯ ฮผฮต ฮฑฯฯฮฌฮปฮตฮนฮฑ ฮญฮฝฮฑ ฮฑฯฯฮตฮฏฮฟ ฯฮฟฯ
ฮฑฮฝฮตฮฒฮฑฮฏฮฝฮตฮน, ฮบฮปฮฏฮบฮฑฯฮต ฯฮฟ ฮฑฯฯฮตฮฏฮฟ ฮผฮต ฯฮฟ ฮฏฮดฮนฮฟ ฯฮฝฮฟฮผฮฑ, ฮฑฮปฮปฮฌ ฯฯฯฮฏฯ ฯฮทฮฝ ฮบฮฑฯฮฌฮปฮทฮพฮท .PARTIAL. ฮ ฮฌฯฮฑ ฮฮบฯ
ฯฮฟ ฮฎ Escape ฮณฮนฮฑ ฮฝฮฑ ฯฯฮฑฮผฮฑฯฮฎฯฮตฮนฯ.\n\nฮ ฮฌฯฮฑ ฮฮฝฯฮฌฮพฮตฮน / Enter ฮฑฮฝ ฮฑฮณฮฝฮฟฮตฮฏฯ ฯฮทฮฝ ฯฯฮฟฮตฮนฮดฮฟฯฮฟฮฏฮทฯฮท ฮบฮฑฮน ฮบฮฑฯฮญฮฒฮฑฯฮต ฯฮฟ .PARTIAL ฮฑฯฯฮตฮฏฮฟ, ฯฮฟฯ
ฯฯฮตฮดฯฮฝ ฯฮฏฮณฮฟฯ
ฯฮฑ ฮธฮฑ ฮตฮฏฮฝฮฑฮน ฮบฮฑฯฮตฯฯฯฮฑฮผฮผฮญฮฝฮฟ.",
-
- "ft_paste": "ฮตฯฮนฮบฯฮปฮปฮทฯฮต {0} ฮฑฮฝฯฮนฮบฮตฮฏฮผฮตฮฝฮฑ$Nฮ ฮปฮฎฮบฯฯฮฟ ฯฯ
ฮฝฯฯฮผฮตฯ
ฯฮทฯ: ctrl-V",
- "fr_eperm": 'ฮดฮตฮฝ ฮผฯฮฟฯฮตฮฏ ฮฝฮฑ ฮผฮตฯฮฟฮฝฮฟฮผฮฑฯฯฮตฮฏ:\nฮดฮตฮฝ ฮญฯฮตฮนฯ ฮดฮนฮบฮฑฮฏฯฮผฮฑ โฮผฮตฯฮฑฮบฮฏฮฝฮทฯฮทฯโ ฯฮต ฮฑฯ
ฯฯฮฝ ฯฮฟ ฯฮฌฮบฮตฮปฮฟ',
- "fd_eperm": 'ฮดฮตฮฝ ฮผฯฮฟฯฮตฮฏ ฮฝฮฑ ฮดฮนฮฑฮณฯฮฑฯฮตฮฏ:\nฮดฮตฮฝ ฮญฯฮตฮนฯ ฮดฮนฮบฮฑฮฏฯฮผฮฑ โฮดฮนฮฑฮณฯฮฑฯฮฎฯโ ฯฮต ฮฑฯ
ฯฯฮฝ ฯฮฟ ฯฮฌฮบฮตฮปฮฟ',
- "fc_eperm": 'ฮดฮตฮฝ ฮผฯฮฟฯฮตฮฏ ฮฝฮฑ ฮบฮฟฯฮตฮฏ:\nฮดฮตฮฝ ฮญฯฮตฮนฯ ฮดฮนฮบฮฑฮฏฯฮผฮฑ โฮผฮตฯฮฑฮบฮฏฮฝฮทฯฮทฯโ ฯฮต ฮฑฯ
ฯฯฮฝ ฯฮฟ ฯฮฌฮบฮตฮปฮฟ',
- "fp_eperm": 'ฮดฮตฮฝ ฮผฯฮฟฯฮตฮฏ ฮฝฮฑ ฮตฯฮนฮบฮฟฮปฮปฮทฮธฮตฮฏ:\nฮดฮตฮฝ ฮญฯฮตฮนฯ ฮดฮนฮบฮฑฮฏฯฮผฮฑ โฮตฮณฮณฯฮฑฯฮฎฯโ ฯฮต ฮฑฯ
ฯฯฮฝ ฯฮฟ ฯฮฌฮบฮตฮปฮฟ',
- "fr_emore": "ฮตฯฮฏฮปฮตฮพฮต ฯฮฟฯ
ฮปฮฌฯฮนฯฯฮฟฮฝ ฮญฮฝฮฑ ฮฑฮฝฯฮนฮบฮตฮฏฮผฮตฮฝฮฟ ฮณฮนฮฑ ฮผฮตฯฮฟฮฝฮฟฮผฮฑฯฮฏฮฑ",
- "fd_emore": "ฮตฯฮฏฮปฮตฮพฮต ฯฮฟฯ
ฮปฮฌฯฮนฯฯฮฟฮฝ ฮญฮฝฮฑ ฮฑฮฝฯฮนฮบฮตฮฏฮผฮตฮฝฮฟ ฮณฮนฮฑ ฮดฮนฮฑฮณฯฮฑฯฮฎ",
- "fc_emore": "ฮตฯฮฏฮปฮตฮพฮต ฯฮฟฯ
ฮปฮฌฯฮนฯฯฮฟฮฝ ฮญฮฝฮฑ ฮฑฮฝฯฮนฮบฮตฮฏฮผฮตฮฝฮฟ ฮณฮนฮฑ ฮฑฯฮฟฮบฮฟฯฮฎ",
- "fcp_emore": "ฮตฯฮฏฮปฮตฮพฮต ฯฮฟฯ
ฮปฮฌฯฮนฯฯฮฟฮฝ ฮญฮฝฮฑ ฮฑฮฝฯฮนฮบฮตฮฏฮผฮตฮฝฮฟ ฮณฮนฮฑ ฮฑฮฝฯฮนฮณฯฮฑฯฮฎ ฯฯฮฟ ฯฯฯฯฮตฮนฯฮฟ",
-
- "fs_sc": "ฮผฮฟฮนฯฮฌฯฮฟฯ
ฯฮฟ ฯฮฌฮบฮตฮปฮฟ ฯฮฟฯ
ฮฒฯฮฏฯฮบฮตฯฮฑฮน",
- "fs_ss": "ฮผฮฟฮนฯฮฌฯฮฟฯ
ฯฮฑ ฮตฯฮนฮปฮตฮณฮผฮญฮฝฮฑ ฮฑฯฯฮตฮฏฮฑ",
- "fs_just1d": "ฮดฮตฮฝ ฮผฯฮฟฯฮตฮฏฯ ฮฝฮฑ ฮตฯฮนฮปฮญฮพฮตฮนฯ ฯฮตฯฮนฯฯฯฯฮตฯฮฟฯ
ฯ ฮฑฯฯ ฮญฮฝฮฑฮฝ ฯฮฑฮบฮญฮปฮฟฯ
ฯ,\nฮฎ ฮฝฮฑ ฮฑฮฝฮฑฮผฮตฮฏฮพฮตฮนฯ ฮฑฯฯฮตฮฏฮฑ ฮบฮฑฮน ฯฮฑฮบฮญฮปฮฟฯ
ฯ ฯฯฮทฮฝ ฮฏฮดฮนฮฑ ฮตฯฮนฮปฮฟฮณฮฎ",
- "fs_abrt": "โ ฮฑฮบฯฯฯฯฮท",
- "fs_rand": "๐ฒ ฯฯ
ฯฮฑฮฏฮฟ ฯฮฝฮฟฮผฮฑ",
- "fs_go": "โ
ฮดฮทฮผฮนฮฟฯฯฮณฮทฯฮต ฮบฮฟฮนฮฝฮฎ ฯฯฮฎฯฮท",
- "fs_name": "ฯฮฝฮฟฮผฮฑ",
- "fs_src": "ฯฮทฮณฮฎ",
- "fs_pwd": "ฮบฯฮดฮนฮบฯฯ",
- "fs_exp": "ฮปฮฎฮพฮท",
- "fs_tmin": "ฮปฮตฯฯฮฌ",
- "fs_thrs": "ฯฯฮตฯ",
- "fs_tdays": "ฮทฮผฮญฯฮตฯ",
- "fs_never": "ฮฑฮนฯฮฝฮนฮฟ",
- "fs_pname": "ฯฯฮฟฮฑฮนฯฮตฯฮนฮบฯ ฯฮฝฮฟฮผฮฑ ฯฯ
ฮฝฮดฮญฯฮผฮฟฯ
; ฮฑฮฝ ฮตฮฏฮฝฮฑฮน ฮบฮตฮฝฯ, ฮธฮฑ ฮตฮฏฮฝฮฑฮน ฯฯ
ฯฮฑฮฏฮฟ",
- "fs_tsrc": "ฯฮฟ ฮฑฯฯฮตฮฏฮฟ ฮฎ ฮฟ ฯฮฌฮบฮตฮปฮฟฯ ฯฯฮฟฯ ฮบฮฟฮนฮฝฮฎ ฯฯฮฎฯฮท",
- "fs_ppwd": "ฯฯฮฟฮฑฮนฯฮตฯฮนฮบฯฯ ฮบฯฮดฮนฮบฯฯ",
- "fs_w8": "ฮดฮทฮผฮนฮฟฯ
ฯฮณฮฏฮฑ ฮบฮฟฮนฮฝฮฎฯ ฯฯฮฎฯฮทฯ...",
- "fs_ok": "ฯฮฌฯฮฑ Enter/ฮฮฝฯฮฌฮพฮตฮน ฮณฮนฮฑ ฮ ฯฯฯฮตฮนฯฮฟ\nฯฮฌฯฮฑ ESC/ฮฮบฯ
ฯฮฟ ฮณฮนฮฑ ฮฮปฮตฮฏฯฮนฮผฮฟ",
-
- "frt_dec": "ฮผฯฮฟฯฮตฮฏ ฮฝฮฑ ฮดฮนฮฟฯฮธฯฯฮตฮน ฮผฮตฯฮนฮบฮญฯ ฯฮตฯฮนฯฯฯฯฮตฮนฯ ฮบฮฑฯฮตฯฯฯฮฑฮผฮผฮญฮฝฯฮฝ ฮฟฮฝฮฟฮผฮฌฯฯฮฝ ฮฑฯฯฮตฮฏฯฮฝ\">ฮฑฯฮฟฮบฯฮดฮนฮบฮฟฯฮฟฮฏฮทฯฮท url",
- "frt_rst": "ฮตฯฮฑฮฝฮญฯฮตฯฮต ฯฮฑ ฮฟฮฝฯฮผฮฑฯฮฑ ฮฑฯฯฮตฮฏฯฮฝ ฯฯฮฑ ฮฑฯฯฮนฮบฮฌ ฯฮฟฯ
ฯ\">โบ ฮตฯฮฑฮฝฮฑฯฮฟฯฮฌ",
- "frt_abrt": "ฮฑฮบฯฯฯฯฮต ฮบฮฑฮน ฮบฮปฮตฮฏฯฮต ฮฑฯ
ฯฯ ฯฮฟ ฯฮฑฯฮฌฮธฯ
ฯฮฟ\">โ ฮฑฮบฯฯฯฯฮท",
- "frb_apply": "ฮฮฆฮฮกฮฮฮฮ ฮฮฮคฮฮฮฮฮฮฃฮฮฮฃ",
- "fr_adv": "ฮผฮฑฮถฮนฮบฮฎ / ฮผฮตฯฮฑฮดฮตฮดฮฟฮผฮญฮฝฮฑ / ฮผฮตฯฮฟฮฝฮฟฮผฮฑฯฮฏฮฑ ฮผฮต ฯฯฯฯฯ
ฯฮฑ\">ฯฯฮฟฯฯฯฮทฮผฮญฮฝฮท",
- "fr_case": "regex ฮผฮต ฮดฮนฮฌฮบฯฮนฯฮท ฯฮตฮถฯฮฝ/ฮบฮตฯฮฑฮปฮฑฮฏฯฮฝ\">case",
- "fr_win": "ฮฑฯฯฮฑฮปฮฎ ฮฟฮฝฯฮผฮฑฯฮฑ ฮณฮนฮฑ windows; ฮฑฮฝฯฮนฮบฮฑฮธฮนฯฯฮฌ <>:"\\|?* ฮผฮต ฮนฮฑฯฯฮฝฮนฮบฮฟฯฯ ฯฮฑฯฮฑฮบฯฮฎฯฮตฯ ฯฮปฮฎฯฮฟฯ
ฯ ฯฮปฮฌฯฮฟฯ
ฯ\">win",
- "fr_slash": "ฮฑฮฝฯฮนฮบฮฑฮธฮฏฯฯฮฑฯฮฑฮน / ฮผฮต ฯฮฑฯฮฑฮบฯฮฎฯฮฑ ฯฮฟฯ
ฮดฮตฮฝ ฮดฮทฮผฮนฮฟฯ
ฯฮณฮตฮฏ ฮฝฮญฮฟฯ
ฯ ฯฮฑฮบฮญฮปฮฟฯ
ฯ\">ฯฯฮน /",
- "fr_re": "ฮผฮฟฯฮฏฮฒฮฑ ฮฑฮฝฮฑฮถฮฎฯฮทฯฮทฯ (regex) ฮณฮนฮฑ ฮฑฮฝฮฑฮถฮฎฯฮทฯฮท ฯฯฮฑ ฮฑฯฯฮนฮบฮฌ ฮฟฮฝฯฮผฮฑฯฮฑ; ฯฮฑ ฮบฮฑฯฮฑฮณฯฮฑฯฯฮผฮตฮฝฮฑ groups ฮผฯฮฟฯฮฟฯฮฝ ฮฝฮฑ ฯฯฮทฯฮนฮผฮฟฯฮฟฮนฮทฮธฮฟฯฮฝ ฯฯฮฟ ฯฮตฮดฮฏฮฟ ฮผฮฟฯฯฮฟฯฮฟฮฏฮทฯฮทฯ ฯฮฑฯฮฑฮบฮฌฯฯ ฯฯฯฯ <code>(1)</code> ฮบฮฑฮน <code>(2)</code> ฮบฮฑฮน ฮฟฯฯฯ ฮบฮฑฮธฮตฮพฮฎฯ",
- "fr_fmt": "ฮตฮผฯฮฝฮตฯ
ฯฮผฮญฮฝฮฟ ฮฑฯฯ foobar2000:$N<code>(title)</code> ฮฑฮฝฯฮนฮบฮฑฮธฮฏฯฯฮฑฯฮฑฮน ฮฑฯฯ ฯฮฏฯฮปฮฟ ฯฯฮฑฮณฮฟฯ
ฮดฮนฮฟฯ,$N<code>[(artist) - ](title)</code> ฯฮฑฯฮฑฮปฮตฮฏฯฮตฮน ฯฮฟ [this] ฮฑฮฝ ฯฮฟ artist ฮตฮฏฮฝฮฑฮน ฮบฮตฮฝฯ$N<code>$lpad((tn),2,0)</code> ฮณฮตฮผฮฏฮถฮตฮน ฯฮฟฮฝ ฮฑฯฮนฮธฮผฯ ฮบฮฟฮผฮผฮฑฯฮนฮฟฯ ฯฮต 2 ฯฮทฯฮฏฮฑ",
- "fr_pdel": "ฮดฮนฮฑฮณฯฮฑฯฮฎ",
- "fr_pnew": "ฮฑฯฮฟฮธฮฎฮบฮตฯ
ฯฮท ฯฯ",
- "fr_pname": "ฮดฯฯฮต ฯฮฝฮฟฮผฮฑ ฮณฮนฮฑ ฯฮท ฮฝฮญฮฑ ฯฯฮฟฮตฯฮนฮปฮฟฮณฮฎ",
- "fr_aborted": "ฮฑฮบฯ
ฯฯฮธฮทฮบฮต",
- "fr_lold": "ฯฮฑฮปฮนฯ ฯฮฝฮฟฮผฮฑ",
- "fr_lnew": "ฮฝฮญฮฟ ฯฮฝฮฟฮผฮฑ",
- "fr_tags": "ฮตฯฮนฮบฮญฯฮตฯ ฮณฮนฮฑ ฯฮฑ ฮตฯฮนฮปฮตฮณฮผฮญฮฝฮฑ ฮฑฯฯฮตฮฏฮฑ (ฮผฯฮฝฮฟ ฮณฮนฮฑ ฮฑฮฝฮฌฮณฮฝฯฯฮท):",
- "fr_busy": "ฮผฮตฯฮฟฮฝฮฟฮผฮฑฯฮฏฮฑ {0} ฮฑฮฝฯฮนฮบฮตฮนฮผฮญฮฝฯฮฝ...\n\n{1}",
- "fr_efail": "ฮฑฯฮฟฯฯ
ฯฮฏฮฑ ฮผฮตฯฮฟฮฝฮฟฮผฮฑฯฮฏฮฑฯ:\n",
- "fr_nchg": "{0} ฮฑฯฯ ฯฮฑ ฮฝฮญฮฑ ฮฟฮฝฯฮผฮฑฯฮฑ ฮฌฮปฮปฮฑฮพฮฑฮฝ ฮปฯฮณฯ win ฮบฮฑฮน/ฮฎ ฯฯฮน /\n\nฮฮฏฮฝฮฑฮน ฮฮ ฮฝฮฑ ฯฯ
ฮฝฮตฯฮฏฯฮฟฯ
ฮผฮต ฮผฮต ฮฑฯ
ฯฮฌ ฯฮฑ ฮฟฮฝฯฮผฮฑฯฮฑ;",
-
- "fd_ok": "ฮดฮนฮฑฮณฯฮฑฯฮฎ OK",
- "fd_err": "ฮฑฯฮฟฯฯ
ฯฮฏฮฑ ฮดฮนฮฑฮณฯฮฑฯฮฎฯ:\n",
- "fd_none": "ฮดฮตฮฝ ฮดฮนฮฑฮณฯฮฌฯฮทฮบฮต ฯฮฏฯฮฟฯฮฑ; ฮฏฯฯฯ ฮผฯฮปฮฟฮบฮฑฯฮนฯฮผฮญฮฝฮฟ ฮฑฯฯ ฯฮนฯ ฯฯ
ฮธฮผฮฏฯฮตฮนฯ ฯฮฟฯ
ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ (xbd);",
- "fd_busy": "ฮดฮนฮฑฮณฯฮฑฯฮฎ {0} ฮฑฮฝฯฮนฮบฮตฮนฮผฮญฮฝฯฮฝ...\n\n{1}",
- "fd_warn1": "ฮฮฮฮฮกฮฮฆฮ ฮฑฯ
ฯฯฮฝ ฯฯฮฝ {0} ฮฑฮฝฯฮนฮบฮตฮนฮผฮญฮฝฯฮฝ;",
- "fd_warn2": "ฮคฮตฮปฮตฯ
ฯฮฑฮฏฮฑ ฮตฯ
ฮบฮฑฮนฯฮฏฮฑ! ฮฮตฮฝ ฯ
ฯฮฌฯฯฮตฮน ฮฑฮฝฮฑฮฏฯฮตฯฮท. ฮฮนฮฑฮณฯฮฑฯฮฎ;",
-
- "fc_ok": "ฮฑฯฮฟฮบฮฟฯฮฎ {0} ฮฑฮฝฯฮนฮบฮตฮนฮผฮญฮฝฯฮฝ",
- "fc_warn": 'ฮฑฯฮฟฮบฮฟฯฮฎ {0} ฮฑฮฝฯฮนฮบฮตฮนฮผฮญฮฝฯฮฝ\n\nฮฑฮปฮปฮฌ: ฮผฯฮฝฮฟ ฮฑฯ
ฯฮฎ ฮท ฮบฮฑฯฯฮญฮปฮฑ browser ฮผฯฮฟฯฮตฮฏ ฮฝฮฑ ฯฮฑ ฮตฯฮนฮบฮฟฮปฮปฮฎฯฮตฮน\n(ฮปฯฮณฯ ฯฮฟฮปฯ ฮผฮตฮณฮฌฮปฮทฯ ฮตฯฮนฮปฮฟฮณฮฎฯ)',
-
- "fcc_ok": "ฮฑฮฝฯฮนฮณฯฮฌฯฮทฮบฮฑฮฝ {0} ฮฑฮฝฯฮนฮบฮตฮฏฮผฮตฮฝฮฑ ฯฯฮฟ ฯฯฯฯฮตฮนฯฮฟ",
- "fcc_warn": "ฮฑฮฝฯฮนฮณฯฮฌฯฮทฮบฮฑฮฝ {0} ฮฑฮฝฯฮนฮบฮตฮฏฮผฮตฮฝฮฑ ฯฯฮฟ ฯฯฯฯฮตฮนฯฮฟ\n\nฮฑฮปฮปฮฌ: ฮผฯฮฝฮฟ ฮฑฯ
ฯฮฎ ฮท ฮบฮฑฯฯฮญฮปฮฑ browser ฮผฯฮฟฯฮตฮฏ ฮฝฮฑ ฯฮฑ ฮตฯฮนฮบฮฟฮปฮปฮฎฯฮตฮน\n(ฮปฯฮณฯ ฯฮฟฮปฯ ฮผฮตฮณฮฌฮปฮทฯ ฮตฯฮนฮปฮฟฮณฮฎฯ)",
-
- "fp_apply": "ฯฯฮทฯฮนฮผฮฟฯฮฟฮฏฮทฯฮต ฮฑฯ
ฯฮฌ ฯฮฑ ฮฟฮฝฯฮผฮฑฯฮฑ",
- "fp_ecut": "ฯฯฯฯฮฑ ฮบฮฌฮฝฮต ฮฑฯฮฟฮบฮฟฯฮฎ ฮฎ ฮฑฮฝฯฮนฮณฯฮฑฯฮฎ ฮบฮฌฯฮฟฮนฯฮฝ ฮฑฯฯฮตฮฏฯฮฝ / ฯฮฑฮบฮญฮปฯฮฝ ฮณฮนฮฑ ฮตฯฮนฮบฯฮปฮปฮทฯฮท / ฮผฮตฯฮฑฮบฮฏฮฝฮทฯฮท\n\nฯฮทฮผฮตฮฏฯฯฮท: ฮผฯฮฟฯฮตฮฏฯ ฮฝฮฑ ฮฑฯฮฟฮบฯฯฯฮตฮนฯ / ฮตฯฮนฮบฮฟฮปฮปฮฌฯ ฮฑฮฝฮฌฮผฮตฯฮฑ ฯฮต ฮดฮนฮฑฯฮฟฯฮตฯฮนฮบฮญฯ ฮบฮฑฯฯฮญฮปฮตฯ browser",
- "fp_ename": "ฯฮฑ {0} ฮฑฮฝฯฮนฮบฮตฮฏฮผฮตฮฝฮฑ ฮดฮตฮฝ ฮผฯฮฟฯฮฟฯฮฝ ฮฝฮฑ ฮผฮตฯฮฑฮบฮนฮฝฮทฮธฮฟฯฮฝ ฮตฮดฯ ฮณฮนฮฑฯฮฏ ฯฮฑ ฮฟฮฝฯฮผฮฑฯฮฑ ฯ
ฯฮฌฯฯฮฟฯ
ฮฝ ฮฎฮดฮท. ฮฯฯฮต ฮฝฮญฮฑ ฮฟฮฝฯฮผฮฑฯฮฑ ฯฮฑฯฮฑฮบฮฌฯฯ ฮณฮนฮฑ ฮฝฮฑ ฯฯ
ฮฝฮตฯฮฏฯฮตฮนฯ, ฮฎ ฮฌฯฮทฯฮต ฮบฮตฮฝฯ ฮณฮนฮฑ ฮฝฮฑ ฯฮฑ ฮฑฮณฮฝฮฟฮฎฯฮตฮนฯ:",
- "fcp_ename": "ฯฮฑ {0} ฮฑฮฝฯฮนฮบฮตฮฏฮผฮตฮฝฮฑ ฮดฮตฮฝ ฮผฯฮฟฯฮฟฯฮฝ ฮฝฮฑ ฮฑฮฝฯฮนฮณฯฮฑฯฮฟฯฮฝ ฮตฮดฯ ฮณฮนฮฑฯฮฏ ฯฮฑ ฮฟฮฝฯฮผฮฑฯฮฑ ฯ
ฯฮฌฯฯฮฟฯ
ฮฝ ฮฎฮดฮท. ฮฯฯฮต ฮฝฮญฮฑ ฮฟฮฝฯฮผฮฑฯฮฑ ฯฮฑฯฮฑฮบฮฌฯฯ ฮณฮนฮฑ ฮฝฮฑ ฯฯ
ฮฝฮตฯฮฏฯฮตฮนฯ, ฮฎ ฮฌฯฮทฯฮต ฮบฮตฮฝฯ ฮณฮนฮฑ ฮฝฮฑ ฯฮฑ ฮฑฮณฮฝฮฟฮฎฯฮตฮนฯ:",
- "fp_emore": "ฯ
ฯฮฌฯฯฮฟฯ
ฮฝ ฮฑฮบฯฮผฮฑ ฯฯ
ฮณฮบฯฮฟฯฯฮตฮนฯ ฮฟฮฝฮฟฮผฮฌฯฯฮฝ ฯฮฟฯ
ฯฯฮญฯฮตฮน ฮฝฮฑ ฮดฮนฮฟฯฮธฯฮธฮฟฯฮฝ",
- "fp_ok": "ฮผฮตฯฮฑฮบฮฏฮฝฮทฯฮท OK",
- "fcp_ok": "ฮฑฮฝฯฮนฮณฯฮฑฯฮฎ OK",
- "fp_busy": "ฮผฮตฯฮฑฮบฮฏฮฝฮทฯฮท {0} ฮฑฮฝฯฮนฮบฮตฮนฮผฮญฮฝฯฮฝ...\n\n{1}",
- "fcp_busy": "ฮฑฮฝฯฮนฮณฯฮฑฯฮฎ {0} ฮฑฮฝฯฮนฮบฮตฮนฮผฮญฮฝฯฮฝ...\n\n{1}",
- "fp_abrt": "ฮณฮฏฮฝฮตฯฮฑฮน ฮฑฮบฯฯฯฯฮท...", //m
- "fp_err": "ฮฑฯฮฟฯฯ
ฯฮฏฮฑ ฮผฮตฯฮฑฮบฮฏฮฝฮทฯฮทฯ:\n",
- "fcp_err": "ฮฑฯฮฟฯฯ
ฯฮฏฮฑ ฮฑฮฝฯฮนฮณฯฮฑฯฮฎฯ:\n",
- "fp_confirm": "ฮฝฮฑ ฮผฮตฯฮฑฮบฮนฮฝฮทฮธฮฟฯฮฝ ฮฑฯ
ฯฮฌ ฯฮฑ {0} ฮฑฮฝฯฮนฮบฮตฮฏฮผฮตฮฝฮฑ ฮตฮดฯ;",
- "fcp_confirm": "ฮฝฮฑ ฮฑฮฝฯฮนฮณฯฮฑฯฮฟฯฮฝ ฮฑฯ
ฯฮฌ ฯฮฑ {0} ฮฑฮฝฯฮนฮบฮตฮฏฮผฮตฮฝฮฑ ฮตฮดฯ;",
- "fp_etab": "ฮฑฯฮฟฯฯ
ฯฮฏฮฑ ฮฑฮฝฮฌฮณฮฝฯฯฮทฯ ฯฯฯฯฮตฮนฯฮฟฯ
ฮฑฯฯ ฮฌฮปฮปฮท ฮบฮฑฯฯฮญฮปฮฑ browser",
- "fp_name": "ฮผฮตฯฮฑฯฯฯฯฯฯฮท ฮฑฯฯฮตฮฏฮฟฯ
ฮฑฯฯ ฯฮท ฯฯ
ฯฮบฮตฯ
ฮฎ ฯฮฟฯ
. ฮฯฯฮต ฯฮฟฯ
ฯฮฝฮฟฮผฮฑ:",
- "fp_both_m": 'ฮดฮนฮฌฮปฮตฮพฮต ฯฮน ฮธฮฑ ฮตฯฮนฮบฮฟฮปฮปฮฎฯฮตฮนฯ
Enter = ฮฮตฯฮฑฮบฮฏฮฝฮทฯฮท {0} ฮฑฯฯฮตฮฏฯฮฝ ฮฑฯฯ ยซ{1}ยป\nESC = ฮฮตฯฮฑฯฯฯฯฯฯฮท {2} ฮฑฯฯฮตฮฏฯฮฝ ฮฑฯฯ ฯฮท ฯฯ
ฯฮบฮตฯ
ฮฎ ฯฮฟฯ
',
- "fcp_both_m": 'ฮดฮนฮฌฮปฮตฮพฮต ฯฮน ฮธฮฑ ฮตฯฮนฮบฮฟฮปฮปฮฎฯฮตฮนฯ
Enter = ฮฮฝฯฮนฮณฯฮฑฯฮฎ {0} ฮฑฯฯฮตฮฏฯฮฝ ฮฑฯฯ ยซ{1}ยป\nESC = ฮฮตฯฮฑฯฯฯฯฯฯฮท {2} ฮฑฯฯฮตฮฏฯฮฝ ฮฑฯฯ ฯฮท ฯฯ
ฯฮบฮตฯ
ฮฎ ฯฮฟฯ
',
- "fp_both_b": 'ฮฮตฯฮฑฮบฮฏฮฝฮทฯฮทฮฮตฯฮฑฯฯฯฯฯฯฮท',
- "fcp_both_b": 'ฮฮฝฯฮนฮณฯฮฑฯฮฎฮฮตฯฮฑฯฯฯฯฯฯฮท',
-
- "mk_noname": "ฮณฯฮฌฯฮต ฮญฮฝฮฑ ฯฮฝฮฟฮผฮฑ ฯฯฮฟ ฯฮตฮดฮฏฮฟ ฮบฮตฮนฮผฮญฮฝฮฟฯ
ฮฑฯฮนฯฯฮตฯฮฌ ฯฯฮนฮฝ ฯฮฟ ฮบฮฌฮฝฮตฮนฯ :p",
-
- "tv_load": "ฮฆฯฯฯฯฯฮท ฮฑฯฯฮตฮฏฮฟฯ
ฮบฮตฮนฮผฮญฮฝฮฟฯ
:\n\n{0}\n\n{1}% ({2} ฮฑฯฯ {3} MiB ฯฮฟฯฯฯฮผฮญฮฝฮฑ)",
- "tv_xe1": "ฮฑฮดฯ
ฮฝฮฑฮผฮฏฮฑ ฯฯฯฯฯฯฮทฯ ฮฑฯฯฮตฮฏฮฟฯ
ฮบฮตฮนฮผฮญฮฝฮฟฯ
:\n\nฯฯฮฌฮปฮผฮฑ ",
- "tv_xe2": "404, ฮฑฯฯฮตฮฏฮฟ ฮดฮตฮฝ ฮฒฯฮญฮธฮทฮบฮต",
- "tv_lst": "ฮปฮฏฯฯฮฑ ฮฑฯฯฮตฮฏฯฮฝ ฮบฮตฮนฮผฮญฮฝฮฟฯ
ฯฮต",
- "tvt_close": "ฮตฯฮนฯฯฯฮฟฯฮฎ ฯฯฮทฮฝ ฯฯฮฟฮฒฮฟฮปฮฎ ฯฮฑฮบฮญฮปฮฟฯ
$Nฮฃฯ
ฮฝฯฯฮผฮตฯ
ฯฮท: M (ฮฎ Esc)\">โ ฮบฮปฮตฮฏฯฮนฮผฮฟ",
- "tvt_dl": "ฮบฮฑฯฮญฮฒฮฑฯฮต ฮฑฯ
ฯฯ ฯฮฟ ฮฑฯฯฮตฮฏฮฟ$Nฮฃฯ
ฮฝฯฯฮผฮตฯ
ฯฮท: Y\">๐พ ฮปฮฎฯฮท",
- "tvt_prev": "ฯฯฮฟฮฒฮฟฮปฮฎ ฯฯฮฟฮทฮณฮฟฯฮผฮตฮฝฮฟฯ
ฮตฮณฮณฯฮฌฯฮฟฯ
$Nฮฃฯ
ฮฝฯฯฮผฮตฯ
ฯฮท: i\">โฌ ฯฯฮฟฮทฮณฮฟฯฮผฮตฮฝฮฟ",
- "tvt_next": "ฯฯฮฟฮฒฮฟฮปฮฎ ฮตฯฯฮผฮตฮฝฮฟฯ
ฮตฮณฮณฯฮฌฯฮฟฯ
$Nฮฃฯ
ฮฝฯฯฮผฮตฯ
ฯฮท: K\">โฌ ฮตฯฯฮผฮตฮฝฮฟ",
- "tvt_sel": "ฮตฯฮญฮปฮตฮพฮต ฮฑฯฯฮตฮฏฮฟ (ฮณฮนฮฑ ฮฑฯฮฟฮบฮฟฯฮฎ / ฮฑฮฝฯฮนฮณฯฮฑฯฮฎ / ฮดฮนฮฑฮณฯฮฑฯฮฎ / ...)$Nฮฃฯ
ฮฝฯฯฮผฮตฯ
ฯฮท: S\">ฮตฯฮนฮปฮฟฮณฮฎ",
- "tvt_edit": "ฮฌฮฝฮฟฮนฮณฮผฮฑ ฮฑฯฯฮตฮฏฮฟฯ
ฯฯฮฟฮฝ ฮตฯฮตฮพฮตฯฮณฮฑฯฯฮฎ ฮบฮตฮนฮผฮญฮฝฮฟฯ
$Nฮฃฯ
ฮฝฯฯฮผฮตฯ
ฯฮท: E\">โ๏ธ ฮตฯฮตฮพฮตฯฮณฮฑฯฮฏฮฑ",
- "tvt_tail": "ฯฮฑฯฮฑฮบฮฟฮปฮฟฯฮธฮทฯฮท ฮฑฯฯฮตฮฏฮฟฯ
ฮณฮนฮฑ ฮฑฮปฮปฮฑฮณฮญฯ; ฮตฮผฯฮฌฮฝฮนฯฮท ฮฝฮญฯฮฝ ฮณฯฮฑฮผฮผฯฮฝ ฯฮต ฯฯฮฑฮณฮผฮฑฯฮนฮบฯ ฯฯฯฮฝฮฟ\">๐ก ฯฮฑฯฮฑฮบฮฟฮปฮฟฯฮธฮทฯฮท",
- "tvt_wrap": "ฮฑฮฝฮฑฮดฮฏฯฮปฯฯฮท ฮปฮญฮพฮตฯฮฝ\">โต",
- "tvt_atail": "ฮบฮปฮตฮฏฮดฯฮผฮฑ ฮบฯฮปฮนฯฮทฯ ฯฯฮฟ ฮบฮฌฯฯ ฮผฮญฯฮฟฯ\">โ",
- "tvt_ctail": "ฮฑฯฮฟฮบฯฮดฮนฮบฮฟฯฮฟฮฏฮทฯฮท ฯฯฯฮผฮฌฯฯฮฝ ฯฮตฯฮผฮฑฯฮนฮบฮฟฯ (ansi escape codes)\">๐",
- "tvt_ntail": "ฯฯฮนฮฟ ฮบฯฮปฮนฯฮทฯ (ฯฯฯฮฑ bytes ฮบฮตฮนฮผฮญฮฝฮฟฯ
ฮฝฮฑ ฮบฯฮฑฯฮฟฯฮฝฯฮฑฮน ฯฮฟฯฯฯฮผฮญฮฝฮฑ)",
-
- "m3u_add1": "ฯฮฟ ฯฯฮฑฮณฮฟฯฮดฮน ฯฯฮฟฯฯฮญฮธฮทฮบฮต ฯฯฮท ฮปฮฏฯฯฮฑ m3u",
- "m3u_addn": "ฯฯฮฟฯฯฮญฮธฮทฮบฮฑฮฝ {0} ฯฯฮฑฮณฮฟฯฮดฮนฮฑ ฯฯฮท ฮปฮฏฯฯฮฑ m3u",
- "m3u_clip": "ฮท ฮปฮฏฯฯฮฑ m3u ฮฑฮฝฯฮนฮณฯฮฌฯฮทฮบฮต ฯฯฮฟ ฯฯฯฯฮตฮนฯฮฟ\n\nฯฯฮญฯฮตฮน ฮฝฮฑ ฯฯฮนฮฌฮพฮตฮนฯ ฮญฮฝฮฑ ฮฝฮญฮฟ ฮฑฯฯฮตฮฏฮฟ ฮบฮตฮนฮผฮญฮฝฮฟฯ
ฮผฮต ฯฮฝฮฟฮผฮฑ ฮท_ฮปฮฏฯฯฮฑ_ฮผฮฟฯ
.m3u ฮบฮฑฮน ฮฝฮฑ ฮตฯฮนฮบฮฟฮปฮปฮฎฯฮตฮนฯ ฯฮท ฮปฮฏฯฯฮฑ ฮผฮญฯฮฑยท ฮฑฯ
ฯฯ ฮธฮฑ ฯฮฟ ฮบฮฑฯฮฑฯฯฮฎฯฮตฮน ฮฑฮฝฮฑฯฮฑฯฮฌฮพฮนฮผฮฟ",
-
- "gt_vau": "ฮผฮทฮฝ ฮดฮตฮฏฯฮฝฮตฮนฯ ฯฮฟ ฮฒฮฏฮฝฯฮตฮฟ, ฯฮฑฮฏฮพฮต ฮผฯฮฝฮฟ ฯฮฟฮฝ ฮฎฯฮฟ\">๐ง",
- "gt_msel": "ฮตฮฝฮตฯฮณฮฟฯฮฟฮฏฮทฯฮท ฮตฯฮนฮปฮฟฮณฮฎฯ ฮฑฯฯฮตฮฏฯฮฝ; ctrl-ฮบฮปฮนฮบ ฯฮต ฮฑฯฯฮตฮฏฮฟ ฮณฮนฮฑ ฯฮฑฯฮฌฮบฮฑฮผฯฮท$N$N<em>ฯฯฮฑฮฝ ฮตฮฏฮฝฮฑฮน ฮตฮฝฮตฯฮณฯ: ฮดฮนฯฮปฯ ฮบฮปฮนฮบ ฯฮต ฮฑฯฯฮตฮฏฮฟ / ฯฮฌฮบฮตฮปฮฟ ฯฮฟ ฮฑฮฝฮฟฮฏฮณฮตฮน</em>$N$Nฮฃฯ
ฮฝฯฯฮผฮตฯ
ฯฮท: S\">ฯฮฟฮปฮปฮฑฯฮปฮฎ ฮตฯฮนฮปฮฟฮณฮฎ",
- "gt_crop": "ฮบฮตฮฝฯฯฮฑฯฮนฯฮผฮญฮฝฮท ฯฮตฯฮนฮบฮฟฯฮฎ ฮผฮนฮบฯฮฟฮณฯฮฑฯฮนฯฮฝ\">ฯฮตฯฮนฮบฮฟฯฮฎ",
- "gt_3x": "ฮผฮนฮบฯฮฟฮณฯฮฑฯฮฏฮตฯ ฯ
ฯฮทฮปฮฎฯ ฮฑฮฝฮฌฮปฯ
ฯฮทฯ\">3x",
- "gt_zoom": "ฮถฮฟฯ
ฮผ",
- "gt_chop": "ฮบฯฯฮต",
- "gt_sort": "ฯฮฑฮพฮนฮฝฯฮผฮทฯฮท ฮบฮฑฯฮฌ",
- "gt_name": "ฯฮฝฮฟฮผฮฑ",
- "gt_sz": "ฮผฮญฮณฮตฮธฮฟฯ",
- "gt_ts": "ฮทฮผฮตฯฮฟฮผฮทฮฝฮฏฮฑ",
- "gt_ext": "ฯฯฯฮฟฯ",
- "gt_c1": "ฮผฮตฮณฮฑฮปฯฯฮตฯฮท ฯฮตฯฮนฮบฮฟฯฮฎ ฮฟฮฝฮฟฮผฮฌฯฯฮฝ ฮฑฯฯฮตฮฏฯฮฝ (ฮดฮตฮฏฮพฮต ฮปฮนฮณฯฯฮตฯฮฑ)",
- "gt_c2": "ฮผฮนฮบฯฯฯฮตฯฮท ฯฮตฯฮนฮบฮฟฯฮฎ ฮฟฮฝฮฟฮผฮฌฯฯฮฝ ฮฑฯฯฮตฮฏฯฮฝ (ฮดฮตฮฏฮพฮต ฯฮตฯฮนฯฯฯฯฮตฯฮฑ)",
-
- "sm_w8": "ฮฑฮฝฮฑฮถฮฎฯฮทฯฮท...",
- "sm_prev": "ฯฮฑ ฯฮฑฯฮฑฮบฮฌฯฯ ฮฑฯฮฟฯฮตฮปฮญฯฮผฮฑฯฮฑ ฮฑฮฝฮฑฮถฮฎฯฮทฯฮทฯ ฯฯฮฟฮญฯฯฮฟฮฝฯฮฑฮน ฮฑฯฯ ฯฯฮฟฮทฮณฮฟฯฮผฮตฮฝฮท ฮฑฮฝฮฑฮถฮฎฯฮทฯฮท:\n ",
- "sl_close": "ฮบฮปฮตฮฏฯฮนฮผฮฟ ฮฑฯฮฟฯฮตฮปฮตฯฮผฮฌฯฯฮฝ ฮฑฮฝฮฑฮถฮฎฯฮทฯฮทฯ",
- "sl_hits": "ฮตฮผฯฮฑฮฝฮฏฮถฮฟฮฝฯฮฑฮน {0} ฮฑฯฮฟฯฮตฮปฮญฯฮผฮฑฯฮฑ",
- "sl_moar": "ฯฯฯฯฯฯฮต ฯฮตฯฮนฯฯฯฯฮตฯฮฑ",
-
- "s_sz": "ฮผฮญฮณฮตฮธฮฟฯ",
- "s_dt": "ฮทฮผฮตฯฮฟฮผฮทฮฝฮฏฮฑ",
- "s_rd": "ฮผฮฟฮฝฮฟฯฮฌฯฮน",
- "s_fn": "ฯฮฝฮฟฮผฮฑ",
- "s_ta": "ฮตฯฮนฮบฮญฯฮตฯ",
- "s_ua": "ฮฑฮฝฮญฮฒฮทฮบฮต@",
- "s_ad": "ฯฯฮฟฯฯฯ.",
- "s_s1": "ฮตฮปฮฌฯฮนฯฯฮฟ ฯฮต MiB",
- "s_s2": "ฮผฮญฮณฮนฯฯฮฟ ฯฮต MiB",
- "s_d1": "ฮตฮปฮฌฯฮนฯฯฮฟ iso8601",
- "s_d2": "ฮผฮญฮณฮนฯฯฮฟ iso8601",
- "s_u1": "ฮผฮตฯฮฑฯฮฟฯฯฯฮธฮทฮบฮต ฮฑฯฮณฯฯฮตฯฮฑ",
- "s_u2": "ฮบฮฑฮน/ฮฎ ฯฯฮนฮฝ",
- "s_r1": "ฯฮฟ ฮผฮฟฮฝฮฟฯฮฌฯฮน ฯฮตฯฮนฮญฯฮตฮน (ฯฯฯฮนฯฮผฮญฮฝฮฑ ฮผฮต ฮบฮตฮฝฯ)",
- "s_f1": "ฯฮฟ ฯฮฝฮฟฮผฮฑ ฯฮตฯฮนฮญฯฮตฮน (ฮฌฯฮฝฮทฯฮท ฮผฮต -nope)",
- "s_t1": "ฮฟฮน ฮตฯฮนฮบฮญฯฮตฯ ฯฮตฯฮนฮญฯฮฟฯ
ฮฝ (^=ฮฑฯฯฮฎ, ฯฮญฮปฮฟฯ=$)",
- "s_a1": "ฯฯ
ฮณฮบฮตฮบฯฮนฮผฮญฮฝฮตฯ ฮนฮดฮนฯฯฮทฯฮตฯ ฮผฮตฯฮฑฮดฮตฮดฮฟฮผฮญฮฝฯฮฝ",
-
- "md_eshow": "ฮดฮตฮฝ ฮผฯฮฟฯฮตฮฏ ฮฝฮฑ ฮตฮผฯฮฑฮฝฮนฯฯฮตฮฏ ",
- "md_off": "[๐readme] ฮฑฯฮตฮฝฮตฯฮณฮฟฯฮฟฮนฮทฮผฮญฮฝฮฟ ฯฯฮฟ [โ๏ธ] -- ฮบฯฯ
ฮผฮผฮญฮฝฮฟ ฮญฮณฮณฯฮฑฯฮฟ",
-
- "badreply": "ฮฯฮฟฯฯ
ฯฮฏฮฑ ฮฑฮฝฮฌฮปฯ
ฯฮทฯ ฮฑฯฮฌฮฝฯฮทฯฮทฯ ฮฑฯฯ ฯฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ",
-
- "xhr403": "403: ฮ ฯฯฯฮฒฮฑฯฮท ฮฑฯฮฝฮฎฮธฮทฮบฮต\n\nฮดฮฟฮบฮฏฮผฮฑฯฮต ฯฮฟ F5, ฮฏฯฯฯ ฮฑฯฮฟฯฯ
ฮฝฮดฮญฮธฮทฮบฮตฯ",
- "xhr0": "ฮฌฮณฮฝฯฯฯฮฟ (ฯฮนฮธฮฑฮฝฯฮฝ ฮฑฯฮฟฯฯฮฝฮดฮตฯฮท ฮฑฯฯ ฯฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ ฮฎ ฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎฯ ฮตฮฏฮฝฮฑฮน ฮตฮบฯฯฯ ฯฯฮฝฮดฮตฯฮทฯ)",
- "cf_ok": "ฯฯ
ฮณฮณฮฝฯฮผฮท ฮณฮน' ฮฑฯ
ฯฯ -- ฮท ฯฯฮฟฯฯฮฑฯฮฏฮฑ DD" + wah + "oS ฮตฮฝฮตฯฮณฮฟฯฮฟฮนฮฎฮธฮทฮบฮต\n\nฮฟฮน ฮดฮนฮฑฮดฮนฮบฮฑฯฮฏฮตฯ ฮธฮฑ ฯฯ
ฮฝฮตฯฮนฯฯฮฟฯฮฝ ฯฮต ฯฮตฯฮฏฯฮฟฯ
30 ฮดฮตฯ
ฯฮตฯฯฮปฮตฯฯฮฑ\n\nฮฑฮฝ ฮดฮตฮฝ ฮณฮฏฮฝฮตฮน ฯฮฏฯฮฟฯฮฑ, ฯฮฌฯฮฑ F5 ฮณฮนฮฑ ฮตฯฮฑฮฝฮฑฯฯฯฯฯฯฮท",
- "tl_xe1": "ฮฑฮดฯฮฝฮฑฯฮท ฮท ฮปฮฏฯฯฮฑ ฯ
ฯฮฟฯฮฑฮบฮญฮปฯฮฝ:\n\nฯฯฮฌฮปฮผฮฑ ",
- "tl_xe2": "404: ฮ ฯฮฌฮบฮตฮปฮฟฯ ฮดฮตฮฝ ฮฒฯฮญฮธฮทฮบฮต",
- "fl_xe1": "ฮฑฮดฯฮฝฮฑฯฮท ฮท ฮปฮฏฯฯฮฑ ฮฑฯฯฮตฮฏฯฮฝ ฯฮต ฯฮฌฮบฮตฮปฮฟ:\n\nฯฯฮฌฮปฮผฮฑ ",
- "fl_xe2": "404: ฮ ฯฮฌฮบฮตฮปฮฟฯ ฮดฮตฮฝ ฮฒฯฮญฮธฮทฮบฮต",
- "fd_xe1": "ฮฑฮดฯฮฝฮฑฯฮท ฮท ฮดฮทฮผฮนฮฟฯ
ฯฮณฮฏฮฑ ฯ
ฯฮฟฯฮฑฮบฮญฮปฮฟฯ
:\n\nฯฯฮฌฮปฮผฮฑ ",
- "fd_xe2": "404: ฮ ฮณฮฟฮฝฮนฮบฯฯ ฯฮฌฮบฮตฮปฮฟฯ ฮดฮตฮฝ ฮฒฯฮญฮธฮทฮบฮต",
- "fsm_xe1": "ฮฑฮดฯฮฝฮฑฯฮท ฮท ฮฑฯฮฟฯฯฮฟฮปฮฎ ฮผฮทฮฝฯฮผฮฑฯฮฟฯ:\n\nฯฯฮฌฮปฮผฮฑ ",
- "fsm_xe2": "404: ฮ ฮณฮฟฮฝฮนฮบฯฯ ฯฮฌฮบฮตฮปฮฟฯ ฮดฮตฮฝ ฮฒฯฮญฮธฮทฮบฮต",
- "fu_xe1": "ฮฑฯฮฟฯฯ
ฯฮฏฮฑ ฯฯฯฯฯฯฮทฯ ฮปฮฏฯฯฮฑฯ unpost ฮฑฯฯ ฯฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ:\n\nฯฯฮฌฮปฮผฮฑ ",
- "fu_xe2": "404: ฮคฮฟ ฮฑฯฯฮตฮฏฮฟ ฮดฮตฮฝ ฮฒฯฮญฮธฮทฮบฮต??",
-
- "fz_tar": "ฮผฮท ฯฯ
ฮผฯฮนฮตฯฮผฮญฮฝฮฟ ฮฑฯฯฮตฮฏฮฟ gnu-tar (linux / mac)",
- "fz_pax": "ฮผฮท ฯฯ
ฮผฯฮนฮตฯฮผฮญฮฝฮฟ pax-format tar (ฯฮนฮฟ ฮฑฯฮณฯ)",
- "fz_targz": "gnu-tar ฮผฮต ฯฯ
ฮผฯฮฏฮตฯฮท gzip ฮตฯฮฏฯฮตฮดฮฟ 3$N$Nฯฯ
ฮฝฮฎฮธฯฯ ฯฮฟฮปฯ ฮฑฯฮณฯ, ฮฟฯฯฯฮต$Nฯฯฮทฯฮนฮผฮฟฯฮฟฮฏฮทฯฮต ฮบฮฑฮปฯฯฮตฯฮฑ ฮผฮท ฯฯ
ฮผฯฮนฮตฯฮผฮญฮฝฮฟ tar",
- "fz_tarxz": "gnu-tar ฮผฮต ฯฯ
ฮผฯฮฏฮตฯฮท xz ฮตฯฮฏฯฮตฮดฮฟ 1$N$Nฯฯ
ฮฝฮฎฮธฯฯ ฯฮฟฮปฯ ฮฑฯฮณฯ, ฮฟฯฯฯฮต$Nฯฯฮทฯฮนฮผฮฟฯฮฟฮฏฮทฯฮต ฮบฮฑฮปฯฯฮตฯฮฑ ฮผฮท ฯฯ
ฮผฯฮนฮตฯฮผฮญฮฝฮฟ tar",
- "fz_zip8": "zip ฮผฮต ฮฟฮฝฯฮผฮฑฯฮฑ ฮฑฯฯฮตฮฏฯฮฝ utf8 (ฮฏฯฯฯ ฮฝฮฑ ฮบฮฟฮปฮปฮฌฮตฮน ฯฮต windows 7 ฮบฮฑฮน ฯฮฑฮปฮนฯฯฮตฯฮฑ)",
- "fz_zipd": "zip ฮผฮต ฯฮฑฯฮฑฮดฮฟฯฮนฮฑฮบฮฌ ฮฟฮฝฯฮผฮฑฯฮฑ cp437, ฮณฮนฮฑ ฯฮฟฮปฯ ฯฮฑฮปฮนฯ ฮปฮฟฮณฮนฯฮผฮนฮบฯ",
- "fz_zipc": "cp437 ฮผฮต crc32 ฯ
ฯฮฟฮปฮฟฮณฮนฯฮผฮญฮฝฮฟ ฮฝฯฯฮฏฯฮตฯฮฑ,$Nฮณฮนฮฑ MS-DOS PKZIP v2.04g (ฮฟฮบฯฯฮฒฯฮนฮฟฯ 1993)$N(ฯฮฑฮฏฯฮฝฮตฮน ฯฮฑฯฮฑฯฮฌฮฝฯ ฯฯฯฮฝฮฟ ฯฯฮนฮฝ ฮพฮตฮบฮนฮฝฮฎฯฮตฮน ฮท ฮผฮตฯฮฑฯฯฯฯฯฯฮท)",
-
- "un_m1": "ฮผฯฮฟฯฮตฮฏฯ ฮฝฮฑ ฮดฮนฮฑฮณฯฮฌฯฮตฮนฯ ฯฮฑ ฯฯฯฯฯฮฑฯฮฑ ฮฑฯฯฮตฮฏฮฑ ฯฮฟฯ
ฮผฮตฯฮฑฯฯฯฯฯฯฮตฯ (ฮฎ ฮฝฮฑ ฮฑฮบฯ
ฯฯฯฮตฮนฯ ฯฮฑ ฮผฮนฯฮฟฯฮตฮปฮตฮนฯฮผฮญฮฝฮฑ) ฯฮฑฯฮฑฮบฮฌฯฯ",
- "un_upd": "ฮฑฮฝฮฑฮฝฮญฯฯฮท",
- "un_m4": "ฮฎ ฮผฮฟฮนฯฮฌฯฮฟฯ
ฯฮฑ ฮฑฯฯฮตฮฏฮฑ ฯฮฟฯ
ฮฒฮปฮญฯฮตฮนฯ ฯฮฑฯฮฑฮบฮฌฯฯ:",
- "un_ulist": "ฮตฮผฯฮฌฮฝฮนฯฮท",
- "un_ucopy": "ฮฑฮฝฯฮนฮณฯฮฑฯฮฎ",
- "un_flt": "ฯฯฮฟฮฑฮนฯฮตฯฮนฮบฯ ฯฮฏฮปฯฯฮฟ: ฮท ฮดฮนฮตฯฮธฯ
ฮฝฯฮท ฯฯฮญฯฮตฮน ฮฝฮฑ ฯฮตฯฮนฮญฯฮตฮน",
- "un_fclr": "ฮบฮฑฮธฮฑฯฮนฯฮผฯฯ ฯฮฏฮปฯฯฮฟฯ
",
- "un_derr": "ฮฑฯฮฟฯฯ
ฯฮฏฮฑ ฮดฮนฮฑฮณฯฮฑฯฮฎฯ unpost:\n",
- "un_f5": "ฮบฮฌฯฮน ฯฮฌฮปฮฑฯฮต, ฮดฮฟฮบฮฏฮผฮฑฯฮต ฯฮทฮฝ ฮฑฮฝฮฑฮฝฮญฯฯฮท ฮฎ ฯฮฌฯฮฑ F5",
- "un_uf5": "ฯฯ
ฮณฮณฮฝฯฮผฮท ฮฑฮปฮปฮฌ ฯฯฮญฯฮตฮน ฮฝฮฑ ฮฑฮฝฮฑฮฝฮตฯฯฮตฮนฯ ฯฮท ฯฮตฮปฮฏฮดฮฑ (ฯฯ ฮผฮต F5 ฮฎ CTRL-R) ฯฯฮนฮฝ ฮฑฮบฯ
ฯฯฯฮตฮนฯ ฮฑฯ
ฯฮฎฮฝ ฯฮทฮฝ ฮฑฯฮฟฯฯฮฟฮปฮฎ",
- "un_nou": "ฯฯฮฟฯฮฟฯฮฎ: ฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎฯ ฮตฮฏฮฝฮฑฮน ฯฮฟฮปฯ ฯฮฟฯฯฯฮผฮญฮฝฮฟฯ ฮณฮนฮฑ ฮฝฮฑ ฮดฮตฮฏฮพฮตฮน ฮผฮนฯฮฟฯฮตฮปฮตฮนฯฮผฮญฮฝฮตฯ ฮฑฯฮฟฯฯฮฟฮปฮญฯยท ฯฮฌฯฮฑ ฯฮทฮฝ ฮฑฮฝฮฑฮฝฮญฯฯฮท, ฯฮต ฮปฮฏฮณฮฟ",
- "un_noc": "ฯฯฮฟฯฮฟฯฮฎ: ฯฮฟ unpost ฯฯฮฝ ฮฟฮปฮฟฮบฮปฮทฯฯฮผฮญฮฝฯฮฝ ฮฑฯฯฮตฮฏฯฮฝ ฮดฮตฮฝ ฮตฯฮนฯฯฮญฯฮตฯฮฑฮน ฮฑฯฯ ฯฮท ฯฯฮธฮผฮนฯฮท ฯฮฟฯ
ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ",
- "un_max": "ฮตฮผฯฮฑฮฝฮฏฮถฮฟฮฝฯฮฑฮน ฯฮฑ ฯฯฯฯฮฑ 2000 ฮฑฯฯฮตฮฏฮฑ (ฯฯฮทฯฮนฮผฮฟฯฮฟฮฏฮทฯฮต ฯฮฏฮปฯฯฮฟ)",
- "un_avail": "ฮผฯฮฟฯฮตฮฏฯ ฮฝฮฑ ฮดฮนฮฑฮณฯฮฌฯฮตฮนฯ {0} ฯฯฯฯฯฮฑฯฮฑ ฮฑฯฯฮตฮฏฮฑ
ฮผฯฮฟฯฮตฮฏฯ ฮฝฮฑ ฮฑฮบฯ
ฯฯฯฮตฮนฯ {1} ฮผฮนฯฮฟฯฮตฮปฮตฮนฯฮผฮญฮฝฮตฯ ฮฑฯฮฟฯฯฮฟฮปฮญฯ",
- "un_m2": "ฯฮฑฮพฮนฮฝฮฟฮผฮทฮผฮญฮฝฮฑ ฮบฮฑฯฮฌ ฯฯฯฮฝฮฟ ฮผฮตฯฮฑฯฯฯฯฯฯฮทฯ; ฯฮฑ ฯฮนฮฟ ฯฯฯฯฯฮฑฯฮฑ ฯฯฯฯฮฑ:",
- "un_no1": "ฮฌฮบฯ
ฯฮฟ! ฮบฮฑฮผฮฏฮฑ ฮผฮตฯฮฑฯฯฯฯฯฯฮท ฮดฮตฮฝ ฮตฮฏฮฝฮฑฮน ฮฑฯฮบฮตฯฮฌ ฯฯฯฯฯฮฑฯฮท",
- "un_no2": "ฮฌฮบฯ
ฯฮฟ! ฮบฮฑฮผฮฏฮฑ ฮผฮตฯฮฑฯฯฯฯฯฯฮท ฮผฮต ฮฑฯ
ฯฯ ฯฮฟ ฯฮฏฮปฯฯฮฟ ฮดฮตฮฝ ฮตฮฏฮฝฮฑฮน ฮฑฯฮบฮตฯฮฌ ฯฯฯฯฯฮฑฯฮท",
- "un_next": "ฮดฮนฮฌฮณฯฮฑฯฮต ฯฮฑ ฮตฯฯฮผฮตฮฝฮฑ {0} ฮฑฯฯฮตฮฏฮฑ ฯฮฑฯฮฑฮบฮฌฯฯ",
- "un_abrt": "ฮฌฮบฯ
ฯฮฟ",
- "un_del": "ฮดฮนฮฑฮณฯฮฑฯฮฎ",
- "un_m3": "ฯฮฟฯฯฯฮฝฯ ฯฮนฯ ฯฯฯฯฯฮฑฯฮตฯ ฮผฮตฯฮฑฯฮฟฯฯฯฯฮตฮนฯ ฯฮฟฯ
...",
- "un_busy": "ฮดฮนฮฑฮณฯฮฌฯฯ {0} ฮฑฯฯฮตฮฏฮฑ...",
- "un_clip": "ฮฑฮฝฯฮนฮณฯฮฌฯฮทฮบฮฑฮฝ {0} ฯฯฮฝฮดฮตฯฮผฮฟฮน ฯฯฮฟ ฯฯฯฯฮตฮนฯฮฟ",
-
- "u_https1": "ฯฯฮญฯฮตฮน",
- "u_https2": "ฮผฮตฯฮฌฮฒฮฑฯฮท ฯฮต https",
- "u_https3": "ฮณฮนฮฑ ฮบฮฑฮปฯฯฮตฯฮท ฮฑฯฯฮดฮฟฯฮท",
- "u_ancient": 'ฮฟ browser ฯฮฟฯ
ฮตฮฏฮฝฮฑฮน ฮตฮฝฯฯ
ฯฯฯฮนฮฑฮบฮฌ ฮฑฯฮฑฯฯฮฑฮนฯฮผฮญฮฝฮฟฯ โ ฮฏฯฯฯ ฮฝฮฑ ฯฯฮทฯฮนฮผฮฟฯฮฟฮนฮฎฯฮตฮนฯ ฯฮฟ bup ฮฑฮฝฯฮฏ ฮณฮน\' ฮฑฯ
ฯฯ',
- "u_nowork": "ฯฯฮตฮนฮฌฮถฮตฯฮฑฮน firefox 53+ ฮฎ chrome 57+ ฮฎ iOS 11+",
- "tail_2old": "ฯฯฮตฮนฮฌฮถฮตฯฮฑฮน firefox 105+ ฮฎ chrome 71+ ฮฎ iOS 14.5+",
- "u_nodrop": "ฮฟ browser ฯฮฟฯ
ฮตฮฏฮฝฮฑฮน ฯฮฟฮปฯ ฯฮฑฮปฮนฯฯ ฮณฮนฮฑ drag&drop ฮผฮตฯฮฑฯฮฟฯฯฯฯฮตฮนฯ",
- "u_notdir": "ฮฑฯ
ฯฯฯ ฮดฮตฮฝ ฮตฮฏฮฝฮฑฮน ฯฮฌฮบฮตฮปฮฟฯ!\n\nฮฟ browser ฯฮฟฯ
ฮตฮฏฮฝฮฑฮน ฯฮฟฮปฯ ฯฮฑฮปฮนฯฯ,\nฮดฮฟฮบฮฏฮผฮฑฯฮต drag&drop ฮฑฮฝฯ' ฮฑฯ
ฯฮฟฯ",
- "u_uri": "ฮณฮนฮฑ ฮฝฮฑ ฮบฮฌฮฝฮตฮนฯ drag&drop ฮตฮนฮบฯฮฝฯฮฝ ฮฑฯฯ ฮฌฮปฮปฮฑ ฯฮฑฯฮฌฮธฯ
ฯฮฑ browser,\nฯฮฏฮพ' ฯฮตฯ ฯฮฌฮฝฯ ฯฯฮฟ ฮผฮตฮณฮฌฮปฮฟ ฮบฮฟฯ
ฮผฯฮฏ ฮผฮตฯฮฑฯฯฯฯฯฯฮทฯ",
- "u_enpot": 'ฮฌฮปฮปฮฑฮพฮต ฯฯฮฟ potato UI (ฮฏฯฯฯ ฮฑฮฝฮตฮฒฮฌฮถฮตฮน ฯฮนฮฟ ฮณฯฮฎฮณฮฟฯฮฑ)',
- "u_depot": 'ฮฌฮปฮปฮฑฮพฮต ฯฯฮฟ fancy UI (ฮฏฯฯฯ ฮฑฮฝฮตฮฒฮฌฮถฮตฮน ฯฮนฮฟ ฮฑฯฮณฮฌ)',
- "u_gotpot": "ฮฑฮปฮปฮฌฮถฯ ฯฯฮฟ potato UI ฮณฮนฮฑ ฯฮนฮฟ ฮณฯฮฎฮณฮฟฯฮท ฮผฮตฯฮฑฯฯฯฯฯฯฮท,\n\nฮผฯฮฟฯฮตฮฏฯ ฮฝฮฑ ฯฮฟ ฮฑฮปฮปฮฌฮพฮตฮนฯ ฯฮฌฮปฮน ฮฑฮฝ ฮธฮตฯ!",
- "u_pott": "ฮฑฯฯฮตฮฏฮฑ: {0} ฮฟฮปฮฟฮบฮปฮทฯฯฮผฮญฮฝฮฑ, {1} ฮฑฯฮฟฯฯ
ฯฮทฮผฮญฮฝฮฑ, {2} ฯฮต ฮตฮพฮญฮปฮนฮพฮท, {3} ฯฮต ฮฟฯ
ฯฮฌ
",
- "u_ever": "ฮฑฯ
ฯฯฯ ฮตฮฏฮฝฮฑฮน ฮฟ ฮฒฮฑฯฮนฮบฯฯ uploader; ฯฮฟ up2k ฮธฮญฮปฮตฮน ฯฮฟฯ
ฮปฮฌฯฮนฯฯฮฟฮฝ
chrome 21 // firefox 13 // edge 12 // opera 12 // safari 5.1",
- "u_su2k": 'ฮฑฯ
ฯฯฯ ฮตฮฏฮฝฮฑฮน ฮฟ ฮฒฮฑฯฮนฮบฯฯ uploader; ฯฮฟ up2k ฮตฮฏฮฝฮฑฮน ฮบฮฑฮปฯฯฮตฯฮฟ',
- "u_uput": "ฮฒฮตฮปฯฮนฯฯฮฟฯฮฟฮฏฮทฯฮท ฮณฮนฮฑ ฯฮฑฯฯฯฮทฯฮฑ (ฯฮฑฯฮฌฮปฮตฮนฯฮท ฮตฮปฮญฮณฯฮฟฯ
ฮฑฮบฮตฯฮฑฮนฯฯฮทฯฮฑฯ)",
- "u_ewrite": "ฮดฮตฮฝ ฮญฯฮตฮนฯ ฮดฮนฮบฮฑฮฏฯฮผฮฑ ฮตฮณฮณฯฮฑฯฮฎฯ ฯฮต ฮฑฯ
ฯฯฮฝ ฯฮฟฮฝ ฯฮฌฮบฮตฮปฮฟ",
- "u_eread": "ฮดฮตฮฝ ฮญฯฮตฮนฯ ฮดฮนฮบฮฑฮฏฯฮผฮฑ ฮฑฮฝฮฌฮณฮฝฯฯฮทฯ ฯฮต ฮฑฯ
ฯฯฮฝ ฯฮฟฮฝ ฯฮฌฮบฮตฮปฮฟ",
- "u_enoi": "ฮท ฮฑฮฝฮฑฮถฮฎฯฮทฯฮท ฮฑฯฯฮตฮฏฯฮฝ ฮดฮตฮฝ ฮตฮฏฮฝฮฑฮน ฮตฮฝฮตฯฮณฮฟฯฮฟฮนฮทฮผฮญฮฝฮท ฯฯฮฟ ฮฑฯฯฮตฮฏฮฟ ฯฯ
ฮธฮผฮฏฯฮตฯฮฝ ฯฮฟฯ
ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ",
- "u_enoow": "ฮดฮตฮฝ ฮผฯฮฟฯฮตฮฏฯ ฮฝฮฑ ฮบฮฌฮฝฮตฮนฯ ฮฑฮฝฯฮนฮบฮฑฯฮฌฯฯฮฑฯฮท ฮตฮดฯยท ฯฯฮตฮนฮฌฮถฮตฯฮฑฮน ฮดฮนฮบฮฑฮฏฯฮผฮฑ ฮฮนฮฑฮณฯฮฑฯฮฎฯ",
- "u_badf": "ฮฯ
ฯฮฌ ฯฮฑ {0} ฮฑฯฯฮตฮฏฮฑ (ฮฑฯฯ {1} ฯฯ
ฮฝฮฟฮปฮนฮบฮฌ) ฯฮฑฯฮฑฮปฮตฮฏฯฮธฮทฮบฮฑฮฝ, ฯฮนฮธฮฑฮฝฯฯ ฮปฯฮณฯ ฮดฮนฮบฮฑฮนฯฮผฮฌฯฯฮฝ ฯฯ
ฯฯฮฎฮผฮฑฯฮฟฯ ฮฑฯฯฮตฮฏฯฮฝ:\n\n",
- "u_blankf": "ฮฯ
ฯฮฌ ฯฮฑ {0} ฮฑฯฯฮตฮฏฮฑ (ฮฑฯฯ {1} ฯฯ
ฮฝฮฟฮปฮนฮบฮฌ) ฮตฮฏฮฝฮฑฮน ฮฌฮดฮตฮนฮฑ / ฮบฮตฮฝฮฌยท ฮฝฮฑ ฯฮฑ ฮผฮตฯฮฑฯฮฟฯฯฯฯฯ ฮญฯฯฮน ฮบฮน ฮฑฮปฮปฮนฯฯ;\n\n",
- "u_applef": "ฮฯ
ฯฮฌ ฯฮฑ {0} ฮฑฯฯฮตฮฏฮฑ (ฮฑฯฯ {1} ฯฯ
ฮฝฮฟฮปฮนฮบฮฌ) ฯฮนฮธฮฑฮฝฯฯ ฮดฮตฮฝ ฮตฮฏฮฝฮฑฮน ฮตฯฮนฮธฯ
ฮผฮทฯฮฌ;\nฮ ฮฌฯฮฑ ฮฮฝฯฮฌฮพฮตฮน/Enter ฮณฮนฮฑ ฮฮ ฮฮฮฮฮฮฮฮฅฮ ฯฮฑ ฯฮฑฯฮฑฮบฮฌฯฯ ฮฑฯฯฮตฮฏฮฑ,\nฮ ฮฌฯฮฑ ฮฮบฯ
ฯฮฟ/ESC ฮณฮนฮฑ ฮฮ ฮฮฮ ฮฮ ฮฮฮฮฮฮฃฮคฮฮฅฮ ฮบฮฑฮน ฮฝฮฑ ฮฮฮคฮฮฆฮฮกฮคฮฉฮฮฮฮ ฮบฮน ฮฑฯ
ฯฮฌ:\n\n",
- "u_just1": "\nฮฯฯฯ ฮดฮฟฯ
ฮปฮญฯฮตฮน ฮบฮฑฮปฯฯฮตฯฮฑ ฮฑฮฝ ฮตฯฮนฮปฮญฮพฮตฮนฯ ฮผฯฮฝฮฟ ฮญฮฝฮฑ ฮฑฯฯฮตฮฏฮฟ",
- "u_ff_many": "ฮฑฮฝ ฯฯฮทฯฮนฮผฮฟฯฮฟฮนฮตฮฏฯ Linux / MacOS / Android, ฯฯฯฮต ฯฯฯฮฑ ฮฑฯฯฮตฮฏฮฑ ฮผฯฮฟฯฮตฮฏ ฮฝฮฑ ฮบฮฑฯฮฌฯฯฮตฯ
ฯฮท ฯฮฟฯ
Firefox!\nฮฑฮฝ ฮณฮฏฮฝฮตฮน ฮฑฯ
ฯฯ, ฮดฮฟฮบฮฏฮผฮฑฯฮต ฮพฮฑฮฝฮฌ (ฮฎ ฯฯฮทฯฮนฮผฮฟฯฮฟฮฏฮทฯฮต ฯฮฟฮฝ Chrome).",
- "u_up_life": "ฮฯ
ฯฮฎ ฮท ฮผฮตฯฮฑฯฯฯฯฯฯฮท ฮธฮฑ ฮดฮนฮฑฮณฯฮฑฯฮตฮฏ ฮฑฯฯ ฯฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ\n{0} ฮผฮตฯฮฌ ฯฮทฮฝ ฮฟฮปฮฟฮบฮปฮฎฯฯฯฮฎ ฯฮทฯ",
- "u_asku": "ฮผฮตฯฮฑฯฯฯฯฯฯฮท ฮฑฯ
ฯฯฮฝ ฯฯฮฝ {0} ฮฑฯฯฮตฮฏฯฮฝ ฯฯฮฟ {1}",
- "u_unpt": "ฮผฯฮฟฯฮตฮฏฯ ฮฝฮฑ ฮฑฮฝฮฑฮนฯฮญฯฮตฮนฯ / ฮดฮนฮฑฮณฯฮฌฯฮตฮนฯ ฮฑฯ
ฯฮฎฮฝ ฯฮท ฮผฮตฯฮฑฯฯฯฯฯฯฮท ฯฯฮทฯฮนฮผฮฟฯฮฟฮนฯฮฝฯฮฑฯ ฯฮฟ ๐งฏ, ฯฮฌฮฝฯ ฮฑฯฮนฯฯฮตฯฮฌ",
- "u_bigtab": "ฮธฮฑ ฮตฮผฯฮฑฮฝฮนฯฯฮฟฯฮฝ {0} ฮฑฯฯฮตฮฏฮฑ\n\nฮฑฯ
ฯฯ ฮผฯฮฟฯฮตฮฏ ฮฝฮฑ ฮบฮฌฮฝฮตฮน ฯฮฟฮฝ browser ฯฮฟฯ
ฮฝฮฑ ฮบฮฟฮปฮปฮฎฯฮตฮน, ฮตฮฏฯฮฑฮน ฯฮฏฮณฮฟฯ
ฯฮฟฯ;",
- "u_scan": "ฮฃฮฌฯฯฯฮท ฮฑฯฯฮตฮฏฯฮฝ...",
- "u_dirstuck": "ฮฟ ฮตฯฮตฮพฮตฯฮณฮฑฯฯฮฎฯ ฯฮฑฮบฮญฮปฯฮฝ ฮบฯฮปฮปฮทฯฮต ฯฯฮฟฯฯฮฑฮธฯฮฝฯฮฑฯ ฮฝฮฑ ฯฯฮฟฯฯฮตฮปฮฌฯฮตฮน ฯฮฑ ฮตฮพฮฎฯ {0} ฮฑฮฝฯฮนฮบฮตฮฏฮผฮตฮฝฮฑยท ฮธฮฑ ฯฮฑ ฯฮฑฯฮฑฮปฮตฮฏฯฮตฮน:",
- "u_etadone": "ฮฮปฮฟฮบฮปฮทฯฯฮธฮทฮบฮต ({0}, {1} ฮฑฯฯฮตฮฏฮฑ)",
- "u_etaprep": "(ฯฯฮฟฮตฯฮฟฮนฮผฮฑฯฮฏฮฑ ฮณฮนฮฑ ฮผฮตฯฮฑฯฯฯฯฯฯฮท)",
- "u_hashdone": "ฯฮฟ hashing ฮฟฮปฮฟฮบฮปฮทฯฯฮธฮทฮบฮต",
- "u_hashing": "ฯ
ฯฮฟฮปฮฟฮณฮนฯฮผฯฯ hash",
- "u_hs": "handshaking...",
- "u_started": "ฯฮฑ ฮฑฯฯฮตฮฏฮฑ ฮฑฮฝฮตฮฒฮฑฮฏฮฝฮฟฯ
ฮฝ ฯฯฯฮฑยท ฮดฮตฯ ฯฮฑ ฯฯฮฟ [๐]",
- "u_dupdefer": "ฮดฮนฯฮปฯฯฯ
ฯฮฟ; ฮธฮฑ ฮตฯฮตฮพฮตฯฮณฮฑฯฯฮตฮฏ ฮผฮตฯฮฌ ฮฑฯฯ ฯฮปฮฑ ฯฮฑ ฮฌฮปฮปฮฑ ฮฑฯฯฮตฮฏฮฑ",
- "u_actx": "ฯฮฌฯฮฑ ฮฑฯ
ฯฯ ฯฮฟ ฮบฮตฮฏฮผฮตฮฝฮฟ ฮณฮนฮฑ ฮฝฮฑ ฮผฮทฮฝ ฯฮฌฯฮตฮนฯ
ฮฑฯฯฮดฮฟฯฮท ฯฯฮฑฮฝ ฮฑฮปฮปฮฌฮถฮตฮนฯ ฯฮฑฯฮฌฮธฯ
ฯฮฑ/ฮบฮฑฯฯฮญฮปฮตฯ",
- "u_fixed": "ฮฮ! ฮคฮฟ ฮดฮนฯฯฮธฯฯฮฑ ๐",
- "u_cuerr": "ฮฑฯฮฟฯฯ
ฯฮฏฮฑ ฮผฮตฯฮฑฯฯฯฯฯฯฮทฯ ฯฮผฮฎฮผฮฑฯฮฟฯฯ {0} ฮฑฯฯ {1};\nฯฮนฮธฮฑฮฝฯฯ ฮฑฮบฮฏฮฝฮดฯ
ฮฝฮฟ, ฯฯ
ฮฝฮตฯฮฏฮถฯ\n\nฮฑฯฯฮตฮฏฮฟ: {2}",
- "u_cuerr2": "ฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎฯ ฮฑฯฮญฯฯฮนฯฮต ฯฮท ฮผฮตฯฮฑฯฯฯฯฯฯฮท (ฯฮผฮฎฮผฮฑ {0} ฮฑฯฯ {1});\nฮธฮฑ ฮพฮฑฮฝฮฑฮดฮฟฮบฮนฮผฮฌฯฮตฮน ฮฑฯฮณฯฯฮตฯฮฑ\n\nฮฑฯฯฮตฮฏฮฟ: {2}\n\nฯฯฮฌฮปฮผฮฑ ",
- "u_ehstmp": "ฮธฮฑ ฮพฮฑฮฝฮฑฮดฮฟฮบฮนฮผฮฌฯฮตฮน; ฮดฮตฯ ฮบฮฌฯฯ ฮดฮตฮพฮนฮฌ",
- "u_ehsfin": "ฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎฯ ฮฑฯฮญฯฯฮนฯฮต ฯฮฟ ฮฑฮฏฯฮทฮผฮฑ ฮฟฮปฮฟฮบฮปฮฎฯฯฯฮทฯ ฯฮทฯ ฮผฮตฯฮฑฯฯฯฯฯฯฮทฯ; ฮพฮฑฮฝฮฑฮดฮฟฮบฮนฮผฮฌฮถฮตฮน...",
- "u_ehssrch": "ฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎฯ ฮฑฯฮญฯฯฮนฯฮต ฯฮฟ ฮฑฮฏฯฮทฮผฮฑ ฮฑฮฝฮฑฮถฮฎฯฮทฯฮทฯ; ฮพฮฑฮฝฮฑฮดฮฟฮบฮนฮผฮฌฮถฮตฮน...",
- "u_ehsinit": "ฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎฯ ฮฑฯฮญฯฯฮนฯฮต ฯฮฟ ฮฑฮฏฯฮทฮผฮฑ ฮณฮนฮฑ ฮตฮบฮบฮฏฮฝฮทฯฮท ฮผฮตฯฮฑฯฯฯฯฯฯฮทฯ; ฮพฮฑฮฝฮฑฮดฮฟฮบฮนฮผฮฌฮถฮตฮน...",
- "u_eneths": "ฯฯฮฌฮปฮผฮฑ ฮดฮนฮบฯฯฮฟฯ
ฮบฮฑฯฮฌ ฯฮฟ handshake ฮผฮตฯฮฑฯฯฯฯฯฯฮทฯ; ฮพฮฑฮฝฮฑฮดฮฟฮบฮนฮผฮฌฮถฮตฮน...",
- "u_enethd": "ฯฯฮฌฮปฮผฮฑ ฮดฮนฮบฯฯฮฟฯ
ฮบฮฑฯฮฌ ฯฮฟฮฝ ฮญฮปฮตฮณฯฮฟ ฯฯฮฑฯฮพฮทฯ ฯฯฯฯฮฟฯ
; ฮพฮฑฮฝฮฑฮดฮฟฮบฮนฮผฮฌฮถฮตฮน...",
- "u_cbusy": "ฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎฯ ฯฮตฯฮนฮผฮญฮฝฮตฮน ฮฝฮฑ ฮผฮฑฯ ฮตฮผฯฮนฯฯฮตฯ
ฯฮตฮฏ ฮพฮฑฮฝฮฌ ฮผฮตฯฮฌ ฮฑฯฯ ฯฯฯฮฒฮปฮทฮผฮฑ ฮดฮนฮบฯฯฮฟฯ
...",
- "u_ehsdf": "ฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎฯ ฮญฮผฮตฮนฮฝฮต ฮฑฯฯ ฯฯฯฮฟ ฯฯฮฟ ฮดฮฏฯฮบฮฟ!\n\nฮธฮฑ ฯฯ
ฮฝฮตฯฮฏฯฮตฮน ฮฝฮฑ ฮพฮฑฮฝฮฑฮดฮฟฮบฮนฮผฮฌฮถฮตฮน,\nฯฮต ฯฮตฯฮฏฯฯฯฯฮท ฯฮฟฯ
ฮบฮฌฯฮฟฮนฮฟฯ\nฮตฮปฮตฯ
ฮธฮตฯฯฯฮตฮน ฮฑฯฮบฮตฯฯ ฯฯฯฮฟ ฮณฮนฮฑ ฯฯ
ฮฝฮญฯฮตฮนฮฑ",
- "u_emtleak1": "ฯฮฑฮฏฮฝฮตฯฮฑฮน ฯฯฯ ฮฟ browser ฯฮฟฯ
ฮญฯฮตฮน ฮดฮนฮฑฯฯฮฟฮฎ ฮผฮฝฮฎฮผฮทฯ;\nฯฮฑฯฮฑฮบฮฑฮปฯ",
- "u_emtleak2": ' ฮฑฮปฮปฮฑฮณฮฎ ฯฮต https (ฯฯ
ฮฝฮนฯฯฮฌฯฮฑฮน) ฮฎ ',
- "u_emtleak3": ' ',
- "u_emtleakc": 'ฮดฮฟฮบฮฏฮผฮฑฯฮต ฯฮฑ ฮตฮพฮฎฯ:\n- ฯฮฌฯฮฑ
F5 ฮณฮนฮฑ ฮฑฮฝฮฑฮฝฮญฯฯฮท ฯฮตฮปฮฏฮดฮฑฯ - ฮผฮตฯฮฌ ฮฑฯฮตฮฝฮตฯฮณฮฟฯฮฟฮฏฮทฯฮต ฯฮฟ
mt ฮบฮฟฯ
ฮผฯฮฏ ฯฯฮนฯ โ๏ธ ฯฯ
ฮธฮผฮฏฯฮตฮนฯ - ฮบฮฑฮน ฮดฮฟฮบฮฏฮผฮฑฯฮต ฮพฮฑฮฝฮฌ ฯฮท ฮผฮตฯฮฑฯฯฯฯฯฯฮท
ฮฮน ฮผฮตฯฮฑฯฮฟฯฯฯฯฮนฮตฯ ฮธฮฑ ฮตฮฏฮฝฮฑฮน ฮปฮฏฮณฮฟ ฯฮนฮฟ ฮฑฯฮณฮญฯ, ฮฑฮปฮปฮฌ ok.\nฮฃฯ
ฮณฮณฮฝฯฮผฮท ฮณฮนฮฑ ฯฮทฮฝ ฯฮฑฮปฮฑฮนฯฯฯฮฏฮฑ!\n\nPS: ฯฮฟ chrome v107 ฮญฯฮตฮน ฮดฮนฯฯฮธฯฯฮท ฮณฮน\' ฮฑฯ
ฯฯ',
- "u_emtleakf": 'ฮดฮฟฮบฮฏฮผฮฑฯฮต ฯฮฑ ฮตฮพฮฎฯ:\n- ฯฮฌฯฮฑ
F5 ฮณฮนฮฑ ฮฑฮฝฮฑฮฝฮญฯฯฮท ฯฮตฮปฮฏฮดฮฑฯ - ฮผฮตฯฮฌ ฮฌฮฝฮฟฮนฮพฮต ฯฮฟ
๐ฅ (potato) ฯฯฮฟ UI ฮผฮตฯฮฑฯฯฯฯฯฯฮทฯ - ฮบฮฑฮน ฮดฮฟฮบฮฏฮผฮฑฯฮต ฮพฮฑฮฝฮฌ ฯฮท ฮผฮตฯฮฑฯฯฯฯฯฯฮท
\nPS: ฮฟ firefox ฮตฮปฯฮฏฮถฮตฮน ฮฝฮฑ ฯฯฮนฮฌฮพฮตฮน ฮฑฯ
ฯฯ ฯฮฟ bug ฮบฮฌฯฮฟฮนฮฑ ฯฯฮนฮณฮผฮฎ',
- "u_s404": "ฮดฮตฮฝ ฮฒฯฮญฮธฮทฮบฮต ฯฯฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ",
- "u_expl": "ฮตฯฮตฮพฮฎฮณฮทฯฮท",
- "u_maxconn": "ฮฟฮน ฯฮตฯฮนฯฯฯฯฮตฯฮฟฮน browser ฯฮฟ ฯฮตฯฮนฮฟฯฮฏฮถฮฟฯ
ฮฝ ฯฯฮฑ 6, ฮฑฮปฮปฮฌ ฮฟ firefox ฯฮฟฯ
ฮตฯฮนฯฯฮญฯฮตฮน ฮฝฮฑ ฯฮฟ ฮฑฯ
ฮพฮฎฯฮตฮนฯ ฮผฮต connections-per-server ฯฯฮฟ about:config",
- "u_tu": 'ฮ ฮกฮฮฮฮฮฮ ฮฮฮฮฃฮ: ฯฮฟ turbo ฮตฮฏฮฝฮฑฮน ฮตฮฝฮตฯฮณฮฟฯฮฟฮนฮทฮผฮญฮฝฮฟ, ฯฮฟ ฯฯฯฮณฯฮฑฮผฮผฮฑ ฯฮตฮปฮฌฯฮท ฮฏฯฯฯ ฮฝฮฑ ฮผฮทฮฝ ฮฑฮฝฮนฯฮฝฮตฯฯฮตฮน ฮบฮฑฮน ฮฝฮฑ ฮผฮทฮฝ ฮพฮฑฮฝฮฑฮตฮบฮบฮนฮฝฮฎฯฮตฮน ฮผฮนฯฮฟฯฮตฮปฮตฮนฯฮผฮญฮฝฮตฯ ฮผฮตฯฮฑฯฮฟฯฯฯฯฮตฮนฯ; ฮดฮตฯ ฯฮฑ tooltip ฯฮฟฯ
ฮบฮฟฯ
ฮผฯฮนฮฟฯ turbo
',
- "u_ts": 'ฮ ฮกฮฮฮฮฮฮ ฮฮฮฮฃฮ: ฯฮฟ turbo ฮตฮฏฮฝฮฑฮน ฮตฮฝฮตฯฮณฮฟฯฮฟฮนฮทฮผฮญฮฝฮฟ, ฯฮฑ ฮฑฯฮฟฯฮตฮปฮญฯฮผฮฑฯฮฑ ฮฑฮฝฮฑฮถฮฎฯฮทฯฮทฯ ฮผฯฮฟฯฮตฮฏ ฮฝฮฑ ฮตฮฏฮฝฮฑฮน ฮปฮฌฮธฮฟฯ; ฮดฮตฯ ฯฮฑ tooltip ฯฮฟฯ
ฮบฮฟฯ
ฮผฯฮนฮฟฯ turbo
',
- "u_turbo_c": "ฯฮฟ turbo ฮตฮฏฮฝฮฑฮน ฮฑฯฮตฮฝฮตฯฮณฮฟฯฮฟฮนฮทฮผฮญฮฝฮฟ ฯฯฮฟ ฮฑฯฯฮตฮฏฮฟ ฯฯ
ฮธฮผฮฏฯฮตฯฮฝ ฯฮฟฯ
ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ",
- "u_turbo_g": "ฮฑฯฮตฮฝฮตฯฮณฮฟฯฮฟฮนฯ ฯฮฟ turbo ฮตฯฮตฮนฮดฮฎ ฮดฮตฮฝ ฮญฯฮตฮนฯ ฮดฮนฮบฮฑฮฏฯฮผฮฑ\nฮณฮนฮฑ ฯฮท ฮปฮฏฯฯฮฑ ฯฮฑฮบฮญฮปฯฮฝ ฯฮต ฮฑฯ
ฯฯฮฝ ฯฮฟฮฝ ฯฯฮผฮฟ",
- "u_life_cfg": 'ฮฑฯ
ฯฯฮผฮฑฯฮท ฮดฮนฮฑฮณฯฮฑฯฮฎ ฮผฮตฯฮฌ ฮฑฯฯ ฮปฮตฯฯฮฌ (ฮฎ ฯฯฮตฯ)',
- "u_life_est": 'ฮท ฮผฮตฯฮฑฯฯฯฯฯฯฮท ฮธฮฑ ฮดฮนฮฑฮณฯฮฑฯฮตฮฏ ---',
- "u_life_max": 'ฮฑฯ
ฯฯฯ ฮฟ ฯฮฌฮบฮตฮปฮฟฯ ฮตฯฮนฮฒฮฌฮปฮปฮตฮน\nฮผฮญฮณฮนฯฯฮท ฮดฮนฮฌฯฮบฮตฮนฮฑ ฮถฯฮฎฯ {0}',
- "u_unp_ok": "ฮตฯฮนฯฯฮญฯฮตฯฮฑฮน ฯฮฟ unpost ฮณฮนฮฑ {0}",
- "u_unp_ng": "ฮดฮตฮฝ ฮตฯฮนฯฯฮญฯฮตฯฮฑฮน ฯฮฟ unpost",
- "ue_ro": "ฮญฯฮตฮนฯ ฮผฯฮฝฮฟ ฮดฮนฮบฮฑฮฏฯฮผฮฑ ฮฑฮฝฮฌฮณฮฝฯฯฮทฯ ฯฮต ฮฑฯ
ฯฯฮฝ ฯฮฟ ฯฮฌฮบฮตฮปฮฟ\n\n",
- "ue_nl": "ฮดฮตฮฝ ฮตฮฏฯฮฑฮน ฯฯ
ฮฝฮดฮตฮดฮตฮผฮญฮฝฮฟฯ ฯฯฯฮฑ",
- "ue_la": 'ฮตฮฏฯฮฑฮน ฯฯ
ฮฝฮดฮตฮดฮตฮผฮญฮฝฮฟฯ ฯฯ "{0}"',
- "ue_sr": "ฮตฮฏฯฮฑฮน ฯฮต ฮปฮตฮนฯฮฟฯ
ฯฮณฮฏฮฑ ฮฑฮฝฮฑฮถฮฎฯฮทฯฮทฯ ฮฑฯฯฮตฮฏฯฮฝ\n\nฯฮฎฮณฮฑฮนฮฝฮต ฯฮต ฮปฮตฮนฯฮฟฯ
ฯฮณฮฏฮฑ ฮผฮตฯฮฑฯฯฯฯฯฯฮทฯ ฯฮฑฯฯฮฝฯฮฑฯ ฯฮฟ ๐ (ฮดฮฏฯฮปฮฑ ฯฯฮฟ ฮผฮตฮณฮฌฮปฮฟ ฮบฮฟฯ
ฮผฯฮฏ ฮฮฮฮฮฮคฮฮฃฮฮฃ) ฮบฮฑฮน ฮดฮฟฮบฮฏฮผฮฑฯฮต ฯฮฌฮปฮน\n\nฯฯ
ฮณฮณฮฝฯฮผฮท",
- "ue_ta": "ฮดฮฟฮบฮฏฮผฮฑฯฮต ฮฝฮฑ ฮผฮตฯฮฑฯฮฟฯฯฯฯฮตฮนฯ ฮตฮบ ฮฝฮญฮฟฯ
, ฮธฮฑ ฯฯฮญฯฮตฮน ฮฝฮฑ ฮดฮฟฯ
ฮปฮญฯฮตฮน ฯฯฯฮฑ",
- "ue_ab": "ฮฑฯ
ฯฯ ฯฮฟ ฮฑฯฯฮตฮฏฮฟ ฮฑฮฝฮตฮฒฮฑฮฏฮฝฮตฮน ฯฮต ฮฌฮปฮปฮฟ ฯฮฌฮบฮตฮปฮฟ ฮบฮฑฮน ฮท ฮผฮตฯฮฑฯฯฯฯฯฯฮท ฯฯฮญฯฮตฮน ฮฝฮฑ ฮฟฮปฮฟฮบฮปฮทฯฯฮธฮตฮฏ ฯฯฮนฮฝ ฮฑฮฝฮญฮฒฮตฮน ฮฑฮปฮปฮฟฯ.\n\nฮฯฮฟฯฮตฮฏฯ ฮฝฮฑ ฮฑฮบฯ
ฯฯฯฮตฮนฯ ฮบฮฑฮน ฮฝฮฑ ฮพฮตฯฮฌฯฮตฮนฯ ฯฮทฮฝ ฮฑฯฯฮนฮบฮฎ ฮผฮตฯฮฑฯฯฯฯฯฯฮท ฮผฮต ฯฮฟ ฮบฮฟฯ
ฮผฯฮฏ ๐งฏ ฯฮฌฮฝฯ ฮฑฯฮนฯฯฮตฯฮฌ",
- "ur_1uo": "ฮฮ: ฮคฮฟ ฮฑฯฯฮตฮฏฮฟ ฮฑฮฝฮญฮฒฮทฮบฮต ฮตฯฮนฯฯ
ฯฯฯ",
- "ur_auo": "ฮฮ: ฮฮฑฮน ฯฮฑ {0} ฮฑฯฯฮตฮฏฮฑ ฮฑฮฝฮญฮฒฮทฮบฮฑฮฝ ฮตฯฮนฯฯ
ฯฯฯ",
- "ur_1so": "ฮฮ: ฮคฮฟ ฮฑฯฯฮตฮฏฮฟ ฮฒฯฮญฮธฮทฮบฮต ฯฯฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ",
- "ur_aso": "ฮฮ: ฮฮฑฮน ฯฮฑ {0} ฮฑฯฯฮตฮฏฮฑ ฮฒฯฮญฮธฮทฮบฮฑฮฝ ฯฯฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ",
- "ur_1un": "ฮ ฮผฮตฯฮฑฯฯฯฯฯฯฮท ฮฑฯฮญฯฯ
ฯฮต, ฯฯ
ฮณฮณฮฝฯฮผฮท",
- "ur_aun": "ฮฮฑฮน ฮฟฮน {0} ฮผฮตฯฮฑฯฮฟฯฯฯฯฮตฮนฯ ฮฑฯฮญฯฯ
ฯฮฑฮฝ, ฯฯ
ฮณฮณฮฝฯฮผฮท",
- "ur_1sn": "ฮคฮฟ ฮฑฯฯฮตฮฏฮฟ ฮฮฮ ฮฒฯฮญฮธฮทฮบฮต ฯฯฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ",
- "ur_asn": "ฮคฮฑ {0} ฮฑฯฯฮตฮฏฮฑ ฮฮฮ ฮฒฯฮญฮธฮทฮบฮฑฮฝ ฯฯฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ",
- "ur_um": "ฮฮปฮฟฮบฮปฮทฯฯฮธฮทฮบฮต;\n{0} ฮผฮตฯฮฑฯฮฟฯฯฯฯฮตฮนฯ ฮตฮฏฮฝฮฑฮน OK,\n{1} ฮผฮตฯฮฑฯฮฟฯฯฯฯฮตฮนฯ ฮฑฯฮญฯฯ
ฯฮฑฮฝ, ฯฯ
ฮณฮณฮฝฯฮผฮท",
- "ur_sm": "ฮฮปฮฟฮบฮปฮทฯฯฮธฮทฮบฮต;\n{0} ฮฑฯฯฮตฮฏฮฑ ฮฒฯฮญฮธฮทฮบฮฑฮฝ ฯฯฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ,\n{1} ฮฑฯฯฮตฮฏฮฑ ฮฮฮ ฮฒฯฮญฮธฮทฮบฮฑฮฝ ฯฯฮฟ ฮดฮนฮฑฮบฮฟฮผฮนฯฯฮฎ",
-
- "lang_set": "ฮฑฮฝฮฑฮฝฮญฯฯฮท ฯฮตฮปฮฏฮดฮฑฯ ฮณฮนฮฑ ฮตฯฮฑฯฮผฮฟฮณฮฎ ฯฮทฯ ฮฑฮปฮปฮฑฮณฮฎฯ;"
- },
- "ita": {
- "tt": "Italiano",
-
- "cols": {
- "c": "pulsanti azione",
- "dur": "durata",
- "q": "qualitร / bitrate",
- "Ac": "codec audio",
- "Vc": "codec video",
- "Fmt": "formato / container",
- "Ahash": "checksum audio",
- "Vhash": "checksum video",
- "Res": "risoluzione",
- "T": "tipo file",
- "aq": "qualitร audio / bitrate",
- "vq": "qualitร video / bitrate",
- "pixfmt": "subsampling / struttura pixel",
- "resw": "risoluzione orizzontale",
- "resh": "risoluzione verticale",
- "chs": "canali audio",
- "hz": "frequenza di campionamento"
- },
-
- "hks": [
- [
- "varie",
- ["ESC", "chiudi vari elementi"],
-
- "file-manager",
- ["G", "alterna vista lista / griglia"],
- ["T", "alterna miniature / icone"],
- ["โง A/D", "dimensione miniature"],
- ["ctrl-K", "elimina selezionati"],
- ["ctrl-X", "taglia selezione negli appunti"],
- ["ctrl-C", "copia selezione negli appunti"],
- ["ctrl-V", "incolla (sposta/copia) qui"],
- ["Y", "scarica selezionati"],
- ["F2", "rinomina selezionati"],
-
- "file-list-sel",
- ["spazio", "alterna selezione file"],
- ["โ/โ", "sposta cursore selezione"],
- ["ctrl โ/โ", "sposta cursore e viewport"],
- ["โง โ/โ", "seleziona file prec/succ"],
- ["ctrl-A", "seleziona tutti i file / cartelle"],
- ], [
- "navigation",
- ["B", "alterna breadcrumb / pannello nav"],
- ["I/K", "cartella prec/succ"],
- ["M", "cartella genitore (o comprimi corrente)"],
- ["V", "alterna cartelle / file di testo nel pannello nav"],
- ["A/D", "dimensione pannello nav"],
- ], [
- "audio-player",
- ["J/L", "brano prec/succ"],
- ["U/O", "salta 10sec indietro/avanti"],
- ["0..9", "salta a 0%..90%"],
- ["P", "play/pausa (avvia anche)"],
- ["S", "seleziona brano in riproduzione"],
- ["Y", "scarica brano"],
- ], [
- "image-viewer",
- ["J/L, โ/โ", "immagine prec/succ"],
- ["Home/End", "prima/ultima immagine"],
- ["F", "schermo intero"],
- ["R", "ruota in senso orario"],
- ["โง R", "ruota in senso antiorario"],
- ["S", "seleziona immagine"],
- ["Y", "scarica immagine"],
- ], [
- "video.player",
- ["U/O", "salta 10sec indietro/avanti"],
- ["P/K/Spazio", "play/pausa"],
- ["C", "continua riproduzione successivo"],
- ["V", "loop"],
- ["M", "muto"],
- ["[ e ]", "imposta intervallo loop"],
- ], [
- "textfile-viewer",
- ["I/K", "file prec/succ"],
- ["M", "chiudi file di testo"],
- ["E", "modifica file di testo"],
- ["S", "seleziona file (per taglia/copia/rinomina)"],
- ]
- ],
-
- "m_ok": "OK",
- "m_ng": "Annulla",
-
- "enable": "Abilita",
- "danger": "PERICOLO",
- "clipped": "copiato negli appunti",
-
- "ht_s1": "secondo",
- "ht_s2": "secondi",
- "ht_m1": "minuto",
- "ht_m2": "minuti",
- "ht_h1": "ora",
- "ht_h2": "ore",
- "ht_d1": "giorno",
- "ht_d2": "giorni",
- "ht_and": " e ",
-
- "goh": "control-panel",
- "gop": 'cartella sorella precedente">prec',
- "gou": 'cartella genitore">su',
- "gon": 'prossima cartella">succ',
- "logout": "Logout ",
- "login": "Accedi", //m
- "access": " accesso",
- "ot_close": "chiudi sottomenu",
- "ot_search": "cerca file per attributi, percorso / nome, tag musicali, o qualsiasi combinazione di questi$N$N<code>foo bar</code> = deve contenere sia ยซfooยป che ยซbarยป,$N<code>foo -bar</code> = deve contenere ยซfooยป ma non ยซbarยป,$N<code>^yana .opus$</code> = inizia con ยซyanaยป ed รจ un file ยซopusยป$N<code>"try unite"</code> = contiene esattamente ยซtry uniteยป$N$Nil formato data รจ iso-8601, come$N<code>2009-12-31</code> o <code>2020-09-12 23:30:00</code>",
- "ot_unpost": "unpost: elimina i tuoi caricamenti recenti, o interrompi quelli non completati",
- "ot_bup": "bup: uploader di base, supporta anche netscape 4.0",
- "ot_mkdir": "mkdir: crea una nuova directory",
- "ot_md": "new-md: crea un nuovo documento markdown",
- "ot_msg": "msg: invia un messaggio al log del server",
- "ot_mp": "opzioni lettore multimediale",
- "ot_cfg": "opzioni di configurazione",
- "ot_u2i": 'up2k: carica file (se hai accesso in scrittura) o attiva la modalitร ricerca per vedere se esistono giร da qualche parte sul server$N$NI caricamenti sono ripristinabili, multithreaded, e i timestamp dei file vengono preservati, ma usa piรน CPU di [๐] (l\'uploader di base)
durante i caricamenti, questa icona diventa un indicatore di progresso!',
- "ot_u2w": 'up2k: carica file con supporto per il ripristino (chiudi il browser e trascina gli stessi file piรน tardi)$N$NMultithreaded, e i timestamp dei file vengono preservati, ma usa piรน CPU di [๐] (l\'uploader di base)
durante i caricamenti, questa icona diventa un indicatore di progresso!',
- "ot_noie": 'Perfavore usa Chrome / Firefox / Edge',
-
- "ab_mkdir": "crea directory",
- "ab_mkdoc": "nuovo doc markdown",
- "ab_msg": "invia msg al log srv",
-
- "ay_path": "salta alle cartelle",
- "ay_files": "salta ai file",
-
- "wt_ren": "rinomina elementi selezionati$NTasto rapido: F2",
- "wt_del": "elimina elementi selezionati$NTasto rapido: ctrl-K",
- "wt_cut": "taglia elementi selezionati <small>(poi incolla altrove)</small>$NTasto rapido: ctrl-X",
- "wt_cpy": "copia elementi selezionati negli appunti$N(per incollarli altrove)$NTasto rapido: ctrl-C",
- "wt_pst": "incolla una selezione precedentemente tagliata / copiata$NTasto rapido: ctrl-V",
- "wt_selall": "seleziona tutti i file$NTasto rapido: ctrl-A (quando il file รจ focalizzato)",
- "wt_selinv": "inverti selezione",
- "wt_zip1": "scarica questa cartella come archivio",
- "wt_selzip": "scarica selezione come archivio",
- "wt_seldl": "scarica selezione come file separati$NTasto rapido: Y",
- "wt_npirc": "copia info traccia formato irc",
- "wt_nptxt": "copia info traccia testo semplice",
- "wt_m3ua": "aggiungi alla playlist m3u (clicca ๐ปcopia dopo)",
- "wt_m3uc": "copia playlist m3u negli appunti",
- "wt_grid": "alterna vista griglia / lista$NTasto rapido: G",
- "wt_prev": "traccia precedente$NTasto rapido: J",
- "wt_play": "play / pausa$NTasto rapido: P",
- "wt_next": "traccia successiva$NTasto rapido: L",
-
- "ul_par": "caricamenti paralleli:",
- "ut_rand": "randomizza nomi file",
- "ut_u2ts": "copia il timestamp di ultima modifica$Ndal tuo filesystem al server\">๐
",
- "ut_ow": "sovrascrivere file esistenti sul server?$N๐ก๏ธ: mai (genererร un nuovo nome file)$N๐: sovrascrivi se il file del server รจ piรน vecchio del tuo$Nโป๏ธ: sovrascrivi sempre se i file sono diversi",
- "ut_mt": "continua l'hashing di altri file durante il caricamento$N$NProva a disabilitare se la tua CPU o HDD รจ un collo di bottiglia",
- "ut_ask": 'chiedi conferma prima che inizi il caricamento">๐ญ',
- "ut_pot": "migliora la velocitร di caricamento su dispositivi lenti$Nrendendo l'interfaccia meno complessa",
- "ut_srch": "non caricare realmente, invece controlla se i file esistono giร $N sul server (scansionerร tutte le cartelle che puoi leggere)",
- "ut_par": "metti in pausa i caricamenti impostandolo a 0$N$NAumenta se la tua connessione รจ lenta / alta latenza$N$NMantienilo a 1 su LAN o se l'HDD del server รจ un collo di bottiglia",
- "ul_btn": "trascina file / cartelle
qui (o cliccami)",
- "ul_btnu": "C A R I C A",
- "ul_btns": "C E R C A",
-
- "ul_hash": "hash",
- "ul_send": "invia",
- "ul_done": "fatto",
- "ul_idle1": "nessun caricamento ancora in coda",
- "ut_etah": "velocitร media di <em>hashing</em>, e tempo stimato al completamento",
- "ut_etau": "velocitร media di <em>caricamento</em> e tempo stimato al completamento",
- "ut_etat": "velocitร <em>totale</em> media e tempo stimato al completamento",
-
- "uct_ok": "completato con successo",
- "uct_ng": "non-valido: fallito / rifiutato / non-trovato",
- "uct_done": "ok e ng combinati",
- "uct_bz": "hashing o caricamento",
- "uct_q": "inattivo, in attesa",
-
- "utl_name": "nome file",
- "utl_ulist": "lista",
- "utl_ucopy": "copia",
- "utl_links": "link",
- "utl_stat": "stato",
- "utl_prog": "progresso",
-
- // keep short:
- "utl_404": "404",
- "utl_err": "ERRORE",
- "utl_oserr": "Errore-SO",
- "utl_found": "trovato",
- "utl_defer": "rinvia",
- "utl_yolo": "YOLO",
- "utl_done": "finito",
-
- "ul_flagblk": "i file sono stati aggiunti alla coda
tuttavia c'รจ un up2k occupato in un'altra scheda del browser,
quindi aspetto che quello finisca prima",
- "ul_btnlk": "la configurazione del server ha bloccato questo interruttore in questo stato",
-
- "udt_up": "Carica",
- "udt_srch": "Cerca",
- "udt_drop": "lascialo qui",
-
- "u_nav_m": 'ok, cosa hai?
Invio = File (uno o piรน)\nESC = Una cartella (incluse sottocartelle)',
- "u_nav_b": 'FileUna cartella',
-
- "cl_opts": "opzioni",
- "cl_themes": "tema",
- "cl_langs": "lingua",
- "cl_ziptype": "download cartella",
- "cl_uopts": "opzioni up2k",
- "cl_favico": "favicon",
- "cl_bigdir": "cartelle grandi",
- "cl_hsort": "#ordinamento",
- "cl_keytype": "notazione tasti",
- "cl_hiddenc": "colonne nascoste",
- "cl_hidec": "nascondi",
- "cl_reset": "reset",
- "cl_hpick": "tocca le intestazioni delle colonne per nascondere nella tabella sottostante",
- "cl_hcancel": "nascondere colonne annullato",
-
- "ct_grid": '็ฐ griglia',
- "ct_ttips": 'โ โก โ">โน๏ธ tooltip',
- "ct_thumb": 'nella vista griglia, alterna icone o miniature$NTasto rapido: T">๐ผ๏ธ miniature',
- "ct_csel": 'usa CTRL e SHIFT per la selezione file nella vista griglia">sel',
- "ct_ihop": 'quando il visualizzatore immagini รจ chiuso, scorri fino all\'ultimo file visualizzato">gโฎฏ',
- "ct_dots": 'mostra file nascosti (se il server lo permette)">dotfile',
- "ct_qdel": 'quando elimini file, chiedi conferma solo una volta">qdel',
- "ct_dir1st": 'ordina cartelle prima dei file">๐ prima',
- "ct_nsort": 'ordinamento naturale (per nomi file con cifre iniziali)">nsort',
- "ct_utc": 'mostra tutte le date/ore in UTC">UTC',
- "ct_readme": 'mostra README.md negli elenchi cartelle">๐ readme',
- "ct_idxh": 'mostra index.html invece dell\'elenco cartelle">htm',
- "ct_sbars": 'mostra barre di scorrimento">โ',
-
- "cut_umod": "se un file esiste giร sul server, aggiorna il timestamp di ultima modifica del server per farlo coincidere con il tuo file locale (richiede permessi di scrittura+eliminazione)\">re๐
",
-
- "cut_turbo": "il pulsante yolo, probabilmente NON lo vuoi abilitare:$N$NUsalo se stavi caricando una grande quantitร di file e hai dovuto riavviare per qualche motivo, e vuoi continuare il caricamento il prima possibile$N$NQuesto sostituisce il controllo hash con un semplice "questo ha la stessa dimensione file sul server?" quindi se il contenuto del file รจ diverso NON verrร caricato$N$NDovresti spegnere questo quando il caricamento รจ finito, e poi "caricare" di nuovo gli stessi file per far verificare al client\">turbo",
-
- "cut_datechk": "non ha effetto a meno che il pulsante turbo sia abilitato$N$NRiduce il fattore yolo di una piccola quantitร ; controlla se i timestamp dei file sul server corrispondono ai tuoi$N$NDovrebbe teoricamente catturare la maggior parte dei caricamenti non finiti / corrotti, ma non รจ un sostituto per fare un passaggio di verifica con turbo disabilitato dopo\">date-chk",
-
- "cut_u2sz": "dimensione (in MiB) di ogni chunk di caricamento; valori grandi volano meglio attraverso l'atlantico. Prova valori bassi su connessioni molto inaffidabili",
-
- "cut_flag": "assicura che solo una scheda stia caricando alla volta $N -- anche le altre schede devono avere questo abilitato $N -- influisce solo sulle schede dello stesso dominio",
-
- "cut_az": "carica file in ordine alfabetico, invece che dal file piรน piccolo prima$N$NL'ordine alfabetico puรฒ rendere piรน facile controllare a occhio se qualcosa รจ andato storto sul server, ma rende il caricamento leggermente piรน lento su fibra / LAN",
-
- "cut_nag": "notifica SO quando il caricamento si completa$N(solo se il browser o la scheda non รจ attiva)",
- "cut_sfx": "allarme sonoro quando il caricamento si completa$N(solo se il browser o la scheda non รจ attiva)",
-
- "cut_mt": "usa multithreading per accelerare l'hashing dei file$N$NQuesto usa web-worker e richiede$Npiรน RAM (fino a 512 MiB extra)$N$NRende https 30% piรน veloce, http 4.5x piรน veloce\">mt",
-
- "cut_wasm": "usa wasm invece dell'hasher integrato del browser; migliora la velocitร sui browser basati su chrome ma aumenta il carico CPU, e molte versioni vecchie di chrome hanno bug che fanno consumare tutta la RAM al browser e crashare se questo รจ abilitato\">wasm",
-
- "cft_text": "testo favicon (vuoto e aggiorna per disabilitare)",
- "cft_fg": "colore primo piano",
- "cft_bg": "colore sfondo",
-
- "cdt_lim": "numero massimo di file da mostrare in una cartella",
- "cdt_ask": "quando scorri verso il fondo,$Ninvece di caricare piรน file,$Nchiedi cosa fare",
- "cdt_hsort": "quante regole di ordinamento (<code>,sorthref</code>) includere negli URL multimediali. Impostandolo a 0 ignorerร anche le regole di ordinamento incluse nei link multimediali quando li clicchi",
-
- "tt_entree": "mostra pannello nav (barra laterale albero directory)$NTasto rapido: B",
- "tt_detree": "mostra breadcrumb$NTasto rapido: B",
- "tt_visdir": "scorri alla cartella selezionata",
- "tt_ftree": "alterna albero cartelle / file di testo$NTasto rapido: V",
- "tt_pdock": "mostra cartelle genitore in un pannello ancorato in alto",
- "tt_dynt": "crescita automatica mentre l'albero si espande",
- "tt_wrap": "a capo parola",
- "tt_hover": "rivela righe che traboccano al passaggio del mouse$N( interrompe lo scorrimento a meno che il cursore $N del mouse non sia nella grondaia sinistra )",
-
- "ml_pmode": "alla fine della cartella...",
- "ml_btns": "comandi",
- "ml_tcode": "transcodifica",
- "ml_tcode2": "transcodifica in",
- "ml_tint": "tinta",
- "ml_eq": "equalizzatore audio",
- "ml_drc": "compressore gamma dinamica",
-
- "mt_loop": "loop/ripeti una canzone\">๐",
- "mt_one": "fermati dopo una canzone\">1๏ธโฃ",
- "mt_shuf": "mescola le canzoni in ogni cartella\">๐",
- "mt_aplay": "autoplay se c'รจ un song-ID nel link che hai cliccato per accedere al server$N$NDisabilitando questo fermerร anche l'aggiornamento dell'URL della pagina con song-ID quando riproduci musica, per prevenire autoplay se queste impostazioni vengono perse ma l'URL rimane\">aโถ",
- "mt_preload": "inizia a caricare la prossima canzone verso la fine per riproduzione senza interruzioni\">preload",
- "mt_prescan": "vai alla prossima cartella prima che finisca l'ultima canzone$Nmantenendo felice il browser web$Ncosรฌ non si ferma la riproduzione\">nav",
- "mt_fullpre": "prova a precaricare l'intera canzone;$Nโ
abilita su connessioni inaffidabili,$Nโ disabilita su connessioni lente probabilmente\">full",
- "mt_fau": "sui telefoni, previeni che la musica si fermi se la prossima canzone non si precarica abbastanza velocemente (puรฒ rendere glitchy la visualizzazione dei tag)\">โ๏ธ",
- "mt_waves": "barra di ricerca forma d'onda:$Nmostra ampiezza audio nello scrubber\">~s",
- "mt_npclip": "mostra pulsanti per copiare negli appunti la canzone attualmente in riproduzione\">/np",
- "mt_m3u_c": "mostra pulsanti per copiare negli appunti le$Ncanzoni selezionate come voci playlist m3u8\">๐ป",
- "mt_octl": "integrazione so (tasti multimediali / osd)\">os-ctl",
- "mt_oseek": "permetti ricerca attraverso integrazione so$N$Nnota: su alcuni dispositivi (iPhone),$Nquesto sostituisce il pulsante canzone successiva\">seek",
- "mt_oscv": "mostra copertina album in osd\">art",
- "mt_follow": "mantieni la traccia in riproduzione scorrevole nella vista\">๐ฏ",
- "mt_compact": "controlli compatti\">โ",
- "mt_uncache": "pulisci cache (prova ad attivare se il tuo browser ha messo in cache$Nuna copia rotta di una canzone e si rifiuta di riprodurla)\">uncache",
- "mt_mloop": "loop della cartella aperta\">๐ loop",
- "mt_mnext": "carica la prossima cartella e continua\">๐ succ",
- "mt_mstop": "ferma riproduzione\">โธ stop",
- "mt_cflac": "converti flac / wav in {0}\">flac",
- "mt_caac": "converti aac / m4a in {0}\">aac",
- "mt_coth": "converti tutti gli altri (non mp3) in {0}\">oth",
- "mt_c2opus": "scelta migliore per desktop, laptop, android\">opus",
- "mt_c2owa": "opus-weba, per iOS 17.5 e piรน recenti\">owa",
- "mt_c2caf": "opus-caf, per iOS 11 fino a 17\">caf",
- "mt_c2mp3": "usa questo su dispositivi molto vecchi\">mp3",
- "mt_c2flac": "qualitร audio migliore, ma download pesanti\">flac", //m
- "mt_c2wav": "riproduzione non compressa (ancora piรน grande)\">wav", //m
- "mt_c2ok": "bene, buona scelta",
- "mt_c2nd": "quello non รจ il formato di output raccomandato per il tuo dispositivo, ma va bene",
- "mt_c2ng": "il tuo dispositivo non sembra supportare questo formato di output, ma proviamo comunque",
- "mt_xowa": "ci sono bug in iOS che prevengono la riproduzione in background usando questo formato; usa caf o mp3 invece",
- "mt_tint": "livello sfondo (0-100) sulla barra di ricerca$Nper rendere il buffering meno distraente",
- "mt_eq": "abilita l'equalizzatore e controllo guadagno;$N$Nboost <code>0</code> = volume standard 100% (non modificato)$N$Nwidth <code>1 </code> = stereo standard (non modificato)$Nwidth <code>0.5</code> = 50% crossfeed sinistra-destra$Nwidth <code>0 </code> = mono$N$Nboost <code>-0.8</code> & width <code>10</code> = rimozione vocale :^)$N$Nabilitando l'equalizzatore rende gli album senza interruzioni completamente senza interruzioni, quindi lascialo acceso con tutti i valori a zero (eccetto width = 1) se ti importa di quello",
- "mt_drc": "abilita il compressore gamma dinamica (appiattitore volume / brickwaller); abiliterร anche EQ per bilanciare gli spaghetti, quindi imposta tutti i campi EQ eccetto 'width' a 0 se non lo vuoi$N$NAbbassa il volume dell'audio sopra THRESHOLD dB; per ogni RATIO dB oltre THRESHOLD c'รจ 1 dB di output, quindi i valori di default di tresh -24 e ratio 12 significa che non dovrebbe mai diventare piรน forte di -22 dB ed รจ sicuro aumentare il boost equalizzatore a 0.8, o anche 1.8 con ATK 0 e un RLS enorme come 90 (funziona solo in firefox; RLS รจ max 1 in altri browser)$N$N(vedi wikipedia, lo spiegano molto meglio)",
-
- "mb_play": "riproduci",
- "mm_hashplay": "riprodurre questo file audio?",
- "mm_m3u": "premi Invio/OK per Riprodurre\npremi ESC/Annulla per Modificare",
- "mp_breq": "serve firefox 82+ o chrome 73+ o iOS 15+",
- "mm_bload": "ora caricando...",
- "mm_bconv": "convertendo in {0}, attendi...",
- "mm_opusen": "il tuo browser non puรฒ riprodurre file aac / m4a;\ntranscodifica in opus ora abilitata",
- "mm_playerr": "riproduzione fallita: ",
- "mm_eabrt": "Il tentativo di riproduzione รจ stato cancellato",
- "mm_enet": "La tua connessione internet รจ instabile",
- "mm_edec": "Questo file รจ presumibilmente corrotto??",
- "mm_esupp": "Il tuo browser non capisce questo formato audio",
- "mm_eunk": "Errore Sconosciuto",
- "mm_e404": "Non รจ stato possibile riprodurre audio; errore 404: File non trovato.",
- "mm_e403": "Non รจ stato possibile riprodurre audio; errore 403: Accesso negato.\n\nProva a premere F5 per ricaricare, forse sei stato disconnesso",
- "mm_e500": "Non รจ stato possibile riprodurre audio; errore 500: Controlla i log del server.",
- "mm_e5xx": "Non รจ stato possibile riprodurre audio; errore server ",
- "mm_nof": "non trovo altri file audio nelle vicinanze",
- "mm_prescan": "Cercando musica da riprodurre dopo...",
- "mm_scank": "Trovata la prossima canzone:",
- "mm_uncache": "cache pulita; tutte le canzoni si riscaricheranno alla prossima riproduzione",
- "mm_hnf": "quella canzone non esiste piรน",
-
- "im_hnf": "quell'immagine non esiste piรน",
-
- "f_empty": 'questa cartella รจ vuota',
- "f_chide": 'questo nasconderร la colonna ยซ{0}ยป\n\npuoi mostrare le colonne nella scheda impostazioni',
- "f_bigtxt": "questo file รจ {0} MiB grande -- visualizzare davvero come testo?",
- "f_bigtxt2": "visualizzare solo la fine del file invece? questo abiliterร anche following/tailing, mostrando righe di testo appena aggiunte in tempo reale",
- "fbd_more": '',
- "fbd_all": '',
- "f_anota": "solo {0} dei {1} elementi sono stati selezionati;\nper selezionare l'intera cartella, prima scorri fino in fondo",
-
- "f_dls": 'i link dei file nella cartella corrente sono stati\ncambiati in link di download',
-
- "f_partial": "Per scaricare in sicurezza un file che รจ attualmente in fase di caricamento, clicca il file che ha lo stesso nome, ma senza l'estensione .PARTIAL. Premi ANNULLA o Escape per farlo.\n\nPremendo OK / Invio ignorerai questo avviso e continuerai a scaricare il file .PARTIAL scratch, che quasi sicuramente ti darร dati corrotti.",
-
- "ft_paste": "incolla {0} elementi$NTasto rapido: ctrl-V",
- "fr_eperm": 'impossibile rinominare:\nnon hai il permesso โspostaโ in questa cartella',
- "fd_eperm": 'impossibile eliminare:\nnon hai il permesso โeliminaโ in questa cartella',
- "fc_eperm": 'impossibile tagliare:\nnon hai il permesso โspostaโ in questa cartella',
- "fp_eperm": 'impossibile incollare:\nnon hai il permesso โscriviโ in questa cartella',
- "fr_emore": "seleziona almeno un elemento da rinominare",
- "fd_emore": "seleziona almeno un elemento da eliminare",
- "fc_emore": "seleziona almeno un elemento da tagliare",
- "fcp_emore": "seleziona almeno un elemento da copiare negli appunti",
-
- "fs_sc": "condividi la cartella in cui ti trovi",
- "fs_ss": "condividi i file selezionati",
- "fs_just1d": "non puoi selezionare piรน di una cartella,\no mescolare file e cartelle in una selezione",
- "fs_abrt": "โ interrompi",
- "fs_rand": "๐ฒ nome.casuale",
- "fs_go": "โ
crea condivisione",
- "fs_name": "nome",
- "fs_src": "sorgente",
- "fs_pwd": "password",
- "fs_exp": "scadenza",
- "fs_tmin": "min",
- "fs_thrs": "ore",
- "fs_tdays": "giorni",
- "fs_never": "eterno",
- "fs_pname": "nome link opzionale; sarร casuale se vuoto",
- "fs_tsrc": "il file o cartella da condividere",
- "fs_ppwd": "password opzionale",
- "fs_w8": "creando condivisione...",
- "fs_ok": "premi Invio/OK per Appunti\npremi ESC/Annulla per Chiudere",
-
- "frt_dec": "puรฒ risolvere alcuni casi di nomi file corrotti\">url-decode",
- "frt_rst": "ripristina nomi file modificati a quelli originali\">โบ reset",
- "frt_abrt": "interrompi e chiudi questa finestra\">โ annulla",
- "frb_apply": "APPLICA RINOMINA",
- "fr_adv": "rinomina batch / metadata / pattern\">avanzato",
- "fr_case": "regex case-sensitive\">maiusc",
- "fr_win": "nomi sicuri per windows; sostituisce <>:"\\|?* con caratteri giapponesi fullwidth\">win",
- "fr_slash": "sostituisce / con un carattere che non causa la creazione di nuove cartelle\">no /",
- "fr_re": "pattern di ricerca regex da applicare ai nomi file originali; i gruppi di cattura possono essere referenziati nel campo formato sottostante come <code>(1)</code> e <code>(2)</code> e cosรฌ via",
- "fr_fmt": "ispirato da foobar2000:$N<code>(title)</code> รจ sostituito dal titolo della canzone,$N<code>[(artist) - ](title)</code> salta [questa] parte se artista รจ vuoto$N<code>$lpad((tn),2,0)</code> aggiunge padding al numero traccia a 2 cifre",
- "fr_pdel": "elimina",
- "fr_pnew": "salva come",
- "fr_pname": "fornisci un nome per il tuo nuovo preset",
- "fr_aborted": "interrotto",
- "fr_lold": "nome vecchio",
- "fr_lnew": "nome nuovo",
- "fr_tags": "tag per i file selezionati (sola lettura, solo per riferimento):",
- "fr_busy": "rinominando {0} elementi...\n\n{1}",
- "fr_efail": "rinomina fallita:\n",
- "fr_nchg": "{0} dei nuovi nomi sono stati alterati a causa di win e/o no /\n\nOK per continuare con questi nuovi nomi alterati?",
-
- "fd_ok": "eliminazione OK",
- "fd_err": "eliminazione fallita:\n",
- "fd_none": "niente รจ stato eliminato; forse bloccato dalla configurazione server (xbd)?",
- "fd_busy": "eliminando {0} elementi...\n\n{1}",
- "fd_warn1": "ELIMINARE questi {0} elementi?",
- "fd_warn2": "Ultima possibilitร ! Nessun modo per annullare. Eliminare?",
-
- "fc_ok": "tagliati {0} elementi",
- "fc_warn": 'tagliati {0} elementi\n\nma: solo questa scheda-browser puรฒ incollarli\n(dato che la selezione รจ cosรฌ assolutamente massiva)',
-
- "fcc_ok": "copiati {0} elementi negli appunti",
- "fcc_warn": 'copiati {0} elementi negli appunti\n\nma: solo questa scheda-browser puรฒ incollarli\n(dato che la selezione รจ cosรฌ assolutamente massiva)',
-
- "fp_apply": "usa questi nomi",
- "fp_ecut": "prima taglia o copia alcuni file / cartelle da incollare / spostare\n\nnota: puoi tagliare / incollare attraverso diverse schede del browser",
- "fp_ename": "{0} elementi non possono essere spostati qui perchรฉ i nomi sono giร presi. Dai loro nuovi nomi qui sotto per continuare, o lascia vuoto il nome per saltarli:",
- "fcp_ename": "{0} elementi non possono essere copiati qui perchรฉ i nomi sono giร presi. Dai loro nuovi nomi qui sotto per continuare, o lascia vuoto il nome per saltarli:",
- "fp_emore": "ci sono ancora alcune collisioni di nomi file rimaste da risolvere",
- "fp_ok": "spostamento OK",
- "fcp_ok": "copia OK",
- "fp_busy": "spostando {0} elementi...\n\n{1}",
- "fcp_busy": "copiando {0} elementi...\n\n{1}",
- "fp_abrt": "annullamento in corso...", //m
- "fp_err": "spostamento fallito:\n",
- "fcp_err": "copia fallita:\n",
- "fp_confirm": "spostare questi {0} elementi qui?",
- "fcp_confirm": "copiare questi {0} elementi qui?",
- "fp_etab": 'fallito leggere appunti da altra scheda browser',
- "fp_name": "caricando un file dal tuo dispositivo. Dagli un nome:",
- "fp_both_m": 'scegli cosa incollare
Invio = Sposta {0} file da ยซ{1}ยป\nESC = Carica {2} file dal tuo dispositivo',
- "fcp_both_m": 'scegli cosa incollare
Invio = Copia {0} file da ยซ{1}ยป\nESC = Carica {2} file dal tuo dispositivo',
- "fp_both_b": 'SpostaCarica',
- "fcp_both_b": 'CopiaCarica',
-
- "mk_noname": "scrivi un nome nel campo di testo a sinistra prima di farlo :p",
-
- "tv_load": "Caricando documento di testo:\n\n{0}\n\n{1}% ({2} di {3} MiB caricati)",
- "tv_xe1": "impossibile caricare file di testo:\n\nerrore ",
- "tv_xe2": "404, file non trovato",
- "tv_lst": "lista di file di testo in",
- "tvt_close": "torna alla vista cartella$NTasto rapido: M (o Esc)\">โ chiudi",
- "tvt_dl": "scarica questo file$NTasto rapido: Y\">๐พ scarica",
- "tvt_prev": "mostra documento precedente$NTasto rapido: i\">โฌ prec",
- "tvt_next": "mostra documento successivo$NTasto rapido: K\">โฌ succ",
- "tvt_sel": "seleziona file ( per taglia / copia / elimina / ... )$NTasto rapido: S\">sel",
- "tvt_edit": "apri file nell'editor di testo$NTasto rapido: E\">โ๏ธ modifica",
- "tvt_tail": "monitora file per cambiamenti; mostra nuove righe in tempo reale\">๐ก segui",
- "tvt_wrap": "a capo parola\">โต",
- "tvt_atail": "blocca scorrimento in fondo alla pagina\">โ",
- "tvt_ctail": "decodifica colori terminale (codici escape ansi)\">๐",
- "tvt_ntail": "limite scrollback (quanti byte di testo mantenere caricati)",
-
- "m3u_add1": "canzone aggiunta alla playlist m3u",
- "m3u_addn": "{0} canzoni aggiunte alla playlist m3u",
- "m3u_clip": "playlist m3u ora copiata negli appunti\n\ndovresti creare un nuovo file di testo chiamato qualcosa.m3u e incollare la playlist in quel documento; questo la renderร riproducibile",
-
- "gt_vau": "non mostrare video, riproduci solo l'audio\">๐ง",
- "gt_msel": "abilita selezione file; ctrl-click un file per sovrascrivere$N$N<em>quando attivo: doppio-click un file / cartella per aprirlo</em>$N$NTasto rapido: S\">multiselezione",
- "gt_crop": "ritaglia miniature al centro\">ritaglia",
- "gt_3x": "miniature hi-res\">3x",
- "gt_zoom": "zoom",
- "gt_chop": "taglia",
- "gt_sort": "ordina per",
- "gt_name": "nome",
- "gt_sz": "dimensione",
- "gt_ts": "data",
- "gt_ext": "tipo",
- "gt_c1": "tronca nomi file di piรน (mostra meno)",
- "gt_c2": "tronca nomi file di meno (mostra di piรน)",
-
- "sm_w8": "cercando...",
- "sm_prev": "i risultati di ricerca qui sotto sono da una query precedente:\n ",
- "sl_close": "chiudi risultati ricerca",
- "sl_hits": "mostrando {0} risultati",
- "sl_moar": "carica altro",
-
- "s_sz": "dimensione",
- "s_dt": "data",
- "s_rd": "percorso",
- "s_fn": "nome",
- "s_ta": "tag",
- "s_ua": "car@",
- "s_ad": "avanz.",
- "s_s1": "MiB minimo",
- "s_s2": "MiB massimo",
- "s_d1": "iso8601 min.",
- "s_d2": "iso8601 max.",
- "s_u1": "caricato dopo",
- "s_u2": "e/o prima",
- "s_r1": "percorso contiene (separato da spazi)",
- "s_f1": "nome contiene (nega con -nope)",
- "s_t1": "tag contiene (^=inizio, fine=$)",
- "s_a1": "proprietร metadata specifiche",
-
- "md_eshow": "impossibile renderizzare ",
- "md_off": "[๐readme] disabilitato in [โ๏ธ] -- documento nascosto",
-
- "badreply": "Fallito nel parsare risposta dal server",
-
- "xhr403": "403: Accesso negato\n\nprova a premere F5, forse sei stato disconnesso",
- "xhr0": "sconosciuto (probabilmente persa connessione al server, o server offline)",
- "cf_ok": "scusa per quello -- la protezione DD" + wah + "oS รจ entrata in azione\n\nle cose dovrebbero riprendere in circa 30 sec\n\nse non succede niente, premi F5 per ricaricare la pagina",
- "tl_xe1": "impossibile elencare sottocartelle:\n\nerrore ",
- "tl_xe2": "404: Cartella non trovata",
- "fl_xe1": "impossibile elencare file nella cartella:\n\nerrore ",
- "fl_xe2": "404: Cartella non trovata",
- "fd_xe1": "impossibile creare sottocartella:\n\nerrore ",
- "fd_xe2": "404: Cartella genitore non trovata",
- "fsm_xe1": "impossibile inviare messaggio:\n\nerrore ",
- "fsm_xe2": "404: Cartella genitore non trovata",
- "fu_xe1": "fcaricamento fallito per la lista unpost dal server:\n\nerrore ",
- "fu_xe2": "404: File non trovato??",
-
- "fz_tar": "file gnu-tar non compresso (linux / mac)",
- "fz_pax": "tar formato pax non compresso (piรน lento)",
- "fz_targz": "gnu-tar con compressione gzip livello 3$N$NSolitamente รจ molto lento, quindi$Nusa tar non compresso",
- "fz_tarxz": "gnu-tar con compressione xz livello 1$N$NQuesto รจ solitamente molto lento, quindi$Nusa tar non compresso",
- "fz_zip8": "zip con nomi file utf8 (forse instabile su windows 7 e precedenti)",
- "fz_zipd": "zip con nomi file cp437 tradizionali, per software molto vecchio",
- "fz_zipc": "cp437 con crc32 calcolato presto,$Nper MS-DOS PKZIP v2.04g (ottobre 1993)$N(ci vuole piรน tempo per elaborare prima che possa iniziare il download)",
-
- "un_m1": "puoi eliminare i tuoi caricamenti recenti (o interrompere quelli non finiti) qui sotto",
- "un_upd": "aggiorna",
- "un_m4": "o condividi i file visibili qui sotto:",
- "un_ulist": "mostra",
- "un_ucopy": "copia",
- "un_flt": "filtro opzionale: URL deve contenere",
- "un_fclr": "resetta filtro",
- "un_derr": 'unpost-delete fallito:\n',
- "un_f5": 'qualcosa si รจ rotto, prova un aggiornamento o premi F5',
- "un_uf5": "scusa ma devi aggiornare la pagina (per esempio premendo F5 o CTRL-R) prima che questo caricamento possa essere interrotto",
- "un_nou": 'avviso: server troppo occupato per mostrare caricamenti non finiti; clicca il link "aggiorna" tra un po\'',
- "un_noc": 'avviso: unpost di file completamente caricati non รจ abilitato/permesso nella configurazione server',
- "un_max": "mostrando primi 2000 file (usa il filtro)",
- "un_avail": "{0} caricamenti recenti possono essere eliminati
{1} non finiti possono essere interrotti",
- "un_m2": "ordinati per tempo di caricamento; piรน recenti prima:",
- "un_no1": "scherzo! nessun caricamento รจ abbastanza recente",
- "un_no2": "scherzo! nessun caricamento che corrisponde a quel filtro รจ abbastanza recente",
- "un_next": "elimina i prossimi {0} file qui sotto",
- "un_abrt": "interrompi",
- "un_del": "elimina",
- "un_m3": "caricando i tuoi caricamenti recenti...",
- "un_busy": "eliminando {0} file...",
- "un_clip": "{0} link copiati negli appunti",
-
- "u_https1": "dovresti",
- "u_https2": "passare a https",
- "u_https3": "per prestazioni migliori",
- "u_ancient": 'il tuo browser รจ incredibilmente antico -- forse dovresti usare bup invece',
- "u_nowork": "serve firefox 53+ o chrome 57+ o iOS 11+",
- "tail_2old": "serve firefox 105+ o chrome 71+ o iOS 14.5+",
- "u_nodrop": 'il tuo browser รจ troppo vecchio per il caricamento drag-and-drop',
- "u_notdir": "quella non รจ una cartella!\n\nil tuo browser รจ troppo vecchio,\nprova dragdrop invece",
- "u_uri": "per trascinare immagini da altre finestre del browser,\nrilasciale sul pulsante upload grande",
- "u_enpot": 'passa alla UI patata (puรฒ migliorare velocitร upload)',
- "u_depot": 'passa alla UI elegante (puรฒ ridurre velocitร upload)',
- "u_gotpot": 'passando alla UI patata per migliorare velocitร upload,\n\nsentiti libero di non essere d\'accordo e tornare indietro!',
- "u_pott": "file: {0} finiti, {1} falliti, {2} occupati, {3} in coda
",
- "u_ever": "questo รจ l'uploader di base; up2k necessita almeno
chrome 21 // firefox 13 // edge 12 // opera 12 // safari 5.1",
- "u_su2k": 'questo รจ l\'uploader di base; up2k รจ migliore',
- "u_uput": 'velocizza (salta checksum)',
- "u_ewrite": 'non hai accesso in scrittura a questa cartella',
- "u_eread": 'non hai accesso in lettura a questa cartella',
- "u_enoi": 'file-search non รจ abilitato nella configurazione server',
- "u_enoow": "non puoi sovrascrivere qui; serve permesso Elimina",
- "u_badf": 'Questi {0} file (di {1} totali) sono stati saltati, probabilmente a causa di permessi filesystem:\n\n',
- "u_blankf": 'Questi {0} file (di {1} totali) sono vuoti; caricarli comunque?\n\n',
- "u_applef": 'Questi {0} file (di {1} totali) sono probabilmente indesiderabili;\nPremi OK/Invio per SALTARE i seguenti file,\nPremi Annulla/ESC per NON escludere, e CARICARE anche quelli:\n\n',
- "u_just1": '\nForse funziona meglio se selezioni solo un file',
- "u_ff_many": "se stai usando Linux / MacOS / Android, allora questa quantitร di file potrebbe far crashare Firefox!\nse succede, riprova (o usa Chrome).",
- "u_up_life": "Questo caricamento sarร eliminato dal server\n{0} dopo che si completa",
- "u_asku": 'caricare questi {0} file in {1}',
- "u_unpt": "puoi annullare / eliminare questo caricamento usando ๐งฏ in alto a sinistra",
- "u_bigtab": 'sto per mostrare {0} file\n\nquesto potrebbe far crashare il tuo browser, sei sicuro?',
- "u_scan": 'Scansionando file...',
- "u_dirstuck": 'iteratore directory si รจ bloccato tentando di accedere ai seguenti {0} elementi; salterรฒ:',
- "u_etadone": 'Fatto ({0}, {1} file)',
- "u_etaprep": '(preparando per caricare)',
- "u_hashdone": 'hashing completato',
- "u_hashing": 'hash',
- "u_hs": 'handshaking...',
- "u_started": "i file ora sono in caricamento; vedi [๐]",
- "u_dupdefer": "duplicato; sarร processato dopo tutti gli altri file",
- "u_actx": "clicca questo testo per prevenire perdita di
prestazioni quando cambi ad altre finestre/schede",
- "u_fixed": "OK! Risolto ๐",
- "u_cuerr": "caricamento fallito del chunk {0} di {1};\nprobabilmente innocuo, continuo\n\nfile: {2}",
- "u_cuerr2": "il server ha rifiutato il caricamento (chunk {0} di {1});\nriproverรฒ piรน tardi\n\nfile: {2}\n\nerrore ",
- "u_ehstmp": "riproverรฒ; vedi in basso a destra",
- "u_ehsfin": "il server ha rifiutato la richiesta di finalizzare caricamento; riprovando...",
- "u_ehssrch": "il server ha rifiutato la richiesta di eseguire ricerca; riprovando...",
- "u_ehsinit": "il server ha rifiutato la richiesta di iniziare caricamento; riprovando...",
- "u_eneths": "errore di rete durante handshake per upload; riprovando...",
- "u_enethd": "errore di rete durante test esistenza target; riprovando...",
- "u_cbusy": "aspettando che il server si fidi di noi di nuovo dopo un problema di rete...",
- "u_ehsdf": "il server ha finito lo spazio su disco!\n\ncontinuerรฒ a riprovare, nel caso qualcuno\nliberi abbastanza spazio per continuare",
- "u_emtleak1": "sembra che il tuo browser possa avere un memory leak;\nper favore",
- "u_emtleak2": ' passa a https (raccomandato) o ',
- "u_emtleak3": ' ',
- "u_emtleakc": 'prova quanto segue:\n- premi
F5 per aggiornare la pagina - poi disabilita il pulsante
mt nelle โ๏ธ impostazioni - e riprova quel caricamento
I caricamenti saranno un po\' piรน lenti, ma pazienza.\nScusa per il disturbo !\n\nPS: chrome v107 ha un bugfix per questo',
- "u_emtleakf": 'prova quanto segue:\n- premi
F5 per aggiornare la pagina - poi abilita
๐ฅ (patata) nell\'UI caricamento - e riprova quel caricamento
\nPS: firefox avrร sperabilmente un bugfix ad un certo punto',
- "u_s404": "non trovato sul server",
- "u_expl": "spiega",
- "u_maxconn": "la maggior parte dei browser limita questo a 6, ma firefox ti permette di alzarlo con connections-per-server in about:config",
- "u_tu": 'AVVISO: turbo abilitato, client potrebbe non rilevare e riprendere caricamenti incompleti; vedi tooltip pulsante turbo
',
- "u_ts": 'AVVISO: turbo abilitato, risultati ricerca possono essere incorretti; vedi tooltip pulsante turbo
',
- "u_turbo_c": "turbo รจ disabilitato nella configurazione server",
- "u_turbo_g": "disabilitando turbo perchรฉ non hai\nprivilegi di elenco directory all'interno di questo volume",
- "u_life_cfg": 'auto-elimina dopo min (o ore)',
- "u_life_est": 'caricamento sarร eliminato ---',
- "u_life_max": 'questa cartella impone una\nvita massima di {0}',
- "u_unp_ok": 'unpost รจ permesso per {0}',
- "u_unp_ng": 'unpost NON sarร permesso',
- "ue_ro": 'il tuo accesso a questa cartella รจ solo-Lettura\n\n',
- "ue_nl": 'attualmente non sei loggato',
- "ue_la": 'attualmente sei loggato come "{0}"',
- "ue_sr": 'attualmente sei in modalitร file-search\n\npassa alla modalitร upload cliccando la lente d\'ingrandimento ๐ (accanto al grande pulsante CERCA), e prova a caricare di nuovo\n\nscusa',
- "ue_ta": 'prova a caricare di nuovo, dovrebbe funzionare ora',
- "ue_ab": "questo file รจ giร in caricamento in un'altra cartella, e quel caricamento deve essere completato prima che il file possa essere caricato altrove.\n\nPuoi interrompere e dimenticare il caricamento iniziale usando l'๐งฏ in alto a sinistra",
- "ur_1uo": "OK: File caricato con successo",
- "ur_auo": "OK: Tutti i {0} file caricati con successo",
- "ur_1so": "OK: File trovato sul server",
- "ur_aso": "OK: Tutti i {0} file trovati sul server",
- "ur_1un": "Caricamento fallito, scusa",
- "ur_aun": "Tutti i {0} caricamenti falliti, scusa",
- "ur_1sn": "File NON trovato sul server",
- "ur_asn": "I {0} file NON sono stati trovati sul server",
- "ur_um": "Finito;\n{0} caricamenti OK,\n{1} caricamenti falliti, scusa",
- "ur_sm": "Finito;\n{0} file trovati sul server,\n{1} file NON trovati sul server",
-
- "lang_set": "aggiornare per rendere effettivo il cambiamento?",
- },
- "kor": {
- "tt": "ํ๊ตญ์ด",
-
- "cols": {
- "c": "์์
๋ฒํผ",
- "dur": "๊ธธ์ด",
- "q": "ํ์ง/๋นํธ๋ ์ดํธ",
- "Ac": "์ค๋์ค ์ฝ๋ฑ",
- "Vc": "๋น๋์ค ์ฝ๋ฑ",
- "Fmt": "ํ์/์ปจํ
์ด๋",
- "Ahash": "์ค๋์ค ์ฒดํฌ์ฌ",
- "Vhash": "๋น๋์ค ์ฒดํฌ์ฌ",
- "Res": "ํด์๋",
- "T": "ํ์ผ ์ ํ",
- "aq": "์ค๋์ค ํ์ง/๋นํธ๋ ์ดํธ",
- "vq": "๋น๋์ค ํ์ง/๋นํธ๋ ์ดํธ",
- "pixfmt": "์๋ธ์ํ๋ง/ํฝ์
๊ตฌ์กฐ",
- "resw": "๊ฐ๋ก ํด์๋",
- "resh": "์ธ๋ก ํด์๋",
- "chs": "์ค๋์ค ์ฑ๋",
- "hz": "์ํ๋ ์ดํธ"
- },
-
- "hks": [
- [
- "๊ธฐํ",
- ["ESC", "๋ค์ํ ์ฐฝ ๋ซ๊ธฐ"],
-
- "ํ์ผ ๊ด๋ฆฌ์",
- ["G", "๋ชฉ๋ก/๊ทธ๋ฆฌ๋ ๋ณด๊ธฐ ์ ํ"],
- ["T", "์ธ๋ค์ผ/์์ด์ฝ ์ ํ"],
- ["โง A/D", "์ธ๋ค์ผ ์ด๋ฏธ์ง ํฌ๊ธฐ"],
- ["ctrl-K", "์ ํ ํญ๋ชฉ ์ญ์ "],
- ["ctrl-X", "์ ํ ํญ๋ชฉ ์๋ผ๋ด๊ธฐ"],
- ["ctrl-C", "์ ํ ํญ๋ชฉ ๋ณต์ฌ"],
- ["ctrl-V", "์ฌ๊ธฐ์ ๋ถ์ฌ๋ฃ๊ธฐ (์ด๋/๋ณต์ฌ)"],
- ["Y", "์ ํ ํญ๋ชฉ ๋ค์ด๋ก๋"],
- ["F2", "์ ํ ํญ๋ชฉ ์ด๋ฆ ๋ฐ๊พธ๊ธฐ"],
-
- "ํ์ผ ๋ชฉ๋ก ์ ํ",
- ["space", "ํ์ผ ์ ํ/ํด์ "],
- ["โ/โ", "์ ํ ์ปค์ ์ด๋"],
- ["ctrl โ/โ", "์ปค์์ ๋ทฐํฌํธ ๋์ ์ด๋"],
- ["โง โ/โ", "์ด์ /๋ค์ ํ์ผ ์ ํ"],
- ["ctrl-A", "๋ชจ๋ ํ์ผ/ํด๋ ์ ํ"],
- ], [
- "ํ์",
- ["B", "๋ธ๋ ๋ํฌ๋ผ/ํ์์ฐฝ ์ ํ"],
- ["I/K", "์ด์ /๋ค์ ํด๋"],
- ["M", "์์ ํด๋ (๋๋ ํ์ฌ ํญ๋ชฉ ๋ซ๊ธฐ)"],
- ["V", "ํ์์ฐฝ์ ํด๋/ํ
์คํธ ํ์ผ ํ์ ์ ํ"],
- ["A/D", "ํ์์ฐฝ ํฌ๊ธฐ"],
- ], [
- "์ค๋์ค ํ๋ ์ด์ด",
- ["J/L", "์ด์ /๋ค์ ๊ณก"],
- ["U/O", "10์ด ๋ค๋ก/์์ผ๋ก ๊ฑด๋๋ฐ๊ธฐ"],
- ["0..9", "0%..90% ์ง์ ์ผ๋ก ์ด๋"],
- ["P", "์ฌ์/์ผ์์ ์ง (์์ ํฌํจ)"],
- ["S", "์ฌ์ ์ค์ธ ๊ณก ์ ํ"],
- ["Y", "๊ณก ๋ค์ด๋ก๋"],
- ], [
- "์ด๋ฏธ์ง ๋ทฐ์ด",
- ["J/L, โ/โ", "์ด์ /๋ค์ ์ด๋ฏธ์ง"],
- ["Home/End", "์ฒซ/๋ง์ง๋ง ์ด๋ฏธ์ง"],
- ["F", "์ ์ฒด ํ๋ฉด"],
- ["R", "์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ "],
- ["โง R", "๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ "],
- ["S", "์ด๋ฏธ์ง ์ ํ"],
- ["Y", "์ด๋ฏธ์ง ๋ค์ด๋ก๋"],
- ], [
- "๋น๋์ค ํ๋ ์ด์ด",
- ["U/O", "10์ด ๋ค๋ก/์์ผ๋ก ๊ฑด๋๋ฐ๊ธฐ"],
- ["P/K/Space", "์ฌ์/์ผ์์ ์ง"],
- ["C", "๋ค์ ํ์ผ ๊ณ์ ์ฌ์"],
- ["V", "๋ฐ๋ณต"],
- ["M", "์์๊ฑฐ"],
- ["[ ์ ]", "๋ฐ๋ณต ๊ตฌ๊ฐ ์ค์ "],
- ], [
- "ํ
์คํธ ํ์ผ ๋ทฐ์ด",
- ["I/K", "์ด์ /๋ค์ ํ์ผ"],
- ["M", "ํ
์คํธ ํ์ผ ๋ซ๊ธฐ"],
- ["E", "ํ
์คํธ ํ์ผ ํธ์ง"],
- ["S", "ํ์ผ ์ ํ (์๋ผ๋ด๊ธฐ/๋ณต์ฌ/์ด๋ฆ ๋ฐ๊พธ๊ธฐ์ฉ)"],
- ]
- ],
-
- "m_ok": "ํ์ธ",
- "m_ng": "์ทจ์",
-
- "enable": "ํ์ฑํ",
- "danger": "์ํ",
- "clipped": "ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ๋์์ต๋๋ค",
-
- "ht_s1": "์ด",
- "ht_s2": "์ด",
- "ht_m1": "๋ถ",
- "ht_m2": "๋ถ",
- "ht_h1": "์๊ฐ",
- "ht_h2": "์๊ฐ",
- "ht_d1": "์ผ",
- "ht_d2": "์ผ",
- "ht_and": " ",
-
- "goh": "์ ์ดํ",
- "gop": '์ด์ ํ์ ํด๋">์ด์ ',
- "gou": '์์ ํด๋">์๋ก',
- "gon": '๋ค์ ํด๋">๋ค์',
- "logout": "๋ก๊ทธ์์ ",
- "login": "๋ก๊ทธ์ธ", //m
- "access": " ์ก์ธ์ค",
- "ot_close": "ํ์ ๋ฉ๋ด ๋ซ๊ธฐ",
- "ot_search": "์์ฑ, ๊ฒฝ๋ก/์ด๋ฆ, ์์
ํ๊ทธ ๋๋ ์ด๋ค์ ์กฐํฉ์ผ๋ก ํ์ผ์ ๊ฒ์ํฉ๋๋ค.$N$N<code>foo bar</code> = ยซfooยป์ ยซbarยป๋ฅผ ๋ชจ๋ ํฌํจํด์ผ ํจ,$N<code>foo -bar</code> = ยซfooยป๋ ํฌํจํ์ง๋ง ยซbarยป๋ ํฌํจํ์ง ์์์ผ ํจ,$N<code>^yana .opus$</code> = ยซyanaยป๋ก ์์ํ๊ณ ยซopusยป ํ์ผ์ด์ด์ผ ํจ$N<code>"try unite"</code> = ์ ํํ ยซtry uniteยป๋ฅผ ํฌํจํด์ผ ํจ$N$N๋ ์ง ํ์์ ISO-8601์
๋๋ค. ์:$N<code>2009-12-31</code> ๋๋ <code>2020-09-12 23:30:00</code>",
- "ot_unpost": "์ฃผ์๋ด๊ธฐ: ์ต๊ทผ ์
๋ก๋ํ ํญ๋ชฉ์ ์ญ์ ํ๊ฑฐ๋ ๋ฏธ์๋ฃ๋ ์
๋ก๋๋ฅผ ์ค๋จํฉ๋๋ค",
- "ot_bup": "bup: ๊ธฐ๋ณธ ์
๋ก๋. ๋ท์ค์ผ์ดํ 4.0๋ ์ง์ํฉ๋๋ค",
- "ot_mkdir": "mkdir: ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ญ๋๋ค",
- "ot_md": "new-md: ์ ๋งํฌ๋ค์ด ๋ฌธ์๋ฅผ ๋ง๋ญ๋๋ค",
- "ot_msg": "msg: ์๋ฒ ๋ก๊ทธ์ ๋ฉ์์ง๋ฅผ ๋ณด๋
๋๋ค",
- "ot_mp": "๋ฏธ๋์ด ํ๋ ์ด์ด ์ต์
",
- "ot_cfg": "๊ตฌ์ฑ ์ต์
",
- "ot_u2i": 'up2k: (์ฐ๊ธฐ ๊ถํ์ด ์๋ ๊ฒฝ์ฐ) ํ์ผ์ ์
๋ก๋ํ๊ฑฐ๋, ๊ฒ์ ๋ชจ๋๋ก ์ ํํ์ฌ ์๋ฒ ์ด๋๊ฐ์ ํ์ผ์ด ์๋์ง ํ์ธํฉ๋๋ค.$N$N์
๋ก๋๋ ์ฌ๊ฐ ๊ฐ๋ฅํ๊ณ , ๋ฉํฐ์ค๋ ๋๋ก ์๋ํ๋ฉฐ, ํ์ผ ํ์์คํฌํ๊ฐ ๋ณด์กด๋์ง๋ง, [๐] (๊ธฐ๋ณธ ์
๋ก๋)๋ณด๋ค CPU๋ฅผ ๋ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
์
๋ก๋ ์ค์๋ ์ด ์์ด์ฝ์ด ์งํ๋ฅ ํ์์ฐฝ์ด ๋ฉ๋๋ค!',
- "ot_u2w": 'up2k: ์ด์ด์ฌ๋ฆฌ๊ธฐ ๊ธฐ๋ฅ์ ์ง์ํ๋ ํ์ผ ์
๋ก๋์
๋๋ค (๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ์๋ค๊ฐ ๋์ค์ ๋์ผํ ํ์ผ์ ๋์ด๋ค ๋์ผ์ธ์).$N$N๋ฉํฐ์ค๋ ๋๋ก ์๋ํ๋ฉฐ, ํ์ผ ํ์์คํฌํ๊ฐ ๋ณด์กด๋์ง๋ง, [๐] (๊ธฐ๋ณธ ์
๋ก๋)๋ณด๋ค CPU๋ฅผ ๋ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
์
๋ก๋ ์ค์๋ ์ด ์์ด์ฝ์ด ์งํ๋ฅ ํ์์ฐฝ์ด ๋ฉ๋๋ค!',
- "ot_noie": 'Chrome / Firefox / Edge๋ฅผ ์ฌ์ฉํด์ฃผ์ธ์',
-
- "ab_mkdir": "๋๋ ํฐ๋ฆฌ ๋ง๋ค๊ธฐ",
- "ab_mkdoc": "์ ๋งํฌ๋ค์ด ๋ฌธ์",
- "ab_msg": "์๋ฒ ๋ก๊ทธ์ ๋ฉ์์ง ๋ณด๋ด๊ธฐ",
-
- "ay_path": "ํด๋๋ก ๊ฑด๋๋ฐ๊ธฐ",
- "ay_files": "ํ์ผ๋ก ๊ฑด๋๋ฐ๊ธฐ",
-
- "wt_ren": "์ ํํ ํญ๋ชฉ ์ด๋ฆ ๋ฐ๊พธ๊ธฐ$N๋จ์ถํค: F2",
- "wt_del": "์ ํํ ํญ๋ชฉ ์ญ์ $N๋จ์ถํค: ctrl-K",
- "wt_cut": "์ ํํ ํญ๋ชฉ ์๋ผ๋ด๊ธฐ <small>(๋ค๋ฅธ ๊ณณ์ ๋ถ์ฌ๋ฃ๊ธฐ์ฉ)</small>$N๋จ์ถํค: ctrl-X",
- "wt_cpy": "์ ํํ ํญ๋ชฉ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ$N(๋ค๋ฅธ ๊ณณ์ ๋ถ์ฌ๋ฃ๊ธฐ์ฉ)$N๋จ์ถํค: ctrl-C",
- "wt_pst": "์ด์ ์ ์๋ผ๋ด๊ฑฐ๋ ๋ณต์ฌํ ํญ๋ชฉ ๋ถ์ฌ๋ฃ๊ธฐ$N๋จ์ถํค: ctrl-V",
- "wt_selall": "๋ชจ๋ ํ์ผ ์ ํ$N๋จ์ถํค: ctrl-A (ํ์ผ์ ํฌ์ปค์ค๋ ๊ฒฝ์ฐ)",
- "wt_selinv": "์ ํ ๋ฐ์ ",
- "wt_zip1": "์ด ํด๋๋ฅผ ์์ถ ํ์ผ๋ก ๋ค์ด๋ก๋",
- "wt_selzip": "์ ํ ํญ๋ชฉ์ ์์ถ ํ์ผ๋ก ๋ค์ด๋ก๋",
- "wt_seldl": "์ ํ ํญ๋ชฉ์ ๊ฐ๋ณ ํ์ผ๋ก ๋ค์ด๋ก๋$N๋จ์ถํค: Y",
- "wt_npirc": "IRC ํ์ ํธ๋ ์ ๋ณด ๋ณต์ฌ",
- "wt_nptxt": "์ผ๋ฐ ํ
์คํธ ํธ๋ ์ ๋ณด ๋ณต์ฌ",
- "wt_m3ua": "m3u ์ฌ์ ๋ชฉ๋ก์ ์ถ๊ฐ (๋์ค์ ๐ป๋ณต์ฌ ํด๋ฆญ)",
- "wt_m3uc": "m3u ์ฌ์ ๋ชฉ๋ก์ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ",
- "wt_grid": "๊ทธ๋ฆฌ๋/๋ชฉ๋ก ๋ณด๊ธฐ ์ ํ$N๋จ์ถํค: G",
- "wt_prev": "์ด์ ํธ๋$N๋จ์ถํค: J",
- "wt_play": "์ฌ์/์ผ์์ ์ง$N๋จ์ถํค: P",
- "wt_next": "๋ค์ ํธ๋$N๋จ์ถํค: L",
-
- "ul_par": "๋์ ์
๋ก๋:",
- "ut_rand": "ํ์ผ๋ช
๋ฌด์์๋ก ๋ง๋ค๊ธฐ",
- "ut_u2ts": "์ฌ์ฉ์ ํ์ผ ์์คํ
์ ๋ง์ง๋ง ์์ ํ์์คํฌํ๋ฅผ$N์๋ฒ์ ๋ณต์ฌ\">๐
",
- "ut_ow": "์๋ฒ์ ์๋ ๊ธฐ์กด ํ์ผ์ ๋ฎ์ด์ธ๊น์?$N๐ก๏ธ: ์ ํจ (๋์ ์ ํ์ผ ์ด๋ฆ ์์ฑ)$N๐: ์๋ฒ ํ์ผ์ด ๋ ์ค๋๋ ๊ฒฝ์ฐ ๋ฎ์ด์ฐ๊ธฐ$Nโป๏ธ: ํ์ผ์ด ๋ค๋ฅด๋ฉด ํญ์ ๋ฎ์ด์ฐ๊ธฐ",
- "ut_mt": "์
๋ก๋ ์ค ๋ค๋ฅธ ํ์ผ ํด์ฑ ๊ณ์ํ๊ธฐ$N$NCPU ๋๋ HDD๊ฐ ๋ณ๋ชฉ ํ์์ ์ผ์ผํค๋ ๊ฒฝ์ฐ ๋นํ์ฑํํ์ธ์",
- "ut_ask": '์
๋ก๋ ์์ ์ ํ์ธ ์์ฒญ">๐ญ',
- "ut_pot": "๋๋ฆฐ ๊ธฐ๊ธฐ์์ UI๋ฅผ ๋จ์ํํ์ฌ$N์
๋ก๋ ์๋ ํฅ์",
- "ut_srch": "์ค์ ๋ก ์
๋ก๋ํ๋ ๋์ , ํ์ผ์ด ์ด๋ฏธ ์๋ฒ์ ์๋์ง ํ์ธํฉ๋๋ค$N(์ฝ์ ์ ์๋ ๋ชจ๋ ํด๋๋ฅผ ์ค์บํฉ๋๋ค)",
- "ut_par": "0์ผ๋ก ์ค์ ํ์ฌ ์
๋ก๋ ์ผ์์ ์ง$N$N์ฐ๊ฒฐ์ด ๋๋ฆฌ๊ฑฐ๋ ์ง์ฐ ์๊ฐ์ด ๊ธธ๋ฉด ๋๋ฆฌ์ธ์$N$NLAN ํ๊ฒฝ์ด๊ฑฐ๋ ์๋ฒ HDD๊ฐ ๋ณ๋ชฉ ํ์์ ์ผ์ผํค๋ฉด 1๋ก ์ ์งํ์ธ์",
- "ul_btn": "ํ์ผ/ํด๋๋ฅผ ์ฌ๊ธฐ์
๋์ด๋ค ๋๊ฑฐ๋ ํด๋ฆญํ์ธ์",
- "ul_btnu": "์
๋ก ๋",
- "ul_btns": "๊ฒ ์",
-
- "ul_hash": "ํด์ฑ",
- "ul_send": "์ ์ก",
- "ul_done": "์๋ฃ",
- "ul_idle1": "๋๊ธฐ ์ค์ธ ์
๋ก๋๊ฐ ์์ต๋๋ค",
- "ut_etah": "ํ๊ท <em>ํด์ฑ</em> ์๋ ๋ฐ ์์ ์๋ฃ ์๊ฐ",
- "ut_etau": "ํ๊ท <em>์
๋ก๋</em> ์๋ ๋ฐ ์์ ์๋ฃ ์๊ฐ",
- "ut_etat": "ํ๊ท <em>์ด</em> ์๋ ๋ฐ ์์ ์๋ฃ ์๊ฐ",
-
- "uct_ok": "์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋จ",
- "uct_ng": "๋ฌธ์ ๋ฐ์: ์คํจ/๊ฑฐ๋ถ/์ฐพ์ ์ ์์",
- "uct_done": "์๋ฃ๋จ (์ฑ๊ณต ๋ฐ ๋ฌธ์ ๋ฐ์ ํฌํจ)",
- "uct_bz": "ํด์ฑ ๋๋ ์
๋ก๋ ์ค",
- "uct_q": "๋๊ธฐ ์ค, ๋ณด๋ฅ ์ค",
-
- "utl_name": "ํ์ผ๋ช
",
- "utl_ulist": "๋ชฉ๋ก",
- "utl_ucopy": "๋ณต์ฌ",
- "utl_links": "๋งํฌ",
- "utl_stat": "์ํ",
- "utl_prog": "์งํ๋ฅ ",
-
- // keep short:
- "utl_404": "404",
- "utl_err": "์ค๋ฅ",
- "utl_oserr": "OS ์ค๋ฅ",
- "utl_found": "์ฐพ์",
- "utl_defer": "๋ณด๋ฅ",
- "utl_yolo": "YOLO",
- "utl_done": "์๋ฃ",
-
- "ul_flagblk": "ํ์ผ์ด ๋๊ธฐ์ด์ ์ถ๊ฐ๋์์ต๋๋ค.
ํ์ง๋ง ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ํญ์์ up2k๊ฐ ์คํ ์ค์ด๋ฏ๋ก,
ํด๋น ์์
์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.",
- "ul_btnlk": "์๋ฒ ๊ตฌ์ฑ์์ ์ด ์ค์์น๋ฅผ ํ์ฌ ์ํ๋ก ์ ๊ฐ์ต๋๋ค.",
-
- "udt_up": "์
๋ก๋",
- "udt_srch": "๊ฒ์",
- "udt_drop": "์ฌ๊ธฐ์ ๋์ผ์ธ์",
-
- "u_nav_m": '์, ๊ฐ๊ณ ์๋ ๊ฒ ๋ฌด์์ธ๊ฐ?
Enter = ํ์ผ (ํ๋ ์ด์)\nESC = ํด๋ ํ๋ (ํ์ ํด๋ ํฌํจ)',
- "u_nav_b": 'ํ์ผํด๋ ํ๋',
-
- "cl_opts": "์ค์์น",
- "cl_themes": "ํ
๋ง",
- "cl_langs": "์ธ์ด",
- "cl_ziptype": "ํด๋ ๋ค์ด๋ก๋",
- "cl_uopts": "up2k ์ค์์น",
- "cl_favico": "ํ๋น์ฝ",
- "cl_bigdir": "ํฐ ๋๋ ํฐ๋ฆฌ",
- "cl_hsort": "#sort",
- "cl_keytype": "์กฐ์ฑ ํ๊ธฐ๋ฒ",
- "cl_hiddenc": "์จ๊ฒจ์ง ์ด",
- "cl_hidec": "์จ๊ธฐ๊ธฐ",
- "cl_reset": "์ด๊ธฐํ",
- "cl_hpick": "์๋ ํ
์ด๋ธ์์ ์จ๊ธฐ๊ณ ์ถ์ ์ด์ ํค๋๋ฅผ ํญํ์ธ์",
- "cl_hcancel": "์ด ์จ๊ธฐ๊ธฐ๊ฐ ์ค๋จ๋์์ต๋๋ค",
-
- "ct_grid": "็ฐ ๊ทธ๋ฆฌ๋",
- "ct_ttips": 'โ โก โ">โน๏ธ ๋์๋ง',
- "ct_thumb": '๊ทธ๋ฆฌ๋ ๋ณด๊ธฐ์์ ์์ด์ฝ ๋๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ด๋ฏธ์ง ์ ํ$N๋จ์ถํค: T">๐ผ๏ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ',
- "ct_csel": '๊ทธ๋ฆฌ๋ ๋ณด๊ธฐ์์ CTRL๊ณผ SHIFT๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ ์ ํ">์ ํ',
- "ct_ihop": '์ด๋ฏธ์ง ๋ทฐ์ด๋ฅผ ๋ซ์ผ๋ฉด ๋ง์ง๋ง์ผ๋ก ๋ณธ ํ์ผ๋ก ์คํฌ๋กค">gโฎฏ',
- "ct_dots": '์จ๊น ํ์ผ ํ์ (์๋ฒ๊ฐ ํ์ฉํ๋ ๊ฒฝ์ฐ)">์จ๊นํ์ผ',
- "ct_qdel": 'ํ์ผ ์ญ์ ์ ํ ๋ฒ๋ง ํ์ธ ์์ฒญ">๋น ๋ฅธ์ญ์ ',
- "ct_dir1st": 'ํด๋๋ฅผ ํ์ผ๋ณด๋ค ๋จผ์ ์ ๋ ฌ">๐ ๋จผ์ ',
- "ct_nsort": '์์ฐ์ด ์ ๋ ฌ (ํ์ผ๋ช
์ ์ซ์๋ฅผ ์ธ์)">์์ฐ์ด์ ๋ ฌ',
- "ct_utc": '๋ชจ๋ ๋ ์ง/์๊ฐ์ UTC๋ก ํ์">UTC',
- "ct_readme": 'ํด๋ ๋ชฉ๋ก์ README.md ํ์">๐ readme',
- "ct_idxh": 'ํด๋ ๋ชฉ๋ก ๋์ index.html ํ์">htm',
- "ct_sbars": '์คํฌ๋กค๋ฐ ํ์">โ',
-
- "cut_umod": 'ํ์ผ์ด ์๋ฒ์ ์ด๋ฏธ ์๋ ๊ฒฝ์ฐ, ์๋ฒ์ ๋ง์ง๋ง ์์ ํ์์คํฌํ๋ฅผ ๋ก์ปฌ ํ์ผ๊ณผ ์ผ์นํ๋๋ก ์
๋ฐ์ดํธํฉ๋๋ค (์ฐ๊ธฐ+์ญ์ ๊ถํ ํ์).\">re๐
',
-
- "cut_turbo": 'YOLO ๋ฒํผ. ์๋ง ํ์ฑํํ๊ณ ์ถ์ง ์์ผ์ค ๊ฒ๋๋ค.$N$N๋๋์ ํ์ผ์ ์
๋ก๋ํ๋ค๊ฐ ์ด๋ค ์ด์ ๋ก ์ฌ์์ํด์ผ ํ ๋, ์ต๋ํ ๋นจ๋ฆฌ ์
๋ก๋๋ฅผ ๊ณ์ํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ์ธ์.$N$N์ด ์ต์
์ ํด์ ํ์ธ์ ๋จ์ํ "์๋ฒ์ ๋์ผํ ํ์ผ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง ํ์ผ์ด ์๋๊ฐ?"๋ก ๋์ฒดํ๋ฏ๋ก, ํ์ผ ๋ด์ฉ๋ง ๋ค๋ฅผ ๊ฒฝ์ฐ ์
๋ก๋๋์ง ์์ต๋๋ค.$N$N์
๋ก๋๊ฐ ๋๋๋ฉด ์ด ์ต์
์ ๋๊ณ , ๋์ผํ ํ์ผ์ ๋ค์ \"์
๋ก๋\"ํ์ฌ ํด๋ผ์ด์ธํธ๊ฐ ๊ฒ์ฆํ๋๋ก ํด์ผ ํฉ๋๋ค.\">turbo',
-
- "cut_datechk": 'ํฐ๋ณด ๋ฒํผ์ด ํ์ฑํ๋์ด ์์ง ์์ผ๋ฉด ํจ๊ณผ๊ฐ ์์ต๋๋ค.$N$NYOLO์ ์ํ์ฑ์ ์ฝ๊ฐ ์ค์ฌ์ค๋๋ค. ์๋ฒ์ ํ์ผ ํ์์คํฌํ๊ฐ ์ฌ์ฉ์์ ๊ฒ๊ณผ ์ผ์นํ๋์ง ํ์ธํฉ๋๋ค.$N$N์ด๋ก ์ ์ผ๋ก๋ ๋๋ถ๋ถ์ ๋ฏธ์๋ฃ/์์๋ ์
๋ก๋๋ฅผ ์ก์๋ด์ง๋ง, ํฐ๋ณด๋ฅผ ๋นํ์ฑํํ๊ณ ๊ฒ์ฆ ๊ณผ์ ์ ๊ฑฐ์น๋ ๊ฒ์ ๋์ฒดํ ์๋ ์์ต๋๋ค.\">๋ ์งํ์ธ',
-
- "cut_u2sz": "๊ฐ ์
๋ก๋ ์ฒญํฌ์ ํฌ๊ธฐ (MiB)์
๋๋ค. ํฐ ๊ฐ์ ํํ์์ ๊ฑด๋๋ ๋ฐ ๋ ์ ๋ฆฌํฉ๋๋ค. ๋งค์ฐ ๋ถ์์ ํ ์ฐ๊ฒฐ์์๋ ๋ฎ์ ๊ฐ์ ์๋ํด๋ณด์ธ์.",
-
- "cut_flag": 'ํ ๋ฒ์ ํ๋์ ํญ๋ง ์
๋ก๋ํ๋๋ก ๋ณด์ฅํฉ๋๋ค.$N-- ๋ค๋ฅธ ํญ๋ ์ด ์ต์
์ ํ์ฑํํด์ผ ํฉ๋๋ค.$N-- ๋์ผํ ๋๋ฉ์ธ์ ํญ์๋ง ์ํฅ์ ๋ฏธ์นฉ๋๋ค.',
-
- "cut_az": '๊ฐ์ฅ ์์ ํ์ผ ์ฐ์ ์ด ์๋ ์ํ๋ฒณ ์์๋ก ํ์ผ์ ์
๋ก๋ํฉ๋๋ค.$N$N์ํ๋ฒณ ์์๋ ์๋ฒ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง ๋์ผ๋ก ํ์ธํ๊ธฐ ์ฝ๊ฒ ํด์ฃผ์ง๋ง, ๊ด๋/LAN ํ๊ฒฝ์์๋ ์
๋ก๋ ์๋๊ฐ ์ฝ๊ฐ ๋๋ ค์ง๋๋ค.',
-
- "cut_nag": '์
๋ก๋ ์๋ฃ ์ OS ์๋ฆผ$N(๋ธ๋ผ์ฐ์ ๋ ํญ์ด ํ์ฑํ๋์ง ์์ ๊ฒฝ์ฐ์๋ง)',
- "cut_sfx": '์
๋ก๋ ์๋ฃ ์ ์๋ฆฌ ์๋ฆผ$N(๋ธ๋ผ์ฐ์ ๋ ํญ์ด ํ์ฑํ๋์ง ์์ ๊ฒฝ์ฐ์๋ง)',
-
- "cut_mt": '๋ฉํฐ์ค๋ ๋ฉ์ ์ฌ์ฉํ์ฌ ํ์ผ ํด์ฑ ์๋๋ฅผ ๋์
๋๋ค.$N$N์ด ๊ธฐ๋ฅ์ ์น ์์ปค๋ฅผ ์ฌ์ฉํ๋ฉฐ$N๋ ๋ง์ RAM์ด ํ์ํฉ๋๋ค (์ถ๊ฐ์ ์ผ๋ก ์ต๋ 512 MiB).$N$Nhttps๋ 30% ๋ ๋น ๋ฅด๊ฒ, http๋ 4.5๋ฐฐ ๋ ๋น ๋ฅด๊ฒ ๋ง๋ญ๋๋ค.\">mt',
-
- "cut_wasm": '๋ธ๋ผ์ฐ์ ๋ด์ฅ ํด์
๋์ wasm์ ์ฌ์ฉํฉ๋๋ค. ํฌ๋กฌ ๊ธฐ๋ฐ ๋ธ๋ผ์ฐ์ ์์ ์๋๋ฅผ ํฅ์์ํค์ง๋ง CPU ๋ถํ๋ฅผ ์ฆ๊ฐ์ํค๋ฉฐ, ๋ง์ ๊ตฌ๋ฒ์ ํฌ๋กฌ์๋ ์ด ๊ธฐ๋ฅ์ ํ์ฑํํ๋ฉด ๋ชจ๋ RAM์ ์๋ชจํ๊ณ ์ถฉ๋ํ๋ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค.\">wasm',
-
- "cft_text": "ํ๋น์ฝ ํ
์คํธ (๋น์๋๊ณ ์๋ก๊ณ ์นจํ๋ฉด ๋นํ์ฑํ๋จ)",
- "cft_fg": "์ ๊ฒฝ์",
- "cft_bg": "๋ฐฐ๊ฒฝ์",
-
- "cdt_lim": "ํด๋์ ํ์ํ ์ต๋ ํ์ผ ์",
- "cdt_ask": "๋งจ ์๋๋ก ์คํฌ๋กคํ ๋$N๋ ๋ง์ ํ์ผ์ ๋ถ๋ฌ์ค๋ ๋์ $N๋ฌด์์ ํ ์ง ๋ฌป๊ธฐ",
- "cdt_hsort": "๋ฏธ๋์ด URL์ ํฌํจํ ์ ๋ ฌ ๊ท์น (<code>,sorthref</code>)์ ์. 0์ผ๋ก ์ค์ ํ๋ฉด ๋ฏธ๋์ด ๋งํฌ๋ฅผ ํด๋ฆญํ ๋ ํฌํจ๋ ์ ๋ ฌ ๊ท์น๋ ๋ฌด์๋ฉ๋๋ค.",
-
- "tt_entree": "ํ์ ์ฐฝ (๋๋ ํฐ๋ฆฌ ํธ๋ฆฌ ์ฌ์ด๋๋ฐ) ํ์$N๋จ์ถํค: B",
- "tt_detree": "์ด๋ ๊ฒฝ๋ก ํ์$N๋จ์ถํค: B",
- "tt_visdir": "์ ํํ ํด๋๋ก ์คํฌ๋กคํ๊ธฐ",
- "tt_ftree": "ํด๋ ํธ๋ฆฌ/ํ
์คํธ ํ์ผ ์ ํ$N๋จ์ถํค: V",
- "tt_pdock": "์์ ํด๋๋ฅผ ์๋จ์ ๊ณ ์ ๋ ์ฐฝ์ ํ์",
- "tt_dynt": "ํธ๋ฆฌ๊ฐ ํ์ฅ๋ ๋ ์๋์ผ๋ก ๋๋น ์ฆ๊ฐ",
- "tt_wrap": "์๋ ์ค ๋ฐ๊ฟ",
- "tt_hover": "๋ง์ฐ์ค๋ฅผ ์ฌ๋ฆฌ๋ฉด ๋์ด๊ฐ๋ ์ค ํ์$N(๋ง์ฐ์ค ์ปค์๊ฐ ์ผ์ชฝ ์ฌ๋ฐฑ์$N ์์ง ์์ผ๋ฉด ์คํฌ๋กค์ด ๊นจ์ง)",
-
- "ml_pmode": "ํด๋ ๋์์...",
- "ml_btns": "๋ช
๋ น",
- "ml_tcode": "ํธ๋์ค์ฝ๋ฉ",
- "ml_tcode2": "๋ค์์ผ๋ก ํธ๋์ค์ฝ๋ฉ",
- "ml_tint": "ํดํธ",
- "ml_eq": "์ค๋์ค ์ดํ๋ผ์ด์ ",
- "ml_drc": "๋ค์ด๋ด๋ฏน ๋ ์ธ์ง ์์ถ๊ธฐ",
-
- "mt_loop": "ํ ๊ณก ๋ฐ๋ณต ์ฌ์\">๐",
- "mt_one": "ํ ๊ณก ์ฌ์ ํ ์ค์ง\">1๏ธโฃ",
- "mt_shuf": "๊ฐ ํด๋์ ๊ณก์ ๋ฌด์์ ์ฌ์\">๐",
- "mt_aplay": "์๋ฒ์ ์ ์ํ ๋งํฌ์ ๊ณก ID๊ฐ ์์ผ๋ฉด ์๋ ์ฌ์$N$N์ด๊ฒ์ ๋นํ์ฑํํ๋ฉด ์์
์ฌ์ ์ ํ์ด์ง URL์ด ๊ณก ID๋ก ์
๋ฐ์ดํธ๋์ง ์์, ์ด ์ค์ ์ด ์์ค๋๊ณ URL์ด ๋จ์์์ ๊ฒฝ์ฐ ์๋ ์ฌ์๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.\">aโถ",
- "mt_preload": "๋๊น ์๋ ์ฌ์์ ์ํด ๋ค์ ๊ณก์ ๋ฏธ๋ฆฌ ๋ถ๋ฌ์ค๊ธฐ ์์\">๋ฏธ๋ฆฌ๋ก๋",
- "mt_prescan": "๋ง์ง๋ง ๊ณก์ด ๋๋๊ธฐ ์ ์ ๋ค์ ํด๋๋ก ์ด๋ํ์ฌ$N์น๋ธ๋ผ์ฐ์ ๊ฐ ์ฌ์์ ๋ฉ์ถ์ง ์๋๋ก ํฉ๋๋ค.\">ํ์",
- "mt_fullpre": "์ ์ฒด ๊ณก์ ๋ฏธ๋ฆฌ ๋ถ๋ฌ์ค๊ธฐ ์๋;$Nโ
๋ถ์์ ํ ์ฐ๊ฒฐ์์ ํ์ฑํ,$Nโ ๋๋ฆฐ ์ฐ๊ฒฐ์์๋ ์๋ง๋ ๋นํ์ฑํ\">์ ์ฒด",
- "mt_fau": "ํฐ์์ ๋ค์ ๊ณก์ด ์ถฉ๋ถํ ๋นจ๋ฆฌ ๋ฏธ๋ฆฌ ๋ถ๋ฌ์ค์ง ์์ ์์
์ด ๋ฉ์ถ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค (ํ๊ทธ ํ์๊ฐ ๋ถ์์ ํด์ง ์ ์์).\">โ๏ธ",
- "mt_waves": "ํํ ํ์ ๋ฐ:$Nํ์ ๋ฐ์ ์ค๋์ค ์งํญ ํ์\">~s",
- "mt_npclip": "ํ์ฌ ์ฌ์ ์ค์ธ ๊ณก์ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌํ๋ ๋ฒํผ ํ์\">/np",
- "mt_m3u_c": "์ ํํ ๊ณก์ m3u8 ์ฌ์ ๋ชฉ๋ก ํญ๋ชฉ์ผ๋ก$Nํด๋ฆฝ๋ณด๋์ ๋ณต์ฌํ๋ ๋ฒํผ ํ์\">๐ป",
- "mt_octl": "OS ํตํฉ (๋ฏธ๋์ด ๋จ์ถํค/OSD)\">os-ctl",
- "mt_oseek": "OS ํตํฉ์ ํตํด ํ์ ํ์ฉ$N$N์ฐธ๊ณ : ์ผ๋ถ ๊ธฐ๊ธฐ (iPhone)์์๋$N์ด๊ฒ์ด ๋ค์ ๊ณก ๋ฒํผ์ ๋์ฒดํฉ๋๋ค.\">ํ์",
- "mt_oscv": "OSD์ ์จ๋ฒ ์ปค๋ฒ ํ์\">์ํธ",
- "mt_follow": "์ฌ์ ์ค์ธ ํธ๋์ด ๋ณด์ด๋๋ก ์คํฌ๋กค ์ ์ง\">๐ฏ",
- "mt_compact": "์ปดํฉํธ ์ปจํธ๋กค\">โ",
- "mt_uncache": "์บ์ ์ง์ฐ๊ธฐ (๋ธ๋ผ์ฐ์ ๊ฐ ๊ณก์ ๊นจ์ง ์ฌ๋ณธ์ ์บ์ํ์ฌ$N์ฌ์์ด ์๋๋ ๊ฒฝ์ฐ ์๋ํด๋ณด์ธ์)\">์บ์์ญ์ ",
- "mt_mloop": "์ด๋ฆฐ ํด๋ ๋ฐ๋ณต\">๐ ๋ฐ๋ณต",
- "mt_mnext": "๋ค์ ํด๋ ๋ถ๋ฌ์ค๊ณ ๊ณ์\">๐ ๋ค์",
- "mt_mstop": "์ฌ์ ์ค์ง\">โธ ์ค์ง",
- "mt_cflac": "flac/wav๋ฅผ {0}๋ก ๋ณํ\">flac",
- "mt_caac": "aac/m4a๋ฅผ {0}๋ก ๋ณํ\">aac",
- "mt_coth": "๋ค๋ฅธ ๋ชจ๋ ๊ฒ (mp3 ์ ์ธ)์ {0}๋ก ๋ณํ\">๊ธฐํ",
- "mt_c2opus": "๋ฐ์คํฌํฑ, ๋
ธํธ๋ถ, ์๋๋ก์ด๋ ํ๊ฒฝ์ ์ต์ \">opus",
- "mt_c2owa": "iOS 17.5 ์ด์์ฉ opus-weba\">owa",
- "mt_c2caf": "iOS 11๋ถํฐ 17๊น์ง์ฉ opus-caf\">caf",
- "mt_c2mp3": "๋งค์ฐ ์ค๋๋ ๊ธฐ๊ธฐ์์ ์ฌ์ฉ\">mp3",
- "mt_c2flac": "์ต๊ณ ์์ง์ด์ง๋ง ๋ค์ด๋ก๋ ์ฉ๋์ด ํผ\">flac",
- "mt_c2wav": "๋น์์ถ ์ฌ์ (๋ ํผ)\">wav",
- "mt_c2ok": "๋ค, ์ข์ ์ ํ์
๋๋ค",
- "mt_c2nd": "๊ธฐ๊ธฐ์ ๊ถ์ฅ๋๋ ์ถ๋ ฅ ํ์์ด ์๋์ง๋ง ๊ด์ฐฎ์ต๋๋ค",
- "mt_c2ng": "๊ธฐ๊ธฐ๊ฐ ์ด ์ถ๋ ฅ ํ์์ ์ง์ํ์ง ์๋ ๊ฒ ๊ฐ์ง๋ง, ์๋ํด ๋ณด๊ฒ ์ต๋๋ค",
- "mt_xowa": "iOS์์ ์ด ํ์์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฌ์์ด ์๋๋ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค. ๋์ caf๋ mp3๋ฅผ ์ฌ์ฉํด์ฃผ์ธ์.",
- "mt_tint": "ํ์ ๋ฐ์ ๋ฐฐ๊ฒฝ ๋ ๋ฒจ (0-100)$N๋ฒํผ๋ง์ด ๋ ๋์๋ฆฌ๊ฒ ๋ง๋ฆ",
- "mt_eq": "์ดํ๋ผ์ด์ ๋ฐ ๊ฒ์ธ ์ ์ด ํ์ฑํ;$N$Nboost <code>0</code> = ํ์ค 100% ๋ณผ๋ฅจ (์์ ์์)$N$Nwidth <code>1 </code> = ํ์ค ์คํ
๋ ์ค (์์ ์์)$Nwidth <code>0.5</code> = 50% ์ข์ฐ ํฌ๋ก์คํผ๋$Nwidth <code>0 </code> = ๋ชจ๋
ธ$N$Nboost <code>-0.8</code> & width <code>10</code> = ๋ณด์ปฌ ์ ๊ฑฐ :^)$N$N์ดํ๋ผ์ด์ ๋ฅผ ํ์ฑํํ๋ฉด ๋๊น ์๋ ์จ๋ฒ์ด ์จ์ ํ ๋๊น ์์ด ์ฌ์๋๋ฏ๋ก, ๊ทธ ์ ์ด ์ค์ํ๋ค๋ฉด ๋ชจ๋ ๊ฐ์ 0์ผ๋ก ๋๊ณ (width=1 ์ ์ธ) ์ผ๋์ธ์.",
- "mt_drc": "๋ค์ด๋ด๋ฏน ๋ ์ธ์ง ์ปดํ๋ ์(๋ณผ๋ฅจ ํํํ/๋ฒฝ๋ํ)๋ฅผ ํ์ฑํํฉ๋๋ค. ์คํ๊ฒํฐ์ ๊ท ํ์ ๋ง์ถ๊ธฐ ์ํด EQ๋ ํ์ฑํ๋๋ฏ๋ก, ์ํ์ง ์์ผ๋ฉด 'width'๋ฅผ ์ ์ธํ ๋ชจ๋ EQ ํ๋๋ฅผ 0์ผ๋ก ์ค์ ํ์ธ์.$N$NTHRESHOLD dB ์ด์์ ์ค๋์ค ๋ณผ๋ฅจ์ ๋ฎ์ถฅ๋๋ค. THRESHOLD๋ฅผ ์ด๊ณผํ๋ ๋ชจ๋ RATIO dB์ ๋ํด 1dB์ ์ถ๋ ฅ์ด ์์ผ๋ฏ๋ก, ๊ธฐ๋ณธ๊ฐ์ธ tresh -24 ๋ฐ ratio 12๋ ๋ณผ๋ฅจ์ด -22dB๋ณด๋ค ์ปค์ง์ง ์์์ ์๋ฏธํ๋ฉฐ, ์ดํ๋ผ์ด์ ๋ถ์คํธ๋ฅผ 0.8 ๋๋ ATK 0๊ณผ ํฐ RLS (์: 90)๋ฅผ ์ฌ์ฉํ์ฌ 1.8๊น์ง ์์ ํ๊ฒ ๋์ผ ์ ์์ต๋๋ค (firefox์์๋ง ์๋, ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์์๋ RLS ์ต๋ 1).$N$N(์ํค๋ฐฑ๊ณผ๋ฅผ ์ฐธ์กฐํ์ธ์, ํจ์ฌ ๋ ์ ์ค๋ช
๋์ด ์์ต๋๋ค)",
-
- "mb_play": "์ฌ์",
- "mm_hashplay": "์ด ์ค๋์ค ํ์ผ์ ์ฌ์ํ ๊น์?",
- "mm_m3u": "Enter/ํ์ธ์ ๋๋ฌ ์ฌ์\nESC/์ทจ์๋ฅผ ๋๋ฌ ํธ์ง",
- "mp_breq": "Firefox 82+, Chrome 73+ ๋๋ iOS 15+ ํ์",
- "mm_bload": "๋ถ๋ฌ์ค๋ ์ค...",
- "mm_bconv": "{0}(์ผ)๋ก ๋ณํ ์ค, ์ ์๋ง ๊ธฐ๋ค๋ ค์ฃผ์ธ์...",
- "mm_opusen": "๋ธ๋ผ์ฐ์ ๊ฐ aac/m4a ํ์ผ์ ์ฌ์ํ ์ ์์ต๋๋ค.\nopus๋ก์ ํธ๋์ค์ฝ๋ฉ์ด ํ์ฑํ๋์์ต๋๋ค.",
- "mm_playerr": "์ฌ์ ์คํจ: ",
- "mm_eabrt": "์ฌ์ ์๋๊ฐ ์ทจ์๋์์ต๋๋ค",
- "mm_enet": "์ธํฐ๋ท ์ฐ๊ฒฐ์ด ๋ถ์์ ํฉ๋๋ค",
- "mm_edec": "์ด ํ์ผ์ด ์์๋ ๊ฒ ๊ฐ์ต๋๋ค??",
- "mm_esupp": "๋ธ๋ผ์ฐ์ ๊ฐ ์ด ์ค๋์ค ํ์์ ์ดํดํ์ง ๋ชปํฉ๋๋ค",
- "mm_eunk": "์ ์ ์๋ ์ค๋ฅ",
- "mm_e404": "์ค๋์ค๋ฅผ ์ฌ์ํ ์ ์์ต๋๋ค; ์ค๋ฅ 404: ํ์ผ์ ์ฐพ์ ์ ์์ต๋๋ค.",
- "mm_e403": "์ค๋์ค๋ฅผ ์ฌ์ํ ์ ์์ต๋๋ค; ์ค๋ฅ 403: ์ ๊ทผ์ด ๊ฑฐ๋ถ๋์์ต๋๋ค.\n\nF5๋ฅผ ๋๋ฌ ์๋ก๊ณ ์นจ ํด๋ณด์ธ์, ๋ก๊ทธ์์๋์์ ์ ์์ต๋๋ค",
- "mm_e500": "์ค๋์ค๋ฅผ ์ฌ์ํ ์ ์์ต๋๋ค; ์ค๋ฅ 500: ์๋ฒ ๋ก๊ทธ๋ฅผ ํ์ธํ์ธ์.",
- "mm_e5xx": "์ค๋์ค๋ฅผ ์ฌ์ํ ์ ์์ต๋๋ค; ์๋ฒ ์ค๋ฅ ",
- "mm_nof": "์ฃผ๋ณ์์ ๋ ์ด์ ์ค๋์ค ํ์ผ์ ์ฐพ์ ์ ์์ต๋๋ค",
- "mm_prescan": "๋ค์์ ์ฌ์ํ ์์
์ ์ฐพ๋ ์ค...",
- "mm_scank": "๋ค์ ๊ณก์ ์ฐพ์์ต๋๋ค:",
- "mm_uncache": "์บ์๊ฐ ์ง์์ก์ต๋๋ค. ๋ชจ๋ ๊ณก์ ๋ค์ ์ฌ์ ์ ๋ค์ ๋ค์ด๋ก๋๋ฉ๋๋ค.",
- "mm_hnf": "๊ทธ ๊ณก์ด ๋ ์ด์ ์กด์ฌํ์ง ์์ต๋๋ค",
-
- "im_hnf": "๊ทธ ์ด๋ฏธ์ง๊ฐ ๋ ์ด์ ์กด์ฌํ์ง ์์ต๋๋ค",
-
- "f_empty": '์ด ํด๋๋ ๋น์ด ์์ต๋๋ค',
- "f_chide": 'ยซ{0}ยป ์ด์ ์จ๊น๋๋ค.\n\n์ค์ ํญ์์ ์ด์ ๋ค์ ํ์ํ ์ ์์ต๋๋ค.',
- "f_bigtxt": "์ด ํ์ผ์ {0} MiB์
๋๋ค -- ์ ๋ง ํ
์คํธ๋ก ๋ณด์๊ฒ ์ต๋๊น?",
- "f_bigtxt2": "๋์ ํ์ผ์ ๋๋ถ๋ถ๋ง ๋ณด์๊ฒ ์ต๋๊น? ์ด๋ ๊ฒ ํ๋ฉด ์ค์๊ฐ์ผ๋ก ์๋ก ์ถ๊ฐ๋๋ ํ
์คํธ ์ค์ ๋ณด์ฌ์ฃผ๋ ํ๋ก์/ํ
์ผ๋ง ๊ธฐ๋ฅ๋ ํ์ฑํ๋ฉ๋๋ค.",
- "fbd_more": '',
- "fbd_all": '',
- "f_anota": "{1}๊ฐ ํญ๋ชฉ ์ค {0}๊ฐ๋ง ์ ํ๋์์ต๋๋ค.\n์ ์ฒด ํด๋๋ฅผ ์ ํํ๋ ค๋ฉด ๋จผ์ ๋งจ ์๋๋ก ์คํฌ๋กคํ์ธ์.",
-
- "f_dls": 'ํ์ฌ ํด๋์ ํ์ผ ๋งํฌ๊ฐ\n๋ค์ด๋ก๋ ๋งํฌ๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค',
-
- "f_partial": "ํ์ฌ ์
๋ก๋ ์ค์ธ ํ์ผ์ ์์ ํ๊ฒ ๋ค์ด๋ก๋ํ๋ ค๋ฉด, ํ์ผ ์ด๋ฆ์ด ๊ฐ์ง๋ง .PARTIAL ํ์ฅ์๊ฐ ์๋ ํ์ผ์ ํด๋ฆญํ์ธ์. ์ด ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํ๋ ค๋ฉด \"์ทจ์\" ๋๋ ESC๋ฅผ ๋๋ฅด์ธ์.\n\n\"ํ์ธ\"/Enter๋ฅผ ๋๋ฅด๋ฉด ์ด ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํ๊ณ .PARTIAL ์์ ํ์ผ์ ๊ณ์ ๋ค์ด๋ก๋ํ๋ฉฐ, ์ด ๊ฒฝ์ฐ ๊ฑฐ์ ํ์คํ ์์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค.",
-
- "ft_paste": "{0}๊ฐ ํญ๋ชฉ ๋ถ์ฌ๋ฃ๊ธฐ$N๋จ์ถํค: ctrl-V",
- "fr_eperm": "์ด๋ฆ์ ๋ฐ๊ฟ ์ ์์ต๋๋ค:\n์ด ํด๋์ \"์ด๋\" ๊ถํ์ด ์์ต๋๋ค",
- "fd_eperm": "์ญ์ ํ ์ ์์ต๋๋ค:\n์ด ํด๋์ \"์ญ์ \" ๊ถํ์ด ์์ต๋๋ค",
- "fc_eperm": "์๋ผ๋ผ ์ ์์ต๋๋ค:\n์ด ํด๋์ \"์ด๋\" ๊ถํ์ด ์์ต๋๋ค",
- "fp_eperm": "๋ถ์ฌ๋ฃ์ ์ ์์ต๋๋ค\n์ด ํด๋์ \"์ฐ๊ธฐ\" ๊ถํ์ด ์์ต๋๋ค",
- "fr_emore": "์ด๋ฆ์ ๋ฐ๊ฟ ํญ๋ชฉ์ ํ๋ ์ด์ ์ ํํ์ธ์",
- "fd_emore": "์ญ์ ํ ํญ๋ชฉ์ ํ๋ ์ด์ ์ ํํ์ธ์",
- "fc_emore": "์๋ผ๋ผ ํญ๋ชฉ์ ํ๋ ์ด์ ์ ํํ์ธ์",
- "fcp_emore": "ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌํ ํญ๋ชฉ์ ํ๋ ์ด์ ์ ํํ์ธ์",
-
- "fs_sc": "ํ์ฌ ํด๋ ๊ณต์ ",
- "fs_ss": "์ ํํ ํ์ผ ๊ณต์ ",
- "fs_just1d": "ํ๋ ์ด์์ ํด๋๋ฅผ ์ ํํ๊ฑฐ๋,\nํ์ผ๊ณผ ํด๋๋ฅผ ํ ๋ฒ์ ์์ด ์ ํํ ์ ์์ต๋๋ค",
- "fs_abrt": "โ ์ค๋จ",
- "fs_rand": "๐ฒ ๋ฌด์์ ์ด๋ฆ",
- "fs_go": "โ
๊ณต์ ์์ฑ",
- "fs_name": "์ด๋ฆ",
- "fs_src": "์์ค",
- "fs_pwd": "๋น๋ฐ๋ฒํธ",
- "fs_exp": "๋ง๋ฃ",
- "fs_tmin": "๋ถ",
- "fs_thrs": "์๊ฐ",
- "fs_tdays": "์ผ",
- "fs_never": "์์",
- "fs_pname": "์ ํ์ ๋งํฌ ์ด๋ฆ; ๋น์๋๋ฉด ๋ฌด์์๋ก ์์ฑ",
- "fs_tsrc": "๊ณต์ ํ ํ์ผ ๋๋ ํด๋",
- "fs_ppwd": "๋น๋ฐ๋ฒํธ (์ ํ์ฌํญ)",
- "fs_w8": "๊ณต์ ์์ฑ ์ค...",
- "fs_ok": "Enter/OK๋ฅผ ๋๋ฌ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ\nESC/Cancel๋ฅผ ๋๋ฌ ๋ซ๊ธฐ",
-
- "frt_dec": "๊นจ์ง ํ์ผ ์ด๋ฆ์ ์ผ๋ถ ๊ฒฝ์ฐ๋ฅผ ์์ ํ ์ ์์ต๋๋ค\">url-๋์ฝ๋",
- "frt_rst": "์์ ๋ ํ์ผ ์ด๋ฆ์ ์๋๋๋ก ๋๋๋ฆฝ๋๋ค\">โบ ์ด๊ธฐํ",
- "frt_abrt": "์ด ์ฐฝ์ ์ค๋จํ๊ณ ๋ซ์ต๋๋ค\">โ ์ทจ์",
- "frb_apply": "์ด๋ฆ ๋ฐ๊พธ๊ธฐ ์ ์ฉ",
- "fr_adv": "๋ฐฐ์น/๋ฉํ๋ฐ์ดํฐ/ํจํด ์ด๋ฆ ๋ฐ๊พธ๊ธฐ\">๊ณ ๊ธ",
- "fr_case": "๋์๋ฌธ์ ๊ตฌ๋ถ ์ ๊ท์\">๋์๋ฌธ์",
- "fr_win": "Windows ์์ ์ด๋ฆ; <>:"\\|?*๋ฅผ ์ผ๋ณธ์ด ์ ๊ฐ ๋ฌธ์๋ก ๋ฐ๊ฟ๋๋ค\">win",
- "fr_slash": "/๋ฅผ ์ ํด๋๋ฅผ ๋ง๋ค์ง ์๋ ๋ฌธ์๋ก ๋ฐ๊ฟ๋๋ค\">/ ์์",
- "fr_re": "์๋ณธ ํ์ผ ์ด๋ฆ์ ์ ์ฉํ ์ ๊ท์ ๊ฒ์ ํจํด; ์บก์ฒ๋ง ๊ทธ๋ฃน์ ์๋ ํ์ ํ๋์์ <code>(1)</code>, <code>(2)</code> ๋ฑ์ผ๋ก ์ฐธ์กฐํ ์ ์์ต๋๋ค",
- "fr_fmt": "foobar2000์์ ์๊ฐ์ ๋ฐ์:$N<code>(title)</code>์(๋) ๊ณก ์ ๋ชฉ์ผ๋ก ๋์ฒด๋จ,$N<code>[(artist) - ](title)</code>์(๋) ์ํฐ์คํธ๊ฐ ๋น์ด ์์ผ๋ฉด [์ด] ๋ถ๋ถ์ ๊ฑด๋๋$N<code>$lpad((tn),2,0)</code>์(๋) ํธ๋ ๋ฒํธ๋ฅผ 2์๋ฆฌ๋ก ์ฑ์",
- "fr_pdel": "์ญ์ ",
- "fr_pnew": "๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์ ์ฅ",
- "fr_pname": "์ ํ๋ฆฌ์
์ ์ด๋ฆ์ ์
๋ ฅํ์ธ์",
- "fr_aborted": "์ค๋จ๋จ",
- "fr_lold": "์ด์ ์ด๋ฆ",
- "fr_lnew": "์ ์ด๋ฆ",
- "fr_tags": "์ ํํ ํ์ผ์ ํ๊ทธ (์ฝ๊ธฐ ์ ์ฉ, ์ฐธ์กฐ์ฉ):",
- "fr_busy": "{0}๊ฐ ํญ๋ชฉ ์ด๋ฆ ๋ฐ๊พธ๋ ์ค...\n\n{1}",
- "fr_efail": "์ด๋ฆ ๋ฐ๊พธ๊ธฐ ์คํจ:\n",
- "fr_nchg": "win ๋ฐ/๋๋ / ์์์ผ๋ก ์ธํด ์ ์ด๋ฆ ์ค {0}๊ฐ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.\n\n์ด ๋ณ๊ฒฝ๋ ์ ์ด๋ฆ์ผ๋ก ๊ณ์ํ์๊ฒ ์ต๋๊น?",
-
- "fd_ok": "์ญ์ ํ์ธ",
- "fd_err": "์ญ์ ์คํจ:\n",
- "fd_none": "์๋ฌด๊ฒ๋ ์ญ์ ๋์ง ์์์ต๋๋ค. ์๋ฒ ๊ตฌ์ฑ (xbd)์ ์ํด ์ฐจ๋จ๋์์ ์ ์์ต๋๋ค.",
- "fd_busy": "์ญ์ ์ค {0}๊ฐ ํญ๋ชฉ...\n\n{1}",
- "fd_warn1": "์ด {0}๊ฐ ํญ๋ชฉ์ ์ญ์ ํ์๊ฒ ์ต๋๊น?",
- "fd_warn2": "๋ง์ง๋ง ๊ธฐํ์
๋๋ค! ๋๋๋ฆด ์ ์์ต๋๋ค. ์ญ์ ํ์๊ฒ ์ต๋๊น?",
-
- "fc_ok": "{0}๊ฐ ํญ๋ชฉ ์๋ผ๋ด๊ธฐ ์๋ฃ",
- "fc_warn": "{0}๊ฐ ํญ๋ชฉ ์๋ผ๋ด๊ธฐ ์๋ฃ\n\nํ์ง๋ง: ์ ํ ํญ๋ชฉ์ด ๋๋ฌด ์ปค์ ์ด ๋ธ๋ผ์ฐ์ ํญ์์๋ง ๋ถ์ฌ๋ฃ์ ์ ์์ต๋๋ค",
-
- "fcc_ok": "{0}๊ฐ ํญ๋ชฉ์ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌํ์ต๋๋ค",
- "fcc_warn": "{0}๊ฐ ํญ๋ชฉ์ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌํ์ต๋๋ค\n\nํ์ง๋ง: ์ ํ ํญ๋ชฉ์ด ๋๋ฌด ์ปค์ ์ด ๋ธ๋ผ์ฐ์ ํญ์์๋ง ๋ถ์ฌ๋ฃ์ ์ ์์ต๋๋ค",
-
- "fp_apply": "์ด ์ด๋ฆ ์ฌ์ฉ",
- "fp_ecut": "๋ถ์ฌ๋ฃ๊ฑฐ๋ ์ด๋ํ๋ ค๋ฉด ๋จผ์ ํ์ผ/ํด๋๋ฅผ ์๋ผ๋ด๊ฑฐ๋ ๋ณต์ฌํ์ธ์\n\n์ฐธ๊ณ : ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ํญ ๊ฐ์ ์๋ผ๋ด๊ธฐ/๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ํ ์ ์์ต๋๋ค",
- "fp_ename": "์ด๋ฆ์ด ์ด๋ฏธ ์ฌ์ฉ ์ค์ด๋ฏ๋ก {0}๊ฐ ํญ๋ชฉ์ ์ฌ๊ธฐ๋ก ์ด๋ํ ์ ์์ต๋๋ค. ๊ณ์ํ๋ ค๋ฉด ์๋์ ์ ์ด๋ฆ์ ์ง์ ํ๊ฑฐ๋, ์ด๋ฆ์ ๋น์๋๋ฉด ๊ฑด๋๋๋๋ค:",
- "fcp_ename": "์ด๋ฆ์ด ์ด๋ฏธ ์ฌ์ฉ ์ค์ด๋ฏ๋ก {0}๊ฐ ํญ๋ชฉ์ ์ฌ๊ธฐ๋ก ๋ณต์ฌํ ์ ์์ต๋๋ค. ๊ณ์ํ๋ ค๋ฉด ์๋์ ์ ์ด๋ฆ์ ์ง์ ํ๊ฑฐ๋, ์ด๋ฆ์ ๋น์๋๋ฉด ๊ฑด๋๋๋๋ค:",
- "fp_emore": "์์ง ํด๊ฒฐํด์ผ ํ ํ์ผ ์ด๋ฆ ์ถฉ๋์ด ๋จ์ ์์ต๋๋ค",
- "fp_ok": "์ด๋ ์๋ฃ",
- "fcp_ok": "๋ณต์ฌ ์๋ฃ",
- "fp_busy": "{0}๊ฐ ํญ๋ชฉ ์ด๋ ์ค...\n\n{1}",
- "fcp_busy": "{0}๊ฐ ํญ๋ชฉ ๋ณต์ฌ ์ค...\n\n{1}",
- "fp_abrt": "์ทจ์ ์ค...",
- "fp_err": "์ด๋ ์คํจ:\n",
- "fcp_err": "๋ณต์ฌ ์คํจ:\n",
- "fp_confirm": "์ด {0}๊ฐ ํญ๋ชฉ์ ์ฌ๊ธฐ๋ก ์ด๋ํ์๊ฒ ์ต๋๊น?",
- "fcp_confirm": "์ด {0}๊ฐ ํญ๋ชฉ์ ์ฌ๊ธฐ๋ก ๋ณต์ฌํ์๊ฒ ์ต๋๊น?",
- "fp_etab": '๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ํญ์์ ํด๋ฆฝ๋ณด๋๋ฅผ ์ฝ์ง ๋ชปํ์ต๋๋ค',
- "fp_name": "๊ธฐ๊ธฐ์์ ํ์ผ์ ์
๋ก๋ํฉ๋๋ค. ์ด๋ฆ์ ์ง์ ํ์ธ์:",
- "fp_both_m": '๋ถ์ฌ๋ฃ์ ํญ๋ชฉ ์ ํ
Enter = ยซ{1}ยป์์ ํ์ผ {0}๊ฐ ์ด๋\nESC = ๊ธฐ๊ธฐ์์ ํ์ผ {2}๊ฐ ์
๋ก๋',
- "fcp_both_m": '๋ถ์ฌ๋ฃ์ ํญ๋ชฉ ์ ํ
Enter = ยซ{1}ยป์์ ํ์ผ {0}๊ฐ ๋ณต์ฌ\nESC = ๊ธฐ๊ธฐ์์ ํ์ผ {2}๊ฐ ์
๋ก๋',
- "fp_both_b": '์ด๋์
๋ก๋',
- "fcp_both_b": '๋ณต์ฌ์
๋ก๋',
-
- "mk_noname": "์ผ์ชฝ ํ
์คํธ ํ๋์ ์ด๋ฆ์ ๋จผ์ ์
๋ ฅํด์ฃผ์ธ์ :p",
-
- "tv_load": "ํ
์คํธ ๋ฌธ์ ๋ถ๋ฌ์ค๋ ์ค:\n\n{0}\n\n{1}% ({3} MiB ์ค {2} MiB ๋ก๋๋จ)",
- "tv_xe1": "ํ
์คํธ ํ์ผ์ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค:\n\n์ค๋ฅ ",
- "tv_xe2": "404, ํ์ผ์ ์ฐพ์ ์ ์์",
- "tv_lst": "ํ
์คํธ ํ์ผ ๋ชฉ๋ก",
- "tvt_close": "ํด๋ ๋ณด๊ธฐ๋ก ๋์๊ฐ๊ธฐ$N๋จ์ถํค: M (๋๋ Esc)\">โ ๋ซ๊ธฐ",
- "tvt_dl": "์ด ํ์ผ ๋ค์ด๋ก๋$N๋จ์ถํค: Y\">๐พ ๋ค์ด๋ก๋",
- "tvt_prev": "์ด์ ๋ฌธ์ ๋ณด๊ธฐ$N๋จ์ถํค: i\">โฌ ์ด์ ",
- "tvt_next": "๋ค์ ๋ฌธ์ ๋ณด๊ธฐ$N๋จ์ถํค: K\">โฌ ๋ค์",
- "tvt_sel": "ํ์ผ ์ ํ (์๋ผ๋ด๊ธฐ/๋ณต์ฌ/์ญ์ /...์ฉ)$N๋จ์ถํค: S\">์ ํ",
- "tvt_edit": "ํ
์คํธ ํธ์ง๊ธฐ์์ ํ์ผ ์ด๊ธฐ$N๋จ์ถํค: E\">โ๏ธ ํธ์ง",
- "tvt_tail": "ํ์ผ ๋ณ๊ฒฝ ์ฌํญ ๋ชจ๋ํฐ๋ง; ์ค์๊ฐ์ผ๋ก ์ ์ค ํ์\">๐ก ํ๋ก์ฐ",
- "tvt_wrap": "์๋ ์ค ๋ฐ๊ฟ\">โต",
- "tvt_atail": "ํ์ด์ง ํ๋จ์ผ๋ก ์คํฌ๋กค ๊ณ ์ \">โ",
- "tvt_ctail": "ํฐ๋ฏธ๋ ์์ ๋์ฝ๋ฉ (ANSI ์ด์ค์ผ์ดํ ์ฝ๋)\">๐",
- "tvt_ntail": "์คํฌ๋กค๋ฐฑ ์ ํ (๋ถ๋ฌ์จ ์ํ๋ก ์ ์งํ ํ
์คํธ ๋ฐ์ดํธ ์)",
-
- "m3u_add1": "m3u ์ฌ์ ๋ชฉ๋ก์ ๊ณก์ด ์ถ๊ฐ๋์์ต๋๋ค",
- "m3u_addn": "{0}๊ฐ์ ๊ณก์ด m3u ์ฌ์ ๋ชฉ๋ก์ ์ถ๊ฐ๋์์ต๋๋ค",
- "m3u_clip": "m3u ์ฌ์ ๋ชฉ๋ก์ด ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ๋์์ต๋๋ค\n\n something.m3u์ ๊ฐ์ ์ด๋ฆ์ ์ ํ
์คํธ ํ์ผ์ ๋ง๋ค๊ณ ๊ทธ ๋ฌธ์์ ์ฌ์ ๋ชฉ๋ก์ ๋ถ์ฌ๋ฃ์ผ๋ฉด ์ฌ์ํ ์ ์์ต๋๋ค.",
-
- "gt_vau": "๋น๋์ค๋ฅผ ํ์ํ์ง ์๊ณ ์ค๋์ค๋ง ์ฌ์\">๐ง",
- "gt_msel": "ํ์ผ ์ ํ ํ์ฑํ; ctrl-ํด๋ฆญํ์ฌ ํ์ผ ์ฌ์ ์$N$N<em>ํ์ฑ ์: ํ์ผ/ํด๋๋ฅผ ๋ ๋ฒ ํด๋ฆญํ์ฌ ์ด๊ธฐ</em>$N$N๋จ์ถํค: S\">๋ค์ค์ ํ",
- "gt_crop": "์ธ๋ค์ผ ์ค์ ์๋ฅด๊ธฐ\">์๋ฅด๊ธฐ",
- "gt_3x": "๊ณ ํด์๋ ์ธ๋ค์ผ\">3x",
- "gt_zoom": "ํ๋/์ถ์",
- "gt_chop": "์๋ฅด๊ธฐ",
- "gt_sort": "์ ๋ ฌ ๊ธฐ์ค",
- "gt_name": "์ด๋ฆ",
- "gt_sz": "ํฌ๊ธฐ",
- "gt_ts": "๋ ์ง",
- "gt_ext": "์ ํ",
- "gt_c1": "ํ์ผ๋ช
๋ ๋ง์ด ์๋ตํ๊ธฐ (๋ ์ ๊ฒ ํ์)",
- "gt_c2": "ํ์ผ๋ช
๋ ์๋ตํ๊ธฐ (๋ ๋ง์ด ํ์)",
-
- "sm_w8": "๊ฒ์ ์ค...",
- "sm_prev": "์๋ ๊ฒ์ ๊ฒฐ๊ณผ๋ ์ด์ ๊ฒ์์ด์ ๋ํ ๊ฒฐ๊ณผ์
๋๋ค:\nย ",
- "sl_close": "๊ฒ์ ๊ฒฐ๊ณผ ๋ซ๊ธฐ",
- "sl_hits": "{0}๊ฐ ๊ฒฐ๊ณผ ํ์ ์ค",
- "sl_moar": "๋ ๋ถ๋ฌ์ค๊ธฐ",
-
- "s_sz": "ํฌ๊ธฐ",
- "s_dt": "๋ ์ง",
- "s_rd": "๊ฒฝ๋ก",
- "s_fn": "์ด๋ฆ",
- "s_ta": "ํ๊ทธ",
- "s_ua": "์
๋ก๋ ์์ ",
- "s_ad": "๊ณ ๊ธ",
- "s_s1": "์ต์ MiB",
- "s_s2": "์ต๋ MiB",
- "s_d1": "์ต์ ISO-8601",
- "s_d2": "์ต๋ ISO-8601",
- "s_u1": "์ดํ",
- "s_u2": "์ด์ ",
- "s_r1": "๊ฒฝ๋ก์ ํฌํจ (๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ)",
- "s_f1": "์ด๋ฆ์ ํฌํจ (-๋ก ์ ์ธ)",
- "s_t1": "ํ๊ทธ์ ํฌํจ (^=์์, ๋=$)",
- "s_a1": "ํน์ ๋ฉํ๋ฐ์ดํฐ ์์ฑ",
-
- "md_eshow": "๋ ๋๋งํ ์ ์์ ",
- "md_off": "[๐readme]๊ฐ [โ๏ธ]์์ ๋นํ์ฑํ๋จ -- ๋ฌธ์ ์จ๊น",
-
- "badreply": "์๋ฒ๋ก๋ถํฐ์ ์๋ต์ ๊ตฌ๋ฌธ ๋ถ์ํ์ง ๋ชปํ์ต๋๋ค",
-
- "xhr403": "403: ์ ๊ทผ ๊ฑฐ๋ถ๋จ\n\nF5๋ฅผ ๋๋ฌ๋ณด์ธ์, ๋ก๊ทธ์์๋์์ ์ ์์ต๋๋ค",
- "xhr0": "์ ์ ์์ (์๋ฒ์์ ์ฐ๊ฒฐ์ด ๋๊ฒผ๊ฑฐ๋ ์๋ฒ๊ฐ ์คํ๋ผ์ธ์ผ ์ ์์ต๋๋ค)",
- "cf_ok": "์ฃ์กํฉ๋๋ค -- DD" + wah + "oS ๋ณดํธ ๊ธฐ๋ฅ์ด ์๋ํ์ต๋๋ค\n\n์ฝ 30์ด ํ์ ๋ค์ ์ ์์ ์ผ๋ก ์๋ํ ๊ฒ์
๋๋ค\n\n์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์ผ๋ฉด F5๋ฅผ ๋๋ฌ ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ์ธ์",
- "tl_xe1": "ํ์ ํด๋๋ฅผ ๋์ดํ ์ ์์ต๋๋ค:\n\n์ค๋ฅ ",
- "tl_xe2": "404: ํด๋๋ฅผ ์ฐพ์ ์ ์์",
- "fl_xe1": "ํด๋์ ํ์ผ์ ๋์ดํ ์ ์์ต๋๋ค:\n\n์ค๋ฅ ",
- "fl_xe2": "404: ํด๋๋ฅผ ์ฐพ์ ์ ์์",
- "fd_xe1": "ํ์ ํด๋๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค:\n\n์ค๋ฅ ",
- "fd_xe2": "404: ์์ ํด๋๋ฅผ ์ฐพ์ ์ ์์",
- "fsm_xe1": "๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค:\n\n์ค๋ฅ ",
- "fsm_xe2": "404: ์์ ํด๋๋ฅผ ์ฐพ์ ์ ์์",
- "fu_xe1": "์๋ฒ์์ ์ฃผ์๋ด๊ธฐ ๋ชฉ๋ก์ ๋ถ๋ฌ์ค์ง ๋ชปํ์ต๋๋ค:\n\n์ค๋ฅ ",
- "fu_xe2": "404: ํ์ผ์ ์ฐพ์ ์ ์์??",
-
- "fz_tar": "์์ถ๋์ง ์์ gnu-tar ํ์ผ (linux / mac)",
- "fz_pax": "์์ถ๋์ง ์์ pax ํ์ tar (๋๋ฆผ)",
- "fz_targz": "gzip ๋ ๋ฒจ 3 ์์ถ์ด ์ ์ฉ๋ gnu-tar$N$N์ด๊ฒ์ ๋ณดํต ๋งค์ฐ ๋๋ฆฌ๋ฏ๋ก$N์์ถ๋์ง ์์ tar๋ฅผ ๋์ ์ฌ์ฉํ์ธ์",
- "fz_tarxz": "xz ๋ ๋ฒจ 1 ์์ถ์ด ์ ์ฉ๋ gnu-tar$N$N์ด๊ฒ์ ๋ณดํต ๋งค์ฐ ๋๋ฆฌ๋ฏ๋ก$N์์ถ๋์ง ์์ tar๋ฅผ ๋์ ์ฌ์ฉํ์ธ์",
- "fz_zip8": "utf8 ํ์ผ ์ด๋ฆ์ด ํฌํจ๋ zip (windows 7 ๋ฐ ์ด์ ๋ฒ์ ์์ ๋ฌธ์ ๊ฐ ์์ ์ ์์)",
- "fz_zipd": "์ ๋ง ์ค๋๋ ์ํํธ์จ์ด๋ฅผ ์ํ ์ ํต์ ์ธ cp437 ํ์ผ ์ด๋ฆ์ด ํฌํจ๋ zip",
- "fz_zipc": "MS-DOS PKZIP v2.04g (1993๋
10์)์ฉ์ผ๋ก$Ncrc32๊ฐ ๋ฏธ๋ฆฌ ๊ณ์ฐ๋ cp437$N(๋ค์ด๋ก๋ ์์ ์ ์ฒ๋ฆฌ ์๊ฐ์ด ๋ ๊ฑธ๋ฆผ)",
-
- "un_m1": "์๋์์ ์ต๊ทผ ์
๋ก๋๋ฅผ ์ญ์ ํ๊ฑฐ๋ ๋ฏธ์๋ฃ๋ ์
๋ก๋๋ฅผ ์ค๋จํ ์ ์์ต๋๋ค",
- "un_upd": "์๋ก๊ณ ์นจ",
- "un_m4": "๋๋ ์๋์ ๋ณด์ด๋ ํ์ผ์ ๊ณต์ ํ ์ ์์ต๋๋ค:",
- "un_ulist": "๋ณด๊ธฐ",
- "un_ucopy": "๋ณต์ฌ",
- "un_flt": "์ ํ์ ํํฐ: URL์ ํฌํจ๋์ด์ผ ํจ",
- "un_fclr": "ํํฐ ์ง์ฐ๊ธฐ",
- "un_derr": '์ฃผ์๋ด๊ธฐ-์ญ์ ์คํจ:\n',
- "un_f5": '๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค, ์๋ก๊ณ ์นจํ๊ฑฐ๋ F5๋ฅผ ๋๋ฌ๋ณด์ธ์',
- "un_uf5": "์ฃ์กํ์ง๋ง, ์ด ์
๋ก๋๋ฅผ ์ค๋จํ๊ธฐ ์ ์ ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํด์ผ ํฉ๋๋ค (์: F5 ๋๋ CTRL-R ๋๋ฅด๊ธฐ).",
- "un_nou": '๊ฒฝ๊ณ : ์๋ฒ๊ฐ ๋๋ฌด ๋ฐ๋น ์ ๋ฏธ์๋ฃ ์
๋ก๋๋ฅผ ํ์ํ ์ ์์ต๋๋ค; ์ ์ ํ "์๋ก๊ณ ์นจ" ๋งํฌ๋ฅผ ํด๋ฆญํ์ธ์',
- "un_noc": '๊ฒฝ๊ณ : ์์ ํ ์
๋ก๋๋ ํ์ผ์ ์ฃผ์๋ด๊ธฐ๊ฐ ์๋ฒ ๊ตฌ์ฑ์์ ํ์ฑํ/ํ์ฉ๋์ง ์์์ต๋๋ค',
- "un_max": "์ฒ์ 2000๊ฐ ํ์ผ์ ํ์ํฉ๋๋ค (ํํฐ๋ฅผ ์ฌ์ฉํ์ธ์)",
- "un_avail": "{0}๊ฐ์ ์ต๊ทผ ์
๋ก๋๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค
{1}๊ฐ์ ๋ฏธ์๋ฃ ์
๋ก๋๋ฅผ ์ค๋จํ ์ ์์ต๋๋ค",
- "un_m2": "์
๋ก๋ ์๊ฐ์์ผ๋ก ์ ๋ ฌ๋จ. ๊ฐ์ฅ ์ต๊ทผ ํญ๋ชฉ์ด ๋จผ์ ํ์:",
- "un_no1": "์์ฝ๋ค! ์ถฉ๋ถํ ์ต๊ทผ์ธ ์
๋ก๋๊ฐ ์์ต๋๋ค.",
- "un_no2": "์์ฝ๋ค! ํด๋น ํํฐ์ ์ผ์นํ๋ ์ต๊ทผ ์
๋ก๋๊ฐ ์์ต๋๋ค.",
- "un_next": "์๋์ ๋ค์ {0}๊ฐ ํ์ผ ์ญ์ ",
- "un_abrt": "์ค๋จ",
- "un_del": "์ญ์ ",
- "un_m3": "์ต๊ทผ ์
๋ก๋ ๋ก๋ ์ค...",
- "un_busy": "{0}๊ฐ ํ์ผ ์ญ์ ์ค...",
- "un_clip": "{0}๊ฐ์ ๋งํฌ๊ฐ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ๋์์ต๋๋ค",
-
- "u_https1": "๋ ๋์ ์ฑ๋ฅ์ ์ํด",
- "u_https2": "https๋ก ์ ํ",
- "u_https3": "ํ๋ ๊ฒ์ด ์ข์ต๋๋ค",
- "u_ancient": '๋ธ๋ผ์ฐ์ ๊ฐ ์ ๋ง ์ค๋๋์๋ค์ -- ์๋ง๋ bup์ ๋์ ์ฌ์ฉํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค',
- "u_nowork": "Firefox 53+, Chrome 57+ ๋๋ iOS 11+๊ฐ ํ์ํฉ๋๋ค",
- "tail_2old": "Firefox 105+, Chrome 71+ ๋๋ iOS 14.5+๊ฐ ํ์ํฉ๋๋ค",
- "u_nodrop": '๋ธ๋ผ์ฐ์ ๊ฐ ๋๋ฌด ์ค๋๋์ด ๋๋๊ทธ ์ค ๋๋กญ ์
๋ก๋๋ฅผ ์ง์ํ์ง ์์ต๋๋ค',
- "u_notdir": 'ํด๋๊ฐ ์๋๋๋ค!\n\n๋ธ๋ผ์ฐ์ ๊ฐ ๋๋ฌด ์ค๋๋์์ต๋๋ค,\n๋์ ๋๋๊ทธ๋๋กญ์ ์๋ํด๋ณด์ธ์',
- "u_uri": '๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์ฐฝ์์ ์ด๋ฏธ์ง๋ฅผ ๋๋๊ทธ๋๋กญํ๋ ค๋ฉด,\nํฐ ์
๋ก๋ ๋ฒํผ ์๋ก ๋จ์ด๋จ๋ ค์ฃผ์ธ์',
- "u_enpot": '๋จ์ UI๋ก ์ ํ (์
๋ก๋ ์๋๊ฐ ํฅ์๋ ์ ์์)',
- "u_depot": 'ํ๋ คํ UI๋ก ์ ํ (์
๋ก๋ ์๋๊ฐ ๊ฐ์ํ ์ ์์)',
- "u_gotpot": '์
๋ก๋ ์๋ ํฅ์์ ์ํด ๋จ์ UI๋ก ์ ํํฉ๋๋ค,\n\n์ธ์ ๋ ์ง ๋ค์ ์ ํํ์
๋ ์ข์ต๋๋ค!',
- "u_pott": "ํ์ผ: {0} ์๋ฃ, {1} ์คํจ, {2} ์ฒ๋ฆฌ ์ค, {3} ๋๊ธฐ ์ค
",
- "u_ever": "์ด๊ฒ์ ๊ธฐ๋ณธ ์
๋ก๋์
๋๋ค. up2k๋ ์ต์ํ ๋ค์ ๋ฒ์ ์ด ํ์ํฉ๋๋ค:
Chrome 21 // Firefox 13 // Edge 12 // Opera 12 // Safari 5.1",
- "u_su2k": '์ด๊ฒ์ ๊ธฐ๋ณธ ์
๋ก๋์
๋๋ค. up2k๊ฐ ๋ ์ข์ต๋๋ค',
- "u_uput": '์๋ ์ต์ ํ (์ฒดํฌ์ฌ ๊ฑด๋๋ฐ๊ธฐ)',
- "u_ewrite": '์ด ํด๋์ ์ฐ๊ธฐ ๊ถํ์ด ์์ต๋๋ค',
- "u_eread": '์ด ํด๋์ ์ฝ๊ธฐ ๊ถํ์ด ์์ต๋๋ค',
- "u_enoi": 'ํ์ผ ๊ฒ์์ด ์๋ฒ ๊ตฌ์ฑ์์ ํ์ฑํ๋์ง ์์์ต๋๋ค',
- "u_enoow": '์ฌ๊ธฐ์๋ ๋ฎ์ด์ฐ๊ธฐ๊ฐ ์๋ํ์ง ์์ต๋๋ค. ์ญ์ ๊ถํ์ด ํ์ํฉ๋๋ค',
- "u_badf": '์ด {1}๊ฐ ์ค ๋ค์ {0}๊ฐ์ ํ์ผ์ ํ์ผ ์์คํ
๊ถํ ๋ฌธ์ ๋ฑ์ผ๋ก ๊ฑด๋๋ฐ์์ต๋๋ค:\n\n',
- "u_blankf": '์ด {1}๊ฐ ์ค ๋ค์ {0}๊ฐ์ ํ์ผ์ ๋น์ด์์ต๋๋ค. ๊ทธ๋๋ ์
๋ก๋ํ์๊ฒ ์ต๋๊น?\n\n',
- "u_applef": '์ด {1}๊ฐ ์ค ๋ค์ {0}๊ฐ์ ํ์ผ์ ์๋ง๋ ๋ถํ์ํ ํ์ผ์ผ ๊ฒ์
๋๋ค.\n๋ค์ ํ์ผ์ ๊ฑด๋๋ฐ๋ ค๋ฉด ํ์ธ/Enter๋ฅผ ๋๋ฅด์ธ์,\nํด๋น ํ์ผ๋ ์
๋ก๋ํ๋ ค๋ฉด ์ทจ์/ESC๋ฅผ ๋๋ฅด์ธ์:\n\n',
- "u_just1": '\nํ์ผ์ ํ๋๋ง ์ ํํ๋ฉด ๋ ์ ์๋ํ ์ ์์ต๋๋ค',
- "u_ff_many": '๋ฆฌ๋
์ค/macOS/์๋๋ก์ด๋๋ฅผ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด, ์ด ์ ๋์ ํ์ผ ์๋ Firefox๋ฅผ ์ถฉ๋์ํฌ ์ ์์ต๋๋ค!\n๋ง์ฝ ๊ทธ๋ฐ ์ผ์ด ๋ฐ์ํ๋ฉด ๋ค์ ์๋ํ๊ฑฐ๋ Chrome์ ์ฌ์ฉํด์ฃผ์ธ์.',
- "u_up_life": '์ด ์
๋ก๋๋ ์๋ฃ ํ {0} ๋ค์\n์๋ฒ์์ ์ญ์ ๋ฉ๋๋ค',
- "u_asku": '์ด {0}๊ฐ์ ํ์ผ์ {1}(์ผ)๋ก ์
๋ก๋ํ์๊ฒ ์ต๋๊น?',
- "u_unpt": '์ผ์ชฝ ์๋จ์ ๐งฏ๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์
๋ก๋๋ฅผ ์ทจ์/์ญ์ ํ ์ ์์ต๋๋ค',
- "u_bigtab": '{0}๊ฐ์ ํ์ผ์ ํ์ํ๋ ค๊ณ ํฉ๋๋ค\n\n๋ธ๋ผ์ฐ์ ๊ฐ ์ถฉ๋ํ ์ ์์ต๋๋ค, ๊ณ์ ์งํํฉ๋๊น?',
- "u_scan": 'ํ์ผ ์ค์บ ์ค...',
- "u_dirstuck": '๋๋ ํฐ๋ฆฌ ๋ฐ๋ณต์๊ฐ ๋ค์ {0}๊ฐ ํญ๋ชฉ์ ์ ๊ทผํ๋ ๋ฐ ์คํจํ์ฌ ๊ฑด๋๋๋๋ค:',
- "u_etadone": '์๋ฃ ({0}, {1}๊ฐ ํ์ผ)',
- "u_etaprep": '(์
๋ก๋ ์ค๋น ์ค)',
- "u_hashdone": 'ํด์ฑ ์๋ฃ',
- "u_hashing": 'ํด์',
- "u_hs": 'ํธ๋์
ฐ์ดํน ์ค...',
- "u_started": 'ํ์ผ์ด ํ์ฌ ์
๋ก๋ ์ค์
๋๋ค. [๐] ์ฐธ์กฐ',
- "u_dupdefer": '์ค๋ณต๋จ. ๋ค๋ฅธ ๋ชจ๋ ํ์ผ ์ฒ๋ฆฌ ํ ์ฒ๋ฆฌ๋ฉ๋๋ค',
- "u_actx": "๋ค๋ฅธ ์ฐฝ/ํญ์ผ๋ก ์ ํ ์ ์ฑ๋ฅ ์ ํ๋ฅผ
๋ฐฉ์งํ๋ ค๋ฉด ์ด ํ
์คํธ๋ฅผ ํด๋ฆญํ์ธ์",
- "u_fixed": "OK! ํด๊ฒฐ๋์ต๋๋ค ๐",
- "u_cuerr": "{1} ์ค ์ฒญํฌ {0} ์
๋ก๋ ์คํจ;\n์๋ง ๋ฌธ์ ์์ ๊ฒ๋๋ค. ๊ณ์ ์งํํฉ๋๋ค\n\nํ์ผ: {2}",
- "u_cuerr2": "์๋ฒ๊ฐ ์
๋ก๋๋ฅผ ๊ฑฐ๋ถํ์ต๋๋ค (์ฒญํฌ {0}/{1});\n๋์ค์ ๋ค์ ์๋ํฉ๋๋ค\n\nํ์ผ: {2}\n\n์ค๋ฅ ",
- "u_ehstmp": "๋ค์ ์๋ํฉ๋๋ค; ์ค๋ฅธ์ชฝ ํ๋จ ์ฐธ์กฐ",
- "u_ehsfin": "์๋ฒ๊ฐ ์
๋ก๋ ์๋ฃ ์์ฒญ์ ๊ฑฐ๋ถํ์ต๋๋ค. ์ฌ์๋ ์ค...",
- "u_ehssrch": "์๋ฒ๊ฐ ๊ฒ์ ์ํ ์์ฒญ์ ๊ฑฐ๋ถํ์ต๋๋ค. ์ฌ์๋ ์ค...",
- "u_ehsinit": "์๋ฒ๊ฐ ์
๋ก๋ ์์ ์์ฒญ์ ๊ฑฐ๋ถํ์ต๋๋ค. ์ฌ์๋ ์ค...",
- "u_eneths": "์
๋ก๋ ํธ๋์
ฐ์ดํฌ ์ค ๋คํธ์ํฌ ์ค๋ฅ ๋ฐ์. ์ฌ์๋ ์ค...",
- "u_enethd": "๋์ ์กด์ฌ ์ฌ๋ถ ํ
์คํธ ์ค ๋คํธ์ํฌ ์ค๋ฅ ๋ฐ์; ์ฌ์๋ ์ค...",
- "u_cbusy": '๋คํธ์ํฌ ๋ฌธ์ ํ ์๋ฒ๊ฐ ๋ค์ ์ฐ๋ฆฌ๋ฅผ ์ ๋ขฐํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ์ค...',
- "u_ehsdf": '์๋ฒ ๋์คํฌ ๊ณต๊ฐ์ด ๋ถ์กฑํฉ๋๋ค!\n\n๋๊ตฐ๊ฐ ๊ณ์ํ ์ ์์ ๋งํผ์ ๊ณต๊ฐ์\n๋น์์ค ๊ฒฝ์ฐ๋ฅผ ๋๋นํด ๊ณ์ ์ฌ์๋ํฉ๋๋ค',
- "u_emtleak1": "์น ๋ธ๋ผ์ฐ์ ์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.\n",
- "u_emtleak2": ' https๋ก ์ ํ (๊ถ์ฅ)ํ๊ฑฐ๋ ',
- "u_emtleak3": ' ',
- "u_emtleakc": '๋ค์์ ์๋ํด๋ณด์ธ์:\nF5๋ฅผ ๋๋ฌ ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ์ธ์- ๊ทธ๋ฐ ๋ค์
โ๏ธ ์ค์ ์์ mt ๋ฒํผ์ ๋นํ์ฑํํ์ธ์ - ๊ทธ๋ฆฌ๊ณ ๋ค์ ๊ทธ ์
๋ก๋๋ฅผ ์๋ํด๋ณด์ธ์
์
๋ก๋๊ฐ ์กฐ๊ธ ๋๋ ค์ง๊ฒ ์ง๋ง, ์ด์ฉ ์ ์์ฃ .\n๋ถํธ์ ๋๋ ค ์ฃ์กํฉ๋๋ค!\n\nPS: ์ด ๋ฒ๊ทธ๋ Chrome v107์์ ์์ ๋์์ต๋๋ค.',
- "u_emtleakf": '๋ค์์ ์๋ํด๋ณด์ธ์:\nF5๋ฅผ ๋๋ฌ ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ์ธ์- ๊ทธ๋ฐ ๋ค์ ์
๋ก๋ UI์์
๐ฅ(๋จ์ UI)๋ฅผ ํ์ฑํํ์ธ์ - ๊ทธ๋ฆฌ๊ณ ๋ค์ ๊ทธ ์
๋ก๋๋ฅผ ์๋ํด๋ณด์ธ์
\nPS: Firefox์์ ์ธ์ ๊ฐ ์ด ๋ฒ๊ทธ๊ฐ ์์ ๋ ๊ฑฐ๋ผ ๋ฏฟ์ต๋๋ค.',
- "u_s404": '์๋ฒ์์ ์ฐพ์ ์ ์์',
- "u_expl": '์ค๋ช
',
- "u_maxconn": "๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฅผ 6์ผ๋ก ์ ํํ์ง๋ง, Firefox์์๋ about:config์์ connections-per-server ์ค์ ๊ฐ์ผ๋ก ๋์ผ ์ ์์ต๋๋ค.",
- "u_tu": '๊ฒฝ๊ณ : ํฐ๋ณด๊ฐ ํ์ฑํ๋์ด ํด๋ผ์ด์ธํธ๊ฐ ๋ถ์์ ํ ์
๋ก๋๋ฅผ ๊ฐ์งํ๊ณ ์ฌ๊ฐํ์ง ๋ชปํ ์ ์์ต๋๋ค. ํฐ๋ณด ๋ฒํผ์ ํดํ์ ์ฐธ์กฐํ์ธ์
',
- "u_ts": '๊ฒฝ๊ณ : ํฐ๋ณด๊ฐ ํ์ฑํ๋์ด ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ๋ถ์ ํํ ์ ์์ต๋๋ค. ํฐ๋ณด ๋ฒํผ์ ํดํ์ ์ฐธ์กฐํ์ธ์
',
- "u_turbo_c": "ํฐ๋ณด๊ฐ ์๋ฒ ๊ตฌ์ฑ์์ ๋นํ์ฑํ๋์์ต๋๋ค",
- "u_turbo_g": '์ด ๋ณผ๋ฅจ ๋ด์์ ๋๋ ํฐ๋ฆฌ ๋ชฉ๋ก ๊ถํ์ด ์์ผ๋ฏ๋ก\nํฐ๋ณด๋ฅผ ๋นํ์ฑํํฉ๋๋ค',
- "u_life_cfg": '์๋ ์ญ์ ์๊ฐ ๋ถ (๋๋ ์๊ฐ)',
- "u_life_est": '์
๋ก๋๊ฐ ---์ ์ญ์ ๋ฉ๋๋ค',
- "u_life_max": '์ด ํด๋๋ ์ต๋ ์๋ช
์\n{0}(์ผ)๋ก ๊ฐ์ ํฉ๋๋ค',
- "u_unp_ok": '์ฃผ์๋ด๊ธฐ๋ {0} ๋์ ํ์ฉ๋ฉ๋๋ค',
- "u_unp_ng": '์ฃผ์๋ด๊ธฐ๋ ํ์ฉ๋์ง ์์ต๋๋ค',
- "ue_ro": '์ด ํด๋์ ๋ํ ์ ๊ทผ์ ์ฝ๊ธฐ ์ ์ฉ์
๋๋ค\n\n',
- "ue_nl": 'ํ์ฌ ๋ก๊ทธ์ธ๋์ด ์์ง ์์ต๋๋ค',
- "ue_la": 'ํ์ฌ \'{0}\'(์ผ)๋ก ๋ก๊ทธ์ธ๋์ด ์์ต๋๋ค',
- "ue_sr": 'ํ์ฌ ํ์ผ ๊ฒ์ ๋ชจ๋์
๋๋ค\n\nํฐ "๊ฒ์" ๋ฒํผ ์์ ๋๋ณด๊ธฐ ๐๋ฅผ ํด๋ฆญํ์ฌ ์
๋ก๋ ๋ชจ๋๋ก ์ ํํ ํ ๋ค์ ์
๋ก๋ํด๋ณด์ธ์\n\n์ฃ์กํฉ๋๋ค',
- "ue_ta": '๋ค์ ์
๋ก๋ํด๋ณด์ธ์, ์ด์ ์๋ํ ๊ฒ๋๋ค',
- "ue_ab": '์ด ํ์ผ์ ์ด๋ฏธ ๋ค๋ฅธ ํด๋๋ก ์
๋ก๋ ์ค์ด๋ฉฐ, ํ์ผ์ด ๋ค๋ฅธ ๊ณณ์ ์
๋ก๋๋๊ธฐ ์ ์ ํด๋น ์
๋ก๋๊ฐ ์๋ฃ๋์ด์ผ ํฉ๋๋ค.\n\n์ผ์ชฝ ์๋จ์ ๐งฏ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊ธฐ ์
๋ก๋๋ฅผ ์ค๋จํ๊ณ ์์ ์ ์์ต๋๋ค.',
- "ur_1uo": "OK: ํ์ผ์ด ์ฑ๊ณต์ ์ผ๋ก ์
๋ก๋๋์์ต๋๋ค",
- "ur_auo": "OK: ๋ชจ๋ {0}๊ฐ์ ํ์ผ์ด ์ฑ๊ณต์ ์ผ๋ก ์
๋ก๋๋์์ต๋๋ค",
- "ur_1so": "OK: ์๋ฒ์์ ํ์ผ์ ์ฐพ์์ต๋๋ค",
- "ur_aso": "OK: ์๋ฒ์์ ๋ชจ๋ {0}๊ฐ์ ํ์ผ์ ์ฐพ์์ต๋๋ค",
- "ur_1un": "์
๋ก๋์ ์คํจํ์ต๋๋ค, ์ฃ์ก",
- "ur_aun": "๋ชจ๋ {0}๊ฐ์ ์
๋ก๋์ ์คํจํ์ต๋๋ค, ์ฃ์ก",
- "ur_1sn": "์๋ฒ์์ ํ์ผ์ ์ฐพ์ง ๋ชปํ์ต๋๋ค",
- "ur_asn": "์๋ฒ์์ {0}๊ฐ์ ํ์ผ์ ์ฐพ์ง ๋ชปํ์ต๋๋ค",
- "ur_um": "์๋ฃ;\n{0}๊ฐ ์
๋ก๋ ์ฑ๊ณต,\n{1}๊ฐ ์
๋ก๋ ์คํจ, ์ฃ์ก",
- "ur_sm": "์๋ฃ;\n์๋ฒ์์ {0}๊ฐ ํ์ผ ์ฐพ์,\n์๋ฒ์์ {1}๊ฐ ํ์ผ ์ฐพ์ง ๋ชปํจ",
-
- "lang_set": '๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๊ธฐ ์ํด ์๋ก๊ณ ์นจํ์๊ฒ ์ต๋๊น?'
- },
- "nld": {
- "tt": "Nederlands",
-
- "cols": {
- "c": "Action knoppen",
- "dur": "Duratie",
- "q": "Kwaliteit / bitrate",
- "Ac": "Audio codec",
- "Vc": "Video codec",
- "Fmt": "Formaat / container",
- "Ahash": "Audio checksum",
- "Vhash": "Video checksum",
- "Res": "Resolution",
- "T": "Bestandstype",
- "aq": "Audio kwaliteit / bitrate",
- "vq": "Video kwaliteit / bitrate",
- "pixfmt": "Subsampling / pixel structure",
- "resw": "Horizontale resolutie",
- "resh": "Verticale resolutie",
- "chs": "Audiokanalen",
- "hz": "Samplefrequentie"
- },
-
- "hks": [
- [
- "diversen",
- ["ESC", "Sluit verschillende dingen"],
-
- "bestand beheer",
- ["G", "Verwissel tussen list / grid weergave"],
- ["T", "Verwissel tussen miniaturen / iconen"],
- ["โง A/D", "Thumbnail formaat"],
- ["ctrl-K", "Verwijder geselecteerde"],
- ["ctrl-X", "Knip selectie naar klembord"],
- ["ctrl-C", "Kopieer selectie naar klembord"],
- ["ctrl-V", "Hier plakken (verplaatsen/kopieรซren)"],
- ["Y", "Download geselecteerde"],
- ["F2", "Hernoem geselecteerde"],
-
- "bestand-lijst-selectie",
- ["space", "wissel bestand selectie"],
- ["โ/โ", "verplaats selectie cursor"],
- ["ctrl โ/โ", "verplaats cursor en scherm"],
- ["โง โ/โ", "select vorige/volgende bestand"],
- ["ctrl-A", "selecteer alle bestanden / mappen"],
- ], [
- "navigatie",
- ["B", "verwissel breadcrumbs / navpane"],
- ["I/K", "Vorige/volgende map"],
- ["M", "Bovenliggende map (of huidige uitvouwen)"],
- ["V", "Berwissel map / tekstbestand in navpane"],
- ["A/D", "Navpane formaat"],
- ], [
- "muziek-speler",
- ["J/L", "Vorige/volgende song"],
- ["U/O", "Skip 10sec terug/vooruit"],
- ["0..9", "Spring naar 0%..90%"],
- ["P", "Speel/pauzeer (start ook)"],
- ["S", "Selecteer afspelende song"],
- ["Y", "Download song"],
- ], [
- "afbeelding viewer",
- ["J/L, โ/โ", "Vorige/volgende afbeelding"],
- ["Home/End", "Eerste/laatste afbeelding"],
- ["F", "Volledig scherm"],
- ["R", "Draai rechtsom"],
- ["โง R", "Draai linksom"],
- ["S", "Selecteer afbeelding"],
- ["Y", "Download afbeelding"],
- ], [
- "video-speler",
- ["U/O", "Skip 10sec terug/vooruit"],
- ["P/K/Space", "Speel/pauze"],
- ["C", "Verder met volgende"],
- ["V", "herhaal"],
- ["M", "stil"],
- ["[ and ]", "zet herhaal interval"],
- ], [
- "tekstbestand-viewer",
- ["I/K", "vorige/volgende bestand"],
- ["M", "sluit tekst bestand"],
- ["E", "bewerk tekst bestand"],
- ["S", "selecteer bestand (voor knip/kopie/hernoem)"],
- ]
- ],
-
- "m_ok": "OK",
- "m_ng": "Annuleren",
-
- "enable": "Inschakelen",
- "danger": "GEVAARLIJK",
- "clipped": "Gekopieรซrd naar klembord",
-
- "ht_s1": "seconde",
- "ht_s2": "secondes",
- "ht_m1": "minuut",
- "ht_m2": "minuten",
- "ht_h1": "uur",
- "ht_h2": "uur",
- "ht_d1": "dag",
- "ht_d2": "dagen",
- "ht_and": " en ",
-
- "goh": "Beheer-paneel",
- "gop": 'Vorige map">Vorige',
- "gou": 'Bovenligende map">Omhoog',
- "gon": 'Volgende map">Volgende',
- "logout": "Uitloggen ",
- "login": "Inloggen", //m
- "access": " Toegang",
- "ot_close": "Sluit onder-menu",
- "ot_search": "Zoek voor bestanden bij attributes, pad / naam, muziek tags, of elk andere combinatie tussen$N$N<code>foo bar</code> = moet beide ยซfooยป en ยซbarยป bevatten,$N<code>foo -bar</code> = moet ยซfooยป bevatten maar geen ยซbarยป,$N<code>^yana .opus$</code> = start met ยซyanaยป en moet een ยซopusยป bestand zijn$N<code>"try unite"</code> = moet precies ยซtry uniteยป bevatten$N$Nde datum formaat is iso-8601, zoals$N<code>2009-12-31</code> of <code>2020-09-12 23:30:00</code>",
- "ot_unpost": "unpost: verwijder je recente uploads, of onvoltooide uploads afbreken",
- "ot_bup": "bup: Basisuploader, supports zelfs netscape 4.0",
- "ot_mkdir": "mkdir: Maak een nieuwe map",
- "ot_md": "new-md: Maak een nieuwe markdown bestand",
- "ot_msg": "msg: Verstuur een bericht naar de server logs",
- "ot_mp": "Media speler opties",
- "ot_cfg": "Configuratie opties",
- "ot_u2i": 'up2k: upload bestanden (als je schrijf toegang hebt) of verwissel naar zoek-mode om te zien of ze ergens bestaan op de server$N$Nuploads zijn hervatbaar, multithreaded, en bestandstijdstempels blijven behouden, maar het gebruikt meer CPU dan [๐] (de basic uploader)
tijdens het uploaden, dit icoon word dan een progress indicatie!',
- "ot_u2w": 'up2k: upload bestanden met hervattings ondersteuning (sluit je webbrowser en selecteer dezelfde bestand later opnieuw)$N$Nmultithreaded, en bestandstijdstempels blijven behouden, maar het gebruikt meer CPU dan [๐] (de basic uploader)
tijdens het uploaden, dit icoon word dan een progress indicatie!',
- "ot_noie": 'Gebruik alstublieft Chrome / Firefox / Edge',
-
- "ab_mkdir": "maak map",
- "ab_mkdoc": "nieuw markdown doc",
- "ab_msg": "verstuur msg naar srv log",
-
- "ay_path": "skip naar mappen",
- "ay_files": "skip naar bestanden",
-
- "wt_ren": "Hernoem geselecteerde items$NHotkey: F2",
- "wt_del": "Berwijder geselecteerde items$NHotkey: ctrl-K",
- "wt_cut": "Knip geselecteerde items <small>(en plak het ergens anders)</small>$NHotkey: ctrl-X",
- "wt_cpy": "Kopieer geselecteerde items naar klembord$N(om te plakken ergens anders)$NHotkey: ctrl-C",
- "wt_pst": "Plak eeen laatst geknipte / gekopieรซrde selectie$NHotkey: ctrl-V",
- "wt_selall": "Selecteer alle bestanden$NHotkey: ctrl-A (wanneer bestand gefocused is)",
- "wt_selinv": "Selectie omkeren",
- "wt_zip1": "Download deze map als archief",
- "wt_selzip": "Download selectie als archief",
- "wt_seldl": "Download selectie als losse bestanden$NHotkey: Y",
- "wt_npirc": "Kopieer irc-geformarteerde track info",
- "wt_nptxt": "Kopieer platte tekst track info",
- "wt_m3ua": "Aan m3u afspeellijst toevoegen (klik ๐ปkopieer later)",
- "wt_m3uc": "Kopieer m3u playlist naar klembord",
- "wt_grid": "Verwissel grid / lijst weergave$NHotkey: G",
- "wt_prev": "Vorig nummer$NHotkey: J",
- "wt_play": "Afspelen / pauzeer$NHotkey: P",
- "wt_next": "Volgend nummer$NHotkey: L",
-
- "ul_par": "Parallel uploads:",
- "ut_rand": "Willekeurige bestandsnaam",
- "ut_u2ts": "Kopieer de laatste-gewijzigde tijdstamp$Nvan je bestandsysteem naar de server\">๐
",
- "ut_ow": "Overschrijf bestaande bestanden op de server?$N๐ก๏ธ: nooit (zal in plaats daarvan een nieuwe bestandsnaam genereren)$N๐: overschrijven als de server-bestand ouder is dan het geรผploade bestand$Nโป๏ธ: altijd overschrijven als de bestanden verschillend zijn",
- "ut_mt": "Ga door met hashen van andere bestanden tijdens het uploaden$N$Moet je misschien uitschakelen als je CPU of HDD het niet aan kan",
- "ut_ask": 'Vraag voor bevestiging voordat het uploaden start">๐ญ',
- "ut_pot": "Verbeter de uploadsnelheid voor langzame apparaten$Ndoor de interface minder complex te maken",
- "ut_srch": "Niet uploaden, maar check of de bestanden als op de server bestaan$N (checkt alle mappen die waar jij toegang op hebt)",
- "ut_par": "Pauzeer bij zetten het op 0$N$Nverhoog als je verbinding traag is$N$Nhou het op 1 als je netwerk of server HDD het niet aankan",
- "ul_btn": "Drop bestanden / mappen
hier (of klik mij)",
- "ul_btnu": "U P L O A D",
- "ul_btns": "Z O E K E N",
-
- "ul_hash": "Hashing",
- "ul_send": "Versturen",
- "ul_done": "Klaar",
- "ul_idle1": "Geen uploads in wachtrij",
- "ut_etah": "Gemiddelde <em>hashing</em> snelheid en geschatte tijd tot de voltooiing",
- "ut_etau": "Gemiddelde <em>verzend</em> snelheid en geschatte tijd tot voltooiing",
- "ut_etat": "Gemiddelde <em>totale</em> snelheid en geschatte tijd tot voltooiing",
-
- "uct_ok": "Succesvol afgerond",
- "uct_ng": "Niet goed: gefaald / geweigerd / niet gevonden",
- "uct_done": "ok en ng gecombineerd",
- "uct_bz": "Hashing van uploads",
- "uct_q": "Inactief, in afwachting",
-
- "utl_name": "Bestandsnaam",
- "utl_ulist": "Lijst",
- "utl_ucopy": "Kopieer",
- "utl_links": "Links",
- "utl_stat": "Status",
- "utl_prog": "Vooruitgang",
-
- // keep short:
- "utl_404": "404",
- "utl_err": "FOUT",
- "utl_oserr": "OS-FOUT",
- "utl_found": "gevonden",
- "utl_defer": "Uitgesteld",
- "utl_yolo": "YOLO",
- "utl_done": "klaar",
-
- "ul_flagblk": "De bestanden zijn toegevoegd aan de wachtrij
maar er is een drukke up2k bezig in een andere tabblad,
wachten totdat die eerst klaar is",
- "ul_btnlk": "De server configuratie heeft deze schakelaar versleuteld in deze staat",
-
- "udt_up": "Upload",
- "udt_srch": "Zoeken",
- "udt_drop": "Laat hier los",
-
- "u_nav_m": 'Hey, wat heb jij daar?
Enter = Bestanden (een of meer)\nESC = Een map (inclusief submappen)',
- "u_nav_b": 'BestandenEen map',
-
- "cl_opts": "Switches",
- "cl_themes": "Thema",
- "cl_langs": "Taal",
- "cl_ziptype": "Download map als",
- "cl_uopts": "up2k switches",
- "cl_favico": "Favicon",
- "cl_bigdir": "Item limiet in map",
- "cl_hsort": "#sorteer",
- "cl_keytype": "Key notaties",
- "cl_hiddenc": "Verborgen kolomen",
- "cl_hidec": "Verborgen",
- "cl_reset": "Reset",
- "cl_hpick": "Tik op de kolomkoppen om ze in de onderstaande tabel te verbergen",
- "cl_hcancel": "Kolumn verbergen geannuleerd",
-
- "ct_grid": '็ฐ grid',
- "ct_ttips": 'โ โก โ">โน๏ธ tooltips',
- "ct_thumb": 'In grid-overzicht, wissel tussen iconen of thumbnails$NHotkey: T">๐ผ๏ธ thumbs',
- "ct_csel": 'Gebruik CTRL en SHIFT voor de bestand selectie in grid-overzicht>sel',
- "ct_ihop": 'Als je afbeeldingviewer afsluit, scroll omlaag naar de laatst bekeken bestand">gโฎฏ',
- "ct_dots": 'Laat verborgen bestanden zien (als de server dat toestaat)">dotfiles',
- "ct_qdel": 'Waneeer je een bestand verwijderd, vraag eenmalig om bevestiging">qdel',
- "ct_dir1st": 'Sorteer mappen eerst en dan de bestanden">๐ first',
- "ct_nsort": 'Natural sort (voor bestandsnamen dat beginnen met getallen)">nsort',
- "ct_readme": 'Laat README.md in mappen lijst zien">๐ readme',
- "ct_utc": 'Toon alle datums en tijden in UTC">UTC',
- "ct_idxh": 'Laat index.html zien in plaats van de map overzicht">htm',
- "ct_sbars": 'Laat scrollbars zien">โ',
-
- "cut_umod": "Als een bestand al bestaat op de server, update de 'gewijzigd' waarde op het bestand wat op de server staat met het bestand wat je geupload hebt (vereist schrijf+verwijder rechten)\">re๐
",
-
- "cut_turbo": "De yolo knop, die wil jij waarschijnlijk NIET actief wilt hebben:$N$Ngebruik dit als je heel veel bestanden gaat uploaden EN je moest het herstarten voor een reden en je wilt doorgaan met uploaden ASAP$N$Ndit vervangt de hash-check met een simpele "heeft dit dezelfde bestands groote op de server?", zo als de bestands inhoud verschillend is, dan worden ze NIET geupload$N$NJe zou deze optie weer uit moeten zetten als de upload klaar is en dan "upload" de zelfde bestanden opnieuw uploaden zo de client het kan verifieren\">turbo",
-
- "cut_datechk": "Heeft geen effect tenzij de turbo knop actief is$N$Nverminder de yolo factor (een klein beetje); controlleert of de bestand tijdstamp op de server hetzelfde is met het geuploade bestand$N$Ndit zou in theorie de meest onvoltooide/onvoledige uploads, maar dit is geen vervaning voor de verificatie-check met de turbo knop uitgeschakeld daarna\">date-chk",
-
- "cut_u2sz": "Grote (in MiB) voor elk geuploade stuk; grote waardes vliegen beter over de Atlantische Oceaan. Probeer lage waardes op zeer onstabiele verbindingen",
-
- "cut_flag": "Alleen een tabblad kan bestanden uploaden $N -- andere tabbladen moeten deze optie ook actief hebben $N -- dit heeft alleen effect op de tabbladen die op hetzelfde domain zijn",
-
- "cut_az": "Bestanden uploaden in alfabetische volgorde, in plaats van kleinste bestanden eerst$N$Nalfabetische volgorde kan het makkelijker maken om te zien of er wat fout is gegaan op de server, dit maakt het uploaden ietsjes trager op fiber / LAN",
-
- "cut_nag": "Systeem notificatie weergeven als een upload voltooid is$N(alleen als de browser of tabblad niet actief is)",
- "cut_sfx": "Geluid waarschuwing afspelen als een upload voltooid is$N(alleen als de browser of tabblad niet actief is)",
-
- "cut_mt": "Gebruik multithreading om bestands-hashing te versnellen$N$Ndit gebruikt web-workers en vereist$Nmeer geheugen (tot wel 512 MiB extra)$N$Nmaakt https 30% sneller en http 4.5x sneller\">mt",
-
- "cut_wasm": "Gebruik wasm in plaats van de webbrowser ingebouwde hasher; verbetert de snelheid op chrome-gebaseerde webbrowsers maar verhoogd CPU gebruik, veel oude versie van chrome hebben een bug dat een geheugen lek heeft, dat kan alle geheugen in gebruik nemen en crashen als dit actief is\">wasm",
-
- "cft_text": "Favicon tekst (laat leeg en vernieuw om uit te schakelen)",
- "cft_fg": "Voorgrondkleur",
- "cft_bg": "Achtergrondkleur",
-
- "cdt_lim": "Max aantal bestanden laten zien in een map",
- "cdt_ask": "Als helemaal naar beneden gescrolld bent,$Nin plaats van meer inladen,$Nvraag wat het moet doen",
- "cdt_hsort": "Hoeveel sorteerregels (<code>,sorthref</code>) moeten er in media-URL's worden opgenomen? Als je dit op 0 instelt, worden de sorteerregels in medialinks ook genegeerd wanneer erop geklikt word.",
-
- "tt_entree": "Laat navpane zien (directoryboom zijbalk)$NHotkey: B",
- "tt_detree": "Laat breadcrumbs zien$NHotkey: B",
- "tt_visdir": "Scroll naar geselecteerde map",
- "tt_ftree": "Verwissel tussen directoryboom / tekst bestanden$NHotkey: V",
- "tt_pdock": "Laat bovenliggende mappen zien in een vastgezet deelvenster bovenaan",
- "tt_dynt": "Automatisch groeien naarmate de directoryboom zich uitbreidt",
- "tt_wrap": "Automatische terugloop",
- "tt_hover": "Laat overlopenden lijnen zien bij zweven$N(stopt het scrollen tenzij de muis in de linker gedeelte van het scherm is)",
-
- "ml_pmode": "Aan het einde van de map...",
- "ml_btns": "Cmds",
- "ml_tcode": "Transcode",
- "ml_tcode2": "Transcode naar",
- "ml_tint": "Tint",
- "ml_eq": "Audio-equalizer",
- "ml_drc": "Dynamisch bereikcompressor",
-
- "mt_loop": "Loop/herhaal een nummer\">๐",
- "mt_one": "Stop na een nummer\">1๏ธโฃ",
- "mt_shuf": "Shuffle alle muziek in alle mappen\">๐",
- "mt_aplay": "Autoplay als er een song-ID staat in de link waarop je hebt geklikt om naar de server te gaan$N$NAls u dit uitschakelt, wordt de pagina-URL ook niet meer bijgewerkt met nummer-ID's tijdens het afspelen van muziek. Dit voorkomt automatisch afspelen als deze instellingen verloren gaan, maar de URL behouden blijft.\">aโถ",
- "mt_preload": "Begin het laden van de volgende nummer vlak voordat de huidige nummer het einde bereikt voor gapless playback\">preload",
- "mt_prescan": "Ga naar de volgende map voordat de laatste nummer eindigd$NMaakt de webbrower blij$NZo het afspelen van muziek niet gestopt word\">nav",
- "mt_fullpre": "Probeer het hele nummer vooraf te laden;$Nโ
activeer dit op onstabiele verbindingen,$Nโ zet uit als je waarschijnlijk een trage verbinding hebt\">full",
- "mt_fau": "Op telefoons, voorkom muziek van stoppen als de volgende nummer niet snel genoeg voorgeladen is (kan de weergave van tags glitchy maken)\">โ๏ธ",
- "mt_waves": "Waveform zoekbar:$NToon audio-amplitude in de zoekbar\">~s",
- "mt_npclip": "Knoppen tonen voor het clipboarden van het nummer dat op dat moment wordt afgespeeld\">/np",
- "mt_m3u_c": "Knoppen tonen om de geselecteerde nummers als m3u8-afspeellijstitems te clipboarden\">๐ป",
- "mt_octl": "OS-integratie (media hotkeys / osd)\">os-ctl",
- "mt_oseek": "Zoeken via os-integratie mogelijk maken$N$NNotitie: op sommige toestellen (iPhones) dit vervcangt de volgende-nummer knop\">seek",
- "mt_oscv": "Albumhoes weergeven in osd\">art",
- "mt_follow": "Het afgespeelde nummer in beeld houden\">๐ฏ",
- "mt_compact": "Compacte bedieningselementen\">โ",
- "mt_uncache": "Cache wissen (Probeer dit als uw browser een kapotte kopie van een nummer heeft gecached, waardoor het niet afgespeeld kan worden)\">uncache",
- "mt_mloop": "De open map herhalen\">๐ loop",
- "mt_mnext": "Laad de volgende map en ga verder\">๐ next",
- "mt_mstop": "Stoppen met afspelen\">โธ stop",
- "mt_cflac": "flac / wav omzetten naar {0}\">flac",
- "mt_caac": "aac / m4a omzetten naar {0}\">aac",
- "mt_coth": "Alle andere bestanden (geen mp3) converteren naar {0}\">oth",
- "mt_c2opus": "Beste keuze voor computers, laptops, android\">opus",
- "mt_c2owa": "opus-weba, voor iOS 17.5 en nieuwer\">owa",
- "mt_c2caf": "opus-caf, voor iOS 11 tot en met iOS 17\">caf",
- "mt_c2mp3": "Gebruik dit hele oude toestellen\">mp3",
- "mt_c2flac": "Beste geluidskwaliteit, maar grote downloads\">flac", //m
- "mt_c2wav": "Ongemprimeerde weergave (nog groter)\">wav", //m
- "mt_c2ok": "Mooi, goede keuze",
- "mt_c2nd": "Dat is niet het aanbevolen uitvoerformaat voor uw apparaat, maar dat is prima",
- "mt_c2ng": "Uw apparaat lijkt dit uitvoerformaat niet te ondersteunen, maar we gaan het toch proberen",
- "mt_xowa": "iOS bevat bugs waardoor dit formaat niet op de achtergrond kan worden afgespeeld; gebruik in plaats daarvan caf of mp3.",
- "mt_tint": "Achtergrond helderheid (0-100) op de zoekbalk om bufferen minder storend te maken",
- "mt_eq": "Schakelt de equalizer en gain-control in;$N$Nboost <code>0</code> = standaard 100% volume (ongeweijzigd)$N$Nwidth <code>1 </code> = standaard stereo (ongeweijzigd)$Nwidth <code>0.5</code> = 50% links-rechts crossfeed$Nwidth <code>0 </code> = mono$N$Nboost <code>-0.8</code> & width <code>10</code> = stemverwijdering :^)$N$NDoor de equalizer in te schakelen, worden gapless albums volledig gapless. Laat hem dus aanstaan met alle waarden op nul (behalve width = 1) als je dat belangrijk vindt.",
- "mt_drc": "Schakelt de dynamic range compressor in (volume flattener / brickwaller); schakelt ook EQ in om de spaghetti te balanceren, dus zet alle EQ velden behalve โwidthโ op 0 als je dat niet wilt.$N$Nverlaagt het volume van audio boven THRESHOLD dB; voor elke RATIO dB voorbij THRESHOLD is er 1 dB output, dus standaardwaarden van tresh -24 en ratio 12 betekenen dat het nooit luider dan -22 dB zou moeten worden en het is veilig om de equalizer boost te verhogen tot 0.8, of zelfs 1.8 met ATK 0 en een enorme RLS zoals 90 (werkt alleen in firefox; RLS is max 1 in andere browsers)$N$N(zie wikipedia, die legt het veel beter uit)",
-
- "mb_play": "Afspelen",
- "mm_hashplay": "Deze audio bestand afspelen?",
- "mm_m3u": "Druk op Enter/OK om af te spelen\nDruk op ESC/Annuleren om te bewerken",
- "mp_breq": "Heeft firefox 82+ of chrome 73+ of iOS 15+",
- "mm_bload": "Aan het laden...",
- "mm_bconv": "Opmzetten naar {0}, even geduld...",
- "mm_opusen": "Uw browser kan geen aac / m4a-bestanden afspelen;\ntranscodering naar opus is nu ingeschakeld",
- "mm_playerr": "Afspelen mislukt: ",
- "mm_eabrt": "De afspeelpoging is geannuleerd",
- "mm_enet": "Je internetverbinding is onstabiel",
- "mm_edec": "Dit bestand is vermoedelijk beschadigd??",
- "mm_esupp": "Uw browser begrijpt deze audio-formaat niet",
- "mm_eunk": "Onbekende fout",
- "mm_e404": "Kan audio niet afspelen; fout 404: Bestand niet gevonden..",
- "mm_e403": "Kan audio niet afspelen; fout 403: Toegang geweigerd.\n\nProbeer op F5 te drukken om opnieuw te laden, misschien ben je uitgelogd",
- "mm_e500": "Kan geen audio afspelen; fout 500: Controleer serverlogs.",
- "mm_e5xx": "Kan geen audio afspelen; serverfout ",
- "mm_nof": "Geen audiobestanden meer vinden in de buurt",
- "mm_prescan": "Op zoek naar muziek om als volgende te spelen...",
- "mm_scank": "Het volgende nummer gevonden:",
- "mm_uncache": "Cache gewist; alle nummers worden opnieuw gedownload bij de volgende keer afspelen",
- "mm_hnf": "Dat liedje bestaat niet meer",
-
- "im_hnf": "Deze afbeelding bestaat niet meer",
-
- "f_empty": 'Deze map is leeg',
- "f_chide": 'Dit verbergt kolom ยซ{0}ยป\n\nje kunt kolommen verbergen op de instellingen tabblad',
- "f_bigtxt": "Dit bestand is {0} MiB groot -- echt bekijken als tekst?",
- "f_bigtxt2": "Wilt u alleen het einde van het bestand bekijken? Dit maakt ook volgen/tailen mogelijk, waarbij nieuw toegevoegde tekstregels in realtime worden weergegeven.",
- "fbd_more": '',
- "fbd_all": '',
- "f_anota": "Alleen {0} van de {1} items zijn geselecteerd;\nom de volledige map te selecteren, scrol je eerst naar beneden",
-
- "f_dls": 'de bestandslinks in de huidige map zijn veranderd in downloadlinks',
-
- "f_partial": "Om een bestand dat momenteel wordt geรผpload veilig te downloaden, klikt u op het bestand met dezelfde bestandsnaam, maar zonder de bestandsextensie .PARTIAL. Druk op Annuleren of Escape om dit te doen.\n\nAls u op OK / Enter drukt, wordt deze waarschuwing genegeerd en gaat u verder met het downloaden van het gedeeltelijke .PARTIAL scratchbestand, waardoor u vrijwel zeker beschadigde gegevens krijgt.",
-
- "ft_paste": "plakken {0} items$NHotkey: ctrl-V",
- "fr_eperm": 'kan de naam niet wijzigen:\nje hebt geen โmoveโ rechten in deze map',
- "fd_eperm": 'kan niet verwijderen:\nje hebt geen โdeleteโ rechten in deze map',
- "fc_eperm": 'kan niet knippen:\nje hebt geen โmoveโ rechten in deze map',
- "fp_eperm": 'kan niet plakken:\nje hebt geen โschrijfโ rechten in deze map',
- "fr_emore": "selecteer ten minste รฉรฉn item om te hernoemen",
- "fd_emore": "selecteer minstens รฉรฉn item om te verwijderen",
- "fc_emore": "selecteer ten minste รฉรฉn item om te knippen",
- "fcp_emore": "selecteer ten minste รฉรฉn item om naar het klembord te kopiรซren",
-
- "fs_sc": "Deel de map waarin je je bevindt",
- "fs_ss": "De geselecteerde bestand(en) delen",
- "fs_just1d": "U kunt niet meer dan รฉรฉn map selecteren\nof mix bestanden en mappen in รฉรฉn selectie",
- "fs_abrt": "โ Afbreken",
- "fs_rand": "๐ฒ rand.naam",
- "fs_go": "โ
Maak share",
- "fs_name": "Naam",
- "fs_src": "Bron",
- "fs_pwd": "Wachtwoord",
- "fs_exp": "Verloopt",
- "fs_tmin": "min",
- "fs_thrs": "uur",
- "fs_tdays": "dag(en)",
- "fs_never": "eeuwig",
- "fs_pname": "Optionele linknaam; is willekeurig als deze leeg is",
- "fs_tsrc": "Het bestand of de map die u wilt delen",
- "fs_ppwd": "Optioneel wachtwoord",
- "fs_w8": "Delen...",
- "fs_ok": "Druk op Enter/OK naar klembord te zetten\Druk op ESC/Annuleren om te sluiten",
-
- "frt_dec": "Kan sommige gevallen van gebroken bestandsnamen oplossen\">url-decode",
- "frt_rst": "Gewijzigde bestandsnamen terugzetten naar de oorspronkelijke namen\">โบ reset",
- "frt_abrt": "Afbreken en dit venster sluiten\">โ Annuleren",
- "frb_apply": "HERNOEMEN TOEPASSEN",
- "fr_adv": "Batch / metadata / patroon hernoemen\">Geavanceerd",
- "fr_case": "Hoofdlettergevoelige regex\">case",
- "fr_win": "Windows-veilige namen; vervangen <>:"\\|?* met japanse tekens over de volledige breedte\">win",
- "fr_slash": "Vervang / met een teken waardoor er geen nieuwe mappen worden gemaakt\">geen /",
- "fr_re": "Regex zoekpatroon om toe te passen op originele bestandsnamen; naar capturing groups kan worden verwezen in het onderstaande opmaakveld zoals <code>(1)</code> en <code>(2)</code> enzovoort",
- "fr_fmt": "Geรฏnspireerd door foobar2000 :$N<code>(titel)</code> wordt vervangen door de titel van het nummer,$N<code>[(artiest) - ](titel)</code> sla [dit] gedeelte over als artiest leeg is$N<code>$lpad((tn),2,0)</code> vult tracknummer op tot 2 cijfers (0X)",
- "fr_pdel": "Verwijderen",
- "fr_pnew": "Opslaan als",
- "fr_pname": "Geef een naam op voor je nieuwe preset",
- "fr_aborted": "Afgebroken",
- "fr_lold": "Oude naam",
- "fr_lnew": "Nieuwe naam",
- "fr_tags": "Tags voor de geselecteerde bestanden (alleen-lezen, alleen ter referentie):",
- "fr_busy": "Hernoemen van {0} items...\n\n{1}",
- "fr_efail": "Hernoemen mislukt:\n",
- "fr_nchg": "{0} van de nieuwe namen zijn gewijzigd als gevolg van win en/of geen /\n\nOK om door te gaan met deze gewijzigde nieuwe namen?",
-
- "fd_ok": "Verwijderen OK",
- "fd_err": "Verwijderen mislukt:\n",
- "fd_none": "Er is niets verwijderd; misschien geblokkeerd door serverconfiguratie (xbd)?",
- "fd_busy": "{0} items verwijderen...\n\n{1}",
- "fd_warn1": "VERWIJDER deze {0} items?",
- "fd_warn2": "LAATSTE KANS! Geen manier om ongedaan te maken. Verwijderen?",
-
- "fc_ok": "Knip {0} items",
- "fc_warn": 'Knip {0} items\n\nmaar: alleen deze browser-tabblad kan weer plakken\n(omdat de selectie zo enorm is)',
-
- "fcc_ok": "{0} items naar klembord gekopieerd",
- "fcc_warn": '{0} items naar klembord gekopieerd\n\maar: alleen deze browser-tabblad kan weer plakken\n(omdat de selectie zo enorm is)',
-
- "fp_apply": "Gebruik deze namen",
- "fp_ecut": "Knip of kopieer eerst enkele bestanden/mappen om te verplaatsen/plakken\n\nnotitie: je kunt knippen/plakken in verschillende browsertabbladen",
- "fp_ename": "{0} items kunnen hier niet worden verplaatst omdat de namen al in gebruik zijn. Geef ze hieronder een nieuwe naam om verder te gaan, of verwijder de naam om ze over te slaan:",
- "fcp_ename": "{0} items kunnen hier niet worden gekopieerd omdat de namen al in gebruik zijn. Geef ze hieronder een nieuwe naam om verder te gaan, of verwijder de naam om ze over te slaan:",
- "fp_emore": "Er zijn nog enkele bestandsnaambotsingen die moeten worden opgelost",
- "fp_ok": "Verplaatsen OK",
- "fcp_ok": "Kopiรซren OK",
- "fp_busy": "{0} items verplaatsen...\n\n{1}",
- "fcp_busy": "{0} items kopiรซren...\n\n{1}",
- "fp_abrt": "afbreken...", //m
- "fp_err": "Verplaatsen mislukt:\n",
- "fcp_err": "Kopieรซren mislukt:\n",
- "fp_confirm": "Verplaats deze {0} items hierheen?",
- "fcp_confirm": "Kopieer deze {0} items hier?",
- "fp_etab": 'Kan klembord van ander browsertabblad niet lezen',
- "fp_name": "Een bestand uploaden vanaf uw apparaat. Geef het een naam:",
- "fp_both_m": 'Kies wat je wilt plakken
Enter = Verplaatsen {0} bestanden van ยซ{1}ยป\nESC = Upload {2} bestanden van je apparaat',
- "fcp_both_m": 'Kies wat je wilt plakken
Enter = Kopieer {0} bestanden van ยซ{1}ยป\nESC = Upload {2} bestanden van je apparaat',
- "fp_both_b": 'VerplaatsUpload',
- "fcp_both_b": 'KopieerUpload',
-
- "mk_noname": "Voer een naam in het tekstveld aan de linkerkant voordat je verder gaat :p",
-
- "tv_load": "Tekstdocument laden:\n\n{0}\n\n{1}% ({2} van de {3} MiB geladen)",
- "tv_xe1": "Kon tekstbestand niet laden:\n\nfout ",
- "tv_xe2": "404, bestand niet gevonden",
- "tv_lst": "Lijst met tekstbestanden in",
- "tvt_close": "Terugkeren naar mapweergave$NHotkey: M (of Esc)\">โ Sluiten",
- "tvt_dl": "Download dit bestand$NHotkey: Y\">๐พ download",
- "tvt_prev": "Vorig document tonen$NHotkey: i\">โฌ prev",
- "tvt_next": "Volgende document tonen$NHotkey: K\">โฌ next",
- "tvt_sel": "Selecteer bestand ( voor knip / verplaats / verwijder / ... )$NHotkey: S\">sel",
- "tvt_edit": "Bestand openen in teksteditor$NHotkey: E\">โ๏ธ bewerk",
- "tvt_tail": "Bestand controleren op wijzigingen; nieuwe regels in realtime weergeven\">๐ก volgen",
- "tvt_wrap": "Automatische terugloop\">โต",
- "tvt_atail": "Vergrendelen scroll naar onderkant van pagina\">โ",
- "tvt_ctail": "Kleuren van terminals decoderen (ansi escape codes)\">๐",
- "tvt_ntail": "Terugrollimiet (hoeveel tekst geladen moeten blijven)",
-
- "m3u_add1": "Nummer toegevoegd aan m3u afspeellijst",
- "m3u_addn": "{0} nummers toegevoegd aan m3u-afspeellijst",
- "m3u_clip": "m3u-afspeellijst nu gekopieerd naar klembord\n\nje moet een nieuw tekstbestand maken met de naam iets.m3u en de afspeellijst in dat document plakken; dit maakt het afspeelbaar",
-
- "gt_vau": "Laat geen video's zien, speel alleen de audio af\">๐ง",
- "gt_msel": "Schakel bestandsselectie in; ctrl-klik op een bestand om te openen$N$N<em>indien actief: dubbelklik op een bestand / map om het te openen</em>$N$NHotkey: S\">multiselect",
- "gt_crop": "Gecentreerde miniaturen\">crop",
- "gt_3x": "Hi-res miniaturen\">3x",
- "gt_zoom": "Zoom",
- "gt_chop": "Verkorten",
- "gt_sort": "Sorteer bij",
- "gt_name": "naam",
- "gt_sz": "grootte",
- "gt_ts": "datum",
- "gt_ext": "type",
- "gt_c1": "Bestandsnamen meer inkorten (minder tonen)",
- "gt_c2": "Bestandsnamen minder inkorten (meer tonen)",
-
- "sm_w8": "Zoeken...",
- "sm_prev": "Onderstaande zoekresultaten zijn afkomstig van een eerdere zoekopdracht:\n ",
- "sl_close": "Zoekresultaten sluiten",
- "sl_hits": "Toont {0} treffers",
- "sl_moar": "Laad meer",
-
- "s_sz": "grootte",
- "s_dt": "datum",
- "s_rd": "pad",
- "s_fn": "naam",
- "s_ta": "tags",
- "s_ua": "op@",
- "s_ad": "adv.",
- "s_s1": "Minimaal MiB",
- "s_s2": "Maximaal MiB",
- "s_d1": "Min. iso8601",
- "s_d2": "Max. iso8601",
- "s_u1": "Uploaded na",
- "s_u2": "en/of voor",
- "s_r1": "Pad bevad (spatie-gescheiden)",
- "s_f1": "Naam bevat (ontkennen met -nope)",
- "s_t1": "Tags bevat (^=start, einde=$)",
- "s_a1": "Specifieke metadata-eigenschappen",
-
- "md_eshow": "Kan niet weergeven ",
- "md_off": "[๐readme] uitgeschakeld in [โ๏ธ] -- document verborgen",
-
- "badreply": "Mislukt om antwoord van server te parsen",
-
- "xhr403": "403: Toegang geweigerd\n\nprobeer F5 in te drukken, misschien ben je uitgelogd",
- "xhr0": "Onbekend (waarschijnlijk verbinding met server verloren of server is offline)",
- "cf_ok": "Sorry daarvoor -- DD" + wah + "OS-bescherming ingeschakeld\n\nalles zou binnen ongeveer 30 seconden moeten hervatten\n\nals er niets gebeurt, druk dan op F5 om de pagina opnieuw te laden",
- "tl_xe1": "Kon submappen niet weergeven:\n\nfout ",
- "tl_xe2": "404: Map niet gevonden",
- "fl_xe1": "Kon bestanden in map niet weergeven:\n\nfout ",
- "fl_xe2": "404: Map niet gevonden",
- "fd_xe1": "Kon submap niet aanmaken:\n\nfout ",
- "fd_xe2": "404: Bovenliggende map niet gevonden",
- "fsm_xe1": "Kon bericht niet verzenden:\n\nfout ",
- "fsm_xe2": "404: Bovenliggende map niet gevonden",
- "fu_xe1": "Mislukt om unpost lijst van server te laden:\n\nfout ",
- "fu_xe2": "404: Bestand niet gevonden??",
-
- "fz_tar": "gnu-tar bestand uitpakken (linux / mac)",
- "fz_pax": "pax-formaat tar uitpakken (trager)",
- "fz_targz": "gnu-tar met gzip niveau 3 compressie$N$Ndit is meestal erg langzaam, dus gebruik in plaats daarvan ongecomprimeerde tar",
- "fz_tarxz": "gnu-tar met xz-niveau 1 compressie$N$Ndit is meestal erg langzaam, dus gebruik in plaats daarvan ongecomprimeerde tar",
- "fz_zip8": "Zip met utf8 bestandsnamen (misschien onhandig op windows 7 en ouder)",
- "fz_zipd": "Zip met traditionele cp437-bestandsnamen, voor echt oude software",
- "fz_zipc": "cp437 met crc32 vroeg berekend$Nvoor MS-DOS PKZIP v2.04g (oktober 1993)$N(het duurt langer voordat het downloaden kan beginnen)",
-
- "un_m1": "Hieronder kunt u uw recente uploads verwijderen (of onvoltooide uploads afbreken)",
- "un_upd": "Vernieuwen",
- "un_m4": "of deel de bestanden die hieronder zichtbaar zijn:",
- "un_ulist": "Toon",
- "un_ucopy": "Kopieer",
- "un_flt": "Optionele filter: URL moet het volgende bevatten",
- "un_fclr": "Reset filter",
- "un_derr": 'unpost-verwijderen mislukt:\n',
- "un_f5": 'Er is iets kapot, probeer te verversen of druk op F5',
- "un_uf5": "Sorry, maar u moet de pagina vernieuwen (bijvoorbeeld door op F5 of CTRL-R te drukken) voordat deze upload kan worden afgebroken.",
- "un_nou": 'Waarschuwing: server te druk om onvoltooide uploads weer te geven; klik straks op de "refresh" link',
- "un_noc": 'Waarschuwing: unpost van volledig geรผploade bestanden is niet ingeschakeld/toegestaan in de serverconfiguratie',
- "un_max": "Toont de eerste 2000 bestanden (gebruik de filter)",
- "un_avail": "{0} recente uploads kunnen worden verwijderd
{1} onvoltooide kunnen worden afgebroken",
- "un_m2": "Gesorteerd op uploadtijd; meest recente eerst:",
- "un_no1": "sike! geen enkele upload is recent genoeg",
- "un_no2": "sike! geen uploads die aan dat filter voldoen zijn voldoende recent",
- "un_next": "Verwijder de volgende {0} bestanden",
- "un_abrt": "Afbreken",
- "un_del": "Verwijderen",
- "un_m3": "Je recente uploads laden...",
- "un_busy": "Verwijderen van {0} bestanden...",
- "un_clip": "{0} links gekopieerd naar klembord",
-
- "u_https1": "Je moet",
- "u_https2": "overschakelen naar https",
- "u_https3": "voor betere prestaties",
- "u_ancient": 'Je browser is indrukwekkend oud -- misschien moet je in plaats daarvan bup gebruiken',
- "u_nowork": "Je moet firefox 53+ of chrome 57+ of iOS 11+ hebben",
- "tail_2old": "Je moet firefox 105+ of chrome 71+ of iOS 14.5+ hebben",
- "u_nodrop": 'Je browser is te oud voor uploaden via slepen en neerzetten',
- "u_notdir": "Dat is geen map!\n\nuw browser is te oud,\nprobeer in plaats daarvan sleep en neerzetten",
- "u_uri": "Om afbeeldingen te slepen vanuit andere browser tabblad,\nplaats deze dan op de grote uploadknop",
- "u_enpot": 'Overschakelen naar potato UI (kan uploadsnelheid verbeteren)',
- "u_depot": 'Overschakelen naar fancy UI (kan uploadsnelheid verminderen)',
- "u_gotpot": 'Overschakelen naar de potato UI voor verbeterde uploadsnelheid,\n\nVoel je vrij om het er niet mee eens te zijn en schakel terug!',
- "u_pott": "Bestanden: {0} klaar, {1} mislukt, {2} bezig, {3} in de wachtrij
",
- "u_ever": "Dit is de basis uploader; up2k heeft minstens het volgende nodig
chrome 21 // firefox 13 // edge 12 // opera 12 // safari 5.1",
- "u_su2k": 'Dit is de basis uploader; up2k is beter',
- "u_uput": 'Optimaliseren voor snelheid (checksum overslaan)',
- "u_ewrite": 'Je hebt geen schrijftoegang tot deze map',
- "u_eread": 'Je hebt geen leestoegang tot deze map',
- "u_enoi": 'Zoeken naar bestanden is niet ingeschakeld in de serverconfiguratie',
- "u_enoow": "Overschrijven zal hier niet werken; je heb verwijder toestemming nodig",
- "u_badf": 'Deze {0} bestanden (van {1} totaal) zijn overgeslagen, mogelijk door bestandssysteemmachtigingen:\n\n',
- "u_blankf": 'Deze {0} bestanden (van {1} totaal) zijn leeg; alsnog uploaden?\n\n',
- "u_applef": 'Deze {0} bestanden (van {1} totaal) zijn waarschijnlijk ongewenst;\nKlik op OK/Enter om de volgende bestanden over te slaan,\Klik op Annuleren/ESC niet uit te sluiten en deze ook te uploaden:\n\n',
- "u_just1": '\nMisschien werkt het beter als je slechts รฉรฉn bestand selecteert',
- "u_ff_many": "Als je Linux / MacOS / Android, gebruikt dan kan deze hoeveelheid bestanden Firefox crashen!\nals dat gebeurt, probeer het dan opnieuw (of gebruik Chrome).",
- "u_up_life": "Deze upload wordt verwijderd van de server\n{0} nadat het is voltooid",
- "u_asku": 'Upload deze {0} bestanden naar {1}',
- "u_unpt": "Je kunt deze upload ongedaan maken / verwijderen met de linkerbovenhoek ๐งฏ",
- "u_bigtab": 'We staan op het punt om {0} bestanden te tonen\n\nDit kan uw browser laten crashen, weet je het zeker??',
- "u_scan": 'Bestanden scannen...',
- "u_dirstuck": 'Directory iterator liep vast bij het benaderen van het volgende {0} items; zal het volgende overslaan:',
- "u_etadone": 'Klaar ({0}, {1} bestanden)',
- "u_etaprep": '(klaarmaken om te uploaden)',
- "u_hashdone": 'hashing klaar',
- "u_hashing": 'Hash',
- "u_hs": 'Hallo zeggen...',
- "u_started": "De bestanden worden nu geรผpload; zie [๐]",
- "u_dupdefer": "Duplicaat; wordt verwerkt na alle andere bestanden",
- "u_actx": "klik op deze tekst om prestatieverliesbij het overschakelen naar andere vensters/tabbladen te voorkomen",
- "u_fixed": "OK! Fixed it ๐",
- "u_cuerr": "Mislukt bij het uploaden van stuk {0} van {1};\nwaarschijnlijk ongevaarlijk, doorgaan\n\nbestand: {2}",
- "u_cuerr2": "Upload door server geweigerd (stuk {0} van {1});\nzal later opnieuw proberen\n\nbestand: {2}\n\nfout ",
- "u_ehstmp": "Zal opnieuw proberen; zie rechtsonder",
- "u_ehsfin": "Server heeft het verzoek om de upload te finaliseren afgewezen; opnieuw proberen...",
- "u_ehssrch": "Server heeft de zoekaanvraag afgewezen; opnieuw proberen...",
- "u_ehsinit": "Server heeft het verzoek om het uploaden te starten afgewezen; opnieuw proberen...",
- "u_eneths": "Netwerkfout tijdens het uitvoeren van de uploadhanddruk; opnieuw proberen...",
- "u_enethd": "Netwerkfout tijdens het testen van het bestaan van het doel; opnieuw proberen...",
- "u_cbusy": "Wachten tot de server ons weer vertrouwt na een netwerkstoring...",
- "u_ehsdf": "Server heeft geen schijfruimte meer!\n\nzal blijven proberen, voor het geval iemand genoeg ruimte vrijmaakt om door te gaan",
- "u_emtleak1": "Het lijkt erop dat uw webbrowser een geheugenlek heeft;\nprobeer",
- "u_emtleak2": ' over te schakel over naar https (aanbevolen) of ',
- "u_emtleak3": ' ',
- "u_emtleakc": 'Probeer het volgende:\n- druk op
F5 om de pagina te verversen - dan schakel de
mt uit, deze knop staat in โ๏ธ instellingen - en probeer de upload opnieuw
Uploaden zal wat langzamer gaan, maar ja.\nSorry voor de problemen!\n\nPS: chrome v107 heeft een bugfix voor dit',
- "u_emtleakf": '{robeer het volgende:\n- druk op
F5 om de pagina te verversen - dan activeer
๐ฅ (aardappel) in de upload scherm - en probeer de upload opnieuw
\nPS: firefox heeft mogelijk een fix op een gegeven moment',
- "u_s404": "Niet gevonden op server",
- "u_expl": "Leg uit",
- "u_maxconn": "De meeste browsers beperken dit tot 6, maar firefox laat je dit verhogen met network.http.max-persistent-connections-per-server in about:config",
- "u_tu": 'WAARSCHUWING: turbo ingeschakeld, webbrowser detecteert en hervat onvolledige uploads mogelijk niet; zie de tooltip van de turboknop
',
- "u_ts": 'WAARSCHUWING: turbo ingeschakeld, zoekresultaten kunnen onjuist zijn; zie turbo-knop tooltip
',
- "u_turbo_c": "Turbo is uitgeschakeld in serverconfiguratie",
- "u_turbo_g": "Turbo uitgeschakeld, je geen recht om mappen in deze volume te tonen",
- "u_life_cfg": 'Automatisch verwijderen na minuten (of uur)',
- "u_life_est": 'Upload wordt verwijderd ---',
- "u_life_max": 'Deze map dwingt een\nmaximale levensduur van {0} af',
- "u_unp_ok": 'unpost is toegestaan voor {0}',
- "u_unp_ng": 'unpost zijn NIET toegestaan',
- "ue_ro": 'Je toegang tot deze map is alleen-lezen\n\n',
- "ue_nl": 'Je bent momenteel niet ingelogd',
- "ue_la": 'Je bent momenteel aangemeld als "{0}"',
- "ue_sr": 'U bevindt zich momenteel in de bestandszoekmodus\n\nschakel over naar uploadmodus door op het vergrootglas te klikken ๐ (naast de grote ZOEK-knop), en probeer opnieuw te uploaden\n\nsorry',
- "ue_ta": 'Probeer opnieuw te uploaden, het zou nu moeten werken',
- "ue_ab": "Dit bestand wordt al geรผpload naar een andere map en die upload moet worden voltooid voordat het bestand naar een andere map kan worden geรผpload.\n\nU kunt de eerste upload afbreken en laten vergeten met de linkerbovenhoek ๐งฏ",
- "ur_1uo": "OK: Bestand succesvol geรผpload",
- "ur_auo": "OK: Alle {0} bestanden succesvol geรผpload",
- "ur_1so": "OK: Bestand gevonden op server",
- "ur_aso": "OK: Alle {0} bestanden gevonden op server",
- "ur_1un": "Uploaden mislukt, sorry",
- "ur_aun": "Alle {0} uploads mislukt, sorry",
- "ur_1sn": "Bestand NIET gevonden op server",
- "ur_asn": "De {0} bestanden zijn NIET gevonden op de server",
- "ur_um": "Voltooid;\n{0} upload(s) OK,\n{1} upload(s) mislukt, sorry",
- "ur_sm": "Voltooid;\n{0} bestand(en) gevonden op de server,\n{1} bestand(en) NIET gevonden op de server",
-
- "lang_set": "Vernieuw de pagina om de wijziging door te voeren?",
- },
- "nno": {
- "tt": "Nynorsk",
-
- "cols": {
- "c": "handlingsknappar",
- "dur": "varigheit",
- "q": "kvalitet / bitrate",
- "Ac": "lydformat",
- "Vc": "videoformat",
- "Fmt": "format / innpakning",
- "Ahash": "lydkontrollsum",
- "Vhash": "videokontrollsum",
- "Res": "opplรธysing",
- "T": "filtype",
- "aq": "lydkvalitet / bitrate",
- "vq": "videokvalitet / bitrate",
- "pixfmt": "fargekoding / detaljnivรฅ",
- "resw": "horisontal opplรธysing",
- "resh": "vertikal opplรธysing",
- "chs": "lydkanaler",
- "hz": "lydopplรธsing"
- },
-
- "hks": [
- [
- "ymse",
- ["ESC", "lukk saker og ting"],
-
- "filbehandlar",
- ["G", "listevisning eller ikon"],
- ["T", "miniatyrbilder pรฅ/av"],
- ["โง A/D", "ikonstorleik"],
- ["ctrl-K", "slett valde"],
- ["ctrl-X", "klipp ut valde"],
- ["ctrl-C", "kopiรฉr รฅt utklippstavle"],
- ["ctrl-V", "lim inn (flytt/kopiรฉr)"],
- ["Y", "last ned valde"],
- ["F2", "endre namn pรฅ valde"],
-
- "filmarkering",
- ["space", "markรฉr fil"],
- ["โ/โ", "flytt markรธr"],
- ["ctrl โ/โ", "flytt markรธr og scroll"],
- ["โง โ/โ", "velg forr./neste fil"],
- ["ctrl-A", "velg alle filer / mapper"],
- ], [
- "navigering",
- ["B", "mappehierarki eller filsti"],
- ["I/K", "forr./neste mappe"],
- ["M", "eitt nivรฅ opp (eller lukk)"],
- ["V", "vis mapper eller tekstfiler"],
- ["A/D", "panelstorleik"],
- ], [
- "musikkspelar",
- ["J/L", "forr./neste song"],
- ["U/O", "hopp 10sek bak/fram"],
- ["0..9", "hopp รฅt 0%..90%"],
- ["P", "pause, eller start / fortsett"],
- ["S", "marker spelande song"],
- ["Y", "last ned song"],
- ], [
- "bildevisar",
- ["J/L, โ/โ", "forr./neste bilde"],
- ["Home/End", "fรธrste/siste bilde"],
- ["F", "fullskjermvisning"],
- ["R", "rotรฉr รฅt hรธyre"],
- ["โง R", "rotรฉr รฅt venstre"],
- ["S", "markรฉr bilde"],
- ["Y", "last ned bilde"],
- ], [
- "videospelar",
- ["U/O", "hopp 10sek bak/fram"],
- ["P/K/Space", "pause / fortsett"],
- ["C", "fortsett รฅt neste fil"],
- ["V", "gjenta avspeling"],
- ["M", "lyd av/pรฅ"],
- ["[ og ]", "gjentaksintervall"],
- ], [
- "dokumentvisar",
- ["I/K", "forr./neste fil"],
- ["M", "lukk tekstdokument"],
- ["E", "redigรฉr tekstdokument"],
- ["S", "markรฉr fil (for F2/ctrl-x/...)"],
- ["Y", "last ned tekstfil"],
- ]
- ],
-
- "m_ok": "OK",
- "m_ng": "Avbryt",
-
- "enable": "Aktiv",
- "danger": "VARSKU",
- "clipped": "kopiert รฅt utklippstavla",
-
- "ht_s1": "sekund",
- "ht_s2": "sekund",
- "ht_m1": "minutt",
- "ht_m2": "minutt",
- "ht_h1": "time",
- "ht_h2": "timar",
- "ht_d1": "dag",
- "ht_d2": "dagar",
- "ht_and": " og ",
-
- "goh": "kontrollpanel",
- "gop": 'navigรฉr รฅt mappa fรธr den her">forr.',
- "gou": 'navigรฉr eitt nivรฅ opp">opp',
- "gon": 'navigรฉr รฅt mappa etter den her">neste',
- "logout": "Logg ut ",
- "login": "Logg inn",
- "access": " รฅtgang",
- "ot_close": "lukk reiskap",
- "ot_search": "sรธk etter filer ved รฅ angje filnamn, mappenamn, tid, storleik, eller metadata som songtittel / artist / osv.$N$N<code>foo bar</code> = inneheld bรฅe ยซfooยป og ยซbarยป,$N<code>foo -bar</code> = innehold ยซfooยป men ikkje ยซbarยป,$N<code>^yana .opus$</code> = startar med ยซyanaยป, filtype ยซopusยป$N<code>"try unite"</code> = ยซtry uniteยป eksakt$N$Ndatoformat er iso-8601, sรฅ f.eks.$N<code>2009-12-31</code> eller <code>2020-09-12 23:30:00</code>",
- "ot_unpost": "unpost: slett filer som du nyleg har lastet opp; ยซangre-knappenยป",
- "ot_bup": "bup: tradisjonell / primitiv filopplasting,$N$Nfungerar i om lag samtlege nettlesarar",
- "ot_mkdir": "mkdir: lag ei ny mappe",
- "ot_md": "new-md: lag eit nytt markdown-dokument",
- "ot_msg": "msg: send ein beskjed รฅt serverloggen",
- "ot_mp": "musikkspelarinstillinger",
- "ot_cfg": "andre innstillinger",
- "ot_u2i": 'up2k: last opp filer (viss du har skriveรฅtgang) eller bytt รฅt sรธkemodus for รฅ sjekke om filene finnast ein eller annan plass pรฅ serveren$N$Nopplastinger kan startast opp att etter avbrot, skjer stykkevis for potensielt hรธgare ytelse, og ivaretek datostempling -- men bruker litt meir prosessorkraft enn [๐] (den primitive opplastaren "bup")
mens opplastinger fรธregรฅr sรฅ visast framdrifta her oppe!',
- "ot_u2w": 'up2k: filopplasting med stรธtte for รฅ starte opp att avbrotne opplastinger -- steng ned nettlesaren og drage dei same filene inn i nettlesaren igjen for รฅ plukke opp att der du slapp$N$Nopplastinger skjer stykkevis for potensielt hรธgare ytelse, og ivaretek datostempling -- men bruker litt meir prosessorkraft enn [๐] (den primitive opplastaren "bup")
mens opplastinger fรธregรฅr sรฅ visast framdrifta her oppe!',
- "ot_noie": 'Fungerer mye betre i Chrome / Firefox / Edge',
-
- "ab_mkdir": "lag mappe",
- "ab_mkdoc": "nytt dokument",
- "ab_msg": "send melding",
-
- "ay_path": "gรฅ videre รฅt mapper",
- "ay_files": "gรฅ videre รฅt filer",
-
- "wt_ren": "gje nye namn รฅt dei valde filene$NSnarvei: F2",
- "wt_del": "slett dei valde filene$NSnarvei: ctrl-K",
- "wt_cut": "klipp ut dei valde filene <small>(for รฅ lime inn ein annan plass)</small>$NSnarvei: ctrl-X",
- "wt_cpy": "kopiรฉr dei valde filene รฅt utklippstavla$N(for รฅ lime inn ein annan plass)$NSnarvei: ctrl-C",
- "wt_pst": "lim inn filer (som tidligare blei klipt ut / kopiert ein annan plass)$NSnarvei: ctrl-V",
- "wt_selall": "velg alle filer$NSnarvei: ctrl-A (mens fokus er pรฅ ei fil)",
- "wt_selinv": "invertรฉr utval",
- "wt_zip1": "last ned denne mappa som eit arkiv",
- "wt_selzip": "last ned dei valde filene som eit arkiv",
- "wt_seldl": "last ned dei valde filene$NSnarvei: Y",
- "wt_npirc": "kopiรฉr songinfo (irc-formatert)",
- "wt_nptxt": "kopiรฉr songinfo",
- "wt_m3ua": "legg song รฅt i m3u-speleliste$N(husk รฅ klikk pรฅ ๐ปcopy senere)",
- "wt_m3uc": "kopiรฉr m3u-spelelista รฅt utklippstavla",
- "wt_grid": "bytt mellom ikon og listevising$NSnarvei: G",
- "wt_prev": "fรธrre song$NSnarvei: J",
- "wt_play": "play / pause$NSnarvei: P",
- "wt_next": "neste song$NSnarvei: L",
-
- "ul_par": "samtidige handl.:",
- "ut_rand": "finn opp nye tilfeldige filnamn",
- "ut_u2ts": "gje fila pรฅ serveren same$Ntidsstempel som lokalt hos deg\">๐
",
- "ut_ow": "overskrive eksisterande filer pรฅ serveren?$N๐ก๏ธ: aldri (finn pรฅ eit nytt filnamn i staden for)$N๐: overskriv viss fila รฅt serveren er eldre$Nโป๏ธ: alltid, gitt at innholdet er annleis",
- "ut_mt": "fortsett รฅ synfare kรธa mens opplasting fรธregรฅr$N$Nskru denne av dersom du har ein$Ntreig prosessor eller harddisk",
- "ut_ask": 'bekreft filutvalg fรธr opplasting startar">๐ญ',
- "ut_pot": "forbetre ytinga pรฅ treige einheiter ved รฅ$Nforenkle brukergrensesnittet",
- "ut_srch": "gjer eit sรธk i staden for รฅ laste opp --$Nleitar gjennom alle mappane du har lov รฅt รฅ sjรฅ",
- "ut_par": "sett รฅt 0 for รฅ midlertidig stoppe opplasting$N$Nhรธge verdier (4 eller 8) kan gje betre yting,$Nspesielt pรฅ treige internettlinjer$N$Nbรธr ikkje vere hรธgare enn 1 pรฅ LAN$Neller viss serveren sin harddisk er treig",
- "ul_btn": "slepp filer / mapper
her (eller klikk meg)",
- "ul_btnu": "L A S T O P P",
- "ul_btns": "F I L S ร K",
-
- "ul_hash": "synfar",
- "ul_send": " send",
- "ul_done": "total",
- "ul_idle1": "ingen handlinger i kรธen",
- "ut_etah": "snitthastigheit for <em>synfaring</em> samt gjenstรฅande tid",
- "ut_etau": "snitthastigheit for <em>opplasting</em> samt gjenstรฅande tid",
- "ut_etat": "<em>total</em> snitthastigheit og gjenstรฅande tid",
-
- "uct_ok": "fullfรธrt uten problem",
- "uct_ng": "fullfรธrt under tvil (duplikat, ikkje funne, ...)",
- "uct_done": "fullfรธrt (enten <em>ok</em> eller <em>ng</em>)",
- "uct_bz": "aktive handlinger (synfaring / opplasting)",
- "uct_q": "kรธa",
-
- "utl_name": "filnamn",
- "utl_ulist": "vis",
- "utl_ucopy": "kopiรฉr",
- "utl_links": "lenker",
- "utl_stat": "status",
- "utl_prog": "fremdrift",
-
- // mรฅ vere korte:
- "utl_404": "404",
- "utl_err": "FEIL!",
- "utl_oserr": "OS-feil",
- "utl_found": "funnet",
- "utl_defer": "seinare",
- "utl_yolo": "YOLO",
- "utl_done": "ferdig",
-
- "ul_flagblk": "filene har blitt lagd i kรธa
men det er ein anna nettlesarfane som held pรฅ med synfaring eller opplasting akkurat no,
sรฅ venter รฅt den er ferdig fรธrst",
- "ul_btnlk": "brytaren har blitt lรฅst รฅt denne tilstanden i serverens konfigurasjon",
-
- "udt_up": "Last opp",
- "udt_srch": "Sรธk",
- "udt_drop": "Slepp filene her",
-
- "u_nav_m": 'kva har du?
Enter = Filer (รฉin eller fleire)\nESC = รi mappe (inkludert undermapper)',
- "u_nav_b": 'Filerรi mappe',
-
- "cl_opts": "brytarar",
- "cl_themes": "utsjรฅnad",
- "cl_langs": "sprรฅk",
- "cl_ziptype": "nedlasting av mapper",
- "cl_uopts": "up2k-brytarar",
- "cl_favico": "favicon",
- "cl_bigdir": "store mapper",
- "cl_hsort": "#sort",
- "cl_keytype": "notasjon for musikalsk dur",
- "cl_hiddenc": "skjulte kolonner",
- "cl_hidec": "skjul",
- "cl_reset": "nullstill",
- "cl_hpick": "klikk pรฅ overskrifta รฅt kolonnene du รธnskjer รฅ skjule i tabellen nedanfor",
- "cl_hcancel": "kolonne-skjuling avbrote",
-
- "ct_grid": '็ฐ ikon',
- "ct_ttips": 'vis hjelpetekst ved รฅ holde musa over ting">โน๏ธ tips',
- "ct_thumb": 'vis miniatyrbilder i staden for ikon$NSnarvei: T">๐ผ๏ธ bilder',
- "ct_csel": 'bruk tastane CTRL og SHIFT for markering av filer i ikonvising">merk',
- "ct_ihop": 'bla ned รฅt sist viste bilde nรฅr bildevisaren lukkast">gโฎฏ',
- "ct_dots": 'vis skjulte filer (gitt at serveren tillรจt det)">.synlig',
- "ct_qdel": 'sletteknappen spรธr berre รฉin gong om stadfesting">hurtig๐๏ธ',
- "ct_dir1st": 'sortรฉr slik at mapper kjem framanfor filer">๐ fรธrst',
- "ct_nsort": 'naturlig sortering (skjรธnar tal i filnamn)">nsort',
- "ct_utc": 'bruk UTC for alle klokkeslett">UTC',
- "ct_readme": 'vis README.md nedanfor filene">๐ readme',
- "ct_idxh": 'vis index.html i staden for filliste">htm',
- "ct_sbars": 'vis rullgardiner / skrollefelt">โ',
-
- "cut_umod": 'i tilfelle ei fil du lastar opp alt finnast pรฅ serveren, sรฅ skal tidsstempelet รฅt serveren oppdaterast slik at det stemmer overeins med din lokale fil (krev rettigheitene write+delete)">re๐
',
-
- "cut_turbo": "forenkla synfaring ved opplasting; bรธr etter alt รฅ dรธme ikkje skruast pรฅ:$N$Nnyttig dersom du var midt i ei svรฆr opplasting som mรฅtte startast pรฅ nytt av ein eller annan grunn, og du vil komme i gang igjen sรฅ raskt som i det heile mulig.$N$Nnรฅr denne er skrudd pรฅ sรฅ forenklast synfaringa kraftig; i staden for รฅ utfรธre ein trygg sjekk pรฅ om filene finnast pรฅ serveren i god stand, sรฅ sjekkast det kun om filstorleiken stemmer. Sรฅ dersom ein korrupt fil vere pรฅ serveren allerede, pรฅ same plass, med same storleik og namn, sรฅ blir det ikkje oppdaga.$N$Ndet anbefalast รฅ kun benytte denne funksjonen for รฅ komme seg raskt gjennom sjรธlve opplastinga, for sรฅ รฅ skru den av, og รฅt slutt "laste opp" dei same filene รฉin gong รฅt -- slik at integriteten kan verifiserast\">turbo",
-
- "cut_datechk": "har ingen effekt dersom turbo er skrudd av$N$Ngjer turbo bittelitt tryggare ved รฅ sjekke datostemplinga pรฅ filene (i tillegg รฅt filstorleik)$N$Nburde oppdage og gjenoppta dei fleste ufullstendige opplastinger, men er ikkje ein fullverdig erstatning for รฅ deaktivere turbo og gjere ein skikkeleg sjekk\">date-chk",
-
- "cut_u2sz": "storleik i megabyte for kvart bruddstykke for opplasting. Store verdiar flyg betre over atlanteren. Smรฅ verdiar kan vere betre pรฅ flettande ustabile samband",
-
- "cut_flag": "samkรธyrer nettlesarfaner slik at berre รฉin $N kan holde pรฅ med synfaring / opplasting $N -- andre faner mรฅ รณg ha denne skrudd pรฅ $N -- fungerar kun innanom same domene",
-
- "cut_az": "last opp filer i alfabetisk rekkefรธlge, i staden for minste-fil-fรธrst$N$Nalfabetisk kan gjere det lettare รฅ anslรฅ om alt gjekk bra, men er bittelitt treigare pรฅ fiber / LAN",
-
- "cut_nag": "meldingsvarsel nรฅr opplasting er ferdig$N(kun om nettlesarfana ikkje er synlig)",
- "cut_sfx": "lydvarsel nรฅr opplasting er ferdig$N(kun om nettlesarfanen ikkje er synlig)",
-
- "cut_mt": "raskere synfaring ved รฅ bruke heile CPU'en$N$Ndenne funksjonen nytter web-workers$Nog krev meir RAM (opptil 512 MiB ekstra)$N$Ngjer https 30% raskare, http 4.5x raskare\">mt",
-
- "cut_wasm": "bruk wasm i staden for nettlesaren sin sha512-funksjon; gjev betre yting pรฅ chrome-baserte nettlesarar, men brukar meir CPU, og eldre versjoner av chrome toler det ikkje (et opp all RAM og krรฆsjer)\">wasm",
-
- "cft_text": "ikontekst (blank ut og last siden pรฅ nytt for รฅ deaktivere)",
- "cft_fg": "farge",
- "cft_bg": "bakgrunnsfarge",
-
- "cdt_lim": "maks mengd filer รฅ vise per mappe",
- "cdt_ask": "vis knappar for รฅ laste fleire filer nederst pรฅ sida i staden for รฅ gradvis laste meir av mappea nรฅr man scroller ned",
- "cdt_hsort": "antall sorteringsreglar (<code>,sorthref</code>) som skal inkluderast nรฅr media-URL'ar genererast. Dersom denne er 0 sรฅ vil sorteringsreglar i URL'ar korkje bli generert eller lest",
-
- "tt_entree": "bytt รฅt mappehierarki$NSnarvei: B",
- "tt_detree": "bytt รฅt tradisjonell stivising$NSnarvei: B",
- "tt_visdir": "bla ned รฅt den รฅpne mappa",
- "tt_ftree": "bytt mellom filstruktur og tekstfiler$NSnarvei: V",
- "tt_pdock": "vis dei overordna mappane i eit panel",
- "tt_dynt": "รธk bredda pรฅ panelet ettersom treet utvider seg",
- "tt_wrap": "linjebryting",
- "tt_hover": "vis heile mappenamnet nรฅr musepeikaren treff mappa$N( gjer diverre at scrollhjulet fusker dersom musepeikaren ikkje finn seg i grรธfta )",
-
- "ml_pmode": "ved enden av mappa",
- "ml_btns": "knapper",
- "ml_tcode": "konvertering",
- "ml_tcode2": "konvertรฉr til",
- "ml_tint": "tint",
- "ml_eq": "audio equalizer (tonejustering)",
- "ml_drc": "compressor (volumutjevning)",
-
- "mt_loop": "spel den same songen om og om igjen\">๐",
- "mt_one": "spel kun รฉin song\">1๏ธโฃ",
- "mt_shuf": "songane i kvar mappe$Nspelast i tilfeldig rekkefรธlge\">๐",
- "mt_aplay": "prรธv รฅ starte avspeling viss linken du trykte pรฅ for รฅ รฅpne nettsida inneheld ein song-ID$N$Nviss denne deaktiverast sรฅ vil heller ikkje nettside-URL'en bli oppdatert med song-ID'er nรฅr musikk spelast, i tilfelle innstillingane skulle gรฅ tapt og nettsida lastast pรฅ ny\">aโถ",
- "mt_preload": "hent ned litt av neste song i forkant,$Nslik at pausa i overgangen blir mindre\">forsyn",
- "mt_prescan": "ved behov, bla รฅt neste mappe$Nslik at nettlesaren lar oss$Nfortsetja รฅ spele musikk\">bla",
- "mt_fullpre": "hent ned heile neste song, ikkje berre litt:$Nโ
skru pรฅ viss nettet ditt er ustabilt,$Nโ skru av viss nettet ditt er treigt\">full",
- "mt_fau": "for telefoner: forhindre at avspeling stoppar viss nettet er for treigt รฅt รฅ laste neste song i tide. Viss pรฅskrudd kan det forรฅrsake at songinfo ikkje visast korrekt i OS'et\">โ๏ธ",
- "mt_waves": "waveform seekbar:$Nvis volumkurve i avspelingsfeltet\">~s",
- "mt_npclip": "vis knappar for รฅ kopiere info om songen du hรธyrer pรฅ\">/np",
- "mt_m3u_c": "vis knapper for รฅ kopiere dei valde$Nsongene som innslag i ei m3u8-speleliste\">๐ป",
- "mt_octl": "integrering med operativsystemet (fjernkontroll, infoskjerm)\">os-ctl",
- "mt_oseek": "gje lรธyve รฅt spoling med fjernkontroll$N$Nmerk: pรฅ nokon eininger (iPhones) sรฅ vil$Ndette erstatte knappen for neste song\">spoling",
- "mt_oscv": "vis albumcover pรฅ infoskjermen\">bilde",
- "mt_follow": "bla slik at songen som spelast alltid er synleg\">๐ฏ",
- "mt_compact": "tettpakka spelarpanel\">โ",
- "mt_uncache": "prรธv denne viss ein song ikkje spelar riktig\">oppfrisk",
- "mt_mloop": "repetรฉr heile mappa\">๐ gjenta",
- "mt_mnext": "hopp รฅt neste mappe og fortsett\">๐ neste",
- "mt_mstop": "stopp avspeling\">โธ stopp",
- "mt_cflac": "konvertรฉr flac / wav-filer รฅt {0}\">flac",
- "mt_caac": "konvertรฉr aac / m4a-filer รฅt to {0}\">aac",
- "mt_coth": "konvertรฉr alt anna (men ikkje mp3) รฅt {0}\">andre",
- "mt_c2opus": "det beste valget for alle PCar og Android\">opus",
- "mt_c2owa": "opus-weba, for iOS 17.5 og nyare\">owa",
- "mt_c2caf": "opus-caf, for iOS 11 รฅt og med 17\">caf",
- "mt_c2mp3": "bra valg for steinalder-utstyr (slรฅr aldri feil)\">mp3",
- "mt_c2flac": "gir best lydkvalitet, men et nettet ditt\">flac",
- "mt_c2wav": "heilt rรฅ lydstrรธm (bruker enda meir data enn flac)\">wav",
- "mt_c2ok": "bra valg!",
- "mt_c2nd": "ikkje det fรธretrekte valget for din einheit, men funker sikkert greit",
- "mt_c2ng": "ser verkelig ikkje ut som enheiten din taklar dette formatet... men ok, vi prรธver",
- "mt_xowa": "iOS har fortsatt problem med avspeling av owa-musikk i bakgrunnen. Bruk caf eller mp3 i staden for",
- "mt_tint": "nivรฅ av bakgrunnsfarge pรฅ sรธkestripa (0-100),$Ngjer oppdateringer mindre distraherande",
- "mt_eq": "aktivรฉr tonekontroll og forsterker;$N$Nboost <code>0</code> = normal volumskala$N$Nwidth <code>1 </code> = normal stereo$Nwidth <code>0.5</code> = 50% blanding venstre-hรธgre$Nwidth <code>0 </code> = mono$N$Nboost <code>-0.8</code> & width <code>10</code> = instrumental :^)$N$Nreduserer รณg daudtid mellom songfiler",
- "mt_drc": "aktivรฉr volum-utjevning (dynamic range compressor); vil รณg aktivere tonejustering, sรฅ sett alle EQ-feltene bortsett frรฅ 'width' รฅt 0 viss du ikkje vil ha nokon EQ$N$Nfilteret vil dempe volumet pรฅ alt som er hรธgare enn TRESH dB; for kvar RATIO dB over grensa er det 1dB som treff hรธgtalarane, sรฅ standardverdiane tresh -24 og ratio 12 skal bety at volumet ikkje gjeng hรธgare enn -22 dB, slik at ein trygt kan รธke boost-verdien i equalizeren รฅt rundt 0.8, eller 1.8 kombinert med ATK 0 og RLS 90 (berre mulig i firefox; andre nettlesarar tek ikkje hรธgare RLS enn 1)$N$Nwikipedia forklarar dette mykje betre forresten",
-
- "mb_play": "lytt",
- "mm_hashplay": "spel denne songen?",
- "mm_m3u": "trykk Enter/OK for รฅ spele\ntrykk ESC/Avbryt for รฅ redigere",
- "mp_breq": "krev firefox 82+, chrome 73+, eller iOS 15+",
- "mm_bload": "lastar inn...",
- "mm_bconv": "konverterer รฅt {0}, vent litt...",
- "mm_opusen": "nettlesaren din skjรธnar ikkje aac / m4a;\nkonvertering รฅt opus er no aktivert",
- "mm_playerr": "avspeling feilet: ",
- "mm_eabrt": "Avspelingsforespรธrselen blei avbroten",
- "mm_enet": "Nettet ditt er ustabilt",
- "mm_edec": "Noko er galt med musikkfila",
- "mm_esupp": "Nettleseren din skjรธnar ikkje filtypen",
- "mm_eunk": "Ukjent feil",
- "mm_e404": "Avspeling feilet: Fil ikkje funnet.",
- "mm_e403": "Avspeling feilet: Hรธve nekta.\n\nKanskje du blei logget ut?\nPrรธv รฅ trykk F5 for รฅ laste sida pรฅ nytt.",
- "mm_e500": "Avspeling feilet: Rusk i maskineriet, sjekk serverloggen.",
- "mm_e5xx": "Avspeling feilet: ",
- "mm_nof": "finn ikkje flere songer i nรฆrheita",
- "mm_prescan": "Leitar etter neste song...",
- "mm_scank": "Fann neste song:",
- "mm_uncache": "alle songer vil lastast pรฅ nytt ved neste avspeling",
- "mm_hnf": "songen finnast ikkje lenger",
-
- "im_hnf": "bildet finnast ikkje lenger",
-
- "f_empty": 'denne mappa er tom',
- "f_chide": 'dette vil skjule kolonna ยซ{0}ยป\n\nfana for "andre innstillinger" let deg vise kolonna igjen',
- "f_bigtxt": "denne fila er heeile {0} MiB -- vis som tekst?",
- "f_bigtxt2": "vil du sjรฅ bunnen av filen i staden for? du vil da รณg sjรฅ nye linjer som blir lagd รฅt pรฅ slutten av filen i sanntid",
- "fbd_more": '',
- "fbd_all": '',
- "f_anota": "kun {0} av totalt {1} element blei markert;\nfor รฅ velje alt mรฅ du bla รฅt bunnen av mappa fรธrst",
-
- "f_dls": 'lenkane i denne mappa er no\nomgjort รฅt nedlastingsknappar',
-
- "f_partial": "For รฅ laste ned ei fil som enda ikkje er ferdig opplasta, klikk pรฅ filen som har same filnamn som denne, men uten .PARTIAL pรฅ slutten. Da vil serveren passe pรฅ at nedlastinga gรฅr bra. Derfor anbefalast det sterkt รฅ trykkje AVBRYT eller Escape-tasten.\n\nViss du verkelig รธnskjer รฅ laste ned denne .PARTIAL-filen pรฅ ein ukontrollert mรฅte, trykk OK / Enter for รฅ ignorere denne advarselen. Slik vil du hรธgst sannsynleg motta korrupt data.",
-
- "ft_paste": "Lim inn {0} filer$NSnarvei: ctrl-V",
- "fr_eperm": 'kan ikkje endre namn:\ndu har ikkje hรธve รฅt โmoveโ i denne mappa',
- "fd_eperm": 'kan ikkje slette:\ndu har ikkje hรธve รฅt โdeleteโ i denne mappa',
- "fc_eperm": 'kan ikkje klippe ut:\ndu har ikkje hรธve รฅt โmoveโ i denne mappa',
- "fp_eperm": 'kan ikkje lime inn:\ndu har ikkje hรธve รฅt โwriteโ i denne mappa',
- "fr_emore": "vel minst รฉi fil som skal fรฅ nytt namn",
- "fd_emore": "vel minst รฉi fil som skal slettast",
- "fc_emore": "vel minst รฉi fil som skal klippast ut",
- "fcp_emore": "vel minst รฉi fil som skal kopierast รฅt utklippstavla",
-
- "fs_sc": "del mappa du er i no",
- "fs_ss": "del dei valde filene",
- "fs_just1d": "du kan ikkje markere flere mapper samtidig,\neller kombinere mapper og filer",
- "fs_abrt": "โ avbryt",
- "fs_rand": "๐ฒ tilfeldig namn",
- "fs_go": "โ
opprett deling",
- "fs_name": "namn",
- "fs_src": "kjelde",
- "fs_pwd": "passord",
- "fs_exp": "varigheit",
- "fs_tmin": "min",
- "fs_thrs": "timar",
- "fs_tdays": "dagar",
- "fs_never": "for evig",
- "fs_pname": "valfri namn (blir litt tilfeldig ellers)",
- "fs_tsrc": "fil/mappe som skal delast",
- "fs_ppwd": "valfri passord",
- "fs_w8": "opprettar deling...",
- "fs_ok": "trykk Enter/OK for รฅ kopiere lenka (for CTRL-V)\ntrykk ESC/Avbryt for รฅ kun bekrefta",
-
- "frt_dec": "kan korrigere visse รธdelagte filnamn\">url-decode",
- "frt_rst": "nullstillar endringar (tilbake รฅt dei originale filnamna)\">โบ reset",
- "frt_abrt": "avbryt og lukk dette vindauget\">โ avbryt",
- "frb_apply": "IVERKSETT",
- "fr_adv": "automasjon basert pรฅ metadata
og / eller mรธnster (regulรฆre uttrykk)\">avansert",
- "fr_case": "versalfรธlsomme uttrykk\">Aa",
- "fr_win": "bytt ut bokstavane <>:"\\|?* med$Ntilsvarande som windows ikkje fรฅr panikk av\">win",
- "fr_slash": "bytt ut bokstaven / slik at den ikkje forรฅrsakar at nye mapper opprettes\">ikke /",
- "fr_re": "regex-mรธnster som kรธyrast pรฅ kvart filnamn. Grupper kan leses ut i format-feltet nedanfor, f.eks. <code>(1)</code> og <code>(2)</code> osv.",
- "fr_fmt": "inspirert av foobar2000:$N<code>(title)</code> byttast ut med songtittel,$N<code>[(artist) - ](title)</code> dropper [dette] viss artist er blank$N<code>$lpad((tn),2,0)</code> visar songnr. med 2 siffer",
- "fr_pdel": "slett",
- "fr_pnew": "lagre som",
- "fr_pname": "gje innstillingane dine eit namn",
- "fr_aborted": "avbrote",
- "fr_lold": "gamalt namn",
- "fr_lnew": "nytt namn",
- "fr_tags": "metadata for dei valde filene (kun for referanse):",
- "fr_busy": "endrar namn pรฅ {0} filer...\n\n{1}",
- "fr_efail": "endring av namn feila:\n",
- "fr_nchg": "{0} av namna blei justert pga. win og/eller ikkje /\n\nvil du fortsetja med dei nye namna som blei valde?",
-
- "fd_ok": "sletting OK",
- "fd_err": "sletting feila:\n",
- "fd_none": "ingenting blei sletta; kanskje avvist av serverkonfigurasjon (xbd)?",
- "fd_busy": "slettar {0} filer...\n\n{1}",
- "fd_warn1": "SLETT disse {0} filene?",
- "fd_warn2": "Siste sjanse! Dette kan ikkje angrast. Slett?",
-
- "fc_ok": "klipte ut {0} filer",
- "fc_warn": 'klipte ut {0} filer\n\nmen: kun denne nettlesarfana har muligheit รฅt รฅ lime dei inn ein annan plass, siden antallet filer er helt hinsides',
-
- "fcc_ok": "kopierte {0} filer รฅt utklippstavla",
- "fcc_warn": 'kopierte {0} filer รฅt utklippstavla\n\nmen: kun denne nettlesarfana har muligheit รฅt รฅ lime dei inn ein annan plass, sidan antallet filer er heilt pรฅ hi sida',
-
- "fp_apply": "bekreft og lim inn no",
- "fp_ecut": "du mรฅ klippe ut eller kopiere nokre filer / mapper fรธrst\n\nmerk: du kan gjerne jobbe pรฅ kryss av nettlesarfaner; klippe ut i รฉi fane, lime inn i ei anna",
- "fp_ename": "{0} filer kan ikkje flyttast รฅt mรฅlmappa fordi det allereie finnast filer med same namn. Gi dei nye namn nedanfor, eller gje dei eit blankt namn for รฅ hoppe over dei:",
- "fcp_ename": "{0} filer kan ikkje kopierast รฅt mรฅlmappa fordi det allereie finnast filer med same namn. Gi dei nye namn nedanfor, eller gje dei eit blankt namn for รฅ hoppe over dei:",
- "fp_emore": "det er fortsatt fleire namn som mรฅ endrast",
- "fp_ok": "flytting OK",
- "fcp_ok": "kopiering OK",
- "fp_busy": "flyttar {0} filer...\n\n{1}",
- "fcp_busy": "kopierar {0} filer...\n\n{1}",
- "fp_abrt": "avbryt...",
- "fp_err": "flytting feila:\n",
- "fcp_err": "kopiering feila:\n",
- "fp_confirm": "flytt disse {0} filene hit?",
- "fcp_confirm": "kopiรฉr disse {0} filene hit?",
- "fp_etab": 'kunne ikkje lese lista med filer frรฅ den andre nettlesarfana',
- "fp_name": "Lastar opp รฉi fil frรฅ einheita di. Velg filnamn:",
- "fp_both_m": 'kva skal limast inn her?
Enter = Flytt {0} filer frรฅ ยซ{1}ยป\nESC = Last opp {2} filer frรฅ einheita din',
- "fcp_both_m": 'kva skal limes inn her?
Enter = Kopiรฉr {0} filer frรฅ ยซ{1}ยป\nESC = Last opp {2} filer frรฅ einheita din',
- "fp_both_b": 'FlyttLast opp',
- "fcp_both_b": 'KopiรฉrLast opp',
-
- "mk_noname": "skriv inn eit namn i tekstboksa รฅt venstre fรธrst :p",
-
- "tv_load": "Lastar inn tekstfil:\n\n{0}\n\n{1}% ({2} av {3} MiB lasta ned)",
- "tv_xe1": "kunne ikkje laste tekstfil:\n\nfeil ",
- "tv_xe2": "404, Fil ikkje funne",
- "tv_lst": "tekstfiler i mappa",
- "tvt_close": "gรฅ tilbake รฅt mappa$NSnarvei: M (eller Esc)\">โ lukk",
- "tvt_dl": "last ned denne fila$NSnarvei: Y\">๐พ last ned",
- "tvt_prev": "vis fรธrre dokument$NSnarvei: i\">โฌ forr.",
- "tvt_next": "vis neste dokument$NSnarvei: K\">โฌ neste",
- "tvt_sel": "markรฉr fila ( for utklipp / sletting / ... )$NSnarvei: S\">merk",
- "tvt_edit": "redigรฉr fila$NSnarvei: E\">โ๏ธ endre",
- "tvt_tail": "overvak fila for endringar og vis nye linjer i sanntid\">๐ก fรธlg",
- "tvt_wrap": "tekstbryting\">โต",
- "tvt_atail": "hald dei nyaste linjene synlege (lรฅs รฅt botnen av sida)\">โ",
- "tvt_ctail": "skjรธn og vis terminalfargar (ansi-sekvensar)\">๐",
- "tvt_ntail": "maksgrense for antal bokstavar som skal visast i vindauget",
-
- "m3u_add1": "songen blei lagd รฅt i m3u-spelelista",
- "m3u_addn": "{0} songer blei lagde รฅt i m3u-spelelista",
- "m3u_clip": "m3u-spelelista blei kopiert รฅt utklippstavla\n\nneste steg er รฅ oppretta eit tekstdokument med filnamn som sluttar pรฅ .m3u og lime inn spelelista der",
-
- "gt_vau": "ikkje vis videofiler, berre spel lyden\">๐ง",
- "gt_msel": "markรฉr filer i staden for รฅ รฅpne dei; ctrl-klikk filer for รฅ overstyre$N$N<em>nรฅr aktiv: dobbelklikk ei fil / mappe for รฅ รฅpne</em>$N$NSnarvei: S\">markering",
- "gt_crop": "skjer ikona slik at dei passar betre\">โ",
- "gt_3x": "hรธgare opplรธysing pรฅ ikon\">3x",
- "gt_zoom": "zoom",
- "gt_chop": "trim",
- "gt_sort": "sortรฉr",
- "gt_name": "namn",
- "gt_sz": "stรธrr.",
- "gt_ts": "dato",
- "gt_ext": "type",
- "gt_c1": "redusรฉr makslengde pรฅ filnamn",
- "gt_c2": "auk makslengde pรฅ filnamn",
-
- "sm_w8": "sรธker...",
- "sm_prev": "sรธkeresultata er frรฅ eit tidlegare sรธk:\n ",
- "sl_close": "lukk sรธkeresultat",
- "sl_hits": "visar {0} treff",
- "sl_moar": "hent fleire",
-
- "s_sz": "stรธrr.",
- "s_dt": "dato",
- "s_rd": "sti",
- "s_fn": "namn",
- "s_ta": "meta",
- "s_ua": "up@",
- "s_ad": "avns.",
- "s_s1": "stรธrre enn โ MiB",
- "s_s2": "mindre enn โ MiB",
- "s_d1": "nyare enn <dato>",
- "s_d2": "eldre enn",
- "s_u1": "lasta opp etter",
- "s_u2": "og/eller fรธr",
- "s_r1": "mappaamn inneheld",
- "s_f1": "filnamn inneheld",
- "s_t1": "song-info inneheld",
- "s_a1": "konkrete eigenskapar",
-
- "md_eshow": "visar forenkla ",
- "md_off": "[๐readme] er skrudd av i [โ๏ธ] -- dokument skjult",
-
- "badreply": "Ugyldig svar frรฅ serveren",
-
- "xhr403": "403: Hรธve nekta\n\nkanskje du blei logga ut? prรธv รฅ trykk F5",
- "xhr0": "ukjend (enten nettverksproblem eller serverkrรฆsj)",
- "cf_ok": "om orsak -- liten tilfeldig kontroll, alt OK\n\nting skal fortsetja om ca. 30 sekund\n\nviss ikkje noko skjer, trykk F5 for รฅ laste sida pรฅ nytt",
- "tl_xe1": "kunne ikkje hente undermapper:\n\nfeil ",
- "tl_xe2": "404: Mappa finnast ikkje",
- "fl_xe1": "kunne ikkje hente filer i mappa:\n\nfeil ",
- "fl_xe2": "404: Mappa finnast ikkje",
- "fd_xe1": "kan ikkje opprette ny mappe:\n\nfeil ",
- "fd_xe2": "404: Den overordna mappa finnast ikkje",
- "fsm_xe1": "kunne ikkje sende melding:\n\nfeil ",
- "fsm_xe2": "404: Den overordna mappa finnast ikkje",
- "fu_xe1": "kunne ikkje hente lista med nyleg opplastede filer frรฅ serveren:\n\nfeil ",
- "fu_xe2": "404: Fila finnast ikkje??",
-
- "fz_tar": "ukomprimert gnu-tar arkiv, for linux og mac",
- "fz_pax": "ukomprimert pax-tar arkiv, litt treigare",
- "fz_targz": "gnu-tar pakket med gzip (nivรฅ 3)$N$NNB: denne er veldig treig;$Nukomprimert tar er betre",
- "fz_tarxz": "gnu-tar pakket med xz (nivรฅ 1)$N$NNB: denne er veldig treig;$Nukomprimert tar er betre",
- "fz_zip8": "zip med filnamn i utf8 (noko problematisk pรฅ windows 7 og eldre)",
- "fz_zipd": "zip med filnamn i cp437, for hรธggamle maskiner",
- "fz_zipc": "cp437 med tidlig crc32,$Nfor MS-DOS PKZIP v2.04g (oktober 1993)$N(รธker behandlingstid pรฅ server)",
-
- "un_m1": "nedanfor kan du angre / slette filer som du nyleg har lastet opp, eller avbryte ufullstendige opplastinger",
- "un_upd": "oppdater",
- "un_m4": "eller viss du vil dele nedlastings-lenkene:",
- "un_ulist": "vis",
- "un_ucopy": "kopiรฉr",
- "un_flt": "valgfritt filter: filnamn / filsti mรฅ inneholde",
- "un_fclr": "nullstill filter",
- "un_derr": 'unpost-sletting feilet:\n',
- "un_f5": 'noko gjekk galt, prรธv รฅ oppdatere lista eller trykk F5',
- "un_uf5": "om orsak, men du mรฅ laste sida pรฅ nytt (f.eks. ved รฅ trykkje F5 eller CTRL-R) fรธr denne opplastinga kan avbrytast",
- "un_nou": 'advarsel: kan ikkje vise ufullstendige opplastingar akkurat no; klikk pรฅ oppdater-lenka om litt',
- "un_noc": 'advarsel: angring av fullfรธrte opplastingar er deaktivert i serverkonfigurasjonen',
- "un_max": "visar dei fรธrste 2000 filene (bruk filteret for รฅ snevre inn)",
- "un_avail": "{0} nyleg opplasta filer kan slettast
{1} ufullstendige opplastingar kan avbrytast",
- "un_m2": "sortert etter opplastingstid; nyaste fรธrst:",
- "un_no1": "men nei, her var det jaggu ikkje noko som slettast kan",
- "un_no2": "men nei, her var det jaggu ingenting som passa overens med filteret",
- "un_next": "slett dei neste {0} filene nedanfor",
- "un_abrt": "avbryt",
- "un_del": "slett",
- "un_m3": "hentar lista med nyleg opplasta filer...",
- "un_busy": "slettar {0} filer...",
- "un_clip": "{0} lenkar kopiert รฅt utklippstavla",
-
- "u_https1": "du burde",
- "u_https2": "bytte รฅt https",
- "u_https3": "for hรธgare hastigheit",
- "u_ancient": 'nettlesaren din er prehistorisk -- mulig du burde bruke bup i staden for',
- "u_nowork": "krev firefox 53+, chrome 57+, eller iOS 11+",
- "tail_2old": "krev firefox 105+, chrome 71+, eller iOS 14.5+",
- "u_nodrop": 'nettlesaren din er for gamal รฅt รฅ laste opp filer ved รฅ drage dei inn i vindauget',
- "u_notdir": "mottok ikkje mappa!\n\nnettlesaren din er for gamal,\nprรธv รฅ drage mappa inn i vindauget i staden for",
- "u_uri": "for รฅ laste opp bilder frรฅ andre nettlesarvindauge,\nslipp bildet rett pรฅ den store last-opp-knappen",
- "u_enpot": 'bytt รฅt enkelt UI (gir sannsynleg raskere opplasting)',
- "u_depot": 'bytt รฅt snรฆsent UI (gir sannsynleg treigare opplasting)',
- "u_gotpot": 'bytta รฅt eit enklare UI for รฅ laste opp raskere,\n\ndu kan gjerne bytte tilbake altsรฅ!',
- "u_pott": "filer: {0} ferdig, {1} feilet, {2} behandlast, {3} i kรธ
",
- "u_ever": "dette er den primitive opplastaren; up2k krev minst:
chrome 21 // firefox 13 // edge 12 // opera 12 // safari 5.1",
- "u_su2k": 'dette er den primitive opplastaren; up2k er betre',
- "u_uput": 'litt raskare (uten sha512)',
- "u_ewrite": 'du har ikkje hรธve til รฅ skrive i denne mappa',
- "u_eread": 'du har ikkje hรธve til รฅ lese i denne mappa',
- "u_enoi": 'filsรธk er deaktivert i serverkonfigurasjonen',
- "u_enoow": "kan ikkje overskrive filer her (Delete-rettigheiten er nรธdvendig)",
- "u_badf": 'Disse {0} filene (av totalt {1}) kan ikkje leses, kanskje pga rettigheitsproblem i filsystemet pรฅ datamaskinen din:\n\n',
- "u_blankf": 'Disse {0} filene (av totalt {1}) er blanke / uten innhald; รธnskjer du รฅ laste dei opp uansett?\n\n',
- "u_applef": 'Disse {0} filene (av totalt {1}) er antakeleg uรธnska;\nTrykk OK/Enter for รฅ HOPPE OVER disse filene,\nTrykk Avbryt/ESC for รฅ LASTE OPP disse filene รณg:\n\n',
- "u_just1": '\nFunkar kanskje betre viss du berre tar รฉi fil om gangen',
- "u_ff_many": 'Viss du bruker Linux / MacOS / Android, sรฅ kan dette antalet filer
kanskje krรฆsje Firefox! Viss det skjer, sรฅ prรธv igjen (eller bruk Chrome).',
- "u_up_life": "Filene slettast frรฅ serveren {0}\netter at opplastingen er fullfรธrt",
- "u_asku": 'Laste opp disse {0} filene รฅt {1}',
- "u_unpt": "Du kan angre / slette opplastinga med ๐งฏ oppe รฅt venstre",
- "u_bigtab": 'Vil no vise {0} filer...\n\nDette kan krรฆsje nettlesaren din. Fortsette?',
- "u_scan": 'Les mappane...',
- "u_dirstuck": 'Nettleseren din fekk ikkje hรธve รฅt รฅ lese fรธlgande {0} filer/mapper, sรฅ dei blir hoppa over:',
- "u_etadone": 'Ferdig ({0}, {1} filer)',
- "u_etaprep": '(forberedar opplasting)',
- "u_hashdone": 'synfaring ferdig',
- "u_hashing": 'les',
- "u_hs": 'serveren tenkjer...',
- "u_started": "filene blir no lasta opp ๐",
- "u_dupdefer": "duplikat; vil bli hรฅndtert รฅt slutt",
- "u_actx": "klikk her for รฅ forhindre tap av
yting ved bytte รฅt andre vindauge/faner",
- "u_fixed": "OK! Lรธyste seg ๐",
- "u_cuerr": "kunne ikkje laste opp del {0} av {1};\nsikkert greit, fortsetjar\n\nfil: {2}",
- "u_cuerr2": "server nekta opplastinga (del {0} av {1});\nprรธver igjen senere\n\nfil: {2}\n\nerror ",
- "u_ehstmp": "prรธver igjen; se mld nederst",
- "u_ehsfin": "server nekta forespรธrselen om รฅ ferdigstille filen; prรธver igjen...",
- "u_ehssrch": "server nekta forespรธrselen om รฅ utfรธre sรธk; prรธver igjen...",
- "u_ehsinit": "server nekta forespรธrselen om รฅ begynne ei ny opplasting; prรธver igjen...",
- "u_eneths": "eit problem med nettverket gjorde at avtale om opplasting ikkje kunne inngรฅs; prรธver igjen...",
- "u_enethd": "eit problem med nettverket gjorde at filsjekk ikkje kunne utfรธrast; prรธver igjen...",
- "u_cbusy": "ventar pรฅ klarering frรฅ server etter eit lite nettverksglipp...",
- "u_ehsdf": "serveren er full!\n\nprรธver igjen regelmessig,\ni tilfelle nokon ryddar litt...",
- "u_emtleak1": "uff, det er mulig at nettlesaren din har ei minnelekkasje...\nForeslรฅr",
- "u_emtleak2": ' helst at du byttar รฅt https, eller ',
- "u_emtleak3": ' at du ',
- "u_emtleakc": 'prรธver fรธlgande:\n- trykk F5 for รฅ laste sida pรฅ nytt
- sรฅ skru av
mt brytaren under โ๏ธ innstillinger - og prรธv den same opplastinga igjen
Opplasting vil gรฅ litt treigare, men det fรฅr sรฅ vere.\nBeklager bryderiet!\n\nPS: feilen skal vere fikset i chrome v107',
- "u_emtleakf": 'prรธver fรธlgende:\n- trykk F5 for รฅ laste sida pรฅ nytt
- sรฅ skru pรฅ
๐ฅ ("enkelt UI") i opplastaren - og prรธv den same opplastingen igjen
\nPS: Firefox fiksar forhรฅpentligvis feilen ein eller annen gong',
- "u_s404": "ikkje funne pรฅ serveren",
- "u_expl": "forklar",
- "u_maxconn": "dei fleste nettlesarar tillet ikkje meir enn 6, men firefox lar deg รธke grensen med connections-per-server i about:config",
- "u_tu": 'ADVARSEL: turbo er pรฅ, avbrotne opplastingar vil muligens ikkje oppdagast og gjenopptakast; hald musepeikaren over turbo-knappen for meir info
',
- "u_ts": 'ADVARSEL: turbo er pรฅ, sรธkeresultat kan vere feil; hold musepeikaren over turbo-knappen for meir info
',
- "u_turbo_c": "turbo er deaktivert i serverkonfigurasjonen",
- "u_turbo_g": 'turbo blei deaktivert fordi du ikkje har\nhรธve รฅt รฅ sjรฅ mappeinnhold i dette volumet',
- "u_life_cfg": 'slett opplasting etter min (eller timar)',
- "u_life_est": 'opplastingen slettast ---',
- "u_life_max": 'denne mappa tillet ikkje รฅ \noppbevare filer i meir enn {0}',
- "u_unp_ok": 'opplasting kan angrast i {0}',
- "u_unp_ng": 'opplasting kan IKKE angrast',
- "ue_ro": 'du har ikkje hรธve รฅt skriving i denne mappa\n\n',
- "ue_nl": 'du er ikkje logga inn',
- "ue_la": 'du er logga inn som "{0}"',
- "ue_sr": 'du er i filsรธk-modus\n\nbytt รฅt opplasting ved รฅ klikke pรฅ forstรธrringsglaset ๐ (ved siden av den store FILSรK-knappen) og prรธv igjen\n\nsorry',
- "ue_ta": 'prรธv รฅ last opp igjen, det burde fungere no',
- "ue_ab": "den same filen er under opplasting รฅt ei anna mappe, og den mรฅ fullfรธrast der fรธr fila kan lastast opp andre plassar.\n\nDu kan avbryte og glรธyme den pรฅbegynte opplastinga ved hjelp av ๐งฏ oppe รฅt venstre",
- "ur_1uo": "OK: Fila blei lastet opp",
- "ur_auo": "OK: Alle {0} filene blei lastet opp",
- "ur_1so": "OK: Fila blei funne pรฅ serveren",
- "ur_aso": "OK: Alle {0} filene blei funne pรฅ serveren",
- "ur_1un": "Opplasting feila!",
- "ur_aun": "Alle {0} opplastingene gjekk feil!",
- "ur_1sn": "Fila finnast IKKE pรฅ serveren",
- "ur_asn": "Fann INGEN av dei {0} filene pรฅ serveren",
- "ur_um": "Ferdig;\n{0} opplastingar gjekk bra,\n{1} opplastingar gjekk feil",
- "ur_sm": "Ferdig;\n{0} filer blei funne,\n{1} filer finnast IKKJE pรฅ serveren",
-
- "lang_set": "passar det รฅ laste sida pรฅ nytt?",
- },
- "pol": {
- "tt": "Polski",
- "cols": {
- "c": "przyciski akcji",
- "dur": "czas trwania",
- "q": "jakoลฤ / bitrate",
- "Ac": "kodek audio",
- "Vc": "kodek wideo",
- "Fmt": "format / kontener",
- "Ahash": "suma kontrolna audio",
- "Vhash": "suma kontrolna wideo",
- "Res": "rozdzielczoลฤ",
- "T": "rodzaj pliku",
- "aq": "jakoลฤ / bitrate audio",
- "vq": "jakoลฤ / bitrate wideo",
- "pixfmt": "podprรณbkowanie / struktura pikseli",
- "resw": "rozdzielczoลฤ pozioma",
- "resh": "rozdzielczoลฤ pionowa",
- "chs": "kanaลy audio",
- "hz": "czฤstotliwoลฤ prรณbkowania"
- },
-
- "hks": [
- [
- "misc",
- ["ESC", "zamknij rรณลผne rzeczy"],
-
- "file-manager",
- ["G", "przeลฤ
cz widok lista / siatka"],
- ["T", "przeลฤ
cz miniaturki / ikony"],
- ["โง A/D", "wielkoลฤ miniaturki"],
- ["ctrl-K", "usuล zaznaczone"],
- ["ctrl-X", "wytnij zaznaczone do schowka"],
- ["ctrl-C", "skopiuj zaznaczone do schowka"],
- ["ctrl-V", "wklej (przenieล/skopiuj) tutaj"],
- ["Y", "pobierz zaznaczone"],
- ["F2", "zmieล nazwฤ zaznaczonych"],
-
- "file-list-sel",
- ["spacja", "przeลฤ
cz zaznaczanie plikรณw"],
- ["โ/โ", "przenieล kursor zaznaczenia"],
- ["ctrl โ/โ", "przenieล kursor i widok"],
- ["โง โ/โ", "wybierz poprzedni/nastฤpny plik"],
- ["ctrl-A", "wybierz wszystkie pliki/foldery"],
- ], [
- "navigation",
- ["B", "przeลฤ
cz ลcieลผkฤ nawigacyjnฤ
/ panel nawigacyjny"],
- ["I/K", "poprzedni/nastฤpny folder"],
- ["M", "folder nadrzฤdny (lub zwiล aktualny)"],
- ["V", "przeลฤ
cz foldery / pliki tekstowe w panelu nawigacyjnym"],
- ["A/D", "rozmiar panelu nawigacyjnego"],
- ], [
- "audio-player",
- ["J/L", "poprzedni/nastฤpny utwรณr"],
- ["U/O", "przejdลบ 10 sek. do tyลu/przodu"],
- ["0..9", "przeskocz do 0%..90%"],
- ["P", "odtwรณrz/pauza (rรณwnieลผ rozpoczyna)"],
- ["S", "wybierz odtwarzany utwรณr"],
- ["Y", "pobierz utwรณr"],
- ], [
- "image-viewer",
- ["J/L, โ/โ", "poprzednie/nastฤpne zdjฤcie"],
- ["Home/End", "pierwsze/ostatnie zdjฤcie"],
- ["F", "peลny ekran"],
- ["R", "obrรณฤ zgodnie ze wskaz. zegara"],
- ["โง R", "obrรณฤ przeciwnie do ruchu wskaz. zegara"],
- ["S", "wybierz zdjฤcie"],
- ["Y", "pobierz zdjฤcie"],
- ], [
- "video-player",
- ["U/O", "przejdลบ 10 sek. do tyลu/przodu"],
- ["P/K/Spacja", "odtwรณrz/pauza"],
- ["C", "odtwarzaj nastฤpne po zakoลczeniu"],
- ["V", "odtwarzaj w pฤtli"],
- ["M", "wycisz"],
- ["[ i ]", "ustaw opรณลบnienie pฤtli"],
- ], [
- "textfile-viewer",
- ["I/K", "poprzedni/nastฤpny plik"],
- ["M", "zamknij plik"],
- ["E", "edytuj plik"],
- ["S", "wybierz plik (do wyciฤcia/skopiowania/zmiany nazwy)"],
- ]
- ],
-
- "m_ok": "OK",
- "m_ng": "Anuluj",
-
- "enable": "Wลฤ
cz",
- "danger": "NIEBEZPIECZEลSTWO",
- "clipped": "skopiowano do schowka",
-
- "ht_s1": "sekunda",
- "ht_s2": "sekund(y)",
- "ht_m1": "minuta",
- "ht_m2": "minuty",
- "ht_h1": "godzina",
- "ht_h2": "godziny",
- "ht_d1": "dzieล",
- "ht_d2": "dni",
- "ht_and": " i ",
-
- "goh": "panel sterowania",
- "gop": 'poprzedni plik/folder">poprzedni',
- "gou": 'nadrzฤdny folder">w gรณrฤ',
- "gon": 'nastฤpny folder">nastฤpny',
- "logout": "Wyloguj ",
- "login": "Zaloguj siฤ", //m
- "access": " dostฤp",
- "ot_close": "zamknij pod-menu",
- "ot_search": "szukaj plikรณw po atrybutach, ลcieลผce / nazwie, tagach muzyki, bฤ
dลบ dowolnej ich kombinacji$N$N<code>foo bar</code> = musi zawieraฤ ยซfooยป oraz ยซbarยป,$N<code>foo -bar</code> = musi zawieraฤ ยซfooยป, lecz nie ยซbarยป,$N<code>^yana .opus$</code> = musi zaczynaฤ siฤ od ยซyanaยป i byฤ plikiem ยซopusยป$N<code>"try unite"</code> = zawieraฤ dokลadnie ยซtry uniteยป$N$Nformatem daty jest iso-8601, czyli$N<code>2009-12-31</code> lub <code>2020-09-12 23:30:00</code>",
- "ot_unpost": "unpost: usuล ostatnio przesลane pliki lub przerwij przesyลanie",
- "ot_bup": "bup: podstawowe przesyลanie danych, wspiera nawet netscape 4.0",
- "ot_mkdir": "mkdir: tworzy nowy folder",
- "ot_md": "new-md: tworzy nowy dokument markdown",
- "ot_msg": "msg: wysyลa wiadomoลฤ do loga serwera",
- "ot_mp": "opcje odtwarzacza multimediรณw",
- "ot_cfg": "opcje konfiguracji",
- "ot_u2i": 'up2k: przesyลa pliki (jeลผeli masz dostฤp do zapisu) lub uruchomia tryb wyszukiwania, aby sprawdziฤ czy juลผ istniejฤ
na serwerze$N$Nprzesyลanie moลผna wznowiฤ, jest wielowฤ
tkowe i znaczniki czasu sฤ
zachowywane, lecz zuลผywa wiฤcej procesora niลผ [๐] (podstawowe przesyลanie)
podczas przesyลania ta ikona zamienia siฤ w wskaลบnik postฤpu!',
- "ot_u2w": 'up2k: przesyลa pliki z moลผliwoลciฤ
wznowienia (moลผna zamknฤ
ฤ przeglฤ
darkฤ i dokoลczyฤ przesyลanie plikรณw pรณลบniej)$N$Njest wielowฤ
tkowy i zachowuje znaczniki czasu plikรณw, lecz zuลผywa wiฤcej procesora od [๐] (podstawowego przesyลania)
podczas przesyลania ta ikona zamienia siฤ w wskaลบnik postฤpu!',
- "ot_noie": 'Uลผyj przeglฤ
darki Chrome / Firefox / Edge',
-
- "ab_mkdir": "stwรณrz folder",
- "ab_mkdoc": "stwรณrz dok. markdown",
- "ab_msg": "wyลlij wiad. do logรณw serwera",
-
- "ay_path": "przejdลบ do folderรณw",
- "ay_files": "przejdลบ do plikรณw",
-
- "wt_ren": "zmieล nazwฤ zaznaczonych elementรณw$NSkrรณt: F2",
- "wt_del": "usuล zaznaczone elementy$NSkrรณt: ctrl-K",
- "wt_cut": "wytnij zaznaczone elementy <small>(aby wkleiฤ gdzie indziej)</small>$NSkrรณt: ctrl-X",
- "wt_cpy": "skopiuj zaznaczone pliki do schowka$N(aby wkleiฤ gdzie indziej)$NSkrรณt: ctrl-C",
- "wt_pst": "wklej wczeลniej wyciฤte/skopiowane zaznaczenie$NSkrรณt: ctrl-V",
- "wt_selall": "zaznacz wszystko$NHotkey: ctrl-A (when file focused)",
- "wt_selinv": "odwrรณฤ zaznaczenie",
- "wt_zip1": "pobierz folder jako archiwum",
- "wt_selzip": "pobierz zaznaczone jako archiwum",
- "wt_seldl": "pobierz zaznaczenie jako oddzielne pliki$NSkrรณt: Y",
- "wt_npirc": "skopiuj informacje o utworze w formacie irc",
- "wt_nptxt": "skopiuj informacje o utworze jako zwykลy tekst",
- "wt_m3ua": "dodaj to playlisty m3u (kliknij ๐ปcopy kliknij)",
- "wt_m3uc": "skopiuj playlistฤ m3u do schowka",
- "wt_grid": "przeลฤ
cz widok siatki / listy$NSkrรณt: G",
- "wt_prev": "poprzeni utwรณr$NSkrรณt: J",
- "wt_play": "odtwรณrz / pauza$NSkrรณt: P",
- "wt_next": "nastฤpny utwรณr$NSkrรณt: L",
-
- "ul_par": "przesyลane rรณwnolegle:",
- "ut_rand": "losuj nazwy plikรณw",
- "ut_u2ts": "kopiuj znacznik ostatniej modyfikacji$Nz twojego systemu plikรณw na serwer\">๐
",
- "ut_ow": "nadpisywaฤ istniejฤ
ce pliki na serwerzฤ?$N๐ก๏ธ: nigdy (wygeneruje nowฤ
nazwฤ)$N๐: nadpisz jeลli pliki na serwerze sฤ
starsze niลผ przesyลane$Nโป๏ธ: zawsze nadpisuj jeลli zawartoลฤ plikรณw siฤ rรณลผni",
- "ut_mt": "hashuj inne pliki podczas przesyลania$N$Nmoลผna wyลฤ
czyฤ w przypadku wystฤ
pienia wฤ
skiego gardลa na CPU lub HDD",
- "ut_ask": 'pytaj o potwierdzenie rozpoczฤcia przesyลania">๐ญ',
- "ut_pot": "przyspiesz przesyลanie na sลabszych urzฤ
dzeniach,$Nupraszczajฤ
c interfejs",
- "ut_srch": "nie przesyลaj plikรณw, jedynie sprawdลบ czy istniejฤ
$Njuลผ na serwerze (przeskanuje wszystkie foldery dostฤpne do odczytu)",
- "ut_par": "zatrzymuje przesyลanie jeลli wynosi 0$N$Nzwiฤksz w przypadku jeลli twoja sieฤ jest wolna / ma duลผe opรณลบnienia$N$Nustaw wartoลฤ 1 w sieci lokalnej lub w przypadku wolnego dysku serwerowego",
- "ul_btn": "upuลฤ pliki / foldery
tutaj (lub kliknij mnie)",
- "ul_btnu": "P R Z E ล L I J",
- "ul_btns": "S Z U K A J",
-
- "ul_hash": "hashowanie",
- "ul_send": "przesyลanie",
- "ul_done": "gotowe",
- "ul_idle1": "nic siฤ jeszcze nie przesyลa",
- "ut_etah": "ลrednia prฤdkoลฤ <em>hashowania</em> i przewidywany czas do koลca",
- "ut_etau": "ลrednia prฤdkoลฤ <em>przesyลania</em> i przewidywany czas do koลca",
- "ut_etat": "ลrednia prฤdkoลฤ <em>ogรณlna</em> i przewidywany czas do koลca",
-
- "uct_ok": "zakoลczone pomyลlnie",
- "uct_ng": "zakoลczono niepowodzeniem (odrzucono, nie znaleziono, itp.)",
- "uct_done": "zakoลczono z bลฤdami",
- "uct_bz": "w trakcie (oblicznie sumy kontrolnej, przesyลanie)",
- "uct_q": "oczekujฤ
ce",
-
- "utl_name": "nazwa pliku",
- "utl_ulist": "lista",
- "utl_ucopy": "kopia",
- "utl_links": "linki",
- "utl_stat": "status",
- "utl_prog": "postฤp",
-
- // keep short:
- "utl_404": "404",
- "utl_err": "BลฤD",
- "utl_oserr": "bลฤ
d OS",
- "utl_found": "znaleziono",
- "utl_defer": "opรณลบnij",
- "utl_yolo": "YOLO",
- "utl_done": "gotowe",
-
- "ul_flagblk": "pliki zostaลy zakolejkowane,
lecz przesyลanie up2k juลผ trwa (w innej zakลadce),
oczekujฤ na zakoลczenie",
- "ul_btnlk": "przeลฤ
cznik zablokowany przez konfiguracjฤ serwera",
-
- "udt_up": "Przeลlij",
- "udt_srch": "Szukaj",
- "udt_drop": "upuลฤ tutaj",
-
- "u_nav_m": 'co my tu mamy?
Enter = Pliki (jeden lub wiecej)\nESC = Jeden folder (wลฤ
cznie z podfolderami)',
- "u_nav_b": 'PlikiJeden folder',
-
- "cl_opts": "przeลฤ
czniki",
- "cl_themes": "motyw",
- "cl_langs": "jฤzyk",
- "cl_ziptype": "pobieranie folderรณw",
- "cl_uopts": "przeลฤ
czniki przesyลania (up2k)",
- "cl_favico": "favicon (ikona w przeglฤ
darce)",
- "cl_bigdir": "duลผe foldery",
- "cl_hsort": "#sortowanie",
- "cl_keytype": "notacja klucza", // not sure
- "cl_hiddenc": "ukryte kolumny",
- "cl_hidec": "ukryj",
- "cl_reset": "zresetuj",
- "cl_hpick": "kliknij nagลรณwki kolumn, aby ukryฤ je w tabeli niลผej",
- "cl_hcancel": "ukrywanie kolumn przerwane",
-
- "ct_grid": '็ฐ siatka',
- "ct_ttips": 'โ โก โ">โน๏ธ podpowiedzi',
- "ct_thumb": 'w widoku siatki, przeลฤ
cz ikony i miniaturki$NSkrรณt: T">๐ผ๏ธ miniaturki',
- "ct_csel": 'uลผyj CTRL i SHIFT do wybierania plikรณw w widoku siatki">wybierz',
- "ct_ihop": 'przejdลบ do ostatniego pliku po zamkniฤciu przeglฤ
darki obrazรณw">gโฎฏ',
- "ct_dots": 'pokaลผ ukryte pliki (jeลli pozwala serwer)">ukryte',
- "ct_qdel": 'pytaj o potwierdzenie przy usuwaniu tylko raz">pyt. us.',
- "ct_dir1st": 'pokazuj foldery na poczฤ
tku">๐ najpierw',
- "ct_nsort": 'naturalne sortowanie (dla numerowanych plikรณw)">nsort',
- "ct_utc": 'pokaลผ wszystkie daty/czas w UTC">UTC',
- "ct_readme": 'pokazuj README.md w folderach">๐ readme',
- "ct_idxh": 'pokazuj plik index.html zamiast zawartoลci folderu">htm',
- "ct_sbars": 'pokazuj paski przewijania">โ',
-
- "cut_umod": "uaktualnij znacznik ostatniej modyfikacji pliku, tak aby pasowaล do pliku lokalnego jeลผeli plik juลผ istnieje na serwerze (wymaga dostฤpu zapisu i usuwania)\">๐
ponownie",
-
- "cut_turbo": "przycisk โraz siฤ ลผyjeโ, raczej NIE POWINIENEล tego wลฤ
czaฤ:$N$Nuลผywaj jeลli przesyลano ogromnฤ
liczbฤ plikรณw i z jakiegoล powodu musisz przesลaฤ pliki ponownie, kontynuujฤ
c jak najszybciej$N$Nzamienia sprawdzanie sumy kontrolnej plikรณw prostym "czy ten plik jest tego samego rozmiaru jak ten na serwerze?" wiฤc jeลli pliki rรณลผniฤ
siฤ zawartoลciฤ
, ale sฤ
tego samego rozmiaru, NIE ZOSTANฤ przesลane ponownie$N$Nta opcja powinna zostaฤ wyลฤ
czona po zakoลczeniu przesyลania, i potem "przesลaฤ" te same pliki ponownie w celu weryfikacji\">turbo",
-
- "cut_datechk": "przy wyลฤ
czonym przycisku turbo nic nie robi$N$Nleciutko zmniejsza czynnik โraz siฤ ลผyjeโ; dodatkowo sprawdza czy znaczniki modyfikacji pliku przesyลanego zgadzajฤ
siฤ z serwerem$N$Nteorytycznie powinno zลapaฤ to wiฤkszoลฤ niedokoลczonych / uszkodzonych plikรณw, lecz nie jest zamiennikiem wykonania ponownego sprawdzenia bez wลฤ
czonego trybu turbo\">spr-daty",
-
- "cut_u2sz": "rozmiar (w MiB) kaลผdego kawaลka do przesลania; wiฤksze wartoลci szybciej latajฤ
po Atlantyku. Mniejsze wartoลci dziaลajฤ
lepiej na bardzo niestabilnych poลฤ
czeniach (neostrada?)",
-
- "cut_flag": "zapewnia, ลผe tylko jedna karta przesyลa dane w danym momencie$N -- opcja musi byฤ wลฤ
czona na innych kartach $N - dotyczy tylko kart w tej samej domenie",
-
- "cut_az": "przesyลa pliki w kolejnoลci alfabetycznej, zamiast rozpoczฤ
ฤ od najmniejszego pliku$N$Nkolejnoลฤ alfabetyczna moลผe uลatwiฤ oszacowanie, co mogลo pรณjลฤ nie tak na serwerze, lecz lekko spowalnia przesyลanie po ลwiatลowodzie lub w sieci lokalnej",
-
- "cut_nag": "powiadomienie systemowe po zakoลczeniu przesyลania$N(tylko jeลli przeglฤ
darka lub karta nie jest aktywna)",
- "cut_sfx": "sygnaล dลบwiฤkowy po zakoลczeniu przesyลania$N(tylko jeลli przeklฤ
darka lub karta nie jest aktywna)",
-
- "cut_mt": "uลผywaj wielowฤ
tkowoลci, aby przyspieszyฤ obliczanie sumy kontrolnej plikรณw$N$Nuลผywa web workerรณw i wymaga$Nwiฤcej pamiฤci RAM (do 512 MiB)$N$Nprzyspiesza https o 30% i http 4,5-krotnie\">ww",
-
- "cut_wasm": "uลผywaj WASM zamiast wbudowanego hashera przeglฤ
darki; zwiฤksza prฤdkoลฤ na Chrome'o-pochodnych przeglฤ
darkach, zwiฤkszajฤ
c zuลผycie procesora, ponadto wiele starszych wersji Chrome'a zawiera bลฤdy powodujฤ
ce zeลผarcie caลej pamiฤci RAM komputera i przymusowe zamkniฤcie przeglฤ
darki jeลผeli ta opcja jest wลฤ
czona\">wasm",
-
- "cft_text": "tekst favicon (aby wyลฤ
czyฤ, usuล zawartoลฤ i przeลaduj stronฤ)",
- "cft_fg": "kolor tekstu",
- "cft_bg": "kolor tลa",
-
- "cdt_lim": "maksymalna liczba plikรณw do pokazania na raz w folderze",
- "cdt_ask": "przy przewijaniu w dรณล,$Nzapytaj co robiฤ,$Nzamiast wczytywaฤ kolejne pliki",
- "cdt_hsort": "ile zasad sortowania (<code>,sorthref</code>) zawieraฤ w generowanych linkach multimediรณw. Wartoลฤ 0 sprawi, ลผe zasady sortowania zawarte w linkach multimediรณw przy otwarciu rรณwnieลผ bฤdฤ
ignorowane",
-
- "tt_entree": "pokaลผ panel nawigacyjny (panel boczny z drzewem folderรณw)$NSkrรณt: B",
- "tt_detree": "pokaลผ ลlad nawigacyjny$NSkrรณt: B",
- "tt_visdir": "przewiล do wybranego folderu",
- "tt_ftree": "przeลฤ
cz drzewo folderรณw / pliki tekstowe$NSkrรณt: V",
- "tt_pdock": "pokaลผ foldery nadrzฤdne w przypiฤtym u gรณry panelu",
- "tt_dynt": "rozszerzaj panel wraz z drzewem",
- "tt_wrap": "zawijaj tekst",
- "tt_hover": "pokazuj za dลugie linie po najechaniu kursorem$N( psuje przewijanie gdy $N kursor nie jest w lewym marginesie )",
-
- "ml_pmode": "na koลcu folderu...",
- "ml_btns": "komendy",
- "ml_tcode": "transkoduj",
- "ml_tcode2": "transkoduj do",
- "ml_tint": "odcieล",
- "ml_eq": "korektor dลบwiฤku (equalizer)",
- "ml_drc": "kompresor zasiฤgu dynamiki",
-
- "mt_loop": "pฤtla/powtarzaj jeden utwรณr\">๐",
- "mt_one": "zatrzymaj po jednym utworze\">1๏ธโฃ",
- "mt_shuf": "odtwarzaj losowo w kaลผdym folderze\">๐",
- "mt_aplay": "autoodtwarzanie po klikniฤciu linku do tego serwera, zawierajฤ
cego identyfikator utworu$N$Nwyลฤ
czenie tej opcji zapobiegnie aktualizowaniu adresu strony podczas odtwarzania muzyki, aby zapobiec autoodtwarzaniu przy utracie ustawieล\">aโถ",
- "mt_preload": "rozpocznij ลadowanie kolejnego utworu blisko koลca aktualnego w celu uzyskania odtwarzania bez przerw\">preload",
- "mt_prescan": "przechodzi do nastฤpnego folderu przed zakoลczeniem ostatniego utworu,$Naby udobruchaฤ przeglฤ
darkฤ,$Nลผeby nie zatrzymaลa odtwarzania\">naw",
- "mt_fullpre": "prรณbuj zbuforowaฤ caลy utwรณr;$Nโ
wลฤ
cz na niestabilnych poลฤ
czeniach,$Nโ wyลฤ
cz na wolnych poลฤ
czeniach\">peลnebuf",
- "mt_fau": "nie zatrzymuj muzyki jeลli nastฤpna piosenka bฤdzie siฤ zbyt wolno buforowaฤ na telefonach (moลผe sprawiฤ, ลผe tagi bฤdฤ
siฤ niepoprawnie wyลwietlaฤ)\">โ๏ธ",
- "mt_waves": "falisty pasek:$Npokazuj amplitudฤ dลบwiฤku w pasku utworu\">~s",
- "mt_npclip": "pokaลผ przyciski kopiowania aktualnie odtwarzanego utworu\">/np",
- "mt_m3u_c": "pokaลผ przyciski kopiowania$Nwybranych piosenek jako playlista m3u8\">๐ป",
- "mt_octl": "integracja z systemem operacyjnym (przyciski multimedialne / informacje o utworze)\">os-int",
- "mt_oseek": "zezwรณl na przewijanie utworu poprzez integracjฤ z systemem$N$Nuwaga: na niektรณrych urzฤ
dzeniach (iPhone'y),$Nzamienia przycisk nastฤpnej piosenki\">seek",
- "mt_oscv": "pokaลผ okลadkฤ albumu w widoku systemu\">okลadka",
- "mt_follow": "podฤ
ลผaj za odtwarzanym utworem przewijajฤ
c widok\">๐ฏ",
- "mt_compact": "kompaktowe sterowanie\">โ",
- "mt_uncache": "wyczyลฤ pamiฤฤ podrฤcznฤ
(sprรณbuj jeลli przeglฤ
darka$Nzachowaลa zepsutฤ
kopiฤ utworu, przez co nie odtwarza siฤ ona)\">uncache",
- "mt_mloop": "odtwarzaj utwory w folderze w pฤtli\">๐ loop",
- "mt_mnext": "wczytaj nastฤpny folder i kontynuuj\">๐ next",
- "mt_mstop": "zatrzymaj odtwarzanie\">โธ stop",
- "mt_cflac": "przekonwertuj format flac / wav na {0}\">flac",
- "mt_caac": "przekonwertuj format aac / m4a na {0}\">aac",
- "mt_coth": "przekonwertuj wszystkie inne formaty (nie bฤdฤ
ce mp3) na {0}\">oth",
- "mt_c2opus": "najlepszy wybรณr dla komputerรณw, laptopรณw i urzฤ
dzeล z androidem\">opus",
- "mt_c2owa": "opus-weba, dla iOS 17.5 i nowszych\">owa",
- "mt_c2caf": "opus-caf, dla iOS 11 do 17\">caf",
- "mt_c2mp3": "uลผywaj na bardzo starych urzฤ
dzeniach\">mp3",
- "mt_c2ok": "cudownie, dobry wybรณr",
- "mt_c2nd": "ten format nie jest rekomendowany dla twojego urzฤ
dzenia, ale nadal jest w porzฤ
dku",
- "mt_c2ng": "wyglฤ
da na to, ลผe to urzฤ
dzenie nie wspiera tego formatu, lecz sprรณbujmy i tak",
- "mt_xowa": "iOS zawiera bลฤdy uniemoลผliwiajฤ
ce odtwarzanie w tle uลผywajฤ
c tego formatu; wybierz caf lub mp3",
- "mt_tint": "jasnoลฤ tลa (0-100) paska,$Naby zmniejszyฤ widocznoลฤ buforowania",
- "mt_eq": "wลฤ
cza korektor dลบwiฤku (equalizer) i kontrolฤ wzmocnienia dลบwiฤku;$N$Nboost <code>0</code> = standardowa gลoลnoลฤ 100% (niezmodyfikowana)$N$Nwidth <code>1 </code> = standardowe stereo (niezmodyfikowane)$Nwidth <code>0.5</code> = 50% crossfeed lewo-prawo$Nwidth <code>0 </code> = mono$N$Nboost <code>-0.8</code> & width <code>10</code> = usuwanie wokalu :^)$N$Nwลฤ
czenie korektora sprawia, ลผe albumy bezprzerwowe sฤ
w peลni bez przerw, wiฤc jeลli jest to dla ciebie waลผne, zostaw wszystko na 0 (poza width = 1)",
- "mt_drc": "wลฤ
cza kompresor zakresu dynamiki (normalizacja gลoลnoลci); wลฤ
cza rรณwnieลผ korektor w celu zbalansowania tego spaghetti, wiฤc ustaw wszystkie opcje korektora, oprรณcz 'width',na 0, jeลli go nie chcesz$N$Nobniลผa gลoลnoลฤ audio nad THRESHOLD (prรณg) dB; dla kaลผdego RATIO (wspรณลczynnika) dB, bฤdฤ
cego ponad THRESHOLDem jest 1 dB wyjลcia, wiฤc domyลlne wartoลci progu -24 i wspรณลczynnika 12 znaczฤ
, ลผe nigdy nie powinno byฤ gลoลniej niลผ -22 dB i bezpieczne jest zwiฤkszenie wzmocnienia korektora do 0.8, lub nawet 1.8 z ATK 0 i ogromnym RLS, jak 90 (dziaลa tylko na firefoxie, inne przeglฤ
darki majฤ
limit RLS 1)$N$N(na wikipedii tลumaczฤ
to duลผo lepiej)",
-
- "mb_play": "odtwรณrz",
- "mm_hashplay": "odtworzyฤ ten plik audio?",
- "mm_m3u": "naciลnij Enter/OK, aby odtworzyฤ\nnaciลnij ESC/Anuluj, aby edytowaฤ",
- "mp_breq": "wymagany jest Firefox 82+, Chrome 73+ lub iOS 15+",
- "mm_bload": "wczytywanie...",
- "mm_bconv": "konwertowanie do {0}, proszฤ czekaฤ...",
- "mm_opusen": "ta przeglฤ
darka nie moลผe odtwarzaฤ plikรณw aac / m4a;\ntranskodowanie do formatu opus wลฤ
czone",
- "mm_playerr": "odtwarzanie nie powiodลo siฤ: ",
- "mm_eabrt": "Odtwarzanie zostaลo przerwane",
- "mm_enet": "Poลฤ
czenie z internetem jest sลabe",
- "mm_edec": "Ten plik wydaje siฤ uszkodzony??",
- "mm_esupp": "Twoja przeglฤ
darka nie rozumie tego formatu audio",
- "mm_eunk": "Nieznany bลฤ
d",
- "mm_e404": "Nie moลผna odtworzyฤ; bลฤ
d 404: Nie znaleziono pliku.",
- "mm_e403": "Nie moลผna odtworzyฤ; bลฤ
d 403: Odmowa dostฤpu.\n\nSprรณbuj przeลadowaฤ stronฤ (F5), moลผe ciฤ wylogowaลo",
- "mm_e500": "Nie moลผna odtworzyฤ; bลฤ
d 500: Sprawdลบ logi serwera.",
- "mm_e5xx": "Nie moลผna odtworzyฤ; bลฤ
d serwera",
- "mm_nof": "nie znaleziono wiฤcej plikรณw audio",
- "mm_prescan": "Szukanie kolejnego utworu...",
- "mm_scank": "Znaleziono nastฤpnฤ
piosenkฤ:",
- "mm_uncache": "wyczyszczono pamiฤฤ podrฤcznฤ
; wszystkie utwory zostanฤ
pobrane ponownie przy nastฤpnym odtworzeniu",
- "mm_hnf": "ten utwรณr juลผ nie istnieje",
-
- "im_hnf": "ten obraz juลผ nie istnieje",
-
- "f_empty": 'ten folder jest pusty',
- "f_chide": 'schowa kolumnฤ ยซ{0}ยป\n\nkolumny moลผna ponownie pokazaฤ w zakลadce ustwaieล',
- "f_bigtxt": "ten plik waลผy {0} MiB -- na pewno pokazaฤ jako tekst?",
- "f_bigtxt2": "odczytaฤ jedynie koniec pliku? wลฤ
czy rรณwnieลผ ลledzenie, pokazujฤ
c nowo-dodane linie tekstu w czasie rzeczywistym",
- "fbd_more": '',
- "fbd_all": '',
- "f_anota": "{0} z {1} elementรณw zostaลo wybranych;\naby pokazaฤ caลy folder, zjedลบ na dรณล",
-
- "f_dls": 'linki do plikรณw w aktualnym folderze\nzostaลy zmienione w linki pobierania',
-
- "f_partial": "Aby bezpiecznie pobraฤ plik, ktรณry aktualnie jest przesyลany, wybierz plik o tej samej nazwie, lecz bez rozszerzenia .PARTIAL. ลปeby to zrobiฤ, naciลnij ANULUJ lub klawisz ESC.\n\nWciลniฤcie OK / Enter zignoruje to ostrzeลผenie i pobierze plik tymczasowy .PARTIAL, ktรณry prawie z pewnoลciฤ
bฤdzie zepsuty",
-
- "ft_paste": "wklej {0} elementรณw$NSkrรณt: ctrl-V",
- "fr_eperm": 'nie moลผna zmieniฤ nazwy:\nnie posiadasz uprawnienia โmoveโ w tym folderze',
- "fd_eperm": 'nie moลผna usunฤ
ฤ:\nnie posiadasz uprawnienia โdeleteโ w tym folderze',
- "fc_eperm": 'nie moลผna wyciฤ
ฤ:\nnie posiadasz uprawnienia โmoveโ w tym folderze',
- "fp_eperm": 'nie moลผna wkleiฤ:\nnie posiadasz uprawnienia โwriteโ w tym folderze',
- "fr_emore": "wybierz przynajmniej jeden element do zmiany nazwy",
- "fd_emore": "wybierz przynajmniej jeden element do usuniฤcia",
- "fc_emore": "wybierz przynajmniej jeden element do wyciฤcia",
- "fcp_emore": "wybierz przynajmniej jeden element do skopiowania",
-
- "fs_sc": "udostฤpnij ten folder",
- "fs_ss": "udostฤpnij zaznaczone pliki",
- "fs_just1d": "nie moลผna wybraฤ wiฤcej niลผ jednego folderu,\nani mieszaฤ plikรณw i folderรณw w jednym zaznaczeniu",
- "fs_abrt": "โ przerwij",
- "fs_rand": "๐ฒ losuj nazwฤ",
- "fs_go": "โ
stwรณrz udostฤpnienie",
- "fs_name": "nazwa",
- "fs_src": "ลบrรณdลo",
- "fs_pwd": "hasลo",
- "fs_exp": "wygaลniฤcie",
- "fs_tmin": "min",
- "fs_thrs": "godz.",
- "fs_tdays": "dni",
- "fs_never": "na zawsze",
- "fs_pname": "opcjonalna nazwa linku; zostanie wylosowana jeลli pusta",
- "fs_tsrc": "plik lub folder do udostฤpnienia",
- "fs_ppwd": "hasลo (opcjonalnie)",
- "fs_w8": "udostฤpnianie...",
- "fs_ok": "naciลnij Enter/OK, aby skopiowaฤ do schowka\nnaciลnij ESC/Anuluj, aby zamknฤ
ฤ",
-
- "frt_dec": "moลผe naprawiฤ niektรณre zepsute nazwy plikรณw\">dekoduj-url",
- "frt_rst": "zresetuj zmodyfikowane nazwy plikรณw do oryginalnych\">โบ zresetuj",
- "frt_abrt": "przerwij i zamknij to okno\">โ anuluj",
- "frb_apply": "ZASTOSUJ ZMIANฤ NAZWY",
- "fr_adv": "zmiana nazwy hurtowa / metadanych / wzorcem\">zaawansowane",
- "fr_case": "rozrรณลผnianie wielkoลci liter w regex\">wlit",
- "fr_win": "nazwy bezpieczne dla systemu Windows; zamienia symbole <>:"\\|?* na japoลskie odpowiedniki\">win",
- "fr_slash": "zamienia / symbolem, ktรณry nie tworzy nowych folderรณw\">brak /",
- "fr_re": "wzorzec wyszukiwania regex stosowany do oryginalnych nazw plikรณw; do grup przechwytywania moลผna siฤ odwoลaฤ w polu formatu poniลผej, np. <code>(1)</code> i <code>(2)</code> itd.",
- "fr_fmt": "inspirowane programem foobar2000:$N<code>(title)</code> zostaje zamienione na tytuล utworu,$N<code>[(artist) - ](title)</code> pomija [tฤ
] czฤลฤ jeลli pole artysty jest puste$N<code>$lpad((tn),2,0)</code> wyrรณwnuje numer utworu do 2 cyfr (np. 01, 06, 09, 16)",
- "fr_pdel": "usuล",
- "fr_pnew": "zapisz jako",
- "fr_pname": "podaj nazwฤ nowego szablonu",
- "fr_aborted": "anulowano",
- "fr_lold": "poprzednia nazwa",
- "fr_lnew": "nowa nazwa",
- "fr_tags": "znaczniki dla wybranych plikรณw (tylko do odczytu, w celach informacyjnych):",
- "fr_busy": "zmienianie nazwy {0} plikรณw...\n\n{1}",
- "fr_efail": "zmiana nazwy zakoลczona niepowodzeniem:\n",
- "fr_nchg": "{0} nowych nazw zostaลo zmienionych przez opcje win i/lub brak /\n\nKontynuowaฤ ze zmienionymi nazwami?",
-
- "fd_ok": "usuniฤto",
- "fd_err": "usuwanie zakoลczone niepowodzeniem:\n",
- "fd_none": "nie usuniฤto nic; usuniฤcie mogลo zostaฤ zablokowane przez konfiguracjฤ serwera (xbd)?",
- "fd_busy": "usuwanie {0} elementรณw...\n\n{1}",
- "fd_warn1": "USUNฤฤ {0} elementรณw?",
- "fd_warn2": "OSTATNIA SZANSA! Tej operacji nie da siฤ cofnฤ
ฤ. Usunฤ
ฤ?",
-
- "fc_ok": "wyciฤto {0} elementรณw",
- "fc_warn": 'wyciฤto {0} elementรณw,\n\nlecz moลผna je wkleiฤ tylko w tej karcie\n(ze wzglฤdu na ogromnฤ
iloลฤ wybranych elementรณw)',
-
- "fcc_ok": "skopiowano {0} elementรณw do schowka",
- "fcc_warn": 'skopiowano {0} elementรณw,\n\nlecz moลผna je wkleiฤ tylko w tej karcie\n(ze wzglฤdu na ogromnฤ
iloลฤ wybranych elementรณw)',
-
- "fp_apply": "zastosuj te nazwy",
- "fp_ecut": "najpierw wytnij lub skopiuj pliki / foldery, aby je wkleiฤ / przenieลฤ\n\nuwaga: moลผna wycinaฤ / wklejaฤ pomiฤdzy rรณลผnymi kartami przeglฤ
darki",
- "fp_ename": "Nie udaลo siฤ przenieลฤ {0} elementรณw, gdyลผ ich nazwy juลผ istniejฤ
w tym folderze. Nadaj im nowe nazwy poniลผej, bฤ
dลบ zostaw pole nazwy puste, aby je pominฤ
ฤ:",
- "fcp_ename": "Nie udaลo siฤ przekopiowaฤ {0} elementรณw, gdyลผ ich nazwy juลผ istniejฤ
w tym folderze. Nadaj im nowe nazwy poniลผej, bฤ
dลบ zostaw pole nazwy puste, aby je pominฤ
ฤ:",
- "fp_emore": "pozostaลo jeszcze kilka kolizji nazw plikรณw do poprawy",
- "fp_ok": "przeniesiono",
- "fcp_ok": "przekopiowano",
- "fp_busy": "przenoszenie {0} elementรณw...\n\n{1}",
- "fcp_busy": "kopiowanie {0} elementรณw...\n\n{1}",
- "fp_abrt": "przerywanie...", //m
- "fp_err": "nie udaลo siฤ przenieลฤ:\n",
- "fcp_err": "nie udaลo siฤ skopiowaฤ:\n",
- "fp_confirm": "przenieลฤ tutaj {0} elementy(รณw)?",
- "fcp_confirm": "skopiowaฤ tutaj {0} elementy(รณw)?",
- "fp_etab": 'nie udaลo siฤ odczytaฤ schowka z innej karty przeglฤ
darki',
- "fp_name": "przesyลanie pliku z twojego urzฤ
dzenia. Nadaj nazwฤ:",
- "fp_both_m": 'wybierz metodฤ wklejenia
Enter = Przenieล {0} pliki(รณw) z ยซ{1}ยป\nESC = Przeลlij {2} pliki(รณw) z twojego urzฤ
dzenia',
- "fcp_both_m": 'wybierz metodฤ wklejenia
Enter = Skopiuj {0} pliki(รณw) z ยซ{1}ยป\nESC = Przeลlij {2} pliki(รณw) z twojego urzฤ
dzenia',
- "fp_both_b": 'PrzenieลPrzeลlij',
- "fcp_both_b": 'KopiujPrzeลlij',
-
- "mk_noname": "wpisz nazwฤ do pola po lewej zanim to zrobisz :p",
-
- "tv_load": "Wczytywanie pliku tekstowego:\n\n{0}\n\n{1}% (wczytano {2} z {3} MiB)",
- "tv_xe1": "nie udaลo siฤ wczytaฤ pliku:\n\nbลฤ
d ",
- "tv_xe2": "404, nie znaleziono pliku",
- "tv_lst": "lista plikรณw tekstowych w",
- "tvt_close": "powrรณฤ do widoku folderรณw$NSkrรณt: M (lub Esc)\">โ zamknij",
- "tvt_dl": "pobierz ten plik$NHotkey: Y\">๐พ pobierz",
- "tvt_prev": "pokaลผ poprzedni dokument$NSkrรณt: i\">โฌ poprzedni",
- "tvt_next": "pokaลผ nastฤpny dokument$NSkrรณt: K\">โฌ nastฤpny",
- "tvt_sel": "wybierz plik ( do wyciฤcia / skopiowania / usuniฤcia / itp. )$NSkrรณt: S\">wyb",
- "tvt_edit": "otwรณrz plik w edytorze tekstu$NSkrรณt: E\">โ๏ธ edytuj",
- "tvt_tail": "ลledลบ zmiany w pliku; pokazuj nowe linie w czasie rzeczywistym\">๐ก ลledลบ",
- "tvt_wrap": "zawijaj tekst\">โต",
- "tvt_atail": "utrzymuj widok na dole strony\">โ",
- "tvt_ctail": "dekoduj kolory terminala (sekwencje sterujฤ
ce ANSI)\">๐",
- "tvt_ntail": "limit przewijania (ile bajtรณw tekstu przechowywaฤ w pamiฤci)",
-
- "m3u_add1": "dodano utwรณr do playlisty m3u",
- "m3u_addn": "dodano {0} utwory(รณw) do playlisty m3u",
- "m3u_clip": "skopiowano playlistฤ m3u do schowka\n\nutwรณrz",
-
- "gt_vau": "nie pokazuj obrazu, odtwarzaj tylko dลบwiฤk\">๐ง",
- "gt_msel": "wybierz pliki; kliknij plik z wciลniฤtym klawiszem CTRL, aby zastฤ
piฤ$N$N<em>gdy tryb jest aktywny, kliknij dwukrotnie na plik / folder, ลผeby go otworzyฤ</em>$N$NSkrรณt: S\">wybierz wiele",
- "gt_crop": "kadruj miniaturki do ลrodka\">kadruj",
- "gt_3x": "miniaturki w wysokiej rozdzielczoลci\">3x",
- "gt_zoom": "przybliลผ",
- "gt_chop": "przytnij",
- "gt_sort": "sortuj wedลug",
- "gt_name": "nazwa",
- "gt_sz": "rozmiar",
- "gt_ts": "data",
- "gt_ext": "typ",
- "gt_c1": "przycinaj wiฤkszฤ
czฤลฤ nazw plikรณw (pokazuj mniej)",
- "gt_c2": "przycinaj mniejszฤ
czฤลฤ nazw plikรณw (pokazuj wiฤcej)",
-
- "sm_w8": "wyszukiwanie...",
- "sm_prev": "wyniki wyszukiwania poniลผej pochodzฤ
z poprzedniego zapytania:\n ",
- "sl_close": "zamknij wyniki wyszukiwania",
- "sl_hits": "pokazujฤ {0} wyniki(รณw)",
- "sl_moar": "pokaลผ wiฤcej",
-
- "s_sz": "rozmiar",
- "s_dt": "data",
- "s_rd": "ลcieลผka",
- "s_fn": "nazwa",
- "s_ta": "znaczniki",
- "s_ua": "data przesลania",
- "s_ad": "zaawansowane",
- "s_s1": "min. rozmiar (MiB)",
- "s_s2": "maks. rozmiar (MiB)",
- "s_d1": "min. data iso8601",
- "s_d2": "maks. data iso8601",
- "s_u1": "przesลane po",
- "s_u2": "i/lub przed",
- "s_r1": "ลcieลผka zawiera (oddzielone spacjฤ
)",
- "s_f1": "nazwa zawiera (odwrรณฤ za pomocฤ
-nope)",
- "s_t1": "znaczniki zawierajฤ
(^=start, koniec=$)",
- "s_a1": "dokลadne wลaลciwoลci metadanych",
-
- "md_eshow": "nie moลผna wyลwietliฤ ",
- "md_off": "[๐readme] wyลฤ
czone w [โ๏ธ] -- dokument ukryty",
-
- "badreply": "Nie udaลo siฤ przeanalizowaฤ odpowiedzi serwera",
-
- "xhr403": "403: Odmowa dostฤpu.\n\nSprรณbuj przeลadowaฤ stronฤ (F5), moลผliwe, ลผe ciฤ wylogowano",
- "xhr0": "nieznany (byฤ moลผe utracono poลฤ
czenie z serwerem, lub jest on nieaktywny)",
- "cf_ok": "przepraszamy, wลฤ
czyลa siฤ ochrona przed DD" + wah + "oS\n\nwszystko powinno wrรณciฤ do normy za okoลo 30 sekund\n\njeลli nic siฤ nie zmieni, naciลnij klawisz F5, aby przeลadowaฤ stronฤ",
- "tl_xe1": "nie moลผna wyลwietliฤ podfolderรณw:\n\nbลฤ
d ",
- "tl_xe2": "404: Nie znaleziono folderu",
- "fl_xe1": "nie moลผna wyลwietliฤ plikรณw w folderze:\n\nbลฤ
d ",
- "fl_xe2": "404: Nie znaleziono folderu",
- "fd_xe1": "nie moลผna stworzyฤ podfolderu:\n\nbลฤ
d ",
- "fd_xe2": "404: Nie znaleziono folderu nadrzฤdnego",
- "fsm_xe1": "nie moลผna wysลaฤ wiadomoลci:\n\nbลฤ
d ",
- "fsm_xe2": "404: Nie znaleziono folderu nadrzฤdnego",
- "fu_xe1": "nie udaลo siฤ wczytaฤ listy unpost z serwera:\n\nbลฤ
d ",
- "fu_xe2": "404: Nie znaleziono pliku??",
-
- "fz_tar": "nieskompresowane archiwum gnu-tar (linux / mac)",
- "fz_pax": "nieskompresowane archiwum tar w formacie pax (wolniejsze)",
- "fz_targz": "gnu-tar z kompresjฤ
gzip poziomu 3.,$N$Nzazwyczaj bardzo wolne, uลผywaj nieskompresowanego tar",
- "fz_tarxz": "gnu-tar z kompresjฤ
xz poziomu 3.$N$Nzazwyczaj bardzo wolne, uลผywaj nieksompresowanego tar",
- "fz_zip8": "zip z nazwami plikรณw UTF-8 (moลผe dziaลaฤ nieprawidลowo na systemie Windows 7 i starszych)",
- "fz_zipd": "zip z nazwami plikรณw cp437, dobre dla bardzo starego oprogramowania",
- "fz_zipc": "cp437 z CRC32 obliczonym wczeลniej,$Ndla MS-DOS PKZIP v2.04g (paลบdziernik 1993)$N(przetwarzanie do pobrania trwa dลuลผej)",
-
- "un_m1": "moลผna usunฤ
ฤ ostatnio przesลane pliki (lub przerwaฤ trwajฤ
ce) poniลผej",
- "un_upd": "odลwieลผ",
- "un_m4": "lub udostฤpnij pliki widoczne poniลผej:",
- "un_ulist": "pokaลผ",
- "un_ucopy": "kopiuj",
- "un_flt": "filtruj (opcjonalnie): URL musi zawieraฤ",
- "un_fclr": "wyczyลฤ kryteria filtrowania",
- "un_derr": 'nie udaลo siฤ usunฤ
ฤ unpost:\n',
- "un_f5": 'coล poszลo nie tak, sprรณbuj odลwieลผyฤ lub wciลnij F5',
- "un_uf5": "przed przerwaniem przesyลania trzeba odลwieลผyฤ stronฤ (za pomocฤ
CTRL-R lub F5)",
- "un_nou": 'ostrzeลผenie: serwer jest aktualnie zbyt obciฤ
ลผony, ลผeby pokazaฤ niedokoลczone przesลania; kliknij link "odลwieลผ" za chwilฤ',
- "un_noc": 'ostrzeลผenie: unpost w peลni przesลanych plikรณw jest wyลฤ
czone/zabronione w konfiguracji serwera',
- "un_max": "pokazujฤ pierwsze 2000 plikรณw (uลผyj filtrowania)",
- "un_avail": "{0} ostatnio przesลanych elementรณw moลผe zostaฤ usuniฤte
{1} niedokoลczonych moลผna przerwaฤ",
- "un_m2": "przesortowano po czasie przesลania; najnowsze elementy pierwsze: ",
- "un_no1": "cholibka! ลผaden przesลany element nie jest wystarczajฤ
co niedawny",
- "un_no2": "cholibka! ลผaden przesลany element pasujฤ
cy do filtra nie jest wystarczajฤ
co niedawny",
- "un_next": "usuล nastฤpne {0} pliki(รณw) poniลผej",
- "un_abrt": "przerwij",
- "un_del": "usuล",
- "un_m3": "wczytywanie ostatnio przesลanych elementรณw...",
- "un_busy": "usuwanie {0} plikรณw...",
- "un_clip": "skopiowano {0} linkรณw do schowka",
-
- "u_https1": "powinieneล przejลฤ",
- "u_https2": "na HTTPS w celu",
- "u_https3": "uzyskania lepszej wydajnoลci",
- "u_ancient": 'twoja przeglฤ
darka jest niezwykle zabytkowa -- powinieneล zamiast tego uลผyฤ bup',
- "u_nowork": "wymaga Firefox 53+, Chrome 57+ lub iOS 11+",
- "tail_2old": "wymaga Firefox 105+, Chrome 71+ lub iOS 14.5+",
- "u_nodrop": 'ta przeglฤ
darka jest za stara, nie wspiera przesyลania "przeciฤ
gnij i upuลฤ"',
- "u_notdir": "to nie jest folder!\n\nta przeglฤ
darka jest za stara\nsprรณbuj przeciฤ
gnฤ
ฤ i upuลciฤ",
- "u_uri": "aby przeciฤ
gnฤ
ฤ i upuลciฤ obrazy z innych okien przeglฤ
darki,\nupuลฤ je na duลผy przycisk przesyลania",
- "u_enpot": 'przeลฤ
cz na lekki interfejs (moลผe zwiฤkszyฤ prฤdkoลฤ przesyลania)',
- "u_depot": 'przeลฤ
cz na ลadny interfejs (moลผe zmniejszyฤ prฤdkoลc przesyลania)',
- "u_gotpot": 'przeลฤ
czanie na lekki interfejs w celu poprawy prฤdkoลci przesyลania,\n\nzawsze moลผna przeลฤ
czyฤ siฤ na ลadny interfejs!',
- "u_pott": "pliki: {0} ukoลczonych, {1} nie powiodลo siฤ, {2} w trakcie, {3} oczekujฤ
cych
",
- "u_ever": "podstawowe przesyลanie; up2k wymaga minimalnie przeglฤ
darek:
Chrome 21 // Firefox 13 // Edge 12 // Opera 12 // Safari 5.1",
- "u_su2k": 'podstawowe przesyลanie; up2k jest lepszy',
- "u_uput": 'optymalizuj dla prฤdkoลci (pomijajฤ
c spr. sum kontrolnych)',
- "u_ewrite": 'nie masz dostฤpu do zapisu (write) w tym folderze',
- "u_eread": 'nie masz dostฤpu do odczytu (read) tego folderu',
- "u_enoi": 'wyszukiwanie plikรณw jest wyลฤ
czone w konfiguracji serwera',
- "u_enoow": "nadpisanie nie zadziaลa, wymagany dostฤp do usuwania (delete)",
- "u_badf": '{0} (z {1}) plikรณw zostaลo pominiฤtych, prawdopodobnie przez opcje dostฤpu systemu plikรณw:\n\n',
- "u_blankf": '{0} (z {1}) plikรณw jest pustych; przesลaฤ mimo to?\n\n',
- "u_applef": '{0} (z {1}) plikรณw moลผe byฤ niepoลผฤ
dane;\nNaciลnij OK/Enter, aby pominฤ
ฤ je (wypisane poniลผej);\nNaciลnij Anuluj/ESC, by je przesลaฤ mimo to:\n\n',
- "u_just1": '\nTa funkcja moลผe dziaลaฤ lepiej z wybranym jednym plikiem',
- "u_ff_many": "na systemach Linux / MacOS / Android, ta iloลc plikรณw moลผe spowodowaฤ przymusowe zamkniฤcie przeglฤ
darki Firefox\nw takim przypadku, sprรณbuj ponownie (lub uลผyj Chrome'a).",
- "u_up_life": "Ten przesyลany plik zostanie usuniฤty z serwera\n{0} po zakoลczeniu przesyลania",
- "u_asku": 'przeลlij {0} pliki(รณw) do {1}',
- "u_unpt": "moลผna cofnฤ
ฤ / usunฤ
ฤ ten przesลany plik za pomocฤ
๐งฏ w lewym gรณrnym rogu",
- "u_bigtab": 'zaraz pokaลผฤ {0} plikรณw\n\nta operacja moลผe zawiesiฤ twojฤ
przeglฤ
darkฤ, na pewno kontynuowaฤ?',
- "u_scan": 'Skanowanie plikรณw...',
- "u_dirstuck": 'iterator katalogรณw utknฤ
ล podczas prรณby dostฤpu poniลผszych {0} elementรณw, pominiฤto:',
- "u_etadone": 'Ukoลczono ({0}, {1} plikรณw)',
- "u_etaprep": '(przygotowywanie do przesลania)',
- "u_hashdone": 'obliczono sumฤ kontrolnฤ
',
- "u_hashing": 'obliczanie sumy kontrolnej',
- "u_hs": 'nawiฤ
zywanie poลฤ
czenia...',
- "u_started": "rozpoczฤto przesyลanie; zobacz w [๐]",
- "u_dupdefer": "duplikat; zostanie przetworzony na koลcu",
- "u_actx": "kliknij ten napis, aby zapobiec spadkowi
wydajnoลci po zmianie aktywnego okna/karty przeglฤ
darki",
- "u_fixed": "OK! Naprawiono ๐",
- "u_cuerr": "nie udaลo siฤ przesลaฤ fragmentu {0} z {1};\nprawdopodobnie niegroลบne, kontynuowanie\n\nplik: {2}",
- "u_cuerr2": "serwer odrzuciล przesyลanie (kawaลek {0} z {1});\nsprรณbujฤ ponownie pรณลบniej\n\nplik: {2}\n\nbลฤ
d ",
- "u_ehstmp": "sprรณbujฤ ponownie; wiฤcej informacji w prawym dolnym rogu",
- "u_ehsfin": "serwer odrzuciล proลbฤ o zakoลczenie przesyลania; prรณbujฤ ponownie...",
- "u_ehssrch": "serwer odrzuciล proลbฤ o wykonanie wyszukania; prรณbujฤ ponownie...",
- "u_ehsinit": "serwer odrzuciล proลbฤ o rozpoczฤcie przesyลania; prรณbujฤ ponownie...",
- "u_eneths": "bลฤ
d sieci podczas negocjacji warunkรณw przesyลania; prรณbujฤ ponownie...",
- "u_enethd": "bลฤ
d sieci podczas sprawdzania istnienia celu; prรณbujฤ ponownie...",
- "u_cbusy": "oczekiwanie na ponowne zaufanie serwera po bลฤdzie sieci...",
- "u_ehsdf": "brak miejsca na dysku serwera!\n\nprรณby bฤdฤ
ponawiane na wypadek\nzwolnienia wystarczajฤ
co duลผo miejsca aby kontynuowaฤ",
- "u_emtleak1": "wyglฤ
da na to, ลผe twoja przeglฤ
darka moลผe mieฤ wyciek pamiฤci;\n",
- "u_emtleak2": ' przejdลบ na HTTPS (zalecane) lub ',
- "u_emtleak3": ' ',
- "u_emtleakc": 'sprรณbuj:\n- wciลnij
F5, aby odลwieลผyฤ stronฤ - wyลฤ
cz przycisk
ww w menu โ๏ธ ustawienia - i sprรณbuj przesลaฤ ponownie
Prฤdkoลฤ przesyลania bฤdzie niลผsza, ale cรณลผ zrobisz.\nPrzepraszamy za problemu!\n\nPS: Chrome v107 ma poprawkฤ tego bลฤdu.',
- "u_emtleakf": 'sprรณbuj:\n- wciลnij
F5, aby odลwieลผyฤ stronฤ - wลฤ
cz tryb
๐ฅ (lekkiego interfejsu) w interfejsie przesyลania - i sprรณbuj przesลaฤ ponownie
\nPS: Firefox moลผe kiedyล mieฤ poprawkฤย tego bลฤdu',
- "u_s404": "nie znaleziono na serwerze",
- "u_expl": "wytลumacz",
- "u_maxconn": "wiฤkszoลฤ przeglฤ
darek ogranicza to do 6, ale Firefox pozwala zwiฤkszyฤ tฤ
wartoลฤ, ustawiajฤ
c connections-per-server w about:config",
- "u_tu": 'UWAGA: tryb turbo wลฤ
czony, klient moลผe nie wykryฤ i nie kontynuowaฤ niedokoลczonych przesลaล; patrz wskazรณwka przycisku turbo
',
- "u_ts": 'UWAGA: tryb turbo wลฤ
czony, wyniki wyszukiwania mogฤ
byฤ niepoprawne; patrz wskazรณwka przycisku turbo
',
- "u_turbo_c": "tryb turbo jest wyลฤ
czony w konfiguracji serwera",
- "u_turbo_g": "wyลฤ
czanie trybu turbo, nie posiadasz dostฤpu\ndo listy katalogu w tym wolumenie",
- "u_life_cfg": 'autousuwanie po min (lub godz.)',
- "u_life_est": 'przesลany plik zostanie usuniฤty ---',
- "u_life_max": 'ten folder wymaga\nmaks. czasu do usuniฤcia rรณwnego {0}',
- "u_unp_ok": 'unpost jest dozwolony przez {0}',
- "u_unp_ng": 'unpost NIE jest dozwolony',
- "ue_ro": 'dostฤp tylko-do-odczytu\n\n',
- "ue_nl": 'nie jesteล zalogowany',
- "ue_la": 'zalogowano jako "{0}"',
- "ue_sr": 'jesteล w trybie wyszukiwania\n\nprzeลฤ
cz siฤ na tryb przesyลania, klikajฤ
c lupฤ ๐ (obok przycisku Szukaj), i sprรณbuj ponownie',
- "ue_ta": 'sprรณbuj przesลaฤ ponownie, wszystko powinno byฤ w porzฤ
dku',
- "ue_ab": "ten plik juลผ jest przesyลany do innego folderu, przesyลanie musi siฤ zakoลczyฤ, zanim bฤdzie mรณgล byฤ on przesลany gdzie indziej.\n\nMoลผna przerwaฤ pierwsze przesyลanie za pomocฤ
๐งฏ w lewym gรณrnym rogu",
- "ur_1uo": "OK: Plik przesลany pomyลlnie",
- "ur_auo": "OK: Wszystkie ({0}) pliki zostaลy przesลane pomyลlnie",
- "ur_1so": "OK: Znaleziono plik na serwerze",
- "ur_aso": "OK: Znaleziono wszystkie ({0}) pliki na serwerze",
- "ur_1un": "Przesyลanie nie powiodลo siฤ",
- "ur_aun": "Wszystkie ({0}) przesลania nie powiodลy siฤ",
- "ur_1sn": "NIE znaleziono pliku na serwerze",
- "ur_asn": "NIE znaleziono {0} plikรณw na serwerze",
- "ur_um": "Zakoลczono;\n{0} przesลaล OK,\n{1} przesลaล nie powiodลo siฤ",
- "ur_sm": "Zakoลczono;\nznaleziono {0} pliki(รณw),\nnie znaleziono {1} pliki(รณw) na serwerze",
-
- "lang_set": "odลwieลผ stronฤ (F5), aby zastosowaฤ zmianฤ.",
- },
- "por": {
- "tt": "Portuguรชs",
-
- "cols": {
- "c": "botรตes de aรงรฃo",
- "dur": "duraรงรฃo",
- "q": "qualidade / bitrate",
- "Ac": "codec de รกudio",
- "Vc": "codec de vรญdeo",
- "Fmt": "formato / contรชiner",
- "Ahash": "checksum de รกudio",
- "Vhash": "checksum de vรญdeo",
- "Res": "resoluรงรฃo",
- "T": "tipo de arquivo",
- "aq": "qualidade / bitrate de รกudio",
- "vq": "qualidade / bitrate de vรญdeo",
- "pixfmt": "subamostragem / estrutura de pixel",
- "resw": "resoluรงรฃo horizontal",
- "resh": "resoluรงรฃo vertical",
- "chs": "canais de รกudio",
- "hz": "taxa de amostragem"
- },
-
- "hks": [
- [
- "diversos",
- ["ESC", "fechar vรกrias coisas"],
-
- "gerenciador de arquivos",
- ["G", "alternar entre visualizaรงรฃo de lista / grade"],
- ["T", "alternar entre miniaturas / รญcones"],
- ["โง A/D", "tamanho da miniatura"],
- ["ctrl-K", "excluir selecionados"],
- ["ctrl-X", "recortar seleรงรฃo para a รกrea de transferรชncia"],
- ["ctrl-C", "copiar seleรงรฃo para a รกrea de transferรชncia"],
- ["ctrl-V", "colar (mover/copiar) aqui"],
- ["Y", "baixar selecionado"],
- ["F2", "renomear selecionado"],
-
- "seleรงรฃo de lista de arquivos",
- ["espaรงo", "alternar seleรงรฃo de arquivo"],
- ["โ/โ", "mover cursor de seleรงรฃo"],
- ["ctrl โ/โ", "mover cursor e visualizaรงรฃo"],
- ["โง โ/โ", "selecionar arquivo anterior/prรณximo"],
- ["ctrl-A", "selecionar todos os arquivos / pastas"],
- ], [
- "navegaรงรฃo",
- ["B", "alternar entre breadcrumbs / painel de navegaรงรฃo"],
- ["I/K", "pasta anterior/prรณxima"],
- ["M", "pasta pai (ou desexpandir a atual)"],
- ["V", "alternar entre pastas / arquivos de texto no painel de navegaรงรฃo"],
- ["A/D", "tamanho do painel de navegaรงรฃo"],
- ], [
- "reprodutor de รกudio",
- ["J/L", "mรบsica anterior/prรณxima"],
- ["U/O", "pular 10 segundos para trรกs/frente"],
- ["0..9", "pular para 0%..90%"],
- ["P", "reproduzir/pausar (tambรฉm inicia)"],
- ["S", "selecionar a mรบsica que estรก tocando"],
- ["Y", "baixar mรบsica"],
- ], [
- "visualizador de imagens",
- ["J/L, โ/โ", "imagem anterior/prรณxima"],
- ["Home/End", "primeira/รบltima imagem"],
- ["F", "tela cheia"],
- ["R", "girar no sentido horรกrio"],
- ["โง R", "girar no sentido anti-horรกrio"],
- ["S", "selecionar imagem"],
- ["Y", "baixar imagem"],
- ], [
- "reprodutor de vรญdeo",
- ["U/O", "pular 10 segundos para trรกs/frente"],
- ["P/K/Espaรงo", "reproduzir/pausar"],
- ["C", "continuar reproduzindo o prรณximo"],
- ["V", "loop"],
- ["M", "mudo"],
- ["[ e ]", "definir intervalo de loop"],
- ], [
- "visualizador de arquivos de texto",
- ["I/K", "arquivo anterior/prรณximo"],
- ["M", "fechar arquivo de texto"],
- ["E", "editar arquivo de texto"],
- ["S", "selecionar arquivo (para recortar/copiar/renomear)"],
- ]
- ],
-
- "m_ok": "OK",
- "m_ng": "Cancelar",
-
- "enable": "Ativar",
- "danger": "PERIGO",
- "clipped": "copiado para a รกrea de transferรชncia",
-
- "ht_s1": "segundo",
- "ht_s2": "segundos",
- "ht_m1": "minuto",
- "ht_m2": "minutos",
- "ht_h1": "hora",
- "ht_h2": "horas",
- "ht_d1": "dia",
- "ht_d2": "dias",
- "ht_and": " e ",
-
- "goh": "painel de controle",
- "gop": 'pai anterior">anterior',
- "gou": 'pasta pai">acima',
- "gon": 'prรณxima pasta">prรณximo',
- "logout": "Sair ",
- "login": "Fazer login",
- "access": " acesso",
- "ot_close": "fechar submenu",
- "ot_search": "procurar arquivos por atributos, caminho / nome, tags de mรบsica ou qualquer combinaรงรฃo deles$N$N<code>foo bar</code> = deve conter ambos ยซfooยป e ยซbarยป,$N<code>foo -bar</code> = deve conter ยซfooยป mas nรฃo ยซbarยป,$N<code>^yana .opus$</code> = comeรงar com ยซyanaยป e ser um arquivo ยซopusยป$N<code>"try unite"</code> = conter exatamente ยซtry uniteยป$N$No formato de data รฉ iso-8601, como$N<code>2009-12-31</code> ou <code>2020-09-12 23:30:00</code>",
- "ot_unpost": "despublicar: excluir seus uploads recentes, ou abortar os que nรฃo foram concluรญdos",
- "ot_bup": "bup: uploader bรกsico, atรฉ suporta netscape 4.0",
- "ot_mkdir": "mkdir: criar um novo diretรณrio",
- "ot_md": "new-md: criar um novo documento markdown",
- "ot_msg": "msg: enviar uma mensagem para o log do servidor",
- "ot_mp": "opรงรตes do reprodutor de mรญdia",
- "ot_cfg": "opรงรตes de configuraรงรฃo",
- "ot_u2i": 'up2k: fazer upload de arquivos (se vocรช tiver acesso de escrita) ou alternar para o modo de busca para ver se eles jรก existem em algum lugar no servidor$N$Nuploads sรฃo reiniciรกveis, multithread, e os carimbos de data/hora dos arquivos sรฃo preservados, mas usa mais CPU que [๐] (o uploader bรกsico)
durante os uploads, este รญcone se torna um indicador de progresso!',
- "ot_u2w": 'up2k: fazer upload de arquivos com suporte a retomada (feche seu navegador e solte os mesmos arquivos mais tarde)$N$Nmultithread, e os carimbos de data/hora dos arquivos sรฃo preservados, mas usa mais CPU que [๐] (o uploader bรกsico)
durante os uploads, este รญcone se torna um indicador de progresso!',
- "ot_noie": 'Por favor, use Chrome / Firefox / Edge',
-
- "ab_mkdir": "criar diretรณrio",
- "ab_mkdoc": "novo documento markdown",
- "ab_msg": "enviar msg para o log do srv",
-
- "ay_path": "pular para pastas",
- "ay_files": "pular para arquivos",
-
- "wt_ren": "renomear itens selecionados$NHotkey: F2",
- "wt_del": "excluir itens selecionados$NHotkey: ctrl-K",
- "wt_cut": "recortar itens selecionados <small>(depois colar em outro lugar)</small>$NHotkey: ctrl-X",
- "wt_cpy": "copiar itens selecionados para a รกrea de transferรชncia$N(para colรก-los em outro lugar)$NHotkey: ctrl-C",
- "wt_pst": "colar uma seleรงรฃo previamente recortada / copiada$NHotkey: ctrl-V",
- "wt_selall": "selecionar todos os arquivos$NHotkey: ctrl-A (quando o arquivo estiver em foco)",
- "wt_selinv": "inverter seleรงรฃo",
- "wt_zip1": "baixar esta pasta como um arquivo compactado",
- "wt_selzip": "baixar seleรงรฃo como um arquivo compactado",
- "wt_seldl": "baixar seleรงรฃo como arquivos separados$NHotkey: Y",
- "wt_npirc": "copiar informaรงรตes da faixa em formato irc",
- "wt_nptxt": "copiar informaรงรตes da faixa em texto simples",
- "wt_m3ua": "adicionar ร playlist m3u (clique em ๐ปcopiar depois)",
- "wt_m3uc": "copiar playlist m3u para a รกrea de transferรชncia",
- "wt_grid": "alternar entre visualizaรงรฃo de grade / lista$NHotkey: G",
- "wt_prev": "faixa anterior$NHotkey: J",
- "wt_play": "reproduzir / pausar$NHotkey: P",
- "wt_next": "prรณxima faixa$NHotkey: L",
-
- "ul_par": "uploads paralelos:",
- "ut_rand": "randomizar nomes de arquivos",
- "ut_u2ts": "copiar o carimbo de data/hora de รบltima modificaรงรฃo$Ndo seu sistema de arquivos para o servidor\">๐
",
- "ut_ow": "substituir arquivos existentes no servidor?$N๐ก๏ธ: nunca (irรก gerar um novo nome de arquivo em vez disso)$N๐: substituir se o arquivo no servidor for mais antigo que o seu$Nโป๏ธ: sempre substituir se os arquivos forem diferentes",
- "ut_mt": "continuar a fazer o hash de outros arquivos enquanto faz upload$N$Ntalvez desativar se sua CPU ou HDD for um gargalo",
- "ut_ask": 'pedir confirmaรงรฃo antes do upload comeรงar">๐ญ',
- "ut_pot": "melhorar a velocidade de upload em dispositivos lentos$Ntornando a UI menos complexa",
- "ut_srch": "nรฃo fazer upload, em vez disso verificar se os arquivos jรก$N existem no servidor (irรก escanear todas as pastas que vocรช pode ler)",
- "ut_par": "pausar uploads definindo para 0$N$naumentar se sua conexรฃo for lenta / alta latรชncia$N$nmanter em 1 em LAN ou se o HDD do servidor for um gargalo",
- "ul_btn": "soltar arquivos / pastas
aqui (ou clique em mim)",
- "ul_btnu": "U P L O A D",
- "ul_btns": "B U S C A R",
-
- "ul_hash": "hash",
- "ul_send": "enviar",
- "ul_done": "feito",
- "ul_idle1": "nenhum upload estรก na fila ainda",
- "ut_etah": "velocidade mรฉdia de <em>hash</em>, e tempo estimado atรฉ o fim",
- "ut_etau": "velocidade mรฉdia de <em>upload</em> e tempo estimado atรฉ o fim",
- "ut_etat": "velocidade mรฉdia <em>total</em> e tempo estimado atรฉ o fim",
-
- "uct_ok": "concluรญdo com sucesso",
- "uct_ng": "ruim: falhou / rejeitado / nรฃo encontrado",
- "uct_done": "ok e ruim combinados",
- "uct_bz": "fazendo hash ou upload",
- "uct_q": "ocioso, pendente",
-
- "utl_name": "nome do arquivo",
- "utl_ulist": "lista",
- "utl_ucopy": "copiar",
- "utl_links": "links",
- "utl_stat": "status",
- "utl_prog": "progresso",
-
- // mantenha curto:
- "utl_404": "404",
- "utl_err": "ERRO",
- "utl_oserr": "Erro-SO",
- "utl_found": "encontrado",
- "utl_defer": "adiar",
- "utl_yolo": "YOLO",
- "utl_done": "feito",
-
- "ul_flagblk": "os arquivos foram adicionados ร fila
no entanto, hรก um up2k ocupado em outra aba do navegador,
entรฃo esperando que ele termine primeiro",
- "ul_btnlk": "a configuraรงรฃo do servidor bloqueou este interruptor neste estado",
-
- "udt_up": "Upload",
- "udt_srch": "Buscar",
- "udt_drop": "solte aqui",
-
- "u_nav_m": 'certo, o que vocรช tem?
Enter = Arquivos (um ou mais)\nESC = Uma pasta (incluindo subpastas)',
- "u_nav_b": 'ArquivosUma pasta',
-
- "cl_opts": "interruptores",
- "cl_themes": "tema",
- "cl_langs": "idioma",
- "cl_ziptype": "download de pasta",
- "cl_uopts": "interruptores up2k",
- "cl_favico": "favicon",
- "cl_bigdir": "grandes dirs",
- "cl_hsort": "#sort",
- "cl_keytype": "notaรงรฃo de tecla",
- "cl_hiddenc": "colunas ocultas",
- "cl_hidec": "ocultar",
- "cl_reset": "resetar",
- "cl_hpick": "toque nos cabeรงalhos das colunas para ocultรก-los na tabela abaixo",
- "cl_hcancel": "ocultar coluna abortado",
-
- "ct_grid": '็ฐ a grade',
- "ct_ttips": 'โ โก โ">โน๏ธ dicas de ferramentas',
- "ct_thumb": 'na visualizaรงรฃo de grade, alternar entre รญcones ou miniaturas$NHotkey: T">๐ผ๏ธ miniaturas',
- "ct_csel": 'usar CTRL e SHIFT para seleรงรฃo de arquivo na visualizaรงรฃo de grade">sel',
- "ct_ihop": 'quando o visualizador de imagens for fechado, rolar para o รบltimo arquivo visualizado">gโฎฏ',
- "ct_dots": 'mostrar arquivos ocultos (se o servidor permitir)">dotfiles',
- "ct_qdel": 'ao excluir arquivos, pedir confirmaรงรฃo apenas uma vez">qdel',
- "ct_dir1st": 'ordenar pastas antes de arquivos">๐ primeiro',
- "ct_nsort": 'ordem natural (para nomes de arquivos com dรญgitos iniciais)">nsort',
- "ct_utc": 'mostrar todas as datas/horas em UTC">UTC',
- "ct_readme": 'mostrar README.md nas listas de pastas">๐ readme',
- "ct_idxh": 'mostrar index.html em vez de lista de pastas">htm',
- "ct_sbars": 'mostrar barras de rolagem">โ',
-
- "cut_umod": "se um arquivo jรก existe no servidor, atualizar o carimbo de data/hora de รบltima modificaรงรฃo do servidor para corresponder ao seu arquivo local (requer permissรตes de escrita+exclusรฃo)\">re๐
",
-
- "cut_turbo": "o botรฃo yolo, vocรช provavelmente NรO quer habilitar isso:$N$Nuse isto se vocรช estava fazendo upload de uma enorme quantidade de arquivos e teve que reiniciar por algum motivo, e quer continuar o upload o mais rรกpido possรญvel$N$Nisto substitui a verificaรงรฃo de hash por uma simples "este arquivo tem o mesmo tamanho no servidor?" entรฃo se o conteรบdo do arquivo for diferente ele NรO serรก enviado$N$Nvocรช deve desativar isso quando o upload estiver concluรญdo, e entรฃo "enviar" os mesmos arquivos novamente para permitir que o cliente os verifique\">turbo",
-
- "cut_datechk": "nรฃo tem efeito a menos que o botรฃo turbo esteja ativado$N$Nreduz o fator yolo por uma pequena quantidade; verifica se os carimbos de data/hora dos arquivos no servidor correspondem aos seus$N$ndeve teoricamente pegar a maioria dos uploads incompletos / corrompidos, mas nรฃo รฉ um substituto para fazer uma verificaรงรฃo com o turbo desativado depois\">date-chk",
-
- "cut_u2sz": "tamanho (em MiB) de cada bloco de upload; valores grandes voam melhor pelo atlรขntico. Tente valores baixos em conexรตes muito nรฃo confiรกveis",
-
- "cut_flag": "garantir que apenas uma aba esteja fazendo upload por vez $N -- outras abas devem ter isso ativado tambรฉm $N -- sรณ afeta abas no mesmo domรญnio",
-
- "cut_az": "enviar arquivos em ordem alfabรฉtica, em vez de o menor primeiro$N$na ordem alfabรฉtica pode tornar mais fรกcil de verificar se algo deu errado no servidor, mas torna o upload um pouco mais lento em fibra / LAN",
-
- "cut_nag": "notificaรงรฃo do SO quando o upload for concluรญdo$N(somente se o navegador ou aba nรฃo estiver ativo)",
- "cut_sfx": "alerta audรญvel quando o upload for concluรญdo$N(somente se o navegador ou aba nรฃo estiver ativo)",
-
- "cut_mt": "usar multithreading para acelerar o hash de arquivos$N$nisto usa web-workers e requer$Nmais RAM (atรฉ 512 MiB extras)$N$ntorna https 30% mais rรกpido, http 4.5x mais rรกpido\">mt",
-
- "cut_wasm": "usar wasm em vez do hasher embutido do navegador; melhora a velocidade em navegadores baseados em chrome mas aumenta a carga da CPU, e muitas versรตes antigas do chrome tรชm bugs que fazem o navegador consumir toda a RAM e travar se isso for ativado\">wasm",
-
- "cft_text": "texto do favicon (deixe em branco e atualize para desativar)",
- "cft_fg": "cor do primeiro plano",
- "cft_bg": "cor do fundo",
-
- "cdt_lim": "nรบmero mรกximo de arquivos para mostrar em uma pasta",
- "cdt_ask": "ao rolar para o final,$nem vez de carregar mais arquivos,$nperguntar o que fazer",
- "cdt_hsort": "quantas regras de ordenaรงรฃo (<code>,sorthref</code>) incluir em URLs de mรญdia. Definir isso para 0 tambรฉm ignorarรก as regras de ordenaรงรฃo incluรญdas em links de mรญdia quando vocรช clicar neles",
-
- "tt_entree": "mostrar painel de navegaรงรฃo (รกrvore de diretรณrios)$NHotkey: B",
- "tt_detree": "mostrar breadcrumbs$NHotkey: B",
- "tt_visdir": "rolar para a pasta selecionada",
- "tt_ftree": "alternar entre รกrvore de pastas / arquivos de texto$NHotkey: V",
- "tt_pdock": "mostrar pastas pai em um painel acoplado no topo",
- "tt_dynt": "crescer automaticamente ร medida que a รกrvore se expande",
- "tt_wrap": "quebra de linha",
- "tt_hover": "revelar linhas transbordando ao passar o mouse$N( quebra a rolagem a menos que o cursor do mouse $N esteja na margem esquerda )",
-
- "ml_pmode": "ao final da pasta...",
- "ml_btns": "comandos",
- "ml_tcode": "transcodificar",
- "ml_tcode2": "transcodificar para",
- "ml_tint": "matiz",
- "ml_eq": "equalizador de รกudio",
- "ml_drc": "compressor de faixa dinรขmica",
-
- "mt_loop": "loop/repetir uma mรบsica\">๐",
- "mt_one": "parar depois de uma mรบsica\">1๏ธโฃ",
- "mt_shuf": "embaralhar as mรบsicas em cada pasta\">๐",
- "mt_aplay": "reproduzir automaticamente se houver um ID de mรบsica no link que vocรช clicou para acessar o servidor$N$ndesativar isso tambรฉm impedirรก que a URL da pรกgina seja atualizada com IDs de mรบsica ao tocar mรบsica, para evitar a reproduรงรฃo automรกtica se essas configuraรงรตes forem perdidas mas a URL permanecer\">aโถ",
- "mt_preload": "comeรงar a carregar a prรณxima mรบsica perto do final para uma reproduรงรฃo sem interrupรงรตes\">preload",
- "mt_prescan": "ir para a prรณxima pasta antes que a รบltima mรบsica$Ntermine, mantendo o navegador feliz$Npara que ele nรฃo pare a reproduรงรฃo\">nav",
- "mt_fullpre": "tentar prรฉ-carregar a mรบsica inteira;$Nโ
ativar em conexรตes nรฃo confiรกveis,$Nโ desativar em conexรตes lentas provavelmente\">full",
- "mt_fau": "em telefones, evitar que a mรบsica pare se a prรณxima mรบsica nรฃo prรฉ-carregar rรกpido o suficiente (pode fazer as tags aparecerem com falhas)\">โ๏ธ",
- "mt_waves": "barra de busca de forma de onda:$Nmostrar amplitude de รกudio no scrubber\">~s",
- "mt_npclip": "mostrar botรตes para copiar a mรบsica que estรก tocando para a รกrea de transferรชncia\">/np",
- "mt_m3u_c": "mostrar botรตes para copiar as$Nmรบsicas selecionadas como entradas de playlist m3u8 para a รกrea de transferรชncia\">๐ป",
- "mt_octl": "integraรงรฃo com o SO (atalhos de mรญdia / osd)\">os-ctl",
- "mt_oseek": "permitir busca atravรฉs da integraรงรฃo com o SO$N$nnota: em alguns dispositivos (iPhones),$nisto substitui o botรฃo de prรณxima mรบsica\">seek",
- "mt_oscv": "mostrar capa do รกlbum no osd\">art",
- "mt_follow": "manter a faixa que estรก tocando rolando ร vista\">๐ฏ",
- "mt_compact": "controles compactos\">โ",
- "mt_uncache": "limpar cache (tente isso se seu navegador armazenou em cache$Numa cรณpia quebrada de uma mรบsica e se recusa a tocar)\">uncache",
- "mt_mloop": "loop na pasta aberta\">๐ loop",
- "mt_mnext": "carregar a prรณxima pasta e continuar\">๐ prรณximo",
- "mt_mstop": "parar reproduรงรฃo\">โธ parar",
- "mt_cflac": "converter flac / wav para {0}\">flac",
- "mt_caac": "converter aac / m4a para {0}\">aac",
- "mt_coth": "converter todos os outros (nรฃo mp3) para {0}\">oth",
- "mt_c2opus": "melhor escolha para desktops, laptops, android\">opus",
- "mt_c2owa": "opus-weba, para iOS 17.5 e mais recentes\">owa",
- "mt_c2caf": "opus-caf, para iOS 11 a 17\">caf",
- "mt_c2mp3": "use isso em dispositivos muito antigos\">mp3",
- "mt_c2flac": "melhor qualidade de som, mas downloads enormes\">flac",
- "mt_c2wav": "reproduรงรฃo nรฃo comprimida (ainda maior)\">wav",
- "mt_c2ok": "legal, boa escolha",
- "mt_c2nd": "esse nรฃo รฉ o formato de saรญda recomendado para o seu dispositivo, mas tudo bem",
- "mt_c2ng": "seu dispositivo nรฃo parece suportar este formato de saรญda, mas vamos tentar mesmo assim",
- "mt_xowa": "existem bugs no iOS que impedem a reproduรงรฃo em segundo plano usando este formato; por favor, use caf ou mp3 em vez disso",
- "mt_tint": "nรญvel de fundo (0-100) na barra de busca$Npara tornar o buffer menos distrativo",
- "mt_eq": "ativa o equalizador e o controle de ganho;$N$nimpulsรฃo <code>0</code> = volume padrรฃo de 100% (nรฃo modificado)$N$nlargura <code>1 </code> = estรฉreo padrรฃo (nรฃo modificado)$nlargura <code>0.5</code> = 50% de crossfeed esquerda-direita$nlargura <code>0 </code> = mono$N$nimpulsรฃo <code>-0.8</code> & largura <code>10</code> = remoรงรฃo de vocal :^)$N$natvar o equalizador torna os รกlbuns sem interrupรงรตes totalmente sem interrupรงรตes, entรฃo deixe-o ligado com todos os valores em zero (exceto largura = 1) se vocรช se importa com isso",
- "mt_drc": "ativa o compressor de faixa dinรขmica (nivelador de volume / brickwaller); tambรฉm ativarรก o EQ para equilibrar o spaghetti, entรฃo defina todos os campos EQ exceto 'width' para 0 se vocรช nรฃo quiser$N$nabaixa o volume do รกudio acima do THRESHOLD dB; para cada RATIO dB apรณs o THRESHOLD hรก 1 dB de saรญda, entรฃo os valores padrรฃo de tresh -24 e ratio 12 significam que nunca deve ficar mais alto que -22 dB e รฉ seguro aumentar o impulso do equalizador para 0.8, ou atรฉ 1.8 com ATK 0 e um enorme RLS como 90 (sรณ funciona no firefox; RLS รฉ no mรกximo 1 em outros navegadores)$N$n(veja a wikipedia, eles explicam muito melhor)",
-
- "mb_play": "reproduzir",
- "mm_hashplay": "reproduzir este arquivo de รกudio?",
- "mm_m3u": "pressione Enter/OK para Reproduzir\npressione ESC/Cancelar para Editar",
- "mp_breq": "precisa do firefox 82+ ou chrome 73+ ou iOS 15+",
- "mm_bload": "carregando...",
- "mm_bconv": "convertendo para {0}, por favor, espere...",
- "mm_opusen": "seu navegador nรฃo pode reproduzir arquivos aac / m4a;\na transcodificaรงรฃo para opus agora estรก ativada",
- "mm_playerr": "reproduรงรฃo falhou: ",
- "mm_eabrt": "A tentativa de reproduรงรฃo foi cancelada",
- "mm_enet": "Sua conexรฃo de internet estรก instรกvel",
- "mm_edec": "Este arquivo estรก supostamente corrompido??",
- "mm_esupp": "Seu navegador nรฃo entende este formato de รกudio",
- "mm_eunk": "Erro Desconhecido",
- "mm_e404": "Nรฃo foi possรญvel reproduzir รกudio; erro 404: Arquivo nรฃo encontrado.",
- "mm_e403": "Nรฃo foi possรญvel reproduzir รกudio; erro 403: Acesso negado.\n\nTente pressionar F5 para recarregar, talvez vocรช tenha saรญdo da conta",
- "mm_e500": "Nรฃo foi possรญvel reproduzir รกudio; erro 500: Verifique os logs do servidor.",
- "mm_e5xx": "Nรฃo foi possรญvel reproduzir รกudio; erro do servidor ",
- "mm_nof": "nรฃo encontrando mais arquivos de รกudio por perto",
- "mm_prescan": "Procurando mรบsica para tocar a seguir...",
- "mm_scank": "Encontrei a prรณxima mรบsica:",
- "mm_uncache": "cache limpo; todas as mรบsicas serรฃo baixadas novamente na prรณxima reproduรงรฃo",
- "mm_hnf": "essa mรบsica nรฃo existe mais",
-
- "im_hnf": "essa imagem nรฃo existe mais",
-
- "f_empty": 'esta pasta estรก vazia',
- "f_chide": 'isso irรก ocultar a coluna ยซ{0}ยป\n\nvocรช pode reexibir as colunas na aba de configuraรงรตes',
- "f_bigtxt": "este arquivo tem {0} MiB de tamanho -- realmente ver como texto?",
- "f_bigtxt2": "ver apenas o final do arquivo em vez disso? isso tambรฉm ativarรก o acompanhamento/tailing, mostrando linhas de texto recรฉm-adicionadas em tempo real",
- "fbd_more": '',
- "fbd_all": '',
- "f_anota": "apenas {0} dos {1} itens foram selecionados;\npara selecionar a pasta inteira, primeiro role para o final",
-
- "f_dls": 'os links de arquivo na pasta atual foram\nalterados para links de download',
-
- "f_partial": "Para baixar com seguranรงa um arquivo que estรก sendo enviado, por favor, clique no arquivo que tem o mesmo nome, mas sem a extensรฃo .PARTIAL. Por favor, pressione CANCELAR ou Escape para fazer isso.\n\nPressionar OK / Enter irรก ignorar este aviso e continuar baixando o arquivo temporรกrio .PARTIAL, o que quase certamente lhe darรก dados corrompidos.",
-
- "ft_paste": "colar {0} itens$NHotkey: ctrl-V",
- "fr_eperm": 'nรฃo รฉ possรญvel renomear:\nvocรช nรฃo tem permissรฃo de โmoverโ nesta pasta',
- "fd_eperm": 'nรฃo รฉ possรญvel excluir:\nvocรช nรฃo tem permissรฃo de โexcluirโ nesta pasta',
- "fc_eperm": 'nรฃo รฉ possรญvel recortar:\nvocรช nรฃo tem permissรฃo de โmoverโ nesta pasta',
- "fp_eperm": 'nรฃo รฉ possรญvel colar:\nvocรช nรฃo tem permissรฃo de โescreverโ nesta pasta',
- "fr_emore": "selecione pelo menos um item para renomear",
- "fd_emore": "selecione pelo menos um item para excluir",
- "fc_emore": "selecione pelo menos um item para recortar",
- "fcp_emore": "selecione pelo menos um item para copiar para a รกrea de transferรชncia",
-
- "fs_sc": "compartilhar a pasta em que vocรช estรก",
- "fs_ss": "compartilhar os arquivos selecionados",
- "fs_just1d": "vocรช nรฃo pode selecionar mais de uma pasta,\nou misturar arquivos e pastas em uma seleรงรฃo",
- "fs_abrt": "โ abortar",
- "fs_rand": "๐ฒ nome aleatรณrio",
- "fs_go": "โ
criar compartilhamento",
- "fs_name": "nome",
- "fs_src": "fonte",
- "fs_pwd": "senha",
- "fs_exp": "expira",
- "fs_tmin": "min",
- "fs_thrs": "horas",
- "fs_tdays": "dias",
- "fs_never": "eterno",
- "fs_pname": "nome do link opcional; serรก aleatรณrio se em branco",
- "fs_tsrc": "o arquivo ou pasta a ser compartilhado",
- "fs_ppwd": "senha opcional",
- "fs_w8": "criando compartilhamento...",
- "fs_ok": "pressione Enter/OK para Copiar para a รrea de Transferรชncia\npressione ESC/Cancelar para Fechar",
-
- "frt_dec": "pode consertar alguns casos de nomes de arquivos quebrados\">url-decode",
- "frt_rst": "resetar nomes de arquivos modificados de volta para os originais\">โบ resetar",
- "frt_abrt": "abortar e fechar esta janela\">โ cancelar",
- "frb_apply": "APLICAR RENOMEAรรO",
- "fr_adv": "renomeaรงรฃo em lote / metadados / padrรฃo\">avanรงado",
- "fr_case": "regex sensรญvel a maiรบsculas e minรบsculas\">case",
- "fr_win": "nomes seguros para windows; substituir <>:"\\|?* por caracteres japoneses de largura total\">win",
- "fr_slash": "substituir / por um caractere que nรฃo cause a criaรงรฃo de novas pastas\">no /",
- "fr_re": "padrรฃo de busca regex para aplicar aos nomes de arquivos originais; grupos de captura podem ser referenciados no campo de formato abaixo como <code>(1)</code> e <code>(2)</code> e assim por diante",
- "fr_fmt": "inspirado por foobar2000:$N<code>(tรญtulo)</code> รฉ substituรญdo pelo tรญtulo da mรบsica,$N<code>[(artista) - ](tรญtulo)</code> pula esta parte se o artista estiver em branco$N<code>$lpad((tn),2,0)</code> preenche o nรบmero da faixa com 2 dรญgitos",
- "fr_pdel": "excluir",
- "fr_pnew": "salvar como",
- "fr_pname": "forneรงa um nome para seu novo preset",
- "fr_aborted": "abortado",
- "fr_lold": "nome antigo",
- "fr_lnew": "novo nome",
- "fr_tags": "tags para os arquivos selecionados (somente leitura, apenas para referรชncia):",
- "fr_busy": "renomeando {0} itens...\n\n{1}",
- "fr_efail": "renomeaรงรฃo falhou:\n",
- "fr_nchg": "{0} dos novos nomes foram alterados devido a win e/ou no /\n\nOK para continuar com estes novos nomes alterados?",
-
- "fd_ok": "exclusรฃo OK",
- "fd_err": "exclusรฃo falhou:\n",
- "fd_none": "nada foi excluรญdo; talvez bloqueado pela configuraรงรฃo do servidor (xbd)?",
- "fd_busy": "excluindo {0} itens...\n\n{1}",
- "fd_warn1": "EXCLUIR estes {0} itens?",
- "fd_warn2": "รltima chance! Nรฃo hรก como desfazer. Excluir?",
-
- "fc_ok": "recortar {0} itens",
- "fc_warn": 'recortar {0} itens\n\nmas: apenas esta aba do navegador pode colรก-los\n(jรก que a seleรงรฃo รฉ tรฃo absolutamente massiva)',
-
- "fcc_ok": "copiado {0} itens para a รกrea de transferรชncia",
- "fcc_warn": 'copiado {0} itens para a รกrea de transferรชncia\n\nmas: apenas esta aba do navegador pode colรก-los\n(jรก que a seleรงรฃo รฉ tรฃo absolutamente massiva)',
-
- "fp_apply": "usar estes nomes",
- "fp_ecut": "primeiro recorte ou copie alguns arquivos / pastas para colar / mover\n\nnota: vocรช pode recortar / colar entre abas diferentes do navegador",
- "fp_ename": "{0} itens nรฃo podem ser movidos para cรก porque os nomes jรก estรฃo em uso. Dรช a eles novos nomes abaixo para continuar, ou deixe o nome em branco para pular:",
- "fcp_ename": "{0} itens nรฃo podem ser copiados para cรก porque os nomes jรก estรฃo em uso. Dรช a eles novos nomes abaixo para continuar, ou deixe o nome em branco para pular:",
- "fp_emore": "ainda hรก algumas colisรตes de nome de arquivo para consertar",
- "fp_ok": "movimento OK",
- "fcp_ok": "cรณpia OK",
- "fp_busy": "movendo {0} itens...\n\n{1}",
- "fcp_busy": "copiando {0} itens...\n\n{1}",
- "fp_abrt": "abortando...",
- "fp_err": "movimento falhou:\n",
- "fcp_err": "cรณpia falhou:\n",
- "fp_confirm": "mover estes {0} itens para cรก?",
- "fcp_confirm": "copiar estes {0} itens para cรก?",
- "fp_etab": 'falha ao ler a รกrea de transferรชncia de outra aba do navegador',
- "fp_name": "enviando um arquivo do seu dispositivo. Dรช-lhe um nome:",
- "fp_both_m": 'escolha o que colar
Enter = Mover {0} arquivos de ยซ{1}ยป\nESC = Enviar {2} arquivos do seu dispositivo',
- "fcp_both_m": 'escolha o que colar
Enter = Copiar {0} arquivos de ยซ{1}ยป\nESC = Enviar {2} arquivos do seu dispositivo',
- "fp_both_b": 'MoverEnviar',
- "fcp_both_b": 'CopiarEnviar',
-
- "mk_noname": "digite um nome no campo de texto ร esquerda antes de fazer isso :p",
-
- "tv_load": "Carregando documento de texto:\n\n{0}\n\n{1}% ({2} de {3} MiB carregados)",
- "tv_xe1": "nรฃo foi possรญvel carregar o arquivo de texto:\n\nerro ",
- "tv_xe2": "404, arquivo nรฃo encontrado",
- "tv_lst": "lista de arquivos de texto em",
- "tvt_close": "voltar para a visualizaรงรฃo da pasta$NHotkey: M (ou Esc)\">โ fechar",
- "tvt_dl": "baixar este arquivo$NHotkey: Y\">๐พ baixar",
- "tvt_prev": "mostrar documento anterior$NHotkey: i\">โฌ anterior",
- "tvt_next": "mostrar prรณximo documento$NHotkey: K\">โฌ prรณximo",
- "tvt_sel": "selecionar arquivo ( para recortar / copiar / excluir / ... )$NHotkey: S\">sel",
- "tvt_edit": "abrir arquivo no editor de texto$NHotkey: E\">โ๏ธ editar",
- "tvt_tail": "monitorar arquivo para alteraรงรตes; mostrar novas linhas em tempo real\">๐ก seguir",
- "tvt_wrap": "quebra de linha\">โต",
- "tvt_atail": "fixar rolagem no final da pรกgina\">โ",
- "tvt_ctail": "decodificar cores do terminal (cรณdigos de escape ansi)\">๐",
- "tvt_ntail": "limite de rolagem para trรกs (quantos bytes de texto manter carregados)",
-
- "m3u_add1": "mรบsica adicionada ร playlist m3u",
- "m3u_addn": "{0} mรบsicas adicionadas ร playlist m3u",
- "m3u_clip": "playlist m3u agora copiada para a รกrea de transferรชncia\n\nvocรช deve criar um novo arquivo de texto chamado something.m3u e colar a playlist nesse documento; isso a tornarรก reproduzรญvel",
-
- "gt_vau": "nรฃo mostrar vรญdeos, apenas tocar o รกudio\">๐ง",
- "gt_msel": "ativar seleรงรฃo de arquivo; ctrl-clique em um arquivo para substituir$N$n<em>quando ativo: clique duas vezes em um arquivo / pasta para abri-lo&>t;/em>$N$nHotkey: S\">multisseleรงรฃo",
- "gt_crop": "cortar miniaturas ao centro\">cortar",
- "gt_3x": "miniaturas de alta resoluรงรฃo\">3x",
- "gt_zoom": "zoom",
- "gt_chop": "picar",
- "gt_sort": "ordenar por",
- "gt_name": "nome",
- "gt_sz": "tamanho",
- "gt_ts": "data",
- "gt_ext": "tipo",
- "gt_c1": "truncar nomes de arquivos mais (mostrar menos)",
- "gt_c2": "truncar nomes de arquivos menos (mostrar mais)",
-
- "sm_w8": "buscando...",
- "sm_prev": "os resultados da busca abaixo sรฃo de uma consulta anterior:\n ",
- "sl_close": "fechar resultados da busca",
- "sl_hits": "mostrando {0} resultados",
- "sl_moar": "carregar mais",
-
- "s_sz": "tamanho",
- "s_dt": "data",
- "s_rd": "caminho",
- "s_fn": "nome",
- "s_ta": "tags",
- "s_ua": "up@",
- "s_ad": "adv.",
- "s_s1": "MiB mรญnimo",
- "s_s2": "MiB mรกximo",
- "s_d1": "iso8601 min.",
- "s_d2": "iso8601 max.",
- "s_u1": "enviado depois de",
- "s_u2": "e/ou antes de",
- "s_r1": "caminho contรฉm (separado por espaรงo)",
- "s_f1": "nome contรฉm (negar com -nope)",
- "s_t1": "tags contรฉm (^=inรญcio, fim=$)",
- "s_a1": "propriedades de metadados especรญficas",
-
- "md_eshow": "nรฃo รฉ possรญvel renderizar ",
- "md_off": "[๐readme] desativado em [โ๏ธ] -- documento oculto",
-
- "badreply": "Falha ao analisar a resposta do servidor",
-
- "xhr403": "403: Acesso negado\n\ntente pressionar F5, talvez vocรช tenha saรญdo da conta",
- "xhr0": "desconhecido (provavelmente perdeu a conexรฃo com o servidor, ou o servidor estรก offline)",
- "cf_ok": "desculpe por isso -- a proteรงรฃo DD" + "oS foi ativada\n\nas coisas devem ser retomadas em cerca de 30 segundos\n\nse nada acontecer, pressione F5 para recarregar a pรกgina",
- "tl_xe1": "nรฃo foi possรญvel listar as subpastas:\n\nerro ",
- "tl_xe2": "404: Pasta nรฃo encontrada",
- "fl_xe1": "nรฃo foi possรญvel listar os arquivos na pasta:\n\nerro ",
- "fl_xe2": "404: Pasta nรฃo encontrada",
- "fd_xe1": "nรฃo foi possรญvel criar a subpasta:\n\nerro ",
- "fd_xe2": "404: Pasta pai nรฃo encontrada",
- "fsm_xe1": "nรฃo foi possรญvel enviar a mensagem:\n\nerro ",
- "fsm_xe2": "404: Pasta pai nรฃo encontrada",
- "fu_xe1": "falha ao carregar a lista de despublicaรงรฃo do servidor:\n\nerro ",
- "fu_xe2": "404: Arquivo nรฃo encontrado??",
-
- "fz_tar": "arquivo gnu-tar nรฃo comprimido (linux / mac)",
- "fz_pax": "tar de formato pax nรฃo comprimido (mais lento)",
- "fz_targz": "gnu-tar com compressรฃo gzip nรญvel 3$N$nisto รฉ geralmente muito lento, entรฃo$nuse tar nรฃo comprimido em vez disso",
- "fz_tarxz": "gnu-tar com compressรฃo xz nรญvel 1$N$nisto รฉ geralmente muito lento, entรฃo$nuse tar nรฃo comprimido em vez disso",
- "fz_zip8": "zip com nomes de arquivos utf8 (pode ser instรกvel no windows 7 e mais antigos)",
- "fz_zipd": "zip com nomes de arquivos cp437 tradicionais, para software realmente antigo",
- "fz_zipc": "cp437 com crc32 calculado antecipadamente,$npara MS-DOS PKZIP v2.04g (outubro de 1993)$n(leva mais tempo para processar antes que o download possa comeรงar)",
-
- "un_m1": "vocรช pode excluir seus uploads recentes (ou abortar os que nรฃo foram concluรญdos) abaixo",
- "un_upd": "atualizar",
- "un_m4": "ou compartilhar os arquivos visรญveis abaixo:",
- "un_ulist": "mostrar",
- "un_ucopy": "copiar",
- "un_flt": "filtro opcional: a URL deve conter",
- "un_fclr": "limpar filtro",
- "un_derr": 'a exclusรฃo da despublicaรงรฃo falhou:\n',
- "un_f5": 'algo quebrou, por favor, tente uma atualizaรงรฃo ou pressione F5',
- "un_uf5": "desculpe, mas vocรช tem que atualizar a pรกgina (por exemplo, pressionando F5 ou CTRL-R) antes que este upload possa ser abortado",
- "un_nou": "aviso: o servidor estรก muito ocupado para mostrar uploads incompletos; clique no link \"atualizar\" em um momento",
- "un_noc": "aviso: a despublicaรงรฃo de arquivos totalmente enviados nรฃo estรก ativada/permitida na configuraรงรฃo do servidor",
- "un_max": "mostrando os primeiros 2000 arquivos (use o filtro)",
- "un_avail": "{0} uploads recentes podem ser excluรญdos
{1} incompletos podem ser abortados",
- "un_m2": "ordenado por tempo de upload; o mais recente primeiro:",
- "un_no1": "sike! nenhum upload รฉ suficientemente recente",
- "un_no2": "sike! nenhum upload que corresponda a esse filtro รฉ suficientemente recente",
- "un_next": "excluir os prรณximos {0} arquivos abaixo",
- "un_abrt": "abortar",
- "un_del": "excluir",
- "un_m3": "carregando seus uploads recentes...",
- "un_busy": "excluindo {0} arquivos...",
- "un_clip": "{0} links copiados para a รกrea de transferรชncia",
-
- "u_https1": "vocรช deveria",
- "u_https2": "mudar para https",
- "u_https3": "para um melhor desempenho",
- "u_ancient": 'seu navegador รฉ impressionantemente antigo -- talvez vocรช devesse usar o bup em vez disso',
- "u_nowork": "precisa do firefox 53+ ou chrome 57+ ou iOS 11+",
- "tail_2old": "precisa do firefox 105+ ou chrome 71+ ou iOS 14.5+",
- "u_nodrop": 'seu navegador รฉ muito antigo para upload de arrastar e soltar',
- "u_notdir": "isso nรฃo รฉ uma pasta!\n\nseu navegador รฉ muito antigo,\npor favor, tente arrastar e soltar em vez disso",
- "u_uri": "para arrastar e soltar imagens de outras janelas do navegador,\npor favor, solte-as no grande botรฃo de upload",
- "u_enpot": 'mudar para UI batata (pode melhorar a velocidade de upload)',
- "u_depot": 'mudar para UI chique (pode reduzir a velocidade de upload)',
- "u_gotpot": 'mudando para a UI batata para uma velocidade de upload melhorada,\n\nsinta-se ร vontade para discordar e voltar!',
- "u_pott": "arquivos: {0} concluรญdos, {1} falhados, {2} ocupados, {3} na fila
",
- "u_ever": "este รฉ o uploader bรกsico; up2k precisa de pelo menos
chrome 21 // firefox 13 // edge 12 // opera 12 // safari 5.1",
- "u_su2k": 'este รฉ o uploader bรกsico; up2k รฉ melhor',
- "u_uput": 'otimizar para velocidade (pular checksum)',
- "u_ewrite": 'vocรช nรฃo tem acesso de escrita a esta pasta',
- "u_eread": 'vocรช nรฃo tem acesso de leitura a esta pasta',
- "u_enoi": 'a busca de arquivos nรฃo estรก ativada na configuraรงรฃo do servidor',
- "u_enoow": "substituir nรฃo funcionarรก aqui; precisa de permissรฃo de Excluir",
- "u_badf": 'Estes {0} arquivos (de um total de {1}) foram ignorados, possivelmente devido a permissรตes do sistema de arquivos:\n\n',
- "u_blankf": 'Estes {0} arquivos (de um total de {1}) estรฃo em branco / vazios; enviรก-los de qualquer maneira?\n\n',
- "u_applef": 'Estes {0} arquivos (de um total de {1}) sรฃo provavelmente indesejรกveis;\nPressione OK/Enter para PULAR os seguintes arquivos,\nPressione Cancelar/ESC para NรO excluir, e ENVIAR esses tambรฉm:\n\n',
- "u_just1": '\nTalvez funcione melhor se vocรช selecionar apenas um arquivo',
- "u_ff_many": "se vocรช estiver usando Linux / MacOS / Android, entรฃo essa quantidade de arquivos pode travar o Firefox!\nse isso acontecer, por favor, tente novamente (ou use o Chrome).",
- "u_up_life": "Este upload serรก excluรญdo do servidor\n{0} apรณs ser concluรญdo",
- "u_asku": 'enviar estes {0} arquivos para {1}',
- "u_unpt": "vocรช pode desfazer / excluir este upload usando o ๐งฏ no canto superior esquerdo",
- "u_bigtab": 'prestes a mostrar {0} arquivos\n\nisto pode travar seu navegador, tem certeza?',
- "u_scan": 'Escaneando arquivos...',
- "u_dirstuck": 'o iterador de diretรณrio travou ao tentar acessar os seguintes {0} itens; irรก pular:',
- "u_etadone": 'Concluรญdo ({0}, {1} arquivos)',
- "u_etaprep": '(preparando para enviar)',
- "u_hashdone": 'hash concluรญdo',
- "u_hashing": 'hash',
- "u_hs": 'handshaking...',
- "u_started": "os arquivos estรฃo sendo enviados agora; veja [๐]",
- "u_dupdefer": "duplicado; serรก processado apรณs todos os outros arquivos",
- "u_actx": "clique neste texto para evitar perda de
desempenho ao mudar para outras janelas/abas",
- "u_fixed": "OK! Consertado ๐",
- "u_cuerr": "falha ao enviar o bloco {0} de {1};\nprovavelmente inofensivo, continuando\n\narquivo: {2}",
- "u_cuerr2": "o servidor rejeitou o upload (bloco {0} de {1});\ntentarรก novamente mais tarde\n\narquivo: {2}\n\nerro ",
- "u_ehstmp": "tentarรก novamente; veja no canto inferior direito",
- "u_ehsfin": "o servidor rejeitou a solicitaรงรฃo para finalizar o upload; tentando novamente...",
- "u_ehssrch": "o servidor rejeitou a solicitaรงรฃo para realizar a busca; tentando novamente...",
- "u_ehsinit": "o servidor rejeitou a solicitaรงรฃo para iniciar o upload; tentando novamente...",
- "u_eneths": "erro de rede ao realizar o handshake de upload; tentando novamente...",
- "u_enethd": "erro de rede ao testar a existรชncia do alvo; tentando novamente...",
- "u_cbusy": "esperando o servidor confiar em nรณs novamente apรณs uma falha de rede...",
- "u_ehsdf": "o servidor ficou sem espaรงo em disco!\n\ncontinuarรก tentando novamente, caso alguรฉm\nlibere espaรงo suficiente para continuar",
- "u_emtleak1": "parece que seu navegador pode ter um vazamento de memรณria;\npor favor,",
- "u_emtleak2": ' mude para https (recomendado) ou ',
- "u_emtleak3": ' ',
- "u_emtleakc": 'tente o seguinte:\n- pressione
F5 para atualizar a pรกgina - depois desative o botรฃo
mt nas โ๏ธ configuraรงรตes - e tente o upload novamente
Os uploads serรฃo um pouco mais lentos, mas tudo bem.\nDesculpe pelo problema !\n\nPS: chrome v107 tem uma correรงรฃo de bug para isso',
- "u_emtleakf": 'tente o seguinte:\n- pressione
F5 para atualizar a pรกgina - depois ative
๐ฅ (batata) na UI de upload - e tente o upload novamente
\nPS: o firefox esperanรงosamente terรก uma correรงรฃo de bug em algum momento',
- "u_s404": "nรฃo encontrado no servidor",
- "u_expl": "explicar",
- "u_maxconn": "a maioria dos navegadores limita isso a 6, mas o firefox permite que vocรช aumente com connections-per-server em about:config",
- "u_tu": 'AVISO: turbo ativado, o cliente pode nรฃo detectar e retomar uploads incompletos; veja a dica de ferramenta do botรฃo turbo
',
- "u_ts": 'AVISO: turbo ativado, os resultados da busca podem estar incorretos; veja a dica de ferramenta do botรฃo turbo
',
- "u_turbo_c": "o turbo estรก desativado na configuraรงรฃo do servidor",
- "u_turbo_g": "desativando o turbo porque vocรช nรฃo tem\n privilรฉgios de listagem de diretรณrio neste volume",
- "u_life_cfg": 'excluir automaticamente depois de min (ou horas)',
- "u_life_est": 'o upload serรก excluรญdo ---',
- "u_life_max": 'esta pasta impรตe um\n tempo de vida mรกximo de {0}',
- "u_unp_ok": 'a despublicaรงรฃo รฉ permitida para {0}',
- "u_unp_ng": 'a despublicaรงรฃo NรO serรก permitida',
- "ue_ro": 'seu acesso a esta pasta รฉ Somente Leitura\n\n',
- "ue_nl": 'vocรช nรฃo estรก logado no momento',
- "ue_la": 'vocรช estรก logado no momento como "{0}"',
- "ue_sr": 'vocรช estรก no modo de busca de arquivos no momento\n\nmude para o modo de upload clicando na lupa ๐ (ao lado do grande botรฃo BUSCAR), e tente enviar novamente\n\ndesculpe',
- "ue_ta": 'tente enviar novamente, deve funcionar agora',
- "ue_ab": "este arquivo jรก estรก sendo enviado para outra pasta, e esse upload deve ser concluรญdo antes que o arquivo possa ser enviado para outro lugar.\n\nVocรช pode abortar e esquecer o upload inicial usando o ๐งฏ no canto superior esquerdo",
- "ur_1uo": "OK: Arquivo enviado com sucesso",
- "ur_auo": "OK: Todos os {0} arquivos enviados com sucesso",
- "ur_1so": "OK: Arquivo encontrado no servidor",
- "ur_aso": "OK: Todos os {0} arquivos encontrados no servidor",
- "ur_1un": "O upload falhou, desculpe",
- "ur_aun": "Todos os {0} uploads falharam, desculpe",
- "ur_1sn": "O arquivo NรO foi encontrado no servidor",
- "ur_asn": "Os {0} arquivos NรO foram encontrados no servidor",
- "ur_um": "Concluรญdo;\n{0} uploads OK,\n{1} uploads falharam, desculpe",
- "ur_sm": "Concluรญdo;\n{0} arquivos encontrados no servidor,\n{1} arquivos NรO encontrados no servidor",
-
- "lang_set": "atualizar para a mudanรงa ter efeito?"
- },
- "rus": {
- "tt": "ะ ัััะบะธะน",
-
- "cols": {
- "c": "ะบะฝะพะฟะบะธ ะดะตะนััะฒะธะน",
- "dur": "ะดะปะธัะตะปัะฝะพััั",
- "q": "ะบะฐัะตััะฒะพ / ะฑะธััะตะนั",
- "Ac": "ะฐัะดะธะพ ะบะพะดะตะบ",
- "Vc": "ะฒะธะดะตะพ ะบะพะดะตะบ",
- "Fmt": "ัะพัะผะฐั / ะบะพะฝัะตะนะฝะตั",
- "Ahash": "ะบะพะฝััะพะปัะฝะฐั ััะผะผะฐ ะฐัะดะธะพ",
- "Vhash": "ะบะพะฝััะพะปัะฝะฐั ััะผะผะฐ ะฒะธะดะตะพ",
- "Res": "ัะฐะทัะตัะตะฝะธะต",
- "T": "ัะธะฟ ัะฐะนะปะฐ",
- "aq": "ะบะฐัะตััะฒะพ ะฐัะดะธะพ / ะฑะธััะตะนั",
- "vq": "ะบะฐัะตััะฒะพ ะฒะธะดะตะพ / ะฑะธััะตะนั",
- "pixfmt": "ัะฐะฑัะตะผะฟะปะธะฝะณ / ะฟะธะบัะตะปัะฝัะน ัะพัะผะฐั",
- "resw": "ะณะพัะธะทะพะฝัะฐะปัะฝะพะต ัะฐะทัะตัะตะฝะธะต",
- "resh": "ะฒะตััะธะบะฐะปัะฝะพะต ัะฐะทัะตัะตะฝะธะต",
- "chs": "ะฐัะดะธะพ ะบะฐะฝะฐะปั",
- "hz": "ัะฐััะพัะฐ ะดะธัะบัะตัะธะทะฐัะธะธ"
- },
-
- "hks": [
- [
- "ัะฐะทะฝะพะต",
- ["ESC", "ะทะฐะบัััั ะฒััะบะธะต ัััะบะธ"],
-
- "ัะฐะนะปะพะฒัะน ะผะตะฝะตะดะถะตั",
- ["G", "ะฟะตัะตะบะปััะธัััั ะผะตะถะดั ัะฟะธัะบะพะผ / ะฟะปะธัะบะพะน"],
- ["T", "ะฟะตัะตะบะปััะธัััั ะผะตะถะดั ะผะธะฝะธะฐัััะฐะผะธ / ะธะบะพะฝะบะฐะผะธ"],
- ["โง A/D", "ัะฐะทะผะตั ะผะธะฝะธะฐัััั"],
- ["ctrl-K", "ัะดะฐะปะธัั ะฒัะดะตะปะตะฝะฝะพะต"],
- ["ctrl-X", "ะฒััะตะทะฐัั ะฒัะดะตะปะตะฝะฝะพะต ะฒ ะฑััะตั"],
- ["ctrl-C", "ะบะพะฟะธัะพะฒะฐัั ะฒัะดะตะปะตะฝะฝะพะต ะฒ ะฑััะตั"],
- ["ctrl-V", "ะฒััะฐะฒะธัั (ะฟะตัะตะผะตััะธัั/ะบะพะฟะธัะพะฒะฐัั) ััะดะฐ"],
- ["Y", "ัะบะฐัะฐัั ะฒัะดะตะปะตะฝะฝะพะต"],
- ["F2", "ะฟะตัะตะธะผะตะฝะพะฒะฐัั ะฒัะดะตะปะตะฝะฝะพะต"],
-
- "ะฒัะดะตะปะตะฝะธะต ัะฐะนะปะพะฒ",
- ["ะฟัะพะฑะตะป", "ะฒัะดะตะปะธัั/ัะฝััั ะฒัะดะตะปะตะฝะธะต ั ัะตะบััะตะณะพ ัะฐะนะปะฐ"],
- ["โ/โ", "ะดะฒะธะณะฐัั ะบัััะพั"],
- ["ctrl โ/โ", "ะดะฒะธะณะฐัั ะบัััะพั ะธ ัะบัะพะปะปะธัั"],
- ["โง โ/โ", "ะฒัะดะตะปะธัั ะฟัะตะดัะดััะธะน/ัะปะตะดัััะธะน ัะฐะนะป"],
- ["ctrl-A", "ะฒัะดะตะปะธัั ะฒัะต ัะฐะนะปั ะธ ะฟะฐะฟะบะธ"],
- ], [
- "ะฝะฐะฒะธะณะฐัะธั",
- ["B", "ะฟะพะบะฐะทะฐัั/ัะบัััั ะฟะฐะฝะตะปั ะฝะฐะฒะธะณะฐัะธะธ"],
- ["I/K", "ะฟัะตะดัะดััะฐั/ัะปะตะดัััะฐั ะฟะฐะฟะบะฐ"],
- ["M", "ะฟะตัะตะนัะธ ะฝะฐ ััะพะฒะตะฝั ะฒััะต (ะธะปะธ ัะฒะตัะฝััั ัะตะบัััั ะฟะฐะฟะบั)"],
- ["V", "ะฟะตัะตะบะปััะธัััั ะผะตะถะดั ะฟะฐะฟะบะฐะผะธ / ัะตะบััะพะฒัะผะธ ัะฐะนะปะฐะผะธ ะฒ ะฟะฐะฝะตะปะธ ะฝะฐะฒะธะณะฐัะธะธ"],
- ["A/D", "ัะผะตะฝััะธัั/ัะฒะตะปะธัะธัั ะฟะฐะฝะตะปั ะฝะฐะฒะธะณะฐัะธะธ"],
- ], [
- "ะฐัะดะธะพะฟะปะตะตั",
- ["J/L", "ะฟัะตะดัะดััะธะน/ัะปะตะดัััะธะน ััะตะบ"],
- ["U/O", "ะฟะตัะตะผะพัะฐัั ะฝะฐ 10 ัะตะบัะฝะด ะฝะฐะทะฐะด/ะฒะฟะตััะด"],
- ["0..9", "ะฟะตัะตะผะพัะฐัั ะฝะฐ 0%..90%"],
- ["P", "ะธะณัะฐัั/ะฟะฐัะทะฐ (ะธะปะธ ะฟะพะดะณััะทะธัั ััะตะบ)"],
- ["S", "ะฒัะดะตะปะธัั ัะตะบััะธะน ััะตะบ"],
- ["Y", "ัะบะฐัะฐัั ััะตะบ"],
- ], [
- "ะฟัะพัะผะพัััะธะบ ะธะทะพะฑัะฐะถะตะฝะธะน",
- ["J/L, โ/โ", "ะฟัะตะดัะดััะตะต/ัะปะตะดัััะตะต ะธะทะพะฑัะฐะถะตะฝะธะต"],
- ["Home/End", "ะฟะตัะฒะพะต/ะฟะพัะปะตะดะฝะตะต ะธะทะพะฑัะฐะถะตะฝะธะต"],
- ["F", "ัะฐะทะฒะตัะฝััั ะฝะฐ ะฟะพะปะฝัะน ัะบัะฐะฝ"],
- ["R", "ะฟะพะฒะตัะฝััั ะฟะพ ัะฐัะพะฒะพะน ัััะตะปะบะต"],
- ["โง R", "ะฟะพะฒะตัะฝััั ะฟัะพัะธะฒ ัะฐัะพะฒะพะน ัััะตะปะบะธ"],
- ["S", "ะฒัะดะตะปะธัั ะธะทะพะฑัะฐะถะตะฝะธะต"],
- ["Y", "ัะบะฐัะฐัั ะธะทะพะฑัะฐะถะตะฝะธะต"],
- ], [
- "ะฒะธะดะตะพะฟะปะตะตั",
- ["U/O", "ะฟะตัะตะผะพัะฐัั ะฝะฐ 10 ัะตะบัะฝะด ะฝะฐะทะฐะด/ะฒะฟะตััะด"],
- ["P/K/Space", "ะธะณัะฐัั/ะฟะฐัะทะฐ"],
- ["C", "ะฟัะพะดะพะปะถะธัั ะฟัะพะธะณััะฒะฐัั ัะปะตะดัััะตะต"],
- ["V", "ะฟะพะฒัะพั"],
- ["M", "ะฒัะบะปััะธัั ะทะฒัะบ"],
- ["[ and ]", "ะทะฐะดะฐัั ะธะฝัะตัะฒะฐะป ะฟะพะฒัะพัะฐ"],
- ], [
- "ะฟัะพัะผะพัััะธะบ ัะตะบััะพะฒัั
ัะฐะนะปะพะฒ",
- ["I/K", "ะฟัะตะดัะดััะธะน/ัะปะตะดัััะธะน ัะฐะนะป"],
- ["M", "ะทะฐะบัััั ัะฐะนะป"],
- ["E", "ะพััะตะดะฐะบัะธัะพะฒะฐัั ัะฐะนะป"],
- ["S", "ะฒัะดะตะปะธัั ัะฐะนะป"],
- ]
- ],
-
- "m_ok": "OK",
- "m_ng": "ะัะผะตะฝะฐ",
-
- "enable": "ะะบะปััะธัั",
- "danger": "ะะะะะะะะ",
- "clipped": "ัะบะพะฟะธัะพะฒะฐะฝะพ ะฒ ะฑััะตั ะพะฑะผะตะฝะฐ",
-
- "ht_s1": "ัะตะบัะฝะดะฐ",
- "ht_s2": "ัะตะบัะฝะดั",
- "ht_m1": "ะผะธะฝััะฐ",
- "ht_m2": "ะผะธะฝััั",
- "ht_h1": "ัะฐั",
- "ht_h2": "ัะฐัั",
- "ht_d1": "ะดะตะฝั",
- "ht_d2": "ะดะฝะธ",
- "ht_and": " ะธ ",
-
- "goh": "ะฟะฐะฝะตะปั ัะฟัะฐะฒะปะตะฝะธั",
- "gop": 'ะฟัะตะดัะดััะฐั ะฟะฐะฟะบะฐ">ะฟัะตะด',
- "gou": 'ัะพะดะธัะตะปััะบะฐั ะฟะฐะฟะบะฐ">ะฒะฒะตัั
',
- "gon": 'ัะปะตะดัััะฐั ะฟะฐะฟะบะฐ">ัะปะตะด',
- "logout": "ะัะนัะธ ",
- "login": "ะะพะนัะธ", //m
- "access": " ะดะพัััะฟ",
- "ot_close": "ะทะฐะบัััั ะฟะพะดะผะตะฝั",
- "ot_search": "ะธัะบะฐัั ัะฐะนะปั ะฟะพ ะฐััะธะฑััะฐะผ, ะฟััะธ / ะธะผะตะฝะธ, ะผัะทัะบะฐะปัะฝัะผ ัะตะณะฐะผ ะธะปะธ ะปัะฑะพะน ะดััะณะพะน ะบะพะผะฑะธะฝะฐัะธะธ ะธะท ัะปะตะดัััะธั
ะบะพะฝััััะบัะธะน$N$N<code>foo bar</code> = ะพะฑัะทะฐะฝะพ ัะพะดะตัะถะฐัั ยซfooยป ะ ยซbarยป,$N<code>foo -bar</code> = ะพะฑัะทะฐะฝะพ ัะพะดะตัะถะฐัั ยซfooยป, ะฝะพ ะฝะต ยซbarยป,$N<code>^yana .opus$</code> = ะฝะฐัะธะฝะฐะตััั ั ยซyanaยป ะธ ะธะผะตะตั ัะฐััะธัะตะฝะธะต ยซopusยป$N<code>"try unite"</code> = ัะพะดะตัะถะธั ะธะผะตะฝะฝะพ ยซtry uniteยป$N$Nัะพัะผะฐั ะฒัะตะผะตะฝะธ ะทะฐะดะฐัััั ะฟะพ ััะฐะฝะดะฐััั iso-8601, ะฝะฐะฟัะธะผะตั$N<code>2009-12-31</code> ะธะปะธ <code>2020-09-12 23:30:00</code>",
- "ot_unpost": "unpost: ัะดะฐะปะธัั ะฒะฐัะธ ะฝะตะดะฐะฒะฝะธะต ะทะฐะณััะทะบะธ ะธ ะพัะผะตะฝะธัั ะฝะตะทะฐะฒะตัััะฝะฝัะต",
- "ot_bup": "bup: ะปะตะณะบะพะฒะตัะฝัะน ะทะฐะณััะทัะธะบ ัะฐะนะปะพะฒ, ะฟะพะดะดะตัะถะธะฒะฐะตั ะดะฐะถะต netscape 4.0",
- "ot_mkdir": "mkdir: ัะพะทะดะฐัั ะฝะพะฒัั ะฟะฐะฟะบั",
- "ot_md": "new-md: ัะพะทะดะฐัั ะฝะพะฒัะน markdown-ะดะพะบัะผะตะฝั",
- "ot_msg": "msg: ะพัะฟัะฐะฒะธัั ัะพะพะฑัะตะฝะธะต ะฒ ะปะพะณ ัะตัะฒะตัะฐ",
- "ot_mp": "ะฝะฐัััะพะนะบะฐ ะผะตะดะธะฐะฟะปะตะตัะฐ",
- "ot_cfg": "ะพััะฐะปัะฝัะต ะฝะฐัััะพะนะบะธ",
- "ot_u2i": 'up2k: ะทะฐะณััะทะธัั ัะฐะนะปั (ะตัะปะธ ะธะผะตะตััั ะดะพัััะฟ ะบ ะทะฐะฟะธัะธ) ะธะปะธ ะฟะตัะตะบะปััะธัััั ะฒ ัะตะถะธะผ ะฟะพะธัะบะฐ$N$Nะทะฐะณััะทะบะธ ัะฒะปััััั ะฒะพะทะพะฑะฝะพะฒะปัะตะผัะผะธ ะธ ะผะฝะพะณะพะฟะพัะพัะฝัะผะธ, ะฐ ะดะฐัั ะธะทะผะตะฝะตะฝะธั ัะฐะนะปะพะฒ ัะพั
ัะฐะฝััััั ะฒ ะฟัะพัะตััะต, ะฝะพ ััะพั ะผะตัะพะด ะธัะฟะพะปัะทัะตั ะฑะพะปััะต ัะตััััะพะฒ ะฟัะพัะตััะพัะฐ, ัะตะผ [๐] (ะปะตะณะบะพะฒะตัะฝัะน ะทะฐะณััะทัะธะบ)
ะฒะพ ะฒัะตะผั ะทะฐะณััะทะบะธ ััะฐ ะธะบะพะฝะบะฐ ะฟัะตะฒัะฐัะฐะตััั ะฒ ะธะฝะดะธะบะฐัะพั!',
- "ot_u2w": 'up2k: ะทะฐะณััะทะธัั ัะฐะนะปั ั ะฟะพะดะดะตัะถะบะพะน ะฒะพะทะพะฑะฝะพะฒะปะตะฝะธั (ะทะฐะบะธะฝััะต ัะต ะถะต ัะฐะนะปั ะฟะพัะปะต ะฟะตัะตะทะฐะฟััะบะฐ ะฑัะฐัะทะตัะฐ)$N$Nะฟะพะดะดะตัะถะธะฒะฐะตััั ะผะฝะพะณะพะฟะพัะพัะฝะพััั, ะดะฐัั ะธะทะผะตะฝะตะฝะธั ัะฐะนะปะพะฒ ัะพั
ัะฐะฝััััั ะฒ ะฟัะพัะตััะต, ะฝะพ ััะพั ะผะตัะพะด ะธัะฟะพะปัะทัะตั ะฑะพะปััะต ัะตััััะพะฒ ะฟัะพัะตััะพัะฐ, ัะตะผ [๐] (ะปะตะณะบะพะฒะตัะฝัะน ะทะฐะณััะทัะธะบ)
ะฒะพ ะฒัะตะผั ะทะฐะณััะทะบะธ ััะฐ ะธะบะพะฝะบะฐ ะฟัะตะฒัะฐัะฐะตััั ะฒ ะธะฝะดะธะบะฐัะพั!',
- "ot_noie": 'ะะพะถะฐะปัะนััะฐ, ะธัะฟะพะปัะทัะนัะต Chrome / Firefox / Edge',
-
- "ab_mkdir": "ัะพะทะดะฐัั ะฟะฐะฟะบั",
- "ab_mkdoc": "ัะพะทะดะฐัั markdown-ะดะพะบัะผะตะฝั",
- "ab_msg": "ะพัะฟัะฐะฒะธัั ัะพะพะฑัะตะฝะธะต ะฒ ะปะพะณ ัะตัะฒะตัะฐ",
-
- "ay_path": "ะฟะตัะตะนัะธ ะบ ะฟะฐะฟะบะฐะผ",
- "ay_files": "ะฟะตัะตะนัะธ ะบ ัะฐะนะปะฐะผ",
-
- "wt_ren": "ะฟะตัะตะธะผะตะฝะพะฒะฐัั ะฒัะดะตะปะตะฝะฝัะต ัะฐะนะปั$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: F2",
- "wt_del": "ัะดะฐะปะธัั ะฒัะดะตะปะตะฝะฝัะต ัะฐะนะปั$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: ctrl-K",
- "wt_cut": "ะฒััะตะทะฐัั ะฒัะดะตะปะตะฝะฝัะต ัะฐะนะปั <small>(ะทะฐัะตะผ ะฒััะฐะฒะธัั ะบัะดะฐ-ัะพ ะฒ ะดััะณะพะต ะผะตััะพ)</small>$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: ctrl-X",
- "wt_cpy": "ะบะพะฟะธัะพะฒะฐัั ะฒัะดะตะปะตะฝะฝัะต ัะฐะนะปั ะฒ ะฑััะตั$N(ััะพะฑั ะฒััะฐะฒะธัั ะธั
ะบัะดะฐ-ัะพ ะตัั)$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: ctrl-C",
- "wt_pst": "ะฒััะฐะฒะธัั ัะฐะฝะตะต ะฒััะตะทะฐะฝะฝัะน / ัะบะพะฟะธัะพะฒะฐะฝะฝัะน ัะฐะนะป$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: ctrl-V",
- "wt_selall": "ะฒัะดะตะปะธัั ะฒัะต ัะฐะนะปั$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: ctrl-A (ะบะพะณะดะฐ ะฒัะดะตะปะตะฝ ั
ะพัั ะฑั ะพะดะธะฝ ัะฐะนะป)",
- "wt_selinv": "ะธะฝะฒะตััะธัะพะฒะฐัั ะฒัะดะตะปะตะฝะธะต",
- "wt_zip1": "ัะบะฐัะฐัั ััั ะฟะฐะฟะบั ะบะฐะบ ะฐัั
ะธะฒ",
- "wt_selzip": "ัะบะฐัะฐัั ะฒัะดะตะปะตะฝะฝัะต ัะฐะนะปั ะบะฐะบ ะฐัั
ะธะฒ",
- "wt_seldl": "ัะบะฐัะฐัั ะฒัะดะตะปะตะฝะฝัะต ัะฐะนะปั ะฟะพ-ะพัะดะตะปัะฝะพััะธ$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: Y",
- "wt_npirc": "ะบะพะฟะธัะพะฒะฐัั ะธะฝัะพัะผะฐัะธั ะพ ััะตะบะต ะฒ ัะพัะผะฐัะต irc",
- "wt_nptxt": "ะบะพะฟะธัะพะฒะฐัั ะธะฝัะพัะผะฐัะธั ะพ ััะตะบะต ะพะฑััะฝัะผ ัะตะบััะพะผ",
- "wt_m3ua": "ะดะพะฑะฐะฒะธัั ะฒ ะฟะปะตะนะปะธัั m3u (ะฝะฐะถะผะธัะต ๐ปะบะพะฟ. ะฒ ะบะพะฝัะต)",
- "wt_m3uc": "ะบะพะฟะธัะพะฒะฐัั ะฟะปะตะนะปะธัั m3u ะฒ ะฑััะตั ะพะฑะผะตะฝะฐ",
- "wt_grid": "ะฟะตัะตะบะปััะธัั ะผะตะถะดั ัะตัะบะพะน / ัะฟะธัะบะพะผ$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: G",
- "wt_prev": "ะฟัะตะดัะดััะธะน ััะตะบ$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: J",
- "wt_play": "ะธะณัะฐัั / ะฟะฐัะทะฐ$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: P",
- "wt_next": "ัะปะตะดัััะธะน ััะตะบ$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: L",
-
- "ul_par": "ะฟะฐัะฐะปะปะตะปัะฝัะต ะทะฐะณััะทะบะธ:",
- "ut_rand": "ัะปััะฐะนะฝัะต ะธะผะตะฝะฐ ัะฐะนะปะพะฒ",
- "ut_u2ts": "ะบะพะฟะธัะพะฒะฐัั ะฒัะตะผั ะฟะพัะปะตะดะฝะตะณะพ ะธะทะผะตะฝะตะฝะธั$Nะธะท ะฒะฐัะตะน ัะฐะนะปะพะฒะพะน ัะธััะตะผั ะฝะฐ ัะตัะฒะตั\">๐
",
- "ut_ow": "ะฟะตัะตะทะฐะฟะธััะฒะฐัั ัััะตััะฒัััะธะต ัะฐะนะปั ะฝะฐ ัะตัะฒะตัะต?$N๐ก๏ธ: ะฝะตั (ะดะปั ะฟะพะฒัะพััััะธั
ัั ัะฐะนะปะพะฒ ะฑัะดัั ัะพะทะดะฐะฒะฐัััั ะฝะพะฒัะต ะธะผะตะฝะฐ)$N๐: ะฟะตัะตะทะฐะฟะธัะฐัั ัะฐะนะปั ั ะดะฐัะพะน ะธะทะผะตะฝะตะฝะธั ััะฐัะตะต, ัะตะผ ั ะทะฐะณััะถะฐะตะผัั
$Nโป๏ธ: ะฒัะตะณะดะฐ ะฟะตัะตะทะฐะฟะธััะฒะฐัั (ะตัะปะธ ัะฐะนะปั ัะฐะทะปะธัะฐัััั ะฟะพ ัะพะดะตัะถะฐะฝะธั)",
- "ut_mt": "ะฟัะพะดะพะปะถะฐัั ั
ะตัะธัะพะฒะฐัั ะดััะณะธะต ัะฐะนะปั ะฒะพ ะฒัะตะผั ะทะฐะณััะทะบะธ$N$Nะตััั ัะผััะป ะพัะบะปััะธัั ะฟัะธ ะผะตะดะปะตะฝะฝะพะผ ะดะธัะบะต ะธะปะธ ะฟัะพัะตััะพัะต",
- "ut_ask": 'ััะตะฑะพะฒะฐัั ะฟะพะดัะฒะตัะถะดะตะฝะธั ะฟะตัะตะด ะฝะฐัะฐะปะพะผ ะทะฐะณััะทะบะธ">๐ญ',
- "ut_pot": "ัะปัััะธัั ัะบะพัะพััั ะทะฐะณััะทะบะธ ะฝะฐ ัะปะฐะฑัั
ััััะพะนััะฒะฐ$Nั ะฟะพะผะพััั ัะฟัะพัะตะฝะธั ะธะฝัะตััะตะนัะฐ",
- "ut_srch": "ะฝะต ะทะฐะณััะถะฐัั, ะฐ ะฟัะพะฒะตัััั, ัััะตััะฒััั ะปะธ ะดะฐะฝะฝัะต ัะฐะนะปั $N ะฝะฐ ัะตัะฒะตัะต (ะฟัะพะฒะตัะบะฐ ะฒัะตั
ะดะพัััะฟะฝัั
ะฒะฐะผ ะฟะฐะฟะพะบ)",
- "ut_par": "ะฟัะธ 0 ะทะฐะณััะทะบะฐ ะฒััะฐะฝะตั ะฝะฐ ะฟะฐัะทั$N$Nัะปะตะดัะตั ะฟะพะฒััะธัั, ะตัะปะธ ะฒะฐัะต ะฟะพะดะบะปััะตะฝะธะต ะผะตะดะปะตะฝะฝะพะต$N$Nะพััะฐะฒััะต 1, ะตัะปะธ ะธัะฟะพะปัะทัะตััั ะปะพะบะฐะปัะฝะฐั ัะตัั ะธะปะธ ะดะธัะบ ัะตัะฒะตัะฐ ะผะตะดะปะตะฝะฝัะน",
- "ul_btn": "ะพัะฟัััะธัะต ัะฐะนะปั / ะฟะฐะฟะบะธ
ะทะดะตัั (ะธะปะธ ะฝะฐะถะผะธัะต)",
- "ul_btnu": "ะ ะ ะ ะ ะฃ ะ ะ ะข ะฌ",
- "ul_btns": "ะ ะก ะ ะ ะข ะฌ",
-
- "ul_hash": "ั
ะตั",
- "ul_send": "ะพัะฟัะฐะฒะบะฐ",
- "ul_done": "ะณะพัะพะฒะพ",
- "ul_idle1": "ะฝะตั ะทะฐะณััะทะพะบ ะฒ ะพัะตัะตะดะธ",
- "ut_etah": "ััะตะดะฝัั ัะบะพัะพััั <em>ั
ะตัะธัะพะฒะฐะฝะธั</em> ะธ ะฟัะธะผะตัะฝะพะต ะฒัะตะผั ะดะพ ะทะฐะฒะตััะตะฝะธั",
- "ut_etau": "ััะตะดะฝัั ัะบะพัะพััั <em>ะทะฐะณััะทะบะธ</em> ะธ ะฟัะธะผะตัะฝะพะต ะฒัะตะผั ะดะพ ะทะฐะฒะตััะตะฝะธั",
- "ut_etat": "ััะตะดะฝัั <em>ะพะฑัะฐั</em> ัะบะพัะพััั ะธ ะฟัะธะผะตัะฝะพะต ะฒัะตะผั ะดะพ ะทะฐะฒะตััะตะฝะธั",
-
- "uct_ok": "ััะฟะตัะฝะพ ะทะฐะฒะตััะตะฝั",
- "uct_ng": "ะพัะธะฑะบะธ / ะพัะบะฐะทั / ะฝะต ะฝะฐะนะดะตะฝั",
- "uct_done": "ะณะพัะพะฒะพ (ok ะธ ng ะฒะผะตััะต)",
- "uct_bz": "ั
ะตัะธัััััั ะธะปะธ ะทะฐะณััะถะฐัััั",
- "uct_q": "ะฒ ะพัะตัะตะดะธ",
-
- "utl_name": "ะธะผั ัะฐะนะปะฐ",
- "utl_ulist": "ัะฟะธัะพะบ",
- "utl_ucopy": "ะบะพะฟะธัะพะฒะฐัั",
- "utl_links": "ัััะปะบะธ",
- "utl_stat": "ััะฐััั",
- "utl_prog": "ะฟัะพะณัะตัั",
-
- // keep short:
- "utl_404": "404",
- "utl_err": "ะะจะะะะ",
- "utl_oserr": "ะพัะธะฑะบะฐ ะะก",
- "utl_found": "ะฝะฐะนะดะตะฝะพ",
- "utl_defer": "ะพัะปะพะถะธัั",
- "utl_yolo": "ัััะฑะพ",
- "utl_done": "ะณะพัะพะฒะพ",
-
- "ul_flagblk": "ัะฐะนะปั ะฑัะปะธ ะดะพะฑะฐะฒะปะตะฝั ะฒ ะพัะตัะตะดั,
ะพะดะฝะฐะบะพ ะฒ ะดััะณะพะน ะฒะบะปะฐะดะบะต ัะถะต ะตััั ะฐะบัะธะฒะฝะฐั ะทะฐะณััะทะบะฐ ัะตัะตะท up2k,
ะฟะพััะพะผั ะพะถะธะดะฐะตะผ ะตั ะทะฐะฒะตััะตะฝะธั",
- "ul_btnlk": "ะฝะฐัััะพะนะบะธ ัะตัะฒะตัะฐ ะทะฐะฟัะตัะฐัั ะธะทะผะตะฝะตะฝะธะต ัะพััะพัะฝะธั ััะพะน ะพะฟัะธะธ",
-
- "udt_up": "ะะฐะณััะทะธัั",
- "udt_srch": "ะะพะธัะบ",
- "udt_drop": "ะพัะฟัััะธัะต ะทะดะตัั",
-
- "u_nav_m": 'ะปะฐะดั, ััะพ ัะฐะผ ั ะฒะฐั?
Enter = ะคะฐะนะปั (ะพะดะธะฝ ะธะปะธ ะฑะพะปััะต)\nESC = ะะดะฝะฐ ะฟะฐะฟะบะฐ (ั ััััะพะผ ะฟะพะดะฟะฐะฟะพะบ)',
- "u_nav_b": 'ะคะฐะนะปัะะดะฝะฐ ะฟะฐะฟะบะฐ',
-
- "cl_opts": "ะฟะตัะตะบะปััะฐัะตะปะธ",
- "cl_themes": "ัะตะผะฐ",
- "cl_langs": "ัะทัะบ",
- "cl_ziptype": "ะฐัั
ะธะฒะฐัะธั ะฟะฐะฟะพะบ",
- "cl_uopts": "ะพะฟัะธะธ up2k",
- "cl_favico": "ะธะบะพะฝะบะฐ",
- "cl_bigdir": "ะฑะพะป. ะฟะฐะฟะบะธ",
- "cl_hsort": "#ัะพัั.",
- "cl_keytype": "ัั
ะตะผะฐ ะณะพัััะธั
ะบะปะฐะฒะธั",
- "cl_hiddenc": "ัะบััััะต ััะพะปะฑัั",
- "cl_hidec": "ัะบัััั",
- "cl_reset": "ัะฑัะพัะธัั",
- "cl_hpick": "ะฝะฐะถะผะธัะต ะฝะฐ ะทะฐะณะพะปะพะฒะบะธ ััะพะปะฑัะพะฒ, ััะพะฑั ัะบัััั ะธั
ะฒ ัะฐะฑะปะธัะต ะฝะธะถะต",
- "cl_hcancel": "ัะบัััะธะต ััะพะปะฑัะฐ ะพัะผะตะฝะตะฝะพ",
-
- "ct_grid": '็ฐ ัะตัะบะฐ',
- "ct_ttips": 'โ โก โ">โน๏ธ ะฟะพะดัะบะฐะทะบะธ',
- "ct_thumb": 'ะฟะตัะตะบะปััะตะฝะธะต ะผะตะถะดั ะธะบะพะฝะบะฐะผะธ ะธ ะผะธะฝะธะฐัััะฐะผะธ ะฒ ัะตะถะธะผะต ัะตัะบะธ$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: T">๐ผ๏ธ ะผะธะฝะธะฐั.',
- "ct_csel": 'ะดะตัะถะธัะต CTRL ะธะปะธ SHIFT ะดะปั ะฒัะดะตะปะตะฝะธั ัะฐะนะปะพะฒ ะฒ ัะตะถะธะผะต ัะตัะบะธ">ะฒัะฑะพั',
- "ct_ihop": 'ะฟะพะบะฐะทัะฒะฐัั ะฟะพัะปะตะดะฝะธะน ะพัะบััััะน ัะฐะนะป ะฟะพัะปะต ะทะฐะบัััะธั ะฟัะพัะผะพัััะธะบะฐ ะธะทะพะฑัะฐะถะตะฝะธะน">gโฎฏ',
- "ct_dots": 'ะฟะพะบะฐะทัะฒะฐัั ัะบััััะต ัะฐะนะปั (ะตัะปะธ ะตััั ะดะพัััะฟ)">ัะบััั.',
- "ct_qdel": 'ัะฟัะฐัะธะฒะฐัั ะฟะพะดัะฒะตัะถะดะตะฝะธะต ัะพะปัะบะพ ะพะดะธะฝ ัะฐะท ะฟะตัะตะด ัะดะฐะปะตะฝะธะตะผ ัะฐะนะปะพะฒ">ะฑัััั. ัะดะฐะป.',
- "ct_dir1st": 'ัะฐะทะผะตััะธัั ะฟะฐะฟะบะธ ะฝะฐะด ัะฐะนะปะฐะผะธ">๐ ัะฒะตัั
ั',
- "ct_nsort": 'ัะพััะธัะพะฒะบะฐ ะฟะพ ัะธัะปะฐะผ$N(ะฝะฐะฟัะธะผะตั, ัะฐะนะป ั >code<2>/code< ะฒ ะฝะฐัะฐะปะต ะฝะฐะทะฒะฐะฝะธั ะธะดัั ะฟะตัะตะด >code<11>/code<)">ะฝะฐั. ัะพัั.',
- "ct_utc": 'ะธัะฟะพะปัะทัะนัะต UTC ะดะปั ะฒัะตั
ะฒัะตะผะตะฝะฝัั
ะผะตัะพะบ">UTC', //m
- "ct_readme": 'ะฟะพะบะฐะทัะฒะฐัั ัะพะดะตัะถะธะผะพะต README.md ะฒ ะพะฟะธัะฐะฝะธะธ ะฟะฐะฟะบะธ">๐ ัะธะดะผะธ',
- "ct_idxh": 'ะฟะพะบะฐะทัะฒะฐัั ัััะฐะฝะธัั index.html ะฒ ัะตะบััะตะน ะฟะฐะฟะบะต ะฒะผะตััะพ ะธะฝัะตััะตะนัะฐ">htm',
- "ct_sbars": 'ะฟะพะบะฐะทัะฒะฐัั ะฟะพะปะพัั ะฟัะพะบัััะบะธ">โ',
-
- "cut_umod": "ะตัะปะธ ัะฐะนะป ัะถะต ัััะตััะฒัะตั ะฝะฐ ัะตัะฒะตัะต, ะพะฑะฝะพะฒะธัั ะฒัะตะผั ะฟะพัะปะตะดะฝะตะณะพ ะธะทะผะตะฝะตะฝะธั ะฝะฐ ัะตัะฒะตัะต ะฒ ัะพะพัะฒะตัััะฒะธะธ ั ะปะพะบะฐะปัะฝัะผ ัะฐะนะปะพะผ (ััะตะฑััััั ะฟัะฐะฒะฐ write+delete)\">ะฟะตัะตะฝะพั ๐
",
-
- "cut_turbo": "ะธัะฟะพะปัะทัะนัะต ััั ััะฝะบัะธั ะก ะะกะขะะ ะะะะะกะขะฌะฎ:$N$Nะฟัะธะณะพะดะธััั ะฒ ัะปััะฐะต, ะตัะปะธ ะฑัะปะฐ ะฟัะตัะฒะฐะฝะฐ ะทะฐะณััะทะบะฐ ะฑะพะปััะพะณะพ ะบะพะปะธัะตััะฒะฐ ัะฐะนะปะพะฒ, ะธ ะฒั ั
ะพัะธัะต ะฒะพะทะพะฑะฝะพะฒะธัั ะตั ะบะฐะบ ะผะพะถะฝะพ ะฑััััะตะต$N$Nะฟัะพะฒะตัะบะฐ ัะฐะนะปะพะฒ ะฟะพ ั
ะตัั ะทะฐะผะตะฝัะตััั ะฝะฐ ะฟัะพััะพะน ะฐะปะณะพัะธัะผ: "ะตัะปะธ ัะฐะทะผะตั ัะฐะนะปะฐ ะพัะปะธัะฐะตััั - ัะพะณะดะฐ ะทะฐะณััะทะธัั", ะฝะพ ัะพะดะตัะถะฐะฝะธะต ัะฐะนะปะพะฒ ะฝะต ััะฐะฒะฝะธะฒะฐะตััั$N$Nัะปะตะดัะตั ะพัะบะปััะธัั ััั ััะฝะบัะธั ะฟะพัะปะต ะพะบะพะฝัะฐะฝะธั ะทะฐะณััะทะบะธ, ะฐ ะทะฐัะตะผ "ะทะฐะณััะทะธัั" ัะต ะถะต ัะฐะนะปั ะทะฐะฝะพะฒะพ, ััะพะฑั ะฒะฐะปะธะดะธัะพะฒะฐัั ะธั
\">ัััะฑะพ",
-
- "cut_datechk": "ัะฐะฑะพัะฐะตั ัะพะปัะบะพ ะฟัะธ ะฒะบะปัััะฝะฝะพะน ะบะฝะพะฟะบะต "ัััะฑะพ"$N$Nัััั-ัััั ะฟะพะฒััะฐะตั ะฝะฐะดัะถะฝะพััั ัััะฑะพ-ะทะฐะณััะทะพะบ ั ะฟะพะผะพััั ัะฒะตัะบะธ ะดะฐั ะธะทะผะตะฝะตะฝะธะน ะผะตะถะดั ัะฐะนะปะฐะผะธ ะฝะฐ ัะตัะฒะตัะต ะธ ะฒะฐัะธะผะธ$N$Nะฒ ัะตะพัะธะธ ะดะพััะฐัะพัะฝะพ ะดะปั ะฟัะพะฒะตัะบะธ ะฑะพะปััะธะฝััะฒะฐ ะฝะตะทะฐะฒะตัััะฝะฝัั
/ ะฟะพะฒัะตะถะดัะฝะฝัั
ะทะฐะณััะทะพะบ, ะฝะพ ะฝะต ัะฒะปัะตััั ะฐะปััะตัะฝะฐัะธะฒะพะน ะฒะฐะปะธะดะฐัะธะธ ัะฐะนะปะพะฒ ะฟะพัะปะต ัััะฑะพ-ะทะฐะณััะทะบะธ\">ะฟัะพะฒะตั. ะดะฐั",
-
- "cut_u2sz": "ัะฐะทะผะตั (ะฒ ะะธะ) ะบะฐะถะดะพะน ะทะฐะณััะถะฐะตะผะพะน ัะฐััะธ; ะฑะพะปััะธะต ะทะฝะฐัะตะฝะธั ะฟะพะบะฐะทัะฒะฐัั ะปัััะธะต ัะตะทัะปััะฐัั ะดะปั ะดะฐะปัะฝะธั
ัะพะตะดะธะฝะตะฝะธะน. ะัะปะธ ะฟะพะดะบะปััะตะฝะธะต ะฝะตััะฐะฑะธะปัะฝะพะต, ะฟะพะฟัะพะฑัะนัะต ะทะฝะฐัะตะฝะธะต ะฟะพะฝะธะถะต",
-
- "cut_flag": "ัะฐะทัะตัะธัั ะพะดะฝะพะฒัะตะผะตะฝะฝัั ะทะฐะณััะทะบั ัะพะปัะบะพ ะธะท ะพะดะฝะพะน ะฒะบะปะฐะดะบะธ ะทะฐ ัะฐะท $N -- ะพะฑัะทะฐัะตะปัะฝะพ ะฒะบะปััะธัั ััั ะพะฟัะธั ะฒ ะพััะฐะปัะฝัั
ะฒะบะปะฐะดะบะฐั
$N -- ัะฐะฑะพัะฐะตั ัะพะปัะบะพ ะฒ ะฟัะตะดะตะปะฐั
ะพะดะฝะพะณะพ ะดะพะผะตะฝะฐ",
-
- "cut_az": "ะทะฐะณััะถะฐัั ัะฐะนะปั ะฒ ะฐะปัะฐะฒะธัะฝะพะผ ะฟะพััะดะบะต ะฒะผะตััะพ "ะพั ะผะตะฝััะตะณะพ ะบ ะฑะพะปััะตะผั"$N$Nััะพ ะฟะพะทะฒะพะปะธั ะฟัะพัะต ะพััะปะตะดะธัั ะฟัะพะฑะปะตะผั ะฒะพ ะฒัะตะผั ะทะฐะณััะทะบะธ, ะฝะพ ัะบะพัะพััั ัะปะตะณะบะฐ ะฝะธะถะต ะฝะฐ ะพัะตะฝั ะฑัััััั
ัะพะตะดะธะฝะตะฝะธัั
(ะฝะฐะฟัะธะผะตั, ะฒ ะปะพะบะฐะปัะฝะพะน ัะตัะธ)",
-
- "cut_nag": "ัะธััะตะผะฝะพะต ัะฒะตะดะพะผะปะตะฝะธะต ะฟะพ ะทะฐะฒะตััะตะฝะธะธ ะทะฐะณััะทะบะธ$N(ัะพะปัะบะพ ะฟัะธ ะฝะตะฐะบัะธะฒะฝะพะน ะฒะบะปะฐะดะบะต ะฑัะฐัะทะตัะฐ)",
- "cut_sfx": "ะทะฒัะบะพะฒะพะต ัะฒะตะดะพะผะปะตะฝะธะต ะฟะพ ะทะฐะฒะตััะตะฝะธะธ ะทะฐะณััะทะบะธ$N(ัะพะปัะบะพ ะฟัะธ ะฝะตะฐะบัะธะฒะฝะพะน ะฒะบะปะฐะดะบะต ะฑัะฐัะทะตัะฐ)",
-
- "cut_mt": "ะธัะฟะพะปัะทะพะฒะฐัั ะผะฝะพะณะพะฟะพัะพัะฝะพััั ะดะปั ััะบะพัะตะฝะธั ั
ะตัะธัะพะฒะฐะฝะธั$N$Nะธัะฟะพะปัะทัะตั Web Worker'ั ะธ ััะตะฑัะตั ะฑะพะปััะต ะฟะฐะผััะธ (ะดะพ 512 ะะธะ)$N$Nััะบะพััะตั https ะฝะฐ 30%, http - ะฒ 4,5 ัะฐะท\">ะผะฟ",
-
- "cut_wasm": "ะธัะฟะพะปัะทะพะฒะฐัั ะผะพะดัะปั WASM ะฒะผะตััะพ ะฒัััะพะตะฝะฝะพะน ะฒ ะฑัะฐัะทะตั ััะฝะบัะธะธ ั
ะตัะธัะพะฒะฐะฝะธั; ััะบะพััะตั ะฟัะพัะตัั ะฒ ะฑัะฐัะทะตัะฐั
ะฝะฐ ะพัะฝะพะฒะต Chromium, ะฝะพ ัะฒะตะปะธัะธะฒะฐะตั ะฝะฐะณััะทะบั ะฝะฐ ะฟัะพัะตััะพั. ะกัะฐััะต ะฒะตััะธะธ Chrome ัะพะดะตัะถะฐั ะฑะฐะณะธ, ะบะพัะพััะต ะทะฐะฟะพะปะฝััั ะฒัั ะพะฟะตัะฐัะธะฒะฝัั ะฟะฐะผััั ะธ ะบัะฐัะฐั ะฑัะฐัะทะตั, ะบะพะณะดะฐ ะฒะบะปััะตะฝะฐ ััะฐ ะพะฟัะธั\">wasm",
-
- "cft_text": "ัะตะบัั ะดะปั ะธะบะพะฝะบะธ (ะพัะธััะธัะต ะฟะพะปะต ะธ ะฟะตัะตะทะฐะณััะทะธัะต ัััะฐะฝะธัั ะดะปั ะฟัะธะผะตะฝะตะฝะธั)",
- "cft_fg": "ัะฒะตั ัะตะบััะฐ",
- "cft_bg": "ัะฒะตั ัะพะฝะฐ",
-
- "cdt_lim": "ะผะฐะบัะธะผะฐะปัะฝะพะต ะบะพะปะธัะตััะฒะพ ัะฐะนะปะพะฒ ะดะปั ะฟะพะบะฐะทะฐ ะฒ ะฟะฐะฟะบะต",
- "cdt_ask": "ะฒะฝะธะทั ัััะฐะฝะธัั ัะฟัะฐัะธะฒะฐัั ะพ ะดะตะนััะฒะธะธ ะฒะผะตััะพ ะฐะฒัะพะผะฐัะธัะตัะบะพะน ะทะฐะณััะทะบะธ ัะปะตะดัััะธั
ัะฐะนะปะพะฒ",
- "cdt_hsort": "ัะบะพะปัะบะพ ะฟัะฐะฒะธะป ัะพััะธัะพะฒะบะธ (<code>,sorthref</code>) ะฒะบะปััะฐัั ะฒ ะฐะดัะตั ัััะฐะฝะธัั. ะัะปะธ ะทะฝะฐัะตะฝะธะต ัะฐะฒะฝะพ 0, ะฟะพ ะฝะฐะถะฐัะธะธ ะฝะฐ ัััะปะบะธ ะฑัะดัั ะธะณะฝะพัะธัะพะฒะฐัััั ะฟัะฐะฒะธะปะฐ, ะฒะบะปัััะฝะฝัะต ะฒ ะฝะธั
",
-
- "tt_entree": "ะฟะพะบะฐะทะฐัั ะฟะฐะฝะตะปั ะฝะฐะฒะธะณะฐัะธะธ$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: B",
- "tt_detree": "ัะบัััั ะฟะฐะฝะตะปั ะฝะฐะฒะธะณะฐัะธะธ$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: B",
- "tt_visdir": "ะฟัะพะบัััะธัั ะดะพ ะฒัะดะตะปะตะฝะฝะพะน ะฟะฐะฟะบะธ",
- "tt_ftree": "ะฟะตัะตะบะปััะธัั ะผะตะถะดั ะธะตัะฐัั
ะธะตะน ะธ ัะฟะธัะบะพะผ ัะตะบััะพะฒัั
ัะฐะนะปะพะฒ$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: V",
- "tt_pdock": "ะทะฐะบัะตะฟะธัั ัะพะดะธัะตะปััะบะธะต ะฟะฐะฟะบะธ ัะฒะตัั
ั ะฟะฐะฝะตะปะธ",
- "tt_dynt": "ะฐะฒัะพะผะฐัะธัะตัะบะพะต ัะฐััะธัะตะฝะธะต ะฟะฐะฝะตะปะธ",
- "tt_wrap": "ะฟะตัะตะฝะพั ัะปะพะฒ",
- "tt_hover": "ัะฐัะบััะฒะฐัั ะพะฑัะตะทะฐะฝะฝัะต ัััะพะบะธ ะฟัะธ ะฝะฐะฒะตะดะตะฝะธะธ$N( ะปะพะผะฐะตั ัะบัะพะปะปะธะฝะณ, ะตัะปะธ $N ะบัััะพั ะฝะต ะฒ ะฟัััะพัะต ัะปะตะฒะฐ )",
-
- "ml_pmode": "ะฒ ะบะพะฝัะต ะฟะฐะฟะบะธ...",
- "ml_btns": "ะบะพะผะฐะฝะดั",
- "ml_tcode": "ััะฐะฝัะบะพะดะธัะพะฒะฐัั",
- "ml_tcode2": "ััะฐะฝัะบะพะด. ะฒ",
- "ml_tint": "ะทะฐัะตะผะฝ.",
- "ml_eq": "ัะบะฒะฐะปะฐะนะทะตั",
- "ml_drc": "ะบะพะผะฟัะตััะพั",
-
- "mt_loop": "ะฟะพะฒัะพัััั ะพะดะธะฝ ััะตะบ\">๐",
- "mt_one": "ะพััะฐะฝะพะฒะธัั ะฟะพัะปะต ััะพะณะพ ััะตะบะฐ\">1๏ธโฃ",
- "mt_shuf": "ะฟะตัะตะผะตัะฐัั ััะตะบะธ ะฒะพ ะฒัะตั
ะฟะฐะฟะบะฐั
\">๐",
- "mt_aplay": "ะฐะฒัะพะผะฐัะธัะตัะบะธ ะธะณัะฐัั ััะตะบะธ ะฟะพ ะฝะฐะถะฐัะธะธ ะฝะฐ ัััะปะบะธ ั ะธั
ID$N$Nะฟัะธ ะพัะบะปััะตะฝะธะธ ะฐะดัะตั ัะฐะนัะฐ ัะฐะบะถะต ะฟะตัะตััะฐะฝะตั ะพะฑะฝะพะฒะปััััั ะฒ ัะพะพัะฒะตัััะฒะธะธ ั ัะตะบััะธะผ ััะตะบะพะผ\">aโถ",
- "mt_preload": "ะฟะพะดะณััะถะฐัั ัะปะตะดัััะธะน ััะตะบ ะฟะตัะตะด ะบะพะฝัะพะผ ัะตะบััะตะณะพ ะดะปั ะฑะตััะพะฒะฝะพะณะพ ะฟะตัะตะบะปััะตะฝะธั\">ะฟัะตะดะทะฐะณั.",
- "mt_prescan": "ะฟะตัะตั
ะพะดะธัั ะฒ ัะปะตะดััััั ะฟะฐะฟะบั ะฟะตัะตะด ะพะบะพะฝัะฐะฝะธะตะผ ะฟะพัะปะตะดะฝะตะณะพ ััะตะบะฐ$Nะฝะต ะดะฐัั ะฑัะฐัะทะตัั ะฟัะตัะฒะฐัั ัะปะตะดัััะธะน ะฟะปะตะนะปะธัั\">ะฝะฐะฒ.",
- "mt_fullpre": "ะฟะพะดะณััะถะฐัั ัะปะตะดัััะธะน ััะตะบ ัะตะปะธะบะพะผ;$Nโ
ะฟะพะปะตะทะฝะพ ะฟัะธ ะฝะตััะฐะฑะธะปัะฝะพะผ ะฟะพะดะบะปััะตะฝะธะธ,$Nโ ะฟัะธ ะผะตะดะปะตะฝะฝะพะน ัะบะพัะพััะธ ะปัััะต ะฒัะบะปััะธัั\">ัะตะป.",
- "mt_fau": "ะดะปั ัะตะปะตัะพะฝะพะฒ: ะฝะฐัะธะฝะฐัั ัะปะตะดัััะธะน ััะตะบ ััะฐะทั, ะดะฐะถะต ะตัะปะธ ะพะฝ ะฝะต ััะฟะตะป ะฟะพะดะณััะทะธัััั ัะตะปะธะบะพะผ (ะผะพะถะตั ัะปะพะผะฐัั ะพัะพะฑัะฐะถะตะฝะธะต ัะตะณะพะฒ)\">โ๏ธ",
- "mt_waves": "ะฒะธะทัะฐะปะธะทะฐัะธั:$Nะฟะพะบะฐะทัะฒะฐัั ะฒะพะปะฝั ะณัะพะผะบะพััะธ ะฝะฐ ะฟะพะปะพัะต ะฒะพัะฟัะพะธะทะฒะตะดะตะฝะธั\">~",
- "mt_npclip": "ะฟะพะบะฐะทะฐัั ะบะฝะพะฟะบะธ ะบะพะฟะธัะพะฒะฐะฝะธั ะดะปั ัะตะบััะตะณะพ ััะตะบะฐ\">/np",
- "mt_m3u_c": "ะฟะพะบะฐะทะฐัั ะบะฝะพะฟะบะธ ะบะพะฟะธัะพะฒะฐะฝะธั ะดะปั ะฒัะดะตะปะตะฝะฝัั
ััะตะบะพะฒ$Nะฒ ัะพัะผะฐัะต ะฟะปะตะนะปะธััะพะฒ m3u8\">๐ป",
- "mt_octl": "ะธะฝัะตะณัะฐัะธั ั ะะก (ะฟะพะดะดะตัะถะบะฐ ะผะตะดะธะฐ-ะบะปะฐะฒะธั ะธ ะผัะทัะบะฐะปัะฝัั
ะฒะธะดะถะตัะพะฒ)\">ะธะฝัะตะณั.",
- "mt_oseek": "ะฟะพะทะฒะพะปะธัั ะฟะตัะตะผะฐััะฒะฐัั ััะตะบะธ ัะตัะตะท ัะธััะตะผะฝัะต ะฒะธะดะถะตัั$N$Nะฒะฝะธะผะฐะฝะธะต: ะฝะฐ ะฝะตะบะพัะพััั
ััััะพะนััะฒะฐั
(iPhone)$Nััะพ ะทะฐะผะตะฝะธั ะบะฝะพะฟะบั ัะปะตะดัััะตะณะพ ััะตะบะฐ\">ะฟะตัะตะผะพัะบะฐ",
- "mt_oscv": "ะฟะพะบะฐะทัะฒะฐัั ะบะฐััะธะฝะบะธ ะฐะปัะฑะพะผะพะฒ ะฒ ะฒะธะดะถะตัะฐั
\">ะฐัั",
- "mt_follow": "ะดะตัะถะฐัั ัะพะบัั ะฝะฐ ะธะณัะฐััะตะผ ััะตะบะต\">๐ฏ",
- "mt_compact": "ะบะพะผะฟะฐะบัะฝัะน ะฟะปะตะตั\">โ",
- "mt_uncache": "ะพัะธััะธัั ะบะตั (ะตัะปะธ ะฑัะฐัะทะตั ะบะตัะธัะพะฒะฐะป ะฟะพะฒัะตะถะดัะฝะฝัะน$Nััะตะบ ะธ ะพัะบะฐะทัะฒะฐะตััั ะตะณะพ ะทะฐะฟััะบะฐัั)\">ัะด. ะบะตั",
- "mt_mloop": "ะฟะพะฒัะพัััั ััะตะบะธ ะฒ ะฟะฐะฟะบะต\">๐ ัะธะบะป",
- "mt_mnext": "ะทะฐะณััะทะธัั ัะปะตะดััััั ะฟะฐะฟะบั ะธ ะฟัะพะดะพะปะถะธัั ะฒ ะฝะตะน\">๐ ัะปะตะด.",
- "mt_mstop": "ะฟัะธะพััะฐะฝะพะฒะธัั ะฒะพัะฟัะพะธะทะฒะตะดะตะฝะธะต\">โธ ััะพะฟ",
- "mt_cflac": "ะบะพะฝะฒะตััะธัะพะฒะฐัั flac / wav ะฒ {0}\">flac",
- "mt_caac": "ะบะพะฝะฒะตััะธัะพะฒะฐัั aac / m4a ะฒ {0}\">aac",
- "mt_coth": "ะบะพะฝะฒะตััะธัะพะฒะฐัั ะฒัั ะพััะฐะปัะฝะพะต (ะบัะพะผะต mp3) ะฒ {0}\">ะดั.",
- "mt_c2opus": "ะปัััะธะน ะฒะฐัะธะฐะฝั ะดะปั ะบะพะผะฟัััะตัะพะฒ ะธ ััััะพะนััะฒ ะฝะฐ Android\">opus",
- "mt_c2owa": "opus-weba, ะดะปั iOS 17.5 ะธ ะฒััะต\">owa",
- "mt_c2caf": "opus-caf, ะดะปั iOS 11-17\">caf",
- "mt_c2mp3": "ะดะปั ะพัะตะฝั ััะฐััั
ััััะพะนััะฒ\">mp3",
- "mt_c2flac": "ะปัััะตะต ะบะฐัะตััะฒะพ ะทะฒัะบะฐ, ะฝะพ ะฑะพะปััะธะต ัะฐะนะปั\">flac", //m
- "mt_c2wav": "ะฝะต ัะถะฐัะพะต ะฒะพัะฟัะพะธะทะฒะตะดะตะฝะธะต (ะตัั ะฑะพะปััะต)\">wav", //m
- "mt_c2ok": "ั
ะพัะพัะธะน ะฒัะฑะพั",
- "mt_c2nd": "ััะพ ะฝะต ัะตะบะพะผะตะฝะดะพะฒะฐะฝะฝัะน ะฒะฐัะธะฐะฝั ัะพัะผะฐัะฐ ะดะปั ะฒะฐัะตะณะพ ััััะพะนััะฒะฐ, ะฝะพ ัะพะนะดัั",
- "mt_c2ng": "ะฝะต ะฟะพั
ะพะถะต, ััะพ ะฒะฐัะต ััััะพะนััะฒะพ ะฟะพะดะดะตัะถะธะฒะฐะตั ััะพั ัะพัะผะฐั, ะฝะพ ะดะฐะฒะฐะนัะต ะฟะพะฟัะพะฑัะตะผ ะธ ัะทะฝะฐะตะผ ะฝะฐะฒะตัะฝัะบะฐ",
- "mt_xowa": "ะฒ iOS ะตััั ะฑะฐะณะธ, ะฟัะตะฟััััะฒัััะธะต ัะพะฝะพะฒะพะผั ะฒะพัะฟัะพะธะทะฒะตะดะตะฝะธั ััะพะณะพ ัะพัะผะฐัะฐ. ะะพะถะฐะปัะนััะฐ, ะธัะฟะพะปัะทัะนัะต caf ะธะปะธ mp3",
- "mt_tint": "ะฝะตะฟัะพะทัะฐัะฝะพััั ัะพะฝะฐ (0-100) ะฝะฐ ะฟะพะปะพัะต ะฒะพัะฟัะพะธะทะฒะตะดะตะฝะธั$N$Nะดะตะปะฐะตั ะฑััะตัะธะทะฐัะธั ะผะตะฝะตะต ะพัะฒะปะตะบะฐััะตะน",
- "mt_eq": "ะฒะบะปััะธัั ัะบะฒะฐะปะฐะนะทะตั$N$Nboost <code>0</code> = ััะฐะฝะดะฐััะฝะฐั ะณัะพะผะบะพััั$N$Nwidth <code>1 </code> = ะพะฑััะฝะพะต ััะตัะตะพ$Nwidth <code>0.5</code> = ะผะธะบัะธัะพะฒะฐะฝะธะต ะปะตะฒะพะณะพ ะธ ะฟัะฐะฒะพะณะพ ะบะฐะฝะฐะปะพะฒ ะฝะฐ 50%$Nwidth <code>0 </code> = ะผะพะฝะพ$N$Nboost <code>-0.8</code> ะธ width <code>10</code> = ัะดะฐะปะตะฝะธะต ะณะพะปะพัะฐ :^)$N$Nะฒะบะปัััะฝะฝัะน ัะบะฒะฐะปะฐะนะทะตั ะฟะพะปะฝะพัััั ัะฑะธัะฐะตั ะทะฐะดะตัะถะบั ะผะตะถะดั ััะตะบะฐะผะธ, ะฟะพััะพะผั ัะปะตะดัะตั ะตะณะพ ะฒะบะปััะธัั ัะพ ะฒัะตะผะธ ะทะฝะฐัะตะฝะธัะผะธ ะฝะฐ 0 (ะบัะพะผะต width = 1), ะตัะปะธ ะฒะฐะผ ะฝัะถะฝะพ ะฑะตััะพะฒะฝะพะต ะฒะพัะฟัะพะธะทะฒะตะดะตะฝะธะต",
- "mt_drc": "ะฒะบะปััะธัั ะบะพะผะฟัะตััะพั; ัะฐะบะถะต ะฒะบะปััะธั ัะบะฒะฐะปะฐะนะทะตั ะดะปั ะฑะฐะปะฐะฝัะฐ ะฒัะตะปะตะฝะฝะพะน, ัะฐะบ ััะพ ะฒัััะฐะฒััะต ะฒัั ะฝะฐ 0 ะบัะพะผะต width, ะตัะปะธ ะพะฝ ะฒะฐะผ ะฝะต ะฝัะถะตะฝ$N$Nะฟะพะฝะธะถะฐะตั ะณัะพะผะบะพััั ะฟัะธ ะฒะพะปะฝะต ะฒััะต ะทะฝะฐัะตะฝะธั dB ะฒ tresh; ะบะฐะถะดัะน dB ะฒ ratio ัะฐะฒะตะฝ ะพะดะฝะพะผั dB ะฝะฐ ะฒัั
ะพะดะต, ัะฐะบ ััะพ ััะฐะฝะดะฐััะฝัะต ะทะฝะฐัะตะฝะธั tresh = -24 ะธ ratio = 12 ัะดะตะปะฐัั ัะฐะบ, ััะพ ะทะฒัะบ ะฝะธะบะพะณะดะฐ ะฝะต ะฑัะดะตั ะณัะพะผัะต -22 dB. ะัะธ ัะฐะบะพะผ ัะฐัะบะปะฐะดะต ะผะพะถะฝะพ ะฟะพััะฐะฒะธัั boost ะฒ ัะบะฒะฐะปะฐะนะทะตัะต ะฝะฐ 0.8 ะธะปะธ ะดะฐะถะต 1.8 ะฟัะธ ะทะฝะฐัะตะฝะธะธ atk = 0 ะธ ะพะณัะพะผะฝะพะผ rls ะฒัะพะดะต 90 (ัะฐะฑะพัะฐะตั ัะพะปัะบะพ ะฒ Firefox, rls ะฝะต ะผะพะถะตั ะฑััั ะฒััะต 1 ะฒ ะดััะณะธั
ะฑัะฐัะทะตัะฐั
)$N$N(ะทะฐะณะปัะฝะธัะต ะฒ ะฒะธะบะธะฟะตะดะธั, ัะฐะผ ะฒัั ะพะฑัััะฝะตะฝะพ ะฟะพะดัะพะฑะฝะตะต)",
-
- "mb_play": "ะธะณัะฐัั",
- "mm_hashplay": "ะฒะพัะฟัะพะธะทะฒะตััะธ ััะพั ะผัะทัะบะฐะปัะฝัะน ัะฐะนะป?",
- "mm_m3u": "ะฝะฐะถะผะธัะต Enter/OK, ััะพะฑั ะธะณัะฐัั\nะฝะฐะถะผะธัะต ESC/ะัะผะตะฝะฐ, ััะพะฑั ัะตะดะฐะบัะธัะพะฒะฐัั",
- "mp_breq": "ััะตะฑัะตััั Firefox 82+, Chrome 73+ ะธะปะธ iOS 15+",
- "mm_bload": "ะทะฐะณััะถะฐั...",
- "mm_bconv": "ะบะพะฝะฒะตััะธััั ะฒ {0}, ะฟะพะดะพะถะดะธัะต...",
- "mm_opusen": "ะฒะฐั ะฑัะฐัะทะตั ะฝะต ะผะพะถะตั ะฒะพัะฟัะพะธะทะฒะพะดะธัั ัะฐะนะปั aac / m4a;\nะฒะบะปััะตะฝะพ ััะฐะฝัะบะพะดะธัะพะฒะฐะฝะธะต ะฒ opus",
- "mm_playerr": "ะพัะธะฑะบะฐ ะฒะพัะฟัะพะธะทะฒะตะดะตะฝะธั: ",
- "mm_eabrt": "ะะพะฟััะบะฐ ะฒะพัะฟัะพะธะทะฒะตะดะตะฝะธั ะฑัะปะฐ ะพัะผะตะฝะตะฝะฐ",
- "mm_enet": "ะะฐัะต ะฟะพะดะบะปััะตะฝะธะต ะฝะตััะฐะฑะธะปัะฝะพ",
- "mm_edec": "ะญัะพั ัะฐะนะป, ะฒะพะทะผะพะถะฝะพ, ะฟะพะฒัะตะถะดัะฝ??",
- "mm_esupp": "ะะฐั ะฑัะฐัะทะตั ะฝะต ัะฐัะฟะพะทะฝะฐัั ััะพั ะฐัะดะธะพ-ัะพัะผะฐั",
- "mm_eunk": "ะะตะพะฟะพะทะฝะฐะฝะฝะฐั ะพัะธะฑะบะฐ",
- "mm_e404": "ะะต ัะดะฐะปะพัั ะฒะพัะฟัะพะธะทะฒะตััะธ ะฐัะดะธะพ; ะพัะธะฑะบะฐ 404: ะคะฐะนะป ะฝะต ะฝะฐะนะดะตะฝ.",
- "mm_e403": "ะะต ัะดะฐะปะพัั ะฒะพัะฟัะพะธะทะฒะตััะธ ะฐัะดะธะพ; ะพัะธะฑะบะฐ 403: ะะพัััะฟ ะทะฐะฟัะตััะฝ.\n\nะะพะฟัะพะฑัะนัะต ะฟะตัะตะทะฐะณััะทะธัั ัััะฐะฝะธัั, ะฒะพะทะผะพะถะฝะพ, ะฒะฐัะฐ ัะตััะธั ะธััะตะบะปะฐ",
- "mm_e500": "ะะต ัะดะฐะปะพัั ะฒะพัะฟัะพะธะทะฒะตััะธ ะฐัะดะธะพ; ะพัะธะฑะบะฐ 500: ะัะพะฒะตัััะต ะปะพะณะธ ัะตัะฒะตัะฐ.",
- "mm_e5xx": "ะะต ัะดะฐะปะพัั ะฒะพัะฟัะพะธะทะฒะตััะธ ะฐัะดะธะพ; ะพัะธะฑะบะฐ ัะตัะฒะตัะฐ ",
- "mm_nof": "ะฑะพะปััะต ะฐัะดะธะพ-ัะฐะนะปะพะฒ ะฝะต ะฝะฐะนะดะตะฝะพ",
- "mm_prescan": "ะะพะธัะบ ะผัะทัะบะธ ะดะปั ะฒะพัะฟัะพะธะทะฒะตะดะตะฝะธั ะดะฐะปััะต...",
- "mm_scank": "ะะฐะนะดะตะฝ ัะปะตะดัััะธะน ััะตะบ:",
- "mm_uncache": "ะบะตั ะพัะธัะตะฝ; ะฒัะต ััะตะบะธ ะฑัะดัั ะทะฐะณััะถะตะฝั ะทะฐะฝะพะฒะพ ะฟัะธ ะฒะพัะฟัะพะธะทะฒะตะดะตะฝะธะธ",
- "mm_hnf": "ััะพ ััะตะบ ะฑะพะปััะต ะฝะต ัััะตััะฒัะตั",
-
- "im_hnf": "ััะพ ะธะทะพะฑัะฐะถะตะฝะธะต ะฑะพะปััะต ะฝะต ัััะตััะฒัะตั",
-
- "f_empty": 'ััะฐ ะฟะฐะฟะบะฐ ะฟัััะฐ',
- "f_chide": 'ััะพ ัะบัะพะตั ััะพะปะฑะตั ยซ{0}ยป\n\nะฒั ะผะพะถะตัะต ะฟะพะบะฐะทะฐัั ัะบััััะต ััะพะปะฑัั ะฒ ะฝะฐัััะพะนะบะฐั
',
- "f_bigtxt": "ะพะฑััะผ ะดะฐะฝะฝะพะณะพ ัะฐะนะปะฐ - {0} ะะธะ. ัะพัะฝะพ ะพัะบัััั ะบะฐะบ ัะตะบัั?",
- "f_bigtxt2": "ะฟัะพัะผะพััะตัั ัะพะปัะบะพ ะบะพะฝะตั ัะฐะนะปะฐ? ััะพ ัะฐะบะถะต ะฒะบะปััะธั ะพะฑะฝะพะฒะปะตะฝะธะต ะฒ ัะตะฐะปัะฝะพะผ ะฒัะตะผะตะฝะธ, ะฟะพะบะฐะทัะฒะฐั ะฝะพะฒัะต ัััะพะบะธ ััะฐะทั ะฟะพัะปะต ะธั
ะดะพะฑะฐะฒะปะตะฝะธั",
- "fbd_more": '',
- "fbd_all": '',
- "f_anota": "ัะพะปัะบะพ {0} ะธะท {1} ัะฐะนะปะพะฒ ะฑัะปะพ ะฒัะดะตะปะตะฝะพ;\nััะพะฑั ะฒัะดะตะปะธัั ะฒัั ะฟะฐะฟะบั, ะพัะผะพัะฐะนัะต ะดะพ ะฝะธะทะฐ",
-
- "f_dls": 'ัััะปะบะธ ะฝะฐ ัะฐะนะปั ะฒ ะดะฐะฝะฝะพะน ะฟะฐะฟะบะต ะฑัะปะธ\nะทะฐะผะตะฝะตะฝั ัััะปะบะฐะผะธ ะฝะฐ ัะบะฐัะธะฒะฐะฝะธะต',
-
- "f_partial": "ะงัะพะฑั ะฑะตะทะพะฟะฐัะฝะพ ัะบะฐัะฐัั ัะฐะนะป, ะบะพัะพััะน ะฒ ัะตะบััะธะน ะผะพะผะตะฝั ะทะฐะณััะถะฐะตััั, ะฝะฐะถะผะธัะต ะฝะฐ ัะฐะนะป ั ัะฐะบะธะผ ะถะต ะฝะฐะทะฒะฐะฝะธะตะผ, ะฝะพ ะฑะตะท ัะฐััะธัะตะฝะธั .PARTIAL. ะะพะถะฐะปัะนััะฐ, ะฝะฐะถะผะธัะต ะัะผะตะฝะฐ ะธะปะธ ESC, ััะพะฑั ัะดะตะปะฐัั ััะพ.\n\nะัะธ ะฝะฐะถะฐัะธะธ OK / Enter, ะฒั ัะบะฐัะฐะตัะต ััะพั ะฒัะตะผะตะฝะฝัะน ัะฐะนะป, ะบะพัะพััะน ั ะพะณัะพะผะฝะพะน ะฒะตัะพััะฝะพัััั ัะพะดะตัะถะธั ะปะธัั ะฝะตะฟะพะปะฝัะต ะดะฐะฝะฝัะต.",
-
- "ft_paste": "ะฒััะฐะฒะธัั {0} ัะฐะนะปะพะฒ$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: ctrl-V",
- "fr_eperm": 'ะฝะต ัะดะฐะปะพัั ะฟะตัะตะธะผะตะฝะพะฒะฐัั:\nั ะฒะฐั ะฝะตั ัะฐะทัะตัะตะฝะธั โmoveโ ะฒ ััะพะน ะฟะฐะฟะบะต',
- "fd_eperm": 'ะฝะต ัะดะฐะปะพัั ัะดะฐะปะธัั:\nั ะฒะฐั ะฝะตั ัะฐะทัะตัะตะฝะธั โdeleteโ ะฒ ััะพะน ะฟะฐะฟะบะต',
- "fc_eperm": 'ะฝะต ัะดะฐะปะพัั ะฒััะตะทะฐัั:\nั ะฒะฐั ะฝะตั ัะฐะทัะตัะตะฝะธั โmoveโ ะฒ ััะพะน ะฟะฐะฟะบะต',
- "fp_eperm": 'ะฝะต ัะดะฐะปะพัั ะฒััะฐะฒะธัั:\nั ะฒะฐั ะฝะตั ัะฐะทัะตัะตะฝะธั โwriteโ ะฒ ััะพะน ะฟะฐะฟะบะต',
- "fr_emore": "ะฒัะดะตะปะธัะต ั
ะพัั ะฑั ะพะดะธะฝ ัะฐะนะป, ััะพะฑั ะฟะตัะตะธะผะตะฝะพะฒะฐัั",
- "fd_emore": "ะฒัะดะตะปะธัะต ั
ะพัั ะฑั ะพะดะธะฝ ัะฐะนะป, ััะพะฑั ัะดะฐะปะธัั",
- "fc_emore": "ะฒัะดะตะปะธัะต ั
ะพัั ะฑั ะพะดะธะฝ ัะฐะนะป, ััะพะฑั ะฒััะตะทะฐัั",
- "fcp_emore": "ะฒัะดะตะปะธัะต ั
ะพัั ะฑั ะพะดะธะฝ ัะฐะนะป, ััะพะฑั ัะบะพะฟะธัะพะฒะฐัั ะฒ ะฑััะตั",
-
- "fs_sc": "ะฟะพะดะตะปะธัััั ัะตะบััะตะน ะฟะฐะฟะบะพะน",
- "fs_ss": "ะฟะพะดะตะปะธัััั ะฒัะดะตะปะตะฝะฝัะผะธ ัะฐะนะปะฐะผะธ",
- "fs_just1d": "ะฒั ะฝะต ะผะพะถะตัะต ะฒัะฑัะฐัั ะฑะพะปััะต ะพะดะฝะพะน ะฟะฐะฟะบะธ\nะธะปะธ ัะผะตัะธะฒะฐัั ัะฐะนะปั ั ะฟะฐะฟะบะฐะผะธ ะฟัะธ ะฒัะดะตะปะตะฝะธะธ",
- "fs_abrt": "โ ะพัะผะตะฝะธัั",
- "fs_rand": "๐ฒ ัะปัั. ะธะผั",
- "fs_go": "โ
ัะพะทะดะฐัั ะดะพัััะฟ",
- "fs_name": "ะธะผั",
- "fs_src": "ะฟััั",
- "fs_pwd": "ะฟะฐัะพะปั",
- "fs_exp": "ััะพะบ",
- "fs_tmin": "ะผะธะฝ",
- "fs_thrs": "ัะฐัะพะฒ",
- "fs_tdays": "ะดะฝะตะน",
- "fs_never": "ะฒะตัะฝะพ",
- "fs_pname": "ะธะผั ัััะปะบะธ; ะณะตะฝะตัะธััะตััั ัะปััะฐะนะฝะพ ะตัะปะธ ะฝะต ัะบะฐะทะฐะฝะพ",
- "fs_tsrc": "ะฟััั ะบ ัะฐะนะปั ะธะปะธ ะฟะฐะฟะบะต, ะบะพัะพััะผะธ ะฝัะถะฝะพ ะฟะพะดะตะปะธัััั",
- "fs_ppwd": "ะฟะฐัะพะปั (ะฝะตะพะฑัะทะฐัะตะปัะฝะพ)",
- "fs_w8": "ัะพะทะดะฐั ะดะพัััะฟ...",
- "fs_ok": "ะฝะฐะถะผะธัะต Enter/OK, ััะพะฑั ัะบะพะฟะธัะพะฒะฐัั\nะฝะฐะถะผะธัะต ESC/ะัะผะตะฝะฐ, ััะพะฑั ะทะฐะบัััั",
-
- "frt_dec": "ะผะพะถะตั ะธัะฟัะฐะฒะธัั ะฝะตะบะพัะพััะต ัะปััะฐะธ ั ะฝะตะบะพััะตะบัะฝัะผะธ ะธะผะตะฝะฐะผะธ ัะฐะนะปะพะฒ\">ะดะตะบะพะดะธัะพะฒะฐัั url",
- "frt_rst": "ัะฑัะพัะธัั ะธะทะผะตะฝัะฝะฝัะต ะธะผะตะฝะฐ ะพะฑัะฐัะฝะพ ะบ ะพัะธะณะธะฝะฐะปัะฝัะผ\">โบ ัะฑัะพั",
- "frt_abrt": "ะพัะผะตะฝะธัั ะพะฟะตัะฐัะธั ะธ ะทะฐะบัััั ััะพ ะพะบะฝะพ\">โ ะพัะผะตะฝะฐ",
- "frb_apply": "ะะะ ะะะะะะะะะขะฌ",
- "fr_adv": "ะฟะตัะตะธะผะตะฝะพะฒะฐะฝะธะต ะผะฐััะพะฒะพะต / ะผะตัะฐะดะฐะฝะฝัั
/ ะฟะพ ัะฐะฑะปะพะฝั\">ัะบัะฟะตัั",
- "fr_case": "ััะฒััะฒะธัะตะปัะฝัะน ะบ ัะตะณะธัััั regex\">ะ ะตะะธะกัะ ",
- "fr_win": "ัะพะฒะผะตััะธะผัะต ั windows ะธะผะตะฝะฐ; ะทะฐะผะตะฝัะตั <>:"\\|?* ัะฟะพะฝัะบะธะผะธ ะฟะพะปะฝะพัะธัะธะฝะฝัะผะธ ัะธะผะฒะพะปะฐะผะธ\">win",
- "fr_slash": "ะทะฐะผะตะฝัะตั / ัะธะผะฒะพะปะพะผ, ะบะพัะพััะน ะฝะต ัะพะทะดะฐัั ะฝะพะฒัะต ะฟะฐะฟะบะธ\">ะฑะตะท /",
- "fr_re": "ะฟะพะธัะบ ะฟะพ ัะฐะฑะปะพะฝั regex, ะฟัะธะผะตะฝัะตะผัะน ะบ ะพัะธะณะธะฝะฐะปัะฝัะผ ะธะผะตะฝะฐะผ; ะณััะฟะฟั ะทะฐั
ะฒะฐัะฐ ะผะพะณัั ะฟัะธะผะตะฝััััั ะฒ ะฟะพะปะต ัะพัะผะฐัะธัะพะฒะฐะฝะธั ั ะฟะพะผะพััั <code>(1)</code> ะธ <code>(2)</code> ะธ ัะฐะบ ะดะฐะปะตะต",
- "fr_fmt": "ะฒะดะพั
ะฝะพะฒะปะตะฝะพ foobar2000:$N<code>(title)</code> ะทะฐะผะตะฝัะตััั ะฝะฐะทะฒะฐะฝะธะตะผ ััะตะบะฐ,$N<code>[(artist) - ](title)</code> ะฟัะพะฟััะบะฐะตั [ััั] ัะฐััั, ะตัะปะธ ะบะพะผะฟะพะทะธัะพั ะฝะต ัะบะฐะทะฐะฝ$N<code>$lpad((tn),2,0)</code> ะดะพะฑะฐะฒะปัะตั ะฒะตะดััะธะต ะฝัะปะธ ะดะพ ะดะฒัั
ัะธัั",
- "fr_pdel": "ัะดะฐะปะธัั",
- "fr_pnew": "ัะพั
ัะฐะฝะธัั ะบะฐะบ",
- "fr_pname": "ะฟัะตะดะพััะฐะฒััะต ะฝะฐะทะฒะฐะฝะธะต ะดะปั ะฝะพะฒะพะณะพ ัะฐะฑะปะพะฝะฐ",
- "fr_aborted": "ะฟัะตัะฒะฐะฝะพ",
- "fr_lold": "ััะฐัะพะต ะธะผั",
- "fr_lnew": "ะฝะพะฒะพะต ะธะผั",
- "fr_tags": "ัะตะณะธ ะดะปั ะฒัะดะตะปะตะฝะฝัั
ัะฐะนะปะพะฒ (ะฝะต ัะตะดะฐะบัะธััะตััั, ััะพ ะดะปั ะธะฝััััะบัะธะธ):",
- "fr_busy": "ะฟะตัะตะธะผะตะฝะพะฒัะฒะฐั {0} ัะฐะนะปะพะฒ...\n\n{1}",
- "fr_efail": "ะพัะธะฑะบะฐ ะฟะตัะตะธะผะตะฝะพะฒะฐะฝะธั:\n",
- "fr_nchg": "{0} ะฝะพะฒัั
ะธะผัะฝ ะฑัะปะธ ะผะพะดะธัะธัะธัะพะฒะฐะฝั ะดะปั ัะพะพัะฒะตัััะฒะธั ะพะฟัะธัะผ win ะธ/ะธะปะธ ะฑะตะท /\n\nะฅะพัะธัะต ะธัะฟะพะปัะทะพะฒะฐัั ััะธ ะธะผะตะฝะฐ?",
-
- "fd_ok": "ััะฟะตัะฝะพ ัะดะฐะปะตะฝะพ",
- "fd_err": "ะพัะธะฑะบะฐ ัะดะฐะปะตะฝะธั:\n",
- "fd_none": "ะฝะธัะตะณะพ ะฝะต ัะดะฐะปะตะฝะพ; ะฒะพะทะผะพะถะฝะพ, ะฝะต ะฟะพะทะฒะพะปัะตั ะบะพะฝัะธะณััะฐัะธั ัะตัะฒะตัะฐ (xbd)?",
- "fd_busy": "ัะดะฐะปะตะฝะพ {0} ัะฐะนะปะพะฒ...\n\n{1}",
- "fd_warn1": "ะฃะะะะะขะฌ ััะธ {0} ัะฐะนะปะพะฒ?",
- "fd_warn2": "ะะฝะธะผะฐะฝะธะต! ะญัะพ ะฝะตะพะฑัะฐัะธะผัะน ะฟัะพัะตัั. ะฃะดะฐะปะธัั?",
-
- "fc_ok": "ะฒััะตะทะฐะฝะพ {0} ัะฐะนะปะพะฒ",
- "fc_warn": 'ะฒััะตะทะฐะฝะพ {0} ัะฐะนะปะพะฒ\n\nะฝะพ ัะพะปัะบะพ ััะฐ ะฒะบะปะฐะดะบะฐ ะฑัะฐัะทะตัะฐ ะผะพะถะตั ะธั
ะฒััะฐะฒะธัั\n(ะฟะพัะบะพะปัะบั ะฒัะดะตะปะตะฝะธะต ะพะบะฐะทะฐะปะพัั ะฝะฐััะพะปัะบะพ ะพะณัะพะผะฝัะผ)',
-
- "fcc_ok": "ัะบะพะฟะธัะพะฒะฐะฝะพ {0} ัะฐะนะปะพะฒ ะฒ ะฑััะตั",
- "fcc_warn": 'ัะบะพะฟะธัะพะฒะฐะฝะพ {0} ัะฐะนะปะพะฒ ะฒ ะฑััะตั\n\nะฝะพ ัะพะปัะบะพ ััะฐ ะฒะบะปะฐะดะบะฐ ะฑัะฐัะทะตัะฐ ะผะพะถะตั ะธั
ะฒััะฐะฒะธัั\n(ะฟะพัะบะพะปัะบั ะฒัะดะตะปะตะฝะธะต ะพะบะฐะทะฐะปะพัั ะฝะฐััะพะปัะบะพ ะพะณัะพะผะฝัะผ)',
-
- "fp_apply": "ะธัะฟะพะปัะทะพะฒะฐัั ััะธ ะธะผะตะฝะฐ",
- "fp_ecut": "ัะฝะฐัะฐะปะฐ ะฒััะตะทะฐัั ะธะปะธ ัะบะพะฟะธัะพะฒะฐัั ัะพะปัะบะพ ะฝะตะบะพัะพััะต ัะฐะนะปั / ะฟะฐะฟะบะธ\n\nัััะธัะต: ะฒั ะผะพะถะตัะต ะฒััะตะทะฐัั / ะฒััะฐะฒะปััั ัะฐะนะปั ะผะตะถะดั ะฒะบะปะฐะดะบะฐะผะธ",
- "fp_ename": "{0} ัะฐะนะปะพะฒ ะฝะตะฒะพะทะผะพะถะฝะพ ะฟะตัะตะฝะตััะธ ััะดะฐ, ะฟะพัะพะผั ััะพ ะธั
ะธะผะตะฝะฐ ัะถะต ะทะฐะฝััั. ะะฒะตะดะธัะต ะธะผะตะฝะฐ ะฝะธะถะต, ััะพะฑั ะฟัะพะดะพะปะถะธัั, ะธะปะธ ะพััะฐะฒััะต ะฟะพะปั ะฟััััะผะธ, ััะพะฑั ะฟัะพะฟัััะธัั:",
- "fcp_ename": "{0} ัะฐะนะปะพะฒ ะฝะตะฒะพะทะผะพะถะฝะพ ัะบะพะฟะธัะพะฒะฐัั ััะดะฐ, ะฟะพัะพะผั ััะพ ะธั
ะธะผะตะฝะฐ ัะถะต ะทะฐะฝััั. ะะฒะตะดะธัะต ะธะผะตะฝะฐ ะฝะธะถะต, ััะพะฑั ะฟัะพะดะพะปะถะธัั, ะธะปะธ ะพััะฐะฒััะต ะฟะพะปั ะฟััััะผะธ, ััะพะฑั ะฟัะพะฟัััะธัั:",
- "fp_emore": "ะตััั ะตัั ะบะพะปะปะธะทะธะธ ะธะผัะฝ, ะบะพัะพััะต ััะตะฑัะตััั ะธัะฟัะฐะฒะธัั",
- "fp_ok": "ััะฟะตัะฝะพ ะฟะตัะตะฝะตัะตะฝะพ",
- "fcp_ok": "ััะฟะตัะฝะพ ัะบะพะฟะธัะพะฒะฐะฝะพ",
- "fp_busy": "ะฟะตัะตะผะตัะฐั {0} ัะฐะนะปะพะฒ...\n\n{1}",
- "fcp_busy": "ะบะพะฟะธััั {0} ัะฐะนะปะพะฒ...\n\n{1}",
- "fp_abrt": "ะฟัะตััะฒะฐะฝะธะต...", //m
- "fp_err": "ะพัะธะฑะบะฐ ะฟะตัะตะผะตัะตะฝะธั:\n",
- "fcp_err": "ะพัะธะฑะบะฐ ะบะพะฟะธัะพะฒะฐะฝะธั:\n",
- "fp_confirm": "ะฟะตัะตะผะตััะธัั ััะธ {0} ัะฐะนะปะพะฒ ััะดะฐ?",
- "fcp_confirm": "ัะบะพะฟะธัะพะฒะฐัั ััะธ {0} ัะฐะนะปะพะฒ ััะดะฐ?",
- "fp_etab": 'ะพัะธะฑะบะฐ ััะตะฝะธั ะฑััะตัะฐ ะพะฑะผะตะฝะฐ ะธะท ะดััะณะพะน ะฒะบะปะฐะดะบะธ ะฑัะฐัะทะตัะฐ',
- "fp_name": "ะทะฐะณััะถะฐั ัะฐะนะป ั ะฒะฐัะตะณะพ ััััะพะนััะฒะฐ. ะะฐะทะพะฒะธัะต ะตะณะพ:",
- "fp_both_m": 'ะฒัะฑะตัะธัะต, ััะพ ะฒััะฐะฒะธัั
Enter = ะะตัะตะฝะตััะธ {0} ัะฐะนะปะพะฒ ะธะท ยซ{1}ยป\nESC = ะะฐะณััะทะธัั {2} ัะฐะนะปะพะฒ ั ะฒะฐัะตะณะพ ััััะพะนััะฒะฐ',
- "fcp_both_m": 'ะฒัะฑะตัะธัะต, ััะพ ะฒััะฐะฒะธัั
Enter = ะกะบะพะฟะธัะพะฒะฐัั {0} ัะฐะนะปะพะฒ ะธะท ยซ{1}ยป\nESC = ะะฐะณััะทะธัั {2} ัะฐะนะปะพะฒ ั ะฒะฐัะตะณะพ ััััะพะนััะฒะฐ',
- "fp_both_b": 'ะะตัะตะผะตััะธััะะฐะณััะทะธัั',
- "fcp_both_b": 'ะกะบะพะฟะธัะพะฒะฐััะะฐะณััะทะธัั',
-
- "mk_noname": "ะฒะฒะตะดะธัะต ะธะผั ะฒ ัะตะบััะพะฒะพะต ะฟะพะปะต ัะปะตะฒะฐ ะฟะตัะตะด ัะตะผ, ะบะฐะบ ััะพ ะดะตะปะฐัั :p",
-
- "tv_load": "ะะฐะณััะถะฐั ัะตะบััะพะฒัะน ะดะพะบัะผะตะฝั:\n\n{0}\n\n{1}% ({2} ะธะท {3} ะะธะ ะทะฐะณััะถะตะฝะพ)",
- "tv_xe1": "ะฝะต ัะดะฐะปะพัั ะทะฐะณััะทะธัั ัะตะบััะพะฒัะน ัะฐะนะป:\n\nะพัะธะฑะบะฐ ",
- "tv_xe2": "404, ัะฐะนะป ะฝะต ะฝะฐะนะดะตะฝ",
- "tv_lst": "ัะฟะธัะพะบ ัะตะบััะพะฒัั
ัะฐะนะปะพะฒ ะฒ",
- "tvt_close": "ะฒะตัะฝััััั ะฒ ะพะฑะทะพั ะฟะฐะฟะบะธ$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: M (ะธะปะธ Esc)\">โ ะทะฐะบัััั",
- "tvt_dl": "ัะบะฐัะฐัั ััะพั ัะฐะนะป$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: Y\">๐พ ัะบะฐัะฐัั",
- "tvt_prev": "ะฟะพะบะฐะทะฐัั ะฟัะตะดัะดััะธะน ะดะพะบัะผะตะฝั$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: i\">โฌ ะฟัะตะด",
- "tvt_next": "ะฟะพะบะฐะทะฐัั ัะปะตะดัััะธะน ะดะพะบัะผะตะฝั$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: K\">โฌ ัะปะตะด",
- "tvt_sel": "ะฒัะฑัะฐัั ะดะพะบัะผะตะฝั ( ะดะปั ะฒััะตะทะฐะฝะธั / ะบะพะฟะธัะพะฒะฐะฝะธั / ัะดะฐะปะตะฝะธั / ... )$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: S\">ะฒัะด",
- "tvt_edit": "ะพัะบัััั ะดะพะบัะผะตะฝั ะฒ ัะตะบััะพะฒะพะผ ัะตะดะฐะบัะพัะต$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: E\">โ๏ธ ะธะทะผะตะฝะธัั",
- "tvt_tail": "ะฟัะพะฒะตัััั ัะฐะนะป ะฝะฐ ะธะทะผะตะฝะตะฝะธั; ะฟะพะบะฐะทัะฒะฐัั ะฝะพะฒัะต ัััะพะบะธ ะฒ ัะตะฐะปัะฝะพะผ ะฒัะตะผะตะฝะธ\">๐ก ะพะฑะฝะพะฒะปััั",
- "tvt_wrap": "ะฟะตัะตะฝะพั ัะปะพะฒ\">โต",
- "tvt_atail": "ะฟัะธะบัะตะฟะธัั ะฒะธะด ะบ ะฝะธะทั ัััะฐะฝะธัั\">โ",
- "tvt_ctail": "ะดะตะบะพะดะธัะพะฒะฐัั ัะฒะตัะฐ ัะตัะผะธะฝะฐะปะฐ (ansi escape codes)\">๐",
- "tvt_ntail": "ะปะธะผะธั ะฟัะพะบัััะบะธ (ะบะฐะบ ะผะฝะพะณะพ ะฑะฐะนั ัะตะบััะฐ ะดะตัะถะฐัั ะฒ ะฟะฐะผััะธ)",
-
- "m3u_add1": "ััะตะบ ะดะพะฑะฐะฒะปะตะฝ ะฒ ะฟะปะตะนะปะธัั m3u",
- "m3u_addn": "{0} ััะตะบะพะฒ ะดะพะฑะฐะฒะปะตะฝะพ ะฒ ะฟะปะตะนะปะธัั m3u",
- "m3u_clip": "ะฟะปะตะนะปะธัั m3u ัะบะพะฟะธัะพะฒะฐะฝ ะฒ ะฑััะตั\n\nัะพะทะดะฐะนัะต ัะฐะนะป ั ัะฐััะธัะตะฝะธะตะผ .m3u ะธ ะฒััะฐะฒััะต ัะตะบัั ััะดะฐ, ััะพะฑั ัะดะตะปะฐัั ะธะท ะฝะตะณะพ ะฟะปะตะนะปะธัั",
-
- "gt_vau": "ะฝะต ะฟะพะบะฐะทัะฒะฐัั ะฒะธะดะตะพ, ัะพะปัะบะพ ะฒะพัะฟัะพะธะทะฒะพะดะธัั ะฐัะดะธะพ\">๐ง",
- "gt_msel": "ะฒะบะปััะธัั ัะตะถะธะผ ะฒัะดะตะปะตะฝะธั; ะดะตัะถะธัะต ctrl ะฟัะธ ะฝะฐะถะฐัะธะธ ะดะปั ะธะฝะฒะตััะฐัะธะธ ะดะตะนััะฒะธั$N$N<em>ะบะพะณะดะฐ ะฐะบัะธะฒะฝะพ: ะดะฒะฐะถะดั ะบะปะธะบะฝะธัะต ะฝะฐ ัะฐะนะปะต / ะฟะฐะฟะบะต, ััะพะฑั ะพัะบัััั ะธั
</em>$N$Nะะพัััะฐั ะบะปะฐะฒะธัะฐ: S\">ะฒัะดะตะปะตะฝะธะต",
- "gt_crop": "ะพะฑัะตะทะฐัั ะผะธะฝะธะฐัััั\">ะพะฑัะตะทะบะฐ",
- "gt_3x": "ะผะธะฝะธะฐัััั ะฒััะพะบะพะณะพ ัะฐะทัะตัะตะฝะธั\">3x",
- "gt_zoom": "ัะฐะทะผะตั",
- "gt_chop": "ะดะปะธะฝะฐ ะธะผัะฝ",
- "gt_sort": "ัะพััะธัะพะฒะฐัั ะฟะพ",
- "gt_name": "ะธะผะตะฝะธ",
- "gt_sz": "ัะฐะทะผะตัั",
- "gt_ts": "ะดะฐัะต",
- "gt_ext": "ัะธะฟั",
- "gt_c1": "ัะบะพัะพัะธัั ะฝะฐะทะฒะฐะฝะธั ัะฐะนะปะพะฒ",
- "gt_c2": "ัะดะปะธะฝะธัั ะฝะฐะทะฒะฐะฝะธั ัะฐะนะปะพะฒ",
-
- "sm_w8": "ะธัะตะผ...",
- "sm_prev": "ัะตะทัะปััะฐัั ะฟะพะธัะบะฐ ะฝะธะถะต - ะธะท ะฟัะตะดัะดััะตะณะพ ะทะฐะฟัะพัะฐ:\n ",
- "sl_close": "ะทะฐะบัััั ัะตะทัะปััะฐัั ะฟะพะธัะบะฐ",
- "sl_hits": "ะฟะพะบะฐะท {0} ัะพะฒะฟะฐะดะตะฝะธะน",
- "sl_moar": "ะทะฐะณััะทะธัั ะฑะพะปััะต",
-
- "s_sz": "ัะฐะทะผะตั",
- "s_dt": "ะดะฐัะฐ",
- "s_rd": "ะฟััั",
- "s_fn": "ะธะผั",
- "s_ta": "ัะตะณะธ",
- "s_ua": "ะดะฐัะฐโฌ๏ธ",
- "s_ad": "ะดััะณะพะต",
- "s_s1": "ะผะธะฝะธะผัะผ ะะธะ",
- "s_s2": "ะผะฐะบัะธะผัะผ ะะธะ",
- "s_d1": "ะผะธะฝ. iso8601",
- "s_d2": "ะผะฐะบั. iso8601",
- "s_u1": "ะทะฐะณััะถะตะฝะพ ะฟะพัะปะต",
- "s_u2": "ะธ/ะธะปะธ ะดะพ",
- "s_r1": "ะฟััั ัะพะดะตัะถะธั (ัะฐะทะดะตะปะธัั ะฟัะพะฑะตะปะฐะผะธ)",
- "s_f1": "ะธะผั ัะพะดะตัะถะธั (ะดะปั ะธัะบะปััะตะฝะธั ะฟะธัะฐัั -nope)",
- "s_t1": "ัะตะณะธ ัะพะดะตัะถะฐั (^=ะฝะฐัะฐะปะพ, ะบะพะฝะตั=$)",
- "s_a1": "ัะฒะพะนััะฒะฐ ะผะตัะฐะดะฐะฝะฝัั
",
-
- "md_eshow": "ะฝะต ัะดะฐะปะพัั ะฟะพะบะฐะทะฐัั ",
- "md_off": "[๐ัะธะดะผะธ] ะพัะบะปัััะฝ ะฒ [โ๏ธ] -- ะดะพะบัะผะตะฝั ัะบััั",
-
- "badreply": "ะัะธะฑะบะฐ ะพะฑัะฐะฑะพัะบะธ ะพัะฒะตัะฐ ัะตัะฒะตัะฐ",
-
- "xhr403": "403: ะะพัััะฟ ะทะฐะฟัะตััะฝ\n\nะฟะพะฟัะพะฑัะนัะต ะฟะตัะตะทะฐะณััะทะธัั ัััะฐะฝะธัั, ะฒะพะทะผะพะถะฝะพ, ะฒะฐัะฐ ัะตััะธั ะธััะตะบะปะฐ",
- "xhr0": "ะฝะตะธะทะฒะตััะฝะพ (ะฒะพะทะผะพะถะฝะพ, ะฟะพัะตััะฝะพ ัะพะตะดะธะฝะตะฝะธะต ั ัะตัะฒะตัะพะผ, ะปะธะฑะพ ะพะฝ ะพัะบะปัััะฝ)",
- "cf_ok": "ะฟัะพัะธะผ ะฟัะพัะตะฝะธั -- ััะฐะฑะพัะฐะปะฐ ะทะฐัะธัะฐ ะพั DD" + wah + "oS\n\nะฒัั ะดะพะปะถะฝะพ ะฒะตัะฝััััั ะฒ ะฝะพัะผั ัะตัะตะท 30 ัะตะบ\n\nะตัะปะธ ะฝะธัะตะณะพ ะฝะต ะฟัะพะธัั
ะพะดะธั - ะฟะตัะตะทะฐะณััะทะธัะต ัััะฐะฝะธัั",
- "tl_xe1": "ะฝะต ัะดะฐะปะพัั ะฟะพะบะฐะทะฐัั ะฟะพะดะฟะฐะฟะบะธ:\n\nะพัะธะฑะบะฐ ",
- "tl_xe2": "404: ะะฐะฟะบะฐ ะฝะต ะฝะฐะนะดะตะฝะฐ",
- "fl_xe1": "ะฝะต ัะดะฐะปะพัั ะฟะพะบะฐะทะฐัั ัะฐะนะปั:\n\nะพัะธะฑะบะฐ ",
- "fl_xe2": "404: ะะฐะฟะบะฐ ะฝะต ะฝะฐะนะดะตะฝะฐ",
- "fd_xe1": "ะฝะต ัะดะฐะปะพัั ัะพะทะดะฐัั ะฟะพะดะฟะฐะฟะบั:\n\nะพัะธะฑะบะฐ ",
- "fd_xe2": "404: ะ ะพะดะธัะตะปััะบะฐั ะฟะฐะฟะบะฐ ะฝะต ะฝะฐะนะดะตะฝะฐ",
- "fsm_xe1": "ะฝะต ัะดะฐะปะพัั ะพัะฟัะฐะฒะธัั ัะพะพะฑัะตะฝะธะต:\n\nะพัะธะฑะบะฐ ",
- "fsm_xe2": "404: ะ ะพะดะธัะตะปััะบะฐั ะฟะฐะฟะบะฐ ะฝะต ะฝะฐะนะดะตะฝะฐ",
- "fu_xe1": "ะฝะต ัะดะฐะปะพัั ัะดะฐะปะธัั ัะฟะธัะพะบ ั ัะตัะฒะตัะฐ:\n\nะพัะธะฑะบะฐ ",
- "fu_xe2": "404: ะคะฐะนะป ะฝะต ะฝะฐะนะดะตะฝ??",
-
- "fz_tar": "ะฝะตัะถะฐััะน ัะฐะนะป gnu-tar (linux / mac)",
- "fz_pax": "ะฝะตัะถะฐััะน pax-ัะพัะผะฐัะธัะพะฒะฐะฝะฝัะน tar (ะผะตะดะปะตะฝะฝะตะต)",
- "fz_targz": "gnu-tar ั 3 ััะพะฒะฝะตะผ ัะถะฐัะธั gzip$N$Nะพะฑััะฝะพ ััะพ ะพัะตะฝั ะผะตะดะปะตะฝะฝะพ,$Nะปัััะต ะธัะฟะพะปัะทะพะฒะฐัั ะฝะตัะถะฐััะน tar",
- "fz_tarxz": "gnu-tar ั 1 ััะพะฒะฝะตะผ ัะถะฐัะธั xz$N$Nะพะฑััะฝะพ ััะพ ะพัะตะฝั ะผะตะดะปะตะฝะฝะพ,$Nะปัััะต ะธัะฟะพะปัะทะพะฒะฐัั ะฝะตัะถะฐััะน tar",
- "fz_zip8": "zip ั ะธะผะตะฝะฐะผะธ ะฟะพ utf8 (ะผะพะถะตั ัะฐะฑะพัะฐัั ะบัะธะฒะพ ะฝะฐ windows 7 ะธ ะฝะธะถะต)",
- "fz_zipd": "zip ั ะธะผะตะฝะฐะผะธ ะฟะพ cp437, ะดะปั ะพัะตะฝั ััะฐัะพะณะพ ัะพััะฐ",
- "fz_zipc": "cp437 ั ะฟัะตะดะฒะฐัะธัะตะปัะฝัะผ ะฒััะธัะปะตะฝะธะตะผ crc32,$N ะดะปั MS-DOS PKZIP v2.04g (ะพะบััะฑัั 1993)$N(ััะตะฑัะตั ะฑะพะปััะต ะฒัะตะผะตะฝะธ ะดะปั ะพะฑัะฐะฑะพัะบะธ ะฟะตัะตะด ัะบะฐัะธะฒะฐะฝะธะตะผ)",
-
- "un_m1": "ะฒั ะผะพะถะตัะต ัะดะฐะปะธัั ะฒะฐัะธ ะฝะตะดะฐะฒะฝะธะต ะทะฐะณััะทะบะธ (ะธะปะธ ะพัะผะตะฝะธัั ะฝะตะทะฐะฒะตัััะฝะฝัะต) ะฝะธะถะต",
- "un_upd": "ะพะฑะฝะพะฒะธัั",
- "un_m4": "ะธะปะธ ะฟะพะดะตะปะธัััั ัะฐะนะปะฐะผะธ ัะฝะธะทั:",
- "un_ulist": "ะฟะพะบะฐะทะฐัั",
- "un_ucopy": "ะบะพะฟะธัะพะฒะฐัั",
- "un_flt": "ะพะฟัะธะพะฝะฐะปัะฝัะน ัะธะปััั: ะฐะดัะตั ะดะพะปะถะตะฝ ัะพะดะตัะถะฐัั",
- "un_fclr": "ะพัะธััะธัั ัะธะปััั",
- "un_derr": 'ะพัะธะฑะบะฐ ัะดะฐะปะตะฝะธั:\n',
- "un_f5": 'ััะพ-ัะพ ัะปะพะผะฐะปะพัั, ะฟะพะถะฐะปัะนััะฐ ะฟะตัะตะทะฐะณััะทะธัะต ัััะฐะฝะธัั',
- "un_uf5": "ะธะทะฒะธะฝะธัะต, ะฝะพ ะฒะฐะผ ะฝัะถะฝะพ ะฟะตัะตะทะฐะณััะทะธัั ัััะฐะฝะธัั (F5 ะธะปะธ Ctrl+R) ะฟะตัะตะด ัะตะผ, ะบะฐะบ ะพัะผะตะฝะธัั ััั ะทะฐะณััะทะบั",
- "un_nou": 'ะฒะฝะธะผะฐะฝะธะต: ัะตัะฒะตั ัะปะธัะบะพะผ ะฝะฐะณััะถะตะฝ, ััะพะฑั ะฟะพะบะฐะทะฐัั ะฝะตะทะฐะฒะตัััะฝะฝัะต ะทะฐะณััะทะบะธ; ะฝะฐะถะผะธัะต ะฝะฐ ัััะปะบั "ะพะฑะฝะพะฒะปะตะฝะธั" ัะตัะตะท ะฟะฐัั ัะตะบัะฝะด',
- "un_noc": 'ะฒะฝะธะผะฐะฝะธะต: ัะดะฐะปะตะฝะธะต ัะถะต ะทะฐะณััะถะตะฝะฝัั
ัะฐะนะปะพะฒ ะทะฐะฟัะตัะตะฝะพ ะบะพะฝัะธะณััะฐัะธะตะน ัะตัะฒะตัะฐ',
- "un_max": "ะฟะพะบะฐะทะฐะฝั ะฟะตัะฒัะต 2000 ัะฐะนะปะพะฒ (ะธัะฟะพะปัะทัะนัะต ัะธะปััั)",
- "un_avail": "{0} ะฝะตะดะฐะฒะฝะธั
ะทะฐะณััะทะพะบ ะผะพะถะตั ะฑััั ัะดะฐะปะตะฝะพ
{1} ะฝะตะทะฐะฒะตัััะฝะฝัั
ะผะพะถะตั ะฑััั ะพัะผะตะฝะตะฝะพ",
- "un_m2": "ะพััะพััะธัะพะฒะฐะฝะพ ะฟะพ ะฒัะตะผะตะฝะธ ะทะฐะณััะทะบะธ; ัะฝะฐัะฐะปะฐ ัะฐะผัะต ะฟะพัะปะตะดะฝะธะต:",
- "un_no1": "ั
ะฐ, ะฟะพะฒะตัะธะป! ะดะพััะฐัะพัะฝะพ ัะฒะตะถะธั
ะทะฐะณััะทะพะบ ะตัั ะฝะตั",
- "un_no2": "ั
ะฐ, ะฟะพะฒะตัะธะป! ะดะพััะฐัะพัะฝะพ ัะฒะตะถะธั
ะทะฐะณััะทะพะบ, ัะพะพัะฒะตัััะฒัััะธั
ัะธะปัััั, ะตัั ะฝะตั",
- "un_next": "ัะดะฐะปะธัั ัะปะตะดัััะธะต {0} ัะฐะนะปะพะฒ ะฝะธะถะต",
- "un_abrt": "ะพัะผะตะฝะธัั",
- "un_del": "ัะดะฐะปะธัั",
- "un_m3": "ะทะฐะณััะถะฐั ะฒะฐัะธ ะฝะตะดะฐะฒะฝะธะต ะทะฐะณััะทะบะธ...",
- "un_busy": "ัะดะฐะปัั {0} ัะฐะนะปะพะฒ...",
- "un_clip": "{0} ัััะปะพะบ ัะบะพะฟะธัะพะฒะฐะฝะพ ะฒ ะฑััะตั",
-
- "u_https1": "ะฒะฐะผ ััะพะธั",
- "u_https2": "ะฒะบะปััะธัั https",
- "u_https3": "ะดะปั ะปัััะตะน ะฟัะพะธะทะฒะพะดะธัะตะปัะฝะพััะธ",
- "u_ancient": 'ั ะฒะฐั ะดะตะนััะฒะธัะตะปัะฝะพ ะฐะฝัะธะบะฒะฐัะฝัะน ะฑัะฐัะทะตั -- ะฒะพะทะผะพะถะฝะพ, ััะพะธั ะธัะฟะพะปัะทะพะฒะฐัั bup',
- "u_nowork": "ััะตะฑัะตััั firefox 53+, chrome 57+ ะธะปะธ iOS 11+",
- "tail_2old": "ััะตะฑัะตััั firefox 105+, chrome 71+ ะธะปะธ iOS 14.5+",
- "u_nodrop": 'ะฒะฐั ะฑัะฐัะทะตั ัะปะธัะบะพะผ ััะฐััะน ะดะปั ะทะฐะณััะทะบะธ ัะตัะตะท ะฟะตัะตัะฐัะบะธะฒะฐะฝะธะต',
- "u_notdir": "ััะพ ะฝะต ะฟะฐะฟะบะฐ!\n\nะฒะฐั ะฑัะฐัะทะตั ัะปะธัะบะพะผ ััะฐััะน,\nะธัะฟะพะปัะทัะนัะต ะฟะตัะตัะฐัะบะธะฒะฐะฝะธะต",
- "u_uri": "ััะพะฑั ะฟะตัะตัะฐัะธัั ะบะฐััะธะฝะบั ะธะท ะดััะณะธั
ะพะบะพะฝ ะฑัะฐัะทะตัะฐ,\nะพัะฟัััะธัะต ะตั ะฝะฐ ะฑะพะปัััั ะบะฝะพะฟะบั ะทะฐะณััะทะบะธ",
- "u_enpot": 'ะฟะตัะตะบะปััะธัััั ะฝะฐ ะฟัะพััะพะน ะธะฝัะตััะตะนั (ะผะพะถะตั ััะบะพัะธัั ะทะฐะณััะทะบั)',
- "u_depot": 'ะฟะตัะตะบะปััะธัััั ะฝะฐ ะผะพะดะฝัะน ะธะฝัะตััะตะนั (ะผะพะถะตั ะทะฐะผะตะดะปะธัั ะทะฐะณััะทะบั)',
- "u_gotpot": 'ะฟะตัะตะบะปััะฐััั ะฝะฐ ะฟัะพััะพะน ะธะฝัะตััะตั ะดะปั ััะบะพัะตะฝะธั ะทะฐะณััะทะบะธ,\n\nะผะพะถะตัะต ะฟะตัะตะบะปััะธัััั ะพะฑัะฐัะฝะพ, ะตัะปะธ ั
ะพัะธัะต!',
- "u_pott": "ัะฐะนะปั: {0} ะทะฐะฒะตััะตะฝะพ, {1} ะพัะธะฑะพะบ, {2} ะทะฐะณััะถะฐัััั, {3} ะฒ ะพัะตัะตะดะธ
",
- "u_ever": "ััะพ ัะฟัะพััะฝะฝัะน ะทะฐะณััะทัะธะบ; up2k ััะตะฑัะตั ั
ะพัั ะฑั
chrome 21 // firefox 13 // edge 12 // opera 12 // safari 5.1",
- "u_su2k": 'ััะพ ัะฟัะพััะฝะฝัะน ะทะฐะณััะทัะธะบ; up2k ะปัััะต',
- "u_uput": 'ัะฒะตะปะธัะธัั ัะบะพัะพััั (ะฟัะพะฟััะบ ะฟะพะดััััะฐ ะบะพะฝััะพะปัะฝัั
ััะผะผ)',
- "u_ewrite": 'ั ะฒะฐั ะฝะตั ะฟัะฐะฒ ะฝะฐ ะทะฐะฟะธัั ะฒ ััั ะฟะฐะฟะบั',
- "u_eread": 'ั ะฒะฐั ะฝะตั ะฟัะฐะฒ ะฝะฐ ััะตะฝะธะต ะธะท ััะพะน ะฟะฐะฟะบะธ',
- "u_enoi": 'ะฟะพะธัะบ ัะฐะนะปะพะฒ ะฒัะบะปััะตะฝ ะฝะฐัััะพะนะบะฐะผะธ ัะตัะฒะตัะฐ',
- "u_enoow": "ะฟะตัะตะทะฐะฟะธัั ะทะดะตัั ะฝะต ัะฐะฑะพัะฐะตั; ััะตะฑััััั ะฟัะฐะฒะฐ ะฝะฐ ัะดะฐะปะตะฝะธะต",
- "u_badf": 'ะญัะธ {0} ะธะท {1} ัะฐะนะปะพะฒ ะฑัะปะธ ะฟัะพะฟััะตะฝั, ะฒะตัะพััะฝะพ, ะธะท-ะทะฐ ะฝะฐัััะพะตะบ ะดะพัััะฟะฐ ะฒ ัะฐะนะปะพะฒะพะน ัะธััะตะผะต:\n\n',
- "u_blankf": 'ะญัะธ {0} ะธะท {1} ัะฐะนะปะพะฒ ะฟััััะต; ะฒัั ัะฐะฒะฝะพ ะทะฐะณััะทะธัั?\n\n',
- "u_applef": 'ะญัะธ {0} ะธะท {1} ัะฐะนะปะพะฒ, ะฒะตัะพััะฝะพ, ะฝะตะถะตะปะฐัะตะปัะฝั;\nะะฐะถะผะธัะต OK/Enter, ััะพะฑั ะะ ะะะฃะกะขะะขะฌ ะธั
,\nะะฐะถะผะธัะต ะัะผะตะฝะฐ/ESC, ััะพะฑั ะฟัะพะธะณะฝะพัะธัะพะฒะฐัั ัะพะพะฑัะตะฝะธะต ะธ ะะะะ ะฃะะะขะฌ ะธั
:\n\n',
- "u_just1": '\nะะพะทะผะพะถะฝะพ, ะฑัะดะตั ะปัััะต, ะตัะปะธ ะฒั ะฒัะฑะตัะตัะต ัะพะปัะบะพ ะพะดะธะฝ ัะฐะนะป',
- "u_ff_many": "ะตัะปะธ ะฒั ะธัะฟะพะปัะทัะตัะต Linux / MacOS / Android, ัะพะณะดะฐ ัะฐะบะพะต ะบะพะปะธัะตััะฒะพ ัะฐะนะปะพะฒ ะผะพะถะตั ะบัะฐัะฝััั Firefox!\nะฒ ัะฐะบะพะผ ัะปััะฐะต ะฟะพะฟัะพะฑัะนัะต ัะฝะพะฒะฐ (ะธะปะธ ะธัะฟะพะปัะทัะนัะต Chrome).",
- "u_up_life": "ะญัะฐ ะทะฐะณััะทะบะฐ ะฑัะดะตั ัะดะฐะปะตะฝะฐ ั ัะตัะฒะตัะฐ\nัะตัะตะท {0} ะฟะพัะปะต ะตั ะทะฐะฒะตััะตะฝะธั",
- "u_asku": 'ะทะฐะณััะทะธัั ััะธ {0} ัะฐะนะปะพะฒ ะฒ {1}',
- "u_unpt": "ะฒั ะผะพะถะตัะต ะพัะผะตะฝะธัั / ัะดะฐะปะธัั ััั ะทะฐะณััะทะบั ั ะฟะพะผะพััั ๐งฏ ัะฒะตัั
ั ัะปะตะฒะฐ",
- "u_bigtab": 'ะฑัะดะตั ะฟะพะบะฐะทะฐะฝะพ {0} ัะฐะนะปะพะฒ\n\nััะพ ะผะพะถะตั ะบัะฐัะฝััั ะฑัะฐัะทะตั, ะฒั ัะฒะตัะตะฝั?',
- "u_scan": 'ะกะบะฐะฝะธััั ัะฐะนะปั...',
- "u_dirstuck": 'ัะบะฐะฝะตั ะฟะฐะฟะบะธ ะทะฐะฒะธั ะฟัะธ ะฟะพะฟััะบะต ะฟะพะปััะธัั ะดะพัััะฟ ะบ ัะปะตะดัััะธะผ {0} ัะฐะนะปะฐะผ; ะฑัะดะตั ะฟัะพะฟััะตะฝะพ:',
- "u_etadone": 'ะะพัะพะฒะพ ({0}, {1} ัะฐะนะปะพะฒ)',
- "u_etaprep": '(ะฟะพะดะณะพัะฐะฒะปะธะฒะฐั ะทะฐะณััะทะบั)',
- "u_hashdone": 'ั
ะตัะธัะพะฒะฐะฝะธะต ะฒัะฟะพะปะฝะตะฝะพ',
- "u_hashing": 'ั
ะตั',
- "u_hs": 'ะฟะพะดะณะพัะพะฒะบะฐ ะบ ั
ะตัะธัะพะฒะฐะฝะธั...',
- "u_started": "ัะฐะนะปั ะทะฐะณััะถะฐัััั; ะฟะพะดัะพะฑะฝะตะต ะฒ [๐]",
- "u_dupdefer": "ะดัะฑะปะธะบะฐั; ะฑัะดะตั ะพะฑัะฐะฑะพัะฐะฝ ะฟะพัะปะต ะฒัะตั
ะพััะฐะปัะฝัั
ัะฐะนะปะพะฒ",
- "u_actx": "ะฝะฐะถะผะธัะต ะฝะฐ ััะพั ัะตะบัั, ััะพะฑั ะฟัะตะดะพัะฒัะฐัะธัั
ะฟะฐะดะตะฝะธะต ะฟัะพะธะทะฒะพะดะธัะตะปัะฝะพััะธ ะฟัะธ ะฟัะพัะผะพััะต ะดััะณะธั
ะฒะบะปะฐะดะพะบ / ะพะบะพะฝ",
- "u_fixed": "ะะบะตะน! ะัะฟัะฐะฒะปะตะฝะพ ๐",
- "u_cuerr": "ะฝะต ัะดะฐะปะพัั ะทะฐะณััะทะธัั ััะฐะณะผะตะฝั {0} ะธะท {1};\nะฒะตัะพััะฝะพ, ะฝะต ะบัะธัะธัะฝะพ - ะฟัะพะดะพะปะถะฐั\n\nัะฐะนะป: {2}",
- "u_cuerr2": "ะพัะบะฐะท ะฒ ะทะฐะณััะทะบะต (ััะฐะณะผะตะฝั {0} ะธะท {1});\nะฟะพะฟััะฐััั ะฟะพะฒัะพัะธัั ะฟะพะทะถะต\n\nัะฐะนะป: {2}\n\nะพัะธะฑะบะฐ ",
- "u_ehstmp": "ะฟะพะฟััะฐััั ะฟะพะฒัะพัะธัั ะฟะพะทะถะต; ะฟะพะดัะพะฑะฝะตะต ัะฝะธะทั ัะฟัะฐะฒะฐ",
- "u_ehsfin": "ะพัะบะฐะท ะฒ ะทะฐะฟัะพัะต ะทะฐะฒะตััะตะฝะธั ะทะฐะณััะทะบะธ; ะฟะพะฒัะพััั...",
- "u_ehssrch": "ะพัะบะฐะท ะฒ ะทะฐะฟัะพัะต ะฟะพะธัะบะฐ; ะฟะพะฒัะพััั...",
- "u_ehsinit": "ะพัะบะฐะท ะฒ ะทะฐะฟัะพัะต ะฝะฐัะฐะปะฐ ะทะฐะณััะทะบะธ; ะฟะพะฒัะพััั...",
- "u_eneths": "ะพัะธะฑะบะฐ ะฟะพะดะบะปััะตะฝะธั ะฒะพ ะฒัะตะผั ะฟะพะดะณะพัะพะฒะบะธ ะทะฐะณััะทะบะธ; ะฟะพะฒัะพััั...",
- "u_enethd": "ะพัะธะฑะบะฐ ะฟะพะดะบะปััะตะฝะธั ะฒะพ ะฒัะตะผั ะฟัะพะฒะตัะบะธ ัััะตััะฒะพะฒะฐะฝะธั ัะตะปะตะฒะพะณะพ ัะฐะนะปะฐ; ะฟะพะฒัะพััั...",
- "u_cbusy": "ะพะถะธะดะฐั ะฒะพะทะฒัะฐัะตะฝะธั ะดะพัััะฟะฐ ะบ ัะตัะฒะตัั ะฟะพัะปะต ะพัะธะฑะบะธ ะฟะพะดะบะปััะตะฝะธั...",
- "u_ehsdf": "ะฝะฐ ัะตัะฒะตัะต ะทะฐะบะพะฝัะธะปะพัั ะผะตััะพ!\n\nะฑัะดั ะฟััะฐัััั ะฟะพะฒัะพัะธัั, ะฝะฐ ัะปััะฐะน ะตัะปะธ\nะผะตััะพ ะฑัะดะตั ะพัะฒะพะฑะพะถะดะตะฝะพ",
- "u_emtleak1": "ะบะฐะถะตััั, ั ะฒะฐัะตะณะพ ะฑัะฐัะทะตัะฐ ะผะพะถะตั ะฑััั ััะตัะบะฐ ะฟะฐะผััะธ;\nะฟะพะถะฐะปัะนััะฐ,",
- "u_emtleak2": ' ะฟะตัะตะนะดะธัะต ะฝะฐ https (ัะตะบะพะผะตะฝะดะพะฒะฐะฝะพ) ะธะปะธ ',
- "u_emtleak3": ' ',
- "u_emtleakc": 'ะฟะพะฟัะพะฑัะนัะต ัะดะตะปะฐัั ัะฐะบ:\n- ะฝะฐะถะผะธัะต
F5 ะดะปั ะพะฑะฝะพะฒะปะตะฝะธั ัััะฐะฝะธัั - ะทะฐัะตะผ ะพัะบะปััะธัะต ะพะฟัะธั
ะผะฟ ะฒ โ๏ธ ะฝะฐัััะพะนะบะฐั
- ะธ ะฟะพะฒัะพัะธัะต ะฟะพะฟััะบั ะทะฐะณััะทะบะธ
ะะฝะฐ ะฑัะดะตั ัััั ะผะตะดะปะตะฝะฝะตะต, ะฝะพ ััะพ ะฟะพะดะตะปะฐัั.\nะะทะฒะธะฝะธัะต ะทะฐ ะฝะตัะดะพะฑััะฒะฐ!\n\nPS: ะฒ chrome v107 ััะพ ะธัะฟัะฐะฒะธะปะธ',
- "u_emtleakf": 'ะฟะพะฟัะพะฑัะนัะต ัะดะตะปะฐัั ัะฐะบ:\n- ะฝะฐะถะผะธัะต
F5 ะดะปั ะพะฑะฝะพะฒะปะตะฝะธั ัััะฐะฝะธัั - ะทะฐัะตะผ ะฒะบะปััะธัะต ะพะฟัะธั
๐ฅ (ะฟัะพััะพะน ะธะฝัะตััะตะนั) ะฒะพ ะฒะบะปะฐะดะบะต ะทะฐะณััะทะพะบ - ะธ ะฟะพะฒัะพัะธัะต ะฟะพะฟััะบั
\nPS: firefox ัะบะพัะพ ะดะพะปะถะฝั ะฟะพัะธะฝะธัั ะฒ ััะพะผ ะฐัะฟะตะบัะต',
- "u_s404": "ะฝะต ะฝะฐะนะดะตะฝะพ ะฝะฐ ัะตัะฒะตัะต",
- "u_expl": "ะพะฑัััะฝะธัั",
- "u_maxconn": "ะฒ ะฑะพะปััะธะฝััะฒะต ะฑัะฐัะทะตัะพะฒ ััะพ ะฝะตะปัะทั ะฟะพะดะฝััั ะฒััะต 6, ะฝะพ firefox ะฟะพะทะฒะพะปัะตั ัะฒะตะปะธัะธัั ะปะธะผะธั ั ะฟะพะผะพััั connections-per-server ะฒ about:config",
- "u_tu": 'ะะะะะะะะ: ะฐะบัะธะฒะตะฝ ัะตะถะธะผ ัััะฑะพ, ะบะปะธะตะฝั ะผะพะถะตั ะธะณะฝะพัะธัะพะฒะฐัั ะฝะตะทะฐะฒะตัััะฝะฝัะต ะทะฐะณััะทะบะธ; ะฟะพะดัะพะฑะฝะตะต ะฟัะธ ะฝะฐะฒะตะดะตะฝะธะธ ะฝะฐ ะบะฝะพะฟะบั ัััะฑะพ
',
- "u_ts": 'ะะะะะะะะ: ะฐะบัะธะฒะตะฝ ัะตะถะธะผ ัััะฑะพ, ัะตะทัะปััะฐัั ะฟะพะธัะบะฐ ะผะพะณัั ะฑััั ะฝะตะบะพััะตะบัะฝัะผะธ; ะฟะพะดัะพะฑะฝะตะต ะฟัะธ ะฝะฐะฒะตะดะตะฝะธะธ ะฝะฐ ะบะฝะพะฟะบั ัััะฑะพ
',
- "u_turbo_c": "ัะตะถะธะผ ัััะฑะพ ะพัะบะปัััะฝ ัะตัะฒะตัะพะผ",
- "u_turbo_g": "ะพัะบะปััะฐั ัััะฑะพ, ะฟะพัะบะพะปัะบั ั ะฒะฐั ะฝะตั ะฟัะฐะฒ\nะฝะฐ ะฟัะพัะผะพัั ะฟะฐะฟะพะบ ะฒ ััะพะผ ั
ัะฐะฝะธะปะธัะต",
- "u_life_cfg": 'ะฐะฒัะพัะดะฐะปะตะฝะธะต ัะตัะตะท ะผะธะฝ (ะธะปะธ ัะฐัะพะฒ)',
- "u_life_est": 'ะทะฐะณััะทะบะฐ ะฑัะดะตั ัะดะฐะปะตะฝะฐ ---',
- "u_life_max": 'ััะฐ ะฟะฐะฟะบะฐ ััะตะฑัะตั\nะฐะฒัะพัะดะฐะปะตะฝะธั ัะฐะนะปะพะฒ ัะตัะตะท {0}',
- "u_unp_ok": 'ัะดะฐะปะตะฝะธะต ัะฐะทัะตัะตะฝะพ ะดะปั {0}',
- "u_unp_ng": 'ัะดะฐะปะตะฝะธะต ะะ ะฑัะดะตั ัะฐะทัะตัะตะฝะพ',
- "ue_ro": 'ะฒะฐั ะดะพัััะฟ ะบ ะดะฐะฝะฝะพะน ะฟะฐะฟะบะต - ัะพะปัะบะพ ััะตะฝะธะต\n\n',
- "ue_nl": 'ะฝะฐ ะดะฐะฝะฝัะน ะผะพะผะตะฝั ะฒั ะฝะต ะฐะฒัะพัะธะทะพะฒะฐะฝั',
- "ue_la": 'ะฒั ะฐะฒัะพัะธะทะพะฒะฐะฝั ะบะฐะบ "{0}"',
- "ue_sr": 'ัะตะนัะฐั ะฒั ะฒ ัะตะถะธะผะต ะฟะพะธัะบะฐ ัะฐะนะปะพะฒ\n\nะฟะตัะตะนะดะธัะต ะฒ ัะตะถะธะผ ะทะฐะณััะทะบะธ, ะฝะฐะถะฐะฒ ะฝะฐ ะปัะฟั ๐ (ััะดะพะผ ั ะพะณัะพะผะฝะพะน ะบะฝะพะฟะบะพะน ะะกะะะขะฌ), ะธ ะฟะพะฟัะพะฑัะนัะต ัะฝะพะฒะฐ\n\nะธะทะฒะธะฝะธัะต',
- "ue_ta": 'ะฟะพะฟัะพะฑัะนัะต ะทะฐะณััะทะธัั ัะฝะพะฒะฐ, ัะตะฟะตัั ะดะพะปะถะฝะพ ััะฐะฑะพัะฐัั',
- "ue_ab": "ััะพั ัะฐะนะป ัะถะต ะทะฐะณััะถะฐัั ะฒ ะดััะณัั ะฟะฐะฟะบั, ัะฐ ะทะฐะณััะทะบะฐ ะดะพะปะถะฝะฐ ะฑััั ะทะฐะฒะตััะตะฝะฐ ะฟะตัะตะด ัะตะผ, ะบะฐะบ ะทะฐะณััะทะธัั ััะพั ะถะต ัะฐะนะป ะฒ ะดััะณะพะต ะผะตััะพ.\n\nะั ะผะพะถะตัะต ะพัะผะตะฝะธัั ัะฒะพั ะทะฐะณััะทะบั ัะตัะตะท ๐งฏ ัะฒะตัั
ั ัะปะตะฒะฐ",
- "ur_1uo": "OK: ะคะฐะนะป ััะฟะตัะฝะพ ะทะฐะณััะถะตะฝ",
- "ur_auo": "OK: ะัะต {0} ัะฐะนะปะพะฒ ััะฟะตัะฝะพ ะทะฐะณััะถะตะฝั",
- "ur_1so": "OK: ะคะฐะนะป ะฝะฐะนะดะตะฝ ะฝะฐ ัะตัะฒะตัะต",
- "ur_aso": "OK: ะัะต {0} ัะฐะนะปะพะฒ ะฝะฐะนะดะตะฝั ะฝะฐ ัะตัะฒะตัะต",
- "ur_1un": "ะะฐะณััะทะบะฐ ะฝะต ัะดะฐะปะฐัั, ะธะทะฒะธะฝะธัะต",
- "ur_aun": "ะัะต {0} ะทะฐะณััะทะพะบ ะฝะต ัะดะฐะปะธัั, ะธะทะฒะธะฝะธัะต",
- "ur_1sn": "ะคะฐะนะป ะะ ะฑัะป ะฝะฐะนะดะตะฝ ะฝะฐ ัะตัะฒะตัะต",
- "ur_asn": "ะัะต {0} ัะฐะนะปะพะฒ ะะ ะฑัะปะพ ะฝะฐะนะดะตะฝะพ ะฝะฐ ัะตัะฒะตัะต",
- "ur_um": "ะะฐะฒะตััะตะฝะพ;\n{0} ััะฟะตัะฝะพ,\n{1} ะพัะธะฑะพะบ, ะธะทะฒะธะฝะธัะต",
- "ur_sm": "ะะฐะฒะตััะตะฝะพ;\n{0} ัะฐะนะปะพะฒ ะฝะฐะนะดะตะฝะพ ะฝะฐ ัะตัะฒะตัะต,\n{1} ัะฐะนะปะพะฒ ะะ ะฝะฐะนะดะตะฝะพ ะฝะฐ ัะตัะฒะตัะต",
-
- "lang_set": "ะฟะตัะตะทะฐะณััะทะธัั ัััะฐะฝะธัั, ััะพะฑั ะฟัะธะผะตะฝะธัั ะธะทะผะตะฝะตะฝะธั?",
- },
- "spa": {
- "tt": "Espaรฑol",
-
- "cols": {
- "c": "acciones",
- "dur": "duraciรณn",
- "q": "calidad / bitrate",
- "Ac": "cรณdec de audio",
- "Vc": "cรณdec de vรญdeo",
- "Fmt": "formato / contenedor",
- "Ahash": "checksum de audio",
- "Vhash": "checksum de vรญdeo",
- "Res": "resoluciรณn",
- "T": "tipo de archivo",
- "aq": "calidad de audio / bitrate",
- "vq": "calidad de vรญdeo / bitrate",
- "pixfmt": "submuestreo / estructura de pรญxel",
- "resw": "resoluciรณn horizontal",
- "resh": "resoluciรณn vertical",
- "chs": "canales de audio",
- "hz": "frecuencia de muestreo"
- },
-
- "hks": [
- [
- "varios",
- ["ESC", "cerrar varias cosas"],
-
- "gestor de archivos",
- ["G", "alternar vista de lista / cuadrรญcula"],
- ["T", "alternar miniaturas / iconos"],
- ["โง A/D", "tamaรฑo de miniatura"],
- ["ctrl-K", "eliminar seleccionados"],
- ["ctrl-X", "cortar selecciรณn al portapapeles"],
- ["ctrl-C", "copiar selecciรณn al portapapeles"],
- ["ctrl-V", "pegar (mover/copiar) aquรญ"],
- ["Y", "descargar seleccionados"],
- ["F2", "renombrar seleccionados"],
-
- "selecciรณn en lista de archivos",
- ["space", "alternar selecciรณn de archivo"],
- ["โ/โ", "mover cursor de selecciรณn"],
- ["ctrl โ/โ", "mover cursor y vista"],
- ["โง โ/โ", "seleccionar anterior/siguiente archivo"],
- ["ctrl-A", "seleccionar todos los archivos / carpetas"]
- ], [
- "navegaciรณn",
- ["B", "alternar breadcrumbs / panel de navegaciรณn"],
- ["I/K", "anterior/siguiente carpeta"],
- ["M", "carpeta de nivel superior (o contraer actual)"],
- ["V", "alternar carpetas / archivos en panel de navegaciรณn"],
- ["A/D", "tamaรฑo del panel de navegaciรณn"]
- ], [
- "reproductor de audio",
- ["J/L", "anterior/siguiente canciรณn"],
- ["U/O", "saltar 10s atrรกs/adelante"],
- ["0..9", "saltar a 0%..90%"],
- ["P", "reproducir/pausar (tambiรฉn inicia)"],
- ["S", "seleccionar canciรณn en reproducciรณn"],
- ["Y", "descargar canciรณn"]
- ], [
- "visor de imรกgenes",
- ["J/L, โ/โ", "anterior/siguiente imagen"],
- ["Home/End", "primera/รบltima imagen"],
- ["F", "pantalla completa"],
- ["R", "rotar en sentido horario"],
- ["โง R", "rotar en sentido antihorario"],
- ["S", "seleccionar imagen"],
- ["Y", "descargar imagen"]
- ], [
- "reproductor de vรญdeo",
- ["U/O", "saltar 10s atrรกs/adelante"],
- ["P/K/Space", "reproducir/pausar"],
- ["C", "continuar con el siguiente"],
- ["V", "bucle"],
- ["M", "silenciar"],
- ["[ y ]", "establecer intervalo de bucle"]
- ], [
- "visor de texto",
- ["I/K", "anterior/siguiente archivo"],
- ["M", "cerrar archivo"],
- ["E", "editar archivo"],
- ["S", "seleccionar archivo (para cortar/copiar/renombrar)"]
- ]
- ],
-
- "m_ok": "Aceptar",
- "m_ng": "Cancelar",
-
- "enable": "Activar",
- "danger": "PELIGRO",
- "clipped": "copiado al portapapeles",
-
- "ht_s1": "segundo",
- "ht_s2": "segundos",
- "ht_m1": "minuto",
- "ht_m2": "minutos",
- "ht_h1": "hora",
- "ht_h2": "horas",
- "ht_d1": "dรญa",
- "ht_d2": "dรญas",
- "ht_and": " y ",
-
- "goh": "panel de control",
- "gop": 'hermano anterior">anterior',
- "gou": 'carpeta de nivel superior">subir',
- "gon": 'siguiente carpeta">siguiente',
- "logout": "Cerrar sesiรณn ",
- "login": "Iniciar sesiรณn", //m
- "access": " acceso",
- "ot_close": "cerrar submenรบ",
- "ot_search": "buscar archivos por atributos, ruta / nombre, etiquetas de mรบsica, o cualquier combinaciรณn$N$N<code>foo bar</code> = debe contener ยซfooยป y ยซbarยป,$N<code>foo -bar</code> = debe contener ยซfooยป pero no ยซbarยป,$N<code>^yana .opus$</code> = empieza con ยซyanaยป y es un archivo ยซopusยป$N<code>"try unite"</code> = contiene exactamente ยซtry uniteยป$N$Nel formato de fecha es iso-8601, como$N<code>2009-12-31</code> o <code>2020-09-12 23:30:00</code>",
- "ot_unpost": "dessubir: elimina tus subidas recientes, o aborta las inacabadas",
- "ot_bup": "bup: uploader bรกsico, soporta hasta netscape 4.0",
- "ot_mkdir": "mkdir: crear un nuevo directorio",
- "ot_md": "new-md: crear un nuevo documento markdown",
- "ot_msg": "msg: enviar un mensaje al registro del servidor",
- "ot_mp": "opciones del reproductor multimedia",
- "ot_cfg": "opciones de configuraciรณn",
- "ot_u2i": "up2k: subir archivos (si tienes acceso de escritura) o cambiar a modo de bรบsqueda para ver si existen en el servidor$N$Nlas subidas se pueden reanudar, usan mรบltiples hilos y conservan la fecha de los archivos, pero consume mรกs CPU que [๐] (el uploader bรกsico)
ยกDurante las subidas, este icono se convierte en un indicador de progreso!",
- "ot_u2w": "up2k: subir archivos con soporte para reanudaciรณn (cierra tu navegador y arrastra los mismos archivos mรกs tarde)$N$NMultihilo y conserva las fechas de los archivos, pero usa mรกs CPU que [๐] (el uploader bรกsico)
ยกDurante las subidas, este icono se convierte en un indicador de progreso!",
- "ot_noie": "Por favor, usa Chrome / Firefox / Edge",
-
- "ab_mkdir": "crear directorio",
- "ab_mkdoc": "nuevo documento markdown",
- "ab_msg": "enviar msg al registro del servidor",
-
- "ay_path": "saltar a carpetas",
- "ay_files": "saltar a archivos",
-
- "wt_ren": "renombrar elementos seleccionados$NAtajo: F2",
- "wt_del": "eliminar elementos seleccionados$NAtajo: ctrl-K",
- "wt_cut": "cortar elementos seleccionados <small>(luego pegar en otro lugar)</small>$NAtajo: ctrl-X",
- "wt_cpy": "copiar elementos seleccionados al portapapeles$N(para pegarlos en otro lugar)$NAtajo: ctrl-C",
- "wt_pst": "pegar una selecciรณn previamente cortada / copiada$NAtajo: ctrl-V",
- "wt_selall": "seleccionar todos los archivos$NAtajo: ctrl-A (con un archivo con foco)",
- "wt_selinv": "invertir selecciรณn",
- "wt_zip1": "descargar esta carpeta como un archivo comprimido",
- "wt_selzip": "descargar selecciรณn como archivo comprimido",
- "wt_seldl": "descargar selecciรณn como archivos separados$NAtajo: Y",
- "wt_npirc": "copiar informaciรณn de pista en formato IRC",
- "wt_nptxt": "copiar informaciรณn de pista en texto plano",
- "wt_m3ua": "aรฑadir a lista m3u (haz clic en ๐ปcopiar despuรฉs)",
- "wt_m3uc": "copiar lista m3u al portapapeles",
- "wt_grid": "alternar vista de cuadrรญcula / lista$NAtajo: G",
- "wt_prev": "pista anterior$NAtajo: J",
- "wt_play": "reproducir / pausar$NAtajo: P",
- "wt_next": "siguiente pista$NAtajo: L",
-
- "ul_par": "subidas paralelas:",
- "ut_rand": "aleatorizar nombres de archivo",
- "ut_u2ts": 'copiar la fecha de รบltima modificaciรณn$Nde tu sistema de archivos al servidor">๐
',
- "ut_ow": "sobrescribir archivos existentes en el servidor?$N๐ก๏ธ: nunca (generarรก un nuevo nombre de archivo en su lugar)$N๐: sobrescribir si el archivo del servidor es mรกs antiguo que el tuyo$Nโป๏ธ: siempre sobrescribir si los archivos son diferentes",
- "ut_mt": "continuar generando hashes de otros archivos mientras se sube$N$Nquizรกs desactivar si tu CPU o HDD es un cuello de botella",
- "ut_ask": 'pedir confirmaciรณn antes de iniciar la subida">๐ญ',
- "ut_pot": "mejorar la velocidad de subida en dispositivos lentos$Nsimplificando la interfaz de usuario",
- "ut_srch": "no subir, en su lugar comprobar si los archivos ya $N existen en el servidor (escanearรก todas las carpetas que puedas leer)",
- "ut_par": "pausar subidas poniรฉndolo a 0$N$Naumentar si tu conexiรณn es lenta / de alta latencia$N$Nmantener en 1 en LAN o si el HDD del servidor es un cuello de botella",
- "ul_btn": "arrastra archivos / carpetas
aquรญ (o haz clic)",
- "ul_btnu": "S U B I R",
- "ul_btns": "B U S C A R",
-
- "ul_hash": "hash",
- "ul_send": "envio",
- "ul_done": "hecho",
- "ul_idle1": "aรบn no hay subidas en cola",
- "ut_etah": "velocidad media de <em>hashing</em>, y tiempo estimado para finalizar",
- "ut_etau": "velocidad media de <em>subida</em> y tiempo estimado para finalizar",
- "ut_etat": "velocidad media <em>total</em> y tiempo estimado para finalizar",
-
- "uct_ok": "completado con รฉxito",
- "uct_ng": "fallido: error / rechazado / no encontrado",
- "uct_done": "รฉxitos y fallos combinados",
- "uct_bz": "generando hash o subiendo",
- "uct_q": "inactivo, pendiente",
-
- "utl_name": "nombre de archivo",
- "utl_ulist": "lista",
- "utl_ucopy": "copiar",
- "utl_links": "enlaces",
- "utl_stat": "estado",
- "utl_prog": "progreso",
-
- "utl_404": "404",
- "utl_err": "ERROR",
- "utl_oserr": "Error-SO",
- "utl_found": "encontrado",
- "utl_defer": "posponer",
- "utl_yolo": "YOLO",
- "utl_done": "hecho",
-
- "ul_flagblk": "los archivos se aรฑadieron a la cola
sin embargo, hay un up2k ocupado en otra pestaรฑa del navegador,
esperando a que termine primero",
- "ul_btnlk": "la configuraciรณn del servidor ha bloqueado esta opciรณn en este estado",
-
- "udt_up": "Subir",
- "udt_srch": "Buscar",
- "udt_drop": "suรฉltalo aquรญ",
-
- "u_nav_m": "vale, ยฟquรฉ tienes?
Intro = Archivos (uno o mรกs)\nESC = Una carpeta (incluyendo subcarpetas)",
- "u_nav_b": "ArchivosUna carpeta",
-
- "cl_opts": "opciones",
- "cl_themes": "tema",
- "cl_langs": "idioma",
- "cl_ziptype": "descarga de carpeta",
- "cl_uopts": "opciones up2k",
- "cl_favico": "favicon",
- "cl_bigdir": "directorios grandes",
- "cl_hsort": "#ordenar",
- "cl_keytype": "notaciรณn musical",
- "cl_hiddenc": "columnas ocultas",
- "cl_hidec": "ocultar",
- "cl_reset": "restablecer",
- "cl_hpick": "toca en las cabeceras de columna para ocultarlas en la tabla de abajo",
- "cl_hcancel": "ocultaciรณn de columna cancelada",
-
- "ct_grid": '็ฐ cuadrรญcula',
- "ct_ttips": 'โ โก โ">โน๏ธ tooltips',
- "ct_thumb": 'en vista de cuadrรญcula, alternar iconos o miniaturas$NAtajo: T">๐ผ๏ธ miniaturas',
- "ct_csel": 'usa CTRL y SHIFT para seleccionar archivos en la vista de cuadrรญcula">sel',
- "ct_ihop": 'al cerrar el visor de imรกgenes, desplazarse hasta el รบltimo archivo visto">gโฎฏ',
- "ct_dots": 'mostrar archivos ocultos (si el servidor lo permite)">archivos ocultos',
- "ct_qdel": 'al eliminar archivos, pedir confirmaciรณn solo una vez">elim. rรกpida',
- "ct_dir1st": 'ordenar carpetas antes que archivos">๐ primero',
- "ct_nsort": 'orden natural (para nombres de archivo con dรญgitos iniciales)">ord. natural',
- "ct_utc": 'use UTC para todas las horas">UTC', //m
- "ct_readme": 'mostrar README.md en los listados de carpetas">๐ lรฉeme',
- "ct_idxh": 'mostrar index.html en lugar del listado de carpetas">htm',
- "ct_sbars": 'mostrar barra lateral">โ',
-
- "cut_umod": 'si un archivo ya existe en el servidor, actualiza la fecha de รบltima modificaciรณn del servidor para que coincida con tu archivo local (requiere permisos de escritura+eliminaciรณn)">re๐
',
-
- "cut_turbo": 'el botรณn yolo, probablemente NO quieras activarlo:$N$Nรบsalo si estabas subiendo una gran cantidad de archivos y tuviste que reiniciar por alguna razรณn, y quieres continuar la subida lo antes posible$N$Nesto reemplaza la comprobaciรณn de hash por un simple "ยฟtiene este el mismo tamaรฑo de archivo en el servidor?" asรญ que si el contenido del archivo es diferente, NO se subirรก$N$Ndeberรญas desactivar esto cuando la subida termine, y luego "subir" los mismos archivos de nuevo para que el cliente los verifique">turbo',
-
- "cut_datechk": 'no tiene efecto a menos que el botรณn turbo estรฉ activado$N$Nreduce el factor yolo en una pequeรฑa cantidad; comprueba si las fechas de los archivos en el servidor coinciden con las tuyas$N$Nteรณricamente deberรญa detectar la mayorรญa de las subidas inacabadas / corruptas, pero no es un sustituto de hacer una pasada de verificaciรณn con el turbo desactivado despuรฉs">verif. fecha',
-
- "cut_u2sz": "tamaรฑo (en MiB) de cada trozo de subida; los valores grandes vuelan mejor a travรฉs del atlรกntico. Prueba valores bajos en conexiones muy poco fiables",
-
- "cut_flag": "asegura que solo una pestaรฑa estรฉ subiendo a la vez $N -- otras pestaรฑas tambiรฉn deben tener esto activado $N -- solo afecta a pestaรฑas en el mismo dominio",
-
- "cut_az": "subir archivos en orden alfabรฉtico, en lugar de los mรกs pequeรฑos primero$N$Nel orden alfabรฉtico puede facilitar la detecciรณn visual de si algo saliรณ mal en el servidor, pero hace la subida ligeramente mรกs lenta en fibra / LAN",
-
- "cut_nag": "notificaciรณn del SO cuando la subida se complete$N(solo si el navegador o la pestaรฑa no estรกn activos)",
- "cut_sfx": "alerta sonora cuando la subida se complete$N(solo si el navegador o la pestaรฑa no estรกn activos)",
-
- "cut_mt": 'usar multithreading para acelerar el hashing de archivos$N$Nesto usa web-workers y requiere$Nmรกs RAM (hasta 512 MiB extra)$N$Nhace https un 30% mรกs rรกpido, http 4.5x mรกs rรกpido">mt',
-
- "cut_wasm": 'usar wasm en lugar del hasher incorporado del navegador; mejora la velocidad en navegadores basados en chrome pero aumenta la carga de la CPU, y muchas versiones antiguas de chrome tienen errores que hacen que el navegador consuma toda la RAM y se bloquee si esto estรก activado">wasm',
-
- "cft_text": "texto del favicon (dejar en blanco y refrescar para desactivar)",
- "cft_fg": "color de primer plano",
- "cft_bg": "color de fondo",
-
- "cdt_lim": "nรบmero mรกximo de archivos a mostrar en una carpeta",
- "cdt_ask": "al llegar al final,$Nen lugar de cargar mรกs archivos,$Npreguntar quรฉ hacer",
- "cdt_hsort": "cuรกntas reglas de ordenaciรณn (<code>,sorthref</code>) incluir en las URLs de medios. Ponerlo a 0 tambiรฉn ignorarรก las reglas de ordenaciรณn incluidas en los enlaces de medios al hacer clic en ellos",
-
- "tt_entree": "mostrar panel de navegaciรณn (barra lateral con รกrbol de directorios)$NAtajo: B",
- "tt_detree": "mostrar breadcrumbs$NAtajo: B",
- "tt_visdir": "desplazarse a la carpeta seleccionada",
- "tt_ftree": "alternar รกrbol de carpetas / archivos de texto$NAtajo: V",
- "tt_pdock": "mostrar carpetas de niveles superiores en un panel acoplado en la parte superior",
- "tt_dynt": "crecimiento automรกtico a medida que el รกrbol se expande",
- "tt_wrap": "ajuste de lรญnea",
- "tt_hover": "revelar lรญneas que se desbordan al pasar el ratรณn$N( rompe el desplazamiento a menos que el $N cursor estรฉ en el margen izquierdo )",
-
- "ml_pmode": "al final de la carpeta...",
- "ml_btns": "acciones",
- "ml_tcode": "transcodificar",
- "ml_tcode2": "transcodificar a",
- "ml_tint": "tinte",
- "ml_eq": "ecualizador de audio",
- "ml_drc": "compresor de rango dinรกmico",
-
- "mt_loop": 'poner en bucle/repetir una canciรณn">๐',
- "mt_one": 'parar despuรฉs de una canciรณn">1๏ธโฃ',
- "mt_shuf": 'reproducir aleatoriamente las canciones en cada carpeta">๐',
- "mt_aplay": 'reproducir automaticamente si hay un ID de canciรณn en el enlace en el que hiciste clic para acceder al servidor$N$Ndesactivar esto tambiรฉn evitarรก que la URL de la pรกgina se actualice con IDs de canciรณn al reproducir mรบsica, para prevenir la reproducciรณn automรกtica si se pierden estos ajustes pero la URL permanece">aโถ',
- "mt_preload": 'empezar a cargar la siguiente canciรณn cerca del final para una reproducciรณn sin pausas">precarga',
- "mt_prescan": 'ir a la siguiente carpeta antes de que la รบltima canciรณn$Ntermine, manteniendo contento al navegador$Npara que no detenga la reproducciรณn">nav',
- "mt_fullpre": 'intentar precargar la canciรณn entera;$Nโ
activar en conexiones inestables,$Nโ desactivar probablemente en conexiones lentas">completa',
- "mt_fau": 'en telรฉfonos, evitar que la mรบsica se detenga si la siguiente canciรณn no se precarga lo suficientemente rรกpido (puede causar fallos en la visualizaciรณn de etiquetas)">โ๏ธ',
- "mt_waves": 'barra de bรบsqueda con forma de onda:$Nmostrar la amplitud del audio en la barra de progreso">~s',
- "mt_npclip": 'mostrar botones para copiar al portapapeles la canciรณn actual">/np',
- "mt_m3u_c": 'mostrar botones para copiar al portapapeles las$Ncanciones seleccionadas como entradas de lista m3u8">๐ป',
- "mt_octl": 'integraciรณn con SO (teclas multimedia / OSD)">ctl-so',
- "mt_oseek": 'permitir buscar a travรฉs de la integraciรณn con el SO$N$Nnota: en algunos dispositivos (iPhones),$Nesto reemplaza el botรณn de siguiente canciรณn">bรบsqueda',
- "mt_oscv": 'mostrar carรกtula del รกlbum en OSD">arte',
- "mt_follow": 'mantener la pista en reproducciรณn visible en pantalla">๐ฏ',
- "mt_compact": 'controles compactos">โ',
- "mt_uncache": 'limpiar cachรฉ (prueba esto si tu navegador guardรณ en cachรฉ$Nuna copia rota de una canciรณn que se niega a reproducir)">limpiar cachรฉ',
- "mt_mloop": 'repetir la carpeta actual">๐ bucle',
- "mt_mnext": 'cargar la siguiente carpeta y continuar">๐ sig',
- "mt_mstop": 'detener reproducciรณn">โธ parar',
- "mt_cflac": 'convertir flac / wav a {0}">flac',
- "mt_caac": 'convertir aac / m4a a {0}">aac',
- "mt_coth": 'convertir todos los demรกs (no mp3) a {0}">oth',
- "mt_c2opus": 'la mejor opciรณn para ordenadores, portรกtiles, android">opus',
- "mt_c2owa": 'opus-weba, para iOS 17.5 y superior">owa',
- "mt_c2caf": 'opus-caf, para iOS 11 a 17">caf',
- "mt_c2mp3": 'usar en dispositivos muy antiguos">mp3',
- "mt_c2flac": "la mejor calidad de sonido,$Npero descargas muy grandes\">flac", //m
- "mt_c2wav": "reproducciรณn sin comprimir (aรบn mรกs grande)\">wav", //m
- "mt_c2ok": "bien, buena elecciรณn",
- "mt_c2nd": "ese no es el formato de salida recomendado para tu dispositivo, pero estรก bien",
- "mt_c2ng": "tu dispositivo no parece soportar este formato de salida, pero intentรฉmoslo de todas formas",
- "mt_xowa": "hay errores en iOS que impiden la reproducciรณn en segundo plano con este formato; por favor, usa caf o mp3 en su lugar",
- "mt_tint": "nivel de fondo (0-100) en la barra de bรบsqueda$Npara hacer el buffering menos molesto",
- "mt_eq": "activa el ecualizador y el control de ganancia;$N$Nganancia <code>0</code> = volumen estรกndar 100% (sin modificar)$N$Nancho <code>1 </code> = estรฉreo estรกndar (sin modificar)$Nancho <code>0.5</code> = 50% de crossfeed izq-der$Nancho <code>0 </code> = mono$N$Nganancia <code>-0.8</code> y ancho <code>10</code> = eliminaciรณn de voz :^)$N$Nactivar el ecualizador hace que los รกlbumes sin pausas sean completamente sin pausas, asรญ que dรฉjalo activado con todos los valores a cero (excepto ancho = 1) si eso te importa",
- "mt_drc": "activa el compresor de rango dinรกmico (aplanador de volumen / brickwaller); tambiรฉn activarรก el EQ para equilibrar el espagueti, asรญ que pon todos los campos de EQ excepto 'ancho' a 0 si no lo quieres$N$Nbaja el volumen del audio por encima de THRESHOLD dB; por cada RATIO dB pasado THRESHOLD hay 1 dB de salida, asรญ que los valores por defecto de umbral -24 y ratio 12 significan que nunca deberรญa sonar mรกs fuerte de -22 dB y es seguro aumentar la ganancia del ecualizador a 0.8, o incluso 1.8 con ATK 0 y un RLS enorme como 90 (solo funciona en firefox; RLS es mรกx. 1 en otros navegadores)$N$N(ver wikipedia, lo explican mucho mejor)",
-
- "mb_play": "reproducir",
- "mm_hashplay": "ยฟreproducir este archivo de audio?",
- "mm_m3u": "pulsa Intro/Aceptar para Reproducir\npulsa ESC/Cancelar para Editar",
- "mp_breq": "se necesita firefox 82+ o chrome 73+ o iOS 15+",
- "mm_bload": "cargando...",
- "mm_bconv": "convirtiendo a {0}, por favor espera...",
- "mm_opusen": "tu navegador no puede reproducir archivos aac / m4a;\nse ha activado la transcodificaciรณn a opus",
- "mm_playerr": "fallo de reproducciรณn: ",
- "mm_eabrt": "El intento de reproducciรณn fue cancelado",
- "mm_enet": "Tu conexiรณn a internet es inestable",
- "mm_edec": "ยฟEste archivo estรก supuestamente corrupto?",
- "mm_esupp": "Tu navegador no entiende este formato de audio",
- "mm_eunk": "Error desconocido",
- "mm_e404": "No se pudo reproducir el audio; error 404: Archivo no encontrado.",
- "mm_e403": "No se pudo reproducir el audio; error 403: Acceso denegado.\n\nIntenta pulsar F5 para recargar, quizรกs se cerrรณ tu sesiรณn",
- "mm_e500": "No se pudo reproducir el audio; error 500: Revisa los registros del servidor.",
- "mm_e5xx": "No se pudo reproducir el audio; error del servidor ",
- "mm_nof": "no se encuentran mรกs archivos de audio cerca",
- "mm_prescan": "Buscando mรบsica para reproducir a continuaciรณn...",
- "mm_scank": "Encontrada la siguiente canciรณn:",
- "mm_uncache": "cachรฉ limpiada; todas las canciones se volverรกn a descargar en la prรณxima reproducciรณn",
- "mm_hnf": "esa canciรณn ya no existe",
-
- "im_hnf": "esa imagen ya no existe",
-
- "f_empty": "esta carpeta estรก vacรญa",
- "f_chide": "esto ocultarรก la columna ยซ{0}ยป\n\npuedes volver a mostrar las columnas en la pestaรฑa de configuraciรณn",
- "f_bigtxt": "este archivo pesa {0} MiB -- ยฟrealmente verlo como texto?",
- "f_bigtxt2": "ยฟver solo el final del archivo en su lugar? esto tambiรฉn activarรก el seguimiento, mostrando las lรญneas de texto reciรฉn aรฑadidas en tiempo real",
- "fbd_more": '',
- "fbd_all": '',
- "f_anota": "solo {0} de los {1} elementos fueron seleccionados;\npara seleccionar la carpeta completa, primero desplรกzate hasta el final",
-
- "f_dls": "los enlaces a archivos en la carpeta actual se han\nconvertido en enlaces de descarga",
-
- "f_partial": "Para descargar de forma segura un archivo que se estรก subiendo actualmente, por favor haz clic en el archivo con el mismo nombre, pero sin la extensiรณn .PARTIAL. Por favor, pulsa CANCELAR o Escape para hacer esto.\n\nPulsar ACEPTAR o Intro ignorarรก esta advertencia y continuarรก descargando el archivo temporal .PARTIAL, lo que casi con toda seguridad te darรก datos corruptos.",
-
- "ft_paste": "pegar {0} elementos$NAtajo: ctrl-V",
- "fr_eperm": "no se puede renombrar:\nno tienes permiso de โmoverโ en esta carpeta",
- "fd_eperm": "no se puede eliminar:\nno tienes permiso de โeliminarโ en esta carpeta",
- "fc_eperm": "no se puede cortar:\nno tienes permiso de โmoverโ en esta carpeta",
- "fp_eperm": "no se puede pegar:\nno tienes permiso de โescribirโ en esta carpeta",
- "fr_emore": "selecciona al menos un elemento para renombrar",
- "fd_emore": "selecciona al menos un elemento para eliminar",
- "fc_emore": "selecciona al menos un elemento para cortar",
- "fcp_emore": "selecciona al menos un elemento para copiar al portapapeles",
-
- "fs_sc": "compartir la carpeta en la que estรกs",
- "fs_ss": "compartir los archivos seleccionados",
- "fs_just1d": "no puedes seleccionar mรกs de una carpeta,\no mezclar archivos y carpetas en una selecciรณn",
- "fs_abrt": "โ abortar",
- "fs_rand": "๐ฒ nombre aleatorio",
- "fs_go": "โ
crear enlace",
- "fs_name": "nombre",
- "fs_src": "origen",
- "fs_pwd": "contraseรฑa",
- "fs_exp": "caducidad",
- "fs_tmin": "minutos",
- "fs_thrs": "horas",
- "fs_tdays": "dรญas",
- "fs_never": "eterno",
- "fs_pname": "nombre opcional del enlace; serรก aleatorio si se deja en blanco",
- "fs_tsrc": "el archivo o carpeta a compartir",
- "fs_ppwd": "contraseรฑa opcional",
- "fs_w8": "creando enlace...",
- "fs_ok": "pulsa Intro/Aceptar para Copiar al Portapapeles\npulsa ESC/Cancelar para Cerrar",
-
- "frt_dec": "puede arreglar algunos casos de nombres de archivo rotos\">url-decode",
- "frt_rst": "restaurar los nombres de archivo modificados a los originales\">โบ restablecer",
- "frt_abrt": "abortar y cerrar esta ventana\">โ cancelar",
- "frb_apply": "APLICAR RENOMBRADO",
- "fr_adv": "renombrado por lotes / metadatos / patrones\">avanzado",
- "fr_case": "regex sensible a mayรบsculas\">mayรบs",
- "fr_win": "nombres seguros para windows; reemplaza <>:"\\|?* con caracteres japoneses de ancho completo\">win",
- "fr_slash": "reemplaza / con un carรกcter que no cree nuevas carpetas\">sin /",
- "fr_re": "patrรณn de bรบsqueda regex para aplicar a los nombres de archivo originales; los grupos de captura se pueden referenciar en el campo de formato de abajo como <code>(1)</code> y <code>(2)</code> y asรญ sucesivamente",
- "fr_fmt": "inspirado en foobar2000:$N<code>(title)</code> se reemplaza por el tรญtulo de la canciรณn,$N<code>[(artist) - ](title)</code> omite la parte [entre corchetes] si el artista estรก en blanco$N<code>$lpad((tn),2,0)</code> rellena el nรบmero de pista a 2 dรญgitos",
- "fr_pdel": "eliminar",
- "fr_pnew": "guardar como",
- "fr_pname": "proporciona un nombre para tu nuevo preajuste",
- "fr_aborted": "abortado",
- "fr_lold": "nombre antiguo",
- "fr_lnew": "nombre nuevo",
- "fr_tags": "etiquetas para los archivos seleccionados (solo lectura, como referencia):",
- "fr_busy": "renombrando {0} elementos...\n\n{1}",
- "fr_efail": "fallo al renombrar:\n",
- "fr_nchg": "{0} de los nuevos nombres fueron alterados debido a win y/o sin /\n\nยฟAceptar para continuar con estos nuevos nombres alterados?",
-
- "fd_ok": "eliminaciรณn correcta",
- "fd_err": "fallo al eliminar:\n",
- "fd_none": "no se eliminรณ nada; quizรกs bloqueado por la configuraciรณn del servidor (xbd)?",
- "fd_busy": "eliminando {0} elementos...\n\n{1}",
- "fd_warn1": "ยฟELIMINAR estos {0} elementos?",
- "fd_warn2": "ยกรltima oportunidad! No se puede deshacer. ยฟEliminar?",
-
- "fc_ok": "cortados {0} elementos",
- "fc_warn": "cortados {0} elementos\n\npero: solo esta pestaรฑa del navegador puede pegarlos\n(dado que la selecciรณn es absolutamente masiva)",
-
- "fcc_ok": "copiados {0} elementos al portapapeles",
- "fcc_warn": "copiados {0} elementos al portapapeles\n\npero: solo esta pestaรฑa del navegador puede pegarlos\n(dado que la selecciรณn es absolutamente masiva)",
-
- "fp_apply": "usar estos nombres",
- "fp_ecut": "primero corta o copia algunos archivos / carpetas para pegar / mover\n\nnota: puedes cortar / pegar entre diferentes pestaรฑas del navegador",
- "fp_ename": "{0} elementos no se pueden mover aquรญ porque los nombres ya existen. Dales nuevos nombres abajo para continuar, o deja el nombre en blanco para omitirlos:",
- "fcp_ename": "{0} elementos no se pueden copiar aquรญ porque los nombres ya existen. Dales nuevos nombres abajo para continuar, o deja el nombre en blanco para omitirlos:",
- "fp_emore": "todavรญa quedan algunas colisiones de nombres por resolver",
- "fp_ok": "movimiento correcto",
- "fcp_ok": "copia correcta",
- "fp_busy": "moviendo {0} elementos...\n\n{1}",
- "fcp_busy": "copiando {0} elementos...\n\n{1}",
- "fp_abrt": "cancelando...", //m
- "fp_err": "fallo al mover:\n",
- "fcp_err": "fallo al copiar:\n",
- "fp_confirm": "ยฟmover estos {0} elementos aquรญ?",
- "fcp_confirm": "ยฟcopiar estos {0} elementos aquรญ?",
- "fp_etab": "fallo al leer el portapapeles de otra pestaรฑa del navegador",
- "fp_name": "subiendo un archivo desde tu dispositivo. Dale un nombre:",
- "fp_both_m": "elige quรฉ pegar
Intro = Mover {0} archivos desde ยซ{1}ยป\nESC = Subir {2} archivos desde tu dispositivo",
- "fcp_both_m": "elige quรฉ pegar
Intro = Copiar {0} archivos desde ยซ{1}ยป\nESC = Subir {2} archivos desde tu dispositivo",
- "fp_both_b": "MoverSubir",
- "fcp_both_b": "CopiarSubir",
-
- "mk_noname": "escribe un nombre en el campo de texto de la izquierda antes de hacer eso :p",
-
- "tv_load": "Cargando documento de texto:\n\n{0}\n\n{1}% ({2} de {3} MiB cargados)",
- "tv_xe1": "no se pudo cargar el archivo de texto:\n\nerror ",
- "tv_xe2": "404, archivo no encontrado",
- "tv_lst": "lista de archivos de texto en",
- "tvt_close": "volver a la vista de carpetas$NAtajo: M (o Esc)\">โ cerrar",
- "tvt_dl": "descargar este archivo$NAtajo: Y\">๐พ descargar",
- "tvt_prev": "mostrar documento anterior$NAtajo: i\">โฌ ant",
- "tvt_next": "mostrar siguiente documento$NAtajo: K\">โฌ sig",
- "tvt_sel": "seleccionar archivo ( para cortar / copiar / eliminar / ... )$NAtajo: S\">sel",
- "tvt_edit": "abrir archivo en editor de texto$NAtajo: E\">โ๏ธ editar",
- "tvt_tail": "monitorizar cambios en el archivo; mostrar nuevas lรญneas en tiempo real\">๐ก seguir",
- "tvt_wrap": "ajuste de lรญnea\">โต",
- "tvt_atail": "bloquear el desplazamiento al final de la pรกgina\">โ",
- "tvt_ctail": "decodificar colores de terminal (cรณdigos de escape ansi)\">๐",
- "tvt_ntail": "lรญmite de historial (cuรกntos bytes de texto mantener cargados)",
-
- "m3u_add1": "canciรณn aรฑadida a la lista m3u",
- "m3u_addn": "{0} canciones aรฑadidas a la lista m3u",
- "m3u_clip": "lista m3u copiada al portapapeles\n\ndebes crear un nuevo archivo de texto llamado algo.m3u y pegar la lista en ese documento; esto lo harรก reproducible",
-
- "gt_vau": "no mostrar vรญdeos, solo reproducir el audio\">๐ง",
- "gt_msel": "activar selecciรณn de archivos; ctrl-clic en un archivo para anular$N$N<em>cuando estรก activo: doble clic en un archivo / carpeta para abrirlo</em>$N$NAtajo: S\">multiselecciรณn",
- "gt_crop": "recortar miniaturas\">recortar",
- "gt_3x": "miniaturas de alta resoluciรณn\">3x",
- "gt_zoom": "zoom",
- "gt_chop": "recortar",
- "gt_sort": "ordenar por",
- "gt_name": "nombre",
- "gt_sz": "tamaรฑo",
- "gt_ts": "fecha",
- "gt_ext": "tipo",
- "gt_c1": "truncar mรกs los nombres de archivo (mostrar menos)",
- "gt_c2": "truncar menos los nombres de archivo (mostrar mรกs)",
-
- "sm_w8": "buscando...",
- "sm_prev": "los resultados de bรบsqueda a continuaciรณn son de una consulta anterior:\n ",
- "sl_close": "cerrar resultados de bรบsqueda",
- "sl_hits": "mostrando {0} resultados",
- "sl_moar": "cargar mรกs",
-
- "s_sz": "tamaรฑo",
- "s_dt": "fecha",
- "s_rd": "ruta",
- "s_fn": "nombre",
- "s_ta": "etiquetas",
- "s_ua": "subido@",
- "s_ad": "avanzado",
- "s_s1": "MiB mรญnimo",
- "s_s2": "MiB mรกximo",
- "s_d1": "mรญn. iso8601",
- "s_d2": "mรกx. iso8601",
- "s_u1": "subido despuรฉs de",
- "s_u2": "y/o antes de",
- "s_r1": "la ruta contiene (separado por espacios)",
- "s_f1": "el nombre contiene (negar con -no)",
- "s_t1": "las etiquetas contienen (^=inicio, fin=$)",
- "s_a1": "propiedades de metadatos especรญficas",
-
- "md_eshow": "no se puede renderizar ",
- "md_off": "[๐lรฉeme] desactivado en [โ๏ธ] -- documento oculto",
-
- "badreply": "Fallo al procesar la respuesta del servidor",
-
- "xhr403": "403: Acceso denegado\n\nintenta pulsar F5, quizรกs se cerrรณ tu sesiรณn",
- "xhr0": "desconocido (probablemente se perdiรณ la conexiรณn con el servidor, o el servidor estรก desconectado)",
- "cf_ok": "perdรณn por eso -- la protecciรณn DD" + wah + "oS se activรณ\n\nlas cosas deberรญan reanudarse en unos 30 segundos\n\nsi no pasa nada, pulsa F5 para recargar la pรกgina",
- "tl_xe1": "no se pudieron listar las subcarpetas:\n\nerror ",
- "tl_xe2": "404: Carpeta no encontrada",
- "fl_xe1": "no se pudieron listar los archivos en la carpeta:\n\nerror ",
- "fl_xe2": "404: Carpeta no encontrada",
- "fd_xe1": "no se pudo crear la subcarpeta:\n\nerror ",
- "fd_xe2": "404: Carpeta de nivel superior no encontrada",
- "fsm_xe1": "no se pudo enviar el mensaje:\n\nerror ",
- "fsm_xe2": "404: Carpeta de nivel superior no encontrada",
- "fu_xe1": "fallo al cargar la lista de deshacer del servidor:\n\nerror ",
- "fu_xe2": "404: ยฟArchivo no encontrado?",
-
- "fz_tar": "archivo gnu-tar sin comprimir (linux / mac)",
- "fz_pax": "tar formato pax sin comprimir (mรกs lento)",
- "fz_targz": "gnu-tar con compresiรณn gzip nivel 3$N$Nesto suele ser muy lento, asรญ que$Nusa tar sin comprimir en su lugar",
- "fz_tarxz": "gnu-tar con compresiรณn xz nivel 1$N$Nesto suele ser muy lento, asรญ que$Nusa tar sin comprimir en su lugar",
- "fz_zip8": "zip con nombres de archivo utf8 (puede dar problemas en windows 7 y anteriores)",
- "fz_zipd": "zip con nombres de archivo cp437 tradicionales, para software muy antiguo",
- "fz_zipc": "cp437 con crc32 calculado tempranamente,$Npara MS-DOS PKZIP v2.04g (octubre 1993)$N(tarda mรกs en procesar antes de que la descarga pueda empezar)",
-
- "un_m1": "puedes eliminar tus subidas recientes (o abortar las inacabadas) a continuaciรณn",
- "un_upd": "actualizar",
- "un_m4": "o compartir los archivos visibles a continuaciรณn:",
- "un_ulist": "mostrar",
- "un_ucopy": "copiar",
- "un_flt": "filtro opcional: la URL debe contener",
- "un_fclr": "limpiar filtro",
- "un_derr": "fallo al deshacer-eliminar:\n",
- "un_f5": "algo se rompiรณ, por favor intenta actualizar o pulsa F5",
- "un_uf5": "lo siento pero tienes que refrescar la pรกgina (por ejemplo pulsando F5 o CTRL-R) antes de que esta subida pueda ser abortada",
- "un_nou": "aviso: servidor demasiado ocupado para mostrar subidas inacabadas; haz clic en el enlace \"actualizar\" en un momento",
- "un_noc": "aviso: la opciรณn de deshacer subidas completadas no estรก activada/permitida en la configuraciรณn del servidor",
- "un_max": "mostrando los primeros 2000 archivos (usa el filtro)",
- "un_avail": "{0} subidas recientes se pueden eliminar
{1} inacabadas se pueden abortar",
- "un_m2": "ordenado por tiempo de subida; mรกs recientes primero:",
- "un_no1": "ยกpues no! ninguna subida es suficientemente reciente",
- "un_no2": "ยกpues no! ninguna subida que coincida con ese filtro es suficientemente reciente",
- "un_next": "eliminar los siguientes {0} archivos a continuaciรณn",
- "un_abrt": "abortar",
- "un_del": "eliminar",
- "un_m3": "cargando tus subidas recientes...",
- "un_busy": "eliminando {0} archivos...",
- "un_clip": "{0} enlaces copiados al portapapeles",
-
- "u_https1": "deberรญas",
- "u_https2": "cambiar a https",
- "u_https3": "para un mejor rendimiento",
- "u_ancient": "tu navegador es impresionantemente antiguo -- quizรกs deberรญas usar bup en su lugar",
- "u_nowork": "se necesita firefox 53+ o chrome 57+ o iOS 11+",
- "tail_2old": "se necesita firefox 105+ o chrome 71+ o iOS 14.5+",
- "u_nodrop": "tu navegador es demasiado antiguo para subir arrastrando y soltando",
- "u_notdir": "ยกeso no es una carpeta!\n\ntu navegador es demasiado antiguo,\npor favor intenta arrastrar y soltar en su lugar",
- "u_uri": "para arrastrar y soltar imรกgenes desde otras ventanas del navegador,\npor favor suรฉltalas sobre el gran botรณn de subida",
- "u_enpot": "cambiar a UI ligera (puede mejorar la velocidad de subida)",
- "u_depot": "cambiar a UI elegante (puede reducir la velocidad de subida)",
- "u_gotpot": "cambiando a la UI ligera para mejorar la velocidad de subida,\n\nยกsiรฉntete libre de no estar de acuerdo y volver a cambiar!",
- "u_pott": "archivos: {0} finalizados, {1} fallidos, {2} ocupados, {3} en cola
",
- "u_ever": "este es el uploader bรกsico; up2k necesita al menos
chrome 21 // firefox 13 // edge 12 // opera 12 // safari 5.1",
- "u_su2k": "este es el uploader bรกsico; up2k es mejor",
- "u_uput": "optimizar para velocidad (omitir checksum)",
- "u_ewrite": "no tienes acceso de escritura a esta carpeta",
- "u_eread": "no tienes acceso de lectura a esta carpeta",
- "u_enoi": "la bรบsqueda de archivos no estรก activada en la configuraciรณn del servidor",
- "u_enoow": "sobrescribir no funcionarรก aquรญ; se necesita permiso de eliminaciรณn",
- "u_badf": "Estos {0} archivos (de un total de {1}) se omitieron, posiblemente debido a permisos del sistema de archivos:\n\n",
- "u_blankf": "Estos {0} archivos (de un total de {1}) estรกn en blanco / vacรญos; ยฟsubirlos de todos modos?\n\n",
- "u_applef": "Estos {0} archivos (de un total de {1}) probablemente no son deseables;\nPulsa Aceptar/Intro para OMITIR los siguientes archivos,\nPulsa Cancelar/ESC para NO excluir, y SUBIR esos tambiรฉn:\n\n",
- "u_just1": "\nQuizรกs funcione mejor si seleccionas solo un archivo",
- "u_ff_many": "si usas Linux / MacOS / Android, esta cantidad de archivos podrรญa bloquear Firefox!\nsi eso ocurre, por favor intรฉntalo de nuevo (o usa Chrome).",
- "u_up_life": "Esta subida serรก eliminada del servidor\n{0} despuรฉs de que se complete",
- "u_asku": "subir estos {0} archivos a {1}",
- "u_unpt": "puedes deshacer / eliminar esta subida usando el ๐งฏ de arriba a la izquierda",
- "u_bigtab": "a punto de mostrar {0} archivos\n\nesto podrรญa bloquear tu navegador, ยฟestรกs seguro?",
- "u_scan": "Escaneando archivos...",
- "u_dirstuck": "el iterador de directorios se atascรณ intentando acceder a los siguientes {0} elementos; se omitirรกn:",
- "u_etadone": "Hecho ({0}, {1} archivos)",
- "u_etaprep": "(preparando para subir)",
- "u_hashdone": "hashing completado",
- "u_hashing": "hash",
- "u_hs": "negociando...",
- "u_started": "los archivos se estรกn subiendo ahora; mira en [๐]",
- "u_dupdefer": "duplicado; se procesarรก despuรฉs de todos los demรกs archivos",
- "u_actx": "haz clic en este texto para evitar la pรฉrdida de
rendimiento al cambiar a otras ventanas/pestaรฑas",
- "u_fixed": "ยกOK! Arreglado ๐",
- "u_cuerr": "fallo al subir el trozo {0} de {1};\nprobablemente inofensivo, continuando\n\narchivo: {2}",
- "u_cuerr2": "el servidor rechazรณ la subida (trozo {0} de {1});\nse reintentarรก mรกs tarde\n\narchivo: {2}\n\nerror ",
- "u_ehstmp": "se reintentarรก; mira abajo a la derecha",
- "u_ehsfin": "el servidor rechazรณ la solicitud para finalizar la subida; reintentando...",
- "u_ehssrch": "el servidor rechazรณ la solicitud para realizar la bรบsqueda; reintentando...",
- "u_ehsinit": "el servidor rechazรณ la solicitud para iniciar la subida; reintentando...",
- "u_eneths": "error de red al realizar la negociaciรณn de subida; reintentando...",
- "u_enethd": "error de red al comprobar la existencia del destino; reintentando...",
- "u_cbusy": "esperando a que el servidor vuelva a confiar en nosotros despuรฉs de un fallo de red...",
- "u_ehsdf": "ยกel servidor se quedรณ sin espacio en disco!\n\nse seguirรก reintentando, por si alguien\nlibera suficiente espacio para continuar",
- "u_emtleak1": "parece que tu navegador podrรญa tener una fuga de memoria;\npor favor",
- "u_emtleak2": " cambia a https (recomendado) o ",
- "u_emtleak3": " ",
- "u_emtleakc": "prueba lo siguiente:\n- pulsa
F5 para refrescar la pรกgina - luego desactiva el botรณn
mt en los โ๏ธ ajustes - e intenta esa subida de nuevo
Las subidas serรกn un poco mรกs lentas, pero bueno.\nยกPerdรณn por las molestias!\n\nPD: chrome v107 tiene una soluciรณn para esto",
- "u_emtleakf": "prueba lo siguiente:\n- pulsa
F5 para refrescar la pรกgina - luego activa
๐ฅ (ligera) en la interfaz de subida - e intenta esa subida de nuevo
\nPD: firefox con suerte tendrรก una soluciรณn en algรบn momento",
- "u_s404": "no encontrado en el servidor",
- "u_expl": "explicar",
- "u_maxconn": "la mayorรญa de los navegadores limitan esto a 6, pero firefox te permite aumentarlo con connections-per-server en about:config",
- "u_tu": 'AVISO: turbo activado, el cliente puede no detectar y reanudar subidas incompletas; ver tooltip del botรณn turbo
',
- "u_ts": 'AVISO: turbo activado, los resultados de bรบsqueda pueden ser incorrectos; ver tooltip del botรณn turbo
',
- "u_turbo_c": "turbo estรก desactivado en la configuraciรณn del servidor",
- "u_turbo_g": "desactivando turbo porque no tienes\nprivilegios para listar directorios en este volumen",
- "u_life_cfg": 'autoeliminar despuรฉs de min (o horas)',
- "u_life_est": 'la subida se eliminarรก ---',
- "u_life_max": "esta carpeta impone una\nvida mรกxima de {0}",
- "u_unp_ok": "se permite deshacer la subida durante {0}",
- "u_unp_ng": "NO se permitirรก deshacer la subida",
- "ue_ro": "tu acceso a esta carpeta es de solo lectura\n\n",
- "ue_nl": "actualmente no has iniciado sesiรณn",
- "ue_la": "actualmente has iniciado sesiรณn como \"{0}\"",
- "ue_sr": "actualmente estรกs en modo de bรบsqueda de archivos\n\ncambia a modo de subida haciendo clic en la lupa ๐ (junto al gran botรณn BUSCAR), e intenta subir de nuevo\n\nlo siento",
- "ue_ta": "intenta subir de nuevo, ahora deberรญa funcionar",
- "ue_ab": "este archivo ya se estรก subiendo a otra carpeta, y esa subida debe completarse antes de que el archivo pueda ser subido a otro lugar.\n\nPuedes abortar y olvidar la subida inicial usando el ๐งฏ de arriba a la izquierda",
- "ur_1uo": "OK: Archivo subido con รฉxito",
- "ur_auo": "OK: Todos los {0} archivos subidos con รฉxito",
- "ur_1so": "OK: Archivo encontrado en el servidor",
- "ur_aso": "OK: Todos los {0} archivos encontrados en el servidor",
- "ur_1un": "Subida fallida, lo siento",
- "ur_aun": "Todas las {0} subidas fallaron, lo siento",
- "ur_1sn": "El archivo NO se encontrรณ en el servidor",
- "ur_asn": "Los {0} archivos NO se encontraron en el servidor",
- "ur_um": "Finalizado;\n{0} subidas OK,\n{1} subidas fallidas, lo siento",
- "ur_sm": "Finalizado;\n{0} archivos encontrados en el servidor,\n{1} archivos NO encontrados en el servidor",
-
- "lang_set": "ยฟrefrescar para que el cambio surta efecto?"
- },
- "swe": {
- "tt": "Svenska",
-
- "cols": {
- "c": "aktion",
- "dur": "lรคngd",
- "q": "kvalitet / bitrate",
- "Ac": "ljudkodek",
- "Vc": "videokodek",
- "Fmt": "format / container",
- "Ahash": "ljudchecksumma",
- "Vhash": "videochecksumma",
- "Res": "upplรถsning",
- "T": "filtyp",
- "aq": "ljudkvalitet / bitrate",
- "vq": "videokvalitet / bitrate",
- "pixfmt": "subsampling / pixelstruktur",
- "resw": "horisontell upplรถsning",
- "resh": "vertikal upplรถsning",
- "chs": "antal ljudkanaler",
- "hz": "samplingsfrekvens"
- },
-
- "hks": [
- [
- "รถvrigt",
- ["ESC", "stรคng diverse paneler"],
-
- "filhanterare",
- ["G", "vรคxla mellan listvy / rutnรคt"],
- ["T", "vรคxla mellan miniatyrer / ikoner"],
- ["โง A/D", "miniatyrstorlek"],
- ["ctrl-K", "radera urval"],
- ["ctrl-X", "klipp urval till urklipp"],
- ["ctrl-C", "kopiera urval till urklipp"],
- ["ctrl-V", "klistra in (kopiera/flytta) hit"],
- ["Y", "ladda ner urval"],
- ["F2", "byt namn pรฅ urval"],
-
- "vรคlja filer",
- ["Blanksteg", "vรคxla val av fil"],
- ["โ/โ", "flytta filvalsmarkรถr"],
- ["ctrl โ/โ", "flytta markรถr och vy"],
- ["โง โ/โ", "vรคlj fรถregรฅende/nรคsta fil"],
- ["ctrl-A", "vรคlj alla filer / mappar"],
- ], [
- "navigation",
- ["B", "vรคxla mellan brรถdsmulor / trรคdvy"],
- ["I/K", "fรถregรฅende/nรคsta mapp"],
- ["M", "hoppa till รถverordnad mapp (eller kollapsa nรคrvarande)"],
- ["V", "vรคxla mellan mappar / textfiler i trรคdvy"],
- ["A/D", "trรคdvystorlek"],
- ], [
- "ljudspelare",
- ["J/L", "fรถregรฅende/nรคsta lรฅt"],
- ["U/O", "hoppa 10sek bakรฅt/framรฅt"],
- ["0..9", "hoppa till 0%..90%"],
- ["P", "play/paus (startar รคven uppspelning)"],
- ["S", "vรคlj lรฅten som spelas"],
- ["Y", "ladda ner lรฅt"],
- ], [
- "bildvisare",
- ["J/L, โ/โ", "fรถregรฅende/nรคsta bild"],
- ["Hem/End", "fรถrsta/sista bilden"],
- ["F", "helskรคrm"],
- ["R", "rotera medsols"],
- ["โง R", "rotera motsols"],
- ["S", "vรคlj bild"],
- ["Y", "ladda ner bild"],
- ], [
- "videospelare",
- ["U/O", "hoppa 10sek bakรฅt/framรฅt"],
- ["P/K/Blanksteg", "play/paus"],
- ["C", "fortsรคtt med nรคsta"],
- ["V", "loopa"],
- ["M", "stรคng av ljud"],
- ["[ och ]", "stรคll in loopintervall"],
- ], [
- "textfilsvisare",
- ["I/K", "fรถregรฅende/nรคsta fil"],
- ["M", "stรคng textfil"],
- ["E", "redigera textfil"],
- ["S", "vรคlj fil"],
- ]
- ],
-
- "m_ok": "OK",
- "m_ng": "Avbryt",
-
- "enable": "Aktivera",
- "danger": "VARNING",
- "clipped": "kopierat till urklipp",
-
- "ht_s1": "sekund",
- "ht_s2": "sekunder",
- "ht_m1": "minut",
- "ht_m2": "minuter",
- "ht_h1": "timme",
- "ht_h2": "timmar",
- "ht_d1": "dag",
- "ht_d2": "dagar",
- "ht_and": " och ",
-
- "goh": "kontrollpanel",
- "gop": 'fรถregรฅende mapp">fรถreg.',
- "gou": 'รถverordnad mapp">upp',
- "gon": 'nรคsta mapp">nรคsta',
- "logout": "Logga ut ",
- "login": "Logga in", //m
- "access": "-rรคttighet",
- "ot_close": "stรคng undermeny",
- "ot_search": "sรถk efter filer via attribut, sรถkvรคg / namn, musiktaggar, eller nรฅgon kombination av dessa$N$N<code>foo bar</code> = mรฅste innehรฅlla bรฅde ยซfooยป och ยซbarยป,$N<code>foo -bar</code> = mรฅste innehรฅlla ยซfooยป men inte ยซbarยป,$N<code>^yana .opus$</code> = mรฅste bรถrja med ยซyanaยป och vara en ยซopusยป-fil$N<code>"try unite"</code> = mรฅste innehรฅlla exakt ยซtry uniteยป$N$Ndatumformatet รคr iso-8601, t.ex.$N<code>2009-12-31</code> eller <code>2020-09-12 23:30:00</code>",
- "ot_unpost": "unpost: radera dina senaste uppladdningar, eller avbryt pรฅgรฅende sรฅdana",
- "ot_bup": "bup: enkel uppladdare, stรถdjer t o m netscape 4.0",
- "ot_mkdir": "mkdir: skapa en ny mapp",
- "ot_md": "new-md: skapa ett nytt markdown-dokument",
- "ot_msg": "msg: skicka ett meddelande till serverloggen",
- "ot_mp": "mediaspelarinstรคllningar",
- "ot_cfg": "konfigurationsinstรคllningar",
- "ot_u2i": 'up2k: ladda upp filer (om du har skrivrรคttigheter) eller byt till sรถklรคge fรถr att se om de finns nรฅgonstans pรฅ servern$N$Nuppladdningarna รคr รฅterupptagbara, multitrรฅdade och filernas tidsstรคmpel bevaras, men den anvรคnder mer CPU รคn [๐] (den enkla uppladdaren)
under uppladdningens gรฅng blir denna ikon en fรถrloppsindikator!',
- "ot_u2w": 'up2k: ladda upp filer med stรถd fรถr รฅterupptagning (stรคng din webblรคsare och dra in samma filer senare)$N$Nmultitrรฅdad och filernas tidsstรคmpel bevaras, men den anvรคnder mer CPU รคn [๐] (den enkla uppladdaren)
under uppladdningens gรฅng blir denna ikon en fรถrloppsindikator!',
- "ot_noie": 'Var vรคnlig anvรคnd Chrome / Firefox / Edge',
-
- "ab_mkdir": "skapa mapp",
- "ab_mkdoc": "nytt markdown-dokument",
- "ab_msg": "skicka medd. till serverlogg",
-
- "ay_path": "hoppa till mappar",
- "ay_files": "hoppa till filer",
-
- "wt_ren": "byt namn pรฅ urval$NSnabbtangent: F2",
- "wt_del": "radera urval$NSnabbtangent: ctrl-K",
- "wt_cut": "klipp urval<small>(fรถr att klistra in nรฅgonstans)</small>$NSnabbtangent: ctrl-X",
- "wt_cpy": "kopiera urval till urklipp$N(fรถr att klistra in nรฅgonstans)$NSnabbtangent: ctrl-C",
- "wt_pst": "klistra in tidigare urval$NSnabbtangent: ctrl-V",
- "wt_selall": "vรคlj alla filer$NSnabbtangent: ctrl-A (nรคr en fil har fokus)",
- "wt_selinv": "invertera urval",
- "wt_zip1": "ladda ner denna mapp som ett arkiv",
- "wt_selzip": "ladda ner urval som ett arkiv",
- "wt_seldl": "ladda ner urval som separata filer$NSnabbtangent: Y",
- "wt_npirc": "kopiera IRC-formatterad lรฅtinfo",
- "wt_nptxt": "kopiera lรฅtinfo i klartext",
- "wt_m3ua": "lรคgg till i m3u-spellista (klicka pรฅ ๐ปcopy senare)",
- "wt_m3uc": "kopiera m3u-spellista till urklipp",
- "wt_grid": "vรคxla mellan rutnรคt och listvy$NSnabbtangent: G",
- "wt_prev": "fรถregรฅende lรฅt$NSnabbtangent: J",
- "wt_play": "play / paus$NSnabbtangent: P",
- "wt_next": "nรคsta lรฅt$NSnabbtangent: L",
-
- "ul_par": "samtidiga uppladdningar:",
- "ut_rand": "slumpa filnamn",
- "ut_u2ts": "bevara tidsstรคmpeln fรถr senaste รคndring$Nfrรฅn ditt filsystem till servern\">๐
",
- "ut_ow": "skriv รถver existerande filer pรฅ servern?$N๐ก๏ธ: aldrig (skapar ett nytt filnamn istรคllet)$N๐: skriv รถver om serverns fil รคr รคldre รคn din$Nโป๏ธ: skriv alltid รถver om filerna skiljer sig",
- "ut_mt": "fortsรคtt hasha filer under uppladdningens gรฅng$N$Nstรคng av om din CPU eller disk รคr en flaskhals",
- "ut_ask": 'bekrรคfta innan uppladdningar pรฅbรถrjas">๐ญ',
- "ut_pot": "fรถrbรคttra uppladdningshastigheten pรฅ lรฅngsamma enheter$Ngenom att fรถrenkla anvรคndargrรคnssnittet",
- "ut_srch": "ladda inte upp; kolla istรคllet om filerna redan existerar pรฅ $N servern (detta kommer att skanna alla mappar med lรคsrรคttighet)",
- "ut_par": "du kan pausa all uppladdning genom att sรคtta detta till 0$N$Nรถka denna om din uppkoppling รคr lรฅngsam eller har hรถg latens$N$Nsรคtt till 1 รถver lokala nรคtverk eller om serverns disk รคr en flaskhals",
- "ul_btn": "slรคpp filer / mappar
hรคr (eller klicka)",
- "ul_btnu": "L A D D A U P P",
- "ul_btns": "S ร K",
-
- "ul_hash": "hashar",
- "ul_send": "skickar",
- "ul_done": "klar",
- "ul_idle1": "inga uppladdningar har kรถats",
- "ut_etah": "medelhastighet fรถr <em>hashning</em>, och uppskattad รฅterstรฅende tid",
- "ut_etau": "medelhastighet fรถr <em>รถverfรถring</em>, och uppskattad รฅterstรฅende tid",
- "ut_etat": "<em>total</em> medelhastighet, och uppskattad รฅterstรฅende tid",
-
- "uct_ok": "lyckade",
- "uct_ng": "no-good: misslyckade / avvisade / ej funna",
- "uct_done": "ok och ng kombinerat",
- "uct_bz": "pรฅgรฅende",
- "uct_q": "kรถade",
-
- "utl_name": "filnamn",
- "utl_ulist": "visa",
- "utl_ucopy": "kopiera",
- "utl_links": "lรคnkar",
- "utl_stat": "status",
- "utl_prog": "fรถrlopp",
-
- // keep short:
- "utl_404": "404",
- "utl_err": "FEL",
- "utl_oserr": "OS-fel",
- "utl_found": "hittad",
- "utl_defer": "vรคntar",
- "utl_yolo": "YOLO",
- "utl_done": "klar",
-
- "ul_flagblk": "filerna lades till i kรถn,
men det finns en upptagen up2k i en annan webblรคsarflik,
sรฅ vi vรคntar pรฅ den fรถrst",
- "ul_btnlk": "serverkonfigurationen har lรฅst denna instรคllning",
-
- "udt_up": "Ladda upp",
- "udt_srch": "Sรถk",
- "udt_drop": "slรคpp hรคr",
-
- "u_nav_m": 'jaha, vad har du dรฅ?
Enter = Filer (en eller flera)\nESC = En mapp (inklusive undermappar)',
- "u_nav_b": 'FilerEn mapp',
-
- "cl_opts": "vรคxlar",
- "cl_themes": "tema",
- "cl_langs": "sprรฅk",
- "cl_ziptype": "mappnedladdning",
- "cl_uopts": "up2k-instรคllningar",
- "cl_favico": "favikon",
- "cl_bigdir": "stora mappar",
- "cl_hsort": "#sort.",
- "cl_keytype": "tonartsnotering",
- "cl_hiddenc": "dolda kolumner",
- "cl_hidec": "dรถlj",
- "cl_reset": "รฅterstรคll",
- "cl_hpick": "tryck pรฅ en kolumntitel fรถr att dรถlja den i filvyn",
- "cl_hcancel": "kolumndรถljning avbruten",
-
- "ct_grid": '็ฐ rutnรคtet',
- "ct_ttips": 'โ โก โ">โน๏ธ tips',
- "ct_thumb": 'vรคxla mellan miniatyrer och ikoner i rutnรคtsvyn$NSnabbtangent: T">๐ผ๏ธ miniatyrer',
- "ct_csel": 'anvรคnd CTRL och SKIFT fรถr urval av filer i rutnรคtsvyn">val',
- "ct_ihop": 'skrolla till den senast visade filen nรคr bildvisaren stรคngs">gโฎฏ',
- "ct_dots": 'visa dolda filer (om servern tillรฅter detta)">dolda',
- "ct_qdel": 'bekrรคfta endast en gรฅng nรคr filer raderas">srad',
- "ct_dir1st": 'sortera mappar fรถre filer">๐ fรถrst',
- "ct_nsort": 'naturlig sortering (fรถr filnamn med ledande siffror)">nsort',
- "ct_utc": 'visa alla datum och tider i UTC">UTC',
- "ct_readme": 'visa README.md i listvyn">๐ lรคsmig',
- "ct_idxh": 'visa index.html istรคllet fรถr listvyn">htm',
- "ct_sbars": 'visa rullningslister">โ',
-
- "cut_umod": "om en fil redan existerar pรฅ servern, uppdatera serverns senast modifierade tidsstรคmpel till att matcha din lokala fil (krรคver skriv+radera-rรคttighet)\">re๐
",
-
- "cut_turbo": "yolo-knappen, du vill fรถrmodligen INTE aktivera denna:$N$Nanvรคnd denna om du hรถll pรฅ att ladda upp en stor mรคngd filer och var tvungen att stรคnga webblรคsaren, och du vill fortsรคtta uppladdningen sรฅ fort som mรถjligt$N$Ndetta ersรคtter hash-checken med en enkel "har denna fil samma filstorlek pรฅ servern?", sรฅ om filinnehรฅllet skiljer sig kommer den INTE att laddas upp$N$Ndu bรถr stรคnga av denna nรคr uppladdningen รคr klar och sedan "ladda upp" samma filer igen fรถr att lรฅta klienten verifiera dem\">turbo",
-
- "cut_datechk": "har endast effekt med turbo-vรคxeln pรฅslagen$N$Nminskar yolo-faktorn lite grann; kollar om filtidsstรคmplarna pรฅ servern matchar dina$N$Ndetta bรถr fรฅnga de flesta ofรคrdiga / korrumperade uppladdningarna, men kan inte ersรคtta ett fullstรคndigt verifieringspass med turbo avstรคngt\">date-chk",
-
- "cut_u2sz": "storlek (i MiB) fรถr varje uppladdnings-chunk; stora vรคrden flyger bรคttre รถver atlanten. Prova lรคgre vรคrden pรฅ mycket opรฅlitliga uppkopplingar",
-
- "cut_flag": "garantera att endast en flik laddar upp samtidigt $N -- andra flikar mรฅste ocksรฅ ha denna pรฅslagen -- $N pรฅverkar endast flikar pรฅ samma domรคn",
-
- "cut_az": "ladda upp filer i alfabetisk ordning, snarare รคn mindre filer fรถrst$N$Nalfabetisk ordning kan gรถra det enklare att se var nรฅgot har gรฅtt fel, men uppladdningen blir lite lรฅngsammare รถver fiber / lokala nรคtverk",
-
- "cut_nag": "skicka en systemnotifikation nรคr uppladdningar blir klara$N(endast om webblรคsaren eller fliken inte รคr fokuserade)",
- "cut_sfx": "ljudnotifikation nรคr uppladdningar blir klara$N(endast om webblรคsaren eller fliken inte รคr fokuserade)",
-
- "cut_mt": "anvรคnd multitrรฅdning fรถr att accelerera filhashningen$N$Ndetta anvรคnder web-workers och krรคver$Nmer RAM (upp till 512 MiB extra)$N$Nuppladdningar รถver https blir 30% snabbare, รถver http 4.5x snabbare\">mt",
-
- "cut_wasm": "anvรคnd wasm istรคllet fรถr webblรคsarens inbyggda hashare; fรถrbรคttrar hastigheten i chrome-baserade webblรคsare men รถkar CPU-lasten, och mรฅnga รคldre versioner av chrome har buggar som fรฅr webblรคsaren att konsumera allt RAM-minne och krascha om detta รคr pรฅslaget\">wasm",
-
- "cft_text": "favikon-text (lรฅt stรฅ tom och uppdatera sidan fรถr att stรคnga av)",
- "cft_fg": "fรถrgrundsfรคrg",
- "cft_bg": "bakgrundsfรคrg",
-
- "cdt_lim": "hรถgsta antal filer att visa in en mapp",
- "cdt_ask": "nรคr du nรฅr botten av vyn,$Nbe om en รฅtgรคrd istรคllet fรถr att ladda fler filer",
- "cdt_hsort": "hur mรฅnga sorteringsregler (<code>,sorthref</code>) att inkludera i media-URL:er. Sรคtts detta till 0 kommer regler i klickade medialรคnkar รคven att ignoreras",
-
- "tt_entree": "visa trรคdvy$NSnabbtangent: B",
- "tt_detree": "visa brรถdsmulor$NSnabbtangent: B",
- "tt_visdir": "skrolla till รถppnad mapp",
- "tt_ftree": "vรคxla mellan trรคdvy och textfiler$NHotkey: V",
- "tt_pdock": "visa รถverordnade mappar i en panel lรคngst upp i vyn",
- "tt_dynt": "vรคx vyn nรคr trรคdet expanderar",
- "tt_wrap": "automatisk radbrytning",
- "tt_hover": "visa รถverlรฅnga rader nรคr muspekaren hovrar รถver dem$N( skrollhjulet fungerar ej sรฅvida inte pekaren$Nstรฅr till vรคnster )",
-
- "ml_pmode": "vid mappens slut...",
- "ml_btns": "komm.",
- "ml_tcode": "konvertera",
- "ml_tcode2": "konvertera till",
- "ml_tint": "hy",
- "ml_eq": "ljudutjรคmnare",
- "ml_drc": "dynamikkompressor",
-
- "mt_loop": "upprepa en lรฅt\">๐",
- "mt_one": "stoppa uppspelningen efter en lรฅt\">1๏ธโฃ",
- "mt_shuf": "blanda lรฅtarna i varje mapp\">๐",
- "mt_aplay": "spela automatiskt om det finns en lรฅt-ID i lรคnkar du har klickat pรฅ fรถr att รถppna sidan$N$Nom detta รคr avstรคngt kommer sidans adress inte att bli uppdaterad med en lรฅt-ID om du spelar musik, fรถr att fรถrhindra automatisk uppspelning om dessa instรคllningar gรฅr fรถrlorade men webbadressen รฅterstรฅr\">aโถ",
- "mt_preload": "pรฅbรถrja nedladdning av nรคsta lรฅt i fรถrvรคg fรถr gapfri uppspelning\">ladda",
- "mt_prescan": "hoppa till nรคsta mapp i fรถrvรคg sรฅ att webblรคsaren$Nfรถrblir glad och inte avbryter uppspelningen\">nav",
- "mt_fullpre": "fรถrsรถk att ladda ner hela lรฅten i fรถrvรคg;$Nโ
aktivera pรฅ opรฅlitliga uppkopplingar,$Nโ avaktivera kanske pรฅ lรฅngsamma uppkopplingar\">full",
- "mt_fau": "fรถrhindra att uppspelningen avstannar pรฅ telefoner om nรคsta lรฅt inte laddas tillrรคckligt snabbt i fรถrvรคg (kan ge upphov till buggiga musiktaggar)\">โ๏ธ",
- "mt_waves": "vรฅgformsreglage:$Nvisa ljudstyrkan i uppspelningsreglaget\">~s",
- "mt_npclip": "visa knappar fรถr att kopiera lรฅtinfo till urklippet\">/np",
- "mt_m3u_c": "visa knappar fรถr att kopiera de valda$Nlรฅtarna som en m3u8-spellista\">๐ป",
- "mt_octl": "systemintegration (mediaknappar / skรคrmdisplay)\">os-ctl",
- "mt_oseek": "tillรฅt fram- och bakรฅtspolning via systemintegrationen$N$Nobs.: pรฅ vissa enheter (iPhone)$Nersรคtter detta knappen fรถr nรคsta lรฅt\">spola",
- "mt_oscv": "visa skivomslag i skรคrmdisplayen\">omslag",
- "mt_follow": "skrolla vyn till den spelande lรฅten\">๐ฏ",
- "mt_compact": "kompakt kontrollpanel\">โ",
- "mt_uncache": "rensa cachen (prova detta om din webblรคsare har cachat$Nen trasig kopia av en lรฅt och den vรคgrar spela upp den)\">rensa",
- "mt_mloop": "upprepa den รถppna mappen\">๐ upprepa",
- "mt_mnext": "ladda nรคsta mapp och fortsรคtt\">๐ nรคsta",
- "mt_mstop": "stoppa uppspelningen\">โธ stopp",
- "mt_cflac": "konvertera flac / wav till {0}\">flac",
- "mt_caac": "konvertera aac / m4a till {0}\">aac",
- "mt_coth": "konvertera allt annat (fรถrutom mp3) till {0}\">annat",
- "mt_c2opus": "bรคst val fรถr pc, laptop, android\">opus",
- "mt_c2owa": "opus-weba, fรถr iOS 17.5 och senare\">owa",
- "mt_c2caf": "opus-caf, fรถr iOS 11 till 17\">caf",
- "mt_c2mp3": "anvรคnd detta pรฅ mycket gamla enheter\">mp3",
- "mt_c2flac": "bรคst ljudkvalitet, men enorma nedladdningar\">flac",
- "mt_c2wav": "okomprimerad uppspelning (รคnnu stรถrre)\">wav",
- "mt_c2ok": "snyggt, bra val",
- "mt_c2nd": "det รคr inte det rekommenderade formatet fรถr din enhet, men det รคr lungt",
- "mt_c2ng": "din enhet verkar inte stรถdja det hรคr formatet, men vi provar รคndรฅ",
- "mt_xowa": "det finns buggar i iOS som hindrar uppspelning i bakgrunden med detta format; vรคnligen anvรคnd caf eller mp3 istรคllet",
- "mt_tint": "nivรฅ pรฅ bakgrundsfรคrg (0-100) pรฅ uppspelningsreglaget;$Ngรถr buffring mindre distraherande",
- "mt_eq": "aktiverar utjรคmning och fรถrstรคrkning;$N$Nboost <code>0</code> = standard 100%-volym (omodifierad)$N$Nwidth <code>1 </code> = standard stereo (omodifierad)$Nwidth <code>0.5</code> = 50% vรคnster-hรถger crossfeed$Nwidth <code>0 </code> = mono$N$Nboost <code>-0.8</code> & width <code>10</code> = tar bort sรฅng :^)$N$Nnรคr utjรคmningen รคr aktiverad blir gaplรถsa album verkligen gaplรถsa, sรฅ lรฅt den stรฅ pรฅslagen med alla vรคrden satta till 0 (fรถrutom width = 1) om du bryr dig om det",
- "mt_drc": "aktiverar dynamikkompressorn (volymtillplattning / brickwaller); aktiverar รคven utjรคmnaren fรถr att balansera rรถran, sรฅ sรคtt alla fรคlt i utjรคmnaren fรถrutom 'width' till 0 om du inte vill ha den$N$Nsรคnker all volym รถver THRESHOLD dB; fรถr varje RATIO dB รถver THRESHOLD blir det 1 dB av output, sรฅ standardvรคrdena tresh = -24 och ratio = 12 innebรคr att volymen aldrig bรถr bli hรถgre รคn -22 dB och det รคr sรคkert att hรถja utjรคmnarens boost till 0.8, eller t.o.m. 1.8 med ATK 0 och ett hรถgt RLS-vรคrde t.ex. 90 (fungerar endast i firefox; RLS รคr lรฅst till hรถgst 1 i andra webblรคsare)$N$N(se wikipedia fรถr en bรคttre fรถrklaring)",
-
- "mb_play": "play",
- "mm_hashplay": "spela upp den hรคr ljudfilen?",
- "mm_m3u": "tryck Enter/OK fรถr att spela\ntryck ESC/Avbryt to Edit",
- "mp_breq": "firefox 82+ eller chrome 73+ eller iOS 15+ krรคvs",
- "mm_bload": "laddar...",
- "mm_bconv": "konverterar till {0}, vรคnligen vรคnta...",
- "mm_opusen": "din webblรคsare kan inte spela upp aac- eller m4a-filer;\nkonvertering till opus รคr nu pรฅslaget",
- "mm_playerr": "uppspelning misslyckades: ",
- "mm_eabrt": "Uppspelningen avbrรถts",
- "mm_enet": "Din uppkoppling รคr skum",
- "mm_edec": "Filen รคr korrumperad??",
- "mm_esupp": "Din webblรคsare fรถrstรฅr inte detta format",
- "mm_eunk": "Okรคnt Fel",
- "mm_e404": "Kunde inte spela upp ljudfil; fel 404: Filen hittades inte.",
- "mm_e403": "Kunde inte spela upp ljudfil; fel 403: ร
tkomst nekad.\n\nProva att ladda om sidan med F5, du kanske blev utloggad",
- "mm_e500": "Kunde inte spela upp ljudfil; fel 500: Kolla serverloggen.",
- "mm_e5xx": "Kunde inte spela upp ljudfil; serverfel ",
- "mm_nof": "hittade inga fler lรฅtar i nรคrheten",
- "mm_prescan": "Letar efter fler lรฅtar...",
- "mm_scank": "Hittade nรคsta lรฅt:",
- "mm_uncache": "cachen rensad; alla lรฅtar kommer att laddas ner igen vid uppspelning",
- "mm_hnf": "den lรฅten finns inte lรคngre",
-
- "im_hnf": "den bilden finns inte lรคngre",
-
- "f_empty": 'mappen รคr tom',
- "f_chide": 'detta kommer att dรถlja kolumnen ยซ{0}ยป\n\ndu kan visa kolumner igen i instรคllningarna',
- "f_bigtxt": "den hรคr filen รคr {0} MiB stor -- vill du verkligen visa den som text?",
- "f_bigtxt2": "visa endast slutet pรฅ filen? detta aktiverar รคven รถvervakning, vilket visar nya rader i filen i realtid",
- "fbd_more": '',
- "fbd_all": '',
- "f_anota": "endast {0} av {1} objekt valdes;\nfรถr att vรคlja hela mappen, skrolla fรถrst till botten av vyn",
-
- "f_dls": 'fillรคnkarna i den รถppna mappen har\nbytts till nedladdningslรคnkar',
-
- "f_partial": "Fรถr att sรคkert ladda ner en fil som fรถr tillfรคllet laddas upp, vรคnligen klicka pรฅ filen som har samma filnamn men utan .PARTIAL-filรคndelsen. Vรคnligen tryck Avbryt eller Escape fรถr att gรถra detta.\n\nOm du bortser frรฅn denna varning och trycker OK eller Enter kommer den tillfรคlliga .PARTIAL-filen istรคllet att laddas ner, vilket รคr nรคstan garanterat att ge dig korrumperad data.",
-
- "ft_paste": "klistra in {0} objekt$NSnabbtangent: ctrl-V",
- "fr_eperm": 'kan ej byta namn:\ndu har inte flyttrรคttighet i denna mapp',
- "fd_eperm": 'kan ej radera:\ndu har inte raderingsrรคttighet i denna mapp',
- "fc_eperm": 'kan ej klippa:\ndu har inte flyttrรคttighet i denna mapp',
- "fp_eperm": 'kan ej klistra in:\ndu har inte skrivrรคttighet i denna mapp',
- "fr_emore": "vรคlj minst en fil att byta namn pรฅ",
- "fd_emore": "vรคlj minst en fil att radera",
- "fc_emore": "vรคlj minst en fil att klippa",
- "fcp_emore": "vรคlj minst en fil att kopiera till urklippet",
-
- "fs_sc": "dela den รถppna mappen",
- "fs_ss": "dela de urvalda filerna",
- "fs_just1d": "du kan inte vรคlja mer รคn en mapp\neller blanda filer och mappar i samma urval",
- "fs_abrt": "โ avbryt",
- "fs_rand": "๐ฒ slump.namn",
- "fs_go": "โ
skapa utdelning",
- "fs_name": "namn",
- "fs_src": "kรคlla",
- "fs_pwd": "lรถsen",
- "fs_exp": "utgรฅng",
- "fs_tmin": "min",
- "fs_thrs": "timmar",
- "fs_tdays": "dagar",
- "fs_never": "oรคndlig",
- "fs_pname": "valfritt lรคnknamn; slumpas fram om detta stรฅr tomt",
- "fs_tsrc": "filen eller mappen att dela",
- "fs_ppwd": "valfritt lรถsenord",
- "fs_w8": "skapar utdelning...",
- "fs_ok": "tryck Enter/OK fรถr att kopiera lรคnken till urklipp\ntryck ESC/Avbryt fรถr att stรคnga",
-
- "frt_dec": "kan laga vissa typer av trasiga filnamn\">avkoda-url",
- "frt_rst": "รฅterstรคll modifierade filnamn till de ursprungliga\">โบ รฅterstรคll",
- "frt_abrt": "avbryt och stรคng denna panel\">โ avbryt",
- "frb_apply": "BYT NAMN",
- "fr_adv": "batch-, metadata- och mรถnsteromskrivning\">avancerat",
- "fr_case": "skiftlรคgeskรคnsligt reguljรคrt uttryck\">skift",
- "fr_win": "windows-sรคkra namn; ersรคtt <>:"\\|?* med japanska fullbreddtecken\">win",
- "fr_slash": "ersรคtt / med ett tecken som inte skapar nya mappar\">ingen /",
- "fr_re": "reguljรคrt sรถkuttryck att tillรคmpa pรฅ ursprungliga filnamn; grupper kan hรคnvisas till i formatfรคltet nedan via <code>(1)</code> och <code>(2)</code> osv.",
- "fr_fmt": "inspirerat av foobar2000:$N<code>(title)</code> ersรคtts av lรฅttitel,$N<code>[(artist) - ](title)</code> skippar [detta] om artisten รคr tom$N<code>$lpad((tn),2,0)</code> fyller i spรฅrnumret till 2 siffror",
- "fr_pdel": "ta bort",
- "fr_pnew": "spara som",
- "fr_pname": "ge ett nytt namn pรฅ din instรคllning",
- "fr_aborted": "avbrutet",
- "fr_lold": "gammalt namn",
- "fr_lnew": "nytt namn",
- "fr_tags": "taggar fรถr de valda filerna (skrivskyddat, endast som referens):",
- "fr_busy": "byter namn pรฅ {0} objekt...\n\n{1}",
- "fr_efail": "namnbyte misslyckades:\n",
- "fr_nchg": "{0} av de nya namnen รคndrades p g a win och/eller ingen /\n\nรr det okej att fortsรคtta med de nya namnen?",
-
- "fd_ok": "radering lyckades",
- "fd_err": "radering misslyckades:\n",
- "fd_none": "inget raderades; kanske blockerat av serverkonfigurationen (xbd)?",
- "fd_busy": "raderar {0} objekt...\n\n{1}",
- "fd_warn1": "RADERA dessa {0} objekt?",
- "fd_warn2": "Sista chansen! Det finns inget sรคtt att รฅngra detta. Radera?",
-
- "fc_ok": "klippte {0} objekt",
- "fc_warn": 'klippte {0} objekt, men:\n\nendast denna webblรคsarflik kan klistra in dem\n(eftersom urvalet รคr sรฅ enormt stort)',
-
- "fcc_ok": "kopierade {0} objekt till urklippet",
- "fcc_warn": 'kopierade {0} objekt till urklippet, men:\n\nendast denna webblรคsarflik kan klistra in dem\n(eftersom urvalet รคr sรฅ enormt stort)',
-
- "fp_apply": "anvรคnd dessa namn",
- "fp_ecut": "klipp eller kopiera filer / mappar fรถrst fรถr att klistra / flytta dem\n\nobs.: du kan klippa och klistra mellan webblรคsarflikar",
- "fp_ename": "{0} objekt kan ej flyttas hit eftersom filnamnen redan รคr tagna. Ge dem nya namn nedan fรถr att fortsรคtta, eller lรคmna fรคltet tomt fรถr att skippa:",
- "fcp_ename": "{0} objekt kan ej kopieras hit eftersom filnamnen redan รคr tagna. Ge dem nya namn nedan fรถr att fortsรคtta, eller lรคmna fรคltet tomt fรถr att skippa:",
- "fp_emore": "det finns fortfarande filnamnskrockar att fixa",
- "fp_ok": "flytt lyckades",
- "fcp_ok": "kopiering lyckades",
- "fp_busy": "flyttar {0} objekt...\n\n{1}",
- "fcp_busy": "kopierar {0} objekt...\n\n{1}",
- "fp_abrt": "avbryter...",
- "fp_err": "flytt misslyckades:\n",
- "fcp_err": "kopiering misslyckades:\n",
- "fp_confirm": "flytta dessa {0} objekt hit?",
- "fcp_confirm": "kopiera dessa {0} objekt hit?",
- "fp_etab": 'lyckades ej lรคsa urklippet frรฅn en annan webblรคsarflik',
- "fp_name": "laddar upp en fil frรฅn din enhet. Ge den ett namn:",
- "fp_both_m": 'vรคlj vad som ska klistras in
Enter = Flytta {0} objekt frรฅn ยซ{1}ยป\nESC = Ladda upp {2} filer frรฅn din enhet',
- "fcp_both_m": 'vรคlj vad som ska klistras in
Enter = Kopiera {0} objekt frรฅn ยซ{1}ยป\nESC = Ladda upp {2} filer frรฅn din enhet',
- "fp_both_b": 'FlyttaLadda upp',
- "fcp_both_b": 'KopieraLadda upp',
-
- "mk_noname": "skriv ett namn i fรคltet till vรคnster fรถrst :p",
-
- "tv_load": "Laddar textfil:\n\n{0}\n\n{1}% ({2} av {3} MiB laddat)",
- "tv_xe1": "kunde ej ladda textfil:\n\nfel ",
- "tv_xe2": "404, filen hittades inte",
- "tv_lst": "lista av textfiler i",
- "tvt_close": "รฅtervรคnd till mapp$NSnabbtangent: M (eller Esc)\">โ stรคng",
- "tvt_dl": "ladda ner denna fil$NSnabbtangent: Y\">๐พ ladda ner",
- "tvt_prev": "visa fรถregรฅende fil$NSnabbtangent: i\">โฌ fรถreg.",
- "tvt_next": "visa nรคsta fil$NSnabbtangent: K\">โฌ nรคsta",
- "tvt_sel": "vรคlj fil ( fรถr klipp / kopiera / radera / ... )$NSnabbtangent: S\">vรคlj",
- "tvt_edit": "รถppna fil i textredigerare$NSnabbtangent: E\">โ๏ธ redigera",
- "tvt_tail": "รถvervaka filen; visa nya rader i realtid\">๐ก รถvervaka",
- "tvt_wrap": "automatisk radbrytning\">โต",
- "tvt_atail": "lรฅs vyn till sidans botten\">โ",
- "tvt_ctail": "avkoda terminalfรคrger (ansi-escapesekvenser)\">๐",
- "tvt_ntail": "grรคns fรถr scrollback (hur mรฅnga byte ska behรฅllas laddade)",
-
- "m3u_add1": "lรฅt tillagd till m3u-spellista",
- "m3u_addn": "{0} lรฅtar tillagda till m3u-spellista",
- "m3u_clip": "m3u-spellista kopierad till urklippet\n\ndu bรถr skapa en ny textfil som heter nรฅgonting.m3u och klistra in spellistan i det dokumentet; detta gรถr den uppspelbar",
-
- "gt_vau": "visa inte videor, spela endast ljudet\">๐ง",
- "gt_msel": "urval av filer; ctrl-klicka en fil fรถr standardbeteende$N$N<em>nรคr detta รคr aktiverat: dubbelklicka en fil / mapp fรถr att รถppna den</em>$N$NSnabbtangent: S\">urval",
- "gt_crop": "centrera och beskรคr miniatyrbilder\">beskรคr",
- "gt_3x": "hรถgupplรถsta miniatyrbilder\">3x",
- "gt_zoom": "zoom",
- "gt_chop": "klipp",
- "gt_sort": "sortera efter",
- "gt_name": "namn",
- "gt_sz": "storlek",
- "gt_ts": "datum",
- "gt_ext": "typ",
- "gt_c1": "fรถrkorta filnamn (visa mindre)",
- "gt_c2": "fรถrlรคng filnamn (visa mer)",
-
- "sm_w8": "sรถker...",
- "sm_prev": "sรถkresultaten nedan รคr frรฅn en tidigare sรถkning:\n ",
- "sl_close": "stรคng sรถkresultaten",
- "sl_hits": "visar {0} trรคffar",
- "sl_moar": "ladda fler",
-
- "s_sz": "storlek",
- "s_dt": "datum",
- "s_rd": "sรถkvรคg",
- "s_fn": "namn",
- "s_ta": "taggar",
- "s_ua": "uppl.",
- "s_ad": "avanc.",
- "s_s1": "minimum MiB",
- "s_s2": "maximum MiB",
- "s_d1": "min. iso8601",
- "s_d2": "max. iso8601",
- "s_u1": "uppladdad efter",
- "s_u2": "och/eller fรถre",
- "s_r1": "sรถkvรคgen innehรฅller (blankstegsseparerat)",
- "s_f1": "filnamnet innehรฅller (invertera med -intedetta)",
- "s_t1": "taggar innehรฅller (^=start, slut=$)",
- "s_a1": "specifika metadataegenskaper",
-
- "md_eshow": "kan ej visa ",
- "md_off": "[๐lรคsmig] avstรคngt i [โ๏ธ] -- dokumentet รคr dolt",
-
- "badreply": "Kunde ej tolka svaret frรฅn servern",
-
- "xhr403": "403: ร
tkomst nekad\n\nProva att ladda om sidan med F5, du kanske blev utloggad",
- "xhr0": "okรคnt (tappade fรถrmodligen kontakt med servern, eller sรฅ รคr den nere)",
- "cf_ok": "ledsen -- DD" + wah + "oS-skyddet har aktiverats\n\nsaker bรถr fungera igen om 30 sekunder\n\nom inget hรคnder, ladda om sidan med F5",
- "tl_xe1": "kunde inte visa undermappar:\n\nfel ",
- "tl_xe2": "404: Mappen hittades inte",
- "fl_xe1": "kunde inte visa filer i mapp:\n\nfel ",
- "fl_xe2": "404: Mappen hittades inte",
- "fd_xe1": "kunde inte skapa mapp:\n\nfel ",
- "fd_xe2": "404: รverordnad mapp hittades inte",
- "fsm_xe1": "kunde inte skicka meddelande:\n\ndel ",
- "fsm_xe2": "404: รverordnad mapp hittades inte",
- "fu_xe1": "kunde inte ladda unpost-listan frรฅn servern:\n\nfel ",
- "fu_xe2": "404: Filen hittades inte??",
-
- "fz_tar": "okomprimerad tar-fil i gnu-format (linux / mac)",
- "fz_pax": "okomprimerad tar-fil i pax-format (lรฅngsammare)",
- "fz_targz": "gnu-tar komprimerad med gzip-nivรฅ 3$N$Ndetta รคr vanligtvis mycket lรฅngsamt,$Nanvรคnd okomprimerad tar istรคllet",
- "fz_tarxz": "gnu-tar komprimerad med xz-nivรฅ 1$N$Ndetta รคr vanligtvis mycket lรฅngsamt,$Nanvรคnd okomprimerad tar istรคllet",
- "fz_zip8": "zip-fil med utf8-filnman (kan vara skum i windows 7 och รคldre)",
- "fz_zipd": "zip-fil med standard cp437-filnamn, fรถr riktigt gammal mjukvara",
- "fz_zipc": "cp437 med crc32 utrรคknad i fรถrvรคg,$Nfรถr MS-DOS PKZIP v2.04g (oktober 1993)$N(tar lรคngre tid att behandla innan nedladdningen kan pรฅbรถrjas)",
-
- "un_m1": "du kan radera dina senaste uppladdningar (eller avbryta pรฅgรฅende sรฅdana) nedan",
- "un_upd": "uppdatera",
- "un_m4": "eller, dela filerna som syns nedan:",
- "un_ulist": "visa",
- "un_ucopy": "kopiera",
- "un_flt": "filter: sรถkvรคgen mรฅste innehรฅlla",
- "un_fclr": "rensa filtret",
- "un_derr": 'unpost-radering misslyckades:\n',
- "un_f5": 'nรฅgot gick sรถnder, prova att uppdatera eller tryck pรฅ F5',
- "un_uf5": "ledsen men du mรฅste uppdatera sidan (t.ex. genom att trycka pรฅ F5 eller CTRL-R) innan du kan avbryta den hรคr uppladdningen",
- "un_nou": 'varning: servern รคr fรถr upptagen fรถr att visa pรฅgรฅende uppladdningar; klicka pรฅ "uppdatera" om en stund',
- "un_noc": 'varning: serverkonfigurationen tillรฅter inte unpost:ning av uppladdade filer',
- "un_max": "visar de fรถrsta 2000 filerna (anvรคnd filtret)",
- "un_avail": "{0} av de senaste uppladdningarna kan raderas
{1} pรฅgรฅende uppladdningar kan avbrytas",
- "un_m2": "sorterat efter uppladdningstid; senast uppladdad fรถrst:",
- "un_no1": "tjosan! inga uppladdningar รคr tillrรคckligt nya",
- "un_no2": "tjosan! inga uppladdningar som matchar filtret รคr tillrรคckligt nya",
- "un_next": "radera de {0} nรคstkommande filerna",
- "un_abrt": "avbryt",
- "un_del": "radera",
- "un_m3": "laddar dina senaste uppladdningar...",
- "un_busy": "raderar {0} filer...",
- "un_clip": "{0} lรคnkar kopierade till urklippet",
-
- "u_https1": "du bรถr",
- "u_https2": "byta till https",
- "u_https3": "fรถr bรคttre prestanda",
- "u_ancient": 'din webblรคsare รคr imponerande urรฅldrig -- du kanske borde anvรคnda bup istรคllet',
- "u_nowork": "firefox 53+ eller chrome 57+ eller iOS 11+ krรคvs",
- "tail_2old": "firefox 105+ eller chrome 71+ eller iOS 14.5+ krรคvs",
- "u_nodrop": 'din webblรคsare รคr fรถr gammal fรถr dra-och-slรคpp-uppladdning',
- "u_notdir": "det dรคr รคr ingen mapp!\n\ndin webblรคsare รคr fรถr gammal,\nprova dra-och-slรคpp istรคllet",
- "u_uri": "slรคpp bilder frรฅn andra webblรคsarfรถnster pรฅ den stora\nuppladdningsknappen fรถr att ladda upp dem",
- "u_enpot": 'byt till potatisgrรคnssnittet (kan fรถrbรคttra uppladdningshastigheten)',
- "u_depot": 'byt till det snygga grรคnssnittet (kan fรถrsรคmra uppladdningshastigheten)',
- "u_gotpot": 'byter till potatisgrรคnssnittet fรถr fรถrbรคttrad uppladdningshastighet,\n\nbyt gรคrna tillbaka om du vill!',
- "u_pott": "filer: {0} fรคrdiga, {1} misslyckade, {2} pรฅgรฅende, {3} kรถade
",
- "u_ever": "detta รคr den enkla uppladdaren; up2k krรคver minst
chrome 21 // firefox 13 // edge 12 // opera 12 // safari 5.1",
- "u_su2k": 'detta รคr den enkla uppladdaren; up2k รคr bรคttre',
- "u_uput": 'optimera hastigheten (skippa checksumman)',
- "u_ewrite": 'du har inte skrivrรคttighet i denna mapp',
- "u_eread": 'du har inte lรคsrรคttighet i denna mapp',
- "u_enoi": 'serverkonfigurationen har inte slagit pรฅ sรถkning',
- "u_enoow": "du kan inte skriva รถver hรคr; raderingsrรคttighet krรคvs",
- "u_badf": 'Dessa {0} filer (av totalt {1}) skippades, mรถjligtvis p.g.a. filsystemsrรคttigheter:\n\n',
- "u_blankf": 'Dessa {0} filer (av totalt {1}) รคr tomma; ladda upp dem รคndรฅ?\n\n',
- "u_applef": 'Dessa {0} filer (av totalt {1}) รคr fรถrmodligen oรถnskade;\nTryck OK/Enter fรถr att SKIPPA de fรถljande filerna,\nTryck Avbryt/ESC fรถr att INKLUDERA och LADDA UPP dem:\n\n',
- "u_just1": '\nDet kanske fungerar om du endast vรคljer en fil',
- "u_ff_many": "om du anvรคnder Linux / MacOS / Android, sรฅ kan denna mรคngd filer krascha Firefox!\nom detta hรคnder, vรคnligen fรถrsรถk igen (eller anvรคnd Chrome).",
- "u_up_life": "Denna uppladdning kommer att raderas frรฅn servern om\n{0} efter att den har blivit uppladdad",
- "u_asku": 'ladda upp dessa {0} filer till {1}',
- "u_unpt": "du kan รฅngra / radera denna uppladdning med ๐งฏ uppe till vรคnster",
- "u_bigtab": 'fรถrsรถker att visa {0} filer\n\ndetta kan krascha din webblรคsare, รคr du sรคker?',
- "u_scan": 'Scannar filer...',
- "u_dirstuck": 'katalogskannern fastnade nรคr den fรถrsรถkte komma รฅt de fรถljande {0} objekten; dessa kommer att skippas:',
- "u_etadone": 'Klar ({0}, {1} filer)',
- "u_etaprep": '(fรถrbereder uppladdning)',
- "u_hashdone": 'hashning klar',
- "u_hashing": 'hashar',
- "u_hs": 'skakar hand...',
- "u_started": "filerna laddas nu upp; se [๐]",
- "u_dupdefer": "duplikat; kommer att behandlas efter alla andra filer",
- "u_actx": "klicka hรคr fรถr att undvika prestandafรถrlust
nรคr du byter till andra fรถnster/flikar",
- "u_fixed": "Okej! Fixat ๐",
- "u_cuerr": "misslyckades att ladda upp chunk {0} av {1};\nfรถrmodligen harmlรถst, fortsรคtter\n\nfil: {2}",
- "u_cuerr2": "servern avvisade uppladdningen (chunk {0} av {1});\nprovar igen senare\n\nfil: {2}\n\nfel ",
- "u_ehstmp": "provar igen; see nedรฅt till hรถger",
- "u_ehsfin": "servern avvisade fรถrfrรฅgan att fรคrdigstรคlla uppladdningen; provar igen...",
- "u_ehssrch": "servern avvisade fรถrfrรฅgan att sรถka; provar igen...",
- "u_ehsinit": "servern avvisade fรถrfrรฅgan att pรฅbรถrja uppladdningen; provar igen...",
- "u_eneths": "nรคtverksfel vid handskakning; provar igen...",
- "u_enethd": "nรคtverksfel nรคr destinationens existens testades; provar igen...",
- "u_cbusy": "vรคntar pรฅ att servern ska lita pรฅ oss igen efter nรคtverksfel...",
- "u_ehsdf": "servern fick slut pรฅ diskutrymme!\n\nprovar igen, ifall nรฅgon rensar upp\ntillrรคckligt med utrymme fรถr att fortsรคtta",
- "u_emtleak1": "det verkar som att din webblรคsare kanske har en minneslรคcka;\nvรคnligen",
- "u_emtleak2": ' byt till https (rekommenderat) eller ',
- "u_emtleak3": ' ',
- "u_emtleakc": 'prova fรถljande:\n- tryck
F5 fรถr att uppdatera sidan - avaktivera sedan
mt -vรคxeln i โ๏ธ-instรคllningarna - och prova att ladda upp igen
Uppladdningar kommer att vara lite lรฅngsammare, men aja.\nBeklagar problemet!\n\nPS: chrome v107 har en buggfix fรถr detta',
- "u_emtleakf": 'prova fรถljande:\n- tryck
F5 fรถr att uppdatera sidan - aktivera sedan
๐ฅ (potatis) i uppladdningsgrรคnssnittet - och prova att ladda upp igen
\nPS: firefox kommer fรถrhoppningsvis fรฅ en buggfix vid nรฅgot tillfรคlle',
- "u_s404": "hittades ej pรฅ servern",
- "u_expl": "fรถrklara",
- "u_maxconn": "de flesta webblรคsare begrรคnsar detta till 6, men firefox lรฅter dig hรถja grรคnsen med connections-per-server i about:config",
- "u_tu": 'VARNING: turbo รคr aktiverat, det รคr mรถjligt att klienten inte upptรคcker och รฅterupptar ofรคrdiga uppladdningar; se tipset fรถr turbo-vรคxeln
',
- "u_ts": 'VARNING: turbo รคr aktiverat, sรถkresultat kan vara felaktiga; se tipset fรถr turbo-vรคxeln
',
- "u_turbo_c": "serverkonfigurationen har avaktiverat turbo",
- "u_turbo_g": "avaktiverar turbo eftersom du inte har rรคttigheten\natt se mappars innehรฅll i den hรคr volymen",
- "u_life_cfg": 'radera automatiskt efter min (eller timmar)',
- "u_life_est": 'uppladdningen kommer att raderas vid ---',
- "u_life_max": 'denna mapp tvingar en\nhรถgsta livstid pรฅ {0}',
- "u_unp_ok": 'unpost รคr tillรฅten fรถr {0}',
- "u_unp_ng": 'unpost รคr INTE tillรฅten',
- "ue_ro": 'du har endast lรคsrรคttighet till denna mapp\n\n',
- "ue_nl": 'du รคr inte inloggad',
- "ue_la": 'du รคr inloggad som "{0}"',
- "ue_sr": 'du รคr i filsรถklรคge\n\nbyt till uppladdningslรคge genom att klicka pรฅ fรถrstoringsglaset ๐ (bredvid den stora SรK-knappen), och fรถrsรถk ladda upp igen\n\nledsen',
- "ue_ta": 'prova att ladda upp igen nu, det bรถr fungera',
- "ue_ab": "denna fil laddas redan upp till en annan mapp, och den uppladdningen mรฅste fรคrdigstรคllas innan filen kan laddas upp nรฅgon annanstans.\n\nDu kan avbryta och glรถmma bort den uppladdningen med ๐งฏ uppe till vรคnster",
- "ur_1uo": "Okej: Filen laddades upp med framgรฅng",
- "ur_auo": "Okej: Alla {0} filer laddades upp med framgรฅng",
- "ur_1so": "Okej: Filen fanns pรฅ servern",
- "ur_aso": "Okej: Alla {0} filer fanns pรฅ servern",
- "ur_1un": "Uppladdningen misslyckades, ledsen",
- "ur_aun": "Alla {0} uppladdningar misslyckades, ledsen",
- "ur_1sn": "Filen hittades INTE pรฅ servern",
- "ur_asn": "De {0} filerna hittades INTE pรฅ servern",
- "ur_um": "Klar;\n{0} uppladdningar gick okej,\n{1} uppladdningar misslyckades, ledsen",
- "ur_sm": "Klar;\n{0} filer hittades pรฅ servern,\n{1} filer hittades INTE pรฅ servern",
-
- "lang_set": "uppdatera fรถr att รคndringen ska ta effekt?",
- },
- "ukr": {
- "tt": "ะฃะบัะฐัะฝััะบะฐ",
-
- "cols": {
- "c": "ะบะฝะพะฟะบะธ ะดัะน",
- "dur": "ััะธะฒะฐะปัััั",
- "q": "ัะบัััั / ะฑัััะตะนั",
- "Ac": "ะฐัะดัะพ ะบะพะดะตะบ",
- "Vc": "ะฒัะดะตะพ ะบะพะดะตะบ",
- "Fmt": "ัะพัะผะฐั / ะบะพะฝัะตะนะฝะตั",
- "Ahash": "ะบะพะฝััะพะปัะฝะฐ ััะผะฐ ะฐัะดัะพ",
- "Vhash": "ะบะพะฝััะพะปัะฝะฐ ััะผะฐ ะฒัะดะตะพ",
- "Res": "ัะพะทะดัะปัะฝัััั",
- "T": "ัะธะฟ ัะฐะนะปั",
- "aq": "ัะบัััั ะฐัะดัะพ / ะฑัััะตะนั",
- "vq": "ัะบัััั ะฒัะดะตะพ / ะฑัััะตะนั",
- "pixfmt": "ะฟัะดะฒะธะฑััะบะฐ / ััััะบัััะฐ ะฟัะบัะตะปัะฒ",
- "resw": "ะณะพัะธะทะพะฝัะฐะปัะฝะฐ ัะพะทะดัะปัะฝัััั",
- "resh": "ะฒะตััะธะบะฐะปัะฝะฐ ัะพะทะดัะปัะฝัััั",
- "chs": "ะฐัะดัะพ ะบะฐะฝะฐะปะธ",
- "hz": "ัะฐััะพัะฐ ะดะธัะบัะตัะธะทะฐััั"
- },
-
- "hks": [
- [
- "ััะทะฝะต",
- ["ESC", "ะทะฐะบัะธัะธ ััะทะฝั ัะตัั"],
-
- "ัะฐะนะปะพะฒะธะน ะผะตะฝะตะดะถะตั",
- ["G", "ะฟะตัะตะผะบะฝััะธ ัะฟะธัะพะบ / ัััะบั"],
- ["T", "ะฟะตัะตะผะบะฝััะธ ะผัะฝัะฐัััะธ / ัะบะพะฝะบะธ"],
- ["โง A/D", "ัะพะทะผัั ะผัะฝัะฐััั"],
- ["ctrl-K", "ะฒะธะดะฐะปะธัะธ ะฒะธะฑัะฐะฝะต"],
- ["ctrl-X", "ะฒะธััะทะฐัะธ ะดะพ ะฑััะตัะฐ"],
- ["ctrl-C", "ะบะพะฟััะฒะฐัะธ ะดะพ ะฑััะตัะฐ"],
- ["ctrl-V", "ะฒััะฐะฒะธัะธ (ะฟะตัะตะผัััะธัะธ/ะบะพะฟััะฒะฐัะธ) ััะดะธ"],
- ["Y", "ะทะฐะฒะฐะฝัะฐะถะธัะธ ะฒะธะฑัะฐะฝะต"],
- ["F2", "ะฟะตัะตะนะผะตะฝัะฒะฐัะธ ะฒะธะฑัะฐะฝะต"],
-
- "ะฒะธะฑัั ัะฐะนะปัะฒ ั ัะฟะธัะบั",
- ["space", "ะฟะตัะตะผะบะฝััะธ ะฒะธะฑัั ัะฐะนะปั"],
- ["โ/โ", "ะฟะตัะตะผัััะธัะธ ะบัััะพั ะฒะธะฑะพัั"],
- ["ctrl โ/โ", "ะฟะตัะตะผัััะธัะธ ะบัััะพั ั ะฒัะบะฝะพ"],
- ["โง โ/โ", "ะฒะธะฑัะฐัะธ ะฟะพะฟะตัะตะดะฝัะน/ะฝะฐัััะฟะฝะธะน ัะฐะนะป"],
- ["ctrl-A", "ะฒะธะฑัะฐัะธ ะฒัั ัะฐะนะปะธ / ะฟะฐะฟะบะธ"],
- ], [
- "ะฝะฐะฒัะณะฐััั",
- ["B", "ะฟะตัะตะผะบะฝััะธ ั
ะปัะฑะฝั ะบัะธั
ัะธ / ะฟะฐะฝะตะปั ะฝะฐะฒัะณะฐััั"],
- ["I/K", "ะฟะพะฟะตัะตะดะฝั/ะฝะฐัััะฟะฝะฐ ะฟะฐะฟะบะฐ"],
- ["M", "ะฑะฐััะบัะฒััะบะฐ ะฟะฐะฟะบะฐ (ะฐะฑะพ ะทะณะพัะฝััะธ ะฟะพัะพัะฝั)"],
- ["V", "ะฟะตัะตะผะบะฝััะธ ะฟะฐะฟะบะธ / ัะตะบััะพะฒั ัะฐะนะปะธ ะฒ ะฟะฐะฝะตะปั ะฝะฐะฒัะณะฐััั"],
- ["A/D", "ัะพะทะผัั ะฟะฐะฝะตะปั ะฝะฐะฒัะณะฐััั"],
- ], [
- "ะฐัะดัะพ ะฟะปะตัั",
- ["J/L", "ะฟะพะฟะตัะตะดะฝั/ะฝะฐัััะฟะฝะฐ ะฟััะฝั"],
- ["U/O", "ะฟะตัะตะผะพัะฐัะธ ะฝะฐ 10ัะตะบ ะฝะฐะทะฐะด/ะฒะฟะตัะตะด"],
- ["0..9", "ะฟะตัะตะนัะธ ะดะพ 0%..90%"],
- ["P", "ะฒัะดัะฒะพัะธัะธ/ะฟะฐัะทะฐ (ัะฐะบะพะถ ะทะฐะฟััะบะฐั)"],
- ["S", "ะฒะธะฑัะฐัะธ ะฟะพัะพัะฝั ะฟััะฝั"],
- ["Y", "ะทะฐะฒะฐะฝัะฐะถะธัะธ ะฟััะฝั"],
- ], [
- "ะฟะตัะตะณะปัะดะฐั ะทะพะฑัะฐะถะตะฝั",
- ["J/L, โ/โ", "ะฟะพะฟะตัะตะดะฝั/ะฝะฐัััะฟะฝะต ะทะพะฑัะฐะถะตะฝะฝั"],
- ["Home/End", "ะฟะตััะต/ะพััะฐะฝะฝั ะทะพะฑัะฐะถะตะฝะฝั"],
- ["F", "ะฟะพะฒะฝะธะน ะตะบัะฐะฝ"],
- ["R", "ะฟะพะฒะตัะฝััะธ ะทะฐ ะณะพะดะธะฝะฝะธะบะพะฒะพั ััััะปะบะพั"],
- ["โง R", "ะฟะพะฒะตัะฝััะธ ะฟัะพัะธ ะณะพะดะธะฝะฝะธะบะพะฒะพั ััััะปะบะธ"],
- ["S", "ะฒะธะฑัะฐัะธ ะทะพะฑัะฐะถะตะฝะฝั"],
- ["Y", "ะทะฐะฒะฐะฝัะฐะถะธัะธ ะทะพะฑัะฐะถะตะฝะฝั"],
- ], [
- "ะฒัะดะตะพ ะฟะปะตัั",
- ["U/O", "ะฟะตัะตะผะพัะฐัะธ ะฝะฐ 10ัะตะบ ะฝะฐะทะฐะด/ะฒะฟะตัะตะด"],
- ["P/K/Space", "ะฒัะดัะฒะพัะธัะธ/ะฟะฐัะทะฐ"],
- ["C", "ะฟัะพะดะพะฒะถะธัะธ ะฒัะดัะฒะพัะตะฝะฝั ะฝะฐัััะฟะฝะพะณะพ"],
- ["V", "ะฟะพะฒัะพั"],
- ["M", "ะฒะธะผะบะฝััะธ ะทะฒัะบ"],
- ["[ and ]", "ะฒััะฐะฝะพะฒะธัะธ ัะฝัะตัะฒะฐะป ะฟะพะฒัะพัั"],
- ], [
- "ะฟะตัะตะณะปัะดะฐั ัะตะบััะพะฒะธั
ัะฐะนะปัะฒ",
- ["I/K", "ะฟะพะฟะตัะตะดะฝัะน/ะฝะฐัััะฟะฝะธะน ัะฐะนะป"],
- ["M", "ะทะฐะบัะธัะธ ัะตะบััะพะฒะธะน ัะฐะนะป"],
- ["E", "ัะตะดะฐะณัะฒะฐัะธ ัะตะบััะพะฒะธะน ัะฐะนะป"],
- ["S", "ะฒะธะฑัะฐัะธ ัะฐะนะป (ะดะปั ะฒะธััะทะฐะฝะฝั/ะบะพะฟััะฒะฐะฝะฝั/ะฟะตัะตะนะผะตะฝัะฒะฐะฝะฝั)"],
- ]
- ],
-
- "m_ok": "ะะฐัะฐะทะด",
- "m_ng": "ะกะบะฐััะฒะฐัะธ",
-
- "enable": "ะฃะฒัะผะบะฝััะธ",
- "danger": "ะะะะะะะะะ",
- "clipped": "ัะบะพะฟัะนะพะฒะฐะฝะพ ะดะพ ะฑััะตัะฐ ะพะฑะผัะฝั",
-
- "ht_s1": "ัะตะบัะฝะดะฐ",
- "ht_s2": "ัะตะบัะฝะด",
- "ht_m1": "ั
ะฒะธะปะธะฝะฐ",
- "ht_m2": "ั
ะฒะธะปะธะฝ",
- "ht_h1": "ะณะพะดะธะฝะฐ",
- "ht_h2": "ะณะพะดะธะฝ",
- "ht_d1": "ะดะตะฝั",
- "ht_d2": "ะดะฝัะฒ",
- "ht_and": " ั ",
-
- "goh": "ะฟะฐะฝะตะปั ะบะตััะฒะฐะฝะฝั",
- "gop": 'ะฟะพะฟะตัะตะดะฝัะน ััััะด">ะฝะฐะทะฐะด',
- "gou": 'ะฑะฐััะบัะฒััะบะฐ ะฟะฐะฟะบะฐ">ะฒะณะพัั',
- "gon": 'ะฝะฐัััะฟะฝะฐ ะฟะฐะฟะบะฐ">ะดะฐะปั',
- "logout": "ะะธะนัะธ ",
- "login": "ัะฒัะนัะธ", //m
- "access": " ะดะพัััะฟ",
- "ot_close": "ะทะฐะบัะธัะธ ะฟัะดะผะตะฝั",
- "ot_search": "ะฟะพััะบ ัะฐะนะปัะฒ ะทะฐ ะฐััะธะฑััะฐะผะธ, ัะปัั
ะพะผ / ัะผะตะฝะตะผ, ะผัะทะธัะฝะธะผะธ ัะตะณะฐะผะธ, ะฐะฑะพ ะฑัะดั-ัะบะพั ะบะพะผะฑัะฝะฐัััั$N$N<code>foo bar</code> = ะผะฐั ะผัััะธัะธ ยซfooยป ั ยซbarยป,$N<code>foo -bar</code> = ะผะฐั ะผัััะธัะธ ยซfooยป, ะฐะปะต ะฝะต ยซbarยป,$N<code>^yana .opus$</code> = ะฟะพัะธะฝะฐัะธัั ะท ยซyanaยป ั ะฑััะธ ัะฐะนะปะพะผ ยซopusยป$N<code>"try unite"</code> = ะผัััะธัะธ ัะพัะฝะพ ยซtry uniteยป$N$Nัะพัะผะฐั ะดะฐัะธ - iso-8601, ะฝะฐะฟัะธะบะปะฐะด$N<code>2009-12-31</code> ะฐะฑะพ <code>2020-09-12 23:30:00</code>",
- "ot_unpost": "ัะบะฐััะฒะฐัะธ: ะฒะธะดะฐะปะธัะธ ะฝะตะดะฐะฒะฝั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ะฐะฑะพ ะฟะตัะตัะฒะฐัะธ ะฝะตะทะฐะฒะตััะตะฝั",
- "ot_bup": "bup: ะพัะฝะพะฒะฝะธะน ะทะฐะฒะฐะฝัะฐะถัะฒะฐั, ะฟัะดััะธะผัั ะฝะฐะฒััั netscape 4.0",
- "ot_mkdir": "mkdir: ััะฒะพัะธัะธ ะฝะพะฒั ะฟะฐะฟะบั",
- "ot_md": "new-md: ััะฒะพัะธัะธ ะฝะพะฒะธะน markdown ะดะพะบัะผะตะฝั",
- "ot_msg": "msg: ะฝะฐะดััะปะฐัะธ ะฟะพะฒัะดะพะผะปะตะฝะฝั ะฒ ะปะพะณ ัะตัะฒะตัะฐ",
- "ot_mp": "ะฝะฐะปะฐัััะฒะฐะฝะฝั ะผะตะดัะฐะฟะปะตััะฐ",
- "ot_cfg": "ะฟะฐัะฐะผะตััะธ ะบะพะฝััะณััะฐััั",
- "ot_u2i": 'up2k: ะทะฐะฒะฐะฝัะฐะถะธัะธ ัะฐะนะปะธ (ัะบัะพ ั ะฒะฐั ั ะดะพัััะฟ ะดะปั ะทะฐะฟะธัั) ะฐะฑะพ ะฟะตัะตะบะปััะธัะธัั ะฝะฐ ัะตะถะธะผ ะฟะพััะบั, ัะพะฑ ะฟะพะฑะฐัะธัะธ, ัะธ ััะฝัััั ะฒะพะฝะธ ะดะตัั ะฝะฐ ัะตัะฒะตัั$N$Nะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ะผะพะถะฝะฐ ะฟะพะฝะพะฒะปัะฒะฐัะธ, ะฑะฐะณะฐัะพะฟะพัะพะบะพะฒั, ั ัะฐัะพะฒั ะผััะบะธ ัะฐะนะปัะฒ ะทะฑะตััะณะฐััััั, ะฐะปะต ะฒะธะบะพัะธััะพะฒัั ะฑัะปััะต CPU ะฝัะถ [๐] (ะพัะฝะพะฒะฝะธะน ะทะฐะฒะฐะฝัะฐะถัะฒะฐั)
ะฟัะด ัะฐั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ัั ัะบะพะฝะบะฐ ััะฐั ัะฝะดะธะบะฐัะพัะพะผ ะฟัะพะณัะตัั!',
- "ot_u2w": 'up2k: ะทะฐะฒะฐะฝัะฐะถะธัะธ ัะฐะนะปะธ ะท ะฟัะดััะธะผะบะพั ะฟะพะฝะพะฒะปะตะฝะฝั (ะทะฐะบัะธะนัะต ะฑัะฐัะทะตั ั ะฟะตัะตััะณะฝััั ัั ัะฐะผั ัะฐะนะปะธ ะฟัะทะฝััะต)$N$Nะฑะฐะณะฐัะพะฟะพัะพะบะพะฒั, ั ัะฐัะพะฒั ะผััะบะธ ัะฐะนะปัะฒ ะทะฑะตััะณะฐััััั, ะฐะปะต ะฒะธะบะพัะธััะพะฒัั ะฑัะปััะต CPU ะฝัะถ [๐] (ะพัะฝะพะฒะฝะธะน ะทะฐะฒะฐะฝัะฐะถัะฒะฐั)
ะฟัะด ัะฐั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ัั ัะบะพะฝะบะฐ ััะฐั ัะฝะดะธะบะฐัะพัะพะผ ะฟัะพะณัะตัั!',
- "ot_noie": 'ะัะดั ะปะฐัะบะฐ, ะฒะธะบะพัะธััะพะฒัะนัะต Chrome / Firefox / Edge',
-
- "ab_mkdir": "ััะฒะพัะธัะธ ะฟะฐะฟะบั",
- "ab_mkdoc": "ะฝะพะฒะธะน markdown ะดะพะบัะผะตะฝั",
- "ab_msg": "ะฝะฐะดััะปะฐัะธ ะฟะพะฒัะดะพะผะปะตะฝะฝั ะฒ ะปะพะณ ัะตัะฒะตัะฐ",
-
- "ay_path": "ะฟะตัะตะนัะธ ะดะพ ะฟะฐะฟะพะบ",
- "ay_files": "ะฟะตัะตะนัะธ ะดะพ ัะฐะนะปัะฒ",
-
- "wt_ren": "ะฟะตัะตะนะผะตะฝัะฒะฐัะธ ะฒะธะฑัะฐะฝั ะตะปะตะผะตะฝัะธ$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: F2",
- "wt_del": "ะฒะธะดะฐะปะธัะธ ะฒะธะฑัะฐะฝั ะตะปะตะผะตะฝัะธ$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: ctrl-K",
- "wt_cut": "ะฒะธััะทะฐัะธ ะฒะธะฑัะฐะฝั ะตะปะตะผะตะฝัะธ <small>(ะฟะพััะผ ะฒััะฐะฒะธัะธ ะฒ ัะฝัะพะผั ะผัััั)</small>$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: ctrl-X",
- "wt_cpy": "ะบะพะฟััะฒะฐัะธ ะฒะธะฑัะฐะฝั ะตะปะตะผะตะฝัะธ ะดะพ ะฑััะตัะฐ$N(ัะพะฑ ะฒััะฐะฒะธัะธ ัั
ะฒ ัะฝัะพะผั ะผัััั)$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: ctrl-C",
- "wt_pst": "ะฒััะฐะฒะธัะธ ัะฐะฝััะต ะฒะธััะทะฐะฝะต / ัะบะพะฟัะนะพะฒะฐะฝะต$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: ctrl-V",
- "wt_selall": "ะฒะธะฑัะฐัะธ ะฒัั ัะฐะนะปะธ$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: ctrl-A (ะบะพะปะธ ัะพะบัั ะฝะฐ ัะฐะนะปั)",
- "wt_selinv": "ัะฝะฒะตัััะฒะฐัะธ ะฒะธะฑัั",
- "wt_zip1": "ะทะฐะฒะฐะฝัะฐะถะธัะธ ัั ะฟะฐะฟะบั ัะบ ะฐัั
ัะฒ",
- "wt_selzip": "ะทะฐะฒะฐะฝัะฐะถะธัะธ ะฒะธะฑัั ัะบ ะฐัั
ัะฒ",
- "wt_seldl": "ะทะฐะฒะฐะฝัะฐะถะธัะธ ะฒะธะฑัั ัะบ ะพะบัะตะผั ัะฐะนะปะธ$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: Y",
- "wt_npirc": "ะบะพะฟััะฒะฐัะธ ัะฝัะพัะผะฐััั ััะตะบั ั ัะพัะผะฐัั irc",
- "wt_nptxt": "ะบะพะฟััะฒะฐัะธ ัะฝัะพัะผะฐััั ััะตะบั ั ัะตะบััะพะฒะพะผั ัะพัะผะฐัั",
- "wt_m3ua": "ะดะพะดะฐัะธ ะดะพ m3u ะฟะปะตะนะปะธััั (ะฟะพััะผ ะบะปะฐัะฝััั ๐ปะบะพะฟััะฒะฐัะธ)",
- "wt_m3uc": "ะบะพะฟััะฒะฐัะธ m3u ะฟะปะตะนะปะธัั ะดะพ ะฑััะตัะฐ",
- "wt_grid": "ะฟะตัะตะผะบะฝััะธ ัััะบั / ัะฟะธัะพะบ$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: G",
- "wt_prev": "ะฟะพะฟะตัะตะดะฝัะน ััะตะบ$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: J",
- "wt_play": "ะฒัะดัะฒะพัะธัะธ / ะฟะฐัะทะฐ$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: P",
- "wt_next": "ะฝะฐัััะฟะฝะธะน ััะตะบ$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: L",
-
- "ul_par": "ะฟะฐัะฐะปะตะปัะฝั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั:",
- "ut_rand": "ะฒะธะฟะฐะดะบะพะฒั ัะผะตะฝะฐ ัะฐะนะปัะฒ",
- "ut_u2ts": "ะบะพะฟััะฒะฐัะธ ัะฐัะพะฒั ะผััะบั ะพััะฐะฝะฝัะพั ะทะผัะฝะธ$Nะท ะฒะฐัะพั ัะฐะนะปะพะฒะพั ัะธััะตะผะธ ะฝะฐ ัะตัะฒะตั\">๐
",
- "ut_ow": "ะฟะตัะตะทะฐะฟะธัะฐัะธ ััะฝัััั ัะฐะนะปะธ ะฝะฐ ัะตัะฒะตัั?$N๐ก๏ธ: ะฝัะบะพะปะธ (ะทะฐะผัััั ััะพะณะพ ััะฒะพัะธัั ะฝะพะฒะต ัะผ'ั ัะฐะนะปั)$N๐: ะฟะตัะตะทะฐะฟะธัะฐัะธ, ัะบัะพ ัะฐะนะป ะฝะฐ ัะตัะฒะตัั ััะฐัััะธะน ะทะฐ ะฒะฐั$Nโป๏ธ: ะทะฐะฒะถะดะธ ะฟะตัะตะทะฐะฟะธััะฒะฐัะธ, ัะบัะพ ัะฐะนะปะธ ะฒัะดััะทะฝัััััั",
- "ut_mt": "ะฟัะพะดะพะฒะถัะฒะฐัะธ ั
ะตััะฒะฐะฝะฝั ัะฝัะธั
ัะฐะนะปัะฒ ะฟัะด ัะฐั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั$N$Nะผะพะถะปะธะฒะพ, ะฒะธะผะบะฝััั, ัะบัะพ ะฒะฐั CPU ะฐะฑะพ HDD ั ะฒัะทัะบะธะผ ะผัััะตะผ",
- "ut_ask": 'ะทะฐะฟะธัะฐัะธ ะฟัะดัะฒะตัะดะถะตะฝะฝั ะฟะตัะตะด ะฟะพัะฐัะบะพะผ ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั">๐ญ',
- "ut_pot": "ะฟะพะบัะฐัะธัะธ ัะฒะธะดะบัััั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ะฝะฐ ะฟะพะฒัะปัะฝะธั
ะฟัะธัััะพัั
$Nัะพะฑะปััะธ ัะฝัะตััะตะนั ะผะตะฝั ัะบะปะฐะดะฝะธะผ",
- "ut_srch": "ะฝะต ะทะฐะฒะฐะฝัะฐะถัะฒะฐัะธ, ะฐ ะฟะตัะตะฒััะธัะธ, ัะธ ัะฐะนะปะธ ะฒะถะต $N ััะฝัััั ะฝะฐ ัะตัะฒะตัั (ัะบะฐะฝัั ะฒัั ะฟะฐะฟะบะธ, ัะบั ะฒะธ ะผะพะถะตัะต ัะธัะฐัะธ)",
- "ut_par": "ะฟัะธะทัะฟะธะฝะธัะธ ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั, ะฒััะฐะฝะพะฒะธะฒัะธ 0$N$Nะทะฑัะปััััั, ัะบัะพ ะฒะฐัะต ะท'ัะดะฝะฐะฝะฝั ะฟะพะฒัะปัะฝะต / ะฒะธัะพะบะฐ ะทะฐััะธะผะบะฐ$N$Nะทะฐะปะธัััั 1 ะฒ ะปะพะบะฐะปัะฝัะน ะผะตัะตะถั ะฐะฑะพ ัะบัะพ HDD ัะตัะฒะตัะฐ ั ะฒัะทัะบะธะผ ะผัััะตะผ",
- "ul_btn": "ะฟะตัะตััะณะฝััั ัะฐะนะปะธ / ะฟะฐะฟะบะธ
(ะฐะฑะพ ะบะปะฐัะฝััั ััะดะธ)",
- "ul_btnu": "ะะะะะะขะะะะขะ",
- "ul_btns": "ะ ะ ะจ ะฃ ะ",
-
- "ul_hash": "ั
ะตั",
- "ul_send": "ะฝะฐะดััะปะฐัะธ",
- "ul_done": "ะณะพัะพะฒะพ",
- "ul_idle1": "ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ัะต ะฝะต ะฟะพััะฐะฒะปะตะฝั ะฒ ัะตัะณั",
- "ut_etah": "ัะตัะตะดะฝั ัะฒะธะดะบัััั <em>ั
ะตััะฒะฐะฝะฝั</em> ั ะพัััะฝัะพะฒะฝะธะน ัะฐั ะดะพ ะทะฐะฒะตััะตะฝะฝั",
- "ut_etau": "ัะตัะตะดะฝั ัะฒะธะดะบัััั <em>ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั</em> ั ะพัััะฝัะพะฒะฝะธะน ัะฐั ะดะพ ะทะฐะฒะตััะตะฝะฝั",
- "ut_etat": "ัะตัะตะดะฝั <em>ะทะฐะณะฐะปัะฝะฐ</em> ัะฒะธะดะบัััั ั ะพัััะฝัะพะฒะฝะธะน ัะฐั ะดะพ ะทะฐะฒะตััะตะฝะฝั",
-
- "uct_ok": "ััะฟััะฝะพ ะทะฐะฒะตััะตะฝะพ",
- "uct_ng": "ะฝะตะฒะดะฐะปะพ: ะฟะพะผะธะปะบะฐ / ะฒัะดั
ะธะปะตะฝะพ / ะฝะต ะทะฝะฐะนะดะตะฝะพ",
- "uct_done": "ok ั ng ัะฐะทะพะผ",
- "uct_bz": "ั
ะตััะฒะฐะฝะฝั ะฐะฑะพ ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั",
- "uct_q": "ะพััะบัั, ะฒ ัะตัะทั",
-
- "utl_name": "ัะผ'ั ัะฐะนะปั",
- "utl_ulist": "ัะฟะธัะพะบ",
- "utl_ucopy": "ะบะพะฟััะฒะฐัะธ",
- "utl_links": "ะฟะพัะธะปะฐะฝะฝั",
- "utl_stat": "ััะฐััั",
- "utl_prog": "ะฟัะพะณัะตั",
-
- // keep short:
- "utl_404": "404",
- "utl_err": "ะะะะะะะ",
- "utl_oserr": "ะฟะพะผะธะปะบะฐ ะะก",
- "utl_found": "ะทะฝะฐะนะดะตะฝะพ",
- "utl_defer": "ะฒัะดะบะปะฐััะธ",
- "utl_yolo": "YOLO",
- "utl_done": "ะณะพัะพะฒะพ",
-
- "ul_flagblk": "ัะฐะนะปะธ ะฑัะปะธ ะดะพะดะฐะฝั ะดะพ ัะตัะณะธ
ะพะดะฝะฐะบ ั ะทะฐะนะฝััะธะน up2k ะฒ ัะฝััะน ะฒะบะปะฐะดัั ะฑัะฐัะทะตัะฐ,
ัะพะผั ัะตะบะฐัะผะพ, ะฟะพะบะธ ะฒัะฝ ะทะฐะฒะตััะธัััั ัะฟะพัะฐัะบั",
- "ul_btnlk": "ะบะพะฝััะณััะฐััั ัะตัะฒะตัะฐ ะทะฐะฑะปะพะบัะฒะฐะปะฐ ัะตะน ะฟะตัะตะผะธะบะฐั ั ััะพะผั ััะฐะฝั",
-
- "udt_up": "ะะฐะฒะฐะฝัะฐะถะตะฝะฝั",
- "udt_srch": "ะะพััะบ",
- "udt_drop": "ะฟะตัะตััะณะฝััั ััะดะธ",
-
- "u_nav_m": 'ะณะฐัะฐะทะด, ัะพ ั ะฒะฐั ั?
Enter = ะคะฐะนะปะธ (ะพะดะธะฝ ะฐะฑะพ ะฑัะปััะต)\nESC = ะะดะฝะฐ ะฟะฐะฟะบะฐ (ะฒะบะปััะฐััะธ ะฟัะดะฟะฐะฟะบะธ)',
- "u_nav_b": 'ะคะฐะนะปะธะะดะฝะฐ ะฟะฐะฟะบะฐ',
-
- "cl_opts": "ะฟะตัะตะผะธะบะฐัั",
- "cl_themes": "ัะตะผะฐ",
- "cl_langs": "ะผะพะฒะฐ",
- "cl_ziptype": "ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ะฟะฐะฟะบะธ",
- "cl_uopts": "ะฟะตัะตะผะธะบะฐัั up2k",
- "cl_favico": "favicon",
- "cl_bigdir": "ะฒะตะปะธะบั ะฟะฐะฟะบะธ",
- "cl_hsort": "#ัะพัััะฒะฐะฝะฝั",
- "cl_keytype": "ะฟะพะทะฝะฐัะตะฝะฝั ะบะปะฐะฒัั",
- "cl_hiddenc": "ะฟัะธั
ะพะฒะฐะฝั ััะพะฒะฟัั",
- "cl_hidec": "ะฟัะธั
ะพะฒะฐัะธ",
- "cl_reset": "ัะบะธะฝััะธ",
- "cl_hpick": "ะฝะฐัะธัะฝััั ะฝะฐ ะทะฐะณะพะปะพะฒะบะธ ััะพะฒะฟััะฒ, ัะพะฑ ะฟัะธั
ะพะฒะฐัะธ ัั
ั ัะฐะฑะปะธัั ะฝะธะถัะต",
- "cl_hcancel": "ะฟัะธั
ะพะฒะฐะฝะฝั ััะพะฒะฟััะฒ ัะบะฐัะพะฒะฐะฝะพ",
-
- "ct_grid": '็ฐ ัััะบะฐ',
- "ct_ttips": 'โ โก โ">โน๏ธ ะฟัะดะบะฐะทะบะธ',
- "ct_thumb": 'ั ัะตะถะธะผั ัััะบะธ, ะฟะตัะตะผะบะฝััะธ ัะบะพะฝะบะธ ะฐะฑะพ ะผัะฝัะฐัััะธ$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: T">๐ผ๏ธ ะผัะฝัะฐัััะธ',
- "ct_csel": 'ะฒะธะบะพัะธััะพะฒัะฒะฐัะธ CTRL ั SHIFT ะดะปั ะฒะธะฑะพัั ัะฐะนะปัะฒ ั ัะตะถะธะผั ัััะบะธ">ะฒะธะฑัั',
- "ct_ihop": 'ะบะพะปะธ ะฟะตัะตะณะปัะดะฐั ะทะพะฑัะฐะถะตะฝั ะทะฐะบัะธัะพ, ะฟัะพะบัััะธัะธ ะฒะฝะธะท ะดะพ ะพััะฐะฝะฝัะพะณะพ ะฟะตัะตะณะปัะฝััะพะณะพ ัะฐะนะปั">gโฎฏ',
- "ct_dots": 'ะฟะพะบะฐะทะฐัะธ ะฟัะธั
ะพะฒะฐะฝั ัะฐะนะปะธ (ัะบัะพ ัะตัะฒะตั ะดะพะทะฒะพะปัั)">ะฟัะธั
ะพะฒะฐะฝั ัะฐะนะปะธ',
- "ct_qdel": 'ะฟัะธ ะฒะธะดะฐะปะตะฝะฝั ัะฐะนะปัะฒ, ะทะฐะฟะธัะฐัะธ ะฟัะดัะฒะตัะดะถะตะฝะฝั ะปะธัะต ะพะดะธะฝ ัะฐะท">ัะฒะธะดะบะต ะฒะธะดะฐะปะตะฝะฝั',
- "ct_dir1st": 'ัะพัััะฒะฐัะธ ะฟะฐะฟะบะธ ะฟะตัะตะด ัะฐะนะปะฐะผะธ">ัะฟะพัะฐัะบั ๐',
- "ct_nsort": 'ะฟัะธัะพะดะฝะต ัะพัััะฒะฐะฝะฝั (ะดะปั ัะผะตะฝ ัะฐะนะปัะฒ ะท ะฟะพัะฐัะบะพะฒะธะผะธ ัะธััะฐะผะธ)">ะฟัะธัะพะดะฝะต ัะพัััะฒะฐะฝะฝั',
- "ct_utc": 'ะฒะธะบะพัะธััะพะฒัะนัะต UTC ะดะปั ะฒััั
ัะฐัะพะฒะธั
ะฟะพะทะฝะฐัะตะฝั">UTC', //m
- "ct_readme": 'ะฟะพะบะฐะทะฐัะธ README.md ั ัะฟะธัะบะฐั
ะฟะฐะฟะพะบ">๐ readme',
- "ct_idxh": 'ะฟะพะบะฐะทะฐัะธ index.html ะทะฐะผัััั ัะฟะธัะบั ะฟะฐะฟะบะธ">htm',
- "ct_sbars": 'ะฟะพะบะฐะทะฐัะธ ัะผัะณะธ ะฟัะพะบัััะบะธ">โ',
-
- "cut_umod": "ัะบัะพ ัะฐะนะป ะฒะถะต ััะฝัั ะฝะฐ ัะตัะฒะตัั, ะพะฝะพะฒะธัะธ ัะฐัะพะฒั ะผััะบั ะพััะฐะฝะฝัะพั ะทะผัะฝะธ ัะตัะฒะตัะฐ ะฒัะดะฟะพะฒัะดะฝะพ ะดะพ ะฒะฐัะพะณะพ ะปะพะบะฐะปัะฝะพะณะพ ัะฐะนะปั (ะฟะพััะตะฑัั ะดะพะทะฒะพะปัะฒ ะฝะฐ ะทะฐะฟะธั+ะฒะธะดะฐะปะตะฝะฝั)\">re๐
",
-
- "cut_turbo": "ะบะฝะพะฟะบะฐ yolo, ะฒะธ, ะนะผะพะฒััะฝะพ, ะะ ั
ะพัะตัะต ัั ะฒะผะธะบะฐัะธ:$N$Nะฒะธะบะพัะธััะพะฒัะนัะต ัะต, ัะบัะพ ะฒะธ ะทะฐะฒะฐะฝัะฐะถัะฒะฐะปะธ ะฒะตะปะธัะตะทะฝั ะบัะปัะบัััั ัะฐะนะปัะฒ ั ะทะผััะตะฝั ะฑัะปะธ ะฟะตัะตะทะฐะฟัััะธัะธ ะท ัะบะพััั ะฟัะธัะธะฝะธ, ั ั
ะพัะตัะต ะฟัะพะดะพะฒะถะธัะธ ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ัะบะฝะฐะนัะฒะธะดัะต$N$Nัะต ะทะฐะผัะฝัั ะฟะตัะตะฒััะบั ั
ะตัั ะฟัะพััะพั "ัะธ ะผะฐั ัะตะน ัะฐะนะป ัะพะน ัะฐะผะธะน ัะพะทะผัั ะฝะฐ ัะตัะฒะตัั?", ัะพะผั ัะบัะพ ะฒะผััั ัะฐะนะปั ะฒัะดััะทะฝัััััั, ะฒัะฝ ะะ ะฑัะดะต ะทะฐะฒะฐะฝัะฐะถะตะฝะธะน$N$Nะฒะธ ะฟะพะฒะธะฝะฝั ะฒะธะผะบะฝััะธ ัะต, ะบะพะปะธ ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ะฑัะดะต ะทะฐะฒะตััะตะฝะพ, ะฐ ะฟะพััะผ "ะทะฐะฒะฐะฝัะฐะถะธัะธ" ัั ัะฐะผั ัะฐะนะปะธ ะทะฝะพะฒั, ัะพะฑ ะดะพะทะฒะพะปะธัะธ ะบะปััะฝัั ะฟะตัะตะฒััะธัะธ ัั
\">turbo",
-
- "cut_datechk": "ะฝะต ะผะฐั ะตัะตะบัั, ัะบัะพ ะบะฝะพะฟะบะฐ turbo ะฝะต ะฒะฒัะผะบะฝะตะฝะฐ$N$Nะทะผะตะฝััั yolo ัะฐะบัะพั ะฝะฐ ะบัะธั
ัั; ะฟะตัะตะฒัััั, ัะธ ะฒัะดะฟะพะฒัะดะฐััั ัะฐัะพะฒั ะผััะบะธ ัะฐะนะปัะฒ ะฝะฐ ัะตัะฒะตัั ะฒะฐัะธะผ$N$Nัะตะพัะตัะธัะฝะพ, ะฟะพะฒะธะฝะฝะพ ะทะปะพะฒะธัะธ ะฑัะปัััััั ะฝะตะทะฐะฒะตััะตะฝะธั
/ ะฟะพัะบะพะดะถะตะฝะธั
ะทะฐะฒะฐะฝัะฐะถะตะฝั, ะฐะปะต ะฝะต ั ะทะฐะผัะฝะพั ะฒะธะบะพะฝะฐะฝะฝั ะฟะตัะตะฒััะบะธ ะท ะฒะธะผะบะฝะตะฝะธะผ turbo ะฟะพััะผ\">date-chk",
-
- "cut_u2sz": "ัะพะทะผัั (ั MiB) ะบะพะถะฝะพะณะพ ััะฐะณะผะตะฝัะฐ ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั; ะฒะตะปะธะบั ะทะฝะฐัะตะฝะฝั ะบัะฐัะต ะปะตัััั ัะตัะตะท ะฐัะปะฐะฝัะธัะฝะธะน ะพะบะตะฐะฝ. ะกะฟัะพะฑัะนัะต ะฝะธะทัะบั ะทะฝะฐัะตะฝะฝั ะฝะฐ ะดัะถะต ะฝะตะฝะฐะดัะนะฝะธั
ะท'ัะดะฝะฐะฝะฝัั
",
-
- "cut_flag": "ะฟะตัะตะบะพะฝะฐัะธัั, ัะพ ะปะธัะต ะพะดะฝะฐ ะฒะบะปะฐะดะบะฐ ะทะฐะฒะฐะฝัะฐะถัั ะพะดะฝะพัะฐัะฝะพ $N -- ัะฝัั ะฒะบะปะฐะดะบะธ ัะฐะบะพะถ ะฟะพะฒะธะฝะฝั ะผะฐัะธ ัะต ะฒะฒัะผะบะฝะตะฝะต $N -- ะฒะฟะปะธะฒะฐั ะปะธัะต ะฝะฐ ะฒะบะปะฐะดะบะธ ะฝะฐ ัะพะผั ัะฐะผะพะผั ะดะพะผะตะฝั",
-
- "cut_az": "ะทะฐะฒะฐะฝัะฐะถัะฒะฐัะธ ัะฐะนะปะธ ะฒ ะฐะปัะฐะฒััะฝะพะผั ะฟะพััะดะบั, ะฐ ะฝะต ะฒัะด ะฝะฐะนะผะตะฝัะพะณะพ ัะฐะนะปั$N$Nะฐะปัะฐะฒััะฝะธะน ะฟะพััะดะพะบ ะผะพะถะต ะฟะพะปะตะณัะธัะธ ะพะณะปัะด, ัะบัะพ ัะพัั ะฟััะปะพ ะฝะต ัะฐะบ ะฝะฐ ัะตัะฒะตัั, ะฐะปะต ัะพะฑะธัั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ััะพั
ะธ ะฟะพะฒัะปัะฝััะธะผ ะฝะฐ fiber / LAN",
-
- "cut_nag": "ัะฟะพะฒััะตะฝะฝั ะะก ะฟััะปั ะทะฐะฒะตััะตะฝะฝั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั$N(ััะปัะบะธ ัะบัะพ ะฑัะฐัะทะตั ะฐะฑะพ ะฒะบะปะฐะดะบะฐ ะฝะต ะฐะบัะธะฒะฝั)",
- "cut_sfx": "ะทะฒัะบะพะฒะธะน ัะธะณะฝะฐะป ะฟััะปั ะทะฐะฒะตััะตะฝะฝั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั$N(ััะปัะบะธ ัะบัะพ ะฑัะฐัะทะตั ะฐะฑะพ ะฒะบะปะฐะดะบะฐ ะฝะต ะฐะบัะธะฒะฝั)",
-
- "cut_mt": "ะฒะธะบะพัะธััะพะฒัะฒะฐัะธ ะฑะฐะณะฐัะพะฟะพัะพะบะพะฒัััั ะดะปั ะฟัะธัะบะพัะตะฝะฝั ั
ะตััะฒะฐะฝะฝั ัะฐะนะปัะฒ$N$Nัะต ะฒะธะบะพัะธััะพะฒัั ะฒะตะฑ-ะฒะพัะบะตัะธ ั ะฟะพััะตะฑัั$Nะฑัะปััะต ะฟะฐะผ'ััั (ะดะพ 512 MiB ะดะพะดะฐัะบะพะฒะพ)$N$Nัะพะฑะธัั https ะฝะฐ 30% ัะฒะธะดัะต, http ั 4.5 ัะฐะทะธ ัะฒะธะดัะต\">mt",
-
- "cut_wasm": "ะฒะธะบะพัะธััะพะฒัะฒะฐัะธ wasm ะทะฐะผัััั ะฒะฑัะดะพะฒะฐะฝะพะณะพ ั
ะตัะตัะฐ ะฑัะฐัะทะตัะฐ; ะฟะพะบัะฐััั ัะฒะธะดะบัััั ั ะฑัะฐัะทะตัะฐั
ะฝะฐ ะฑะฐะทั chrome, ะฐะปะต ะทะฑัะปัััั ะฝะฐะฒะฐะฝัะฐะถะตะฝะฝั CPU, ะฟะปัั ะฑะฐะณะฐัะพ ััะฐัะธั
ะฒะตัััะน chrome ะผะฐััั ะฑะฐะณะธ, ัะบั ะทะผัััััั ะฑัะฐัะทะตั ัะฟะพะถะธะฒะฐัะธ ะฒัั ะฟะฐะผ'ััั ั ะฒะธะปััะฐัะธ, ัะบัะพ ัั ะพะฟััั ะฒะฒัะผะบะฝะตะฝะฐะฐ\">wasm",
-
- "cft_text": "ัะตะบัั favicon (ะฟะพัะพะถะฝัะน ั ะพะฝะพะฒะธัะธ ะดะปั ะฒัะดะบะปััะตะฝะฝั)",
- "cft_fg": "ะบะพะปัั ะฟะตัะตะดะฝัะพะณะพ ะฟะปะฐะฝั",
- "cft_bg": "ะบะพะปัั ัะพะฝั",
-
- "cdt_lim": "ะผะฐะบัะธะผะฐะปัะฝะฐ ะบัะปัะบัััั ัะฐะนะปัะฒ ะดะปั ะฟะพะบะฐะทั ะฒ ะฟะฐะฟัั",
- "cdt_ask": "ะฟัะธ ะฟัะพะบััััั ะดะพ ะฝะธะทั,$Nะทะฐะผัััั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ะฑัะปััะต ัะฐะนะปัะฒ,$Nะทะฐะฟะธัะฐัะธ, ัะพ ัะพะฑะธัะธ",
- "cdt_hsort": "ัะบัะปัะบะธ ะฟัะฐะฒะธะป ัะพัััะฒะฐะฝะฝั (<code>,sorthref</code>) ะฒะบะปััะฐัะธ ะฒ ะผะตะดัะฐ-URL. ะััะฐะฝะพะฒะปะตะฝะฝั ััะพะณะพ ะฒ 0 ัะฐะบะพะถ ะฑัะดะต ัะณะฝะพััะฒะฐัะธ ะฟัะฐะฒะธะปะฐ ัะพัััะฒะฐะฝะฝั, ะฒะบะปััะตะฝั ะฒ ะผะตะดัะฐ ะฟะพัะธะปะฐะฝะฝั ะฟัะธ ัั
ะฝะฐัะธัะบะฐะฝะฝั",
-
- "tt_entree": "ะฟะพะบะฐะทะฐัะธ ะฟะฐะฝะตะปั ะฝะฐะฒัะณะฐััั (ะฑััะฝะฐ ะฟะฐะฝะตะปั ะดะตัะตะฒะฐ ะบะฐัะฐะปะพะณัะฒ)$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: B",
- "tt_detree": "ะฟะพะบะฐะทะฐัะธ ั
ะปัะฑะฝั ะบัะธั
ัะธ$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: B",
- "tt_visdir": "ะฟัะพะบัััะธัะธ ะดะพ ะฒะธะฑัะฐะฝะพั ะฟะฐะฟะบะธ",
- "tt_ftree": "ะฟะตัะตะผะบะฝััะธ ะดะตัะตะฒะพ ะฟะฐะฟะพะบ / ัะตะบััะพะฒั ัะฐะนะปะธ$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: V",
- "tt_pdock": "ะฟะพะบะฐะทะฐัะธ ะฑะฐััะบัะฒััะบั ะฟะฐะฟะบะธ ะฒ ะทะฐะบััะฟะปะตะฝัะน ะฟะฐะฝะตะปั ะทะฒะตัั
ั",
- "tt_dynt": "ะฐะฒัะพะผะฐัะธัะฝะพ ะทะฑัะปัััะฒะฐัะธัั ะฟัะธ ัะพะทัะธัะตะฝะฝั ะดะตัะตะฒะฐ",
- "tt_wrap": "ะฟะตัะตะฝะตัะตะฝะฝั ัะปัะฒ",
- "tt_hover": "ะฟะพะบะฐะทัะฒะฐัะธ ะฟะตัะตะฟะพะฒะฝะตะฝั ััะดะบะธ ะฟัะธ ะฝะฐะฒะตะดะตะฝะฝั$N( ะฟะพััััั ะฟัะพะบัััะบั, ัะบัะพ ะบัััะพั $N ะผะธัั ะฝะต ะทะฝะฐั
ะพะดะธัััั ะฒ ะปัะฒะพะผั ะฒัะดัััะฟั )",
-
- "ml_pmode": "ะฒ ะบัะฝัั ะฟะฐะฟะบะธ...",
- "ml_btns": "ะบะพะผะฐะฝะดะธ",
- "ml_tcode": "ััะฐะฝัะบะพะดัะฒะฐัะธ",
- "ml_tcode2": "ััะฐะฝัะบะพะดัะฒะฐัะธ ะฒ",
- "ml_tint": "ะฒัะดััะฝะพะบ",
- "ml_eq": "ะฐัะดัะพ ะตะบะฒะฐะปะฐะนะทะตั",
- "ml_drc": "ะบะพะผะฟัะตัะพั ะดะธะฝะฐะผััะฝะพะณะพ ะดัะฐะฟะฐะทะพะฝั",
-
- "mt_loop": "ะทะฐัะธะบะปะธัะธ/ะฟะพะฒัะพัะธัะธ ะพะดะฝั ะฟััะฝั\">๐",
- "mt_one": "ะทัะฟะธะฝะธัะธ ะฟััะปั ะพะดะฝััั ะฟััะฝั\">1๏ธโฃ",
- "mt_shuf": "ะฟะตัะตะผััะฐัะธ ะฟััะฝั ะฒ ะบะพะถะฝัะน ะฟะฐะฟัั\">๐",
- "mt_aplay": "ะฐะฒัะพะฒัะดัะฒะพัะตะฝะฝั, ัะบัะพ ั ID ะฟััะฝั ะฒ ะฟะพัะธะปะฐะฝะฝั, ะฟะพ ัะบะพะผั ะฒะธ ะบะปะฐัะฝัะปะธ ะดะปั ะดะพัััะฟั ะดะพ ัะตัะฒะตัะฐ$N$Nะฒัะดะบะปััะตะฝะฝั ััะพะณะพ ัะฐะบะพะถ ะทัะฟะธะฝะธัั ะพะฝะพะฒะปะตะฝะฝั URL ััะพััะฝะบะธ ะท ID ะฟััะตะฝั ะฟัะด ัะฐั ะฒัะดัะฒะพัะตะฝะฝั ะผัะทะธะบะธ, ัะพะฑ ะทะฐะฟะพะฑัะณัะธ ะฐะฒัะพะฒัะดัะฒะพัะตะฝะฝั, ัะบัะพ ัั ะฝะฐะปะฐัััะฒะฐะฝะฝั ะฒััะฐัะตะฝั, ะฐะปะต URL ะทะฐะปะธัะฐััััั\">aโถ",
- "mt_preload": "ะฟะพัะฐัะธ ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ะฝะฐัััะฟะฝะพั ะฟััะฝั ะฑะปะธะถัะต ะดะพ ะบัะฝัั ะดะปั ะฑะตะทะฟะตัะตัะฒะฝะพะณะพ ะฒัะดัะฒะพัะตะฝะฝั\">preload",
- "mt_prescan": "ะฟะตัะตะนัะธ ะดะพ ะฝะฐัััะฟะฝะพั ะฟะฐะฟะบะธ ะฟะตัะตะด ัะธะผ, ัะบ ะพััะฐะฝะฝั ะฟััะฝั$Nะทะฐะบัะฝัะธัััั, ะฟัะดััะธะผัััะธ ะฒะตะฑ-ะฑัะฐัะทะตั ั ัะพะฑะพัะพะผั ััะฐะฝั$Nัะพะฑ ะฒัะฝ ะฝะต ะทัะฟะธะฝะธะฒ ะฒัะดัะฒะพัะตะฝะฝั\">nav",
- "mt_fullpre": "ัะฟัะพะฑัะฒะฐัะธ ะฟะพะฟะตัะตะดะฝัะพ ะทะฐะฒะฐะฝัะฐะถะธัะธ ะฒัั ะฟััะฝั;$Nโ
ัะฒัะผะบะฝััั ะฝะฐ ะฝะตะฝะฐะดัะนะฝะธั
ะท'ัะดะฝะฐะฝะฝัั
,$Nโ ะฒะธะผะบะฝััั ะฝะฐ ะฟะพะฒัะปัะฝะธั
ะท'ัะดะฝะฐะฝะฝัั
, ะนะผะพะฒััะฝะพ\">full",
- "mt_fau": "ะฝะฐ ัะตะปะตัะพะฝะฐั
, ะทะฐะฟะพะฑัะณัะธ ะทัะฟะธะฝัั ะผัะทะธะบะธ, ัะบัะพ ะฝะฐัััะฟะฝะฐ ะฟััะฝั ะฝะต ะทะฐะฒะฐะฝัะฐะถัััััั ะดะพััะฐัะฝัะพ ัะฒะธะดะบะพ (ะผะพะถะต ะทัะพะฑะธัะธ ะฒัะดะพะฑัะฐะถะตะฝะฝั ัะตะณัะฒ ะณะปััะฝะธะผ)\">โ๏ธ",
- "mt_waves": "ัะผัะณะฐ ั
ะฒะธะปัะพะฒะพั ัะพัะผะธ:$Nะฟะพะบะฐะทะฐัะธ ะฐะผะฟะปัััะดั ะฐัะดัะพ ะฒ ะฟะพะฒะทัะฝะบั\">~s",
- "mt_npclip": "ะฟะพะบะฐะทะฐัะธ ะบะฝะพะฟะบะธ ะดะปั ะบะพะฟััะฒะฐะฝะฝั ะดะพ ะฑััะตัะฐ ะฟะพัะพัะฝะพั ะฟััะฝั, ัะพ ะฒัะดัะฒะพััััััั\">/np",
- "mt_m3u_c": "ะฟะพะบะฐะทะฐัะธ ะบะฝะพะฟะบะธ ะดะปั ะบะพะฟััะฒะฐะฝะฝั ะดะพ ะฑััะตัะฐ$Nะฒะธะฑัะฐะฝะธั
ะฟััะตะฝั ัะบ ะทะฐะฟะธัะธ ะฟะปะตะนะปะธััั m3u8\">๐ป",
- "mt_octl": "ัะฝัะตะณัะฐััั ะท ะะก (ะผะตะดัะฐ ะณะฐัััั ะบะปะฐะฒััั / osd)\">os-ctl",
- "mt_oseek": "ะดะพะทะฒะพะปะธัะธ ะฟะตัะตะผะพััะฒะฐะฝะฝั ัะตัะตะท ัะฝัะตะณัะฐััั ะท ะะก$N$Nะทะฐัะฒะฐะถะตะฝะฝั: ะฝะฐ ะดะตัะบะธั
ะฟัะธัััะพัั
(iPhone),$Nัะต ะทะฐะผัะฝัั ะบะฝะพะฟะบั ะฝะฐัััะฟะฝะพั ะฟััะฝั\">seek",
- "mt_oscv": "ะฟะพะบะฐะทะฐัะธ ะพะฑะบะปะฐะดะธะฝะบั ะฐะปัะฑะพะผั ะฒ osd\">art",
- "mt_follow": "ััะธะผะฐัะธ ััะตะบ, ัะพ ะฒัะดัะฒะพััััััั, ั ะฟะพะปั ะทะพัั\">๐ฏ",
- "mt_compact": "ะบะพะผะฟะฐะบัะฝั ะตะปะตะผะตะฝัะธ ะบะตััะฒะฐะฝะฝั\">โ",
- "mt_uncache": "ะพัะธััะธัะธ ะบะตั (ัะฟัะพะฑัะนัะต ัะต, ัะบัะพ ะฒะฐั ะฑัะฐัะทะตั ะทะฐะบะตััะฒะฐะฒ$Nะฟะพัะบะพะดะถะตะฝั ะบะพะฟัั ะฟััะฝั, ัะพะผั ะฒัะดะผะพะฒะปัััััั ัั ะฒัะดัะฒะพััะฒะฐัะธ)\">uncache",
- "mt_mloop": "ะทะฐัะธะบะปะธัะธ ะฒัะดะบัะธัั ะฟะฐะฟะบั\">๐ loop",
- "mt_mnext": "ะทะฐะฒะฐะฝัะฐะถะธัะธ ะฝะฐัััะฟะฝั ะฟะฐะฟะบั ั ะฟัะพะดะพะฒะถะธัะธ\">๐ next",
- "mt_mstop": "ะทัะฟะธะฝะธัะธ ะฒัะดัะฒะพัะตะฝะฝั\">โธ stop",
- "mt_cflac": "ะบะพะฝะฒะตัััะฒะฐัะธ flac / wav ะฒ {0}\">flac",
- "mt_caac": "ะบะพะฝะฒะตัััะฒะฐัะธ aac / m4a ะฒ {0}\">aac",
- "mt_coth": "ะบะพะฝะฒะตัััะฒะฐัะธ ะฒัั ัะฝัั (ะฝะต mp3) ะฒ {0}\">oth",
- "mt_c2opus": "ะฝะฐะนะบัะฐัะธะน ะฒะธะฑัั ะดะปั ัะพะฑะพัะธั
ััะพะปัะฒ, ะฝะพััะฑัะบัะฒ, android\">opus",
- "mt_c2owa": "opus-weba, ะดะปั iOS 17.5 ั ะฝะพะฒััะธั
\">owa",
- "mt_c2caf": "opus-caf, ะดะปั iOS 11 ะดะพ 17\">caf",
- "mt_c2mp3": "ะฒะธะบะพัะธััะพะฒัะนัะต ัะต ะฝะฐ ะดัะถะต ััะฐัะธั
ะฟัะธัััะพัั
\">mp3",
- "mt_c2flac": "ะฝะฐะนะบัะฐัะฐ ัะบัััั ะทะฒัะบั, ะฐะปะต ะฒะตะปะธะบั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั\">flac", //m
- "mt_c2wav": "ะฒัะดัะฒะพัะตะฝะฝั ะฑะตะท ััะธัะฝะตะฝะฝั (ัะต ะฑัะปััะต)\">wav", //m
- "mt_c2ok": "ะณะฐัะฝะพ, ั
ะพัะพัะธะน ะฒะธะฑัั",
- "mt_c2nd": "ัะต ะฝะต ัะตะบะพะผะตะฝะดะพะฒะฐะฝะธะน ะฒะธั
ัะดะฝะธะน ัะพัะผะฐั ะดะปั ะฒะฐัะพะณะพ ะฟัะธัััะพั, ะฐะปะต ัะต ะฝะพัะผะฐะปัะฝะพ",
- "mt_c2ng": "ะฒะฐั ะฟัะธััััะน, ะทะดะฐััััั, ะฝะต ะฟัะดััะธะผัั ัะตะน ะฒะธั
ัะดะฝะธะน ัะพัะผะฐั, ะฐะปะต ะดะฐะฒะฐะนัะต ะฒัะต ะพะดะฝะพ ัะฟัะพะฑััะผะพ",
- "mt_xowa": "ั ะฑะฐะณะธ ะฒ iOS, ัะบั ะทะฐะฟะพะฑัะณะฐััั ัะพะฝะพะฒะพะผั ะฒัะดัะฒะพัะตะฝะฝั ะท ะฒะธะบะพัะธััะฐะฝะฝัะผ ััะพะณะพ ัะพัะผะฐัั; ะฑัะดั ะปะฐัะบะฐ, ะฒะธะบะพัะธััะพะฒัะนัะต caf ะฐะฑะพ mp3 ะทะฐะผัััั ััะพะณะพ",
- "mt_tint": "ััะฒะตะฝั ัะพะฝั (0-100) ะฝะฐ ัะผัะทั ะฟะตัะตะผะพััะฒะฐะฝะฝั$Nัะพะฑ ะทัะพะฑะธัะธ ะฑััะตัะธะทะฐััั ะผะตะฝั ะฒัะดะฒะตััะฐััะพั",
- "mt_eq": "ะฒะผะธะบะฐั ะตะบะฒะฐะปะฐะนะทะตั ั ะบะพะฝััะพะปั ะฟะพัะธะปะตะฝะฝั;$N$Nะฟะพัะธะปะตะฝะฝั <code>0</code> = ััะฐะฝะดะฐััะฝะฐ 100% ะณััะฝัััั (ะฝะตะผะพะดะธััะบะพะฒะฐะฝะฐ)$N$Nัะธัะธะฝะฐ <code>1 </code> = ััะฐะฝะดะฐััะฝะต ััะตัะตะพ (ะฝะตะผะพะดะธััะบะพะฒะฐะฝะต)$Nัะธัะธะฝะฐ <code>0.5</code> = 50% ะฟะตัะตั
ัะตัะฝะต ะถะธะฒะปะตะฝะฝั ะปัะฒะพ-ะฟัะฐะฒะพ$Nัะธัะธะฝะฐ <code>0 </code> = ะผะพะฝะพ$N$Nะฟะพัะธะปะตะฝะฝั <code>-0.8</code> & ัะธัะธะฝะฐ <code>10</code> = ะฒะธะดะฐะปะตะฝะฝั ะฒะพะบะฐะปั :^)$N$Nะฒะบะปััะตะฝะฝั ะตะบะฒะฐะปะฐะนะทะตัะฐ ัะพะฑะธัั ะฑะตะทัะพะฒะฝั ะฐะปัะฑะพะผะธ ะฟะพะฒะฝัััั ะฑะตะทัะพะฒะฝะธะผะธ, ัะพะผั ะทะฐะปะธัะฐะนัะต ะนะพะณะพ ัะฒัะผะบะฝะตะฝะธะผ ะท ัััะผะฐ ะทะฝะฐัะตะฝะฝัะผะธ ะฒ ะฝัะปั (ะพะบััะผ ัะธัะธะฝะธ = 1), ัะบัะพ ะฒะฐะผ ัะต ะฒะฐะถะปะธะฒะพ",
- "mt_drc": "ะฒะผะธะบะฐั ะบะพะผะฟัะตัะพั ะดะธะฝะฐะผััะฝะพะณะพ ะดัะฐะฟะฐะทะพะฝั (ะฒะธััะฒะฝัะฒะฐั ะณััะฝะพััั / ัะตะณะปะพะฒะธะน ะฒะฐะป); ัะฐะบะพะถ ัะฒัะผะบะฝะต EQ ะดะปั ะฑะฐะปะฐะฝััะฒะฐะฝะฝั ัะฟะฐะณะตัั, ัะพะผั ะฒััะฐะฝะพะฒััั ะฒัั ะฟะพะปั EQ ะพะบััะผ 'width' ะฒ 0, ัะบัะพ ะฒะธ ััะพะณะพ ะฝะต ั
ะพัะตัะต$N$Nะทะฝะธะถัั ะณััะฝัััั ะฐัะดัะพ ะฒะธัะต THRESHOLD ะดะ; ะดะปั ะบะพะถะฝะพะณะพ RATIO ะดะ ะฟะพะฝะฐะด THRESHOLD ั 1 ะดะ ะฒะธั
ะพะดั, ัะพะผั ััะฐะฝะดะฐััะฝั ะทะฝะฐัะตะฝะฝั tresh -24 ั ratio 12 ะพะทะฝะฐัะฐััั, ัะพ ะฒัะฝ ะฝัะบะพะปะธ ะฝะต ะฟะพะฒะธะฝะตะฝ ััะฐัะธ ะณััะฝััะธะผ ะทะฐ -22 ะดะ ั ะฑะตะทะฟะตัะฝะพ ะทะฑัะปััะธัะธ ะฟะพัะธะปะตะฝะฝั ะตะบะฒะฐะปะฐะนะทะตัะฐ ะดะพ 0.8, ะฐะฑะพ ะฝะฐะฒััั 1.8 ะท ATK 0 ั ะฒะตะปะธัะตะทะฝะธะผ RLS ัะบ 90 (ะฟัะฐััั ััะปัะบะธ ะฒ firefox; RLS ะผะฐะบัะธะผัะผ 1 ะฒ ัะฝัะธั
ะฑัะฐัะทะตัะฐั
)$N$N(ะดะธะฒััััั ะฒัะบัะฟะตะดัั, ะฒะพะฝะธ ะฟะพััะฝัััั ัะต ะฝะฐะฑะฐะณะฐัะพ ะบัะฐัะต)",
-
- "mb_play": "ะฒัะดัะฒะพัะธัะธ",
- "mm_hashplay": "ะฒัะดัะฒะพัะธัะธ ัะตะน ะฐัะดัะพ ัะฐะนะป?",
- "mm_m3u": "ะฝะฐัะธัะฝััั Enter/ะะฐัะฐะทะด ะดะปั ะฒัะดัะฒะพัะตะฝะฝั\nะฝะฐัะธัะฝััั ESC/ะกะบะฐััะฒะฐัะธ ะดะปั ัะตะดะฐะณัะฒะฐะฝะฝั",
- "mp_breq": "ะฟะพัััะฑะตะฝ firefox 82+ ะฐะฑะพ chrome 73+ ะฐะฑะพ iOS 15+",
- "mm_bload": "ะทะฐัะฐะท ะทะฐะฒะฐะฝัะฐะถัััััั...",
- "mm_bconv": "ะบะพะฝะฒะตัััััััั ะฒ {0}, ะฑัะดั ะปะฐัะบะฐ, ะทะฐัะตะบะฐะนัะต...",
- "mm_opusen": "ะฒะฐั ะฑัะฐัะทะตั ะฝะต ะผะพะถะต ะฒัะดัะฒะพััะฒะฐัะธ aac / m4a ัะฐะนะปะธ;\nััะฐะฝัะบะพะดัะฒะฐะฝะฝั ะฒ opus ัะตะฟะตั ัะฒัะผะบะฝะตะฝะพ",
- "mm_playerr": "ะฒัะดัะฒะพัะตะฝะฝั ะฝะตะฒะดะฐะปะต: ",
- "mm_eabrt": "ะกะฟัะพะฑะฐ ะฒัะดัะฒะพัะตะฝะฝั ะฑัะปะฐ ัะบะฐัะพะฒะฐะฝะฐ",
- "mm_enet": "ะะฐัะต ัะฝัะตัะฝะตั-ะท'ัะดะฝะฐะฝะฝั ะฝะตััะฐะฑัะปัะฝะต",
- "mm_edec": "ะฆะตะน ัะฐะนะป ะฝัะฑะธัะพ ะฟะพัะบะพะดะถะตะฝะธะน??",
- "mm_esupp": "ะะฐั ะฑัะฐัะทะตั ะฝะต ัะพะทัะผัั ัะตะน ะฐัะดัะพ ัะพัะผะฐั",
- "mm_eunk": "ะะตะฒัะดะพะผะฐ ะฟะพะผะธะปะบะฐ",
- "mm_e404": "ะะต ะฒะดะฐะปะพัั ะฒัะดัะฒะพัะธัะธ ะฐัะดัะพ; ะฟะพะผะธะปะบะฐ 404: ะคะฐะนะป ะฝะต ะทะฝะฐะนะดะตะฝะพ.",
- "mm_e403": "ะะต ะฒะดะฐะปะพัั ะฒัะดัะฒะพัะธัะธ ะฐัะดัะพ; ะฟะพะผะธะปะบะฐ 403: ะะพัััะฟ ะทะฐะฑะพัะพะฝะตะฝะพ.\n\nะกะฟัะพะฑัะนัะต ะฝะฐัะธัะฝััะธ F5 ะดะปั ะฟะตัะตะทะฐะฒะฐะฝัะฐะถะตะฝะฝั, ะผะพะถะปะธะฒะพ, ะฒะธ ะฒะธะนัะปะธ ะท ัะธััะตะผะธ",
- "mm_e500": "ะะต ะฒะดะฐะปะพัั ะฒัะดัะฒะพัะธัะธ ะฐัะดัะพ; ะฟะพะผะธะปะบะฐ 500: ะะตัะตะฒัััะต ะปะพะณะธ ัะตัะฒะตัะฐ.",
- "mm_e5xx": "ะะต ะฒะดะฐะปะพัั ะฒัะดัะฒะพัะธัะธ ะฐัะดัะพ; ะฟะพะผะธะปะบะฐ ัะตัะฒะตัะฐ ",
- "mm_nof": "ะฝะต ะทะฝะฐั
ะพะดะถั ะฑัะปััะต ะฐัะดัะพ ัะฐะนะปัะฒ ะฟะพะฑะปะธะทั",
- "mm_prescan": "ะจัะบะฐั ะผัะทะธะบั ะดะปั ะฝะฐัััะฟะฝะพะณะพ ะฒัะดัะฒะพัะตะฝะฝั...",
- "mm_scank": "ะะฝะฐะนัะพะฒ ะฝะฐัััะฟะฝั ะฟััะฝั:",
- "mm_uncache": "ะบะตั ะพัะธัะตะฝะพ; ะฒัั ะฟััะฝั ะฑัะดััั ะฟะตัะตะทะฐะฒะฐะฝัะฐะถะตะฝั ะฟัะธ ะฝะฐัััะฟะฝะพะผั ะฒัะดัะฒะพัะตะฝะฝั",
- "mm_hnf": "ัั ะฟััะฝั ะฑัะปััะต ะฝะต ััะฝัั",
-
- "im_hnf": "ัะต ะทะพะฑัะฐะถะตะฝะฝั ะฑัะปััะต ะฝะต ััะฝัั",
-
- "f_empty": 'ัั ะฟะฐะฟะบะฐ ะฟะพัะพะถะฝั',
- "f_chide": 'ัะต ะฟัะธั
ะพะฒะฐั ััะพะฒะฟะตัั ยซ{0}ยป\n\nะฒะธ ะผะพะถะตัะต ะฟะพะบะฐะทะฐัะธ ััะพะฒะฟัั ะฒ ะฒะบะปะฐะดัั ะฝะฐะปะฐัััะฒะฐะฝั',
- "f_bigtxt": "ัะตะน ัะฐะนะป ัะพะทะผััะพะผ {0} MiB -- ะดัะนัะฝะพ ะฟะตัะตะณะปัะดะฐัะธ ัะบ ัะตะบัั?",
- "f_bigtxt2": "ะฟะตัะตะณะปัะฝััะธ ะปะธัะต ะบัะฝะตัั ัะฐะนะปั ะทะฐะผัััั ััะพะณะพ? ัะต ัะฐะบะพะถ ัะฒัะผะบะฝะต ะฒัะดัะปัะดะบะพะฒัะฒะฐะฝะฝั/tailing, ะฟะพะบะฐะทัััะธ ะฝะพะฒะพะดะพะดะฐะฝั ััะดะบะธ ัะตะบััั ะฒ ัะตะฐะปัะฝะพะผั ัะฐัั",
- "fbd_more": '',
- "fbd_all": '',
- "f_anota": "ะปะธัะต {0} ะท {1} ะตะปะตะผะตะฝััะฒ ะฑัะปะพ ะฒะธะฑัะฐะฝะพ;\nัะพะฑ ะฒะธะฑัะฐัะธ ะฒัั ะฟะฐะฟะบั, ัะฟะพัะฐัะบั ะฟัะพะบัััััั ะดะพ ะฝะธะทั",
-
- "f_dls": 'ะฟะพัะธะปะฐะฝะฝั ะฝะฐ ัะฐะนะปะธ ะฒ ะฟะพัะพัะฝัะน ะฟะฐะฟัั ะฑัะปะธ\nะทะผัะฝะตะฝั ะฝะฐ ะฟะพัะธะปะฐะฝะฝั ะดะปั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั',
-
- "f_partial": "ะฉะพะฑ ะฑะตะทะฟะตัะฝะพ ะทะฐะฒะฐะฝัะฐะถะธัะธ ัะฐะนะป, ัะบะธะน ะทะฐัะฐะท ะทะฐะฒะฐะฝัะฐะถัััััั, ะฑัะดั ะปะฐัะบะฐ, ะบะปะฐัะฝััั ะฝะฐ ัะฐะนะป, ัะบะธะน ะผะฐั ัะฐะบะต ัะฐะผะต ัะผ'ั, ะฐะปะต ะฑะตะท ัะพะทัะธัะตะฝะฝั .PARTIAL. ะัะดั ะปะฐัะบะฐ, ะฝะฐัะธัะฝััั ะกะบะฐััะฒะฐัะธ ะฐะฑะพ Escape, ัะพะฑ ะทัะพะฑะธัะธ ัะต.\n\nะะฐัะธัะฝะตะฝะฝั ะะฐัะฐะทะด / Enter ะฟัะพัะณะฝะพััั ัะต ะฟะพะฟะตัะตะดะถะตะฝะฝั ั ะฟัะพะดะพะฒะถะธัั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั .PARTIAL ัะพะฑะพัะพะณะพ ัะฐะนะปั ะทะฐะผัััั ััะพะณะพ, ัะพ ะผะฐะนะถะต ะฝะฐะฟะตะฒะฝะพ ะดะฐััั ะฒะฐะผ ะฟะพัะบะพะดะถะตะฝั ะดะฐะฝั.",
-
- "ft_paste": "ะฒััะฐะฒะธัะธ {0} ะตะปะตะผะตะฝััะฒ$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: ctrl-V",
- "fr_eperm": 'ะฝะต ะผะพะถั ะฟะตัะตะนะผะตะฝัะฒะฐัะธ:\nั ะฒะฐั ะฝะตะผะฐั ะดะพะทะฒะพะปั โะฟะตัะตะผััะตะฝะฝัโ ะฒ ััะน ะฟะฐะฟัั',
- "fd_eperm": 'ะฝะต ะผะพะถั ะฒะธะดะฐะปะธัะธ:\nั ะฒะฐั ะฝะตะผะฐั ะดะพะทะฒะพะปั โะฒะธะดะฐะปะตะฝะฝัโ ะฒ ััะน ะฟะฐะฟัั',
- "fc_eperm": 'ะฝะต ะผะพะถั ะฒะธััะทะฐัะธ:\nั ะฒะฐั ะฝะตะผะฐั ะดะพะทะฒะพะปั โะฟะตัะตะผััะตะฝะฝัโ ะฒ ััะน ะฟะฐะฟัั',
- "fp_eperm": 'ะฝะต ะผะพะถั ะฒััะฐะฒะธัะธ:\nั ะฒะฐั ะฝะตะผะฐั ะดะพะทะฒะพะปั โะทะฐะฟะธััโ ะฒ ััะน ะฟะฐะฟัั',
- "fr_emore": "ะฒะธะฑะตัััั ะฟัะธะฝะฐะนะผะฝั ะพะดะธะฝ ะตะปะตะผะตะฝั ะดะปั ะฟะตัะตะนะผะตะฝัะฒะฐะฝะฝั",
- "fd_emore": "ะฒะธะฑะตัััั ะฟัะธะฝะฐะนะผะฝั ะพะดะธะฝ ะตะปะตะผะตะฝั ะดะปั ะฒะธะดะฐะปะตะฝะฝั",
- "fc_emore": "ะฒะธะฑะตัััั ะฟัะธะฝะฐะนะผะฝั ะพะดะธะฝ ะตะปะตะผะตะฝั ะดะปั ะฒะธััะทะฐะฝะฝั",
- "fcp_emore": "ะฒะธะฑะตัััั ะฟัะธะฝะฐะนะผะฝั ะพะดะธะฝ ะตะปะตะผะตะฝั ะดะปั ะบะพะฟััะฒะฐะฝะฝั ะดะพ ะฑััะตัะฐ",
-
- "fs_sc": "ะฟะพะดัะปะธัะธัั ะฟะฐะฟะบะพั, ะฒ ัะบัะน ะฒะธ ะทะฝะฐั
ะพะดะธัะตัั",
- "fs_ss": "ะฟะพะดัะปะธัะธัั ะฒะธะฑัะฐะฝะธะผะธ ัะฐะนะปะฐะผะธ",
- "fs_just1d": "ะฒะธ ะฝะต ะผะพะถะตัะต ะฒะธะฑัะฐัะธ ะฑัะปััะต ะพะดะฝััั ะฟะฐะฟะบะธ,\nะฐะฑะพ ะทะผัััะฒะฐัะธ ัะฐะนะปะธ ั ะฟะฐะฟะบะธ ะฒ ะพะดะฝะพะผั ะฒะธะฑะพัั",
- "fs_abrt": "โ ัะบะฐััะฒะฐัะธ",
- "fs_rand": "๐ฒ ะฒะธะฟะฐะดะบ.ัะผ'ั",
- "fs_go": "โ
ััะฒะพัะธัะธ ัะฟัะปัะฝะธะน ะดะพัััะฟ",
- "fs_name": "ัะผ'ั",
- "fs_src": "ะดะถะตัะตะปะพ",
- "fs_pwd": "ะฟะฐัะพะปั",
- "fs_exp": "ัะตัะผัะฝ ะดัั",
- "fs_tmin": "ั
ะฒ",
- "fs_thrs": "ะณะพะดะธะฝ",
- "fs_tdays": "ะดะฝัะฒ",
- "fs_never": "ะฒััะฝะธะน",
- "fs_pname": "ะฝะตะพะฑะพะฒ'ัะทะบะพะฒะต ัะผ'ั ะฟะพัะธะปะฐะฝะฝั; ะฑัะดะต ะฒะธะฟะฐะดะบะพะฒะธะผ, ัะบัะพ ะฟะพัะพะถะฝั",
- "fs_tsrc": "ัะฐะนะป ะฐะฑะพ ะฟะฐะฟะบะฐ ะดะปั ัะฟัะปัะฝะพะณะพ ะดะพัััะฟั",
- "fs_ppwd": "ะฝะตะพะฑะพะฒ'ัะทะบะพะฒะธะน ะฟะฐัะพะปั",
- "fs_w8": "ััะฒะพัะตะฝะฝั ัะฟัะปัะฝะพะณะพ ะดะพัััะฟั...",
- "fs_ok": "ะฝะฐัะธัะฝััั Enter/ะะฐัะฐะทะด ะดะปั ะบะพะฟััะฒะฐะฝะฝั ะดะพ ะฑััะตัะฐ\nะฝะฐัะธัะฝััั ESC/ะกะบะฐััะฒะฐัะธ ะดะปั ะทะฐะบัะธััั",
-
- "frt_dec": "ะผะพะถะต ะฒะธะฟัะฐะฒะธัะธ ะดะตัะบั ะฒะธะฟะฐะดะบะธ ะฟะพัะบะพะดะถะตะฝะธั
ัะผะตะฝ ัะฐะนะปัะฒ\">url-decode",
- "frt_rst": "ัะบะธะฝััะธ ะทะผัะฝะตะฝั ัะผะตะฝะฐ ัะฐะนะปัะฒ ะฝะฐะทะฐะด ะดะพ ะพัะธะณัะฝะฐะปัะฝะธั
\">โบ reset",
- "frt_abrt": "ะฟะตัะตัะฒะฐัะธ ั ะทะฐะบัะธัะธ ัะต ะฒัะบะฝะพ\">โ cancel",
- "frb_apply": "ะะะกะขะะกะฃะะะขะ ะะะ ะะะะะะฃะะะะะฏ",
- "fr_adv": "ะฟะฐะบะตัะฝะต / ะผะตัะฐะดะฐะฝั / ัะฐะฑะปะพะฝะฝะต ะฟะตัะตะนะผะตะฝัะฒะฐะฝะฝั\">ัะพะทัะธัะตะฝะต",
- "fr_case": "ัะตะณัะปััะฝะธะน ะฒะธัะฐะท ะท ััะฐั
ัะฒะฐะฝะฝัะผ ัะตะณััััั\">ัะตะณัััั",
- "fr_win": "ะฑะตะทะฟะตัะฝั ะดะปั windows ัะผะตะฝะฐ; ะทะฐะผัะฝะธัะธ <>:"\\|?* ะฝะฐ ัะฟะพะฝััะบั ะฟะพะฒะฝะพัะธัะธะฝะฝั ัะธะผะฒะพะปะธ\">win",
- "fr_slash": "ะทะฐะผัะฝะธัะธ / ะฝะฐ ัะธะผะฒะพะป, ัะบะธะน ะฝะต ะฟัะธะทะฒะพะดะธัั ะดะพ ััะฒะพัะตะฝะฝั ะฝะพะฒะธั
ะฟะฐะฟะพะบ\">ะฑะตะท /",
- "fr_re": "ัะฐะฑะปะพะฝ ะฟะพััะบั ัะตะณัะปััะฝะพะณะพ ะฒะธัะฐะทั ะดะปั ะทะฐััะพััะฒะฐะฝะฝั ะดะพ ะพัะธะณัะฝะฐะปัะฝะธั
ัะผะตะฝ ัะฐะนะปัะฒ; ะณััะฟะธ ะทะฐั
ะพะฟะปะตะฝะฝั ะผะพะถะฝะฐ ะฟะพัะธะปะฐัะธัั ะฒ ะฟะพะปั ัะพัะผะฐัั ะฝะธะถัะต ัะบ <code>(1)</code> ั <code>(2)</code> ั ัะฐะบ ะดะฐะปั",
- "fr_fmt": "ะฝะฐัั
ะฝะตะฝะฝะธะน foobar2000:$N<code>(title)</code> ะทะฐะผัะฝัััััั ะฝะฐะทะฒะพั ะฟััะฝั,$N<code>[(artist) - ](title)</code> ะฟัะพะฟััะบะฐั [ัั] ัะฐััะธะฝั, ัะบัะพ ะฒะธะบะพะฝะฐะฒะตัั ะฟะพัะพะถะฝัะน$N<code>$lpad((tn),2,0)</code> ะดะพะฟะพะฒะฝัั ะฝะพะผะตั ััะตะบั ะดะพ 2 ัะธัั",
- "fr_pdel": "ะฒะธะดะฐะปะธัะธ",
- "fr_pnew": "ะทะฑะตัะตะณัะธ ัะบ",
- "fr_pname": "ะฝะฐะดะฐะนัะต ัะผ'ั ะดะปั ะฒะฐัะพะณะพ ะฝะพะฒะพะณะพ ะฟัะตัะตัั",
- "fr_aborted": "ะฟะตัะตัะฒะฐะฝะพ",
- "fr_lold": "ััะฐัะต ัะผ'ั",
- "fr_lnew": "ะฝะพะฒะต ัะผ'ั",
- "fr_tags": "ัะตะณะธ ะดะปั ะฒะธะฑัะฐะฝะธั
ัะฐะนะปัะฒ (ััะปัะบะธ ะดะปั ัะธัะฐะฝะฝั, ะปะธัะต ะดะปั ะดะพะฒัะดะบะธ):",
- "fr_busy": "ะฟะตัะตะนะผะตะฝัะฒะฐะฝะฝั {0} ะตะปะตะผะตะฝััะฒ...\n\n{1}",
- "fr_efail": "ะฟะตัะตะนะผะตะฝัะฒะฐะฝะฝั ะฝะตะฒะดะฐะปะต:\n",
- "fr_nchg": "{0} ะท ะฝะพะฒะธั
ัะผะตะฝ ะฑัะปะธ ะทะผัะฝะตะฝั ัะตัะตะท win ัะฐ/ะฐะฑะพ no /\n\nOK ะฟัะพะดะพะฒะถะธัะธ ะท ัะธะผะธ ะทะผัะฝะตะฝะธะผะธ ะฝะพะฒะธะผะธ ัะผะตะฝะฐะผะธ?",
-
- "fd_ok": "ะฒะธะดะฐะปะตะฝะฝั OK",
- "fd_err": "ะฒะธะดะฐะปะตะฝะฝั ะฝะตะฒะดะฐะปะต:\n",
- "fd_none": "ะฝััะพะณะพ ะฝะต ะฑัะปะพ ะฒะธะดะฐะปะตะฝะพ; ะผะพะถะปะธะฒะพ, ะทะฐะฑะปะพะบะพะฒะฐะฝะพ ะบะพะฝััะณััะฐัััั ัะตัะฒะตัะฐ (xbd)?",
- "fd_busy": "ะฒะธะดะฐะปะตะฝะฝั {0} ะตะปะตะผะตะฝััะฒ...\n\n{1}",
- "fd_warn1": "ะะะะะะะขะ ัั {0} ะตะปะตะผะตะฝัะธ?",
- "fd_warn2": "ะััะฐะฝะฝัะน ัะฐะฝั! ะะตะผะพะถะปะธะฒะพ ัะบะฐััะฒะฐัะธ. ะะธะดะฐะปะธัะธ?",
-
- "fc_ok": "ะฒะธััะทะฐะฝะพ {0} ะตะปะตะผะตะฝััะฒ",
- "fc_warn": 'ะฒะธััะทะฐะฝะพ {0} ะตะปะตะผะตะฝััะฒ\n\nะฐะปะต: ััะปัะบะธ ัั ะฒะบะปะฐะดะบะฐ ะฑัะฐัะทะตัะฐ ะผะพะถะต ัั
ะฒััะฐะฒะธัะธ\n(ะพัะบัะปัะบะธ ะฒะธะฑัั ะฝะฐัััะปัะบะธ ะฒะตะปะธัะตะทะฝะธะน)',
-
- "fcc_ok": "ัะบะพะฟัะนะพะฒะฐะฝะพ {0} ะตะปะตะผะตะฝััะฒ ะดะพ ะฑััะตัะฐ",
- "fcc_warn": 'ัะบะพะฟัะนะพะฒะฐะฝะพ {0} ะตะปะตะผะตะฝััะฒ ะดะพ ะฑััะตัะฐ\n\nะฐะปะต: ััะปัะบะธ ัั ะฒะบะปะฐะดะบะฐ ะฑัะฐัะทะตัะฐ ะผะพะถะต ัั
ะฒััะฐะฒะธัะธ\n(ะพัะบัะปัะบะธ ะฒะธะฑัั ะฝะฐัััะปัะบะธ ะฒะตะปะธัะตะทะฝะธะน)',
-
- "fp_apply": "ะฒะธะบะพัะธััะพะฒัะฒะฐัะธ ัั ัะผะตะฝะฐ",
- "fp_ecut": "ัะฟะพัะฐัะบั ะฒะธััะทะฐัะธ ะฐะฑะพ ัะบะพะฟััะฒะฐัะธ ะดะตัะบั ัะฐะนะปะธ / ะฟะฐะฟะบะธ ะดะปั ะฒััะฐะฒะบะธ / ะฟะตัะตะผััะตะฝะฝั\n\nะทะฐัะฒะฐะถะตะฝะฝั: ะฒะธ ะผะพะถะตัะต ะฒะธััะทะฐัะธ / ะฒััะฐะฒะปััะธ ัะตัะตะท ััะทะฝั ะฒะบะปะฐะดะบะธ ะฑัะฐัะทะตัะฐ",
- "fp_ename": "{0} ะตะปะตะผะตะฝััะฒ ะฝะต ะผะพะถััั ะฑััะธ ะฟะตัะตะผััะตะฝั ััะดะธ, ัะพะผั ัะพ ัะผะตะฝะฐ ะฒะถะต ะทะฐะนะฝััั. ะะฐะนัะต ัะผ ะฝะพะฒั ัะผะตะฝะฐ ะฝะธะถัะต ะดะปั ะฟัะพะดะพะฒะถะตะฝะฝั, ะฐะฑะพ ะทะฐะปะธััะต ัะผ'ั ะฟะพัะพะถะฝัะผ, ัะพะฑ ะฟัะพะฟัััะธัะธ ัั
:",
- "fcp_ename": "{0} ะตะปะตะผะตะฝััะฒ ะฝะต ะผะพะถััั ะฑััะธ ัะบะพะฟัะนะพะฒะฐะฝั ััะดะธ, ัะพะผั ัะพ ัะผะตะฝะฐ ะฒะถะต ะทะฐะนะฝััั. ะะฐะนัะต ัะผ ะฝะพะฒั ัะผะตะฝะฐ ะฝะธะถัะต ะดะปั ะฟัะพะดะพะฒะถะตะฝะฝั, ะฐะฑะพ ะทะฐะปะธััะต ัะผ'ั ะฟะพัะพะถะฝัะผ, ัะพะฑ ะฟัะพะฟัััะธัะธ ัั
:",
- "fp_emore": "ั ัะต ะดะตัะบั ะบะพะฝัะปัะบัะธ ัะผะตะฝ ัะฐะนะปัะฒ, ัะบั ะฟะพัััะฑะฝะพ ะฒะธะฟัะฐะฒะธัะธ",
- "fp_ok": "ะฟะตัะตะผััะตะฝะฝั OK",
- "fcp_ok": "ะบะพะฟััะฒะฐะฝะฝั OK",
- "fp_busy": "ะฟะตัะตะผััะตะฝะฝั {0} ะตะปะตะผะตะฝััะฒ...\n\n{1}",
- "fcp_busy": "ะบะพะฟััะฒะฐะฝะฝั {0} ะตะปะตะผะตะฝััะฒ...\n\n{1}",
- "fp_abrt": "ะฟะตัะตัะธะฒะฐะฝะฝั...", //m
- "fp_err": "ะฟะตัะตะผััะตะฝะฝั ะฝะตะฒะดะฐะปะต:\n",
- "fcp_err": "ะบะพะฟััะฒะฐะฝะฝั ะฝะตะฒะดะฐะปะต:\n",
- "fp_confirm": "ะฟะตัะตะผัััะธัะธ ัั {0} ะตะปะตะผะตะฝัะธ ััะดะธ?",
- "fcp_confirm": "ัะบะพะฟััะฒะฐัะธ ัั {0} ะตะปะตะผะตะฝัะธ ััะดะธ?",
- "fp_etab": 'ะฝะต ะฒะดะฐะปะพัั ะฟัะพัะธัะฐัะธ ะฑััะตั ะท ัะฝัะพั ะฒะบะปะฐะดะบะธ ะฑัะฐัะทะตัะฐ',
- "fp_name": "ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ัะฐะนะปั ะท ะฒะฐัะพะณะพ ะฟัะธัััะพั. ะะฐะนัะต ะนะพะผั ัะผ'ั:",
- "fp_both_m": 'ะฒะธะฑะตัััั, ัะพ ะฒััะฐะฒะธัะธ
Enter = ะะตัะตะผัััะธัะธ {0} ัะฐะนะปัะฒ ะท ยซ{1}ยป\nESC = ะะฐะฒะฐะฝัะฐะถะธัะธ {2} ัะฐะนะปัะฒ ะท ะฒะฐัะพะณะพ ะฟัะธัััะพั',
- "fcp_both_m": 'ะฒะธะฑะตัััั, ัะพ ะฒััะฐะฒะธัะธ
Enter = ะกะบะพะฟััะฒะฐัะธ {0} ัะฐะนะปัะฒ ะท ยซ{1}ยป\nESC = ะะฐะฒะฐะฝัะฐะถะธัะธ {2} ัะฐะนะปัะฒ ะท ะฒะฐัะพะณะพ ะฟัะธัััะพั',
- "fp_both_b": 'ะะตัะตะผัััะธัะธะะฐะฒะฐะฝัะฐะถะธัะธ',
- "fcp_both_b": 'ะกะบะพะฟััะฒะฐัะธะะฐะฒะฐะฝัะฐะถะธัะธ',
-
- "mk_noname": "ะฒะฒะตะดััั ัะผ'ั ะฒ ัะตะบััะพะฒะต ะฟะพะปะต ะทะปัะฒะฐ ะฟะตัะตะด ัะธะผ, ัะบ ัะพะฑะธัะธ ัะต :p",
-
- "tv_load": "ะะฐะฒะฐะฝัะฐะถะตะฝะฝั ัะตะบััะพะฒะพะณะพ ะดะพะบัะผะตะฝัะฐ:\n\n{0}\n\n{1}% ({2} ะท {3} MiB ะทะฐะฒะฐะฝัะฐะถะตะฝะพ)",
- "tv_xe1": "ะฝะต ะฒะดะฐะปะพัั ะทะฐะฒะฐะฝัะฐะถะธัะธ ัะตะบััะพะฒะธะน ัะฐะนะป:\n\nะฟะพะผะธะปะบะฐ ",
- "tv_xe2": "404, ัะฐะนะป ะฝะต ะทะฝะฐะนะดะตะฝะพ",
- "tv_lst": "ัะฟะธัะพะบ ัะตะบััะพะฒะธั
ัะฐะนะปัะฒ ะฒ",
- "tvt_close": "ะฟะพะฒะตัะฝััะธัั ะดะพ ะฟะตัะตะณะปัะดั ะฟะฐะฟะบะธ$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: M (ะฐะฑะพ Esc)\">โ ะทะฐะบัะธัะธ",
- "tvt_dl": "ะทะฐะฒะฐะฝัะฐะถะธัะธ ัะตะน ัะฐะนะป$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: Y\">๐พ ะทะฐะฒะฐะฝัะฐะถะธัะธ",
- "tvt_prev": "ะฟะพะบะฐะทะฐัะธ ะฟะพะฟะตัะตะดะฝัะน ะดะพะบัะผะตะฝั$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: i\">โฌ ะฟะพะฟะตั",
- "tvt_next": "ะฟะพะบะฐะทะฐัะธ ะฝะฐัััะฟะฝะธะน ะดะพะบัะผะตะฝั$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: K\">โฌ ะฝะฐัั",
- "tvt_sel": "ะฒะธะฑัะฐัะธ ัะฐะนะป ( ะดะปั ะฒะธััะทะฐะฝะฝั / ะบะพะฟััะฒะฐะฝะฝั / ะฒะธะดะฐะปะตะฝะฝั / ... )$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: S\">ะฒะธะฑั",
- "tvt_edit": "ะฒัะดะบัะธัะธ ัะฐะนะป ะฒ ัะตะบััะพะฒะพะผั ัะตะดะฐะบัะพัั$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: E\">โ๏ธ ัะตะดะฐะณัะฒะฐัะธ",
- "tvt_tail": "ะผะพะฝััะพัะธัะธ ัะฐะนะป ะฝะฐ ะทะผัะฝะธ; ะฟะพะบะฐะทัะฒะฐัะธ ะฝะพะฒั ััะดะบะธ ะฒ ัะตะฐะปัะฝะพะผั ัะฐัั\">๐ก ัะปัะดะบัะฒะฐัะธ",
- "tvt_wrap": "ะฟะตัะตะฝะตัะตะฝะฝั ัะปัะฒ\">โต",
- "tvt_atail": "ะทะฐะฑะปะพะบัะฒะฐัะธ ะฟัะพะบัััะบั ะดะพ ะฝะธะทั ััะพััะฝะบะธ\">โ",
- "tvt_ctail": "ะดะตะบะพะดัะฒะฐัะธ ะบะพะปัะพัะธ ัะตัะผัะฝะฐะปั (ansi escape ะบะพะดะธ)\">๐",
- "tvt_ntail": "ะปัะผัั ัััะพััั ะฟัะพะบัััะบะธ (ัะบัะปัะบะธ ะฑะฐะนััะฒ ัะตะบััั ััะธะผะฐัะธ ะทะฐะฒะฐะฝัะฐะถะตะฝะธะผะธ)",
-
- "m3u_add1": "ะฟััะฝั ะดะพะดะฐะฝะฐ ะดะพ m3u ะฟะปะตะนะปะธััั",
- "m3u_addn": "{0} ะฟััะตะฝั ะดะพะดะฐะฝะพ ะดะพ m3u ะฟะปะตะนะปะธััั",
- "m3u_clip": "m3u ะฟะปะตะนะปะธัั ัะตะฟะตั ัะบะพะฟัะนะพะฒะฐะฝะธะน ะดะพ ะฑััะตัะฐ\n\nะฒะธ ะฟะพะฒะธะฝะฝั ััะฒะพัะธัะธ ะฝะพะฒะธะน ัะตะบััะพะฒะธะน ัะฐะนะป ะท ะฝะฐะทะฒะพั ัะพัั.m3u ั ะฒััะฐะฒะธัะธ ะฟะปะตะนะปะธัั ะฒ ัะตะน ะดะพะบัะผะตะฝั; ัะต ะทัะพะฑะธัั ะนะพะณะพ ะฒัะดัะฒะพััะฒะฐะฝะธะผ",
-
- "gt_vau": "ะฝะต ะฟะพะบะฐะทัะฒะฐัะธ ะฒัะดะตะพ, ะปะธัะต ะฒัะดัะฒะพััะฒะฐัะธ ะฐัะดัะพ\">๐ง",
- "gt_msel": "ัะฒัะผะบะฝััะธ ะฒะธะฑัั ัะฐะนะปัะฒ; ctrl-ะบะปัะบ ะฟะพ ัะฐะนะปั ะดะปั ะฟะตัะตะฒะธะทะฝะฐัะตะฝะฝั$N$N<em>ะบะพะปะธ ะฐะบัะธะฒะฝะธะน: ะฟะพะดะฒัะนะฝะธะน ะบะปัะบ ะฟะพ ัะฐะนะปั / ะฟะฐะฟัั ัะพะฑ ะฒัะดะบัะธัะธ</em>$N$Nะะฐัััะฐ ะบะปะฐะฒััะฐ: S\">ะผัะปััะธะฒะธะฑัั",
- "gt_crop": "ะพะฑััะทะฐัะธ ะผัะฝัะฐัััะธ ะฟะพ ัะตะฝััั\">ะพะฑััะทะบะฐ",
- "gt_3x": "ะผัะฝัะฐัััะธ ะฒะธัะพะบะพั ัะพะทะดัะปัะฝะพััั\">3x",
- "gt_zoom": "ะผะฐัััะฐะฑ",
- "gt_chop": "ะพะฑััะทะฐัะธ",
- "gt_sort": "ัะพัััะฒะฐัะธ ะทะฐ",
- "gt_name": "ัะผ'ัะผ",
- "gt_sz": "ัะพะทะผััะพะผ",
- "gt_ts": "ะดะฐัะพั",
- "gt_ext": "ัะธะฟะพะผ",
- "gt_c1": "ะพะฑััะทะฐัะธ ัะผะตะฝะฐ ัะฐะนะปัะฒ ะฑัะปััะต (ะฟะพะบะฐะทัะฒะฐัะธ ะผะตะฝัะต)",
- "gt_c2": "ะพะฑััะทะฐัะธ ัะผะตะฝะฐ ัะฐะนะปัะฒ ะผะตะฝัะต (ะฟะพะบะฐะทัะฒะฐัะธ ะฑัะปััะต)",
-
- "sm_w8": "ะฟะพััะบ...",
- "sm_prev": "ัะตะทัะปััะฐัะธ ะฟะพััะบั ะฝะธะถัะต ะท ะฟะพะฟะตัะตะดะฝัะพะณะพ ะทะฐะฟะธัั:\n ",
- "sl_close": "ะทะฐะบัะธัะธ ัะตะทัะปััะฐัะธ ะฟะพััะบั",
- "sl_hits": "ะฟะพะบะฐะทะฐะฝะพ {0} ัะตะทัะปััะฐััะฒ",
- "sl_moar": "ะทะฐะฒะฐะฝัะฐะถะธัะธ ะฑัะปััะต",
-
- "s_sz": "ัะพะทะผัั",
- "s_dt": "ะดะฐัะฐ",
- "s_rd": "ัะปัั
",
- "s_fn": "ัะผ'ั",
- "s_ta": "ัะตะณะธ",
- "s_ua": "up@",
- "s_ad": "ัะพะทั.",
- "s_s1": "ะผัะฝัะผัะผ MiB",
- "s_s2": "ะผะฐะบัะธะผัะผ MiB",
- "s_d1": "ะผัะฝ. iso8601",
- "s_d2": "ะผะฐะบั. iso8601",
- "s_u1": "ะทะฐะฒะฐะฝัะฐะถะตะฝะพ ะฟััะปั",
- "s_u2": "ัะฐ/ะฐะฑะพ ะดะพ",
- "s_r1": "ัะปัั
ะผัััะธัั (ัะพะทะดัะปะตะฝั ะฟัะพะฑัะปะฐะผะธ)",
- "s_f1": "ัะผ'ั ะผัััะธัั (ะทะฐะฟะตัะตัะตะฝะฝั ะท -ะฝั)",
- "s_t1": "ัะตะณะธ ะผัััััั (^=ะฟะพัะฐัะพะบ, ะบัะฝะตัั=$)",
- "s_a1": "ัะฟะตัะธัััะฝั ะฒะปะฐััะธะฒะพััั ะผะตัะฐะดะฐะฝะธั
",
-
- "md_eshow": "ะฝะต ะผะพะถั ะฒัะดะพะฑัะฐะทะธัะธ ",
- "md_off": "[๐readme] ะฒัะดะบะปััะตะฝะพ ะฒ [โ๏ธ] -- ะดะพะบัะผะตะฝั ะฟัะธั
ะพะฒะฐะฝะธะน",
-
- "badreply": "ะะต ะฒะดะฐะปะพัั ะพะฑัะพะฑะธัะธ ะฒัะดะฟะพะฒัะดั ัะตัะฒะตัะฐ",
-
- "xhr403": "403: ะะพัััะฟ ะทะฐะฑะพัะพะฝะตะฝะพ\n\nัะฟัะพะฑัะนัะต ะฝะฐัะธัะฝััะธ F5, ะผะพะถะปะธะฒะพ ะฒะธ ะฒะธะนัะปะธ ะท ัะธััะตะผะธ",
- "xhr0": "ะฝะตะฒัะดะพะผะฐ (ะนะผะพะฒััะฝะพ ะฒััะฐัะตะฝะพ ะท'ัะดะฝะฐะฝะฝั ะท ัะตัะฒะตัะพะผ, ะฐะฑะพ ัะตัะฒะตั ะพัะปะฐะนะฝ)",
- "cf_ok": "ะฒะธะฑะฐััะต ะทะฐ ัะต -- ะทะฐั
ะธัั ะฒัะด DD" + wah + "oS ัะฟัะฐััะฒะฐะฒ\n\nัะตัั ะฟะพะฒะธะฝะฝั ะฒัะดะฝะพะฒะธัะธัั ะฟัะธะฑะปะธะทะฝะพ ัะตัะตะท 30 ัะตะบ\n\nัะบัะพ ะฝััะพะณะพ ะฝะต ะฒัะดะฑัะฒะฐััััั, ะฝะฐัะธัะฝััั F5 ะดะปั ะฟะตัะตะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ััะพััะฝะบะธ",
- "tl_xe1": "ะฝะต ะฒะดะฐะปะพัั ะฟะตัะตะปััะธัะธ ะฟัะดะฟะฐะฟะบะธ:\n\nะฟะพะผะธะปะบะฐ ",
- "tl_xe2": "404: ะะฐะฟะบะฐ ะฝะต ะทะฝะฐะนะดะตะฝะฐ",
- "fl_xe1": "ะฝะต ะฒะดะฐะปะพัั ะฟะตัะตะปััะธัะธ ัะฐะนะปะธ ะฒ ะฟะฐะฟัั:\n\nะฟะพะผะธะปะบะฐ ",
- "fl_xe2": "404: ะะฐะฟะบะฐ ะฝะต ะทะฝะฐะนะดะตะฝะฐ",
- "fd_xe1": "ะฝะต ะฒะดะฐะปะพัั ััะฒะพัะธัะธ ะฟัะดะฟะฐะฟะบั:\n\nะฟะพะผะธะปะบะฐ ",
- "fd_xe2": "404: ะะฐััะบัะฒััะบะฐ ะฟะฐะฟะบะฐ ะฝะต ะทะฝะฐะนะดะตะฝะฐ",
- "fsm_xe1": "ะฝะต ะฒะดะฐะปะพัั ะฝะฐะดััะปะฐัะธ ะฟะพะฒัะดะพะผะปะตะฝะฝั:\n\nะฟะพะผะธะปะบะฐ ",
- "fsm_xe2": "404: ะะฐััะบัะฒััะบะฐ ะฟะฐะฟะบะฐ ะฝะต ะทะฝะฐะนะดะตะฝะฐ",
- "fu_xe1": "ะฝะต ะฒะดะฐะปะพัั ะทะฐะฒะฐะฝัะฐะถะธัะธ ัะฟะธัะพะบ unpost ะท ัะตัะฒะตัะฐ:\n\nะฟะพะผะธะปะบะฐ ",
- "fu_xe2": "404: ะคะฐะนะป ะฝะต ะทะฝะฐะนะดะตะฝะพ??",
-
- "fz_tar": "ะฝะตััะธัะฝััะธะน gnu-tar ัะฐะนะป (linux / mac)",
- "fz_pax": "ะฝะตััะธัะฝััะธะน tar ะฒ pax-ัะพัะผะฐัั (ะฟะพะฒัะปัะฝััะต)",
- "fz_targz": "gnu-tar ะทั ััะธัะฝะตะฝะฝัะผ gzip ััะฒะฝั 3$N$Nัะต ะทะฐะทะฒะธัะฐะน ะดัะถะต ะฟะพะฒัะปัะฝะพ, ัะพะผั$Nะฒะธะบะพัะธััะพะฒัะนัะต ะฝะตััะธัะฝััะธะน tar ะทะฐะผัััั ััะพะณะพ",
- "fz_tarxz": "gnu-tar ะทั ััะธัะฝะตะฝะฝัะผ xz ััะฒะฝั 1$N$Nัะต ะทะฐะทะฒะธัะฐะน ะดัะถะต ะฟะพะฒัะปัะฝะพ, ัะพะผั$Nะฒะธะบะพัะธััะพะฒัะนัะต ะฝะตััะธัะฝััะธะน tar ะทะฐะผัััั ััะพะณะพ",
- "fz_zip8": "zip ะท utf8 ัะผะตะฝะฐะผะธ ัะฐะนะปัะฒ (ะผะพะถะปะธะฒะพ ะฝะตััะฐะฑัะปัะฝะธะน ะฝะฐ windows 7 ั ััะฐัััะธั
)",
- "fz_zipd": "zip ะท ััะฐะดะธััะนะฝะธะผะธ cp437 ัะผะตะฝะฐะผะธ ัะฐะนะปัะฒ, ะดะปั ะดัะถะต ััะฐัะพะณะพ ะะ",
- "fz_zipc": "cp437 ะท crc32, ะพะฑัะธัะปะตะฝะธะผ ะทะฐะทะดะฐะปะตะณัะดั,$Nะดะปั MS-DOS PKZIP v2.04g (ะถะพะฒัะตะฝั 1993)$N(ะฟะพััะตะฑัั ะฑัะปััะต ัะฐัั ะดะปั ะพะฑัะพะฑะบะธ ะฟะตัะตะด ะฟะพัะฐัะบะพะผ ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั)",
-
- "un_m1": "ะฒะธ ะผะพะถะตัะต ะฒะธะดะฐะปะธัะธ ะฒะฐัั ะฝะตะดะฐะฒะฝั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั (ะฐะฑะพ ะฟะตัะตัะฒะฐัะธ ะฝะตะทะฐะฒะตััะตะฝั) ะฝะธะถัะต",
- "un_upd": "ะพะฝะพะฒะธัะธ",
- "un_m4": "ะฐะฑะพ ะฟะพะดัะปะธัะธัั ัะฐะนะปะฐะผะธ, ะฒะธะดะธะผะธะผะธ ะฝะธะถัะต:",
- "un_ulist": "ะฟะพะบะฐะทะฐัะธ",
- "un_ucopy": "ะบะพะฟััะฒะฐัะธ",
- "un_flt": "ะฝะตะพะฑะพะฒ'ัะทะบะพะฒะธะน ััะปััั: URL ะฟะพะฒะธะฝะตะฝ ะผัััะธัะธ",
- "un_fclr": "ะพัะธััะธัะธ ััะปััั",
- "un_derr": 'unpost-ะฒะธะดะฐะปะตะฝะฝั ะฝะตะฒะดะฐะปะต:\n',
- "un_f5": 'ัะพัั ะทะปะฐะผะฐะปะพัั, ะฑัะดั ะปะฐัะบะฐ, ัะฟัะพะฑัะนัะต ะพะฝะพะฒะธัะธ ะฐะฑะพ ะฝะฐัะธัะฝััั F5',
- "un_uf5": "ะฒะธะฑะฐััะต, ะฐะปะต ะฒะธ ะฟะพะฒะธะฝะฝั ะพะฝะพะฒะธัะธ ััะพััะฝะบั (ะฝะฐะฟัะธะบะปะฐะด, ะฝะฐัะธัะฝัะฒัะธ F5 ะฐะฑะพ CTRL-R) ะฟะตัะตะด ัะธะผ, ัะบ ัะต ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ะผะพะถะฝะฐ ะฑัะดะต ะฟะตัะตัะฒะฐัะธ",
- "un_nou": 'ะฟะพะฟะตัะตะดะถะตะฝะฝั: ัะตัะฒะตั ะทะฐะฝะฐะดัะพ ะทะฐะนะฝััะธะน, ัะพะฑ ะฟะพะบะฐะทะฐัะธ ะฝะตะทะฐะฒะตััะตะฝั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั; ะบะปะฐัะฝััั ะฟะพัะธะปะฐะฝะฝั "ะพะฝะพะฒะธัะธ" ััะพั
ะธ ะฟัะทะฝััะต',
- "un_noc": 'ะฟะพะฟะตัะตะดะถะตะฝะฝั: unpost ะฟะพะฒะฝัััั ะทะฐะฒะฐะฝัะฐะถะตะฝะธั
ัะฐะนะปัะฒ ะฝะต ัะฒัะผะบะฝะตะฝะพ/ะดะพะทะฒะพะปะตะฝะพ ะฒ ะบะพะฝััะณััะฐััั ัะตัะฒะตัะฐ',
- "un_max": "ะฟะพะบะฐะทะฐะฝะพ ะฟะตััั 2000 ัะฐะนะปัะฒ (ะฒะธะบะพัะธััะพะฒัะนัะต ััะปััั)",
- "un_avail": "{0} ะฝะตะดะฐะฒะฝัั
ะทะฐะฒะฐะฝัะฐะถะตะฝั ะผะพะถััั ะฑััะธ ะฒะธะดะฐะปะตะฝั
{1} ะฝะตะทะฐะฒะตััะตะฝะธั
ะผะพะถััั ะฑััะธ ะฟะตัะตัะฒะฐะฝั",
- "un_m2": "ะฒัะดัะพััะพะฒะฐะฝะพ ะทะฐ ัะฐัะพะผ ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั; ะฝะฐะนะฝะพะฒััั ัะฟะพัะฐัะบั:",
- "un_no1": "ั
ะฐ! ะฝะตะผะฐั ะทะฐะฒะฐะฝัะฐะถะตะฝั, ะดะพััะฐัะฝัะพ ะฝะตะดะฐะฒะฝัั
",
- "un_no2": "ั
ะฐ! ะฝะตะผะฐั ะทะฐะฒะฐะฝัะฐะถะตะฝั, ัะพ ะฒัะดะฟะพะฒัะดะฐััั ััะพะผั ััะปัััั, ะดะพััะฐัะฝัะพ ะฝะตะดะฐะฒะฝัั
",
- "un_next": "ะฒะธะดะฐะปะธัะธ ะฝะฐัััะฟะฝั {0} ัะฐะนะปัะฒ ะฝะธะถัะต",
- "un_abrt": "ะฟะตัะตัะฒะฐัะธ",
- "un_del": "ะฒะธะดะฐะปะธัะธ",
- "un_m3": "ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ะฒะฐัะธั
ะฝะตะดะฐะฒะฝัั
ะทะฐะฒะฐะฝัะฐะถะตะฝั...",
- "un_busy": "ะฒะธะดะฐะปะตะฝะฝั {0} ัะฐะนะปัะฒ...",
- "un_clip": "{0} ะฟะพัะธะปะฐะฝั ัะบะพะฟัะนะพะฒะฐะฝะพ ะดะพ ะฑััะตัะฐ",
-
- "u_https1": "ะฒะฐะผ ัะปัะด",
- "u_https2": "ะฟะตัะตะบะปััะธัะธัั ะฝะฐ https",
- "u_https3": "ะดะปั ะบัะฐัะพั ะฟัะพะดัะบัะธะฒะฝะพััั",
- "u_ancient": 'ะฒะฐั ะฑัะฐัะทะตั ะฒัะฐะถะฐััะต ััะฐัะธะน -- ะผะพะถะปะธะฒะพ, ะฒะฐะผ ัะปัะด ะฒะธะบะพัะธััะพะฒัะฒะฐัะธ bup ะทะฐะผัััั ััะพะณะพ',
- "u_nowork": "ะฟะพัััะฑะตะฝ firefox 53+ ะฐะฑะพ chrome 57+ ะฐะฑะพ iOS 11+",
- "tail_2old": "ะฟะพัััะฑะตะฝ firefox 105+ ะฐะฑะพ chrome 71+ ะฐะฑะพ iOS 14.5+",
- "u_nodrop": 'ะฒะฐั ะฑัะฐัะทะตั ะทะฐะฝะฐะดัะพ ััะฐัะธะน ะดะปั ะฟะตัะตััะณัะฒะฐะฝะฝั ะทะฐะฒะฐะฝัะฐะถะตะฝั',
- "u_notdir": "ัะต ะฝะต ะฟะฐะฟะบะฐ!\n\nะฒะฐั ะฑัะฐัะทะตั ะทะฐะฝะฐะดัะพ ััะฐัะธะน,\nะฑัะดั ะปะฐัะบะฐ, ัะฟัะพะฑัะนัะต ะฟะตัะตััะณัะฒะฐะฝะฝั ะทะฐะผัััั ััะพะณะพ",
- "u_uri": "ัะพะฑ ะฟะตัะตััะณะฝััะธ ะทะพะฑัะฐะถะตะฝะฝั ะท ัะฝัะธั
ะฒัะบะพะฝ ะฑัะฐัะทะตัะฐ,\nะฑัะดั ะปะฐัะบะฐ, ะฟะตัะตััะณะฝััั ะนะพะณะพ ะฝะฐ ะฒะตะปะธะบั ะบะฝะพะฟะบั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั",
- "u_enpot": 'ะฟะตัะตะบะปััะธัะธัั ะฝะฐ ะบะฐััะพะฟะปะธะฝะฝะธะน UI (ะผะพะถะต ะฟะพะบัะฐัะธัะธ ัะฒะธะดะบัััั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั)',
- "u_depot": 'ะฟะตัะตะบะปััะธัะธัั ะฝะฐ ะฒะธััะบะฐะฝะธะน UI (ะผะพะถะต ะทะผะตะฝัะธัะธ ัะฒะธะดะบัััั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั)',
- "u_gotpot": 'ะฟะตัะตะบะปััะตะฝะฝั ะฝะฐ ะบะฐััะพะฟะปะธะฝะฝะธะน UI ะดะปั ะฟะพะบัะฐัะตะฝะฝั ัะฒะธะดะบะพััั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั,\n\nะฝะต ัะพัะพะผัะตัั ะฝะต ะฟะพะณะพะดะธัะธัั ั ะฟะตัะตะบะปััะธัะธัั ะฝะฐะทะฐะด!',
- "u_pott": "ัะฐะนะปะธ: {0} ะทะฐะฒะตััะตะฝะพ, {1} ะฝะตะฒะดะฐะปะพ, {2} ะทะฐะนะฝััะพ, {3} ะฒ ัะตัะทั
",
- "u_ever": "ัะต ะฑะฐะทะพะฒะธะน ะทะฐะฒะฐะฝัะฐะถัะฒะฐั; up2k ะฟะพััะตะฑัั ะฟัะธะฝะฐะนะผะฝั
chrome 21 // firefox 13 // edge 12 // opera 12 // safari 5.1",
- "u_su2k": 'ัะต ะฑะฐะทะพะฒะธะน ะทะฐะฒะฐะฝัะฐะถัะฒะฐั; up2k ะบัะฐัะธะน',
- "u_uput": 'ะพะฟัะธะผัะทัะฒะฐัะธ ะดะปั ัะฒะธะดะบะพััั (ะฟัะพะฟัััะธัะธ ะบะพะฝััะพะปัะฝั ััะผั)',
- "u_ewrite": 'ั ะฒะฐั ะฝะตะผะฐั ะดะพัััะฟั ะดะปั ะทะฐะฟะธัั ะฒ ัั ะฟะฐะฟะบั',
- "u_eread": 'ั ะฒะฐั ะฝะตะผะฐั ะดะพัััะฟั ะดะปั ัะธัะฐะฝะฝั ัััั ะฟะฐะฟะบะธ',
- "u_enoi": 'ะฟะพััะบ ัะฐะนะปัะฒ ะฝะต ัะฒัะผะบะฝะตะฝะพ ะฒ ะบะพะฝััะณััะฐััั ัะตัะฒะตัะฐ',
- "u_enoow": "ะฟะตัะตะทะฐะฟะธั ะฝะต ะฟัะฐััะฒะฐัะธะผะต ััั; ะฟะพัััะฑะตะฝ ะดะพะทะฒัะป ะฝะฐ ะฒะธะดะฐะปะตะฝะฝั",
- "u_badf": 'ะฆั {0} ัะฐะนะปะธ (ะท {1} ะทะฐะณะฐะปัะฝะธั
) ะฑัะปะธ ะฟัะพะฟััะตะฝั, ะผะพะถะปะธะฒะพ, ัะตัะตะท ะดะพะทะฒะพะปะธ ัะฐะนะปะพะฒะพั ัะธััะตะผะธ:\n\n',
- "u_blankf": 'ะฆั {0} ัะฐะนะปะธ (ะท {1} ะทะฐะณะฐะปัะฝะธั
) ะฟะพัะพะถะฝั; ะฒัะต ะพะดะฝะพ ะทะฐะฒะฐะฝัะฐะถะธัะธ ัั
?\n\n',
- "u_applef": 'ะฆั {0} ัะฐะนะปะธ (ะท {1} ะทะฐะณะฐะปัะฝะธั
), ะนะผะพะฒััะฝะพ, ะฝะตะฑะฐะถะฐะฝั;\nะะฐัะธัะฝััั ะะฐัะฐะทะด/Enter ัะพะฑ ะะ ะะะฃะกะขะะขะ ะฝะฐัััะฟะฝั ัะฐะนะปะธ,\nะะฐัะธัะฝััั ะกะบะฐััะฒะฐัะธ/ESC ัะพะฑ ะะ ะฒะธะบะปััะฐัะธ, ั ะะะะะะขะะะะขะ ัั
ัะฐะบะพะถ:\n\n',
- "u_just1": '\nะะพะถะปะธะฒะพ, ัะต ัะฟัะฐััั ะบัะฐัะต, ัะบัะพ ะฒะธ ะฒะธะฑะตัะตัะต ะปะธัะต ะพะดะธะฝ ัะฐะนะป',
- "u_ff_many": "ัะบัะพ ะฒะธ ะฒะธะบะพัะธััะพะฒัััะต Linux / MacOS / Android, ัะพ ัะฐะบะฐ ะบัะปัะบัััั ัะฐะนะปัะฒ ะผะพะถะต ะทะฐะฒััะธัะธ Firefox!\nัะบัะพ ัะต ััะฐะฝะตัััั, ะฑัะดั ะปะฐัะบะฐ, ัะฟัะพะฑัะนัะต ะทะฝะพะฒั (ะฐะฑะพ ะฒะธะบะพัะธััะพะฒัะนัะต Chrome).",
- "u_up_life": "ะฆะต ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ะฑัะดะต ะฒะธะดะฐะปะตะฝะพ ะท ัะตัะฒะตัะฐ\n{0} ะฟััะปั ะนะพะณะพ ะทะฐะฒะตััะตะฝะฝั",
- "u_asku": 'ะทะฐะฒะฐะฝัะฐะถะธัะธ ัั {0} ัะฐะนะปัะฒ ะดะพ {1}',
- "u_unpt": "ะฒะธ ะผะพะถะตัะต ัะบะฐััะฒะฐัะธ / ะฒะธะดะฐะปะธัะธ ัะต ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั, ะฒะธะบะพัะธััะพะฒัััะธ ๐งฏ ะทะฒะตัั
ั ะทะปัะฒะฐ",
- "u_bigtab": 'ะทะฑะธัะฐััั ะฟะพะบะฐะทะฐัะธ {0} ัะฐะนะปัะฒ\n\nัะต ะผะพะถะต ะทะฐะฒััะธัะธ ะฒะฐั ะฑัะฐัะทะตั, ะฒะธ ะฒะฟะตะฒะฝะตะฝั?',
- "u_scan": 'ะกะบะฐะฝัะฒะฐะฝะฝั ัะฐะนะปัะฒ...',
- "u_dirstuck": 'ััะตัะฐัะพั ะบะฐัะฐะปะพะณั ะทะฐััััะณ, ะฝะฐะผะฐะณะฐััะธัั ะพััะธะผะฐัะธ ะดะพัััะฟ ะดะพ ะฝะฐัััะฟะฝะธั
{0} ะตะปะตะผะตะฝััะฒ; ะฟัะพะฟััั:',
- "u_etadone": 'ะะพัะพะฒะพ ({0}, {1} ัะฐะนะปัะฒ)',
- "u_etaprep": '(ะฟัะดะณะพัะพะฒะบะฐ ะดะพ ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั)',
- "u_hashdone": 'ั
ะตััะฒะฐะฝะฝั ะทะฐะฒะตััะตะฝะพ',
- "u_hashing": 'ั
ะตััะฒะฐะฝะฝั',
- "u_hs": 'ััะบะพััะธัะบะฐะฝะฝั...',
- "u_started": "ัะฐะนะปะธ ัะตะฟะตั ะทะฐะฒะฐะฝัะฐะถัััััั; ะดะธะฒััััั [๐]",
- "u_dupdefer": "ะดัะฑะปัะบะฐั; ะฑัะดะต ะพะฑัะพะฑะปะตะฝะพ ะฟััะปั ะฒััั
ัะฝัะธั
ัะฐะนะปัะฒ",
- "u_actx": "ะบะปะฐัะฝััั ัะตะน ัะตะบัั, ัะพะฑ ะทะฐะฟะพะฑัะณัะธ ะฒััะฐัั
ะฟัะพะดัะบัะธะฒะฝะพััั ะฟัะธ ะฟะตัะตะบะปััะตะฝะฝั ะฝะฐ ัะฝัั ะฒัะบะฝะฐ/ะฒะบะปะฐะดะบะธ",
- "u_fixed": "OK! ะะธะฟัะฐะฒะปะตะฝะพ ๐",
- "u_cuerr": "ะฝะต ะฒะดะฐะปะพัั ะทะฐะฒะฐะฝัะฐะถะธัะธ ััะฐะณะผะตะฝั {0} ะท {1};\nะนะผะพะฒััะฝะพ, ะฝะตัะบัะดะปะธะฒะพ, ะฟัะพะดะพะฒะถัั\n\nัะฐะนะป: {2}",
- "u_cuerr2": "ัะตัะฒะตั ะฒัะดั
ะธะปะธะฒ ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั (ััะฐะณะผะตะฝั {0} ะท {1});\nัะฟัะพะฑัั ะฟัะทะฝััะต\n\nัะฐะนะป: {2}\n\nะฟะพะผะธะปะบะฐ ",
- "u_ehstmp": "ัะฟัะพะฑัั ะทะฝะพะฒั; ะดะธะฒััััั ะฒะฝะธะทั ัะฟัะฐะฒะฐ",
- "u_ehsfin": "ัะตัะฒะตั ะฒัะดั
ะธะปะธะฒ ะทะฐะฟะธั ะฝะฐ ะทะฐะฒะตััะตะฝะฝั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั; ะฟะพะฒัะพััั...",
- "u_ehssrch": "ัะตัะฒะตั ะฒัะดั
ะธะปะธะฒ ะทะฐะฟะธั ะฝะฐ ะฒะธะบะพะฝะฐะฝะฝั ะฟะพััะบั; ะฟะพะฒัะพััั...",
- "u_ehsinit": "ัะตัะฒะตั ะฒัะดั
ะธะปะธะฒ ะทะฐะฟะธั ะฝะฐ ัะฝัััะฐััั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั; ะฟะพะฒัะพััั...",
- "u_eneths": "ะผะตัะตะถะตะฒะฐ ะฟะพะผะธะปะบะฐ ะฟัะด ัะฐั ะฒะธะบะพะฝะฐะฝะฝั ััะบะพััะธัะบะฐะฝะฝั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั; ะฟะพะฒัะพััั...",
- "u_enethd": "ะผะตัะตะถะตะฒะฐ ะฟะพะผะธะปะบะฐ ะฟัะด ัะฐั ัะตัััะฒะฐะฝะฝั ััะฝัะฒะฐะฝะฝั ััะปั; ะฟะพะฒัะพััั...",
- "u_cbusy": "ัะตะบะฐัะผะพ, ะฟะพะบะธ ัะตัะฒะตั ะทะฝะพะฒั ะฝะฐะผ ะดะพะฒััััะธะผะต ะฟััะปั ะผะตัะตะถะตะฒะพะณะพ ะทะฑะพั...",
- "u_ehsdf": "ะฝะฐ ัะตัะฒะตัั ะทะฐะบัะฝัะธะปะพัั ะผัััะต ะฝะฐ ะดะธัะบั!\n\nะฑัะดั ะฟัะพะดะพะฒะถัะฒะฐัะธ ัะฟัะพะฑะธ, ะฝะฐ ะฒะธะฟะฐะดะพะบ, ัะบัะพ ั
ัะพัั\nะทะฒัะปัะฝะธัั ะดะพััะฐัะฝัะพ ะผัััั ะดะปั ะฟัะพะดะพะฒะถะตะฝะฝั",
- "u_emtleak1": "ัั
ะพะถะต, ะฒะฐั ะฒะตะฑ-ะฑัะฐัะทะตั ะผะพะถะต ะผะฐัะธ ะฒะธััะบ ะฟะฐะผ'ััั;\nะฑัะดั ะปะฐัะบะฐ,",
- "u_emtleak2": ' ะฟะตัะตะบะปััััััั ะฝะฐ https (ัะตะบะพะผะตะฝะดัััััั) ะฐะฑะพ ',
- "u_emtleak3": ' ',
- "u_emtleakc": 'ัะฟัะพะฑัะนัะต ะฝะฐัััะฟะฝะต:\n- ะฝะฐัะธัะฝััั
F5 ะดะปั ะพะฝะพะฒะปะตะฝะฝั ััะพััะฝะบะธ - ะฟะพััะผ ะฒัะดะบะปััััั ะบะฝะพะฟะบั
mt ะฒ โ๏ธ ะฝะฐะปะฐัััะฒะฐะฝะฝัั
- ั ัะฟัะพะฑัะนัะต ัะต ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ะทะฝะพะฒั
ะะฐะฒะฐะฝัะฐะถะตะฝะฝั ะฑัะดััั ััะพั
ะธ ะฟะพะฒัะปัะฝััะธะผะธ, ะฐะปะต ัะพ ะฟะพัะพะฑะธั.\nะะธะฑะฐััะต ะทะฐ ะฝะตะทัััะฝะพััั !\n\nPS: chrome v107 ะผะฐั ะฒะธะฟัะฐะฒะปะตะฝะฝั ะดะปั ััะพะณะพ',
- "u_emtleakf": 'ัะฟัะพะฑัะนัะต ะฝะฐัััะฟะฝะต:\n- ะฝะฐัะธัะฝััั
F5 ะดะปั ะพะฝะพะฒะปะตะฝะฝั ััะพััะฝะบะธ - ะฟะพััะผ ัะฒัะผะบะฝััั
๐ฅ (ะบะฐััะพะฟะปั) ะฒ UI ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั - ั ัะฟัะพะฑัะนัะต ัะต ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ะทะฝะพะฒั
\nPS: firefox ัะฟะพะดัะฒะฐัะผะพัั, ะผะฐัะธะผะต ะฒะธะฟัะฐะฒะปะตะฝะฝั ะฒ ัะบะธะนัั ะผะพะผะตะฝั',
- "u_s404": "ะฝะต ะทะฝะฐะนะดะตะฝะพ ะฝะฐ ัะตัะฒะตัั",
- "u_expl": "ะฟะพััะฝะธัะธ",
- "u_maxconn": "ะฑัะปัััััั ะฑัะฐัะทะตััะฒ ะพะฑะผะตะถัััั ัะต ะดะพ 6, ะฐะปะต firefox ะดะพะทะฒะพะปัั ะฟัะดะฒะธัะธัะธ ัะต ะท connections-per-server ะฒ about:config",
- "u_tu": 'ะะะะะ ะะะะะะะฏ: turbo ัะฒัะผะบะฝะตะฝะพ, ะบะปััะฝั ะผะพะถะต ะฝะต ะฒะธัะฒะธัะธ ั ะฟะพะฝะพะฒะธัะธ ะฝะตะฟะพะฒะฝั ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั; ะดะธะฒััััั ะฟัะดะบะฐะทะบั turbo-ะบะฝะพะฟะบะธ
',
- "u_ts": 'ะะะะะ ะะะะะะะฏ: turbo ัะฒัะผะบะฝะตะฝะพ, ัะตะทัะปััะฐัะธ ะฟะพััะบั ะผะพะถััั ะฑััะธ ะฝะตะฟัะฐะฒะธะปัะฝะธะผะธ; ะดะธะฒััััั ะฟัะดะบะฐะทะบั turbo-ะบะฝะพะฟะบะธ
',
- "u_turbo_c": "turbo ะฒัะดะบะปััะตะฝะพ ะฒ ะบะพะฝััะณััะฐััั ัะตัะฒะตัะฐ",
- "u_turbo_g": "ะฒัะดะบะปััะฐั turbo, ัะพะผั ัะพ ั ะฒะฐั ะฝะตะผะฐั\nะฟัะธะฒัะปะตัะฒ ะฟะตัะตะณะปัะดั ะบะฐัะฐะปะพะณัะฒ ะฒ ััะพะผั ัะพะผั",
- "u_life_cfg": 'ะฐะฒัะพะฒะธะดะฐะปะตะฝะฝั ัะตัะตะท ั
ะฒ (ะฐะฑะพ ะณะพะดะธะฝ)',
- "u_life_est": 'ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ะฑัะดะต ะฒะธะดะฐะปะตะฝะพ ---',
- "u_life_max": 'ัั ะฟะฐะฟะบะฐ ะทะฐะฑะตะทะฟะตััั\nะผะฐะบั. ัะตัะผัะฝ ะถะธััั {0}',
- "u_unp_ok": 'unpost ะดะพะทะฒะพะปะตะฝะพ ะดะปั {0}',
- "u_unp_ng": 'unpost ะะ ะฑัะดะต ะดะพะทะฒะพะปะตะฝะพ',
- "ue_ro": 'ะฒะฐั ะดะพัััะฟ ะดะพ ัััั ะฟะฐะฟะบะธ ััะปัะบะธ ะดะปั ัะธัะฐะฝะฝั\n\n',
- "ue_nl": 'ะฒะธ ะทะฐัะฐะท ะฝะต ัะฒัะนัะปะธ ะฒ ัะธััะตะผั',
- "ue_la": 'ะฒะธ ะทะฐัะฐะท ัะฒัะนัะปะธ ัะบ "{0}"',
- "ue_sr": 'ะฒะธ ะทะฐัะฐะท ะฒ ัะตะถะธะผั ะฟะพััะบั ัะฐะนะปัะฒ\n\nะฟะตัะตะบะปััััััั ะฝะฐ ัะตะถะธะผ ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั, ะบะปะฐัะฝัะฒัะธ ะปัะฟั ๐ (ะฟะพััั ะท ะฒะตะปะธะบะพั ะบะฝะพะฟะบะพั ะะะจะฃะ), ั ัะฟัะพะฑัะนัะต ะทะฐะฒะฐะฝัะฐะถะธัะธ ะทะฝะพะฒั\n\nะฒะธะฑะฐััะต',
- "ue_ta": 'ัะฟัะพะฑัะนัะต ะทะฐะฒะฐะฝัะฐะถะธัะธ ะทะฝะพะฒั, ัะต ะฟะพะฒะธะฝะฝะพ ัะฟัะฐััะฒะฐัะธ ะทะฐัะฐะท',
- "ue_ab": "ัะตะน ัะฐะนะป ะฒะถะต ะทะฐะฒะฐะฝัะฐะถัััััั ะฒ ัะฝัั ะฟะฐะฟะบั, ั ัะต ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั ะฟะพะฒะธะฝะฝะพ ะฑััะธ ะทะฐะฒะตััะตะฝะพ ะฟะตัะตะด ัะธะผ, ัะบ ัะฐะนะป ะผะพะถะฝะฐ ะฑัะดะต ะทะฐะฒะฐะฝัะฐะถะธัะธ ะฒ ัะฝัะต ะผัััะต.\n\nะะธ ะผะพะถะตัะต ะฟะตัะตัะฒะฐัะธ ั ะทะฐะฑััะธ ะฟะพัะฐัะบะพะฒะต ะทะฐะฒะฐะฝัะฐะถะตะฝะฝั, ะฒะธะบะพัะธััะพะฒัััะธ ๐งฏ ะทะฒะตัั
ั ะทะปัะฒะฐ",
- "ur_1uo": "OK: ะคะฐะนะป ััะฟััะฝะพ ะทะฐะฒะฐะฝัะฐะถะตะฝะพ",
- "ur_auo": "OK: ะัั {0} ัะฐะนะปัะฒ ััะฟััะฝะพ ะทะฐะฒะฐะฝัะฐะถะตะฝะพ",
- "ur_1so": "OK: ะคะฐะนะป ะทะฝะฐะนะดะตะฝะพ ะฝะฐ ัะตัะฒะตัั",
- "ur_aso": "OK: ะัั {0} ัะฐะนะปัะฒ ะทะฝะฐะนะดะตะฝะพ ะฝะฐ ัะตัะฒะตัั",
- "ur_1un": "ะะฐะฒะฐะฝัะฐะถะตะฝะฝั ะฝะตะฒะดะฐะปะต, ะฒะธะฑะฐััะต",
- "ur_aun": "ะัั {0} ะทะฐะฒะฐะฝัะฐะถะตะฝั ะฝะตะฒะดะฐะปั, ะฒะธะฑะฐััะต",
- "ur_1sn": "ะคะฐะนะป ะะ ะทะฝะฐะนะดะตะฝะพ ะฝะฐ ัะตัะฒะตัั",
- "ur_asn": "{0} ัะฐะนะปัะฒ ะะ ะทะฝะฐะนะดะตะฝะพ ะฝะฐ ัะตัะฒะตัั",
- "ur_um": "ะะฐะฒะตััะตะฝะพ;\n{0} ะทะฐะฒะฐะฝัะฐะถะตะฝั OK,\n{1} ะทะฐะฒะฐะฝัะฐะถะตะฝั ะฝะตะฒะดะฐะปะธั
, ะฒะธะฑะฐััะต",
- "ur_sm": "ะะฐะฒะตััะตะฝะพ;\n{0} ัะฐะนะปัะฒ ะทะฝะฐะนะดะตะฝะพ ะฝะฐ ัะตัะฒะตัั,\n{1} ัะฐะนะปัะฒ ะะ ะทะฝะฐะนะดะตะฝะพ ะฝะฐ ัะตัะฒะตัั",
-
- "lang_set": "ะพะฝะพะฒะธัะธ ััะพััะฝะบั, ัะพะฑ ะทะผัะฝะธ ะฝะฐะฑัะปะธ ัะธะฝะฝะพััั?",
- },
};
-var LANGS = ["eng", "nor", "chi", "cze", "deu", "fin", "fra", "grc", "ita", "kor", "nld", "nno", "pol", "por", "rus", "spa", "swe", "ukr"];
+var LANGN = [
+ ["eng", "English"],
+ ["nor", "Norsk"],
+ ["chi", "ไธญๆ"],
+ ["cze", "ฤeลกtina"],
+ ["deu", "Deutsch"],
+ ["epo", "Esperanto"],
+ ["fin", "Suomi"],
+ ["fra", "franรงais"],
+ ["grc", "ฮฮปฮปฮทฮฝฮนฮบฮฌ"],
+ ["ita", "Italiano"],
+ ["kor", "ํ๊ตญ์ด"],
+ ["nld", "Nederlands"],
+ ["nno", "Nynorsk"],
+ ["pol", "Polski"],
+ ["por", "Portuguรชs"],
+ ["rus", "ะ ัััะบะธะน"],
+ ["spa", "Espaรฑol"],
+ ["swe", "Svenska"],
+ ["tur", "Tรผrkรงe"],
+ ["ukr", "ะฃะบัะฐัะฝััะบะฐ"],
+ ["vie", "Tiแบฟng Viแปt"],
+];
if (window.langmod)
langmod();
-for (var a = LANGS.length; a > 0;)
- if (!Ls[LANGS[--a]])
- LANGS.splice(a, 1);
+var L = Ls[lang] || Ls.eng, LANGS = [];
+for (var a = 0; a < LANGN.length; a++)
+ LANGS.push(LANGN[a][0]);
-var L = Ls[sread("cpp_lang", LANGS) || lang] ||
- Ls.eng || Ls.nor || Ls.chi;
+function langtest() {
+ var n = LANGS.length - 1;
+ for (var a = 1; a < LANGS.length; a++)
+ import_js(SR + '/.cpr/tl/' + LANGS[a] + '.js', function () { if (!--n) langtest2(); });
+}
+function langtest2() {
for (var a = 0; a < LANGS.length; a++) {
for (var b = a + 1; b < LANGS.length; b++) {
var i1 = Object.keys(Ls[LANGS[a]]).length > Object.keys(Ls[LANGS[b]]).length ? a : b,
@@ -11394,8 +717,11 @@ for (var a = 0; a < LANGS.length; a++) {
}
}
}
+}
-if (!has(LANGS, lang))
+
+
+if (!Ls[lang])
alert('unsupported --lang "' + lang + '" specified in server args;\nplease use one of these: ' + LANGS);
modal.load();
@@ -11405,7 +731,7 @@ modal.load();
ebi('ops').innerHTML = (
'--' +
'๐' +
- (have_del ? '๐งฏ' : '') +
+ (have_del ? '๐งฏ' : '') +
'๐' +
'๐' +
'๐' +
@@ -11579,6 +905,7 @@ ebi('op_cfg').innerHTML = (
' ' + L.ct_grid + '\n' +
' \n' +
+ ' \n' +
+ ' \n' +
+ ' \n' +
+ ' \n' +
+ ' \n' +
+ ' \n' +
+ ' \n' +
+ ' \n' +
+ ' \n' +
+ ' \n' +
+ ' \n' +
+ ' \n' +
+ '\n' +
+ '\n' +
' ' + L.cl_themes + '
\n' +
' \n' +
' \n' +
@@ -11645,6 +988,7 @@ ebi('op_cfg').innerHTML = (
' \n' +
'\n' +
'' + L.cl_keytype + '
\n' +
+ (!MOBILE ? '' + L.cl_rcm + '
' : '') +
'' + L.cl_hiddenc + ' ' + (MOBILE ? '' + L.cl_hidec + ' / ' : '') + '' + L.cl_reset + '
'
);
@@ -11674,6 +1018,35 @@ QS('#op_mkdir input[type="submit"]').value = L.ab_mkdir;
QS('#op_new_md input[type="submit"]').value = L.ab_mkdoc;
QS('#op_msg input[type="submit"]').value = L.ab_msg;
+// right-click menu
+ebi('rcm').innerHTML = (
+ '' + L.rc_opn + '' +
+ '' + L.rc_ply + '' +
+ '' + L.rc_pla + '' +
+ '' + L.rc_txt + '' +
+ '' + L.rc_md + '' +
+ '' +
+ '' + L.rc_cpl + '' +
+ '' + L.rc_dl + '' +
+ (have_zip ?
+ '' + L.rc_zip + ''
+ : '') +
+ '' +
+ (has(perms, "move") ?
+ '' + L.rc_del + '' +
+ '' + L.rc_cut + ''
+ : '') +
+ '' + L.rc_cpy + '' +
+ (has(perms, "write") ?
+ '' + L.rc_pst + '' +
+ '' +
+ '' + L.rc_nfo + '' +
+ '' + L.rc_nfi + ''
+ : '') +
+ '' +
+ '' + L.rc_sal + '' +
+ '' + L.rc_sin + ''
+);
(function () {
var ops = QSA('#ops>a');
@@ -11805,14 +1178,34 @@ var ACtx = !IPHONE && (window.AudioContext || window.webkitAudioContext),
hash0 = location.hash,
sloc0 = '' + location,
noih = /[?&]v\b/.exec(sloc0),
+ fullui = /[?&]fullui\b/.exec(sloc0),
+ nonav = !fullui && (/[?&]nonav\b/.exec(sloc0) || window.ui_nonav),
+ notree = !fullui && (/[?&]notree\b/.exec(sloc0) || window.ui_notree || nonav),
dbg_kbd = /[?&]dbgkbd\b/.exec(sloc0),
abrt_key = "",
+ can_shr = false,
+ in_shr = false,
rtt = null,
+ srvinf = "",
ldks = [],
dks = {},
dk, mp;
+var x = '';
+if (!fullui) {
+ if (window.ui_nombar || /[?&]nombar\b/.exec(sloc0)) x += '#ops,';
+ if (window.ui_noacci || /[?&]noacci\b/.exec(sloc0)) x += '#acc_info,';
+ if (window.ui_nosrvi || /[?&]nosrvi\b/.exec(sloc0)) x += '#srv_info,#srv_info2,';
+ if (window.ui_nocpla || /[?&]nocpla\b/.exec(sloc0)) x += '#goh,';
+ if (window.ui_nolbar || /[?&]nolbar\b/.exec(sloc0)) x += '#wfp,';
+ if (window.ui_noctxb || /[?&]noctxb\b/.exec(sloc0)) x += '#wtoggle,';
+ if (window.ui_norepl || /[?&]norepl\b/.exec(sloc0)) x += '#repl,';
+}
+if (x)
+ document.head.appendChild(mknod('style', '', x.slice(0, -1) + '{display:none!important}'));
+
+
if (location.pathname.indexOf('//') === 0)
hist_replace(location.pathname.replace(/^\/+/, '/'));
@@ -11916,6 +1309,7 @@ var mpl = (function () {
"os_ctl": bcfg_get('au_os_ctl', have_mctl) && have_mctl,
'traversals': 0,
'm3ut': '#EXTM3U\n',
+ 'np': [{'file': 'nothing'}, ['file']],
};
bcfg_bind(r, 'one', 'au_one', false, function (v) {
if (mp.au)
@@ -12112,7 +1506,7 @@ var mpl = (function () {
if (!r.os_ctl || !mp.au)
return;
- var np = get_np()[0],
+ var np = mpl.np[0],
fns = np.file.split(' - '),
artist = (np.circle && np.circle != np.artist ? np.circle + ' // ' : '') + (np.artist || (fns.length > 1 ? fns[0] : '')),
title = np.title || fns.pop(),
@@ -12136,10 +1530,8 @@ var mpl = (function () {
}
}
- if (cover) {
- cover = addq(cover, 'th=j');
- tags.artwork = [{ "src": cover, type: "image/jpeg" }];
- }
+ cover = addq(cover || mp.au.osrc, 'th=j');
+ tags.artwork = [{ "src": cover, type: "image/jpeg" }];
}
ebi('np_circle').textContent = np.circle || '';
@@ -12460,12 +1852,6 @@ function ft2dict(tr, skip) {
}
-function get_np() {
- var tr = QS('#files tr.play');
- return ft2dict(tr, { 'up_ip': 1 });
-};
-
-
// toggle player widget
var widget = (function () {
var r = {},
@@ -12523,9 +1909,8 @@ var widget = (function () {
ck = irc ? '06' : '',
cv = irc ? '07' : '',
m = ck + 'np: ',
- npr = get_np(),
- npk = npr[1],
- np = npr[0];
+ npk = mpl.np[1],
+ np = mpl.np[0];
for (var a = 0; a < npk.length; a++)
m += (npk[a] == 'file' ? '' : npk[a]).replace(/^\./, '') + '(' + cv + np[npk[a]] + ck + ') // ';
@@ -13130,7 +2515,7 @@ function mpause(e) {
return true;
dist *= -1;
- mp.setvol(mp.vol + dist / 500);
+ mp.setvol(Math.round((mp.vol + dist / 500) * 100) / 100 );
vbar.draw();
ev(e);
};
@@ -13224,6 +2609,9 @@ var mpui = (function () {
if (mpl.prescan_evp == evp)
throw "evp match";
+ if (treectl.trunc)
+ return treectl.showmore(99999, repreload);
+
if (mpl.traversals++ > 4) {
mpl.prescan_evp = null;
toast.inf(10, L.mm_nof);
@@ -13700,8 +3088,8 @@ function play(tid, is_ev, seek) {
}
if (tn >= mp.order.length) {
- if (mpl.pb_mode == 'stop')
- return;
+ if (treectl.trunc)
+ return treectl.showmore(99999, next_song);
if (mpl.pb_mode == 'loop' || ebi('unsearch')) {
tn = 0;
@@ -13710,6 +3098,7 @@ function play(tid, is_ev, seek) {
treectl.ls_cb = next_song;
return tree_neigh(1);
}
+ else return;
}
if (tn < 0) {
@@ -13720,6 +3109,7 @@ function play(tid, is_ev, seek) {
treectl.ls_cb = last_song;
return tree_neigh(-1);
}
+ else return;
}
tid = mp.order[tn];
@@ -13774,9 +3164,12 @@ function play(tid, is_ev, seek) {
for (var a = 0, aa = trs.length; a < aa; a++)
clmod(trs[a], 'play');
- var oid = 'a' + tid;
- clmod(ebi(oid), 'act', 1);
- clmod(ebi(oid).closest('tr'), 'play', 1);
+ var oid = 'a' + tid,
+ t_a = ebi(oid),
+ t_tr = t_a.closest('tr');
+
+ clmod(t_a, 'act', 1);
+ clmod(t_tr, 'play', 1);
clmod(ebi('wtoggle'), 'np', mpl.clip);
clmod(ebi('wtoggle'), 'm3u', mpl.m3uen);
if (thegrid)
@@ -13798,12 +3191,12 @@ function play(tid, is_ev, seek) {
}
if (!seek && !ebi('unsearch')) {
- var o = ebi(oid);
- o.setAttribute('id', 'thx_js');
+ t_a.setAttribute('id', 'thx_js');
if (mpl.aplay)
sethash(oid + getsort());
- o.setAttribute('id', oid);
+ t_a.setAttribute('id', oid);
}
+ mpl.np = ft2dict(t_tr, { 'up_ip': 1 });
pbar.unwave();
if (mpl.waves)
@@ -13818,7 +3211,7 @@ function play(tid, is_ev, seek) {
catch (ex) {
toast.err(0, esc(L.mm_playerr + basenames(ex)));
}
- clmod(ebi(oid), 'act');
+ clmod(t_a, 'act');
mpl.t_eplay = setTimeout(next_song, 5000);
}
@@ -14396,7 +3789,7 @@ var fileman = (function () {
hdel = !(have_del && has(perms, 'delete')),
hcut = !(have_mv && has(perms, 'move')),
hpst = !(have_mv && has(perms, 'write')),
- hshr = !(have_shr && acct != '*' && (has(perms, 'read') || has(perms, 'write')));
+ hshr = !can_shr || !get_evpath().indexOf(have_shr);
if (!(enren || endel || encut || enpst))
hren = hdel = hcut = hpst = true;
@@ -14507,7 +3900,7 @@ var fileman = (function () {
'perms ',
];
for (var a = 0; a < perms.length; a++)
- if (!has(['admin', 'move'], perms[a]))
+ if (!has(['admin', 'move', 'delete'], perms[a]))
html.push('' + perms[a] + '');
if (has(perms, 'write'))
@@ -14647,7 +4040,8 @@ var fileman = (function () {
r.rename = function (e) {
ev(e);
- var sel = msel.getsel();
+ var sel = msel.getsel(),
+ all = msel.all;
if (!sel.length)
return toast.err(3, L.fr_emore);
@@ -14657,11 +4051,16 @@ var fileman = (function () {
var f = [],
sn = ++r.sn,
base = vsplit(sel[0].vp)[0],
+ s2d = {},
mkeys;
r.f = f;
+ r.n_s = 1;
+ r.n_d = 1;
for (var a = 0; a < sel.length; a++) {
+ s2d[a] = all.indexOf(sel[a]);
+
var vp = sel[a].vp;
if (vp.endsWith('/'))
vp = vp.slice(0, -1);
@@ -14671,9 +4070,10 @@ var fileman = (function () {
return toast.err(0, esc('bug:\n' + base + '\n' + vsp[0]));
var vars = ft2dict(ebi(sel[a].id).closest('tr'));
- mkeys = vars[1].concat(vars[2]);
+ mkeys = [".n.d", ".n.s"].concat(vars[1], vars[2]);
var md = vars[0];
+ md[".n.s"] = md[".n.d"] = 0;
for (var k in md) {
if (!md.hasOwnProperty(k))
continue;
@@ -14720,6 +4120,10 @@ var fileman = (function () {
' regex ',
'format ',
'preset ',
+ ' num0 ',
+ 'n.d= ',
+ 'n.s=',
+ ' ',
'',
'',
'',
@@ -14864,6 +4268,15 @@ var fileman = (function () {
};
spresets();
+ ebi('rn_n_s').oninput = function () {
+ r.n_s = parseInt(this.value || '1');
+ ifmt.oninput();
+ };
+ ebi('rn_n_d').oninput = function () {
+ r.n_d = parseInt(this.value || '1');
+ ifmt.oninput();
+ };
+
ire.onkeydown = ifmt.onkeydown = function (e) {
var k = (e.key || e.code) + '';
@@ -14893,14 +4306,18 @@ var fileman = (function () {
for (var a = 0; a < f.length; a++) {
var m = re ? re.exec(f[a].ofn) : null,
+ d = f[a].md,
ok, txt = '';
+ d[".n.s"] = d["n.s"] = '' + (r.n_s + a);
+ d[".n.d"] = d["n.d"] = '' + (r.n_d + s2d[a]);
+
if (re && !m) {
txt = 'regex did not match';
ok = false;
}
else {
- var ret = fmt_ren(m, f[a].md, fmt);
+ var ret = fmt_ren(m, d, fmt);
ok = ret[0];
txt = ret[1];
}
@@ -15214,6 +4631,7 @@ var fileman = (function () {
var html = [
'',
'',
'',
' src: ' + esc(r.clip[0].replace(/[^/]+$/, '')),
'',
@@ -15317,11 +4735,21 @@ var fileman = (function () {
rn_cancel(e);
okgo();
}
+ function rn_skip(e) {
+ var o = QSA('#rn_f tr.ng');
+ for (var a = o.length - 1; a >= 0; a--) {
+ var oo = o[a].querySelector('input');
+ oo.value = '';
+ oo.oninput.call(oo);
+ }
+ rn_apply();
+ }
function rn_cancel(e) {
ev(e);
rui.parentNode.removeChild(rui);
}
ebi('rn_cancel').onclick = rn_cancel;
+ ebi('rn_skip').onclick = rn_skip;
ebi('rn_apply').onclick = rn_apply;
var first_bad = 0;
@@ -15429,6 +4857,7 @@ var showfile = (function () {
'.log': 'ans',
'.m': 'matlab',
'.moon': 'moonscript',
+ '.nfo': 'ans',
'.patch': 'diff',
'.ps1': 'powershell',
'.psm1': 'powershell',
@@ -15436,6 +4865,7 @@ var showfile = (function () {
'.rs': 'rust',
'.sh': 'bash',
'.service': 'systemd',
+ '.txt': 'ans',
'.vb': 'vbnet',
'.v': 'verilog',
'.vert': 'glsl',
@@ -15449,7 +4879,8 @@ var showfile = (function () {
var x = txt_ext + ' ans c cfg conf cpp cs css diff glsl go html ini java js json jsx kt kts latex less lisp lua makefile md nim py r rss rb ruby sass scss sql svg swift tex toml ts vhdl xml yaml zig';
x = x.split(/ +/g);
for (var a = 0; a < x.length; a++)
- r.map["." + x[a]] = x[a];
+ if (!r.map["." + x[a]])
+ r.map["." + x[a]] = x[a];
r.sname = function (srch) {
return srch.split(/[?&]doc=/)[1].split('&')[0];
@@ -15779,6 +5210,33 @@ var showfile = (function () {
return out.join('');
};
+ r.ppj = function (e) {
+ ebi(e);
+ try {
+ r.ppj2();
+ }
+ catch (ex) {
+ toast.err(10, '' + ex);
+ }
+ };
+ r.ppj2 = function () {
+ var btn = ebi('dldoc'),
+ el = ebi('doc'),
+ t = el.textContent.trim(),
+ jo = JSON.parse(t),
+ jt = JSON.stringify(jo, null, t.indexOf('\n') + 1 ? 0 : 2);
+ el.textContent = jt;
+ el.innerHTML = '' + el.innerHTML + '';
+ try {
+ el = QS('#doc>code');
+ el.className = 'language-json';
+ Prism.highlightElement(el);
+ }
+ catch (ex) { }
+ btn.setAttribute('download', ebi('docname').innerHTML);
+ btn.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(jt));
+ };
+
r.mktree = function () {
var top = get_evpath().slice(SR.length),
crumbs = linksplit(top).join('/'),
@@ -15845,6 +5303,7 @@ var showfile = (function () {
'\n' +
@@ -15864,6 +5323,7 @@ var showfile = (function () {
ebi('prevdoc').onclick = function () { tree_neigh(-1); };
ebi('nextdoc').onclick = function () { tree_neigh(1); };
ebi('seldoc').onclick = r.tglsel;
+ ebi('ppjdoc').onclick = r.ppj;
bcfg_bind(r, 'wrap', 'wrapdoc', true, r.tglwrap);
bcfg_bind(r, 'taildoc', 'taildoc', false, r.tgltail);
bcfg_bind(r, 'tail2end', 'tail2end', true);
@@ -16021,7 +5481,8 @@ var thegrid = (function () {
function gclick(e, dbl) {
var oth = ebi(this.getAttribute('ref')),
- href = noq_href(this),
+ qhref = this.getAttribute('href'),
+ href = qhref.split('?')[0],
fid = oth.getAttribute('id'),
aplay = ebi('a' + fid),
atext = ebi('t' + fid),
@@ -16050,13 +5511,13 @@ var thegrid = (function () {
aplay.click();
else if (is_dir && !have_sel)
- treectl.reqls(href, true);
+ treectl.reqls(qhref, true);
else if (is_txt && !has(['md', 'htm', 'html'], is_txt))
atext.click();
else if (!is_img && have_sel)
- window.open(href, '_blank');
+ window.open(qhref, '_blank');
else {
if (!dbl)
@@ -16266,23 +5727,20 @@ var thegrid = (function () {
afterShow: function () {
r.bbox_opts.refocus = true;
},
- captions: function (g) {
- var idx = -1,
- h = '' + g;
-
- for (var a = 0; a < r.bbox.length; a++)
- if (r.bbox[a].imageElement == g)
- idx = a;
+ captions: function (g, idx) {
+ var h = '' + g;
return '' + (idx + 1) + ' / ' + r.bbox.length + ' -- ' +
+ '">' + (idx + 1) + ' / ' + this.length + ' -- ' +
esc(uricom_dec(h.split('/').pop())) + '';
},
- onChange: function (i) {
- sethash('g' + r.bbox[i].imageElement.getAttribute('ref') + getsort());
+ onChange: function (i, maxIdx) {
+ if (this[i].imageElement) {
+ sethash('g' + this[i].imageElement.getAttribute('ref') + getsort());
+ }
}
});
- r.bbox = br[0][0];
+ r.bbox = true;
r.bbox_opts = br[1];
};
@@ -16541,6 +5999,7 @@ var ahotkeys = function (e) {
return;
var k = (e.key || e.code) + '', pos = -1, n,
+ sh = e.shiftKey,
ae = document.activeElement,
aet = ae && ae != document.body ? ae.nodeName.toLowerCase() : '';
@@ -16579,6 +6038,9 @@ var ahotkeys = function (e) {
if (ebi('hkhelp'))
return qsr('#hkhelp');
+ if (ebi('rcm').style.display)
+ return rcm.hide();
+
if (toast.visible)
return toast.hide();
@@ -16663,7 +6125,7 @@ var ahotkeys = function (e) {
if (k == '?')
return hkhelp();
- if (!e.shiftKey && ctrl(e)) {
+ if (!sh && ctrl(e)) {
var sel = window.getSelection && window.getSelection() || {};
sel = sel && !sel.isCollapsed && sel.direction != 'none';
@@ -16682,7 +6144,16 @@ var ahotkeys = function (e) {
return;
}
- if (e.shiftKey && kl != 'a' && kl != 'd')
+ if (showfile.active()) {
+ if (!sh && kl == 's')
+ return showfile.tglsel() || true;
+ if (!sh && kl == 'e' && ebi('editdoc').style.display != 'none')
+ return ebi('editdoc').click() || true;
+ if (sh && kl == 'j')
+ return showfile.ppj(e) || true;
+ }
+
+ if (sh && kl != 'a' && kl != 'd')
return;
if (/^[0-9]$/.test(k))
@@ -16731,7 +6202,7 @@ var ahotkeys = function (e) {
if (k == 'F2')
return fileman.rename();
- if (!treectl.hidden && (!e.shiftKey || !thegrid.en)) {
+ if (!treectl.hidden && (!sh || !thegrid.en)) {
if (kl == 'a')
return QS('#twig').click();
@@ -16739,13 +6210,6 @@ var ahotkeys = function (e) {
return QS('#twobytwo').click();
}
- if (showfile.active()) {
- if (kl == 's')
- showfile.tglsel();
- if (kl == 'e' && ebi('editdoc').style.display != 'none')
- ebi('editdoc').click();
- }
-
if (mp && mp.au && !mp.au.paused) {
if (kl == 's')
return sel_song();
@@ -17033,7 +6497,8 @@ var search_ui = (function () {
for (var a = 0; a < res.hits.length; a++) {
var r = res.hits[a],
ts = parseInt(r.ts),
- sz = esc(r.sz + ''),
+ sz = parseInt(r.sz),
+ hsz = filesizefun(sz),
rp = esc(uricom_dec(r.rp + '')),
ext = rp.lastIndexOf('.') > 0 ? rp.split('.').pop().split('?')[0] : '%',
id = 'f-' + ('00000000' + crc32(rp)).slice(-8);
@@ -17046,7 +6511,8 @@ var search_ui = (function () {
ext = '%';
var links = linksplit(r.rp + '', id).join('/'),
- nodes = ['- ' + links + '', sz];
+ nodes = [' - ' + links +
+ ' ' + hsz];
for (var b = 0; b < tagord.length; b++) {
var k = esc(tagord[b]),
@@ -17259,6 +6725,9 @@ var treectl = (function () {
mentered = null,
treesz = clamp(icfg_get('treesz', 16), 10, 50);
+ if (/[?&]dlni\b/.exec(sloc0))
+ swrite('dlni', /[?&]dlni=0\b/.exec(sloc0) ? 0 : 1);
+
var resort = function () {
ENATSORT = NATSORT && clgot(ebi('nsort'), 'on');
treectl.gentab(get_evpath(), treectl.lsc);
@@ -17267,11 +6736,10 @@ var treectl = (function () {
bcfg_bind(r, 'idxh', 'idxh', idxh, setidxh);
bcfg_bind(r, 'dyn', 'dyntree', true, onresize);
bcfg_bind(r, 'csel', 'csel', dgsel);
+ bcfg_bind(r, 'dlni', 'dlni', dlni, resort);
bcfg_bind(r, 'dots', 'dotfiles', see_dots, function (v) {
r.goto();
- var xhr = new XHR();
- xhr.open('GET', SR + '/?setck=dots=' + (v ? 'y' : ''), true);
- xhr.send();
+ setck('dots=' + (v ? 'y' : ''));
});
bcfg_bind(r, 'utctid', 'utctid', dutc, function (v) {
window.unix2ui = v ? unix2iso : unix2iso_localtime;
@@ -17308,9 +6776,7 @@ var treectl = (function () {
if (!v == !/\bidxh=y\b/.exec('' + document.cookie))
return;
- var xhr = new XHR();
- xhr.open('GET', SR + '/?setck=idxh=' + (v ? 'y' : 'n'), true);
- xhr.send();
+ setck('idxh=' + (v ? 'y' : 'n'));
}
setidxh(r.idxh);
@@ -17327,7 +6793,7 @@ var treectl = (function () {
r.show = function () {
r.hidden = false;
if (!entreed) {
- ebi('path').style.display = 'inline-block';
+ ebi('path').style.display = nonav ? 'none' : 'inline-block';
return;
}
@@ -17339,14 +6805,16 @@ var treectl = (function () {
aligngriditems();
};
- r.detree = function (e) {
+ r.detree = function (e, nw) {
ev(e);
entreed = false;
- swrite('entreed', 'na');
+ if (!nw)
+ swrite('entreed', 'na');
r.hide();
- ebi('path').style.display = '';
- }
+ if (!nonav)
+ ebi('path').style.display = '';
+ };
r.hide = function () {
r.hidden = true;
@@ -17356,7 +6824,7 @@ var treectl = (function () {
window.removeEventListener('resize', onresize);
window.removeEventListener('scroll', onscroll);
aligngriditems();
- }
+ };
function unmenter() {
if (mentered) {
@@ -17540,6 +7008,8 @@ var treectl = (function () {
};
r.prunetree = function (res) {
+ if (r.dots)
+ return;
var ptn = new RegExp(res.unlist);
var els = QSA('#treeul li>a+a');
for (var a = els.length - 1; a >= 0; a--)
@@ -17785,6 +7255,7 @@ var treectl = (function () {
try {
var res = JSON.parse(this.responseText);
Object.assign(res, res.cfg);
+ res.cfg.k;
}
catch (ex) {
if (r.ls_cb) {
@@ -17810,12 +7281,22 @@ var treectl = (function () {
if (res.files[a].tags === undefined)
res.files[a].tags = {};
+ sb_lg = res.sb_lg;
+ sb_md = res.sb_md;
dnsort = res.dnsort;
read_dsort(res.dsort);
dcrop = res.dcrop;
dth3x = res.dth3x;
dk = res.dk;
+ dlni = res.dlni;
+ if (!sread('dlni'))
+ clmod(ebi('dlni'), 'on', treectl.dlni = dlni);
+
+ dgrid = res.dgrid;
+ if (!sread('griden'))
+ clmod(ebi('griden'), 'on', thegrid.en = dgrid);
+
srvinf = res.srvinf;
if (rtt !== null)
srvinf += (srvinf ? ' // rtt: ' : 'rtt: ') + rtt;
@@ -17824,6 +7305,11 @@ var treectl = (function () {
if (o)
o.innerHTML = ebi('srv_info').innerHTML = '' + srvinf + '';
+ if (res.ufavico && (!favico.en || !ebi('icot').value)) {
+ while (qsr('head>link[rel~="icon"]')) { }
+ document.head.insertAdjacentHTML('beforeend', res.ufavico);
+ }
+
if (this.hpush && !showfile.active())
hist_push(this.top + (dk ? '?k=' + dk : ''));
@@ -17887,7 +7373,7 @@ var treectl = (function () {
fun();
}
- if (window.have_shr && QS('#op_unpost.act') && (cdir.startsWith(SR + have_shr) || get_evpath().startsWith(SR + have_shr)))
+ if (can_shr && in_shr && QS('#op_unpost.act'))
goto('unpost');
}
@@ -17912,6 +7398,8 @@ var treectl = (function () {
plain = [],
seen = {};
+ in_shr = have_shr && top.startsWith(SR + have_shr);
+
if (ae && /^tr$/i.exec(ae.nodeName))
if (ae = ae.querySelector('a[id]'))
cid = ae.getAttribute('id');
@@ -17921,7 +7409,7 @@ var treectl = (function () {
memo_dk(top, m[1]);
r.lsc = res;
- if (res.unlist) {
+ if (res.unlist && !r.dots) {
var ptn = new RegExp(res.unlist);
for (var a = nodes.length - 1; a >= 0; a--)
if (ptn.exec(uricom_dec(nodes[a].href.split('?')[0])))
@@ -17971,7 +7459,8 @@ var treectl = (function () {
var cl = /\.PARTIAL$/.exec(fname) ? ' class="fade"' : '',
ln = ['' + tn.lead + ' ' + hname + '', tn.sz];
+ top + tn.href + '" id="' + id + '">' + hname +
+ ' ' + filesizefun(tn.sz)];
for (var b = 0; b < res.taglist.length; b++) {
var k = esc(res.taglist[b]),
@@ -17994,6 +7483,11 @@ var treectl = (function () {
html.push('');
html = html.join('\n');
set_files_html(html);
+ if (r.dlni) {
+ var o = QSA('#files a[id]');
+ for (var a = 0, aa = o.length; a < aa; a++)
+ o[a].setAttribute('download', '');
+ }
if (r.trunc) {
r.setlazy(plain);
if (!r.ask) {
@@ -18047,11 +7541,9 @@ var treectl = (function () {
r.hydrate = function () {
qsr('#bbsw');
+ srvinf = ebi('srv_info').innerHTML.slice(6, -7);
if (ls0 === null) {
- var xhr = new XHR();
- xhr.open('GET', SR + '/?setck=js=y', true);
- xhr.send();
-
+ setck('js=y');
r.ls_cb = showfile.addlinks;
return r.reqls(get_evpath(), false, undefined, true);
}
@@ -18116,7 +7608,7 @@ var treectl = (function () {
catch (ex) { }
};
- r.showmore = function (n) {
+ r.showmore = function (n, cb) {
window.removeEventListener('scroll', r.tscroll);
console.log('nvis {0} -> {1}'.format(r.nvis, n));
r.nvis = n;
@@ -18126,6 +7618,8 @@ var treectl = (function () {
setTimeout(function () {
r.gentab(get_evpath(), r.lsc);
ebi('wrap').style.opacity = CLOSEST ? 'unset' : 1;
+ if (cb)
+ cb();
}, 1);
};
@@ -18214,6 +7708,11 @@ var treectl = (function () {
var cs = sread('entreed'),
vw = window.innerWidth / parseFloat(getComputedStyle(document.body)['font-size']);
+ if (notree) {
+ cs = 'na';
+ r.detree(null, 1);
+ }
+
if (cs == 'tree' || (cs != 'na' && vw >= 60))
r.entree(null, true);
@@ -18299,9 +7798,10 @@ function apply_perms(res) {
if (konmai < 0) {
acct = 'Ted Faro';
srvinf = 'FAS Nexus // 57.3 EiB free of 127 EiB';
+ res.shr_who = 'auth';
perms = res.perms = chk;
have_up2k_idx = have_tags_idx = 1;
- have_shr = have_mv = have_del = true;
+ have_mv = have_del = true;
}
var a = QS('#ops a[data-dest="up2k"]');
@@ -18355,6 +7855,9 @@ function apply_perms(res) {
o[a].getAttribute('data-dep') != 'idx' || have_up2k_idx
) ? '' : 'none';
+ if (in_shr)
+ ebi('opa_srch').style.display = 'none';
+
var act = QS('#ops>a.act');
if (act && act.style.display === 'none')
goto();
@@ -18366,6 +7869,11 @@ function apply_perms(res) {
de = document.documentElement,
tds = QSA('#u2conf td');
+ shr_who = res.shr_who || shr_who;
+ can_shr = acct != '*' && (have_read || have_write) && (
+ (shr_who == 'a' && has(perms, 'admin')) ||
+ (shr_who == 'auth'));
+
clmod(de, "read", have_read);
clmod(de, "write", have_write);
clmod(de, "nread", !have_read);
@@ -18383,6 +7891,8 @@ function apply_perms(res) {
if (up2k)
up2k.set_fsearch();
+ ebi('new_mdi').innerHTML = has(perms, "delete") ? L.nmd_i1 : L.nmd_i2;
+
widget.setvis();
thegrid.setvis();
if (!have_read && have_write)
@@ -18806,18 +8316,46 @@ var settheme = (function () {
freshen();
};
- freshen();
+ var m = /[?&]theme=([0-9]+)/.exec(sloc0);
+ if (m)
+ r.go(parseInt(m[1]));
+ else
+ freshen();
+
return r;
})();
+var setfszf = (function () {
+ function freshen() {
+ var cb = ebi('fszfmt'),
+ fmt = sread("fszfmt", humansize_fmts) || window.dfszf;
+ if (!has(humansize_fmts, fmt))
+ fmt = '1';
+ window.filesizefun = window['humansize_' + fmt];
+ cb.onchange = onch;
+ if (cb.value != fmt)
+ cb.value = fmt;
+ }
+ function onch(e) {
+ ev(e);
+ setfmt(ebi('fszfmt').value)
+ }
+ function setfmt(fmt) {
+ swrite("fszfmt", fmt);
+ freshen();
+ treectl.gentab(get_evpath(), treectl.lsc);
+ }
+ freshen();
+ return setfmt;
+})();
+
+
(function () {
function freshen() {
- lang = sread("cpp_lang", LANGS) || lang;
- var k, cb = ebi('langs'), html = [];
- for (var a = 0; a < LANGS.length; a++) {
- k = LANGS[a];
- html.push(''.format(k, Ls[k].tt));
+ var cb = ebi('langs'), html = [];
+ for (var a = 0; a < LANGN.length; a++) {
+ html.push(''.format(LANGN[a][0], LANGN[a][1]));
}
cb.innerHTML = html.join('');
cb.onchange = setlang;
@@ -18826,11 +8364,10 @@ var settheme = (function () {
function setlang(e) {
ev(e);
- var t = L.lang_set;
lang = ebi('langs').value;
- L = Ls[lang];
- swrite("cpp_lang", lang);
+ setck('cplng=' + lang);
freshen();
+ var t = L.tt == 'English' ? '' : Ls.eng.lang_set;
modal.confirm(L.lang_set + "\n\n" + t, location.reload.bind(location), null);
}
@@ -19153,13 +8690,17 @@ var msel = (function () {
tb = QS('#op_new_md input[name="name"]');
form.onsubmit = function (e) {
+ if (!has(perms, "delete") && !/\.md$/.test(tb.value)) {
+ ev(e);
+ toast.err(10, L.nmd_i2);
+ return false;
+ }
if (tb.value) {
if (toast.tag == L.mk_noname)
toast.hide();
return true;
}
-
ev(e);
toast.err(10, L.mk_noname, L.mk_noname);
return false;
@@ -19246,9 +8787,14 @@ var msel = (function () {
sf.textContent = 'sending...';
var xhr = new XHR(),
+ sel = msel.getsel(),
+ msg = uricom_enc(tb.value),
ct = 'application/x-www-form-urlencoded;charset=UTF-8';
- xhr.msg = tb.value;
+ for (var a = 0; a < sel.length; a++)
+ msg += "&sel=" + sel[a].vp;
+
+ xhr.msg = msg;
xhr.open('POST', get_evpath(), true);
xhr.responseType = 'text';
xhr.onload = xhr.onerror = cb;
@@ -19256,7 +8802,7 @@ var msel = (function () {
if (xhr.overrideMimeType)
xhr.overrideMimeType('Content-Type', ct);
- xhr.send('msg=' + uricom_enc(xhr.msg));
+ xhr.send('msg=' + xhr.msg);
return false;
};
@@ -19412,7 +8958,7 @@ function show_md(md, name, div, url, depth) {
var els = QSA('#epi a');
for (var a = 0, aa = els.length; a < aa; a++) {
var href = els[a].getAttribute('href');
- if (!href.startsWith('#') || href.startsWith('#md-'))
+ if (!href || !href.startsWith('#') || href.startsWith('#md-'))
continue;
els[a].setAttribute('href', '#md-' + href.slice(1));
@@ -19921,6 +9467,189 @@ ebi('files').onclick = ebi('docul').onclick = function (e) {
};
+
+var rcm = (function () {
+ if (MOBILE)
+ return {enabled: false}
+
+ var r = {
+ enabled: true
+ };
+ bcfg_bind(r, 'enabled', 'ren', true);
+
+ var menu = ebi('rcm');
+ var selFile = {
+ elem: null,
+ type: null,
+ path: null,
+ id: null,
+ relpath: null,
+ no_dsel: false
+ };
+
+ function mktemp(is_dir) {
+ var row = mknod('tr', 'temp',
+ ' -new- ' +
+ ' '
+ );
+ QS("#files tbody").appendChild(row);
+
+ function sendit(name) {
+ name = ('' + name).trim();
+ if (!name)
+ return;
+ var data = new FormData();
+ data.set("act", is_dir ? "mkdir" : "new_md");
+ data.set("name", name);
+
+ var req = new XHR();
+ req.open("POST", get_evpath());
+ req.onload = req.onerror = function() {
+ if (req.status == 405 || req.status == 500)
+ return toast.err(3, "a " + (is_dir ? "folder" : "file") + " with that name already exists.");
+ if (req.status < 200 || req.status > 399)
+ return toast.err(3, "couldn't create " + (is_dir ? "folder" : "file") + ":
" + esc(req.responseText) + '');
+ treectl.goto();
+ };
+ req.send(data);
+ }
+
+ var input = ebi("tempname");
+ input.onblur = function() {
+ sendit(input.value);
+ // Chrome blurs elements when calling remove for some reason
+ input.onblur = null;
+ row.remove();
+ };
+ input.onkeydown = function(e) {
+ if (e.key == "Enter")
+ sendit(input.value);
+ if (e.key == "Enter" || e.key == "Escape") {
+ input.onblur = null;
+ row.remove();
+ ev(e);
+ }
+ };
+ input.focus();
+ }
+
+ var opts = QSA('#rcm a');
+ for (var i = 0; i < opts.length; i++) {
+ opts[i].onclick = function(e) {
+ ev(e);
+ switch(e.target.id.slice(1)) {
+ case 'opn':
+ var a = mknod('a');
+ a.href = selFile.path;
+ a.target = selFile.type == "dir" ? '' : '_blank';
+ a.click();
+ break;
+ case 'ply': selFile.type == 'gf' ? thegrid.imshow(selFile.relpath) : play('f-' + selFile.id); break;
+ case 'pla': play('f-' + selFile.id); break;
+ case 'txt': location = '?doc=' + selFile.relpath; break;
+ case 'md': location = selFile.path + '?v'; break;
+ case 'cpl': cliptxt(location.protocol + '//' + location.host + selFile.path, function() {toast.ok(2, L.clipped)}); break;
+ case 'dl': ebi('seldl').click(); break;
+ case 'zip': ebi('selzip').click(); break;
+ case 'del': fileman.delete(); break;
+ case 'cut': fileman.cut(); break;
+ case 'cpy': fileman.cpy(); break;
+ case 'pst':
+ fileman.paste();
+ fileman.clip = [];
+ break;
+ case 'nfo': mktemp(true); break;
+ case 'nfi': mktemp(); break;
+ case 'sal':
+ msel.evsel(null, true);
+ selFile.no_dsel = true;
+ break;
+ case 'sin': msel.evsel(null, 't'); break;
+ }
+ r.hide(true);
+ };
+ }
+
+ function show(x, y, target, isGrid) {
+ selFile.elem = selFile.type = selFile.path = selFile.id = selFile.relpath = null;
+ selFile.no_dsel = false;
+ if (target) {
+ var file = target.closest("#files tbody tr");
+ if (isGrid && target.matches && target.matches('#ggrid > a')) {
+ var ref = ebi(target.getAttribute('ref'));
+ file = ref && ref.closest('#files tbody tr');
+ }
+ if (file) {
+ selFile.no_dsel = clgot(file, "sel");
+ clmod(file, "sel", true);
+ selFile.elem = file;
+
+ selFile.path = basenames(file.children[1].firstChild.href).split('?')[0];
+ selFile.relpath = selFile.path.split('/').slice(-1)[0];
+ if (noq_href(file.children[1].firstChild).endsWith("/"))
+ selFile.type = "dir";
+ else {
+ var lead = file.firstChild.firstChild;
+ selFile.id = lead.id.split('-')[1];
+ selFile.type = lead.innerHTML[0] == '(' ? 'gf' : lead.id.split('-')[0];
+ }
+ }
+ }
+ msel.selui();
+
+ var has_sel = msel.getsel().length;
+ var has_clip = fileman.clip.length;
+
+ clmod(ebi('ropn'), 'hide', !selFile.path);
+ clmod(ebi('rply'), 'hide', selFile.type != 'gf' && selFile.type != 'af');
+ clmod(ebi('rpla'), 'hide', selFile.type != 'gf');
+ clmod(ebi('rtxt'), 'hide', !selFile.id);
+ clmod(ebi('rs1'), 'hide', !selFile.path);
+ clmod(ebi('rmd'), 'hide', !selFile.id || selFile.path.slice(-3) != '.md');
+ clmod(ebi('rcpl'), 'hide', !selFile.path);
+ clmod(ebi('rdl'), 'hide', !has_sel);
+ clmod(ebi('rzip'), 'hide', !has_sel);
+ clmod(ebi('rs2'), 'hide', !has_sel);
+ clmod(ebi('rcut'), 'hide', !has_sel);
+ clmod(ebi('rdel'), 'hide', !has_sel);
+ clmod(ebi('rcpy'), 'hide', !has_sel);
+ clmod(ebi('rpst'), 'hide', !has_clip);
+ clmod(ebi('rs3'), 'hide', !has_sel || !has_clip);
+
+ menu.style.left = x + 5 + 'px';
+ menu.style.top = y + 5 + 'px';
+ menu.style.display = 'block';
+ menu.focus();
+ }
+
+ r.hide = function (force) {
+ if (!menu.style.display || (!force && menu.contains(document.activeElement)))
+ return;
+ if (selFile.elem && !selFile.no_dsel) {
+ clmod(selFile.elem, "sel", false);
+ msel.selui();
+ }
+ selFile.elem = selFile.type = selFile.path = selFile.id = selFile.relpath = null;
+ selFile.no_dsel = false;
+ menu.style.display = '';
+ }
+
+ ebi('wrap').oncontextmenu = function(e) {
+ if (!r.enabled || e.shiftKey || menu.style.display) {
+ r.hide(true);
+ return true;
+ }
+ ev(e);
+ var gfile = thegrid.en && e.target && e.target.closest('#ggrid > a');
+ show(xscroll() + e.clientX, yscroll() + e.clientY, gfile || e.target, gfile);
+ return false;
+ };
+ menu.onblur = function() {setTimeout(r.hide)};
+
+ return r;
+})();
+
+
function reload_mp() {
if (mp && mp.au) {
mpo.au = mp.au;
@@ -19970,14 +9699,6 @@ function reload_browser() {
ebi('path').appendChild(o);
}
- var oo = QSA('#files>tbody>tr>td:nth-child(3)');
- for (var a = 0, aa = oo.length; a < aa; a++) {
- var sz = oo[a].textContent.replace(/ +/g, ""),
- hsz = sz.replace(/\B(?=(\d{3})+(?!\d))/g, " ");
-
- oo[a].textContent = hsz;
- }
-
reload_mp();
try { showsort(ftab); } catch (ex) { }
makeSortable(ftab, function () {
@@ -19998,3 +9719,5 @@ function reload_browser() {
msel.render();
}
treectl.hydrate();
+
+J_BRW = 2;
diff --git a/copyparty/web/idp.html b/copyparty/web/idp.html
index 8a58f6be..9db4b88c 100644
--- a/copyparty/web/idp.html
+++ b/copyparty/web/idp.html
@@ -10,7 +10,7 @@
-{{- html_head }}
+{{ html_head }}
@@ -50,6 +50,10 @@ document.documentElement.className = (STG && STG.cpp_thm) || "{{ this.args.theme
{%- if js %}
{%- endif %}
+
diff --git a/copyparty/web/md.html b/copyparty/web/md.html
index 429a1eff..d1a186ec 100644
--- a/copyparty/web/md.html
+++ b/copyparty/web/md.html
@@ -9,7 +9,7 @@
{%- if edit %}
{%- endif %}
-{{- html_head }}
+{{ html_head }}
@@ -22,7 +22,8 @@
editor
tools
- prettify table (ctrl-k)
+ beautify table (ctrl-k)
+ beautify json (ctrl-j)
non-ascii: iterate (ctrl-u)
non-ascii: markup
non-ascii: whitelist
@@ -160,8 +161,17 @@ try { l.light = drk? 0:1; } catch (ex) { }
{%- if edit %}
{%- endif %}
+
{%- if js %}
{%- endif %}
-
+