Compare commits

...

143 Commits

Author SHA1 Message Date
Rafał Mikrut 2a32a52aa8
Fix crashing images (#1230) 3 months ago
Rafał Mikrut e5a0219bc9
Small fixes (#1226)
* Use P instead L

* Cons

* Fix loading invalid item

* 1.75.0
3 months ago
Rafał Mikrut 4dbc26e18c Update yanked png, change to thin lto, fix cli commands 3 months ago
Rafał Mikrut c58569eaa0 Fix license 3 months ago
Rafał Mikrut 8109a826b9
Version 7.0.0 (#1212) 3 months ago
Rafał Mikrut 51b802205b
Fix invalid simplifying of not full header items (#1211) 3 months ago
Rafał Mikrut 0446ff366c
More work on Krokiet (#1210)
* Disable flaky tests

* More

* More

* About

* TODO

* More

* Heh

* Progress

* A little

* Music

* Models

* Subsettings

* Water

* Header

* Saving

* Poprawa elementów

* Ad

* Names
3 months ago
Thomas Andreas Jung 9599ed5377
Use sets in the tests for expected and actual files to make those stable. (#1209) 3 months ago
Rafał Mikrut 378fa1fd6e
Excluded extensions and krokiet new features (#1184)
* AVC

* Import split

* Default thread size

* Hen

* Allowed extensions

* Perf

* Connect

* Excluded

* Zmiany

* Optimization

* 4.10

* At once

* Included

* Chang

* VD

* VD

* Hashes

* Wersja

* SD

* Up

* Up

* 2024

* Dup

* Slint files

* Added  select

* Selections

* Fix

* LTO

* Actions

* Added popup delete

* AB

* V4

* Release

* LTO

* Basic moving

* Commonsy

* Moving probably works

* Popup move
4 months ago
Thomas Andreas Jung b63c631e14
Support hard links for similar images and videos with `-L` (#1201)
This ignores matches for files that have the same inode.

This only works on Unix.
4 months ago
codingnewcode 0cc115c96e
Add add text too small to read on windows workaround link (+small readme fix) (#1202)
* add text too small to read on windows workaround
credit goes to @linnik in https://github.com/qarmin/czkawka/issues/863#issuecomment-1416761308 for publicly providing the solution beforehand, this just implements the aforementionned workaround.

* small readme fix for consistency
hopefully i didnt get the meaning wrong and change it.

* add the modify gtk.css fix
credit goes to @Erijoda in https://github.com/qarmin/czkawka/issues/787#issuecomment-1292253437

---------

Co-authored-by: Rafał Mikrut <41945903+qarmin@users.noreply.github.com>
4 months ago
Tom Praschan a5f89fbaad
docs: various grammar/spelling fixes (#1190) 4 months ago
Rafał Mikrut 6cde5ab7a0
Things dedup (#1183)
* Deduplicate cli settings

* Save

* Nice

* TODO even bigger generalization

* Simplification

* Bad
5 months ago
Rafał Mikrut 0defcbd253
Fixes random things (#1160)
* AB

* More simple

* Optimize even more code

* Delete info

* Common

* Randoms

* Included

* ProfData

* Upgrade
5 months ago
Rafał Mikrut bf78fc8b57
Randoms (#1159) 6 months ago
Rafał Mikrut 219f9f058b
Allocation decrease (#1156) 6 months ago
Rafał Mikrut 739e2a9860
Microoptimizations (#1153) 6 months ago
Rafał Mikrut 51198c2043
Optimize excluded items (#1152) 6 months ago
rugk 306648a37d
Improve bug reporting template (#1111)
* Improve bug reporting template

I tried some adjustments to the bug report template to include more details and structure the information in a better way.

* Better colon position
6 months ago
Rafał Mikrut 9228f45f7a
Clear items via custom method instead broken builtin (#1112) 6 months ago
Rafał Mikrut c6b1eaeeb4
Alternative frontend with Slint (#1102) 6 months ago
Aarni Koskela 8df5e991a6
Enable drag/drop for folder selection (#1106) 7 months ago
Rafał Mikrut 99277b9ea5
Try to fix issue with missing samba drives (#1096)
* GA

* GA

* GA

* GAS

* KDV

* ASG

* Wa

* BKF

* Fmt
8 months ago
Rafał Mikrut 59ff9f3e3c
Canonicalize also windows paths (#1093)
* Canonicalize also windows paths

* El capone

* Hehe

* HASASS

* Also regree

* K

* Kek

* Format
8 months ago
Rafał Mikrut 44400e08af Release version 6.1.0 8 months ago
Rafał Mikrut 0f7aa95a64
Better logging (#1091)
* Fun_time

* levels

* No rav1e

* Freaking
8 months ago
Rafał Mikrut e92a8a65de More images 8 months ago
Rafał Mikrut 9072b0cc98 Bind data folder into subprojects 8 months ago
Rafał Mikrut 8b20f78573
Allow removing from CLI found image/music/video files (#1087)
* Bind delete

* Audio tags/content

* Tests

* Test videos

* FFmpeg
8 months ago
Rafał Mikrut e50d930683
Fix problem with not proper loading cached results in duplicate mode (#1086)
* Fix problem with not proper loading cached results in duplicate mode

* Dbg
8 months ago
Rafał Mikrut 0462324607
Add json support to gui (#1083)
* Add json support to gui

* Cli support

* Tests

* Zip fixed

* Always printing

* Zip

* Bound

* Improved CI

* More tests

* Maybe

* Different duplicate delete
8 months ago
Rafał Mikrut 9b57382e39
Core cleanup/changes (#1082)
* FunTime

* Ft

* Unify delete files

* Files

* FunTime

* Smaller Printing

* Cleaned

* Fallen
8 months ago
Rafał Mikrut 4a1f6227db
Add more excluded items to windows default settings (#1074) 8 months ago
Rafał Mikrut bb2806fa05
Update issue templates (#1075) 8 months ago
Rafał Mikrut e976d40eee
Loading saving cache improvements (#1072)
* Loading cache

* Loading

* Loading x2

* Optimization

* Cache common

* Delete outdated cache

* Common

* Loading cache/save almost

* Simplified a lot of cache concept

* Fix regression
8 months ago
Rafał Mikrut edfc8e7b5f
Random updates and modifications (#1070)
* Updates

* Rust embed

* GTK 4

* Handsome logger

* Handsome logger

* Lock

* DB

* Logging

* It compile

* Cleanup

* Sl

* Sl

* Slint

* 1.70.0

* Appimage
8 months ago
undefined-landmark 30068b58d3
Add reference folder documentation (#1031) 8 months ago
Nick Gallimore 14bd35a73b
Generalize clear cache button text since it is used for images and video (#1047) 8 months ago
Rafał Mikrut a77cb27f3b
Random randoms (#1012)
* Not so many

* A1

* A3

* A4
11 months ago
Jocelyn Le Sage 2dabb788e6
Fixed the number of similar images/videos per group in saved results. (#1017) 11 months ago
Jocelyn Le Sage 9e6cc35783
Fixed saved results for similar music files. (#1016) 11 months ago
Rafał Mikrut c36c841d9f
Restore GTK 4.6 on windows (#992)
* Restore 4.8 GTK on Windows

* GTK 4.6
12 months ago
Rafał Mikrut 7cb355a359
6.0.0 version (#988)
* 4.10 and build heif for all

* 4.10

* Disable heif in windows build

* A1

* B1
12 months ago
Rafał Mikrut 55b2744bf4
Simplify, fix and improve similar images algorithm (#983)
* Random changer

* CD

* A1

* Almost?

* Nein

* Heif

* Tests that needs to be fixed

* Fixed test

* Tests

* Fixed image counting in reference folders

* Lock

* Catch possible more bugs in pdf

* Find ever more bugs
12 months ago
Rafał Mikrut 04a91aeca7
Change Github CI (#973)
* Change Github CI

* Windows CI

* Fix sorting

* Windows
1 year ago
Rafał Mikrut 582e5417ac
Unify progress data (#972)
* Unify progress data code

* Do not increment in threads values every time when finding file/folder(works quite good, may works bad with folders with ~several thousands of files)

* Partial changes

* Simplify creating tree_view

* Allow setting thread number in CLI

* Simplified code and add tests with help of copilot
1 year ago
Rafał Mikrut 78d00eeb99
Add finding similar audio by content (#970)
* In prehashing check for user clicks, less often

* Similar audio

* Remove ugly time checking

* Fix using cache

* Fix cache and improve performance of validating items

* Remove cache type - cache should be saved to two different cache files(because )

* Working

* Simple multithreading

* Basic Generalization

* Reference folder and swap cleaning

* Split into multiple files

* Commons, improved GUI message

* Simplifying thread run

* Check was stopped

* Fix checking same files

* Make read single file tag more general

* Remove unnnecessary clone

* Reading tags

* Base

* Search

* Gui Fix

* Gui Fix

* Tooltip
1 year ago
Liru Wilkowski 14ccb49e45
Add additional package for Mac installation (#971)
cairo-rs fails building if `pkg-config` isn't installed on a Mac. It's fairly visible and easy to fix, but may as well add it to the instructions.
1 year ago
Rafał Mikrut 72df211ca2
Big core cleaning (#969)
* Update dependencies

* Split functions in big file finder

* Bad Extensions

* Thread handler bad extensions

* Progress handler

* Atomic counter

* All thread handler simplifying

* Simplifying

* More

* Again

* Btreemap simplifying

* Also

* Next

* Common dir

* Simplify music checking

* Similar Images coplexity

* Loading cache

* Hashes

* Split chunked hashes

* Split into multiple parts

* Last similar video piece

* Probably last part

* Cleaned

* Temp
1 year ago
santiago fn 67e648a5ab
Fix Snap build (#965)
* Fix Snap build

Rustc & cargo are now installed using the script provided by
rust-lang.org. Their versions were bumped to 1.68.2. The (outdated)
versions bundled to core22 are not used anymore.

(Solution copied from https://forum.snapcraft.io/t/correct-snapcraft-syntax-for-rust-based-snap-on-core22/30947/5)

* Added additional metadata

* Remove unnecessaty icon attribute
1 year ago
Tom Paine 0d4ae0a31b
Update Installation.md for Mac M1/M2 (#945)
* Update Installation.md

* Update Installation.md
1 year ago
Rafał Mikrut 5272309341
Implement finding duplicates by size/name (#956)
* Implementing Size+Name method

* Partial hashing

* Move hashing into different functions

* Update

* Add some code

* Split code into parts

* Entry size

* Simplify code

* Bottom Buttons

* Bottom Buttons

* Confusion

* Libheif

* Simplified sorting

* Revert libheif change
1 year ago
Alexis Lefebvre de4edba380
fix typo in linux_gui.yml (#946) 1 year ago
Alexis Lefebvre e524f23e8c
Installation.md: explain how to install on Linux (#949) 1 year ago
Alexis Lefebvre 336bbd3057
fix image for docker (#947) 1 year ago
Rafał Mikrut 329fc8f93d
Let some else (#936) 1 year ago
Rafał Mikrut de9f70310a
Webp preview workaround remove (#923) 1 year ago
Rafał Mikrut 1c76d3426c
Gtk 4.8 on Windows and console build (#920)
* Gtk 4.8 on Windows and console build

* Update windows.yml

Ci new

* 4.8
1 year ago
Fr_Dae 699da09a54
Add ✔ to readme (#906)
* ✔✓☑🗹🗸✔✓

🗷✘✗✖✕

✔✓☑🗹🗸✔✓

* Update README.md
1 year ago
Rafał Mikrut c6c4230699 Fixes problem with new file dialog 1 year ago
Rafał Mikrut 27410bcd45 Release version 5.1.0 1 year ago
Rafał Mikrut f1c6e6da17
Add sort button (#894)
* Add sort button

* Update lofty and gtk-rs

* Fix bug with invalid music tags with reference folders

* Remove try at

* Fix loading of certain directories with disabled loading settings at start

* Change FileChooserDialog to FileChooserNative

* Any

* Copy Clone

* Popover sort basic

* Builder using

* Basic sorting

* Fix not working sorting by size

* Changelog
1 year ago
Rafał Mikrut 8ea9b4b800
Run pydantic clippy lints on project (#901)
* Update dependencies

* Pydantic part 1

* Some renames, basic Cambalache view

* 2

* 3

* Unwrap

* Tests

* Update CLI to Ubuntu 20.04
1 year ago
Rodrigo Torres d39354a51f
Change interpolation to bilinear (#895) 1 year ago
Rafał Mikrut 8ab4c19eea
Mac CI fix (#888)
* Mac CI fix

* Maybe now

* Maybe

* FAF

* Hmm

* AFSf
1 year ago
Rafał Mikrut 8e24492416
Always remove files created to check if hardlinking works (#883) 1 year ago
Rafał Mikrut c9e9a65cc9
Windows hardlinking problem (#881)
* Clippy 1

* Nightly Clippy

* Disable hardlink button when on windows test of hardlinking failed

* Import things for new function
1 year ago
Alex e6b19270a6
Update to clap 4 (#878) 1 year ago
Rafał Mikrut b27a95e547
Split Mac CI with and without heif (#875) 2 years ago
Rafał Mikrut a66a2849d1
Allow to set number of used threads in scan (#839) 2 years ago
Rafał Mikrut b1fde3becc
Update dependencies (#870)
* Basic update

* From timestamp

* Clipppy nightly
2 years ago
Rafał Mikrut 53492395c5
Update GTK dependency (#857)
* Update GTK dependency

* 1.63 is minimal now
2 years ago
Kian-Meng Ang ddc4def99e
Fix typos (#840)
Found via `codespell -S i18n -L crate,nd,gir,noo`
2 years ago
OMEGA_RAZER 42ecc94deb
Update bad_extensions.rs (#834)
* Update bad_extensions.rs

Extensions are interchangeable. mp4 files being flagged as bad extensions of m4v. Apologies if they are in the wrong order.

* Update bad_extensions.rs
2 years ago
Dominik Piątkowski c549057cc8
Added missing spaces in translation files (#830) 2 years ago
Rafał Mikrut e731f5ed75
Faster similar images with reference folders (#826)
* Faster similar images with reference folders

* Still not works

* Probably works now

* Unnecessary assert when using reference folders

* HumanSize 2.0.0

* 1.62
2 years ago
Rafał Mikrut f16818dc8e Release 5.0.2 version 2 years ago
Rafał Mikrut d29935d208
Fix similar images algorithm (#799)
* Fixed missing images with similarity equal to 0

* Checking

* Unify algorithm between two functions

* Finally fix problem with missing images

* Lock and debug

* No comment
2 years ago
Rafał Mikrut 24b64a32c6 Compile heif image support only with Rust 1.60.0 which is not used to create official binaries 2 years ago
Rafał Mikrut d3e7c2d777
Update dependencies and fix clippy warnings (#815) 2 years ago
0x4A6F e20f30c66f
Reintroduce support for version argument e.g. (#806)
`czkawka_cli --version`
2 years ago
Alexis Lefebvre 95d1d73a29
CLI: rewrite the message for minimal file size (#807) 2 years ago
Rafał Mikrut ae87489f3b Release hotfix 5.0.1 version 2 years ago
Rafał Mikrut 7d654a7899
Added korean language to GUI (#797) 2 years ago
alexdraconian 624be66b4d
Added Korean localization to GUI (#796) 2 years ago
Rafał Mikrut 44fb75ada5
Smaller fixes (#795)
* Improve a little documentation, add missing bad extension

* Allow to find the smallest files from CLo

* Show error when all directories are reference folders

* 2 more testing objects

* Add missing original preset
2 years ago
Rafał Mikrut 67db713a05
Add tests to CI (#791)
* Add tests to CI

* Xvfb

* Smaller amount of workflows

* ABCD
2 years ago
Rafał Mikrut 97563a7b2a Fix problem with manual adding of windows disks like C:/ 2 years ago
Rafał Mikrut 5d79dc7ccf Sort big files by default descending 2 years ago
Rafał Mikrut 390f4751e8 Release 5.0.0 version 2 years ago
Rafał Mikrut bf9dd352dd
Small fixes (#786) 2 years ago
Rafał Mikrut d5b08787a0 Update translates 2 years ago
Rafał Mikrut 2f932e20ff
Sort speedup and manual add window improvements (#782)
* Sort unstable

* Multiple entries when using manual add

* Do not allow to add multiple same directories to check

* Assert
2 years ago
Rafał Mikrut 8f0527cd33
Add option to exclude files from other filesystems in GUI(Linux) (#776)
* Add exclude other fs to GUI

* Exclude in FS

* Fix crashes in gui and core

* More tests
2 years ago
Rafał Mikrut 07cfc7884f Fix crash with 0 checked images 2 years ago
Rafał Mikrut e3cea67634
Default to 16 hash size and add "Original" similarity (#768) 2 years ago
Rafał Mikrut d1c66fda1b
Change image hash compare algorithm and add multithreading (#762)
* New image compare algorithm

* Par iter

* Ending words
2 years ago
Rafał Mikrut 4765bee87f
Add info about column type to global variable (#760) 2 years ago
Rafał Mikrut d42e17c15f
Update to clap from structopt (#759) 2 years ago
Rafał Mikrut 486bec15ad
Add more windows extension and add selection of type of broken files (#749)
* Add more windows extension

* ABCD

* Windows CI and basic choosing broken files

* Core and GUI support for few
2 years ago
Rafał Mikrut db09dc9363
Heic or heif support, don't know (#750) 2 years ago
Rafał Mikrut 56fc29fa4f
Speedup little entry access in maps and fix missing extension workarounds (#747) 2 years ago
Rafał Mikrut ec13f86aee
Add smallest files mode (#746) 2 years ago
Rafał Mikrut cf94ab918e
Reformat code with Intelij tool (#741) 2 years ago
Rafał Mikrut 5119a377c7
Fix pack (#740) 2 years ago
Rafał Mikrut 3748411ebd
Trash music (#732) 2 years ago
Rafał Mikrut 19afce5d2e
Several small fixes (#727) 2 years ago
Rafał Mikrut 6d8b33d8cf
GTK 4 Port (#466) 2 years ago
Dominik Piątkowski 849eb5a637
Grammatical/typo fix of the Compilation.md instruction file (#719) 2 years ago
Joey Babcock da061e8037
Small typo/grammatical fix (#709)
"they extension" -> their extension
Small fix that you can also feel free to include in a larger commit at a later time :)
2 years ago
ChihWei Wang 96def07bc9
Change option of dup subcommand from '-ht' to 't' (#720)
Option 'ht' conflicts with 'h' since the short option should be one char.
2 years ago
Rafał Mikrut a54224fbd0
Update ImagePipe (#705)
* Update ImagePipe, fixes music finder

* Change rodio library, enable by default checking for broken audio files

* Don't crash when checking for broken files

* Fix stopping of scan in broken files

* No more

* PDF Support

* Infer and crash handler for music
2 years ago
Rafał Mikrut 073ae6f72f
Saves results when stopping scan (#713) 2 years ago
Alexis Lefebvre 637e97e66d
Instruction.md: fix typo (#707) 2 years ago
Rafał Mikrut dd103b9520
Take info about music file from all available tags (#698) 2 years ago
Rafał Mikrut cb7e9573ef
Show preview also for non lowercase extensions (#694) 2 years ago
Rafał Mikrut 58b3d3e556
Fix problem with cargo packing (#687) 2 years ago
Rafał Mikrut b00420d8c0 Release 4.1.0 version 2 years ago
Rafał Mikrut 642a6369f3 Update authors, translations, changelog, fix issue with translation 2 years ago
Kerfuffle c48b355bf0
Periodically check for and handle pending GTK events while performing long operations. (#625) 2 years ago
ChihWei Wang c64ab05648
Add exclude other filesystems option (#673) 2 years ago
Gitoffthelawn 0a35e542a3
Misc improvements (#674)
I haven't tried this tool yet, but it looks great!

While reading the README, I found some errors, so I fixed them.

There is one sentence that is still unclear because I'm not sure what you meant:
*"I prepared a disk and performed a test without any folder exceptions and with disabled ignoring of hard links."*

Did you mean that you specified to ignore hard links or that you specified to follow hard links?
2 years ago
Rafał Mikrut 8e4e1f58cb
Finding invalid extensions (#678)
* Find invalid extensions

* Another day

* Libc

* Basic Renames

* Ending words

* Better renaming

* Stonks because works
2 years ago
Rafał Mikrut c88d347e00
Allow to set included/excluded directories by command line arguments (#677) 2 years ago
Rafał Mikrut aa07d73bca
Case insensitive name checking (#669)
* Case insensitive checking in name duplicates

* Hide instead disable
2 years ago
Rafał Mikrut 12a873ff66
Hardlinking fix for Windows (#668) 2 years ago
Rafał Mikrut 574cc78b12
Zip update (#667) 2 years ago
Rafał Mikrut 39b2f4bc36
Simplify and speedup preview creating (#660)
* Simplify and speedup preview creating

* Speedup also comparing images
2 years ago
Rafał Mikrut f843673c7e
Icons (#659) 2 years ago
Rafał Mikrut c13f9255e2
Add button to disable by default size of letters when selecting things (#657)
* Add button to disable by default size of letters when selecting things

* Change wording
2 years ago
Rafał Mikrut 2d8a930ae5
Update image-rs and fix selecting windows path (#656) 2 years ago
bakeromso ebbbec414c
Update Compilation.md (#643) 2 years ago
Rafał Mikrut 6ed2e92702
Use Cambalache instead Glade (#648) 2 years ago
Rafał Mikrut 91a9e56114
Catch also square brackets in approximate comparsion (#641) 2 years ago
Rafał Mikrut 3ce5d4a967
Change AudioTags to lofty and support moree audio things (#590) 2 years ago
Rafał Mikrut ff71e2b57a
Fix not proper custom selecting with "not select all" option (#632) 2 years ago
Kerfuffle 2b86e9079e
Fix accumulated stop events (#623)
* Change stop message channel from unbounded to bounded with size 1.

* Clear out any stale stop messages before beginning a search operation.
2 years ago
TheEvilSkeleton 7d32f1c778
Use proper username (#619)
* Use proper username

* Add comment

* Remap name
2 years ago
Rafał Mikrut 4427ec06c0
Update GTK (#583) 2 years ago
Alexis Lefebvre c7ff65c11a
Fix typo on ffmpeg (#601) 2 years ago
Ivan Habernal 37b61b0c4c
Fixing czech translation (#603) 2 years ago
cyqsimon 8fe7a10f74
Improve desktop entry (#604)
* Added category `FileTools`
See https://specifications.freedesktop.org/menu-spec/latest/apas02.html

* Added `Keywords`
See https://specifications.freedesktop.org/desktop-entry-spec/latest/ar01s06.html

* Added `zh_CN` & `zh_TW` comments
2 years ago
TheEvilSkeleton 01101123e6
Fix appstream file (#607)
This MR fixes the appstream file to fix the error produced in https://github.com/flathub/com.github.qarmin.czkawka/pull/11.
2 years ago

@ -0,0 +1,40 @@
---
name: Bug report
about: Create a report to help us improve app
title: ''
labels: bug
assignees: ''
---
**Bug Description**
**Steps to reproduce:**
<!-- Please describe what you expected to see and what you saw instead. Also include screenshots or screencasts if needed. -->
**Terminal output** (optional):
```
<!--
Add terminal output only if needed - if there are some errors or warnings or you have performance/freeze issues.
Very helpful in this situation will be logs from czkawka run with RUST_LOG environment variable set e.g.
`RUST_LOG=debug ./czkawka` or `flatpak run --env=RUST_LOG=debug com.github.qarmin.czkawka` if you use flatpak, which will print more detailed info about executed function.
-->
<details>
<summary>Debug log</summary>
# UNCOMMENT DETAILS AND PUT LOGS HERE
</details>
```
**System**
- Czkawka/Krokiet version: <!-- e.g. 7.0.0 cli/gui -->
- OS version: <!-- e.g Ubuntu 22.04, Windows 11, Mac 15.1 ARM -->
- Installation method: <!-- e.g. github binaries, snap, flatpak, msys2 -->
<!-- If you use flatpak, please include the result of `flatpak info com.github.qarmin.czkawka`. -->

@ -0,0 +1,11 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: ''
---
**Feature Description**
...

@ -1,239 +0,0 @@
name: 🐧 Linux
on:
push:
pull_request:
schedule:
- cron: '0 0 * * 2'
env:
CARGO_TERM_COLOR: always
jobs:
linux-cli:
strategy:
matrix:
toolchain: [ stable ]
type: [ release ]
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.toolchain }}
override: true
- uses: actions/cache@v2
with:
path: |
target
key: linux-cli-${{github.ref}}-${{github.sha}}
restore-keys: |
linux-cli-${{github.ref}}-${{github.sha}}
- name: Install basic libraries
run: sudo apt-get update; sudo apt install libgtk-3-dev libasound2-dev -y
- name: Build CLI Debug
run: cargo build --bin czkawka_cli
env:
CARGO_INCREMENTAL: 0
RUSTFLAGS: "-C debuginfo=0 -D warnings"
if: ${{ matrix.type == 'debug'}}
- name: Build CLI Release
run: cargo build --release --bin czkawka_cli
env:
CARGO_INCREMENTAL: 0
RUSTFLAGS: "-C debuginfo=0 -D warnings"
if: ${{ matrix.type == 'release'}}
- name: Store Linux CLI
uses: actions/upload-artifact@v2
with:
name: czkawka_cli-${{ runner.os }}-${{ matrix.toolchain }}
path: target/release/czkawka_cli
if: ${{ matrix.type == 'release' }}
# Duplicate finder checks included and excluded directories
# Others are just check delete files number
- name: Linux Regression Test
run: |
wget https://github.com/qarmin/czkawka/releases/download/1.1.0/TestSuite.zip
unzip TestSuite.zip -d TestSuite
python3 misc/check_results.py TestSuite 15 8
target/release/czkawka_cli dup -d "$(pwd)/TestSuite" -D aen -m 1024
python3 misc/check_results.py TestSuite 7 8
rm -rf TestSuite
unzip TestSuite.zip -d TestSuite
target/release/czkawka_cli dup -d "$(pwd)/TestSuite" -D aen -m 1024
python3 misc/check_results.py TestSuite 7 8
rm -rf TestSuite
unzip TestSuite.zip -d TestSuite
target/release/czkawka_cli dup -d "$(pwd)/TestSuite" -x TEXT -D aeo -m 1024
python3 misc/check_results.py TestSuite 14 8
rm -rf TestSuite
unzip TestSuite.zip -d TestSuite
target/release/czkawka_cli dup -d "$(pwd)/TestSuite" -e "$(pwd)/TestSuite/SubFolder" -D aeo -m 1024
python3 misc/check_results.py TestSuite 13 8
rm -rf TestSuite
unzip TestSuite.zip -d TestSuite
target/release/czkawka_cli dup -d "$(pwd)/TestSuite" -m 1500 -D aeo
python3 misc/check_results.py TestSuite 8 8
rm -rf TestSuite
unzip TestSuite.zip -d TestSuite
target/release/czkawka_cli dup -d "$(pwd)/TestSuite" -R -m 1024
python3 misc/check_results.py TestSuite 15 8
target/release/czkawka_cli dup -d "$(pwd)/TestSuite" -R -D aeo -m 1024
python3 misc/check_results.py TestSuite 13 8
target/release/czkawka_cli big -d "$(pwd)/TestSuite"
rm -rf TestSuite
unzip TestSuite.zip -d TestSuite
target/release/czkawka_cli empty-files -d "$(pwd)/TestSuite"
python3 misc/check_results.py TestSuite 15 8
target/release/czkawka_cli empty-files -d "$(pwd)/TestSuite" -D
python3 misc/check_results.py TestSuite 13 8
rm -rf TestSuite
unzip TestSuite.zip -d TestSuite
target/release/czkawka_cli empty-folders -d "$(pwd)/TestSuite"
python3 misc/check_results.py TestSuite 15 8
target/release/czkawka_cli empty-folders -d "$(pwd)/TestSuite" -D
python3 misc/check_results.py TestSuite 15 2
rm -rf TestSuite
unzip TestSuite.zip -d TestSuite
target/release/czkawka_cli temp -d "$(pwd)/TestSuite"
python3 misc/check_results.py TestSuite 15 8
target/release/czkawka_cli temp -d "$(pwd)/TestSuite" -D
python3 misc/check_results.py TestSuite 14 8
if: ${{ matrix.type == 'release' }}
linux-gui:
strategy:
matrix:
toolchain: [ stable, 1.53.0 ]
type: [ release ]
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.toolchain }}
override: true
- uses: actions/cache@v2
with:
path: |
target
key: linux-gui-${{github.ref}}-${{github.sha}}
restore-keys: |
linux-gui-${{github.ref}}-${{github.sha}}
- name: Install Gtk, Mingw, unzip, zip and wget
run: sudo apt-get update; sudo apt install libgtk-3-dev libasound2-dev -y
- name: Build GUI Debug
run: cargo build --bin czkawka_gui
env:
CARGO_INCREMENTAL: 0
RUSTFLAGS: "-C debuginfo=0 -D warnings"
if: ${{ matrix.type == 'debug'}}
- name: Build GUI Release
run: cargo build --release --bin czkawka_gui
env:
CARGO_INCREMENTAL: 0
RUSTFLAGS: "-C debuginfo=0 -D warnings"
if: ${{ matrix.type == 'release'}}
- name: Store Linux GUI
uses: actions/upload-artifact@v2
with:
name: czkawka_gui-${{ runner.os }}-${{ matrix.toolchain }}
path: target/release/czkawka_gui
if: ${{ matrix.type == 'release' }}
- name: Minimal AppImage
run: |
pwd
rm -rf czkawka_gui
cp target/release/czkawka_gui .
strip czkawka_gui
wget https://github.com/AppImage/pkg2appimage/releases/download/continuous/pkg2appimage-1807-x86_64.AppImage
chmod +x pkg2appimage-1807-x86_64.AppImage
./pkg2appimage-1807-x86_64.AppImage misc/czkawka-appimage-recipe.yml
mv out/Czkawka*.AppImage out/czkawka_gui-minimal.AppImage
- name: Minimal Appimage Upload
uses: actions/upload-artifact@v2
with:
name: czkawka_gui-${{ matrix.toolchain }}_minimal_AppImage
path: out/*.AppImage
linux-appimage-gui:
strategy:
matrix:
toolchain: [ stable ]
type: [ release ]
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.toolchain }}
override: true
- uses: actions/cache@v2
with:
path: |
target
key: linux-appimage-gui-${{github.ref}}-${{github.sha}}
restore-keys: |
linux-appimage-gui-${{github.ref}}-${{github.sha}}
- name: Install Gtk,
run: sudo apt-get update; sudo apt install libgtk-3-dev libasound2-dev librsvg2-dev wget -y
- name: Build GUI Release
run: cargo build --release --bin czkawka_gui
env:
CARGO_INCREMENTAL: 0
RUSTFLAGS: "-C debuginfo=0 -D warnings"
- name: Download appimage dependiences
run: |
wget -c "https://raw.githubusercontent.com/linuxdeploy/linuxdeploy-plugin-gtk/master/linuxdeploy-plugin-gtk.sh"
wget -c "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage"
chmod +x linuxdeploy-plugin-gtk.sh
chmod +x linuxdeploy-x86_64.AppImage
mkdir -p AppDir/usr/bin
cp target/release/czkawka_gui AppDir/usr/bin
./linuxdeploy-x86_64.AppImage --appdir AppDir --plugin gtk --output appimage --icon-file data/icons/com.github.qarmin.czkawka.svg --desktop-file data/com.github.qarmin.czkawka.desktop
- name: Store Linux Appimage GUI
uses: actions/upload-artifact@v2
with:
name: czkawka_gui-appimage-${{ runner.os }}-${{ matrix.toolchain }}
path: Czkawka*.AppImage

@ -0,0 +1,50 @@
name: 🐧 Linux CLI
on:
push:
pull_request:
schedule:
- cron: '0 0 * * 2'
env:
CARGO_TERM_COLOR: always
jobs:
linux-cli:
strategy:
matrix:
toolchain: [ stable, 1.75.0 ]
type: [ release ]
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- name: Install basic libraries
run: sudo apt update || true; sudo apt install libheif-dev ffmpeg -y
- name: Setup rust version
run: rustup default ${{ matrix.toolchain }}
- name: Enable LTO
run: sed -i 's/#lto = "thin"/lto = "thin"/g' Cargo.toml
if: ${{ (matrix.type == 'release') }}
- name: Build Release
run: cargo build --release --bin czkawka_cli
if: ${{ (matrix.type == 'release') }}
- name: Store Linux CLI
uses: actions/upload-artifact@v4
with:
name: czkawka_cli-${{ runner.os }}-${{ matrix.toolchain }}
path: target/release/czkawka_cli
if: ${{ matrix.type == 'release' }}
- name: Linux Regression Test
run: |
wget https://github.com/qarmin/czkawka/releases/download/6.0.0/TestFiles.zip
cd ci_tester
cargo build --release
cd ..
ci_tester/target/release/ci_tester target/release/czkawka_cli
if: ${{ matrix.type == 'release' }}

@ -0,0 +1,58 @@
name: 🐧 Linux CLI Eyra
on:
push:
pull_request:
schedule:
- cron: '0 0 * * 2'
env:
CARGO_TERM_COLOR: always
jobs:
linux-cli:
strategy:
matrix:
toolchain: [ nightly ]
type: [ release ]
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- name: Install basic libraries
run: sudo apt update || true; sudo apt install -y ffmpeg
# New versions of nightly rust may call new unimplemented in eyra functions, so use const version
- name: Setup rust version
run: rustup default nightly-2024-02-06
- name: Add eyra
run: |
cd czkawka_cli
cargo add eyra --rename=std
echo 'fn main() { println!("cargo:rustc-link-arg=-nostartfiles"); }' > build.rs
cd ..
- name: Enable LTO
run: sed -i 's/#lto = "thin"/lto = "thin"/g' Cargo.toml
if: ${{ (matrix.type == 'release') }}
- name: Build Release
run: cargo build --release --bin czkawka_cli
if: ${{ (matrix.type == 'release') }}
- name: Store Linux CLI
uses: actions/upload-artifact@v4
with:
name: czkawka_cli-${{ runner.os }}-${{ matrix.toolchain }}
path: target/release/czkawka_cli
if: ${{ matrix.type == 'release' }}
- name: Linux Regression Test
run: |
wget https://github.com/qarmin/czkawka/releases/download/6.0.0/TestFiles.zip
cd ci_tester
cargo build --release
cd ..
ci_tester/target/release/ci_tester target/release/czkawka_cli
if: ${{ matrix.type == 'release' }}

@ -0,0 +1,184 @@
name: 🐧 Linux GUI
on:
push:
pull_request:
schedule:
- cron: '0 0 * * 2'
env:
CARGO_TERM_COLOR: always
jobs:
linux-krokiet-gui:
strategy:
matrix:
toolchain: [ stable, 1.75.0 ]
type: [ release ]
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- name: Setup rust version
run: rustup default ${{ matrix.toolchain }}
- name: Enable LTO
run: sed -i 's/#lto = "thin"/lto = "thin"/g' Cargo.toml
if: ${{ (matrix.type == 'release') }}
- name: Build Release Krokiet
run: cargo build --release --bin krokiet
if: ${{ (matrix.type == 'release') }}
- name: Store Linux GUI Krokiet
uses: actions/upload-artifact@v4
with:
name: krokiet-${{ runner.os }}-${{ matrix.toolchain }}
path: target/release/krokiet
if: ${{ matrix.type == 'release' }}
linux-krokiet-gui-heif:
strategy:
matrix:
toolchain: [ stable, 1.75.0 ]
type: [ release ]
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Install basic libraries
run: sudo apt update || true; sudo apt install libheif-dev libraw-dev -y
- name: Setup rust version
run: rustup default ${{ matrix.toolchain }}
- name: Enable LTO
run: sed -i 's/#lto = "thin"/lto = "thin"/g' Cargo.toml
if: ${{ (matrix.type == 'release') }}
- name: Build Release Krokiet heif
run: cargo build --release --bin krokiet --features "heif,libraw"
if: ${{ (matrix.type == 'release') }}
- name: Store Linux GUI Krokiet heif libraw
uses: actions/upload-artifact@v4
with:
name: krokiet-${{ runner.os }}-${{ matrix.toolchain }}-heif-libraw
path: target/release/krokiet
if: ${{ matrix.type == 'release' }}
linux-gui:
strategy:
matrix:
toolchain: [ stable, 1.75.0 ]
type: [ release ]
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Install basic libraries
run: sudo apt update || true; sudo apt install libgtk-4-dev libheif-dev libraw-dev -y
- name: Setup rust version
run: rustup default ${{ matrix.toolchain }}
- name: Enable LTO
run: sed -i 's/#lto = "thin"/lto = "thin"/g' Cargo.toml
if: ${{ (matrix.type == 'release') }}
- name: Build Release Heif Libraw
run: cargo build --release --bin czkawka_gui --features "heif,libraw"
if: ${{ (matrix.type == 'release') }}
- name: Store Linux GUI Heif Libraw
uses: actions/upload-artifact@v4
with:
name: czkawka_gui-${{ runner.os }}-${{ matrix.toolchain }}-heif-libraw
path: target/release/czkawka_gui
if: ${{ (matrix.type == 'release') && (matrix.toolchain == 'stable') }}
- name: Build Release
run: cargo build --release --bin czkawka_gui
if: ${{ (matrix.type == 'release') }}
# Only store stable toolchain
- name: Store Linux GUI
uses: actions/upload-artifact@v4
with:
name: czkawka_gui-${{ runner.os }}-${{ matrix.toolchain }}
path: target/release/czkawka_gui
if: ${{ (matrix.type == 'release') && (matrix.toolchain == 'stable') }}
linux-appimage-gui:
strategy:
matrix:
toolchain: [ stable ]
type: [ release ]
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Install Dependencies
run: sudo apt update || true; sudo apt install libgtk-4-dev libheif-dev librsvg2-dev wget fuse libfuse2 -y
- name: Setup rust version
run: rustup default ${{ matrix.toolchain }}
- name: Enable LTO
run: sed -i 's/#lto = "thin"/lto = "thin"/g' Cargo.toml
if: ${{ (matrix.type == 'release') }}
- name: Build Release
run: cargo build --release --bin czkawka_gui
- name: Download appimage dependencies
run: |
pwd
wget -c "https://raw.githubusercontent.com/linuxdeploy/linuxdeploy-plugin-gtk/master/linuxdeploy-plugin-gtk.sh"
wget -c "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage"
chmod +x linuxdeploy-plugin-gtk.sh
chmod +x linuxdeploy-x86_64.AppImage
mkdir -p AppDir/usr/bin
pwd
cp target/release/czkawka_gui AppDir/usr/bin
./linuxdeploy-x86_64.AppImage --appdir AppDir --plugin gtk --output appimage --icon-file data/icons/com.github.qarmin.czkawka.svg --desktop-file data/com.github.qarmin.czkawka.desktop
- name: Store Linux Appimage GUI
uses: actions/upload-artifact@v4
with:
name: czkawka_gui-appimage-${{ runner.os }}-${{ matrix.toolchain }}
path: Czkawka*.AppImage
- name: Minimal AppImage
run: |
pwd
rm -rf czkawka_gui
cp target/release/czkawka_gui .
strip czkawka_gui
wget https://github.com/AppImageCommunity/pkg2appimage/releases/download/continuous/pkg2appimage--x86_64.AppImage -O pkg2.appimage
chmod +x ./pkg2.appimage
./pkg2.appimage misc/czkawka-appimage-recipe.yml
mv out/Czkawka*.AppImage out/czkawka_gui-minimal.AppImage
- name: Minimal Appimage Upload
uses: actions/upload-artifact@v4
with:
name: czkawka_gui-${{ matrix.toolchain }}_minimal_AppImage
path: out/*.AppImage
linux-tests:
strategy:
matrix:
toolchain: [ stable ]
type: [ debug ]
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Install Dependencies
run: sudo apt update || true; sudo apt install libgtk-4-dev libheif-dev librsvg2-dev wget fuse libfuse2 -y xvfb
- name: Setup rust version
run: rustup default ${{ matrix.toolchain }}
- name: Test
run: xvfb-run cargo test

@ -9,89 +9,77 @@ env:
CARGO_TERM_COLOR: always
jobs:
macos-cli:
macos:
strategy:
matrix:
toolchain: [ stable ]
type: [ release ]
runs-on: macos-10.15
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.toolchain }}
override: true
- name: Install Homebrew
run: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- uses: actions/cache@v2
with:
path: |
target
key: mac-cli-${{github.ref}}-${{github.sha}}
restore-keys: |
mac-cli-${{github.ref}}-${{github.sha}}
- name: Install GTK4
run: |
brew link --overwrite python@3.11
brew install rust gtk4 libheif || true
brew link --overwrite python@3.11
- name: Build CLI Debug
run: cargo build --bin czkawka_cli
env:
CARGO_INCREMENTAL: 0
RUSTFLAGS: "-C debuginfo=0 -D warnings"
if: ${{ matrix.type == 'debug'}}
- name: Setup rust version
run: rustup default ${{ matrix.toolchain }}
- name: Build CLI Release
run: cargo build --release --bin czkawka_cli
env:
CARGO_INCREMENTAL: 0
RUSTFLAGS: "-C debuginfo=0 -D warnings"
- name: Enable LTO
run: sed -i '' 's/#lto = "thin"/lto = "thin"/g' Cargo.toml
if: ${{ (matrix.type == 'release') }}
- name: Build Release
run: cargo build --release
if: ${{ matrix.type == 'release'}}
- name: Store MacOS CLI
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: czkawka_cli-${{ runner.os }}-${{ matrix.toolchain }}
path: target/release/czkawka_cli
if: ${{ matrix.type == 'release' }}
macos-gui:
strategy:
matrix:
toolchain: [ stable ]
type: [ release ]
runs-on: macos-10.15
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
- name: Store MacOS GUI
uses: actions/upload-artifact@v4
with:
toolchain: ${{ matrix.toolchain }}
override: true
- name: Install Homebrew
run: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- name: Override link[WORKAROUND] # Looks that this is a bug with current homebrew or Github CI
run: rm '/usr/local/bin/2to3'
- name: Install GTK3
run: brew install rust gtk+3
name: czkawka_gui-${{ runner.os }}-${{ matrix.toolchain }}
path: target/release/czkawka_gui
if: ${{ matrix.type == 'release' }}
- name: Build GUI Debug
run: cargo build --bin czkawka_gui
env:
CARGO_INCREMENTAL: 0
RUSTFLAGS: "-C debuginfo=0 -D warnings"
if: ${{ matrix.type == 'debug'}}
- name: Store MacOS Krokiet
uses: actions/upload-artifact@v4
with:
name: krokiet-${{ runner.os }}-${{ matrix.toolchain }}
path: target/release/krokiet
if: ${{ matrix.type == 'release' }}
- name: Build GUI Release
run: cargo build --release --bin czkawka_gui
env:
CARGO_INCREMENTAL: 0
RUSTFLAGS: "-C debuginfo=0 -D warnings"
- name: Build Release Heif
run: cargo build --release --features heif
if: ${{ matrix.type == 'release'}}
- name: Store MacOS GUI
uses: actions/upload-artifact@v2
- name: Store MacOS CLI Heif
uses: actions/upload-artifact@v4
with:
name: czkawka_gui-${{ runner.os }}-${{ matrix.toolchain }}
name: czkawka_cli-${{ runner.os }}-${{ matrix.toolchain }}-heif
path: target/release/czkawka_cli
if: ${{ matrix.type == 'release' }}
- name: Store MacOS GUI Heif
uses: actions/upload-artifact@v4
with:
name: czkawka_gui-${{ runner.os }}-${{ matrix.toolchain }}-heif
path: target/release/czkawka_gui
if: ${{ matrix.type == 'release' }}
- name: Store MacOS Krokiet Heif
uses: actions/upload-artifact@v4
with:
name: krokiet-${{ runner.os }}-${{ matrix.toolchain }}-heif
path: target/release/krokiet
if: ${{ matrix.type == 'release' }}

@ -10,35 +10,18 @@ env:
jobs:
quality:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- uses: actions/cache@v2
with:
path: |
target
key: quality-${{github.ref}}-${{github.sha}}
restore-keys: |
quality-cli-${{github.ref}}-${{github.sha}}
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
components: rustfmt, clippy
override: true
- name: Install Gtk
run: sudo apt-get update; sudo apt install -y libgtk-3-dev libasound2-dev
- name: Install Gtk 4
run: sudo apt update || true; sudo apt install -y libgtk-4-dev libraw-dev libheif-dev -y
- name: Check the format
run: cargo fmt --all -- --check
# type complexity must be ignored because we use huge templates for queries
- name: Run clippy
run: >
cargo clippy
--all-targets
--all-features
--
-D warnings
run: cargo clippy --all-targets --all-features -- -D warnings
- name: Run clippy
run: cargo clippy -- -D warnings

@ -9,503 +9,284 @@ env:
CARGO_TERM_COLOR: always
jobs:
windows-cli:
krokiet-compiled-on-linux:
strategy:
fail-fast: false
matrix:
toolchain: [ stable ]
type: [ release ]
runs-on: windows-2019
use_heif: [ normal ]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- uses: actions/setup-python@v1
- uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.toolchain }}
override: true
- name: Install dependencies(mostly sd)
run: |
sudo apt update || true;sudo apt install -y mingw-w64 mingw-w64-x86-64-dev
wget https://github.com/chmln/sd/releases/download/v1.0.0/sd-v1.0.0-x86_64-unknown-linux-gnu.tar.gz -O a.tar.gz
tar -xzf a.tar.gz
cp sd-v1.0.0-x86_64-unknown-linux-gnu/sd .
chmod +x ./sd
- uses: actions/cache@v2
with:
path: |
target
key: windows-cli-${{github.ref}}-${{github.sha}}
restore-keys: |
windows-cli-${{github.ref}}-${{github.sha}}
- name: Setup rust version
run: |
rustup target add x86_64-pc-windows-gnu
- name: Build CLI Debug
run: cargo build --bin czkawka_cli
env:
CARGO_INCREMENTAL: 0
RUSTFLAGS: "-C debuginfo=0 -D warnings"
if: ${{ matrix.type == 'debug'}}
- name: Enable LTO
run: sed -i 's/#lto = "thin"/lto = "thin"/g' Cargo.toml
- name: Build CLI Release
run: cargo build --release --bin czkawka_cli
env:
CARGO_INCREMENTAL: 0
RUSTFLAGS: "-C debuginfo=0 -D warnings"
if: ${{ matrix.type == 'release'}}
- name: Compile Krokiet
run: cargo build --release --target x86_64-pc-windows-gnu --bin krokiet
- name: Store Windows CLI
uses: actions/upload-artifact@v2
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: czkawka_cli-${{ runner.os }}-${{ matrix.toolchain }}
path: target/release/czkawka_cli.exe
if: ${{ matrix.type == 'release' }}
name: krokiet-windows-c-on-linux-${{ github.sha }}-${{ matrix.use_heif }}
path: |
target/x86_64-pc-windows-gnu/release/krokiet.exe
if-no-files-found: error
# Duplicate finder checks included and excluded directories
# Others are just check delete files number
# Windows build have some elements changed like powershell before wget and unzip, python instead python3, rm -r instead rm -r and one (at the top) additional test which check size of characyers
- name: test
- name: Show console window on windows
run: |
powershell wget https://github.com/qarmin/czkawka/releases/download/1.1.0/TestSuite.zip -O TestSuite.zip
powershell unzip TestSuite.zip -d TestSuite
python misc/check_results.py TestSuite 15 8
target/release/czkawka_cli dup -d "$(pwd)/TestSuite" "$(pwd)\testsuite" -e "$(pwd)/TestSuite/subFolder" -D aeo -m 1024
python misc/check_results.py TestSuite 13 8
rm -r TestSuite
unzip TestSuite.zip -d TestSuite
target/release/czkawka_cli dup -d "$(pwd)/TestSuite" "$(pwd)/teStSuite" -D aen -m 1024
python misc/check_results.py TestSuite 7 8
rm -r TestSuite
unzip TestSuite.zip -d TestSuite
target/release/czkawka_cli dup -d "$(pwd)\TestSuite" "$(pwd)/TESTSUITE" -D aen -m 1024
python misc/check_results.py TestSuite 7 8
rm -r TestSuite
unzip TestSuite.zip -d TestSuite
target/release/czkawka_cli dup -d "$(pwd)/TestSuite" -D aen -m 1024
python misc/check_results.py TestSuite 7 8
rm -r TestSuite
unzip TestSuite.zip -d TestSuite
target/release/czkawka_cli dup -d "$(pwd)/TestSuite" -D aen -m 1024
python misc/check_results.py TestSuite 7 8
rm -r TestSuite
unzip TestSuite.zip -d TestSuite
target/release/czkawka_cli dup -d "$(pwd)/TestSuite" -x TEXT -D aeo -m 1024
python misc/check_results.py TestSuite 14 8
rm -r TestSuite
unzip TestSuite.zip -d TestSuite
target/release/czkawka_cli dup -d "$(pwd)/TestSuite" -e "$(pwd)/TestSuite/SubFolder" -D aeo -m 1024
python misc/check_results.py TestSuite 13 8
rm -r TestSuite
unzip TestSuite.zip -d TestSuite
target/release/czkawka_cli dup -d "$(pwd)/TestSuite" -m 1500 -D aeo
python misc/check_results.py TestSuite 8 8
rm -r TestSuite
unzip TestSuite.zip -d TestSuite
./sd -s '#![windows_subsystem = "windows"]' '//#![windows_subsystem = "windows"]' krokiet/src/main.rs
cat krokiet/src/main.rs
target/release/czkawka_cli dup -d "$(pwd)/TestSuite" -R -m 1024
python misc/check_results.py TestSuite 15 8
target/release/czkawka_cli dup -d "$(pwd)/TestSuite" -R -D aeo -m 1024
python misc/check_results.py TestSuite 13 8
- name: Compile Krokiet Console
run: cargo build --release --target x86_64-pc-windows-gnu --bin krokiet
- name: Upload artifacts Console
uses: actions/upload-artifact@v4
with:
name: krokiet-windows-c-on-linux-${{ github.sha }}-${{ matrix.use_heif }}-console
path: |
target/x86_64-pc-windows-gnu/release/krokiet.exe
if-no-files-found: error
target/release/czkawka_cli big -d "$(pwd)/TestSuite"
rm -r TestSuite
unzip TestSuite.zip -d TestSuite
target/release/czkawka_cli empty-files -d "$(pwd)/TestSuite"
python misc/check_results.py TestSuite 15 8
target/release/czkawka_cli empty-files -d "$(pwd)/TestSuite" -D
python misc/check_results.py TestSuite 13 8
rm -r TestSuite
unzip TestSuite.zip -d TestSuite
target/release/czkawka_cli empty-folders -d "$(pwd)/TestSuite"
python misc/check_results.py TestSuite 15 8
target/release/czkawka_cli empty-folders -d "$(pwd)/TestSuite" -D
python misc/check_results.py TestSuite 15 2
rm -r TestSuite
unzip TestSuite.zip -d TestSuite
target/release/czkawka_cli temp -d "$(pwd)/TestSuite"
python misc/check_results.py TestSuite 15 8
target/release/czkawka_cli temp -d "$(pwd)/TestSuite" -D
python misc/check_results.py TestSuite 14 8
if: ${{ matrix.type == 'release' }}
windows-gui-release-normal-app:
krokiet-compiled-on-windows:
strategy:
fail-fast: false
matrix:
toolchain: [ stable ]
type: [ release ]
runs-on: ubuntu-20.04
use_heif: [ normal ]
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.toolchain }}
override: true
- name: Install Gtk, Mingw, unzip, zip and wget
run: sudo apt-get update; sudo apt install mingw-w64 libgtk-3-dev unzip wget zip -y
- uses: actions/checkout@v4
- name: Build GUI Release Cross Compile
- name: Install dependencies(mostly sd)
run: |
rustup target add x86_64-pc-windows-gnu
Invoke-WebRequest -Uri https://github.com/chmln/sd/releases/download/v1.0.0/sd-v1.0.0-x86_64-pc-windows-gnu.zip -OutFile a.zip
Expand-Archive ./a.zip
cp a/sd-v1.0.0-x86_64-pc-windows-gnu/sd.exe .
echo "[target.x86_64-pc-windows-gnu]" > ~/.cargo/config
echo "linker = \"x86_64-w64-mingw32-gcc\"" >> ~/.cargo/config
echo "ar = \"x86_64-w64-mingw32-gcc-ar\"" >> ~/.cargo/config
- name: Setup rust version
run: rustup default stable-x86_64-pc-windows-gnu
GTK_LIBRARY="$(pwd)/gtk_library"
GTK_APP="$(pwd)/gtk_app"
GTK_THEME="$(pwd)/gtk_theme"
- name: Enable LTO
run: sed -i 's/#lto = "thin"/lto = "thin"/g' Cargo.toml
wget https://github.com/qarmin/gtk_library_store/releases/download/3.24.0/mingw64.zip
unzip mingw64.zip -d $GTK_LIBRARY
GTK_LIBRARY="$GTK_LIBRARY/mingw64"
- name: Compile Krokiet
run: cargo build --release --bin krokiet
wget https://github.com/nrhodes91/AdMin/archive/master.zip
unzip master.zip -d $GTK_THEME
PKG_CONFIG_ALLOW_CROSS=1 PKG_CONFIG_PATH="$GTK_LIBRARY/lib/pkgconfig" RUSTFLAGS="-L $GTK_LIBRARY/lib" cargo build --target=x86_64-pc-windows-gnu --bin czkawka_gui --release
strip target/x86_64-pc-windows-gnu/release/czkawka_gui.exe
mkdir $GTK_APP
cp target/x86_64-pc-windows-gnu/release/czkawka_gui.exe $GTK_APP
cp $GTK_LIBRARY/bin/*.dll $GTK_APP
mkdir -p $GTK_APP/share/glib-2.0/schemas
mkdir $GTK_APP/share/icons
cp $GTK_LIBRARY/share/glib-2.0/schemas/* $GTK_APP/share/glib-2.0/schemas
cp -r $GTK_LIBRARY/share/icons/* $GTK_APP/share/icons
mkdir $GTK_APP/lib
cp -r $GTK_LIBRARY/lib/gdk-pixbuf-2.0 $GTK_APP/lib
mkdir -p $GTK_APP/share/themes
mkdir -p $GTK_APP/share/gtk-3.0
echo "[Settings]" > $GTK_APP/share/gtk-3.0/settings.ini
echo "gtk-theme-name = admin-gtk3-dark-osx" >> $GTK_APP/share/gtk-3.0/settings.ini
echo "gtk-font-name = Segoe UI 10" >> $GTK_APP/share/gtk-3.0/settings.ini
echo "gtk-xft-rgba = rgb" >> $GTK_APP/share/gtk-3.0/settings.ini
cp $GTK_THEME/AdMin-master/admin-gtk3-dark-osx $GTK_APP/share/themes -r -L
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: krokiet-windows-c-on-windows-${{ github.sha }}-${{ matrix.use_heif }}
path: |
target/release/krokiet.exe
if-no-files-found: error
# This part is only unique for Czkawka
# This code allows to check which icons are used in Czkawka
# cd czkawka/ui
# rg icon-name
rm -rf $GTK_APP/share/icons/Adwaita/16x16
rm -rf $GTK_APP/share/icons/Adwaita/22x22
rm -rf $GTK_APP/share/icons/Adwaita/24x24
rm -rf $GTK_APP/share/icons/Adwaita/256x256
rm -rf $GTK_APP/share/icons/Adwaita/32x32
rm -rf $GTK_APP/share/icons/Adwaita/48x48
rm -rf $GTK_APP/share/icons/Adwaita/512x512
rm -rf $GTK_APP/share/icons/Adwaita/64x64
rm -rf $GTK_APP/share/icons/Adwaita/8x8
rm -rf $GTK_APP/share/icons/Adwaita/96x96
rm -rf $GTK_APP/share/icons/Adwaita/cursors
rm -rf $GTK_APP/share/icons/Adwaita/scalable
rm -rf $GTK_APP/share/icons/Adwaita/scalable-up-to-32
rm -rf $GTK_APP/share/icons/hicolor
wget https://github.com/qarmin/gtk_library_store/releases/download/3.24.0/czkawka_icons.zip
unzip czkawka_icons.zip -d $GTK_APP/share/icons/Adwaita
- name: Show console window on windows
run: |
./sd.exe -s '#![windows_subsystem = "windows"]' '//#![windows_subsystem = "windows"]' krokiet/src/main.rs
cat krokiet/src/main.rs
zip -r gtk_app.zip $GTK_APP
env:
CARGO_INCREMENTAL: 0
RUSTFLAGS: "-C debuginfo=0 -D warnings"
- name: Compile Krokiet Console
run: cargo build --release --bin krokiet
- name: Store Windows GUI CrossComplile
uses: actions/upload-artifact@v2
- name: Upload artifacts Console
uses: actions/upload-artifact@v4
with:
name: czkawka_gui-release-normal-app-${{ matrix.toolchain }}
path: gtk_app.zip
name: krokiet-windows-c-on-windows-${{ github.sha }}-${{ matrix.use_heif }}-console
path: |
target/release/krokiet.exe
if-no-files-found: error
windows-gui-release-console:
container_4_10:
strategy:
fail-fast: false
matrix:
toolchain: [ stable ]
type: [ release ]
runs-on: ubuntu-20.04
use_heif: [ non_heif ]
runs-on: ubuntu-latest
container:
image: ghcr.io/mglolenstine/gtk4-cross:gtk-4.10
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.toolchain }}
override: true
- name: Install Gtk, Mingw, unzip, zip and wget
run: sudo apt-get update; sudo apt install mingw-w64 libgtk-3-dev unzip wget zip -y
- name: Build GUI Release Cross Compile
- uses: actions/checkout@v4
- name: Install additional dependencies
# gio is for the build script
run: |
sed -i 's/windows_subsystem = "windows"/windows_subsystem = "console"/' czkawka_gui/src/main.rs
dnf install curl wget2 unzip mingw64-bzip2.noarch mingw64-poppler mingw64-poppler-glib mingw32-python3 rust-gio-devel adwaita-icon-theme -y && dnf clean all -y
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"
rustup target add x86_64-pc-windows-gnu
echo "[target.x86_64-pc-windows-gnu]" > ~/.cargo/config
echo "linker = \"x86_64-w64-mingw32-gcc\"" >> ~/.cargo/config
echo "ar = \"x86_64-w64-mingw32-gcc-ar\"" >> ~/.cargo/config
GTK_LIBRARY="$(pwd)/gtk_library"
GTK_APP="$(pwd)/gtk_app"
GTK_THEME="$(pwd)/gtk_theme"
wget https://github.com/qarmin/gtk_library_store/releases/download/3.24.0/mingw64.zip
unzip mingw64.zip -d $GTK_LIBRARY
GTK_LIBRARY="$GTK_LIBRARY/mingw64"
wget https://github.com/nrhodes91/AdMin/archive/master.zip
unzip master.zip -d $GTK_THEME
PKG_CONFIG_ALLOW_CROSS=1 PKG_CONFIG_PATH="$GTK_LIBRARY/lib/pkgconfig" RUSTFLAGS="-L $GTK_LIBRARY/lib" cargo build --target=x86_64-pc-windows-gnu --bin czkawka_gui --release
strip target/x86_64-pc-windows-gnu/release/czkawka_gui.exe
mkdir $GTK_APP
cp target/x86_64-pc-windows-gnu/release/czkawka_gui.exe $GTK_APP
cp $GTK_LIBRARY/bin/*.dll $GTK_APP
mkdir -p $GTK_APP/share/glib-2.0/schemas
mkdir $GTK_APP/share/icons
cp $GTK_LIBRARY/share/glib-2.0/schemas/* $GTK_APP/share/glib-2.0/schemas
cp -r $GTK_LIBRARY/share/icons/* $GTK_APP/share/icons
mkdir $GTK_APP/lib
cp -r $GTK_LIBRARY/lib/gdk-pixbuf-2.0 $GTK_APP/lib
mkdir -p $GTK_APP/share/themes
mkdir -p $GTK_APP/share/gtk-3.0
echo "[Settings]" > $GTK_APP/share/gtk-3.0/settings.ini
echo "gtk-theme-name = admin-gtk3-dark-osx" >> $GTK_APP/share/gtk-3.0/settings.ini
echo "gtk-font-name = Segoe UI 10" >> $GTK_APP/share/gtk-3.0/settings.ini
echo "gtk-xft-rgba = rgb" >> $GTK_APP/share/gtk-3.0/settings.ini
cp $GTK_THEME/AdMin-master/admin-gtk3-dark-osx $GTK_APP/share/themes -r -L
# This part is only unique for Czkawka
# This code allows to check which icons are used in Czkawka
# cd czkawka/ui
# rg icon-name
rm -rf $GTK_APP/share/icons/Adwaita/16x16
rm -rf $GTK_APP/share/icons/Adwaita/22x22
rm -rf $GTK_APP/share/icons/Adwaita/24x24
rm -rf $GTK_APP/share/icons/Adwaita/256x256
rm -rf $GTK_APP/share/icons/Adwaita/32x32
rm -rf $GTK_APP/share/icons/Adwaita/48x48
rm -rf $GTK_APP/share/icons/Adwaita/512x512
rm -rf $GTK_APP/share/icons/Adwaita/64x64
rm -rf $GTK_APP/share/icons/Adwaita/8x8
rm -rf $GTK_APP/share/icons/Adwaita/96x96
rm -rf $GTK_APP/share/icons/Adwaita/cursors
rm -rf $GTK_APP/share/icons/Adwaita/scalable
rm -rf $GTK_APP/share/icons/Adwaita/scalable-up-to-32
rm -rf $GTK_APP/share/icons/hicolor
wget https://github.com/qarmin/gtk_library_store/releases/download/3.24.0/czkawka_icons.zip
unzip czkawka_icons.zip -d $GTK_APP/share/icons/Adwaita
zip -r gtk_app.zip $GTK_APP
env:
CARGO_INCREMENTAL: 0
RUSTFLAGS: "-C debuginfo=0 -D warnings"
- name: Store Windows GUI CrossComplile
uses: actions/upload-artifact@v2
- name: Cross compile for Windows
run: |
source "$HOME/.cargo/env"
#!/bin/bash
set -euo pipefail
export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:/usr/share/pkgconfig:$MINGW_PREFIX/lib/pkgconfig/:/usr/x86_64-w64-mingw32/lib/pkgconfig/
cargo build --target=x86_64-pc-windows-gnu --release --locked
mkdir -p package
cp target/x86_64-pc-windows-gnu/release/czkawka_gui.exe package/
cp target/x86_64-pc-windows-gnu/release/czkawka_cli.exe package/
- name: Package
run: |
#!/bin/bash
set -euo pipefail
cp -t package $(pds -vv -f package/*.exe)
# Add gdbus which is recommended on Windows (why?)
cp $MINGW_PREFIX/bin/gdbus.exe package
# Handle the glib schema compilation as well
glib-compile-schemas $MINGW_PREFIX/share/glib-2.0/schemas/
mkdir -p package/share/glib-2.0/schemas/
cp -T $MINGW_PREFIX/share/glib-2.0/schemas/gschemas.compiled package/share/glib-2.0/schemas/gschemas.compiled
# Pixbuf stuff, in order to get SVGs (scalable icons) to load
mkdir -p package/lib/gdk-pixbuf-2.0
cp -rT $MINGW_PREFIX/lib/gdk-pixbuf-2.0 package/lib/gdk-pixbuf-2.0
cp -f -t package $(pds -vv -f $MINGW_PREFIX/lib/gdk-pixbuf-2.0/2.10.0/loaders/*)
find package -iname "*.dll" -or -iname "*.exe" -type f -exec mingw-strip {} +
cd package/share
wget2 https://github.com/qarmin/czkawka/files/10832192/gtk4_theme.zip
unzip gtk4_theme.zip
rm gtk4_theme.zip
cd ../..
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: czkawka_gui-release-console-${{ matrix.toolchain }}
path: gtk_app.zip
name: czkawka-windows-${{ github.sha }}-${{ matrix.use_heif }}-4.10
path: |
./package
if-no-files-found: error
windows-gui-debug-normal-app:
container_4_6:
strategy:
fail-fast: false
matrix:
toolchain: [ stable ]
type: [ release ]
runs-on: ubuntu-20.04
use_heif: [ non_heif ]
runs-on: ubuntu-latest
container:
image: ghcr.io/piegamesde/gtk4-cross:gtk-4.6
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.toolchain }}
override: true
- name: Install Gtk, Mingw, unzip, zip and wget
run: sudo apt-get update; sudo apt install mingw-w64 libgtk-3-dev unzip wget zip -y
- name: Build GUI Debug Cross Compile
- uses: actions/checkout@v4
- name: Install additional dependencies
# gio is for the build script
run: |
dnf install curl wget2 unzip mingw64-bzip2.noarch mingw64-poppler mingw64-poppler-glib mingw32-python3 rust-gio-devel adwaita-icon-theme -y && dnf clean all -y
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"
rustup target add x86_64-pc-windows-gnu
echo "[target.x86_64-pc-windows-gnu]" > ~/.cargo/config
echo "linker = \"x86_64-w64-mingw32-gcc\"" >> ~/.cargo/config
echo "ar = \"x86_64-w64-mingw32-gcc-ar\"" >> ~/.cargo/config
GTK_LIBRARY="$(pwd)/gtk_library"
GTK_APP="$(pwd)/gtk_app"
GTK_THEME="$(pwd)/gtk_theme"
wget https://github.com/qarmin/gtk_library_store/releases/download/3.24.0/mingw64.zip
unzip mingw64.zip -d $GTK_LIBRARY
GTK_LIBRARY="$GTK_LIBRARY/mingw64"
wget https://github.com/nrhodes91/AdMin/archive/master.zip
unzip master.zip -d $GTK_THEME
PKG_CONFIG_ALLOW_CROSS=1 PKG_CONFIG_PATH="$GTK_LIBRARY/lib/pkgconfig" RUSTFLAGS="-L $GTK_LIBRARY/lib" cargo build --target=x86_64-pc-windows-gnu --bin czkawka_gui
strip target/x86_64-pc-windows-gnu/debug/czkawka_gui.exe
mkdir $GTK_APP
cp target/x86_64-pc-windows-gnu/debug/czkawka_gui.exe $GTK_APP
cp $GTK_LIBRARY/bin/*.dll $GTK_APP
mkdir -p $GTK_APP/share/glib-2.0/schemas
mkdir $GTK_APP/share/icons
cp $GTK_LIBRARY/share/glib-2.0/schemas/* $GTK_APP/share/glib-2.0/schemas
cp -r $GTK_LIBRARY/share/icons/* $GTK_APP/share/icons
mkdir $GTK_APP/lib
cp -r $GTK_LIBRARY/lib/gdk-pixbuf-2.0 $GTK_APP/lib
mkdir -p $GTK_APP/share/themes
mkdir -p $GTK_APP/share/gtk-3.0
echo "[Settings]" > $GTK_APP/share/gtk-3.0/settings.ini
echo "gtk-theme-name = admin-gtk3-dark-osx" >> $GTK_APP/share/gtk-3.0/settings.ini
echo "gtk-font-name = Segoe UI 10" >> $GTK_APP/share/gtk-3.0/settings.ini
echo "gtk-xft-rgba = rgb" >> $GTK_APP/share/gtk-3.0/settings.ini
cp $GTK_THEME/AdMin-master/admin-gtk3-dark-osx $GTK_APP/share/themes -r -L
# This part is only unique for Czkawka
# This code allows to check which icons are used in Czkawka
# cd czkawka/ui
# rg icon-name
rm -rf $GTK_APP/share/icons/Adwaita/16x16
rm -rf $GTK_APP/share/icons/Adwaita/22x22
rm -rf $GTK_APP/share/icons/Adwaita/24x24
rm -rf $GTK_APP/share/icons/Adwaita/256x256
rm -rf $GTK_APP/share/icons/Adwaita/32x32
rm -rf $GTK_APP/share/icons/Adwaita/48x48
rm -rf $GTK_APP/share/icons/Adwaita/512x512
rm -rf $GTK_APP/share/icons/Adwaita/64x64
rm -rf $GTK_APP/share/icons/Adwaita/8x8
rm -rf $GTK_APP/share/icons/Adwaita/96x96
rm -rf $GTK_APP/share/icons/Adwaita/cursors
rm -rf $GTK_APP/share/icons/Adwaita/scalable
rm -rf $GTK_APP/share/icons/Adwaita/scalable-up-to-32
rm -rf $GTK_APP/share/icons/hicolor
wget https://github.com/qarmin/gtk_library_store/releases/download/3.24.0/czkawka_icons.zip
unzip czkawka_icons.zip -d $GTK_APP/share/icons/Adwaita
zip -r gtk_app.zip $GTK_APP
env:
CARGO_INCREMENTAL: 0
RUSTFLAGS: "-C debuginfo=0 -D warnings"
- name: Store Windows GUI CrossComplile
uses: actions/upload-artifact@v2
- name: Cross compile for Windows
run: |
source "$HOME/.cargo/env"
#!/bin/bash
set -euo pipefail
export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:/usr/share/pkgconfig:$MINGW_PREFIX/lib/pkgconfig/:/usr/x86_64-w64-mingw32/lib/pkgconfig/
cargo build --target=x86_64-pc-windows-gnu --release --locked
mkdir -p package
cp target/x86_64-pc-windows-gnu/release/czkawka_gui.exe package/
cp target/x86_64-pc-windows-gnu/release/czkawka_cli.exe package/
- name: Package
run: |
#!/bin/bash
set -euo pipefail
cp -t package $(pds -vv -f package/*.exe)
# Add gdbus which is recommended on Windows (why?)
cp $MINGW_PREFIX/bin/gdbus.exe package
# Handle the glib schema compilation as well
glib-compile-schemas $MINGW_PREFIX/share/glib-2.0/schemas/
mkdir -p package/share/glib-2.0/schemas/
cp -T $MINGW_PREFIX/share/glib-2.0/schemas/gschemas.compiled package/share/glib-2.0/schemas/gschemas.compiled
# Pixbuf stuff, in order to get SVGs (scalable icons) to load
mkdir -p package/lib/gdk-pixbuf-2.0
cp -rT $MINGW_PREFIX/lib/gdk-pixbuf-2.0 package/lib/gdk-pixbuf-2.0
cp -f -t package $(pds -vv -f $MINGW_PREFIX/lib/gdk-pixbuf-2.0/2.10.0/loaders/*)
find package -iname "*.dll" -or -iname "*.exe" -type f -exec mingw-strip {} +
cd package/share
wget2 https://github.com/qarmin/czkawka/files/10832192/gtk4_theme.zip
unzip gtk4_theme.zip
rm gtk4_theme.zip
cd ../..
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: czkawka_gui-debug-normal-app-${{ matrix.toolchain }}
path: gtk_app.zip
windows-gui-debug-console:
strategy:
matrix:
toolchain: [ stable ]
type: [ release ]
runs-on: ubuntu-20.04
name: czkawka-windows-${{ github.sha }}-${{ matrix.use_heif }}-4.6
path: |
./package
if-no-files-found: error
# Provide option to log things to windows CLI
container_4_6_console_window:
runs-on: ubuntu-22.04
container:
image: ghcr.io/piegamesde/gtk4-cross:gtk-4.6
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.toolchain }}
override: true
- name: Install Gtk, Mingw, unzip, zip and wget
run: sudo apt-get update; sudo apt install mingw-w64 libgtk-3-dev unzip wget zip -y
- name: Build GUI Debug Cross Compile
- uses: actions/checkout@v4
- name: Install dependencies(mostly sd)
run: |
dnf install wget -y
wget https://github.com/chmln/sd/releases/download/v1.0.0/sd-v1.0.0-x86_64-unknown-linux-gnu.tar.gz -O a.tar.gz
tar -xzf a.tar.gz
chmod +x sd-v1.0.0-x86_64-unknown-linux-gnu/sd
sudo cp sd-v1.0.0-x86_64-unknown-linux-gnu/sd /usr/bin/sd
- name: Install additional dependencies
# gio is for the build script
run: |
sed -i 's/windows_subsystem = "windows"/windows_subsystem = "console"/' czkawka_gui/src/main.rs
dnf install curl wget2 unzip mingw64-bzip2.noarch mingw64-poppler mingw64-poppler-glib mingw32-python3 rust-gio-devel adwaita-icon-theme -y && dnf clean all -y
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"
rustup target add x86_64-pc-windows-gnu
echo "[target.x86_64-pc-windows-gnu]" > ~/.cargo/config
echo "linker = \"x86_64-w64-mingw32-gcc\"" >> ~/.cargo/config
echo "ar = \"x86_64-w64-mingw32-gcc-ar\"" >> ~/.cargo/config
GTK_LIBRARY="$(pwd)/gtk_library"
GTK_APP="$(pwd)/gtk_app"
GTK_THEME="$(pwd)/gtk_theme"
wget https://github.com/qarmin/gtk_library_store/releases/download/3.24.0/mingw64.zip
unzip mingw64.zip -d $GTK_LIBRARY
GTK_LIBRARY="$GTK_LIBRARY/mingw64"
wget https://github.com/nrhodes91/AdMin/archive/master.zip
unzip master.zip -d $GTK_THEME
PKG_CONFIG_ALLOW_CROSS=1 PKG_CONFIG_PATH="$GTK_LIBRARY/lib/pkgconfig" RUSTFLAGS="-L $GTK_LIBRARY/lib" cargo build --target=x86_64-pc-windows-gnu --bin czkawka_gui
strip target/x86_64-pc-windows-gnu/debug/czkawka_gui.exe
mkdir $GTK_APP
cp target/x86_64-pc-windows-gnu/debug/czkawka_gui.exe $GTK_APP
cp $GTK_LIBRARY/bin/*.dll $GTK_APP
mkdir -p $GTK_APP/share/glib-2.0/schemas
mkdir $GTK_APP/share/icons
cp $GTK_LIBRARY/share/glib-2.0/schemas/* $GTK_APP/share/glib-2.0/schemas
cp -r $GTK_LIBRARY/share/icons/* $GTK_APP/share/icons
mkdir $GTK_APP/lib
cp -r $GTK_LIBRARY/lib/gdk-pixbuf-2.0 $GTK_APP/lib
mkdir -p $GTK_APP/share/themes
mkdir -p $GTK_APP/share/gtk-3.0
echo "[Settings]" > $GTK_APP/share/gtk-3.0/settings.ini
echo "gtk-theme-name = admin-gtk3-dark-osx" >> $GTK_APP/share/gtk-3.0/settings.ini
echo "gtk-font-name = Segoe UI 10" >> $GTK_APP/share/gtk-3.0/settings.ini
echo "gtk-xft-rgba = rgb" >> $GTK_APP/share/gtk-3.0/settings.ini
cp $GTK_THEME/AdMin-master/admin-gtk3-dark-osx $GTK_APP/share/themes -r -L
# This part is only unique for Czkawka
# This code allows to check which icons are used in Czkawka
# cd czkawka/ui
# rg icon-name
rm -rf $GTK_APP/share/icons/Adwaita/16x16
rm -rf $GTK_APP/share/icons/Adwaita/22x22
rm -rf $GTK_APP/share/icons/Adwaita/24x24
rm -rf $GTK_APP/share/icons/Adwaita/256x256
rm -rf $GTK_APP/share/icons/Adwaita/32x32
rm -rf $GTK_APP/share/icons/Adwaita/48x48
rm -rf $GTK_APP/share/icons/Adwaita/512x512
rm -rf $GTK_APP/share/icons/Adwaita/64x64
rm -rf $GTK_APP/share/icons/Adwaita/8x8
rm -rf $GTK_APP/share/icons/Adwaita/96x96
rm -rf $GTK_APP/share/icons/Adwaita/cursors
rm -rf $GTK_APP/share/icons/Adwaita/scalable
rm -rf $GTK_APP/share/icons/Adwaita/scalable-up-to-32
rm -rf $GTK_APP/share/icons/hicolor
wget https://github.com/qarmin/gtk_library_store/releases/download/3.24.0/czkawka_icons.zip
unzip czkawka_icons.zip -d $GTK_APP/share/icons/Adwaita
zip -r gtk_app.zip $GTK_APP
env:
CARGO_INCREMENTAL: 0
RUSTFLAGS: "-C debuginfo=0 -D warnings"
- name: Store Windows GUI CrossComplile
uses: actions/upload-artifact@v2
- name: Show console window on windows
run: sd -s '#![windows_subsystem = "windows"]' '//#![windows_subsystem = "windows"]' krokiet/src/main.rs
- name: Cross compile for Windows
run: |
source "$HOME/.cargo/env"
#!/bin/bash
set -euo pipefail
export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:/usr/share/pkgconfig:$MINGW_PREFIX/lib/pkgconfig/:/usr/x86_64-w64-mingw32/lib/pkgconfig/
cargo build --target=x86_64-pc-windows-gnu --release --locked
mkdir -p package
cp target/x86_64-pc-windows-gnu/release/czkawka_gui.exe package/
cp target/x86_64-pc-windows-gnu/release/czkawka_cli.exe package/
- name: Package
run: |
#!/bin/bash
set -euo pipefail
cp -t package $(pds -vv -f package/*.exe)
# Add gdbus which is recommended on Windows (why?)
cp $MINGW_PREFIX/bin/gdbus.exe package
# Handle the glib schema compilation as well
glib-compile-schemas $MINGW_PREFIX/share/glib-2.0/schemas/
mkdir -p package/share/glib-2.0/schemas/
cp -T $MINGW_PREFIX/share/glib-2.0/schemas/gschemas.compiled package/share/glib-2.0/schemas/gschemas.compiled
# Pixbuf stuff, in order to get SVGs (scalable icons) to load
mkdir -p package/lib/gdk-pixbuf-2.0
cp -rT $MINGW_PREFIX/lib/gdk-pixbuf-2.0 package/lib/gdk-pixbuf-2.0
cp -f -t package $(pds -vv -f $MINGW_PREFIX/lib/gdk-pixbuf-2.0/2.10.0/loaders/*)
find package -iname "*.dll" -or -iname "*.exe" -type f -exec mingw-strip {} +
cd package/share
wget2 https://github.com/qarmin/czkawka/files/10832192/gtk4_theme.zip
unzip gtk4_theme.zip
rm gtk4_theme.zip
cd ../..
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: czkawka_gui-debug-console-${{ matrix.toolchain }}
path: gtk_app.zip
name: czkawka-windows-${{ github.sha }}-console-4.6
path: |
./package
if-no-files-found: error

15
.gitignore vendored

@ -7,3 +7,18 @@ results*.txt
TestSuite*
*.snap
flatpak/
*.zip
*.zst
*.profraw
*.profdata
/lcov_report*
/report
ci_tester/target
ci_tester/Cargo.lock
krokiet/Cargo.lock
krokiet/target
*.json
*.mm_profdata
perf.data
perf.data.old
krokiet/ui/test.slint

@ -0,0 +1,2 @@
TheEvilSkeleton <theevilskeleton@riseup.net> Proprietary Chrome-chan <theevilskeleton@riseup.net>
Rafał Mikrut <mikrutrafal@protonmail.com> <mikrutrafal54@gmail.com> <41945903+qarmin@users.noreply.github.com>

@ -1,3 +1,6 @@
newline_style = "Unix"
max_width = 180
remove_nested_parens = true
# Enable only with nightly channel via - cargo +nightly fmt
imports_granularity = "Module"

7375
Cargo.lock generated

File diff suppressed because it is too large Load Diff

@ -3,11 +3,24 @@ members = [
"czkawka_core",
"czkawka_cli",
"czkawka_gui",
"krokiet"
]
exclude = [
"ci_tester",
]
resolver = "2"
[profile.release]
# Panic = "abort" will crash entire app when processing invalid image file.
# Since crash happens in external library, this is only way to handle this(I think).
# panic = "unwind" in opposite to "abort", allows to catch panic!()
# Since Czkawka parse different types of files with few libraries, it is possible
# that some files will cause crash, so at this moment I don't recommend to use "abort"
# until you are ready to occasional crashes
panic = "unwind"
# LTO setting is disabled by default, because release mode is usually needed to develop app and compilation with LTO would take a lot of time
#lto = "fat"
# But it is used to optimize release builds(and probably also in CI, where time is not so important as in local development)
#lto = "thin"
# Optimize all dependencies except application/workspaces, even in debug builds
[profile.dev.package."*"]
opt-level = 3

@ -1,3 +1,143 @@
## Version 7.0.0 - 19.02.2024r
### BREAKING CHANGES
- Reducing size of cache files, made old cache files incompatible with new version
- `-C` in CLI now saves as compact json
### GTK GUI
- Added drag&drop support for included/excluded folders - [#1106](https://github.com/qarmin/czkawka/pull/1106)
- Added information where are saved scan results - [#1102](https://github.com/qarmin/czkawka/pull/1102)
### CLI
- Providing full static rust binary with [Eyra](https://github.com/sunfishcode/eyra) - [#1102](https://github.com/qarmin/czkawka/pull/1102)
- Fixed duplicated `-c` argument, now saving as compact json is handled via `-C` - [#1153](https://github.com/qarmin/czkawka/pull/1153)
- Added scan progress bar - [#1183](https://github.com/qarmin/czkawka/pull/1183)
- Clean and safe cancelling of scan - [#1183](https://github.com/qarmin/czkawka/pull/1183)
- Unification of CLI arguments - [#1183](https://github.com/qarmin/czkawka/pull/1183)
- Hardlink support for similar images/videos - [#1201](https://github.com/qarmin/czkawka/pull/1201)
### Krokiet GUI
- Initial release of new gui - [#1102](https://github.com/qarmin/czkawka/pull/1102)
### Core
- Using normal crossbeam channels instead of asyncio tokio channel - [#1102](https://github.com/qarmin/czkawka/pull/1102)
- Fixed tool type when using progress of empty directories - [#1102](https://github.com/qarmin/czkawka/pull/1102)
- Fixed missing json support when saving size and name duplicate results - [#1102](https://github.com/qarmin/czkawka/pull/1102)
- Fix cross-compiled debug windows build - [#1102](https://github.com/qarmin/czkawka/pull/1102)
- Added bigger stack size by default(fixes stack overflow in some musl apps) - [#1102](https://github.com/qarmin/czkawka/pull/1102)
- Added optional libraw dependency(better single-core performance and support more raw files) - [#1102](https://github.com/qarmin/czkawka/pull/1102)
- Speedup checking for wildcards and fix invalid recognizing long excluded items - [#1152](https://github.com/qarmin/czkawka/pull/1152)
- Big speedup when searching for empty folders(especially with multithreading + cached FS schema) - [#1152](https://github.com/qarmin/czkawka/pull/1152)
- Collecting files for scan can be a lot of faster due lazy file metadata gathering - [#1152](https://github.com/qarmin/czkawka/pull/1152)
- Fixed recognizing not accessible folders as non-empty - [#1152](https://github.com/qarmin/czkawka/pull/1152)
- Unifying code for collecting files to scan - [#1159](https://github.com/qarmin/czkawka/pull/1159)
- Decrease memory usage when collecting files by removing unused fields in custom file entries structs - [#1159](https://github.com/qarmin/czkawka/pull/1159)
- Decrease a little size of cache by few percents and improve loading/saving speed - [#1159](https://github.com/qarmin/czkawka/pull/1159)
- Added ability to remove from scan files with excluded extensions - [#1184](https://github.com/qarmin/czkawka/pull/1102)
- Fixed not showing in similar images results, files with same hashes when using reference folders - [#1184](https://github.com/qarmin/czkawka/pull/1102)
- Optimize release binaries with LTO(~25/50% smaller, ~5/10% faster) - [#1184](https://github.com/qarmin/czkawka/pull/1102)
## Version 6.1.0 - 15.10.2023r
- BREAKING CHANGE - Changed cache saving method, deduplicated, optimized and simplified procedure(all files needs to be hashed again) - [#1072](https://github.com/qarmin/czkawka/pull/1072), [#1086](https://github.com/qarmin/czkawka/pull/1086)
- Remove up to 340ms of delay when waiting for results - [#1070](https://github.com/qarmin/czkawka/pull/1070)
- Added logger with useful info when debugging app (level can be adjusted via e.g. `RUST_LOG=debug` env) - [#1072](https://github.com/qarmin/czkawka/pull/1072), [#1070](https://github.com/qarmin/czkawka/pull/1070)
- Core code cleanup - [#1072](https://github.com/qarmin/czkawka/pull/1072), [#1070](https://github.com/qarmin/czkawka/pull/1070), [#1082](https://github.com/qarmin/czkawka/pull/1082)
- Updated list of bad extensions and support for finding invalid jar files - [#1070](https://github.com/qarmin/czkawka/pull/1070)
- More default excluded items on Windows(like pagefile) - [#1074](https://github.com/qarmin/czkawka/pull/1074)
- Unified printing/saving method to files/terminal and fixed some differences/bugs - [#1082](https://github.com/qarmin/czkawka/pull/1082)
- Uses fun_time library to print how much functions take time - [#1082](https://github.com/qarmin/czkawka/pull/1082)
- Added exporting results into json file format - [#1083](https://github.com/qarmin/czkawka/pull/1083)
- Added new test/regression suite for CI - [#1083](https://github.com/qarmin/czkawka/pull/1083)
- Added ability to use relative paths - [#1083](https://github.com/qarmin/czkawka/pull/1083)
- Allowed removing similar images/videos/music from cli - [#1087](https://github.com/qarmin/czkawka/pull/1087)
- Added info about saving/loading items to cache in duplicate and music mode - [#1091](https://github.com/qarmin/czkawka/pull/1091)
- Fixed number of files to check in duplicate mode - [#1091](https://github.com/qarmin/czkawka/pull/1091)
- Added support for qoi image format(without preview yet) - [e92a](https://github.com/qarmin/czkawka/commit/e92a8a65de9bd1250be482dbce06959125554849)
- Fixed stability problem, that could remove invalid file in CLI - [#1083](https://github.com/qarmin/czkawka/pull/1083)
- Fix Windows gui crashes by using gtk 4.6 instead 4.8 or 4.10 - [#992](https://github.com/qarmin/czkawka/pull/992)
- Fixed printing info about duplicated music files - [#1016](https://github.com/qarmin/czkawka/pull/1016)
- Fixed printing info about duplicated video files - [#1017](https://github.com/qarmin/czkawka/pull/1017)
## Version 6.0.0 - 11.06.2023r
- Add finding similar audio files by content - [#970](https://github.com/qarmin/czkawka/pull/970)
- Allow to find duplicates by name/size at once - [#956](https://github.com/qarmin/czkawka/pull/956)
- Fix, simplify and speed up finding similar images - [#983](https://github.com/qarmin/czkawka/pull/956)
- Fixed bug when cache for music tags not worked - [#970](https://github.com/qarmin/czkawka/pull/970)
- Allow to set number of threads from CLI - [#972](https://github.com/qarmin/czkawka/pull/972)
- Fix problem with invalid item sorting in bad extensions mode - [#972](https://github.com/qarmin/czkawka/pull/972)
- Big refactor/cleaning of code - [#956](https://github.com/qarmin/czkawka/pull/956)/[#970](https://github.com/qarmin/czkawka/pull/970)/[#972](https://github.com/qarmin/czkawka/pull/972)
- Use builtin gtk webp loader for previews - [#923](https://github.com/qarmin/czkawka/pull/923)
- Fixed docker build - [#947](https://github.com/qarmin/czkawka/pull/947)
- Restore snap builds broken since GTk 4 port - [#965](https://github.com/qarmin/czkawka/pull/947)
- Instruction how to build native ARM64 binaries on Mac - [#945](https://github.com/qarmin/czkawka/pull/945)/[#971](https://github.com/qarmin/czkawka/pull/971)
## Version 5.1.0 - 19.02.2023r
- Added sort button - [#894](https://github.com/qarmin/czkawka/pull/894)
- Allow to set number of thread used to scan - [#839](https://github.com/qarmin/czkawka/pull/839)
- Faster similar images comparing with reference folders - [#826](https://github.com/qarmin/czkawka/pull/826)
- Update to clap 4 - [#878](https://github.com/qarmin/czkawka/pull/878)
- Use FileChooserNative instead FileChooserDialog - [#894](https://github.com/qarmin/czkawka/pull/894)
- Fix invalid music tags in music files when using reference folders - [#894](https://github.com/qarmin/czkawka/pull/894)
- Updated pdf dependency(a lot of less amount of broken pdf false positives) - [#894](https://github.com/qarmin/czkawka/pull/894)
- Changed strange PDF error message - "Try at" - [#894](https://github.com/qarmin/czkawka/pull/894)
- Treat extensions Mp4 and m4v as identical - [#834](https://github.com/qarmin/czkawka/pull/834)
- Improve thumbnail quality - [#895](https://github.com/qarmin/czkawka/pull/895)
- Verify if hardlinking works, and if not, disable button with proper message - [#881](https://github.com/qarmin/czkawka/pull/881)
- Apply some pydantic clippy lints on project - [#901](https://github.com/qarmin/czkawka/pull/901)
## Version 5.0.2 - 30.08.2022r
- Fixed problem with missing some similar images when using similarity > 0 - [#799](https://github.com/qarmin/czkawka/pull/799)
- Prebuilt Linux binaries are compiled without heif support - [24b](https://github.com/qarmin/czkawka/commit/24b64a32c65904c506b54270f0977ccbe5098cc8)
- Similar videos stops to proceed video after certain amount of time(fixes freezes) - [#815](https://github.com/qarmin/czkawka/pull/815)
- Add --version argument for czkawka_cli - [#806](https://github.com/qarmin/czkawka/pull/806)
- Rewrite a little nonsense message about minimal file size - [#807](https://github.com/qarmin/czkawka/pull/807)
## Version 5.0.1 - 03.08.2022r
- Fixed problem with removing ending slash with empty disk window path - [975](https://github.com/qarmin/czkawka/commit/97563a7b2a70fb5fcf6463f28069e6ea3b0ff5c2)
- Added to CLI bad extensions mode - [#795](https://github.com/qarmin/czkawka/pull/795)
- Restore default sorting method in CLI where finding biggest files - [5d7](https://github.com/qarmin/czkawka/commit/5d79dc7ccfee6d5426e37c4e6a860fa555c5927a)
- Added tests to CI - [#791](https://github.com/qarmin/czkawka/pull/791)
- Show error message when all directories are set as reference folders - [#795](https://github.com/qarmin/czkawka/pull/795)
- Added more info about new requirements on Linux - [#795](https://github.com/qarmin/czkawka/pull/795)
## Version 5.0.0 - 28.07.2022r
- GUI ported to use GTK 4 - [#466](https://github.com/qarmin/czkawka/pull/466)
- Use multithreading and improved algorithm to compare image hashes - [#762](https://github.com/qarmin/czkawka/pull/762)
- Resize preview with window - [#466](https://github.com/qarmin/czkawka/pull/466)
- Fix removing only one item from list view - [#466](https://github.com/qarmin/czkawka/pull/466)
- Fix showing help command in duplicate CLI mode - [#720](https://github.com/qarmin/czkawka/pull/720)
- Fix freeze when not choosing any tag in similar music mode - [#732](https://github.com/qarmin/czkawka/pull/732)
- Fix preview of files with non-lowercase extensions - [#694](https://github.com/qarmin/czkawka/pull/694)
- Read more tags from music files - [#705](https://github.com/qarmin/czkawka/pull/705)
- Improve checking for invalid extensions - [#705](https://github.com/qarmin/czkawka/pull/705), [#747](https://github.com/qarmin/czkawka/pull/747), [#749](https://github.com/qarmin/czkawka/pull/749)
- Support for finding invalid PDF files - [#705](https://github.com/qarmin/czkawka/pull/705)
- Re-enable checking for broken music files(`libasound.so.2` no longer needed) - [#705](https://github.com/qarmin/czkawka/pull/705)
- Fix disabled ui when using invalid settings in similar music - [#740](https://github.com/qarmin/czkawka/pull/740)
- Speedup searching for invalid extensions - [#740](https://github.com/qarmin/czkawka/pull/740)
- Support for finding the smallest files - [#741](https://github.com/qarmin/czkawka/pull/741)
- Improved Windows CI - [#749](https://github.com/qarmin/czkawka/pull/749)
- Ability to check for broken files by types - [#749](https://github.com/qarmin/czkawka/pull/749)
- Add heif and Webp files support - [#750](https://github.com/qarmin/czkawka/pull/750)
- Use in CLI Clap library instead StructOpt - [#759](https://github.com/qarmin/czkawka/pull/759)
- Multiple directories can be added via Manual Add button - [#782](https://github.com/qarmin/czkawka/pull/782)
- Option to exclude files from other filesystems in GUI(Linux) - [#776](https://github.com/qarmin/czkawka/pull/776)
## Version 4.1.0 - 24.04.2022r
- New mode - finding files whose content not match with their extension - [#678](https://github.com/qarmin/czkawka/pull/678)
- Builtin icons - no more invalid, theme/OS dependent icons - [#659](https://github.com/qarmin/czkawka/pull/659)
- Big(usually 2x) speedup of showing previews of images(both previews in scan and compare window) - [#660](https://github.com/qarmin/czkawka/pull/660)
- Fix selecting records by custom selection popup - [#632](https://github.com/qarmin/czkawka/pull/632)
- Support more tags when comparing music files - [#590](https://github.com/qarmin/czkawka/pull/590)
- Fix not proper selecting path - [#656](https://github.com/qarmin/czkawka/pull/656)
- No more popups during scan for similar videos on Windows - [#656](https://github.com/qarmin/czkawka/pull/656) - external change [4056](https://github.com/Farmadupe/ffmpeg_cmdline_utils/commit/405687514f9d9e8984cbe2547c53e85b71e08b27)
- Custom selecting is now case-insensitive by default - [#657](https://github.com/qarmin/czkawka/pull/657)
- Better approximate comparison of tags - [#641](https://github.com/qarmin/czkawka/pull/641)
- Fix search problem due accumulated stop events - [#623](https://github.com/qarmin/czkawka/pull/623)
- Option to ignore other filesystems in Unix OS(for now only in CLI) - [#673](https://github.com/qarmin/czkawka/pull/673)
- Fix file hardlinking on Windows - [#668](https://github.com/qarmin/czkawka/pull/668)
- Support for case-insensitive name grouping of files - [#669](https://github.com/qarmin/czkawka/pull/669)
- Directories for search GUI can be passed by CLI - [#677](https://github.com/qarmin/czkawka/pull/677)
- Prevent from getting non respond app notification from display servers - [#625](https://github.com/qarmin/czkawka/pull/625)
## Version 4.0.0 - 20.01.2022r
- Multithreading support for collecting files to check(2/3x speedup on 4 thread processor and SSD) - [#502](https://github.com/qarmin/czkawka/pull/502), [#504](https://github.com/qarmin/czkawka/pull/504)
- Add multiple translations - Polish, Italian, French, German, Russian ... - [#469](https://github.com/qarmin/czkawka/pull/469), [#508](https://github.com/qarmin/czkawka/pull/508), [5be](https://github.com/qarmin/czkawka/commit/5be801e76395855f07ab1da43cdbb8bd0b843834)
@ -8,7 +148,7 @@
- Change minimal supported OS to Ubuntu 20.04(needed by GTK) - [#468](https://github.com/qarmin/czkawka/pull/468)
- Increased performance by avoiding creating unnecessary image previews - [#468](https://github.com/qarmin/czkawka/pull/468)
- Improved performance due caching hash of broken/not supported images/videos = [#471](https://github.com/qarmin/czkawka/pull/471)
- Option to not remove cache from non existent files(e.g. from unplugged pendrive) - [#472](https://github.com/qarmin/czkawka/pull/472)
- Option to not remove cache from non-existent files(e.g. from unplugged pendrive) - [#472](https://github.com/qarmin/czkawka/pull/472)
- Add multiple tooltips with helpful messages - [#472](https://github.com/qarmin/czkawka/pull/472)
- Allow caching prehash - [#477](https://github.com/qarmin/czkawka/pull/477)
- Improve custom selecting of records(allows to use Rust regex) - [#489](https://github.com/qarmin/czkawka/pull/478)
@ -33,7 +173,7 @@
- Add additional info to printed errors [#446](https://github.com/qarmin/czkawka/pull/446)
- Add support for multiple image filters, hashes and sizes in similar images tool [#447](https://github.com/qarmin/czkawka/pull/447), [#448](https://github.com/qarmin/czkawka/pull/448)
- Button to move files/folders to provided location [#449](https://github.com/qarmin/czkawka/pull/449)
- Add non clickable button to fix white theme [#450](https://github.com/qarmin/czkawka/pull/450)
- Add non-clickable button to fix white theme [#450](https://github.com/qarmin/czkawka/pull/450)
- Fixed freeze when opening in same thread file/folder [#448](https://github.com/qarmin/czkawka/pull/448)
- Tool to check performance of different image filters and hash types and sizes [#447](https://github.com/qarmin/czkawka/pull/447)
- Add scheduled CI and pin it to support Rust 1.53.0 [7bb](https://github.com/qarmin/czkawka/commit/7bbdf742739a513b80d0cc06ba61dfafec976b23), [#431](https://github.com/qarmin/czkawka/pull/431)
@ -43,7 +183,7 @@
## Version 3.2.0 - 07.08.2021r
- Use checkbox instead selection to select files [#392](https://github.com/qarmin/czkawka/pull/392)
- Re-enable hardlink on windows - [#410](https://github.com/qarmin/czkawka/pull/410)
- Fix symlink and harlink creating - [#409](https://github.com/qarmin/czkawka/pull/409)
- Fix symlink and hardlink creating - [#409](https://github.com/qarmin/czkawka/pull/409)
- Add image preview to duplicate finder [#408](https://github.com/qarmin/czkawka/pull/408)
- Add setting maximum file size [#407](https://github.com/qarmin/czkawka/pull/407)
- Add new grouping algorithm to similar images [#405](https://github.com/qarmin/czkawka/pull/405)
@ -93,7 +233,7 @@
- Add support for CRC32 and XXH3 hash - [#243](https://github.com/qarmin/czkawka/pull/243)
- Add delete method to replace duplicate files with hard links - [#236](https://github.com/qarmin/czkawka/pull/236)
- Add checking for broken music opt-in - [#249](https://github.com/qarmin/czkawka/pull/249)
- Allow to save to files similar images results - [10156ccfd3](https://github.com/qarmin/czkawka/commit/10156ccfd3ba880d26d4bbad1e025b0050d7753b)
- Allow to save to file similar images results - [10156ccfd3](https://github.com/qarmin/czkawka/commit/10156ccfd3ba880d26d4bbad1e025b0050d7753b)
- Keep original file if replacing duplicate with hardlink fails - [#256](https://github.com/qarmin/czkawka/pull/256)
- Fix Windows theme - [#265](https://github.com/qarmin/czkawka/pull/265)
- Windows taskbar progress support - [#264](https://github.com/qarmin/czkawka/pull/264)
@ -139,7 +279,7 @@ This version is only needed to test flatpak build
- Add support for delete button - [#159](https://github.com/qarmin/czkawka/pull/159)
- Allow to select multiple entries in File Chooser - [#154](https://github.com/qarmin/czkawka/pull/154)
- Add cache support for similar images - [#139](https://github.com/qarmin/czkawka/pull/139)
- Add selecting images with it's size - [#138](https://github.com/qarmin/czkawka/pull/138)
- Add selecting images with its size - [#138](https://github.com/qarmin/czkawka/pull/138)
- Modernize popovers code and simplify later changes - [#137](https://github.com/qarmin/czkawka/pull/137)
## Version 2.0.0 - 23.12.2020r
@ -183,7 +323,7 @@ This version is only needed to test flatpak build
## Version 1.3.0 - 02.11.2020r
- Appimage support - [#77](https://github.com/qarmin/czkawka/pull/77)
- Removed warnings about non existend excluded directories - [#79](https://github.com/qarmin/czkawka/pull/79)
- Removed warnings about non-existed excluded directories - [#79](https://github.com/qarmin/czkawka/pull/79)
- Updated README - [8ec](https://github.com/qarmin/czkawka/commit/8ecde0fc9adb3e6cedf432c4ba749e698b645a7a)
- Added pre hash support(speedup for searching big duplicates) - [#83](https://github.com/qarmin/czkawka/pull/83)
- Support for searching duplicates by file name - [#84](https://github.com/qarmin/czkawka/pull/84)
@ -217,7 +357,7 @@ This version is only needed to test flatpak build
## Version 1.0.1 - 06.10.2020r
- Replaced default argument parser with StructOpt [#37](https://github.com/qarmin/czkawka/pull/37)
- Added all(except MacOS GTK build) builds to CI where can be freely downloaded [#41](https://github.com/qarmin/czkawka/pull/41) [#39](https://github.com/qarmin/czkawka/pull/39)
- Added all(except macOS GTK build) builds to CI where can be freely downloaded [#41](https://github.com/qarmin/czkawka/pull/41) [#39](https://github.com/qarmin/czkawka/pull/39)
- App can be downloaded also from Arch AUR and Cargo [#36](https://github.com/qarmin/czkawka/pull/36)
- Fixed crash with invalid file modification date [#33](https://github.com/qarmin/czkawka/issues/33)
- Upper tabs can hide and show when this is necessary [#38](https://github.com/qarmin/czkawka/pull/38)
@ -268,11 +408,11 @@ This version is only needed to test flatpak build
- Basic search in GTK
- Cleaned core from println
- Core functions doesn't use now process::exit(everything is done with help of messages/errors/warnings)
- Added support for non recursive search
- Added support for non-recursive search
- Improved finding number and size of duplicated files
- Saving results to file
- Print how much data was read by duplicate finder(debug only)
- Added Github CI
- Added GitHub CI
- Only debug build prints debug information's
- Clean code
- Add basic idea config to misc folder

@ -1,179 +1,149 @@
![com github qarmin czkawka](https://user-images.githubusercontent.com/41945903/102616149-66490400-4137-11eb-9cd6-813b2b070834.png)
**Czkawka** (_tch•kav•ka_ (IPA: [ʈ͡ʂkafka]), "hiccup" in Polish) is a simple, fast and free app to remove unnecessary files from your computer.
**Czkawka** (_tch•kav•ka_ (IPA: [ˈʧ̑kafka]), "hiccup" in Polish) is a simple, fast and free app to remove unnecessary
files from your computer.
**Krokiet** ((IPA: [ˈkrɔcɛt]), "croquet" in Polish) same as above, but uses Slint frontend.
## Features
- Written in memory safe Rust
- Written in memory-safe Rust
- Amazingly fast - due to using more or less advanced algorithms and multithreading
- Free, Open Source without ads
- Multiplatform - works on Linux, Windows, macOS, FreeBSD and many more
- Cache support - second and further scans should be a lot faster than the first one
- Cache support - second and further scans should be much faster than the first one
- CLI frontend - for easy automation
- GUI frontend - uses modern GTK 3 and looks similar to FSlint
- GUI frontend - uses GTK 4 or Slint frameworks
- No spying - Czkawka does not have access to the Internet, nor does it collect any user information or statistics
- Multilingual - support multiple languages like Polish, English or Italian
- Multiple tools to use:
- Duplicates - Finds duplicates based on file name, size or hash
- Empty Folders - Finds empty folders with the help of an advanced algorithm
- Big Files - Finds the provided number of the biggest files in given location
- Empty Files - Looks for empty files across the drive
- Temporary Files - Finds temporary files
- Similar Images - Finds images which are not exactly the same (different resolution, watermarks)
- Similar Videos - Looks for visually similar videos
- Same Music - Searches for music with the same artist, album etc.
- Invalid Symbolic Links - Shows symbolic links which point to non-existent files/directories
- Broken Files - Finds files with an invalid extension or that are corrupted
<!-- The GIF thingy -->
![Czkawka](https://user-images.githubusercontent.com/41945903/145280350-506f7e94-4db0-4de7-a68d-6e7c26bbd2bf.gif)
## How do I use it?
You can find the instructions on how to use Czkawka [**here**](instructions/Instruction.md).
Some helpful tricks you can find [**here**](instructions/Instruction.md#tips-tricks-and-known-bugs)
## Installation
Installation instructions with download links you can find [**here**](instructions/Installation.md).
## Compilation
If you want to try and develop Czkawka or just use the latest available feature, you may want to look at the [**compilation instruction**](instructions/Compilation.md).
## Benchmarks
Since Czkawka is written in Rust and it aims to be a faster alternative to FSlint or DupeGuru which are written in Python, we need to compare the speed of these tools.
- Duplicates - Finds duplicates based on file name, size or hash
- Empty Folders - Finds empty folders with the help of an advanced algorithm
- Big Files - Finds the provided number of the biggest files in given location
- Empty Files - Looks for empty files across the drive
- Temporary Files - Finds temporary files
- Similar Images - Finds images which are not exactly the same (different resolution, watermarks)
- Similar Videos - Looks for visually similar videos
- Same Music - Searches for similar music by tags or by reading content and comparing it
- Invalid Symbolic Links - Shows symbolic links which point to non-existent files/directories
- Broken Files - Finds files that are invalid or corrupted
- Bad Extensions - Lists files whose content not match with their extension
I tested it on a 256 GB SSD and a i7-4770 CPU.
I prepared a disk and performed a test without any folder exceptions and with disabled ignoring of hard links which contained 363 215 files, took 221,8 GB and had 62093 duplicate files in 31790 groups which occupied 4,1 GB.
I set the minimal file size to check to 1KB on all programs.
| App | Executing Time |
|:---------------------------:|:--------------:|
| FSlint 2.4.7 (First Run) | 86s |
| FSlint 2.4.7 (Second Run) | 43s |
| Czkawka 3.0.0 (First Run) | 8s |
| Czkawka 3.0.0 (Second Run) | 7s |
| DupeGuru 4.1.1 (First Run) | 22s |
| DupeGuru 4.1.1 (Second Run) | 21s |
I used Mprof for checking memory usage of FSlint and DupeGuru, and Heaptrack for Czkawka.
| App | Idle Ram | Max Operational Ram Usage | Stabilized after search |
|:--------------:|:--------:|:-------------------------:|:-----------------------:|
| FSlint 2.4.7 | 62 MB | 164 MB | 158 MB |
| Dupeguru 4.1.1 | 90 MB | 170 MB | 166 MB |
| Czkawka 3.0.0 | 12 MB | 122 MB | 60 MB |
![Czkawka](https://user-images.githubusercontent.com/41945903/145280350-506f7e94-4db0-4de7-a68d-6e7c26bbd2bf.gif)
![Krokiet](https://github.com/qarmin/czkawka/assets/41945903/52628a29-ecd6-4692-9ee4-8a680c889193)
In Dupeguru I enabled checking images with different dimensions to match Czkawka behavior.
Both apps use caching mechanism, so second scan is really fast.
Changelog and new releases can be found in [Github releases](https://github.com/qarmin/czkawka/releases) or
in [CHANGELOG.md](CHANGELOG.md).
Similar images which check 10949 files that occupied 6.6 GB
More about latest version, you can find [in Medium article](https://medium.com/@qarmin/czkawka-7-0-a465036e8788)
| App | Scan time |
|:---------------------------:|:---------:|
| Czkawka 3.0.0 (First Run) | 276s |
| Czkawka 3.0.0 (Second Run) | 1s |
| DupeGuru 4.1.1 (First Run) | 539s |
| DupeGuru 4.1.1 (Second Run) | 1s |
## Usage, installation, compilation, requirements, license
Similar images which check 349 image files that occupied 1.7 GB
Each tool uses different technologies, so you can find instructions for each of them in the appropriate file:
| App | Scan time |
|:---------------------------:|:----------|
| Czkawka 3.0.0 (First Run) | 54s |
| Czkawka 3.0.0 (Second Run) | 1s |
| DupeGuru 4.1.1 (First Run) | 55s |
| DupeGuru 4.1.1 (Second Run) | 1s |
- [Czkawka GUI (GTK frontend)](czkawka_gui/README.md)</br>
- [Czkawka CLI](czkawka_cli/README.md)</br>
- [Czkawka Core](czkawka_core/README.md)</br>
- [Krokiet GUI (Slint frontend)](krokiet/README.md)</br>
## Comparison to other tools
Bleachbit is a master at finding and removing temporary files, while Czkawka only finds the most basic ones. So these two apps shouldn't be compared directly or be considered as an alternative to one another.
| | Czkawka | FSlint | DupeGuru | Bleachbit |
|:----------------------:|:-----------:|:----------:|:-----------------:|:-----------:|
| Language | Rust | Python | Python/Obj-C | Python |
| OS | Lin,Mac,Win | Lin | Lin,Mac,Win | Lin,Mac,Win |
| Framework | GTK 3 | PyGTK2 | Qt 5 (PyQt)/Cocoa | PyGTK3 |
| Duplicate finder | • | • | • | |
| Empty files | • | • | | |
| Empty folders | • | • | | |
| Temporary files | • | • | | • |
| Big files | • | | | |
| Similar images | • | | • | |
| Similar videos | • | | | |
| Music duplicates(tags) | • | | • | |
| Invalid symlinks | • | • | | |
| Broken files | • | | | |
| Names conflict | • | • | | |
| Installed packages | | • | | |
| Invalid names | | • | | |
| Bad ID | | • | | |
| Non stripped binaries | | • | | |
| Redundant whitespace | | • | | |
| Overwriting files | | • | | • |
| Multiple languages | • | • | • | • |
| Cache support | • | | • | |
| In active development | Yes | No | Yes | Yes |
Bleachbit is a master at finding and removing temporary files, while Czkawka only finds the most basic ones. So these
two apps shouldn't be compared directly or be considered as an alternative to one another.
In this comparison remember, that even if app have same features they may work different(e.g. one app may have more
options to choose than other).
| | Czkawka | Krokiet | FSlint | DupeGuru | Bleachbit |
|:------------------------:|:-----------:|:-----------:|:------:|:-----------------:|:-----------:|
| Language | Rust | Rust | Python | Python/Obj-C | Python |
| Framework base language | C | Rust | C | C/C++/Obj-C/Swift | C |
| Framework | GTK 4 | Slint | PyGTK2 | Qt 5 (PyQt)/Cocoa | PyGTK3 |
| OS | Lin,Mac,Win | Lin,Mac,Win | Lin | Lin,Mac,Win | Lin,Mac,Win |
| Duplicate finder | ✔ | ✔ | ✔ | ✔ | |
| Empty files | ✔ | ✔ | ✔ | | |
| Empty folders | ✔ | ✔ | ✔ | | |
| Temporary files | ✔ | ✔ | ✔ | | ✔ |
| Big files | ✔ | ✔ | | | |
| Similar images | ✔ | ✔ | | ✔ | |
| Similar videos | ✔ | ✔ | | | |
| Music duplicates(tags) | ✔ | ✔ | | ✔ | |
| Invalid symlinks | ✔ | ✔ | ✔ | | |
| Broken files | ✔ | ✔ | | | |
| Names conflict | ✔ | ✔ | ✔ | | |
| Invalid names/extensions | ✔ | ✔ | ✔ | | |
| Installed packages | | | ✔ | | |
| Bad ID | | | ✔ | | |
| Non stripped binaries | | | ✔ | | |
| Redundant whitespace | | | ✔ | | |
| Overwriting files | | | ✔ | | ✔ |
| Multiple languages | ✔ | | ✔ | ✔ | ✔ |
| Cache support | ✔ | ✔ | | ✔ | |
| In active development | Yes | Yes | No | Yes | Yes |
## Other apps
There are many similar applications to Czkawka on the Internet, which do some things better and some things worse:
There are many similar applications to Czkawka on the Internet, which do some things better and some things worse:
### GUI
- [DupeGuru](https://github.com/arsenetar/dupeguru) - A lot of options to customize, great photo compare tool
- [DupeGuru](https://github.com/arsenetar/dupeguru) - Many options to customize; great photo compare tool
- [FSlint](https://github.com/pixelb/fslint) - A little outdated, but still have some tools not available in Czkawka
- [AntiDupl.NET](https://github.com/ermig1979/AntiDupl) - Shows a lot of metadata of compared images
- [Video Duplicate Finder](https://github.com/0x90d/videoduplicatefinder) - Finds similar videos(surprising, isn't it), supports video thumbnails
- [Video Duplicate Finder](https://github.com/0x90d/videoduplicatefinder) - Finds similar videos(surprising, isn't it),
supports video thumbnails
### CLI
Due to limited time, the biggest emphasis is on the GUI version so if you are looking for really good and feature-packed console apps, then take a look at these:
- [Fclones](https://github.com/pkolaczk/fclones) - One of the fastest tools to find duplicates, it is written also in Rust
- [Rmlint](https://github.com/sahib/rmlint) - Really good console interface and also is feature packed
Due to limited time, the biggest emphasis is on the GUI version so if you are looking for really good and feature-packed
console apps, then take a look at these:
- [Fclones](https://github.com/pkolaczk/fclones) - One of the fastest tools to find duplicates; it is written also in
Rust
- [Rmlint](https://github.com/sahib/rmlint) - Nice console interface and also is feature packed
- [RdFind](https://github.com/pauldreik/rdfind) - Fast, but written in C++ ¯\\\_(ツ)\_/¯
## Contributions
Contributions to this repository are welcome.
You can help by creating:
- Bug reports - memory leaks, unexpected behavior, crashes
- Feature proposals - proposal to change/add/delete some features
- Pull Requests - implementing a new feature yourself or fixing bugs.
If the change is bigger, then it's a good idea to open a new issue to discuss changes.
If the change is bigger, then it's a good idea to open a new issue to discuss changes, but issues with
label `PR welcome` are already checked and accepted.
- Documentation - There is an [instruction](instructions/Instruction.md) which you can improve.
- Translations - Instruction how to translate files is available [here](instructions/Translations.md)
You can also help by doing different things:
- Creating text articles - [LinuxUprising](https://www.linuxuprising.com/2021/03/find-and-remove-duplicate-files-similar.html) or [Ubunlog](https://ubunlog.com/en/czkawka-finds-and-removes-empty-and-broken-duplicate-files/)
- Adding Czkawka to repositories - [Alpine Linux](https://pkgs.alpinelinux.org/packages?name=czkawka&branch=edge) or [NixOS](https://github.com/NixOS/nixpkgs/pull/116441) or [OpenMandriva](https://github.com/OpenMandrivaAssociation/czkawka)
- Creating videos - [First Video](https://www.youtube.com/watch?v=CWlRiTD4vDc) or [Tutorial Spanish](https://www.youtube.com/watch?v=V9x-pHJRmKY)
- External contributions - App use big number of external libraries
like [lofty](https://github.com/Serial-ATA/lofty-rs), [image-rs](https://github.com/image-rs/image)
or [symphonia](https://github.com/pdeljanov/Symphonia) so improving this libraries will automatically improve Czkawka
You can also help by doing other things:
- Creating text
articles - [LinuxUprising](https://www.linuxuprising.com/2021/03/find-and-remove-duplicate-files-similar.html)
or [Ubunlog](https://ubunlog.com/en/czkawka-finds-and-removes-empty-and-broken-duplicate-files/)
- Adding Czkawka to repositories - [Alpine Linux](https://pkgs.alpinelinux.org/packages?name=czkawka&branch=edge)
or [NixOS](https://github.com/NixOS/nixpkgs/pull/116441)
or [OpenMandriva](https://github.com/OpenMandrivaAssociation/czkawka)
- Creating videos - [First Video](https://www.youtube.com/watch?v=CWlRiTD4vDc)
or [Spanish Tutorial](https://www.youtube.com/watch?v=V9x-pHJRmKY)
- Recommending it to others
## Name
Czkawka is a Polish word which means _hiccup_.
I chose this name because I wanted to hear people speaking other languages pronounce it, so feel free to spell it the way you want.
This name is not as bad as it seems, because I was also thinking about using words like _żółć_, _gżegżółka_ or _żołądź_,
but I gave up on these ideas because they contained Polish characters, which would cause difficulty in searching for the project.
At the beginning of the program creation, if the response concerning the name was unanimously negative, I prepared myself
for a possible change of the name of the program, and the opinions were extremely mixed.
## License
Code is distributed under MIT license.
Icon was created by [jannuary](https://github.com/jannuary) and licensed CC-BY-4.0.
Windows dark theme is used from [AdMin repo](https://github.com/nrhodes91/AdMin) with MIT license.
The program is completely free to use.
"Gratis to uczciwa cena" - "Free is a fair price"
## Thanks
Big thanks to Pádraig Brady, creator of fantastic FSlint, because without his work I wouldn't create this tool.
Thanks also to all the people who create patches for this program, make it available on other systems, create videos, articles about it etc.
Thanks also to all the people who create patches for this program, make it available on other systems, create videos,
articles about it etc.
Also, I really appreciate work of people that create crates on which Czkawka is based and for that I try to report bugs
to make it even better.
## Donations
If you are using the app, I would appreciate a donation for its further development, which can be done [here](https://github.com/sponsors/qarmin).
If you are using the app, I would appreciate a donation for its further development, which can be
done [here](https://github.com/sponsors/qarmin).

@ -0,0 +1,11 @@
[package]
name = "ci_tester"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
state = "0.6.0"
handsome_logger = "0.8.0"
log = "0.4.20"

@ -0,0 +1,339 @@
use std::collections::BTreeSet;
use std::fs;
use std::process::Command;
use std::process::Stdio;
use log::info;
#[derive(Default, Clone, Debug)]
struct CollectedFiles {
files: BTreeSet<String>,
folders: BTreeSet<String>,
symlinks: BTreeSet<String>,
}
static CZKAWKA_PATH: state::InitCell<String> = state::InitCell::new();
static COLLECTED_FILES: state::InitCell<CollectedFiles> = state::InitCell::new();
const ATTEMPTS: u32 = 10;
const PRINT_MESSAGES_CZKAWKA: bool = true;
// App runs - ./ci_tester PATH_TO_CZKAWKA
fn main() {
handsome_logger::init().unwrap();
let args: Vec<String> = std::env::args().collect();
let path_to_czkawka = args[1].clone();
CZKAWKA_PATH.set(path_to_czkawka);
remove_test_dir();
run_with_good_status(&["ls"], false);
unzip_files();
let all_files = collect_all_files_and_dirs("TestFiles").unwrap();
COLLECTED_FILES.set(all_files);
remove_test_dir();
for _ in 0..ATTEMPTS {
test_empty_files();
test_smallest_files();
test_biggest_files();
test_empty_folders();
test_temporary_files();
test_symlinks_files();
test_remove_duplicates_one_oldest();
test_remove_duplicates_one_newest();
test_remove_duplicates_all_expect_newest();
test_remove_duplicates_all_expect_oldest();
test_remove_same_music_tags_one_oldest();
test_remove_same_music_tags_one_newest();
test_remove_same_music_tags_all_expect_oldest();
test_remove_same_music_tags_all_expect_newest();
test_remove_same_music_content_one_oldest();
test_remove_same_music_content_all_expect_oldest();
test_remove_same_music_content_one_newest();
test_remove_same_music_content_all_expect_newest();
test_remove_videos_one_oldest();
test_remove_videos_one_newest();
test_remove_videos_all_expect_oldest();
test_remove_videos_all_expect_newest();
}
println!("Completed checking");
}
fn test_remove_videos_one_oldest() {
info!("test_remove_videos_one_oldest");
run_test(&["video", "-d", "TestFiles", "-D", "OO"], vec!["Videos/V3.webm"], vec![], vec![]);
}
fn test_remove_videos_one_newest() {
info!("test_remove_videos_one_newest");
run_test(&["video", "-d", "TestFiles", "-D", "ON"], vec!["Videos/V5.mp4"], vec![], vec![]);
}
fn test_remove_videos_all_expect_oldest() {
info!("test_remove_videos_all_expect_oldest");
run_test(
&["video", "-d", "TestFiles", "-D", "AEO"],
vec!["Videos/V1.mp4", "Videos/V2.mp4", "Videos/V5.mp4"],
vec![],
vec![],
);
}
fn test_remove_videos_all_expect_newest() {
info!("test_remove_videos_all_expect_newest");
run_test(
&["video", "-d", "TestFiles", "-D", "AEN"],
vec!["Videos/V1.mp4", "Videos/V2.mp4", "Videos/V3.webm"],
vec![],
vec![],
);
}
fn test_remove_same_music_content_one_newest() {
info!("test_remove_same_music_content_one_newest");
run_test(
&["music", "-d", "TestFiles", "-s", "CONTENT", "-l", "2.0", "-D", "ON"],
vec!["Music/M2.mp3"],
vec![],
vec![],
);
}
fn test_remove_same_music_content_all_expect_newest() {
info!("test_remove_same_music_content_all_expect_newest");
run_test(
&["music", "-d", "TestFiles", "-s", "CONTENT", "-l", "2.0", "-D", "AEN"],
vec!["Music/M1.mp3", "Music/M3.flac", "Music/M5.mp3"],
vec![],
vec![],
);
}
fn test_remove_same_music_content_all_expect_oldest() {
info!("test_remove_same_music_content_all_expect_oldest");
run_test(
&["music", "-d", "TestFiles", "-s", "CONTENT", "-l", "2.0", "-D", "AEO"],
vec!["Music/M1.mp3", "Music/M2.mp3", "Music/M3.flac"],
vec![],
vec![],
);
}
fn test_remove_same_music_content_one_oldest() {
info!("test_remove_same_music_content_one_oldest");
run_test(
&["music", "-d", "TestFiles", "-s", "CONTENT", "-l", "2.0", "-D", "OO"],
vec!["Music/M5.mp3"],
vec![],
vec![],
);
}
fn test_remove_same_music_tags_one_oldest() {
info!("test_remove_same_music_one_oldest");
run_test(&["music", "-d", "TestFiles", "-D", "OO"], vec!["Music/M5.mp3"], vec![], vec![]);
}
fn test_remove_same_music_tags_one_newest() {
info!("test_remove_same_music_one_newest");
run_test(&["music", "-d", "TestFiles", "-D", "ON"], vec!["Music/M2.mp3"], vec![], vec![]);
}
fn test_remove_same_music_tags_all_expect_oldest() {
info!("test_remove_same_music_all_expect_oldest");
run_test(
&["music", "-d", "TestFiles", "-D", "AEO"],
vec!["Music/M1.mp3", "Music/M2.mp3", "Music/M3.flac"],
vec![],
vec![],
);
}
fn test_remove_same_music_tags_all_expect_newest() {
info!("test_remove_same_music_all_expect_newest");
run_test(
&["music", "-d", "TestFiles", "-D", "AEN"],
vec!["Music/M1.mp3", "Music/M3.flac", "Music/M5.mp3"],
vec![],
vec![],
);
}
fn test_remove_duplicates_all_expect_oldest() {
info!("test_remove_duplicates_all_expect_oldest");
run_test(
&["dup", "-d", "TestFiles", "-D", "AEO"],
vec!["Images/A1.jpg", "Images/A5.jpg", "Music/M1.mp3", "Music/M2.mp3", "Videos/V1.mp4", "Videos/V5.mp4"],
vec![],
vec![],
);
}
fn test_remove_duplicates_all_expect_newest() {
info!("test_remove_duplicates_all_expect_newest");
run_test(
&["dup", "-d", "TestFiles", "-D", "AEN"],
vec!["Images/A2.jpg", "Images/A5.jpg", "Music/M1.mp3", "Music/M5.mp3", "Videos/V1.mp4", "Videos/V2.mp4"],
vec![],
vec![],
);
}
fn test_remove_duplicates_one_newest() {
info!("test_remove_duplicates_one_newest");
run_test(
&["dup", "-d", "TestFiles", "-D", "ON"],
vec!["Images/A1.jpg", "Music/M2.mp3", "Videos/V5.mp4"],
vec![],
vec![],
);
}
fn test_remove_duplicates_one_oldest() {
info!("test_remove_duplicates_one_oldest");
run_test(
&["dup", "-d", "TestFiles", "-D", "OO"],
vec!["Images/A2.jpg", "Music/M5.mp3", "Videos/V2.mp4"],
vec![],
vec![],
);
}
fn test_symlinks_files() {
info!("test_symlinks_files");
run_test(&["symlinks", "-d", "TestFiles", "-D"], vec![], vec![], vec!["Symlinks/EmptyFiles"]);
}
fn test_temporary_files() {
info!("test_temporary_files");
run_test(&["temp", "-d", "TestFiles", "-D"], vec!["Temporary/Boczze.cache"], vec![], vec![]);
}
fn test_empty_folders() {
info!("test_empty_folders");
run_test(
&["empty-folders", "-d", "TestFiles", "-D"],
vec![],
vec!["EmptyFolders/One", "EmptyFolders/Two", "EmptyFolders/Two/TwoInside"],
vec![],
);
}
fn test_biggest_files() {
info!("test_biggest_files");
run_test(
&["big", "-d", "TestFiles", "-n", "6", "-D"],
vec!["Music/M3.flac", "Music/M4.mp3", "Videos/V2.mp4", "Videos/V3.webm", "Videos/V1.mp4", "Videos/V5.mp4"],
vec![],
vec![],
);
}
fn test_smallest_files() {
info!("test_smallest_files");
run_test(
&["big", "-d", "TestFiles", "-J", "-n", "5", "-D"],
vec!["Broken/Br.jpg", "Broken/Br.mp3", "Broken/Br.pdf", "Broken/Br.zip", "EmptyFolders/ThreeButNot/KEKEKE"],
vec![],
vec![],
);
}
fn test_empty_files() {
info!("test_empty_files");
run_test(&["empty-files", "-d", "TestFiles", "-D"], vec!["EmptyFile"], vec![], vec![]);
}
////////////////////////////////////
////////////////////////////////////
/////////HELPER FUNCTIONS///////////
////////////////////////////////////
////////////////////////////////////
fn run_test(arguments: &[&str], expected_files_differences: Vec<&'static str>, expected_folders_differences: Vec<&'static str>, expected_symlinks_differences: Vec<&'static str>) {
unzip_files();
// Add path_to_czkawka to arguments
let mut all_arguments = vec![];
all_arguments.push(CZKAWKA_PATH.get().as_str());
all_arguments.extend_from_slice(arguments);
run_with_good_status(&all_arguments, PRINT_MESSAGES_CZKAWKA);
file_folder_diffs(
COLLECTED_FILES.get(),
expected_files_differences,
expected_folders_differences,
expected_symlinks_differences,
);
remove_test_dir();
}
fn unzip_files() {
run_with_good_status(&["unzip", "-X", "TestFiles.zip", "-d", "TestFiles"], false);
}
fn remove_test_dir() {
let _ = fs::remove_dir_all("TestFiles");
}
fn run_with_good_status(str_command: &[&str], print_messages: bool) {
let mut command = Command::new(str_command[0]);
let mut com = command.args(&str_command[1..]);
if !print_messages {
com = com.stderr(Stdio::piped()).stdout(Stdio::piped());
}
let status = com.spawn().expect("failed to execute process").wait().unwrap();
assert!(status.success());
}
fn file_folder_diffs(
all_files: &CollectedFiles,
mut expected_files_differences: Vec<&'static str>,
mut expected_folders_differences: Vec<&'static str>,
mut expected_symlinks_differences: Vec<&'static str>,
) {
let current_files = collect_all_files_and_dirs("TestFiles").unwrap();
let mut diff_files = all_files
.files
.difference(&current_files.files)
.map(|e| e.strip_prefix("TestFiles/").unwrap().to_string())
.collect::<Vec<_>>();
let mut diff_folders = all_files
.folders
.difference(&current_files.folders)
.map(|e| e.strip_prefix("TestFiles/").unwrap().to_string())
.collect::<Vec<_>>();
let mut diff_symlinks = all_files
.symlinks
.difference(&current_files.symlinks)
.map(|e| e.strip_prefix("TestFiles/").unwrap().to_string())
.collect::<Vec<_>>();
expected_symlinks_differences.sort();
expected_folders_differences.sort();
expected_files_differences.sort();
diff_files.sort();
diff_folders.sort();
diff_symlinks.sort();
assert_eq!(diff_files, expected_files_differences);
assert_eq!(diff_folders, expected_folders_differences);
assert_eq!(diff_symlinks, expected_symlinks_differences);
}
fn collect_all_files_and_dirs(dir: &str) -> std::io::Result<CollectedFiles> {
let mut files = BTreeSet::new();
let mut folders = BTreeSet::new();
let mut symlinks = BTreeSet::new();
let mut folders_to_check = vec![dir.to_string()];
while !folders_to_check.is_empty() {
let folder = folders_to_check.pop().unwrap();
let rd = fs::read_dir(folder)?;
for entry in rd {
let entry = entry?;
let file_type = entry.file_type()?;
let path_str = entry.path().to_string_lossy().to_string();
if file_type.is_dir() {
folders.insert(path_str.clone());
folders_to_check.push(path_str);
} else if file_type.is_symlink() {
symlinks.insert(path_str);
} else if file_type.is_file() {
files.insert(path_str);
} else {
panic!("Unknown type of file {path_str:?}");
}
}
}
folders.remove(dir);
// println!("Found {} files, {} folders and {} symlinks", files.len(), folders.len(), symlinks.len());
Ok(CollectedFiles { files, folders, symlinks })
}

@ -1,16 +1,29 @@
[package]
name = "czkawka_cli"
version = "4.0.0"
version = "7.0.0"
authors = ["Rafał Mikrut <mikrutrafal@protonmail.com>"]
edition = "2018"
edition = "2021"
rust-version = "1.75.0"
description = "CLI frontend of Czkawka"
license = "MIT"
homepage = "https://github.com/qarmin/czkawka"
repository = "https://github.com/qarmin/czkawka"
[dependencies]
czkawka_core = { path = "../czkawka_core", version = "4.0.0" }
structopt = "0.3.25"
clap = { version = "4.5", features = ["derive"] }
# For enum types
img_hash = "3.2.0"
image_hasher = "1.2"
log = "0.4.20"
handsome_logger = "0.8"
fun_time = { version = "0.3", features = ["log"] }
czkawka_core = { path = "../czkawka_core", version = "7.0.0", features = [] }
indicatif = "0.17"
crossbeam-channel = { version = "0.5", features = [] }
ctrlc = { version = "3.4", features = ["termination"] }
[features]
default = []
heif = ["czkawka_core/heif"]
libraw = ["czkawka_core/libraw"]

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020-2024 Rafał Mikrut
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

@ -0,0 +1,44 @@
# Czkawka CLI
CLI frontend, allows to use Czkawka from terminal.
## Requirements
Precompiled binaries should work without any additional dependencies with Linux(Ubuntu 20.04+), Windows(10+) and macOS(10.15+).
If you decide to compile the app, you probably will be able to run it on even older versions of OS, like Ubuntu 16.04 or Windows 7.
On linux it is even possible with eyra to avoid entirely libc and using fully static rust binary.
If you want to use similar videos tool, you need to install ffmpeg(runtime dependency) or use heif/libraw(build/runtime dependency) you need to install required packages.
- mac - `brew install ffmpeg libraw libheif` - https://formulae.brew.sh/formula/ffmpeg
- linux - `sudo apt install ffmpeg libraw-dev libheif-dev`
- windows - `choco install ffmpeg` - or if not working, download from https://ffmpeg.org/download.html#build-windows and unpack to location with `czkawka_cli.exe`, heif and libraw are not supported on windows
## Compilation
For compilation, you need to have installed Rust via rustup - https://rustup.rs/ and compile it e.g. via
```shell
cargo run --release --bin czkawka_cli
```
you can enable additional features via
```shell
cargo run --release --bin czkawka_cli --features "heif,libraw"
```
on linux to build fully static binary with eyra you need to use (this is only for crazy people, so just use command above if you don't know what you are doing)
```shell
rustup default nightly-2024-02-06 # or any newer nightly that works fine with eyra
cd czkawka_cli
cargo add eyra --rename=std
echo 'fn main() { println!("cargo:rustc-link-arg=-nostartfiles"); }' > build.rs
cd ..
cargo build --release --bin czkawka_cli
```
## Limitations
Not all available features in core are available in CLI.
List of not available features:
- Ability to use/choose referenced directories
- See progress of scanning
## LICENSE
MIT

@ -0,0 +1 @@
../data/

@ -1,290 +1,495 @@
use std::path::PathBuf;
use img_hash::{FilterType, HashAlg};
use structopt::StructOpt;
use image_hasher::{FilterType, HashAlg};
use czkawka_core::common_dir_traversal::CheckingMethod;
use czkawka_core::duplicate::{DeleteMethod, HashType};
use czkawka_core::common_tool::DeleteMethod;
use czkawka_core::duplicate::HashType;
use czkawka_core::same_music::MusicSimilarity;
use czkawka_core::similar_images::SimilarityPreset;
use czkawka_core::CZKAWKA_VERSION;
#[derive(clap::Parser)]
#[clap(
name = "czkawka",
help_template = HELP_TEMPLATE,
version = CZKAWKA_VERSION
)]
pub struct Args {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Debug, StructOpt)]
#[structopt(name = "czkawka", help_message = HELP_MESSAGE, template = HELP_TEMPLATE)]
#[derive(Debug, clap::Subcommand)]
pub enum Commands {
#[structopt(name = "dup", about = "Finds duplicate files", help_message = HELP_MESSAGE, after_help = "EXAMPLE:\n czkawka dup -d /home/rafal -e /home/rafal/Obrazy -m 25 -x 7z rar IMAGE -s hash -f results.txt -D aeo")]
Duplicates {
#[structopt(flatten)]
directories: Directories,
#[structopt(flatten)]
excluded_directories: ExcludedDirectories,
#[structopt(flatten)]
excluded_items: ExcludedItems,
#[structopt(short, long, parse(try_from_str = parse_minimal_file_size), default_value = "8192", help = "Minimum size in bytes", long_help = "Minimum size of checked files in bytes, assigning bigger value may speed up searching")]
minimal_file_size: u64,
#[structopt(short = "i", long, parse(try_from_str = parse_maximal_file_size), default_value = "18446744073709551615", help = "Maximum size in bytes", long_help = "Maximum size of checked files in bytes, assigning lower value may speed up searching")]
maximal_file_size: u64,
#[structopt(short = "c", long, parse(try_from_str = parse_minimal_file_size), default_value = "257144", help = "Minimum cached file size in bytes", long_help = "Minimum size of cached files in bytes, assigning bigger value may speed up will cause that lower amount of files will be cached, but loading of cache will be faster")]
minimal_cached_file_size: u64,
#[structopt(flatten)]
allowed_extensions: AllowedExtensions,
#[structopt(short, long, default_value = "HASH", parse(try_from_str = parse_checking_method), help = "Search method (NAME, SIZE, HASH)", long_help = "Methods to search files.\nNAME - Fast but but rarely usable,\nSIZE - Fast but not accurate, checking by the file's size,\nHASH - The slowest method, checking by the hash of the entire file")]
search_method: CheckingMethod,
#[structopt(short = "D", long, default_value = "NONE", parse(try_from_str = parse_delete_method), help = "Delete method (AEN, AEO, ON, OO, HARD)", long_help = "Methods to delete the files.\nAEN - All files except the newest,\nAEO - All files except the oldest,\nON - Only 1 file, the newest,\nOO - Only 1 file, the oldest\nHARD - create hard link\nNONE - not delete files")]
delete_method: DeleteMethod,
#[structopt(short = "ht", long, default_value = "BLAKE3", parse(try_from_str = parse_hash_type), help = "Hash type (BLAKE3, CRC32, XXH3)")]
hash_type: HashType,
#[structopt(flatten)]
file_to_save: FileToSave,
#[structopt(flatten)]
not_recursive: NotRecursive,
#[structopt(flatten)]
allow_hard_links: AllowHardLinks,
#[structopt(flatten)]
dryrun: DryRun,
},
#[structopt(name = "empty-folders", about = "Finds empty folders", help_message = HELP_MESSAGE, after_help = "EXAMPLE:\n czkawka empty-folders -d /home/rafal/rr /home/gateway -f results.txt")]
EmptyFolders {
#[structopt(flatten)]
directories: Directories,
#[structopt(flatten)]
excluded_directories: ExcludedDirectories,
#[structopt(flatten)]
excluded_items: ExcludedItems,
#[structopt(short = "D", long, help = "Delete found folders")]
delete_folders: bool,
#[structopt(flatten)]
file_to_save: FileToSave,
},
#[structopt(name = "big", about = "Finds big files", help_message = HELP_MESSAGE, after_help = "EXAMPLE:\n czkawka big -d /home/rafal/ /home/piszczal -e /home/rafal/Roman -n 25 -x VIDEO -f results.txt")]
BiggestFiles {
#[structopt(flatten)]
directories: Directories,
#[structopt(flatten)]
excluded_directories: ExcludedDirectories,
#[structopt(flatten)]
excluded_items: ExcludedItems,
#[structopt(flatten)]
allowed_extensions: AllowedExtensions,
#[structopt(short, long, default_value = "50", help = "Number of files to be shown")]
number_of_files: usize,
#[structopt(short = "D", long, help = "Delete found files")]
delete_files: bool,
#[structopt(flatten)]
file_to_save: FileToSave,
#[structopt(flatten)]
not_recursive: NotRecursive,
},
#[structopt(name = "empty-files", about = "Finds empty files", help_message = HELP_MESSAGE, after_help = "EXAMPLE:\n czkawka empty-files -d /home/rafal /home/szczekacz -e /home/rafal/Pulpit -R -f results.txt")]
EmptyFiles {
#[structopt(flatten)]
directories: Directories,
#[structopt(flatten)]
excluded_directories: ExcludedDirectories,
#[structopt(flatten)]
excluded_items: ExcludedItems,
#[structopt(flatten)]
allowed_extensions: AllowedExtensions,
#[structopt(short = "D", long, help = "Delete found files")]
delete_files: bool,
#[structopt(flatten)]
file_to_save: FileToSave,
#[structopt(flatten)]
not_recursive: NotRecursive,
},
#[structopt(name = "temp", about = "Finds temporary files", help_message = HELP_MESSAGE, after_help = "EXAMPLE:\n czkawka temp -d /home/rafal/ -E */.git */tmp* *Pulpit -f results.txt -D")]
Temporary {
#[structopt(flatten)]
directories: Directories,
#[structopt(flatten)]
excluded_directories: ExcludedDirectories,
#[structopt(flatten)]
excluded_items: ExcludedItems,
#[structopt(short = "D", long, help = "Delete found files")]
delete_files: bool,
#[structopt(flatten)]
file_to_save: FileToSave,
#[structopt(flatten)]
not_recursive: NotRecursive,
},
#[structopt(name = "image", about = "Finds similar images", help_message = HELP_MESSAGE, after_help = "EXAMPLE:\n czkawka image -d /home/rafal/ -E */.git */tmp* *Pulpit -f results.txt")]
SimilarImages {
#[structopt(flatten)]
directories: Directories,
#[structopt(flatten)]
excluded_directories: ExcludedDirectories,
#[structopt(short, long, parse(try_from_str = parse_minimal_file_size), default_value = "16384", help = "Minimum size in bytes", long_help = "Minimum size of checked files in bytes, assigning bigger value may speed up searching")]
minimal_file_size: u64,
#[structopt(short = "i", long, parse(try_from_str = parse_maximal_file_size), default_value = "18446744073709551615", help = "Maximum size in bytes", long_help = "Maximum size of checked files in bytes, assigning lower value may speed up searching")]
maximal_file_size: u64,
#[structopt(short, long, default_value = "High", parse(try_from_str = parse_similar_images_similarity), help = "Similairty level (Minimal, VerySmall, Small, Medium, High, VeryHigh)", long_help = "Methods to choose similarity level of images which will be considered as duplicated.")]
similarity_preset: SimilarityPreset,
#[structopt(flatten)]
excluded_items: ExcludedItems,
#[structopt(flatten)]
file_to_save: FileToSave,
#[structopt(flatten)]
not_recursive: NotRecursive,
#[structopt(short = "g", long, default_value = "Gradient", parse(try_from_str = parse_similar_hash_algorithm), help = "Hash algorithm (allowed: Mean, Gradient, Blockhash, VertGradient, DoubleGradient)")]
hash_alg: HashAlg,
#[structopt(short = "z", long, default_value = "Lanczos3", parse(try_from_str = parse_similar_image_filter), help = "Hash algorithm (allowed: Lanczos3, Nearest, Triangle, Faussian, Catmullrom)")]
image_filter: FilterType,
#[structopt(short = "c", long, default_value = "8", parse(try_from_str = parse_image_hash_size), help = "Hash size (allowed: 4, 8, 16)")]
hash_size: u8,
},
#[structopt(name = "music", about = "Finds same music by tags", help_message = HELP_MESSAGE, after_help = "EXAMPLE:\n czkawka music -d /home/rafal -f results.txt")]
SameMusic {
#[structopt(flatten)]
directories: Directories,
#[structopt(flatten)]
excluded_directories: ExcludedDirectories,
#[structopt(flatten)]
excluded_items: ExcludedItems,
// #[structopt(short = "D", long, help = "Delete found files")]
// delete_files: bool, TODO
#[structopt(short = "z", long, default_value = "artist,title", parse(try_from_str = parse_music_duplicate_type), help = "Search method (title, artist, album_title, album_artist, year)", long_help = "Sets which rows must be equal to set this files as duplicates(may be mixed, but must be divided by commas).")]
music_similarity: MusicSimilarity,
#[structopt(flatten)]
file_to_save: FileToSave,
#[structopt(flatten)]
not_recursive: NotRecursive,
#[structopt(short, long, parse(try_from_str = parse_minimal_file_size), default_value = "8192", help = "Minimum size in bytes", long_help = "Minimum size of checked files in bytes, assigning bigger value may speed up searching")]
minimal_file_size: u64,
#[structopt(short = "i", long, parse(try_from_str = parse_maximal_file_size), default_value = "18446744073709551615", help = "Maximum size in bytes", long_help = "Maximum size of checked files in bytes, assigning lower value may speed up searching")]
maximal_file_size: u64,
},
#[structopt(name = "symlinks", about = "Finds invalid symlinks", help_message = HELP_MESSAGE, after_help = "EXAMPLE:\n czkawka symlinks -d /home/kicikici/ /home/szczek -e /home/kicikici/jestempsem -x jpg -f results.txt")]
InvalidSymlinks {
#[structopt(flatten)]
directories: Directories,
#[structopt(flatten)]
excluded_directories: ExcludedDirectories,
#[structopt(flatten)]
excluded_items: ExcludedItems,
#[structopt(flatten)]
allowed_extensions: AllowedExtensions,
#[structopt(short = "D", long, help = "Delete found files")]
delete_files: bool,
#[structopt(flatten)]
file_to_save: FileToSave,
#[structopt(flatten)]
not_recursive: NotRecursive,
},
#[structopt(name = "broken", about = "Finds broken files", help_message = HELP_MESSAGE, after_help = "EXAMPLE:\n czkawka broken -d /home/kicikici/ /home/szczek -e /home/kicikici/jestempsem -x jpg -f results.txt")]
BrokenFiles {
#[structopt(flatten)]
directories: Directories,
#[structopt(flatten)]
excluded_directories: ExcludedDirectories,
#[structopt(flatten)]
excluded_items: ExcludedItems,
#[structopt(flatten)]
allowed_extensions: AllowedExtensions,
#[structopt(short = "D", long, help = "Delete found files")]
delete_files: bool,
#[structopt(flatten)]
file_to_save: FileToSave,
#[structopt(flatten)]
not_recursive: NotRecursive,
},
#[structopt(name = "video", about = "Finds similar video files", help_message = HELP_MESSAGE, after_help = "EXAMPLE:\n czkawka videos -d /home/rafal -f results.txt")]
SimilarVideos {
#[structopt(flatten)]
directories: Directories,
#[structopt(flatten)]
excluded_directories: ExcludedDirectories,
#[structopt(flatten)]
excluded_items: ExcludedItems,
// #[structopt(short = "D", long, help = "Delete found files")]
// delete_files: bool, TODO
#[structopt(flatten)]
file_to_save: FileToSave,
#[structopt(flatten)]
allowed_extensions: AllowedExtensions,
#[structopt(flatten)]
not_recursive: NotRecursive,
#[structopt(short, long, parse(try_from_str = parse_minimal_file_size), default_value = "8192", help = "Minimum size in bytes", long_help = "Minimum size of checked files in bytes, assigning bigger value may speed up searching")]
minimal_file_size: u64,
#[structopt(short = "i", long, parse(try_from_str = parse_maximal_file_size), default_value = "18446744073709551615", help = "Maximum size in bytes", long_help = "Maximum size of checked files in bytes, assigning lower value may speed up searching")]
maximal_file_size: u64,
#[structopt(short = "t", long, parse(try_from_str = parse_tolerance), default_value = "10", help = "Video maximium difference (allowed values <0,20>)", long_help = "Maximum difference between video frames, bigger value means that videos can looks more and more different (allowed values <0,20>)")]
tolerance: i32,
},
#[structopt(name = "tester", about = "Contains various test", help_message = HELP_MESSAGE, after_help = "EXAMPLE:\n czkawka tests -i")]
Tester {
#[structopt(short = "i", long = "test_image", help = "Test speed of hashing provided test.jpg image with different filters and methods.")]
test_image: bool,
},
}
#[derive(Debug, StructOpt)]
pub struct Directories {
#[structopt(
#[clap(
name = "dup",
about = "Finds duplicate files",
after_help = "EXAMPLE:\n czkawka dup -d /home/rafal -e /home/rafal/Obrazy -m 25 -x 7z rar IMAGE -s hash -f results.txt -D aeo"
)]
Duplicates(DuplicatesArgs),
#[clap(
name = "empty-folders",
about = "Finds empty folders",
after_help = "EXAMPLE:\n czkawka empty-folders -d /home/rafal/rr /home/gateway -f results.txt"
)]
EmptyFolders(EmptyFoldersArgs),
#[clap(
name = "big",
about = "Finds big files",
after_help = "EXAMPLE:\n czkawka big -d /home/rafal/ /home/piszczal -e /home/rafal/Roman -n 25 -J -x VIDEO -f results.txt"
)]
BiggestFiles(BiggestFilesArgs),
#[clap(
name = "empty-files",
about = "Finds empty files",
after_help = "EXAMPLE:\n czkawka empty-files -d /home/rafal /home/szczekacz -e /home/rafal/Pulpit -R -f results.txt"
)]
EmptyFiles(EmptyFilesArgs),
#[clap(
name = "temp",
about = "Finds temporary files",
after_help = "EXAMPLE:\n czkawka temp -d /home/rafal/ -E */.git */tmp* *Pulpit -f results.txt -D"
)]
Temporary(TemporaryArgs),
#[clap(
name = "image",
about = "Finds similar images",
after_help = "EXAMPLE:\n czkawka image -d /home/rafal/ -E */.git */tmp* *Pulpit -f results.txt"
)]
SimilarImages(SimilarImagesArgs),
#[clap(name = "music", about = "Finds same music by tags", after_help = "EXAMPLE:\n czkawka music -d /home/rafal -f results.txt")]
SameMusic(SameMusicArgs),
#[clap(
name = "symlinks",
about = "Finds invalid symlinks",
after_help = "EXAMPLE:\n czkawka symlinks -d /home/kicikici/ /home/szczek -e /home/kicikici/jestempsem -x jpg -f results.txt"
)]
InvalidSymlinks(InvalidSymlinksArgs),
#[clap(
name = "broken",
about = "Finds broken files",
after_help = "EXAMPLE:\n czkawka broken -d /home/kicikici/ /home/szczek -e /home/kicikici/jestempsem -x jpg -f results.txt"
)]
BrokenFiles(BrokenFilesArgs),
#[clap(name = "video", about = "Finds similar video files", after_help = "EXAMPLE:\n czkawka videos -d /home/rafal -f results.txt")]
SimilarVideos(SimilarVideosArgs),
#[clap(
name = "ext",
about = "Finds files with invalid extensions",
after_help = "EXAMPLE:\n czkawka broken -d /home/czokolada/ -f results.txt"
)]
BadExtensions(BadExtensionsArgs),
#[clap(name = "tester", about = "Small utility to test supported speed of ", after_help = "EXAMPLE:\n czkawka tester")]
Tester,
}
#[derive(Debug, clap::Args)]
pub struct DuplicatesArgs {
#[clap(flatten)]
pub common_cli_items: CommonCliItems,
#[clap(
short,
long,
value_parser = parse_minimal_file_size,
default_value = "8192",
help = "Minimum size in bytes",
long_help = "Minimum size of checked files in bytes, assigning bigger value may speed up searching"
)]
pub minimal_file_size: u64,
#[clap(
short = 'i',
long,
value_parser = parse_maximal_file_size,
default_value = "18446744073709551615",
help = "Maximum size in bytes",
long_help = "Maximum size of checked files in bytes, assigning lower value may speed up searching"
)]
pub maximal_file_size: u64,
#[clap(
short = 'c',
long,
value_parser = parse_minimal_file_size,
default_value = "257144",
help = "Minimum cached file size in bytes",
long_help = "Minimum size of cached files in bytes, assigning bigger value may speed up the scan but loading the cache will be slower, assigning smaller value may slow down the scan and some files may need to be hashed again but loading the cache will be faster"
)]
pub minimal_cached_file_size: u64,
#[clap(
short,
long,
default_value = "HASH",
value_parser = parse_checking_method_duplicate,
help = "Search method (NAME, SIZE, HASH)",
long_help = "Methods to search files.\nNAME - Fast but but rarely usable,\nSIZE - Fast but not accurate, checking by the file's size,\nHASH - The slowest method, checking by the hash of the entire file"
)]
pub search_method: CheckingMethod,
#[clap(flatten)]
pub delete_method: DMethod,
#[clap(
short = 't',
long,
default_value = "BLAKE3",
value_parser = parse_hash_type,
help = "Hash type (BLAKE3, CRC32, XXH3)"
)]
pub hash_type: HashType,
#[clap(flatten)]
pub case_sensitive_name_comparison: CaseSensitiveNameComparison,
#[clap(flatten)]
pub allow_hard_links: AllowHardLinks,
#[clap(flatten)]
pub dry_run: DryRun,
}
#[derive(Debug, clap::Args)]
pub struct EmptyFoldersArgs {
#[clap(flatten)]
pub common_cli_items: CommonCliItems,
#[clap(short = 'D', long, help = "Delete found folders")]
pub delete_folders: bool,
}
#[derive(Debug, clap::Args)]
pub struct BiggestFilesArgs {
#[clap(flatten)]
pub common_cli_items: CommonCliItems,
#[clap(short, long, default_value = "50", help = "Number of files to be shown")]
pub number_of_files: usize,
#[clap(short = 'D', long, help = "Delete found files")]
pub delete_files: bool,
#[clap(short = 'J', long, help = "Finds the smallest files instead the biggest")]
pub smallest_mode: bool,
}
#[derive(Debug, clap::Args)]
pub struct EmptyFilesArgs {
#[clap(flatten)]
pub common_cli_items: CommonCliItems,
#[clap(short = 'D', long, help = "Delete found files")]
pub delete_files: bool,
}
#[derive(Debug, clap::Args)]
pub struct TemporaryArgs {
#[clap(flatten)]
pub common_cli_items: CommonCliItems,
#[clap(short = 'D', long, help = "Delete found files")]
pub delete_files: bool,
}
#[derive(Debug, clap::Args)]
pub struct SimilarImagesArgs {
#[clap(flatten)]
pub common_cli_items: CommonCliItems,
#[clap(
short,
long,
value_parser = parse_minimal_file_size,
default_value = "16384",
help = "Minimum size in bytes",
long_help = "Minimum size of checked files in bytes, assigning bigger value may speed up searching"
)]
pub minimal_file_size: u64,
#[clap(
short = 'i',
long,
value_parser = parse_minimal_file_size,
default_value = "18446744073709551615",
help = "Maximum size in bytes",
long_help = "Maximum size of checked files in bytes, assigning lower value may speed up searching"
)]
pub maximal_file_size: u64,
#[clap(
short,
long,
default_value = "High",
value_parser = parse_similar_images_similarity,
help = "Similairty level (Minimal, VerySmall, Small, Medium, High, VeryHigh, Original)",
long_help = "Methods to choose similarity level of images which will be considered as duplicated."
)]
pub similarity_preset: SimilarityPreset,
#[clap(flatten)]
pub delete_method: DMethod,
#[clap(flatten)]
pub allow_hard_links: AllowHardLinks,
#[clap(flatten)]
pub dry_run: DryRun,
#[clap(
short = 'g',
long,
default_value = "Gradient",
value_parser = parse_similar_hash_algorithm,
help = "Hash algorithm (allowed: Mean, Gradient, Blockhash, VertGradient, DoubleGradient)"
)]
pub hash_alg: HashAlg,
#[clap(
short = 'z',
long,
default_value = "Nearest",
value_parser = parse_similar_image_filter,
help = "Hash algorithm (allowed: Lanczos3, Nearest, Triangle, Faussian, Catmullrom)"
)]
pub image_filter: FilterType,
#[clap(
short = 'c',
long,
default_value = "16",
value_parser = parse_image_hash_size,
help = "Hash size (allowed: 8, 16, 32, 64)"
)]
pub hash_size: u8,
}
#[derive(Debug, clap::Args)]
pub struct SameMusicArgs {
#[clap(flatten)]
pub common_cli_items: CommonCliItems,
#[clap(flatten)]
pub delete_method: DMethod,
#[clap(flatten)]
pub dry_run: DryRun,
#[clap(
short = 'z',
long,
default_value = "track_title,track_artist",
value_parser = parse_music_duplicate_type,
help = "Search method (track_title,track_artist,year,bitrate,genre,length))",
long_help = "Sets which rows must be equal to set this files as duplicates(may be mixed, but must be divided by commas)."
)]
pub music_similarity: MusicSimilarity,
#[clap(
short,
long,
default_value = "TAGS",
value_parser = parse_checking_method_same_music,
help = "Search method (CONTENT, TAGS)",
long_help = "Methods to search files.\nCONTENT - finds similar audio files by content, TAGS - finds similar images by tags, needs to set"
)]
pub search_method: CheckingMethod,
#[clap(
short,
long,
value_parser = parse_minimal_file_size,
default_value = "8192",
help = "Minimum size in bytes",
long_help = "Minimum size of checked files in bytes, assigning bigger value may speed up searching"
)]
pub minimal_file_size: u64,
#[clap(
short = 'i',
long,
value_parser = parse_maximal_file_size,
default_value = "18446744073709551615",
help = "Maximum size in bytes",
long_help = "Maximum size of checked files in bytes, assigning lower value may speed up searching"
)]
pub maximal_file_size: u64,
#[clap(
short = 'l',
long,
value_parser = parse_minimum_segment_duration,
default_value = "10.0",
help = "Maximum size in bytes",
long_help = "Minimum segment duration, smaller value will finds also shorter similar segments, which may increase false positives number"
)]
pub minimum_segment_duration: f32,
#[clap(
short = 'd',
long,
value_parser = parse_maximum_difference,
default_value = "2.0",
help = "Maximum difference between segments",
long_help = "Maximum difference between segments, 0.0 will find only identical segments, 10.0 will find also segments which are almost not similar at all"
)]
pub maximum_difference: f64,
}
fn parse_maximum_difference(src: &str) -> Result<f64, String> {
match src.parse::<f64>() {
Ok(maximum_difference) => {
if maximum_difference <= 0.0 {
Err("Maximum difference must be bigger than 0".to_string())
} else if maximum_difference >= 10.0 {
Err("Maximum difference must be smaller than 10.0".to_string())
} else {
Ok(maximum_difference)
}
}
Err(e) => Err(e.to_string()),
}
}
fn parse_minimum_segment_duration(src: &str) -> Result<f32, String> {
match src.parse::<f32>() {
Ok(minimum_segment_duration) => {
if minimum_segment_duration <= 0.0 {
Err("Minimum segment duration must be bigger than 0".to_string())
} else if minimum_segment_duration >= 3600.0 {
Err("Minimum segment duration must be smaller than 3600(greater values not have much sense)".to_string())
} else {
Ok(minimum_segment_duration)
}
}
Err(e) => Err(e.to_string()),
}
}
#[derive(Debug, clap::Args)]
pub struct InvalidSymlinksArgs {
#[clap(flatten)]
pub common_cli_items: CommonCliItems,
#[clap(short = 'D', long, help = "Delete found files")]
pub delete_files: bool,
}
#[derive(Debug, clap::Args)]
pub struct BrokenFilesArgs {
#[clap(flatten)]
pub common_cli_items: CommonCliItems,
#[clap(short = 'D', long, help = "Delete found files")]
pub delete_files: bool,
}
#[derive(Debug, clap::Args)]
pub struct SimilarVideosArgs {
#[clap(flatten)]
pub common_cli_items: CommonCliItems,
#[clap(flatten)]
pub delete_method: DMethod,
#[clap(flatten)]
pub allow_hard_links: AllowHardLinks,
#[clap(flatten)]
pub dry_run: DryRun,
#[clap(
short,
long,
value_parser = parse_minimal_file_size,
default_value = "8192",
help = "Minimum size in bytes",
long_help = "Minimum size of checked files in bytes, assigning bigger value may speed up searching"
)]
pub minimal_file_size: u64,
#[clap(
short = 'i',
long,
value_parser = parse_maximal_file_size,
default_value = "18446744073709551615",
help = "Maximum size in bytes",
long_help = "Maximum size of checked files in bytes, assigning lower value may speed up searching"
)]
pub maximal_file_size: u64,
#[clap(
short = 't',
long,
value_parser = parse_tolerance,
default_value = "10",
help = "Video maximum difference (allowed values <0,20>)",
long_help = "Maximum difference between video frames, bigger value means that videos can looks more and more different (allowed values <0,20>)"
)]
pub tolerance: i32,
}
#[derive(Debug, clap::Args)]
pub struct BadExtensionsArgs {
#[clap(flatten)]
pub common_cli_items: CommonCliItems,
}
#[derive(Debug, clap::Args)]
pub struct CommonCliItems {
#[clap(short = 'T', long, default_value = "0", help = "Limits thread number, 0(default) will use all available threads")]
pub thread_number: usize,
#[clap(
short,
long,
parse(from_os_str),
required = true,
help = "Directorie(s) to search",
long_help = "List of directorie(s) which will be searched(absolute path)"
)]
pub directories: Vec<PathBuf>,
}
#[derive(Debug, StructOpt)]
pub struct ExcludedDirectories {
#[structopt(
#[clap(
short,
long,
parse(from_os_str),
help = "Excluded directorie(s)",
long_help = "List of directorie(s) which will be excluded from search(absolute path)"
)]
pub excluded_directories: Vec<PathBuf>,
}
#[derive(Debug, StructOpt)]
pub struct ExcludedItems {
#[structopt(
short = "E",
#[clap(
short = 'E',
long,
help = "Excluded item(s)",
long_help = "List of excluded item(s) which contains * wildcard(may be slow, so use -e where possible)"
)]
pub excluded_items: Vec<String>,
}
#[derive(Debug, StructOpt)]
pub struct AllowedExtensions {
#[structopt(
short = "x",
#[clap(
short = 'x',
long,
help = "Allowed file extension(s)",
long_help = "List of checked files with provided extension(s). There are also helpful macros which allow to easy use a typical extensions like:\nIMAGE(\"jpg,kra,gif,png,bmp,tiff,hdr,svg\"),\nTEXT(\"txt,doc,docx,odt,rtf\"),\nVIDEO(\"mp4,flv,mkv,webm,vob,ogv,gifv,avi,mov,wmv,mpg,m4v,m4p,mpeg,3gp\") or\nMUSIC(\"mp3,flac,ogg,tta,wma,webm\")\n "
)]
pub allowed_extensions: Vec<String>,
#[clap(short = 'P', long, help = "Excluded file extension(s)", long_help = "List of extensions, that will be removed from search.\n ")]
pub excluded_extensions: Vec<String>,
#[clap(flatten)]
pub file_to_save: FileToSave,
#[clap(flatten)]
pub json_compact_file_to_save: JsonCompactFileToSave,
#[clap(flatten)]
pub json_pretty_file_to_save: JsonPrettyFileToSave,
#[clap(short = 'R', long, help = "Prevents from recursive check of folders")]
pub not_recursive: bool,
#[cfg(target_family = "unix")]
#[clap(short = 'X', long, help = "Exclude files on other filesystems")]
pub exclude_other_filesystems: bool,
}
#[derive(Debug, StructOpt)]
pub struct NotRecursive {
#[structopt(short = "R", long, help = "Prevents from recursive check of folders")]
pub not_recursive: bool,
#[derive(Debug, clap::Args)]
pub struct DMethod {
#[clap(
short = 'D',
long,
default_value = "NONE",
value_parser = parse_delete_method,
help = "Delete method (AEN, AEO, ON, OO, HARD)",
long_help = "Methods to delete the files.\nAEN - All files except the newest,\nAEO - All files except the oldest,\nON - Only 1 file, the newest,\nOO - Only 1 file, the oldest\nHARD - create hard link\nNONE - not delete files"
)]
pub delete_method: DeleteMethod,
}
#[derive(Debug, StructOpt)]
#[derive(Debug, clap::Args)]
pub struct FileToSave {
#[structopt(short, long, value_name = "file-name", help = "Saves the results into the file")]
#[clap(short, long, value_name = "file-name", help = "Saves the results into the formatted txt file")]
pub file_to_save: Option<PathBuf>,
}
#[derive(Debug, StructOpt)]
#[derive(Debug, clap::Args)]
pub struct JsonCompactFileToSave {
#[clap(short = 'C', long, value_name = "json-file-name", help = "Saves the results into the compact json file")]
pub compact_file_to_save: Option<PathBuf>,
}
#[derive(Debug, clap::Args)]
pub struct JsonPrettyFileToSave {
#[clap(short, long, value_name = "pretty-json-file-name", help = "Saves the results into the pretty json file")]
pub pretty_file_to_save: Option<PathBuf>,
}
#[derive(Debug, clap::Args)]
pub struct AllowHardLinks {
#[structopt(short = "L", long, help = "Do not ignore hard links")]
#[clap(short = 'L', long, help = "Do not ignore hard links")]
pub allow_hard_links: bool,
}
#[derive(Debug, StructOpt)]
#[derive(Debug, clap::Args)]
pub struct CaseSensitiveNameComparison {
#[clap(short = 'l', long, help = "Use case sensitive name comparison")]
pub case_sensitive_name_comparison: bool,
}
#[derive(Debug, clap::Args)]
pub struct DryRun {
#[structopt(long, help = "Do nothing and print the operation that would happen.")]
pub dryrun: bool,
#[clap(long, help = "Do nothing and print the operation that would happen.")]
pub dry_run: bool,
}
impl FileToSave {
@ -296,6 +501,24 @@ impl FileToSave {
None
}
}
impl JsonCompactFileToSave {
pub fn file_name(&self) -> Option<&str> {
if let Some(file_name) = &self.compact_file_to_save {
return file_name.to_str();
}
None
}
}
impl JsonPrettyFileToSave {
pub fn file_name(&self) -> Option<&str> {
if let Some(file_name) = &self.pretty_file_to_save {
return file_name.to_str();
}
None
}
}
fn parse_hash_type(src: &str) -> Result<HashType, &'static str> {
match src.to_ascii_lowercase().as_str() {
@ -319,15 +542,24 @@ fn parse_tolerance(src: &str) -> Result<i32, &'static str> {
}
}
fn parse_checking_method(src: &str) -> Result<CheckingMethod, &'static str> {
fn parse_checking_method_duplicate(src: &str) -> Result<CheckingMethod, &'static str> {
match src.to_ascii_lowercase().as_str() {
"name" => Ok(CheckingMethod::Name),
"size" => Ok(CheckingMethod::Size),
"size_name" => Ok(CheckingMethod::SizeName),
"hash" => Ok(CheckingMethod::Hash),
_ => Err("Couldn't parse the search method (allowed: NAME, SIZE, HASH)"),
}
}
fn parse_checking_method_same_music(src: &str) -> Result<CheckingMethod, &'static str> {
match src.to_ascii_lowercase().as_str() {
"tags" => Ok(CheckingMethod::AudioTags),
"content" => Ok(CheckingMethod::AudioContent),
_ => Err("Couldn't parse the searc method (allowed: TAGS, CONTENT)"),
}
}
fn parse_delete_method(src: &str) -> Result<DeleteMethod, &'static str> {
match src.to_ascii_lowercase().as_str() {
"none" => Ok(DeleteMethod::None),
@ -408,47 +640,48 @@ fn parse_image_hash_size(src: &str) -> Result<u8, String> {
}
fn parse_music_duplicate_type(src: &str) -> Result<MusicSimilarity, String> {
if src.is_empty() {
if src.trim().is_empty() {
return Ok(MusicSimilarity::NONE);
}
let mut similarity: MusicSimilarity = MusicSimilarity::NONE;
let parts: Vec<&str> = src.split(',').collect();
let parts: Vec<String> = src.split(',').map(|e| e.to_lowercase().replace('_', "")).collect();
if parts.iter().any(|e| e.to_lowercase().contains("title") && !e.to_lowercase().contains("album")) {
similarity |= MusicSimilarity::TITLE;
if parts.contains(&"tracktitle".into()) {
similarity |= MusicSimilarity::TRACK_TITLE;
}
if parts.iter().any(|e| e.to_lowercase().contains("artist") && !e.to_lowercase().contains("album")) {
similarity |= MusicSimilarity::ARTIST;
if parts.contains(&"trackartist".into()) {
similarity |= MusicSimilarity::TRACK_ARTIST;
}
if parts.iter().any(|e| e.to_lowercase().contains("title") && e.to_lowercase().contains("album")) {
similarity |= MusicSimilarity::ALBUM_TITLE;
if parts.contains(&"year".into()) {
similarity |= MusicSimilarity::YEAR;
}
if parts.iter().any(|e| e.to_lowercase().contains("artist") && e.to_lowercase().contains("album")) {
similarity |= MusicSimilarity::ALBUM_ARTIST;
if parts.contains(&"bitrate".into()) {
similarity |= MusicSimilarity::BITRATE;
}
if parts.iter().any(|e| e.to_lowercase().contains("year")) {
similarity |= MusicSimilarity::YEAR;
if parts.contains(&"genre".into()) {
similarity |= MusicSimilarity::GENRE;
}
if parts.contains(&"length".into()) {
similarity |= MusicSimilarity::LENGTH;
}
if similarity == MusicSimilarity::NONE {
return Err("Couldn't parse the music search method (allowed: title,artist,album_title,album_artist,year)".to_string());
return Err("Couldn't parse the music search method (allowed: track_title,track_artist,year,bitrate,genre,length)".to_string());
}
Ok(similarity)
}
static HELP_MESSAGE: &str = "Prints help information (--help will give more information)";
const HELP_TEMPLATE: &str = r#"
{bin} {version}
USAGE:
{usage} [SCFLAGS] [SCOPTIONS]
FLAGS:
{flags}
OPTIONS:
{options}
SUBCOMMANDS:
{subcommands}
@ -464,4 +697,5 @@ EXAMPLES:
{bin} image -d /home/rafal -e /home/rafal/Pulpit -f results.txt
{bin} music -d /home/rafal -e /home/rafal/Pulpit -z "artist,year, ARTISTALBUM, ALBUM___tiTlE" -f results.txt
{bin} symlinks -d /home/kicikici/ /home/szczek -e /home/kicikici/jestempsem -x jpg -f results.txt
{bin} broken -d /home/mikrut/ -e /home/mikrut/trakt -f results.txt"#;
{bin} broken -d /home/mikrut/ -e /home/mikrut/trakt -f results.txt
{bin} extnp -d /home/mikrut/ -e /home/mikrut/trakt -f results.txt"#;

@ -1,393 +1,343 @@
use std::process;
#![allow(clippy::needless_late_init)]
use structopt::StructOpt;
use std::thread;
use clap::Parser;
use crossbeam_channel::{bounded, unbounded, Receiver, Sender};
use log::error;
use commands::Commands;
#[allow(unused_imports)] // It is used in release for print_results().
use czkawka_core::bad_extensions::BadExtensions;
use czkawka_core::big_file::{BigFile, SearchMode};
use czkawka_core::broken_files::BrokenFiles;
use czkawka_core::common::{print_version_mode, set_number_of_threads, setup_logger, DEFAULT_THREAD_SIZE};
use czkawka_core::common_dir_traversal::ProgressData;
use czkawka_core::common_tool::{CommonData, DeleteMethod};
#[allow(unused_imports)] // It is used in release for print_results_to_output().
use czkawka_core::common_traits::*;
use czkawka_core::similar_images::test_image_conversion_speed;
use czkawka_core::{
big_file::{self, BigFile},
broken_files::{self, BrokenFiles},
duplicate::DuplicateFinder,
empty_files::{self, EmptyFiles},
empty_folder::EmptyFolder,
invalid_symlinks,
invalid_symlinks::InvalidSymlinks,
same_music::SameMusic,
similar_images::{return_similarity_from_similarity_preset, SimilarImages},
similar_videos::SimilarVideos,
temporary::{self, Temporary},
use czkawka_core::duplicate::DuplicateFinder;
use czkawka_core::empty_files::EmptyFiles;
use czkawka_core::empty_folder::EmptyFolder;
use czkawka_core::invalid_symlinks::InvalidSymlinks;
use czkawka_core::same_music::SameMusic;
use czkawka_core::similar_images::{return_similarity_from_similarity_preset, test_image_conversion_speed, SimilarImages};
use czkawka_core::similar_videos::SimilarVideos;
use czkawka_core::temporary::Temporary;
use crate::commands::{
Args, BadExtensionsArgs, BiggestFilesArgs, BrokenFilesArgs, CommonCliItems, DuplicatesArgs, EmptyFilesArgs, EmptyFoldersArgs, InvalidSymlinksArgs, SameMusicArgs,
SimilarImagesArgs, SimilarVideosArgs, TemporaryArgs,
};
use crate::progress::connect_progress;
mod commands;
mod progress;
fn main() {
let command = Commands::from_args();
#[cfg(debug_assertions)]
println!("{:?}", command);
match command {
Commands::Duplicates {
directories,
excluded_directories,
excluded_items,
minimal_file_size,
maximal_file_size,
minimal_cached_file_size,
allowed_extensions,
search_method,
delete_method,
hash_type,
file_to_save,
not_recursive,
allow_hard_links,
dryrun,
} => {
let mut df = DuplicateFinder::new();
df.set_included_directory(directories.directories);
df.set_excluded_directory(excluded_directories.excluded_directories);
df.set_excluded_items(excluded_items.excluded_items);
df.set_minimal_file_size(minimal_file_size);
df.set_maximal_file_size(maximal_file_size);
df.set_minimal_cache_file_size(minimal_cached_file_size);
df.set_allowed_extensions(allowed_extensions.allowed_extensions.join(","));
df.set_check_method(search_method);
df.set_delete_method(delete_method);
df.set_hash_type(hash_type);
df.set_recursive_search(!not_recursive.not_recursive);
df.set_ignore_hard_links(!allow_hard_links.allow_hard_links);
df.set_dryrun(dryrun.dryrun);
df.find_duplicates(None, None);
if let Some(file_name) = file_to_save.file_name() {
if !df.save_results_to_file(file_name) {
df.get_text_messages().print_messages();
process::exit(1);
}
}
#[cfg(not(debug_assertions))] // This will show too much probably unnecessary data to debug, comment line only if needed
df.print_results();
df.get_text_messages().print_messages();
}
Commands::EmptyFolders {
directories,
delete_folders,
file_to_save,
excluded_directories,
excluded_items,
} => {
let mut ef = EmptyFolder::new();
ef.set_included_directory(directories.directories);
ef.set_excluded_directory(excluded_directories.excluded_directories);
ef.set_excluded_items(excluded_items.excluded_items);
ef.set_delete_folder(delete_folders);
ef.find_empty_folders(None, None);
if let Some(file_name) = file_to_save.file_name() {
if !ef.save_results_to_file(file_name) {
ef.get_text_messages().print_messages();
process::exit(1);
}
}
#[cfg(not(debug_assertions))] // This will show too much probably unnecessary data to debug, comment line only if needed
ef.print_results();
ef.get_text_messages().print_messages();
}
Commands::BiggestFiles {
directories,
excluded_directories,
excluded_items,
allowed_extensions,
number_of_files,
file_to_save,
not_recursive,
delete_files,
} => {
let mut bf = BigFile::new();
bf.set_included_directory(directories.directories);
bf.set_excluded_directory(excluded_directories.excluded_directories);
bf.set_excluded_items(excluded_items.excluded_items);
bf.set_allowed_extensions(allowed_extensions.allowed_extensions.join(","));
bf.set_number_of_files_to_check(number_of_files);
bf.set_recursive_search(!not_recursive.not_recursive);
if delete_files {
bf.set_delete_method(big_file::DeleteMethod::Delete);
}
bf.find_big_files(None, None);
if let Some(file_name) = file_to_save.file_name() {
if !bf.save_results_to_file(file_name) {
bf.get_text_messages().print_messages();
process::exit(1);
}
}
#[cfg(not(debug_assertions))] // This will show too much probably unnecessary data to debug, comment line only if needed
bf.print_results();
bf.get_text_messages().print_messages();
}
Commands::EmptyFiles {
directories,
excluded_directories,
excluded_items,
allowed_extensions,
delete_files,
file_to_save,
not_recursive,
} => {
let mut ef = EmptyFiles::new();
ef.set_included_directory(directories.directories);
ef.set_excluded_directory(excluded_directories.excluded_directories);
ef.set_excluded_items(excluded_items.excluded_items);
ef.set_allowed_extensions(allowed_extensions.allowed_extensions.join(","));
ef.set_recursive_search(!not_recursive.not_recursive);
if delete_files {
ef.set_delete_method(empty_files::DeleteMethod::Delete);
}
ef.find_empty_files(None, None);
if let Some(file_name) = file_to_save.file_name() {
if !ef.save_results_to_file(file_name) {
ef.get_text_messages().print_messages();
process::exit(1);
}
}
#[cfg(not(debug_assertions))] // This will show too much probably unnecessary data to debug, comment line only if needed
ef.print_results();
ef.get_text_messages().print_messages();
}
Commands::Temporary {
directories,
excluded_directories,
excluded_items,
delete_files,
file_to_save,
not_recursive,
} => {
let mut tf = Temporary::new();
tf.set_included_directory(directories.directories);
tf.set_excluded_directory(excluded_directories.excluded_directories);
tf.set_excluded_items(excluded_items.excluded_items);
tf.set_recursive_search(!not_recursive.not_recursive);
if delete_files {
tf.set_delete_method(temporary::DeleteMethod::Delete);
}
tf.find_temporary_files(None, None);
if let Some(file_name) = file_to_save.file_name() {
if !tf.save_results_to_file(file_name) {
tf.get_text_messages().print_messages();
process::exit(1);
}
}
#[cfg(not(debug_assertions))] // This will show too much probably unnecessary data to debug, comment line only if needed
tf.print_results();
tf.get_text_messages().print_messages();
}
Commands::SimilarImages {
directories,
excluded_directories,
excluded_items,
file_to_save,
minimal_file_size,
maximal_file_size,
similarity_preset,
not_recursive,
hash_alg,
image_filter,
hash_size,
} => {
let mut sf = SimilarImages::new();
sf.set_included_directory(directories.directories);
sf.set_excluded_directory(excluded_directories.excluded_directories);
sf.set_excluded_items(excluded_items.excluded_items);
sf.set_minimal_file_size(minimal_file_size);
sf.set_maximal_file_size(maximal_file_size);
sf.set_recursive_search(!not_recursive.not_recursive);
sf.set_image_filter(image_filter);
sf.set_hash_alg(hash_alg);
sf.set_hash_size(hash_size);
sf.set_similarity(return_similarity_from_similarity_preset(&similarity_preset, hash_size));
sf.find_similar_images(None, None);
if let Some(file_name) = file_to_save.file_name() {
if !sf.save_results_to_file(file_name) {
sf.get_text_messages().print_messages();
process::exit(1);
}
}
#[cfg(not(debug_assertions))] // This will show too much probably unnecessary data to debug, comment line only if needed
sf.print_results();
sf.get_text_messages().print_messages();
}
Commands::SameMusic {
directories,
excluded_directories,
excluded_items,
// delete_files,
file_to_save,
not_recursive,
minimal_file_size,
maximal_file_size,
music_similarity,
} => {
let mut mf = SameMusic::new();
mf.set_included_directory(directories.directories);
mf.set_excluded_directory(excluded_directories.excluded_directories);
mf.set_excluded_items(excluded_items.excluded_items);
mf.set_minimal_file_size(minimal_file_size);
mf.set_maximal_file_size(maximal_file_size);
mf.set_recursive_search(!not_recursive.not_recursive);
mf.set_music_similarity(music_similarity);
// if delete_files {
// // TODO mf.set_delete_method(same_music::DeleteMethod::Delete);
// }
mf.find_same_music(None, None);
if let Some(file_name) = file_to_save.file_name() {
if !mf.save_results_to_file(file_name) {
mf.get_text_messages().print_messages();
process::exit(1);
}
}
#[cfg(not(debug_assertions))] // This will show too much probably unnecessary data to debug, comment line only if needed
mf.print_results();
mf.get_text_messages().print_messages();
}
Commands::InvalidSymlinks {
directories,
excluded_directories,
excluded_items,
allowed_extensions,
file_to_save,
not_recursive,
delete_files,
} => {
let mut ifs = InvalidSymlinks::new();
ifs.set_included_directory(directories.directories);
ifs.set_excluded_directory(excluded_directories.excluded_directories);
ifs.set_excluded_items(excluded_items.excluded_items);
ifs.set_allowed_extensions(allowed_extensions.allowed_extensions.join(","));
ifs.set_recursive_search(!not_recursive.not_recursive);
if delete_files {
ifs.set_delete_method(invalid_symlinks::DeleteMethod::Delete);
}
ifs.find_invalid_links(None, None);
if let Some(file_name) = file_to_save.file_name() {
if !ifs.save_results_to_file(file_name) {
ifs.get_text_messages().print_messages();
process::exit(1);
}
}
#[cfg(not(debug_assertions))] // This will show too much probably unnecessary data to debug, comment line only if needed
ifs.print_results();
ifs.get_text_messages().print_messages();
let command = Args::parse().command;
setup_logger(true);
print_version_mode();
if cfg!(debug_assertions) {
println!("{command:?}");
}
let (progress_sender, progress_receiver): (Sender<ProgressData>, Receiver<ProgressData>) = unbounded();
let (stop_sender, stop_receiver): (Sender<()>, Receiver<()>) = bounded(1);
let calculate_thread = thread::Builder::new().stack_size(DEFAULT_THREAD_SIZE).spawn(move || match command {
Commands::Duplicates(duplicates_args) => duplicates(duplicates_args, &stop_receiver, &progress_sender),
Commands::EmptyFolders(empty_folders_args) => empty_folders(empty_folders_args, &stop_receiver, &progress_sender),
Commands::BiggestFiles(biggest_files_args) => biggest_files(biggest_files_args, &stop_receiver, &progress_sender),
Commands::EmptyFiles(empty_files_args) => empty_files(empty_files_args, &stop_receiver, &progress_sender),
Commands::Temporary(temporary_args) => temporary(temporary_args, &stop_receiver, &progress_sender),
Commands::SimilarImages(similar_images_args) => similar_images(similar_images_args, &stop_receiver, &progress_sender),
Commands::SameMusic(same_music_args) => same_music(same_music_args, &stop_receiver, &progress_sender),
Commands::InvalidSymlinks(invalid_symlinks_args) => invalid_symlinks(invalid_symlinks_args, &stop_receiver, &progress_sender),
Commands::BrokenFiles(broken_files_args) => broken_files(broken_files_args, &stop_receiver, &progress_sender),
Commands::SimilarVideos(similar_videos_args) => similar_videos(similar_videos_args, &stop_receiver, &progress_sender),
Commands::BadExtensions(bad_extensions_args) => bad_extensions(bad_extensions_args, &stop_receiver, &progress_sender),
Commands::Tester {} => {
test_image_conversion_speed();
}
Commands::BrokenFiles {
directories,
excluded_directories,
excluded_items,
allowed_extensions,
delete_files,
file_to_save,
not_recursive,
} => {
let mut br = BrokenFiles::new();
br.set_included_directory(directories.directories);
br.set_excluded_directory(excluded_directories.excluded_directories);
br.set_excluded_items(excluded_items.excluded_items);
br.set_allowed_extensions(allowed_extensions.allowed_extensions.join(","));
br.set_recursive_search(!not_recursive.not_recursive);
if delete_files {
br.set_delete_method(broken_files::DeleteMethod::Delete);
}
br.find_broken_files(None, None);
if let Some(file_name) = file_to_save.file_name() {
if !br.save_results_to_file(file_name) {
br.get_text_messages().print_messages();
process::exit(1);
}
}
#[cfg(not(debug_assertions))] // This will show too much probably unnecessary data to debug, comment line only if needed
br.print_results();
br.get_text_messages().print_messages();
});
ctrlc::set_handler(move || {
println!("Get Sender");
stop_sender.send(()).expect("Could not send signal on channel.");
})
.expect("Error setting Ctrl-C handler");
connect_progress(&progress_receiver);
calculate_thread.unwrap().join().unwrap();
}
fn duplicates(duplicates: DuplicatesArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
let DuplicatesArgs {
common_cli_items,
minimal_file_size,
maximal_file_size,
minimal_cached_file_size,
search_method,
delete_method,
hash_type,
allow_hard_links,
dry_run,
case_sensitive_name_comparison,
} = duplicates;
let mut item = DuplicateFinder::new();
set_common_settings(&mut item, &common_cli_items);
item.set_minimal_file_size(minimal_file_size);
item.set_maximal_file_size(maximal_file_size);
item.set_minimal_cache_file_size(minimal_cached_file_size);
item.set_check_method(search_method);
item.set_delete_method(delete_method.delete_method);
item.set_hash_type(hash_type);
item.set_ignore_hard_links(!allow_hard_links.allow_hard_links);
item.set_dry_run(dry_run.dry_run);
item.set_case_sensitive_name_comparison(case_sensitive_name_comparison.case_sensitive_name_comparison);
item.find_duplicates(Some(stop_receiver), Some(progress_sender));
save_and_print_results(&mut item, &common_cli_items);
}
fn empty_folders(empty_folders: EmptyFoldersArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
let EmptyFoldersArgs { common_cli_items, delete_folders } = empty_folders;
let mut item = EmptyFolder::new();
set_common_settings(&mut item, &common_cli_items);
if delete_folders {
item.set_delete_method(DeleteMethod::Delete);
}
item.find_empty_folders(Some(stop_receiver), Some(progress_sender));
save_and_print_results(&mut item, &common_cli_items);
}
fn biggest_files(biggest_files: BiggestFilesArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
let BiggestFilesArgs {
common_cli_items,
number_of_files,
delete_files,
smallest_mode,
} = biggest_files;
let mut item = BigFile::new();
set_common_settings(&mut item, &common_cli_items);
item.set_number_of_files_to_check(number_of_files);
if delete_files {
item.set_delete_method(DeleteMethod::Delete);
}
if smallest_mode {
item.set_search_mode(SearchMode::SmallestFiles);
}
item.find_big_files(Some(stop_receiver), Some(progress_sender));
save_and_print_results(&mut item, &common_cli_items);
}
fn empty_files(empty_files: EmptyFilesArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
let EmptyFilesArgs { common_cli_items, delete_files } = empty_files;
let mut item = EmptyFiles::new();
set_common_settings(&mut item, &common_cli_items);
if delete_files {
item.set_delete_method(DeleteMethod::Delete);
}
item.find_empty_files(Some(stop_receiver), Some(progress_sender));
save_and_print_results(&mut item, &common_cli_items);
}
fn temporary(temporary: TemporaryArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
let TemporaryArgs { common_cli_items, delete_files } = temporary;
let mut item = Temporary::new();
set_common_settings(&mut item, &common_cli_items);
if delete_files {
item.set_delete_method(DeleteMethod::Delete);
}
item.find_temporary_files(Some(stop_receiver), Some(progress_sender));
save_and_print_results(&mut item, &common_cli_items);
}
fn similar_images(similar_images: SimilarImagesArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
let SimilarImagesArgs {
common_cli_items,
minimal_file_size,
maximal_file_size,
similarity_preset,
hash_alg,
image_filter,
hash_size,
delete_method,
dry_run,
allow_hard_links,
} = similar_images;
let mut item = SimilarImages::new();
set_common_settings(&mut item, &common_cli_items);
item.set_minimal_file_size(minimal_file_size);
item.set_maximal_file_size(maximal_file_size);
item.set_image_filter(image_filter);
item.set_hash_alg(hash_alg);
item.set_hash_size(hash_size);
item.set_delete_method(delete_method.delete_method);
item.set_dry_run(dry_run.dry_run);
item.set_similarity(return_similarity_from_similarity_preset(&similarity_preset, hash_size));
item.set_ignore_hard_links(!allow_hard_links.allow_hard_links);
item.find_similar_images(Some(stop_receiver), Some(progress_sender));
save_and_print_results(&mut item, &common_cli_items);
}
fn same_music(same_music: SameMusicArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
let SameMusicArgs {
common_cli_items,
delete_method,
minimal_file_size,
maximal_file_size,
music_similarity,
dry_run,
minimum_segment_duration,
maximum_difference,
search_method,
} = same_music;
let mut item = SameMusic::new();
set_common_settings(&mut item, &common_cli_items);
item.set_minimal_file_size(minimal_file_size);
item.set_maximal_file_size(maximal_file_size);
item.set_music_similarity(music_similarity);
item.set_delete_method(delete_method.delete_method);
item.set_dry_run(dry_run.dry_run);
item.set_minimum_segment_duration(minimum_segment_duration);
item.set_maximum_difference(maximum_difference);
item.set_check_type(search_method);
item.find_same_music(Some(stop_receiver), Some(progress_sender));
save_and_print_results(&mut item, &common_cli_items);
}
fn invalid_symlinks(invalid_symlinks: InvalidSymlinksArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
let InvalidSymlinksArgs { common_cli_items, delete_files } = invalid_symlinks;
let mut item = InvalidSymlinks::new();
set_common_settings(&mut item, &common_cli_items);
if delete_files {
item.set_delete_method(DeleteMethod::Delete);
}
item.find_invalid_links(Some(stop_receiver), Some(progress_sender));
save_and_print_results(&mut item, &common_cli_items);
}
fn broken_files(broken_files: BrokenFilesArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
let BrokenFilesArgs { common_cli_items, delete_files } = broken_files;
let mut item = BrokenFiles::new();
set_common_settings(&mut item, &common_cli_items);
if delete_files {
item.set_delete_method(DeleteMethod::Delete);
}
item.find_broken_files(Some(stop_receiver), Some(progress_sender));
save_and_print_results(&mut item, &common_cli_items);
}
fn similar_videos(similar_videos: SimilarVideosArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
let SimilarVideosArgs {
common_cli_items,
tolerance,
minimal_file_size,
maximal_file_size,
delete_method,
dry_run,
allow_hard_links,
} = similar_videos;
let mut item = SimilarVideos::new();
set_common_settings(&mut item, &common_cli_items);
item.set_minimal_file_size(minimal_file_size);
item.set_maximal_file_size(maximal_file_size);
item.set_tolerance(tolerance);
item.set_delete_method(delete_method.delete_method);
item.set_dry_run(dry_run.dry_run);
item.set_ignore_hard_links(!allow_hard_links.allow_hard_links);
item.find_similar_videos(Some(stop_receiver), Some(progress_sender));
save_and_print_results(&mut item, &common_cli_items);
}
fn bad_extensions(bad_extensions: BadExtensionsArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
let BadExtensionsArgs { common_cli_items } = bad_extensions;
let mut item = BadExtensions::new();
set_common_settings(&mut item, &common_cli_items);
item.find_bad_extensions_files(Some(stop_receiver), Some(progress_sender));
save_and_print_results(&mut item, &common_cli_items);
}
fn save_and_print_results<T: CommonData + PrintResults>(component: &mut T, common_cli_items: &CommonCliItems) {
if let Some(file_name) = common_cli_items.file_to_save.file_name() {
if let Err(e) = component.print_results_to_file(file_name) {
error!("Failed to save results to file {e}");
}
Commands::SimilarVideos {
directories,
excluded_directories,
excluded_items,
file_to_save,
not_recursive,
tolerance,
minimal_file_size,
maximal_file_size,
allowed_extensions,
} => {
let mut vr = SimilarVideos::new();
vr.set_included_directory(directories.directories);
vr.set_excluded_directory(excluded_directories.excluded_directories);
vr.set_excluded_items(excluded_items.excluded_items);
vr.set_allowed_extensions(allowed_extensions.allowed_extensions.join(","));
vr.set_recursive_search(!not_recursive.not_recursive);
vr.set_minimal_file_size(minimal_file_size);
vr.set_maximal_file_size(maximal_file_size);
vr.set_tolerance(tolerance);
vr.find_similar_videos(None, None);
if let Some(file_name) = file_to_save.file_name() {
if !vr.save_results_to_file(file_name) {
vr.get_text_messages().print_messages();
process::exit(1);
}
}
#[cfg(not(debug_assertions))] // This will show too much probably unnecessary data to debug, comment line only if needed
vr.print_results();
vr.get_text_messages().print_messages();
}
if let Some(file_name) = common_cli_items.json_compact_file_to_save.file_name() {
if let Err(e) = component.save_results_to_file_as_json(file_name, false) {
error!("Failed to save compact json results to file {e}");
}
Commands::Tester { test_image } => {
if test_image {
test_image_conversion_speed();
} else {
println!("At least one test should be choosen!");
}
}
if let Some(file_name) = common_cli_items.json_pretty_file_to_save.file_name() {
if let Err(e) = component.save_results_to_file_as_json(file_name, true) {
error!("Failed to save pretty json results to file {e}");
}
}
if !cfg!(debug_assertions) {
component.print_results_to_output();
}
component.get_text_messages().print_messages();
}
fn set_common_settings<T>(component: &mut T, common_cli_items: &CommonCliItems)
where
T: CommonData + PrintResults,
{
set_number_of_threads(common_cli_items.thread_number);
component.set_included_directory(common_cli_items.directories.clone());
component.set_excluded_directory(common_cli_items.excluded_directories.clone());
component.set_excluded_items(common_cli_items.excluded_items.clone());
component.set_recursive_search(!common_cli_items.not_recursive);
#[cfg(target_family = "unix")]
component.set_exclude_other_filesystems(common_cli_items.exclude_other_filesystems);
component.set_allowed_extensions(common_cli_items.allowed_extensions.clone().join(","));
}

@ -0,0 +1,93 @@
use std::time::Duration;
use crossbeam_channel::Receiver;
use indicatif::{ProgressBar, ProgressStyle};
use czkawka_core::common_dir_traversal::{CheckingMethod, ProgressData, ToolType};
pub fn connect_progress(progress_receiver: &Receiver<ProgressData>) {
let mut pb = ProgressBar::new(1);
let mut latest_id = None;
while let Ok(progress_data) = progress_receiver.recv() {
if latest_id != Some(progress_data.current_stage) {
pb.finish_and_clear();
if progress_data.current_stage == 0 {
pb = get_progress_bar_for_collect_files();
} else if check_if_saving_cache(&progress_data) || check_if_loading_cache(&progress_data) {
pb = get_progress_loading_saving_cache(check_if_loading_cache(&progress_data));
} else {
pb = get_progress_known_values(progress_data.entries_to_check, &get_progress_message(&progress_data));
}
latest_id = Some(progress_data.current_stage);
}
pb.set_position(progress_data.entries_checked as u64);
if progress_data.current_stage == 0 && progress_data.tool_type != ToolType::EmptyFolders {
pb.set_message(format!("Collecting files: {}", progress_data.entries_checked));
} else if progress_data.current_stage == 0 {
pb.set_message(format!("Collecting folders: {}", progress_data.entries_checked));
}
}
pb.finish();
}
pub fn get_progress_message(progress_data: &ProgressData) -> String {
match (progress_data.tool_type, progress_data.current_stage, progress_data.checking_method) {
(ToolType::SameMusic, 2, CheckingMethod::AudioTags) | (ToolType::SameMusic, 5, CheckingMethod::AudioContent) => "Reading tags",
(ToolType::SameMusic, 2, CheckingMethod::AudioContent) => "Calculating fingerprint",
(ToolType::SameMusic, 4, CheckingMethod::AudioTags) => "Comparing tags",
(ToolType::SameMusic, 4, CheckingMethod::AudioContent) => "Comparing fingerprint",
(ToolType::Duplicate, 2, CheckingMethod::Hash) => "Reading prehashes",
(ToolType::Duplicate, 5, CheckingMethod::Hash) => "Reading hashes",
(ToolType::SimilarImages, 1, _) => "Reading images",
(ToolType::SimilarImages, 2, _) => "Comparing image hashes",
(ToolType::SimilarVideos, 1, _) => "Reading similar values",
(ToolType::BrokenFiles, 1, _) => "Checking broken files",
(ToolType::BadExtensions, 1, _) => "Checking extensions of files",
_ => unreachable!(),
}
.to_string()
}
pub fn check_if_loading_cache(progress_data: &ProgressData) -> bool {
matches!(
(progress_data.tool_type, progress_data.current_stage),
(ToolType::SameMusic, 1) | (ToolType::Duplicate, 1 | 4)
)
}
pub fn check_if_saving_cache(progress_data: &ProgressData) -> bool {
matches!(
(progress_data.tool_type, progress_data.current_stage),
(ToolType::SameMusic, 3) | (ToolType::Duplicate, 3 | 6)
)
}
pub fn get_progress_bar_for_collect_files() -> ProgressBar {
let pb = ProgressBar::new_spinner();
pb.enable_steady_tick(Duration::from_millis(120));
pb.set_style(
ProgressStyle::with_template("{msg} {spinner:.blue}")
.unwrap()
.tick_strings(&["▹▹▹▹▹", "▸▹▹▹▹", "▹▸▹▹▹", "▹▹▸▹▹", "▹▹▹▸▹", "▹▹▹▹▸", "▪▪▪▪▪"]),
);
pb
}
pub fn get_progress_known_values(max_value: usize, msg: &str) -> ProgressBar {
let pb = ProgressBar::new(max_value as u64);
pb.set_style(ProgressStyle::with_template(&format!("{msg} [{{bar}}] {{pos}}/{{len}} ")).unwrap().progress_chars("=> "));
pb
}
pub fn get_progress_loading_saving_cache(loading: bool) -> ProgressBar {
let msg = if loading { "Loading cache" } else { "Saving cache" };
let pb = ProgressBar::new_spinner();
pb.enable_steady_tick(Duration::from_millis(120));
pb.set_style(
ProgressStyle::with_template(&format!("{msg} {{spinner:.blue}}"))
.unwrap()
.tick_strings(&["▹▹▹▹▹", "▸▹▹▹▹", "▹▸▹▹▹", "▹▹▸▹▹", "▹▹▹▸▹", "▹▹▹▹▸", "▪▪▪▪▪"]),
);
pb
}

@ -1,66 +1,91 @@
[package]
name = "czkawka_core"
version = "4.0.0"
version = "7.0.0"
authors = ["Rafał Mikrut <mikrutrafal@protonmail.com>"]
edition = "2018"
edition = "2021"
rust-version = "1.75.0"
description = "Core of Czkawka app"
license = "MIT"
homepage = "https://github.com/qarmin/czkawka"
repository = "https://github.com/qarmin/czkawka"
build = "build.rs"
[dependencies]
humansize = "1.1.1"
rayon = "1.5.1"
crossbeam-channel = "0.5.1"
humansize = "2.1"
rayon = "1.8"
crossbeam-channel = "0.5"
# For saving/loading config files to specific directories
directories-next = "2.0.0"
directories-next = "2.0"
# Needed by similar images
img_hash = "3.2.0"
bk-tree = "0.4.0"
image = "0.23.14"
hamming = "0.1.3"
image_hasher = "1.2"
bk-tree = "0.5"
image = { version = "0.24", default-features = false, features = ["gif", "jpeg", "ico", "png", "pnm", "tga", "tiff", "webp", "bmp", "hdr", "dxt", "dds", "farbfeld", "openexr", "qoi"] }
hamming = "0.1"
# Needed by same music
bitflags = "1.3.2"
audiotags = "0.2.7182"
# Futures - needed by async progress sender
futures = "0.3.19"
bitflags = "2.4"
lofty = "0.18"
# Needed by broken files
zip = "0.5.13"
rodio = { version = "0.14.0", optional = true }
zip = { version = "0.6", features = ["aes-crypto", "bzip2", "deflate", "time"], default-features = false }
audio_checker = "0.1"
pdf = "0.9"
# Needed by audio similarity feature
rusty-chromaprint = "0.2"
symphonia = { version = "0.5", features = ["all"] }
# Hashes for duplicate files
blake3 = "1.2.0"
crc32fast = "1.3.0"
xxhash-rust = { version = "0.8.2", features = ["xxh3"] }
blake3 = "1.5"
crc32fast = "1.4"
xxhash-rust = { version = "0.8", features = ["xxh3"] }
tempfile = "3.2.0"
tempfile = "3.10"
# Video Duplactes
vid_dup_finder_lib = "0.1.0"
ffmpeg_cmdline_utils = "0.1.0"
# Video Duplicates
vid_dup_finder_lib = "0.1"
ffmpeg_cmdline_utils = "0.1"
# Saving/Loading Cache
serde = "1.0.133"
bincode = "1.3.3"
serde_json = "1.0.74"
serde = "1.0"
bincode = "1.3"
serde_json = "1.0"
# Language
i18n-embed = { version = "0.13", features = ["fluent-system", "desktop-requester"] }
i18n-embed-fl = "0.6.1"
rust-embed = "6.3.0"
once_cell = "1.9.0"
i18n-embed = { version = "0.14", features = ["fluent-system", "desktop-requester"] }
i18n-embed-fl = "0.8"
rust-embed = { version = "8.2", features = ["debug-embed"] }
once_cell = "1.19"
# Raw image files
rawloader = "0.37.0"
imagepipe = "0.4.0"
rawloader = "0.37"
imagepipe = "0.5"
libraw-rs = { version = "0.0.4", optional = true }
# Checking for invalid extensions
mime_guess = "2.0"
infer = "0.15"
# Heif/Heic
libheif-rs = { version = "=0.18.0", optional = true } # Do not upgrade now, since Ubuntu 22.04 not works with newer version
libheif-sys = { version = "=1.14.2", optional = true } # 1.14.3 brake compilation on Ubuntu 22.04, so pin it to this version
anyhow = { version = "1.0" }
state = "0.6"
trash = "3.3"
os_info = { version = "3", default-features = false }
log = "0.4.20"
handsome_logger = "0.8"
fun_time = { version = "0.3", features = ["log"] }
[build-dependencies]
rustc_version = "0.4"
[features]
default = []
broken_audio = ["rodio"]
heif = ["dep:libheif-rs", "dep:libheif-sys"]
libraw = ["dep:libraw-rs"]

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020-2024 Rafał Mikrut
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

@ -0,0 +1,3 @@
# Czkawka Core
Core of Czkawka GUI/CLI and Krokiet projects.

@ -0,0 +1,18 @@
fn main() {
let rust_version = match rustc_version::version_meta() {
Ok(meta) => {
let rust_v = meta.semver.to_string();
let rust_date = meta.commit_date.unwrap_or_default();
format!("{rust_v} ({rust_date})")
}
Err(_) => "<unknown>".to_string(),
};
println!("cargo:rustc-env=RUST_VERSION_INTERNAL={rust_version}");
// Find if app is build with cranelift
if let Ok(codegen) = std::env::var("CARGO_PROFILE_RELEASE_CODEGEN_UNITS") {
if codegen == "1" {
println!("cargo:rustc-env=USING_CRANELIFT=1");
}
}
}

@ -0,0 +1 @@
../data/

@ -0,0 +1,29 @@
# Core
core_similarity_original = الأصل
core_similarity_very_high = عالية جدا
core_similarity_high = مرتفع
core_similarity_medium = متوسط
core_similarity_small = صغير
core_similarity_very_small = صغير جدا
core_similarity_minimal = الحد الأدنى
core_cannot_open_dir = لا يمكن فتح dir { $dir }، السبب { $reason }
core_cannot_read_entry_dir = لا يمكن قراءة الإدخال في dir { $dir }، السبب { $reason }
core_cannot_read_metadata_dir = لا يمكن قراءة البيانات الوصفية في dir { $dir }، السبب { $reason }
core_file_not_utf8_name = الملف { $name } ليس لديه اسم UTF-8 صالح (قد لا تظهر بعض الأحرف)
core_file_modified_before_epoch = يبدو أن الملف { $name } قد تم تعديله قبل يونكس Epoch
core_folder_modified_before_epoch = يبدو أن المجلد { $name } قد تم تعديله قبل يونكس Epoch
core_file_no_modification_date = غير قادر على الحصول على تاريخ التعديل من الملف { $name }، السبب { $reason }
core_folder_no_modification_date = غير قادر على الحصول على تاريخ التعديل من المجلد { $name }، السبب { $reason }
core_missing_no_chosen_included_directory = يجب توفير دليل واحد على الأقل
core_directory_wildcard_no_supported = الأدلة: البطاقات البرية في المسار غير مدعومة، تجاهل { $path }
core_directory_must_exists = الأدلة: يجب أن يكون مسار المجلد المتوفر موجودا، تجاهل { $path }
core_directory_must_be_directory = الأدلة: المسار المقدم يجب أن يشير إلى الدليل، تجاهل { $path }
core_included_directory_zero_valid_directories = خطأ في الدليل المضمن: لا يوجد حتى مسار واحد صحيح للإدراج المطلوب
core_excluded_directory_pointless_slash = الأدلة: استبعاد / لا معنى له، لأنه يعني أنه لن يتم مسح أي ملفات
core_directory_overlap = الأدلة: جميع الدلائل للبحث عن التداخل مع الدلائل المستبعدة
core_directory_unable_to_get_device_id = الأدلة: غير قادر على الحصول على معرف الجهاز من المجلد { $path }
core_ffmpeg_not_found = لا يمكن العثور على التثبيت الصحيح لFFmpeg
core_ffmpeg_not_found_windows = تأكد من أن ffmpeg.exe و ffprobe.exe متاحان في PATH أو يتم وضعهما مباشرة لنفس المجلد حيث التطبيق قابل للتنفيذ
core_ffmpeg_missing_in_snap = مقاطع فيديو مشابهة لا تعمل حاليا مع السعادة، إذا كنت تريد المساعدة في النظر - { $url }
core_saving_to_cache = تم الحفظ في الملف { $number } إدخالات ذاكرة التخزين المؤقت
core_loading_from_cache = تحميل من ذاكرة التخزين المؤقت { $number } إدخالات

@ -0,0 +1,29 @@
# Core
core_similarity_original = Оригинален
core_similarity_very_high = Много висок
core_similarity_high = Висок
core_similarity_medium = Среден
core_similarity_small = Малък
core_similarity_very_small = Много малък
core_similarity_minimal = Минимален
core_cannot_open_dir = Не може да се отвори папка { $dir }, причината е { $reason }
core_cannot_read_entry_dir = Не може да се прочете папка { $dir }, причината е { $reason }
core_cannot_read_metadata_dir = Не могат да се прочетат мета-данните в папка { $dir }, причината е { $reason }
core_file_not_utf8_name = Файлът { $name } няма валидно UTF-8 име (някои от символите може да не се визуализират)
core_file_modified_before_epoch = Файлът { $name } изглежда да е променен преди Unix Epoc
core_folder_modified_before_epoch = Папка { $name } изглежда да е променена преди Unix Epoc
core_file_no_modification_date = Невъзможно е да се получи променената дата от файл { $name }, причината е { $reason }
core_folder_no_modification_date = Невъзможно е да се извлече променената дата от файл { $name }, причината е { $reason }
core_missing_no_chosen_included_directory = Трябва да се предостави поне една директория
core_directory_wildcard_no_supported = Директории: Не се поддържат заместващи знаци в пътя, игнорирайки { $path }
core_directory_must_exists = Директории: Предоставеният път до папката трябва да съществува, като се игнорира { $path }
core_directory_must_be_directory = Директории: Предоставеният път трябва да сочи към директорията, като не се взема под внимание { $path }
core_included_directory_zero_valid_directories = Включена директория ГРЕШКА: Не е намерен дори един правилен път към включената директория, която се изисква
core_excluded_directory_pointless_slash = Директории: Изключването на / е безсмислено, защото означава, че няма да бъдат сканирани никакви файлове
core_directory_overlap = Директории: Всички директории за търсене се припокриват с изключените директории
core_directory_unable_to_get_device_id = Директории: Невъзможно е да се получи идентификатор на устройството от папка { $path }
core_ffmpeg_not_found = Не мога да намеря правилната инсталация на FFmpeg
core_ffmpeg_not_found_windows = Уверете се, че ffmpeg.exe и ffprobe.exe са налични в PATH или са поставени директно в същата папка, където е изпълнимото приложение
core_ffmpeg_missing_in_snap = Подобни видеоклипове не работят в момента със snap, ако искате помощ, погледнете - { $url }
core_saving_to_cache = Запазени във файл {$number } записи в кеша
core_loading_from_cache = Заредени от кеш { $number } вписвания

@ -1,25 +1,29 @@
# Core
core_similarity_original = Originál
core_similarity_very_high = Velmi vysoká
core_similarity_high = Vysoká
core_similarity_medium = Střední
core_similarity_small = Malá
core_similarity_very_small = Velmi malá
core_similarity_minimal = Minimální
core_cannot_open_dir = Nelze otevřít dir { $dir }, důvod { $reason }
core_cannot_read_entry_dir = Nelze číst záznam v adresáři { $dir }, důvod { $reason }
core_cannot_read_metadata_dir = Metadata nelze číst v adresáři { $dir }, důvod { $reason }
core_cannot_open_dir = Nelze otevřít adresář { $dir }, důvod { $reason }
core_cannot_read_entry_dir = Nelze načíst záznam v adresáři { $dir }, důvod { $reason }
core_cannot_read_metadata_dir = Nelze načíst metadata v adresáři { $dir }, důvod { $reason }
core_file_not_utf8_name = Soubor { $name } nemá platný název UTF-8 (některé znaky nemusí být zobrazeny)
core_file_modified_before_epoch = Soubor { $name } se zdá být před Unix Epoch upraven
core_folder_modified_before_epoch = Složka { $name } se zdá být upravena před Unixem Epoch
core_file_modified_before_epoch = Soubor { $name } se zdá být upraven před unixovým Epochem (1.1.1970)
core_folder_modified_before_epoch = Složka { $name } se zdá být upravena před unixovým Epochem (1.1.1970)
core_file_no_modification_date = Nelze získat datum úpravy ze souboru { $name }, důvod { $reason }
core_folder_no_modification_date = Nelze získat datum úpravy ze složky { $name }, důvod { $reason }
core_missing_no_chosen_included_directory = Musí být uveden alespoň jeden adresář
core_directory_wildcard_no_supported = Adresáře: Zástupné znaky v cestě nejsou podporovány, ignoruji { $path }
core_directory_relative_path = Adresáře: Zástupné znaky v cestě nejsou podporovány, ignoruji { $path }
core_directory_must_exists = Adresáře: Poskytnutá cesta ke složce musí skončit, ignoruji { $path }
core_directory_must_be_directory = Adresáře: Poskytnutá cesta musí směřovat do adresáře, ignoruje { $path }
core_directory_must_exists = Adresáře: Poskytnutá cesta ke složce musí existovat, ignoruji { $path }
core_directory_must_be_directory = Adresáře: Poskytnutá cesta musí směřovat do adresáře, ignoruji { $path }
core_included_directory_zero_valid_directories = CHYBA zahrnutí adresáře: Nenalezena ani jedna správná cesta k zahrnutí, která je vyžadována
core_excluded_directory_pointless_slash = Adresáře: Vyloučení / je bezúčelné, protože to znamená, že žádné soubory nebudou naskenovány
core_directory_overlap = Adresáře: Všechny adresáře pro vyhledávání se překrývají s vyloučením adresářů
core_directory_unable_to_get_device_id = Adresáře: Nelze získat ID zařízení ze složky { $path }
core_ffmpeg_not_found = Nelze najít správnou instalaci FFmpeg
core_ffmpeg_not_found_windows = Ujistěte se, že ffmpeg.exe a ffprobe.exe jsou k dispozici v PATH nebo jsou umístěny přímo do stejné složky, kde lze spustit aplikaci
core_ffmpeg_missing_in_snap = Podobná videa v současné době nefungují se snapem, pokud chcete nápovědu sledovat - { $url }
core_saving_to_cache = Uloženo do souboru { $number } položek mezipaměti
core_loading_from_cache = Načteno z { $number } položek keše

@ -1,25 +1,29 @@
# Core
core_similarity_original = Original
core_similarity_very_high = Sehr Hoch
core_similarity_high = Hoch
core_similarity_medium = Mittel
core_similarity_small = Klein
core_similarity_very_small = Sehr klein
core_similarity_minimal = Minimale
core_similarity_minimal = Minimal
core_cannot_open_dir = Verzeichnis { $dir } kann nicht geöffnet werden, Grund { $reason }
core_cannot_read_entry_dir = Kann Eintrag in Verzeichnis { $dir } nicht lesen, Grund { $reason }
core_cannot_read_metadata_dir = Metadaten können in Verzeichnis { $dir } nicht gelesen werden, Grund { $reason }
core_file_not_utf8_name = Datei { $name } hat keinen gültigen UTF-8-Namen (einige Zeichen dürfen nicht angezeigt werden)
core_file_modified_before_epoch = Datei { $name } scheint vor der Unix-Epoche geändert zu werden
core_folder_modified_before_epoch = Ordner { $name } scheint vor der Unix-Epoche geändert zu werden
core_file_not_utf8_name = Datei { $name } hat keinen gültigen UTF-8-Namen (einige Zeichen könnten nicht angezeigt werden)
core_file_modified_before_epoch = Datei { $name } scheint vor dieser Unix-Epoche geändert worden zu sein
core_folder_modified_before_epoch = Ordner { $name } scheint vor dieser Unix-Epoche geändert worden zu sein
core_file_no_modification_date = Konnte das Änderungsdatum von Datei { $name } nicht abrufen, Grund { $reason }
core_folder_no_modification_date = Konnte das Änderungsdatum aus dem Ordner { $name } nicht abrufen, Grund { $reason }
core_missing_no_chosen_included_directory = Mindestens ein Verzeichnis muss angegeben werden
core_directory_wildcard_no_supported = Verzeichnisse: Wildcards im Pfad werden nicht unterstützt, { $path } wird ignoriert
core_directory_relative_path = Verzeichnisse: Relativer Pfad wird nicht unterstützt, { $path } wird ignoriert
core_directory_must_exists = Verzeichnisse: Der angegebene Ordnerpfad muss beendet werden, { $path } wird ignoriert
core_directory_must_be_directory = Verzeichnisse: Der angegebene Pfad muss auf das Verzeichnis zeigen und { $path } ignorieren
core_included_directory_zero_valid_directories = Inklusive Verzeichnis-FEHLER: Nicht einmal einen korrekten Pfad zu inkludiert, der erforderlich ist
core_excluded_directory_pointless_slash = Verzeichnisse: Ausschließen / ist sinnlos, weil es bedeutet, dass keine Dateien gescannt werden
core_directory_overlap = Verzeichnisse: Alle Verzeichnisse zum Suchen von Überlappungen mit ausgeschlossenen Verzeichnissen
core_directory_must_exists = Verzeichnisse: Der angegebene Ordnerpfad muss existieren, { $path } wird ignoriert
core_directory_must_be_directory = Verzeichnisse: Der angegebene Pfad muss auf das Verzeichnis zeigen, { $path } wird ignoriert
core_included_directory_zero_valid_directories = Einbezogenes Verzeichnis-FEHLER: Kein korrekter Pfad gefunden, welcher einbezogen werden soll, was erforderlich ist
core_excluded_directory_pointless_slash = Verzeichnisse: / auszuschließen ist sinnlos, weil somit keine Dateien gescannt werden
core_directory_overlap = Verzeichnisse: Alle zu durchsuchende Verzeichnisse überlappen mit den ausgeschlossenen Verzeichnissen
core_directory_unable_to_get_device_id = Verzeichnisse: Geräte-ID kann nicht aus dem Ordner { $path } geholt werden
core_ffmpeg_not_found = Keine richtige Installation von FFmpeg gefunden
core_ffmpeg_missing_in_snap = Ähnliche Videos funktionieren derzeit nicht mit Snap, wenn du Hilfe möchtest - { $url }
core_ffmpeg_not_found_windows = Stellen Sie sicher, dass ffmpeg.exe und ffprobe.exe in PATH verfügbar sind oder direkt in den gleichen Ordner gelegt werden, in dem die App ausführbar ist
core_ffmpeg_missing_in_snap = Ähnliche Videos funktionieren derzeit nicht mit Snap, wenn du Hilfe möchtest, besuche - { $url }
core_saving_to_cache = { $number } Cache-Einträge in der Datei gespeichert
core_loading_from_cache = { $number } Einträge aus dem Cache geladen

@ -0,0 +1,29 @@
# Core
core_similarity_original = Αρχικό
core_similarity_very_high = Πολύ Υψηλή
core_similarity_high = Υψηλή
core_similarity_medium = Μεσαίο
core_similarity_small = Μικρό
core_similarity_very_small = Πολύ Μικρό
core_similarity_minimal = Ελάχιστα
core_cannot_open_dir = Αδυναμία ανοίγματος dir { $dir }, λόγος { $reason }
core_cannot_read_entry_dir = Αδυναμία ανάγνωσης καταχώρησης στον κατάλογο { $dir }, λόγος { $reason }
core_cannot_read_metadata_dir = Αδύνατη η ανάγνωση μεταδεδομένων στον κατάλογο { $dir }, λόγος { $reason }
core_file_not_utf8_name = Το αρχείο { $name } δεν έχει ένα έγκυρο όνομα UTF-8 (ορισμένοι χαρακτήρες μπορεί να μην εμφανίζονται)
core_file_modified_before_epoch = Το { $name } φαίνεται να τροποποιείται πριν το Unix Epoch
core_folder_modified_before_epoch = Ο φάκελος { $name } φαίνεται να τροποποιείται πριν το Unix Epoch
core_file_no_modification_date = Δεν είναι δυνατή η λήψη ημερομηνίας τροποποίησης από το αρχείο { $name }, λόγος { $reason }
core_folder_no_modification_date = Δεν είναι δυνατή η λήψη ημερομηνίας τροποποίησης από το φάκελο { $name }, λόγος { $reason }
core_missing_no_chosen_included_directory = Πρέπει να παρέχεται τουλάχιστον ένας κατάλογος
core_directory_wildcard_no_supported = Κατάλογοι: Δεν υποστηρίζονται μπαλαντέρ στο μονοπάτι, αγνοώντας { $path }
core_directory_must_exists = Κατάλογοι: Η παρεχόμενη διαδρομή φακέλου πρέπει να υπάρχει, αγνοώντας { $path }
core_directory_must_be_directory = Κατάλογοι: Παρέχεται διαδρομή πρέπει να δείχνει στον κατάλογο, αγνοώντας { $path }
core_included_directory_zero_valid_directories = Συμπεριλαμβανόμενος κατάλογος ΣΦΑΛΜΑ: Δεν βρέθηκε ούτε μια σωστή διαδρομή για να συμπεριληφθεί η οποία απαιτείται
core_excluded_directory_pointless_slash = Κατάλογοι: Εξαιρούνται / είναι άσκοπες, επειδή σημαίνει ότι δεν θα σαρωθούν αρχεία
core_directory_overlap = Κατάλογοι: Όλοι οι κατάλογοι για αναζήτηση επικαλύψεων με αποκλεισμένους καταλόγους
core_directory_unable_to_get_device_id = Κατάλογοι: Αδυναμία λήψης id συσκευής από το φάκελο { $path }
core_ffmpeg_not_found = Αδυναμία εύρεσης σωστής εγκατάστασης του FFmpeg
core_ffmpeg_not_found_windows = Να είστε βέβαιος ότι ffmpeg.exe και ffprobe.exe είναι διαθέσιμα σε PATH ή τίθενται απευθείας στον ίδιο φάκελο όπου είναι εκτελέσιμο app
core_ffmpeg_missing_in_snap = Παρόμοια βίντεο δεν λειτουργούν αυτή τη στιγμή με συμπληρωματικό πρόγραμμα, αν θέλετε να δείτε βοήθεια - { $url }
core_saving_to_cache = Αποθηκεύτηκε στο αρχείο καταχωρήσεις { $number } cache
core_loading_from_cache = Φορτώθηκε από καταχωρήσεις της λανθάνουσας μνήμης { $number }

@ -1,4 +1,5 @@
# Core
core_similarity_original = Original
core_similarity_very_high = Very High
core_similarity_high = High
core_similarity_medium = Medium
@ -17,15 +18,16 @@ core_folder_no_modification_date = Unable to get modification date from folder {
core_missing_no_chosen_included_directory = At least one directory must be provided
core_directory_wildcard_no_supported = Directories: Wildcards in path are not supported, ignoring { $path }
core_directory_relative_path = Directories: Relative path are not supported, ignoring { $path }
core_directory_must_exists = Directories: Provided folder path must exist, ignoring { $path }
core_directory_must_be_directory = Directories: Provided path must point at the directory, ignoring { $path }
core_included_directory_zero_valid_directories = Included Directory ERROR: Not found even one correct path to included which is required
core_excluded_directory_pointless_slash = Directories: Excluding / is pointless, because it means that no files will be scanned
core_directory_overlap = Directories: All directories to search overlaps with excluded directories
core_directory_unable_to_get_device_id = Directories: Unable to get device id from folder { $path }
core_ffmpeg_not_found = Cannot find proper installation of FFmpeg
core_ffmpeg_not_found_windows = Be sure that ffmpeg.exe and ffprobe.exe are available in PATH or are put directly to same folder where is app executable
core_ffmpeg_missing_in_snap = Similar Videos don't work currently with snap, if you want help look at - { $url }
core_saving_to_cache = Saved to file { $number } cache entries
core_loading_from_cache = Loaded from cache { $number } entries
core_loading_from_cache = Loaded from cache { $number } entries

@ -1,4 +1,5 @@
# Core
core_similarity_original = Original
core_similarity_very_high = Muy alta
core_similarity_high = Alta
core_similarity_medium = Medio
@ -15,11 +16,14 @@ core_file_no_modification_date = No se puede obtener la fecha de modificación d
core_folder_no_modification_date = No se puede obtener la fecha de modificación de la carpeta { $name }, razón { $reason }
core_missing_no_chosen_included_directory = Debe proporcionarse al menos un directorio
core_directory_wildcard_no_supported = Directorios: Los comodines en la ruta no son compatibles, ignorando { $path }
core_directory_relative_path = Directorios: No se admite la ruta relativa, ignorando { $path }
core_directory_must_exists = Directorios: La ruta de la carpeta debe salir, ignorando { $path }
core_directory_must_be_directory = Directorios: La ruta proporcionada debe apuntar al directorio, ignorando { $path }
core_included_directory_zero_valid_directories = ERROR del directorio incluido: No se ha encontrado ni una ruta correcta a incluida que es necesaria
core_excluded_directory_pointless_slash = Directorios: Excluyendo / es inútil, ya que no se analizarán archivos
core_directory_overlap = Directorios: Todos los directorios para buscar superposiciones con directorios excluidos
core_directory_unable_to_get_device_id = Directorios: No se puede obtener el id del dispositivo de la carpeta { $path }
core_ffmpeg_not_found = No se puede encontrar la instalación correcta de FFmpeg
core_ffmpeg_not_found_windows = Asegúrese de que ffmpeg.exe y ffprobe.exe están disponibles en PATH o se colocan directamente en la misma carpeta donde es ejecutable la aplicación
core_ffmpeg_missing_in_snap = Los Videos Similares no funcionan actualmente con el snap, si quieres ayuda mira - { $url }
core_saving_to_cache = Guardado en el archivo { $number } entradas de caché
core_loading_from_cache = Cargado desde { $number } entradas de caché

@ -1,25 +1,29 @@
# Core
core_similarity_original = Originale
core_similarity_very_high = Très haute
core_similarity_high = Haute
core_similarity_medium = Moyenne
core_similarity_small = Basse
core_similarity_very_small = Très basse
core_similarity_minimal = Minimale
core_cannot_open_dir = Impossible douvrir le répertoire { $dir }, raison: { $reason }
core_cannot_read_entry_dir = Impossible de lire l'entrée dans le répertoire { $dir }, raison: { $reason }
core_cannot_read_metadata_dir = Impossible de lire les métadonnées dans le répertoire { $dir }, raison: { $reason }
core_file_not_utf8_name = Le fichier { $name } n'a pas de nom UTF-8 valide (certains caractères ne peuvent pas être affichés)
core_file_modified_before_epoch = Le fichier { $name } semble avoir été modifié avant l'époque Unix
core_folder_modified_before_epoch = Le dossier { $name } semble avoir été modifié avant l'époque Unix
core_file_no_modification_date = Impossible d'obtenir la date de modification du fichier { $name }, raison: { $reason }
core_folder_no_modification_date = Impossible d'obtenir la date de modification du dossier { $name }, raison: { $reason }
core_cannot_open_dir = Impossible douvrir le répertoire { $dir }. Raison: { $reason }
core_cannot_read_entry_dir = Impossible de lire l'entrée dans le répertoire { $dir }. Raison: { $reason }
core_cannot_read_metadata_dir = Impossible de lire les métadonnées dans le répertoire { $dir }. Raison : { $reason }
core_file_not_utf8_name = Le fichier { $name } n'a pas de nom UTF-8 valide (certains caractères peuvent ne pas être affichés)
core_file_modified_before_epoch = Le fichier { $name } semble avoir été modifié avant l'epoch Unix
core_folder_modified_before_epoch = Le dossier { $name } semble avoir été modifié avant l'epoch Unix
core_file_no_modification_date = Impossible d'obtenir la date de modification du fichier { $name }. Raison : { $reason }
core_folder_no_modification_date = Impossible d'obtenir la date de modification du dossier { $name }. Raison: { $reason }
core_missing_no_chosen_included_directory = Au moins un répertoire doit être fourni
core_directory_wildcard_no_supported = Répertoires : Les jokers dans le chemin ne sont pas pris en charge, ignorant { $path }
core_directory_relative_path = Répertoires : Le chemin relatif n'est pas pris en charge, ignorant { $path }
core_directory_must_exists = Répertoires : Le chemin du dossier fourni doit se terminer, ignorant { $path }
core_directory_must_be_directory = Répertoires : Le chemin fourni doit pointer dans le répertoire, { $path }
core_included_directory_zero_valid_directories = ERREUR de répertoire inclus : Aucun chemin n'a été trouvé, même un chemin correct à inclure qui est requis
core_excluded_directory_pointless_slash = Répertoires: Exclure / est inutile, car cela signifie qu'aucun fichier ne sera scanné
core_directory_overlap = Répertoires : Tous les répertoires pour rechercher des chevauchements avec des répertoires exclus
core_directory_wildcard_no_supported = Répertoires : les jokers dans le chemin ne sont pas pris en charge. { $path } est ignoré
core_directory_must_exists = Répertoires : le chemin du dossier fourni doit exister. { $path } est ignoré
core_directory_must_be_directory = Répertoires : le chemin fourni doit pointer vers le répertoire, { $path } est ignoré
core_included_directory_zero_valid_directories = ERREUR de répertoire inclus : aucun chemin correct n'a été trouvé alors qu'au moins un est nécessaire
core_excluded_directory_pointless_slash = Répertoires: exclure « / » est inutile car cela signifie qu'aucun fichier ne sera scanné
core_directory_overlap = Répertoires : tous les répertoires dans lesquels rechercher des chevauchements avec des répertoires exclus
core_directory_unable_to_get_device_id = Répertoires : impossible d'obtenir l'ID de l'appareil depuis le dossier { $path }
core_ffmpeg_not_found = Impossible de trouver une installation correcte de FFmpeg
core_ffmpeg_missing_in_snap = Les vidéos similaires ne fonctionnent pas actuellement avec un instantané, si vous voulez de l'aide - { $url }
core_ffmpeg_not_found_windows = Assurez-vous que ffmpeg.exe et ffprobe.exe sont disponibles dans PATH ou sont présents dans le même dossier que l'exécutable de l'application
core_ffmpeg_missing_in_snap = Les vidéos similaires ne fonctionnent pas actuellement avec snap. Si vous voulez de l'aide référez vous à - { $url }
core_saving_to_cache = { $number } entrées du cache enregistres dans un fichier
core_loading_from_cache = { $number } entrées chargées depuis le cache

@ -1,4 +1,5 @@
# Core
core_similarity_original = Originali
core_similarity_very_high = Altissima
core_similarity_high = Alta
core_similarity_medium = Media
@ -15,11 +16,14 @@ core_file_no_modification_date = Impossibile recuperare data di modifica dal fil
core_folder_no_modification_date = Impossibile recuperare data di modifica dalla cartella { $name }, ragione { $reason }
core_missing_no_chosen_included_directory = Almeno una directory deve essere fornita
core_directory_wildcard_no_supported = Cartelle: i caratteri jolly nel percorso non sono supportati, ignorando { $path }
core_directory_relative_path = Directories: Il percorso relativo non è supportato, ignorando { $path }
core_directory_must_exists = Directories: Il percorso della cartella fornito deve uscire, ignorando { $path }
core_directory_must_be_directory = Directories: Il percorso fornito deve puntare alla directory, ignorando { $path }
core_included_directory_zero_valid_directories = ERRORE Directory incluso: Non trovato nemmeno un percorso corretto incluso che è richiesto
core_excluded_directory_pointless_slash = Cartelle: Escludere / è inutile, perché significa che nessun file verrà scansionato
core_directory_overlap = Directories: Tutte le directory per cercare sovrapposizioni con directory escluse
core_directory_unable_to_get_device_id = Directory: non è possibile ottenere l'id del dispositivo dalla cartella { $path }
core_ffmpeg_not_found = Impossibile trovare la corretta installazione di FFmpeg
core_ffmpeg_not_found_windows = Quando si utilizza Windows essere sicuri che ffmpeg.exe e ffprobe.exe sono disponibili in PATH o sono messi direttamente nella stessa cartella dove è eseguibile l'applicazione
core_ffmpeg_missing_in_snap = Video simili non funzionano attualmente con snap, se si desidera aiutare a guardare - { $url }
core_saving_to_cache = Salvato nel file { $number } voci cache
core_loading_from_cache = Caricato dalla cache { $number } voci

@ -1,4 +1,5 @@
# Core
core_similarity_original = 新規に作成
core_similarity_very_high = 非常に高い
core_similarity_high = 高い
core_similarity_medium = ミディアム
@ -15,11 +16,14 @@ core_file_no_modification_date = ファイル { $name } から変更日を取得
core_folder_no_modification_date = フォルダ { $name } から変更日を取得できません、理由 { $reason }
core_missing_no_chosen_included_directory = 少なくとも 1 つのディレクトリを指定する必要があります。
core_directory_wildcard_no_supported = ディレクトリ: パス内のワイルドカードはサポートされていません。 { $path } を無視してください
core_directory_relative_path = ディレクトリ: 相対パスはサポートされていません。 { $path } を無視してください
core_directory_must_exists = ディレクトリ: 指定されたフォルダパスは、 { $path } を無視して終了する必要があります
core_directory_must_be_directory = ディレクトリ: 指定されたパスはディレクトリを指す必要があります。 { $path } を無視します
core_included_directory_zero_valid_directories = 含まれるディレクトリエラー: 必須の正しいパスが1つも見つかりません
core_excluded_directory_pointless_slash = ディレクトリ: ファイルがスキャンされないことを意味するため、除外/無意味です
core_directory_overlap = ディレクトリ: 除外されたディレクトリとオーバーラップを検索するすべてのディレクトリ
core_directory_unable_to_get_device_id = ディレクトリ: フォルダ { $path } からデバイス ID を取得できません
core_ffmpeg_not_found = 適切なFFmpegのインストールが見つかりません
core_ffmpeg_not_found_windows = ffmpeg.exeとffprobe.exeがPATHで使用できることを確認するか、アプリ実行ファイルのある同じフォルダに直接配置してください。
core_ffmpeg_missing_in_snap = ヘルプを見たい場合は、現在同様のビデオはスナップでは動作しません - { $url }
core_saving_to_cache = { $number } 個のキャッシュエントリをファイルに保存しました
core_loading_from_cache = キャッシュから { $number } 個のエントリが読み込まれました

@ -0,0 +1,29 @@
# Core
core_similarity_original = 원본
core_similarity_very_high = 매우 높음
core_similarity_high = 높음
core_similarity_medium = 보통
core_similarity_small = 낮음
core_similarity_very_small = 매우 낮음
core_similarity_minimal = 최소
core_cannot_open_dir = { $dir } 디렉터리를 열 수 없습니다. 이유: { $reason }
core_cannot_read_entry_dir = { $dir } 디렉터리를 열 수 없습니다. 이유: { $reason }
core_cannot_read_metadata_dir = { $dir } 디렉터리의 메타데이터를 열 수 없습니다. 이유: { $reason }
core_file_not_utf8_name = 파일 이름 "{ $name }"은 유효한 UTF-8 이름이 아닙니다. 일부 글자가 보이지 않을 수 있습니다.
core_file_modified_before_epoch = { $name } 파일이 Unix 시간 이전에 수정된 것 같습니다.
core_folder_modified_before_epoch = { $name } 폴더가 Unix 시간 이전에 수정된 것 같습니다.
core_file_no_modification_date = { $name } 파일의 수정된 시각을 읽을 수 없습니다. 이유: { $reason }
core_folder_no_modification_date = { $name } 폴더의 수정된 시각을 읽을 수 없습니다. 이유: { $reason }
core_missing_no_chosen_included_directory = 적어도 1개 이상의 디렉터리가 주어져야 합니다.
core_directory_wildcard_no_supported = 디렉터리: 경로에는 와일드 카드가 지원되지 않습니다. "{ $path }"는 무시됩니다.
core_directory_must_exists = 디렉터리: 주어진 폴더 경로는 반드시 존재해야 합니다. "{ $path }"는 무시됩니다.
core_directory_must_be_directory = 디렉터리: 주어진 경로는 디렉터리를 가리켜야 합니다. "{ $path }"는 무시됩니다.
core_included_directory_zero_valid_directories = 검색 대상 디렉터리 오류: 적어도 1개 이상의 유효한 경로가 주어져야 합니다. 유효한 경로가 하나도 없습니다.
core_excluded_directory_pointless_slash = 디렉터리: "/"를 제외하는 것은 아무런 파일도 스캔하지 않는다는 것이므로, 의미가 없습니다.
core_directory_overlap = 디렉터리: 모든 주어진 경로가 검색 제외 경로와 겹칩니다.
core_directory_unable_to_get_device_id = 디렉터리: { $path }의 장치 ID를 가져올 수 없습니다.
core_ffmpeg_not_found = 유효한 FFmpeg 설치를 발견하지 못했습니다.
core_ffmpeg_not_found_windows = ffmpeg.exe와 ffprobe.exe가 시스템 변수 PATH에서 사용 가능하거나, 이 프로그램의 경로와 같은 곳에 위치하는지 확인하세요.
core_ffmpeg_missing_in_snap = 현재 ffmpeg snap에서는 유사한 영상 검색이 지원되지 않습니다. 더 많은 정보는 { $url }에서 확인하세요.
core_saving_to_cache = { $number }개의 파일을 캐시에 저장했습니다.
core_loading_from_cache = { $number }개의 파일을 캐시에서 불러왔습니다.

@ -0,0 +1,29 @@
# Core
core_similarity_original = Origineel
core_similarity_very_high = Zeer hoog
core_similarity_high = hoog
core_similarity_medium = Middelgroot
core_similarity_small = Klein
core_similarity_very_small = Zeer Klein
core_similarity_minimal = Minimaal
core_cannot_open_dir = Kan dir { $dir }niet openen, reden { $reason }
core_cannot_read_entry_dir = Kan invoer niet lezen in map { $dir }, reden { $reason }
core_cannot_read_metadata_dir = Kan metadata niet lezen in map { $dir }, reden { $reason }
core_file_not_utf8_name = Bestand { $name } heeft geen geldige UTF-8-naam (sommige tekens kunnen niet worden getoond)
core_file_modified_before_epoch = Het bestand { $name } lijkt aangepast te zijn voor Unix Epoch
core_folder_modified_before_epoch = Map { $name } lijkt aangepast te zijn voor Unix Epoch
core_file_no_modification_date = Niet in staat om de datum van bestand { $name }te krijgen, reden { $reason }
core_folder_no_modification_date = Niet in staat om wijzigingsdatum van map { $name }te krijgen, reden { $reason }
core_missing_no_chosen_included_directory = Ten minste één map moet worden opgegeven
core_directory_wildcard_no_supported = Maps: Wildcards op pad worden niet ondersteund, negeer { $path }
core_directory_must_exists = Maps: Opgegeven mappad moet bestaan, afwijzend { $path }
core_directory_must_be_directory = Directories: Het opgegeven pad moet naar de map wijzen, { $path } wordt genegeerd
core_included_directory_zero_valid_directories = Inclusief map FOUT: Er is niet één juist pad gevonden naar de map die vereist is
core_excluded_directory_pointless_slash = Maps: Uitsluiten/is zinloos, omdat er geen bestanden worden gescand
core_directory_overlap = Maps: alle mappen om overlappingen te zoeken met uitgesloten mappen
core_directory_unable_to_get_device_id = Maps: Kan apparaat-id niet ophalen uit map { $path }
core_ffmpeg_not_found = Kan de juiste installatie van FFmpeg niet vinden
core_ffmpeg_not_found_windows = Zorg ervoor dat ffmpeg.exe en ffprobe.exe beschikbaar zijn in PATH of direct in dezelfde map geplaatst zijn waar de app uitvoerbaar is
core_ffmpeg_missing_in_snap = Vergelijkbare video's werken momenteel niet met snap, als je wilt helpen kijken naar - { $url }
core_saving_to_cache = Opgeslagen in bestand { $number } cache items
core_loading_from_cache = Geladen uit cache { $number } items

@ -0,0 +1,29 @@
# Core
core_similarity_original = Opprinnelig
core_similarity_very_high = Veldig høy
core_similarity_high = Høy
core_similarity_medium = Middels
core_similarity_small = Liten
core_similarity_very_small = Veldig liten
core_similarity_minimal = Minimal
core_cannot_open_dir = Kan ikke åpne dir { $dir }, årsak { $reason }
core_cannot_read_entry_dir = Kan ikke lese oppføringen i dir { $dir }, årsak { $reason }
core_cannot_read_metadata_dir = Kan ikke lese metadata i dir { $dir }, årsak { $reason }
core_file_not_utf8_name = Filen { $name } har ikke et gyldig UTF-8-navn (noen tegn kan ikke vises)
core_file_modified_before_epoch = Filen { $name } ser ut til å bli endret før Unix Epoch
core_folder_modified_before_epoch = Mappen { $name } ser ut til å bli endret før Unix Epoch
core_file_no_modification_date = Klarte ikke å hente endringsdato fra filen { $name }. Årsak { $reason }
core_folder_no_modification_date = Klarte ikke å hente endringsdato fra mappen { $name }. Årsak { $reason }
core_missing_no_chosen_included_directory = Minst en katalog må angis
core_directory_wildcard_no_supported = Kataloger: Jokertegn i stien støttes ikke, ignorerer { $path }
core_directory_must_exists = Kataloger: Angitt sti for mappe må eksistere. Ignorerer { $path }
core_directory_must_be_directory = Kataloger: Angitt sti må peke på mappen. Ignorerer { $path }
core_included_directory_zero_valid_directories = Feil med inkludert katalog: Fant ikke én eneste sti til den inkluderte mappen, noe som er påkrevd
core_excluded_directory_pointless_slash = Kataloger: Ekskludere / er poengløst, fordi det betyr at ingen filer vil bli skannet
core_directory_overlap = Kataloger: Alle kataloger å søke overlapper med ekskluderte mapper
core_directory_unable_to_get_device_id = Mapper: Kan ikke hente enhets id fra mappen { $path }
core_ffmpeg_not_found = Klarte ikke å finne riktig installasjon av FFmpeg
core_ffmpeg_not_found_windows = Pass på at ffmpeg.exe og ffprobe.exe er tilgjengelig i PATH eller plasseres direkte i samme mappe som appen kan kjøres
core_ffmpeg_missing_in_snap = Lignende videoer fungerer ikke for øyeblikket med snap. Hvis du vil ha hjelp kan du se her - { $url }
core_saving_to_cache = Lagret i filen { $number } cache-oppføringer
core_loading_from_cache = Lastet fra hurtigbuffer { $number } oppføringer

@ -1,4 +1,5 @@
# Core
core_similarity_original = Oryginalny
core_similarity_very_high = Bardzo Duże
core_similarity_high = Duże
core_similarity_medium = Średnie
@ -15,14 +16,14 @@ core_file_no_modification_date = Nie udało się pobrać daty modyfikacji z plik
core_folder_no_modification_date = Nie udało się pobrać daty modyfikacji z folderu { $name }, powód { $reason }
core_missing_no_chosen_included_directory = Należy podać co najmniej jeden katalog
core_directory_wildcard_no_supported = Katalogi: Wildcard na ścieżce nie są obsługiwane, ignorowanie { $path }
core_directory_relative_path = Katalogi: Ścieżka względna nie jest wspierana, ignorowanie { $path }
core_directory_must_exists = Katalogi: Podana ścieżka do folderu musi istnieć, ignorowanie { $path }
core_directory_must_be_directory = Katalogi: Podana ścieżka musi wskazywać na katalog, ignorowanie { $path }
core_included_directory_zero_valid_directories = Błąd katalogów do przeszukiwania: Nie znaleziono nawet jednej poprawnej ścieżki do przeszukania
core_excluded_directory_pointless_slash = Katalogi: Wykluczanie folderu / jest bezcelowe, ponieważ oznacza to, że żadne pliki nie zostaną sprawdzone
core_directory_overlap = Katalogi: Wszystkie katalogi do wyszukiwania pokrywają się z wykluczonymi
core_directory_unable_to_get_device_id = Katalogi: Nie można uzyskać identyfikatora urządzenia z folderu { $path }
core_ffmpeg_not_found = Nie można odnaleźć poprawnej instalacji FFmpeg
core_ffmpeg_not_found_windows = Upewnij się, że ffmpeg.exe i ffprobe.exe są dostępne w PATH lub są umieszczone bezpośrednio w tym samym folderze, w którym aplikacja jest uruchamiana.
core_ffmpeg_missing_in_snap = Wyszukiwanie podobnych filmów nie działa obecnie w snapach, jeśli chcesz pomóc spójrz na - { $url }
core_saving_to_cache = Saved to file { $number } cache entries
core_loading_from_cache = Loaded from cache { $number } entries
core_saving_to_cache = Zapisano do pliku { $number } obiektów
core_loading_from_cache = Załadowano z pamięci podręcznej { $number } obiektów

@ -1,4 +1,5 @@
# Core
core_similarity_original = Original
core_similarity_very_high = Muito alto
core_similarity_high = Alto
core_similarity_medium = Média
@ -15,11 +16,14 @@ core_file_no_modification_date = Não foi possível obter a data de modificaçã
core_folder_no_modification_date = Não foi possível obter a data de modificação da pasta { $name }, motivo { $reason }
core_missing_no_chosen_included_directory = Pelo menos um diretório deve ser fornecido
core_directory_wildcard_no_supported = Directorias: Caracteres curinga no caminho não são suportados, ignorando { $path }
core_directory_relative_path = Directorias: Caminho relativo não são suportados, ignorando { $path }
core_directory_must_exists = Directórios: Caminho da pasta fornecida deve sair, ignorando { $path }
core_directory_must_be_directory = Diretórios: Caminho fornecido deve apontar para o diretório, ignorando { $path }
core_included_directory_zero_valid_directories = ERRO do Diretório incluído: Não foi encontrado nenhum caminho correto que é necessário incluir
core_excluded_directory_pointless_slash = Directorias: Excluir / não faz sentido, porque significa que nenhum arquivo será escaneado
core_directory_overlap = Diretórios: Todos os diretórios para pesquisar sobreposições com diretórios excluídos
core_directory_unable_to_get_device_id = Directorias: Não foi possível obter o dispositivo id da pasta { $path }
core_ffmpeg_not_found = Instalação adequada do FFmpeg não encontrada
core_ffmpeg_not_found_windows = Certifique-se de que o ffmpeg.exe e ffprobe.exe estão disponíveis no PATH ou são colocados diretamente na mesma pasta onde o aplicativo é executável
core_ffmpeg_missing_in_snap = Vídeos similares não funcionam atualmente com o snap, se você quiser ajudar a olhar - { $url }
core_saving_to_cache = Salvo no arquivo { $number } entradas de cache
core_loading_from_cache = Carregado do cache { $number } entradas

@ -0,0 +1,29 @@
# Core
core_similarity_original = Originală
core_similarity_very_high = Foarte Mare
core_similarity_high = Ridicat
core_similarity_medium = Medie
core_similarity_small = Mică
core_similarity_very_small = Foarte mic
core_similarity_minimal = Minimă
core_cannot_open_dir = Nu se poate deschide dir { $dir }, motiv { $reason }
core_cannot_read_entry_dir = Nu se poate citi intrarea în dir { $dir }, motivul { $reason }
core_cannot_read_metadata_dir = Metadatele nu pot fi citite în dir { $dir }, motivul { $reason }
core_file_not_utf8_name = Fișierul { $name } nu are un nume valid UTF-8 (este posibil ca unele caractere să nu fie afișate)
core_file_modified_before_epoch = Fișierul { $name } pare să fie modificat înainte de Epoch Unix
core_folder_modified_before_epoch = Dosarul { $name } pare să fie modificat înainte de Epoc Unix
core_file_no_modification_date = Imposibil de obținut data modificării din fișierul { $name }, motivul { $reason }
core_folder_no_modification_date = Imposibil de obținut data modificării din dosarul { $name }, motivul { $reason }
core_missing_no_chosen_included_directory = Trebuie furnizat cel puțin un director
core_directory_wildcard_no_supported = Directoare: Wildcards pe cale nu sunt acceptate, ignorând { $path }
core_directory_must_exists = Directoare: Calea dosarului furnizat trebuie să existe, ignorând { $path }
core_directory_must_be_directory = Directoare: Calea specificată trebuie să indice în director, ignorând { $path }
core_included_directory_zero_valid_directories = EROARE din Director inclusă: Nici măcar o cale corectă de inclus, care este necesară
core_excluded_directory_pointless_slash = Directoare: Excludere / este inutilă, deoarece înseamnă că niciun fișier nu va fi scanat
core_directory_overlap = Directoare: Toate directoarele pentru a căuta suprapuneri cu directoarele excluse
core_directory_unable_to_get_device_id = Directoare: Imposibil de obținut ID-ul dispozitivului din folderul { $path }
core_ffmpeg_not_found = Nu se poate găsi instalarea corectă a FFmpeg
core_ffmpeg_not_found_windows = Asigurați-vă că ffmpeg.exe și ffprobe.exe sunt disponibile în PATH sau sunt puse direct în același folder unde este executabilă aplicația
core_ffmpeg_missing_in_snap = Videoclipuri similare nu funcționează în prezent cu ancorare, dacă doriți să vă uitați - { $url }
core_saving_to_cache = Intrări cache salvate în fişierul { $number }
core_loading_from_cache = Încărcat din geocutia { $number }

@ -1,25 +1,29 @@
# Core
core_similarity_very_high = Очень высокий
core_similarity_high = Высокий
core_similarity_medium = Средний
core_similarity_small = Маленький
core_similarity_very_small = Очень маленький
core_similarity_minimal = Минимальный
core_cannot_open_dir = Невозможно открыть каталог { $dir }, причина { $reason }
core_cannot_read_entry_dir = Невозможно прочитать запись в директории { $dir }, причина { $reason }
core_cannot_read_metadata_dir = Невозможно прочитать метаданные в директории { $dir }, причина { $reason }
core_file_not_utf8_name = У файла { $name } неверное имя UTF-8 (некоторые символы не могут быть показаны)
core_file_modified_before_epoch = Файл { $name } может быть изменен до начала эпохи Unix
core_folder_modified_before_epoch = Папка { $name } изменяется до начала эпохи Unix
core_file_no_modification_date = Не удается получить дату изменения из файла { $name }, причина { $reason }
core_folder_no_modification_date = Не удается получить дату изменения из папки { $name }, причина { $reason }
core_similarity_original = Оригинальное
core_similarity_very_high = Очень высокое
core_similarity_high = Высокое
core_similarity_medium = Среднее
core_similarity_small = Низкое
core_similarity_very_small = Очень низкое
core_similarity_minimal = Минимальное
core_cannot_open_dir = Невозможно открыть каталог { $dir }, причина: { $reason }
core_cannot_read_entry_dir = Невозможно прочитать запись в директории { $dir }, причина: { $reason }
core_cannot_read_metadata_dir = Невозможно прочитать метаданные в директории { $dir }, причина: { $reason }
core_file_not_utf8_name = У файла { $name } неверное имя UTF-8 (некоторые символы могут не отображаться)
core_file_modified_before_epoch = Файл { $name }, кажется, изменён до начала эпохи Unix
core_folder_modified_before_epoch = Папка { $name }, кажется, изменена до начала эпохи Unix
core_file_no_modification_date = Не удаётся получить дату изменения из файла { $name }, причина: { $reason }
core_folder_no_modification_date = Не удаётся получить дату изменения из папки { $name }, причина: { $reason }
core_missing_no_chosen_included_directory = Должен быть указан хотя бы один каталог
core_directory_wildcard_no_supported = Директории: Не поддерживаются шаблоны в директории, игнорируется { $path }
core_directory_relative_path = Директории: Относительный путь не поддерживается, игнорируется { $path }
core_directory_must_exists = Директории: Указанный путь к папке должен быть закрыт, игнорируется { $path }
core_directory_must_be_directory = Директории: Указанный путь должен указывать на директорию, игнорируя { $path }
core_included_directory_zero_valid_directories = Включенный каталог ОШИБКА: Не найден даже один правильный путь к включённому которому требуется
core_excluded_directory_pointless_slash = Директории: Исключение / бессмысленно, потому что ни один файл не будет просканирован
core_directory_overlap = Каталоги: Все директории для поиска совпадают с исключенными каталогами
core_ffmpeg_not_found = Не удается найти надлежащую установку FFmpeg
core_ffmpeg_missing_in_snap = Похожие видео не работают в данный момент, если вы хотите помочь посмотреть - { $url }
core_directory_wildcard_no_supported = Директории: Не поддерживаются маски в путях, будет проигнорирован { $path }
core_directory_must_exists = Директории: Указанный путь к папке должен существовать, будет проигнорирован{ $path }
core_directory_must_be_directory = Директории: Указанный путь должен указывать на директорию, будет проигнорирован { $path }
core_included_directory_zero_valid_directories = Включённый каталог, ОШИБКА: Не найдено ни одного корректного пути для включения в список поиска — обязательно добавить хотя бы один
core_excluded_directory_pointless_slash = Директории: Исключение корневой папки «/» бессмысленно, потому что в таком случае ни один файл не будет просканирован
core_directory_overlap = Каталоги: Все директории для поиска также присутствуют в списке исключённых каталогов
core_directory_unable_to_get_device_id = Каталоги: Не удалось получить идентификатор устройства из папки { $path }
core_ffmpeg_not_found = Не удалось найти путь, содержащий корректную инсталляцию FFmpeg
core_ffmpeg_not_found_windows = Убедитесь, что ffmpeg.exe и ffprobe.exe доступны в PATH или находятся в той же папке, где это исполняемый файл
core_ffmpeg_missing_in_snap = Функция поиска похожих видео пока не работает — если хотите помочь проекту, см. { $url }
core_saving_to_cache = Сохранено в файл записей кэша: { $number }
core_loading_from_cache = Загружено записей из кэша: { $number }

@ -0,0 +1,29 @@
# Core
core_similarity_original = Ursprunglig
core_similarity_very_high = Mycket Hög
core_similarity_high = Hög
core_similarity_medium = Mellan
core_similarity_small = Litet
core_similarity_very_small = Väldigt Liten
core_similarity_minimal = Minimalt
core_cannot_open_dir = Kan inte öppna dir { $dir }anledning { $reason }
core_cannot_read_entry_dir = Kan inte läsa post i dir { $dir }, anledning { $reason }
core_cannot_read_metadata_dir = Kan inte läsa metadata i dir { $dir }, anledning { $reason }
core_file_not_utf8_name = Filen { $name } har inte ett giltigt UTF-8-namn (vissa tecken kan inte visas)
core_file_modified_before_epoch = Filen { $name } verkar ändras innan Unix Epoch
core_folder_modified_before_epoch = Mappen { $name } verkar ändras innan Unix Epoch
core_file_no_modification_date = Det går inte att hämta ändringsdatum från filen { $name }, anledning { $reason }
core_folder_no_modification_date = Det går inte att hämta ändringsdatum från mappen { $name }, anledning { $reason }
core_missing_no_chosen_included_directory = Minst en katalog måste tillhandahållas
core_directory_wildcard_no_supported = Kataloger: Wildcards i sökvägen stöds inte, ignorerar { $path }
core_directory_must_exists = Kataloger: Tillhandahållen mappsökväg måste finnas, ignorerar { $path }
core_directory_must_be_directory = Kataloger: Tillhandahållen sökväg måste peka på katalogen, ignorerar { $path }
core_included_directory_zero_valid_directories = Inkluderad katalog FEL: Hittas inte ens en korrekt sökväg till inkluderad som krävs
core_excluded_directory_pointless_slash = Kataloger: Exklusive / är meningslös, eftersom det innebär att inga filer kommer att skannas
core_directory_overlap = Kataloger: Alla kataloger att söka överlappar med uteslutna kataloger
core_directory_unable_to_get_device_id = Kataloger: Det går inte att hämta enhets-id från mappen { $path }
core_ffmpeg_not_found = Kan inte hitta rätt installation av FFmpeg
core_ffmpeg_not_found_windows = Se till att ffmpeg.exe och ffprobe.exe är tillgängliga i PATH eller sätts direkt till samma mapp där är app körbar
core_ffmpeg_missing_in_snap = Liknande videor fungerar inte just nu med snap, om du vill ha hjälp att titta på - { $url }
core_saving_to_cache = Sparad i filen { $number } cacheposter
core_loading_from_cache = Laddad från cache { $number } poster

@ -0,0 +1,29 @@
# Core
core_similarity_original = Asıl
core_similarity_very_high = Çok Yüksek
core_similarity_high = Yüksek
core_similarity_medium = Orta
core_similarity_small = Düşük
core_similarity_very_small = Çok Düşük
core_similarity_minimal = Aşırı Düşük
core_cannot_open_dir = { $dir } dizini açılamıyor, nedeni: { $reason }
core_cannot_read_entry_dir = { $dir } dizinindeki girdi okunamıyor, nedeni: { $reason }
core_cannot_read_metadata_dir = { $dir } dizinindeki metaveri okunamıyor, nedei: { $reason }
core_file_not_utf8_name = { $name } dosyasının geçerli bir UTF-8 adı yok (kimi karakterler gösterilemeyebilir)
core_file_modified_before_epoch = { $name } dosyası Unix Epoch'tan önce değiştirilmiş gibi görünüyor.
core_folder_modified_before_epoch = { $name } klasörü Unix Epoch'tan önce değiştirilmiş gibi görünüyor.
core_file_no_modification_date = { $name } dosyasının değişiklik tarihine erişilemiyor, nedeni: { $reason }
core_folder_no_modification_date = { $name } klasörünün değişiklik tarihine erişilemiyor, nedeni: { $reason }
core_missing_no_chosen_included_directory = "Aranacak Dizinler" listesinde en az bir dizin yer almalıdır.
core_directory_wildcard_no_supported = Dizinler: Yol adında joker karakterler desteklenmez, { $path } yok sayıldı.
core_directory_must_exists = Dizinler: Girilen klasör yolu var olmalı, { $path } yok sayıldı.
core_directory_must_be_directory = Dizinler: Girilen yol bir dizini göstermelidir, { $path } yok sayıldı.
core_included_directory_zero_valid_directories = "Aranacak Dizinler" listesinde HATA: Tarama yapılması için gerekli olan tek bir doğru yol bile bulunamadı.
core_excluded_directory_pointless_slash = Dizinler: "/" kök dizinini hariç tutmak anlamsızdır, çünkü bu hiçbir dosyanın taranmayacağı anlamına gelir.
core_directory_overlap = Dizinler: Aranacak tüm dizinler, hariç tutulan dizinlerle çakışıyor.
core_directory_unable_to_get_device_id = Dizinler: { $path } klasörünün aygıt kimliği bilgisine erişilemiyor.
core_ffmpeg_not_found = FFmpeg'in uygun kurulumu bulunamıyor.
core_ffmpeg_not_found_windows = "ffmpeg(.exe)" ve "ffprobe(.exe)" uygulamalarının PATH dizininde ya da uygulamanın doğrudan yürütüldüğü dizinde yer aldığından ve 'yürütülebilir' olarak işaretlendiğinden emin olun.
core_ffmpeg_missing_in_snap = Benzer Videolar şu anda snap ile çalışmıyor, eğer yardım istiyorsanız - { $url }
core_saving_to_cache = { $number } adet önbellek kaydı dosyaya kaydedildi
core_loading_from_cache = Önbellekten { $number } adet kayıt yüklendi

@ -1,25 +1,29 @@
# Core
core_similarity_very_high = Дуже високий
core_similarity_high = Високий
core_similarity_medium = Медіум
core_similarity_small = Маленький
core_similarity_very_small = Дуже малий
core_similarity_minimal = Мінімальні
core_cannot_open_dir = Не вдалося відкрити папку { $dir }, причина { $reason }
core_cannot_read_entry_dir = Не вдалося прочитати запис в папці { $dir }, причина { $reason }
core_cannot_read_metadata_dir = Не вдалося прочитати метадані в папці { $dir }, причина { $reason }
core_similarity_original = Оригінал
core_similarity_very_high = Дуже висока
core_similarity_high = Висока
core_similarity_medium = Середня
core_similarity_small = Низька
core_similarity_very_small = Дуже низька
core_similarity_minimal = Мінімальна
core_cannot_open_dir = Не вдалося відкрити каталог { $dir }, причина: { $reason }
core_cannot_read_entry_dir = Не вдалося прочитати запис в каталозі { $dir }, причина: { $reason }
core_cannot_read_metadata_dir = Не вдалося прочитати метадані в каталозі { $dir }, причина: { $reason }
core_file_not_utf8_name = Файл { $name } не має припустимого імені UTF-8 (деякі символи не можуть бути показані)
core_file_modified_before_epoch = Файл { $name } Схоже, змінено перед Unix Epoch
core_folder_modified_before_epoch = Папка { $name } здається змінена до Unix Epoch
core_file_no_modification_date = Не вдалося отримати дату модифікації з файлу { $name }, причина { $reason }
core_folder_no_modification_date = Не вдалося отримати дату модифікації з папки { $name }, причина { $reason }
core_file_modified_before_epoch = Файл { $name }, здається, змінено до початку епохи Unix
core_folder_modified_before_epoch = Папка { $name }, здається, змінена до початку епохи Unix
core_file_no_modification_date = Не вдалося отримати дату модифікації з файлу { $name }, причина: { $reason }
core_folder_no_modification_date = Не вдалося отримати дату модифікації з каталогу { $name }, причина: { $reason }
core_missing_no_chosen_included_directory = Необхідно вказати принаймні один каталог
core_directory_wildcard_no_supported = Директорія: Шаблони в шляху не підтримуються, ігноруючи { $path }
core_directory_relative_path = Каталог: Відносний шлях не підтримується, ігноруючи { $path }
core_directory_must_exists = Каталог: Наданий шлях до папки повинен вийти, ігноруючи { $path }
core_directory_must_be_directory = Каталог: Наданий шлях повинен вказувати на каталог, ігноруючи { $path }
core_included_directory_zero_valid_directories = Включена помилка в каталозі: не знайдено навіть один правильний шлях до включеного, який є обов'язковим
core_excluded_directory_pointless_slash = Теки: виключення / без урахування безточних, тому що це означає, що файли не будуть скановані
core_directory_overlap = Каталоги: Усі каталоги для пошуку перетинаються з виключеними каталогами
core_ffmpeg_not_found = Не вдалося знайти правильне встановлення FFmpeg
core_ffmpeg_missing_in_snap = Подібні відео в даний час не працюють з знімком, якщо ви хочете, щоб допомогти вам переглянути - { $url }
core_directory_wildcard_no_supported = Директорії: Не підтримуються маски у шляхах, буде проігнорован { $path }
core_directory_must_exists = Директорії: Вказаний шлях до папки має існувати, буде проігнорован { $path }
core_directory_must_be_directory = Директорії: Вказаний шлях повинен вказувати на директорію, буде проігнорован { $path }
core_included_directory_zero_valid_directories = Включений каталог, ПОМИЛКА: Не знайдено жодного коректного шляху для включення до списку пошуку — обов'язково додати хоча б один
core_excluded_directory_pointless_slash = Директорії: Виключення кореневого каталогу «/» не має сенсу, тому що в такому разі жоден файл не буде просканований
core_directory_overlap = Каталоги: Усі директорії для пошуку також присутні у списку виключених каталогів
core_directory_unable_to_get_device_id = Каталоги: Не вдалося отримати ідентифікатор пристрою з папки { $path }
core_ffmpeg_not_found = Неможливо знайти шлях, що містить коректну інсталяцію FFmpeg
core_ffmpeg_not_found_windows = Будьте впевнені, що ffmpeg.exe і ffprobe.exe доступні в PATH або прямо в тій же папці, де є виконуваний додаток
core_ffmpeg_missing_in_snap = Функція пошуку схожих відео поки не працює — якщо хочете допомогти проекту, див. {$url}
core_saving_to_cache = Збережено записів кешу у файл: { $number }
core_loading_from_cache = Завантажено записів з кешу: { $number }

@ -1,4 +1,5 @@
# Core
core_similarity_original = 原版
core_similarity_very_high = 非常高
core_similarity_high = 高
core_similarity_medium = 中
@ -8,18 +9,21 @@ core_similarity_minimal = 最小化
core_cannot_open_dir = 无法打开目录 { $dir },因为 { $reason }
core_cannot_read_entry_dir = 无法在目录 { $dir } 中读取条目,因为 { $reason }
core_cannot_read_metadata_dir = 无法读取目录 { $dir } 中的元数据,因为 { $reason }
core_file_not_utf8_name = 文件 { $name } 效的 UTF-8 名称 (可能无法显示一些字符)
core_file_modified_before_epoch = 文件 { $name } 似乎在 Unix Epoch前被修改
core_folder_modified_before_epoch = 文件夹 { $name } 似乎在Unix Epoch前被修改
core_file_not_utf8_name = 文件 { $name } 没有有效的 UTF-8 名称 (可能无法显示一些字符)
core_file_modified_before_epoch = 文件 { $name } 似乎在 Unix Epoch前被修改
core_folder_modified_before_epoch = 文件夹 { $name } 似乎在 Unix Epoch前被修改
core_file_no_modification_date = 无法从文件 { $name } 获取修改日期,因为 { $reason }
core_folder_no_modification_date = 无法从文件夹 { $name } 获取修改日期,因为 { $reason }
core_missing_no_chosen_included_directory = 必须至少提供一个目录
core_directory_wildcard_no_supported = 目录:不支持路径中的通配符,忽略 { $path }
core_directory_relative_path = 目录:不支持相对路径,忽略 { $path }
core_directory_must_exists = 目录:提供的文件夹路径必须退出,忽略 { $path }
core_directory_must_be_directory = 目录:提供的路径必须指向目录,忽略 { $path }
core_included_directory_zero_valid_directories = 包括目录错误:即使找不到一个需要包含的正确路径
core_excluded_directory_pointless_slash = 目录:不包括 / 无意义,因为它意味着没有文件将被扫描
core_directory_overlap = 目录:所有要搜索与排除目录重叠的目录
core_ffmpeg_not_found = 找不到正确安装FFmpeg
core_directory_unable_to_get_device_id = 目录:无法从文件夹 { $path } 获取设备 id
core_ffmpeg_not_found = FFmpeg未被正确安装
core_ffmpeg_not_found_windows = 请确保 ffmpeg.exe 和 ffprobe.exe 在 PATH 中可用,或者直接放入应用可执行文件的同一文件夹中
core_ffmpeg_missing_in_snap = 类似的视频目前不适用于快照,如果您想要帮助查看- { $url }
core_saving_to_cache = 保存到文件 { $number } 个缓存条目
core_loading_from_cache = 从缓存加载 { $number } 个条目

@ -0,0 +1,460 @@
use std::collections::{BTreeSet, HashMap};
use std::io::prelude::*;
use std::mem;
use std::path::{Path, PathBuf};
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
use std::sync::Arc;
use crossbeam_channel::{Receiver, Sender};
use fun_time::fun_time;
use log::debug;
use mime_guess::get_mime_extensions;
use rayon::prelude::*;
use serde::Serialize;
use crate::common::{check_if_stop_received, prepare_thread_handler_common, send_info_and_wait_for_ending_all_threads};
use crate::common_dir_traversal::{CheckingMethod, DirTraversalBuilder, DirTraversalResult, FileEntry, ProgressData, ToolType};
use crate::common_tool::{CommonData, CommonToolData};
use crate::common_traits::*;
static DISABLED_EXTENSIONS: &[&str] = &["file", "cache", "bak", "data"]; // Such files can have any type inside
// This adds several workarounds for bugs/invalid recognizing types by external libraries
// ("real_content_extension", "current_file_extension")
const WORKAROUNDS: &[(&str, &str)] = &[
// Wine/Windows
("der", "cat"),
("exe", "acm"),
("exe", "ax"),
("exe", "bck"),
("exe", "com"),
("exe", "cpl"),
("exe", "dll16"),
("exe", "dll"),
("exe", "drv16"),
("exe", "drv"),
("exe", "ds"),
("exe", "efi"),
("exe", "exe16"),
("exe", "fon"), // Type of font or something else
("exe", "mod16"),
("exe", "msstyles"),
("exe", "mui"),
("exe", "mun"),
("exe", "orig"),
("exe", "ps1xml"),
("exe", "rll"),
("exe", "rs"),
("exe", "scr"),
("exe", "signed"),
("exe", "sys"),
("exe", "tlb"),
("exe", "tsp"),
("exe", "vdm"),
("exe", "vxd"),
("exe", "winmd"),
("gz", "loggz"),
("xml", "adml"),
("xml", "admx"),
("xml", "camp"),
("xml", "cdmp"),
("xml", "cdxml"),
("xml", "dgml"),
("xml", "diagpkg"),
("xml", "gmmp"),
("xml", "library-ms"),
("xml", "man"),
("xml", "manifest"),
("xml", "msc"),
("xml", "mum"),
("xml", "resx"),
("zip", "wmz"),
// Games specific extensions - cannot be used here common extensions like zip
("gz", "h3m"), // Heroes 3
("zip", "hashdb"), // Gog
("zip", "c2"), // King of the Dark Age
("bmp", "c2"), // King of the Dark Age
("avi", "c2"), // King of the Dark Age
("exe", "c2"), // King of the Dark Age
// Other
("der", "keystore"), // Godot/Android keystore
("exe", "pyd"), // Python/Mingw
("gz", "blend"), // Blender
("gz", "crate"), // Cargo
("gz", "svgz"), // Archive svg
("gz", "tgz"), // Archive
("html", "dtd"), // Mingw
("html", "ent"), // Mingw
("html", "md"), // Markdown
("html", "svelte"), // Svelte
("jpg", "jfif"), // Photo format
("m4v", "mp4"), // m4v and mp4 are interchangeable
("mobi", "azw3"), // Ebook format
("mpg", "vob"), // Weddings in parts have usually vob extension
("obj", "bin"), // Multiple apps, Czkawka, Nvidia, Windows
("obj", "o"), // Compilators
("odp", "otp"), // LibreOffice
("ods", "ots"), // Libreoffice
("odt", "ott"), // Libreoffice
("ogg", "ogv"), // Audio format
("pem", "key"), // curl, openssl
("png", "kpp"), // Krita presets
("pptx", "ppsx"), // Powerpoint
("sh", "bash"), // Linux
("sh", "guess"), // GNU
("sh", "pl"), // Gnome/Linux
("sh", "pm"), // Gnome/Linux
("sh", "py"), // Python
("sh", "pyx"), // Python
("sh", "rs"), // Rust
("sh", "sample"), // Git
("xml", "bsp"), // Quartus
("xml", "cbp"), // CodeBlocks config
("xml", "cfg"), // Multiple apps - Godot
("xml", "cmb"), // Cambalache
("xml", "conf"), // Multiple apps - Python
("xml", "config"), // Multiple apps - QT Creator
("xml", "dae"), // 3D models
("xml", "docbook"), //
("xml", "fb2"), //
("xml", "filters"), // Visual studio
("xml", "gir"), // GTK
("xml", "glade"), // Glade
("xml", "iml"), // Intelij Idea
("xml", "kdenlive"), // KDenLive
("xml", "lang"), // ?
("xml", "nuspec"), // Nuget
("xml", "policy"), // SystemD
("xml", "qsys"), // Quartus
("xml", "sopcinfo"), // Quartus
("xml", "svg"), // SVG
("xml", "ui"), // Cambalache, Glade
("xml", "user"), // Qtcreator
("xml", "vbox"), // VirtualBox
("xml", "vbox-prev"), // VirtualBox
("xml", "vcproj"), // VisualStudio
("xml", "vcxproj"), // VisualStudio
("xml", "xba"), // Libreoffice
("xml", "xcd"), // Libreoffice files
("zip", "apk"), // Android apk
("zip", "cbr"), // Comics
("zip", "dat"), // Multiple - python, brave
("zip", "doc"), // Word
("zip", "docx"), // Word
("zip", "jar"), // Java
("zip", "kra"), // Krita
("zip", "kgm"), // Krita
("zip", "nupkg"), // Nuget packages
("zip", "odg"), // Libreoffice
("zip", "pptx"), // Powerpoint
("zip", "whl"), // Python packages
("zip", "xlsx"), // Excel
("zip", "xpi"), // Firefox extensions
("zip", "zcos"), // Scilab
// Probably invalid
("html", "svg"),
("xml", "html"),
// Probably bug in external library
("msi", "ppt"), // Not sure why ppt is not recognized
("msi", "doc"), // Not sure why doc is not recognized
("exe", "xls"), // Not sure why xls is not recognized
];
#[derive(Clone, Serialize, Debug)]
pub struct BadFileEntry {
pub path: PathBuf,
pub modified_date: u64,
pub size: u64,
pub current_extension: String,
pub proper_extensions: String,
}
impl ResultEntry for BadFileEntry {
fn get_path(&self) -> &Path {
&self.path
}
fn get_modified_date(&self) -> u64 {
self.modified_date
}
fn get_size(&self) -> u64 {
self.size
}
}
#[derive(Default)]
pub struct Info {
pub number_of_files_with_bad_extension: usize,
}
pub struct BadExtensions {
common_data: CommonToolData,
information: Info,
files_to_check: Vec<FileEntry>,
bad_extensions_files: Vec<BadFileEntry>,
include_files_without_extension: bool,
}
impl BadExtensions {
pub fn new() -> Self {
Self {
common_data: CommonToolData::new(ToolType::BadExtensions),
information: Info::default(),
files_to_check: Default::default(),
bad_extensions_files: Default::default(),
include_files_without_extension: true,
}
}
#[fun_time(message = "find_bad_extensions_files", level = "info")]
pub fn find_bad_extensions_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&Sender<ProgressData>>) {
self.prepare_items();
if !self.check_files(stop_receiver, progress_sender) {
self.common_data.stopped_search = true;
return;
}
if !self.look_for_bad_extensions_files(stop_receiver, progress_sender) {
self.common_data.stopped_search = true;
return;
}
self.debug_print();
}
#[fun_time(message = "check_files", level = "debug")]
fn check_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&Sender<ProgressData>>) -> bool {
let result = DirTraversalBuilder::new()
.common_data(&self.common_data)
.group_by(|_fe| ())
.stop_receiver(stop_receiver)
.progress_sender(progress_sender)
.build()
.run();
match result {
DirTraversalResult::SuccessFiles { grouped_file_entries, warnings } => {
self.files_to_check = grouped_file_entries.into_values().flatten().collect();
self.common_data.text_messages.warnings.extend(warnings);
true
}
DirTraversalResult::Stopped => false,
}
}
#[fun_time(message = "look_for_bad_extensions_files", level = "debug")]
fn look_for_bad_extensions_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&Sender<ProgressData>>) -> bool {
let (progress_thread_handle, progress_thread_run, atomic_counter, check_was_stopped) =
prepare_thread_handler_common(progress_sender, 1, 1, self.files_to_check.len(), CheckingMethod::None, self.get_cd().tool_type);
let files_to_check = mem::take(&mut self.files_to_check);
let mut hashmap_workarounds: HashMap<&str, Vec<&str>> = Default::default();
for (proper, found) in WORKAROUNDS {
// This should be enabled when items will have only 1 possible workaround items, but looks that some have 2 or even more, so at least for now this is disabled
// if hashmap_workarounds.contains_key(found) {
// panic!("Already have {} key", found);
// }
hashmap_workarounds.entry(found).or_default().push(proper);
}
self.bad_extensions_files = self.verify_extensions(files_to_check, &atomic_counter, stop_receiver, &check_was_stopped, &hashmap_workarounds);
send_info_and_wait_for_ending_all_threads(&progress_thread_run, progress_thread_handle);
// Break if stop was clicked
if check_was_stopped.load(Ordering::Relaxed) {
return false;
}
self.information.number_of_files_with_bad_extension = self.bad_extensions_files.len();
debug!("Found {} files with invalid extension.", self.information.number_of_files_with_bad_extension);
true
}
#[fun_time(message = "verify_extensions", level = "debug")]
fn verify_extensions(
&self,
files_to_check: Vec<FileEntry>,
atomic_counter: &Arc<AtomicUsize>,
stop_receiver: Option<&Receiver<()>>,
check_was_stopped: &AtomicBool,
hashmap_workarounds: &HashMap<&str, Vec<&str>>,
) -> Vec<BadFileEntry> {
files_to_check
.into_par_iter()
.map(|file_entry| {
atomic_counter.fetch_add(1, Ordering::Relaxed);
if check_if_stop_received(stop_receiver) {
check_was_stopped.store(true, Ordering::Relaxed);
return None;
}
// Check what exactly content file contains
let kind = match infer::get_from_path(&file_entry.path) {
Ok(k) => match k {
Some(t) => t,
None => return Some(None),
},
Err(_) => return Some(None),
};
let proper_extension = kind.extension();
let Some(current_extension) = self.get_and_validate_extension(&file_entry, proper_extension) else {
return Some(None);
};
// Check for all extensions that file can use(not sure if it is worth to do it)
let (mut all_available_extensions, valid_extensions) = self.check_for_all_extensions_that_file_can_use(hashmap_workarounds, &current_extension, proper_extension);
if all_available_extensions.is_empty() {
// Not found any extension
return Some(None);
} else if current_extension.is_empty() {
if !self.include_files_without_extension {
return Some(None);
}
} else if all_available_extensions.take(&current_extension).is_some() {
// Found proper extension
return Some(None);
}
Some(Some(BadFileEntry {
path: file_entry.path,
modified_date: file_entry.modified_date,
size: file_entry.size,
current_extension,
proper_extensions: valid_extensions,
}))
})
.while_some()
.filter(Option::is_some)
.map(Option::unwrap)
.collect::<Vec<_>>()
}
fn get_and_validate_extension(&self, file_entry: &FileEntry, proper_extension: &str) -> Option<String> {
let current_extension;
// Extract current extension from file
if let Some(extension) = file_entry.path.extension() {
let extension = extension.to_string_lossy().to_lowercase();
if DISABLED_EXTENSIONS.contains(&extension.as_str()) {
return None;
}
// Text longer than 10 characters is not considered as extension
if extension.len() > 10 {
current_extension = String::new();
} else {
current_extension = extension;
}
} else {
current_extension = String::new();
}
// Already have proper extension, no need to do more things
if current_extension == proper_extension {
return None;
}
Some(current_extension)
}
fn check_for_all_extensions_that_file_can_use(
&self,
hashmap_workarounds: &HashMap<&str, Vec<&str>>,
current_extension: &str,
proper_extension: &str,
) -> (BTreeSet<String>, String) {
let mut all_available_extensions: BTreeSet<String> = Default::default();
let valid_extensions = if current_extension.is_empty() {
String::new()
} else {
for mim in mime_guess::from_ext(proper_extension) {
if let Some(all_ext) = get_mime_extensions(&mim) {
for ext in all_ext {
all_available_extensions.insert((*ext).to_string());
}
}
}
// Workarounds
if let Some(vec_pre) = hashmap_workarounds.get(current_extension) {
for pre in vec_pre {
if all_available_extensions.contains(*pre) {
all_available_extensions.insert(current_extension.to_string());
break;
}
}
}
let mut guessed_multiple_extensions = format!("({proper_extension}) - ");
for ext in &all_available_extensions {
guessed_multiple_extensions.push_str(ext);
guessed_multiple_extensions.push(',');
}
guessed_multiple_extensions.pop();
guessed_multiple_extensions
};
(all_available_extensions, valid_extensions)
}
}
impl Default for BadExtensions {
fn default() -> Self {
Self::new()
}
}
impl DebugPrint for BadExtensions {
fn debug_print(&self) {
if !cfg!(debug_assertions) {
return;
}
println!("---------------DEBUG PRINT---------------");
self.debug_print_common();
println!("-----------------------------------------");
}
}
impl PrintResults for BadExtensions {
fn write_results<T: Write>(&self, writer: &mut T) -> std::io::Result<()> {
writeln!(
writer,
"Results of searching {:?} with excluded directories {:?} and excluded items {:?}",
self.common_data.directories.included_directories,
self.common_data.directories.excluded_directories,
self.common_data.excluded_items.get_excluded_items()
)?;
writeln!(writer, "Found {} files with invalid extension.\n", self.information.number_of_files_with_bad_extension)?;
for file_entry in &self.bad_extensions_files {
writeln!(writer, "{:?} ----- {}", file_entry.path, file_entry.proper_extensions)?;
}
Ok(())
}
fn save_results_to_file_as_json(&self, file_name: &str, pretty_print: bool) -> std::io::Result<()> {
self.save_results_to_file_as_json_internal(file_name, &self.bad_extensions_files, pretty_print)
}
}
impl BadExtensions {
pub const fn get_bad_extensions_files(&self) -> &Vec<BadFileEntry> {
&self.bad_extensions_files
}
pub const fn get_information(&self) -> &Info {
&self.information
}
}
impl CommonData for BadExtensions {
fn get_cd(&self) -> &CommonToolData {
&self.common_data
}
fn get_cd_mut(&mut self) -> &mut CommonToolData {
&mut self.common_data
}
}

@ -1,362 +1,108 @@
use std::collections::BTreeMap;
use std::fs::{File, Metadata};
use std::io::{BufWriter, Write};
use std::path::PathBuf;
use std::sync::atomic::Ordering;
use std::sync::atomic::{AtomicBool, AtomicU64};
use std::sync::Arc;
use std::thread::sleep;
use std::time::Duration;
use std::time::{SystemTime, UNIX_EPOCH};
use std::{fs, thread};
use std::fs;
use std::io::Write;
use crossbeam_channel::Receiver;
use humansize::{file_size_opts as options, FileSize};
use crossbeam_channel::{Receiver, Sender};
use fun_time::fun_time;
use humansize::{format_size, BINARY};
use log::debug;
use rayon::prelude::*;
use crate::common::{Common, LOOP_DURATION};
use crate::common_directory::Directories;
use crate::common_extensions::Extensions;
use crate::common_items::ExcludedItems;
use crate::common_messages::Messages;
use crate::common_traits::{DebugPrint, PrintResults, SaveResults};
use crate::flc;
use crate::localizer_core::generate_translation_hashmap;
use crate::common_dir_traversal::{DirTraversalBuilder, DirTraversalResult, FileEntry, ProgressData, ToolType};
use crate::common_tool::{CommonData, CommonToolData, DeleteMethod};
use crate::common_traits::{DebugPrint, PrintResults};
#[derive(Debug)]
pub struct ProgressData {
pub files_checked: usize,
#[derive(Copy, Clone, Eq, PartialEq)]
pub enum SearchMode {
BiggestFiles,
SmallestFiles,
}
#[derive(Clone)]
pub struct FileEntry {
pub path: PathBuf,
pub size: u64,
pub modified_date: u64,
}
#[derive(Eq, PartialEq, Clone, Debug)]
pub enum DeleteMethod {
None,
Delete,
}
/// Info struck with helpful information's about results
#[derive(Default)]
pub struct Info {
pub number_of_real_files: usize,
}
impl Info {
pub fn new() -> Self {
Default::default()
}
}
/// Struct with required information's to work
pub struct BigFile {
text_messages: Messages,
common_data: CommonToolData,
information: Info,
big_files: BTreeMap<u64, Vec<FileEntry>>,
excluded_items: ExcludedItems,
directories: Directories,
allowed_extensions: Extensions,
recursive_search: bool,
big_files: Vec<FileEntry>,
number_of_files_to_check: usize,
delete_method: DeleteMethod,
stopped_search: bool,
search_mode: SearchMode,
}
impl BigFile {
pub fn new() -> Self {
Self {
text_messages: Default::default(),
information: Info::new(),
common_data: CommonToolData::new(ToolType::BigFile),
information: Info::default(),
big_files: Default::default(),
excluded_items: ExcludedItems::new(),
directories: Directories::new(),
allowed_extensions: Extensions::new(),
recursive_search: true,
number_of_files_to_check: 50,
delete_method: DeleteMethod::None,
stopped_search: false,
search_mode: SearchMode::BiggestFiles,
}
}
pub fn find_big_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) {
self.optimize_directories();
#[fun_time(message = "find_big_files", level = "info")]
pub fn find_big_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&Sender<ProgressData>>) {
self.prepare_items();
if !self.look_for_big_files(stop_receiver, progress_sender) {
self.stopped_search = true;
self.common_data.stopped_search = true;
return;
}
self.delete_files();
self.debug_print();
}
pub fn get_stopped_search(&self) -> bool {
self.stopped_search
}
pub const fn get_big_files(&self) -> &BTreeMap<u64, Vec<FileEntry>> {
&self.big_files
}
pub const fn get_text_messages(&self) -> &Messages {
&self.text_messages
}
pub const fn get_information(&self) -> &Info {
&self.information
}
pub fn set_delete_method(&mut self, delete_method: DeleteMethod) {
self.delete_method = delete_method;
}
pub fn set_recursive_search(&mut self, recursive_search: bool) {
self.recursive_search = recursive_search;
}
/// List of allowed extensions, only files with this extensions will be checking if are duplicates
pub fn set_allowed_extensions(&mut self, allowed_extensions: String) {
self.allowed_extensions.set_allowed_extensions(allowed_extensions, &mut self.text_messages);
}
fn look_for_big_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
let start_time: SystemTime = SystemTime::now();
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
// Add root folders for finding
for id in &self.directories.included_directories {
folders_to_check.push(id.clone());
}
//// PROGRESS THREAD START
let progress_thread_run = Arc::new(AtomicBool::new(true));
let atomic_file_counter = Arc::new(AtomicU64::new(0));
let progress_thread_handle = if let Some(progress_sender) = progress_sender {
let progress_send = progress_sender.clone();
let progress_thread_run = progress_thread_run.clone();
let atomic_file_counter = atomic_file_counter.clone();
thread::spawn(move || loop {
progress_send
.unbounded_send(ProgressData {
files_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
})
.unwrap();
if !progress_thread_run.load(Ordering::Relaxed) {
break;
// #[fun_time(message = "look_for_big_files", level = "debug")]
fn look_for_big_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&Sender<ProgressData>>) -> bool {
let result = DirTraversalBuilder::new()
.group_by(|_fe| ())
.stop_receiver(stop_receiver)
.progress_sender(progress_sender)
.common_data(&self.common_data)
.minimal_file_size(1)
.maximal_file_size(u64::MAX)
.max_stage(0)
.build()
.run();
match result {
DirTraversalResult::SuccessFiles { grouped_file_entries, warnings } => {
let mut all_files = grouped_file_entries.into_values().flatten().collect::<Vec<_>>();
all_files.par_sort_unstable_by_key(|fe| fe.size);
if self.search_mode == SearchMode::BiggestFiles {
all_files.reverse();
}
sleep(Duration::from_millis(LOOP_DURATION as u64));
})
} else {
thread::spawn(|| {})
};
//// PROGRESS THREAD END
while !folders_to_check.is_empty() {
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
// End thread which send info to gui
progress_thread_run.store(false, Ordering::Relaxed);
progress_thread_handle.join().unwrap();
return false;
}
let segments: Vec<_> = folders_to_check
.par_iter()
.map(|current_folder| {
let mut dir_result = vec![];
let mut warnings = vec![];
let mut fe_result = vec![];
// Read current dir childrens
let read_dir = match fs::read_dir(&current_folder) {
Ok(t) => t,
Err(e) => {
warnings.push(flc!(
"core_cannot_open_dir",
generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())])
));
return (dir_result, warnings, fe_result);
}
};
// Check every sub folder/file/link etc.
'dir: for entry in read_dir {
let entry_data = match entry {
Ok(t) => t,
Err(e) => {
warnings.push(flc!(
"core_cannot_read_entry_dir",
generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())])
));
continue 'dir;
}
};
let metadata: Metadata = match entry_data.metadata() {
Ok(t) => t,
Err(e) => {
warnings.push(flc!(
"core_cannot_read_metadata_dir",
generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())])
));
continue 'dir;
}
};
if metadata.is_dir() {
if !self.recursive_search {
continue 'dir;
}
let next_folder = current_folder.join(entry_data.file_name());
if self.directories.is_excluded(&next_folder) {
continue 'dir;
}
if self.excluded_items.is_excluded(&next_folder) {
continue 'dir;
}
dir_result.push(next_folder);
} else if metadata.is_file() {
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
let file_name_lowercase: String = match entry_data.file_name().into_string() {
Ok(t) => t,
Err(_inspected) => {
warnings.push(flc!(
"core_file_not_utf8_name",
generate_translation_hashmap(vec![("name", entry_data.path().display().to_string())])
));
continue 'dir;
}
}
.to_lowercase();
if !self.allowed_extensions.matches_filename(&file_name_lowercase) {
continue 'dir;
}
let current_file_name = current_folder.join(entry_data.file_name());
if self.excluded_items.is_excluded(&current_file_name) {
continue 'dir;
}
let fe: FileEntry = FileEntry {
path: current_file_name.clone(),
size: metadata.len(),
modified_date: match metadata.modified() {
Ok(t) => match t.duration_since(UNIX_EPOCH) {
Ok(d) => d.as_secs(),
Err(_inspected) => {
warnings.push(flc!(
"core_file_modified_before_epoch",
generate_translation_hashmap(vec![("name", current_file_name.display().to_string())])
));
0
}
},
Err(e) => {
warnings.push(flc!(
"core_file_no_modification_date",
generate_translation_hashmap(vec![("name", current_file_name.display().to_string()), ("reason", e.to_string())])
));
0
}
},
};
fe_result.push((fe.size, fe));
}
}
(dir_result, warnings, fe_result)
})
.collect();
// Advance the frontier
folders_to_check.clear();
// Process collected data
for (segment, warnings, fe_result) in segments {
folders_to_check.extend(segment);
self.text_messages.warnings.extend(warnings);
for (size, fe) in fe_result {
self.big_files.entry(size).or_insert_with(Vec::new);
self.big_files.get_mut(&size).unwrap().push(fe);
if all_files.len() > self.number_of_files_to_check {
all_files.truncate(self.number_of_files_to_check);
}
}
}
// End thread which send info to gui
progress_thread_run.store(false, Ordering::Relaxed);
progress_thread_handle.join().unwrap();
self.big_files = all_files;
// Extract n biggest files to new TreeMap
let mut new_map: BTreeMap<u64, Vec<FileEntry>> = Default::default();
for (size, vector) in self.big_files.iter().rev() {
if self.information.number_of_real_files < self.number_of_files_to_check {
for file in vector {
if self.information.number_of_real_files < self.number_of_files_to_check {
new_map.entry(*size).or_insert_with(Vec::new);
new_map.get_mut(size).unwrap().push(file.clone());
self.information.number_of_real_files += 1;
} else {
break;
}
}
} else {
break;
self.common_data.text_messages.warnings.extend(warnings);
debug!("check_files - Found {} biggest/smallest files.", self.big_files.len());
true
}
}
self.big_files = new_map;
Common::print_time(start_time, SystemTime::now(), "look_for_big_files".to_string());
true
}
pub fn set_number_of_files_to_check(&mut self, number_of_files_to_check: usize) {
self.number_of_files_to_check = number_of_files_to_check;
}
/// Setting excluded items which needs to contains * wildcard
/// Are a lot of slower than absolute path, so it should be used to heavy
pub fn set_excluded_items(&mut self, excluded_items: Vec<String>) {
self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages);
}
fn optimize_directories(&mut self) {
self.directories.optimize_directories(self.recursive_search, &mut self.text_messages);
}
pub fn set_included_directory(&mut self, included_directory: Vec<PathBuf>) {
self.directories.set_included_directory(included_directory, &mut self.text_messages);
}
pub fn set_excluded_directory(&mut self, excluded_directory: Vec<PathBuf>) {
self.directories.set_excluded_directory(excluded_directory, &mut self.text_messages);
DirTraversalResult::Stopped => false,
}
}
/// Function to delete files, from filed Vector
fn delete_files(&mut self) {
let start_time: SystemTime = SystemTime::now();
match self.delete_method {
match self.common_data.delete_method {
DeleteMethod::Delete => {
for vec_file_entry in self.big_files.values() {
for file_entry in vec_file_entry {
if fs::remove_file(file_entry.path.clone()).is_err() {
self.text_messages.warnings.push(file_entry.path.display().to_string());
}
for file_entry in &self.big_files {
if fs::remove_file(&file_entry.path).is_err() {
self.common_data.text_messages.warnings.push(file_entry.path.to_string_lossy().to_string());
}
}
}
DeleteMethod::None => {
//Just do nothing
}
_ => unreachable!(),
}
Common::print_time(start_time, SystemTime::now(), "delete_files".to_string());
}
}
@ -367,84 +113,73 @@ impl Default for BigFile {
}
impl DebugPrint for BigFile {
#[allow(dead_code)]
#[allow(unreachable_code)]
/// Debugging printing - only available on debug build
fn debug_print(&self) {
#[cfg(not(debug_assertions))]
{
if !cfg!(debug_assertions) {
return;
}
println!("---------------DEBUG PRINT---------------");
println!("### Information's");
println!("Errors size - {}", self.text_messages.errors.len());
println!("Warnings size - {}", self.text_messages.warnings.len());
println!("Messages size - {}", self.text_messages.messages.len());
println!("### Other");
println!("### INDIVIDUAL DEBUG PRINT ###");
println!("Big files size {} in {} groups", self.information.number_of_real_files, self.big_files.len());
println!("Excluded items - {:?}", self.excluded_items.items);
println!("Included directories - {:?}", self.directories.included_directories);
println!("Excluded directories - {:?}", self.directories.excluded_directories);
println!("Recursive search - {}", self.recursive_search);
println!("Number of files to check - {:?}", self.number_of_files_to_check);
self.debug_print_common();
println!("-----------------------------------------");
}
}
impl SaveResults for BigFile {
/// Saving results to provided file
fn save_results_to_file(&mut self, file_name: &str) -> bool {
let start_time: SystemTime = SystemTime::now();
let file_name: String = match file_name {
"" => "results.txt".to_string(),
k => k.to_string(),
};
let file_handler = match File::create(&file_name) {
Ok(t) => t,
Err(e) => {
self.text_messages.errors.push(format!("Failed to create file {}, reason {}", file_name, e));
return false;
}
};
let mut writer = BufWriter::new(file_handler);
if let Err(e) = writeln!(
impl PrintResults for BigFile {
fn write_results<T: Write>(&self, writer: &mut T) -> std::io::Result<()> {
writeln!(
writer,
"Results of searching {:?} with excluded directories {:?} and excluded items {:?}",
self.directories.included_directories, self.directories.excluded_directories, self.excluded_items.items
) {
self.text_messages.errors.push(format!("Failed to save results to file {}, reason {}", file_name, e));
return false;
}
self.common_data.directories.included_directories,
self.common_data.directories.excluded_directories,
self.common_data.excluded_items.get_excluded_items()
)?;
if self.information.number_of_real_files != 0 {
write!(writer, "{} the biggest files.\n\n", self.information.number_of_real_files).unwrap();
for (size, files) in self.big_files.iter().rev() {
for file_entry in files {
writeln!(writer, "{} ({}) - {}", size.file_size(options::BINARY).unwrap(), size, file_entry.path.display()).unwrap();
}
if self.search_mode == SearchMode::BiggestFiles {
writeln!(writer, "{} the biggest files.\n\n", self.information.number_of_real_files)?;
} else {
writeln!(writer, "{} the smallest files.\n\n", self.information.number_of_real_files)?;
}
for file_entry in &self.big_files {
writeln!(writer, "{} ({}) - {:?}", format_size(file_entry.size, BINARY), file_entry.size, file_entry.path)?;
}
} else {
write!(writer, "Not found any files.").unwrap();
}
Common::print_time(start_time, SystemTime::now(), "save_results_to_file".to_string());
true
Ok(())
}
fn save_results_to_file_as_json(&self, file_name: &str, pretty_print: bool) -> std::io::Result<()> {
self.save_results_to_file_as_json_internal(file_name, &self.big_files, pretty_print)
}
}
impl PrintResults for BigFile {
fn print_results(&self) {
let start_time: SystemTime = SystemTime::now();
for (size, vector) in self.big_files.iter().rev() {
// TODO Align all to same width
for entry in vector {
println!("{} ({} bytes) - {}", size.file_size(options::BINARY).unwrap(), size, entry.path.display());
}
}
Common::print_time(start_time, SystemTime::now(), "print_entries".to_string());
impl CommonData for BigFile {
fn get_cd(&self) -> &CommonToolData {
&self.common_data
}
fn get_cd_mut(&mut self) -> &mut CommonToolData {
&mut self.common_data
}
}
impl BigFile {
pub fn set_search_mode(&mut self, search_mode: SearchMode) {
self.search_mode = search_mode;
}
pub const fn get_big_files(&self) -> &Vec<FileEntry> {
&self.big_files
}
pub const fn get_information(&self) -> &Info {
&self.information
}
pub fn set_number_of_files_to_check(&mut self, number_of_files_to_check: usize) {
self.number_of_files_to_check = number_of_files_to_check;
}
}

File diff suppressed because it is too large Load Diff

@ -1,18 +1,197 @@
#![allow(unused_imports)]
use std::{fs, thread};
// I don't wanna fight with unused imports in this file, so simply ignore it to avoid too much complexity
use std::cmp::Ordering;
use std::ffi::OsString;
use std::fs::{DirEntry, File, OpenOptions};
use std::path::{Path, PathBuf};
use std::sync::atomic::{AtomicBool, AtomicUsize};
use std::sync::{atomic, Arc};
use std::thread::{sleep, JoinHandle};
use std::time::{Duration, Instant, SystemTime};
#[cfg(feature = "heif")]
use anyhow::Result;
use crossbeam_channel::Sender;
use directories_next::ProjectDirs;
use fun_time::fun_time;
use handsome_logger::{ColorChoice, ConfigBuilder, TerminalMode};
use image::{DynamicImage, ImageBuffer, Rgb};
use imagepipe::{ImageSource, Pipeline};
use std::ffi::OsString;
use std::fs;
use std::fs::{File, OpenOptions};
use std::io::BufReader;
use std::path::{Path, PathBuf};
use std::time::SystemTime;
#[cfg(feature = "heif")]
use libheif_rs::{ColorSpace, HeifContext, RgbChroma};
#[cfg(feature = "libraw")]
use libraw::Processor;
use log::{debug, error, info, warn, LevelFilter, Record};
use rawloader::RawLoader;
use symphonia::core::conv::IntoSample;
// #[cfg(feature = "heif")]
// use libheif_rs::LibHeif;
use crate::common_dir_traversal::{CheckingMethod, ProgressData, ToolType};
use crate::common_directory::Directories;
use crate::common_items::{ExcludedItems, SingleExcludedItem};
use crate::common_messages::Messages;
use crate::common_tool::DeleteMethod;
use crate::common_traits::ResultEntry;
use crate::duplicate::make_hard_link;
use crate::CZKAWKA_VERSION;
static NUMBER_OF_THREADS: state::InitCell<usize> = state::InitCell::new();
static ALL_AVAILABLE_THREADS: state::InitCell<usize> = state::InitCell::new();
pub const DEFAULT_THREAD_SIZE: usize = 8 * 1024 * 1024; // 8 MB
pub const DEFAULT_WORKER_THREAD_SIZE: usize = 4 * 1024 * 1024; // 4 MB
pub fn get_number_of_threads() -> usize {
let data = NUMBER_OF_THREADS.get();
if *data >= 1 {
*data
} else {
get_all_available_threads()
}
}
fn filtering_messages(record: &Record) -> bool {
if let Some(module_path) = record.module_path() {
module_path.starts_with("czkawka") || module_path.starts_with("krokiet")
} else {
true
}
}
pub fn setup_logger(disabled_printing: bool) {
let log_level = if disabled_printing { LevelFilter::Off } else { LevelFilter::Info };
let config = ConfigBuilder::default().set_level(log_level).set_message_filtering(Some(filtering_messages)).build();
handsome_logger::TermLogger::init(config, TerminalMode::Mixed, ColorChoice::Always).unwrap();
}
pub fn get_all_available_threads() -> usize {
*ALL_AVAILABLE_THREADS.get_or_init(|| {
let available_threads = thread::available_parallelism().map(std::num::NonZeroUsize::get).unwrap_or(1);
ALL_AVAILABLE_THREADS.set(available_threads);
available_threads
})
}
/// Class for common functions used across other class/functions
pub fn print_version_mode() {
let rust_version = env!("RUST_VERSION_INTERNAL");
let debug_release = if cfg!(debug_assertions) { "debug" } else { "release" };
pub const LOOP_DURATION: u32 = 200; //ms
let processors = get_all_available_threads();
pub struct Common();
let info = os_info::get();
info!(
"App version: {CZKAWKA_VERSION}, {debug_release} mode, rust {rust_version}, os {} {} [{} {}], {processors} cpu/threads",
info.os_type(),
info.version(),
std::env::consts::ARCH,
info.bitness(),
);
if cfg!(debug_assertions) {
warn!("You are running debug version of app which is a lot of slower than release version.");
}
if option_env!("USING_CRANELIFT").is_some() {
warn!("You are running app with cranelift which is intended only for fast compilation, not runtime performance.");
}
}
pub fn set_default_number_of_threads() {
set_number_of_threads(get_all_available_threads());
}
pub fn set_number_of_threads(thread_number: usize) {
NUMBER_OF_THREADS.set(thread_number);
let additional_message = if thread_number == 0 {
" (0 - means that all available threads will be used)"
} else {
""
};
debug!("Number of threads set to {thread_number}{additional_message}");
rayon::ThreadPoolBuilder::new()
.num_threads(get_number_of_threads())
.stack_size(DEFAULT_WORKER_THREAD_SIZE)
.build_global()
.unwrap();
}
pub const RAW_IMAGE_EXTENSIONS: &[&str] = &[
"mrw", "arw", "srf", "sr2", "mef", "orf", "srw", "erf", "kdc", "kdc", "dcs", "rw2", "raf", "dcr", "dng", "pef", "crw", "iiq", "3fr", "nrw", "nef", "mos", "cr2", "ari",
];
pub const IMAGE_RS_EXTENSIONS: &[&str] = &["jpg", "jpeg", "png", "bmp", "tiff", "tif", "tga", "ff", "jif", "jfi", "webp", "gif", "ico", "exr", "qoi"];
pub const IMAGE_RS_SIMILAR_IMAGES_EXTENSIONS: &[&str] = &["jpg", "jpeg", "png", "tiff", "tif", "tga", "ff", "jif", "jfi", "bmp", "webp", "exr", "qoi"];
pub const IMAGE_RS_BROKEN_FILES_EXTENSIONS: &[&str] = &[
"jpg", "jpeg", "png", "tiff", "tif", "tga", "ff", "jif", "jfi", "gif", "bmp", "ico", "jfif", "jpe", "pnz", "dib", "webp", "exr",
];
pub const HEIC_EXTENSIONS: &[&str] = &["heif", "heifs", "heic", "heics", "avci", "avcs", "avifs"];
pub const ZIP_FILES_EXTENSIONS: &[&str] = &["zip", "jar"];
pub const PDF_FILES_EXTENSIONS: &[&str] = &["pdf"];
pub const AUDIO_FILES_EXTENSIONS: &[&str] = &[
"mp3", "flac", "wav", "ogg", "m4a", "aac", "aiff", "pcm", "aif", "aiff", "aifc", "m3a", "mp2", "mp4a", "mp2a", "mpga", "wave", "weba", "wma", "oga",
];
pub const VIDEO_FILES_EXTENSIONS: &[&str] = &[
"mp4", "mpv", "flv", "mp4a", "webm", "mpg", "mp2", "mpeg", "m4p", "m4v", "avi", "wmv", "qt", "mov", "swf", "mkv",
];
pub const LOOP_DURATION: u32 = 20; //ms
pub const SEND_PROGRESS_DATA_TIME_BETWEEN: u32 = 200; //ms
pub fn remove_folder_if_contains_only_empty_folders(path: impl AsRef<Path>, remove_to_trash: bool) -> Result<(), String> {
let path = path.as_ref();
if !path.is_dir() {
return Err(format!("Trying to remove folder {path:?} which is not a directory",));
}
let mut entries_to_check = Vec::new();
let Ok(initial_entry) = path.read_dir() else {
return Err(format!("Cannot read directory {path:?}",));
};
for entry in initial_entry {
if let Ok(entry) = entry {
entries_to_check.push(entry);
} else {
return Err(format!("Cannot read entry from directory {path:?}"));
}
}
loop {
let Some(entry) = entries_to_check.pop() else {
break;
};
let Some(file_type) = entry.file_type().ok() else {
return Err(format!("Folder contains file with unknown type {:?} inside {path:?}", entry.path()));
};
if !file_type.is_dir() {
return Err(format!("Folder contains file {:?} inside {path:?}", entry.path(),));
}
let Ok(internal_read_dir) = entry.path().read_dir() else {
return Err(format!("Cannot read directory {:?} inside {path:?}", entry.path()));
};
for internal_elements in internal_read_dir {
if let Ok(internal_element) = internal_elements {
entries_to_check.push(internal_element);
} else {
return Err(format!("Cannot read entry from directory {:?} inside {path:?}", entry.path()));
}
}
}
if remove_to_trash {
trash::delete(path).map_err(|e| format!("Cannot move folder {path:?} to trash, reason {e}"))
} else {
fs::remove_dir_all(path).map_err(|e| format!("Cannot remove directory {path:?}, reason {e}"))
}
}
pub fn open_cache_folder(cache_file_name: &str, save_to_cache: bool, use_json: bool, warnings: &mut Vec<String>) -> Option<((Option<File>, PathBuf), (Option<File>, PathBuf))> {
if let Some(proj_dirs) = ProjectDirs::from("pl", "Qarmin", "Czkawka") {
@ -26,18 +205,18 @@ pub fn open_cache_folder(cache_file_name: &str, save_to_cache: bool, use_json: b
if save_to_cache {
if cache_dir.exists() {
if !cache_dir.is_dir() {
warnings.push(format!("Config dir {} is a file!", cache_dir.display()));
warnings.push(format!("Config dir {cache_dir:?} is a file!"));
return None;
}
} else if let Err(e) = fs::create_dir_all(&cache_dir) {
warnings.push(format!("Cannot create config dir {}, reason {}", cache_dir.display(), e));
warnings.push(format!("Cannot create config dir {cache_dir:?}, reason {e}"));
return None;
}
file_handler_default = Some(match OpenOptions::new().truncate(true).write(true).create(true).open(&cache_file) {
Ok(t) => t,
Err(e) => {
warnings.push(format!("Cannot create or open cache file {}, reason {}", cache_file.display(), e));
warnings.push(format!("Cannot create or open cache file {cache_file:?}, reason {e}"));
return None;
}
});
@ -45,7 +224,7 @@ pub fn open_cache_folder(cache_file_name: &str, save_to_cache: bool, use_json: b
file_handler_json = Some(match OpenOptions::new().truncate(true).write(true).create(true).open(&cache_file_json) {
Ok(t) => t,
Err(e) => {
warnings.push(format!("Cannot create or open cache file {}, reason {}", cache_file_json.display(), e));
warnings.push(format!("Cannot create or open cache file {cache_file_json:?}, reason {e}"));
return None;
}
});
@ -55,12 +234,9 @@ pub fn open_cache_folder(cache_file_name: &str, save_to_cache: bool, use_json: b
file_handler_default = Some(t);
} else {
if use_json {
file_handler_json = Some(match OpenOptions::new().read(true).open(&cache_file_json) {
Ok(t) => t,
Err(_) => return None,
});
file_handler_json = Some(OpenOptions::new().read(true).open(&cache_file_json).ok()?);
} else {
// messages.push(format!("Cannot find or open cache file {}", cache_file.display())); // No error or warning
// messages.push(format!("Cannot find or open cache file {cache_file:?}")); // No error or warning
return None;
}
}
@ -70,211 +246,440 @@ pub fn open_cache_folder(cache_file_name: &str, save_to_cache: bool, use_json: b
None
}
#[cfg(feature = "heif")]
pub fn get_dynamic_image_from_heic(path: &str) -> Result<DynamicImage> {
// let libheif = LibHeif::new();
let im = HeifContext::read_from_file(path)?;
let handle = im.primary_image_handle()?;
// let image = libheif.decode(&handle, ColorSpace::Rgb(RgbChroma::Rgb), None)?; // Enable when using libheif 0.19
let image = handle.decode(ColorSpace::Rgb(RgbChroma::Rgb), None)?;
let width = image.width();
let height = image.height();
let planes = image.planes();
let interleaved_plane = planes.interleaved.unwrap();
ImageBuffer::from_raw(width, height, interleaved_plane.data.to_owned())
.map(DynamicImage::ImageRgb8)
.ok_or_else(|| anyhow::anyhow!("Failed to create image buffer"))
}
#[cfg(feature = "libraw")]
pub fn get_dynamic_image_from_raw_image(path: impl AsRef<Path>) -> Option<DynamicImage> {
let buf = fs::read(path.as_ref()).ok()?;
let processor = Processor::new();
let start_timer = Instant::now();
let processed = processor.process_8bit(&buf).expect("processing successful");
println!("Processing took {:?}", start_timer.elapsed());
let width = processed.width();
let height = processed.height();
let data = processed.to_vec();
let buffer = ImageBuffer::from_raw(width, height, data)?;
// Utwórz DynamicImage z ImageBuffer
Some(DynamicImage::ImageRgb8(buffer))
}
#[cfg(not(feature = "libraw"))]
pub fn get_dynamic_image_from_raw_image(path: impl AsRef<Path> + std::fmt::Debug) -> Option<DynamicImage> {
let file_handler = match OpenOptions::new().read(true).open(&path) {
Ok(t) => t,
Err(_e) => {
return None;
}
};
let mut start_timer = Instant::now();
let mut times = Vec::new();
let mut reader = BufReader::new(file_handler);
let raw = match rawloader::decode(&mut reader) {
Ok(raw) => raw,
Err(_e) => {
return None;
}
};
let loader = RawLoader::new();
let raw = loader.decode_file(path.as_ref()).ok()?;
times.push(("After decoding", start_timer.elapsed()));
start_timer = Instant::now();
let width = raw.width;
let height = raw.height;
let source = ImageSource::Raw(raw);
let mut pipeline = match Pipeline::new_from_source(source, width, height, true) {
Ok(pipeline) => pipeline,
Err(_e) => {
return None;
}
};
times.push(("After creating source", start_timer.elapsed()));
start_timer = Instant::now();
let mut pipeline = Pipeline::new_from_source(source).ok()?;
times.push(("After creating pipeline", start_timer.elapsed()));
start_timer = Instant::now();
pipeline.run(None);
let image = match pipeline.output_8bit(None) {
Ok(image) => image,
Err(_e) => {
return None;
}
};
let image = pipeline.output_8bit(None).ok()?;
let image = match ImageBuffer::<Rgb<u8>, Vec<u8>>::from_raw(image.width as u32, image.height as u32, image.data) {
Some(image) => image,
None => {
return None;
}
};
times.push(("After creating image", start_timer.elapsed()));
start_timer = Instant::now();
let image = ImageBuffer::<Rgb<u8>, Vec<u8>>::from_raw(image.width as u32, image.height as u32, image.data)?;
times.push(("After creating image buffer", start_timer.elapsed()));
start_timer = Instant::now();
// println!("Properly hashed {:?}", path);
Some(image::DynamicImage::ImageRgb8(image))
let res = Some(DynamicImage::ImageRgb8(image));
times.push(("After creating dynamic image", start_timer.elapsed()));
let str_timer = times.into_iter().map(|(name, time)| format!("{name}: {time:?}")).collect::<Vec<_>>().join(", ");
debug!("Loading raw image --- {str_timer}");
res
}
impl Common {
/// Printing time which took between start and stop point and prints also function name
#[allow(unused_variables)]
pub fn print_time(start_time: SystemTime, end_time: SystemTime, function_name: String) {
#[cfg(debug_assertions)]
println!(
"Execution of function \"{}\" took {:?}",
function_name,
end_time.duration_since(start_time).expect("Time cannot go reverse.")
);
pub fn split_path(path: &Path) -> (String, String) {
match (path.parent(), path.file_name()) {
(Some(dir), Some(file)) => (dir.to_string_lossy().to_string(), file.to_string_lossy().into_owned()),
(Some(dir), None) => (dir.to_string_lossy().to_string(), String::new()),
(None, _) => (String::new(), String::new()),
}
}
pub fn delete_multiple_entries(entries: &[String]) -> Vec<String> {
let mut path: &Path;
let mut warnings: Vec<String> = Vec::new();
for entry in entries {
path = Path::new(entry);
if path.is_dir() {
if let Err(e) = fs::remove_dir_all(&entry) {
warnings.push(format!("Failed to remove folder {}, reason {}", entry, e));
}
} else if let Err(e) = fs::remove_file(&entry) {
warnings.push(format!("Failed to remove file {}, reason {}", entry, e));
}
}
warnings
}
pub fn delete_one_entry(entry: &str) -> String {
let path: &Path = Path::new(entry);
let mut warning: String = String::from("");
if path.is_dir() {
if let Err(e) = fs::remove_dir_all(&entry) {
warning = format!("Failed to remove folder {}, reason {}", entry, e)
}
} else if let Err(e) = fs::remove_file(&entry) {
warning = format!("Failed to remove file {}, reason {}", entry, e)
}
warning
pub fn split_path_compare(path_a: &Path, path_b: &Path) -> Ordering {
match path_a.parent().cmp(&path_b.parent()) {
Ordering::Equal => path_a.file_name().cmp(&path_b.file_name()),
other => other,
}
}
/// Function to check if directory match expression
pub fn regex_check(expression: &str, directory: impl AsRef<Path>) -> bool {
if expression == "*" {
return true;
}
pub fn create_crash_message(library_name: &str, file_path: &str, home_library_url: &str) -> String {
format!("{library_name} library crashed when opening \"{file_path}\", please check if this is fixed with the latest version of {library_name} and if it is not fixed, please report bug here - {home_library_url}")
}
let temp_splits: Vec<&str> = expression.split('*').collect();
let mut splits: Vec<&str> = Vec::new();
for i in temp_splits {
if !i.is_empty() {
splits.push(i);
}
}
if splits.is_empty() {
pub fn regex_check(expression_item: &SingleExcludedItem, directory_name: &str) -> bool {
if expression_item.expression_splits.is_empty() {
return true;
}
// Early checking if directory contains all parts needed by expression
for split in &expression_item.unique_extensions_splits {
if !directory_name.contains(split) {
return false;
}
}
// `git*` shouldn't be true for `/gitsfafasfs`
if !expression_item.expression.starts_with('*') && directory_name.find(&expression_item.expression_splits[0]).unwrap() > 0 {
return false;
}
// `*home` shouldn't be true for `/homeowner`
if !expression_item.expression.ends_with('*') && !directory_name.ends_with(expression_item.expression_splits.last().unwrap()) {
return false;
}
// At the end we check if parts between * are correctly positioned
let mut last_split_point = directory_name.find(&expression_item.expression_splits[0]).unwrap();
let mut current_index: usize = 0;
let mut found_index: usize;
for spl in &expression_item.expression_splits[1..] {
found_index = match directory_name[current_index..].find(spl) {
Some(t) => t,
None => return false,
};
current_index = last_split_point + spl.len();
last_split_point = found_index + current_index;
}
true
}
// Get rid of non unicode characters
let directory = directory.as_ref().to_string_lossy();
pub fn normalize_windows_path(path_to_change: impl AsRef<Path>) -> PathBuf {
let path = path_to_change.as_ref();
// Early checking if directory contains all parts needed by expression
for split in &splits {
if !directory.contains(split) {
return false;
// Don't do anything, because network path may be case intensive
if path.to_string_lossy().starts_with('\\') {
return path.to_path_buf();
}
match path.to_str() {
Some(path) if path.is_char_boundary(1) => {
let replaced = path.replace('/', "\\");
let mut new_path = OsString::new();
if replaced[1..].starts_with(':') {
new_path.push(replaced[..1].to_ascii_uppercase());
new_path.push(replaced[1..].to_ascii_lowercase());
} else {
new_path.push(replaced.to_ascii_lowercase());
}
PathBuf::from(new_path)
}
_ => path.to_path_buf(),
}
}
let mut position_of_splits: Vec<usize> = Vec::new();
pub fn check_folder_children(
dir_result: &mut Vec<PathBuf>,
warnings: &mut Vec<String>,
entry_data: &DirEntry,
recursive_search: bool,
directories: &Directories,
excluded_items: &ExcludedItems,
) {
if !recursive_search {
return;
}
// `git*` shouldn't be true for `/gitsfafasfs`
if !expression.starts_with('*') && directory.find(&splits[0]).unwrap() > 0 {
return false;
}
// `*home` shouldn't be true for `/homeowner`
if !expression.ends_with('*') && !directory.ends_with(splits.last().unwrap()) {
return false;
}
let next_item = entry_data.path();
if directories.is_excluded(&next_item) {
return;
}
// At the end we check if parts between * are correctly positioned
position_of_splits.push(directory.find(&splits[0]).unwrap());
let mut current_index: usize;
let mut found_index: usize;
for i in splits[1..].iter().enumerate() {
current_index = *position_of_splits.get(i.0).unwrap() + i.1.len();
found_index = match directory[current_index..].find(i.1) {
Some(t) => t,
None => return false,
};
position_of_splits.push(found_index + current_index);
if excluded_items.is_excluded(&next_item) {
return;
}
#[cfg(target_family = "unix")]
if directories.exclude_other_filesystems() {
match directories.is_on_other_filesystems(&next_item) {
Ok(true) => return,
Err(e) => warnings.push(e),
_ => (),
}
true
}
pub fn normalize_windows_path(path_to_change: impl AsRef<Path>) -> PathBuf {
let path = path_to_change.as_ref();
dir_result.push(next_item);
}
// Don't do anything, because network path may be case intensive
if path.to_string_lossy().starts_with('\\') {
return path.to_path_buf();
}
// Here we assume, that internal Vec<> have at least 1 object
#[allow(clippy::ptr_arg)]
pub fn delete_files_custom<T>(items: &Vec<&Vec<T>>, delete_method: &DeleteMethod, text_messages: &mut Messages, dry_run: bool) -> (u64, usize, usize)
where
T: ResultEntry + Clone,
{
let res = items
.iter()
.map(|values| {
let mut gained_space: u64 = 0;
let mut removed_files: usize = 0;
let mut failed_to_remove_files: usize = 0;
let mut infos = Vec::new();
let mut errors = Vec::new();
let mut all_values = (*values).clone();
let len = all_values.len();
// Sorted from oldest to newest - from smallest value to bigger
all_values.sort_unstable_by_key(ResultEntry::get_modified_date);
if delete_method == &DeleteMethod::HardLink {
let original_file = &all_values[0];
for file_entry in &all_values[1..] {
if dry_run {
infos.push(format!(
"dry_run - would create hardlink from {:?} to {:?}",
original_file.get_path(),
file_entry.get_path()
));
} else {
if dry_run {
infos.push(format!("Replace file {:?} with hard link to {:?}", original_file.get_path(), file_entry.get_path()));
} else {
if let Err(e) = make_hard_link(original_file.get_path(), file_entry.get_path()) {
errors.push(format!(
"Cannot create hard link from {:?} to {:?} - {}",
file_entry.get_path(),
original_file.get_path(),
e
));
failed_to_remove_files += 1;
} else {
gained_space += 1;
removed_files += 1;
}
}
}
}
return (infos, errors, gained_space, removed_files, failed_to_remove_files);
}
let items = match delete_method {
DeleteMethod::Delete => &all_values,
DeleteMethod::AllExceptNewest => &all_values[..(len - 1)],
DeleteMethod::AllExceptOldest => &all_values[1..],
DeleteMethod::OneOldest => &all_values[..1],
DeleteMethod::OneNewest => &all_values[(len - 1)..],
DeleteMethod::HardLink | DeleteMethod::None => unreachable!("HardLink and None should be handled before"),
};
match path.to_str() {
Some(path) if path.is_char_boundary(1) => {
let replaced = path.replace('/', "\\");
let mut new_path = OsString::new();
if replaced[1..].starts_with(':') {
new_path.push(replaced[..1].to_ascii_uppercase());
new_path.push(replaced[1..].to_ascii_lowercase());
for i in items {
if dry_run {
infos.push(format!("dry_run - would delete file: {:?}", i.get_path()));
} else {
new_path.push(replaced.to_ascii_lowercase());
if let Err(e) = fs::remove_file(i.get_path()) {
errors.push(format!("Cannot delete file: {:?} - {e}", i.get_path()));
failed_to_remove_files += 1;
} else {
removed_files += 1;
gained_space += i.get_size();
}
}
PathBuf::from(new_path)
}
_ => path.to_path_buf(),
(infos, errors, gained_space, removed_files, failed_to_remove_files)
})
.collect::<Vec<_>>();
let mut gained_space = 0;
let mut removed_files = 0;
let mut failed_to_remove_files = 0;
for (infos, errors, gained_space_v, removed_files_v, failed_to_remove_files_v) in res {
text_messages.messages.extend(infos);
text_messages.errors.extend(errors);
gained_space += gained_space_v;
removed_files += removed_files_v;
failed_to_remove_files += failed_to_remove_files_v;
}
(gained_space, removed_files, failed_to_remove_files)
}
pub fn filter_reference_folders_generic<T>(entries_to_check: Vec<Vec<T>>, directories: &Directories) -> Vec<(T, Vec<T>)>
where
T: ResultEntry,
{
entries_to_check
.into_iter()
.filter_map(|vec_file_entry| {
let (mut files_from_referenced_folders, normal_files): (Vec<_>, Vec<_>) =
vec_file_entry.into_iter().partition(|e| directories.is_in_referenced_directory(e.get_path()));
if files_from_referenced_folders.is_empty() || normal_files.is_empty() {
None
} else {
Some((files_from_referenced_folders.pop().unwrap(), normal_files))
}
})
.collect::<Vec<(T, Vec<T>)>>()
}
pub fn prepare_thread_handler_common(
progress_sender: Option<&Sender<ProgressData>>,
current_stage: u8,
max_stage: u8,
max_value: usize,
checking_method: CheckingMethod,
tool_type: ToolType,
) -> (JoinHandle<()>, Arc<AtomicBool>, Arc<AtomicUsize>, AtomicBool) {
assert_ne!(tool_type, ToolType::None, "ToolType::None should not exist");
let progress_thread_run = Arc::new(AtomicBool::new(true));
let atomic_counter = Arc::new(AtomicUsize::new(0));
let check_was_stopped = AtomicBool::new(false);
let progress_thread_sender = if let Some(progress_sender) = progress_sender {
let progress_send = progress_sender.clone();
let progress_thread_run = progress_thread_run.clone();
let atomic_counter = atomic_counter.clone();
thread::spawn(move || {
// Use earlier time, to send immediately first message
let mut time_since_last_send = SystemTime::now() - Duration::from_secs(10u64);
loop {
if time_since_last_send.elapsed().unwrap().as_millis() > SEND_PROGRESS_DATA_TIME_BETWEEN as u128 {
progress_send
.send(ProgressData {
checking_method,
current_stage,
max_stage,
entries_checked: atomic_counter.load(atomic::Ordering::Relaxed),
entries_to_check: max_value,
tool_type,
})
.unwrap();
time_since_last_send = SystemTime::now();
}
if !progress_thread_run.load(atomic::Ordering::Relaxed) {
break;
}
sleep(Duration::from_millis(LOOP_DURATION as u64));
}
})
} else {
thread::spawn(|| {})
};
(progress_thread_sender, progress_thread_run, atomic_counter, check_was_stopped)
}
#[inline]
pub fn check_if_stop_received(stop_receiver: Option<&crossbeam_channel::Receiver<()>>) -> bool {
if let Some(stop_receiver) = stop_receiver {
if stop_receiver.try_recv().is_ok() {
return true;
}
}
false
}
#[fun_time(message = "send_info_and_wait_for_ending_all_threads", level = "debug")]
pub fn send_info_and_wait_for_ending_all_threads(progress_thread_run: &Arc<AtomicBool>, progress_thread_handle: JoinHandle<()>) {
progress_thread_run.store(false, atomic::Ordering::Relaxed);
progress_thread_handle.join().unwrap();
}
#[cfg(test)]
mod test {
use std::path::PathBuf;
use std::fs;
use std::io::Write;
use std::path::{Path, PathBuf};
use tempfile::tempdir;
use crate::common::Common;
use crate::common::{normalize_windows_path, regex_check, remove_folder_if_contains_only_empty_folders};
use crate::common_items::new_excluded_item;
#[test]
fn test_remove_folder_if_contains_only_empty_folders() {
let dir = tempdir().unwrap();
let sub_dir = dir.path().join("sub_dir");
fs::create_dir(&sub_dir).unwrap();
// Test with empty directory
assert!(remove_folder_if_contains_only_empty_folders(&sub_dir, false).is_ok());
assert!(!Path::new(&sub_dir).exists());
// Test with directory containing an empty directory
fs::create_dir(&sub_dir).unwrap();
fs::create_dir(sub_dir.join("empty_sub_dir")).unwrap();
assert!(remove_folder_if_contains_only_empty_folders(&sub_dir, false).is_ok());
assert!(!Path::new(&sub_dir).exists());
// Test with directory containing a file
fs::create_dir(&sub_dir).unwrap();
let mut file = fs::File::create(sub_dir.join("file.txt")).unwrap();
writeln!(file, "Hello, world!").unwrap();
assert!(remove_folder_if_contains_only_empty_folders(&sub_dir, false).is_err());
assert!(Path::new(&sub_dir).exists());
}
#[test]
fn test_regex() {
assert!(Common::regex_check("*home*", "/home/rafal"));
assert!(Common::regex_check("*home", "/home"));
assert!(Common::regex_check("*home/", "/home/"));
assert!(Common::regex_check("*home/*", "/home/"));
assert!(Common::regex_check("*.git*", "/home/.git"));
assert!(Common::regex_check("*/home/rafal*rafal*rafal*rafal*", "/home/rafal/rafalrafalrafal"));
assert!(Common::regex_check("AAA", "AAA"));
assert!(Common::regex_check("AAA*", "AAABDGG/QQPW*"));
assert!(!Common::regex_check("*home", "/home/"));
assert!(!Common::regex_check("*home", "/homefasfasfasfasf/"));
assert!(!Common::regex_check("*home", "/homefasfasfasfasf"));
assert!(!Common::regex_check("rafal*afal*fal", "rafal"));
assert!(!Common::regex_check("rafal*a", "rafal"));
assert!(!Common::regex_check("AAAAAAAA****", "/AAAAAAAAAAAAAAAAA"));
assert!(!Common::regex_check("*.git/*", "/home/.git"));
assert!(!Common::regex_check("*home/*koc", "/koc/home/"));
assert!(!Common::regex_check("*home/", "/home"));
assert!(!Common::regex_check("*TTT", "/GGG"));
#[cfg(target_family = "windows")]
{
assert!(Common::regex_check("*\\home", "C:\\home"));
assert!(Common::regex_check("*/home", "C:\\home"));
assert!(regex_check(&new_excluded_item("*"), "/home/rafal"));
assert!(regex_check(&new_excluded_item("*home*"), "/home/rafal"));
assert!(regex_check(&new_excluded_item("*home"), "/home"));
assert!(regex_check(&new_excluded_item("*home/"), "/home/"));
assert!(regex_check(&new_excluded_item("*home/*"), "/home/"));
assert!(regex_check(&new_excluded_item("*.git*"), "/home/.git"));
assert!(regex_check(&new_excluded_item("*/home/rafal*rafal*rafal*rafal*"), "/home/rafal/rafalrafalrafal"));
assert!(regex_check(&new_excluded_item("AAA"), "AAA"));
assert!(regex_check(&new_excluded_item("AAA*"), "AAABDGG/QQPW*"));
assert!(!regex_check(&new_excluded_item("*home"), "/home/"));
assert!(!regex_check(&new_excluded_item("*home"), "/homefasfasfasfasf/"));
assert!(!regex_check(&new_excluded_item("*home"), "/homefasfasfasfasf"));
assert!(!regex_check(&new_excluded_item("rafal*afal*fal"), "rafal"));
assert!(!regex_check(&new_excluded_item("rafal*a"), "rafal"));
assert!(!regex_check(&new_excluded_item("AAAAAAAA****"), "/AAAAAAAAAAAAAAAAA"));
assert!(!regex_check(&new_excluded_item("*.git/*"), "/home/.git"));
assert!(!regex_check(&new_excluded_item("*home/*koc"), "/koc/home/"));
assert!(!regex_check(&new_excluded_item("*home/"), "/home"));
assert!(!regex_check(&new_excluded_item("*TTT"), "/GGG"));
assert!(regex_check(
&new_excluded_item("*/home/*/.local/share/containers"),
"/var/home/roman/.local/share/containers"
));
if cfg!(target_family = "windows") {
assert!(regex_check(&new_excluded_item("*\\home"), "C:\\home"));
assert!(regex_check(&new_excluded_item("*/home"), "C:\\home"));
}
}
#[test]
fn test_windows_path() {
assert_eq!(PathBuf::from("C:\\path.txt"), Common::normalize_windows_path("c:/PATH.tXt"));
assert_eq!(PathBuf::from("H:\\reka\\weza\\roman.txt"), Common::normalize_windows_path("h:/RekA/Weza\\roMan.Txt"));
assert_eq!(PathBuf::from("T:\\a"), Common::normalize_windows_path("T:\\A"));
assert_eq!(PathBuf::from("\\\\aBBa"), Common::normalize_windows_path("\\\\aBBa"));
assert_eq!(PathBuf::from("a"), Common::normalize_windows_path("a"));
assert_eq!(PathBuf::from(""), Common::normalize_windows_path(""));
assert_eq!(PathBuf::from("C:\\path.txt"), normalize_windows_path("c:/PATH.tXt"));
assert_eq!(PathBuf::from("H:\\reka\\weza\\roman.txt"), normalize_windows_path("h:/RekA/Weza\\roMan.Txt"));
assert_eq!(PathBuf::from("T:\\a"), normalize_windows_path("T:\\A"));
assert_eq!(PathBuf::from("\\\\aBBa"), normalize_windows_path("\\\\aBBa"));
assert_eq!(PathBuf::from("a"), normalize_windows_path("a"));
assert_eq!(PathBuf::from(""), normalize_windows_path(""));
}
}

@ -0,0 +1,241 @@
use std::collections::BTreeMap;
use std::io::{BufReader, BufWriter};
use fun_time::fun_time;
use image::imageops::FilterType;
use image_hasher::HashAlg;
use log::debug;
use rayon::iter::{IntoParallelIterator, ParallelIterator};
use serde::{Deserialize, Serialize};
use crate::common;
use crate::common_messages::Messages;
use crate::common_traits::ResultEntry;
use crate::duplicate::HashType;
use crate::similar_images::{convert_algorithm_to_string, convert_filters_to_string};
const CACHE_VERSION: &str = "70";
pub fn get_broken_files_cache_file() -> String {
format!("cache_broken_files_{CACHE_VERSION}.bin")
}
pub fn get_similar_images_cache_file(hash_size: &u8, hash_alg: &HashAlg, image_filter: &FilterType) -> String {
format!(
"cache_similar_images_{hash_size}_{}_{}_{CACHE_VERSION}.bin",
convert_algorithm_to_string(hash_alg),
convert_filters_to_string(image_filter),
)
}
pub fn get_similar_videos_cache_file() -> String {
format!("cache_similar_videos_{CACHE_VERSION}.bin")
}
pub fn get_similar_music_cache_file(checking_tags: bool) -> String {
if checking_tags {
format!("cache_same_music_tags_{CACHE_VERSION}.bin")
} else {
format!("cache_same_music_fingerprints_{CACHE_VERSION}.bin")
}
}
pub fn get_duplicate_cache_file(type_of_hash: &HashType, is_prehash: bool) -> String {
let prehash_str = if is_prehash { "_prehash" } else { "" };
format!("cache_duplicates_{type_of_hash:?}{prehash_str}_{CACHE_VERSION}.bin")
}
#[fun_time(message = "save_cache_to_file_generalized", level = "debug")]
pub fn save_cache_to_file_generalized<T>(cache_file_name: &str, hashmap: &BTreeMap<String, T>, save_also_as_json: bool, minimum_file_size: u64) -> Messages
where
T: Serialize + ResultEntry + Sized + Send + Sync,
{
let mut text_messages = Messages::new();
if let Some(((file_handler, cache_file), (file_handler_json, cache_file_json))) =
common::open_cache_folder(cache_file_name, true, save_also_as_json, &mut text_messages.warnings)
{
let hashmap_to_save = hashmap.values().filter(|t| t.get_size() >= minimum_file_size).collect::<Vec<_>>();
{
let writer = BufWriter::new(file_handler.unwrap()); // Unwrap because cannot fail here
if let Err(e) = bincode::serialize_into(writer, &hashmap_to_save) {
text_messages.warnings.push(format!("Cannot write data to cache file {cache_file:?}, reason {e}"));
debug!("Failed to save cache to file {cache_file:?}");
return text_messages;
}
debug!("Saved binary to file {cache_file:?}");
}
if save_also_as_json {
if let Some(file_handler_json) = file_handler_json {
let writer = BufWriter::new(file_handler_json);
if let Err(e) = serde_json::to_writer(writer, &hashmap_to_save) {
text_messages.warnings.push(format!("Cannot write data to cache file {cache_file_json:?}, reason {e}"));
debug!("Failed to save cache to file {cache_file_json:?}");
return text_messages;
}
debug!("Saved json to file {cache_file_json:?}");
}
}
text_messages.messages.push(format!("Properly saved to file {} cache entries.", hashmap.len()));
debug!("Properly saved to file {} cache entries.", hashmap.len());
} else {
debug!("Failed to save cache to file {cache_file_name} because not exists");
}
text_messages
}
#[fun_time(message = "load_cache_from_file_generalized_by_path", level = "debug")]
pub fn load_cache_from_file_generalized_by_path<T>(cache_file_name: &str, delete_outdated_cache: bool, used_files: &BTreeMap<String, T>) -> (Messages, Option<BTreeMap<String, T>>)
where
for<'a> T: Deserialize<'a> + ResultEntry + Sized + Send + Sync + Clone,
{
let (text_messages, vec_loaded_cache) = load_cache_from_file_generalized(cache_file_name, delete_outdated_cache, used_files);
let Some(vec_loaded_entries) = vec_loaded_cache else {
return (text_messages, None);
};
debug!("Converting cache Vec<T> into BTreeMap<String, T>");
let map_loaded_entries: BTreeMap<String, T> = vec_loaded_entries
.into_iter()
.map(|file_entry| (file_entry.get_path().to_string_lossy().into_owned(), file_entry))
.collect();
debug!("Converted cache Vec<T> into BTreeMap<String, T>");
(text_messages, Some(map_loaded_entries))
}
#[fun_time(message = "load_cache_from_file_generalized_by_size", level = "debug")]
pub fn load_cache_from_file_generalized_by_size<T>(
cache_file_name: &str,
delete_outdated_cache: bool,
cache_not_converted: &BTreeMap<u64, Vec<T>>,
) -> (Messages, Option<BTreeMap<u64, Vec<T>>>)
where
for<'a> T: Deserialize<'a> + ResultEntry + Sized + Send + Sync + Clone,
{
debug!("Converting cache BtreeMap<u64, Vec<T>> into BTreeMap<String, T>");
let mut used_files: BTreeMap<String, T> = Default::default();
for file_entry in cache_not_converted.values().flatten() {
used_files.insert(file_entry.get_path().to_string_lossy().into_owned(), file_entry.clone());
}
debug!("Converted cache BtreeMap<u64, Vec<T>> into BTreeMap<String, T>");
let (text_messages, vec_loaded_cache) = load_cache_from_file_generalized(cache_file_name, delete_outdated_cache, &used_files);
let Some(vec_loaded_entries) = vec_loaded_cache else {
return (text_messages, None);
};
debug!("Converting cache Vec<T> into BTreeMap<u64, Vec<T>>");
let mut map_loaded_entries: BTreeMap<u64, Vec<T>> = Default::default();
for file_entry in vec_loaded_entries {
map_loaded_entries.entry(file_entry.get_size()).or_default().push(file_entry);
}
debug!("Converted cache Vec<T> into BTreeMap<u64, Vec<T>>");
(text_messages, Some(map_loaded_entries))
}
#[fun_time(message = "load_cache_from_file_generalized_by_path_from_size", level = "debug")]
pub fn load_cache_from_file_generalized_by_path_from_size<T>(
cache_file_name: &str,
delete_outdated_cache: bool,
cache_not_converted: &BTreeMap<u64, Vec<T>>,
) -> (Messages, Option<BTreeMap<String, T>>)
where
for<'a> T: Deserialize<'a> + ResultEntry + Sized + Send + Sync + Clone,
{
debug!("Converting cache BtreeMap<u64, Vec<T>> into BTreeMap<String, T>");
let mut used_files: BTreeMap<String, T> = Default::default();
for file_entry in cache_not_converted.values().flatten() {
used_files.insert(file_entry.get_path().to_string_lossy().into_owned(), file_entry.clone());
}
debug!("Converted cache BtreeMap<u64, Vec<T>> into BTreeMap<String, T>");
let (text_messages, vec_loaded_cache) = load_cache_from_file_generalized(cache_file_name, delete_outdated_cache, &used_files);
let Some(vec_loaded_entries) = vec_loaded_cache else {
return (text_messages, None);
};
debug!("Converting cache Vec<T> into BTreeMap<String, T>");
let map_loaded_entries: BTreeMap<String, T> = vec_loaded_entries
.into_iter()
.map(|file_entry| (file_entry.get_path().to_string_lossy().into_owned(), file_entry))
.collect();
debug!("Converted cache Vec<T> into BTreeMap<String, T>");
(text_messages, Some(map_loaded_entries))
}
#[fun_time(message = "load_cache_from_file_generalized", level = "debug")]
fn load_cache_from_file_generalized<T>(cache_file_name: &str, delete_outdated_cache: bool, used_files: &BTreeMap<String, T>) -> (Messages, Option<Vec<T>>)
where
for<'a> T: Deserialize<'a> + ResultEntry + Sized + Send + Sync + Clone,
{
let mut text_messages = Messages::new();
if let Some(((file_handler, cache_file), (file_handler_json, cache_file_json))) = common::open_cache_folder(cache_file_name, false, true, &mut text_messages.warnings) {
let mut vec_loaded_entries: Vec<T>;
if let Some(file_handler) = file_handler {
let reader = BufReader::new(file_handler);
vec_loaded_entries = match bincode::deserialize_from(reader) {
Ok(t) => t,
Err(e) => {
text_messages.warnings.push(format!("Failed to load data from cache file {cache_file:?}, reason {e}"));
debug!("Failed to load cache from file {cache_file:?}");
return (text_messages, None);
}
};
} else {
let reader = BufReader::new(file_handler_json.unwrap()); // Unwrap cannot fail, because at least one file must be valid
vec_loaded_entries = match serde_json::from_reader(reader) {
Ok(t) => t,
Err(e) => {
text_messages.warnings.push(format!("Failed to load data from cache file {cache_file_json:?}, reason {e}"));
debug!("Failed to load cache from file {cache_file:?}");
return (text_messages, None);
}
};
}
debug!(
"Starting removing outdated cache entries (removing non existent files from cache - {})",
delete_outdated_cache
);
let initial_number_of_entries = vec_loaded_entries.len();
vec_loaded_entries = vec_loaded_entries
.into_par_iter()
.filter(|file_entry| {
let path = file_entry.get_path();
let file_entry_path_str = path.to_string_lossy().to_string();
if let Some(used_file) = used_files.get(&file_entry_path_str) {
if file_entry.get_size() != used_file.get_size() {
return false;
}
if file_entry.get_modified_date() != used_file.get_modified_date() {
return false;
}
}
if delete_outdated_cache && !path.exists() {
return false;
}
true
})
.collect();
debug!(
"Completed removing outdated cache entries, removed {} out of all {} entries",
initial_number_of_entries - vec_loaded_entries.len(),
initial_number_of_entries
);
text_messages.messages.push(format!("Properly loaded {} cache entries.", vec_loaded_entries.len()));
debug!("Loaded cache from file {cache_file_name} (or json alternative) - {} results", vec_loaded_entries.len());
return (text_messages, Some(vec_loaded_entries));
}
debug!("Failed to load cache from file {cache_file_name} because not exists");
(text_messages, None)
}

File diff suppressed because it is too large Load Diff

@ -1,16 +1,19 @@
use std::path::{Path, PathBuf};
use std::time::SystemTime;
#[cfg(target_family = "unix")]
use std::{fs, os::unix::fs::MetadataExt};
use crate::common::Common;
use crate::common::normalize_windows_path;
use crate::common_messages::Messages;
use crate::flc;
use crate::localizer_core::generate_translation_hashmap;
#[derive(Clone, Default)]
#[derive(Debug, Clone, Default)]
pub struct Directories {
pub excluded_directories: Vec<PathBuf>,
pub included_directories: Vec<PathBuf>,
pub reference_directories: Vec<PathBuf>,
pub exclude_other_filesystems: Option<bool>,
#[cfg(target_family = "unix")]
pub included_dev_ids: Vec<u64>,
}
impl Directories {
@ -18,81 +21,59 @@ impl Directories {
Default::default()
}
pub fn set_reference_directory(&mut self, reference_directory: Vec<PathBuf>) {
pub fn set_reference_directory(&mut self, reference_directory: &[PathBuf]) -> Messages {
let mut messages: Messages = Messages::new();
self.reference_directories = reference_directory
.iter()
.filter_map(|directory| {
let (dir, msg) = Self::canonicalize_and_clear_path(directory, false);
messages.extend_with_another_messages(msg);
dir
})
.collect::<Vec<PathBuf>>();
messages
}
/// Setting included directories, at least one must be provided or scan won't start
pub fn set_included_directory(&mut self, included_directory: Vec<PathBuf>, text_messages: &mut Messages) -> bool {
let start_time: SystemTime = SystemTime::now();
pub fn set_included_directory(&mut self, included_directory: Vec<PathBuf>) -> Messages {
let mut messages: Messages = Messages::new();
if included_directory.is_empty() {
text_messages.errors.push(flc!("core_missing_no_chosen_included_directory"));
return false;
messages.errors.push(flc!("core_missing_no_chosen_included_directory"));
return messages;
}
let directories: Vec<PathBuf> = included_directory;
let mut checked_directories: Vec<PathBuf> = Vec::new();
for directory in directories {
if directory.to_string_lossy().contains('*') {
text_messages.warnings.push(flc!(
"core_directory_wildcard_no_supported",
generate_translation_hashmap(vec![("path", directory.display().to_string())])
));
continue;
}
let (dir, msg) = Self::canonicalize_and_clear_path(&directory, false);
#[cfg(not(target_family = "windows"))]
if directory.is_relative() {
text_messages.warnings.push(flc!(
"core_directory_relative_path",
generate_translation_hashmap(vec![("path", directory.display().to_string())])
));
continue;
}
#[cfg(target_family = "windows")]
if directory.is_relative() && !directory.starts_with("\\") {
text_messages.warnings.push(flc!(
"core_directory_relative_path",
generate_translation_hashmap(vec![("path", directory.display().to_string())])
));
continue;
}
messages.extend_with_another_messages(msg);
if !directory.exists() {
text_messages.warnings.push(flc!(
"core_directory_must_exists",
generate_translation_hashmap(vec![("path", directory.display().to_string())])
));
continue;
}
if !directory.is_dir() {
text_messages.warnings.push(flc!(
"core_directory_must_be_directory",
generate_translation_hashmap(vec![("path", directory.display().to_string())])
));
continue;
if let Some(dir) = dir {
checked_directories.push(dir);
}
checked_directories.push(directory);
}
if checked_directories.is_empty() {
text_messages.warnings.push(flc!("core_included_directory_zero_valid_directories"));
return false;
messages.warnings.push(flc!("core_included_directory_zero_valid_directories"));
return messages;
}
self.included_directories = checked_directories;
Common::print_time(start_time, SystemTime::now(), "set_included_directory".to_string());
true
messages
}
/// Setting absolute path to exclude from search
pub fn set_excluded_directory(&mut self, excluded_directory: Vec<PathBuf>, text_messages: &mut Messages) {
let start_time: SystemTime = SystemTime::now();
pub fn set_excluded_directory(&mut self, excluded_directory: Vec<PathBuf>) -> Messages {
let mut messages: Messages = Messages::new();
if excluded_directory.is_empty() {
return;
return messages;
}
let directories: Vec<PathBuf> = excluded_directory;
@ -101,76 +82,90 @@ impl Directories {
for directory in directories {
let directory_as_string = directory.to_string_lossy();
if directory_as_string == "/" {
text_messages.errors.push(flc!("core_excluded_directory_pointless_slash"));
messages.errors.push(flc!("core_excluded_directory_pointless_slash"));
break;
}
if directory_as_string.contains('*') {
text_messages.warnings.push(flc!(
"core_directory_wildcard_no_supported",
generate_translation_hashmap(vec![("path", directory.display().to_string())])
));
continue;
}
#[cfg(not(target_family = "windows"))]
if directory.is_relative() {
text_messages.warnings.push(flc!(
"core_directory_relative_path",
generate_translation_hashmap(vec![("path", directory.display().to_string())])
));
continue;
let (dir, msg) = Self::canonicalize_and_clear_path(&directory, true);
messages.extend_with_another_messages(msg);
if let Some(dir) = dir {
checked_directories.push(dir);
}
#[cfg(target_family = "windows")]
if directory.is_relative() && !directory.starts_with("\\") {
text_messages.warnings.push(flc!(
"core_directory_relative_path",
generate_translation_hashmap(vec![("path", directory.display().to_string())])
));
continue;
}
self.excluded_directories = checked_directories;
messages
}
fn canonicalize_and_clear_path(directory: &Path, is_excluded: bool) -> (Option<PathBuf>, Messages) {
let mut messages = Messages::new();
let mut directory = directory.to_path_buf();
if !directory.exists() {
if !is_excluded {
messages.warnings.push(flc!("core_directory_must_exists", path = directory.to_string_lossy().to_string()));
}
return (None, messages);
}
if !directory.exists() {
// No error when excluded directories are missing
continue;
if !directory.is_dir() {
messages
.warnings
.push(flc!("core_directory_must_be_directory", path = directory.to_string_lossy().to_string()));
return (None, messages);
}
// Try to canonicalize them
if cfg!(windows) {
// Only canonicalize if it's not a network path
// This can be check by checking if path starts with \\?\UNC\
if let Ok(dir_can) = directory.canonicalize() {
let dir_can_str = dir_can.to_string_lossy().to_string();
if let Some(dir_can_str) = dir_can_str.strip_prefix(r"\\?\") {
if dir_can_str.chars().nth(1) == Some(':') {
directory = PathBuf::from(dir_can_str);
}
}
}
if !directory.is_dir() {
text_messages.warnings.push(flc!(
"core_directory_must_be_directory",
generate_translation_hashmap(vec![("path", directory.display().to_string())])
));
continue;
} else {
if let Ok(dir) = directory.canonicalize() {
directory = dir;
}
checked_directories.push(directory);
}
self.excluded_directories = checked_directories;
(Some(directory), messages)
}
Common::print_time(start_time, SystemTime::now(), "set_excluded_directory".to_string());
#[cfg(target_family = "unix")]
pub fn set_exclude_other_filesystems(&mut self, exclude_other_filesystems: bool) {
self.exclude_other_filesystems = Some(exclude_other_filesystems);
}
/// Remove unused entries when included or excluded overlaps with each other or are duplicated etc.
pub fn optimize_directories(&mut self, recursive_search: bool, text_messages: &mut Messages) -> bool {
let start_time: SystemTime = SystemTime::now();
pub fn optimize_directories(&mut self, recursive_search: bool) -> Messages {
let mut messages: Messages = Messages::new();
let mut optimized_included: Vec<PathBuf> = Vec::new();
let mut optimized_excluded: Vec<PathBuf> = Vec::new();
if cfg!(target_family = "windows") {
self.included_directories = self.included_directories.iter().map(Common::normalize_windows_path).collect();
self.excluded_directories = self.excluded_directories.iter().map(Common::normalize_windows_path).collect();
self.reference_directories = self.reference_directories.iter().map(Common::normalize_windows_path).collect();
self.included_directories = self.included_directories.iter().map(normalize_windows_path).collect();
self.excluded_directories = self.excluded_directories.iter().map(normalize_windows_path).collect();
self.reference_directories = self.reference_directories.iter().map(normalize_windows_path).collect();
}
// Remove duplicated entries like: "/", "/"
self.excluded_directories.sort();
self.included_directories.sort();
self.reference_directories.sort();
self.excluded_directories.sort_unstable();
self.included_directories.sort_unstable();
self.reference_directories.sort_unstable();
self.excluded_directories.dedup();
self.included_directories.dedup();
self.reference_directories.dedup();
// Optimize for duplicated included directories - "/", "/home". "/home/Pulpit" to "/"
if recursive_search {
// Do not use when not using recursive search or using
if recursive_search && !self.exclude_other_filesystems.unwrap_or(false) {
// This is only point which can't be done when recursive search is disabled.
let mut is_inside: bool;
for ed_checked in &self.excluded_directories {
@ -268,7 +263,7 @@ impl Directories {
{
let mut ref_folders = Vec::new();
for folder in &self.reference_directories {
if self.included_directories.iter().any(|e| folder.starts_with(&e)) {
if self.included_directories.iter().any(|e| folder.starts_with(e)) {
ref_folders.push(folder.clone());
}
}
@ -276,23 +271,50 @@ impl Directories {
}
if self.included_directories.is_empty() {
text_messages.errors.push(flc!("core_directory_overlap"));
return false;
messages.errors.push(flc!("core_directory_overlap"));
return messages;
}
// Not needed, but better is to have sorted everything
self.excluded_directories.sort();
self.included_directories.sort();
Common::print_time(start_time, SystemTime::now(), "optimize_directories".to_string());
true
self.excluded_directories.sort_unstable();
self.included_directories.sort_unstable();
// Get device IDs for included directories
#[cfg(target_family = "unix")]
if self.exclude_other_filesystems() {
for d in &self.included_directories {
match fs::metadata(d) {
Ok(m) => self.included_dev_ids.push(m.dev()),
Err(_) => messages.errors.push(flc!("core_directory_unable_to_get_device_id", path = d.to_string_lossy().to_string())),
}
}
}
messages
}
/// Checks whether a specified directory is excluded from searching
pub fn is_excluded(&self, path: impl AsRef<Path>) -> bool {
let path = path.as_ref();
pub fn is_in_referenced_directory(&self, path: &Path) -> bool {
self.reference_directories.iter().any(|e| path.starts_with(e))
}
pub fn is_excluded(&self, path: &Path) -> bool {
#[cfg(target_family = "windows")]
let path = Common::normalize_windows_path(path);
let path = normalize_windows_path(path);
// We're assuming that `excluded_directories` are already normalized
self.excluded_directories.iter().any(|p| p.as_path() == path)
}
#[cfg(target_family = "unix")]
pub fn exclude_other_filesystems(&self) -> bool {
self.exclude_other_filesystems.unwrap_or(false)
}
#[cfg(target_family = "unix")]
pub fn is_on_other_filesystems(&self, path: impl AsRef<Path>) -> Result<bool, String> {
let path = path.as_ref();
match fs::metadata(path) {
Ok(m) => Ok(!self.included_dev_ids.iter().any(|&id| id == m.dev())),
Err(_) => Err(flc!("core_directory_unable_to_get_device_id", path = path.to_string_lossy().to_string())),
}
}
}

@ -1,80 +1,124 @@
use std::time::SystemTime;
use std::collections::HashSet;
use std::fs::DirEntry;
use crate::common::Common;
use crate::common_messages::Messages;
#[derive(Clone, Default)]
#[derive(Debug, Clone, Default)]
pub struct Extensions {
file_extensions: Vec<String>,
allowed_extensions_hashset: HashSet<String>,
excluded_extensions_hashset: HashSet<String>,
}
impl Extensions {
pub fn new() -> Self {
Default::default()
}
/// List of allowed extensions, only files with this extensions will be checking if are duplicates
/// After, extensions cannot contains any dot, commas etc.
pub fn set_allowed_extensions(&mut self, mut allowed_extensions: String, text_messages: &mut Messages) {
let start_time: SystemTime = SystemTime::now();
if allowed_extensions.trim().is_empty() {
return;
pub fn filter_extensions(mut file_extensions: String) -> (HashSet<String>, Messages) {
let mut messages = Messages::new();
let mut extensions_hashset = HashSet::new();
if file_extensions.trim().is_empty() {
return (Default::default(), messages);
}
allowed_extensions = allowed_extensions.replace("IMAGE", "jpg,kra,gif,png,bmp,tiff,hdr,svg");
allowed_extensions = allowed_extensions.replace("VIDEO", "mp4,flv,mkv,webm,vob,ogv,gifv,avi,mov,wmv,mpg,m4v,m4p,mpeg,3gp");
allowed_extensions = allowed_extensions.replace("MUSIC", "mp3,flac,ogg,tta,wma,webm");
allowed_extensions = allowed_extensions.replace("TEXT", "txt,doc,docx,odt,rtf");
file_extensions = file_extensions.replace("IMAGE", "jpg,kra,gif,png,bmp,tiff,hdr,svg");
file_extensions = file_extensions.replace("VIDEO", "mp4,flv,mkv,webm,vob,ogv,gifv,avi,mov,wmv,mpg,m4v,m4p,mpeg,3gp");
file_extensions = file_extensions.replace("MUSIC", "mp3,flac,ogg,tta,wma,webm");
file_extensions = file_extensions.replace("TEXT", "txt,doc,docx,odt,rtf");
let extensions: Vec<String> = allowed_extensions.split(',').map(|e| e.trim()).map(String::from).collect();
let extensions: Vec<String> = file_extensions.split(',').map(str::trim).map(String::from).collect();
for mut extension in extensions {
if extension.is_empty() || extension.replace('.', "").replace(' ', "").trim().is_empty() {
if extension.is_empty() || extension.replace(['.', ' '], "").trim().is_empty() {
continue;
}
if !extension.starts_with('.') {
extension = format!(".{}", extension);
if extension.starts_with('.') {
extension = extension.chars().skip(1).collect::<String>();
}
if extension[1..].contains('.') {
text_messages.warnings.push(format!("{} is not valid extension because contains dot inside", extension));
if extension.contains('.') {
messages.warnings.push(format!("{extension} is not valid extension because contains dot inside"));
continue;
}
if extension[1..].contains(' ') {
text_messages
.warnings
.push(format!("{} is not valid extension because contains empty space inside", extension));
if extension.contains(' ') {
messages.warnings.push(format!("{extension} is not valid extension because contains empty space inside"));
continue;
}
if !self.file_extensions.contains(&extension) {
self.file_extensions.push(extension);
}
extensions_hashset.insert(extension);
}
(extensions_hashset, messages)
}
if self.file_extensions.is_empty() {
text_messages
.messages
.push("No valid extensions were provided, so allowing all extensions by default.".to_string());
}
Common::print_time(start_time, SystemTime::now(), "set_allowed_extensions".to_string());
/// List of allowed extensions, only files with this extensions will be checking if are duplicates
/// After, extensions cannot contain any dot, commas etc.
pub fn set_allowed_extensions(&mut self, allowed_extensions: String) -> Messages {
let (extensions, messages) = Self::filter_extensions(allowed_extensions);
self.allowed_extensions_hashset = extensions;
messages
}
pub fn set_excluded_extensions(&mut self, excluded_extensions: String) -> Messages {
let (extensions, messages) = Self::filter_extensions(excluded_extensions);
self.excluded_extensions_hashset = extensions;
messages
}
pub fn matches_filename(&self, file_name: &str) -> bool {
// assert_eq!(file_name, file_name.to_lowercase());
if !self.file_extensions.is_empty() && !self.file_extensions.iter().any(|e| file_name.ends_with(e)) {
return false;
pub fn check_if_entry_have_valid_extension(&self, entry_data: &DirEntry) -> bool {
if self.allowed_extensions_hashset.is_empty() && self.excluded_extensions_hashset.is_empty() {
return true;
}
// Using entry_data.path().extension() is a lot of slower, even 5 times
let file_name = entry_data.file_name();
let Some(file_name_str) = file_name.to_str() else { return false };
let Some(extension_idx) = file_name_str.rfind('.') else { return false };
let extension = &file_name_str[extension_idx + 1..];
if !self.allowed_extensions_hashset.is_empty() {
if extension.chars().all(|c| c.is_ascii_lowercase()) {
self.allowed_extensions_hashset.contains(extension)
} else {
self.allowed_extensions_hashset.contains(&extension.to_lowercase())
}
} else {
if extension.chars().all(|c| c.is_ascii_lowercase()) {
!self.excluded_extensions_hashset.contains(extension)
} else {
!self.excluded_extensions_hashset.contains(&extension.to_lowercase())
}
}
true
}
pub fn using_custom_extensions(&self) -> bool {
!self.file_extensions.is_empty()
pub fn set_any_extensions(&self) -> bool {
!self.allowed_extensions_hashset.is_empty()
}
pub fn extend_allowed_extensions(&mut self, file_extensions: &[&str]) {
fn extend_allowed_extensions(&mut self, file_extensions: &[&str]) {
for extension in file_extensions {
assert!(extension.starts_with('.'));
self.file_extensions.push(extension.to_string());
let extension_without_dot = extension.trim_start_matches('.');
self.allowed_extensions_hashset.insert(extension_without_dot.to_string());
}
}
// E.g. when using similar videos, user can provide extensions like "mp4,flv", but if user provide "mp4,jpg" then
// it will be only "mp4" because "jpg" is not valid extension for videos
fn union_allowed_extensions(&mut self, file_extensions: &[&str]) {
let mut new_extensions = HashSet::new();
for extension in file_extensions {
let extension_without_dot = extension.trim_start_matches('.');
new_extensions.insert(extension_without_dot.to_string());
}
}
pub fn set_and_validate_allowed_extensions(&mut self, file_extensions: &[&str]) {
if self.allowed_extensions_hashset.is_empty() {
self.extend_allowed_extensions(file_extensions);
} else {
self.union_allowed_extensions(file_extensions);
}
}
}

@ -1,25 +1,48 @@
use std::path::Path;
use std::time::SystemTime;
use crate::common::Common;
#[cfg(not(target_family = "unix"))]
use crate::common::normalize_windows_path;
use crate::common::regex_check;
use crate::common_messages::Messages;
#[derive(Clone, Default)]
#[cfg(target_family = "unix")]
pub const DEFAULT_EXCLUDED_DIRECTORIES: &[&str] = &["/proc", "/dev", "/sys", "/run", "/snap"];
#[cfg(not(target_family = "unix"))]
pub const DEFAULT_EXCLUDED_DIRECTORIES: &[&str] = &["C:\\Windows"];
#[cfg(target_family = "unix")]
pub const DEFAULT_EXCLUDED_ITEMS: &str = "*/.git/*,*/node_modules/*,*/lost+found/*,*/Trash/*,*/.Trash-*/*,*/snap/*,/home/*/.cache/*";
#[cfg(not(target_family = "unix"))]
pub const DEFAULT_EXCLUDED_ITEMS: &str = "*\\.git\\*,*\\node_modules\\*,*\\lost+found\\*,*:\\windows\\*,*:\\$RECYCLE.BIN\\*,*:\\$SysReset\\*,*:\\System Volume Information\\*,*:\\OneDriveTemp\\*,*:\\hiberfil.sys,*:\\pagefile.sys,*:\\swapfile.sys";
#[derive(Debug, Clone, Default)]
pub struct ExcludedItems {
pub items: Vec<String>,
expressions: Vec<String>,
connected_expressions: Vec<SingleExcludedItem>,
}
#[derive(Debug, Clone, Default)]
pub struct SingleExcludedItem {
pub expression: String,
pub expression_splits: Vec<String>,
pub unique_extensions_splits: Vec<String>,
}
impl ExcludedItems {
pub fn new() -> Self {
Default::default()
}
/// Setting excluded items which needs to contains * wildcard
/// Are a lot of slower than absolute path, so it should be used to heavy
pub fn set_excluded_items(&mut self, excluded_items: Vec<String>, text_messages: &mut Messages) {
let start_time: SystemTime = SystemTime::now();
pub fn new_from(excluded_items: Vec<String>) -> Self {
let mut s = Self::new();
s.set_excluded_items(excluded_items);
s
}
pub fn set_excluded_items(&mut self, excluded_items: Vec<String>) -> Messages {
let mut warnings: Vec<String> = Vec::new();
if excluded_items.is_empty() {
return;
return Messages::new();
}
let expressions: Vec<String> = excluded_items;
@ -36,37 +59,60 @@ impl ExcludedItems {
let expression = expression.replace("/", "\\");
if expression == "DEFAULT" {
if cfg!(target_family = "unix") {
checked_expressions.push("*/.git/*,*/node_modules/*,*/lost+found/*,*/Trash/*,*/.Trash-*/*,*/snap/*,/home/*/.cache/*".to_string());
}
if cfg!(target_family = "windows") {
checked_expressions.push("*\\.git\\*,*\\node_modules\\*,*\\lost+found\\*,*:\\windows\\*".to_string());
}
checked_expressions.push(DEFAULT_EXCLUDED_ITEMS.to_string());
continue;
}
if !expression.contains('*') {
text_messages
.warnings
.push("Excluded Items Warning: Wildcard * is required in expression, ignoring ".to_string() + expression.as_str());
warnings.push("Excluded Items Warning: Wildcard * is required in expression, ignoring ".to_string() + expression.as_str());
continue;
}
checked_expressions.push(expression);
}
self.items = checked_expressions;
Common::print_time(start_time, SystemTime::now(), "set_excluded_items".to_string());
for checked_expression in &checked_expressions {
let item = new_excluded_item(checked_expression);
self.expressions.push(item.expression.clone());
self.connected_expressions.push(item);
}
Messages {
messages: vec![],
warnings,
errors: vec![],
}
}
/// Checks whether a specified path is excluded from searching
pub fn is_excluded(&self, path: impl AsRef<Path>) -> bool {
pub fn get_excluded_items(&self) -> &Vec<String> {
&self.expressions
}
pub fn is_excluded(&self, path: &Path) -> bool {
if self.connected_expressions.is_empty() {
return false;
}
#[cfg(target_family = "windows")]
let path = Common::normalize_windows_path(path);
let path = normalize_windows_path(path);
let path_str = path.to_string_lossy();
for expression in &self.items {
if Common::regex_check(expression, &path) {
for expression in &self.connected_expressions {
if regex_check(expression, &path_str) {
return true;
}
}
false
}
}
pub fn new_excluded_item(expression: &str) -> SingleExcludedItem {
let expression = expression.trim().to_string();
let expression_splits: Vec<String> = expression.split('*').filter_map(|e| if e.is_empty() { None } else { Some(e.to_string()) }).collect();
let mut unique_extensions_splits = expression_splits.clone();
unique_extensions_splits.sort();
unique_extensions_splits.dedup();
unique_extensions_splits.sort_by_key(|b| std::cmp::Reverse(b.len()));
SingleExcludedItem {
expression,
expression_splits,
unique_extensions_splits,
}
}

@ -1,4 +1,4 @@
#[derive(Default)]
#[derive(Debug, Default, Clone)]
pub struct Messages {
pub messages: Vec<String>,
pub warnings: Vec<String>,
@ -9,11 +9,21 @@ impl Messages {
pub fn new() -> Self {
Default::default()
}
pub fn new_from_errors(errors: Vec<String>) -> Self {
Messages { errors, ..Default::default() }
}
pub fn new_from_warnings(warnings: Vec<String>) -> Self {
Messages { warnings, ..Default::default() }
}
pub fn new_from_messages(messages: Vec<String>) -> Self {
Messages { messages, ..Default::default() }
}
pub fn print_messages(&self) {
println!("{}", self.create_messages_text());
}
pub fn create_messages_text(&self) -> String {
let mut text_to_return: String = "".to_string();
let mut text_to_return: String = String::new();
if !self.messages.is_empty() {
text_to_return += "-------------------------------MESSAGES--------------------------------\n";
@ -46,4 +56,17 @@ impl Messages {
text_to_return
}
pub fn extend_messages_with(&mut self, messages: Vec<String>, warnings: Vec<String>, errors: Vec<String>) {
self.messages.extend(messages);
self.warnings.extend(warnings);
self.errors.extend(errors);
}
pub fn extend_with_another_messages(&mut self, messages: Messages) {
let (messages, warnings, errors) = (messages.messages, messages.warnings, messages.errors);
self.messages.extend(messages);
self.warnings.extend(warnings);
self.errors.extend(errors);
}
}

@ -0,0 +1,213 @@
use std::path::PathBuf;
use crate::common_dir_traversal::ToolType;
use crate::common_directory::Directories;
use crate::common_extensions::Extensions;
use crate::common_items::ExcludedItems;
use crate::common_messages::Messages;
#[derive(Debug, Clone, Default)]
pub struct CommonToolData {
pub(crate) tool_type: ToolType,
pub(crate) text_messages: Messages,
pub(crate) directories: Directories,
pub(crate) extensions: Extensions,
pub(crate) excluded_items: ExcludedItems,
pub(crate) recursive_search: bool,
pub(crate) delete_method: DeleteMethod,
pub(crate) maximal_file_size: u64,
pub(crate) minimal_file_size: u64,
pub(crate) stopped_search: bool,
pub(crate) use_cache: bool,
pub(crate) delete_outdated_cache: bool,
pub(crate) save_also_as_json: bool,
pub(crate) use_reference_folders: bool,
pub(crate) dry_run: bool,
}
#[derive(Eq, PartialEq, Clone, Debug, Copy, Default)]
pub enum DeleteMethod {
#[default]
None,
Delete, // Just delete items
AllExceptNewest,
AllExceptOldest,
OneOldest,
OneNewest,
HardLink,
}
impl CommonToolData {
pub fn new(tool_type: ToolType) -> Self {
Self {
tool_type,
text_messages: Messages::new(),
directories: Directories::new(),
extensions: Extensions::new(),
excluded_items: ExcludedItems::new(),
recursive_search: true,
delete_method: DeleteMethod::None,
maximal_file_size: u64::MAX,
minimal_file_size: 8192,
stopped_search: false,
use_cache: true,
delete_outdated_cache: true,
save_also_as_json: false,
use_reference_folders: false,
dry_run: false,
}
}
}
pub trait CommonData {
fn get_cd(&self) -> &CommonToolData;
fn get_cd_mut(&mut self) -> &mut CommonToolData;
fn set_dry_run(&mut self, dry_run: bool) {
self.get_cd_mut().dry_run = dry_run;
}
fn get_dry_run(&self) -> bool {
self.get_cd().dry_run
}
fn set_use_cache(&mut self, use_cache: bool) {
self.get_cd_mut().use_cache = use_cache;
}
fn get_use_cache(&self) -> bool {
self.get_cd().use_cache
}
fn set_delete_outdated_cache(&mut self, delete_outdated_cache: bool) {
self.get_cd_mut().delete_outdated_cache = delete_outdated_cache;
}
fn get_delete_outdated_cache(&self) -> bool {
self.get_cd().delete_outdated_cache
}
fn get_stopped_search(&self) -> bool {
self.get_cd().stopped_search
}
fn set_stopped_search(&mut self, stopped_search: bool) {
self.get_cd_mut().stopped_search = stopped_search;
}
fn set_maximal_file_size(&mut self, maximal_file_size: u64) {
self.get_cd_mut().maximal_file_size = match maximal_file_size {
0 => 1,
t => t,
};
}
fn get_maximal_file_size(&self) -> u64 {
self.get_cd().maximal_file_size
}
fn set_minimal_file_size(&mut self, minimal_file_size: u64) {
self.get_cd_mut().minimal_file_size = match minimal_file_size {
0 => 1,
t => t,
};
}
fn get_minimal_file_size(&self) -> u64 {
self.get_cd().minimal_file_size
}
fn set_reference_directory(&mut self, reference_directory: Vec<PathBuf>) {
let messages = self.get_cd_mut().directories.set_reference_directory(&reference_directory);
self.get_cd_mut().text_messages.extend_with_another_messages(messages);
}
#[cfg(target_family = "unix")]
fn set_exclude_other_filesystems(&mut self, exclude_other_filesystems: bool) {
self.get_cd_mut().directories.set_exclude_other_filesystems(exclude_other_filesystems);
}
#[cfg(not(target_family = "unix"))]
fn set_exclude_other_filesystems(&mut self, _exclude_other_filesystems: bool) {}
fn get_text_messages(&self) -> &Messages {
&self.get_cd().text_messages
}
fn get_text_messages_mut(&mut self) -> &mut Messages {
&mut self.get_cd_mut().text_messages
}
fn set_save_also_as_json(&mut self, save_also_as_json: bool) {
self.get_cd_mut().save_also_as_json = save_also_as_json;
}
fn get_save_also_as_json(&self) -> bool {
self.get_cd().save_also_as_json
}
fn set_recursive_search(&mut self, recursive_search: bool) {
self.get_cd_mut().recursive_search = recursive_search;
}
fn get_recursive_search(&self) -> bool {
self.get_cd().recursive_search
}
fn set_use_reference_folders(&mut self, use_reference_folders: bool) {
self.get_cd_mut().use_reference_folders = use_reference_folders;
}
fn get_use_reference_folders(&self) -> bool {
self.get_cd().use_reference_folders
}
fn set_delete_method(&mut self, delete_method: DeleteMethod) {
self.get_cd_mut().delete_method = delete_method;
}
fn get_delete_method(&self) -> DeleteMethod {
self.get_cd().delete_method
}
fn set_included_directory(&mut self, included_directory: Vec<PathBuf>) {
let messages = self.get_cd_mut().directories.set_included_directory(included_directory);
self.get_cd_mut().text_messages.extend_with_another_messages(messages);
}
fn set_excluded_directory(&mut self, excluded_directory: Vec<PathBuf>) {
let messages = self.get_cd_mut().directories.set_excluded_directory(excluded_directory);
self.get_cd_mut().text_messages.extend_with_another_messages(messages);
}
fn set_allowed_extensions(&mut self, allowed_extensions: String) {
let messages = self.get_cd_mut().extensions.set_allowed_extensions(allowed_extensions);
self.get_cd_mut().text_messages.extend_with_another_messages(messages);
}
fn set_excluded_extensions(&mut self, excluded_extensions: String) {
let messages = self.get_cd_mut().extensions.set_excluded_extensions(excluded_extensions);
self.get_cd_mut().text_messages.extend_with_another_messages(messages);
}
fn set_excluded_items(&mut self, excluded_items: Vec<String>) {
let messages = self.get_cd_mut().excluded_items.set_excluded_items(excluded_items);
self.get_cd_mut().text_messages.extend_with_another_messages(messages);
}
fn prepare_items(&mut self) {
let recursive_search = self.get_cd().recursive_search;
// Optimizes directories and removes recursive calls
let messages = self.get_cd_mut().directories.optimize_directories(recursive_search);
self.get_cd_mut().text_messages.extend_with_another_messages(messages);
}
fn debug_print_common(&self) {
println!("---------------DEBUG PRINT COMMON---------------");
println!("Tool type: {:?}", self.get_cd().tool_type);
println!("Directories: {:?}", self.get_cd().directories);
println!("Extensions: {:?}", self.get_cd().extensions);
println!("Excluded items: {:?}", self.get_cd().excluded_items);
println!("Recursive search: {:?}", self.get_cd().recursive_search);
println!("Maximal file size: {:?}", self.get_cd().maximal_file_size);
println!("Minimal file size: {:?}", self.get_cd().minimal_file_size);
println!("Stopped search: {:?}", self.get_cd().stopped_search);
println!("Use cache: {:?}", self.get_cd().use_cache);
println!("Delete outdated cache: {:?}", self.get_cd().delete_outdated_cache);
println!("Save also as json: {:?}", self.get_cd().save_also_as_json);
println!("Delete method: {:?}", self.get_cd().delete_method);
println!("Use reference folders: {:?}", self.get_cd().use_reference_folders);
println!("Dry run: {:?}", self.get_cd().dry_run);
println!("---------------DEBUG PRINT MESSAGES---------------");
println!("Errors size - {}", self.get_cd().text_messages.errors.len());
println!("Warnings size - {}", self.get_cd().text_messages.warnings.len());
println!("Messages size - {}", self.get_cd().text_messages.messages.len());
}
}

@ -1,11 +1,75 @@
use std::fs::File;
use std::io::{BufWriter, Write};
use std::path::Path;
use fun_time::fun_time;
use serde::Serialize;
pub trait DebugPrint {
fn debug_print(&self);
}
pub trait SaveResults {
fn save_results_to_file(&mut self, file_name: &str) -> bool;
pub trait PrintResults {
fn write_results<T: Write>(&self, writer: &mut T) -> std::io::Result<()>;
#[fun_time(message = "print_results_to_output", level = "debug")]
fn print_results_to_output(&self) {
let stdout = std::io::stdout();
let mut handle = stdout.lock();
self.write_results(&mut handle).unwrap();
handle.flush().unwrap();
}
#[fun_time(message = "print_results_to_file", level = "debug")]
fn print_results_to_file(&self, file_name: &str) -> std::io::Result<()> {
let file_name: String = match file_name {
"" => "results.txt".to_string(),
k => k.to_string(),
};
let file_handler = File::create(file_name)?;
let mut writer = BufWriter::new(file_handler);
self.write_results(&mut writer)?;
writer.flush()?;
Ok(())
}
fn save_results_to_file_as_json(&self, file_name: &str, pretty_print: bool) -> std::io::Result<()>;
fn save_results_to_file_as_json_internal<T: Serialize + std::fmt::Debug>(&self, file_name: &str, item_to_serialize: &T, pretty_print: bool) -> std::io::Result<()> {
if pretty_print {
self.save_results_to_file_as_json_pretty(file_name, item_to_serialize)
} else {
self.save_results_to_file_as_json_compact(file_name, item_to_serialize)
}
}
#[fun_time(message = "save_results_to_file_as_json_pretty", level = "debug")]
fn save_results_to_file_as_json_pretty<T: Serialize + std::fmt::Debug>(&self, file_name: &str, item_to_serialize: &T) -> std::io::Result<()> {
let file_handler = File::create(file_name)?;
let mut writer = BufWriter::new(file_handler);
serde_json::to_writer_pretty(&mut writer, item_to_serialize)?;
Ok(())
}
#[fun_time(message = "save_results_to_file_as_json_compact", level = "debug")]
fn save_results_to_file_as_json_compact<T: Serialize + std::fmt::Debug>(&self, file_name: &str, item_to_serialize: &T) -> std::io::Result<()> {
let file_handler = File::create(file_name)?;
let mut writer = BufWriter::new(file_handler);
serde_json::to_writer(&mut writer, item_to_serialize)?;
Ok(())
}
fn save_all_in_one(&self, file_name: &str) -> std::io::Result<()> {
self.save_results_to_file_as_json(&format!("{file_name}_pretty.json"), true)?;
self.save_results_to_file_as_json(&format!("{file_name}_compact.json"), false)?;
self.print_results_to_file(&format!("{file_name}.txt"))?;
Ok(())
}
}
pub trait PrintResults {
fn print_results(&self);
pub trait ResultEntry {
fn get_path(&self) -> &Path;
fn get_modified_date(&self) -> u64;
fn get_size(&self) -> u64;
}

File diff suppressed because it is too large Load Diff

@ -1,170 +1,98 @@
use std::fs;
use std::fs::File;
use std::io::prelude::*;
use std::io::BufWriter;
use std::path::PathBuf;
use std::time::SystemTime;
use crossbeam_channel::Receiver;
use crossbeam_channel::{Receiver, Sender};
use fun_time::fun_time;
use log::debug;
use crate::common::Common;
use crate::common_dir_traversal::{DirTraversalBuilder, DirTraversalResult, FileEntry, ProgressData};
use crate::common_directory::Directories;
use crate::common_extensions::Extensions;
use crate::common_items::ExcludedItems;
use crate::common_messages::Messages;
use crate::common_dir_traversal::{DirTraversalBuilder, DirTraversalResult, FileEntry, ProgressData, ToolType};
use crate::common_tool::{CommonData, CommonToolData, DeleteMethod};
use crate::common_traits::*;
#[derive(Eq, PartialEq, Clone, Debug)]
pub enum DeleteMethod {
None,
Delete,
}
/// Info struck with helpful information's about results
#[derive(Default)]
pub struct Info {
pub number_of_empty_files: usize,
}
impl Info {
pub fn new() -> Self {
Default::default()
}
}
/// Struct with required information's to work
pub struct EmptyFiles {
text_messages: Messages,
common_data: CommonToolData,
information: Info,
empty_files: Vec<FileEntry>,
directories: Directories,
allowed_extensions: Extensions,
excluded_items: ExcludedItems,
recursive_search: bool,
delete_method: DeleteMethod,
stopped_search: bool,
}
impl CommonData for EmptyFiles {
fn get_cd(&self) -> &CommonToolData {
&self.common_data
}
fn get_cd_mut(&mut self) -> &mut CommonToolData {
&mut self.common_data
}
}
impl EmptyFiles {
pub fn new() -> Self {
Self {
text_messages: Messages::new(),
information: Info::new(),
recursive_search: true,
allowed_extensions: Extensions::new(),
directories: Directories::new(),
excluded_items: ExcludedItems::new(),
common_data: CommonToolData::new(ToolType::EmptyFiles),
information: Info::default(),
empty_files: vec![],
delete_method: DeleteMethod::None,
stopped_search: false,
}
}
/// Finding empty files, save results to internal struct variables
pub fn find_empty_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) {
self.directories.optimize_directories(self.recursive_search, &mut self.text_messages);
#[fun_time(message = "find_empty_files", level = "info")]
pub fn find_empty_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&Sender<ProgressData>>) {
self.prepare_items();
if !self.check_files(stop_receiver, progress_sender) {
self.stopped_search = true;
self.common_data.stopped_search = true;
return;
}
self.delete_files();
self.debug_print();
}
pub fn get_stopped_search(&self) -> bool {
self.stopped_search
}
pub const fn get_empty_files(&self) -> &Vec<FileEntry> {
&self.empty_files
}
pub const fn get_text_messages(&self) -> &Messages {
&self.text_messages
}
pub const fn get_information(&self) -> &Info {
&self.information
}
pub fn set_delete_method(&mut self, delete_method: DeleteMethod) {
self.delete_method = delete_method;
}
pub fn set_recursive_search(&mut self, recursive_search: bool) {
self.recursive_search = recursive_search;
}
pub fn set_included_directory(&mut self, included_directory: Vec<PathBuf>) -> bool {
self.directories.set_included_directory(included_directory, &mut self.text_messages)
}
pub fn set_excluded_directory(&mut self, excluded_directory: Vec<PathBuf>) {
self.directories.set_excluded_directory(excluded_directory, &mut self.text_messages);
}
pub fn set_allowed_extensions(&mut self, allowed_extensions: String) {
self.allowed_extensions.set_allowed_extensions(allowed_extensions, &mut self.text_messages);
}
pub fn set_excluded_items(&mut self, excluded_items: Vec<String>) {
self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages);
}
/// Check files for any with size == 0
fn check_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
#[fun_time(message = "check_files", level = "debug")]
fn check_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&Sender<ProgressData>>) -> bool {
let result = DirTraversalBuilder::new()
.root_dirs(self.directories.included_directories.clone())
.common_data(&self.common_data)
.group_by(|_fe| ())
.stop_receiver(stop_receiver)
.progress_sender(progress_sender)
.minimal_file_size(0)
.maximal_file_size(0)
.directories(self.directories.clone())
.allowed_extensions(self.allowed_extensions.clone())
.excluded_items(self.excluded_items.clone())
.recursive_search(self.recursive_search)
.build()
.run();
match result {
DirTraversalResult::SuccessFiles {
start_time,
grouped_file_entries,
warnings,
} => {
if let Some(empty_files) = grouped_file_entries.get(&()) {
self.empty_files = empty_files.clone();
}
DirTraversalResult::SuccessFiles { grouped_file_entries, warnings } => {
self.empty_files = grouped_file_entries.into_values().flatten().collect();
self.information.number_of_empty_files = self.empty_files.len();
self.text_messages.warnings.extend(warnings);
Common::print_time(start_time, SystemTime::now(), "check_files_name".to_string());
self.common_data.text_messages.warnings.extend(warnings);
debug!("Found {} empty files.", self.information.number_of_empty_files);
true
}
DirTraversalResult::SuccessFolders { .. } => {
unreachable!()
}
DirTraversalResult::Stopped => false,
}
}
/// Function to delete files, from filed Vector
#[fun_time(message = "delete_files", level = "debug")]
fn delete_files(&mut self) {
let start_time: SystemTime = SystemTime::now();
match self.delete_method {
match self.common_data.delete_method {
DeleteMethod::Delete => {
for file_entry in &self.empty_files {
if fs::remove_file(file_entry.path.clone()).is_err() {
self.text_messages.warnings.push(file_entry.path.display().to_string());
if fs::remove_file(&file_entry.path).is_err() {
self.common_data.text_messages.warnings.push(file_entry.path.to_string_lossy().to_string());
}
}
}
DeleteMethod::None => {
//Just do nothing
}
_ => {
unreachable!()
}
}
Common::print_time(start_time, SystemTime::now(), "delete_files".to_string());
}
}
@ -175,82 +103,50 @@ impl Default for EmptyFiles {
}
impl DebugPrint for EmptyFiles {
#[allow(dead_code)]
#[allow(unreachable_code)]
/// Debugging printing - only available on debug build
fn debug_print(&self) {
#[cfg(not(debug_assertions))]
{
if !cfg!(debug_assertions) {
return;
}
println!("---------------DEBUG PRINT---------------");
println!("### Information's");
println!("Errors size - {}", self.text_messages.errors.len());
println!("Warnings size - {}", self.text_messages.warnings.len());
println!("Messages size - {}", self.text_messages.messages.len());
println!("### Other");
println!("Empty list size - {}", self.empty_files.len());
println!("Excluded items - {:?}", self.excluded_items.items);
println!("Included directories - {:?}", self.directories.included_directories);
println!("Excluded directories - {:?}", self.directories.excluded_directories);
println!("Recursive search - {}", self.recursive_search);
println!("Delete Method - {:?}", self.delete_method);
self.debug_print_common();
println!("-----------------------------------------");
}
}
impl SaveResults for EmptyFiles {
fn save_results_to_file(&mut self, file_name: &str) -> bool {
let start_time: SystemTime = SystemTime::now();
let file_name: String = match file_name {
"" => "results.txt".to_string(),
k => k.to_string(),
};
let file_handler = match File::create(&file_name) {
Ok(t) => t,
Err(e) => {
self.text_messages.errors.push(format!("Failed to create file {}, reason {}", file_name, e));
return false;
}
};
let mut writer = BufWriter::new(file_handler);
if let Err(e) = writeln!(
impl PrintResults for EmptyFiles {
fn write_results<T: Write>(&self, writer: &mut T) -> std::io::Result<()> {
writeln!(
writer,
"Results of searching {:?} with excluded directories {:?} and excluded items {:?}",
self.directories.included_directories, self.directories.excluded_directories, self.excluded_items.items
) {
self.text_messages.errors.push(format!("Failed to save results to file {}, reason {}", file_name, e));
return false;
}
self.common_data.directories.included_directories,
self.common_data.directories.excluded_directories,
self.common_data.excluded_items.get_excluded_items()
)?;
if !self.empty_files.is_empty() {
writeln!(writer, "Found {} empty files.", self.information.number_of_empty_files).unwrap();
for file_entry in self.empty_files.iter() {
writeln!(writer, "{}", file_entry.path.display()).unwrap();
writeln!(writer, "Found {} empty files.", self.information.number_of_empty_files)?;
for file_entry in &self.empty_files {
writeln!(writer, "{:?}", file_entry.path)?;
}
} else {
write!(writer, "Not found any empty files.").unwrap();
write!(writer, "Not found any empty files.")?;
}
Common::print_time(start_time, SystemTime::now(), "save_results_to_file".to_string());
true
Ok(())
}
fn save_results_to_file_as_json(&self, file_name: &str, pretty_print: bool) -> std::io::Result<()> {
self.save_results_to_file_as_json_internal(file_name, &self.empty_files, pretty_print)
}
}
impl PrintResults for EmptyFiles {
/// Print information's about duplicated entries
/// Only needed for CLI
fn print_results(&self) {
let start_time: SystemTime = SystemTime::now();
println!("Found {} empty files.\n", self.information.number_of_empty_files);
for file_entry in self.empty_files.iter() {
println!("{}", file_entry.path.display());
}
impl EmptyFiles {
pub const fn get_empty_files(&self) -> &Vec<FileEntry> {
&self.empty_files
}
Common::print_time(start_time, SystemTime::now(), "print_entries".to_string());
pub const fn get_information(&self) -> &Info {
&self.information
}
}

@ -1,101 +1,88 @@
use std::collections::BTreeMap;
use std::collections::HashMap;
use std::fs;
use std::fs::File;
use std::io::{BufWriter, Write};
use std::path::PathBuf;
use std::time::SystemTime;
use std::fs::DirEntry;
use std::io::Write;
use std::path::{Path, PathBuf};
use std::sync::atomic::Ordering;
use crossbeam_channel::Receiver;
use crossbeam_channel::{Receiver, Sender};
use fun_time::fun_time;
use log::debug;
use rayon::prelude::*;
use crate::common::Common;
use crate::common_dir_traversal::{Collect, DirTraversalBuilder, DirTraversalResult, FolderEmptiness, FolderEntry, ProgressData};
use crate::common::{check_if_stop_received, prepare_thread_handler_common, send_info_and_wait_for_ending_all_threads};
use crate::common_dir_traversal::{common_get_entry_data, common_get_metadata_dir, common_read_dir, get_modified_time, CheckingMethod, ProgressData, ToolType};
use crate::common_directory::Directories;
use crate::common_items::ExcludedItems;
use crate::common_messages::Messages;
use crate::common_traits::{DebugPrint, PrintResults, SaveResults};
use crate::common_tool::{CommonData, CommonToolData, DeleteMethod};
use crate::common_traits::{DebugPrint, PrintResults};
#[derive(Clone, Debug)]
pub struct FolderEntry {
pub path: PathBuf,
pub(crate) parent_path: Option<String>,
// Usable only when finding
pub(crate) is_empty: FolderEmptiness,
pub modified_date: u64,
}
impl FolderEntry {
pub fn get_modified_date(&self) -> u64 {
self.modified_date
}
}
/// Struct to store most basics info about all folder
pub struct EmptyFolder {
common_data: CommonToolData,
information: Info,
delete_folders: bool,
text_messages: Messages,
excluded_items: ExcludedItems,
empty_folder_list: BTreeMap<PathBuf, FolderEntry>, // Path, FolderEntry
directories: Directories,
stopped_search: bool,
empty_folder_list: HashMap<String, FolderEntry>, // Path, FolderEntry
}
/// Enum with values which show if folder is empty.
/// In function "`optimize_folders`" automatically "Maybe" is changed to "Yes", so it is not necessary to put it here
#[derive(Eq, PartialEq, Copy, Clone, Debug)]
pub(crate) enum FolderEmptiness {
No,
Maybe,
}
/// Info struck with helpful information's about results
#[derive(Default)]
pub struct Info {
pub number_of_empty_folders: usize,
}
impl Info {
pub fn new() -> Self {
Default::default()
}
}
/// Method implementation for EmptyFolder
impl EmptyFolder {
/// New function providing basics values
pub fn new() -> Self {
Self {
common_data: CommonToolData::new(ToolType::EmptyFolders),
information: Default::default(),
delete_folders: false,
text_messages: Messages::new(),
excluded_items: Default::default(),
empty_folder_list: Default::default(),
directories: Directories::new(),
stopped_search: false,
}
}
pub fn get_stopped_search(&self) -> bool {
self.stopped_search
}
pub const fn get_empty_folder_list(&self) -> &BTreeMap<PathBuf, FolderEntry> {
pub const fn get_empty_folder_list(&self) -> &HashMap<String, FolderEntry> {
&self.empty_folder_list
}
pub const fn get_text_messages(&self) -> &Messages {
&self.text_messages
}
pub const fn get_information(&self) -> &Info {
&self.information
}
pub fn set_excluded_items(&mut self, excluded_items: Vec<String>) {
self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages);
}
pub fn set_excluded_directory(&mut self, excluded_directory: Vec<PathBuf>) {
self.directories.set_excluded_directory(excluded_directory, &mut self.text_messages);
}
/// Public function used by CLI to search for empty folders
pub fn find_empty_folders(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) {
self.directories.optimize_directories(true, &mut self.text_messages);
#[fun_time(message = "find_empty_folders", level = "info")]
pub fn find_empty_folders(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&Sender<ProgressData>>) {
self.prepare_items();
if !self.check_for_empty_folders(stop_receiver, progress_sender) {
self.stopped_search = true;
self.common_data.stopped_search = true;
return;
}
self.optimize_folders();
if self.delete_folders {
self.delete_empty_folders();
}
self.debug_print();
}
pub fn set_delete_folder(&mut self, delete_folder: bool) {
self.delete_folders = delete_folder;
self.delete_files();
self.debug_print();
}
/// Clean directory tree
/// If directory contains only 2 empty folders, then this directory should be removed instead two empty folders inside because it will produce another empty folder.
fn optimize_folders(&mut self) {
let mut new_directory_folders: BTreeMap<PathBuf, FolderEntry> = Default::default();
let mut new_directory_folders: HashMap<String, FolderEntry> = Default::default();
for (name, folder_entry) in &self.empty_folder_list {
match &folder_entry.parent_path {
@ -113,63 +100,210 @@ impl EmptyFolder {
self.information.number_of_empty_folders = self.empty_folder_list.len();
}
/// Function to check if folder are empty.
/// Parameter initial_checking for second check before deleting to be sure that checked folder is still empty
fn check_for_empty_folders(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
let result = DirTraversalBuilder::new()
.root_dirs(self.directories.included_directories.clone())
.group_by(|_fe| ())
.stop_receiver(stop_receiver)
.progress_sender(progress_sender)
.directories(self.directories.clone())
.excluded_items(self.excluded_items.clone())
.collect(Collect::EmptyFolders)
.max_stage(0)
.build()
.run();
match result {
DirTraversalResult::SuccessFiles { .. } => {
unreachable!()
#[fun_time(message = "check_for_empty_folders", level = "debug")]
fn check_for_empty_folders(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&Sender<ProgressData>>) -> bool {
let mut folders_to_check: Vec<PathBuf> = self.common_data.directories.included_directories.clone();
let (progress_thread_handle, progress_thread_run, atomic_counter, _check_was_stopped) =
prepare_thread_handler_common(progress_sender, 0, 0, 0, CheckingMethod::None, self.common_data.tool_type);
let excluded_items = self.common_data.excluded_items.clone();
let directories = self.common_data.directories.clone();
let mut non_empty_folders: Vec<String> = vec![];
let mut start_folder_entries = Vec::with_capacity(folders_to_check.len());
let mut new_folder_entries_list = Vec::new();
for dir in &folders_to_check {
start_folder_entries.push(FolderEntry {
path: dir.clone(),
parent_path: None,
is_empty: FolderEmptiness::Maybe,
modified_date: 0,
});
}
while !folders_to_check.is_empty() {
if check_if_stop_received(stop_receiver) {
send_info_and_wait_for_ending_all_threads(&progress_thread_run, progress_thread_handle);
return false;
}
DirTraversalResult::SuccessFolders {
start_time,
folder_entries,
warnings,
} => {
// We need to set empty folder list
#[allow(unused_mut)] // Used is later by Windows build
for (mut name, folder_entry) in folder_entries {
if folder_entry.is_empty != FolderEmptiness::No {
self.empty_folder_list.insert(name, folder_entry);
let segments: Vec<_> = folders_to_check
.into_par_iter()
.map(|current_folder| {
let mut dir_result = vec![];
let mut warnings = vec![];
let mut non_empty_folder = None;
let mut folder_entries_list = vec![];
let current_folder_as_string = current_folder.to_string_lossy().to_string();
let Some(read_dir) = common_read_dir(&current_folder, &mut warnings) else {
return (dir_result, warnings, Some(current_folder_as_string), folder_entries_list);
};
let mut counter = 0;
// Check every sub folder/file/link etc.
for entry in read_dir {
let Some(entry_data) = common_get_entry_data(&entry, &mut warnings, &current_folder) else {
continue;
};
let Ok(file_type) = entry_data.file_type() else { continue };
if file_type.is_dir() {
counter += 1;
Self::process_dir_in_dir_mode(
&current_folder,
&current_folder_as_string,
entry_data,
&directories,
&mut dir_result,
&mut warnings,
&excluded_items,
&mut non_empty_folder,
&mut folder_entries_list,
);
} else {
if non_empty_folder.is_none() {
non_empty_folder = Some(current_folder_as_string.clone());
}
}
}
if counter > 0 {
// Increase counter in batch, because usually it may be slow to add multiple times atomic value
atomic_counter.fetch_add(counter, Ordering::Relaxed);
}
(dir_result, warnings, non_empty_folder, folder_entries_list)
})
.collect();
let required_size = segments.iter().map(|(segment, _, _, _)| segment.len()).sum::<usize>();
folders_to_check = Vec::with_capacity(required_size);
// Process collected data
for (segment, warnings, non_empty_folder, fe_list) in segments {
folders_to_check.extend(segment);
if !warnings.is_empty() {
self.common_data.text_messages.warnings.extend(warnings);
}
if let Some(non_empty_folder) = non_empty_folder {
non_empty_folders.push(non_empty_folder);
}
new_folder_entries_list.push(fe_list);
}
}
self.text_messages.warnings.extend(warnings);
let mut folder_entries: HashMap<String, FolderEntry> = HashMap::with_capacity(start_folder_entries.len() + new_folder_entries_list.iter().map(Vec::len).sum::<usize>());
for fe in start_folder_entries {
folder_entries.insert(fe.path.to_string_lossy().to_string(), fe);
}
for fe_list in new_folder_entries_list {
for fe in fe_list {
folder_entries.insert(fe.path.to_string_lossy().to_string(), fe);
}
}
Common::print_time(start_time, SystemTime::now(), "check_for_empty_folder".to_string());
true
// Start to
for current_folder in non_empty_folders.into_iter().rev() {
Self::set_as_not_empty_folder(&mut folder_entries, &current_folder);
}
for (name, folder_entry) in folder_entries {
if folder_entry.is_empty != FolderEmptiness::No {
self.empty_folder_list.insert(name, folder_entry);
}
DirTraversalResult::Stopped => false,
}
debug!("Found {} empty folders.", self.empty_folder_list.len());
send_info_and_wait_for_ending_all_threads(&progress_thread_run, progress_thread_handle);
true
}
/// Deletes earlier found empty folders
fn delete_empty_folders(&mut self) {
let start_time: SystemTime = SystemTime::now();
// Folders may be deleted or require too big privileges
for name in self.empty_folder_list.keys() {
match fs::remove_dir_all(name) {
Ok(_) => (),
Err(e) => self.text_messages.warnings.push(format!("Failed to remove folder {}, reason {}", name.display(), e)),
};
pub(crate) fn set_as_not_empty_folder(folder_entries: &mut HashMap<String, FolderEntry>, current_folder: &str) {
let mut d = folder_entries.get_mut(current_folder).unwrap();
if d.is_empty == FolderEmptiness::No {
return; // Already set as non empty by one of his child
}
Common::print_time(start_time, SystemTime::now(), "delete_files".to_string());
// Loop to recursively set as non empty this and all his parent folders
loop {
d.is_empty = FolderEmptiness::No;
if d.parent_path.is_some() {
let cf = d.parent_path.clone().unwrap();
d = folder_entries.get_mut(&cf).unwrap();
if d.is_empty == FolderEmptiness::No {
break; // Already set as non empty, so one of child already set it to non empty
}
} else {
break;
}
}
}
/// Set included dir which needs to be relative, exists etc.
pub fn set_included_directory(&mut self, included_directory: Vec<PathBuf>) {
self.directories.set_included_directory(included_directory, &mut self.text_messages);
fn process_dir_in_dir_mode(
current_folder: &Path,
current_folder_as_str: &str,
entry_data: &DirEntry,
directories: &Directories,
dir_result: &mut Vec<PathBuf>,
warnings: &mut Vec<String>,
excluded_items: &ExcludedItems,
non_empty_folder: &mut Option<String>,
folder_entries_list: &mut Vec<FolderEntry>,
) {
let next_folder = entry_data.path();
if excluded_items.is_excluded(&next_folder) || directories.is_excluded(&next_folder) {
if non_empty_folder.is_none() {
*non_empty_folder = Some(current_folder_as_str.to_string());
}
return;
}
#[cfg(target_family = "unix")]
if directories.exclude_other_filesystems() {
match directories.is_on_other_filesystems(&next_folder) {
Ok(true) => return,
Err(e) => warnings.push(e),
_ => (),
}
}
let Some(metadata) = common_get_metadata_dir(entry_data, warnings, &next_folder) else {
if non_empty_folder.is_none() {
*non_empty_folder = Some(current_folder_as_str.to_string());
}
return;
};
dir_result.push(next_folder.clone());
folder_entries_list.push(FolderEntry {
path: next_folder,
parent_path: Some(current_folder_as_str.to_string()),
is_empty: FolderEmptiness::Maybe,
modified_date: get_modified_time(&metadata, warnings, current_folder, true),
});
}
#[fun_time(message = "delete_files", level = "debug")]
fn delete_files(&mut self) {
if self.get_delete_method() == DeleteMethod::None {
return;
}
let folders_to_remove = self.empty_folder_list.keys().collect::<Vec<_>>();
let errors: Vec<_> = folders_to_remove
.into_par_iter()
.filter_map(|name| {
if let Err(e) = fs::remove_dir_all(name) {
Some(format!("Failed to remove folder {name:?}, reason {e}"))
} else {
None
}
})
.collect();
self.get_text_messages_mut().errors.extend(errors);
}
}
@ -180,72 +314,45 @@ impl Default for EmptyFolder {
}
impl DebugPrint for EmptyFolder {
#[allow(dead_code)]
#[allow(unreachable_code)]
fn debug_print(&self) {
#[cfg(not(debug_assertions))]
{
if !cfg!(debug_assertions) {
return;
}
println!("---------------DEBUG PRINT---------------");
println!("Number of empty folders - {}", self.information.number_of_empty_folders);
println!("Included directories - {:?}", self.directories.included_directories);
self.debug_print_common();
println!("-----------------------------------------");
}
}
impl SaveResults for EmptyFolder {
fn save_results_to_file(&mut self, file_name: &str) -> bool {
let start_time: SystemTime = SystemTime::now();
let file_name: String = match file_name {
"" => "results.txt".to_string(),
k => k.to_string(),
};
let file_handler = match File::create(&file_name) {
Ok(t) => t,
Err(e) => {
self.text_messages.errors.push(format!("Failed to create file {}, reason {}", file_name, e));
return false;
}
};
let mut writer = BufWriter::new(file_handler);
if let Err(e) = writeln!(
writer,
"Results of searching {:?} with excluded directories {:?}",
self.directories.included_directories, self.directories.excluded_directories
) {
self.text_messages.errors.push(format!("Failed to save results to file {}, reason {}", file_name, e));
return false;
}
impl PrintResults for EmptyFolder {
fn write_results<T: Write>(&self, writer: &mut T) -> std::io::Result<()> {
if !self.empty_folder_list.is_empty() {
writeln!(
writer,
"-------------------------------------------------Empty folder list-------------------------------------------------"
)
.unwrap();
writeln!(writer, "Found {} empty folders", self.information.number_of_empty_folders).unwrap();
for name in self.empty_folder_list.keys() {
writeln!(writer, "{}", name.display()).unwrap();
writeln!(writer, "--------------------------Empty folder list--------------------------")?;
writeln!(writer, "Found {} empty folders", self.information.number_of_empty_folders)?;
let mut empty_folder_list = self.empty_folder_list.keys().collect::<Vec<_>>();
empty_folder_list.par_sort_unstable();
for name in empty_folder_list {
writeln!(writer, "{name}")?;
}
} else {
write!(writer, "Not found any empty folders.").unwrap();
write!(writer, "Not found any empty folders.")?;
}
Common::print_time(start_time, SystemTime::now(), "save_results_to_file".to_string());
true
Ok(())
}
fn save_results_to_file_as_json(&self, file_name: &str, pretty_print: bool) -> std::io::Result<()> {
self.save_results_to_file_as_json_internal(file_name, &self.empty_folder_list.keys().collect::<Vec<_>>(), pretty_print)
}
}
impl PrintResults for EmptyFolder {
fn print_results(&self) {
if !self.empty_folder_list.is_empty() {
println!("Found {} empty folders", self.empty_folder_list.len());
}
for name in self.empty_folder_list.keys() {
println!("{}", name.display());
}
impl CommonData for EmptyFolder {
fn get_cd(&self) -> &CommonToolData {
&self.common_data
}
fn get_cd_mut(&mut self) -> &mut CommonToolData {
&mut self.common_data
}
}

@ -1,166 +1,171 @@
use std::fs;
use std::fs::File;
use std::io::prelude::*;
use std::io::BufWriter;
use std::path::PathBuf;
use std::time::SystemTime;
use std::path::{Path, PathBuf};
use crossbeam_channel::Receiver;
use crossbeam_channel::{Receiver, Sender};
use fun_time::fun_time;
use log::debug;
use serde::{Deserialize, Serialize};
use crate::common::Common;
use crate::common_dir_traversal::{Collect, DirTraversalBuilder, DirTraversalResult, ErrorType, FileEntry, ProgressData};
use crate::common_directory::Directories;
use crate::common_extensions::Extensions;
use crate::common_items::ExcludedItems;
use crate::common_messages::Messages;
use crate::common_dir_traversal::{Collect, DirTraversalBuilder, DirTraversalResult, ErrorType, FileEntry, ProgressData, ToolType};
use crate::common_tool::{CommonData, CommonToolData, DeleteMethod};
use crate::common_traits::*;
#[derive(Eq, PartialEq, Clone, Debug)]
pub enum DeleteMethod {
None,
Delete,
}
/// Info struck with helpful information's about results
#[derive(Default)]
pub struct Info {
pub number_of_invalid_symlinks: usize,
}
impl Info {
pub fn new() -> Self {
Default::default()
const MAX_NUMBER_OF_SYMLINK_JUMPS: i32 = 20;
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
pub struct SymlinkInfo {
pub destination_path: PathBuf,
pub type_of_error: ErrorType,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct SymlinksFileEntry {
pub path: PathBuf,
pub size: u64,
pub modified_date: u64,
pub symlink_info: SymlinkInfo,
}
impl ResultEntry for SymlinksFileEntry {
fn get_path(&self) -> &Path {
&self.path
}
fn get_modified_date(&self) -> u64 {
self.modified_date
}
fn get_size(&self) -> u64 {
self.size
}
}
impl FileEntry {
fn into_symlinks_entry(self, symlink_info: SymlinkInfo) -> SymlinksFileEntry {
SymlinksFileEntry {
size: self.size,
path: self.path,
modified_date: self.modified_date,
symlink_info,
}
}
}
/// Struct with required information's to work
pub struct InvalidSymlinks {
text_messages: Messages,
common_data: CommonToolData,
information: Info,
invalid_symlinks: Vec<FileEntry>,
directories: Directories,
allowed_extensions: Extensions,
excluded_items: ExcludedItems,
recursive_search: bool,
delete_method: DeleteMethod,
stopped_search: bool,
invalid_symlinks: Vec<SymlinksFileEntry>,
}
impl InvalidSymlinks {
pub fn new() -> Self {
Self {
text_messages: Messages::new(),
information: Info::new(),
recursive_search: true,
allowed_extensions: Extensions::new(),
directories: Directories::new(),
excluded_items: ExcludedItems::new(),
common_data: CommonToolData::new(ToolType::InvalidSymlinks),
information: Info::default(),
invalid_symlinks: vec![],
delete_method: DeleteMethod::None,
stopped_search: false,
}
}
pub fn find_invalid_links(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) {
self.directories.optimize_directories(self.recursive_search, &mut self.text_messages);
#[fun_time(message = "find_invalid_links", level = "info")]
pub fn find_invalid_links(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&Sender<ProgressData>>) {
self.prepare_items();
if !self.check_files(stop_receiver, progress_sender) {
self.stopped_search = true;
self.common_data.stopped_search = true;
return;
}
self.delete_files();
self.debug_print();
}
pub fn get_stopped_search(&self) -> bool {
self.stopped_search
}
pub const fn get_invalid_symlinks(&self) -> &Vec<FileEntry> {
&self.invalid_symlinks
}
pub const fn get_text_messages(&self) -> &Messages {
&self.text_messages
}
pub const fn get_information(&self) -> &Info {
&self.information
}
pub fn set_delete_method(&mut self, delete_method: DeleteMethod) {
self.delete_method = delete_method;
}
pub fn set_recursive_search(&mut self, recursive_search: bool) {
self.recursive_search = recursive_search;
}
pub fn set_included_directory(&mut self, included_directory: Vec<PathBuf>) -> bool {
self.directories.set_included_directory(included_directory, &mut self.text_messages)
}
pub fn set_excluded_directory(&mut self, excluded_directory: Vec<PathBuf>) {
self.directories.set_excluded_directory(excluded_directory, &mut self.text_messages);
}
pub fn set_allowed_extensions(&mut self, allowed_extensions: String) {
self.allowed_extensions.set_allowed_extensions(allowed_extensions, &mut self.text_messages);
}
pub fn set_excluded_items(&mut self, excluded_items: Vec<String>) {
self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages);
}
/// Check files for any with size == 0
fn check_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
#[fun_time(message = "check_files", level = "debug")]
fn check_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&Sender<ProgressData>>) -> bool {
let result = DirTraversalBuilder::new()
.root_dirs(self.directories.included_directories.clone())
.common_data(&self.common_data)
.group_by(|_fe| ())
.stop_receiver(stop_receiver)
.progress_sender(progress_sender)
.collect(Collect::InvalidSymlinks)
.directories(self.directories.clone())
.allowed_extensions(self.allowed_extensions.clone())
.excluded_items(self.excluded_items.clone())
.recursive_search(self.recursive_search)
.build()
.run();
match result {
DirTraversalResult::SuccessFiles {
start_time,
grouped_file_entries,
warnings,
} => {
if let Some(((), invalid_symlinks)) = grouped_file_entries.into_iter().next() {
self.invalid_symlinks = invalid_symlinks;
}
DirTraversalResult::SuccessFiles { grouped_file_entries, warnings } => {
self.invalid_symlinks = grouped_file_entries
.into_values()
.flatten()
.filter_map(|e| {
let Some((destination_path, type_of_error)) = Self::check_invalid_symlinks(&e.path) else {
return None;
};
Some(e.into_symlinks_entry(SymlinkInfo { destination_path, type_of_error }))
})
.collect();
self.information.number_of_invalid_symlinks = self.invalid_symlinks.len();
self.text_messages.warnings.extend(warnings);
Common::print_time(start_time, SystemTime::now(), "check_files_name".to_string());
self.common_data.text_messages.warnings.extend(warnings);
debug!("Found {} invalid symlinks.", self.information.number_of_invalid_symlinks);
true
}
DirTraversalResult::SuccessFolders { .. } => unreachable!(),
DirTraversalResult::Stopped => false,
}
}
/// Function to delete files, from filed Vector
fn delete_files(&mut self) {
let start_time: SystemTime = SystemTime::now();
fn check_invalid_symlinks(current_file_name: &Path) -> Option<(PathBuf, ErrorType)> {
let mut destination_path = PathBuf::new();
let type_of_error;
match current_file_name.read_link() {
Ok(t) => {
destination_path.push(t);
let mut number_of_loop = 0;
let mut current_path = current_file_name.to_path_buf();
loop {
if number_of_loop == 0 && !current_path.exists() {
type_of_error = ErrorType::NonExistentFile;
break;
}
if number_of_loop == MAX_NUMBER_OF_SYMLINK_JUMPS {
type_of_error = ErrorType::InfiniteRecursion;
break;
}
match self.delete_method {
current_path = match current_path.read_link() {
Ok(t) => t,
Err(_inspected) => {
// Looks that some next symlinks are broken, but we do nothing with it - TODO why they are broken
return None;
}
};
number_of_loop += 1;
}
}
Err(_inspected) => {
// Failed to load info about it
type_of_error = ErrorType::NonExistentFile;
}
}
Some((destination_path, type_of_error))
}
#[fun_time(message = "delete_files", level = "debug")]
fn delete_files(&mut self) {
match self.common_data.delete_method {
DeleteMethod::Delete => {
for file_entry in &self.invalid_symlinks {
if fs::remove_file(file_entry.path.clone()).is_err() {
self.text_messages.warnings.push(file_entry.path.display().to_string());
if fs::remove_file(&file_entry.path).is_err() {
self.common_data.text_messages.warnings.push(file_entry.path.to_string_lossy().to_string());
}
}
}
DeleteMethod::None => {
//Just do nothing
}
_ => unreachable!(),
}
Common::print_time(start_time, SystemTime::now(), "delete_files".to_string());
}
}
@ -171,100 +176,60 @@ impl Default for InvalidSymlinks {
}
impl DebugPrint for InvalidSymlinks {
#[allow(dead_code)]
#[allow(unreachable_code)]
/// Debugging printing - only available on debug build
fn debug_print(&self) {
#[cfg(not(debug_assertions))]
{
if !cfg!(debug_assertions) {
return;
}
println!("---------------DEBUG PRINT---------------");
println!("### Information's");
println!("Errors size - {}", self.text_messages.errors.len());
println!("Warnings size - {}", self.text_messages.warnings.len());
println!("Messages size - {}", self.text_messages.messages.len());
println!("### Other");
println!("Invalid symlinks list size - {}", self.invalid_symlinks.len());
println!("Excluded items - {:?}", self.excluded_items.items);
println!("Included directories - {:?}", self.directories.included_directories);
println!("Excluded directories - {:?}", self.directories.excluded_directories);
println!("Recursive search - {}", self.recursive_search);
println!("Delete Method - {:?}", self.delete_method);
self.debug_print_common();
println!("-----------------------------------------");
}
}
impl SaveResults for InvalidSymlinks {
fn save_results_to_file(&mut self, file_name: &str) -> bool {
let start_time: SystemTime = SystemTime::now();
let file_name: String = match file_name {
"" => "results.txt".to_string(),
k => k.to_string(),
};
let file_handler = match File::create(&file_name) {
Ok(t) => t,
Err(e) => {
self.text_messages.errors.push(format!("Failed to create file {}, reason {}", file_name, e));
return false;
}
};
let mut writer = BufWriter::new(file_handler);
if let Err(e) = writeln!(
writer,
"Results of searching {:?} with excluded directories {:?} and excluded items {:?}",
self.directories.included_directories, self.directories.excluded_directories, self.excluded_items.items
) {
self.text_messages.errors.push(format!("Failed to save results to file {}, reason {}", file_name, e));
return false;
}
impl PrintResults for InvalidSymlinks {
fn write_results<T: Write>(&self, writer: &mut T) -> std::io::Result<()> {
if !self.invalid_symlinks.is_empty() {
writeln!(writer, "Found {} invalid symlinks.", self.information.number_of_invalid_symlinks).unwrap();
for file_entry in self.invalid_symlinks.iter() {
writeln!(writer, "Found {} invalid symlinks.", self.information.number_of_invalid_symlinks)?;
for file_entry in &self.invalid_symlinks {
writeln!(
writer,
"{}\t\t{}\t\t{}",
file_entry.path.display(),
file_entry.symlink_info.clone().expect("invalid traversal result").destination_path.display(),
match file_entry.symlink_info.clone().expect("invalid traversal result").type_of_error {
"{:?}\t\t{:?}\t\t{}",
file_entry.path,
file_entry.symlink_info.destination_path,
match file_entry.symlink_info.type_of_error {
ErrorType::InfiniteRecursion => "Infinite Recursion",
ErrorType::NonExistentFile => "Non Existent File",
}
)
.unwrap();
)?;
}
} else {
write!(writer, "Not found any invalid symlinks.").unwrap();
write!(writer, "Not found any invalid symlinks.")?;
}
Common::print_time(start_time, SystemTime::now(), "save_results_to_file".to_string());
true
Ok(())
}
fn save_results_to_file_as_json(&self, file_name: &str, pretty_print: bool) -> std::io::Result<()> {
self.save_results_to_file_as_json_internal(file_name, &self.invalid_symlinks, pretty_print)
}
}
impl PrintResults for InvalidSymlinks {
/// Print information's about duplicated entries
/// Only needed for CLI
fn print_results(&self) {
let start_time: SystemTime = SystemTime::now();
println!("Found {} invalid symlinks.\n", self.information.number_of_invalid_symlinks);
for file_entry in self.invalid_symlinks.iter() {
println!(
"{}\t\t{}\t\t{}",
file_entry.path.display(),
file_entry.symlink_info.clone().expect("invalid traversal result").destination_path.display(),
match file_entry.symlink_info.clone().expect("invalid traversal result").type_of_error {
ErrorType::InfiniteRecursion => "Infinite Recursion",
ErrorType::NonExistentFile => "Non Existent File",
}
);
}
impl CommonData for InvalidSymlinks {
fn get_cd(&self) -> &CommonToolData {
&self.common_data
}
fn get_cd_mut(&mut self) -> &mut CommonToolData {
&mut self.common_data
}
}
Common::print_time(start_time, SystemTime::now(), "print_entries".to_string());
impl InvalidSymlinks {
pub const fn get_invalid_symlinks(&self) -> &Vec<SymlinksFileEntry> {
&self.invalid_symlinks
}
pub const fn get_information(&self) -> &Info {
&self.information
}
}

@ -1,5 +1,7 @@
#![allow(clippy::collapsible_else_if)]
#![allow(clippy::type_complexity)]
#![allow(clippy::needless_late_init)]
#![allow(clippy::too_many_arguments)]
#[macro_use]
extern crate bitflags;
@ -15,12 +17,15 @@ pub mod similar_images;
pub mod similar_videos;
pub mod temporary;
pub mod bad_extensions;
pub mod common;
pub mod common_cache;
pub mod common_dir_traversal;
pub mod common_directory;
pub mod common_extensions;
pub mod common_items;
pub mod common_messages;
pub mod common_tool;
pub mod common_traits;
pub mod localizer_core;

@ -1,9 +1,7 @@
use std::collections::HashMap;
use i18n_embed::{
fluent::{fluent_language_loader, FluentLanguageLoader},
DefaultLocalizer, LanguageLoader, Localizer,
};
use i18n_embed::fluent::{fluent_language_loader, FluentLanguageLoader};
use i18n_embed::{DefaultLocalizer, LanguageLoader, Localizer};
use once_cell::sync::Lazy;
use rust_embed::RustEmbed;
@ -31,6 +29,7 @@ macro_rules! flc {
}
// Get the `Localizer` to be used for localizing this library.
pub fn localizer_core() -> Box<dyn Localizer> {
Box::from(DefaultLocalizer::new(&*LANGUAGE_LOADER_CORE, &Localizations))
}
@ -46,6 +45,7 @@ pub fn generate_translation_hashmap(vec: Vec<(&'static str, String)>) -> HashMap
pub fn fnc_get_similarity_very_high() -> String {
flc!("core_similarity_very_high")
}
pub fn fnc_get_similarity_minimal() -> String {
flc!("core_similarity_minimal")
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,336 +1,218 @@
use std::fs::{File, Metadata};
use std::fs;
use std::fs::DirEntry;
use std::io::prelude::*;
use std::io::BufWriter;
use std::path::PathBuf;
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::Arc;
use std::thread::sleep;
use std::time::{Duration, SystemTime, UNIX_EPOCH};
use std::{fs, thread};
use crossbeam_channel::Receiver;
use crossbeam_channel::{Receiver, Sender};
use fun_time::fun_time;
use rayon::prelude::*;
use serde::Serialize;
use crate::common::{Common, LOOP_DURATION};
use crate::common_directory::Directories;
use crate::common_items::ExcludedItems;
use crate::common_messages::Messages;
use crate::common::{check_folder_children, check_if_stop_received, prepare_thread_handler_common, send_info_and_wait_for_ending_all_threads};
use crate::common_dir_traversal::{common_read_dir, get_modified_time, CheckingMethod, ProgressData, ToolType};
use crate::common_tool::{CommonData, CommonToolData, DeleteMethod};
use crate::common_traits::*;
use crate::flc;
use crate::localizer_core::generate_translation_hashmap;
#[derive(Debug)]
pub struct ProgressData {
pub current_stage: u8,
pub max_stage: u8,
pub files_checked: usize,
}
#[derive(Eq, PartialEq, Clone, Debug)]
pub enum DeleteMethod {
None,
Delete,
}
#[derive(Clone)]
pub struct FileEntry {
const TEMP_EXTENSIONS: &[&str] = &[
"#",
"thumbs.db",
".bak",
"~",
".tmp",
".temp",
".ds_store",
".crdownload",
".part",
".cache",
".dmp",
".download",
".partial",
];
#[derive(Clone, Serialize, Debug)]
pub struct TemporaryFileEntry {
pub path: PathBuf,
pub modified_date: u64,
}
/// Info struck with helpful information's about results
impl TemporaryFileEntry {
pub fn get_path(&self) -> &PathBuf {
&self.path
}
pub fn get_modified_date(&self) -> u64 {
self.modified_date
}
}
#[derive(Default)]
pub struct Info {
pub number_of_temporary_files: usize,
}
impl Info {
pub fn new() -> Self {
Default::default()
}
}
/// Struct with required information's to work
pub struct Temporary {
text_messages: Messages,
common_data: CommonToolData,
information: Info,
temporary_files: Vec<FileEntry>,
directories: Directories,
excluded_items: ExcludedItems,
recursive_search: bool,
delete_method: DeleteMethod,
stopped_search: bool,
temporary_files: Vec<TemporaryFileEntry>,
}
impl Temporary {
pub fn new() -> Self {
Self {
text_messages: Messages::new(),
information: Info::new(),
recursive_search: true,
directories: Directories::new(),
excluded_items: ExcludedItems::new(),
delete_method: DeleteMethod::None,
common_data: CommonToolData::new(ToolType::TemporaryFiles),
information: Info::default(),
temporary_files: vec![],
stopped_search: false,
}
}
/// Finding temporary files, save results to internal struct variables
pub fn find_temporary_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) {
self.directories.optimize_directories(self.recursive_search, &mut self.text_messages);
#[fun_time(message = "find_temporary_files", level = "info")]
pub fn find_temporary_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&Sender<ProgressData>>) {
self.prepare_items();
if !self.check_files(stop_receiver, progress_sender) {
self.stopped_search = true;
self.common_data.stopped_search = true;
return;
}
self.delete_files();
self.debug_print();
}
pub fn get_stopped_search(&self) -> bool {
self.stopped_search
}
pub const fn get_temporary_files(&self) -> &Vec<FileEntry> {
&self.temporary_files
}
pub const fn get_text_messages(&self) -> &Messages {
&self.text_messages
}
pub const fn get_information(&self) -> &Info {
&self.information
}
pub fn set_delete_method(&mut self, delete_method: DeleteMethod) {
self.delete_method = delete_method;
}
pub fn set_recursive_search(&mut self, recursive_search: bool) {
self.recursive_search = recursive_search;
}
pub fn set_included_directory(&mut self, included_directory: Vec<PathBuf>) -> bool {
self.directories.set_included_directory(included_directory, &mut self.text_messages)
}
#[fun_time(message = "check_files", level = "debug")]
fn check_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&Sender<ProgressData>>) -> bool {
let mut folders_to_check: Vec<PathBuf> = self.common_data.directories.included_directories.clone();
pub fn set_excluded_directory(&mut self, excluded_directory: Vec<PathBuf>) {
self.directories.set_excluded_directory(excluded_directory, &mut self.text_messages);
}
pub fn set_excluded_items(&mut self, excluded_items: Vec<String>) {
self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages);
}
fn check_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
let start_time: SystemTime = SystemTime::now();
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
// Add root folders for finding
for id in &self.directories.included_directories {
folders_to_check.push(id.clone());
}
//// PROGRESS THREAD START
let progress_thread_run = Arc::new(AtomicBool::new(true));
let atomic_file_counter = Arc::new(AtomicUsize::new(0));
let progress_thread_handle = if let Some(progress_sender) = progress_sender {
let progress_send = progress_sender.clone();
let progress_thread_run = progress_thread_run.clone();
let atomic_file_counter = atomic_file_counter.clone();
thread::spawn(move || loop {
progress_send
.unbounded_send(ProgressData {
current_stage: 0,
max_stage: 0,
files_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
})
.unwrap();
if !progress_thread_run.load(Ordering::Relaxed) {
break;
}
sleep(Duration::from_millis(LOOP_DURATION as u64));
})
} else {
thread::spawn(|| {})
};
//// PROGRESS THREAD END
let (progress_thread_handle, progress_thread_run, atomic_counter, _check_was_stopped) =
prepare_thread_handler_common(progress_sender, 0, 0, 0, CheckingMethod::None, self.common_data.tool_type);
while !folders_to_check.is_empty() {
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
// End thread which send info to gui
progress_thread_run.store(false, Ordering::Relaxed);
progress_thread_handle.join().unwrap();
if check_if_stop_received(stop_receiver) {
send_info_and_wait_for_ending_all_threads(&progress_thread_run, progress_thread_handle);
return false;
}
let segments: Vec<_> = folders_to_check
.par_iter()
.into_par_iter()
.map(|current_folder| {
let mut dir_result = vec![];
let mut warnings = vec![];
let mut fe_result = vec![];
// Read current dir childrens
let read_dir = match fs::read_dir(&current_folder) {
Ok(t) => t,
Err(e) => {
warnings.push(flc!(
"core_cannot_open_dir",
generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())])
));
return (dir_result, warnings, fe_result);
}
let Some(read_dir) = common_read_dir(&current_folder, &mut warnings) else {
return (dir_result, warnings, fe_result);
};
// Check every sub folder/file/link etc.
'dir: for entry in read_dir {
let entry_data = match entry {
Ok(t) => t,
Err(e) => {
warnings.push(flc!(
"core_cannot_read_entry_dir",
generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())])
));
continue 'dir;
}
for entry in read_dir {
let Ok(entry_data) = entry else {
continue;
};
let metadata: Metadata = match entry_data.metadata() {
Ok(t) => t,
Err(e) => {
warnings.push(flc!(
"core_cannot_read_metadata_dir",
generate_translation_hashmap(vec![("dir", current_folder.display().to_string()), ("reason", e.to_string())])
));
continue 'dir;
}
let Ok(file_type) = entry_data.file_type() else {
continue;
};
if metadata.is_dir() {
if !self.recursive_search {
continue 'dir;
}
let next_folder = current_folder.join(entry_data.file_name());
if self.directories.is_excluded(&next_folder) {
continue 'dir;
}
if self.excluded_items.is_excluded(&next_folder) {
continue 'dir;
}
dir_result.push(next_folder);
} else if metadata.is_file() {
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
let file_name_lowercase: String = match entry_data.file_name().into_string() {
Ok(t) => t,
Err(_inspected) => {
warnings.push(flc!(
"core_file_not_utf8_name",
generate_translation_hashmap(vec![("name", entry_data.path().display().to_string())])
));
continue 'dir;
}
}
.to_lowercase();
if ![
"#",
"thumbs.db",
".bak",
"~",
".tmp",
".temp",
".ds_store",
".crdownload",
".part",
".cache",
".dmp",
".download",
".partial",
]
.iter()
.any(|f| file_name_lowercase.ends_with(f))
{
continue 'dir;
if file_type.is_dir() {
check_folder_children(
&mut dir_result,
&mut warnings,
&entry_data,
self.common_data.recursive_search,
&self.common_data.directories,
&self.common_data.excluded_items,
);
} else if file_type.is_file() {
if let Some(file_entry) = self.get_file_entry(&atomic_counter, &entry_data, &mut warnings) {
fe_result.push(file_entry);
}
let current_file_name = current_folder.join(entry_data.file_name());
if self.excluded_items.is_excluded(&current_file_name) {
continue 'dir;
}
// Creating new file entry
let fe: FileEntry = FileEntry {
path: current_file_name.clone(),
modified_date: match metadata.modified() {
Ok(t) => match t.duration_since(UNIX_EPOCH) {
Ok(d) => d.as_secs(),
Err(_inspected) => {
warnings.push(flc!(
"core_file_modified_before_epoch",
generate_translation_hashmap(vec![("name", current_file_name.display().to_string())])
));
0
}
},
Err(e) => {
warnings.push(flc!(
"core_file_no_modification_date",
generate_translation_hashmap(vec![("name", current_file_name.display().to_string()), ("reason", e.to_string())])
));
0
} // Permissions Denied
},
};
fe_result.push(fe);
}
}
(dir_result, warnings, fe_result)
})
.collect();
// Advance the frontier
folders_to_check.clear();
let required_size = segments.iter().map(|(segment, _, _)| segment.len()).sum::<usize>();
folders_to_check = Vec::with_capacity(required_size);
// Process collected data
for (segment, warnings, fe_result) in segments {
folders_to_check.extend(segment);
self.text_messages.warnings.extend(warnings);
self.common_data.text_messages.warnings.extend(warnings);
for fe in fe_result {
self.temporary_files.push(fe);
}
}
}
// End thread which send info to gui
progress_thread_run.store(false, Ordering::Relaxed);
progress_thread_handle.join().unwrap();
send_info_and_wait_for_ending_all_threads(&progress_thread_run, progress_thread_handle);
self.information.number_of_temporary_files = self.temporary_files.len();
Common::print_time(start_time, SystemTime::now(), "check_files_size".to_string());
true
}
pub fn get_file_entry(&self, atomic_counter: &Arc<AtomicUsize>, entry_data: &DirEntry, warnings: &mut Vec<String>) -> Option<TemporaryFileEntry> {
atomic_counter.fetch_add(1, Ordering::Relaxed);
/// Function to delete files, from filed Vector
fn delete_files(&mut self) {
let start_time: SystemTime = SystemTime::now();
let current_file_name = entry_data.path();
if self.common_data.excluded_items.is_excluded(&current_file_name) {
return None;
}
let file_name = entry_data.file_name();
let file_name_ascii_lowercase = file_name.to_ascii_lowercase();
let file_name_lowercase = file_name_ascii_lowercase.to_string_lossy();
if !TEMP_EXTENSIONS.iter().any(|f| file_name_lowercase.ends_with(f)) {
return None;
}
match self.delete_method {
let Ok(metadata) = entry_data.metadata() else {
return None;
};
// Creating new file entry
Some(TemporaryFileEntry {
modified_date: get_modified_time(&metadata, warnings, &current_file_name, false),
path: current_file_name,
})
}
#[fun_time(message = "delete_files", level = "debug")]
fn delete_files(&mut self) {
match self.common_data.delete_method {
DeleteMethod::Delete => {
let mut warnings = Vec::new();
for file_entry in &self.temporary_files {
if fs::remove_file(file_entry.path.clone()).is_err() {
self.text_messages.warnings.push(file_entry.path.display().to_string());
warnings.push(file_entry.path.to_string_lossy().to_string());
}
}
self.common_data.text_messages.warnings.extend(warnings);
}
DeleteMethod::None => {
//Just do nothing
}
_ => unreachable!(),
}
}
}
Common::print_time(start_time, SystemTime::now(), "delete_files".to_string());
impl PrintResults for Temporary {
fn write_results<T: Write>(&self, writer: &mut T) -> std::io::Result<()> {
writeln!(
writer,
"Results of searching {:?} with excluded directories {:?} and excluded items {:?}",
self.common_data.directories.included_directories,
self.common_data.directories.excluded_directories,
self.common_data.excluded_items.get_excluded_items()
)?;
writeln!(writer, "Found {} temporary files.\n", self.information.number_of_temporary_files)?;
for file_entry in &self.temporary_files {
writeln!(writer, "{:?}", file_entry.path)?;
}
Ok(())
}
fn save_results_to_file_as_json(&self, file_name: &str, pretty_print: bool) -> std::io::Result<()> {
self.save_results_to_file_as_json_internal(file_name, &self.temporary_files, pretty_print)
}
}
@ -341,79 +223,31 @@ impl Default for Temporary {
}
impl DebugPrint for Temporary {
#[allow(dead_code)]
#[allow(unreachable_code)]
fn debug_print(&self) {
#[cfg(not(debug_assertions))]
{
if !cfg!(debug_assertions) {
return;
}
println!("---------------DEBUG PRINT---------------");
println!("### Information's");
println!("Errors size - {}", self.text_messages.errors.len());
println!("Warnings size - {}", self.text_messages.warnings.len());
println!("Messages size - {}", self.text_messages.messages.len());
println!("### Other");
println!("Temporary list size - {}", self.temporary_files.len());
println!("Excluded items - {:?}", self.excluded_items.items);
println!("Included directories - {:?}", self.directories.included_directories);
println!("Excluded directories - {:?}", self.directories.excluded_directories);
println!("Recursive search - {}", self.recursive_search);
println!("Delete Method - {:?}", self.delete_method);
println!("-----------------------------------------");
self.debug_print_common();
}
}
impl SaveResults for Temporary {
fn save_results_to_file(&mut self, file_name: &str) -> bool {
let start_time: SystemTime = SystemTime::now();
let file_name: String = match file_name {
"" => "results.txt".to_string(),
k => k.to_string(),
};
let file_handler = match File::create(&file_name) {
Ok(t) => t,
Err(e) => {
self.text_messages.errors.push(format!("Failed to create file {}, reason {}", file_name, e));
return false;
}
};
let mut writer = BufWriter::new(file_handler);
if let Err(e) = writeln!(
writer,
"Results of searching {:?} with excluded directories {:?} and excluded items {:?}",
self.directories.included_directories, self.directories.excluded_directories, self.excluded_items.items
) {
self.text_messages.errors.push(format!("Failed to save results to file {}, reason {}", file_name, e));
return false;
}
if !self.temporary_files.is_empty() {
writeln!(writer, "Found {} temporary files.", self.information.number_of_temporary_files).unwrap();
for file_entry in self.temporary_files.iter() {
writeln!(writer, "{}", file_entry.path.display()).unwrap();
}
} else {
write!(writer, "Not found any temporary files.").unwrap();
}
Common::print_time(start_time, SystemTime::now(), "save_results_to_file".to_string());
true
impl CommonData for Temporary {
fn get_cd(&self) -> &CommonToolData {
&self.common_data
}
fn get_cd_mut(&mut self) -> &mut CommonToolData {
&mut self.common_data
}
}
impl PrintResults for Temporary {
fn print_results(&self) {
let start_time: SystemTime = SystemTime::now();
println!("Found {} temporary files.\n", self.information.number_of_temporary_files);
for file_entry in self.temporary_files.iter() {
println!("{}", file_entry.path.display());
}
impl Temporary {
pub const fn get_temporary_files(&self) -> &Vec<TemporaryFileEntry> {
&self.temporary_files
}
Common::print_time(start_time, SystemTime::now(), "print_entries".to_string());
pub const fn get_information(&self) -> &Info {
&self.information
}
}

@ -1,59 +1,63 @@
[package]
name = "czkawka_gui"
version = "4.0.0"
version = "7.0.0"
authors = ["Rafał Mikrut <mikrutrafal@protonmail.com>"]
edition = "2018"
edition = "2021"
rust-version = "1.75.0"
description = "GTK frontend of Czkawka"
license = "MIT"
homepage = "https://github.com/qarmin/czkawka"
repository = "https://github.com/qarmin/czkawka"
[dependencies]
czkawka_core = { path = "../czkawka_core", version = "4.0.0"}
gdk = "0.14.3"
glib = "0.14.8"
gdk4 = "0.8"
glib = "0.19"
gtk4 = { version = "0.8", default-features = false, features = ["v4_6"] }
humansize = "1.1.1"
chrono = "0.4.19"
humansize = "2.1"
chrono = "0.4.34"
# Used for sending stop signal across threads
crossbeam-channel = "0.5.1"
# To get informations about progress
futures = "0.3.19"
crossbeam-channel = "0.5"
# For saving/loading config files to specific directories
directories-next = "2.0.0"
directories-next = "2.0"
# For opening files
open = "2.0.2"
open = "5.0"
# To get image preview
image = "0.23.14"
image = "0.24"
# To be able to use custom select
regex = "1.5.4"
regex = "1.10"
# To get image_hash types
img_hash = "3.2.0"
# To get image_hasher types
image_hasher = "1.2"
# Move files to trash
trash = "1.3.0"
trash = "3.3"
# For moving files(why std::fs doesn't have such features)
fs_extra = "1.2.0"
# For moving files(why std::fs doesn't have such features?)
fs_extra = "1.3"
# Language
i18n-embed = { version = "0.13", features = ["fluent-system", "desktop-requester"] }
i18n-embed-fl = "0.6.1"
rust-embed = "6.3.0"
once_cell = "1.9.0"
i18n-embed = { version = "0.14", features = ["fluent-system", "desktop-requester"] }
i18n-embed-fl = "0.8"
rust-embed = { version = "8.2", features = ["debug-embed"] }
once_cell = "1.19"
log = "0.4.20"
handsome_logger = "0.8"
fun_time = { version = "0.3", features = ["log"] }
rayon = "1.8"
czkawka_core = { path = "../czkawka_core", version = "7.0.0", features = [] }
[target.'cfg(windows)'.dependencies]
winapi = { version = "0.3.9", features = ["combaseapi", "objbase", "shobjidl_core", "windef", "winerror", "wtypesbase", "winuser"] }
[dependencies.gtk]
version = "0.14.3"
default-features = false # just in case
features = ["v3_24_9"]
[features]
default = []
heif = ["czkawka_core/heif"]
libraw = ["czkawka_core/libraw"]

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2020-2021 Rafał Mikrut
Copyright (c) 2020-2024 Rafał Mikrut
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@ -366,4 +366,23 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
SOFTWARE.
Icons used inside GUI version
Reshot license - https://www.reshot.com/
czkawka_gui/icons/*
Photos, Icons or Illustrations from Reshot can be used in:
- Social Media posts
- Online marketing ads
- Educational projects
- Commercial projects
- Editorial projects
Items under the Reshot Free License can be used in your commercial and non-commercial projects, for free.
Youre granted a copyright license to download, copy, modify, distribute, publicly perform and broadcast the Items.
Your rights are non-exclusive, worldwide, sub-licensable and ongoing. Attribution is not required, however, we would
appreciate it if you credit Reshot where reasonably possible.

@ -0,0 +1,132 @@
# Czkawka GUI
Czkawka GUI is a graphical user interface for Czkawka Core written with GTK 4.
![Screenshot from 2023-11-26 12-43-32](https://github.com/qarmin/czkawka/assets/41945903/722ed490-0be1-4dac-bcfc-182a4d0787dc)
## Requirements
Requirements depend on your platform.
Prebuilt binaries are available here - https://github.com/qarmin/czkawka/releases/
### Linux
#### Prebuild binaries
Ubuntu - `sudo apt install libgtk-4 libheif libraw ffmpeg -y`
#### Snap -
none - all needed libraries are bundled in
snap [except ffmpeg](https://github.com/snapcrafters/ffmpeg/issues/73) - https://snapcraft.io/czkawka
#### Flatpak
none - all needed libraries are bundled - https://flathub.org/apps/com.github.qarmin.czkawka
### Mac
```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install gtk4 adwaita-icon-theme ffmpeg librsvg libheif libraw
```
### Windows
All needed libraries should be bundled in zip (except ffmpeg which you need download and unpack to location
with `czkawka_gui.exe` - https://ffmpeg.org/download.html#build-windows)
You can also install the app via msys2 (webp and heif should work here) - https://www.msys2.org/#installation (czkawka
package - https://packages.msys2.org/base/mingw-w64-czkawka)
```
pacman -S mingw-w64-x86_64-czkawka-gui
```
and you can create a shortcut to `C:\msys64\mingw64\bin\czkawka_gui.exe`
## Compilation
Compiling the gui is harder than compiling cli or core, because it uses gtk4 which is written in C and also requires a
lot build and runtime dependencies.
### Requirements
| Program | Minimal version |
|:-------:|:---------------:|
| Rust | 1.75.0 |
| GTK | 4.6 |
### Linux (Ubuntu, but on other OS should work similar)
```shell
sudo apt install libgtk-4-dev libheif-dev libraw-dev -y
cargo run --release --bin czkawka_gui
# Or with support for heif and libraw
cargo run --release --bin czkawka_gui --features "heif,libraw"
```
### Mac
```shell
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install rustup gtk4 adwaita-icon-theme ffmpeg librsvg libheif libraw pkg-config
rustup-init
cargo run --release --bin czkawka_gui
# Or with support for heif and libraw
cargo run --release --bin czkawka_gui --features "heif,libraw"
```
### Windows
Currently, there is are no instructions on how to compile the app on Windows natively.</br>
You can check for CI for instructions how to cross-compile the app from linux to windows (uses prebuilt docker
image) - [CI Instructions](../.github/workflows/windows.yml)</br>
There exists a mingw recipe which you can try to convert for your
purposes - https://github.com/msys2/MINGW-packages/blob/master/mingw-w64-czkawka/PKGBUILD
## Limitations
Not all available features and/or components implemented here, this is the list of limitations:
- Snap versions does not allow to use the similar videos feature
- Windows version does not support heif and webp files with prebuilt binaries
- Prebuilt binaries for mac arm do not exist
- On Windows, text may appear very small on high resolution displays, a solution is to manually change DPI scaling for
this app, see :
- recommended
fix: [#787#issuecomment-1292253437](https://github.com/qarmin/czkawka/issues/787#issuecomment-1292253437) (modify
gtk.css),
- or this
workaround: [#867#issuecomment-1416761308](https://github.com/qarmin/czkawka/issues/863#issuecomment-1416761308) (
modify windows DPI settings for this app (this works too but the text is a bit blurry)).
## License
Code is distributed under MIT license.
Icon was created by [jannuary](https://github.com/jannuary) and licensed CC-BY-4.0.
Windows dark theme is used from project [WhiteSur](https://github.com/slypy/whitesur-gtk4-theme) with MIT license.
Some icons were taken from [ReShot](https://www.reshot.com) site and are licensed under Reshot Free License.
The program is completely free to use.
"Gratis to uczciwa cena" - "Free is a fair price"
## Name
Czkawka is a Polish word which means _hiccup_.
I chose this name because I wanted to hear people speaking other languages pronounce it, so feel free to spell it the
way you want.
This name is not as bad as it seems, because I was also thinking about using words like _żółć_, _gżegżółka_ or _żołądź_,
but I gave up on these ideas because they contained Polish characters, which would cause difficulty in searching for the
project.
At the beginning of the program creation, if the response concerning the name was unanimously negative, I prepared
myself
for a possible change of the name of the program, and the opinions were extremely mixed.

@ -0,0 +1 @@
../data/

@ -0,0 +1,500 @@
# Window titles
window_settings_title = الإعدادات
window_main_title = Czkawka
window_progress_title = المسح
window_compare_images = مقارنة الصور
# General
general_ok_button = حسناً
general_close_button = أغلق
# Main window
music_title_checkbox = العنوان
music_artist_checkbox = الفنان
music_year_checkbox = السنة
music_bitrate_checkbox = معدل
music_genre_checkbox = النوع
music_length_checkbox = طول
music_comparison_checkbox = مقارنة تقريبية
music_checking_by_tags = الوسوم
music_checking_by_content = محتوى
same_music_seconds_label = الحد الأدنى من مدة التجزئة الثانية
same_music_similarity_label = الفرق الأقصى
same_music_tooltip =
يمكن تكوين البحث عن ملفات موسيقية مشابهة بواسطة محتواها عن طريق الإعداد:
- الحد الأدنى لوقت الشظايا الذي يمكن بعدها تحديد ملفات الموسيقى على أنها
- الحد الأقصى للفارق بين جزأين تم اختبارهما
والمفتاح إلى النتائج الجيدة هو العثور على مجموعات معقولة من هذه المعلمات، عن تقديمه.
تحديد الحد الأدنى من الوقت إلى 5 ثوان والحد الأقصى للفرق إلى 1.0، سيبحث عن أجزاء متطابقة تقريبا في الملفات.
وقت 20 ثانية وفارق أقصى قدره 6.0، من ناحية أخرى، يعمل بشكل جيد من أجل العثور على تعديلات أو إصدارات حية وما إلى ذلك.
بشكل افتراضي، يتم مقارنة كل ملف موسيقي بآخر وقد يستغرق ذلك الكثير من الوقت عند اختبار العديد من الملفات، لذلك من الأفضل عادة استخدام المجلدات المرجعية وتحديد الملفات التي يجب مقارنتها مع بعضها البعض (مع نفس كمية الملفات)، مقارنة بصمات الأصابع ستكون أسرع من 4 × على الأقل من دون مجلدات مرجعية).
music_comparison_checkbox_tooltip =
يبحث عن ملفات موسيقية مماثلة باستخدام AI، الذي يستخدم تعلم الآلة لإزالة الأقواس من العبارة. على سبيل المثال، مع تمكين هذا الخيار، الملفات المعنية سوف تعتبر متكررة:
S<unk> wie<unk> dziz<unk> L.o<unk> b --- S<unk> wie<unk> dziz<unk> L.o<unk> b (Remix Lato 2021)
duplicate_case_sensitive_name = حالة حساسة
duplicate_case_sensitive_name_tooltip =
When enabled, group only records when they have exactly same name e.g. Żołd <-> Żołd
Disabling such option will group names without checking if each letter is same size e.g. żoŁD <-> Żołd
duplicate_mode_size_name_combo_box = الحجم والاسم
duplicate_mode_name_combo_box = الاسم
duplicate_mode_size_combo_box = الحجم
duplicate_mode_hash_combo_box = التجزئة
duplicate_hash_type_tooltip =
يقدم Czkawka 3 أنواع من التجزئة:
Blake3 - دالة التجزئة المشفرة. هذا هو الافتراضي لأنه سريع جدا.
CRC32 - دالة التجزئة البسيطة. وينبغي أن يكون هذا أسرع من بليك 3، ولكن نادرا ما تحدث بعض الاصطدام.
XXH3 - مشابهة جدا في الأداء وجودة التجزئة للـ Blake3 (ولكن غير مشفرة). لذلك يمكن بسهولة تبادل مثل هذه الأوضاع.
duplicate_check_method_tooltip =
في الوقت الحالي، تقدم Czkawka ثلاثة أنواع من الطرق للعثور على التكرارات:
Name - Finds الملفات التي تحمل نفس الاسم.
الحجم - العثور على الملفات التي لها نفس الحجم.
Hash - العثور على الملفات التي لها نفس المحتوى. هذا الوضع يقوم بتجزئة الملف ثم يقارن هذا التجزئة للعثور على التكرار. هذا الوضع هو أكثر الطرق أماناً للعثور على التكرار. يستخدم التطبيق بكثافة ذاكرة التخزين المؤقت، لذا يجب أن تكون المسح الثاني والمزيد لنفس البيانات أسرع بكثير من الأول.
image_hash_size_tooltip =
كل صورة تم فحصها تنتج تجزئة خاصة يمكن مقارنتها مع بعضها البعض، والاختلاف الصغير بينهما يعني أن هذه الصور متشابهة.
8 حجم التجزئة جيد جدا للعثور على صور تشبه قليلا فقط الصور الأصلية. مع مجموعة أكبر من الصور (>1000)، هذا سوف ينتج كمية كبيرة من الإيجابيات الكاذبة، لذا أوصي باستخدام حجم تجزئة أكبر في هذه الحالة.
16 هو حجم التجزئة الافتراضي الذي يمثل حلاً وسطاً جيداً بين العثور على صور مشابهة قليلاً فقط وبين حدوث عدد صغير من تصادم التجزئة.
32 و64 تجزئة لا تجد سوى صور مشابهة جداً، ولكن ينبغي ألا يكون لها تقريباً إيجابيات كاذبة (ربما باستثناء بعض الصور مع قناة ألفا).
image_resize_filter_tooltip =
To compute hash of image, the library must first resize it.
Depend on chosen algorithm, the resulting image used to calculate hash will looks a little different.
The fastest algorithm to use, but also the one which gives the worst results, is Nearest. It is enabled by default, because with 16x16 hash size lower quality it is not really visible.
With 8x8 hash size it is recommended to use a different algorithm than Nearest, to have better groups of images.
image_hash_alg_tooltip =
يمكن للمستخدمين الاختيار من واحدة من خوارزميات عديدة لحساب التجزئة.
لكل منها نقاط قوية وأضعف وسوف تعطي أحيانا نتائج أفضل وأحيانا أسوأ لصور مختلفة.
لذلك ، لتحديد أفضل واحد لك، يتطلب الاختبار اليدوي.
big_files_mode_combobox_tooltip = يسمح بالبحث عن ملفات أصغر/أكبر
big_files_mode_label = الملفات المحددة
big_files_mode_smallest_combo_box = الأصغر حجماً
big_files_mode_biggest_combo_box = الاكبر
main_notebook_duplicates = الملفات المكررة
main_notebook_empty_directories = دلائل فارغة
main_notebook_big_files = الملفات الكبيرة
main_notebook_empty_files = الملفات الفارغة
main_notebook_temporary = ملفات مؤقتة
main_notebook_similar_images = صور مشابهة
main_notebook_similar_videos = مقاطع فيديو مماثلة
main_notebook_same_music = مكرر الموسيقى
main_notebook_symlinks = الروابط الرمزية غير صالحة
main_notebook_broken_files = الملفات المكسورة
main_notebook_bad_extensions = ملحقات سيئة
main_tree_view_column_file_name = اسم الملف
main_tree_view_column_folder_name = اسم المجلد
main_tree_view_column_path = المسار
main_tree_view_column_modification = تاريخ التعديل
main_tree_view_column_size = الحجم
main_tree_view_column_similarity = تماثل
main_tree_view_column_dimensions = الأبعاد
main_tree_view_column_title = العنوان
main_tree_view_column_artist = الفنان
main_tree_view_column_year = السنة
main_tree_view_column_bitrate = معدل
main_tree_view_column_length = طول
main_tree_view_column_genre = النوع
main_tree_view_column_symlink_file_name = اسم ملف الرابط الرمزي
main_tree_view_column_symlink_folder = مجلد الرابط الرمزي
main_tree_view_column_destination_path = مسار الوجهة
main_tree_view_column_type_of_error = نوع الخطأ
main_tree_view_column_current_extension = التمديد الحالي
main_tree_view_column_proper_extensions = التمديد الصحيح
main_label_check_method = طريقة التحقق
main_label_hash_type = نوع التجزئة
main_label_hash_size = حجم التجزئة
main_label_size_bytes = الحجم (بايت)
main_label_min_size = الحد الأدنى
main_label_max_size = الحد الأقصى
main_label_shown_files = عدد الملفات المعروضة
main_label_resize_algorithm = تغيير حجم الخوارزمية
main_label_similarity = مشابهة{" " }
main_check_box_broken_files_audio = الصوت
main_check_box_broken_files_pdf = Pdf
main_check_box_broken_files_archive = أرشيف
main_check_box_broken_files_image = صورة
check_button_general_same_size = تجاهل نفس الحجم
check_button_general_same_size_tooltip = تجاهل الملفات ذات الحجم المتطابق في النتائج - عادة ما تكون هذه المكررة 1:1
main_label_size_bytes_tooltip = حجم الملفات التي سيتم استخدامها في المسح
# Upper window
upper_tree_view_included_folder_column_title = مجلدات للبحث
upper_tree_view_included_reference_column_title = المجلدات المرجعية
upper_recursive_button = متكرر
upper_recursive_button_tooltip = إذا تم تحديده، ابحث أيضا عن الملفات التي لم توضع مباشرة تحت المجلدات المختارة.
upper_manual_add_included_button = إضافة يدوي
upper_add_included_button = إضافة
upper_remove_included_button = إزالة
upper_manual_add_excluded_button = إضافة يدوي
upper_add_excluded_button = إضافة
upper_remove_excluded_button = إزالة
upper_manual_add_included_button_tooltip =
إضافة اسم الدليل للبحث باليد.
لإضافة مسارات متعددة في وقت واحد، قم بفصلها بواسطة ؛
/home/rozkaz سيضيف دليلين /home/rozkaz و /home/rozkaz
upper_add_included_button_tooltip = إضافة دليل جديد للبحث.
upper_remove_included_button_tooltip = حذف الدليل من البحث.
upper_manual_add_excluded_button_tooltip =
إضافة اسم الدليل المستبعد يدوياً.
لإضافة مسارات متعددة في وقت واحد، قم بفصلها بواسطة ؛
/home/roman;/home/krokiet سيضيف دليلين / home/roman و /home/keokiet
upper_add_excluded_button_tooltip = إضافة دليل ليتم استبعاده في البحث.
upper_remove_excluded_button_tooltip = حذف الدليل من المستبعد.
upper_notebook_items_configuration = تكوين العناصر
upper_notebook_excluded_directories = المجلدات المستبعدة
upper_notebook_included_directories = المجلدات المضمنة
upper_allowed_extensions_tooltip =
يجب أن تكون الملحقات المسموح بها مفصولة بفواصل (بشكل افتراضي كلها متاحة).
أجهزة الماكرو التالية، التي تضيف ملحقات متعددة في وقت واحد، متاحة أيضا: IMAGE، VIDEO، MUSIC، TEXT.
مثال استخدام ".exe, IMAGE, VIDEO, .rar, 7z" - وهذا يعني أن الصور (e. .jpg, png) الفيديوهات (مثلاً: avi, mp4) و ex, rar و 7z سيتم مسح الملفات.
upper_excluded_extensions_tooltip =
قائمة الملفات المعطلة التي سيتم تجاهلها في المسح.
عند استخدام الملحقات المسموح بها والمعطلة على حد سواء، هذه واحدة لها أولوية أعلى، لذلك لن يتم تحديد الملف.
upper_excluded_items_tooltip =
Excluded items must contain * wildcard and should be separated by commas.
This is slower than Excluded Directories, so use it carefully.
upper_excluded_items = البنود المستثناة:
upper_allowed_extensions = الإضافات المسموح بها:
upper_excluded_extensions = الملحقات المعطّلة:
# Popovers
popover_select_all = حدد الكل
popover_unselect_all = إلغاء تحديد الكل
popover_reverse = الاختيار العكسي
popover_select_all_except_oldest = حدد الكل باستثناء الأقدم
popover_select_all_except_newest = حدد الكل باستثناء الأحدث
popover_select_one_oldest = حدد أقدم واحد
popover_select_one_newest = حدد واحد أحدث
popover_select_custom = تحديد مخصص
popover_unselect_custom = إلغاء تحديد مخصص
popover_select_all_images_except_biggest = حدد الكل باستثناء أكبر
popover_select_all_images_except_smallest = حدد الكل باستثناء الأصغر
popover_custom_path_check_button_entry_tooltip =
Select records by path.
Example usage:
/home/pimpek/rzecz.txt can be found with /home/pim*
popover_custom_name_check_button_entry_tooltip =
حدد السجلات حسب أسماء الملفات.
استخدام مثال:
/usr/ping/pong.txt يمكن العثور عليه مع *ong*
popover_custom_regex_check_button_entry_tooltip =
حدد السجلات بواسطة Regex.
مع هذا الوضع، النص الذي تم البحث عنه هو المسار بالاسم.
مثال الاستخدام:
/usr/bin/ziemniak. يمكن العثور على xt مع /ziem[a-z]+
يستخدم هذا التطبيق الافتراضي Rust regex . يمكنك قراءة المزيد عنه هنا: https://docs.rs/regex.
popover_custom_case_sensitive_check_button_tooltip =
تمكين الكشف الحساس لحالة الأحرف.
عند تعطيل / المنزل/* يجد كلا من /HoMe/roman و /home/roman.
popover_custom_not_all_check_button_tooltip =
Prevents selecting all records in group.
This is enabled by default, because in most situations, you don't want to delete both original and duplicates files, but want to leave at least one file.
WARNING: This setting doesn't work if you have already manually selected all results in a group.
popover_custom_regex_path_label = المسار
popover_custom_regex_name_label = الاسم
popover_custom_regex_regex_label = مسار Regex + اسم
popover_custom_case_sensitive_check_button = حساسية الحالة
popover_custom_all_in_group_label = عدم تحديد جميع السجلات في المجموعة
popover_custom_mode_unselect = إلغاء تحديد مخصص
popover_custom_mode_select = تحديد مخصص
popover_sort_file_name = اسم الملف
popover_sort_folder_name = اسم المجلد
popover_sort_full_name = الاسم الكامل
popover_sort_size = الحجم
popover_sort_selection = التحديد
popover_invalid_regex = Regex غير صحيح
popover_valid_regex = Regex صالح
# Bottom buttons
bottom_search_button = البحث
bottom_select_button = حدد
bottom_delete_button = حذف
bottom_save_button = حفظ
bottom_symlink_button = Symlink
bottom_hardlink_button = Hardlink
bottom_move_button = نقل
bottom_sort_button = فرز
bottom_search_button_tooltip = بدء البحث
bottom_select_button_tooltip = حدد السجلات. يمكن معالجة الملفات/المجلدات المحددة في وقت لاحق.
bottom_delete_button_tooltip = حذف الملفات/المجلدات المحددة.
bottom_save_button_tooltip = حفظ البيانات حول البحث في الملف
bottom_symlink_button_tooltip =
إنشاء روابط رمزية.
يعمل فقط عندما يتم تحديد نتيجتين على الأقل في المجموعة.
أولا لم يتغير و الثاني و اللاحق مرتبطين بالأول.
bottom_hardlink_button_tooltip =
إنشاء روابط صلبة.
يعمل فقط عندما يتم تحديد نتيجتين على الأقل في المجموعة.
أولا لم يتغير و الثاني و اللاحق متصلين بالأول.
bottom_hardlink_button_not_available_tooltip =
Create hardlinks.
Button is disabled, because hardlinks cannot be created.
Hardlinks only works with administrator privileges on Windows, so be sure to run app as administrator.
If app already works with such privileges check for similar issues on Github.
bottom_move_button_tooltip =
ينقل الملفات إلى الدليل المختار.
ينسخ جميع الملفات إلى الدليل دون الحفاظ على شجرة الدليل.
عند محاولة نقل ملفين مع نفس الاسم إلى مجلد، سيتم فشل الثانية وإظهار الخطأ.
bottom_sort_button_tooltip = ترتيب الملفات/المجلدات وفقا للطريقة المحددة.
bottom_show_errors_tooltip = إظهار/إخفاء لوحة النص السفلية.
bottom_show_upper_notebook_tooltip = إظهار/إخفاء لوحة دفتر الملاحظات العلوية.
# Progress Window
progress_stop_button = توقف
progress_stop_additional_message = إيقاف الطلب
# About Window
about_repository_button_tooltip = رابط لصفحة المستودع مع رمز المصدر.
about_donation_button_tooltip = رابط لصفحة التبرع.
about_instruction_button_tooltip = رابط لصفحة التعليمات.
about_translation_button_tooltip = رابط إلى صفحة كراودِن مع ترجمة التطبيق. يتم دعم البولندية الرسمية والإنجليزية.
about_repository_button = المستودع
about_donation_button = تبرع
about_instruction_button = تعليمات
about_translation_button = الترجمة
# Header
header_setting_button_tooltip = فتح مربع حوار الإعدادات.
header_about_button_tooltip = فتح مربع الحوار مع معلومات حول التطبيق.
# Settings
## General
settings_number_of_threads = عدد المواضيع المستخدمة
settings_number_of_threads_tooltip = عدد المواضيع المستخدمة، 0 يعني أن جميع المواضيع المتاحة سيتم استخدامها.
settings_label_restart = تحتاج إلى إعادة تشغيل التطبيق لتطبيق الإعدادات!
settings_ignore_other_filesystems = تجاهل نظم الملفات الأخرى (Linux)
settings_ignore_other_filesystems_tooltip =
يتجاهل الملفات التي ليست في نفس نظام الملفات مثل الدلائل التي تم بحثها. يعمل
مثل خيار -xdev في العثور على أمر على Linux
settings_save_at_exit_button_tooltip = حفظ التكوين إلى الملف عند إغلاق التطبيق.
settings_load_at_start_button_tooltip =
تحميل التكوين من الملف عند فتح التطبيق.
إذا لم يتم تمكينه، سيتم استخدام الإعدادات الافتراضية.
settings_confirm_deletion_button_tooltip = إظهار مربع حوار التأكيد عند النقر على زر الحذف.
settings_confirm_link_button_tooltip = إظهار مربع حوار التأكيد عند النقر على زر الارتباط الصلب/الرمزي.
settings_confirm_group_deletion_button_tooltip = إظهار مربع حوار التحذير عند محاولة حذف جميع السجلات من المجموعة.
settings_show_text_view_button_tooltip = إظهار لوحة النص في أسفل واجهة المستخدم.
settings_use_cache_button_tooltip = استخدام ذاكرة التخزين المؤقت للملف.
settings_save_also_as_json_button_tooltip = حفظ ذاكرة التخزين المؤقت إلى تنسيق JSON (قابل للقراءة البشرية). من الممكن تعديل محتواه. الذاكرة المؤقتة من هذا الملف سيتم قراءتها تلقائيًا بواسطة التطبيق إذا كان مخبأ تنسيق ثنائي (مع امتداد بن ) مفقود.
settings_use_trash_button_tooltip = نقل الملفات إلى سلة المهملات بدلاً من حذفها بشكل دائم.
settings_language_label_tooltip = لغة واجهة المستخدم.
settings_save_at_exit_button = حفظ التكوين عند إغلاق التطبيق
settings_load_at_start_button = تحميل التكوين عند فتح التطبيق
settings_confirm_deletion_button = إظهار تأكيد مربع الحوار عند حذف أي ملفات
settings_confirm_link_button = إظهار مربع حوار تأكيد عند ربط أي ملفات بصعوبة/رموز
settings_confirm_group_deletion_button = إظهار تأكيد مربع الحوار عند حذف جميع الملفات في المجموعة
settings_show_text_view_button = إظهار لوحة النص السفلي
settings_use_cache_button = استخدام ذاكرة التخزين المؤقت
settings_save_also_as_json_button = حفظ ذاكرة التخزين المؤقت أيضا كملف JSON
settings_use_trash_button = نقل الملفات المحذوفة إلى سلة المهملات
settings_language_label = اللغة
settings_multiple_delete_outdated_cache_checkbutton = حذف إدخالات ذاكرة التخزين المؤقت القديمة تلقائياً
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
Delete outdated cache results which point to non-existent files.
When enabled, app makes sure when loading records, that all records point to valid files (broken ones are ignored).
Disabling this will help when scanning files on external drives, so cache entries about them will not be purged in the next scan.
In the case of having hundred of thousands records in cache, it is suggested to enable this, which will speedup cache loading/saving at start/end of the scan.
settings_notebook_general = عمومي
settings_notebook_duplicates = مكرر
settings_notebook_images = صور مشابهة
settings_notebook_videos = فيديو مشابه
## Multiple - settings used in multiple tabs
settings_multiple_image_preview_checkbutton_tooltip = عرض المعاينة على الجانب الأيمن (عند تحديد ملف صورة).
settings_multiple_image_preview_checkbutton = عرض معاينة الصورة
settings_multiple_clear_cache_button_tooltip =
Manually clear the cache of outdated entries.
This should only be used if automatic clearing has been disabled.
settings_multiple_clear_cache_button = إزالة النتائج القديمة من ذاكرة التخزين المؤقت.
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
Hides all files except one, if all point to the same data (are hardlinked).
Example: In the case where there are (on disk) seven files which are hardlinked to specific data and one different file with same data but a different inode, then in duplicate finder, only one unique file and one file from hardlinked ones will be shown.
settings_duplicates_minimal_size_entry_tooltip =
Set the minimal file size which will be cached.
Choosing a smaller value will generate more records. This will speedup search, but slowdown cache loading/saving.
settings_duplicates_prehash_checkbutton_tooltip =
تمكين التخزين المؤقت للتجزئة (تجزئة محسوبة من جزء صغير من الملف) مما يسمح برفض النتائج غير المكررة في وقت سابق.
يتم تعطيله بشكل افتراضي لأنه يمكن أن يتسبب في تباطؤ في بعض الحالات.
يوصى بشدة باستخدامها عند مسح مئات الألوف أو الملايين من الملفات، لأنه يمكن تسريع البحث عدة مرات.
settings_duplicates_prehash_minimal_entry_tooltip = الحجم الأدنى للإدخال المخبئ.
settings_duplicates_hide_hard_link_button = إخفاء الروابط الصلبة (فقط Linux و macOS)
settings_duplicates_prehash_checkbutton = استخدام ذاكرة التخزين المؤقت
settings_duplicates_minimal_size_cache_label = الحجم الأدنى للملفات (بالبايت) المحفوظة إلى ذاكرة التخزين المؤقت
settings_duplicates_minimal_size_cache_prehash_label = الحجم الأدنى للملفات (بالبايت) المحفوظة في ذاكرة التخزين المؤقت
## Saving/Loading settings
settings_saving_button_tooltip = حفظ الإعدادات الحالية إلى الملف.
settings_loading_button_tooltip = تحميل الإعدادات من الملف واستبدل الإعدادات الحالية بها.
settings_reset_button_tooltip = إعادة تعيين الإعدادات الحالية إلى الإعدادات الافتراضية.
settings_saving_button = حفظ التكوين
settings_loading_button = تحميل التكوين
settings_reset_button = إعادة ضبط الإعدادات
## Opening cache/config folders
settings_folder_cache_open_tooltip =
Opens the folder where the cache txt files are stored.
Modifying the cache files may cause invalid results to be shown. However, modifying path may save time when moving a big amount of files to a different location.
You can copy these files between computers to save time on scanning again for files (of course if they have similar directory structure).
In the case of problems with the cache, these files can be removed. The app will automatically regenerate them.
settings_folder_settings_open_tooltip =
Opens the folder where the Czkawka config is stored.
WARNING: Manually modifying the config may break your workflow.
settings_folder_cache_open = فتح مجلد التخزين المؤقت
settings_folder_settings_open = فتح مجلد الإعدادات
# Compute results
compute_stopped_by_user = تم إيقاف البحث من قبل المستخدم
compute_found_duplicates_hash_size = تم العثور على { $number_files } مكررة في { $number_groups } مجموعات أخذت { $size }
compute_found_duplicates_name = تم العثور على { $number_files } مكررة في { $number_groups } مجموعات
compute_found_empty_folders = تم العثور على { $number_files } مجلدات فارغة
compute_found_empty_files = تم العثور على { $number_files } ملفات فارغة
compute_found_big_files = تم العثور على { $number_files } ملف كبير
compute_found_temporary_files = تم العثور على { $number_files } ملف مؤقت
compute_found_images = تم العثور على { $number_files } صورة مشابهة في { $number_groups } مجموعات
compute_found_videos = تم العثور على { $number_files } مقاطع فيديو مماثلة في { $number_groups } مجموعات
compute_found_music = تم العثور على { $number_files } ملفات موسيقية مماثلة في { $number_groups } مجموعة
compute_found_invalid_symlinks = تم العثور على { $number_files } روابط رموزية غير صالحة
compute_found_broken_files = تم العثور على { $number_files } ملفات محطمة
compute_found_bad_extensions = تم العثور على { $number_files } ملفات ذات ملحقات غير صالحة
# Progress window
progress_scanning_general_file = فحص ملف { $file_number }
progress_scanning_extension_of_files = التحقق من امتداد الملف { $file_checked }/{ $all_files }
progress_scanning_broken_files = فحص { $file_checked }/{ $all_files } ملف
progress_scanning_video = تجزئة الفيديو { $file_checked }/{ $all_files }
progress_scanning_image = تجزئة الصورة { $file_checked }/{ $all_files }
progress_comparing_image_hashes = مقارنة { $file_checked }/{ $all_files } تجزئة الصور
progress_scanning_music_tags_end = مقارنة علامات { $file_checked }/{ $all_files } ملف الموسيقى
progress_scanning_music_tags = قراءة وسوم { $file_checked }/{ $all_files } ملف الموسيقى
progress_scanning_music_content_end = مقارنة بصمة الإصبع { $file_checked }/{ $all_files } ملف الموسيقى
progress_scanning_music_content = حساب بصمة الإصبع { $file_checked }/{ $all_files } ملف الموسيقى
progress_scanning_empty_folders = يتم فحص { $folder_number } مجلد
progress_scanning_size = حجم البحث لـ { $file_number } ملف
progress_scanning_size_name = فحص اسم وحجم ملف { $file_number }
progress_scanning_name = فحص اسم ملف { $file_number }
progress_analyzed_partial_hash = تم تحليل تجزئة جزئية ل { $file_checked }/{ $all_files } ملفات
progress_analyzed_full_hash = تم تحليل التجزئة الكاملة لـ { $file_checked }/{ $all_files } ملفات
progress_prehash_cache_loading = تحميل ذاكرة التخزين المؤقت
progress_prehash_cache_saving = حفظ ذاكرة التخزين المؤقت
progress_hash_cache_loading = تحميل ذاكرة التخزين المؤقت للتجزئة
progress_hash_cache_saving = حفظ ذاكرة التخزين المؤقت
progress_cache_loading = تحميل ذاكرة التخزين المؤقت
progress_cache_saving = حفظ ذاكرة التخزين المؤقت
progress_current_stage = المرحلة الحالية:{ "" }
progress_all_stages = جميع المراحل:{ " " }
# Saving loading
saving_loading_saving_success = حفظ التكوين إلى ملف { $name }.
saving_loading_saving_failure = فشل حفظ بيانات التكوين في الملف { $name }.
saving_loading_reset_configuration = تم مسح التكوين الحالي.
saving_loading_loading_success = تم تحميل إعدادات التطبيق بشكل صحيح.
saving_loading_invalid_string = للمفتاح "{ $key }" وجد نتيجة غير صالحة - "{ $result }" الذي ليس سلسلة.
saving_loading_invalid_int = للمفتاح "{ $key }" وجد نتيجة غير صالحة - "{ $result }" الذي ليس عددا صحيحا.
saving_loading_invalid_bool = للمفتاح "{ $key }" وجد نتيجة غير صالحة - "{ $result }" الذي ليس برعيا.
saving_loading_decode_problem_bool = فشل في فك شفرة البول من المفتاح"{ $key }" وجد{ $result }" ولكن القيم المسموح بها هي 0، 1، صحيحة أو خاطئة.
saving_loading_saving_same_keys = محاولة حفظ الإعداد مع مفتاح مكرر"{ $key }".
saving_loading_failed_to_get_home_directory = فشل في الحصول على الدليل الرئيسي لفتح/حفظ ملف الإعداد.
saving_loading_folder_config_instead_file = لا يمكن إنشاء أو فتح ملف التكوين في المسار "{ $path }" لأنه يوجد مجلد بالفعل.
saving_loading_failed_to_create_configuration_folder = فشل تكوين إنشاء مجلد الإعدادات"{ $path }"، السبب"{ $reason }".
saving_loading_failed_to_create_config_file = فشل في إنشاء ملف الإعداد"{ $path }"، السبب"{ $reason }".
saving_loading_failed_to_read_config_file = لا يمكن تحميل التكوين من "{ $path }" لأنه غير موجود أو ليس ملفا.
saving_loading_failed_to_read_data_from_file = لا يمكن قراءة البيانات من الملف"{ $path }"، السبب"{ $reason }".
saving_loading_orphan_data = تم العثور على بيانات يتيمة"{ $data }" في السطر "{ $line }".
saving_loading_not_valid = الإعداد "{ $data }" غير موجود في الإصدار الحالي للتطبيق.
# Invalid symlinks
invalid_symlink_infinite_recursion = التكرار اللامتناهي
invalid_symlink_non_existent_destination = ملف الوجهة غير موجود
# Other
selected_all_reference_folders = لا يمكن بدء البحث، عندما يتم تعيين جميع الدلائل كمجلدات مرجعية
searching_for_data = البحث عن البيانات، قد يستغرق بعض الوقت، يرجى الانتظار...
text_view_messages = الرسائل
text_view_warnings = التحذيرات
text_view_errors = أخطاء
about_window_motto = هذا البرنامج حر في الاستخدام وسوف يكون دائماً.
# Various dialog
dialogs_ask_next_time = اسأل المرة القادمة
delete_file_failed = فشل في حذف الملف { $name }، السبب { $reason }
delete_title_dialog = تأكيد حذف
delete_question_label = هل أنت متأكد من أنك تريد حذف الملفات؟
delete_all_files_in_group_title = تأكيد حذف جميع الملفات في المجموعة
delete_all_files_in_group_label1 = ويتم اختيار جميع السجلات في بعض المجموعات.
delete_all_files_in_group_label2 = هل أنت متأكد من أنك تريد حذفهم؟
delete_folder_failed = فشل في حذف المجلد { $dir } لأن المجلد غير موجود، ليس لديك إذن أو المجلد غير فارغ.
delete_items_label = { $items } سيتم حذف الملفات.
delete_items_groups_label = { $items } ملفات من { $groups } سيتم حذف المجموعات.
hardlink_failed = فشل في الربط
hard_sym_invalid_selection_title_dialog = إختيار غير صالح مع بعض المجموعات
hard_sym_invalid_selection_label_1 = في بعض المجموعات هناك رقم قياسي واحد تم اختياره وسيتم تجاهله.
hard_sym_invalid_selection_label_2 = لتتمكن من صلابة / ربط هذه الملفات، يجب اختيار نتيجتين على الأقل في المجموعة.
hard_sym_invalid_selection_label_3 = الأول في المجموعة معترف به على أنه أصلي ولا يتغير ولكن الثاني ثم يتم تعديله.
hard_sym_link_title_dialog = تأكيد الرابط
hard_sym_link_label = هل أنت متأكد من أنك تريد ربط هذه الملفات؟
move_folder_failed = فشل في نقل المجلد { $name }، السبب { $reason }
move_file_failed = فشل نقل الملف { $name }، السبب { $reason }
move_files_title_dialog = اختر مجلد تريد نقل الملفات المكررة إليه
move_files_choose_more_than_1_path = يمكن تحديد مسار واحد فقط لتكون قادرة على نسخ الملفات المكررة، المحددة { $path_number }.
move_stats = نقل بشكل صحيح { $num_files }/{ $all_files } عناصر
save_results_to_file = تم حفظ النتائج إلى ملفات txt و json في مجلد { $name }.
search_not_choosing_any_music = خطأ: يجب عليك تحديد مربع اختيار واحد على الأقل مع أنواع البحث عن الموسيقى.
search_not_choosing_any_broken_files = خطأ: يجب عليك تحديد مربع اختيار واحد على الأقل مع نوع الملفات المحددة المكسورة.
include_folders_dialog_title = مجلدات لتضمينها
exclude_folders_dialog_title = مجلدات للاستبعاد
include_manually_directories_dialog_title = إضافة دليل يدوياً
cache_properly_cleared = مسح ذاكرة التخزين المؤقت بشكل صحيح
cache_clear_duplicates_title = مسح ذاكرة التخزين المؤقت التكراري
cache_clear_similar_images_title = مسح ذاكرة التخزين المؤقت مشابهة للصور
cache_clear_similar_videos_title = مسح ذاكرة التخزين المؤقت المماثلة للفيديوهات
cache_clear_message_label_1 = هل تريد مسح ذاكرة التخزين المؤقت للإدخالات العتيقة؟
cache_clear_message_label_2 = هذه العملية ستزيل جميع إدخالات ذاكرة التخزين المؤقت التي تشير إلى ملفات غير صالحة.
cache_clear_message_label_3 = قد يؤدي هذا إلى تسريع التحميل/الحفظ إلى ذاكرة التخزين المؤقت.
cache_clear_message_label_4 = تحذير: العملية ستزيل جميع البيانات المخزنة مؤقتاً من الأقراص الخارجية الغير موصولة. لذلك سوف تحتاج كل تجزئة إلى التجديد.
# Show preview
preview_image_resize_failure = فشل تغيير حجم الصورة { $name }.
preview_image_opening_failure = فشل في فتح الصورة { $name }، السبب { $reason }
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = المجموعة { $current_group }/{ $all_groups } ({ $images_in_group } صورة)
compare_move_left_button = ل
compare_move_right_button = ر

@ -0,0 +1,500 @@
# Window titles
window_settings_title = Настройки
window_main_title = Czkawka (Хълцук)
window_progress_title = Сканиране
window_compare_images = Сравни изображения
# General
general_ok_button = Ок
general_close_button = Затвори
# Main window
music_title_checkbox = Заглавие
music_artist_checkbox = Изпълнител
music_year_checkbox = Година
music_bitrate_checkbox = Битрейт
music_genre_checkbox = Жанр
music_length_checkbox = Продължителност
music_comparison_checkbox = Приблизително сравнение
music_checking_by_tags = Етикети
music_checking_by_content = Съдържание
same_music_seconds_label = Минимална продължителност на фрагмента в секунди
same_music_similarity_label = Максимална разлика
same_music_tooltip =
Търсенето на подобни музикални файлове по съдържание може да се конфигурира чрез настройка:
- Минималното време на фрагмента, след което музикалните файлове могат да бъдат идентифицирани като подобни
- Максимална разлика между два тествани фрагмента
Ключът към добрите резултати е да се намерят разумни комбинации от тези параметри, например.
Ако зададете минималното време на 5 s, а максималната разлика на 1,0, ще търсите почти идентични фрагменти във файловете.
От друга страна, време от 20 s и максимална разлика от 6,0 работят добре за намиране на ремикси/живи версии и т. н.
По подразбиране всеки музикален файл се сравнява един с друг и това може да отнеме много време при тестване на много файлове, така че обикновено е по-добре да се използват референтни папки и да се укаже кои файлове да се сравняват един с друг(при същото количество файлове сравняването на отпечатъци ще бъде по-бързо поне 4 пъти, отколкото без референтни папки).
music_comparison_checkbox_tooltip =
Програмата търси подобни музикални файлове с помощта на изкуствен интелект, който използва машинно обучение за премахване на скоби от фраза. Например, при активирана тази опция въпросните файлове ще се считат за дубликати:
Świędziżłób --- Świędziżłób (Remix Lato 2021)
duplicate_case_sensitive_name = Чувствително изписване
duplicate_case_sensitive_name_tooltip =
Когато е разрешено, групата записва само записи с едно и също име, напр. Żołd <-> Żołd
При деактивиране на тази опция имената ще се групират, без да се проверява дали всяка буква е с еднакъв размер, напр. żoŁD <-> Żołd
duplicate_mode_size_name_combo_box = Размер и име
duplicate_mode_name_combo_box = Име
duplicate_mode_size_combo_box = Размер
duplicate_mode_hash_combo_box = Хеш
duplicate_hash_type_tooltip =
Czkawka предлага 3 вида хешове:
Blake3 - криптографска хеш функция. Тя е избрана по подразбиране, тъй като е много бърза.
CRC32 - проста хеш функция. Тя би трябвало да е по-бърза от Blake3, но много рядко може да има някои колизии.
XXH3 - много подобна по производителност и качество на хеширане на Blake3 (но некриптографска). Така че тези режими могат лесно да се сменят.
duplicate_check_method_tooltip =
Засега Czkawka предлага три вида методи за намиране на дубликати чрез:
Име - Намира файлове с еднакво име.
Размер - Намира файлове с еднакъв размер.
Hash - Намира файлове с еднакво съдържание. Този режим хешира файла и по-късно сравнява този хеш, за да намери дубликати. Този режим е най-сигурният начин за намиране на дубликати. Приложението използва силно кеша, така че второто и следващите сканирания на едни и същи данни би трябвало да са много по-бързи от първото.
image_hash_size_tooltip =
Each checked image produces a special hash which can be compared with each other, and a small difference between them means that these images are similar.
8 hash size is quite good to find images that are only a little similar to original. With a bigger set of images (>1000), this will produce a big amount of false positives, so I recommend to use a bigger hash size in this case.
16 is the default hash size which is quite a good compromise between finding even a little similar images and having only a small amount of hash collisions.
32 and 64 hashes find only very similar images, but should have almost no false positives (maybe except some images with alpha channel).
image_resize_filter_tooltip =
To compute hash of image, the library must first resize it.
Depend on chosen algorithm, the resulting image used to calculate hash will looks a little different.
The fastest algorithm to use, but also the one which gives the worst results, is Nearest. It is enabled by default, because with 16x16 hash size lower quality it is not really visible.
With 8x8 hash size it is recommended to use a different algorithm than Nearest, to have better groups of images.
image_hash_alg_tooltip =
Потребителите могат да изберат един от многото алгоритми за изчисляване на хеша.
Всеки от тях има както силни, така и слаби страни и понякога дава по-добри, а понякога по-лоши резултати за различни изображения.
Затова, за да определите най-добрия за вас, е необходимо ръчно тестване.
big_files_mode_combobox_tooltip = Позволява търсене на най-малките/най-големите файлове
big_files_mode_label = Проверени файлове
big_files_mode_smallest_combo_box = Най-малкия
big_files_mode_biggest_combo_box = Най-големия
main_notebook_duplicates = Повтарящи се файлове
main_notebook_empty_directories = Празни директории
main_notebook_big_files = Големи файлове
main_notebook_empty_files = Празни файлове
main_notebook_temporary = Временни файлове
main_notebook_similar_images = Подобни изображения
main_notebook_similar_videos = Подобни видеа
main_notebook_same_music = Музикални дубликати
main_notebook_symlinks = Невалидни симлинкове
main_notebook_broken_files = Повредени файлове
main_notebook_bad_extensions = Повредени разширения
main_tree_view_column_file_name = Име на файла
main_tree_view_column_folder_name = Име на папката
main_tree_view_column_path = Път
main_tree_view_column_modification = Дата на промяна
main_tree_view_column_size = Размер
main_tree_view_column_similarity = Прилика
main_tree_view_column_dimensions = Размери
main_tree_view_column_title = Заглавие
main_tree_view_column_artist = Изпълнител
main_tree_view_column_year = Година
main_tree_view_column_bitrate = Битрейт
main_tree_view_column_length = Дължина
main_tree_view_column_genre = Жанр
main_tree_view_column_symlink_file_name = Име на файла на Symlink
main_tree_view_column_symlink_folder = Symlink папка
main_tree_view_column_destination_path = Път за местоположение
main_tree_view_column_type_of_error = Тип на грешка
main_tree_view_column_current_extension = Избрано разширение
main_tree_view_column_proper_extensions = Правилно разширение
main_label_check_method = Провери метод
main_label_hash_type = Хеш тип
main_label_hash_size = Хеш размер
main_label_size_bytes = Размер (байтове)
main_label_min_size = Мин
main_label_max_size = Макс
main_label_shown_files = Брой на показани файлове
main_label_resize_algorithm = Преоразмери алгоритъма
main_label_similarity = Сходство{ " " }
main_check_box_broken_files_audio = Аудио
main_check_box_broken_files_pdf = PDF
main_check_box_broken_files_archive = Архив
main_check_box_broken_files_image = Изображение
check_button_general_same_size = Игнорирай еднакъв размер
check_button_general_same_size_tooltip = Ignore files with identical size in results - usually these are 1:1 duplicates
main_label_size_bytes_tooltip = Размер на файловете, които ще се използват при сканиране
# Upper window
upper_tree_view_included_folder_column_title = Папки за търсене
upper_tree_view_included_reference_column_title = Папки за справка
upper_recursive_button = Рекурсивен
upper_recursive_button_tooltip = Ако е избрано, се търсят и файлове, които не са поставени директно в избраните папки.
upper_manual_add_included_button = Ръчно добавяне
upper_add_included_button = Добави
upper_remove_included_button = Премахни
upper_manual_add_excluded_button = Ръчно добавяне
upper_add_excluded_button = Добави
upper_remove_excluded_button = Премахни
upper_manual_add_included_button_tooltip =
Добавяне на име на директория за ръчно търсене.
За да добавите няколко пътища наведнъж, разделете ги с ;
/home/roman;/home/rozkaz ще добави две директории /home/roman и /home/rozkaz
upper_add_included_button_tooltip = Добавяне на нова директория за търсене.
upper_remove_included_button_tooltip = Изтриване на директорията от търсенето.
upper_manual_add_excluded_button_tooltip =
Добавете името на изключената директория на ръка.
За да добавите няколко пътя наведнъж, разделете ги с ;
/home/roman;/home/krokiet ще добави две директории /home/roman и /home/keokiet
upper_add_excluded_button_tooltip = Добавяне на директория, която да бъде изключена при търсене.
upper_remove_excluded_button_tooltip = Изтриване на директория от изключените.
upper_notebook_items_configuration = Конфигурация на елементите
upper_notebook_excluded_directories = Изключени директории
upper_notebook_included_directories = Включени директории
upper_allowed_extensions_tooltip =
Разрешените разширения трябва да бъдат разделени със запетаи (по подразбиране са налични всички).
Налични са и следните макроси, които добавят няколко разширения наведнъж: ИЗОБРАЖЕНИЕ, ВИДЕО, МУЗИКА, ТЕКСТ.
Пример за използване ".exe, IMAGE, VIDEO, .rar, 7z" - това означава, че ще бъдат сканирани изображения (напр. jpg, png), видеоклипове (напр. avi, mp4), файлове exe, rar и 7z.
upper_excluded_extensions_tooltip =
List of disabled files which will be ignored in scan.
When using both allowed and disabled extensions, this one has higher priority, so file will not be checked.
upper_excluded_items_tooltip =
Изключените елементи трябва да съдържат заместител * и да са разделени със запетаи.
Тази функция е по-бавна от функцията Изключени директории, затова я използвайте внимателно.
upper_excluded_items = Изключени елементи:
upper_allowed_extensions = Разрешени разширения:
upper_excluded_extensions = Disabled Extensions:
# Popovers
popover_select_all = Избери всички
popover_unselect_all = Размаркирайте всички
popover_reverse = Избери обратното
popover_select_all_except_oldest = Избери всички освен най-старото
popover_select_all_except_newest = Избери всички освен най-новото
popover_select_one_oldest = Избери най-старото
popover_select_one_newest = Избери най-новото
popover_select_custom = Избери по избор
popover_unselect_custom = Размаркирай по избор
popover_select_all_images_except_biggest = Избери всички освен най-големия
popover_select_all_images_except_smallest = Избери всички освен най-малкия
popover_custom_path_check_button_entry_tooltip =
Изберете записи по път.
Пример за използване:
/home/pimpek/rzecz.txt може да бъде намерен с /home/pim*
popover_custom_name_check_button_entry_tooltip =
Изберете записи по имена на файлове.
Пример за използване:
/usr/ping/pong.txt може да бъде намерен с *ong*
popover_custom_regex_check_button_entry_tooltip =
Избиране на записи по зададен Regex.
В този режим търсеният текст е Path with Name.
Пример за използване:
/usr/bin/ziemniak.txt може да бъде намерен с /ziem[a-z]+
В този случай се използва имплементацията на regex по подразбиране на Rust. Можете да прочетете повече за нея тук: https://docs.rs/regex.
popover_custom_case_sensitive_check_button_tooltip =
Активира откриването с отчитане на големи и малки букви.
Когато е изключено, /home/* намира както /HoMe/roman, така и /home/roman.
popover_custom_not_all_check_button_tooltip =
Предотвратява избирането на всички записи в групата.
Това е разрешено по подразбиране, тъй като в повечето ситуации не искате да изтривате и оригиналните, и дублираните файлове, а искате да оставите поне един файл.
ПРЕДУПРЕЖДЕНИЕ: Тази настройка не работи, ако вече сте избрали ръчно всички резултати в групата.
popover_custom_regex_path_label = Път
popover_custom_regex_name_label = Име
popover_custom_regex_regex_label = Regex Път + Име
popover_custom_case_sensitive_check_button = Чувствителност на буквите
popover_custom_all_in_group_label = Да не се избират всички записи в групата
popover_custom_mode_unselect = Премахване на избора по избор
popover_custom_mode_select = Избери по избор
popover_sort_file_name = Име на файла
popover_sort_folder_name = Име на папката
popover_sort_full_name = Пълно име
popover_sort_size = Размер
popover_sort_selection = Избор
popover_invalid_regex = Regex е невалиден
popover_valid_regex = Regex е валиден
# Bottom buttons
bottom_search_button = Търсене
bottom_select_button = Избери
bottom_delete_button = Изтрий
bottom_save_button = Запази
bottom_symlink_button = Симлинк
bottom_hardlink_button = Хардлинк
bottom_move_button = Премести
bottom_sort_button = Сортирай
bottom_search_button_tooltip = Започни търсене
bottom_select_button_tooltip = Изберете записи. Само избраните файлове/папки могат да бъдат обработени по-късно.
bottom_delete_button_tooltip = Изтрий избрани файлове/папки.
bottom_save_button_tooltip = Записване на данни за търсенето във файл
bottom_symlink_button_tooltip =
Създаване на символни връзки.
Работи само когато са избрани поне два резултата в група.
Първият е непроменен, а вторият и по-късните са символни връзки към първия.
bottom_hardlink_button_tooltip =
Създаване на твърди връзки.
Работи само когато са избрани поне два резултата в група.
Първият е непроменен, а вторият и по-късните са свързани с първия.
bottom_hardlink_button_not_available_tooltip =
Създаване на твърди връзки.
Бутонът е деактивиран, тъй като не могат да се създават твърди връзки.
Хардлинковете работят само с администраторски права в Windows, затова не забравяйте да стартирате приложението като администратор.
Ако приложението вече работи с такива привилегии, проверете за подобни проблеми в Github.
bottom_move_button_tooltip =
Премества файлове в избрана директория.
Той копира всички файлове в директорията, без да запазва дървото на директориите.
При опит за преместване на два файла с еднакво име в папка, вторият ще се провали и ще покаже грешка.
bottom_sort_button_tooltip = Сортира файловете/папките според избрания метод.
bottom_show_errors_tooltip = Показване/скриване на долния текстов панел.
bottom_show_upper_notebook_tooltip = Показване/скриване на горния панел на бележника.
# Progress Window
progress_stop_button = Спри
progress_stop_additional_message = Спри избраните
# About Window
about_repository_button_tooltip = Връзка към страницата на хранилището с изходния код.
about_donation_button_tooltip = Връзка към страницата за дарения.
about_instruction_button_tooltip = Връзка към страницата с инструкции.
about_translation_button_tooltip = Връзка към страницата на Crowdin с преводи на приложения. Официално се поддържат полски и английски език.
about_repository_button = Хранилище
about_donation_button = Дарение
about_instruction_button = Инструкции
about_translation_button = Преводи
# Header
header_setting_button_tooltip = Отваря диалогов прозорец за настройки.
header_about_button_tooltip = Отваря диалогов прозорец с информация за приложението.
# Settings
## General
settings_number_of_threads = Брой използвани нишки
settings_number_of_threads_tooltip = Брой използвани нишки, 0 означава, че ще бъдат използвани всички налични нишки.
settings_label_restart = Трябва да рестартирате приложението, за да приложите настройките!
settings_ignore_other_filesystems = Игнориране на други файлови системи (само за Linux)
settings_ignore_other_filesystems_tooltip =
игнорира файлове, които не са в същата файлова система като търсените директории.
Работи по същия начин като опцията -xdev в командата find в Linux
settings_save_at_exit_button_tooltip = Записване на конфигурацията във файл при затваряне на приложението.
settings_load_at_start_button_tooltip =
Зареждане на конфигурацията от файл при отваряне на приложението.
Ако не е разрешено, ще се използват настройките по подразбиране.
settings_confirm_deletion_button_tooltip = Показване на диалогов прозорец за потвърждение при натискане на бутона за изтриване.
settings_confirm_link_button_tooltip = Показване на диалогов прозорец за потвърждение, когато щракнете върху бутона за твърда/симултанна връзка.
settings_confirm_group_deletion_button_tooltip = Показване на диалогов прозорец с предупреждение при опит за изтриване на всички записи от групата.
settings_show_text_view_button_tooltip = Показване на текстовия панел в долната част на потребителския интерфейс.
settings_use_cache_button_tooltip = Използвайте кеш за файлове.
settings_save_also_as_json_button_tooltip = Записване на кеша в (разбираем за човека) формат JSON. Възможно е да променяте съдържанието му. Кешът от този файл ще бъде прочетен автоматично от приложението, ако липсва кеш в двоичен формат (с разширение bin).
settings_use_trash_button_tooltip = Премества файловете в кошчето, вместо да ги изтрие окончателно.
settings_language_label_tooltip = Език за потребителски интерфейс.
settings_save_at_exit_button = Запазване на конфигурацията при затваряне на приложението
settings_load_at_start_button = Зареждане на конфигурацията при отваряне на приложението
settings_confirm_deletion_button = Показване на диалогов прозорец за потвърждение при изтриване на файлове
settings_confirm_link_button = Показване на диалогов прозорец за потвърждение при твърди/симетрични връзки на файлове
settings_confirm_group_deletion_button = Показване на диалогов прозорец за потвърждение при изтриване на всички файлове в групата
settings_show_text_view_button = Показване на долния текстов панел
settings_use_cache_button = Използвай кеш
settings_save_also_as_json_button = Също запази леша като JSON файл
settings_use_trash_button = Премести изтритите файлове в кошчето
settings_language_label = Език
settings_multiple_delete_outdated_cache_checkbutton = Автоматично изтриване на остарелите записи в кеша
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
Изтриване на остарелите резултати от кеша, които сочат към несъществуващи файлове.
Когато е разрешено, приложението се уверява, че при зареждане на записи всички записи сочат към валидни файлове (повредените се игнорират).
Деактивирането на тази функция ще помогне при сканиране на файлове на външни дискове, тъй като записите от кеша за тях няма да бъдат изчистени при следващото сканиране.
В случай че имате стотици хиляди записи в кеша, предлагаме да включите тази опция, което ще ускори зареждането/спасяването на кеша в началото/края на сканирането.
settings_notebook_general = Общи
settings_notebook_duplicates = Дубликати
settings_notebook_images = Сходни изображения
settings_notebook_videos = Сходни видеа
## Multiple - settings used in multiple tabs
settings_multiple_image_preview_checkbutton_tooltip = Показва предварителен преглед от дясната страна (при избиране на файл с изображение).
settings_multiple_image_preview_checkbutton = Показване на предварителен преглед на изображението
settings_multiple_clear_cache_button_tooltip =
Изчистете ръчно кеша от остарели записи.
Това трябва да се използва само ако автоматичното изчистване е деактивирано.
settings_multiple_clear_cache_button = Remove outdated results from cache.
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
Скрива всички файлове с изключение на един, ако всички сочат към едни и същи данни (са твърдо свързани).
Пример: В случай, че на диска има седем файла, които са свързани с определени данни, и един различен файл със същите данни, но с различен inode, тогава в търсачката за дубликати ще бъдат показани само един уникален файл и един файл от свързаните.
settings_duplicates_minimal_size_entry_tooltip =
Задаване на минималния размер на файла, който ще се кешира.
Ако изберете по-малка стойност, ще се генерират повече записи. Това ще ускори търсенето, но ще забави зареждането/запазването на кеша.
settings_duplicates_prehash_checkbutton_tooltip =
Позволява кеширане на prehash (хеш, изчислен от малка част от файла), което позволява по-ранно отхвърляне на недублирани резултати.
По подразбиране е забранено, тъй като в някои ситуации може да доведе до забавяне на работата.
Силно се препоръчва да се използва при сканиране на стотици хиляди или милиони файлове, защото може да ускори търсенето многократно.
settings_duplicates_prehash_minimal_entry_tooltip = Минимален размер на записа в кеша.
settings_duplicates_hide_hard_link_button = Скриване на твърди връзки (само за Linux и macOS)
settings_duplicates_prehash_checkbutton = Използване на предварителен кеш
settings_duplicates_minimal_size_cache_label = Минимален размер на файловете (в байтове), записани в кеша
settings_duplicates_minimal_size_cache_prehash_label = Минимален размер на файловете (в байтове), които се записват в предварителния кеш
## Saving/Loading settings
settings_saving_button_tooltip = Записване на текущата конфигурация на настройките във файл.
settings_loading_button_tooltip = Зареждане на настройките от файл и заместване на текущата конфигурация с тях.
settings_reset_button_tooltip = Възстановяване на текущата конфигурация до тази по подразбиране.
settings_saving_button = Запазване на конфигурацията
settings_loading_button = Конфигурация за зареждане
settings_reset_button = Нулиране на конфигурацията
## Opening cache/config folders
settings_folder_cache_open_tooltip =
Отваря папката, в която се съхраняват кеш txt файловете.
Промяната на кеш файловете може да доведе до показване на невалидни резултати. Промяната на пътя обаче може да спести време при преместване на голямо количество файлове на друго място.
Можете да копирате тези файлове между компютрите, за да спестите време за повторно сканиране на файловете (разбира се, ако те имат сходна структура на директориите).
В случай на проблеми с кеша тези файлове могат да бъдат премахнати. Приложението автоматично ще ги възстанови.
settings_folder_settings_open_tooltip =
Отваря папката, в която се съхранява конфигурацията на Czkawka.
ПРЕДУПРЕЖДЕНИЕ: Ръчното модифициране на конфигурацията може да наруши работния ви процес.
settings_folder_cache_open = Отворете папката с кеш
settings_folder_settings_open = Отваряне на папката с настройки
# Compute results
compute_stopped_by_user = Търсенето е спряно от потребител
compute_found_duplicates_hash_size = Намерени са { $number_files } дубликати в { $number_groups } групи, които са отнели { $size }
compute_found_duplicates_name = Намерени са { $number_files } дубликати в { $number_groups } групи
compute_found_empty_folders = Намерени { $number_files } празни папки
compute_found_empty_files = Намерени { $number_files } празни файлове
compute_found_big_files = Намерени { $number_files } големи файлове
compute_found_temporary_files = Намерени { $number_files } временни файлове
compute_found_images = Намерени { $number_files } подобни изображения в { $number_groups } групи
compute_found_videos = Намерени { $number_files } подобни видеоклипове в { $number_groups } групи
compute_found_music = Намерени са { $number_files } подобни музикални файлове в { $number_groups } групи
compute_found_invalid_symlinks = Намерени { $number_files } невалидни симлинкове
compute_found_broken_files = Намерени { $number_files } счупени файлове
compute_found_bad_extensions = Намерени { $number_files } файлове с невалидни разширения
# Progress window
progress_scanning_general_file = Сканиране на { $file_number } файл
progress_scanning_extension_of_files = Проверка на разширението на { $file_checked }/{ $all_files } файл
progress_scanning_broken_files = Проверка на { $file_checked }/{ $all_files } файл
progress_scanning_video = Хеширане на { $file_checked }/{ $all_files } видео
progress_scanning_image = Хеширане на { $file_checked }/{ $all_files } изображение
progress_comparing_image_hashes = Сравняване на { $file_checked }/{ $all_files } хеш на изображенията
progress_scanning_music_tags_end = Сравняване на таговете на { $file_checked }/{ $all_files } музикален файл
progress_scanning_music_tags = Четене на таговете на { $file_checked }/{ $all_files } музикален файл
progress_scanning_music_content_end = Сравняване на пръстовия отпечатък на { $file_checked }/{ $all_files } музикален файл
progress_scanning_music_content = Изчисляване на пръстовия отпечатък на { $file_checked }/{ $all_files } музикален файл
progress_scanning_empty_folders = Сканиране на { $folder_number } папка
progress_scanning_size = Сканиране на размера на { $file_number } файла
progress_scanning_size_name = Сканиране на името и размера на { $file_number } файл
progress_scanning_name = Сканиране на името на { $file_number } файл
progress_analyzed_partial_hash = Анализиран частичен хеш на { $file_checked }/{ $all_files } файлове
progress_analyzed_full_hash = Анализиран пълен хеш на { $file_checked }/{ $all_files } файлове
progress_prehash_cache_loading = Loading prehash cache
progress_prehash_cache_saving = Saving prehash cache
progress_hash_cache_loading = Loading hash cache
progress_hash_cache_saving = Saving hash cache
progress_cache_loading = Loading cache
progress_cache_saving = Saving cache
progress_current_stage = Текущ етап:{ " " }
progress_all_stages = Всички етапи:{ " " }
# Saving loading
saving_loading_saving_success = Запазване на конфигурацията във файл { $name }.
saving_loading_saving_failure = Неуспешно записване на данните за конфигурацията във файла { $name }.
saving_loading_reset_configuration = Текущата конфигурация е изтрита.
saving_loading_loading_success = Правилно заредена конфигурация на приложението.
saving_loading_invalid_string = За ключа "{ $key }" е намерен невалиден резултат - "{ $result }", който не е низ.
saving_loading_invalid_int = За ключа "{ $key }" е намерен невалиден резултат - "{ $result }", който не е цяло число.
saving_loading_invalid_bool = За ключа "{ $key }" е намерен невалиден резултат - "{ $result }", който не е bool.
saving_loading_decode_problem_bool = Неуспешно декодиране на bool от ключа "{ $key }" намерено "{ $result }", но разрешените стойности са 0, 1, true или false.
saving_loading_saving_same_keys = Опит за запазване на настройка с дублиран ключ "{ $key }".
saving_loading_failed_to_get_home_directory = Не успя да получи начална директория за отваряне/записване на конфигурационен файл.
saving_loading_folder_config_instead_file = Не може да се създаде или отвори файл за запазване на конфигурация в пътя "{ $path }", защото вече има папка.
saving_loading_failed_to_create_configuration_folder = Неуспешна конфигурация за създаване на конфигурационна папка "{ $path }", причина "{ $reason }".
saving_loading_failed_to_create_config_file = Неуспешно създаване на конфигурационен файл "{ $path }", причина "{ $reason }".
saving_loading_failed_to_read_config_file = Не може да се зареди конфигурация от "{ $path }", защото тя не съществува или не е файл.
saving_loading_failed_to_read_data_from_file = Не може да се прочетат данни от файл "{ $path }", причина "{ $reason }".
saving_loading_orphan_data = Открити са данни за сираци "{ $data }" в ред "{ $line }".
saving_loading_not_valid = Настройката "{ $data }" не съществува в текущата версия на приложението.
# Invalid symlinks
invalid_symlink_infinite_recursion = Безкрайна рекурсия
invalid_symlink_non_existent_destination = Несъществуващ дестинационен файл
# Other
selected_all_reference_folders = Не може да се стартира търсене, когато всички директории са зададени като референтни папки
searching_for_data = Търсене на данни, може да отнеме известно време, моля, изчакайте...
text_view_messages = СЪОБЩЕНИЯ
text_view_warnings = ПРЕДУПРЕЖДЕНИЯ
text_view_errors = ГРЕШКИ
about_window_motto = Тази програма е безплатна за използване и винаги ще бъде такава.
# Various dialog
dialogs_ask_next_time = Попитайте следващия път
delete_file_failed = Неуспешно изтриване на файл { $name }, причина { $reason }
delete_title_dialog = Изтрий потвърждението
delete_question_label = Сигурни ли сте, че искате да изтриете файловете?
delete_all_files_in_group_title = Потвърждаване на изтриването на всички файлове в групата
delete_all_files_in_group_label1 = В някои групи се избират всички записи.
delete_all_files_in_group_label2 = Сигурни ли сте, че искате да ги изтриете?
delete_folder_failed = Не успяхте да изтриете папка { $dir }, защото папката не съществува, нямате разрешение или папката не е празна.
delete_items_label = { $items } файловете ще бъдат изтрити.
delete_items_groups_label = { $items } Файловете от { $groups } групите ще бъдат изтрити.
hardlink_failed = Неуспешно свързване с твърда връзка
hard_sym_invalid_selection_title_dialog = Невалидна селекция при някои групи
hard_sym_invalid_selection_label_1 = В някои групи е избран само един запис и той ще бъде пренебрегнат.
hard_sym_invalid_selection_label_2 = За да можете да свържете тези файлове с твърда/симетрична връзка, трябва да изберете поне два резултата в групата.
hard_sym_invalid_selection_label_3 = Първият в групата се признава за оригинален и не се променя, но вторият и следващите се променят.
hard_sym_link_title_dialog = Потвърждаване на връзката
hard_sym_link_label = Потвърждаване на връзкатаСигурни ли сте, че искате да свържете тези файлове?
move_folder_failed = Неуспешно преместване на папка { $name }, причина { $reason }
move_file_failed = Неуспешно преместване на файл { $name }, причина { $reason }
move_files_title_dialog = Изберете папката, в която искате да преместите дублираните файлове
move_files_choose_more_than_1_path = Може да се избере само един път, за да може да се копират дублираните им файлове, selected { $path_number }.
move_stats = Правилно преместени { $num_files }/{ $all_files } елементи
save_results_to_file = Saved results both to txt and json files into { $name } folder.
search_not_choosing_any_music = ГРЕШКА: Трябва да изберете поне едно квадратче за отметка с типове търсене на музика.
search_not_choosing_any_broken_files = ГРЕШКА: Трябва да изберете поне едно квадратче за отметка с тип на проверените счупени файлове.
include_folders_dialog_title = Папки, които да се включват
exclude_folders_dialog_title = Папки, които да се изключат
include_manually_directories_dialog_title = Добаеви ръчно директория
cache_properly_cleared = Правилно изчистен кеш
cache_clear_duplicates_title = Изчистване на кеша за дубликати
cache_clear_similar_images_title = Изчистване на кеша на подобни изображения
cache_clear_similar_videos_title = Изчистване на кеша на подобни видеоклипове
cache_clear_message_label_1 = Искате ли да изчистите кеша от остарели записи?
cache_clear_message_label_2 = Тази операция ще премахне всички записи в кеша, които сочат към невалидни файлове.
cache_clear_message_label_3 = Това може леко да ускори зареждането/записването в кеша.
cache_clear_message_label_4 = ПРЕДУПРЕЖДЕНИЕ: Операцията ще премахне всички кеширани данни от изключените външни дискове. Така че всеки хеш ще трябва да бъде възстановен.
# Show preview
preview_image_resize_failure = Неуспешно променяне на размера на изображението { $name }.
preview_image_opening_failure = Неуспешно отваряне на изображение { $name }, причина { $reason }
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = Група { $current_group }/{ $all_groups } ({ $images_in_group } изображения)
compare_move_left_button = Л
compare_move_right_button = Д

@ -1,5 +1,5 @@
# Window titles
window_settings_title = Možnosti
window_settings_title = Nastavení
window_main_title = Czkawka (Škytavka)
window_progress_title = Skenování
window_compare_images = Porovnat obrázky
@ -9,25 +9,48 @@ general_close_button = Zavřít
# Main window
music_title_checkbox = Hlava 1 Celkem
music_artist_checkbox = Umělec
music_album_title_checkbox = Název alba
music_album_artist_checkbox = Interpret alba
music_year_checkbox = Rok
music_bitrate_checkbox = Přenosová rychlost
music_genre_checkbox = Žánr
music_length_checkbox = Délka
music_comparison_checkbox = Přibližné srovnání
music_checking_by_tags = Štítky
music_checking_by_content = Obsah
same_music_seconds_label = Minimální délka trvání druhého fragmentu
same_music_similarity_label = Maximální rozdíl
same_music_tooltip =
Vyhledávání podobných hudebních souborů podle jejich obsahu může být nakonfigurováno nastavením:
- Minimální doba fragmentu, po které mohou být hudební soubory identifikovány jako podobné
- Maximální rozdíl mezi dvěma testovanými fragmenty
Klíč k dobrým výsledkům je najít rozumné kombinace těchto parametrů, pro stanovení.
Nastavení minimální doby na 5 s a maximální rozdíl na 1,0 bude hledat téměř stejné fragmenty v souborech.
Čas 20 s a maximální rozdíl 6,0 na druhé straně funguje dobře pro nalezení remixů/živých verzí atd.
Ve výchozím nastavení je každý hudební soubor porovnáván mezi sebou a to může trvat dlouho při testování mnoha souborů, takže je obvykle lepší používat referenční složky a specifikovat, které soubory mají být vzájemně porovnány (se stejným množstvím souborů, porovnávání otisků prstů bude rychlejší alespoň 4x než bez referenčních složek).
music_comparison_checkbox_tooltip =
Vyhledá podobné hudební soubory pomocí AI, která používá strojové učení k odstranění závorek z fráze, např. pokud je tato možnost povolena, příslušné soubory budou považovány za duplicitní soubory:
Vyhledá podobné hudební soubory pomocí AI, která používá strojové učení k odstranění závorek z fráze. Například, pokud je tato možnost povolena, příslušné soubory budou považovány za duplicitní soubory:
Świędziżłób --- Świędziżłób (Remix Lato 2021)
duplicate_case_sensitive_name = Rozlišuje malá a velká písmena
duplicate_case_sensitive_name_tooltip =
Pokud je povoleno, skupiny pouze záznamy, pokud mají přesně stejný název, např.Żołd <-> Żołd
Zakázání takové volby bude názvy skupin bez kontroly, zda je každé písmeno stejné velikosti, např. żoŁD <-> Żołd
duplicate_mode_size_name_combo_box = Velikost a název
duplicate_mode_name_combo_box = Název
duplicate_mode_size_combo_box = Velikost
duplicate_mode_hash_combo_box = Hash
duplicate_hash_type_tooltip =
Czkawka nabízí 3 typy hash, které lze použít:
Czkawka nabízí 3 typy hash:
Blake3 - kryptografická hash funkce. Používá se jako výchozí hash algoritmus, protože je velmi rychlý.
Blake3 - kryptografická hash funkce. Toto je výchozí, protože je velmi rychlý.
CRC32 - jednoduchá hash funkce. Mělo by to být rychlejší než Blake3, ale pravděpodobně může mít velmi zřídka některé kolize.
CRC32 - jednoduchá hash funkce. To by mělo být rychlejší než Blake3, ale může docházet jen zřídka k nějakým střetům.
XXH3 - velmi podobné v případě výkonu a hash kvality jako Blake3, takže takové režimy lze snadno použít.
XXH3 - velmi podobné ve výkonu a kvalitě hash jako Blake3 (ale nekryptografické). Takovéto režimy mohou být snadno zaměnitelné.
duplicate_check_method_tooltip =
Pro tuto chvíli nabízí Czkawka tři typy metod, které vyhledávají duplicitní soubory:
@ -35,21 +58,34 @@ duplicate_check_method_tooltip =
Velikost - Nalezí soubory, které mají stejnou velikost.
Hash - Najde soubory, které mají stejný obsah. Tento režim hashuje soubor a později porovnává tyto hashy s nalezením duplicit. Tento režim je nejbezpečnějším způsobem, jak nalézt duplicity. Nástroj silně používá mezipaměť, takže druhé a další skenování stejných dat by mělo být mnohem rychlejší než první.
Hash - Najde soubory, které mají stejný obsah. Tento režim hashuje soubor a později porovnává tento hash s nalezením duplikátů. Tento režim je nejbezpečnějším způsobem, jak nalézt duplikáty. Aplikace používá mezipaměť, takže druhé a další skenování stejných dat by mělo být mnohem rychlejší než první.
image_hash_size_tooltip =
Czkawka nabízí měnící se velikost generovaného hash pro každý obrázek. Větší hash umožňuje najít obrázky s nižším počtem rozdílů mezi obrázky, ale je také trochu pomalejší.
Každý zkontrolovaný obrázek vytváří speciální hash který lze porovnávat, a malý rozdíl mezi nimi znamená, že tyto obrázky jsou podobné.
8 hash velikost je docela dobrá k nalezení obrázků, které jsou jen trochu podobné originálům. S větší sadou obrázků (>1000) to vytvoří velké množství falešných pozitivních prvků, takže doporučuji v tomto případě použít větší hash velikost.
16 je výchozí velikost hashu, což je docela dobrý kompromis mezi nalezením i trochu podobných obrázků a malým množstvím hashových kolizí.
32 a 64 hash nalezly jen velmi podobné obrázky, ale neměly by mít téměř žádné falešné pohledy (možná kromě některých obrázků s alfa kanálem).
image_resize_filter_tooltip =
Pro výpočet hash obrázku musí knihovna nejprve změnit velikost.
V závislosti na zvoleném algoritmu bude výsledný obrázek použitý k výpočtu hash vypadat trochu jinak.
Výchozí hodnota pro hash je 8 bajtů, což umožňuje najít velmi podobné a různé obrázky. U téměř identických obrázků by měla být použita pomlčka 16 a 32 hash. Neměla by být použita hash 64 bajtů, s výjimkou situací, kdy jsou k nalezení opravdu malé rozdíly potřebné
image_resize_filter_tooltip = Pro výpočet hash obrázku musí knihovna nejprve změnit velikost. V závislosti na zvoleném algoritmu bude výsledný obrázek vypadat málo jinak. Nejrychlejší algoritmus k používání, ale také ten, který dává nejhorší výsledky, je blízko.
image_hash_alg_tooltip = Uživatelé si mohou vybrat jeden z mnoha algoritmů pro výpočet hashu. Každý z nich má silné i slabší body a někdy přinese lepší a někdy horší výsledky pro různé obrázky, pro výběr nejlepšího, je vyžadováno ruční zkoušení.
main_notebook_image_fast_compare = Rychlé porovnání
main_notebook_image_fast_compare_tooltip =
Urychlit hledání a porovnávání hasičů.
Nejrychlejší algoritmus k používání, ale také ten, který dává nejhorší výsledky, je blízko. Ve výchozím nastavení je povoleno, protože s menší kvalitou 16x16 hash není ve skutečnosti viditelná.
V protikladu k normálnímu režimu, kde je každá pomlčka porovnávána s x krát, kde x je podobnost zvolená uživatelem, v tomto režimu se vždy používá pouze jedno porovnávání.
S velikostí hash 8x8 je doporučeno použít jiný algoritmus než nejbližší pro lepší skupiny obrázků.
image_hash_alg_tooltip =
Uživatelé si mohou vybrat z jednoho z mnoha algoritmů pro výpočet hashu.
Tato možnost je doporučena při porovnávání >10000 obrázků s jinou než 0(Very High) podobností.
main_notebook_duplicates = Duplikovat soubory
Každý má silné a slabší body a někdy přinese lepší a někdy horší výsledky pro různé obrázky.
Takže k určení nejlepšího pro vás je vyžadováno ruční testování.
big_files_mode_combobox_tooltip = Umožňuje vyhledávat malé / největší soubory
big_files_mode_label = Zaškrtnuté soubory
big_files_mode_smallest_combo_box = Nejmenší
big_files_mode_biggest_combo_box = Největší
main_notebook_duplicates = Duplicitní soubory
main_notebook_empty_directories = Prázdné adresáře
main_notebook_big_files = Velké soubory
main_notebook_empty_files = Prázdné soubory
@ -59,6 +95,7 @@ main_notebook_similar_videos = Podobná videa
main_notebook_same_music = Hudební duplikáty
main_notebook_symlinks = Neplatné symbolické odkazy
main_notebook_broken_files = Rozbité soubory
main_notebook_bad_extensions = Špatná rozšíření
main_tree_view_column_file_name = Název souboru
main_tree_view_column_folder_name = Název složky
main_tree_view_column_path = Cesta
@ -69,12 +106,15 @@ main_tree_view_column_dimensions = Rozměry
main_tree_view_column_title = Hlava
main_tree_view_column_artist = Umělec
main_tree_view_column_year = Rok
main_tree_view_column_album_title = Název alba
main_tree_view_column_album_artist = Interpret alba
main_tree_view_column_bitrate = Přenosová rychlost
main_tree_view_column_length = Délka
main_tree_view_column_genre = Žánr
main_tree_view_column_symlink_file_name = Název souboru symbolického odkazu
main_tree_view_column_symlink_folder = Složka Symlnik
main_tree_view_column_symlink_folder = Složka symbolického odkazu
main_tree_view_column_destination_path = Cílová cesta
main_tree_view_column_type_of_error = Typ chyby
main_tree_view_column_current_extension = Aktuální rozšíření
main_tree_view_column_proper_extensions = Řádné rozšíření
main_label_check_method = Metoda kontroly
main_label_hash_type = Typ Hash
main_label_hash_size = Velikost hash
@ -84,8 +124,12 @@ main_label_max_size = Max
main_label_shown_files = Počet zobrazených souborů
main_label_resize_algorithm = Změna velikosti algoritmu
main_label_similarity = Podobnost { " " }
main_check_box_broken_files_audio = Zvuk
main_check_box_broken_files_pdf = Pdf
main_check_box_broken_files_archive = Archivovat
main_check_box_broken_files_image = Obrázek
check_button_general_same_size = Ignorovat stejnou velikost
check_button_general_same_size_tooltip = Ignorovat výsledky souborů, které mají stejnou velikost - obvykle jde o 1:1 duplicitní
check_button_general_same_size_tooltip = Ignorovat soubory se stejnou velikostí ve výsledcích - obvykle se jedná o 1:1 duplicitní
main_label_size_bytes_tooltip = Velikost souborů, které budou použity při skenování
# Upper window
upper_tree_view_included_folder_column_title = Vyhledávané složky
@ -98,26 +142,41 @@ upper_remove_included_button = Odebrat
upper_manual_add_excluded_button = Ruční přidání
upper_add_excluded_button = Přidat
upper_remove_excluded_button = Odebrat
upper_manual_add_included_button_tooltip = Umožňuje přidat název adresáře pro hledání ručně.
upper_manual_add_included_button_tooltip =
Přidat název adresáře k hledání ručně.
Chcete-li přidat více cest najednou, oddělte je od ;
/home/roman;/home/rozkaz přidá dva adresáře /home/roman a /home/rozkaz
upper_add_included_button_tooltip = Přidat nový adresář k vyhledávání.
upper_remove_included_button_tooltip = Odstranit adresář z hledání.
upper_manual_add_excluded_button_tooltip = Umožňuje přidat ručně vyloučený název adresáře.
upper_manual_add_excluded_button_tooltip =
Přidejte ručně název vyloučené adresáře.
Chcete-li přidat více cest najednou, oddělte je od ;
/home/roman;/home/krokiet přidá dva adresáře /home/roman a /home/keokiet
upper_add_excluded_button_tooltip = Přidat adresář, který bude při hledání vyloučen.
upper_remove_excluded_button_tooltip = Odstranit adresář z vyloučení.
upper_notebook_items_configuration = Konfigurace položek
upper_notebook_excluded_directories = Vyloučené adresáře
upper_notebook_included_directories = Zahrnuté adresáře
upper_allowed_extensions_tooltip =
Povolená rozšíření musí být oddělena čárkou (ve výchozím nastavení jsou všechny k dispozici).
Povolené přípony musí být odděleny čárkami (ve výchozím nastavení jsou všechny k dispozici).
Macros IMAGE, VIDEO, MUSIC, TEXT, který přidává více rozšíření najednou, jsou také k dispozici.
Následující makra, která přidávají více rozšíření najednou, jsou také k dispozici: IMAGE, VIDEO, MUSIC, TEXT.
Příklad použití ".exe, IMAGE, VIDEO, .rar, 7z" - to znamená, že obrázek (e. . jpg, png), video (např. avi, mp4), exe, rar a 7z soubory budou naskenovány.
Příklad použití ".exe, IMAGE, VIDEO, .rar, 7z" - to znamená, že obrázky (např. . jpg, png), videa (např. avi, mp4), exe, rar a 7z soubory budou naskenovány.
upper_excluded_extensions_tooltip =
Seznam zakázaných souborů, které budou při skenování ignorovány.
Při používání povolených i zakázaných přípon, má tato vyšší prioritu, takže soubor nebude zaškrtnut.
upper_excluded_items_tooltip =
Vyloučené položky musí obsahovat * zástupné znaky a měly by být odděleny čárkami.
To je pomalejší než vyloučené adresáře, proto je používáme opatrně.
upper_excluded_items = Vyloučené položky:
upper_allowed_extensions = Povolená rozšíření:
upper_excluded_extensions = Zakázané rozšíření:
# Popovers
popover_select_all = Vybrat vše
popover_unselect_all = Odznačit vše
@ -131,36 +190,46 @@ popover_unselect_custom = Zrušit výběr vlastních
popover_select_all_images_except_biggest = Vybrat vše kromě největších
popover_select_all_images_except_smallest = Vybrat všechny kromě nejmenších
popover_custom_path_check_button_entry_tooltip =
Umožňuje vybrat záznamy podle cesty.
Vyberte záznamy podle cesty.
Příklad použití:
/home/pimpek/rzecz.txt lze nalézt pomocí /home/pim*
popover_custom_name_check_button_entry_tooltip =
Umožňuje vybrat záznamy podle názvů souborů.
Vyberte záznamy podle názvů souborů.
Příklad použití:
/usr/ping/pong.txt lze nalézt s *ong*
popover_custom_regex_check_button_entry_tooltip =
Umožňuje vybrat záznamy podle zadaného Regexu.
Vyberte záznamy podle zadaného Regexu.
S tímto režimem je hledaný text trasou s názvem.
S tímto režimem je vyhledávaná cesta se jménem.
Příklad použití:
/usr/bin/ziemniak. xt lze nalézt pomocí /ziem[a-z]+
Toto použití defaultní implementace Rust regex, takže si můžete přečíst více informací na https://docs.rs/regex.
Toto používá výchozí implementaci Rust regex. Více o tom si můžete přečíst zde: https://docs.rs/regex.
popover_custom_case_sensitive_check_button_tooltip =
Umožňuje detekci citlivosti na malá a velká písmena.
Pokud je vypnuta /doma/* nálezů jak /HoMe/roman tak /home/roman.
popover_custom_not_all_check_button_tooltip =
Zabraňuje výběru všech záznamů ve skupině.
Toto je ve výchozím nastavení povoleno, protože uživatel ve většině situací nechce odstranit originální i duplicitní soubory, ale chcete opustit alespoň jeden soubor.
Toto je ve výchozím nastavení povoleno, protože ve většině situací, nechcete odstranit originální i duplicitní soubory, ale chcete opustit alespoň jeden soubor.
Varování: Toto nastavení nefunguje, pokud již uživatel vybral všechny výsledky ve skupině ručně.
VAROVÁNÍ: Toto nastavení nefunguje, pokud jste již ručně vybrali všechny výsledky ve skupině.
popover_custom_regex_path_label = Cesta
popover_custom_regex_name_label = Název
popover_custom_regex_regex_label = Regex cesta + Jméno
popover_custom_case_sensitive_check_button = Rozlišit malá a velká písmena
popover_custom_all_in_group_label = Nesbírat všechny záznamy ve skupině
popover_custom_mode_unselect = Zrušit výběr vlastních
popover_custom_mode_select = Vybrat vlastní
popover_sort_file_name = Název souboru
popover_sort_folder_name = Název adresáře
popover_sort_full_name = Jméno a příjmení
popover_sort_size = Velikost
popover_sort_selection = Výběr
popover_invalid_regex = Regex je neplatný
popover_valid_regex = Regex je platný
# Bottom buttons
@ -171,31 +240,39 @@ bottom_save_button = Uložit
bottom_symlink_button = Symlink
bottom_hardlink_button = Hardlink
bottom_move_button = Přesunout
bottom_search_button_tooltip = Začněte hledat soubory/složky.
bottom_select_button_tooltip = Vybere záznamy. Později mohou být zpracovány pouze vybrané soubory/složky.
bottom_sort_button = Seřadit
bottom_search_button_tooltip = Začít hledání
bottom_select_button_tooltip = Vyberte záznamy. Pouze vybrané soubory/složky mohou být později zpracovány.
bottom_delete_button_tooltip = Odstranit vybrané soubory/složky.
bottom_save_button_tooltip = Ukládat data o hledání do souboru
bottom_symlink_button_tooltip =
Vytváří symbolické odkazy.
Funguje pouze, když jsou vybrány alespoň 2 výsledky ve skupině.
Vytvořit symbolické odkazy.
Funguje pouze tehdy, pokud jsou vybrány alespoň dva výsledky ve skupině.
Nejprve je nezměněna a druhé a později jsou souvztažné s prvními.
bottom_hardlink_button_tooltip =
Vytvoří hardwarové odkazy.
Funguje pouze, když jsou vybrány alespoň 2 výsledky ve skupině.
Vytvořit hardwarové odkazy.
Funguje pouze tehdy, pokud jsou vybrány alespoň dva výsledky ve skupině.
Nejprve je nezměněna a druhé a později jsou těžce propojeny s prvními.
bottom_hardlink_button_not_available_tooltip =
Vytvořit hardwarové odkazy.
Tlačítko je zakázáno, protože hardwarové odkazy nelze vytvořit.
Hardlinky fungují pouze s oprávněními administrátora v systému Windows, tak se ujistěte, že používáte aplikaci jako administrátora.
Pokud aplikace s takovými oprávněními již funguje, podívejte se na podobné problémy na Githubu.
bottom_move_button_tooltip =
Přesune soubory do vybrané složky.
Zkopíruje všechny soubory do složky bez uchování stromu adresáře.
Při pokusu přesunout 2 soubory se stejným názvem do složky, druhý selže a zobrazí chybu.
bottom_show_errors_tooltip = Zobrazit/skrýt dolní chybový panel.
Přesune soubory do vybraného adresáře.
Zkopíruje všechny soubory do adresáře bez uchování stromu adresáře.
Při pokusu přesunout dva soubory se stejným názvem do složky, druhý selže a zobrazí chybu.
bottom_sort_button_tooltip = Seřazuje soubory/složky podle zvolené metody.
bottom_show_errors_tooltip = Zobrazit/skrýt spodní textový panel.
bottom_show_upper_notebook_tooltip = Zobrazit/skrýt horní panel sešitu.
# Progress Window
progress_stop_button = Zastavit
progress_stop_additional_message = Zastavit požadavek
# About Window
about_repository_button_tooltip = Odkaz na stránku repositáře se zdrojovým kódem.
about_donation_button_tooltip = Odkaz na stránku s darováním.
about_instruction_button_tooltip = Odkaz na stránku instrukcí.
about_translation_button_tooltip = Odkaz na stránku Crowdin s překlady aplikací. Oficiálně polština a angličtina jsou podporovány, ale jakákoli pomoc s jiným jazykem bude oceněna.
about_translation_button_tooltip = Odkaz na stránku Crowdin s překlady aplikací. Oficiálně polština a angličtina jsou podporovány.
about_repository_button = Repozitář
about_donation_button = Darovat
about_instruction_button = Instrukce
@ -209,38 +286,46 @@ header_about_button_tooltip = Otevře dialog s informacemi o aplikaci.
## General
settings_save_at_exit_button_tooltip = Uloží konfiguraci do souboru při zavření aplikace.
settings_number_of_threads = Počet použitých vláken
settings_number_of_threads_tooltip = Počet použitých vláken, 0 znamená, že budou použita všechna dostupná vlákna.
settings_label_restart = Pro použití nastavení je třeba restartovat aplikaci!
settings_ignore_other_filesystems = Ignorovat ostatní souborové systémy (pouze Linux)
settings_ignore_other_filesystems_tooltip =
ignoruje soubory, které nejsou ve stejném souborovém systému jako prohledávané adresáře.
Funguje stejně jako -xdev možnost najít příkaz na Linuxu
settings_save_at_exit_button_tooltip = Uložit konfiguraci do souboru při zavření aplikace.
settings_load_at_start_button_tooltip =
Načítání při startu konfigurace ze souboru.
Nevybráním této možnosti se načte výchozí nastavení.
settings_confirm_deletion_button_tooltip = Zobrazí potvrzovací dialogové okno při kliknutí na tlačítko mazat.
settings_confirm_link_button_tooltip = Zobrazí potvrzovací dialogové okno při kliknutí na hard/symbolický odkaz.
settings_confirm_group_deletion_button_tooltip = Zobrazí dialogové okno při pokusu o odstranění všech záznamů ze skupiny.
settings_show_text_view_button_tooltip = Zobrazí chybový panel dole.
settings_use_cache_button_tooltip = Možnost, která umožňuje nepoužívat funkci mezipaměti.
settings_save_also_as_json_button_tooltip = Uložit mezipaměť do lidského formátu JSON. Je možné upravit její obsah. Mezipaměť z tohoto souboru bude automaticky čtena aplikací, pokud chybí binární mezipaměť (s příponou bin).
settings_use_trash_button_tooltip = Pokud je povoleno, přesune soubory do koše místo jejich trvalého odstranění.
settings_language_label_tooltip = Umožňuje vybrat jazyk rozhraní z dostupných jazyků.
settings_save_at_exit_button = Uložit konfiguraci při ukončení
settings_load_at_start_button = Načíst konfiguraci při startu
Načíst konfiguraci ze souboru při otevírání aplikace.
Pokud není povoleno, budou použita výchozí nastavení.
settings_confirm_deletion_button_tooltip = Zobrazit potvrzovací dialogové okno při kliknutí na tlačítko mazat.
settings_confirm_link_button_tooltip = Zobrazit potvrzovací dialog při kliknutí na tlačítko hard/symbolický odkaz.
settings_confirm_group_deletion_button_tooltip = Zobrazit varovný dialog při pokusu o odstranění všech záznamů ze skupiny.
settings_show_text_view_button_tooltip = Zobrazit textový panel v dolní části uživatelského rozhraní.
settings_use_cache_button_tooltip = Použít cache souborů.
settings_save_also_as_json_button_tooltip = Uložit keš do (lidsky čitelný) formátu JSON. Je možné změnit její obsah. Mezipaměť z tohoto souboru bude automaticky čtena aplikací, pokud chybí binární formát mezipaměti (s rozšířením koše).
settings_use_trash_button_tooltip = Přesune soubory do koše a místo toho je trvale odstraní.
settings_language_label_tooltip = Jazyk uživatelského rozhraní.
settings_save_at_exit_button = Uložit konfiguraci při zavření aplikace
settings_load_at_start_button = Načíst konfiguraci při otevření aplikace
settings_confirm_deletion_button = Zobrazit dialogové okno potvrzení při mazání všech souborů
settings_confirm_link_button = Zobrazit dialogové okno pro pevné / symbolické odkazy
settings_confirm_group_deletion_button = Zobrazit dialogové okno potvrzení při mazání všech souborů ve skupině
settings_show_text_view_button = Zobrazit spodní textový panel
settings_use_cache_button = Použít keš
settings_save_also_as_json_button = Uložit keš také do souboru JSON
settings_save_also_as_json_button = Ukládat mezipaměť také jako soubor JSON
settings_use_trash_button = Přesunout smazané soubory do koše
settings_language_label = Jazyk
settings_multiple_delete_outdated_cache_checkbutton = Automaticky odstranit zastaralé položky v mezipaměti
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
Umožňuje odstranit zastaralé výsledky mezipaměti odkazující na neexistující soubory.
Odstranit zastaralé výsledky mezipaměti, které ukazují na neexistující soubory.
Pokud je povoleno, aplikace se ujistí, že při načítání záznamů všechny body na platné soubory a ignoruje poškozené soubory.
Pokud je povoleno, aplikace se ujistí, že při načítání záznamů všechny záznamy odkazují na platné soubory (poškozené jsou ignorovány).
Zakázání této volby pomůže naskenovat soubory na externích discích, takže záznamy keší o nich nebudou při příštím skenování vymazány.
Zakázáním této funkce pomůže při skenování souborů na externích discích, takže záznamy keší o nich nebudou vymazány v dalším skenování.
V případě stovky tisíc záznamů v keši, je doporučeno povolit tuto možnost, urychlit načítání a ukládání mezipaměti na začátku a na konci skenování.
V případě stovky tisíc záznamů v keši, je doporučeno toto povolit, což urychlí načítání/ukládání mezipaměti na začátku/konci skenování.
settings_notebook_general = Obecná ustanovení
settings_notebook_duplicates = Duplikáty
settings_notebook_images = Podobné obrázky
@ -248,34 +333,34 @@ settings_notebook_videos = Podobné video
## Multiple - settings used in multiple tabs
settings_multiple_image_preview_checkbutton_tooltip = Zobrazí náhled na pravé straně při výběru obrázku.
settings_multiple_image_preview_checkbutton_tooltip = Zobrazí náhled na pravé straně (při výběru souboru obrázku).
settings_multiple_image_preview_checkbutton = Zobrazit náhled obrázku
settings_multiple_clear_cache_button_tooltip =
Ručně vymazat mezipaměť ze zastaralých položek.
Mělo by být použito pouze v případě, že automatický úklid byl zakázán.
settings_multiple_clear_cache_button = Odstranit zastaralé výsledky z mezipaměti obrázků
Ručně vymazat mezipaměť zastaralých položek.
Toto by mělo být použito pouze v případě, že je zakázáno automatické vymazání.
settings_multiple_clear_cache_button = Odstranit zastaralé výsledky z mezipaměti.
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
Skryje všechny soubory kromě jedné, pokud jsou body ke stejným datům (jsou hardline).
Skryje všechny soubory kromě jedné, pokud všechny odkazují na stejná data (jsou hardlinované).
Např. v případě, že na disku je 7 souborů, které jsou těžce propojeny s konkrétními daty, a jeden jiný soubor se stejnými daty, ale různými inody, pak v hledání duplikátu bude viditelný pouze jeden jedinečný soubor a jeden soubor z hardlinerů.
Příklad: V případě, že je na disku sedm souborů, které jsou spojeny s konkrétními daty, a jeden jiný soubor se stejnými daty, ale jiným inodem, pak v hledání duplikátu bude zobrazen pouze jeden unikátní soubor a jeden soubor z hardlinovaných souborů.
settings_duplicates_minimal_size_entry_tooltip =
Umožňuje nastavit minimální velikost souboru, který bude uložen do mezipaměti.
Nastavte minimální velikost souboru, který bude uložen do mezipaměti.
Výběr menší hodnoty, vygeneruje více záznamů, které urychlí vyhledávání, ale zpomalí načítání/ukládání mezipaměti.
Výběr menší hodnoty vygeneruje více záznamů. Toto urychlí vyhledávání, ale zpomalí načítání/ukládání mezipaměti.
settings_duplicates_prehash_checkbutton_tooltip =
Umožňuje ukládání do mezipaměti (spáchaná z malé části souboru), což umožňuje dříve vyhodit neduplicitní výsledky.
Umožňuje ukládání do mezipaměti (hash vypočtený z malé části souboru), což umožňuje dřívější odstranění neduplikovaných výsledků.
Ve výchozím nastavení je zakázáno, protože v některých situacích zpomaluje.
Ve výchozím nastavení je zakázáno, protože v některých situacích může způsobit zpomale.
Je důrazně doporučeno jej použít při skenování stovek tisíců nebo miliónů souborů, protože může urychlit hledání několikrát.
Doporučujeme jej použít při skenování stovek tisíc nebo miliónů souborů, protože může urychlit hledání několikrát.
settings_duplicates_prehash_minimal_entry_tooltip = Minimální velikost položky v mezipaměti.
settings_duplicates_hide_hard_link_button = Skrýt pevné odkazy (pouze Linux a MacOS)
settings_duplicates_hide_hard_link_button = Skrýt pevné odkazy (pouze Linux a macOS)
settings_duplicates_prehash_checkbutton = Použít mezipaměť rozpoznávání
settings_duplicates_minimal_size_cache_label = Minimální velikost souborů v bajtech uložených do mezipaměti
settings_duplicates_minimal_size_cache_prehash_label = Minimální velikost souborů v bajtech uložených pro zachycení keše
settings_duplicates_minimal_size_cache_label = Minimální velikost souborů (v bajtech) uložených do mezipaměti
settings_duplicates_minimal_size_cache_prehash_label = Minimální velikost souborů (v bajtech) uložených pro zachycení keše
## Saving/Loading settings
@ -289,17 +374,17 @@ settings_reset_button = Obnovit konfiguraci
## Opening cache/config folders
settings_folder_cache_open_tooltip =
Otevře složku, kde jsou soubory txt uložené v mezipaměti.
Otevře složku, kde jsou uloženy soubory txt v mezipaměti.
Jejich úprava může způsobit zobrazení neplatných výsledků, ale také upravování e.. cesta může ušetřit čas při přesunu velkého množství souborů na jiné místo.
Úprava souborů může způsobit zobrazení neplatných výsledků. Změna cesty však může ušetřit čas při přesunu velkého množství souborů do jiného umístění.
Můžete zkopírovat tyto soubory mezi počítači, abyste ušetřili čas při skenování souborů (samozřejmě pokud mají podobnou strukturu adresáře).
Tyto soubory můžete zkopírovat mezi počítači, abyste ušetřili čas při skenování souborů (samozřejmě pokud mají podobnou strukturu adresáře).
V případě problémů s mezipamětí, mohou být tyto soubory odstraněny, takže je aplikace automaticky obnoví.
V případě problémů s mezipamětí, mohou být tyto soubory odstraněny. Aplikace je automaticky obnoví.
settings_folder_settings_open_tooltip =
Otevře složku, kde je uloženo nastavení Czkawka.
Ruční úprava může způsobit poškození vašeho pracovního postupu.
VAROVÁNÍ: Ruční úprava konfigurace může poškodit váš pracovní postup.
settings_folder_cache_open = Otevřít složku mezipaměti
settings_folder_settings_open = Otevřít složku s nastavením
# Compute results
@ -315,19 +400,30 @@ compute_found_videos = Nalezeno { $number_files } podobných videí v { $number_
compute_found_music = Nalezeno { $number_files } podobných hudebních souborů v { $number_groups } skupinách
compute_found_invalid_symlinks = Nalezeno { $number_files } neplatných symbolických odkazů
compute_found_broken_files = Nalezeno { $number_files } poškozených souborů
compute_found_bad_extensions = Nalezeno { $number_files } souborů s neplatnými příponami
# Progress window
progress_scanning_general_file = Skenování { $file_number } souboru
progress_scanning_extension_of_files = Kontrola přípony souboru { $file_checked }/{ $all_files }
progress_scanning_broken_files = Kontrola souboru { $file_checked }/{ $all_files }
progress_scanning_video = Hashování { $file_checked }/{ $all_files } videa
progress_scanning_image = Hashování { $file_checked }/{ $all_files } obrázku
progress_comparing_image_hashes = Porovnávám { $file_checked }/{ $all_files } hash obrázků
progress_scanning_music_tags_end = Porovnávání značek s { $file_checked }/{ $all_files } hudebním souborem
progress_scanning_music_tags = Čtení tagů z { $file_checked }/{ $all_files } hudebního souboru
progress_scanning_music_content_end = Porovnání otisku prstu v { $file_checked }/{ $all_files } hudebního souboru
progress_scanning_music_content = Výpočet otisku prstu { $file_checked }/{ $all_files } hudebního souboru
progress_scanning_empty_folders = Skenování { $folder_number } složky
progress_scanning_size = Skenování velikosti { $file_number } souboru
progress_scanning_size_name = Skenování jména a velikosti souboru { $file_number }
progress_scanning_name = Skenování názvu souboru { $file_number }
progress_analyzed_partial_hash = Analyzován částečný hash souborů { $file_checked }/{ $all_files }
progress_analyzed_full_hash = Analyzováno úplné hash souborů { $file_checked }/{ $all_files }
progress_prehash_cache_loading = Načítání mezipaměti rozpoznání
progress_prehash_cache_saving = Ukládání mezipaměti rozpoznání
progress_hash_cache_loading = Načítání hash keše
progress_hash_cache_saving = Ukládání keše hash
progress_cache_loading = Načítání keše
progress_cache_saving = Ukládání keše
progress_current_stage = Aktuální fáze:{ " " }
progress_all_stages = Všechny etapy:{ " " }
# Saving loading
@ -344,14 +440,15 @@ saving_loading_failed_to_get_home_directory = Nepodařilo se získat domovský a
saving_loading_folder_config_instead_file = Nelze vytvořit nebo otevřít konfigurační soubor v cestě "{ $path }", protože již existuje složka.
saving_loading_failed_to_create_configuration_folder = Nepodařilo se vytvořit konfigurační složku "{ $path }", důvod "{ $reason }".
saving_loading_failed_to_create_config_file = Nepodařilo se vytvořit konfigurační soubor "{ $path }", důvod "{ $reason }".
saving_loading_failed_to_read_config_file = Konfiguraci z "{ $path }" nelze načíst, protože neexistuje nebo není soubor.
saving_loading_failed_to_read_config_file = Konfiguraci z "{ $path } nelze načíst, protože neexistuje nebo není soubor.
saving_loading_failed_to_read_data_from_file = Nelze číst data ze souboru "{ $path }", důvod "{ $reason }".
saving_loading_orphan_data = Nalezena osiřelá data "{ $data }" v řádku "{ $line }".
saving_loading_not_valid = Nastavení "{ $data }" neexistuje v aktuální verzi aplikace.
saving_loading_not_valid = Nastavení "{ $data }" v aktuální verzi aplikace neexistuje.
# Invalid symlinks
invalid_symlink_infinite_recursion = Nekonečná rekurze
invalid_symlink_non_existent_destination = Neexistující cílový soubor
# Other
selected_all_reference_folders = Hledání nelze spustit, pokud jsou všechny adresáře nastaveny jako referenční složky
searching_for_data = Vyhledávání dat může chvíli trvat, prosím čekejte...
text_view_messages = ZPRÁVY
text_view_warnings = VAROVÁNÍ
@ -365,23 +462,24 @@ delete_question_label = Jste si jisti, že chcete odstranit soubory?
delete_all_files_in_group_title = Potvrzení odstranění všech souborů ve skupině
delete_all_files_in_group_label1 = V některých skupinách jsou vybrány všechny záznamy.
delete_all_files_in_group_label2 = Jste si jisti, že je chcete odstranit?
delete_folder_failed = Nepodařilo se odstranit složku { $dir } , protože složka neexistuje, nemáte oprávnění nebo není prázdná.
delete_folder_failed = Nepodařilo se odstranit složku { $dir } , protože složka neexistuje, nemáte oprávnění nebo složka není prázdná.
delete_items_label = { $items } soubory budou odstraněny.
delete_items_groups_label = { $items } soubory z { $groups } skupin budou odstraněny.
delete_items_groups_label = { $items } souborů z { $groups } skupin bude smazáno.
hardlink_failed = Nepodařilo se použít hardwarový odkaz
hard_sym_invalid_selection_title_dialog = Neplatný výběr s některými skupinami
hard_sym_invalid_selection_label_1 = V některých skupinách je vybrán pouze 1 záznam a bude ignorován.
hard_sym_invalid_selection_label_2 = Aby bylo možné tyto soubory propojit s hardm/sym, je třeba vybrat alespoň 2 výsledky ve skupině.
hard_sym_invalid_selection_label_1 = V některých skupinách je vybrán pouze jeden záznam a bude ignorován.
hard_sym_invalid_selection_label_2 = Aby bylo možné tyto soubory propojit s pevným/sym, je třeba vybrat alespoň dva výsledky ve skupině.
hard_sym_invalid_selection_label_3 = První ve skupině je uznána jako původní a není změněna, ale druhá a později jsou upraveny.
hard_sym_link_title_dialog = Potvrzení odkazu
hard_sym_link_label = Jste si jisti, že chcete propojit tyto soubory?
move_folder_failed = Nepodařilo se přesunout složku { $name }, důvod { $reason }
move_file_failed = Nepodařilo se přesunout soubor { $name }, důvod { $reason }
move_files_title_dialog = Vyberte složku, do které chcete přesunout duplicitní soubory
move_files_choose_more_than_1_path = Pouze 1 cesta musí být vybrána, aby bylo možné zkopírovat duplikované soubory, vybrané { $path_number }.
move_files_choose_more_than_1_path = Lze vybrat pouze jednu cestu, aby bylo možné zkopírovat jejich duplikované soubory, vybrané { $path_number }.
move_stats = Správně přesunuto { $num_files }/{ $all_files } položek
save_results_to_file = Uložené výsledky do souboru { $name }
save_results_to_file = Uloženy výsledky do txt i json souborů do složky { $name }.
search_not_choosing_any_music = CHYBA: Musíte vybrat alespoň jedno zaškrtávací políčko s prohledáváním hudby.
search_not_choosing_any_broken_files = CHYBA: Musíte vybrat alespoň jedno zaškrtávací políčko s typem zkontrolovaných poškozených souborů.
include_folders_dialog_title = Složky, které chcete zahrnout
exclude_folders_dialog_title = Složky k vyloučení
include_manually_directories_dialog_title = Přidat adresář ručně
@ -389,16 +487,13 @@ cache_properly_cleared = Správně vymazaná mezipaměť
cache_clear_duplicates_title = Vymazání cache duplicity
cache_clear_similar_images_title = Vymazání cache podobných obrázků
cache_clear_similar_videos_title = Vymazání cache podobných videí
cache_clear_message_label_1 = Chcete vymazat mezipaměť ze zastaralých položek?
cache_clear_message_label_2 = Tato operace odstraní všechny položky mezipaměti, které odkazují na neplatné soubory.
cache_clear_message_label_3 = Toto může urychlit malé načítání/ukládání do mezipaměti.
cache_clear_message_label_4 = VAROVÁNÍ: Operace odstraní všechna data v mezipaměti z nezapojených externích disků, takže hash bude nutné znovu vygenerovat.
cache_clear_message_label_1 = Chcete vymazat mezipaměť zastaralých položek?
cache_clear_message_label_2 = Tato operace odstraní všechny položky mezipaměti, které ukazují na neplatné soubory.
cache_clear_message_label_3 = To může mírně urychlit načítání/ukládání do mezipaměti.
cache_clear_message_label_4 = VAROVÁNÍ: Operace odstraní všechna data v mezipaměti z nezapojených externích disků. Každá hash bude muset být obnovena.
# Show preview
preview_temporary_file = Nepodařilo se otevřít dočasný obrázek souboru { $name }, důvod { $reason }.
preview_0_size = Nelze vytvořit náhled obrázku { $name } s šířkou nebo výškou 0.
preview_temporary_image_save = Dočasný obrázek se nepodařilo uložit do { $name }, důvod { $reason }.
preview_temporary_image_remove = Nepodařilo se odstranit dočasný obrázek souboru { $name }, důvod { $reason }.
preview_failed_to_create_cache_dir = Nepodařilo se vytvořit dir { $name } potřebný náhled obrázku, důvod { $reason }.
preview_image_resize_failure = Nepodařilo se změnit velikost obrázku { $name }.
preview_image_opening_failure = Nepodařilo se otevřít obrázek { $name }, důvod { $reason }
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = Skupina { $current_group }/{ $all_groups } ({ $images_in_group } obrázků)
compare_move_left_button = L

@ -1,5 +1,5 @@
# Window titles
window_settings_title = Optionen
window_settings_title = Einstellungen
window_main_title = Czkawka (Schluckauf)
window_progress_title = Scannen
window_compare_images = Bilder vergleichen
@ -9,56 +9,92 @@ general_close_button = Schließen
# Main window
music_title_checkbox = Titel
music_artist_checkbox = Künstler
music_album_title_checkbox = Albumtitel
music_album_artist_checkbox = Album-Interpret
music_year_checkbox = Jahr
music_bitrate_checkbox = Bitrate
music_genre_checkbox = Genre
music_length_checkbox = Dauer
music_comparison_checkbox = Ungefährer Vergleich
music_checking_by_tags = Tags
music_checking_by_content = Inhalt
same_music_seconds_label = Minimale Dauer des Fragments, in Sekunden
same_music_similarity_label = Maximaler Unterschied
same_music_tooltip =
Die Suche nach ähnlichen Musikdateien nach dem Inhalt kann über die Einstellung konfiguriert werden:
- Die minimale Fragmentzeit, nach der Musikdateien als ähnlich identifiziert werden können
- Der maximale Unterschied zwischen zwei getesteten Fragmenten
Der Schlüssel zu guten Ergebnissen ist die Suche nach sinnvollen Kombinationen dieser Parameter. für bereitgestellt.
Wenn Sie die minimale Zeit auf 5 Sekunden und den maximalen Unterschied auf 1,0 setzen, werden fast identische Fragmente in den Dateien gesucht.
Eine Zeit von 20 Sekunden und ein maximaler Unterschied von 6.0 hingegen funktioniert gut um Remix/Live-Versionen zu finden.
Standardmäßig wird jede Musikdatei miteinander verglichen, und dies kann viel Zeit in Anspruch nehmen, wenn viele Dateien getestet werden so ist es in der Regel besser, Referenzordner zu verwenden und festzulegen, welche Dateien miteinander verglichen werden sollen (mit gleicher Dateigröße Der Vergleich von Fingerabdrücken wird mindestens 4x schneller als ohne Referenzordner sein).
music_comparison_checkbox_tooltip =
Es sucht nach ähnlichen Musikdateien mit Hilfe von AI, die Klammern aus einer Phrase entfernen, z. wenn diese Option aktiviert ist, die fraglichen Dateien werden als Duplikate betrachtet:
Mit Hilfe von einer KI, die maschinelles Lernen nutzt, um Klammern aus Sätzen zu entfernen, wird nach ähnlichen Musikdateien gesucht. Wenn die Option aktiviert ist, werden die folgenden Dateien zum Beispiel als Duplikate betrachtet:
Świędziżłób --- Świędziżłób (Remix Lato 2021)
duplicate_case_sensitive_name = Gross-/Kleinschreibung beachten
duplicate_case_sensitive_name_tooltip =
Wenn aktiviert, gruppieren Sie nur Datensätze, wenn sie genau denselben Namen haben, z. żoŁD <-> Żołd
Deaktivieren dieser Option gruppiert Namen ohne zu überprüfen, ob jeder Buchstabe die gleiche Größe wie żoŁD <-> Żołd
duplicate_mode_size_name_combo_box = Größe und Name
duplicate_mode_name_combo_box = Name
duplicate_mode_size_combo_box = Größe
duplicate_mode_hash_combo_box = Hash
duplicate_hash_type_tooltip =
Czkawka bietet 3 Arten von Hashes an, die verwendet werden können:
Blake3 - kryptographische Hashfunktion. Er wird als Standard-Hash-Algorithmus verwendet, da er sehr schnell ist.
Blake3 - kryptographische Hashfunktion. Wegen ihrer Geschwindikeit wird Sie als Standard-Hash-Algorithmus verwendet.
CRC32 - einfache Hash-Funktion. Es sollte schneller sein als Blake3, aber wahrscheinlich sehr selten einige Kollisionen.
CRC32 - einfache Hash-Funktion. Sie sollte schneller sein als Blake3, könnte aber in seltenen Fällen Kollisionen haben.
XXH3 - sehr ähnlich bei Leistung und Hashqualität wie Blake3, so dass solche Modi leicht verwendet werden können.
XXH3 - bei Geschwindikeit und Hashqualität vergleichbar mit Blake3 (aber nicht kryptographisch). Beide Modi können somit leicht miteinander ausgetauscht werden.
duplicate_check_method_tooltip =
Zurzeit bietet Czkawka drei Arten von Methoden an, um Duplikate zu finden:
Derzeit bietet Czkawka drei Methoden an, um Duplikate zu finden:
Name - Findet Dateien mit gleichem Namen.
Größe - Findet Dateien mit gleicher Größe.
Hash - Findet Dateien mit dem gleichen Inhalt. Dieser Modus hasht die Datei und vergleicht diese Hashes später, um Duplikate zu finden. Dieser Modus ist der sicherste Weg, um Duplikate zu finden. Das Tool verwendet den Cache, daher sollten die zweiten und weiteren Scans der gleichen Daten viel schneller sein als zuerst.
Hash - Findet Dateien mit dem gleichen Inhalt. Dieser Modus hasht die Datei und vergleicht diese Hashes, um Duplikate zu finden. Dieser Modus ist der sicherste Weg, um Duplikate zu finden. Das Tool verwendet einen Cache, daher sollten weiteren Scans der gleichen Dateien viel schneller sein als der erste.
image_hash_size_tooltip =
Czkawka bietet eine veränderte Größe des generierten Hashs für jedes Bild. Größere Hash-Ursache erlaubt es, Bilder mit geringerer Anzahl von Unterschieden zwischen den Bildern zu finden, aber auch ist es etwas langsamer zu verwenden.
Jedes geprüfte Bild erzeugt einen speziellen Hash, der miteinander verglichen werden kann und ein kleiner Unterschied zwischen ihnen bedeutet, dass diese Bilder ähnlich sind.
8 Hashgröße ist sehr gut, um Bilder zu finden, die dem Original nur ein wenig ähneln. Bei einer größeren Anzahl von Bildern (>1000), wird dies eine große Anzahl falscher Positives, also empfehle ich in diesem Fall eine größere Hashgröße.
16 ist die standardmäßige Hashgröße, die einen guten Kompromiss zwischen dem Finden von kleinen ähnlichen Bildern und einer geringen Anzahl von Hash-Kollisionen darstellt.
32 und 64 Hashes finden nur sehr ähnliche Bilder, sollten aber fast keine falschen positiven Bilder haben (vielleicht mit Ausnahme einiger Bilder mit Alphakanal).
image_resize_filter_tooltip =
Um Hash des Bildes zu berechnen, muss die Bibliothek zuerst die Größe des Hashs verändern.
Abhängig vom gewählten Algorithmus sieht das resultierende Bild, das zur Hashberechnung verwendet wird, ein wenig anders aus.
Der schnellste zu verwendende Algorithmus, aber auch der, der die schlechtesten Ergebnisse liefert, ist in der Nähe. Sie ist standardmäßig aktiviert, da sie mit 16x16 Hash-Größe nicht wirklich sichtbar ist.
Der Standardwert für den Hash ist 8 Bytes, wodurch sehr ähnliche und unterschiedliche Bilder gefunden werden können. 16 und 32 Hashes sollten nur für nahezu identische Bilder verwendet werden. 64 Bytes Hash sollte nicht verwendet werden, außer wenn wirklich kleine Unterschiede benötigt werden, um zu finden
image_resize_filter_tooltip = Um den Hash des Bildes zu berechnen, muss die Bibliothek zuerst die Größe des Bildes verändern. Abhängig vom gewählten Algorithmus sieht das Ergebnis wenig anders aus. Der schnellste Algotithmus zu verwenden, aber auch einer, der die schlechtesten Ergebnisse gibt ist in der Nähe.
image_hash_alg_tooltip = Benutzer können einen aus vielen Algorithmen zur Berechnung des Hashs auswählen. Jeder hat sowohl starke als auch schwächere Punkte und wird manchmal bessere und manchmal schlechtere Ergebnisse für verschiedene Bilder liefern um die beste zu wählen, ist eine manuelle Prüfung erforderlich.
main_notebook_image_fast_compare = Schneller Vergleich
main_notebook_image_fast_compare_tooltip =
Beschleunige die Suche und den Vergleich von Hashes.
Mit 8x8 Hashgröße wird empfohlen, einen anderen Algorithmus als nahe zu verwenden, um bessere Gruppen von Bildern zu haben.
image_hash_alg_tooltip =
Benutzer können aus einem von vielen Algorithmen zur Berechnung des Hashs wählen.
Im Gegensatz zum normalen Modus, in dem jeder Hash x-mal miteinander verglichen wird wobei x die Ähnlichkeit ist, die der Benutzer wählt, in diesem Modus wird immer nur ein Vergleich verwendet.
Jeder hat sowohl starke als auch schwächere Punkte und wird manchmal bessere und manchmal schlechtere Ergebnisse für verschiedene Bilder liefern.
Diese Option wird empfohlen, wenn >10000 Bilder mit nicht 0 (Very High) Ähnlichkeit verglichen werden.
main_notebook_duplicates = Dateien Duplizieren
Um also den besten für Sie zu ermitteln, ist eine manuelle Prüfung erforderlich.
big_files_mode_combobox_tooltip = Erlaubt die Suche nach kleinsten/größten Dateien
big_files_mode_label = Überprüfte Dateien
big_files_mode_smallest_combo_box = Die kleinsten
big_files_mode_biggest_combo_box = Die größten
main_notebook_duplicates = Gleiche Dateien
main_notebook_empty_directories = Leere Verzeichnisse
main_notebook_big_files = Große Dateien
main_notebook_empty_files = Leere Dateien
main_notebook_temporary = Temporäre Dateien
main_notebook_similar_images = Ähnliche Bilder
main_notebook_similar_videos = Ähnliche Videos
main_notebook_same_music = Musik Duplikate
main_notebook_same_music = Gleiche Musik
main_notebook_symlinks = Ungültige Symlinks
main_notebook_broken_files = Defekte Dateien
main_notebook_bad_extensions = Falsche Erweiterungen
main_tree_view_column_file_name = Dateiname
main_tree_view_column_folder_name = Ordnername
main_tree_view_column_path = Pfad
@ -69,12 +105,15 @@ main_tree_view_column_dimensions = Abmessungen
main_tree_view_column_title = Titel
main_tree_view_column_artist = Künstler
main_tree_view_column_year = Jahr
main_tree_view_column_album_title = Albumtitel
main_tree_view_column_album_artist = Album-Interpret
main_tree_view_column_bitrate = Bitrate
main_tree_view_column_length = Dauer
main_tree_view_column_genre = Genre
main_tree_view_column_symlink_file_name = Symlink Dateiname
main_tree_view_column_symlink_folder = Symlnik Ordner
main_tree_view_column_symlink_folder = Symlink-Ordner
main_tree_view_column_destination_path = Zielpfad
main_tree_view_column_type_of_error = Fehlertyp
main_tree_view_column_current_extension = Aktuelle Erweiterung
main_tree_view_column_proper_extensions = Richtige Erweiterung
main_label_check_method = Prüfmethode
main_label_hash_type = Hash Typ
main_label_hash_size = Hash Größe
@ -84,11 +123,15 @@ main_label_max_size = Max
main_label_shown_files = Anzahl der angezeigten Dateien
main_label_resize_algorithm = Algorithmus skalieren
main_label_similarity = Ähnlichkeit{ " " }
main_check_box_broken_files_audio = Ton
main_check_box_broken_files_pdf = Pdf
main_check_box_broken_files_archive = Archiv
main_check_box_broken_files_image = Bild
check_button_general_same_size = Gleiche Größe ignorieren
check_button_general_same_size_tooltip = Ignoriere von Ergebnissen, Dateien mit identischer Größe - normalerweise sind dies 1:1 Duplikate
check_button_general_same_size_tooltip = Ignoriere Dateien mit identischer Größe in den Ergebnissen - in der Regel sind es 1:1 Duplikate
main_label_size_bytes_tooltip = Größe der Dateien, die beim Scannen verwendet werden
# Upper window
upper_tree_view_included_folder_column_title = Zu suchende Ordner
upper_tree_view_included_folder_column_title = Zu durchsuchende Ordner
upper_tree_view_included_reference_column_title = Referenzordner
upper_recursive_button = Rekursiv
upper_recursive_button_tooltip = Falls ausgewählt, suchen Sie auch nach Dateien, die nicht direkt unter den ausgewählten Ordnern platziert werden.
@ -98,42 +141,57 @@ upper_remove_included_button = Entfernen
upper_manual_add_excluded_button = Manuell hinzufügen
upper_add_excluded_button = Neu
upper_remove_excluded_button = Entfernen
upper_manual_add_included_button_tooltip = Ermöglicht das Hinzufügen von Verzeichnisnamen zur Suche per Hand.
upper_manual_add_included_button_tooltip =
Verzeichnisname zur Suche per Hand hinzufügen.
Um mehrere Pfade gleichzeitig hinzuzufügen, trennen Sie sie durch ;
/home/roman;/home/rozkaz fügt zwei Verzeichnisse /home/roman und /home/rozkaz hinzu
upper_add_included_button_tooltip = Neues Verzeichnis zur Suche hinzufügen.
upper_remove_included_button_tooltip = Verzeichnis von der Suche löschen.
upper_manual_add_excluded_button_tooltip = Erlaubt das Hinzufügen ausgeschlossener Verzeichnisnamen von Hand.
upper_manual_add_excluded_button_tooltip =
Ausgeschlossenen Verzeichnisnamen per Hand hinzufügen.
Um mehrere Pfade gleichzeitig hinzuzufügen, trennen Sie sie durch ;
/home/roman;/home/krokiet wird zwei Verzeichnisse /home/roman und /home/keokiet hinzufügen
upper_add_excluded_button_tooltip = Verzeichnis hinzufügen, das bei der Suche ausgeschlossen werden soll.
upper_remove_excluded_button_tooltip = Verzeichnis von ausgeschlossen löschen.
upper_notebook_items_configuration = Artikelkonfiguration
upper_remove_excluded_button_tooltip = Ausgeschlossene Verzeichnisse löschen.
upper_notebook_items_configuration = Suchbedingungen
upper_notebook_excluded_directories = Ausgeschlossene Verzeichnisse
upper_notebook_included_directories = Inklusive Verzeichnisse
upper_notebook_included_directories = Einbezogene Verzeichnisse
upper_allowed_extensions_tooltip =
Erlaubte Erweiterungen müssen durch Kommas getrennt werden (standardmäßig sind alle verfügbar).
Makros IMAGE, VIDEO, MUSIC, TEXT, die mehrere Erweiterungen gleichzeitig hinzufügen, sind ebenfalls verfügbar.
Folgende Makros, die mehrere Erweiterungen gleichzeitig hinzufügen, sind ebenfalls verfügbar: IMAGE, VIDEO, MUSIC, TEXT.
Nutzungsbeispiel ".exe, IMAGE, VIDEO, .rar, 7z" - bedeutet, dass Bilder (jpg, png ...), Videodateien (avi, mp4 ...), exe, rar und 7z gescannt werden.
upper_excluded_extensions_tooltip =
Liste der deaktivierten Dateien, die beim Scannen ignoriert werden.
Beispiel ".exe, IMAGE, VIDEO, .rar, 7z" - das bedeutet, dass image(jpg, png ...), Videodateien (avi, mp4 ...), exe, rar und 7z werden gescannt.
Wenn sowohl erlaubte als auch deaktivierte Erweiterungen verwendet werden, hat diese eine höhere Priorität, so dass die Datei nicht ausgewählt wird.
upper_excluded_items_tooltip =
Ausgeschlossene Elemente müssen * Platzhalter enthalten und durch Kommata getrennt werden.
Dies ist langsamer als ausgeschlossene Verzeichnisse, also vorsichtig verwenden.
Ausgeschlossene Elemente müssen * als Platzhalter enthalten und durch Kommata getrennt werden.
Dies ist langsamer als Verzeichnisse auszuschließen, daher mit Vorsicht verwenden.
upper_excluded_items = Ausgeschlossene Elemente:
upper_allowed_extensions = Erlaubte Erweiterungen:
upper_excluded_extensions = Deaktivierte Erweiterungen:
# Popovers
popover_select_all = Alles auswählen
popover_unselect_all = Alles abwählen
popover_unselect_all = Gesamte Auswahl aufheben
popover_reverse = Auswahl umkehren
popover_select_all_except_oldest = Alle außer Ältesten auswählen
popover_select_all_except_newest = Alle außer neueste auswählen
popover_select_one_oldest = Wähle einen Ältesten
popover_select_one_newest = Wählen Sie eine neueste
popover_select_custom = Eigene auswählen
popover_unselect_custom = Eigene Abwählen
popover_select_all_images_except_biggest = Alle außer Größten auswählen
popover_select_all_images_except_smallest = Alle außer kleinsten auswählen
popover_select_all_except_oldest = Alle außer Ältester auswählen
popover_select_all_except_newest = Alle außer Neuester auswählen
popover_select_one_oldest = Älteste auswählen
popover_select_one_newest = Neueste auswählen
popover_select_custom = Individuell auswählen
popover_unselect_custom = Individuell Auswahl aufheben
popover_select_all_images_except_biggest = Alle außer Größter auswählen
popover_select_all_images_except_smallest = Alle außer Kleinster auswählen
popover_custom_path_check_button_entry_tooltip =
Ermöglicht die Auswahl von Datensätzen nach dem Pfad.
Ermöglicht die Auswahl von Datensätzen nach Dateipfad.
Beispielverwendung:
Beispielnutzung:
/home/pimpek/rzecz.txt kann mit /home/pim* gefunden werden
popover_custom_name_check_button_entry_tooltip =
Ermöglicht die Auswahl von Datensätzen nach Dateinamen.
@ -141,26 +199,36 @@ popover_custom_name_check_button_entry_tooltip =
Beispielnutzung:
/usr/ping/pong.txt kann mit *ong* gefunden werden
popover_custom_regex_check_button_entry_tooltip =
Ermöglicht die Auswahl von Datensätzen von angegebenen Regex.
Ermöglicht die Auswahl von Datensätzen nach spezifizierter Regex.
Mit diesem Modus ist gesuchter Text Pfad mit Namen.
Mit diesem Modus ist der gesuchte Text der Pfad einschließlich Dateinamen.
Beispielnutzung:
/usr/bin/ziemniak. xt kann mit /ziem gefunden ziem[a-z]+
/usr/bin/ziemniak.txt kann mit /ziem[a-z]+ gefunden werden.
Dies verwendet die Standard-Implementierung von Regex in Rust. Mehr dazu unter https://docs.rs/regex.
popover_custom_case_sensitive_check_button_tooltip =
Aktiviert die Erkennung von Groß- und Kleinschreibungen.
Diese verwenden Standard-Rust regex Implementierung, so dass du mehr darüber unter https://docs.rs/regex erfahren kannst.
Wenn /home/* deaktiviert ist, findet /hoMe/roman und /home/roman.
popover_custom_not_all_check_button_tooltip =
Verhindert die Auswahl aller Datensätze in der Gruppe.
Verhindert die Auswahl aller Elemente in der Gruppe.
Dies ist standardmäßig aktiviert, da der Benutzer in den meisten Situationen nicht sowohl Originaldateien als auch Dateien duplizieren möchte aber wollen mindestens eine Datei hinterlassen.
Dies ist standardmäßig aktiviert, da der Benutzer in den meisten Situationen nicht sowohl Originaldateien als auch Duplikate löschen möchte, sondern mindestens eine der Dateien behalten will.
Warnung: Diese Einstellung funktioniert nicht, wenn bereits alle Ergebnisse in der Gruppe manuell ausgewählt wurden.
popover_custom_regex_path_label = Pfad
popover_custom_regex_name_label = Name
popover_custom_regex_regex_label = Regex Pfad + Name
popover_custom_case_sensitive_check_button = Groß-/Kleinschreibung beachten
popover_custom_all_in_group_label = Nicht alle Datensätze in der Gruppe auswählen
popover_custom_mode_unselect = Eigene Abwählen
popover_custom_mode_select = Eigene auswählen
popover_sort_file_name = Dateiname
popover_sort_folder_name = Verzeichnisname
popover_sort_full_name = Vollständiger Name
popover_sort_size = Größe
popover_sort_selection = Auswahl
popover_invalid_regex = Regex ist ungültig
popover_valid_regex = Regex ist gültig
# Bottom buttons
@ -171,31 +239,39 @@ bottom_save_button = Speichern
bottom_symlink_button = Symlink
bottom_hardlink_button = Hardlink
bottom_move_button = Bewegen
bottom_search_button_tooltip = Suche nach Dateien/Ordnern starten.
bottom_select_button_tooltip = Wählt Datensätze aus. Nur ausgewählte Dateien/Ordner können später verarbeitet werden.
bottom_sort_button = Sortierung
bottom_search_button_tooltip = Suche starten
bottom_select_button_tooltip = Datensätze auswählen. Nur ausgewählte Dateien/Ordner können später verarbeitet werden.
bottom_delete_button_tooltip = Ausgewählte Dateien/Ordner löschen.
bottom_save_button_tooltip = Daten über die Suche in Datei speichern
bottom_symlink_button_tooltip =
Erstellt symbolische Links.
Funktioniert nur, wenn mindestens 2 Ergebnisse in der Gruppe ausgewählt sind.
Der erste ist unverändert und der zweite und spätere ist mit dem ersten symbolisch verknüpft.
Erstelle symbolische Links.
Funktioniert nur, wenn mindestens zwei Ergebnisse einer Gruppe ausgewählt sind.
Das Erste bleibt dabei unverändert, und das Zweite und alle Weiteren werden zu symbolischen Links auf das Erste umgewandelt.
bottom_hardlink_button_tooltip =
Erstellt Hardlinks.
Funktioniert nur, wenn mindestens 2 Ergebnisse in der Gruppe ausgewählt sind.
Der erste ist unverändert und der zweite und spätere ist mit dem ersten fest verknüpft.
Erstelle Hardlinks.
Funktioniert nur, wenn mindestens zwei Ergebnisse einer Gruppe ausgewählt sind.
Das Erste bleibt dabei unverändert, und das Zweite und alle Weiteren werden zu Hardlinks auf das Erste umgewandelt.
bottom_hardlink_button_not_available_tooltip =
Erstellen von Hardlinks.
Button ist deaktiviert, da Hardlinks nicht erstellt werden können.
Hardlinks funktionieren nur mit Administratorrechten unter Windows, also stellen Sie sicher, dass Sie die App als Administrator ausführen.
Wenn die App bereits mit solchen Rechten arbeitet, überprüfen Sie auf Github auf ähnliche Probleme.
bottom_move_button_tooltip =
Verschiebt Dateien in den ausgewählten Ordner.
Kopiert alle Dateien in den Ordner, ohne den Verzeichnisbaum zu erhalten.
Beim Versuch, zwei Dateien mit identischem Namen in einen Ordner zu verschieben, schlägt die Sekunde fehlund zeigt einen Fehler an.
bottom_show_errors_tooltip = Ein-/Ausblenden des unteren Fehlerfensters.
Beim Versuch, zwei Dateien mit identischem Namen in einen Ordner zu verschieben, schlägt das Kopieren der Zweiten fehl und zeigt einen Fehler an.
bottom_sort_button_tooltip = Sortiert Dateien/Ordner nach der gewählten Methode.
bottom_show_errors_tooltip = Ein-/Ausblenden des unteren Textfeldes.
bottom_show_upper_notebook_tooltip = Ein-/Ausblenden des oberen Notizbuch-Panels.
# Progress Window
progress_stop_button = Stoppen
progress_stop_additional_message = Stopp angefordert
# About Window
about_repository_button_tooltip = Link zur Repository-Seite mit Quellcode.
about_donation_button_tooltip = Link zur Spendenseite.
about_instruction_button_tooltip = Link zur Anweisungsseite.
about_translation_button_tooltip = Link zur Crowdin-Seite mit App-Übersetzungen. Offiziell werden Polnisch und Englisch unterstützt, aber jede Hilfe mit anderen Sprachen wird geschätzt.
about_translation_button_tooltip = Link zur Crowdin-Seite mit App-Übersetzungen. Offiziell werden Polnisch und Englisch unterstützt.
about_repository_button = Projektarchiv
about_donation_button = Spende
about_instruction_button = Anleitung
@ -209,36 +285,44 @@ header_about_button_tooltip = Öffnet den Dialog mit Informationen über die App
## General
settings_save_at_exit_button_tooltip = Speichert die Konfiguration in Datei beim Schließen der App.
settings_number_of_threads = Anzahl der verwendeten Threads
settings_number_of_threads_tooltip = Anzahl der verwendeten Threads, 0 bedeutet, dass alle verfügbaren Threads verwendet werden.
settings_label_restart = Sie müssen die App neu starten, um die Einstellungen anzuwenden!
settings_ignore_other_filesystems = Andere Dateisysteme ignorieren (nur Linux)
settings_ignore_other_filesystems_tooltip =
ignoriert Dateien, die nicht im selben Dateisystem sind wie durchsuchte Verzeichnisse.
Funktioniert genauso wie die -xdev Option beim Finden des Befehls unter Linux
settings_save_at_exit_button_tooltip = Speichert die Konfiguration in einer Datei, wenn das Programm geschlossen wird.
settings_load_at_start_button_tooltip =
Laden bei der Start-Konfiguration von Datei.
Wenn diese Option nicht ausgewählt wird, werden die Standardeinstellungen geladen.
settings_confirm_deletion_button_tooltip = Zeigt den Bestätigungsdialog an, wenn Sie auf den Löschen-Knopf klicken.
settings_confirm_link_button_tooltip = Zeigt den Bestätigungsdialog an, wenn Sie auf den Knopf Hard/Symlink klicken.
settings_confirm_group_deletion_button_tooltip = Zeigt den Dialog an, wenn versucht wird, alle Datensätze aus der Gruppe zu entfernen.
settings_show_text_view_button_tooltip = Zeigt die Fehleranzeige unten an.
settings_use_cache_button_tooltip = Option, bei der die Cache-Funktion nicht genutzt werden kann.
settings_save_also_as_json_button_tooltip = Speichere Cache im menschlichen JSON-Format. Es ist möglich, den Inhalt zu ändern. Cache aus dieser Datei wird automatisch von der App gelesen, wenn der Binärformat-Cache (mit Bin Erweiterung) fehlt.
settings_use_trash_button_tooltip = Wenn aktiviert, verschiebt es Dateien in den Papierkorb.
settings_language_label_tooltip = Erlaubt es, die Sprache der Schnittstelle von der verfügbaren zu wählen.
settings_save_at_exit_button = Konfiguration beim Beenden speichern
settings_load_at_start_button = Konfiguration beim Start laden
Konfiguration aus der Datei laden, wenn App geöffnet wird.
Falls das nicht aktiviert ist, werden die Standardeinstellungen verwendet.
settings_confirm_deletion_button_tooltip = Bestätigungsdialog anzeigen, wenn der Löschen-Knopf gedrückt wird.
settings_confirm_link_button_tooltip = Bestätigungsdialog anzeigen, wenn auf den Knopf Hard/Symlink gedrückt wird.
settings_confirm_group_deletion_button_tooltip = Warndialog anzeigen, wenn versucht wird, alle Datensätze aus einer Gruppe zu löschen.
settings_show_text_view_button_tooltip = Textfenster am unteren Rand der Benutzeroberfläche anzeigen.
settings_use_cache_button_tooltip = Datei-Cache verwenden.
settings_save_also_as_json_button_tooltip = Cache im (menschlich lesbaren) JSON-Format speichern. Es ist möglich, den Inhalt zu ändern. Der Cache wird automatisch aus dieser Datei von der App gelesen, wenn der Binärformat-Cache (mit .bin Erweiterung) fehlt.
settings_use_trash_button_tooltip = Wenn aktiviert, verschiebt Dateien in den Papierkorb, anstatt sie permanent zu löschen.
settings_language_label_tooltip = Sprache der Benutzeroberfläche.
settings_save_at_exit_button = Speichert die Konfiguration beim Schließen der App
settings_load_at_start_button = Konfiguration beim Öffnen der App laden
settings_confirm_deletion_button = Bestätigungsdialog beim Löschen von Dateien anzeigen
settings_confirm_link_button = Bestätigungsdialog anzeigen, wenn Hard/Symlinks irgendwelche Dateien
settings_confirm_group_deletion_button = Bestätigungsdialog beim Löschen aller Dateien in der Gruppe anzeigen
settings_show_text_view_button = Unteren Textbereich anzeigen
settings_use_cache_button = Cache verwenden
settings_save_also_as_json_button = Cache auch in JSON-Datei speichern
settings_save_also_as_json_button = Cache auch als JSON-Datei speichern
settings_use_trash_button = Gelöschte Dateien in den Papierkorb verschieben
settings_language_label = Sprache
settings_multiple_delete_outdated_cache_checkbutton = Veraltete Cache-Einträge automatisch löschen
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
Ermöglicht das Löschen veralteter Cache-Ergebnisse, die auf nicht existierende Dateien verweisen.
Wenn aktiviert, vergewissern Sie sich, dass beim Laden von Datensätzen alle auf gültige Dateien verweisen und kaputte Dateien ignorieren.
Wenn aktiviert, stellt das Programm sicher, dass beim Laden von Datensätzen alle auf gültige Dateien verweisen (kaputte Verweise werden ignorieren).
Deaktivieren dieser Option, wird helfen, Dateien auf externen Laufwerken zu scannen, so dass Cache-Einträge über diese nicht beim nächsten Scan gelöscht werden.
Deaktivieren dieser Option wird helfen, Dateien auf externen Laufwerken zu scannen, so dass Cache-Einträge über diese nicht beim nächsten Scan gelöscht werden.
Bei hunderttausenden Datensätzen im Cache wird empfohlen, diese Option zu aktivieren, um das Laden und Speichern des Caches am Anfang und am Ende des Scans zu beschleunigen.
settings_notebook_general = Allgemein
@ -248,39 +332,39 @@ settings_notebook_videos = Ähnliches Video
## Multiple - settings used in multiple tabs
settings_multiple_image_preview_checkbutton_tooltip = Zeigt eine Vorschau auf der rechten Seite bei der Auswahl der Bilddatei.
settings_multiple_image_preview_checkbutton_tooltip = Zeigt eine Vorschau auf der rechten Seite (bei der Auswahl einer Bilddatei).
settings_multiple_image_preview_checkbutton = Bildvorschau anzeigen
settings_multiple_clear_cache_button_tooltip =
Leere den Cache manuell aus veralteten Einträgen.
sollte nur verwendet werden, wenn das automatische Löschen deaktiviert wurde.
settings_multiple_clear_cache_button = Entferne veraltete Ergebnisse aus dem Bildercache
Das sollte nur verwendet werden, wenn das automatische Löschen deaktiviert wurde.
settings_multiple_clear_cache_button = Entferne veraltete Ergebnisse aus dem Cache.
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
Versteckt alle Dateien außer einem, wenn sie auf dieselben Daten (Hardlink) verweisen.
Z.B. für den Fall, dass es auf der Festplatte 7 Dateien gibt, die an bestimmte Daten gebunden sind und eine andere Datei mit denselben Daten, aber unterschiedlichem inode, dann wird im Duplikat Finder nur eine eindeutige Datei und eine Datei von hardlinked sichtbar sein.
Z.B. für den Fall, dass es (auf der Festplatte) sieben Dateien gibt, die an bestimmte Daten gelinkt sind und eine weiter Datei existiert mit denselben Daten, aber mit unterschiedlichem Inode, dann wird im Duplikatsucher nur eine Datei der sieben gelinkten und die seperate Datei sichtbar sein.
settings_duplicates_minimal_size_entry_tooltip =
Erlaubt es, die minimale Dateigröße festzulegen, die zwischengespeichert wird.
Legen Sie die minimale Dateigröße fest, die zwischengespeichert wird.
Wenn Sie einen kleineren Wert wählen, werden mehr Datensätze generiert, die die Suche beschleunigen, aber das Laden und Speichern des Caches verlangsamen.
Wenn Sie einen kleineren Wert wählen, werden mehr Datensätze generiert. Dies wird die Suche beschleunigen, aber das Laden und Speichern zum Cache verlangsamen.
settings_duplicates_prehash_checkbutton_tooltip =
Aktiviert das Caching von prehash(hash-berechneter Hash aus einem kleinen Teil der Datei), was es erlaubt, vorher nicht duplizierte Ergebnisse zu werfen.
Aktiviert das Caching von Prehashes (Hash aus einem kleinen Teil der Datei), was es erlaubt, nicht duplizierte Ergebnisse schneller zu verwerfen.
Es ist standardmäßig deaktiviert, da es in einigen Situationen zu Verlangsamungen führen kann.
Es wird dringend empfohlen, es beim Scannen von Hunderttausenden oder Millionen Dateien zu verwenden, da es die Suche mehrmals beschleunigen kann.
Es wird dringend empfohlen, es beim Scannen von Hunderttausenden oder Millionen Dateien zu verwenden, da es die Suche um ein Vielfaches beschleunigen kann.
settings_duplicates_prehash_minimal_entry_tooltip = Minimale Größe des zwischengespeicherten Eintrags.
settings_duplicates_hide_hard_link_button = Verstecke harte Links (nur Linux und MacOS)
settings_duplicates_prehash_checkbutton = Vorhash-Cache verwenden
settings_duplicates_minimal_size_cache_label = Minimale Dateigröße in Bytes im Cache gespeichert
settings_duplicates_minimal_size_cache_prehash_label = Minimale Dateigröße in Bytes im Vorhash-Cache gespeichert
settings_duplicates_hide_hard_link_button = Verstecke Hardlinks (nur Linux und macOS)
settings_duplicates_prehash_checkbutton = Prehash-Cache verwenden
settings_duplicates_minimal_size_cache_label = Minimale Dateigröße (in Bytes), die im Cache gespeichert wird
settings_duplicates_minimal_size_cache_prehash_label = Minimale Dateigröße (in Bytes), die im Prehash-Cache gespeichert wird
## Saving/Loading settings
settings_saving_button_tooltip = Aktuelle Einstellungen in Datei speichern.
settings_loading_button_tooltip = Laden Sie die Einstellungen aus der Datei und ersetzen Sie die aktuelle Konfiguration mit ihnen.
settings_loading_button_tooltip = Lade die Einstellungen aus einer Datei und ersetze die aktuellen Einstellungen mit diesen.
settings_reset_button_tooltip = Aktuelle Konfiguration auf Standardeinstellung zurücksetzen.
settings_saving_button = Konfiguration speichern
settings_loading_button = Konfiguration laden
@ -289,17 +373,17 @@ settings_reset_button = Konfiguration zurücksetzen
## Opening cache/config folders
settings_folder_cache_open_tooltip =
Öffnet den Ordner, in dem txt-Dateien mit Cache gespeichert werden.
Öffnet den Ordner, in dem txt-Dateien mit Cache-Daten gespeichert sind.
Ändern kann dazu führen, dass ungültige Ergebnisse angezeigt werden, aber auch Modifizieren e.. Der Pfad kann Zeit sparen, wenn große Dateigröße an verschiedene Orte verschoben werden.
Änderungen an den Cache-Dateien kann dazu führen, dass ungültige Ergebnisse angezeigt werden. Aber Modifikation des Pfades kann Zeit sparen, wenn eine große Anzahl von Dateien verschoben werden.
Sie können diese Dateien zwischen den Computern kopieren, um Zeit beim erneuten Scannen von Dateien zu sparen (natürlich wenn diese ähnliche Verzeichnisstruktur haben).
Sie können diese Dateien zwischen Computern kopieren, um Zeit beim erneuten Scannen von Dateien zu sparen (natürlich nur, wenn diese eine ähnliche Verzeichnisstruktur haben).
Bei Problemen mit dem Cache können diese Dateien entfernt werden, so dass die App sie automatisch neu generiert.
Bei Problemen mit dem Cache können diese Dateien entfernt werden, sodass die App sie automatisch neu generiert.
settings_folder_settings_open_tooltip =
Öffnet den Ordner, in dem Czkawka Konfiguration gespeichert wird.
Öffnet den Ordner, in dem die Czkawka Konfiguration gespeichert ist.
Ändern Sie ihn von der Hand, kann dazu führen, dass Ihr Workflow nicht mehr funktioniert.
WARNUNG: Manuelle Änderung der Konfiguration kann Ihren Workflow stören.
settings_folder_cache_open = Cache-Ordner öffnen
settings_folder_settings_open = Einstellungsordner öffnen
# Compute results
@ -315,36 +399,47 @@ compute_found_videos = { $number_files } ähnliche Videos in { $number_groups }
compute_found_music = { $number_files } ähnliche Musikdateien in { $number_groups } Gruppen gefunden
compute_found_invalid_symlinks = { $number_files } ungültige Symlinks gefunden
compute_found_broken_files = { $number_files } fehlerhafte Dateien gefunden
compute_found_bad_extensions = { $number_files } Dateien mit ungültigen Endungen gefunden
# Progress window
progress_scanning_general_file = Scanne { $file_number } Datei
progress_scanning_general_file = Scanne { $file_number } Dateien
progress_scanning_extension_of_files = Überprüfe Erweiterung von { $file_checked }/{ $all_files } Datei
progress_scanning_broken_files = Überprüfe { $file_checked }/{ $all_files } Datei
progress_scanning_video = Hashing von { $file_checked }/{ $all_files } Video
progress_scanning_image = Hashing von { $file_checked }/{ $all_files } Bild
progress_scanning_video = Hashwerte für Videos berechnet: { $file_checked }/{ $all_files }
progress_scanning_image = Hashwerte für Bilder berechnet:{ $file_checked }/{ $all_files }
progress_comparing_image_hashes = Vergleicht { $file_checked }/{ $all_files } Bild-Hash
progress_scanning_music_tags_end = Vergleicht Tags von { $file_checked }/{ $all_files } Musikdatei
progress_scanning_music_tags = Lese Tags von { $file_checked }/{ $all_files } Musikdatei
progress_scanning_music_content_end = Vergleiche Fingerabdruck von { $file_checked }/{ $all_files } Musikdatei
progress_scanning_music_content = Berechne Fingerabdruck von { $file_checked }/{ $all_files } Musikdatei
progress_scanning_empty_folders = Scanne { $folder_number } Ordner
progress_scanning_size = Scanne Größe der { $file_number } Datei
progress_scanning_name = Scanne Name der { $file_number } Datei
progress_analyzed_partial_hash = Analysierter Teilhash von { $file_checked }/{ $all_files } Dateien
progress_analyzed_full_hash = Analysiert voller Hash von { $file_checked }/{ $all_files } Dateien
progress_current_stage = Aktuelle Stufe:{ " " }
progress_all_stages = Alle Stufen:{ " " }
progress_scanning_size = Scanne Größe der { $file_number } Dateien
progress_scanning_size_name = Scanne Namen und Größe der { $file_number } Dateien
progress_scanning_name = Scanne Name der { $file_number } Dateien
progress_analyzed_partial_hash = Teilhash von { $file_checked }/{ $all_files } Dateien analysiert
progress_analyzed_full_hash = Vollen Hash von { $file_checked } von { $all_files } Dateien analysiert
progress_prehash_cache_loading = Lade Vorhash-Cache
progress_prehash_cache_saving = Speichere Vorhash-Cache
progress_hash_cache_loading = Hash-Cache wird geladen
progress_hash_cache_saving = Speichere Hash-Cache
progress_cache_loading = Cache wird geladen
progress_cache_saving = Cache speichern
progress_current_stage = Aktueller Prozess:{ " " }
progress_all_stages = Gesamtprozess:{ " " }
# Saving loading
saving_loading_saving_success = Konfiguration in Datei { $name } gespeichert.
saving_loading_saving_failure = Konfigurationsdaten konnten nicht in Datei { $name } gespeichert werden.
saving_loading_reset_configuration = Aktuelle Konfiguration wurde gelöscht.
saving_loading_loading_success = Richtig geladene App-Konfiguration.
saving_loading_invalid_string = Für Schlüssel "{ $key }" fand ungültiges Ergebnis - "{ $result }" das keine Zeichenkette ist.
saving_loading_invalid_int = Für Schlüssel "{ $key }" fand ungültiges Ergebnis - "{ $result }" das keine ganze Zahl ist.
saving_loading_invalid_bool = Für Schlüssel "{ $key }" fand ungültiges Ergebnis - "{ $result }" das kein Bool.
saving_loading_decode_problem_bool = Fehler beim Dekodieren des Bools von Schlüssel "{ $key }" gefunden "{ $result }" aber erlaubte Werte sind 0, 1, true oder false.
saving_loading_invalid_string = Für Schlüssel "{ $key }" ungültiges Ergebnis gefunden: "{ $result }", welches keine Zeichenkette ist.
saving_loading_invalid_int = Für Schlüssel "{ $key }" ungültiges Ergebnis gefunden: "{ $result }", welches keine ganze Zahl ist.
saving_loading_invalid_bool = Für Schlüssel "{ $key }" ungültiges Ergebnis gefunden: "{ $result }", welches kein Boolean ist.
saving_loading_decode_problem_bool = Fehler beim Dekodieren von Schlüssel "{ $key }" gefunden: "{ $result }". Erlaubte Werte sind: 0, 1, true oder false.
saving_loading_saving_same_keys = Versucht die Einstellung mit doppelter Taste "{ $key } " zu speichern.
saving_loading_failed_to_get_home_directory = Home-Verzeichnis konnte nicht zum Öffnen und Speichern der Konfigurationsdatei geladen werden.
saving_loading_folder_config_instead_file = Konfigurationsdatei im Pfad "{ $path }" kann nicht erstellt oder geöffnet werden, da bereits ein Ordner vorhanden ist.
saving_loading_failed_to_create_configuration_folder = Konfigurationsordner konnte nicht erstellt werden "{ $path }", Grund "{ $reason }".
saving_loading_failed_to_create_config_file = Fehler beim Erstellen der Konfigurationsdatei "{ $path }", Grund "{ $reason }".
saving_loading_failed_to_read_config_file = Konfiguration kann nicht von "{ $path }" geladen werden, da es nicht existiert oder keine Datei ist.
saving_loading_failed_to_read_config_file = Konfiguration kann nicht von "{ $path }" geladen werden, da sie nicht existiert oder keine Datei ist.
saving_loading_failed_to_read_data_from_file = Daten von Datei "{ $path }" können nicht gelesen werden, Grund "{ $reason }".
saving_loading_orphan_data = Verwaiste Daten "{ $data }" in Zeile "{ $line }".
saving_loading_not_valid = Einstellung "{ $data }" existiert nicht in der aktuellen App-Version.
@ -352,53 +447,52 @@ saving_loading_not_valid = Einstellung "{ $data }" existiert nicht in der aktuel
invalid_symlink_infinite_recursion = Endlose Rekursion
invalid_symlink_non_existent_destination = Nicht existierende Zieldatei
# Other
selected_all_reference_folders = Suche kann nicht gestartet werden, wenn alle Verzeichnisse als Referenzordner gesetzt sind
searching_for_data = Suche nach Daten, es kann eine Weile dauern, bitte warten...
text_view_messages = NACHRICHT
text_view_warnings = WARNUNGEN
text_view_errors = FEHLER
about_window_motto = Dieses Programm ist kostenlos zu benutzen und wird es immer sein.
about_window_motto = Dieses Programm ist kostenlos zu benutzen und wird immer frei sein.
# Various dialog
dialogs_ask_next_time = Nächstes Mal fragen
delete_file_failed = Fehler beim Entfernen der Datei { $name }, Grund { $reason }
delete_title_dialog = Lösche Bestätigung
delete_file_failed = Fehler beim Entfernen der Datei { $name }, aufgrund von { $reason }
delete_title_dialog = Löschen bestätigen
delete_question_label = Sind Sie sicher, dass Sie Dateien löschen möchten?
delete_all_files_in_group_title = Löschen aller Dateien in der Gruppe bestätigen
delete_all_files_in_group_label1 = In einigen Gruppen werden alle Datensätze ausgewählt.
delete_all_files_in_group_label1 = In einigen Gruppen sind alle Datensätze ausgewählt.
delete_all_files_in_group_label2 = Sind Sie sicher, dass Sie sie löschen möchten?
delete_folder_failed = Fehler beim Entfernen des Ordners { $dir } , da der Ordner nicht existiert. Sie haben keine Berechtigung oder sind nicht leer.
delete_items_label = { $items } Dateien werden entfernt.
delete_items_groups_label = { $items } Dateien aus { $groups } Gruppen werden entfernt.
delete_folder_failed = Fehler beim Entfernen des Ordners { $dir }, da der Ordner nicht existiert, Sie keine Berechtigung dafür haben oder der Ordner nicht leer ist.
delete_items_label = { $items } Dateien werden gelöscht.
delete_items_groups_label = { $items } Dateien aus { $groups } Gruppen werden gelöscht.
hardlink_failed = Hardlink fehlgeschlagen
hard_sym_invalid_selection_title_dialog = Ungültige Auswahl mit einigen Gruppen
hard_sym_invalid_selection_label_1 = In einigen Gruppen ist nur 1 Datensatz ausgewählt und wird ignoriert.
hard_sym_invalid_selection_label_2 = Um diese Dateien zu verlinken, müssen mindestens 2 Ergebnisse in der Gruppe ausgewählt werden.
hard_sym_invalid_selection_label_3 = Zuerst wird in der Gruppe als Original erkannt und nicht geändert, sondern als zweites und späteres modifiziert.
hard_sym_invalid_selection_title_dialog = Ungültige Auswahl bei einigen Gruppen
hard_sym_invalid_selection_label_1 = In einigen Gruppen ist nur ein Datensatz ausgewählt und dieser wird ignoriert.
hard_sym_invalid_selection_label_2 = Um diese Dateien hart/symbolisch zu verlinken, müssen mindestens zwei Ergebnisse in der Gruppe ausgewählt werden.
hard_sym_invalid_selection_label_3 = Erster der Gruppe als Original erkannt und nicht geändert, sondern zweiter und weitere modifiziert.
hard_sym_link_title_dialog = Link-Bestätigung
hard_sym_link_label = Sind Sie sicher, dass Sie diese Dateien verknüpfen möchten?
move_folder_failed = Fehler beim Verschieben des Ordners { $name }, Grund { $reason }
move_file_failed = Fehler beim Verschieben der Datei { $name }, Grund { $reason }
move_files_title_dialog = Wählen Sie den Ordner aus, in den Sie doppelte Dateien verschieben möchten
move_files_choose_more_than_1_path = Es muss nur 1 Pfad ausgewählt sein, um Duplikate kopieren zu können, ausgewählt { $path_number }.
move_stats = Zu Recht verschoben { $num_files }/{ $all_files } Elemente
save_results_to_file = Ergebnisse in Datei { $name } gespeichert
move_files_choose_more_than_1_path = Es darf nur ein Pfad ausgewählt sein, um Duplikate von dort kopieren zu können, ausgewählt sind { $path_number }.
move_stats = { $num_files }/{ $all_files } Elemente korrekt verschoben
save_results_to_file = Ergebnisse sowohl in txt als auch in json Dateien in den Ordner { $name } gespeichert.
search_not_choosing_any_music = FEHLER: Sie müssen mindestens ein Kontrollkästchen mit Art der Musiksuche auswählen.
include_folders_dialog_title = Ordner zum Einbinden
exclude_folders_dialog_title = Ordner ausschließen
search_not_choosing_any_broken_files = FEHLER: Sie müssen mindestens ein Kontrollkästchen mit der Art der markierten fehlerhaften Dateien auswählen.
include_folders_dialog_title = Einbezogene Ordner
exclude_folders_dialog_title = Ausgeschlossene Ordner
include_manually_directories_dialog_title = Verzeichnis manuell hinzufügen
cache_properly_cleared = Richtig geleerter Cache
cache_clear_duplicates_title = Leere Duplikaten-Cache
cache_clear_similar_images_title = Leere ähnlichen Bildercache
cache_clear_similar_videos_title = Lösche ähnlichen Videocache
cache_clear_message_label_1 = Wollen Sie den Cache von veralteten Einträgen löschen?
cache_properly_cleared = Cache vollständig geleert
cache_clear_duplicates_title = Leere Duplikate-Cache
cache_clear_similar_images_title = Leere Bilder-Cache
cache_clear_similar_videos_title = Leere Video-Cache
cache_clear_message_label_1 = Wollen Sie veraltete Einträge aus dem Cache löschen?
cache_clear_message_label_2 = Dieser Vorgang entfernt alle Cache-Einträge, die auf ungültige Dateien verweisen.
cache_clear_message_label_3 = Dies kann das Laden und Speichern im Cache beschleunigen.
cache_clear_message_label_4 = WARNUNG: Die Operation wird alle zwischengespeicherten Daten von externen Laufwerken entfernen, also muss der Hash erneut generiert werden.
cache_clear_message_label_3 = Dies kann das Laden und Speichern zum Cache leicht beschleunigen.
cache_clear_message_label_4 = ACHTUNG: Die Operation wird alle zwischengespeicherten Daten von nicht verbundenen externen Laufwerken entfernen, somit muss jeder Hash erneut generiert werden.
# Show preview
preview_temporary_file = Fehler beim Öffnen der temporären Bilddatei { $name }, Grund { $reason }.
preview_0_size = Vorschau des Bildes { $name } mit 0 Breite oder Höhe kann nicht erstellt werden.
preview_temporary_image_save = Fehler beim Speichern der temporären Bilddatei in { $name }, Grund { $reason }.
preview_temporary_image_remove = Fehler beim Löschen der temporären Bilddatei { $name }, Grund { $reason }.
preview_failed_to_create_cache_dir = Fehler beim Erstellen des Verzeichnisses { $name } durch die Bildvorschau, Grund { $reason }.
preview_image_resize_failure = Fehler beim Ändern der Bildgröße { $name }.
preview_image_opening_failure = Konnte Bild { $name } nicht öffnen, Grund { $reason }
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = Gruppe { $current_group }/{ $all_groups } ({ $images_in_group } Bilder)
compare_move_left_button = L

@ -0,0 +1,500 @@
# Window titles
window_settings_title = Ρυθμίσεις
window_main_title = Czkawka (Hiccup)
window_progress_title = Σάρωση
window_compare_images = Σύγκριση Εικόνων
# General
general_ok_button = Εντάξει
general_close_button = Κλείσιμο
# Main window
music_title_checkbox = Τίτλος
music_artist_checkbox = Καλλιτέχνης
music_year_checkbox = Έτος
music_bitrate_checkbox = Ρυθμός Bit
music_genre_checkbox = Είδος
music_length_checkbox = Μήκος
music_comparison_checkbox = Κατά Προσέγγιση Σύγκριση
music_checking_by_tags = Ετικέτες
music_checking_by_content = Περιεχόμενο
same_music_seconds_label = Ελάχιστη δεύτερη διάρκεια θραύσματος
same_music_similarity_label = Μέγιστη διαφορά
same_music_tooltip =
Η αναζήτηση παρόμοιων αρχείων μουσικής με βάση το περιεχόμενό του μπορεί να ρυθμιστεί με τη ρύθμιση:
- Ο ελάχιστος χρόνος θραύσματος μετά το οποίο τα αρχεία μουσικής μπορούν να προσδιοριστούν ως παρόμοια
- Η μέγιστη διαφορά διαφοράς μεταξύ δύο δοκιμαζόμενων θραυσμάτων
Το κλειδί για καλά αποτελέσματα είναι να βρεθούν λογικοί συνδυασμοί αυτών των παραμέτρων, για παρέχονται.
Ο ορισμός του ελάχιστου χρόνου σε 5s και η μέγιστη διαφορά σε 1.0, θα αναζητήσει σχεδόν πανομοιότυπα θραύσματα στα αρχεία.
Ένας χρόνος 20 δευτερολέπτων και μια μέγιστη διαφορά 6.0, από την άλλη πλευρά, λειτουργεί καλά για την εύρεση remixes/live εκδόσεις κλπ.
Από προεπιλογή, κάθε αρχείο μουσικής συγκρίνεται μεταξύ τους και αυτό μπορεί να πάρει πολύ χρόνο κατά τη δοκιμή πολλών αρχείων, έτσι είναι συνήθως καλύτερο να χρησιμοποιήσετε φακέλους αναφοράς και να προσδιορίσετε ποια αρχεία πρέπει να συγκρίνονται μεταξύ τους (με την ίδια ποσότητα αρχείων, η σύγκριση των δακτυλικών αποτυπωμάτων θα είναι γρηγορότερη τουλάχιστον 4x από ό, τι χωρίς φακέλους αναφοράς).
music_comparison_checkbox_tooltip =
Ψάχνει για παρόμοια αρχεία μουσικής χρησιμοποιώντας AI, το οποίο χρησιμοποιεί μηχανική μάθηση για να αφαιρέσει παρένθεση από μια φράση. Για παράδειγμα, με αυτήν την επιλογή ενεργοποιημένη, τα εν λόγω αρχεία θα θεωρούνται διπλότυπα:
Swieald dzizśłob --- Swieřdzizłob (Remix Lato 2021)
duplicate_case_sensitive_name = Διάκριση Πεζών/ Κεφαλαίων
duplicate_case_sensitive_name_tooltip =
When enabled, group only records when they have exactly same name e.g. Żołd <-> Żołd
Disabling such option will group names without checking if each letter is same size e.g. żoŁD <-> Żołd
duplicate_mode_size_name_combo_box = Μέγεθος και όνομα
duplicate_mode_name_combo_box = Όνομα
duplicate_mode_size_combo_box = Μέγεθος
duplicate_mode_hash_combo_box = Κατακερματισμός
duplicate_hash_type_tooltip =
Czkawka προσφέρει 3 τύπους hashes:
Blake3 - λειτουργία κρυπτογραφικού hash. Αυτή είναι η προεπιλογή επειδή είναι πολύ γρήγορη.
CRC32 - απλή συνάρτηση hash. Αυτό θα πρέπει να είναι πιο γρήγορα από Blake3, αλλά μπορεί πολύ σπάνια να έχει κάποιες συγκρούσεις.
XXH3 - πολύ παρόμοιο στην απόδοση και την ποιότητα hash με Blake3 (αλλά μη κρυπτογραφικό).
duplicate_check_method_tooltip =
Προς το παρόν, Czkawka προσφέρει τρεις τύπους μεθόδου για να βρείτε αντίγραφα από:
Όνομα - Εύρεση αρχείων που έχουν το ίδιο όνομα.
Μέγεθος - Εύρεση αρχείων με το ίδιο μέγεθος.
Hash - Εύρεση αρχείων με το ίδιο περιεχόμενο. Αυτή η λειτουργία κατακερματίζει το αρχείο και αργότερα συγκρίνει αυτό το κατακερματισμό για να βρείτε διπλότυπα. Αυτή η λειτουργία είναι ο ασφαλέστερος τρόπος για να βρείτε διπλότυπα. Η εφαρμογή χρησιμοποιεί βαριά κρύπτη, έτσι ώστε η δεύτερη και περαιτέρω σάρωση των ίδιων δεδομένων θα πρέπει να είναι πολύ πιο γρήγορα από την πρώτη.
image_hash_size_tooltip =
Κάθε επιλεγμένη εικόνα παράγει ένα ειδικό hash το οποίο μπορεί να συγκριθεί μεταξύ τους, και μια μικρή διαφορά μεταξύ τους σημαίνει ότι αυτές οι εικόνες είναι παρόμοια.
8 μέγεθος hash είναι αρκετά καλό να βρείτε εικόνες που είναι μόνο λίγο παρόμοια με το πρωτότυπο. Με ένα μεγαλύτερο σύνολο εικόνων (>1000), αυτό θα παράγει ένα μεγάλο ποσό ψευδών θετικών, γι 'αυτό συνιστώ να χρησιμοποιήσετε ένα μεγαλύτερο μέγεθος hash σε αυτή την περίπτωση.
16 είναι το προεπιλεγμένο μέγεθος hash το οποίο είναι ένας αρκετά καλός συμβιβασμός ανάμεσα στην εύρεση ακόμη και λίγο παρόμοιες εικόνες και έχει μόνο μια μικρή ποσότητα συγκρούσεων hash.
32 και 64 hashes βρείτε μόνο παρόμοιες εικόνες, αλλά θα πρέπει να έχουν σχεδόν καμία ψευδή θετικά (ίσως εκτός από μερικές εικόνες με άλφα κανάλι).
image_resize_filter_tooltip =
Για να υπολογιστεί το hash της εικόνας, η βιβλιοθήκη πρέπει πρώτα να το αλλάξει μέγεθος.
Εξαρτάται από τον επιλεγμένο αλγόριθμο, η προκύπτουσα εικόνα που χρησιμοποιείται για τον υπολογισμό του hash θα φαίνεται λίγο διαφορετική.
Ο γρηγορότερος αλγόριθμος που χρησιμοποιείται, αλλά και εκείνος που δίνει τα χειρότερα αποτελέσματα, είναι ο Nearest. Είναι ενεργοποιημένη από προεπιλογή, επειδή με μέγεθος 16x16 hash χαμηλότερη ποιότητα δεν είναι πραγματικά ορατή.
Με μέγεθος κατακερματισμού 8x8 συνιστάται να χρησιμοποιήσετε διαφορετικό αλγόριθμο από το Nearest, για να έχετε καλύτερες ομάδες εικόνων.
image_hash_alg_tooltip =
Users can choose from one of many algorithms of calculating the hash.
Each has both strong and weaker points and will sometimes give better and sometimes worse results for different images.
So, to determine the best one for you, manual testing is required.
big_files_mode_combobox_tooltip = Επιτρέπει την αναζήτηση για μικρότερα/μεγαλύτερα αρχεία
big_files_mode_label = Ελεγχμένα αρχεία
big_files_mode_smallest_combo_box = Το Μικρότερο
big_files_mode_biggest_combo_box = Το Μεγαλύτερο
main_notebook_duplicates = Αντίγραφο Αρχείων
main_notebook_empty_directories = Άδειοι Κατάλογοι
main_notebook_big_files = Μεγάλα Αρχεία
main_notebook_empty_files = Κενά Αρχεία
main_notebook_temporary = Προσωρινά Αρχεία
main_notebook_similar_images = Παρόμοιες Εικόνες
main_notebook_similar_videos = Παρόμοια Βίντεο
main_notebook_same_music = Αντίγραφο Μουσικής
main_notebook_symlinks = Μη Έγκυρα Symlinks
main_notebook_broken_files = Κατεστραμμένα Αρχεία
main_notebook_bad_extensions = Εσφαλμένες Επεκτάσεις
main_tree_view_column_file_name = Όνομα Αρχείου
main_tree_view_column_folder_name = Όνομα Φακέλου
main_tree_view_column_path = Διαδρομή
main_tree_view_column_modification = Ημερομηνία Τροποποίησης
main_tree_view_column_size = Μέγεθος
main_tree_view_column_similarity = Ομοιότητα
main_tree_view_column_dimensions = Διαστάσεις
main_tree_view_column_title = Τίτλος
main_tree_view_column_artist = Καλλιτέχνης
main_tree_view_column_year = Έτος
main_tree_view_column_bitrate = Ρυθμός Bit
main_tree_view_column_length = Μήκος
main_tree_view_column_genre = Είδος
main_tree_view_column_symlink_file_name = Όνομα Αρχείου Συντόμευσης
main_tree_view_column_symlink_folder = Φάκελος Συντόμευσης
main_tree_view_column_destination_path = Διαδρομή Προορισμού
main_tree_view_column_type_of_error = Τύπος Σφάλματος
main_tree_view_column_current_extension = Τρέχουσα Επέκταση
main_tree_view_column_proper_extensions = Κατάλληλη Επέκταση
main_label_check_method = Έλεγχος μεθόδου
main_label_hash_type = Τύπος κατακερματισμού
main_label_hash_size = Μέγεθος κατακερματισμού
main_label_size_bytes = Μέγεθος (bytes)
main_label_min_size = Ελάχιστο
main_label_max_size = Μέγιστο
main_label_shown_files = Αριθμός εμφανιζόμενων αρχείων
main_label_resize_algorithm = Αλλαγή μεγέθους αλγορίθμου
main_label_similarity = Similarity{ " " }
main_check_box_broken_files_audio = Ήχος
main_check_box_broken_files_pdf = PDF
main_check_box_broken_files_archive = Αρχειοθέτηση
main_check_box_broken_files_image = Εικόνα
check_button_general_same_size = Αγνόηση ίδιου μεγέθους
check_button_general_same_size_tooltip = Αγνοήστε τα αρχεία με το ίδιο μέγεθος στα αποτελέσματα - συνήθως αυτά είναι 1: 1 διπλότυπα
main_label_size_bytes_tooltip = Μέγεθος αρχείων που θα χρησιμοποιηθούν κατά τη σάρωση
# Upper window
upper_tree_view_included_folder_column_title = Φάκελοι προς αναζήτηση
upper_tree_view_included_reference_column_title = Φάκελοι Αναφοράς
upper_recursive_button = Αναδρομικά
upper_recursive_button_tooltip = Αν επιλεχθεί, αναζητήστε επίσης αρχεία που δεν τοποθετούνται απευθείας σε επιλεγμένους φακέλους.
upper_manual_add_included_button = Χειροκίνητη Προσθήκη
upper_add_included_button = Προσθήκη
upper_remove_included_button = Αφαίρεση
upper_manual_add_excluded_button = Χειροκίνητη Προσθήκη
upper_add_excluded_button = Προσθήκη
upper_remove_excluded_button = Αφαίρεση
upper_manual_add_included_button_tooltip =
Προσθήκη ονόματος καταλόγου στην αναζήτηση με το χέρι.
Για να προσθέσετε πολλαπλές διαδρομές ταυτόχρονα, διαχωρίστε τις με το ;
/home/roman;/home/rozkaz θα προσθέσετε δύο καταλόγους /home/roman και /home/rozkaz
upper_add_included_button_tooltip = Προσθήκη νέου φακέλου για αναζήτηση.
upper_remove_included_button_tooltip = Διαγραφή καταλόγου από την αναζήτηση.
upper_manual_add_excluded_button_tooltip =
Προσθήκη εξαιρούμενου ονόματος καταλόγου με το χέρι.
Για να προσθέσετε πολλαπλές διαδρομές ταυτόχρονα, διαχωρίστε τις με το ;
/home/roman;/home/krokiet θα προσθέσει δύο καταλόγους /home/roman και /home/keokiet
upper_add_excluded_button_tooltip = Προσθήκη καταλόγου για να αποκλειστεί στην αναζήτηση.
upper_remove_excluded_button_tooltip = Διαγραφή καταλόγου από αποκλεισμένους.
upper_notebook_items_configuration = Ρύθμιση Στοιχείων
upper_notebook_excluded_directories = Εξαιρούμενοι Κατάλογοι
upper_notebook_included_directories = Συμπεριλαμβανόμενοι Κατάλογοι
upper_allowed_extensions_tooltip =
Οι επιτρεπόμενες επεκτάσεις πρέπει να διαχωρίζονται με κόμματα (εξ ορισμού είναι διαθέσιμες).
Τα ακόλουθα Macros, τα οποία προσθέτουν πολλαπλές επεκτάσεις ταυτόχρονα, είναι επίσης διαθέσιμα: IMAGE, VIDEO, MUSIC, TEXT.
Χρήση παράδειγμα ".exe, IMAGE, VIDEO, .rar, 7z" - αυτό σημαίνει ότι οι εικόνες (π. χ. . jpg, png), βίντεο (π.χ. avi, mp4), exe, rar και 7z αρχεία θα σαρωθούν.
upper_excluded_extensions_tooltip =
Λίστα απενεργοποιημένων αρχείων που θα αγνοηθούν κατά τη σάρωση.
Όταν χρησιμοποιείτε και τις δύο επιτρεπόμενες και απενεργοποιημένες επεκτάσεις, αυτή έχει υψηλότερη προτεραιότητα, οπότε το αρχείο δεν θα ελεγχθεί.
upper_excluded_items_tooltip =
Τα εξαιρούμενα αντικείμενα πρέπει να περιέχουν * μπαλαντέρ και πρέπει να διαχωρίζονται με κόμματα.
Αυτό είναι πιο αργό από τους Αποκλεισμένους Κατάλογους, οπότε χρησιμοποιήστε το προσεκτικά.
upper_excluded_items = Εξαιρούμενα Αντικείμενα:
upper_allowed_extensions = Επιτρεπόμενες Επεκτάσεις:
upper_excluded_extensions = Απενεργοποιημένες Επεκτάσεις:
# Popovers
popover_select_all = Επιλογή όλων
popover_unselect_all = Αποεπιλογή όλων
popover_reverse = Αντίστροφη Επιλογή
popover_select_all_except_oldest = Επιλογή όλων εκτός από το παλαιότερο
popover_select_all_except_newest = Επιλογή όλων εκτός από το νεότερο
popover_select_one_oldest = Επιλέξτε ένα παλαιότερο
popover_select_one_newest = Επιλέξτε ένα νεότερο
popover_select_custom = Επιλέξτε προσαρμοσμένο
popover_unselect_custom = Αποεπιλογή προσαρμοσμένου
popover_select_all_images_except_biggest = Επιλογή όλων εκτός από το μεγαλύτερο
popover_select_all_images_except_smallest = Επιλογή όλων εκτός των μικρότερων
popover_custom_path_check_button_entry_tooltip =
Επιλέξτε εγγραφές με διαδρομή.
Παράδειγμα χρήσης:
/home/pimpek/rzecz.txt μπορεί να βρεθεί με /home/pim*
popover_custom_name_check_button_entry_tooltip =
Επιλέξτε εγγραφές με ονόματα αρχείων.
Παράδειγμα χρήσης:
/usr/ping/pong.txt μπορεί να βρεθεί με *ong*
popover_custom_regex_check_button_entry_tooltip =
Επιλέξτε εγγραφές με καθορισμένο Regex.
Με αυτή τη λειτουργία, το κείμενο αναζήτησης είναι η διαδρομή με το όνομα.
Παράδειγμα χρήσης:
/usr/bin/ziemniak. xt μπορεί να βρεθεί με /ziem[a-z]+
Αυτό χρησιμοποιεί την προεπιλεγμένη εφαρμογή Rust regex. Μπορείτε να διαβάσετε περισσότερα για αυτό εδώ: https://docs.rs/regex.
popover_custom_case_sensitive_check_button_tooltip =
Όταν απενεργοποιηθεί το /home/* βρίσκει και το /HoMe/roman και το /home/roman.
popover_custom_not_all_check_button_tooltip =
Prevents selecting all records in group.
This is enabled by default, because in most situations, you don't want to delete both original and duplicates files, but want to leave at least one file.
WARNING: This setting doesn't work if you have already manually selected all results in a group.
popover_custom_regex_path_label = Διαδρομή
popover_custom_regex_name_label = Όνομα
popover_custom_regex_regex_label = Regex Διαδρομή + Όνομα
popover_custom_case_sensitive_check_button = Διάκριση πεζών/ κεφαλαίων
popover_custom_all_in_group_label = Να μην επιλέγονται όλες οι εγγραφές στην ομάδα
popover_custom_mode_unselect = Αποεπιλογή Προσαρμοσμένου
popover_custom_mode_select = Επιλογή Προσαρμοσμένου
popover_sort_file_name = Όνομα αρχείου
popover_sort_folder_name = Όνομα φακέλου
popover_sort_full_name = Πλήρες όνομα
popover_sort_size = Μέγεθος
popover_sort_selection = Επιλογή
popover_invalid_regex = Regex δεν είναι έγκυρο
popover_valid_regex = Regex είναι έγκυρο
# Bottom buttons
bottom_search_button = Αναζήτηση
bottom_select_button = Επιλογή
bottom_delete_button = Διαγραφή
bottom_save_button = Αποθήκευση
bottom_symlink_button = Symlink
bottom_hardlink_button = Hardlink
bottom_move_button = Μετακίνηση
bottom_sort_button = Ταξινόμηση
bottom_search_button_tooltip = Έναρξη αναζήτησης
bottom_select_button_tooltip = Επιλέξτε εγγραφές. Μόνο επιλεγμένα αρχεία/φάκελοι μπορούν να υποβληθούν σε μεταγενέστερη επεξεργασία.
bottom_delete_button_tooltip = Διαγραφή επιλεγμένων αρχείων/φακέλων.
bottom_save_button_tooltip = Αποθήκευση δεδομένων σχετικά με την αναζήτηση σε αρχείο
bottom_symlink_button_tooltip =
Δημιουργία συμβολικών συνδέσμων.
Λειτουργεί μόνο όταν επιλεγούν τουλάχιστον δύο αποτελέσματα σε μια ομάδα.
Πρώτα παραμένει αμετάβλητη και δεύτερον και αργότερα συνδέεται με την πρώτη.
bottom_hardlink_button_tooltip =
Δημιουργία hardlinks.
λειτουργεί μόνο όταν επιλεγούν τουλάχιστον δύο αποτελέσματα σε μια ομάδα.
Πρώτα παραμένει αμετάβλητη και η δεύτερη και αργότερα συνδέονται σκληρά με την πρώτη.
bottom_hardlink_button_not_available_tooltip =
Δημιουργία hardlinks. Το κουμπί
είναι απενεργοποιημένο, επειδή οι hardlinks δεν μπορούν να δημιουργηθούν.
Hardlinks λειτουργεί μόνο με δικαιώματα διαχειριστή στα Windows, οπότε φροντίστε να εκτελέσετε την εφαρμογή ως διαχειριστής.
Εάν η εφαρμογή λειτουργεί ήδη με τέτοια δικαιώματα ελέγξτε για παρόμοια ζητήματα στο Github.
bottom_move_button_tooltip =
Moves files to chosen directory.
It copies all files to the directory without preserving the directory tree.
When trying to move two files with identical name to folder, second will fail and show error.
bottom_sort_button_tooltip = Ταξινόμηση αρχείων/φακέλων σύμφωνα με την επιλεγμένη μέθοδο.
bottom_show_errors_tooltip = Εμφάνιση/Απόκρυψη πίνακα κάτω κειμένου.
bottom_show_upper_notebook_tooltip = Εμφάνιση/Απόκρυψη ανώτερου πίνακα σημειωμάτων.
# Progress Window
progress_stop_button = Διακοπή
progress_stop_additional_message = Η διακοπή ζητήθηκε
# About Window
about_repository_button_tooltip = Σύνδεσμος προς σελίδα αποθετηρίου με πηγαίο κώδικα.
about_donation_button_tooltip = Σύνδεση με τη σελίδα δωρεών.
about_instruction_button_tooltip = Σύνδεσμος στη σελίδα οδηγιών.
about_translation_button_tooltip = Σύνδεσμος προς τη σελίδα του Crowdin με μεταφράσεις εφαρμογών. Υιοθετούνται επίσημα πολωνικά και αγγλικά.
about_repository_button = Αποθετήριο
about_donation_button = Δωρεά
about_instruction_button = Οδηγίες
about_translation_button = Μετάφραση
# Header
header_setting_button_tooltip = Άνοιγμα διαλόγου ρυθμίσεων.
header_about_button_tooltip = Άνοιγμα διαλόγου με πληροφορίες σχετικά με την εφαρμογή.
# Settings
## General
settings_number_of_threads = Αριθμός χρησιμοποιημένων νημάτων
settings_number_of_threads_tooltip = Αριθμός χρησιμοποιημένων νημάτων, 0 σημαίνει ότι θα χρησιμοποιηθούν όλα τα διαθέσιμα νήματα.
settings_label_restart = Πρέπει να επανεκκινήσετε την εφαρμογή για να εφαρμόσετε τις ρυθμίσεις!
settings_ignore_other_filesystems = Αγνόηση άλλων συστημάτων αρχείων (μόνο Linux)
settings_ignore_other_filesystems_tooltip =
αγνοεί αρχεία που δεν είναι στο ίδιο σύστημα αρχείων με αναζήτηση καταλόγων.
Λειτουργεί όπως η επιλογή -xdev στην εντολή εύρεσης στο Linux
settings_save_at_exit_button_tooltip = Αποθήκευση ρυθμίσεων σε αρχείο κατά το κλείσιμο της εφαρμογής.
settings_load_at_start_button_tooltip =
Φόρτωση παραμέτρων από το αρχείο κατά το άνοιγμα της εφαρμογής.
Αν δεν είναι ενεργοποιημένη, θα χρησιμοποιηθούν οι προεπιλεγμένες ρυθμίσεις.
settings_confirm_deletion_button_tooltip = Εμφάνιση διαλόγου επιβεβαίωσης όταν κάνετε κλικ στο κουμπί διαγραφής.
settings_confirm_link_button_tooltip = Εμφάνιση διαλόγου επιβεβαίωσης όταν κάνετε κλικ στο κουμπί hard/symlink
settings_confirm_group_deletion_button_tooltip = Εμφάνιση διαλόγου προειδοποίησης όταν προσπαθείτε να διαγράψετε όλες τις εγγραφές από την ομάδα.
settings_show_text_view_button_tooltip = Εμφάνιση πίνακα κειμένου στο κάτω μέρος της διεπαφής χρήστη.
settings_use_cache_button_tooltip = Χρήση προσωρινής μνήμης αρχείων.
settings_save_also_as_json_button_tooltip = Αποθήκευση προσωρινής μνήμης σε (αναγνώσιμη από άνθρωπο) μορφή JSON. Είναι δυνατή η τροποποίηση του περιεχομένου του. Η προσωρινή μνήμη από αυτό το αρχείο θα διαβάζεται αυτόματα από την εφαρμογή αν λείπει η κρύπτη δυαδικής μορφής (με επέκταση κάδου).
settings_use_trash_button_tooltip = Μετακινεί τα αρχεία στον κάδο απορριμμάτων αντί να τα διαγράφει μόνιμα.
settings_language_label_tooltip = Γλώσσα διεπαφής χρήστη.
settings_save_at_exit_button = Αποθήκευση ρυθμίσεων κατά το κλείσιμο της εφαρμογής
settings_load_at_start_button = Φόρτωση ρυθμίσεων κατά το άνοιγμα της εφαρμογής
settings_confirm_deletion_button = Εμφάνιση διαλόγου επιβεβαίωσης κατά τη διαγραφή αρχείων
settings_confirm_link_button = Εμφάνιση διαλόγου επιβεβαίωσης όταν σκληρά/συντόμευση αρχείων
settings_confirm_group_deletion_button = Εμφάνιση διαλόγου επιβεβαίωσης κατά τη διαγραφή όλων των αρχείων της ομάδας
settings_show_text_view_button = Εμφάνιση κάτω πίνακα κειμένου
settings_use_cache_button = Χρήση προσωρινής μνήμης
settings_save_also_as_json_button = Επίσης αποθήκευση προσωρινής μνήμης ως αρχείο JSON
settings_use_trash_button = Μετακίνηση διαγραμμένων αρχείων στον κάδο απορριμμάτων
settings_language_label = Γλώσσα
settings_multiple_delete_outdated_cache_checkbutton = Αυτόματη διαγραφή ξεπερασμένων καταχωρήσεων cache
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
Delete outdated cache results which point to non-existent files.
When enabled, app makes sure when loading records, that all records point to valid files (broken ones are ignored).
Disabling this will help when scanning files on external drives, so cache entries about them will not be purged in the next scan.
In the case of having hundred of thousands records in cache, it is suggested to enable this, which will speedup cache loading/saving at start/end of the scan.
settings_notebook_general = Γενικά
settings_notebook_duplicates = Διπλότυπα
settings_notebook_images = Παρόμοιες Εικόνες
settings_notebook_videos = Παρόμοια Βίντεο
## Multiple - settings used in multiple tabs
settings_multiple_image_preview_checkbutton_tooltip = Εμφανίζει την προεπισκόπηση στη δεξιά πλευρά (όταν επιλέγετε ένα αρχείο εικόνας).
settings_multiple_image_preview_checkbutton = Εμφάνιση προεπισκόπησης εικόνας
settings_multiple_clear_cache_button_tooltip =
Χειροκίνητη εκκαθάριση της λανθάνουσας μνήμης των ξεπερασμένων καταχωρήσεων.
Αυτό θα πρέπει να χρησιμοποιηθεί μόνο αν η αυτόματη εκκαθάριση έχει απενεργοποιηθεί.
settings_multiple_clear_cache_button = Κατάργηση παρωχημένων αποτελεσμάτων από τη μνήμη cache.
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
Hides all files except one, if all point to the same data (are hardlinked).
Example: In the case where there are (on disk) seven files which are hardlinked to specific data and one different file with same data but a different inode, then in duplicate finder, only one unique file and one file from hardlinked ones will be shown.
settings_duplicates_minimal_size_entry_tooltip =
Ορίστε το ελάχιστο μέγεθος αρχείου που θα αποθηκευτεί.
Επιλέγοντας μια μικρότερη τιμή θα δημιουργήσει περισσότερες εγγραφές. Αυτό θα επιταχύνει την αναζήτηση, αλλά επιβραδύνει τη φόρτωση της λανθάνουσας μνήμης.
settings_duplicates_prehash_checkbutton_tooltip =
Ενεργοποιεί την προσωρινή αποθήκευση του prehash (ένα κατακερματισμό υπολογισμένο από ένα μικρό μέρος του αρχείου) το οποίο επιτρέπει την προηγούμενη απόρριψη μη διπλών αποτελεσμάτων.
Είναι απενεργοποιημένο από προεπιλογή επειδή μπορεί να προκαλέσει επιβραδύνσεις σε ορισμένες περιπτώσεις.
Συνιστάται ιδιαίτερα να το χρησιμοποιήσετε κατά τη σάρωση εκατοντάδων χιλιάδων ή εκατομμυρίων αρχείων, επειδή μπορεί να επιταχύνει την αναζήτηση κατά πολλές φορές.
settings_duplicates_prehash_minimal_entry_tooltip = Ελάχιστο μέγεθος της προσωρινά αποθηκευμένης καταχώρησης.
settings_duplicates_hide_hard_link_button = Απόκρυψη σκληρών συνδέσμων (μόνο Linux και macOS)
settings_duplicates_prehash_checkbutton = Χρήση προσωρινής μνήμης prehash
settings_duplicates_minimal_size_cache_label = Ελάχιστο μέγεθος των αρχείων (σε byte) αποθηκεύονται στη μνήμη cache
settings_duplicates_minimal_size_cache_prehash_label = Ελάχιστο μέγεθος των αρχείων (σε byte) αποθηκεύονται στην προσωρινή μνήμη prehash
## Saving/Loading settings
settings_saving_button_tooltip = Αποθήκευση των τρεχουσών ρυθμίσεων ρυθμίσεων στο αρχείο.
settings_loading_button_tooltip = Φόρτωση ρυθμίσεων από το αρχείο και αντικατάσταση των τρεχουσών ρυθμίσεων με αυτές.
settings_reset_button_tooltip = Επαναφορά των τρεχουσών ρυθμίσεων στην προκαθορισμένη.
settings_saving_button = Αποθήκευση διαμόρφωσης
settings_loading_button = Φόρτωση διαμόρφωσης
settings_reset_button = Επαναφορά ρύθμισης παραμέτρων
## Opening cache/config folders
settings_folder_cache_open_tooltip =
Opens the folder where the cache txt files are stored.
Modifying the cache files may cause invalid results to be shown. However, modifying path may save time when moving a big amount of files to a different location.
You can copy these files between computers to save time on scanning again for files (of course if they have similar directory structure).
In the case of problems with the cache, these files can be removed. The app will automatically regenerate them.
settings_folder_settings_open_tooltip =
Ανοίγει το φάκελο όπου αποθηκεύεται η ρύθμιση Czkawka.
ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Η χειροκίνητη τροποποίηση της ρύθμισης μπορεί να σπάσει τη ροή εργασίας σας.
settings_folder_cache_open = Άνοιγμα φακέλου cache
settings_folder_settings_open = Άνοιγμα φακέλου ρυθμίσεων
# Compute results
compute_stopped_by_user = Η αναζήτηση σταμάτησε από το χρήστη
compute_found_duplicates_hash_size = Found { $number_files } duplicates in { $number_groups } groups which took { $size }
compute_found_duplicates_name = Βρέθηκαν διπλότυπα { $number_files } σε ομάδες { $number_groups }
compute_found_empty_folders = Βρέθηκαν { $number_files } άδειοι φάκελοι
compute_found_empty_files = Βρέθηκαν { $number_files } άδεια αρχεία
compute_found_big_files = Βρέθηκαν { $number_files } μεγάλα αρχεία
compute_found_temporary_files = Βρέθηκαν { $number_files } προσωρινά αρχεία
compute_found_images = Βρέθηκαν { $number_files } παρόμοιες εικόνες σε ομάδες { $number_groups }
compute_found_videos = Βρέθηκαν { $number_files } παρόμοια βίντεο σε ομάδες { $number_groups }
compute_found_music = Βρέθηκαν { $number_files } παρόμοια αρχεία μουσικής σε ομάδες { $number_groups }
compute_found_invalid_symlinks = Βρέθηκαν { $number_files } μη έγκυρες συμβολικές συνδέσεις
compute_found_broken_files = Βρέθηκαν { $number_files } κατεστραμμένα αρχεία
compute_found_bad_extensions = Βρέθηκαν { $number_files } αρχεία με μη έγκυρες επεκτάσεις
# Progress window
progress_scanning_general_file = Σάρωση { $file_number } αρχείου
progress_scanning_extension_of_files = Έλεγχος επέκτασης αρχείου { $file_checked }/{ $all_files }
progress_scanning_broken_files = Έλεγχος αρχείου { $file_checked }/{ $all_files }
progress_scanning_video = Hashing of { $file_checked }/{ $all_files } βίντεο
progress_scanning_image = Hashing of { $file_checked }/{ $all_files } image
progress_comparing_image_hashes = Σύγκριση { $file_checked }/{ $all_files } κατακερματισμού εικόνας
progress_scanning_music_tags_end = Συγκρίνοντας ετικέτες του αρχείου μουσικής { $file_checked }/{ $all_files }
progress_scanning_music_tags = Ανάγνωση ετικετών του αρχείου μουσικής { $file_checked }/{ $all_files }
progress_scanning_music_content_end = Σύγκριση δακτυλικού αποτυπώματος του αρχείου μουσικής { $file_checked }/{ $all_files }
progress_scanning_music_content = Υπολογισμός δακτυλικού αποτυπώματος του αρχείου μουσικής { $file_checked }/{ $all_files }
progress_scanning_empty_folders = Σάρωση φακέλου { $folder_number }
progress_scanning_size = Μέγεθος σάρωσης του αρχείου { $file_number }
progress_scanning_size_name = Σάρωση ονόματος και μεγέθους αρχείου { $file_number }
progress_scanning_name = Σάρωση ονόματος αρχείου { $file_number }
progress_analyzed_partial_hash = Αναλυμένο μερικό κατακερματισμό των αρχείων { $file_checked }/{ $all_files }
progress_analyzed_full_hash = Ανάλυση πλήρους hash των { $file_checked }/{ $all_files } αρχείων
progress_prehash_cache_loading = Φόρτωση προσωρινής μνήμης
progress_prehash_cache_saving = Αποθήκευση προσωρινής μνήμης prehash
progress_hash_cache_loading = Φόρτωση προσωρινής μνήμης hash
progress_hash_cache_saving = Αποθήκευση λανθάνουσας μνήμης
progress_cache_loading = Φόρτωση προσωρινής μνήμης
progress_cache_saving = Αποθήκευση προσωρινής μνήμης
progress_current_stage = Current Stage:{ " " }
progress_all_stages = Όλα Τα Στάδια:{" " }
# Saving loading
saving_loading_saving_success = Αποθηκευμένες ρυθμίσεις για το αρχείο { $name }.
saving_loading_saving_failure = Αποτυχία αποθήκευσης δεδομένων ρύθμισης παραμέτρων στο αρχείο { $name }.
saving_loading_reset_configuration = Οι τρέχουσες ρυθμίσεις εκκαθαρίστηκαν.
saving_loading_loading_success = Τοποθετημένες ρυθμίσεις παραμέτρων εφαρμογής.
saving_loading_invalid_string = Για το κλειδί "{ $key }" βρήκε μη έγκυρο αποτέλεσμα - "{ $result }" το οποίο δεν είναι συμβολοσειρά.
saving_loading_invalid_int = Για το κλειδί "{ $key }" βρήκε μη έγκυρο αποτέλεσμα - "{ $result }" που δεν είναι ακέραιος.
saving_loading_invalid_bool = Για το κλειδί "{ $key }" βρήκε μη έγκυρο αποτέλεσμα - "{ $result }" που δεν είναι bool.
saving_loading_decode_problem_bool = Αποτυχία αποκωδικοποίησης bool από το κλειδί "{ $key }" βρέθηκε "{ $result }" αλλά οι επιτρεπόμενες τιμές είναι 0, 1, αληθείς ή ψευδείς.
saving_loading_saving_same_keys = Προσπάθεια εξοικονόμησης ρυθμίσεων με διπλό κλειδί "{ $key }".
saving_loading_failed_to_get_home_directory = Αποτυχία λήψης του αρχικού φακέλου για να ανοίξετε/αποθηκεύσετε το αρχείο ρυθμίσεων.
saving_loading_folder_config_instead_file = Αδυναμία δημιουργίας ή ανοίγματος αρχείου αποθήκευσης στη διαδρομή "{ $path }" επειδή ήδη υπάρχει φάκελος.
saving_loading_failed_to_create_configuration_folder = Αποτυχία ρύθμισης παραμέτρων για τη δημιουργία φακέλου ρυθμίσεων "{ $path }", λόγος "{ $reason }".
saving_loading_failed_to_create_config_file = Αποτυχία δημιουργίας αρχείου ρυθμίσεων "{ $path }", λόγος "{ $reason }".
saving_loading_failed_to_read_config_file = Αδυναμία φόρτωσης ρύθμισης παραμέτρων από το "{ $path }" επειδή δεν υπάρχει ή δεν είναι αρχείο.
saving_loading_failed_to_read_data_from_file = Αδυναμία ανάγνωσης δεδομένων από το αρχείο "{ $path }", λόγος "{ $reason }".
saving_loading_orphan_data = Βρέθηκαν ορφανά δεδομένα "{ $data }" στη γραμμή "{ $line }".
saving_loading_not_valid = Η ρύθμιση "{ $data }" δεν υπάρχει στην τρέχουσα έκδοση εφαρμογών.
# Invalid symlinks
invalid_symlink_infinite_recursion = Άπειρη αναδρομή
invalid_symlink_non_existent_destination = Αρχείο ανύπαρκτου προορισμού
# Other
selected_all_reference_folders = Αδυναμία έναρξης αναζήτησης, όταν όλοι οι κατάλογοι ορίζονται ως φάκελοι αναφοράς
searching_for_data = Αναζήτηση δεδομένων, μπορεί να πάρει λίγο, παρακαλώ περιμένετε...
text_view_messages = ΜΗΝΥΜΑΤΑ
text_view_warnings = ΠΡΟΕΙΔΟΠΟΙΗΣΕΙΣ
text_view_errors = ΣΦΑΛΜΑ
about_window_motto = Αυτό το πρόγραμμα είναι ελεύθερο να χρησιμοποιηθεί και πάντα θα είναι.
# Various dialog
dialogs_ask_next_time = Ερώτηση την επόμενη φορά
delete_file_failed = Αποτυχία διαγραφής αρχείου { $name }, λόγος { $reason }
delete_title_dialog = Διαγραφή επιβεβαίωσης
delete_question_label = Είστε βέβαιοι ότι θέλετε να διαγράψετε αρχεία?
delete_all_files_in_group_title = Επιβεβαίωση διαγραφής όλων των αρχείων της ομάδας
delete_all_files_in_group_label1 = Σε ορισμένες ομάδες έχουν επιλεγεί όλες οι εγγραφές.
delete_all_files_in_group_label2 = Είστε βέβαιοι ότι θέλετε να τα διαγράψετε?
delete_folder_failed = Αποτυχία διαγραφής του φακέλου { $dir } επειδή ο φάκελος δεν υπάρχει, δεν έχετε άδεια ή ο φάκελος δεν είναι κενός.
delete_items_label = { $items } τα αρχεία θα διαγραφούν.
delete_items_groups_label = { $items } τα αρχεία από τις ομάδες { $groups } θα διαγραφούν.
hardlink_failed = Αποτυχία hardlink
hard_sym_invalid_selection_title_dialog = Μη έγκυρη επιλογή με κάποιες ομάδες
hard_sym_invalid_selection_label_1 = Σε ορισμένες ομάδες έχει επιλεγεί μόνο μία εγγραφή και θα αγνοηθεί.
hard_sym_invalid_selection_label_2 = Για να είναι δυνατή η σκληρή/συσχέτιση αυτών των αρχείων, πρέπει να επιλεγούν τουλάχιστον δύο αποτελέσματα στην ομάδα.
hard_sym_invalid_selection_label_3 = Η πρώτη στην ομάδα αναγνωρίζεται ως πρωτότυπο και δεν αλλάζεται, αλλά η δεύτερη και αργότερα τροποποιείται.
hard_sym_link_title_dialog = Επιβεβαίωση συνδέσμου
hard_sym_link_label = Είστε βέβαιοι ότι θέλετε να συνδέσετε αυτά τα αρχεία?
move_folder_failed = Αποτυχία μετακίνησης του φακέλου { $name }, λόγος { $reason }
move_file_failed = Αποτυχία μετακίνησης αρχείου { $name }, λόγος { $reason }
move_files_title_dialog = Επιλέξτε φάκελο στον οποίο θέλετε να μετακινήσετε διπλότυπα αρχεία
move_files_choose_more_than_1_path = Μόνο μία διαδρομή μπορεί να επιλεγεί για να είναι σε θέση να αντιγράψει τα διπλά αρχεία τους, επιλεγμένα { $path_number }.
move_stats = Σωστά μετακινήθηκαν { $num_files }/{ $all_files } στοιχεία
save_results_to_file = Αποθηκεύτηκε αποτελέσματα τόσο σε txt και αρχεία json στο φάκελο { $name }.
search_not_choosing_any_music = ΣΦΑΛΜΑ: Πρέπει να επιλέξετε τουλάχιστον ένα πλαίσιο ελέγχου με τύπους αναζήτησης μουσικής.
search_not_choosing_any_broken_files = ΣΦΑΛΜΑ: Πρέπει να επιλέξετε τουλάχιστον ένα πλαίσιο ελέγχου με τον τύπο των επιλεγμένων κατεστραμμένων αρχείων.
include_folders_dialog_title = Φάκελοι που θα συμπεριληφθούν
exclude_folders_dialog_title = Φάκελοι προς εξαίρεση
include_manually_directories_dialog_title = Προσθήκη καταλόγου χειροκίνητα
cache_properly_cleared = Σωστό εκκαθάριση προσωρινής μνήμης
cache_clear_duplicates_title = Εκκαθάριση διπλότυπων cache
cache_clear_similar_images_title = Εκκαθάριση παρόμοιων εικόνων cache
cache_clear_similar_videos_title = Εκκαθάριση παρόμοιων βίντεο cache
cache_clear_message_label_1 = Θέλετε να καθαρίσετε την προσωρινή μνήμη των ξεπερασμένων καταχωρήσεων?
cache_clear_message_label_2 = Αυτή η λειτουργία θα καταργήσει όλες τις καταχωρήσεις προσωρινής αποθήκευσης που δείχνουν σε μη έγκυρα αρχεία.
cache_clear_message_label_3 = Αυτό μπορεί να επιταχύνει ελαφρώς τη φόρτωση/αποθήκευση στη μνήμη cache.
cache_clear_message_label_4 = ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Η λειτουργία θα αφαιρέσει όλα τα προσωρινά αποθηκευμένα δεδομένα από τις αποσυνδεδεμένες εξωτερικές μονάδες. Έτσι, κάθε hash θα πρέπει να αναγεννηθεί.
# Show preview
preview_image_resize_failure = Αποτυχία αλλαγής μεγέθους εικόνας { $name }.
preview_image_opening_failure = Αποτυχία ανοίγματος εικόνας { $name }, λόγος { $reason }
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = Ομάδα { $current_group }/{ $all_groups } ({ $images_in_group } εικόνες)
compare_move_left_button = L
compare_move_right_button = R

@ -11,16 +11,41 @@ general_close_button = Close
# Main window
music_title_checkbox = Title
music_artist_checkbox = Artist
music_album_title_checkbox = Album Title
music_album_artist_checkbox = Album Artist
music_year_checkbox = Year
music_bitrate_checkbox = Bitrate
music_genre_checkbox = Genre
music_length_checkbox = Length
music_comparison_checkbox = Approximate Comparison
music_checking_by_tags = Tags
music_checking_by_content = Content
same_music_seconds_label = Minimal fragment second duration
same_music_similarity_label = Maximum difference
same_music_tooltip =
Searching for similar music files by its content can be configured by setting:
- The minimum fragment time after which music files can be identified as similar
- The maximum difference difference between two tested fragments
The key to good results is to find sensible combinations of these parameters, for provided.
Setting the minimum time to 5s and the maximum difference to 1.0, will look for almost identical fragments in the files.
A time of 20s and a maximum difference of 6.0, on the other hand, works well for finding remixes/live versions etc.
By default, each music file is compared to each other and this can take a lot of time when testing many files, so it is usually better to use reference folders and specifying which files are to be compared with each other(with same amount of files, comparing fingerprints will be faster at least 4x than without reference folders).
music_comparison_checkbox_tooltip =
It searches for similar music files using AI, which uses machine learning to remove parentheses from a phrase. For example, with this option enabled, the files in question will be considered duplicates:
Świędziżłób --- Świędziżłób (Remix Lato 2021)
duplicate_case_sensitive_name = Case Sensitive
duplicate_case_sensitive_name_tooltip =
When enabled, group only records when they have exactly same name e.g. Żołd <-> Żołd
Disabling such option will group names without checking if each letter is same size e.g. żoŁD <-> Żołd
duplicate_mode_size_name_combo_box = Size and Name
duplicate_mode_name_combo_box = Name
duplicate_mode_size_combo_box = Size
duplicate_mode_hash_combo_box = Hash
@ -43,24 +68,35 @@ duplicate_check_method_tooltip =
Hash - Finds files which have the same content. This mode hashes the file and later compares this hash to find duplicates. This mode is the safest way to find duplicates. App heavily uses cache, so second and further scans of the same data should be a lot of faster than the first.
image_hash_size_tooltip =
Czkawka offers changing the size of the generated hash for each image. A bigger hash size enables finding images with a lower amount of differences between images, but it is also slightly slower to use.
Default value for hash is 8 bytes, which allows finding both very similar and different images. 16 byte and 32 byte hashes should be used only for nearly identical images. 64 byte hash shouldn't be used, except in situations where you need to find really small differences.
image_hash_size_tooltip =
Each checked image produces a special hash which can be compared with each other, and a small difference between them means that these images are similar.
8 hash size is quite good to find images that are only a little similar to original. With a bigger set of images (>1000), this will produce a big amount of false positives, so I recommend to use a bigger hash size in this case.
16 is the default hash size which is quite a good compromise between finding even a little similar images and having only a small amount of hash collisions.
32 and 64 hashes find only very similar images, but should have almost no false positives (maybe except some images with alpha channel).
image_resize_filter_tooltip =
To compute hash of image, library must first resize it. Depend on chosen algorithm, resulted image will looks little different. The fastest algorithm to use, but also one which gives the worst results is Nearest.
To compute hash of image, the library must first resize it.
Depend on chosen algorithm, the resulting image used to calculate hash will looks a little different.
The fastest algorithm to use, but also the one which gives the worst results, is Nearest. It is enabled by default, because with 16x16 hash size lower quality it is not really visible.
With 8x8 hash size it is recommended to use a different algorithm than Nearest, to have better groups of images.
image_hash_alg_tooltip =
Users can choose from one of many algorithms of calculating the hash. Each has both strong and weaker points and will sometimes give better and sometimes worse results for different images. So, to determine the best one for you, manual testing is required.
Users can choose from one of many algorithms of calculating the hash.
main_notebook_image_fast_compare = Fast compare
main_notebook_image_fast_compare_tooltip =
Speedup searching and comparing hashes.
Each has both strong and weaker points and will sometimes give better and sometimes worse results for different images.
As opposed to normal mode - where each hash is compared to each other x times (where x is the similarity the user chose) - in this mode, exactly one comparison will be used.
So, to determine the best one for you, manual testing is required.
This option is recommended when comparing >10000 images with non 0 (Very High) similarity.
big_files_mode_combobox_tooltip = Allows to search for smallest/biggest files
big_files_mode_label = Checked files
big_files_mode_smallest_combo_box = The Smallest
big_files_mode_biggest_combo_box = The Biggest
main_notebook_duplicates = Duplicate Files
main_notebook_empty_directories = Empty Directories
@ -72,6 +108,7 @@ main_notebook_similar_videos = Similar Videos
main_notebook_same_music = Music Duplicates
main_notebook_symlinks = Invalid Symlinks
main_notebook_broken_files = Broken Files
main_notebook_bad_extensions = Bad Extensions
main_tree_view_column_file_name = File Name
main_tree_view_column_folder_name = Folder Name
@ -83,12 +120,15 @@ main_tree_view_column_dimensions = Dimensions
main_tree_view_column_title = Title
main_tree_view_column_artist = Artist
main_tree_view_column_year = Year
main_tree_view_column_album_title = Album Title
main_tree_view_column_album_artist = Album Artist
main_tree_view_column_bitrate = Bitrate
main_tree_view_column_length = Length
main_tree_view_column_genre = Genre
main_tree_view_column_symlink_file_name = Symlink File Name
main_tree_view_column_symlink_folder = Symlnik Folder
main_tree_view_column_symlink_folder = Symlink Folder
main_tree_view_column_destination_path = Destination Path
main_tree_view_column_type_of_error = Type Of Error
main_tree_view_column_current_extension = Current Extension
main_tree_view_column_proper_extensions = Proper Extension
main_label_check_method = Check method
main_label_hash_type = Hash type
@ -100,8 +140,13 @@ main_label_shown_files = Number of shown files
main_label_resize_algorithm = Resize algorithm
main_label_similarity = Similarity{" "}
main_check_box_broken_files_audio = Audio
main_check_box_broken_files_pdf = Pdf
main_check_box_broken_files_archive = Archive
main_check_box_broken_files_image = Image
check_button_general_same_size = Ignore same size
check_button_general_same_size_tooltip = Ignore from results, files which have identical size - usually this are 1:1 duplicates
check_button_general_same_size_tooltip = Ignore files with identical size in results - usually these are 1:1 duplicates
main_label_size_bytes_tooltip = Size of files which will be used in scan
@ -119,10 +164,20 @@ upper_manual_add_excluded_button = Manual Add
upper_add_excluded_button = Add
upper_remove_excluded_button = Remove
upper_manual_add_included_button_tooltip = Add directory name to search by hand.
upper_manual_add_included_button_tooltip =
Add directory name to search by hand.
To add multiple paths at once, separate them by ;
/home/roman;/home/rozkaz will add two directories /home/roman and /home/rozkaz
upper_add_included_button_tooltip = Add new directory to search.
upper_remove_included_button_tooltip = Delete directory from search.
upper_manual_add_excluded_button_tooltip = Add excluded directory name by hand.
upper_manual_add_excluded_button_tooltip =
Add excluded directory name by hand.
To add multiple paths at once, separate them by ;
/home/roman;/home/krokiet will add two directories /home/roman and /home/keokiet
upper_add_excluded_button_tooltip = Add directory to be excluded in search.
upper_remove_excluded_button_tooltip = Delete directory from excluded.
@ -137,12 +192,18 @@ upper_allowed_extensions_tooltip =
Usage example ".exe, IMAGE, VIDEO, .rar, 7z" - this means that images (e.g. jpg, png), videos (e.g. avi, mp4), exe, rar, and 7z files will be scanned.
upper_excluded_extensions_tooltip =
List of disabled files which will be ignored in scan.
When using both allowed and disabled extensions, this one has higher priority, so file will not be checked.
upper_excluded_items_tooltip =
Excluded items must contain * wildcard and should be separated by commas.
This is slower than Excluded Directories, so use it carefully.
upper_excluded_items = Excluded Items:
upper_allowed_extensions = Allowed Extensions:
upper_excluded_extensions = Disabled Extensions:
# Popovers
@ -180,6 +241,11 @@ popover_custom_regex_check_button_entry_tooltip =
This uses the default Rust regex implementation. You can read more about it here: https://docs.rs/regex.
popover_custom_case_sensitive_check_button_tooltip =
Enables case-sensitive detection.
When disabled /home/* finds both /HoMe/roman and /home/roman.
popover_custom_not_all_check_button_tooltip =
Prevents selecting all records in group.
@ -190,11 +256,17 @@ popover_custom_not_all_check_button_tooltip =
popover_custom_regex_path_label = Path
popover_custom_regex_name_label = Name
popover_custom_regex_regex_label = Regex Path + Name
popover_custom_case_sensitive_check_button = Case sensitive
popover_custom_all_in_group_label = Don't select all records in group
popover_custom_mode_unselect = Unselect Custom
popover_custom_mode_select = Select Custom
popover_sort_file_name = File name
popover_sort_folder_name = Folder name
popover_sort_full_name = Full name
popover_sort_size = Size
popover_sort_selection = Selection
popover_invalid_regex = Regex is invalid
popover_valid_regex = Regex is valid
@ -207,6 +279,7 @@ bottom_save_button = Save
bottom_symlink_button = Symlink
bottom_hardlink_button = Hardlink
bottom_move_button = Move
bottom_sort_button = Sort
bottom_search_button_tooltip = Start search
bottom_select_button_tooltip = Select records. Only selected files/folders can be later processed.
@ -220,22 +293,30 @@ bottom_hardlink_button_tooltip =
Create hardlinks.
Only works when at least two results in a group are selected.
First is unchanged and second and later are hardlinked to first.
bottom_move_button_tooltip =
bottom_hardlink_button_not_available_tooltip =
Create hardlinks.
Button is disabled, because hardlinks cannot be created.
Hardlinks only works with administrator privileges on Windows, so be sure to run app as administrator.
If app already works with such privileges check for similar issues on Github.
bottom_move_button_tooltip =
Moves files to chosen directory.
It copies all files to the directory without preserving the directory tree.
When trying to move two files with identical name to folder, second will fail and show error.
bottom_sort_button_tooltip =
Sorts files/folders according to selected method.
bottom_show_errors_tooltip = Show/Hide bottom text panel.
bottom_show_upper_notebook_tooltip = Show/Hide upper notebook panel.
# Progress Window
progress_stop_button = Stop
progress_stop_additional_message = Stop requested
# About Window
about_repository_button_tooltip = Link to repository page with source code.
about_donation_button_tooltip = Link to donation page.
about_instruction_button_tooltip = Link to instruction page.
about_translation_button_tooltip = Link to Crowdin page with app translations. Officially Polish and English are supported, but any help with other language will be appreciated.
about_translation_button_tooltip = Link to Crowdin page with app translations. Officially Polish and English are supported.
about_repository_button = Repository
about_donation_button = Donation
@ -248,6 +329,17 @@ header_about_button_tooltip = Opens dialog with info about app.
# Settings
## General
settings_number_of_threads = Number of used threads
settings_number_of_threads_tooltip = Number of used threads, 0 means that all available threads will be used.
settings_label_restart = You need to restart app to apply settings!
settings_ignore_other_filesystems = Ignore other filesystems (only Linux)
settings_ignore_other_filesystems_tooltip =
ignores files that are not in the same file system as searched directories.
Works same like -xdev option in find command on Linux
settings_save_at_exit_button_tooltip = Save configuration to file when closing app.
settings_load_at_start_button_tooltip =
Load configuration from file when opening app.
@ -296,7 +388,7 @@ settings_multiple_clear_cache_button_tooltip =
Manually clear the cache of outdated entries.
This should only be used if automatic clearing has been disabled.
settings_multiple_clear_cache_button = Remove outdated results from images cache
settings_multiple_clear_cache_button = Remove outdated results from cache.
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
@ -365,21 +457,32 @@ compute_found_videos = Found { $number_files } similar videos in { $number_group
compute_found_music = Found { $number_files } similar music files in { $number_groups } groups
compute_found_invalid_symlinks = Found { $number_files } invalid symlinks
compute_found_broken_files = Found { $number_files } broken files
compute_found_bad_extensions = Found { $number_files } files with invalid extensions
# Progress window
progress_scanning_general_file = Scanning {$file_number} file
progress_scanning_extension_of_files = Checking extension of {$file_checked}/{$all_files} file
progress_scanning_broken_files = Checking {$file_checked}/{$all_files} file
progress_scanning_video = Hashing of {$file_checked}/{$all_files} video
progress_scanning_image = Hashing of {$file_checked}/{$all_files} image
progress_comparing_image_hashes = Comparing {$file_checked}/{$all_files} image hash
progress_scanning_music_tags_end = Comparing tags of {$file_checked}/{$all_files} music file
progress_scanning_music_tags = Reading tags of {$file_checked}/{$all_files} music file
progress_scanning_music_content_end = Comparing fingerprint of {$file_checked}/{$all_files} music file
progress_scanning_music_content = Calculating fingerprint of {$file_checked}/{$all_files} music file
progress_scanning_empty_folders = Scanning {$folder_number} folder
progress_scanning_size = Scanning size of {$file_number} file
progress_scanning_size_name = Scanning name and size of {$file_number} file
progress_scanning_name = Scanning name of {$file_number} file
progress_analyzed_partial_hash = Analyzed partial hash of {$file_checked}/{$all_files} files
progress_analyzed_full_hash = Analyzed full hash of {$file_checked}/{$all_files} files
progress_prehash_cache_loading = Loading prehash cache
progress_prehash_cache_saving = Saving prehash cache
progress_hash_cache_loading = Loading hash cache
progress_hash_cache_saving = Saving hash cache
progress_cache_loading = Loading cache
progress_cache_saving = Saving cache
progress_current_stage = Current Stage:{" "}
progress_all_stages = All Stages:{" "}
@ -411,6 +514,7 @@ invalid_symlink_infinite_recursion = Infinite recursion
invalid_symlink_non_existent_destination = Non-existent destination file
# Other
selected_all_reference_folders = Cannot start search, when all directories are set as reference folders
searching_for_data = Searching data, it may take a while, please wait...
text_view_messages = MESSAGES
text_view_warnings = WARNINGS
@ -446,9 +550,10 @@ move_files_title_dialog = Choose folder to which you want to move duplicated fil
move_files_choose_more_than_1_path = Only one path may be selected to be able to copy their duplicated files, selected {$path_number}.
move_stats = Properly moved {$num_files}/{$all_files} items
save_results_to_file = Saved results to file {$name}
save_results_to_file = Saved results both to txt and json files into {$name} folder.
search_not_choosing_any_music = ERROR: You must select at least one checkbox with music searching types.
search_not_choosing_any_broken_files = ERROR: You must select at least one checkbox with type of checked broken files.
include_folders_dialog_title = Folders to include
exclude_folders_dialog_title = Folders to exclude
@ -465,11 +570,8 @@ cache_clear_message_label_3 = This may slightly speedup loading/saving to cache.
cache_clear_message_label_4 = WARNING: Operation will remove all cached data from unplugged external drives. So each hash will need to be regenerated.
# Show preview
preview_temporary_file = Failed to open temporary image file {$name}, reason {$reason}.
preview_0_size = Cannot create preview of image {$name}, with 0 width or height.
preview_temporary_image_save = Failed to save temporary image file to {$name}, reason {$reason}.
preview_temporary_image_remove = Failed to delete temporary image file {$name}, reason {$reason}.
preview_failed_to_create_cache_dir = Failed to create dir {$name} needed by image preview, reason {$reason}.
preview_image_resize_failure = Failed to resize image {$name}.
preview_image_opening_failure = Failed to open image {$name}, reason {$reason}
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = Group { $current_group }/{ $all_groups } ({ $images_in_group } images)

@ -1,33 +1,56 @@
# Window titles
window_settings_title = Opciones
window_settings_title = Configuración
window_main_title = Czkawka (Hipo)
window_progress_title = Escaneando
window_compare_images = Comparar imágenes
# General
general_ok_button = Ok
general_ok_button = Aceptar
general_close_button = Cerrar
# Main window
music_title_checkbox = Título
music_artist_checkbox = Artista
music_album_title_checkbox = Título del álbum
music_album_artist_checkbox = Artista del álbum
music_year_checkbox = Año
music_bitrate_checkbox = Tasa de bits
music_genre_checkbox = Género
music_length_checkbox = Duración
music_comparison_checkbox = Comparación aproximada
music_checking_by_tags = Etiquetas
music_checking_by_content = Contenido
same_music_seconds_label = Duración mínima del segundo fragmento
same_music_similarity_label = Diferencia máxima
same_music_tooltip =
Buscando archivos de música similares por su contenido se puede configurar configurando:
- El tiempo mínimo de fragmento después del cual los archivos de música pueden ser identificados como similares
- La diferencia máxima entre dos fragmentos probados
La clave para los buenos resultados es encontrar combinaciones sensatas de estos parámetros, para proporcionar.
Establecer el tiempo mínimo a 5 s y la diferencia máxima a 1.0, buscará fragmentos casi idénticos en los archivos.
Un tiempo de 20 años y una diferencia máxima de 6.0, por otro lado, funciona bien para encontrar remixes/versiones en vivo, etc.
Por defecto, cada archivo de música se compara entre sí y esto puede tomar mucho tiempo al probar muchos archivos, por lo que normalmente es mejor usar carpetas de referencia y especificar qué archivos deben compararse entre sí (con la misma cantidad de archivos, comparar las huellas dactilares será más rápido al menos 4x que sin carpetas de referencia).
music_comparison_checkbox_tooltip =
Busca archivos de música similares usando IA, que utiliza el aprendizaje automático para eliminar paréntesis de una frase, p. ej. con esta opción habilitada, los archivos en cuestión se considerarán duplicados:
Busca archivos de música similares usando IA, que usa el aprendizaje automático para eliminar paréntesis de una frase. Por ejemplo, con esta opción activada, los archivos en cuestión se considerarán duplicados:
Świędziżłób --- Świędziżłób (Remix Lato 2021)
duplicate_case_sensitive_name = Sensible a mayúsculas
duplicate_case_sensitive_name_tooltip =
Cuando está habilitado, agrupa registros sólo cuando tienen exactamente el mismo nombre p.ej. Żołd <-> Żołd
Deshabilitar tal opción agrupará nombres sin comprobar si cada letra tiene el mismo tamaño, p. ej. żoŁD <-> Żołd
duplicate_mode_size_name_combo_box = Tamaño y nombre
duplicate_mode_name_combo_box = Nombre
duplicate_mode_size_combo_box = Tamaño
duplicate_mode_hash_combo_box = Hash
duplicate_hash_type_tooltip =
Kawka ofrece 3 tipos de hashes, que pueden ser usados:
Czkawka ofrece 3 tipos de hashes, que pueden ser usados:
Función de hash Blake3 criptográfica. Se utiliza como algoritmo hash por defecto porque es muy rápido.
Blake3 - función de hash criptográfica. Se usa como algoritmo hash predeterminado porque es muy rápido.
CRC32 - función hash simple. Debe ser más rápido que Blake3, pero probablemente tenga algunas colisiones muy raras.
XXH3 - muy similar en caso de rendimiento y calidad de hash a Blake3, por lo que tales modos pueden ser fácilmente usados.
XXH3 - muy similar en caso de rendimiento y calidad de hash a Blake3 (pero no criptográfico). Por lo que tales modos pueden ser fácilmente usados.
duplicate_check_method_tooltip =
Por ahora, el kawka ofrece tres tipos de métodos para encontrar duplicados por:
@ -35,21 +58,34 @@ duplicate_check_method_tooltip =
Tamaño - Encuentra archivos con el mismo tamaño.
Hash - Encuentra archivos con el mismo contenido. Este modo apaga el archivo y luego compara este hash para encontrar duplicados. Este modo es la manera más segura de encontrar duplicados. La herramienta utiliza la caché en gran medida, por lo que segundo y posterior análisis de los mismos datos debe ser mucho más rápido que el primero.
Hash - Encuentra archivos con el mismo contenido. Este modo molesta el archivo y luego compara este hash para encontrar duplicados. Este modo es la forma más segura de encontrar duplicados. La aplicación utiliza mucho caché, por lo que segundo y más análisis de los mismos datos debe ser mucho más rápido que el primero.
image_hash_size_tooltip =
Kawka ofrece un cambio de tamaño del hash generado para cada imagen. La causa hash de Bigger permite encontrar imágenes con menor cantidad de diferencias entre imágenes, pero también es un poco más lento de usar.
Cada imagen seleccionada produce un hash especial que se puede comparar entre sí y una pequeña diferencia entre ellas significa que estas imágenes son similares.
tamaño de 8 hash es bastante bueno para encontrar imágenes que son un poco similares a las originales. Con un conjunto más grande de imágenes (>1000), esto producirá una gran cantidad de falsos positivos, así que recomiendo usar un mayor tamaño de hash en este caso.
16 es el tamaño de hash predeterminado, lo cual es un buen compromiso entre encontrar incluso un poco de imágenes similares y tener sólo una pequeña cantidad de colisiones hash.
32 y 64 hashes sólo encuentran imágenes muy similares, pero no deberían tener casi falsos positivos (tal vez excepto algunas imágenes con canal alfa).
image_resize_filter_tooltip =
To compute hash of image, the library must first resize it.
Depend on chosen algorithm, the resulting image used to calculate hash will looks a little different.
The fastest algorithm to use, but also the one which gives the worst results, is Nearest. It is enabled by default, because with 16x16 hash size lower quality it is not really visible.
El valor predeterminado para el hash es de 8 bytes, lo que permite encontrar imágenes muy similares y diferentes. 16 y 32 hashes deben utilizarse sólo para imágenes casi idénticas. El hash de 64 bytes no debería ser usado, excepto en una situación en la que se necesitan diferencias realmente pequeñas para encontrar
image_resize_filter_tooltip = Para calcular el hash de la imagen, la librería primero debe redimensionarla. Depende del algoritmo elegido, la imagen resultante se verá poco diferente. El algoritmo más rápido de usar, pero también uno que da los peores resultados es el más cercano.
image_hash_alg_tooltip = Los usuarios pueden elegir uno de muchos algoritmos de cálculo de hash. Cada uno tiene puntos fuertes y débiles y dará a veces mejores y a veces peores resultados para diferentes imágenes, para elegir el mejor, se requieren pruebas manuales.
main_notebook_image_fast_compare = Comparación rápida
main_notebook_image_fast_compare_tooltip =
Acelera la búsqueda y la comparación de hashes.
With 8x8 hash size it is recommended to use a different algorithm than Nearest, to have better groups of images.
image_hash_alg_tooltip =
Los usuarios pueden elegir uno de los muchos algoritmos de cálculo del hash.
En frente del modo normal donde cada hash es comparado entre sí x veces, donde x es la similitud que el usuario elija, en este modo siempre se utiliza sólo una comparación.
Cada uno tiene puntos fuertes y débiles y a veces dará mejores y a veces peores resultados para diferentes imágenes.
Esta opción se recomienda cuando se compara >10000 imágenes con una similitud que no es 0(Muy Alta).
main_notebook_duplicates = Duplicar archivos
Así que, para determinar la mejor para ti, se requiere una prueba manual.
big_files_mode_combobox_tooltip = Permite buscar archivos más pequeños/mayores
big_files_mode_label = Archivos marcados
big_files_mode_smallest_combo_box = El más pequeño
big_files_mode_biggest_combo_box = El más grande
main_notebook_duplicates = Archivos Duplicados
main_notebook_empty_directories = Directorios vacíos
main_notebook_big_files = Archivos grandes
main_notebook_empty_files = Archivos vacíos
@ -59,33 +95,41 @@ main_notebook_similar_videos = Videos similares
main_notebook_same_music = Duplicados de música
main_notebook_symlinks = Enlaces simbólicos inválidos
main_notebook_broken_files = Archivos rotos
main_notebook_bad_extensions = Extensiones incorrectas
main_tree_view_column_file_name = Nombre del archivo
main_tree_view_column_folder_name = Nombre de carpeta
main_tree_view_column_path = Ruta
main_tree_view_column_modification = Fecha de modificación
main_tree_view_column_size = Tamaño
main_tree_view_column_similarity = Similaridad
main_tree_view_column_similarity = Similitud
main_tree_view_column_dimensions = Dimensiones
main_tree_view_column_title = Título
main_tree_view_column_artist = Artista
main_tree_view_column_year = Año
main_tree_view_column_album_title = Título del álbum
main_tree_view_column_album_artist = Artista del álbum
main_tree_view_column_bitrate = Tasa de bits
main_tree_view_column_length = Duración
main_tree_view_column_genre = Género
main_tree_view_column_symlink_file_name = Nombre del archivo Symlink
main_tree_view_column_symlink_folder = Carpeta de Symlnik
main_tree_view_column_symlink_folder = Carpeta Symlink
main_tree_view_column_destination_path = Ruta de destino
main_tree_view_column_type_of_error = Tipo de error
main_tree_view_column_current_extension = Extensión actual
main_tree_view_column_proper_extensions = Extensión adecuada
main_label_check_method = Comprobar método
main_label_hash_type = Tipo de Hash
main_label_hash_size = Tamaño hash
main_label_size_bytes = Tamaño(bytes)
main_label_size_bytes = Tamaño (bytes)
main_label_min_size = Mínimo
main_label_max_size = Máx
main_label_max_size = Máximo
main_label_shown_files = Número de archivos mostrados
main_label_resize_algorithm = Redimensionar algoritmo
main_label_similarity = Similarity{ " " }
main_label_resize_algorithm = Algoritmo de Redimensionar
main_label_similarity = Similitud{ " " }
main_check_box_broken_files_audio = Sonido
main_check_box_broken_files_pdf = Pdf
main_check_box_broken_files_archive = Guardar
main_check_box_broken_files_image = Imagen
check_button_general_same_size = Ignorar el mismo tamaño
check_button_general_same_size_tooltip = Ignorar de los resultados, archivos que tienen el mismo tamaño - generalmente son 1:1 duplicados
check_button_general_same_size_tooltip = Ignorar archivos con idéntico tamaño en resultados - usualmente son 1:1 duplicados
main_label_size_bytes_tooltip = Tamaño de los archivos que se utilizarán en el escaneo
# Upper window
upper_tree_view_included_folder_column_title = Carpetas a buscar
@ -98,10 +142,20 @@ upper_remove_included_button = Eliminar
upper_manual_add_excluded_button = Añadir manual
upper_add_excluded_button = Añadir
upper_remove_excluded_button = Eliminar
upper_manual_add_included_button_tooltip = Permite añadir el nombre del directorio para buscar a mano.
upper_manual_add_included_button_tooltip =
Añade el nombre del directorio para buscar a mano.
Para agregar múltiples rutas a la vez, separalas por ;
/home/roman;/home/rozkaz añadirá dos directorios /home/roman y /home/rozkaz
upper_add_included_button_tooltip = Añadir nuevo directorio para buscar.
upper_remove_included_button_tooltip = Eliminar directorio de la búsqueda.
upper_manual_add_excluded_button_tooltip = Permite añadir el nombre del directorio excluido a mano.
upper_manual_add_excluded_button_tooltip =
Añadir el nombre del directorio excluido a mano.
Para agregar múltiples rutas a la vez, separalas por ;
/home/roman;/home/krokiet añadirá dos directorios /home/roman y /home/keokiet
upper_add_excluded_button_tooltip = Añadir directorio para ser excluido en la búsqueda.
upper_remove_excluded_button_tooltip = Eliminar directorio de excluidos.
upper_notebook_items_configuration = Configuración de artículos
@ -110,14 +164,19 @@ upper_notebook_included_directories = Directorios incluidos
upper_allowed_extensions_tooltip =
Las extensiones permitidas deben estar separadas por comas (por defecto todas están disponibles).
Macros IMAGE, VIDEO, MUSIC, TEXT que añade múltiples extensiones a la vez también están disponibles.
Las siguientes Macros, que añaden múltiples extensiones a la vez, también están disponibles: IMAGE, VIDEO, MUSIC, TEXT.
Ejemplo de uso ".exe, IMAGE, VIDEO, .rar, 7z" - esto significa que imágenes (e. . jpg, png), videos (ej: avi, mp4), archivos exe, rar, y 7z serán escaneados.
upper_excluded_extensions_tooltip =
List of disabled files which will be ignored in scan.
Ejemplo de uso ".exe, IMAGE, VIDEO, .rar, 7z" - esto significa que image(e. . jpg, png), video(p. ej., avi, mp4), archivos exe, rar y 7z serán escaneados.
When using both allowed and disabled extensions, this one has higher priority, so file will not be checked.
upper_excluded_items_tooltip =
Los artículos excluidos deben contener * comodín y deben estar separados por comas.
Esto es más lento que los Directorios excluidos, así que úsala con cuidado.
Esto es más lento que los Directorios Excluidos, así que úselo con cuidado.
upper_excluded_items = Elementos excluidos:
upper_allowed_extensions = Extensiones permitidas:
upper_excluded_extensions = Extensiones desactivadas:
# Popovers
popover_select_all = Seleccionar todo
popover_unselect_all = Deseleccionar todo
@ -125,42 +184,52 @@ popover_reverse = Invertir selección
popover_select_all_except_oldest = Seleccionar todo excepto más antiguo
popover_select_all_except_newest = Seleccionar todo excepto el más reciente
popover_select_one_oldest = Seleccione uno más antiguo
popover_select_one_newest = Seleccione un nuevo
popover_select_one_newest = Seleccione uno más nuevo
popover_select_custom = Seleccionar personalizado
popover_unselect_custom = Deseleccionar personalizado
popover_select_all_images_except_biggest = Seleccionar todo excepto mayor
popover_select_all_images_except_smallest = Seleccionar todo excepto menor
popover_custom_path_check_button_entry_tooltip =
Permite seleccionar registros por su ruta.
Seleccionar registros por ruta.
Ejemplo de uso:
/home/pmañk/rzecz.txt puede encontrarse con /home/pim*
Ejemplo:
/home/pmañk/rzecz.txt se puede encontrar con /home/pim*
popover_custom_name_check_button_entry_tooltip =
Permite seleccionar registros por nombres de archivo.
Seleccionar registros por nombres de archivos.
Ejemplo:
/usr/ping/pong.txt puede encontrarse con *a lo largo*
popover_custom_regex_check_button_entry_tooltip =
Permite seleccionar registros por Regex.
Seleccione registros por Regex.
En este modo, el texto buscado es Ruta con Nombre.
Ejemplo:
/usr/bin/ziemniak. xt se puede encontrar con /ziem[a-z]+
Esto utiliza la implementación predeterminada de expresiones regulares de Rust, así que puedes leer más al respecto en https://docs.rs/regex.
Esto utiliza la implementación predeterminada de expresiones regulares de Rust. Puedes leer más al respecto aquí: https://docs.rs/regex.
popover_custom_case_sensitive_check_button_tooltip =
Habilita la detección de mayúsculas y minúsculas.
Cuando se desactiva /home/* encuentra /HoMe/roman y /home/roman.
popover_custom_not_all_check_button_tooltip =
Evita seleccionar todos los registros en el grupo.
Previene la selección de todos los registros en grupo.
Esto está activado por defecto, porque en la mayoría de las situaciones el usuario no quiere eliminar archivos originales y duplicados. pero quiere dejar al menos un archivo.
Esto está activado por defecto, porque en la mayoría de las situaciones, no quiere eliminar tanto los archivos originales como los duplicados, pero quiere dejar al menos un archivo.
Advertencia: Esta configuración no funciona si el usuario ya ha seleccionado todos los resultados en el grupo manualmente.
ADVERTENCIA: Esta configuración no funciona si ya has seleccionado manualmente todos los resultados en un grupo.
popover_custom_regex_path_label = Ruta
popover_custom_regex_name_label = Nombre
popover_custom_regex_regex_label = Ruta de Regex + Nombre
popover_custom_case_sensitive_check_button = Distingue mayúsculas y minúsculas
popover_custom_all_in_group_label = No seleccionar todos los registros en el grupo
popover_custom_mode_unselect = Deseleccionar Personalizado
popover_custom_mode_select = Seleccionar Personalizado
popover_sort_file_name = Nombre de archivo
popover_sort_folder_name = Nombre de la carpeta
popover_sort_full_name = Nombre completo
popover_sort_size = Tamaño
popover_sort_selection = Selección
popover_invalid_regex = Regex no es válido
popover_valid_regex = Regex es válido
# Bottom buttons
@ -171,33 +240,41 @@ bottom_save_button = Guardar
bottom_symlink_button = Symlink
bottom_hardlink_button = Hardlink
bottom_move_button = Mover
bottom_search_button_tooltip = Empezar a buscar archivos/carpetas.
bottom_select_button_tooltip = Selecciona registros. Sólo los archivos/carpetas seleccionados pueden ser procesados más tarde.
bottom_sort_button = Ordenar
bottom_search_button_tooltip = Iniciar búsqueda
bottom_select_button_tooltip = Seleccionar registros. Sólo los archivos/carpetas seleccionados pueden ser procesados más tarde.
bottom_delete_button_tooltip = Eliminar archivos/carpetas seleccionadas.
bottom_save_button_tooltip = Guardar datos sobre la búsqueda en el archivo
bottom_symlink_button_tooltip =
Crea enlaces simbólicos.
Solo funciona cuando al menos 2 resultados en grupo son seleccionados.
Crear enlaces simbólicos.
Sólo funciona cuando al menos dos resultados en grupo son seleccionados.
El primero no ha cambiado y el segundo y más tarde están enlazados con el primero.
bottom_hardlink_button_tooltip =
Crea enlaces hardlinks.
Solo funciona cuando al menos 2 resultados en grupo son seleccionados.
El primero no ha cambiado y el segundo y más tarde están estrechamente vinculados a la primera.
Crear enlaces hardlinks.
Solo funciona cuando al menos dos resultados en grupo son seleccionados.
El primero no ha cambiado y el segundo y más tarde están enlazados por hardlinks a la primera.
bottom_hardlink_button_not_available_tooltip =
Crear enlaces duros.
Botón deshabilitado, porque no se pueden crear enlaces duros.
Hardlinks sólo funciona con privilegios de administrador en Windows, así que asegúrese de ejecutar la aplicación como administrador.
Si la aplicación ya funciona con dichos privilegios, compruebe si hay problemas similares en Github.
bottom_move_button_tooltip =
Mueve los archivos a la carpeta elegida.
Mover los archivos a la carpeta elegida.
Copia todos los archivos a la carpeta sin preservar el árbol de directorios.
Al intentar mover 2 archivos con el mismo nombre a la carpeta, el segundo fallará y mostrará el error.
bottom_show_errors_tooltip = Mostrar / Ocultar panel de error inferior.
Al intentar mover dos archivos con el mismo nombre a la carpeta, el segundo fallará y mostrará el error.
bottom_sort_button_tooltip = Ordenar archivos/carpetas de acuerdo al método seleccionado.
bottom_show_errors_tooltip = Mostrar/Ocultar panel de texto inferior.
bottom_show_upper_notebook_tooltip = Mostrar / Ocultar panel de cuaderno superior.
# Progress Window
progress_stop_button = Parar
progress_stop_additional_message = Parar solicitado
# About Window
about_repository_button_tooltip = Enlace a la página del repositorio con código fuente.
about_donation_button_tooltip = Enlace a la página de donación.
about_instruction_button_tooltip = Enlace a la página de instrucciones.
about_translation_button_tooltip = Enlace a la página de Crowdin con traducciones de aplicaciones. Oficialmente se admiten polaco e inglés, pero se agradecerá cualquier ayuda con otro idioma.
about_translation_button_tooltip = Enlace a la página de Crowdin con traducciones de aplicaciones. Oficialmente se admiten polaco e inglés.
about_repository_button = Repositorio
about_donation_button = Donación
about_donation_button = Donativo
about_instruction_button = Instrucción
about_translation_button = Traducción
# Header
@ -209,78 +286,86 @@ header_about_button_tooltip = Abre el diálogo con información sobre la aplicac
## General
settings_save_at_exit_button_tooltip = Guarda la configuración en el archivo al cerrar la aplicación.
settings_number_of_threads = Número de hilos usados
settings_number_of_threads_tooltip = Número de hilos usados, 0 significa que se utilizarán todos los hilos disponibles.
settings_label_restart = ¡Necesitas reiniciar la aplicación para aplicar la configuración!
settings_ignore_other_filesystems = Ignorar otros sistemas de ficheros (sólo Linux)
settings_ignore_other_filesystems_tooltip =
ignora los archivos que no están en el mismo sistema de archivos que los directorios buscados.
Funciona igual que la opción -xdev en encontrar el comando en Linux
settings_save_at_exit_button_tooltip = Guardar configuración en archivo al cerrar la aplicación.
settings_load_at_start_button_tooltip =
Cargando la configuración de inicio desde el archivo.
Si no selecciona esta opción cargará la configuración por defecto.
settings_confirm_deletion_button_tooltip = Muestra el diálogo de confirmación al hacer clic en el botón Eliminar.
settings_confirm_link_button_tooltip = Muestra el diálogo de confirmación al hacer clic en el botón duro/symlink.
settings_confirm_group_deletion_button_tooltip = Muestra el diálogo cuando intenta eliminar todos los registros del grupo.
settings_show_text_view_button_tooltip = Muestra el panel de error en la parte inferior.
settings_use_cache_button_tooltip = Opción que permite no utilizar la función de caché.
settings_save_also_as_json_button_tooltip = Guardar caché en formato JSON humano. Es posible modificar su contenido. La caché de este archivo será leída automáticamente por la aplicación si la caché del formato binario (con la extensión binaria) faltará.
settings_use_trash_button_tooltip = Cuando está habilitado mueve archivos a la papelera en su lugar eliminándolos permanentemente.
settings_language_label_tooltip = Permite elegir el idioma de la interfaz entre los disponibles.
settings_save_at_exit_button = Guardar configuración al salir
settings_load_at_start_button = Cargar configuración al iniciar
Cargar la configuración desde el archivo al abrir la aplicación.
Si no está habilitado, se usarán los ajustes por defecto.
settings_confirm_deletion_button_tooltip = Mostrar el diálogo de confirmación al hacer clic en el botón borrar.
settings_confirm_link_button_tooltip = Mostrar el diálogo de confirmación al hacer clic en el botón hard/symlink.
settings_confirm_group_deletion_button_tooltip = Mostrar el diálogo de advertencia al intentar eliminar todos los registros del grupo.
settings_show_text_view_button_tooltip = Mostrar el panel de texto en la parte inferior de la interfaz de usuario.
settings_use_cache_button_tooltip = Usar caché de archivos.
settings_save_also_as_json_button_tooltip = Guardar caché en formato JSON (legible por seres humanos). Es posible modificar su contenido. La caché de este archivo será leída automáticamente por la aplicación si la caché del formato binario (con la extensión binaria) no se encuentra.
settings_use_trash_button_tooltip = Mueve archivos a la papelera en su lugar eliminándolos permanentemente.
settings_language_label_tooltip = Idioma para la interfaz de usuario.
settings_save_at_exit_button = Guardar configuración al cerrar la aplicación
settings_load_at_start_button = Cargar configuración al abrir la aplicación
settings_confirm_deletion_button = Mostrar diálogo de confirmación al eliminar cualquier archivo
settings_confirm_link_button = Mostrar diálogo de confirmación cuando vincule archivos de forma dura o simbólica
settings_confirm_group_deletion_button = Mostrar diálogo de confirmación al eliminar todos los archivos del grupo
settings_show_text_view_button = Mostrar panel de texto inferior
settings_use_cache_button = Usar caché
settings_save_also_as_json_button = Guardar caché también en archivo JSON
settings_save_also_as_json_button = Guarda también la caché como archivo JSON
settings_use_trash_button = Mover archivos borrados a la papelera
settings_language_label = Idioma
settings_multiple_delete_outdated_cache_checkbutton = Borrar automáticamente entradas de caché obsoletas
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
Permite eliminar resultados de caché obsoletos que apuntan a archivos inexistentes.
Eliminar resultados de caché obsoletos que apuntan a archivos inexistentes.
Cuando esté habilitada, asegúrese de que al cargar registros, todos los puntos a archivos válidos e ignore los rotos.
Cuando está activado, la aplicación se asegura al cargar registros, de que todos los registros apuntan a archivos válidos (los rotos son ignorados).
Desactivar esta opción, ayudará a escanear archivos en unidades externas, por lo que las entradas de caché sobre ellas no serán purgadas en el próximo escaneo.
Desactivar esto ayudará al escanear archivos en unidades externas, por lo que las entradas de caché sobre ellas no serán purgadas en el siguiente escaneo.
En caso de tener cientos de miles de registros en caché, se sugiere habilitar esta opción, para acelerar la carga y guardado de caché al inicio y final de la búsqueda.
En el caso de tener cientos de miles de registros en caché, se sugiere habilitar esto, lo que acelerará la carga/guardado del caché al inicio/final del escaneo.
settings_notebook_general = General
settings_notebook_duplicates = Duplicados
settings_notebook_images = Imágenes similares
settings_notebook_videos = Vídeo similar
settings_notebook_videos = Vídeos similares
## Multiple - settings used in multiple tabs
settings_multiple_image_preview_checkbutton_tooltip = Muestra la vista previa en el lado derecho, al seleccionar el archivo de imagen.
settings_multiple_image_preview_checkbutton_tooltip = Muestra la vista previa en el lado derecho (al seleccionar un archivo de imagen).
settings_multiple_image_preview_checkbutton = Mostrar vista previa de la imagen
settings_multiple_clear_cache_button_tooltip =
Borrar manualmente la caché de entradas desactualizadas.
Debe utilizarse sólo si se deshabilita la limpieza automática.
settings_multiple_clear_cache_button = Eliminar resultados desactualizados de la caché de imágenes
Limpiar manualmente la caché de entradas desactualizadas.
Esto solo debe utilizarse si se ha desactivado la limpieza automática.
settings_multiple_clear_cache_button = Eliminar resultados obsoletos de la caché.
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
Oculta todos los archivos excepto uno, si son puntos a los mismos datos(están en línea dura).
Oculta todos los archivos excepto uno, si todos apuntan a los mismos datos (están en línea dura).
Por ejemplo, en caso de que en el disco haya 7 archivos que están enlazados duramente a datos específicos y un archivo diferente con los mismos datos pero diferente inode, entonces en el buscador duplicado sólo será visible un archivo único y un archivo de los enlazados.
Ejemplo: En el caso en que hay (en el disco) siete archivos que están estrechamente vinculados a datos específicos y un archivo diferente con los mismos datos pero un inodio diferente, luego en el buscador duplicado, sólo se mostrará un archivo único y un archivo de los enlazados.
settings_duplicates_minimal_size_entry_tooltip =
Permite establecer el tamaño mínimo del archivo, que será almacenado en caché.
Establece el tamaño mínimo de archivo que se almacenará en caché.
Eligiendo un valor menor, generará más registros que acelerarán la búsqueda, pero ralentizarán la carga/guardado de la caché.
Al elegir un valor más pequeño se generarán más registros. Esto acelerará la búsqueda, pero ralentizará la carga/guardado de la caché.
settings_duplicates_prehash_checkbutton_tooltip =
Activa el almacenamiento en caché de prehash(hash calculado desde una pequeña parte del archivo) que permite descartar resultados no duplicados anteriormente.
Activa el almacenamiento en caché de prehash (un hash calculado desde una pequeña parte del archivo) que permite despedir los resultados no duplicados anteriormente.
Está deshabilitado por defecto porque puede causar en algunas situaciones ralentizaciones.
Está deshabilitado por defecto porque puede causar derribos lentos en algunas situaciones.
Es muy recomendable usarlo para escanear cientos de miles o millones de archivos, ya que puede acelerar la búsqueda varias veces.
Es altamente recomendable usarlo para escanear cientos de miles o millones de archivos, ya que puede acelerar la búsqueda varias veces.
settings_duplicates_prehash_minimal_entry_tooltip = Tamaño mínimo de la entrada en caché.
settings_duplicates_hide_hard_link_button = Ocultar enlaces duros (sólo Linux y MacOS)
settings_duplicates_hide_hard_link_button = Ocultar enlaces duros (sólo Linux y macOS)
settings_duplicates_prehash_checkbutton = Usar caché prehash
settings_duplicates_minimal_size_cache_label = Tamaño mínimo de los archivos en bytes guardados en la caché
settings_duplicates_minimal_size_cache_prehash_label = Tamaño mínimo de archivos en bytes guardados en caché prehash
settings_duplicates_minimal_size_cache_label = Tamaño mínimo de los archivos (en bytes) guardados en la caché
settings_duplicates_minimal_size_cache_prehash_label = Tamaño mínimo de archivos (en bytes) guardados en caché prehash
## Saving/Loading settings
settings_saving_button_tooltip = Guardar configuración de configuración actual al archivo.
settings_loading_button_tooltip = Carga los ajustes desde el archivo y reemplaza la configuración actual con ellos.
settings_saving_button_tooltip = Guardar la configuración de configuración actual en el archivo.
settings_loading_button_tooltip = Cargar los ajustes desde el archivo y reemplazar la configuración actual con ellos.
settings_reset_button_tooltip = Restablecer la configuración actual a la predeterminada.
settings_saving_button = Guardar configuración
settings_loading_button = Cargar configuración
@ -289,17 +374,17 @@ settings_reset_button = Restablecer configuración
## Opening cache/config folders
settings_folder_cache_open_tooltip =
Abre la carpeta donde se almacenan archivos txt con caché.
Abre la carpeta donde se almacenan los archivos txt.
Modificarlos puede causar que se muestren resultados inválidos pero también se modifique e., puede ahorrar tiempo al mover gran cantidad de archivos a un lugar diferente.
Modificar los archivos de caché puede causar que se muestren resultados no válidos. Sin embargo, modificar la ruta puede ahorrar tiempo al mover una gran cantidad de archivos a una ubicación diferente.
Puede copiar estos archivos entre ordenadores para ahorrar tiempo al escanear de nuevo para archivos (por supuesto, si tienen una estructura de directorios similar).
En caso de problemas con la caché, estos archivos pueden ser eliminados, por lo que la aplicación los regenerará automáticamente.
En caso de problemas con la caché, estos archivos pueden ser eliminados. La aplicación los regenerará automáticamente.
settings_folder_settings_open_tooltip =
Abre la carpeta donde se almacenan las configuraciones del kawka.
Abrir la carpeta donde se almacena la configuración de Czkawka.
Modificándolas a mano, puede causar que se rompa el flujo de trabajo.
ADVERTENCIA: Modificar manualmente la configuración puede romper su flujo de trabajo.
settings_folder_cache_open = Abrir carpeta de caché
settings_folder_settings_open = Abrir carpeta de ajustes
# Compute results
@ -315,19 +400,30 @@ compute_found_videos = Se encontraron { $number_files } vídeos similares en { $
compute_found_music = Se encontraron { $number_files } archivos de música similares en { $number_groups } grupos
compute_found_invalid_symlinks = Se encontraron { $number_files } enlaces simbólicos no válidos
compute_found_broken_files = Se encontraron { $number_files } archivos rotos
compute_found_bad_extensions = Se encontraron { $number_files } archivos con extensiones no válidas
# Progress window
progress_scanning_general_file = Escaneando archivo { $file_number }
progress_scanning_extension_of_files = Comprobando extensión de { $file_checked }/{ $all_files } archivo
progress_scanning_broken_files = Comprobando { $file_checked }/{ $all_files } archivo
progress_scanning_video = Hash de { $file_checked }/{ $all_files } vídeo
progress_scanning_image = Hash de { $file_checked }/{ $all_files } imagen
progress_comparing_image_hashes = Comparando hash de imagen { $file_checked }/{ $all_files }
progress_scanning_music_tags_end = Comparando etiquetas de { $file_checked }/{ $all_files } archivo de música
progress_scanning_music_tags = Leyendo etiquetas del archivo de música { $file_checked }/{ $all_files }
progress_scanning_music_content_end = Comparando huella dactilar de { $file_checked }/{ $all_files } archivo de música
progress_scanning_music_content = Calculando huella dactilar de { $file_checked }/{ $all_files } archivo de música
progress_scanning_empty_folders = Escaneando carpeta { $folder_number }
progress_scanning_size = Escaneando tamaño del archivo { $file_number }
progress_scanning_size_name = Escaneando nombre y tamaño del archivo { $file_number }
progress_scanning_name = Escaneando nombre del archivo { $file_number }
progress_analyzed_partial_hash = Has analizado el hash parcial de { $file_checked }/{ $all_files } archivos
progress_analyzed_full_hash = Se ha analizado el hash completo de { $file_checked }/{ $all_files } archivos
progress_prehash_cache_loading = Cargando caché prehash
progress_prehash_cache_saving = Guardando caché prehash
progress_hash_cache_loading = Cargando caché hash
progress_hash_cache_saving = Guardando caché hash
progress_cache_loading = Cargando caché
progress_cache_saving = Guardando caché
progress_current_stage = Etapa actual:{ " " }
progress_all_stages = Todas las etapas:{ " " }
# Saving loading
@ -347,11 +443,12 @@ saving_loading_failed_to_create_config_file = Error al crear el archivo de confi
saving_loading_failed_to_read_config_file = No se puede cargar la configuración de "{ $path }" porque no existe o no es un archivo.
saving_loading_failed_to_read_data_from_file = No se pueden leer los datos del archivo "{ $path }", razón "{ $reason }".
saving_loading_orphan_data = Se encontraron datos huérfanos "{ $data }" en la línea "{ $line }".
saving_loading_not_valid = Ajustando "{ $data }" no existe en la versión actual de la aplicación.
saving_loading_not_valid = La configuración "{ $data }" no existe en la versión actual de la aplicación.
# Invalid symlinks
invalid_symlink_infinite_recursion = Recursión infinita
invalid_symlink_non_existent_destination = Archivo de destino no existente
invalid_symlink_non_existent_destination = Archivo de destino inexistente
# Other
selected_all_reference_folders = No se puede iniciar la búsqueda, cuando todos los directorios están establecidos como carpetas de referencia
searching_for_data = Buscando datos, puede tardar un tiempo, por favor espere...
text_view_messages = MENSAJES
text_view_warnings = ADVERTENCIA
@ -365,23 +462,24 @@ delete_question_label = ¿Está seguro que desea eliminar los archivos?
delete_all_files_in_group_title = Confirmación de borrar todos los archivos del grupo
delete_all_files_in_group_label1 = En algunos grupos se seleccionan todos los registros.
delete_all_files_in_group_label2 = ¿Estás seguro de que quieres eliminarlos?
delete_folder_failed = Error al eliminar la carpeta { $dir } porque la carpeta no existe, no tiene permisos o no está vacía.
delete_folder_failed = Error al eliminar la carpeta { $dir } porque la carpeta no existe, no tiene permiso o la carpeta no está vacía.
delete_items_label = { $items } archivos serán eliminados.
delete_items_groups_label = { $items } archivos de { $groups } grupos serán eliminados.
hardlink_failed = Error al vincular
hard_sym_invalid_selection_title_dialog = Selección no válida con algunos grupos
hard_sym_invalid_selection_label_1 = En algunos grupos sólo hay 1 registro seleccionado y será ignorado.
hard_sym_invalid_selection_label_2 = Para poder enlazar estos archivos, al menos 2 resultados en grupo deben ser seleccionados.
hard_sym_invalid_selection_label_1 = En algunos grupos sólo hay un registro seleccionado y será ignorado.
hard_sym_invalid_selection_label_2 = Para poder vincular estos archivos con el sistema, al menos dos resultados en el grupo deben ser seleccionados.
hard_sym_invalid_selection_label_3 = El primero en el grupo es reconocido como original y no se cambia, pero el segundo y posterior son modificados.
hard_sym_link_title_dialog = Confirmación de enlace
hard_sym_link_label = ¿Está seguro que desea enlazar estos archivos?
move_folder_failed = Error al mover la carpeta { $name }, razón { $reason }
move_file_failed = Error al mover el archivo { $name }, razón { $reason }
move_files_title_dialog = Elija la carpeta a la que desea mover los archivos duplicados
move_files_choose_more_than_1_path = Solo debe seleccionarse una ruta para poder copiar los archivos duplicados, seleccionados { $path_number }.
move_files_choose_more_than_1_path = Solo se puede seleccionar una ruta para poder copiar sus archivos duplicados, seleccionado { $path_number }.
move_stats = Mudado correctamente { $num_files }/{ $all_files } elementos
save_results_to_file = Resultados guardados en el archivo { $name }
save_results_to_file = Resultados guardados en archivos txt y json en la carpeta { $name }
search_not_choosing_any_music = ERROR: Debe seleccionar al menos una casilla de verificación con tipos de búsqueda de música.
search_not_choosing_any_broken_files = ERROR: Debe seleccionar al menos una casilla de verificación con el tipo de ficheros rotos comprobados.
include_folders_dialog_title = Carpetas a incluir
exclude_folders_dialog_title = Carpetas a excluir
include_manually_directories_dialog_title = Añadir directorio manualmente
@ -389,16 +487,13 @@ cache_properly_cleared = Caché correctamente borrada
cache_clear_duplicates_title = Limpiando caché duplicada
cache_clear_similar_images_title = Limpiando caché de imágenes similares
cache_clear_similar_videos_title = Limpiando caché de vídeos similares
cache_clear_message_label_1 = ¿Quieres borrar la caché de entradas desactualizadas?
cache_clear_message_label_1 = ¿Quiere borrar la caché de entradas obsoletas?
cache_clear_message_label_2 = Esta operación eliminará todas las entradas de caché que apunten a archivos no válidos.
cache_clear_message_label_3 = Esto puede acelerar un poco la carga/guardado en la caché.
cache_clear_message_label_4 = ATENCIÓN: La operación eliminará todos los datos almacenados en caché de unidades externas desconectadas, así que el hash tendrá que ser generado de nuevo.
cache_clear_message_label_3 = Esto puede acelerar ligeramente la carga/guardado en caché.
cache_clear_message_label_4 = ATENCIÓN: La operación eliminará todos los datos almacenados en caché de unidades externas desconectadas. Por lo tanto, cada hash tendrá que ser regenerado.
# Show preview
preview_temporary_file = Error al abrir el archivo de imagen temporal { $name }, razón { $reason }.
preview_0_size = No se puede crear la vista previa de la imagen { $name }, con 0 de ancho o alto.
preview_temporary_image_save = Error al guardar el archivo de imagen temporal en { $name }, razón { $reason }.
preview_temporary_image_remove = Error al eliminar el archivo de imagen temporal { $name }, razón { $reason }.
preview_failed_to_create_cache_dir = Error al crear el directorio { $name } necesario para la vista previa de la imagen, razón { $reason }.
preview_image_resize_failure = Error al redimensionar la imagen { $name }.
preview_image_opening_failure = Error al abrir la imagen { $name }, razón { $reason }
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = Grupo { $current_group }/{ $all_groups } ({ $images_in_group } imágenes)
compare_move_left_button = L

@ -1,5 +1,5 @@
# Window titles
window_settings_title = Options
window_settings_title = Paramètres
window_main_title = Czkawka (Hoquet)
window_progress_title = Analyse en cours
window_compare_images = Comparer les images
@ -9,25 +9,48 @@ general_close_button = Fermer
# Main window
music_title_checkbox = Titre de la page
music_artist_checkbox = Artiste
music_album_title_checkbox = Titre de lalbum
music_album_artist_checkbox = Artiste de lalbum
music_year_checkbox = Année
music_bitrate_checkbox = Débit binaire
music_genre_checkbox = Genre
music_length_checkbox = Longueur
music_comparison_checkbox = Comparaison approximative
music_checking_by_tags = Tags
music_checking_by_content = Contenu
same_music_seconds_label = Durée minimale de seconde de fragment
same_music_similarity_label = Différence maximale
same_music_tooltip =
La recherche de fichiers musicaux aux contenus similaires peut être configurée en définissant :
- La durée minimale d'un fragment pour que des fichiers musicaux soient identifiés comme similaires
- La différence maximale entre deux fragments testés
La clé pour arriver à de bons résultats est de trouver des combinaisons raisonnables de ces paramètres.
Fixer le temps minimum à 5 secondes et la différence maximale à 1.0, cherchera des fragments presque identiques dans les fichiers.
Un temps de 20 secondes et une différence maximale de 6.0 fonctionne bien pour trouver des remixes/versions live, etc.
Par défaut, chaque fichier musical est comparé à tous les autres et cela peut prendre beaucoup de temps lors du test de plusieurs fichier. Il est donc généralement préférable d'utiliser des dossiers de référence et de spécifier quels fichiers doivent être comparés les uns avec les autres (avec la même quantité de fichiers, la comparaison des empreintes sera au moins 4x plus rapide que sans dossier de référence).
music_comparison_checkbox_tooltip =
Il recherche des fichiers de musique similaires à l'aide de lintelligence artificielle, qui utilise l'apprentissage automatique pour supprimer des parenthèses d'une phrase, par ex. avec cette option activée, les fichiers en question seront considérés comme des doublons :
La recherche des fichiers de musique similaires est faite à laide d'intelligence artificielle qui utilise l'apprentissage machine pour supprimer les parenthèses dune phrase. Par exemple, avec cette option activée les fichiers en question seront considérés comme des doublons :
Świędziżłób --- Świędziżłób (Remix Lato 2021)
duplicate_case_sensitive_name = Sensible à la casse
duplicate_case_sensitive_name_tooltip =
Quand activé, groupe les enregistrements uniquement quand ils ont exactement le même nom, par exemple Żołd <-> Żołd
Désactiver cette option va regrouper les noms sans se préocupper de la casse, par exemple żoŁD <-> Żołd
duplicate_mode_size_name_combo_box = Taille et nom
duplicate_mode_name_combo_box = Nom
duplicate_mode_size_combo_box = Taille
duplicate_mode_hash_combo_box = Hachage
duplicate_hash_type_tooltip =
Czkawka offre 3 types de hachages, qui peuvent être utilisés :
Czkawka offre 3 types de hachages :
Blake3 - fonction de hachage cryptographique. Il est utilisé comme algorithme de hachage par défaut, car très rapide.
Blake3 - fonction de hachage cryptographique. Il est utilisé comme algorithme de hachage par défaut car très rapide.
CRC32 - fonction de hachage simple. Cela devrait être plus rapide que Blake3, mais avec probablement de très rares collisions.
CRC32 - fonction de hachage simple qui devrait être plus rapide que Blake3. Peut, très rarement, provoquer des collisions.
XXH3 - très similaire en terme de performances et de qualité de hachage à Blake3, de sorte que de tels modes peuvent être facilement utilisés.
XXH3 - très similaire en terme de performances et de qualité de hachage à Blake3 mais non cryptographique. De ce fait ils peuvent facilement être changés l'un pour l'autre.
duplicate_check_method_tooltip =
Pour l'instant, Czkawka offre trois types de méthode pour trouver des doublons par:
@ -35,20 +58,33 @@ duplicate_check_method_tooltip =
Taille - Trouve des fichiers qui ont la même taille.
Hachage - Trouve des fichiers qui ont le même contenu. Ce mode permet de hacher les fichiers et de les comparer ensuite pour trouver les doublons. Ce mode est le moyen le plus sûr de trouver les doublons. L'outil utilise lourdement le cache, donc les analyses secondaires et ultérieures des mêmes données devraient être beaucoup plus rapides que la première.
Hachage - Trouve des fichiers qui ont le même contenu. Ce mode permet de hacher le fichier puis de comparer ensuite le hash pour trouver les doublons. Ce mode est le moyen le plus sûr de trouver les doublons. L'application utilisant massivement le cache, les analyses suivantes des mêmes données devraient être beaucoup plus rapides que la première.
image_hash_size_tooltip =
Czkawka offre une taille variable de hachage généré pour chaque image. Une taille de hachage plus importante permet de trouver des images avec moins de différences entre les images, mais aussi un peu plus lent à utiliser.
Chaque image vérifiée produit un hachage spécial qui peut être comparé les uns aux autres, et une petite différence entre elles signifie que ces images sont similaires.
La taille du hachage 8 est assez bonne pour trouver des images qui ne sont qu'un peu similaires à l'original. Avec un plus grand ensemble d'images (>1000), cela produira une grande quantité de faux positifs, donc je recommande d'utiliser une plus grande taille de hachage dans ce cas.
16 est la taille par défaut du hachage, ce qui est un bon compromis entre trouver même un peu des images similaires et n'avoir qu'une petite quantité de collisions de hachage.
32 et 64 hachages ne trouvent que des images très similaires, mais devraient avoir presque pas de faux positifs (peut-être sauf certaines images avec canal alpha).
image_resize_filter_tooltip =
To compute hash of image, the library must first resize it.
Depend on chosen algorithm, the resulting image used to calculate hash will looks a little different.
The fastest algorithm to use, but also the one which gives the worst results, is Nearest. It is enabled by default, because with 16x16 hash size lower quality it is not really visible.
La valeur par défaut pour le hachage est de 8 octets, ce qui permet de trouver des images très similaires et différentes. Les hashs 16 et 32 ne doivent être utilisés que pour des images presque identiques. Le hash de 64 octets ne devrait pas être utilisé, sauf situation où de petites différences sont nécessaires pour trouver
image_resize_filter_tooltip = Pour calculer le hachage de l'image, la bibliothèque doit d'abord la redimensionner. En fonction de l'algorithme choisi, l'image résultée sera peu différente. L'algorithme le plus rapide à utiliser, mais aussi celui qui donne les pires résultats est Nearest.
image_hash_alg_tooltip = Les utilisateurs peuvent choisir un des nombreux algorithmes de calcul du hachage. Chacun a des points forts et des points faibles et donnera parfois de meilleurs résultats pour des images différentes, parfois pires, afin de choisir le meilleur, des tests manuels sont nécessaires
main_notebook_image_fast_compare = Comparaison rapide
main_notebook_image_fast_compare_tooltip =
Accélère la recherche et la comparaison des hashs.
With 8x8 hash size it is recommended to use a different algorithm than Nearest, to have better groups of images.
image_hash_alg_tooltip =
Les utilisateurs peuvent choisir parmi de nombreux algorithmes pour calculer le hash.
En opposé au mode normal où chaque hash est comparé les uns aux autres x fois, où x est la similitude de l'utilisateur choisi, dans ce mode, une seule comparaison est utilisée.
Chacun a des points forts et des points faibles et donnera parfois des résultats meilleurs et parfois pires pour des images différentes.
Cette option est recommandée lors de la comparaison de >10000 images avec la similitude non 0(Very High) .
Par conséquent, des tests manuels sont requis pour déterminer celui qui donnera le meileur résultat pour vous.
big_files_mode_combobox_tooltip = Permet de rechercher les fichiers les plus petits ou les plus grands
big_files_mode_label = Fichiers cochés
big_files_mode_smallest_combo_box = Le plus petit
big_files_mode_biggest_combo_box = Le plus grand
main_notebook_duplicates = Fichiers en double
main_notebook_empty_directories = Dossiers vides
main_notebook_big_files = Gros fichiers
@ -59,6 +95,7 @@ main_notebook_similar_videos = Vidéos similaires
main_notebook_same_music = Doublons de musique
main_notebook_symlinks = Liens symboliques invalides
main_notebook_broken_files = Fichiers cassés
main_notebook_bad_extensions = Mauvaises extensions
main_tree_view_column_file_name = Nom du fichier
main_tree_view_column_folder_name = Nom du dossier
main_tree_view_column_path = Chemin d'accès
@ -69,12 +106,15 @@ main_tree_view_column_dimensions = Dimensions
main_tree_view_column_title = Titre
main_tree_view_column_artist = Artiste
main_tree_view_column_year = Année
main_tree_view_column_album_title = Titre de lalbum
main_tree_view_column_album_artist = Artiste de lalbum
main_tree_view_column_bitrate = Débit binaire
main_tree_view_column_length = Longueur
main_tree_view_column_genre = Genre
main_tree_view_column_symlink_file_name = Nom du lien symbolique
main_tree_view_column_symlink_folder = Dossier de lien symbolique
main_tree_view_column_symlink_folder = Dossier du lien symbolique
main_tree_view_column_destination_path = Chemin de destination
main_tree_view_column_type_of_error = Type d'erreur
main_tree_view_column_current_extension = Extension actuelle
main_tree_view_column_proper_extensions = Extension correcte
main_label_check_method = Méthode de vérification
main_label_hash_type = Type de hachage
main_label_hash_size = Taille du hachage
@ -84,11 +124,15 @@ main_label_max_size = Max
main_label_shown_files = Nombre de fichiers affichés
main_label_resize_algorithm = Algorithme de redimensionnement
main_label_similarity = Similarité{ " " }
main_check_box_broken_files_audio = Audio
main_check_box_broken_files_pdf = Pdf
main_check_box_broken_files_archive = Archiver
main_check_box_broken_files_image = Image
check_button_general_same_size = Ignorer la même taille
check_button_general_same_size_tooltip = Ignorer les résultats, les fichiers dont la taille est identique - généralement ce sont des doublons 1:1
check_button_general_same_size_tooltip = Ignorer les fichiers avec la même taille dans les résultats - généralement ce sont des doublons 1:1
main_label_size_bytes_tooltip = Taille des fichiers qui seront utilisés lors de l'analyse
# Upper window
upper_tree_view_included_folder_column_title = Dossiers à rechercher
upper_tree_view_included_folder_column_title = Dossiers dans lesquels chercher
upper_tree_view_included_reference_column_title = Dossiers de référence
upper_recursive_button = Récursif
upper_recursive_button_tooltip = Si sélectionné, rechercher également les fichiers qui ne sont pas placés directement dans les dossiers choisis.
@ -98,69 +142,94 @@ upper_remove_included_button = Retirer
upper_manual_add_excluded_button = Ajout manuel
upper_add_excluded_button = Ajouter
upper_remove_excluded_button = Retirer
upper_manual_add_included_button_tooltip = Permet d'ajouter un nom de répertoire à la recherche manuelle.
upper_manual_add_included_button_tooltip =
Ajouter manuellement le nom du répertoire à rechercher.
Pour ajouter plusieurs chemins à la fois, séparez-les avec « ; »
« /home/roman;/home/rozkaz » ajoutera deux répertoires « /home/roman » et « /home/rozkaz »
upper_add_included_button_tooltip = Ajouter un nouveau répertoire à la recherche.
upper_remove_included_button_tooltip = Supprimer le répertoire de la recherche.
upper_manual_add_excluded_button_tooltip = Permet d'ajouter des noms de répertoires exclus manuellement.
upper_add_excluded_button_tooltip = Ajouter un répertoire à exclure dans la recherche.
upper_remove_excluded_button_tooltip = Supprimer le répertoire de lexclusion.
upper_manual_add_excluded_button_tooltip =
Ajouter manuellement un nom de répertoire exclu.
Pour ajouter plusieurs chemins à la fois, séparez-les ave « ; »
« /home/roman;/home/krokiet » ajoutera deux répertoires « /home/roman » et « /home/keokiet »
upper_add_excluded_button_tooltip = Ajouter un répertoire à exclure de la recherche.
upper_remove_excluded_button_tooltip = Retirer le répertoire de la liste de ceux exclus.
upper_notebook_items_configuration = Configuration des éléments
upper_notebook_excluded_directories = Répertoires exclus
upper_notebook_included_directories = Répertoires inclus
upper_allowed_extensions_tooltip =
Les extensions autorisées doivent être séparées par des virgules (par défaut, toutes sont disponibles).
Les extensions autorisées doivent être séparées par des virgules (toutes sont disponibles par défaut).
Les Macros suivantes, qui ajoutent plusieurs extensions à la fois, sont également disponibles : IMAGE, VIDEO, MUSIC, TEXT.
Macros IMAGE, VIDEO, MUSIC, TEXT qui ajoutent plusieurs extensions à la fois sont également disponibles.
Exemple d'utilisation : « .exe, IMAGE, VIDEO, .rar, 7z » - signifie que les fichiers images (par exemple jpg, png), des vidéos (par exemple avi, mp4), exe, rar et 7z seront scannés.
upper_excluded_extensions_tooltip =
Liste des fichiers désactivés qui seront ignorés lors de l'analyse.
Exemple d'utilisation ".exe, IMAGE, VIDEO, .rar, 7z" - cela signifie que les fichiers image (par ex. jpg, png), vidéo (par ex., avi, mp4), exe, rar et 7z seront analysés.
Lorsque vous utilisez des extensions autorisées et désactivées, celle-ci a une priorité plus élevée, donc le fichier ne sera pas vérifié.
upper_excluded_items_tooltip =
Les éléments exclus doivent contenir des caractères génériques comme * et doivent être séparés par des virgules.
Ceci est plus lent que les répertoires exclus, donc utilisez-les attentivement.
Les éléments exclus doivent contenir le caractère joker « * » et être séparés par des virgules.
Ceci est plus lent que les répertoires exclus, donc à utiliser avec prudence.
upper_excluded_items = Éléments exclus :
upper_allowed_extensions = Extensions autorisées :
upper_excluded_extensions = Extensions désactivées :
# Popovers
popover_select_all = Tout sélectionner
popover_unselect_all = Désélectionner tout
popover_unselect_all = Tout désélectionner
popover_reverse = Inverser la sélection
popover_select_all_except_oldest = Tout sélectionner sauf le plus ancien
popover_select_all_except_newest = Tout sélectionner sauf le plus récent
popover_select_one_oldest = Sélectionner un plus ancien
popover_select_one_newest = Sélectionner la version la plus récente
popover_select_custom = Sélectionner une personnalisation
popover_unselect_custom = Déselection personalisée
popover_select_one_oldest = Sélectionner un élément plus ancien
popover_select_one_newest = Sélectionner un élément récent
popover_select_custom = Sélection personnalisée
popover_unselect_custom = Annuler la sélection personnalisée
popover_select_all_images_except_biggest = Tout sélectionner sauf le plus gros
popover_select_all_images_except_smallest = Tout sélectionner sauf le plus petit
popover_custom_path_check_button_entry_tooltip =
Permet de sélectionner les enregistrements par son chemin.
Sélectionner les enregistrements par chemin.
Exemple d'utilisation :
/home/pimpek/rzecz.txt peut être trouvé avec /home/pim*
« /home/pimpek/rzecz.txt » peut être trouvé avec « /home/pim* »
popover_custom_name_check_button_entry_tooltip =
Permet de sélectionner les enregistrements par nom de fichier.
Sélectionner les enregistrements par nom de fichier.
Utilisation d'exemple :
/usr/ping/pong.txt peut être trouvé avec *ong*
Exemple d'utilisation :
« /usr/ping/pong.txt » peut être trouvé avec « *ong* »
popover_custom_regex_check_button_entry_tooltip =
Permet de sélectionner les enregistrements par Regex.
Sélectionner les enregistrements par Regex spécifié.
Dans ce mode, le texte recherché est le Chemin avec le Nom.
Avec ce mode, le texte recherché est le chemin avec le nom.
Exemple d'utilisation:
« /usr/bin/ziemniak.txt » peut être trouvé avec « /ziem[a-z]+ »
Utilisation d'exemple :
/usr/bin/ziemniak. xt peut être trouvé avec /ziem[a-z]+
Cela utilise l'implémentation par défaut de Rust regex : https://docs.rs/regex.
popover_custom_case_sensitive_check_button_tooltip =
Active la détection sensible à la casse.
Cela utilise limplémentation par défaut de la regex Rust, vous pouvez donc en savoir plus à ce sujet dans https://docs.rs/regex.
Si désactivé, « /home/* » trouve « /HoMe/roman » et « /home/roman ».
popover_custom_not_all_check_button_tooltip =
Empêche la sélection de tous les enregistrements du groupe.
Empêche la sélection de tous les enregistrements dans le groupe.
Ceci est activé par défaut, car dans la plupart des cas, l'utilisateur ne veut pas supprimer à la fois les fichiers originaux et les doublons mais souhaite conserver au moins un fichier.
Ceci est activé par défaut car, dans la plupart des cas, vous ne voulez pas supprimer à la fois les fichiers originaux et les doublons mais souhaitez laisser au moins un fichier.
Avertissement : Ce paramètre ne fonctionne pas si l'utilisateur a déjà sélectionné tous les résultats dans le groupe manuellement.
AVERTISSEMENT : ce réglage ne fonctionne pas si vous avez déjà sélectionné manuellement tous les résultats dans un groupe.
popover_custom_regex_path_label = Chemin d'accès
popover_custom_regex_name_label = Nom
popover_custom_regex_regex_label = Chemin de Regex + Nom
popover_custom_regex_regex_label = Chemin d'accès Regex + Nom
popover_custom_case_sensitive_check_button = Sensible à la casse
popover_custom_all_in_group_label = Ne pas sélectionner tous les enregistrements du groupe
popover_custom_mode_unselect = Désélectionner la personnalisation
popover_custom_mode_select = Sélectionner la personnalisation
popover_sort_file_name = Nom du fichier
popover_sort_folder_name = Nom du dossier
popover_sort_full_name = Nom complet
popover_sort_size = Taille
popover_sort_selection = Sélection
popover_invalid_regex = La regex est invalide
popover_valid_regex = La regex est valide
# Bottom buttons
@ -171,76 +240,92 @@ bottom_save_button = Enregistrer
bottom_symlink_button = Lien symbolique
bottom_hardlink_button = Lien dur
bottom_move_button = Déplacer
bottom_search_button_tooltip = Commencer à rechercher des fichiers/dossiers.
bottom_select_button_tooltip = Sélectionner les enregistrements. Seuls les fichiers/dossiers sélectionnés peuvent être traités plus tard.
bottom_sort_button = Trier
bottom_search_button_tooltip = Lancer la recherche
bottom_select_button_tooltip = Sélectionnez les enregistrements. Seuls les fichiers/dossiers sélectionnés pourront être traités plus tard.
bottom_delete_button_tooltip = Supprimer les fichiers/dossiers sélectionnés.
bottom_save_button_tooltip = Enregistrer les données de la recherche sur un fichier
bottom_save_button_tooltip = Enregistrer les données de la recherche dans un fichier
bottom_symlink_button_tooltip =
Crée des liens symboliques.
Ne fonctionne que si au moins 2 résultats sont sélectionnés dans le groupe.
Le premier est inchangé et le second et les suivants sont liés au premier.
Créer des liens symboliques.
Ne fonctionne que si au moins deux résultats dans un groupe sont sélectionnés.
Le premier reste inchangé, tous les suivants sont transformés en lien symbolique vers ce premier résultat.
bottom_hardlink_button_tooltip =
Crée des liens durs.
Ne fonctionne que si au moins 2 résultats sont sélectionnés dans le groupe.
Le premier est inchangé et le second et les suivants sont liés en dur au premier.
Créer des liens durs.
Ne fonctionne que si au moins deux résultats dans un groupe sont sélectionnés.
Le premier reste inchangé, tous les suivants sont transformés en lien dur vers ce premier résultat.
bottom_hardlink_button_not_available_tooltip =
Créer des liens durs.
Le bouton est désactivé car des liens durs ne peuvent être créés.
Les liens durs ne fonctionnent quavec les privilèges administrateur sous Windows, assurez-vous d'éxécuter lapplication en tant quadministrateur.
Si lapplication fonctionne déjà avec ces privilèges, vérifiez les signalements de bogues similaires sur GitHub.
bottom_move_button_tooltip =
Déplace les fichiers dans le dossier choisi.
Il copie tous les fichiers dans le dossier sans préserver l'arborescence des répertoires.
En essayant de déplacer 2 fichiers avec le même nom de dossier, le second échouera et affichera l'erreur.
bottom_show_errors_tooltip = Afficher/Masquer le panneau d'erreur du bas.
Déplace les fichiers vers le répertoire choisi.
Ceci copie tous les fichiers dans le répertoire cible sans préserver l'arborescence du répertoire source.
Si on tente de déplacer deux fichiers avec le même nom vers le dossier, le second échouera et un message d'erreur s'affichera.
bottom_sort_button_tooltip = Trie les fichiers/dossiers selon la méthode sélectionnée.
bottom_show_errors_tooltip = Afficher/Masquer le panneau de texte du bas.
bottom_show_upper_notebook_tooltip = Afficher/Masquer le panneau supérieur du bloc-notes.
# Progress Window
progress_stop_button = Arrêter
progress_stop_additional_message = Arrêt demandé
# About Window
about_repository_button_tooltip = Lien vers la page du dépôt avec le code source.
about_donation_button_tooltip = Lien vers la page des dons.
about_instruction_button_tooltip = Lien vers la page d'instruction.
about_translation_button_tooltip = Lien vers la page Crowdin avec les traductions d'applications. Officiellement le polonais et l'anglais sont pris en charge, mais toute aide avec une autre langue sera appréciée.
about_translation_button_tooltip = Lien vers la page Crowdin avec les traductions de lapplication. Le polonais et l'anglais sont officiellement pris en charge.
about_repository_button = Dépôt
about_donation_button = Faire un don
about_instruction_button = Instructions
about_translation_button = Traduction
# Header
header_setting_button_tooltip = Ouvre la fenêtre des paramètres.
header_about_button_tooltip = Ouvre la boîte de dialogue avec les informations sur l'application.
header_about_button_tooltip = Ouvre la boîte de dialogue contenant les informations sur l'application.
# Settings
## General
settings_save_at_exit_button_tooltip = Enregistre la configuration dans un fichier lors de la fermeture de l'application.
settings_number_of_threads = Nombre de threads utilisés
settings_number_of_threads_tooltip = Nombre de threads utilisés. « 0 » signifie que tous les threads disponibles seront utilisés.
settings_label_restart = Vous devez redémarrer lapplication pour appliquer les réglages!
settings_ignore_other_filesystems = Ignorer les autres systèmes de fichiers (Linux uniquement)
settings_ignore_other_filesystems_tooltip =
ignore les fichiers qui ne sont pas dans le même système de fichiers que les répertoires recherchés.
Fonctionne de la même manière que l'option « -xdev » de la commande « find » sous Linux
settings_save_at_exit_button_tooltip = Enregistrer la configuration dans un fichier à la fermeture de l'application.
settings_load_at_start_button_tooltip =
Chargement de la configuration à partir dun fichier.
Ne pas sélectionner cette option chargera les paramètres par défaut.
settings_confirm_deletion_button_tooltip = Affiche la boîte de dialogue de confirmation lorsque vous cliquez sur le bouton Supprimer.
settings_confirm_link_button_tooltip = Affiche la boîte de dialogue de confirmation lorsque vous cliquez sur le bouton lien symbolique/lien en dur.
settings_confirm_group_deletion_button_tooltip = Affiche la boîte de dialogue lorsque vous essayez de supprimer tous les enregistrements du groupe.
settings_show_text_view_button_tooltip = Affiche le panneau d'erreur en bas de page.
settings_use_cache_button_tooltip = Option permettant de ne pas utiliser la fonctionnalité de cache.
settings_save_also_as_json_button_tooltip = Enregistrer le cache en lecture au format JSON humain. Il est possible de modifier son contenu. Le cache de ce fichier sera automatiquement lu par l'application si le cache de format binaire (avec l'extension de la corbeille) est manquant.
settings_use_trash_button_tooltip = Lorsquelle est activé, elle déplace les fichiers vers la corbeille au lieu de les supprimer définitivement.
settings_language_label_tooltip = Permet de choisir la langue de l'interface à partir des langues disponibles.
settings_save_at_exit_button = Enregistrer la configuration à la sortie
settings_load_at_start_button = Charger la configuration au démarrage
settings_confirm_deletion_button = Afficher la boîte de dialogue de confirmation lors de la suppression des fichiers
settings_confirm_link_button = Afficher la boîte de dialogue de confirmation lorsque des liens en dur/liens symboliques sont des fichiers
settings_confirm_group_deletion_button = Afficher la boîte de dialogue de confirmation lors de la suppression de tous les fichiers du groupe
Charger la configuration à partir du fichier à l'ouverture de l'application.
Si désactivé, les paramètres par défaut seront utilisés.
settings_confirm_deletion_button_tooltip = Afficher une boîte de dialogue de confirmation lorsque vous cliquez sur le bouton Supprimer.
settings_confirm_link_button_tooltip = Afficher une boîte de dialogue de confirmation lorsque vous cliquez sur le bouton « hard/symlink ».
settings_confirm_group_deletion_button_tooltip = Afficher une boîte de dialogue d'avertissement lorsque vous essayez de supprimer tous les enregistrements du groupe.
settings_show_text_view_button_tooltip = Afficher le panneau de texte en bas de l'interface utilisateur.
settings_use_cache_button_tooltip = Utiliser le cache de fichiers.
settings_save_also_as_json_button_tooltip = Enregistrer le cache au format JSON (lisible par un humain). Il est possible de modifier son contenu. Le contenu de ce fichier sera lu automatiquement par l'application si le cache au format binaire (extension .bin) est manquant.
settings_use_trash_button_tooltip = Déplace les fichiers vers la corbeille au lieu de les supprimer définitivement.
settings_language_label_tooltip = Langue de l'interface utilisateur.
settings_save_at_exit_button = Enregistrer la configuration à la fermeture de l'application
settings_load_at_start_button = Charger la configuration à l'ouverture de l'application
settings_confirm_deletion_button = Afficher une boîte de dialogue de confirmation lors de la suppression de fichiers
settings_confirm_link_button = Afficher une boîte de dialogue de confirmation lorsque des liens en dur ou symboliques vers des fichiers sont créés
settings_confirm_group_deletion_button = Afficher une boîte de dialogue de confirmation lors de la suppression de tous les fichiers d'un groupe
settings_show_text_view_button = Afficher le panneau de texte du bas
settings_use_cache_button = Utiliser le cache
settings_save_also_as_json_button = Enregistrer le cache aussi dans le fichier JSON
settings_save_also_as_json_button = Également enregistrer le cache en tant que fichier JSON
settings_use_trash_button = Déplacer les fichiers supprimés vers la corbeille
settings_language_label = Langue
settings_multiple_delete_outdated_cache_checkbutton = Supprimer automatiquement les entrées de cache obsolètes
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
Permet de supprimer les résultats de cache obsolètes qui pointent vers des fichiers inexistants.
Supprimer du cache les résultats obsolètes pointant vers des fichiers inexistants.
Lorsque cette option est activée, l'application s'assure lors du chargement des enregistrements, que tous les points vers des fichiers valides et ignorent les fichiers cassés.
Lorsque cette option est activée, l'application s'assure lors du chargement des enregistrements que tous pointent vers des fichiers valides (les fichiers cassés sont ignorés).
La désactivation de cette option aidera à scanner des fichiers sur des disques externes, de sorte que les entrées de cache à leur sujet ne seront pas purgées lors de la prochaine analyse.
Désactiver cette option facilitera l'analyse de fichiers sur des disques externes: les entrées de cache les concernant ne seront pas purgées lors de la prochaine analyse.
Si vous avez des centaines de milliers d'enregistrements en cache, il est conseillé d'activer cette option pour accélérer le chargement et l'enregistrement du cache au démarrage et à la fin de la numérisation.
Il est conseillé de d'activer cette option quand des centaines de milliers d'enregistrements sont dans le cache. Ceci permettra d'accélérer le chargement et la sauvegarde du cache au démarrage et à la fin de l'analyse.
settings_notebook_general = Généraux
settings_notebook_duplicates = Doublons
settings_notebook_images = Images similaires
@ -248,40 +333,40 @@ settings_notebook_videos = Vidéo similaire
## Multiple - settings used in multiple tabs
settings_multiple_image_preview_checkbutton_tooltip = Afficher l'aperçu à droite lors de la sélection du fichier image.
settings_multiple_image_preview_checkbutton_tooltip = Affiche l'aperçu à droite (lors de la sélection d'un fichier image).
settings_multiple_image_preview_checkbutton = Afficher l'aperçu de l'image
settings_multiple_clear_cache_button_tooltip =
Effacer manuellement le cache des entrées obsolètes.
Ne devrait être utilisé que si le nettoyage automatique a été désactivé.
settings_multiple_clear_cache_button = Supprimer les résultats obsolètes du cache des images
Vider manuellement le cache des entrées obsolètes.
À utiliser uniquement si le nettoyage automatique a été désactivé.
settings_multiple_clear_cache_button = Supprimer les résultats périmés du cache.
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
Masque tous les fichiers sauf un, si sont des points vers les mêmes données (sont reliés en dur).
Masque tous les fichiers, sauf un, si tous pointent vers les mêmes données (avec lien en dur).
Par exemple. dans le cas où sur le disque il y a 7 fichiers qui sont reliés à des données spécifiques et un fichier différent avec les mêmes données mais un inode différent, alors dans le moteur de recherche en double ne sera visible qu'un seul fichier et un seul fichier provenant de fichiers reliés par des liens durs.
Exemple : soient sur le disque sept fichiers reliés à des données spécifiques et un fichier différent avec les mêmes données mais un inode différent ; dans le module de recherche des doublons seuls un fichier unique et un fichier provenant des liens en dur seront affichés.
settings_duplicates_minimal_size_entry_tooltip =
Permet de définir la taille minimale du fichier, qui sera mis en cache.
Définit la taille minimale du fichier qui sera mis en cache.
Choisir une valeur plus petite, générera plus d'enregistrements qui accéléreront la recherche, mais ralentiront le chargement/sauvegarde de la cache.
Choisir une valeur plus petite générera plus d'enregistrements. Cela accélérera la recherche, mais ralentira le chargement/l'enregistrement du cache.
settings_duplicates_prehash_checkbutton_tooltip =
Active la mise en cache du prehash(hash calculé à partir d'une petite partie du fichier) qui permet de jeter plus tôt les résultats non dupliqués.
Active la mise en cache du prehash (un hachage calculé à partir d'une petite partie du fichier) qui permet un rejet plus rapide des résultats non dupliqués.
Il est désactivé par défaut car il peut causer dans certaines situations des ralentissements.
Il est désactivé par défaut car il peut causer des ralentissements dans certaines situations.
Il est fortement recommandé de l'utiliser lors de la numérisation de centaines de milliers ou de millions de fichiers, car il peut accélérer la recherche plusieurs fois.
settings_duplicates_prehash_minimal_entry_tooltip = Taille minimale des entrées en cache.
settings_duplicates_hide_hard_link_button = Cacher les liens durs (uniquement Linux et MacOS)
Il est fortement recommandé de l'utiliser lors de la numérisation de centaines de milliers ou de millions de fichiers, car il peut accélérer la recherche de manière géométrique.
settings_duplicates_prehash_minimal_entry_tooltip = Taille minimale de l'entrée en cache.
settings_duplicates_hide_hard_link_button = Masquer les liens en dur (Linux et macOS uniquement)
settings_duplicates_prehash_checkbutton = Utiliser le cache de prehash
settings_duplicates_minimal_size_cache_label = Taille minimale des fichiers en octets enregistrés dans le cache
settings_duplicates_minimal_size_cache_prehash_label = Taille minimale des fichiers en octets enregistrés dans le cache de préhachage
settings_duplicates_minimal_size_cache_label = Taille minimale des fichiers (en octets) enregistrés dans le cache
settings_duplicates_minimal_size_cache_prehash_label = Taille minimale des fichiers (en octets) enregistrés dans le cache de préhachage
## Saving/Loading settings
settings_saving_button_tooltip = Enregistrer la configuration des paramètres actuels dans un fichier.
settings_loading_button_tooltip = Charger les paramètres à partir du fichier et remplacer la configuration actuelle avec eux.
settings_reset_button_tooltip = Réinitialiser la configuration actuelle à la configuration par défaut.
settings_saving_button_tooltip = Enregistrez les paramètres de configuration actuels dans un fichier.
settings_loading_button_tooltip = Charger les paramètres à partir d'un fichier pour remplacer la configuration actuelle.
settings_reset_button_tooltip = Réinitialiser la configuration actuelle pour revenir à celle par défaut.
settings_saving_button = Enregistrer la configuration
settings_loading_button = Charger la configuration
settings_reset_button = Réinitialiser la configuration
@ -289,116 +374,126 @@ settings_reset_button = Réinitialiser la configuration
## Opening cache/config folders
settings_folder_cache_open_tooltip =
Ouvre le dossier où sont stockés les fichiers txt avec le cache.
Ouvre le dossier où sont stockés les fichiers « .txt » de cache.
Les modifier peut causer l'affichage de résultats invalides mais les modifier (par exemple le chemin peut faire gagner du temps lorsque vous déplacez une grande quantité de fichiers à un endroit différent.
La modification des fichiers de cache peut provoquer l'affichage de résultats invalides. Cependant, la modification du chemin peut faire gagner du temps lorsque une grande quantité de fichiers est déplacée vers un autre emplacement.
Vous pouvez copier ces fichiers entre ordinateurs pour gagner du temps sur l'analyse à nouveau pour les fichiers (bien sûr s'ils ont une structure de répertoire similaire).
Vous pouvez copier ces fichiers entre ordinateurs pour gagner du temps sur une nouvelle analyse de fichiers (à condition, bien sûr, qu'ils aient une structure de répertoire similaire).
En cas de problème avec le cache, ces fichiers peuvent être supprimés, l'application les régénèrera automatiquement.
En cas de problèmes avec le cache, ces fichiers peuvent être supprimés. L'application les régénèrera automatiquement.
settings_folder_settings_open_tooltip =
Ouvre le dossier où la configuration de Czkawka est stockée.
Les modifier à la main peut endommager votre flux de travail.
AVERTISSEMENT : modifier manuellement la configuration peut endommager votre workflow.
settings_folder_cache_open = Ouvrir le dossier de cache
settings_folder_settings_open = Ouvrir le dossier des paramètres
# Compute results
compute_stopped_by_user = La recherche a été arrêtée par l'utilisateur
compute_stopped_by_user = La recherche a été interrompue par l'utilisateur
compute_found_duplicates_hash_size = { $number_files } doublons trouvés dans { $number_groups } groupes qui ont pris { $size }
compute_found_duplicates_name = { $number_files } doublons trouvés dans les groupes { $number_groups }
compute_found_duplicates_name = { $number_files } doublons trouvés dans { $number_groups } groupes
compute_found_empty_folders = { $number_files } dossiers vides trouvés
compute_found_empty_files = { $number_files } fichiers vides trouvés
compute_found_big_files = { $number_files } grands fichiers trouvés
compute_found_big_files = { $number_files } gros fichiers trouvés
compute_found_temporary_files = { $number_files } fichiers temporaires trouvés
compute_found_images = { $number_files } images similaires trouvées dans les groupes { $number_groups }
compute_found_videos = { $number_files } vidéos similaires trouvées dans les groupes { $number_groups }
compute_found_music = { $number_files } fichiers de musique similaires trouvés dans les groupes { $number_groups }
compute_found_images = { $number_files } images similaires trouvées dans { $number_groups } groupes
compute_found_videos = { $number_files } vidéos similaires trouvées dans { $number_groups } groupes
compute_found_music = { $number_files } fichiers de musique similaires trouvés dans { $number_groups } groupes
compute_found_invalid_symlinks = { $number_files } liens symboliques invalides trouvés
compute_found_broken_files = { $number_files } fichiers cassés trouvés
compute_found_bad_extensions = { $number_files } fichiers avec des extensions invalides trouvés
# Progress window
progress_scanning_general_file = Analyse du fichier { $file_number }
progress_scanning_extension_of_files = Vérification de l'extension du fichier { $file_checked }/{ $all_files }
progress_scanning_broken_files = Vérification du fichier { $file_checked }/{ $all_files }
progress_scanning_video = Hachage de la vidéo { $file_checked }/{ $all_files }
progress_scanning_image = Hachage de l'image { $file_checked }/{ $all_files }
progress_comparing_image_hashes = Comparaison du hachage de l'image { $file_checked }/{ $all_files }
progress_scanning_music_tags_end = Comparaison des tags du fichier de musique { $file_checked }/{ $all_files }
progress_scanning_music_tags = Lecture des balises du fichier de musique { $file_checked }/{ $all_files }
progress_scanning_music_tags_end = Comparaison des tags du fichier audio { $file_checked }/{ $all_files }
progress_scanning_music_tags = Lecture des balises du fichier audio { $file_checked }/{ $all_files }
progress_scanning_music_content_end = Comparaison de l'empreinte numérique du fichier audio { $file_checked }/{ $all_files }
progress_scanning_music_content = Calcul de l'empreinte numérique du fichier audio { $file_checked }/{ $all_files }
progress_scanning_empty_folders = Analyse du dossier { $folder_number }
progress_scanning_size = Analyse de la taille du fichier { $file_number }
progress_scanning_size_name = Analyse du nom et de la taille du fichier { $file_number }
progress_scanning_name = Analyse du nom du fichier { $file_number }
progress_analyzed_partial_hash = Hash partiel analysé des fichiers { $file_checked }/{ $all_files }
progress_analyzed_full_hash = Hash complet analysé des fichiers { $file_checked }/{ $all_files }
progress_current_stage = Étape actuelle:{ " " }
progress_all_stages = Toutes les étapes:{ " " }
progress_analyzed_partial_hash = Analyse partielle du hash de { $file_checked }/{ $all_files } fichiers
progress_analyzed_full_hash = Analyse complète du hash de { $file_checked }/{ $all_files } fichiers
progress_prehash_cache_loading = Chargement du cache du prehash
progress_prehash_cache_saving = Sauvegarde du cache du prehash
progress_hash_cache_loading = Chargement du cache de hachage
progress_hash_cache_saving = Sauvegarde du cache de hachage
progress_cache_loading = Chargement de la cache
progress_cache_saving = Sauvegarde du cache
progress_current_stage = Étape actuelle :{ " " }
progress_all_stages = Toutes les étapes :{ " " }
# Saving loading
saving_loading_saving_success = Configuration enregistrée dans le fichier { $name }.
saving_loading_saving_failure = Impossible d'enregistrer les données de configuration dans le fichier { $name }.
saving_loading_reset_configuration = La configuration actuelle a été effacée.
saving_loading_loading_success = Configuration de l'application correctement chargée.
saving_loading_invalid_string = Pour la clé "{ $key }" trouvé résultat invalide - "{ $result }" qui n'est pas une chaîne.
saving_loading_invalid_int = Pour la clé "{ $key }" trouvé résultat invalide - "{ $result }" qui n'est pas un entier.
saving_loading_invalid_bool = Pour la clé "{ $key }" trouvé résultat invalide - "{ $result }" qui n'est pas un bool.
saving_loading_decode_problem_bool = Impossible de décoder le bool de la clé "{ $key }" trouvé "{ $result }" mais les valeurs autorisées sont 0, 1, true ou false.
saving_loading_saving_same_keys = Tentative de sauvegarde du paramètre avec la clé «{ $key }».
saving_loading_invalid_string = Résultat invalide trouvé pour la clé "{ $key }" - "{ $result }" n'est pas une chaîne.
saving_loading_invalid_int = Résultat invalide trouvé pour la clé "{ $key }" - "{ $result }" n'est pas un entier.
saving_loading_invalid_bool = Résultat invalide trouvé pour la clé "{ $key }" - "{ $result }" n'est pas un booléen.
saving_loading_decode_problem_bool = Impossible de décoder le booléen de la clé "{ $key }". Trouvé "{ $result }" mais les valeurs autorisées sont 0, 1, true ou false.
saving_loading_saving_same_keys = Tentative de sauvegarde du paramètre avec la clé dupliquée «{ $key }».
saving_loading_failed_to_get_home_directory = Impossible d'obtenir le répertoire racine pour ouvrir/enregistrer le fichier de configuration.
saving_loading_folder_config_instead_file = Impossible de créer ou d'ouvrir le fichier de configuration de sauvegarde dans le chemin "{ $path }" car il existe déjà un dossier.
saving_loading_failed_to_create_configuration_folder = La configuration pour créer le dossier de configuration "{ $path }", raison "{ $reason }".
saving_loading_failed_to_create_config_file = Impossible de créer le fichier de configuration "{ $path }", raison "{ $reason }".
saving_loading_folder_config_instead_file = Impossible de créer ou d'ouvrir le fichier de configuration sauvegardé à l'emplacement "{ $path }" car il existe déjà un dossier.
saving_loading_failed_to_create_configuration_folder = Échec de la configuration pour créer le dossier de configuration "{ $path }". Raison : "{ $reason }".
saving_loading_failed_to_create_config_file = Impossible de créer le fichier de configuration "{ $path }". Raison : "{ $reason }".
saving_loading_failed_to_read_config_file = Impossible de charger la configuration depuis "{ $path }" car elle n'existe pas ou n'est pas un fichier.
saving_loading_failed_to_read_data_from_file = Impossible de lire les données du fichier "{ $path }", raison "{ $reason }".
saving_loading_orphan_data = Données orphelines «{ $data }» trouvées à la ligne «{ $line }».
saving_loading_not_valid = Le paramètre "{ $data }" n'existe pas dans la version actuelle de l'application.
saving_loading_failed_to_read_data_from_file = Impossible de lire les données du fichier "{ $path }". Raison : "{ $reason }".
saving_loading_orphan_data = Données orphelines « { $data } » trouvées à la ligne « { $line } ».
saving_loading_not_valid = Le paramètre « { $data } » n'existe pas dans la version actuelle de l'application.
# Invalid symlinks
invalid_symlink_infinite_recursion = Récursion infinie
invalid_symlink_non_existent_destination = Fichier de destination inexistant
# Other
searching_for_data = Recherche de données, cela peut prendre un certain temps, veuillez patienter...
selected_all_reference_folders = Impossible de lancer la recherche quand tous les répertoires sont définis comme des répertoires de référence
searching_for_data = Recherche de données. Cela peut prendre un certain temps, veuillez patienter…
text_view_messages = MESSAGES
text_view_warnings = ATTENTIONS
text_view_errors = ERREUR
about_window_motto = Ce programme est gratuit et le sera toujours.
text_view_warnings = AVERTISSEMENTS
text_view_errors = ERREURS
about_window_motto = Ce programme peut être utilisée gratuitement et le sera toujours.
# Various dialog
dialogs_ask_next_time = Demander la prochaine fois
delete_file_failed = Impossible de supprimer le fichier { $name }, raison { $reason }
delete_file_failed = Impossible de supprimer le fichier { $name }. Raison : { $reason }
delete_title_dialog = Confirmation de la suppression
delete_question_label = Êtes-vous sûr de vouloir supprimer les fichiers ?
delete_all_files_in_group_title = Confirmation de la suppression de tous les fichiers du groupe
delete_all_files_in_group_label1 = Dans certains groupes, il y a sélectionné tous les enregistrements.
delete_all_files_in_group_label1 = L'ensemble des enregistrements est sélectionné dans certains groupes.
delete_all_files_in_group_label2 = Êtes-vous sûr de vouloir les supprimer ?
delete_folder_failed = Impossible de supprimer le dossier { $dir } car le dossier n'existe pas, vous n'avez pas les permissions ou n'est pas vide.
delete_folder_failed = Impossible de supprimer le dossier { $dir } car soit le dossier n'existe pas, vous n'avez pas la permission ou le dossier n'est pas vide.
delete_items_label = { $items } fichiers seront supprimés.
delete_items_groups_label = { $items } fichiers de { $groups } groupes seront supprimés.
hardlink_failed = Impossible de relier le matériel
hard_sym_invalid_selection_title_dialog = Sélection non valide avec certains groupes
hard_sym_invalid_selection_label_1 = Dans certains groupes, il n'y a qu'un seul enregistrement sélectionné et il sera ignoré.
hard_sym_invalid_selection_label_2 = Pour être en mesure de relier ces fichiers, au moins 2 résultats dans le groupe doivent être sélectionnés.
hard_sym_invalid_selection_label_3 = Le premier dans le groupe est reconnu comme original et n'est pas modifié, mais le second et plus tard sont modifiés.
hardlink_failed = Impossible de créer un lien en dur
hard_sym_invalid_selection_title_dialog = Sélection invalide avec certains groupes
hard_sym_invalid_selection_label_1 = Un seul enregistrement est sélectionné dans certains groupes et il sera ignoré.
hard_sym_invalid_selection_label_2 = Au moins deux résultats au sein du groupe doivent être sélectionnés pour les relier ces par un lien en dur ou symbolique.
hard_sym_invalid_selection_label_3 = Le premier dans le groupe est reconnu comme original et n'est pas modifié mais les suivants le seront.
hard_sym_link_title_dialog = Confirmation du lien
hard_sym_link_label = Êtes-vous sûr de vouloir lier ce fichier ?
move_folder_failed = Impossible de déplacer le dossier { $name }, raison { $reason }
move_file_failed = Impossible de déplacer le fichier { $name }, raison { $reason }
hard_sym_link_label = Êtes-vous sûr de vouloir relier ces fichiers ?
move_folder_failed = Impossible de déplacer le dossier { $name }. Raison : { $reason }
move_file_failed = Impossible de déplacer le fichier { $name }. Raison : { $reason }
move_files_title_dialog = Choisissez le dossier dans lequel vous voulez déplacer les fichiers dupliqués
move_files_choose_more_than_1_path = Un seul chemin doit être sélectionné pour pouvoir copier des fichiers dupliqués, sélectionné { $path_number }.
move_files_choose_more_than_1_path = Un seul chemin peut être sélectionné pour pouvoir copier leurs fichiers dupliqués. { $path_number } est sélectionné.
move_stats = Éléments { $num_files }/{ $all_files } correctement déplacés
save_results_to_file = Résultats enregistrés dans le fichier { $name }
search_not_choosing_any_music = ERREUR : Vous devez sélectionner au moins une case à cocher avec les types de recherche de musique.
save_results_to_file = Résultats enregistrés dans les fichiers txt et json dans le dossier { $name }.
search_not_choosing_any_music = ERREUR : vous devez sélectionner au moins une case à cocher parmi les types de recherche de musique.
search_not_choosing_any_broken_files = ERREUR : vous devez sélectionner au moins une case à cocher parmi les types de fichiers cassés.
include_folders_dialog_title = Dossiers à inclure
exclude_folders_dialog_title = Dossiers à exclure
include_manually_directories_dialog_title = Ajouter un répertoire manuellement
cache_properly_cleared = Cache correctement vidé
cache_clear_duplicates_title = Effacement du cache des doublons
cache_clear_similar_images_title = Nettoyage du cache des images similaires
cache_clear_similar_videos_title = Nettoyage du cache des vidéos similaires
cache_clear_message_label_1 = Voulez-vous vider le cache des entrées obsolètes?
cache_clear_message_label_2 = Cette opération supprimera toutes les entrées du cache qui pointent vers des fichiers non valides.
cache_clear_message_label_3 = Cela peut accélérer un peu le chargement/sauvegarde dans le cache.
cache_clear_message_label_4 = AVERTISSEMENT : L'opération supprimera toutes les données mises en cache des disques externes débranchés, donc le hachage devra être généré à nouveau.
cache_clear_duplicates_title = Purge du cache des doublons
cache_clear_similar_images_title = Purge du cache des images similaires
cache_clear_similar_videos_title = Purge du cache des vidéos similaires
cache_clear_message_label_1 = Voulez-vous vider le cache des entrées obsolètes ?
cache_clear_message_label_2 = Cette opération supprimera toutes les entrées du cache qui pointent vers des fichiers invalides.
cache_clear_message_label_3 = Cela peut légèrement accélérer le chargement et la sauvegarde dans le cache.
cache_clear_message_label_4 = AVERTISSEMENT : cette opération supprimera toutes les données mises en cache des disques externes débranchés. Chaque hachage devra donc être régénéré.
# Show preview
preview_temporary_file = Impossible d'ouvrir le fichier d'image temporaire { $name }, raison { $reason }.
preview_0_size = Impossible de créer l'aperçu de l'image { $name }, avec 0 largeur ou hauteur.
preview_temporary_image_save = Impossible d'enregistrer le fichier d'image temporaire dans { $name }, raison { $reason }.
preview_temporary_image_remove = Impossible de supprimer le fichier d'image temporaire { $name }, raison { $reason }.
preview_failed_to_create_cache_dir = Impossible de créer le répertoire { $name } nécessaire à l'aperçu de l'image, raison { $reason }.
preview_image_resize_failure = Impossible de redimensionner l'image { $name }.
preview_image_opening_failure = Impossible d'ouvrir l'image { $name }. Raison : { $reason }
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = Groupe { $current_group }/{ $all_groups } ({ $images_in_group } images)
compare_move_left_button = L

@ -1,54 +1,89 @@
# Window titles
window_settings_title = Impostazioni
window_main_title = Singhiozzo
window_main_title = Czkawka (Singhiozzo)
window_progress_title = Ricerca
window_compare_images = Confronta Le Immagini
window_compare_images = Confronta le immagini
# General
general_ok_button = Ok
general_close_button = Chiudi
# Main window
music_title_checkbox = Titolo
music_artist_checkbox = Artista
music_album_title_checkbox = Titolo album
music_album_artist_checkbox = Artista album
music_year_checkbox = Anno
music_bitrate_checkbox = Bitrate
music_genre_checkbox = Genere
music_length_checkbox = Durata
music_comparison_checkbox = Confronto approssimativo
music_checking_by_tags = Etichette
music_checking_by_content = Contenuto
same_music_seconds_label = Durata minima del frammento
same_music_similarity_label = Differenza massima
same_music_tooltip =
La ricerca di file musicali simili dal suo contenuto può essere configurata impostando:
- Il tempo minimo di frammento dopo il quale i file musicali possono essere identificati come simili
- La differenza massima tra due frammenti testati
La chiave per ottenere buoni risultati è trovare combinazioni sensate di questi parametri, per fornito.
Impostando il tempo minimo a 5s e la differenza massima a 1.0, cercherà frammenti quasi identici nei file.
Un tempo di 20 anni e una differenza massima di 6.0, d'altra parte, funziona bene per trovare remix/versioni live ecc.
Per impostazione predefinita, ogni file musicale viene confrontato tra loro e questo può richiedere molto tempo quando si testano molti file, quindi è di solito meglio usare le cartelle di riferimento e specificare quali file devono essere confrontati tra loro (con la stessa quantità di file, il confronto delle impronte digitali sarà più veloce di almeno 4x che senza cartelle di riferimento).
music_comparison_checkbox_tooltip =
Cerca file musicali simili attraverso IA, che usa l'apprendimento automatico per rimuovere le parentesi da una frase. Per esempio, con quest'opzione attiva, questi file saranno considerati duplicati:
Cerca file musicali simili usando l'IA, che utilizza l'apprendimento automatico per rimuovere parentesi da una frase. Ad esempio, con questa opzione abilitata, i file in questione saranno considerati duplicati:
Świędziżłób --- Świędziżłób (Remix Lato 2021)
duplicate_case_sensitive_name = Case Sensitive
duplicate_case_sensitive_name_tooltip =
Se abilitato, raggruppa solo i record quando hanno esattamente lo stesso nome, ad es. Żołd <-> Żołd
La disattivazione di tale opzione raggrupperà i nomi senza controllare se ogni lettera ha le stesse dimensioni, ad esempio żoŁD <-> Żołd
duplicate_mode_size_name_combo_box = Dimensione e nome
duplicate_mode_name_combo_box = Nome
duplicate_mode_size_combo_box = Dimensione
duplicate_mode_hash_combo_box = Hash
duplicate_hash_type_tooltip =
Singhiozzo offre 3 tipi di hash, che possono essere usati:
Czkawka offre 3 tipi di hash:
Blake3 - funzione hash crittografica. È usato come algoritmo hash predefinito, poiché velocissimo.
Blake3 - funzione hash crittografica. Questo è il valore predefinito perché è molto veloce.
CRC32 - funzione hash semplice. Dovrebbe essere più veloce di Blake3, ma potrebbe avere raramente qualche collisione.
CRC32 - semplice funzione di hash. Questo dovrebbe essere più veloce di Blake3, ma può molto raramente avere alcune collisioni.
XXH3 - molto simile per prestazioni e qualità a Blake3, quindi questi metodi possono essere usati con semplicità.
XXH3 - molto simile in termini di prestazioni e qualità di hash a Blake3 (ma non crittografica). Quindi, tali modalità possono essere facilmente intercambiate.
duplicate_check_method_tooltip =
Al momento, Singhiozzo offre tre metodi di ricerca dei duplicati:
Per ora, Czkawka offre tre tipi di metodo per trovare i duplicati di:
Nome - Trova i file con lo stesso nome.
Nome - Trova i file che hanno lo stesso nome.
Dimensione - Trova i file con la stessa dimensione.
Dimensione - Trova i file che hanno la stessa dimensione.
Hash - Trova i file con lo stesso contenuto. Questo metodo fa l'hashing dei file e successivamente li confronta per trovare i duplicati. Questo metodo è il più veloce per cercare i duplicati. Utilizza molto la cache, quindi successivamente la ricerca dati simili dovrebbe essere molto più veloce.
Hash - Trova i file che hanno lo stesso contenuto. Questa modalità fa hash sul file e in seguito confronta questo hash per trovare i duplicati. Questa modalità è il modo più sicuro per trovare i duplicati. App usa pesantemente la cache, quindi la seconda e ulteriori scansioni degli stessi dati dovrebbero essere molto più veloce del primo.
image_hash_size_tooltip =
Singhiozzo offre la modifica degli hash generati per ogni immagine. Hash più grandi permettono di trovare immagini con un numero minore di differenze, ma rendono la ricerca più lunga.
Ogni immagine selezionata produce un hash speciale che può essere confrontato l'uno con l'altro, e una piccola differenza tra loro significa che queste immagini sono simili.
8 hash size è abbastanza buono per trovare immagini che sono solo un po 'simili all'originale. Con un insieme più grande di immagini (>1000), questo produrrà una grande quantità di falsi positivi, quindi vi consiglio di utilizzare una dimensione di hash più grande in questo caso.
16 è la dimensione predefinita dell'hash che è abbastanza un buon compromesso tra trovare anche un po 'di immagini simili e avere solo una piccola quantità di collisioni di hash.
32 e 64 hash trovano solo immagini molto simili, ma non dovrebbero avere quasi falsi positivi (forse tranne alcune immagini con canale alfa).
image_resize_filter_tooltip =
Per calcolare l'hash dell'immagine, la libreria deve prima ridimensionarla.
Dipende dall'algoritmo scelto, l'immagine risultante utilizzata per calcolare l'hash apparirà un po' diversa.
L'algoritmo più veloce da usare, ma anche quello che dà i peggiori risultati, è più vicino. È abilitato per impostazione predefinita, perché con 16x16 dimensioni hash di qualità inferiore non è davvero visibile.
Il valore predefinito per gli hash è di 8 byte, che permette di trovare immagini molto simili e differenti. Gli hash di 16 and 32 byte dovrebbero essere utilizzate per immagini pressoché identiche. Gli hash di 64 bytes non dovrebbero essere usati, tranne in caso sia necessario cercare differenze molto piccole.
image_resize_filter_tooltip = Per processare l'hash di un'immagine, la libreria deve prima ridimensionarla. In funzione del metodo scelto, l'immagine risultante apparirà leggermente diversa. Il metodo più veloce, ma anche quello che dà i peggiori risultati, è Nearest.
image_hash_alg_tooltip = Gli utenti possono scegliere tra molti metodi di calcolo degli hash. Ognuno ha punti forti e punti deboli, e daranno risultati a volte migliori e a volte peggiori per immagini differenti. Quindi, per scegliere il migliore, sono necessarie prove manuali.
main_notebook_image_fast_compare = Confronto veloce
main_notebook_image_fast_compare_tooltip =
Accelerare la ricerca e confrontare hash.
Con 8x8 dimensioni di hash si consiglia di utilizzare un algoritmo diverso da quello più vicino, per avere migliori gruppi di immagini.
image_hash_alg_tooltip =
Gli utenti possono scegliere tra uno dei molti algoritmi di calcolo dell'hash.
In contrasto con la modalità normale in cui ogni hash viene confrontato tra loro x volte, dove x è la somiglianza scelta dall'utente, in questa modalità viene sempre utilizzata una sola comparazione.
Ognuno ha punti forti e più deboli e a volte darà risultati migliori e a volte peggiori per immagini diverse.
Questa opzione è consigliata quando si confrontano >10000 immagini con la similitudine non 0(Molto Alta).
Quindi, per determinare quello migliore per te, è necessario un test manuale.
big_files_mode_combobox_tooltip = Consente di cercare file più piccoli/più grandi
big_files_mode_label = File controllati
big_files_mode_smallest_combo_box = Il Più Piccolo
big_files_mode_biggest_combo_box = Il Più Grande
main_notebook_duplicates = File duplicati
main_notebook_empty_directories = Cartelle vuote
main_notebook_big_files = Grandi file
@ -59,6 +94,7 @@ main_notebook_similar_videos = Video simili
main_notebook_same_music = Duplicati musicali
main_notebook_symlinks = Collegamenti invalidi
main_notebook_broken_files = File corrotti
main_notebook_bad_extensions = Estensioni Errate
main_tree_view_column_file_name = Nome file
main_tree_view_column_folder_name = Nome cartella
main_tree_view_column_path = Percorso
@ -69,12 +105,15 @@ main_tree_view_column_dimensions = Dimensioni
main_tree_view_column_title = Titolo
main_tree_view_column_artist = Artista
main_tree_view_column_year = Anno
main_tree_view_column_album_title = Titolo album
main_tree_view_column_album_artist = Artista album
main_tree_view_column_bitrate = Bitrate
main_tree_view_column_length = Durata
main_tree_view_column_genre = Genere
main_tree_view_column_symlink_file_name = Nome collegamento
main_tree_view_column_symlink_folder = Cartella collegamento
main_tree_view_column_symlink_folder = Cartella Collegamenti Simbolici
main_tree_view_column_destination_path = Percorso di destinazione
main_tree_view_column_type_of_error = Tipo di Errore
main_tree_view_column_current_extension = Estensione Corrente
main_tree_view_column_proper_extensions = Estensione Corretta
main_label_check_method = Metodo di verifica
main_label_hash_type = Tipo hash
main_label_hash_size = Dimensione hash
@ -84,8 +123,12 @@ main_label_max_size = Max
main_label_shown_files = Numero di file visualizzati
main_label_resize_algorithm = Metodo di ridimensionamento
main_label_similarity = Similitudine{ " " }
main_check_box_broken_files_audio = Audio
main_check_box_broken_files_pdf = Pdf
main_check_box_broken_files_archive = Compresso
main_check_box_broken_files_image = Immagine
check_button_general_same_size = Ignora stesse dimensioni
check_button_general_same_size_tooltip = Nei risultati, ignora i file con le stesse dimensioni - solitamente questo sono duplicati 1:1
check_button_general_same_size_tooltip = Ignora i file con dimensioni identiche nei risultati - di solito sono duplicati 1:1
main_label_size_bytes_tooltip = Dimensione dei file utilizzati nella ricerca
# Upper window
upper_tree_view_included_folder_column_title = Cartelle di ricerca
@ -98,26 +141,41 @@ upper_remove_included_button = Rimuovi
upper_manual_add_excluded_button = Aggiungi manualmente
upper_add_excluded_button = Aggiungi
upper_remove_excluded_button = Rimuovi
upper_manual_add_included_button_tooltip = Permette di aggiungere cartelle per la ricerca manuale
upper_manual_add_included_button_tooltip =
Aggiungi nome directory da cercare a mano.
Per aggiungere più percorsi contemporaneamente, separarli da ;
/home/roman;/home/rozkaz aggiungerà due directory /home/roman e /home/rozkaz
upper_add_included_button_tooltip = Aggiungi nuova cartella per la ricerca
upper_remove_included_button_tooltip = Cancella cartella dalla ricerca
upper_manual_add_excluded_button_tooltip = Permette di aggiungere una cartella da escudere dalla ricerca
upper_manual_add_excluded_button_tooltip =
Aggiungi nome directory escluso a mano.
Per aggiungere più percorsi contemporaneamente, separarli da ;
/home/roman;/home/krokiet aggiungerà due directory /home/roman e /home/keokiet
upper_add_excluded_button_tooltip = Aggiunge una cartella da escludere dalla ricerca
upper_remove_excluded_button_tooltip = Rimuove una cartella da quelle escluse
upper_notebook_items_configuration = Configurazione degli oggetti
upper_notebook_excluded_directories = Cartelle escluse
upper_notebook_included_directories = Cartelle incluse
upper_allowed_extensions_tooltip =
Le estensioni permesse devono essere separate da virgola (per impostazione predefinita sono tutte disponibili)
Le estensioni consentite devono essere separate da virgole (di default tutte sono disponibili).
Sono disponibili anche i seguenti Macro, che aggiungono più estensioni contemporaneamente: IMAGE, VIDEO, MUSIC, TESTO.
Macro IMAGE, VIDEO, MUSIC, TEXT è anche disponibile, che aggiunge estensioni multiple simultaneamente.
Esempio di utilizzo ".exe, IMAGE, VIDEO, .rar, 7z" - questo significa che le immagini (e. . jpg, png), video (ad esempio avi, mp4), exe, rar e file 7z verranno analizzati.
upper_excluded_extensions_tooltip =
Elenco dei file disabilitati che verranno ignorati nella scansione.
Esempio di utilizzo ".exe, IMAGE, VIDEO, .rar, 7z" - ciò significa che le immagini (es. jpg, png), i video (es. avi, mp4), i file exe, rar e 7z saranno cercati.
Quando si usano entrambe le estensioni consentite e disabilitate, questo ha la priorità maggiore, quindi il file non verrà selezionato.
upper_excluded_items_tooltip =
Le voci escluse devono contenere il carattere jolly * ed essere separate da virgola.
Questo è più lento che le Cartelle escluse, quindi utilizzalo con cautela.
Gli elementi esclusi devono contenere * caratteri jolly e devono essere separati da virgole.
Questo è più lento delle directory escluse, quindi usalo attentamente.
upper_excluded_items = Voci escluse:
upper_allowed_extensions = Estensioni permesse:
upper_excluded_extensions = Estensioni Disabilitate:
# Popovers
popover_select_all = Seleziona tutto
popover_unselect_all = Deseleziona tutto
@ -131,38 +189,48 @@ popover_unselect_custom = Delezione personalizzata
popover_select_all_images_except_biggest = Seleziona tutti eccetto il più grande
popover_select_all_images_except_smallest = Seleziona tutti eccetto il più piccolo
popover_custom_path_check_button_entry_tooltip =
Permette la selezione mediante percorso.
Seleziona i record per percorso.
Esempio di utilizzo:
/home/pimpek/rzecz.txt può essere trovato con /home/pim*
popover_custom_name_check_button_entry_tooltip =
Permette di selezionare le voci attraverso il nome dei file.
Seleziona i record per nomi file.
Esempio di utilizzo:
/usr/ping/pong.txt può essere trovato con *ong*
popover_custom_regex_check_button_entry_tooltip =
Permette di selezionare le voci attraverso il Regex specificato.
Seleziona i record per Regex specificato.
Con questo metodo, il testo ricercato è il Percoso con Nome
Con questa modalità, il testo cercato è Percorso con Nome.
Esempio di utilizzo:
/usr/bin/ziemniak.txt può essere trovato con /ziem[a-z]+
/usr/bin/ziemniak. xt può essere trovato con /ziem[a-z]+
Queto utilizza l'implementazione regex Rust predefinita, quindi puoi trovare dettagli su https://docs.rs/regex.
Questo utilizza l'implementazione regex Rust predefinita. Puoi leggere di più qui: https://docs.rs/regex.
popover_custom_case_sensitive_check_button_tooltip =
Abilita rilevamento maiuscolo/minuscolo.
Quando disabilitato /home/* trova sia /HoMe/roman che /home/roman.
popover_custom_not_all_check_button_tooltip =
Impedisce di selezionare tutte le voci in un gruppo.
Impedisce di selezionare tutti i record nel gruppo.
Questa è selezionata per impostazione predefinita, poiché nella maggior parte delle situazioni non si vogliono cancellare sia il file originale che i duplicati, ma si vuole mantenere almeno u na copia.
Questo è abilitato per impostazione predefinita, perché nella maggior parte delle situazioni, non si desidera eliminare entrambi i file originali e duplicati, ma si desidera lasciare almeno un file.
Attenzione: Questa impostazione non funziona se sono già stati selezionati manualmente tutti i risultati.
ATTENZIONE: Questa impostazione non funziona se hai già selezionato manualmente tutti i risultati in un gruppo.
popover_custom_regex_path_label = Percorso
popover_custom_regex_name_label = Nome
popover_custom_regex_regex_label = Regex Percorso + Nome
popover_custom_case_sensitive_check_button = Differenzia maiuscole/minuscole
popover_custom_all_in_group_label = Non selezionare tutte le voci in un gruppo
popover_custom_mode_unselect = Deselezione personalizzata
popover_custom_mode_select = Selezione personalizzata
popover_invalid_regex = Il Regex non è valido
popover_valid_regex = Il Regex è valido
popover_sort_file_name = Nome del file
popover_sort_folder_name = Nome cartella
popover_sort_full_name = Nome e cognome
popover_sort_size = Dimensione
popover_sort_selection = Selezione
popover_invalid_regex = Regex non valida
popover_valid_regex = Regex valida
# Bottom buttons
bottom_search_button = Cerca
bottom_select_button = Seleziona
@ -171,37 +239,45 @@ bottom_save_button = Salva
bottom_symlink_button = Collegamenti simbolici
bottom_hardlink_button = Collegamenti fisici
bottom_move_button = Sposta
bottom_search_button_tooltip = Inizia a cercare i file/cartelle
bottom_select_button_tooltip = Seleziona le voci. Solo i file/cartelle selezionati possono essere processati successivamente.
bottom_sort_button = Ordina
bottom_search_button_tooltip = Avvia ricerca
bottom_select_button_tooltip = Seleziona record. Solo i file/cartelle selezionati possono essere elaborati in seguito.
bottom_delete_button_tooltip = Cancella i file/cartelle selezionati
bottom_save_button_tooltip = Salva i risultati della ricerca in un file
bottom_symlink_button_tooltip =
Crea collegamenti simbolici.
Funziona solo se almeno due risulati sono selezionati in un gruppo.
Il primo non viene modificato; il secondo ed i successivi verranno collegati al primo.
Funziona solo quando sono selezionati almeno due risultati in un gruppo.
Il primo è invariato e il secondo e poi sono symlinked al primo.
bottom_hardlink_button_tooltip =
Crea collegamenti fisici.
Funziona solo se almeno due risulati sono selezionati in un gruppo.
Il primo non viene modificato; il secondo ed i successivi verranno collegati al primo.
Funziona solo quando sono selezionati almeno due risultati in un gruppo.
Il primo è invariato e il secondo e poi sono hardlinked al primo.
bottom_hardlink_button_not_available_tooltip =
Crea collegamenti fisici.
Il pulsante è disabilitato, perché non è possibile creare collegamenti fisici.
I collegamenti fisici funzionano solo con i privilegi di amministratore su Windows, quindi assicurati di eseguire l'app come amministratore.
Se l'app funziona già con tali privilegi, controlla problemi simili su Github.
bottom_move_button_tooltip =
Sposta i file nella cartella selezionata.
Sposta tutti i file nella cartella senza mantenere la struttura della cartella.
Se si prova a spostare due file con nome identico, il secondo fallirà e verrà mostrato un errore.
bottom_show_errors_tooltip = Mostra/Nasconde il pannello errori inferiore.
Sposta i file nella directory scelta.
Copia tutti i file nella directory senza conservare l'albero delle directory.
Quando si tenta di spostare due file con il nome identico nella cartella, il secondo fallirà e mostrerà errore.
bottom_sort_button_tooltip = Ordina file/cartelle in base al metodo selezionato.
bottom_show_errors_tooltip = Mostra/Nasconde il pannello di testo inferiore.
bottom_show_upper_notebook_tooltip = Mostra/Nasconde il pannello comandi.
# Progress Window
progress_stop_button = Ferma
progress_stop_additional_message = Interrompi richiesta
# About Window
about_repository_button_tooltip = Collegamento alla pagina del codice sorgente nell'archivio.
about_donation_button_tooltip = Collegamento alla pagina delle donazioni.
about_instruction_button_tooltip = Colegamento alla pagina delle istruzioni.
about_translation_button_tooltip = Link alla pagina Crowdin con le traduzioni delle app. Ufficialmente polacco e inglese sono supportati, ma qualsiasi aiuto con altre lingue sarà apprezzato.
about_repository_button_tooltip = Link alla pagina del repository con il codice sorgente.
about_donation_button_tooltip = Link alla pagina della donazione.
about_instruction_button_tooltip = Link alla pagina delle istruzioni.
about_translation_button_tooltip = Link alla pagina Crowdin con le traduzioni delle app. Ufficialmente polacco e inglese sono supportati.
about_repository_button = Archivio
about_donation_button = Donazioni
about_instruction_button = Istruzioni
about_translation_button = Traduzione
# Header
header_setting_button_tooltip = Apre la finestra impostazioni.
header_setting_button_tooltip = Apre la finestra delle impostazioni.
header_about_button_tooltip = Apre la finestra delle informazioni sul programma.
# Settings
@ -209,38 +285,46 @@ header_about_button_tooltip = Apre la finestra delle informazioni sul programma.
## General
settings_save_at_exit_button_tooltip = Salva la configurazione su file alla chiusura del programma.
settings_number_of_threads = Numero di thread usati
settings_number_of_threads_tooltip = Numero di thread usati, 0 significa che tutti i thread disponibili saranno utilizzati.
settings_label_restart = È necessario riavviare l'app per applicare le impostazioni!
settings_ignore_other_filesystems = Ignora altri filesystem (solo Linux)
settings_ignore_other_filesystems_tooltip =
ignora i file che non sono nello stesso file system delle directory cercate.
Funziona come l'opzione -xdev nel comando find su Linux
settings_save_at_exit_button_tooltip = Salva la configurazione su file quando chiudi l'app.
settings_load_at_start_button_tooltip =
Caricamento della configurazione all'avvio del programma.
Non selezionando questa opzione verranno caricate le impostazioni predefinite.
settings_confirm_deletion_button_tooltip = Mostra richiesta di confema alla selezione del pulsante Cancella.
settings_confirm_link_button_tooltip = Mostra richiesta di conferma alla selezione di Crea collegamento.
settings_confirm_group_deletion_button_tooltip = Mostra richiesta di conferma al tentativo di cancellare tutti gli elementi in un gruppo.
settings_show_text_view_button_tooltip = Mostra il pannello errori in basso.
settings_use_cache_button_tooltip = Opzione per non utilizzare la funzione di caching.
settings_save_also_as_json_button_tooltip = Salva la cache in formato JSON umano. È possibile modificarne il contenuto. La cache da questo file verrà letta automaticamente dall'app se la cache in formato binario (con estensione bid) sarà mancante.
settings_use_trash_button_tooltip = Se selezionata, sposterà i file el cestino anziché cancellarli definitivamente.
settings_language_label_tooltip = Permette di selezionare la lingua dell'interfaccia tra quelle disponibili.
settings_save_at_exit_button = Salva la configurazione all'uscita
settings_load_at_start_button = Carica la configurazione all'avvio
Carica la configurazione dal file all'apertura dell'applicazione.
Se non è abilitata, verranno utilizzate le impostazioni predefinite.
settings_confirm_deletion_button_tooltip = Mostra la finestra di conferma quando si fa clic sul pulsante Elimina.
settings_confirm_link_button_tooltip = Mostra la finestra di conferma quando si fa clic sul pulsante hard/symlink.
settings_confirm_group_deletion_button_tooltip = Mostra la finestra di avviso quando si tenta di eliminare tutti i record dal gruppo.
settings_show_text_view_button_tooltip = Mostra il pannello di testo in fondo all'interfaccia utente.
settings_use_cache_button_tooltip = Usa cache file.
settings_save_also_as_json_button_tooltip = Salva la cache in formato JSON (leggibile). È possibile modificarne il contenuto. La cache da questo file verrà letta automaticamente dall'app se manca la cache in formato binario (con estensione bid).
settings_use_trash_button_tooltip = Sposta i file nel cestino invece eliminandoli in modo permanente.
settings_language_label_tooltip = Lingua per l'interfaccia utente.
settings_save_at_exit_button = Salva la configurazione alla chiusura dell'app
settings_load_at_start_button = Carica la configurazione quando apri l'app
settings_confirm_deletion_button = Mostra finestra di conferma alla cancellazione di qualsiasi file
settings_confirm_link_button = Mostra finestra di conferma alla creazione di collegamenti per qualsiasi file
settings_confirm_group_deletion_button = Mostra finestra di conferma alla cancellazione di tutti gli elementi in un gruppo
settings_show_text_view_button = Mostra il pannello testuale inferiore
settings_use_cache_button = Utilizza cache
settings_save_also_as_json_button = Salva la cache anche nel file JSON
settings_save_also_as_json_button = Salva anche la cache come file JSON
settings_use_trash_button = Sposta i file rimossi nel cestino
settings_language_label = Lingua
settings_multiple_delete_outdated_cache_checkbutton = Cancella automaticamente la cache obsoleta
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
Permette di cancellare i risultati cache obsoleti che puntano a file inesistenti.
Elimina i risultati della cache obsoleti che puntano a file inesistenti.
Se attiva, il programma verifica, al caricamento, che tutti gli elementi puntino a file validi, ignorando quelli interrotti.
Quando abilitata, l'app si assicura durante il caricamento dei record, che tutti i record puntino a file validi (quelli interrotti vengono ignorati).
Disattivare questa opzione aiuterà nella ricerca su dischi esterni, in modo che le voci di cache relativi non vengano cancellate alla ricerca successiva.
Disabilitare questo aiuterà durante la scansione dei file su unità esterne, quindi le voci della cache su di loro non verranno eliminate nella prossima scansione.
Nel caso si abbiano centinaia di migliaia di elementi nella cache, è suggerito selezionare questa opzione per accelerare il caricamento ed il salvataggio della cache all'avvio ed alla fine della ricerca.
Nel caso di avere centinaia di migliaia di record nella cache, si consiglia di abilitare questa funzione, che velocizzerà il caricamento della cache/salvataggio all'inizio/fine della scansione.
settings_notebook_general = Generale
settings_notebook_duplicates = Duplicati
settings_notebook_images = Immagini simili
@ -248,40 +332,40 @@ settings_notebook_videos = Video simili
## Multiple - settings used in multiple tabs
settings_multiple_image_preview_checkbutton_tooltip = Mostra l'anteprima sulla destra alla selezione delle immagini.
settings_multiple_image_preview_checkbutton_tooltip = Mostra l'anteprima sul lato destro (quando si seleziona un file immagine).
settings_multiple_image_preview_checkbutton = Mostra anteprima immagini
settings_multiple_clear_cache_button_tooltip =
Cancella manualmente gli elementi obsoleti dalla cache.
Dovrebbe essere utilizzata solo se le cancellazione automatica della cache è disattivata.
settings_multiple_clear_cache_button = Rimuove risultati obsoleti dalla cache delle immagini
Pulisci manualmente la cache delle voci obsolete.
Questo dovrebbe essere usato solo se la compensazione automatica è stata disabilitata.
settings_multiple_clear_cache_button = Rimuovi i risultati obsoleti dalla cache.
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
Nascondi tutti i file tranne uno, se puntano agli stessi dati (sono collegati fisicamente).
Nasconde tutti i file tranne uno, se tutti puntano agli stessi dati (sono hardlinked).
Ad esempio, se su un disco ci sono 7 file fisicamente colleati a dati specifici ed un altro file con gli stessi dati ma inode differente, verranno mostrati solo un unico file ed un collegamento fisico tra quelli esistenti.
Esempio: Nel caso in cui ci siano (su disco) sette file che sono collegati a dati specifici e un file diverso con gli stessi dati ma un inode diverso, poi nel mirino duplicato, verrà mostrato solo un file univoco e un file da quelli hardlink.
settings_duplicates_minimal_size_entry_tooltip =
Permette di impostare le dimensioni minime dei file che verranno processati tramite cache.
Imposta la dimensione minima del file che verrà memorizzata nella cache.
La selezione di valori minori genererà più elementi, che velocizzeranno la ricerca, ma rallenteranno il caricamento ed il salvataggio della cache.
Scegliendo un valore più piccolo si genereranno più record. Questo accelererà la ricerca, ma rallenterà il caricamento / il salvataggio della cache.
settings_duplicates_prehash_checkbutton_tooltip =
Abilita il caching dei prehash (hash generati da una piccola porzione dei file) che permette di scartare prima gli elementi non duplicati.
Abilita la cache di prehash (un hash calcolato da una piccola parte del file) che consente il ritiro anticipato di risultati non duplicati.
È disattivata per impostazione predefinita perché può causare rallentamenti in alcune condizioni.
È disabilitato per impostazione predefinita perché può causare rallentamenti in alcune situazioni.
È fortemente consigliato utilizzare questa funzione quando si cerca tra centinaia di migliaia o milioni di file, perché può velocizzare di molti fattori la ricerca.
Si consiglia vivamente di usarlo durante la scansione di centinaia di migliaia o milioni di file, perché può accelerare la ricerca di più volte.
settings_duplicates_prehash_minimal_entry_tooltip = Dimensione minima delle voci della cache
settings_duplicates_hide_hard_link_button = Nascondi collegamenti fisici (solo in Linux e MacOS)
settings_duplicates_hide_hard_link_button = Nascondi collegamenti rigidi (solo Linux e macOS)
settings_duplicates_prehash_checkbutton = Utilizza la cash prehash
settings_duplicates_minimal_size_cache_label = Dimensione minima in byte dei dei file salvati nella cache
settings_duplicates_minimal_size_cache_prehash_label = Dimensione minima in byte dei file salvati nella cache prehash
settings_duplicates_minimal_size_cache_label = Dimensione minima dei file (in byte) salvati nella cache
settings_duplicates_minimal_size_cache_prehash_label = Dimensione minima dei file (in byte) salvati nella cache prehash
## Saving/Loading settings
settings_saving_button_tooltip = Salva le impostazioni selezionate su file
settings_loading_button_tooltip = Carica le impostazioni di configurazione da file.
settings_reset_button_tooltip = Reimposta le impostazioni predefinite.
settings_saving_button_tooltip = Salva la configurazione attuale delle impostazioni su file.
settings_loading_button_tooltip = Carica le impostazioni dal file e sostituisci con esse la configurazione corrente.
settings_reset_button_tooltip = Reimposta la configurazione corrente a quella predefinita.
settings_saving_button = Salva configurazione
settings_loading_button = Carica configurazione
settings_reset_button = Reimposta configurazione
@ -289,17 +373,17 @@ settings_reset_button = Reimposta configurazione
## Opening cache/config folders
settings_folder_cache_open_tooltip =
Apre la cartellaa dove sono memorizzati i file della cache.
Apre la cartella in cui sono memorizzati i file cache txt.
La loro modifica causerà la visualizzazione di risultati invalidi ma ad esempio modificando il percorso può risparmiare tempo se si spostano grosse quantità di file in percorsi differenti big amount of files to different place.
La modifica dei file cache può causare la visualizzazione di risultati non validi. Tuttavia, la modifica del percorso può risparmiare tempo quando si sposta una grande quantità di file in una posizione diversa.
Puoi copiare questi file tra computer per risparmiare tempo di ricerca (in caso di struttura cartele simile).
È possibile copiare questi file tra computer per risparmiare tempo sulla scansione di nuovo per i file (ovviamente se hanno una struttura di directory simile).
In caso di problemi con la cache, questi file possono essere rimossi, affinché il programmi li rigeneri.
In caso di problemi con la cache, questi file possono essere rimossi. L'app li rigenererà automaticamente.
settings_folder_settings_open_tooltip =
Apri la cartella dove è salvata la configurazione di Czkawka.
Apre la cartella in cui viene memorizzata la configurazione Czkawka.
La modifica manuale può comprometterne il funzionamento.
ATTENZIONE: Modificare manualmente la configurazione potrebbe rompere il flusso di lavoro.
settings_folder_cache_open = Apri la cartella della cache
settings_folder_settings_open = Apri la cartella delle impostazioni
# Compute results
@ -315,19 +399,30 @@ compute_found_videos = Trovati { $number_files } video simili in { $number_group
compute_found_music = Trovati { $number_files } file musicali simili in { $number_groups } gruppi
compute_found_invalid_symlinks = Trovati { $number_files } colegamenti simbolici invalidi
compute_found_broken_files = Trovati { $number_files } file corrotti
compute_found_bad_extensions = Trovati { $number_files } file con estensioni non valide
# Progress window
progress_scanning_general_file = Processando { $file_number } file
progress_scanning_extension_of_files = Verifica estensione del file { $file_checked }/{ $all_files }
progress_scanning_broken_files = Verificando { $file_checked }/{ $all_files } file
progress_scanning_video = Hashing di { $file_checked }/{ $all_files } video
progress_scanning_image = Hashing di { $file_checked }/{ $all_files } image
progress_comparing_image_hashes = Confrontando { $file_checked }/{ $all_files } hash delle immagini
progress_scanning_music_tags_end = Confrontando le etichette di { $file_checked }/{ $all_files } file musicali
progress_scanning_music_tags = Leggendo le etichette di { $file_checked }/{ $all_files } file musicali
progress_scanning_music_content_end = Confronto delle impronte digitali di { $file_checked }/{ $all_files } file musicale
progress_scanning_music_content = Calcolo dell'impronta digitale di { $file_checked }/{ $all_files } file musicale
progress_scanning_empty_folders = Verificando { $folder_number } cartelle
progress_scanning_size = Leggendo le dimensioni di { $file_number } file
progress_scanning_size_name = Scansione nome e dimensione del file { $file_number }
progress_scanning_name = Leggendo il nome di { $file_number } file
progress_analyzed_partial_hash = Analizzato gli hash parziali di { $file_checked }/{ $all_files } file
progress_analyzed_full_hash = Analizzato gli hash completi di { $file_checked }/{ $all_files } file
progress_prehash_cache_loading = Caricamento della cache prehash
progress_prehash_cache_saving = Salvataggio della cache prehash
progress_hash_cache_loading = Caricamento della cache hash
progress_hash_cache_saving = Salvataggio della cache hash
progress_cache_loading = Caricamento cache
progress_cache_saving = Salvataggio cache
progress_current_stage = Fase attuale:{ " " }
progress_all_stages = Tutte le fasi:{ " " }
# Saving loading
@ -344,14 +439,15 @@ saving_loading_failed_to_get_home_directory = Recupero cartella home fallito, pe
saving_loading_folder_config_instead_file = Impossibile create o caricare/salvare il file di configurazione al percorso "{ $path }" poiché la cartella esiste già.
saving_loading_failed_to_create_configuration_folder = Creazione cartella di configurazione "{ $path }" fallita, motivo "{ $reason }".
saving_loading_failed_to_create_config_file = Impossibile creare il file di configurazione "{ $path }", motivo "{ $reason }".
saving_loading_failed_to_read_config_file = Impossibile caricare configurazione da "{ $path }" poiché il file non esiste o non è un file.
saving_loading_failed_to_read_config_file = Impossibile caricare la configurazione da "{ $path }" perché non esiste o non è un file.
saving_loading_failed_to_read_data_from_file = Impossibile leggere il file "{ $path }", motivo "{ $reason }".
saving_loading_orphan_data = Trovati dati orfani "{ $data }" nella riga "{ $line }".
saving_loading_not_valid = L'impostazione "{ $data }" non esiste per l'attuale versiione del programma.
saving_loading_not_valid = L'impostazione "{ $data }" non esiste nella versione corrente dell'app.
# Invalid symlinks
invalid_symlink_infinite_recursion = Ricorsione infinita
invalid_symlink_non_existent_destination = File di destinazione non esistente
invalid_symlink_non_existent_destination = File di destinazione inesistente
# Other
selected_all_reference_folders = Impossibile avviare la ricerca, quando tutte le directory sono impostate come cartelle di riferimento
searching_for_data = Ricerca dei dati, può durare a lungo, attendere prego...
text_view_messages = MESSAGGI
text_view_warnings = ATTENZIONE
@ -359,29 +455,30 @@ text_view_errors = ERRORI
about_window_motto = Questo programma può essere usato liberamente e lo sarà sempre.
# Various dialog
dialogs_ask_next_time = Chiedi la prossima volta
delete_file_failed = Rimozione file { $name } fallita, ragione { $reason }
delete_file_failed = Impossibile eliminare il file { $name }, motivo { $reason }
delete_title_dialog = Conferma di cancellazione
delete_question_label = Sei sicuro di cancellare i file?
delete_all_files_in_group_title = Conferma di cancellazione di tutti i file nel gruppo
delete_all_files_in_group_label1 = In alcuni gruppi tutti gli elementi sono selezionati.
delete_all_files_in_group_label1 = In alcuni gruppi tutti i record sono selezionati.
delete_all_files_in_group_label2 = Sei sicuro di cancellarli tutti?
delete_folder_failed = Cancellazione cartella { $dir } fallita perché la cartella non esiste, non si hanno permessi sufficienti o perché non vuota.
delete_items_label = { $items } file verranno rimossi.
delete_items_groups_label = { $items } file da { $groups } gruppi verranno rimossi.
delete_folder_failed = Impossibile eliminare la cartella { $dir } perché la cartella non esiste, non hai i permessi o la cartella non è vuota.
delete_items_label = { $items } i file verranno eliminati.
delete_items_groups_label = { $items } i file da { $groups } gruppi verranno eliminati.
hardlink_failed = Collegamento fisico fallito
hard_sym_invalid_selection_title_dialog = Selezione invalida in alcuni gruppi
hard_sym_invalid_selection_label_1 = In alcuni gruppi c'è solo una voce selezionata e verrà ignorata.
hard_sym_invalid_selection_label_2 = Per poter collegare simbolicamente/fisicamente questi files, devono essere selezionati almeno due risultati.
hard_sym_invalid_selection_label_1 = In alcuni gruppi c'è solo un record selezionato e verrà ignorato.
hard_sym_invalid_selection_label_2 = Per essere in grado di collegare hard/sym questi file, è necessario selezionare almeno due risultati nel gruppo.
hard_sym_invalid_selection_label_3 = Il primo nel gruppo sarà considerato l'originale ed inalteratom, ma il secondo ed i successivi verranno modificati.
hard_sym_link_title_dialog = Conferma collegamento
hard_sym_link_label = Sei sicuro di collegare questi file?
hard_sym_link_label = Sei sicuro di voler collegare questi file?
move_folder_failed = Spostamento cartella { $name } fallito, ragione { $reason }
move_file_failed = Spostamento file { $name } fallito, ragione { $reason }
move_files_title_dialog = Seleziona la cartella dove vuoi spostare i file duplicati
move_files_choose_more_than_1_path = Solo un percorso deve essere selezionato per copiarvi i file, selezionati { $path_number }
move_files_choose_more_than_1_path = Solo un percorso può essere selezionato per essere in grado di copiare i file duplicati, selezionato { $path_number }.
move_stats = { $num_files }/{ $all_files } elementi spostati con successo
save_results_to_file = Risultati salvati su file
save_results_to_file = Risultati salvati sia in file txt che json nella cartella { $name }.
search_not_choosing_any_music = ERRORE: Devi selezionare almeno una casella dei metodi di ricerca musicali.
search_not_choosing_any_broken_files = ERRORE: è necessario selezionare almeno una casella di controllo selezionando il tipo di file danneggiati.
include_folders_dialog_title = Cartelle incluse
exclude_folders_dialog_title = Cartelle escluse
include_manually_directories_dialog_title = Aggiungi cartella manualmente
@ -389,16 +486,13 @@ cache_properly_cleared = Cache cancellata con successo
cache_clear_duplicates_title = Cancellazione cache dei duplicati
cache_clear_similar_images_title = Cancellazione cache delle immagini simili
cache_clear_similar_videos_title = Cancellazione cache dei video simili
cache_clear_message_label_1 = Vuoi cancellare le voci obsolete dalla cache?
cache_clear_message_label_2 = Quest'operazione cancellera tutti gli elementi che puntano a file invalidi.
cache_clear_message_label_3 = Questo velocizzerà un po' il caricamento/savataggio della cache.
cache_clear_message_label_4 = WARNING: L'operazione cancellerà tutti i dati della cache dai dischi esterni non collegati, quindi gli hash dpvranno essere generati nuovamente.
cache_clear_message_label_1 = Vuoi cancellare la cache delle voci obsolete?
cache_clear_message_label_2 = Questa operazione rimuoverà tutte le voci della cache che puntano a file non validi.
cache_clear_message_label_3 = Questo può velocizzare il carico/salvataggio nella cache.
cache_clear_message_label_4 = ATTENZIONE: L'operazione rimuoverà tutti i dati memorizzati nella cache da unità esterne scollegate. Quindi ogni hash dovrà essere rigenerato.
# Show preview
preview_temporary_file = Impossibile aprire immagine temporanea { $name }, ragione { $reason }
preview_0_size = Impossibile creare anteprima dell'immagine { $name }, con larghezza o altezza 0
preview_temporary_image_save = Impossibile salvare immagine temporanea in { $name }, ragione { $reason }
preview_temporary_image_remove = Impossibile cancellare immagine temporanea { $name }, ragione { $reason }
preview_failed_to_create_cache_dir = Impossibile creare cartella { $name } necessaria per l'anteprima immagine, ragione { $reason }
preview_image_resize_failure = Ridimensionamento dell'immagine { $name } non riuscito.
preview_image_opening_failure = Impossibile aprire l'immagine { $name }, motivo { $reason }
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = Gruppo { $current_group }/{ $all_groups } ({ $images_in_group } immagini)
compare_move_left_button = L

@ -1,5 +1,5 @@
# Window titles
window_settings_title = オプション
window_settings_title = 設定
window_main_title = Czkawka (しゃっくり)
window_progress_title = スキャン中
window_compare_images = 画像を比較
@ -9,83 +9,127 @@ general_close_button = 閉じる
# Main window
music_title_checkbox = タイトル
music_artist_checkbox = アーティスト
music_album_title_checkbox = アルバムタイトル
music_album_artist_checkbox = アルバムアーティスト
music_year_checkbox = 年
music_bitrate_checkbox = ビットレート
music_genre_checkbox = ジャンル
music_length_checkbox = 長さ
music_comparison_checkbox = おおよその比較
music_checking_by_tags = タグ
music_checking_by_content = コンテンツ
same_music_seconds_label = フラグメント最小秒の持続時間
same_music_similarity_label = 最大差
same_music_tooltip =
音楽ファイルの内容から類似ファイルを検索するように設定できます:
- 音楽ファイルが類似していると識別されるフラグメントの最小時間
- テストされた2つのフラグメントの最大差分
良い結果を得るための鍵は、これらのパラメータの賢明な組み合わせを見つけることです。
最小時間を5秒、最大差を1.0に設定すると、ファイル内のほとんど同じフラグメントを探します。
一方、時間を20秒、差の最大値を6.0に設定すると、リミックスやライブ・バージョンなどを探すのに効果的です。
デフォルトでは、各音楽ファイルは互いに比較され、多数のファイルをテストする場合、これは多くの時間を要します。したがって、通常、参照フォルダを使用し、どのファイルを互いに比較するかを指定する方が良いでしょう(同じ量のファイルでは、フィンガープリントの比較は参照フォルダなしよりも少なくとも 4 倍速くなります)。
music_comparison_checkbox_tooltip =
AIを使用して類似の音楽ファイルを検索します。例えば、機械学習を使用して句から括弧を削除します。 このオプションが有効な場合 問題のファイルは重複とみなされます:
機械学習によりフレーズから括弧とその中身を除外するAIを使用して、類似の音楽ファイルを検索します。このオプションが有効な場合、例えば以下のファイルは重複とみなされます:
Świędziżłób --- Świędziżłób (Remix Lato 2021)
duplicate_case_sensitive_name = 大文字小文字を区別する
duplicate_case_sensitive_name_tooltip =
有効な場合、グループのみレコードまったく同じ名前を持っている場合など。 Z<unk> ołd <-> Z<unk> ołd
このようなオプションを無効にすると、各文字のサイズが同じかどうかを確認せずに名前をグループ化します。例: z<unk> o<unk> D <-> Z<unk> ołd
duplicate_mode_size_name_combo_box = サイズと名前
duplicate_mode_name_combo_box = 名前
duplicate_mode_size_combo_box = サイズ
duplicate_mode_hash_combo_box = ハッシュ
duplicate_hash_type_tooltip =
Czkawkaは、3種類のハッシュを提供しており、これらを使用することができます。
Czkawkaは3種類のハッシュを提供します:
Blake3 - 暗号化ハッシュ関数。非常に高速であるため、デフォルトのハッシュアルゴリズムとして使用される。
Blake3 - 暗号学的ハッシュ関数。非常に高速であるため、デフォルトのハッシュ方式として使用されます
CRC32 - 単純なハッシュ関数。Blake3より高速ですが、まれに衝突が発生する可能性があります。
CRC32 - シンプルなハッシュ関数。Blake3より高速ですが、まれに衝突が発生する可能性があります。
XXH3性能とハッシュの質がBlake3に非常に似ているので、このようなモードは簡単に使用できます。
XXH3 - パフォーマンスとハッシュの質がBlake3に非常に近いので、このようなモードの代わりに簡単に使用できます。ただし、暗号学的ではありません
duplicate_check_method_tooltip =
Czkawkaは、今のところ以下の3種類の方法で重複を見つけることができます
Czkawkaは、今のところ以下の3種類の方法で重複を見つけることができます:
名前 - 同じ名前のファイルを検索します。
サイズ - 同じサイズのファイルを探す。
サイズ - 同じサイズのファイルを探します。
ハッシュ - 同じ内容のファイルを探す。このモードは、ファイルをハッシュ化し、後でこのハッシュを比較して、重複を見つけます。このモードは、重複を見つけるための最も安全な方法です. このツールはキャッシュを多用するので、同じデータの2回目以降のスキャンは、最初のスキャンよりずっと速くなるはずです。
ハッシュ - 同じ内容のファイルを探します。ファイルをハッシュ化して比較することにより重複を見つけます。このモードは、重複を見つけるための最も安全な方法ですこのツールはキャッシュを多用するので、同じデータの2回目以降のスキャンは最初の時よりずっと速くなるはずです。
image_hash_size_tooltip =
Czkawkaは各画像に対して生成されたハッシュのサイズを変更することを提供する。 ハッシュが大きいほど、画像間の差異の少ない画像を見つけることができますが、使用が少し遅くなります。
Each checked image produces a special hash which can be compared with each other, and a small difference between them means that these images are similar.
8 hash size is quite good to find images that are only a little similar to original. With a bigger set of images (>1000), this will produce a big amount of false positives, so I recommend to use a bigger hash size in this case.
16 is the default hash size which is quite a good compromise between finding even a little similar images and having only a small amount of hash collisions.
32 and 64 hashes find only very similar images, but should have almost no false positives (maybe except some images with alpha channel).
image_resize_filter_tooltip =
To compute hash of image, the library must first resize it.
Depend on chosen algorithm, the resulting image used to calculate hash will looks a little different.
The fastest algorithm to use, but also the one which gives the worst results, is Nearest. It is enabled by default, because with 16x16 hash size lower quality it is not really visible.
ハッシュ値のデフォルト値は8バイトで、非常に類似した異なる画像を見つけることができます。 16 と 32 ハッシュは、ほぼ同じ画像にのみ使用する必要があります。 64 バイトのハッシュを使用するべきではありません。本当に小さな違いを見つける必要がある状況を除いて、
image_resize_filter_tooltip = 画像のハッシュを計算するには、まずライブラリのサイズを変更する必要があります。選択されたアルゴリズムによって、結果の画像はほとんど異なります。 最速のアルゴリズムだけでなく、最悪の結果をもたらすアルゴリズムはNearestです。
image_hash_alg_tooltip = ハッシュ計算の多くのアルゴリズムから1つを選択することができます。 それぞれが強い点と弱い点の両方を持っており、時には異なる画像のより良い結果と時には悪い結果を与えます。 最良のものを選ぶには手動でテストする必要があります
main_notebook_image_fast_compare = 比較を速くする
main_notebook_image_fast_compare_tooltip =
ハッシュの検索・比較を高速化。
With 8x8 hash size it is recommended to use a different algorithm than Nearest, to have better groups of images.
image_hash_alg_tooltip =
ハッシュの計算方法は、多くのアルゴリズムの中からユーザーが選択することができます。
通常モードでは、各ハッシュをx回比較しますxはユーザが選択した類似度
それぞれ長所と短所があり、画像によって良い結果が出る場合もあれば、悪い結果が出る場合もあります。
このオプションは、類似度が0(Very High) でない1,000枚以上の画像を比較する場合に推奨されます。
main_notebook_duplicates = ファイルを複製
そのため、最適なものを見極めるには、手動でのテストが必要です。
big_files_mode_combobox_tooltip = 最小/最大のファイルを検索できます
big_files_mode_label = チェックされたファイル
big_files_mode_smallest_combo_box = 最も小さい
big_files_mode_biggest_combo_box = 最大のもの
main_notebook_duplicates = 重複したファイル
main_notebook_empty_directories = 空のディレクトリ
main_notebook_big_files = 大きなファイル
main_notebook_empty_files = 空のファイル
main_notebook_temporary = 一時ファイル
main_notebook_similar_images = 類似の画像
main_notebook_similar_videos = 類似の動画
main_notebook_same_music = 音楽重複
main_notebook_symlinks = 無効なSymlinks
main_notebook_same_music = 重複した音楽
main_notebook_symlinks = 無効なシンボリックリンク
main_notebook_broken_files = 壊れたファイル
main_notebook_bad_extensions = 不正なエクステンション
main_tree_view_column_file_name = ファイル名
main_tree_view_column_folder_name = フォルダ名
main_tree_view_column_path = パス
main_tree_view_column_modification = 更日
main_tree_view_column_modification = 更
main_tree_view_column_size = サイズ
main_tree_view_column_similarity = 類似度
main_tree_view_column_dimensions = 寸法
main_tree_view_column_title = タイトル
main_tree_view_column_artist = アーティスト
main_tree_view_column_year = 年
main_tree_view_column_album_title = アルバムタイトル
main_tree_view_column_album_artist = アルバムアーティスト
main_tree_view_column_bitrate = ビットレート
main_tree_view_column_length = 長さ
main_tree_view_column_genre = Genre
main_tree_view_column_symlink_file_name = シンボリックリンクのファイル名
main_tree_view_column_symlink_folder = Symlnik フォルダ
main_tree_view_column_symlink_folder = シンボリックリンクフォルダ
main_tree_view_column_destination_path = 宛先パス
main_tree_view_column_type_of_error = エラーの種類
main_tree_view_column_current_extension = 現在のエクステンション
main_tree_view_column_proper_extensions = 適切な拡張
main_label_check_method = メソッドのチェック
main_label_hash_type = ハッシュタイプ
main_label_hash_type = ハッシュ方式
main_label_hash_size = ハッシュサイズ
main_label_size_bytes = サイズ(バイト)
main_label_min_size = 最小
main_label_min_size = 最小
main_label_max_size = 最大値
main_label_shown_files = 表示するファイルの数
main_label_resize_algorithm = アルゴリズムのサイズ変更
main_label_similarity = Similarity{ " " }
main_label_resize_algorithm = アルゴリズムのサイズを変更
main_label_similarity = 類似度{" "}
main_check_box_broken_files_audio = 音声
main_check_box_broken_files_pdf = Pdf
main_check_box_broken_files_archive = アーカイブする
main_check_box_broken_files_image = Image
check_button_general_same_size = 同じサイズを無視
check_button_general_same_size_tooltip = 結果から無視し、同じサイズのファイル - 通常、これは1:1重複です
check_button_general_same_size_tooltip = 結果として同じサイズのファイルを無視 - 通常、これらは1:1重複です
main_label_size_bytes_tooltip = スキャンで使用されるファイルのサイズ
# Upper window
upper_tree_view_included_folder_column_title = 検索するフォルダ
@ -98,71 +142,94 @@ upper_remove_included_button = 削除
upper_manual_add_excluded_button = 手動追加
upper_add_excluded_button = 追加
upper_remove_excluded_button = 削除
upper_manual_add_included_button_tooltip = 手動で検索するディレクトリ名を追加できます。
upper_manual_add_included_button_tooltip =
手動で検索するディレクトリ名を追加します。
一度に複数のパスを追加するには、 ;
/home/roman;/home/rozkazは/home/romanと/home/rozkazの2つのディレクトリを追加します。
upper_add_included_button_tooltip = 検索に新しいディレクトリを追加します。
upper_remove_included_button_tooltip = 検索からディレクトリを削除する。
upper_manual_add_excluded_button_tooltip = 除外されたディレクトリ名を手動で追加できます。
upper_remove_included_button_tooltip = 検索からディレクトリを削除します。
upper_manual_add_excluded_button_tooltip =
除外されたディレクトリ名を手動で追加します。
一度に複数のパスを追加するには、 ;
/home/roman;/home/krokiet は /home/roman と /home/keokiet の 2 つのディレクトリを追加します。
upper_add_excluded_button_tooltip = 検索で除外するディレクトリを追加します。
upper_remove_excluded_button_tooltip = 除外されたディレクトリを削除します。
upper_notebook_items_configuration = アイテム設定
upper_notebook_excluded_directories = 除外されたディレクトリ
upper_notebook_included_directories = 含まれるディレクトリ
upper_allowed_extensions_tooltip =
許可する拡張子はカンマで区切る必要があります(デフォルトではすべて使用可能です)。
許可する拡張子はカンマで区切る必要があります(デフォルトではすべてが使用可能です)。
複数の拡張子を一度に追加するマクロ: IMAGE, VIDEO, MUSIC, TEXT も利用可能です。
複数の拡張子を一度に追加するマクロ IMAGE, VIDEO, MUSIC, TEXT も利用可能です。
使用例: ".exe, IMAGE, VIDEO, .rar, 7z" - これは画像jpg、pngなど、動画avi、mp4など、exe、rar、7zファイルがスキャンされることを意味します。
upper_excluded_extensions_tooltip =
スキャンで無視される無効なファイルの一覧です。
使用例 ".exe, IMAGE, VIDEO, .rar, 7z" - 画像jpg、pngなど、動画avi、mp4など、exe、rar、7zファイルがスキャンされることを意味します。
許可された拡張子と無効化された拡張子の両方を使用する場合、この拡張子の方が優先度が高いので、ファイルはチェックされません
upper_excluded_items_tooltip =
除外された項目は*ワイルドカードを含んでいる必要があり、コンマで区切る必要があります。
除外されたディレクトリよりも遅いので注意して使用してください。
除外された項目はワイルドカード * を含んでいる必要があり、カンマで区切る必要があります。
ディレクトリを除外するよりも遅いので注意してください。
upper_excluded_items = 除外するアイテム:
upper_allowed_extensions = 許可される拡張子:
upper_excluded_extensions = 無効なエクステンション:
# Popovers
popover_select_all = すべて選択
popover_unselect_all = すべて選択解除
popover_reverse = 選択を逆にする
popover_select_all_except_oldest = 古いもの以外のすべてを選択
popover_select_all_except_newest = 最新以外のすべてを選択
popover_select_one_oldest = 古いものを選択
popover_select_one_newest = 最新を1つ選択してください
popover_select_custom = カスタム選択
popover_unselect_custom = カスタム選択を解除
popover_select_all_images_except_biggest = 最大値以外のすべてを選択
popover_select_all_images_except_smallest = 最小以外のすべてを選択
popover_select_all_except_oldest = 一番古いもの以外のすべてを選択
popover_select_all_except_newest = 一番新しいもの以外のすべてを選択
popover_select_one_oldest = 一番古いものを選択
popover_select_one_newest = 一番新しいものを選択
popover_select_custom = カスタム選択
popover_unselect_custom = カスタム選択を解除
popover_select_all_images_except_biggest = 一番大きいもの以外のすべてを選択
popover_select_all_images_except_smallest = 一番小さいもの以外のすべてを選択
popover_custom_path_check_button_entry_tooltip =
パスでレコードを選択できます。
パスによってレコードを選択します。
使用例:
/home/pimpek/rzecz.txt は /home/pim* で見つけることができます
popover_custom_name_check_button_entry_tooltip =
ファイル名でレコードを選択できます。
ファイル名でレコードを選択ます。
使用例:
*ong* で /usr/ping/pong.txt を見つけることができます
/usr/ping/pong.txt は *ong* でを見つけることができます
popover_custom_regex_check_button_entry_tooltip =
指定した正規表現でレコードを選択することができます。
このモードでは、検索された文字列はPath with Nameになります。
このモードでは、検索される文字列はパスと文字列になります。
使用例。
/usr/bin/ziemniak.txt は /ziem[a-z]+ で検索されます。
使用例:
/usr/bin/ziemniak.txt は /ziem[a-z]+ で検索できます。
これはRustのデフォルトの正規表現実装を使用しているので、詳しくは https://docs.rs/regex を参照してください。
popover_custom_case_sensitive_check_button_tooltip =
大文字小文字を区別する検出を有効にします。
これはRustのデフォルトの正規表現実装を使用しているので、詳しくはhttps://docs.rs/regex を参照してください。
/home/* を無効にすると、/Home/roman と /home/roman の両方が検出されます
popover_custom_not_all_check_button_tooltip =
グループ内のすべてのレコードを選択できないようにします。
これはデフォルトで有効になっています。ほとんどの状況でユーザーは元のファイルと重複ファイルの両方を削除したくないためです。 少なくとも1つのファイルを残したい
ほとんどの状況でユーザーは元のファイルと重複ファイルの両方を削除したくないため、これはデフォルトで有効になっています。 少なくとも1つのファイルを残したい。
警告: この設定は、すでにユーザーがグループ内のすべての結果を手動で選択している場合には機能しません。
popover_custom_regex_path_label = パス
popover_custom_regex_name_label = 名前
popover_custom_regex_regex_label = 正規表現パス + 名前
popover_custom_regex_regex_label = 正規表現(パス + 名前)
popover_custom_case_sensitive_check_button = 大文字と小文字を区別
popover_custom_all_in_group_label = グループ内のすべてのレコードを選択しない
popover_custom_mode_unselect = カスタムの選択を解除
popover_custom_mode_select = カスタムを選択
popover_custom_mode_unselect = カスタム選択を解除
popover_custom_mode_select = カスタム選択
popover_sort_file_name = ファイル名
popover_sort_folder_name = フォルダー名
popover_sort_full_name = カード名義人
popover_sort_size = サイズ
popover_sort_selection = 選択
popover_invalid_regex = 正規表現が無効です
popover_valid_regex = 正規表現が有効です
# Bottom buttons
@ -170,37 +237,45 @@ bottom_search_button = 検索
bottom_select_button = 選択
bottom_delete_button = 削除
bottom_save_button = 保存
bottom_symlink_button = Symlink
bottom_hardlink_button = Hardlink
bottom_symlink_button = シンボリックリンク
bottom_hardlink_button = ハードリンク
bottom_move_button = 移動
bottom_search_button_tooltip = ファイル/フォルダの検索を開始します。
bottom_sort_button = 並び替え
bottom_search_button_tooltip = 検索を開始
bottom_select_button_tooltip = レコードを選択します。選択したファイル/フォルダのみが後で処理できます。
bottom_delete_button_tooltip = 選択したファイル/フォルダを削除します。
bottom_save_button_tooltip = 検索に関するデータをファイルに保存
bottom_save_button_tooltip = 検索に関するデータをファイルに保存します。
bottom_symlink_button_tooltip =
シンボリックリンクを作成します。
グループ内の2つ以上の結果が選択されている場合のみ機能します。
最初の結果は変更されず、2番目以降の結果最初の結果にシンボリックリンクされます。
グループ内の2つ以上の結果が選択されている場合のみ機能します。
最初の結果は変更されず、2番目以降の結果最初の結果にシンボリックリンクされます。
bottom_hardlink_button_tooltip =
ハードリンクを作成します。
グループ内の2つ以上の結果が選択されているときのみ機能します。
最初の結果は変更されず、2番目以降が最初の結果にハードリンクされます。
グループ内の2つ以上の結果が選択されている場合にのみ機能します。
最初の結果は変更されず、2番目以降の結果が最初の結果にハードリンクされます。
bottom_hardlink_button_not_available_tooltip =
ハードリンクを作成する。
ハードリンクを作成できないため、ボタンは無効になっています。
ハードリンクはWindowsの管理者権限でのみ動作するので、アプリは必ず管理者として実行してください。
アプリがすでにそのような権限で動作している場合は、Githubに同様の問題がないか確認してください。
bottom_move_button_tooltip =
選択したフォルダにファイルを移動します。
ディレクトリツリーを維持したまま、すべてのファイルをフォルダにコピーします。
同じ名前の2つのファイルをフォルダに移動しようとすると、2番目のファイルが失敗し、エラーが表示されます。
bottom_show_errors_tooltip = 下部のエラーパネルの表示/非表示
bottom_show_upper_notebook_tooltip = 上部のノートブックパネルの表示/非表示
bottom_sort_button_tooltip = 選択した方法に従ってファイル/フォルダを並べ替えます。
bottom_show_errors_tooltip = 下部のエラーパネルを表示/非表示にします。
bottom_show_upper_notebook_tooltip = 上部のノートブックパネルを表示/非表示にします。
# Progress Window
progress_stop_button = 停止
progress_stop_additional_message = リクエストを停止する
# About Window
about_repository_button_tooltip = ソースコードでリポジトリページにリンクします。
about_donation_button_tooltip = 寄付ページにリンクします。
about_instruction_button_tooltip = 説明ページにリンクします。
about_translation_button_tooltip = アプリの翻訳とCrowdinのページへのリンク。公式にはポーランド語と英語がサポートされていますが、他の言語のヘルプは歓迎されます。
about_repository_button_tooltip = ソースコードのあるリポジトリページへのリンク
about_donation_button_tooltip = 寄付ページへのリンク
about_instruction_button_tooltip = 使い方ページへのリンク
about_translation_button_tooltip = Crowdin ページにアプリの翻訳をリンクします。公式にポーランド語と英語がサポートされています。
about_repository_button = リポジトリ
about_donation_button = 寄付
about_instruction_button = 説明
about_instruction_button = 使い方
about_translation_button = 翻訳
# Header
header_setting_button_tooltip = 設定ダイアログを開きます。
@ -211,38 +286,46 @@ header_about_button_tooltip = アプリに関する情報を含むダイアロ
## General
settings_save_at_exit_button_tooltip = アプリを閉じるときに設定をファイルに保存します。
settings_number_of_threads = 使用されるスレッドの数
settings_number_of_threads_tooltip = 使用するスレッドの数、0 は、使用可能なすべてのスレッドが使用されることを意味します。
settings_label_restart = 設定を適用するにはアプリを再起動する必要があります!
settings_ignore_other_filesystems = 他のファイルシステムを無視(Linuxのみ)
settings_ignore_other_filesystems_tooltip =
検索されたディレクトリと同じファイルシステムにないファイルを無視します。
Linux の find コマンドで -xdev オプションのように動作します。
settings_save_at_exit_button_tooltip = 終了時に設定をファイルに保存します。
settings_load_at_start_button_tooltip =
ファイルから設定を開始時に読み込みます。
起動時にファイルから設定を読み込みます。
このオプションを選択しないと、デフォルト設定が読み込まれます。
このオプションが無効の場合、デフォルトの設定が使用されます。
settings_confirm_deletion_button_tooltip = 削除ボタンをクリックしたときに確認ダイアログを表示します。
settings_confirm_link_button_tooltip = Hard/symlink ボタンをクリックしたときに確認ダイアログを表示します。
settings_confirm_group_deletion_button_tooltip = グループからすべてのレコードを削除しようとしたときにダイアログを表示します。
settings_show_text_view_button_tooltip = 下部にエラーパネルを表示
settings_use_cache_button_tooltip = キャッシュ機能を使用しないオプション
settings_save_also_as_json_button_tooltip = キャッシュを人間JSON形式で読み取り可能に保存します。コンテンツを変更することができます。 バイナリフォーマットキャッシュ(bin拡張子付き) がない場合、このファイルから自動的にキャッシュが読み込まれます。
settings_use_trash_button_tooltip = 有効にすると、ファイルをゴミ箱に移動する代わりに永久に削除します。
settings_language_label_tooltip = 利用可能な言語からインターフェイスの言語を選択できます。
settings_confirm_link_button_tooltip = ハードリンク/シンボリックリンクボタンをクリックしたときに確認ダイアログを表示します。
settings_confirm_group_deletion_button_tooltip = グループからすべてのレコードを削除しようとしたときに警告ダイアログを表示します。
settings_show_text_view_button_tooltip = 下部にテキストパネルを表示します。
settings_use_cache_button_tooltip = ファイルキャッシュを使用します
settings_save_also_as_json_button_tooltip = キャッシュを人間にも読みやすい形のJSON形式で保存します。この内容は編集可能です。コンテンツを変更することができます。 バイナリ形式のキャッシュbin拡張子のものがない場合、このファイルから自動的にキャッシュが読み込まれます。
settings_use_trash_button_tooltip = ファイルを永久に削除する代わりにゴミ箱に移動します。
settings_language_label_tooltip = 操作画面における言語を選択します。
settings_save_at_exit_button = 終了時に設定を保存
settings_load_at_start_button = 開始時に設定を読み込む
settings_load_at_start_button = 起動時に設定を読み込む
settings_confirm_deletion_button = ファイルを削除するときに確認ダイアログを表示する
settings_confirm_link_button = ハードリンク/シンボリックリンク時に確認ダイアログを表示する
settings_confirm_group_deletion_button = グループ内のすべてのファイルを削除するときに確認ダイアログを表示する
settings_show_text_view_button = 下部テキストパネルを表示
settings_show_text_view_button = 下部テキストパネルを表示
settings_use_cache_button = キャッシュを使用
settings_save_also_as_json_button = JSONファイルにもキャッシュを保存する
settings_use_trash_button = 削除したファイルをゴミ箱に移動する
settings_language_label = 言語
settings_multiple_delete_outdated_cache_checkbutton = 古いキャッシュエントリを自動的に削除
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
存在しないファイルを指している古いキャッシュ結果を削除できるようにします。
存在しないファイルを指している古いキャッシュエントリを削除できるようにします。
このオプションを有効にすると、アプリはレコードを読み込むときにすべてのポイントが有効なファイルであることを確認し、壊れたファイルを無視します
このオプションを有効にすると、アプリはレコードを読み込むときにすべてのポイントが有効なファイルであることを確認します(壊れたファイルは無視されます)
このオプションを無効にすると、外部ドライブ上のファイルをスキャンするのに役立ち、それらに関するキャッシュ エントリが次のスキャンで削除されなくなります。
無効にすると、それらに関するキャッシュエントリが次のスキャンで削除されなくなり、外部ドライブ上のファイルをスキャンする際に役立ちます。
キャッシュに何十万ものレコードがある場合、スキャンの開始時と終了時のキャッシュの読み込みと保存を高速化するために、このオプションを有効にすることが推奨されます。
キャッシュに何十万ものレコードがある場合、スキャンの開始時・終了時のキャッシュの読み込み・保存を高速化するためにこのオプションを有効にすることが推奨されます。
settings_notebook_general = 全般
settings_notebook_duplicates = 重複
settings_notebook_images = 類似の画像
@ -250,40 +333,40 @@ settings_notebook_videos = 類似の動画
## Multiple - settings used in multiple tabs
settings_multiple_image_preview_checkbutton_tooltip = 画像ファイルを選択するときに、プレビューを右側に表示します。
settings_multiple_image_preview_checkbutton_tooltip = 画像ファイルを選択しているとき、右側にプレビューを表示します。
settings_multiple_image_preview_checkbutton = 画像のプレビューを表示
settings_multiple_clear_cache_button_tooltip =
古いエントリから手動でキャッシュをクリアします。
古いキャッシュエントリを手動でクリアします。
自動クリアが無効の場合にのみ使用する必要があります。
settings_multiple_clear_cache_button = 画像キャッシュから古い結果を削除します
settings_multiple_clear_cache_button = キャッシュから古い結果を削除します
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
1つを除くすべてのファイルを非表示にします。同じデータを指している場合(ハードリンクされています)。
ハードリンクされていてかつ同じデータを指している場合、1つを除くすべてのファイルを非表示にします。
E.g. ディスク上に特定のデータにハードリンクされている7つのファイルがある場合 同じデータを持つ1つの異なるファイルが異なるが、異なるinodeの 複製されたファインダーでは一意のファイルとハードリンクされたファイルのファイルのみが表示されます
例: ディスク上に特定のデータにハードリンクされている同じデータを持つ7つのファイルと、1つの異なるinodeのファイルがある場合、 重複検索では一意のファイルとハードリンクされたファイルのみが表示されます
settings_duplicates_minimal_size_entry_tooltip =
キャッシュされるファイルの最小サイズを設定できます。
キャッシュされるファイルの最小サイズを設定ます。
値を小さくすると、検索を高速化するレコードが増えますが、キャッシュの読み込み/保存が遅くなります。
値を小さくするとキャッシュが生成されるレコードが増え検索が高速化しますが、キャッシュの読み込みと保存が遅くなります。
settings_duplicates_prehash_checkbutton_tooltip =
プレハッシュ(ファイルの一部から計算したハッシュ) のキャッシュを有効にし、重複していない結果を早めに捨てられるようにします。
プレハッシュ(ファイルの一部から計算したハッシュ) のキャッシュを有効にし、重複していない検索結果をより早く捨てられるようにします。
この機能はデフォルトでは無効になっています。
いくつかの場面では低速化の要因になりうるので、この機能はデフォルトでは無効になっています。
数十万、数百万ファイルをスキャンする場合は、検索を何倍も高速化できるため、使用を強く推奨します。
数十万・数百万のファイルをスキャンする場合には、検索を何倍も高速化できるため使用を強く推奨します。
settings_duplicates_prehash_minimal_entry_tooltip = キャッシュされたエントリの最小サイズ。
settings_duplicates_hide_hard_link_button = ハードリンクを隠す (Linux と MacOSのみ)
settings_duplicates_hide_hard_link_button = ハードリンクを非表示にするLinuxとMacOSのみ
settings_duplicates_prehash_checkbutton = プリハッシュキャッシュを使用
settings_duplicates_minimal_size_cache_label = キャッシュに保存されたバイト単位のファイルの最小サイズ
settings_duplicates_minimal_size_cache_prehash_label = プリハッシュキャッシュに保存されたバイト単位のファイルの最小サイズ
settings_duplicates_minimal_size_cache_label = キャッシュに保存するファイルの最小サイズ(バイト単位)
settings_duplicates_minimal_size_cache_prehash_label = プリハッシュキャッシュに保存するファイルの最小サイズ(バイト単位)
## Saving/Loading settings
settings_saving_button_tooltip = 現在の設定をファイルに保存します。
settings_loading_button_tooltip = 設定をファイルから読み込み、現在の設定を置き換えます。
settings_reset_button_tooltip = 現在の設定をデフォルトにリセットします。
settings_reset_button_tooltip = 設定をデフォルトにリセットします。
settings_saving_button = 設定を保存
settings_loading_button = 構成を読み込む
settings_reset_button = 設定をリセット
@ -293,114 +376,124 @@ settings_reset_button = 設定をリセット
settings_folder_cache_open_tooltip =
キャッシュを持つtxtファイルが保存されているフォルダを開きます。
これらのファイルを変更すると不正な結果を表示することがありますが、パスなどを変更することで、大量のファイルを別の場所に移動する際の時間を短縮することができます。
これらのファイルを変更すると不正な結果を表示することがありますが、パスなどを変更することで、大量のファイルを別の場所に移動する際の時間を短縮することができます。
このファイルをコンピュータ間でコピーすることで、再度ファイルをスキャンする時間を節約できます(もちろん、コンピュータのディレクトリ構造が似ている場合)。
このファイルをコンピュータ間でコピーすることで、再度ファイルをスキャンするときの時間を節約できます(もちろん、コンピュータのディレクトリ構造が似ている場合に限り)。
キャッシュに問題がある場合、このファイルを削除することができアプリは自動的にそれらを再生成します。
キャッシュに問題がある場合、このファイルを削除することができます。アプリは自動的にそれらを再生成します。
settings_folder_settings_open_tooltip =
チェコの設定が保存されているフォルダを開きます。
Czkawkaの設定ファイルが保存されているフォルダを開きます。
手動で変更すると、ワークフローが壊れる可能性があります。
警告: 手動で変更すると、ワークフローが壊れる可能性があります。
settings_folder_cache_open = キャッシュフォルダーを開く
settings_folder_settings_open = 設定フォルダを開く
# Compute results
compute_stopped_by_user = 検索はユーザーによって停止されました
compute_found_duplicates_hash_size = { $number_files } 個のグループで { $number_groups } 個の重複が { $size } 個見つかりました
compute_found_duplicates_name = { $number_files } グループ内に { $number_groups } 件の重複が見つかりました
compute_found_duplicates_hash_size = { $size } の { $number_groups } グループ内で { $number_files } 件の重複が見つかりました
compute_found_duplicates_name = { $number_groups } グループ内で { $number_files } 件の重複が見つかりました
compute_found_empty_folders = 空のフォルダが { $number_files } 個見つかりました
compute_found_empty_files = 空の { $number_files } 個のファイルが見つかりました
compute_found_big_files = { $number_files } 個の大きなファイルが見つかりました
compute_found_temporary_files = { $number_files } 一時ファイルが見つかりました
compute_found_empty_files = 空のファイルが { $number_files } 個見つかりました
compute_found_big_files = 大きなファイルが { $number_files } 個見つかりました
compute_found_temporary_files = 一時ファイルが { $number_files } 個見つかりました
compute_found_images = { $number_groups } グループで { $number_files } 件の類似した画像が見つかりました
compute_found_videos = { $number_groups } グループで { $number_files } 件の類似した動画が見つかりました
compute_found_music = { $number_groups } グループで { $number_files } 件の類似した音楽ファイルが見つかりました
compute_found_invalid_symlinks = { $number_files } 無効なシンボリックリンクが見つかりました
compute_found_invalid_symlinks = 無効なシンボリックリンクが { $number_files } 個見つかりました
compute_found_broken_files = 壊れたファイルが { $number_files } 個見つかりました
compute_found_bad_extensions = 無効な拡張子を持つ { $number_files } 個のファイルが見つかりました
# Progress window
progress_scanning_general_file = { $file_number } ファイルをスキャン中
progress_scanning_extension_of_files = { $file_checked }/{ $all_files } ファイルの拡張子を確認中
progress_scanning_broken_files = { $file_checked }/{ $all_files } ファイルを確認中
progress_scanning_video = { $file_checked }/{ $all_files } ビデオのハッシュ
progress_scanning_image = { $file_checked }/{ $all_files } の画像のハッシュ
progress_comparing_image_hashes = { $file_checked }/{ $all_files } 画像ハッシュの比較
progress_scanning_music_tags_end = { $file_checked }/{ $all_files } 音楽ファイルのタグの比較
progress_scanning_music_tags = { $file_checked }/{ $all_files } 音楽ファイルのタグを読み込み中
progress_scanning_music_content_end = { $file_checked }/{ $all_files } 音楽ファイルのフィンガープリントの比較
progress_scanning_music_content = { $file_checked }/{ $all_files } 音楽ファイルのフィンガープリントを計算中
progress_scanning_empty_folders = { $folder_number } フォルダをスキャン中
progress_scanning_size = { $file_number } ファイルのサイズをスキャンしています
progress_scanning_size = { $file_number } ファイルのサイズをスキャン中
progress_scanning_size_name = 名前と { $file_number } ファイルのサイズをスキャンしています
progress_scanning_name = { $file_number } ファイルの名前をスキャン中
progress_analyzed_partial_hash = { $file_checked }/{ $all_files } ファイルの部分ハッシュを分析しました
progress_analyzed_full_hash = { $file_checked }/{ $all_files } ファイルの完全ハッシュを分析しました
progress_current_stage = 現在のステージ:{ " " }
progress_all_stages = すべてのステージ:{ " " }
progress_analyzed_partial_hash = { $file_checked }/{ $all_files } ファイルの部分ハッシュを分析中
progress_analyzed_full_hash = { $file_checked }/{ $all_files } ファイルの完全ハッシュを分析中
progress_prehash_cache_loading = プレハッシュキャッシュを読み込み中
progress_prehash_cache_saving = プレハッシュキャッシュを保存しています
progress_hash_cache_loading = ハッシュキャッシュを読み込み中
progress_hash_cache_saving = ハッシュキャッシュを保存中
progress_cache_loading = キャッシュを読み込み中
progress_cache_saving = キャッシュを保存中
progress_current_stage = 現在のステージ:{ " " }
progress_all_stages = すべてのステージ:{ " " }
# Saving loading
saving_loading_saving_success = ファイル { $name } に設定を保存しました。
saving_loading_saving_failure = 設定データをファイル { $name } に保存できませんでした。
saving_loading_saving_failure = ファイル { $name } への設定データの保存に失敗しました。
saving_loading_reset_configuration = 現在の設定がクリアされました。
saving_loading_loading_success = 正しく読み込まれたアプリの設定。
saving_loading_loading_success = 設定の読み込みが正常に完了しました
saving_loading_invalid_string = キー "{ $key }" の場合、文字列ではない不正な結果 - "{ $result }" が見つかりました。
saving_loading_invalid_int = キー "{ $key }" の場合、整数ではない "{ $result }" の不正な結果が見つかりました。
saving_loading_invalid_int = キー "{ $key }" の場合、整数ではない不正な結果 - "{ $result }" が見つかりました。
saving_loading_invalid_bool = キー "{ $key }" の場合、ブールではない不正な結果 - "{ $result }" が見つかりました。
saving_loading_decode_problem_bool = キー "{ $key }"{ $result }" から bool をデコードできませんでしたが、許可されている値は 0、1、true、または false です。
saving_loading_saving_same_keys = 重複キー「{ $key }」で設定を保存しています。
saving_loading_failed_to_get_home_directory = ホームディレクトリを開く/保存に失敗しました。
saving_loading_folder_config_instead_file = フォルダが既に存在するため、パス「{ $path }」に保存設定ファイルを作成または開くことができません。
saving_loading_failed_to_create_configuration_folder = 設定フォルダ「{ $path }」、理由「{ $reason }」の作成に失敗しました
saving_loading_failed_to_create_config_file = 設定ファイル「{ $path }」、理由「{ $reason }」の作成に失敗しました
saving_loading_failed_to_read_config_file = 存在しないかファイルでないため、"{ $path }"から設定を読み込めません。
saving_loading_failed_to_read_data_from_file = ファイル "{ $path }", 理由 "{ $reason } " からデータを読み取ることができません。
saving_loading_orphan_data = "{ $data }" 行に "{ $line } " が見つかりました。
saving_loading_not_valid = 設定 "{ $data }" は現在のアプリのバージョンに存在しません。
saving_loading_decode_problem_bool = キー "{ $key }" から bool をデコードできませんでした。"{ $result }"が見つかりましたが、許可されている値は 0、1、true、または false です。
saving_loading_saving_same_keys = 重複したキー "{ $key }" で設定を保存しようとしています。
saving_loading_failed_to_get_home_directory = ホームディレクトリの取得に失敗したため、設定ファイルの読み込み/保存ができませんでした。
saving_loading_folder_config_instead_file = フォルダが既に存在するため、パス "{ $path }" に設定ファイルを作成または読み込み・保存することができません。
saving_loading_failed_to_create_configuration_folder = 設定フォルダ "{ $path }" の作成に失敗しました、理由 "{ $reason }"
saving_loading_failed_to_create_config_file = 設定ファイル "{ $path }" の作成に失敗しました、理由 "{ $reason }"
saving_loading_failed_to_read_config_file = 存在しないか設定ファイルでないため、"{ $path }" から設定を読み込めません。
saving_loading_failed_to_read_data_from_file = ファイル "{ $path }" からデータを読み取ることができません、理由 "{ $reason } "
saving_loading_orphan_data = { $line } 行目に孤立したデータ "{ $data }" が見つかりました。
saving_loading_not_valid = 設定 "{ $data }" は現在のバージョンのアプリ存在しません。
# Invalid symlinks
invalid_symlink_infinite_recursion = 無限再帰性
invalid_symlink_non_existent_destination = 保存先ファイルが存在しません
# Other
selected_all_reference_folders = すべてのディレクトリが参照フォルダとして設定されている場合、検索を開始できません
searching_for_data = データを検索中、しばらくお待ちください...
text_view_messages = メッセージ
text_view_warnings = 警告
text_view_errors = エラー
about_window_motto = このプログラムは自由に使用することができ、常になります
about_window_motto = このプログラムは自由に使用することができます、常に。
# Various dialog
dialogs_ask_next_time = 次回に確認
delete_file_failed = ファイル { $name } の削除に失敗しました , 理由 { $reason }
delete_file_failed = ファイル { $name } の削除に失敗しました理由 { $reason }
delete_title_dialog = 削除の確認
delete_question_label = ファイルを削除してもよろしいですか?
delete_all_files_in_group_title = グループ内のすべてのファイルを削除することの確認
delete_all_files_in_group_label1 = 一部のグループでは、すべてのレコードが選択されています。
delete_all_files_in_group_label1 = いくつかのグループでは、すべてのレコードが選択されています。
delete_all_files_in_group_label2 = 本当に削除しますか?
delete_folder_failed = フォルダが存在しないため、フォルダ { $dir } の削除に失敗しました。権限がないか、空ではありません。
delete_folder_failed = フォルダが存在しないため、フォルダ { $dir } の削除に失敗しました。権限がないか、そのフォルダは空ではありません。
delete_items_label = { $items } ファイルが削除されます。
delete_items_groups_label = { $items } グループから { $groups } 個のファイルが削除されます。
delete_items_groups_label = { $groups } グループから { $items } 個のファイルが削除されます。
hardlink_failed = ハードリンクに失敗しました
hard_sym_invalid_selection_title_dialog = いくつかのグループで無効な選択です
hard_sym_invalid_selection_label_1 = 一部のグループでは、選択されたレコードは1つだけで、無視されます。
hard_sym_invalid_selection_label_2 = このファイルをハード/システムにリンクできるようにするには、グループ内の少なくとも2つの結果を選択する必要があります。
hard_sym_invalid_selection_label_3 = 最初のグループは、元として認識され、変更されていませんが、後で変更されます。
hard_sym_invalid_selection_label_1 = いくつかのグループでは一つのレコードしか選択されていないため、それらは無視されます。
hard_sym_invalid_selection_label_2 = これらのファイルをハード/シンボリックにリンクできるようにするには、グループ内の少なくとも2つの結果を選択する必要があります。
hard_sym_invalid_selection_label_3 = グループ内で最初のものはオリジナルとして認識され変更されませんが、二つ目以降は変更されます。
hard_sym_link_title_dialog = リンクの確認
hard_sym_link_label = このファイルをリンクしてもよろしいですか?
move_folder_failed = フォルダ { $name } の移動に失敗しました , 理由 { $reason }
move_folder_failed = フォルダ { $name } の移動に失敗しました理由 { $reason }
move_file_failed = ファイル { $name } を移動できませんでした、理由 { $reason }
move_files_title_dialog = 重複したファイルを移動するフォルダを選択
move_files_choose_more_than_1_path = 重複したファイルをコピーするには、1つのパスのみを選択する必要があります。 { $path_number }
move_stats = { $num_files }/{ $all_files } アイテムを正しく移動しました
save_results_to_file = ファイル { $name } に結果を保存しました
move_files_title_dialog = 重複したファイルの移動先フォルダを選択
move_files_choose_more_than_1_path = 重複したファイルをコピーするには、1つのパスのみを選択する必要があります、{ $path_number } つ選択されました。
move_stats = { $num_files }/{ $all_files } アイテムを適切に移動しました
save_results_to_file = txtファイルとjsonファイルの両方を { $name } フォルダに保存しました
search_not_choosing_any_music = エラー: 音楽検索タイプのチェックボックスを少なくとも1つ選択する必要があります。
search_not_choosing_any_broken_files = エラー: チェックされた壊れたファイルの種類のチェックボックスを少なくとも1つ選択する必要があります。
include_folders_dialog_title = 含めるフォルダ
exclude_folders_dialog_title = 除外するフォルダ
include_manually_directories_dialog_title = ディレクトリを手動で追加
cache_properly_cleared = キャッシュを適切にクリアしました
cache_clear_duplicates_title = 重複したキャッシュをクリアする
cache_clear_similar_images_title = 類似画像のキャッシュをクリア中
cache_clear_similar_videos_title = 類似の動画キャッシュをクリア中
cache_clear_message_label_1 = 古いエントリからキャッシュを消去しますか?
cache_clear_similar_images_title = 類似した画像のキャッシュをクリア中
cache_clear_similar_videos_title = 類似した動画のキャッシュをクリア中
cache_clear_message_label_1 = 古いエントリキャッシュを消去しますか?
cache_clear_message_label_2 = この操作は無効なファイルを指すすべてのキャッシュエントリを削除します。
cache_clear_message_label_3 = これは、キャッシュへの読み込み/保存を少し高速化することがあります。
cache_clear_message_label_4 = 警告: 操作により、アンプラグドの外部ドライブからキャッシュされたすべてのデータが削除されます。そのため、ハッシュを再度生成する必要があります。
cache_clear_message_label_3 = これはキャッシュへの読み込みと保存を少し高速化することがあります。
cache_clear_message_label_4 = 警告: 操作により、現在接続されていない外部ドライブからキャッシュされたすべてのデータが削除されます。そのため、それらのハッシュは再度生成する必要があります。
# Show preview
preview_temporary_file = 一時イメージ ファイル { $name } を開けませんでした、理由 { $reason }。
preview_0_size = 画像 { $name } のプレビューを作成できません。幅または高さが0です。
preview_temporary_image_save = 一時イメージファイルを { $name }、理由 { $reason } に保存できませんでした。
preview_temporary_image_remove = 一時イメージ ファイル { $name } の削除に失敗しました、理由 { $reason }。
preview_failed_to_create_cache_dir = 画像プレビュー、理由 { $name } で必要なdir { $reason } を作成できませんでした。
preview_image_resize_failure = 画像 { $name } のリサイズに失敗しました。
preview_image_opening_failure = イメージ { $name } を開けませんでした、理由 { $reason }
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = グループ { $current_group }/{ $all_groups } ({ $images_in_group } 画像)
compare_move_left_button = L

@ -0,0 +1,500 @@
# Window titles
window_settings_title = 설정
window_main_title = Czkawka (Hiccup)
window_progress_title = 스캔중
window_compare_images = 이미지 비교
# General
general_ok_button = 확인
general_close_button = 닫기
# Main window
music_title_checkbox = 제목
music_artist_checkbox = 아티스트
music_year_checkbox = 연도
music_bitrate_checkbox = 비트레이트
music_genre_checkbox = 장르
music_length_checkbox = 길이
music_comparison_checkbox = 근사값 비교
music_checking_by_tags = Tags
music_checking_by_content = Content
same_music_seconds_label = Minimal fragment second duration
same_music_similarity_label = Maximum difference
same_music_tooltip =
Searching for similar music files by its content can be configured by setting:
- The minimum fragment time after which music files can be identified as similar
- The maximum difference difference between two tested fragments
The key to good results is to find sensible combinations of these parameters, for provided.
Setting the minimum time to 5s and the maximum difference to 1.0, will look for almost identical fragments in the files.
A time of 20s and a maximum difference of 6.0, on the other hand, works well for finding remixes/live versions etc.
By default, each music file is compared to each other and this can take a lot of time when testing many files, so it is usually better to use reference folders and specifying which files are to be compared with each other(with same amount of files, comparing fingerprints will be faster at least 4x than without reference folders).
music_comparison_checkbox_tooltip =
기계학습을 통해 각 항목의 괄호를 제거합니다. 예를 들어, 다음 두 파일은 같은 파일로 인식될 것입니다.
Świędziżłób --- Świędziżłób (Remix Lato 2021)
duplicate_case_sensitive_name = 대소문자 구분
duplicate_case_sensitive_name_tooltip =
대소문자 구분이 켜져 있으면, 완전히 같은 이름만이 중복 파일로 검색됩니다. 예시: Żołd <-> Żołd
대소문자 구분이 꺼져 있으면, 대문자와 소문자 구별을 하지 않고 중복 파일을 검색합니다. 예시: żoŁD <-> Żołd
duplicate_mode_size_name_combo_box = Size and Name
duplicate_mode_name_combo_box = 파일명
duplicate_mode_size_combo_box = 파일 크기
duplicate_mode_hash_combo_box = 해시
duplicate_hash_type_tooltip =
Czkawka는 3가지 유형의 해시 함수를 지원합니다.
Blake3 - 암호화에 사용되는 해시입니다. 매우 빠르게 작동하므로, 기본값으로 설정되어 있습니다.
CRC32 - 간단한 해시 함수입니다. Blake3보다는 빠르지만, 매우 드물게 충돌이 발생합니다.
XXH3 - Black3와 해시 품질 및 성능 면에서 매우 유사하지만, 암호화에 쓰이지는 않습니다. 때문에 Black3와 실질적으로 같습니다.
duplicate_check_method_tooltip =
현재 Czkawka는 중복 파일을 찾는데 3가지 방법을 지원합니다.
파일명 - 같은 이름을 가진 파일들을 찾습니다.
파일 크기 - 같은 크기를 가진 파일들을 찾습니다.
해시 - 같은 내용을 가진 파일들을 찾습니다. 이 모드에서는 먼저 파일을 해시한 다음, 각 해시값들을 비교하여 중복 파일인지 식별합니다. 때문에 중복 파일을 찾는 데 있어 가장 확실한 방법입니다. Czkawka는 캐시에 매우 의존하므로, 같은 데이터를 두 번째 이후로 스캔하는 경우 첫 번째 스캔보다 더욱 빠르게 스캔이 이루어집니다.
image_hash_size_tooltip =
Each checked image produces a special hash which can be compared with each other, and a small difference between them means that these images are similar.
8 hash size is quite good to find images that are only a little similar to original. With a bigger set of images (>1000), this will produce a big amount of false positives, so I recommend to use a bigger hash size in this case.
16 is the default hash size which is quite a good compromise between finding even a little similar images and having only a small amount of hash collisions.
32 and 64 hashes find only very similar images, but should have almost no false positives (maybe except some images with alpha channel).
image_resize_filter_tooltip =
To compute hash of image, the library must first resize it.
Depend on chosen algorithm, the resulting image used to calculate hash will looks a little different.
The fastest algorithm to use, but also the one which gives the worst results, is Nearest. It is enabled by default, because with 16x16 hash size lower quality it is not really visible.
With 8x8 hash size it is recommended to use a different algorithm than Nearest, to have better groups of images.
image_hash_alg_tooltip =
해시를 계산하는 데 사용되는 알고리즘을 선택할 수 있습니다.
각각의 알고리즘은 장단점이 있으므로, 경우마다 더 낫거나 더 나쁜 결과를 보여줄 수 있습니다.
따라서 가장 좋은 알고리즘을 찾으려면 수동으로 테스트해 보는 것이 좋습니다.
big_files_mode_combobox_tooltip = 가장 큰 파일 또는 가장 작은 파일을 찾을 수 있습니다.
big_files_mode_label = 찾을 파일
big_files_mode_smallest_combo_box = 작은 파일
big_files_mode_biggest_combo_box = 큰 파일
main_notebook_duplicates = 중복 파일
main_notebook_empty_directories = 빈 디렉터리
main_notebook_big_files = 큰 파일
main_notebook_empty_files = 빈 파일
main_notebook_temporary = 임시 파일
main_notebook_similar_images = 비슷한 이미지
main_notebook_similar_videos = 비슷한 영상
main_notebook_same_music = 중복 음악
main_notebook_symlinks = 잘못된 심볼릭 링크
main_notebook_broken_files = 손상된 파일
main_notebook_bad_extensions = 잘못된 확장자
main_tree_view_column_file_name = 파일명
main_tree_view_column_folder_name = 폴더명
main_tree_view_column_path = 경로
main_tree_view_column_modification = 수정한 날짜
main_tree_view_column_size = 파일 크기
main_tree_view_column_similarity = 유사도
main_tree_view_column_dimensions = 크기
main_tree_view_column_title = 제목
main_tree_view_column_artist = 아티스트
main_tree_view_column_year = 연도
main_tree_view_column_bitrate = 비트레이트
main_tree_view_column_length = 길이
main_tree_view_column_genre = 장르
main_tree_view_column_symlink_file_name = 심볼릭 링크 파일명
main_tree_view_column_symlink_folder = 심볼릭 링크 폴더
main_tree_view_column_destination_path = 심볼릭 링크 대상 경로
main_tree_view_column_type_of_error = 손상 유형
main_tree_view_column_current_extension = 현재 확장자
main_tree_view_column_proper_extensions = 올바른 확장자
main_label_check_method = 확인 방법
main_label_hash_type = 해시 유형
main_label_hash_size = 해시 크기
main_label_size_bytes = 파일 크기 (바이트)
main_label_min_size = 최소
main_label_max_size = 최대
main_label_shown_files = 찾을 파일의 개수
main_label_resize_algorithm = 크기 변경 알고리즘
main_label_similarity = 유사도{ " " }
main_check_box_broken_files_audio = 음악 파일
main_check_box_broken_files_pdf = PDF
main_check_box_broken_files_archive = 압축 파일
main_check_box_broken_files_image = 이미지
check_button_general_same_size = 같은 파일크기 무시
check_button_general_same_size_tooltip = Ignore files with identical size in results - usually these are 1:1 duplicates
main_label_size_bytes_tooltip = 스캔할 파일의 크기입니다.
# Upper window
upper_tree_view_included_folder_column_title = 검색할 폴더
upper_tree_view_included_reference_column_title = 기준 폴더
upper_recursive_button = 재귀
upper_recursive_button_tooltip = 켜져 있으면, 하위 폴더 내부의 파일까지 검색합니다.
upper_manual_add_included_button = 수동 추가
upper_add_included_button = 추가
upper_remove_included_button = 제거
upper_manual_add_excluded_button = 수동 추가
upper_add_excluded_button = 추가
upper_remove_excluded_button = 제거
upper_manual_add_included_button_tooltip =
직접 검색할 경로를 입력합니다.
여러 경로를 입력하고자 한다면, ';'로 구분하세요.
'/home/roman;/home/rozkaz' 를 입력하면, '/home/roman'와 '/home/rozkaz'가 추가됩니다.
upper_add_included_button_tooltip = 검색할 디렉터리를 추가합니다.
upper_remove_included_button_tooltip = 검색할 디렉터리에서 제거합니다.
upper_manual_add_excluded_button_tooltip =
직접 제외할 경로를 입력합니다.
여러 경로를 입력하고자 한다면, ';'로 구분하세요.
'/home/roman;/home/krokiet' 를 입력하면, '/home/roman'와 '/home/krokiet'가 추가됩니다.
upper_add_excluded_button_tooltip = 제외할 디렉터리를 추가합니다.
upper_remove_excluded_button_tooltip = 제외할 디렉터리에서 제거합니다.
upper_notebook_items_configuration = 항목 설정
upper_notebook_excluded_directories = 제외할 디렉터리
upper_notebook_included_directories = 검색할 디렉터리
upper_allowed_extensions_tooltip =
허용할 확장자는 콤마(',')를 통해 구분해야 합니다. (기본값인 경우 모든 확장자를 허용합니다.)
IMAGE, VIDEO, MUSIC, TEXT를 입력할 경우 해당하는 파일을 모두 지칭할 수 있습니다.
예시: ".exe, IMAGE, VIDEO, .rar, 7z" - 이와 같이 입력하면, 이미지 파일(예. jpg, png), 영상 파일(예. avi, mp4), exe, rar, 그리고 7z 파일을 검색합니다.
upper_excluded_extensions_tooltip =
List of disabled files which will be ignored in scan.
When using both allowed and disabled extensions, this one has higher priority, so file will not be checked.
upper_excluded_items_tooltip =
제외할 항목은 반드시 '*' 와일드카드 문자를 사용해서 추가해야 하며, 콤마(',')로 구분되어야 합니다.
디렉터리를 직접 제외하는 것보다 느립니다. 주의해서 사용하세요.
upper_excluded_items = 제외할 항목:
upper_allowed_extensions = 허용할 확장자:
upper_excluded_extensions = Disabled Extensions:
# Popovers
popover_select_all = 모두 선택
popover_unselect_all = 모두 선택 해제
popover_reverse = 선택 반전
popover_select_all_except_oldest = 가장 오래된 파일 제외하고 모두 선택
popover_select_all_except_newest = 가장 최신인 파일 제외하고 모두 선택
popover_select_one_oldest = 가장 오래된 파일 선택
popover_select_one_newest = 가장 최신인 파일 선택
popover_select_custom = 사용자 지정 선택
popover_unselect_custom = 사용자 지정 선택 해제
popover_select_all_images_except_biggest = 가장 큰 파일 제외하고 모두 선택
popover_select_all_images_except_smallest = 가장 작은 파일 제외하고 모두 선택
popover_custom_path_check_button_entry_tooltip =
경로를 기준으로 선택합니다.
사용 예시:
'/home/pimpek/rzecz.txt' 파일을 선택하려면 '/home/pim*'와 같이 입력하세요.
popover_custom_name_check_button_entry_tooltip =
파일 이름을 기준으로 선택합니다.
사용 예시:
'/usr/ping/pong.txt' 파일을 선택하려면 '*ong*'와 같이 입력하세요.
popover_custom_regex_check_button_entry_tooltip =
정규표현식을 이용해 선택합니다.
이 모드에서는 경로와 이름 모두가 정규표현식에 의해 검색됩니다.
사용 예시:
'/usr/bin/ziemniak.txt' 파일을 선택하려면 '/ziem[a-z]+'와 같이 입력하세요.
정규 표현식은 Rust 언어에 내장된 구현체를 사용합니다. 더 알고 싶다면 https://docs.rs/regex를 방문하세요.
popover_custom_case_sensitive_check_button_tooltip =
대소문자를 구분할 지 여부를 선택합니다.
만일 꺼져 있으면, '/home/*'은 '/HoMe/roman'과 '/home/roman'를 모두 선택합니다.
popover_custom_not_all_check_button_tooltip =
한 그룹에 있는 모든 항목이 선택되는 것을 방지합니다.
이 옵션은 기본적으로 켜져 있습니다. 대부분의 경우, 원본과 중복 파일을 전부 선택하여 삭제하는 것은 원하지 않는 동작일 것입니다. 즉 각 그룹에서 최소한 하나의 항목은 삭제하지 않고 남겨놓게 됩니다.
경고! 이 설정은 수동으로 그룹의 모든 파일을 이미 선택해 놓았다면 작동하지 않습니다!
popover_custom_regex_path_label = 경로
popover_custom_regex_name_label = 파일명
popover_custom_regex_regex_label = 경로 및 파일 정규표현식
popover_custom_case_sensitive_check_button = 대소문자 구별
popover_custom_all_in_group_label = 그룹의 모든 항목을 선택하지 않음
popover_custom_mode_unselect = 사용자 지정 선택 해제
popover_custom_mode_select = 사용자 지정 선택
popover_sort_file_name = 파일 이름
popover_sort_folder_name = 폴더 이름
popover_sort_full_name = 본인 이름
popover_sort_size = 파일 크기
popover_sort_selection = 선택
popover_invalid_regex = 정규표현식이 유효하지 않습니다.
popover_valid_regex = 정규표현식이 유효합니다.
# Bottom buttons
bottom_search_button = 검색
bottom_select_button = 선택
bottom_delete_button = 삭제
bottom_save_button = 저장
bottom_symlink_button = 심볼릭 링크
bottom_hardlink_button = 하드 링크
bottom_move_button = 이동
bottom_sort_button = 종류
bottom_search_button_tooltip = 검색을 시작합니다.
bottom_select_button_tooltip = 항목을 선택합니다. 오직 선택된 것만이 처리됩니다.
bottom_delete_button_tooltip = 선택된 파일 또는 폴더를 삭제합니다.
bottom_save_button_tooltip = 검색 결과를 파일로 저장합니다.
bottom_symlink_button_tooltip =
심볼릭 링크를 생성합니다.
그룹 내에서 최소한 2개의 파일이 선택되어 있어야 합니다.
첫 번째 파일은 그대로 남으며, 두 번째 이후 파일은 첫 번째 파일로 향하는 심볼릭 링크가 됩니다.
bottom_hardlink_button_tooltip =
하드 링크를 생성합니다.
그룹 내에서 최소한 2개의 파일이 선택되어 있어야 합니다.
첫 번째 파일은 그대로 남으며, 두 번째 이후 파일은 첫 번째 파일로 향하는 하드 링크가 됩니다.
bottom_hardlink_button_not_available_tooltip =
하드 링크를 생성합니다.
현재 하드 링크를 만들 수 없어 버튼이 비활성화되었습니다.
Windows에서 하드 링크는 관리자 권한으로만 만들 수 있습니다. 프로그램이 관리자 권한으로 실행되었는지 확인하세요.
만일 프로그램이 이미 관리자 권한으로 실행되었다면, Github에서 비슷한 이슈가 있는지 확인해보세요.
bottom_move_button_tooltip =
선택된 디렉터리로 파일을 이동합니다.
이 동작은 원본이 위치한 경로를 전부 무시하고, 선택한 경로로 파일을 전부 복사합니다.
만일 2개 이상의 파일이 같은 이름을 가지고 있다면, 첫 번째 이후의 파일은 복사에 실패하고 오류 메시지를 보여줄 것입니다.
bottom_sort_button_tooltip = 파일/폴더를 선택한 방법으로 정렬합니다.
bottom_show_errors_tooltip = 하단 텍스트 패널을 보이거나 숨깁니다.
bottom_show_upper_notebook_tooltip = 상단 패널을 보이거나 숨깁니다.
# Progress Window
progress_stop_button = 정지
progress_stop_additional_message = 정지 요청됨
# About Window
about_repository_button_tooltip = 소스 코드가 있는 리포지토리 페이지 링크입니다.
about_donation_button_tooltip = 기부 페이지 링크입니다.
about_instruction_button_tooltip = 사용방법 페이지 링크입니다.
about_translation_button_tooltip = 번역을 위한 Crowdin 페이지 링크입니다. 공식적으로 지원되는 언어는 폴란드어와 영어입니다.
about_repository_button = 리포지토리
about_donation_button = 기부
about_instruction_button = 사용방법
about_translation_button = 번역
# Header
header_setting_button_tooltip = 설정창을 엽니다.
header_about_button_tooltip = 이 앱에 대한 정보창을 엽니다.
# Settings
## General
settings_number_of_threads = 스레드 수
settings_number_of_threads_tooltip = 사용할 스레드 수입니다. 0이면 가능한 최대 스레드를 사용합니다.
settings_label_restart = 이 설정을 적용하려면 프로그램을 재시작해야 합니다!
settings_ignore_other_filesystems = 다른 파일시스템 무시(Linux에서만)
settings_ignore_other_filesystems_tooltip =
검색할 디렉터리와 파일시스템이 다른 디렉터리를 무시합니다.
Linux의 find 명령에서 -xdev 옵션을 준 것과 동일하게 동작합니다.
settings_save_at_exit_button_tooltip = 프로그램 종료 시에 설정을 저장합니다.
settings_load_at_start_button_tooltip =
프로그램을 열 때 저장된 설정을 불러옵니다.
꺼져 있다면, 기본 설정으로 프로그램을 시작합니다.
settings_confirm_deletion_button_tooltip = 삭제 버튼을 누를 때 확인창을 띄웁니다.
settings_confirm_link_button_tooltip = 하드 링크/심볼릭 링크 버튼을 누를 때 확인창을 띄웁니다.
settings_confirm_group_deletion_button_tooltip = 그룹의 모든 항목을 삭제할 경우 경고창을 보여줍니다.
settings_show_text_view_button_tooltip = UI 하단에 텍스트 패널을 보여줍니다.
settings_use_cache_button_tooltip = 파일 캐시를 사용합니다.
settings_save_also_as_json_button_tooltip = 캐시를 (사람이 읽을 수 있는) JSON 포맷으로 저장합니다. 캐시 내용을 수정할 수 있습니다. 만일 bin 확장자를 가진 바이너리 캐시 파일이 없으면, JSON 캐시가 프로그램 시작 시에 대신 로드됩니다.
settings_use_trash_button_tooltip = 파일을 영구 삭제하는 대신 휴지통으로 이동합니다.
settings_language_label_tooltip = UI에 표시될 언어를 설정합니다.
settings_save_at_exit_button = 프로그램을 닫을 때 설정을 저장
settings_load_at_start_button = 프로그램을 열 때 설정을 불러오기
settings_confirm_deletion_button = 항목 삭제 시에 확인창 띄우기
settings_confirm_link_button = 항목 심볼릭 링크/하드 링크 설정시에 확인창 띄우기
settings_confirm_group_deletion_button = 그룹 내의 모든 항목 삭제 시 경고창 띄우기
settings_show_text_view_button = 하단 텍스트 패널 표시하기
settings_use_cache_button = 캐시 사용
settings_save_also_as_json_button = 캐시를 JSON 포맷으로도 저장
settings_use_trash_button = 삭제된 파일을 휴지통으로 이동
settings_language_label = 언어
settings_multiple_delete_outdated_cache_checkbutton = 만료된 파일을 캐시에서 자동으로 삭제
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
더 이상 존재하지 않는 파일에 대한 정보를 캐시에서 삭제합니다.
이 옵션이 켜져 있으면, 프로그램은 존재하는 파일만이 캐시에 남도록 할 것입니다(망가진 파일은 무시됩니다).
이 옵션을 끄는 것은 외장 저장장치에 존재하는 파일을 스캔했을 때, 외장 저장장치에 있는 파일에 대한 캐시를 보존하는 데 도움이 됩니다.
만일 수백~수천 개의 파일에 해당하는 정보가 캐시에 있다면 이 옵션을 켜는 것을 추천합니다. 이 경우 캐시를 저장하거나 불러오는 시간이 빨라집니다.
settings_notebook_general = 일반
settings_notebook_duplicates = 중복 파일
settings_notebook_images = 유사한 이미지
settings_notebook_videos = 유사한 영상
## Multiple - settings used in multiple tabs
settings_multiple_image_preview_checkbutton_tooltip = 이미지 파일을 선택하면 우측에 미리보기를 보여줍니다.
settings_multiple_image_preview_checkbutton = 이미지 미리보기 표시
settings_multiple_clear_cache_button_tooltip =
더 이상 존재하지 않는 파일을 캐시에서 제거합니다.
캐시를 자동으로 정리하는 옵션이 꺼져 있을 때만 사용하세요.
settings_multiple_clear_cache_button = Remove outdated results from cache.
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
하나의 파일에 대한 여러 개의 하드 링크가 존재할 경우, 그 중 하나만을 표시합니다.
예: 만일 특정한 파일에 대한 7개의 하드 링크가 디스크에 존재하고, 그 중 하나가 다른 inode를 갖는다면, 결과창에는 1개의 파일과 1개의 하드 링크만이 표시됩니다.
settings_duplicates_minimal_size_entry_tooltip =
캐시에 추가되기 위한 최소 파일 사이즈를 설정합니다.
이 값이 작을 수록 더 많은 파일이 캐시에 저장됩니다. 이 경우 검색은 더 빨라지지만, 캐시 저장 및 불러오기는 느려집니다.
settings_duplicates_prehash_checkbutton_tooltip =
사전 해시(파일 일부만으로 계산되는 해시)에 대한 캐싱을 허용하여, 중복이 아닌 파일을 더 빠르게 결과에서 제거합니다.
이 옵션은 일부 상황에서 검색을 느리게 하기 때문에, 기본적으로 꺼져 있습니다.
만일 수백~수천 개 이상의 파일처럼 매우 많은 파일을 여러 번 검색하는 경우, 이 기능을 반드시 켜는 것을 추천합니다.
settings_duplicates_prehash_minimal_entry_tooltip = 캐싱을 위한 최소 파일크기입니다.
settings_duplicates_hide_hard_link_button = 하드 링크 숨기기 (Linux 및 macOS)
settings_duplicates_prehash_checkbutton = 사전 해시 캐싱하기
settings_duplicates_minimal_size_cache_label = 캐싱하기 위한 최소 파일 크기 (바이트)
settings_duplicates_minimal_size_cache_prehash_label = 사전 해시를 캐싱하기 위한 최소 파일 크기 (바이트)
## Saving/Loading settings
settings_saving_button_tooltip = 현재 설정을 파일에 저장합니다.
settings_loading_button_tooltip = 저장된 설정을 불러와 현재 설정을 덮어씁니다.
settings_reset_button_tooltip = 설정을 기본값으로 되돌립니다.
settings_saving_button = 설정 저장
settings_loading_button = 설정 불러오기
settings_reset_button = 설정 초기화
## Opening cache/config folders
settings_folder_cache_open_tooltip =
캐시 파일이 저장되는 폴더를 엽니다.
캐시 파일을 편집하는 경우 유효하지 않은 결과가 표시될 수 있습니다. 다만, 많은 양의 파일이 다른 곳으로 이동되었다면 캐시 내의 경로를 수정하는 것이 도움이 됩니다.
만일 비슷한 디렉터리 구조를 가지는 경우, 캐시 파일을 복사하여 다른 컴퓨터에서도 같은 캐시를 재활용할 수 있습니다.
만일 캐시에 문제가 발생한다면 이 폴더의 파일들을 지우십시오. 그렇게 하면 프로그램이 다시 캐시 파일을 생성합니다.
settings_folder_settings_open_tooltip =
Czkawka의 설정 파일이 있는 폴더를 엽니다.
경고! 설정 파일을 수동으로 편집하는 경우 원치 않는 동작이 일어날 수 있습니다.
settings_folder_cache_open = 캐시 폴더 열기
settings_folder_settings_open = 설정 폴더 열기
# Compute results
compute_stopped_by_user = 사용자에 의해 검색이 중단됨.
compute_found_duplicates_hash_size = 총 { $number_groups }개의 그룹, { $number_files }개의 중복 파일을 찾음. 총 크기 { $size }
compute_found_duplicates_name = 총 { $number_groups }개의 그룹, { $number_files }개의 중복 파일을 찾음.
compute_found_empty_folders = 총 { $number_files }개의 빈 폴더를 찾음.
compute_found_empty_files = 총 { $number_files }개의 빈 파일을 찾음.
compute_found_big_files = 총 { $number_files }개의 큰 파일을 찾음.
compute_found_temporary_files = 총 { $number_files }개의 임시 파일을 찾음.
compute_found_images = 총 { $number_groups }개의 그룹, { $number_files }개의 유사한 이미지를 찾음.
compute_found_videos = 총 { $number_groups }개의 그룹, { $number_files }개의 유사한 영상을 찾음.
compute_found_music = 총 { $number_groups }개의 그룹, { $number_files }개의 유사한 음악 파일을 찾음.
compute_found_invalid_symlinks = 총 { $number_files } 개의 유효하지 않은 심볼릭 링크를 찾음.
compute_found_broken_files = { $number_files }개의 손상된 파일을 찾음.
compute_found_bad_extensions = 총 { $number_files }개의 잘못된 확장자를 가진 파일을 찾음.
# Progress window
progress_scanning_general_file = { $file_number }개의 파일 스캔 중
progress_scanning_extension_of_files = { $file_checked }/{ $all_files }개 파일의 확장자 점검 중
progress_scanning_broken_files = { $file_checked }/{ $all_files }개 파일 점검 중
progress_scanning_video = { $file_checked }/{ $all_files }개 영상 해시 계산 중
progress_scanning_image = { $file_checked }/{ $all_files }개 이미지 해시 계산 중
progress_comparing_image_hashes = { $file_checked }/{ $all_files }개 이미지 해시 비교 중
progress_scanning_music_tags_end = { $file_checked }/{ $all_files }개 음악 파일 태그 검색 중
progress_scanning_music_tags = { $file_checked }/{ $all_files }개 음악 파일 태그 읽는 중
progress_scanning_music_content_end = Comparing fingerprint of { $file_checked }/{ $all_files } music file
progress_scanning_music_content = Calculating fingerprint of { $file_checked }/{ $all_files } music file
progress_scanning_empty_folders = { $folder_number }개 폴더 검색 중
progress_scanning_size = { $file_number }개 파일의 크기 스캔 중
progress_scanning_size_name = Scanning name and size of { $file_number } file
progress_scanning_name = { $file_number }개 파일의 이름 스캔 중
progress_analyzed_partial_hash = { $file_checked }/{ $all_files }개 파일의 부분 해시 계산 중
progress_analyzed_full_hash = { $file_checked }/{ $all_files }개 파일의 전체 해시 계산 중
progress_prehash_cache_loading = Loading prehash cache
progress_prehash_cache_saving = Saving prehash cache
progress_hash_cache_loading = Loading hash cache
progress_hash_cache_saving = Saving hash cache
progress_cache_loading = Loading cache
progress_cache_saving = Saving cache
progress_current_stage = 현재 단계:{ " " }
progress_all_stages = 전체 단계:{ " " }
# Saving loading
saving_loading_saving_success = 파일 { $name }에 설정 저장함.
saving_loading_saving_failure = 파일 { $name }에 설정 저장 실패.
saving_loading_reset_configuration = 현재 설정이 초기화됨.
saving_loading_loading_success = 앱 설정 불러오기 성공.
saving_loading_invalid_string = 키 "{ $key }"의 값이 올바르지 않습니다. "{ $result }"는 string이 아닙니다.
saving_loading_invalid_int = 키 "{ $key }"의 값이 올바르지 않습니다. "{ $result }"는 integer가 아닙니다.
saving_loading_invalid_bool = 키 "{ $key }"의 값이 올바르지 않습니다. "{ $result }"은 bool이 아닙니다.
saving_loading_decode_problem_bool = 키 "{ $key }"의 값을 bool로 해석할 수 없습니다. 허용된 값은 0, 1, true, false 중 하나이지만 실제 값이 "{ $result }"입니다.
saving_loading_saving_same_keys = 키 "{ $key }"가 중복되어 있습니다.
saving_loading_failed_to_get_home_directory = 설정 파일을 저장 또는 불러오기 위한 홈 디렉터리를 찾을 수 없습니다.saving_loading_folder_config_instead_file = "{ $path }"에 있는 설정 파일을 열거나 설정 파일을 생성할 수 없습니다. 파일과 같은 이름의 폴더가 존재합니다.
saving_loading_folder_config_instead_file = "{ $path }"에 설정 파일을 만들거나 열 수 없습니다. 이미 같은 이름의 폴더가 존재합니다.
saving_loading_failed_to_create_configuration_folder = 설정 폴더를 "{ $path }"에 생성할 수 없습니다. 이유: "{ $reason }".
saving_loading_failed_to_create_config_file = "{ $path }" 파일에 설정을 저장할 수 없습니다. 이유: "{ $reason }".
saving_loading_failed_to_read_config_file = "{ $path }" 파일에서 설정을 불러올 수 없습니다. 파일이 없거나, 파일이 아닙니다.
saving_loading_failed_to_read_data_from_file = "{ $path }" 파일을 읽을 수 없습니다. 이유: "{ $reason }".
saving_loading_orphan_data = { $line }번 행에 고아 데이터 "{ $data }"가 있습니다.
saving_loading_not_valid = 설정 "{ $data }"은 현재 프로그램 버전에 존재하지 않습니다.
# Invalid symlinks
invalid_symlink_infinite_recursion = 무한 재귀
invalid_symlink_non_existent_destination = 목표 파일이 없음
# Other
selected_all_reference_folders = 모든 디렉터리가 기준 폴더이므로, 검색을 시작할 수 없습니다.
searching_for_data = 검색 중. 잠시만 기다려주세요...
text_view_messages = 알림
text_view_warnings = 경고
text_view_errors = 오류
about_window_motto = 이 프로그램은 무료이며, 앞으로도 항상 그럴 것이다.
# Various dialog
dialogs_ask_next_time = 다음에도 묻기
delete_file_failed = { $name } 파일 삭제 실패. 이유: { $reason }
delete_title_dialog = 삭제 확인
delete_question_label = 정말로 파일들을 삭제합니까?
delete_all_files_in_group_title = 그룹의 모든 파일 삭제 확인
delete_all_files_in_group_label1 = 일부 그룹 내에 있는 모든 파일이 선택되어 있습니다.
delete_all_files_in_group_label2 = 정말로 해당 파일을 모두 삭제합니까?
delete_folder_failed = { $dir } 폴더가 존재하지 않거나, 권한이 없거나, 폴더가 비어있지 않아 삭제할 수 없습니다.
delete_items_label = { $items }개의 파일이 삭제됩니다.
delete_items_groups_label = { $groups }개 그룹에서 { $items }개의 파일이 삭제됩니다.
hardlink_failed = 하드 링크 생성 실패
hard_sym_invalid_selection_title_dialog = 일부 그룹의 선택이 유효하지 않습니다.
hard_sym_invalid_selection_label_1 = 일부 그룹에서 1개의 항목만이 선택되었으며, 해당 항목은 무시됩니다.
hard_sym_invalid_selection_label_2 = 하드 링크/심볼릭 링크를 생성하려면, 그룹 내에서 최소 2개의 파일이 선택되어야 합니다.
hard_sym_invalid_selection_label_3 = 그룹 내의 첫 번째가 원본으로 설정되며, 나머지는 수정될 것입니다.
hard_sym_link_title_dialog = 링크 생성 확인
hard_sym_link_label = 정말로 해당 파일들을 링크합니까?
move_folder_failed = { $name } 폴더 이동 실패. 이유: { $reason }
move_file_failed = { $name } 파일 이동 실패. 이유: { $reason }
move_files_title_dialog = 중복 파일을 이동할 폴더를 선택하세요.
move_files_choose_more_than_1_path = 중복 파일을 복사할 1개의 폴더만 지정해야 하지만, { $path_number }개의 경로를 선택했습니다.
move_stats = { $num_files }/{ $all_files }개의 항목을 이동함
save_results_to_file = Saved results both to txt and json files into { $name } folder.
search_not_choosing_any_music = 경고: 최소한 하나의 검색 방법을 선택해야 합니다.
search_not_choosing_any_broken_files = 경고: 최소한 하나 이상의 검색할 파일 분류를 선택해야 합니다.
include_folders_dialog_title = 검색할 폴더 추가
exclude_folders_dialog_title = 제외할 폴더 추가
include_manually_directories_dialog_title = 수동으로 디렉터리 추가
cache_properly_cleared = 캐시를 성공적으로 정리했습니다.
cache_clear_duplicates_title = 중복 파일 캐시 정리
cache_clear_similar_images_title = 유사한 이미지 캐시 정리
cache_clear_similar_videos_title = 유사한 영상 캐시 정리
cache_clear_message_label_1 = 유효하지 않은 캐시 항목을 제거할까요?
cache_clear_message_label_2 = 이 동작은 더 이상 유효하지 않은 파일에 대한 캐시 항목을 제거합니다.
cache_clear_message_label_3 = 이를 통해 더 빠른 캐시 저장/불러오기가 가능할 수 있습니다.
cache_clear_message_label_4 = 경고! 이 동작은 연결되지 않은 외장 저장장치에 위치한 모든 항목을 제거합니다. 따라서 해당 파일들에 대한 캐시는 다시 생성되어야 합니다.
# Show preview
preview_image_resize_failure = { $name } 이미지 크기 조정 실패.
preview_image_opening_failure = { $name } 이미지 열기 실패. 이유: { $reason }
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = 그룹 { $current_group }/{ $all_groups } ({ $images_in_group } 이미지)
compare_move_left_button = 이전
compare_move_right_button = 다음

@ -0,0 +1,500 @@
# Window titles
window_settings_title = Instellingen
window_main_title = Czkawka (Hiccup)
window_progress_title = Scannen
window_compare_images = Vergelijk afbeeldingen
# General
general_ok_button = OK
general_close_button = Afsluiten
# Main window
music_title_checkbox = Aanspreektitel
music_artist_checkbox = Kunstenaar
music_year_checkbox = jaar
music_bitrate_checkbox = Bitsnelheid
music_genre_checkbox = genre
music_length_checkbox = longueur
music_comparison_checkbox = Geschatte vergelijking
music_checking_by_tags = Labels
music_checking_by_content = Inhoud
same_music_seconds_label = Minimale fragment tweede duur
same_music_similarity_label = Maximum verschil
same_music_tooltip =
Zoeken naar vergelijkbare muziekbestanden door de inhoud ervan kan worden geconfigureerd door instelling:
- De minimale fragmenttijd waarna muziekbestanden kunnen worden geïdentificeerd als vergelijkbaar
- Het maximale verschil tussen twee geteste fragmenten
De sleutel tot goede resultaten is om verstandige combinaties van deze parameters te vinden, voor opgegeven.
Instelling van de minimale tijd op 5 en het maximale verschil op 1.0, zal zoeken naar bijna identieke fragmenten in de bestanden.
Een tijd van 20 en een maximaal verschil van 6,0 werkt daarentegen goed voor het vinden van remixes/live versies, enz.
Standaard wordt elk muziekbestand met elkaar vergeleken en dit kan veel tijd in beslag nemen bij het testen van veel bestanden, dus is het meestal beter om referentie-mappen te gebruiken en aan te geven welke bestanden met elkaar moeten worden vergeleken (met dezelfde hoeveelheid bestanden, Het vergelijken van vingerafdrukken is sneller dan zonder referentiemateriaal).
music_comparison_checkbox_tooltip =
Het zoekt naar vergelijkbare muziekbestanden met behulp van AI, die machine-leren gebruikt om haakjes uit een zin te verwijderen. Bijvoorbeeld met deze optie ingeschakeld de bestanden in kwestie zullen als duplicaten worden beschouwd:
SØ wieľdzizive b --- S000000wie.pldzizľb (Remix Lato 2021)
duplicate_case_sensitive_name = Kist gevoelig
duplicate_case_sensitive_name_tooltip =
Wanneer ingeschakeld, groep alleen records wanneer ze precies dezelfde naam hebben, b.v. Zit ołd <-> ZØ ołd
Uitschakelen van een dergelijke optie zal namen groeperen zonder te controleren of elke letter hetzelfde formaat heeft, bijv. zghaoŁD <-> Zit ołd
duplicate_mode_size_name_combo_box = Grootte en naam
duplicate_mode_name_combo_box = naam
duplicate_mode_size_combo_box = Grootte
duplicate_mode_hash_combo_box = Toegangssleutel
duplicate_hash_type_tooltip =
Czkawka biedt 3 soorten hashes:
Blake3 - cryptografische hash-functie. Dit is de standaard omdat het erg snel is.
CRC32 - eenvoudige hashfunctie. Dit zou sneller moeten zijn dan Blake3, maar kan zeer zelden een botsing veroorzaken.
XXH3 - erg vergelijkbaar in prestaties en hashkwaliteit naar Blake3 (maar niet-cryptografie). Dergelijke modi kunnen dus eenvoudig worden verwisseld.
duplicate_check_method_tooltip =
Op dit moment biedt Czkawka drie soorten methode aan om duplicaten te vinden door:
Naam - Gevonden bestanden met dezelfde naam.
Grootte - Gevonden bestanden die dezelfde grootte hebben.
Hash - Gevonden bestanden die dezelfde inhoud hebben. Deze modus hashet het bestand en vergelijkt deze hash later om duplicaten te vinden. Deze modus is de veiligste manier om duplicaten te vinden. App gebruikt zwaar cache, dus de tweede en verdere scans van dezelfde gegevens zou veel sneller moeten zijn dan de eerste.
image_hash_size_tooltip =
Elke gecontroleerde afbeelding produceert een speciale hash die met elkaar kan worden vergeleken en een klein verschil tussen hen betekent dat deze afbeeldingen vergelijkbaar zijn.
8 hash size is vrij goed om afbeeldingen te vinden die maar een beetje lijken op origineel. Met een grotere set afbeeldingen (>1000) levert dit een grote hoeveelheid valse positieven op. Dus ik raad in dit geval aan een grotere hashgrootte te gebruiken.
16 is de standaard hash-afmeting, wat een heel goed compromis is tussen het vinden van zelfs een beetje gelijksoortige afbeeldingen en het hebben van slechts een klein aantal hash-botsingen.
32 en 64 hashes vinden slechts zeer gelijksoortige afbeeldingen, maar zouden bijna geen valse positieve motieven moeten hebben (behalve sommige afbeeldingen met alpha kanaal).
image_resize_filter_tooltip =
Om hash van de afbeelding te berekenen, moet de bibliotheek deze eerst grootschalen.
Afhankelijk van het gekozen algoritme, zal de uiteindelijke afbeelding die gebruikt wordt om hash te berekenen er een beetje anders uitzien.
Het snelste algoritme te gebruiken, maar ook het algoritme dat de slechtste resultaten geeft, is het dichtstbijst. Het is standaard ingeschakeld, want met 16x16 hash grootte is het niet echt zichtbaar.
met 8x8 hash grootte is het raadzaam om een ander algoritme te gebruiken dan Nearest, om betere groepen afbeeldingen te hebben.
image_hash_alg_tooltip =
Gebruikers kunnen kiezen uit een van de vele algoritmes om de hash te berekenen.
Elk van deze punten heeft sterke en zwakke punten en zal soms betere en soms slechtere resultaten opleveren voor verschillende afbeeldingen.
Dus om het beste voor u te bepalen, is handmatige test vereist.
big_files_mode_combobox_tooltip = Maakt het mogelijk om naar kleinste/grootste bestanden te zoeken
big_files_mode_label = Gecontroleerde bestanden
big_files_mode_smallest_combo_box = De Kleinste
big_files_mode_biggest_combo_box = De Grootste
main_notebook_duplicates = Dupliceer Bestanden
main_notebook_empty_directories = Lege mappen
main_notebook_big_files = Grote bestanden
main_notebook_empty_files = Lege bestanden
main_notebook_temporary = Tijdelijke bestanden
main_notebook_similar_images = Vergelijkbare afbeeldingen
main_notebook_similar_videos = Soortgelijke video's
main_notebook_same_music = Muziek duplicaten
main_notebook_symlinks = Ongeldige Symlinks
main_notebook_broken_files = Kapotte Bestanden
main_notebook_bad_extensions = Slechte extensies
main_tree_view_column_file_name = File Name
main_tree_view_column_folder_name = Map Naam
main_tree_view_column_path = Pad
main_tree_view_column_modification = Wijziging datum
main_tree_view_column_size = Grootte
main_tree_view_column_similarity = Vergelijkbaarheid
main_tree_view_column_dimensions = Mål
main_tree_view_column_title = Aanspreektitel
main_tree_view_column_artist = Kunstenaar
main_tree_view_column_year = jaar
main_tree_view_column_bitrate = Bitsnelheid
main_tree_view_column_length = longueur
main_tree_view_column_genre = genre
main_tree_view_column_symlink_file_name = Symlink bestandsnaam
main_tree_view_column_symlink_folder = Symlink map
main_tree_view_column_destination_path = Bestemming pad
main_tree_view_column_type_of_error = Type fout
main_tree_view_column_current_extension = Huidige extensie
main_tree_view_column_proper_extensions = Proper Extensie
main_label_check_method = Controleer methode
main_label_hash_type = Soort hash
main_label_hash_size = Hash grootte
main_label_size_bytes = Grootte (bytes)
main_label_min_size = Min.
main_label_max_size = Max.
main_label_shown_files = Aantal getoonde bestanden
main_label_resize_algorithm = Algoritme aanpassen
main_label_similarity = Similarity{ " " }
main_check_box_broken_files_audio = Geluid
main_check_box_broken_files_pdf = PDF
main_check_box_broken_files_archive = Archief
main_check_box_broken_files_image = Afbeelding
check_button_general_same_size = Negeer dezelfde grootte
check_button_general_same_size_tooltip = Bestanden met identieke grootte in resultaten negeren - meestal zijn deze 1:1 duplicaten
main_label_size_bytes_tooltip = Grootte van bestanden die zullen worden gebruikt in scan
# Upper window
upper_tree_view_included_folder_column_title = Mappen om te zoeken
upper_tree_view_included_reference_column_title = Referentie Mappen
upper_recursive_button = Recursief
upper_recursive_button_tooltip = Indien geselecteerd, zoek ook naar bestanden die niet direct onder de gekozen mappen worden geplaatst.
upper_manual_add_included_button = Handmatig toevoegen
upper_add_included_button = Toevoegen
upper_remove_included_button = Verwijderen
upper_manual_add_excluded_button = Handmatig toevoegen
upper_add_excluded_button = Toevoegen
upper_remove_excluded_button = Verwijderen
upper_manual_add_included_button_tooltip =
Voeg mapnaam toe om met de hand te zoeken.
Om meerdere paden tegelijk toe te voegen, scheiden ze met ;
/home/roman;/home/rozkaz zal twee mappen / home/roman en /home/rozkaz toevoegen
upper_add_included_button_tooltip = Voeg nieuwe map toe om te zoeken.
upper_remove_included_button_tooltip = Map verwijderen uit zoekopdracht.
upper_manual_add_excluded_button_tooltip =
Voeg uitgesloten mapnaam met de hand toe.
Om meerdere paden tegelijk toe te voegen, scheid ze met
/home/roman;/home/krokiet zal twee mappen / home/roman en /home/keokiet toevoegen
upper_add_excluded_button_tooltip = Voeg map toe om uitgesloten te worden in zoekopdracht.
upper_remove_excluded_button_tooltip = Verwijder map van uitgesloten.
upper_notebook_items_configuration = Artikelen configuratie
upper_notebook_excluded_directories = Uitgesloten Mappen
upper_notebook_included_directories = Inbegrepen Mappen
upper_allowed_extensions_tooltip =
Toegestane extensies moeten door komma's gescheiden worden (standaard zijn alle beschikbaar).
De volgende macro's die meerdere extensies in één keer toevoegen, zijn ook beschikbaar: IMAGE, VIDEO, MUSIC, TEXT.
Gebruiksgebruik voorbeeld ".exe, IMAGE, VIDEO, .rar, 7z" - dit betekent dat afbeeldingen (e. . jpg, png), video's (bijv. avi, mp4), exe, rr en 7z bestanden worden gescand.
upper_excluded_extensions_tooltip =
Lijst van uitgeschakelde bestanden die genegeerd zullen worden in scan.
Wanneer gebruik wordt gemaakt van toegestane en uitgeschakelde extensies, heeft deze hogere prioriteit, dus het bestand zal niet worden gecontroleerd.
upper_excluded_items_tooltip =
Uitgesloten items moeten * jokertekens bevatten en moeten gescheiden worden door komma's.
Dit is langzamer dan uitgesloten mappen, dus gebruik het zorgvuldig.
upper_excluded_items = Uitgesloten artikelen:
upper_allowed_extensions = Toegestane extensies:
upper_excluded_extensions = Uitgeschakelde extensies:
# Popovers
popover_select_all = Alles selecteren
popover_unselect_all = Selectie ongedaan maken
popover_reverse = Omgekeerde selectie
popover_select_all_except_oldest = Alles selecteren behalve oudste
popover_select_all_except_newest = Selecteer alles behalve nieuwste
popover_select_one_oldest = Selecteer één oudste
popover_select_one_newest = Selecteer een nieuwste
popover_select_custom = Selecteer aangepaste
popover_unselect_custom = Aangepaste deselecteer ongedaan maken
popover_select_all_images_except_biggest = Alles selecteren behalve de grootste
popover_select_all_images_except_smallest = Selecteer alles behalve de kleinste
popover_custom_path_check_button_entry_tooltip =
Records per pad selecteren.
Voorbeeld gebruik:
/home/pimpek/rzecz.txt kan worden gevonden met /home/pim*
popover_custom_name_check_button_entry_tooltip =
Records selecteren op bestandnamen.
Voorbeeld gebruik:
/usr/ping/pong.txt kan worden gevonden met *ong*
popover_custom_regex_check_button_entry_tooltip =
Select records by specified Regex.
In this mode is searched text Path with Name.
Voorbeeld use usage:
/usr/bin/ziemniak. xt kan gevonden worden met /ziem[a-z]+
Dit gebruikt de standaard Rust regex implementatie. Je kunt hier meer over lezen: https://docs.rs/regex.
popover_custom_case_sensitive_check_button_tooltip =
Maakt hoofdlettergevoelige detectie mogelijk.
Wanneer uitgeschakeld /home/* vindt zowel /HoMe/roman en /home/roman.
popover_custom_not_all_check_button_tooltip =
Voorkomt dat alle records in de groep worden geselecteerd.
Dit is standaard ingeschakeld, omdat in de meeste situaties u wilt niet zowel origineel als duplicaten verwijderen, maar ten minste één bestand achterlaten.
WAARSCHUWING: Deze instelling werkt niet als je al handmatig alle resultaten hebt geselecteerd in een groep.
popover_custom_regex_path_label = Pad
popover_custom_regex_name_label = naam
popover_custom_regex_regex_label = Regex pad + naam
popover_custom_case_sensitive_check_button = Hoofdletter gevoelig
popover_custom_all_in_group_label = Niet alle records in groep selecteren
popover_custom_mode_unselect = Aangepaste deselecteren
popover_custom_mode_select = Selecteer aangepast
popover_sort_file_name = Bestandsnaam is vereist
popover_sort_folder_name = Folder Name
popover_sort_full_name = Volledige naam
popover_sort_size = Grootte
popover_sort_selection = Selectie
popover_invalid_regex = Regex is ongeldig
popover_valid_regex = Regex is geldig
# Bottom buttons
bottom_search_button = Zoeken
bottom_select_button = Selecteren
bottom_delete_button = Verwijderen
bottom_save_button = Opslaan
bottom_symlink_button = Symlink
bottom_hardlink_button = Hardlink
bottom_move_button = Verplaatsen
bottom_sort_button = Sorteren
bottom_search_button_tooltip = Zoeken starten
bottom_select_button_tooltip = Selecteer records. Alleen geselecteerde bestanden/mappen kunnen later worden verwerkt.
bottom_delete_button_tooltip = Verwijder geselecteerde bestanden/mappen.
bottom_save_button_tooltip = Gegevens opslaan van zoekopdracht naar bestand
bottom_symlink_button_tooltip =
Maak symbolische links.
Werkt alleen wanneer ten minste twee resultaten in een groep zijn geselecteerd.
De eerste is ongewijzigd en de tweede is symgekoppeld naar eerst.
bottom_hardlink_button_tooltip =
Maak hardlinks.
Werkt alleen wanneer ten minste twee resultaten in een groep worden geselecteerd.
De eerste is ongewijzigd en de tweede keer en later zijn vastgekoppeld aan eerst.
bottom_hardlink_button_not_available_tooltip =
Maak hardlinks.
Knop is uitgeschakeld, omdat hardlinks niet kunnen worden gemaakt.
Hardlinks werkt alleen met beheerdersrechten op Windows, dus zorg ervoor dat je de app als administrator gebruikt.
Als de app al werkt met dergelijke privileges controle op gelijksoortige issues op Github.
bottom_move_button_tooltip =
Verplaatst bestanden naar de gekozen map.
Het kopieert alle bestanden naar de map zonder de mapstructuur te bewaren.
Wanneer twee bestanden met dezelfde naam naar de map worden verplaatst, zal de tweede mislukt en de fout worden weergegeven.
bottom_sort_button_tooltip = Sorteert bestanden/mappen op de geselecteerde methode.
bottom_show_errors_tooltip = Onderste tekstvenster tonen/verbergen
bottom_show_upper_notebook_tooltip = Toon/Verberg bovenste notitieboekpaneel.
# Progress Window
progress_stop_button = Stoppen
progress_stop_additional_message = Stop aangevraagd
# About Window
about_repository_button_tooltip = Link naar de repository pagina met broncode.
about_donation_button_tooltip = Link naar donatie pagina.
about_instruction_button_tooltip = Link naar instructiepagina.
about_translation_button_tooltip = Link naar de Crowdin pagina met appvertalingen. Officieel worden Pools en Engels ondersteund.
about_repository_button = Bewaarplaats
about_donation_button = Donatie
about_instruction_button = Instructie
about_translation_button = Vertaling
# Header
header_setting_button_tooltip = Opent instellingen dialoogvenster.
header_about_button_tooltip = Opent dialoogvenster met info over app.
# Settings
## General
settings_number_of_threads = Aantal gebruikte threads
settings_number_of_threads_tooltip = Aantal gebruikte threads, 0 betekent dat alle beschikbare threads zullen worden gebruikt.
settings_label_restart = U moet de app herstarten om de instellingen toe te passen!
settings_ignore_other_filesystems = Negeer andere bestandssystemen (alleen Linux)
settings_ignore_other_filesystems_tooltip =
negeert bestanden die niet in hetzelfde bestandssysteem zitten als gezochte mappen.
Werkt dezelfde als -xdev optie in het zoekcommando voor Linux
settings_save_at_exit_button_tooltip = Configuratie opslaan in bestand bij het sluiten van de app.
settings_load_at_start_button_tooltip =
Laad de configuratie van het bestand bij het openen van de app.
Indien niet ingeschakeld, worden standaard instellingen gebruikt.
settings_confirm_deletion_button_tooltip = Bevestigingsvenster tonen bij het klikken op de knop verwijderen.
settings_confirm_link_button_tooltip = Toon bevestigingsvenster bij het klikken op de hard/symlink knop.
settings_confirm_group_deletion_button_tooltip = Waarschuwingsvenster weergeven wanneer geprobeerd wordt om alle records uit de groep te verwijderen.
settings_show_text_view_button_tooltip = Tekstpaneel aan de onderkant van de gebruikersinterface weergeven.
settings_use_cache_button_tooltip = Gebruik bestandscache.
settings_save_also_as_json_button_tooltip = Cache opslaan in (menselijk leesbaar) JSON formaat. Het is mogelijk om de inhoud te wijzigen. Cache van dit bestand wordt automatisch gelezen door de app als er een binaire cache (met bin extensie) ontbreekt.
settings_use_trash_button_tooltip = Verplaatst bestanden naar prullenbak in plaats daarvan ze permanent te verwijderen.
settings_language_label_tooltip = Taal voor de gebruikersinterface.
settings_save_at_exit_button = Configuratie opslaan bij het sluiten van app
settings_load_at_start_button = Laad configuratie bij het openen van app
settings_confirm_deletion_button = Toon bevestigingsdialoog bij het verwijderen van bestanden
settings_confirm_link_button = Melding bevestigen bij hard/symlinks van bestanden
settings_confirm_group_deletion_button = Toon het bevestigingsvenster bij het verwijderen van alle bestanden in de groep
settings_show_text_view_button = Toon onderaan tekstpaneel
settings_use_cache_button = Gebruik cache
settings_save_also_as_json_button = Sla ook de cache op als JSON-bestand
settings_use_trash_button = Verwijderde bestanden verplaatsen naar prullenbak
settings_language_label = Taal
settings_multiple_delete_outdated_cache_checkbutton = Verouderde cache vermeldingen automatisch verwijderen
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
Verwijder verouderde cacheresultaten die verwijzen naar niet-bestaande bestanden.
Indien ingeschakeld, zorgt de app ervoor dat bij het laden van records, dat alle records naar geldige bestanden verwijzen (gebroken bestanden worden genegeerd).
Dit uitschakelen zal helpen bij het scannen van bestanden op externe schijven, dus cache-items over deze zullen niet worden gewist in de volgende scan.
In het geval van honderdduizenden records in de cache, het wordt aangeraden om dit in te schakelen, dit zal de cache laden/opslaan aan het starten/einde van de scan versnellen.
settings_notebook_general = Algemeen
settings_notebook_duplicates = Duplicaten
settings_notebook_images = Vergelijkbare afbeeldingen
settings_notebook_videos = Gelijkaardige Video
## Multiple - settings used in multiple tabs
settings_multiple_image_preview_checkbutton_tooltip = Toont voorbeeld aan rechterkant (bij het selecteren van een afbeeldingsbestand).
settings_multiple_image_preview_checkbutton = Toon voorvertoning afbeelding
settings_multiple_clear_cache_button_tooltip =
Handmatig de cache van verouderde items wissen.
Dit mag alleen worden gebruikt als automatisch wissen is uitgeschakeld.
settings_multiple_clear_cache_button = Verwijder verouderde resultaten uit de cache.
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
Verbergt alle bestanden behalve één, als alle naar dezelfde gegevens verwijst (zijn hardlinked).
Voorbeeld: In het geval waar er (op schijf) zeven bestanden zijn die zijn gekoppeld aan specifieke data en één ander bestand met dezelfde gegevens, maar een andere inode, dan in dubbele zoeker, slechts één uniek bestand en één bestand van de hardgelinkte bestanden zullen worden weergegeven.
settings_duplicates_minimal_size_entry_tooltip =
Stel de minimale bestandsgrootte in die gecached zal worden.
kiezen van een kleinere waarde zal meer records genereren. Dit zal het zoeken versnellen, maar de cache aan het laden/opslaan.
settings_duplicates_prehash_checkbutton_tooltip =
Hiermee kan het cachen van prehash (een hash berekend van een klein deel van het bestand) eerder verwijderen van niet-gedupliceerde resultaten.
Het is standaard uitgeschakeld omdat het in sommige situaties vertraging kan veroorzaken.
Het is sterk aanbevolen om het te gebruiken bij het scannen van honderdduizenden of miljoen bestanden, omdat het zoeken meerdere keren kan versnellen.
settings_duplicates_prehash_minimal_entry_tooltip = Minimale grootte van gecachete invoer.
settings_duplicates_hide_hard_link_button = Verberg harde links (alleen Linux en macOS)
settings_duplicates_prehash_checkbutton = Gebruik prehash cache
settings_duplicates_minimal_size_cache_label = Minimale bestandsgrootte (in bytes) opgeslagen in de cache
settings_duplicates_minimal_size_cache_prehash_label = Minimale grootte van bestanden (in bytes) opgeslagen naar prehash cache
## Saving/Loading settings
settings_saving_button_tooltip = De huidige instellingen configuratie opslaan in bestand.
settings_loading_button_tooltip = Laad de instellingen uit het bestand en vervang de huidige configuratie.
settings_reset_button_tooltip = De huidige configuratie terugzetten naar de standaard.
settings_saving_button = Configuratie opslaan
settings_loading_button = Laad configuratie
settings_reset_button = Reset configuratie
## Opening cache/config folders
settings_folder_cache_open_tooltip =
Opent de map waar de cache txt bestanden zijn opgeslagen.
Het wijzigen van de cachebestanden kan ervoor zorgen dat ongeldige resultaten worden getoond. Het wijzigen van een pad kan echter tijd besparen bij het verplaatsen van een grote hoeveelheid bestanden naar een andere locatie.
U kunt deze bestanden tussen computers kopiëren om tijd te besparen bij het scannen van bestanden (van natuurlijk als ze een vergelijkbare directory structuur hebben).
In geval van problemen met de cache kunnen deze bestanden worden verwijderd. De app zal ze automatisch opnieuw genereren.
settings_folder_settings_open_tooltip =
Opent de map waar de Czkawka config is opgeslagen.
WAARSCHUWING: Handmatig wijzigen van de configuratie kan uw workflow verbreken.
settings_folder_cache_open = Open cachemap
settings_folder_settings_open = Instellingenmap openen
# Compute results
compute_stopped_by_user = Zoeken is gestopt door gebruiker
compute_found_duplicates_hash_size = Gevonden { $number_files } duplicaten in { $number_groups } groepen die { $size } namen
compute_found_duplicates_name = Gevonden { $number_files } duplicaten in { $number_groups } groepen
compute_found_empty_folders = Gevonden { $number_files } lege mappen
compute_found_empty_files = Gevonden { $number_files } lege bestanden
compute_found_big_files = Gevonden { $number_files } grote bestanden
compute_found_temporary_files = Gevonden { $number_files } tijdelijke bestanden
compute_found_images = Gevonden { $number_files } soortgelijke afbeeldingen in { $number_groups } groepen
compute_found_videos = Gevonden { $number_files } vergelijkbare video's in { $number_groups } groepen
compute_found_music = Gevonden { $number_files } vergelijkbare muziekbestanden in { $number_groups } groepen
compute_found_invalid_symlinks = Gevonden { $number_files } ongeldige symlinks
compute_found_broken_files = Gevonden { $number_files } gebroken bestanden
compute_found_bad_extensions = { $number_files } bestanden met ongeldige extensies gevonden
# Progress window
progress_scanning_general_file = Scannen van { $file_number } bestand
progress_scanning_extension_of_files = Extensie van { $file_checked }/{ $all_files } bestand controleren
progress_scanning_broken_files = Controleren { $file_checked }/{ $all_files } bestand
progress_scanning_video = Hashing van { $file_checked }/{ $all_files } video
progress_scanning_image = Hashing van { $file_checked }/{ $all_files } afbeelding
progress_comparing_image_hashes = Vergelijk { $file_checked }/{ $all_files } afbeelding hash
progress_scanning_music_tags_end = Tags vergelijken van { $file_checked }/{ $all_files } muziekbestand
progress_scanning_music_tags = Leestags van { $file_checked }/{ $all_files } muziekbestand
progress_scanning_music_content_end = Vingerafdruk van { $file_checked }/{ $all_files } muziekbestand vergelijken
progress_scanning_music_content = Vingerafdruk berekenen van { $file_checked }/{ $all_files } muziekbestand
progress_scanning_empty_folders = Scannen { $folder_number } map
progress_scanning_size = Scannen grootte van { $file_number } bestand
progress_scanning_size_name = Scannen van naam en grootte van { $file_number } bestand
progress_scanning_name = Scannen van naam { $file_number } bestand
progress_analyzed_partial_hash = Geanalyseerde gedeeltelijke hash van { $file_checked }/{ $all_files } bestanden
progress_analyzed_full_hash = Volledige hash van { $file_checked }/{ $all_files } bestanden geanalyseerd
progress_prehash_cache_loading = Prehash cache laden
progress_prehash_cache_saving = Opslaan van prehash cache
progress_hash_cache_loading = hash-cache laden
progress_hash_cache_saving = hash cache opslaan
progress_cache_loading = Cache laden
progress_cache_saving = Cache opslaan
progress_current_stage = Current Stage:{ " " }
progress_all_stages = All Stages:{ " " }
# Saving loading
saving_loading_saving_success = Configuratie opgeslagen in bestand { $name }.
saving_loading_saving_failure = Kan configuratiegegevens niet opslaan in bestand { $name }.
saving_loading_reset_configuration = Huidige configuratie is gewist.
saving_loading_loading_success = Goed geladen app configuratie.
saving_loading_invalid_string = Voor sleutel "{ $key }" vond een ongeldig resultaat - "{ $result }" wat geen string is.
saving_loading_invalid_int = Voor sleutel "{ $key }" vond een ongeldig resultaat - "{ $result }" wat geen geheel getal is.
saving_loading_invalid_bool = Voor sleutel "{ $key }" vond een ongeldig resultaat - "{ $result }" wat geen baas is.
saving_loading_decode_problem_bool = Kan bool van sleutel niet decoderen "{ $key }" gevonden "{ $result }" maar toegestane waarden zijn 0, 1, waar of onwaar.
saving_loading_saving_same_keys = Proberen de instelling op te slaan met de gedupliceerde sleutel "{ $key }".
saving_loading_failed_to_get_home_directory = Fout bij het ophalen van de home directory naar configuratiebestand openen/opslaan.
saving_loading_folder_config_instead_file = Kan configuratiebestand niet aanmaken of openen in pad "{ $path }" omdat er al een map is.
saving_loading_failed_to_create_configuration_folder = Configuratie mislukt om configuratiemap "{ $path }", reden "{ $reason } " te maken.
saving_loading_failed_to_create_config_file = Fout bij het aanmaken van het configuratiebestand "{ $path }", reden "{ $reason }".
saving_loading_failed_to_read_config_file = Kan configuratie niet laden van "{ $path }" omdat deze niet bestaat of geen bestand is.
saving_loading_failed_to_read_data_from_file = Kan gegevens niet lezen van bestand "{ $path }", reden "{ $reason }".
saving_loading_orphan_data = orphan data gevonden "{ $data }" in regel "{ $line }".
saving_loading_not_valid = Instelling "{ $data }" bestaat niet in de huidige versie van de app.
# Invalid symlinks
invalid_symlink_infinite_recursion = Oneindige recursie
invalid_symlink_non_existent_destination = Niet-bestaand doelbestand
# Other
selected_all_reference_folders = Kan zoeken niet starten, als alle mappen als referentie mappen zijn ingesteld
searching_for_data = Gegevens zoeken, het kan een tijdje duren, even wachten...
text_view_messages = BERICHTEN
text_view_warnings = LET OP
text_view_errors = FOUTEN
about_window_motto = Dit programma is gratis te gebruiken en zal dat altijd zijn.
# Various dialog
dialogs_ask_next_time = Volgende keer vragen
delete_file_failed = Kan het bestand { $name }niet verwijderen, reden { $reason }
delete_title_dialog = Bevestiging verwijderen
delete_question_label = Weet u zeker dat u bestanden wilt verwijderen?
delete_all_files_in_group_title = Bevestiging van het verwijderen van alle bestanden in groep
delete_all_files_in_group_label1 = In sommige groepen worden alle records geselecteerd.
delete_all_files_in_group_label2 = Weet u zeker dat u deze wilt verwijderen?
delete_folder_failed = Kan de map { $dir } niet verwijderen omdat de map niet bestaat, u hebt geen toestemming of de map is niet leeg.
delete_items_label = { $items } bestanden worden verwijderd.
delete_items_groups_label = { $items } bestanden van { $groups } groepen worden verwijderd.
hardlink_failed = Hardlink mislukt
hard_sym_invalid_selection_title_dialog = Ongeldige selectie met sommige groepen
hard_sym_invalid_selection_label_1 = In sommige groepen is er slechts één record geselecteerd en zal worden genegeerd.
hard_sym_invalid_selection_label_2 = Om deze bestanden hard/sym te kunnen koppelen, moeten ten minste twee resultaten in de groep worden geselecteerd.
hard_sym_invalid_selection_label_3 = Eerst wordt de groep als origineel erkend en niet veranderd, en vervolgens worden de tweede wijzigingen aangebracht.
hard_sym_link_title_dialog = Bevestiging link
hard_sym_link_label = Weet u zeker dat u deze bestanden wilt koppelen?
move_folder_failed = Map { $name }kon niet verplaatst worden, reden { $reason }
move_file_failed = Kon bestand niet verplaatsen { $name }, reden { $reason }
move_files_title_dialog = Kies de map waarnaar u gedupliceerde bestanden wilt verplaatsen
move_files_choose_more_than_1_path = Er kan slechts één pad geselecteerd zijn om hun gedupliceerde bestanden te kopiëren, geselecteerde { $path_number }.
move_stats = Naar behoren verplaatst { $num_files }/{ $all_files } items
save_results_to_file = Opgeslagen resultaten zowel in txt als in json bestanden in { $name } map.
search_not_choosing_any_music = FOUT: U moet ten minste één selectievakje met muziekinstypes selecteren.
search_not_choosing_any_broken_files = FOUT: U moet ten minste één selectievakje selecteren met type van aangevinkte bestanden.
include_folders_dialog_title = Mappen om op te nemen
exclude_folders_dialog_title = Mappen om uit te sluiten
include_manually_directories_dialog_title = Voeg map handmatig toe
cache_properly_cleared = Cache op juiste wijze gewist
cache_clear_duplicates_title = Duplicaten cache wissen
cache_clear_similar_images_title = Leeg soortgelijke afbeeldingen-cache
cache_clear_similar_videos_title = Leeg soortgelijke video cache
cache_clear_message_label_1 = Wilt u de cache van verouderde items wissen?
cache_clear_message_label_2 = Deze actie zal alle cache-items verwijderen die naar ongeldige bestanden wijzen.
cache_clear_message_label_3 = Dit kan de laden/opslaan enigszins versnellen.
cache_clear_message_label_4 = WAARSCHUWING: De bewerking zal alle opgeslagen data van externe schijven verwijderen. Daarom zal elke hash opnieuw moeten worden gegenereerd.
# Show preview
preview_image_resize_failure = Formaat wijzigen van afbeelding { $name } is mislukt.
preview_image_opening_failure = Kan afbeelding { $name }niet openen, reden { $reason }
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = Groep { $current_group }/{ $all_groups } ({ $images_in_group } afbeeldingen)
compare_move_left_button = L
compare_move_right_button = R

@ -0,0 +1,500 @@
# Window titles
window_settings_title = Innstillinger
window_main_title = Czkawka (Hiccup)
window_progress_title = Skanner
window_compare_images = Sammenlign bilder
# General
general_ok_button = Ok
general_close_button = Lukk
# Main window
music_title_checkbox = Tittel
music_artist_checkbox = Artist
music_year_checkbox = År
music_bitrate_checkbox = Bitrate
music_genre_checkbox = Sjanger
music_length_checkbox = Lengde
music_comparison_checkbox = Omtrentlig sammenligning
music_checking_by_tags = Tagger
music_checking_by_content = Innhold
same_music_seconds_label = Minste fragment andre varighet
same_music_similarity_label = Maksimal differanse
same_music_tooltip =
Søker etter lignende musikkfiler av innholdet kan konfigureres ved å gå inn:
- Minimumsfragmenteringstiden etter hvilken musikkfiler som kan identifiseres som lignende
- Maksimal forskjell mellom to testede fragmenter
Nøkkelen til gode resultater er å finne fornuftige kombinasjoner av disse parametrene, for utlevert.
Angir minimum tid til 5 s og maksimal forskjell til 1,0, vil se etter nesten identiske fragmenter i filene.
En tid på 20 s og en maksimal forskjell på 6.0, for den andre siden fungerer bra for å finne remikser/levende versjoner osv.
Som standard kan hver musikkfil sammenlignes med hverandre, og dette kan ta mye tid når du tester mange filer, slik at det vanligvis er bedre å bruke referanselapper og spesifisere hvilke filer som skal sammenlignes med hverandre (med samme mengde filer, å sammenligne fingeravtrykk vil være raskere minst 4 x enn uten referansemapper).
music_comparison_checkbox_tooltip =
Den søker etter lignende musikkfiler ved hjelp av AI, som bruker maskiner til å fjerne parenteser fra et frase. For eksempel, med dette alternativet er aktivert. filene du vil bli betraktet som duplikater:
Świędziżłób --- Świędziżłób (Remix Lato 2021)
duplicate_case_sensitive_name = Skill mellom små og store bokstaver
duplicate_case_sensitive_name_tooltip =
Når aktivert, vil du bare gruppere når de har nøyaktig samme navn, f.eks. Żołd <-> Żołd
Deaktivering av en slik opsjon vil gi deg egne navn uten å sjekke om hver bokstav er like stort, f.eks. żoŁD <-> Żołd
duplicate_mode_size_name_combo_box = Størrelse og navn
duplicate_mode_name_combo_box = Navn
duplicate_mode_size_combo_box = Størrelse
duplicate_mode_hash_combo_box = Hash
duplicate_hash_type_tooltip =
Tsjekkia har 3 typer hashes:
Blake3 - kryptografisk hash-funksjon. Dette er standard fordi den er veldig rask.
CRC32 - enkel hash-funksjon. Dette bør være raskere enn Blake3, men kan svært sjelden ha noen kollisjoner.
XXH3 - meget likt i ytelse og hash-kvalitet til Blake3 (men ikke-kryptografisk). Såfremt kan slike moduser endres enkelt.
duplicate_check_method_tooltip =
Tsjekkka tilbyr tre typer metoder for å finne duplikater av:
Navn - Finner filer med samme navn.
Størrelse på funnet finner du filer med samme størrelse.
Hash - Finner filer med samme innhold. Denne modusen ligner filen og senere sammenligner dette hashen for å finne duplikater. Denne modusen er den sikreste måten å finne duplikater. Appen bruker stort, så sekund og ytterligere skanninger av de samme dataene bør være mye raskere enn det første.
image_hash_size_tooltip =
Hvert avmerkede bilde gir en spesiell hash som kan sammenlignes med hverandre, og en liten forskjell mellom dem betyr at disse bildene er like.
8 hash-størrelse er ganske bra for å finne bilder som er litt likt original. Med et større sett med bilder (>1000) vil dette gi svært mange falske positive. Derfor anbefaler jeg å bruke en større hash-størrelse i denne saken.
16 er standard hash-størrelse som er et godt kompromiss mellom å finne selv små lignende bilder og å ha bare en liten mengde hash-kollisjoner.
32 og 64 hashes finner bare lignende bilder, men bør ha nesten ingen falske positiver (kanskje unntatt bilder med alfa-kanal).
image_resize_filter_tooltip =
To compute hash of image, the library must first resize it.
Depend on chosen algorithm, the resulting image used to calculate hash will looks a little different.
The fastest algorithm to use, but also the one which gives the worst results, is Nearest. It is enabled by default, because with 16x16 hash size lower quality it is not really visible.
With 8x8 hash size it is recommended to use a different algorithm than Nearest, to have better groups of images.
image_hash_alg_tooltip =
Brukere kan velge mellom en av mange algoritmer i beregningen av hashen.
Hver har både sterke og svakere poeng, og vil noen ganger gi bedre og noen ganger verre resultater for ulike bilder.
Så for å bestemme det beste for deg, kreves manuell testing.
big_files_mode_combobox_tooltip = Lar deg søke etter minste/største filer
big_files_mode_label = Avmerkede filer
big_files_mode_smallest_combo_box = Den minste
big_files_mode_biggest_combo_box = Den største
main_notebook_duplicates = Dupliser filer
main_notebook_empty_directories = Tomme mapper
main_notebook_big_files = Store filer
main_notebook_empty_files = Tomme filer
main_notebook_temporary = Midlertidige filer
main_notebook_similar_images = Lignende bilder
main_notebook_similar_videos = Lignende videoer
main_notebook_same_music = Musikk dupliserer
main_notebook_symlinks = Ugyldige Symlinks
main_notebook_broken_files = Ødelagte filer
main_notebook_bad_extensions = Feil utvidelser
main_tree_view_column_file_name = Filnavn
main_tree_view_column_folder_name = Mappenavn
main_tree_view_column_path = Sti
main_tree_view_column_modification = Endret dato
main_tree_view_column_size = Størrelse
main_tree_view_column_similarity = Likhet
main_tree_view_column_dimensions = Dimensjoner
main_tree_view_column_title = Tittel
main_tree_view_column_artist = Artist
main_tree_view_column_year = År
main_tree_view_column_bitrate = Bitrate
main_tree_view_column_length = Lengde
main_tree_view_column_genre = Sjanger
main_tree_view_column_symlink_file_name = Symlink filnavn
main_tree_view_column_symlink_folder = Mappe for Symlink
main_tree_view_column_destination_path = Destinasjonssti
main_tree_view_column_type_of_error = Type feil
main_tree_view_column_current_extension = Gjeldende utvidelse
main_tree_view_column_proper_extensions = Riktig utvidelse
main_label_check_method = Sjekkmetode
main_label_hash_type = Type hash
main_label_hash_size = Størrelse på hash
main_label_size_bytes = Størrelse (bytes)
main_label_min_size = Min
main_label_max_size = Maks
main_label_shown_files = Antall filer som vises
main_label_resize_algorithm = Endre algoritmen
main_label_similarity = Similarity{ " " }
main_check_box_broken_files_audio = Lyd
main_check_box_broken_files_pdf = Pdf
main_check_box_broken_files_archive = Arkiv
main_check_box_broken_files_image = Bilde
check_button_general_same_size = Ignorer samme størrelse
check_button_general_same_size_tooltip = Ignorer filer med identisk størrelse i resultater - vanligvis disse er 1:1 duplikater
main_label_size_bytes_tooltip = Størrelse på filer som vil bli brukt i skanning
# Upper window
upper_tree_view_included_folder_column_title = Mapper å søke etter
upper_tree_view_included_reference_column_title = Referanse mapper
upper_recursive_button = Rekursivt
upper_recursive_button_tooltip = Hvis valgt, søk også etter filer som ikke er plassert direkte under valgte mapper.
upper_manual_add_included_button = Manuelt legg til
upper_add_included_button = Legg til
upper_remove_included_button = Fjern
upper_manual_add_excluded_button = Manuelt legg til
upper_add_excluded_button = Legg til
upper_remove_excluded_button = Fjern
upper_manual_add_included_button_tooltip =
Legg til mappenavn for å søke etter hånd.
For å legge til flere baner samtidig, separer dem med ;
/home/roman;/home/rozkaz vil legge til to kataloger /home/roman og /home/rozkaz
upper_add_included_button_tooltip = Legg til ny mappe i søk.
upper_remove_included_button_tooltip = Slett mappen fra søk.
upper_manual_add_excluded_button_tooltip =
Legg til ekskludert mappenavn for hånd.
For å legge til flere baner på en gang, separer dem med ;
/home/roman;/home/krokiet vil legge til to kataloger /home/roman and /home/keokiet
upper_add_excluded_button_tooltip = Legg til mappe som skal utelukkes i søk.
upper_remove_excluded_button_tooltip = Slett mappen fra ekskludert.
upper_notebook_items_configuration = Konfigurasjon av elementer
upper_notebook_excluded_directories = Ekskluderte kataloger
upper_notebook_included_directories = Inkluderte mapper
upper_allowed_extensions_tooltip =
Tillatte utvidelser må være atskilt med komma (ved at alle er tilgjengelige).
Følgende makroer, som legger til flere utvidelser samtidig, er også tilgjengelige: IMAGE, VIDEO, MUSIC, TEXT.
Bruk eksempel ".exe, IMAGE, VIDEO, .rar, 7z" - dette betyr at bilder (e. . jpg, png), videoer (f.eks. avi, mp4), exe, rar og 7z filer vil bli skannet.
upper_excluded_extensions_tooltip =
Liste over deaktiverte filer som vil bli ignorert i skanning.
Ved bruk av både tillatte og deaktiverte utvidelser, har denne prioriteten høyere enn prioritet, så filen vil ikke bli sjekket.
upper_excluded_items_tooltip =
Ekskluderte elementer må inneholde * jokertegn og bør separeres med komma.
Dette er tregere enn ekskluderte kataloger, så bruk den med forsiktighet.
upper_excluded_items = Ekskluderte elementer:
upper_allowed_extensions = Tillatte utvidelser:
upper_excluded_extensions = Deaktiverte utvidelser:
# Popovers
popover_select_all = Velg alle
popover_unselect_all = Fjern alle valg
popover_reverse = Omvendt utvalg
popover_select_all_except_oldest = Velg alt unntatt det eldste
popover_select_all_except_newest = Velg alle unntatt nyeste
popover_select_one_oldest = Velg en eldste
popover_select_one_newest = Velg en nyeste
popover_select_custom = Velg egendefinert
popover_unselect_custom = Avvelg egendefinert
popover_select_all_images_except_biggest = Velg alle unntatt største
popover_select_all_images_except_smallest = Velg alle unntatt minste
popover_custom_path_check_button_entry_tooltip =
Velg poster som sti.
Eksempelbruk:
/home/pimpek/rzecz.txt kan du finne med /home/pim*
popover_custom_name_check_button_entry_tooltip =
Velg poster etter filnavn.
Eksempelbruk:
/usr/ping/pong.txt kan finnes med *ong*
popover_custom_regex_check_button_entry_tooltip =
Velg elementer ved angitt Regex.
Med denne modus, vil søppelteksten være Sti med navn.
Eksempel på bruk:
/usr/bin/ziemniak. xt finner du med /ziem[a-z]+
Dette bruker standard Rust regex implementasjon. Du kan lese mer om den her: https://docs.rs/regex.
popover_custom_case_sensitive_check_button_tooltip =
Aktiverer case-sensitiv deteksjon.
Når deaktivert/hjem/* funn både /HoMe/roman og /home/roman.
popover_custom_not_all_check_button_tooltip =
Hindrer å velge alle poster i gruppen.
Dette er aktivert som standard, fordi i de fleste situasjoner du ikke vil slette både originale og duplikatfiler, men vil forlate minst en fil.
ADVARSEL: Denne innstillingen fungerer ikke hvis du allerede har valgt alle resultater i en gruppe.
popover_custom_regex_path_label = Sti
popover_custom_regex_name_label = Navn
popover_custom_regex_regex_label = Regex sti + navn
popover_custom_case_sensitive_check_button = Skill store og små bokstaver
popover_custom_all_in_group_label = Ikke velg alle poster i gruppen
popover_custom_mode_unselect = Avvelg egendefinert
popover_custom_mode_select = Velg egendefinert
popover_sort_file_name = Filnavn
popover_sort_folder_name = Mappenavn
popover_sort_full_name = Fullt navn
popover_sort_size = Størrelse
popover_sort_selection = Utvalg
popover_invalid_regex = Regex er ugyldig
popover_valid_regex = Regex er gyldig
# Bottom buttons
bottom_search_button = Søk
bottom_select_button = Velg
bottom_delete_button = Slett
bottom_save_button = Save
bottom_symlink_button = Symlink
bottom_hardlink_button = Hardlink
bottom_move_button = Flytt
bottom_sort_button = Sorter
bottom_search_button_tooltip = Starte søk
bottom_select_button_tooltip = Velg oppføringer. Bare valgte filer/mapper kan bli behandlet senere.
bottom_delete_button_tooltip = Slett valgte filer/mapper.
bottom_save_button_tooltip = Lagre data om søk i fil
bottom_symlink_button_tooltip =
Opprett symbolske lenker.
Virker bare når minst to resultater i en gruppe er valgt.
Først er uendret og sekund og senere er symlinket til først.
bottom_hardlink_button_tooltip =
Opprette fastkoblinger.
Virker bare når minst to resultater i en gruppe er valgt.
Først er uendret og annet og senere er vanskelig knyttet til først.
bottom_hardlink_button_not_available_tooltip =
Opprett faste koblinger.
Knappen er deaktivert, fordi faste koblinger ikke kan opprettes.
Faste koblinger fungerer bare med administratorrettigheter i Windows, så pass på at du kjører programmet som administrator.
Hvis programmet allerede fungerer med slike privilegier, sjekk om lignende problemer er observert på GitHub.
bottom_move_button_tooltip =
Flytter filer til valgt mappe.
Den kopierer alle filer til mappen uten å lagre mappetreet.
Når du prøver å flytte to filer med identisk navn til mappe, vil det andre feile og vise feil.
bottom_sort_button_tooltip = Sorter filer/mapper etter valgt metode.
bottom_show_errors_tooltip = Vis/Skjul bunntekstpanelet.
bottom_show_upper_notebook_tooltip = Vis/Skjul øvre notebook panel.
# Progress Window
progress_stop_button = Stopp
progress_stop_additional_message = Stopp forespurt
# About Window
about_repository_button_tooltip = Link til pakkesiden med kildekoden.
about_donation_button_tooltip = Lenke til donasjonssiden.
about_instruction_button_tooltip = Lenke til instruksjonssiden.
about_translation_button_tooltip = Link til Crowdin-siden med app oversettelser. Officialt Polsk og engelsk støttes.
about_repository_button = Pakkebrønn
about_donation_button = Donasjon
about_instruction_button = Instruksjon
about_translation_button = Oversettelse
# Header
header_setting_button_tooltip = Åpner dialogboksen for innstillinger.
header_about_button_tooltip = Åpner dialog med info om app.
# Settings
## General
settings_number_of_threads = Antall brukte tråder
settings_number_of_threads_tooltip = Antall brukte tråder. 0 betyr at alle tilgjengelige tråder vil bli brukt.
settings_label_restart = Start programmet på nytt for å bruke innstillingene!
settings_ignore_other_filesystems = Ignorer andre filsystemer (bare Linux)
settings_ignore_other_filesystems_tooltip =
ignorerer filer som ikke er i samme filsystem som søk-kataloger.
Fungerer samme som -xdev alternativet i å finne kommandoen på Linux
settings_save_at_exit_button_tooltip = Lagre konfigurasjon som fil når appen lukkes.
settings_load_at_start_button_tooltip =
Last inn konfigurasjon fra filen når du åpner appen.
Hvis ikke er aktivert brukes standard innstillinger.
settings_confirm_deletion_button_tooltip = Vis bekreftelsesdialog når du klikker på Slette-knappen.
settings_confirm_link_button_tooltip = Vis bekreftelsesdialog når du klikker på knappen hard/symlink.
settings_confirm_group_deletion_button_tooltip = Vis advarselsdialog når du prøver å slette alle poster fra gruppen.
settings_show_text_view_button_tooltip = Vis tekstpanelet nederst av brukergrensesnittet.
settings_use_cache_button_tooltip = Bruk filmellomlager.
settings_save_also_as_json_button_tooltip = Lagre cache til (human lesbar) JSON-format. Det er mulig å endre innholdet. Cachen fra denne filen vil automatisk bli lest av app dersom binært format mellomlager (med «bøi-utvidelsen») mangler.
settings_use_trash_button_tooltip = Flytter filer til papirkurv istedenfor å slette dem permanent.
settings_language_label_tooltip = Språk til brukergrensesnitt.
settings_save_at_exit_button = Lagre konfigurasjon når appen lukkes
settings_load_at_start_button = Last inn konfigurasjon når du åpner appen
settings_confirm_deletion_button = Vis bekreftelsesdialog ved sletting av filer
settings_confirm_link_button = Vis bekreftelsesdialog når noen filer er fast/symlinker
settings_confirm_group_deletion_button = Vis "Bekreft"-dialog når du sletter alle filer i gruppen
settings_show_text_view_button = Vis nederste tekstpanel
settings_use_cache_button = Bruk buffer
settings_save_also_as_json_button = Lagre også mellomlager som JSON-fil
settings_use_trash_button = Flytt slettede filer til papirkurv
settings_language_label = Language
settings_multiple_delete_outdated_cache_checkbutton = Slett utdaterte cache-oppføringer automatisk
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
Slett utdaterte cache-resultater som peker til ikke-eksisterende filer.
Når aktivert sørger appen for å laste inn poster, at alle oppføringer peker til gyldige filer (ødelagte blir ignorert).
Deaktivering av dette vil hjelpe når du skanner filer på eksterne stasjoner, så cacheoppføringer om dem vil ikke bli tømt i neste skanning.
Når det gjelder å ha hundre og tusenvis av registreringer i cache, det er foreslått å aktivere dette, som vil øke hurtigbufferen innlasting/lagring ved start/slutten av skanningen.
settings_notebook_general = Generelt
settings_notebook_duplicates = Duplikater
settings_notebook_images = Lignende bilder
settings_notebook_videos = Lignende video
## Multiple - settings used in multiple tabs
settings_multiple_image_preview_checkbutton_tooltip = Viser forhåndsvisning på høyre side (når du velger en bildefil).
settings_multiple_image_preview_checkbutton = Vis forhåndsvisning av bilde
settings_multiple_clear_cache_button_tooltip =
Manuelt tømmer hurtigbufferen av utdaterte oppføringer.
Dette bør bare brukes hvis automatisk tømming er deaktivert.
settings_multiple_clear_cache_button = Fjern utdaterte resultater fra mellomlager.
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
Skjuler alle filer unntatt en, hvis alle peker til samme data (knyttes sammen).
Eksempel: I det tilfellet hvor det (på disk) er syv filer som er vanskelige å koble til bestemte data og én annen fil med samme data men en annen innhold, deretter i duplisert finer, vises bare én unik fil og én fil fra hardkoblede vil vises.
settings_duplicates_minimal_size_entry_tooltip =
Angi minste filstørrelse som blir bufret i cachen.
Hvis du velger en mindre verdi, genererer du flere poster. Dette vil fremskynde søk, men tregere hurtigbufferet lasting/lagring.
settings_duplicates_prehash_checkbutton_tooltip =
Aktiverer hurtigbufring av prehash (en hash beregnet fra en liten del av filen) som tillater tidligere fjerning av ikke-dupliserte resultater.
Den er deaktivert som standard fordi den kan forårsake langsommere i noen situasjoner.
Det anbefales å bruke det når det skannes hundre eller millioner filer, fordi det kan fremskynde søk med flere ganger.
settings_duplicates_prehash_minimal_entry_tooltip = Minimal størrelse på mellomlagret oppføring.
settings_duplicates_hide_hard_link_button = Skjul hardlinker (kun Linux og macOS)
settings_duplicates_prehash_checkbutton = Bruk prehash cache
settings_duplicates_minimal_size_cache_label = Minimal størrelse på filer (i byte) lagret i mellomlager
settings_duplicates_minimal_size_cache_prehash_label = Minimal størrelse på filer (i byte) lagret i hurtigbuffer for prehash
## Saving/Loading settings
settings_saving_button_tooltip = Lagre gjeldende innstillingskonfigurasjon til filen.
settings_loading_button_tooltip = Last innstillinger fra fil og erstatt gjeldende konfigurasjon med dem.
settings_reset_button_tooltip = Tilbakestill den gjeldende konfigurasjonen til standard.
settings_saving_button = Lagre konfigurasjonen
settings_loading_button = Last inn konfigurasjon
settings_reset_button = Tilbakestill konfigurasjon
## Opening cache/config folders
settings_folder_cache_open_tooltip =
Åpner mappen der cache txt filene er lagret.
Modifisere cachefilene kan forårsake ugyldige resultater. Imidlertid kan modifisere stien spare tid når du flytter store mengder filer til en annen posisjon.
Du kan kopiere disse filene mellom datamaskiner for å spare tid ved skanning igjen for filer (hvis de har en lignende katalogstruktur).
Hvis det oppstår problemer med cachen, kan disse filene fjernes. Appen vil automatisk regenerere dem.
settings_folder_settings_open_tooltip =
Åpner mappen der Czkawka konfigurasjonen er lagret.
ADVARSEL: Manuelt endre konfigurasjonen kan ødelegge arbeidsflyten din.
settings_folder_cache_open = Åpne mappe for hurtigbuffer
settings_folder_settings_open = Åpne innstillingsmappen
# Compute results
compute_stopped_by_user = Søket ble stoppet av bruker
compute_found_duplicates_hash_size = Fant { $number_files } duplikater i { $number_groups } grupper som tok { $size }
compute_found_duplicates_name = Fant { $number_files } duplikater i { $number_groups } grupper
compute_found_empty_folders = Fant { $number_files } tomme mapper
compute_found_empty_files = Fant { $number_files } tomme filer
compute_found_big_files = Fant { $number_files } store filer
compute_found_temporary_files = Fant { $number_files } midlertidige filer
compute_found_images = Fant { $number_files } lignende bilder i { $number_groups } grupper
compute_found_videos = Fant { $number_files } lignende videoer i { $number_groups } grupper
compute_found_music = Fant { $number_files } lignende musikkfiler i { $number_groups } grupper
compute_found_invalid_symlinks = Fant { $number_files } ugyldige symlinker
compute_found_broken_files = Fant { $number_files } ødelagte filer
compute_found_bad_extensions = Fant { $number_files } filer med ugyldige utvidelser
# Progress window
progress_scanning_general_file = Skanner { $file_number } fil
progress_scanning_extension_of_files = Sjekker utvidelse av { $file_checked }/{ $all_files } fil
progress_scanning_broken_files = Kontrollerer { $file_checked }/{ $all_files } fil
progress_scanning_video = Hashing av { $file_checked }/{ $all_files } video
progress_scanning_image = Hashing av { $file_checked }/{ $all_files } bilde
progress_comparing_image_hashes = Sammenligner { $file_checked }/{ $all_files } bilde-hash
progress_scanning_music_tags_end = Sammenligner tagger med { $file_checked }/{ $all_files } musikkfil
progress_scanning_music_tags = Leser tagger på { $file_checked }/{ $all_files } musikkfil
progress_scanning_music_content_end = Sammenligner fingeravtrykk på { $file_checked }/{ $all_files } musikkfil
progress_scanning_music_content = Beregner fingeravtrykk på { $file_checked }/{ $all_files } musikkfil
progress_scanning_empty_folders = Skanner { $folder_number } mappe
progress_scanning_size = Skanner størrelse på { $file_number } fil
progress_scanning_size_name = Skanning av navn og størrelse på { $file_number } fil
progress_scanning_name = Skanning av navn på { $file_number } fil
progress_analyzed_partial_hash = Analyserte delvis hash med { $file_checked }/{ $all_files } filer
progress_analyzed_full_hash = Analyserte full hash med { $file_checked }/{ $all_files } filer
progress_prehash_cache_loading = Laster prehash cache
progress_prehash_cache_saving = Lagrer prehash-cache
progress_hash_cache_loading = Laster hash-cache
progress_hash_cache_saving = Lagrer hurtigbufferen for hash
progress_cache_loading = Laster cache
progress_cache_saving = Lagrer cachen
progress_current_stage = Gjeldende trinn: { " " }
progress_all_stages = Alle stadier:{ " " }
# Saving loading
saving_loading_saving_success = Lagret konfigurasjon til filen { $name }.
saving_loading_saving_failure = Klarte ikke å lagre konfigurasjonsdataene til filen { $name }.
saving_loading_reset_configuration = Gjeldende konfigurasjon ble fjernet.
saving_loading_loading_success = Godt lastet applikasjonskonfigurasjon.
saving_loading_invalid_string = For nøkkelen "{ $key }" fant du ugyldig resultat - "{ $result }" som ikke er en streng.
saving_loading_invalid_int = I nøkkelen "{ $key }" fant du ugyldig resultat - "{ $result }" som ikke er et heltall.
saving_loading_invalid_bool = For nøkkelen "{ $key }" fant ugyldig resultat - "{ $result }" som ikke er en bool.
saving_loading_decode_problem_bool = Kan ikke dekode bool fra nøkkelen "{ $key }" funnet "{ $result }", men tillatte verdier er 0, 1, sanne eller usann.
saving_loading_saving_same_keys = Prøver å lagre innstillinger med duplisert nøkkel "{ $key }".
saving_loading_failed_to_get_home_directory = Klarte ikke å hente hjemmappen for å åpne og lagre konfigurasjonsfilen.
saving_loading_folder_config_instead_file = Kan ikke opprette eller åpne lagringsfilbanen{ $path }" fordi allerede finnes en mappe.
saving_loading_failed_to_create_configuration_folder = Kunne ikke konfigurere opprette konfigurasjonsmappen "{ $path }", grunn "{ $reason }".
saving_loading_failed_to_create_config_file = Kunne ikke opprette konfigurasjonsfilen{ $path }", grunn "{ $reason }".
saving_loading_failed_to_read_config_file = Kan ikke laste konfigurasjonen fra "{ $path }" fordi den ikke eksisterer eller ikke er en fil.
saving_loading_failed_to_read_data_from_file = Kan ikke lese data fra filen{ $path }", grunn "{ $reason }".
saving_loading_orphan_data = Funnet orphan data "{ $data }" i linje "{ $line }".
saving_loading_not_valid = Setter "{ $data }" finnes ikke i gjeldende appversjon.
# Invalid symlinks
invalid_symlink_infinite_recursion = Uendelig rekursjon
invalid_symlink_non_existent_destination = Ikke-eksisterende målfil
# Other
selected_all_reference_folders = Kan ikke starte søk, når alle kataloger er angitt som referanselapper
searching_for_data = Søker data, det kan ta en stund, vennligst vent...
text_view_messages = MELDINGER
text_view_warnings = ADVARSELSER
text_view_errors = FEILSER
about_window_motto = Dette programmet er gratis å bruke og vil alltid være.
# Various dialog
dialogs_ask_next_time = Spør neste gang
delete_file_failed = Kunne ikke slette filen { $name }, årsak { $reason }
delete_title_dialog = Bekreft sletting
delete_question_label = Er du sikker på at du vil slette filer?
delete_all_files_in_group_title = Bekreftelse på sletting av alle filer i gruppen
delete_all_files_in_group_label1 = For noen grupper er alle poster valgt.
delete_all_files_in_group_label2 = Er du sikker på at du vil slette dem?
delete_folder_failed = Kunne ikke slette mappen { $dir } fordi mappen ikke eksisterer, du har ikke tillatelse eller mappen er ikke tom.
delete_items_label = { $items } filer vil bli slettet.
delete_items_groups_label = { $items } filer fra { $groups } grupper vil bli slettet.
hardlink_failed = Mislyktes i å koble sammen
hard_sym_invalid_selection_title_dialog = Ugyldig valg med noen grupper
hard_sym_invalid_selection_label_1 = I noen grupper er det bare én post valgt og det vil bli ignorert.
hard_sym_invalid_selection_label_2 = For å kunne feste koblingen til disse filene, må minst to resultater i gruppen velges.
hard_sym_invalid_selection_label_3 = Først i gruppen gjenkjennes som originalen og endres ikke, men sekund og senere endres.
hard_sym_link_title_dialog = Lenke bekreftelse
hard_sym_link_label = Er du sikker på at du vil koble disse filene?
move_folder_failed = Kunne ikke flytte mappen { $name }, årsak { $reason }
move_file_failed = Kunne ikke flytte filen { $name }, årsak { $reason }
move_files_title_dialog = Velg mappen du vil flytte dupliserte filer til
move_files_choose_more_than_1_path = Bare én sti kan velges for å kunne kopiere sine dupliserte filer, valgt { $path_number }.
move_stats = Flott flyttet { $num_files }/{ $all_files } elementer
save_results_to_file = Lagrede resultater både i txt og json-filer i { $name } mappe.
search_not_choosing_any_music = FEIL: Du må velge minst en avkrysningsboks med musikk som søker.
search_not_choosing_any_broken_files = FEIL: Du må velge minst en avkrysningsboks med sjekket ødelagte filer.
include_folders_dialog_title = Mapper å inkludere
exclude_folders_dialog_title = Mapper som skal ekskluderes
include_manually_directories_dialog_title = Legg til mappe manuelt
cache_properly_cleared = Riktig tømt cache
cache_clear_duplicates_title = Tømmer duplikatene
cache_clear_similar_images_title = Fjerner lignende bilde-mellomlager
cache_clear_similar_videos_title = Tømmer hurtigbufferen for videoer
cache_clear_message_label_1 = Vil du slette cachen med utdaterte oppføringer?
cache_clear_message_label_2 = Denne operasjonen vil fjerne alle cacheoppføringer som peker til ugyldige filer.
cache_clear_message_label_3 = Dette kan øke lasting og lagring på cache.
cache_clear_message_label_4 = ADVARSEL: Operasjonen vil fjerne alle bufrede data fra eksterne stasjoner som ikke er koblet til. Så hver hash må regenereres.
# Show preview
preview_image_resize_failure = Kunne ikke endre størrelse på bildet { $name }.
preview_image_opening_failure = Klarte ikke å åpne bilde { $name }, årsak { $reason }
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = Gruppe { $current_group }/{ $all_groups } ({ $images_in_group } bilder)
compare_move_left_button = L
compare_move_right_button = R

@ -1,5 +1,5 @@
# Window titles
window_settings_title = Opcje
window_settings_title = Ustawienia
window_main_title = Czkawka
window_progress_title = Skanowanie
window_compare_images = Porównywanie Obrazów
@ -9,46 +9,82 @@ general_close_button = Zamknij
# Main window
music_title_checkbox = Tytuł
music_artist_checkbox = Wykonawca
music_album_title_checkbox = Tytuł Albumu
music_album_artist_checkbox = Wykonawca Albumu
music_year_checkbox = Rok
music_bitrate_checkbox = Bitrate
music_genre_checkbox = Gatunek
music_length_checkbox = Długość
music_comparison_checkbox = Przybliżone Porównywanie
music_checking_by_tags = Tagi
music_checking_by_content = Zawartość
same_music_seconds_label = Minimalny fragment drugi czas trwania
same_music_similarity_label = Maksymalna różnica
same_music_tooltip =
Wyszukiwanie podobnych plików muzycznych przez jego zawartość można skonfigurować przez ustawienie:
- Minimalny czas fragmentu, po którym pliki muzyczne mogą być zidentyfikowane jako podobne
- Maksymalna różnica między dwoma testowanymi fragmentami
Kluczem do dobrych wyników jest znalezienie rozsądnych kombinacji tych parametrów, do dostarczania.
Ustawianie minimalnego czasu na 5s i maksymalnej różnicy na 1.0, będzie szukać prawie identycznych fragmentów w plikach.
Czas 20s i maksymalna różnica 6.0, z drugiej strony, dobrze działa w poszukiwaniu remiksów/wersji na żywo itp.
Domyślnie każdy plik muzyczny jest porównywany ze sobą, co może zająć dużo czasu podczas testowania wielu plików, więc zwykle lepiej jest używać folderów referencyjnych i określać, które pliki mają być porównywane ze sobą (z taką samą ilością plików, porównywanie odcisków palców będzie szybsze niż bez folderów referencyjnych).
music_comparison_checkbox_tooltip =
Wyszukuje podobne pliki muzyczne za pomocą AI, która to za pomocą uczenia maszynowego usuwa nawiasy z wyrażenia np. z włączoną opcją, dane pliki zostaną uznane za duplikaty:
Wyszukuje podobne pliki muzyczne za pomocą AI, która używa nauki maszynowej, aby usunąć nawiasy z frazy. Na przykład, z tą opcją włączoną, rozpatrywane pliki będą traktowane jako duplikaty:
Świędziżłób --- Świędziżłób (Remix Lato 2021)
duplicate_case_sensitive_name = Uwzględnij Wielkość Liter
duplicate_case_sensitive_name_tooltip =
Gdy włączone, grupowe rekordy tylko wtedy, gdy mają dokładnie taką samą nazwę, np. Żołd <-> Żołd
Wyłączenie tej opcji spowoduje grupowanie nazw bez sprawdzania, czy każda litera ma ten sam rozmiar, np. żoŁD <-> Żołd
duplicate_mode_size_name_combo_box = Rozmiar i nazwa
duplicate_mode_name_combo_box = Nazwa
duplicate_mode_size_combo_box = Rozmiar
duplicate_mode_hash_combo_box = Hash
duplicate_hash_type_tooltip =
Czkawka oferuje 3 różne algorytmy do tworzenia hashu pliku:
Czkawka oferuje 3 rodzaje hashów:
Blake3 - kryptograficzna funkcja haszująca. Z racji połączenia szybkości i niskiej ilości kolizji jest to domyślny tryb.
Blake3 - kryptograficzna funkcja skrótu. Jest to wartość domyślna, ponieważ jest bardzo szybka.
CRC32 - prosta funkcja haszująca. Powinna być szybsza niż Blake3, lecz bardzo rzadko może mogą wystąpić kolizje hashów.
CRC32 - prosta funkcja haszująca. Powinno to być szybsze od Blake3, ale bardzo rzadko może to prowadzić do kolizji.
XXH3 - zarówno pod względem jakości hashu jak i wydajności jest podobny do Blake3, dlatego te algorytmy mogą być używane wymiennie.
XXH3 - bardzo podobna pod względem wydajności i jakości hashu do Blake3 (ale niekryptograficzna). Tak więc takie tryby mogą być łatwo wymienione.
duplicate_check_method_tooltip =
Na chwilę obecną, Czkawka oferuje 3 tryby wyszukiwania duplikatów poprzez:
Na razie Czkawka oferuje trzy typy metod do znalezienia duplikatów przez:
Nazwę - Znajduje identycznie nazywające się pliki.
Nazwa - Znajduje pliki o tej samej nazwie.
Rozmiar - Znajduje pliki o identycznych rozmiarach.
Rozmiar - Znajduje pliki o tym samym rozmiarze.
Hash - Wyszukuje pliki o tej samej zawartości. W tym trybie, każdy plik jest hasowany a następnie każdy hash jest porównywany z innymi. Ten tryb używa pamięci podręcznej do przechowywania raz obliczonych hashy, dlatego drugie i kolejne skanowanie, powinno być o wiele szybsze niż pierwsze. Jest to najbezpieczniejszy sposób na znalezienie duplikatów.
Hash - Znajduje pliki, które mają tę samą zawartość. Ten tryb haszuje plik, a następnie porównuje utworzony skrót(hash) aby znaleźć duplikaty. Ten tryb jest najbezpieczniejszym sposobem na znalezienie duplikatów. Aplikacja używa pamięci podręcznej, więc drugie i kolejne skanowanie tych samych danych powinno być dużo szybsze niż za pierwszym razem.
image_hash_size_tooltip =
Czkawka umożliwia zmianę wielkości generowanego hashu dla każdego obrazu. Im większy, tym mniejsze różnice może znaleźć pomiędzy obrazami, lecz również jest nieco wolniejszy w użytkowaniu.
Każdy zaznaczony obraz tworzy specjalny skrót, który można porównać ze sobą, a niewielka różnica między nimi oznacza, że obrazy te są podobne.
8 hashh rozmiar jest dość dobry do wyszukiwania obrazów, które są tylko trochę podobne do oryginału. Dzięki większemu zestawowi zdjęć (>1000), spowoduje to uzyskanie dużej ilości fałszywych dodatnich, więc zalecam użycie większego rozmiaru skrótu w tym przypadku.
16 to domyślny rozmiar hasha, który jest dość dobrym kompromisem między znalezieniem nawet nieco podobnych obrazów a zaledwie niewielką ilością kolizji haszujących.
32 i 64 hashy znajdują tylko bardzo podobne obrazy, ale nie powinny mieć prawie żadnych fałszywych pozytywnych (może z wyjątkiem niektórych obrazów z kanałem alfa).
image_resize_filter_tooltip =
Aby obliczyć skrót obrazu, biblioteka musi najpierw zmienić jego rozmiar.
Dołącz do wybranego algorytmu, wynikowy obraz użyty do obliczenia skrótu będzie wyglądał nieco inaczej.
Najszybszy algorytm do użycia, ale także ten, który daje najgorsze wyniki, jest najbardziej potrzebny. Domyślnie jest włączona, ponieważ przy rozmiarze skrótu 16x16 jego jakość nie jest naprawdę widoczna.
Domyślną wielkością hashu jest 8, które pozwala wyszukiwać zarówno bardzo jak i mało podobne do siebie obrazy. Hashe 16 i 32 powinny być głównie używane dla niemal identycznych plików. Hash 64 bajtowy nie powinien być stosowany, chyba że wymagane jest znalezienie bardzo małych różnic pomiędzy obrazami.
image_resize_filter_tooltip = By obliczyć hash obrazu, biblioteka musi najpierw go zmniejszyć. W zależności od wybranego algorytmu, obraz będzie wyglądał nieco inaczej. Najszybszym, lecz za razem dającym najgorsze efekty jest algorytm Nearest.
image_hash_alg_tooltip = Do wyboru jest kilka algorytmów obliczenia hashu obrazu. Każdy z nich ma swoje słabe i silne punkty i będzie dawał czasem lepsze a czasem gorsze rezultaty w zależności od obrazów, dlatego najlepiej będzie przetestować je na własną rękę.
main_notebook_image_fast_compare = Szybkie porównywanie
main_notebook_image_fast_compare_tooltip =
Przyśpieszenie wyszukiwania i porównywania hashów.
Przy rozmiarze skrótu 8x8 zaleca się użycie innego algorytmu niż najbliższy, aby mieć lepsze grupy obrazów.
image_hash_alg_tooltip =
Użytkownicy mogą wybrać jeden z wielu algorytmów obliczania hashu.
W przeciwieństwie do zwykłego trybu, w którym każdy skrót jest porównywany ze sobą x razy, gdzie x jest podobieństwem, które wybiera użytkownik, w tym trybie zawsze stosuje się tylko jedno porównanie.
Każdy ma zarówno mocniejsze jak i słabsze punkty i czasami daje lepsze a czasami gorsze wyniki dla różnych obrazów.
Ta opcja jest zalecana podczas porównywania >10000 obrazów z podobieństwem innym niż 0 (Bardzo Duże).
Najlepiej jest samemu potestować jaki algorytm ma najlepsze wyniki(może to nie być zawsze dobrze widoczne).
big_files_mode_combobox_tooltip = Pozwala na wyszukiwanie najmniejszych lub największych plików
big_files_mode_label = Sprawdzane pliki
big_files_mode_smallest_combo_box = Najmniejsze
big_files_mode_biggest_combo_box = Największe
main_notebook_duplicates = Duplikaty
main_notebook_empty_directories = Puste Katalogi
main_notebook_big_files = Duże Pliki
@ -59,6 +95,7 @@ main_notebook_similar_videos = Podobne Wideo
main_notebook_same_music = Podobna Muzyka
main_notebook_symlinks = Niepoprawne Symlinki
main_notebook_broken_files = Zepsute Pliki
main_notebook_bad_extensions = Błędne rozszerzenia
main_tree_view_column_file_name = Nazwa
main_tree_view_column_folder_name = Nazwa
main_tree_view_column_path = Ścieżka
@ -69,23 +106,30 @@ main_tree_view_column_dimensions = Wymiary
main_tree_view_column_title = Tytuł
main_tree_view_column_artist = Wykonawca
main_tree_view_column_year = Rok
main_tree_view_column_album_title = Tytuł Albumu
main_tree_view_column_album_artist = Wykonawca Albumu
main_tree_view_column_bitrate = Bitrate
main_tree_view_column_length = Długość
main_tree_view_column_genre = Gatunek
main_tree_view_column_symlink_file_name = Nazwa Symlinka
main_tree_view_column_symlink_folder = Folder Symlinka
main_tree_view_column_destination_path = Docelowa Ścieżka
main_tree_view_column_type_of_error = Typ Błędu
main_tree_view_column_current_extension = Aktualne rozszerzenie
main_tree_view_column_proper_extensions = Poprawne rozszerzenia
main_label_check_method = Metoda sprawdzania
main_label_hash_type = Typ hashu
main_label_hash_size = Rozmiar hashu
main_label_size_bytes = Rozmiar(bajty)
main_label_size_bytes = Rozmiar (bajty)
main_label_min_size = Min
main_label_max_size = Max
main_label_shown_files = Liczba wyświetlanych plików
main_label_resize_algorithm = Algorytm zmiany rozmiaru
main_label_similarity = Podobieństwo{ " " }
main_check_box_broken_files_audio = Audio
main_check_box_broken_files_pdf = Pdf
main_check_box_broken_files_archive = Archiwa
main_check_box_broken_files_image = Obraz
check_button_general_same_size = Ignoruj identyczny rozmiar
check_button_general_same_size_tooltip = Wyrzuca z wyników skanowania pliki, które posiadają identyczny rozmiar, po to by w wynikach zostały tylko niemal identyczne rekordy.
check_button_general_same_size_tooltip = Ignoruj pliki o identycznym rozmiarze w wynikach - zazwyczaj są to duplikaty 1:1
main_label_size_bytes_tooltip = Rozmiar plików które będą zawarte przy przeszukiwaniu
# Upper window
upper_tree_view_included_folder_column_title = Foldery do Przeszukania
@ -98,26 +142,41 @@ upper_remove_included_button = Usuń
upper_manual_add_excluded_button = Ręcznie Dodaj
upper_add_excluded_button = Dodaj
upper_remove_excluded_button = Usuń
upper_manual_add_included_button_tooltip = Pozwala ręcznie dodać foldery do skanowania.
upper_manual_add_included_button_tooltip =
Dodaj nazwę katalogu do ręcznego wyszukiwania.
Aby dodać wiele ścieżek na raz, należy je oddzielić za pomocą średnika ;
/home/roman;/home/rozkaz doda dwa katalogi /home/roman i /home/rozkaz
upper_add_included_button_tooltip = Dodaje wybrany folder do przeskanowania.
upper_remove_included_button_tooltip = Usuwa zaznaczony folder z listy do skanowania.
upper_manual_add_excluded_button_tooltip = Pozwala ręcznie dodać ignorowane foldery.
upper_manual_add_excluded_button_tooltip =
Dodaj ręcznie katalog do listy wykluczonych.
Aby dodać wiele ścieżek na raz, oddziel je średnikiem ;
/home/roman;/home/krokiet doda dwa katalogi /home/roman i /home/keokiet
upper_add_excluded_button_tooltip = Dodaje wybrany folder do ignorowanych.
upper_remove_excluded_button_tooltip = Usuwa zaznaczony folder z ignorowanych.
upper_notebook_items_configuration = Konfiguracja Skanowania
upper_notebook_excluded_directories = Ignorowane Foldery
upper_notebook_included_directories = Przeszukiwane Foldery
upper_allowed_extensions_tooltip =
Dozwolone rozszerzenia muszą być oddzielone za pomocą przecinków - brak rozszerzeń oznacza że wszystkie rozszerzenia są używane.
Dozwolone rozszerzenia muszą być oddzielone przecinkami (domyślnie wszystkie są dostępne).
Istnieją makra, które umożliwiają dołączenie za jednym razem określonych typów plików IMAGE, VIDEO, MUSIC, TEXT.
Makra IMAGE, VIDEO, MUSIC, TEXT które dodają rozszerzenia w paczkach, również są wspierane.
Przykład użycia ".exe, IMAGE, VIDEO, .rar, 7z" - oznacza że obrazy (np. jpg, png), filmy (np. avi, mp4), exe, rar i 7z zostaną sprawdzone.
upper_excluded_extensions_tooltip =
Lista wyłączonych plików, które zostaną zignorowane w skanowaniu.
Przykładowe użycie ".exe, IMAGE, VIDEO, .rar, 7z" oznacza że obrazy(np. jpg, png), widea(np. avi, mp4) oraz pliki z rozszerzeniami exe, rar i 7z będą przeskanowane.
Gdy używasz zarówno dozwolonych, jak i wyłączonych rozszerzeń, ten ma wyższy priorytet, więc plik nie zostanie sprawdzony.
upper_excluded_items_tooltip =
Ignorowane obiekty mogą zawierać *(oznaczający dowolny ciąg znaków) i muszą być oddzielone za pomocą przecinków.
Działa o wiele wolniej niż Ignorowane Foldery, dlatego należy używać tego ostrożnie.
Wykluczone elementy muszą zawierać znak * (który odpowiada za dowolny ciąg znaków) i powinny być oddzielone przecinkami.
Jest to wolniejszy sposób od zwykłego wykluczania katalogów, więc należy używać go ostrożnie.
upper_excluded_items = Ignorowane Obiekty:
upper_allowed_extensions = Dozwolone Rozszerzenia:
upper_excluded_extensions = Wyłączone rozszerzenia:
# Popovers
popover_select_all = Zaznacz wszystko
popover_unselect_all = Odznacz wszystko
@ -131,36 +190,46 @@ popover_unselect_custom = Własne odznaczanie
popover_select_all_images_except_biggest = Zaznacz wszystkie oprócz największego
popover_select_all_images_except_smallest = Zaznacz wszystkie oprócz najmniejszego
popover_custom_path_check_button_entry_tooltip =
Pozwala zaznaczać rekordy według ścieżki.
Zaznacza rekordy według ścieżki.
Przykładowe użycie:
/home/pimpek/rzecz.txt może zostać znalezione poprzez /home/pim*
/home/pimpek/rzecz.txt można znaleźć używając /home/pim*
popover_custom_name_check_button_entry_tooltip =
Pozwala zaznaczać rekordy według ścieżki.
Zaznacza rekordy według nazw plików.
Przykładowe użycie:
/usr/ping/pong.txt może zostać znalezione poprzez *ong*
/usr/ping/pong.txt można znaleźć za pomocą *ong*
popover_custom_regex_check_button_entry_tooltip =
Pozwala wyszukiwać rekordy za pomocą regexów.
Wybierz rekordy według określonego Regexa.
W tym trybie przeszukiwanym tekstem jest pełna ścieżka(nazwa pliku + ścieżka do niego).
W tym trybie wyszukiwanym tekstem jest pełna ścieżka(wraz z nazwą).
Przykładowe użycie:
/usr/bin/ziemniak.txt może zostać znalezione with /ziem[a-z]+
/usr/bin/ziemniak. xt można znaleźć za pomocą /ziem[a-z]+
Używana jest domyśla implementacja Rust regex o której użyciu można więcej przeczytać tutaj - https://docs.rs/regex.
Używana jest tutaj domyślnej implementacja Regexa w Rust. Więcej informacji na ten temat można znaleźć tutaj: https://docs.rs/regex.
popover_custom_case_sensitive_check_button_tooltip =
Umożliwia wykrywanie wielkości liter.
Wykluczenie /home/* znajdzie zarówno /HoMe/roman, jak i /home/roman.
popover_custom_not_all_check_button_tooltip =
Zapobiega przed zaznaczeniem wszystkich rekordów w danej grupie.
Zapobiega wybraniu wszystkich rekordów w grupie.
Tryb jest domyślnie aktywny, ponieważ w większości przypadków zaznaczenie wszystkich rekordów w grupie nie jest czymś czego oczekuje użytkownik.
Ta opcja jest domyślnie włączona, ponieważ w większości sytuacji prawdopodobnie nie chcesz usuwać zarówno oryginałów jak i duplikatów, lecz chcesz pozostawić co najmniej jeden plik.
Uwaga: To ustawienie nie powoduje pomija grupy w których to użytkownik wcześniej zaznaczył wszystkie rekordy ręcznie.
OSTRZEŻENIE: To ustawienie nie działa jeśli wcześniej ręcznie zostały wybrane wszystkie rekordy w grupie.
popover_custom_regex_path_label = Ścieżka
popover_custom_regex_name_label = Nazwa
popover_custom_regex_regex_label = Regex - Pełna ścieżka
popover_custom_case_sensitive_check_button = Rozróżniaj wielkość liter
popover_custom_all_in_group_label = Nie zaznaczaj wszystkich rekordów w grupie
popover_custom_mode_unselect = Własne odznaczanie
popover_custom_mode_select = Własne zaznaczanie
popover_sort_file_name = Nazwa pliku
popover_sort_folder_name = Nazwa katalogu
popover_sort_full_name = Pełna nazwa
popover_sort_size = Rozmiar
popover_sort_selection = Zaznaczanie
popover_invalid_regex = Regex jest niepoprawny
popover_valid_regex = Regex jest poprawny
# Bottom buttons
@ -171,31 +240,39 @@ bottom_save_button = Zapisz
bottom_symlink_button = Symlink
bottom_hardlink_button = Hardlink
bottom_move_button = Przenieś
bottom_search_button_tooltip = Rozpocznij przeszukiwanie.
bottom_select_button_tooltip = Zaznacz elementy.
bottom_sort_button = Sortuj
bottom_search_button_tooltip = Rozpocznij wyszukiwanie
bottom_select_button_tooltip = Wybierz rekordy. Tylko wybrane pliki/foldery mogą być później przetwarzane.
bottom_delete_button_tooltip = Usuń zaznaczone elementy.
bottom_save_button_tooltip = Zapisz informacje o skanowaniu.
bottom_symlink_button_tooltip =
Tworzy linki symboliczne.
Działa tylko jeśli przynajmniej 2 wyniki są zaznaczone w danej grupie.
Pierwszy zaznaczony nie jest modyfikowany, a drugi i kolejne są usuwane i tworzone linki symboliczne w ich miejscach.
Utwórz linki symboliczne.
Działa tylko wtedy, gdy co najmniej dwa wyniki w grupie są zaznaczone.
Pierwszy jest niezmieniony, drugi i następny jest powiązywany z pierwszym.
bottom_hardlink_button_tooltip =
Tworzy twarde linki.
Działa tylko jeśli przynajmniej 2 wyniki są zaznaczone w danej grupie.
Pierwszy zaznaczony nie jest modyfikowany, a drugi i kolejne są usuwane i tworzone twarde linki w ich miejscach.
Tworzenie twardych linków.
Działa tylko wtedy, gdy wybrano co najmniej dwa rekordy w grupie.
Pierwszy jest niezmieniony, drugi i następny jest dowiązywany z pierwszym.
bottom_hardlink_button_not_available_tooltip =
Tworzenie twardych dowiązań.
Przycisk jest zablokowany, gdyż stworzenie twardego dowiązania nie jest możliwe.
Dowiązanie tego rodzaju może tworzyć administrator w systemie Windows, więc należy upewnić się że aplikacja jest uruchomiona przez z tymi uprawnieniami.
Jeśli aplikacja działa z nimi, należy przeszukać issues w Githubie celem znalezienia możliwych rozwiązań danego problemu.
bottom_move_button_tooltip =
Przenosi pliki do podanej lokalizacji.
Kopiuje pliki bez zachowywania struktury katalogów.
Podczas próby skopiowania 2 plików z identycznymi nazwami, drugi nie zostanie przeniesiony i błąd zostanie wyświetlony.
bottom_show_errors_tooltip = Pokazuje/ukrywa dolny panel z informacjami.
Przenosi pliki do wybranego katalogu.
Kopiuje wszystkie pliki do katalogu bez zachowania struktury plików.
Podczas próby przeniesienia dwóch plików o identycznej nazwie do folderu, drugi plik nie zostanie przeniesiony i pojawi się błąd.
bottom_sort_button_tooltip = Sortuje pliki/foldery zgodnie z wybraną metodą.
bottom_show_errors_tooltip = Pokaż/Ukryj dolny panel tekstowy.
bottom_show_upper_notebook_tooltip = Pokazuje/ukrywa górny panel.
# Progress Window
progress_stop_button = Stop
progress_stop_additional_message = Przerywanie skanowania
# About Window
about_repository_button_tooltip = Link do repozytorium z kodem źródłowym
about_donation_button_tooltip = Link do strony z dotacjami.
about_instruction_button_tooltip = Link do strony z instrukcją.
about_translation_button_tooltip = Link do strony Crowdin z tłumaczeniami aplikacji. Oficjalnie polski i angielski są wspierane ale za każdą pomoc w tłumaczeniu innych języków będę wdzięczny.
about_translation_button_tooltip = Link do strony Crowdin z tłumaczeniami aplikacji. Oficialnie wspierany jest język polski i angielski.
about_repository_button = Repozytorium
about_donation_button = Dotacje
about_instruction_button = Instrukcja(ENG)
@ -209,21 +286,29 @@ header_about_button_tooltip = Otwórz okno z informacjami o programie.
## General
settings_save_at_exit_button_tooltip = Zapisuje konfigurację programu podczas wychodzenia z niego.
settings_number_of_threads = Liczba używanych wątków
settings_number_of_threads_tooltip = Liczba używanych wątków, 0 oznacza, że zostaną użyte wszystkie dostępne wątki.
settings_label_restart = Musisz ponownie uruchomić aplikację, aby aplikacja zaciągnęła nowe ustawienia!
settings_ignore_other_filesystems = Ignoruj inne systemy plików (tylko Linux)
settings_ignore_other_filesystems_tooltip =
ignoruje pliki, które nie są w tym samym systemie plików co przeszukiwane katalogi.
Działa tak samo jak opcja -xdev w komendzie find na Linux
settings_save_at_exit_button_tooltip = Zapisz konfigurację do pliku podczas zamykania aplikacji.
settings_load_at_start_button_tooltip =
Ładowanie plików na starcie z plików.
Nie zaznaczenie tej opcji, spowoduje załadowanie domyślnych ustawień.
settings_confirm_deletion_button_tooltip = Wyświetla okno potwierdzające usuwanie plików.
settings_confirm_link_button_tooltip = Wyświetla okno potwierdzające usuwanie, gdy tworzone są hard/symlinki.
settings_confirm_group_deletion_button_tooltip = Wyświetla okno potwierdzające usuwanie, gdy wszystkie rekordy w danej grupie są zaznaczone.
settings_show_text_view_button_tooltip = Pokazuje na dole ekranu panel tekstowy.
settings_use_cache_button_tooltip = Umożliwia zapisywanie rekordów do pamięci podręcznej.
settings_save_also_as_json_button_tooltip = Zapisz pamięć podręczną do pliku w formacie JSON umożliwiającym zmiany zawartości. Pamięć podręczna z tego pliku zostanie odczytana automatycznie przez aplikację, jeśli nie istnieje plik z pamięcią podręczną w formacie binarnym (z rozszerzeniem bin).
settings_use_trash_button_tooltip = Przenosi pliki do kosza zamiast usuwać je permanentnie.
settings_language_label_tooltip = Pozwala wybrać język interfejsu.
settings_save_at_exit_button = Zapisuj konfigurację przy wyłączaniu
settings_load_at_start_button = Ładuj ustawienia na starcie z pliku
Wczytaj konfigurację z pliku podczas otwierania aplikacji.
Jeśli nieaktywny, zostaną użyte domyślne ustawienia.
settings_confirm_deletion_button_tooltip = Pokaż okno dialogowe potwierdzające usuwanie przy próbie usunięcia rekordu.
settings_confirm_link_button_tooltip = Pokaż dodatkowe okno dialogowe przy próbie utworzenia hard/symlinków.
settings_confirm_group_deletion_button_tooltip = Pokaż okno dialogowe ostrzegające przy próbie usunięcia wszystkich rekordów z grupy.
settings_show_text_view_button_tooltip = Pokaż dolny panel tekstowy.
settings_use_cache_button_tooltip = Użyj pamięci podręcznej plików.
settings_save_also_as_json_button_tooltip = Zapisz pamięć podręczną do formatu JSON (czytelnego dla człowieka). Można modyfikować jego zawartość. Pamięć podręczna z tego pliku zostanie odczytana automatycznie przez aplikację, jeśli brakuje pamięci podręcznej formatu binarnego (z rozszerzeniem bin).
settings_use_trash_button_tooltip = Przenosi pliki do kosza zamiast usuwać je na stałe.
settings_language_label_tooltip = Język interfejsu użytkownika.
settings_save_at_exit_button = Zapisz konfigurację podczas zamykania aplikacji
settings_load_at_start_button = Załaduj konfigurację z pliku podczas otwierania aplikacji
settings_confirm_deletion_button = Pokazuj okno potwierdzające usuwanie plików
settings_confirm_link_button = Pokazuj potwierdzenie usuwania hard/symlinków
settings_confirm_group_deletion_button = Pokazuj okno potwierdzające usuwanie wszystkich obiektów w grupie
@ -234,13 +319,13 @@ settings_use_trash_button = Przenoś pliki do kosza
settings_language_label = Język
settings_multiple_delete_outdated_cache_checkbutton = Usuwaj automatycznie nieaktualne rekordy z pamięci podręcznej
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
Pozwala na automatyczne usuwanie rekordów, które wskazują na nieaktualne pliki.
Usuń nieaktualne rekordy z pamięci podręcznej, które wskazują na nieistniejące pliki.
W przypadku gdy pole jest zaznaczone, upewnij się, że wszystkie dyski zewnętrzne są podpięte by nie stracić zapisanych hashy z pamięci podręcznej.
Po włączeniu aplikacja upewnia się, że podczas ładowania rekordów wszystkie wskazują na prawidłowe pliki (uszkodzone czy zmienione pliki są ignorowane).
Wyłączenie tej opcji spowoduje, że nawet przy skanowaniu odpiętych dysków, rekordy w pamięci podręcznej nie będą usuwane.
Wyłączenie tej opcji, pomoże podczas skanowania plików na zewnętrznych dyskach, więc wpisy dotyczące ich nie zostaną usunięte w następnym skanowaniu.
W przypadku posiadania dziesiątek czy setek tysięcy rekordów w pamięci podręcznej, zalecane jest zaznaczenie tej opcji, ponieważ przyspiesza to ładowanie i zapisywanie pamięci podręcznej.
W przypadku posiadania stu tysięcy rekordów w pamięci podręcznej, sugeruje się, aby włączyć tę opcję, ponieważ przyspieszy ładowanie/zapisywanie pamięci podręcznej na początku/końcu skanowania.
settings_notebook_general = Ogólne
settings_notebook_duplicates = Duplikaty
settings_notebook_images = Podobne Obrazy
@ -248,38 +333,40 @@ settings_notebook_videos = Podobne Wideo
## Multiple - settings used in multiple tabs
settings_multiple_image_preview_checkbutton_tooltip = Pokazuje podgląd obrazów po ich zaznaczeniu po prawej stronie aplikacji.
settings_multiple_image_preview_checkbutton_tooltip = Pokazuje podgląd po prawej stronie (podczas zaznaczania obrazu).
settings_multiple_image_preview_checkbutton = Pokazuj podgląd obrazów
settings_multiple_clear_cache_button_tooltip = Ręcznie czyści pamięć podręczną z nieaktualnych danych.
settings_multiple_clear_cache_button = Usuń nieaktualne dane z pamięci podręcznej
settings_multiple_clear_cache_button_tooltip =
Ręcznie wyczyść pamięć podręczną przestarzałych wpisów.
To powinno być używane tylko wtedy, gdy automatyczne czyszczenie zostało wyłączone.
settings_multiple_clear_cache_button = Usuń nieaktualne wyniki z pamięci podręcznej.
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
Ukrywa wszystkie pliki oprócz jednego, jeśli wskazują na dokładnie ten sam plik(to samo inode).
Ukrywa wszystkie pliki z wyjątkiem jednego, jeśli wszystkie wskazują na te same dane (są połączone twardym dowiązaniem).
Przykładowo - gdy program znalazł 7 plików na dokładnie ten sam plik(z tym samym inode) a dodatkowo jeden na inny, to w wynikach wyszukiwania wyświetlą się jedynie 2 wyniki - jeden z pierwszej grupy i drugi z drugiej.
Przykład: W przypadku gdy istnieje (na dysku) siedem plików, które są twardo dowiązane ze sobą i jeden inny plik z tymi samymi danymi, ale innym inode, wtedy w oknie wyników, wyświetlony zostanie tylko jeden unikalny plik i jeden plik z siedmiu dowiązanych ze sobą plików.
settings_duplicates_minimal_size_entry_tooltip =
Opcja umożliwia ustawienie minimalnej wielkości pliku, której hash będzie zapisywany do pamięci podręcznej.
Ustaw minimalny rozmiar pliku, który zapisywany będzie do pliku z pamięcią podręcznej.
Im mniejsza wartość, tym hash większej ilości plików będzie przechowywany w pamięci podręcznej, co przyspieszy wyszukiwanie plików lecz jednocześnie spowolni wczytywanie/zapisywanie hashu do pliku.
Wybór mniejszej wartości spowoduje wygenerowanie większej ilości rekordów. To przyspieszy wyszukiwanie, ale spowolni ładowanie/zapisywanie danych do pamięci podręcznej.
settings_duplicates_prehash_checkbutton_tooltip =
Umożliwia zapisywanie cząstkowego hashu do pamięci podręcznej, który umożliwia na wcześniejsze wyrzucenie plików z unikalnymi rozmiarami.
Włącza zapisywanie częściowych haszów do pamięci podręcznej (hash obliczany jest tylko z małej części pliku), które pozwala na wcześniejsze odrzucenie unikalnych plików.
Domyślnie jest zablokowane, ponieważ może powodować spowolnione skanowanie w niektórych sytuacjach.
Jest domyślnie wyłączona opcja, ponieważ może spowodować spowolnienie w niektórych sytuacjach.
Jest mocno polecane osobom które skanują tylko i wyłącznie katalogi zawierające dziesiątki lub setki tysięcy lub nawet miliony plików, ponieważ może to wielokrotnie przyspieszyć proces skanowania.
Zaleca się używanie tej opcji podczas skanowania setek tysięcy lub milionów plików, ponieważ może przyspieszyć wielokrotnie przeszukiwanie i wyłaczać gdy skanuje się niewielką ilość danych.
settings_duplicates_prehash_minimal_entry_tooltip = Minimalny rozmiar pliku, którego cząstkowy hash będzie zapisywany do pamięci podręcznej.
settings_duplicates_hide_hard_link_button = Ukrywaj twarde dowiązania(nie działa na Windowsie)
settings_duplicates_hide_hard_link_button = Ukryj twarde dowiązania (tylko Linux i macOS)
settings_duplicates_prehash_checkbutton = Używaj pamięci podręcznej dla hashy cząstkowych
settings_duplicates_minimal_size_cache_label = Wielkość pliku, od którego hash będzie zapisywany w pamięci podręcznej
settings_duplicates_minimal_size_cache_prehash_label = Wielkość pliku, od którego cząstkowy hash będzie zapisywany w pamięci podręcznej
settings_duplicates_minimal_size_cache_label = Minimalny rozmiar plików (w bajtach) zapisywanych do pamięci podręcznej
settings_duplicates_minimal_size_cache_prehash_label = Minimalny rozmiar plików (w bajtach) przy zapisywaniu ich częściowego haszu do pamięci podręcznej
## Saving/Loading settings
settings_saving_button_tooltip = Zapisuje aktualne ustawienia do pliku.
settings_loading_button_tooltip = Ładuje ustawienia z pliku.
settings_reset_button_tooltip = Resetuje aktualne ustawienia do domyślnie używanych przez aplikację.
settings_saving_button_tooltip = Zapisz aktualną konfigurację ustawień do pliku.
settings_loading_button_tooltip = Załaduj ustawienia z pliku i nadpisz bieżącą konfigurację.
settings_reset_button_tooltip = Przywróć domyślną konfigurację.
settings_saving_button = Zapisanie ustawień
settings_loading_button = Załadowanie ustawień
settings_reset_button = Reset ustawień
@ -289,13 +376,15 @@ settings_reset_button = Reset ustawień
settings_folder_cache_open_tooltip =
Otwiera folder gdzie przechowywana jest pamięć podręczna aplikacji.
Jej ręczne modyfikowanie może powodować wyświetlanie niepoprawnych wyników lub jej uszkodzenie spowoduje konieczność ponownej generacji, lecz umożliwia też oszczędzenie czasu przy przesuwaniu większej ilości plików.
Ręczne modyfikowanie może powodować wyświetlanie niepoprawnych wyników lub jej uszkodzenie spowoduje konieczność ponownej generacji, lecz umożliwia też oszczędzenie czasu przy przesuwaniu większej ilości plików.
Pliki można kopiować pomiędzy komputerami by zaoszczędzić czas na hashowaniu plików (oczywiście tylko gdy dane są przechowywane w identycznej strukturze katalogów na komputerach).
Można pliki kopiować pomiędzy komputerami by zaoszczędzić czas na hashowaniu plików(oczywiście tylko gdy dane są przechowywane w identycznej strukturze katalogów na komputerach).
W razie problemów z pamięcią podręczną, pliki mogą zostać usunięte. Aplikacja automatycznie je zregeneuje.
settings_folder_settings_open_tooltip =
Otwiera folder gdzie Czkawka przechowuje ustawienia.
Otwiera folder, w którym konfiguracja Czkawki jest przechowywana.
Ich ręczna zmiana, może spowodować różne błędy i kataklizmy, o których fizjologom się nie śniło.
OSTRZEŻENIE: ręczna modyfikacja konfiguracji może zakłócić przepływ twojej pracy.
settings_folder_cache_open = Otwórz folder pamięci podręcznej
settings_folder_settings_open = Otwórz folder ustawień
# Compute results
@ -311,19 +400,30 @@ compute_found_videos = Znaleziono { $number_files } podobnych plików wideo w {
compute_found_music = Znaleziono { $number_files } podobnych plików muzycznych w { $number_groups } grupach
compute_found_invalid_symlinks = Znaleziono { $number_files } niepoprawnych dowiązań symbolicznych
compute_found_broken_files = Znaleziono { $number_files } uszkodzonych plików
compute_found_bad_extensions = Znaleziono { $number_files } plików z nieprawidłowymi rozszerzeniami
# Progress window
progress_scanning_general_file = Skanowanie { $file_number } pliku
progress_scanning_broken_files = Sprawdzanie { $file_checked }/{ $all_files } pliku
progress_scanning_extension_of_files = Sprawdzanie rozszerzenia { $file_checked }/{ $all_files } pliku
progress_scanning_broken_files = Sprawdzanie { $file_checked }/{ $all_files } plików
progress_scanning_video = Hashowanie { $file_checked }/{ $all_files } pliku wideo
progress_scanning_image = Hashowanie { $file_checked }/{ $all_files } obrazu
progress_comparing_image_hashes = Porównywanie { $file_checked }/{ $all_files } hashu obrazu
progress_scanning_music_tags_end = Porównywanie tagów { $file_checked }/{ $all_files } pliku audio
progress_scanning_music_tags = Sczytywanie tagów { $file_checked }/{ $all_files } pliku audio
progress_scanning_music_content_end = Porównywanie odcisku palca { $file_checked }/{ $all_files } pliku muzycznego
progress_scanning_music_content = Obliczanie odcisku palca { $file_checked }/{ $all_files } pliku muzycznego
progress_scanning_empty_folders = Przeszukiwanie { $folder_number } folderu
progress_scanning_size = Sprawdzanie rozmiaru { $file_number } pliku
progress_scanning_size_name = Skanowanie nazwy i rozmiaru pliku { $file_number }
progress_scanning_name = Sprawdzanie nazwy { $file_number } pliku
progress_analyzed_partial_hash = Obliczanie częściowego hashu { $file_checked }/{ $all_files } pliku
progress_analyzed_full_hash = Obliczanie pełnego hashu { $file_checked }/{ $all_files } pliku
progress_prehash_cache_loading = Ładowanie pamięci podręcznej prehashu
progress_prehash_cache_saving = Zapisywanie pamięci podręcznej prehashu
progress_hash_cache_loading = Ładowanie pamięci podręcznej hash
progress_hash_cache_saving = Zapisywanie pamięci podręcznej skrótu
progress_cache_loading = Ładowanie pamięci podręcznej
progress_cache_saving = Zapisywanie pamięci podręcznej
progress_current_stage = Aktualny Etap:{ " " }
progress_all_stages = Wszystkie Etapy:{ " " }
# Saving loading
@ -346,8 +446,9 @@ saving_loading_orphan_data = Znaleziono osierocone dane "{ $data }" w wierszu "{
saving_loading_not_valid = Ustawienie "{ $data }" nie istnieje w bieżącej wersji aplikacji.
# Invalid symlinks
invalid_symlink_infinite_recursion = Nieskończona rekurencja
invalid_symlink_non_existent_destination = Nie istniejący docelowy plik
invalid_symlink_non_existent_destination = Nieistniejący docelowy plik
# Other
selected_all_reference_folders = Nie można rozpocząć wyszukiwania, gdy wszystkie katalogi są ustawione jako foldery źródłowe (referencyjne)
searching_for_data = Przeszukiwanie dysku, może to potrwać chwilę, proszę czekać...
text_view_messages = WIADOMOŚCI
text_view_warnings = OSTRZEŻENIA
@ -363,25 +464,26 @@ delete_file_failed = Nie udało się usunąć pliku { $name }, powód { $reason
delete_title_dialog = Potwierdzenie usunięcia
delete_question_label = Czy na pewno usunąć te pliki?
delete_all_files_in_group_title = Potwierdzenie usunięcia wszystkich plików w grupie
delete_all_files_in_group_label1 = W niektórych grupach zaznaczono wszystkie rekordy.
delete_all_files_in_group_label1 = W niektórych grupach wszystkie rekordy są zaznaczone.
delete_all_files_in_group_label2 = Czy na pewno je usunąć?
delete_folder_failed = Nie udało się usunąć folderu { $dir } ponieważ nie istnieje, uprawnienia nie są wystarczające lub nie jest pusty.
delete_items_label = { $items } plików będzie usuniętych.
delete_items_groups_label = { $items } plików z { $groups } grup będzie usuniętych.
delete_items_groups_label = { $items } plików z { $groups } grup zostanie usuniętych.
hardlink_failed = Nie udało się utworzyć twardego dowiązania
hard_sym_invalid_selection_title_dialog = Niepoprawne zaznaczenie w niektórych grupach
hard_sym_invalid_selection_label_1 = W niektórych grupach zaznaczono tylko 1 rekord, który zostanie zignorowany.
hard_sym_invalid_selection_label_2 = Aby móc używać dowiązań, należy zaznaczyć przynajmniej 2 obiekty w danej grupie.
hard_sym_invalid_selection_label_1 = W niektórych grupach jest zaznaczony tylko jeden rekord i zostanie zignorowany.
hard_sym_invalid_selection_label_2 = Aby móc mocno połączyć te pliki, należy wybrać co najmniej dwa rekordy w grupie.
hard_sym_invalid_selection_label_3 = Pierwszy pozostaje nienaruszony a drugi i kolejne są dowiązywane do tego pierwszego.
hard_sym_link_title_dialog = Potwierdzenie dowiązania
hard_sym_link_label = Czy na pewno dowiązać te pliki?
hard_sym_link_label = Czy na pewno chcesz dowiązać te pliki?
move_folder_failed = Nie można przenieść folderu { $name }, powód { $reason }
move_file_failed = Nie można przenieść pliku { $name }, powód { $reason }
move_files_title_dialog = Wybierz folder, do którego zostaną przeniesione pliki
move_files_choose_more_than_1_path = Można przenieść elementy tylko do 1 folderu, zaznaczono { $path_number }.
move_files_choose_more_than_1_path = Tylko jedna ścieżka może być wybrana, aby móc skopiować zduplikowane pliki, wybrano { $path_number }.
move_stats = Poprawnie przeniesiono { $num_files }/{ $all_files } elementów
save_results_to_file = Zapisano wyniki do pliku { $name }
save_results_to_file = Zapisano wyniki zarówno do plików txt, jak i json w folderze { $name }.
search_not_choosing_any_music = BŁĄD: Musisz zaznaczyć przynajmniej jeden pole, według którego będą wyszukiwane podobne pliki muzyczne.
search_not_choosing_any_broken_files = BŁĄD: Musisz wybrać co najmniej jedno pole wyboru z rodzajem uszkodzonych plików.
include_folders_dialog_title = Foldery do przeszukiwania
exclude_folders_dialog_title = Foldery do ignorowania
include_manually_directories_dialog_title = Dodaj katalogi ręcznie
@ -391,14 +493,11 @@ cache_clear_similar_images_title = Czyszczenie pamięci podręcznej podobnych ob
cache_clear_similar_videos_title = Czyszczenie pamięci podręcznej podobnych plików wideo
cache_clear_message_label_1 = Czy na pewno chcesz oczyścić pamięć podręczną z przestarzałych wpisów?
cache_clear_message_label_2 = Ta operacja usunie wszystkie rekordy, które wskazują na nieistniejące pliki.
cache_clear_message_label_3 = Może spowodować to przyspieszenie ładowania i zapisywania danych do pamięci w trakcie skanowania.
cache_clear_message_label_4 = OSTRZEŻENIE: Usunięte zostaną wszystkie rekordy z odpiętych dyskach zewnętrznych i konieczne będzie ich ponowne sprawdzenie po podpięciu.
cache_clear_message_label_3 = Może to nieznacznie przyspieszyć ładowanie/oszczędzanie pamięci podręcznej.
cache_clear_message_label_4 = OSTRZEŻENIE: Operacja usunie wszystkie dane w pamięci podręcznej z wyłączonych dysków zewnętrznych. Zatem każdy hash będzie musiał zostać zregenerowany.
# Show preview
preview_temporary_file = Nie udało się otworzyć tymczasowego obrazu { $name }, powód { $reason }.
preview_0_size = Nie można stworzyć podglądu obrazu { $name }, z wysokością lub szerokością 0 pikseli.
preview_temporary_image_save = Nie udało się zapisać tymczasowego obrazu do { $name }, powód { $reason }.
preview_temporary_image_remove = Nie udało się usunąć tymczasowego obrazu { $name }, powód { $reason }.
preview_failed_to_create_cache_dir = Nie udało stworzyć się katalogu { $name } wymaganego do stworzenia podglądu obrazu, powód { $reason }.
preview_image_resize_failure = Nie udało się zmienić rozmiaru obrazu { $name }.
preview_image_opening_failure = Nie udało się otworzyć obrazu { $name }, powód { $reason }
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = Grupa { $current_group }/{ $all_groups } ({ $images_in_group } obrazów)
compare_move_left_button = L

@ -1,5 +1,5 @@
# Window titles
window_settings_title = Opções
window_settings_title = Configurações
window_main_title = Czkawka (Soluço)
window_progress_title = Verificando
window_compare_images = Comparar imagens
@ -9,58 +9,93 @@ general_close_button = Fechar
# Main window
music_title_checkbox = Título
music_artist_checkbox = Artista
music_album_title_checkbox = Título do Álbum
music_album_artist_checkbox = Artista do Álbum
music_year_checkbox = Ano
music_bitrate_checkbox = Taxa de bits
music_genre_checkbox = Género
music_length_checkbox = Comprimento
music_comparison_checkbox = Comparação aproximada
music_checking_by_tags = Etiquetas
music_checking_by_content = Conteúdo
same_music_seconds_label = Duração mínima do fragmento segundo tempo
same_music_similarity_label = Diferença máxima
same_music_tooltip =
Procurar por arquivos de música semelhantes por seu conteúdo pode ser configurado pela configuração:
- Tempo mínimo de fragmento depois do qual os arquivos de música podem ser identificados como semelhantes
- A diferença máxima entre dois fragmentos testados
A chave para bons resultados é encontrar combinações sensíveis desses parâmetros, para fornecido.
Definir o tempo mínimo para 5s e a diferença máxima para 1.0, irá procurar fragmentos quase idênticos nos arquivos.
Um tempo de 20s e uma diferença máxima de 6.0, por outro lado, funciona bem para encontrar versões remixes/ao vivo, etc.
Por padrão, cada arquivo de música é comparado entre si, e isso pode levar muito tempo para testar muitos arquivos, portanto, é geralmente melhor usar pastas de referência e especificar quais arquivos devem ser comparados (com a mesma quantidade de arquivos, A comparação de impressões digitais será mais rápida pelo menos 4 vezes do que nas pastas de referência).
music_comparison_checkbox_tooltip =
Ele procura por arquivos de música semelhantes usando AI, que usa aprendizado de máquina para remover parênteses de uma frase, por exemplo, com esta opção ativada, os arquivos em questão serão considerados duplicatas:
Ele busca arquivos de música semelhantes usando IA, que usa aprendizado de máquina para remover parênteses duma frase. Por exemplo, com esta opção ativada, os arquivos em questão serão considerados duplicatas:
Świędziżłób --- Świędziżłób (Remix Lato 2021)
duplicate_case_sensitive_name = Sensível a maiúsculas e minúsculas
duplicate_case_sensitive_name_tooltip =
Quando ativado, o grupo só registra quando eles têm o mesmo nome, por exemplo, Żołd <-> Żołd
Desativar esta opção agrupará os nomes sem verificar se cada letra é do mesmo tamanho, por exemplo, żoŁD <-> Żołd
duplicate_mode_size_name_combo_box = Tamanho e Nome
duplicate_mode_name_combo_box = Nome
duplicate_mode_size_combo_box = Tamanho
duplicate_mode_hash_combo_box = Hash
duplicate_hash_type_tooltip =
Czkawka oferece 3 tipos de hashes, que poderiam ser usados:
Blake3 - função hash criptográfica. Ele é usado como algoritmo de hash padrão porque é muito rápido.
Blake3 - função de hash criptográfico. Este é o padrão, pois é muito rápido.
CRC32 - função hash simples. Deveria ser mais rápido do que o Blake3, mas provavelmente poderá ter muito poucas colisões.
CRC32 - função de hash simples. Isto deve ser mais rápido que Blake3, mas pode muito raramente ter algumas colisões.
XXH3 - muito similar em caso de desempenho e qualidade de hash para o Blake3, então esses modos podem ser facilmente usados.
XXH3 - muito semelhante em desempenho e qualidade de hash ao Blake3 (mas não criptográfico). Logo, tais modos podem ser facilmente intercambiáveis.
duplicate_check_method_tooltip =
Por enquanto, Czkawka oferece três tipos de métodos para encontrar duplicados por:
Por ora, o Czkawka oferece três tipos de métodos para encontrar duplicatas:
Nome - Localiza arquivos que têm o mesmo nome.
Nome - Acha arquivos que têm o mesmo nome.
Tamanho - Localiza arquivos com o mesmo tamanho.
Tamanho - Acha arquivos que têm o mesmo tamanho.
Hash - Localiza arquivos que têm o mesmo conteúdo. Este modo de hashes de arquivo e posteriores compara este hashes para encontrar duplicatas. Este modo é a maneira mais segura de encontrar duplicatas. A ferramenta utiliza fortemente o cache, portanto as verificações de segundo e mais novos dados devem ser muito mais rápidas do que antes.
Hash - Acha arquivos que têm o mesmo conteúdo. Este modo faz o hash do arquivo e entção compara este hash para achar duplicatas. Este modo é o jeito mais seguro de achar duplicatas. O aplicativo usa muito cache, logo, a segunda e outras varreduras dos mesmos dados devem ser muito mais rápidas que a primeira.
image_hash_size_tooltip =
Czkawka oferece o tamanho alterado do hash gerado para cada imagem. A causa hash maior permite encontrar imagens com uma quantidade menor de diferenças entre as imagens, mas também é um pouco mais lenta para usar.
O valor padrão para hash é 8 bytes, o que permite encontrar imagens muito semelhantes e diferentes. 16 e 32 hashes devem ser usados apenas para imagens quase idênticas. Não deve ser usado o hash de 64 bytes, exceto situações em que são necessárias pequenas diferenças para encontrar
image_resize_filter_tooltip = Para calcular o hash de imagem, a biblioteca deve primeiro redimensioná-la. Depende no algoritmo escolhido, a imagem resultante parecerá pouco diferente. O algoritmo mais rápido para usar, mas também aquele que dá os piores resultados é mais rápido.
image_hash_alg_tooltip = Os usuários podem escolher um de muitos algoritmos para calcular o hash. Cada um tem pontos fortes e fracos e às vezes dará resultados melhores e às vezes piores para diferentes imagens, então escolha o melhor, testes manuais são necessários.
main_notebook_image_fast_compare = Comparação rápida
main_notebook_image_fast_compare_tooltip =
Acelerar busca e comparação de hashes.
No modo oposto ao normal em que cada hash é comparado entre si x vezes, onde x é similaridade que o usuário escolhe, neste modo sempre é usada uma comparação.
Esta opção é recomendada quando se compara >10000 imagens com non 0(muito alta) similaridade.
main_notebook_duplicates = Arquivos Duplicados
main_notebook_empty_directories = Diretórios Vazios
main_notebook_big_files = Arquivos Grandes
main_notebook_empty_files = Arquivos Vazios
main_notebook_temporary = Arquivos Temporários
main_notebook_similar_images = Imagens Semelhantes
main_notebook_similar_videos = Vídeos Similares
main_notebook_same_music = Músicas Duplicadas
main_notebook_symlinks = Link Simbólico Inválido
main_notebook_broken_files = Arquivos Quebrados
Cada imagem marcada produz um hash especial que pode ser comparado entre si. e uma pequena diferença entre eles significa que essas imagens são parecidas. O tamanho hash
8 é muito bom para encontrar imagens que são apenas um pouco semelhantes ao original. Com um maior conjunto de imagens (>1000), isso irá produzir uma grande quantidade de falsos positivos, então eu recomendo usar um tamanho de hash maior neste caso.
16 é o tamanho hash padrão que é um bom compromisso entre encontrar até mesmo algumas imagens semelhantes e ter apenas uma pequena quantidade de colisões hash.
32 e 64 hashes só encontram imagens muito semelhantes, mas quase não devem ter falsos positivos (talvez, exceto algumas imagens com o canal alfa).
image_resize_filter_tooltip =
To compute hash of image, the library must first resize it.
Depend on chosen algorithm, the resulting image used to calculate hash will looks a little different.
The fastest algorithm to use, but also the one which gives the worst results, is Nearest. It is enabled by default, because with 16x16 hash size lower quality it is not really visible.
With 8x8 hash size it is recommended to use a different algorithm than Nearest, to have better groups of images.
image_hash_alg_tooltip =
Os usuários podem escolher entre um dos muitos algoritmos de cálculo do hash.
Cada um tem pontos fortes e fracos e por vezes darão resultados melhores e por vezes piores para imagens diferentes.
Logo, para determinar o melhor para você, são precisos testes manuais.
big_files_mode_combobox_tooltip = Permite a busca de arquivos menores/maiores
big_files_mode_label = Arquivos verificados
big_files_mode_smallest_combo_box = O menor
big_files_mode_biggest_combo_box = O maior
main_notebook_duplicates = Arquivos duplicados
main_notebook_empty_directories = Diretórios vazios
main_notebook_big_files = Arquivos grandes
main_notebook_empty_files = Arquivos vazios
main_notebook_temporary = Arquivos temporários
main_notebook_similar_images = Imagens semelhantes
main_notebook_similar_videos = Vídeos semelhantes
main_notebook_same_music = Músicas duplicadas
main_notebook_symlinks = Ligação simbólica inválida
main_notebook_broken_files = Arquivos quebrados
main_notebook_bad_extensions = Extensões inválidas
main_tree_view_column_file_name = Nome do arquivo
main_tree_view_column_folder_name = Nome da pasta
main_tree_view_column_folder_name = Nome do diretório
main_tree_view_column_path = Caminho
main_tree_view_column_modification = Data de modificação
main_tree_view_column_size = Tamanho
@ -69,133 +104,172 @@ main_tree_view_column_dimensions = Tamanho
main_tree_view_column_title = Título
main_tree_view_column_artist = Artista
main_tree_view_column_year = Ano
main_tree_view_column_album_title = Título do Álbum
main_tree_view_column_album_artist = Artista do Álbum
main_tree_view_column_symlink_file_name = Nome do arquivo Symlink
main_tree_view_column_symlink_folder = Pasta do Symlnik
main_tree_view_column_destination_path = Caminho de Destino
main_tree_view_column_bitrate = Taxa de bits
main_tree_view_column_length = Comprimento
main_tree_view_column_genre = Género
main_tree_view_column_symlink_file_name = Nome do arquivo de ligação simbólica
main_tree_view_column_symlink_folder = Diretório da ligação simbólica
main_tree_view_column_destination_path = Caminho de destino
main_tree_view_column_type_of_error = Tipo de erro
main_tree_view_column_current_extension = Extensão atual
main_tree_view_column_proper_extensions = Extensão adequada
main_label_check_method = Método de verificação
main_label_hash_type = Tipo de hash
main_label_hash_size = Tamanho do hash
main_label_size_bytes = Tamanho(bytes)
main_label_size_bytes = Tamanho (bytes)
main_label_min_size = Mínimo
main_label_max_size = Máximo
main_label_shown_files = Número de arquivos exibidos
main_label_resize_algorithm = Redimensionar algoritmo
main_label_similarity = Similaridade{ " " }
main_check_box_broken_files_audio = Áudio
main_check_box_broken_files_pdf = Pdf
main_check_box_broken_files_archive = Arquivar
main_check_box_broken_files_image = Imagem
check_button_general_same_size = Ignorar o mesmo tamanho
check_button_general_same_size_tooltip = Ignorar dos resultados, arquivos que têm tamanho idêntico - geralmente isto são duplicados 1:1
check_button_general_same_size_tooltip = Ignorar arquivos com tamanho idêntico nos resultados - geralmente estes são duplicados 1:1
main_label_size_bytes_tooltip = Tamanho dos arquivos que serão usados na verificação
# Upper window
upper_tree_view_included_folder_column_title = Pastas para Pesquisar
upper_tree_view_included_reference_column_title = Pastas de referência
upper_tree_view_included_folder_column_title = Diretórios para buscar
upper_tree_view_included_reference_column_title = Diretórios de referência
upper_recursive_button = Recursiva
upper_recursive_button_tooltip = Se selecionado, pesquisar também por arquivos que não são colocados diretamente nas pastas escolhidas.
upper_manual_add_included_button = Adicionar Manual
upper_recursive_button_tooltip = Se selecionado, buscar também arquivos que não são postos diretamente nas pastas escolhidas.
upper_manual_add_included_button = Adição manual
upper_add_included_button = Adicionar
upper_remove_included_button = Excluir
upper_manual_add_excluded_button = Adicionar Manual
upper_manual_add_excluded_button = Adição manual
upper_add_excluded_button = Adicionar
upper_remove_excluded_button = Excluir
upper_manual_add_included_button_tooltip = Permite adicionar o nome do diretório à mão de busca.
upper_add_included_button_tooltip = Adicionar novo diretório à pesquisa.
upper_manual_add_included_button_tooltip =
Adicionar o nome do diretório à mão.
Para adicionar vários caminhos de uma vez, separe-os por ;
/home/roman;/home/rozkaz adicionará dois diretórios /home/roman e /home/rozkaz
upper_add_included_button_tooltip = Adicionar novo diretório à busca.
upper_remove_included_button_tooltip = Excluir diretório da busca.
upper_manual_add_excluded_button_tooltip = Permite adicionar o nome de diretório excluído à mão.
upper_add_excluded_button_tooltip = Adicionar diretório a ser excluído na pesquisa.
upper_remove_excluded_button_tooltip = Diretório excluído para exclusão.
upper_manual_add_excluded_button_tooltip =
Adicionar o nome de diretório excluído à mão.
Para adicionar vários caminhos de uma vez, separe-os por ;
/home/roman;/home/krokiet adicionará dois diretórios /home/roman e /home/keokiet
upper_add_excluded_button_tooltip = Adicionar diretório a ser excluído na busca.
upper_remove_excluded_button_tooltip = Excluir diretório da exclusão.
upper_notebook_items_configuration = Configuração dos itens
upper_notebook_excluded_directories = Diretórios excluídos
upper_notebook_included_directories = Diretórios incluídos
upper_allowed_extensions_tooltip =
Extensões permitidas devem ser separadas por vírgulas (por padrão todas estão disponíveis).
Macros IMAGE, VIDEO, MUSIC, TEXT que adiciona várias extensões de uma só vez também estão disponíveis.
Os seguintes Macros, que adicionam várias extensões de uma só vez, também estão disponíveis: IMAGE, VIDEO, MUSIC, TEXT.
Exemplo de uso ".exe, IMAGE, VIDEO, .rar, 7z" - isto significa que as imagens (e. . jpg, png), vídeos (por exemplo, avi, mp4), exe, rar e arquivos 7z serão escaneados.
upper_excluded_extensions_tooltip =
Lista de arquivos desabilitados que serão ignorados na verificação.
Exemplo de uso ".exe, IMAGE, VIDEO, .rar, 7z" - isto significa que imagem (e. jpg, png), vídeo(por exemplo, avi, mp4), exe, rar e 7z arquivos serão escaneados.
Ao usar extensões permitidas e desativadas, este tem maior prioridade, então o arquivo não será marcado.
upper_excluded_items_tooltip =
Itens excluídos devem conter * curinga e devem ser separados por vírgulas.
Isto é mais lento do que os diretórios excluídos, então use-o com cuidado.
upper_excluded_items = Itens Excluídos:
Isto é mais lento do que a exclusão de diretórios, logo, use-o com cuidado.
upper_excluded_items = Itens excluídos:
upper_allowed_extensions = Extensões permitidas:
upper_excluded_extensions = Extensões desabilitadas:
# Popovers
popover_select_all = Selecionar todos
popover_unselect_all = Desmarcar todos
popover_reverse = Seleção inversa
popover_select_all_except_oldest = Selecionar todos, exceto os mais antigos
popover_select_all_except_newest = Selecionar todos, exceto os mais recentes
popover_select_one_oldest = Selecione um mais antigo
popover_select_one_newest = Selecione um mais recente
popover_select_custom = Selecionar um personalizado
popover_unselect_custom = Desmarcar personalizado
popover_select_one_oldest = Selecionar um mais antigo
popover_select_one_newest = Selecionar um mais recente
popover_select_custom = Selecionar um customizado
popover_unselect_custom = Desmarcar customizado
popover_select_all_images_except_biggest = Selecionar tudo, exceto o maior
popover_select_all_images_except_smallest = Selecionar todos, exceto menor
popover_select_all_images_except_smallest = Selecionar tudo, exceto o menor
popover_custom_path_check_button_entry_tooltip =
Permite selecionar registros por seu caminho.
Selecionar registros por caminho.
Exemplo de uso:
/home/pimpek/rzecz.txt pode ser encontrado com /home/pim*
/home/pimpek/rzecz.txt pode ser achado com /home/pim*
popover_custom_name_check_button_entry_tooltip =
Permite selecionar registros por nomes de arquivos.
Selecionar registros por nomes de arquivos.
Exemplo de uso:
/usr/ping/pong.txt pode ser encontrado com *ong*
/usr/ping/pong.txt pode ser achado com *ong*
popover_custom_regex_check_button_entry_tooltip =
Permite selecionar registros por Regex especificado.
Selecionar registros por Regex especificada.
Com este modo, o texto pesquisado é o caminho com Nome.
Com este modo, o texto buscado é o caminho com o nome.
Exemplo de uso:
/usr/bin/ziemniak. xt pode ser encontrado com /ziem[a-z]+
/usr/bin/ziemniak.txt pode ser achado com /ziem[a-z]+
Ele usa a implementação regex padrão do Rust. Você pode ler mais sobre isso aqui: https://docs.rs/regex.
popover_custom_case_sensitive_check_button_tooltip =
Ativa a deteção sensível a maiúsculas e minúsculas.
Isso usa a implementação regex Rust padrão, então você pode ler mais sobre isso em https://docs.rs/regex.
Quando desativado, /home/* acha ambos /HoMe/roman e /home/roman.
popover_custom_not_all_check_button_tooltip =
Impede de selecionar todos os registros no grupo.
Impede a seleção de todo registro no grupo.
Isto é habilitado por padrão, porque na maioria das situações o usuário não quer excluir arquivos originais e duplicados mas quer deixar pelo menos um arquivo.
Isto está ativado por padrão, pois na maioria das situações, você não quer apagar ambos arquivos originais e duplicados, mas quer deixar ao menos um arquivo.
Aviso: Esta configuração não funciona se o usuário já tiver selecionado todos os resultados em grupo manualmente.
AVISO: Esta configuração não funciona se você já selecionou manualmente todos os resultados num grupo.
popover_custom_regex_path_label = Caminho
popover_custom_regex_name_label = Nome
popover_custom_regex_regex_label = Caminho Regex + Nome
popover_custom_all_in_group_label = Não selecionar todos os registros no grupo
popover_custom_mode_unselect = Desmarcar Personalizado
popover_custom_mode_select = Selecionar personalizado
popover_invalid_regex = Regex inválido
popover_valid_regex = Regex é válido
popover_custom_regex_regex_label = Caminho da Regex + nome
popover_custom_case_sensitive_check_button = Sensível a maiúsculas e minúsculas
popover_custom_all_in_group_label = Não selecionar todo registro no grupo
popover_custom_mode_unselect = Desmarcar customizado
popover_custom_mode_select = Selecionar customizado
popover_sort_file_name = Nome do ficheiro
popover_sort_folder_name = Nome da pasta
popover_sort_full_name = Nome Completo
popover_sort_size = Tamanho
popover_sort_selection = Seleção
popover_invalid_regex = Regex inválida
popover_valid_regex = Regex é válida
# Bottom buttons
bottom_search_button = Pesquisa
bottom_search_button = Buscar
bottom_select_button = Selecionar
bottom_delete_button = Excluir
bottom_save_button = Guardar
bottom_symlink_button = Symlink
bottom_hardlink_button = Hardlink
bottom_move_button = Mover-se
bottom_search_button_tooltip = Comece a procurar arquivos/pastas.
bottom_select_button_tooltip = Seleciona registros. Apenas arquivos/pastas selecionadas podem ser processados mais tarde.
bottom_delete_button_tooltip = Excluir arquivos/pastas selecionadas.
bottom_save_button_tooltip = Salvar dados sobre a pesquisa em arquivo
bottom_symlink_button = Ligação simbólica
bottom_hardlink_button = Ligação hardlink
bottom_move_button = Mover
bottom_sort_button = Ordenar
bottom_search_button_tooltip = Iniciar busca
bottom_select_button_tooltip = Selecionar registros. Só arquivos/diretórios selecionados podem ser processados posteriormente.
bottom_delete_button_tooltip = Excluir arquivos/diretórios selecionados.
bottom_save_button_tooltip = Guardar dados sobre a busca em arquivo
bottom_symlink_button_tooltip =
Cria links simbólicos.
Só funciona quando pelo menos 2 resultados no grupo são selecionados.
O primeiro é inalterado e o segundo e mais tarde são associados aos primeiros pontos simbólicos.
Criar ligações simbólicas. Só funciona quando ao menos dois resultados num grupo são selecionados.
O primeiro é inalterado, e no segundo e mais tarde é feita a ligação simbólica para o primeiro.
bottom_hardlink_button_tooltip =
Cria links básicos.
Funciona somente quando pelo menos dois resultados no grupo são selecionados.
O primeiro é inalterado e o segundo e posterior são vinculados ao primeiro.
Criar ligações hardlinks.
Só funciona quando ao menos dois resultados num grupo são selecionados.
O primeiro é inalterado, e no segundo e posterior é feito o hardlink ao primeiro.
bottom_hardlink_button_not_available_tooltip =
Criar ligações hardlinks.
O botão está desativado, pois ligações hardlinks não podem ser criadas.
Hardlinks só funcionam com privilégios de administrador no Windows, logo, certifique-se de executar o aplicativo como administrador.
Se o aplicativo já funciona com tais privilégios, verifique se há questões semelhantes no GitHub.
bottom_move_button_tooltip =
Move os arquivos para a pasta escolhida.
Ele copia todos os arquivos para a pasta sem preservar a árvore de diretório.
Quando tentar mover 2 arquivos com nome idêntico para a pasta, a segunda irá falhar e mostrar erro.
bottom_show_errors_tooltip = Mostrar/ocultar painel de erros inferior.
bottom_show_upper_notebook_tooltip = Mostrar/ocultar painel superior do caderno.
Move arquivos para o diretório escolhido.
Ele copia todos os arquivos para o diretório sem preservar a árvore de diretório.
Ao tentar mover dois arquivos com nome idêntico para o diretório, a segunda falhará e exibirá um erro.
bottom_sort_button_tooltip = Ordena arquivos/pastas de acordo com o método selecionado.
bottom_show_errors_tooltip = Exibir/ocultar painel de texto inferior.
bottom_show_upper_notebook_tooltip = Exibir/ocultar painel superior do caderno.
# Progress Window
progress_stop_button = Interromper
progress_stop_button = Parar
progress_stop_additional_message = Parada pedida
# About Window
about_repository_button_tooltip = Link para a página do repositório com o código-fonte.
about_donation_button_tooltip = Link para a página de doação.
about_instruction_button_tooltip = Link para a página de instrução.
about_translation_button_tooltip = Link para a página do Crowdin com traduções do aplicativo. Oficialmente polonês e inglês são suportados, mas qualquer ajuda com outro idioma será apreciada.
about_translation_button_tooltip = Link para a página do Crowdin com traduções do aplicativo. Oficialmente, polonês e inglês são suportados.
about_repository_button = Repositório
about_donation_button = Doação
about_instruction_button = Instrução
@ -209,196 +283,214 @@ header_about_button_tooltip = Abre diálogo com informações sobre o aplicativo
## General
settings_save_at_exit_button_tooltip = Salva a configuração no arquivo quando fechar o app.
settings_number_of_threads = Número de threads usadas
settings_number_of_threads_tooltip = Numero de thread usadas. Zero significa que toda thread disponível será usada.
settings_label_restart = Você tem de reiniciar o aplicativo para aplicar as configurações!
settings_ignore_other_filesystems = Ignorar outros sistemas de arquivos (só Linux)
settings_ignore_other_filesystems_tooltip =
Ignora arquivos que não estão no mesmo sistema de arquivos que os diretórios buscados.
Funciona como a opção -xdev no comando find no Linux
settings_save_at_exit_button_tooltip = Guardar configuração em arquivo ao fechar o aplicativo.
settings_load_at_start_button_tooltip =
Carregando ao iniciar a configuração do arquivo.
Não selecionar esta opção carregará as configurações padrão.
settings_confirm_deletion_button_tooltip = Mostra o diálogo de confirmação quando clicar no botão excluir.
settings_confirm_link_button_tooltip = Mostra o diálogo de confirmação quando clicar no botão hard/simbólico.
settings_confirm_group_deletion_button_tooltip = Mostra a caixa de diálogo ao tentar remover todos os registros do grupo.
settings_show_text_view_button_tooltip = Mostra o painel de erros embaixo.
settings_use_cache_button_tooltip = Opção para a qual não permite usar o recurso de cache.
settings_save_also_as_json_button_tooltip = Salve o cache para ser legível pelo formato JSON humano. É possível modificar seu conteúdo. Cache deste arquivo será lido automaticamente pelo aplicativo se o cache de formato binário (com extensão bin) estiver faltando.
settings_use_trash_button_tooltip = Quando ativado, ele move os arquivos para a lixeira em vez de excluí-los permanentemente.
settings_language_label_tooltip = Permite escolher o idioma da interface dos disponíveis.
settings_save_at_exit_button = Salvar configuração ao sair
settings_load_at_start_button = Carregar configuração no início
settings_confirm_deletion_button = Mostrar diálogo de confirmação quando apagar qualquer arquivo
settings_confirm_link_button = Mostrar a caixa de diálogo de confirmação quando vincular qualquer arquivo
settings_confirm_group_deletion_button = Mostrar diálogo de confirmação quando apagar todos os arquivos no grupo
settings_show_text_view_button = Mostrar painel de texto inferior
Carregar configuração do arquivo ao abrir aplicativo.
Se não estiver ativado, as configurações padrão serão usadas.
settings_confirm_deletion_button_tooltip = Exibir diálogo de confirmação ao clicar no botão excluir.
settings_confirm_link_button_tooltip = Exibir diálogo de confirmação ao clicar no botão de ligação hardlink/simbólica.
settings_confirm_group_deletion_button_tooltip = Exibir caixa de diálogo de aviso ao tentar excluir todo registro do grupo.
settings_show_text_view_button_tooltip = Exibir painel de texto na parte inferior da interface do usuário.
settings_use_cache_button_tooltip = Usar cache de arquivos.
settings_save_also_as_json_button_tooltip = Salvar cache no formato JSON (legível por humanos). É possível modificar o seu conteúdo. O cache deste arquivo será lido automaticamente pelo aplicativo se o cache de formato binário (com extensão bin) estiver faltando.
settings_use_trash_button_tooltip = Move arquivos para a lixeira em vez de os excluir para sempre.
settings_language_label_tooltip = Idioma para a interface de usuário.
settings_save_at_exit_button = Guardar configuração ao fechar o aplicativo
settings_load_at_start_button = Carregar configuração ao abrir o aplicativo
settings_confirm_deletion_button = Exibir diálogo de confirmação ao excluir qualquer arquivo
settings_confirm_link_button = Exibir a caixa de diálogo de confirmação ao fazer a ligação hardlink/simbólica de qualquer arquivo
settings_confirm_group_deletion_button = Exibir diálogo de confirmação ao apagar todo arquivo no grupo
settings_show_text_view_button = Exibir painel de texto inferior
settings_use_cache_button = Usar cache
settings_save_also_as_json_button = Salvar o cache também em arquivo JSON
settings_use_trash_button = Mover os arquivos apagados para a lixeira
settings_save_also_as_json_button = Também guardar o cache como arquivo JSON
settings_use_trash_button = Mover os arquivos excluídos para a lixeira
settings_language_label = Idioma
settings_multiple_delete_outdated_cache_checkbutton = Excluir entradas de cache desatualizadas automaticamente
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
Permite excluir os resultados de cache desatualizados que apontam para arquivos inexistentes.
Excluir resultados de cache desatualizados que apontam para arquivos inexistentes.
Quando ativado, o aplicativo garante ao carregar os registros, que todos apontam para arquivos válidos e ignoram arquivos quebrados.
Quando ativado, o aplicativo garante que ao carregar os registros, todos os registros apontem para arquivos válidos (aqueles com problemas são ignorados).
Desativar esta opção, ajudará a escanear arquivos em unidades externas, então as entradas de cache sobre eles não serão removidas na próxima verificação.
Desativar isto ajudará ao escanear arquivos em unidades externas, então as entradas de cache sobre eles não serão removidas na próxima verificação.
No caso de ter centenas de milhares de registros no cache, é sugerido para ativar esta opção, para acelerar o carregamento e salvamento do cache no início e fim do escaneamento.
settings_notebook_general = Gerais
No caso de ter centenas de milhares de registros no cache, é sugerido ativar isto, o que acelerará o carregamento/armazenamento de cache/salvamento no início/fim do escaneamento.
settings_notebook_general = Geral
settings_notebook_duplicates = Duplicados
settings_notebook_images = Imagens Semelhantes
settings_notebook_videos = Vídeo similar
settings_notebook_images = Imagens semelhantes
settings_notebook_videos = Vídeo semelhante
## Multiple - settings used in multiple tabs
settings_multiple_image_preview_checkbutton_tooltip = Mostrar pré-visualização no lado direito, ao selecionar o arquivo de imagem.
settings_multiple_image_preview_checkbutton = Mostrar pré-visualização da imagem
settings_multiple_image_preview_checkbutton_tooltip = Exibe pré-visualização no lado direito (ao selecionar um arquivo de imagem).
settings_multiple_image_preview_checkbutton = Exibir pré-visualização da imagem
settings_multiple_clear_cache_button_tooltip =
Limpar cache manualmente a partir de entradas desatualizadas.
Deve ser usado apenas se a limpeza automática foi desativada.
settings_multiple_clear_cache_button = Remover resultados desatualizados do cache de imagens
Limpar manualmente o cache de entradas desatualizadas.
Isto só deve ser usado se a limpeza automática houver sido desativada.
settings_multiple_clear_cache_button = Remover resultados desatualizados do cache.
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
Oculta todos os arquivos com exceção de um, se for apontado para os mesmos dados (são linkados).
Oculta todos os arquivos, exceto um, se todos apontarem para os mesmos dados (são ligados por hardlink).
Por exemplo, no caso de quando em disco existirem 7 arquivos que são vinculados a dados específicos e um arquivo diferente com os mesmos dados, mas com informações diferentes, então no localizador duplicado será visível apenas um arquivo exclusivo e um arquivo de links robustos.
Exemplo: No caso de existirem (em disco) sete arquivos que são vinculados por hardlink a dados específicos e um arquivo diferente com os mesmos dados, mas um inode diferente, em seguida no achador de duplicatas, só um arquivo único e um arquivo dos que foi feita a ligação hardlink serão exibidos.
settings_duplicates_minimal_size_entry_tooltip =
Permite definir o tamanho mínimo de arquivo que será armazenado em cache.
Definir o tamanho mínimo do arquivo que será armazenado em cache.
Escolhendo um valor menor, gerará mais registros que acelerarão a pesquisa, mas desacelerará o carregamento/salvamento do cache.
Escolher um valor menor gerará mais registros. Isto acelerará a busca, mas diminuirá o carregamento/armazenamento do cache.
settings_duplicates_prehash_checkbutton_tooltip =
Habilita o cache de prehash (hash calculado a partir de uma pequena parte do arquivo), o que permite o lançamento anterior não duplicado de resultados.
Permite o cache de pré-hash (um hash calculado a partir duma pequena parte do arquivo) que permite a demissão de resultados não duplicados anteriormente.
Isto está desabilitado por padrão porque pode causar lentidões em algumas situações.
Está desativado por padrão, pois pode causar lentidões nalguns casos.
É altamente recomendado usá-lo durante o escaneamento de centenas de milhares de arquivos ou milhões, porque pode acelerar a busca várias vezes.
É altamente recomendado o usar ao escanear centenas de milhares ou milhões de arquivos, pois pode acelerar a pesquisa em várias vezes.
settings_duplicates_prehash_minimal_entry_tooltip = Tamanho mínimo da entrada em cache.
settings_duplicates_hide_hard_link_button = Ocultar links rígidos (apenas Linux e MacOS)
settings_duplicates_hide_hard_link_button = Ocultar ligações hardlink (só Linux e macOS)
settings_duplicates_prehash_checkbutton = Usar cache de pré-hash
settings_duplicates_minimal_size_cache_label = Tamanho mínimo de arquivos em bytes salvos no cache
settings_duplicates_minimal_size_cache_prehash_label = Tamanho mínimo de arquivos em bytes salvos no cache de pré-hash
settings_duplicates_minimal_size_cache_label = Tamanho mínimo dos arquivos (em bytes) guardados no cache
settings_duplicates_minimal_size_cache_prehash_label = Tamanho mínimo dos arquivos (em bytes) guardados no cache de pré-hash
## Saving/Loading settings
settings_saving_button_tooltip = Salvar as configurações atuais no arquivo.
settings_saving_button_tooltip = Guardar as configurações atuais em arquivo.
settings_loading_button_tooltip = Carregar configurações de arquivo e substituir a configuração atual por elas.
settings_reset_button_tooltip = Redefinir configuração atual para padrão.
settings_saving_button = Salvar configuração
settings_reset_button_tooltip = Redefinir a configuração atual para a padrão.
settings_saving_button = Guardar configuração
settings_loading_button = Carregar configuração
settings_reset_button = Redefinir configuração
## Opening cache/config folders
settings_folder_cache_open_tooltip =
Abre a pasta onde são armazenados arquivos txt com cache.
Abre o diretório onde os arquivos txt são armazenados.
Modificá-los pode causar a exibição de resultados inválidos, mas também modificar.. O caminho pode economizar tempo ao mover uma grande quantidade de arquivos para um lugar diferente.
Modificar os arquivos de cache pode fazer com que resultados inválidos sejam exibidos. Porém, modificar o caminho pode economizar tempo ao mover uma grande quantidade de arquivos para um local diferente.
Você pode copiar este arquivo entre computadores para economizar tempo ao verificar novamente por arquivos (é claro que se eles tiverem uma estrutura de diretório semelhante).
Você pode copiar esses arquivos entre computadores para economizar tempo em outra verficação de arquivos (claro, se eles tiverem uma estrutura de diretórios semelhante).
Em caso de problemas com o cache, estes arquivos podem ser removidos, então a aplicação irá regenerá-los automaticamente.
No caso de problemas com o cache, esses arquivos podem ser removidos. O aplicativo os regenerará automaticamente.
settings_folder_settings_open_tooltip =
Abre uma pasta onde a configuração do Czkawka está armazenada.
Abre o diretório onde a configuração do Czkawka está armazenada.
Modificá-los por mão, pode causar ruptura no seu fluxo de trabalho.
settings_folder_cache_open = Abrir pasta cache
settings_folder_settings_open = Abrir pasta de configurações
AVISO: Modificar manualmente a configuração pode quebrar seu fluxo de trabalho.
settings_folder_cache_open = Abrir diretório do cache
settings_folder_settings_open = Abrir diretório de configurações
# Compute results
compute_stopped_by_user = A pesquisa foi interrompida pelo usuário
compute_found_duplicates_hash_size = Encontrados { $number_files } duplicados em { $number_groups } grupos que se tiveram { $size }
compute_found_duplicates_name = Encontrado { $number_files } duplicados em { $number_groups } grupos
compute_found_empty_folders = Encontradas { $number_files } pastas vazias
compute_found_empty_files = Encontrado { $number_files } arquivos vazios
compute_found_big_files = Encontrado { $number_files } arquivos grandes
compute_found_temporary_files = Encontrado { $number_files } arquivos temporários
compute_found_images = Encontrado { $number_files } imagens similares em { $number_groups } grupos
compute_found_videos = Encontrados { $number_files } vídeos similares em { $number_groups } grupos
compute_found_music = Encontrado { $number_files } arquivos de música similares em { $number_groups } grupos
compute_found_invalid_symlinks = Encontrado { $number_files } links simbólicos inválidos
compute_found_broken_files = Encontrado { $number_files } arquivos quebrados
compute_stopped_by_user = A busca foi parada pelo usuário
compute_found_duplicates_hash_size = Achadas { $number_files } duplicatas em { $number_groups } grupos que levaram { $size }
compute_found_duplicates_name = Achadas { $number_files } duplicatas em { $number_groups } grupos
compute_found_empty_folders = Achados { $number_files } diretórios vazios
compute_found_empty_files = Achados { $number_files } arquivos vazios
compute_found_big_files = Achados { $number_files } arquivos grandes
compute_found_temporary_files = Achados { $number_files } arquivos temporários
compute_found_images = Achadas { $number_files } imagens similares em { $number_groups } grupos
compute_found_videos = Achados { $number_files } vídeos similares em { $number_groups } grupos
compute_found_music = Achados { $number_files } arquivos de música similares em { $number_groups } grupos
compute_found_invalid_symlinks = Achadas { $number_files } ligações simbólicas inválidas
compute_found_broken_files = Achados { $number_files } arquivos quebrados
compute_found_bad_extensions = Achados { $number_files } arquivos com extensões inválidas
# Progress window
progress_scanning_general_file = Escaneando { $file_number } arquivo
progress_scanning_extension_of_files = Verificando extensão de { $file_checked }/{ $all_files } de arquivo
progress_scanning_broken_files = Verificando { $file_checked }/{ $all_files } arquivo
progress_scanning_video = Hashing de { $file_checked }/{ $all_files } vídeo
progress_scanning_image = Hashing de { $file_checked }/{ $all_files } imagem
progress_comparing_image_hashes = Comparação de { $file_checked }/{ $all_files } hash de imagem
progress_scanning_music_tags_end = Comparar etiquetas de { $file_checked }/{ $all_files } arquivo de música
progress_scanning_video = Hash de { $file_checked }/{ $all_files } vídeo
progress_scanning_image = Hash de { $file_checked }/{ $all_files } imagem
progress_comparing_image_hashes = Comparando de { $file_checked }/{ $all_files } hash de imagem
progress_scanning_music_tags_end = Comparando etiquetas de { $file_checked }/{ $all_files } arquivo de música
progress_scanning_music_tags = Lendo etiquetas de { $file_checked }/{ $all_files } arquivo de música
progress_scanning_empty_folders = Verificando { $folder_number } pasta
progress_scanning_music_content_end = Comparação de impressão digital de { $file_checked }/{ $all_files } arquivo de música
progress_scanning_music_content = Calculando impressão digital de { $file_checked }/{ $all_files } arquivo de música
progress_scanning_empty_folders = Verificando { $folder_number } diretório
progress_scanning_size = Verificando tamanho de { $file_number } arquivo
progress_scanning_size_name = Verificando nome e tamanho de { $file_number } arquivo
progress_scanning_name = Verificando nome de { $file_number } arquivo
progress_analyzed_partial_hash = Hash parcial analisado de { $file_checked }/{ $all_files } arquivos
progress_analyzed_full_hash = Hash completo analisado de { $file_checked }/{ $all_files } arquivos
progress_prehash_cache_loading = Carregando cache de pré-hash
progress_prehash_cache_saving = Salvando cache pré-hash
progress_hash_cache_loading = Carregando cache de hash
progress_hash_cache_saving = Salvando cache de hash
progress_cache_loading = Carregando cache
progress_cache_saving = Salvando cache
progress_current_stage = Estágio atual:{ " " }
progress_all_stages = Todos os Stages:{ " " }
progress_all_stages = Todo estágio:{ " " }
# Saving loading
saving_loading_saving_success = Configuração salva no arquivo { $name }.
saving_loading_saving_failure = Falha ao salvar dados de configuração no arquivo { $name }.
saving_loading_saving_success = Configuração guardada no arquivo { $name }.
saving_loading_saving_failure = Falha ao guardar dados de configuração no arquivo { $name }.
saving_loading_reset_configuration = A configuração atual foi limpa.
saving_loading_loading_success = Configuração de aplicativo carregada adequadamente.
saving_loading_invalid_string = Para a chave "{ $key }" encontrou um resultado inválido - "{ $result }" que não é uma string.
saving_loading_invalid_int = Para a chave "{ $key }" encontrou um resultado inválido - "{ $result }" que não é um inteiro.
saving_loading_invalid_bool = Para a chave "{ $key }" encontrou um resultado inválido - "{ $result }" que não é um bool.
saving_loading_decode_problem_bool = Falha ao decodificar o bool da chave "{ $key }" encontrado "{ $result }" mas valores permitidos são 0, 1, verdadeiro ou falso.
saving_loading_saving_same_keys = Tentando salvar a configuração com chave duplicada "{ $key }".
saving_loading_failed_to_get_home_directory = Falha ao obter o diretório inicial para abrir/salvar o arquivo de configuração.
saving_loading_folder_config_instead_file = Não é possível criar ou abrir o arquivo de configuração no caminho "{ $path }" porque já existe uma pasta.
saving_loading_failed_to_create_configuration_folder = Falha ao criar a pasta de configuração "{ $path }", reason "{ $reason }".
saving_loading_failed_to_create_config_file = Falha ao criar o arquivo de configuração "{ $path }", reason "{ $reason }".
saving_loading_failed_to_read_config_file = Não foi possível carregar a configuração a partir de "{ $path }" porque não existe ou não é um arquivo.
saving_loading_failed_to_read_data_from_file = Não é possível ler dados do arquivo "{ $path }", reason "{ $reason }".
saving_loading_orphan_data = Dados órfãos encontrados "{ $data }" na linha "{ $line }".
saving_loading_not_valid = Definindo "{ $data }" não existe na versão atual do aplicativo.
saving_loading_loading_success = Configuração de aplicativo devidamente carregada.
saving_loading_invalid_string = Para a chave "{ $key }" foi achado um resultado inválido — "{ $result }" que não é uma string.
saving_loading_invalid_int = Para a chave "{ $key }" foi achado um resultado inválido — "{ $result }" que não é um inteiro.
saving_loading_invalid_bool = Para a chave "{ $key }" foi achado um resultado inválido — "{ $result }" que não é um bool.
saving_loading_decode_problem_bool = Falha ao decodificar o bool da chave "{ $key }" achado "{ $result }", mas valores permitidos são 0, 1, verdadeiro ou falso.
saving_loading_saving_same_keys = Tentando guardar a configuração com chave duplicada "{ $key }".
saving_loading_failed_to_get_home_directory = Falha ao obter o diretório inicial para abrir/guardar o arquivo de configuração.
saving_loading_folder_config_instead_file = Não se pode criar ou abrir o arquivo de configuração no caminho "{ $path }", pois já existe um diretório.
saving_loading_failed_to_create_configuration_folder = Falha ao criar o diretório de configuração "{ $path }", razão "{ $reason }".
saving_loading_failed_to_create_config_file = Falha ao criar o arquivo de configuração "{ $path }", razão "{ $reason }".
saving_loading_failed_to_read_config_file = Não se pode carregar a configuração de "{ $path }", pois ela não existe ou não é um arquivo.
saving_loading_failed_to_read_data_from_file = Não se pode ler dados do arquivo "{ $path }", razão "{ $reason }".
saving_loading_orphan_data = Dados órfãos achados "{ $data }" na linha "{ $line }".
saving_loading_not_valid = A configuração "{ $data }" não existe na versão atual do aplicativo.
# Invalid symlinks
invalid_symlink_infinite_recursion = Infinito recursão
invalid_symlink_non_existent_destination = Arquivo de destino inexistente
invalid_symlink_infinite_recursion = Recursão infinita
invalid_symlink_non_existent_destination = Arquivo de destino não existe
# Other
searching_for_data = Procurando dados, pode demorar um pouco, por favor, aguarde...
text_view_messages = MENSAGEM
text_view_warnings = ATENÇÕES
selected_all_reference_folders = Não se pode iniciar a busca quando todo diretório está definido como pasta de referência
searching_for_data = Buscando dados, pode demorar um pouco, aguarde...
text_view_messages = MENSAGENS
text_view_warnings = AVISOS
text_view_errors = ERROS
about_window_motto = Este programa é gratuito para o uso e sempre será.
# Various dialog
dialogs_ask_next_time = Perguntar da próxima vez
delete_file_failed = Falha ao remover o arquivo { $name }, razão { $reason }
dialogs_ask_next_time = Perguntar na próxima vez
delete_file_failed = Falha ao excluir o arquivo { $name }, razão { $reason }
delete_title_dialog = Confirmação de exclusão
delete_question_label = Tem certeza de que deseja excluir arquivos?
delete_all_files_in_group_title = Confirmação de excluir todos os arquivos no grupo
delete_all_files_in_group_label1 = Em alguns grupos há registros selecionados.
delete_all_files_in_group_label2 = Tem certeza que deseja apagá-los?
delete_folder_failed = Falha ao remover a pasta { $dir } porque a pasta não existe, você não tem permissões ou não está vazia.
delete_items_label = { $items } arquivos serão removidos.
delete_items_groups_label = { $items } arquivos de { $groups } grupos serão removidos.
hardlink_failed = Falha no hardlink
delete_question_label = Tem certeza de que quer excluir arquivos?
delete_all_files_in_group_title = Confirmação da exclusão de todo arquivo no grupo
delete_all_files_in_group_label1 = Em alguns grupos todo registro está selecionado.
delete_all_files_in_group_label2 = Tem certeza de que quer os excluir?
delete_folder_failed = Falha ao excluir a pasta { $dir }, pois a pasta não existe, você não tem permissão ou a pasta não está vazia.
delete_items_label = { $items } arquivos serão excluídos.
delete_items_groups_label = { $items } arquivos de { $groups } grupos serão excluídos.
hardlink_failed = Falha na ligação
hard_sym_invalid_selection_title_dialog = Seleção inválida com alguns grupos
hard_sym_invalid_selection_label_1 = Em alguns grupos há apenas 1 registro selecionado e será ignorado.
hard_sym_invalid_selection_label_2 = Para poder hard/sym vincular esses arquivos, pelo menos 2 resultados no grupo precisam ser selecionados.
hard_sym_invalid_selection_label_3 = O primeiro no grupo é reconhecido como original e não é alterado, mas o segundo e mais tarde são modificados.
hard_sym_invalid_selection_label_1 = Em alguns grupos só há um registro selecionado e ele será ignorado.
hard_sym_invalid_selection_label_2 = Para poder ligar estes arquivos, ao menos dois resultados no grupo têm de ser selecionados.
hard_sym_invalid_selection_label_3 = O primeiro no grupo é reconhecido como original e não é mudado, mas o segundo e posterior são modificados.
hard_sym_link_title_dialog = Link de confirmação
hard_sym_link_label = Tem certeza que deseja vincular este arquivo?
hard_sym_link_label = Tem certeza de que quer vincular estes arquivos?
move_folder_failed = Falha ao mover a pasta { $name }, razão { $reason }
move_file_failed = Falha ao mover o arquivo { $name }, razão { $reason }
move_files_title_dialog = Escolha a pasta para a qual você deseja mover arquivos duplicados
move_files_choose_more_than_1_path = Apenas 1 caminho deve ser selecionado para poder copiar arquivos duplicados, selecionado { $path_number }.
move_files_title_dialog = Escolha a pasta para a qual você quer mover arquivos duplicados
move_files_choose_more_than_1_path = Só um caminho pode ser selecionado para poder copiar seus arquivos duplicados, selecionado { $path_number }.
move_stats = Devidamente movidos { $num_files }/{ $all_files } itens
save_results_to_file = Resultados salvos no arquivo { $name }
search_not_choosing_any_music = ERRO: Você deve selecionar pelo menos uma caixa de seleção com tipos de busca de música.
save_results_to_file = Resultados salvos tanto para arquivos txt quanto json na pasta { $name }.
search_not_choosing_any_music = ERRO: Você deve selecionar ao menos uma caixa de seleção com tipos de busca de música.
search_not_choosing_any_broken_files = ERRO: Você deve selecionar ao menos uma caixa de seleção com tipo de arquivos quebrados.
include_folders_dialog_title = Pastas para incluir
exclude_folders_dialog_title = Pastas para excluir
include_manually_directories_dialog_title = Adicionar diretório manualmente
cache_properly_cleared = Cache devidamente limpo
cache_clear_duplicates_title = Limpando cache duplicados
cache_clear_similar_images_title = Limpando cache de imagens similares
cache_clear_similar_videos_title = Limpando cache de vídeos similares
cache_clear_message_label_1 = Você deseja limpar o cache de entradas desatualizadas?
cache_clear_message_label_2 = Esta operação removerá todas as entradas de cache que apontam para arquivos inválidos.
cache_clear_message_label_3 = Isso pode acelerar um pouco o carregamento/salvamento para o cache.
cache_clear_message_label_4 = AVISO: Operação irá remover todos os dados em cache de unidades externas desconectadas, então o hash precisará ser gerado novamente.
cache_clear_duplicates_title = Limpando o cache de duplicatas
cache_clear_similar_images_title = Limpando o cache de imagens similares
cache_clear_similar_videos_title = Limpando o cache de vídeos similares
cache_clear_message_label_1 = Quer limpar o cache de entradas desatualizadas?
cache_clear_message_label_2 = Esta operação removerá toda entrada de cache que aponta para arquivos inválidos.
cache_clear_message_label_3 = Isto pode acelerar um pouco o carregamento/salvamento para o cache.
cache_clear_message_label_4 = AVISO: A operação removerá todo dado em cache de unidades externas desconectadas. Logo, cada hash terá de ser regenerado.
# Show preview
preview_temporary_file = Falha ao abrir o arquivo de imagem temporário { $name }, reason { $reason }.
preview_0_size = Não é possível criar pré-visualização da imagem { $name }, com 0 de largura ou altura.
preview_temporary_image_save = Falha ao salvar o arquivo de imagem temporário para { $name }, reason { $reason }.
preview_temporary_image_remove = Falha ao excluir o arquivo de imagem temporária { $name }, reason { $reason }.
preview_failed_to_create_cache_dir = Falha ao criar o diretório { $name } necessário para a pré-visualização da imagem, razão { $reason }.
preview_image_resize_failure = Falha ao redimensionar a imagem { $name }.
preview_image_opening_failure = Falha ao abrir a imagem { $name }, razão { $reason }
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = Grupo { $current_group }/{ $all_groups } ({ $images_in_group } imagens)
compare_move_left_button = L

@ -0,0 +1,500 @@
# Window titles
window_settings_title = Setări
window_main_title = Czkawka (Hiccup)
window_progress_title = Scanare
window_compare_images = Compară imaginile
# General
general_ok_button = Ok
general_close_button = Inchide
# Main window
music_title_checkbox = Titlu
music_artist_checkbox = Artist
music_year_checkbox = An
music_bitrate_checkbox = Bitrate
music_genre_checkbox = Gen
music_length_checkbox = Lungime
music_comparison_checkbox = Comparație aproximativă
music_checking_by_tags = Etichete
music_checking_by_content = Conținut
same_music_seconds_label = Fragment minim a doua durată
same_music_similarity_label = Diferența maximă
same_music_tooltip =
Căutarea fişierelor muzicale similare după conţinutul său poate fi configurată prin setarea:
- Timpul minim de fragment după care fişierele muzicale pot fi identificate ca fiind similare
- Diferenţa maximă între două fragmente testate
Cheia pentru rezultate bune este de a găsi combinaţii rezonabile ale acestor parametri, pentru furnizare.
Setarea timpului minim la 5 s și diferența maximă la 1.0, va căuta fragmente aproape identice în fișiere.
O perioadă de 20 de ani și o diferență maximă de 6,0, pe de altă parte, funcționează bine pentru a găsi remixuri/versiuni live etc.
În mod implicit, fiecare fișier muzical este comparat unul cu altul și acest lucru poate dura mult timp când testezi mai multe fișiere, astfel încât este de obicei mai bine să se utilizeze dosare de referință și să se precizeze care fișiere trebuie comparate între ele (cu același volum de fișiere; compararea amprentelor digitale va fi mai rapidă de cel puțin 4x decât fără dosare de referință).
music_comparison_checkbox_tooltip =
Caută fișiere muzicale similare folosind AI, care folosește învățarea mașinăriei pentru a elimina paranteze dintr-o frază. De exemplu, cu această opțiune activată, fișierele în cauză vor fi considerate duplicate:
Remix Lato 2021)
duplicate_case_sensitive_name = Sensibil la caz
duplicate_case_sensitive_name_tooltip =
Când este activată, grupul înregistrează doar atunci când are exact același nume, de ex. Trunchiul <-> Z<unk> ołd
Dezactivarea acestei opțiuni va grupa numele fără a verifica dacă fiecare literă are aceeași mărime, de ex. z<unk> oŁD <-> Z<unk> ołd
duplicate_mode_size_name_combo_box = Dimensiune și nume
duplicate_mode_name_combo_box = Nume
duplicate_mode_size_combo_box = Dimensiune
duplicate_mode_hash_combo_box = Hash
duplicate_hash_type_tooltip =
Czkawka oferă 3 tipuri de hash-uri:
Blake3 - funcţie criptografică hash. Acesta este implicit pentru că este foarte rapid.
CRC32 - funcţia simplă de hash. Acest lucru ar trebui să fie mai rapid decât Blake3, dar foarte rar poate avea unele coliziuni.
XXH3 - foarte asemănător din punct de vedere al performanței și al calității hash-ului cu Blake3 (dar non-criptografic). Astfel de moduri pot fi ușor interschimbate.
duplicate_check_method_tooltip =
Deocamdată, Czkawka oferă trei tipuri de metode pentru a găsi duplicate după:
Nume - Găseşte fişiere care au acelaşi nume.
Dimensiune - Găseşte fişiere cu aceeaşi dimensiune.
Hash - Găseşte fişiere care au acelaşi conţinut. Acest mod hashează fişierul şi mai târziu compară acest hash pentru a găsi duplicate. Acest mod este cel mai sigur mod de a găsi duplicate. Aplicaţiile folosesc foarte mult cache, astfel încât scanările de la secundă şi mai departe ale aceloraşi date ar trebui să fie mult mai rapide decât primul.
image_hash_size_tooltip =
Fiecare imagine verificată produce un hash special, care poate fi comparat între ele, si o diferenta mica intre ele inseamna ca aceste imagini sunt similare.
dimensiunea de 8 hash este destul de bună pentru a găsi imagini care sunt doar puţin similare cu originalul. Cu un set mai mare de imagini (>1000), acesta va produce o cantitate mare de fals pozitiv, Aşa că vă recomand să utilizaţi o mărime mai mare de hash în acest caz.
16 este dimensiunea implicită a hash-ului care este un compromis destul de bun între a găsi chiar și imagini similare și a avea doar o mică coliziune a hash-ului.
32 și 64 de hash-uri găsesc doar imagini foarte similare, dar nu ar trebui să aibă aproape nicio poziție falsă (poate cu excepția unor imagini cu un canal alfa).
image_resize_filter_tooltip =
Pentru a calcula hash of imagine, biblioteca trebuie mai întâi să o redimensioneze.
În funcție de algoritmul ales, imaginea rezultată folosită pentru a calcula hash va arăta puțin diferit.
Cel mai rapid algoritm de utilizat, dar şi cel care dă cele mai slabe rezultate, este Nearest. Acesta este activat în mod implicit, deoarece cu dimensiunea de 16x16 a hash-ului este de calitate mai mică decât cea vizibilă.
Cu dimensiunea hash de 8x8 este recomandat să se folosească un algoritm diferit de Nearest, pentru a avea grupuri mai bune de imagini.
image_hash_alg_tooltip =
Utilizatorii pot alege unul dintre multele algoritmi de calculare a hash-ului.
Fiecare are atât puncte puternice, cât şi puncte mai slabe şi va da uneori rezultate mai bune şi uneori mai proaste pentru imagini diferite.
Deci, pentru a determina cel mai bun dintre voi, este necesară testarea manuală.
big_files_mode_combobox_tooltip = Permite căutarea celor mai mici/mai mari fişiere
big_files_mode_label = Fișiere verificate
big_files_mode_smallest_combo_box = Cel mai mic
big_files_mode_biggest_combo_box = Miggest
main_notebook_duplicates = Fișiere duplicate
main_notebook_empty_directories = Dosare goale
main_notebook_big_files = Fișiere mari
main_notebook_empty_files = Fișiere goale
main_notebook_temporary = Fișiere temporare
main_notebook_similar_images = Imagini similare
main_notebook_similar_videos = Video similare
main_notebook_same_music = Duplicate Muzică
main_notebook_symlinks = Simboluri invalide
main_notebook_broken_files = Fișiere defecte
main_notebook_bad_extensions = Extensii rele
main_tree_view_column_file_name = Numele fișierului
main_tree_view_column_folder_name = Nume folder
main_tree_view_column_path = Cale
main_tree_view_column_modification = Data modificării
main_tree_view_column_size = Dimensiune
main_tree_view_column_similarity = Similaritate
main_tree_view_column_dimensions = Dimensiuni
main_tree_view_column_title = Titlu
main_tree_view_column_artist = Artist
main_tree_view_column_year = An
main_tree_view_column_bitrate = Bitrate
main_tree_view_column_length = Lungime
main_tree_view_column_genre = Gen
main_tree_view_column_symlink_file_name = Numele fișierului Symlink
main_tree_view_column_symlink_folder = Dosar Symlink
main_tree_view_column_destination_path = Calea destinației
main_tree_view_column_type_of_error = Tip de eroare
main_tree_view_column_current_extension = Extensia curentă
main_tree_view_column_proper_extensions = Extensie corectă
main_label_check_method = Metoda de verificare
main_label_hash_type = Tip hash
main_label_hash_size = Dimensiune hash
main_label_size_bytes = Dimensiune (octeți)
main_label_min_size = Minim
main_label_max_size = Maxim
main_label_shown_files = Numărul de fișiere afișate
main_label_resize_algorithm = Redimensionare algoritm
main_label_similarity = Similarity{ " " }
main_check_box_broken_files_audio = Audio
main_check_box_broken_files_pdf = Pdf
main_check_box_broken_files_archive = Arhivează
main_check_box_broken_files_image = Imagine
check_button_general_same_size = Ignoră aceeași dimensiune
check_button_general_same_size_tooltip = Ignoră fișierele cu rezultate de dimensiune identică - de obicei, acestea sunt de 1:1 duplicate
main_label_size_bytes_tooltip = Dimensiunea fişierelor care vor fi utilizate în scanare
# Upper window
upper_tree_view_included_folder_column_title = Dosare de căutat
upper_tree_view_included_reference_column_title = Dosare de referință
upper_recursive_button = Recursiv
upper_recursive_button_tooltip = Dacă este selectat, caută și fișiere care nu sunt plasate direct în dosarele alese.
upper_manual_add_included_button = Adăugare manuală
upper_add_included_button = Adăugare
upper_remove_included_button = Elimină
upper_manual_add_excluded_button = Adăugare manuală
upper_add_excluded_button = Adăugare
upper_remove_excluded_button = Elimină
upper_manual_add_included_button_tooltip =
Adăugați numele directorului pentru a căuta manual.
Pentru a adăuga căi multiple simultan, separați-le de ;
/home/roman;/home/rozkaz va adăuga două directoare /home/roman și /home/rozkaz
upper_add_included_button_tooltip = Adăugați un nou director pentru căutare.
upper_remove_included_button_tooltip = Ștergeți directorul de căutare.
upper_manual_add_excluded_button_tooltip =
Adaugă numele folderului exclus manual.
Pentru a adăuga căi multiple simultan, separați-le de ;
/home/roman;/home/krokiet va adăuga două directoare /home/roman și /home/keokiet
upper_add_excluded_button_tooltip = Adauga directorul pentru a fi exclus in cautare.
upper_remove_excluded_button_tooltip = Ştergeţi directorul din excludere.
upper_notebook_items_configuration = Configurare articole
upper_notebook_excluded_directories = Dosare excluse
upper_notebook_included_directories = Dosare incluse
upper_allowed_extensions_tooltip =
Extensiile permise trebuie separate prin virgulă (implicit toate sunt disponibile).
Următoarele macro care adaugă simultan extensii multiple sunt de asemenea disponibile: IMAGE, VIDEO, MUSIC, TEXT.
Foloseste exemplul ".exe, IMAGE, VIDEO, .rar, 7z" - asta inseamna ca imaginile (e. . fișiere jpg, png), videoclipuri (de ex. avi, mp4), exe, rar și 7z vor fi scanate.
upper_excluded_extensions_tooltip =
Lista fişierelor dezactivate care vor fi ignorate în scanare.
La utilizarea extensiilor permise și dezactivate, aceasta are prioritate mai mare, deci fișierul nu va fi verificat.
upper_excluded_items_tooltip =
Elementele excluse trebuie sa contina * wildcard si sa fie separate prin virgule.
Acest lucru este mai lent decat directoarele excluse, asa ca il folositi cu atentie.
upper_excluded_items = Elemente excluse:
upper_allowed_extensions = Extensii permise:
upper_excluded_extensions = Extensii dezactivate:
# Popovers
popover_select_all = Selectează tot
popover_unselect_all = Deselectează tot
popover_reverse = Selectare inversă
popover_select_all_except_oldest = Selectează toate cu excepția celor mai vechi
popover_select_all_except_newest = Selectează toate cu excepția celor noi
popover_select_one_oldest = Selectează unul mai vechi
popover_select_one_newest = Selectaţi unul dintre cele mai noi
popover_select_custom = Selectare particularizată
popover_unselect_custom = Deselectare particularizată
popover_select_all_images_except_biggest = Selectează toate cu excepția celui mai mare
popover_select_all_images_except_smallest = Selectează toate cu excepția celor mici
popover_custom_path_check_button_entry_tooltip =
Selectaţi înregistrările după cale.
Exemplu de utilizare:
/home/pimpek/rzecz.txt poate fi găsit cu /home/pim*
popover_custom_name_check_button_entry_tooltip =
Selectaţi înregistrările cu numele fişierelor.
Exemplu de utilizare:
/usr/ping/pong.txt poate fi găsit cu *ong*
popover_custom_regex_check_button_entry_tooltip =
Selectaţi înregistrările specificate de Regex.
Cu acest mod, textul căutat este calea cu numele.
Exemplu de utilizare:
/usr/bin/ziemniak. xt poate fi găsit cu /ziem[a-z]+
Acest lucru folosește implementările implicite Rust regex. Puteți citi mai multe despre ele aici: https://docs.rs/regex.
popover_custom_case_sensitive_check_button_tooltip =
Activează detectarea cazurilor sensibile.
Când este dezactivat /home/* găsește atât /HoMe/roman cât și /home/roman.
popover_custom_not_all_check_button_tooltip =
Previne selectarea tuturor înregistrărilor din grup.
Aceasta este activată în mod implicit, deoarece în majoritatea situațiilor, nu doriţi să ştergeţi atât fişierele originale, cât şi duplicate, dar doriţi să lăsaţi cel puţin un fişier.
ATENŢIE: Această setare nu funcţionează dacă aţi selectat deja manual toate rezultatele într-un grup.
popover_custom_regex_path_label = Cale
popover_custom_regex_name_label = Nume
popover_custom_regex_regex_label = Cale Regex + Nume
popover_custom_case_sensitive_check_button = Sensibil la caz
popover_custom_all_in_group_label = Nu selectaţi toate înregistrările în grup
popover_custom_mode_unselect = Deselectare particularizată
popover_custom_mode_select = Selectare particularizată
popover_sort_file_name = Nume fișier
popover_sort_folder_name = Nume dosar
popover_sort_full_name = Numele complet
popover_sort_size = Dimensiune
popover_sort_selection = Selecţie
popover_invalid_regex = Regex nu este valid
popover_valid_regex = Regex este valid
# Bottom buttons
bottom_search_button = Caută
bottom_select_button = Selectare
bottom_delete_button = Ștergere
bottom_save_button = Salvează
bottom_symlink_button = Symlink
bottom_hardlink_button = Hardlink
bottom_move_button = Mutare
bottom_sort_button = Sortează
bottom_search_button_tooltip = Începe căutarea
bottom_select_button_tooltip = Selectaţi înregistrările. Numai fişierele/dosarele selectate pot fi procesate ulterior.
bottom_delete_button_tooltip = Ştergeţi fişierele/dosarele selectate.
bottom_save_button_tooltip = Salvează datele despre căutare în fișier
bottom_symlink_button_tooltip =
Creaţi link-uri simbolice.
Funcţionează numai atunci când cel puţin două rezultate într-un grup sunt selectate.
Prima este neschimbată, iar a doua și mai târziu simpatizează cu primul.
bottom_hardlink_button_tooltip =
Creează link-uri hardware.
Funcţionează numai atunci când cel puţin două rezultate sunt selectate într-un grup.
Prima este neschimbată, iar a doua și mai târziu sunt greu legate mai întâi.
bottom_hardlink_button_not_available_tooltip =
Creează link-uri hardware.
Butonul este dezactivat, deoarece hardlink-urile nu pot fi create.
Legăturile fizice funcționează doar cu privilegii de administrator pe Windows, așa că asigură-te că rulezi aplicația ca administrator.
Dacă aplicația funcționează deja cu astfel de privilegii verificați pentru probleme similare pe Giwhere,
bottom_move_button_tooltip =
Mută fișierele în directorul ales.
Copiază toate fișierele în director fără a păstra directorul arborescent.
Când se încearcă mutarea a două fișiere cu nume identic în folder, al doilea va eșua și va afișa eroarea.
bottom_sort_button_tooltip = Sortează fișierele/dosarele în funcție de metoda selectată.
bottom_show_errors_tooltip = Arată/ascunde panoul de text de jos.
bottom_show_upper_notebook_tooltip = Arată/Ascunde panoul de notebook-uri de sus.
# Progress Window
progress_stop_button = Oprește
progress_stop_additional_message = Oprire solicitată
# About Window
about_repository_button_tooltip = Link către pagina de depozit cu codul sursă.
about_donation_button_tooltip = Link la pagina de donare.
about_instruction_button_tooltip = Link către pagina de instrucțiuni.
about_translation_button_tooltip = Link catre pagina Crowdin cu traducerea aplicatiilor. Oficial, limba poloneza si engleza sunt suportate.
about_repository_button = Depozit
about_donation_button = Donație
about_instruction_button = Instrucțiuni
about_translation_button = Traducere
# Header
header_setting_button_tooltip = Deschide dialogul de setări.
header_about_button_tooltip = Deschide dialogul cu informații despre aplicație.
# Settings
## General
settings_number_of_threads = Numar discutii folosite
settings_number_of_threads_tooltip = Numărul de teme folosite, 0 înseamnă că vor fi folosite toate temele disponibile.
settings_label_restart = Trebuie să reporniți aplicația pentru a aplica setările!
settings_ignore_other_filesystems = Ignorați alte sisteme de fișiere (doar Linux)
settings_ignore_other_filesystems_tooltip =
ignoră fişierele care nu se află în acelaşi sistem de fişiere ca şi directoarele căutate.
Funcţionează la fel ca opţiunea -xdev în găsirea comenzii în Linux
settings_save_at_exit_button_tooltip = Salvați configurația în fișier la închiderea aplicației.
settings_load_at_start_button_tooltip =
Încarcă configurația din fișier la deschiderea aplicației.
Dacă nu este activată, se vor folosi setările implicite.
settings_confirm_deletion_button_tooltip = Afișați caseta de confirmare când faceți clic pe butonul de ștergere.
settings_confirm_link_button_tooltip = Afișați caseta de confirmare când faceți clic pe butonul hard/symlink.
settings_confirm_group_deletion_button_tooltip = Arată dialogul de avertizare când se încearcă ștergerea tuturor înregistrărilor din grup.
settings_show_text_view_button_tooltip = Arată panoul de text în partea de jos a interfeței utilizatorului.
settings_use_cache_button_tooltip = Foloseşte cache-ul fişierelor.
settings_save_also_as_json_button_tooltip = Salvează cache-ul în formatul JSON (citibil uman). Este posibil să îi modifici conținutul. Geocutia din acest fişier va fi citită automat de aplicaţie dacă nu există geocutie în format binar (cu extensie bin)
settings_use_trash_button_tooltip = Mută fișierele la gunoi în loc să le ștergi definitiv.
settings_language_label_tooltip = Limba interfeței utilizatorului.
settings_save_at_exit_button = Salvați configurația la închiderea aplicației
settings_load_at_start_button = Încarcă configurația la deschiderea aplicației
settings_confirm_deletion_button = Arată dialog de confirmare la ștergerea oricăror fișiere
settings_confirm_link_button = Arată dialog de confirmare atunci când fişierele hard/symlink
settings_confirm_group_deletion_button = Arată dialog de confirmare la ștergerea tuturor fișierelor din grup
settings_show_text_view_button = Arată panoul de text jos
settings_use_cache_button = Utilizare geocutie
settings_save_also_as_json_button = De asemenea, salvează cache-ul ca fișier JSON
settings_use_trash_button = Mută fișierele șterse în gunoi
settings_language_label = Limba
settings_multiple_delete_outdated_cache_checkbutton = Şterge automat intrările învechite
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
Ştergeţi rezultatele învechite ale geocutiei care indică fişierele inexistente.
Atunci când este activată, aplicația se asigură la încărcarea înregistrărilor, că toate înregistrările indică către fișiere valide (cele decongelate sunt ignorate).
Dezactivarea acestui lucru va ajuta la scanarea fişierelor pe unităţi externe, astfel încât intrările de cache despre acestea nu vor fi şterse în următoarea scanare.
În cazul în care există sute de mii de înregistrări în cache; se sugerează să activezi acest lucru, care va încărca/salva cache-ul la start/end al scanării.
settings_notebook_general = Generalități
settings_notebook_duplicates = Duplicate
settings_notebook_images = Imagini similare
settings_notebook_videos = Video similar
## Multiple - settings used in multiple tabs
settings_multiple_image_preview_checkbutton_tooltip = Afișează previzualizarea în partea dreaptă (când se selectează un fișier imagine).
settings_multiple_image_preview_checkbutton = Arată previzualizarea imaginii
settings_multiple_clear_cache_button_tooltip =
Curăță manual cache-ul intrărilor învechite.
Acest lucru ar trebui folosit doar dacă curățarea automată a fost dezactivată.
settings_multiple_clear_cache_button = Elimină rezultatele învechite din geocutie.
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
Ascunde toate fişierele, cu excepţia unuia, dacă toate arată spre aceleaşi date (sunt conectate).
Exemplu: În cazul în care sunt (pe disc) şapte fişiere care sunt greu legate de date specifice şi un fişier diferit cu aceleaşi date, dar un alt inventar, apoi în duplicat va fi afișat un singur fișier unic și un fișier de la cele hardlink-ului.
settings_duplicates_minimal_size_entry_tooltip =
Setaţi dimensiunea minimă a fişierului care va fi memorată în cache.
Alegerea unei valori mai mici va genera mai multe înregistrări. (Automatic Translation) Aceasta va accelera căutarea, dar va încetini încărcarea/salvarea cache-ului.
settings_duplicates_prehash_checkbutton_tooltip =
Permite stocarea în cache a prehash (un hash calculat dintr-o mică parte a fișierului) care permite concedierea mai timpurie a rezultatelor nereplicate.
este dezactivat implicit deoarece poate cauza încetiniri în unele situații.
Este foarte recomandat sa il utilizezi cand scanezi sute de mii sau milioane de fisiere, pentru ca poate accelera cautarea de mai multe ori.
settings_duplicates_prehash_minimal_entry_tooltip = Dimensiunea minimă a intrării în cache
settings_duplicates_hide_hard_link_button = Ascunde link-urile hard (doar Linux și macOS)
settings_duplicates_prehash_checkbutton = Foloseste cache-ul prehash
settings_duplicates_minimal_size_cache_label = Dimensiunea minimă a fişierelor (în octeţi) salvate în cache
settings_duplicates_minimal_size_cache_prehash_label = Dimensiunea minimă a fişierelor (în octeţi) salvate în cache de prehash
## Saving/Loading settings
settings_saving_button_tooltip = Salvați setările curente în fișier.
settings_loading_button_tooltip = Încarcă setările din fișier și înlocuiește configurația curentă cu ele.
settings_reset_button_tooltip = Resetați configurația curentă la cea implicită.
settings_saving_button = Salvează configurația
settings_loading_button = Încarcă configurația
settings_reset_button = Resetare configurație
## Opening cache/config folders
settings_folder_cache_open_tooltip =
Deschide folderul unde sunt stocate fișierele txt cache-ul.
Modificarea fișierelor de cache poate duce la afișarea unor rezultate invalide. Cu toate acestea, modificarea traiectoriei poate salva timpul atunci când mutați un număr mare de fișiere într-o locație diferită.
Puteţi copia aceste fişiere între computere pentru a salva timp la scanarea din nou pentru fişiere (desigur, dacă au o structură de directoare similară).
În caz de probleme cu geocutia, aceste fişiere pot fi şterse. Aplicaţia le va regenera automat.
settings_folder_settings_open_tooltip =
Deschide folderul unde este stocată configurația Czkawka.
AVERTISMENT: Modificarea manuală a configurației poate rupe fluxul de lucru.
settings_folder_cache_open = Deschide dosarul cache
settings_folder_settings_open = Deschide folderul de setări
# Compute results
compute_stopped_by_user = Căutarea a fost oprită de utilizator
compute_found_duplicates_hash_size = Am găsit { $number_files } duplicate în { $number_groups } grupuri care au luat { $size }
compute_found_duplicates_name = Am găsit { $number_files } duplicate în grupurile { $number_groups }
compute_found_empty_folders = Foldere goale { $number_files }
compute_found_empty_files = Fisiere goale gasite { $number_files }
compute_found_big_files = Fisiere mari gasite { $number_files }
compute_found_temporary_files = Fișiere temporare găsite { $number_files }
compute_found_images = S-au găsit imagini similare { $number_files } în grupurile { $number_groups }
compute_found_videos = S-au găsit videoclipuri similare { $number_files } în grupurile { $number_groups }
compute_found_music = Am găsit { $number_files } fişiere muzicale similare în grupurile { $number_groups }
compute_found_invalid_symlinks = { $number_files } link-uri simbolice invalide găsite
compute_found_broken_files = Fișiere defecte { $number_files } găsite
compute_found_bad_extensions = Fișiere { $number_files } cu extensii invalide
# Progress window
progress_scanning_general_file = Se scanează fişierul { $file_number }
progress_scanning_extension_of_files = Se verifică extensia fișierului { $file_checked }/{ $all_files }
progress_scanning_broken_files = Se verifică fişierul { $file_checked }/{ $all_files }
progress_scanning_video = Hashing of { $file_checked }/{ $all_files } video
progress_scanning_image = Hashing of { $file_checked }/{ $all_files } image
progress_comparing_image_hashes = Comparare hash imagine { $file_checked }/{ $all_files }
progress_scanning_music_tags_end = Compararea etichetelor fișierului de muzică { $file_checked }/{ $all_files }
progress_scanning_music_tags = Citirea etichetelor din fişierul de muzică { $file_checked }/{ $all_files }
progress_scanning_music_content_end = Compararea amprentelor fișierului de muzică { $file_checked }/{ $all_files }
progress_scanning_music_content = Calcularea amprentei fişierului de muzică { $file_checked }/{ $all_files }
progress_scanning_empty_folders = Se scanează directorul { $folder_number }
progress_scanning_size = Dimensiune scanare fișier { $file_number }
progress_scanning_size_name = Se scanează numele și dimensiunea fișierului { $file_number }
progress_scanning_name = Se scanează numele fișierului { $file_number }
progress_analyzed_partial_hash = S-a analizat hash-ul parțial al fișierelor { $file_checked }/{ $all_files }
progress_analyzed_full_hash = A fost analizat hash complet al fişierelor { $file_checked }/{ $all_files }
progress_prehash_cache_loading = Se încarcă cache-ul prehash
progress_prehash_cache_saving = Salvare cache prehash
progress_hash_cache_loading = Încărcare cache hash
progress_hash_cache_saving = Salvare cache hash
progress_cache_loading = Se încarcă geocutia
progress_cache_saving = Salvare geocutie
progress_current_stage = Current Stage:{ " " }
progress_all_stages = All Stages:{ " " }
# Saving loading
saving_loading_saving_success = Configurație salvată în fișierul { $name }.
saving_loading_saving_failure = Salvarea datelor de configurare în fișierul { $name } a eșuat.
saving_loading_reset_configuration = Configurația curentă a fost ștearsă.
saving_loading_loading_success = Configurare aplicație încărcată corespunzător.
saving_loading_invalid_string = Pentru cheia "{ $key }" a găsit un rezultat nevalid - "{ $result }" care nu este un șir.
saving_loading_invalid_int = Pentru cheia "{ $key }" a găsit un rezultat invalid - "{ $result }" care nu este un număr întreg.
saving_loading_invalid_bool = Pentru cheia "{ $key }" a găsit rezultat nevalid - "{ $result }" care nu este un bool.
saving_loading_decode_problem_bool = Nu s-a reușit decodificarea boolului de la tasta "{ $key }" găsit "{ $result }" dar valorile permise sunt 0, 1, adevărat sau false.
saving_loading_saving_same_keys = Se încearcă salvarea setării cu cheie duplicată "{ $key }".
saving_loading_failed_to_get_home_directory = Nu s-a putut obține directorul acasă pentru a deschide/salva fișierul de configurare.
saving_loading_folder_config_instead_file = Nu se poate crea sau deschide fișierul de configurare în calea "{ $path }" deoarece există deja un dosar.
saving_loading_failed_to_create_configuration_folder = Nu s-a reuşit configurarea pentru a crea folderul de configurare "{ $path }", motivul "{ $reason }".
saving_loading_failed_to_create_config_file = Nu s-a putut crea fișierul de configurare "{ $path }", motivul "{ $reason }".
saving_loading_failed_to_read_config_file = Nu se poate încărca configurația din "{ $path }" deoarece nu există sau nu este un fișier.
saving_loading_failed_to_read_data_from_file = Datele din fişierul "{ $path }", motivul "{ $reason }".
saving_loading_orphan_data = Am găsit date orfane "{ $data }" în rândul "{ $line }".
saving_loading_not_valid = Setarea "{ $data }" nu există în versiunea curentă a aplicației.
# Invalid symlinks
invalid_symlink_infinite_recursion = Recepţie infinită
invalid_symlink_non_existent_destination = Fișier destinație inexistent
# Other
selected_all_reference_folders = Nu se poate începe căutarea, atunci când toate directoarele sunt setate ca dosare de referință
searching_for_data = Se caută date, poate dura ceva timp, vă rugăm așteptați...
text_view_messages = MESAJE
text_view_warnings = ATENȚIONĂRI
text_view_errors = EROARE
about_window_motto = Acest program este liber de utilizat și va fi întotdeauna.
# Various dialog
dialogs_ask_next_time = Întreabă data viitoare
delete_file_failed = Nu s-a reușit ștergerea fișierului { $name }, motivul { $reason }
delete_title_dialog = Ștergeți confirmarea
delete_question_label = Sunteţi sigur că doriţi să ştergeţi fişierele?
delete_all_files_in_group_title = Confirmarea ștergerii tuturor fișierelor din grup
delete_all_files_in_group_label1 = In unele grupuri, toate inregistrarile sunt selectate.
delete_all_files_in_group_label2 = Sunteţi sigur că doriţi să le ştergeţi?
delete_folder_failed = Nu s-a reușit ștergerea dosarului { $dir } deoarece directorul nu există, nu aveți permisiunea sau folderul nu este gol.
delete_items_label = { $items } fișiere vor fi șterse.
delete_items_groups_label = { $items } fișiere din grupurile { $groups } vor fi șterse.
hardlink_failed = Eșuare la hardlink
hard_sym_invalid_selection_title_dialog = Selecţie invalidă cu unele grupuri
hard_sym_invalid_selection_label_1 = În unele grupuri există doar o înregistrare selectată și va fi ignorată.
hard_sym_invalid_selection_label_2 = Pentru a putea lega hard/sym aceste fișiere, cel puțin două rezultate în grup trebuie să fie selectate.
hard_sym_invalid_selection_label_3 = Prima în grup este recunoscută ca fiind originală şi nu se modifică, dar se modifică a doua şi mai târziu.
hard_sym_link_title_dialog = Confirmare link
hard_sym_link_label = Sunteţi sigur că doriţi să conectaţi aceste fişiere?
move_folder_failed = Nu s-a reușit mutarea dosarului { $name }, motivul { $reason }
move_file_failed = Nu s-a reușit mutarea fișierului { $name }, motivul { $reason }
move_files_title_dialog = Alegeți directorul în care doriți să mutați fișierele duplicate
move_files_choose_more_than_1_path = Poate fi selectată doar o singură cale pentru a putea copia fişierele duplicate, selectate { $path_number }.
move_stats = Elemente corect mutate { $num_files }/{ $all_files }
save_results_to_file = Rezultate salvate atât pentru fişierele txt cât şi pentru fişierele json în directorul { $name }.
search_not_choosing_any_music = EROARE: Trebuie să selectaţi cel puţin o casetă cu tipuri de căutare de muzică.
search_not_choosing_any_broken_files = EROARE: Trebuie să selectaţi cel puţin o casetă de selectare cu tipul de fişiere bifate.
include_folders_dialog_title = Dosare de inclus
exclude_folders_dialog_title = Dosare de exclus
include_manually_directories_dialog_title = Adaugă director manual
cache_properly_cleared = Geocutie golită corect
cache_clear_duplicates_title = Golire duplicate cache
cache_clear_similar_images_title = Curăță cache imagini similare
cache_clear_similar_videos_title = Curățare cache video similar
cache_clear_message_label_1 = Vrei să ştergi memoria cache a intrărilor învechite?
cache_clear_message_label_2 = Această operaţie va elimina toate intrările din cache-ul care indică fişiere invalide.
cache_clear_message_label_3 = Aceasta poate încărca/salva uşor accelerat în cache.
cache_clear_message_label_4 = AVERTISMENT: Operația va elimina toate datele stocate în cache din unplugged external drive. Deci fiecare hash va trebui să fie regenerat.
# Show preview
preview_image_resize_failure = Redimensionarea imaginii { $name } a eșuat.
preview_image_opening_failure = Nu s-a reușit deschiderea imaginii { $name }, motivul { $reason }
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = Grup { $current_group }/{ $all_groups } ({ $images_in_group } imagini)
compare_move_left_button = l
compare_move_right_button = R

@ -1,287 +1,372 @@
# Window titles
window_settings_title = Опции
window_main_title = Czkawka (икота)
window_settings_title = Настройки
window_main_title = Czkawka («Икота»)
window_progress_title = Сканирование
window_compare_images = Сравнить изображения
# General
general_ok_button = Ок
general_ok_button = ОК
general_close_button = Закрыть
# Main window
music_title_checkbox = Заголовок
music_artist_checkbox = Художник
music_album_title_checkbox = Название альбома
music_album_artist_checkbox = Альбом исполнителя
music_artist_checkbox = Исполнитель
music_year_checkbox = Год
music_bitrate_checkbox = Битрейт
music_genre_checkbox = Жанр
music_length_checkbox = Длительность
music_comparison_checkbox = Приблизительное сравнение
music_checking_by_tags = Теги
music_checking_by_content = Содержание
same_music_seconds_label = Минимальная длительность второго фрагмента
same_music_similarity_label = Максимальная разница
same_music_tooltip =
Поиск похожих музыкальных файлов по его содержимому может быть настроен с помощью настройки:
- Минимальное время фрагмента, после которого музыкальные файлы можно определить как похожие
- Максимальная разница между двумя проверенными фрагментами
Ключ к хорошим результатам - найти разумные комбинации этих параметров, для предоставленных.
Установка минимального времени на 5 секунд, а максимальная разница в 1.0, будет искать практически идентичные фрагменты файлов.
Время 20 секунд и максимальная разница в 6,0, с другой стороны, хорошо подходит для поиска ремиксов/версий и т.д.
По умолчанию, каждый музыкальный файл сравнивается друг с другом, и это может занять много времени при тестировании множества файлов, поэтому обычно лучше использовать справочные папки и указать, какие файлы следует сравнивать друг с другом (одинаковое количество файлов), сравнение отпечатков пальцев будет быстрее по крайней мере на 4х, чем без ссылочных папок).
music_comparison_checkbox_tooltip =
It is designed to help you to learn foreign words and phrases quickly and easily. с включенной опцией, эти файлы будут рассматриваться как дубликаты:
Ищет похожие музыкальные файлы с помощью ИИ, использующего машинное обучение для удаления скобок из фраз. Например, если эта опция включена, следующие файлы будут считаться дубликатами:
Świędziżłób --- Świędziżłób (Remix Lato 2021)
duplicate_mode_name_combo_box = Наименование
duplicate_case_sensitive_name = С учётом регистра
duplicate_case_sensitive_name_tooltip =
При включённой опции записи группируются, только если у них полностью совпадают имена с точностью до каждого символа. Например, «ХИТ Дискотека» не совпадёт с «хит дискотека».
При отключённой опции записи группируются вне зависимости от того, заглавные или строчные буквы использовались при написании. Например, «ХИТ Дискотека», «хит дискотека», «хИт ДиСкОтЕКа» будут эквивалентны.
duplicate_mode_size_name_combo_box = Размер и имя
duplicate_mode_name_combo_box = Имя
duplicate_mode_size_combo_box = Размер
duplicate_mode_hash_combo_box = Хэш
duplicate_hash_type_tooltip =
Чкавка предлагает 3 вида хэшей, которые можно использовать:
В программе Czkawka можно использовать один из трёх алгоритмов хэширования:
Blake3 — криптографическая хэш-функция. Используется по умолчанию, поскольку очень быстрый.
CRC32 — простая хэш-функция. Ещё быстрее, чем Blake3, но возможны очень редкие совпадения хэшей неидентичных файлов.
XXH3 — функция, похожая по производительности и надёжности хэша на Blake3, но не являющаяся криптографической, поэтому её можно использовать вместо Blake3.
duplicate_check_method_tooltip =
На данный момент Czkawka предлагает три метода поиска дубликатов:
Blake3 - криптографический хэш. Используется в качестве хеш-алгоритма по умолчанию, потому что он очень быстрый.
Имя — ищет файлы с одинаковыми именами.
CRC32 - простая хэш-функция. Это должно быть быстрее, чем Blake3, но вероятно, очень редко некоторые столкновения.
Размер — ищет файлы одинакового размера.
XXH3 - очень похожие в случае производительности и качества хэша с Blake3, поэтому такие режимы можно легко использовать.
duplicate_check_method_tooltip =
На данный момент Чокавка предлагает три типа методов, чтобы найти дубликаты:
Хэш — ищет файлы с одинаковым содержимым. Этот режим хэширует файл, а затем сравнивает хэш для поиска дубликатов. Этот режим является самым надёжным способом поиска. Приложение активно использует кэш, поэтому второе и последующие сканирования одних и тех же данных должны быть намного быстрее, чем первое.
image_hash_size_tooltip =
Каждое проверяемое изображение производит специальный хэш, который можно сравнить друг с другом, и небольшая разница между ними означает, что эти изображения аналогичны.
Имя - Найди файлы, имеющие одинаковое имя.
8 размер хэша достаточно хорош, чтобы найти изображения, которые немного похожи на оригинал. С большим набором изображений (>1000), это приведет к большому количеству ложных срабатываний, поэтому в данном случае я рекомендую использовать больший размер хэша.
Размер - находит файлы, которые имеют одинаковый размер.
16 - это размер хэша по умолчанию, который является хорошим компромиссом между нахождением даже немного похожих изображений и наличием лишь небольшого количества хэш-коллизий.
Хэш - находит файлы, которые имеют одинаковое содержимое. В этом режиме хэши и затем сравнивают эти хэши для поиска дубликатов. Этот режим является самым безопасным способом поиска дубликатов. Инструмент сильно использует кэш, поэтому второй и последующие сканирования одних и тех же данных должны быть намного быстрее, чем в первую очередь.
image_hash_size_tooltip =
Чкавка предлагает изменить размер генерируемого хэша для каждого изображения. Чем больше хэш причины позволяет находить изображения с меньшим количеством различий между изображениями, но и немного медленнее в использовании.
32 и 64 хэши находят только очень похожие изображения, но не должны иметь ложных срабатываний (может быть, за исключением некоторых изображений с альфа-каналом).
image_resize_filter_tooltip =
Чтобы вычислить хэш изображения, библиотека должна в первую очередь изменить его размеры.
В зависимости от выбранного алгоритма результирующее изображение, используемое для вычисления хэша, выглядит немного другое.
Самый быстрый алгоритм использования, но также тот алгоритм, который дает худший результат, это Nearest. Он включен по умолчанию, потому что с меньшим качеством в размере 16x16 хэш он не видим.
Значение по умолчанию для хэша - 8 байт, что позволяет найти очень похожие и разные изображения. 16 и 32 хэшей следует использовать только для почти идентичных изображений. Хэш 64 байт не должен использоваться, кроме случаев, когда для поиска необходимы действительно небольшие различия
image_resize_filter_tooltip = Чтобы вычислить хэш изображения, библиотека должна изменить размер изображения. В зависимости от выбранного алгоритма получившееся изображение будет выглядеть немного по-разному. Самым быстрым алгоритмом для использования, но также является алгоритм, который дает наихудшие результаты.
image_hash_alg_tooltip = Пользователи могут выбрать один из множества алгоритмов вычисления хэша. Каждый имеет сильные и слабые точки и может давать иногда более качественные и иногда хуже результаты для различных изображений, так что для выбора лучшего, требуется ручное тестирование.
main_notebook_image_fast_compare = Быстрое сравнение
main_notebook_image_fast_compare_tooltip =
Ускорить поиск и сравнение хэшей.
Если размер хэша 8x8, рекомендуется использовать другой алгоритм, чем Nearest, чтобы иметь лучшие группы изображений.
image_hash_alg_tooltip =
Пользователи могут выбрать один из многих алгоритмов вычисления хэша.
В противоположность нормальному режиму, где каждый хэш сравнивается друг с другом х раз, где x - схожесть, которую пользователь выбирает, в этом режиме используется всегда только одно сравнение.
Каждый имеет сильные и слабые точки и иногда даёт более качественные и иногда хуже результаты для разных изображений.
Эта опция рекомендуется при сравнении >10000 изображений с подобием не 0(очень высоким).
main_notebook_duplicates = Дублировать файлы
main_notebook_empty_directories = Пустые каталоги
Поэтому для определения наилучшего из вас, требуется ручное тестирование.
big_files_mode_combobox_tooltip = Поиск наименьших/наибольших файлов
big_files_mode_label = Проверенные файлы
big_files_mode_smallest_combo_box = Самый маленький
big_files_mode_biggest_combo_box = Крупнейший
main_notebook_duplicates = Файлы-дубликаты
main_notebook_empty_directories = Пустые папки
main_notebook_big_files = Большие файлы
main_notebook_empty_files = Пустые файлы
main_notebook_temporary = Временные файлы
main_notebook_similar_images = Похожие изображения
main_notebook_similar_videos = Похожие видео
main_notebook_same_music = Музыкальные дубликаты
main_notebook_symlinks = Недопустимые символические ссылки
main_notebook_broken_files = Сломанные файлы
main_notebook_symlinks = Битые симв. ссылки
main_notebook_broken_files = Битые файлы
main_notebook_bad_extensions = Плохие расширения
main_tree_view_column_file_name = Имя файла
main_tree_view_column_folder_name = Имя папки
main_tree_view_column_path = Путь
main_tree_view_column_modification = Дата изменения
main_tree_view_column_size = Размер
main_tree_view_column_similarity = Схожесть
main_tree_view_column_similarity = Сходство
main_tree_view_column_dimensions = Размеры
main_tree_view_column_title = Заголовок
main_tree_view_column_artist = Художник
main_tree_view_column_artist = Исполнитель
main_tree_view_column_year = Год
main_tree_view_column_album_title = Название альбома
main_tree_view_column_album_artist = Альбом исполнителя
main_tree_view_column_symlink_file_name = Имя файла Symlink
main_tree_view_column_symlink_folder = Папка Symlnik
main_tree_view_column_bitrate = Битрейт
main_tree_view_column_length = Длительность
main_tree_view_column_genre = Жанр
main_tree_view_column_symlink_file_name = Имя файла символьной ссылки
main_tree_view_column_symlink_folder = Папка Symlink
main_tree_view_column_destination_path = Путь назначения
main_tree_view_column_type_of_error = Тип ошибки
main_tree_view_column_current_extension = Текущее расширение
main_tree_view_column_proper_extensions = Правильное расширение
main_label_check_method = Метод проверки
main_label_hash_type = Тип хэша
main_label_hash_size = Размер хэша
main_label_size_bytes = Размер(байт)
main_label_size_bytes = Размер (байт)
main_label_min_size = Мин
main_label_max_size = Макс
main_label_shown_files = Количество отображаемых файлов
main_label_resize_algorithm = Изменить размер алгоритма
main_label_similarity = Похожей{ " " }
main_label_resize_algorithm = Алгоритм масштабирования
main_label_similarity = Сходство{" "}
main_check_box_broken_files_audio = Звук
main_check_box_broken_files_pdf = Pdf
main_check_box_broken_files_archive = Архивировать
main_check_box_broken_files_image = Изображение
check_button_general_same_size = Игнорировать одинаковый размер
check_button_general_same_size_tooltip = Игнорировать из результатов, файлы, имеющие одинаковый размер - обычно это 1:1 дубликаты
main_label_size_bytes_tooltip = Размер файлов, которые будут использоваться в сканировании
check_button_general_same_size_tooltip = Игнорировать файлы с одинаковым размером в результатах - обычно это 1:1 дубликаты
main_label_size_bytes_tooltip = Размер файлов, которые будут просканированы
# Upper window
upper_tree_view_included_folder_column_title = Папки для поиска
upper_tree_view_included_reference_column_title = Папки ссылок
upper_recursive_button = Рекурсивный
upper_recursive_button_tooltip = Если выбрано, то найдите файлы, которые не помещаются непосредственно в выбранные папки.
upper_manual_add_included_button = Ручное добавление
upper_tree_view_included_reference_column_title = Содержит оригиналы
upper_recursive_button = В подпапках
upper_recursive_button_tooltip = При включённой опции будут также искаться файлы, не находящиеся непосредственно в корне выбранной папки, т. е. в других подпапках данной папки и их подпапках.
upper_manual_add_included_button = Прописать вручную
upper_add_included_button = Добавить
upper_remove_included_button = Удалить
upper_manual_add_excluded_button = Ручное добавление
upper_add_excluded_button = Добавить
upper_remove_excluded_button = Удалить
upper_manual_add_included_button_tooltip = Позволяет вручную добавить имя каталога для поиска.
upper_manual_add_included_button_tooltip =
Добавьте имя каталога для поиска вручную.
Чтобы добавить несколько путей одновременно, разделите их на ;
/home/roman;/home/rozkaz добавит два каталога /home/roman и /home/rozkaz
upper_add_included_button_tooltip = Добавить новый каталог для поиска.
upper_remove_included_button_tooltip = Удалить каталог из поиска.
upper_manual_add_excluded_button_tooltip = Позволяет вручную добавить исключенное имя каталога.
upper_remove_included_button_tooltip = Исключить каталог из поиска.
upper_manual_add_excluded_button_tooltip =
Добавьте вручную исключенное имя каталога.
Чтобы добавить несколько путей одновременно, разделите их на ;
/home/roman;/home/krokiet добавит два каталога /home/roman и /home/keokiet
upper_add_excluded_button_tooltip = Добавить каталог, исключаемый из поиска.
upper_remove_excluded_button_tooltip = Удалить каталог из исключенных.
upper_notebook_items_configuration = Конфигурация пунктов
upper_notebook_excluded_directories = Исключенные каталоги
upper_notebook_included_directories = Включенные каталоги
upper_remove_excluded_button_tooltip = Убрать каталог из исключенных.
upper_notebook_items_configuration = Параметры поиска
upper_notebook_excluded_directories = Исключённые каталоги
upper_notebook_included_directories = Включённые каталоги
upper_allowed_extensions_tooltip =
Допустимые расширения должны быть разделены запятыми (по умолчанию доступны все расширения).
Макрос IMAGE, VIDEO, MUSIC, TEXT, который добавляет сразу несколько расширений.
Включаемые расширения должны быть разделены запятыми (по умолчанию ищутся файлы с любыми расширениями).
Макросы IMAGE, VIDEO, MUSIC, TEXT добавляют сразу несколько расширений.
Пример использования: «.exe, IMAGE, VIDEO, .rar, 7z» — это означает, что будут сканироваться файлы изображений (напр. jpg, png), видео (напр. avi, mp4), exe, rar и 7z.
upper_excluded_extensions_tooltip =
Список отключенных файлов, которые будут игнорироваться в сканировании.
Пример использования ".exe, IMAGE, VIDEO, .rar, 7z" - это означает, что image(e. . jpg, png), video(e.g. avi, mp4), exe, rar и 7z файлы будут сканированы.
При использовании разрешенных и отключенных расширений этот файл имеет более высокий приоритет, поэтому файл не будет проверяться.
upper_excluded_items_tooltip =
Исключенные элементы должны содержать * звездочку и должны быть разделены запятыми.
Это медленнее, чем Исключенные Директории, поэтому используйте его внимательно.
upper_excluded_items = Исключенные пункты:
Исключаемые элементы должны содержать маску «*» и быть разделены запятыми.
Это медленнее, чем «Исключённые каталоги», поэтому используйте осторожно.
upper_excluded_items = Исключённые элементы:
upper_allowed_extensions = Допустимые расширения:
upper_excluded_extensions = Отключенные расширения:
# Popovers
popover_select_all = Выбрать все
popover_unselect_all = Снять выделение
popover_reverse = Обратный выбор
popover_reverse = Обратить выделение
popover_select_all_except_oldest = Выделить все, кроме старых
popover_select_all_except_newest = Выделить все кроме новых
popover_select_one_oldest = Выберите старое
popover_select_one_newest = Выберите один новый
popover_select_custom = Выбрать пользовательский
popover_select_all_except_newest = Выделить все, кроме новых
popover_select_one_oldest = Выбрать один старый
popover_select_one_newest = Выбрать один новый
popover_select_custom = Выбрать произвольный
popover_unselect_custom = Снять выбор
popover_select_all_images_except_biggest = Выделить все, кроме наибольшего
popover_select_all_images_except_smallest = Выделить все, кроме самых маленьких
popover_select_all_images_except_smallest = Выделить все, кроме наименьшего
popover_custom_path_check_button_entry_tooltip =
Позволяет выбрать записи по его пути.
Выбор записей на основе пути.
Пример использования:
/home/pimpek/rzecz.txt может быть найден с /home/pim*
Пример:
/home/pimpek/rzecz.txt можно найти с помощью /home/pim*
popover_custom_name_check_button_entry_tooltip =
Позволяет выбрать записи по именам.
Выбор записей по именам файлов.
Пример использования:
/usr/ping/pong.txt можно найти с *ong*
Пример:
/usr/ping/pong.txt можно найти с помощью *ong*
popover_custom_regex_check_button_entry_tooltip =
Позволяет выбрать записи по указанному Regex.
В этом режиме искаженный текст является Путь с именем.
Выбор записей с помощью регулярного выражения.
В этом режиме искомый текст представляет собой путь с именем.
Пример:
/usr/bin/ziemniak. xt можно найти с помощью /ziem[a-z]+
/usr/bin/ziemniak.txt можно найти с помощью выражения /ziem[a-z]+
По умолчанию используется синтаксис регулярных выражений Rust. Подробнее об этом можно прочитать здесь: https://docs.rs/regex.
popover_custom_case_sensitive_check_button_tooltip =
Включает регистрозависимый поиск.
Эта реализация по умолчанию Rust regex, так что вы можете прочитать больше об этом в https://docs.rs/regex.
При отключённой опции «/home/*» будет соответствовать как «/home/roman», так и «/HoMe/roman».
popover_custom_not_all_check_button_tooltip =
Предотвращает выбор всех записей в группе.
Запрет выбора всех записей в группе.
Это включено по умолчанию, потому что в большинстве ситуаций пользователь не хочет удалять как оригиналы, так и дубликаты, но хотите оставить хотя бы один файл.
Эта опция включена по умолчанию, потому что в большинстве ситуаций вам не надо удалять и оригиналы, и дубликаты — обычно оставляют хотя бы один файл.
Предупреждение: Эта настройка не работает, если пользователь уже выбрал все результаты в группе вручную.
ВНИМАНИЕ. Этот параметр не работает, если вы уже вручную выбрали все результаты в группе.
popover_custom_regex_path_label = Путь
popover_custom_regex_name_label = Наименование
popover_custom_regex_regex_label = Путь к выражению + имя
popover_custom_regex_name_label = Имя
popover_custom_regex_regex_label = Путь с рег. выраж. + имя
popover_custom_case_sensitive_check_button = С учётом регистра
popover_custom_all_in_group_label = Не выбирать все записи в группе
popover_custom_mode_unselect = Снять выбор
popover_custom_mode_select = Выбрать пользовательский
popover_invalid_regex = Некорректный выраж
popover_valid_regex = Regex действителен
popover_custom_mode_select = Выбрать произвольный
popover_sort_file_name = Имя файла
popover_sort_folder_name = Название папки
popover_sort_full_name = Полное имя
popover_sort_size = Размер
popover_sort_selection = Выбранные объекты
popover_invalid_regex = Некорректное регулярное выражение
popover_valid_regex = Корректное регулярное выражение
# Bottom buttons
bottom_search_button = Искать
bottom_select_button = Выбрать
bottom_delete_button = Удалить
bottom_save_button = Сохранить
bottom_symlink_button = Symlink
bottom_hardlink_button = Hardlink
bottom_symlink_button = Симв. ссылка
bottom_hardlink_button = Жёст. ссылка
bottom_move_button = Переместить
bottom_search_button_tooltip = Начать поиск файлов/папок.
bottom_select_button_tooltip = Выбор записей. Только выбранные файлы/папки могут быть обработаны позже.
bottom_sort_button = Сортировать
bottom_search_button_tooltip = Начать поиск
bottom_select_button_tooltip = Выберите записи. Только выбранные файлы/папки будут доступны для последующей обработки.
bottom_delete_button_tooltip = Удалить выбранные файлы/папки.
bottom_save_button_tooltip = Сохранить данные о поиске в файл
bottom_symlink_button_tooltip =
Создает символические ссылки.
Работает только когда выбраны не менее 2 результатов в группе.
Первый не изменен, второй и более поздние символизируют первый.
Создать символьные ссылки.
Работает, только когда выбрано не менее двух результатов в группе.
Первый результат оставляется, а второй и последующие делаются символьными ссылками на первый.
bottom_hardlink_button_tooltip =
Создает хардлинки.
Работает только когда выбраны как минимум 2 результата в группе.
Первый не изменен, а второй и более поздние тесно связаны с первым.
Создать жёсткие ссылки.
Работает, только когда выбрано не менее двух результатов в группе.
Первый результат оставляется, а второй и последующие делаются жёсткими ссылками на первый.
bottom_hardlink_button_not_available_tooltip =
Создание жестких ссылок.
Кнопка отключена, так как невозможно создать жёсткие ссылки.
Связи работают только с правами администратора в Windows, поэтому не забудьте запустить приложение от имени администратора.
Если приложение уже работает с такими привилегиями, проверьте аналогичные проблемы на Github.
bottom_move_button_tooltip =
Перемещает файлы в выбранную папку.
Копирует все файлы в папку без сохранения дерева каталогов.
При попытке переместить 2 файла с одинаковым именем в папку, второй не будет выполнён и появится ошибка.
bottom_show_errors_tooltip = Показать/скрыть нижнюю панель ошибок.
Перемещение файлов в выбранный каталог.
Копирует все файлы в папку без сохранения структуры дерева каталогов.
При попытке переместить два файла с одинаковым именем в одну и ту же папку второй не будет перемещён и появится сообщение об ошибке.
bottom_sort_button_tooltip = Сортировка файлов/папок по выбранному методу.
bottom_show_errors_tooltip = Показать/скрыть нижнюю текстовую панель.
bottom_show_upper_notebook_tooltip = Показать/скрыть верхнюю панель блокнота.
# Progress Window
progress_stop_button = Остановить
progress_stop_additional_message = Стоп запрошен
# About Window
about_repository_button_tooltip = Ссылка на страницу репозитория с исходным кодом.
about_donation_button_tooltip = Ссылка на страницу пожертвования.
about_donation_button_tooltip = Ссылка на страницу пожертвований.
about_instruction_button_tooltip = Ссылка на страницу инструкций.
about_translation_button_tooltip = Ссылка на страницу Crowdin с переводами приложений. Официально польский и английский языки, но любая помощь с другим языком будет признательна.
about_translation_button_tooltip = Ссылка на страницу Crowdin с переводами приложений. Официально поддерживаются английский и польский языки.
about_repository_button = Репозиторий
about_donation_button = Пожертвование
about_instruction_button = Инструкция
about_translation_button = Перевод
# Header
header_setting_button_tooltip = Открыть диалог настроек.
header_about_button_tooltip = Открывает диалог с информацией о приложении.
header_setting_button_tooltip = Открыть окно настроек.
header_about_button_tooltip = Открыть окно с информацией о приложении.
# Settings
## General
settings_save_at_exit_button_tooltip = Сохраняет конфигурацию в файл при закрытии приложения.
settings_number_of_threads = Количество использованных тем
settings_number_of_threads_tooltip = Количество используемых потоков. Установите 0, чтобы использовать все доступные потоки.
settings_label_restart = Вам нужно перезапустить приложение, чтобы применить настройки!
settings_ignore_other_filesystems = Игнорировать другие файловые системы (только Linux)
settings_ignore_other_filesystems_tooltip =
игнорирует файлы, которые находятся в той же файловой системе, что и поисковые директории.
Работает так же, как и команда 'xdev' в команде 'находить'
settings_save_at_exit_button_tooltip = Сохранить конфигурацию в файл при закрытии приложения.
settings_load_at_start_button_tooltip =
Загрузка конфигурации при запуске из файла.
Не выбрав этот параметр, будут загружены настройки по умолчанию.
settings_confirm_deletion_button_tooltip = Показывает диалоговое окно подтверждения при нажатии на кнопку удаления.
settings_confirm_link_button_tooltip = Показывает диалоговое окно подтверждения при нажатии на кнопку хард/символьная ссылка.
settings_confirm_group_deletion_button_tooltip = Показывает диалог при попытке удалить все записи из группы.
settings_show_text_view_button_tooltip = Показывает панель ошибок внизу.
settings_use_cache_button_tooltip = Параметр, который позволяет не использовать функцию кэша.
settings_save_also_as_json_button_tooltip = Сохраните кэш для чтения по формату JSON. Можно изменять его содержимое. Кэш из этого файла будет прочитан автоматически приложением, если кэш двоичного формата (с расширением) не будет установлен.
settings_use_trash_button_tooltip = При включении перемещает файлы в корзину вместо их удаления навсегда.
settings_language_label_tooltip = Позволяет выбрать язык интерфейса из доступных языков.
settings_save_at_exit_button = Сохранить конфигурацию при выходе
settings_load_at_start_button = Загрузить конфигурацию при запуске
Загрузить конфигурацию из файла при открытии приложения.
Если не включено, будут использоваться настройки по умолчанию.
settings_confirm_deletion_button_tooltip = Показать окно подтверждения при нажатии на кнопку удаления.
settings_confirm_link_button_tooltip = Показывать окно подтверждения при нажатии кнопки жесткой/символической ссылки.
settings_confirm_group_deletion_button_tooltip = Показывать окно предупреждения при попытке удалить все записи из группы.
settings_show_text_view_button_tooltip = Показать текстовую панель в нижней части интерфейса.
settings_use_cache_button_tooltip = Использовать файловый кэш.
settings_save_also_as_json_button_tooltip = Сохранять кэш в формат JSON (человекочитаемый). Его содержимое можно изменять. Кэш из этого файла будет автоматически прочитан приложением, если бинарный кэш (с расширением bin) отсутствует.
settings_use_trash_button_tooltip = Перемещать файлы в корзину вместо их безвозвратного удаления.
settings_language_label_tooltip = Язык пользовательского интерфейса.
settings_save_at_exit_button = Сохранять конфигурацию при закрытии приложения
settings_load_at_start_button = Загружать конфигурацию при открытии приложения
settings_confirm_deletion_button = Показывать подтверждение при удалении любых файлов
settings_confirm_link_button = Показывать окно подтверждения, когда все файлы/символьные ссылки
settings_confirm_link_button = Показывать окно подтверждения при создании жёстких или символьных ссылок на файлы
settings_confirm_group_deletion_button = Показывать подтверждение при удалении всех файлов в группе
settings_show_text_view_button = Показывать нижнюю текстовую панель
settings_use_cache_button = Использовать кэш
settings_save_also_as_json_button = Сохранить кэш в файл JSON
settings_use_trash_button = Переместить удаленные файлы в корзину
settings_save_also_as_json_button = Также сохранять кэш в файл JSON
settings_use_trash_button = Перемещать удаляемые файлы в корзину
settings_language_label = Язык
settings_multiple_delete_outdated_cache_checkbutton = Автоматически удалять устаревшие записи кэша
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
Позволяет удалять устаревшие результаты кэша, указывающие на несуществующие файлы.
Удалить устаревшие результаты кеша, указывающие на несуществующие файлы.
Когда включено, приложение проверяет при загрузке записей, что все указывает на допустимые файлы и игнорирует поврежденные файлы.
Когда опция включена, приложение проверяет при загрузке записей, указывают ли они на доступные файлы (недостающие файлы игнорируются).
Отключение этой опции, поможет сканировать файлы на внешних дисках, так что записи о них не будут очищены при следующем сканировании.
Отключение этой опции помогает при сканировании файлов на внешних носителях, чтобы информация о них не была очищена при следующем сканировании.
В случае наличия сотни тысяч записей в кэше, включить эту опцию, ускорить загрузку и сохранение кэша в начале и конце сканирования.
settings_notebook_general = Общие положения
При наличии сотен тысяч записей в кэше рекомендуется включить эту опцию, чтобы ускорить загрузку и сохранение кэша в начале и конце сканирования.
settings_notebook_general = Общие настройки
settings_notebook_duplicates = Дубликаты
settings_notebook_images = Похожие изображения
settings_notebook_videos = Похожие видео
## Multiple - settings used in multiple tabs
settings_multiple_image_preview_checkbutton_tooltip = Показывает предварительный просмотр справа при выборе файла изображения.
settings_multiple_image_preview_checkbutton = Предпросмотр изображения
settings_multiple_image_preview_checkbutton_tooltip = Показывать предварительный просмотр справа (при выборе файла изображения).
settings_multiple_image_preview_checkbutton = Показывать предпросмотр изображения
settings_multiple_clear_cache_button_tooltip =
Очистка кэша вручную из устаревших записей.
Должно быть использовано, только если автоматическая очистка была отключена.
settings_multiple_clear_cache_button = Удалить устаревшие результаты из кэша изображений
Очистка устаревших записей кэша вручную.
Следует использовать только в том случае, если автоматическая очистка отключена.
settings_multiple_clear_cache_button = Удалить устаревшие результаты из кэша.
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
Скрывает все файлы, кроме одного, если они указывают на одну и ту же информацию (жестко привязанные).
Скрыть все файлы, кроме первого, если все они указывают на одни и те же данные (связаны жёсткой ссылкой).
Например, в случае, если на диске есть 7 файлов, которые связаны с определенными данными и один другой файл с одними и теми же данными, но другой inode,, то в дублирующем искателе будет виден только один уникальный файл и один файл из привязанных.
Пример: если (на диске) семь файлов связаны жёсткой ссылкой с определёнными данными, а ещё один файл содержат те же данные, но на другом inode, то в средстве поиска дубликатов будут показаны только этот последний уникальный файл и один файл из являющихся жёсткой ссылкой.
settings_duplicates_minimal_size_entry_tooltip =
Позволяет установить минимальный размер файла, который будет кэширован.
Установить минимальный размер кэшируемого файла.
Выбор меньшего значения позволит создать больше записей, которые ускорят поиск, но замедляют загрузку/сохранение кэша.
Выбор меньшего значения приведёт к созданию большего количества записей. Это ускорит поиск, но замедлит загрузку/сохранение кэша.
settings_duplicates_prehash_checkbutton_tooltip =
Включает кэширование prehash(хэша, вычисляемого из небольшой части файла), что позволяет раньше бросать неповторяющиеся результаты.
Включает кэширование предварительного хэша (предхэша), вычисляемого из небольшой части файла, что позволяет быстрее исключать из анализа отличающиеся файлы.
По умолчанию отключено, потому что может вызвать замедление в некоторых ситуациях.
По умолчанию отключено, так как в некоторых ситуациях может замедлять работу.
Настоятельно рекомендуется использовать его при сканировании сотен тысяч или миллионов файлов, так как он может несколько раз ускорить поиск.
settings_duplicates_prehash_minimal_entry_tooltip = Минимальный размер кешированной записи.
settings_duplicates_hide_hard_link_button = Скрыть жёсткие ссылки (только Linux и MacOS)
settings_duplicates_prehash_checkbutton = Использовать кэш prehash
settings_duplicates_minimal_size_cache_label = Минимальный размер файлов в байтах, сохраненных в кэш
settings_duplicates_minimal_size_cache_prehash_label = Минимальный размер файлов в байтах, сохраненных в кэш prehash
Настоятельно рекомендуется использовать его при сканировании сотен тысяч или миллионов файлов, так как это может ускорить поиск в разы.
settings_duplicates_prehash_minimal_entry_tooltip = Минимальный размер кэшируемого элемента.
settings_duplicates_hide_hard_link_button = Скрыть жёсткие ссылки (только для Linux и macOS)
settings_duplicates_prehash_checkbutton = Кэшировать предхэш
settings_duplicates_minimal_size_cache_label = Минимальный размер (байт) кэшируемых файлов
settings_duplicates_minimal_size_cache_prehash_label = Минимальный размер (байт) файлов для кэша предхэша
## Saving/Loading settings
settings_saving_button_tooltip = Сохранить текущую конфигурацию настроек в файл.
settings_loading_button_tooltip = Загрузить настройки из файла и заменить текущую конфигурацию.
settings_reset_button_tooltip = Восстановить текущую конфигурацию по умолчанию.
settings_loading_button_tooltip = Загрузить настройки из файла и заменить ими текущую конфигурацию.
settings_reset_button_tooltip = Сбросить текущую конфигурацию на конфигурацию по умолчанию.
settings_saving_button = Сохранить конфигурацию
settings_loading_button = Загрузить конфигурацию
settings_reset_button = Сбросить настройки
@ -289,117 +374,127 @@ settings_reset_button = Сбросить настройки
## Opening cache/config folders
settings_folder_cache_open_tooltip =
Открывает папку, где хранятся файлы txt с кэшированием.
Открыть папку, в которой хранятся текстовые файлы кеша.
Изменение их может привести к появлению некорректных результатов, но также и к изменениям.. Путь может сэкономить время при перемещении большого количества файлов в другое место.
Изменение файлов кэша может привести к отображению неверных результатов, однако изменение пути может сэкономить время при перемещении большого количества файлов в другое место.
Вы можете скопировать эти файлы между компьютерами, чтобы сэкономить время на повторном сканировании для файлов (конечно, если они имеют аналогичную структуру каталогов).
Вы можете копировать эти файлы между компьютерами, чтобы сэкономить время на повторном сканировании файлов (конечно, если они имеют схожую структуру каталогов).
В случае проблем с кэшем эти файлы могут быть удалены, поэтому приложение автоматически сгенерирует их.
В случае возникновения проблем с кэшем эти файлы можно удалить. Приложение автоматически пересоздаст их.
settings_folder_settings_open_tooltip =
Открывает папку, в которой хранится конфигурация Czkawk.
Открывает папку, в которой хранится конфигурация Czkawka.
Изменение их вручную, может привести к нарушению рабочего процесса.
ВНИМАНИЕ. Ручное изменение конфигурации может нарушить функционирование программы.
settings_folder_cache_open = Открыть папку кэша
settings_folder_settings_open = Открыть папку настроек
# Compute results
compute_stopped_by_user = Поиск был остановлен пользователем
compute_found_duplicates_hash_size = Найдено { $number_files } дубликатов в { $number_groups } группах, которые взяли { $size }
compute_found_duplicates_name = Найдено { $number_files } дубликатов в { $number_groups } группах
compute_found_empty_folders = Найдено { $number_files } пустых папок
compute_found_empty_files = Найдено { $number_files } пустых файлов
compute_found_big_files = Найдено { $number_files } больших файлов
compute_found_temporary_files = Найдено { $number_files } временных файлов
compute_found_images = Найдено { $number_files } похожие изображения в { $number_groups } группах
compute_found_videos = Найдено { $number_files } похожие видео в { $number_groups } группах
compute_found_music = Найдено { $number_files } похожие музыкальные файлы в { $number_groups } группах
compute_found_invalid_symlinks = Найдено { $number_files } неверные символические ссылки
compute_found_broken_files = Найдено { $number_files } сломанных файлов
compute_found_duplicates_hash_size = Найдено дубликатов: { $number_files } (групп: { $number_groups }), размер: { $size }
compute_found_duplicates_name = Найдено: { $number_files } дубликат(а/ов) (групп: { $number_groups })
compute_found_empty_folders = Найдено пустых папок: { $number_files }
compute_found_empty_files = Найдено пустых файлов: { $number_files }
compute_found_big_files = Найдено больших файлов: { $number_files }
compute_found_temporary_files = Найдено временных файлов: { $number_files }
compute_found_images = Найдено похожих изображений: { $number_files } (групп: { $number_groups })
compute_found_videos = Найдено похожих видео: { $number_files } (групп: { $number_groups })
compute_found_music = Найдено похожих музыкальных файлов: { $number_files } (групп: { $number_groups })
compute_found_invalid_symlinks = Найдено битых символьных ссылок: { $number_files }
compute_found_broken_files = Найдено битых файлов: { $number_files }
compute_found_bad_extensions = Найдено { $number_files } файлов с недопустимыми расширениями
# Progress window
progress_scanning_general_file = Сканирование { $file_number } файла
progress_scanning_broken_files = Проверка { $file_checked }/{ $all_files } файла
progress_scanning_video = Хэширование { $file_checked }/{ $all_files } видео
progress_scanning_image = Хэширование { $file_checked }/{ $all_files } изображения
progress_comparing_image_hashes = Сравнение { $file_checked }/{ $all_files } хэша изображений
progress_scanning_general_file = Сканирование файла: { $file_number }
progress_scanning_extension_of_files = Проверка расширения { $file_checked }/{ $all_files } файла
progress_scanning_broken_files = Проверка файла: { $file_checked }/{ $all_files }
progress_scanning_video = Хэширование видео: { $file_checked }/{ $all_files }
progress_scanning_image = Хэширование изображения: { $file_checked }/{ $all_files }
progress_comparing_image_hashes = Сравнение хэша изображений: { $file_checked }/{ $all_files }
progress_scanning_music_tags_end = Сравнение тегов { $file_checked }/{ $all_files } музыкального файла
progress_scanning_music_tags = Чтение тегов { $file_checked }/{ $all_files } музыкального файла
progress_scanning_music_tags = Чтение тэгов музыкальных файлов: { $file_checked }/{ $all_files }
progress_scanning_music_content_end = Сравнение отпечатка пальца из { $file_checked }/{ $all_files } музыкального файла
progress_scanning_music_content = Вычисление отпечатка пальца из { $file_checked }/{ $all_files } музыкального файла
progress_scanning_empty_folders = Сканирование папки { $folder_number }
progress_scanning_size = Сканирование размера { $file_number } файла
progress_scanning_name = Сканирование имени { $file_number } файла
progress_analyzed_partial_hash = Частичный хэш { $file_checked }/{ $all_files } файлов
progress_analyzed_full_hash = Полный хэш { $file_checked }/{ $all_files } файлов
progress_current_stage = Текущая стадия:{ " " }
progress_scanning_size = Сканирование размера файла { $file_number }
progress_scanning_size_name = Сканирование имени и размера файла { $file_number }
progress_scanning_name = Сканирование имени файла { $file_number }
progress_analyzed_partial_hash = Анализ частичного хэша файла { $file_checked }/{ $all_files }
progress_analyzed_full_hash = Анализ полного хэша файла { $file_checked }/{ $all_files }
progress_prehash_cache_loading = Загрузка кэша prehash
progress_prehash_cache_saving = Сохранение кэша prehash
progress_hash_cache_loading = Загрузка хеш-кэша
progress_hash_cache_saving = Сохранение хэша
progress_cache_loading = Загрузка кэша
progress_cache_saving = Сохранение кэша
progress_current_stage = Текущий этап:{ " " }
progress_all_stages = Все этапы:{ " " }
# Saving loading
saving_loading_saving_success = Конфигурация сохранена в файл { $name }.
saving_loading_saving_failure = Не удалось сохранить данные конфигурации в файл { $name }.
saving_loading_reset_configuration = Текущая конфигурация была удалена.
saving_loading_loading_success = Правильно загруженные настройки приложения.
saving_loading_invalid_string = Для ключа "{ $key }" найден недопустимый результат - "{ $result }", который не является строкой.
saving_loading_invalid_int = Для ключа "{ $key }" найден недопустимый результат - "{ $result }", который не является целым числом.
saving_loading_invalid_bool = Для ключа "{ $key }" найден недопустимый результат - "{ $result }", который не является щитом.
saving_loading_decode_problem_bool = Не удалось декодировать бул из ключа "{ $key }" найдено "{ $result }", но допустимые значения равны 0, 1, true или false.
saving_loading_saving_same_keys = Попытка сохранить настройки с дублированным ключом "{ $key }".
saving_loading_loading_success = Настройки приложения корректно загружены.
saving_loading_invalid_string = Для ключа «{ $key }» найден недопустимый результат: «{ $result }» не является строковым выражением.
saving_loading_invalid_int = Для ключа «{ $key }» найден недопустимый результат: «{ $result }» не является целым числом.
saving_loading_invalid_bool = Для ключа «{ $key }» найден недопустимый результат: «{ $result }» не является булевым значением.
saving_loading_decode_problem_bool = Не удалось декодировать булево значение из ключа «{ $key }»: найдено «{ $result }», но допустимы лишь значения 0, 1, true или false.
saving_loading_saving_same_keys = Попытка сохранить настройки с дублирующимся ключом «{ $key }».
saving_loading_failed_to_get_home_directory = Не удалось получить домашний каталог для открытия/сохранения конфигурационного файла.
saving_loading_folder_config_instead_file = Невозможно создать или открыть файл конфигурации в пути "{ $path }", потому что уже есть папка.
saving_loading_failed_to_create_configuration_folder = Не удалось создать папку конфигурации "{ $path }", причина "{ $reason }".
saving_loading_failed_to_create_config_file = Не удалось создать файл конфигурации "{ $path }", причина "{ $reason }".
saving_loading_failed_to_read_config_file = Невозможно загрузить конфигурацию из "{ $path }" потому что не существует или не является файлом.
saving_loading_failed_to_read_data_from_file = Невозможно прочитать данные из файла "{ $path }", причина "{ $reason }".
saving_loading_orphan_data = Найдены осиротевшие данные "{ $data }" в строке "{ $line }".
saving_loading_not_valid = Установка "{ $data }" не существует в текущей версии приложения.
saving_loading_folder_config_instead_file = Невозможно создать или открыть файл конфигурации в пути «{ $path }», потому что уже есть такая папка.
saving_loading_failed_to_create_configuration_folder = Не удалось создать папку конфигурации «{ $path }». Причина: «{ $reason }».
saving_loading_failed_to_create_config_file = Не удалось создать файл конфигурации «{ $path }». Причина: «{ $reason }».
saving_loading_failed_to_read_config_file = Невозможно загрузить конфигурацию из «{ $path }», так как или такого файла не существует, или это не файл.
saving_loading_failed_to_read_data_from_file = Невозможно прочитать данные из файла «{ $path }». Причина: «{ $reason }».
saving_loading_orphan_data = Найдены ничему не принадлежащие данные «{ $data }» в строке «{ $line }».
saving_loading_not_valid = Параметра «{ $data }» не существует в текущей версии приложения.
# Invalid symlinks
invalid_symlink_infinite_recursion = Бесконечная рекурсия
invalid_symlink_non_existent_destination = Не существующий файл назначения
invalid_symlink_non_existent_destination = Не найден конечный файл
# Other
searching_for_data = Поиск данных, это может занять некоторое время, пожалуйста, подождите...
selected_all_reference_folders = Невозможно начать поиск, когда все каталоги установлены как папки со ссылками
searching_for_data = Поиск данных может занять некоторое время — пожалуйста, подождите...
text_view_messages = СООБЩЕНИЯ
text_view_warnings = ПРЕДУПРЕЖДЕНИЯ
text_view_errors = ОШИБКИ
about_window_motto = Эта программа бесплатна для использования и всегда будет.
about_window_motto = Эта программа бесплатна для использования и всегда будет оставаться таковой.
# Various dialog
dialogs_ask_next_time = Спросить в следующий раз
delete_file_failed = Не удалось удалить файл { $name }, причина { $reason }
delete_file_failed = Не удалось удалить файл { $name }. Причина: { $reason }
delete_title_dialog = Подтверждение удаления
delete_question_label = Вы уверены, что хотите удалить файлы?
delete_all_files_in_group_title = Подтверждение удаления всех файлов в группе
delete_all_files_in_group_label1 = В некоторых группах все записи выделены.
delete_all_files_in_group_label1 = В некоторых группах были выбраны все записи.
delete_all_files_in_group_label2 = Вы уверены, что хотите удалить их?
delete_folder_failed = Не удалось удалить папку { $dir } , потому что папка не существует, у вас нет прав или не пуста.
delete_items_label = { $items } файлы будут удалены.
delete_items_groups_label = { $items } файлов из { $groups } групп будут удалены.
hardlink_failed = Не удалось связать
hard_sym_invalid_selection_title_dialog = Неверный выбор с некоторыми группами
hard_sym_invalid_selection_label_1 = В некоторых группах выбрана только одна запись, которая будет проигнорирована.
hard_sym_invalid_selection_label_2 = Чтобы иметь возможность использовать жесткий/симм, необходимо выбрать не менее 2 результатов в группе.
hard_sym_invalid_selection_label_3 = Первый в группе признан как оригинал и не изменен, но второй и более позднее модифицирован.
hard_sym_link_title_dialog = Подтверждение ссылки
delete_folder_failed = Не удалось удалить папку { $dir }, так как или папки не существует, или у вас нет разрешения на изменение, или папка не пуста.
delete_items_label = Будет удалено файлов: { $items }.
delete_items_groups_label = Будет удалено файлов: { $items } (групп: { $groups }).
hardlink_failed = Не удалось создать жёсткую ссылку
hard_sym_invalid_selection_title_dialog = Неверный выбор в некоторых группах
hard_sym_invalid_selection_label_1 = В некоторых группах выбрана только одна запись — они будут проигнорированы.
hard_sym_invalid_selection_label_2 = Чтобы жёстко или символьно связать эти файлы, необходимо выбрать как минимум два результата в группе.
hard_sym_invalid_selection_label_3 = Первый в группе признан в качестве оригинала и не будет изменён, но второй и последующие модифицированы.
hard_sym_link_title_dialog = Подтверждение связывания ссылкой
hard_sym_link_label = Вы уверены, что хотите связать эти файлы?
move_folder_failed = Не удалось переместить папку { $name }, причина { $reason }
move_file_failed = Не удалось переместить файл { $name }, причина { $reason }
move_folder_failed = Не удалось переместить папку { $name }. Причина: { $reason }
move_file_failed = Не удалось переместить файл { $name }. Причина: { $reason }
move_files_title_dialog = Выберите папку, в которую вы хотите переместить дублирующиеся файлы
move_files_choose_more_than_1_path = Необходимо выбрать только 1 путь, чтобы иметь возможность копировать там дубликаты, выбрано { $path_number }.
move_stats = Правильно перемещено { $num_files }/{ $all_files } предметов
save_results_to_file = Результаты сохранены в файл { $name }
search_not_choosing_any_music = ОШИБКА: Необходимо выбрать по крайней мере один флажок с типами поиска музыки.
move_files_choose_more_than_1_path = Можно выбрать только один путь для копирования дубликатов файлов, но выбрано { $path_number }.
move_stats = Удалось переместить без ошибок элементов: { $num_files }/{ $all_files }
save_results_to_file = Результаты сохранены в txt и json файлах в папке { $name }.
search_not_choosing_any_music = ОШИБКА: Необходимо выбрать как минимум один флажок с типами поиска музыки.
search_not_choosing_any_broken_files = ОШИБКА: Вы должны выбрать хотя бы один флажок с типом проверенных ошибочных файлов.
include_folders_dialog_title = Папки для включения
exclude_folders_dialog_title = Папки для исключения
include_manually_directories_dialog_title = Добавить папку вручную
cache_properly_cleared = Правильно очищенный кэш
cache_properly_cleared = Кэш успешно очищен
cache_clear_duplicates_title = Очистка кэша дубликатов
cache_clear_similar_images_title = Очистка кэша аналогичных изображений
cache_clear_similar_images_title = Очистка кэша похожих изображений
cache_clear_similar_videos_title = Очистка кэша похожих видео
cache_clear_message_label_1 = Вы хотите очистить кэш от устаревших записей?
cache_clear_message_label_2 = Эта операция удалит все записи кэша, которые указывают на недопустимые файлы.
cache_clear_message_label_3 = Это может ускорить загрузку/сохранение в кэш.
cache_clear_message_label_4 = ВНИМАНИЕ: Операция удалит все кэшированные данные с неподключенных внешних накопителей, поэтому хэш необходимо сгенерировать снова.
cache_clear_message_label_1 = Убрать из кэша устаревшие записи?
cache_clear_message_label_2 = Это действие удалит все записи кэша, указывающие на недоступные файлы.
cache_clear_message_label_3 = Это может немного ускорить загрузку/сохранение кэша.
cache_clear_message_label_4 = ВНИМАНИЕ. Это действие удалит все кэшированные данные с отключённых внешних дисков. Хэши для файлов на этих носителях будет необходимо сгенерировать заново.
# Show preview
preview_temporary_file = Не удалось открыть временный файл изображения { $name }, причина { $reason }.
preview_0_size = Невозможно создать предварительный просмотр изображения { $name }, ширина или высота.
preview_temporary_image_save = Не удалось сохранить временный файл в { $name }, причина { $reason }.
preview_temporary_image_remove = Не удалось удалить временный файл изображения { $name }, причина { $reason }.
preview_failed_to_create_cache_dir = Не удалось создать каталог { $name } , необходимый для просмотра изображения, причина { $reason }.
preview_image_resize_failure = Не удалось изменить размер изображения { $name }.
preview_image_opening_failure = Не удалось открыть изображение { $name }. Причина: { $reason }
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = Группа { $current_group }/{ $all_groups } ({ $images_in_group } изображения)
compare_groups_number = Группа { $current_group }/{ $all_groups } (изображений: { $images_in_group })
compare_move_left_button = L
compare_move_right_button = R

@ -0,0 +1,500 @@
# Window titles
window_settings_title = Inställningar
window_main_title = Czkawka (Hiccup)
window_progress_title = Scannar
window_compare_images = Jämför bilder
# General
general_ok_button = Ok
general_close_button = Stäng
# Main window
music_title_checkbox = Titel
music_artist_checkbox = Artist
music_year_checkbox = År
music_bitrate_checkbox = Bitrate
music_genre_checkbox = Genre
music_length_checkbox = Längd
music_comparison_checkbox = Ungefärlig jämförelse
music_checking_by_tags = Taggar
music_checking_by_content = Innehåll
same_music_seconds_label = Minsta fragment sekund varaktighet
same_music_similarity_label = Maximal skillnad
same_music_tooltip =
Sökning efter liknande musikfiler genom dess innehåll kan konfigureras genom att ställa in:
- Minsta fragmenttid efter vilken musikfiler kan identifieras som liknande
- Maximal skillnad mellan två testade fragment
Nyckeln till bra resultat är att hitta förnuftiga kombinationer av dessa parametrar, för tillhandahållen.
Att ställa in den minsta tiden till 5s och den maximala skillnaden till 1.0, kommer att leta efter nästan identiska fragment i filerna.
En tid på 20-talet och en maximal skillnad på 6,0, å andra sidan, fungerar bra för att hitta remixer/live-versioner etc.
Som standard jämförs varje musikfil med varandra och detta kan ta mycket tid vid testning av många filer, så är det oftast bättre att använda referensmappar och ange vilka filer som ska jämföras med varandra(med samma mängd filer, Att jämföra fingeravtryck kommer att vara snabbare minst 4x än utan referensmappar).
music_comparison_checkbox_tooltip =
Den söker efter liknande musikfiler med AI, som använder maskininlärning för att ta bort parenteser från en fras. Till exempel, med detta alternativ aktiverat, filerna i fråga kommer att betraktas som dubbletter:
Świędziżłób --- Świędziżłób (Remix Lato 2021)
duplicate_case_sensitive_name = Skiftlägeskänslig
duplicate_case_sensitive_name_tooltip =
När detta är aktiverat spelar gruppen bara in när de har exakt samma namn t.ex. Żołd <-> Żołd
Inaktivera sådana alternativ kommer gruppnamn utan att kontrollera om varje bokstav är samma storlek t.ex. żoŁD <-> Żołd
duplicate_mode_size_name_combo_box = Storlek och namn
duplicate_mode_name_combo_box = Namn
duplicate_mode_size_combo_box = Storlek
duplicate_mode_hash_combo_box = Hash
duplicate_hash_type_tooltip =
Czkawka erbjuder 3 typer av hash:
Blake3 - kryptografisk hash-funktion. Detta är standard eftersom det är mycket snabbt.
CRC32 - enkel hash-funktion. Detta bör vara snabbare än Blake3, men kan mycket sällan ha några kollisioner.
XXH3 - mycket lik i prestanda och hashkvalitet till Blake3 (men icke-kryptografisk). Så, sådana lägen kan lätt bytas ut.
duplicate_check_method_tooltip =
För tillfället erbjuder Czkawka tre typer av metoder för att hitta dubbletter av:
Namn - Hittar filer som har samma namn.
Storlek - Hittar filer som har samma storlek.
Hash - Hittar filer som har samma innehåll. Detta läge hashar filen och senare jämför denna hash för att hitta dubbletter. Detta läge är det säkraste sättet att hitta dubbletter. Appen använder starkt cache, så andra och ytterligare skanningar av samma data bör vara mycket snabbare än den första.
image_hash_size_tooltip =
Varje kontrollerad bild ger en speciell hash som kan jämföras med varandra, och en liten skillnad mellan dem innebär att dessa bilder är liknande.
8 hash storlek är ganska bra att hitta bilder som bara är lite liknande till originalet. Med en större uppsättning bilder (>1000), kommer detta att producera en stor mängd falska positiva, så jag rekommenderar att använda en större hash storlek i detta fall.
16 är standard hashstorlek vilket är en ganska bra kompromiss mellan att hitta även lite liknande bilder och att bara ha en liten mängd hashkollisioner.
32 och 64 hashen finner endast mycket liknande bilder, men bör ha nästan inga falska positiva (kanske förutom vissa bilder med alfa-kanal).
image_resize_filter_tooltip =
För att beräkna hash av bilden, måste biblioteket först ändra storlek på den.
Beroende på vald algoritm kommer den resulterande bilden som används för att beräkna hash att se lite annorlunda ut.
Den snabbaste algoritmen att använda, men också den som ger de sämsta resultaten, är nära! Det är aktiverat som standard, eftersom med 16x16 hash storlek lägre kvalitet är det inte riktigt synligt.
Med 8x8 hashstorlek rekommenderas att använda en annan algoritm än Närmaste för att få bättre grupper av bilder.
image_hash_alg_tooltip =
Användare kan välja mellan en av många algoritmer för att beräkna hash.
Var och en har både starka och svagare punkter och ger ibland bättre och ibland sämre resultat för olika bilder.
Så, för att bestämma den bästa för dig krävs manuell testning.
big_files_mode_combobox_tooltip = Gör det möjligt att söka efter minsta/största filer
big_files_mode_label = Markerade filer
big_files_mode_smallest_combo_box = Den minsta
big_files_mode_biggest_combo_box = Den största
main_notebook_duplicates = Duplicera filer
main_notebook_empty_directories = Tomma kataloger
main_notebook_big_files = Stora filer
main_notebook_empty_files = Tomma filer
main_notebook_temporary = Tillfälliga filer
main_notebook_similar_images = Liknande bilder
main_notebook_similar_videos = Liknande videor
main_notebook_same_music = Musik Duplicerar
main_notebook_symlinks = Ogiltiga Symlinks
main_notebook_broken_files = Trasiga filer
main_notebook_bad_extensions = Dåliga tillägg
main_tree_view_column_file_name = Filnamn
main_tree_view_column_folder_name = Mappens namn
main_tree_view_column_path = Sökväg
main_tree_view_column_modification = Senast ändrad
main_tree_view_column_size = Storlek
main_tree_view_column_similarity = Likhet
main_tree_view_column_dimensions = Dimensioner
main_tree_view_column_title = Titel
main_tree_view_column_artist = Artist
main_tree_view_column_year = År
main_tree_view_column_bitrate = Bitrate
main_tree_view_column_length = Längd
main_tree_view_column_genre = Genre
main_tree_view_column_symlink_file_name = Symlink filnamn
main_tree_view_column_symlink_folder = Symlink mapp
main_tree_view_column_destination_path = Målsökvägen
main_tree_view_column_type_of_error = Typ av fel
main_tree_view_column_current_extension = Nuvarande tillägg
main_tree_view_column_proper_extensions = Rätt tillägg
main_label_check_method = Kontrollera metod
main_label_hash_type = Hash typ
main_label_hash_size = Hashstorlek
main_label_size_bytes = Storlek (bytes)
main_label_min_size = Min
main_label_max_size = Max
main_label_shown_files = Antal visade filer
main_label_resize_algorithm = Ändra storlek på algoritm
main_label_similarity = Similarity{ " " }
main_check_box_broken_files_audio = Ljud
main_check_box_broken_files_pdf = Pdf
main_check_box_broken_files_archive = Arkiv
main_check_box_broken_files_image = Bild
check_button_general_same_size = Ignorera samma storlek
check_button_general_same_size_tooltip = Ignorera filer med samma storlek i resultat - vanligtvis är dessa 1:1 dubbletter
main_label_size_bytes_tooltip = Storlek på filer som kommer att användas vid skanning
# Upper window
upper_tree_view_included_folder_column_title = Mappar att söka
upper_tree_view_included_reference_column_title = Referens mappar
upper_recursive_button = Rekursiv
upper_recursive_button_tooltip = Om vald, sök även efter filer som inte placeras direkt under valda mappar.
upper_manual_add_included_button = Manuell Lägg till
upper_add_included_button = Lägg till
upper_remove_included_button = Ta bort
upper_manual_add_excluded_button = Manuell Lägg till
upper_add_excluded_button = Lägg till
upper_remove_excluded_button = Ta bort
upper_manual_add_included_button_tooltip =
Lägg till katalognamn för att söka för hand.
För att lägga till flera sökvägar samtidigt, separera dem med ;
/home/roman;/home/rozkaz lägger till två kataloger /home/roman och /home/rozkaz
upper_add_included_button_tooltip = Lägg till ny katalog att söka.
upper_remove_included_button_tooltip = Ta bort katalog från sökning.
upper_manual_add_excluded_button_tooltip =
Lägg till exkluderat katalognamn för hand.
För att lägga till flera sökvägar samtidigt, separera dem med ;
/home/roman;/home/krokiet kommer att lägga till två kataloger /home/roman och /home/keokiet
upper_add_excluded_button_tooltip = Lägg till katalog som ska exkluderas i sökningen.
upper_remove_excluded_button_tooltip = Ta bort katalog från utesluten.
upper_notebook_items_configuration = Objekt konfiguration
upper_notebook_excluded_directories = Uteslutna kataloger
upper_notebook_included_directories = Inkluderade kataloger
upper_allowed_extensions_tooltip =
Tillåtna tillägg måste separeras med kommatecken (som standard alla är tillgängliga).
Följande makron som lägger till flera tillägg samtidigt, finns också: IMAGE, VIDEO, MUSIC, TEXT.
Användningsexempel ".exe, IMAGE, VIDEO, .rar, 7z" - det betyder att bilder (e. . jpg, png), videor (t.ex. avi, mp4), exe, rar, och 7z filer kommer att skannas.
upper_excluded_extensions_tooltip =
Lista över inaktiverade filer som kommer att ignoreras i skanning.
Vid användning av både tillåtna och inaktiverade tillägg har denna högre prioritet, så filen kommer inte att kontrolleras.
upper_excluded_items_tooltip =
Exkluderade artiklar måste innehålla * jokertecken och bör separeras med kommatecken.
Detta är långsammare än uteslutna kataloger, så använd det noggrant.
upper_excluded_items = Exkluderade objekt:
upper_allowed_extensions = Tillåtna tillägg:
upper_excluded_extensions = Inaktiverade tillägg:
# Popovers
popover_select_all = Radera
popover_unselect_all = Avmarkera alla
popover_reverse = Omvänd markering
popover_select_all_except_oldest = Välj alla utom äldsta
popover_select_all_except_newest = Välj alla utom nyaste
popover_select_one_oldest = Välj en äldsta
popover_select_one_newest = Välj en nyaste
popover_select_custom = Välj anpassad
popover_unselect_custom = Avmarkera anpassade
popover_select_all_images_except_biggest = Välj alla utom största
popover_select_all_images_except_smallest = Välj alla utom minsta
popover_custom_path_check_button_entry_tooltip =
Välj poster efter sökväg.
Exempel användning:
/home/pimpek/rzecz.txt hittas med /home/pim*
popover_custom_name_check_button_entry_tooltip =
Välj poster efter filnamn.
Exempel användning:
/usr/ping/pong.txt finns med *ong*
popover_custom_regex_check_button_entry_tooltip =
Välj poster efter specificerad Regex.
Med detta läge är sökord sökväg med namn.
Exempel användning:
/usr/bin/ziemniak. xt kan hittas med /ziem[a-z]+
Detta använder Rust regex-implementationen. Du kan läsa mer om det här: https://docs.rs/regex.
popover_custom_case_sensitive_check_button_tooltip =
Aktiverar skiftlägeskänslig detektion.
När du inaktiverat /home/* hittar du både /HoMe/roman och /home/roman.
popover_custom_not_all_check_button_tooltip =
Förhindrar att alla poster väljs i grupp.
Detta är aktiverat som standard, eftersom i de flesta situationer, du inte vill ta bort både original och dubbletter filer, men vill lämna minst en fil.
VARNING: Den här inställningen fungerar inte om du redan manuellt har valt alla resultat i en grupp.
popover_custom_regex_path_label = Sökväg
popover_custom_regex_name_label = Namn
popover_custom_regex_regex_label = Regex sökväg + namn
popover_custom_case_sensitive_check_button = Skiftlägeskänslighet
popover_custom_all_in_group_label = Välj inte alla poster i gruppen
popover_custom_mode_unselect = Avmarkera anpassad
popover_custom_mode_select = Välj anpassad
popover_sort_file_name = Filnamn
popover_sort_folder_name = Mapp namn
popover_sort_full_name = Fullständigt namn
popover_sort_size = Storlek
popover_sort_selection = Markerat
popover_invalid_regex = Regex är ogiltigt
popover_valid_regex = Regex är giltigt
# Bottom buttons
bottom_search_button = Sökning
bottom_select_button = Välj
bottom_delete_button = Radera
bottom_save_button = Save
bottom_symlink_button = Symlink
bottom_hardlink_button = Hardlink
bottom_move_button = Flytta
bottom_sort_button = Sortera
bottom_search_button_tooltip = Starta sökning
bottom_select_button_tooltip = Välj poster. Endast valda filer/mappar kan senare bearbetas.
bottom_delete_button_tooltip = Ta bort markerade filer/mappar.
bottom_save_button_tooltip = Spara data om sökning till fil
bottom_symlink_button_tooltip =
Skapa symboliska länkar.
Fungerar endast när minst två resultat i en grupp väljs.
Först är oförändrad och andra och senare är symanknutna till först.
bottom_hardlink_button_tooltip =
Skapa hardlinks.
Fungerar endast när minst två resultat i en grupp är valda.
Först är oförändrad och andra och senare är hårt länkade till först.
bottom_hardlink_button_not_available_tooltip =
Skapa hardlinks.
Knappen är inaktiverad, eftersom hardlinks inte kan skapas.
Hårdlänkar fungerar bara med administratörsrättigheter i Windows, så se till att köra appen som administratör.
Om appen redan fungerar med sådana rättigheter kontrollera liknande problem på Github.
bottom_move_button_tooltip =
Flyttar filer till vald katalog.
Det kopierar alla filer till katalogen utan att bevara katalogträdet.
När du försöker flytta två filer med identiskt namn till mappen kommer det andra att misslyckas och visa fel.
bottom_sort_button_tooltip = Sortera filer/mappar enligt vald metod.
bottom_show_errors_tooltip = Visa/Dölj undertextpanelen.
bottom_show_upper_notebook_tooltip = Visa/Dölj övre anteckningsbokspanelen.
# Progress Window
progress_stop_button = Stoppa
progress_stop_additional_message = Stoppa begärd
# About Window
about_repository_button_tooltip = Länk till utvecklingskatalogen med källkod.
about_donation_button_tooltip = Länk till donationssidan.
about_instruction_button_tooltip = Länk till instruktionssidan.
about_translation_button_tooltip = Länk till Crowdin sida med appöversättningar. Officiellt stöds polska och engelska.
about_repository_button = Filförråd
about_donation_button = Donationer
about_instruction_button = Instruktion
about_translation_button = Översättning
# Header
header_setting_button_tooltip = Öppnar dialogrutan för inställningar.
header_about_button_tooltip = Öppnar dialog med info om app.
# Settings
## General
settings_number_of_threads = Antal använda trådar
settings_number_of_threads_tooltip = Antal gängor, 0 betyder att alla gängor kommer att användas.
settings_label_restart = Du måste starta om appen för att tillämpa inställningar!
settings_ignore_other_filesystems = Ignorera andra filsystem (endast Linux)
settings_ignore_other_filesystems_tooltip =
ignorerar filer som inte finns i samma filsystem som sökta kataloger.
Fungerar samma som -xdev alternativ för att hitta kommandot på Linux
settings_save_at_exit_button_tooltip = Spara konfigurationen till fil när appen stängs.
settings_load_at_start_button_tooltip =
Ladda konfigurationen från filen när appen öppnas.
Om den inte är aktiverad kommer standardinställningarna att användas.
settings_confirm_deletion_button_tooltip = Visa bekräftelsedialog när du klickar på knappen ta bort.
settings_confirm_link_button_tooltip = Visa bekräftelsedialog när du klickar på den hårda/symboliska länkknappen.
settings_confirm_group_deletion_button_tooltip = Visa varningsdialog när du försöker ta bort alla poster från gruppen.
settings_show_text_view_button_tooltip = Visa textpanelen längst ner i användargränssnittet.
settings_use_cache_button_tooltip = Använd filcache.
settings_save_also_as_json_button_tooltip = Spara cache till (läsbar) JSON-format. Det är möjligt att ändra dess innehåll. Cache från denna fil kommer att läsas automatiskt av appen om binärt format cache (med bin extension) saknas.
settings_use_trash_button_tooltip = Flyttar filer till papperskorgen istället ta bort dem permanent.
settings_language_label_tooltip = Språk för användargränssnitt.
settings_save_at_exit_button = Spara konfiguration när appen stängs
settings_load_at_start_button = Ladda konfiguration när appen öppnas
settings_confirm_deletion_button = Visa bekräftelsedialog vid borttagning av filer
settings_confirm_link_button = Visa bekräftelsedialog när hårda/symboliska länkar filer
settings_confirm_group_deletion_button = Visa bekräftelsedialog när alla filer tas bort i grupp
settings_show_text_view_button = Visa längst ned textpanel
settings_use_cache_button = Använd cache
settings_save_also_as_json_button = Spara även cache som JSON-fil
settings_use_trash_button = Flytta raderade filer till papperskorgen
settings_language_label = Language
settings_multiple_delete_outdated_cache_checkbutton = Ta bort föråldrade cache-poster automatiskt
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
Ta bort föråldrade cacheresultat som pekar på obefintliga filer.
När den är aktiverad, se till att appen när du laddar poster, att alla poster pekar på giltiga filer (trasiga dem ignoreras).
Att inaktivera detta kommer att hjälpa när du skannar filer på externa enheter, så cacheposter om dem kommer inte att rensas i nästa skanning.
När det gäller att ha hundratusentals poster i cache, det föreslås för att aktivera detta, vilket kommer att påskynda cache-inläsning/spara vid start/slut av sökningen.
settings_notebook_general = Info
settings_notebook_duplicates = Dubbletter
settings_notebook_images = Liknande bilder
settings_notebook_videos = Liknande video
## Multiple - settings used in multiple tabs
settings_multiple_image_preview_checkbutton_tooltip = Visar förhandsgranskning på höger sida (vid val av bildfil).
settings_multiple_image_preview_checkbutton = Visa förhandsgranskning av bild
settings_multiple_clear_cache_button_tooltip =
Rensa cache manuellt för föråldrade poster.
Detta bör endast användas om automatisk rensning har inaktiverats.
settings_multiple_clear_cache_button = Ta bort föråldrade resultat från cachen.
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
Döljer alla filer utom en, om alla pekar på samma data (är hardlinked).
Exempel: I det fall där det finns (på disk) sju filer som är hårdkopplade till specifika data och en annan fil med samma data men ett annat inode, i dubblettsökare, kommer endast en unik fil och en fil från hårdlänkade att visas.
settings_duplicates_minimal_size_entry_tooltip =
Ange minimal filstorlek som kommer att cachelagras.
Att välja ett mindre värde kommer att generera fler poster. Detta kommer att snabba upp sökningen, men bromsa cache-laddning/spara.
settings_duplicates_prehash_checkbutton_tooltip =
Aktiverar cachelagring av prehash (en hash beräknad från en liten del av filen) vilket tillåter tidigare avfärdande av icke-duplicerade resultat.
Det är inaktiverat som standard eftersom det kan orsaka nedgångar i vissa situationer.
Det rekommenderas starkt att använda det när du skannar hundratusentals eller miljoner filer, eftersom det kan påskynda sökningen flera gånger.
settings_duplicates_prehash_minimal_entry_tooltip = Minimal storlek på cachad post.
settings_duplicates_hide_hard_link_button = Dölj hårda länkar (endast Linux och macOS)
settings_duplicates_prehash_checkbutton = Använd prehash cache
settings_duplicates_minimal_size_cache_label = Minimal storlek på filer (i bytes) sparade i cache
settings_duplicates_minimal_size_cache_prehash_label = Minimal storlek på filer (i bytes) sparade för att kunna använda cache
## Saving/Loading settings
settings_saving_button_tooltip = Spara konfigurationen för nuvarande inställningar till filen.
settings_loading_button_tooltip = Ladda inställningar från fil och ersätta den aktuella konfigurationen med dem.
settings_reset_button_tooltip = Återställ den aktuella konfigurationen till standardkonfigurationen.
settings_saving_button = Spara konfiguration
settings_loading_button = Ladda konfiguration
settings_reset_button = Återställ konfiguration
## Opening cache/config folders
settings_folder_cache_open_tooltip =
Öppnar mappen där cache-txt-filer lagras.
Ändring av cache-filer kan leda till att ogiltiga resultat visas. Dock kan ändra sökvägen spara tid när du flyttar en stor mängd filer till en annan plats.
Du kan kopiera dessa filer mellan datorer för att spara tid på skanning igen för filer (naturligtvis om de har liknande katalogstruktur).
Vid problem med cachen kan dessa filer tas bort. Appen kommer automatiskt att regenerera dem.
settings_folder_settings_open_tooltip =
Öppnar mappen där Czkawka-konfigurationen lagras.
VARNING: Manuellt modifierande av konfigurationen kan bryta ditt arbetsflöde.
settings_folder_cache_open = Öppna cachemapp
settings_folder_settings_open = Öppna inställningsmapp
# Compute results
compute_stopped_by_user = Sökandet stoppades av användaren
compute_found_duplicates_hash_size = Hittade { $number_files } dubbletter i { $number_groups } grupper som tog { $size }
compute_found_duplicates_name = Hittade { $number_files } dubbletter i { $number_groups } grupper
compute_found_empty_folders = Hittade { $number_files } tomma mappar
compute_found_empty_files = Hittades { $number_files } tomma filer
compute_found_big_files = Hittade { $number_files } stora filer
compute_found_temporary_files = Hittade { $number_files } tillfälliga filer
compute_found_images = Hittade { $number_files } liknande bilder i { $number_groups } grupper
compute_found_videos = Hittade { $number_files } liknande videoklipp i { $number_groups } grupper
compute_found_music = Hittade { $number_files } liknande musik filer i { $number_groups } grupper
compute_found_invalid_symlinks = Hittade { $number_files } ogiltiga symboliska länkar
compute_found_broken_files = Hittades { $number_files } trasiga filer
compute_found_bad_extensions = Hittades { $number_files } filer med ogiltiga tillägg
# Progress window
progress_scanning_general_file = Scanning { $file_number } fil
progress_scanning_extension_of_files = Kontrollerar tillägg till { $file_checked }/{ $all_files } fil
progress_scanning_broken_files = Kontrollerar { $file_checked }/{ $all_files } fil
progress_scanning_video = Hashning av { $file_checked }/{ $all_files } video
progress_scanning_image = Hashning av { $file_checked }/{ $all_files } bild
progress_comparing_image_hashes = Jämföra { $file_checked }/{ $all_files } bildhash
progress_scanning_music_tags_end = Jämföra taggar för { $file_checked }/{ $all_files } musikfil
progress_scanning_music_tags = Lästaggar för { $file_checked }/{ $all_files } musikfil
progress_scanning_music_content_end = Jämföra fingeravtryck av { $file_checked }/{ $all_files } musikfil
progress_scanning_music_content = Beräknar fingeravtryck av { $file_checked }/{ $all_files } musikfil
progress_scanning_empty_folders = Skannar { $folder_number } mappen
progress_scanning_size = Skannar storleken på { $file_number } fil
progress_scanning_size_name = Skannar namn och storlek på { $file_number } fil
progress_scanning_name = Skannar namn på { $file_number } fil
progress_analyzed_partial_hash = Analyserade partiella hash av { $file_checked }/{ $all_files } filer
progress_analyzed_full_hash = Analyserad full hash av { $file_checked }/{ $all_files } filer
progress_prehash_cache_loading = Laddar prehash cache
progress_prehash_cache_saving = Sparar Omfattande cache
progress_hash_cache_loading = Laddar hash-cache
progress_hash_cache_saving = Sparar hash-cache
progress_cache_loading = Laddar cache
progress_cache_saving = Sparar cache
progress_current_stage = Nuvarande steg:{ " " }
progress_all_stages = Alla etapper:{ " " }
# Saving loading
saving_loading_saving_success = Sparad konfiguration till filen { $name }.
saving_loading_saving_failure = Det gick inte att spara konfigurationsdata till filen { $name }.
saving_loading_reset_configuration = Aktuell konfiguration har rensats.
saving_loading_loading_success = Korrekt laddad app-konfiguration.
saving_loading_invalid_string = För nyckel "{ $key }" hittade ogiltigt resultat - "{ $result }" vilket inte är en sträng.
saving_loading_invalid_int = För nyckeln "{ $key }" hittade ogiltigt resultat - "{ $result }" vilket inte är ett heltal.
saving_loading_invalid_bool = För nyckel "{ $key }" hittade ogiltigt resultat - "{ $result }" vilket inte är en bool.
saving_loading_decode_problem_bool = Det gick inte att avkoda Bollen från nyckel "{ $key }" hittade "{ $result }" men tillåtna värden är 0, 1, sanna eller falska.
saving_loading_saving_same_keys = Försöker spara inställningen med duplicerad nyckel "{ $key }".
saving_loading_failed_to_get_home_directory = Det gick inte att hämta hemkatalogen till att öppna/spara konfigurationsfil.
saving_loading_folder_config_instead_file = Kan inte skapa eller öppna spara konfigurationsfilen i sökvägen "{ $path }" eftersom det redan finns en mapp.
saving_loading_failed_to_create_configuration_folder = Det gick inte att skapa konfigurationsmappen "{ $path }", orsak "{ $reason }".
saving_loading_failed_to_create_config_file = Det gick inte att skapa konfigurationsfil "{ $path }", orsak "{ $reason }".
saving_loading_failed_to_read_config_file = Kan inte ladda konfiguration från "{ $path }" eftersom den inte finns eller inte är en fil.
saving_loading_failed_to_read_data_from_file = Kan inte läsa data från fil "{ $path }", anledning "{ $reason }".
saving_loading_orphan_data = Hittade föräldralösa data "{ $data }" i rad "{ $line }".
saving_loading_not_valid = Inställningen "{ $data }" finns inte i nuvarande appversion.
# Invalid symlinks
invalid_symlink_infinite_recursion = Oändlig recursion
invalid_symlink_non_existent_destination = Icke-existerande målfil
# Other
selected_all_reference_folders = Kan inte börja söka, när alla kataloger är inställda som referensmappar
searching_for_data = Söker data, det kan ta en stund, vänta...
text_view_messages = MEDDELANDEN
text_view_warnings = VARNINGAR
text_view_errors = FEL
about_window_motto = Detta program är gratis att använda och kommer alltid att vara.
# Various dialog
dialogs_ask_next_time = Fråga nästa gång
delete_file_failed = Det gick inte att ta bort filen { $name } varför { $reason }
delete_title_dialog = Ta bort bekräftelse
delete_question_label = Är du säker på att du vill ta bort filer?
delete_all_files_in_group_title = Bekräftelse av att ta bort alla filer i grupp
delete_all_files_in_group_label1 = I vissa grupper är alla poster valda.
delete_all_files_in_group_label2 = Är du säker på att du vill radera dem?
delete_folder_failed = Det gick inte att ta bort mappen { $dir } eftersom mappen inte existerar, du har inte behörighet eller mappen är inte tom.
delete_items_label = { $items } filer kommer att tas bort.
delete_items_groups_label = { $items } filer från { $groups } grupper kommer att raderas.
hardlink_failed = Det gick inte att hardlink
hard_sym_invalid_selection_title_dialog = Ogiltigt val med vissa grupper
hard_sym_invalid_selection_label_1 = I vissa grupper finns det bara en post vald och den kommer att ignoreras.
hard_sym_invalid_selection_label_2 = För att kunna länka dessa filer måste minst två resultat i gruppen väljas.
hard_sym_invalid_selection_label_3 = Först i grupp känns igen som original och ändras inte, men andra och senare ändras.
hard_sym_link_title_dialog = Länkbekräftelse
hard_sym_link_label = Är du säker på att du vill länka dessa filer?
move_folder_failed = Det gick inte att flytta mappen { $name } anledning { $reason }
move_file_failed = Det gick inte att flytta filen { $name } anledning { $reason }
move_files_title_dialog = Välj mapp som du vill flytta duplicerade filer till
move_files_choose_more_than_1_path = Endast en sökväg kan väljas för att kunna kopiera sina duplicerade filer, valda { $path_number }.
move_stats = Korrekt flyttad { $num_files }/{ $all_files } objekt
save_results_to_file = Sparade resultat både till txt och json filer i { $name } mapp.
search_not_choosing_any_music = FEL: Du måste välja minst en kryssruta med söktyper för musik.
search_not_choosing_any_broken_files = FEL: Du måste välja minst en kryssruta med typ av markerade trasiga filer.
include_folders_dialog_title = Mappar att inkludera
exclude_folders_dialog_title = Mappar att exkludera
include_manually_directories_dialog_title = Lägg till katalog manuellt
cache_properly_cleared = Rensad cache
cache_clear_duplicates_title = Rensar dubbletter cache
cache_clear_similar_images_title = Rensar liknande bildcache
cache_clear_similar_videos_title = Rensar liknande videoklipp cache
cache_clear_message_label_1 = Vill du rensa cachen för föråldrade inlägg?
cache_clear_message_label_2 = Denna åtgärd kommer att ta bort alla cache-poster som pekar på ogiltiga filer.
cache_clear_message_label_3 = Detta kan något speedup ladda/spara till cache.
cache_clear_message_label_4 = VARNING: Åtgärden kommer att ta bort alla cachade data från frånkopplade externa enheter. Så varje hash kommer att behöva regenereras.
# Show preview
preview_image_resize_failure = Kunde inte ändra storlek på bild { $name }.
preview_image_opening_failure = Det gick inte att öppna bilden { $name } skäl { $reason }
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = Grupp { $current_group }/{ $all_groups } ({ $images_in_group } bilder)
compare_move_left_button = L
compare_move_right_button = R

@ -0,0 +1,533 @@
# Window titles
window_settings_title = Ayarlar
window_main_title = Czkawka (Hıçkırık)
window_progress_title = Taranıyor...
window_compare_images = Resimleri Karşılaştır
# General
general_ok_button = Tamam
general_close_button = Kapat
# Main window
music_title_checkbox = Başlık
music_artist_checkbox = Sanatçı
music_year_checkbox = Yıl
music_bitrate_checkbox = Bit-hızı
music_genre_checkbox = Müzik Türü
music_length_checkbox = Uzunluk
music_comparison_checkbox = Yaklaşık Karşılaştırma
music_checking_by_tags = Etiketler
music_checking_by_content = İçerik
same_music_seconds_label = Minimal parça saniyesel süresi
same_music_similarity_label = Maksimum fark
same_music_tooltip =
Searching for similar music files by its content can be configured by setting:
- The minimum fragment time after which music files can be identified as similar
- The maximum difference difference between two tested fragments
The key to good results is to find sensible combinations of these parameters, for provided.
Setting the minimum time to 5s and the maximum difference to 1.0, will look for almost identical fragments in the files.
A time of 20s and a maximum difference of 6.0, on the other hand, works well for finding remixes/live versions etc.
By default, each music file is compared to each other and this can take a lot of time when testing many files, so it is usually better to use reference folders and specifying which files are to be compared with each other(with same amount of files, comparing fingerprints will be faster at least 4x than without reference folders).
music_comparison_checkbox_tooltip =
Yapay zeka kullanarak benzer müzik dosyalarını arar.
Örneğin, bir tümcenin parantezlerini kaldırmak için makine öğrenimini kullanır.
Bu seçenek etkinleştirildiğinde, söz konusu dosyalar kopya olarak kabul edilecektir:
Geççek <--> Geççek (Tarkan 2022)
duplicate_case_sensitive_name = Büyük/Küçük harfe Duyarlı
duplicate_case_sensitive_name_tooltip =
Etkinleştirilse, dosya adları tam olarak aynı olduğunda eşleştirilir
ve bir grup oluşturulur.
fatih.kavalci <--> fatih.kavalci
Etkisizleştirilirse, her bir harfin büyük/küçük yazılıp yazılmadığını
denetlemeden aynı adları eşleyip grup oluşturur.
fatih.kavalci <--> FatiH.KaVaLCi
duplicate_mode_size_name_combo_box = Boyut ve Ad Karşılaştırma
duplicate_mode_name_combo_box = Ad Karşılaştırma
duplicate_mode_size_combo_box = Boyut Karşılaştırma
duplicate_mode_hash_combo_box = Özet Değeri
duplicate_hash_type_tooltip =
Czkawka, 3 tür Sabit Uzunlukta Çıktı (SUÇ) üretimi sunar:
Blake3 - kriptografik SUÇ üretim işlevi. Bu varsayılandır çünkü çok hızlıdır.
CRC32 - basit SUÇ üretim işlevi. Bu, Blake3'ten daha hızlı olmalıdır,
ancak kimi zaman çakışmalar olabilir.
XXH3 - performans ve benzersiz SUÇ üretim kalitesi açısından Blake3'e çok benzer
(ancak kriptografik değildir). Böylece, bu tür modlar kolayca değiştirilebilir.
duplicate_check_method_tooltip =
Czkawka, eş dosyaları bulmak için şimdilik üç tür yöntem sunar:
Ad Karşılaştırma - Aynı ada sahip dosyaları bulur.
Boyut Karşılaştırma - Aynı boyuta sahip dosyaları bulur.
Hash (SUÇ) Karşılaştırma - Aynı içeriğe sahip dosyaları bulur. Bu mod her dosya için
veri analizi sonucu sabit uzunlukta benzersiz birer çıktı üretir ve daha sonra eş doşyaları
bulmak için bu çıktıları karşılaştırır. Bu mod, eş dosyaları bulmanın en güvenli yoludur.
Czkawka, önbelleği yoğun olarak kullanır. Bu nedenle aynı verilerin ikinci ve sonraki taramaları
ilkinden çok daha hızlı olmalıdır.
image_hash_size_tooltip =
Each checked image produces a special hash which can be compared with each other, and a small difference between them means that these images are similar.
8 hash size is quite good to find images that are only a little similar to original. With a bigger set of images (>1000), this will produce a big amount of false positives, so I recommend to use a bigger hash size in this case.
16 is the default hash size which is quite a good compromise between finding even a little similar images and having only a small amount of hash collisions.
32 and 64 hashes find only very similar images, but should have almost no false positives (maybe except some images with alpha channel).
image_resize_filter_tooltip =
To compute hash of image, the library must first resize it.
Depend on chosen algorithm, the resulting image used to calculate hash will looks a little different.
The fastest algorithm to use, but also the one which gives the worst results, is Nearest. It is enabled by default, because with 16x16 hash size lower quality it is not really visible.
With 8x8 hash size it is recommended to use a different algorithm than Nearest, to have better groups of images.
image_hash_alg_tooltip =
Kullanıcılar, SUÇ oluşturmanın birçok algoritmasından birini seçebilir.
Her birinin hem güçlü hem de zayıf noktaları vardır ve farklı görüntüler için
bazen daha iyi, bazen daha kötü sonuçlar verir. Bu nedenle, size göre en iyisini belirlemek için
elle test gereklidir.
big_files_mode_combobox_tooltip = Boyut bakımından En Büyük/En Küçük dosyaları aramaya izin verir.
big_files_mode_label = Denetim şekli
big_files_mode_smallest_combo_box = En Küçük
big_files_mode_biggest_combo_box = En Büyük
main_notebook_duplicates = Eş Dosyalar
main_notebook_empty_directories = Boş Dizinler
main_notebook_big_files = Büyük/Küçük Dosyalar
main_notebook_empty_files = Boş Dosyalar
main_notebook_temporary = Geçici Dosyalar
main_notebook_similar_images = Benzer Resimler
main_notebook_similar_videos = Benzer Videolar
main_notebook_same_music = Müzik Kopyaları
main_notebook_symlinks = Geçersiz Sembolik Bağlar
main_notebook_broken_files = Bozuk Dosyalar
main_notebook_bad_extensions = Hatalı Uzantılar
main_tree_view_column_file_name = Dosya Adı
main_tree_view_column_folder_name = Klasör Adı
main_tree_view_column_path = Yol
main_tree_view_column_modification = Düzenleme Tarihi
main_tree_view_column_size = Boyut
main_tree_view_column_similarity = Benzerlik
main_tree_view_column_dimensions = En x Boy
main_tree_view_column_title = Başlık
main_tree_view_column_artist = Sanatçı
main_tree_view_column_year = Yıl
main_tree_view_column_bitrate = Bit-hızı
main_tree_view_column_length = Uzunluk
main_tree_view_column_genre = Tür
main_tree_view_column_symlink_file_name = Sembolik Bağ Dosyası Adı
main_tree_view_column_symlink_folder = Sembolik Bağlantı Klasörü
main_tree_view_column_destination_path = Hedef Yol
main_tree_view_column_type_of_error = Hata türü
main_tree_view_column_current_extension = Geçerli Uzantı
main_tree_view_column_proper_extensions = Uygun Uzantı
main_label_check_method = Denetim yöntemi:
main_label_hash_type = SUÇ türü:
main_label_hash_size = SURÇ boyutu:
main_label_size_bytes = Boyut (bayt):
main_label_min_size = Min
main_label_max_size = Max
main_label_shown_files = Gösterilecek Dosya Sayısı:
main_label_resize_algorithm = Yeniden boyutlandırma algoritması:
main_label_similarity = Benzerlik: { " " }
main_check_box_broken_files_audio = Ses
main_check_box_broken_files_pdf = Pdf
main_check_box_broken_files_archive = Arşiv
main_check_box_broken_files_image = Resim
check_button_general_same_size = Aynı boyutu yok say
check_button_general_same_size_tooltip = Ignore files with identical size in results - usually these are 1:1 duplicates
main_label_size_bytes_tooltip = Taramada kullanılacak dosyaların boyutu
# Upper window
upper_tree_view_included_folder_column_title = Aranacak Klasörler
upper_tree_view_included_reference_column_title = Başvuru Klasörleri
upper_recursive_button = Özyinelemeli
upper_recursive_button_tooltip = Seçilirse, doğrudan "Aranacak Klasörler" listesindeki dizin altında yer almayan (alt dizinlerdeki dosyaları da) arar.
upper_manual_add_included_button = Dizin Gir...
upper_add_included_button = Ekle
upper_remove_included_button = Kaldır
upper_manual_add_excluded_button = Dizin Gir...
upper_add_excluded_button = Ekle
upper_remove_excluded_button = Kaldır
upper_manual_add_included_button_tooltip =
Arama yapılacak dizin yolunu doğrudan yazın.
Aynı anda birden fazla girdi eklemek için bunları ";" ile ayırın.
/home/fatih;/home/kavalci girdisi biri /home/fatih öteki /home/kavalci
olmak üzere iki dizin ekleyecektir.
upper_add_included_button_tooltip = "Aranacak Klasörler" listesine yeni bir dizin ekler.
upper_remove_included_button_tooltip = Seçili dizini "Aranacak Klasörler" listesinden kaldırır.
upper_manual_add_excluded_button_tooltip =
Hariç tutulacak dizin yolunu doğrudan yazın.
Aynı anda birden fazla girdi eklemek için bunları ";" ile ayırın.
/home/fatih;/home/kavalci girdisi biri /home/fatih öteki /home/kavalci
olmak üzere iki dizin ekleyecektir.
upper_add_excluded_button_tooltip = "Hariç Tutulacak Klasörler" listesine yeni bir dizin ekler.
upper_remove_excluded_button_tooltip = Seçili dizini "Hariç Tutulacak Klasörler" listesinden kaldırır.
upper_notebook_items_configuration = Öğe Yapılandırması
upper_notebook_excluded_directories = Hariç Tutulan Dizinler
upper_notebook_included_directories = Aranacak Dizinler
upper_allowed_extensions_tooltip =
İzin verilen uzantılar virgülle ayrılmalıdır (varsayılan olarak her uzantı kullanılır).
Aynı anda birden fazla (aynı tür) uzantı ekleyen makrolar da kullanılabilir: IMAGE, VIDEO, MUSIC, TEXT.
Kullanım örneği: ".exe, IMAGE, VIDEO, .rar, .7z" -- Bu girdi, resimlerin (ör. jpg, png ...),
videoların (ör. avi, mp4 ...), exe, rar ve 7z dosyalarının taranacağı anlamına gelir.
upper_excluded_extensions_tooltip =
List of disabled files which will be ignored in scan.
When using both allowed and disabled extensions, this one has higher priority, so file will not be checked.
upper_excluded_items_tooltip =
Hariç tutulan öğeler * joker karakterini içermeli ve virgülle ayrılmalıdır.
Bu işlev, Hariç Tutulan Dizinlerden daha yavaştır, bu yüzden dikkatli kullanın.
upper_excluded_items = Hariç Tutulan Öğeler:
upper_allowed_extensions = İzin Verilen Uzantılar:
upper_excluded_extensions = Disabled Extensions:
# Popovers
popover_select_all = Tümünü seç
popover_unselect_all = Tümünün seçimini kaldır
popover_reverse = Seçimi Ters Çevir
popover_select_all_except_oldest = En eski olan hariç hepsini seç
popover_select_all_except_newest = En yeni olan hariç hepsini seç
popover_select_one_oldest = En eski olanı seç
popover_select_one_newest = En yeni olanı seç
popover_select_custom = Özel girdi ile seçim yap
popover_unselect_custom = Özel girdi ile seçimi kaldır
popover_select_all_images_except_biggest = En büyük olan hariç hepsini seç
popover_select_all_images_except_smallest = En küçük olan hariç hepsini seç
popover_custom_path_check_button_entry_tooltip =
Kayıtları, kısmi yol girdisine göre seçer.
Örnek kullanım:
/home/fatih/kavalci.txt dosyası, /home/fat* girdisi ile bulunabilir
popover_custom_name_check_button_entry_tooltip =
Kayıtları, kısmi dosya adı girdisine göre seçer.
Örnek kullanım:
/home/fatih/kavalci.txt dosyası, *val* girdisi ile bulunabilir
popover_custom_regex_check_button_entry_tooltip =
Kayıtları, belirtilen Regex girdisine göre seçer.
Bu mod ile aranan metin, tam yol dosya adıdır.
Örnek kullanım:
/home/fatih/kavalcı.txt dosyası, h/ka[a-z]+ ile bulunabilir
Bu işlev, varsayılan Rust regex uygulamasını kullanır.
Daha fazla bilgi için bakınız: https://docs.rs/regex.
popover_custom_case_sensitive_check_button_tooltip =
Büyük/Küçük harfe duyarlı algılamayı etkinleştirir.
Etkisizleştirilir ise;
/home/fatih/* girdisi, hem /home/fatih/ hem de /home/FaTiH dizinlerini algılar.
popover_custom_not_all_check_button_tooltip =
Gruptaki tüm kayıtların seçilmesini engeller.
Bu varsayılan olarak etkindir. Çünkü, çoğu durumda hem asıl dosyayı hem de kopyaları
silmek istemezsiniz. En az bir dosya bırakmak istersiniz.
UYARI: Bir gruptaki tüm sonuçlar zaten elle seçilmiş ise bu ayar çalışmaz.
popover_custom_regex_path_label = Yol
popover_custom_regex_name_label = Ad
popover_custom_regex_regex_label = Regex Yolu + Adı
popover_custom_case_sensitive_check_button = Büyük/Küçük harfe duyarlı
popover_custom_all_in_group_label = Gruptaki tüm kayıtları seçme
popover_custom_mode_unselect = Özel Girdi ile Seçimi Kaldır
popover_custom_mode_select = Özel Girdi ile Seç
popover_sort_file_name = Dosya adı
popover_sort_folder_name = Klasör adı
popover_sort_full_name = Tam ad
popover_sort_size = Boyut
popover_sort_selection = Seçim
popover_invalid_regex = Regex geçersiz (hatalı)
popover_valid_regex = Regex geçerli (doğru)
# Bottom buttons
bottom_search_button = Ara
bottom_select_button = Seç
bottom_delete_button = Sil
bottom_save_button = Kaydet
bottom_symlink_button = Sembolik bağlantı
bottom_hardlink_button = Sabit bağlantı
bottom_move_button = Taşı
bottom_sort_button = Sırala
bottom_search_button_tooltip = Aramayı başlatır.
bottom_select_button_tooltip = Kayıtları seçer. Yalnızca seçilen dosyalara/klasörlere işlem uygulanabilir.
bottom_delete_button_tooltip = Seçili dosyaları/klasörleri siler.
bottom_save_button_tooltip = Aramayla ilgili verileri dosyaya kaydeder.
bottom_symlink_button_tooltip =
Sembolik bağlantılar oluşturur.
Yalnızca bir gruptaki en az iki sonuç seçildiğinde çalışır.
Birincisi değişmez, ikincisi ve sonrası birinciye sembolik olarak bağlanır.
bottom_hardlink_button_tooltip =
Sabit bağlantılar oluşturur.
Yalnızca bir gruptaki en az iki sonuç seçildiğinde çalışır.
Birincisi değişmez, ikincisi ve sonrası birinciye sabit olarak bağlanır.
bottom_hardlink_button_not_available_tooltip =
Hardlinkler oluştur.
Düğme devre dışı, çünkü hardlinkler oluşturulamaz.
Hardlinkler Windows üzerinde yalnızca administrator ayrıcalıklarıyla çalışır, bu yüzden uygulamayı yönetici olarak çalıştırdığınızdan emin olun.
Eğer uygulama zaten yeterli ayrıcalıklarla çalışıyorsa Github üzerindeki benzer sorunları gözden geçirin.
bottom_move_button_tooltip =
Dosyaları seçilen dizine taşır.
Dizin ağacını korumadan tüm dosyaları dizine taşır.
Aynı ada sahip iki dosyayı klasöre taşımaya çalışırken, ikincisi başarısız olur ve hata gösterir.
bottom_sort_button_tooltip = Dosyaları/Dizinleri seçilen metoda göre sırala.
bottom_show_errors_tooltip = Alt çıktı panelini göster/gizle.
bottom_show_upper_notebook_tooltip = Üst denetim panelini göster/gizle.
# Progress Window
progress_stop_button = Durdur
progress_stop_additional_message = İşlem durduruldu.
# About Window
about_repository_button_tooltip = Kaynak kodu depo sayfasına bağlanır.
about_donation_button_tooltip = Bağış sayfasına bağlanır.
about_instruction_button_tooltip = Kullanım yönergeleri sayfasına bağlanır.
about_translation_button_tooltip = Czkawka çevirileriyle Crowdin sayfasına bağlanır. Resmi olarak Lehçe ve İngilizce desteklenmektedir.
about_repository_button = Depo
about_donation_button = Bağış
about_instruction_button = Yönerge
about_translation_button = Çeviri
# Header
header_setting_button_tooltip = Ayarlar iletişim kutusunu açar.
header_about_button_tooltip = Czkawka hakkında bilgi içeren iletişim kutusunu açar.
# Settings
## General
settings_number_of_threads = Kullanılan iş parçacığı sayısı
settings_number_of_threads_tooltip = Kullanılan iş parçacığı sayısı, 0 tüm uygun iş parçacıklarının kullanılacağı anlamına gelir.
settings_label_restart = Ayarları uygulamak için uygulamayı yeniden başlatmanız gerekir!
settings_ignore_other_filesystems = Öteki dosya sistemlerini yoksay (sadece Linux)
settings_ignore_other_filesystems_tooltip =
Aranan dizinlerle aynı dosya sisteminde olmayan dosyaları yoksayar.
Linux'ta find komutundaki -xdev seçeneği ile aynı şekilde çalışır.
settings_save_at_exit_button_tooltip = Uygulamayı kapatırken yapılandırmayı dosyaya kaydeder.
settings_load_at_start_button_tooltip =
Uygulamayı açarken yapılandırmayı dosyadan yükler.
Etkinleştirilmezse, varsayılan ayarlar kullanılır.
settings_confirm_deletion_button_tooltip = Sil düğmesine tıklandığında onay iletişim kutusunu gösterir.
settings_confirm_link_button_tooltip = Sabit/sembolik bağlantı düğmesine tıklandığında onay iletişim kutusunu göster.
settings_confirm_group_deletion_button_tooltip = Gruptan tüm kayıtları silmeye çalışırken uyarı iletişim kutusunu gösterir.
settings_show_text_view_button_tooltip = Kullanıcı arayüzünün altında çıktı panelini gösterir.
settings_use_cache_button_tooltip = Dosya önbelleğini kullanır.
settings_save_also_as_json_button_tooltip =
Önbelleği (kullanıcı tarafından okunabilir) JSON biçiminde kaydeder.
İçeriğini değiştirmek mümkündür. İkili biçim önbelleği (bin uzantılı) eksikse,
bu dosyadaki önbellek uygulama tarafından otomatik olarak okunacaktır.
settings_use_trash_button_tooltip = Dosyaları kalıcı olarak silmek yerine çöp kutusuna taşır.
settings_language_label_tooltip = Kullanıcı arayüzü dilini değiştirir.
settings_save_at_exit_button = Uygulamayı kapatırken yapılandırmayı kaydet
settings_load_at_start_button = Uygulamayı açarken yapılandırmayı yükle
settings_confirm_deletion_button = Herhangi bir dosyayı silerken onay iletişim kutusunu göster
settings_confirm_link_button = Herhangi bir dosyaya sabit/sembolik bağlantı yapıldığında onay iletişim kutusunu göster
settings_confirm_group_deletion_button = Gruptaki tüm dosyaları silerken onay iletişim kutusunu göster
settings_show_text_view_button = Alt çıktı panelini göster
settings_use_cache_button = Önbelleği kullan
settings_save_also_as_json_button = Önbelleği JSON dosyası olarak da kaydet
settings_use_trash_button = Silinen dosyaları çöp kutusuna taşı
settings_language_label = Dil
settings_multiple_delete_outdated_cache_checkbutton = Güncel olmayan önbellek girişlerini otomatik olarak sil
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
Var olmayan dosyalara işaret eden eski önbellek girdilerini siler.
Etkinleştirildiğinde, uygulama kayıtları yüklerken tüm kayıtların geçerli dosyalara
işaret etmesini sağlar (bozuk olanlar yoksayılır).
Bunu devre dışı bırakmak, harici sürücülerdeki dosyaları tararken yardımcı olacaktır,
bu nedenle bunlarla ilgili önbellek girdileri bir sonraki taramada temizlenmez.
Önbellekte yüzbinlerce kayıt olması durumunda, taramanın başlangıcında/sonunda
önbellek yükleme/kaydetme işlemini hızlandıracak olan bu özelliği etkinleştirmeniz önerilir.
settings_notebook_general = Genel
settings_notebook_duplicates = Eş Dosyalar
settings_notebook_images = Benzer Resimler
settings_notebook_videos = Benzer Videolar
## Multiple - settings used in multiple tabs
settings_multiple_image_preview_checkbutton_tooltip = Sağ tarafta önizlemeyi gösterir (bir resim dosyası seçiliyken).
settings_multiple_image_preview_checkbutton = Resim önizlemesini göster
settings_multiple_clear_cache_button_tooltip =
Güncel olmayan girişlerin önbelleğini el ile temizleyin.
Bu, yalnızca otomatik temizleme devre dışı bırakılmışsa kullanılmalıdır.
settings_multiple_clear_cache_button = Remove outdated results from cache.
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
Hepsi aynı verilere işaret ediyorsa (sabit bağlantılıysa), biri dışındaki tüm dosyaları gizler.
Örnek: (Diskte) belirli verilere sabit bağlantılı yedi dosya ve aynı veriye ancak farklı
bir düğüme sahip bir farklı dosya olması durumunda, yinelenen bulucuda yalnızca bir benzersiz dosya ve
sabit bağlantılı dosyalardan bir dosya gösterilecektir.
settings_duplicates_minimal_size_entry_tooltip =
Önbelleğe alınacak minimum dosya boyutunu ayarlayın.
Daha küçük bir değer seçmek daha fazla kayıt üretecektir.
Bu, aramayı hızlandıracak, ancak önbellek yüklemeyi/kaydetmeyi yavaşlatacaktır.
settings_duplicates_prehash_checkbutton_tooltip =
Yinelenmeyen sonuçların daha önce reddedilmesine izin veren kısmi-SUÇ
(dosyanın küçük bir bölümünden hesaplanan bir SUÇ) değerinin önbelleğe alınmasını sağlar.
Bazı durumlarda yavaşlamaya neden olabileceğinden varsayılan olarak devre dışıdır.
Aramayı birden çok kez hızlandırabileceğinden, yüz binlerce veya milyonlarca dosyayı
tararken kullanılması şiddetle tavsiye edilir.
settings_duplicates_prehash_minimal_entry_tooltip = Önbelleğe alınacak girişlerin minimum boyutu.
settings_duplicates_hide_hard_link_button = Sabit bağlantıları gizle (yalnızca Linux ve macOS)
settings_duplicates_prehash_checkbutton = kısmi-SUÇ önbelleği kullan
settings_duplicates_minimal_size_cache_label = Önbelleğe kaydedilen minimum dosya boyutu (bayt cinsinden):
settings_duplicates_minimal_size_cache_prehash_label = kısmi-SUÇ önbelleğine kaydedilen minimum dosya boyutu (bayt cinsinden):
## Saving/Loading settings
settings_saving_button_tooltip = Geçerli ayar yapılandırmasını dosyaya kaydeder.
settings_loading_button_tooltip = Dosyadan ayarları yükler ve geçerli yapılandırmayı bunlarla değiştirir.
settings_reset_button_tooltip = Geçerli yapılandırmayı varsayılana sıfırlar.
settings_saving_button = Yapılandırmayı kaydet
settings_loading_button = Yapılandırma yükle
settings_reset_button = Yapılandırmayı sıfırla
## Opening cache/config folders
settings_folder_cache_open_tooltip =
Önbellek txt dosyalarının depolandığı klasörü açar.
Önbellek dosyalarının değiştirilmesi geçersiz sonuçların gösterilmesine neden olabilir.
Ancak, büyük miktarda dosyayı farklı bir konuma taşırken yolu değiştirmek zaman kazandırabilir.
Dosyaları tekrar taramaktan zaman kazanmak için bu dosyaları bilgisayarlar arasında
kopyalayabilirsiniz (tabii ki benzer dizin yapısına sahiplerse).
Önbellekte sorun olması durumunda bu dosyalar kaldırılabilir. Uygulama onları
otomatik olarak yeniden oluşturacaktır.
settings_folder_settings_open_tooltip =
Czkawka yapılandırmasının depolandığı klasörü açar.
UYARI: Yapılandırmayı elle değiştirmek iş akışınızı bozabilir.
settings_folder_cache_open = Önbellek klasörünü aç
settings_folder_settings_open = Ayarlar klasörünü aç
# Compute results
compute_stopped_by_user = Arama, kullanıcı tarafından durduruldu.
compute_found_duplicates_hash_size = { $number_groups } grupta, { $size } yer kaplayan, toplam { $number_files } adet kopya bulundu.
compute_found_duplicates_name = { $number_groups } grupta, { $number_files } adet kopya bulundu.
compute_found_empty_folders = { $number_files } adet boş klasör bulundu.
compute_found_empty_files = { $number_files } adet boş dosya bulundu.
compute_found_big_files = { $number_files } adet büyük/küçük dosya bulundu.
compute_found_temporary_files = { $number_files } adet geçici dosya bulundu.
compute_found_images = { $number_groups } grupta, { $number_files } adet benzer resim bulundu.
compute_found_videos = { $number_groups } grupta, { $number_files } adet benzer video bulundu.
compute_found_music = { $number_groups } grupta, { $number_files } adet benzer müzik dosyası bulundu.
compute_found_invalid_symlinks = { $number_files } adet geçersiz sembolik bağlantı bulundu.
compute_found_broken_files = { $number_files } adet bozuk dosya bulundu.
compute_found_bad_extensions = { $number_files } adet geçersiz uzantıya sahip dosya bulundu.
# Progress window
progress_scanning_general_file = { $file_number } dosya tarandı.
progress_scanning_extension_of_files = { $file_checked }/{ $all_files } dosyanın uzantısı kontrol edildi.
progress_scanning_broken_files = { $file_checked }/{ $all_files } dosya kontrol edildi.
progress_scanning_video = { $file_checked }/{ $all_files } videonun SUÇ kaydı oluşturuldu. ;-)
progress_scanning_image = { $file_checked }/{ $all_files } resmin SURÇ kaydı oluşturuldu. ;-)
progress_comparing_image_hashes = { $file_checked }/{ $all_files } resim SURÇ kaydı karşılaştırıldı.
progress_scanning_music_tags_end = { $file_checked }/{ $all_files } müzik dosyasının etiketleri karşılaştırıldı.
progress_scanning_music_tags = { $file_checked }/{ $all_files } müzik dosyasının etiketleri okundu.
progress_scanning_music_content_end = Müzik dosyası { $file_checked }/{ $all_files } için parmak izi karşılaştırılıyor
progress_scanning_music_content = Müzik dosyası { $file_checked }/{ $all_files } için parmak izi hesaplanıyor
progress_scanning_empty_folders = { $folder_number } klasör tarandı.
progress_scanning_size = { $file_number } dosyanın boyutu tarandı.
progress_scanning_size_name = { $file_number } dosyasının ismi ve boyutu aranıyor
progress_scanning_name = { $file_number } dosyanın adı tarandı.
progress_analyzed_partial_hash = { $file_checked }/{ $all_files } dosyanın kısmi-SUÇ kaydı analiz edildi. ;-)
progress_analyzed_full_hash = { $file_checked }/{ $all_files } dosyanın tam SUÇ kaydı analiz edildi. ;-)
progress_prehash_cache_loading = Loading prehash cache
progress_prehash_cache_saving = Saving prehash cache
progress_hash_cache_loading = Loading hash cache
progress_hash_cache_saving = Saving hash cache
progress_cache_loading = Loading cache
progress_cache_saving = Saving cache
progress_current_stage = Geçerli Aşama: { " " }
progress_all_stages = Tüm Aşamalar: { " " }
# Saving loading
saving_loading_saving_success = Yapılandırma { $name } dosyasına kaydedildi.
saving_loading_saving_failure = Yapılandırma verileri { $name } dosyasına kaydedilemedi.
saving_loading_reset_configuration = Geçerli yapılandırma temizlendi.
saving_loading_loading_success = Uygulama yapılandırması düzgünce yüklendi.
saving_loading_invalid_string = "{ $key }" anahtarı için geçersiz sonuç bulundu. "{ $result }" bir dize(tümce) değil.
saving_loading_invalid_int = "{ $key }" anahtarı için geçersiz sonuç bulundu. "{ $result }" tam sayı değil.
saving_loading_invalid_bool = "{ $key }" anahtarı için geçersiz sonuç bulundu. "{ $result }" D/Y türünde değil.
saving_loading_decode_problem_bool = "{ $key }" anahtarından D/Y kodu çözülemedi, "{ $result }" bulundu ancak izin verilen değerler 0, 1, doğru veya yanlış.
saving_loading_saving_same_keys = Ayar, yinelenen "{ $key }" anahtarıyla kaydedilmeye çalışılıyor.
saving_loading_failed_to_get_home_directory = Yapılandırma dosyasını açmak/kaydetmek için /home dizinine erşilemedi.
saving_loading_folder_config_instead_file = "{ $path }" yolunda kaydetme yapılandırma dosyası oluşturulamıyor veya açılamıyor çünkü zaten bir klasör var.
saving_loading_failed_to_create_configuration_folder = Yapılandırma klasörü "{ $path }" dizini oluşturulamadı, nedeni: "{ $reason }".
saving_loading_failed_to_create_config_file = "{ $path }" dizininde yapılandırma dosyası oluşturulamadı, nedeni: "{ $reason }".
saving_loading_failed_to_read_config_file = "{ $path }" dizininden yapılandırma dosyası yüklenemiyor, böyle dosya yok ya da bir dosya değil.
saving_loading_failed_to_read_data_from_file = "{ $path }" dosyasından veri okunamıyor, nedeni: "{ $reason }".
saving_loading_orphan_data = "{ $line }" satırda "{ $data }" ilişiksiz veri bulundu.
saving_loading_not_valid = "{ $data }" ayarı geçerli uygulama sürümünde bulunmuyor.
# Invalid symlinks
invalid_symlink_infinite_recursion = Sonsuz özyineleme
invalid_symlink_non_existent_destination = Var olmayan hedef dosya
# Other
selected_all_reference_folders = Tüm dizinler, "Başvuru Klasörü" olarak ayarlandığında arama başlatılamaz.
searching_for_data = İşleminiz yürütülüyor, bu biraz zaman alabilir, lütfen bekleyin...
text_view_messages = MESAJLAR
text_view_warnings = UYARILAR
text_view_errors = HATALAR
about_window_motto = Bu programın kullanımı ücretsizdir ve her zaman öyle kalacaktır.
# Various dialog
dialogs_ask_next_time = Bir dahaki sefere sor
delete_file_failed = { $name } dosyası silinemedi, nedeni: { $reason }
delete_title_dialog = Silmeyi onaylayın.
delete_question_label = Dosyaları silmek istediğinizden emin misiniz?
delete_all_files_in_group_title = Gruptaki tüm dosyaları silmeyi onaylayın.
delete_all_files_in_group_label1 = Kimi gruplarda tüm kayıtlar seçilir.
delete_all_files_in_group_label2 = Bunları silmek istediğinizden emin misiniz?
delete_folder_failed = { $dir } klasörü; bulunmadığı, izniniz olmadığı veya klasör boş olmadığı için silinemedi.
delete_items_label = { $items } dosya silinecek.
delete_items_groups_label = { $groups } gruptan { $items } dosya silinecek.
hardlink_failed = Sabit bağlantı kurulamadı.
hard_sym_invalid_selection_title_dialog = Kimi gruplarda geçersiz seçim
hard_sym_invalid_selection_label_1 = Bazı gruplarda sadece bir kayıt seçilmiştir ve bu kayıt yok sayılacaktır.
hard_sym_invalid_selection_label_2 = Bu dosyaları sabit/sembolik bağlayabilmek için gruptaki en az iki sonucun seçilmesi gerekir.
hard_sym_invalid_selection_label_3 = Gruptaki ilk resim asıl olarak tanınır ve değiştirilmez, ancak ikinci ve sonrakiler değiştirilir.
hard_sym_link_title_dialog = Bağlantı vermeyi onaylayın
hard_sym_link_label = Bu dosyaları bağlamak istediğinizden emin misiniz?
move_folder_failed = { $name } klasörü taşınamadı, nedeni: { $reason }
move_file_failed = { $name } dosyası taşınamadı, nedeni: { $reason }
move_files_title_dialog = Eş dosyaları taşımak istediğiniz klasörü seçin
move_files_choose_more_than_1_path = Eş dosyaları taşıyabilmek için yalnızca bir yol seçilebilir, { $path_number } seçildi.
move_stats = { $num_files }/{ $all_files } öğe düzgün şekilde taşındı.
save_results_to_file = Saved results both to txt and json files into { $name } folder.
search_not_choosing_any_music = HATA: Müzik araması için en az bir onay kutusu seçmelisiniz.
search_not_choosing_any_broken_files = HATA: Bozuk dosya araması için en az bir onay kutusu seçmelisiniz.
include_folders_dialog_title = Aranacak Klasörler
exclude_folders_dialog_title = Hariç Tutulan Klasörler
include_manually_directories_dialog_title = Dizini elle ekle
cache_properly_cleared = Önbellek, uygun şekilde temizlendi.
cache_clear_duplicates_title = Eş dosyalar önbelleğini temizle
cache_clear_similar_images_title = Benzer resimler önbelleğini temizle
cache_clear_similar_videos_title = Benzer videolar önbelleğini temizle
cache_clear_message_label_1 = Güncel olmayan girişleri önbellekten temizlemek istiyor musunuz?
cache_clear_message_label_2 = Bu işlem, geçersiz dosyalara işaret eden tüm önbellek girişlerini kaldıracak.
cache_clear_message_label_3 = Bu, önbelleğe yükleme/kaydetme işlemini biraz hızlandırabilir.
cache_clear_message_label_4 = UYARI: İşlem, takılı olmayan harici sürücülerden önbelleğe alınmış tüm verileri kaldıracaktır. Yani her SUÇ kaydının yeniden oluşturulması gerekecek. ;-)
# Show preview
preview_image_resize_failure = { $name } adlı resim yeniden boyutlandırılamadı.
preview_image_opening_failure = { $name } adlı resim dosyasıılamadı, nedeni: { $reason }
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = Grup: { $current_group }/{ $all_groups } ({ $images_in_group } resim)
compare_move_left_button = <-
compare_move_right_button = ->

@ -1,6 +1,6 @@
# Window titles
window_settings_title = Опції
window_main_title = Czkawka (гикавка)
window_settings_title = Налаштування
window_main_title = Czkawka («Гикавка»)
window_progress_title = Сканування
window_compare_images = Порівняння зображень
# General
@ -8,48 +8,84 @@ general_ok_button = Гаразд
general_close_button = Закрити
# Main window
music_title_checkbox = Найменування
music_artist_checkbox = Художник
music_album_title_checkbox = Назва альбому
music_album_artist_checkbox = Виконавець альбому
music_artist_checkbox = Виконавець
music_year_checkbox = Рік
music_bitrate_checkbox = Бітрейт
music_genre_checkbox = Жанр
music_length_checkbox = Тривалість
music_comparison_checkbox = Приблизне порівняння
music_checking_by_tags = Мітки
music_checking_by_content = Зміст
same_music_seconds_label = Мінімальна тривалість фрагменту
same_music_similarity_label = Максимальна різниця
same_music_tooltip =
Пошук подібних музичних файлів за його вмістом може бути налаштований за налаштуванням:
- Мінімальний час фрагменту, після якого музичні файли можна визначити як схожий
- Максимальна різниця між двома тестовими фрагментами
—Що ключові з хороших результатів - знайти розумні комбінації цих параметрів, за умов.
Встановлення мінімального часу на 5 сек і максимальна різниця складає 1.0, буде шукати майже однакові фрагменти у файлах.
Час 20 і максимальна різниця в 6.0, з іншого боку, добре працює для пошуку реміксиксів/живу версії і т. д.
За замовчуванням, кожен музичний файл порівнюється один з одним, і це може зайняти багато часу при тестуванні багатьох файлів, так що використовувати референтні папки і вказати, які файли слід порівнювати один з одним (з тією ж кількістю файлів, порівняння відбитків пальців буде швидше 4x, ніж без стандартних папок).
music_comparison_checkbox_tooltip =
Він шукає схожі музичні файли використовуючи AI, який використовує машинне навчання для видалення дужок з фрази, наприклад за допомогою цієї опції увімкнено, файли у питанні будуть розглядатися повтори:
Шукає схожі музичні файли за допомогою ШІ, що використовує машинне навчання для видалення дужок із фраз. Наприклад, якщо ця опція увімкнена, наступні файли будуть вважатися дублікатами:
Świędziżłób --- Świędziżłób (Remix Lato 2021)
duplicate_case_sensitive_name = З урахуванням регістру
duplicate_case_sensitive_name_tooltip =
Коли увімкнено, записи групуються, тільки якщо вони повністю збігаються імена з точністю до кожного символу. Наприклад, «ХІТ Дискотека» не збігається з "хіт дискотека".
Коли вимкнено, записи групуються незалежно від того, великі або малі літери використовувалися при написанні. Наприклад, «ХІТ Дискотека», «хіт дискотека», «хІт ДиСкОтЕКа» будуть еквівалентні.
duplicate_mode_size_name_combo_box = Розмір і ім'я
duplicate_mode_name_combo_box = Ім'я
duplicate_mode_size_combo_box = Розмір
duplicate_mode_hash_combo_box = Хеш
duplicate_hash_type_tooltip =
Czkawka пропонує 3 типи хешу, які можуть бути використані:
У програмі Czkawka можна використовувати один із трьох алгоритмів хешування:
Blake3 — криптографічна хеш-функція. Використовується за замовчуванням, оскільки дуже швидка.
CRC32 — проста хеш-функція. Ще швидше, ніж Blake3, але можливі рідкісні колізії хешів різних файлів.
XXH3 — функція, схожа за продуктивністю і надійністю хеша на Blake3 (але вона не криптографічна), тому її можна використовувати замість Blake3.
duplicate_check_method_tooltip =
На цей час Czkawka пропонує три методи пошуку дублікатів:
Blake3 - криптографічна геш-функція. Він використовується як хеш-алгоритм за замовчуванням, тому що він дуже швидкий.
Ім'я шукає файли з однаковими іменами.
CRC32 - проста геш-функція. Він повинен бути швидшим, ніж Blake3, але, ймовірно, має дуже рідко деякі зіткнення.
Розмір шукає файли однакового розміру.
XXH3 - дуже схожий на випадок продуктивності та якості хешування для Blake3, тому такі режими можна легко використовувати.
duplicate_check_method_tooltip =
На даний момент Czkawka пропонує три типи методу для пошуку дублікатів:
Хеш шукає файли з однаковим вмістом. Цей режим хешує файл, а потім порівнює хеш для пошуку дублікатів. Цей режим є найнадійнішим способом пошуку. Додаток активно використовує кеш, тому друге та подальші сканування одних і тих же даних повинні бути набагато швидшими, ніж перше.
image_hash_size_tooltip =
Кожне перевірене зображення видає спеціальний хеш, який можна порівнювати один з одним, і невелика різниця між ними означає, що ці зображення є схожими.
Ім'я - Пошук файлів, які мають однакове ім'я.
8 хешів дуже добре знайти зображення, які є трохи схожими на оригінал. При великому наборі зображень (>1000) значення дає велику кількість хибних позитивних результатів, так що я рекомендую використовувати більший розмір хешу у цьому випадку.
Розмір - видаляє файли, які мають однаковий розмір.
16 - це хеш за замовчуванням, який є досить хороший компроміс між пошуком навіть мало схожих зображень і маючи тільки невелику кількість хеш-зіткнень.
Hash - Шукає файли, які мають той самий вміст. Цей режим геш-файл, і пізніше порівняйте цей хеш, щоб знайти дублікати. Цей режим є найбезпечнішим способом пошуку дублікатів. Додатково використання кешу утилізається, тому подальше сканування тих самих даних мають бути набагато швидшими першими.
image_hash_size_tooltip =
Чкавка пропонує змінювати розмір згенерованої хешу для кожного зображення. Big-хеш дозволяє знаходити зображення з меншою кількістю відмінностей між зображеннями, але також він є трохи повільнішим.
32 і 64 пеші знайдуть лише дуже схожі зображення, але не повинні мати практично неправильних позитивних результатів (можливо, окрім деяких зображень з альфа каналом).
image_resize_filter_tooltip =
To compute hash of image, the library must first resize it.
Значення за замовчуванням для хешу - 8 байт, що дозволяє знайти дуже подібні та різні зображення. 16 і 32 хешів слід використовувати тільки для майже ідентичних образів. 64 байти не слід використовувати, за винятком ситуації, коли потрібно дуже мало відмінностей
image_resize_filter_tooltip = Для обчислення хеш-зображення бібліотека повинна спочатку змінити розмір. Залежно від обраного алгоритму, результатом цього зображення буде виглядати зовсім інакше. Найшвидший алгоритм для використання, але також той, який дає найгірші результати є Найближчими.
image_hash_alg_tooltip = Користувачі можуть вибирати один з багатьох алгоритмів обчислення. Кожен має і сильні і слабкі точки, і іноді дасть кращі результати для різних зображень, таким чином, щоб обрати найкраще, необхідно ручне тестування.
main_notebook_image_fast_compare = Швидко порівняти
main_notebook_image_fast_compare_tooltip =
Пошук попелу пришвидшення і порівняння хешів.
Depend on chosen algorithm, the resulting image used to calculate hash will looks a little different.
У протилежному напрямку до нормального режиму, де кожен хеш порівнюються між собою x рази, де x подібність вибирається користувачем в цьому режимі завжди використовується лише одне порівняння.
The fastest algorithm to use, but also the one which gives the worst results, is Nearest. It is enabled by default, because with 16x16 hash size lower quality it is not really visible.
Рекомендується порівнювати >10000 зображень з нульовою (Дуже високою) схожістю.
main_notebook_duplicates = Дублікати файлів
With 8x8 hash size it is recommended to use a different algorithm than Nearest, to have better groups of images.
image_hash_alg_tooltip =
Користувачі можуть вибирати з одного з багатьох алгоритмів обчислення хешу.
Кожен з них має і сильні і слабкі точки, і іноді може призвести до кращого і іноді гірших результатів для різних зображень.
Таким чином, щоб визначити найкращу для вас, потрібно ручне тестування.
big_files_mode_combobox_tooltip = Дозволяє шукати найменші або найбільші файли
big_files_mode_label = Перевірені файли
big_files_mode_smallest_combo_box = Найменший
big_files_mode_biggest_combo_box = Найбільший
main_notebook_duplicates = Файли-дублікати
main_notebook_empty_directories = Порожні каталоги
main_notebook_big_files = Великі файли
main_notebook_empty_files = Порожні файли
@ -57,145 +93,186 @@ main_notebook_temporary = Тимчасові файли
main_notebook_similar_images = Схожі зображення
main_notebook_similar_videos = Схожі відео
main_notebook_same_music = Музичні дублікати
main_notebook_symlinks = Неприпустимі символічні посилання
main_notebook_symlinks = Пошкоджені симв. посилання
main_notebook_broken_files = Пошкоджені файли
main_tree_view_column_file_name = Назва файлу
main_tree_view_column_folder_name = Ім'я папки
main_notebook_bad_extensions = Помилкові розширення
main_tree_view_column_file_name = Ім'я файлу
main_tree_view_column_folder_name = Ім'я теки
main_tree_view_column_path = Шлях
main_tree_view_column_modification = Дата зміни
main_tree_view_column_size = Розмір
main_tree_view_column_similarity = Подібність
main_tree_view_column_dimensions = Розміри
main_tree_view_column_title = Найменування
main_tree_view_column_artist = Художник
main_tree_view_column_artist = Виконавець
main_tree_view_column_year = Рік
main_tree_view_column_album_title = Назва альбому
main_tree_view_column_album_artist = Виконавець альбому
main_tree_view_column_bitrate = Бітрейт
main_tree_view_column_length = Тривалість
main_tree_view_column_genre = Жанр
main_tree_view_column_symlink_file_name = Ім'я файла символьного посилання
main_tree_view_column_symlink_folder = Симлнік
main_tree_view_column_symlink_folder = Тека символічного посилання
main_tree_view_column_destination_path = Шлях призначення
main_tree_view_column_type_of_error = Тип помилки
main_label_check_method = Перевірити метод
main_tree_view_column_current_extension = Поточне розширення
main_tree_view_column_proper_extensions = Належне розширення
main_label_check_method = Метод перевірки
main_label_hash_type = Тип хешу
main_label_hash_size = Розмір хешу
main_label_size_bytes = Розмір(байт)
main_label_size_bytes = Розмір (байт)
main_label_min_size = Мін
main_label_max_size = Макс
main_label_shown_files = Кількість показаних файлів
main_label_resize_algorithm = Змінити розмір алгоритму
main_label_similarity = Подібність{ " " }
check_button_general_same_size = Ігнорувати той самий розмір
check_button_general_same_size_tooltip = Ігнорувати від результатів, файли, які мають ідентичний розмір - зазвичай це 1:1 дублікатів
main_label_size_bytes_tooltip = Розмір файлів, які будуть використовуватися в скануванні
main_label_resize_algorithm = Алгоритм масштабування
main_label_similarity = Подібність{ " " }
main_check_box_broken_files_audio = Звук
main_check_box_broken_files_pdf = Pdf
main_check_box_broken_files_archive = Архів
main_check_box_broken_files_image = Зображення
check_button_general_same_size = Ігнорувати однаковий розмір
check_button_general_same_size_tooltip = Ігнорувати файли з однаковим розміром у результаті - зазвичай це 1:1 дублікатів
main_label_size_bytes_tooltip = Розмір файлів, які будуть проскановані
# Upper window
upper_tree_view_included_folder_column_title = Знайти теки
upper_tree_view_included_reference_column_title = Теки посилань
upper_tree_view_included_folder_column_title = Папки для пошуку
upper_tree_view_included_reference_column_title = Містить оригінали
upper_recursive_button = Рекурсивний
upper_recursive_button_tooltip = Якщо вибрано, шукати також файли, які не розміщені безпосередньо під вибраними теками.
upper_manual_add_included_button = Ручне додавання
upper_recursive_button_tooltip = Коли увімкнено, будуть шукатися файли, що не знаходяться безпосередньо в корені вибраної папки, тобто в інших підпапках даної папки та їх підпапках.
upper_manual_add_included_button = Прописати вручну
upper_add_included_button = Додати
upper_remove_included_button = Видалити
upper_manual_add_excluded_button = Ручне додавання
upper_add_excluded_button = Додати
upper_remove_excluded_button = Видалити
upper_manual_add_included_button_tooltip = Дозволяє додати назву каталогу для пошуку вручну.
upper_manual_add_included_button_tooltip =
Додавати назву теки для пошуку вручну.
Додайте декілька шляхів відразу, розділіть їх
/home/roman;/home/rozkaz буде додано дві папки/home/roman and /home/rozkaz
upper_add_included_button_tooltip = Додати нову директорію для пошуку.
upper_remove_included_button_tooltip = Видалити теку з пошуку.
upper_manual_add_excluded_button_tooltip = Дозволяє додати виключені назви каталогу вручну.
upper_add_excluded_button_tooltip = Додати теку щоб бути виключеною для пошуку.
upper_remove_included_button_tooltip = Видалити директорію з пошуку.
upper_manual_add_excluded_button_tooltip =
Додавати виключені назви директорії.
Додайте декілька шляхів одночасно, відокремте їх ;
/home/roman;/home/krokiet додасть дві папки/home/roman та /home/keokiet
upper_add_excluded_button_tooltip = Додати каталог, який виключається з пошуку.
upper_remove_excluded_button_tooltip = Видалити каталог з виключених.
upper_notebook_items_configuration = Налаштування елементів
upper_notebook_items_configuration = Параметри пошуку
upper_notebook_excluded_directories = Виключені каталоги
upper_notebook_included_directories = Включені каталоги
upper_allowed_extensions_tooltip =
Дозволені розширення повинні бути розділені комами (по замовчуванню всі доступні).
Macros IMAGE, VIDEO, MUSIC, TEXT який одночасно додає кілька розширень.
Розширення, що включаються, повинні бути розділені комами (за замовчуванням шукаються файли з будь-якими розширеннями).
Макроси IMAGE, VIDEO, MUSIC, TEXT додають одразу кілька розширень.
Приклад використання: «.exe, IMAGE, VIDEO, .rar, 7z» — це означає, що будуть скануватися файли зображень (напр. jpg, png), відео (напр. avi, mp4), exe, rar і 7z.
upper_excluded_extensions_tooltip =
Список вимкнених файлів, які будуть ігноруватися при скануванні.
приклад ".exe, IMAGE, VIDEO, .rar, 7z" - це означає, що зображення (наприклад . jpg, png), video(напр. avi, mp4), exe, rar та 7z файли буде відскановано.
При використанні дозволених і вимкнених розширень, цей файл має більший пріоритет, тому файл не буде відмітити.
upper_excluded_items_tooltip =
Виключені елементи мають містити символ *, який має бути розділений комами.
Це число є повільнішим, ніж виключені каталоги, тому використовуйте його обережно.
Виключені елементи повинні містити маску «*» і бути розділені комами.
Це повільніше, ніж «Виключені каталоги», тому використовуйте обережно.
upper_excluded_items = Виключені елементи:
upper_allowed_extensions = Дозволені розширення:
upper_excluded_extensions = Вимкнені розширення:
# Popovers
popover_select_all = Виділити все
popover_unselect_all = Прибрати всі
popover_reverse = Зворотній вибір
popover_select_all_except_oldest = Вибрати всі крім старіших
popover_select_all_except_newest = Вибрати всі крім найновіших
popover_select_one_oldest = Виберіть один найстаріший
popover_select_one_newest = Оберіть один найновіший
popover_select_all_except_oldest = Вибрати всі, крім старіших
popover_select_all_except_newest = Вибрати всі, крім найновіших
popover_select_one_oldest = Вибрати один найстаріший
popover_select_one_newest = Вибрати один найновіший
popover_select_custom = Вибрати власний
popover_unselect_custom = Скасувати вибір
popover_select_all_images_except_biggest = Вибрати всі, крім найбільших
popover_select_all_images_except_smallest = Вибрати всі крім найменших
popover_select_all_images_except_biggest = Вибрати всі, крім найбільшого
popover_select_all_images_except_smallest = Вибрати всі, крім найменших
popover_custom_path_check_button_entry_tooltip =
Дозволяє вибрати записи за його шляхом.
Вибір записів з урахуванням шляху.
Приклад використання:
/home/pimpek/rzech.txt можна знайти з /home/pim*
Приклад:
/home/pimpek/rzecz.txt можна знайти за допомогою /home/pim*
popover_custom_name_check_button_entry_tooltip =
Дозволяє вибрати записи за іменами файлів.
Вибір записів на ім'я файлів.
Приклад використання:
/usr/ping/pong.txt можна знайти в *ong*
Приклад:
/usr/ping/pong.txt можна знайти за допомогою *ong*
popover_custom_regex_check_button_entry_tooltip =
Дозволяє вибрати записи за вказаним Regex.
Вибір записів за допомогою регулярних виразів.
За допомогою цього режиму пошук в тексті є шлях до імені.
У цьому режимі шуканий текст є шлях з ім'ям.
Приклад:
/usr/bin/ziemniak.txt можна знайти за допомогою виразу /ziem[a-z]+
За замовчуванням використається синтаксис регулярних виразів Rust. Докладніше про це можна прочитати тут: https://docs.rs/regex.
popover_custom_case_sensitive_check_button_tooltip =
Вмикає пошук з урахуванням регістру.
Приклад використання:
/usr/bin/ziemniak. xt можна знайти за допомогою /ziem[a-z]+
Це використовується за замовчуванням regex, щоб прочитати більше про це в https://docs.rs/regex.
При відключеній опції «/home/*» буде відповідати як «/home/roman», так і «/HoMe/roman».
popover_custom_not_all_check_button_tooltip =
Забороняє вибрати всі записи в групі.
Заборона вибору всіх записів у групі.
Це увімкнено за замовчуванням, оскільки у більшості ситуацій користувач не хоче видаляти і оригінальні, і дублювати файли, але хочете залишити принаймні один файл.
Ця опція включена за замовчуванням, тому що в більшості ситуацій вам не треба видаляти і оригінали, і дублікати — зазвичай залишають хоча б один файл.
Увага: це налаштування не працює, якщо користувач не вибрав усі результати у групі вручну.
УВАГА. Цей параметр не працює, якщо ви вже вручну вибрали всі результати групи.
popover_custom_regex_path_label = Шлях
popover_custom_regex_name_label = Ім'я
popover_custom_regex_regex_label = Шлях до регулярного виразу + ім'я
popover_custom_regex_regex_label = Шлях із рег. виразом + ім'я
popover_custom_case_sensitive_check_button = З урахуванням регістру
popover_custom_all_in_group_label = Не вибирати усі записи в групі
popover_custom_mode_unselect = Зняти вибір з користувацьких
popover_custom_mode_select = Вибрати користувача
popover_custom_mode_unselect = Зняти вибір
popover_custom_mode_select = Вибрати власний
popover_sort_file_name = Ім'я файлу
popover_sort_folder_name = Назва папки
popover_sort_full_name = Повне ім'я
popover_sort_size = Розмір
popover_sort_selection = Вибрані об'єкти
popover_invalid_regex = Неприпустимий регулярний вираз
popover_valid_regex = Значення регулярного виразу дійсний
popover_valid_regex = Коректний регулярний вираз
# Bottom buttons
bottom_search_button = Пошук
bottom_select_button = Вибрати
bottom_delete_button = Видалити
bottom_save_button = Зберегти
bottom_symlink_button = Symlink
bottom_hardlink_button = Hardlink
bottom_move_button = Пересунути
bottom_search_button_tooltip = Почніть пошук файлів/тек.
bottom_select_button_tooltip = Вибирає записи. Лише обрані файли/теки можуть бути пізніше оброблені.
bottom_symlink_button = Симв. посилання
bottom_hardlink_button = Жорст. посилання
bottom_move_button = Перемістити
bottom_sort_button = Сортування
bottom_search_button_tooltip = Почати пошук
bottom_select_button_tooltip = Виберіть запис. Тільки вибрані файли/папки будуть доступні для подальшої обробки.
bottom_delete_button_tooltip = Видалити вибрані файли/папки.
bottom_save_button_tooltip = Зберегти дані про пошук у файл
bottom_symlink_button_tooltip =
Створює символічні посилання.
Працює тільки тоді, коли вибрано щонайменше 2 результати в групі.
Перший є незміненим, другий і пізніше є символічними для першого.
Створити символьні посилання.
Працює лише тоді, коли вибрано не менше двох результатів у групі.
Перший результат залишається, а другий та наступні робляться символьними посиланнями на перший.
bottom_hardlink_button_tooltip =
Створює жорсткі посилання.
працює лише тоді, коли вибрано щонайменше 2 результати в групі.
Перший без змін і потім важко з'єднати на перший.
Створити жорсткі посилання.
Працює лише тоді, коли вибрано не менше двох результатів у групі.
Перший результат залишається, а другий та наступні робляться жорсткими посиланнями на перший.
bottom_hardlink_button_not_available_tooltip =
Створити Жорсткі посилання.
кнопка вимкнена, тому що не може бути створена.
Жорсткі посилання працюють тільки з правами адміністратора на Windows, тому не забудьте запустити додаток як адміністратор.
Якщо додаток вже працює з такими привілеями для подібних проблем на GitHub.
bottom_move_button_tooltip =
Переміщує файли до вибраної папки.
Вони копіюють всі файли в папку без збереження дерева каталогів.
При спробі перемістити 2 файли з однаковим іменем до теки, друге - невдача та показати помилку.
bottom_show_errors_tooltip = Показати/приховати панель помилки.
Переміщення файлів до вибраного каталогу.
Копіює всі файли в теку без збереження структури дерева каталогів.
При спробі перемістити два файли з однаковим ім'ям в ту саму теку другий не буде переміщений, і з'явиться повідомлення про помилку.
bottom_sort_button_tooltip = Сортує файли/теки відповідно до вибраного методу.
bottom_show_errors_tooltip = Показати/приховати нижню текстову панель.
bottom_show_upper_notebook_tooltip = Показати/приховати верхню панель блокнота.
# Progress Window
progress_stop_button = Зупинити
progress_stop_additional_message = Припинити запит
# About Window
about_repository_button_tooltip = Посилання на сторінку репозиторію з вихідним кодом.
about_donation_button_tooltip = Посилання на сторінку пожертвування.
about_donation_button_tooltip = Посилання на сторінку пожертви.
about_instruction_button_tooltip = Посилання на сторінку інструкцій.
about_translation_button_tooltip = Посилання на сторінку Crowdin з перекладами додатків. Підтримуються офіційно польські та англійські мови, але будь-яка допомога з іншими мовами буде цінується.
about_translation_button_tooltip = Посилання на сторінку Crowdin із перекладами додатків. Офіційно підтримуються англійська та польська мови.
about_repository_button = Репозиторій
about_donation_button = Пожертва
about_instruction_button = Інструкція
@ -209,79 +286,87 @@ header_about_button_tooltip = Відкриває діалогове вікно
## General
settings_save_at_exit_button_tooltip = Зберігає конфігурацію в файл під час закриття додатку.
settings_number_of_threads = Кількість використаних тем
settings_number_of_threads_tooltip = Кількість використаних потоків; встановіть 0, щоб використовувати всі доступні потоки.
settings_label_restart = Щоб застосувати параметри, необхідно перезапустити додаток!
settings_ignore_other_filesystems = Ігнорувати інші файлові системи (лише Linux)
settings_ignore_other_filesystems_tooltip =
ігнорує файли, які не знаходяться в одній файловій системі, як пошукові каталоги.
Працює те саме, що і параметр -xdev у пошуку команди на Linux
settings_save_at_exit_button_tooltip = Зберегти конфігурацію в файл під час закриття додатку.
settings_load_at_start_button_tooltip =
Завантаження при запуску конфігурації з файлу.
Завантажити конфігурацію з файлу під час відкриття програми.
При виборі цього параметра буде завантажувати стандартні налаштування.
settings_confirm_deletion_button_tooltip = Показувати вікно підтвердження при натисканні на кнопку Видалити.
Якщо не ввімкнено, будуть використовуватися налаштування за замовчуванням.
settings_confirm_deletion_button_tooltip = Показувати вікно підтвердження при натисканні на кнопку видалення.
settings_confirm_link_button_tooltip = Показувати діалогове вікно підтвердження при натисканні на кнопку твердого/символічного посилання.
settings_confirm_group_deletion_button_tooltip = Показує діалогове вікно при спробі видалення всіх записів з групи.
settings_show_text_view_button_tooltip = Показує панель помилки знизу.
settings_use_cache_button_tooltip = Опція, яка дозволяє не використовувати функцію кешу.
settings_save_also_as_json_button_tooltip = Зберегти кеш для читуваного людського JSON формату. Можна змінити його вміст. Кеш з цього файлу буде автоматично читати додатком, якщо буде відсутній бінарний формат (з розширенням bit).
settings_use_trash_button_tooltip = Якщо увімкнено, то він буде видаляти файли в смітник, а не постійно.
settings_language_label_tooltip = Вибір мови інтерфейсу з доступних інтерфейсів.
settings_save_at_exit_button = Зберегти конфігурацію при виході
settings_load_at_start_button = Завантажувати конфігурацію при старті
settings_confirm_group_deletion_button_tooltip = Показувати діалогове вікно при спробі видалення всіх записів з групи.
settings_show_text_view_button_tooltip = Показувати панель тексту в нижній частині інтерфейсу користувача.
settings_use_cache_button_tooltip = Використовувати кеш файлів.
settings_save_also_as_json_button_tooltip = Зберігати кеш у формат JSON (читабельний). Його вміст можна змінювати. Кеш із цього файлу буде автоматично прочитаний програмою, якщо бінарний кеш (з розширенням bin) відсутній.
settings_use_trash_button_tooltip = Перемістити файли в смітник, а не видаляти їх назавжди.
settings_language_label_tooltip = Мова інтерфейсу користувача.
settings_save_at_exit_button = Зберегти конфігурацію під час закриття додатку
settings_load_at_start_button = Завантажити конфігурацію при відкритті програми
settings_confirm_deletion_button = Показувати вікно підтвердження при видаленні будь-якого файлу
settings_confirm_link_button = Показувати вікно підтвердження при складній/символьних посилань будь-які файли
settings_confirm_group_deletion_button = Показувати вікно підтвердження при видаленні всіх файлів групи
settings_show_text_view_button = Показувати нижню текстову панель
settings_use_cache_button = Використання кешу
settings_save_also_as_json_button = Зберегти кеш також у файл JSON
settings_use_cache_button = Використовувати кеш
settings_save_also_as_json_button = Також зберегти кеш у файл JSON
settings_use_trash_button = Перемістити видалені файли в смітник
settings_language_label = Мова
settings_multiple_delete_outdated_cache_checkbutton = Автоматично видаляти застарілі записи кешу
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
Видалення застарілих результатів кешу, які вказують на неіснуючі файли.
Видалити застарілі результати кеша, що вказують на неіснуючі файли.
При включеному додатку впевніться що програма завантажує записи, що всі точки зможуть проігнорувати пошкоджені файли.
Коли опція увімкнена, програма перевіряє під час завантаження записів, чи вказують вони на доступні файли (недостачі файли ігноруються).
Вимкнення цієї опції допоможе сканувати файли на зовнішньому диску, щоб кеш записів про них не буде очищено у наступному скануванні.
Вимкнення цієї опції допомагає при скануванні файлів на зовнішніх носіях, щоб інформація про них не була очищена під час наступного сканування.
Якщо у вас є сотні тисяч записів в кеші, запропоновано включити цю опцію, пришвидшити завантаження кешу і зберегти з початку та кінця сканування.
За наявності сотень тисяч записів у кеші рекомендується увімкнути цю опцію, щоб прискорити завантаження та збереження кешу на початку та в кінці сканування.
settings_notebook_general = Загальні налаштування
settings_notebook_duplicates = Дублює
settings_notebook_duplicates = Дублікати
settings_notebook_images = Схожі зображення
settings_notebook_videos = Схожий відео
## Multiple - settings used in multiple tabs
settings_multiple_image_preview_checkbutton_tooltip = Показує попередній перегляд з правої сторони, при виборі файлу зображення.
settings_multiple_image_preview_checkbutton_tooltip = Показувати попередній перегляд праворуч (якщо вибрано файл зображення).
settings_multiple_image_preview_checkbutton = Показати попередній перегляд зображення
settings_multiple_clear_cache_button_tooltip =
Вручну очистити кеш із застарілих записів.
Слід використовувати тільки якщо автоматичне очищення було вимкнено.
settings_multiple_clear_cache_button = Видалити застарілі результати з кешу зображень
Очищення застарілих записів кешу вручну.
Слід використовувати лише в тому випадку, якщо автоматичне очищення вимкнено.
settings_multiple_clear_cache_button = Видалити застарілі результати з кешу.
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
Приховує всі файли, крім одних, якщо дані знаходяться за однаковими даними(ускладнені).
Приховати всі файли, крім першого, якщо всі вони вказують на ті самі дані (пов'язані жорстким посиланням).
E.g. у випадку, якщо на диску є 7 файлів, які жорстко пов'язані з конкретними даними і іншим файлом з тими ж даними, але різними в той же час, тоді в дублікаті шукач буде видно лише один унікальний файл і один файл з працьовитостей.
Приклад: якщо (на диску) сім файлів пов'язані жорстким посиланням з певними даними, а ще один файл містить ті ж дані, але на іншому inode, то в засобі пошуку дублікатів будуть показані тільки цей останній унікальний файл і один файл, що є жорстким посиланням.
settings_duplicates_minimal_size_entry_tooltip =
Дозволяє встановити мінімальний розмір файлу, який буде кешовано.
Встановити мінімальний розмір файлу, що кешується.
Вибір меншого значення, згенерує більше записів, що дозволить прискорити пошук, але сповільнити завантаження кешу/збереження.
Вибір меншого значення призведе до створення більшої кількості записів. Це прискорить пошук, але сповільнить завантаження/збереження кешу.
settings_duplicates_prehash_checkbutton_tooltip =
Дозволяє кешування інформації з невеликої частини файлу, що дозволяє раніше отримувати не дубльовані результати.
Включає кешування попереднього хеша (prehash), що обчислюється з невеликої частини файлу, що дозволяє швидше виключати з аналізу файли, що відрізняються.
Його вимкнено за замовчуванням, оскільки може призвести до уповільнення деяких ситуацій.
За замовчуванням вимкнено, оскільки в деяких ситуаціях може сповільнюватися.
Рекомендується використовувати його при скануванні сотень тисяч або мільйонів файлів, тому що можна прискорити пошук кілька разів.
Рекомендується використовувати його при скануванні сотень тисяч або мільйонів файлів, оскільки це може прискорити пошук в рази.
settings_duplicates_prehash_minimal_entry_tooltip = Мінімальний розмір кешованого запису.
settings_duplicates_hide_hard_link_button = Приховати жорсткі посилання (лише Linux та MacOS)
settings_duplicates_prehash_checkbutton = Використовувати вбудований кеш
settings_duplicates_minimal_size_cache_label = Мінімальний розмір файлів в байтах, збережених до кешу
settings_duplicates_minimal_size_cache_prehash_label = Мінімальний розмір файлів в байтах, збережених для кешу
settings_duplicates_hide_hard_link_button = Приховати жорсткі посилання (лише Linux та macOS)
settings_duplicates_prehash_checkbutton = Кешувати попередній хеш
settings_duplicates_minimal_size_cache_label = Мінімальний розмір (байт) файлів, що кешуються
settings_duplicates_minimal_size_cache_prehash_label = Мінімальний розмір (байт) файлів для кешування попереднього хешу
## Saving/Loading settings
settings_saving_button_tooltip = Зберегти поточні налаштування у файл.
settings_loading_button_tooltip = Завантажити параметри з файлу і замінити поточні налаштування.
settings_reset_button_tooltip = Скидання поточної конфігурації до стандартних.
settings_reset_button_tooltip = Скинути поточні налаштування до стандартних значень.
settings_saving_button = Зберегти конфігурацію
settings_loading_button = Завантажити конфігурацію
settings_reset_button = Скидання налаштувань
@ -289,117 +374,127 @@ settings_reset_button = Скидання налаштувань
## Opening cache/config folders
settings_folder_cache_open_tooltip =
Відкриває папку, де зберігається txt-файли з кешем.
Відкрити папку, де зберігаються текстові файли кеша.
Змінення їх може призвести до відображення недійсних результатів, але також зміна бази даних.. Шлях може зберегти час при переміщенні великої кількості файлів до іншого місця.
Зміна файлів кешу може призвести до відображення неправильних результатів, однак зміна шляху може заощадити час, коли переміщується велика кількість файлів в інше місце.
Ви можете копіювати файли між комп'ютерами, щоб зберегти час на сканування знову файлів (звичайно, якщо вони мають подібну структуру каталогу).
Ви можете копіювати ці файли між комп'ютерами, щоб заощадити час на повторному скануванні файлів (звичайно якщо вони мають схожу структуру каталогів).
У разі проблем з кешем, ці файли можна видалити, а тому програма автоматично відновить їх.
У разі виникнення проблем із кешем ці файли можна видалити. Програма автоматично перестворить їх.
settings_folder_settings_open_tooltip =
Відкрита папка, де зберігаються налаштування Czkawkka вручну.
Відкриває теку, де зберігається конфігурація Czkawka.
Зміна їх вручну може призвести до переривання вашого робочого процесу.
УВАГА. Ручна зміна конфігурації може порушити функціонування програми.
settings_folder_cache_open = Відкрити теку кешу
settings_folder_settings_open = Відкрити папку налаштувань
# Compute results
compute_stopped_by_user = Пошук був зупинений користувачем
compute_found_duplicates_hash_size = Знайдено { $number_files } дублікатів у { $number_groups } групах за допомогою { $size }
compute_found_duplicates_name = Знайдено { $number_files } дублікатів у { $number_groups } групах
compute_found_empty_folders = Знайдено { $number_files } порожніх папок
compute_found_empty_files = Знайдено { $number_files } порожніх файлів
compute_found_big_files = Знайдено { $number_files } великих файлів
compute_found_temporary_files = Знайдено { $number_files } тимчасових файлів
compute_found_images = Знайдено { $number_files } аналогічних зображень в { $number_groups } групах
compute_found_videos = Знайдено { $number_files } схожих відео в { $number_groups } групах
compute_found_music = Знайдено { $number_files } аналогічних музичних файлів в { $number_groups } групах
compute_found_duplicates_hash_size = Знайдено дублікатів: { $number_files } (груп: { $number_groups }), розмір: { $size }
compute_found_duplicates_name = Знайдено: { $number_files } дубликат(и/ів) (груп: { $number_groups })
compute_found_empty_folders = Знайдено порожніх папок: { $number_files }
compute_found_empty_files = Знайдено порожніх файлів: { $number_files }
compute_found_big_files = Знайдено великих файлів: { $number_files }
compute_found_temporary_files = Знайдено тимчасових файлів: { $number_files }
compute_found_images = Знайдено аналогічних зображень: { $number_files } (груп: { $number_groups })
compute_found_videos = Знайдено схожих відео: { $number_files } (груп: { $number_groups })
compute_found_music = Знайдено аналогічних музичних файлів: { $number_files } (груп: { $number_groups })
compute_found_invalid_symlinks = Знайдено { $number_files } неприпустимі символічні посилання
compute_found_broken_files = Знайдено { $number_files } зламаних файлів
compute_found_broken_files = Знайдено зламаних файлів: { $number_files }
compute_found_bad_extensions = Знайдено { $number_files } файлів з недійсними розширеннями
# Progress window
progress_scanning_general_file = Сканування файлу { $file_number }
progress_scanning_broken_files = Перевірка { $file_checked }/{ $all_files } файлу
progress_scanning_video = Завдяки { $file_checked }/{ $all_files } відео
progress_scanning_image = Через { $file_checked }/{ $all_files } зображення
progress_comparing_image_hashes = Порівнювати { $file_checked }/{ $all_files } хеш зображення
progress_scanning_music_tags_end = Порівняння тегів { $file_checked }/{ $all_files } музичного файлу
progress_scanning_music_tags = Читання тегів { $file_checked }/{ $all_files } музичний файл
progress_scanning_empty_folders = Сканування { $folder_number } папки
progress_scanning_general_file = Сканування файлу: { $file_number }
progress_scanning_extension_of_files = Перевірка розширення { $file_checked }/{ $all_files } файлу
progress_scanning_broken_files = Перевірка файлу: { $file_checked }/{ $all_files }
progress_scanning_video = Хешування відео: { $file_checked }/{ $all_files }
progress_scanning_image = Хешування зображення: { $file_checked }/{ $all_files }
progress_comparing_image_hashes = Порівняння хешу зображення: { $file_checked }/{ $all_files }
progress_scanning_music_tags_end = Порівняння тегів музичного файлу: { $file_checked }/{ $all_files }
progress_scanning_music_tags = Читання тегів музичного файлу: { $file_checked }/{ $all_files }
progress_scanning_music_content_end = Порівняння відбитку пальця { $file_checked }/{ $all_files } музичного файлу
progress_scanning_music_content = Розрахунок відбитку пальця { $file_checked }/{ $all_files } музичного файлу
progress_scanning_empty_folders = Сканування теки { $folder_number }
progress_scanning_size = Сканування розміру файлу { $file_number }
progress_scanning_size_name = Сканування назви і розміру файлу { $file_number }
progress_scanning_name = Сканування імені файлу { $file_number }
progress_analyzed_partial_hash = Проаналізовано частковий хеш { $file_checked }/{ $all_files } файлів
progress_analyzed_full_hash = Проаналізовано повний хеш { $file_checked }/{ $all_files } файлів
progress_current_stage = Поточна зірочка:{ " " }
progress_all_stages = Всі стаги:{ " " }
progress_analyzed_partial_hash = Аналіз часткового хешу файлу { $file_checked }/{ $all_files }
progress_analyzed_full_hash = Аналіз повного хешу файлу { $file_checked }/{ $all_files }
progress_prehash_cache_loading = Завантаження цільового кешу
progress_prehash_cache_saving = Збереження цілковитого кешу
progress_hash_cache_loading = Завантаження схованки
progress_hash_cache_saving = Збереження кешу кешу
progress_cache_loading = Завантаження кешу
progress_cache_saving = Збереження кешу
progress_current_stage = Поточний етап: { " " }
progress_all_stages = Усі етапи: { " " }
# Saving loading
saving_loading_saving_success = Збережено конфігурацію в файл { $name }.
saving_loading_saving_failure = Не вдалося зберегти дані конфігурації до файлу { $name }.
saving_loading_reset_configuration = Поточна конфігурація була очищена.
saving_loading_loading_success = Конфігурація завантажених об'єктів.
saving_loading_invalid_string = Для ключа "{ $key }" знайдено неприпустимий результат - "{ $result }", який не є рядком.
saving_loading_invalid_int = Для ключа "{ $key }" знайдено неприпустимий результат - "{ $result }", який не є цілим числом.
saving_loading_invalid_bool = Для ключа "{ $key }" знайдено неприпустимий результат - "{ $result }", який не є булом.
saving_loading_decode_problem_bool = Не вдалося декодувати bool з ключа "{$key}", знайдено "{$result}", але дозволені значення: 0, 1, true або false.
saving_loading_loading_success = Установки програми коректно завантажені.
saving_loading_invalid_string = Для ключа «{ $key }» знайдено неприпустимий результат: «{ $result }» не є рядком.
saving_loading_invalid_int = Для ключа «{ $key }» знайдено неприпустимий результат: «{ $result }» не є цілим числом.
saving_loading_invalid_bool = Для ключа «{ $key }» знайдено неприпустимий результат: «{ $result }» не є булевим.
saving_loading_decode_problem_bool = Не вдалося декодувати булеве значення з ключа «{$key}»: знайдено «{$result}», але дозволені значення 0, 1, true або false.
saving_loading_saving_same_keys = Спроба зберегти налаштування за допомогою дубльованого ключа "{ $key }".
saving_loading_failed_to_get_home_directory = Не вдалося отримати домашній каталог для відкриття і збереження файлу конфігурації.
saving_loading_folder_config_instead_file = Не вдалося створити або відкрити файл конфігурації в шляху"{ $path }", оскільки папка вже існує.
saving_loading_failed_to_create_configuration_folder = Не вдалося налаштувати теку конфігурації "{ $path }", причиною "{ $reason }".
saving_loading_failed_to_create_config_file = Не вдалося створити файл налаштувань "{ $path }", причина "{ $reason }".
saving_loading_failed_to_read_config_file = Не вдалося завантажити конфігурацію з "{ $path }", оскільки не існує або не є файлом.
saving_loading_failed_to_read_config_file = Неможливо завантажити конфігурацію з «{$path}», тому що або такого файлу не існує, або це не файл.
saving_loading_failed_to_read_data_from_file = Не вдалося прочитати дані з файлу "{ $path }", причина "{ $reason }".
saving_loading_orphan_data = Знайдено застарілі дані "{ $data }" в рядку "{ $line }".
saving_loading_not_valid = Опція "{ $data }" не існує в поточній версії додатку.
saving_loading_orphan_data = Знайдені дані «{ $data }», що нічого не належать, у рядку «{ $line }».
saving_loading_not_valid = Параметр «{ $data }» не існує в поточній версії додатку.
# Invalid symlinks
invalid_symlink_infinite_recursion = Нескінченна рекурсія
invalid_symlink_non_existent_destination = Неіснуючий файл призначення
# Other
searching_for_data = Пошук даних може зайняти деякий час, зачекайте...
selected_all_reference_folders = Неможливо почати пошук, коли всі каталоги встановлені як папки з орієнтирами
searching_for_data = Пошук даних може зайняти деякий час — будь ласка, зачекайте...
text_view_messages = ПОВІДОМЛЕННЯ
text_view_warnings = ПОПЕРЕДЖЕННЯ
text_view_errors = ПОМИЛКИ
about_window_motto = Ця програма безкоштовна для використання та буде завжди.
about_window_motto = Ця програма безкоштовна для використання і завжди буде такою.
# Various dialog
dialogs_ask_next_time = Запитати наступного разу
delete_file_failed = Не вдалося видалити файл { $name }, причина { $reason }
delete_file_failed = Не вдалося видалити файл { $name }. Причина: { $reason }
delete_title_dialog = Підтвердження видалення
delete_question_label = Ви впевнені, що бажаєте видалити файли?
delete_all_files_in_group_title = Підтвердження видалення всіх файлів у групі
delete_all_files_in_group_label1 = У деяких групах є обрані всі записи.
delete_all_files_in_group_label1 = У деяких групах обрані всі записи.
delete_all_files_in_group_label2 = Ви впевнені, що хочете видалити їх?
delete_folder_failed = Не вдалося видалити папку { $dir } , тому що папка не існує, у вас немає дозволів, або вона не порожня.
delete_items_label = { $items } файлів буде видалено.
delete_items_groups_label = { $items } файлів з групи { $groups } буде видалено.
hardlink_failed = Не вдалося встановити hardlink
hard_sym_invalid_selection_title_dialog = Неправильний вибір з деякими групами
hard_sym_invalid_selection_label_1 = У деяких групах є лише 1 запис обраний і його буде проігноровано.
hard_sym_invalid_selection_label_2 = Щоб мати можливість зв'язати ці файли, потрібно вибрати принаймні 2 результати в групі.
hard_sym_invalid_selection_label_3 = Перший у групі визнаний оригінальним, і тому він не змінюється, а потім змінюється.
delete_folder_failed = Не вдалося видалити папку { $dir }, оскільки папки не існує, або у вас немає дозволу на зміну, або папка не порожня.
delete_items_label = Буде видалено файлів: { $items }
delete_items_groups_label = Буде видалено файлів: { $items } (груп: { $groups })
hardlink_failed = Не вдалося створити жорстке посилання
hard_sym_invalid_selection_title_dialog = Невірний вибір у деяких групах
hard_sym_invalid_selection_label_1 = У деяких групах вибрано лише один запис — вони будуть проігноровані.
hard_sym_invalid_selection_label_2 = Щоб жорстко або символьно зв'язати ці файли, необхідно вибрати щонайменше два результати групи.
hard_sym_invalid_selection_label_3 = Перший у групі визнаний як оригінал і не буде змінено, але другий та наступні модифіковані.
hard_sym_link_title_dialog = Підтвердження посилання
hard_sym_link_label = Ви впевнені, що хочете зв'язати ці файли?
move_folder_failed = Не вдалося перемістити папку { $name }, причина { $reason }
move_folder_failed = Не вдалося перемістити папку { $name }. Причина: { $reason }
move_file_failed = Не вдалося перемістити файл { $name }, причина { $reason }
move_files_title_dialog = Виберіть теку, в яку хочете перемістити дубльовані файли
move_files_choose_more_than_1_path = Потрібно вибрати тільки 1 шлях, щоб скопіювати там дубльовані файли, вибрані { $path_number }.
move_stats = Очевидно переміщено { $num_files }/{ $all_files } елементів
save_results_to_file = Збережені результати до файлу { $name }
move_files_choose_more_than_1_path = Можна вибрати лише один шлях для копіювання дублікатів файлів, але вибрано { $path_number }.
move_stats = Вдалося перемістити без помилок елементів: { $num_files }/{ $all_files }
save_results_to_file = Збережено результати як з txt, так і з json файлів в теку { $name }.
search_not_choosing_any_music = Помилка: Ви повинні вибрати принаймні один прапорець з типами пошуку музики.
include_folders_dialog_title = Папки для включення
search_not_choosing_any_broken_files = ПОМИЛКА: Ви повинні вибрати принаймні один прапорець з типом пошкоджених файлів.
include_folders_dialog_title = Теки для включення
exclude_folders_dialog_title = Теки для виключення
include_manually_directories_dialog_title = Додати теку вручну
cache_properly_cleared = Правильно очищено кеш
cache_properly_cleared = Кеш успішно очищений
cache_clear_duplicates_title = Очищення кешу дублікатів
cache_clear_similar_images_title = Очищення кешу подібних зображень
cache_clear_similar_videos_title = Очищення кеша схожих відео
cache_clear_message_label_1 = Ви хочете очистити кеш із застарілих записів?
cache_clear_message_label_2 = Ця операція видалить всі записи кешу, які вказують на неприпустимі файли.
cache_clear_message_label_3 = Це може пришвидшити завантаження/збереження для кешу.
cache_clear_message_label_4 = УВАГА: Операція видалить всі кешовані дані з відключених зовнішніх дисків, тому хеш буде потрібно згенерувати знову.
cache_clear_message_label_1 = Ви хочете очистити кеш від застарілих записів?
cache_clear_message_label_2 = Ця дія видаляє всі записи кешу, що вказують на недоступні файли.
cache_clear_message_label_3 = Це може трохи прискорити завантаження/збереження кешу.
cache_clear_message_label_4 = УВАГА. Ця дія видаляє всі кешовані дані від вимкнених зовнішніх дисків. Хеші для файлів на цих носіях потрібно буде згенерувати заново.
# Show preview
preview_temporary_file = Не вдалося відкрити файл тимчасового зображення { $name }, причина { $reason }.
preview_0_size = Неможливо створити попередній перегляд зображення { $name } з нульовою шириною або висотою.
preview_temporary_image_save = Не вдалося зберегти файл тимчасового зображення до { $name }, причина { $reason }.
preview_temporary_image_remove = Не вдалося видалити файл тимчасового зображення { $name }, причина { $reason }.
preview_failed_to_create_cache_dir = Не вдалося створити каталог { $name } потрібного при попередньому перегляді зображення. Причина { $reason }.
preview_image_resize_failure = Не вдалося змінити розмір зображення { $name }.
preview_image_opening_failure = Не вдалося відкрити зображення {$name}. Причина: {$reason}
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = Група { $current_group }/{ $all_groups } ({ $images_in_group } зображення)
compare_groups_number = Група { $current_group }/{ $all_groups } (зображень: { $images_in_group })
compare_move_left_button = L
compare_move_right_button = R

@ -1,79 +1,90 @@
# Core
core_similarity_very_high = 非常高
core_similarity_high = 高
core_similarity_medium = 中
core_similarity_small = 小的
core_similarity_very_small = 非常小
core_similarity_minimal = 最小化
core_cannot_open_dir = 无法打开目录 { $dir },因为 { $reason }
core_cannot_read_entry_dir = 无法在目录 { $dir } 中读取条目,因为 { $reason }
core_cannot_read_metadata_dir = 无法读取目录 { $dir } 中的元数据,因为 { $reason }
core_file_not_utf8_name = 文件 { $name } 无效的 UTF-8 名称 (可能无法显示一些字符)
core_file_modified_before_epoch = 文件 { $name } 似乎在 Unix Epoch前被修改
core_folder_modified_before_epoch = 文件夹 { $name } 似乎在Unix Epoch前被修改
core_file_no_modification_date = 无法从文件 { $name } 获取修改日期,因为 { $reason }
core_folder_no_modification_date = 无法从文件夹 { $name } 获取修改日期,因为 { $reason }
core_missing_no_chosen_included_directory = 必须至少提供一个目录
core_directory_wildcard_no_supported = 目录:不支持路径中的通配符,忽略 { $path }
core_directory_relative_path = 目录:不支持相对路径,忽略 { $path }
core_directory_must_exists = 目录:提供的文件夹路径必须退出,忽略 { $path }
core_directory_must_be_directory = 目录:提供的路径必须指向目录,忽略 { $path }
core_included_directory_zero_valid_directories = 包括目录错误:即使找不到一个需要包含的正确路径
core_excluded_directory_pointless_slash = 目录:不包括 / 无意义,因为它意味着没有文件将被扫描
core_directory_overlap = 目录:所有要搜索与排除目录重叠的目录
core_ffmpeg_not_found = 找不到正确安装FFmpeg
core_ffmpeg_missing_in_snap = 类似的视频目前不适用于快照,如果您想要帮助查看- { $url }
# Window titles
window_settings_title = 设置
window_main_title = Czkawka
window_progress_title = 正在扫描
window_compare_images = 比较图像
# General
general_ok_button = 好的
general_ok_button = 确定
general_close_button = 关闭
# Main window
music_title_checkbox = 标题
music_artist_checkbox = 艺人
music_album_title_checkbox = 相册标题
music_album_artist_checkbox = 专辑艺人
music_year_checkbox = 年份
music_bitrate_checkbox = 码率
music_genre_checkbox = 流派
music_length_checkbox = 长度
music_comparison_checkbox = 近似比较
music_checking_by_tags = 标签
music_checking_by_content = 内容
same_music_seconds_label = 最小分片秒持续时间
same_music_similarity_label = 最大差异
same_music_tooltip =
通过设置以下内容,可以配置按其内容搜索类似的音乐文件:
- 可以识别音乐文件为类似文件的最小碎片时间
- 两个测试片段之间的最大差异度
找到这些参数的合理组合是获得好结果的关键。
将最小时间设置为5秒最大差异度设置为1.0,将寻找几乎相同的文件碎片。
另一方面20秒的时间和6.0的最大差异度可以很好地找到混音/现场版本等内容。
默认情况下,每个音乐文件都会与其他音乐文件进行比较,当测试许多文件时,这可能需要很长时间,因此通常最好使用参考文件夹并指定要相互比较的文件(如有相同数量的文件则比较指纹至少比不使用参考文件夹快4倍)。
music_comparison_checkbox_tooltip =
它使用 AI搜索类似的音乐文件它使用机器学习从短语中删除括号例如 启用此选项, 所涉文件将被视为重复:
它使用AI搜索类似的音乐文件利用机器学习从短语中移除括号。例如启用此选项后相关的文件将被视为重复文件
Świędziżłób --- Świędziżłób (Remix Lato 2021)
duplicate_case_sensitive_name = 区分大小写
duplicate_case_sensitive_name_tooltip =
启用时,仅当记录具有完全相同的名称时才进行分组,例如 Żołd <-> Żołd
禁用此选项将不检查每个字母是否具有相同的大小写,例如 żoŁD <-> Żołd
duplicate_mode_size_name_combo_box = 大小和名称
duplicate_mode_name_combo_box = 名称
duplicate_mode_size_combo_box = 大小
duplicate_mode_hash_combo_box = 哈希
duplicate_hash_type_tooltip =
Czkawka提供3种可使用的哈希类型
Czkawka提供3种哈希类型
Blake3 - 加密散列函数。 它被用作默认散列算法,因为它很快。
Blake3 - 加密散列函数。这是默认选项,因为它非常快。
CRC32 - 简单散列函数。 它应该比Blake3更快但可能很少发生一些碰撞。
CRC32 - 简单的散列函数。这应该比Blake3更快但极少情况下可能会有一些冲突
XXH3 - 在性能和散列质量的情况下类似于Blake3所以这种模式可以轻松使用。
XXH3 - 与Blake3非常相似性能和哈希质量也很高但不是加密的。因此这些模式可以很容易地互换使用。
duplicate_check_method_tooltip =
目前Czkawka提供三种方法来查找重复的方法
目前Czkawka提供三种方法来查找重复
名称 - 查找具有相同名称的文件。
名称 - 查找名称相同的文件。
大小 - 查找大小相同的文件。
哈希-查找内容相同的文件。 此模式哈希文件然后比较此哈希文件以找到重复。此模式是找到重复的最安全方法。 工具大量使用缓存,所以第二和进一步扫描同一数据应该比先更快得多
哈希 - 查找内容相同的文件。 这种模式会对文件进行哈希计算,然后将哈希值进行比较以查找重复项。这种模式是查找重复项的最安全方法。应用程序大量使用缓存,因此对相同数据进行的第二次及更多次扫描应比第一次更快
image_hash_size_tooltip =
Czkawka为每个图像提供生成的散列大小的变化。 较大的散列原因允许找到图像之间差异较小的图像,但使用速度较慢。
每张选中的图像都产生了一个可相互比较的特殊哈希。 两者之间的小差别意味着这些图像是相似的。
8 散列尺寸非常适合于找到仅略类似于原始图像的图像。 有了更大的一组图像 (>1000),这将产生大量虚假的正数, 所以我建议在这种情况下使用更大的散列尺寸。
16是默认的散列尺寸它是一个很好的折衷既使找到了一些小相似的图像又仅有少量的散列碰撞。
32和64 散列只找到非常相似的图像,但是几乎不应该有假正数 (可能只有一些带着Alpha 通道的图像)。
image_resize_filter_tooltip =
要计算图像散列,库必须首先调整大小。
在选定的算法上花费, 用来计算散列的结果图像看起来有点不同。
散列的默认值为8字节这样可以找到非常相似和不同的图像。 第16和32条哈希只能用于几乎完全相同的图像。 64 字节散列不应使用,除非需要真正小的差异才能找到
image_resize_filter_tooltip = 要计算图像散列,库必须首先调整大小。在选定的算法上停用,结果图像看起来没有什么不同。 使用最快的算法但结果最差的算法是Nearest。
image_hash_alg_tooltip = 用户可以从计算哈希的许多算法中选择一个。 每个国家都有强大和弱点,有时会给不同的形象带来更好、有时甚至更坏的结果, 所以选择最好的一个,需要手动测试。
main_notebook_image_fast_compare = 快速比较
main_notebook_image_fast_compare_tooltip =
加快搜索和比较哈希。
最快使用的算法也是结果最差的算法是Nearest。 默认情况下启用它因为16x16散列大小较低的质量并不真正可见。
与正常模式相反,每次散列被比较的 x 次, 用户选择的 x 相似之处,在这种模式下总是只使用一个比较。
使用 8x8 散列大小建议使用不同于Nearest的算法来拥有更好的图像组。
image_hash_alg_tooltip =
用户可以从许多计算哈希值的算法中选择一种。
在比较一千00图像与 non 0(Very High) 相似性时建议使用此选项。
每种算法都有强项和弱项,对于不同的图像,有时结果更好,有时结果更差。
因此,为了确定最适合你的算法,需要进行人工测试。
big_files_mode_combobox_tooltip = 允许搜索最小/最大的文件
big_files_mode_label = 已检查的文件
big_files_mode_smallest_combo_box = 最小的
big_files_mode_biggest_combo_box = 最大的
main_notebook_duplicates = 重复文件
main_notebook_empty_directories = 空目录
main_notebook_big_files = 大文件
@ -84,6 +95,7 @@ main_notebook_similar_videos = 相似视频
main_notebook_same_music = 重复音乐
main_notebook_symlinks = 无效的符号链接
main_notebook_broken_files = 损坏的文件
main_notebook_bad_extensions = 错误的扩展
main_tree_view_column_file_name = 文件名称
main_tree_view_column_folder_name = 文件夹名称
main_tree_view_column_path = 路径
@ -94,28 +106,35 @@ main_tree_view_column_dimensions = 尺寸
main_tree_view_column_title = 标题
main_tree_view_column_artist = 艺人
main_tree_view_column_year = 年份
main_tree_view_column_album_title = 相册标题
main_tree_view_column_album_artist = 专辑艺人
main_tree_view_column_bitrate = 码率
main_tree_view_column_length = 长度
main_tree_view_column_genre = 流派
main_tree_view_column_symlink_file_name = 符号链接文件名
main_tree_view_column_symlink_folder = 符号文件夹
main_tree_view_column_symlink_folder = 符号链接文件夹
main_tree_view_column_destination_path = 目标路径
main_tree_view_column_type_of_error = 错误类型
main_tree_view_column_current_extension = 当前扩展
main_tree_view_column_proper_extensions = 合适的扩展
main_label_check_method = 检查方法
main_label_hash_type = 哈希类型
main_label_hash_size = 哈希大小
main_label_size_bytes = 大小(字节)
main_label_size_bytes = 大小 (字节)
main_label_min_size = 最小值
main_label_max_size = 最大值
main_label_shown_files = 显示的文件数
main_label_resize_algorithm = 调整算法
main_label_similarity = 相似性:{" "}
main_check_box_broken_files_audio = 音频
main_check_box_broken_files_pdf = PDF
main_check_box_broken_files_archive = 归档
main_check_box_broken_files_image = 图像
check_button_general_same_size = 忽略相同的大小
check_button_general_same_size_tooltip = 从结果忽略相同大小的文件 - 通常是 1:1 重复
check_button_general_same_size_tooltip = 忽略结果中相同大小的文件 - 通常是 1:1 重复
main_label_size_bytes_tooltip = 将用于扫描的文件大小
# Upper window
upper_tree_view_included_folder_column_title = 要搜索的文件夹
upper_tree_view_included_reference_column_title = 参考文件夹
upper_recursive_button = 递归
upper_recursive_button = 递归
upper_recursive_button_tooltip = 如果选中,也可以搜索未直接置于选定文件夹下的文件。
upper_manual_add_included_button = 手动添加
upper_add_included_button = 添加
@ -123,31 +142,46 @@ upper_remove_included_button = 删除
upper_manual_add_excluded_button = 手动添加
upper_add_excluded_button = 添加
upper_remove_excluded_button = 删除
upper_manual_add_included_button_tooltip = 允许添加目录名称进行手动搜索。
upper_manual_add_included_button_tooltip =
手动添加目录名。
如需一次性添加多个路径,请用分号;分隔它们
填写 /home/roman;/home/krokiet 将添加 /home/roman 和 /home/kookiet 两个目录
upper_add_included_button_tooltip = 添加新目录进行搜索。
upper_remove_included_button_tooltip = 从搜索中删除目录。
upper_manual_add_excluded_button_tooltip = 允许手动添加排除的目录名称。
upper_add_excluded_button_tooltip = 添加要排除在搜索中的目录。
upper_manual_add_excluded_button_tooltip =
手动添加要排除的目录名称。
如需一次性添加多个路径,请用分号;分隔它们
填写 /home/roman;/home/krokiet 将添加 /home/roman 和 /home/kookiet 两个目录
upper_add_excluded_button_tooltip = 添加在搜索中排除的目录。
upper_remove_excluded_button_tooltip = 从排除中删除目录。
upper_notebook_items_configuration = 项目配置
upper_notebook_excluded_directories = 排除的目录
upper_notebook_included_directories = 包含的目录
upper_allowed_extensions_tooltip =
允许的扩展必须用逗号分隔(默认所有可用)
允许的文件扩展名必须用逗号分隔(默认情况下全部可用)
Macros IMAGE, VIDEO, MUSIC, TEXT 也可以同时添加多个扩展
还提供以下可同时添加多个扩展名的宏IMAGE图片、VIDEO视频、MUSIC音乐、TEXT文本
使用示例“.exe, IMAGE, VIDEO, .rar, 7z” - 这意味着图像(e). 如jpg、png、视频(例如avi、mp4)、ex、rar和7z文件将被扫描。
使用示例:".exe, IMAGE, VIDEO, .rar, 7z"这意味着将扫描图片文件例如jpg、png、视频文件例如avi、mp4、exe、rar和7z文件。
upper_excluded_extensions_tooltip =
在扫描中忽略的已禁用文件列表。
在使用允许和禁用的扩展时,这个扩展具有更高的优先级,所以文件将不会被检查。
upper_excluded_items_tooltip =
排除的项目必须包含 * 通配符,并且应该用逗号分隔。
这比排除的目录慢,所以请仔细使用。
排除的项目必须包含 * 通配符,并用逗号分隔。
与排除目录相比,这种方式较慢,因此请小心使用。
upper_excluded_items = 排除的项目:
upper_allowed_extensions = 允许的扩展:
upper_excluded_extensions = 已禁用扩展:
# Popovers
popover_select_all = 选择所有
popover_unselect_all = 取消选择所有
popover_select_all = 全部选择
popover_unselect_all = 取消
popover_reverse = 反向选择
popover_select_all_except_oldest = 选择除最以外的所有选项
popover_select_all_except_oldest = 选择除最以外的所有选项
popover_select_all_except_newest = 选择除最新以外的所有选项
popover_select_one_oldest = 选择一个最旧的
popover_select_one_newest = 选择一个最新的
@ -156,36 +190,46 @@ popover_unselect_custom = 取消选择自定义
popover_select_all_images_except_biggest = 选择除最大以外的所有选项
popover_select_all_images_except_smallest = 选择除最小以外的所有
popover_custom_path_check_button_entry_tooltip =
允许通过路径选择记录。
通过路径选择记录。
示例用法:
/home/pimpek/rzecz.txt 可以通过/home/pim*
/home/pimpek/rzecz.txt 可以通过 /home/pim* 找到
popover_custom_name_check_button_entry_tooltip =
允许按文件名选择记录。
按文件名选择记录。
示例用法:
/usr/ping/pong.txt可以通过 *ong* 找到
/usr/ping/pong.txt 可以通过 *ong* 找到
popover_custom_regex_check_button_entry_tooltip =
允许通过指定的正则表达式选择记录。
指定的正则表达式选择记录。
使用这种模式,搜索的文本是名的路径。
使用此模式,搜索的文本是带有名称的路径。
示例用法:
/usr/bin/ziemniak。 xt 可以通过 /ziem[a-z]+
可以使用 /ziem[a-z]+ 查找 /usr/bin/ziemniak.txt
这使用默认的Rust正则表达式实现。 您可以在此处阅读有关它的更多信息https://docs.rs/regex。
popover_custom_case_sensitive_check_button_tooltip =
启用大小写检测。
找到。这使用默认的 Rust regex 实现,这样您就可以在 https://docs.rs/regex中阅读更多关于它的信息。
该选项禁用时,/home/* 将同时找到 /HoMe/roman 和 /home/roman
popover_custom_not_all_check_button_tooltip =
阻止在群组中选择所有记录。
禁止在分组中选择所有记录。
默认启用此功能,因为在大多数情况下,用户不想同时删除原始文件和重复文件, 但想要留下至少一个文件。
这是默认启用的,因为在大多数情况下, 您不想删除原始文件和重复文件,而是想留下至少一个文件。
警告:如果用户已经手动选择了所有结果,此设置将无法工作
警告:如果您已经手动选择了一个组中的所有结果,则此设置不起作用
popover_custom_regex_path_label = 路径
popover_custom_regex_name_label = 名称
popover_custom_regex_regex_label = 正则表达式路径 + 名称
popover_custom_case_sensitive_check_button = 区分大小写
popover_custom_all_in_group_label = 不在组中选择所有记录
popover_custom_mode_unselect = 取消选择自定义
popover_custom_mode_select = 选择自定义
popover_sort_file_name = 文件名称
popover_sort_folder_name = 文件夹名称
popover_sort_full_name = 全名
popover_sort_size = 大小
popover_sort_selection = 选择
popover_invalid_regex = 正则表达式无效
popover_valid_regex = 正则表达式有效
# Bottom buttons
@ -193,34 +237,42 @@ bottom_search_button = 搜索
bottom_select_button = 选择
bottom_delete_button = 删除
bottom_save_button = 保存
bottom_symlink_button = Symlink
bottom_hardlink_button = Hardlink
bottom_symlink_button = 软链接
bottom_hardlink_button = 硬链接
bottom_move_button = 移动
bottom_search_button_tooltip = 开始搜索文件/文件夹。
bottom_sort_button = 排序
bottom_search_button_tooltip = 开始搜索
bottom_select_button_tooltip = 选择记录。只能稍后处理选定的文件/文件夹。
bottom_delete_button_tooltip = 删除选中的文件/文件夹。
bottom_save_button_tooltip = 保存搜索数据到文件
bottom_symlink_button_tooltip =
创建符号链接。
在选择至少两个分组结果时有效
第一个不变,第二个和以后两个都是对称的
创建链接。
有在至少选择了一组中的两个结果时才起作用
第一个结果保持不变,第二个及后续结果都会被软链接到第一个结果上
bottom_hardlink_button_tooltip =
创建硬链接。
只在选择至少两个分组结果时有效。
第一个不变,第二个和第二个后来是与第一个联系在一起的。
只有在至少选择了一组中的两个结果时才起作用。
第一个结果保持不变,第二个及后续结果都会被硬链接到第一个结果上。
bottom_hardlink_button_not_available_tooltip =
创建硬链接。
按钮已禁用,因为无法创建硬链接。
在 Windows 上,只有使用管理员权限才能使用硬链接,所以请确保以管理员身份运行该应用程序。
如果应用程序已经具有管理员权限,请在 Github 上查找类似的问题。
bottom_move_button_tooltip =
将文件移动到选定的文件夹。
将所有文件复制到文件夹,而不保留目录树。
试图将具有相同名称的2个文件移动到文件夹时第二个文件将失败并显示错误。
bottom_show_errors_tooltip = 显示/隐藏底部错误面板。
移动文件到选定的目录。
它复制所有文件到目录,而不保留目录树。
试图将两个具有相同名称的文件移动到文件夹时,第二个将失败并显示错误。
bottom_sort_button_tooltip = 根据选定的方法排序文件/文件夹。
bottom_show_errors_tooltip = 显示/隐藏底部文本面板。
bottom_show_upper_notebook_tooltip = 显示/隐藏主笔记本面板。
# Progress Window
progress_stop_button = 停止
progress_stop_additional_message = 停止请求
# About Window
about_repository_button_tooltip = 链接到源代码的仓库页面。
about_donation_button_tooltip = 链接到捐赠页面。
about_instruction_button_tooltip = 链接到指令页面。
about_translation_button_tooltip = 使用应用翻译链接到Crowdin页面。官方支持波兰语和英语但任何其他语言的帮助都将受到欢迎
about_translation_button_tooltip = 链接到带有应用程序翻译的 Crowdin 页面。官方支持波兰语和英语
about_repository_button = 存储库
about_donation_button = 捐助
about_instruction_button = 说明
@ -234,38 +286,46 @@ header_about_button_tooltip = 打开包含应用程序信息的对话框。
## General
settings_save_at_exit_button_tooltip = 关闭应用时保存配置到文件。
settings_number_of_threads = 使用的线程数
settings_number_of_threads_tooltip = 使用的线程数0表示所有可用线程都将被使用。
settings_label_restart = 您需要重新启动应用才能应用设置!
settings_ignore_other_filesystems = 忽略其它文件系统 (仅限Linux)
settings_ignore_other_filesystems_tooltip =
忽略与搜索的目录不在同一个文件系统中的文件。
在 Linux 上查找命令时类似-xdev选项
settings_save_at_exit_button_tooltip = 关闭应用时将配置保存到文件。
settings_load_at_start_button_tooltip =
从文件开始加载配置。
打开应用程序时从文件加载配置。
不选择此选项将加载默认设置。
settings_confirm_deletion_button_tooltip = 点击删除按钮时显示确认对话框
如果未启用,将使用默认设置。
settings_confirm_deletion_button_tooltip = 点击删除按钮时显示确认对话框
settings_confirm_link_button_tooltip = 点击硬链接/符号链接按钮时显示确认对话框。
settings_confirm_group_deletion_button_tooltip = 尝试从群组移除所有记录时显示对话框。
settings_show_text_view_button_tooltip = 在底部显示错误面板。
settings_use_cache_button_tooltip = 允许不使用缓存功能的选项
settings_save_also_as_json_button_tooltip = 保存缓存到可通过人类的 JSON 格式读取。可以修改其内容。 如果缺少二进制格式缓存(带bin extension),此文件的缓存将被应用自动读取。
settings_use_trash_button_tooltip = 启用后,它会移动文件去回收站,而是永久删除它们
settings_language_label_tooltip = 允许从可用的接口中选择语言。
settings_save_at_exit_button = 退出时保存配置
settings_load_at_start_button = 启动时加载配置
settings_confirm_group_deletion_button_tooltip = 尝试从群组中删除所有记录时显示警告对话框。
settings_show_text_view_button_tooltip = 在用户界面底部显示文本面板。
settings_use_cache_button_tooltip = 使用文件缓存。
settings_save_also_as_json_button_tooltip = 保存缓存为 (人类可读) JSON 格式。可以修改其内容。 如果缺少二进制格式缓存(带bin extensional),此文件的缓存将被应用自动读取。
settings_use_trash_button_tooltip = 将文件移至回收站,而不是将其永久删除
settings_language_label_tooltip = 用户界面的语言。
settings_save_at_exit_button = 关闭应用时保存配置
settings_load_at_start_button = 打开应用程序时加载配置
settings_confirm_deletion_button = 删除任何文件时显示确认对话框
settings_confirm_link_button = 硬/符号链接任何文件时显示确认对话框
settings_confirm_group_deletion_button = 删除组中所有文件时显示确认对话框
settings_show_text_view_button = 显示底部文本面板
settings_use_cache_button = 使用缓存
settings_save_also_as_json_button = 保存缓存到 JSON 文件
settings_save_also_as_json_button = 同时将缓存保存为 JSON 文件
settings_use_trash_button = 移动已删除的文件到回收站
settings_language_label = 语言
settings_multiple_delete_outdated_cache_checkbutton = 自动删除过时的缓存条目
settings_multiple_delete_outdated_cache_checkbutton_tooltip =
允许删除指向不存在文件的过时缓存结果。
删除指向不存在文件的过期缓存结果。
如果启用,应用确保在加载记录时,所有记录都指向有效的文件并忽略已损坏的文件
当启用时,应用程序确保在加载记录时所有记录都指向有效文件(无法访问的文件将被忽略)
禁用此选项将有助于扫描外部驱动器上的文件,所以在下一次扫描中不会清除有关它们的缓存条目。
禁用此功能将有助于扫描外部驱动器上的文件时,避免在下一次扫描时清除与其相关的缓存条目。
在缓存中拥有数百万条记录的情况下, 建议启用此选项,以便在扫描开始和结束时加速缓存加载和保存
如果缓存中有数十万条记录,则建议启用此功能,这将加快扫描开始/结束时的缓存加载/保存速度
settings_notebook_general = 概况
settings_notebook_duplicates = 重复项
settings_notebook_images = 相似图像
@ -273,34 +333,34 @@ settings_notebook_videos = 相似视频
## Multiple - settings used in multiple tabs
settings_multiple_image_preview_checkbutton_tooltip = 选择图像文件时,在右侧显示预览
settings_multiple_image_preview_checkbutton_tooltip = 在右侧显示预览 (当选择图像文件时)
settings_multiple_image_preview_checkbutton = 显示图像预览
settings_multiple_clear_cache_button_tooltip =
手动清除过时条目的缓存。
只能在禁用自动清理时使用。
settings_multiple_clear_cache_button = 从图像缓存中删除过时的结果
手动清除过时条目的缓存。
仅在禁用自动清除时才使用。
settings_multiple_clear_cache_button = 从缓存中删除过时的结果
## Duplicates
settings_duplicates_hide_hard_link_button_tooltip =
隐藏除一个之外的所有文件,如果指向相同的数据(已硬链接)
隐藏除一个以外的所有文件,如果所有文件都指向同一数据(即为硬链接)
例如,。 在磁盘上有7个文件被硬链接到特定的数据而一个不同的文件具有相同的数据但不同的数据 然后重复查找器将只显示一个唯一的文件和一个来自硬链接的文件。
例如,在磁盘上有七个文件都硬链接到特定数据,并且还有一个不同的文件,其数据相同,但索引节点不同,那么在重复文件查找器中,只会显示一个唯一的文件和一个硬链接文件。
settings_duplicates_minimal_size_entry_tooltip =
允许设置最小大小的文件将被缓存。
设置将被缓存的最小文件大小
选择较小的值,将产生更多的记录,加速搜索,但减缓缓缓存加载/保存
选择较小的值将会生成更多的记录。这将加快搜索速度,但会减慢缓存的加载/保存速度
settings_duplicates_prehash_checkbutton_tooltip =
启用封存(从文件的一小部分计算出来的哈希) 的缓存,允许提前抛出不重复的结果。
启用预散列缓存(从文件的一小部分计算出的哈希),以便更早地排除非重复结果。
默认情况下它被禁用,因为在某些情况下会导致减速。
默认情况下禁用,因为在某些情况下可能会导致减
建议在扫描数十万或100万个文件时使用它因为它可以多次加速搜索
强烈建议在扫描数十万或100万个文件时使用它因为它可以将搜索加速多倍
settings_duplicates_prehash_minimal_entry_tooltip = 缓存条目的最小尺寸。
settings_duplicates_hide_hard_link_button = 隐藏硬链接 (仅限Linux和 MacOS)
settings_duplicates_hide_hard_link_button = 隐藏硬链接 (仅限Linux 和 macOS)
settings_duplicates_prehash_checkbutton = 使用捕捉缓存
settings_duplicates_minimal_size_cache_label = 保存到缓存的字节文件最小大小
settings_duplicates_minimal_size_cache_prehash_label = 保存到抓取缓存的字节文件最小大小
settings_duplicates_minimal_size_cache_label = 保存到缓存的最小文件大小 (字节)
settings_duplicates_minimal_size_cache_prehash_label = 文件最小尺寸(字节) 保存到逮捕缓存
## Saving/Loading settings
@ -316,43 +376,54 @@ settings_reset_button = 重置配置
settings_folder_cache_open_tooltip =
打开存储缓存的txt文件的文件夹。
修改这些文件可能会显示无效的结果但也会修改e。 路径可以在将大量文件移动到其他地方时节省时间。
修改缓存文件可能会导致显示无效的结果。然而,当将大量文件移动到另一个位置时,修改路径可能会节省时间。
您可以在计算机之间复制这个文件以便在扫描文件时节省时间(当然,如果它们有相似的目录结构)
您可以在计算机之间复制这些文件,以节省再次扫描文件的时间(当然,如果它们具有相似的目录结构)
如果出现缓存问题,这个文件可以被删除,所以应用程序将会自动重新生成它们。
如果出现缓存问题,可以删除这些文件。该应用程序将自动重新生成它们。
settings_folder_settings_open_tooltip =
打开保存Czkawka配置的文件夹。
手动修改它们可能会破坏您的工作流
警告:手动修改配置可能会破坏您的工作流程
settings_folder_cache_open = 打开缓存文件夹
settings_folder_settings_open = 打开设置文件夹
# Compute results
compute_stopped_by_user = 搜索已被用户停止
compute_found_duplicates_hash_size = 在 { $number_groups } 组中找到 { $number_files } 重复,被带去了 { $size }
compute_found_duplicates_name = 找到 { $number_files } 重复的 { $number_groups } 组
compute_found_empty_folders = 找到 { $number_files } 空文件夹
compute_found_empty_files = 找到 { $number_files } 空文件
compute_found_big_files = 找到 { $number_files } 大文件
compute_found_temporary_files = 找到 { $number_files } 临时文件
compute_found_images = 在 { $number_groups } 组中找到 { $number_files } 相似图像
compute_found_videos = 在 { $number_groups } 组中找到 { $number_files } 相似视频
compute_found_music = 在 { $number_groups } 组中找到 { $number_files } 类似的音乐文件
compute_found_invalid_symlinks = 找到 { $number_files } 无效的符号链接
compute_found_broken_files = 找到 { $number_files } 损坏的文件
compute_found_duplicates_hash_size = 在 { $number_groups } 个组中发现 { $number_files } 个重复项,占用了 { $size } 的空间
compute_found_duplicates_name = 在 { $number_groups } 个组中发现 { $number_files } 个重复项
compute_found_empty_folders = 找到 { $number_files } 个空文件夹
compute_found_empty_files = 找到 { $number_files } 个空文件
compute_found_big_files = 找到 { $number_files } 个大文件
compute_found_temporary_files = 找到 { $number_files } 个临时文件
compute_found_images = 在 { $number_groups } 个组中找到 { $number_files } 个相似图像
compute_found_videos = 在 { $number_groups } 个组中找到 { $number_files } 个相似视频
compute_found_music = 在 { $number_groups } 个组中找到 { $number_files } 个类似的音乐文件
compute_found_invalid_symlinks = 找到 { $number_files } 个无效的符号链接
compute_found_broken_files = 找到 { $number_files } 个损坏的文件
compute_found_bad_extensions = 找到 { $number_files } 个文件,其扩展名无效
# Progress window
progress_scanning_general_file = 正在扫描 { $file_number } 文件
progress_scanning_broken_files = 正在检查 { $file_checked }/{ $all_files } 文件
progress_scanning_general_file = 正在扫描 { $file_number } 个文件
progress_scanning_extension_of_files = 正在检查 { $file_checked }/{ $all_files } 个文件的扩展名
progress_scanning_broken_files = 正在检查 { $file_checked }/{ $all_files } 个文件
progress_scanning_video = 散列 { $file_checked }/{ $all_files } 视频
progress_scanning_image = 散列 { $file_checked }/{ $all_files } 图像
progress_comparing_image_hashes = 比较 { $file_checked }/{ $all_files } 图像哈希
progress_scanning_music_tags_end = 对比标签 { $file_checked }/{ $all_files } 音乐文件
progress_scanning_music_tags = 正在读取标签 { $file_checked }/{ $all_files } 音乐文件
progress_scanning_empty_folders = 正在扫描 { $folder_number } 文件夹
progress_scanning_size = 正在扫描文件大小 { $file_number }
progress_scanning_name = 正在扫描 { $file_number } 文件的名称
progress_analyzed_partial_hash = 分析了 { $file_checked }/{ $all_files } 文件的部分哈希
progress_analyzed_full_hash = 分析了 { $file_checked }/{ $all_files } 文件的完整哈希值
progress_comparing_image_hashes = 正在比较 { $file_checked }/{ $all_files } 个图像的哈希
progress_scanning_music_tags_end = 正在对比 { $file_checked }/{ $all_files } 个音乐文件标签
progress_scanning_music_tags = 正在读取 { $file_checked }/{ $all_files } 个音乐文件标签
progress_scanning_music_content_end = 正在比较 { $file_checked }/{ $all_files } 个音乐文件指纹
progress_scanning_music_content = 正在计算 { $file_checked }/{ $all_files } 个音乐文件指纹
progress_scanning_empty_folders = 正在扫描 { $folder_number } 个文件夹
progress_scanning_size = 正在扫描 { $file_number } 个文件的大小
progress_scanning_size_name = 正在扫描 { $file_number } 个文件的名称和大小
progress_scanning_name = 正在扫描 { $file_number } 个文件的名称
progress_analyzed_partial_hash = 分析了 { $file_checked }/{ $all_files } 个文件的部分哈希
progress_analyzed_full_hash = 分析了 { $file_checked }/{ $all_files } 个文件的完整哈希值
progress_prehash_cache_loading = 正在加载逮捕缓存
progress_prehash_cache_saving = 正在保存抓取缓存
progress_hash_cache_loading = 加载散列缓存
progress_hash_cache_saving = 保存哈希缓存
progress_cache_loading = 加载缓存
progress_cache_saving = 正在保存缓存
progress_current_stage = 当前阶段:{ " " }
progress_all_stages = 所有阶段:{ " " }
# Saving loading
@ -369,44 +440,46 @@ saving_loading_failed_to_get_home_directory = 无法获取打开/保存配置文
saving_loading_folder_config_instead_file = 无法在路径 "{ $path } 中创建或打开配置文件,因为已经有一个文件夹。
saving_loading_failed_to_create_configuration_folder = 无法创建配置文件夹 "{ $path }", 原因"{ $reason }".
saving_loading_failed_to_create_config_file = 无法创建配置文件 "{ $path }", 原因"{ $reason }".
saving_loading_failed_to_read_config_file = 无法从 "{ $path }" 加载配置,因为不存在或不是文件。
saving_loading_failed_to_read_config_file = 无法从 "{ $path }" 加载配置,因为不存在或不是文件。
saving_loading_failed_to_read_data_from_file = 无法从文件读取数据"{ $path }", 原因"{ $reason }".
saving_loading_orphan_data = 在行中发现了孤儿数据“{ $data }”,{ $line }"
saving_loading_not_valid = 在当前应用版本中设置“{ $data }”。
saving_loading_orphan_data = 在行 “{ $line }” 中发现了孤立数据 “{ $data }”
saving_loading_not_valid = 设置“{ $data }”在当前应用版本中不存在
# Invalid symlinks
invalid_symlink_infinite_recursion = 无限递归性
invalid_symlink_non_existent_destination = 不存在的目标文件
invalid_symlink_non_existent_destination = 目标文件不存在
# Other
selected_all_reference_folders = 当所有目录被设置为参考文件夹时,无法开始搜索
searching_for_data = 正在搜索数据,可能需要一段时间,请稍候...
text_view_messages = 消息
text_view_warnings = 警告
text_view_errors = 错误
about_window_motto = 这个程序可以自由使用,并将永远使用
about_window_motto = 本程序永久免费
# Various dialog
dialogs_ask_next_time = 下次询问
delete_file_failed = 除文件 { $name } 失败,原因 { $reason }
delete_file_failed = 除文件 { $name } 失败,原因 { $reason }
delete_title_dialog = 删除确认
delete_question_label = 您确定要删除文件吗?
delete_all_files_in_group_title = 确认删除组中的所有文件
delete_all_files_in_group_label1 = 在某些组中选择了所有记录
delete_all_files_in_group_label1 = 在某些组中,所有记录都被选中
delete_all_files_in_group_label2 = 您确定要删除它们吗?
delete_folder_failed = 无法删除文件夹 { $dir } ,因为文件夹不存在,您没有权限,或者不是空。
delete_folder_failed = 无法删除文件夹 { $dir } ,因为文件夹不存在,您没有权限,或者文件夹不是空
delete_items_label = { $items } 文件将被删除。
delete_items_groups_label = { $items } 文件来自 { $groups } 组将被删除。
delete_items_groups_label = 来自 { $groups } 中的 { $items } 个文件将被删除。
hardlink_failed = 硬链接失败
hard_sym_invalid_selection_title_dialog = 对某些组的选择无效
hard_sym_invalid_selection_label_1 = 在某些组中只选择了 1 条记录,它将被忽略。
hard_sym_invalid_selection_label_2 = 要能够链接到这文件,至少需要选择两个组的结果。
hard_sym_invalid_selection_label_1 = 在某些组中,只选择了一个记录,它将被忽略。
hard_sym_invalid_selection_label_2 = 要能够链接到这文件,至少需要选择两个组的结果。
hard_sym_invalid_selection_label_3 = 第一个组被承认为原始组别,没有改变,但是第二个组别后来被修改。
hard_sym_link_title_dialog = 链接确认
hard_sym_link_label = 您确定要链接文件吗?
hard_sym_link_label = 您确定要链接这些文件吗?
move_folder_failed = 无法移动文件夹 { $name }, 原因 { $reason }
move_file_failed = 移动文件 { $name } 失败,原因 { $reason }
move_files_title_dialog = 选择要移动重复文件的文件夹
move_files_choose_more_than_1_path = 必须选择一个路径才能复制重复的文件,选择 { $path_number }。
move_stats = 正确移动 { $num_files }/{ $all_files } 项目
save_results_to_file = 结果保存到文件 { $name }
move_files_choose_more_than_1_path = 只能选择一个路径来复制重复的文件,选择 { $path_number }。
move_stats = 正确移动 { $num_files }/{ $all_files } 项目
save_results_to_file = 结果保存到 txt 和 json 文件 { $name } 文件夹。
search_not_choosing_any_music = 错误:您必须选择至少一个带有音乐搜索类型的复选框。
search_not_choosing_any_broken_files = 错误:您必须选择至少一个带有选中文件类型的复选框。
include_folders_dialog_title = 要包含的文件夹
exclude_folders_dialog_title = 要排除的文件夹
include_manually_directories_dialog_title = 手动添加目录
@ -414,16 +487,13 @@ cache_properly_cleared = 已正确清除缓存
cache_clear_duplicates_title = 清除重复缓存
cache_clear_similar_images_title = 清除相似图像缓存
cache_clear_similar_videos_title = 正在清除类似视频缓存
cache_clear_message_label_1 = 您想要清除过时条目的缓存吗?
cache_clear_message_label_1 = 您想要清除过时条目的缓存吗?
cache_clear_message_label_2 = 此操作将删除所有指向无效文件的缓存项。
cache_clear_message_label_3 = 这可能会加速一些加载/保存到缓存。
cache_clear_message_label_4 = 警告:操作将从未接入的外部驱动器中移除所有缓存的数据,所以需要再次生成哈希
cache_clear_message_label_3 = 这可能会稍微加速加载/保存到缓存。
cache_clear_message_label_4 = 警告:操作将从未接入的外部驱动器中移除所有缓存数据。所以每个散列都需要重新生成
# Show preview
preview_temporary_file = 无法打开临时图像文件 { $name },原因 { $reason }
preview_0_size = 无法创建图像 { $name } 的预览宽度或高度为0。
preview_temporary_image_save = 保存临时图像文件到 { $name } 失败,原因 { $reason }
preview_temporary_image_remove = 无法删除临时图像文件 { $name },原因 { $reason }。
preview_failed_to_create_cache_dir = 无法创建图像预览所需目录 { $name } ,原因 { $reason }
preview_image_resize_failure = 调整图像 { $name } 的大小失败
preview_image_opening_failure = 打开镜像 { $name } 失败,原因 { $reason }
# Compare images (L is short Left, R is short Right - they can't take too much space)
compare_groups_number = 组 { $current_group }/{ $all_groups } ({ $images_in_group } 图像)
compare_move_left_button = L

@ -0,0 +1 @@
<svg enable-background="new 0 0 512 512" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><circle cx="255.998" cy="255.998" fill="#008000" r="245.419"/><path d="m256.001 512c-141.16 0-256.001-114.841-256.001-256.001 0-141.158 114.841-255.999 256.001-255.999s255.999 114.841 255.999 255.999c0 141.16-114.841 256.001-255.999 256.001zm0-490.842c-129.493 0-234.843 105.35-234.843 234.841 0 129.493 105.35 234.841 234.843 234.841s234.841-105.35 234.841-234.841-105.35-234.841-234.841-234.841z"/><g fill="#f2f2f2"><path d="m93.920837 228.48424h327.86569v55.947498h-327.86569z"/><path d="m94.802574-283.03333h327.86569v55.947498h-327.86569z" transform="rotate(90)"/></g></svg>

After

Width:  |  Height:  |  Size: 677 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.6 KiB

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save