czkawka_gui-8.0.0/.cargo_vcs_info.json0000644000000001510000000000100133350ustar { "git": { "sha1": "db164d3698198dd46653b1c3bb0384f8a9e38fab" }, "path_in_vcs": "czkawka_gui" }czkawka_gui-8.0.0/Cargo.lock0000644000003335460000000000100113310ustar # This file is automatically @generated by Cargo. # It is not intended for manual editing. version = 3 [[package]] name = "adler" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "adler2" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "adler32" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" [[package]] name = "aes" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", "cpufeatures", ] [[package]] name = "ahash" version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", "once_cell", "version_check", "zerocopy", ] [[package]] name = "aho-corasick" version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] [[package]] name = "aligned-vec" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" [[package]] name = "allocator-api2" version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] name = "android-tzdata" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" [[package]] name = "android_system_properties" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ "libc", ] [[package]] name = "anyhow" version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" [[package]] name = "arbitrary" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" dependencies = [ "derive_arbitrary", ] [[package]] name = "arc-swap" version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" [[package]] name = "arg_enum_proc_macro" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", "syn 2.0.79", ] [[package]] name = "arrayref" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "async-trait" version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", "syn 2.0.79", ] [[package]] name = "audio_checker" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20234f0225492ef6ee5b9258277720993b343c694873da45b3c46221816d8831" dependencies = [ "symphonia", ] [[package]] name = "autocfg" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "av-data" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "124ae24335161b3d2226594640a67903da0866e2591312591fc8ddad64c1b38c" dependencies = [ "byte-slice-cast", "bytes", "num-derive", "num-rational", "num-traits", "thiserror", ] [[package]] name = "av1-grain" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf" dependencies = [ "anyhow", "arrayvec", "log", "nom", "num-rational", "v_frame", ] [[package]] name = "avif-serialize" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "876c75a42f6364451a033496a14c44bffe41f5f4a8236f697391f11024e596d2" dependencies = [ "arrayvec", ] [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "basic-toml" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "823388e228f614e9558c6804262db37960ec8821856535f5c3f59913140558f8" dependencies = [ "serde", ] [[package]] name = "bincode" version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" dependencies = [ "serde", ] [[package]] name = "bit_field" version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" [[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "bitreader" version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1123451be0f8ada15415fbb4e0fe50775be531f61a432c18168a4f96e470ce1" dependencies = [ "cfg-if", ] [[package]] name = "bitstream-io" version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b81e1519b0d82120d2fd469d5bfb2919a9361c48b02d82d04befc1cdd2002452" [[package]] name = "bk-tree" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8283fb8e64b873918f8bc527efa6aff34956296e48ea750a9c909cd47c01546" dependencies = [ "fnv", "triple_accel", ] [[package]] name = "blake3" version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d82033247fd8e890df8f740e407ad4d038debb9eb1f40533fffb32e7d17dc6f7" dependencies = [ "arrayref", "arrayvec", "cc", "cfg-if", "constant_time_eq", ] [[package]] name = "block" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" [[package]] name = "block-buffer" version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] [[package]] name = "block-padding" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" dependencies = [ "generic-array", ] [[package]] name = "block2" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" dependencies = [ "objc2", ] [[package]] name = "built" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "236e6289eda5a812bc6b53c3b024039382a2895fbbeef2d748b2931546d392c4" [[package]] name = "bumpalo" version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "byte-slice-cast" version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "bytemuck" version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" [[package]] name = "byteorder" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "byteorder-lite" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" [[package]] name = "bzip2" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" dependencies = [ "bzip2-sys", "libc", ] [[package]] name = "bzip2-sys" version = "0.1.11+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" dependencies = [ "cc", "libc", "pkg-config", ] [[package]] name = "cairo-rs" version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8a0ea147c94108c9613235388f540e4d14c327f7081c9e471fc8ee8a2533e69" dependencies = [ "bitflags 2.6.0", "cairo-sys-rs", "glib", "libc", ] [[package]] name = "cairo-sys-rs" version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "428290f914b9b86089f60f5d8a9f6e440508e1bcff23b25afd51502b0a2da88f" dependencies = [ "glib-sys", "libc", "system-deps 7.0.3", ] [[package]] name = "cbc" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" dependencies = [ "cipher", ] [[package]] name = "cc" version = "1.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e80e3b6a3ab07840e1cae9b0666a63970dc28e8ed5ffbcdacbfc760c281bfc1" dependencies = [ "jobserver", "libc", "shlex", ] [[package]] name = "cfb" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" dependencies = [ "byteorder", "fnv", "uuid", ] [[package]] name = "cfg-expr" version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" dependencies = [ "smallvec", "target-lexicon", ] [[package]] name = "cfg-expr" version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0890061c4d3223e7267f3bad2ec40b997d64faac1c2815a4a9d95018e2b9e9c" dependencies = [ "smallvec", "target-lexicon", ] [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", "windows-targets 0.52.6", ] [[package]] name = "cipher" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", ] [[package]] name = "color_quant" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "const_fn" version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "373e9fafaa20882876db20562275ff58d50e0caa2590077fe7ce7bef90211d0d" [[package]] name = "constant_time_eq" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] name = "core-foundation-sys" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core2" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" dependencies = [ "memchr", ] [[package]] name = "cpufeatures" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] [[package]] name = "crc32fast" version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crunchy" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-common" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", "typenum", ] [[package]] name = "czkawka_core" version = "8.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b5a6bbfd5a48f72c5114868f0a5c424af9b437ed6a58a8cc088e6c4db4a6905" dependencies = [ "anyhow", "audio_checker", "bincode", "bitflags 2.6.0", "bk-tree", "blake3", "crc32fast", "crossbeam-channel", "directories-next", "ffmpeg_cmdline_utils", "file-id", "fun_time", "hamming", "handsome_logger", "humansize", "i18n-embed", "i18n-embed-fl", "image 0.25.2", "image_hasher", "imagepipe", "infer", "itertools 0.13.0", "jxl-oxide", "libheif-rs", "libheif-sys", "libraw-rs", "lofty", "log", "mime_guess", "once_cell", "os_info", "pdf", "rawloader", "rayon", "rust-embed", "rustc_version", "rusty-chromaprint", "serde", "serde_json", "state", "symphonia", "tempfile", "trash", "vid_dup_finder_lib", "xxhash-rust", "zip", ] [[package]] name = "czkawka_gui" version = "8.0.0" dependencies = [ "chrono", "crossbeam-channel", "czkawka_core", "directories-next", "fs_extra", "fun_time", "gdk4", "glib", "gtk4", "handsome_logger", "humansize", "i18n-embed", "i18n-embed-fl", "image 0.25.2", "image_hasher", "log", "once_cell", "open", "rayon", "regex", "rust-embed", "trash", "winapi", ] [[package]] name = "darling" version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" dependencies = [ "darling_core", "darling_macro", ] [[package]] name = "darling_core" version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim 0.10.0", "syn 1.0.109", ] [[package]] name = "darling_macro" version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core", "quote", "syn 1.0.109", ] [[package]] name = "dary_heap" version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7762d17f1241643615821a8455a0b2c3e803784b058693d990b11f2dce25a0ca" [[package]] name = "dashmap" version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" dependencies = [ "cfg-if", "crossbeam-utils", "hashbrown 0.14.5", "lock_api", "once_cell", "parking_lot_core", ] [[package]] name = "data-encoding" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" [[package]] name = "datasize" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e65c07d59e45d77a8bda53458c24a828893a99ac6cdd9c84111e09176ab739a2" dependencies = [ "datasize_derive", ] [[package]] name = "datasize_derive" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613e4ee15899913285b7612004bbd490abd605be7b11d35afada5902fb6b91d5" dependencies = [ "proc-macro2", "quote", "syn 1.0.109", ] [[package]] name = "dav1d" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d4b54a40baf633a71c6f0fb49494a7e4ee7bc26f3e727212b6cb915aa1ea1e1" dependencies = [ "av-data", "bitflags 2.6.0", "dav1d-sys", "static_assertions", ] [[package]] name = "dav1d-sys" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ecb1c5e8f4dc438eedc1b534a54672fb0e0a56035dae6b50162787bd2c50e95" dependencies = [ "libc", "system-deps 6.2.2", ] [[package]] name = "dcv-color-primitives" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07ad62edfed069700a5b33af6babd29c498d7e33eb01d96ffa8841ee1841634c" dependencies = [ "paste", "wasm-bindgen", ] [[package]] name = "deflate" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c86f7e25f518f4b81808a2cf1c50996a61f5c2eb394b2393bd87f2a4780a432f" dependencies = [ "adler32", ] [[package]] name = "deranged" version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ "powerfmt", ] [[package]] name = "derive_arbitrary" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", "syn 2.0.79", ] [[package]] name = "digest" version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", "subtle", ] [[package]] name = "directories-next" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" dependencies = [ "cfg-if", "dirs-sys-next", ] [[package]] name = "dirs-sys-next" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ "libc", "redox_users", "winapi", ] [[package]] name = "displaydoc" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", "syn 2.0.79", ] [[package]] name = "doc-comment" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "either" version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "encoding_rs" version = "0.8.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" dependencies = [ "cfg-if", ] [[package]] name = "enumn" version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", "syn 2.0.79", ] [[package]] name = "equivalent" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", ] [[package]] name = "exr" version = "1.72.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4" dependencies = [ "bit_field", "flume", "half", "lebe", "miniz_oxide 0.7.4", "rayon-core", "smallvec", "zune-inflate", ] [[package]] name = "extended" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af9673d8203fcb076b19dfd17e38b3d4ae9f44959416ea532ce72415a6020365" [[package]] name = "fallible_collections" version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a88c69768c0a15262df21899142bc6df9b9b823546d4b4b9a7bc2d6c448ec6fd" dependencies = [ "hashbrown 0.13.2", ] [[package]] name = "fastrand" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "fax" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b03e33ad0e71af414ef9d2b0a94d23ff59115bb068e6a6a06c0952f2c22ffd77" dependencies = [ "fax_derive", ] [[package]] name = "fax_derive" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c1d7ffc9f2dc8316348c75281a99c8fdc60c1ddf4f82a366d117bf1b74d5a39" dependencies = [ "proc-macro2", "quote", "syn 1.0.109", ] [[package]] name = "fdeflate" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8090f921a24b04994d9929e204f50b498a33ea6ba559ffaa05e04f7ee7fb5ab" dependencies = [ "simd-adler32", ] [[package]] name = "ffmpeg_cmdline_utils" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4465342596fe680b4670e2f235066aaa123e44a0149fecb86378f288b32c83db" dependencies = [ "image 0.24.9", "rayon", "serde", "serde_json", "thiserror", "winapi", ] [[package]] name = "field-offset" version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" dependencies = [ "memoffset", "rustc_version", ] [[package]] name = "file-id" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6584280525fb2059cba3db2c04abf947a1a29a45ddae89f3870f8281704fafc9" dependencies = [ "windows-sys 0.48.0", ] [[package]] name = "find-crate" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59a98bbaacea1c0eb6a0876280051b892eb73594fd90cf3b20e9c817029c57d2" dependencies = [ "toml 0.5.11", ] [[package]] name = "flate2" version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ "crc32fast", "miniz_oxide 0.8.0", ] [[package]] name = "fluent" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb74634707bebd0ce645a981148e8fb8c7bccd4c33c652aeffd28bf2f96d555a" dependencies = [ "fluent-bundle", "unic-langid", ] [[package]] name = "fluent-bundle" version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fe0a21ee80050c678013f82edf4b705fe2f26f1f9877593d13198612503f493" dependencies = [ "fluent-langneg", "fluent-syntax", "intl-memoizer", "intl_pluralrules", "rustc-hash", "self_cell 0.10.3", "smallvec", "unic-langid", ] [[package]] name = "fluent-langneg" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94" dependencies = [ "unic-langid", ] [[package]] name = "fluent-syntax" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a530c4694a6a8d528794ee9bbd8ba0122e779629ac908d15ad5a7ae7763a33d" dependencies = [ "thiserror", ] [[package]] name = "flume" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" dependencies = [ "spin", ] [[package]] name = "fnv" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "four-cc" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92d73a076bdabd78c2f9045dba1b90664a655fa8372581c238596e1eb3a5e1b7" [[package]] name = "fs_extra" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "fun_time" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bee194d43605ea83cca7af42af5f9001fab1a8e2220cb8a012e21dda6167fdb0" dependencies = [ "fun_time_derive", "log", ] [[package]] name = "fun_time_derive" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71555fd2db00938d82d29d8fa62a2ae80aed2c162c328d775f79e98d9212f013" dependencies = [ "darling", "log", "proc-macro2", "quote", "syn 1.0.109", ] [[package]] name = "futures-channel" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", ] [[package]] name = "futures-core" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", "futures-util", ] [[package]] name = "futures-io" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", "syn 2.0.79", ] [[package]] name = "futures-task" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-core", "futures-macro", "futures-task", "pin-project-lite", "pin-utils", "slab", ] [[package]] name = "gdk-pixbuf" version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4c29071a9e92337d8270a85cb0510cda4ac478be26d09ad027cc1d081911b19" dependencies = [ "gdk-pixbuf-sys", "gio", "glib", "libc", ] [[package]] name = "gdk-pixbuf-sys" version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "687343b059b91df5f3fbd87b4307038fa9e647fcc0461d0d3f93e94fee20bf3d" dependencies = [ "gio-sys", "glib-sys", "gobject-sys", "libc", "system-deps 7.0.3", ] [[package]] name = "gdk4" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c121aeeb0cf7545877ae615dac6bfd088b739d8abee4d55e7143b06927d16a31" dependencies = [ "cairo-rs", "gdk-pixbuf", "gdk4-sys", "gio", "glib", "libc", "pango", ] [[package]] name = "gdk4-sys" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d3c03d1ea9d5199f14f060890fde68a3b5ec5699144773d1fa6abf337bfbc9c" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", "gio-sys", "glib-sys", "gobject-sys", "libc", "pango-sys", "pkg-config", "system-deps 7.0.3", ] [[package]] name = "generator" version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" dependencies = [ "cc", "libc", "log", "rustversion", "windows 0.48.0", ] [[package]] name = "generic-array" version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", ] [[package]] name = "getrandom" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", "wasi", ] [[package]] name = "gif" version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" dependencies = [ "color_quant", "weezl", ] [[package]] name = "gio" version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8d999e8fb09583e96080867e364bc1e701284ad206c76a5af480d63833ad43c" dependencies = [ "futures-channel", "futures-core", "futures-io", "futures-util", "gio-sys", "glib", "libc", "pin-project-lite", "smallvec", ] [[package]] name = "gio-sys" version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f7efc368de04755344f0084104835b6bb71df2c1d41e37d863947392a894779" dependencies = [ "glib-sys", "gobject-sys", "libc", "system-deps 7.0.3", "windows-sys 0.52.0", ] [[package]] name = "glib" version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adcf1ec6d3650bf9fdbc6cee242d4fcebc6f6bfd9bea5b929b6a8b7344eb85ff" dependencies = [ "bitflags 2.6.0", "futures-channel", "futures-core", "futures-executor", "futures-task", "futures-util", "gio-sys", "glib-macros", "glib-sys", "gobject-sys", "libc", "memchr", "smallvec", ] [[package]] name = "glib-macros" version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6bf88f70cd5720a6197639dcabcb378dd528d0cb68cb1f45e3b358bcb841cd7" dependencies = [ "heck 0.5.0", "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.79", ] [[package]] name = "glib-sys" version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f9eca5d88cfa6a453b00d203287c34a2b7cac3a7831779aa2bb0b3c7233752b" dependencies = [ "libc", "system-deps 7.0.3", ] [[package]] name = "glob" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globalcache" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240a3059d86f2ba6859ac79f95ff94e65606abc775c1bc0ecf9b6590fb35dc04" dependencies = [ "async-trait", "tuple", "web-time", ] [[package]] name = "gobject-sys" version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4c674d2ff8478cf0ec29d2be730ed779fef54415a2fb4b565c52def62696462" dependencies = [ "glib-sys", "libc", "system-deps 7.0.3", ] [[package]] name = "graphene-rs" version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f53144c7fe78292705ff23935f1477d511366fb2f73c43d63b37be89076d2fe" dependencies = [ "glib", "graphene-sys", "libc", ] [[package]] name = "graphene-sys" version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e741797dc5081e59877a4d72c442c72d61efdd99161a0b1c1b29b6b988934b99" dependencies = [ "glib-sys", "libc", "pkg-config", "system-deps 7.0.3", ] [[package]] name = "gsk4" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa21a2f7c51ee1c6cc1242c2faf3aae2b7566138f182696759987bde8219e922" dependencies = [ "cairo-rs", "gdk4", "glib", "graphene-rs", "gsk4-sys", "libc", "pango", ] [[package]] name = "gsk4-sys" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f9fb607554f9f4e8829eb7ea301b0fde051e1dbfd5d16b143a8a9c2fac6c01b" dependencies = [ "cairo-sys-rs", "gdk4-sys", "glib-sys", "gobject-sys", "graphene-sys", "libc", "pango-sys", "system-deps 7.0.3", ] [[package]] name = "gtk4" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "31e2d105ce672f5cdcb5af2602e91c2901e91c72da15ab76f613ad57ecf04c6d" dependencies = [ "cairo-rs", "field-offset", "futures-channel", "gdk-pixbuf", "gdk4", "gio", "glib", "graphene-rs", "gsk4", "gtk4-macros", "gtk4-sys", "libc", "pango", ] [[package]] name = "gtk4-macros" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9e7b362c8fccd2712297903717d65d30defdab2b509bc9d209cbe5ffb9fabaf" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.79", ] [[package]] name = "gtk4-sys" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cbe4325908b1c1642dbb48e9f49c07a73185babf43e8b2065b0f881a589f55b8" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", "gdk4-sys", "gio-sys", "glib-sys", "gobject-sys", "graphene-sys", "gsk4-sys", "libc", "pango-sys", "system-deps 7.0.3", ] [[package]] name = "half" version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" dependencies = [ "cfg-if", "crunchy", ] [[package]] name = "hamming" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65043da274378d68241eb9a8f8f8aa54e349136f7b8e12f63e3ef44043cc30e1" [[package]] name = "handsome_logger" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c964c7058627d1cd74e3e91e9eab9ea654d18ca5bf09c32b78d070e9046b8112" dependencies = [ "log", "termcolor", "time", "tz-rs", ] [[package]] name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ "ahash", ] [[package]] name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash", "allocator-api2", ] [[package]] name = "hashbrown" version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" [[package]] name = "heck" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "heck" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hmac" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ "digest", ] [[package]] name = "humansize" version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" dependencies = [ "libm", ] [[package]] name = "i18n-config" version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e88074831c0be5b89181b05e6748c4915f77769ecc9a4c372f88b169a8509c9" dependencies = [ "basic-toml", "log", "serde", "serde_derive", "thiserror", "unic-langid", ] [[package]] name = "i18n-embed" version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e901c87176ac0b615033c81dbe927c230f74700abfd60ed953a6f547c87bbe6d" dependencies = [ "arc-swap", "fluent", "fluent-langneg", "fluent-syntax", "i18n-embed-impl", "intl-memoizer", "lazy_static", "locale_config", "log", "parking_lot", "rust-embed", "thiserror", "unic-langid", "walkdir", ] [[package]] name = "i18n-embed-fl" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d73fe51b9655599147183495551696628b335f75b2dbfa225196b16d69d7288e" dependencies = [ "dashmap", "find-crate", "fluent", "fluent-syntax", "i18n-config", "i18n-embed", "lazy_static", "proc-macro-error", "proc-macro2", "quote", "strsim 0.11.1", "syn 2.0.79", "unic-langid", ] [[package]] name = "i18n-embed-impl" version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81093c4701672f59416582fe3145676126fd23ba5db910acad0793c1108aaa58" dependencies = [ "find-crate", "i18n-config", "proc-macro2", "quote", "syn 2.0.79", ] [[package]] name = "iana-time-zone" version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", "windows-core 0.52.0", ] [[package]] name = "iana-time-zone-haiku" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ "cc", ] [[package]] name = "ident_case" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "image" version = "0.24.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" dependencies = [ "bytemuck", "byteorder", "color_quant", "exr", "gif", "jpeg-decoder", "num-traits", "png", "qoi", "tiff", ] [[package]] name = "image" version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99314c8a2152b8ddb211f924cdae532d8c5e4c8bb54728e12fff1b0cd5963a10" dependencies = [ "bytemuck", "byteorder-lite", "color_quant", "dav1d", "dcv-color-primitives", "exr", "gif", "image-webp", "mp4parse", "num-traits", "png", "qoi", "ravif", "rayon", "rgb", "tiff", "zune-core", "zune-jpeg", ] [[package]] name = "image-webp" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f79afb8cbee2ef20f59ccd477a218c12a93943d075b492015ecb1bb81f8ee904" dependencies = [ "byteorder-lite", "quick-error", ] [[package]] name = "image_hasher" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9481465fe767d92494987319b0b447a5829edf57f09c52bf8639396abaaeaf78" dependencies = [ "base64", "image 0.25.2", "rustdct 0.7.1", "serde", "transpose", ] [[package]] name = "imagepipe" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7af2d89e882e4be2e9b1ef50454aaa8da2c58924960e24521145f16ea4f7fd1c" dependencies = [ "bincode", "blake3", "image 0.24.9", "lazy_static", "log", "multicache", "num-traits", "rawloader", "rayon", "serde", "serde_derive", "serde_yaml", ] [[package]] name = "imgref" version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126" [[package]] name = "indexmap" version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", ] [[package]] name = "indexmap" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", "hashbrown 0.15.0", ] [[package]] name = "infer" version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc150e5ce2330295b8616ce0e3f53250e53af31759a9dbedad1621ba29151847" dependencies = [ "cfb", ] [[package]] name = "inout" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ "block-padding", "generic-array", ] [[package]] name = "interpolate_name" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", "syn 2.0.79", ] [[package]] name = "intl-memoizer" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe22e020fce238ae18a6d5d8c502ee76a52a6e880d99477657e6acc30ec57bda" dependencies = [ "type-map", "unic-langid", ] [[package]] name = "intl_pluralrules" version = "7.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972" dependencies = [ "unic-langid", ] [[package]] name = "is-docker" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" dependencies = [ "once_cell", ] [[package]] name = "is-wsl" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" dependencies = [ "is-docker", "once_cell", ] [[package]] name = "istring" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "875cc6fb9aecbc1a9bd736f2d18b12e0756b4c80c5e35e28262154abcb077a39" dependencies = [ "datasize", ] [[package]] name = "itertools" version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ "either", ] [[package]] name = "itertools" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ "either", ] [[package]] name = "itertools" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ "either", ] [[package]] name = "itoa" version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jobserver" version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] [[package]] name = "jpeg-decoder" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" dependencies = [ "rayon", ] [[package]] name = "js-sys" version = "0.3.71" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cb94a0ffd3f3ee755c20f7d8752f45cac88605a4dcf808abcff72873296ec7b" dependencies = [ "wasm-bindgen", ] [[package]] name = "jxl-bitstream" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5855ff16398ffbcf81fee52c41ca65326499c8764b21bb9952c367ace98995fb" dependencies = [ "tracing", ] [[package]] name = "jxl-coding" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da5b5093904e940bc11ef50e872c7bdf7b6e88653f012b925f8479daf212b5c9" dependencies = [ "jxl-bitstream", "tracing", ] [[package]] name = "jxl-color" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97f0dd548fabf9c094f9f2304059c86764f606b9040c0bfcfac55f155f423b55" dependencies = [ "jxl-bitstream", "jxl-coding", "jxl-grid", "jxl-threadpool", "tracing", ] [[package]] name = "jxl-frame" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4719f285ebfff5e64f352d0ef149a5244aef4f8e6b5aa666ba6241e90b50632f" dependencies = [ "jxl-bitstream", "jxl-coding", "jxl-grid", "jxl-image", "jxl-modular", "jxl-threadpool", "jxl-vardct", "tracing", ] [[package]] name = "jxl-grid" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e941628e8de1dc6ba1d2bba8ebc68a69f8ff50cc7ddce5bc821658d1f4ea6e59" dependencies = [ "tracing", ] [[package]] name = "jxl-image" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3824c81613c05c19a9e4329d569145d3f460c0fcadb3965bd8418162d43f7f4" dependencies = [ "jxl-bitstream", "jxl-color", "jxl-grid", "tracing", ] [[package]] name = "jxl-modular" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f48a5d003627f380004c29d35e51672da06ae343a2e6fe8d9c84295b9a3e843" dependencies = [ "jxl-bitstream", "jxl-coding", "jxl-grid", "jxl-threadpool", "tracing", ] [[package]] name = "jxl-oxide" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c209f66ef0fe72df77b44ee6aae98eb87bc2dd236d6981e44e143cc37f33f6e" dependencies = [ "jxl-bitstream", "jxl-color", "jxl-frame", "jxl-grid", "jxl-image", "jxl-render", "jxl-threadpool", "tracing", ] [[package]] name = "jxl-render" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aec53c004c9171e89f15ad1f029d6b638cbd70d3a70276746bb8c75f9393bb64" dependencies = [ "jxl-bitstream", "jxl-coding", "jxl-color", "jxl-frame", "jxl-grid", "jxl-image", "jxl-modular", "jxl-threadpool", "jxl-vardct", "tracing", ] [[package]] name = "jxl-threadpool" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d2860c68899a3c6266044fc26c6a0041e9f27145f58cc69b6eedc1b77f5ee13" dependencies = [ "tracing", ] [[package]] name = "jxl-vardct" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15da4b49b832b3d8a67329f47e2a1732e0847667938bb9b4a37d99a4668775c2" dependencies = [ "jxl-bitstream", "jxl-coding", "jxl-grid", "jxl-modular", "jxl-threadpool", "tracing", ] [[package]] name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "lebe" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "libc" version = "0.2.159" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" [[package]] name = "libflate" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45d9dfdc14ea4ef0900c1cddbc8dcd553fbaacd8a4a282cf4018ae9dd04fb21e" dependencies = [ "adler32", "core2", "crc32fast", "dary_heap", "libflate_lz77", ] [[package]] name = "libflate_lz77" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e0d73b369f386f1c44abd9c570d5318f55ccde816ff4b562fa452e5182863d" dependencies = [ "core2", "hashbrown 0.14.5", "rle-decode-fast", ] [[package]] name = "libfuzzer-sys" version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a96cfd5557eb82f2b83fed4955246c988d331975a002961b07c81584d107e7f7" dependencies = [ "arbitrary", "cc", "once_cell", ] [[package]] name = "libheif-rs" version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37d09b0d2d69da084eeeda9534662bc6b6096fbce3f307149750c0e572ad0ccd" dependencies = [ "enumn", "four-cc", "libheif-sys", ] [[package]] name = "libheif-sys" version = "1.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6af8b7a4151ae10f6d2e8684f7172c43f09c0258c84190fd9704422588ceec63" dependencies = [ "libc", ] [[package]] name = "libm" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] name = "libraw-rs" version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24ec60aab878560c299c6e70a0c6dc2278a2159ac6fe09650917266b8985387f" dependencies = [ "libraw-rs-sys", ] [[package]] name = "libraw-rs-sys" version = "0.0.4+libraw-0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba094a3b8b04cc42fdeafaff06f81d3b13a7d01cc7a8eae55b943dae1b65c3cc" dependencies = [ "cc", "libc", ] [[package]] name = "libredox" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.6.0", "libc", ] [[package]] name = "linked-hash-map" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "locale_config" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d2c35b16f4483f6c26f0e4e9550717a2f6575bcd6f12a53ff0c490a94a6934" dependencies = [ "lazy_static", "objc", "objc-foundation", "regex", "winapi", ] [[package]] name = "lock_api" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", ] [[package]] name = "lockfree-object-pool" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" [[package]] name = "lofty" version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8bc4717ff10833a623b009e9254ae8667c7a59edc3cfb01c37aeeef4b6d54a7" dependencies = [ "byteorder", "data-encoding", "flate2", "lofty_attr", "log", "ogg_pager", "paste", ] [[package]] name = "lofty_attr" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28bd4b9d8a5af74808932492521cdd272019b056f75fcc70056bd2c09fceb550" dependencies = [ "proc-macro2", "quote", "syn 2.0.79", ] [[package]] name = "log" version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "loom" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" dependencies = [ "cfg-if", "generator", "scoped-tls", "serde", "serde_json", "tracing", "tracing-subscriber", ] [[package]] name = "loop9" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" dependencies = [ "imgref", ] [[package]] name = "malloc_buf" version = "0.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" dependencies = [ "libc", ] [[package]] name = "matchers" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ "regex-automata 0.1.10", ] [[package]] name = "maybe-rayon" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" dependencies = [ "cfg-if", ] [[package]] name = "md5" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" [[package]] name = "memchr" version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memoffset" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" dependencies = [ "autocfg", ] [[package]] name = "mime" version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "mime_guess" version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" dependencies = [ "mime", "unicase", ] [[package]] name = "minimal-lexical" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ "adler", ] [[package]] name = "miniz_oxide" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ "adler2", "simd-adler32", ] [[package]] name = "mp4parse" version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63a35203d3c6ce92d5251c77520acb2e57108c88728695aa883f70023624c570" dependencies = [ "bitreader", "byteorder", "fallible_collections", "log", "num-traits", "static_assertions", ] [[package]] name = "multicache" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5086074c0a0812980aa88703d1bbcb4433e8423ecf4098a9849934f3dc09ba72" dependencies = [ "linked-hash-map", ] [[package]] name = "new_debug_unreachable" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] name = "nom" version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", "minimal-lexical", ] [[package]] name = "noop_proc_macro" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" [[package]] name = "nu-ansi-term" version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" dependencies = [ "overload", "winapi", ] [[package]] name = "num-bigint" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", ] [[package]] name = "num-complex" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "747d632c0c558b87dbabbe6a82f3b4ae03720d0646ac5b7b4dae89394be5f2c5" dependencies = [ "num-traits", ] [[package]] name = "num-complex" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "num-traits", ] [[package]] name = "num-conv" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] name = "num-derive" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", "syn 2.0.79", ] [[package]] name = "num-integer" version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ "num-traits", ] [[package]] name = "num-rational" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ "num-bigint", "num-integer", "num-traits", ] [[package]] name = "num-traits" version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "num_threads" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" dependencies = [ "libc", ] [[package]] name = "objc" version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" dependencies = [ "malloc_buf", ] [[package]] name = "objc-foundation" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" dependencies = [ "block", "objc", "objc_id", ] [[package]] name = "objc-sys" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" [[package]] name = "objc2" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" dependencies = [ "objc-sys", "objc2-encode", ] [[package]] name = "objc2-encode" version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8" [[package]] name = "objc2-foundation" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ "bitflags 2.6.0", "block2", "libc", "objc2", ] [[package]] name = "objc_id" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" dependencies = [ "objc", ] [[package]] name = "ogg_pager" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87b0bef808533c5890ab77279538212efdbbbd9aa4ef1ccdfcfbf77a42f7e6fa" dependencies = [ "byteorder", ] [[package]] name = "once_cell" version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "open" version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61a877bf6abd716642a53ef1b89fb498923a4afca5c754f9050b4d081c05c4b3" dependencies = [ "is-wsl", "libc", "pathdiff", ] [[package]] name = "os_info" version = "3.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae99c7fa6dd38c7cafe1ec085e804f8f555a2f8659b0dbe03f1f9963a9b51092" dependencies = [ "log", "windows-sys 0.52.0", ] [[package]] name = "overload" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "pango" version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa26aa54b11094d72141a754901cd71d9356432bb8147f9cace8d9c7ba95f356" dependencies = [ "gio", "glib", "libc", "pango-sys", ] [[package]] name = "pango-sys" version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84fd65917bf12f06544ae2bbc200abf9fc0a513a5a88a0fa81013893aef2b838" dependencies = [ "glib-sys", "gobject-sys", "libc", "system-deps 7.0.3", ] [[package]] name = "parking_lot" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", ] [[package]] name = "parking_lot_core" version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", "windows-targets 0.52.6", ] [[package]] name = "paste" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pathdiff" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" [[package]] name = "pbkdf2" version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest", "hmac", ] [[package]] name = "pdf" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3afc7e745846405d572daba57a429f30a198d955602aff8a1a9e437c2abfcaa2" dependencies = [ "aes", "bitflags 1.3.2", "cbc", "datasize", "deflate", "fax", "globalcache", "indexmap 2.6.0", "istring", "itertools 0.10.5", "jpeg-decoder", "libflate", "log", "md5", "once_cell", "pdf_derive", "sha2", "snafu", "stringprep", "weezl", ] [[package]] name = "pdf_derive" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1038b9cb38dec35eeee9f23eacfb2480087982f9b7e9221efa8034eea9ca2360" dependencies = [ "proc-macro2", "quote", "syn 1.0.109", ] [[package]] name = "pin-project-lite" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "pin-utils" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "png" version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52f9d46a34a05a6a57566bc2bfae066ef07585a6e3fa30fbbdff5936380623f0" dependencies = [ "bitflags 1.3.2", "crc32fast", "fdeflate", "flate2", "miniz_oxide 0.8.0", ] [[package]] name = "powerfmt" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ "zerocopy", ] [[package]] name = "primal-check" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc0d895b311e3af9902528fbb8f928688abbd95872819320517cc24ca6b2bd08" dependencies = [ "num-integer", ] [[package]] name = "proc-macro-crate" version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ "toml_edit", ] [[package]] name = "proc-macro-error" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", "syn 1.0.109", "version_check", ] [[package]] name = "proc-macro-error-attr" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ "proc-macro2", "quote", "version_check", ] [[package]] name = "proc-macro2" version = "1.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3e4daa0dcf6feba26f985457cdf104d4b4256fc5a09547140f3631bb076b19a" dependencies = [ "unicode-ident", ] [[package]] name = "profiling" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" dependencies = [ "profiling-procmacros", ] [[package]] name = "profiling-procmacros" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" dependencies = [ "quote", "syn 2.0.79", ] [[package]] name = "qoi" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" dependencies = [ "bytemuck", ] [[package]] name = "quick-error" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quote" version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] [[package]] name = "rand" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha", "rand_core", ] [[package]] name = "rand_chacha" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", "rand_core", ] [[package]] name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ "getrandom", ] [[package]] name = "rav1e" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" dependencies = [ "arbitrary", "arg_enum_proc_macro", "arrayvec", "av1-grain", "bitstream-io", "built", "cfg-if", "interpolate_name", "itertools 0.12.1", "libc", "libfuzzer-sys", "log", "maybe-rayon", "new_debug_unreachable", "noop_proc_macro", "num-derive", "num-traits", "once_cell", "paste", "profiling", "rand", "rand_chacha", "simd_helpers", "system-deps 6.2.2", "thiserror", "v_frame", "wasm-bindgen", ] [[package]] name = "ravif" version = "0.11.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f0bfd976333248de2078d350bfdf182ff96e168a24d23d2436cef320dd4bdd" dependencies = [ "avif-serialize", "imgref", "loop9", "quick-error", "rav1e", "rgb", ] [[package]] name = "rawloader" version = "0.37.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d8c6f168c492ffd326537b3aa5a8d5fe07f0d8a3970c5957f286bcd13f888aa" dependencies = [ "byteorder", "enumn", "glob", "lazy_static", "rayon", "rustc_version", "toml 0.5.11", ] [[package]] name = "rayon" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ "either", "rayon-core", ] [[package]] name = "rayon-core" version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ "crossbeam-deque", "crossbeam-utils", ] [[package]] name = "realfft" version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "390252372b7f2aac8360fc5e72eba10136b166d6faeed97e6d0c8324eb99b2b1" dependencies = [ "rustfft 6.2.0", ] [[package]] name = "redox_syscall" version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ "bitflags 2.6.0", ] [[package]] name = "redox_users" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom", "libredox", "thiserror", ] [[package]] name = "regex" version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" dependencies = [ "aho-corasick", "memchr", "regex-automata 0.4.8", "regex-syntax 0.8.5", ] [[package]] name = "regex-automata" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ "regex-syntax 0.6.29", ] [[package]] name = "regex-automata" version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" dependencies = [ "aho-corasick", "memchr", "regex-syntax 0.8.5", ] [[package]] name = "regex-syntax" version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "rgb" version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" dependencies = [ "bytemuck", ] [[package]] name = "rle-decode-fast" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422" [[package]] name = "rubato" version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6dd52e80cfc21894deadf554a5673002938ae4625f7a283e536f9cf7c17b0d5" dependencies = [ "num-complex 0.4.6", "num-integer", "num-traits", "realfft", ] [[package]] name = "rust-embed" version = "8.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa66af4a4fdd5e7ebc276f115e895611a34739a9c1c01028383d612d550953c0" dependencies = [ "rust-embed-impl", "rust-embed-utils", "walkdir", ] [[package]] name = "rust-embed-impl" version = "8.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6125dbc8867951125eec87294137f4e9c2c96566e61bf72c45095a7c77761478" dependencies = [ "proc-macro2", "quote", "rust-embed-utils", "syn 2.0.79", "walkdir", ] [[package]] name = "rust-embed-utils" version = "8.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e5347777e9aacb56039b0e1f28785929a8a3b709e87482e7442c72e7c12529d" dependencies = [ "sha2", "walkdir", ] [[package]] name = "rustc-hash" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc_version" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustdct" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fadcb505b98aa64da1dadb1498b912e3642aae4606623cb3ae952cd8da33f80d" dependencies = [ "rustfft 5.1.1", ] [[package]] name = "rustdct" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b61555105d6a9bf98797c063c362a1d24ed8ab0431655e38f1cf51e52089551" dependencies = [ "rustfft 6.2.0", ] [[package]] name = "rustfft" version = "5.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1869bb2a6ff77380d52ff4bc631f165637035a55855c76aa462c85474dadc42f" dependencies = [ "num-complex 0.3.1", "num-integer", "num-traits", "primal-check", "strength_reduce", "transpose", ] [[package]] name = "rustfft" version = "6.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43806561bc506d0c5d160643ad742e3161049ac01027b5e6d7524091fd401d86" dependencies = [ "num-complex 0.4.6", "num-integer", "num-traits", "primal-check", "strength_reduce", "transpose", "version_check", ] [[package]] name = "rustix" version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ "bitflags 2.6.0", "errno", "libc", "linux-raw-sys", "windows-sys 0.52.0", ] [[package]] name = "rustversion" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "rusty-chromaprint" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1755646867c36ecb391776deaa0b557a76d3badf20c142de7282630c34b20440" dependencies = [ "rubato", "rustfft 6.2.0", ] [[package]] name = "ryu" version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "same-file" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" dependencies = [ "winapi-util", ] [[package]] name = "scoped-tls" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "self_cell" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e14e4d63b804dc0c7ec4a1e52bcb63f02c7ac94476755aa579edac21e01f915d" dependencies = [ "self_cell 1.0.4", ] [[package]] name = "self_cell" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a" [[package]] name = "semver" version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", "syn 2.0.79", ] [[package]] name = "serde_json" version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa", "memchr", "ryu", "serde", ] [[package]] name = "serde_spanned" version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] [[package]] name = "serde_yaml" version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" dependencies = [ "indexmap 1.9.3", "ryu", "serde", "yaml-rust", ] [[package]] name = "sha1" version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", "digest", ] [[package]] name = "sha2" version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", "digest", ] [[package]] name = "sharded-slab" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] [[package]] name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "simd-adler32" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" [[package]] name = "simd_helpers" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" dependencies = [ "quote", ] [[package]] name = "slab" version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "smallvec" version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "snafu" version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" dependencies = [ "doc-comment", "snafu-derive", ] [[package]] name = "snafu-derive" version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" dependencies = [ "heck 0.4.1", "proc-macro2", "quote", "syn 1.0.109", ] [[package]] name = "spin" version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" dependencies = [ "lock_api", ] [[package]] name = "state" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b8c4a4445d81357df8b1a650d0d0d6fbbbfe99d064aa5e02f3e4022061476d8" dependencies = [ "loom", ] [[package]] name = "static_assertions" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "strength_reduce" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" [[package]] name = "stringprep" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" dependencies = [ "unicode-bidi", "unicode-normalization", "unicode-properties", ] [[package]] name = "strsim" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "subtle" version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "symphonia" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "815c942ae7ee74737bb00f965fa5b5a2ac2ce7b6c01c0cc169bbeaf7abd5f5a9" dependencies = [ "lazy_static", "symphonia-bundle-flac", "symphonia-bundle-mp3", "symphonia-codec-aac", "symphonia-codec-adpcm", "symphonia-codec-alac", "symphonia-codec-pcm", "symphonia-codec-vorbis", "symphonia-core", "symphonia-format-caf", "symphonia-format-isomp4", "symphonia-format-mkv", "symphonia-format-ogg", "symphonia-format-riff", "symphonia-metadata", ] [[package]] name = "symphonia-bundle-flac" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72e34f34298a7308d4397a6c7fbf5b84c5d491231ce3dd379707ba673ab3bd97" dependencies = [ "log", "symphonia-core", "symphonia-metadata", "symphonia-utils-xiph", ] [[package]] name = "symphonia-bundle-mp3" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c01c2aae70f0f1fb096b6f0ff112a930b1fb3626178fba3ae68b09dce71706d4" dependencies = [ "lazy_static", "log", "symphonia-core", "symphonia-metadata", ] [[package]] name = "symphonia-codec-aac" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdbf25b545ad0d3ee3e891ea643ad115aff4ca92f6aec472086b957a58522f70" dependencies = [ "lazy_static", "log", "symphonia-core", ] [[package]] name = "symphonia-codec-adpcm" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c94e1feac3327cd616e973d5be69ad36b3945f16b06f19c6773fc3ac0b426a0f" dependencies = [ "log", "symphonia-core", ] [[package]] name = "symphonia-codec-alac" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d8a6666649a08412906476a8b0efd9b9733e241180189e9f92b09c08d0e38f3" dependencies = [ "log", "symphonia-core", ] [[package]] name = "symphonia-codec-pcm" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f395a67057c2ebc5e84d7bb1be71cce1a7ba99f64e0f0f0e303a03f79116f89b" dependencies = [ "log", "symphonia-core", ] [[package]] name = "symphonia-codec-vorbis" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a98765fb46a0a6732b007f7e2870c2129b6f78d87db7987e6533c8f164a9f30" dependencies = [ "log", "symphonia-core", "symphonia-utils-xiph", ] [[package]] name = "symphonia-core" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "798306779e3dc7d5231bd5691f5a813496dc79d3f56bf82e25789f2094e022c3" dependencies = [ "arrayvec", "bitflags 1.3.2", "bytemuck", "lazy_static", "log", ] [[package]] name = "symphonia-format-caf" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e43c99c696a388295a29fe71b133079f5d8b18041cf734c5459c35ad9097af50" dependencies = [ "log", "symphonia-core", "symphonia-metadata", ] [[package]] name = "symphonia-format-isomp4" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abfdf178d697e50ce1e5d9b982ba1b94c47218e03ec35022d9f0e071a16dc844" dependencies = [ "encoding_rs", "log", "symphonia-core", "symphonia-metadata", "symphonia-utils-xiph", ] [[package]] name = "symphonia-format-mkv" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bb43471a100f7882dc9937395bd5ebee8329298e766250b15b3875652fe3d6f" dependencies = [ "lazy_static", "log", "symphonia-core", "symphonia-metadata", "symphonia-utils-xiph", ] [[package]] name = "symphonia-format-ogg" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ada3505789516bcf00fc1157c67729eded428b455c27ca370e41f4d785bfa931" dependencies = [ "log", "symphonia-core", "symphonia-metadata", "symphonia-utils-xiph", ] [[package]] name = "symphonia-format-riff" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f7be232f962f937f4b7115cbe62c330929345434c834359425e043bfd15f50" dependencies = [ "extended", "log", "symphonia-core", "symphonia-metadata", ] [[package]] name = "symphonia-metadata" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc622b9841a10089c5b18e99eb904f4341615d5aa55bbf4eedde1be721a4023c" dependencies = [ "encoding_rs", "lazy_static", "log", "symphonia-core", ] [[package]] name = "symphonia-utils-xiph" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "484472580fa49991afda5f6550ece662237b00c6f562c7d9638d1b086ed010fe" dependencies = [ "symphonia-core", "symphonia-metadata", ] [[package]] name = "syn" version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] [[package]] name = "syn" version = "2.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] [[package]] name = "system-deps" version = "6.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" dependencies = [ "cfg-expr 0.15.8", "heck 0.5.0", "pkg-config", "toml 0.8.19", "version-compare", ] [[package]] name = "system-deps" version = "7.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "66d23aaf9f331227789a99e8de4c91bf46703add012bdfd45fdecdfb2975a005" dependencies = [ "cfg-expr 0.17.0", "heck 0.5.0", "pkg-config", "toml 0.8.19", "version-compare", ] [[package]] name = "target-lexicon" version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" dependencies = [ "cfg-if", "fastrand", "once_cell", "rustix", "windows-sys 0.59.0", ] [[package]] name = "termcolor" version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", ] [[package]] name = "thiserror" version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", "syn 2.0.79", ] [[package]] name = "thread_local" version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ "cfg-if", "once_cell", ] [[package]] name = "tiff" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" dependencies = [ "flate2", "jpeg-decoder", "weezl", ] [[package]] name = "time" version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", "itoa", "libc", "num-conv", "num_threads", "powerfmt", "serde", "time-core", "time-macros", ] [[package]] name = "time-core" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" dependencies = [ "num-conv", "time-core", ] [[package]] name = "tinystr" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" dependencies = [ "displaydoc", ] [[package]] name = "tinyvec" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] [[package]] name = "tinyvec_macros" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "toml" version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ "serde", ] [[package]] name = "toml" version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ "serde", "serde_spanned", "toml_datetime", "toml_edit", ] [[package]] name = "toml_datetime" version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" dependencies = [ "serde", ] [[package]] name = "toml_edit" version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ "indexmap 2.6.0", "serde", "serde_spanned", "toml_datetime", "winnow", ] [[package]] name = "tracing" version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ "pin-project-lite", "tracing-attributes", "tracing-core", ] [[package]] name = "tracing-attributes" version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", "syn 2.0.79", ] [[package]] name = "tracing-core" version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", ] [[package]] name = "tracing-log" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ "log", "once_cell", "tracing-core", ] [[package]] name = "tracing-subscriber" version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ "matchers", "nu-ansi-term", "once_cell", "regex", "sharded-slab", "smallvec", "thread_local", "tracing", "tracing-core", "tracing-log", ] [[package]] name = "transpose" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ad61aed86bc3faea4300c7aee358b4c6d0c8d6ccc36524c96e4c92ccf26e77e" dependencies = [ "num-integer", "strength_reduce", ] [[package]] name = "trash" version = "5.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33caf2a9be1812a263a4bfce74d2de225fcde12ee7b77001361abd2b34ffdcc4" dependencies = [ "chrono", "libc", "log", "objc2", "objc2-foundation", "once_cell", "scopeguard", "urlencoding", "windows 0.56.0", ] [[package]] name = "triple_accel" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622b09ce2fe2df4618636fb92176d205662f59803f39e70d1c333393082de96c" [[package]] name = "tuple" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bb9f6bd73479481158ba8ee3edf17aca93354623d13f02e96a2014fdbc1c37e" dependencies = [ "num-traits", "serde", ] [[package]] name = "type-map" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f" dependencies = [ "rustc-hash", ] [[package]] name = "typenum" version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "tz-rs" version = "0.6.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33851b15c848fad2cf4b105c6bb66eb9512b6f6c44a4b13f57c53c73c707e2b4" dependencies = [ "const_fn", ] [[package]] name = "unic-langid" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23dd9d1e72a73b25e07123a80776aae3e7b0ec461ef94f9151eed6ec88005a44" dependencies = [ "unic-langid-impl", ] [[package]] name = "unic-langid-impl" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a5422c1f65949306c99240b81de9f3f15929f5a8bfe05bb44b034cc8bf593e5" dependencies = [ "serde", "tinystr", ] [[package]] name = "unicase" version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" dependencies = [ "version_check", ] [[package]] name = "unicode-bidi" version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" [[package]] name = "unicode-ident" version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] [[package]] name = "unicode-properties" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" [[package]] name = "urlencoding" version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" [[package]] name = "uuid" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" [[package]] name = "v_frame" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" dependencies = [ "aligned-vec", "num-traits", "wasm-bindgen", ] [[package]] name = "valuable" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "version-compare" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vid_dup_finder_lib" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6aeb8f9a4a0c8aeb3963a0db7ecd80c92353576c807949faeae08a7b259b0a2" dependencies = [ "ffmpeg_cmdline_utils", "image 0.24.9", "rand", "rayon", "rustdct 0.6.0", "serde", "serde_json", "thiserror", "transpose", ] [[package]] name = "walkdir" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", "winapi-util", ] [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" version = "0.2.94" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef073ced962d62984fb38a36e5fdc1a2b23c9e0e1fa0689bb97afa4202ef6887" dependencies = [ "cfg-if", "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" version = "0.2.94" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4bfab14ef75323f4eb75fa52ee0a3fb59611977fd3240da19b2cf36ff85030e" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", "syn 2.0.79", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" version = "0.2.94" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7bec9830f60924d9ceb3ef99d55c155be8afa76954edffbb5936ff4509474e7" dependencies = [ "quote", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" version = "0.2.94" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c74f6e152a76a2ad448e223b0fc0b6b5747649c3d769cc6bf45737bf97d0ed6" dependencies = [ "proc-macro2", "quote", "syn 2.0.79", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" version = "0.2.94" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a42f6c679374623f295a8623adfe63d9284091245c3504bde47c17a3ce2777d9" [[package]] name = "web-time" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", ] [[package]] name = "weezl" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" [[package]] name = "winapi" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ "winapi-i686-pc-windows-gnu", "winapi-x86_64-pc-windows-gnu", ] [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ "windows-sys 0.59.0", ] [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" dependencies = [ "windows-targets 0.48.5", ] [[package]] name = "windows" version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1de69df01bdf1ead2f4ac895dc77c9351aefff65b2f3db429a343f9cbf05e132" dependencies = [ "windows-core 0.56.0", "windows-targets 0.52.6", ] [[package]] name = "windows-core" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ "windows-targets 0.52.6", ] [[package]] name = "windows-core" version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4698e52ed2d08f8658ab0c39512a7c00ee5fe2688c65f8c0a4f06750d729f2a6" dependencies = [ "windows-implement", "windows-interface", "windows-result", "windows-targets 0.52.6", ] [[package]] name = "windows-implement" version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b" dependencies = [ "proc-macro2", "quote", "syn 2.0.79", ] [[package]] name = "windows-interface" version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc" dependencies = [ "proc-macro2", "quote", "syn 2.0.79", ] [[package]] name = "windows-result" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" dependencies = [ "windows-targets 0.52.6", ] [[package]] name = "windows-sys" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ "windows-targets 0.48.5", ] [[package]] name = "windows-sys" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ "windows-targets 0.52.6", ] [[package]] name = "windows-sys" version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ "windows-targets 0.52.6", ] [[package]] name = "windows-targets" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ "windows_aarch64_gnullvm 0.48.5", "windows_aarch64_msvc 0.48.5", "windows_i686_gnu 0.48.5", "windows_i686_msvc 0.48.5", "windows_x86_64_gnu 0.48.5", "windows_x86_64_gnullvm 0.48.5", "windows_x86_64_msvc 0.48.5", ] [[package]] name = "windows-targets" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" dependencies = [ "memchr", ] [[package]] name = "xxhash-rust" version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a5cbf750400958819fb6178eaa83bee5cd9c29a26a40cc241df8c70fdd46984" [[package]] name = "yaml-rust" version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" dependencies = [ "linked-hash-map", ] [[package]] name = "zerocopy" version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", "syn 2.0.79", ] [[package]] name = "zeroize" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", "syn 2.0.79", ] [[package]] name = "zip" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc5e4288ea4057ae23afc69a4472434a87a2495cafce6632fd1c4ec9f5cf3494" dependencies = [ "aes", "arbitrary", "bzip2", "constant_time_eq", "crc32fast", "crossbeam-utils", "displaydoc", "flate2", "hmac", "indexmap 2.6.0", "memchr", "pbkdf2", "rand", "sha1", "thiserror", "time", "zeroize", "zopfli", ] [[package]] name = "zopfli" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" dependencies = [ "bumpalo", "crc32fast", "lockfree-object-pool", "log", "once_cell", "simd-adler32", ] [[package]] name = "zune-core" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" [[package]] name = "zune-inflate" version = "0.2.54" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" dependencies = [ "simd-adler32", ] [[package]] name = "zune-jpeg" version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16099418600b4d8f028622f73ff6e3deaabdff330fb9a2a131dea781ee8b0768" dependencies = [ "zune-core", ] czkawka_gui-8.0.0/Cargo.toml0000644000000044370000000000100113460ustar # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies. # # If you are reading this file be aware that the original Cargo.toml # will likely look very different (and much more reasonable). # See Cargo.toml.orig for the original contents. [package] edition = "2021" rust-version = "1.79.0" name = "czkawka_gui" version = "8.0.0" authors = ["Rafał Mikrut "] build = false autobins = false autoexamples = false autotests = false autobenches = false description = "GTK frontend of Czkawka" homepage = "https://github.com/qarmin/czkawka" readme = "README.md" license = "MIT" repository = "https://github.com/qarmin/czkawka" [[bin]] name = "czkawka_gui" path = "src/main.rs" [dependencies.chrono] version = "0.4.38" [dependencies.crossbeam-channel] version = "0.5" [dependencies.czkawka_core] version = "8.0.0" features = [] [dependencies.directories-next] version = "2.0" [dependencies.fs_extra] version = "1.3" [dependencies.fun_time] version = "0.3" features = ["log"] [dependencies.gdk4] version = "0.9" [dependencies.glib] version = "0.20" [dependencies.gtk4] version = "0.9" features = ["v4_6"] default-features = false [dependencies.handsome_logger] version = "0.8" [dependencies.humansize] version = "2.1" [dependencies.i18n-embed] version = "0.15" features = [ "fluent-system", "desktop-requester", ] [dependencies.i18n-embed-fl] version = "0.9" [dependencies.image] version = "0.25" [dependencies.image_hasher] version = "2.0" [dependencies.log] version = "0.4.22" [dependencies.once_cell] version = "1.20" [dependencies.open] version = "5.3" [dependencies.rayon] version = "1.10" [dependencies.regex] version = "1.11" [dependencies.rust-embed] version = "8.5" features = ["debug-embed"] [dependencies.trash] version = "5.1" [features] default = [] heif = ["czkawka_core/heif"] libavif = ["czkawka_core/libavif"] libraw = ["czkawka_core/libraw"] [target."cfg(windows)".dependencies.winapi] version = "0.3.9" features = [ "combaseapi", "objbase", "shobjidl_core", "windef", "winerror", "wtypesbase", "winuser", ] czkawka_gui-8.0.0/Cargo.toml.orig0000644000000030470000000000100123010ustar [package] name = "czkawka_gui" version = "8.0.0" authors = ["Rafał Mikrut "] edition = "2021" rust-version = "1.79.0" description = "GTK frontend of Czkawka" license = "MIT" homepage = "https://github.com/qarmin/czkawka" repository = "https://github.com/qarmin/czkawka" [dependencies] gdk4 = "0.9" glib = "0.20" gtk4 = { version = "0.9", default-features = false, features = ["v4_6"] } humansize = "2.1" chrono = "0.4.38" # Used for sending stop signal across threads crossbeam-channel = "0.5" # For saving/loading config files to specific directories directories-next = "2.0" # For opening files open = "5.3" # To get image preview image = "0.25" # To be able to use custom select regex = "1.11" # To get image_hasher types image_hasher = "2.0" # Move files to trash trash = "5.1" # For moving files(why std::fs doesn't have such features?) fs_extra = "1.3" # Language i18n-embed = { version = "0.15", features = ["fluent-system", "desktop-requester"] } i18n-embed-fl = "0.9" rust-embed = { version = "8.5", features = ["debug-embed"] } once_cell = "1.20" log = "0.4.22" handsome_logger = "0.8" fun_time = { version = "0.3", features = ["log"] } rayon = "1.10" czkawka_core = { path = "../czkawka_core", version = "8.0.0", features = [] } [target.'cfg(windows)'.dependencies] winapi = { version = "0.3.9", features = ["combaseapi", "objbase", "shobjidl_core", "windef", "winerror", "wtypesbase", "winuser"] } [features] default = [] heif = ["czkawka_core/heif"] libraw = ["czkawka_core/libraw"] libavif = ["czkawka_core/libavif"] czkawka_gui-8.0.0/Cargo.toml.orig000064400000000000000000000030471046102023000150230ustar 00000000000000[package] name = "czkawka_gui" version = "8.0.0" authors = ["Rafał Mikrut "] edition = "2021" rust-version = "1.79.0" description = "GTK frontend of Czkawka" license = "MIT" homepage = "https://github.com/qarmin/czkawka" repository = "https://github.com/qarmin/czkawka" [dependencies] gdk4 = "0.9" glib = "0.20" gtk4 = { version = "0.9", default-features = false, features = ["v4_6"] } humansize = "2.1" chrono = "0.4.38" # Used for sending stop signal across threads crossbeam-channel = "0.5" # For saving/loading config files to specific directories directories-next = "2.0" # For opening files open = "5.3" # To get image preview image = "0.25" # To be able to use custom select regex = "1.11" # To get image_hasher types image_hasher = "2.0" # Move files to trash trash = "5.1" # For moving files(why std::fs doesn't have such features?) fs_extra = "1.3" # Language i18n-embed = { version = "0.15", features = ["fluent-system", "desktop-requester"] } i18n-embed-fl = "0.9" rust-embed = { version = "8.5", features = ["debug-embed"] } once_cell = "1.20" log = "0.4.22" handsome_logger = "0.8" fun_time = { version = "0.3", features = ["log"] } rayon = "1.10" czkawka_core = { path = "../czkawka_core", version = "8.0.0", features = [] } [target.'cfg(windows)'.dependencies] winapi = { version = "0.3.9", features = ["combaseapi", "objbase", "shobjidl_core", "windef", "winerror", "wtypesbase", "winuser"] } [features] default = [] heif = ["czkawka_core/heif"] libraw = ["czkawka_core/libraw"] libavif = ["czkawka_core/libavif"] czkawka_gui-8.0.0/LICENSE000064400000000000000000000400371046102023000131410ustar 00000000000000MIT 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. Icons data/icons/com.github.qarmin.czkawka.Devel.svg data/icons/com.github.qarmin.czkawka.svg data/icons/com.github.qarmin.czkawka-symbolic.svg CC BY 4.0 License Copyright (c) 2020 [jannuary](https://github.com/jannuary) License: CC-BY-4.0 Creative Commons Attribution 4.0 International Public License . By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. . Section 1 -- Definitions. . a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. . b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. . c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. . d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. . e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. . f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. . g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. . h. Licensor means the individual(s) or entity(ies) granting rights under this Public License. . i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. . j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. . k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. . Section 2 -- Scope. . a. License grant. . 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: . a. reproduce and Share the Licensed Material, in whole or in part; and . b. produce, reproduce, and Share Adapted Material. . 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. . 3. Term. The term of this Public License is specified in Section 6(a). . 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a) (4) never produces Adapted Material. . 5. Downstream recipients. . a. Offer from the Licensor -- Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. . b. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. . 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). . b. Other rights. . 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. . 2. Patent and trademark rights are not licensed under this Public License. . 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. . Section 3 -- License Conditions. . Your exercise of the Licensed Rights is expressly made subject to the following conditions. . a. Attribution. . 1. If You Share the Licensed Material (including in modified form), You must: . a. retain the following if it is supplied by the Licensor with the Licensed Material: . i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); . ii. a copyright notice; . iii. a notice that refers to this Public License; . iv. a notice that refers to the disclaimer of warranties; . v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; . b. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and . c. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. . 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. . 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. . 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. . Section 4 -- Sui Generis Database Rights. . Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: . a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; . b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and . c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. . For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. . Section 5 -- Disclaimer of Warranties and Limitation of Liability. . a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. . b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. . c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. . Section 6 -- Term and Termination. . a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. . b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: . 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or . 2. upon express reinstatement by the Licensor. . For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. . c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. . d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. . Section 7 -- Other Terms and Conditions. . a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. . b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. . Section 8 -- Interpretation. . a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. . b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. . c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. . d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. GTK theme for Windows binaries MIT License Copyright (c) 2019-2020 Nick Rhodes 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. 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. You’re 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.czkawka_gui-8.0.0/README.md000064400000000000000000000120621046102023000134100ustar 00000000000000# 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/ Additional features like heif, libraw, libavif require additional libraries to be installed, and may increase ### Linux #### Prebuild binaries Ubuntu - `sudo apt install libgtk-4-bin libheif1 libraw-bin 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 ### Homebrew Czkawka gui is available in homebrew - https://formulae.brew.sh/formula/czkawka and can be installed via ``` brew install czkawka ``` ### Manual installation requirements ``` /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.79.0 | | GTK | 4.6 | ### Linux (Ubuntu, but on other OS should work similar) ```shell sudo apt install libgtk-4-dev -y # Base sudo apt install libgtk-4-dev libheif-dev libraw-dev libavif-dev libdav1d-dev -y # With features cargo run --release --bin czkawka_gui # Or with support for heif, libraw, libavif cargo run --release --bin czkawka_gui --features "heif,libraw,libavif" ``` ### 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, libraw, libavif cargo run --release --bin czkawka_gui --features "heif,libraw,libavif" ``` ### Windows Currently, there is are no instructions on how to compile the app on Windows natively.
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)
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(msys2 version support them) - 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. czkawka_gui-8.0.0/data/com.github.qarmin.czkawka.desktop000064400000000000000000000012611046102023000214130ustar 00000000000000[Desktop Entry] Type=Application Terminal=false Exec=czkawka_gui Name=Czkawka Name[it]=Singhiozzo Comment=Multi functional app to clean OS which allow to find duplicates, empty folders, similar files etc. Comment[it]=Programma multifunzionale per pulire il sistema, che permette di trovare file duplicati, cartelle vuote, file simili, ecc... Comment[zh_CN]=å¯ç”¨äºŽæ¸…ç†æ–‡ä»¶å‰¯æœ¬ã€ç©ºæ–‡ä»¶å¤¹ã€ç›¸ä¼¼æ–‡ä»¶ç­‰çš„系统清ç†å·¥å…· Comment[zh_TW]=å¯ç”¨æ–¼æ¸…ç†é‡è¤‡æª”案ã€ç©ºè³‡æ–™å¤¾ã€ç›¸ä¼¼æª”案等的系統清ç†å·¥å…· Icon=com.github.qarmin.czkawka Categories=System;FileTools Keywords=Hiccup;duplicate;same;similar;cleaner StartupWMClass=czkawka_gui TryExec=czkawka_gui czkawka_gui-8.0.0/data/com.github.qarmin.czkawka.metainfo.xml000064400000000000000000000031141046102023000223420ustar 00000000000000 com.github.qarmin.czkawka Czkawka Multi functional app to find duplicates, empty folders, similar images, broken files etc. CC0-1.0 MIT

Czkawka is simple, fast and easy to use app to remove unnecessary files from your computer.

com.github.qarmin.czkawka.desktop https://user-images.githubusercontent.com/41945903/147875238-7f82fa27-c6dd-47e7-87ed-e253fb2cbc3e.png https://user-images.githubusercontent.com/41945903/147875239-bcf9776c-885d-45ac-ba82-5a426d8e1647.png https://user-images.githubusercontent.com/41945903/147875243-e654e683-37f7-46fa-8321-119a4c5775e7.png Rafał Mikrut Rafał Mikrut https://github.com/qarmin/czkawka https://github.com/qarmin/czkawka/issues https://github.com/sponsors/qarmin https://crowdin.com/project/czkawka
czkawka_gui-8.0.0/data/icons/com.github.qarmin.czkawka-symbolic.svg000064400000000000000000000117071046102023000235010ustar 00000000000000 czkawka_gui-8.0.0/data/icons/com.github.qarmin.czkawka.Devel.svg000064400000000000000000000421761046102023000227240ustar 00000000000000 czkawka_gui-8.0.0/data/icons/com.github.qarmin.czkawka.svg000064400000000000000000000240101046102023000216510ustar 00000000000000 czkawka_gui-8.0.0/i18n/ar/czkawka_gui.ftl000064400000000000000000001130031046102023000163150ustar 00000000000000# 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 = Ø§Ù„ÙØ±Ù‚ الأقصى music_compare_only_in_title_group = قارن Ùقط ÙÙŠ العنوان music_compare_only_in_title_group_tooltip = When enabled, files are grouped by title and then compared to each other. With 10000 files, instead almost 100 million comparisons usually there will be around 20000 comparisons. same_music_tooltip = يمكن تكوين البحث عن Ù…Ù„ÙØ§Øª موسيقية مشابهة بواسطة محتواها عن طريق الإعداد: - الحد الأدنى لوقت الشظايا الذي يمكن بعدها تحديد Ù…Ù„ÙØ§Øª الموسيقى على أنها - الحد الأقصى Ù„Ù„ÙØ§Ø±Ù‚ بين جزأين تم اختبارهما ÙˆØ§Ù„Ù…ÙØªØ§Ø­ إلى النتائج الجيدة هو العثور على مجموعات معقولة من هذه المعلمات، عن تقديمه. تحديد الحد الأدنى من الوقت إلى 5 ثوان والحد الأقصى Ù„Ù„ÙØ±Ù‚ إلى 1.0ØŒ سيبحث عن أجزاء متطابقة تقريبا ÙÙŠ Ø§Ù„Ù…Ù„ÙØ§Øª. وقت 20 ثانية ÙˆÙØ§Ø±Ù‚ أقصى قدره 6.0ØŒ من ناحية أخرى، يعمل بشكل جيد من أجل العثور على تعديلات أو إصدارات حية وما إلى ذلك. بشكل Ø§ÙØªØ±Ø§Ø¶ÙŠØŒ يتم مقارنة كل مل٠موسيقي بآخر وقد يستغرق ذلك الكثير من الوقت عند اختبار العديد من Ø§Ù„Ù…Ù„ÙØ§ØªØŒ لذلك من Ø§Ù„Ø£ÙØ¶Ù„ عادة استخدام المجلدات المرجعية وتحديد Ø§Ù„Ù…Ù„ÙØ§Øª التي يجب مقارنتها مع بعضها البعض (مع Ù†ÙØ³ كمية Ø§Ù„Ù…Ù„ÙØ§Øª)ØŒ مقارنة بصمات الأصابع ستكون أسرع من 4 × على الأقل من دون مجلدات مرجعية). music_comparison_checkbox_tooltip = يبحث عن Ù…Ù„ÙØ§Øª موسيقية مماثلة باستخدام AIØŒ الذي يستخدم تعلم الآلة لإزالة الأقواس من العبارة. على سبيل المثال، مع تمكين هذا الخيار، Ø§Ù„Ù…Ù„ÙØ§Øª المعنية سو٠تعتبر متكررة: S wie dziz L.o b --- S wie dziz L.o 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_use_rust_preview = استخدام المكتبات الخارجية بدلاً من gtk لتحميل المعاينات settings_use_rust_preview_tooltip = ÙˆÙÙŠ بعض الأحيان سيكون استخدام معاينات gtk أسرع ويدعم صيغا أكثر، ولكن ÙÙŠ بعض الأحيان قد يكون الأمر على العكس تماما. إذا كان لديك مشاكل ÙÙŠ تحميل المعاينات، Ùيمكنك محاولة تغيير هذا الإعداد. على أنظمة غير لينوكس، يوصى باستخدام هذا الخيار، لأن gtk-pixbuf غير Ù…ØªÙˆÙØ± دائمًا هناك لذلك ÙØ¥Ù† تعطيل هذا الخيار لن يقوم بتحميل المعاينات لبعض الصور. 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 = ر czkawka_gui-8.0.0/i18n/bg/czkawka_gui.ftl000064400000000000000000001316721046102023000163170ustar 00000000000000# 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 = МакÑимална разлика music_compare_only_in_title_group = Compare only in title music_compare_only_in_title_group_tooltip = When enabled, files are grouped by title and then compared to each other. With 10000 files, instead almost 100 million comparisons usually there will be around 20000 comparisons. 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_use_rust_preview = Use external libraries instead gtk to load previews settings_use_rust_preview_tooltip = Using gtk previews will sometimes be faster and support more formats, but sometimes this could be exactly the opposite. If you have problems with loading previews, you may can to try to change this setting. On non-linux systems, it is recommended to use this option, because gtk-pixbuf are not always available there so disabling this option will not load previews of some images. 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 = Д czkawka_gui-8.0.0/i18n/cs/czkawka_gui.ftl000064400000000000000000001001171046102023000163220ustar 00000000000000# Window titles window_settings_title = Nastavení window_main_title = Czkawka (Å kytavka) window_progress_title = Skenování window_compare_images = Porovnat obrázky # General general_ok_button = Ok general_close_button = Zavřít # Main window music_title_checkbox = Hlava 1 – Celkem music_artist_checkbox = UmÄ›lec 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 music_compare_only_in_title_group = Porovnat pouze v názvu music_compare_only_in_title_group_tooltip = Pokud je povoleno, soubory jsou seskupeny podle názvu a poté vzájemnÄ› porovnávány. S 10000 soubory, místo toho se obvykle uskuteÄní téměř 100 milionů srovnání kolem 20000 srovnání. 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ří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: Blake3 - kryptografická hash funkce. Toto je výchozí, protože je velmi rychlý. 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é 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: Název - Nalezení souborů, které mají stejný název. Velikost - Nalezí soubory, které mají stejnou velikost. 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 = 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. 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á. 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. 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 main_notebook_temporary = DoÄasné soubory main_notebook_similar_images = Podobné obrázky 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 main_tree_view_column_modification = Datum zmÄ›ny main_tree_view_column_size = Velikost main_tree_view_column_similarity = Podobnost 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_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 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 main_label_size_bytes = Velikost (bajty) main_label_min_size = Min 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 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 upper_tree_view_included_reference_column_title = ReferenÄní složky upper_recursive_button = Rekurentní upper_recursive_button_tooltip = Pokud je vybráno, hledejte také soubory, které nejsou umístÄ›ny přímo pod vybranými složkami. upper_manual_add_included_button = RuÄní pÅ™idání upper_add_included_button = PÅ™idat 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 = 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 = 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é přípony musí být oddÄ›leny Äárkami (ve výchozím nastavení jsou vÅ¡echny 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á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 popover_reverse = Reverzní výbÄ›r popover_select_all_except_oldest = Vybrat vÅ¡e kromÄ› nejstarších popover_select_all_except_newest = Vybrat vÅ¡e kromÄ› nejnovÄ›jších popover_select_one_oldest = Vyberte jeden nejstarší popover_select_one_newest = Vyberte jeden nejnovÄ›jší popover_select_custom = Vybrat vlastní 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 = 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 = 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 = Vyberte záznamy podle zadaného Regexu. 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ží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 ve vÄ›tÅ¡inÄ› situací, nechcete odstranit originální i duplicitní soubory, ale chcete opustit alespoň jeden soubor. 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 bottom_search_button = Hledat bottom_select_button = Vybrat bottom_delete_button = Vymazat bottom_save_button = Uložit bottom_symlink_button = Symlink bottom_hardlink_button = Hardlink bottom_move_button = PÅ™esunout 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 = 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Å™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é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. about_repository_button = Repozitář about_donation_button = Darovat about_instruction_button = Instrukce about_translation_button = PÅ™eklad # Header header_setting_button_tooltip = OtevÅ™e dialogové okno nastavení. header_about_button_tooltip = OtevÅ™e dialog s informacemi o aplikaci. # Settings ## General 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_use_rust_preview = Místo toho použít externí knihovny gtk k naÄtení náhledů settings_use_rust_preview_tooltip = Použití gtk náhledů bude nÄ›kdy rychlejší a bude podporovat více formátů, ale nÄ›kdy to může být pravý opak. Pokud máte problémy s naÄítáním náhledů, můžete zkusit toto nastavení zmÄ›nit. Na jiných než linuxových systémech je doporuÄeno použít tuto možnost, protože gtk-pixbuf není vždy k dispozici, takže vypnutí této možnosti nebude naÄíst náhledy nÄ›kterých obrázků. 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Äí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 = 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 = 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 záznamy odkazují na platné soubory (poÅ¡kozené jsou ignorová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 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 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 souboru obrázku). settings_multiple_image_preview_checkbutton = Zobrazit náhled obrázku settings_multiple_clear_cache_button_tooltip = 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 vÅ¡echny odkazují na stejná data (jsou hardlinované). 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 = Nastavte minimální velikost souboru, který bude uložen do 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 (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 může způsobit zpomalení. 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_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 ## Saving/Loading settings settings_saving_button_tooltip = Uložit aktuální nastavení do souboru. settings_loading_button_tooltip = NaÄíst nastavení ze souboru a nahradit jejich aktuální konfiguraci. settings_reset_button_tooltip = Obnovit aktuální konfiguraci na výchozí. settings_saving_button = Uložit konfiguraci settings_loading_button = NaÄíst konfiguraci settings_reset_button = Obnovit konfiguraci ## Opening cache/config folders settings_folder_cache_open_tooltip = OtevÅ™e složku, kde jsou uloženy soubory txt v mezipamÄ›ti. Ú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í. 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. Aplikace je automaticky obnoví. settings_folder_settings_open_tooltip = OtevÅ™e složku, kde je uloženo nastavení Czkawka. 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 compute_stopped_by_user = Vyhledávání bylo zastaveno uživatelem compute_found_duplicates_hash_size = Nalezeno { $number_files } duplikátů v { $number_groups } skupinách, které trvaly { $size } compute_found_duplicates_name = Nalezeno { $number_files } duplicit v { $number_groups } skupinách compute_found_empty_folders = Nalezen { $number_files } prázdných složek compute_found_empty_files = Nalezeno { $number_files } prázdných souborů compute_found_big_files = Nalezeno { $number_files } velkých souborů compute_found_temporary_files = Nalezeno { $number_files } doÄasných souborů compute_found_images = Nalezeno { $number_files } podobných obrázků v { $number_groups } skupinách compute_found_videos = Nalezeno { $number_files } podobných videí v { $number_groups } skupinách 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 saving_loading_saving_success = Uložena konfigurace do souboru { $name }. saving_loading_saving_failure = NepodaÅ™ilo se uložit konfiguraÄní data do souboru { $name }. saving_loading_reset_configuration = Aktuální konfigurace byla vymazána. saving_loading_loading_success = SprávnÄ› naÄtená konfigurace aplikace. saving_loading_invalid_string = Pro klÃ­Ä "{ $key }" byl nalezen neplatný výsledek - "{ $result }", což není Å™etÄ›zec. saving_loading_invalid_int = Pro klÃ­Ä "{ $key }" byl nalezen neplatný výsledek - "{ $result }", což není celé Äíslo. saving_loading_invalid_bool = Pro klÃ­Ä "{ $key }" byl nalezen neplatný výsledek - "{ $result }", což není bool. saving_loading_decode_problem_bool = NepodaÅ™ilo se dekódovat bool z klíÄe "{ $key }" nalezeno "{ $result }", ale povolené hodnoty jsou 0, 1, true nebo false. saving_loading_saving_same_keys = Pokus o uložení nastavení s duplicitním klíÄem "{ $key }". saving_loading_failed_to_get_home_directory = NepodaÅ™ilo se získat domovský adresář pro otevÅ™ení/uložení konfiguraÄního souboru. 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_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 }" 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à text_view_errors = CHYBA about_window_motto = Tento program je zdarma a bude vždy používán. # Various dialog dialogs_ask_next_time = PříštÄ› se zeptat delete_file_failed = NepodaÅ™ilo se odstranit soubor { $name }, důvod { $reason } delete_title_dialog = Potvrzení odstranÄ›ní 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 složka není prázdná. delete_items_label = { $items } soubory 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 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 = 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ž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Ä› 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ěť 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_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 compare_move_right_button = R czkawka_gui-8.0.0/i18n/de/czkawka_gui.ftl000064400000000000000000001014101046102023000163020ustar 00000000000000# Window titles window_settings_title = Einstellungen window_main_title = Czkawka (Schluckauf) window_progress_title = Scannen window_compare_images = Bilder vergleichen # General general_ok_button = Ok general_close_button = Schließen # Main window music_title_checkbox = Titel music_artist_checkbox = Künstler 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 music_compare_only_in_title_group = Nur im Titel vergleichen music_compare_only_in_title_group_tooltip = Wenn aktiviert, werden Dateien nach Titel gruppiert und dann miteinander verglichen. Mit 10000 Dateien, statt fast 100 Millionen Vergleiche wird es in der Regel rund 20000 Vergleiche geben. 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 = 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. Wegen ihrer Geschwindikeit wird Sie als Standard-Hash-Algorithmus verwendet. CRC32 - einfache Hash-Funktion. Sie sollte schneller sein als Blake3, könnte aber in seltenen Fällen Kollisionen haben. 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 = 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, 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 = 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. 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. Jeder hat sowohl starke als auch schwächere Punkte und wird manchmal bessere und manchmal schlechtere Ergebnisse für verschiedene Bilder liefern. 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 = 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 main_tree_view_column_modification = Änderungsdatum main_tree_view_column_size = Größe main_tree_view_column_similarity = Ähnlichkeit 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_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 = 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 main_label_size_bytes = Größe (Bytes) main_label_min_size = Min 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 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 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. upper_manual_add_included_button = Manuell hinzufügen upper_add_included_button = Neu 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 = 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 = 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 = Ausgeschlossene Verzeichnisse löschen. upper_notebook_items_configuration = Suchbedingungen upper_notebook_excluded_directories = Ausgeschlossene 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). 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. 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 * 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 = Gesamte Auswahl aufheben popover_reverse = Auswahl umkehren 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 Dateipfad. 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. Beispielnutzung: /usr/ping/pong.txt kann mit *ong* gefunden werden popover_custom_regex_check_button_entry_tooltip = Ermöglicht die Auswahl von Datensätzen nach spezifizierter Regex. Mit diesem Modus ist der gesuchte Text der Pfad einschließlich Dateinamen. Beispielnutzung: /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. Wenn /home/* deaktiviert ist, findet /hoMe/roman und /home/roman. popover_custom_not_all_check_button_tooltip = 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 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 bottom_search_button = Suchen bottom_select_button = Auswählen bottom_delete_button = Löschen bottom_save_button = Speichern bottom_symlink_button = Symlink bottom_hardlink_button = Hardlink bottom_move_button = Bewegen 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 = 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 = 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 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. about_repository_button = Projektarchiv about_donation_button = Spende about_instruction_button = Anleitung about_translation_button = Übersetzung # Header header_setting_button_tooltip = Öffnet Einstellungsdialog. header_about_button_tooltip = Öffnet den Dialog mit Informationen über die App. # Settings ## General 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_use_rust_preview = Verwenden Sie stattdessen externe Bibliotheken gtk, um Vorschaubilder zu laden settings_use_rust_preview_tooltip = Die Verwendung von gtk-Vorschauen ist manchmal schneller und unterstützt mehr Formate, aber manchmal kann dies genau das Gegenteil sein. Wenn Sie Probleme mit dem Laden von Vorschauen haben, können Sie versuchen, diese Einstellung zu ändern. Auf Nicht-Linux-Systemen wird empfohlen, diese Option zu verwenden, da gtk-pixbuf dort nicht immer verfügbar ist, so dass die Deaktivierung dieser Option keine Vorschau einiger Bilder laden wird. 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 = 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 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, 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. 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 settings_notebook_duplicates = Duplikate settings_notebook_images = Ähnliche Bilder 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 einer Bilddatei). settings_multiple_image_preview_checkbutton = Bildvorschau anzeigen settings_multiple_clear_cache_button_tooltip = Leere den Cache manuell aus veralteten Einträgen. 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) 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 = Legen Sie die minimale Dateigröße fest, die zwischengespeichert wird. 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 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 um ein Vielfaches beschleunigen kann. settings_duplicates_prehash_minimal_entry_tooltip = Minimale Größe des zwischengespeicherten Eintrags. 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 = 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 settings_reset_button = Konfiguration zurücksetzen ## Opening cache/config folders settings_folder_cache_open_tooltip = Öffnet den Ordner, in dem txt-Dateien mit Cache-Daten gespeichert sind. Ä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 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, sodass die App sie automatisch neu generiert. settings_folder_settings_open_tooltip = Öffnet den Ordner, in dem die Czkawka Konfiguration gespeichert ist. 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 compute_stopped_by_user = Suche wurde vom Benutzer gestoppt compute_found_duplicates_hash_size = { $number_files } Duplikate in { $number_groups } Gruppen gefunden, die { $size } benötigt haben compute_found_duplicates_name = { $number_files } Duplikate in { $number_groups } Gruppen gefunden compute_found_empty_folders = { $number_files } leere Ordner gefunden compute_found_empty_files = { $number_files } leere Dateien gefunden compute_found_big_files = { $number_files } große Dateien gefunden compute_found_temporary_files = { $number_files } temporäre Dateien gefunden compute_found_images = { $number_files } ähnliche Bilder in { $number_groups } Gruppen gefunden compute_found_videos = { $number_files } ähnliche Videos in { $number_groups } Gruppen gefunden 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 } 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 = 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 } 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 }" 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 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. # Invalid symlinks 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 immer frei sein. # Various dialog dialogs_ask_next_time = Nächstes Mal fragen 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 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 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 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 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. 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 = 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 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_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 compare_move_right_button = R czkawka_gui-8.0.0/i18n/el/czkawka_gui.ftl000064400000000000000000001353771046102023000163350ustar 00000000000000# 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 = Μέγιστη διαφοÏά music_compare_only_in_title_group = ΣÏγκÏιση μόνο στον τίτλο music_compare_only_in_title_group_tooltip = Όταν ενεÏγοποιηθεί, τα αÏχεία ομαδοποιοÏνται κατά τίτλο και στη συνέχεια συγκÏίνονται Î¼ÎµÏ„Î±Î¾Ï Ï„Î¿Ï…Ï‚. Με 10000 αÏχεία, αντ' Î±Ï…Ï„Î¿Ï ÏƒÏ‡ÎµÎ´ÏŒÎ½ 100 εκατομμÏÏια συγκÏίσεις συνήθως θα υπάÏχουν πεÏίπου 20000 συγκÏίσεις. same_music_tooltip = Η αναζήτηση παÏόμοιων αÏχείων μουσικής με βάση το πεÏιεχόμενό του μποÏεί να Ïυθμιστεί με τη ÏÏθμιση: - Ο ελάχιστος χÏόνος θÏαÏσματος μετά το οποίο τα αÏχεία μουσικής μποÏοÏν να Ï€ÏοσδιοÏιστοÏν ως παÏόμοια - Η μέγιστη διαφοÏά διαφοÏάς Î¼ÎµÏ„Î±Î¾Ï Î´Ïο δοκιμαζόμενων θÏαυσμάτων Το κλειδί για καλά αποτελέσματα είναι να βÏεθοÏν λογικοί συνδυασμοί αυτών των παÏαμέτÏων, για παÏέχονται. Ο οÏισμός του ελάχιστου χÏόνου σε 5s και η μέγιστη διαφοÏά σε 1.0, θα αναζητήσει σχεδόν πανομοιότυπα θÏαÏσματα στα αÏχεία. Ένας χÏόνος 20 δευτεÏολέπτων και μια μέγιστη διαφοÏά 6.0, από την άλλη πλευÏά, λειτουÏγεί καλά για την εÏÏεση remixes/live εκδόσεις κλπ. Από Ï€Ïοεπιλογή, κάθε αÏχείο μουσικής συγκÏίνεται Î¼ÎµÏ„Î±Î¾Ï Ï„Î¿Ï…Ï‚ και αυτό μποÏεί να πάÏει Ï€Î¿Î»Ï Ï‡Ïόνο κατά τη δοκιμή πολλών αÏχείων, έτσι είναι συνήθως καλÏτεÏο να χÏησιμοποιήσετε φακέλους αναφοÏάς και να Ï€ÏοσδιοÏίσετε ποια αÏχεία Ï€Ïέπει να συγκÏίνονται Î¼ÎµÏ„Î±Î¾Ï Ï„Î¿Ï…Ï‚ (με την ίδια ποσότητα αÏχείων, η σÏγκÏιση των δακτυλικών αποτυπωμάτων θα είναι γÏηγοÏότεÏη τουλάχιστον 4x από ÏŒ, τι χωÏίς φακέλους αναφοÏάς). music_comparison_checkbox_tooltip = Ψάχνει για παÏόμοια αÏχεία μουσικής χÏησιμοποιώντας AI, το οποίο χÏησιμοποιεί μηχανική μάθηση για να αφαιÏέσει παÏένθεση από μια φÏάση. Για παÏάδειγμα, με αυτήν την επιλογή ενεÏγοποιημένη, τα εν λόγω αÏχεία θα θεωÏοÏνται διπλότυπα: S’wieald dzizśło’b --- S’wieÅ™dziz’ło’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 Ï„Ïπους 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_use_rust_preview = ΧÏήση εξωτεÏικών βιβλιοθηκών αντ' Î±Ï…Ï„Î¿Ï gtk για φόÏτωση Ï€Ïοεπισκοπήσεων settings_use_rust_preview_tooltip = ΧÏησιμοποιώντας gtk Ï€Ïοεπισκοπήσεις θα είναι μεÏικές φοÏές πιο γÏήγοÏα και να υποστηÏίξει πεÏισσότεÏες μοÏφές, αλλά μεÏικές φοÏές αυτό θα μποÏοÏσε να είναι ακÏιβώς το αντίθετο. Αν έχετε Ï€Ïοβλήματα με τη φόÏτωση Ï€Ïοεπισκόπησης, μποÏείτε να Ï€Ïοσπαθήσετε να αλλάξετε αυτή τη ÏÏθμιση. Σε συστήματα χωÏίς linux, συνιστάται να χÏησιμοποιήσετε αυτήν την επιλογή, επειδή το gtk-pixbuf δεν είναι πάντα διαθέσιμο εκεί, οπότε η απενεÏγοποίηση αυτής της επιλογής δεν θα φοÏτώσει Ï€Ïοεπισκοπήσεις οÏισμένων εικόνων. 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 czkawka_gui-8.0.0/i18n/en/czkawka_gui.ftl000064400000000000000000000725151046102023000163310ustar 00000000000000# Window titles window_settings_title = Settings window_main_title = Czkawka (Hiccup) window_progress_title = Scanning window_compare_images = Compare Images # General general_ok_button = Ok general_close_button = Close # Main window music_title_checkbox = Title music_artist_checkbox = 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 music_compare_only_in_title_group = Compare only in title music_compare_only_in_title_group_tooltip = When enabled, files are grouped by title and then compared to each other. With 10000 files, instead almost 100 million comparisons usually there will be around 20000 comparisons. 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 duplicate_hash_type_tooltip = Czkawka offers 3 types of hashes: Blake3 - cryptographic hash function. This is the default because it is very fast. CRC32 - simple hash function. This should be faster than Blake3, but may very rarely have some collisions. XXH3 - very similar in performance and hash quality to Blake3 (but non-cryptographic). So, such modes can be easily interchanged. duplicate_check_method_tooltip = For now, Czkawka offers three types of method to find duplicates by: Name - Finds files which have the same name. Size - Finds files which have the same size. 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 = 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 = 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 = 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 main_notebook_big_files = Big Files main_notebook_empty_files = Empty Files main_notebook_temporary = Temporary Files main_notebook_similar_images = Similar Images 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 main_tree_view_column_path = Path main_tree_view_column_modification = Modification Date main_tree_view_column_size = Size main_tree_view_column_similarity = Similarity 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_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 = 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 main_label_hash_size = Hash size main_label_size_bytes = Size (bytes) main_label_min_size = Min main_label_max_size = Max 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 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 # Upper window upper_tree_view_included_folder_column_title = Folders to Search upper_tree_view_included_reference_column_title = Reference Folders upper_recursive_button = Recursive upper_recursive_button_tooltip = If selected, search also for files which are not placed directly under chosen folders. upper_manual_add_included_button = Manual Add upper_add_included_button = Add upper_remove_included_button = Remove 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. 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. 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. upper_notebook_items_configuration = Items Configuration upper_notebook_excluded_directories = Excluded Directories upper_notebook_included_directories = Included Directories upper_allowed_extensions_tooltip = Allowed extensions must be separated by commas (by default all are available). The following Macros, which add multiple extensions at once, are also available: IMAGE, VIDEO, MUSIC, TEXT. 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 popover_select_all = Select all popover_unselect_all = Unselect all popover_reverse = Reverse Selection popover_select_all_except_oldest = Select all except oldest popover_select_all_except_newest = Select all except newest popover_select_one_oldest = Select one oldest popover_select_one_newest = Select one newest popover_select_custom = Select custom popover_unselect_custom = Unselect custom popover_select_all_images_except_biggest = Select all except biggest popover_select_all_images_except_smallest = Select all 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 = Select records by file names. Example usage: /usr/ping/pong.txt can be found with *ong* popover_custom_regex_check_button_entry_tooltip = Select records by specified Regex. With this mode, searched text is Path with Name. Example usage: /usr/bin/ziemniak.txt can be found with /ziem[a-z]+ 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. 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 = 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 # Bottom buttons bottom_search_button = Search bottom_select_button = Select bottom_delete_button = Delete bottom_save_button = Save bottom_symlink_button = Symlink bottom_hardlink_button = Hardlink bottom_move_button = Move bottom_sort_button = Sort bottom_compare_button = Compare bottom_search_button_tooltip = Start search bottom_select_button_tooltip = Select records. Only selected files/folders can be later processed. bottom_delete_button_tooltip = Delete selected files/folders. bottom_save_button_tooltip = Save data about search to file bottom_symlink_button_tooltip = Create symbolic links. Only works when at least two results in a group are selected. First is unchanged and second and later are symlinked to first. 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_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_compare_button_tooltip = Compare images in the group. 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. about_repository_button = Repository about_donation_button = Donation about_instruction_button = Instruction about_translation_button = Translation # Header header_setting_button_tooltip = Opens settings dialog. 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_use_rust_preview = Use external libraries instead gtk to load previews settings_use_rust_preview_tooltip = Using gtk previews will sometimes be faster and support more formats, but sometimes this could be exactly the opposite. If you have problems with loading previews, you may can to try to change this setting. On non-linux systems, it is recommended to use this option, because gtk-pixbuf are not always available there so disabling this option will not load previews of some images. 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. If not enabled, default settings will be used. settings_confirm_deletion_button_tooltip = Show confirmation dialog when clicking the delete button. settings_confirm_link_button_tooltip = Show confirmation dialog when clicking the hard/symlink button. settings_confirm_group_deletion_button_tooltip = Show warning dialog when trying to delete all records from the group. settings_show_text_view_button_tooltip = Show text panel at the bottom of the user interface. settings_use_cache_button_tooltip = Use file cache. settings_save_also_as_json_button_tooltip = Save cache to (human readable) JSON format. It is possible to modify its content. Cache from this file will be read automatically by app if binary format cache (with bin extension) is missing. settings_use_trash_button_tooltip = Moves files to trash instead deleting them permanently. settings_language_label_tooltip = Language for user interface. settings_save_at_exit_button = Save configuration when closing app settings_load_at_start_button = Load configuration when opening app settings_confirm_deletion_button = Show confirm dialog when deleting any files settings_confirm_link_button = Show confirm dialog when hard/symlinks any files settings_confirm_group_deletion_button = Show confirm dialog when deleting all files in group settings_show_text_view_button = Show bottom text panel settings_use_cache_button = Use cache settings_save_also_as_json_button = Also save cache as JSON file settings_use_trash_button = Move deleted files to trash settings_language_label = Language settings_multiple_delete_outdated_cache_checkbutton = Delete outdated cache entries automatically 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 = General settings_notebook_duplicates = Duplicates settings_notebook_images = Similar Images settings_notebook_videos = Similar Video ## Multiple - settings used in multiple tabs settings_multiple_image_preview_checkbutton_tooltip = Shows preview at right side (when selecting an image file). settings_multiple_image_preview_checkbutton = Show image preview 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 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 = 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 = Enables caching of prehash (a hash computed from a small part of the file) which allows earlier dismissal of non-duplicated results. It is disabled by default because it can cause slowdowns in some situations. It is highly recommended to use it when scanning hundred of thousands or million files, because it can speedup search by multiple times. settings_duplicates_prehash_minimal_entry_tooltip = Minimal size of cached entry. settings_duplicates_hide_hard_link_button = Hide hard links (only Linux and macOS) settings_duplicates_prehash_checkbutton = Use prehash cache settings_duplicates_minimal_size_cache_label = Minimal size of files (in bytes) saved to cache settings_duplicates_minimal_size_cache_prehash_label = Minimal size of files (in bytes) saved to prehash cache ## Saving/Loading settings settings_saving_button_tooltip = Save the current settings configuration to file. settings_loading_button_tooltip = Load settings from file and replace the current configuration with them. settings_reset_button_tooltip = Reset the current configuration to the default one. settings_saving_button = Save configuration settings_loading_button = Load configuration settings_reset_button = Reset configuration ## 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 = Open cache folder settings_folder_settings_open = Open settings folder # Compute results compute_stopped_by_user = Searching was stopped by user compute_found_duplicates_hash_size = Found { $number_files } duplicates in { $number_groups } groups which took { $size } compute_found_duplicates_name = Found { $number_files } duplicates in { $number_groups } groups compute_found_empty_folders = Found { $number_files } empty folders compute_found_empty_files = Found { $number_files } empty files compute_found_big_files = Found { $number_files } big files compute_found_temporary_files = Found { $number_files } temporary files compute_found_images = Found { $number_files } similar images in { $number_groups } groups compute_found_videos = Found { $number_files } similar videos in { $number_groups } groups 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:{" "} # Saving loading saving_loading_saving_success = Saved configuration to file { $name }. saving_loading_saving_failure = Failed to save configuration data to file { $name }. saving_loading_reset_configuration = Current configuration was cleared. saving_loading_loading_success = Properly loaded app configuration. saving_loading_invalid_string = For key "{ $key }" found invalid result - "{ $result }" which is not a string. saving_loading_invalid_int = For key "{ $key }" found invalid result - "{ $result }" which is not a integer. saving_loading_invalid_bool = For key "{ $key }" found invalid result - "{ $result }" which is not a bool. saving_loading_decode_problem_bool = Failed to decode bool from key "{ $key }" found "{ $result }" but allowed values are 0, 1, true or false. saving_loading_saving_same_keys = Trying to save setting with duplicated key "{ $key }". saving_loading_failed_to_get_home_directory = Failed to get home directory to open/save config file. saving_loading_folder_config_instead_file = Cannot create or open save configuration file in path "{ $path }" because already there is a folder. saving_loading_failed_to_create_configuration_folder = Failed configuration to create configuration folder "{ $path }", reason "{ $reason }". saving_loading_failed_to_create_config_file = Failed to create config file "{ $path }", reason "{ $reason }". saving_loading_failed_to_read_config_file = Cannot load configuration from "{ $path }" because it does not exist or is not a file. saving_loading_failed_to_read_data_from_file = Cannot read data from file "{ $path }", reason "{ $reason }". saving_loading_orphan_data = Found orphan data "{ $data }" in line "{ $line }". saving_loading_not_valid = Setting "{ $data }" does not exist in current app version. # Invalid symlinks 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 text_view_errors = ERRORS about_window_motto = This program is free to use and will always be. # Various dialog dialogs_ask_next_time = Ask next time delete_file_failed = Failed to delete file {$name}, reason {$reason} delete_title_dialog = Delete confirmation delete_question_label = Are you sure that you want to delete files? delete_all_files_in_group_title = Confirmation of deleting all files in group delete_all_files_in_group_label1 = In some groups all records are selected. delete_all_files_in_group_label2 = Are you sure that you want to delete them? delete_folder_failed = Failed to delete folder {$dir} because folder doesn't exist, you don't have permission or the folder isn't empty. delete_items_label = { $items } files will be deleted. delete_items_groups_label = { $items } files from { $groups } groups will be deleted. hardlink_failed = Failed to hardlink hard_sym_invalid_selection_title_dialog = Invalid selection with some groups hard_sym_invalid_selection_label_1 = In some groups there is only one record selected and it will be ignored. hard_sym_invalid_selection_label_2 = To be able to hard/sym link these files, at least two results in the group need to be selected. hard_sym_invalid_selection_label_3 = First in group is recognized as original and is not changed but second and later are modified. hard_sym_link_title_dialog = Link confirmation hard_sym_link_label = Are you sure that you want to link these files? move_folder_failed = Failed to move folder {$name}, reason {$reason} move_file_failed = Failed to move file {$name}, reason {$reason} move_files_title_dialog = Choose folder to which you want to move duplicated files 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 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 include_manually_directories_dialog_title = Add directory manually cache_properly_cleared = Properly cleared cache cache_clear_duplicates_title = Clearing duplicates cache cache_clear_similar_images_title = Clearing similar images cache cache_clear_similar_videos_title = Clearing similar videos cache cache_clear_message_label_1 = Do you want to clear the cache of outdated entries? cache_clear_message_label_2 = This operation will remove all cache entries which point to invalid files. 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_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) compare_move_left_button = L compare_move_right_button = R czkawka_gui-8.0.0/i18n/es/czkawka_gui.ftl000064400000000000000000001011271046102023000163260ustar 00000000000000# Window titles window_settings_title = Configuración window_main_title = Czkawka (Hipo) window_progress_title = Escaneando window_compare_images = Comparar imágenes # General general_ok_button = Aceptar general_close_button = Cerrar # Main window music_title_checkbox = Título music_artist_checkbox = Artista 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 music_compare_only_in_title_group = Comparar sólo en el título music_compare_only_in_title_group_tooltip = When enabled, files are grouped by title and then compared to each other. With 10000 files, instead almost 100 million comparisons usually there will be around 20000 comparisons. same_music_tooltip = Al buscar archivos de música, por su contenido, podemos usar las siguientes opciones: - 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 lograr los mejores resultados al buscar. Es proporcionando las mejores combinaciones de estos parámetros: - 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 llevar 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 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 solo cuando tienen exactamente el mismo nombre. P. ej. Å»oÅ‚d ↔ Å»oÅ‚d En cambio, si deshabilitamos dicha 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 = Czkawka ofrece 3 tipos de hashes, que pueden ser usados: 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 (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: Nombre - Encuentra archivos con el mismo nombre. Tamaño - Encuentra archivos con el mismo tamaño. 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 = 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 = Al calcular el hash de una imagen, lo primero que hace la librería es redimensionar esta. Dependiendo del algoritmo que elijamos, la imagen resultante usada para calcular el hash puede ser demasiado parecida. El algoritmo más rápido, es también uno de los que da los peores es el de aproximación cercana o Nearest. Ya que de forma predeterminada, usa un tamaño de hash de 16x16, insuficiente para poder verse. Con el tamaño hash de 8x8 se recomienda usar un algoritmo diferente al tipo Nearest, para tener mejores grupos de imágenes. image_hash_alg_tooltip = Los usuarios pueden elegir uno de los muchos algoritmos de cálculo del hash. Cada uno tiene puntos fuertes y débiles y a veces dará mejores y a veces peores resultados para diferentes imágenes. Así que, para determinar la mejor para ti, se requiere una prueba manual. big_files_mode_combobox_tooltip = Permite buscar archivos de un menor/mayor tamaño 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 main_notebook_temporary = Archivos temporales main_notebook_similar_images = Imágenes similares main_notebook_similar_videos = Videos similares main_notebook_same_music = Canciones duplicadas main_notebook_symlinks = Enlaces simbólicos rotos 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 = 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_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 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 = Método de comprobación main_label_hash_type = Tipo de Hash main_label_hash_size = Tamaño hash main_label_size_bytes = Tamaño (bytes) main_label_min_size = Mínimo main_label_max_size = Máximo main_label_shown_files = Número de archivos mostrados main_label_resize_algorithm = Algoritmo de Redimensionado 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 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 upper_tree_view_included_reference_column_title = Carpetas de referencia upper_recursive_button = Recursivo upper_recursive_button_tooltip = Si se selecciona, busca cualquier archivo, sin importar si está o no en una sub-carpeta. upper_manual_add_included_button = Añadir manualmente upper_add_included_button = Añadir 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 = Añade el nombre del directorio para buscar a mano. Para agregar múltiples rutas a la vez, sepáralas con ; /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 = 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 upper_notebook_excluded_directories = Directorios excluidos upper_notebook_included_directories = Directorios incluidos upper_allowed_extensions_tooltip = Las extensiones permitidas deben estar separadas por comas (por defecto todas 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 = Lista de archivos ignorados, durante el escaneo. Cuando desactivamos las extensiones permitidas, estas tienen mayor prioridad, haciendo que los archivos no sean comprobados. 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 ú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 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 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 = Seleccionar registros por ruta. Ejemplo: /home/pmañk/rzecz.txt se puede encontrar con /home/pim* popover_custom_name_check_button_entry_tooltip = Seleccionar registros por nombres de archivos. Ejemplo: /usr/ping/pong.txt puede encontrarse con *a lo largo* popover_custom_regex_check_button_entry_tooltip = 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. 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 = Previene la selección de todos los registros en grupo. 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 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 bottom_search_button = Buscar bottom_select_button = Seleccionar bottom_delete_button = Eliminar bottom_save_button = Guardar bottom_symlink_button = Symlink bottom_hardlink_button = Hardlink bottom_move_button = Mover 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 = 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 = 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 = Mover los archivos a la carpeta elegida. Copia todos los archivos a la carpeta sin preservar el árbol de directorios. 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. about_repository_button = Repositorio about_donation_button = Donativo about_instruction_button = Instrucción about_translation_button = Traducción # Header header_setting_button_tooltip = Abre el diálogo de ajustes. header_about_button_tooltip = Abre el diálogo con información sobre la aplicación. # Settings ## General 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_use_rust_preview = Usar librerías externas en su lugar gtk para cargar vistas previas settings_use_rust_preview_tooltip = Using gtk previews will sometimes be faster and support more formats, but sometimes this could be exactly the opposite. If you have problems with loading previews, you may can to try to change this setting. On non-linux systems, it is recommended to use this option, because gtk-pixbuf are not always available there so disabling this option will not load previews of some images. 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 = 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 = 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 = Eliminar resultados de caché obsoletos que apuntan a archivos inexistentes. 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 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 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ídeos similares ## Multiple - settings used in multiple tabs 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 = 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 todos apuntan a los mismos datos (están en línea dura). 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 = Establece el tamaño mínimo de archivo que se almacenará en 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 (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 derribos lentos en algunas situaciones. 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_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 ## Saving/Loading settings 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 settings_reset_button = Restablecer configuración ## Opening cache/config folders settings_folder_cache_open_tooltip = Abre la carpeta donde se almacenan los archivos txt. 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. La aplicación los regenerará automáticamente. settings_folder_settings_open_tooltip = Abrir la carpeta donde se almacena la configuración de Czkawka. 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 compute_stopped_by_user = El usuario ha detenido la búsqueda compute_found_duplicates_hash_size = Se encontraron { $number_files } duplicados en { $number_groups } grupos que tomaron { $size } compute_found_duplicates_name = Se encontraron { $number_files } duplicados en { $number_groups } grupos compute_found_empty_folders = Se encontraron { $number_files } carpetas vacías compute_found_empty_files = Se encontraron { $number_files } archivos vacíos compute_found_big_files = { $number_files } archivos grandes encontrados compute_found_temporary_files = Se encontraron { $number_files } archivos temporales compute_found_images = Se encontraron { $number_files } imágenes similares en { $number_groups } grupos compute_found_videos = Se encontraron { $number_files } vídeos similares en { $number_groups } grupos 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 saving_loading_saving_success = Configuración guardada en el archivo { $name }. saving_loading_saving_failure = Error al guardar los datos de configuración en el archivo { $name }. saving_loading_reset_configuration = La configuración actual fue borrada. saving_loading_loading_success = Configuración de la aplicación cargada correctamente. saving_loading_invalid_string = Para la clave "{ $key }" se encontró un resultado inválido - "{ $result }" que no es una cadena. saving_loading_invalid_int = Para la clave "{ $key }" se encontró un resultado inválido - "{ $result }" que no es un entero. saving_loading_invalid_bool = Para la clave "{ $key }" se encontró un resultado inválido - "{ $result }" que no es un bool. saving_loading_decode_problem_bool = Fallo al descifrar el bool de la clave "{ $key }" encontrado "{ $result }" pero los valores permitidos son 0, 1, verdadero o falso. saving_loading_saving_same_keys = Intentando guardar la configuración con la clave duplicada "{ $key }". saving_loading_failed_to_get_home_directory = No se pudo obtener el directorio de inicio para abrir/guardar el archivo de configuración. saving_loading_folder_config_instead_file = No se puede crear o abrir el archivo de configuración de guardado en la ruta "{ $path }" porque ya hay una carpeta. saving_loading_failed_to_create_configuration_folder = Error al crear la carpeta de configuración "{ $path }", razón "{ $reason }". saving_loading_failed_to_create_config_file = Error al crear el archivo de configuración "{ $path }", razón "{ $reason }". 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 = 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 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 text_view_errors = ERRORES about_window_motto = Este programa es gratuito y siempre lo será. # Various dialog dialogs_ask_next_time = Preguntar la próxima vez delete_file_failed = Error al eliminar el archivo { $name }, razón { $reason } delete_title_dialog = Confirmación de eliminación 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 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 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 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 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 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 = ¿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 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_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 compare_move_right_button = R czkawka_gui-8.0.0/i18n/fr/czkawka_gui.ftl000064400000000000000000001047621046102023000163360ustar 00000000000000# Window titles window_settings_title = Paramètres window_main_title = Czkawka (Hoquet) window_progress_title = Analyse en cours window_compare_images = Comparer les images # General general_ok_button = Ok general_close_button = Fermer # Main window music_title_checkbox = Titre de la page music_artist_checkbox = Artiste 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 music_compare_only_in_title_group = Comparer seulement dans le titre music_compare_only_in_title_group_tooltip = When enabled, files are grouped by title and then compared to each other. With 10000 files, instead almost 100 million comparisons usually there will be around 20000 comparisons. 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 = La recherche des fichiers de musique similaires est faite à l’aide d'intelligence artificielle qui utilise l'apprentissage machine pour supprimer les parenthèses d’une 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 : Blake3 - fonction de hachage cryptographique. Il est utilisé comme algorithme de hachage par défaut car très rapide. 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 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 : Nom - Trouve des fichiers qui ont le même nom. 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 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 = 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 = Pour calculer le hachage de l'image, la bibliothèque doit d'abord la redimensionner. En fonction de l'algorithme choisi, l'image résultante utilisée pour calculer le hachage pourra sembler un peu différente. L'algorithme le plus rapide à utiliser, mais aussi celui qui donne les pires résultats, est PlusProche. Il est activé par défaut, car avec une taille de hachage d'une qualité inférieure à 16x16, cela ne sera que peu visible. Avec une taille de hachage de 8x8, il est recommandé d'utiliser un algorithme différent de PlusProche pour obtenir de meilleurs groupes d'images. image_hash_alg_tooltip = Les utilisateurs peuvent choisir parmi de nombreux algorithmes pour calculer le hash. Chacun a des points forts et des points faibles et donnera parfois des résultats meilleurs et parfois pires pour des images différentes. 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 main_notebook_empty_files = Fichiers vides main_notebook_temporary = Fichiers temporaires main_notebook_similar_images = Images similaires 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 main_tree_view_column_modification = Date de modification main_tree_view_column_size = Taille main_tree_view_column_similarity = Similitude 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_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 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 main_label_size_bytes = Taille (octets) main_label_min_size = Min 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 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 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. upper_manual_add_included_button = Ajout manuel upper_add_included_button = Ajouter 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 = 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 = 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 (toutes sont disponibles par défaut). Les Macros suivantes, qui ajoutent plusieurs extensions à la fois, sont également disponibles : IMAGE, VIDEO, MUSIC, TEXT. 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. 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 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 = 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 é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 = Sélectionner les enregistrements par chemin. Exemple d'utilisation : « /home/pimpek/rzecz.txt » peut être trouvé avec « /home/pim* » popover_custom_name_check_button_entry_tooltip = Sélectionner les enregistrements par nom de fichier. Exemple d'utilisation : « /usr/ping/pong.txt » peut être trouvé avec « *ong* » popover_custom_regex_check_button_entry_tooltip = Sélectionner les enregistrements par Regex spécifié. Dans 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]+ » 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. 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 dans le groupe. 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 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 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 bottom_search_button = Chercher bottom_select_button = Sélectionner bottom_delete_button = Supprimer bottom_save_button = Enregistrer bottom_symlink_button = Lien symbolique bottom_hardlink_button = Lien dur bottom_move_button = Déplacer 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 dans un fichier bottom_symlink_button_tooltip = 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é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 qu’avec les privilèges administrateur sous Windows, assurez-vous d'éxécuter l’application en tant qu’administrateur. Si l’application fonctionne déjà avec ces privilèges, vérifiez les signalements de bogues similaires sur GitHub. bottom_move_button_tooltip = 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 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 contenant les informations sur l'application. # Settings ## General 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_use_rust_preview = Utiliser des bibliothèques externes à la place gtk pour charger les aperçus settings_use_rust_preview_tooltip = Using gtk previews will sometimes be faster and support more formats, but sometimes this could be exactly the opposite. If you have problems with loading previews, you may can to try to change this setting. On non-linux systems, it is recommended to use this option, because gtk-pixbuf are not always available there so disabling this option will not load previews of some images. settings_label_restart = Vous devez redémarrer l’application 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 = 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 = É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 = 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 pointent vers des fichiers valides (les fichiers cassés sont ignorés). 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. 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 settings_notebook_videos = Vidéo similaire ## Multiple - settings used in multiple tabs 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 = 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 tous pointent vers les mêmes données (avec lien en dur). 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 = Définit la taille minimale du fichier qui sera mis en 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 (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 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 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 ## Saving/Loading settings 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 ## Opening cache/config folders settings_folder_cache_open_tooltip = Ouvre le dossier où sont stockés les fichiers « .txt » de cache. 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 une nouvelle analyse de fichiers (à condition, bien sûr, qu'ils aient une structure de répertoire similaire). 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. 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é 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 { $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 } gros fichiers trouvés compute_found_temporary_files = { $number_files } fichiers temporaires trouvés 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 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 = 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 = 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 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. # Invalid symlinks invalid_symlink_infinite_recursion = Récursion infinie invalid_symlink_non_existent_destination = Fichier de destination inexistant # Other 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 = 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_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 = 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 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 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 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 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 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 = 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_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 compare_move_right_button = R czkawka_gui-8.0.0/i18n/it/czkawka_gui.ftl000064400000000000000000001001001046102023000163210ustar 00000000000000# Window titles window_settings_title = Impostazioni window_main_title = Czkawka (Singhiozzo) window_progress_title = Ricerca 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_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 music_compare_only_in_title_group = Confronta solo nel titolo music_compare_only_in_title_group_tooltip = Se abilitato, i file vengono raggruppati per titolo e poi confrontati tra loro. Con 10000 file, invece quasi 100 milioni di confronti di solito ci saranno circa 20000 confronti. 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 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 = Czkawka offre 3 tipi di hash: Blake3 - funzione hash crittografica. Questo è il valore predefinito perché è molto veloce. CRC32 - semplice funzione di hash. Questo dovrebbe essere più veloce di Blake3, ma può molto raramente avere alcune collisioni. 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 = Per ora, Czkawka offre tre tipi di metodo per trovare i duplicati di: Nome - Trova i file che hanno lo stesso nome. Dimensione - Trova i file che hanno la stessa dimensione. 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 = 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. 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. Ognuno ha punti forti e più deboli e a volte darà risultati migliori e a volte peggiori per immagini diverse. 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 main_notebook_empty_files = File vuoti main_notebook_temporary = File temporanei main_notebook_similar_images = Immagini simili 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 main_tree_view_column_modification = Data di modifica main_tree_view_column_size = Dimensione main_tree_view_column_similarity = Similitudine 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_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 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 main_label_size_bytes = Dimensione (byte) main_label_min_size = Min 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 = 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 upper_tree_view_included_reference_column_title = Cartelle di riferimento upper_recursive_button = Ricorsivo upper_recursive_button_tooltip = Se selezionata, cerca anche tra i file non posizionati direttamente nelle catelle selezionate upper_manual_add_included_button = Aggiungi manualmente upper_add_included_button = Aggiungi 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 = 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 = 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 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. 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. Quando si usano entrambe le estensioni consentite e disabilitate, questo ha la priorità maggiore, quindi il file non verrà selezionato. upper_excluded_items_tooltip = 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 popover_reverse = Inverti la selezione popover_select_all_except_oldest = Seleziona tutti eccetto il più vecchio popover_select_all_except_newest = Seleziona tutti eccetto il più recente popover_select_one_oldest = Seleziona il più vecchio popover_select_one_newest = Seleziona il più recente popover_select_custom = Selezione personalizzata 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 = 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 = 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 = Seleziona i record per Regex specificato. Con questa modalità, il testo cercato è Percorso con Nome. Esempio di utilizzo: /usr/bin/ziemniak. xt può essere trovato con /ziem[a-z]+ 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 tutti i record nel gruppo. 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 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_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 bottom_delete_button = Cancella bottom_save_button = Salva bottom_symlink_button = Collegamenti simbolici bottom_hardlink_button = Collegamenti fisici bottom_move_button = Sposta 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 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 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 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 = 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 delle impostazioni. header_about_button_tooltip = Apre la finestra delle informazioni sul programma. # Settings ## General 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_use_rust_preview = Usa librerie esterne invece di gtk per caricare anteprime settings_use_rust_preview_tooltip = Utilizzando le anteprime gtk a volte sarà più veloce e supporterà più formati, ma a volte questo potrebbe essere esattamente il contrario. Se hai problemi con il caricamento delle anteprime, puoi provare a modificare questa impostazione. Nei sistemi non-linux, si consiglia di utilizzare questa opzione, perché gtk-pixbuf non è sempre disponibile e quindi disabilitando questa opzione non caricherà le anteprime di alcune immagini. 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 = 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 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 = Elimina i risultati della cache obsoleti che puntano a file inesistenti. Quando abilitata, l'app si assicura durante il caricamento dei record, che tutti i record puntino a file validi (quelli interrotti vengono ignorati). 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 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 settings_notebook_videos = Video simili ## Multiple - settings used in multiple tabs 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 = 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 = Nasconde tutti i file tranne uno, se tutti puntano agli stessi dati (sono hardlinked). 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 = Imposta la dimensione minima del file che verrà memorizzata nella 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 la cache di prehash (un hash calcolato da una piccola parte del file) che consente il ritiro anticipato di risultati non duplicati. È disabilitato per impostazione predefinita perché può causare rallentamenti in alcune situazioni. 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 rigidi (solo Linux e macOS) settings_duplicates_prehash_checkbutton = Utilizza la cash 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 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 ## Opening cache/config folders settings_folder_cache_open_tooltip = Apre la cartella in cui sono memorizzati i file cache txt. 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. È 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. L'app li rigenererà automaticamente. settings_folder_settings_open_tooltip = Apre la cartella in cui viene memorizzata la configurazione Czkawka. 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 compute_stopped_by_user = Ricerca interrotta dall'utente compute_found_duplicates_hash_size = Trovati { $number_files } duplicati in { $number_groups } gruppi che occupano { $size } compute_found_duplicates_name = Trovati { $number_files } duplicati in { $number_groups } gruppi compute_found_empty_folders = Trovate { $number_files } cartelle vuote compute_found_empty_files = Trovati { $number_files } file vuoti compute_found_big_files = Trovati { $number_files } grandi file compute_found_temporary_files = Trovati { $number_files } file temporanei compute_found_images = Trovate { $number_files } immagini simili in { $number_groups } gruppi compute_found_videos = Trovati { $number_files } video simili in { $number_groups } gruppi 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 saving_loading_saving_success = Configurazione salvata su file saving_loading_saving_failure = Salvataggio della configurazione nel file { $name } fallito. saving_loading_reset_configuration = La configurazione corrente è stata cancellata. saving_loading_loading_success = Caricamento configurazione da file avvenuto con successo saving_loading_invalid_string = Trovato risultato non valido nella chiave "{ $key }" - "{ $result }" non è una stringa. saving_loading_invalid_int = Trovato risultato non valido nella chiave "{ $key }" - "{ $result }" non è un numero intero. saving_loading_invalid_bool = Trovato risultato non valido nella chiave "{ $key }" - "{ $result }" non è un valore booleano. saving_loading_decode_problem_bool = Decodifica booleana fallita per la chiave "{ $key }"; trovato "{ $result }", ma i valori possibili sono 0, 1, 'true' o 'false'. saving_loading_saving_same_keys = Tentativo di salvataggio dell'impostazione con chiave duplicata "{ $key }". saving_loading_failed_to_get_home_directory = Recupero cartella home fallito, per caricamento/salvataggio del file di configurazione. 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 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 nella versione corrente dell'app. # Invalid symlinks invalid_symlink_infinite_recursion = Ricorsione infinita 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 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 = 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 i record sono selezionati. delete_all_files_in_group_label2 = Sei sicuro di cancellarli tutti? 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 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 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 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 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 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 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_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 compare_move_right_button = R czkawka_gui-8.0.0/i18n/ja/czkawka_gui.ftl000064400000000000000000001120531046102023000163110ustar 00000000000000# Window titles window_settings_title = 設定 window_main_title = Czkawka (ã—ゃã£ãり) window_progress_title = スキャン中 window_compare_images = ç”»åƒã‚’比較 # General general_ok_button = Ok 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 = 最大差 music_compare_only_in_title_group = タイトルã®ã¿æ¯”較 music_compare_only_in_title_group_tooltip = 有効ã«ã™ã‚‹ã¨ã€ãƒ•ァイルã¯ã‚¿ã‚¤ãƒˆãƒ«ã§ã‚°ãƒ«ãƒ¼ãƒ—化ã•れã€ãれã‹ã‚‰æ¯”較ã•れã¾ã™ã€‚ 10000ファイルã§ã¯ã€ãã®ä»£ã‚りã«ç´„100万比較ãŒé€šå¸¸ã€ç´„20000比較ãŒã‚りã¾ã™ã€‚ same_music_tooltip = 音楽ファイルã®å†…容ã‹ã‚‰é¡žä¼¼ãƒ•ァイルを検索ã™ã‚‹ã‚ˆã†ã«è¨­å®šã§ãã¾ã™ï¼š - 音楽ファイルãŒé¡žä¼¼ã—ã¦ã„ã‚‹ã¨è­˜åˆ¥ã•ã‚Œã‚‹ãƒ•ãƒ©ã‚°ãƒ¡ãƒ³ãƒˆã®æœ€å°æ™‚é–“ - テストã•れãŸ2ã¤ã®ãƒ•ãƒ©ã‚°ãƒ¡ãƒ³ãƒˆã®æœ€å¤§å·®åˆ† 良ã„çµæžœã‚’å¾—ã‚‹ãŸã‚ã®éµã¯ã€ã“れらã®ãƒ‘ラメータã®è³¢æ˜Žãªçµ„ã¿åˆã‚ã›ã‚’見ã¤ã‘ã‚‹ã“ã¨ã§ã™ã€‚ æœ€å°æ™‚é–“ã‚’5ç§’ã€æœ€å¤§å·®ã‚’1.0ã«è¨­å®šã™ã‚‹ã¨ã€ãƒ•ァイル内ã®ã»ã¨ã‚“ã©åŒã˜ãƒ•ラグメントを探ã—ã¾ã™ã€‚ ä¸€æ–¹ã€æ™‚é–“ã‚’20ç§’ã€å·®ã®æœ€å¤§å€¤ã‚’6.0ã«è¨­å®šã™ã‚‹ã¨ã€ãƒªãƒŸãƒƒã‚¯ã‚¹ã‚„ライブ・ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãªã©ã‚’探ã™ã®ã«åŠ¹æžœçš„ã§ã™ã€‚ デフォルトã§ã¯ã€å„音楽ファイルã¯äº’ã„ã«æ¯”較ã•れã€å¤šæ•°ã®ãƒ•ァイルをテストã™ã‚‹å ´åˆã€ã“れã¯å¤šãã®æ™‚é–“ã‚’è¦ã—ã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€é€šå¸¸ã€å‚照フォルダを使用ã—ã€ã©ã®ãƒ•ァイルを互ã„ã«æ¯”較ã™ã‚‹ã‹ã‚’指定ã™ã‚‹æ–¹ãŒè‰¯ã„ã§ã—ょã†ï¼ˆåŒã˜é‡ã®ãƒ•ァイルã§ã¯ã€ãƒ•ã‚£ãƒ³ã‚¬ãƒ¼ãƒ—ãƒªãƒ³ãƒˆã®æ¯”較ã¯å‚照フォルダãªã—よりも少ãªãã¨ã‚‚ 4 å€é€Ÿããªã‚Šã¾ã™ï¼‰ã€‚ music_comparison_checkbox_tooltip = 機械学習ã«ã‚ˆã‚Šãƒ•レーズã‹ã‚‰æ‹¬å¼§ã¨ãã®ä¸­èº«ã‚’除外ã™ã‚‹AIを使用ã—ã¦ã€é¡žä¼¼ã®éŸ³æ¥½ãƒ•ァイルを検索ã—ã¾ã™ã€‚ã“ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ãŒæœ‰åйãªå ´åˆã€ä¾‹ãˆã°ä»¥ä¸‹ã®ãƒ•ァイルã¯é‡è¤‡ã¨ã¿ãªã•れã¾ã™: ÅšwiÄ™dziżłób --- ÅšwiÄ™dziżłób (Remix Lato 2021) duplicate_case_sensitive_name = å¤§æ–‡å­—å°æ–‡å­—を区別ã™ã‚‹ duplicate_case_sensitive_name_tooltip = 有効ãªå ´åˆã€ã‚°ãƒ«ãƒ¼ãƒ—ã®ã¿ãƒ¬ã‚³ãƒ¼ãƒ‰ã¾ã£ãŸãåŒã˜åå‰ã‚’æŒã£ã¦ã„ã‚‹å ´åˆãªã©ã€‚ Z oÅ‚d <-> Z oÅ‚d ã“ã®ã‚ˆã†ãªã‚ªãƒ—ションを無効ã«ã™ã‚‹ã¨ã€å„文字ã®ã‚µã‚¤ã‚ºãŒåŒã˜ã‹ã©ã†ã‹ã‚’確èªã›ãšã«åå‰ã‚’グループ化ã—ã¾ã™ã€‚例: z o D <-> Z 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ã¯ã€ä»Šã®ã¨ã“ã‚以下ã®3ç¨®é¡žã®æ–¹æ³•ã§é‡è¤‡ã‚’見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™: åå‰ - åŒã˜åå‰ã®ãƒ•ァイルを検索ã—ã¾ã™ã€‚ サイズ - åŒã˜ã‚µã‚¤ã‚ºã®ãƒ•ァイルを探ã—ã¾ã™ã€‚ ãƒãƒƒã‚·ãƒ¥ - åŒã˜å†…容ã®ãƒ•ァイルを探ã—ã¾ã™ã€‚ファイルをãƒãƒƒã‚·ãƒ¥åŒ–ã—ã¦æ¯”較ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šé‡è¤‡ã‚’見ã¤ã‘ã¾ã™ã€‚ã“ã®ãƒ¢ãƒ¼ãƒ‰ã¯ã€é‡è¤‡ã‚’見ã¤ã‘ã‚‹ãŸã‚ã®æœ€ã‚‚å®‰å…¨ãªæ–¹æ³•ã§ã™ã€‚ã“ã®ãƒ„ールã¯ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’多用ã™ã‚‹ã®ã§ã€åŒã˜ãƒ‡ãƒ¼ã‚¿ã®2回目以é™ã®ã‚¹ã‚­ãƒ£ãƒ³ã¯æœ€åˆã®æ™‚よりãšã£ã¨é€Ÿããªã‚‹ã¯ãšã§ã™ã€‚ 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 = 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 = 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ã®2ã¤ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’追加ã—ã¾ã™ã€‚ upper_add_included_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 も利用å¯èƒ½ã§ã™ã€‚ 使用例: ".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 = 指定ã—ãŸæ­£è¦è¡¨ç¾ã§ãƒ¬ã‚³ãƒ¼ãƒ‰ã‚’é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ ã“ã®ãƒ¢ãƒ¼ãƒ‰ã§ã¯ã€æ¤œç´¢ã•れる文字列ã¯ãƒ‘ã‚¹ã¨æ–‡å­—列ã«ãªã‚Šã¾ã™ã€‚ 使用例: /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 = グループ内ã®ã™ã¹ã¦ã®ãƒ¬ã‚³ãƒ¼ãƒ‰ã‚’é¸æŠžã§ããªã„よã†ã«ã—ã¾ã™ã€‚ ã»ã¨ã‚“ã©ã®çжæ³ã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯å…ƒã®ãƒ•ァイルã¨é‡è¤‡ãƒ•ァイルã®ä¸¡æ–¹ã‚’削除ã—ãŸããªã„ãŸã‚ã€ã“れã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§æœ‰åйã«ãªã£ã¦ã„ã¾ã™ã€‚ å°‘ãªãã¨ã‚‚1ã¤ã®ãƒ•ァイルを残ã—ãŸã„。 警告: ã“ã®è¨­å®šã¯ã€ã™ã§ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚°ãƒ«ãƒ¼ãƒ—内ã®ã™ã¹ã¦ã®çµæžœã‚’手動ã§é¸æŠžã—ã¦ã„ã‚‹å ´åˆã«ã¯æ©Ÿèƒ½ã—ã¾ã›ã‚“。 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ã¤ä»¥ä¸Šã®çµæžœãŒé¸æŠžã•れã¦ã„ã‚‹å ´åˆã«ã®ã¿æ©Ÿèƒ½ã—ã¾ã™ã€‚ 最åˆã®çµæžœã¯å¤‰æ›´ã•れãšã€2番目以é™ã®çµæžœãŒæœ€åˆã®çµæžœã«ã‚·ãƒ³ãƒœãƒªãƒƒã‚¯ãƒªãƒ³ã‚¯ã•れã¾ã™ã€‚ bottom_hardlink_button_tooltip = ãƒãƒ¼ãƒ‰ãƒªãƒ³ã‚¯ã‚’作æˆã—ã¾ã™ã€‚ グループ内ã®2ã¤ä»¥ä¸Šã®çµæžœãŒé¸æŠžã•れã¦ã„ã‚‹å ´åˆã«ã®ã¿æ©Ÿèƒ½ã—ã¾ã™ã€‚ 最åˆã®çµæžœã¯å¤‰æ›´ã•れãšã€2番目以é™ã®çµæžœãŒæœ€åˆã®çµæžœã«ãƒãƒ¼ãƒ‰ãƒªãƒ³ã‚¯ã•れã¾ã™ã€‚ bottom_hardlink_button_not_available_tooltip = ãƒãƒ¼ãƒ‰ãƒªãƒ³ã‚¯ã‚’作æˆã™ã‚‹ã€‚ ãƒãƒ¼ãƒ‰ãƒªãƒ³ã‚¯ã‚’作æˆã§ããªã„ãŸã‚ã€ãƒœã‚¿ãƒ³ã¯ç„¡åйã«ãªã£ã¦ã„ã¾ã™ã€‚ ãƒãƒ¼ãƒ‰ãƒªãƒ³ã‚¯ã¯Windowsã®ç®¡ç†è€…権é™ã§ã®ã¿å‹•作ã™ã‚‹ã®ã§ã€ã‚¢ãƒ—リã¯å¿…ãšç®¡ç†è€…ã¨ã—ã¦å®Ÿè¡Œã—ã¦ãã ã•ã„。 アプリãŒã™ã§ã«ãã®ã‚ˆã†ãªæ¨©é™ã§å‹•作ã—ã¦ã„ã‚‹å ´åˆã¯ã€Githubã«åŒæ§˜ã®å•題ãŒãªã„ã‹ç¢ºèªã—ã¦ãã ã•ã„。 bottom_move_button_tooltip = é¸æŠžã—ãŸãƒ•ォルダã«ãƒ•ァイルを移動ã—ã¾ã™ã€‚ ディレクトリツリーを維æŒã—ãŸã¾ã¾ã€ã™ã¹ã¦ã®ãƒ•ァイルをフォルダã«ã‚³ãƒ”ーã—ã¾ã™ã€‚ åŒã˜åå‰ã®2ã¤ã®ãƒ•ァイルをフォルダã«ç§»å‹•ã—よã†ã¨ã™ã‚‹ã¨ã€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_use_rust_preview = プレビューã®èª­ã¿è¾¼ã¿ã«gtkã®ä»£ã‚りã«å¤–部ライブラリを使用ã™ã‚‹ settings_use_rust_preview_tooltip = Using gtk previews will sometimes be faster and support more formats, but sometimes this could be exactly the opposite. If you have problems with loading previews, you may can to try to change this setting. On non-linux systems, it is recommended to use this option, because gtk-pixbuf are not always available there so disabling this option will not load previews of some images. 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 = 下部ã«ãƒ†ã‚­ã‚¹ãƒˆãƒ‘ãƒãƒ«ã‚’表示ã—ã¾ã™ã€‚ 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 = キャッシュã‹ã‚‰å¤ã„çµæžœã‚’削除ã—ã¾ã™ã€‚ ## Duplicates settings_duplicates_hide_hard_link_button_tooltip = ãƒãƒ¼ãƒ‰ãƒªãƒ³ã‚¯ã•れã¦ã„ã¦ã‹ã¤åŒã˜ãƒ‡ãƒ¼ã‚¿ã‚’指ã—ã¦ã„ã‚‹å ´åˆã€1ã¤ã‚’除ãã™ã¹ã¦ã®ãƒ•ァイルをéžè¡¨ç¤ºã«ã—ã¾ã™ã€‚ 例: ディスク上ã«ç‰¹å®šã®ãƒ‡ãƒ¼ã‚¿ã«ãƒãƒ¼ãƒ‰ãƒªãƒ³ã‚¯ã•れã¦ã„ã‚‹åŒã˜ãƒ‡ãƒ¼ã‚¿ã‚’æŒã¤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_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 = { $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_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 = { $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 }" ã‹ã‚‰ 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 = ã“ã®ãƒ—ログラムã¯è‡ªç”±ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€å¸¸ã«ã€‚ # 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 = ã„ãã¤ã‹ã®ã‚°ãƒ«ãƒ¼ãƒ—ã§ã¯ä¸€ã¤ã®ãƒ¬ã‚³ãƒ¼ãƒ‰ã—ã‹é¸æŠžã•れã¦ã„ãªã„ãŸã‚ã€ãれらã¯ç„¡è¦–ã•れã¾ã™ã€‚ 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 = 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_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 = L compare_move_right_button = R czkawka_gui-8.0.0/i18n/ko/czkawka_gui.ftl000064400000000000000000001025321046102023000163310ustar 00000000000000# 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 music_compare_only_in_title_group = Compare only in title music_compare_only_in_title_group_tooltip = When enabled, files are grouped by title and then compared to each other. With 10000 files, instead almost 100 million comparisons usually there will be around 20000 comparisons. 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_use_rust_preview = Use external libraries instead gtk to load previews settings_use_rust_preview_tooltip = Using gtk previews will sometimes be faster and support more formats, but sometimes this could be exactly the opposite. If you have problems with loading previews, you may can to try to change this setting. On non-linux systems, it is recommended to use this option, because gtk-pixbuf are not always available there so disabling this option will not load previews of some images. 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 = ë‹¤ìŒ czkawka_gui-8.0.0/i18n/nl/czkawka_gui.ftl000064400000000000000000000776761046102023000163550ustar 00000000000000# 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 music_compare_only_in_title_group = Vergelijk alleen in de titel music_compare_only_in_title_group_tooltip = Wanneer ingeschakeld, worden bestanden gegroepeerd op titel en vervolgens vergeleken met elkaar. Met 10000 bestanden, in plaats van bijna 100 miljoen vergelijkingen zullen er meestal ongeveer 20000 vergelijkingen worden gemaakt. 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_use_rust_preview = Gebruik externe bibliotheken in plaats daarvan om previews te laden settings_use_rust_preview_tooltip = Het gebruik van gtk previews zal soms sneller zijn en ondersteuning bieden voor meer formaten, maar soms kan het precies het tegenovergestelde zijn. Als je problemen hebt met het laden van previews, kan je proberen deze instelling te veranderen. Op niet-linux systemen is het aangeraden om deze optie te gebruiken, omdat gtk-pixbuf niet altijd beschikbaar is, dus het uitschakelen van deze optie zal geen voorvertoningen van sommige afbeeldingen laden. 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 czkawka_gui-8.0.0/i18n/no/czkawka_gui.ftl000064400000000000000000000734251046102023000163440ustar 00000000000000# 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 music_compare_only_in_title_group = Sammenlign bare i tittel music_compare_only_in_title_group_tooltip = NÃ¥r aktivert, blir filer gruppert etter tittel og sammenlignes med hverandre. Med 10000 filer, vil det i stedet være nesten 100 millioner sammenligninger som regel være rundt 20000 sammenligninger. 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_use_rust_preview = Bruk eksterne biblioteker i stedet gtk for Ã¥ laste forhÃ¥ndsvisninger settings_use_rust_preview_tooltip = Med gtk innledning vil noen ganger være raskere og støtte flere formater, men noen ganger kan dette være akkurat det motsatte. Hvis du har problemer med Ã¥ laste forhÃ¥ndsvisninger, kan du prøve Ã¥ endre denne innstillingen. pÃ¥ ikke-linux-systemer anbefales det Ã¥ bruke dette alternativet, fordi gtk-pixbuf ikke alltid finnes, slik at deaktivering av dette alternativet ikke vil laste forhÃ¥ndsvisninger pÃ¥ noen bilder. 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 czkawka_gui-8.0.0/i18n/pl/czkawka_gui.ftl000064400000000000000000001023661046102023000163400ustar 00000000000000# Window titles window_settings_title = Ustawienia window_main_title = Czkawka window_progress_title = Skanowanie window_compare_images = Porównywanie Obrazów # General general_ok_button = Ok general_close_button = Zamknij # Main window music_title_checkbox = TytuÅ‚ music_artist_checkbox = Wykonawca 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 music_compare_only_in_title_group = Porównaj tylko w tytule music_compare_only_in_title_group_tooltip = Gdy włączone, pliki sÄ… pogrupowane wedÅ‚ug tytuÅ‚u, a nastÄ™pnie porównywane do siebie. z 10000 plików, zamiast tego prawie 100 milionów porównaÅ„ bÄ™dzie okoÅ‚o 20000 porównaÅ„. 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 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 rodzaje hashów: Blake3 - kryptograficzna funkcja skrótu. Jest to wartość domyÅ›lna, ponieważ jest bardzo szybka. CRC32 - prosta funkcja haszujÄ…ca. Powinno to być szybsze od Blake3, ale bardzo rzadko może to prowadzić do kolizji. 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 razie Czkawka oferuje trzy typy metod do znalezienia duplikatów przez: Nazwa - Znajduje pliki o tej samej nazwie. Rozmiar - Znajduje pliki o tym samym rozmiarze. 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 = 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. 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. Każdy ma zarówno mocniejsze jak i sÅ‚absze punkty i czasami daje lepsze a czasami gorsze wyniki dla różnych obrazów. 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 main_notebook_empty_files = Puste Pliki main_notebook_temporary = Pliki Tymczasowe main_notebook_similar_images = Podobne Obrazy 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 main_tree_view_column_modification = Data Modyfikacji main_tree_view_column_size = Rozmiar main_tree_view_column_similarity = PodobieÅ„stwo 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_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_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 = 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 upper_tree_view_included_reference_column_title = Foldery Referencyjne upper_recursive_button = Rekursywnie upper_recursive_button_tooltip = JeÅ›li zaznaczony, szuka plików i folderów również w katalogach wewnÄ…trz, nawet jeÅ›li nie znajdujÄ… siÄ™ one bezpoÅ›rednio w tym folderze. upper_manual_add_included_button = RÄ™cznie Dodaj upper_add_included_button = Dodaj 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 = 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 = 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 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. 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. 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 = 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 popover_reverse = Odwróć zaznaczenie popover_select_all_except_oldest = Zaznacz wszystkie oprócz najstarszego popover_select_all_except_newest = Zaznacz wszystkie oprócz najnowszego popover_select_one_oldest = Zaznacz jedno najstarsze popover_select_one_newest = Zaznacz jedno najnowsze popover_select_custom = WÅ‚asne zaznaczanie 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 = Zaznacza rekordy wedÅ‚ug Å›cieżki. PrzykÅ‚adowe użycie: /home/pimpek/rzecz.txt można znaleźć używajÄ…c /home/pim* popover_custom_name_check_button_entry_tooltip = Zaznacza rekordy wedÅ‚ug nazw plików. PrzykÅ‚adowe użycie: /usr/ping/pong.txt można znaleźć za pomocÄ… *ong* popover_custom_regex_check_button_entry_tooltip = Wybierz rekordy wedÅ‚ug okreÅ›lonego Regexa. W tym trybie wyszukiwanym tekstem jest peÅ‚na Å›cieżka(wraz z nazwÄ…). PrzykÅ‚adowe użycie: /usr/bin/ziemniak. xt można znaleźć za pomocÄ… /ziem[a-z]+ 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 wybraniu wszystkich rekordów w grupie. 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. 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 bottom_search_button = Szukaj bottom_select_button = Zaznacz bottom_delete_button = UsuÅ„ bottom_save_button = Zapisz bottom_symlink_button = Symlink bottom_hardlink_button = Hardlink bottom_compare_button = Porównaj bottom_move_button = PrzenieÅ› 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 = 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 = 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 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_compare_button_tooltip = Porównuje pliki/foldery w grupach. 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. Oficialnie wspierany jest jÄ™zyk polski i angielski. about_repository_button = Repozytorium about_donation_button = Dotacje about_instruction_button = Instrukcja(ENG) about_translation_button = TÅ‚umaczenie # Header header_setting_button_tooltip = Otwórz okno z ustawieniami programu. header_about_button_tooltip = Otwórz okno z informacjami o programie. # Settings ## General 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_use_rust_preview = Użyj zewnÄ™trznych bibliotek zamiast gtk, aby zaÅ‚adować podglÄ…d settings_use_rust_preview_tooltip = Korzystanie z podglÄ…du gtk bÄ™dzie czasem szybsze i obsÅ‚uguje wiÄ™cej formatów, ale czasami może to być dokÅ‚adnie odwrotne. JeÅ›li masz problemy z Å‚adowaniem podglÄ…dów, możesz spróbować zmienić to ustawienie. W systemach innych niż linux zaleca siÄ™ użycie tej opcji, ponieważ gtk-pixbuf nie zawsze jest tam dostÄ™pny, wiÄ™c wyłączenie tej opcji nie zaÅ‚aduje podglÄ…du niektórych obrazów. 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 = 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 settings_show_text_view_button = Pokazuj panel tekstowy na dole settings_use_cache_button = Używaj pamiÄ™ci podrÄ™cznej settings_save_also_as_json_button = Zapisz pamięć podrÄ™cznÄ… również do pliku JSON 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 = UsuÅ„ nieaktualne rekordy z pamiÄ™ci podrÄ™cznej, które wskazujÄ… na nieistniejÄ…ce pliki. 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, 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 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 settings_notebook_videos = Podobne Wideo ## Multiple - settings used in multiple tabs 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 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 z wyjÄ…tkiem jednego, jeÅ›li wszystkie wskazujÄ… na te same dane (sÄ… połączone twardym dowiÄ…zaniem). 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 = Ustaw minimalny rozmiar pliku, który zapisywany bÄ™dzie do pliku z pamiÄ™ciÄ… podrÄ™cznej. 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 = 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. Jest domyÅ›lnie wyłączona opcja, ponieważ może spowodować spowolnienie w niektórych sytuacjach. 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 = 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 = 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 = 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Å„ ## Opening cache/config folders settings_folder_cache_open_tooltip = Otwiera folder gdzie przechowywana jest pamięć podrÄ™czna aplikacji. 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). 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, w którym konfiguracja Czkawki jest przechowywana. 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 compute_stopped_by_user = Przeszukiwanie zostaÅ‚o zatrzymane przez użytkownika compute_found_duplicates_hash_size = Znaleziono { $number_files } duplikatów w { $number_groups } grupach, które zajmujÄ… { $size } compute_found_duplicates_name = Znaleziono { $number_files } duplikatów w { $number_groups } grupach compute_found_empty_folders = Znaleziono { $number_files } pustych folderów compute_found_empty_files = Znaleziono { $number_files } pustych plików compute_found_big_files = Znaleziono { $number_files } najwiÄ™kszych plików compute_found_temporary_files = Znaleziono { $number_files } tymczasowych plików compute_found_images = Znaleziono { $number_files } podobnych obrazów w { $number_groups } grupach compute_found_videos = Znaleziono { $number_files } podobnych plików wideo w { $number_groups } grupach 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_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 saving_loading_saving_success = Zapisano konfiguracjÄ™ do pliku { $name }. saving_loading_saving_failure = Nie udaÅ‚o zapisać siÄ™ konfiguracji do pliku { $name }. saving_loading_reset_configuration = Przywrócono domyÅ›lÄ… konfiguracjÄ™. saving_loading_loading_success = Poprawnie zaÅ‚adowano ustawienia aplikacji. saving_loading_invalid_string = Dla klucza "{ $key }" znaleziono niepoprawnÄ… wartość - "{ $result }" która nie jest jedno-liniowym ciÄ…giem znaków. saving_loading_invalid_int = Dla klucza "{ $key }" znaleziono niepoprawnÄ… wartość - "{ $result }" która nie jest liczbÄ… caÅ‚kowitÄ…. saving_loading_invalid_bool = Dla klucza "{ $key }" znaleziono niepoprawnÄ… wartość - "{ $result }" która nie jest typem logicznym. saving_loading_decode_problem_bool = Nie udaÅ‚o siÄ™ zdekodować wartoÅ›ci z klucza "{ $key }", znaleziono "{ $result }" ale dozwolone wartoÅ›ci to 0, 1, true lub false. saving_loading_saving_same_keys = Próba zapisania ustawieÅ„ z zduplikowanym kluczem "{ $key }". saving_loading_failed_to_get_home_directory = Nie udaÅ‚o siÄ™ pobrać informacji o katalogu domowym by otworzyć i zapisać plik konfiguracyjny. saving_loading_folder_config_instead_file = Nie można utworzyć lub otworzyć pliku konfiguracyjnego w Å›cieżce "{ $path }", ponieważ w danej Å›cieżce istnieje już folder. saving_loading_failed_to_create_configuration_folder = Nie udaÅ‚o siÄ™ utworzyć folderu konfiguracyjnego "{ $path }", powód "{ $reason }". saving_loading_failed_to_create_config_file = Nie udaÅ‚o siÄ™ utworzyć pliku konfiguracyjnego "{ $path }", powód "{ $reason }". saving_loading_failed_to_read_config_file = Nie można zaÅ‚adować konfiguracji z "{ $path }" ponieważ nie istnieje lub nie jest plikiem. saving_loading_failed_to_read_data_from_file = Nie można odczytać danych z pliku "{ $path }", powód "{ $reason }". saving_loading_orphan_data = Znaleziono osierocone dane "{ $data }" w wierszu "{ $line }". 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 = 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 text_view_errors = BÅĘDY about_window_motto = Program jest i bÄ™dzie zawsze darmowy do użytku. Może interfejs programu nie jest ergonomiczny, ale za to przynajmniej kod jest nieczytelny. # Various dialog dialogs_ask_next_time = Pytaj nastÄ™pnym razem 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 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 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 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 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 = 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 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 cache_properly_cleared = Poprawnie wyczyszczono pamięć podrÄ™cznÄ… cache_clear_duplicates_title = Czyszczenie pamiÄ™ci podrÄ™cznej duplikatów cache_clear_similar_images_title = Czyszczenie pamiÄ™ci podrÄ™cznej podobnych obrazów 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 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_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 compare_move_right_button = P czkawka_gui-8.0.0/i18n/pt/czkawka_gui.ftl000064400000000000000000000776621046102023000163620ustar 00000000000000# Window titles window_settings_title = Configurações window_main_title = Czkawka (Soluço) window_progress_title = Escaneando window_compare_images = Comparar Imagens # General general_ok_button = Ok general_close_button = Fechar # Main window music_title_checkbox = Título music_artist_checkbox = Artista 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 de segundos do fragmento same_music_similarity_label = Diferença máxima music_compare_only_in_title_group = Comparar somente no título music_compare_only_in_title_group_tooltip = When enabled, files are grouped by title and then compared to each other. With 10000 files, instead almost 100 million comparisons usually there will be around 20000 comparisons. same_music_tooltip = Buscar por arquivos de música semelhantes por seu conteúdo pode ser configurado definindo: - O tempo mínimo de fragmento após o 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 é achar 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 buscará fragmentos quase iguais nos arquivos. Um tempo de 20s e uma diferença máxima de 6.0, por outro lado, funciona bem para achar 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, logo, é geralmente melhor usar pastas de referência e especificar quais arquivos devem ser comparados entre si (com a mesma quantidade de arquivos, comparar impressões digitais será pelo menos 4x mais rápido do que sem pastas de referência). music_comparison_checkbox_tooltip = 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 = Blake3 - função de hash criptográfico. Este é o padrão, por ser muito rápido. CRC32 - função de hash simples. Isto deve ser mais rápido que Blake3, mas pode muito raramente ter algumas colisões. 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 ora, o Czkawka oferece três tipos de métodos para encontrar duplicatas: Nome - Acha arquivos que têm o mesmo nome. Tamanho - Acha arquivos que têm o mesmo tamanho. 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 = Cada imagem marcada produz um hash especial que podem ser comparados entre si, e uma pequena diferença entre eles significa que essas imagens são parecidas. O tamanho de hash 8 é ótimo para achar imagens que são só um pouco semelhantes ao original. Com um maior conjunto de imagens (>1000), isso produzirá muitos falsos positivos, então recomendo usar um tamanho de hash maior neste caso. 16 é o tamanho de hash padrão e um bom compromisso entre achar até mesmo imagens pouco semelhantes e ter poucas colisões de hash. Hashes 32 e 64 só acham imagens muito semelhantes, mas quase não devem ter falsos positivos (talvez, exceto algumas imagens com o canal alfa). image_resize_filter_tooltip = Para computar o hash da imagem, a biblioteca deve primeiro redimensioná-la. Dependendo do algoritmo escolhido, a imagem resultante usada para calcular o hash parecerá um pouco diferente. O algoritmo mais rápido a ser usado, mas também o que dá os piores resultados, é o Mais Próximo. Ele é ativado por padrão, pois com o tamanho de hash 16x16, a qualidade menor não é realmente visível. Com o tamanho de hash 8x8, recomenda-se usar um algoritmo diferente do Mais Próximo para ter melhores grupos de imagens. 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 Similares main_notebook_same_music = Músicas Duplicadas main_notebook_symlinks = Ligações Simbólicas Inválidas 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_path = Caminho main_tree_view_column_modification = Data de Modificação main_tree_view_column_size = Tamanho main_tree_view_column_similarity = Similaridade 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_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 = Pasta 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_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 do mesmo tamanho check_button_general_same_size_tooltip = Ignorar arquivos com tamanho idêntico nos resultados — geralmente estes são duplicatas 1:1 main_label_size_bytes_tooltip = Tamanho dos arquivos usados na verificação # Upper window upper_tree_view_included_folder_column_title = Pastas para Buscar upper_tree_view_included_reference_column_title = Pastas de Referência upper_recursive_button = Recursiva 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 = Adicionar Manual upper_add_included_button = Adicionar upper_remove_included_button = Excluir upper_manual_add_excluded_button = Adicionar Manual upper_add_excluded_button = Adicionar upper_remove_excluded_button = Excluir 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 = 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). 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 (ex., jpg, png), vídeos (ex., 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. 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 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 = 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 tudo, exceto o menor popover_custom_path_check_button_entry_tooltip = Selecionar registros por caminho. Exemplo de uso: /home/pimpek/rzecz.txt pode ser achado com /home/pim* popover_custom_name_check_button_entry_tooltip = Selecionar registros por nomes de arquivos. Exemplo de uso: /usr/ping/pong.txt pode ser achado com *ong* popover_custom_regex_check_button_entry_tooltip = Selecionar registros por Regex especificada. Com este modo, o texto buscado é o caminho com o nome. Exemplo de uso: /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. Quando desativado, /home/* acha ambos /HoMe/roman e /home/roman. popover_custom_not_all_check_button_tooltip = Impede a seleção de todo registro no grupo. 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 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 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 arquivo 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álido popover_valid_regex = Expressão regular é válida # Bottom buttons bottom_search_button = Buscar bottom_select_button = Selecionar bottom_delete_button = Excluir bottom_save_button = Guardar 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 = 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 = 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 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 = 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. about_repository_button = Repositório about_donation_button = Doação about_instruction_button = Instrução about_translation_button = Tradução # Header header_setting_button_tooltip = Abre diálogo de configurações. header_about_button_tooltip = Abre diálogo com informações sobre o aplicativo. # Settings ## General 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_use_rust_preview = Usar bibliotecas externas em vez de gtk para carregar pré-visualizações settings_use_rust_preview_tooltip = Using gtk previews will sometimes be faster and support more formats, but sometimes this could be exactly the opposite. If you have problems with loading previews, you may can to try to change this setting. On non-linux systems, it is recommended to use this option, because gtk-pixbuf are not always available there so disabling this option will not load previews of some images. 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 = 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 = 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 = Excluir resultados de cache desatualizados que apontam para arquivos inexistentes. 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 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 ativar isto, o que acelerará o carregamento/armazenamento de cache/salvamento no início/fim do escaneamento. settings_notebook_general = Geral settings_notebook_duplicates = Duplicatas settings_notebook_images = Imagens Semelhantes settings_notebook_videos = Vídeo Semelhante ## Multiple - settings used in multiple tabs 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 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, exceto um, se todos apontarem para os mesmos dados (são ligados por hardlink). 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 = Definir o tamanho mínimo do arquivo que será armazenado em cache. Escolher um valor menor gerará mais registros. Isto acelerará a busca, mas diminuirá o carregamento/armazenamento do cache. settings_duplicates_prehash_checkbutton_tooltip = 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. Está desativado por padrão, pois pode causar lentidões nalguns casos. É 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 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 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 = 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 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 o diretório onde os arquivos txt são armazenados. 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 esses arquivos entre computadores para economizar tempo em outra verficação de arquivos (claro, se eles tiverem uma estrutura de diretórios semelhante). No caso de problemas com o cache, esses arquivos podem ser removidos. O aplicativo os regenerará automaticamente. settings_folder_settings_open_tooltip = Abre o diretório onde a configuração do Czkawka está armazenada. 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 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 = 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_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 = Todo estágio:{ " " } # Saving loading 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 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 = Recursão infinita invalid_symlink_non_existent_destination = Arquivo de destino não existe # Other selected_all_reference_folders = Não é possível 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 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 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 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 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ê 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 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 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 = Deseja 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_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 compare_move_right_button = R czkawka_gui-8.0.0/i18n/pt-BR/czkawka_gui.ftl000064400000000000000000000771451046102023000166570ustar 00000000000000# Window titles window_settings_title = Confirgurações window_main_title = Czkawka (Hiccup) window_progress_title = Verificando window_compare_images = Comparar imagens # General general_ok_button = OK general_close_button = FECHAR # Main window music_title_checkbox = Título music_artist_checkbox = Artista music_year_checkbox = ano music_bitrate_checkbox = Bitrate 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 music_compare_only_in_title_group = Comparar somente no título music_compare_only_in_title_group_tooltip = When enabled, files are grouped by title and then compared to each other. With 10000 files, instead almost 100 million comparisons usually there will be around 20000 comparisons. 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 após o qual os arquivos de música podem ser identificados como similares - 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 remixes/versões 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 arquivos de música semelhantes usando AI, que usa aprendizado de máquina para remover parênteses de uma frase. Por exemplo, com essa opção habilitada, os arquivos em questão serão considerados duplicatas: S├wie^\\dziz├ło├b --- S├wieÅ‚ dziz├ło├b (Remix Lato 2021) duplicate_case_sensitive_name = Caso sensível duplicate_case_sensitive_name_tooltip = Quando ativado, grupo apenas registo quando têm exatamente o mesmo nome, por exemplo. Z├oÅ‚d - Z├oÅ‚d Desabilitar tal opção irá agrupar nomes de grupos sem verificar se cada letra tem o mesmo tamanho, por exemplo, zweb+graphie://ka-perseus-graphie.s3.amazonaws.com/oÅD - Z³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: Blake3 - função hash criptográfica. Este é o padrão porque é muito rápido. CRC32 - função hash simples. Isto deveria ser mais rápido do que o Blake3, mas muito raramente pode ter algumas colisões. XXH3 - muito similar em desempenho e qualidade de hash do Blake3 (mas não criptográfico). Então, esses modos podem ser facilmente interalterados. duplicate_check_method_tooltip = Por enquanto, Czkawka oferece três tipos de métodos para encontrar duplicados por: Nome - Localiza arquivos que têm o mesmo nome. Size - Localiza arquivos que têm o mesmo tamanho. Hash - Localiza arquivos que têm o mesmo conteúdo. Este modo de hashing o arquivo e, mais tarde, compara este hash para encontrar duplicatas. Este modo é a maneira mais segura de encontrar duplicatas. O app usa o cache pesado, então as verificações de segundo e mais longo dados devem ser muito mais rápidas do que o primeiro. image_hash_size_tooltip = 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 = 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 = 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 similares main_notebook_same_music = Músicas duplicadas main_notebook_symlinks = Links simbólicos inválidos 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_path = Caminho main_tree_view_column_modification = Data de modificação main_tree_view_column_size = Tamanho main_tree_view_column_similarity = Similaridade main_tree_view_column_dimensions = cotas main_tree_view_column_title = Título main_tree_view_column_artist = Artista main_tree_view_column_year = ano main_tree_view_column_bitrate = Bitrate main_tree_view_column_length = Comprimento main_tree_view_column_genre = gênero main_tree_view_column_symlink_file_name = Nome do arquivo Symlink main_tree_view_column_symlink_folder = Pasta Symlink 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_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 = Similarity{ " " } main_check_box_broken_files_audio = Ãudio main_check_box_broken_files_pdf = PDF main_check_box_broken_files_archive = Arquivo main_check_box_broken_files_image = Imagem: check_button_general_same_size = Ignorar o mesmo tamanho 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_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_add_included_button = Adicionar upper_remove_included_button = Excluir upper_manual_add_excluded_button = Adicionar Manual upper_add_excluded_button = Adicionar upper_remove_excluded_button = Excluir upper_manual_add_included_button_tooltip = Adicione o nome do diretório à mão. Para adicionar vários caminhos de uma vez, separá-los por ; /home/roman;/home/rozkaz adicionará dois diretórios /home/roman e /home/rozkaz upper_add_included_button_tooltip = Adicionar novo diretório à pesquisa. upper_remove_included_button_tooltip = Excluir diretório da busca upper_manual_add_excluded_button_tooltip = Adicione nome de diretório excluído à mão. Para adicionar vários caminhos de uma vez, separá-los por ; /home/roman;/home/krokiet irá adicionar dois diretórios /home/roman e /home/keokiet 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_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 = Allowed extensions must be separated by commas (by default all are available). The following Macros, which add multiple extensions at once, are also available: IMAGE, VIDEO, MUSIC, TEXT. 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 = Lista de arquivos desabilitados que serão ignorados na verificação. Ao usar extensões permitidas e desativadas, este tem maior prioridade, então o arquivo não será marcado. 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 = 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_all_images_except_biggest = Selecionar tudo, exceto o maior popover_select_all_images_except_smallest = Selecionar todos, exceto menor popover_custom_path_check_button_entry_tooltip = Selecione registros por caminho. Exemplo de uso: /home/pimpek/rzecz.txt pode ser encontrado com /home/pim* popover_custom_name_check_button_entry_tooltip = Select records by file names. Example usage: /usr/ping/pong.txt can be found with *ong* popover_custom_regex_check_button_entry_tooltip = Selecione registros por Regex. Com este modo, texto pesquisado é o caminho com o nome. Exemplo de uso: /usr/bin/ziemniak. xt pode ser encontrado com /ziem[a-z]+ Isso usa a implementação regex Rust padrão. Você pode ler mais sobre isso aqui: https://docs.rs/regex. popover_custom_case_sensitive_check_button_tooltip = Ativa a detecção diferenciada de maiúsculas de minúsculas. Quando desabilitado /home/* encontra ambos /HoMe/roman e /home/roman. popover_custom_not_all_check_button_tooltip = Impede selecionar todos os registros no grupo. Isso é habilitado por padrão, porque na maioria das situações, você não quer apagar arquivos originais e duplicados, mas quer deixar pelo menos um arquivo. AVISO: Essa configuração não funciona se você já selecionou manualmente todos os resultados em um grupo. popover_custom_regex_path_label = Caminho popover_custom_regex_name_label = Nome: popover_custom_regex_regex_label = Caminho Regex + Nome popover_custom_case_sensitive_check_button = Sensível ao caso 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_sort_file_name = Nome do arquivo popover_sort_folder_name = Nome Pasta popover_sort_full_name = Nome completo popover_sort_size = Tamanho popover_sort_selection = Seleção popover_invalid_regex = Regex inválido popover_valid_regex = Regex é válido # Bottom buttons bottom_search_button = Pesquisa 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_sort_button = Ordenar bottom_search_button_tooltip = Iniciar busca bottom_select_button_tooltip = Selecione registros. Apenas arquivos/pastas selecionadas podem ser processados posteriormente. bottom_delete_button_tooltip = Excluir arquivos/pastas selecionadas. bottom_save_button_tooltip = Salvar dados sobre a pesquisa em arquivo bottom_symlink_button_tooltip = Create symbolic links. Only works when at least two results in a group are selected. First is unchanged and second and later are symlinked to first. bottom_hardlink_button_tooltip = Criar links hardlinks. U Só funciona quando pelo menos dois resultados em um grupo são selecionados. O primeiro é inalterado e segundo e depois são vinculados ao primeiro. bottom_hardlink_button_not_available_tooltip = Criar links hardlinks. O botão está desativado, porque links hardlinks não podem ser criados. Hardlinks só funcionam com privilégios de administrador no Windows, então certifique-se de executar o app como administrador. Se o aplicativo já funciona com tais privilégios, verifique se há questões semelhantes no 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 = Ordena arquivos/pastas de acordo com o método selecionado. bottom_show_errors_tooltip = Mostrar/ocultar painel de texto inferior. bottom_show_upper_notebook_tooltip = Mostrar/ocultar painel superior do caderno. # Progress Window progress_stop_button = Interromper progress_stop_additional_message = Parar pedido # 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 de 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 about_translation_button = Tradução # Header header_setting_button_tooltip = Abre diálogo de configurações. header_about_button_tooltip = Abre diálogo com informações sobre o aplicativo. # Settings ## General settings_number_of_threads = Número de threads usados settings_number_of_threads_tooltip = Número de tópicos usados, 0 significa que todos os tópicos disponíveis serão usados. settings_use_rust_preview = Usar bibliotecas externas em vez de gtk para carregar pré-visualizações settings_use_rust_preview_tooltip = Using gtk previews will sometimes be faster and support more formats, but sometimes this could be exactly the opposite. If you have problems with loading previews, you may can to try to change this setting. On non-linux systems, it is recommended to use this option, because gtk-pixbuf are not always available there so disabling this option will not load previews of some images. settings_label_restart = Você precisa reiniciar o aplicativo para aplicar as configurações! settings_ignore_other_filesystems = Ignorar outros sistemas de arquivos (somente Linux) settings_ignore_other_filesystems_tooltip = ignora arquivos que não estão no mesmo sistema de arquivos que os diretórios pesquisados. Funciona a mesma como a opção -xdev no comando localizar no Linux settings_save_at_exit_button_tooltip = Salvar configuração em arquivo ao fechar o aplicativo. settings_load_at_start_button_tooltip = Carregar configuração do arquivo ao abrir aplicativo. Se não estiver habilitado, configurações padrão serão usadas. settings_confirm_deletion_button_tooltip = Mostrar diálogo de confirmação ao clicar no botão excluir. settings_confirm_link_button_tooltip = Mostrar diálogo de confirmação ao clicar no botão hard/simbólica. settings_confirm_group_deletion_button_tooltip = Mostrar caixa de diálogo de aviso ao tentar excluir todos os registros 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 arquivo. settings_save_also_as_json_button_tooltip = Salvar cache no formato JSON (legível humana). É 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 = Move arquivos para a lixeira em vez de excluí-los permanentemente. settings_language_label_tooltip = Idioma para interface de usuário. settings_save_at_exit_button = Salvar configuração ao fechar o app settings_load_at_start_button = Carregar configuração ao abrir aplicativo 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 settings_use_cache_button = Usar cache settings_save_also_as_json_button = Também salvar o cache como arquivo JSON settings_use_trash_button = Mover os arquivos apagados 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 = 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 = Gerais settings_notebook_duplicates = Duplicados settings_notebook_images = Imagens semelhantes settings_notebook_videos = Vídeo similar ## Multiple - settings used in multiple tabs settings_multiple_image_preview_checkbutton_tooltip = Exibe pré-visualização no lado direito (ao selecionar um arquivo de imagem). settings_multiple_image_preview_checkbutton = Mostrar pré-visualização da imagem 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 = Remover resultados desatualizados do cache. ## Duplicates settings_duplicates_hide_hard_link_button_tooltip = Oculta todos os arquivos, exceto um, se todos apontarem para os mesmos dados (são hardlinked). Exemplo: No caso de haver (em disco) sete arquivos que são vinculados a dados específicos e um arquivo diferente com os mesmos dados, mas um arquivo diferente, em seguida no localizador duplicado, somente um arquivo exclusivo e um arquivo de links físicos serão mostrados. 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 = Enables caching of prehash (a hash computed from a small part of the file) which allows earlier dismissal of non-duplicated results. It is disabled by default because it can cause slowdowns in some situations. It is highly recommended to use it when scanning hundred of thousands or million files, because it can speedup search by multiple times. settings_duplicates_prehash_minimal_entry_tooltip = Tamanho mínimo da entrada em cache. settings_duplicates_hide_hard_link_button = Ocultar links rígidos (somente Linux e macOS) settings_duplicates_prehash_checkbutton = Usar cache de pré-hash settings_duplicates_minimal_size_cache_label = Tamanho mínimo dos arquivos (em bytes) salvos no cache settings_duplicates_minimal_size_cache_prehash_label = Tamanho mínimo dos arquivos (em bytes) salvos no cache de pré-hash ## Saving/Loading settings settings_saving_button_tooltip = Salve as configurações atuais no arquivo. settings_loading_button_tooltip = Carregar configurações de arquivo e substituir a configuração atual por elas. settings_reset_button_tooltip = Redefinir a configuração atual para a padrão. settings_saving_button = Salvar configuração settings_loading_button = Carregar configuração settings_reset_button = Redefinir configuração ## 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 = Abre a pasta onde a configuração do Czkawka está armazenada. AVISO: modificar a configuração manualmente pode danificar seu fluxo de trabalho. settings_folder_cache_open = Abrir pasta cache settings_folder_settings_open = Abrir pasta de configurações # Compute results compute_stopped_by_user = A pesquisa foi interrompida pelo usuário compute_found_duplicates_hash_size = Encontrada { $number_files } duplicações em { $number_groups } grupos que adotaram { $size } compute_found_duplicates_name = Encontrada { $number_files } duplicatas em grupos { $number_groups } compute_found_empty_folders = Encontradas pastas { $number_files } vazias compute_found_empty_files = Encontrados { $number_files } arquivos vazios compute_found_big_files = Encontrados { $number_files } arquivos grandes compute_found_temporary_files = Encontrados { $number_files } arquivos temporários compute_found_images = Encontradas { $number_files } imagens similares em grupos { $number_groups } compute_found_videos = Encontrados { $number_files } vídeos similares em grupos { $number_groups } compute_found_music = Encontrado { $number_files } arquivos de música similares em grupos { $number_groups } compute_found_invalid_symlinks = { $number_files } links simbólicos inválidos compute_found_broken_files = Encontrados { $number_files } arquivos quebrados compute_found_bad_extensions = Encontrados { $number_files } arquivos com extensões inválidas # Progress window progress_scanning_general_file = Escaneando arquivo { $file_number } progress_scanning_extension_of_files = Verificando extensão do arquivo { $file_checked }/{ $all_files } progress_scanning_broken_files = Checando { $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 = Comparando { $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_music_tags = Lendo etiquetas de { $file_checked }/{ $all_files } arquivo de música 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 do arquivo { $file_checked }/{ $all_files } de música progress_scanning_empty_folders = Verificando pasta { $folder_number } progress_scanning_size = Verificando o tamanho do arquivo { $file_number } progress_scanning_size_name = Verificando nome e tamanho do arquivo { $file_number } progress_scanning_name = Verificando nome do arquivo { $file_number } progress_analyzed_partial_hash = Hash parcial analisado de arquivos { $file_checked }/{ $all_files } progress_analyzed_full_hash = Hash completo analisado de arquivos { $file_checked }/{ $all_files } 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:{ " " } # Saving loading saving_loading_saving_success = Configuração salva no arquivo { $name }. saving_loading_saving_failure = Falha ao salvar os dados de configuração do 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 tecla "{ $key }" encontrado "{ $result }" mas os 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 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 = Definir "{ $data }" não existe na versão atual do aplicativo. # Invalid symlinks invalid_symlink_infinite_recursion = recursão infinita invalid_symlink_non_existent_destination = Arquivo de destino inexistente # Other selected_all_reference_folders = Não é possível iniciar a busca, quando todos os diretórios estão definidos como pastas de referência searching_for_data = Procurando dados, pode demorar um pouco, por favor, aguarde... text_view_messages = MENSAGEM text_view_warnings = ATENÇÕES 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 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 todos os registros estão selecionados. delete_all_files_in_group_label2 = Tem certeza que deseja apagá-los? delete_folder_failed = Falha ao excluir a pasta { $dir } porque 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 no hardlink hard_sym_invalid_selection_title_dialog = Seleção inválida com alguns grupos hard_sym_invalid_selection_label_1 = Em alguns grupos há apenas um registro selecionado e será ignorado. hard_sym_invalid_selection_label_2 = Para ser capaz de vincular estes arquivos, pelo menos dois 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_link_title_dialog = Link de confirmação hard_sym_link_label = Tem certeza que deseja vincular esses 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 um caminho pode ser selecionado para ser capaz de copiar os arquivos duplicados, selecionado { $path_number }. move_stats = Propriamente movido { $num_files }/{ $all_files } itens save_results_to_file = Resultados salvos tanto para arquivos txt quanto json na pasta { $name }. search_not_choosing_any_music = ERRO: Você deve selecionar pelo menos uma caixa de seleção com tipos de busca de música. search_not_choosing_any_broken_files = ERRO: Você deve selecionar pelo 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 = 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 = Isto 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 cada hash precisará ser regenerado. # Show preview 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 = O compare_move_right_button = R czkawka_gui-8.0.0/i18n/ro/czkawka_gui.ftl000064400000000000000000001011771046102023000163440ustar 00000000000000# 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ă music_compare_only_in_title_group = Compară numai în titlu music_compare_only_in_title_group_tooltip = Când este activat, fiÈ™ierele sunt grupate după titlu È™i apoi comparate între ele. Cu 10000 de fiÅŸiere, în schimb aproape 100 de milioane de comparaÅ£ii vor fi de obicei aproximativ 20000 de comparaÅ£ii. 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 oÅ‚d Dezactivarea acestei opÈ›iuni va grupa numele fără a verifica dacă fiecare literă are aceeaÈ™i mărime, de ex. z oÅD <-> Z 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_use_rust_preview = FoloseÈ™te în schimb gtk librării externe pentru a încărca previzualizările settings_use_rust_preview_tooltip = Utilizarea de previzualizări gtk va fi uneori mai rapidă È™i va suporta mai multe formate, dar uneori aceasta ar putea fi exact opusul. Dacă aveÅ£i probleme cu încărcarea previzualizărilor, puteÅ£i încerca să schimbaÅ£i această setare. Pe sistemele non-linux, se recomandă folosirea acestei optiuni, pentru că gtk-pixbuf nu sunt întotdeauna disponibile, astfel încât dezactivarea acestei opÈ›iuni nu va încărca previzualizarea unor imagini. 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 czkawka_gui-8.0.0/i18n/ru/czkawka_gui.ftl000064400000000000000000001347401046102023000163540ustar 00000000000000# 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 = МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ñ€Ð°Ð·Ð½Ð¸Ñ†Ð° music_compare_only_in_title_group = Сравнить только в заголовке music_compare_only_in_title_group_tooltip = Когда включено, файлы ÑгруппируютÑÑ Ð¿Ð¾ заголовку, а затем ÑравниваютÑÑ Ð´Ñ€ÑƒÐ³ Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼. С 10000 файлов, вмеÑто Ñтого почти 100 миллионов Ñравнений обычно будет около 20000 Ñравнений. same_music_tooltip = ПоиÑк похожих музыкальных файлов по его Ñодержимому может быть наÑтроен Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ наÑтройки: - Минимальное Ð²Ñ€ÐµÐ¼Ñ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð°, поÑле которого музыкальные файлы можно определить как похожие - МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ñ€Ð°Ð·Ð½Ð¸Ñ†Ð° между Ð´Ð²ÑƒÐ¼Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ñ‹Ð¼Ð¸ фрагментами Ключ к хорошим результатам - найти разумные комбинации Ñтих параметров, Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñтавленных. УÑтановка минимального времени на 5 Ñекунд, а макÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ñ€Ð°Ð·Ð½Ð¸Ñ†Ð° в 1.0, будет иÑкать практичеÑки идентичные фрагменты файлов. Ð’Ñ€ÐµÐ¼Ñ 20 Ñекунд и макÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ñ€Ð°Ð·Ð½Ð¸Ñ†Ð° в 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 = При включённой опции запиÑи группируютÑÑ, только еÑли у них полноÑтью Ñовпадают имена Ñ Ñ‚Ð¾Ñ‡Ð½Ð¾Ñтью до каждого Ñимвола. Ðапример, «ХИТ ДиÑкотека» не Ñовпадёт Ñ Â«Ñ…Ð¸Ñ‚ диÑкотека». При отключённой опции запиÑи группируютÑÑ Ð²Ð½Ðµ завиÑимоÑти от того, заглавные или Ñтрочные буквы иÑпользовалиÑÑŒ при напиÑании. Ðапример, «ХИТ ДиÑкотека», «хит диÑкотека», «хИт ДиСкОтЕКа» будут Ñквивалентны. 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 можно иÑпользовать один из трёх алгоритмов Ñ…ÑшированиÑ: Blake3 — криптографичеÑÐºÐ°Ñ Ñ…Ñш-функциÑ. ИÑпользуетÑÑ Ð¿Ð¾ умолчанию, поÑкольку очень быÑтрый. CRC32 — проÑÑ‚Ð°Ñ Ñ…Ñш-функциÑ. Ещё быÑтрее, чем Blake3, но возможны очень редкие ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ñ…Ñшей неидентичных файлов. XXH3 — функциÑ, Ð¿Ð¾Ñ…Ð¾Ð¶Ð°Ñ Ð¿Ð¾ производительноÑти и надёжноÑти Ñ…Ñша на Blake3, но не ÑвлÑющаÑÑÑ ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑкой, поÑтому её можно иÑпользовать вмеÑто Blake3. duplicate_check_method_tooltip = Ðа данный момент Czkawka предлагает три метода поиÑка дубликатов: Ð˜Ð¼Ñ â€” ищет файлы Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¼Ð¸ именами. Размер — ищет файлы одинакового размера. Ð¥Ñш — ищет файлы Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¼ Ñодержимым. Этот режим Ñ…Ñширует файл, а затем Ñравнивает Ñ…Ñш Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка дубликатов. Этот режим ÑвлÑетÑÑ Ñамым надёжным ÑпоÑобом поиÑка. Приложение активно иÑпользует кÑш, поÑтому второе и поÑледующие ÑÐºÐ°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð´Ð½Ð¸Ñ… и тех же данных должны быть намного быÑтрее, чем первое. image_hash_size_tooltip = Каждое проверÑемое изображение производит Ñпециальный Ñ…Ñш, который можно Ñравнить друг Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼, и Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ€Ð°Ð·Ð½Ð¸Ñ†Ð° между ними означает, что Ñти Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ‡Ð½Ñ‹. 8 размер Ñ…Ñша доÑтаточно хорош, чтобы найти изображениÑ, которые немного похожи на оригинал. С большим набором изображений (>1000), Ñто приведет к большому количеÑтву ложных Ñрабатываний, поÑтому в данном Ñлучае Ñ Ñ€ÐµÐºÐ¾Ð¼ÐµÐ½Ð´ÑƒÑŽ иÑпользовать больший размер Ñ…Ñша. 16 - Ñто размер Ñ…Ñша по умолчанию, который ÑвлÑетÑÑ Ñ…Ð¾Ñ€Ð¾ÑˆÐ¸Ð¼ компромиÑÑом между нахождением даже немного похожих изображений и наличием лишь небольшого количеÑтва Ñ…Ñш-коллизий. 32 и 64 Ñ…Ñши находÑÑ‚ только очень похожие изображениÑ, но не должны иметь ложных Ñрабатываний (может быть, за иÑключением некоторых изображений Ñ Ð°Ð»ÑŒÑ„Ð°-каналом). image_resize_filter_tooltip = Чтобы вычиÑлить Ñ…Ñш изображениÑ, библиотека должна Ñначала его перемаÑштабировать. Ð’ завиÑимоÑти от выбранного алгоритма полученное изображение, иÑпользуемое при Ñ…Ñшировании, может выглÑдеть немного другим. Самый быÑтрый алгоритм Ñ Ð½Ð¸Ð·ÐºÐ¸Ð¼ качеÑтвом — Ñто метод ближайших ÑоÑедей, Nearest. Он включён по умолчанию, потому при размере Ñ…Ñша 16x16 плохое качеÑтво не замечаетÑÑ. ЕÑли размер Ñ…Ñша 8x8, рекомендуетÑÑ Ð»ÑŽÐ±Ð¾Ð¹ алгоритм, кроме Nearest, чтобы лучше отличать похожие Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð² группах. 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 = Папка 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 = Игнорировать файлы Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¼ размером в результатах - обычно Ñто 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 = Включаемые раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ быть разделены запÑтыми (по умолчанию ищутÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ Ñ Ð»ÑŽÐ±Ñ‹Ð¼Ð¸ раÑширениÑми). МакроÑÑ‹ 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 = Выбор запиÑей Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ регулÑрного выражениÑ. Ð’ Ñтом режиме иÑкомый текÑÑ‚ предÑтавлÑет Ñобой путь Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼. Пример: /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 = Создать Ñимвольные ÑÑылки. Работает, только когда выбрано не менее двух результатов в группе. Первый результат оÑтавлÑетÑÑ, а второй и поÑледующие делаютÑÑ Ñимвольными ÑÑылками на первый. 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_use_rust_preview = ИÑпользовать внешние библиотеки вмеÑто gtk Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ предпроÑмотра settings_use_rust_preview_tooltip = ИÑпользование превью gtk иногда будет быÑтрее и поддерживать больше форматов, но иногда Ñто может быть и наоборот. ЕÑли у Ð²Ð°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ»Ð¸ проблемы Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¾Ð¹ предпроÑмотра, вы можете попробовать изменить Ñту наÑтройку. Ðа не-linux ÑиÑтемах рекомендуетÑÑ Ð¸Ñпользовать Ñту опцию, потому что gtk-pixbuf не вÑегда доÑтупен там, поÑтому отключение Ñтой опции не будет загружать превью некоторых изображений. 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 (человекочитаемый). Его Ñодержимое можно изменÑть. КÑш из Ñтого файла будет автоматичеÑки прочитан приложением, еÑли бинарный кÑш (Ñ Ñ€Ð°Ñширением 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 = Удалить уÑтаревшие результаты из кÑша. ## Duplicates settings_duplicates_hide_hard_link_button_tooltip = Скрыть вÑе файлы, кроме первого, еÑли вÑе они указывают на одни и те же данные (ÑвÑзаны жёÑткой ÑÑылкой). Пример: еÑли (на диÑке) Ñемь файлов ÑвÑзаны жёÑткой ÑÑылкой Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¼Ð¸ данными, а ещё один файл Ñодержат те же данные, но на другом 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_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_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 = Загрузка кÑша 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_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 = L compare_move_right_button = R czkawka_gui-8.0.0/i18n/sv/czkawka_gui.ftl000064400000000000000000000746521046102023000163630ustar 00000000000000# 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 music_compare_only_in_title_group = Jämför endast i titeln music_compare_only_in_title_group_tooltip = När den är aktiverad grupperas filerna efter titel och jämförs sedan med varandra. Med 10000 filer, i stället nästan 100 miljoner jämförelser brukar det finnas runt 20000 jämförelser. 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_use_rust_preview = Använd externa bibliotek istället gtk för att ladda förhandsvisningar settings_use_rust_preview_tooltip = Att använda gtk-förhandsvisningar kommer ibland att vara snabbare och stödja fler format, men ibland kan det vara precis tvärtom. Om du har problem med att ladda förhandsvisningar, kan du försöka ändra den här inställningen. PÃ¥ icke-Linux-system rekommenderas att använda detta alternativ, eftersom gtk-pixbuf inte alltid är tillgänglig där sÃ¥ inaktivera detta alternativ kommer inte att ladda förhandsvisningar av vissa bilder. 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 czkawka_gui-8.0.0/i18n/tr/czkawka_gui.ftl000064400000000000000000001016321046102023000163450ustar 00000000000000# 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 music_compare_only_in_title_group = Compare only in title music_compare_only_in_title_group_tooltip = When enabled, files are grouped by title and then compared to each other. With 10000 files, instead almost 100 million comparisons usually there will be around 20000 comparisons. same_music_tooltip = İçeriÄŸine göre benzer müzik dosyalarının aranması ayarlanarak yapılandırılabilir: - Müzik dosyalarının benzer olarak tanımlanabileceÄŸi minimum parça süresi - Test edilen iki parça arasındaki maksimum fark İyi sonuçlar elde etmenin anahtarı, bu parametrelerin mantıklı kombinasyonlarını bulmaktır. Minimum süreyi 5 saniye ve maksimum farkı 1.0 olarak ayarlamak, dosyalarda neredeyse aynı parçaları arayacaktır. Öte yandan, 20 saniyelik bir süre ve 6.0'lık bir maksimum fark, remiksleri / canlı sürümleri vb. bulmak için iyi çalışır. Varsayılan olarak, her müzik dosyası birbiriyle karşılaÅŸtırılır ve çok sayıda dosyayı test ederken bu çok zaman alabilir, bu nedenle genellikle referans klasörleri kullanmak ve hangi dosyaların birbiriyle karşılaÅŸtırılacağını belirtmek daha iyidir (aynı miktarda dosya ile, parmak izlerini karşılaÅŸtırmak referans klasörleri olmadan en az 4 kat daha hızlı olacaktır). 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 = Hash 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 = Kontrol edilen her resim, birbiriyle karşılaÅŸtırılabilen özel bir hash üretir ve aralarındaki küçük bir fark, bu görüntülerin benzer olduÄŸu anlamına gelir. 8 hash boyutu, orijinaline çok az benzeyen görüntüleri bulmak için oldukça iyidir. Daha büyük bir görüntü kümesinde (>1000), bu büyük miktarda yanlış pozitif üretecektir, bu nedenle bu durumda daha büyük bir karma boyutu kullanmanızı öneririm. 16 varsayılan hash boyutudur ve az da olsa benzer resimler bulmakla az miktarda hash çakışması olması arasında oldukça iyi bir uzlaÅŸmadır. 32 ve 64 hash'ler yalnızca çok benzer görüntüleri bulur, ancak neredeyse hiç piksel farkı olmamalıdır (belki alfa kanallı bazı görüntüler hariç). 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 = Sonuçlarda aynı boyutta olan dosyaları yoksay - genellikle bunlar bire bir kopyalardır 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 = Taramada göz ardı edilecek devre dışı bırakılmış dosyaların listesi. İzin verilen ve devre dışı bırakılan uzantılar kullanıldığında, bu daha yüksek önceliÄŸe sahiptir, bu nedenle dosya kontrol edilmeyecektir. 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 = Devre Dışı Uzantılar: # 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_use_rust_preview = Use external libraries instead gtk to load previews settings_use_rust_preview_tooltip = Using gtk previews will sometimes be faster and support more formats, but sometimes this could be exactly the opposite. If you have problems with loading previews, you may can to try to change this setting. On non-linux systems, it is recommended to use this option, because gtk-pixbuf are not always available there so disabling this option will not load previews of some images. 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 = Güncel olmayan girdileri önbellekten kaldır. ## 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 = Prehash önbelleÄŸi yükleniyor progress_prehash_cache_saving = Prehash önbelleÄŸi kaydediliyor progress_hash_cache_loading = Hash önbelleÄŸi yükleniyor progress_hash_cache_saving = Hash önbelleÄŸi kaydediliyor progress_cache_loading = Önbellek yükleniyor progress_cache_saving = Önbellek kaydediliyor 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 = Sonuçları hem txt hem de json formatında { $name } klasörüne kaydeder. 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 hash 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ı açı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 = -> czkawka_gui-8.0.0/i18n/uk/czkawka_gui.ftl000064400000000000000000001325151046102023000163430ustar 00000000000000# 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 = МакÑимальна Ñ€Ñ–Ð·Ð½Ð¸Ñ†Ñ music_compare_only_in_title_group = ПорівнÑти лише в заголовку music_compare_only_in_title_group_tooltip = When enabled, files are grouped by title and then compared to each other. With 10000 files, instead almost 100 million comparisons usually there will be around 20000 comparisons. same_music_tooltip = Пошук подібних музичних файлів за його вміÑтом може бути налаштований за налаштуваннÑм: - Мінімальний Ñ‡Ð°Ñ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ñƒ, піÑÐ»Ñ Ñкого музичні файли можна визначити Ñк Ñхожий - МакÑимальна Ñ€Ñ–Ð·Ð½Ð¸Ñ†Ñ Ð¼Ñ–Ð¶ двома теÑтовими фрагментами —Що ключові з хороших результатів - знайти розумні комбінації цих параметрів, за умов. Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¼Ñ–Ð½Ñ–Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ чаÑу на 5 Ñек Ñ– макÑимальна Ñ€Ñ–Ð·Ð½Ð¸Ñ†Ñ Ñкладає 1.0, буде шукати майже однакові фрагменти у файлах. Ð§Ð°Ñ 20 Ñ– макÑимальна Ñ€Ñ–Ð·Ð½Ð¸Ñ†Ñ Ð² 6.0, з іншого боку, добре працює Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ ремікÑикÑів/живу верÑÑ–Ñ— Ñ– Ñ‚. д. За замовчуваннÑм, кожен музичний файл порівнюєтьÑÑ Ð¾Ð´Ð¸Ð½ з одним, Ñ– це може зайнÑти багато чаÑу при теÑтуванні багатьох файлів, так що викориÑтовувати референтні папки Ñ– вказати, Ñкі файли Ñлід порівнювати один з одним (з тією ж кількіÑтю файлів, порівнÑÐ½Ð½Ñ Ð²Ñ–Ð´Ð±Ð¸Ñ‚ÐºÑ–Ð² пальців буде швидше 4x, ніж без Ñтандартних папок). music_comparison_checkbox_tooltip = Шукає Ñхожі музичні файли за допомогою ШІ, що викориÑтовує машинне Ð½Ð°Ð²Ñ‡Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð´ÑƒÐ¶Ð¾Ðº із фраз. Ðаприклад, Ñкщо Ñ†Ñ Ð¾Ð¿Ñ†Ñ–Ñ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð°, наÑтупні файли будуть вважатиÑÑ Ð´ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ‚Ð°Ð¼Ð¸: Åš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 можна викориÑтовувати один із трьох алгоритмів хешуваннÑ: Blake3 — криптографічна хеш-функціÑ. ВикориÑтовуєтьÑÑ Ð·Ð° замовчуваннÑм, оÑкільки дуже швидка. CRC32 — проÑта хеш-функціÑ. Ще швидше, ніж Blake3, але можливі рідкіÑні колізії хешів різних файлів. XXH3 — функціÑ, Ñхожа за продуктивніÑтю Ñ– надійніÑтю хеша на Blake3 (але вона не криптографічна), тому Ñ—Ñ— можна викориÑтовувати заміÑть Blake3. duplicate_check_method_tooltip = Ðа цей Ñ‡Ð°Ñ Czkawka пропонує три методи пошуку дублікатів: Ім'Ñ â€“ шукає файли з однаковими іменами. Розмір – шукає файли однакового розміру. Хеш – шукає файли з однаковим вміÑтом. Цей режим хешує файл, а потім порівнює хеш Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ дублікатів. Цей режим Ñ” найнадійнішим ÑпоÑобом пошуку. Додаток активно викориÑтовує кеш, тому друге та подальші ÑÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð´Ð½Ð¸Ñ… Ñ– тих же даних повинні бути набагато швидшими, ніж перше. image_hash_size_tooltip = Кожне перевірене Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð²Ð¸Ð´Ð°Ñ” Ñпеціальний хеш, Ñкий можна порівнювати один з одним, Ñ– невелика Ñ€Ñ–Ð·Ð½Ð¸Ñ†Ñ Ð¼Ñ–Ð¶ ними означає, що ці Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ” Ñхожими. 8 хешів дуже добре знайти зображеннÑ, Ñкі Ñ” трохи Ñхожими на оригінал. При великому наборі зображень (>1000) Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð°Ñ” велику кількіÑть хибних позитивних результатів, так що Ñ Ñ€ÐµÐºÐ¾Ð¼ÐµÐ½Ð´ÑƒÑŽ викориÑтовувати більший розмір хешу у цьому випадку. 16 - це хеш за замовчуваннÑм, Ñкий Ñ” доÑить хороший ÐºÐ¾Ð¼Ð¿Ñ€Ð¾Ð¼Ñ–Ñ Ð¼Ñ–Ð¶ пошуком навіть мало Ñхожих зображень Ñ– маючи тільки невелику кількіÑть хеш-зіткнень. 32 Ñ– 64 пеші знайдуть лише дуже Ñхожі зображеннÑ, але не повинні мати практично неправильних позитивних результатів (можливо, окрім деÑких зображень з альфа каналом). image_resize_filter_tooltip = Щоб обчиÑлити хеш зображеннÑ, бібліотека має Ñпочатку його перемаÑштабувати. Залежно від обраного алгоритму отримане зображеннÑ, Ñке викориÑтовуєтьÑÑ Ð¿Ñ€Ð¸ хешуванні, може виглÑдати трохи інакше. Ðайшвидший алгоритм з низькою ÑкіÑтю — це метод найближчого ÑуÑіда, Nearest. Він увімкнений за замовчуваннÑм, тому при розмірі хешу 16×16 погана ÑкіÑть не помітна. Якщо розмір хешу 8×8, рекомендуєтьÑÑ Ð±ÑƒÐ´ÑŒ-Ñкий алгоритм, крім Nearest, щоб краще відрізнÑти подібні Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð² групах. 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/roman;/home/rozkaz буде додано дві папки/home/roman and /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» — це означає, що будуть ÑкануватиÑÑ Ñ„Ð°Ð¹Ð»Ð¸ зображень (напр. 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 = Вибір запиÑів за допомогою регулÑрних виразів. У цьому режимі шуканий текÑÑ‚ Ñ” шлÑÑ… з ім'Ñм. Приклад: /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 = Створити Ñимвольні поÑиланнÑ. Працює лише тоді, коли вибрано не менше двох результатів у групі. Перший результат залишаєтьÑÑ, а другий та наÑтупні роблÑтьÑÑ Ñимвольними поÑиланнÑми на перший. 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_use_rust_preview = ВикориÑтовувати зовнішні бібліотеки gtk Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€ÐµÐ²'ÑŽ settings_use_rust_preview_tooltip = ВикориÑÑ‚Ð°Ð½Ð½Ñ gtk прев'ÑŽ іноді може бути швидшим Ñ– підтримувати більше форматів, але іноді це може бути зовÑім навпаки. Якщо у Ð²Ð°Ñ Ð²Ð¸Ð½Ð¸ÐºÐ»Ð¸ проблеми з завантаженнÑм превью, можна змінити цей параметр. У нелінійних ÑиÑтемах рекомендуєтьÑÑ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñтовувати цей параметр, тому, що gtk-pixbuf не завжди доÑтупні, тому Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ параметру не буде завантажувати попередній переглÑд деÑких зображень. 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 (читабельний). Його вміÑÑ‚ можна змінювати. Кеш із цього файлу буде автоматично прочитаний програмою, Ñкщо бінарний кеш (з розширеннÑм 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 = Видалити заÑтарілі результати з кешу. ## 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 = Відкрити папку, де зберігаютьÑÑ Ñ‚ÐµÐºÑтові файли кеша. Зміна файлів кешу може призвеÑти до Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¸Ñ… результатів, однак зміна шлÑху може заощадити чаÑ, коли переміщуєтьÑÑ Ð²ÐµÐ»Ð¸ÐºÐ° кількіÑть файлів в інше міÑце. Ви можете копіювати ці файли між комп'ютерами, щоб заощадити Ñ‡Ð°Ñ Ð½Ð° повторному Ñкануванні файлів (звичайно Ñкщо вони мають Ñхожу Ñтруктуру каталогів). У разі Ð²Ð¸Ð½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼ із кешем ці файли можна видалити. Програма автоматично переÑтворить Ñ—Ñ…. 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 = Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ†Ñ–Ð»ÑŒÐ¾Ð²Ð¾Ð³Ð¾ кешу 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, 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 = Можна вибрати лише один шлÑÑ… Ð´Ð»Ñ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð´ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ‚Ñ–Ð² файлів, але вибрано { $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 = L compare_move_right_button = R czkawka_gui-8.0.0/i18n/zh/czkawka_gui.ftl000064400000000000000000000706401046102023000163450ustar 00000000000000# 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 = 最大差异 music_compare_only_in_title_group = 仅在标题中比较 music_compare_only_in_title_group_tooltip = 如果å¯ç”¨ï¼Œæ–‡ä»¶æŒ‰æ ‡é¢˜åˆ†ç±»ï¼Œç„¶åŽç›¸äº’比较。 å¦‚æžœæœ‰ä¸€äº¿æ–‡ä»¶ï¼Œè€Œä¸æ˜¯å‡ ä¹Ž1亿文件的比较,通常就会有大约2000万份比较。 same_music_tooltip = 通过设置以下内容,å¯ä»¥é…置按其内容æœç´¢ç±»ä¼¼çš„éŸ³ä¹æ–‡ä»¶ï¼š - å¯ä»¥è¯†åˆ«éŸ³ä¹æ–‡ä»¶ä¸ºç±»ä¼¼æ–‡ä»¶çš„æœ€å°ç¢Žç‰‡æ—¶é—´ - 两个测试片段之间的最大差异度 æ‰¾åˆ°è¿™äº›å‚æ•°çš„åˆç†ç»„åˆæ˜¯èŽ·å¾—å¥½ç»“æžœçš„å…³é”®ã€‚ å°†æœ€å°æ—¶é—´è®¾ç½®ä¸º5秒,最大差异度设置为1.0,将寻找几乎相åŒçš„æ–‡ä»¶ç¢Žç‰‡ã€‚ å¦ä¸€æ–¹é¢ï¼Œ20秒的时间和6.0的最大差异度å¯ä»¥å¾ˆå¥½åœ°æ‰¾åˆ°æ··éŸ³/现场版本等内容。 默认情况下,æ¯ä¸ªéŸ³ä¹æ–‡ä»¶éƒ½ä¼šä¸Žå…¶ä»–éŸ³ä¹æ–‡ä»¶è¿›è¡Œæ¯”较,当测试许多文件时,这å¯èƒ½éœ€è¦å¾ˆé•¿æ—¶é—´ï¼Œå› æ­¤é€šå¸¸æœ€å¥½ä½¿ç”¨å‚考文件夹并指定è¦ç›¸äº’比较的文件(å¦‚æœ‰ç›¸åŒæ•°é‡çš„æ–‡ä»¶ï¼Œåˆ™æ¯”较指纹至少比ä¸ä½¿ç”¨å‚考文件夹快4å€)。 music_comparison_checkbox_tooltip = 它使用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ç§å“ˆå¸Œç±»åž‹ï¼š Blake3 - 加密散列函数。这是默认选项,因为它éžå¸¸å¿«ã€‚ CRC32 - 简å•的散列函数。这应该比Blake3更快,但æžå°‘情况下å¯èƒ½ä¼šæœ‰ä¸€äº›å†²çªã€‚ XXH3 - 与Blake3éžå¸¸ç›¸ä¼¼ï¼Œæ€§èƒ½å’Œå“ˆå¸Œè´¨é‡ä¹Ÿå¾ˆé«˜ï¼ˆä½†ä¸æ˜¯åŠ å¯†çš„ï¼‰ã€‚å› æ­¤ï¼Œè¿™äº›æ¨¡å¼å¯ä»¥å¾ˆå®¹æ˜“地互æ¢ä½¿ç”¨ã€‚ duplicate_check_method_tooltip = ç›®å‰ï¼ŒCzkawkaæä¾›ä¸‰ç§æ–¹æ³•æ¥æŸ¥æ‰¾é‡å¤ï¼š åç§° - 查找å称相åŒçš„æ–‡ä»¶ã€‚ å¤§å° - 查找大å°ç›¸åŒçš„æ–‡ä»¶ã€‚ 哈希 - 查找内容相åŒçš„æ–‡ä»¶ã€‚ è¿™ç§æ¨¡å¼ä¼šå¯¹æ–‡ä»¶è¿›è¡Œå“ˆå¸Œè®¡ç®—,然åŽå°†å“ˆå¸Œå€¼è¿›è¡Œæ¯”较以查找é‡å¤é¡¹ã€‚è¿™ç§æ¨¡å¼æ˜¯æŸ¥æ‰¾é‡å¤é¡¹çš„æœ€å®‰å…¨æ–¹æ³•。应用程åºå¤§é‡ä½¿ç”¨ç¼“å­˜ï¼Œå› æ­¤å¯¹ç›¸åŒæ•°æ®è¿›è¡Œçš„ç¬¬äºŒæ¬¡åŠæ›´å¤šæ¬¡æ‰«æåº”比第一次更快。 image_hash_size_tooltip = æ¯å¼ é€‰ä¸­çš„图åƒéƒ½äº§ç”Ÿäº†ä¸€ä¸ªå¯ç›¸äº’比较的特殊哈希。 两者之间的å°å·®åˆ«æ„味ç€è¿™äº›å›¾åƒæ˜¯ç›¸ä¼¼çš„。 8 散列尺寸éžå¸¸é€‚åˆäºŽæ‰¾åˆ°ä»…略类似于原始图åƒçš„图åƒã€‚ æœ‰äº†æ›´å¤§çš„ä¸€ç»„å›¾åƒ (>1000),这将产生大é‡è™šå‡çš„æ­£æ•°ï¼Œ æ‰€ä»¥æˆ‘å»ºè®®åœ¨è¿™ç§æƒ…况下使用更大的散列尺寸。 16是默认的散列尺寸,它是一个很好的折衷,既使找到了一些å°ç›¸ä¼¼çš„图åƒï¼Œåˆä»…有少é‡çš„æ•£åˆ—碰撞。 32å’Œ64 æ•£åˆ—åªæ‰¾åˆ°éžå¸¸ç›¸ä¼¼çš„图åƒï¼Œä½†æ˜¯å‡ ä¹Žä¸åº”è¯¥æœ‰å‡æ­£æ•° (å¯èƒ½åªæœ‰ä¸€äº›å¸¦ç€Alpha 通é“的图åƒ)。 image_resize_filter_tooltip = è¦è®¡ç®—å›¾åƒæ•£åˆ—,库必须首先调整大å°ã€‚ 在选定的算法上花费, 用æ¥è®¡ç®—散列的结果图åƒçœ‹èµ·æ¥æœ‰ç‚¹ä¸åŒã€‚ 最快使用的算法,也是结果最差的算法,是Nearest。 默认情况下å¯ç”¨å®ƒï¼Œå› ä¸º16x16散列大å°è¾ƒä½Žçš„è´¨é‡å¹¶ä¸çœŸæ­£å¯è§ã€‚ 使用 8x8 散列大å°ï¼Œå»ºè®®ä½¿ç”¨ä¸åŒäºŽNearestçš„ç®—æ³•æ¥æ‹¥æœ‰æ›´å¥½çš„图åƒç»„。 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/roman;/home/krokiet 将添加 /home/roman å’Œ /home/kookiet 两个目录 upper_add_included_button_tooltip = 添加新目录进行æœç´¢ã€‚ upper_remove_included_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 = å…许的文件扩展å必须用逗å·åˆ†éš”(默认情况下全部å¯ç”¨ï¼‰ã€‚ 还æä¾›ä»¥ä¸‹å¯åŒæ—¶æ·»åŠ å¤šä¸ªæ‰©å±•åçš„å®ï¼š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 = 按指定的正则表达å¼é€‰æ‹©è®°å½•。 使用此模å¼ï¼Œæœç´¢çš„æ–‡æœ¬æ˜¯å¸¦æœ‰å称的路径。 示例用法: å¯ä»¥ä½¿ç”¨ /ziem[a-z]+ 查找 /usr/bin/ziemniak.txt 这使用默认的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 = 创建软链接。 åªæœ‰åœ¨è‡³å°‘选择了一组中的两个结果时æ‰èµ·ä½œç”¨ã€‚ ç¬¬ä¸€ä¸ªç»“æžœä¿æŒä¸å˜ï¼Œç¬¬äºŒä¸ªåŠåŽç»­ç»“果都会被软链接到第一个结果上。 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_use_rust_preview = 使用外部库æ¥åŠ è½½é¢„è§ˆ settings_use_rust_preview_tooltip = 使用 gtk é¢„è§ˆæœ‰æ—¶ä¼šæ›´å¿«ï¼Œæ”¯æŒæ›´å¤šæ ¼å¼ï¼Œä½†æœ‰æ—¶æ°æ°ç›¸å。 如果您在加载预览时é‡åˆ°é—®é¢˜ï¼Œæ‚¨å¯ä»¥å°è¯•更改此设置。 关于éžLinux系统,建议使用此选项。 因为gtk-pixbuf 并䏿€»æ˜¯å¯ç”¨çš„,所以ç¦ç”¨æ­¤é€‰é¡¹ä¸ä¼šåŠ è½½æŸäº›å›¾åƒçš„预览。 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_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 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_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 = 从缓存中删除过时的结果。 ## Duplicates settings_duplicates_hide_hard_link_button_tooltip = éšè—除一个以外的所有文件,如果所有文件都指å‘åŒä¸€æ•°æ®ï¼ˆå³ä¸ºç¡¬é“¾æŽ¥ï¼‰ã€‚ 例如,在ç£ç›˜ä¸Šæœ‰ä¸ƒä¸ªæ–‡ä»¶éƒ½ç¡¬é“¾æŽ¥åˆ°ç‰¹å®šæ•°æ®ï¼Œå¹¶ä¸”还有一个ä¸åŒçš„æ–‡ä»¶ï¼Œå…¶æ•°æ®ç›¸åŒï¼Œä½†ç´¢å¼•节点ä¸åŒï¼Œé‚£ä¹ˆåœ¨é‡å¤æ–‡ä»¶æŸ¥æ‰¾å™¨ä¸­ï¼Œåªä¼šæ˜¾ç¤ºä¸€ä¸ªå”¯ä¸€çš„æ–‡ä»¶å’Œä¸€ä¸ªç¡¬é“¾æŽ¥æ–‡ä»¶ã€‚ settings_duplicates_minimal_size_entry_tooltip = è®¾ç½®å°†è¢«ç¼“å­˜çš„æœ€å°æ–‡ä»¶å¤§å°ã€‚ 选择较å°çš„å€¼å°†ä¼šç”Ÿæˆæ›´å¤šçš„记录。这将加快æœç´¢é€Ÿåº¦ï¼Œä½†ä¼šå‡æ…¢ç¼“存的加载/ä¿å­˜é€Ÿåº¦ã€‚ settings_duplicates_prehash_checkbutton_tooltip = å¯ç”¨é¢„散列缓存(从文件的一å°éƒ¨åˆ†è®¡ç®—出的哈希),以便更早地排除éžé‡å¤ç»“果。 默认情况下ç¦ç”¨å®ƒï¼Œå› ä¸ºåœ¨æŸäº›æƒ…况下å¯èƒ½ä¼šå¯¼è‡´å‡æ…¢é€Ÿåº¦ã€‚ å¼ºçƒˆå»ºè®®åœ¨æ‰«ææ•°å万或100万个文件时使用它,因为它å¯ä»¥å°†æœç´¢åŠ é€Ÿå¤šå€ã€‚ 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_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 = 正在比较 { $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, 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 = æœ¬ç¨‹åºæ°¸ä¹…å…费。 # 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 = 在æŸäº›ç»„中,åªé€‰æ‹©äº†ä¸€ä¸ªè®°å½•,它将被忽略。 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 = L compare_move_right_button = R czkawka_gui-8.0.0/i18n.toml000064400000000000000000000007111046102023000136030ustar 00000000000000# (Required) The language identifier of the language used in the # source code for gettext system, and the primary fallback language # (for which all strings must be present) when using the fluent # system. fallback_language = "en" # Use the fluent localization system. [fluent] # (Required) The path to the assets directory. # The paths inside the assets directory should be structured like so: # `assets_dir/{language}/{domain}.ftl` assets_dir = "i18n" czkawka_gui-8.0.0/icons/icon_about.png000064400000000000000000000105521046102023000160760ustar 00000000000000‰PNG  IHDR\r¨f„iCCPICC profile(‘}‘=HÃ@Å_[K‹´8ØAÄ!Cu²"*â¨U(B…P+´ê`ré4iHR\ׂƒ‹Ug]\AðÄÍÍIÑEJü_RhãÁq?ÞÝ{ܽüÍ*SÍžq@Õ,#“J ¹üªzEaDŘÄL}NÓð_÷ðñõ.Á³¼Ïý9¢JÁd€O žeºaoOoZ:ç}â+K ñ9ñ¨A$~äºìòç’Ã~ž3²™yâ±Pêb¹‹YÙP‰§ˆãŠªQ¾?ç²Ây‹³Z­³ö=ù #me™ë4‡Â"– B€Œ:*¨ÂB‚VÚOzø¿H.™\0r, ’ãÿƒßÝšÅÉ 7)’‚/¶ý1 „vVö¿m»už+­ã¯5™OÒ-~ôm×MÞ.w€']2$G Ðô‹Àû}Sè¿z×ÜÞÚû8}²ÔUú88FJ”½îñîpwoÿži÷÷>Lr’èj&bKGDùC» pHYs × ×B(›xtIMEå /»An½gIDATxÚíÝÏ“ÛfÇñï#Ùòz³¿Ê¤ÌN6Ùü(IÓZÚLJù•)™¡=ÐCÀL0üèüp`¦Ìpƒ ‡r‡ áÃC-!PzhBÚl›6Þµ „6$Ý–léá°¶#˲l¯W–d½_d»²å}¬ç£ïóè±"ö¢ Ò©^¯ŸÐ®û5­õ—EÉ1Y‘"-íƒ[ï¿røðÑÏÒ@&ݺuk©T,þX”|ODLZd47nÔ¤4S¾°²räqZƒÈØYÿöÇ<×ü³ˆ¬Ò{‘ÒLéÕ••£OÐ"Ñ š vvvŽ{®ù2Øuû3×_¥%€ÔÓZÚu_‘C´ÆþqlûñZmý¯´jÛÛÛß%_ %bVí윩V+¡%€Ôžý•Ò? %âÔÏÖ6*i  }çÖÖ“¢å~Z"æJÀ®?VÛ¨0 ÒÅ3äIZab!p¦V­ü– R4P,Z™dÔëÖ6Ö©I.ûM¼Øy¬¶Qù;-A¤ÁAš ‘áÀ§k×_#´2MTØä=ä>ª×ÿ‘×ߟÏ$l{kSóø‹/dê÷=sæl¬Ïßþ,À¨J¥Òë‡VVUJyT@ÎØ¶ýpm£ò†ÖÚ €<†€c?X«­ç*ÀõúƒµjåR^B€z‡ÔjùBZ_ØÚÚÚB±¨WšMc–C“¯ìjÕÊe­õǧyb°¢_2•÷U¥Ô3Z伈ž÷\#_“²HW%pºŸPJ¹@L®][{N´÷‚ˆ:ª9¤µþ¤Rª9m¿_¢ëÖÖÖJ†¡¥D¾‘×ly™›í§½®¤T*¿yhåðÔ…@b“—/_¶ Ã{)ÏYªvN×6*—´Ö`ÌÌ¡DãÐBfBÀ±ïo  ÀÞ{û­§”ÈóRÈàœÀýÕë—§%&ZkÃ3ÔO8”UŽãœªU§#&ï½ýöçEËÃFÈv%àœªU×3ÏÐÏpø`:B ~ªºQùg–C`â „{àaš†öÉ,‡@/Z¯pØìŸ¬Ý`¸ïWük£ò–Öú´RªAí^º-¦MݱOÔvC H¤®ê@^(•ÜâVÛ±·BÀ"€$h#ÙCÚvìãÕëkï¾ûî L˜iš)˜pV­¢qEk]"€ ²¬tô9Û¶U«ëWÓ^ ˜*33ééoŽ]_µ êÍ4W¦J¡P”R)=!`;ÎÑêF%µs™Ÿ‘¯T*™z½««ûûOfñºyÜæçÄqlÑ:·—qûH©4ó–Öú”Rʦb­ 2¿°˜ª×dÛõÕ4V¦ÒlyVæ̧ê59Ž}Ä*WÓ4'@`jÍÍÏËââR¢‹ƒzçì#ÕêúÚúúz™bV.ÏÊÁƒ•òìôTvýˆïjB€e¹˜z¦iÊâ¢ÌÏ͉]¯‹íØâºžxž+ž—Ìmç çpÑ*]JúDrÃ0L)ÏHS5pbsssIDn2@0ªý¾®ž5¾E<¥ÄU"ž(ñ”ˆ+"žjÿ}÷OOZÛøÿ¾×í•Od¨íù£ezYðb*€ŒóZQK»ó‰èv%ºõÿ<ÕÚ¦Õau§ãîa{¹ÛÑm”‹h‚ŒŸAüÑíŽéïવ¿Ãîuû° Ùb­¼½½¿Ãîiû>ØCe8sØctJî~ggé*ïµo{íë°Zù·aûÎ>·$é{æý³TY?}ø:¿ö•ã]º”—K Ìô†¼Lb¼ ¤4«”W{Û>,@P þ¤×3 ¢ÏÎaÛ‡ȨۇÒû$lyùÐx@§\÷—ß2øì¶}X€Œº} @À±ügê°Ëagç>Û‡ȨÛû çDßø;쀳sßíÃd¤íïÄZ$¿Ú/jýÒ=`À4 $ÙÕ~Q—ឆTØ!€$·ÚOû~\€tWÀTI¯ö‹ P Ö ùÕ~QÛ#ݸÀ4U ­ö‹ÚÑîa€q éÕ~QÛƒ!&0Hrµ_Ôö 0‘!@r«ý¢¶Ç 7ÐcÆ8~R°Ú/jûA’¾À¸²¾Ž ëC€¬öë ßöà “€³Hzµ_h€pC*Lf`R«ý¼>«ý´/pºïNÄû“v™ŸøÃwÞè¤í/­Ú´êÜï¾óóÀ¶^§| lúØÀ÷þɯ>ýÍï‰y0¹Õ~z7Å ÷2»(Õúò_;Õ÷} ³jiԭǶrñ}¯Zß‹ïûö.ØùƒûÀZø4¬ö‹ZO†ñ€¯ãÔ™»Îðáצ vü`èôÛÏ$0éÕ~Që 0Ô[HŒ5Žè̃ÏâÞm=ßÁÞ}ÆïÞwØ~&3 ˜ìj¿¨õ``2@Ÿ3¾ç»®íEtæèj!¤©6zæ&ðûû§Ç3ýþq?†cŸ½Çíaå{Xéß/4zJÿ¾g@0ˆ¹õÚ³þÁɾ!;oç,>|h v´÷Ím±Aû`´ò}pç½{y¯ÿdßpÌ‚ƒˆ{R¾Rú÷+ߣ&ûü¡1hØ0ˆ»t>oÈ™ûa/FñÍTqψáZ½¯óF\ûï ¾\¶o€ Î!@ Vûu®…Kïc4Ëþ:€¬ö‹Z0·¬ž>ë¸@ *€¤WûE…À ÎÖKÁj¿~¡Á¨&ŸI¯öë7ÑÈ:±’_í5Ñ0ˆ»dWûu‡PwHT1Ï$½Ú/|ßT ˆ ɯöóߊ,x¹H³)¹@²«ýºnE¸7`Üø<=ò]¤`µ_Ô¾†±¶^ò«ýº†þ[‘1*€ $ÙÕ~Q † Î!€$¿Ú/jØ0ˆ»Hxµ_Ô° ˆ9>“^í5gPÄ9HÁj¿Î‚¡ÐÒl⧨kï\¥_ø,/¢r¬<{ÀPJ%Ö'ø×$ÏÀ v~È9ȱM-7nÔFÚ~Ô9†¸ŸöÀÜPóNÛ[›:KÏ»×ç§@ 00¼J¥’é×Ï:P `e~Àêê*ï"@€@ÈÁ’uñâ €ÀÀDäí~£þ¾q??¨Ì ø,€9Æ Ùü}ÓS  Ó¸@²~?Ö P ˜@:pß~P ¦e€ûDãº>¨Ó2Æô @ äc k÷`L*sù4êçõó2‡ÕûdíuS ˜È®«T€¡¨IïðÚ;W5Íž_'î;¥’ÜÿöÖæHÇßì95ÍïÀ Wø,r…+‘ €IÓš @¹€F£A«ç”çy4BÞ ÙhÒê9å6]!ï°¹µI«çTݱi„¼Àí;·iõ¼@½N#ä=¶·¶¥ns äö´ÔwxßÓfâë´Öòþß—••Z?GlÇ×M~à‹ç¾¤x7¬DD¶¶¶äÃMæòBJlÛË€@Û­>à’`^@ÌÝ5à÷¿Û· iïüêî!f¬;#º'¤^¯ïŽ 99LÏõ¤Ñt¥}Ë -"¦iÒ0)“Ši­ÅÓž¸MW”Rbš¦(Å\Mæ:½ç‰ã8» ~”«Tê,ÿ5 ƒ÷”ˆæº®4›Í݃ÈuÅóÜ}6ŸK÷ùapͺîWžt=¦7ÔîGtÿçëÙWŸçîy­ý¿ ¾ÈÈöÔ€­Îl†LS”1Í‚‹E±,K,ËÑZ´Ö¢”˲ø,0ZUÐh4÷uýø02ªƒ 1=fè×6p_Â-¢£¶;tg išb‹R,ZbºóPÝêü""sss²½½MÉÊ0gº¡;ؘ!ëkë·]Ï_4Q¯C:½{ŸZ‹(Ã……±,KšÍ&@¤2ÆzÌ^ê¡Ó·#ë±_[¿Î¯ † %¥”ÌΖeqqQ,ËÛ¶Åó<æy €ätM@…ŒeƒÛi‰¸eò€^¡ÇøùHãð>¿Ã¨á6ΙÙ4ÍΘ¿PØÿÏÎÎJ¹\Ã0Äu]©×뢵ƒI@ uaÐo›è'àÈ €bq÷Ïöå>×ue{{§3S(PpÈÛ¶¥Ùt¥P(ˆRJ´Èî•éú_öîרUð¼{­1’ºÖîyž4›ÍÖY{·2ð­( â¹Ü †HQ§Oú²ÞЉxܰ¿Søþ‚4pƯgd¦XVQŠ­Kíu¦iv­(—Ëbó1ðÔIb)p*î 5ö%ºIÆ_ØWðr`çz½ï¿ž ‚_þ}¶þŸݹì×þ3¸Ï¹¹9–ÒöfÒgÿ<¯è»(¤£‡}6Ì:€R©ÔþÑ6].ç En¤l\0Öc¦q@Xhôÿê¿àž¥¥àÄßût¹œÏh‘×EäS¯) { let combo_box_image_hash_size = gui_data.main_notebook.combo_box_image_hash_size.clone(); let buttons_search = gui_data.bottom_buttons.buttons_search.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let entry_info = gui_data.entry_info.clone(); let tree_view_empty_folder_finder = gui_data.main_notebook.tree_view_empty_folder_finder.clone(); let tree_view_empty_files_finder = gui_data.main_notebook.tree_view_empty_files_finder.clone(); let tree_view_duplicate_finder = gui_data.main_notebook.tree_view_duplicate_finder.clone(); let tree_view_similar_images_finder = gui_data.main_notebook.tree_view_similar_images_finder.clone(); let tree_view_similar_videos_finder = gui_data.main_notebook.tree_view_similar_videos_finder.clone(); let buttons_array = gui_data.bottom_buttons.buttons_array.clone(); let text_view_errors = gui_data.text_view_errors.clone(); let shared_duplication_state = gui_data.shared_duplication_state.clone(); let shared_buttons = gui_data.shared_buttons.clone(); let shared_empty_folders_state = gui_data.shared_empty_folders_state.clone(); let shared_empty_files_state = gui_data.shared_empty_files_state.clone(); let shared_broken_files_state = gui_data.shared_broken_files_state.clone(); let tree_view_big_files_finder = gui_data.main_notebook.tree_view_big_files_finder.clone(); let tree_view_broken_files = gui_data.main_notebook.tree_view_broken_files.clone(); let tree_view_invalid_symlinks = gui_data.main_notebook.tree_view_invalid_symlinks.clone(); let shared_big_files_state = gui_data.shared_big_files_state.clone(); let shared_same_invalid_symlinks = gui_data.shared_same_invalid_symlinks.clone(); let tree_view_temporary_files_finder = gui_data.main_notebook.tree_view_temporary_files_finder.clone(); let tree_view_bad_extensions = gui_data.main_notebook.tree_view_bad_extensions.clone(); let shared_temporary_files_state = gui_data.shared_temporary_files_state.clone(); let shared_similar_images_state = gui_data.shared_similar_images_state.clone(); let shared_similar_videos_state = gui_data.shared_similar_videos_state.clone(); let shared_bad_extensions_state = gui_data.shared_bad_extensions_state.clone(); let tree_view_same_music_finder = gui_data.main_notebook.tree_view_same_music_finder.clone(); let shared_same_music_state = gui_data.shared_same_music_state.clone(); let buttons_names = gui_data.bottom_buttons.buttons_names; let window_progress = gui_data.progress_window.window_progress.clone(); let taskbar_state = gui_data.taskbar_state.clone(); let notebook_upper = gui_data.upper_notebook.notebook_upper.clone(); let button_settings = gui_data.header.button_settings.clone(); let button_app_info = gui_data.header.button_app_info.clone(); let main_context = glib::MainContext::default(); let _guard = main_context.acquire().expect("Failed to acquire main context"); glib::spawn_future_local(async move { loop { loop { let msg = result_receiver.try_recv(); if let Ok(msg) = msg { buttons_search.show(); notebook_main.set_sensitive(true); notebook_upper.set_sensitive(true); button_settings.set_sensitive(true); button_app_info.set_sensitive(true); window_progress.hide(); taskbar_state.borrow().hide(); let hash_size_index = combo_box_image_hash_size.active().expect("Failed to get active item") as usize; let hash_size = IMAGES_HASH_SIZE_COMBO_BOX[hash_size_index] as u8; match msg { Message::Duplicates(df) => { compute_duplicate_finder( df, &entry_info, &tree_view_duplicate_finder, &text_view_errors, &shared_duplication_state, &shared_buttons, &buttons_array, &buttons_names, ); } Message::EmptyFolders(ef) => { compute_empty_folders( ef, &entry_info, &tree_view_empty_folder_finder, &text_view_errors, &shared_empty_folders_state, &shared_buttons, &buttons_array, &buttons_names, ); } Message::EmptyFiles(vf) => { compute_empty_files( vf, &entry_info, &tree_view_empty_files_finder, &text_view_errors, &shared_empty_files_state, &shared_buttons, &buttons_array, &buttons_names, ); } Message::BigFiles(bf) => { compute_big_files( bf, &entry_info, &tree_view_big_files_finder, &text_view_errors, &shared_big_files_state, &shared_buttons, &buttons_array, &buttons_names, ); } Message::Temporary(tf) => { compute_temporary_files( tf, &entry_info, &tree_view_temporary_files_finder, &text_view_errors, &shared_temporary_files_state, &shared_buttons, &buttons_array, &buttons_names, ); } Message::SimilarImages(sf) => { compute_similar_images( sf, &entry_info, &tree_view_similar_images_finder, &text_view_errors, &shared_similar_images_state, &shared_buttons, &buttons_array, &buttons_names, hash_size, ); } Message::SimilarVideos(ff) => { compute_similar_videos( ff, &entry_info, &tree_view_similar_videos_finder, &text_view_errors, &shared_similar_videos_state, &shared_buttons, &buttons_array, &buttons_names, ); } Message::SameMusic(mf) => { compute_same_music( mf, &entry_info, &tree_view_same_music_finder, &text_view_errors, &shared_same_music_state, &shared_buttons, &buttons_array, &buttons_names, ); } Message::InvalidSymlinks(ifs) => { compute_invalid_symlinks( ifs, &entry_info, &tree_view_invalid_symlinks, &text_view_errors, &shared_same_invalid_symlinks, &shared_buttons, &buttons_array, &buttons_names, ); } Message::BrokenFiles(br) => { compute_broken_files( br, &entry_info, &tree_view_broken_files, &text_view_errors, &shared_broken_files_state, &shared_buttons, &buttons_array, &buttons_names, ); } Message::BadExtensions(be) => { compute_bad_extensions( be, &entry_info, &tree_view_bad_extensions, &text_view_errors, &shared_bad_extensions_state, &shared_buttons, &buttons_array, &buttons_names, ); } } } else { break; } } glib::timeout_future(Duration::from_millis(300)).await; } }); } #[fun_time(message = "compute_bad_extensions", level = "debug")] fn compute_bad_extensions( be: BadExtensions, entry_info: &Entry, tree_view: &TreeView, text_view_errors: &TextView, shared_state: &SharedState, shared_buttons: &Rc>>>, buttons_array: &[Widget; 9], buttons_names: &[BottomButtonsEnum; 9], ) { const COLUMNS_NUMBER: usize = 7; if be.get_stopped_search() { entry_info.set_text(&flg!("compute_stopped_by_user")); } else { let information = be.get_information(); let text_messages = be.get_text_messages(); let bad_extensions_number: usize = information.number_of_files_with_bad_extension; entry_info.set_text(flg!("compute_found_bad_extensions", number_files = bad_extensions_number).as_str()); // Create GUI { let list_store = get_list_store(tree_view); let vector = be.get_bad_extensions_files(); // Sort let mut vector = vector.clone(); vector.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path())); for file_entry in vector { let (directory, file) = split_path(&file_entry.path); let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ (ColumnsBadExtensions::SelectionButton as u32, &false), (ColumnsBadExtensions::Name as u32, &file), (ColumnsBadExtensions::Path as u32, &directory), (ColumnsBadExtensions::CurrentExtension as u32, &file_entry.current_extension), (ColumnsBadExtensions::ValidExtensions as u32, &file_entry.proper_extensions_group), ( ColumnsBadExtensions::Modification as u32, &(DateTime::from_timestamp(file_entry.modified_date as i64, 0) .expect("Modified date always should be in valid range") .to_string()), ), (ColumnsBadExtensions::ModificationAsSecs as u32, &(file_entry.modified_date as i64)), ]; list_store.set(&list_store.append(), &values); } print_text_messages_to_text_view(text_messages, text_view_errors); } // Set state { *shared_state.borrow_mut() = Some(be); set_specific_buttons_as_active(shared_buttons, NotebookMainEnum::Temporary, bad_extensions_number > 0); set_buttons( &mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Temporary).expect("Failed to borrow buttons"), buttons_array, buttons_names, ); } } } #[fun_time(message = "compute_broken_files", level = "debug")] fn compute_broken_files( br: BrokenFiles, entry_info: &Entry, tree_view: &TreeView, text_view_errors: &TextView, shared_state: &SharedState, shared_buttons: &Rc>>>, buttons_array: &[Widget; 9], buttons_names: &[BottomButtonsEnum; 9], ) { const COLUMNS_NUMBER: usize = 6; if br.get_stopped_search() { entry_info.set_text(&flg!("compute_stopped_by_user")); } else { let information = br.get_information(); let text_messages = br.get_text_messages(); let broken_files_number: usize = information.number_of_broken_files; entry_info.set_text(flg!("compute_found_broken_files", number_files = broken_files_number).as_str()); // Create GUI { let list_store = get_list_store(tree_view); let vector = br.get_broken_files(); // Sort let mut vector = vector.clone(); vector.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path())); for file_entry in vector { let (directory, file) = split_path(&file_entry.path); let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ (ColumnsBrokenFiles::SelectionButton as u32, &false), (ColumnsBrokenFiles::Name as u32, &file), (ColumnsBrokenFiles::Path as u32, &directory), (ColumnsBrokenFiles::ErrorType as u32, &file_entry.error_string), ( ColumnsBrokenFiles::Modification as u32, &(DateTime::from_timestamp(file_entry.modified_date as i64, 0) .expect("Modified date always should be in valid range") .to_string()), ), (ColumnsBrokenFiles::ModificationAsSecs as u32, &(file_entry.modified_date as i64)), ]; list_store.set(&list_store.append(), &values); } print_text_messages_to_text_view(text_messages, text_view_errors); } // Set state { *shared_state.borrow_mut() = Some(br); set_specific_buttons_as_active(shared_buttons, NotebookMainEnum::BrokenFiles, broken_files_number > 0); set_buttons( &mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::BrokenFiles).expect("Failed to borrow buttons"), buttons_array, buttons_names, ); } } } #[fun_time(message = "compute_invalid_symlinks", level = "debug")] fn compute_invalid_symlinks( ifs: InvalidSymlinks, entry_info: &Entry, tree_view: &TreeView, text_view_errors: &TextView, shared_state: &SharedState, shared_buttons: &Rc>>>, buttons_array: &[Widget; 9], buttons_names: &[BottomButtonsEnum; 9], ) { const COLUMNS_NUMBER: usize = 7; if ifs.get_stopped_search() { entry_info.set_text(&flg!("compute_stopped_by_user")); } else { let information = ifs.get_information(); let text_messages = ifs.get_text_messages(); let invalid_symlinks: usize = information.number_of_invalid_symlinks; entry_info.set_text(flg!("compute_found_invalid_symlinks", number_files = invalid_symlinks).as_str()); // Create GUI { let list_store = get_list_store(tree_view); let vector = vector_sort_simple_unstable_entry_by_path(ifs.get_invalid_symlinks()); for file_entry in vector { let (directory, file) = split_path(&file_entry.path); let symlink_info = file_entry.symlink_info; let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ (ColumnsInvalidSymlinks::SelectionButton as u32, &false), (ColumnsInvalidSymlinks::Name as u32, &file), (ColumnsInvalidSymlinks::Path as u32, &directory), (ColumnsInvalidSymlinks::DestinationPath as u32, &symlink_info.destination_path.to_string_lossy().to_string()), (ColumnsInvalidSymlinks::TypeOfError as u32, &get_text_from_invalid_symlink_cause(symlink_info.type_of_error)), ( ColumnsInvalidSymlinks::Modification as u32, &(DateTime::from_timestamp(file_entry.modified_date as i64, 0) .expect("Modified date always should be in valid range") .to_string()), ), (ColumnsInvalidSymlinks::ModificationAsSecs as u32, &(file_entry.modified_date as i64)), ]; list_store.set(&list_store.append(), &values); } print_text_messages_to_text_view(text_messages, text_view_errors); } // Set state { *shared_state.borrow_mut() = Some(ifs); set_specific_buttons_as_active(shared_buttons, NotebookMainEnum::Symlinks, invalid_symlinks > 0); set_buttons( &mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Symlinks).expect("Failed to borrow buttons"), buttons_array, buttons_names, ); } } } #[fun_time(message = "compute_same_music", level = "debug")] fn compute_same_music( mf: SameMusic, entry_info: &Entry, tree_view: &TreeView, text_view_errors: &TextView, shared_state: &SharedState, shared_buttons: &Rc>>>, buttons_array: &[Widget; 9], buttons_names: &[BottomButtonsEnum; 9], ) { if mf.get_stopped_search() { entry_info.set_text(&flg!("compute_stopped_by_user")); } else { if mf.get_use_reference() { tree_view.selection().set_select_function(select_function_always_true); } else { tree_view.selection().set_select_function(select_function_same_music); } let information = mf.get_information(); let text_messages = mf.get_text_messages(); let same_music_number: usize = information.number_of_duplicates; entry_info.set_text( flg!( "compute_found_music", number_files = information.number_of_duplicates, number_groups = information.number_of_groups ) .as_str(), ); // Create GUI { let list_store = get_list_store(tree_view); let music_similarity = mf.get_params().music_similarity; let is_track_title = (MusicSimilarity::TRACK_TITLE & music_similarity) != MusicSimilarity::NONE; let is_track_artist = (MusicSimilarity::TRACK_ARTIST & music_similarity) != MusicSimilarity::NONE; let is_year = (MusicSimilarity::YEAR & music_similarity) != MusicSimilarity::NONE; let is_bitrate = (MusicSimilarity::BITRATE & music_similarity) != MusicSimilarity::NONE; let is_length = (MusicSimilarity::LENGTH & music_similarity) != MusicSimilarity::NONE; let is_genre = (MusicSimilarity::GENRE & music_similarity) != MusicSimilarity::NONE; if mf.get_use_reference() { let vector = mf.get_similar_music_referenced(); for (base_file_entry, vec_file_entry) in vector { // Sort let vec_file_entry = if vec_file_entry.len() >= 2 { let mut vec_file_entry = vec_file_entry.clone(); vec_file_entry.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path())); vec_file_entry } else { vec_file_entry.clone() }; let (directory, file) = split_path(&base_file_entry.path); same_music_add_to_list_store( &list_store, &file, &directory, base_file_entry.size, base_file_entry.modified_date, &base_file_entry.track_title, &base_file_entry.track_artist, &base_file_entry.year, base_file_entry.bitrate, &format!("{} kbps", base_file_entry.bitrate), &base_file_entry.genre, &base_file_entry.length, true, true, ); for file_entry in vec_file_entry { let (directory, file) = split_path(&file_entry.path); same_music_add_to_list_store( &list_store, &file, &directory, file_entry.size, file_entry.modified_date, &file_entry.track_title, &file_entry.track_artist, &file_entry.year, file_entry.bitrate, &format!("{} kbps", file_entry.bitrate), &file_entry.genre, &file_entry.length, false, true, ); } } } else { let vector = mf.get_duplicated_music_entries(); let text: &str = if mf.get_params().check_type == CheckingMethod::AudioTags { "-----" } else { "" }; for vec_file_entry in vector { // Sort let vec_file_entry = if vec_file_entry.len() >= 2 { let mut vec_file_entry = vec_file_entry.clone(); vec_file_entry.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path())); vec_file_entry } else { vec_file_entry.clone() }; same_music_add_to_list_store( &list_store, "", "", 0, 0, if is_track_title { text } else { "" }, if is_track_artist { text } else { "" }, if is_year { text } else { "" }, 0, if is_bitrate { text } else { "" }, if is_genre { text } else { "" }, if is_length { text } else { "" }, true, false, ); for file_entry in vec_file_entry { let (directory, file) = split_path(&file_entry.path); same_music_add_to_list_store( &list_store, &file, &directory, file_entry.size, file_entry.modified_date, &file_entry.track_title, &file_entry.track_artist, &file_entry.year, file_entry.bitrate, &format!("{} kbps", file_entry.bitrate), &file_entry.genre, &file_entry.length, false, false, ); } } } print_text_messages_to_text_view(text_messages, text_view_errors); } // Set state { *shared_state.borrow_mut() = Some(mf); set_specific_buttons_as_active(shared_buttons, NotebookMainEnum::SameMusic, same_music_number > 0); set_buttons( &mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SameMusic).expect("Failed to borrow buttons"), buttons_array, buttons_names, ); } } } #[fun_time(message = "compute_similar_videos", level = "debug")] fn compute_similar_videos( ff: SimilarVideos, entry_info: &Entry, tree_view: &TreeView, text_view_errors: &TextView, shared_state: &SharedState, shared_buttons: &Rc>>>, buttons_array: &[Widget; 9], buttons_names: &[BottomButtonsEnum; 9], ) { if ff.get_stopped_search() { entry_info.set_text(&flg!("compute_stopped_by_user")); } else { if ff.get_use_reference() { tree_view.selection().set_select_function(select_function_always_true); } else { tree_view.selection().set_select_function(select_function_similar_videos); } let information = ff.get_information(); let text_messages = ff.get_text_messages(); let found_any_duplicates = information.number_of_duplicates > 0; entry_info.set_text( flg!( "compute_found_videos", number_files = information.number_of_duplicates, number_groups = information.number_of_groups ) .as_str(), ); // Create GUI { let list_store = get_list_store(tree_view); if ff.get_use_reference() { let vec_struct_similar = ff.get_similar_videos_referenced(); for (base_file_entry, vec_file_entry) in vec_struct_similar { // Sort let vec_file_entry = if vec_file_entry.len() >= 2 { let mut vec_file_entry = vec_file_entry.clone(); vec_file_entry.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path())); vec_file_entry } else { vec_file_entry.clone() }; similar_videos_add_to_list_store(&list_store, "", "", base_file_entry.size, base_file_entry.modified_date, true, true); for file_entry in &vec_file_entry { let (directory, file) = split_path(&file_entry.path); similar_videos_add_to_list_store(&list_store, &file, &directory, file_entry.size, file_entry.modified_date, false, true); } } } else { let vec_struct_similar = ff.get_similar_videos(); for vec_file_entry in vec_struct_similar { // Sort let vec_file_entry = if vec_file_entry.len() >= 2 { let mut vec_file_entry = vec_file_entry.clone(); vec_file_entry.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path())); vec_file_entry } else { vec_file_entry.clone() }; similar_videos_add_to_list_store(&list_store, "", "", 0, 0, true, false); for file_entry in &vec_file_entry { let (directory, file) = split_path(&file_entry.path); similar_videos_add_to_list_store(&list_store, &file, &directory, file_entry.size, file_entry.modified_date, false, false); } } } print_text_messages_to_text_view(text_messages, text_view_errors); } // Set state { *shared_state.borrow_mut() = Some(ff); set_specific_buttons_as_active(shared_buttons, NotebookMainEnum::SimilarVideos, found_any_duplicates); set_buttons( &mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SimilarVideos).expect("Failed to borrow buttons"), buttons_array, buttons_names, ); } } } #[fun_time(message = "compute_similar_images", level = "debug")] fn compute_similar_images( sf: SimilarImages, entry_info: &Entry, tree_view: &TreeView, text_view_errors: &TextView, shared_state: &SharedState, shared_buttons: &Rc>>>, buttons_array: &[Widget; 9], buttons_names: &[BottomButtonsEnum; 9], hash_size: u8, ) { if sf.get_stopped_search() { entry_info.set_text(&flg!("compute_stopped_by_user")); } else { if sf.get_use_reference() { tree_view.selection().set_select_function(select_function_always_true); } else { tree_view.selection().set_select_function(select_function_similar_images); } let information = sf.get_information(); let text_messages = sf.get_text_messages(); let found_any_duplicates = information.number_of_duplicates > 0; entry_info.set_text( flg!( "compute_found_images", number_files = information.number_of_duplicates, number_groups = information.number_of_groups ) .as_str(), ); // Create GUI { let list_store = get_list_store(tree_view); if sf.get_use_reference() { let vec_struct_similar: &Vec<(ImagesEntry, Vec)> = sf.get_similar_images_referenced(); for (base_file_entry, vec_file_entry) in vec_struct_similar { // Sort let vec_file_entry = if vec_file_entry.len() >= 2 { let mut vec_file_entry = vec_file_entry.clone(); // Use comparison by similarity, because it is more important that path here vec_file_entry.par_sort_unstable_by_key(|e| e.similarity); vec_file_entry } else { vec_file_entry.clone() }; // Header let (directory, file) = split_path(&base_file_entry.path); similar_images_add_to_list_store( &list_store, &file, &directory, base_file_entry.size, base_file_entry.modified_date, &format!("{}x{}", base_file_entry.width, base_file_entry.height), 0, hash_size, true, true, ); for file_entry in &vec_file_entry { let (directory, file) = split_path(&file_entry.path); similar_images_add_to_list_store( &list_store, &file, &directory, file_entry.size, file_entry.modified_date, &format!("{}x{}", file_entry.width, file_entry.height), file_entry.similarity, hash_size, false, true, ); } } } else { let vec_struct_similar = sf.get_similar_images(); for vec_file_entry in vec_struct_similar { // Sort let vec_file_entry = if vec_file_entry.len() >= 2 { let mut vec_file_entry = vec_file_entry.clone(); // Use comparison by similarity, because it is more important that path here vec_file_entry.par_sort_unstable_by_key(|e| e.similarity); vec_file_entry } else { vec_file_entry.clone() }; similar_images_add_to_list_store(&list_store, "", "", 0, 0, "", 0, 0, true, false); for file_entry in &vec_file_entry { let (directory, file) = split_path(&file_entry.path); similar_images_add_to_list_store( &list_store, &file, &directory, file_entry.size, file_entry.modified_date, &format!("{}x{}", file_entry.width, file_entry.height), file_entry.similarity, hash_size, false, false, ); } } } print_text_messages_to_text_view(text_messages, text_view_errors); } // Set state { *shared_state.borrow_mut() = Some(sf); set_specific_buttons_as_active(shared_buttons, NotebookMainEnum::SimilarImages, found_any_duplicates); set_buttons( &mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SimilarImages).expect("Failed to borrow buttons"), buttons_array, buttons_names, ); } } } #[fun_time(message = "compute_temporary_files", level = "debug")] fn compute_temporary_files( tf: Temporary, entry_info: &Entry, tree_view: &TreeView, text_view_errors: &TextView, shared_state: &SharedState, shared_buttons: &Rc>>>, buttons_array: &[Widget; 9], buttons_names: &[BottomButtonsEnum; 9], ) { const COLUMNS_NUMBER: usize = 5; if tf.get_stopped_search() { entry_info.set_text(&flg!("compute_stopped_by_user")); } else { let information = tf.get_information(); let text_messages = tf.get_text_messages(); let temporary_files_number: usize = information.number_of_temporary_files; entry_info.set_text(flg!("compute_found_temporary_files", number_files = temporary_files_number).as_str()); // Create GUI { let list_store = get_list_store(tree_view); let vector = tf.get_temporary_files(); // Sort // TODO maybe simplify this via common file entry let mut vector = vector.clone(); vector.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path())); for file_entry in vector { let (directory, file) = split_path(&file_entry.path); let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ (ColumnsTemporaryFiles::SelectionButton as u32, &false), (ColumnsTemporaryFiles::Name as u32, &file), (ColumnsTemporaryFiles::Path as u32, &directory), ( ColumnsTemporaryFiles::Modification as u32, &(DateTime::from_timestamp(file_entry.modified_date as i64, 0) .expect("Modified date always should be in valid range") .to_string()), ), (ColumnsTemporaryFiles::ModificationAsSecs as u32, &(file_entry.modified_date as i64)), ]; list_store.set(&list_store.append(), &values); } print_text_messages_to_text_view(text_messages, text_view_errors); } // Set state { *shared_state.borrow_mut() = Some(tf); set_specific_buttons_as_active(shared_buttons, NotebookMainEnum::Temporary, temporary_files_number > 0); set_buttons( &mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Temporary).expect("Failed to borrow buttons"), buttons_array, buttons_names, ); } } } #[fun_time(message = "compute_big_files", level = "debug")] fn compute_big_files( bf: BigFile, entry_info: &Entry, tree_view: &TreeView, text_view_errors: &TextView, shared_state: &SharedState, shared_buttons: &Rc>>>, buttons_array: &[Widget; 9], buttons_names: &[BottomButtonsEnum; 9], ) { const COLUMNS_NUMBER: usize = 7; if bf.get_stopped_search() { entry_info.set_text(&flg!("compute_stopped_by_user")); } else { let information = bf.get_information(); let text_messages = bf.get_text_messages(); let biggest_files_number: usize = information.number_of_real_files; entry_info.set_text(flg!("compute_found_big_files", number_files = biggest_files_number).as_str()); // Create GUI { let list_store = get_list_store(tree_view); let vector = bf.get_big_files(); for file_entry in vector { let (directory, file) = split_path(&file_entry.path); let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ (ColumnsBigFiles::SelectionButton as u32, &false), (ColumnsBigFiles::Size as u32, &(format_size(file_entry.size, BINARY))), (ColumnsBigFiles::Name as u32, &file), (ColumnsBigFiles::Path as u32, &directory), ( ColumnsBigFiles::Modification as u32, &(DateTime::from_timestamp(file_entry.modified_date as i64, 0) .expect("Modified date always should be in valid range") .to_string()), ), (ColumnsBigFiles::ModificationAsSecs as u32, &(file_entry.modified_date as i64)), (ColumnsBigFiles::SizeAsBytes as u32, &(file_entry.size)), ]; list_store.set(&list_store.append(), &values); } print_text_messages_to_text_view(text_messages, text_view_errors); } // Set state { *shared_state.borrow_mut() = Some(bf); set_specific_buttons_as_active(shared_buttons, NotebookMainEnum::BigFiles, biggest_files_number > 0); set_buttons( &mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::BigFiles).expect("Failed to borrow buttons"), buttons_array, buttons_names, ); } } } #[fun_time(message = "compute_empty_files", level = "debug")] fn compute_empty_files( vf: EmptyFiles, entry_info: &Entry, tree_view: &TreeView, text_view_errors: &TextView, shared_state: &SharedState, shared_buttons: &Rc>>>, buttons_array: &[Widget; 9], buttons_names: &[BottomButtonsEnum; 9], ) { const COLUMNS_NUMBER: usize = 5; if vf.get_stopped_search() { entry_info.set_text(&flg!("compute_stopped_by_user")); } else { let information = vf.get_information(); let text_messages = vf.get_text_messages(); let empty_files_number: usize = information.number_of_empty_files; entry_info.set_text(flg!("compute_found_empty_files", number_files = empty_files_number).as_str()); // Create GUI { let list_store = get_list_store(tree_view); let vector = vf.get_empty_files(); let vector = vector_sort_simple_unstable_entry_by_path(vector); for file_entry in vector { let (directory, file) = split_path(&file_entry.path); let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ (ColumnsEmptyFiles::SelectionButton as u32, &false), (ColumnsEmptyFiles::Name as u32, &file), (ColumnsEmptyFiles::Path as u32, &directory), ( ColumnsEmptyFiles::Modification as u32, &(DateTime::from_timestamp(file_entry.modified_date as i64, 0) .expect("Modified date always should be in valid range") .to_string()), ), (ColumnsEmptyFiles::ModificationAsSecs as u32, &(file_entry.modified_date as i64)), ]; list_store.set(&list_store.append(), &values); } print_text_messages_to_text_view(text_messages, text_view_errors); } // Set state { *shared_state.borrow_mut() = Some(vf); set_specific_buttons_as_active(shared_buttons, NotebookMainEnum::EmptyFiles, empty_files_number > 0); set_buttons( &mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::EmptyFiles).expect("Failed to borrow buttons"), buttons_array, buttons_names, ); } } } #[fun_time(message = "compute_empty_folders", level = "debug")] fn compute_empty_folders( ef: EmptyFolder, entry_info: &Entry, tree_view: &TreeView, text_view_errors: &TextView, shared_state: &SharedState, shared_buttons: &Rc>>>, buttons_array: &[Widget; 9], buttons_names: &[BottomButtonsEnum; 9], ) { const COLUMNS_NUMBER: usize = 5; if ef.get_stopped_search() { entry_info.set_text(&flg!("compute_stopped_by_user")); } else { let information = ef.get_information(); let text_messages = ef.get_text_messages(); let empty_folder_number: usize = information.number_of_empty_folders; entry_info.set_text(flg!("compute_found_empty_folders", number_files = empty_folder_number).as_str()); // Create GUI { let list_store = get_list_store(tree_view); let hashmap = ef.get_empty_folder_list(); let mut vector = hashmap.values().collect::>(); vector.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path())); for fe in vector { let (directory, file) = split_path(&fe.path); let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ (ColumnsEmptyFolders::SelectionButton as u32, &false), (ColumnsEmptyFolders::Name as u32, &file), (ColumnsEmptyFolders::Path as u32, &directory), ( ColumnsEmptyFolders::Modification as u32, &(DateTime::from_timestamp(fe.modified_date as i64, 0) .expect("Modified date always should be in valid range") .to_string()), ), (ColumnsEmptyFolders::ModificationAsSecs as u32, &(fe.modified_date)), ]; list_store.set(&list_store.append(), &values); } print_text_messages_to_text_view(text_messages, text_view_errors); } // Set state { *shared_state.borrow_mut() = Some(ef); set_specific_buttons_as_active(shared_buttons, NotebookMainEnum::EmptyDirectories, empty_folder_number > 0); set_buttons( &mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::EmptyDirectories).expect("Failed to borrow buttons"), buttons_array, buttons_names, ); } } } #[fun_time(message = "compute_duplicate_finder", level = "debug")] fn compute_duplicate_finder( df: DuplicateFinder, entry_info: &Entry, tree_view_duplicate_finder: &TreeView, text_view_errors: &TextView, shared_state: &SharedState, shared_buttons: &Rc>>>, buttons_array: &[Widget; 9], buttons_names: &[BottomButtonsEnum; 9], ) { if df.get_stopped_search() { entry_info.set_text(&flg!("compute_stopped_by_user")); } else { if df.get_use_reference() { tree_view_duplicate_finder.selection().set_select_function(select_function_always_true); } else { tree_view_duplicate_finder.selection().set_select_function(select_function_duplicates); } let information = df.get_information(); let text_messages = df.get_text_messages(); let duplicates_number: usize; let duplicates_size: u64; let duplicates_group: usize; match df.get_params().check_method { CheckingMethod::Name => { duplicates_number = information.number_of_duplicated_files_by_name; duplicates_size = 0; duplicates_group = information.number_of_groups_by_name; } CheckingMethod::Hash => { duplicates_number = information.number_of_duplicated_files_by_hash; duplicates_size = information.lost_space_by_hash; duplicates_group = information.number_of_groups_by_hash; } CheckingMethod::Size => { duplicates_number = information.number_of_duplicated_files_by_size; duplicates_size = information.lost_space_by_size; duplicates_group = information.number_of_groups_by_size; } CheckingMethod::SizeName => { duplicates_number = information.number_of_duplicated_files_by_size_name; duplicates_size = information.lost_space_by_size; duplicates_group = information.number_of_groups_by_size_name; } _ => panic!(), } if duplicates_size == 0 { entry_info.set_text(flg!("compute_found_duplicates_name", number_files = duplicates_number, number_groups = duplicates_group).as_str()); } else { entry_info.set_text( flg!( "compute_found_duplicates_hash_size", number_files = duplicates_number, number_groups = duplicates_group, size = format_size(duplicates_size, BINARY) ) .as_str(), ); } // Create GUI { let list_store = get_list_store(tree_view_duplicate_finder); if df.get_use_reference() { match df.get_params().check_method { CheckingMethod::Name => { let btreemap = df.get_files_with_identical_name_referenced(); for (_name, (base_file_entry, vector)) in btreemap.iter().rev() { let vector = vector_sort_unstable_entry_by_path(vector); let (directory, file) = split_path(&base_file_entry.path); duplicates_add_to_list_store(&list_store, &file, &directory, base_file_entry.size, base_file_entry.modified_date, true, true); for entry in vector { let (directory, file) = split_path(&entry.path); duplicates_add_to_list_store(&list_store, &file, &directory, entry.size, entry.modified_date, false, true); } } } CheckingMethod::Hash => { let btreemap = df.get_files_with_identical_hashes_referenced(); for (_size, vectors_vector) in btreemap.iter().rev() { for (base_file_entry, vector) in vectors_vector { let vector = vector_sort_unstable_entry_by_path(vector); let (directory, file) = split_path(&base_file_entry.path); duplicates_add_to_list_store(&list_store, &file, &directory, base_file_entry.size, base_file_entry.modified_date, true, true); for entry in vector { let (directory, file) = split_path(&entry.path); duplicates_add_to_list_store(&list_store, &file, &directory, entry.size, entry.modified_date, false, true); } } } } CheckingMethod::Size => { let btreemap = df.get_files_with_identical_size_referenced(); for (_size, (base_file_entry, vector)) in btreemap.iter().rev() { let vector = vector_sort_unstable_entry_by_path(vector); let (directory, file) = split_path(&base_file_entry.path); duplicates_add_to_list_store(&list_store, &file, &directory, base_file_entry.size, base_file_entry.modified_date, true, true); for entry in vector { let (directory, file) = split_path(&entry.path); duplicates_add_to_list_store(&list_store, &file, &directory, entry.size, entry.modified_date, false, true); } } } CheckingMethod::SizeName => { let btreemap = df.get_files_with_identical_size_names_referenced(); for (_size, (base_file_entry, vector)) in btreemap.iter().rev() { let vector = vector_sort_unstable_entry_by_path(vector); let (directory, file) = split_path(&base_file_entry.path); duplicates_add_to_list_store(&list_store, &file, &directory, base_file_entry.size, base_file_entry.modified_date, true, true); for entry in vector { let (directory, file) = split_path(&entry.path); duplicates_add_to_list_store(&list_store, &file, &directory, entry.size, entry.modified_date, false, true); } } } _ => panic!(), } } else { match df.get_params().check_method { CheckingMethod::Name => { let btreemap = df.get_files_sorted_by_names(); for (_name, vector) in btreemap.iter().rev() { let vector = vector_sort_unstable_entry_by_path(vector); duplicates_add_to_list_store(&list_store, "", "", 0, 0, true, false); for entry in vector { let (directory, file) = split_path(&entry.path); duplicates_add_to_list_store(&list_store, &file, &directory, entry.size, entry.modified_date, false, false); } } } CheckingMethod::Hash => { let btreemap = df.get_files_sorted_by_hash(); for (_size, vectors_vector) in btreemap.iter().rev() { for vector in vectors_vector { let vector = vector_sort_unstable_entry_by_path(vector); duplicates_add_to_list_store(&list_store, "", "", 0, 0, true, false); for entry in vector { let (directory, file) = split_path(&entry.path); duplicates_add_to_list_store(&list_store, &file, &directory, entry.size, entry.modified_date, false, false); } } } } CheckingMethod::Size => { let btreemap = df.get_files_sorted_by_size(); for (_size, vector) in btreemap.iter().rev() { let vector = vector_sort_unstable_entry_by_path(vector); duplicates_add_to_list_store(&list_store, "", "", 0, 0, true, false); for entry in vector { let (directory, file) = split_path(&entry.path); duplicates_add_to_list_store(&list_store, &file, &directory, entry.size, entry.modified_date, false, false); } } } CheckingMethod::SizeName => { let btreemap = df.get_files_sorted_by_size_name(); for (_size, vector) in btreemap.iter().rev() { let vector = vector_sort_unstable_entry_by_path(vector); duplicates_add_to_list_store(&list_store, "", "", 0, 0, true, false); for entry in vector { let (directory, file) = split_path(&entry.path); duplicates_add_to_list_store(&list_store, &file, &directory, entry.size, entry.modified_date, false, false); } } } _ => panic!(), } } print_text_messages_to_text_view(text_messages, text_view_errors); } // Set state { *shared_state.borrow_mut() = Some(df); set_specific_buttons_as_active(shared_buttons, NotebookMainEnum::Duplicate, duplicates_number > 0); set_buttons( &mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Duplicate).expect("Failed to borrow buttons"), buttons_array, buttons_names, ); } } } fn vector_sort_unstable_entry_by_path(vector: &[T]) -> Vec where T: ResultEntry + Clone, T: Send, { if vector.len() >= 2 { let mut vector = vector.to_vec(); vector.par_sort_unstable_by(|a, b| split_path_compare(a.get_path(), b.get_path())); vector } else { vector.to_vec() } } fn vector_sort_simple_unstable_entry_by_path(vector: &[T]) -> Vec where T: ResultEntry + Clone, T: Send, { let mut vector = vector.to_vec(); vector.par_sort_unstable_by(|a, b| split_path_compare(a.get_path(), b.get_path())); vector } fn duplicates_add_to_list_store(list_store: &ListStore, file: &str, directory: &str, size: u64, modified_date: u64, is_header: bool, is_reference_folder: bool) { const COLUMNS_NUMBER: usize = 11; let size_str; let string_date; let color = if is_header { HEADER_ROW_COLOR } else { MAIN_ROW_COLOR }; if is_header && !is_reference_folder { size_str = String::new(); string_date = String::new(); } else { size_str = format_size(size, BINARY); string_date = DateTime::from_timestamp(modified_date as i64, 0) .expect("Modified date always should be in valid range") .to_string(); }; let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ (ColumnsDuplicates::ActivatableSelectButton as u32, &(!is_header)), (ColumnsDuplicates::SelectionButton as u32, &false), (ColumnsDuplicates::Size as u32, &size_str), (ColumnsDuplicates::SizeAsBytes as u32, &size), (ColumnsDuplicates::Name as u32, &file), (ColumnsDuplicates::Path as u32, &directory), (ColumnsDuplicates::Modification as u32, &string_date), (ColumnsDuplicates::ModificationAsSecs as u32, &modified_date), (ColumnsDuplicates::Color as u32, &color), (ColumnsDuplicates::IsHeader as u32, &is_header), (ColumnsDuplicates::TextColor as u32, &TEXT_COLOR), ]; list_store.set(&list_store.append(), &values); } fn similar_images_add_to_list_store( list_store: &ListStore, file: &str, directory: &str, size: u64, modified_date: u64, dimensions: &str, similarity: u32, hash_size: u8, is_header: bool, is_reference_folder: bool, ) { const COLUMNS_NUMBER: usize = 13; let size_str; let string_date; let similarity_string; let color = if is_header { HEADER_ROW_COLOR } else { MAIN_ROW_COLOR }; if is_header { similarity_string = String::new(); } else { similarity_string = similar_images::get_string_from_similarity(&similarity, hash_size); }; if is_header && !is_reference_folder { size_str = String::new(); string_date = String::new(); } else { size_str = format_size(size, BINARY); string_date = DateTime::from_timestamp(modified_date as i64, 0) .expect("Modified date always should be in valid range") .to_string(); } let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ (ColumnsSimilarImages::ActivatableSelectButton as u32, &(!is_header)), (ColumnsSimilarImages::SelectionButton as u32, &false), (ColumnsSimilarImages::Similarity as u32, &similarity_string), (ColumnsSimilarImages::Size as u32, &size_str), (ColumnsSimilarImages::SizeAsBytes as u32, &size), (ColumnsSimilarImages::Dimensions as u32, &dimensions), (ColumnsSimilarImages::Name as u32, &file), (ColumnsSimilarImages::Path as u32, &directory), (ColumnsSimilarImages::Modification as u32, &string_date), (ColumnsSimilarImages::ModificationAsSecs as u32, &modified_date), (ColumnsSimilarImages::Color as u32, &color), (ColumnsSimilarImages::IsHeader as u32, &is_header), (ColumnsSimilarImages::TextColor as u32, &TEXT_COLOR), ]; list_store.set(&list_store.append(), &values); } fn similar_videos_add_to_list_store(list_store: &ListStore, file: &str, directory: &str, size: u64, modified_date: u64, is_header: bool, is_reference_folder: bool) { const COLUMNS_NUMBER: usize = 11; let size_str; let string_date; let color = if is_header { HEADER_ROW_COLOR } else { MAIN_ROW_COLOR }; if is_header && !is_reference_folder { size_str = String::new(); string_date = String::new(); } else { size_str = format_size(size, BINARY); string_date = DateTime::from_timestamp(modified_date as i64, 0) .expect("Modified date always should be in valid range") .to_string(); }; let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ (ColumnsSimilarVideos::ActivatableSelectButton as u32, &(!is_header)), (ColumnsSimilarVideos::SelectionButton as u32, &false), (ColumnsSimilarVideos::Size as u32, &size_str), (ColumnsSimilarVideos::SizeAsBytes as u32, &size), (ColumnsSimilarVideos::Name as u32, &file), (ColumnsSimilarVideos::Path as u32, &directory), (ColumnsSimilarVideos::Modification as u32, &string_date), (ColumnsSimilarVideos::ModificationAsSecs as u32, &modified_date), (ColumnsSimilarVideos::Color as u32, &color), (ColumnsSimilarVideos::IsHeader as u32, &is_header), (ColumnsSimilarVideos::TextColor as u32, &TEXT_COLOR), ]; list_store.set(&list_store.append(), &values); } fn same_music_add_to_list_store( list_store: &ListStore, file: &str, directory: &str, size: u64, modified_date: u64, track_title: &str, track_artist: &str, track_year: &str, track_bitrate: u32, bitrate_string: &str, track_genre: &str, track_length: &str, is_header: bool, is_reference_folder: bool, ) { const COLUMNS_NUMBER: usize = 18; let size_str; let string_date; let color = if is_header { HEADER_ROW_COLOR } else { MAIN_ROW_COLOR }; if is_header && !is_reference_folder { size_str = String::new(); string_date = String::new(); } else { size_str = format_size(size, BINARY); string_date = DateTime::from_timestamp(modified_date as i64, 0) .expect("Modified date always should be in valid range") .to_string(); }; let values: [(u32, &dyn ToValue); COLUMNS_NUMBER] = [ (ColumnsSameMusic::ActivatableSelectButton as u32, &(!is_header)), (ColumnsSameMusic::SelectionButton as u32, &false), (ColumnsSameMusic::Size as u32, &size_str), (ColumnsSameMusic::SizeAsBytes as u32, &size), (ColumnsSameMusic::Name as u32, &file), (ColumnsSameMusic::Path as u32, &directory), (ColumnsSameMusic::Title as u32, &track_title), (ColumnsSameMusic::Artist as u32, &track_artist), (ColumnsSameMusic::Year as u32, &track_year), (ColumnsSameMusic::Genre as u32, &track_genre), (ColumnsSameMusic::Bitrate as u32, &bitrate_string), (ColumnsSameMusic::BitrateAsNumber as u32, &track_bitrate), (ColumnsSameMusic::Length as u32, &track_length), (ColumnsSameMusic::Modification as u32, &string_date), (ColumnsSameMusic::ModificationAsSecs as u32, &modified_date), (ColumnsSameMusic::Color as u32, &color), (ColumnsSameMusic::IsHeader as u32, &is_header), (ColumnsSameMusic::TextColor as u32, &TEXT_COLOR), ]; list_store.set(&list_store.append(), &values); } fn set_specific_buttons_as_active(buttons_array: &Rc>>>, notebook_enum: NotebookMainEnum, value_to_set: bool) { let mut b_mut = buttons_array.borrow_mut(); let butt = b_mut.get_mut(¬ebook_enum).expect("Failed to borrow buttons"); let allowed_buttons = NOTEBOOKS_INFO[notebook_enum as usize].bottom_buttons; for i in allowed_buttons { *butt.get_mut(i).expect("Failed to borrow buttons") = value_to_set; } } czkawka_gui-8.0.0/src/connect_things/connect_about_buttons.rs000064400000000000000000000027761046102023000227070ustar 00000000000000use gtk4::prelude::*; use crate::gui_structs::gui_data::GuiData; const SPONSOR_SITE: &str = "https://github.com/sponsors/qarmin"; const REPOSITORY_SITE: &str = "https://github.com/qarmin/czkawka"; const INSTRUCTION_SITE: &str = "https://github.com/qarmin/czkawka/blob/master/instructions/Instruction.md"; const TRANSLATION_SITE: &str = "https://crwd.in/czkawka"; pub fn connect_about_buttons(gui_data: &GuiData) { let button_donation = gui_data.about.button_donation.clone(); button_donation.connect_clicked(move |_| { if let Err(e) = open::that(SPONSOR_SITE) { println!("Failed to open sponsor site: {SPONSOR_SITE}, reason {e}"); }; }); let button_instruction = gui_data.about.button_instruction.clone(); button_instruction.connect_clicked(move |_| { if let Err(e) = open::that(INSTRUCTION_SITE) { println!("Failed to open instruction site: {INSTRUCTION_SITE}, reason {e}"); }; }); let button_repository = gui_data.about.button_repository.clone(); button_repository.connect_clicked(move |_| { if let Err(e) = open::that(REPOSITORY_SITE) { println!("Failed to open repository site: {REPOSITORY_SITE}, reason {e}"); }; }); let button_translation = gui_data.about.button_translation.clone(); button_translation.connect_clicked(move |_| { if let Err(e) = open::that(TRANSLATION_SITE) { println!("Failed to open repository site: {TRANSLATION_SITE}, reason {e}"); }; }); } czkawka_gui-8.0.0/src/connect_things/connect_button_compare.rs000064400000000000000000000713731046102023000230370ustar 00000000000000use std::cell::RefCell; use std::rc::Rc; use czkawka_core::common_image::get_dynamic_image_from_path; use gdk4::gdk_pixbuf::{InterpType, Pixbuf}; use gtk4::prelude::*; use gtk4::{Align, CheckButton, Image, ListStore, Orientation, ScrolledWindow, TreeIter, TreeModel, TreePath, TreeSelection, Widget}; use image::DynamicImage; use crate::flg; use crate::gui_structs::gui_data::GuiData; use crate::help_functions::{ count_number_of_groups, get_all_direct_children, get_full_name_from_path_name, get_max_file_name, get_pixbuf_from_dynamic_image, resize_pixbuf_dimension, }; use crate::notebook_info::{NotebookObject, NOTEBOOKS_INFO}; const BIG_PREVIEW_SIZE: i32 = 600; const SMALL_PREVIEW_SIZE: i32 = 130; pub fn connect_button_compare(gui_data: &GuiData) { let button_compare = gui_data.bottom_buttons.buttons_compare.clone(); let window_compare = gui_data.compare_images.window_compare.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); let scrolled_window_compare_choose_images = gui_data.compare_images.scrolled_window_compare_choose_images.clone(); let label_group_info = gui_data.compare_images.label_group_info.clone(); let button_go_previous_compare_group = gui_data.compare_images.button_go_previous_compare_group.clone(); let button_go_next_compare_group = gui_data.compare_images.button_go_next_compare_group.clone(); let check_button_left_preview_text = gui_data.compare_images.check_button_left_preview_text.clone(); let check_button_right_preview_text = gui_data.compare_images.check_button_right_preview_text.clone(); let shared_numbers_of_groups = gui_data.compare_images.shared_numbers_of_groups.clone(); let shared_current_of_groups = gui_data.compare_images.shared_current_of_groups.clone(); let shared_current_path = gui_data.compare_images.shared_current_path.clone(); let shared_image_cache = gui_data.compare_images.shared_image_cache.clone(); let shared_using_for_preview = gui_data.compare_images.shared_using_for_preview.clone(); let image_compare_left = gui_data.compare_images.image_compare_left.clone(); let image_compare_right = gui_data.compare_images.image_compare_right.clone(); let check_button_settings_use_rust_preview = gui_data.settings.check_button_settings_use_rust_preview.clone(); window_compare.set_default_size(700, 700); button_compare.connect_clicked(move |_| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; let model = tree_view.model().expect("Missing tree_view model"); let group_number = count_number_of_groups(tree_view, nb_object.column_header.expect("Missing column_header")); if group_number == 0 { return; } // Check selected items let (current_group, tree_path) = get_current_group_and_iter_from_selection(&model, &tree_view.selection(), nb_object.column_header.expect("Missing column_header")); *shared_current_of_groups.borrow_mut() = current_group; *shared_numbers_of_groups.borrow_mut() = group_number; populate_groups_at_start( nb_object, &model, &shared_current_path, tree_path, &image_compare_left, &image_compare_right, current_group, group_number, &check_button_left_preview_text, &check_button_right_preview_text, &scrolled_window_compare_choose_images, &label_group_info, &shared_image_cache, &shared_using_for_preview, &button_go_previous_compare_group, &button_go_next_compare_group, &check_button_settings_use_rust_preview, ); window_compare.show(); }); let shared_image_cache = gui_data.compare_images.shared_image_cache.clone(); let shared_current_path = gui_data.compare_images.shared_current_path.clone(); let shared_using_for_preview = gui_data.compare_images.shared_using_for_preview.clone(); let shared_current_of_groups = gui_data.compare_images.shared_current_of_groups.clone(); let shared_numbers_of_groups = gui_data.compare_images.shared_numbers_of_groups.clone(); let window_compare = gui_data.compare_images.window_compare.clone(); let image_compare_left = gui_data.compare_images.image_compare_left.clone(); let image_compare_right = gui_data.compare_images.image_compare_right.clone(); window_compare.connect_close_request(move |window_compare| { window_compare.hide(); *shared_image_cache.borrow_mut() = Vec::new(); *shared_current_path.borrow_mut() = None; *shared_current_of_groups.borrow_mut() = 0; *shared_numbers_of_groups.borrow_mut() = 0; *shared_using_for_preview.borrow_mut() = (None, None); image_compare_left.set_from_pixbuf(None); image_compare_right.set_from_pixbuf(None); glib::Propagation::Stop }); let button_go_previous_compare_group = gui_data.compare_images.button_go_previous_compare_group.clone(); let button_go_next_compare_group = gui_data.compare_images.button_go_next_compare_group.clone(); let label_group_info = gui_data.compare_images.label_group_info.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); let scrolled_window_compare_choose_images = gui_data.compare_images.scrolled_window_compare_choose_images.clone(); let check_button_left_preview_text = gui_data.compare_images.check_button_left_preview_text.clone(); let check_button_right_preview_text = gui_data.compare_images.check_button_right_preview_text.clone(); let shared_current_of_groups = gui_data.compare_images.shared_current_of_groups.clone(); let shared_numbers_of_groups = gui_data.compare_images.shared_numbers_of_groups.clone(); let shared_current_path = gui_data.compare_images.shared_current_path.clone(); let shared_image_cache = gui_data.compare_images.shared_image_cache.clone(); let shared_using_for_preview = gui_data.compare_images.shared_using_for_preview.clone(); let image_compare_left = gui_data.compare_images.image_compare_left.clone(); let image_compare_right = gui_data.compare_images.image_compare_right.clone(); let check_button_settings_use_rust_preview = gui_data.settings.check_button_settings_use_rust_preview.clone(); button_go_previous_compare_group.connect_clicked(move |button_go_previous_compare_group| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; let model = tree_view.model().expect("Missing tree_view model"); *shared_current_of_groups.borrow_mut() -= 1; let current_group = *shared_current_of_groups.borrow(); let group_number = *shared_numbers_of_groups.borrow(); let tree_path = move_iter( &model, shared_current_path.borrow().as_ref().expect("Missing current path"), nb_object.column_header.expect("Missing column_header"), false, ); populate_groups_at_start( nb_object, &model, &shared_current_path, tree_path, &image_compare_left, &image_compare_right, current_group, group_number, &check_button_left_preview_text, &check_button_right_preview_text, &scrolled_window_compare_choose_images, &label_group_info, &shared_image_cache, &shared_using_for_preview, button_go_previous_compare_group, &button_go_next_compare_group, &check_button_settings_use_rust_preview, ); }); let button_go_previous_compare_group = gui_data.compare_images.button_go_previous_compare_group.clone(); let button_go_next_compare_group = gui_data.compare_images.button_go_next_compare_group.clone(); let label_group_info = gui_data.compare_images.label_group_info.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); let scrolled_window_compare_choose_images = gui_data.compare_images.scrolled_window_compare_choose_images.clone(); let check_button_left_preview_text = gui_data.compare_images.check_button_left_preview_text.clone(); let check_button_right_preview_text = gui_data.compare_images.check_button_right_preview_text.clone(); let shared_current_of_groups = gui_data.compare_images.shared_current_of_groups.clone(); let shared_numbers_of_groups = gui_data.compare_images.shared_numbers_of_groups.clone(); let shared_current_path = gui_data.compare_images.shared_current_path.clone(); let shared_image_cache = gui_data.compare_images.shared_image_cache.clone(); let shared_using_for_preview = gui_data.compare_images.shared_using_for_preview.clone(); let image_compare_left = gui_data.compare_images.image_compare_left.clone(); let image_compare_right = gui_data.compare_images.image_compare_right.clone(); let check_button_settings_use_rust_preview = gui_data.settings.check_button_settings_use_rust_preview.clone(); button_go_next_compare_group.connect_clicked(move |button_go_next_compare_group| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; let model = tree_view.model().expect("Missing tree_view model"); *shared_current_of_groups.borrow_mut() += 1; let current_group = *shared_current_of_groups.borrow(); let group_number = *shared_numbers_of_groups.borrow(); let tree_path = move_iter( &model, shared_current_path.borrow().as_ref().expect("Missing current path"), nb_object.column_header.expect("Missing column_header"), true, ); populate_groups_at_start( nb_object, &model, &shared_current_path, tree_path, &image_compare_left, &image_compare_right, current_group, group_number, &check_button_left_preview_text, &check_button_right_preview_text, &scrolled_window_compare_choose_images, &label_group_info, &shared_image_cache, &shared_using_for_preview, &button_go_previous_compare_group, button_go_next_compare_group, &check_button_settings_use_rust_preview, ); }); let check_button_left_preview_text = gui_data.compare_images.check_button_left_preview_text.clone(); let shared_using_for_preview = gui_data.compare_images.shared_using_for_preview.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let shared_current_path = gui_data.compare_images.shared_current_path.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); check_button_left_preview_text.connect_toggled(move |check_button_left_preview_text| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; let model = tree_view .model() .expect("Missing tree_view model") .downcast::() .expect("Failed to downcast to ListStore"); let main_tree_path = shared_current_path.borrow().as_ref().expect("Missing current path").clone(); let this_tree_path = shared_using_for_preview.borrow().0.clone().expect("Missing left preview path"); if main_tree_path == this_tree_path { return; // Selected header, so we don't need to select result in treeview // TODO this should be handled by disabling entirely check box } let is_active = check_button_left_preview_text.is_active(); model.set_value( &model.iter(&this_tree_path).expect("Using invalid tree_path"), nb_object.column_selection as u32, &is_active.to_value(), ); }); let check_button_right_preview_text = gui_data.compare_images.check_button_right_preview_text.clone(); let shared_using_for_preview = gui_data.compare_images.shared_using_for_preview.clone(); let shared_current_path = gui_data.compare_images.shared_current_path.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); check_button_right_preview_text.connect_toggled(move |check_button_right_preview_text| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; let model = tree_view .model() .expect("Missing tree_view model") .downcast::() .expect("Failed to downcast to ListStore"); let main_tree_path = shared_current_path.borrow().as_ref().expect("Missing current path").clone(); let this_tree_path = shared_using_for_preview.borrow().1.clone().expect("Missing right preview path"); if main_tree_path == this_tree_path { return; // Selected header, so we don't need to select result in treeview // TODO this should be handled by disabling entirely check box } let is_active = check_button_right_preview_text.is_active(); model.set_value( &model.iter(&this_tree_path).expect("Using invalid tree_path"), nb_object.column_selection as u32, &is_active.to_value(), ); }); } fn populate_groups_at_start( nb_object: &NotebookObject, model: &TreeModel, shared_current_path: &Rc>>, tree_path: TreePath, image_compare_left: &Image, image_compare_right: &Image, current_group: u32, group_number: u32, check_button_left_preview_text: &CheckButton, check_button_right_preview_text: &CheckButton, scrolled_window_compare_choose_images: &ScrolledWindow, label_group_info: >k4::Label, shared_image_cache: &Rc>>, shared_using_for_preview: &Rc, Option)>>, button_go_previous_compare_group: >k4::Button, button_go_next_compare_group: >k4::Button, check_button_settings_use_rust_preview: &CheckButton, ) { if current_group == 1 { button_go_previous_compare_group.set_sensitive(false); } else { button_go_previous_compare_group.set_sensitive(true); } if current_group == group_number { button_go_next_compare_group.set_sensitive(false); } else { button_go_next_compare_group.set_sensitive(true); } let all_vec = get_all_path( model, &tree_path, nb_object.column_header.expect("Missing column_header"), nb_object.column_path, nb_object.column_name, ); *shared_current_path.borrow_mut() = Some(tree_path); let cache_all_images = generate_cache_for_results(all_vec, check_button_settings_use_rust_preview.is_active()); // This is safe, because cache have at least 2 results image_compare_left.set_paintable(cache_all_images[0].2.paintable().as_ref()); image_compare_right.set_paintable(cache_all_images[1].2.paintable().as_ref()); *shared_using_for_preview.borrow_mut() = (Some(cache_all_images[0].4.clone()), Some(cache_all_images[1].4.clone())); check_button_left_preview_text.set_label(Some(&format!("1. {}", get_max_file_name(&cache_all_images[0].0, 60)))); check_button_right_preview_text.set_label(Some(&format!("2. {}", get_max_file_name(&cache_all_images[1].0, 60)))); label_group_info.set_text( flg!( "compare_groups_number", current_group = current_group, all_groups = group_number, images_in_group = cache_all_images.len() ) .as_str(), ); populate_similar_scrolled_view( scrolled_window_compare_choose_images, &cache_all_images, image_compare_left, image_compare_right, shared_using_for_preview, shared_image_cache, check_button_left_preview_text, check_button_right_preview_text, model, nb_object.column_selection, ); *shared_image_cache.borrow_mut() = cache_all_images.clone(); let mut found = false; for i in get_all_direct_children( &scrolled_window_compare_choose_images .child() .expect("Failed to get child of scrolled_window_compare_choose_images") .downcast::() .expect("Failed to downcast to Viewport"), ) { if i.widget_name() == "all_box" { let gtk_box = i.downcast::().expect("Failed to downcast to Box"); update_bottom_buttons(>k_box, shared_using_for_preview, shared_image_cache); found = true; break; } } assert!(found); let is_active = model.get::(&model.iter(&cache_all_images[0].4).expect("Using invalid tree_path"), nb_object.column_selection); check_button_left_preview_text.set_active(is_active); let is_active = model.get::(&model.iter(&cache_all_images[1].4).expect("Using invalid tree_path"), nb_object.column_selection); check_button_right_preview_text.set_active(is_active); } fn generate_cache_for_results(vector_with_path: Vec<(String, String, TreePath)>, use_rust_loader: bool) -> Vec<(String, String, Image, Image, TreePath)> { // TODO use here threads, // For now threads cannot be used because Image and TreeIter cannot be used in threads let mut cache_all_images = Vec::new(); for (full_path, name, tree_path) in vector_with_path { let small_img = Image::new(); let big_img = Image::new(); let mut pixbuf = get_pixbuf_from_dynamic_image(&DynamicImage::new_rgb8(1, 1)).expect("Failed to create pixbuf"); if use_rust_loader { match get_dynamic_image_from_path(&full_path) { Ok(t) => { match get_pixbuf_from_dynamic_image(&t) { Ok(t) => { pixbuf = t; } Err(e) => { println!("Failed to open image {full_path}, reason {e}"); } }; } Err(e) => { println!("Failed to open image {full_path}, reason {e}"); } }; } else { match Pixbuf::from_file(&full_path) { Ok(t) => { pixbuf = t; } Err(e) => { println!("Failed to open image {full_path}, reason {e}"); } }; } #[allow(clippy::never_loop)] loop { let Some(pixbuf_big) = resize_pixbuf_dimension(&pixbuf, (BIG_PREVIEW_SIZE, BIG_PREVIEW_SIZE), InterpType::Bilinear) else { println!("Failed to resize image {full_path}."); break; }; let Some(pixbuf_small) = resize_pixbuf_dimension(&pixbuf_big, (SMALL_PREVIEW_SIZE, SMALL_PREVIEW_SIZE), InterpType::Bilinear) else { println!("Failed to resize image {full_path}."); break; }; big_img.set_from_pixbuf(Some(&pixbuf_big)); small_img.set_from_pixbuf(Some(&pixbuf_small)); break; } cache_all_images.push((full_path, name, big_img, small_img, tree_path)); } cache_all_images } fn get_all_path(model: &TreeModel, current_path: &TreePath, column_header: i32, column_path: i32, column_name: i32) -> Vec<(String, String, TreePath)> { let used_iter = model.iter(current_path).expect("Using invalid tree_path"); assert!(model.get::(&used_iter, column_header)); let using_reference = !model.get::(&used_iter, column_path).is_empty(); let mut returned_vector = Vec::new(); if using_reference { let name = model.get::(&used_iter, column_name); let path = model.get::(&used_iter, column_path); let full_name = get_full_name_from_path_name(&path, &name); returned_vector.push((full_name, name, model.path(&used_iter))); } assert!(model.iter_next(&used_iter), "Found only header!"); loop { let name = model.get::(&used_iter, column_name); let path = model.get::(&used_iter, column_path); let full_name = get_full_name_from_path_name(&path, &name); returned_vector.push((full_name, name, model.path(&used_iter))); if !model.iter_next(&used_iter) { break; } if model.get::(&used_iter, column_header) { break; } } assert!(returned_vector.len() > 1); returned_vector } fn move_iter(model: &TreeModel, tree_path: &TreePath, column_header: i32, go_next: bool) -> TreePath { let tree_iter = model.iter(tree_path).expect("Using invalid tree_path"); assert!(model.get::(&tree_iter, column_header)); if go_next { assert!(model.iter_next(&tree_iter), "Found only header!"); } else { assert!(model.iter_previous(&tree_iter), "Found only header!"); } loop { if go_next { if !model.iter_next(&tree_iter) { break; } } else { if !model.iter_previous(&tree_iter) { break; } } if model.get::(&tree_iter, column_header) { break; } } model.path(&tree_iter) } fn populate_similar_scrolled_view( scrolled_window: &ScrolledWindow, image_cache: &[(String, String, Image, Image, TreePath)], image_compare_left: &Image, image_compare_right: &Image, shared_using_for_preview: &Rc, Option)>>, shared_image_cache: &Rc>>, check_button_left_preview_text: &CheckButton, check_button_right_preview_text: &CheckButton, model: &TreeModel, column_selection: i32, ) { scrolled_window.set_child(None::<&Widget>); let all_gtk_box = gtk4::Box::new(Orientation::Horizontal, 5); all_gtk_box.set_widget_name("all_box"); all_gtk_box.set_halign(Align::Fill); all_gtk_box.set_valign(Align::Fill); for (number, (path, _name, big_thumbnail, small_thumbnail, tree_path)) in image_cache.iter().enumerate() { let small_box = gtk4::Box::new(Orientation::Vertical, 3); let smaller_box = gtk4::Box::new(Orientation::Horizontal, 2); let button_left = gtk4::Button::builder().label(&flg!("compare_move_left_button")).build(); let label = gtk4::Label::builder().label((number + 1).to_string()).build(); let button_right = gtk4::Button::builder().label(&flg!("compare_move_right_button")).build(); let image_compare_left = image_compare_left.clone(); let image_compare_right = image_compare_right.clone(); let big_thumbnail_clone = big_thumbnail.clone(); let tree_path_clone = tree_path.clone(); let all_gtk_box_clone = all_gtk_box.clone(); let shared_using_for_preview_clone = shared_using_for_preview.clone(); let shared_image_cache_clone = shared_image_cache.clone(); let check_button_left_preview_text_clone = check_button_left_preview_text.clone(); let model_clone = model.clone(); let path_clone = path.clone(); button_left.connect_clicked(move |_button_left| { shared_using_for_preview_clone.borrow_mut().0 = Some(tree_path_clone.clone()); update_bottom_buttons(&all_gtk_box_clone, &shared_using_for_preview_clone, &shared_image_cache_clone); image_compare_left.set_paintable(big_thumbnail_clone.paintable().as_ref()); let is_active = model_clone.get::(&model_clone.iter(&tree_path_clone).expect("Invalid tree_path"), column_selection); check_button_left_preview_text_clone.set_active(is_active); check_button_left_preview_text_clone.set_label(Some(&format!("{}. {}", number + 1, get_max_file_name(&path_clone, 60)))); }); let big_thumbnail_clone = big_thumbnail.clone(); let tree_path_clone = tree_path.clone(); let all_gtk_box_clone = all_gtk_box.clone(); let shared_using_for_preview_clone = shared_using_for_preview.clone(); let shared_image_cache_clone = shared_image_cache.clone(); let check_button_right_preview_text_clone = check_button_right_preview_text.clone(); let model_clone = model.clone(); let path_clone = path.clone(); button_right.connect_clicked(move |_button_right| { shared_using_for_preview_clone.borrow_mut().1 = Some(tree_path_clone.clone()); update_bottom_buttons(&all_gtk_box_clone, &shared_using_for_preview_clone, &shared_image_cache_clone); image_compare_right.set_paintable(big_thumbnail_clone.paintable().as_ref()); let is_active = model_clone.get::(&model_clone.iter(&tree_path_clone).expect("Invalid tree_path"), column_selection); check_button_right_preview_text_clone.set_active(is_active); check_button_right_preview_text_clone.set_label(Some(&format!("{}. {}", number + 1, get_max_file_name(&path_clone, 60)))); }); smaller_box.append(&button_left); smaller_box.append(&label); smaller_box.append(&button_right); small_box.append(&smaller_box); small_box.set_halign(Align::Fill); small_box.set_valign(Align::Fill); small_box.set_hexpand_set(true); small_box.set_vexpand_set(true); small_thumbnail.set_halign(Align::Fill); small_thumbnail.set_valign(Align::Fill); small_thumbnail.set_hexpand(true); small_thumbnail.set_hexpand_set(true); small_thumbnail.set_vexpand(true); small_thumbnail.set_vexpand_set(true); small_box.append(small_thumbnail); all_gtk_box.append(&small_box); } all_gtk_box.show(); scrolled_window.set_child(Some(&all_gtk_box)); } fn update_bottom_buttons( all_gtk_box: >k4::Box, shared_using_for_preview: &Rc, Option)>>, image_cache: &Rc>>, ) { let left_tree_view = shared_using_for_preview.borrow().0.clone().expect("Left tree_view not set"); let right_tree_view = shared_using_for_preview.borrow().1.clone().expect("Right tree_view not set"); for (number, i) in get_all_direct_children(all_gtk_box).into_iter().enumerate() { let cache_tree_path = (*image_cache.borrow())[number].4.clone(); let is_chosen = cache_tree_path != right_tree_view && cache_tree_path != left_tree_view; let bx = i.downcast::().expect("Not Box"); let smaller_bx = bx.first_child().expect("No first child").downcast::().expect("First child is not Box"); for items in get_all_direct_children(&smaller_bx) { if let Ok(btn) = items.downcast::() { btn.set_sensitive(is_chosen); } } } } fn get_current_group_and_iter_from_selection(model: &TreeModel, selection: &TreeSelection, column_header: i32) -> (u32, TreePath) { let mut current_group = 1; let mut possible_group = 1; let mut header_clone: TreeIter; let mut possible_header: TreeIter; let selected_records = selection.selected_rows().0; let iter = model.iter_first().expect("Model is no empty, so should have first item"); // Checking that treeview is not empty should be done before header_clone = iter; // if nothing selected, use first group possible_header = iter; // if nothing selected, use first group assert!(model.get::(&iter, column_header)); // First element should be header if !selected_records.is_empty() { let first_selected_record = selected_records[0].clone(); loop { if !model.iter_next(&iter) { break; } if model.get::(&iter, column_header) { possible_group += 1; possible_header = iter; } if model.path(&iter) == first_selected_record { header_clone = possible_header; current_group = possible_group; } } } (current_group, model.path(&header_clone)) } czkawka_gui-8.0.0/src/connect_things/connect_button_delete.rs000064400000000000000000000441401046102023000226430ustar 00000000000000use std::collections::BTreeMap; use std::fs; use std::fs::FileType; use gtk4::prelude::*; use gtk4::{Align, CheckButton, Dialog, Orientation, ResponseType, TextView}; use crate::flg; use crate::gui_structs::gui_data::GuiData; use crate::help_functions::*; use crate::notebook_enums::*; use crate::notebook_info::NOTEBOOKS_INFO; // TODO add support for checking if really symlink doesn't point to correct directory/file pub fn connect_button_delete(gui_data: &GuiData) { let buttons_delete = gui_data.bottom_buttons.buttons_delete.clone(); let gui_data = gui_data.clone(); // TODO this maybe can be replaced, not sure if worth to clone everything buttons_delete.connect_clicked(move |_| { glib::MainContext::default().spawn_local(delete_things(gui_data.clone())); }); } pub async fn delete_things(gui_data: GuiData) { // validate_notebook_data(&gui_data); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let window_main = gui_data.window_main.clone(); let check_button_settings_confirm_deletion = gui_data.settings.check_button_settings_confirm_deletion.clone(); let check_button_settings_confirm_group_deletion = gui_data.settings.check_button_settings_confirm_group_deletion.clone(); let image_preview_similar_images = gui_data.main_notebook.image_preview_similar_images.clone(); let image_preview_duplicates = gui_data.main_notebook.image_preview_duplicates.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); let check_button_settings_use_trash = gui_data.settings.check_button_settings_use_trash.clone(); let preview_path = gui_data.preview_path.clone(); let text_view_errors = gui_data.text_view_errors.clone(); let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; let (number_of_selected_items, number_of_selected_groups) = check_how_much_elements_is_selected(tree_view, nb_object.column_header, nb_object.column_selection); // Nothing is selected if number_of_selected_items == 0 { return; } if !check_if_can_delete_files(&check_button_settings_confirm_deletion, &window_main, number_of_selected_items, number_of_selected_groups).await { return; } if let Some(column_header) = nb_object.column_header { if !check_button_settings_confirm_group_deletion.is_active() || !check_if_deleting_all_files_in_group( tree_view, column_header, nb_object.column_selection, nb_object.column_path, &window_main, &check_button_settings_confirm_group_deletion, ) .await { tree_remove( tree_view, nb_object.column_name, nb_object.column_path, column_header, nb_object.column_selection, &check_button_settings_use_trash, &text_view_errors, ); } } else { if nb_number == NotebookMainEnum::EmptyDirectories as u32 { empty_folder_remover( tree_view, nb_object.column_name, nb_object.column_path, nb_object.column_selection, &check_button_settings_use_trash, &text_view_errors, ); } else { basic_remove( tree_view, nb_object.column_name, nb_object.column_path, nb_object.column_selection, &check_button_settings_use_trash, &text_view_errors, ); } } match &nb_object.notebook_type { NotebookMainEnum::SimilarImages | NotebookMainEnum::Duplicate => { if nb_object.notebook_type == NotebookMainEnum::SimilarImages { image_preview_similar_images.hide(); } else { image_preview_duplicates.hide(); } *preview_path.borrow_mut() = String::new(); } _ => {} } } pub async fn check_if_can_delete_files( check_button_settings_confirm_deletion: &CheckButton, window_main: >k4::Window, number_of_selected_items: u64, number_of_selected_groups: u64, ) -> bool { if check_button_settings_confirm_deletion.is_active() { let (confirmation_dialog_delete, check_button) = create_dialog_ask_for_deletion(window_main, number_of_selected_items, number_of_selected_groups); let response_type = confirmation_dialog_delete.run_future().await; if response_type == ResponseType::Ok { if !check_button.is_active() { check_button_settings_confirm_deletion.set_active(false); } confirmation_dialog_delete.hide(); confirmation_dialog_delete.close(); } else { confirmation_dialog_delete.hide(); confirmation_dialog_delete.close(); return false; }; } true } fn create_dialog_ask_for_deletion(window_main: >k4::Window, number_of_selected_items: u64, number_of_selected_groups: u64) -> (Dialog, CheckButton) { let dialog = Dialog::builder().title(flg!("delete_title_dialog")).transient_for(window_main).modal(true).build(); let button_ok = dialog.add_button(&flg!("general_ok_button"), ResponseType::Ok); dialog.add_button(&flg!("general_close_button"), ResponseType::Cancel); dialog.set_default_size(300, 0); let label: gtk4::Label = gtk4::Label::new(Some(&flg!("delete_question_label"))); let label2: gtk4::Label = match number_of_selected_groups { 0 => gtk4::Label::new(Some(&flg!("delete_items_label", items = number_of_selected_items))), _ => gtk4::Label::new(Some(&flg!( "delete_items_groups_label", items = number_of_selected_items, groups = number_of_selected_groups ))), }; let check_button: CheckButton = CheckButton::builder() .label(flg!("dialogs_ask_next_time")) .active(true) .halign(Align::Center) .margin_top(5) .build(); button_ok.grab_focus(); let parent = button_ok.parent().expect("Hack 1").parent().expect("Hack 2").downcast::().expect("Hack 3"); // TODO Hack, but not so ugly as before parent.set_orientation(Orientation::Vertical); parent.insert_child_after(&label, None::<>k4::Widget>); parent.insert_child_after(&label2, Some(&label)); parent.insert_child_after(&check_button, Some(&label2)); dialog.show(); (dialog, check_button) } fn create_dialog_group_deletion(window_main: >k4::Window) -> (Dialog, CheckButton) { let dialog = Dialog::builder() .title(flg!("delete_all_files_in_group_title")) .transient_for(window_main) .modal(true) .build(); let button_ok = dialog.add_button(&flg!("general_ok_button"), ResponseType::Ok); dialog.add_button(&flg!("general_close_button"), ResponseType::Cancel); let label: gtk4::Label = gtk4::Label::new(Some(&flg!("delete_all_files_in_group_label1"))); let label2: gtk4::Label = gtk4::Label::new(Some(&flg!("delete_all_files_in_group_label2"))); let check_button: CheckButton = CheckButton::builder().label(flg!("dialogs_ask_next_time")).active(true).halign(Align::Center).build(); button_ok.grab_focus(); let parent = button_ok.parent().expect("Hack 1").parent().expect("Hack 2").downcast::().expect("Hack 3"); // TODO Hack, but not so ugly as before parent.set_orientation(Orientation::Vertical); parent.insert_child_after(&label, None::<>k4::Widget>); parent.insert_child_after(&label2, Some(&label)); parent.insert_child_after(&check_button, Some(&label2)); dialog.show(); (dialog, check_button) } pub async fn check_if_deleting_all_files_in_group( tree_view: >k4::TreeView, column_header: i32, column_selection: i32, column_path: i32, window_main: >k4::Window, check_button_settings_confirm_group_deletion: &CheckButton, ) -> bool { let model = get_list_store(tree_view); let mut selected_all_records: bool = true; if let Some(iter) = model.iter_first() { assert!(model.get::(&iter, column_header)); // First element should be header // It is safe to remove any number of files in reference mode if !model.get::(&iter, column_path).is_empty() { return false; } loop { if !model.iter_next(&iter) { break; } if model.get::(&iter, column_header) { if selected_all_records { break; } selected_all_records = true; } else { if !model.get::(&iter, column_selection) { selected_all_records = false; } } } } else { return false; } if !selected_all_records { return false; } let (confirmation_dialog_group_delete, check_button) = create_dialog_group_deletion(window_main); let response_type = confirmation_dialog_group_delete.run_future().await; if response_type == ResponseType::Ok { if !check_button.is_active() { check_button_settings_confirm_group_deletion.set_active(false); } } else { confirmation_dialog_group_delete.hide(); confirmation_dialog_group_delete.close(); return true; } confirmation_dialog_group_delete.hide(); confirmation_dialog_group_delete.close(); false } pub fn empty_folder_remover( tree_view: >k4::TreeView, column_file_name: i32, column_path: i32, column_selection: i32, check_button_settings_use_trash: &CheckButton, text_view_errors: &TextView, ) { let use_trash = check_button_settings_use_trash.is_active(); let model = get_list_store(tree_view); let mut selected_rows = Vec::new(); if let Some(iter) = model.iter_first() { loop { if model.get::(&iter, column_selection) { selected_rows.push(model.path(&iter)); } if !model.iter_next(&iter) { break; } } } if selected_rows.is_empty() { return; // No selected rows } let mut messages: String = String::new(); // Must be deleted from end to start, because when deleting entries, TreePath(and also TreeIter) will points to invalid data for tree_path in selected_rows.iter().rev() { let iter = model.iter(tree_path).expect("Using invalid tree_path"); let name = model.get::(&iter, column_file_name); let path = model.get::(&iter, column_path); // We must check if folder is really empty or contains only other empty folders let mut error_happened = false; let mut folders_to_check: Vec = vec![get_full_name_from_path_name(&path, &name)]; let mut next_folder: String; 'dir: while let Some(current_folder) = folders_to_check.pop() { let read_dir = match fs::read_dir(¤t_folder) { Ok(t) => t, Err(_inspected) => { error_happened = true; break 'dir; } }; for entry in read_dir { let entry_data = match entry { Ok(t) => t, Err(_inspected) => { error_happened = true; break 'dir; } }; let file_type: FileType = match entry_data.file_type() { Ok(t) => t, Err(_inspected) => { error_happened = true; break 'dir; } }; if file_type.is_dir() { next_folder = String::new() + ¤t_folder + "/" + match &entry_data.file_name().into_string() { Ok(t) => t, Err(_inspected) => { error_happened = true; break 'dir; } }; folders_to_check.push(next_folder.clone()); } else { error_happened = true; } } } if !error_happened { if !use_trash { match fs::remove_dir_all(get_full_name_from_path_name(&path, &name)) { Ok(()) => { model.remove(&iter); } Err(_inspected) => error_happened = true, } } else { match trash::delete(get_full_name_from_path_name(&path, &name)) { Ok(()) => { model.remove(&iter); } Err(_inspected) => error_happened = true, } } } if error_happened { messages += &flg!("delete_folder_failed", dir = get_full_name_from_path_name(&path, &name)); messages += "\n"; } } text_view_errors.buffer().set_text(messages.as_str()); } pub fn basic_remove( tree_view: >k4::TreeView, column_file_name: i32, column_path: i32, column_selection: i32, check_button_settings_use_trash: &CheckButton, text_view_errors: &TextView, ) { let use_trash = check_button_settings_use_trash.is_active(); let model = get_list_store(tree_view); let mut messages: String = String::new(); let mut selected_rows = Vec::new(); if let Some(iter) = model.iter_first() { loop { if model.get::(&iter, column_selection) { selected_rows.push(model.path(&iter)); } if !model.iter_next(&iter) { break; } } } if selected_rows.is_empty() { return; // No selected rows } // Must be deleted from end to start, because when deleting entries, TreePath(and also TreeIter) will points to invalid data for tree_path in selected_rows.iter().rev() { let iter = model.iter(tree_path).expect("Using invalid tree_path"); let name = model.get::(&iter, column_file_name); let path = model.get::(&iter, column_path); if !use_trash { match fs::remove_file(get_full_name_from_path_name(&path, &name)) { Ok(()) => { model.remove(&iter); } Err(e) => { messages += flg!("delete_file_failed", name = get_full_name_from_path_name(&path, &name), reason = e.to_string()).as_str(); messages += "\n"; } } } else { match trash::delete(get_full_name_from_path_name(&path, &name)) { Ok(()) => { model.remove(&iter); } Err(e) => { messages += flg!("delete_file_failed", name = get_full_name_from_path_name(&path, &name), reason = e.to_string()).as_str(); messages += "\n"; } } } } text_view_errors.buffer().set_text(messages.as_str()); } // Remove all occurrences - remove every element which have same path and name as even non selected ones pub fn tree_remove( tree_view: >k4::TreeView, column_file_name: i32, column_path: i32, column_header: i32, column_selection: i32, check_button_settings_use_trash: &CheckButton, text_view_errors: &TextView, ) { let use_trash = check_button_settings_use_trash.is_active(); let model = get_list_store(tree_view); let mut messages: String = String::new(); let mut vec_path_to_delete: Vec<(String, String)> = Vec::new(); let mut map_with_path_to_delete: BTreeMap> = Default::default(); // BTreeMap> let mut selected_rows = Vec::new(); if let Some(iter) = model.iter_first() { loop { if model.get::(&iter, column_selection) { if !model.get::(&iter, column_header) { selected_rows.push(model.path(&iter)); } else { panic!("Header row shouldn't be selected, please report bug."); } } if !model.iter_next(&iter) { break; } } } if selected_rows.is_empty() { return; // No selected rows } // Save to variable paths of files, and remove it when not removing all occurrences. for tree_path in selected_rows.iter().rev() { let iter = model.iter(tree_path).expect("Using invalid tree_path"); let file_name = model.get::(&iter, column_file_name); let path = model.get::(&iter, column_path); model.remove(&iter); map_with_path_to_delete.entry(path.clone()).or_default().push(file_name); } // Delete duplicated entries, and remove real files for (path, mut vec_file_name) in map_with_path_to_delete { vec_file_name.sort_unstable(); vec_file_name.dedup(); for file_name in vec_file_name { if !use_trash { if let Err(e) = fs::remove_file(get_full_name_from_path_name(&path, &file_name)) { messages += flg!("delete_file_failed", name = get_full_name_from_path_name(&path, &file_name), reason = e.to_string()).as_str(); messages += "\n"; } } else if let Err(e) = trash::delete(get_full_name_from_path_name(&path, &file_name)) { messages += flg!("delete_file_failed", name = get_full_name_from_path_name(&path, &file_name), reason = e.to_string()).as_str(); messages += "\n"; } vec_path_to_delete.push((path.clone(), file_name.clone())); } } clean_invalid_headers(&model, column_header, column_path); text_view_errors.buffer().set_text(messages.as_str()); } czkawka_gui-8.0.0/src/connect_things/connect_button_hardlink.rs000064400000000000000000000326431046102023000232020ustar 00000000000000use std::fs; use std::path::PathBuf; use czkawka_core::duplicate::make_hard_link; use gtk4::prelude::*; use gtk4::{Align, CheckButton, Dialog, Orientation, ResponseType, TextView, TreeIter, TreePath}; use crate::flg; use crate::gui_structs::gui_data::GuiData; use crate::help_functions::*; use crate::notebook_enums::*; use crate::notebook_info::NOTEBOOKS_INFO; #[derive(PartialEq, Eq, Copy, Clone)] enum TypeOfTool { Hardlinking, Symlinking, } #[derive(Debug)] struct SymHardlinkData { original_data: String, files_to_symhardlink: Vec, } pub fn connect_button_hardlink_symlink(gui_data: &GuiData) { // Hardlinking { let buttons_hardlink = gui_data.bottom_buttons.buttons_hardlink.clone(); let gui_data = gui_data.clone(); buttons_hardlink.connect_clicked(move |_| { glib::MainContext::default().spawn_local(sym_hard_link_things(gui_data.clone(), TypeOfTool::Hardlinking)); }); } // Symlinking { let buttons_symlink = gui_data.bottom_buttons.buttons_symlink.clone(); let gui_data = gui_data.clone(); buttons_symlink.connect_clicked(move |_| { glib::MainContext::default().spawn_local(sym_hard_link_things(gui_data.clone(), TypeOfTool::Symlinking)); }); } } async fn sym_hard_link_things(gui_data: GuiData, hardlinking: TypeOfTool) { let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); let image_preview_similar_images = gui_data.main_notebook.image_preview_similar_images.clone(); let image_preview_duplicates = gui_data.main_notebook.image_preview_duplicates.clone(); let text_view_errors = gui_data.text_view_errors.clone(); let preview_path = gui_data.preview_path.clone(); let window_main = gui_data.window_main.clone(); let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; let column_header = nb_object.column_header.expect("Linking can be only used for tree views with grouped results"); let check_button_settings_confirm_link = gui_data.settings.check_button_settings_confirm_link.clone(); if !check_if_anything_is_selected_async(tree_view, column_header, nb_object.column_selection) { return; } if !check_if_can_link_files(&check_button_settings_confirm_link, &window_main).await { return; } if !check_if_changing_one_item_in_group_and_continue(tree_view, column_header, nb_object.column_selection, &window_main).await { return; } hardlink_symlink( tree_view, nb_object.column_name, nb_object.column_path, column_header, nb_object.column_selection, hardlinking, &text_view_errors, ); match &nb_object.notebook_type { NotebookMainEnum::SimilarImages | NotebookMainEnum::Duplicate => { if nb_object.notebook_type == NotebookMainEnum::SimilarImages { image_preview_similar_images.hide(); } else { image_preview_duplicates.hide(); } *preview_path.borrow_mut() = String::new(); } _ => {} } } fn hardlink_symlink( tree_view: >k4::TreeView, column_file_name: i32, column_path: i32, column_header: i32, column_selection: i32, hardlinking: TypeOfTool, text_view_errors: &TextView, ) { reset_text_view(text_view_errors); let model = get_list_store(tree_view); let mut vec_tree_path_to_remove: Vec = Vec::new(); // List of hardlinked files without its root let mut vec_symhardlink_data: Vec = Vec::new(); let current_iter: TreeIter = match model.iter_first() { Some(t) => t, None => return, // No records }; let mut selected_rows = Vec::new(); if let Some(iter) = model.iter_first() { loop { if model.get::(&iter, column_selection) { if !model.get::(&iter, column_header) { selected_rows.push(model.path(&iter)); } else { panic!("Header row shouldn't be selected, please report bug."); } } if !model.iter_next(&iter) { break; } } } if selected_rows.is_empty() { return; // No selected rows } let mut current_symhardlink_data: Option = None; let mut current_selected_index = 0; loop { if model.get::(¤t_iter, column_header) { if let Some(current_symhardlink_data) = current_symhardlink_data { if !current_symhardlink_data.files_to_symhardlink.is_empty() { vec_symhardlink_data.push(current_symhardlink_data); } } current_symhardlink_data = None; assert!(model.iter_next(¤t_iter), "HEADER, shouldn't be a last item."); continue; } if model.path(¤t_iter) == selected_rows[current_selected_index] { let file_name = model.get::(¤t_iter, column_file_name); let path = model.get::(¤t_iter, column_path); let full_file_path = get_full_name_from_path_name(&path, &file_name); if let Some(mut current_data) = current_symhardlink_data { vec_tree_path_to_remove.push(model.path(¤t_iter)); current_data.files_to_symhardlink.push(full_file_path); current_symhardlink_data = Some(current_data); } else { current_symhardlink_data = Some(SymHardlinkData { original_data: full_file_path, files_to_symhardlink: vec![], }); } if current_selected_index != selected_rows.len() - 1 { current_selected_index += 1; } else { if let Some(current_symhardlink_data) = current_symhardlink_data { if !current_symhardlink_data.files_to_symhardlink.is_empty() { vec_symhardlink_data.push(current_symhardlink_data); } } break; // There is no more selected items, so we just end checking } } if !model.iter_next(¤t_iter) { if let Some(current_symhardlink_data) = current_symhardlink_data { if !current_symhardlink_data.files_to_symhardlink.is_empty() { vec_symhardlink_data.push(current_symhardlink_data); } } break; } } if hardlinking == TypeOfTool::Hardlinking { for symhardlink_data in vec_symhardlink_data { for file_to_hardlink in symhardlink_data.files_to_symhardlink { if let Err(e) = make_hard_link(&PathBuf::from(&symhardlink_data.original_data), &PathBuf::from(&file_to_hardlink)) { add_text_to_text_view(text_view_errors, format!("{} {}, reason {}", flg!("hardlink_failed"), file_to_hardlink, e).as_str()); continue; } } } } else { for symhardlink_data in vec_symhardlink_data { for file_to_symlink in symhardlink_data.files_to_symhardlink { if let Err(e) = fs::remove_file(&file_to_symlink) { add_text_to_text_view(text_view_errors, flg!("delete_file_failed", name = file_to_symlink, reason = e.to_string()).as_str()); continue; }; #[cfg(target_family = "unix")] { if let Err(e) = std::os::unix::fs::symlink(&symhardlink_data.original_data, &file_to_symlink) { add_text_to_text_view(text_view_errors, flg!("delete_file_failed", name = file_to_symlink, reason = e.to_string()).as_str()); continue; }; } #[cfg(target_family = "windows")] { if let Err(e) = std::os::windows::fs::symlink_file(&symhardlink_data.original_data, &file_to_symlink) { add_text_to_text_view(text_view_errors, flg!("delete_file_failed", name = file_to_symlink, reason = e.to_string()).as_str()); continue; }; } } } } for tree_path in vec_tree_path_to_remove.iter().rev() { model.remove(&model.iter(tree_path).expect("Using invalid tree_path")); } clean_invalid_headers(&model, column_header, column_path); } fn create_dialog_non_group(window_main: >k4::Window) -> Dialog { let dialog = Dialog::builder() .title(flg!("hard_sym_invalid_selection_title_dialog")) .transient_for(window_main) .modal(true) .build(); let button_ok = dialog.add_button(&flg!("general_ok_button"), ResponseType::Ok); dialog.add_button(&flg!("general_close_button"), ResponseType::Cancel); let label: gtk4::Label = gtk4::Label::new(Some(&flg!("hard_sym_invalid_selection_label_1"))); let label2: gtk4::Label = gtk4::Label::new(Some(&flg!("hard_sym_invalid_selection_label_2"))); let label3: gtk4::Label = gtk4::Label::new(Some(&flg!("hard_sym_invalid_selection_label_3"))); button_ok.grab_focus(); let parent = button_ok.parent().expect("Hack 1").parent().expect("Hack 2").downcast::().expect("Hack 3"); // TODO Hack, but not so ugly as before parent.set_orientation(Orientation::Vertical); parent.insert_child_after(&label, None::<>k4::Widget>); parent.insert_child_after(&label2, Some(&label)); parent.insert_child_after(&label3, Some(&label2)); dialog.show(); dialog } pub async fn check_if_changing_one_item_in_group_and_continue(tree_view: >k4::TreeView, column_header: i32, column_selection: i32, window_main: >k4::Window) -> bool { let model = get_list_store(tree_view); let mut selected_values_in_group = 0; if let Some(iter) = model.iter_first() { assert!(model.get::(&iter, column_header)); // First element should be header loop { if !model.iter_next(&iter) { break; } if model.get::(&iter, column_header) { if selected_values_in_group == 1 { break; } selected_values_in_group = 0; } else { if model.get::(&iter, column_selection) { selected_values_in_group += 1; } } } } else { return false; // No available records } if selected_values_in_group == 1 { let confirmation_dialog = create_dialog_non_group(window_main); let response_type = confirmation_dialog.run_future().await; if response_type != ResponseType::Ok { confirmation_dialog.hide(); confirmation_dialog.close(); return false; } confirmation_dialog.hide(); confirmation_dialog.close(); } true } pub fn check_if_anything_is_selected_async(tree_view: >k4::TreeView, column_header: i32, column_selection: i32) -> bool { let model = get_list_store(tree_view); if let Some(iter) = model.iter_first() { assert!(model.get::(&iter, column_header)); // First element should be header loop { if !model.iter_next(&iter) { break; } if !model.get::(&iter, column_header) && model.get::(&iter, column_selection) { return true; } } } false } pub async fn check_if_can_link_files(check_button_settings_confirm_link: &CheckButton, window_main: >k4::Window) -> bool { if check_button_settings_confirm_link.is_active() { let (confirmation_dialog_link, check_button) = create_dialog_ask_for_linking(window_main); let response_type = confirmation_dialog_link.run_future().await; if response_type == ResponseType::Ok { if !check_button.is_active() { check_button_settings_confirm_link.set_active(false); } confirmation_dialog_link.hide(); confirmation_dialog_link.close(); } else { confirmation_dialog_link.hide(); confirmation_dialog_link.close(); return false; }; } true } fn create_dialog_ask_for_linking(window_main: >k4::Window) -> (Dialog, CheckButton) { let dialog = Dialog::builder().title(flg!("hard_sym_link_title_dialog")).transient_for(window_main).modal(true).build(); let button_ok = dialog.add_button(&flg!("general_ok_button"), ResponseType::Ok); dialog.add_button(&flg!("general_close_button"), ResponseType::Cancel); let label: gtk4::Label = gtk4::Label::new(Some(&flg!("hard_sym_link_label"))); let check_button: CheckButton = CheckButton::builder().label(flg!("dialogs_ask_next_time")).active(true).halign(Align::Center).build(); button_ok.grab_focus(); let parent = button_ok.parent().expect("Hack 1").parent().expect("Hack 2").downcast::().expect("Hack 3"); // TODO Hack, but not so ugly as before parent.set_orientation(Orientation::Vertical); parent.insert_child_after(&label, None::<>k4::Widget>); parent.insert_child_after(&check_button, Some(&label)); dialog.show(); (dialog, check_button) } czkawka_gui-8.0.0/src/connect_things/connect_button_move.rs000064400000000000000000000164761046102023000223620ustar 00000000000000use std::path::{Path, PathBuf}; use fs_extra::dir::CopyOptions; use gtk4::prelude::*; use gtk4::{ResponseType, TreePath}; use crate::flg; use crate::gui_structs::gui_data::GuiData; use crate::help_functions::*; use crate::notebook_enums::*; use crate::notebook_info::NOTEBOOKS_INFO; pub fn connect_button_move(gui_data: &GuiData) { let buttons_move = gui_data.bottom_buttons.buttons_move.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); let image_preview_similar_images = gui_data.main_notebook.image_preview_similar_images.clone(); let image_preview_duplicates = gui_data.main_notebook.image_preview_duplicates.clone(); let entry_info = gui_data.entry_info.clone(); let text_view_errors = gui_data.text_view_errors.clone(); let preview_path = gui_data.preview_path.clone(); let file_dialog_move_to_folder = gui_data.file_dialog_move_to_folder.clone(); file_dialog_move_to_folder.connect_response(move |file_chooser, response_type| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; let (number_of_selected_items, _number_of_selected_groups) = check_how_much_elements_is_selected(tree_view, nb_object.column_header, nb_object.column_selection); // Nothing is selected if number_of_selected_items == 0 { return; } reset_text_view(&text_view_errors); if response_type == ResponseType::Accept { let mut folders: Vec = Vec::new(); let g_files = file_chooser.files(); for index in 0..g_files.n_items() { let file = &g_files.item(index); if let Some(file) = file { let ss = file.clone().downcast::().expect("Failed to downcast to gio::File"); if let Some(path_buf) = ss.path() { folders.push(path_buf); } } } if folders.len() != 1 { add_text_to_text_view(&text_view_errors, flg!("move_files_choose_more_than_1_path", path_number = folders.len()).as_str()); } else { let folder = folders[0].clone(); if let Some(column_header) = nb_object.column_header { move_with_tree( tree_view, nb_object.column_name, nb_object.column_path, column_header, nb_object.column_selection, &folder, &entry_info, &text_view_errors, ); } else { move_with_list( tree_view, nb_object.column_name, nb_object.column_path, nb_object.column_selection, &folder, &entry_info, &text_view_errors, ); } } } match &nb_object.notebook_type { NotebookMainEnum::SimilarImages | NotebookMainEnum::Duplicate => { if nb_object.notebook_type == NotebookMainEnum::SimilarImages { image_preview_similar_images.hide(); } else { image_preview_duplicates.hide(); } *preview_path.borrow_mut() = String::new(); } _ => {} } }); buttons_move.connect_clicked(move |_| { file_dialog_move_to_folder.show(); }); } fn move_with_tree( tree_view: >k4::TreeView, column_file_name: i32, column_path: i32, column_header: i32, column_selection: i32, destination_folder: &Path, entry_info: >k4::Entry, text_view_errors: >k4::TextView, ) { let model = get_list_store(tree_view); let mut selected_rows = Vec::new(); if let Some(iter) = model.iter_first() { loop { if model.get::(&iter, column_selection) { if !model.get::(&iter, column_header) { selected_rows.push(model.path(&iter)); } else { panic!("Header row shouldn't be selected, please report bug."); } } if !model.iter_next(&iter) { break; } } } if selected_rows.is_empty() { return; // No selected rows } move_files_common(&selected_rows, &model, column_file_name, column_path, destination_folder, entry_info, text_view_errors); clean_invalid_headers(&model, column_header, column_path); } fn move_with_list( tree_view: >k4::TreeView, column_file_name: i32, column_path: i32, column_selection: i32, destination_folder: &Path, entry_info: >k4::Entry, text_view_errors: >k4::TextView, ) { let model = get_list_store(tree_view); let mut selected_rows = Vec::new(); if let Some(iter) = model.iter_first() { loop { if model.get::(&iter, column_selection) { selected_rows.push(model.path(&iter)); } if !model.iter_next(&iter) { break; } } } if selected_rows.is_empty() { return; // No selected rows } move_files_common(&selected_rows, &model, column_file_name, column_path, destination_folder, entry_info, text_view_errors); } fn move_files_common( selected_rows: &[TreePath], model: >k4::ListStore, column_file_name: i32, column_path: i32, destination_folder: &Path, entry_info: >k4::Entry, text_view_errors: >k4::TextView, ) { let mut messages: String = String::new(); let mut moved_files: u32 = 0; // Save to variable paths of files, and remove it when not removing all occurrences. 'next_result: for tree_path in selected_rows.iter().rev() { let iter = model.iter(tree_path).expect("Using invalid tree_path"); let file_name = model.get::(&iter, column_file_name); let path = model.get::(&iter, column_path); let thing = get_full_name_from_path_name(&path, &file_name); let destination_file = destination_folder.join(file_name); if Path::new(&thing).is_dir() { if let Err(e) = fs_extra::dir::move_dir(&thing, &destination_file, &CopyOptions::new()) { messages += flg!("move_folder_failed", name = thing, reason = e.to_string()).as_str(); messages += "\n"; continue 'next_result; } } else { if let Err(e) = fs_extra::file::move_file(&thing, &destination_file, &fs_extra::file::CopyOptions::new()) { messages += flg!("move_file_failed", name = thing, reason = e.to_string()).as_str(); messages += "\n"; continue 'next_result; } } model.remove(&iter); moved_files += 1; } entry_info.set_text(flg!("move_stats", num_files = moved_files, all_files = selected_rows.len()).as_str()); text_view_errors.buffer().set_text(messages.as_str()); } czkawka_gui-8.0.0/src/connect_things/connect_button_save.rs000064400000000000000000000121031046102023000223310ustar 00000000000000use std::cell::RefCell; use std::collections::HashMap; use std::env; use std::rc::Rc; use czkawka_core::common_traits::PrintResults; use gtk4::prelude::*; use gtk4::{Button, Entry}; use crate::flg; use crate::gui_structs::gui_data::GuiData; use crate::help_functions::BottomButtonsEnum; use crate::notebook_enums::*; pub fn connect_button_save(gui_data: &GuiData) { let buttons_save = gui_data.bottom_buttons.buttons_save.clone(); let buttons_save_clone = gui_data.bottom_buttons.buttons_save.clone(); let shared_duplication_state = gui_data.shared_duplication_state.clone(); let shared_empty_folders_state = gui_data.shared_empty_folders_state.clone(); let shared_big_files_state = gui_data.shared_big_files_state.clone(); let shared_temporary_files_state = gui_data.shared_temporary_files_state.clone(); let shared_empty_files_state = gui_data.shared_empty_files_state.clone(); let shared_similar_images_state = gui_data.shared_similar_images_state.clone(); let shared_similar_videos_state = gui_data.shared_similar_videos_state.clone(); let shared_same_music_state = gui_data.shared_same_music_state.clone(); let shared_same_invalid_symlinks = gui_data.shared_same_invalid_symlinks.clone(); let shared_broken_files_state = gui_data.shared_broken_files_state.clone(); let shared_bad_extensions_state = gui_data.shared_bad_extensions_state.clone(); let shared_buttons = gui_data.shared_buttons.clone(); let entry_info = gui_data.entry_info.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); buttons_save.connect_clicked(move |_| { let current_path = match env::current_dir() { Ok(t) => t.to_string_lossy().to_string(), Err(_) => "__unknown__".to_string(), }; let result = match to_notebook_main_enum(notebook_main.current_page().expect("Current page not set")) { NotebookMainEnum::Duplicate => shared_duplication_state.borrow().as_ref().map(|x| x.save_all_in_one(¤t_path, "results_duplicates")), NotebookMainEnum::EmptyDirectories => shared_empty_folders_state .borrow() .as_ref() .map(|x| x.save_all_in_one(¤t_path, "results_empty_directories")), NotebookMainEnum::EmptyFiles => shared_empty_files_state.borrow().as_ref().map(|x| x.save_all_in_one(¤t_path, "results_empty_files")), NotebookMainEnum::Temporary => shared_temporary_files_state .borrow() .as_ref() .map(|x| x.save_all_in_one(¤t_path, "results_temporary_files")), NotebookMainEnum::BigFiles => shared_big_files_state.borrow().as_ref().map(|x| x.save_all_in_one(¤t_path, "results_big_files")), NotebookMainEnum::SimilarImages => shared_similar_images_state .borrow() .as_ref() .map(|x| x.save_all_in_one(¤t_path, "results_similar_images")), NotebookMainEnum::SimilarVideos => shared_similar_videos_state .borrow() .as_ref() .map(|x| x.save_all_in_one(¤t_path, "results_similar_videos")), NotebookMainEnum::SameMusic => shared_same_music_state.borrow().as_ref().map(|x| x.save_all_in_one(¤t_path, "results_same_music")), NotebookMainEnum::Symlinks => shared_same_invalid_symlinks .borrow() .as_ref() .map(|x| x.save_all_in_one(¤t_path, "results_invalid_symlinks")), NotebookMainEnum::BrokenFiles => shared_broken_files_state .borrow() .as_ref() .map(|x| x.save_all_in_one(¤t_path, "results_broken_files")), NotebookMainEnum::BadExtensions => shared_bad_extensions_state .borrow() .as_ref() .map(|x| x.save_all_in_one(¤t_path, "results_bad_extensions")), }; match result.expect("Tried to save results, without running scan(bug which needs to be fixed)") { Ok(()) => (), Err(e) => { entry_info.set_text(&format!("Failed to save results to folder {current_path}, reason {e}")); return; } } post_save_things( to_notebook_main_enum(notebook_main.current_page().expect("Current page not set")), &shared_buttons, &entry_info, &buttons_save_clone, current_path, ); }); } fn post_save_things( type_of_tab: NotebookMainEnum, shared_buttons: &Rc>>>, entry_info: &Entry, buttons_save: &Button, current_path: String, ) { entry_info.set_text(&flg!("save_results_to_file", name = current_path)); // Set state { buttons_save.hide(); *shared_buttons .borrow_mut() .get_mut(&type_of_tab) .expect("Failed to get current tab") .get_mut(&BottomButtonsEnum::Save) .expect("Failed to get save button") = false; } } czkawka_gui-8.0.0/src/connect_things/connect_button_search.rs000064400000000000000000001026321046102023000226470ustar 00000000000000use std::path::PathBuf; use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::Arc; use std::thread; use crossbeam_channel::{Receiver, Sender}; use czkawka_core::bad_extensions::{BadExtensions, BadExtensionsParameters}; use czkawka_core::big_file::{BigFile, BigFileParameters}; use czkawka_core::broken_files::{BrokenFiles, BrokenFilesParameters, CheckedTypes}; use czkawka_core::common::DEFAULT_THREAD_SIZE; use czkawka_core::common_dir_traversal::CheckingMethod; use czkawka_core::common_tool::CommonData; use czkawka_core::duplicate::{DuplicateFinder, DuplicateFinderParameters}; use czkawka_core::empty_files::EmptyFiles; use czkawka_core::empty_folder::EmptyFolder; use czkawka_core::invalid_symlinks::InvalidSymlinks; use czkawka_core::progress_data::ProgressData; use czkawka_core::same_music::{MusicSimilarity, SameMusic, SameMusicParameters}; use czkawka_core::similar_images::{SimilarImages, SimilarImagesParameters}; use czkawka_core::similar_videos::{SimilarVideos, SimilarVideosParameters}; use czkawka_core::temporary::Temporary; use fun_time::fun_time; use gtk4::prelude::*; use gtk4::Grid; use crate::gui_structs::gui_data::GuiData; use crate::help_combo_box::{ AUDIO_TYPE_CHECK_METHOD_COMBO_BOX, BIG_FILES_CHECK_METHOD_COMBO_BOX, DUPLICATES_CHECK_METHOD_COMBO_BOX, DUPLICATES_HASH_TYPE_COMBO_BOX, IMAGES_HASH_SIZE_COMBO_BOX, IMAGES_HASH_TYPE_COMBO_BOX, IMAGES_RESIZE_ALGORITHM_COMBO_BOX, }; use crate::help_functions::*; use crate::notebook_enums::*; use crate::taskbar_progress::tbp_flags::TBPF_NOPROGRESS; use crate::{flg, DEFAULT_MAXIMAL_FILE_SIZE, DEFAULT_MINIMAL_CACHE_SIZE, DEFAULT_MINIMAL_FILE_SIZE}; #[allow(clippy::too_many_arguments)] pub fn connect_button_search(gui_data: &GuiData, result_sender: Sender, progress_sender: Sender) { let buttons_array = gui_data.bottom_buttons.buttons_array.clone(); let buttons_search_clone = gui_data.bottom_buttons.buttons_search.clone(); let grid_progress = gui_data.progress_window.grid_progress.clone(); let label_stage = gui_data.progress_window.label_stage.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let notebook_upper = gui_data.upper_notebook.notebook_upper.clone(); let progress_bar_all_stages = gui_data.progress_window.progress_bar_all_stages.clone(); let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); let stop_receiver = gui_data.stop_receiver.clone(); let taskbar_state = gui_data.taskbar_state.clone(); let text_view_errors = gui_data.text_view_errors.clone(); let tree_view_included_directories = gui_data.upper_notebook.tree_view_included_directories.clone(); let window_progress = gui_data.progress_window.window_progress.clone(); let entry_info = gui_data.entry_info.clone(); let button_settings = gui_data.header.button_settings.clone(); let button_app_info = gui_data.header.button_app_info.clone(); let gui_data = gui_data.clone(); buttons_search_clone.connect_clicked(move |_| { let loaded_commons = LoadedCommonItems::load_items(&gui_data); // Check if user selected all referenced folders let list_store_included_directories = get_list_store(&tree_view_included_directories); if check_if_list_store_column_have_all_same_values(&list_store_included_directories, ColumnsIncludedDirectory::ReferenceButton as i32, true) { entry_info.set_text(&flg!("selected_all_reference_folders")); return; } let show_dialog = Arc::new(AtomicBool::new(true)); window_progress.set_title(Some(&flg!("window_progress_title"))); hide_all_buttons(&buttons_array); notebook_main.set_sensitive(false); notebook_upper.set_sensitive(false); button_settings.set_sensitive(false); button_app_info.set_sensitive(false); entry_info.set_text(&flg!("searching_for_data")); // Resets progress bars progress_bar_all_stages.set_fraction(0f64); progress_bar_current_stage.set_fraction(0f64); reset_text_view(&text_view_errors); let result_sender = result_sender.clone(); let stop_receiver = stop_receiver.clone(); // Consume any stale stop messages. stop_receiver.try_iter().for_each(|()| ()); label_stage.show(); let progress_sender = progress_sender.clone(); match to_notebook_main_enum(notebook_main.current_page().expect("Current page not set")) { NotebookMainEnum::Duplicate => duplicate_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender), NotebookMainEnum::EmptyFiles => empty_files_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender), NotebookMainEnum::EmptyDirectories => empty_dirs_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender), NotebookMainEnum::BigFiles => big_files_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender), NotebookMainEnum::Temporary => temporary_files_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender), NotebookMainEnum::SimilarImages => similar_image_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender), NotebookMainEnum::SimilarVideos => similar_video_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender), NotebookMainEnum::SameMusic => same_music_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender, &show_dialog), NotebookMainEnum::Symlinks => bad_symlinks_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender), NotebookMainEnum::BrokenFiles => broken_files_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender, &show_dialog), NotebookMainEnum::BadExtensions => bad_extensions_search(&gui_data, loaded_commons, stop_receiver, result_sender, &grid_progress, progress_sender), } window_progress.set_default_size(1, 1); // Show progress dialog if show_dialog.load(Ordering::Relaxed) { window_progress.show(); taskbar_state.borrow().show(); taskbar_state.borrow().set_progress_state(TBPF_NOPROGRESS); } }); } struct LoadedCommonItems { included_directories: Vec, excluded_directories: Vec, reference_directories: Vec, recursive_search: bool, excluded_items: Vec, allowed_extensions: String, excluded_extensions: String, hide_hard_links: bool, use_cache: bool, save_also_as_json: bool, minimal_cache_file_size: u64, minimal_file_size: u64, maximal_file_size: u64, ignore_other_filesystems: bool, } impl LoadedCommonItems { fn load_items(gui_data: &GuiData) -> Self { let check_button_settings_one_filesystem = gui_data.settings.check_button_settings_one_filesystem.clone(); let check_button_recursive = gui_data.upper_notebook.check_button_recursive.clone(); let check_button_settings_hide_hard_links = gui_data.settings.check_button_settings_hide_hard_links.clone(); let check_button_settings_use_cache = gui_data.settings.check_button_settings_use_cache.clone(); let entry_allowed_extensions = gui_data.upper_notebook.entry_allowed_extensions.clone(); let entry_excluded_extensions = gui_data.upper_notebook.entry_excluded_extensions.clone(); let entry_excluded_items = gui_data.upper_notebook.entry_excluded_items.clone(); let entry_general_maximal_size = gui_data.upper_notebook.entry_general_maximal_size.clone(); let entry_general_minimal_size = gui_data.upper_notebook.entry_general_minimal_size.clone(); let entry_settings_cache_file_minimal_size = gui_data.settings.entry_settings_cache_file_minimal_size.clone(); let tree_view_excluded_directories = gui_data.upper_notebook.tree_view_excluded_directories.clone(); let tree_view_included_directories = gui_data.upper_notebook.tree_view_included_directories.clone(); let check_button_settings_save_also_json = gui_data.settings.check_button_settings_save_also_json.clone(); let included_directories = get_path_buf_from_vector_of_strings(&get_string_from_list_store(&tree_view_included_directories, ColumnsIncludedDirectory::Path as i32, None)); let excluded_directories = get_path_buf_from_vector_of_strings(&get_string_from_list_store(&tree_view_excluded_directories, ColumnsExcludedDirectory::Path as i32, None)); let reference_directories = get_path_buf_from_vector_of_strings(&get_string_from_list_store( &tree_view_included_directories, ColumnsIncludedDirectory::Path as i32, Some(ColumnsIncludedDirectory::ReferenceButton as i32), )); let recursive_search = check_button_recursive.is_active(); let excluded_items = entry_excluded_items.text().as_str().split(',').map(ToString::to_string).collect::>(); let allowed_extensions = entry_allowed_extensions.text().as_str().to_string(); let excluded_extensions = entry_excluded_extensions.text().as_str().to_string(); let hide_hard_links = check_button_settings_hide_hard_links.is_active(); let use_cache = check_button_settings_use_cache.is_active(); let save_also_as_json = check_button_settings_save_also_json.is_active(); let minimal_cache_file_size = entry_settings_cache_file_minimal_size .text() .as_str() .parse::() .unwrap_or_else(|_| DEFAULT_MINIMAL_CACHE_SIZE.parse::().expect("Failed to parse minimal_cache_file_size")); let minimal_file_size = entry_general_minimal_size .text() .as_str() .parse::() .unwrap_or_else(|_| DEFAULT_MINIMAL_FILE_SIZE.parse::().expect("Failed to parse minimal_file_size")); let maximal_file_size = entry_general_maximal_size .text() .as_str() .parse::() .unwrap_or_else(|_| DEFAULT_MAXIMAL_FILE_SIZE.parse::().expect("Failed to parse maximal_file_size")); let ignore_other_filesystems = check_button_settings_one_filesystem.is_active(); LoadedCommonItems { included_directories, excluded_directories, reference_directories, recursive_search, excluded_items, allowed_extensions, excluded_extensions, hide_hard_links, use_cache, save_also_as_json, minimal_cache_file_size, minimal_file_size, maximal_file_size, ignore_other_filesystems, } } } fn duplicate_search( gui_data: &GuiData, loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, result_sender: Sender, grid_progress: &Grid, progress_data_sender: Sender, ) { grid_progress.show(); let combo_box_duplicate_check_method = gui_data.main_notebook.combo_box_duplicate_check_method.clone(); let combo_box_duplicate_hash_type = gui_data.main_notebook.combo_box_duplicate_hash_type.clone(); let check_button_duplicates_use_prehash_cache = gui_data.settings.check_button_duplicates_use_prehash_cache.clone(); let check_button_duplicate_case_sensitive_name: gtk4::CheckButton = gui_data.main_notebook.check_button_duplicate_case_sensitive_name.clone(); let check_button_settings_duplicates_delete_outdated_cache = gui_data.settings.check_button_settings_duplicates_delete_outdated_cache.clone(); let entry_settings_prehash_cache_file_minimal_size = gui_data.settings.entry_settings_prehash_cache_file_minimal_size.clone(); let image_preview_duplicates = gui_data.main_notebook.image_preview_duplicates.clone(); let tree_view_duplicate_finder = gui_data.main_notebook.tree_view_duplicate_finder.clone(); image_preview_duplicates.hide(); clean_tree_view(&tree_view_duplicate_finder); let check_method_index = combo_box_duplicate_check_method.active().expect("Failed to get active item") as usize; let check_method = DUPLICATES_CHECK_METHOD_COMBO_BOX[check_method_index].check_method; let hash_type_index = combo_box_duplicate_hash_type.active().expect("Failed to get active item") as usize; let hash_type = DUPLICATES_HASH_TYPE_COMBO_BOX[hash_type_index].hash_type; let use_prehash_cache = check_button_duplicates_use_prehash_cache.is_active(); let minimal_prehash_cache_file_size = entry_settings_prehash_cache_file_minimal_size.text().as_str().parse::().unwrap_or(0); let case_sensitive_name_comparison = check_button_duplicate_case_sensitive_name.is_active(); let delete_outdated_cache = check_button_settings_duplicates_delete_outdated_cache.is_active(); // Find duplicates thread::Builder::new() .stack_size(DEFAULT_THREAD_SIZE) .spawn(move || { let params = DuplicateFinderParameters::new( check_method, hash_type, loaded_commons.hide_hard_links, use_prehash_cache, loaded_commons.minimal_cache_file_size, minimal_prehash_cache_file_size, case_sensitive_name_comparison, ); let mut item = DuplicateFinder::new(params); set_common_settings(&mut item, &loaded_commons); item.set_delete_outdated_cache(delete_outdated_cache); item.find_duplicates(Some(&stop_receiver), Some(&progress_data_sender)); result_sender.send(Message::Duplicates(item)).expect("Failed to send Duplicates message"); }) .expect("Failed to spawn DuplicateFinder thread"); } fn empty_files_search( gui_data: &GuiData, loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, result_sender: Sender, grid_progress: &Grid, progress_data_sender: Sender, ) { grid_progress.hide(); let tree_view_empty_files_finder = gui_data.main_notebook.tree_view_empty_files_finder.clone(); clean_tree_view(&tree_view_empty_files_finder); // Find empty files thread::Builder::new() .stack_size(DEFAULT_THREAD_SIZE) .spawn(move || { let mut item = EmptyFiles::new(); set_common_settings(&mut item, &loaded_commons); item.find_empty_files(Some(&stop_receiver), Some(&progress_data_sender)); result_sender.send(Message::EmptyFiles(item)).expect("Failed to send EmptyFiles message"); }) .expect("Failed to spawn EmptyFiles thread"); } fn empty_dirs_search( gui_data: &GuiData, loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, result_sender: Sender, grid_progress: &Grid, progress_data_sender: Sender, ) { grid_progress.hide(); let tree_view_empty_folder_finder = gui_data.main_notebook.tree_view_empty_folder_finder.clone(); clean_tree_view(&tree_view_empty_folder_finder); thread::Builder::new() .stack_size(DEFAULT_THREAD_SIZE) .spawn(move || { let mut item = EmptyFolder::new(); set_common_settings(&mut item, &loaded_commons); item.find_empty_folders(Some(&stop_receiver), Some(&progress_data_sender)); result_sender.send(Message::EmptyFolders(item)).expect("Failed to send EmptyFolders message"); }) .expect("Failed to spawn EmptyFolders thread"); } fn big_files_search( gui_data: &GuiData, loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, result_sender: Sender, grid_progress: &Grid, progress_data_sender: Sender, ) { grid_progress.hide(); let combo_box_big_files_mode = gui_data.main_notebook.combo_box_big_files_mode.clone(); let entry_big_files_number = gui_data.main_notebook.entry_big_files_number.clone(); let tree_view_big_files_finder = gui_data.main_notebook.tree_view_big_files_finder.clone(); clean_tree_view(&tree_view_big_files_finder); let big_files_mode_index = combo_box_big_files_mode.active().expect("Failed to get active item") as usize; let big_files_mode = BIG_FILES_CHECK_METHOD_COMBO_BOX[big_files_mode_index].check_method; let numbers_of_files_to_check = entry_big_files_number.text().as_str().parse::().unwrap_or(50); thread::Builder::new() .stack_size(DEFAULT_THREAD_SIZE) .spawn(move || { let params = BigFileParameters::new(numbers_of_files_to_check, big_files_mode); let mut item = BigFile::new(params); set_common_settings(&mut item, &loaded_commons); item.find_big_files(Some(&stop_receiver), Some(&progress_data_sender)); result_sender.send(Message::BigFiles(item)).expect("Failed to send BigFiles message"); }) .expect("Failed to spawn BigFiles thread"); } fn temporary_files_search( gui_data: &GuiData, loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, result_sender: Sender, grid_progress: &Grid, progress_data_sender: Sender, ) { grid_progress.hide(); let tree_view_temporary_files_finder = gui_data.main_notebook.tree_view_temporary_files_finder.clone(); clean_tree_view(&tree_view_temporary_files_finder); thread::Builder::new() .stack_size(DEFAULT_THREAD_SIZE) .spawn(move || { let mut item = Temporary::new(); set_common_settings(&mut item, &loaded_commons); item.find_temporary_files(Some(&stop_receiver), Some(&progress_data_sender)); result_sender.send(Message::Temporary(item)).expect("Failed to send Temporary message"); }) .expect("Failed to spawn Temporary thread"); } fn same_music_search( gui_data: &GuiData, loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, result_sender: Sender, grid_progress: &Grid, progress_data_sender: Sender, show_dialog: &Arc, ) { grid_progress.show(); let check_button_music_artist: gtk4::CheckButton = gui_data.main_notebook.check_button_music_artist.clone(); let check_button_music_title: gtk4::CheckButton = gui_data.main_notebook.check_button_music_title.clone(); let check_button_music_year: gtk4::CheckButton = gui_data.main_notebook.check_button_music_year.clone(); let check_button_music_genre: gtk4::CheckButton = gui_data.main_notebook.check_button_music_genre.clone(); let check_button_music_length: gtk4::CheckButton = gui_data.main_notebook.check_button_music_length.clone(); let check_button_music_bitrate: gtk4::CheckButton = gui_data.main_notebook.check_button_music_bitrate.clone(); let tree_view_same_music_finder = gui_data.main_notebook.tree_view_same_music_finder.clone(); let combo_box_audio_check_type = gui_data.main_notebook.combo_box_audio_check_type.clone(); let check_button_music_approximate_comparison = gui_data.main_notebook.check_button_music_approximate_comparison.clone(); let check_button_music_compare_only_in_title_group = gui_data.main_notebook.check_button_music_compare_only_in_title_group.clone(); let scale_seconds_same_music = gui_data.main_notebook.scale_seconds_same_music.clone(); let scale_similarity_same_music = gui_data.main_notebook.scale_similarity_same_music.clone(); clean_tree_view(&tree_view_same_music_finder); let approximate_comparison = check_button_music_approximate_comparison.is_active(); let comparison_only_in_title_group = check_button_music_compare_only_in_title_group.is_active(); let mut music_similarity: MusicSimilarity = MusicSimilarity::NONE; if check_button_music_title.is_active() { music_similarity |= MusicSimilarity::TRACK_TITLE; } if check_button_music_artist.is_active() { music_similarity |= MusicSimilarity::TRACK_ARTIST; } if check_button_music_year.is_active() { music_similarity |= MusicSimilarity::YEAR; } if check_button_music_bitrate.is_active() { music_similarity |= MusicSimilarity::BITRATE; } if check_button_music_genre.is_active() { music_similarity |= MusicSimilarity::GENRE; } if check_button_music_length.is_active() { music_similarity |= MusicSimilarity::LENGTH; } let check_method_index = combo_box_audio_check_type.active().expect("Failed to get active item") as usize; let check_method = AUDIO_TYPE_CHECK_METHOD_COMBO_BOX[check_method_index].check_method; let maximum_difference = scale_similarity_same_music.value(); let minimum_segment_duration = scale_seconds_same_music.value() as f32; if music_similarity != MusicSimilarity::NONE || check_method == CheckingMethod::AudioContent { thread::Builder::new() .stack_size(DEFAULT_THREAD_SIZE) .spawn(move || { let params = SameMusicParameters::new( music_similarity, approximate_comparison, check_method, minimum_segment_duration, maximum_difference, comparison_only_in_title_group, ); let mut item = SameMusic::new(params); set_common_settings(&mut item, &loaded_commons); item.find_same_music(Some(&stop_receiver), Some(&progress_data_sender)); result_sender.send(Message::SameMusic(item)).expect("Failed to send SameMusic message"); }) .expect("Failed to spawn SameMusic thread"); } else { let shared_buttons = gui_data.shared_buttons.clone(); let buttons_array = gui_data.bottom_buttons.buttons_array.clone(); let buttons_names = gui_data.bottom_buttons.buttons_names; let entry_info = gui_data.entry_info.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let notebook_upper = gui_data.upper_notebook.notebook_upper.clone(); let button_settings = gui_data.header.button_settings.clone(); let button_app_info = gui_data.header.button_app_info.clone(); set_buttons( &mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SameMusic).expect("Failed to get SameMusic button"), &buttons_array, &buttons_names, ); entry_info.set_text(&flg!("search_not_choosing_any_music")); show_dialog.store(false, Ordering::Relaxed); notebook_main.set_sensitive(true); notebook_upper.set_sensitive(true); button_settings.set_sensitive(true); button_app_info.set_sensitive(true); } } fn broken_files_search( gui_data: &GuiData, loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, result_sender: Sender, grid_progress: &Grid, progress_data_sender: Sender, show_dialog: &Arc, ) { grid_progress.show(); let check_button_broken_files_archive: gtk4::CheckButton = gui_data.main_notebook.check_button_broken_files_archive.clone(); let check_button_broken_files_pdf: gtk4::CheckButton = gui_data.main_notebook.check_button_broken_files_pdf.clone(); let check_button_broken_files_audio: gtk4::CheckButton = gui_data.main_notebook.check_button_broken_files_audio.clone(); let check_button_broken_files_image: gtk4::CheckButton = gui_data.main_notebook.check_button_broken_files_image.clone(); let tree_view_broken_files = gui_data.main_notebook.tree_view_broken_files.clone(); clean_tree_view(&tree_view_broken_files); let mut checked_types: CheckedTypes = CheckedTypes::NONE; if check_button_broken_files_audio.is_active() { checked_types |= CheckedTypes::AUDIO; } if check_button_broken_files_pdf.is_active() { checked_types |= CheckedTypes::PDF; } if check_button_broken_files_image.is_active() { checked_types |= CheckedTypes::IMAGE; } if check_button_broken_files_archive.is_active() { checked_types |= CheckedTypes::ARCHIVE; } if checked_types != CheckedTypes::NONE { thread::Builder::new() .stack_size(DEFAULT_THREAD_SIZE) .spawn(move || { let params = BrokenFilesParameters::new(checked_types); let mut item = BrokenFiles::new(params); set_common_settings(&mut item, &loaded_commons); item.find_broken_files(Some(&stop_receiver), Some(&progress_data_sender)); result_sender.send(Message::BrokenFiles(item)).expect("Failed to send BrokenFiles message"); }) .expect("Failed to spawn BrokenFiles thread"); } else { let shared_buttons = gui_data.shared_buttons.clone(); let buttons_array = gui_data.bottom_buttons.buttons_array.clone(); let buttons_names = gui_data.bottom_buttons.buttons_names; let entry_info = gui_data.entry_info.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let notebook_upper = gui_data.upper_notebook.notebook_upper.clone(); let button_settings = gui_data.header.button_settings.clone(); let button_app_info = gui_data.header.button_app_info.clone(); set_buttons( &mut *shared_buttons .borrow_mut() .get_mut(&NotebookMainEnum::BrokenFiles) .expect("Failed to get BrokenFiles button"), &buttons_array, &buttons_names, ); entry_info.set_text(&flg!("search_not_choosing_any_broken_files")); show_dialog.store(false, Ordering::Relaxed); notebook_main.set_sensitive(true); notebook_upper.set_sensitive(true); button_settings.set_sensitive(true); button_app_info.set_sensitive(true); } } fn similar_image_search( gui_data: &GuiData, loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, result_sender: Sender, grid_progress: &Grid, progress_data_sender: Sender, ) { grid_progress.show(); let combo_box_image_hash_size = gui_data.main_notebook.combo_box_image_hash_size.clone(); let combo_box_image_hash_algorithm = gui_data.main_notebook.combo_box_image_hash_algorithm.clone(); let combo_box_image_resize_algorithm = gui_data.main_notebook.combo_box_image_resize_algorithm.clone(); let check_button_image_ignore_same_size = gui_data.main_notebook.check_button_image_ignore_same_size.clone(); let check_button_settings_similar_images_delete_outdated_cache = gui_data.settings.check_button_settings_similar_images_delete_outdated_cache.clone(); let image_preview_similar_images = gui_data.main_notebook.image_preview_similar_images.clone(); let scale_similarity_similar_images = gui_data.main_notebook.scale_similarity_similar_images.clone(); let tree_view_similar_images_finder = gui_data.main_notebook.tree_view_similar_images_finder.clone(); clean_tree_view(&tree_view_similar_images_finder); image_preview_similar_images.hide(); let hash_size_index = combo_box_image_hash_size.active().expect("Failed to get active item") as usize; let hash_size = IMAGES_HASH_SIZE_COMBO_BOX[hash_size_index] as u8; let image_filter_index = combo_box_image_resize_algorithm.active().expect("Failed to get active item") as usize; let image_filter = IMAGES_RESIZE_ALGORITHM_COMBO_BOX[image_filter_index].filter; let hash_alg_index = combo_box_image_hash_algorithm.active().expect("Failed to get active item") as usize; let hash_alg = IMAGES_HASH_TYPE_COMBO_BOX[hash_alg_index].hash_alg; let ignore_same_size = check_button_image_ignore_same_size.is_active(); let similarity = scale_similarity_similar_images.value() as u32; let delete_outdated_cache = check_button_settings_similar_images_delete_outdated_cache.is_active(); thread::Builder::new() .stack_size(DEFAULT_THREAD_SIZE) .spawn(move || { let params = SimilarImagesParameters::new(similarity, hash_size, hash_alg, image_filter, ignore_same_size, loaded_commons.hide_hard_links); let mut item = SimilarImages::new(params); set_common_settings(&mut item, &loaded_commons); item.set_delete_outdated_cache(delete_outdated_cache); item.find_similar_images(Some(&stop_receiver), Some(&progress_data_sender)); result_sender.send(Message::SimilarImages(item)).expect("Failed to send SimilarImages message"); }) .expect("Failed to spawn SimilarImages thread"); } fn similar_video_search( gui_data: &GuiData, loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, result_sender: Sender, grid_progress: &Grid, progress_data_sender: Sender, ) { grid_progress.show(); let check_button_video_ignore_same_size = gui_data.main_notebook.check_button_video_ignore_same_size.clone(); let check_button_settings_similar_videos_delete_outdated_cache = gui_data.settings.check_button_settings_similar_videos_delete_outdated_cache.clone(); let scale_similarity_similar_videos = gui_data.main_notebook.scale_similarity_similar_videos.clone(); let tree_view_similar_videos_finder = gui_data.main_notebook.tree_view_similar_videos_finder.clone(); clean_tree_view(&tree_view_similar_videos_finder); let tolerance = scale_similarity_similar_videos.value() as i32; let delete_outdated_cache = check_button_settings_similar_videos_delete_outdated_cache.is_active(); let ignore_same_size = check_button_video_ignore_same_size.is_active(); thread::Builder::new() .stack_size(DEFAULT_THREAD_SIZE) .spawn(move || { let params = SimilarVideosParameters::new(tolerance, ignore_same_size, loaded_commons.hide_hard_links); let mut item = SimilarVideos::new(params); set_common_settings(&mut item, &loaded_commons); item.set_delete_outdated_cache(delete_outdated_cache); item.find_similar_videos(Some(&stop_receiver), Some(&progress_data_sender)); result_sender.send(Message::SimilarVideos(item)).expect("Failed to send SimilarVideos message"); }) .expect("Failed to spawn SimilarVideos thread"); } fn bad_symlinks_search( gui_data: &GuiData, loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, result_sender: Sender, grid_progress: &Grid, progress_data_sender: Sender, ) { grid_progress.hide(); let tree_view_invalid_symlinks = gui_data.main_notebook.tree_view_invalid_symlinks.clone(); clean_tree_view(&tree_view_invalid_symlinks); thread::Builder::new() .stack_size(DEFAULT_THREAD_SIZE) .spawn(move || { let mut item = InvalidSymlinks::new(); set_common_settings(&mut item, &loaded_commons); item.find_invalid_links(Some(&stop_receiver), Some(&progress_data_sender)); result_sender.send(Message::InvalidSymlinks(item)).expect("Failed to send InvalidSymlinks message"); }) .expect("Failed to spawn InvalidSymlinks thread"); } fn bad_extensions_search( gui_data: &GuiData, loaded_commons: LoadedCommonItems, stop_receiver: Receiver<()>, result_sender: Sender, grid_progress: &Grid, progress_data_sender: Sender, ) { grid_progress.show(); let tree_view_bad_extensions = gui_data.main_notebook.tree_view_bad_extensions.clone(); clean_tree_view(&tree_view_bad_extensions); thread::Builder::new() .stack_size(DEFAULT_THREAD_SIZE) .spawn(move || { let params = BadExtensionsParameters::new(); let mut item = BadExtensions::new(params); set_common_settings(&mut item, &loaded_commons); item.find_bad_extensions_files(Some(&stop_receiver), Some(&progress_data_sender)); result_sender.send(Message::BadExtensions(item)).expect("Failed to send BadExtensions message"); }) .expect("Failed to spawn BadExtensions thread"); } fn set_common_settings(component: &mut T, loaded_commons: &LoadedCommonItems) where T: CommonData, { component.set_included_directory(loaded_commons.included_directories.clone()); component.set_excluded_directory(loaded_commons.excluded_directories.clone()); component.set_reference_directory(loaded_commons.reference_directories.clone()); component.set_recursive_search(loaded_commons.recursive_search); component.set_allowed_extensions(loaded_commons.allowed_extensions.clone()); component.set_excluded_extensions(loaded_commons.excluded_extensions.clone()); component.set_excluded_items(loaded_commons.excluded_items.clone()); component.set_exclude_other_filesystems(loaded_commons.ignore_other_filesystems); component.set_use_cache(loaded_commons.use_cache); component.set_save_also_as_json(loaded_commons.save_also_as_json); component.set_minimal_file_size(loaded_commons.minimal_file_size); component.set_maximal_file_size(loaded_commons.maximal_file_size); } #[fun_time(message = "clean_tree_view", level = "debug")] fn clean_tree_view(tree_view: >k4::TreeView) { let list_store = get_list_store(tree_view); let mut all_iters = Vec::new(); let first_iter = list_store.iter_first(); if let Some(first_iter) = first_iter { loop { all_iters.push(first_iter); if !list_store.iter_next(&first_iter) { break; } } } all_iters.reverse(); for iter in all_iters { list_store.remove(&iter); } } czkawka_gui-8.0.0/src/connect_things/connect_button_select.rs000064400000000000000000000101031046102023000226500ustar 00000000000000use gtk4::prelude::*; use crate::gui_structs::gui_data::GuiData; use crate::gui_structs::gui_popovers_select::GuiSelectPopovers; use crate::help_functions::PopoverTypes; use crate::notebook_enums::*; use crate::notebook_info::NOTEBOOKS_INFO; pub fn connect_button_select(gui_data: &GuiData) { let popovers_select = gui_data.popovers_select.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let gc_buttons_select = gui_data.bottom_buttons.gc_buttons_select.clone(); gc_buttons_select.connect_pressed(move |_, _, _, _| { show_required_popovers(&popovers_select, to_notebook_main_enum(notebook_main.current_page().expect("Current page not set"))); }); } fn show_required_popovers(popovers_select: &GuiSelectPopovers, current_mode: NotebookMainEnum) { let buttons_popover_select_all = popovers_select.buttons_popover_select_all.clone(); let buttons_popover_unselect_all = popovers_select.buttons_popover_unselect_all.clone(); let buttons_popover_reverse = popovers_select.buttons_popover_reverse.clone(); let buttons_popover_select_all_except_oldest = popovers_select.buttons_popover_select_all_except_oldest.clone(); let buttons_popover_select_all_except_newest = popovers_select.buttons_popover_select_all_except_newest.clone(); let buttons_popover_select_one_oldest = popovers_select.buttons_popover_select_one_oldest.clone(); let buttons_popover_select_one_newest = popovers_select.buttons_popover_select_one_newest.clone(); let buttons_popover_select_custom = popovers_select.buttons_popover_select_custom.clone(); let buttons_popover_unselect_custom = popovers_select.buttons_popover_unselect_custom.clone(); let buttons_popover_select_all_images_except_biggest = popovers_select.buttons_popover_select_all_images_except_biggest.clone(); let buttons_popover_select_all_images_except_smallest = popovers_select.buttons_popover_select_all_images_except_smallest.clone(); let separator_select_custom = popovers_select.separator_select_custom.clone(); let separator_select_date = popovers_select.separator_select_date.clone(); let separator_select_image_size = popovers_select.separator_select_image_size.clone(); let separator_select_reverse = popovers_select.separator_select_reverse.clone(); let arr = &NOTEBOOKS_INFO[current_mode as usize].available_modes; if arr.contains(&PopoverTypes::All) { buttons_popover_select_all.show(); buttons_popover_unselect_all.show(); } else { buttons_popover_select_all.hide(); buttons_popover_unselect_all.hide(); } if arr.contains(&PopoverTypes::Size) { buttons_popover_select_all_images_except_biggest.show(); buttons_popover_select_all_images_except_smallest.show(); separator_select_image_size.show(); } else { buttons_popover_select_all_images_except_biggest.hide(); buttons_popover_select_all_images_except_smallest.hide(); separator_select_image_size.hide(); } if arr.contains(&PopoverTypes::Reverse) { buttons_popover_reverse.show(); separator_select_reverse.show(); } else { buttons_popover_reverse.hide(); separator_select_reverse.hide(); } if arr.contains(&PopoverTypes::Custom) { buttons_popover_select_custom.show(); buttons_popover_unselect_custom.show(); separator_select_custom.show(); } else { buttons_popover_select_custom.hide(); buttons_popover_unselect_custom.hide(); separator_select_custom.hide(); } if arr.contains(&PopoverTypes::Date) { buttons_popover_select_all_except_oldest.show(); buttons_popover_select_all_except_newest.show(); buttons_popover_select_one_oldest.show(); buttons_popover_select_one_newest.show(); separator_select_date.show(); } else { buttons_popover_select_all_except_oldest.hide(); buttons_popover_select_all_except_newest.hide(); buttons_popover_select_one_oldest.hide(); buttons_popover_select_one_newest.hide(); separator_select_date.hide(); } } czkawka_gui-8.0.0/src/connect_things/connect_button_sort.rs000064400000000000000000000040111046102023000223610ustar 00000000000000use gtk4::prelude::*; use crate::gui_structs::gui_data::GuiData; use crate::gui_structs::gui_popovers_sort::GuiSortPopovers; use crate::help_functions::PopoverTypes; use crate::notebook_enums::{to_notebook_main_enum, NotebookMainEnum}; use crate::notebook_info::NOTEBOOKS_INFO; pub fn connect_button_sort(gui_data: &GuiData) { let popovers_sort = gui_data.popovers_sort.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let gc_buttons_sort = gui_data.bottom_buttons.gc_buttons_sort.clone(); gc_buttons_sort.connect_pressed(move |_, _, _, _| { show_required_popovers(&popovers_sort, to_notebook_main_enum(notebook_main.current_page().expect("Current page not set"))); }); } fn show_required_popovers(popovers_sort: &GuiSortPopovers, current_mode: NotebookMainEnum) { let buttons_popover_sort_file_name = popovers_sort.buttons_popover_sort_file_name.clone(); let buttons_popover_sort_size = popovers_sort.buttons_popover_sort_size.clone(); let buttons_popover_sort_folder_name = popovers_sort.buttons_popover_sort_folder_name.clone(); let buttons_popover_sort_full_name = popovers_sort.buttons_popover_sort_full_name.clone(); let buttons_popover_sort_selection = popovers_sort.buttons_popover_sort_selection.clone(); let arr = &NOTEBOOKS_INFO[current_mode as usize].available_modes; buttons_popover_sort_full_name.hide(); if arr.contains(&PopoverTypes::All) { buttons_popover_sort_selection.show(); buttons_popover_sort_file_name.show(); buttons_popover_sort_folder_name.show(); // buttons_popover_sort_full_name.show(); // TODO, this needs to be handled a little different } else { buttons_popover_sort_selection.hide(); buttons_popover_sort_file_name.hide(); buttons_popover_sort_folder_name.hide(); // buttons_popover_sort_full_name.hide(); } if arr.contains(&PopoverTypes::Size) { buttons_popover_sort_size.show(); } else { buttons_popover_sort_size.hide(); } } czkawka_gui-8.0.0/src/connect_things/connect_button_stop.rs000064400000000000000000000026411046102023000223660ustar 00000000000000use crossbeam_channel::{Sender, TrySendError}; use gtk4::prelude::*; use crate::flg; use crate::gui_structs::gui_data::GuiData; use crate::help_functions::KEY_ENTER; fn send_stop_message(stop_sender: &Sender<()>) { stop_sender .try_send(()) .map_or_else(|e| if matches!(e, TrySendError::Full(())) { Ok(()) } else { Err(e) }, |()| Ok(())) .expect("Failed to send stop message"); } pub fn connect_button_stop(gui_data: &GuiData) { let evk_button_stop_in_dialog = gui_data.progress_window.evk_button_stop_in_dialog.clone(); let stop_dialog = gui_data.progress_window.window_progress.clone(); let stop_sender = gui_data.stop_sender.clone(); evk_button_stop_in_dialog.connect_key_released(move |_, _, key_code, _| { if key_code == KEY_ENTER { stop_dialog.set_title(Some(&format!("{} ({})", flg!("window_progress_title"), flg!("progress_stop_additional_message")))); send_stop_message(&stop_sender); } }); let button_stop_in_dialog = gui_data.progress_window.button_stop_in_dialog.clone(); let stop_dialog = gui_data.progress_window.window_progress.clone(); let stop_sender = gui_data.stop_sender.clone(); button_stop_in_dialog.connect_clicked(move |_a| { stop_dialog.set_title(Some(&format!("{} ({})", flg!("window_progress_title"), flg!("progress_stop_additional_message")))); send_stop_message(&stop_sender); }); } czkawka_gui-8.0.0/src/connect_things/connect_change_language.rs000064400000000000000000000047621046102023000231040ustar 00000000000000use gtk4::prelude::*; use i18n_embed::unic_langid::LanguageIdentifier; use i18n_embed::DesktopLanguageRequester; use crate::language_functions::get_language_from_combo_box_text; use crate::{localizer_gui, GuiData, LANGUAGES_ALL}; // use i18n_embed::{DesktopLanguageRequester, Localizer}; pub fn connect_change_language(gui_data: &GuiData) { change_language(gui_data); let combo_box_settings_language = gui_data.settings.combo_box_settings_language.clone(); let gui_data = gui_data.clone(); combo_box_settings_language.connect_changed(move |_| { change_language(&gui_data); }); } fn change_language(gui_data: &GuiData) { let localizers = vec![ ("czkawka_core", czkawka_core::localizer_core::localizer_core()), ("czkawka_gui", localizer_gui::localizer_gui()), ]; let lang_short = get_language_from_combo_box_text(&gui_data.settings.combo_box_settings_language.active_text().expect("No active text")).short_text; let lang_identifier = vec![LanguageIdentifier::from_bytes(lang_short.as_bytes()).expect("Failed to create LanguageIdentifier")]; for (lib, localizer) in localizers { if let Err(error) = localizer.select(&lang_identifier) { eprintln!("Error while loadings languages for {lib} {error:?}"); } } gui_data.update_language(); } pub fn load_system_language(gui_data: &GuiData) { let requested_languages = DesktopLanguageRequester::requested_languages(); if let Some(language) = requested_languages.first() { let old_short_lang = language.to_string(); let mut short_lang = String::new(); // removes from e.g. en_zb, ending _zd since Czkawka don't support this(maybe could add this in future, but only when) for i in old_short_lang.chars() { if i.is_ascii_alphabetic() { short_lang.push(i); } else { break; } } // let mut found: bool = false; for (index, lang) in LANGUAGES_ALL.iter().enumerate() { if lang.short_text == short_lang { // found = true; gui_data.settings.combo_box_settings_language.set_active(Some(index as u32)); break; } } // if found { // println!("INFO: Default system language {} is available, so choosing them", short_lang); // } else { // println!("INFO: Default system language {} is not available, using English(en) instead", short_lang); // } } } czkawka_gui-8.0.0/src/connect_things/connect_duplicate_buttons.rs000064400000000000000000000033061046102023000235350ustar 00000000000000use czkawka_core::common_dir_traversal::CheckingMethod; use gtk4::prelude::*; use crate::gui_structs::gui_data::GuiData; use crate::help_combo_box::DUPLICATES_CHECK_METHOD_COMBO_BOX; pub fn connect_duplicate_combo_box(gui_data: &GuiData) { let combo_box_duplicate_check_method = gui_data.main_notebook.combo_box_duplicate_check_method.clone(); let combo_box_duplicate_hash_type = gui_data.main_notebook.combo_box_duplicate_hash_type.clone(); let label_duplicate_hash_type = gui_data.main_notebook.label_duplicate_hash_type.clone(); let check_button_duplicate_case_sensitive_name = gui_data.main_notebook.check_button_duplicate_case_sensitive_name.clone(); combo_box_duplicate_check_method.connect_changed(move |combo_box_duplicate_check_method| { // None active can be if when adding elements(this signal is activated when e.g. adding new fields or removing them) if let Some(chosen_index) = combo_box_duplicate_check_method.active() { if DUPLICATES_CHECK_METHOD_COMBO_BOX[chosen_index as usize].check_method == CheckingMethod::Hash { combo_box_duplicate_hash_type.set_visible(true); label_duplicate_hash_type.set_visible(true); } else { combo_box_duplicate_hash_type.set_visible(false); label_duplicate_hash_type.set_visible(false); } if [CheckingMethod::Name, CheckingMethod::SizeName].contains(&DUPLICATES_CHECK_METHOD_COMBO_BOX[chosen_index as usize].check_method) { check_button_duplicate_case_sensitive_name.set_visible(true); } else { check_button_duplicate_case_sensitive_name.set_visible(false); } } }); } czkawka_gui-8.0.0/src/connect_things/connect_header_buttons.rs000064400000000000000000000010001046102023000230000ustar 00000000000000use gtk4::prelude::*; use crate::gui_structs::gui_data::GuiData; pub fn connect_button_about(gui_data: &GuiData) { let about_dialog = gui_data.about.about_dialog.clone(); let button_app_info = gui_data.header.button_app_info.clone(); button_app_info.connect_clicked(move |_| { about_dialog.show(); // Prevent from deleting dialog after close about_dialog.connect_close_request(|dialog| { dialog.hide(); glib::Propagation::Stop }); }); } czkawka_gui-8.0.0/src/connect_things/connect_notebook_tabs.rs000064400000000000000000000014441046102023000226370ustar 00000000000000use crate::gui_structs::gui_data::GuiData; use crate::help_functions::*; use crate::notebook_enums::*; pub fn connect_notebook_tabs(gui_data: &GuiData) { let shared_buttons = gui_data.shared_buttons.clone(); let buttons_array = gui_data.bottom_buttons.buttons_array.clone(); let notebook_main_clone = gui_data.main_notebook.notebook_main.clone(); let buttons_names = gui_data.bottom_buttons.buttons_names; notebook_main_clone.connect_switch_page(move |_, _, number| { let current_tab_in_main_notebook = to_notebook_main_enum(number); // Buttons set_buttons( &mut *shared_buttons.borrow_mut().get_mut(¤t_tab_in_main_notebook).expect("Failed to get current tab"), &buttons_array, &buttons_names, ); }); } czkawka_gui-8.0.0/src/connect_things/connect_popovers_select.rs000064400000000000000000001041051046102023000232200ustar 00000000000000use czkawka_core::common::regex_check; use czkawka_core::common_items::new_excluded_item; use gtk4::prelude::*; use gtk4::{ResponseType, TreeIter, Window}; use regex::Regex; use crate::flg; use crate::gui_structs::gui_data::GuiData; use crate::help_functions::*; use crate::notebook_info::NOTEBOOKS_INFO; // File length variable allows users to choose duplicates which have shorter file name // e.g. 'tar.gz' will be selected instead 'tar.gz (copy)' etc. fn popover_select_all(popover: >k4::Popover, tree_view: >k4::TreeView, column_button_selection: u32, column_header: Option) { let model = get_list_store(tree_view); if let Some(iter) = model.iter_first() { if let Some(column_header) = column_header { loop { if !model.get::(&iter, column_header) { model.set_value(&iter, column_button_selection, &true.to_value()); } if !model.iter_next(&iter) { break; } } } else { loop { model.set_value(&iter, column_button_selection, &true.to_value()); if !model.iter_next(&iter) { break; } } } } popover.popdown(); } fn popover_unselect_all(popover: >k4::Popover, tree_view: >k4::TreeView, column_button_selection: u32) { let model = get_list_store(tree_view); if let Some(iter) = model.iter_first() { loop { model.set_value(&iter, column_button_selection, &false.to_value()); if !model.iter_next(&iter) { break; } } } popover.popdown(); } fn popover_reverse(popover: >k4::Popover, tree_view: >k4::TreeView, column_button_selection: u32, column_header: Option) { let model = get_list_store(tree_view); if let Some(iter) = model.iter_first() { if let Some(column_header) = column_header { loop { if !model.get::(&iter, column_header) { let current_value: bool = model.get::(&iter, column_button_selection as i32); model.set_value(&iter, column_button_selection, &(!current_value).to_value()); } if !model.iter_next(&iter) { break; } } } else { loop { let current_value: bool = model.get::(&iter, column_button_selection as i32); model.set_value(&iter, column_button_selection, &(!current_value).to_value()); if !model.iter_next(&iter) { break; } } } } popover.popdown(); } fn popover_all_except_oldest_newest( popover: >k4::Popover, tree_view: >k4::TreeView, column_header: i32, column_modification_as_secs: i32, column_file_name: i32, column_button_selection: u32, except_oldest: bool, ) { let model = get_list_store(tree_view); if let Some(iter) = model.iter_first() { let mut end: bool = false; loop { let mut tree_iter_array: Vec = Vec::new(); let mut used_index: Option = None; let mut current_index: usize = 0; let mut modification_time_min_max: u64 = if except_oldest { u64::MAX } else { 0 }; let mut file_length: usize = 0; loop { if model.get::(&iter, column_header) { if !model.iter_next(&iter) { end = true; } break; } tree_iter_array.push(iter); let modification = model.get::(&iter, column_modification_as_secs); let current_file_length = model.get::(&iter, column_file_name).len(); if except_oldest { if modification < modification_time_min_max || (modification == modification_time_min_max && current_file_length < file_length) { file_length = current_file_length; modification_time_min_max = modification; used_index = Some(current_index); } } else { if modification > modification_time_min_max || (modification == modification_time_min_max && current_file_length < file_length) { file_length = current_file_length; modification_time_min_max = modification; used_index = Some(current_index); } } current_index += 1; if !model.iter_next(&iter) { end = true; break; } } let Some(used_index) = used_index else { continue; }; for (index, tree_iter) in tree_iter_array.iter().enumerate() { if index != used_index { model.set_value(tree_iter, column_button_selection, &true.to_value()); } else { model.set_value(tree_iter, column_button_selection, &false.to_value()); } } if end { break; } } } popover.popdown(); } fn popover_one_oldest_newest( popover: >k4::Popover, tree_view: >k4::TreeView, column_header: i32, column_modification_as_secs: i32, column_file_name: i32, column_button_selection: u32, check_oldest: bool, ) { let model = get_list_store(tree_view); if let Some(iter) = model.iter_first() { let mut end: bool = false; loop { let mut tree_iter_array: Vec = Vec::new(); let mut used_index: Option = None; let mut current_index: usize = 0; let mut modification_time_min_max: u64 = if check_oldest { u64::MAX } else { 0 }; let mut file_length: usize = 0; loop { if model.get::(&iter, column_header) { if !model.iter_next(&iter) { end = true; } break; } tree_iter_array.push(iter); let modification = model.get::(&iter, column_modification_as_secs); let current_file_length = model.get::(&iter, column_file_name).len(); if check_oldest { if modification < modification_time_min_max || (modification == modification_time_min_max && current_file_length > file_length) { file_length = current_file_length; modification_time_min_max = modification; used_index = Some(current_index); } } else { if modification > modification_time_min_max || (modification == modification_time_min_max && current_file_length > file_length) { file_length = current_file_length; modification_time_min_max = modification; used_index = Some(current_index); } } current_index += 1; if !model.iter_next(&iter) { end = true; break; } } let Some(used_index) = used_index else { continue; }; for (index, tree_iter) in tree_iter_array.iter().enumerate() { if index == used_index { model.set_value(tree_iter, column_button_selection, &true.to_value()); } else { model.set_value(tree_iter, column_button_selection, &false.to_value()); } } if end { break; } } } popover.popdown(); } fn popover_custom_select_unselect( popover: >k4::Popover, window_main: &Window, tree_view: >k4::TreeView, column_header: Option, column_file_name: i32, column_path: i32, column_button_selection: u32, select_things: bool, ) { popover.popdown(); let window_title = if select_things { flg!("popover_custom_mode_select") } else { flg!("popover_custom_mode_unselect") }; // Dialog for select/unselect items { let dialog = gtk4::Dialog::builder().title(window_title).transient_for(window_main).modal(true).build(); dialog.add_button(&flg!("general_ok_button"), ResponseType::Ok); dialog.add_button(&flg!("general_close_button"), ResponseType::Cancel); let check_button_path = gtk4::CheckButton::builder() .label(flg!("popover_custom_regex_path_label")) .tooltip_text(flg!("popover_custom_path_check_button_entry_tooltip")) .build(); let check_button_name = gtk4::CheckButton::builder() .label(flg!("popover_custom_regex_name_label")) .tooltip_text(flg!("popover_custom_name_check_button_entry_tooltip")) .build(); let check_button_rust_regex = gtk4::CheckButton::builder() .label(flg!("popover_custom_regex_regex_label")) .tooltip_text(flg!("popover_custom_regex_check_button_entry_tooltip")) .build(); let check_button_case_sensitive = gtk4::CheckButton::builder() .label(flg!("popover_custom_case_sensitive_check_button")) .tooltip_text(flg!("popover_custom_case_sensitive_check_button_tooltip")) .active(false) .build(); let check_button_select_not_all_results = gtk4::CheckButton::builder() .label(flg!("popover_custom_all_in_group_label")) .tooltip_text(flg!("popover_custom_not_all_check_button_tooltip")) .active(true) .build(); let entry_path = gtk4::Entry::builder().tooltip_text(flg!("popover_custom_path_check_button_entry_tooltip")).build(); let entry_name = gtk4::Entry::builder().tooltip_text(flg!("popover_custom_name_check_button_entry_tooltip")).build(); let entry_rust_regex = gtk4::Entry::builder() .tooltip_text(flg!("popover_custom_regex_check_button_entry_tooltip")) .sensitive(false) .build(); // By default check button regex is disabled let label_regex_valid = gtk4::Label::new(None); { let label_regex_valid = label_regex_valid.clone(); entry_rust_regex.connect_changed(move |entry_rust_regex| { let message; let text_to_check = entry_rust_regex.text().to_string(); if text_to_check.is_empty() { message = String::new(); } else { match Regex::new(&text_to_check) { Ok(_) => message = flg!("popover_valid_regex"), Err(_) => message = flg!("popover_invalid_regex"), } } // TODO add red and green color to text // let attributes_list = AttrList::new(); // let p_a = PangoAttribute::init(); // let attribute = PangoAttrFontDesc { attr }; // attributes_list.insert(attribute); // label_regex_valid.set_attributes(Some(&attributes_list)); label_regex_valid.set_text(&message); }); } // Disable other modes when Rust Regex is enabled { let check_button_path = check_button_path.clone(); let check_button_name = check_button_name.clone(); let entry_path = entry_path.clone(); let entry_name = entry_name.clone(); let entry_rust_regex = entry_rust_regex.clone(); check_button_rust_regex.connect_toggled(move |check_button_rust_regex| { if check_button_rust_regex.is_active() { check_button_path.set_sensitive(false); check_button_name.set_sensitive(false); entry_path.set_sensitive(false); entry_name.set_sensitive(false); entry_rust_regex.set_sensitive(true); } else { check_button_path.set_sensitive(true); check_button_name.set_sensitive(true); entry_path.set_sensitive(true); entry_name.set_sensitive(true); entry_rust_regex.set_sensitive(false); } }); } // Configure look of things { // TODO Label should have const width, and rest should fill entry, but for now is 50%-50% let grid = gtk4::Grid::builder().row_homogeneous(true).column_homogeneous(true).build(); grid.attach(&check_button_name, 0, 1, 1, 1); grid.attach(&check_button_path, 0, 2, 1, 1); grid.attach(&check_button_rust_regex, 0, 3, 1, 1); grid.attach(&entry_name, 1, 1, 1, 1); grid.attach(&entry_path, 1, 2, 1, 1); grid.attach(&entry_rust_regex, 1, 3, 1, 1); grid.attach(&label_regex_valid, 0, 4, 2, 1); grid.attach(&check_button_case_sensitive, 0, 5, 2, 1); if select_things { grid.attach(&check_button_select_not_all_results, 0, 6, 2, 1); } let box_widget = get_dialog_box_child(&dialog); box_widget.append(&grid); dialog.show(); } let tree_view = tree_view.clone(); dialog.connect_response(move |confirmation_dialog_select_unselect, response_type| { let name_wildcard = entry_name.text().trim().to_string(); let path_wildcard = entry_path.text().trim().to_string(); let regex_wildcard = entry_rust_regex.text().trim().to_string(); #[cfg(target_family = "windows")] let name_wildcard = name_wildcard.replace("/", "\\"); #[cfg(target_family = "windows")] let path_wildcard = path_wildcard.replace("/", "\\"); let name_wildcard_excluded = new_excluded_item(&name_wildcard); let name_wildcard_lowercase_excluded = new_excluded_item(&name_wildcard.to_lowercase()); let path_wildcard_excluded = new_excluded_item(&path_wildcard); let path_wildcard_lowercase_excluded = new_excluded_item(&path_wildcard.to_lowercase()); if response_type == ResponseType::Ok { let check_path = check_button_path.is_active(); let check_name = check_button_name.is_active(); let check_regex = check_button_rust_regex.is_active(); let case_sensitive = check_button_case_sensitive.is_active(); let check_all_selected = check_button_select_not_all_results.is_active(); if check_button_path.is_active() || check_button_name.is_active() || check_button_rust_regex.is_active() { let compiled_regex = if check_regex { if let Ok(t) = Regex::new(®ex_wildcard) { t } else { eprintln!("What? Regex should compile properly."); confirmation_dialog_select_unselect.close(); return; } } else { Regex::new("").expect("Empty regex should compile properly.") }; let model = get_list_store(&tree_view); let Some(iter) = model.iter_first() else { confirmation_dialog_select_unselect.close(); return; }; let mut number_of_all_things = 0; let mut number_of_already_selected_things = 0; let mut vec_of_iters: Vec = Vec::new(); loop { if let Some(column_header) = column_header { if model.get::(&iter, column_header) { if select_things { if check_all_selected && (number_of_all_things - number_of_already_selected_things == vec_of_iters.len()) { vec_of_iters.pop(); } for iter in vec_of_iters { model.set_value(&iter, column_button_selection, &true.to_value()); } } else { for iter in vec_of_iters { model.set_value(&iter, column_button_selection, &false.to_value()); } } if !model.iter_next(&iter) { break; } number_of_all_things = 0; number_of_already_selected_things = 0; vec_of_iters = Vec::new(); continue; } } let is_selected = model.get::(&iter, column_button_selection as i32); let path = model.get::(&iter, column_path); let name = model.get::(&iter, column_file_name); let path_and_name = get_full_name_from_path_name(&path, &name); let mut need_to_change_thing: bool = false; number_of_all_things += 1; if check_regex && compiled_regex.find(&path_and_name).is_some() { need_to_change_thing = true; } else { if check_name { if case_sensitive { if regex_check(&name_wildcard_excluded, &name) { need_to_change_thing = true; } } else { if regex_check(&name_wildcard_lowercase_excluded, &name.to_lowercase()) { need_to_change_thing = true; } } } if check_path { if case_sensitive { if regex_check(&path_wildcard_excluded, &path) { need_to_change_thing = true; } } else { if regex_check(&path_wildcard_lowercase_excluded, &path.to_lowercase()) { need_to_change_thing = true; } } } } if select_things { if is_selected { number_of_already_selected_things += 1; } else { if need_to_change_thing { vec_of_iters.push(iter); } } } else { if need_to_change_thing { vec_of_iters.push(iter); } } if !model.iter_next(&iter) { if select_things { if check_all_selected && (number_of_all_things - number_of_already_selected_things == vec_of_iters.len()) { vec_of_iters.pop(); } for iter in vec_of_iters { model.set_value(&iter, column_button_selection, &true.to_value()); } } else { for iter in vec_of_iters { model.set_value(&iter, column_button_selection, &false.to_value()); } } break; } } } } confirmation_dialog_select_unselect.close(); }); } } fn popover_all_except_biggest_smallest( popover: >k4::Popover, tree_view: >k4::TreeView, column_header: i32, column_size_as_bytes: i32, column_dimensions: Option, column_button_selection: u32, except_biggest: bool, ) { let model = get_list_store(tree_view); if let Some(iter) = model.iter_first() { let mut end: bool = false; loop { let mut tree_iter_array: Vec = Vec::new(); let mut used_index: Option = None; let mut current_index: usize = 0; let mut size_as_bytes_min_max: u64 = if except_biggest { 0 } else { u64::MAX }; let mut number_of_pixels_min_max: u64 = if except_biggest { 0 } else { u64::MAX }; loop { if model.get::(&iter, column_header) { if !model.iter_next(&iter) { end = true; } break; } tree_iter_array.push(iter); let size_as_bytes = model.get::(&iter, column_size_as_bytes); // If dimension exists, then needs to be checked images if let Some(column_dimensions) = column_dimensions { let dimensions_string = model.get::(&iter, column_dimensions); let dimensions = change_dimension_to_krotka(&dimensions_string); let number_of_pixels = dimensions.0 * dimensions.1; if except_biggest { if number_of_pixels > number_of_pixels_min_max || (number_of_pixels == number_of_pixels_min_max && size_as_bytes > size_as_bytes_min_max) { number_of_pixels_min_max = number_of_pixels; size_as_bytes_min_max = size_as_bytes; used_index = Some(current_index); } } else { if number_of_pixels < number_of_pixels_min_max || (number_of_pixels == number_of_pixels_min_max && size_as_bytes < size_as_bytes_min_max) { number_of_pixels_min_max = number_of_pixels; size_as_bytes_min_max = size_as_bytes; used_index = Some(current_index); } } } else { if except_biggest { if size_as_bytes > size_as_bytes_min_max { size_as_bytes_min_max = size_as_bytes; used_index = Some(current_index); } } else { if size_as_bytes < size_as_bytes_min_max { size_as_bytes_min_max = size_as_bytes; used_index = Some(current_index); } } } current_index += 1; if !model.iter_next(&iter) { end = true; break; } } let Some(used_index) = used_index else { continue; }; for (index, tree_iter) in tree_iter_array.iter().enumerate() { if index != used_index { model.set_value(tree_iter, column_button_selection, &true.to_value()); } else { model.set_value(tree_iter, column_button_selection, &false.to_value()); } } if end { break; } } } popover.popdown(); } pub fn connect_popover_select(gui_data: &GuiData) { let popover_select = gui_data.popovers_select.popover_select.clone(); let buttons_popover_select_all = gui_data.popovers_select.buttons_popover_select_all.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); buttons_popover_select_all.connect_clicked(move |_| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; popover_select_all(&popover_select, tree_view, nb_object.column_selection as u32, nb_object.column_header); }); let popover_select = gui_data.popovers_select.popover_select.clone(); let buttons_popover_unselect_all = gui_data.popovers_select.buttons_popover_unselect_all.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); buttons_popover_unselect_all.connect_clicked(move |_| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; popover_unselect_all(&popover_select, tree_view, nb_object.column_selection as u32); }); let popover_select = gui_data.popovers_select.popover_select.clone(); let buttons_popover_reverse = gui_data.popovers_select.buttons_popover_reverse.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); buttons_popover_reverse.connect_clicked(move |_| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; popover_reverse(&popover_select, tree_view, nb_object.column_selection as u32, nb_object.column_header); }); let popover_select = gui_data.popovers_select.popover_select.clone(); let buttons_popover_select_all_except_oldest = gui_data.popovers_select.buttons_popover_select_all_except_oldest.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); buttons_popover_select_all_except_oldest.connect_clicked(move |_| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; popover_all_except_oldest_newest( &popover_select, tree_view, nb_object.column_header.expect("AEO can't be used without headers"), nb_object.column_modification_as_secs.expect("AEO needs modification as secs column"), nb_object.column_name, nb_object.column_selection as u32, true, ); }); let popover_select = gui_data.popovers_select.popover_select.clone(); let buttons_popover_select_all_except_newest = gui_data.popovers_select.buttons_popover_select_all_except_newest.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); buttons_popover_select_all_except_newest.connect_clicked(move |_| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; popover_all_except_oldest_newest( &popover_select, tree_view, nb_object.column_header.expect("AEN can't be used without headers"), nb_object.column_modification_as_secs.expect("AEN needs modification as secs column"), nb_object.column_name, nb_object.column_selection as u32, false, ); }); let popover_select = gui_data.popovers_select.popover_select.clone(); let buttons_popover_select_one_oldest = gui_data.popovers_select.buttons_popover_select_one_oldest.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); buttons_popover_select_one_oldest.connect_clicked(move |_| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; popover_one_oldest_newest( &popover_select, tree_view, nb_object.column_header.expect("OO can't be used without headers"), nb_object.column_modification_as_secs.expect("OO needs modification as secs column"), nb_object.column_name, nb_object.column_selection as u32, true, ); }); let popover_select = gui_data.popovers_select.popover_select.clone(); let buttons_popover_select_one_newest = gui_data.popovers_select.buttons_popover_select_one_newest.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); buttons_popover_select_one_newest.connect_clicked(move |_| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; popover_one_oldest_newest( &popover_select, tree_view, nb_object.column_header.expect("ON can't be used without headers"), nb_object.column_modification_as_secs.expect("ON needs modification as secs column"), nb_object.column_name, nb_object.column_selection as u32, false, ); }); let popover_select = gui_data.popovers_select.popover_select.clone(); let buttons_popover_select_custom = gui_data.popovers_select.buttons_popover_select_custom.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); let window_main = gui_data.window_main.clone(); buttons_popover_select_custom.connect_clicked(move |_| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; popover_custom_select_unselect( &popover_select, &window_main, tree_view, nb_object.column_header, nb_object.column_name, nb_object.column_path, nb_object.column_selection as u32, true, ); }); let popover_select = gui_data.popovers_select.popover_select.clone(); let buttons_popover_unselect_custom = gui_data.popovers_select.buttons_popover_unselect_custom.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); let window_main = gui_data.window_main.clone(); buttons_popover_unselect_custom.connect_clicked(move |_| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; popover_custom_select_unselect( &popover_select, &window_main, tree_view, nb_object.column_header, nb_object.column_name, nb_object.column_path, nb_object.column_selection as u32, false, ); }); let popover_select = gui_data.popovers_select.popover_select.clone(); let buttons_popover_select_all_images_except_biggest = gui_data.popovers_select.buttons_popover_select_all_images_except_biggest.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); buttons_popover_select_all_images_except_biggest.connect_clicked(move |_| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; popover_all_except_biggest_smallest( &popover_select, tree_view, nb_object.column_header.expect("AEB can't be used without headers"), nb_object.column_size_as_bytes.expect("AEB needs size as bytes column"), nb_object.column_dimensions, nb_object.column_selection as u32, true, ); }); let popover_select = gui_data.popovers_select.popover_select.clone(); let buttons_popover_select_all_images_except_smallest = gui_data.popovers_select.buttons_popover_select_all_images_except_smallest.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); buttons_popover_select_all_images_except_smallest.connect_clicked(move |_| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; popover_all_except_biggest_smallest( &popover_select, tree_view, nb_object.column_header.expect("AES can't be used without headers"), nb_object.column_size_as_bytes.expect("AES needs size as bytes column"), nb_object.column_dimensions, nb_object.column_selection as u32, false, ); }); } czkawka_gui-8.0.0/src/connect_things/connect_popovers_sort.rs000064400000000000000000000213401046102023000227270ustar 00000000000000use std::fmt::Debug; use gtk4::prelude::*; use gtk4::{ListStore, TreeIter}; use crate::gui_structs::gui_data::GuiData; use crate::help_functions::*; use crate::notebook_info::NOTEBOOKS_INFO; fn popover_sort_general(popover: >k4::Popover, tree_view: >k4::TreeView, column_sort: i32, column_header: i32) where T: Ord + for<'b> glib::value::FromValue<'b> + 'static + Debug, { let model = get_list_store(tree_view); if let Some(curr_iter) = model.iter_first() { assert!(model.get::(&curr_iter, column_header)); // First item should be header assert!(model.iter_next(&curr_iter)); // Must be at least two items loop { let mut iters = Vec::new(); let mut all_have = false; loop { if model.get::(&curr_iter, column_header) { assert!(model.iter_next(&curr_iter), "Empty header, this should not happens"); break; } iters.push(curr_iter); if !model.iter_next(&curr_iter) { all_have = true; break; } } if iters.len() == 1 { continue; // Can be equal 1 in reference folders } sort_iters::(&model, iters, column_sort); if all_have { break; } } } popover.popdown(); } fn sort_iters(model: &ListStore, mut iters: Vec, column_sort: i32) where T: Ord + for<'b> glib::value::FromValue<'b> + 'static + Debug, { assert!(iters.len() >= 2); loop { let mut changed_item = false; for idx in 0..(iters.len() - 1) { if model.get::(&iters[idx], column_sort) > model.get::(&iters[idx + 1], column_sort) { model.swap(&iters[idx], &iters[idx + 1]); iters.swap(idx, idx + 1); changed_item = true; } } if !changed_item { return; } } } pub fn connect_popover_sort(gui_data: &GuiData) { let popover_sort = gui_data.popovers_sort.popover_sort.clone(); let buttons_popover_file_name = gui_data.popovers_sort.buttons_popover_sort_file_name.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); buttons_popover_file_name.connect_clicked(move |_| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; popover_sort_general::( &popover_sort, tree_view, nb_object.column_name, nb_object.column_header.expect("Failed to get header column"), ); }); let popover_sort = gui_data.popovers_sort.popover_sort.clone(); let buttons_popover_sort_folder_name = gui_data.popovers_sort.buttons_popover_sort_folder_name.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); buttons_popover_sort_folder_name.connect_clicked(move |_| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; popover_sort_general::( &popover_sort, tree_view, nb_object.column_path, nb_object.column_header.expect("Failed to get header column"), ); }); let popover_sort = gui_data.popovers_sort.popover_sort.clone(); let buttons_popover_sort_selection = gui_data.popovers_sort.buttons_popover_sort_selection.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); buttons_popover_sort_selection.connect_clicked(move |_| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; popover_sort_general::( &popover_sort, tree_view, nb_object.column_selection, nb_object.column_header.expect("Failed to get header column"), ); }); let popover_sort = gui_data.popovers_sort.popover_sort.clone(); let buttons_popover_sort_size = gui_data.popovers_sort.buttons_popover_sort_size.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let main_tree_views = gui_data.main_notebook.get_main_tree_views(); buttons_popover_sort_size.connect_clicked(move |_| { let nb_number = notebook_main.current_page().expect("Current page not set"); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; popover_sort_general::( &popover_sort, tree_view, nb_object.column_size_as_bytes.expect("Failed to get size as bytes column"), nb_object.column_header.expect("Failed to get header column"), ); }); } #[cfg(test)] mod test { use glib::types::Type; use gtk4::prelude::*; use gtk4::{Popover, TreeView}; use crate::connect_things::connect_popovers_sort::{popover_sort_general, sort_iters}; #[gtk4::test] fn test_sort_iters() { let columns_types: &[Type] = &[Type::U32, Type::STRING]; let list_store = gtk4::ListStore::new(columns_types); let values_to_add: &[&[(u32, &dyn ToValue)]] = &[&[(0, &2), (1, &"AAA")], &[(0, &3), (1, &"CCC")], &[(0, &1), (1, &"BBB")]]; for i in values_to_add { list_store.set(&list_store.append(), i); } let mut iters = Vec::new(); let iter = list_store.iter_first().expect("Failed to get first iter"); iters.push(iter); list_store.iter_next(&iter); iters.push(iter); list_store.iter_next(&iter); iters.push(iter); sort_iters::(&list_store, iters, 1); let expected = [(2, "AAA"), (1, "BBB"), (3, "CCC")]; let curr_iter = list_store.iter_first().expect("Failed to get first iter"); for exp in expected { let real_0 = list_store.get::(&curr_iter, 0); assert_eq!(real_0, exp.0); let real_1 = list_store.get::(&curr_iter, 1); assert_eq!(real_1, exp.1); list_store.iter_next(&curr_iter); } } #[gtk4::test] pub fn test_popover_sort_general_simple() { let columns_types: &[Type] = &[Type::BOOL, Type::STRING]; let list_store = gtk4::ListStore::new(columns_types); let tree_view = TreeView::builder().model(&list_store).build(); let popover = Popover::new(); let values_to_add: &[&[(u32, &dyn ToValue)]] = &[&[(0, &true), (1, &"DDD")], &[(0, &false), (1, &"CCC")], &[(0, &false), (1, &"BBB")]]; for i in values_to_add { list_store.set(&list_store.append(), i); } popover_sort_general::(&popover, &tree_view, 1, 0); let expected = ["DDD", "BBB", "CCC"]; let curr_iter = list_store.iter_first().expect("Failed to get first iter"); for exp in expected { let real = list_store.get::(&curr_iter, 1); assert_eq!(real, exp); list_store.iter_next(&curr_iter); } } #[gtk4::test] pub fn test_popover_sort_general() { let columns_types: &[Type] = &[Type::BOOL, Type::STRING]; let list_store = gtk4::ListStore::new(columns_types); let tree_view = TreeView::builder().model(&list_store).build(); let popover = Popover::new(); let values_to_add: &[&[(u32, &dyn ToValue)]] = &[ &[(0, &true), (1, &"AAA")], &[(0, &false), (1, &"CCC")], &[(0, &false), (1, &"BBB")], &[(0, &true), (1, &"TTT")], &[(0, &false), (1, &"PPP")], &[(0, &false), (1, &"AAA")], &[(0, &true), (1, &"RRR")], &[(0, &false), (1, &"WWW")], &[(0, &false), (1, &"ZZZ")], ]; for i in values_to_add { list_store.set(&list_store.append(), i); } popover_sort_general::(&popover, &tree_view, 1, 0); let expected = ["AAA", "BBB", "CCC", "TTT", "AAA", "PPP", "RRR", "WWW", "ZZZ"]; let curr_iter = list_store.iter_first().expect("Failed to get first iter"); for exp in expected { let real = list_store.get::(&curr_iter, 1); assert_eq!(real, exp); list_store.iter_next(&curr_iter); } } } czkawka_gui-8.0.0/src/connect_things/connect_progress_window.rs000064400000000000000000000177451046102023000232540ustar 00000000000000use std::cell::RefCell; use std::collections::HashMap; use std::rc::Rc; use std::time::Duration; use crossbeam_channel::Receiver; use czkawka_core::common_dir_traversal::ToolType; use czkawka_core::progress_data::{CurrentStage, ProgressData}; use glib::MainContext; use gtk4::prelude::*; use gtk4::ProgressBar; use crate::flg; use crate::gui_structs::gui_data::GuiData; use crate::localizer_core::generate_translation_hashmap; use crate::taskbar_progress::tbp_flags::TBPF_INDETERMINATE; use crate::taskbar_progress::TaskbarProgress; #[allow(clippy::too_many_arguments)] pub fn connect_progress_window(gui_data: &GuiData, progress_receiver: Receiver) { let main_context = MainContext::default(); let _guard = main_context.acquire().expect("Failed to acquire main context"); let gui_data = gui_data.clone(); let future = async move { loop { loop { let item = progress_receiver.try_recv(); if let Ok(item) = item { if item.current_stage_idx == 0 { progress_collect_items(&gui_data, &item, item.tool_type != ToolType::EmptyFolders); } else if item.sstage.check_if_loading_saving_cache() { progress_save_load_cache(&gui_data, &item); } else { progress_default(&gui_data, &item); } } else { break; } } glib::timeout_future(Duration::from_millis(300)).await; } }; main_context.spawn_local(future); } fn progress_save_load_cache(gui_data: &GuiData, item: &ProgressData) { let label_stage = gui_data.progress_window.label_stage.clone(); let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); let taskbar_state = gui_data.taskbar_state.clone(); progress_bar_current_stage.hide(); taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); let text = match item.sstage { CurrentStage::SameMusicCacheLoadingFingerprints | CurrentStage::SameMusicCacheLoadingTags => { flg!("progress_cache_loading") } CurrentStage::SameMusicCacheSavingFingerprints | CurrentStage::SameMusicCacheSavingTags => { flg!("progress_cache_saving") } CurrentStage::DuplicateCacheLoading => { flg!("progress_hash_cache_loading") } CurrentStage::DuplicateCacheSaving => { flg!("progress_hash_cache_saving") } CurrentStage::DuplicatePreHashCacheLoading => { flg!("progress_prehash_cache_loading") } CurrentStage::DuplicatePreHashCacheSaving => { flg!("progress_prehash_cache_saving") } _ => panic!("Invalid stage {:?}", item.sstage), }; label_stage.set_text(&text); } fn progress_collect_items(gui_data: &GuiData, item: &ProgressData, files: bool) { let label_stage = gui_data.progress_window.label_stage.clone(); let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); let taskbar_state = gui_data.taskbar_state.clone(); progress_bar_current_stage.hide(); taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); match item.sstage { CurrentStage::DuplicateScanningName => { label_stage.set_text(&flg!("progress_scanning_name", file_number_tm(item))); } CurrentStage::DuplicateScanningSizeName => { label_stage.set_text(&flg!("progress_scanning_size_name", file_number_tm(item))); } CurrentStage::DuplicateScanningSize => { label_stage.set_text(&flg!("progress_scanning_size", file_number_tm(item))); } _ => { if files { label_stage.set_text(&flg!("progress_scanning_general_file", file_number_tm(item))); } else { label_stage.set_text(&flg!("progress_scanning_empty_folders", folder_number = item.entries_checked)); } } } } fn progress_default(gui_data: &GuiData, item: &ProgressData) { let label_stage = gui_data.progress_window.label_stage.clone(); let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); let progress_bar_all_stages = gui_data.progress_window.progress_bar_all_stages.clone(); let taskbar_state = gui_data.taskbar_state.clone(); progress_bar_current_stage.show(); common_set_data(item, &progress_bar_all_stages, &progress_bar_current_stage, &taskbar_state); taskbar_state.borrow().set_progress_state(TBPF_INDETERMINATE); match item.sstage { CurrentStage::SameMusicReadingTags => { label_stage.set_text(&flg!("progress_scanning_music_tags", progress_ratio_tm(item))); } CurrentStage::SameMusicCalculatingFingerprints => { label_stage.set_text(&flg!("progress_scanning_music_content", progress_ratio_tm(item))); } CurrentStage::SameMusicComparingTags => { label_stage.set_text(&flg!("progress_scanning_music_tags_end", progress_ratio_tm(item))); } CurrentStage::SameMusicComparingFingerprints => { label_stage.set_text(&flg!("progress_scanning_music_content_end", progress_ratio_tm(item))); } CurrentStage::SimilarImagesCalculatingHashes => { label_stage.set_text(&flg!("progress_scanning_image", progress_ratio_tm(item))); } CurrentStage::SimilarImagesComparingHashes => { label_stage.set_text(&flg!("progress_comparing_image_hashes", progress_ratio_tm(item))); } CurrentStage::SimilarVideosCalculatingHashes => { label_stage.set_text(&flg!("progress_scanning_video", progress_ratio_tm(item))); } CurrentStage::BrokenFilesChecking => { label_stage.set_text(&flg!("progress_scanning_broken_files", progress_ratio_tm(item))); } CurrentStage::BadExtensionsChecking => { label_stage.set_text(&flg!("progress_scanning_extension_of_files", progress_ratio_tm(item))); } CurrentStage::DuplicatePreHashing => { label_stage.set_text(&flg!("progress_analyzed_partial_hash", progress_ratio_tm(item))); } CurrentStage::DuplicateFullHashing => { label_stage.set_text(&flg!("progress_analyzed_full_hash", progress_ratio_tm(item))); } _ => unreachable!("Invalid stage {:?}", item.sstage), } } fn common_set_data(item: &ProgressData, progress_bar_all_stages: &ProgressBar, progress_bar_current_stage: &ProgressBar, taskbar_state: &Rc>) { if item.entries_to_check != 0 { let all_stages = (item.current_stage_idx as f64 + item.entries_checked as f64 / item.entries_to_check as f64) / (item.max_stage_idx + 1) as f64; let all_stages = all_stages.min(0.99); progress_bar_all_stages.set_fraction(all_stages); progress_bar_current_stage.set_fraction(item.entries_checked as f64 / item.entries_to_check as f64); taskbar_state.borrow().set_progress_value( ((item.current_stage_idx as usize) * item.entries_to_check + item.entries_checked) as u64, item.entries_to_check as u64 * (item.max_stage_idx + 1) as u64, ); } else { let all_stages = (item.current_stage_idx as f64) / (item.max_stage_idx + 1) as f64; let all_stages = all_stages.min(0.99); progress_bar_all_stages.set_fraction(all_stages); progress_bar_current_stage.set_fraction(0f64); taskbar_state.borrow().set_progress_value(item.current_stage_idx as u64, 1 + item.max_stage_idx as u64); } } fn file_number_tm(item: &ProgressData) -> HashMap<&'static str, String> { generate_translation_hashmap(vec![("file_number", item.entries_checked.to_string())]) } fn progress_ratio_tm(item: &ProgressData) -> HashMap<&'static str, String> { generate_translation_hashmap(vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]) } czkawka_gui-8.0.0/src/connect_things/connect_same_music_mode_changed.rs000064400000000000000000000075411046102023000246140ustar 00000000000000use czkawka_core::common_dir_traversal::CheckingMethod; use gtk4::prelude::*; use gtk4::{CheckButton, Widget}; use crate::gui_structs::gui_data::GuiData; use crate::help_combo_box::AUDIO_TYPE_CHECK_METHOD_COMBO_BOX; use crate::help_functions::scale_set_min_max_values; const MINIMUM_SECONDS: f64 = 0.5; const MAXIMUM_SECONDS: f64 = 180.0; const DEFAULT_SECONDS: f64 = 15.0; const MINIMUM_SIMILARITY: f64 = 0.0; const MAXIMUM_SIMILARITY: f64 = 10.0; const DEFAULT_SIMILARITY: f64 = 5.0; pub fn connect_same_music_change_mode(gui_data: &GuiData) { let check_button_music_title = gui_data.main_notebook.check_button_music_title.clone(); let check_button_music_approximate_comparison = gui_data.main_notebook.check_button_music_approximate_comparison.clone(); let check_button_music_bitrate = gui_data.main_notebook.check_button_music_bitrate.clone(); let check_button_music_artist = gui_data.main_notebook.check_button_music_artist.clone(); let check_button_music_genre = gui_data.main_notebook.check_button_music_genre.clone(); let check_button_music_length = gui_data.main_notebook.check_button_music_length.clone(); let check_button_music_year = gui_data.main_notebook.check_button_music_year.clone(); let buttons = [ check_button_music_title, check_button_music_approximate_comparison, check_button_music_bitrate, check_button_music_artist, check_button_music_genre, check_button_music_year, check_button_music_length, ]; let check_button_music_compare_only_in_title_group = gui_data.main_notebook.check_button_music_compare_only_in_title_group.clone(); let reversed_buttons = [check_button_music_compare_only_in_title_group]; let scale_seconds_same_music = gui_data.main_notebook.scale_seconds_same_music.clone(); let scale_similarity_same_music = gui_data.main_notebook.scale_similarity_same_music.clone(); let label_same_music_similarity = gui_data.main_notebook.label_same_music_similarity.clone(); let label_same_music_seconds = gui_data.main_notebook.label_same_music_seconds.clone(); scale_set_min_max_values(&scale_seconds_same_music, MINIMUM_SECONDS, MAXIMUM_SECONDS, DEFAULT_SECONDS, None); scale_set_min_max_values(&scale_similarity_same_music, MINIMUM_SIMILARITY, MAXIMUM_SIMILARITY, DEFAULT_SIMILARITY, None); let scales_and_labels = [ scale_seconds_same_music.into(), scale_similarity_same_music.into(), label_same_music_similarity.into(), label_same_music_seconds.into(), ]; let combo_box_audio_check_type = gui_data.main_notebook.combo_box_audio_check_type.clone(); let check_method_index = combo_box_audio_check_type.active().expect("Failed to get active item") as usize; let check_method = AUDIO_TYPE_CHECK_METHOD_COMBO_BOX[check_method_index].check_method; disable_enable_buttons(&buttons, &reversed_buttons, &scales_and_labels, check_method); combo_box_audio_check_type.connect_changed(move |combo_box_text| { if let Some(active) = combo_box_text.active() { let check_method = AUDIO_TYPE_CHECK_METHOD_COMBO_BOX[active as usize].check_method; disable_enable_buttons(&buttons, &reversed_buttons, &scales_and_labels, check_method); } }); } fn disable_enable_buttons(buttons: &[CheckButton; 7], reverse_buttons: &[CheckButton; 1], scales: &[Widget; 4], current_mode: CheckingMethod) { match current_mode { CheckingMethod::AudioTags => { buttons.iter().for_each(WidgetExt::show); reverse_buttons.iter().for_each(WidgetExt::hide); scales.iter().for_each(WidgetExt::hide); } CheckingMethod::AudioContent => { buttons.iter().for_each(WidgetExt::hide); reverse_buttons.iter().for_each(WidgetExt::show); scales.iter().for_each(WidgetExt::show); } _ => panic!(), } } czkawka_gui-8.0.0/src/connect_things/connect_selection_of_directories.rs000064400000000000000000000320131046102023000250470ustar 00000000000000use std::collections::HashSet; use std::path::PathBuf; #[cfg(target_family = "windows")] use czkawka_core::common::normalize_windows_path; use gdk4::{DragAction, FileList}; use gtk4::prelude::*; use gtk4::{DropTarget, FileChooserNative, Notebook, Orientation, ResponseType, TreeView, Window}; use crate::flg; use crate::gui_structs::gui_data::GuiData; use crate::help_functions::{check_if_value_is_in_list_store, get_list_store, ColumnsExcludedDirectory, ColumnsIncludedDirectory}; use crate::notebook_enums::{to_notebook_upper_enum, NotebookUpperEnum}; pub fn connect_selection_of_directories(gui_data: &GuiData) { // Add manually directory { let tree_view_included_directories = gui_data.upper_notebook.tree_view_included_directories.clone(); let window_main = gui_data.window_main.clone(); let buttons_manual_add_included_directory = gui_data.upper_notebook.buttons_manual_add_included_directory.clone(); buttons_manual_add_included_directory.connect_clicked(move |_| { add_manually_directories(&window_main, &tree_view_included_directories, false); }); } // Add manually excluded directory { let tree_view_excluded_directories = gui_data.upper_notebook.tree_view_excluded_directories.clone(); let window_main = gui_data.window_main.clone(); let buttons_manual_add_excluded_directory = gui_data.upper_notebook.buttons_manual_add_excluded_directory.clone(); buttons_manual_add_excluded_directory.connect_clicked(move |_| { add_manually_directories(&window_main, &tree_view_excluded_directories, true); }); } // Add included directory { let buttons_add_included_directory = gui_data.upper_notebook.buttons_add_included_directory.clone(); let file_dialog_include_exclude_folder_selection = gui_data.file_dialog_include_exclude_folder_selection.clone(); buttons_add_included_directory.connect_clicked(move |_| { file_dialog_include_exclude_folder_selection.show(); file_dialog_include_exclude_folder_selection.set_title(&flg!("include_folders_dialog_title")); }); } // Add excluded directory { let buttons_add_excluded_directory = gui_data.upper_notebook.buttons_add_excluded_directory.clone(); let file_dialog_include_exclude_folder_selection = gui_data.file_dialog_include_exclude_folder_selection.clone(); buttons_add_excluded_directory.connect_clicked(move |_| { file_dialog_include_exclude_folder_selection.show(); file_dialog_include_exclude_folder_selection.set_title(&flg!("exclude_folders_dialog_title")); }); } // Connect { let notebook_upper = gui_data.upper_notebook.notebook_upper.clone(); let tree_view_included_directories = gui_data.upper_notebook.tree_view_included_directories.clone(); let tree_view_excluded_directories = gui_data.upper_notebook.tree_view_excluded_directories.clone(); let file_dialog_include_exclude_folder_selection = gui_data.file_dialog_include_exclude_folder_selection.clone(); connect_file_dialog( &file_dialog_include_exclude_folder_selection, tree_view_included_directories, tree_view_excluded_directories, notebook_upper, ); } // Drag and drop { configure_directory_drop(&gui_data.upper_notebook.tree_view_included_directories, false); configure_directory_drop(&gui_data.upper_notebook.tree_view_excluded_directories, true); } // Remove Excluded Folder { let buttons_remove_excluded_directory = gui_data.upper_notebook.buttons_remove_excluded_directory.clone(); let tree_view_excluded_directories = gui_data.upper_notebook.tree_view_excluded_directories.clone(); buttons_remove_excluded_directory.connect_clicked(move |_| { let list_store = get_list_store(&tree_view_excluded_directories); let selection = tree_view_excluded_directories.selection(); let (vec_tree_path, _tree_model) = selection.selected_rows(); for tree_path in vec_tree_path.iter().rev() { list_store.remove(&list_store.iter(tree_path).expect("Using invalid tree_path")); } }); } // Remove Included Folder { let buttons_remove_included_directory = gui_data.upper_notebook.buttons_remove_included_directory.clone(); let tree_view_included_directories = gui_data.upper_notebook.tree_view_included_directories.clone(); buttons_remove_included_directory.connect_clicked(move |_| { let list_store = get_list_store(&tree_view_included_directories); let selection = tree_view_included_directories.selection(); let (vec_tree_path, _tree_model) = selection.selected_rows(); for tree_path in vec_tree_path.iter().rev() { list_store.remove(&list_store.iter(tree_path).expect("Using invalid tree_path")); } }); } } fn configure_directory_drop(tree_view: &TreeView, excluded_items: bool) { let tv = tree_view.clone(); let drop_target = DropTarget::builder().name("file-drop-target").actions(DragAction::COPY).build(); drop_target.set_types(&[FileList::static_type()]); drop_target.connect_drop(move |_, value, _, _| { if let Ok(file_list) = value.get::() { let mut folders: HashSet = HashSet::new(); for f in file_list.files() { if let Some(path) = f.path() { if path.is_dir() { folders.insert(path); } else if let Some(parent) = path.parent() { if parent.is_dir() { folders.insert(parent.to_path_buf()); } } } } add_directories(&tv, &folders.into_iter().collect(), excluded_items); } true }); tree_view.add_controller(drop_target); } fn connect_file_dialog(file_dialog_include_exclude_folder_selection: &FileChooserNative, include_tree_view: TreeView, exclude_tree_view: TreeView, notebook_upper: Notebook) { file_dialog_include_exclude_folder_selection.connect_response(move |file_chooser, response_type| { if response_type == ResponseType::Accept { let excluded_items; let tree_view = match to_notebook_upper_enum(notebook_upper.current_page().expect("Current page not set")) { NotebookUpperEnum::IncludedDirectories => { excluded_items = false; &include_tree_view } NotebookUpperEnum::ExcludedDirectories => { excluded_items = true; &exclude_tree_view } _ => panic!(), }; let mut folders: Vec = Vec::new(); let g_files = file_chooser.files(); for index in 0..g_files.n_items() { let file = &g_files.item(index); if let Some(file) = file { let ss = file.clone().downcast::().expect("Failed to downcast to File"); if let Some(path_buf) = ss.path() { folders.push(path_buf); } } } add_directories(tree_view, &folders, excluded_items); } }); } fn add_directories(tree_view: &TreeView, folders: &Vec, excluded_items: bool) { let list_store = get_list_store(tree_view); if excluded_items { for file_entry in folders { let values: [(u32, &dyn ToValue); 1] = [(ColumnsExcludedDirectory::Path as u32, &file_entry.to_string_lossy().to_string())]; list_store.set(&list_store.append(), &values); } } else { for file_entry in folders { let values: [(u32, &dyn ToValue); 2] = [ (ColumnsIncludedDirectory::Path as u32, &file_entry.to_string_lossy().to_string()), (ColumnsIncludedDirectory::ReferenceButton as u32, &false), ]; list_store.set(&list_store.append(), &values); } } } fn add_manually_directories(window_main: &Window, tree_view: &TreeView, excluded_items: bool) { let dialog = gtk4::Dialog::builder() .title(flg!("include_manually_directories_dialog_title")) .transient_for(window_main) .modal(true) .build(); dialog.set_default_size(300, 0); let entry: gtk4::Entry = gtk4::Entry::new(); let added_button = dialog.add_button(&flg!("general_ok_button"), ResponseType::Ok); dialog.add_button(&flg!("general_close_button"), ResponseType::Cancel); let parent = added_button.parent().expect("Hack 1").parent().expect("Hack 2").downcast::().expect("Hack 3"); // TODO Hack, but not so ugly as before parent.set_orientation(Orientation::Vertical); parent.insert_child_after(&entry, None::<>k4::Widget>); dialog.show(); let tree_view = tree_view.clone(); dialog.connect_response(move |dialog, response_type| { if response_type == ResponseType::Ok { for text in entry.text().split(';') { let mut text = text.trim().to_string(); #[cfg(target_family = "windows")] let mut text = normalize_windows_path(text).to_string_lossy().to_string(); remove_ending_slashes(&mut text); if !text.is_empty() { let list_store = get_list_store(&tree_view); if excluded_items { if !check_if_value_is_in_list_store(&list_store, ColumnsExcludedDirectory::Path as i32, &text) { let values: [(u32, &dyn ToValue); 1] = [(ColumnsExcludedDirectory::Path as u32, &text)]; list_store.set(&list_store.append(), &values); } } else { if !check_if_value_is_in_list_store(&list_store, ColumnsIncludedDirectory::Path as i32, &text) { let values: [(u32, &dyn ToValue); 2] = [(ColumnsIncludedDirectory::Path as u32, &text), (ColumnsIncludedDirectory::ReferenceButton as u32, &false)]; list_store.set(&list_store.append(), &values); } } } } } dialog.close(); }); } fn remove_ending_slashes(original_string: &mut String) { let mut windows_disk_path: bool = false; let mut chars = original_string.chars(); if let Some(first_character) = chars.next() { if first_character.is_alphabetic() { if let Some(second_character) = chars.next() { if second_character == ':' { windows_disk_path = true; original_string.push('/'); // In case of adding window path without ending slash e.g. C: instead C:/ or C:\ } } } } while (original_string != "/" && (original_string.ends_with('/') || original_string.ends_with('\\'))) && (!windows_disk_path || original_string.len() > 3) { original_string.pop(); } } #[test] pub fn test_remove_ending_slashes() { let mut original = "/home/rafal".to_string(); remove_ending_slashes(&mut original); assert_eq!(&original, "/home/rafal"); let mut original = "/home/rafal/".to_string(); remove_ending_slashes(&mut original); assert_eq!(&original, "/home/rafal"); let mut original = "/home/rafal\\".to_string(); remove_ending_slashes(&mut original); assert_eq!(&original, "/home/rafal"); let mut original = "/home/rafal/////////".to_string(); remove_ending_slashes(&mut original); assert_eq!(&original, "/home/rafal"); let mut original = "/home/rafal/\\//////\\\\".to_string(); remove_ending_slashes(&mut original); assert_eq!(&original, "/home/rafal"); let mut original = "/home/rafal\\\\\\\\\\\\\\\\".to_string(); remove_ending_slashes(&mut original); assert_eq!(&original, "/home/rafal"); let mut original = "\\\\\\\\\\\\\\\\\\\\\\\\".to_string(); remove_ending_slashes(&mut original); assert_eq!(&original, ""); let mut original = "//////////".to_string(); remove_ending_slashes(&mut original); assert_eq!(&original, "/"); let mut original = "C:/".to_string(); remove_ending_slashes(&mut original); assert_eq!(&original, "C:/"); let mut original = "C:\\".to_string(); remove_ending_slashes(&mut original); assert_eq!(&original, "C:\\"); let mut original = "C://////////".to_string(); remove_ending_slashes(&mut original); assert_eq!(&original, "C:/"); let mut original = "C:/roman/function/".to_string(); remove_ending_slashes(&mut original); assert_eq!(&original, "C:/roman/function"); let mut original = "C:/staszek/without".to_string(); remove_ending_slashes(&mut original); assert_eq!(&original, "C:/staszek/without"); let mut original = "C:\\\\\\\\\\".to_string(); remove_ending_slashes(&mut original); assert_eq!(&original, "C:\\"); } czkawka_gui-8.0.0/src/connect_things/connect_settings.rs000064400000000000000000000313351046102023000216500ustar 00000000000000use std::collections::BTreeMap; use std::default::Default; use czkawka_core::common_cache::{ get_duplicate_cache_file, get_similar_images_cache_file, get_similar_videos_cache_file, load_cache_from_file_generalized_by_path, load_cache_from_file_generalized_by_size, save_cache_to_file_generalized, }; use czkawka_core::common_messages::Messages; use czkawka_core::duplicate::HashType; use directories_next::ProjectDirs; use gtk4::prelude::*; use gtk4::{Label, ResponseType, Window}; use image::imageops::FilterType; use image_hasher::HashAlg; use crate::flg; use crate::gui_structs::gui_data::GuiData; use crate::help_functions::get_dialog_box_child; use crate::saving_loading::{load_configuration, reset_configuration, save_configuration}; pub fn connect_settings(gui_data: &GuiData) { // Connect scale { let label_restart_needed = gui_data.settings.label_restart_needed.clone(); gui_data.settings.scale_settings_number_of_threads.connect_value_changed(move |_| { if label_restart_needed.label().is_empty() { label_restart_needed.set_label(&flg!("settings_label_restart")); } }); } // Connect button settings { let button_settings = gui_data.header.button_settings.clone(); let window_settings = gui_data.settings.window_settings.clone(); button_settings.connect_clicked(move |_| { window_settings.show(); }); let window_settings = gui_data.settings.window_settings.clone(); window_settings.connect_close_request(move |window| { window.hide(); glib::Propagation::Stop }); } // Connect save configuration button { let upper_notebook = gui_data.upper_notebook.clone(); let settings = gui_data.settings.clone(); let main_notebook = gui_data.main_notebook.clone(); let text_view_errors = gui_data.text_view_errors.clone(); let button_settings_save_configuration = gui_data.settings.button_settings_save_configuration.clone(); button_settings_save_configuration.connect_clicked(move |_| { save_configuration(true, &upper_notebook, &main_notebook, &settings, &text_view_errors); }); } // Connect load configuration button { let upper_notebook = gui_data.upper_notebook.clone(); let settings = gui_data.settings.clone(); let main_notebook = gui_data.main_notebook.clone(); let text_view_errors = gui_data.text_view_errors.clone(); let button_settings_load_configuration = gui_data.settings.button_settings_load_configuration.clone(); let scrolled_window_errors = gui_data.scrolled_window_errors.clone(); button_settings_load_configuration.connect_clicked(move |_| { load_configuration(true, &upper_notebook, &main_notebook, &settings, &text_view_errors, &scrolled_window_errors, &Vec::new()); }); } // Connect reset configuration button { let upper_notebook = gui_data.upper_notebook.clone(); let settings = gui_data.settings.clone(); let main_notebook = gui_data.main_notebook.clone(); let text_view_errors = gui_data.text_view_errors.clone(); let button_settings_reset_configuration = gui_data.settings.button_settings_reset_configuration.clone(); button_settings_reset_configuration.connect_clicked(move |_| { reset_configuration(true, &upper_notebook, &main_notebook, &settings, &text_view_errors); }); } // Connect button for opening cache { let button_settings_open_cache_folder = gui_data.settings.button_settings_open_cache_folder.clone(); button_settings_open_cache_folder.connect_clicked(move |_| { if let Some(proj_dirs) = ProjectDirs::from("pl", "Qarmin", "Czkawka") { let cache_dir = proj_dirs.cache_dir(); if let Err(e) = open::that(cache_dir) { println!("Failed to open config folder {cache_dir:?}, reason {e}"); }; } }); } // Connect button for opening settings { let button_settings_open_settings_folder = gui_data.settings.button_settings_open_settings_folder.clone(); button_settings_open_settings_folder.connect_clicked(move |_| { if let Some(proj_dirs) = ProjectDirs::from("pl", "Qarmin", "Czkawka") { let config_dir = proj_dirs.config_dir(); if let Err(e) = open::that(config_dir) { println!("Failed to open config folder {config_dir:?}, reason {e}"); }; } }); } // Connect clear cache methods { { let button_settings_duplicates_clear_cache = gui_data.settings.button_settings_duplicates_clear_cache.clone(); let settings_window = gui_data.settings.window_settings.clone(); let text_view_errors = gui_data.text_view_errors.clone(); let entry_settings_cache_file_minimal_size = gui_data.settings.entry_settings_cache_file_minimal_size.clone(); button_settings_duplicates_clear_cache.connect_clicked(move |_| { let dialog = create_clear_cache_dialog(&flg!("cache_clear_duplicates_title"), &settings_window); dialog.show(); let text_view_errors = text_view_errors.clone(); let entry_settings_cache_file_minimal_size = entry_settings_cache_file_minimal_size.clone(); dialog.connect_response(move |dialog, response_type| { if response_type == ResponseType::Ok { let mut messages: Messages = Messages::new(); for use_prehash in [true, false] { for type_of_hash in &[HashType::Xxh3, HashType::Blake3, HashType::Crc32] { let (mut messages, loaded_items) = load_cache_from_file_generalized_by_size::( &get_duplicate_cache_file(type_of_hash, use_prehash), true, &Default::default(), ); if let Some(cache_entries) = loaded_items { let mut hashmap_to_save: BTreeMap = Default::default(); for (_, vec_file_entry) in cache_entries { for file_entry in vec_file_entry { hashmap_to_save.insert(file_entry.path.to_string_lossy().to_string(), file_entry); } } let minimal_cache_size = entry_settings_cache_file_minimal_size.text().as_str().parse::().unwrap_or(2 * 1024 * 1024); let save_messages = save_cache_to_file_generalized(&get_duplicate_cache_file(type_of_hash, use_prehash), &hashmap_to_save, false, minimal_cache_size); messages.extend_with_another_messages(save_messages); } } messages.messages.push(flg!("cache_properly_cleared")); text_view_errors.buffer().set_text(messages.create_messages_text().as_str()); } } dialog.close(); }); }); } { let button_settings_similar_images_clear_cache = gui_data.settings.button_settings_similar_images_clear_cache.clone(); let settings_window = gui_data.settings.window_settings.clone(); let text_view_errors = gui_data.text_view_errors.clone(); button_settings_similar_images_clear_cache.connect_clicked(move |_| { let dialog = create_clear_cache_dialog(&flg!("cache_clear_similar_images_title"), &settings_window); dialog.show(); let text_view_errors = text_view_errors.clone(); dialog.connect_response(move |dialog, response_type| { if response_type == ResponseType::Ok { let mut messages: Messages = Messages::new(); for hash_size in &[8, 16, 32, 64] { for image_filter in &[ FilterType::Lanczos3, FilterType::CatmullRom, FilterType::Gaussian, FilterType::Nearest, FilterType::Triangle, ] { for hash_alg in &[ HashAlg::Blockhash, HashAlg::Gradient, HashAlg::DoubleGradient, HashAlg::VertGradient, HashAlg::Mean, HashAlg::Median, ] { let (mut messages, loaded_items) = load_cache_from_file_generalized_by_path::( &get_similar_images_cache_file(hash_size, hash_alg, image_filter), true, &Default::default(), ); if let Some(cache_entries) = loaded_items { let save_messages = save_cache_to_file_generalized(&get_similar_images_cache_file(hash_size, hash_alg, image_filter), &cache_entries, false, 0); messages.extend_with_another_messages(save_messages); } } } } messages.messages.push(flg!("cache_properly_cleared")); text_view_errors.buffer().set_text(messages.create_messages_text().as_str()); } dialog.close(); }); }); } { let button_settings_similar_videos_clear_cache = gui_data.settings.button_settings_similar_videos_clear_cache.clone(); let settings_window = gui_data.settings.window_settings.clone(); let text_view_errors = gui_data.text_view_errors.clone(); button_settings_similar_videos_clear_cache.connect_clicked(move |_| { let dialog = create_clear_cache_dialog(&flg!("cache_clear_similar_videos_title"), &settings_window); dialog.show(); let text_view_errors = text_view_errors.clone(); dialog.connect_response(move |dialog, response_type| { if response_type == ResponseType::Ok { let (mut messages, loaded_items) = load_cache_from_file_generalized_by_path::(&get_similar_videos_cache_file(), true, &Default::default()); if let Some(cache_entries) = loaded_items { let save_messages = save_cache_to_file_generalized(&get_similar_videos_cache_file(), &cache_entries, false, 0); messages.extend_with_another_messages(save_messages); } messages.messages.push(flg!("cache_properly_cleared")); text_view_errors.buffer().set_text(messages.create_messages_text().as_str()); } dialog.close(); }); }); } } } fn create_clear_cache_dialog(title_str: &str, window_settings: &Window) -> gtk4::Dialog { let dialog = gtk4::Dialog::builder().title(title_str).modal(true).transient_for(window_settings).build(); dialog.add_button(&flg!("general_ok_button"), ResponseType::Ok); dialog.add_button(&flg!("general_close_button"), ResponseType::Cancel); let label = Label::builder().label(flg!("cache_clear_message_label_1")).build(); let label2 = Label::builder().label(flg!("cache_clear_message_label_2")).build(); let label3 = Label::builder().label(flg!("cache_clear_message_label_3")).build(); let label4 = Label::builder().label(flg!("cache_clear_message_label_4")).build(); let internal_box = get_dialog_box_child(&dialog); internal_box.append(&label); internal_box.append(&label2); internal_box.append(&label3); internal_box.append(&label4); dialog } czkawka_gui-8.0.0/src/connect_things/connect_show_hide_ui.rs000064400000000000000000000021431046102023000224510ustar 00000000000000use gtk4::prelude::*; use crate::gui_structs::gui_data::GuiData; pub fn connect_show_hide_ui(gui_data: &GuiData) { let check_button_settings_show_text_view = gui_data.settings.check_button_settings_show_text_view.clone(); let buttons_show_errors = gui_data.bottom_buttons.buttons_show_errors.clone(); let scrolled_window_errors = gui_data.scrolled_window_errors.clone(); buttons_show_errors.connect_clicked(move |_| { if scrolled_window_errors.is_visible() { scrolled_window_errors.hide(); check_button_settings_show_text_view.set_active(false); } else { scrolled_window_errors.show(); check_button_settings_show_text_view.set_active(true); } }); let buttons_show_upper_notebook = gui_data.bottom_buttons.buttons_show_upper_notebook.clone(); let notebook_upper = gui_data.upper_notebook.notebook_upper.clone(); buttons_show_upper_notebook.connect_clicked(move |_| { if notebook_upper.is_visible() { notebook_upper.hide(); } else { notebook_upper.show(); } }); } czkawka_gui-8.0.0/src/connect_things/connect_similar_image_size_change.rs000064400000000000000000000030321046102023000251420ustar 00000000000000use czkawka_core::similar_images::{get_string_from_similarity, SIMILAR_VALUES}; use gtk4::prelude::*; use crate::gui_structs::gui_data::GuiData; use crate::help_combo_box::IMAGES_HASH_SIZE_COMBO_BOX; pub fn connect_similar_image_size_change(gui_data: &GuiData) { let label_similar_images_minimal_similarity = gui_data.main_notebook.label_similar_images_minimal_similarity.clone(); label_similar_images_minimal_similarity.set_text(&get_string_from_similarity(&SIMILAR_VALUES[0][5], 8)); let combo_box_image_hash_size = gui_data.main_notebook.combo_box_image_hash_size.clone(); let label_similar_images_minimal_similarity = gui_data.main_notebook.label_similar_images_minimal_similarity.clone(); let scale_similarity_similar_images = gui_data.main_notebook.scale_similarity_similar_images.clone(); combo_box_image_hash_size.connect_changed(move |combo_box_image_hash_size| { let hash_size_index = combo_box_image_hash_size.active().expect("Failed to get active item") as usize; let hash_size = IMAGES_HASH_SIZE_COMBO_BOX[hash_size_index]; let index = match hash_size { 8 => 0, 16 => 1, 32 => 2, 64 => 3, _ => panic!(), }; scale_similarity_similar_images.set_range(0_f64, SIMILAR_VALUES[index][5] as f64); scale_similarity_similar_images.set_fill_level(SIMILAR_VALUES[index][5] as f64); label_similar_images_minimal_similarity.set_text(&get_string_from_similarity(&SIMILAR_VALUES[index][5], hash_size as u8)); }); } czkawka_gui-8.0.0/src/connect_things/mod.rs000064400000000000000000000013131046102023000170470ustar 00000000000000pub mod connect_about_buttons; pub mod connect_button_compare; pub mod connect_button_delete; pub mod connect_button_hardlink; pub mod connect_button_move; pub mod connect_button_save; pub mod connect_button_search; pub mod connect_button_select; pub mod connect_button_sort; pub mod connect_button_stop; pub mod connect_change_language; pub mod connect_duplicate_buttons; pub mod connect_header_buttons; pub mod connect_notebook_tabs; pub mod connect_popovers_select; pub mod connect_popovers_sort; pub mod connect_progress_window; pub mod connect_same_music_mode_changed; pub mod connect_selection_of_directories; pub mod connect_settings; pub mod connect_show_hide_ui; pub mod connect_similar_image_size_change; czkawka_gui-8.0.0/src/create_tree_view.rs000064400000000000000000000272451046102023000166130ustar 00000000000000use gtk4::prelude::*; use gtk4::{CellRendererText, CellRendererToggle, ListStore, TreeView, TreeViewColumn}; use crate::help_functions::*; // When adding new column do not forget to update translations pub fn create_tree_view_included_directories(tree_view: &TreeView) { let model = get_list_store(tree_view); create_default_column(tree_view, ColumnsIncludedDirectory::Path as i32, Some(None), None); create_default_selection_button_column(tree_view, ColumnsIncludedDirectory::ReferenceButton as i32, model, None); } pub fn create_tree_view_excluded_directories(tree_view: &TreeView) { tree_view.set_headers_visible(false); create_default_column(tree_view, ColumnsExcludedDirectory::Path as i32, Some(None), None); } pub fn create_tree_view_duplicates(tree_view: &TreeView) { tree_view.set_vexpand(true); let model = get_list_store(tree_view); let columns_colors = (ColumnsDuplicates::Color as i32, ColumnsDuplicates::TextColor as i32); let activatable_colors = (ColumnsDuplicates::ActivatableSelectButton as i32, ColumnsDuplicates::Color as i32); create_default_selection_button_column(tree_view, ColumnsDuplicates::SelectionButton as i32, model, Some(activatable_colors)); create_default_column(tree_view, ColumnsDuplicates::Size as i32, None, Some(columns_colors)); create_default_column(tree_view, ColumnsDuplicates::Name as i32, None, Some(columns_colors)); create_default_column(tree_view, ColumnsDuplicates::Path as i32, None, Some(columns_colors)); create_default_column(tree_view, ColumnsDuplicates::Modification as i32, None, Some(columns_colors)); } pub fn create_tree_view_empty_folders(tree_view: &TreeView) { tree_view.set_vexpand(true); let model = get_list_store(tree_view); create_default_selection_button_column(tree_view, ColumnsEmptyFolders::SelectionButton as i32, model, None); create_default_column(tree_view, ColumnsEmptyFolders::Name as i32, Some(None), None); create_default_column(tree_view, ColumnsEmptyFolders::Path as i32, Some(None), None); create_default_column( tree_view, ColumnsEmptyFolders::Modification as i32, Some(Some(ColumnsEmptyFolders::ModificationAsSecs as i32)), None, ); } pub fn create_tree_view_big_files(tree_view: &TreeView) { tree_view.set_vexpand(true); let model = get_list_store(tree_view); create_default_selection_button_column(tree_view, ColumnsBigFiles::SelectionButton as i32, model, None); create_default_column(tree_view, ColumnsBigFiles::Size as i32, Some(None), None); create_default_column(tree_view, ColumnsBigFiles::Name as i32, Some(None), None); create_default_column(tree_view, ColumnsBigFiles::Path as i32, Some(None), None); create_default_column( tree_view, ColumnsBigFiles::Modification as i32, Some(Some(ColumnsBigFiles::ModificationAsSecs as i32)), None, ); } pub fn create_tree_view_temporary_files(tree_view: &TreeView) { tree_view.set_vexpand(true); let model = get_list_store(tree_view); create_default_selection_button_column(tree_view, ColumnsTemporaryFiles::SelectionButton as i32, model, None); create_default_column(tree_view, ColumnsTemporaryFiles::Name as i32, Some(None), None); create_default_column(tree_view, ColumnsTemporaryFiles::Path as i32, Some(None), None); create_default_column( tree_view, ColumnsTemporaryFiles::Modification as i32, Some(Some(ColumnsTemporaryFiles::ModificationAsSecs as i32)), None, ); } pub fn create_tree_view_empty_files(tree_view: &TreeView) { tree_view.set_vexpand(true); let model = get_list_store(tree_view); create_default_selection_button_column(tree_view, ColumnsEmptyFiles::SelectionButton as i32, model, None); create_default_column(tree_view, ColumnsEmptyFiles::Name as i32, Some(None), None); create_default_column(tree_view, ColumnsEmptyFiles::Path as i32, Some(None), None); create_default_column( tree_view, ColumnsEmptyFiles::Modification as i32, Some(Some(ColumnsEmptyFiles::ModificationAsSecs as i32)), None, ); } pub fn create_tree_view_similar_images(tree_view: &TreeView) { tree_view.set_vexpand(true); let model = get_list_store(tree_view); let columns_colors = (ColumnsSimilarImages::Color as i32, ColumnsSimilarImages::TextColor as i32); let activatable_colors = (ColumnsSimilarImages::ActivatableSelectButton as i32, ColumnsSimilarImages::Color as i32); create_default_selection_button_column(tree_view, ColumnsSimilarImages::SelectionButton as i32, model, Some(activatable_colors)); create_default_column(tree_view, ColumnsSimilarImages::Similarity as i32, None, Some(columns_colors)); create_default_column(tree_view, ColumnsSimilarImages::Size as i32, None, Some(columns_colors)); create_default_column(tree_view, ColumnsSimilarImages::Dimensions as i32, None, Some(columns_colors)); create_default_column(tree_view, ColumnsSimilarImages::Name as i32, None, Some(columns_colors)); create_default_column(tree_view, ColumnsSimilarImages::Path as i32, None, Some(columns_colors)); create_default_column(tree_view, ColumnsSimilarImages::Modification as i32, None, Some(columns_colors)); } pub fn create_tree_view_similar_videos(tree_view: &TreeView) { tree_view.set_vexpand(true); let model = get_list_store(tree_view); let columns_colors = (ColumnsSimilarVideos::Color as i32, ColumnsSimilarVideos::TextColor as i32); let activatable_colors = (ColumnsSimilarVideos::ActivatableSelectButton as i32, ColumnsSimilarVideos::Color as i32); create_default_selection_button_column(tree_view, ColumnsSimilarVideos::SelectionButton as i32, model, Some(activatable_colors)); create_default_column(tree_view, ColumnsSimilarVideos::Size as i32, None, Some(columns_colors)); create_default_column(tree_view, ColumnsSimilarVideos::Name as i32, None, Some(columns_colors)); create_default_column(tree_view, ColumnsSimilarVideos::Path as i32, None, Some(columns_colors)); create_default_column(tree_view, ColumnsSimilarVideos::Modification as i32, None, Some(columns_colors)); } pub fn create_tree_view_same_music(tree_view: &TreeView) { tree_view.set_vexpand(true); let model = get_list_store(tree_view); let columns_colors = (ColumnsSameMusic::Color as i32, ColumnsSameMusic::TextColor as i32); let activatable_colors = (ColumnsSameMusic::ActivatableSelectButton as i32, ColumnsSameMusic::Color as i32); create_default_selection_button_column(tree_view, ColumnsSameMusic::SelectionButton as i32, model, Some(activatable_colors)); create_default_column(tree_view, ColumnsSameMusic::Size as i32, None, Some(columns_colors)); create_default_column(tree_view, ColumnsSameMusic::Name as i32, None, Some(columns_colors)); create_default_column(tree_view, ColumnsSameMusic::Title as i32, None, Some(columns_colors)); create_default_column(tree_view, ColumnsSameMusic::Artist as i32, None, Some(columns_colors)); create_default_column(tree_view, ColumnsSameMusic::Year as i32, None, Some(columns_colors)); create_default_column(tree_view, ColumnsSameMusic::Bitrate as i32, None, Some(columns_colors)); create_default_column(tree_view, ColumnsSameMusic::Length as i32, None, Some(columns_colors)); create_default_column(tree_view, ColumnsSameMusic::Genre as i32, None, Some(columns_colors)); create_default_column(tree_view, ColumnsSameMusic::Path as i32, None, Some(columns_colors)); create_default_column(tree_view, ColumnsSameMusic::Modification as i32, None, Some(columns_colors)); } pub fn create_tree_view_invalid_symlinks(tree_view: &TreeView) { tree_view.set_vexpand(true); let model = get_list_store(tree_view); create_default_selection_button_column(tree_view, ColumnsInvalidSymlinks::SelectionButton as i32, model, None); create_default_column(tree_view, ColumnsInvalidSymlinks::Name as i32, Some(None), None); create_default_column(tree_view, ColumnsInvalidSymlinks::Path as i32, Some(None), None); create_default_column(tree_view, ColumnsInvalidSymlinks::DestinationPath as i32, Some(None), None); create_default_column(tree_view, ColumnsInvalidSymlinks::TypeOfError as i32, Some(None), None); create_default_column( tree_view, ColumnsInvalidSymlinks::Modification as i32, Some(Some(ColumnsInvalidSymlinks::ModificationAsSecs as i32)), None, ); } pub fn create_tree_view_broken_files(tree_view: &TreeView) { tree_view.set_vexpand(true); let model = get_list_store(tree_view); create_default_selection_button_column(tree_view, ColumnsBrokenFiles::SelectionButton as i32, model, None); create_default_column(tree_view, ColumnsBrokenFiles::Name as i32, Some(None), None); create_default_column(tree_view, ColumnsBrokenFiles::Path as i32, Some(None), None); create_default_column(tree_view, ColumnsBrokenFiles::ErrorType as i32, Some(None), None); create_default_column( tree_view, ColumnsBrokenFiles::Modification as i32, Some(Some(ColumnsBrokenFiles::ModificationAsSecs as i32)), None, ); } pub fn create_tree_view_bad_extensions(tree_view: &TreeView) { tree_view.set_vexpand(true); let model = get_list_store(tree_view); create_default_selection_button_column(tree_view, ColumnsBadExtensions::SelectionButton as i32, model, None); create_default_column(tree_view, ColumnsBadExtensions::Name as i32, Some(None), None); create_default_column(tree_view, ColumnsBadExtensions::Path as i32, Some(None), None); create_default_column(tree_view, ColumnsBadExtensions::CurrentExtension as i32, Some(None), None); create_default_column(tree_view, ColumnsBadExtensions::ValidExtensions as i32, Some(None), None); } fn create_default_selection_button_column( tree_view: &TreeView, column_id: i32, model: ListStore, activatable_color_columns: Option<(i32, i32)>, ) -> (CellRendererToggle, TreeViewColumn) { let renderer = CellRendererToggle::new(); renderer.connect_toggled(move |_r, path| { let iter = model.iter(&path).expect("Failed to get iter from tree_path"); let mut fixed = model.get::(&iter, column_id); fixed = !fixed; model.set_value(&iter, column_id as u32, &fixed.to_value()); }); let column = TreeViewColumn::new(); column.pack_start(&renderer, true); column.set_resizable(false); column.set_fixed_width(30); column.add_attribute(&renderer, "active", column_id); if let Some(activatable_color_columns) = activatable_color_columns { column.add_attribute(&renderer, "activatable", activatable_color_columns.0); column.add_attribute(&renderer, "cell-background", activatable_color_columns.1); } tree_view.append_column(&column); (renderer, column) } #[allow(clippy::option_option)] fn create_default_column(tree_view: &TreeView, column_id: i32, sort_column_id: Option>, colors_columns_id: Option<(i32, i32)>) -> (CellRendererText, TreeViewColumn) { let renderer = CellRendererText::new(); let column: TreeViewColumn = TreeViewColumn::new(); column.pack_start(&renderer, true); column.set_resizable(true); column.set_min_width(50); column.add_attribute(&renderer, "text", column_id); if let Some(sort_column_id) = sort_column_id { if let Some(sort_column_id) = sort_column_id { column.set_sort_column_id(sort_column_id); } else { column.set_sort_column_id(column_id); } } if let Some(colors_columns_id) = colors_columns_id { column.add_attribute(&renderer, "background", colors_columns_id.0); column.add_attribute(&renderer, "foreground", colors_columns_id.1); } tree_view.append_column(&column); (renderer, column) } czkawka_gui-8.0.0/src/gui_structs/gui_about.rs000064400000000000000000000115341046102023000176220ustar 00000000000000use gdk4::gdk_pixbuf::Pixbuf; use gtk4::prelude::*; use gtk4::{Builder, Button, Orientation, Picture, Window}; use crate::flg; use crate::help_functions::get_all_boxes_from_widget; #[derive(Clone)] pub struct GuiAbout { pub about_dialog: gtk4::AboutDialog, pub button_repository: Button, pub button_donation: Button, pub button_instruction: Button, pub button_translation: Button, } impl GuiAbout { pub fn create_from_builder(window_main: &Window, logo: &Pixbuf) -> Self { let glade_src = include_str!("../../ui/about_dialog.ui").to_string(); let builder = Builder::from_string(glade_src.as_str()); let about_dialog: gtk4::AboutDialog = builder.object("about_dialog").expect("Cambalache"); about_dialog.set_modal(true); about_dialog.set_transient_for(Some(window_main)); about_dialog.set_logo(Picture::for_pixbuf(logo).paintable().as_ref()); // Taken from command - "git shortlog -s -n -e > a.txt" - remember to remove duplicates // First clean it with regex " \<[^\n]+" and next with " +[0-9]+\t" and at end replace "([^\n]+)" with ""$1"," (or ""\0",") // This should be updated only before releasing new version about_dialog.set_authors(&[ "RafaÅ‚ Mikrut", "Alexis Lefebvre", "Thomas Andreas Jung", "Alexis Lefebvre", "Peter Blackson", "TheEvilSkeleton", "Ben Bodenmiller", "ChihWei Wang", "Dan Dascalescu", "Dominik PiÄ…tkowski", "Igor", "Jocelyn Le Sage", "Kerfuffle", "Shriraj Hegde", "krzysdz", "0x4A6F", "0xflotus", "Aarni Koskela", "Adam Boguszewski", "Alex", "Caduser2020", "CalunVier", "Danny Kirkham", "Dariusz Niedoba", "Douman", "Elazar Fine", "Farmadupe", "Fr_Dae", "Gitoffthelawn", "Ivan Habernal", "Jan Jurec", "Joey Babcock", "Jona", "Jonathan Hult", "Kian-Meng Ang", "Liru Wilkowski", "Meir Klemfner", "Mek101", "Michael Grigoryan", "Nick Gallimore", "Nikita Karamov", "OMEGA_RAZER", "Renner0E", "Rodrigo Torres", "Samuel", "Sbgodin", "Spirit", "Stefan Seering", "Syfaro", "Sébastien", "Tom Paine", "Tom Praschan", "Torsten Homberger", "Yuri Slobodyanyuk", "alexdraconian", "bakeromso", "bellrise", "codingnewcode", "cyqsimon", "endolith", "jann", "kamilek96", "kuskov", "rugk", "santiago fn", "tecome", "tenninjas", "undefined-landmark", ]); let custom_box = get_all_boxes_from_widget(&about_dialog)[2].clone(); // TODO may not be stable enough between GTK versions let new_box = gtk4::Box::new(Orientation::Horizontal, 5); let button_repository = Button::builder().label("Repository").build(); let button_donation = Button::builder().label("Donation").build(); let button_instruction = Button::builder().label("Instruction").build(); let button_translation = Button::builder().label("Translation").build(); new_box.append(&button_repository); new_box.append(&button_donation); new_box.append(&button_instruction); new_box.append(&button_translation); custom_box.append(&new_box); Self { about_dialog, button_repository, button_donation, button_instruction, button_translation, } } pub fn update_language(&self) { let mut comment_text: String = "2020 - 2024 RafaÅ‚ Mikrut(qarmin)\n\n".to_string(); comment_text += &flg!("about_window_motto"); self.about_dialog.set_comments(Some(&comment_text)); self.button_repository.set_tooltip_text(Some(&flg!("about_repository_button_tooltip"))); self.button_donation.set_tooltip_text(Some(&flg!("about_donation_button_tooltip"))); self.button_instruction.set_tooltip_text(Some(&flg!("about_instruction_button_tooltip"))); self.button_translation.set_tooltip_text(Some(&flg!("about_translation_button_tooltip"))); self.button_repository.set_label(&flg!("about_repository_button")); self.button_donation.set_label(&flg!("about_donation_button")); self.button_instruction.set_label(&flg!("about_instruction_button")); self.button_translation.set_label(&flg!("about_translation_button")); } } czkawka_gui-8.0.0/src/gui_structs/gui_bottom_buttons.rs000064400000000000000000000207631046102023000215760ustar 00000000000000use gtk4::prelude::*; use gtk4::{GestureClick, Widget}; use crate::gui_structs::gui_data::CZK_ICON_SORT; use crate::help_functions::{get_custom_label_from_widget, set_icon_of_button, BottomButtonsEnum}; use crate::{ flg, CZK_ICON_COMPARE, CZK_ICON_HARDLINK, CZK_ICON_HIDE_DOWN, CZK_ICON_HIDE_UP, CZK_ICON_MOVE, CZK_ICON_SAVE, CZK_ICON_SEARCH, CZK_ICON_SELECT, CZK_ICON_SYMLINK, CZK_ICON_TRASH, }; #[derive(Clone)] pub struct GuiBottomButtons { pub buttons_search: gtk4::Button, pub buttons_select: gtk4::MenuButton, pub buttons_delete: gtk4::Button, pub buttons_save: gtk4::Button, pub buttons_symlink: gtk4::Button, pub buttons_hardlink: gtk4::Button, pub buttons_move: gtk4::Button, pub buttons_compare: gtk4::Button, pub buttons_sort: gtk4::MenuButton, pub buttons_show_errors: gtk4::Button, pub buttons_show_upper_notebook: gtk4::Button, pub label_buttons_select: gtk4::Label, pub label_buttons_sort: gtk4::Label, pub buttons_names: [BottomButtonsEnum; 9], pub buttons_array: [Widget; 9], pub gc_buttons_select: GestureClick, pub gc_buttons_sort: GestureClick, } impl GuiBottomButtons { pub fn create_from_builder(builder: >k4::Builder, popover_select: >k4::Popover, popover_sort: >k4::Popover) -> Self { let buttons_search: gtk4::Button = builder.object("buttons_search").expect("Cambalache"); let buttons_select: gtk4::MenuButton = builder.object("buttons_select").expect("Cambalache"); let buttons_delete: gtk4::Button = builder.object("buttons_delete").expect("Cambalache"); let buttons_save: gtk4::Button = builder.object("buttons_save").expect("Cambalache"); let buttons_symlink: gtk4::Button = builder.object("buttons_symlink").expect("Cambalache"); let buttons_hardlink: gtk4::Button = builder.object("buttons_hardlink").expect("Cambalache"); let buttons_move: gtk4::Button = builder.object("buttons_move").expect("Cambalache"); let buttons_compare: gtk4::Button = builder.object("buttons_compare").expect("Cambalache"); let buttons_sort: gtk4::MenuButton = builder.object("buttons_sort").expect("Cambalache"); let buttons_show_errors: gtk4::Button = builder.object("buttons_show_errors").expect("Cambalache"); let buttons_show_upper_notebook: gtk4::Button = builder.object("buttons_show_upper_notebook").expect("Cambalache"); let label_buttons_select: gtk4::Label = builder.object("label_buttons_select").expect("Cambalache"); let label_buttons_sort: gtk4::Label = builder.object("label_buttons_sort").expect("Cambalache"); let gc_buttons_select: GestureClick = GestureClick::new(); let gc_buttons_sort: GestureClick = GestureClick::new(); buttons_select.add_controller(gc_buttons_select.clone()); buttons_sort.add_controller(gc_buttons_sort.clone()); set_icon_of_button(&buttons_search, CZK_ICON_SEARCH); set_icon_of_button(&buttons_select, CZK_ICON_SELECT); set_icon_of_button(&buttons_delete, CZK_ICON_TRASH); set_icon_of_button(&buttons_save, CZK_ICON_SAVE); set_icon_of_button(&buttons_symlink, CZK_ICON_SYMLINK); set_icon_of_button(&buttons_hardlink, CZK_ICON_HARDLINK); set_icon_of_button(&buttons_move, CZK_ICON_MOVE); set_icon_of_button(&buttons_compare, CZK_ICON_COMPARE); set_icon_of_button(&buttons_sort, CZK_ICON_SORT); set_icon_of_button(&buttons_show_errors, CZK_ICON_HIDE_DOWN); set_icon_of_button(&buttons_show_upper_notebook, CZK_ICON_HIDE_UP); let buttons_names = [ BottomButtonsEnum::Search, BottomButtonsEnum::Select, BottomButtonsEnum::Delete, BottomButtonsEnum::Save, BottomButtonsEnum::Symlink, BottomButtonsEnum::Hardlink, BottomButtonsEnum::Move, BottomButtonsEnum::Compare, BottomButtonsEnum::Sort, ]; let buttons_array = [ buttons_search.clone().upcast::(), buttons_select.clone().upcast::(), buttons_delete.clone().upcast::(), buttons_save.clone().upcast::(), buttons_symlink.clone().upcast::(), buttons_hardlink.clone().upcast::(), buttons_move.clone().upcast::(), buttons_compare.clone().upcast::(), buttons_sort.clone().upcast::(), ]; buttons_select.set_popover(Some(popover_select)); buttons_sort.set_popover(Some(popover_sort)); #[cfg(target_family = "windows")] buttons_hardlink.set_sensitive(test_hardlinks()); Self { buttons_search, buttons_select, buttons_delete, buttons_save, buttons_symlink, buttons_hardlink, buttons_move, buttons_compare, buttons_sort, buttons_show_errors, buttons_show_upper_notebook, label_buttons_select, label_buttons_sort, buttons_names, buttons_array, gc_buttons_select, gc_buttons_sort, } } pub fn update_language(&self) { get_custom_label_from_widget(&self.buttons_search.clone()).set_text(&flg!("bottom_search_button")); self.label_buttons_select.set_text(&flg!("bottom_select_button")); get_custom_label_from_widget(&self.buttons_delete.clone()).set_text(&flg!("bottom_delete_button")); get_custom_label_from_widget(&self.buttons_save.clone()).set_text(&flg!("bottom_save_button")); get_custom_label_from_widget(&self.buttons_symlink.clone()).set_text(&flg!("bottom_symlink_button")); get_custom_label_from_widget(&self.buttons_move.clone()).set_text(&flg!("bottom_move_button")); get_custom_label_from_widget(&self.buttons_hardlink.clone()).set_text(&flg!("bottom_hardlink_button")); get_custom_label_from_widget(&self.buttons_compare.clone()).set_text(&flg!("bottom_compare_button")); self.label_buttons_sort.set_text(&flg!("bottom_sort_button")); self.buttons_search.set_tooltip_text(Some(&flg!("bottom_search_button_tooltip"))); self.buttons_select.set_tooltip_text(Some(&flg!("bottom_select_button_tooltip"))); self.buttons_delete.set_tooltip_text(Some(&flg!("bottom_delete_button_tooltip"))); self.buttons_save.set_tooltip_text(Some(&flg!("bottom_save_button_tooltip"))); self.buttons_symlink.set_tooltip_text(Some(&flg!("bottom_symlink_button_tooltip"))); self.buttons_move.set_tooltip_text(Some(&flg!("bottom_move_button_tooltip"))); self.buttons_sort.set_tooltip_text(Some(&flg!("bottom_sort_button_tooltip"))); self.buttons_compare.set_tooltip_text(Some(&flg!("bottom_compare_button_tooltip"))); if self.buttons_hardlink.is_sensitive() { self.buttons_hardlink.set_tooltip_text(Some(&flg!("bottom_hardlink_button_tooltip"))); } else { self.buttons_hardlink.set_tooltip_text(Some(&flg!("bottom_hardlink_button_not_available_tooltip"))); } self.buttons_show_errors.set_tooltip_text(Some(&flg!("bottom_show_errors_tooltip"))); self.buttons_show_upper_notebook.set_tooltip_text(Some(&flg!("bottom_show_upper_notebook_tooltip"))); } } #[cfg(target_family = "windows")] fn test_hardlinks() -> bool { use std::fs; use std::io::Write; use std::path::Path; use directories_next::ProjectDirs; let mut hardlinked = false; if let Some(proj_dirs) = ProjectDirs::from("pl", "Qarmin", "Czkawka") { let cache_dir = proj_dirs.cache_dir(); let cache_file = cache_dir.join(Path::new("GILLES_FROM_NOSE.temp")); let cache_file_second = cache_dir.join(Path::new("ROBERCIG_LOWANDOWSKI.temp")); if cache_file.exists() { let _ = fs::remove_file(&cache_file); } if cache_file_second.exists() { let _ = fs::remove_file(&cache_file_second); } if !cache_file.exists() && !cache_file_second.exists() { if let Ok(mut file_handler) = fs::OpenOptions::new().write(true).create(true).open(&cache_file) { let _ = writeln!(file_handler, "GURKA"); } let _ = fs::hard_link(&cache_file, &cache_file_second); if cache_file.exists() && cache_file_second.exists() { hardlinked = true; } } let _ = fs::remove_file(&cache_file); let _ = fs::remove_file(&cache_file_second); } hardlinked } czkawka_gui-8.0.0/src/gui_structs/gui_compare_images.rs000064400000000000000000000072341046102023000214650ustar 00000000000000use std::cell::RefCell; use std::rc::Rc; use gtk4::prelude::*; use gtk4::{Builder, TreePath}; use crate::help_functions::set_icon_of_button; use crate::{flg, CZK_ICON_LEFT, CZK_ICON_RIGHT}; #[derive(Clone)] pub struct GuiCompareImages { pub window_compare: gtk4::Window, pub label_group_info: gtk4::Label, pub button_go_previous_compare_group: gtk4::Button, pub button_go_next_compare_group: gtk4::Button, pub check_button_left_preview_text: gtk4::CheckButton, pub check_button_right_preview_text: gtk4::CheckButton, pub image_compare_left: gtk4::Image, pub image_compare_right: gtk4::Image, pub scrolled_window_compare_choose_images: gtk4::ScrolledWindow, pub shared_numbers_of_groups: Rc>, pub shared_current_of_groups: Rc>, pub shared_current_path: Rc>>, pub shared_image_cache: Rc>>, pub shared_using_for_preview: Rc, Option)>>, } impl GuiCompareImages { pub fn create_from_builder(window_main: >k4::Window) -> Self { let glade_src = include_str!("../../ui/compare_images.ui").to_string(); let builder = Builder::from_string(glade_src.as_str()); let window_compare: gtk4::Window = builder.object("window_compare").expect("Cambalache"); window_compare.set_title(Some(&flg!("window_compare_images"))); window_compare.set_modal(true); window_compare.set_transient_for(Some(window_main)); let label_group_info: gtk4::Label = builder.object("label_group_info").expect("Cambalache"); let button_go_previous_compare_group: gtk4::Button = builder.object("button_go_previous_compare_group").expect("Cambalache"); let button_go_next_compare_group: gtk4::Button = builder.object("button_go_next_compare_group").expect("Cambalache"); let check_button_left_preview_text: gtk4::CheckButton = builder.object("check_button_left_preview_text").expect("Cambalache"); let check_button_right_preview_text: gtk4::CheckButton = builder.object("check_button_right_preview_text").expect("Cambalache"); let image_compare_left: gtk4::Image = builder.object("image_compare_left").expect("Cambalache"); let image_compare_right: gtk4::Image = builder.object("image_compare_right").expect("Cambalache"); let scrolled_window_compare_choose_images: gtk4::ScrolledWindow = builder.object("scrolled_window_compare_choose_images").expect("Cambalache"); let shared_numbers_of_groups = Rc::new(RefCell::new(0)); let shared_current_of_groups = Rc::new(RefCell::new(0)); let shared_current_path = Rc::new(RefCell::new(None)); let shared_image_cache = Rc::new(RefCell::new(Vec::new())); let shared_using_for_preview = Rc::new(RefCell::new((None, None))); set_icon_of_button(&button_go_previous_compare_group, CZK_ICON_LEFT); set_icon_of_button(&button_go_next_compare_group, CZK_ICON_RIGHT); Self { window_compare, label_group_info, button_go_previous_compare_group, button_go_next_compare_group, check_button_left_preview_text, check_button_right_preview_text, image_compare_left, image_compare_right, scrolled_window_compare_choose_images, shared_numbers_of_groups, shared_current_of_groups, shared_current_path, shared_image_cache, shared_using_for_preview, } } pub fn update_language(&self) { self.window_compare.set_title(Some(&flg!("window_compare_images"))); } } czkawka_gui-8.0.0/src/gui_structs/gui_data.rs000064400000000000000000000262021046102023000174170ustar 00000000000000use std::cell::RefCell; use std::collections::HashMap; use std::io::BufReader; use std::rc::Rc; use crossbeam_channel::bounded; use czkawka_core::bad_extensions::BadExtensions; use czkawka_core::big_file::BigFile; use czkawka_core::broken_files::BrokenFiles; 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::SimilarImages; use czkawka_core::similar_videos::SimilarVideos; use czkawka_core::temporary::Temporary; use gdk4::gdk_pixbuf::Pixbuf; use gtk4::prelude::*; use gtk4::{Builder, FileChooserNative}; use crate::flg; use crate::gui_structs::gui_about::GuiAbout; use crate::gui_structs::gui_bottom_buttons::GuiBottomButtons; use crate::gui_structs::gui_compare_images::GuiCompareImages; use crate::gui_structs::gui_header::GuiHeader; use crate::gui_structs::gui_main_notebook::GuiMainNotebook; use crate::gui_structs::gui_popovers_select::GuiSelectPopovers; use crate::gui_structs::gui_popovers_sort::GuiSortPopovers; use crate::gui_structs::gui_progress_dialog::GuiProgressDialog; use crate::gui_structs::gui_settings::GuiSettings; use crate::gui_structs::gui_upper_notebook::GuiUpperNotebook; use crate::help_functions::{BottomButtonsEnum, SharedState}; use crate::notebook_enums::*; use crate::taskbar_progress::TaskbarProgress; pub const ICON_ABOUT: &[u8] = include_bytes!("../../icons/icon_about.png"); pub const CZK_ICON_ADD: &[u8] = include_bytes!("../../icons/czk_add.svg"); pub const CZK_ICON_COMPARE: &[u8] = include_bytes!("../../icons/czk_compare.svg"); pub const CZK_ICON_DELETE: &[u8] = include_bytes!("../../icons/czk_delete.svg"); pub const CZK_ICON_HARDLINK: &[u8] = include_bytes!("../../icons/czk_hardlink.svg"); pub const CZK_ICON_HIDE_DOWN: &[u8] = include_bytes!("../../icons/czk_hide_down.svg"); pub const CZK_ICON_HIDE_UP: &[u8] = include_bytes!("../../icons/czk_hide_up.svg"); pub const CZK_ICON_INFO: &[u8] = include_bytes!("../../icons/czk_info.svg"); pub const CZK_ICON_LEFT: &[u8] = include_bytes!("../../icons/czk_left.svg"); pub const CZK_ICON_MANUAL_ADD: &[u8] = include_bytes!("../../icons/czk_manual_add.svg"); pub const CZK_ICON_MOVE: &[u8] = include_bytes!("../../icons/czk_move.svg"); pub const CZK_ICON_RIGHT: &[u8] = include_bytes!("../../icons/czk_right.svg"); pub const CZK_ICON_SAVE: &[u8] = include_bytes!("../../icons/czk_save.svg"); pub const CZK_ICON_SEARCH: &[u8] = include_bytes!("../../icons/czk_search.svg"); pub const CZK_ICON_SELECT: &[u8] = include_bytes!("../../icons/czk_select.svg"); pub const CZK_ICON_SETTINGS: &[u8] = include_bytes!("../../icons/czk_settings.svg"); pub const CZK_ICON_SORT: &[u8] = include_bytes!("../../icons/czk_sort.svg"); pub const CZK_ICON_STOP: &[u8] = include_bytes!("../../icons/czk_stop.svg"); pub const CZK_ICON_SYMLINK: &[u8] = include_bytes!("../../icons/czk_symlink.svg"); pub const CZK_ICON_TRASH: &[u8] = include_bytes!("../../icons/czk_trash.svg"); #[derive(Clone)] pub struct GuiData { // Windows pub window_main: gtk4::Window, pub main_notebook: GuiMainNotebook, pub upper_notebook: GuiUpperNotebook, pub popovers_select: GuiSelectPopovers, pub popovers_sort: GuiSortPopovers, pub bottom_buttons: GuiBottomButtons, pub progress_window: GuiProgressDialog, pub about: GuiAbout, pub settings: GuiSettings, pub header: GuiHeader, pub compare_images: GuiCompareImages, pub file_dialog_include_exclude_folder_selection: FileChooserNative, pub file_dialog_move_to_folder: FileChooserNative, // Taskbar state pub taskbar_state: Rc>, // Buttons state pub shared_buttons: Rc>>>, // State of search results pub shared_duplication_state: SharedState, pub shared_empty_folders_state: SharedState, pub shared_empty_files_state: SharedState, pub shared_temporary_files_state: SharedState, pub shared_big_files_state: SharedState, pub shared_similar_images_state: SharedState, pub shared_similar_videos_state: SharedState, pub shared_same_music_state: SharedState, pub shared_same_invalid_symlinks: SharedState, pub shared_broken_files_state: SharedState, pub shared_bad_extensions_state: SharedState, pub preview_path: Rc>, //// Entry pub entry_info: gtk4::Entry, //// Bottom pub text_view_errors: gtk4::TextView, pub scrolled_window_errors: gtk4::ScrolledWindow, // Used for sending stop signal to thread pub stop_sender: crossbeam_channel::Sender<()>, pub stop_receiver: crossbeam_channel::Receiver<()>, } impl GuiData { pub fn new_with_application(application: >k4::Application) -> Self { //// Loading glade file content and build with it help UI let glade_src = include_str!("../../ui/main_window.ui").to_string(); let builder = Builder::from_string(glade_src.as_str()); //// Windows let window_main: gtk4::Window = builder.object("window_main").expect("Cambalache"); window_main.set_title(Some(&flg!("window_main_title"))); window_main.show(); let pixbuf = Pixbuf::from_read(BufReader::new(ICON_ABOUT)).expect("Couldn't load icon"); window_main.set_application(Some(application)); let main_notebook = GuiMainNotebook::create_from_builder(&builder); let upper_notebook = GuiUpperNotebook::create_from_builder(&builder); let popovers_select = GuiSelectPopovers::create_from_builder(); let popovers_sort = GuiSortPopovers::create_from_builder(); let bottom_buttons = GuiBottomButtons::create_from_builder(&builder, &popovers_select.popover_select, &popovers_sort.popover_sort); let progress_window = GuiProgressDialog::create_from_builder(&window_main); let about = GuiAbout::create_from_builder(&window_main, &pixbuf); let header = GuiHeader::create_from_builder(&builder); let settings = GuiSettings::create_from_builder(&window_main); let compare_images = GuiCompareImages::create_from_builder(&window_main); //////////////////////////////////////////////////////////////////////////////////////////////// // Taskbar state let taskbar_state = Rc::new(RefCell::new(TaskbarProgress::new())); // Buttons State - to remember existence of different buttons on pages let shared_buttons: Rc> = Rc::new(RefCell::new(HashMap::>::new())); // Show by default only search button for i in &get_all_main_tabs() { let mut temp_hashmap: HashMap = Default::default(); for button_name in &bottom_buttons.buttons_names { if *button_name == BottomButtonsEnum::Search { temp_hashmap.insert(*button_name, true); } else { temp_hashmap.insert(*button_name, false); } } shared_buttons.borrow_mut().insert(*i, temp_hashmap); } // File Dialogs - Native file dialogs must exists all the time in opposite to normal dialog let file_dialog_include_exclude_folder_selection = FileChooserNative::builder() .action(gtk4::FileChooserAction::SelectFolder) .transient_for(&window_main) .select_multiple(true) .modal(true) .build(); let file_dialog_move_to_folder = FileChooserNative::builder() .title(flg!("move_files_title_dialog")) .action(gtk4::FileChooserAction::SelectFolder) .transient_for(&window_main) .select_multiple(false) .modal(true) .build(); // State of search results let shared_duplication_state: Rc> = Rc::new(RefCell::new(None)); let shared_empty_folders_state: Rc> = Rc::new(RefCell::new(None)); let shared_empty_files_state: Rc> = Rc::new(RefCell::new(None)); let shared_temporary_files_state: Rc> = Rc::new(RefCell::new(None)); let shared_big_files_state: Rc> = Rc::new(RefCell::new(None)); let shared_similar_images_state: Rc> = Rc::new(RefCell::new(None)); let shared_similar_videos_state: Rc> = Rc::new(RefCell::new(None)); let shared_same_music_state: Rc> = Rc::new(RefCell::new(None)); let shared_same_invalid_symlinks: Rc> = Rc::new(RefCell::new(None)); let shared_broken_files_state: Rc> = Rc::new(RefCell::new(None)); let shared_bad_extensions_state: Rc> = Rc::new(RefCell::new(None)); let preview_path: Rc> = Rc::new(RefCell::new(String::new())); //// Entry let entry_info: gtk4::Entry = builder.object("entry_info").expect("Cambalache"); //// Bottom let text_view_errors: gtk4::TextView = builder.object("text_view_errors").expect("Cambalache"); let scrolled_window_errors: gtk4::ScrolledWindow = builder.object("scrolled_window_errors").expect("Cambalache"); scrolled_window_errors.show(); // Not sure why needed, but without it text view errors sometimes hide itself // Used for sending stop signal to thread let (stop_sender, stop_receiver): (crossbeam_channel::Sender<()>, crossbeam_channel::Receiver<()>) = bounded(1); Self { window_main, main_notebook, upper_notebook, popovers_select, popovers_sort, bottom_buttons, progress_window, about, settings, header, compare_images, file_dialog_include_exclude_folder_selection, file_dialog_move_to_folder, taskbar_state, shared_buttons, shared_duplication_state, shared_empty_folders_state, shared_empty_files_state, shared_temporary_files_state, shared_big_files_state, shared_similar_images_state, shared_similar_videos_state, shared_same_music_state, shared_same_invalid_symlinks, shared_broken_files_state, shared_bad_extensions_state, preview_path, entry_info, text_view_errors, scrolled_window_errors, stop_sender, stop_receiver, } } pub fn update_language(&self) { self.window_main.set_title(Some(&flg!("window_main_title"))); self.main_notebook.update_language(); self.upper_notebook.update_language(); self.popovers_select.update_language(); self.popovers_sort.update_language(); self.bottom_buttons.update_language(); self.progress_window.update_language(); self.about.update_language(); self.header.update_language(); self.settings.update_language(); self.compare_images.update_language(); } } czkawka_gui-8.0.0/src/gui_structs/gui_header.rs000064400000000000000000000016541046102023000177420ustar 00000000000000use gtk4::prelude::*; use crate::help_functions::set_icon_of_button; use crate::{flg, CZK_ICON_INFO, CZK_ICON_SETTINGS}; #[derive(Clone)] pub struct GuiHeader { pub button_settings: gtk4::Button, pub button_app_info: gtk4::Button, } impl GuiHeader { pub fn create_from_builder(builder: >k4::Builder) -> Self { let button_settings: gtk4::Button = builder.object("button_settings").expect("Cambalache"); let button_app_info: gtk4::Button = builder.object("button_app_info").expect("Cambalache"); set_icon_of_button(&button_settings, CZK_ICON_SETTINGS); set_icon_of_button(&button_app_info, CZK_ICON_INFO); Self { button_settings, button_app_info } } pub fn update_language(&self) { self.button_settings.set_tooltip_text(Some(&flg!("header_setting_button_tooltip"))); self.button_app_info.set_tooltip_text(Some(&flg!("header_about_button_tooltip"))); } } czkawka_gui-8.0.0/src/gui_structs/gui_main_notebook.rs000064400000000000000000001057671046102023000213500ustar 00000000000000use czkawka_core::big_file::SearchMode; use czkawka_core::common_dir_traversal::CheckingMethod; use czkawka_core::localizer_core::{fnc_get_similarity_minimal, fnc_get_similarity_very_high}; use czkawka_core::similar_images::{get_string_from_similarity, SIMILAR_VALUES}; use gtk4::prelude::*; use gtk4::{Builder, CheckButton, ComboBoxText, Entry, EventControllerKey, GestureClick, Image, Label, Notebook, Scale, ScrolledWindow, TreeView, Widget}; use crate::flg; use crate::help_combo_box::{AUDIO_TYPE_CHECK_METHOD_COMBO_BOX, BIG_FILES_CHECK_METHOD_COMBO_BOX, DUPLICATES_CHECK_METHOD_COMBO_BOX, IMAGES_HASH_SIZE_COMBO_BOX}; use crate::help_functions::get_all_direct_children; use crate::notebook_enums::{NotebookMainEnum, NUMBER_OF_NOTEBOOK_MAIN_TABS}; #[derive(Clone)] pub struct GuiMainNotebook { pub notebook_main: Notebook, pub scrolled_window_duplicate_finder: ScrolledWindow, pub scrolled_window_empty_folder_finder: ScrolledWindow, pub scrolled_window_empty_files_finder: ScrolledWindow, pub scrolled_window_temporary_files_finder: ScrolledWindow, pub scrolled_window_big_files_finder: ScrolledWindow, pub scrolled_window_similar_images_finder: ScrolledWindow, pub scrolled_window_similar_videos_finder: ScrolledWindow, pub scrolled_window_same_music_finder: ScrolledWindow, pub scrolled_window_invalid_symlinks: ScrolledWindow, pub scrolled_window_broken_files: ScrolledWindow, pub scrolled_window_bad_extensions: ScrolledWindow, pub tree_view_duplicate_finder: TreeView, pub tree_view_empty_folder_finder: TreeView, pub tree_view_empty_files_finder: TreeView, pub tree_view_temporary_files_finder: TreeView, pub tree_view_big_files_finder: TreeView, pub tree_view_similar_images_finder: TreeView, pub tree_view_similar_videos_finder: TreeView, pub tree_view_same_music_finder: TreeView, pub tree_view_invalid_symlinks: TreeView, pub tree_view_broken_files: TreeView, pub tree_view_bad_extensions: TreeView, pub evk_tree_view_duplicate_finder: EventControllerKey, pub evk_tree_view_empty_folder_finder: EventControllerKey, pub evk_tree_view_empty_files_finder: EventControllerKey, pub evk_tree_view_temporary_files_finder: EventControllerKey, pub evk_tree_view_big_files_finder: EventControllerKey, pub evk_tree_view_similar_images_finder: EventControllerKey, pub evk_tree_view_similar_videos_finder: EventControllerKey, pub evk_tree_view_same_music_finder: EventControllerKey, pub evk_tree_view_invalid_symlinks: EventControllerKey, pub evk_tree_view_broken_files: EventControllerKey, pub evk_tree_view_bad_extensions: EventControllerKey, pub gc_tree_view_duplicate_finder: GestureClick, pub gc_tree_view_empty_folder_finder: GestureClick, pub gc_tree_view_empty_files_finder: GestureClick, pub gc_tree_view_temporary_files_finder: GestureClick, pub gc_tree_view_big_files_finder: GestureClick, pub gc_tree_view_similar_images_finder: GestureClick, pub gc_tree_view_similar_videos_finder: GestureClick, pub gc_tree_view_same_music_finder: GestureClick, pub gc_tree_view_invalid_symlinks: GestureClick, pub gc_tree_view_broken_files: GestureClick, pub gc_tree_view_bad_extensions: GestureClick, // General // Duplicate pub combo_box_duplicate_check_method: ComboBoxText, pub combo_box_duplicate_hash_type: ComboBoxText, pub label_duplicate_check_method: Label, pub label_duplicate_hash_type: Label, pub check_button_duplicate_case_sensitive_name: CheckButton, pub image_preview_duplicates: Image, // Big file pub label_big_shown_files: Label, pub entry_big_files_number: Entry, pub label_big_files_mode: Label, pub combo_box_big_files_mode: ComboBoxText, // Similar Images pub scale_similarity_similar_images: Scale, pub label_image_resize_algorithm: Label, pub label_image_hash_type: Label, pub label_image_hash_size: Label, pub combo_box_image_resize_algorithm: ComboBoxText, pub combo_box_image_hash_algorithm: ComboBoxText, pub combo_box_image_hash_size: ComboBoxText, pub check_button_image_ignore_same_size: CheckButton, pub check_button_video_ignore_same_size: CheckButton, pub label_image_similarity: Label, pub label_image_similarity_max: Label, pub image_preview_similar_images: Image, pub label_similar_images_minimal_similarity: Label, // Video pub label_video_similarity: Label, pub label_video_similarity_min: Label, pub label_video_similarity_max: Label, pub scale_similarity_similar_videos: Scale, // Broken Files pub check_button_broken_files_audio: CheckButton, pub check_button_broken_files_pdf: CheckButton, pub check_button_broken_files_archive: CheckButton, pub check_button_broken_files_image: CheckButton, // Music pub check_button_music_title: CheckButton, pub check_button_music_artist: CheckButton, pub check_button_music_year: CheckButton, pub check_button_music_bitrate: CheckButton, pub check_button_music_genre: CheckButton, pub check_button_music_length: CheckButton, pub check_button_music_approximate_comparison: CheckButton, pub check_button_music_compare_only_in_title_group: CheckButton, #[allow(unused)] pub label_audio_check_type: Label, pub combo_box_audio_check_type: ComboBoxText, pub label_same_music_seconds: Label, pub label_same_music_similarity: Label, pub scale_seconds_same_music: Scale, pub scale_similarity_same_music: Scale, } impl GuiMainNotebook { pub fn create_from_builder(builder: &Builder) -> Self { let notebook_main: Notebook = builder.object("notebook_main").expect("Cambalache"); let scrolled_window_duplicate_finder: ScrolledWindow = builder.object("scrolled_window_duplicate_finder").expect("Cambalache"); let scrolled_window_empty_folder_finder: ScrolledWindow = builder.object("scrolled_window_empty_folder_finder").expect("Cambalache"); let scrolled_window_empty_files_finder: ScrolledWindow = builder.object("scrolled_window_empty_files_finder").expect("Cambalache"); let scrolled_window_temporary_files_finder: ScrolledWindow = builder.object("scrolled_window_temporary_files_finder").expect("Cambalache"); let scrolled_window_big_files_finder: ScrolledWindow = builder.object("scrolled_window_big_files_finder").expect("Cambalache"); let scrolled_window_similar_images_finder: ScrolledWindow = builder.object("scrolled_window_similar_images_finder").expect("Cambalache"); let scrolled_window_similar_videos_finder: ScrolledWindow = builder.object("scrolled_window_similar_videos_finder").expect("Cambalache"); let scrolled_window_same_music_finder: ScrolledWindow = builder.object("scrolled_window_same_music_finder").expect("Cambalache"); let scrolled_window_invalid_symlinks: ScrolledWindow = builder.object("scrolled_window_invalid_symlinks").expect("Cambalache"); let scrolled_window_broken_files: ScrolledWindow = builder.object("scrolled_window_broken_files").expect("Cambalache"); let scrolled_window_bad_extensions: ScrolledWindow = builder.object("scrolled_window_bad_extensions").expect("Cambalache"); let tree_view_duplicate_finder: TreeView = TreeView::new(); tree_view_duplicate_finder.set_widget_name("PIERD"); let tree_view_empty_folder_finder: TreeView = TreeView::new(); let tree_view_empty_files_finder: TreeView = TreeView::new(); let tree_view_temporary_files_finder: TreeView = TreeView::new(); let tree_view_big_files_finder: TreeView = TreeView::new(); let tree_view_similar_images_finder: TreeView = TreeView::new(); let tree_view_similar_videos_finder: TreeView = TreeView::new(); let tree_view_same_music_finder: TreeView = TreeView::new(); let tree_view_invalid_symlinks: TreeView = TreeView::new(); let tree_view_broken_files: TreeView = TreeView::new(); let tree_view_bad_extensions: TreeView = TreeView::new(); let evk_tree_view_duplicate_finder: EventControllerKey = EventControllerKey::new(); tree_view_duplicate_finder.add_controller(evk_tree_view_duplicate_finder.clone()); let evk_tree_view_empty_folder_finder: EventControllerKey = EventControllerKey::new(); tree_view_empty_folder_finder.add_controller(evk_tree_view_empty_folder_finder.clone()); let evk_tree_view_empty_files_finder: EventControllerKey = EventControllerKey::new(); tree_view_empty_files_finder.add_controller(evk_tree_view_empty_files_finder.clone()); let evk_tree_view_temporary_files_finder: EventControllerKey = EventControllerKey::new(); tree_view_temporary_files_finder.add_controller(evk_tree_view_temporary_files_finder.clone()); let evk_tree_view_big_files_finder: EventControllerKey = EventControllerKey::new(); tree_view_big_files_finder.add_controller(evk_tree_view_big_files_finder.clone()); let evk_tree_view_similar_images_finder: EventControllerKey = EventControllerKey::new(); tree_view_similar_images_finder.add_controller(evk_tree_view_similar_images_finder.clone()); let evk_tree_view_similar_videos_finder: EventControllerKey = EventControllerKey::new(); tree_view_similar_videos_finder.add_controller(evk_tree_view_similar_videos_finder.clone()); let evk_tree_view_same_music_finder: EventControllerKey = EventControllerKey::new(); tree_view_same_music_finder.add_controller(evk_tree_view_same_music_finder.clone()); let evk_tree_view_invalid_symlinks: EventControllerKey = EventControllerKey::new(); tree_view_invalid_symlinks.add_controller(evk_tree_view_invalid_symlinks.clone()); let evk_tree_view_broken_files: EventControllerKey = EventControllerKey::new(); tree_view_broken_files.add_controller(evk_tree_view_broken_files.clone()); let evk_tree_view_bad_extensions: EventControllerKey = EventControllerKey::new(); tree_view_bad_extensions.add_controller(evk_tree_view_bad_extensions.clone()); let gc_tree_view_duplicate_finder: GestureClick = GestureClick::new(); tree_view_duplicate_finder.add_controller(gc_tree_view_duplicate_finder.clone()); let gc_tree_view_empty_folder_finder: GestureClick = GestureClick::new(); tree_view_empty_folder_finder.add_controller(gc_tree_view_empty_folder_finder.clone()); let gc_tree_view_empty_files_finder: GestureClick = GestureClick::new(); tree_view_empty_files_finder.add_controller(gc_tree_view_empty_files_finder.clone()); let gc_tree_view_temporary_files_finder: GestureClick = GestureClick::new(); tree_view_temporary_files_finder.add_controller(gc_tree_view_temporary_files_finder.clone()); let gc_tree_view_big_files_finder: GestureClick = GestureClick::new(); tree_view_big_files_finder.add_controller(gc_tree_view_big_files_finder.clone()); let gc_tree_view_similar_images_finder: GestureClick = GestureClick::new(); tree_view_similar_images_finder.add_controller(gc_tree_view_similar_images_finder.clone()); let gc_tree_view_similar_videos_finder: GestureClick = GestureClick::new(); tree_view_similar_videos_finder.add_controller(gc_tree_view_similar_videos_finder.clone()); let gc_tree_view_same_music_finder: GestureClick = GestureClick::new(); tree_view_same_music_finder.add_controller(gc_tree_view_same_music_finder.clone()); let gc_tree_view_invalid_symlinks: GestureClick = GestureClick::new(); tree_view_invalid_symlinks.add_controller(gc_tree_view_invalid_symlinks.clone()); let gc_tree_view_broken_files: GestureClick = GestureClick::new(); tree_view_broken_files.add_controller(gc_tree_view_broken_files.clone()); let gc_tree_view_bad_extensions: GestureClick = GestureClick::new(); tree_view_bad_extensions.add_controller(gc_tree_view_bad_extensions.clone()); let combo_box_duplicate_check_method: ComboBoxText = builder.object("combo_box_duplicate_check_method").expect("Cambalache"); let combo_box_duplicate_hash_type: ComboBoxText = builder.object("combo_box_duplicate_hash_type").expect("Cambalache"); let entry_big_files_number: Entry = builder.object("entry_big_files_number").expect("Cambalache"); //// Check Buttons let check_button_duplicate_case_sensitive_name: CheckButton = builder.object("check_button_duplicate_case_sensitive_name").expect("Cambalache"); let check_button_music_title: CheckButton = builder.object("check_button_music_title").expect("Cambalache"); let check_button_music_artist: CheckButton = builder.object("check_button_music_artist").expect("Cambalache"); let check_button_music_year: CheckButton = builder.object("check_button_music_year").expect("Cambalache"); let check_button_music_bitrate: CheckButton = builder.object("check_button_music_bitrate").expect("Cambalache"); let check_button_music_genre: CheckButton = builder.object("check_button_music_genre").expect("Cambalache"); let check_button_music_length: CheckButton = builder.object("check_button_music_length").expect("Cambalache"); let check_button_music_approximate_comparison: CheckButton = builder.object("check_button_music_approximate_comparison").expect("Cambalache"); let check_button_music_compare_only_in_title_group: CheckButton = builder.object("check_button_music_compare_only_in_title_group").expect("Cambalache"); let check_button_broken_files_audio: CheckButton = builder.object("check_button_broken_files_audio").expect("Cambalache"); let check_button_broken_files_pdf: CheckButton = builder.object("check_button_broken_files_pdf").expect("Cambalache"); let check_button_broken_files_archive: CheckButton = builder.object("check_button_broken_files_archive").expect("Cambalache"); let check_button_broken_files_image: CheckButton = builder.object("check_button_broken_files_image").expect("Cambalache"); let scale_similarity_similar_images: Scale = builder.object("scale_similarity_similar_images").expect("Cambalache"); let scale_similarity_similar_videos: Scale = builder.object("scale_similarity_similar_videos").expect("Cambalache"); let combo_box_image_resize_algorithm: ComboBoxText = builder.object("combo_box_image_resize_algorithm").expect("Cambalache"); let combo_box_image_hash_algorithm: ComboBoxText = builder.object("combo_box_image_hash_algorithm").expect("Cambalache"); let combo_box_image_hash_size: ComboBoxText = builder.object("combo_box_image_hash_size").expect("Cambalache"); let combo_box_big_files_mode: ComboBoxText = builder.object("combo_box_big_files_mode").expect("Cambalache"); let check_button_image_ignore_same_size: CheckButton = builder.object("check_button_image_ignore_same_size").expect("Cambalache"); let check_button_video_ignore_same_size: CheckButton = builder.object("check_button_video_ignore_same_size").expect("Cambalache"); let label_similar_images_minimal_similarity: Label = builder.object("label_similar_images_minimal_similarity").expect("Cambalache"); let label_duplicate_check_method: Label = builder.object("label_duplicate_check_method").expect("Cambalache"); let label_duplicate_hash_type: Label = builder.object("label_duplicate_hash_type").expect("Cambalache"); let label_big_shown_files: Label = builder.object("label_big_shown_files").expect("Cambalache"); let label_image_resize_algorithm: Label = builder.object("label_image_resize_algorithm").expect("Cambalache"); let label_image_hash_type: Label = builder.object("label_image_hash_type").expect("Cambalache"); let label_image_hash_size: Label = builder.object("label_image_hash_size").expect("Cambalache"); let label_image_similarity: Label = builder.object("label_image_similarity").expect("Cambalache"); let label_image_similarity_max: Label = builder.object("label_image_similarity_max").expect("Cambalache"); let label_video_similarity: Label = builder.object("label_video_similarity").expect("Cambalache"); let label_video_similarity_min: Label = builder.object("label_video_similarity_min").expect("Cambalache"); let label_video_similarity_max: Label = builder.object("label_video_similarity_max").expect("Cambalache"); let label_big_files_mode: Label = builder.object("label_big_files_mode").expect("Cambalache"); let image_preview_similar_images: Image = builder.object("image_preview_similar_images").expect("Cambalache"); let image_preview_duplicates: Image = builder.object("image_preview_duplicates").expect("Cambalache"); let label_audio_check_type: Label = builder.object("label_audio_check_type").expect("Cambalache"); let combo_box_audio_check_type: ComboBoxText = builder.object("combo_box_audio_check_type").expect("Cambalache"); let label_same_music_seconds: Label = builder.object("label_same_music_seconds").expect("Cambalache"); let label_same_music_similarity: Label = builder.object("label_same_music_similarity").expect("Cambalache"); let scale_seconds_same_music: Scale = builder.object("scale_seconds_same_music").expect("Cambalache"); let scale_similarity_same_music: Scale = builder.object("scale_similarity_same_music").expect("Cambalache"); Self { notebook_main, scrolled_window_duplicate_finder, scrolled_window_empty_folder_finder, scrolled_window_empty_files_finder, scrolled_window_temporary_files_finder, scrolled_window_big_files_finder, scrolled_window_similar_images_finder, scrolled_window_similar_videos_finder, scrolled_window_same_music_finder, scrolled_window_invalid_symlinks, scrolled_window_broken_files, scrolled_window_bad_extensions, tree_view_duplicate_finder, tree_view_empty_folder_finder, tree_view_empty_files_finder, tree_view_temporary_files_finder, tree_view_big_files_finder, tree_view_similar_images_finder, tree_view_similar_videos_finder, tree_view_same_music_finder, tree_view_invalid_symlinks, tree_view_broken_files, tree_view_bad_extensions, evk_tree_view_duplicate_finder, evk_tree_view_empty_folder_finder, evk_tree_view_empty_files_finder, evk_tree_view_temporary_files_finder, evk_tree_view_big_files_finder, evk_tree_view_similar_images_finder, evk_tree_view_similar_videos_finder, evk_tree_view_same_music_finder, evk_tree_view_invalid_symlinks, evk_tree_view_broken_files, evk_tree_view_bad_extensions, gc_tree_view_duplicate_finder, gc_tree_view_empty_folder_finder, gc_tree_view_empty_files_finder, gc_tree_view_temporary_files_finder, gc_tree_view_big_files_finder, gc_tree_view_similar_images_finder, gc_tree_view_similar_videos_finder, gc_tree_view_same_music_finder, gc_tree_view_invalid_symlinks, gc_tree_view_broken_files, gc_tree_view_bad_extensions, combo_box_duplicate_check_method, combo_box_duplicate_hash_type, label_duplicate_check_method, label_duplicate_hash_type, check_button_duplicate_case_sensitive_name, image_preview_duplicates, label_big_shown_files, entry_big_files_number, label_big_files_mode, combo_box_big_files_mode, scale_similarity_similar_images, label_image_resize_algorithm, label_image_hash_type, label_image_hash_size, combo_box_image_resize_algorithm, combo_box_image_hash_algorithm, combo_box_image_hash_size, check_button_image_ignore_same_size, check_button_video_ignore_same_size, label_image_similarity, label_image_similarity_max, image_preview_similar_images, label_similar_images_minimal_similarity, label_video_similarity, label_video_similarity_min, label_video_similarity_max, scale_similarity_similar_videos, check_button_broken_files_audio, check_button_broken_files_pdf, check_button_broken_files_archive, check_button_broken_files_image, check_button_music_title, check_button_music_artist, check_button_music_year, check_button_music_bitrate, check_button_music_genre, check_button_music_length, check_button_music_approximate_comparison, check_button_music_compare_only_in_title_group, label_audio_check_type, combo_box_audio_check_type, label_same_music_seconds, label_same_music_similarity, scale_seconds_same_music, scale_similarity_same_music, } } pub fn get_main_tree_views(&self) -> [TreeView; NUMBER_OF_NOTEBOOK_MAIN_TABS] { [ self.tree_view_duplicate_finder.clone(), self.tree_view_empty_folder_finder.clone(), self.tree_view_big_files_finder.clone(), self.tree_view_empty_files_finder.clone(), self.tree_view_temporary_files_finder.clone(), self.tree_view_similar_images_finder.clone(), self.tree_view_similar_videos_finder.clone(), self.tree_view_same_music_finder.clone(), self.tree_view_invalid_symlinks.clone(), self.tree_view_broken_files.clone(), self.tree_view_bad_extensions.clone(), ] } pub fn update_language(&self) { self.check_button_duplicate_case_sensitive_name.set_label(Some(&flg!("duplicate_case_sensitive_name"))); self.check_button_music_title.set_label(Some(&flg!("music_title_checkbox"))); self.check_button_music_artist.set_label(Some(&flg!("music_artist_checkbox"))); self.check_button_music_year.set_label(Some(&flg!("music_year_checkbox"))); self.check_button_music_bitrate.set_label(Some(&flg!("music_bitrate_checkbox"))); self.check_button_music_genre.set_label(Some(&flg!("music_genre_checkbox"))); self.check_button_music_length.set_label(Some(&flg!("music_length_checkbox"))); self.check_button_music_approximate_comparison.set_label(Some(&flg!("music_comparison_checkbox"))); self.check_button_music_compare_only_in_title_group .set_label(Some(&flg!("music_compare_only_in_title_group"))); self.check_button_music_approximate_comparison .set_tooltip_text(Some(&flg!("music_comparison_checkbox_tooltip"))); self.label_duplicate_check_method.set_label(&flg!("main_label_check_method")); self.label_duplicate_hash_type.set_label(&flg!("main_label_hash_type")); self.label_big_shown_files.set_label(&flg!("main_label_shown_files")); self.label_image_resize_algorithm.set_label(&flg!("main_label_resize_algorithm")); self.label_image_hash_type.set_label(&flg!("main_label_hash_type")); self.label_image_hash_size.set_label(&flg!("main_label_hash_size")); self.label_image_similarity.set_label(&flg!("main_label_similarity")); self.label_image_similarity_max.set_label(&fnc_get_similarity_very_high()); self.label_video_similarity.set_label(&flg!("main_label_similarity")); self.label_video_similarity_min.set_label(&fnc_get_similarity_minimal()); self.label_video_similarity_max.set_label(&fnc_get_similarity_very_high()); self.label_duplicate_check_method.set_tooltip_text(Some(&flg!("duplicate_check_method_tooltip"))); self.combo_box_duplicate_check_method.set_tooltip_text(Some(&flg!("duplicate_check_method_tooltip"))); self.label_duplicate_hash_type.set_tooltip_text(Some(&flg!("duplicate_hash_type_tooltip"))); self.combo_box_duplicate_hash_type.set_tooltip_text(Some(&flg!("duplicate_hash_type_tooltip"))); self.check_button_duplicate_case_sensitive_name .set_tooltip_text(Some(&flg!("duplicate_case_sensitive_name_tooltip"))); self.check_button_music_compare_only_in_title_group .set_tooltip_text(Some(&flg!("music_compare_only_in_title_group_tooltip"))); self.combo_box_image_hash_size.set_tooltip_text(Some(&flg!("image_hash_size_tooltip"))); self.label_image_hash_size.set_tooltip_text(Some(&flg!("image_hash_size_tooltip"))); self.combo_box_image_resize_algorithm.set_tooltip_text(Some(&flg!("image_resize_filter_tooltip"))); self.label_image_resize_algorithm.set_tooltip_text(Some(&flg!("image_resize_filter_tooltip"))); self.combo_box_image_hash_algorithm.set_tooltip_text(Some(&flg!("image_hash_alg_tooltip"))); self.label_image_hash_type.set_tooltip_text(Some(&flg!("image_hash_alg_tooltip"))); self.combo_box_big_files_mode.set_tooltip_text(Some(&flg!("big_files_mode_combobox_tooltip"))); self.label_big_files_mode.set_tooltip_text(Some(&flg!("big_files_mode_combobox_tooltip"))); self.label_big_files_mode.set_label(&flg!("big_files_mode_label")); self.check_button_image_ignore_same_size .set_tooltip_text(Some(&flg!("check_button_general_same_size_tooltip"))); self.check_button_video_ignore_same_size .set_tooltip_text(Some(&flg!("check_button_general_same_size_tooltip"))); self.check_button_image_ignore_same_size.set_label(Some(&flg!("check_button_general_same_size"))); self.check_button_video_ignore_same_size.set_label(Some(&flg!("check_button_general_same_size"))); self.check_button_broken_files_audio.set_label(Some(&flg!("main_check_box_broken_files_audio"))); self.check_button_broken_files_archive.set_label(Some(&flg!("main_check_box_broken_files_archive"))); self.check_button_broken_files_image.set_label(Some(&flg!("main_check_box_broken_files_image"))); self.check_button_broken_files_pdf.set_label(Some(&flg!("main_check_box_broken_files_pdf"))); self.label_same_music_seconds.set_label(&flg!("same_music_seconds_label")); self.label_same_music_similarity.set_label(&flg!("same_music_similarity_label")); self.label_same_music_seconds.set_tooltip_text(Some(&flg!("same_music_tooltip"))); self.label_same_music_similarity.set_tooltip_text(Some(&flg!("same_music_tooltip"))); self.scale_seconds_same_music.set_tooltip_text(Some(&flg!("same_music_tooltip"))); self.scale_similarity_similar_videos.set_tooltip_text(Some(&flg!("same_music_tooltip"))); { let hash_size_index = self.combo_box_image_hash_size.active().expect("Some hash size must be active") as usize; let hash_size = IMAGES_HASH_SIZE_COMBO_BOX[hash_size_index]; match hash_size { 8 => { self.label_similar_images_minimal_similarity.set_text(&get_string_from_similarity(&SIMILAR_VALUES[0][5], 8)); } 16 => { self.label_similar_images_minimal_similarity .set_text(&get_string_from_similarity(&SIMILAR_VALUES[1][5], 16)); } 32 => { self.label_similar_images_minimal_similarity .set_text(&get_string_from_similarity(&SIMILAR_VALUES[2][5], 32)); } 64 => { self.label_similar_images_minimal_similarity .set_text(&get_string_from_similarity(&SIMILAR_VALUES[3][5], 64)); } _ => panic!(), } } let vec_children: Vec = get_all_direct_children(&self.notebook_main); let vec_children: Vec = get_all_direct_children(&vec_children[1]); // Change name of main notebook tabs for (main_enum, fl_thing) in [ (NotebookMainEnum::Duplicate as usize, flg!("main_notebook_duplicates")), (NotebookMainEnum::EmptyDirectories as usize, flg!("main_notebook_empty_directories")), (NotebookMainEnum::BigFiles as usize, flg!("main_notebook_big_files")), (NotebookMainEnum::EmptyFiles as usize, flg!("main_notebook_empty_files")), (NotebookMainEnum::Temporary as usize, flg!("main_notebook_temporary")), (NotebookMainEnum::SimilarImages as usize, flg!("main_notebook_similar_images")), (NotebookMainEnum::SimilarVideos as usize, flg!("main_notebook_similar_videos")), (NotebookMainEnum::SameMusic as usize, flg!("main_notebook_same_music")), (NotebookMainEnum::Symlinks as usize, flg!("main_notebook_symlinks")), (NotebookMainEnum::BrokenFiles as usize, flg!("main_notebook_broken_files")), (NotebookMainEnum::BadExtensions as usize, flg!("main_notebook_bad_extensions")), ] { self.notebook_main .tab_label(&vec_children[main_enum]) .expect("Tab label must be set") .downcast::