czkawka_gui-10.0.0/.cargo_vcs_info.json0000644000000001510000000000100134060ustar { "git": { "sha1": "73afe0f9bee9f5df4139476ee61faf13e869b6e3" }, "path_in_vcs": "czkawka_gui" }czkawka_gui-10.0.0/Cargo.lock0000644000004175700000000000100114020ustar # This file is automatically @generated by Cargo. # It is not intended for manual editing. version = 4 [[package]] name = "ab_glyph" version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e074464580a518d16a7126262fffaaa47af89d4099d4cb403f8ed938ba12ee7d" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", ] [[package]] name = "ab_glyph_rasterizer" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" [[package]] name = "addr2line" version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] name = "adler2" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[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.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" 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.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b" dependencies = [ "equator", ] [[package]] name = "alloc-no-stdlib" version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" [[package]] name = "alloc-stdlib" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" dependencies = [ "alloc-no-stdlib", ] [[package]] name = "allocator-api2" version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[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.99" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" [[package]] name = "approx" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" dependencies = [ "num-traits", ] [[package]] name = "arbitrary" version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" 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.106", ] [[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.89" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", ] [[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.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "av-data" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fca67ba5d317924c02180c576157afd54babe48a76ebc66ce6d34bb8ba08308e" dependencies = [ "byte-slice-cast", "bytes", "num-derive", "num-rational", "num-traits", ] [[package]] name = "av1-grain" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f3efb2ca85bc610acfa917b5aaa36f3fcbebed5b3182d7f877b02531c4b80c8" dependencies = [ "anyhow", "arrayvec", "log", "nom 7.1.3", "num-rational", "v_frame", ] [[package]] name = "avif-serialize" version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47c8fbc0f831f4519fe8b810b6a7a91410ec83031b8233f730a0480029f6a23f" dependencies = [ "arrayvec", ] [[package]] name = "backtrace" version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", "windows-targets 0.52.6", ] [[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.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a" 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.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a65b545ab31d687cff52899d4890855fec459eb6afe0da6417b8a18da87aa29" [[package]] name = "bitreader" version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "886559b1e163d56c765bc3a985febb4eee8009f625244511d8ee3c432e08c066" dependencies = [ "cfg-if", ] [[package]] name = "bitstream-io" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" [[package]] name = "bitstream-io" version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b348c85aeb6d0bb7dee47de5506b587d9c6c17856d1314eb4695ad751edc7231" dependencies = [ "core2", ] [[package]] name = "bitvec" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", "radium", "tap", "wyz", ] [[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.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" dependencies = [ "arrayref", "arrayvec", "cc", "cfg-if", "constant_time_eq", ] [[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 = "brotli-decompressor" version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", ] [[package]] name = "built" version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" [[package]] name = "bumpalo" version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "byte-slice-cast" version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" [[package]] name = "bytecount" version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" [[package]] name = "bytemuck" version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" [[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.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "bzip2" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bea8dcd42434048e4f7a304411d9273a411f647446c1234a65ce0554923f4cff" dependencies = [ "libbz2-rs-sys", ] [[package]] name = "cairo-rs" version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1158f326d7b755a9ae2b36c5b5391400e3431f3b77418cedb6d7130126628f10" dependencies = [ "bitflags 2.9.2", "cairo-sys-rs", "glib", "libc", ] [[package]] name = "cairo-sys-rs" version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b963177900ec8e783927e5ed99e16c0ec1b723f1f125dff8992db28ef35c62c3" dependencies = [ "glib-sys", "libc", "system-deps 7.0.5", ] [[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.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ee0f8803222ba5a7e2777dd72ca451868909b1ac410621b676adf07280e9b5f" 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 0.12.16", ] [[package]] name = "cfg-expr" version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8d458d63f0f0f482c8da9b7c8b76c21bd885a02056cc94c6404d861ca2b8206" dependencies = [ "smallvec", "target-lexicon 0.13.2", ] [[package]] name = "cfg-if" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" [[package]] name = "chrono" version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", "windows-link", ] [[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 = "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.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] [[package]] name = "crc32fast" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" 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.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[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 = "10.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb35da68596e7d8c64d9cb4d02d5cc6d9e05857878eba39e1628915399d621b0" dependencies = [ "anyhow", "audio_checker", "bincode", "bitflags 2.9.2", "bk-tree", "blake3", "crc32fast", "crossbeam-channel", "deunicode", "directories-next", "dunce", "fast_image_resize", "ffmpeg_cmdline_utils", "file-id", "file-rotate", "fun_time", "hamming-bitwise-fast", "handsome_logger", "humansize", "i18n-embed", "i18n-embed-fl", "image", "image_hasher", "infer", "itertools 0.14.0", "jxl-oxide", "libheif-rs", "libheif-sys", "libraw-rs", "lofty", "log", "log-panics", "lopdf", "mime_guess", "nom-exif", "once_cell", "os_info", "rawler", "rayon", "rust-embed", "rustc_version", "rusty-chromaprint", "serde", "serde_json", "state", "static_assertions", "symphonia", "tempfile", "trash", "vid_dup_finder_lib", "xxhash-rust", "zip", ] [[package]] name = "czkawka_gui" version = "10.0.0" dependencies = [ "chrono", "crossbeam-channel", "czkawka_core", "directories-next", "fs_extra", "fun_time", "gdk4", "glib", "gtk4", "humansize", "i18n-embed", "i18n-embed-fl", "image", "image_hasher", "log", "once_cell", "open", "rand 0.9.2", "rayon", "regex", "resvg", "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.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04d2cd9c18b9f454ed67da600630b021a8a80bf33f8c95896ab33aaf1c26b728" [[package]] name = "data-encoding" version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" [[package]] name = "data-url" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" [[package]] name = "dav1d" version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80c3f80814db85397819d464bb553268992c393b4b3b5554b89c1655996d5926" dependencies = [ "av-data", "bitflags 2.9.2", "dav1d-sys", "static_assertions", ] [[package]] name = "dav1d-sys" version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3c91aea6668645415331133ed6f8ddf0e7f40160cd97a12d59e68716a58704b" dependencies = [ "libc", "system-deps 7.0.5", ] [[package]] name = "deranged" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" dependencies = [ "powerfmt", ] [[package]] name = "derive_arbitrary" version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", ] [[package]] name = "deunicode" version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abd57806937c9cc163efc8ea3910e00a62e2aeb0b8119f1793a978088f8f6b04" [[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.106", ] [[package]] name = "document-features" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" dependencies = [ "litrs", ] [[package]] name = "dunce" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "ecb" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a8bfa975b1aec2145850fcaa1c6fe269a16578c44705a532ae3edc92b8881c7" dependencies = [ "cipher", ] [[package]] name = "either" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "encoding_rs" version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] [[package]] name = "enum-utils" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed327f716d0d351d86c9fd3398d20ee39ad8f681873cc081da2ca1c10fed398a" dependencies = [ "enum-utils-from-str", "failure", "proc-macro2", "quote", "serde_derive_internals", "syn 1.0.109", ] [[package]] name = "enum-utils-from-str" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49be08bad6e4ca87b2b8e74146987d4e5cb3b7512efa50ef505b51a22227ee1" dependencies = [ "proc-macro2", "quote", ] [[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.106", ] [[package]] name = "equator" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc" dependencies = [ "equator-macro", ] [[package]] name = "equator-macro" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", ] [[package]] name = "equivalent" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", "windows-sys 0.60.2", ] [[package]] name = "euclid" version = "0.22.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48" dependencies = [ "num-traits", ] [[package]] name = "exr" version = "1.73.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0" dependencies = [ "bit_field", "half", "lebe", "miniz_oxide", "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 = "failure" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" dependencies = [ "backtrace", ] [[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 = "fast_image_resize" version = "5.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d372ab3252d8f162d858d675a3d88a8c33ba24a6238837c50c8851911c7e89cd" dependencies = [ "bytemuck", "cfg-if", "document-features", "image", "num-traits", "thiserror 1.0.69", ] [[package]] name = "fastrand" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fdeflate" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" dependencies = [ "simd-adler32", ] [[package]] name = "ffmpeg_cmdline_utils" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30cbcb92e5f36bda100292a8bf8989631f3b6c4e4b71454ca803a9b837f63441" dependencies = [ "image", "serde", "serde_json", "thiserror 2.0.15", "winapi", ] [[package]] name = "ffmpeg_gst_wrapper" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc2e75be881230e5808200de02c435cfee05b5e0b978ce50cdbcf6527e8d13de" dependencies = [ "cfg-if", "ffmpeg_cmdline_utils", "image", "serde", "thiserror 2.0.15", "url", ] [[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.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1fc6a637b6dc58414714eddd9170ff187ecb0933d4c7024d1abbd23a3cc26e9" dependencies = [ "windows-sys 0.60.2", ] [[package]] name = "file-rotate" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e8e2fa049328a1f3295991407a88585805d126dfaadf74b9fe8c194c730aafc" dependencies = [ "chrono", "flate2", ] [[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.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" dependencies = [ "crc32fast", "libz-rs-sys", "miniz_oxide", ] [[package]] name = "float-cmp" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" [[package]] name = "fluent" version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8137a6d5a2c50d6b0ebfcb9aaa91a28154e0a70605f112d30cb0cd4a78670477" dependencies = [ "fluent-bundle", "unic-langid", ] [[package]] name = "fluent-bundle" version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01203cb8918f5711e73891b347816d932046f95f54207710bda99beaeb423bf4" dependencies = [ "fluent-langneg", "fluent-syntax", "intl-memoizer", "intl_pluralrules", "rustc-hash", "self_cell", "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.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54f0d287c53ffd184d04d8677f590f4ac5379785529e5e08b1c8083acdd5c198" dependencies = [ "memchr", "thiserror 2.0.15", ] [[package]] name = "fnv" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "form_urlencoded" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] [[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 = "funty" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", "futures-executor", "futures-io", "futures-sink", "futures-task", "futures-util", ] [[package]] name = "futures-channel" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", ] [[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.106", ] [[package]] name = "futures-sink" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[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-channel", "futures-core", "futures-io", "futures-macro", "futures-sink", "futures-task", "memchr", "pin-project-lite", "pin-utils", "slab", ] [[package]] name = "gdk-pixbuf" version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c7330cdbbc653df431331ae3d9d59e985a0fecaf33d74c7c1c5d13ab0245f6c" dependencies = [ "gdk-pixbuf-sys", "gio", "glib", "libc", ] [[package]] name = "gdk-pixbuf-sys" version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e25899cc931dc28cba912ebec793b730f53d2d419f90a562fcb29b53bd10aa82" dependencies = [ "gio-sys", "glib-sys", "gobject-sys", "libc", "system-deps 7.0.5", ] [[package]] name = "gdk4" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a67b064d2f35e649232455c7724f56f977555d2608c43300eabc530eaa4e359" dependencies = [ "cairo-rs", "gdk-pixbuf", "gdk4-sys", "gio", "glib", "libc", "pango", ] [[package]] name = "gdk4-sys" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2edbda0d879eb85317bdb49a3da591ed70a804a10776e358ef416be38c6db2c5" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", "gio-sys", "glib-sys", "gobject-sys", "libc", "pango-sys", "pkg-config", "system-deps 7.0.5", ] [[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 = "geo-types" version = "0.7.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75a4dcd69d35b2c87a7c83bce9af69fd65c9d68d3833a0ded568983928f3fc99" dependencies = [ "approx", "num-traits", "serde", ] [[package]] name = "getrandom" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "js-sys", "libc", "wasi 0.11.1+wasi-snapshot-preview1", "wasm-bindgen", ] [[package]] name = "getrandom" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", "libc", "r-efi", "wasi 0.14.2+wasi-0.2.4", ] [[package]] name = "gif" version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae047235e33e2829703574b54fdec96bfbad892062d97fed2f76022287de61b" dependencies = [ "color_quant", "weezl", ] [[package]] name = "gimli" version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "gio" version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52b5e3f390d01b79e30da451dd00e27cd1ac2de81658e3abf6c1fc3229b24c5f" dependencies = [ "futures-channel", "futures-core", "futures-io", "futures-util", "gio-sys", "glib", "libc", "pin-project-lite", "smallvec", ] [[package]] name = "gio-sys" version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a03f2234671e5a588cfe1f59c2b22c103f5772ea351be9cc824a9ce0d06d99fd" dependencies = [ "glib-sys", "gobject-sys", "libc", "system-deps 7.0.5", "windows-sys 0.60.2", ] [[package]] name = "glib" version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60bdc26493257b5794ba9301f7cbaf7ab0d69a570bfbefa4d7d360e781cb5205" dependencies = [ "bitflags 2.9.2", "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.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e772291ebea14c28eb11bb75741f62f4a4894f25e60ce80100797b6b010ef0f9" dependencies = [ "heck", "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.106", ] [[package]] name = "glib-sys" version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc7c43cff6a7dc43821e45ebf172399437acd6716fa2186b6852d2b397bf622d" dependencies = [ "libc", "system-deps 7.0.5", ] [[package]] name = "glob" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "gobject-sys" version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e9a190eef2bce144a6aa8434e306974c6062c398e0a33a146d60238f9062d5c" dependencies = [ "glib-sys", "libc", "system-deps 7.0.5", ] [[package]] name = "graphene-rs" version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d96914394464c04df8279c23976293afd53b2588e03c9d8d9662ef6528654a85" dependencies = [ "glib", "graphene-sys", "libc", ] [[package]] name = "graphene-sys" version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf8205bb19b7a041cf059be3c94d6b23b3f2c6c96362c44311dcf184e4a9422a" dependencies = [ "glib-sys", "libc", "pkg-config", "system-deps 7.0.5", ] [[package]] name = "gsk4" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5dbe33ceed6fc20def67c03d36e532f5a4a569ae437ae015a7146094f31e10c" dependencies = [ "cairo-rs", "gdk4", "glib", "graphene-rs", "gsk4-sys", "libc", "pango", ] [[package]] name = "gsk4-sys" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d76011d55dd19fde16ffdedee08877ae6ec942818cfa7bc08a91259bc0b9fc9" dependencies = [ "cairo-sys-rs", "gdk4-sys", "glib-sys", "gobject-sys", "graphene-sys", "libc", "pango-sys", "system-deps 7.0.5", ] [[package]] name = "gtk4" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "938d68ad43080ad5ee710c30d467c1bc022ee5947856f593855691d726305b3e" 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.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0912d2068695633002b92c5966edc108b2e4f54b58c509d1eeddd4cbceb7315c" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.106", ] [[package]] name = "gtk4-sys" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a923bdcf00e46723801162de24432cbce38a6810e0178a2d0b6dd4ecc26a1c74" 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.5", ] [[package]] name = "half" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" dependencies = [ "cfg-if", "crunchy", ] [[package]] name = "hamming-bitwise-fast" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06d16627a786f2f40f9079bd54a3c7987df493d421f2a6fecca7dc0886ebc7b9" [[package]] name = "handsome_logger" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70a23d1869ef63d7d0f1a24213014eff2cf26494d0e4976d510426d249dbbd05" dependencies = [ "log", "termcolor", "time", "tz-rs", ] [[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.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" [[package]] name = "heck" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[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.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e06b90c8a0d252e203c94344b21e35a30f3a3a85dc7db5af8f8df9f3e0c63ef" dependencies = [ "basic-toml", "log", "serde", "serde_derive", "thiserror 1.0.69", "unic-langid", ] [[package]] name = "i18n-embed" version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a217bbb075dcaefb292efa78897fc0678245ca67f265d12c351e42268fcb0305" dependencies = [ "arc-swap", "fluent", "fluent-langneg", "fluent-syntax", "i18n-embed-impl", "intl-memoizer", "log", "parking_lot", "rust-embed", "sys-locale", "thiserror 1.0.69", "unic-langid", "walkdir", ] [[package]] name = "i18n-embed-fl" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e598ed73b67db92f61e04672e599eef2991a262a40e1666735b8a86d2e7e9f30" dependencies = [ "find-crate", "fluent", "fluent-syntax", "i18n-config", "i18n-embed", "proc-macro-error2", "proc-macro2", "quote", "strsim 0.11.1", "syn 2.0.106", "unic-langid", ] [[package]] name = "i18n-embed-impl" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f2cc0e0523d1fe6fc2c6f66e5038624ea8091b3e7748b5e8e0c84b1698db6c2" dependencies = [ "find-crate", "i18n-config", "proc-macro2", "quote", "syn 2.0.106", ] [[package]] name = "iana-time-zone" version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "log", "wasm-bindgen", "windows-core 0.61.2", ] [[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 = "icu_collections" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" dependencies = [ "displaydoc", "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] name = "icu_locale_core" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" dependencies = [ "displaydoc", "litemap", "tinystr", "writeable", "zerovec", ] [[package]] name = "icu_normalizer" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" dependencies = [ "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", "icu_provider", "smallvec", "zerovec", ] [[package]] name = "icu_normalizer_data" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" dependencies = [ "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" dependencies = [ "displaydoc", "icu_locale_core", "stable_deref_trait", "tinystr", "writeable", "yoke", "zerofrom", "zerotrie", "zerovec", ] [[package]] name = "ident_case" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ "idna_adapter", "smallvec", "utf8_iter", ] [[package]] name = "idna_adapter" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", ] [[package]] name = "image" version = "0.25.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" dependencies = [ "bytemuck", "byteorder-lite", "color_quant", "dav1d", "exr", "gif", "image-webp", "mp4parse", "num-traits", "png", "qoi", "ravif", "rayon", "rgb", "tiff", "zune-core", "zune-jpeg", ] [[package]] name = "image-webp" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6970fe7a5300b4b42e62c52efa0187540a5bef546c60edaf554ef595d2e6f0b" dependencies = [ "byteorder-lite", "quick-error", ] [[package]] name = "image_hasher" version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c191dc6138f559a0177b8413eaf2a37784d8e63c697e247aa3740930f1c9364" dependencies = [ "base64", "fast_image_resize", "image", "rustdct", "serde", "transpose", ] [[package]] name = "imageproc" version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2393fb7808960751a52e8a154f67e7dd3f8a2ef9bd80d1553078a7b4e8ed3f0d" dependencies = [ "ab_glyph", "approx", "getrandom 0.2.16", "image", "itertools 0.12.1", "nalgebra", "num", "rand 0.8.5", "rand_distr", "rayon", ] [[package]] name = "imagesize" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285" [[package]] name = "imgref" version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" [[package]] name = "indexmap" version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", "hashbrown 0.15.5", ] [[package]] name = "infer" version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" dependencies = [ "cfb", ] [[package]] name = "inout" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" 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.106", ] [[package]] name = "intl-memoizer" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "310da2e345f5eb861e7a07ee182262e94975051db9e4223e909ba90f392f163f" 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 = "io-uring" version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" dependencies = [ "bitflags 2.9.2", "cfg-if", "libc", ] [[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 = "iso6709parse" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5090db9c6a716d1f4eeb729957e889e9c28156061c825cbccd44950cf0f3c66" dependencies = [ "geo-types", "nom 7.1.3", ] [[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.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" dependencies = [ "either", ] [[package]] name = "itoa" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jiff" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" dependencies = [ "jiff-static", "jiff-tzdb-platform", "log", "portable-atomic", "portable-atomic-util", "serde", "windows-sys 0.59.0", ] [[package]] name = "jiff-static" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", ] [[package]] name = "jiff-tzdb" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1283705eb0a21404d2bfd6eef2a7593d240bc42a0bdb39db0ad6fa2ec026524" [[package]] name = "jiff-tzdb-platform" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8" dependencies = [ "jiff-tzdb", ] [[package]] name = "jobserver" version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ "getrandom 0.3.3", "libc", ] [[package]] name = "jpeg-decoder" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" [[package]] name = "js-sys" version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ "once_cell", "wasm-bindgen", ] [[package]] name = "jxl-bitstream" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eda699770a7f4ea38f8eb21d91b545eb6448be28e540acc7ce84498bcead4903" dependencies = [ "tracing", ] [[package]] name = "jxl-coding" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd972bcd125e776f1eb241ac50e39f956095a1c2770c64736c968f8946bd9a3c" dependencies = [ "jxl-bitstream", "tracing", ] [[package]] name = "jxl-color" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f316b1358c1711755b3ee8e8cb5c4a1dad12e796233088a7a513440782de80b2" dependencies = [ "jxl-bitstream", "jxl-coding", "jxl-grid", "jxl-image", "jxl-oxide-common", "jxl-threadpool", "tracing", ] [[package]] name = "jxl-frame" version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d967c6fd669c7c01060b5022d8835fa82fd46b06ffc98b549f17600a097c2b3" dependencies = [ "jxl-bitstream", "jxl-coding", "jxl-grid", "jxl-image", "jxl-modular", "jxl-oxide-common", "jxl-threadpool", "jxl-vardct", "tracing", ] [[package]] name = "jxl-grid" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0e0ef92d5d60e76bf41098e57e985f523185e08fad54268da448637feca6989" dependencies = [ "tracing", ] [[package]] name = "jxl-image" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5f752d62577c702a94dbbce4045caf08cb58639e8a4d56464b40ecf33ffe565" dependencies = [ "jxl-bitstream", "jxl-grid", "jxl-oxide-common", "tracing", ] [[package]] name = "jxl-jbr" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e35d032bcec660647828527ff42c6f5776d2fd44b8357f9f6d9ac6dc07218e46" dependencies = [ "brotli-decompressor", "jxl-bitstream", "jxl-frame", "jxl-grid", "jxl-image", "jxl-modular", "jxl-oxide-common", "jxl-threadpool", "jxl-vardct", "tracing", ] [[package]] name = "jxl-modular" version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da758b2f989aafd9eeb39489fe43d7be5a3a0d2ad61cf1bad705eb6990a6053c" dependencies = [ "jxl-bitstream", "jxl-coding", "jxl-grid", "jxl-oxide-common", "jxl-threadpool", "tracing", ] [[package]] name = "jxl-oxide" version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa635162d7d53c650ae9e429a4e354ac1d63f0d3b1bdd1991b400c22cd301a6d" dependencies = [ "brotli-decompressor", "bytemuck", "image", "jxl-bitstream", "jxl-color", "jxl-frame", "jxl-grid", "jxl-image", "jxl-jbr", "jxl-oxide-common", "jxl-render", "jxl-threadpool", "tracing", ] [[package]] name = "jxl-oxide-common" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b62394c5021b3a9e7e0dbb2d639d555d019090c9946c39f6d3b09d390db4157b" dependencies = [ "jxl-bitstream", ] [[package]] name = "jxl-render" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa0c3100918bd3c41bb0f8ce1f4f1664e48f3032ff8eeab0d6a2cfc3276f462d" dependencies = [ "bytemuck", "jxl-bitstream", "jxl-coding", "jxl-color", "jxl-frame", "jxl-grid", "jxl-image", "jxl-modular", "jxl-oxide-common", "jxl-threadpool", "jxl-vardct", "tracing", ] [[package]] name = "jxl-threadpool" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25f15eb830aa77a7f21148d72e153562a26bfe570139bd4922eab1908dd499d3" dependencies = [ "rayon", "rayon-core", "tracing", ] [[package]] name = "jxl-vardct" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce72a18c6d3a47172ab6c479be2bdb56f22066b5d7092663f03b4490820b4511" dependencies = [ "jxl-bitstream", "jxl-coding", "jxl-grid", "jxl-modular", "jxl-oxide-common", "jxl-threadpool", "tracing", ] [[package]] name = "kurbo" version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c62026ae44756f8a599ba21140f350303d4f08dcdcc71b5ad9c9bb8128c13c62" dependencies = [ "arrayvec", "euclid", "smallvec", ] [[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 = "libbz2-rs-sys" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[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.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5037190e1f70cbeef565bd267599242926f724d3b8a9f510fd7e0b540cfa4404" dependencies = [ "arbitrary", "cc", ] [[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.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[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.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" dependencies = [ "bitflags 2.9.2", "libc", ] [[package]] name = "libz-rs-sys" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "172a788537a2221661b480fee8dc5f96c580eb34fa88764d3205dc356c7e4221" dependencies = [ "zlib-rs", ] [[package]] name = "linux-raw-sys" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "litemap" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "litrs" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" [[package]] name = "lock_api" version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ "autocfg", "scopeguard", ] [[package]] name = "lofty" version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca260c51a9c71f823fbfd2e6fbc8eb2ee09834b98c00763d877ca8bfa85cde3e" dependencies = [ "byteorder", "data-encoding", "flate2", "lofty_attr", "log", "ogg_pager", "paste", ] [[package]] name = "lofty_attr" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed9983e64b2358522f745c1251924e3ab7252d55637e80f6a0a3de642d6a9efc" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", ] [[package]] name = "log" version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "log-panics" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68f9dd8546191c1850ecf67d22f5ff00a935b890d0e84713159a55495cc2ac5f" dependencies = [ "backtrace", "log", ] [[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 = "lopdf" version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "674a3504c1224247e00762afb90690991b673c461f6779565e055e91926a49da" dependencies = [ "aes", "bitflags 2.9.2", "cbc", "chrono", "ecb", "encoding_rs", "flate2", "getrandom 0.3.3", "indexmap", "itoa", "jiff", "log", "md-5", "nom 8.0.0", "nom_locate", "rand 0.9.2", "rangemap", "rayon", "sha2", "stringprep", "thiserror 2.0.15", "time", "weezl", ] [[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 = "matrixmultiply" version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" dependencies = [ "autocfg", "rawpointer", ] [[package]] name = "maybe-rayon" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" dependencies = [ "cfg-if", "rayon", ] [[package]] name = "md-5" version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ "cfg-if", "digest", ] [[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.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memmap2" version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "483758ad303d734cec05e5c12b41d7e93e6a6390c5e9dae6bdeb7c1259012d28" dependencies = [ "libc", ] [[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.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", "simd-adler32", ] [[package]] name = "mio" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", "wasi 0.11.1+wasi-snapshot-preview1", "windows-sys 0.59.0", ] [[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 = "multiversion" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edb7f0ff51249dfda9ab96b5823695e15a052dc15074c9dbf3d118afaf2c201" dependencies = [ "multiversion-macros", "target-features", ] [[package]] name = "multiversion-macros" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b093064383341eb3271f42e381cb8f10a01459478446953953c75d24bd339fc0" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", "target-features", ] [[package]] name = "nalgebra" version = "0.32.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b5c17de023a86f59ed79891b2e5d5a94c705dbe904a5b5c9c952ea6221b03e4" dependencies = [ "approx", "matrixmultiply", "num-complex", "num-rational", "num-traits", "simba", "typenum", ] [[package]] name = "ndarray" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "882ed72dce9365842bf196bdeedf5055305f11fc8c03dee7bb0194a6cad34841" dependencies = [ "matrixmultiply", "num-complex", "num-integer", "num-traits", "portable-atomic", "portable-atomic-util", "rawpointer", ] [[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 = "nom" version = "8.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" dependencies = [ "memchr", ] [[package]] name = "nom-exif" version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5a6703c263bdeb67ea61c7a7605ebfd42996c49cbf8558724b88fd67804f35d" dependencies = [ "bytes", "chrono", "iso6709parse", "nom 7.1.3", "regex", "thiserror 2.0.15", "tracing", ] [[package]] name = "nom_locate" version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b577e2d69827c4740cba2b52efaad1c4cc7c73042860b199710b3575c68438d" dependencies = [ "bytecount", "memchr", "nom 8.0.0", ] [[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" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" dependencies = [ "num-bigint", "num-complex", "num-integer", "num-iter", "num-rational", "num-traits", ] [[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.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.106", ] [[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-iter" version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ "autocfg", "num-integer", "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", "libm", ] [[package]] name = "num_enum" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" dependencies = [ "num_enum_derive", "rustversion", ] [[package]] name = "num_enum_derive" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.106", ] [[package]] name = "num_threads" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" dependencies = [ "libc", ] [[package]] name = "objc2" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "561f357ba7f3a2a61563a186a163d0a3a5247e1089524a3981d49adb775078bc" dependencies = [ "objc2-encode", ] [[package]] name = "objc2-encode" version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" [[package]] name = "objc2-foundation" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" dependencies = [ "bitflags 2.9.2", "objc2", ] [[package]] name = "object" version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "ogg_pager" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e034c10fb5c1c012c1b327b85df89fb0ef98ae66ec28af30f0d1eed804a40c19" dependencies = [ "byteorder", ] [[package]] name = "once_cell" version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "open" version = "5.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2483562e62ea94312f3576a7aca397306df7990b8d89033e18766744377ef95" dependencies = [ "is-wsl", "libc", "pathdiff", ] [[package]] name = "os_info" version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0e1ac5fde8d43c34139135df8ea9ee9465394b2d8d20f032d38998f64afffc3" dependencies = [ "log", "plist", "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 = "owned_ttf_parser" version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b" dependencies = [ "ttf-parser", ] [[package]] name = "pango" version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab47feb3403aa564edaeb68620c5b9159f8814733a7dd45f0b1a27d19de362fe" dependencies = [ "gio", "glib", "libc", "pango-sys", ] [[package]] name = "pango-sys" version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f855bccb447644e149fae79086e1f81514c30fe5e9b8bd257d9d3c941116c86" dependencies = [ "glib-sys", "gobject-sys", "libc", "system-deps 7.0.5", ] [[package]] name = "parking_lot" version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", "parking_lot_core", ] [[package]] name = "parking_lot_core" version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" 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.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" [[package]] name = "pbkdf2" version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest", "hmac", ] [[package]] name = "percent-encoding" version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pico-args" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" [[package]] name = "pin-project-lite" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[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.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "plist" version = "1.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3af6b589e163c5a788fab00ce0c0366f6efbb9959c2f9874b224936af7fce7e1" dependencies = [ "base64", "indexmap", "quick-xml", "serde", "time", ] [[package]] name = "png" version = "0.17.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" dependencies = [ "bitflags 1.3.2", "crc32fast", "fdeflate", "flate2", "miniz_oxide", ] [[package]] name = "portable-atomic" version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" [[package]] name = "portable-atomic-util" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" dependencies = [ "portable-atomic", ] [[package]] name = "potential_utf" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" dependencies = [ "zerovec", ] [[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.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 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.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ "toml_edit", ] [[package]] name = "proc-macro-error-attr2" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" dependencies = [ "proc-macro2", "quote", ] [[package]] name = "proc-macro-error2" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", "syn 2.0.106", ] [[package]] name = "proc-macro2" version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] [[package]] name = "profiling" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" dependencies = [ "profiling-procmacros", ] [[package]] name = "profiling-procmacros" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" dependencies = [ "quote", "syn 2.0.106", ] [[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 = "quick-xml" version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9845d9dccf565065824e69f9f235fafba1587031eda353c1f1561cd6a6be78f4" dependencies = [ "memchr", ] [[package]] name = "quote" version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] [[package]] name = "r-efi" version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "radium" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] name = "rand" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha 0.3.1", "rand_core 0.6.4", ] [[package]] name = "rand" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", ] [[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 0.6.4", ] [[package]] name = "rand_chacha" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", "rand_core 0.9.3", ] [[package]] name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ "getrandom 0.2.16", ] [[package]] name = "rand_core" version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ "getrandom 0.3.3", ] [[package]] name = "rand_distr" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" dependencies = [ "num-traits", "rand 0.8.5", ] [[package]] name = "rangemap" version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f93e7e49bb0bf967717f7bd674458b3d6b0c5f48ec7e3038166026a69fc22223" [[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 2.6.0", "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 0.8.5", "rand_chacha 0.3.1", "simd_helpers", "system-deps 6.2.2", "thiserror 1.0.69", "v_frame", "wasm-bindgen", ] [[package]] name = "ravif" version = "0.11.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5825c26fddd16ab9f515930d49028a630efec172e903483c94796cfe31893e6b" dependencies = [ "avif-serialize", "imgref", "loop9", "quick-error", "rav1e", "rayon", "rgb", ] [[package]] name = "rawler" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ee1ec76f71a9485dd706323ec3eea78a641ce7a2497b19a196b5e31d94f8bf2" dependencies = [ "async-trait", "backtrace", "bitstream-io 4.5.0", "byteorder", "chrono", "enumn", "futures", "glob", "hex", "image", "itertools 0.14.0", "lazy_static", "libc", "libflate", "log", "md5", "memmap2", "multiversion", "num_enum", "rayon", "rustc_version", "serde", "serde_json", "thiserror 2.0.15", "tokio", "toml 0.8.23", "uuid", "weezl", ] [[package]] name = "rawpointer" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", ] [[package]] name = "rayon-core" version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", ] [[package]] name = "realfft" version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f821338fddb99d089116342c46e9f1fbf3828dba077674613e734e01d6ea8677" dependencies = [ "rustfft", ] [[package]] name = "redox_syscall" version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ "bitflags 2.9.2", ] [[package]] name = "redox_users" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom 0.2.16", "libredox", "thiserror 1.0.69", ] [[package]] name = "regex" version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", "regex-automata 0.4.9", "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.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 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 = "resvg" version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8928798c0a55e03c9ca6c4c6846f76377427d2c1e1f7e6de3c06ae57942df43" dependencies = [ "log", "pico-args", "rgb", "svgtypes", "tiny-skia", "usvg", ] [[package]] name = "rgb" version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" 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 = "roxmltree" version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" [[package]] name = "rubato" version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5258099699851cfd0082aeb645feb9c084d9a5e1f1b8d5372086b989fc5e56a1" dependencies = [ "num-complex", "num-integer", "num-traits", "realfft", ] [[package]] name = "rust-embed" version = "8.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "025908b8682a26ba8d12f6f2d66b987584a4a87bc024abc5bbc12553a8cd178a" dependencies = [ "rust-embed-impl", "rust-embed-utils", "walkdir", ] [[package]] name = "rust-embed-impl" version = "8.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6065f1a4392b71819ec1ea1df1120673418bf386f50de1d6f54204d836d4349c" dependencies = [ "proc-macro2", "quote", "rust-embed-utils", "syn 2.0.106", "walkdir", ] [[package]] name = "rust-embed-utils" version = "8.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6cc0c81648b20b70c491ff8cce00c1c3b223bb8ed2b5d41f0e54c6c4c0a3594" dependencies = [ "sha2", "walkdir", ] [[package]] name = "rustc-demangle" version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" [[package]] name = "rustc-hash" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[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.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b61555105d6a9bf98797c063c362a1d24ed8ab0431655e38f1cf51e52089551" dependencies = [ "rustfft", ] [[package]] name = "rustfft" version = "6.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6f140db74548f7c9d7cce60912c9ac414e74df5e718dc947d514b051b42f3f4" dependencies = [ "num-complex", "num-integer", "num-traits", "primal-check", "strength_reduce", "transpose", ] [[package]] name = "rustix" version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ "bitflags 2.9.2", "errno", "libc", "linux-raw-sys", "windows-sys 0.60.2", ] [[package]] name = "rustversion" version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rusty-chromaprint" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59e4234523e38d9c12201955f8216e1a60313e64c5077f4e1cf49b0db77bd7e8" dependencies = [ "rubato", "rustfft", ] [[package]] name = "ryu" version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "safe_arch" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" dependencies = [ "bytemuck", ] [[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 = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749" [[package]] name = "semver" version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" [[package]] name = "serde" version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", ] [[package]] name = "serde_derive_internals" version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dbab34ca63057a1f15280bdf3c39f2b1eb1b54c17e98360e511637aef7418c6" dependencies = [ "proc-macro2", "quote", "syn 1.0.109", ] [[package]] name = "serde_json" version = "1.0.142" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7" dependencies = [ "itoa", "memchr", "ryu", "serde", ] [[package]] name = "serde_spanned" version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" dependencies = [ "serde", ] [[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.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 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 = "signal-hook-registry" version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ "libc", ] [[package]] name = "simba" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" dependencies = [ "approx", "num-complex", "num-traits", "paste", "wide", ] [[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 = "simplecss" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a9c6883ca9c3c7c90e888de77b7a5c849c779d25d74a1269b0218b14e8b136c" dependencies = [ "log", ] [[package]] name = "siphasher" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "slab" version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "smallvec" version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" dependencies = [ "libc", "windows-sys 0.59.0", ] [[package]] name = "stable_deref_trait" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[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 = "strict-num" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" dependencies = [ "float-cmp", ] [[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 = "svgtypes" version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68c7541fff44b35860c1a7a47a7cadf3e4a304c457b58f9870d9706ece028afc" dependencies = [ "kurbo", "siphasher", ] [[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.106" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] [[package]] name = "synstructure" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", ] [[package]] name = "sys-locale" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" dependencies = [ "libc", ] [[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", "pkg-config", "toml 0.8.23", "version-compare", ] [[package]] name = "system-deps" version = "7.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4be53aa0cba896d2dc615bd42bbc130acdcffa239e0a2d965ea5b3b2a86ffdb" dependencies = [ "cfg-expr 0.20.2", "heck", "pkg-config", "toml 0.8.23", "version-compare", ] [[package]] name = "tap" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-features" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1bbb9f3c5c463a01705937a24fdabc5047929ac764b2d5b9cf681c1f5041ed5" [[package]] name = "target-lexicon" version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "target-lexicon" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e502f78cdbb8ba4718f566c418c52bc729126ffd16baee5baa718cf25dd5a69a" [[package]] name = "tempfile" version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" dependencies = [ "fastrand", "getrandom 0.3.3", "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.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl 1.0.69", ] [[package]] name = "thiserror" version = "2.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80d76d3f064b981389ecb4b6b7f45a0bf9fdac1d5b9204c7bd6714fecc302850" dependencies = [ "thiserror-impl 2.0.15", ] [[package]] name = "thiserror-impl" version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", ] [[package]] name = "thiserror-impl" version = "2.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d29feb33e986b6ea906bd9c3559a856983f92371b3eaa5e83782a351623de0" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", ] [[package]] name = "thread_local" version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ "cfg-if", ] [[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.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" dependencies = [ "deranged", "itoa", "libc", "num-conv", "num_threads", "powerfmt", "serde", "time-core", "time-macros", ] [[package]] name = "time-core" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" [[package]] name = "time-macros" version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" dependencies = [ "num-conv", "time-core", ] [[package]] name = "tiny-skia" version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" dependencies = [ "arrayref", "arrayvec", "bytemuck", "cfg-if", "log", "png", "tiny-skia-path", ] [[package]] name = "tiny-skia-path" version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" dependencies = [ "arrayref", "bytemuck", "strict-num", ] [[package]] name = "tinystr" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" dependencies = [ "displaydoc", "zerovec", ] [[package]] name = "tinyvec" version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" 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 = "tokio" version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ "backtrace", "bytes", "io-uring", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", "slab", "socket2", "tokio-macros", "windows-sys 0.59.0", ] [[package]] name = "tokio-macros" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", ] [[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.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", "toml_datetime", "toml_edit", ] [[package]] name = "toml_datetime" version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" dependencies = [ "serde", ] [[package]] name = "toml_edit" version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ "indexmap", "serde", "serde_spanned", "toml_datetime", "toml_write", "winnow", ] [[package]] name = "toml_write" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "tracing" version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-attributes", "tracing-core", ] [[package]] name = "tracing-attributes" version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", ] [[package]] name = "tracing-core" version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" 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.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" 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.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65a334451012017a39758aa85a30827c13ac684245bf6b08249483c063f64ff3" dependencies = [ "chrono", "libc", "log", "objc2", "objc2-foundation", "once_cell", "percent-encoding", "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 = "ttf-parser" version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" [[package]] name = "type-map" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" dependencies = [ "rustc-hash", ] [[package]] name = "typenum" version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "tz-rs" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1450bf2b99397e72070e7935c89facaa80092ac812502200375f1f7d33c71a1" [[package]] name = "unic-langid" version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05" dependencies = [ "unic-langid-impl", ] [[package]] name = "unic-langid-impl" version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658" dependencies = [ "serde", "tinystr", ] [[package]] name = "unicase" version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicode-bidi" version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[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 = "url" version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", "percent-encoding", ] [[package]] name = "urlencoding" version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" [[package]] name = "usvg" version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80be9b06fbae3b8b303400ab20778c80bbaf338f563afe567cf3c9eea17b47ef" dependencies = [ "base64", "data-url", "flate2", "imagesize", "kurbo", "log", "pico-args", "roxmltree", "simplecss", "siphasher", "strict-num", "svgtypes", "tiny-skia-path", "xmlwriter", ] [[package]] name = "utf8_iter" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f33196643e165781c20a5ead5582283a7dacbb87855d867fbc2df3f81eddc1be" dependencies = [ "getrandom 0.3.3", "js-sys", "serde", "wasm-bindgen", ] [[package]] name = "v_frame" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "666b7727c8875d6ab5db9533418d7c764233ac9c0cff1d469aec8fa127597be2" dependencies = [ "aligned-vec", "num-traits", "wasm-bindgen", ] [[package]] name = "valuable" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[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_common" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b601345173cab95df37a54b3351a77f85a9d11429487310b6a2e49ac37bc1942" dependencies = [ "fast_image_resize", "image", "imageproc", "itertools 0.14.0", "rand 0.9.2", "winapi", ] [[package]] name = "vid_dup_finder_lib" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2bcf6135b99bca822ea095fc485066bf8c0f8788f575d6808a12619ba721b38" dependencies = [ "bitvec", "cfg-if", "enum-utils", "ffmpeg_gst_wrapper", "image", "itertools 0.14.0", "ndarray", "rand 0.9.2", "rustdct", "serde", "thiserror 2.0.15", "vid_dup_finder_common", ] [[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.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" version = "0.14.2+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" dependencies = [ "wit-bindgen-rt", ] [[package]] name = "wasm-bindgen" version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", "syn 2.0.106", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" dependencies = [ "unicode-ident", ] [[package]] name = "weezl" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" [[package]] name = "wide" version = "0.7.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" dependencies = [ "bytemuck", "safe_arch", ] [[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.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4698e52ed2d08f8658ab0c39512a7c00ee5fe2688c65f8c0a4f06750d729f2a6" dependencies = [ "windows-implement 0.56.0", "windows-interface 0.56.0", "windows-result 0.1.2", "windows-targets 0.52.6", ] [[package]] name = "windows-core" version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ "windows-implement 0.60.0", "windows-interface 0.59.1", "windows-link", "windows-result 0.3.4", "windows-strings", ] [[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.106", ] [[package]] name = "windows-implement" version = "0.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", ] [[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.106", ] [[package]] name = "windows-interface" version = "0.59.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", ] [[package]] name = "windows-link" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[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-result" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ "windows-link", ] [[package]] name = "windows-strings" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ "windows-link", ] [[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-sys" version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ "windows-targets 0.53.3", ] [[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 0.52.6", "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-targets" version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" dependencies = [ "windows-link", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", "windows_i686_gnullvm 0.53.0", "windows_i686_msvc 0.53.0", "windows_x86_64_gnu 0.53.0", "windows_x86_64_gnullvm 0.53.0", "windows_x86_64_msvc 0.53.0", ] [[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_gnullvm" version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" [[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_aarch64_msvc" version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" [[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_gnu" version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" [[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_gnullvm" version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" [[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_i686_msvc" version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" [[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_gnu" version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" [[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_gnullvm" version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" [[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 = "windows_x86_64_msvc" version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winnow" version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" dependencies = [ "memchr", ] [[package]] name = "wit-bindgen-rt" version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ "bitflags 2.9.2", ] [[package]] name = "writeable" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "wyz" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" dependencies = [ "tap", ] [[package]] name = "xmlwriter" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" [[package]] name = "xxhash-rust" version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" [[package]] name = "yoke" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" dependencies = [ "serde", "stable_deref_trait", "yoke-derive", "zerofrom", ] [[package]] name = "yoke-derive" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", "synstructure", ] [[package]] name = "zerocopy" version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", ] [[package]] name = "zerofrom" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", "synstructure", ] [[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.106", ] [[package]] name = "zerotrie" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" dependencies = [ "displaydoc", "yoke", "zerofrom", ] [[package]] name = "zerovec" version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke", "zerofrom", "zerovec-derive", ] [[package]] name = "zerovec-derive" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", ] [[package]] name = "zip" version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aed4ac33e8eb078c89e6cbb1d5c4c7703ec6d299fc3e7c3695af8f8b423468b" dependencies = [ "aes", "arbitrary", "bzip2", "constant_time_eq", "crc32fast", "flate2", "getrandom 0.3.3", "hmac", "indexmap", "memchr", "pbkdf2", "sha1", "time", "zeroize", "zopfli", ] [[package]] name = "zlib-rs" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "626bd9fa9734751fc50d6060752170984d7053f5a39061f524cda68023d4db8a" [[package]] name = "zopfli" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edfc5ee405f504cd4984ecc6f14d02d55cfda60fa4b689434ef4102aae150cd7" dependencies = [ "bumpalo", "crc32fast", "log", "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.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc1f7e205ce79eb2da3cd71c5f55f3589785cb7c79f6a03d1c8d1491bda5d089" dependencies = [ "zune-core", ] czkawka_gui-10.0.0/Cargo.toml0000644000000046370000000000100114210ustar # 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 = "2024" rust-version = "1.85.0" name = "czkawka_gui" version = "10.0.0" authors = ["Rafał Mikrut "] build = false autolib = 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" [features] default = [] heif = ["czkawka_core/heif"] libavif = ["czkawka_core/libavif"] libraw = ["czkawka_core/libraw"] [[bin]] name = "czkawka_gui" path = "src/main.rs" [dependencies.chrono] version = "0.4.38" [dependencies.crossbeam-channel] version = "0.5" [dependencies.czkawka_core] version = "10.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.10" features = ["v4_6"] default-features = false [dependencies.glib] version = "=0.21" [dependencies.gtk4] version = "0.10" features = ["v4_6"] default-features = false [dependencies.humansize] version = "2.1" [dependencies.i18n-embed] version = "0.16" features = [ "fluent-system", "desktop-requester", ] [dependencies.i18n-embed-fl] version = "0.10" [dependencies.image] version = "0.25" [dependencies.image_hasher] version = "3.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.resvg] version = "0.45.1" default-features = false [dependencies.rust-embed] version = "8.5" features = ["debug-embed"] [dependencies.trash] version = "5.1" [dev-dependencies.rand] version = "0.9.0" [target."cfg(windows)".dependencies.winapi] version = "0.3.9" features = [ "combaseapi", "objbase", "shobjidl_core", "windef", "winerror", "wtypesbase", "winuser", ] czkawka_gui-10.0.0/Cargo.toml.orig000064400000000000000000000025721046102023000150760ustar 00000000000000[package] name = "czkawka_gui" version = "10.0.0" authors = ["Rafał Mikrut "] edition = "2024" rust-version = "1.85.0" description = "GTK frontend of Czkawka" license = "MIT" homepage = "https://github.com/qarmin/czkawka" repository = "https://github.com/qarmin/czkawka" [dependencies] gdk4 = { version = "0.10", default-features = false, features = ["v4_6"] } glib = "=0.21" gtk4 = { version = "0.10", default-features = false, features = ["v4_6"] } humansize = "2.1" chrono = "0.4.38" crossbeam-channel = "0.5" directories-next = "2.0" open = "5.3" image = "0.25" regex = "1.11" image_hasher = "3.0" trash = "5.1" fs_extra = "1.3" i18n-embed = { version = "0.16", features = ["fluent-system", "desktop-requester"] } i18n-embed-fl = "0.10" rust-embed = { version = "8.5", features = ["debug-embed"] } once_cell = "1.20" log = "0.4.22" fun_time = { version = "0.3", features = ["log"] } rayon = "1.10" czkawka_core = { path = "../czkawka_core", version = "10.0.0", features = [] } resvg = { version = "0.45.1", default-features = false } [dev-dependencies] rand = "0.9.0" [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-10.0.0/LICENSE_CC_BY_4_ICONS000064400000000000000000000322701046102023000153270ustar 00000000000000icons/*.svg CC BY 4.0 License Copyright (c) 2020 [jannuary](https://github.com/jannuary) and icons/icon_about.png Copyright (c) 2020-2025 Rafał Mikrut 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. czkawka_gui-10.0.0/LICENSE_MIT_APP_CODE000064400000000000000000000020621046102023000152110ustar 00000000000000MIT License Copyright (c) 2020-2025 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.czkawka_gui-10.0.0/LICENSE_MIT_WINDOWS_THEME000064400000000000000000000020621046102023000160530ustar 00000000000000MIT 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. czkawka_gui-10.0.0/README.md000064400000000000000000000130411046102023000134570ustar 00000000000000# Czkawka GUI Czkawka GUI is a graphical user interface for Czkawka Core, built with GTK 4. ![Screenshot from 2023-11-26 12-43-32](https://github.com/qarmin/czkawka/assets/41945903/722ed490-0be1-4dac-bcfc-182a4d0787dc) ## Maintenance Mode Czkawka GTK is currently in maintenance mode. No new features will be added (at least by me), but bug fixes and compatibility updates with the Czkawka core package will continue. Active development is now focused on the Krokiet GUI. ## Requirements Requirements depend on your platform. Prebuilt binaries are available here: https://github.com/qarmin/czkawka/releases/ Additional features such as HEIF, libraw, and libavif require extra libraries to be installed, which may increase the number of dependencies. ### Linux #### Prebuilt binaries / Self-compiled Ubuntu: `sudo apt install libgtk-4-bin libheif1 libraw-bin ffmpeg -y` ### Mac ``` /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew install gtk4 ffmpeg librsvg libheif libraw dav1d ``` ### Windows #### Prebuilt binaries All required libraries are bundled in the zip (except ffmpeg, which you can install manually and place `ffmpeg.exe` in a directory included in your system PATH). ## Installation ### Prebuilt binaries (All OS) After installing the required dependencies, download the prebuilt binaries for your platform from the [releases page](https://github.com/qarmin/czkawka/releases). ### Linux #### Flatpak ``` flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo flatpak install flathub com.github.qarmin.czkawka ``` #### Debian package (Unofficial) Requires Debian 13 (or derivatives) or later. ``` sudo apt install czkawka_gui ``` #### PPA (Unofficial) - Debian-based distributions (Ubuntu, Linux Mint, etc.) ``` sudo add-apt-repository ppa:xtradeb/apps sudo apt update sudo apt install czkawka ``` [PPA page](https://launchpad.net/~xtradeb/+archive/ubuntu/apps) ### Mac #### Homebrew (Unofficial) ``` brew install czkawka ``` [Formula page](https://formulae.brew.sh/formula/czkawka) ### Windows #### MSYS2 (Unofficial) ``` pacman -S mingw-w64-x86_64-czkawka-gui ``` [Package link](https://packages.msys2.org/base/mingw-w64-czkawka) The file should be installed to `C:\msys64\mingw64\bin\czkawka_gui.exe` and can be run from there. This version is likely the most feature-complete on Windows, as it is compiled with optional features enabled. ## Compilation Compiling the GUI is more complex than compiling the CLI, core, or Krokiet, because it uses GTK4 (written in C) and requires many build and runtime dependencies. ### Requirements | Program | Minimal version | |:-------:|:---------------:| | Rust | 1.85.0 | | GTK | 4.6 | The Rust version corresponds to the latest rustc available in Debian Sid: https://packages.debian.org/sid/rustc ### Linux (Ubuntu; similar steps apply to other distributions) ```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 dav1d 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 are no instructions for compiling the app natively on Windows.
You can check the CI for instructions on how to cross-compile the app from Linux to Windows (using a prebuilt Docker image): [CI Instructions](../.github/workflows/windows.yml)
There is also a mingw recipe you can try to adapt for your needs: https://github.com/msys2/MINGW-packages/blob/master/mingw-w64-czkawka/PKGBUILD ## Limitations Not all features and components are implemented here. The main limitations are: - The Windows version does not support HEIF and WebP files with prebuilt binaries (the MSYS2 version supports them). - On Windows, text may appear very small on high-resolution displays. You can manually change DPI scaling for this app: - [Recommended fix](https://github.com/qarmin/czkawka/issues/787#issuecomment-1292253437) (modify gtk.css) - [Alternative workaround](https://github.com/qarmin/czkawka/issues/863#issuecomment-1416761308) (modify Windows DPI settings for this app; this works too, but the text may be a bit blurry). ## License The code is distributed under the MIT license. The icon was created by [jannuary](https://github.com/jannuary) and is licensed under CC-BY-4.0. The Windows dark theme is from the [WhiteSur](https://github.com/slypy/whitesur-gtk4-theme) project, licensed under MIT. The program is completely free to use. "Gratis to uczciwa cena" - "Free is a fair price" ## Name Czkawka is a Polish word meaning _hiccup_. I chose this name because I wanted to hear people speaking other languages pronounce it, so feel free to say it however you like. This name is not as difficult as it seems; I also considered words like _żółć_, _gżegżółka_, or _żołądź_, but decided against them because they contain Polish characters, which would make searching for the project harder. At the beginning of the project, if the response to the name was unanimously negative, I was prepared to change it, but the opinions were extremely mixed. czkawka_gui-10.0.0/data/com.github.qarmin.czkawka.desktop000064400000000000000000000013141046102023000214630ustar 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;copy;copies;compare;files; StartupWMClass=czkawka_gui TryExec=czkawka_gui czkawka_gui-10.0.0/data/com.github.qarmin.czkawka.metainfo.xml000064400000000000000000000031151046102023000224140ustar 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-10.0.0/data/icons/com.github.qarmin.czkawka-symbolic.svg000064400000000000000000000120161046102023000235440ustar 00000000000000 czkawka_gui-10.0.0/data/icons/com.github.qarmin.czkawka.Devel.svg000064400000000000000000000421761046102023000227750ustar 00000000000000 czkawka_gui-10.0.0/data/icons/com.github.qarmin.czkawka.svg000064400000000000000000000240101046102023000217220ustar 00000000000000 czkawka_gui-10.0.0/i18n/ar/czkawka_gui.ftl000064400000000000000000001127361046102023000164020ustar 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_compare_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_compare_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 -> [one] تم ÙØ­Øµ مل٠{ $file_number } *[other] تم ÙØ­Øµ { $file_number } ملÙًا } progress_scanning_extension_of_files = تم التحقق من ملحق من مل٠{ $file_checked }/{ $all_files } progress_scanning_broken_files = تم التحقق من المل٠{ $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) progress_scanning_video = تم تجزئة Ùيديو { $file_checked }/{ $all_files } progress_scanning_image = تجزئة من { $file_checked }/{ $all_files } صورة ({ $data_checked }/{ $all_data }) 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 } مل٠موسيقي ({ $data_checked }/{ $all_data }) progress_scanning_empty_folders = { $folder_number -> [one] تم ÙØ­Øµ مجلد { $folder_number } *[other] تم ÙØ­Øµ { $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 } Ù…Ù„ÙØ§Øª ({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = تم تحليل التجزئة الكاملة من Ù…Ù„ÙØ§Øª { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) 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_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 }" غير موجود ÙÙŠ الإصدار الحالي للتطبيق. # 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-10.0.0/i18n/bg/czkawka_gui.ftl000064400000000000000000001301031046102023000163540ustar 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 within groups of similar titles 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_compare_button = Compare 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_compare_button_tooltip = Compare images in the group. 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 -> [one] Scanned { $file_number } file *[other] Scanned { $file_number } files } progress_scanning_extension_of_files = Checked extension of { $file_checked }/{ $all_files } file progress_scanning_broken_files = Checked { $file_checked }/{ $all_files } file ({ $data_checked }/{ $all_data }) progress_scanning_video = Hashed of { $file_checked }/{ $all_files } video progress_scanning_image = Hashed of { $file_checked }/{ $all_files } image ({ $data_checked }/{ $all_data }) progress_comparing_image_hashes = Compared { $file_checked }/{ $all_files } image hash progress_scanning_music_tags_end = Compared tags of { $file_checked }/{ $all_files } music file progress_scanning_music_tags = Read tags of { $file_checked }/{ $all_files } music file progress_scanning_music_content_end = Compared fingerprint of { $file_checked }/{ $all_files } music file progress_scanning_music_content = Calculated fingerprint of { $file_checked }/{ $all_files } music file ({ $data_checked }/{ $all_data }) progress_scanning_empty_folders = { $folder_number -> [one] Scanned { $folder_number } folder *[other] Scanned { $folder_number } folders } progress_scanning_size = Scanned size of { $file_number } file progress_scanning_size_name = Scanned name and size of { $file_number } file progress_scanning_name = Scanned name of { $file_number } file progress_analyzed_partial_hash = Analyzed partial hash of { $file_checked }/{ $all_files } files ({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = Analyzed full hash of { $file_checked }/{ $all_files } files ({ $data_checked }/{ $all_data }) progress_prehash_cache_loading = Зареждане на prehash кеш progress_prehash_cache_saving = Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° prehash кеш progress_hash_cache_loading = Зареждане на hash кеш progress_hash_cache_saving = Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° hash кеш 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_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 }" не ÑъщеÑтвува в текущата верÑÐ¸Ñ Ð½Ð° приложението. # 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-10.0.0/i18n/cs/czkawka_gui.ftl000064400000000000000000000776731046102023000164170ustar 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 v rámci skupin podobných názvů 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_compare_button = Porovnat 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_compare_button_tooltip = Porovnat obrázky ve skupinÄ›. 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 = { $file_number -> [one] Naskenovaný { $file_number } soubor *[other] Skenované { $file_number } soubory } progress_scanning_extension_of_files = Kontrola přípony { $file_checked }/{ $all_files } souboru progress_scanning_broken_files = Kontrola { $file_checked }/{ $all_files } soubor ({ $data_checked }/{ $all_data }) progress_scanning_video = Hashováno { $file_checked }/{ $all_files } videa progress_scanning_image = Hashed of { $file_checked }/{ $all_files } image ({ $data_checked }/{ $all_data }) progress_comparing_image_hashes = Porovnáno { $file_checked }/{ $all_files } hash obrázků progress_scanning_music_tags_end = Porovnávané Å¡títky hudebního souboru { $file_checked }/{ $all_files } progress_scanning_music_tags = Číst tagy { $file_checked }/{ $all_files } hudebního souboru progress_scanning_music_content_end = Porovnávaný otisk hudby { $file_checked }/{ $all_files } progress_scanning_music_content = VypoÄítaný otisk hudby { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) progress_scanning_empty_folders = { $folder_number -> [one] Naskenovaná složka { $folder_number } *[other] Naskenovaná { $folder_number } složky } progress_scanning_size = Naskenovaná velikost souboru { $file_number } progress_scanning_size_name = Naskenovaný název a velikost { $file_number } souboru progress_scanning_name = Naskenované jméno { $file_number } souboru progress_analyzed_partial_hash = Analyzováno ÄásteÄné hash souborů { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = Analyzováno plné hash souborů { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) 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_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. # 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 složky txt i json 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-10.0.0/i18n/de/czkawka_gui.ftl000064400000000000000000001012121046102023000163530ustar 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 = Vergleiche innerhalb von Gruppen ähnlicher Titel 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_compare_button = Vergleichen 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_compare_button_tooltip = Vergleiche Bilder in der Gruppe. 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 = { $file_number -> [one] gescannt { $file_number } Datei *[other] gescannte { $file_number } Dateien } progress_scanning_extension_of_files = Überprüfte Erweiterung von { $file_checked }/{ $all_files } Datei progress_scanning_broken_files = Überprüft { $file_checked }/{ $all_files } Datei ({ $data_checked }/{ $all_data }) progress_scanning_video = Hashed von { $file_checked }/{ $all_files } Video progress_scanning_image = Hashed von { $file_checked }/{ $all_files } Bild ({ $data_checked }/{ $all_data }) progress_comparing_image_hashes = Verglichen mit { $file_checked }/{ $all_files } Bild-Hash progress_scanning_music_tags_end = Vergleiche Tags von { $file_checked }/{ $all_files } Musikdatei progress_scanning_music_tags = Tags von { $file_checked }/{ $all_files } Musikdatei lesen progress_scanning_music_content_end = Verglichen Fingerabdruck von { $file_checked }/{ $all_files } Musikdatei progress_scanning_music_content = Berechneter Fingerabdruck von { $file_checked }/{ $all_files } Musikdatei ({ $data_checked }/{ $all_data }) progress_scanning_empty_folders = { $folder_number -> [one] gescannt { $folder_number } Ordner *[other] Gescannte { $folder_number } Ordner } progress_scanning_size = Scanne Größe der { $file_number } Datei progress_scanning_size_name = Gescannter Name und Größe der { $file_number } Datei progress_scanning_name = Gescannter Name der { $file_number } Datei progress_analyzed_partial_hash = Analysierter Teilhash von { $file_checked }/{ $all_files } Dateien ({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = Analysiert voller Hash der { $file_checked }/{ $all_files } Dateien ({ $data_checked }/{ $all_data }) 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_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. # 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-10.0.0/i18n/el/czkawka_gui.ftl000064400000000000000000001346541046102023000164030ustar 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_compare_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_compare_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 -> [one] ΣαÏώθηκε { $file_number } αÏχείο *[other] ΣαÏώθηκαν { $file_number } αÏχεία } progress_scanning_extension_of_files = Επιλεγμένη επέκταση του αÏχείου { $file_checked }/{ $all_files } progress_scanning_broken_files = Επιλεγμένο αÏχείο { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) progress_scanning_video = ΚατακεÏματισμένο από { $file_checked }/{ $all_files } βίντεο progress_scanning_image = Hashed of { $file_checked }/{ $all_files } image ({ $data_checked }/{ $all_data }) progress_comparing_image_hashes = Compared { $file_checked }/{ $all_files } image hash 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 } ({ $data_checked }/{ $all_data }) progress_scanning_empty_folders = { $folder_number -> [one] ΣαÏώθηκε { $folder_number } φάκελος *[other] ΣαÏώθηκαν { $folder_number } φάκελοι } progress_scanning_size = ΣαÏωμένο μέγεθος αÏχείου { $file_number } progress_scanning_size_name = ΣαÏωμένο όνομα και μέγεθος αÏχείου { $file_number } progress_scanning_name = ΣαÏωμένο όνομα αÏχείου { $file_number } progress_analyzed_partial_hash = Αναλυμένο μεÏικό hash του { $file_checked }/{ $all_files } αÏχεία ({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = Ανάλυση πλήÏους hash του { $file_checked }/{ $all_files } αÏχεία ({ $data_checked }/{ $all_data }) 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_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 }" δεν υπάÏχει στην Ï„Ïέχουσα έκδοση εφαÏμογών. # 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-10.0.0/i18n/en/czkawka_gui.ftl000064400000000000000000000721611046102023000163770ustar 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 within groups of similar titles 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 = {$file_number -> [one] Scanned {$file_number} file *[other] Scanned {$file_number} files } progress_scanning_extension_of_files = Checked extension of {$file_checked}/{$all_files} file progress_scanning_broken_files = Checked {$file_checked}/{$all_files} file ({$data_checked}/{$all_data}) progress_scanning_video = Hashed of {$file_checked}/{$all_files} video progress_scanning_image = Hashed of {$file_checked}/{$all_files} image ({$data_checked}/{$all_data}) progress_comparing_image_hashes = Compared {$file_checked}/{$all_files} image hash progress_scanning_music_tags_end = Compared tags of {$file_checked}/{$all_files} music file progress_scanning_music_tags = Read tags of {$file_checked}/{$all_files} music file progress_scanning_music_content_end = Compared fingerprint of {$file_checked}/{$all_files} music file progress_scanning_music_content = Calculated fingerprint of {$file_checked}/{$all_files} music file ({$data_checked}/{$all_data}) progress_scanning_empty_folders = {$folder_number -> [one] Scanned {$folder_number} folder *[other] Scanned {$folder_number} folders } progress_scanning_size = Scanned size of {$file_number} file progress_scanning_size_name = Scanned name and size of {$file_number} file progress_scanning_name = Scanned name of {$file_number} file progress_analyzed_partial_hash = Analyzed partial hash of {$file_checked}/{$all_files} files ({$data_checked}/{$all_data}) progress_analyzed_full_hash = Analyzed full hash of {$file_checked}/{$all_files} files ({$data_checked}/{$all_data}) 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_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. # 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-10.0.0/i18n/es-ES/czkawka_gui.ftl000064400000000000000000001010261046102023000167020ustar 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 dentro de grupos de títulos similares music_compare_only_in_title_group_tooltip = Cuando está activado, los archivos son agrupados por títulos, y luego comparados con otros. Con 10000 archivos, al menos tendríamos unas 100 millones de comparaciones, cuando usualmente serían unas 20000 comparaciones. same_music_tooltip = La búsqueda de archivos de música, por su contenido, puede especificarse mediante los siguientes parámetros: - 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 5s y la diferencia máxima a 1,0, buscará fragmentos casi idénticos en los archivos. - Un tiempo de 20s 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 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 predeterminado porque es muy rápido. CRC32 - función hash simple. Debería ser más rápido que Blake3, pero probablemente tenga algunas colisiones muy raras. XXH3 - muy similar en caso de rendimiento y calidad con Blake3 (pero no criptográfico). Por este motivo, tales modos pueden ser fácilmente usados. duplicate_check_method_tooltip = Por el momento, Czkawka ofrece tres tipos de métodos para encontrar duplicados: 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 selecciona el archivo y luego compara este hash para encontrar duplicados. 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. El 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 redimensionarla. Dependiendo del algoritmo que elijamos, la imagen resultante usada para calcular el hash puede ser apenas diferente. El algoritmo más rápido, pero que da los peores resultados, es Nearest. Está habilitado de forma predeterminada, ya que usa un tamaño de hash de 16x16, haciendo que calidades más bajas no sean visibles. Con el tamaño hash de 8x8 se recomienda usar un algoritmo diferente al tipo Nearest, para obtener mejores grupos de imágenes. image_hash_alg_tooltip = Los usuarios pueden elegir uno de los muchos algoritmos de cálculo. Cada uno tiene puntos fuertes y débiles y a veces dará mejores y a veces peores resultados para diferentes imágenes. Por lo tanto, para determinar cuál es la mejor para usted, se requiere la 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 dañados 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 "Enlace simbólico" 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 = Incluir de forma manual 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 a excluir 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_compare_button = Comparar 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_compare_button_tooltip = Comparar imágenes en el grupo. 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 = { $file_number -> [one] Escaneado archivo { $file_number } *[other] Escaneados archivos { $file_number } } progress_scanning_extension_of_files = Extensión comprobada de archivo { $file_checked }/{ $all_files } progress_scanning_broken_files = Verificado archivo { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) progress_scanning_video = Hash de vídeo { $file_checked }/{ $all_files } progress_scanning_image = Hash de { $file_checked }/{ $all_files } imagen ({ $data_checked }/{ $all_data }) progress_comparing_image_hashes = Hash de imagen { $file_checked }/{ $all_files } comparado progress_scanning_music_tags_end = Etiquetas comparadas de archivo de música { $file_checked }/{ $all_files } progress_scanning_music_tags = Leer etiquetas del archivo de música { $file_checked }/{ $all_files } progress_scanning_music_content_end = Se ha comparado la huella digital de archivo de música { $file_checked }/{ $all_files } progress_scanning_music_content = Huella digital calculada de { $file_checked }/{ $all_files } archivo de música ({ $data_checked }/{ $all_data }) progress_scanning_empty_folders = { $folder_number -> [one] Escaneó la carpeta { $folder_number } *[other] Escaneó las carpetas { $folder_number } } progress_scanning_size = Tamaño escaneado del archivo { $file_number } progress_scanning_size_name = Nombre y tamaño escaneado del archivo { $file_number } progress_scanning_name = Nombre escaneado del archivo { $file_number } progress_analyzed_partial_hash = Se ha analizado el hash parcial de archivos { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = Se ha analizado el hash completo de archivos { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) 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_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. # 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-10.0.0/i18n/fr/czkawka_gui.ftl000064400000000000000000001046361046102023000164070ustar 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 au sein des groupes de titres similaires music_compare_only_in_title_group_tooltip = Lorsque cette option est activée, les fichiers sont regroupés par titre, puis comparés l'un à l'autre. Pour 10000 fichiers, au lieu de près de 100 millions de comparaisons en général, il y aura environ 20000 comparaisons. 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_compare_button = Comparer 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_compare_button_tooltip = Comparer les images dans le groupe. 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 = L'utilisation des prévisualisations gtk sera parfois plus rapide et gèrera plus de formats, mais cela pourrait aussi être l'inverse. Si vous avez des problèmes de chargement des prévisualisations, vous pouvez essayer de modifier ce paramètre. Pour les systèmes non-Linux, il est recommandé d'utiliser cette option, car gtk-pixbuf n'y est pas toujours disponible, aussi la désactivation de cette option ne chargera pas les prévisualisations pour certaines 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 = { $file_number -> [one] Fichier { $file_number } *[other] Fichiers { $file_number } } Scannés progress_scanning_extension_of_files = Extension du fichier { $file_checked }/{ $all_files } vérifiée progress_scanning_broken_files = Fichier { $file_checked }/{ $all_files } vérifié ({ $data_checked }/{ $all_data }) progress_scanning_video = Haché de la vidéo { $file_checked }/{ $all_files } progress_scanning_image = Haché de l'image { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) progress_comparing_image_hashes = Hachage d'image { $file_checked }/{ $all_files } comparé progress_scanning_music_tags_end = Tags comparés au fichier de musique { $file_checked }/{ $all_files } progress_scanning_music_tags = Lire les tags du fichier de musique { $file_checked }/{ $all_files } progress_scanning_music_content_end = Empreinte par rapport au fichier de musique { $file_checked }/{ $all_files } progress_scanning_music_content = Empreinte calculée du fichier de musique { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) progress_scanning_empty_folders = { $folder_number -> [one] Répertoire { $folder_number } *[other] Dossiers { $folder_number } } numérisés progress_scanning_size = Taille numérisée du fichier { $file_number } progress_scanning_size_name = Nom numérisé et taille du fichier { $file_number } progress_scanning_name = Nom numérisé du fichier { $file_number } progress_analyzed_partial_hash = Hash partiel analysé des fichiers { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = Hash complet analysé des fichiers { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) 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_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. # 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-10.0.0/i18n/it/czkawka_gui.ftl000064400000000000000000000776461046102023000164260ustar 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 all'interno di gruppi di titoli simili 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_compare_button = Confronta 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_compare_button_tooltip = Confronta le immagini nel gruppo. 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 = { $file_number -> [one] Scanned { $file_number } file *[other] Scanned { $file_number } files } progress_scanning_extension_of_files = Estensione controllata del file { $file_checked }/{ $all_files } progress_scanning_broken_files = Checked { $file_checked }/{ $all_files } file ({ $data_checked }/{ $all_data }) progress_scanning_video = Hashed of { $file_checked }/{ $all_files } video progress_scanning_image = Hashed of { $file_checked }/{ $all_files } image ({ $data_checked }/{ $all_data }) progress_comparing_image_hashes = Confrontato { $file_checked }/{ $all_files } immagine hash progress_scanning_music_tags_end = Etichette confrontate di { $file_checked }/{ $all_files } file musicale progress_scanning_music_tags = Leggi i tag di { $file_checked }/{ $all_files } file musicale progress_scanning_music_content_end = Impronta digitale comparata di { $file_checked }/{ $all_files } file musicale progress_scanning_music_content = Impronta digitale calcolata di { $file_checked }/{ $all_files } file musicale ({ $data_checked }/{ $all_data }) progress_scanning_empty_folders = { $folder_number -> [one] Scanned { $folder_number } folder *[other] Scanned { $folder_number } folders } progress_scanning_size = Dimensione scansionata del file { $file_number } progress_scanning_size_name = Nome e dimensione del file { $file_number } scansionato progress_scanning_name = Nome scansionato del file { $file_number } progress_analyzed_partial_hash = Hash parziale analizzato di { $file_checked }/{ $all_files } file ({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = Hash completo analizzato di { $file_checked }/{ $all_files } file ({ $data_checked }/{ $all_data }) 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_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. # 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-10.0.0/i18n/ja/czkawka_gui.ftl000064400000000000000000001127251046102023000163700ustar 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 = ãƒã‚§ãƒƒã‚¯ã—ãŸç”»åƒã¯ãれãžã‚Œç‰¹åˆ¥ãªãƒãƒƒã‚·ãƒ¥ã‚’生æˆã—ã€ãã®ãƒãƒƒã‚·ãƒ¥ã‚’比較ã—ãŸã¨ãã«å·®ãŒå°ã•ã„ã»ã©ã€ã“ã®ç”»åƒã¯é¡žä¼¼ã—ã¦ã„ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ 8ã®ãƒãƒƒã‚·ãƒ¥ã‚µã‚¤ã‚ºã¯ã€ã‚ªãƒªã‚¸ãƒŠãƒ«ã«å°‘ã—ã—ã‹ä¼¼ã¦ã„ãªã„ç”»åƒã‚’見ã¤ã‘ã‚‹ã®ã«ã‹ãªã‚Šé©ã—ã¦ã„ã¾ã™ã€‚ã—ã‹ã—ã€1000æžšã‚’è¶…ãˆã‚‹ã‚ˆã†ãªå¤§ããªç”»åƒã§ã¯ã€èª¤æ¤œå‡ºãŒå¤šããªã‚‹ãŸã‚ã€ã‚ˆã‚Šå¤§ããªãƒãƒƒã‚·ãƒ¥ã‚µã‚¤ã‚ºã‚’使用ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚ 16ã¯ãƒ‡ãƒ•ォルトã®ãƒãƒƒã‚·ãƒ¥ã‚µã‚¤ã‚ºã§ã‚りã€å°‘ã—ã§ã‚‚類似ã—ãŸç”»åƒã‚’見ã¤ã‘ã‚‹ã“ã¨ã¨ãƒãƒƒã‚·ãƒ¥ã®è¡çªã‚’å°‘ãªãã™ã‚‹ã“ã¨ã®é–“ã§ã‹ãªã‚Šè‰¯ã„妥å”点ã§ã™ã€‚ 32ã¨64ã®ãƒãƒƒã‚·ãƒ¥ã¯éžå¸¸ã«é¡žä¼¼ã—ãŸç”»åƒã—ã‹è¦‹ã¤ã‘られã¾ã›ã‚“ãŒã€èª¤æ¤œå‡ºã¯ã»ã¨ã‚“ã©ã‚りã¾ã›ã‚“(アルファãƒãƒ£ãƒ³ãƒãƒ«ã®ã‚る一部ã®ç”»åƒã‚’除ã„ã¦ï¼‰ã€‚ image_resize_filter_tooltip = ç”»åƒã®ãƒãƒƒã‚·ãƒ¥ã‚’計算ã™ã‚‹ãŸã‚ã«ã€ãƒ©ã‚¤ãƒ–ラリã¯ã¾ãšç”»åƒã®ã‚µã‚¤ã‚ºã‚’å¿…ãšå¤‰æ›´ã—ã¾ã™ã€‚ ã©ã®ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã‚’é¸æŠžã—ãŸã‹ã«ã‚ˆã£ã¦ã€ãƒãƒƒã‚·ãƒ¥ã‚’計算ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れる画åƒã¯å°‘ã—é•ã£ã¦è¦‹ãˆã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。 最も高速ãªã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã¯ Nearest ã§ã™ãŒã€æœ€ã‚‚悪ã„çµæžœã‚’出ã™ã®ã‚‚ Nearest ã§ã™ã€‚16x16ã®ãƒãƒƒã‚·ãƒ¥ã‚µã‚¤ã‚ºã§ä½Žå“質ã®å ´åˆã€ãã‚ŒãŒæ˜Žã‚‰ã‹ã«ãªã‚‹ã“ã¨ã¯ãªã„ã®ã§ã€ãƒ‡ãƒ•ォルト㯠Nearest ã§ã™ã€‚ 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 = 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_compare_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_compare_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 = 検索ã•れãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã¨åŒã˜ãƒ•ァイルシステムã«ãªã„ファイルを無視ã—ã¾ã™ã€‚ 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 -> [one] スキャン済㿠{ $file_number } ファイル *[other] スキャン済㿠{ $file_number } ファイル } progress_scanning_extension_of_files = { $file_checked }/{ $all_files } ãƒ•ã‚¡ã‚¤ãƒ«ã®æ‹¡å¼µå­ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¾ã—㟠progress_scanning_broken_files = { $file_checked }/{ $all_files } ファイル ({ $data_checked }/{ $all_data } ) ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¾ã—ãŸã€‚ progress_scanning_video = { $file_checked }/{ $all_files } ビデオã®ãƒãƒƒã‚·ãƒ¥åŒ– progress_scanning_image = { $file_checked }/{ $all_files } イメージ ({ $data_checked }/{ $all_data } ) ã®ãƒãƒƒã‚·ãƒ¥åŒ– 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 } 音楽ファイルã®è¨ˆç®—フィンガープリント ({ $data_checked }/{ $all_data }) progress_scanning_empty_folders = { $folder_number -> [one] Scanned { $folder_number } folder *[other] Scanned { $folder_number } folders } progress_scanning_size = { $file_number } ファイルã®ã‚¹ã‚­ãƒ£ãƒ³ã•れãŸã‚µã‚¤ã‚º progress_scanning_size_name = スキャンã•れãŸåå‰ã¨ { $file_number } ファイルã®ã‚µã‚¤ã‚º progress_scanning_name = スキャンã•れ㟠{ $file_number } ファイルã®åå‰ progress_analyzed_partial_hash = { $file_checked }/{ $all_files } 個ã®ãƒ•ァイルã®éƒ¨åˆ†ãƒãƒƒã‚·ãƒ¥ã‚’分æžã—ã¾ã—㟠({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = { $file_checked }/{ $all_files } 個ã®ãƒ•ァイルã®å®Œå…¨ãƒãƒƒã‚·ãƒ¥ã‚’分æžã—ã¾ã—㟠({ $data_checked }/{ $all_data }) 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_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 }" ã¯ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚¢ãƒ—リã«ã¯å­˜åœ¨ã—ã¾ã›ã‚“。 # 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-10.0.0/i18n/ko/czkawka_gui.ftl000064400000000000000000001030141046102023000163760ustar 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 = 태그 기준 검사 music_checking_by_content = ë‚´ìš© 기준 검사 same_music_seconds_label = 최소 ì¡°ê° ìž¬ìƒ ì‹œê°„ same_music_similarity_label = 최대 허용 ì°¨ì´ music_compare_only_in_title_group = Compare within groups of similar titles music_compare_only_in_title_group_tooltip = 활성화 시, 파ì¼ì´ 제목별로 ê·¸ë£¹í™”ëœ í›„ì—ë§Œ 서로 비êµë©ë‹ˆë‹¤. 예: 10000ê°œì˜ íŒŒì¼ì´ ìžˆì„ ê²½ìš°, ê±°ì˜ 1ì–µ ë²ˆì˜ ë¹„êµ ëŒ€ì‹  보통 약 20000ë²ˆì˜ ë¹„êµë¡œ 줄어듭니다. same_music_tooltip = ìŒì•… íŒŒì¼ ìœ ì‚¬ë„ ê²€ìƒ‰ì€ ì•„ëž˜ 설정으로 ì¡°ì •í•  수 있습니다: - 유사ë„로 ì‹ë³„ 가능한 최소 ì¡°ê° ì‹œê°„ - 비êµí•  ì¡°ê°ê°„ 허용 가능한 최대 ì°¨ì´ ìˆ˜ì¹˜ ì¢‹ì€ ê²°ê³¼ë¥¼ 얻기 위해서는 ì´ ë‘ ê°’ì„ ìƒí™©ì— 맞게 ì ì ˆížˆ 조합하는 ê²ƒì´ ì¤‘ìš”í•©ë‹ˆë‹¤. 최소 시간 5ì´ˆ + 최대 ì°¨ì´ 1.0 설정 시 -> ê±°ì˜ ë™ì¼í•œ ì¡°ê°ì„ 찾습니다. 최소 시간 20ì´ˆ + 최대 ì°¨ì´ 6.0 설정 시 -> 리믹스/ë¼ì´ë¸Œ 버전 등 유사한 ê²½ìš°ì— íš¨ê³¼ì ìž…니다. 기본ì ìœ¼ë¡œ 모든 ìŒì•… 파ì¼ë¼ë¦¬ 비êµí•˜ê²Œ ë˜ë¯€ë¡œ, ë§Žì€ íŒŒì¼ì„ 비êµí•  때 ì‹œê°„ì´ ì˜¤ëž˜ 걸릴 수 있습니다. ë”°ë¼ì„œ ì¼ë°˜ì ìœ¼ë¡œ **참조 í´ë”(reference folders)** ì˜µì…˜ì„ ì‚¬ìš©í•˜ê³  비êµí•  파ì¼ì„ 지정하면, 지문(fingerprint) 비êµëŠ” 참조 ì—†ì´ ë¹„êµí•˜ëŠ” 것보다 **최소 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 - Black3와 해시 품질 ë° ì„±ëŠ¥ ë©´ì—서 매우 유사하지만, ì•”í˜¸í™”ì— ì“°ì´ì§€ëŠ” 않습니다. ë•Œë¬¸ì— Black3와 실질ì ìœ¼ë¡œ 같습니다. duplicate_check_method_tooltip = 현재 Czkawka는 중복 파ì¼ì„ ì°¾ëŠ”ë° 3가지 ë°©ë²•ì„ ì§€ì›í•©ë‹ˆë‹¤. 파ì¼ëª… - ê°™ì€ ì´ë¦„ì„ ê°€ì§„ 파ì¼ë“¤ì„ 찾습니다. íŒŒì¼ í¬ê¸° - ê°™ì€ í¬ê¸°ë¥¼ 가진 파ì¼ë“¤ì„ 찾습니다. 해시 - ê°™ì€ ë‚´ìš©ì„ ê°€ì§„ 파ì¼ë“¤ì„ 찾습니다. ì´ ëª¨ë“œì—서는 먼저 파ì¼ì„ 해시한 다ìŒ, ê° í•´ì‹œê°’ë“¤ì„ ë¹„êµí•˜ì—¬ 중복 파ì¼ì¸ì§€ ì‹ë³„합니다. ë•Œë¬¸ì— ì¤‘ë³µ 파ì¼ì„ 찾는 ë° ìžˆì–´ 가장 확실한 방법입니다. Czkawka는 ìºì‹œì— 매우 ì˜ì¡´í•˜ë¯€ë¡œ, ê°™ì€ ë°ì´í„°ë¥¼ ë‘ ë²ˆì§¸ ì´í›„로 스캔하는 경우 첫 번째 스캔보다 ë”ìš± 빠르게 ìŠ¤ìº”ì´ ì´ë£¨ì–´ì§‘니다. image_hash_size_tooltip = ê° í™•ì¸ëœ ì´ë¯¸ì§€ì— 특별한 해시가 ìƒì„±ë˜ì–´ 서로 비êµë  수 있으며, ìž‘ì€ í•´ì‹œ ì°¨ì´ëŠ” ì´ë¯¸ì§€ê°€ ìœ ì‚¬í•¨ì„ ì˜ë¯¸í•©ë‹ˆë‹¤. 해시 í¬ê¸° 8ì€ ì›ë³¸ê³¼ 약간 유사한 ì´ë¯¸ì§€ë¥¼ ì°¾ê¸°ì— ì ì ˆí•©ë‹ˆë‹¤. 다만 ì´ë¯¸ì§€ 수가 ë§Žì„ ê²½ìš°(예: 1000ê°œ ì´ìƒ), ê±°ì§“ 양성(false positives)ì´ ë§Žì´ ë°œìƒí•  수 있어 ì´ ê²½ìš° ë” í° í•´ì‹œ í¬ê¸° ì‚¬ìš©ì„ ê¶Œìž¥í•©ë‹ˆë‹¤. 기본 해시 í¬ê¸° 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 = 심볼릭 ë§í¬ í´ë” 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/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 = 비활성 확장ìž: # 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_compare_button = Compare 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_compare_button_tooltip = Compare images in the group. 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 = 검색할 디렉터리와 파ì¼ì‹œìŠ¤í…œì´ ë‹¤ë¥¸ 디렉터리를 무시합니다. 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 = ìºì‹œì—서 ì˜¤ëž˜ëœ ê²°ê³¼ 제거 ## 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 -> [one] { $file_number }ê°œ íŒŒì¼ ìŠ¤ìº” 완료 *[other] { $file_number }ê°œ íŒŒì¼ ìŠ¤ìº” 완료 } progress_scanning_extension_of_files = { $file_checked }/{ $all_files }ê°œì˜ íŒŒì¼ í™•ìž¥ìž í™•ì¸ progress_scanning_broken_files = { $file_checked }/{ $all_files }ê°œ íŒŒì¼ í™•ì¸ (ë°ì´í„°: { $data_checked } / { $all_data }) progress_scanning_video = { $file_checked }/{ $all_files }ê°œì˜ ë¹„ë””ì˜¤ 해시 ìƒì„± progress_scanning_image = { $file_checked }/{ $all_files }ê°œì˜ ì´ë¯¸ì§€ 해시 ìƒì„± (ë°ì´í„°: { $data_checked } / { $all_data }) 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 }ê°œì˜ ìŒì•… íŒŒì¼ ì§€ë¬¸ 계산 중 (ë°ì´í„°: { $data_checked } / { $all_data }) progress_scanning_empty_folders = { $folder_number -> [one] { $folder_number }ê°œ í´ë” 스캔 완료 *[other] { $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 }ê°œ íŒŒì¼ ë¶€ë¶„ 해시 ë¶„ì„ ì™„ë£Œ (ë°ì´í„°: { $data_checked } / { $all_data }) progress_analyzed_full_hash = { $file_checked }/{ $all_files }ê°œ íŒŒì¼ ì „ì²´ 해시 ë¶„ì„ ì™„ë£Œ (ë°ì´í„°: { $data_checked } / { $all_data }) 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 }"는 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_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 }"ì€ í˜„ìž¬ 프로그램 ë²„ì „ì— ì¡´ìž¬í•˜ì§€ 않습니다. # 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-10.0.0/i18n/nl/czkawka_gui.ftl000064400000000000000000000776101046102023000164120ustar 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 binnen groepen van vergelijkbare titels 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_compare_button = Vergelijk 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_compare_button_tooltip = Afbeeldingen in de groep vergelijken. 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 = { $file_number -> [one] Gescande { $file_number } bestand *[other] Gescande { $file_number } bestanden } progress_scanning_extension_of_files = Gecontroleerde extensie van { $file_checked }/{ $all_files } bestand progress_scanning_broken_files = Gecontroleerd { $file_checked }/{ $all_files } bestand ({ $data_checked }/{ $all_data }) progress_scanning_video = Onderbroken van { $file_checked }/{ $all_files } video progress_scanning_image = Bevroren van { $file_checked }/{ $all_files } afbeelding ({ $data_checked }/{ $all_data }) progress_comparing_image_hashes = Vergeleken { $file_checked }/{ $all_files } afbeelding hash progress_scanning_music_tags_end = Vergeleken tags van { $file_checked }/{ $all_files } muziekbestand progress_scanning_music_tags = Lees tags van { $file_checked }/{ $all_files } muziekbestand progress_scanning_music_content_end = Vergeleken vingerafdruk van { $file_checked }/{ $all_files } muziekbestand progress_scanning_music_content = Berekende vingerafdruk van { $file_checked }/{ $all_files } muziekbestand ({ $data_checked }/{ $all_data }) progress_scanning_empty_folders = { $folder_number -> [one] Gescande { $folder_number } map *[other] Gescande { $folder_number } mappen } progress_scanning_size = Gescande grootte van { $file_number } bestand progress_scanning_size_name = Gescande naam en grootte van { $file_number } bestand progress_scanning_name = Gescande naam van { $file_number } bestand progress_analyzed_partial_hash = Geanalyseerde gedeeltelijke hash van { $file_checked }/{ $all_files } bestanden ({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = Volledige hash van { $file_checked }/{ $all_files } bestanden ({ $data_checked }/{ $all_data } ) 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_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. # 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 json bestanden in de "{ $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-10.0.0/i18n/no/czkawka_gui.ftl000064400000000000000000000732721046102023000164150ustar 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 innenfor grupper av lignende titler 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_compare_button = Sammenlign 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_compare_button_tooltip = Sammenlign bilder i gruppen. 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 = { $file_number -> [one] Skannet { $file_number } fil *[other] Skannet { $file_number } filer } progress_scanning_extension_of_files = Merket utvidelse av { $file_checked }/{ $all_files } -filen progress_scanning_broken_files = Merket { $file_checked }/{ $all_files } fil ({ $data_checked }/{ $all_data }) progress_scanning_video = Kastet av { $file_checked }/{ $all_files } video progress_scanning_image = Kastet av { $file_checked }/{ $all_files } bilde ({ $data_checked }/{ $all_data }) progress_comparing_image_hashes = Sammenlignet { $file_checked }/{ $all_files } bilde-hash progress_scanning_music_tags_end = Sammenligne tagger med { $file_checked }/{ $all_files } musikkfil progress_scanning_music_tags = Les tagger for { $file_checked }/{ $all_files } musikkfil progress_scanning_music_content_end = Sammenlignet fingeravtrykk av { $file_checked }/{ $all_files } musikkfil progress_scanning_music_content = Beregnet fingeravtrykk pÃ¥ { $file_checked }/{ $all_files } musikkfil ({ $data_checked }/{ $all_data }) progress_scanning_empty_folders = { $folder_number -> [one] Skannet { $folder_number } mappe *[other] Skannet { $folder_number } mapper } progress_scanning_size = Skannet størrelse pÃ¥ { $file_number } fil progress_scanning_size_name = { $file_number } fil skannet navn og størrelse progress_scanning_name = { $file_number } fil skannet navn progress_analyzed_partial_hash = Analyserte delvis hash av { $file_checked }/{ $all_files } filer ({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = Analysert full hash av { $file_checked }/{ $all_files } filer ({ $data_checked }/{ $all_data }) 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_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. # 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 inn i "{ $name }"-mappen. 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-10.0.0/i18n/pl/czkawka_gui.ftl000064400000000000000000001020231046102023000163770ustar 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 w grupach o podobnych tytuÅ‚ach 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_move_button = PrzenieÅ› bottom_sort_button = Sortuj bottom_compare_button = Porównaj 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_sort_button_tooltip = Sortuje pliki/foldery zgodnie z wybranÄ… metodÄ…. bottom_compare_button_tooltip = Porównaj obrazy w grupie. 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 = { $file_number -> [one] Przeskanowano { $file_number } plik *[other] Przeskanowano { $file_number } plików } progress_scanning_extension_of_files = Sprawdzono rozszerzenie { $file_checked }/{ $all_files } plików progress_scanning_broken_files = Sprawdzono plik { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) progress_scanning_video = Obliczono hashe dla { $file_checked }/{ $all_files } plików video progress_scanning_image = Obliczono hashe dla { $file_checked }/{ $all_files } obrazów ({ $data_checked }/{ $all_data }) progress_comparing_image_hashes = Porównano { $file_checked }/{ $all_files } hashy obrazów progress_scanning_music_tags_end = Porównano { $file_checked }/{ $all_files } tagów plików audio progress_scanning_music_tags = Odczytano tagi { $file_checked }/{ $all_files } plików audio progress_scanning_music_content_end = Porównano hashe { $file_checked }/{ $all_files } plików audio progress_scanning_music_content = Obliczono hash { $file_checked }/{ $all_files } plików audio ({ $data_checked }/{ $all_data }) progress_scanning_empty_folders = { $folder_number -> [one] Przeskanowano { $folder_number } folder *[other] Przeskanowano { $folder_number } folderów } progress_scanning_size = Przeskano rozmiar { $file_number } plików progress_scanning_size_name = Sprawdzono rozmiar i nazwÄ™ { $file_number } plików progress_scanning_name = Sprawdzono nazwÄ™ { $file_number } plików progress_analyzed_partial_hash = Obliczono częściowy hash { $file_checked }/{ $all_files } plików ({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = Obliczono peÅ‚ny hash { $file_checked }/{ $all_files } plików ({ $data_checked }/{ $all_data }) progress_prehash_cache_loading = Åadowanie pamiÄ™ci podrÄ™cznej częściowego hashu progress_prehash_cache_saving = Zapisywanie pamiÄ™ci podrÄ™cznej częściowego hashu 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_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. # 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-10.0.0/i18n/pt-BR/czkawka_gui.ftl000064400000000000000000001155451046102023000167250ustar 00000000000000# Window titles window_settings_title = Configurações window_main_title = Czkawka (Soluço) window_progress_title = Verificando window_compare_images = Comparar as 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 = Informações do arquivo music_checking_by_content = Conteúdo same_music_seconds_label = Duração mínima em segundos do fragmento same_music_similarity_label = Diferença máxima music_compare_only_in_title_group = Comparar dentro de grupos de títulos similares music_compare_only_in_title_group_tooltip = Quando esta opção está ativada, os arquivos são agrupados por título e são comparados entre si. Com 10.000 arquivos, em vez de se obter quase 100 milhões de comparações, normalmente, resultará em cerca de 20.000 comparações. same_music_tooltip = A pesquisa de arquivos de música equivalentes por seu conteúdo pode ser definindo por meio das configurações: - O tempo mínimo do fragmento após o qual os arquivos de música podem ser identificados como equivalentes - A diferença máxima entre os dois fragmentos dos testes Para obter bons resultados forneça combinações razoáveis destes parâmetros em cada teste. Definir o tempo mínimo para 5s e a diferença máxima para 1.0, irá pesquisar fragmentos quase idênticos nos arquivos. Um tempo de 20s e uma diferença máxima de 6.0, por outro lado, funciona bem para encontrar versões ao vivo, versões modificadas (remixadas), etc. Por padrão, cada arquivo de música é comparado entre si, o que pode levar muito tempo para testar vários arquivos, portanto, é melhor utilizar pastas de referência e especificar quais são os arquivos devem ser comparados entre si. Com a mesma quantidade de arquivos, a comparação de impressões digitais será pelo menos quatro vezes mais rápida do que sem as pastas de referência. music_comparison_checkbox_tooltip = Pesquisar arquivos de música equivalentes utilizando a inteligência artificial (IA) que utiliza o aprendizado da máquina para remover os parênteses de uma frase. Por exemplo, com esta opção ativada, os arquivos em questão que serão tratados como duplicados: ÅšwiÄ™dziżłób --- ÅšwiÄ™dziżłób (Remix Lato 2021) (Santuário --- Santuário (Remixado no verão de 2021)) duplicate_case_sensitive_name = Diferenciar maiúsculas de minúsculas duplicate_case_sensitive_name_tooltip = Quando esta opção está ativada, agrupa apenas os registros se eles tiverem exatamente o mesmo nome. Por exemplo, pagar <-> pagar. Quando esta opção está desativada, agrupa os registros por nomes e sem verificar a diferença entre as letras maiúsculas e minúsculas. Por exemplo, pagar <-> Pagar. 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 = Integridade do arquivo duplicate_hash_type_tooltip = O Czkawka oferece três tipos de identificação pela integridade do arquivo por meio do código ‘hash’: Blake3 - esta opção possui o recurso de criptografia e é o padrão porque é muito rápida. CRC32 - esta opção é a mais simples e deveria ser mais rápida do que o Blake3, mas muito raramente pode ocorrer algumas colisões. XXH3 - esta opção não possui o recurso de criptografia e é muito similar em desempenho e qualidade do Blake3. Estes modos podem ser facilmente alternados. duplicate_check_method_tooltip = Por enquanto, o Czkawka oferece três tipos de métodos para localizar os arquivos duplicados: Por nome - Localiza os arquivos que têm o mesmo nome. Por tamanho - Localiza os arquivos que têm o mesmo tamanho. Por integridade do arquivo - Localiza os arquivos que têm o mesmo conteúdo, ou seja, que possui o mesmo código ‘hash’ (o ‘hash’ de arquivo ou o valor do ‘hash’ de um arquivo é uma sequência de caracteres alfanuméricos distinta, trata-se de um valor único que corresponde ao conteúdo exato de um arquivo, permite verificar a integridade de um arquivo e é como se fosse a assinatura digital do arquivo). Este método cria a assinatura digital ou ‘hash’ do arquivo e, em seguida, compara o código da assinatura digital que foi criada para localizar os arquivos duplicados. Este método é a maneira mais segura e precisa de localizar os arquivos duplicados. O Czkawka utiliza a memória ‘cache’ (é um espaço de armazenamento das configurações, dos resultados das pesquisas, etc. que guarda os dados para que possam ser acessados mais rapidamente), portanto, a segunda verificação e as subsequentes dos mesmos dados deverão ser muito mais rápidas do que na primeira vez. image_hash_size_tooltip = A cada imagem que é verificada, um arquivo de assinatura digital ou ‘hash’ é criado e que pode ser comparado entre si, e se uma pequena diferença entre as imagens for encontrada, então significa que as imagens são equivalentes. O tamanho de 8 do ‘hash’ é muito bom para localizar as imagens que são apenas um pouco equivalentes às originais. Com uma quantidade maior de imagens, maior do que 1000 imagens, irá produzir uma grande quantidade de falsos positivos, então é recomendado utilizar um tamanho maior do ‘hash’ nestes casos. O tamanho de 16 do ‘hash’ é o tamanho padrão por ser uma boa referência entre localizar as imagens que são um pouco equivalentes e ter uma pequena quantidade de colisões do código ‘hash’. O tamanho de 32 e 64 do ‘hash’ localizam imagens muito equivalentes, mas quase não deve ter falsos positivos, talvez, exceto algumas imagens que possuem o canal alfa. image_resize_filter_tooltip = Para calcular o ‘hash’ de uma imagem, a biblioteca deve ser primeiro dimensionada. Escolha o algoritmo que será utilizado para calcular o ‘hash’ da imagem, saiba que poderá ter uma aparência um pouco diferente, dependendo do algoritmo que foi escolhido. O algoritmo mais rápido é o que produz os piores resultados e está ativado por padrão, porque com um tamanho do ‘hash’ de 16x16 a sua qualidade não é realmente perceptível. Com o tamanho do ‘hash’ de 8x8, recomenda-se utilizar um algoritmo diferente do mais próximo para obter melhores resultados para as imagens. image_hash_alg_tooltip = É possível escolher um dos vários algoritmos para o cálculo da criação do ‘hash’. Cada um tem os seus pontos fortes e os seus pontos fracos, às vezes produzem resultados melhores e às vezes produzem resultados piores para imagens diferentes. É melhor testar qual algoritmo tem os melhores resultados para os diferentes tipos de arquivos, lembre-se de que, nem sempre é facilmente perceptível as diferenças dos resultados. big_files_mode_combobox_tooltip = Permite pesquisar os arquivos menores ou maiores big_files_mode_label = Arquivos a serem verificados big_files_mode_smallest_combo_box = O arquivo menor big_files_mode_biggest_combo_box = O arquivo 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 equivalentes main_notebook_similar_videos = Vídeos equivalentes main_notebook_same_music = Músicas duplicadas main_notebook_symlinks = Ligações simbólicas não vá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 da modificação main_tree_view_column_size = Tamanho main_tree_view_column_similarity = Equivalentes main_tree_view_column_dimensions = Dimensões 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 da ligação simbólica main_tree_view_column_symlink_folder = Pasta da ligação simbólica main_tree_view_column_destination_path = Caminho do 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ões válidas main_label_check_method = Método de verificação main_label_hash_type = Tipo do hash main_label_hash_size = Tamanho do hash main_label_size_bytes = Tamanho (em bytes) main_label_min_size = Mínimo main_label_max_size = Máximo main_label_shown_files = Quantidade de arquivos exibidos main_label_resize_algorithm = Redimensionar o algoritmo main_label_similarity = Equivalentes { " " } 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 os arquivos do mesmo tamanho check_button_general_same_size_tooltip = Ignorar os arquivos com o mesmo tamanho nos resultados, geralmente estes são os arquivos duplicados (1:1) main_label_size_bytes_tooltip = Tamanho dos arquivos que serão utilizados na pesquisa # Upper window upper_tree_view_included_folder_column_title = Pastas para serem pesquisadas upper_tree_view_included_reference_column_title = Pastas de referência upper_recursive_button = Pesquisa recursiva upper_recursive_button_tooltip = Quando esta opção está ativada, a pesquisa por arquivos ocorre também nas pastas que não foram escolhidas. upper_manual_add_included_button = Adicionar manualmente upper_add_included_button = Adicionar upper_remove_included_button = Remover upper_manual_add_excluded_button = Remover manualmente upper_add_excluded_button = Adicionar upper_remove_excluded_button = Remover upper_manual_add_included_button_tooltip = Adicionar manualmente os nomes dos diretórios ou das pastas para serem pesquisadas. Para adicionar vários caminhos de uma vez, separe-os com o ponto e vírgula ‘;’. /home/roman;/home/rozkaz adicionará dois diretórios /home/roman e /home/rozkaz upper_add_included_button_tooltip = Adicionar um novo diretório para ser pesquisado. upper_remove_included_button_tooltip = Remover o diretório da pesquisa. upper_manual_add_excluded_button_tooltip = Adicionar manualmente um diretório à lista das exceções. Para adicionar vários caminhos de uma vez, separe-os com o ponto e vírgula ‘;’. Por exemplo, ‘/home/roman;/home/krokiet’ irá adicionar os dois diretórios ‘/home/roman’ e ‘/home/keokiet’ upper_add_excluded_button_tooltip = Selecionar o diretório que não será incluído na pesquisa. upper_remove_excluded_button_tooltip = Selecionar o diretório da lista das exceções. upper_notebook_items_configuration = Configurações dos itens upper_notebook_excluded_directories = Diretórios não incluí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 que serão ignorados na verificação. Quando você utiliza as extensões permitidas, estas tem maior prioridade em relação as outras, então o arquivo não será verificado. upper_excluded_items_tooltip = Os itens que serão ignorados devem conter o asterisco ‘*’, que corresponde a qualquer cadeia de caracteres e devem ser separados por vírgulas. Esta opção é mais lenta do que a opção do diretórios não incluídos, portanto, deve ser utilizada com cuidado. upper_excluded_items = Itens ignorados: upper_allowed_extensions = Extensões permitidas: upper_excluded_extensions = Extensões ignoradas: # Popovers popover_select_all = Selecionar todos popover_unselect_all = Desselecionar todos popover_reverse = Inverter a seleção 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 personalizado popover_unselect_custom = Desselecionar personalizado popover_select_all_images_except_biggest = Selecionar todos, exceto o maior popover_select_all_images_except_smallest = Selecionar todos, exceto o menor popover_custom_path_check_button_entry_tooltip = Selecionar os registros por caminho. Exemplo de uso: O caminho ‘/home/pimpek/rzecz.txt’ pode ser encontrado com ‘/home/pim*’ popover_custom_name_check_button_entry_tooltip = Selecionar os registros por nome de arquivo. Exemplo de uso: O caminho ‘/usr/ping/pong.txt’ pode ser encontrado com ‘*ong*’ popover_custom_regex_check_button_entry_tooltip = Selecionar os registros por meio das expressões regulares. Com o uso das expressões regulares (ou o modo ‘Regex’) o texto da pesquisa é o caminho completo (incluindo o nome do arquivo). Exemplo de uso: O caminho ‘/usr/bin/ziemniak.txt’ pode ser encontrado com ‘/ziem[a-z]+’ Esta opção utiliza a implementação padrão das expressões regulares do ‘Rust’. Você pode obter mais informações acessando a página eletrônica https://docs.rs/regex. popover_custom_case_sensitive_check_button_tooltip = Ativar a detecção da distinção entre as letras maiúsculas e minúsculas. Quando esta opção está ativada, o caminho ‘/home/*’ encontra ambos ‘HoMe/roman’ e ‘/home/roman’. popover_custom_not_all_check_button_tooltip = Impedir que todos os registros de um grupo sejam selecionados. Esta opção está ativada por padrão, porque na maioria das situações, você provavelmente não quer excluir (ou apagar) os arquivos originais que estejam duplicados, mas quer manter pelo menos um dos arquivos. Aviso: Esta configuração não funcionará se você tiver selecionado manualmente todos os registros de um grupo. popover_custom_regex_path_label = Caminho popover_custom_regex_name_label = Nome popover_custom_regex_regex_label = Expressão regular junto com o nome popover_custom_case_sensitive_check_button = Diferenciar entre maiúsculas e minúsculas popover_custom_all_in_group_label = Não selecionar todos os registros em um grupo popover_custom_mode_unselect = Desselecionar o personalizado popover_custom_mode_select = Selecionar o personalizado popover_sort_file_name = Nome do arquivo popover_sort_folder_name = Nome do diretório popover_sort_full_name = Nome completo popover_sort_size = Tamanho popover_sort_selection = Seleção popover_invalid_regex = A expressão regular não é válida popover_valid_regex = A expressão regular é válida # Bottom buttons bottom_search_button = Pesquisar bottom_select_button = Selecionar bottom_delete_button = Excluir bottom_save_button = Salvar bottom_symlink_button = Ligação simbólica bottom_hardlink_button = Ligação simbólica rígida bottom_move_button = Mover bottom_sort_button = Ordenar bottom_compare_button = Comparar bottom_search_button_tooltip = Iniciar a pesquisa bottom_select_button_tooltip = Selecionar os registros. Apenas os arquivos e as pastas selecionadas podem ser processadas posteriormente. bottom_delete_button_tooltip = Excluir os arquivos e as pastas selecionadas. bottom_save_button_tooltip = Salvar as informações da pesquisa em arquivo bottom_symlink_button_tooltip = Criar ligações simbólicas ou vínculos simbólicos (‘symbolic links’ ou ‘symlinks’ ou ‘soft links’) ou ‘atalho’ para um outro arquivo ou para um outro diretório. Esta opção só funciona se pelo menos dois resultados do grupo estiverem selecionados. O primeiro permanece inalterado, o segundo e os subsequentes estão vinculados ou ligados simbolicamente ao primeiro. bottom_hardlink_button_tooltip = Criar ligações simbólicas rígidas ou vínculos simbólicos rígidos (‘hard links’) ou ‘atalho’ para um outro arquivo original ou para um outro diretório original. Esta opção só funciona se pelo menos dois resultados do grupo estiverem selecionados. O primeiro permanece inalterado, o segundo e os subsequentes estão vinculados ou ligados simbolicamente ao primeiro. bottom_hardlink_button_not_available_tooltip = Criar ligações simbólicas rígidas ou vínculos simbólicos rígidos (‘hard links’) ou ‘atalho’ para um outro arquivo original ou para um outro diretório original. O botão está desativado, porque as ligações simbólicas rígidas não podem ser criadas. Este tipo de ligação simbólica só pode ser criada por um administrador no Windows, portanto, certifique-se de executar o programa com estas permissões de administrador. Se o programa estiver sendo executado com as permissões de administrador, verifique se existe questões equivalentes no GitHub do Czkawka (https://github.com/qarmin/czkawka). bottom_move_button_tooltip = Mover os arquivos para o diretório que foi selecionado. Esta opção permite copiar todos os arquivos para o diretório sem preservar a estrutura dos diretórios e dos arquivos. Ao tentar mover dois arquivos com nomes idênticos para um diretório, o segundo arquivo não será movido e ocorrerá um erro. bottom_sort_button_tooltip = Ordenar os arquivos ou os diretórios de acordo com o método que foi selecionado. bottom_compare_button_tooltip = Comparar os arquivos e os diretórios nos grupos. bottom_show_errors_tooltip = Exibir ou ocultar o painel de texto inferior. bottom_show_upper_notebook_tooltip = Exibir ou ocultar o painel de texto superior. # Progress Window progress_stop_button = Parar progress_stop_additional_message = Parar a pesquisa # About Window about_repository_button_tooltip = Endereço da página eletrônica do repositório com o código-fonte do programa Czkawka. about_donation_button_tooltip = Endereço da página eletrônica para fazer doação ao programador do Czkawka. about_instruction_button_tooltip = Endereço da página eletrônica para obter ajuda. about_translation_button_tooltip = Endereço da página eletrônica da plataforma de tradução ‘Crowdin’ com as traduções do programa Czkawka. Os idiomas polonês e inglês são fornecidos oficialmente pelo RafaÅ‚ Mikrut, que também é conhecido por ‘qarmin’ (https://github.com/qarmin) e o idioma português do Brasil foi gentilmente traduzido por marcelocripe (marcelocripe@gmail.com) em novembro de 2024. about_repository_button = Repositório about_donation_button = Doar about_instruction_button = Ajuda about_translation_button = Tradução # Header header_setting_button_tooltip = Abrir a janela das configurações do programa Czkawka. header_about_button_tooltip = Abrir a janela com as informações sobre o programa Czkawka. # Settings ## General settings_number_of_threads = Quantidade de tópicos utilizados settings_number_of_threads_tooltip = Quantidade de tópicos utilizados, o zero ‘0’ significa que todos os tópicos estão disponíveis e poderão ser utilizados. settings_use_rust_preview = Utilizar as bibliotecas externas em vez do GTK para carregar a pré-visualização settings_use_rust_preview_tooltip = Utilizar a pré-visualização do GTK, às vezes é mais rápido e oferece suporte a mais formatos, mas às vezes pode ser exatamente o contrário. Se você tiver problemas para carregar pré-visualização, pode tentar alterar esta configuração. Nos sistemas operacionais que não são da família do GNU/Linux, é recomendável utilizar esta opção, porque o pacote ‘gtk-pixbuf’ nem sempre está disponível, portanto, a desativação desta opção não irá carregar a pré-visualização de algumas imagens. settings_label_restart = Você precisa reiniciar o programa para aplicar as novas configurações! settings_ignore_other_filesystems = Ignorar outros sistemas de arquivos (somente para o GNU/Linux) settings_ignore_other_filesystems_tooltip = Ignorar os arquivos que não estão no mesmo sistema de arquivos dos diretórios que estão sendo pesquisados. Funciona da mesma forma que a opção ‘-xdev’ no comando ‘find’ (localizar) no GNU/Linux settings_save_at_exit_button_tooltip = Salvar as configurações em arquivo ao fechar o programa. settings_load_at_start_button_tooltip = Carregar as configurações a partir de um arquivo ao abrir o programa. Se esta opção não estiver ativada, as configurações padrão serão utilizadas. settings_confirm_deletion_button_tooltip = Exibir a janela de confirmação de exclusão ao clicar no botão excluir. settings_confirm_link_button_tooltip = Exibir a janela de confirmação ao clicar no botão da ligação simbólica. settings_confirm_group_deletion_button_tooltip = Exibir a janela de confirmação de exclusão ao tentar excluir todos os registros de um grupo. settings_show_text_view_button_tooltip = Exibir o painel de texto na parte inferior da interface gráfica do usuário settings_use_cache_button_tooltip = Utilizar o arquivo de ‘cache’. settings_save_also_as_json_button_tooltip = Salvar o ‘cache’ no formato JSON (que é legível por seres humanos), permite modificar o seu conteúdo. O arquivo de ‘cache’ será lido automaticamente pelo programa, se o formato do ‘cache’ for binário com a extensão ‘.bin’ ou se não tiver uma extensão do arquivo. settings_use_trash_button_tooltip = Mover os arquivos para a lixeira em vez de excluí-los permanentemente. settings_language_label_tooltip = Idioma da interface gráfica do usuário. settings_save_at_exit_button = Salvar as configurações ao fechar o programa settings_load_at_start_button = Carregar as configurações ao abrir o programa settings_confirm_deletion_button = Exibir a janela de confirmação quando for excluir qualquer arquivo settings_confirm_link_button = Exibir a janela de confirmação quando for criar qualquer arquivo de ligação simbólica ou de vínculo simbólico. settings_confirm_group_deletion_button = Exibir a janela de confirmação quando for excluir todos os arquivos do grupo settings_show_text_view_button = Exibir o painel de texto inferior settings_use_cache_button = Utilizar o arquivo de ‘cache’ settings_save_also_as_json_button = Salvar o arquivo de ‘cache’ com o formato JSON settings_use_trash_button = Mover os arquivos excluídos para a lixeira settings_language_label = Configurações do idioma settings_multiple_delete_outdated_cache_checkbutton = Excluir automaticamente os registros que estejam desatualizados no arquivo de ‘cache’ settings_multiple_delete_outdated_cache_checkbutton_tooltip = Excluir os registros que estejam desatualizados no arquivo de ‘cache’. Quando esta opção está ativada, o programa se certifica de que, quando os registros são carregados, todos eles apontam para os arquivos válidos, enquanto que, os arquivos corrompidos ou alterados são ignorados. Quando esta opção está desativada, ajudará na verificação dos arquivos que estão nos dispositivos de armazenamento externos, de modo que os registros relacionados a eles não sejam excluídos na próxima verificação. No caso de ter centenas de milhares de registros no arquivo de ‘cache’, recomenda-se que esta opção seja ativada, pois ela irá acelerar o carregamento ou o salvamento do ‘cache’ no início ou no fim da pesquisa. settings_notebook_general = Configurações gerais settings_notebook_duplicates = Arquivos duplicados settings_notebook_images = Imagens equivalentes settings_notebook_videos = Vídeos equivalentes ## Multiple - settings used in multiple tabs settings_multiple_image_preview_checkbutton_tooltip = Exibir a pré-visualização no lado direito ao selecionar um arquivo de imagem. settings_multiple_image_preview_checkbutton = Exibir a pré-visualização das imagens settings_multiple_clear_cache_button_tooltip = Limpar manualmente as entradas que estão desatualizadas no arquivo de ‘cache’. Esta opção só deve ser utilizada se a limpeza automática estiver desativada. settings_multiple_clear_cache_button = Remover os resultados que estejam desatualizados no arquivo de ‘cache’. ## Duplicates settings_duplicates_hide_hard_link_button_tooltip = Ocultar todos os arquivos, exceto um, se todos eles apontarem para os mesmos dados, se são ligações simbólicas rígidas ou vínculos simbólicos rígidos (‘hard links’). Por exemplo: Se houver no dispositivo de armazenamento sete arquivos de ligações simbólicas rígidas para dados específicos e um arquivo é diferente com os mesmos dados, então, o pesquisador de arquivos duplicados irá identificar apenas um arquivo exclusivo e será exibido um arquivo de ligação simbólica rígida. settings_duplicates_minimal_size_entry_tooltip = Configurar o tamanho mínimo do arquivo de ‘cache’ que será salvo no dispositivo de armazenamento. Definir um valor menor irá gerar mais registros, com isso, irá acelerar a pesquisa, mas irá tornar mais lento o carregamento ou o salvamento dos dados no arquivo de ‘cache’. settings_duplicates_prehash_checkbutton_tooltip = Permite que os códigos de ‘hash’ (integridade do arquivo) parciais sejam salvos no arquivo de ‘cache’ (o ‘hash’ é calculado a partir de uma pequena parte do arquivo), o que permite que os arquivos únicos sejam descartados antecipadamente dos resultados da pesquisa dos arquivos que não são duplicados. Esta opção está ativada por padrão, pois pode causar lentidão em algumas situações. Recomenda-se utilizar esta opção ao fazer a pesquisa de centenas de milhares ou de milhões de arquivos, porque esta opção pode acelerar os resultados da pesquisa e pode desativar esta opção ao fazer a pesquisa de uma pequena quantidade de dados. settings_duplicates_prehash_minimal_entry_tooltip = Tamanho mínimo do código ‘hash’ parcial que será gravado no arquivo de ‘cache’. settings_duplicates_hide_hard_link_button = Ocultar as ligações rígidas (somente no GNU/Linux e no macOS) settings_duplicates_prehash_checkbutton = Utilizar os ‘hash’ parciais no arquivo de ‘cache’ settings_duplicates_minimal_size_cache_label = Tamanho mínimo dos arquivos (em bytes) salvos no arquivo de ‘cache’ settings_duplicates_minimal_size_cache_prehash_label = Tamanho mínimo dos arquivos (em bytes) ao salvar o ‘hash’ parcial no arquivo de ‘cache’ ## Saving/Loading settings settings_saving_button_tooltip = Salvar as configurações atuais no arquivo. settings_loading_button_tooltip = Carregar as configurações do arquivo e substituir a configuração atual. settings_reset_button_tooltip = Restaurar a configurações padrão. settings_saving_button = Salvar as configurações settings_loading_button = Carregar as configurações settings_reset_button = Restaurar as configurações ## Opening cache/config folders settings_folder_cache_open_tooltip = Abrir a pasta onde os arquivos ‘.txt’ do ‘cache’ do programa está armazenado. A modificação manual dos arquivos de ‘cache’ pode causar a exibição de resultados que não são corretos ou os danos nos dados dos arquivos resultarão na necessidade de gerar novos arquivos de ‘cache’. No entanto, modificar o caminho pode economizar tempo ao mover uma grande quantidade de arquivos para um local diferente. Os arquivos de ‘cache’ podem ser copiados entre computadores diferentes para economizar o tempo da criação do ‘hash’ dos arquivos. Esta opção só é possível se os dados estiverem armazenados em uma estrutura de diretórios idêntica nos computadores. Se ocorrer problemas nos arquivos de ‘cache’, os arquivos podem ser excluídos permanentemente. O programa irá criar novos arquivos de ‘cache’ automaticamente. settings_folder_settings_open_tooltip = Abrir a pasta onde está armazenada as configurações do Czkawka. Aviso: a modificação manual das configurações pode interromper no seu fluxo de trabalho. settings_folder_cache_open = Abrir a pasta do ‘cache’ settings_folder_settings_open = Abrir a pasta das configurações # Compute results compute_stopped_by_user = A pesquisa foi interrompida pelo usuário compute_found_duplicates_hash_size = Foram encontrados { $number_files } arquivos duplicados nos { $number_groups } grupos que adotaram o { $size } de tamanho compute_found_duplicates_name = Foram encontrados { $number_files } arquivos duplicados nos { $number_groups } grupos compute_found_empty_folders = Foram encontradas { $number_files } pastas vazias compute_found_empty_files = Foram encontrados { $number_files } arquivos vazios compute_found_big_files = Foram encontrados { $number_files } arquivos grandes compute_found_temporary_files = Foram encontrados { $number_files } arquivos temporários compute_found_images = Foram encontrados { $number_files } arquivos de imagem equivalentes nos { $number_groups } grupos compute_found_videos = Foram encontrados { $number_files } arquivos de vídeo equivalentes nos { $number_groups } grupos compute_found_music = Foram encontrados { $number_files } arquivos de música equivalentes nos { $number_groups } grupos compute_found_invalid_symlinks = As { $number_files } ligações simbólicas não são válidas compute_found_broken_files = Foram encontrados { $number_files } arquivos corrompidos compute_found_bad_extensions = Foram encontrados { $number_files } arquivos com extensões que não são válidas # Progress window progress_scanning_general_file = Pesquisando em { $file_number } arquivos progress_scanning_extension_of_files = Pesquisando por tipo da extensão dos arquivos { $file_checked } de { $all_files } progress_scanning_broken_files = Verificado { $file_checked }/{ $all_files } arquivo ({ $data_checked }/{ $all_data }) progress_scanning_video = Criando o código ‘hash’ dos arquivos de vídeo { $file_checked } de { $all_files } progress_scanning_image = Hash de { $file_checked }/{ $all_files } imagem ({ $data_checked }/{ $all_data }) progress_comparing_image_hashes = Comparando o código ‘hash’ dos arquivos de imagem { $file_checked } de { $all_files } progress_scanning_music_tags_end = Comparando as informações dos arquivos de música { $file_checked } de { $all_files } progress_scanning_music_tags = Lendo as informações dos arquivos de música { $file_checked } de { $all_files } progress_scanning_music_content_end = Comparando a impressão digital dos arquivos de música { $file_checked } de { $all_files } progress_scanning_music_content = Calculada impressão digital de { $file_checked }/ arquivo de música{ $all_files } ({ $data_checked }/{ $all_data }) progress_scanning_empty_folders = Pesquisando nas { $folder_number } pastas progress_scanning_size = Pesquisando por nome nos { $file_number } arquivos progress_scanning_size_name = Pesquisando por nome e tamanho do arquivo { $file_number } progress_scanning_name = Pesquisando por nome do arquivo { $file_number } progress_analyzed_partial_hash = Hash parcial analisado de arquivos { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = Hash completo analisado de arquivos { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) progress_prehash_cache_loading = Carregando o ‘hash’ parcial dos arquivos do ‘cache’ progress_prehash_cache_saving = Salvando o ‘hash’ parcial dos arquivos no ‘cache’ progress_hash_cache_loading = Carregando o ‘hash’ dos arquivos do ‘cache’ progress_hash_cache_saving = Salvando o ‘hash’ dos arquivos no ‘cache’ progress_cache_loading = Carregando as informações do ‘cache’ progress_cache_saving = Salvando as informações no ‘cache’ progress_current_stage = Estágio atual: { " " } progress_all_stages = Todos os estágios: { " " } # Saving loading saving_loading_saving_success = As configurações foram salvas no arquivo { $name }. saving_loading_saving_failure = Ocorreu uma falha ao tentar salvar as configurações no arquivo { $name }. saving_loading_reset_configuration = As configurações padrão foram restauradas. saving_loading_loading_success = As configurações do programa foram carregadas com sucesso. saving_loading_invalid_string = Para o conteúdo "{ $key }" foi encontrado o resultado "{ $result }" que não é um texto válido. saving_loading_invalid_int = Para o conteúdo "{ $key }" foi encontrado o resultado "{ $result }" que não é um número inteiro. saving_loading_invalid_bool = Para o conteúdo "{ $key }" foi encontrado o resultado "{ $result }" que não é do tipo ‘booleano’, ou seja, ‘true’ = verdadeiro = 1 (um) ou ‘false’ = falso = 0 (zero). saving_loading_decode_problem_bool = Ocorreu uma falha ao tentar decodificar o dado ‘booleano’ o conteúdo "{ $key }", foi encontrado o resultado "{ $result }", mas os valores permitidos podem ser 0, 1, ‘true’ (verdadeiro) ou ‘false’ (falso). saving_loading_saving_same_keys = Tentando salvar as configurações com o conteúdo duplicado "{ $key }". saving_loading_failed_to_create_config_file = Ocorreu uma falha ao criar o arquivo de configurações no caminho "{ $path }", por causa de "{ $reason }". saving_loading_failed_to_read_config_file = Não foi possível carregar o arquivo de configurações do caminho "{ $path }", porque o arquivo não existe ou porque não é um arquivo de configurações. saving_loading_failed_to_read_data_from_file = Não foi possível ler os dados do arquivo do caminho "{ $path }", por causa de "{ $reason }". saving_loading_orphan_data = Foram encontrados dados órfãos "{ $data }" na linha "{ $line }". saving_loading_not_valid = A configuração "{ $data }" não existe na versão atual do programa. # Other selected_all_reference_folders = Não foi possível iniciar a pesquisa se todas as pastas estiverem definidas como pastas de origem (ou pastas de referência) searching_for_data = Pesquisando os dados. Esta ação pode demorar. Por favor, aguarde... text_view_messages = Exibir as mensagens text_view_warnings = Exibir os avisos text_view_errors = Exibir os erros about_window_motto = Este programa é e sempre será de uso gratuito. Talvez a interface do programa não seja tão ergonômica, mas pelo menos, o programa é de código aberto. # Various dialog dialogs_ask_next_time = Perguntar na próxima vez que for exibida a janela delete_file_failed = Ocorreu uma falha ao excluir o arquivo { $name }, por causa de { $reason } delete_title_dialog = Confirmação de exclusão delete_question_label = Você tem certeza de que quer excluir os arquivos? delete_all_files_in_group_title = Confirmação de exclusão de todos os arquivos do grupo delete_all_files_in_group_label1 = Em alguns grupos, todos os registros estão selecionados. delete_all_files_in_group_label2 = Você tem certeza de que quer excluí-los? delete_folder_failed = Ocorreu uma falha ao excluir a pasta { $dir }, porque a pasta não existe ou porque você não tem permissões para apagá-la ou porque a pasta não está vazia. delete_items_label = Os arquivos { $items } serão excluídos. delete_items_groups_label = Os arquivos { $items } dos grupos { $groups } serão excluídos. hardlink_failed = Ocorreu uma falha ao criar a ligação simbólica rígida hard_sym_invalid_selection_title_dialog = Alguns grupos não são válidos para serem selecionados hard_sym_invalid_selection_label_1 = Em alguns grupos, existe apenas um registro selecionado e será ignorado. hard_sym_invalid_selection_label_2 = Para criar a ligação simbólica rígida dos arquivos, pelo menos dois registros de um grupo devem ser selecionados. hard_sym_invalid_selection_label_3 = O primeiro registro no grupo é reconhecido como original e não é alterado, mas o segundo registro e os subsequentes são vinculados ou ligados ao primeiro. hard_sym_link_title_dialog = Confirmação da ligação simbólica hard_sym_link_label = Você tem certeza de que quer criar a ligação simbólica para estes arquivos? move_folder_failed = Ocorreu uma falha ao mover a pasta { $name }, por causa de { $reason } move_file_failed = Ocorreu uma falha ao mover o arquivo { $name }, por causa de { $reason } move_files_title_dialog = Escolha a pasta para a qual você quer mover os arquivos duplicados move_files_choose_more_than_1_path = Apenas um caminho pode ser selecionado para copiar os arquivos duplicados. A pasta { $path_number } foi selecionada. move_stats = Os itens { $num_files } de { $all_files } foram movidos corretamente. save_results_to_file = Resultados salvos tanto nos arquivos txt quanto json na pasta "{ $name }". search_not_choosing_any_music = Ocorreu um erro: Você deve selecionar pelo menos uma caixa de seleção com o tipo dos arquivos de música que serão pesquisadas. search_not_choosing_any_broken_files = Ocorreu um erro: Você deve selecionar pelo menos uma caixa de seleção com o tipo dos arquivos quebrados que serão pesquisados. include_folders_dialog_title = Pastas a serem pesquisadas exclude_folders_dialog_title = Pastas a serem ignoradas include_manually_directories_dialog_title = Adicionar as pastas manualmente cache_properly_cleared = O ‘cache’ foi limpo com sucesso cache_clear_duplicates_title = Limpando os arquivos duplicados do ‘cache’ cache_clear_similar_images_title = Limpando as imagens equivalentes do ‘cache’ cache_clear_similar_videos_title = Limpando os vídeos equivalentes do ‘cache’ cache_clear_message_label_1 = Você quer limpar as entradas que estão desatualizadas no ‘cache’? cache_clear_message_label_2 = Esta ação irá excluir todos os registros do ‘cache’ que apontam para os arquivos que não são válidos ou que não existentes. cache_clear_message_label_3 = Esta opção pode acelerar um pouco o carregamento ou o salvamento do ‘cache’. cache_clear_message_label_4 = Aviso: Esta ação irá excluir todos os dados que estão armazenados no ‘cache’ das unidades externas que não estão conectadas. Portanto, todos os ‘hash’ terão que de ser gerados novamente. # Show preview preview_image_resize_failure = Ocorreu uma falha ao redimensionar a imagem { $name }. preview_image_opening_failure = Ocorreu uma falha ao abrir a imagem { $name }, por causa de { $reason } # Compare images (L is short Left, R is short Right - they can't take too much space) compare_groups_number = O grupo { $current_group } de { $all_groups } grupos possui { $images_in_group } imagens compare_move_left_button = E compare_move_right_button = D czkawka_gui-10.0.0/i18n/pt-PT/czkawka_gui.ftl000064400000000000000000000776571046102023000167600ustar 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 dentro de grupos de títulos similares music_compare_only_in_title_group_tooltip = Quando ativado, os ficheiros são agrupados por título e então comparados entre si. Com 10 000 ficheiros, em vez de quase 100 milhões de comparações, haverá geralmente cerca de 20 000. 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_compare_button = Comparar 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_compare_button_tooltip = Compare as imagens do grupo. 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 = A utilização de pré-visualizações com GTK será por vezes mais rápida e suportará mais formatos, mas outras vezes ocorre exatamente o inverso. Se tiver problemas com o carregamento de pré-visualizações, tente alterar esta configuração. Em sistemas não-GNU/Linux, é recomendado usar esta opção porque o GTK-Pixbuf nem sempre está disponível lá, então desativar esta opção irá parar as tentativas falhadas de carregar pré-visualizações de algumas imagens. 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 = { $file_number -> [one] Verificado { $file_number } arquivo *[other] Escaneado { $file_number } arquivos } progress_scanning_extension_of_files = Extensão marcada do arquivo { $file_checked }/{ $all_files } progress_scanning_broken_files = Verificado { $file_checked }/{ $all_files } arquivo ({ $data_checked }/{ $all_data }) progress_scanning_video = Hash de { $file_checked }/{ $all_files } de vídeo progress_scanning_image = Hash de { $file_checked }/{ $all_files } imagem ({ $data_checked }/{ $all_data }) progress_comparing_image_hashes = Comparado a { $file_checked }/{ $all_files } hash de imagem progress_scanning_music_tags_end = Etiquetas comparadas de { $file_checked }/{ $all_files } arquivo de música progress_scanning_music_tags = Ler etiquetas de { $file_checked }/{ $all_files } arquivo de música progress_scanning_music_content_end = Impressão digital comparada de { $file_checked }/{ $all_files } arquivo de música progress_scanning_music_content = Calculada impressão digital de { $file_checked }/ arquivo de música{ $all_files } ({ $data_checked }/{ $all_data }) progress_scanning_empty_folders = { $folder_number -> [one] Pasta { $folder_number } escaneada *[other] Escaneado { $folder_number } pastas } progress_scanning_size = Tamanho digitalizado do arquivo { $file_number } progress_scanning_size_name = Nome digitalizado e tamanho do arquivo { $file_number } progress_scanning_name = Nome digitalizado do arquivo { $file_number } progress_analyzed_partial_hash = Hash parcial analisado de arquivos { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = Hash completo analisado de arquivos { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) 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_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. # 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 nos 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-10.0.0/i18n/ro/czkawka_gui.ftl000064400000000000000000001007521046102023000164130ustar 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ă în cadrul grupurilor de titluri similare 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_compare_button = Compară 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_compare_button_tooltip = Compară imaginile din grup. 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 = { $file_number -> [one] a scanat { $file_number } fiÅŸierul *[other] Scanat { $file_number } fiÅŸiere } progress_scanning_extension_of_files = S-a verificat extensia fiÈ™ierului { $file_checked }/{ $all_files } progress_scanning_broken_files = FiÅŸier verificat { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) progress_scanning_video = Hashed of { $file_checked }/{ $all_files } video progress_scanning_image = Hashed of { $file_checked }/{ $all_files } image ({ $data_checked }/{ $all_data }) progress_comparing_image_hashes = Imaginea a fost comparată { $file_checked }/{ $all_files } progress_scanning_music_tags_end = Tag-uri comparate ale fiÈ™ierului de muzică { $file_checked }/{ $all_files } progress_scanning_music_tags = CiteÈ™te etichetele fiÈ™ierului de muzică { $file_checked }/{ $all_files } progress_scanning_music_content_end = Față de amprenta fiÈ™ierului de muzică { $file_checked }/{ $all_files } progress_scanning_music_content = Amprenta calculată a fiÈ™ierului de muzică { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) progress_scanning_empty_folders = { $folder_number -> [one] Dosar Scanat { $folder_number } *[other] Scanat { $folder_number } dosare } progress_scanning_size = Dimensiune scanată pentru fiÅŸierul { $file_number } progress_scanning_size_name = Numele scanat ÅŸi dimensiunea fiÅŸierului { $file_number } progress_scanning_name = Numele scanat al fiÅŸierului { $file_number } progress_analyzed_partial_hash = S-a analizat hash parÈ›ial al fiÈ™ierelor { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = S-a analizat hash complet al fiÅŸierelor { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) 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_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. # 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 folderul "{ $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-10.0.0/i18n/ru/czkawka_gui.ftl000064400000000000000000001342241046102023000164220ustar 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_compare_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_compare_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 -> [one] ПроÑканирован { $file_number } файл *[other] ПроÑканированы { $file_number } файлов } progress_scanning_extension_of_files = Проверено раÑширение { $file_checked }/{ $all_files } файла progress_scanning_broken_files = Проверено { $file_checked }/{ $all_files } файл ({ $data_checked }/{ $all_data }) progress_scanning_video = Ð¥Ñш { $file_checked }/{ $all_files } видео progress_scanning_image = Ð¥Ñш { $file_checked }/{ $all_files } Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ({ $data_checked }/{ $all_data }) 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 } ({ $data_checked }/{ $all_data }) progress_scanning_empty_folders = { $folder_number -> [one] ПроÑканирована { $folder_number } папка *[other] ПроÑканированы { $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 } файлов ({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = Полный Ñ…Ñш { $file_checked }/{ $all_files } файлов ({ $data_checked }/{ $all_data }) 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_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 }» не ÑущеÑтвует в текущей верÑии приложениÑ. # 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-10.0.0/i18n/sv-SE/czkawka_gui.ftl000064400000000000000000000745101046102023000167320ustar 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 inom grupper med liknande titlar 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_compare_button = Jämför 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_compare_button_tooltip = Jämför bilder i gruppen. 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 = { $file_number -> [one] skannade { $file_number } fil *[other] skannade { $file_number } filer } progress_scanning_extension_of_files = Kontrollerad förlängning av { $file_checked }/{ $all_files } fil progress_scanning_broken_files = Kontrollerade { $file_checked }/{ $all_files } fil ({ $data_checked }/{ $all_data }) progress_scanning_video = Hashad av { $file_checked }/{ $all_files } video progress_scanning_image = Hashad av { $file_checked }/{ $all_files } bild ({ $data_checked }/{ $all_data }) progress_comparing_image_hashes = Jämfört { $file_checked }/{ $all_files } bildhash progress_scanning_music_tags_end = Jämförda taggar av { $file_checked }/{ $all_files } musikfil progress_scanning_music_tags = Läs taggar för { $file_checked }/{ $all_files } musikfil progress_scanning_music_content_end = Jämfört fingeravtryck av { $file_checked }/{ $all_files } musikfil progress_scanning_music_content = Beräknat fingeravtryck av { $file_checked }/{ $all_files } musikfil ({ $data_checked }/{ $all_data }) progress_scanning_empty_folders = { $folder_number -> [one] skannade { $folder_number } mapp *[other] skannade { $folder_number } mappar } progress_scanning_size = Skannad storlek pÃ¥ { $file_number } fil progress_scanning_size_name = Skannat namn och storlek pÃ¥ { $file_number } fil progress_scanning_name = Skannat namn pÃ¥ { $file_number } fil progress_analyzed_partial_hash = Analyserad partiell hash av { $file_checked }/{ $all_files } filer ({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = Analyserad full hash av { $file_checked }/{ $all_files } filer ({ $data_checked }/{ $all_data }) 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_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. # 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-10.0.0/i18n/tr/czkawka_gui.ftl000064400000000000000000001016501046102023000164160ustar 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 within groups of similar titles music_compare_only_in_title_group_tooltip = EtkinleÅŸtirildiÄŸinde dosyalar baÅŸlığa göre gruplandırılır ve ardından birbirleriyle karşılaÅŸtırılır. 10.000 dosya ile neredeyse 100 milyon karşılaÅŸtırma yerine genellikle 20.000 civarında karşılaÅŸtırma olacaktır. 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 = Görüntünün hash'ini hesaplamak için kütüphanenin önce görüntüyü yeniden boyutlandırması gerekir. Seçilen algoritmaya baÄŸlı olarak, hash hesaplamak için kullanılan sonuç görüntüsü biraz farklı görünecektir. Kullanılacak en hızlı ve aynı zamanda en kötü sonuçları veren algoritma Nearest'tir. Varsayılan olarak etkindir, çünkü 16x16 hash boyutunda daha düşük kalitede gerçekten görünmez. 8x8 karma boyutunda, daha iyi görüntü grupları elde etmek için Nearest'ten farklı bir algoritma kullanılması önerilir. 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_compare_button = KarşılaÅŸtır 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_compare_button_tooltip = Gruptaki görüntüleri karşılaÅŸtır. 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 = Ön izlemeleri yüklemek için gtk yerine harici kitaplıkları kullanın settings_use_rust_preview_tooltip = Gtk ön izlemelerini kullanmak bazen daha hızlı olabilir ve daha fazla biçimi destekler, ancak bazen bu tam tersi de olabilir. Ön izlemeleri yüklemede sorun yaşıyorsanız bu ayarı deÄŸiÅŸtirmeyi deneyebilirsiniz. Linux dışı sistemlerde bu seçeneÄŸin kullanılması önerilir çünkü gtk-pixbuf her zaman mevcut deÄŸildir, dolayısıyla bu seçeneÄŸin devre dışı bırakılması bazı görüntülerin ön izlemelerini yüklemeyecektir. 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 -> [one] { $file_number } dosya tarandı *[other] { $file_number } dosya tarandı } progress_scanning_extension_of_files = { $file_checked }/{ $all_files } dosyasını kontrol edildi progress_scanning_broken_files = Kontrol edilen { $file_checked }/{ $all_files } dosya ({ $data_checked }/{ $all_data }) progress_scanning_video = Hash iÅŸlemi uygulanmış { $file_checked }/{ $all_files } video progress_scanning_image = Hash iÅŸlemi uygulanmış { $file_checked }/{ $all_files } görsel ({ $data_checked }/{ $all_data }) progress_comparing_image_hashes = { $file_checked }/{ $all_files } görsel hash kaydı karşılaÅŸtırıldı. progress_scanning_music_tags_end = Compared tags of { $file_checked }/{ $all_files } music file progress_scanning_music_tags = Read tags of { $file_checked }/{ $all_files } music file progress_scanning_music_content_end = Compared fingerprint of { $file_checked }/{ $all_files } music file progress_scanning_music_content = Calculated fingerprint of { $file_checked }/{ $all_files } music file ({ $data_checked }/{ $all_data }) progress_scanning_empty_folders = { $folder_number -> [one] { $folder_number } klasör tarandı *[other] { $folder_number } klasör tarandı } progress_scanning_size = Taranan { $file_number } dosyasının boyutu progress_scanning_size_name = Scanned name and size of { $file_number } file progress_scanning_name = Scanned name of { $file_number } file progress_analyzed_partial_hash = Analyzed partial hash of { $file_checked }/{ $all_files } files ({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = Analyzed full hash of { $file_checked }/{ $all_files } files ({ $data_checked }/{ $all_data }) 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_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. # Other selected_all_reference_folders = Tüm dizinler, "BaÅŸvuru Klasörü" olarak ayarlandığında arama baÅŸlatılamaz. searching_for_data = İşleminiz yürütülüyor, bu biraz zaman alabilir, lütfen bekleyin... text_view_messages = MESAJLAR text_view_warnings = UYARILAR text_view_errors = HATALAR about_window_motto = Bu programın kullanımı ücretsizdir ve her zaman öyle kalacaktır. # Various dialog dialogs_ask_next_time = Bir dahaki sefere sor delete_file_failed = { $name } dosyası silinemedi, nedeni: { $reason } delete_title_dialog = Silmeyi onaylayın. delete_question_label = Dosyaları silmek istediÄŸinizden emin misiniz? delete_all_files_in_group_title = Gruptaki tüm dosyaları silmeyi onaylayın. delete_all_files_in_group_label1 = Kimi gruplarda tüm kayıtlar seçilir. delete_all_files_in_group_label2 = Bunları silmek istediÄŸinizden emin misiniz? delete_folder_failed = { $dir } klasörü; bulunmadığı, izniniz olmadığı veya klasör boÅŸ olmadığı için silinemedi. delete_items_label = { $items } dosya silinecek. delete_items_groups_label = { $groups } gruptan { $items } dosya silinecek. hardlink_failed = Sabit baÄŸlantı kurulamadı. hard_sym_invalid_selection_title_dialog = Kimi gruplarda geçersiz seçim hard_sym_invalid_selection_label_1 = Bazı gruplarda sadece bir kayıt seçilmiÅŸtir ve bu kayıt yok sayılacaktır. hard_sym_invalid_selection_label_2 = Bu dosyaları sabit/sembolik baÄŸlayabilmek için gruptaki en az iki sonucun seçilmesi gerekir. hard_sym_invalid_selection_label_3 = Gruptaki ilk resim asıl olarak tanınır ve deÄŸiÅŸtirilmez, ancak ikinci ve sonrakiler deÄŸiÅŸtirilir. hard_sym_link_title_dialog = BaÄŸlantı vermeyi onaylayın hard_sym_link_label = Bu dosyaları baÄŸlamak istediÄŸinizden emin misiniz? move_folder_failed = { $name } klasörü taşınamadı, nedeni: { $reason } move_file_failed = { $name } dosyası taşınamadı, nedeni: { $reason } move_files_title_dialog = EÅŸ dosyaları taşımak istediÄŸiniz klasörü seçin move_files_choose_more_than_1_path = EÅŸ dosyaları taşıyabilmek için yalnızca bir yol seçilebilir, { $path_number } seçildi. move_stats = { $num_files }/{ $all_files } öğe düzgün ÅŸekilde taşındı. save_results_to_file = Saved results both to txt and json files into "{ $name }" folder. search_not_choosing_any_music = HATA: Müzik araması için en az bir onay kutusu seçmelisiniz. search_not_choosing_any_broken_files = HATA: Bozuk dosya araması için en az bir onay kutusu seçmelisiniz. include_folders_dialog_title = Aranacak Klasörler exclude_folders_dialog_title = Hariç Tutulan Klasörler include_manually_directories_dialog_title = Dizini elle ekle cache_properly_cleared = Önbellek, uygun ÅŸekilde temizlendi. cache_clear_duplicates_title = EÅŸ dosyalar önbelleÄŸini temizle cache_clear_similar_images_title = Benzer resimler önbelleÄŸini temizle cache_clear_similar_videos_title = Benzer videolar önbelleÄŸini temizle cache_clear_message_label_1 = Güncel olmayan giriÅŸleri önbellekten temizlemek istiyor musunuz? cache_clear_message_label_2 = Bu iÅŸlem, geçersiz dosyalara iÅŸaret eden tüm önbellek giriÅŸlerini kaldıracak. cache_clear_message_label_3 = Bu, önbelleÄŸe yükleme/kaydetme iÅŸlemini biraz hızlandırabilir. cache_clear_message_label_4 = UYARI: İşlem, takılı olmayan harici sürücülerden önbelleÄŸe alınmış tüm verileri kaldıracaktır. Yani her 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-10.0.0/i18n/uk/czkawka_gui.ftl000064400000000000000000001321331046102023000164100ustar 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_compare_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_compare_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 -> [one] ВідÑканований { $file_number } файл *[other] ВідÑканований { $file_number } файли } progress_scanning_extension_of_files = Перевірено Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ { $file_checked }/{ $all_files } файлу progress_scanning_broken_files = Перевірено { $file_checked }/{ $all_files } файл ({ $data_checked }/{ $all_data }) progress_scanning_video = Створено відео з { $file_checked }/{ $all_files } progress_scanning_image = Створено Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ { $file_checked }/{ $all_files } ({ $data_checked }/{ $all_data }) progress_comparing_image_hashes = ПорівнÑо { $file_checked }/{ $all_files } хеш Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ progress_scanning_music_tags_end = ПорівнÑті теґи { $file_checked }/{ $all_files } музичний файл progress_scanning_music_tags = Read tags of { $file_checked }/{ $all_files } music file progress_scanning_music_content_end = Відбиток порівнÑльного відбитка { $file_checked }/{ $all_files } музичного файлу progress_scanning_music_content = Розраховано відбиток Ð¿Ð°Ð»ÑŒÑ†Ñ { $file_checked }/{ $all_files } музичного файлу ({ $data_checked }/{ $all_data }) progress_scanning_empty_folders = { $folder_number -> [one] Скановано { $folder_number } папку *[other] Скановано { $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 } файлів ({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = Проаналізовано повний хеш { $file_checked }/{ $all_files } файлів ({ $data_checked }/{ $all_data }) 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_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 }» не Ñ–Ñнує в поточній верÑÑ–Ñ— додатку. # 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-10.0.0/i18n/zh-CN/czkawka_gui.ftl000064400000000000000000000706041046102023000167140ustar 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 = 标签 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。 填写 /home/roman;/home/krokiet 将添加 /home/roman å’Œ /home/kookiet 两个目录 用法示例“.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_compare_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_compare_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 = éšè—除一个以外的所有文件,如果所有文件都指å‘åŒä¸€æ•°æ®ï¼ˆå³ä¸ºç¡¬é“¾æŽ¥ï¼‰ã€‚ 示例:如果(ç£ç›˜ä¸Šï¼‰æœ‰ä¸ƒä¸ªæ–‡ä»¶ç¡¬é“¾æŽ¥åˆ°ç‰¹å®šæ•°æ®ï¼Œè€Œä¸€ä¸ªä¸åŒæ–‡ä»¶å…·æœ‰ç›¸åŒæ•°æ®ä½†ä¸åŒ 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 = 在 { $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 -> [one] 已掃æ { $file_number } 個文件 *[other] 已掃æ { $file_number } 個文件 } progress_scanning_extension_of_files = 检查了 { $file_checked }/{ $all_files } 文件的扩展 progress_scanning_broken_files = 签入 { $file_checked }/{ $all_files } 文件({ $data_checked }/{ $all_data }) progress_scanning_video = 对 { $file_checked }/{ $all_files } 视频的哈希值 progress_scanning_image = 对 { $file_checked }/{ $all_files } 图åƒçš„哈希值({ $data_checked }/{ $all_data }) 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 } éŸ³ä¹æ–‡ä»¶ ({ $data_checked }/{ $all_data } ) 的指纹 progress_scanning_empty_folders = { $folder_number -> [one] 已掃æ { $folder_number } 個資料夾 *[other] 已掃æ { $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 } 文件的部分哈希值({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = 分æžäº† { $file_checked }/{ $all_files } 文件的完整哈希值({ $data_checked }/{ $all_data }) 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_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 }â€åœ¨å½“å‰åº”用版本中ä¸å­˜åœ¨ã€‚ # 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-10.0.0/i18n/zh-TW/czkawka_gui.ftl000064400000000000000000000716321046102023000167500ustar 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 within groups of similar titles 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 æœå°‹ç›¸ä¼¼çš„音樂檔案,該 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 æä¾›ä¸‰ç¨®é¡žåž‹çš„雜湊: 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/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 = 在掃æä¸­å°‡æœƒè¢«å¿½ç•¥çš„ç¦ç”¨æª”案清單。 ç•¶ä½¿åŒæ™‚使用å…許與ç¦ç”¨å…©è€…æ™‚ï¼Œæ­¤é …æ“æœ‰æ›´é«˜çš„å„ªå…ˆç­‰ç´šï¼Œæ‰€ä»¥æª”æ¡ˆå°‡ä¸æœƒè¢«æª¢æŸ¥ã€‚ 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ï¼‰ä¾†é¸æ“‡è¨˜éŒ„。 在這個模å¼ä¸‹ï¼Œè¢«æœå°‹çš„æ–‡å­—是「路徑ã€åŠ ä¸Šã€Œå稱ã€ã€‚ 範例用法: 使用 /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_compare_button = Compare 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_compare_button_tooltip = Compare images in the group. 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 上查詢命令時類似 -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 = 如果所有檔案都指å‘相åŒçš„資料(å³ç‚ºæ°¸ä¹…連çµï¼‰ï¼Œå‰‡éš±è—除一個以外的所有檔案。 例如:在有七個檔案與特定資料有永久連çµï¼Œä»¥åŠä¸€å€‹å…·æœ‰ç›¸åŒè³‡æ–™ä½†ä¸åŒ 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 = 在 { $number_groups } 群組中找到 { $number_files } é‡è¤‡ï¼Œè¢«å¸¶åŽ»äº† { $size } compute_found_duplicates_name = 找到 { $number_files } é‡è¤‡çš„ { $number_groups } 群組 compute_found_empty_folders = 找到 { $number_files } 空資料夾 compute_found_empty_files = 找到 { $number_files } 空檔案 compute_found_big_files = 找到 { $number_files } 大檔案 compute_found_temporary_files = 找到 { $number_files } 臨時檔案 compute_found_images = 在 { $number_groups } 群組中找到 { $number_files } ç›¸ä¼¼å½±åƒ compute_found_videos = 在 { $number_groups } 群組中找到 { $number_files } 相似影片 compute_found_music = 在 { $number_groups } 群組中找到 { $number_files } 相似的音樂檔案 compute_found_invalid_symlinks = 找到 { $number_files } ç„¡æ•ˆçš„ç¬¦è™Ÿé€£çµ compute_found_broken_files = 找到 { $number_files } æå£žçš„æª”案 compute_found_bad_extensions = 找到 { $number_files } 檔案,其副檔å無效 # Progress window progress_scanning_general_file = { $file_number -> [one] Scanned { $file_number } file *[other] Scanned { $file_number } files } progress_scanning_extension_of_files = Checked extension of { $file_checked }/{ $all_files } file progress_scanning_broken_files = Checked { $file_checked }/{ $all_files } file ({ $data_checked }/{ $all_data }) progress_scanning_video = Hashed of { $file_checked }/{ $all_files } video progress_scanning_image = Hashed of { $file_checked }/{ $all_files } image ({ $data_checked }/{ $all_data }) progress_comparing_image_hashes = Compared { $file_checked }/{ $all_files } image hash progress_scanning_music_tags_end = Compared tags of { $file_checked }/{ $all_files } music file progress_scanning_music_tags = Read tags of { $file_checked }/{ $all_files } music file progress_scanning_music_content_end = Compared fingerprint of { $file_checked }/{ $all_files } music file progress_scanning_music_content = Calculated fingerprint of { $file_checked }/{ $all_files } music file ({ $data_checked }/{ $all_data }) progress_scanning_empty_folders = { $folder_number -> [one] Scanned { $folder_number } folder *[other] Scanned { $folder_number } folders } progress_scanning_size = Scanned size of { $file_number } file progress_scanning_size_name = Scanned name and size of { $file_number } file progress_scanning_name = Scanned name of { $file_number } file progress_analyzed_partial_hash = Analyzed partial hash of { $file_checked }/{ $all_files } files ({ $data_checked }/{ $all_data }) progress_analyzed_full_hash = Analyzed full hash of { $file_checked }/{ $all_files } files ({ $data_checked }/{ $all_data }) 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_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 }" åœ¨ç›®å‰æ‡‰ç”¨ç¨‹å¼çš„版本中ä¸å­˜åœ¨ã€‚ # 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 = 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 = L compare_move_right_button = R czkawka_gui-10.0.0/i18n.toml000064400000000000000000000007111046102023000136540ustar 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-10.0.0/icons/czk_add.svg000064400000000000000000000012451046102023000154360ustar 00000000000000czkawka_gui-10.0.0/icons/czk_compare.svg000064400000000000000000000267031046102023000163420ustar 00000000000000czkawka_gui-10.0.0/icons/czk_delete.svg000064400000000000000000000007511046102023000161510ustar 00000000000000czkawka_gui-10.0.0/icons/czk_hardlink.svg000064400000000000000000000353301046102023000165040ustar 00000000000000czkawka_gui-10.0.0/icons/czk_hide_down.svg000064400000000000000000000023351046102023000166470ustar 00000000000000czkawka_gui-10.0.0/icons/czk_hide_up.svg000064400000000000000000000023771046102023000163320ustar 00000000000000czkawka_gui-10.0.0/icons/czk_info.svg000064400000000000000000000014531046102023000156420ustar 00000000000000czkawka_gui-10.0.0/icons/czk_left.svg000064400000000000000000000003651046102023000156420ustar 00000000000000czkawka_gui-10.0.0/icons/czk_manual_add.svg000064400000000000000000000012451046102023000167730ustar 00000000000000czkawka_gui-10.0.0/icons/czk_move.svg000064400000000000000000000007461046102023000156610ustar 00000000000000czkawka_gui-10.0.0/icons/czk_right.svg000064400000000000000000000004261046102023000160230ustar 00000000000000czkawka_gui-10.0.0/icons/czk_save.svg000064400000000000000000000044171046102023000156500ustar 00000000000000czkawka_gui-10.0.0/icons/czk_search.svg000064400000000000000000000016751046102023000161620ustar 00000000000000czkawka_gui-10.0.0/icons/czk_select.svg000064400000000000000000000030221046102023000161600ustar 00000000000000czkawka_gui-10.0.0/icons/czk_settings.svg000064400000000000000000000025611046102023000165500ustar 00000000000000czkawka_gui-10.0.0/icons/czk_sort.svg000064400000000000000000000100521046102023000156710ustar 00000000000000czkawka_gui-10.0.0/icons/czk_stop.svg000064400000000000000000000011521046102023000156700ustar 00000000000000czkawka_gui-10.0.0/icons/czk_symlink.svg000064400000000000000000000027041046102023000163750ustar 00000000000000czkawka_gui-10.0.0/icons/czk_trash.svg000064400000000000000000000055321046102023000160320ustar 00000000000000czkawka_gui-10.0.0/icons/icon_about.png000064400000000000000000000105521046102023000161470ustar 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 { while let Ok(msg) = result_receiver.try_recv() { 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, ); } } } 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, &symlink_info.type_of_error.translate()), ( 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() }; let (directory, file) = split_path(&base_file_entry.path); similar_videos_add_to_list_store(&list_store, &file, &directory, 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().clone(); for (base_file_entry, mut vec_file_entry) in vec_struct_similar { vec_file_entry.sort_by_key(|e| e.similarity); // 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().clone(); for mut vec_file_entry in vec_struct_similar { vec_file_entry.sort_by_key(|e| e.similarity); 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 + 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 + 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 = 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-10.0.0/src/connect_things/connect_about_buttons.rs000064400000000000000000000030161046102023000227440ustar 00000000000000use gtk4::prelude::*; use log::error; 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(crate) 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) { error!("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) { error!("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) { error!("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) { error!("Failed to open translation site: {TRANSLATION_SITE}, reason {e}"); }; }); } czkawka_gui-10.0.0/src/connect_things/connect_button_compare.rs000064400000000000000000000713711046102023000231060ustar 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 log::error; 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::{NOTEBOOKS_INFO, NotebookObject}; const BIG_PREVIEW_SIZE: i32 = 600; const SMALL_PREVIEW_SIZE: i32 = 130; pub(crate) 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) => { error!("Failed to open image {full_path}, reason {e}"); } }; } Err(e) => { error!("Failed to open image {full_path}, reason {e}"); } }; } else { match Pixbuf::from_file(&full_path) { Ok(t) => { pixbuf = t; } Err(e) => { error!("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 { error!("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 { error!("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-10.0.0/src/connect_things/connect_button_delete.rs000064400000000000000000000426451046102023000227240ustar 00000000000000use std::collections::BTreeMap; use std::fs; use czkawka_core::common::check_if_folder_contains_only_empty_folders; use gtk4::prelude::*; use gtk4::{Align, CheckButton, Dialog, Orientation, ResponseType, TextView}; use log::debug; 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(crate) 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(crate) 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 } debug!("Starting to delete {} folders", selected_rows.len()); let start_time = std::time::Instant::now(); let mut deleted_folders: u32 = 0; 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); let full_path = get_full_name_from_path_name(&path, &name); // We must check if folder is really empty or contains only other empty folders let mut error_happened = check_if_folder_contains_only_empty_folders(&full_path).is_err(); if !error_happened { if !use_trash { match fs::remove_dir_all(&full_path) { Ok(()) => { model.remove(&iter); deleted_folders += 1; } Err(_inspected) => error_happened = true, } } else { match trash::delete(&full_path) { Ok(()) => { model.remove(&iter); deleted_folders += 1; } Err(_inspected) => error_happened = true, } } } // This could be changed to add more specific error message, what exactly happened if error_happened { messages += &flg!("delete_folder_failed", dir = full_path); messages += "\n"; } } debug!("Deleted {deleted_folders} folders in {:?}", start_time.elapsed()); text_view_errors.buffer().set_text(messages.as_str()); } pub(crate) 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 } debug!("Starting to delete {} files", selected_rows.len()); let start_time = std::time::Instant::now(); let mut deleted_files: u32 = 0; // 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); deleted_files += 1; } 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); deleted_files += 1; } Err(e) => { messages += flg!("delete_file_failed", name = get_full_name_from_path_name(&path, &name), reason = e.to_string()).as_str(); messages += "\n"; } } } } debug!("Deleted {deleted_files} files in {:?}", start_time.elapsed()); 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(crate) 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(); // TODO - looks like a but - this var is not deleted #[allow(clippy::collection_is_never_read)] 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-10.0.0/src/connect_things/connect_button_hardlink.rs000064400000000000000000000325141046102023000232500ustar 00000000000000use std::fs; use std::path::PathBuf; use czkawka_core::common::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(crate) 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()); } } } } 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()); }; } #[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()); }; } } } } 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(crate) 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-10.0.0/src/connect_things/connect_button_move.rs000064400000000000000000000170041046102023000224170ustar 00000000000000use std::path::{Path, PathBuf}; use fs_extra::dir::CopyOptions; use gtk4::prelude::*; use gtk4::{ResponseType, TreePath}; use log::debug; 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(crate) 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.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; debug!("Starting to move {} files", selected_rows.len()); let start_time = std::time::Instant::now(); // 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; } debug!("Moved {moved_files} files in {:?}", start_time.elapsed()); 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-10.0.0/src/connect_things/connect_button_save.rs000064400000000000000000000121131046102023000224030ustar 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(crate) 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-10.0.0/src/connect_things/connect_button_search.rs000064400000000000000000001027341046102023000227230ustar 00000000000000use std::path::PathBuf; use std::sync::Arc; use std::sync::atomic::{AtomicBool, Ordering}; use std::thread; use crossbeam_channel::Sender; use czkawka_core::common::consts::DEFAULT_THREAD_SIZE; use czkawka_core::common::model::CheckingMethod; use czkawka_core::common::progress_data::ProgressData; use czkawka_core::common::tool_data::CommonData; use czkawka_core::common::traits::Search; use czkawka_core::tools::bad_extensions::{BadExtensions, BadExtensionsParameters}; use czkawka_core::tools::big_file::{BigFile, BigFileParameters}; use czkawka_core::tools::broken_files::{BrokenFiles, BrokenFilesParameters, CheckedTypes}; use czkawka_core::tools::duplicate::{DuplicateFinder, DuplicateFinderParameters}; use czkawka_core::tools::empty_files::EmptyFiles; use czkawka_core::tools::empty_folder::EmptyFolder; use czkawka_core::tools::invalid_symlinks::InvalidSymlinks; use czkawka_core::tools::same_music::{MusicSimilarity, SameMusic, SameMusicParameters}; use czkawka_core::tools::similar_images::{SimilarImages, SimilarImagesParameters}; use czkawka_core::tools::similar_videos::{DEFAULT_CROP_DETECT, DEFAULT_SKIP_FORWARD_AMOUNT, DEFAULT_VID_HASH_DURATION, SimilarVideos, SimilarVideosParameters}; use czkawka_core::tools::temporary::Temporary; use fun_time::fun_time; use gtk4::Grid; use gtk4::prelude::*; 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::{DEFAULT_MAXIMAL_FILE_SIZE, DEFAULT_MINIMAL_CACHE_SIZE, DEFAULT_MINIMAL_FILE_SIZE, flg}; #[allow(clippy::too_many_arguments)] pub(crate) 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_flag = gui_data.stop_flag.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_flag = stop_flag.clone(); // Clear stop flag stop_flag.store(false, Ordering::Relaxed); 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_flag, result_sender, &grid_progress, progress_sender), NotebookMainEnum::EmptyFiles => empty_files_search(&gui_data, loaded_commons, stop_flag, result_sender, &grid_progress, progress_sender), NotebookMainEnum::EmptyDirectories => empty_dirs_search(&gui_data, loaded_commons, stop_flag, result_sender, &grid_progress, progress_sender), NotebookMainEnum::BigFiles => big_files_search(&gui_data, loaded_commons, stop_flag, result_sender, &grid_progress, progress_sender), NotebookMainEnum::Temporary => temporary_files_search(&gui_data, loaded_commons, stop_flag, result_sender, &grid_progress, progress_sender), NotebookMainEnum::SimilarImages => similar_image_search(&gui_data, loaded_commons, stop_flag, result_sender, &grid_progress, progress_sender), NotebookMainEnum::SimilarVideos => similar_video_search(&gui_data, loaded_commons, stop_flag, result_sender, &grid_progress, progress_sender), NotebookMainEnum::SameMusic => same_music_search(&gui_data, loaded_commons, stop_flag, result_sender, &grid_progress, progress_sender, &show_dialog), NotebookMainEnum::Symlinks => bad_symlinks_search(&gui_data, loaded_commons, stop_flag, result_sender, &grid_progress, progress_sender), NotebookMainEnum::BrokenFiles => broken_files_search(&gui_data, loaded_commons, stop_flag, result_sender, &grid_progress, progress_sender, &show_dialog), NotebookMainEnum::BadExtensions => bad_extensions_search(&gui_data, loaded_commons, stop_flag, 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(); Self { 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_flag: Arc, 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 search") 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 search") 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 tool = DuplicateFinder::new(params); set_common_settings(&mut tool, &loaded_commons); tool.set_delete_outdated_cache(delete_outdated_cache); tool.search(&stop_flag, Some(&progress_data_sender)); result_sender.send(Message::Duplicates(tool)).expect("Failed to send Duplicates message"); }) .expect("Failed to spawn DuplicateFinder thread"); } fn empty_files_search( gui_data: &GuiData, loaded_commons: LoadedCommonItems, stop_flag: Arc, 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 tool = EmptyFiles::new(); set_common_settings(&mut tool, &loaded_commons); tool.search(&stop_flag, Some(&progress_data_sender)); result_sender.send(Message::EmptyFiles(tool)).expect("Failed to send EmptyFiles message"); }) .expect("Failed to spawn EmptyFiles thread"); } fn empty_dirs_search( gui_data: &GuiData, loaded_commons: LoadedCommonItems, stop_flag: Arc, 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 tool = EmptyFolder::new(); set_common_settings(&mut tool, &loaded_commons); tool.search(&stop_flag, Some(&progress_data_sender)); result_sender.send(Message::EmptyFolders(tool)).expect("Failed to send EmptyFolders message"); }) .expect("Failed to spawn EmptyFolders thread"); } fn big_files_search( gui_data: &GuiData, loaded_commons: LoadedCommonItems, stop_flag: Arc, 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 search") 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 tool = BigFile::new(params); set_common_settings(&mut tool, &loaded_commons); tool.search(&stop_flag, Some(&progress_data_sender)); result_sender.send(Message::BigFiles(tool)).expect("Failed to send BigFiles message"); }) .expect("Failed to spawn BigFiles thread"); } fn temporary_files_search( gui_data: &GuiData, loaded_commons: LoadedCommonItems, stop_flag: Arc, 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 tool = Temporary::new(); set_common_settings(&mut tool, &loaded_commons); tool.search(&stop_flag, Some(&progress_data_sender)); result_sender.send(Message::Temporary(tool)).expect("Failed to send Temporary message"); }) .expect("Failed to spawn Temporary thread"); } fn same_music_search( gui_data: &GuiData, loaded_commons: LoadedCommonItems, stop_flag: Arc, 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 search") 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 tool = SameMusic::new(params); set_common_settings(&mut tool, &loaded_commons); tool.search(&stop_flag, Some(&progress_data_sender)); result_sender.send(Message::SameMusic(tool)).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_flag: Arc, 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 tool = BrokenFiles::new(params); set_common_settings(&mut tool, &loaded_commons); tool.search(&stop_flag, Some(&progress_data_sender)); result_sender.send(Message::BrokenFiles(tool)).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_flag: Arc, 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 search") 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 search") 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 search") 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 tool = SimilarImages::new(params); set_common_settings(&mut tool, &loaded_commons); tool.set_delete_outdated_cache(delete_outdated_cache); tool.search(&stop_flag, Some(&progress_data_sender)); result_sender.send(Message::SimilarImages(tool)).expect("Failed to send SimilarImages message"); }) .expect("Failed to spawn SimilarImages thread"); } fn similar_video_search( gui_data: &GuiData, loaded_commons: LoadedCommonItems, stop_flag: Arc, 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, DEFAULT_SKIP_FORWARD_AMOUNT, DEFAULT_VID_HASH_DURATION, DEFAULT_CROP_DETECT, ); let mut tool = SimilarVideos::new(params); set_common_settings(&mut tool, &loaded_commons); tool.set_delete_outdated_cache(delete_outdated_cache); tool.search(&stop_flag, Some(&progress_data_sender)); result_sender.send(Message::SimilarVideos(tool)).expect("Failed to send SimilarVideos message"); }) .expect("Failed to spawn SimilarVideos thread"); } fn bad_symlinks_search( gui_data: &GuiData, loaded_commons: LoadedCommonItems, stop_flag: Arc, 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 tool = InvalidSymlinks::new(); set_common_settings(&mut tool, &loaded_commons); tool.search(&stop_flag, Some(&progress_data_sender)); result_sender.send(Message::InvalidSymlinks(tool)).expect("Failed to send InvalidSymlinks message"); }) .expect("Failed to spawn InvalidSymlinks thread"); } fn bad_extensions_search( gui_data: &GuiData, loaded_commons: LoadedCommonItems, stop_flag: Arc, 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 tool = BadExtensions::new(params); set_common_settings(&mut tool, &loaded_commons); tool.search(&stop_flag, Some(&progress_data_sender)); result_sender.send(Message::BadExtensions(tool)).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-10.0.0/src/connect_things/connect_button_select.rs000064400000000000000000000101121046102023000227210ustar 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(crate) 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-10.0.0/src/connect_things/connect_button_sort.rs000064400000000000000000000040201046102023000224320ustar 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::{NotebookMainEnum, to_notebook_main_enum}; use crate::notebook_info::NOTEBOOKS_INFO; pub(crate) 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-10.0.0/src/connect_things/connect_button_stop.rs000064400000000000000000000024521046102023000224370ustar 00000000000000use std::sync::Arc; use std::sync::atomic::AtomicBool; use gtk4::prelude::*; use crate::flg; use crate::gui_structs::gui_data::GuiData; use crate::help_functions::KEY_ENTER; fn send_stop_message(stop_flag: &Arc) { stop_flag.store(true, std::sync::atomic::Ordering::Relaxed); } pub(crate) 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_flag = gui_data.stop_flag.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_flag); } }); 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_flag = gui_data.stop_flag.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_flag); }); } czkawka_gui-10.0.0/src/connect_things/connect_change_language.rs000064400000000000000000000042431046102023000231470ustar 00000000000000use gtk4::prelude::*; use i18n_embed::DesktopLanguageRequester; use i18n_embed::unic_langid::LanguageIdentifier; use log::error; use crate::language_functions::get_language_from_combo_box_text; use crate::{GuiData, LANGUAGES_ALL, localizer_gui}; // use i18n_embed::{DesktopLanguageRequester, Localizer}; pub(crate) 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) { error!("Error while loading languages for {lib} {error:?}"); } } gui_data.update_language(); } pub(crate) 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 doesn't support this (maybe could add this in future) for i in old_short_lang.chars() { if i.is_ascii_alphabetic() { short_lang.push(i); } else { break; } } for (index, lang) in LANGUAGES_ALL.iter().enumerate() { if lang.short_text == short_lang { gui_data.settings.combo_box_settings_language.set_active(Some(index as u32)); break; } } } } czkawka_gui-10.0.0/src/connect_things/connect_duplicate_buttons.rs000064400000000000000000000033061046102023000236060ustar 00000000000000use czkawka_core::common::model::CheckingMethod; use gtk4::prelude::*; use crate::gui_structs::gui_data::GuiData; use crate::help_combo_box::DUPLICATES_CHECK_METHOD_COMBO_BOX; pub(crate) 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-10.0.0/src/connect_things/connect_header_buttons.rs000064400000000000000000000010071046102023000230600ustar 00000000000000use gtk4::prelude::*; use crate::gui_structs::gui_data::GuiData; pub(crate) 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-10.0.0/src/connect_things/connect_notebook_tabs.rs000064400000000000000000000014531046102023000227100ustar 00000000000000use crate::gui_structs::gui_data::GuiData; use crate::help_functions::*; use crate::notebook_enums::*; pub(crate) 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-10.0.0/src/connect_things/connect_popovers_select.rs000064400000000000000000001052311046102023000232720ustar 00000000000000use czkawka_core::common::items::new_excluded_item; use czkawka_core::common::regex_check; use gtk4::prelude::*; use gtk4::{ResponseType, TreeIter, Window}; use log::error; 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 { error!("What? Regex should compile properly."); confirmation_dialog_select_unselect.close(); return; } } else { // Trivial regex is used, because I need here regex #[allow(clippy::trivial_regex)] 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 using_reference_folders = column_header.is_some_and(|e| model.get::(&iter, e)) && !model.get::(&iter, column_file_name).is_empty(); 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 went to header and all previous items were selected, then deselect last item if let Some(column_header) = column_header { if model.get::(&iter, column_header) { if select_things { if !using_reference_folders && 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 went to last item and all previous items were selected, then deselect last item if !model.iter_next(&iter) { if select_things { if !using_reference_folders && 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(crate) 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-10.0.0/src/connect_things/connect_popovers_sort.rs000064400000000000000000000260311046102023000230020ustar 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(crate) 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(crate) 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(crate) 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); } } // TODO - This test uncovers a bug in the code, so it is disabled for now, with sort button // #[gtk4::test] // pub(crate) fn _fuzzer_test() { // for _ in 0..10000 { // 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 first_row: &[(u32, &dyn ToValue)] = &[(0, &true), (1, &"AAA")]; // list_store.set(&list_store.append(), first_row); // // let mut since_last_header = 0; // // (0..(random::() % 10 + 5)).for_each(|_| { // let bool_val = if since_last_header < 2 { // since_last_header += 1; // false // } else { // since_last_header = 0; // random() // }; // let string_val = rand::random::().to_string(); // let a: Vec<(u32, &dyn ToValue)> = vec![(0, &bool_val), (1, &string_val)]; // // list_store.set(&list_store.append(), &a); // }); // // if since_last_header < 2 { // // This is invalid, and should be vec![(0, &false), (1, &"AAA")] // // but this triggers the bug // let a: Vec<(u32, &dyn ToValue)> = vec![(0, &true), (1, &"AAA")]; // list_store.set(&list_store.append(), &a); // let b: Vec<(u32, &dyn ToValue)> = vec![(0, &false), (1, &"BBB")]; // list_store.set(&list_store.append(), &b); // } // // print_two_items_model(&list_store); // // popover_sort_general::(&popover, &tree_view, 1, 0); // } // } // // fn print_two_items_model(model: >k4::ListStore) { // let iter = model.iter_first().expect("Failed to get first iter"); // loop { // let bool_val = model.get::(&iter, 0); // let string_val = model.get::(&iter, 1); // println!("{bool_val} {string_val}"); // if !model.iter_next(&iter) { // break; // } // } // } } czkawka_gui-10.0.0/src/connect_things/connect_progress_window.rs000064400000000000000000000207271046102023000233170ustar 00000000000000use std::cell::RefCell; use std::collections::HashMap; use std::rc::Rc; use std::time::Duration; use crossbeam_channel::Receiver; use czkawka_core::common::model::ToolType; use czkawka_core::common::progress_data::{CurrentStage, ProgressData}; use glib::MainContext; use gtk4::ProgressBar; use gtk4::prelude::*; use humansize::{BINARY, format_size}; use crate::flg; use crate::gui_structs::gui_data::GuiData; use crate::localizer_core::generate_translation_hashmap; use crate::taskbar_progress::TaskbarProgress; use crate::taskbar_progress::tbp_flags::TBPF_INDETERMINATE; #[allow(clippy::too_many_arguments)] pub(crate) 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>) { let (current_items_checked, current_stage_items_to_check) = if item.bytes_to_check > 0 { (item.bytes_checked, item.bytes_to_check) } else { (item.entries_checked as u64, item.entries_to_check as u64) }; if item.entries_to_check != 0 { let all_stages = (item.current_stage_idx as f64 + current_items_checked as f64 / current_stage_items_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(current_items_checked as f64 / current_stage_items_to_check as f64); taskbar_state.borrow().set_progress_value( (item.current_stage_idx as u64) * current_stage_items_to_check + current_items_checked, current_stage_items_to_check * (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> { let mut v = vec![("file_checked", item.entries_checked.to_string()), ("all_files", item.entries_to_check.to_string())]; if item.bytes_to_check != 0 { v.push(("data_checked", format_size(item.bytes_checked, BINARY))); v.push(("all_data", format_size(item.bytes_to_check, BINARY))); } generate_translation_hashmap(v) } czkawka_gui-10.0.0/src/connect_things/connect_same_music_mode_changed.rs000064400000000000000000000075411046102023000246650ustar 00000000000000use czkawka_core::common::model::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(crate) 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-10.0.0/src/connect_things/connect_selection_of_directories.rs000064400000000000000000000321321046102023000251220ustar 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::{ColumnsExcludedDirectory, ColumnsIncludedDirectory, check_if_value_is_in_list_store, get_list_store}; use crate::notebook_enums::{NotebookUpperEnum, to_notebook_upper_enum}; pub(crate) 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 } NotebookUpperEnum::ItemsConfiguration => 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 text = text.trim().to_string(); #[cfg(target_family = "windows")] let text = normalize_windows_path(text).to_string_lossy().to_string(); let mut text = text; 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(crate) 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-10.0.0/src/connect_things/connect_settings.rs000064400000000000000000000317211046102023000217200ustar 00000000000000use std::collections::BTreeMap; use std::default::Default; use czkawka_core::common::cache::{load_cache_from_file_generalized_by_path, load_cache_from_file_generalized_by_size, save_cache_to_file_generalized}; use czkawka_core::common::config_cache_path::get_config_cache_path; use czkawka_core::common::model::HashType; use czkawka_core::helpers::messages::Messages; use czkawka_core::tools::duplicate::DuplicateEntry; use czkawka_core::tools::duplicate::core::get_duplicate_cache_file; use czkawka_core::tools::similar_images::core::get_similar_images_cache_file; use czkawka_core::tools::similar_videos::core::get_similar_videos_cache_file; use czkawka_core::tools::similar_videos::{DEFAULT_CROP_DETECT, DEFAULT_SKIP_FORWARD_AMOUNT, DEFAULT_VID_HASH_DURATION}; use gtk4::prelude::*; use gtk4::{Label, ResponseType, Window}; use image::imageops::FilterType; use image_hasher::HashAlg; use log::error; 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(crate) 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(config_cache_path) = get_config_cache_path() { if let Err(e) = open::that(&config_cache_path.cache_folder) { error!("Failed to open config folder \"{}\", reason {e}", config_cache_path.cache_folder.to_string_lossy()); }; } else { error!("Failed to get cache folder path"); } }); } // 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(config_cache_path) = get_config_cache_path() { if let Err(e) = open::that(&config_cache_path.config_folder) { error!("Failed to open config folder \"{}\", reason {e}", config_cache_path.config_folder.to_string_lossy()); }; } else { error!("Failed to get settings folder path"); } }); } // 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 file_name = get_duplicate_cache_file(type_of_hash, use_prehash); let (mut messages, loaded_items) = load_cache_from_file_generalized_by_size::(&file_name, 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(&file_name, &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 file_name = get_similar_images_cache_file(hash_size, hash_alg, image_filter); let (mut messages, loaded_items) = load_cache_from_file_generalized_by_path::(&file_name, true, &Default::default()); if let Some(cache_entries) = loaded_items { let save_messages = save_cache_to_file_generalized(&file_name, &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 file_name = get_similar_videos_cache_file(DEFAULT_SKIP_FORWARD_AMOUNT, DEFAULT_VID_HASH_DURATION, DEFAULT_CROP_DETECT); let (mut messages, loaded_items) = load_cache_from_file_generalized_by_path::(&file_name, true, &Default::default()); if let Some(cache_entries) = loaded_items { let save_messages = save_cache_to_file_generalized(&file_name, &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-10.0.0/src/connect_things/connect_show_hide_ui.rs000064400000000000000000000021521046102023000225220ustar 00000000000000use gtk4::prelude::*; use crate::gui_structs::gui_data::GuiData; pub(crate) 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-10.0.0/src/connect_things/connect_similar_image_size_change.rs000064400000000000000000000031251046102023000252160ustar 00000000000000use czkawka_core::tools::similar_images::SIMILAR_VALUES; use czkawka_core::tools::similar_images::core::get_string_from_similarity; use gtk4::prelude::*; use crate::gui_structs::gui_data::GuiData; use crate::help_combo_box::IMAGES_HASH_SIZE_COMBO_BOX; pub(crate) 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-10.0.0/src/connect_things/mod.rs000064400000000000000000000013131046102023000171200ustar 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-10.0.0/src/create_tree_view.rs000064400000000000000000000274001046102023000166550ustar 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(crate) 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(crate) 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(crate) 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(crate) 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(crate) 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(crate) 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(crate) 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(crate) 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(crate) 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(crate) 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(crate) 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(crate) 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(crate) 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-10.0.0/src/gui_structs/gui_about.rs000064400000000000000000000117661046102023000177020ustar 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(crate) 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", "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", "Andreas Gerstmayr", "AshesOfEther", "Caduser2020", "CalunVier", "Danny Kirkham", "Dariusz Niedoba", "Douman", "Elazar Fine", "Farmadupe", "Fr_Dae", "Gitoffthelawn", "Integral", "Ivan Habernal", "Jan Jurec", "Joey Babcock", "Jona", "Jonathan Hult", "Kian-Meng Ang", "Liru Wilkowski", "Meir Klemfner", "Mek101", "Michael Grigoryan", "Mitchel Stewart", "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", "freeducks-debug", "jann", "kamilek96", "kuskov", "leapwill", "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(crate) fn update_language(&self) { let mut comment_text: String = "2020 - 2025 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-10.0.0/src/gui_structs/gui_bottom_buttons.rs000064400000000000000000000210741046102023000216430ustar 00000000000000use gtk4::prelude::*; use gtk4::{GestureClick, Widget}; use crate::gui_structs::gui_data::CZK_ICON_SORT; use crate::help_functions::{BottomButtonsEnum, get_custom_label_from_widget, set_icon_of_button}; use crate::{ 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, flg, }; #[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(crate) 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(crate) 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; // TODO - use temporary files instead of project dirs 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-10.0.0/src/gui_structs/gui_compare_images.rs000064400000000000000000000072521046102023000215360ustar 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::{CZK_ICON_LEFT, CZK_ICON_RIGHT, flg}; #[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(crate) 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(crate) fn update_language(&self) { self.window_compare.set_title(Some(&flg!("window_compare_images"))); } } czkawka_gui-10.0.0/src/gui_structs/gui_data.rs000064400000000000000000000262571046102023000175020ustar 00000000000000use std::cell::RefCell; use std::collections::HashMap; use std::io::BufReader; use std::rc::Rc; use std::sync::Arc; use std::sync::atomic::AtomicBool; use czkawka_core::tools::bad_extensions::BadExtensions; use czkawka_core::tools::big_file::BigFile; use czkawka_core::tools::broken_files::BrokenFiles; use czkawka_core::tools::duplicate::DuplicateFinder; use czkawka_core::tools::empty_files::EmptyFiles; use czkawka_core::tools::empty_folder::EmptyFolder; use czkawka_core::tools::invalid_symlinks::InvalidSymlinks; use czkawka_core::tools::same_music::SameMusic; use czkawka_core::tools::similar_images::SimilarImages; use czkawka_core::tools::similar_videos::SimilarVideos; use czkawka_core::tools::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_flag: Arc, } 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)) .unwrap_or(Pixbuf::new(gdk4::gdk_pixbuf::Colorspace::Rgb, false, 8, 1, 1).expect("Crash is a lot of less likely than loading png file")); 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_flag = Arc::default(); 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_flag, } } pub(crate) 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-10.0.0/src/gui_structs/gui_header.rs000064400000000000000000000016721046102023000200130ustar 00000000000000use gtk4::prelude::*; use crate::help_functions::set_icon_of_button; use crate::{CZK_ICON_INFO, CZK_ICON_SETTINGS, flg}; #[derive(Clone)] pub struct GuiHeader { pub button_settings: gtk4::Button, pub button_app_info: gtk4::Button, } impl GuiHeader { pub(crate) 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(crate) 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-10.0.0/src/gui_structs/gui_main_notebook.rs000064400000000000000000001061001046102023000213770ustar 00000000000000use czkawka_core::common::model::CheckingMethod; use czkawka_core::localizer_core::{fnc_get_similarity_minimal, fnc_get_similarity_very_high}; use czkawka_core::tools::big_file::SearchMode; use czkawka_core::tools::similar_images::SIMILAR_VALUES; use czkawka_core::tools::similar_images::core::get_string_from_similarity; 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::{NUMBER_OF_NOTEBOOK_MAIN_TABS, NotebookMainEnum}; #[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(crate) 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(crate) 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(crate) 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::