diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 0efbfcc73..9a377b80d 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -142,11 +142,17 @@ jobs: token: ${{ secrets.PAT_REPOSITORY }} container_4_12: + needs: krokiet-compiled-on-windows runs-on: ubuntu-latest container: image: ghcr.io/mglolenstine/gtk4-cross:gtk-4.12 steps: - uses: actions/checkout@v6 + + - name: Download Krokiet (skia opengl) artifact + uses: actions/download-artifact@v7 + with: + name: krokiet-windows-on-windows-${{ github.sha }} - name: Install additional dependencies # gio is for the build script run: | @@ -211,6 +217,21 @@ jobs: mv libEGL.dll package/ mv libGLESv2.dll package/ + cp windows_krokiet_on_windows_skia_opengl.exe package/krokiet.exe + + { + echo '# Czkawka' + echo '' + echo 'This package includes the legacy GTK 4 GUI (czkawka_gui.exe), which is now deprecated.' + echo '' + echo 'The recommended successor is Krokiet.' + echo '' + echo '**krokiet.exe** (also included in this package) is a new application created by the author of Czkawka.' + echo 'It offers better performance, more features, improved Windows/macOS support compared to the legacy GTK GUI.' + echo '' + echo 'More information: https://github.com/qarmin/czkawka' + } > package/README.md + - name: Upload artifacts uses: actions/upload-artifact@v6 with: diff --git a/.gitignore b/.gitignore index 199e9d01b..926181a33 100644 --- a/.gitignore +++ b/.gitignore @@ -40,4 +40,7 @@ cedinia/android/app/src/main/jniLibs/ cedinia/android/.gradle/ cedinia/docs *.aab -*.gz \ No newline at end of file +*.gz +/pyproject.toml +uv.lock +i18n \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 000000000..18031bdfe --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,244 @@ +# Czkawka – Codebase Guide + +## Language + +All code, comments, commit messages, and documentation must be written in **English**. + +--- + +## Comments + +Keep comments minimal. Code should be self-documenting through clear naming. Add a comment only +when the _why_ is not obvious from reading the code – algorithmic choices, non-obvious constraints, +workarounds for external library bugs, etc. Do not restate what the code already says. + +--- + +## Panics and `expect()` + +`expect()` (and `unwrap()` but only in tests) are acceptable and **preferred** over silently ignoring a failure when +a failed call would leave the program in an inconsistent or corrupted state. This is visible +throughout Krokiet's callback code: the Slint weak reference is upgraded with `expect()` because +if the window is already gone there is nothing meaningful to do except crash. + +Rules of thumb: +- Use `expect()` for logic invariants – things that _cannot_ fail unless there is a programming + error (e.g. "failed to upgrade MainWindow weak ref in callback that was just registered"). +- Use proper `Result`/`Option` propagation for _expected_ failures (I/O errors, missing files, + user-cancellable operations). +- Never silently swallow errors with `let _ = ...` unless the failure is genuinely irrelevant. +- Prefer `unwrap_or_default()` / `unwrap_or_else()` over `unwrap()` when a sensible fallback + exists. + +--- + +## Project Goals + +Two properties are non-negotiable across every sub-project: + +1. **Performance first** – scanning and file operations must be fast. Parallelism via `rayon`, + efficient algorithms (e.g. perceptual hashing, blake3), and careful memory use are the norm. + Avoid unnecessary allocations or copies in hot paths. + +2. **Minimal non-Rust dependencies** – every additional C/C++ library (or any other non-Rust + language) makes cross-compilation harder, narrows the set of supported targets, and increases + build complexity for contributors. Prefer pure-Rust crates. If a native library is truly + necessary (e.g. `libheif`, `libraw`), gate it behind an optional Cargo feature so the default + build stays fully Rust. + +--- + +## `just fix` – baseline quality gate + +Running `just fix` must pass before any merge request. It runs, in order: + +1. `ruff format` – Python code formatting. +2. `mypy misc --strict` – static type checking for all scripts in `misc/`. +3. `bash misc/run_checks.sh` – project-specific checks: + - `delete_unused_krokiet_slint_imports.py` for krokiet and cedinia + - `find_unused_fluent_translations.py` for all four projects + - `find_unused_slint_translations.py` for krokiet and cedinia + - `find_unused_callbacks.py` for krokiet and cedinia + - `find_unused_settings_properties.py` for krokiet and cedinia +4. `cargo +nightly fmt` + `cargo fmt` – Rust formatting. +5. `cargo clippy --fix` – Rust linting (two passes: with and without default features). + +If `just fix` produces any output on stderr or exits non-zero the code is not ready for review. + +--- + +## Workspace Structure + +``` +czkawka/ +├── czkawka_core/ # Scanning logic – shared library used by all frontends +├── czkawka_cli/ # Command-line interface +├── czkawka_gui/ # Legacy GTK 4 GUI (maintenance mode only) +├── krokiet/ # Primary desktop GUI – Slint-based +├── cedinia/ # Android / mobile GUI – Slint-based +└── misc/ # Scripts: AI translation, validation, benchmarks, CI helpers +``` + +Cargo workspace resolver v3, minimum Rust 1.92.0, edition 2024 throughout. + +--- + +## czkawka_core + +The shared scanning engine. Every frontend depends on it; it has no UI dependency. + +**Key modules:** +- `common/` – `CommonToolData` (settings, stop-flag, progress sender), `DirTraversal`, cache, + extension filtering, path helpers, progress types. +- `tools/` – One sub-module per scanning tool: + `duplicate`, `empty_folder`, `empty_files`, `big_file`, `similar_images`, `similar_videos`, + `same_music`, `broken_files`, `bad_extensions`, `bad_names`, `invalid_symlinks`, `temporary`, + `exif_remover`, `video_optimizer`. +- `localizer_core.rs` – Fluent translation loader for Rust-side messages. + +Each tool implements the `CommonData` trait (shared settings access) and `PrintResults` (CSV/JSON +export). The tool struct is constructed, configured, then its `find_*()` method is called in a +worker thread. Progress is reported over a `crossbeam` channel; a stop `AtomicBool` is polled to +support cancellation. + +--- + +## krokiet + +The primary desktop GUI. Built with [Slint](https://slint.dev/) (GPL-3.0). The UI is declared +in `ui/*.slint`; Rust connects callbacks and drives the Slint model. + +**Build:** `slint_build` compiles `.slint` sources at build time; `slint::include_modules!()` +exposes the generated types. + +**Entry point:** `src/main.rs` +- Loads settings, creates `MainWindow`, wires up all callbacks, starts the event loop. + +**Callback pattern:** +```rust +let weak = app.as_weak(); +app.global::().on_some_action(move || { + let app = weak.upgrade().expect("MainWindow dropped while callback is still live"); + // ... +}); +``` +Each feature area lives in a dedicated `connect_*.rs` file (e.g. `connect_scan.rs`, +`connect_compare.rs`, `connect_delete_button.rs`). + +**`SharedModels`** (`src/shared_models.rs`): +An `Arc>` holds the last scan result and parameters of scan of each tool. It is passed to every +`connect_*` function that needs to access or mutate scan state from a background thread. + +**Model layer:** +- The Slint UI is driven by `ModelRc>`. +- `SingleMainListModel` carries `val_str: [string]` and `val_int: [int]` vectors – a flat, + index-based row representation. +- Column indices for each tool are defined as constants in `src/common.rs` + (`StrDataSimilarImages`, `StrDataDuplicates`, …). + +**Translation:** `flk!("key")` / `flk!("key", var = value)` macros defined in +`src/localizer_krokiet.rs`. Language files in `i18n//krokiet.ftl`. + +--- + +## cedinia + +The Android (and secondary desktop) GUI. Architecture mirrors Krokiet but adapts to mobile +constraints. Compiled as `cdylib` for Android (loaded via `android-activity`). + +**Entry points:** +- Android: `#[no_mangle] pub fn android_main(app: AndroidApp)` in `src/lib.rs` +- Desktop: `fn run_app()` in `src/app.rs` + +**Android-specific:** +- File picker uses JNI to call into a Kotlin/Java helper embedded via `include_bytes!` (DEX). +- Storage permissions requested at runtime; `AppState.storage_permission_granted` gates scanning. +- System insets (`inset_top`, `inset_bottom`) plumbed through to Slint for edge-to-edge layout. +- `android_logger` routes Rust log output to logcat. + +**Differences from Krokiet:** +- No video tools (ffmpeg not available on Android). +- Touch-optimised UI (`cedinia/ui/`); momentum-scroll views, bottom sheets, FAB. +- `flc!` macro (cedinia-specific) in `src/localizer_cedinia.rs`. + +**Translation:** `flc!("key")` macro; language files in `cedinia/i18n//cedinia.ftl`. + +--- + +## czkawka_cli + +Thin wrapper around `czkawka_core`. Uses `clap` (derive API) for argument parsing and `indicatif` +for progress bars. No GUI code. Results printed via the tool's `PrintResults` trait. + +--- + +## czkawka_gui + +Legacy GTK 4 GUI. **Maintenance mode only** – no new features are added. Bug-fixes that +keep it compatible with core API changes are accepted. + +--- + +## misc/ + +- `ai_translate/translate.py` – AI-powered batch translation into all supported languages. +- `ai_translate/validate_translations.py` – Checks placeholder consistency across translations. + Pass `--fix` to automatically remove invalid entries. +- `find_unused_fluent_translations.py` / `find_unused_slint_translations.py` – Dead-code + detection for translation keys. +- `gen_cedinia_licenses.py` – Generates `THIRD_PARTY_LICENSES.txt` from Cargo metadata. + +--- + +## i18n + +All user-visible strings use [Fluent](https://projectfluent.org/) (`.ftl` files). + +| Project | Macro | File pattern | +|--------------|--------|---------------------------------------------| +| krokiet | `flk!` | `krokiet/i18n//krokiet.ftl` | +| cedinia | `flc!` | `cedinia/i18n//cedinia.ftl` | +| czkawka_core | `flc!` | `czkawka_core/i18n//czkawka_core.ftl` | +| czkawka_gui | `flg!` | `czkawka_gui/i18n//czkawka_gui.ftl` | + +English is the source/fallback language. All other locales are AI-translated and then validated. + +--- + +## Slint UI conventions + +- **Hidden Text elements for width measurement** – where a layout element must adapt its width to + translated label text, add off-screen `Text` instances (`x: -10000px; y: -10000px; height: 0`) + and compute `preferred-width` at runtime (see `LeftSidePanel`, `CompareInfoBar`). +- **Enums over strings** – UI state that takes a fixed set of values should use a Slint `enum`, + not a `string` (e.g. `ConfirmPopupAction`, `ActiveTool`, `ScanState`). +- **Global state** – Application-wide state lives in Slint `global` blocks (`GuiState`, + `AppState`, `Settings`, `Translations`, …). Rust reads/writes via `app.global::()`. + +--- + +## Build profiles (Cargo.toml) + +| Profile | Purpose | +|----------------|----------------------------------------------------------------------| +| `release` | Standard release | +| `fast_release` | Incremental, stripped – fast iteration | +| `rdebug` | Release + full debug symbols (profiling) | +| `fastest` | Max opt, LTO, panic=abort – mostly benchmarks/poc how fast it can be | +| `fastci` | Small binary, fast CI builds | + +--- + +## justfile quick reference + +``` +just run krokiet # debug run +just runr krokiet # fast_release run +just fix # format + clippy + Python checks +just translate # AI-translate all projects +just validate_translations [--fix] +just pack_translations # create i18n_translations.zip for Crowdin +just unpack_translations +just android # build + install + launch on device +just androidr # release variant +``` diff --git a/Cargo.lock b/Cargo.lock index 82536866d..ea0eb9629 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -153,7 +153,7 @@ dependencies = [ "cc", "cesu8", "jni 0.21.1", - "jni-sys 0.3.0", + "jni-sys 0.3.1", "libc", "log", "ndk 0.8.0", @@ -165,23 +165,21 @@ dependencies = [ [[package]] name = "android-activity" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" +checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd" dependencies = [ "android-properties", "bitflags 2.11.0", "cc", - "cesu8", - "jni 0.21.1", - "jni-sys 0.3.0", + "jni 0.22.4", "libc", "log", "ndk 0.9.0", "ndk-context", "ndk-sys 0.6.0+11769913", "num_enum", - "thiserror 1.0.69", + "thiserror 2.0.18", ] [[package]] @@ -315,9 +313,9 @@ checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" [[package]] name = "arc-swap" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9f3647c145568cec02c42054e07bdf9a5a698e15b466fb2341bfc393cd24aa5" +checksum = "a07d1f37ff60921c83bdfc7407723bdefe89b44b98a9b772f225c8f9d67141a6" dependencies = [ "rustversion", ] @@ -371,9 +369,9 @@ dependencies = [ [[package]] name = "ashpd" -version = "0.13.7" +version = "0.13.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "313dc617cf7b7e5d58021f999756898e60bdddd64eab2bc2f67909659e3ce5f9" +checksum = "13bdf0fd848239dcd5e64eeeee35dbc00378ebcc6f3aa4ead0a305eec83d0cfb" dependencies = [ "enumflags2", "futures-util", @@ -659,7 +657,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "rustc-hash 2.1.1", + "rustc-hash 2.1.2", "shlex", "syn 2.0.117", ] @@ -742,16 +740,16 @@ dependencies = [ [[package]] name = "blake3" -version = "1.8.3" +version = "1.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2468ef7d57b3fb7e16b576e8377cdbde2320c60e1491e961d11da40fc4f02a2d" +checksum = "4d2d5991425dfd0785aed03aedcf0b321d61975c9b5b3689c774a2610ae0b51e" dependencies = [ "arrayref", "arrayvec", "cc", "cfg-if", "constant_time_eq", - "cpufeatures 0.2.17", + "cpufeatures 0.3.0", ] [[package]] @@ -811,10 +809,11 @@ dependencies = [ [[package]] name = "borsh" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1da5ab77c1437701eeff7c88d968729e7766172279eab0676857b3d63af7a6f" +checksum = "cfd1e3f8955a5d7de9fab72fc8373fade9fb8a703968cb200ae3dc6cf08e185a" dependencies = [ + "bytes", "cfg_aliases", ] @@ -1007,9 +1006,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.57" +version = "1.2.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a0dd1ca384932ff3641c8718a02769f1698e7563dc6974ffd03346116310423" +checksum = "e1e928d4b69e3077709075a938a05ffbedfa53a84c8f766efbf8220bb1ff60e1" dependencies = [ "find-msvc-tools", "jobserver", @@ -1021,12 +1020,11 @@ dependencies = [ name = "cedinia" version = "11.0.1" dependencies = [ - "android-activity 0.6.0", + "android-activity 0.6.1", "android-build", "android_logger", "crossbeam-channel", "czkawka_core", - "fast_image_resize 6.0.0", "filetime", "humansize", "i18n-embed", @@ -1288,8 +1286,7 @@ dependencies = [ [[package]] name = "const-field-offset" version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fcde4ca1211b5a94b573083c472ee19e86b19a441913f66e1cc5c41daf0255" +source = "git+https://github.com/slint-ui/slint.git?rev=c24077780bc15e7c334bae1efa0be0bb5943951c#c24077780bc15e7c334bae1efa0be0bb5943951c" dependencies = [ "const-field-offset-macro", "field-offset", @@ -1298,8 +1295,7 @@ dependencies = [ [[package]] name = "const-field-offset-macro" version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5387f5bbc9e9e6c96436ea125afa12614cebf8ac67f49abc08c1e7a891466c90" +source = "git+https://github.com/slint-ui/slint.git?rev=c24077780bc15e7c334bae1efa0be0bb5943951c#c24077780bc15e7c334bae1efa0be0bb5943951c" dependencies = [ "proc-macro2", "quote", @@ -1710,7 +1706,6 @@ dependencies = [ "crossbeam-channel", "czkawka_core", "directories-next", - "dunce", "fs_extra", "fun_time", "gdk4", @@ -1722,7 +1717,6 @@ dependencies = [ "image", "itertools 0.14.0", "log", - "once_cell", "open", "rand 0.10.0", "rayon", @@ -1957,17 +1951,16 @@ checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" [[package]] name = "drm" -version = "0.14.2" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5b71449a23fe79542d6527ca572844b2016abf9573c49e43144d546b1735aec" +checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" dependencies = [ "bitflags 2.11.0", "bytemuck", - "bytemuck_derive", "drm-ffi", "drm-fourcc", "libc", - "rustix 1.1.4", + "rustix 0.38.44", ] [[package]] @@ -2148,9 +2141,9 @@ checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" [[package]] name = "euclid" -version = "0.22.13" +version = "0.22.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df61bf483e837f88d5c2291dcf55c67be7e676b3a51acc48db3a7b163b91ed63" +checksum = "f1a05365e3b1c6d1650318537c7460c6923f1abdd272ad6842baa2b509957a06" dependencies = [ "num-traits", ] @@ -2288,13 +2281,13 @@ dependencies = [ "bytemuck", "fnv", "glow", - "image", "imgref", "itertools 0.14.0", "log", "rgb", "slotmap", - "ttf-parser 0.25.1", + "swash", + "ttf-parser", "wasm-bindgen", "web-sys", "wgpu", @@ -2419,7 +2412,7 @@ dependencies = [ "fluent-syntax", "intl-memoizer", "intl_pluralrules", - "rustc-hash 2.1.1", + "rustc-hash 2.1.2", "self_cell", "smallvec", "unic-langid", @@ -2471,6 +2464,15 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "font-types" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73829a7b5c91198af28a99159b7ae4afbb252fb906159ff7f189f3a2ceaa3df2" +dependencies = [ + "bytemuck", +] + [[package]] name = "fontdb" version = "0.23.0" @@ -2480,18 +2482,7 @@ dependencies = [ "log", "slotmap", "tinyvec", - "ttf-parser 0.25.1", -] - -[[package]] -name = "fontdue" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e57e16b3fe8ff4364c0661fdaac543fb38b29ea9bc9c2f45612d90adf931d2b" -dependencies = [ - "hashbrown 0.15.5", - "rayon", - "ttf-parser 0.21.1", + "ttf-parser", ] [[package]] @@ -2509,7 +2500,7 @@ dependencies = [ "objc2-core-foundation", "objc2-core-text", "objc2-foundation 0.3.2", - "read-fonts", + "read-fonts 0.35.0", "roxmltree", "smallvec", "windows 0.58.0", @@ -3113,6 +3104,12 @@ dependencies = [ "system-deps", ] +[[package]] +name = "grid" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36119f3a540b086b4e436bb2b588cf98a68863470e0e880f4d0842f112a3183a" + [[package]] name = "gsk4" version = "0.11.1" @@ -3236,7 +3233,7 @@ dependencies = [ "bitflags 2.11.0", "bytemuck", "core_maths", - "read-fonts", + "read-fonts 0.35.0", "smallvec", ] @@ -3261,10 +3258,7 @@ version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ - "allocator-api2", - "equivalent", "foldhash 0.1.5", - "rayon", ] [[package]] @@ -3349,12 +3343,11 @@ dependencies = [ [[package]] name = "i-slint-backend-android-activity" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e96c2ccc34adf9194dade4093f1a191a241d33d8da06765c15cf67e0d28bbcc9" +version = "1.16.0" +source = "git+https://github.com/slint-ui/slint.git?rev=c24077780bc15e7c334bae1efa0be0bb5943951c#c24077780bc15e7c334bae1efa0be0bb5943951c" dependencies = [ "android-activity 0.5.2", - "android-activity 0.6.0", + "android-activity 0.6.1", "android-build", "i-slint-core", "i-slint-renderer-skia", @@ -3365,9 +3358,8 @@ dependencies = [ [[package]] name = "i-slint-backend-linuxkms" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b8827952ecfbbf76c8cb5bc3388ca9124c34f2b4fe5dffcfe57800d2a484885" +version = "1.16.0" +source = "git+https://github.com/slint-ui/slint.git?rev=c24077780bc15e7c334bae1efa0be0bb5943951c#c24077780bc15e7c334bae1efa0be0bb5943951c" dependencies = [ "bytemuck", "calloop 0.14.4", @@ -3389,9 +3381,8 @@ dependencies = [ [[package]] name = "i-slint-backend-selector" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce5a7e591a7257096e1f3da1bbb9ad6a140c307d0eee74f008a0b412fdb20dec" +version = "1.16.0" +source = "git+https://github.com/slint-ui/slint.git?rev=c24077780bc15e7c334bae1efa0be0bb5943951c#c24077780bc15e7c334bae1efa0be0bb5943951c" dependencies = [ "cfg-if", "i-slint-backend-android-activity", @@ -3406,9 +3397,8 @@ dependencies = [ [[package]] name = "i-slint-backend-winit" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbbf4789191740f939c9563b8850379122d7b5c1ceb09f9297b50ad53e408787" +version = "1.16.0" +source = "git+https://github.com/slint-ui/slint.git?rev=c24077780bc15e7c334bae1efa0be0bb5943951c#c24077780bc15e7c334bae1efa0be0bb5943951c" dependencies = [ "block2 0.6.2", "bytemuck", @@ -3450,24 +3440,24 @@ dependencies = [ [[package]] name = "i-slint-common" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7659797fd28d4df3ed275ff95bf730bdf4a88d253f07e1ee8d0032d70138c3a" +version = "1.16.0" +source = "git+https://github.com/slint-ui/slint.git?rev=c24077780bc15e7c334bae1efa0be0bb5943951c#c24077780bc15e7c334bae1efa0be0bb5943951c" dependencies = [ "fontique", - "ttf-parser 0.25.1", + "htmlparser", + "pulldown-cmark", + "thiserror 2.0.18", + "ttf-parser", ] [[package]] name = "i-slint-compiler" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a6f358d0d5389869d67cd6ab6f5acf98fe31827264a696593e9687213cff682" +version = "1.16.0" +source = "git+https://github.com/slint-ui/slint.git?rev=c24077780bc15e7c334bae1efa0be0bb5943951c#c24077780bc15e7c334bae1efa0be0bb5943951c" dependencies = [ "annotate-snippets", "by_address", "derive_more", - "fontdue", "i-slint-common", "image", "itertools 0.14.0", @@ -3481,17 +3471,18 @@ dependencies = [ "resvg 0.46.0", "rowan", "rspolib", + "skrifa 0.37.0", "smol_str 0.3.6", "strum", + "swash", "typed-index-collections", "url", ] [[package]] name = "i-slint-core" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a95591ff85f8e2ff11c8d26ea8429768c2b77866e0c7e7fd49348f23ad108b5c" +version = "1.16.0" +source = "git+https://github.com/slint-ui/slint.git?rev=c24077780bc15e7c334bae1efa0be0bb5943951c#c24077780bc15e7c334bae1efa0be0bb5943951c" dependencies = [ "auto_enums", "bitflags 2.11.0", @@ -3501,7 +3492,6 @@ dependencies = [ "const-field-offset", "derive_more", "euclid", - "htmlparser", "i-slint-common", "i-slint-core-macros", "image", @@ -3515,17 +3505,17 @@ dependencies = [ "pin-project", "pin-weak", "portable-atomic", - "pulldown-cmark", "raw-window-handle", "resvg 0.46.0", "rgb", "scoped-tls-hkt", "scopeguard", - "skrifa", + "skrifa 0.37.0", "slab", "strum", + "swash", "sys-locale", - "thiserror 2.0.18", + "taffy", "unicode-linebreak", "unicode-script", "unicode-segmentation", @@ -3538,9 +3528,8 @@ dependencies = [ [[package]] name = "i-slint-core-macros" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cc5f2f71682787dd5c6299555c0de635009eb269bbc54d6198e0d225b69fae4" +version = "1.16.0" +source = "git+https://github.com/slint-ui/slint.git?rev=c24077780bc15e7c334bae1efa0be0bb5943951c#c24077780bc15e7c334bae1efa0be0bb5943951c" dependencies = [ "quote", "serde_json", @@ -3549,9 +3538,8 @@ dependencies = [ [[package]] name = "i-slint-renderer-femtovg" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb6eccda447999bc6222988500b841b64c953988986af182334e7ba9a30f0edd" +version = "1.16.0" +source = "git+https://github.com/slint-ui/slint.git?rev=c24077780bc15e7c334bae1efa0be0bb5943951c#c24077780bc15e7c334bae1efa0be0bb5943951c" dependencies = [ "cfg-if", "const-field-offset", @@ -3565,7 +3553,6 @@ dependencies = [ "lyon_path", "pin-weak", "rgb", - "ttf-parser 0.25.1", "wasm-bindgen", "web-sys", "wgpu", @@ -3573,14 +3560,14 @@ dependencies = [ [[package]] name = "i-slint-renderer-skia" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64546232c0370f291e65fc92a4f4fc777ea78d5f48467873cb968b1de52e9ab" +version = "1.16.0" +source = "git+https://github.com/slint-ui/slint.git?rev=c24077780bc15e7c334bae1efa0be0bb5943951c#c24077780bc15e7c334bae1efa0be0bb5943951c" dependencies = [ "ash", "bytemuck", "cfg-if", "cfg_aliases", + "clru", "const-field-offset", "derive_more", "foreign-types", @@ -3600,7 +3587,7 @@ dependencies = [ "pin-weak", "raw-window-handle", "raw-window-metal", - "read-fonts", + "read-fonts 0.35.0", "scoped-tls-hkt", "skia-safe", "softbuffer", @@ -3616,21 +3603,20 @@ dependencies = [ [[package]] name = "i-slint-renderer-software" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a59be6c34935c4f8e41aa67a63518d5c59219c8eeb1d07af420bed8334fa31d7" +version = "1.16.0" +source = "git+https://github.com/slint-ui/slint.git?rev=c24077780bc15e7c334bae1efa0be0bb5943951c#c24077780bc15e7c334bae1efa0be0bb5943951c" dependencies = [ "bytemuck", "clru", "derive_more", "euclid", - "fontdue", "i-slint-common", "i-slint-core", "integer-sqrt", "lyon_path", "num-traits", - "skrifa", + "skrifa 0.37.0", + "swash", "zeno", ] @@ -4097,9 +4083,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "java-locator" @@ -4161,7 +4147,7 @@ dependencies = [ "cfg-if", "combine", "java-locator", - "jni-sys 0.3.0", + "jni-sys 0.3.1", "libloading 0.7.4", "log", "thiserror 1.0.69", @@ -4201,9 +4187,12 @@ dependencies = [ [[package]] name = "jni-sys" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] [[package]] name = "jni-sys" @@ -4236,10 +4225,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.91" +version = "0.3.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" +checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9" dependencies = [ + "cfg-if", + "futures-util", "once_cell", "wasm-bindgen", ] @@ -4457,6 +4448,7 @@ name = "krokiet" version = "11.0.1" dependencies = [ "chrono", + "copypasta", "crossbeam-channel", "czkawka_core", "fontique", @@ -4641,9 +4633,9 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a" +checksum = "7ddbf48fd451246b1f8c2610bd3b4ac0cc6e149d89832867093ab69a17194f08" dependencies = [ "bitflags 2.11.0", "libc", @@ -4814,7 +4806,7 @@ dependencies = [ "stringprep", "thiserror 2.0.18", "time", - "ttf-parser 0.25.1", + "ttf-parser", "weezl", ] @@ -5013,9 +5005,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" dependencies = [ "libc", "wasi", @@ -5156,7 +5148,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" dependencies = [ "bitflags 2.11.0", - "jni-sys 0.3.0", + "jni-sys 0.3.1", "log", "ndk-sys 0.5.0+25.2.9519653", "num_enum", @@ -5170,7 +5162,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ "bitflags 2.11.0", - "jni-sys 0.3.0", + "jni-sys 0.3.1", "log", "ndk-sys 0.6.0+11769913", "num_enum", @@ -5190,7 +5182,7 @@ version = "0.5.0+25.2.9519653" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" dependencies = [ - "jni-sys 0.3.0", + "jni-sys 0.3.1", ] [[package]] @@ -5199,7 +5191,7 @@ version = "0.6.0+11769913" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" dependencies = [ - "jni-sys 0.3.0", + "jni-sys 0.3.1", ] [[package]] @@ -5332,9 +5324,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" +checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" [[package]] name = "num-derive" @@ -5944,9 +5936,9 @@ dependencies = [ [[package]] name = "ordered-float" -version = "5.1.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4779c6901a562440c3786d08192c6fbda7c1c2060edd10006b05ee35d10f2d" +checksum = "b7d950ca161dc355eaf28f82b11345ed76c6e1f6eb1f4f4479e0323b9e2fbd0e" dependencies = [ "num-traits", ] @@ -5982,7 +5974,7 @@ version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b" dependencies = [ - "ttf-parser 0.25.1", + "ttf-parser", ] [[package]] @@ -6058,7 +6050,7 @@ dependencies = [ "harfrust", "hashbrown 0.16.1", "linebender_resource_handle", - "skrifa", + "skrifa 0.37.0", "swash", ] @@ -6282,7 +6274,7 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.25.4+spec-1.1.0", + "toml_edit 0.25.9+spec-1.1.0", ] [[package]] @@ -6337,9 +6329,9 @@ dependencies = [ [[package]] name = "pulldown-cmark" -version = "0.13.1" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c41efbf8f90ac44de7f3a868f0867851d261b56291732d0cbf7cceaaeb55a6" +checksum = "7c3a14896dfa883796f1cb410461aef38810ea05f2b2c33c5aded3649095fdad" dependencies = [ "bitflags 2.11.0", "getopts", @@ -6654,7 +6646,17 @@ checksum = "6717cf23b488adf64b9d711329542ba34de147df262370221940dfabc2c91358" dependencies = [ "bytemuck", "core_maths", - "font-types", + "font-types 0.10.1", +] + +[[package]] +name = "read-fonts" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b634fabf032fab15307ffd272149b622260f55974d9fad689292a5d33df02e5" +dependencies = [ + "bytemuck", + "font-types 0.11.1", ] [[package]] @@ -6916,9 +6918,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" [[package]] name = "rustc_version" @@ -7005,7 +7007,7 @@ dependencies = [ "core_maths", "log", "smallvec", - "ttf-parser 0.25.1", + "ttf-parser", "unicode-bidi-mirroring", "unicode-ccc", "unicode-properties", @@ -7149,9 +7151,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.0.4" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" dependencies = [ "serde_core", ] @@ -7209,9 +7211,9 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" +checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" [[package]] name = "simd_cesu8" @@ -7288,7 +7290,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c31071dedf532758ecf3fed987cdb4bd9509f900e026ab684b4ecb81ea49841" dependencies = [ "bytemuck", - "read-fonts", + "read-fonts 0.35.0", +] + +[[package]] +name = "skrifa" +version = "0.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fbdfe3d2475fbd7ddd1f3e5cf8288a30eb3e5f95832829570cd88115a7434ac" +dependencies = [ + "bytemuck", + "read-fonts 0.37.0", ] [[package]] @@ -7305,9 +7317,8 @@ checksum = "9db491c0d4152a069911a0fbdaca959691bf0b9d7110d98a7ed1c8e59b79ab30" [[package]] name = "slint" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d25b87d458205e79efb30545cae083aec2ccb1b192c46a55ae6d54403cdacb33" +version = "1.16.0" +source = "git+https://github.com/slint-ui/slint.git?rev=c24077780bc15e7c334bae1efa0be0bb5943951c#c24077780bc15e7c334bae1efa0be0bb5943951c" dependencies = [ "const-field-offset", "i-slint-backend-android-activity", @@ -7327,9 +7338,8 @@ dependencies = [ [[package]] name = "slint-build" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "064ef470cc8ab046319db94d0727f080fbd05322d07d774eb6de607d97defb8d" +version = "1.16.0" +source = "git+https://github.com/slint-ui/slint.git?rev=c24077780bc15e7c334bae1efa0be0bb5943951c#c24077780bc15e7c334bae1efa0be0bb5943951c" dependencies = [ "derive_more", "fontique", @@ -7340,9 +7350,8 @@ dependencies = [ [[package]] name = "slint-macros" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ecc09bbc42c780d5b7ed7d41f7573dfd67343e11cdac27c07b88a8f933958e6" +version = "1.16.0" +source = "git+https://github.com/slint-ui/slint.git?rev=c24077780bc15e7c334bae1efa0be0bb5943951c#c24077780bc15e7c334bae1efa0be0bb5943951c" dependencies = [ "i-slint-compiler", "proc-macro2", @@ -7617,11 +7626,11 @@ dependencies = [ [[package]] name = "swash" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47846491253e976bdd07d0f9cc24b7daf24720d11309302ccbbc6e6b6e53550a" +checksum = "842f3cd369c2ba38966204f983eaa5e54a8e84a7d7159ed36ade2b6c335aae64" dependencies = [ - "skrifa", + "skrifa 0.40.0", "yazi", "zeno", ] @@ -7879,6 +7888,18 @@ dependencies = [ "version-compare", ] +[[package]] +name = "taffy" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab4f4d046dd956a47a7e1a2947083d7ac3e6aa3cfaaead36173ceaa5ab11878c" +dependencies = [ + "arrayvec", + "grid", + "serde", + "slotmap", +] + [[package]] name = "tap" version = "1.0.1" @@ -7887,9 +7908,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tar" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" +checksum = "22692a6476a21fa75fdfc11d452fda482af402c008cdbaf3476414e122040973" dependencies = [ "filetime", "libc", @@ -8191,11 +8212,11 @@ checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" dependencies = [ "indexmap", "serde_core", - "serde_spanned 1.0.4", + "serde_spanned 1.1.1", "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "toml_writer", - "winnow", + "winnow 0.7.15", ] [[package]] @@ -8218,9 +8239,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "1.0.0+spec-1.1.0" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32c2555c699578a4f59f0cc68e5116c8d7cabbd45e1409b989d4be085b53f13e" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" dependencies = [ "serde_core", ] @@ -8236,7 +8257,7 @@ dependencies = [ "serde_spanned 0.6.9", "toml_datetime 0.6.11", "toml_write", - "winnow", + "winnow 0.7.15", ] [[package]] @@ -8249,28 +8270,28 @@ dependencies = [ "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "toml_writer", - "winnow", + "winnow 0.7.15", ] [[package]] name = "toml_edit" -version = "0.25.4+spec-1.1.0" +version = "0.25.9+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7193cbd0ce53dc966037f54351dbbcf0d5a642c7f0038c382ef9e677ce8c13f2" +checksum = "da053d28fe57e2c9d21b48261e14e7b4c8b670b54d2c684847b91feaf4c7dac5" dependencies = [ "indexmap", - "toml_datetime 1.0.0+spec-1.1.0", + "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", - "winnow", + "winnow 1.0.1", ] [[package]] name = "toml_parser" -version = "1.0.9+spec-1.1.0" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" +checksum = "39ca317ebc49f06bd748bfba29533eac9485569dc9bf80b849024b025e814fb9" dependencies = [ - "winnow", + "winnow 1.0.1", ] [[package]] @@ -8281,9 +8302,9 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "toml_writer" -version = "1.0.6+spec-1.1.0" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" +checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" [[package]] name = "tracing" @@ -8351,12 +8372,6 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622b09ce2fe2df4618636fb92176d205662f59803f39e70d1c333393082de96c" -[[package]] -name = "ttf-parser" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8" - [[package]] name = "ttf-parser" version = "0.25.1" @@ -8372,7 +8387,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" dependencies = [ - "rustc-hash 2.1.1", + "rustc-hash 2.1.2", ] [[package]] @@ -8504,9 +8519,9 @@ checksum = "383ad40bb927465ec0ce7720e033cb4ca06912855fc35db31b5755d0de75b1ee" [[package]] name = "unicode-segmentation" -version = "1.12.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" [[package]] name = "unicode-vo" @@ -8619,9 +8634,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.22.0" +version = "1.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37" +checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9" dependencies = [ "getrandom 0.4.2", "js-sys", @@ -8704,8 +8719,7 @@ dependencies = [ [[package]] name = "vtable" version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "753be81c38dff787d177b5939af1fa16f72f0d0d21a6b7d74ae56e29cd26f2a6" +source = "git+https://github.com/slint-ui/slint.git?rev=c24077780bc15e7c334bae1efa0be0bb5943951c#c24077780bc15e7c334bae1efa0be0bb5943951c" dependencies = [ "const-field-offset", "portable-atomic", @@ -8716,8 +8730,7 @@ dependencies = [ [[package]] name = "vtable-macro" version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cfcf6171aa2b0f85718ca5888ca32f6edf61d1849f8e4b3786ad890e5b68f68" +source = "git+https://github.com/slint-ui/slint.git?rev=c24077780bc15e7c334bae1efa0be0bb5943951c#c24077780bc15e7c334bae1efa0be0bb5943951c" dependencies = [ "proc-macro2", "quote", @@ -8789,9 +8802,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.114" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" +checksum = "0551fc1bb415591e3372d0bc4780db7e587d84e2a7e79da121051c5c4b89d0b0" dependencies = [ "cfg-if", "once_cell", @@ -8802,23 +8815,19 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.64" +version = "0.4.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9c5522b3a28661442748e09d40924dfb9ca614b21c00d3fd135720e48b67db8" +checksum = "03623de6905b7206edd0a75f69f747f134b7f0a2323392d664448bf2d3c5d87e" dependencies = [ - "cfg-if", - "futures-util", "js-sys", - "once_cell", "wasm-bindgen", - "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.114" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" +checksum = "7fbdf9a35adf44786aecd5ff89b4563a90325f9da0923236f6104e603c7e86be" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -8826,9 +8835,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.114" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" +checksum = "dca9693ef2bab6d4e6707234500350d8dad079eb508dca05530c85dc3a529ff2" dependencies = [ "bumpalo", "proc-macro2", @@ -8839,9 +8848,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.114" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" +checksum = "39129a682a6d2d841b6c429d0c51e5cb0ed1a03829d8b3d1e69a011e62cb3d3b" dependencies = [ "unicode-ident", ] @@ -8882,9 +8891,9 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa75f400b7f719bcd68b3f47cd939ba654cedeef690f486db71331eec4c6a406" +checksum = "2857dd20b54e916ec7253b3d6b4d5c4d7d4ca2c33c2e11c6c76a99bd8744755d" dependencies = [ "cc", "downcast-rs", @@ -8896,9 +8905,9 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.13" +version = "0.31.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab51d9f7c071abeee76007e2b742499e535148035bb835f97aaed1338cf516c3" +checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144" dependencies = [ "bitflags 2.11.0", "rustix 1.1.4", @@ -8919,9 +8928,9 @@ dependencies = [ [[package]] name = "wayland-cursor" -version = "0.31.13" +version = "0.31.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b3298683470fbdc6ca40151dfc48c8f2fd4c41a26e13042f801f85002384091" +checksum = "4a52d18780be9b1314328a3de5f930b73d2200112e3849ca6cb11822793fb34d" dependencies = [ "rustix 1.1.4", "wayland-client", @@ -8930,9 +8939,9 @@ dependencies = [ [[package]] name = "wayland-protocols" -version = "0.32.11" +version = "0.32.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b23b5df31ceff1328f06ac607591d5ba360cf58f90c8fad4ac8d3a55a3c4aec7" +checksum = "563a85523cade2429938e790815fd7319062103b9f4a2dc806e9b53b95982d8f" dependencies = [ "bitflags 2.11.0", "wayland-backend", @@ -8955,9 +8964,9 @@ dependencies = [ [[package]] name = "wayland-protocols-misc" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "429b99200febaf95d4f4e46deff6fe4382bcff3280ee16a41cf887b3c3364984" +checksum = "6e9567599ef23e09b8dad6e429e5738d4509dfc46b3b21f32841a304d16b29c8" dependencies = [ "bitflags 2.11.0", "wayland-backend", @@ -8968,9 +8977,9 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d392fc283a87774afc9beefcd6f931582bb97fe0e6ced0b306a62cb1d026527c" +checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91" dependencies = [ "bitflags 2.11.0", "wayland-backend", @@ -8981,9 +8990,9 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78248e4cc0eff8163370ba5c158630dcae1f3497a586b826eca2ef5f348d6235" +checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" dependencies = [ "bitflags 2.11.0", "wayland-backend", @@ -8994,9 +9003,9 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.9" +version = "0.31.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c86287151a309799b821ca709b7345a048a2956af05957c89cb824ab919fa4e3" +checksum = "9c324a910fd86ebdc364a3e61ec1f11737d3b1d6c273c0239ee8ff4bc0d24b4a" dependencies = [ "proc-macro2", "quick-xml 0.39.2", @@ -9005,9 +9014,9 @@ dependencies = [ [[package]] name = "wayland-sys" -version = "0.31.10" +version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374f6b70e8e0d6bf9461a32988fd553b59ff630964924dad6e4a4eb6bd538d17" +checksum = "d8eab23fefc9e41f8e841df4a9c707e8a8c4ed26e944ef69297184de2785e3be" dependencies = [ "dlib", "log", @@ -9017,9 +9026,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.91" +version = "0.3.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9" +checksum = "cd70027e39b12f0849461e08ffc50b9cd7688d942c1c8e3c7b22273236b4dd0a" dependencies = [ "js-sys", "wasm-bindgen", @@ -9861,7 +9870,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6755fa58a9f8350bd1e472d4c3fcc25f824ec358933bba33306d0b63df5978d" dependencies = [ "ahash", - "android-activity 0.6.0", + "android-activity 0.6.1", "atomic-waker", "bitflags 2.11.0", "block2 0.5.1", @@ -9915,6 +9924,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "winnow" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" +dependencies = [ + "memchr", +] + [[package]] name = "wit-bindgen" version = "0.51.0" @@ -10009,11 +10027,11 @@ version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "886614b5ce857341226aa091f3c285e450683894acaaa7887f366c361efef79d" dependencies = [ - "font-types", + "font-types 0.10.1", "indexmap", "kurbo 0.12.0", "log", - "read-fonts", + "read-fonts 0.35.0", ] [[package]] @@ -10213,7 +10231,7 @@ dependencies = [ "uds_windows", "uuid", "windows-sys 0.61.2", - "winnow", + "winnow 0.7.15", "zbus_macros", "zbus_names", "zvariant", @@ -10241,7 +10259,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffd8af6d5b78619bab301ff3c560a5bd22426150253db278f164d6cf3b72c50f" dependencies = [ "serde", - "winnow", + "winnow 0.7.15", "zvariant", ] @@ -10253,18 +10271,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.42" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2578b716f8a7a858b7f02d5bd870c14bf4ddbbcf3a4c05414ba6503640505e3" +checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.42" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e6cc098ea4d3bd6246687de65af3f920c430e236bee1e3bf2e441463f08a02f" +checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" dependencies = [ "proc-macro2", "quote", @@ -10297,20 +10315,6 @@ name = "zeroize" version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] [[package]] name = "zerotrie" @@ -10348,9 +10352,9 @@ dependencies = [ [[package]] name = "zip" -version = "8.2.0" +version = "8.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b680f2a0cd479b4cff6e1233c483fdead418106eae419dc60200ae9850f6d004" +checksum = "7756d0206d058333667493c4014f545f4b9603c4330ccd6d9b3f86dcab59f7d9" dependencies = [ "aes", "bzip2", @@ -10410,9 +10414,9 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.5.13" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec5f41c76397b7da451efd19915684f727d7e1d516384ca6bd0ec43ec94de23c" +checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296" dependencies = [ "zune-core", ] @@ -10426,7 +10430,7 @@ dependencies = [ "endi", "enumflags2", "serde", - "winnow", + "winnow 0.7.15", "zvariant_derive", "zvariant_utils", ] @@ -10454,5 +10458,5 @@ dependencies = [ "quote", "serde", "syn 2.0.117", - "winnow", + "winnow 0.7.15", ] diff --git a/Cargo.toml b/Cargo.toml index 77c811031..b6cd38076 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,16 +11,15 @@ exclude = [ "misc/test_image_perf", "misc/test_compilation_speed_size", "ci_tester", + "test" ] resolver = "3" -# android-activity 0.6.0 panics when ANativeActivity_onCreate is called a second -# time (Activity recreation) because ndk_context::initialize_android_context -# asserts previous.is_none(). The fix (OnceLock, init once with Application ref) -# is merged to main but not yet released. Remove this patch once 0.6.1+ ships. -# Affects only android-activity ^0.6 (cedinia); Slint's ^0.5 dependency is unaffected. -#[patch.crates-io] -#android-activity = { git = "https://github.com/rust-mobile/android-activity", rev = "43de2770b91b1b8ff870f00551f89f04062216cc" } +# Temporary solution for spamming mouse events in Slint +# Even with workaround, performance is quite low in specific cases in Cedinia +[patch.crates-io] +slint = { git = "https://github.com/slint-ui/slint.git", rev = "c24077780bc15e7c334bae1efa0be0bb5943951c" } +slint-build = { git = "https://github.com/slint-ui/slint.git", rev = "c24077780bc15e7c334bae1efa0be0bb5943951c" } [profile.release] # panic = "unwind" in opposite to "abort", allows to catch panic!() diff --git a/README.md b/README.md index dbbdfccbc..d18429505 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ options to choose than other). | Similar videos | ✔ | ✔ | | | | | | Music duplicates(tags) | ✔ | ✔ | ✔ | | ✔ | | | Music duplicates(content) | ✔ | ✔ | ✔ | | | | -| Invalid symlinks | ✔ | ✔ | ✔ | ✔ | | | +| Invalid symlinks | ✔ | ✔ | | ✔ | | | | Broken files | ✔ | ✔ | ✔ | | | | | Invalid names/extensions | ✔ | ✔ | ✔ | ✔ | | | | Exif cleaner | ✔ | | ✔ | | | | @@ -110,7 +110,7 @@ There are many similar applications to Czkawka on the Internet, which do some th ### GUI -- [DupeGuru](https://github.com/arsenetar/dupeguru) - Many options to customize; great photo compare tool +- [DupeGuru](https://github.com/arsenetar/dupeguru) - Many options to customize - [FSlint](https://github.com/pixelb/fslint) - A little outdated, but still have some tools not available in Czkawka - [AntiDupl.NET](https://github.com/ermig1979/AntiDupl) - Shows a lot of metadata of compared images - [Video Duplicate Finder](https://github.com/0x90d/videoduplicatefinder) - Finds similar videos(surprising, isn't it) @@ -182,7 +182,7 @@ Also, I really appreciate work of people that create crates on which Czkawka is ## AI Policy -The vast majority of the code in this project was written by me(qarmin), without using AI. However, as AI tools have improved and can significantly simplify development and reduce boilerplate, I see no reason to forbid their use. +The vast majority of the code in this project was written by me (qarmin) without using AI. However, as AI tools have improved and can significantly simplify development and reduce boilerplate, I see no reason to forbid their use. I have also added a CLAUDE.md file to the repo to make it easier to provide AI tools with context about the project’s style and code structure. That said, every pull request, whether created with AI or not, must meet proper quality standards. The author must be able to clearly explain what the code does, without relying on AI for that explanation. I manually review every PR and test each change, so the risk of incorrect code slipping through is low. Still, to avoid wasting time, please refrain from submitting AI Slop PRs. diff --git a/cedinia/CLAUDE.md b/cedinia/CLAUDE.md new file mode 100644 index 000000000..87e891337 --- /dev/null +++ b/cedinia/CLAUDE.md @@ -0,0 +1,245 @@ +# cedinia – Architecture Guide + +## Overview + +Android (and secondary desktop) GUI. Architecture mirrors krokiet but adapted +for mobile constraints: touch-optimized layout, JNI file picker, runtime +permissions, system insets, and no video tools (FFmpeg unavailable on Android). + +--- + +## Entry Points + +**Android** (`src/lib.rs`): +```rust +#[unsafe(no_mangle)] +fn android_main(android_app: AndroidApp) { + android_logger::init_once(…); // Log to logcat + setup_android_paths(&android_app); // JNI: get /data and /cache paths + file_picker_android::init(&android_app); // Load DEX + init JNI + slint::android::init(android_app.clone()).expect(…); + app::run_app_with_insets(inset_bottom_px, scale, android_app); +} +``` + +**Desktop** (`src/app.rs`): +```rust +pub fn run_app() { + setup_logger_cache(); + run_app_with_insets(0.0, 1.0, ()); +} +``` + +Both converge at `run_app_inner()`: load settings → create `MainWindow` → +wire callbacks → start worker thread → run event loop. + +--- + +## Source Layout + +``` +cedinia/src/ +├── lib.rs # Android entry (#[no_mangle] android_main) +├── app.rs # Desktop entry + shared run_app_inner() +├── bin/cedinia.rs # Desktop binary wrapper +├── common.rs # Column index enums (StrData*, IntData*) +├── model.rs # FileEntry toggle/count logic +├── scan_runner.rs # Worker thread + ScanRequest/ScanResult +├── scanners.rs # Tool-specific scan builders +├── notifications.rs # Desktop notifications +├── set_initial_gui_infos.rs # Initial GUI state +├── thumbnail_loader.rs # Async image thumbnail loading +├── translations.rs # translate_items() – populates Translations global +├── volumes.rs # Storage volume detection +├── localizer_cedinia.rs # flc! macro, LANGUAGE_LIST, apply_language_preference() +├── file_picker_android.rs # JNI + embedded DEX file picker +├── callbacks/ +│ ├── callbacks.rs # Module re-exports +│ ├── scan.rs # wire_scan() – scan/stop/tool-change callbacks +│ ├── selection.rs # wire_selection() – delete + model access +│ ├── directories.rs # wire_directories() – add/remove include/exclude dirs +│ └── misc.rs # wire_permission(), language, open-path, settings +├── settings/ +│ ├── mod.rs # CediniaSettings struct; load/save JSON +│ └── gui_settings_values.rs # StringComboBoxItems – combo box option arrays +└── ui/ + ├── main_window.slint # Root component + ├── app_state.slint # Global AppState, GeneralSettings, tool-specific globals + ├── common.slint # Enums: ActiveTool, ScanState, ConfirmPopupAction + ├── colors.slint # CediniaColors theme + ├── settings_screen.slint # Settings screen layout + ├── settings_components.slint # ToggleRow, SegmentRow, DropdownRow, TextInputRow + ├── results_list.slint # Scrollable results list (MomentumScrollView) + ├── similar_images_gallery.slint + ├── directories_screen.slint # Add/remove directory paths + ├── momentum_scroll.slint # Touch momentum scroll (custom component) + ├── components.slint # Shared components + └── … +``` + +--- + +## Scan Data Flow + +``` +1. User selects tool + taps Scan → AppState.on_scan_requested() +2. scan.rs: collect settings from globals → build ScanRequest +3. ScanRequest sent to worker thread via channel +4. Worker: configure tool struct → tool.search(stop_flag, progress_sender) +5. Results stored; ScanResult sent back to main thread +6. invoke_from_event_loop: populate model, update AppState.scan_state +``` + +--- + +## Slint UI Architecture + +Settings are stored in Slint globals (not set from Rust at startup): + +- `GeneralSettings` – language, file sizes, cache, extension filters +- `DuplicateSettings`, `SimilarImagesSettings`, `SameMusicSettings`, … +- `AppState` – scan state, active tool, result models, all callbacks + +`apply_settings_to_gui()` (`settings/mod.rs`) reads `CediniaSettings` from +JSON and populates these globals. `collect_settings_from_gui()` reads them back +for saving. + +### DropdownRow (`ui/settings_components.slint`) + +Custom settings row with a scrollable popup: +- Tapping the row opens a `PopupWindow`. +- Height capped at `min(options.length * 48px, 384px)`. +- Content wrapped in `ScrollView` with `viewport-height = options.length * 48px`, + allowing the 27-language list to scroll. + +### MomentumScrollView (`ui/momentum_scroll.slint`) + +Custom touch-scroll component used for the results list and image gallery. +Provides momentum / deceleration on swipe. Not available in krokiet. + +--- + +## Translation System + +Same workaround as krokiet: +- All UI text bound to `Translations` global properties. +- `translate_items()` in `src/translations.rs` populates them via `flc!("key")`. +- `LANGUAGE_LIST` in `localizer_cedinia.rs` defines the 27 supported languages. +- `GeneralSettings.language_options` in `ui/app_state.slint` is hardcoded and + must match `LANGUAGE_LIST` exactly. +- Language index stored in `GeneralSettings.language_idx`; code stored in + `CediniaSettings.language`. + +--- + +## Settings (`src/settings/mod.rs`) + +JSON file: +- Desktop: `~/.config/Czkawka/cedinia_settings.json` +- Android: app-private storage (`/data/data/…/files/config/`) + +`CediniaSettings` (serde Serialize/Deserialize) covers all tool parameters. +`Default` implementation delegates to `serde_json::from_str("{}")` so all +`#[serde(default)]` values are used. + +--- + +## Android-Specific Code + +### File Picker (`src/file_picker_android.rs`) + +A Kotlin helper class is compiled at build time (via `android-build` crate) and +embedded as DEX bytecode: + +```rust +include_bytes!(concat!(env!("OUT_DIR"), "/classes.dex")) +``` + +At runtime: +1. DEX is loaded into an `InMemoryDexClassLoader`. +2. `CediniaFilePicker` instance created via JNI. +3. `launch_pick_directory(is_include)` calls the Java `ACTION_OPEN_DOCUMENT_TREE` intent. +4. Result arrives via `Java_CediniaFilePicker_onDirectoryPicked()` JNI callback + → dispatched to Rust via `invoke_from_event_loop()`. + +### Storage Permissions + +Runtime permission check/request via JNI. +`AppState.storage_permission_granted` gates scan initiation. + +### System Insets + +Android edge-to-edge layout requires padding for navigation bars. Inset sizes +are passed from Kotlin via `android_app.content_rect()` and plumbed through to +Slint as layout properties. + +### Android Paths via JNI + +`setup_android_paths()` calls `getFilesDir()` and `getCacheDir()` on the +Activity to find private storage paths; these are set as environment variables +and used by `czkawka_core`'s config path logic. + +--- + +## Differences from krokiet + +| | cedinia | krokiet | +|---|---|---| +| Video tools | No | Yes | +| Video optimizer | No | Yes | +| Bad names tool | Yes | No | +| Touch scroll | MomentumScrollView | Standard | +| File picker | JNI (Android) / rfd (desktop) | rfd | +| Settings | JSON, no presets | JSON, 11 presets | +| Column indices | `common.rs` (own set) | `common.rs` (own set) | +| Build target | `cdylib` (Android) + `bin` (desktop) | `bin` | + +--- + +## Key Dependencies + +### Always + +| Crate | Purpose | +|-------|---------| +| `slint` 1.15 | UI framework | +| `czkawka_core` | Scanning engine | +| `crossbeam-channel` | Worker thread communication | +| `i18n-embed` + `rust-embed` | Fluent translations | +| `serde_json` | Settings persistence | +| `image` | Thumbnail loading | + +### Android only + +| Crate | Purpose | +|-------|---------| +| `android-activity` 0.6 | Android lifecycle | +| `jni` 0.22 | Java FFI | +| `android_logger` 0.15 | Logcat output | + +### Desktop only + +| Crate | Purpose | +|-------|---------| +| `rfd` 0.17 | Native file picker | +| `trash` 5.2 | Move-to-trash | +| `notify-rust` 4 | Desktop notifications | + +### Build + +```toml +[build-dependencies] +slint-build = "1.15" +android-build = "0.1.2" # Compiles CediniaFilePicker.java → classes.dex +``` + +### Android Manifest Permissions + +`READ_EXTERNAL_STORAGE`, `WRITE_EXTERNAL_STORAGE`, +`MANAGE_EXTERNAL_STORAGE`, `POST_NOTIFICATIONS` + +--- + +## Optional Features (forwarded to czkawka_core) + +`heif`, `libraw`, `libavif`, `xdg_portal_trash` diff --git a/cedinia/Cargo.toml b/cedinia/Cargo.toml index d29a9720a..d38d64a20 100644 --- a/cedinia/Cargo.toml +++ b/cedinia/Cargo.toml @@ -24,13 +24,7 @@ humansize = "2.1" filetime = "0.2" serde = "1.0" serde_json = "1.0" -image = { version = "0.25" } -fast_image_resize = { version = "6.0.0", features = ["image"] } - -slint = { version = "1.15.0", default-features = false, features = [ - "std", - "compat-1-2", -] } +image = { version = "0.25", default-features = false, features = ["jpeg", "png"] } # Translations i18n-embed = { version = "0.16", features = ["fluent-system", "desktop-requester"] } @@ -39,6 +33,8 @@ rust-embed = { version = "8.5", features = ["debug-embed"] } [target.'cfg(target_os = "android")'.dependencies] +#slint = { path = "/home/rafal/test/slint/api/rs/slint/", default-features = false, features = [ +#slint = { git = "https://github.com/slint-ui/slint.git", default-features = false, features = [ slint = { version = "1.15.0", default-features = false, features = [ "std", "compat-1-2", @@ -54,6 +50,8 @@ android_logger = "0.15.1" rfd = { version = "0.17", default-features = false, features = ["xdg-portal"] } trash = "5.2.5" notify-rust = "4" +#slint = { path = "/home/rafal/test/slint/api/rs/slint/", default-features = false, features = [ +#slint = { git = "https://github.com/slint-ui/slint.git", default-features = false, features = [ slint = { version = "1.15.0", default-features = false, features = [ "std", "compat-1-2", @@ -63,7 +61,10 @@ slint = { version = "1.15.0", default-features = false, features = [ ] } [build-dependencies] +#slint-build = { path = "/home/rafal/test/slint/api/rs/build/"} +#slint-build = { git = "https://github.com/slint-ui/slint.git" } slint-build = "1.15" + # Used by build.rs to compile Java helpers to DEX when cross-compiling for Android. # The build.rs itself guards on TARGET containing "android" so this is a no-op on desktop. android-build = "0.1.2" @@ -96,6 +97,12 @@ name = "android.app.NativeActivity" # screenSize change which Android defers until foreground → causes the # "every-other-time restart" pattern. config_changes = "orientation|keyboardHidden|screenSize|smallestScreenSize|navigation|uiMode|screenLayout|locale|density|fontScale" +# singleTop: prevent Android from creating a new Activity instance when the +# launcher icon or a notification brings the existing task to the foreground. +# With the default standard mode, each tap stacks a new NativeActivity on top +# (which re-runs android_main and resets all state). singleTop keeps the +# existing instance and calls onNewIntent instead. +launch_mode = "singleTop" # Full external storage access (needed to scan /sdcard root on Android 11+) [[package.metadata.android.uses_permission]] diff --git a/cedinia/TMP_INSTALL.md b/cedinia/TMP_INSTALL.md index bd116843f..393940053 100644 --- a/cedinia/TMP_INSTALL.md +++ b/cedinia/TMP_INSTALL.md @@ -1,6 +1,6 @@ ```shell -# ── Environment variables (add to ~/.bashrc or ~/.zshrc) ────────────────────── +# Environment variables (add to ~/.bashrc or ~/.zshrc) # These are required by the justfile Android commands (justfile has `set export := true`) export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 export ANDROID_HOME=$HOME/android-sdk @@ -11,10 +11,10 @@ export PATH=$PATH:$ANDROID_HOME/platform-tools # Reload after editing ~/.bashrc source ~/.bashrc -# ── Install Java 17 (Ubuntu/Debian) ─────────────────────────────────────────── +# Install Java 17 (Ubuntu/Debian) sudo apt install openjdk-17-jdk -# ── Android command-line tools setup ────────────────────────────────────────── +# Android command-line tools setup # Download from https://developer.android.com/studio#command-tools mkdir -p $ANDROID_HOME/cmdline-tools cd $ANDROID_HOME/cmdline-tools @@ -29,39 +29,39 @@ sdkmanager \ "build-tools;35.0.0" \ "ndk;27.2.12479018" -# ── Install cargo-apk ───────────────────────────────────────────────────────── +# Install cargo-apk cargo install cargo-apk -# ── Add Android Rust targets ─────────────────────────────────────────────────── +# Add Android Rust targets rustup target add aarch64-linux-android armv7-linux-androideabi -# ── Desktop build/run ───────────────────────────────────────────────────────── +# Desktop build/run cargo build -p cedinia cargo run -p cedinia -# ── Android - one-time setup ────────────────────────────────────────────────── +# Android - one-time setup just gen_keystores # generate debug + release keystores (run once) -# ── Android - build, install & launch ───────────────────────────────────────── +# Android - build, install & launch just android # debug: build → install → launch just androidr # release: build → install → launch -# ── Android - individual steps ──────────────────────────────────────────────── +# Android - individual steps just android_build # build debug APK just android_build_release # build release APK just android_install # install debug APK to connected device just android_install_release just android_run # launch on connected device -# ── Logs & diagnostics ──────────────────────────────────────────────────────── +# Logs & diagnostics just android_log # logcat: Rust stdout/stderr only just android_logc # logcat: everything from Cedinia just android_devices # list connected ADB devices -# ── Uninstall ───────────────────────────────────────────────────────────────── +# Uninstall adb uninstall io.github.qarmin.cedinia -# ── Panic backtrace ─────────────────────────────────────────────────────────── +# Panic backtrace RUST_BACKTRACE=1 just android_build just android_log ``` diff --git a/cedinia/android/app/src/main/AndroidManifest.xml b/cedinia/android/app/src/main/AndroidManifest.xml index 7662345d9..9e9abccb3 100644 --- a/cedinia/android/app/src/main/AndroidManifest.xml +++ b/cedinia/android/app/src/main/AndroidManifest.xml @@ -17,6 +17,7 @@ diff --git a/cedinia/i18n/ar/cedinia.ftl b/cedinia/i18n/ar/cedinia.ftl new file mode 100644 index 000000000..e22d943e5 --- /dev/null +++ b/cedinia/i18n/ar/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = التكرارات +tool_empty_folders = مجلدات فارغة +tool_similar_images = صور مشابهة +tool_empty_files = ملفات فارغة +tool_temporary_files = الملفات المؤقتة +tool_big_files = أكبر الملفات +tool_broken_files = الملفات المكسورة +tool_bad_extensions = ملحقات سيئة +tool_same_music = مكرر الموسيقى +tool_bad_names = أسماء سيئة +tool_exif_remover = بيانات EXIF +tool_directories = المجلدات +tool_settings = الإعدادات +# Home screen tool card descriptions +home_dup_description = البحث عن ملفات بنفس المحتوى +home_empty_folders_description = المجلدات بدون محتوى +home_similar_images_description = العثور على صور مشابهة بصرياً +home_empty_files_description = ملفات بحجم صفر +home_temp_files_description = الملفات المؤقتة والمخزونة +home_big_files_description = ملفات Biggest/Mallallest على القرص +home_broken_files_description = PDF، السمع، الصور، الأرشيف +home_bad_extensions_description = ملفات ذات ملحق غير صالح +home_same_music_description = ملفات صوتية مشابهة بواسطة العلامات +home_bad_names_description = الملفات ذات الأحرف الإشكالية في الاسم +home_exif_description = صور مع بيانات التعريف EXIF +# Results list +scanning = جاري الفحص... +stopping = التوقف... +no_results = لا توجد نتائج +press_start = اضغط على START للمسح +select_label = سيّل. +deselect_label = ديزل. +list_label = قائمة +gallery_label = غلا. +# Selection popup +selection_popup_title = حدد +select_all = حدد الكل +select_except_one = حدد الكل باستثناء واحد +select_except_largest = حدد الكل باستثناء الاهم +select_except_smallest = حدد الكل باستثناء الأصغر +select_largest = حدد أكبر +select_smallest = اختيار أصغر +select_except_highest_res = حدد الكل باستثناء أعلى دقة +select_except_lowest_res = حدد الكل باستثناء أدنى دقة +select_highest_res = حدد أعلى دقة +select_lowest_res = حدد أدنى دقة +invert_selection = عكس التحديد +close = أغلق +# Deselection popup +deselection_popup_title = إلغاء التحديد +deselect_all = إلغاء تحديد الكل +deselect_except_one = إلغاء تحديد الكل باستثناء واحد +# Confirm popup +cancel = إلغاء +delete = حذف +rename = إعادة تسمية +# Delete errors popup +delete_errors_title = فشل في حذف بعض الملفات: +ok = حسناً +# Stopping overlay +stopping_overlay_title = التوقف +stopping_overlay_body = + جارٍ إنهاء الفحص الحالي... + الرجاء الانتظار. +# Permission popup +permission_title = الوصول إلى الملف +permission_body = للمسح الضوئي للملفات، يحتاج التطبيق إلى الوصول إلى تخزين الجهاز. بدون هذا الإذن، لن يكون المسح الضوئي ممكنا. +grant = منح +no_permission_scan_warning = لا يوجد وصول إلى الملف - منح الإذن بالمسح +# Settings screen tabs +settings_tab_general = عام +settings_tab_tools = أدوات +settings_tab_diagnostics = معلومات +# Settings - General tab +settings_use_cache = استخدام ذاكرة التخزين المؤقت +settings_use_cache_desc = تسريع المسح اللاحق (هاش/صور) +settings_ignore_hidden = تجاهل الملفات المخفية +settings_ignore_hidden_desc = الملفات والمجلدات التي تبدأ بـ '.' +settings_show_notification = إشعار عند الانتهاء من المسح +settings_show_notification_desc = إظهار إشعار النظام عند الانتهاء من المسح +settings_notify_only_background = فقط عندما تكون في الخلفية +settings_notify_only_background_desc = تخطي الإشعار إذا كان التطبيق مرئيًا +notifications_disabled_banner = تم تعطيل الإشعارات +notifications_enable_button = تمكين +settings_scan_label = سكون +settings_filters_label = FILTERS (بعض الأدوات) +settings_min_file_size = الحد الأدنى لحجم الملف +settings_max_file_size = الحد الأقصى لحجم الملف +settings_language = اللغة +settings_language_restart = يتطلب إعادة تشغيل التطبيق +settings_common_label = إعدادات الاتصال +settings_excluded_items = اكتشف الصور (أنماط القذائف، مفصولة بفاصلة) +settings_excluded_items_placeholder = مثال: *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = اختصارات محجوبة (فارغة = الكل) +settings_allowed_extensions_placeholder = مثل jpg, png, mp4 +settings_excluded_extensions = نسخ مستخرجة +settings_excluded_extensions_placeholder = مثل الخبز ، tmp، سجل +# Settings - Tools section labels +settings_duplicates_header = المحتويات +settings_check_method_label = التعليق على الطريقة +settings_check_method = الطريقة +settings_hash_type_label = نوع هاش +settings_hash_type = نوع التجزئة +settings_hash_type_desc = Blake3 - الخيار الموصى به، اتفاقية CRC32 لديها فرصة صغيرة للإيجابيات الكاذبة +settings_similar_images_header = الآثار الخاصة +settings_similarity_preset = عتبة التشابه +settings_similarity_desc = عالية جدا = شبه متطابقة فقط +settings_hash_size = حجم التجزئة +settings_hash_size_desc = أحجام أكبر، لها إيجابيات خاطئة أقل، ولكنها أيضا تجد صورا أقل تشابه +settings_hash_alg = خوارزمية التجزئة +settings_image_filter = تغيير حجم الفلتر +settings_ignore_same_size = تجاهل الصور ذات الأبعاد نفسها +settings_gallery_image_fit_cover = المعرض: محصول إلى مربع +settings_gallery_image_fit_cover_desc = ملء الرتبة؛ تعطيل للحفاظ على نسبة العرض الأصلية +settings_big_files_header = خلل كبير +settings_search_mode = وضع البحث +settings_file_count = عدد الملفات +settings_same_music_header = التعاريف الرئيسية +settings_music_check_method = وضع المقارنة +settings_music_compare_tags_label = التسلسل الشامل +settings_music_title = العنوان +settings_music_artist = الفنان +settings_music_year = السنة +settings_music_length = طول +settings_music_genre = النوع +settings_music_bitrate = معدل +settings_music_approx = مقارنة الوسوم التقريبية +settings_broken_files_header = الحفلات المدفوعه +settings_broken_files_note = المسح الكثيف للموارد. للحصول على أفضل أداء استخدم Krokiet على سطح المكتب. +settings_broken_files_types_label = التحقق من اللعبة +settings_broken_audio = الصوت +settings_broken_pdf = ملف PDF +settings_broken_archive = أرشيف +settings_broken_image = صورة +settings_bad_names_header = أسماء العملاء +settings_bad_names_checks_label = التدوين +settings_bad_names_uppercase_ext = ملحق الحالة العلوية +settings_bad_names_emoji = الرموز التعبيرية باسم +settings_bad_names_space = المسافات عند البدء/النهاية +settings_bad_names_non_ascii = الأحرف غير المستخدمة في معيار ASCII +settings_bad_names_duplicated = أحرف متكررة +# Settings - Diagnostics tab +diagnostics_header = الأجهزة، +diagnostics_thumbnails = ذاكرة تخزين مؤقت للصور المصغرة +diagnostics_app_cache = ذاكرة التخزين المؤقت للتطبيق +diagnostics_refresh = تحديث +diagnostics_clear_thumbnails = مسح الصور المصغرة +diagnostics_open_thumbnails_folder = فتح المجلد +diagnostics_clear_cache = مسح ذاكرة التخزين المؤقت +diagnostics_open_cache_folder = فتح المجلد +diagnostics_collect_test = اختبار الوصول إلى الملف +diagnostics_collect_test_desc = تحقق من عدد الملفات التي يمكن الوصول إليها +diagnostics_collect_test_run = تشغيل +diagnostics_collect_test_stop = توقف +collect_test_cancelled = توقف من قبل المستخدم +diag_confirm_clear_thumbnails = مسح جميع ذاكرة التخزين المؤقت المصغرة؟ +diag_confirm_clear_cache = مسح ذاكرة التخزين المؤقت للتطبيق؟ +about_repo = المستودع +about_translate = الترجمات +about_donate = الدعم +# Collect-test result popup +collect_test_title = نتائج الاختبار +collect_test_volumes = المجلدات: +collect_test_folders = المجلدات: +collect_test_files = الملفات: +collect_test_time = الوقت: +# Licenses +licenses_label = ليسانس +third_party_licenses = تراخيص طرف ثالث +licenses_popup_title = تراخيص الطرف الثالث +# Directories screen +directories_include_header = تضمين +directories_included = متضمن +directories_exclude_header = استبعاد +directories_excluded_header = مستبعد +directories_add = تضمين +no_paths = لا توجد مسارات - أضف أدناه +directories_volume_header = الصوت +directories_volume_refresh = تحديث +directories_volume_add = إضافة +# Bottom navigation +nav_home = ابدأ +nav_dirs = المجلدات +nav_settings = الإعدادات +# Status messages set from Rust +status_ready = مستعد +status_stopped = توقفت +status_no_results = لا توجد نتائج +status_deleted_selected = تم حذف المحدد +status_deleted_with_errors = تم الحذف مع الأخطاء +scan_not_started = لم يبدأ الفحص +found_items_prefix = موجود +found_items_suffix = العناصر +deleted_items_prefix = محذوف +deleted_items_suffix = العناصر +deleted_errors_suffix = أخطاء +renamed_prefix = أُعيد تسميته +renamed_files_suffix = الملفات +renamed_errors_suffix = أخطاء +cleaned_exif_prefix = مسح EXIF من +cleaned_exif_suffix = الملفات +cleaned_exif_errors_suffix = أخطاء +and_more_prefix = ...و +and_more_suffix = المزيد +# Gallery / delete popups +gallery_delete_button = حذف +gallery_back = الرجوع +gallery_confirm_delete = نعم، حذف +deleting_files = حذف الملفات... +stop = توقف +files_suffix = الملفات +scanning_fallback = جارٍ الفحص... +app_subtitle = تكريما لمعركة سيدينيا (972 CE) +app_license = الواجهة لنواة Czkawka - GPL-3.0 +about_app_label = من +cache_label = التوقف +# Notification +scan_completed_notification = تم مسح العناصر - { $file_count } الموجودة +# Confirm popups (set from Rust) +confirm_clean_exif = هل أنت متأكد من أنك تريد تنظيف وسوم EXIF من الملفّات المختارة{ $n}؟ +confirm_delete_items = هل أنت متأكد من أنك تريد حذف { $n } العناصر المحددة؟ +gallery_confirm_delete_msg = أنت على وشك حذف صور { $total_images } في مجموعات { $total_groups}. +gallery_confirm_delete_warning = تم تحديد جميع العناصر في مجموعة { $unsafe_groups}! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = إن حساب ومقارنة بصمات الصوت كثيف الموارد وقد يستغرق وقتا طويلا. ويوصى باستخدام كروكييت على نظام حاسوب مكتبي لهذه المهمة. +# Scan stage labels (shown during scan progress) +stage_collecting_files = جمع الملفات +stage_scanning_name = البحث عن طريق الاسم +stage_scanning_size_name = البحث حسب الاسم والحجم +stage_scanning_size = البحث حسب الحجم +stage_pre_hash = التجزئة السابقة +stage_full_hash = التجزئة +stage_loading_cache = تحميل ذاكرة التخزين المؤقت +stage_saving_cache = حفظ ذاكرة التخزين المؤقت +stage_calculating_image_hashes = حساب تجزئة الصور +stage_comparing_images = مقارنة الصور +stage_calculating_video_hashes = حساب تجزئة الفيديو +stage_checking_files = التحقق من الملفات +stage_checking_extensions = التحقق من الإضافات +stage_checking_names = التحقق من الأسماء +stage_reading_music_tags = قراءة علامات الموسيقى +stage_comparing_tags = مقارنة العلامات +stage_calculating_music_fingerprints = حساب بصمات الموسيقى +stage_comparing_fingerprints = مقارنة بصمات الأصابع +stage_extracting_exif = قراءة علامات EXIF +stage_creating_video_thumbnails = إنشاء مصغرات الفيديو +stage_processing_videos = معالجة الفيديوهات +stage_deleting = حذف الملفات +stage_renaming = إعادة تسمية الملفات +stage_moving = نقل الملفات +stage_hardlinking = إنشاء روابط صلبة +stage_symlinking = إنشاء الروابط الرمزية +stage_optimizing_videos = تحسين الفيديوهات +stage_cleaning_exif = تنظيف EXIF +# Group headers in scan results +duplicates_group_header = { $count } ملفات x { $per_file } / الملف = { $total } المجموع +similar_images_group_header = { $count } صور مشابهة +same_music_group_header = { $count } مسارات مشابهة +# Rename confirmation +confirm_rename_items = هل أنت متأكد من أنك تريد إعادة تسمية { $n } من الملفات المحددة؟ +# Combo-box option labels (translatable display names) +option_search_mode_biggest = أكبر +option_search_mode_smallest = أصغر +option_similarity_very_high = خامساً - عالي +option_similarity_high = مرتفع +option_similarity_medium = متوسط +option_similarity_low = منخفض +option_similarity_very_low = خامساً - انخفاض +option_similarity_minimal = دقيقة. +option_check_method_hash = التجزئة +option_check_method_name = الاسم +option_check_method_size_and_name = الحجم+الاسم +option_check_method_size = الحجم +option_music_method_tags = الوسوم +option_music_method_audio = الصوت +option_min_size_none = لا +option_min_size_1kb = 1 كيلوبايت +option_min_size_8kb = 8 كيلوبايت +option_min_size_64kb = 64 كيلوبايت +option_min_size_1mb = 1 ميغابايت +option_max_size_16kb = 16 كيلوبايت +option_max_size_1mb = 1 ميغابايت +option_max_size_10mb = 10 ميغابايت +option_max_size_100mb = 100 ميغابايت +option_max_size_unlimited = غير محدود +# Volume labels (shown in the directories screen) +volume_internal_storage = التخزين الداخلي +volume_sd_card = بطاقة الذاكرة (بطاقة SD) +volume_storage = حجم التخزين +# Directories screen +directories_referenced_tooltip = المشار إليها (غير محذوفة) +directories_include_section_header = مشاهدة +directories_exclude_section_header = أكمل +directories_custom_paths = مسارات مخصصة +directories_check_button = تحليل +directories_check_popup_title = إحصائيات الدليل +directories_check_label_included = المسارات المضمنة: +directories_check_label_excluded = المسارات المستثناة: +directories_check_label_referenced = المسارات المرجعية: +directories_check_label_would_scan = الملفات المراد فحصها: +directories_check_label_processable = الملفات القابلة للتطبيق: +directories_check_scanning = جارٍ الفحص... +directories_check_warning_no_processable = لم يتم العثور على ملفات قابلة للمعالجة - التحقق من المجلدات المشمولة/المستبعدة +path_edit_title_include = إضافة إلى تضمين +path_edit_title_exclude = إضافة إلى استبعاد +path_edit_placeholder = أدخل المسار... +path_edit_not_exists = المسار غير موجود +path_edit_is_dir = دليل +path_edit_is_file = ملف +path_edit_no_newlines = المسارات لا يمكن أن تحتوي على خطوط جديدة — مفتاح الإدخال غير مسموح به +ctx_menu_title = فتح +ctx_open_file = فتح العنصر +ctx_open_folder = فتح المجلد الأصل diff --git a/cedinia/i18n/bg/cedinia.ftl b/cedinia/i18n/bg/cedinia.ftl new file mode 100644 index 000000000..4e0dacb13 --- /dev/null +++ b/cedinia/i18n/bg/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = Дубликати +tool_empty_folders = Празни папки +tool_similar_images = Сходни изображения +tool_empty_files = Празни файлове +tool_temporary_files = Временни файлове +tool_big_files = Най-големите файлове +tool_broken_files = Повредени файлове +tool_bad_extensions = Повредени разширения +tool_same_music = Музикални дубликати +tool_bad_names = Лоши имена +tool_exif_remover = EXIF данни +tool_directories = Директории +tool_settings = Настройки +# Home screen tool card descriptions +home_dup_description = Намерете файлове със същото съдържание +home_empty_folders_description = Директории без съдържание +home_similar_images_description = Намерете визуално подобни снимки +home_empty_files_description = Файлове с нулев размер +home_temp_files_description = Временни и кеширани файлове +home_big_files_description = Най-големите/Най-малките файлове на диска +home_broken_files_description = PDF, аудио, изображения, архиви +home_bad_extensions_description = Файлове с невалидни разширения +home_same_music_description = Подобни аудио файлове, подредени по тагове +home_bad_names_description = Файлове с проблемни символи в името +home_exif_description = Изображения с EXIF метаданни +# Results list +scanning = Сканирането е в процес... +stopping = Спиране... +no_results = Няма намерени резултати +press_start = Натиснете START, за да сканирате +select_label = Изберете. +deselect_label = Desel. +list_label = Списък +gallery_label = Гал. +# Selection popup +selection_popup_title = Избери +select_all = Избери всички +select_except_one = Изберете всички, с изключение на един +select_except_largest = Изберете всички, с изключение на най-големия +select_except_smallest = Избери всички освен най-малкия +select_largest = Изберете най-големия +select_smallest = Изберете най-малкия +select_except_highest_res = Изберете всички, с изключение на опцията с най-висока резолюция +select_except_lowest_res = Изберете всички, с изключение на опцията с най-ниска резолюция +select_highest_res = Изберете най-високата резолюция +select_lowest_res = Изберете най-ниското разрешение +invert_selection = Инверсия на избора +close = Затвори +# Deselection popup +deselection_popup_title = Премахнете селекцията +deselect_all = Отключи всичко +deselect_except_one = Премахнете всички опции, с изключение на една +# Confirm popup +cancel = Отказ +delete = Изтрий +rename = Преименувай +# Delete errors popup +delete_errors_title = Неуспешно изтрити някои файлове: +ok = Добре +# Stopping overlay +stopping_overlay_title = Спиране +stopping_overlay_body = + Завършване на текущото сканиране... + Моля, изчакайте. +# Permission popup +permission_title = Достъп до файлове +permission_body = За да сканира файлове, приложението се нуждае от достъп до паметта на устройството. Без това разрешение, сканирането няма да бъде възможно. +grant = Безвъзмездна помощ/Безвъзмездно финансиране +no_permission_scan_warning = Липсва достъп до файлове - предоставете разрешение за сканиране +# Settings screen tabs +settings_tab_general = Общи +settings_tab_tools = Инструменти +settings_tab_diagnostics = Информация +# Settings - General tab +settings_use_cache = Използвай кеш +settings_use_cache_desc = Ускорява следващите сканирания (на хешове/изображения) +settings_ignore_hidden = Игнорирайте скритите файлове +settings_ignore_hidden_desc = Файлове и папки, чиито имена започват с '.' +settings_show_notification = Уведомете, когато сканирането приключи +settings_show_notification_desc = Показвайте системно известие при завършване на сканирането +settings_notify_only_background = Показвайте само когато е на заден план +settings_notify_only_background_desc = Пропуснете известието, ако приложението е видимо +notifications_disabled_banner = Известията са деактивирани +notifications_enable_button = Активирай +settings_scan_label = СКАНИРАЙ +settings_filters_label = ФИЛТРИ (някои инструменти) +settings_min_file_size = Минимален размер на файла +settings_max_file_size = Макс. размер на файла +settings_language = Език +settings_language_restart = Изисква рестартиране на приложението +settings_common_label = ОБЩИ НАСТРОЙКИ +settings_excluded_items = ИЗКЛЮЧЕНИ ЕЛЕМЕНТИ (глобални шаблони, разделени със запетая) +settings_excluded_items_placeholder = Например: *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = ПОЗВОЛЕНИТЕ РАЗШИРЕНИЯ (празно = всички) +settings_allowed_extensions_placeholder = Например: jpg, png, mp4 +settings_excluded_extensions = ИЗКЛЮЧЕНИ РАЗШИРЕНИЯ +settings_excluded_extensions_placeholder = Например: bak, tmp, log +# Settings - Tools section labels +settings_duplicates_header = ДУБЛИРАНИ ОБЕКТИ +settings_check_method_label = МЕТОД НА СРАВНЕНИЕ +settings_check_method = Метод +settings_hash_type_label = ТИП НА ХЕША +settings_hash_type = Хеш тип +settings_hash_type_desc = Blake3 – това е препоръчителният вариант, тъй като CRC32 има малък шанс за фалшиво положителни резултати +settings_similar_images_header = ПОДОБНИ СНИМКИ +settings_similarity_preset = Праг на сходство +settings_similarity_desc = Много високо качество = само почти идентични +settings_hash_size = Хеш размер +settings_hash_size_desc = По-големите размери имат по-малко фалшиви положителни резултати, но също така намират по-малко подобни изображения +settings_hash_alg = Хеш алгоритъм +settings_image_filter = Промяна на размера на филтъра +settings_ignore_same_size = Пренебрегвайте изображенията със същите размери +settings_gallery_image_fit_cover = Галерия: изрязване до квадратен формат +settings_gallery_image_fit_cover_desc = Запълнете плочката; деактивирайте тази опция, за да запазите оригиналното съотношение на страните +settings_big_files_header = НАЙ-ГОЛЕМИТЕ ФАЙЛОВЕ +settings_search_mode = Режим на търсене +settings_file_count = Брой файлове +settings_same_music_header = МУЗИКАЛНИ КОПИЯ +settings_music_check_method = Режим на сравнение +settings_music_compare_tags_label = СВЪРЗАНИ ЕТИКЕТИ +settings_music_title = Заглавие +settings_music_artist = Изпълнител +settings_music_year = Година +settings_music_length = Дължина +settings_music_genre = Жанр +settings_music_bitrate = Битрейт +settings_music_approx = Приблизително сравнение на тагове +settings_broken_files_header = ПОЩУПЕНИ ФАЙЛОВЕ +settings_broken_files_note = Сканирането изисква значителни ресурси. За оптимална производителност използвайте Krokiet на настолен компютър. +settings_broken_files_types_label = ПРОВЕРЕНИ ТИПОВЕ +settings_broken_audio = Аудио +settings_broken_pdf = PDF +settings_broken_archive = Архив +settings_broken_image = Изображение +settings_bad_names_header = ЛОШИ ИМЕНА +settings_bad_names_checks_label = ЧЕКОВЕ +settings_bad_names_uppercase_ext = Голяма буква +settings_bad_names_emoji = Емоджи в име +settings_bad_names_space = Пространства в началото/края +settings_bad_names_non_ascii = Не-ASCII символи +settings_bad_names_duplicated = Повтарящи се символи +# Settings - Diagnostics tab +diagnostics_header = ДИАГНОСТИКА +diagnostics_thumbnails = Кеш за миниатюри +diagnostics_app_cache = Кеш на приложението +diagnostics_refresh = Обновете +diagnostics_clear_thumbnails = Ясни миниатюри +diagnostics_open_thumbnails_folder = Отворете папката +diagnostics_clear_cache = Изчистване на кеша +diagnostics_open_cache_folder = Отворете папката +diagnostics_collect_test = Тест за достъп до файлове +diagnostics_collect_test_desc = Проверете колко файлове са достъпни +diagnostics_collect_test_run = Стартирай +diagnostics_collect_test_stop = Спри +collect_test_cancelled = Спиране, инициирано от потребител +diag_confirm_clear_thumbnails = Искате ли да изтриете всички кеширани миниатюри? +diag_confirm_clear_cache = Искате ли да изтриете кеша на всички приложения? +about_repo = Хранилище +about_translate = Преводи +about_donate = Поддръжка +# Collect-test result popup +collect_test_title = Резултати от тестовете +collect_test_volumes = Томове: +collect_test_folders = Папки: +collect_test_files = Файлове: +collect_test_time = Време: +# Licenses +licenses_label = ЛИЦЕНЗ +third_party_licenses = Лицензи на трети страни +licenses_popup_title = Лицензи от трети страни +# Directories screen +directories_include_header = Включете +directories_included = Включено +directories_exclude_header = Изключете +directories_excluded_header = Изключени +directories_add = Включете +no_paths = Няма пътища - добавете отдолу +directories_volume_header = Томове +directories_volume_refresh = Обновете +directories_volume_add = Добави +# Bottom navigation +nav_home = Старт +nav_dirs = Директории +nav_settings = Настройки +# Status messages set from Rust +status_ready = Готови +status_stopped = Спряно +status_no_results = Няма намерени резултати +status_deleted_selected = Избраното е изтрито +status_deleted_with_errors = Изтрито с грешки +scan_not_started = Сканирането не е започнало +found_items_prefix = Открито +found_items_suffix = артикули +deleted_items_prefix = Изтрито +deleted_items_suffix = продукти/стоки +deleted_errors_suffix = грешки +renamed_prefix = Преименувано +renamed_files_suffix = файлове +renamed_errors_suffix = грешки +cleaned_exif_prefix = Премахната EXIF информация от +cleaned_exif_suffix = файлове +cleaned_exif_errors_suffix = грешки +and_more_prefix = ...и +and_more_suffix = още +# Gallery / delete popups +gallery_delete_button = Изтрий +gallery_back = Назад +gallery_confirm_delete = Да, изтрий +deleting_files = Изтриване на файлове... +stop = Спри +files_suffix = файлове +scanning_fallback = Сканиране... +app_subtitle = В чест на битката при Чединя (972 г. сл. Хр.) +app_license = Интерфейс за потребителя за Czkawka Core - Лиценз GPL-3.0 +about_app_label = ЗА +cache_label = КЕШ +# Notification +scan_completed_notification = Сканирането приключи - намерени { $file_count } елемента +# Confirm popups (set from Rust) +confirm_clean_exif = Сигурни ли сте, че искате да изтриете EXIF данните от { $n } избраните файлове? +confirm_delete_items = Сигурни ли сте, че искате да изтриете { $n } избрани елемента? +gallery_confirm_delete_msg = Вие ще изтриете { $total_images } изображения от { $total_groups } групи. +gallery_confirm_delete_warning = Всички елементи са избрани от { $unsafe_groups } групи! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = Изчисляването и сравняването на аудио отпечатъци е много ресурсоемък процес и може да отнеме доста време. Препоръчва се използването на Krokiet на настолна система за тази задача. +# Scan stage labels (shown during scan progress) +stage_collecting_files = Събиране на файлове +stage_scanning_name = Сканиране по име +stage_scanning_size_name = Сканиране по име и размер +stage_scanning_size = Сканиране по размер +stage_pre_hash = Предварително хеширане +stage_full_hash = Хеширане +stage_loading_cache = Зарежда кеш +stage_saving_cache = Запазва кеш +stage_calculating_image_hashes = Изчисляване на хешове за изображения +stage_comparing_images = Сравняване на изображения +stage_calculating_video_hashes = Изчисляване на хешове за видео +stage_checking_files = Проверка на файловете +stage_checking_extensions = Проверка на разширенията +stage_checking_names = Проверка на имена +stage_reading_music_tags = Четене на музикални тагове +stage_comparing_tags = Сравняване на тагове +stage_calculating_music_fingerprints = Изчисляване на музикални отпечатъци +stage_comparing_fingerprints = Сравнение на отпечатъци от пръсти +stage_extracting_exif = Четене на EXIF тагове +stage_creating_video_thumbnails = Създаване на миниатюри за видеа +stage_processing_videos = Обработка на видеоклипове +stage_deleting = Изтриване на файлове +stage_renaming = Преименуване на файлове +stage_moving = Преместване на елементи +stage_hardlinking = Създаване на твърди връзки +stage_symlinking = Създаване на символни връзки +stage_optimizing_videos = Оптимизиране на видеа +stage_cleaning_exif = Почистване на EXIF данните +# Group headers in scan results +duplicates_group_header = { $count } файла x { $per_file } / файл = { $total } общо +similar_images_group_header = { $count } подобни изображения +same_music_group_header = { $count } подобни записи +# Rename confirmation +confirm_rename_items = Сигурни ли сте, че искате да преименувате избраните { $n } файла? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = Най-голям +option_search_mode_smallest = Най-малък +option_similarity_very_high = V. Много висока +option_similarity_high = Високо +option_similarity_medium = Средно +option_similarity_low = Ниско +option_similarity_very_low = Много ниско +option_similarity_minimal = Мин. +option_check_method_hash = Хеш +option_check_method_name = Име +option_check_method_size_and_name = Размер + Име +option_check_method_size = Размер +option_music_method_tags = Етикети +option_music_method_audio = Аудио +option_min_size_none = Няма +option_min_size_1kb = 1 KB +option_min_size_8kb = 8 KB +option_min_size_64kb = 64 KB +option_min_size_1mb = 1 MB +option_max_size_16kb = 16 KB +option_max_size_1mb = 1 MB +option_max_size_10mb = 10 MB +option_max_size_100mb = 100 MB +option_max_size_unlimited = Неограничен +# Volume labels (shown in the directories screen) +volume_internal_storage = Вътрешна памет +volume_sd_card = Карта памет (SD карта) +volume_storage = Обем на паметта +# Directories screen +directories_referenced_tooltip = Препратено (не е изтрито) +directories_include_section_header = ВКЛЮЧЕНО +directories_exclude_section_header = ИЗКЛЮЧЕНО +directories_custom_paths = Персонализирани пътища +directories_check_button = Анализирайте +directories_check_popup_title = Статистика на директорията +directories_check_label_included = Включени пътища: +directories_check_label_excluded = Изключени пътища: +directories_check_label_referenced = Референтни пътища: +directories_check_label_would_scan = Файлове за сканиране: +directories_check_label_processable = Обработваеми файлове: +directories_check_scanning = Сканиране... +directories_check_warning_no_processable = Не са открити файлове, които могат да бъдат обработени - проверете включените и изключените папки +path_edit_title_include = Добави към "Включени" +path_edit_title_exclude = Добави към списъка за изключване +path_edit_placeholder = Въведете пътя... +path_edit_not_exists = Пътят не съществува +path_edit_is_dir = Директория +path_edit_is_file = Файл +path_edit_no_newlines = Пътищата не могат да съдържат нови редове – натискането на клавиша "Enter" не е разрешено +ctx_menu_title = Отворено +ctx_open_file = Отворена точка +ctx_open_folder = Отворете родителската папка diff --git a/cedinia/i18n/cs/cedinia.ftl b/cedinia/i18n/cs/cedinia.ftl new file mode 100644 index 000000000..dd184e7c4 --- /dev/null +++ b/cedinia/i18n/cs/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = Duplikáty +tool_empty_folders = Prázdné složky +tool_similar_images = Podobné obrázky +tool_empty_files = Prázdné soubory +tool_temporary_files = Dočasné soubory +tool_big_files = Největší soubory +tool_broken_files = Rozbité soubory +tool_bad_extensions = Špatná rozšíření +tool_same_music = Hudební duplikáty +tool_bad_names = Špatná jména +tool_exif_remover = Data EXIF +tool_directories = Adresáře +tool_settings = Nastavení +# Home screen tool card descriptions +home_dup_description = Najít soubory se stejným obsahem +home_empty_folders_description = Adresáře bez obsahu +home_similar_images_description = Najít vizuálně podobné fotky +home_empty_files_description = Soubory s nulovou velikostí +home_temp_files_description = Dočasné a uložené soubory +home_big_files_description = Nejmenší soubory na disku +home_broken_files_description = PDF, audio, obrázky, archivy +home_bad_extensions_description = Soubory s neplatnou příponou +home_same_music_description = Podobné zvukové soubory pomocí štítků +home_bad_names_description = Soubory s problematickými znaky v názvu +home_exif_description = Obrázky s EXIF metadaty +# Results list +scanning = Probíhá vyhledávání... +stopping = Zastavování... +no_results = Žádné výsledky +press_start = Stiskněte START pro skenování +select_label = Vybráno. +deselect_label = Desel. +list_label = Seznam +gallery_label = Gal. +# Selection popup +selection_popup_title = Vybrat +select_all = Vybrat vše +select_except_one = Vybrat vše kromě jednoho +select_except_largest = Vybrat vše kromě největších +select_except_smallest = Vybrat všechny kromě nejmenších +select_largest = Vybrat největší +select_smallest = Vybrat nejmenší +select_except_highest_res = Vybrat vše kromě nejvyššího rozlišení +select_except_lowest_res = Vybrat vše kromě nejnižšího rozlišení +select_highest_res = Vybrat nejvyšší rozlišení +select_lowest_res = Vyberte nejnižší rozlišení +invert_selection = Invertovat výběr +close = Zavřít +# Deselection popup +deselection_popup_title = Zrušit výběr +deselect_all = Zrušit výběr všech +deselect_except_one = Zrušit výběr všech kromě jedné +# Confirm popup +cancel = Zrušit +delete = Vymazat +rename = Přejmenovat +# Delete errors popup +delete_errors_title = Nepodařilo se odstranit některé soubory: +ok = OK +# Stopping overlay +stopping_overlay_title = Zastavování +stopping_overlay_body = + Dokončování aktuálního skenování... + Počkejte prosím. +# Permission popup +permission_title = Přístup k souborům +permission_body = Pro skenování souborů potřebuje aplikace přístup k úložišti zařízení. Bez tohoto oprávnění nebude skenování možné. +grant = Udělit +no_permission_scan_warning = Žádný přístup k souborům - udělit oprávnění pro skenování +# Settings screen tabs +settings_tab_general = Obecná ustanovení +settings_tab_tools = Nástroje a nářadí +settings_tab_diagnostics = Informace +# Settings - General tab +settings_use_cache = Použít keš +settings_use_cache_desc = Zrychluje následující skenování (pole/obrázky) +settings_ignore_hidden = Ignorovat skryté soubory +settings_ignore_hidden_desc = Soubory a složky začínající na '.' +settings_show_notification = Upozornit na dokončení skenování +settings_show_notification_desc = Zobrazit systémové oznámení při dokončení skenování +settings_notify_only_background = Pouze pokud je na pozadí +settings_notify_only_background_desc = Přeskočit upozornění, pokud je aplikace viditelná +notifications_disabled_banner = Oznámení zakázána +notifications_enable_button = Povolit +settings_scan_label = SELHAT +settings_filters_label = FILTERS (některé nástroje) +settings_min_file_size = Minimální velikost souboru +settings_max_file_size = Max. velikost souboru +settings_language = Jazyk +settings_language_restart = Vyžaduje restart aplikace +settings_common_label = SPOLEČNÉ NASTAVENÍ +settings_excluded_items = VYTVOŘIT PŘEDMĚTY (vzory oddělené čárkami) +settings_excluded_items_placeholder = např. *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = POVOLENÉ ROZŠÍŘENÍ (prázdné = všechny) +settings_allowed_extensions_placeholder = např. jpg, png, mp4 +settings_excluded_extensions = VYLOUČENÉ ROZŠÍŘENÍ +settings_excluded_extensions_placeholder = např. bak, tmp, log +# Settings - Tools section labels +settings_duplicates_header = DUPLIKÁTORY +settings_check_method_label = METODA SROVNÁNÍ +settings_check_method = Metoda +settings_hash_type_label = TYP HORU +settings_hash_type = Typ Hash +settings_hash_type_desc = Blake3 - je doporučeno nastavení, CRC32 má malou šanci na falešné pozitivy +settings_similar_images_header = SIMILAČNÍ PROSTŘEDKY +settings_similarity_preset = Prahová hodnota podobnosti +settings_similarity_desc = Velmi vysoká = pouze téměř identická +settings_hash_size = Velikost hash +settings_hash_size_desc = Větší velikosti, mají méně falešných pozitivů, ale také nacházejí méně podobných obrázků +settings_hash_alg = Hash algoritmus +settings_image_filter = Změnit velikost filtru +settings_ignore_same_size = Ignorovat obrázky se stejnými rozměry +settings_gallery_image_fit_cover = Galerie: sklizně až čtvereční +settings_gallery_image_fit_cover_desc = Vyplňte dlaždici; vypněte pro zachování původního poměru stran +settings_big_files_header = ZÁKLADNÍ SOUBORY +settings_search_mode = Režim vyhledávání +settings_file_count = Počet souborů +settings_same_music_header = MUSICKÉ DUPLIKÁTY +settings_music_check_method = Srovnávací režim +settings_music_compare_tags_label = SROVNÁVACÍ TABULKY +settings_music_title = Hlava 1 – Celkem +settings_music_artist = Umělec +settings_music_year = Rok +settings_music_length = Délka +settings_music_genre = Žánr +settings_music_bitrate = Bitová rychlost +settings_music_approx = Přibližné porovnání značek +settings_broken_files_header = BROKEN SOUBORY +settings_broken_files_note = Skenování náročné na zdroje. Pro nejlepší výkon použijte Krokiet na počítači. +settings_broken_files_types_label = KONTROLNÍ TYPY +settings_broken_audio = Zvuk +settings_broken_pdf = PDF +settings_broken_archive = Archiv +settings_broken_image = Obrázek +settings_bad_names_header = Příloha V část 2 odst +settings_bad_names_checks_label = KONTROLY +settings_bad_names_uppercase_ext = Velké rozšíření +settings_bad_names_emoji = Emoji v názvu +settings_bad_names_space = Mezery při startu/konci +settings_bad_names_non_ascii = Znaky mimo sadu ASCII +settings_bad_names_duplicated = Opakované znaky +# Settings - Diagnostics tab +diagnostics_header = DIAGNOSTIKA +diagnostics_thumbnails = Mezipaměť náhledů +diagnostics_app_cache = Cache aplikací +diagnostics_refresh = Aktualizovat +diagnostics_clear_thumbnails = Vymazat miniatury +diagnostics_open_thumbnails_folder = Otevřít složku +diagnostics_clear_cache = Vymazat mezipaměť +diagnostics_open_cache_folder = Otevřít složku +diagnostics_collect_test = Test přístupu k souboru +diagnostics_collect_test_desc = Zkontrolujte, kolik souborů je k dispozici +diagnostics_collect_test_run = Spustit +diagnostics_collect_test_stop = Zastavit +collect_test_cancelled = Ukončeno uživatelem +diag_confirm_clear_thumbnails = Vymazat všechny náhledové keše? +diag_confirm_clear_cache = Smazat mezipaměť všech aplikací? +about_repo = Repozitář +about_translate = Překlady +about_donate = Podpora +# Collect-test result popup +collect_test_title = Výsledky zkoušek +collect_test_volumes = Objemy: +collect_test_folders = Složky: +collect_test_files = Soubory: +collect_test_time = Čas: +# Licenses +licenses_label = LICENCE +third_party_licenses = Licence třetích stran +licenses_popup_title = Licence třetích stran +# Directories screen +directories_include_header = Zahrnout +directories_included = Zahrnuty +directories_exclude_header = Vyjmout +directories_excluded_header = Vyloučeny +directories_add = Zahrnout +no_paths = Žádné cesty - přidat níže +directories_volume_header = Objemy +directories_volume_refresh = Aktualizovat +directories_volume_add = Přidat +# Bottom navigation +nav_home = Začít +nav_dirs = Adresáře +nav_settings = Nastavení +# Status messages set from Rust +status_ready = Připraveno +status_stopped = Zastaveno +status_no_results = Žádné výsledky +status_deleted_selected = Vybrané smazáno +status_deleted_with_errors = Smazáno s chybami +scan_not_started = Skenování není spuštěno +found_items_prefix = Nalezeno +found_items_suffix = položky +deleted_items_prefix = Odstraněno +deleted_items_suffix = položky +deleted_errors_suffix = chyby +renamed_prefix = Přejmenováno +renamed_files_suffix = soubory +renamed_errors_suffix = chyby +cleaned_exif_prefix = Vyčištěný EXIF od +cleaned_exif_suffix = soubory +cleaned_exif_errors_suffix = chyby +and_more_prefix = ...a +and_more_suffix = více +# Gallery / delete popups +gallery_delete_button = Vymazat +gallery_back = Zpět +gallery_confirm_delete = Ano, smazat +deleting_files = Mazání souborů... +stop = Zastavit +files_suffix = soubory +scanning_fallback = Skenování... +app_subtitle = Na počest skotu v Cedynii (972 CE) +app_license = Frontend pro Czkawku Core - GPL-3.0 +about_app_label = O aplikaci +cache_label = KAKOVAT +# Notification +scan_completed_notification = Naskenování dokončeno - { $file_count } nalezeno +# Confirm popups (set from Rust) +confirm_clean_exif = Jste si jisti, že chcete vymazat EXIF tagy z vybraných souborů { $n}? +confirm_delete_items = Jste si jisti, že chcete odstranit vybrané položky { $n}? +gallery_confirm_delete_msg = Chystáte se odstranit { $total_images } obrázky ve skupinách { $total_groups}. +gallery_confirm_delete_warning = Všechny položky jsou vybrány ve skupinách { $unsafe_groups}! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = Výpočet a porovnávání zvukových otisků prstů je velmi náročný na zdroje a může trvat dlouho. Pro tento úkol se doporučuje použít Krokiet na počítačovém systému. +# Scan stage labels (shown during scan progress) +stage_collecting_files = Shromažďování souborů +stage_scanning_name = Skenování podle jména +stage_scanning_size_name = Skenování podle názvu a velikosti +stage_scanning_size = Skenování podle velikosti +stage_pre_hash = Před hashováním +stage_full_hash = Hashování +stage_loading_cache = Načítání keše +stage_saving_cache = Ukládání keše +stage_calculating_image_hashes = Výpočet hash obrázku +stage_comparing_images = Porovnávání obrázků +stage_calculating_video_hashes = Výpočet hash videa +stage_checking_files = Kontrola souborů +stage_checking_extensions = Kontrola rozšíření +stage_checking_names = Kontrola jmen +stage_reading_music_tags = Čtení hudebních značek +stage_comparing_tags = Porovnávání štítků +stage_calculating_music_fingerprints = Výpočet hudebních otisků prstů +stage_comparing_fingerprints = Porovnávání otisků prstů +stage_extracting_exif = Čtení EXIF tagů +stage_creating_video_thumbnails = Vytváření náhledů videa +stage_processing_videos = Zpracovávání videí +stage_deleting = Mazání souborů +stage_renaming = Přejmenovávání souborů +stage_moving = Přesouvání souborů +stage_hardlinking = Vytváření tvrdých odkazů +stage_symlinking = Vytvářím symbolické odkazy +stage_optimizing_videos = Optimalizace videí +stage_cleaning_exif = Čištění EXIF +# Group headers in scan results +duplicates_group_header = { $count } soubory x { $per_file } / soubor = { $total } celkem +similar_images_group_header = Podobné obrázky { $count} +same_music_group_header = { $count } podobné stopy +# Rename confirmation +confirm_rename_items = Opravdu chcete přejmenovat vybrané soubory { $n}? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = Největší +option_search_mode_smallest = Nejmenší +option_similarity_very_high = Vrchní +option_similarity_high = Vysoká +option_similarity_medium = Střední +option_similarity_low = Nízká +option_similarity_very_low = V.Nízká +option_similarity_minimal = Min. +option_check_method_hash = Hash +option_check_method_name = Název +option_check_method_size_and_name = Velikost + název +option_check_method_size = Velikost +option_music_method_tags = Štítky +option_music_method_audio = Zvuk +option_min_size_none = Nic +option_min_size_1kb = 1 KB +option_min_size_8kb = 8 KB +option_min_size_64kb = 64 KB +option_min_size_1mb = 1 MB +option_max_size_16kb = 16 KB +option_max_size_1mb = 1 MB +option_max_size_10mb = 10 MB +option_max_size_100mb = 100 MB +option_max_size_unlimited = Bez omezení +# Volume labels (shown in the directories screen) +volume_internal_storage = Interní úložiště +volume_sd_card = Karta paměti (SD karta) +volume_storage = Hlasitost úložiště +# Directories screen +directories_referenced_tooltip = Odkazováno (nesmazáno) +directories_include_section_header = VČETNĚ +directories_exclude_section_header = VYSVĚTLIVKA +directories_custom_paths = Vlastní cesty +directories_check_button = Analyzovat +directories_check_popup_title = Statistiky adresářů +directories_check_label_included = Zahrnuté cesty: +directories_check_label_excluded = Vyloučené cesty: +directories_check_label_referenced = Referenční cesty: +directories_check_label_would_scan = Soubory ke skenování: +directories_check_label_processable = Zpracovatelné soubory: +directories_check_scanning = Skenování... +directories_check_warning_no_processable = Nebyly nalezeny žádné zpracovatelné soubory - ověřte zahrnuté nebo vyloučené složky +path_edit_title_include = Přidat k zahrnutí +path_edit_title_exclude = Přidat do vyloučení +path_edit_placeholder = Zadejte cestu... +path_edit_not_exists = Cesta neexistuje +path_edit_is_dir = Adresář +path_edit_is_file = Soubor +path_edit_no_newlines = Cesty nemohou obsahovat nové řádky — Enter klíč není povolen +ctx_menu_title = Otevřít +ctx_open_file = Otevřít položku +ctx_open_folder = Otevřít nadřazenou složku diff --git a/cedinia/i18n/de/cedinia.ftl b/cedinia/i18n/de/cedinia.ftl new file mode 100644 index 000000000..1f1d48901 --- /dev/null +++ b/cedinia/i18n/de/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = Duplikate +tool_empty_folders = Leere Ordner +tool_similar_images = Ähnliche Bilder +tool_empty_files = Leere Dateien +tool_temporary_files = Temporäre Dateien +tool_big_files = Größte Dateien +tool_broken_files = Defekte Dateien +tool_bad_extensions = Falsche Erweiterungen +tool_same_music = Musik-Duplikate +tool_bad_names = Falsche Namen +tool_exif_remover = EXIF-Daten +tool_directories = Verzeichnisse +tool_settings = Einstellungen +# Home screen tool card descriptions +home_dup_description = Suchen Sie Dateien mit dem gleichen Inhalt +home_empty_folders_description = Verzeichnisse ohne Inhalt +home_similar_images_description = Visuell ähnliche Fotos finden +home_empty_files_description = Dateien mit Null-Größe +home_temp_files_description = Temporäre und zwischengespeicherte Dateien +home_big_files_description = Größte/Kleinste Dateien auf der Festplatte +home_broken_files_description = PDF, Audio, Bilder, Archive +home_bad_extensions_description = Dateien mit ungültiger Erweiterung +home_same_music_description = Ähnliche Audiodateien nach Tags +home_bad_names_description = Dateien mit problematischen Zeichen im Namen +home_exif_description = Bilder mit EXIF-Metadaten +# Results list +scanning = Scanne läuft... +stopping = Beenden... +no_results = Keine Ergebnisse +press_start = Zum Scannen START drücken +select_label = Auswahl. +deselect_label = Desel. +list_label = Liste +gallery_label = Gal. +# Selection popup +selection_popup_title = Auswählen +select_all = Alles auswählen +select_except_one = Alle außer einer auswählen +select_except_largest = Alle außer Größten auswählen +select_except_smallest = Alle außer kleinsten auswählen +select_largest = Größte auswählen +select_smallest = Kleinste auswählen +select_except_highest_res = Alle außer der höchsten Auflösung auswählen +select_except_lowest_res = Alle außer niedrigste Auflösung auswählen +select_highest_res = Wählen Sie die höchste Auflösung +select_lowest_res = Niedrigste Auflösung auswählen +invert_selection = Auswahl umkehren +close = Schließen +# Deselection popup +deselection_popup_title = Abwählen +deselect_all = Alle abwählen +deselect_except_one = Alle außer eines abwählen +# Confirm popup +cancel = Abbrechen +delete = Löschen +rename = Umbenennen +# Delete errors popup +delete_errors_title = Löschen einiger Dateien fehlgeschlagen: +ok = Ok +# Stopping overlay +stopping_overlay_title = Stoppen +stopping_overlay_body = + Aktuellen Scan wird beendet... + Bitte warten. +# Permission popup +permission_title = Dateizugriff +permission_body = Um Dateien zu scannen, benötigt die App Zugriff auf den Gerätespeicher. Ohne diese Berechtigung ist das Scannen nicht möglich. +grant = Zuschuss +no_permission_scan_warning = Kein Dateizugriff - Berechtigung zum Scannen gewähren +# Settings screen tabs +settings_tab_general = Allgemein +settings_tab_tools = Werkzeuge +settings_tab_diagnostics = Information +# Settings - General tab +settings_use_cache = Cache verwenden +settings_use_cache_desc = Beschleunigt folgende Scans (Hash/Bilder) +settings_ignore_hidden = Versteckte Dateien ignorieren +settings_ignore_hidden_desc = Dateien und Ordner beginnend mit '.' +settings_show_notification = Benachrichtigen, wenn Scan beendet ist +settings_show_notification_desc = Systembenachrichtigung beim Scanabschluss anzeigen +settings_notify_only_background = Nur im Hintergrund +settings_notify_only_background_desc = Benachrichtigung überspringen, wenn die App sichtbar ist +notifications_disabled_banner = Benachrichtigungen deaktiviert +notifications_enable_button = Aktivieren +settings_scan_label = SCAN +settings_filters_label = FILTERS (einige Tools) +settings_min_file_size = Min. Dateigröße +settings_max_file_size = Max. Dateigröße +settings_language = Sprache +settings_language_restart = App-Neustart erforderlich +settings_common_label = COMMON-EINSTELLUNGEN +settings_excluded_items = EXKLUDETE ITEMS (Glob-Muster, durch Komma getrennt) +settings_excluded_items_placeholder = z.B. *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = EXTENSIONEN ERLAUBEN (leer = alle) +settings_allowed_extensions_placeholder = z.B. jpg, png, mp4 +settings_excluded_extensions = AUSSCHLIESSLICHE EXTENSIONEN +settings_excluded_extensions_placeholder = z.B. bak, tmp, log +# Settings - Tools section labels +settings_duplicates_header = DUPLIKATEN +settings_check_method_label = COMPARISON-METHOD +settings_check_method = Methode +settings_hash_type_label = HASH-Typ +settings_hash_type = Hash Typ +settings_hash_type_desc = Blake3 - wird empfohlen, CRC32 haben eine geringe Chance auf Fehlalarme +settings_similar_images_header = ÄHNLICHE BILDER +settings_similarity_preset = Ähnlichkeitsschwelle +settings_similarity_desc = Sehr hoch = nur fast identisch +settings_hash_size = Hash-Größe +settings_hash_size_desc = Größere Größen, weniger falsche Positive, aber weniger ähnliche Bilder finden +settings_hash_alg = Hash-Algorithmus +settings_image_filter = Filter skalieren +settings_ignore_same_size = Bilder mit den gleichen Dimensionen ignorieren +settings_gallery_image_fit_cover = Galerie: auf Quadrat zuschneiden +settings_gallery_image_fit_cover_desc = Füllen Sie die Kachel; deaktivieren um das ursprüngliche Seitenverhältnis zu behalten +settings_big_files_header = BIGGESTE DATEIEN +settings_search_mode = Suchmodus +settings_file_count = Dateigröße +settings_same_music_header = MUSISCHE DUPLIKATEN +settings_music_check_method = Vergleichsmodus +settings_music_compare_tags_label = GESCHLOSSENE TAGS +settings_music_title = Titel +settings_music_artist = Künstler +settings_music_year = Jahr +settings_music_length = Länge +settings_music_genre = Genre +settings_music_bitrate = Bitrate +settings_music_approx = Ungefährer Tag-Vergleich +settings_broken_files_header = BROKEN DATEIEN +settings_broken_files_note = Ressourcenintensiver Scan. Für beste Performance verwenden Sie Krokiet auf dem Desktop. +settings_broken_files_types_label = GESCHÄFTSTYPEN +settings_broken_audio = Audio +settings_broken_pdf = PDF +settings_broken_archive = Archivieren +settings_broken_image = Bild +settings_bad_names_header = SCHLECHTE BEZEICHNUNGEN +settings_bad_names_checks_label = PRÜFUNGEN +settings_bad_names_uppercase_ext = Großbuchstaben Erweiterung +settings_bad_names_emoji = Emoji im Namen +settings_bad_names_space = Leerzeichen am Start/Ende +settings_bad_names_non_ascii = Nicht-ASCII-Zeichen +settings_bad_names_duplicated = Wiederholte Zeichen +# Settings - Diagnostics tab +diagnostics_header = DIAGNOSTIK +diagnostics_thumbnails = Miniaturansicht-Cache +diagnostics_app_cache = App-Cache +diagnostics_refresh = Aktualisieren +diagnostics_clear_thumbnails = Thumbnails löschen +diagnostics_open_thumbnails_folder = Ordner öffnen +diagnostics_clear_cache = Cache leeren +diagnostics_open_cache_folder = Ordner öffnen +diagnostics_collect_test = Datei-Zugriffstest +diagnostics_collect_test_desc = Überprüfen Sie, wie viele Dateien zugänglich sind +diagnostics_collect_test_run = Ausführen +diagnostics_collect_test_stop = Stoppen +collect_test_cancelled = Stoppt von Benutzer +diag_confirm_clear_thumbnails = Thumbnail-Cache löschen? +diag_confirm_clear_cache = Alle App-Cache löschen? +about_repo = Repository +about_translate = Übersetzungen +about_donate = Unterstützung +# Collect-test result popup +collect_test_title = Testergebnisse +collect_test_volumes = Lautstärke: +collect_test_folders = Ordner: +collect_test_files = Dateien: +collect_test_time = Zeit: +# Licenses +licenses_label = LIZENZ +third_party_licenses = Drittlizenzen +licenses_popup_title = Drittanbieter-Lizenzen +# Directories screen +directories_include_header = Einschließen +directories_included = Beinhaltet +directories_exclude_header = Ausschließen +directories_excluded_header = Ausgeschlossen +directories_add = Einschließen +no_paths = Keine Pfade - unten hinzufügen +directories_volume_header = Lautstärke +directories_volume_refresh = Aktualisieren +directories_volume_add = Neu +# Bottom navigation +nav_home = Start +nav_dirs = Verzeichnisse +nav_settings = Einstellungen +# Status messages set from Rust +status_ready = Bereit +status_stopped = Stoppt +status_no_results = Keine Ergebnisse +status_deleted_selected = Ausgewählte gelöscht +status_deleted_with_errors = Mit Fehlern gelöscht +scan_not_started = Scan nicht gestartet +found_items_prefix = Gefunden +found_items_suffix = gegenstände +deleted_items_prefix = Gelöscht +deleted_items_suffix = gegenstände +deleted_errors_suffix = Fehler +renamed_prefix = Umbenannt +renamed_files_suffix = Dateien +renamed_errors_suffix = Fehler +cleaned_exif_prefix = EXIF bereinigt von +cleaned_exif_suffix = Dateien +cleaned_exif_errors_suffix = Fehler +and_more_prefix = ...und +and_more_suffix = mehr +# Gallery / delete popups +gallery_delete_button = Löschen +gallery_back = Zurück +gallery_confirm_delete = Ja, löschen +deleting_files = Lösche Dateien... +stop = Stoppen +files_suffix = Dateien +scanning_fallback = Scanne... +app_subtitle = Zu Ehren der Schlacht von Cedynia (972 n. Chr.) +app_license = Frontend für Czkawka Core - GPL-3.0 +about_app_label = ÜBER +cache_label = CACHE +# Notification +scan_completed_notification = Scannen abgeschlossen - { $file_count } Elemente gefunden +# Confirm popups (set from Rust) +confirm_clean_exif = Sind Sie sicher, dass Sie EXIF-Tags von { $n } ausgewählten Dateien löschen möchten? +confirm_delete_items = Sind Sie sicher, dass Sie die ausgewählten Elemente { $n } löschen möchten? +gallery_confirm_delete_msg = Sie sind dabei { $total_images } Bilder in { $total_groups } Gruppen zu löschen. +gallery_confirm_delete_warning = Alle Elemente sind in { $unsafe_groups } Gruppen ausgewählt! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = Die Berechnung und der Vergleich von Audio-Fingerabdrücken ist sehr ressourcenintensiv und kann sehr lange dauern. Es wird empfohlen, Krokiet auf einem Desktop-System für diese Aufgabe zu verwenden. +# Scan stage labels (shown during scan progress) +stage_collecting_files = Sammeln von Dateien +stage_scanning_name = Suche nach Name +stage_scanning_size_name = Suche nach Name und Größe +stage_scanning_size = Suche nach Größe +stage_pre_hash = Vorhashing +stage_full_hash = Hashing +stage_loading_cache = Cache wird geladen +stage_saving_cache = Cache speichern +stage_calculating_image_hashes = Berechne Bildhashes +stage_comparing_images = Bilder vergleichen +stage_calculating_video_hashes = Berechne Video-Hashes +stage_checking_files = Überprüfe Dateien +stage_checking_extensions = Überprüfe Erweiterungen +stage_checking_names = Überprüfe Namen +stage_reading_music_tags = Liest Musik-Tags +stage_comparing_tags = Tags vergleichen +stage_calculating_music_fingerprints = Musik-Fingerabdrücke berechnen +stage_comparing_fingerprints = Fingerabdrücke vergleichen +stage_extracting_exif = Lese EXIF-Tags +stage_creating_video_thumbnails = Erstelle Video-Thumbnails +stage_processing_videos = Videos werden verarbeitet +stage_deleting = Lösche Dateien +stage_renaming = Dateien umbenennen +stage_moving = Dateien verschieben +stage_hardlinking = Erstellen von harten Links +stage_symlinking = Erstelle Symlinks +stage_optimizing_videos = Videos optimieren +stage_cleaning_exif = Reinige EXIF +# Group headers in scan results +duplicates_group_header = { $count } Dateien x { $per_file } / file = { $total } gesamt +similar_images_group_header = { $count } ähnliche Bilder +same_music_group_header = { $count } ähnliche Tracks +# Rename confirmation +confirm_rename_items = Sind Sie sicher, dass Sie die ausgewählten Dateien umbenennen möchten { $n}? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = Größte +option_search_mode_smallest = Kleinste +option_similarity_very_high = V.Hoch +option_similarity_high = Hoch +option_similarity_medium = Mittel +option_similarity_low = Niedrig +option_similarity_very_low = V.Niedrig +option_similarity_minimal = Min. +option_check_method_hash = Hash +option_check_method_name = Name +option_check_method_size_and_name = Größe+Name +option_check_method_size = Größe +option_music_method_tags = Tags +option_music_method_audio = Audio +option_min_size_none = Keine +option_min_size_1kb = 1 KB +option_min_size_8kb = 8 KB +option_min_size_64kb = 64 KB +option_min_size_1mb = 1 MB +option_max_size_16kb = 16 KB +option_max_size_1mb = 1 MB +option_max_size_10mb = 10 MB +option_max_size_100mb = 100 MB +option_max_size_unlimited = Unbegrenzt +# Volume labels (shown in the directories screen) +volume_internal_storage = Interner Speicher +volume_sd_card = Speicherkarte (SD-Karte) +volume_storage = Speicherlautstärke +# Directories screen +directories_referenced_tooltip = Verwiesen (nicht gelöscht) +directories_include_section_header = EINSCHLIESSLICH +directories_exclude_section_header = AUSSCHLIESSLICH +directories_custom_paths = Eigene Pfade +directories_check_button = Analysieren +directories_check_popup_title = Verzeichnisstatistik +directories_check_label_included = Inklusive Pfade: +directories_check_label_excluded = Ausgeschlossene Pfade: +directories_check_label_referenced = Referenzpfad: +directories_check_label_would_scan = Zu scannende Dateien: +directories_check_label_processable = Verarbeitbare Dateien: +directories_check_scanning = Scanne... +directories_check_warning_no_processable = Keine verarbeitbaren Dateien gefunden - überprüfen Sie die enthaltenen oder ausgeschlossenen Ordner +path_edit_title_include = Hinzufügen +path_edit_title_exclude = Zu Ausschluss hinzufügen +path_edit_placeholder = Pfad eingeben... +path_edit_not_exists = Pfad existiert nicht +path_edit_is_dir = Verzeichnis +path_edit_is_file = Datei +path_edit_no_newlines = Pfade dürfen keine Zeilenumbrüche enthalten — Eingabe ist nicht erlaubt +ctx_menu_title = Öffnen +ctx_open_file = Element öffnen +ctx_open_folder = Eltern-Ordner öffnen diff --git a/cedinia/i18n/el/cedinia.ftl b/cedinia/i18n/el/cedinia.ftl new file mode 100644 index 000000000..fe20b9467 --- /dev/null +++ b/cedinia/i18n/el/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = Διπλότυπα +tool_empty_folders = Άδειασμα Φακέλων +tool_similar_images = Παρόμοιες Εικόνες +tool_empty_files = Κενά Αρχεία +tool_temporary_files = Προσωρινά Αρχεία +tool_big_files = Μεγαλύτερα Αρχεία +tool_broken_files = Κατεστραμμένα Αρχεία +tool_bad_extensions = Εσφαλμένες Επεκτάσεις +tool_same_music = Αντίγραφο Μουσικής +tool_bad_names = Εσφαλμένα Ονόματα +tool_exif_remover = Δεδομένα EXIF +tool_directories = Κατάλογοι +tool_settings = Ρυθμίσεις +# Home screen tool card descriptions +home_dup_description = Εύρεση αρχείων με το ίδιο περιεχόμενο +home_empty_folders_description = Κατάλογοι χωρίς περιεχόμενο +home_similar_images_description = Βρείτε οπτικά παρόμοιες φωτογραφίες +home_empty_files_description = Αρχεία με μηδενικό μέγεθος +home_temp_files_description = Προσωρινά και προσωρινά αποθηκευμένα αρχεία +home_big_files_description = Μεγαλύτερα/Μικρότερα αρχεία στο δίσκο +home_broken_files_description = PDF, ήχος, εικόνες, αρχεία +home_bad_extensions_description = Αρχεία με μη έγκυρη επέκταση +home_same_music_description = Παρόμοια αρχεία ήχου από ετικέτες +home_bad_names_description = Αρχεία με προβληματικούς χαρακτήρες στο όνομα +home_exif_description = Εικόνες με μεταδεδομένα EXIF +# Results list +scanning = Σάρωση σε εξέλιξη... +stopping = Διακοπή... +no_results = Κανένα αποτέλεσμα +press_start = Πατήστε ΕΝΑΡΞΗ για σάρωση +select_label = Επιλογή. +deselect_label = Desel. +list_label = Λίστα +gallery_label = Γαλάτες. +# Selection popup +selection_popup_title = Επιλογή +select_all = Επιλογή όλων +select_except_one = Επιλογή όλων εκτός από ένα +select_except_largest = Επιλογή όλων εκτός από το μεγαλύτερο +select_except_smallest = Επιλογή όλων εκτός των μικρότερων +select_largest = Επιλογή μεγαλύτερου +select_smallest = Επιλέξτε το μικρότερο +select_except_highest_res = Επιλογή όλων εκτός από την υψηλότερη ανάλυση +select_except_lowest_res = Επιλογή όλων εκτός από τη χαμηλότερη ανάλυση +select_highest_res = Επιλέξτε την υψηλότερη ανάλυση +select_lowest_res = Επιλέξτε χαμηλότερη ανάλυση +invert_selection = Αντιστροφή επιλογής +close = Κλείσιμο +# Deselection popup +deselection_popup_title = Αποεπιλογή +deselect_all = Αποεπιλογή όλων +deselect_except_one = Αποεπιλογή όλων εκτός ενός +# Confirm popup +cancel = Ακύρωση +delete = Διαγραφή +rename = Μετονομασία +# Delete errors popup +delete_errors_title = Αποτυχία διαγραφής μερικών αρχείων: +ok = Εντάξει +# Stopping overlay +stopping_overlay_title = Διακοπή +stopping_overlay_body = + Ολοκληρώνεται η τρέχουσα σάρωση... + Παρακαλώ περιμένετε. +# Permission popup +permission_title = Πρόσβαση Αρχείου +permission_body = Για τη σάρωση αρχείων, η εφαρμογή χρειάζεται πρόσβαση στον αποθηκευτικό χώρο της συσκευής. Χωρίς αυτό το δικαίωμα, η σάρωση δεν θα είναι δυνατή. +grant = Παραχώρηση +no_permission_scan_warning = Δεν υπάρχει πρόσβαση σε αρχείο - χορηγήστε άδεια για σάρωση +# Settings screen tabs +settings_tab_general = Γενικά +settings_tab_tools = Εργαλεία +settings_tab_diagnostics = Πληροφορίες +# Settings - General tab +settings_use_cache = Χρήση προσωρινής μνήμης +settings_use_cache_desc = Επιταχύνει τις επόμενες σαρώσεις (hash/images) +settings_ignore_hidden = Παράβλεψη κρυφών αρχείων +settings_ignore_hidden_desc = Αρχεία και φάκελοι που αρχίζουν με '.' +settings_show_notification = Ειδοποίηση όταν τελειώνει η σάρωση +settings_show_notification_desc = Εμφάνιση μιας ειδοποίησης συστήματος κατά την ολοκλήρωση της σάρωσης +settings_notify_only_background = Μόνο στο παρασκήνιο +settings_notify_only_background_desc = Παράλειψη ειδοποίησης αν η εφαρμογή είναι ορατή +notifications_disabled_banner = Ειδοποιήσεις απενεργοποιημένες +notifications_enable_button = Ενεργοποίηση +settings_scan_label = ΣΑΡΩΣΗ +settings_filters_label = FILTERS (μερικά εργαλεία) +settings_min_file_size = Ελάχιστο μέγεθος αρχείου +settings_max_file_size = Μέγιστο μέγεθος αρχείου +settings_language = Γλώσσα +settings_language_restart = Απαιτεί επανεκκίνηση εφαρμογής +settings_common_label = ΚΟΙΝΕΣ ΡΥΘΜΙΣΕΙΣ +settings_excluded_items = ΑΝΤΑΛΛΑΓΜΕΝΑ ΣΤΟΙΧΕΙΑ (μοτίβα σύσφιγξης, χωρισμένα με κόμμα) +settings_excluded_items_placeholder = π.χ. *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = ΕΠΙΤΡΕΠΟΜΕΝΕΣ ΕΠΕΚΤΑΣΕΙΣ (κενό = όλα) +settings_allowed_extensions_placeholder = π.χ. jpg, png, mp4 +settings_excluded_extensions = ΑΠΑΛΛΑΓΕΣ ΕΠΕΚΤΑΣΕΙΣ +settings_excluded_extensions_placeholder = π.χ. bak, tmp, log +# Settings - Tools section labels +settings_duplicates_header = ΔΙΠΛΟΤΥΠΙΕΣ +settings_check_method_label = ΜΕΘΟΔΟΣ COMPARISON +settings_check_method = Μέθοδος +settings_hash_type_label = ΤΥΠΟΣ HASH +settings_hash_type = Τύπος κατακερματισμού +settings_hash_type_desc = Blake3 - συνιστάται η επιλογή, CRC32 έχουν μικρή πιθανότητα ψευδών θετικών +settings_similar_images_header = ΠΑΡΟΜΟΙΕΣ ΕΙΚΟΝΕΣ +settings_similarity_preset = Ομοιότητα ορίου +settings_similarity_desc = Πολύ υψηλό = μόνο σχεδόν πανομοιότυπη +settings_hash_size = Μέγεθος κατακερματισμού +settings_hash_size_desc = Μεγαλύτερα μεγέθη, έχουν λιγότερο ψευδείς θετικές, αλλά βρίσκει και λιγότερο παρόμοιες εικόνες +settings_hash_alg = Αλγόριθμος κατακερματισμού +settings_image_filter = Αλλαγή μεγέθους φίλτρου +settings_ignore_same_size = Παράβλεψη εικόνων με τις ίδιες διαστάσεις +settings_gallery_image_fit_cover = Συλλογή: περικοπή σε τετράγωνο +settings_gallery_image_fit_cover_desc = Συμπληρώστε το πλακίδιο; απενεργοποιήστε για να κρατήσετε την αρχική αναλογία διαστάσεων +settings_big_files_header = ΨΗΦΙΑΚΕΣ ΑΡΧΕΣ +settings_search_mode = Λειτουργία αναζήτησης +settings_file_count = Αριθμός αρχείων +settings_same_music_header = ΜΟΥΣΙΚΑ DUPLICATES +settings_music_check_method = Λειτουργία σύγκρισης +settings_music_compare_tags_label = ΣΥΝΟΛΙΚΑ ΣΤΟΙΧΕΙΑ +settings_music_title = Τίτλος +settings_music_artist = Καλλιτέχνης +settings_music_year = Έτος +settings_music_length = Μήκος +settings_music_genre = Είδος +settings_music_bitrate = Ρυθμός Bit +settings_music_approx = Κατά προσέγγιση σύγκριση ετικετών +settings_broken_files_header = ΠΕΡΙΣΣΟΤΕΡΑ BROKEN +settings_broken_files_note = Σάρωση έντασης πόρων. Για καλύτερη απόδοση χρησιμοποιήστε το Krokiet στην επιφάνεια εργασίας. +settings_broken_files_types_label = ΕΛΕΓΧΟΙ ΤΥΠΟΙ +settings_broken_audio = Ήχος +settings_broken_pdf = PDF +settings_broken_archive = Αρχειοθέτηση +settings_broken_image = Εικόνα +settings_bad_names_header = ΚΑΚΑ ΟΝΟΜΑΤΑ +settings_bad_names_checks_label = ΕΛΕΓΧΟΙ +settings_bad_names_uppercase_ext = Επέκταση κεφαλαίων +settings_bad_names_emoji = Emoji στο όνομα +settings_bad_names_space = Χώροι στην έναρξη/λήξη +settings_bad_names_non_ascii = Χαρακτήρες που δεν ανήκουν στο σύνολο ASCII +settings_bad_names_duplicated = Επαναλαμβανόμενοι χαρακτήρες +# Settings - Diagnostics tab +diagnostics_header = ΔΙΑΓΝΩΣΤΙΚΕΣ +diagnostics_thumbnails = Προσωρινή μνήμη για μικρογραφίες +diagnostics_app_cache = Προσωρινή μνήμη εφαρμογής +diagnostics_refresh = Ανανέωση +diagnostics_clear_thumbnails = Εκκαθάριση μικρογραφιών +diagnostics_open_thumbnails_folder = Άνοιγμα φακέλου +diagnostics_clear_cache = Εκκαθάριση προσωρινής μνήμης +diagnostics_open_cache_folder = Άνοιγμα φακέλου +diagnostics_collect_test = Δοκιμή πρόσβασης αρχείου +diagnostics_collect_test_desc = Ελέγξτε πόσα αρχεία είναι προσβάσιμα +diagnostics_collect_test_run = Εκτέλεση +diagnostics_collect_test_stop = Διακοπή +collect_test_cancelled = Διακόπηκε από το χρήστη +diag_confirm_clear_thumbnails = Εκκαθάριση όλων των μικρογραφιών cache? +diag_confirm_clear_cache = Εκκαθάριση όλων των cache? +about_repo = Αποθετήριο +about_translate = Μεταφράσεις +about_donate = Υποστήριξη +# Collect-test result popup +collect_test_title = Αποτελέσματα δοκιμής +collect_test_volumes = Τόμοι: +collect_test_folders = Φάκελοι: +collect_test_files = Αρχεία: +collect_test_time = Ώρα: +# Licenses +licenses_label = ΑΔΕΙΑ +third_party_licenses = Άδειες τρίτων +licenses_popup_title = Άδειες Τρίτων +# Directories screen +directories_include_header = Συμπερίληψη +directories_included = Περιλαμβάνεται +directories_exclude_header = Εξαίρεση +directories_excluded_header = Εξαιρούνται +directories_add = Συμπερίληψη +no_paths = Δεν υπάρχουν διαδρομές - προσθέστε παρακάτω +directories_volume_header = Ένταση +directories_volume_refresh = Ανανέωση +directories_volume_add = Προσθήκη +# Bottom navigation +nav_home = Έναρξη +nav_dirs = Κατάλογοι +nav_settings = Ρυθμίσεις +# Status messages set from Rust +status_ready = Έτοιμο +status_stopped = Διακόπηκε +status_no_results = Κανένα αποτέλεσμα +status_deleted_selected = Διαγραμμένα επιλεγμένα +status_deleted_with_errors = Διαγράφηκε με σφάλματα +scan_not_started = Η σάρωση δεν ξεκίνησε +found_items_prefix = Βρέθηκαν +found_items_suffix = αντικείμενα +deleted_items_prefix = Διαγράφηκε +deleted_items_suffix = αντικείμενα +deleted_errors_suffix = σφάλματα +renamed_prefix = Μετονομάστηκε +renamed_files_suffix = αρχεία +renamed_errors_suffix = σφάλματα +cleaned_exif_prefix = Εκκαθάριση EXIF από +cleaned_exif_suffix = αρχεία +cleaned_exif_errors_suffix = σφάλματα +and_more_prefix = ...και +and_more_suffix = περισσότερα +# Gallery / delete popups +gallery_delete_button = Διαγραφή +gallery_back = Πίσω +gallery_confirm_delete = Ναι, διαγραφή +deleting_files = Διαγραφή αρχείων... +stop = Διακοπή +files_suffix = αρχεία +scanning_fallback = Σάρωση... +app_subtitle = Προς τιμήν της Μάχης της Cedynia (972 CE) +app_license = Frontend για Czkawka Core - GPL-3.0 +about_app_label = ΣΧΕΤΙΚΑ +cache_label = CACHE +# Notification +scan_completed_notification = Η σάρωση ολοκληρώθηκε - βρέθηκαν { $file_count } στοιχεία +# Confirm popups (set from Rust) +confirm_clean_exif = Είστε σίγουροι ότι θέλετε να διαγράψετε τις ετικέτες EXIF από τα { $n } επιλεγμένα αρχεία; +confirm_delete_items = Είστε σίγουροι ότι θέλετε να διαγράψετε { $n } επιλεγμένα αντικείμενα; +gallery_confirm_delete_msg = Ετοιμάζεστε να διαγράψετε { $total_images } εικόνες σε { $total_groups } ομάδες. +gallery_confirm_delete_warning = Όλα τα στοιχεία επιλέχθηκαν σε { $unsafe_groups } ομάδες! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = Υπολογισμός και σύγκριση ήχου δακτυλικά αποτυπώματα είναι πολύ έντασης πόρων και μπορεί να διαρκέσει πολύ. Συνιστάται η χρήση του Krokiet σε ένα επιτραπέζιο σύστημα για αυτήν την εργασία. +# Scan stage labels (shown during scan progress) +stage_collecting_files = Συλλογή αρχείων +stage_scanning_name = Σάρωση με όνομα +stage_scanning_size_name = Σάρωση κατά όνομα και μέγεθος +stage_scanning_size = Σάρωση ανά μέγεθος +stage_pre_hash = Προ-κατακερματισμός +stage_full_hash = Κατακερματισμός +stage_loading_cache = Φόρτωση προσωρινής μνήμης +stage_saving_cache = Αποθήκευση προσωρινής μνήμης +stage_calculating_image_hashes = Υπολογισμός κατακερμάτων εικόνας +stage_comparing_images = Σύγκριση εικόνων +stage_calculating_video_hashes = Υπολογισμός κατακερμάτων βίντεο +stage_checking_files = Έλεγχος αρχείων +stage_checking_extensions = Έλεγχος επεκτάσεων +stage_checking_names = Έλεγχος ονομάτων +stage_reading_music_tags = Ετικέτες ανάγνωσης μουσικής +stage_comparing_tags = Σύγκριση ετικετών +stage_calculating_music_fingerprints = Υπολογισμός δακτυλικών αποτυπωμάτων μουσικής +stage_comparing_fingerprints = Σύγκριση δακτυλικών αποτυπωμάτων +stage_extracting_exif = Ανάγνωση ετικετών EXIF +stage_creating_video_thumbnails = Δημιουργία μικρογραφιών βίντεο +stage_processing_videos = Επεξεργασία βίντεο +stage_deleting = Διαγραφή αρχείων +stage_renaming = Μετονομασία αρχείων +stage_moving = Μετακίνηση αρχείων +stage_hardlinking = Δημιουργία σκληρών συνδέσμων +stage_symlinking = Δημιουργία symlinks +stage_optimizing_videos = Βελτιστοποίηση βίντεο +stage_cleaning_exif = Καθαρισμός EXIF +# Group headers in scan results +duplicates_group_header = { $count } αρχεία x { $per_file } / αρχείο = { $total } συνολικά +similar_images_group_header = { $count } παρόμοιες εικόνες +same_music_group_header = { $count } παρόμοια κομμάτια +# Rename confirmation +confirm_rename_items = Είστε σίγουροι ότι θέλετε να μετονομάσετε τα { $n } επιλεγμένα αρχεία; +# Combo-box option labels (translatable display names) +option_search_mode_biggest = Μεγαλύτερο +option_search_mode_smallest = Μικρότερο +option_similarity_very_high = Πολύ Υψηλό +option_similarity_high = Υψηλή +option_similarity_medium = Μεσαίο +option_similarity_low = Χαμηλή +option_similarity_very_low = V. Πολύ χαμηλό +option_similarity_minimal = Ελάχ. +option_check_method_hash = Κατακερματισμός +option_check_method_name = Όνομα +option_check_method_size_and_name = Μέγεθος+Όνομα +option_check_method_size = Μέγεθος +option_music_method_tags = Ετικέτες +option_music_method_audio = Ήχος +option_min_size_none = Κανένα +option_min_size_1kb = 1 KB +option_min_size_8kb = 8 KB +option_min_size_64kb = 64 KB +option_min_size_1mb = 1 MB +option_max_size_16kb = 16 KB +option_max_size_1mb = 1 MB +option_max_size_10mb = 10 MB +option_max_size_100mb = 100 MB +option_max_size_unlimited = Απεριόριστο +# Volume labels (shown in the directories screen) +volume_internal_storage = Εσωτερικός Χώρος Αποθήκευσης +volume_sd_card = Κάρτα Μνήμης (Κάρτα SD) +volume_storage = Όγκος Αποθήκευσης +# Directories screen +directories_referenced_tooltip = Αναφορά (δεν διαγράφεται) +directories_include_section_header = ΣΥΜΠΕΡΙΛΑΜΒΑΝΟΜΕΝΑ +directories_exclude_section_header = ΑΠΑΝΤΗΣΗ +directories_custom_paths = Προσαρμοσμένες Διαδρομές +directories_check_button = Ανάλυση +directories_check_popup_title = Στατιστικά Καταλόγου +directories_check_label_included = Περιλαμβανόμενες διαδρομές: +directories_check_label_excluded = Εξαιρούμενες διαδρομές: +directories_check_label_referenced = Διαδρομές αναφοράς: +directories_check_label_would_scan = Αρχεία προς σάρωση: +directories_check_label_processable = Επεξεργασμένα αρχεία: +directories_check_scanning = Σάρωση... +directories_check_warning_no_processable = Δεν βρέθηκαν επεξεργάσιμα αρχεία - επαληθεύστε τους συμπεριλαμβανόμενους/εξαιρούμενους φακέλους σας +path_edit_title_include = Προσθήκη σε Συμπερίληψη +path_edit_title_exclude = Προσθήκη στο Exclue +path_edit_placeholder = Εισάγετε διαδρομή... +path_edit_not_exists = Η διαδρομή δεν υπάρχει +path_edit_is_dir = Κατάλογος +path_edit_is_file = Αρχείο +path_edit_no_newlines = Οι διαδρομές δεν μπορούν να περιέχουν νέες γραμμές - Δεν επιτρέπεται η εισαγωγή κλειδιού +ctx_menu_title = Άνοιγμα +ctx_open_file = Άνοιγμα αντικειμένου +ctx_open_folder = Άνοιγμα γονικού φακέλου diff --git a/cedinia/i18n/en/cedinia.ftl b/cedinia/i18n/en/cedinia.ftl index 26365b8d6..0ad035772 100644 --- a/cedinia/i18n/en/cedinia.ftl +++ b/cedinia/i18n/en/cedinia.ftl @@ -302,14 +302,6 @@ option_check_method_size = Size option_music_method_tags = Tags option_music_method_audio = Audio option_min_size_none = None -option_min_size_1kb = 1 KB -option_min_size_8kb = 8 KB -option_min_size_64kb = 64 KB -option_min_size_1mb = 1 MB -option_max_size_16kb = 16 KB -option_max_size_1mb = 1 MB -option_max_size_10mb = 10 MB -option_max_size_100mb = 100 MB option_max_size_unlimited = Unlimited # Volume labels (shown in the directories screen) @@ -342,4 +334,5 @@ path_edit_no_newlines = Paths cannot contain newlines — Enter key is not allow ctx_menu_title = Open ctx_open_file = Open item ctx_open_folder = Open parent folder +dir_open_folder = Open folder diff --git a/cedinia/i18n/es-ES/cedinia.ftl b/cedinia/i18n/es-ES/cedinia.ftl new file mode 100644 index 000000000..25a4c0071 --- /dev/null +++ b/cedinia/i18n/es-ES/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = Duplicados +tool_empty_folders = Carpetas vacías +tool_similar_images = Imágenes similares +tool_empty_files = Archivos vacíos +tool_temporary_files = Archivos temporales +tool_big_files = Archivos grandiosos +tool_broken_files = Archivos rotos +tool_bad_extensions = Extensiones incorrectas +tool_same_music = Duplicados de música +tool_bad_names = Nombres incorrectos +tool_exif_remover = Datos EXIF +tool_directories = Directorios +tool_settings = Ajustes +# Home screen tool card descriptions +home_dup_description = Buscar archivos con el mismo contenido +home_empty_folders_description = Directorios sin contenido +home_similar_images_description = Buscar fotos similares visualmente +home_empty_files_description = Archivos con tamaño cero +home_temp_files_description = Archivos temporales y cachés +home_big_files_description = Archivos más pequeños en el disco +home_broken_files_description = PDF, audio, imágenes, archivos +home_bad_extensions_description = Archivos con extensión inválida +home_same_music_description = Ficheros de audio similares por etiquetas +home_bad_names_description = Archivos con caracteres problemáticos en el nombre +home_exif_description = Imágenes con metadatos EXIF +# Results list +scanning = Escaneando en progreso... +stopping = Deteniendo... +no_results = Sin resultados +press_start = Presione START para escanear +select_label = Sel. +deselect_label = Desel. +list_label = Lista +gallery_label = Gal. +# Selection popup +selection_popup_title = Seleccionar +select_all = Seleccionar todo +select_except_one = Seleccionar todo excepto uno +select_except_largest = Seleccionar todo excepto mayor +select_except_smallest = Seleccionar todo excepto menor +select_largest = Seleccionar más grande +select_smallest = Seleccionar más pequeño +select_except_highest_res = Seleccionar todo excepto la resolución más alta +select_except_lowest_res = Seleccionar todo excepto la resolución más baja +select_highest_res = Seleccionar resolución más alta +select_lowest_res = Selecciona la resolución más baja +invert_selection = Invertir selección +close = Cerrar +# Deselection popup +deselection_popup_title = Deseleccionar +deselect_all = Deseleccionar todo +deselect_except_one = Deseleccionar todo excepto uno +# Confirm popup +cancel = Cancelar +delete = Eliminar +rename = Renombrar +# Delete errors popup +delete_errors_title = Error al eliminar algunos archivos: +ok = Ok +# Stopping overlay +stopping_overlay_title = Deteniendo +stopping_overlay_body = + Finalizando el escaneo actual... + Por favor espere. +# Permission popup +permission_title = Acceso al archivo +permission_body = Para escanear archivos, la aplicación necesita acceso al almacenamiento del dispositivo. Sin este permiso, no será posible escanear. +grant = Otorgar +no_permission_scan_warning = Sin acceso al archivo - conceder permiso para escanear +# Settings screen tabs +settings_tab_general = General +settings_tab_tools = Herramientas +settings_tab_diagnostics = Información +# Settings - General tab +settings_use_cache = Usar caché +settings_use_cache_desc = Acelera los análisis subsiguientes (hash/imágenes) +settings_ignore_hidden = Ignorar archivos ocultos +settings_ignore_hidden_desc = Archivos y carpetas que empiezan con '.' +settings_show_notification = Notificar cuando finalice el escaneo +settings_show_notification_desc = Mostrar una notificación del sistema al completar el escaneo +settings_notify_only_background = Sólo en segundo plano +settings_notify_only_background_desc = Omitir notificación si la aplicación es visible +notifications_disabled_banner = Notificaciones desactivadas +notifications_enable_button = Activar +settings_scan_label = ESCAN +settings_filters_label = ARCHIVOS (algunas herramientas) +settings_min_file_size = Tamaño mínimo del archivo +settings_max_file_size = Tamaño máximo de archivo +settings_language = Idioma +settings_language_restart = Requiere reiniciar la aplicación +settings_common_label = SETINGOS DE COMON +settings_excluded_items = ITEMS EXCLUIDO (patrones de glob, separados por comas) +settings_excluded_items_placeholder = ej. *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = EXTENSIONES ALLOWADAS (vacío = todo) +settings_allowed_extensions_placeholder = ej. jpg, png, mp4 +settings_excluded_extensions = EXTENSIONES EXCLUIDAS +settings_excluded_extensions_placeholder = ej. bak, tmp, log +# Settings - Tools section labels +settings_duplicates_header = DUPLICADOS +settings_check_method_label = MÉTODO DE COMPARISÓN +settings_check_method = Método +settings_hash_type_label = TIPO HASH +settings_hash_type = Tipo de Hash +settings_hash_type_desc = Blake3 - es la opción recomendada, CRC32 tiene pequeñas probabilidades de falsos positivos +settings_similar_images_header = IMÁGENES DE SIMILAR +settings_similarity_preset = Umbral de similitud +settings_similarity_desc = Muy alto = sólo casi idéntico +settings_hash_size = Tamaño hash +settings_hash_size_desc = Tamaños más grandes, tienen menos falsos positivos, pero también encuentran menos imágenes similares +settings_hash_alg = Algoritmo hash +settings_image_filter = Redimensionar filtro +settings_ignore_same_size = Ignorar imágenes con las mismas dimensiones +settings_gallery_image_fit_cover = Galería: recortar a cuadrado +settings_gallery_image_fit_cover_desc = Rellena el azulejo; desactiva para mantener la relación de aspecto original +settings_big_files_header = ARCHIVOS DE MEJOR +settings_search_mode = Modo de búsqueda +settings_file_count = Número de archivos +settings_same_music_header = DUPLICADOS MÚSICOS +settings_music_check_method = Modo de comparación +settings_music_compare_tags_label = TARJETAS COMPARADAS +settings_music_title = Título +settings_music_artist = Artista +settings_music_year = Año +settings_music_length = Longitud +settings_music_genre = Género +settings_music_bitrate = Tasa de bits +settings_music_approx = Comparación aproximada de etiquetas +settings_broken_files_header = ARCHIVOS DE BROKEN +settings_broken_files_note = Escaneo intensivo de recursos. Para un mejor rendimiento utilice Krokiet en el ordenador. +settings_broken_files_types_label = TIPOS CHECKADOS +settings_broken_audio = Audio +settings_broken_pdf = DF +settings_broken_archive = Archivar +settings_broken_image = Imagen +settings_bad_names_header = NOMBRES DE BAD +settings_bad_names_checks_label = CHEQUES +settings_bad_names_uppercase_ext = Extensión mayúsculas +settings_bad_names_emoji = Emoji en el nombre +settings_bad_names_space = Espacios al inicio/fin +settings_bad_names_non_ascii = Caracteres no ASCII +settings_bad_names_duplicated = Caracteres repetidos +# Settings - Diagnostics tab +diagnostics_header = DIAGNÓSTICO +diagnostics_thumbnails = Caché de miniaturas +diagnostics_app_cache = Caché de App +diagnostics_refresh = Refrescar +diagnostics_clear_thumbnails = Limpiar uñas +diagnostics_open_thumbnails_folder = Abrir carpeta +diagnostics_clear_cache = Limpiar caché +diagnostics_open_cache_folder = Abrir carpeta +diagnostics_collect_test = Prueba de acceso de archivo +diagnostics_collect_test_desc = Comprobar cuántos archivos son accesibles +diagnostics_collect_test_run = Ejecutar +diagnostics_collect_test_stop = Parar +collect_test_cancelled = Detenido por el usuario +diag_confirm_clear_thumbnails = ¿Borrar todos los cachés en miniatura? +diag_confirm_clear_cache = ¿Borrar todo el caché de aplicaciones? +about_repo = Repositorio +about_translate = Traducciones +about_donate = Soporte +# Collect-test result popup +collect_test_title = Resultados de la prueba +collect_test_volumes = Volúmenes: +collect_test_folders = Carpetas: +collect_test_files = Archivos: +collect_test_time = Tiempo: +# Licenses +licenses_label = LICENCIA +third_party_licenses = Licencias de terceros +licenses_popup_title = Licencias de terceros +# Directories screen +directories_include_header = Incluye +directories_included = Incluye +directories_exclude_header = Excluir +directories_excluded_header = Excluido +directories_add = Incluye +no_paths = No hay rutas - añadir abajo +directories_volume_header = Volúmenes +directories_volume_refresh = Refrescar +directories_volume_add = Añadir +# Bottom navigation +nav_home = Comenzar +nav_dirs = Directorios +nav_settings = Ajustes +# Status messages set from Rust +status_ready = Listo +status_stopped = Detenido +status_no_results = Sin resultados +status_deleted_selected = Borrado seleccionado +status_deleted_with_errors = Eliminado con errores +scan_not_started = Escaneo no iniciado +found_items_prefix = Encontrado +found_items_suffix = objetos +deleted_items_prefix = Eliminado +deleted_items_suffix = objetos +deleted_errors_suffix = errores +renamed_prefix = Renombrado +renamed_files_suffix = archivos +renamed_errors_suffix = errores +cleaned_exif_prefix = EXIF limpiado de +cleaned_exif_suffix = archivos +cleaned_exif_errors_suffix = errores +and_more_prefix = ...y +and_more_suffix = más +# Gallery / delete popups +gallery_delete_button = Eliminar +gallery_back = Atrás +gallery_confirm_delete = Sí, eliminar +deleting_files = Eliminando archivos... +stop = Parar +files_suffix = archivos +scanning_fallback = Escaneando... +app_subtitle = En honor a la batalla de Cedynia (972 CE) +app_license = Frontend para el núcleo del kawka - GPL-3.0 +about_app_label = AYUDA +cache_label = CACHÉ +# Notification +scan_completed_notification = Escaneo completado - { $file_count } elementos encontrados +# Confirm popups (set from Rust) +confirm_clean_exif = ¿Está seguro que desea limpiar etiquetas EXIF de { $n } archivos seleccionados? +confirm_delete_items = ¿Está seguro que desea eliminar { $n } elementos seleccionados? +gallery_confirm_delete_msg = Estás a punto de eliminar las imágenes { $total_images } en los grupos { $total_groups}. +gallery_confirm_delete_warning = Todos los elementos están seleccionados en grupos { $unsafe_groups}! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = Calcular y comparar las huellas dactilares de audio es muy intensivo en recursos y puede llevar mucho tiempo. Se recomienda usar Krokiet en un sistema de escritorio para esta tarea. +# Scan stage labels (shown during scan progress) +stage_collecting_files = Recopilando archivos +stage_scanning_name = Escaneando por nombre +stage_scanning_size_name = Escaneando por nombre y tamaño +stage_scanning_size = Escaneo por tamaño +stage_pre_hash = Pre-hash +stage_full_hash = Hashing +stage_loading_cache = Cargando caché +stage_saving_cache = Guardando caché +stage_calculating_image_hashes = Calculando hash de imagen +stage_comparing_images = Comparando imágenes +stage_calculating_video_hashes = Calculando hash de vídeo +stage_checking_files = Comprobando archivos +stage_checking_extensions = Comprobando extensiones +stage_checking_names = Comprobando nombres +stage_reading_music_tags = Leyendo etiquetas de música +stage_comparing_tags = Comparando etiquetas +stage_calculating_music_fingerprints = Calculando huellas musicales +stage_comparing_fingerprints = Comparando huellas dactilares +stage_extracting_exif = Leyendo etiquetas EXIF +stage_creating_video_thumbnails = Creando miniaturas de vídeo +stage_processing_videos = Procesando vídeos +stage_deleting = Eliminando archivos +stage_renaming = Renombrar archivos +stage_moving = Moviendo archivos +stage_hardlinking = Creando enlaces duros +stage_symlinking = Creando enlaces simbólicos +stage_optimizing_videos = Optimizando vídeos +stage_cleaning_exif = Limpiando EXIF +# Group headers in scan results +duplicates_group_header = { $count } archivos x { $per_file } / file = { $total } en total +similar_images_group_header = { $count } imágenes similares +same_music_group_header = { $count } pistas similares +# Rename confirmation +confirm_rename_items = ¿Está seguro que desea renombrar los archivos seleccionados { $n}? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = Grandeza +option_search_mode_smallest = Pequeño +option_similarity_very_high = V.alto +option_similarity_high = Alta +option_similarity_medium = Medio +option_similarity_low = Baja +option_similarity_very_low = V.Muy bajo +option_similarity_minimal = Mín. +option_check_method_hash = Hash +option_check_method_name = Nombre +option_check_method_size_and_name = Tamaño+Nombre +option_check_method_size = Tamaño +option_music_method_tags = Etiquetas +option_music_method_audio = Audio +option_min_size_none = Ninguna +option_min_size_1kb = 1 KB +option_min_size_8kb = 8 KB +option_min_size_64kb = 64 KB +option_min_size_1mb = 1 MB +option_max_size_16kb = 16 KB +option_max_size_1mb = 1 MB +option_max_size_10mb = 10 MB +option_max_size_100mb = 100 MB +option_max_size_unlimited = Ilimitado +# Volume labels (shown in the directories screen) +volume_internal_storage = Almacenamiento interno +volume_sd_card = Tarjeta de memoria (tarjeta SD) +volume_storage = Volumen de almacenamiento +# Directories screen +directories_referenced_tooltip = Referenciado (no eliminado) +directories_include_section_header = INCLUIDO +directories_exclude_section_header = EXCLUIDO +directories_custom_paths = Rutas personalizadas +directories_check_button = Analizar +directories_check_popup_title = Estadísticas del directorio +directories_check_label_included = Rutas incluidas: +directories_check_label_excluded = Rutas excluidas: +directories_check_label_referenced = Rutas de referencia: +directories_check_label_would_scan = Archivos a escanear: +directories_check_label_processable = Archivos procesables: +directories_check_scanning = Escaneando... +directories_check_warning_no_processable = No se encontraron archivos procesables - verifique sus carpetas incluidas/excluidas +path_edit_title_include = Añadir a inclusión +path_edit_title_exclude = Añadir a Excluir +path_edit_placeholder = Entrar ruta... +path_edit_not_exists = La ruta no existe +path_edit_is_dir = Directorio +path_edit_is_file = Fichero +path_edit_no_newlines = Las rutas no pueden contener nuevas líneas — No se permite introducir la clave +ctx_menu_title = Abrir +ctx_open_file = Abrir elemento +ctx_open_folder = Abrir carpeta padre diff --git a/cedinia/i18n/fa/cedinia.ftl b/cedinia/i18n/fa/cedinia.ftl new file mode 100644 index 000000000..03a3e6fc4 --- /dev/null +++ b/cedinia/i18n/fa/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = سدینیا +tool_duplicate_files = 副本 +tool_empty_folders = _folders تهی завدهندی +tool_similar_images = تصویرهای مشابه +tool_empty_files = فایل‌های خالی +tool_temporary_files = فایل‌های موقت +tool_big_files = بزرگترین فایل‌ها +tool_broken_files = فایل‌های شکسته +tool_bad_extensions = مدیریت‌های بد +tool_same_music = دупلیکات مузیک +tool_bad_names = نام‌های بد +tool_exif_remover = داده‌های EXIF +tool_directories = دایرکتوری‌ها +tool_settings = تنظیمات +# Home screen tool card descriptions +home_dup_description = فایل‌هایی را پیدا کنید که محتوای یکسانی داشته باشند +home_empty_folders_description = دایرکتوری‌هایی که فاقد محتوا هستند +home_similar_images_description = عکس‌هایی را پیدا کنید که از نظر بصری شبیه به عکس مورد نظر شما باشند +home_empty_files_description = فایل‌هایی با حجم صفر +home_temp_files_description = فایل‌های موقت و فایل‌های ذخیره شده +home_big_files_description = بزرگترین/کوچکترین فایل‌ها در دیسک +home_broken_files_description = فایل‌های PDF، فایل‌های صوتی، تصاویر، آرشیوها +home_bad_extensions_description = فایل‌هایی با پسوند نامعتبر +home_same_music_description = فایل‌های صوتی مشابه، بر اساس برچسب‌ها +home_bad_names_description = فایل‌هایی که نام آن‌ها شامل کاراکترهای مشکل‌ساز است +home_exif_description = تصاویر دارای اطلاعات EXIF +# Results list +scanning = اسکن در حال انجام است... +stopping = در حال توقف... +no_results = نتیجه ای یافت نشد +press_start = برای شروع اسکن، دکمه "شروع" را فشار دهید +select_label = انتخاب کنید. +deselect_label = دیزل. +list_label = لیست +gallery_label = گال. +# Selection popup +selection_popup_title = انتخاب کنید +select_all = انتخاب همه +select_except_one = همه موارد را انتخاب کنید، به جز یک مورد +select_except_largest = همه موارد را انتخاب کنید، به جز بزرگترین مورد +select_except_smallest = انتخاب همه می‌شود به جز کوچکترین +select_largest = انتخاب بزرگترین +select_smallest = کوچکترین را انتخاب کنید +select_except_highest_res = همه موارد را انتخاب کنید، به جز موردی که بالاترین وضوح را دارد +select_except_lowest_res = همه موارد را انتخاب کنید، به جز گزینه با کمترین وضوح +select_highest_res = انتخاب بالاترین وضوح +select_lowest_res = انتخاب کمترین وضوح +invert_selection = انتخاب را دور زنید +close = بسته شود +# Deselection popup +deselection_popup_title = انتخاب را لغو کنید +deselect_all = تمامی را حذف کنید +deselect_except_one = همه موارد را انتخاب نکردنید، جز یک مورد +# Confirm popup +cancel = لغو +delete = حذف +rename = تغییر نام +# Delete errors popup +delete_errors_title = امکان حذف برخی از فایل‌ها وجود نداشت: +ok = بله +# Stopping overlay +stopping_overlay_title = توقف +stopping_overlay_body = + پایان یافتن اسکن فعلی... + لطفاً منتظر بمانید. +# Permission popup +permission_title = دسترسی به فایل‌ها +permission_body = برای اسکن فایل‌ها، برنامه به دسترسی به حافظه دستگاه نیاز دارد. بدون این مجوز، امکان اسکن وجود نخواهد داشت. +grant = وام/ کمک مالی +no_permission_scan_warning = دسترسی به فایل‌ها وجود ندارد - اجازه اسکن را اعطا کنید +# Settings screen tabs +settings_tab_general = عمومی +settings_tab_tools = ابزارها +settings_tab_diagnostics = اطلاعات +# Settings - General tab +settings_use_cache = استفاده از کشی +settings_use_cache_desc = سرعت اسکن‌های بعدی (هش‌ها/تصاویر) را افزایش می‌دهد +settings_ignore_hidden = فایل‌های مخفی را نادیده بگیرید +settings_ignore_hidden_desc = فایل‌ها و پوشه‌هایی که نامشان با '.' (نقطه) شروع می‌شود +settings_show_notification = به محض اتمام اسکن، اطلاع‌رسانی کنید +settings_show_notification_desc = هنگام اتمام اسکن، یک اعلان سیستمی نمایش دهید +settings_notify_only_background = فقط زمانی که در پس‌زمینه قرار دارد +settings_notify_only_background_desc = اگر برنامه در حال نمایش است، از نمایش اعلان‌ها صرف‌نظر کنید +notifications_disabled_banner = اعلان‌ها غیرفعال شده‌اند +notifications_enable_button = فعال کردن +settings_scan_label = اسکن کنید +settings_filters_label = فیلترها (برخی از ابزارها) +settings_min_file_size = حداقل اندازه فایل +settings_max_file_size = حداکثر حجم فایل +settings_language = زبان +settings_language_restart = نیاز به راه اندازی مجدد برنامه دارد +settings_common_label = تنظیمات پیش‌فرض +settings_excluded_items = موارد مستثنی شده (الگوهای سراسری، جدا شده با کاما) +settings_excluded_items_placeholder = به عنوان مثال: *.tmp، */.git/*، */node_modules/* +settings_allowed_extensions = فرمت‌های مجاز (خالی = همه) +settings_allowed_extensions_placeholder = به عنوان مثال: jpg، png، mp4 +settings_excluded_extensions = فرمت‌های فایل پشتیبانی‌نشده +settings_excluded_extensions_placeholder = به عنوان مثال: bak، tmp، log +# Settings - Tools section labels +settings_duplicates_header = نسخه‌های تکراری +settings_check_method_label = روش مقایسه‌ای +settings_check_method = روش +settings_hash_type_label = نوع هش +settings_hash_type = نوع هاش +settings_hash_type_desc = بلاک 3 (Blake3) گزینه پیشنهادی است، در حالی که CRC32 احتمال کمی برای نتایج مثبت کاذب دارد +settings_similar_images_header = تصاویر مشابه +settings_similarity_preset = آستانه تشابه +settings_similarity_desc = بسیار بالا = فقط نزدیک به یکسان +settings_hash_size = سایز هاش +settings_hash_size_desc = اندازه‌های بزرگتر، احتمال نتایج مثبت کاذب کمتری دارند، اما تصاویر مشابه کمتری را نیز پیدا می‌کنند +settings_hash_alg = الگوریتم هش +settings_image_filter = تغییر اندازه فیلتر +settings_ignore_same_size = تصاویر دارای ابعاد یکسان را نادیده بگیرید +settings_gallery_image_fit_cover = گالری: برش برای ایجاد تصویر مربعی +settings_gallery_image_fit_cover_desc = فضای موجود را پر کنید؛ غیرفعال کردن این گزینه، نسبت ابعاد اصلی را حفظ می‌کند +settings_big_files_header = بزرگترین فایل‌ها +settings_search_mode = حالت جستجو +settings_file_count = تعداد فایل‌ها +settings_same_music_header = کپی موسیقی +settings_music_check_method = حالت مقایسه +settings_music_compare_tags_label = برچسب‌های مرتبط +settings_music_title = عنوان +settings_music_artist = موسیقیدان +settings_music_year = سال +settings_music_length = طول +settings_music_genre = جنسیت +settings_music_bitrate = بیتریت Axe (This appears to be a placeholder or typo in the original text) +settings_music_approx = مقایسه تقریبی برچسب‌ها +settings_broken_files_header = فایل‌های خراب شده +settings_broken_files_note = اسکن نیازمند منابع محاسباتی زیادی است. برای بهترین عملکرد، از Krokiet در حالت دسکتاپ استفاده کنید. +settings_broken_files_types_label = انواع بررسی شده +settings_broken_audio = آهنگ +settings_broken_pdf = PDF +settings_broken_archive = ارشیو +settings_broken_image = عکس +settings_bad_names_header = نام‌های نامناسب +settings_bad_names_checks_label = چک‌ها +settings_bad_names_uppercase_ext = افزایش حروف بزرگ +settings_bad_names_emoji = ایموجی در نام +settings_bad_names_space = فاصله‌های ابتدایی/پایانی +settings_bad_names_non_ascii = کاراکترهای غیر-ASCII +settings_bad_names_duplicated = تکرار کاراکترها +# Settings - Diagnostics tab +diagnostics_header = تشخیص بیماری‌ها +diagnostics_thumbnails = حافظه پنهان تصاویر کوچک +diagnostics_app_cache = حافظه کش برنامه +diagnostics_refresh = تازه کردن +diagnostics_clear_thumbnails = تصاویر کوچک واضح +diagnostics_open_thumbnails_folder = باز کردن پوشه +diagnostics_clear_cache = پاک کردن حافظه پنهان +diagnostics_open_cache_folder = باز کردن پوشه +diagnostics_collect_test = آزمایش دسترسی به فایل +diagnostics_collect_test_desc = بررسی کنید که چه تعداد فایل قابل دسترسی هستند +diagnostics_collect_test_run = اجرا کن +diagnostics_collect_test_stop = ストップ +collect_test_cancelled = توسط کاربر متوقف شد +diag_confirm_clear_thumbnails = آیا می‌خواهید تمام تصاویر پیش‌نمایش ذخیره شده را پاک کنید؟ +diag_confirm_clear_cache = آیا می خواهید حافظه پنهان تمام برنامه ها را پاک کنید؟ +about_repo = آرشیو +about_translate = ترجمه‌ها +about_donate = پشتیبانی +# Collect-test result popup +collect_test_title = نتایج آزمایشات +collect_test_volumes = جلدها: +collect_test_folders = پوشه‌ها: +collect_test_files = فایل‌ها: +collect_test_time = زمان: +# Licenses +licenses_label = مجوز استفاده +third_party_licenses = مجوزهای شخص ثالث +licenses_popup_title = مجوزهای شخص ثالث +# Directories screen +directories_include_header = شامل +directories_included = شامل +directories_exclude_header = حذف کنید +directories_excluded_header = استثنا شده +directories_add = شامل +no_paths = مسیرهای مشخصی وجود ندارد - در زیر، موارد را اضافه کنید +directories_volume_header = جلدها +directories_volume_refresh = به روز رسانی کنید +directories_volume_add = افضال +# Bottom navigation +nav_home = شروع کنید +nav_dirs = دایرکتوری‌ها +nav_settings = تنظیمات +# Status messages set from Rust +status_ready = آماده +status_stopped = توقف کرد +status_no_results = نتیجه ای یافت نشد +status_deleted_selected = انتخابات حذف شد +status_deleted_with_errors = حذف شده با خطا +scan_not_started = اسکن شروع نشده است +found_items_prefix = یافت شد +found_items_suffix = موارد +deleted_items_prefix = حذف شد +deleted_items_suffix = موارد +deleted_errors_suffix = خطاها +renamed_prefix = نامش تغییر یافت +renamed_files_suffix = فایل‌ها +renamed_errors_suffix = خطاها +cleaned_exif_prefix = اطلاعات EXIF از فایل‌های زیر پاکسازی شد: +cleaned_exif_suffix = فایل‌ها +cleaned_exif_errors_suffix = خطاها +and_more_prefix = ...و +and_more_suffix = بیشتر +# Gallery / delete popups +gallery_delete_button = حذف +gallery_back = بازگشت +gallery_confirm_delete = بله، حذف کنید +deleting_files = حذف فایل‌ها... +stop = ストップ +files_suffix = فایل‌ها +scanning_fallback = سkenنگ... +app_subtitle = به افتخار نبرد سدینیا (سال 972 میلادی) +app_license = بخش رابط کاربری برای هسته Czkawka - مجوز GPL-3.0 +about_app_label = درباره ما +cache_label = حافظه کش +# Notification +scan_completed_notification = اسکن تکمیل شد - { $file_count } مورد یافت شد +# Confirm popups (set from Rust) +confirm_clean_exif = آیا مطمئن هستید که می‌خواهید اطلاعات EXIF را از { $n } فایل انتخاب شده حذف کنید؟ +confirm_delete_items = آیا از حذف { $n } مورد انتخاب شده، مطمئن هستید؟ +gallery_confirm_delete_msg = شما در حال حذف { $total_images } تصویر از { $total_groups } گروه هستید. +gallery_confirm_delete_warning = تمام موارد در { $unsafe_groups } گروه انتخاب شده‌اند! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = محاسبه و مقایسه اثر انگشت صوتی، فرایندی بسیار پرهزینه از نظر منابع است و ممکن است زمان زیادی طول بکشد. توصیه می‌شود برای انجام این کار، از Krokiet در یک سیستم دسکتاپ استفاده کنید. +# Scan stage labels (shown during scan progress) +stage_collecting_files = جمع‌آوری فایل‌ها +stage_scanning_name = جستجو بر اساس نام +stage_scanning_size_name = جستجو بر اساس نام و اندازه +stage_scanning_size = اسکن بر اساس اندازه +stage_pre_hash = پیش‌هشینگ +stage_full_hash = تبدیل هش (یا هش‌سازی) +stage_loading_cache = فیلتر کشی را بارگذاری می‌کنیم +stage_saving_cache = ذخیره کشی +stage_calculating_image_hashes = محاسبه هش تصاویر +stage_comparing_images = مقایسه تصاویر +stage_calculating_video_hashes = محاسبه هش ویدیوها +stage_checking_files = بررسی فایل‌ها +stage_checking_extensions = بررسی افزونه‌ها +stage_checking_names = بررسی نام‌ها +stage_reading_music_tags = خواندن برچسب‌های موسیقی +stage_comparing_tags = مقایسه تگ‌ها +stage_calculating_music_fingerprints = محاسبه اثر انگشت موسیقی +stage_comparing_fingerprints = مقایسه اثر انگشت‌ها +stage_extracting_exif = خواندن برچسب‌های EXIF +stage_creating_video_thumbnails = ساختن تصاویر کوچک (تُنبِر) برای ویدیوها +stage_processing_videos = پردازش ویدیوها +stage_deleting = حذف فایل‌ها +stage_renaming = بازنامه فایل‌ها +stage_moving = انتقال فایل‌ها +stage_hardlinking = ایجاد لینک‌های سخت +stage_symlinking = ایجاد لینک‌های سمبولیک +stage_optimizing_videos = بهینه‌سازی ویدیوها +stage_cleaning_exif = پاکسازی داده‌های EXIF +# Group headers in scan results +duplicates_group_header = { $count } فایل × { $per_file } واحد در هر فایل = { $total } واحد در مجموع +similar_images_group_header = { $count } تصویر مشابه +same_music_group_header = { $count } قطعه مشابه +# Rename confirmation +confirm_rename_items = آیا مطمئن هستید که می‌خواهید نام { $n } فایل انتخاب‌شده را تغییر دهید؟ +# Combo-box option labels (translatable display names) +option_search_mode_biggest = بزرگترین +option_search_mode_smallest = کوچکترین +option_similarity_very_high = بسیار بالا +option_similarity_high = ارتفاع +option_similarity_medium = میانبر +option_similarity_low = پایین +option_similarity_very_low = بسیار پایین +option_similarity_minimal = من. +option_check_method_hash = هش +option_check_method_name = نام +option_check_method_size_and_name = اندازه + نام +option_check_method_size = اندازه +option_music_method_tags = برچسب‌ها +option_music_method_audio = آهنگ +option_min_size_none = هیچ +option_min_size_1kb = 1 کیلوبایت +option_min_size_8kb = 8 کیلوبایت +option_min_size_64kb = 64 کیلوبایت +option_min_size_1mb = 1 مگابایت +option_max_size_16kb = 16 کیلوبایت +option_max_size_1mb = 1 مگابایت +option_max_size_10mb = 10 مگابایت +option_max_size_100mb = 100 مگابایت +option_max_size_unlimited = بی محدودیت +# Volume labels (shown in the directories screen) +volume_internal_storage = حافظه داخلی +volume_sd_card = کارت حافظه (کارت SD) +volume_storage = حجم ذخیره‌سازی +# Directories screen +directories_referenced_tooltip = ارجاع داده شده (حذف نشده) +directories_include_section_header = شامل: +directories_exclude_section_header = استثنا شده +directories_custom_paths = مسیرهای سفارشی +directories_check_button = تجزیه و تحلیل کنید +directories_check_popup_title = آمار پوشه +directories_check_label_included = مسیرهای موجود: +directories_check_label_excluded = مسیرهای حذف شده: +directories_check_label_referenced = مسیرهای ارجاعی: +directories_check_label_would_scan = فایل‌هایی که باید اسکن شوند: +directories_check_label_processable = فایل‌های قابل پردازش: +directories_check_scanning = سkenنگ... +directories_check_warning_no_processable = هیچ فایلی یافت نشد که قابل پردازش باشد - لطفاً پوشه‌هایی که شامل یا حذف شده‌اند را بررسی کنید +path_edit_title_include = اضافه کردن به لیست "شامل" +path_edit_title_exclude = به لیست موارد حذف شده اضافه کنید +path_edit_placeholder = مسیر را وارد کنید... +path_edit_not_exists = مسیر مورد نظر وجود ندارد +path_edit_is_dir = دایرکتوری +path_edit_is_file = فایل +path_edit_no_newlines = مسیرها نباید شامل خطوط جدید باشند — از زدن کلید Enter اکیداً خودداری کنید +ctx_menu_title = باز +ctx_open_file = آیتم باز +ctx_open_folder = باز کردن پوشه والد diff --git a/cedinia/i18n/fr/cedinia.ftl b/cedinia/i18n/fr/cedinia.ftl new file mode 100644 index 000000000..fbc7ef20e --- /dev/null +++ b/cedinia/i18n/fr/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = Doublons +tool_empty_folders = Dossiers vides +tool_similar_images = Images similaires +tool_empty_files = Fichiers vides +tool_temporary_files = Fichiers temporaires +tool_big_files = Plus gros fichiers +tool_broken_files = Fichiers cassés +tool_bad_extensions = Mauvaises extensions +tool_same_music = Doublons de musique +tool_bad_names = Mauvais noms +tool_exif_remover = Données EXIF +tool_directories = Répertoires +tool_settings = Réglages +# Home screen tool card descriptions +home_dup_description = Trouver des fichiers avec le même contenu +home_empty_folders_description = Répertoires sans contenu +home_similar_images_description = Trouver des photos similaires visuellement +home_empty_files_description = Fichiers avec zéro taille +home_temp_files_description = Fichiers temporaires et mis en cache +home_big_files_description = Fichiers les plus gros / les plus petits sur le disque +home_broken_files_description = PDF, audio, images, archives +home_bad_extensions_description = Fichiers avec extension invalide +home_same_music_description = Fichiers audio similaires par tags +home_bad_names_description = Fichiers avec des caractères problématiques dans le nom +home_exif_description = Images avec métadonnées EXIF +# Results list +scanning = Analyse en cours... +stopping = Arrêt... +no_results = Aucun résultat +press_start = Appuyez sur START pour analyser +select_label = Sel. +deselect_label = Desel. +list_label = Liste +gallery_label = Gal. +# Selection popup +selection_popup_title = Sélectionner +select_all = Tout sélectionner +select_except_one = Tout sélectionner sauf un +select_except_largest = Tout sélectionner sauf le plus grand +select_except_smallest = Tout sélectionner sauf le plus petit +select_largest = Sélectionner le plus grand +select_smallest = Sélectionner le plus petit +select_except_highest_res = Tout sélectionner sauf la résolution la plus élevée +select_except_lowest_res = Tout sélectionner sauf la résolution la plus basse +select_highest_res = Sélectionnez la résolution la plus élevée +select_lowest_res = Sélectionnez la résolution la plus basse +invert_selection = Inverser la sélection +close = Fermer +# Deselection popup +deselection_popup_title = Désélectionner +deselect_all = Désélectionner tout +deselect_except_one = Tout désélectionner sauf un +# Confirm popup +cancel = Abandonner +delete = Supprimez +rename = Renommer +# Delete errors popup +delete_errors_title = Impossible de supprimer certains fichiers: +ok = Ok +# Stopping overlay +stopping_overlay_title = Arrêt en cours +stopping_overlay_body = + Fin de l'analyse en cours... + Veuillez patienter. +# Permission popup +permission_title = Accès au fichier +permission_body = Pour scanner des fichiers, l'application a besoin d'accéder au stockage de l'appareil. Sans cette autorisation, le balayage ne sera pas possible. +grant = Accorder +no_permission_scan_warning = Pas d'accès au fichier - accorder la permission de scanner +# Settings screen tabs +settings_tab_general = Généraux +settings_tab_tools = Outils +settings_tab_diagnostics = Infos +# Settings - General tab +settings_use_cache = Utiliser le cache +settings_use_cache_desc = Accélère les scans suivants (hash/images) +settings_ignore_hidden = Ignorer les fichiers cachés +settings_ignore_hidden_desc = Fichiers et dossiers commençant par '.' +settings_show_notification = Notifier lorsque l'analyse est terminée +settings_show_notification_desc = Afficher une notification système à la fin de l'analyse +settings_notify_only_background = Seulement en arrière-plan +settings_notify_only_background_desc = Ignorer la notification si l'application est visible +notifications_disabled_banner = Notifications désactivées +notifications_enable_button = Activer +settings_scan_label = SCAN +settings_filters_label = FILTRES (quelques outils) +settings_min_file_size = Taille minimale du fichier +settings_max_file_size = Taille maximale du fichier +settings_language = Langue +settings_language_restart = Nécessite un redémarrage de l'application +settings_common_label = PARAMÈTRES COMMUNS +settings_excluded_items = OBJETS EXCLUÉS (modèles de globe, séparés par des virgules) +settings_excluded_items_placeholder = par exemple *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = EXTENSIONS AUTORISÉES (vide = tous) +settings_allowed_extensions_placeholder = par exemple jpg, png, mp4 +settings_excluded_extensions = EXCLUSIONS EXCLUES +settings_excluded_extensions_placeholder = par exemple bak, tmp, log +# Settings - Tools section labels +settings_duplicates_header = DUPLICATIONS +settings_check_method_label = MÉTHODE DE COMPARISON +settings_check_method = Méthode +settings_hash_type_label = Type d'HASH +settings_hash_type = Type de hachage +settings_hash_type_desc = Blake3 - est l'option recommandée, CRC32 a de petites chances de faux positifs +settings_similar_images_header = IMAGES SIMILAIRES +settings_similarity_preset = Seuil de similitude +settings_similarity_desc = Très haut = seulement presque identique +settings_hash_size = Taille du hachage +settings_hash_size_desc = Les tailles plus grandes, ont moins de faux positifs, mais trouvent aussi moins d'images similaires +settings_hash_alg = Algorithme de hachage +settings_image_filter = Redimensionner le filtre +settings_ignore_same_size = Ignorer les images avec les mêmes dimensions +settings_gallery_image_fit_cover = Galerie: Recadrer en carré +settings_gallery_image_fit_cover_desc = Remplir la tuile ; désactiver pour conserver les proportions d'origine +settings_big_files_header = MEILLEURS FICHIERS +settings_search_mode = Mode de recherche +settings_file_count = Nombre de fichiers +settings_same_music_header = DUPLICATIONS MUSIQUES +settings_music_check_method = Mode de comparaison +settings_music_compare_tags_label = TAGS COMPAURÉS +settings_music_title = Titre de la page +settings_music_artist = Artiste +settings_music_year = Année +settings_music_length = Longueur +settings_music_genre = Genre +settings_music_bitrate = Débit binaire +settings_music_approx = Comparaison approximative des tags +settings_broken_files_header = FICHIERS DE BROKEN +settings_broken_files_note = Analyse intensive en ressources. Pour de meilleures performances, utilisez Krokiet sur votre bureau. +settings_broken_files_types_label = TYPES CONNECTÉS +settings_broken_audio = Audio +settings_broken_pdf = PDF +settings_broken_archive = Archive +settings_broken_image = Image +settings_bad_names_header = NOMBRE DE BAD +settings_bad_names_checks_label = CHÈQUES +settings_bad_names_uppercase_ext = Extension en majuscule +settings_bad_names_emoji = Emoji en nom +settings_bad_names_space = Espaces au début/fin +settings_bad_names_non_ascii = Caractères non-ASCII +settings_bad_names_duplicated = Caractères répétés +# Settings - Diagnostics tab +diagnostics_header = DIAGNOSTIC +diagnostics_thumbnails = Cache des miniatures +diagnostics_app_cache = Cache des applications +diagnostics_refresh = Rafraîchir +diagnostics_clear_thumbnails = Effacer les vignettes +diagnostics_open_thumbnails_folder = Ouvrir le dossier +diagnostics_clear_cache = Vider le cache +diagnostics_open_cache_folder = Ouvrir le dossier +diagnostics_collect_test = Test d'accès au fichier +diagnostics_collect_test_desc = Vérifier combien de fichiers sont accessibles +diagnostics_collect_test_run = Exécuter +diagnostics_collect_test_stop = Arrêter +collect_test_cancelled = Arrêté par l'utilisateur +diag_confirm_clear_thumbnails = Effacer tout le cache des miniatures? +diag_confirm_clear_cache = Effacer le cache de l'application? +about_repo = Dépôt +about_translate = Traductions +about_donate = Soutien +# Collect-test result popup +collect_test_title = Résultats du test +collect_test_volumes = Volumes : +collect_test_folders = Dossiers : +collect_test_files = Fichiers : +collect_test_time = Heure: +# Licenses +licenses_label = LICENCE +third_party_licenses = Licences tierces +licenses_popup_title = Licences tierces +# Directories screen +directories_include_header = Inclure +directories_included = Inclus +directories_exclude_header = Exclure +directories_excluded_header = Exclus +directories_add = Inclure +no_paths = Aucun chemin - ajouter ci-dessous +directories_volume_header = Volumes +directories_volume_refresh = Rafraîchir +directories_volume_add = Ajouter +# Bottom navigation +nav_home = Début +nav_dirs = Répertoires +nav_settings = Réglages +# Status messages set from Rust +status_ready = Prêt +status_stopped = Arrêté +status_no_results = Aucun résultat +status_deleted_selected = Suppression de la sélection +status_deleted_with_errors = Supprimé avec des erreurs +scan_not_started = Scan non démarré +found_items_prefix = Trouvé +found_items_suffix = Eléments +deleted_items_prefix = Supprimé +deleted_items_suffix = Eléments +deleted_errors_suffix = Erreurs +renamed_prefix = Renommé +renamed_files_suffix = fichiers +renamed_errors_suffix = Erreurs +cleaned_exif_prefix = Nettoyé EXIF de +cleaned_exif_suffix = fichiers +cleaned_exif_errors_suffix = Erreurs +and_more_prefix = ... et +and_more_suffix = plus +# Gallery / delete popups +gallery_delete_button = Supprimez +gallery_back = Précédent +gallery_confirm_delete = Oui, supprimer +deleting_files = Suppression des fichiers... +stop = Arrêter +files_suffix = fichiers +scanning_fallback = Analyse en cours... +app_subtitle = En l'honneur de la bataille de Cédynie (972 CE) +app_license = Frontend pour Noyau Czkawka - GPL-3.0 +about_app_label = À propos +cache_label = CACHE +# Notification +scan_completed_notification = Scan terminé - { $file_count } éléments trouvés +# Confirm popups (set from Rust) +confirm_clean_exif = Êtes-vous sûr de vouloir nettoyer les balises EXIF des fichiers sélectionnés { $n } ? +confirm_delete_items = Êtes-vous sûr de vouloir supprimer { $n } éléments sélectionnés ? +gallery_confirm_delete_msg = Vous êtes sur le point de supprimer les images { $total_images } dans les groupes { $total_groups}. +gallery_confirm_delete_warning = Tous les articles sont sélectionnés dans les groupes { $unsafe_groups } ! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = Le calcul et la comparaison des empreintes sonores sont très gourmands en ressources et peuvent prendre beaucoup de temps. Il est recommandé d'utiliser Krokiet sur un système de bureau pour cette tâche. +# Scan stage labels (shown during scan progress) +stage_collecting_files = Collecte des fichiers +stage_scanning_name = Analyse par nom +stage_scanning_size_name = Analyse par nom et taille +stage_scanning_size = Analyse par taille +stage_pre_hash = Pré-hachage +stage_full_hash = Hachage +stage_loading_cache = Chargement de la cache +stage_saving_cache = Sauvegarde du cache +stage_calculating_image_hashes = Calcul des hachages des images +stage_comparing_images = Comparaison des images +stage_calculating_video_hashes = Calcul des hachages vidéo +stage_checking_files = Vérification des fichiers +stage_checking_extensions = Vérification des extensions +stage_checking_names = Vérification des noms +stage_reading_music_tags = Lecture des tags de musique +stage_comparing_tags = Comparaison des tags +stage_calculating_music_fingerprints = Calcul des empreintes musicales +stage_comparing_fingerprints = Comparaison des empreintes digitales +stage_extracting_exif = Lecture des balises EXIF +stage_creating_video_thumbnails = Création de miniatures vidéo +stage_processing_videos = Traitement des vidéos +stage_deleting = Suppression des fichiers +stage_renaming = Renommer les fichiers +stage_moving = Déplacement des fichiers +stage_hardlinking = Création de liens durs +stage_symlinking = Création de liens symboliques +stage_optimizing_videos = Optimisation des vidéos +stage_cleaning_exif = Nettoyage EXIF +# Group headers in scan results +duplicates_group_header = { $count } fichiers x { $per_file } / fichier = { $total } total +similar_images_group_header = { $count } images similaires +same_music_group_header = { $count } pistes similaires +# Rename confirmation +confirm_rename_items = Êtes-vous sûr de vouloir renommer { $n } fichiers sélectionnés ? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = Plus gros +option_search_mode_smallest = Le plus petit +option_similarity_very_high = V.Haut +option_similarity_high = Élevé +option_similarity_medium = Moyenne +option_similarity_low = Bas +option_similarity_very_low = V.Très faible +option_similarity_minimal = Min. +option_check_method_hash = Hachage +option_check_method_name = Nom +option_check_method_size_and_name = Taille+Nom +option_check_method_size = Taille +option_music_method_tags = Mots-clés +option_music_method_audio = Audio +option_min_size_none = Aucun +option_min_size_1kb = 1 Ko +option_min_size_8kb = 8 Ko +option_min_size_64kb = 64 Ko +option_min_size_1mb = 1 Mo +option_max_size_16kb = 16 Ko +option_max_size_1mb = 1 Mo +option_max_size_10mb = 10 Mo +option_max_size_100mb = 100 Mo +option_max_size_unlimited = Illimité +# Volume labels (shown in the directories screen) +volume_internal_storage = Stockage interne +volume_sd_card = Carte mémoire (carte SD) +volume_storage = Volume de stockage +# Directories screen +directories_referenced_tooltip = Référencé (non supprimé) +directories_include_section_header = INCLUS +directories_exclude_section_header = EXCLUSÉ +directories_custom_paths = Chemins personnalisés +directories_check_button = Analyser +directories_check_popup_title = Statistiques du répertoire +directories_check_label_included = Chemins inclus : +directories_check_label_excluded = Chemins exclus : +directories_check_label_referenced = Chemins de référence: +directories_check_label_would_scan = Fichiers à analyser: +directories_check_label_processable = Fichiers à traiter : +directories_check_scanning = Analyse en cours... +directories_check_warning_no_processable = Aucun fichier pouvant être traité - vérifiez que vos dossiers inclus/exclus +path_edit_title_include = Ajouter à Inclure +path_edit_title_exclude = Ajouter à Exclure +path_edit_placeholder = Entrez le chemin... +path_edit_not_exists = Le chemin n'existe pas +path_edit_is_dir = Répertoire +path_edit_is_file = Fichier +path_edit_no_newlines = Les chemins ne peuvent pas contenir de nouvelles lignes — La clé Entrée n'est pas autorisée +ctx_menu_title = Ouvert +ctx_open_file = Ouvrir l'objet +ctx_open_folder = Ouvrir le dossier parent diff --git a/cedinia/i18n/hi/cedinia.ftl b/cedinia/i18n/hi/cedinia.ftl new file mode 100644 index 000000000..79322c2ac --- /dev/null +++ b/cedinia/i18n/hi/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = सिडिनिया +tool_duplicate_files = डुप्लिकेट +tool_empty_folders = खाली फ़ोल्डर +tool_similar_images = समान छवियाँ +tool_empty_files = खाली फाइलें +tool_temporary_files = अस्थायी फ़ाइलें +tool_big_files = सबसे बड़ी फ़ाइलें +tool_broken_files = टूटी हुई फ़ाइलें +tool_bad_extensions = खराब एक्सटेंशन +tool_same_music = संगीत की डुप्लिकेट प्रतियां +tool_bad_names = खराब नाम +tool_exif_remover = EXIF डेटा +tool_directories = निर्देशिकाएँ +tool_settings = सेटिंग्स +# Home screen tool card descriptions +home_dup_description = समान सामग्री वाली फ़ाइलें खोजें +home_empty_folders_description = निर्देशिकाएँ जिनमें कोई सामग्री नहीं है +home_similar_images_description = दृश्य रूप से समान तस्वीरें खोजें +home_empty_files_description = शून्य आकार की फ़ाइलें +home_temp_files_description = अस्थायी और कैश्ड फ़ाइलें +home_big_files_description = डिस्क पर सबसे बड़ी/सबसे छोटी फाइलें +home_broken_files_description = पीडीएफ, ऑडियो, इमेज, अभिलेखागार +home_bad_extensions_description = अवैध एक्सटेंशन वाली फाइलें +home_same_music_description = समान ऑडियो फ़ाइलें, टैग के आधार पर +home_bad_names_description = फ़ाइलें जिनके नाम में समस्या पैदा करने वाले अक्षर हैं +home_exif_description = EXIF मेटाडेटा वाली छवियां +# Results list +scanning = स्कैनिंग जारी है... +stopping = रुकना... +no_results = कोई परिणाम नहीं मिला +press_start = START बटन दबाकर स्कैन करें +select_label = चयनित. +deselect_label = डीसेल. +list_label = सूची +gallery_label = गल. +# Selection popup +selection_popup_title = चुनें। +select_all = सब कुछ चुनें +select_except_one = सभी का चयन करें, सिवाय एक के +select_except_largest = सभी का चयन करें, सिवाय सबसे बड़े के +select_except_smallest = सभी का चयन करें, सिवाय सबसे छोटे के +select_largest = सबसे बड़ा चुनें +select_smallest = सबसे छोटा चुनें +select_except_highest_res = सभी का चयन करें, लेकिन उच्चतम रिज़ॉल्यूशन वाला नहीं। +select_except_lowest_res = सभी का चयन करें, सिवाय सबसे कम रिज़ॉल्यूशन वाले के। +select_highest_res = उच्चतम रिज़ॉल्यूशन चुनें +select_lowest_res = सबसे कम रिज़ॉल्यूशन चुनें +invert_selection = चयन को उलटें +close = बंद करें +# Deselection popup +deselection_popup_title = चयन रद्द करें +deselect_all = सभी को अनसेलेक्ट करें +deselect_except_one = सभी को अनसेलेक्ट करें, सिवाय एक के +# Confirm popup +cancel = रद्द करें +delete = हटाएँ +rename = नाम बदलें +# Delete errors popup +delete_errors_title = कुछ फ़ाइलें हटाने में विफल: +ok = ठीक है। +# Stopping overlay +stopping_overlay_title = रुकना। +stopping_overlay_body = + वर्तमान स्कैन पूरा हो रहा है... + कृपया प्रतीक्षा करें।. +# Permission popup +permission_title = फ़ाइल एक्सेस +permission_body = फ़ाइलों को स्कैन करने के लिए, ऐप को डिवाइस स्टोरेज तक पहुंच की आवश्यकता होती है। इस अनुमति के बिना, स्कैनिंग संभव नहीं होगी. +grant = अनुदान +no_permission_scan_warning = फ़ाइल एक्सेस नहीं - स्कैन करने की अनुमति दें +# Settings screen tabs +settings_tab_general = सामान्य +settings_tab_tools = उपकरण +settings_tab_diagnostics = जानकारी +# Settings - General tab +settings_use_cache = कैश का उपयोग करें +settings_use_cache_desc = बाद में होने वाली स्कैनिंग (हैश/इमेजेस) की गति बढ़ाता है +settings_ignore_hidden = छिपी हुई फ़ाइलों को अनदेखा करें +settings_ignore_hidden_desc = उन फ़ाइलों और फ़ोल्डरों पर ध्यान दें जो '.' से शुरू होती हैं +settings_show_notification = सूचित करें जब स्कैन पूरा हो जाए +settings_show_notification_desc = स्कैन पूरा होने पर एक सिस्टम नोटिफिकेशन दिखाएं +settings_notify_only_background = केवल जब पृष्ठभूमि में हो। +settings_notify_only_background_desc = यदि ऐप दिखाई दे रहा है, तो सूचना को छोड़ दें +notifications_disabled_banner = सूचनाएँ बंद हैं +notifications_enable_button = सक्षम करें +settings_scan_label = स्कैन करें +settings_filters_label = फ़िल्टर (कुछ उपकरण) +settings_min_file_size = न्यूनतम फ़ाइल आकार +settings_max_file_size = अधिकतम फ़ाइल आकार +settings_language = भाषा +settings_language_restart = इसके लिए ऐप को पुनरारंभ करने की आवश्यकता है +settings_common_label = सामान्य सेटिंग्स +settings_excluded_items = बहिष्कृत आइटम (ग्लोब पैटर्न, अल्पविराम से अलग किए गए) +settings_excluded_items_placeholder = उदाहरण के लिए: *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = अनुमत एक्सटेंशन (खाली = सभी) +settings_allowed_extensions_placeholder = उदाहरण के लिए: jpg, png, mp4 +settings_excluded_extensions = बहिष्कृत एक्सटेंशन +settings_excluded_extensions_placeholder = उदाहरण के लिए: bak, tmp, log +# Settings - Tools section labels +settings_duplicates_header = डुप्लिकेट +settings_check_method_label = तुलनात्मक विधि +settings_check_method = विधि। +settings_hash_type_label = हैश प्रकार +settings_hash_type = हैश का प्रकार +settings_hash_type_desc = ब्लेक3 - यह अनुशंसित विकल्प है, CRC32 में गलत सकारात्मक परिणामों की थोड़ी संभावना होती है। +settings_similar_images_header = समान छवियाँ +settings_similarity_preset = समानता सीमा +settings_similarity_desc = बहुत उच्च = केवल लगभग समान +settings_hash_size = हैश का आकार +settings_hash_size_desc = बड़े आकार वाले मॉडल में, गलत सकारात्मक परिणाम (false positives) कम होते हैं, लेकिन यह समान छवियों को खोजने में भी कम सक्षम होते हैं +settings_hash_alg = हैश एल्गोरिदम +settings_image_filter = फ़िल्टर का आकार बदलें +settings_ignore_same_size = उन छवियों को अनदेखा करें जिनका आयाम समान है +settings_gallery_image_fit_cover = गैलरी: वर्ग आकार में क्रॉप करें +settings_gallery_image_fit_cover_desc = टाइल को भरें; मूल पहलू अनुपात बनाए रखने के लिए इसे निष्क्रिय करें +settings_big_files_header = सबसे बड़ी फ़ाइलें +settings_search_mode = खोज मोड +settings_file_count = फ़ाइल गणना +settings_same_music_header = संगीत की प्रतियां +settings_music_check_method = तुलनात्मक मोड +settings_music_compare_tags_label = तुलना किए गए टैग +settings_music_title = शीर्षक +settings_music_artist = कलाकार +settings_music_year = वर्ष +settings_music_length = लंबाई +settings_music_genre = शैली +settings_music_bitrate = बिटरेट +settings_music_approx = अनुमानित टैग तुलना +settings_broken_files_header = टूटी हुई फ़ाइलें +settings_broken_files_note = यह एक संसाधन-गहन स्कैन है। सर्वोत्तम प्रदर्शन के लिए, कृपया Krokiet को डेस्कटॉप पर उपयोग करें. +settings_broken_files_types_label = जांच किए गए प्रकार +settings_broken_audio = ऑडियो +settings_broken_pdf = पीडीएफ +settings_broken_archive = संग्रह +settings_broken_image = छवि +settings_bad_names_header = खराब नाम +settings_bad_names_checks_label = जाँचें। +settings_bad_names_uppercase_ext = बड़े अक्षरों में एक्सटेंशन +settings_bad_names_emoji = नाम में इमोजी +settings_bad_names_space = शुरू/अंत में खाली स्थान। +settings_bad_names_non_ascii = गैर-ASCII वर्ण। +settings_bad_names_duplicated = दोहराए गए अक्षर +# Settings - Diagnostics tab +diagnostics_header = निदान। +diagnostics_thumbnails = थंबनेल कैश +diagnostics_app_cache = ऐप कैश +diagnostics_refresh = ताज़ा करें +diagnostics_clear_thumbnails = स्पष्ट थंबनेल +diagnostics_open_thumbnails_folder = फ़ोल्डर खोलें +diagnostics_clear_cache = कैश साफ़ करें +diagnostics_open_cache_folder = फ़ोल्डर खोलें +diagnostics_collect_test = फ़ाइल एक्सेस परीक्षण +diagnostics_collect_test_desc = जांच करें कि कितनी फ़ाइलें एक्सेस करने योग्य हैं +diagnostics_collect_test_run = चलाओ। +diagnostics_collect_test_stop = रुकें +collect_test_cancelled = उपयोगकर्ता द्वारा रोका गया। +diag_confirm_clear_thumbnails = क्या आप सभी थंबनेल कैश को साफ़ करना चाहते हैं? +diag_confirm_clear_cache = क्या आप सभी ऐप के कैश को साफ़ करना चाहेंगे? +about_repo = रिपॉजिटरी +about_translate = अनुवाद। +about_donate = सहायता। +# Collect-test result popup +collect_test_title = परीक्षण परिणाम +collect_test_volumes = मात्राएँ: +collect_test_folders = फ़ोल्डर: +collect_test_files = फ़ाइलें: +collect_test_time = समय: +# Licenses +licenses_label = लाइसेंस +third_party_licenses = तृतीय-पक्ष लाइसेंस +licenses_popup_title = तृतीय-पक्ष लाइसेंस। +# Directories screen +directories_include_header = शामिल करें। +directories_included = शामिल +directories_exclude_header = बहिष्कृत करें। +directories_excluded_header = बहिष्कृत +directories_add = शामिल करें +no_paths = कोई रास्ता नहीं - नीचे जोड़ें। +directories_volume_header = मात्राएँ +directories_volume_refresh = ताज़ा करें +directories_volume_add = जोड़ें। +# Bottom navigation +nav_home = शुरू करें। +nav_dirs = निर्देशिकाएँ +nav_settings = सेटिंग्स +# Status messages set from Rust +status_ready = तैयार। +status_stopped = रुका हुआ +status_no_results = कोई परिणाम नहीं। +status_deleted_selected = चयनित आइटम हटा दिए गए। +status_deleted_with_errors = त्रुटियों के साथ हटाया गया +scan_not_started = स्कैन शुरू नहीं हुआ +found_items_prefix = ढूंढा गया। +found_items_suffix = वस्तुएँ +deleted_items_prefix = हटा दिया गया। +deleted_items_suffix = वस्तुएँ +deleted_errors_suffix = त्रुटियाँ +renamed_prefix = नाम बदला गया +renamed_files_suffix = फ़ाइलें +renamed_errors_suffix = त्रुटियाँ +cleaned_exif_prefix = EXIF डेटा साफ़ किया गया, स्रोत: +cleaned_exif_suffix = फ़ाइलें +cleaned_exif_errors_suffix = त्रुटियाँ +and_more_prefix = ...और +and_more_suffix = और। +# Gallery / delete popups +gallery_delete_button = हटाएँ +gallery_back = वापस +gallery_confirm_delete = हाँ, हटाएँ। +deleting_files = फ़ाइलें हटाना... +stop = रुकें। +files_suffix = फ़ाइलें +scanning_fallback = स्कैनिंग... +app_subtitle = सिडिनिया की लड़ाई (972 ईस्वी) के सम्मान में +app_license = Czkawka Core के लिए फ्रंटएंड - GPL-3.0 +about_app_label = के बारे में +cache_label = कैश +# Notification +scan_completed_notification = स्कैन पूरा हुआ - { $file_count } आइटम पाए गए +# Confirm popups (set from Rust) +confirm_clean_exif = क्या आप निश्चित हैं कि आप { $n } चयनित फ़ाइलों से EXIF टैग हटाना चाहते हैं? +confirm_delete_items = क्या आप वाकई में { $n } चयनित आइटमों को डिलीट करना चाहते हैं? +gallery_confirm_delete_msg = आप { $total_images } तस्वीरें { $total_groups } समूहों से हटाने वाले हैं. +gallery_confirm_delete_warning = सभी आइटम { $unsafe_groups } समूहों में चुने गए हैं! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = ऑडियो फिंगरप्रिंट की गणना और तुलना करना बहुत अधिक संसाधनों का उपयोग करता है और इसमें काफी समय लग सकता है। इस कार्य के लिए, Krokiet का उपयोग डेस्कटॉप सिस्टम पर करना उचित है।. +# Scan stage labels (shown during scan progress) +stage_collecting_files = फ़ाइलें एकत्र की जा रही हैं +stage_scanning_name = नाम से स्कैन करना +stage_scanning_size_name = नाम और आकार के आधार पर स्कैनिंग +stage_scanning_size = आकार के अनुसार स्कैन करना +stage_pre_hash = पूर्व-हैशिंग +stage_full_hash = हैशिंग +stage_loading_cache = कैश लोड हो रहा है +stage_saving_cache = कैश सहेज रहा है +stage_calculating_image_hashes = छवि हैश की गणना करना +stage_comparing_images = छवियों की तुलना करना +stage_calculating_video_hashes = वीडियो हैश की गणना करना +stage_checking_files = फ़ाइलों की जाँच की जा रही है। +stage_checking_extensions = एक्सटेंशन की जाँच की जा रही है +stage_checking_names = नामों की जाँच +stage_reading_music_tags = संगीत फ़ाइलों के मेटाडेटा को पढ़ना +stage_comparing_tags = टैग की तुलना करना +stage_calculating_music_fingerprints = संगीत की पहचान (फिंगरप्रिंट) की गणना करना +stage_comparing_fingerprints = उंगलियों के निशान की तुलना करना +stage_extracting_exif = EXIF टैग पढ़ना +stage_creating_video_thumbnails = वीडियो थंबनेल बनाना +stage_processing_videos = वीडियो संसाधित किए जा रहे हैं +stage_deleting = फ़ाइलों को हटाना +stage_renaming = फ़ाइलों का नाम बदलना +stage_moving = फ़ाइलों को स्थानांतरित करना +stage_hardlinking = हार्ड लिंक बनाना +stage_symlinking = सिंबोलिक लिंक बनाना +stage_optimizing_videos = वीडियो को अनुकूलित करना +stage_cleaning_exif = EXIF डेटा को साफ़ करना +# Group headers in scan results +duplicates_group_header = { $count } फ़ाइलें x { $per_file } प्रति फ़ाइल = { $total } कुल +similar_images_group_header = { $count } समान छवियाँ +same_music_group_header = { $count } समान ट्रैक। +# Rename confirmation +confirm_rename_items = क्या आप निश्चित हैं कि आप { $n } चयनित फ़ाइलों का नाम बदलना चाहते हैं? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = सबसे बड़ा +option_search_mode_smallest = सबसे छोटा। +option_similarity_very_high = V. बहुत उच्च +option_similarity_high = ऊँचा। +option_similarity_medium = माध्यम +option_similarity_low = कम +option_similarity_very_low = V. बहुत कम +option_similarity_minimal = न्यूनतम. +option_check_method_hash = हैश +option_check_method_name = नाम +option_check_method_size_and_name = आकार + नाम +option_check_method_size = आकार +option_music_method_tags = टैग +option_music_method_audio = ऑडियो +option_min_size_none = कोई नहीं +option_min_size_1kb = 1 KB +option_min_size_8kb = 8 KB +option_min_size_64kb = 64 KB +option_min_size_1mb = 1 एमबी +option_max_size_16kb = 16 KB +option_max_size_1mb = 1 एमबी +option_max_size_10mb = 10 MB +option_max_size_100mb = 100 एमबी +option_max_size_unlimited = असीमित। +# Volume labels (shown in the directories screen) +volume_internal_storage = आंतरिक संग्रहण +volume_sd_card = मेमोरी कार्ड (एसडी कार्ड) +volume_storage = भंडारण क्षमता +# Directories screen +directories_referenced_tooltip = संदर्भित (हटाया नहीं गया)। +directories_include_section_header = शामिल है। +directories_exclude_section_header = बहिष्कृत +directories_custom_paths = कस्टम पथ +directories_check_button = विश्लेषण करें। +directories_check_popup_title = डायरेक्टरी आँकड़े +directories_check_label_included = शामिल रास्ते: +directories_check_label_excluded = बहिष्कृत पथ: +directories_check_label_referenced = संदर्भ पथ: +directories_check_label_would_scan = स्कैन करने के लिए फ़ाइलें: +directories_check_label_processable = प्रक्रिया करने योग्य फ़ाइलें: +directories_check_scanning = स्कैनिंग... +directories_check_warning_no_processable = कोई भी प्रोसेस करने योग्य फ़ाइलें नहीं मिलीं - कृपया अपने शामिल/बहिष्कृत फ़ोल्डरों की जांच करें +path_edit_title_include = शामिल करने के लिए जोड़ें +path_edit_title_exclude = जो चीज़ों को बाहर करने की सूची में जोड़ना है, उसे यहाँ जोड़ें +path_edit_placeholder = पथ दर्ज करें... +path_edit_not_exists = पथ मौजूद नहीं है +path_edit_is_dir = डायरेक्टरी +path_edit_is_file = फ़ाइल +path_edit_no_newlines = रास्ते में नई लाइनें नहीं हो सकतीं - एंटर कुंजी का उपयोग नहीं किया जा सकता। +ctx_menu_title = खोलें। +ctx_open_file = खुला आइटम +ctx_open_folder = मूल फ़ोल्डर खोलें diff --git a/cedinia/i18n/id/cedinia.ftl b/cedinia/i18n/id/cedinia.ftl new file mode 100644 index 000000000..79ddb7515 --- /dev/null +++ b/cedinia/i18n/id/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = Duplikat +tool_empty_folders = Folder Kosong +tool_similar_images = Gambar Serupa +tool_empty_files = Berkas Kosong +tool_temporary_files = Berkas Sementara +tool_big_files = File Terbesar +tool_broken_files = Berkas Rusak +tool_bad_extensions = Ekstensi yang Buruk +tool_same_music = Duplikat Musik +tool_bad_names = Nama yang Buruk +tool_exif_remover = Data EXIF +tool_directories = Direktori +tool_settings = Pengaturan +# Home screen tool card descriptions +home_dup_description = Temukan file yang memiliki konten yang sama +home_empty_folders_description = Direktori tanpa konten +home_similar_images_description = Temukan foto-foto yang secara visual mirip +home_empty_files_description = Berkas dengan ukuran nol +home_temp_files_description = Berkas sementara dan berkas yang disimpan dalam cache +home_big_files_description = File terbesar/terkecil di disk +home_broken_files_description = PDF, audio, gambar, arsip +home_bad_extensions_description = Berkas dengan ekstensi yang tidak valid +home_same_music_description = File audio serupa berdasarkan tag +home_bad_names_description = Berkas dengan karakter yang bermasalah dalam namanya +home_exif_description = Gambar dengan metadata EXIF +# Results list +scanning = Proses pemindaian sedang berlangsung... +stopping = Berhenti... +no_results = Tidak ada hasil +press_start = Tekan MULAI untuk memulai pemindaian +select_label = Pilih. +deselect_label = Desel. +list_label = Daftar +gallery_label = Gal. +# Selection popup +selection_popup_title = Pilih +select_all = Pilih Semua +select_except_one = Pilih semua kecuali satu +select_except_largest = Pilih semua kecuali yang terbesar +select_except_smallest = Pilih semua kecuali yang terkecil +select_largest = Pilih yang terbesar +select_smallest = Pilih yang terkecil +select_except_highest_res = Pilih semua kecuali resolusi tertinggi +select_except_lowest_res = Pilih semua kecuali resolusi terendah +select_highest_res = Pilih resolusi tertinggi +select_lowest_res = Pilih resolusi terendah +invert_selection = Balikkan pilihan +close = Tutup +# Deselection popup +deselection_popup_title = Batalkan pilihan +deselect_all = Batalkan semua pilihan +deselect_except_one = Batalkan pilihan semua kecuali satu +# Confirm popup +cancel = Batalkan +delete = Hapus +rename = Ubah nama +# Delete errors popup +delete_errors_title = Gagal menghapus beberapa file: +ok = OK +# Stopping overlay +stopping_overlay_title = Berhenti +stopping_overlay_body = + Penyelesaian pemindaian sedang berlangsung... + Mohon tunggu. +# Permission popup +permission_title = Akses File +permission_body = Untuk memindai berkas, aplikasi memerlukan akses ke penyimpanan perangkat. Tanpa izin ini, proses pemindaian tidak akan dapat dilakukan. +grant = Hibah +no_permission_scan_warning = Tidak dapat mengakses berkas - berikan izin untuk melakukan pemindaian +# Settings screen tabs +settings_tab_general = Umum +settings_tab_tools = Alat +settings_tab_diagnostics = Informasi +# Settings - General tab +settings_use_cache = Gunakan cache +settings_use_cache_desc = Mempercepat pemindaian selanjutnya (hash/gambar) +settings_ignore_hidden = Abaikan file tersembunyi +settings_ignore_hidden_desc = File dan folder yang namanya diawali dengan '.' +settings_show_notification = Beritahu saya ketika pemindaian selesai +settings_show_notification_desc = Tampilkan notifikasi sistem saat pemindaian selesai +settings_notify_only_background = Hanya saat berada di latar belakang +settings_notify_only_background_desc = Lewati notifikasi jika aplikasi sedang terlihat +notifications_disabled_banner = Notifikasi dinonaktifkan +notifications_enable_button = Aktifkan +settings_scan_label = PINDAI +settings_filters_label = FILTER (beberapa alat) +settings_min_file_size = Ukuran file minimum +settings_max_file_size = Ukuran file maksimal +settings_language = Bahasa +settings_language_restart = Membutuhkan restart aplikasi +settings_common_label = PENGATURAN UMUM +settings_excluded_items = ITEM YANG DIKECUALIKAN (pola glob, dipisahkan dengan koma) +settings_excluded_items_placeholder = Contoh: *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = EKSTENSI YANG DIIZINKAN (kosong = semua) +settings_allowed_extensions_placeholder = Contoh: jpg, png, mp4 +settings_excluded_extensions = EKSTENSI YANG TIDAK TERMASUK +settings_excluded_extensions_placeholder = Contoh: bak, tmp, log +# Settings - Tools section labels +settings_duplicates_header = DUPLIKAT +settings_check_method_label = METODE PERBANDINGAN +settings_check_method = Metode +settings_hash_type_label = TIPE HASH +settings_hash_type = Jenis hash +settings_hash_type_desc = Blake3 - merupakan pilihan yang direkomendasikan, karena CRC32 memiliki kemungkinan kecil menghasilkan hasil positif palsu +settings_similar_images_header = GAMBAR YANG MIRIP +settings_similarity_preset = Ambang batas kesamaan +settings_similarity_desc = Sangat Tinggi = hanya sangat mirip +settings_hash_size = Ukuran hash +settings_hash_size_desc = Ukuran yang lebih besar cenderung menghasilkan lebih sedikit hasil positif palsu, tetapi juga menemukan lebih sedikit gambar yang serupa +settings_hash_alg = Algoritma hash +settings_image_filter = Ubah ukuran filter +settings_ignore_same_size = Abaikan gambar-gambar dengan dimensi yang sama +settings_gallery_image_fit_cover = Galeri: potong menjadi bentuk persegi +settings_gallery_image_fit_cover_desc = Isi seluruh area gambar; nonaktifkan fitur ini untuk mempertahankan rasio aspek asli +settings_big_files_header = FILE TERBESAR +settings_search_mode = Mode pencarian +settings_file_count = Jumlah berkas +settings_same_music_header = DUPLIKAT MUSIK +settings_music_check_method = Mode perbandingan +settings_music_compare_tags_label = TAG YANG TERKAIT +settings_music_title = Judul +settings_music_artist = Artis +settings_music_year = Tahun +settings_music_length = Panjang +settings_music_genre = Genre +settings_music_bitrate = Bitrate +settings_music_approx = Perbandingan tag perkiraan +settings_broken_files_header = FILE RUSAK +settings_broken_files_note = Pemindaian membutuhkan banyak sumber daya. Untuk performa terbaik, gunakan Krokiet di desktop. +settings_broken_files_types_label = JENIS YANG TELAH DIPERIKSA +settings_broken_audio = Audio +settings_broken_pdf = PDF +settings_broken_archive = Arsip +settings_broken_image = Gambar +settings_bad_names_header = NAMA YANG BURUK +settings_bad_names_checks_label = CEK +settings_bad_names_uppercase_ext = Ekstensi huruf kapital +settings_bad_names_emoji = Emoji dalam nama +settings_bad_names_space = Spasi di awal/akhir +settings_bad_names_non_ascii = Karakter non-ASCII +settings_bad_names_duplicated = Karakter yang berulang +# Settings - Diagnostics tab +diagnostics_header = DIAGNOSTIK +diagnostics_thumbnails = Cache gambar mini +diagnostics_app_cache = Cache aplikasi +diagnostics_refresh = Segarkan +diagnostics_clear_thumbnails = Cuplikan (thumbnail) yang jelas +diagnostics_open_thumbnails_folder = Buka folder +diagnostics_clear_cache = Hapus cache +diagnostics_open_cache_folder = Buka folder +diagnostics_collect_test = Uji akses berkas +diagnostics_collect_test_desc = Periksa berapa banyak berkas yang dapat diakses +diagnostics_collect_test_run = Jalankan +diagnostics_collect_test_stop = Berhenti +collect_test_cancelled = Dihentikan oleh pengguna +diag_confirm_clear_thumbnails = Hapus semua cache gambar mini? +diag_confirm_clear_cache = Hapus semua cache aplikasi? +about_repo = Repositori +about_translate = Terjemahan +about_donate = Dukungan +# Collect-test result popup +collect_test_title = Hasil pengujian +collect_test_volumes = Volume: +collect_test_folders = Folder: +collect_test_files = Berkas: +collect_test_time = Waktu: +# Licenses +licenses_label = LISENSÍ +third_party_licenses = Lisensi pihak ketiga +licenses_popup_title = Lisensi Pihak Ketiga +# Directories screen +directories_include_header = Sertakan +directories_included = Termasuk +directories_exclude_header = Kecualikan +directories_excluded_header = Dikecualikan +directories_add = Sertakan +no_paths = Tidak ada jalur - tambahkan di bawah ini +directories_volume_header = Volume +directories_volume_refresh = Segarkan +directories_volume_add = Tambahkan +# Bottom navigation +nav_home = Mulai +nav_dirs = Direktori +nav_settings = Pengaturan +# Status messages set from Rust +status_ready = Siap +status_stopped = Berhenti +status_no_results = Tidak ada hasil +status_deleted_selected = Telah dihapus yang dipilih +status_deleted_with_errors = Dihapus dengan kesalahan +scan_not_started = Pemindaian belum dimulai +found_items_prefix = Ditemukan +found_items_suffix = item-item +deleted_items_prefix = Dihapus +deleted_items_suffix = barang-barang +deleted_errors_suffix = kesalahan +renamed_prefix = Diganti namanya +renamed_files_suffix = berkas +renamed_errors_suffix = kesalahan +cleaned_exif_prefix = Menghapus data EXIF dari +cleaned_exif_suffix = berkas +cleaned_exif_errors_suffix = kesalahan +and_more_prefix = ...dan +and_more_suffix = lebih +# Gallery / delete popups +gallery_delete_button = Hapus +gallery_back = Kembali +gallery_confirm_delete = Ya, hapus +deleting_files = Menghapus berkas... +stop = Berhenti +files_suffix = berkas +scanning_fallback = Memindai... +app_subtitle = Sebagai penghormatan kepada Pertempuran Cedynia (tahun 972 Masehi) +app_license = Antarmuka pengguna untuk Czkawka Core - Lisensi GPL-3.0 +about_app_label = TENTANG +cache_label = CACHE +# Notification +scan_completed_notification = Pemindaian selesai - { $file_count } item ditemukan +# Confirm popups (set from Rust) +confirm_clean_exif = Apakah Anda yakin ingin menghapus tag EXIF dari { $n } file yang dipilih? +confirm_delete_items = Apakah Anda yakin ingin menghapus { $n } item yang telah dipilih? +gallery_confirm_delete_msg = Anda akan menghapus { $total_images } gambar di { $total_groups } grup. +gallery_confirm_delete_warning = Semua item telah dipilih dari { $unsafe_groups } grup! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = Menghitung dan membandingkan sidik jari audio membutuhkan banyak sumber daya dan mungkin memerlukan waktu yang lama. Disarankan untuk menggunakan Krokiet pada sistem desktop untuk tugas ini. +# Scan stage labels (shown during scan progress) +stage_collecting_files = Mengumpulkan berkas +stage_scanning_name = Pencarian berdasarkan nama +stage_scanning_size_name = Pemindaian berdasarkan nama dan ukuran +stage_scanning_size = Pemindaian berdasarkan ukuran +stage_pre_hash = Pra-penghashan +stage_full_hash = Hashing +stage_loading_cache = Memuat cache +stage_saving_cache = Menyimpan data sementara +stage_calculating_image_hashes = Menghitung hash gambar +stage_comparing_images = Membandingkan gambar +stage_calculating_video_hashes = Menghitung hash video +stage_checking_files = Memeriksa berkas +stage_checking_extensions = Memeriksa ekstensi +stage_checking_names = Memeriksa nama +stage_reading_music_tags = Membaca tag musik +stage_comparing_tags = Membandingkan tag +stage_calculating_music_fingerprints = Menghitung sidik jari musik +stage_comparing_fingerprints = Membandingkan sidik jari +stage_extracting_exif = Membaca tag EXIF +stage_creating_video_thumbnails = Membuat thumbnail video +stage_processing_videos = Memproses video +stage_deleting = Menghapus berkas +stage_renaming = Mengganti nama file +stage_moving = Memindahkan berkas +stage_hardlinking = Membuat tautan keras +stage_symlinking = Membuat symlink +stage_optimizing_videos = Mengoptimalkan video +stage_cleaning_exif = Membersihkan data EXIF +# Group headers in scan results +duplicates_group_header = { $count } berkas x { $per_file } / berkas = { $total } total +similar_images_group_header = { $count } gambar serupa +same_music_group_header = { $count } trek serupa +# Rename confirmation +confirm_rename_items = Apakah Anda yakin ingin mengubah nama { $n } berkas yang dipilih? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = Terbesar +option_search_mode_smallest = Terkecil +option_similarity_very_high = V. Tinggi +option_similarity_high = Tinggi +option_similarity_medium = Sedang +option_similarity_low = Rendah +option_similarity_very_low = Sangat Rendah +option_similarity_minimal = Min. +option_check_method_hash = Hash +option_check_method_name = Nama +option_check_method_size_and_name = Ukuran + Nama +option_check_method_size = Ukuran +option_music_method_tags = Tag +option_music_method_audio = Audio +option_min_size_none = Tidak ada +option_min_size_1kb = 1 KB +option_min_size_8kb = 8 KB +option_min_size_64kb = 64 KB +option_min_size_1mb = 1 MB +option_max_size_16kb = 16 KB +option_max_size_1mb = 1 MB +option_max_size_10mb = 10 MB +option_max_size_100mb = 100 MB +option_max_size_unlimited = Tidak terbatas +# Volume labels (shown in the directories screen) +volume_internal_storage = Penyimpanan Internal +volume_sd_card = Kartu Memori (Kartu SD) +volume_storage = Volume Penyimpanan +# Directories screen +directories_referenced_tooltip = Dirujuk (tidak dihapus) +directories_include_section_header = TERMASUK +directories_exclude_section_header = DIKECUALIKAN +directories_custom_paths = Jalur Kustom +directories_check_button = Analisis +directories_check_popup_title = Statistik Direktori +directories_check_label_included = Jalur yang termasuk: +directories_check_label_excluded = Jalur yang dikecualikan: +directories_check_label_referenced = Jalur referensi: +directories_check_label_would_scan = File yang akan dipindai: +directories_check_label_processable = Berkas yang dapat diproses: +directories_check_scanning = Memindai... +directories_check_warning_no_processable = Tidak ditemukan file yang dapat diproses - pastikan folder yang termasuk/dikecualikan sudah benar +path_edit_title_include = Tambahkan ke Daftar Termasuk +path_edit_title_exclude = Tambahkan ke Daftar Pengecualian +path_edit_placeholder = Masukkan jalur... +path_edit_not_exists = Jalur tidak ditemukan +path_edit_is_dir = Direktori +path_edit_is_file = Berkas +path_edit_no_newlines = Jalur tidak boleh mengandung baris baru — tombol Enter tidak diperbolehkan +ctx_menu_title = Buka +ctx_open_file = Item terbuka +ctx_open_folder = Buka folder induk diff --git a/cedinia/i18n/it/cedinia.ftl b/cedinia/i18n/it/cedinia.ftl new file mode 100644 index 000000000..87462f06a --- /dev/null +++ b/cedinia/i18n/it/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = Duplicati +tool_empty_folders = Cartelle Vuote +tool_similar_images = Immagini Simili +tool_empty_files = File Vuoti +tool_temporary_files = File Temporanei +tool_big_files = File Più Grandi +tool_broken_files = File Interrotti +tool_bad_extensions = Estensioni Errate +tool_same_music = Duplicati Musicali +tool_bad_names = Nomi Errati +tool_exif_remover = Dati EXIF +tool_directories = Directory +tool_settings = Impostazioni +# Home screen tool card descriptions +home_dup_description = Trova file con lo stesso contenuto +home_empty_folders_description = Directory senza contenuto +home_similar_images_description = Trova foto visivamente simili +home_empty_files_description = File con dimensione zero +home_temp_files_description = File temporanei e memorizzati nella cache +home_big_files_description = File più grandi/più piccoli sul disco +home_broken_files_description = PDF, audio, immagini, archivi +home_bad_extensions_description = File con estensione non valida +home_same_music_description = File audio simili per tag +home_bad_names_description = File con caratteri problematici nel nome +home_exif_description = Immagini con metadati EXIF +# Results list +scanning = Ricerca in corso... +stopping = Fermo... +no_results = Nessun risultato +press_start = Premere START per scansionare +select_label = Sé. +deselect_label = Desel. +list_label = Elenco +gallery_label = Gal. +# Selection popup +selection_popup_title = Seleziona +select_all = Seleziona tutto +select_except_one = Seleziona tutto tranne uno +select_except_largest = Seleziona tutto tranne il più grande +select_except_smallest = Seleziona tutto tranne il più piccolo +select_largest = Seleziona più grande +select_smallest = Seleziona il più piccolo +select_except_highest_res = Seleziona tutto tranne la risoluzione più alta +select_except_lowest_res = Seleziona tutto tranne la risoluzione più bassa +select_highest_res = Seleziona la risoluzione più alta +select_lowest_res = Seleziona la risoluzione più bassa +invert_selection = Inverti selezione +close = Chiudi +# Deselection popup +deselection_popup_title = Deseleziona +deselect_all = Deseleziona tutto +deselect_except_one = Deseleziona tutto tranne uno +# Confirm popup +cancel = Annulla +delete = Elimina +rename = Rinomina +# Delete errors popup +delete_errors_title = Impossibile eliminare alcuni file: +ok = OK +# Stopping overlay +stopping_overlay_title = Arresto +stopping_overlay_body = + Termina la scansione corrente... + Attendere prego. +# Permission popup +permission_title = Accesso Ai File +permission_body = Per eseguire la scansione dei file, l'app ha bisogno di accedere all'archiviazione del dispositivo. Senza questo permesso, la scansione non sarà possibile. +grant = Concedi +no_permission_scan_warning = Nessun accesso ai file - concedi l'autorizzazione per la scansione +# Settings screen tabs +settings_tab_general = Generale +settings_tab_tools = Strumenti +settings_tab_diagnostics = Informazioni +# Settings - General tab +settings_use_cache = Usa cache +settings_use_cache_desc = Accelera le scansioni successive (hash/immagini) +settings_ignore_hidden = Ignora i file nascosti +settings_ignore_hidden_desc = File e cartelle che iniziano con '.' +settings_show_notification = Notifica quando la scansione termina +settings_show_notification_desc = Mostra una notifica di sistema al completamento della scansione +settings_notify_only_background = Solo quando in background +settings_notify_only_background_desc = Salta la notifica se l'applicazione è visibile +notifications_disabled_banner = Notifiche disabilitate +notifications_enable_button = Abilita +settings_scan_label = SCANSIONE +settings_filters_label = FILTRI (alcuni strumenti) +settings_min_file_size = Dimensione minima del file +settings_max_file_size = Dimensione massima del file +settings_language = Lingua +settings_language_restart = Richiede il riavvio dell'app +settings_common_label = IMPOSTAZIONI COMUNI +settings_excluded_items = OGGETTI ESCLUSI (pattern globi, separati da virgola) +settings_excluded_items_placeholder = es. *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = ESTENSIONI SEGUITE (vuote = tutte) +settings_allowed_extensions_placeholder = es. jpg, png, mp4 +settings_excluded_extensions = ESTENSIONI ESCLUSE +settings_excluded_extensions_placeholder = es. bak, tmp, log +# Settings - Tools section labels +settings_duplicates_header = DUPLICATI +settings_check_method_label = METODO DI CONFRONTO +settings_check_method = Metodo +settings_hash_type_label = TIPO DI HASH +settings_hash_type = Tipo di hash +settings_hash_type_desc = Blake3 - è consigliata opzione, CRC32 hanno piccole probabilità di falsi positivi +settings_similar_images_header = IMMAGINI SIMILI +settings_similarity_preset = Soglia di somiglianza +settings_similarity_desc = Molto alto = solo vicino identico +settings_hash_size = Dimensione hash +settings_hash_size_desc = Dimensioni più grandi, hanno meno falsi positivi, ma trova anche meno immagini simili +settings_hash_alg = Algoritmo di hash +settings_image_filter = Ridimensiona filtro +settings_ignore_same_size = Ignora immagini con le stesse dimensioni +settings_gallery_image_fit_cover = Galleria: raccolto a quadrato +settings_gallery_image_fit_cover_desc = Riempi la casella; disabilita per mantenere le proporzioni originali +settings_big_files_header = FILI DI MIGLIOR +settings_search_mode = Modalità di ricerca +settings_file_count = Conteggio file +settings_same_music_header = DUPLICATI MUSICI +settings_music_check_method = Modalità di confronto +settings_music_compare_tags_label = TAG COMPARATI +settings_music_title = Titolo +settings_music_artist = Artista +settings_music_year = Anno +settings_music_length = Lunghezza +settings_music_genre = Genere +settings_music_bitrate = Bitrate +settings_music_approx = Confronto approssimativo dei tag +settings_broken_files_header = FILI DI BROKEN +settings_broken_files_note = Scansione intensiva di risorse. Per ottenere le migliori prestazioni utilizzare Krokiet sul desktop. +settings_broken_files_types_label = TIPI CHECKED +settings_broken_audio = Audio +settings_broken_pdf = PDF +settings_broken_archive = Archivio +settings_broken_image = Immagine +settings_bad_names_header = NOMI PASSIVI +settings_bad_names_checks_label = CONTROLLI +settings_bad_names_uppercase_ext = Estensione maiuscolo +settings_bad_names_emoji = Emoji in nome +settings_bad_names_space = Spazi all'inizio/fine +settings_bad_names_non_ascii = Caratteri non-ASCII +settings_bad_names_duplicated = Caratteri ripetuti +# Settings - Diagnostics tab +diagnostics_header = DIAGNOSTICI +diagnostics_thumbnails = Cache delle miniature +diagnostics_app_cache = Cache app +diagnostics_refresh = Aggiorna +diagnostics_clear_thumbnails = Cancella miniature +diagnostics_open_thumbnails_folder = Apri cartella +diagnostics_clear_cache = Svuota cache +diagnostics_open_cache_folder = Apri cartella +diagnostics_collect_test = Test di accesso al file +diagnostics_collect_test_desc = Controlla quanti file sono accessibili +diagnostics_collect_test_run = Esegui +diagnostics_collect_test_stop = Ferma +collect_test_cancelled = Fermato dall'utente +diag_confirm_clear_thumbnails = Cancellare tutte le miniature cache? +diag_confirm_clear_cache = Cancellare tutte le app cache? +about_repo = Repository +about_translate = Traduzioni +about_donate = Supporto +# Collect-test result popup +collect_test_title = Risultati della prova +collect_test_volumes = Volumi: +collect_test_folders = Cartelle: +collect_test_files = File: +collect_test_time = Tempo: +# Licenses +licenses_label = LICENZA +third_party_licenses = Licenze di terze parti +licenses_popup_title = Licenze Di Terzi +# Directories screen +directories_include_header = Includi +directories_included = Incluso +directories_exclude_header = Escludi +directories_excluded_header = Escluso +directories_add = Includi +no_paths = Nessun percorso - aggiungi sotto +directories_volume_header = Volumi +directories_volume_refresh = Aggiorna +directories_volume_add = Aggiungi +# Bottom navigation +nav_home = Inizia +nav_dirs = Directory +nav_settings = Impostazioni +# Status messages set from Rust +status_ready = Pronto +status_stopped = Fermato +status_no_results = Nessun risultato +status_deleted_selected = Eliminato selezionato +status_deleted_with_errors = Eliminato con errori +scan_not_started = Scansione non avviata +found_items_prefix = Trovato +found_items_suffix = elementi +deleted_items_prefix = Eliminato +deleted_items_suffix = elementi +deleted_errors_suffix = errori +renamed_prefix = Rinominato +renamed_files_suffix = file +renamed_errors_suffix = errori +cleaned_exif_prefix = EXIF pulito da +cleaned_exif_suffix = file +cleaned_exif_errors_suffix = errori +and_more_prefix = ...e +and_more_suffix = altro +# Gallery / delete popups +gallery_delete_button = Elimina +gallery_back = Indietro +gallery_confirm_delete = Sì, elimina +deleting_files = Eliminazione file... +stop = Ferma +files_suffix = file +scanning_fallback = Scansione... +app_subtitle = In onore della battaglia di Cedynia (972 CE) +app_license = Frontend per Czkawka Core - GPL-3.0 +about_app_label = CHI +cache_label = CACHE +# Notification +scan_completed_notification = Scansione completata - { $file_count } elementi trovati +# Confirm popups (set from Rust) +confirm_clean_exif = Sei sicuro di voler pulire i tag EXIF dai file selezionati { $n}? +confirm_delete_items = Sei sicuro di voler eliminare { $n } elementi selezionati? +gallery_confirm_delete_msg = Stai per eliminare le immagini { $total_images } nei gruppi { $total_groups}. +gallery_confirm_delete_warning = Tutti gli elementi sono selezionati nei gruppi { $unsafe_groups}! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = Il calcolo e il confronto delle impronte digitali audio sono molto efficienti in termini di risorse e possono richiedere molto tempo. Si consiglia di usare Krokiet su un sistema desktop per questa attività. +# Scan stage labels (shown during scan progress) +stage_collecting_files = Raccolta file +stage_scanning_name = Scansione per nome +stage_scanning_size_name = Scansione per nome e dimensione +stage_scanning_size = Scansione per dimensione +stage_pre_hash = Pre-hashing +stage_full_hash = Hashing +stage_loading_cache = Caricamento cache +stage_saving_cache = Salvataggio cache +stage_calculating_image_hashes = Calcolo degli hash dell'immagine +stage_comparing_images = Confronto delle immagini +stage_calculating_video_hashes = Calcolo di hash video +stage_checking_files = Controllo file +stage_checking_extensions = Controllo estensioni +stage_checking_names = Controllo nomi +stage_reading_music_tags = Lettura di tag musicali +stage_comparing_tags = Confronto dei tag +stage_calculating_music_fingerprints = Calcolo delle impronte musicali +stage_comparing_fingerprints = Confronto delle impronte digitali +stage_extracting_exif = Lettura tag EXIF +stage_creating_video_thumbnails = Creazione miniature video +stage_processing_videos = Elaborazione video +stage_deleting = Eliminazione file +stage_renaming = Rinomina file +stage_moving = Spostamento file +stage_hardlinking = Creazione di collegamenti rigidi +stage_symlinking = Creazione collegamenti simbolici +stage_optimizing_videos = Ottimizzazione video +stage_cleaning_exif = Pulizia EXIF +# Group headers in scan results +duplicates_group_header = { $count } files x { $per_file } / file = { $total } totale +similar_images_group_header = { $count } immagini simili +same_music_group_header = { $count } tracce simili +# Rename confirmation +confirm_rename_items = Sei sicuro di voler rinominare { $n } i file selezionati? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = Più Grande +option_search_mode_smallest = Piccolissimo +option_similarity_very_high = V.Alto +option_similarity_high = Alto +option_similarity_medium = Medio +option_similarity_low = Basso +option_similarity_very_low = V.Basso +option_similarity_minimal = Min. +option_check_method_hash = Hash +option_check_method_name = Nome +option_check_method_size_and_name = Dimensione+Nome +option_check_method_size = Dimensione +option_music_method_tags = Etichette +option_music_method_audio = Audio +option_min_size_none = Nessuno +option_min_size_1kb = 1 KB +option_min_size_8kb = 8 KB +option_min_size_64kb = 64 KB +option_min_size_1mb = 1 MB +option_max_size_16kb = 16 KB +option_max_size_1mb = 1 MB +option_max_size_10mb = 10 MB +option_max_size_100mb = 100 MB +option_max_size_unlimited = Illimitato +# Volume labels (shown in the directories screen) +volume_internal_storage = Memoria Interna +volume_sd_card = Scheda Di Memoria (Scheda Ds) +volume_storage = Volume Di Archiviazione +# Directories screen +directories_referenced_tooltip = Referenziato (non eliminato) +directories_include_section_header = INCLUSO +directories_exclude_section_header = ESCLUSO +directories_custom_paths = Percorsi Personalizzati +directories_check_button = Analizza +directories_check_popup_title = Statistiche Directory +directories_check_label_included = Percorsi inclusi: +directories_check_label_excluded = Percorsi esclusi: +directories_check_label_referenced = Percorsi di riferimento: +directories_check_label_would_scan = File da scansionare: +directories_check_label_processable = File processabili: +directories_check_scanning = Scansione... +directories_check_warning_no_processable = Nessun file processabile trovato: verifica le cartelle incluse/escluse +path_edit_title_include = Aggiungi a Includi +path_edit_title_exclude = Aggiungi a Escludi +path_edit_placeholder = Inserisci percorso... +path_edit_not_exists = Il percorso non esiste +path_edit_is_dir = Directory +path_edit_is_file = File +path_edit_no_newlines = I tracciati non possono contenere newlines — la chiave Enter non è consentita +ctx_menu_title = Apri +ctx_open_file = Apri elemento +ctx_open_folder = Apri cartella superiore diff --git a/cedinia/i18n/ja/cedinia.ftl b/cedinia/i18n/ja/cedinia.ftl new file mode 100644 index 000000000..fbb5300b6 --- /dev/null +++ b/cedinia/i18n/ja/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = セディニア +tool_duplicate_files = 重複 +tool_empty_folders = 空のフォルダ +tool_similar_images = 類似の画像 +tool_empty_files = 空のファイル +tool_temporary_files = 一時ファイル +tool_big_files = 最大のファイル +tool_broken_files = 壊れたファイル +tool_bad_extensions = 不正なエクステンション +tool_same_music = 音楽重複 +tool_bad_names = 名前が正しくありません +tool_exif_remover = EXIFデータ +tool_directories = ディレクトリ +tool_settings = 設定 +# Home screen tool card descriptions +home_dup_description = 同じ内容のファイルを検索 +home_empty_folders_description = コンテンツのないディレクトリ +home_similar_images_description = 視覚的に類似した写真を検索 +home_empty_files_description = サイズゼロのファイル +home_temp_files_description = 一時ファイルとキャッシュ +home_big_files_description = ディスク上の最大/最小のファイル +home_broken_files_description = PDF、音声、画像、アーカイブ +home_bad_extensions_description = 無効な拡張子を持つファイル +home_same_music_description = タグによる類似のオーディオ ファイル +home_bad_names_description = 名前に問題のある文字を含むファイル +home_exif_description = EXIF メタデータを持つ画像 +# Results list +scanning = スキャン中... +stopping = 停止中... +no_results = 結果がありません +press_start = STARTを押してスキャンします +select_label = セル。. +deselect_label = Desel. +list_label = リスト +gallery_label = ガール。. +# Selection popup +selection_popup_title = 選択 +select_all = すべて選択 +select_except_one = 1つ以外のすべてを選択 +select_except_largest = 最大以外のすべてを選択 +select_except_smallest = 最小以外のすべてを選択 +select_largest = 最大値を選択 +select_smallest = 最小を選択 +select_except_highest_res = 最高解像度以外のすべてを選択 +select_except_lowest_res = 最小解像度以外のすべてを選択 +select_highest_res = 最高解像度を選択 +select_lowest_res = 最小解像度を選択 +invert_selection = 選択を反転 +close = 閉じる +# Deselection popup +deselection_popup_title = 選択を解除 +deselect_all = すべての選択を解除 +deselect_except_one = 一つ以外のすべての選択を解除 +# Confirm popup +cancel = キャンセル +delete = 削除 +rename = 名前の変更 +# Delete errors popup +delete_errors_title = いくつかのファイルを削除できませんでした: +ok = 了解。 +# Stopping overlay +stopping_overlay_title = 停止中 +stopping_overlay_body = + 現在のスキャンを完了しています... + お待ちください。. +# Permission popup +permission_title = ファイルアクセス +permission_body = ファイルをスキャンするには、アプリがデバイスのストレージにアクセスする必要があります。この許可がないとスキャンはできません。. +grant = 許可 +no_permission_scan_warning = ファイルへのアクセス権限がありません - スキャンする権限を付与します +# Settings screen tabs +settings_tab_general = 全般 +settings_tab_tools = ツール +settings_tab_diagnostics = 情報 +# Settings - General tab +settings_use_cache = キャッシュを使用 +settings_use_cache_desc = その後のスキャン速度を上げる(ハッシュ/イメージ) +settings_ignore_hidden = 隠しファイルを無視 +settings_ignore_hidden_desc = '.'で始まるファイルとフォルダ。 +settings_show_notification = スキャン終了時に通知する +settings_show_notification_desc = スキャン完了時にシステム通知を表示する +settings_notify_only_background = バックグラウンドでのみ有効 +settings_notify_only_background_desc = アプリが表示されている場合は通知をスキップ +notifications_disabled_banner = 通知を無効にしました +notifications_enable_button = 有効にする +settings_scan_label = スキャン +settings_filters_label = フィルター (一部のツール) +settings_min_file_size = 最小ファイルサイズ +settings_max_file_size = 最大ファイルサイズ +settings_language = 言語 +settings_language_restart = アプリの再起動が必要です +settings_common_label = 一般的な設定 +settings_excluded_items = 除外アイテム(グローブパターン、カンマ区切り) +settings_excluded_items_placeholder = 例: *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = 許可された拡張 (空 = すべて) +settings_allowed_extensions_placeholder = 例: jpg, png, mp4 +settings_excluded_extensions = 除外された拡張 +settings_excluded_extensions_placeholder = 例: bak, tmp, log +# Settings - Tools section labels +settings_duplicates_header = 重複度 +settings_check_method_label = 比較方法 +settings_check_method = 方法 +settings_hash_type_label = ハッシュタイプ +settings_hash_type = ハッシュタイプ +settings_hash_type_desc = Blake3 - 推奨オプション、CRC32 は誤検出の可能性が小さいです +settings_similar_images_header = 類似画像 +settings_similarity_preset = 類似度のしきい値 +settings_similarity_desc = 非常に高い = 同一に近いのみ +settings_hash_size = ハッシュサイズ +settings_hash_size_desc = サイズが大きいほど、誤検出が少ないが、似たような画像も見つかりません +settings_hash_alg = ハッシュアルゴリズム +settings_image_filter = フィルターのサイズ変更 +settings_ignore_same_size = 同じサイズの画像を無視 +settings_gallery_image_fit_cover = ギャラリー: 正方形にクロップ +settings_gallery_image_fit_cover_desc = タイルを塗りつぶす; 元のアスペクト比を維持するには無効にする +settings_big_files_header = 最大のファイル +settings_search_mode = 検索モード +settings_file_count = ファイル数 +settings_same_music_header = 音楽用ダプリケート +settings_music_check_method = 比較モード +settings_music_compare_tags_label = 比較されたタグ +settings_music_title = タイトル +settings_music_artist = アーティスト +settings_music_year = 年 +settings_music_length = 長さ +settings_music_genre = ジャンル +settings_music_bitrate = ビットレート +settings_music_approx = おおよそのタグ比較 +settings_broken_files_header = ブロックファイル +settings_broken_files_note = リソース集約的なスキャン。最高のパフォーマンスを得るためにデスクトップでKrokietを使用してください。. +settings_broken_files_types_label = チェックした種類 +settings_broken_audio = オーディオ +settings_broken_pdf = PDF +settings_broken_archive = アーカイブ +settings_broken_image = 画像 +settings_bad_names_header = Bad Name +settings_bad_names_checks_label = チェック +settings_bad_names_uppercase_ext = 大文字の拡張 +settings_bad_names_emoji = 名前の絵文字 +settings_bad_names_space = 開始/終了時のスペース +settings_bad_names_non_ascii = 非ASCII文字 +settings_bad_names_duplicated = 繰り返し文字 +# Settings - Diagnostics tab +diagnostics_header = 診断 +diagnostics_thumbnails = サムネイルキャッシュ +diagnostics_app_cache = アプリのキャッシュ +diagnostics_refresh = 更新 +diagnostics_clear_thumbnails = サムネイルをクリア +diagnostics_open_thumbnails_folder = フォルダを開く +diagnostics_clear_cache = キャッシュをクリア +diagnostics_open_cache_folder = フォルダを開く +diagnostics_collect_test = ファイルアクセステスト +diagnostics_collect_test_desc = アクセス可能なファイルの数を確認する +diagnostics_collect_test_run = 実行 +diagnostics_collect_test_stop = 停止 +collect_test_cancelled = ユーザーによって停止されました +diag_confirm_clear_thumbnails = サムネイルキャッシュをすべて消去しますか? +diag_confirm_clear_cache = アプリのキャッシュをすべてクリアしますか? +about_repo = リポジトリ +about_translate = 翻訳 +about_donate = サポート +# Collect-test result popup +collect_test_title = テスト結果 +collect_test_volumes = ボリューム: +collect_test_folders = フォルダ: +collect_test_files = ファイル: +collect_test_time = 時間: +# Licenses +licenses_label = ライセンス +third_party_licenses = サードパーティのライセンス +licenses_popup_title = サードパーティライセンス +# Directories screen +directories_include_header = 含む。 +directories_included = 含む +directories_exclude_header = 除外 +directories_excluded_header = 除外 +directories_add = 含める。 +no_paths = パスなし - 以下に追加 +directories_volume_header = ボリューム +directories_volume_refresh = 更新 +directories_volume_add = 追加 +# Bottom navigation +nav_home = 開始 +nav_dirs = ディレクトリ +nav_settings = 設定 +# Status messages set from Rust +status_ready = 準備完了 +status_stopped = 停止しました +status_no_results = 結果がありません +status_deleted_selected = 削除された選択 +status_deleted_with_errors = 削除されたエラーがあります +scan_not_started = スキャンが開始されていません +found_items_prefix = 見つかりました +found_items_suffix = 項目 +deleted_items_prefix = 削除しました +deleted_items_suffix = 項目 +deleted_errors_suffix = エラー +renamed_prefix = 名前を変更 +renamed_files_suffix = ファイル +renamed_errors_suffix = エラー +cleaned_exif_prefix = EXIF情報を削除しました。 +cleaned_exif_suffix = ファイル +cleaned_exif_errors_suffix = エラー +and_more_prefix = ...と +and_more_suffix = もっと見る +# Gallery / delete popups +gallery_delete_button = 削除 +gallery_back = 戻る +gallery_confirm_delete = はい、削除します +deleting_files = ファイルを削除しています... +stop = 停止 +files_suffix = ファイル +scanning_fallback = スキャン中... +app_subtitle = セデニアの戦い(972年) +app_license = Czkawka Core のフロントエンド-GPL-3.0 +about_app_label = About +cache_label = キャッシュ +# Notification +scan_completed_notification = スキャンが完了しました - { $file_count } 個のアイテムが見つかりました +# Confirm popups (set from Rust) +confirm_clean_exif = 選択した { $n } からの EXIF タグを削除してもよろしいですか? +confirm_delete_items = 選択したアイテムを削除してもよろしいですか? { $n} +gallery_confirm_delete_msg = これから、{ $total_groups } のグループにある { $total_images } 枚の画像を削除します。. +gallery_confirm_delete_warning = すべての項目は { $unsafe_groups } グループで選択されます。 +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = オーディオフィンガープリントの計算と比較は非常にリソースがかかるため、時間がかかる場合があります。 このタスクにはデスクトップシステムで Krokiet を使用することをお勧めします。. +# Scan stage labels (shown during scan progress) +stage_collecting_files = ファイルの収集 +stage_scanning_name = 名前でスキャン中 +stage_scanning_size_name = 名前とサイズでスキャン中 +stage_scanning_size = サイズでスキャン中 +stage_pre_hash = 事前ハッシュ +stage_full_hash = ハッシュ +stage_loading_cache = キャッシュを読み込み中 +stage_saving_cache = キャッシュを保存中 +stage_calculating_image_hashes = 画像ハッシュを計算中 +stage_comparing_images = 画像の比較 +stage_calculating_video_hashes = ビデオハッシュの計算 +stage_checking_files = ファイルを確認中 +stage_checking_extensions = エクステンションを確認中 +stage_checking_names = 名前を確認中 +stage_reading_music_tags = 音楽タグを読み込み中 +stage_comparing_tags = タグの比較 +stage_calculating_music_fingerprints = 音楽のフィンガープリントの計算 +stage_comparing_fingerprints = 指紋の比較 +stage_extracting_exif = EXIF タグを読み込み中 +stage_creating_video_thumbnails = 動画サムネイルを作成しています +stage_processing_videos = ビデオを処理中 +stage_deleting = ファイルを削除中 +stage_renaming = ファイル名の変更 +stage_moving = ファイルを移動中 +stage_hardlinking = ハードリンクの作成 +stage_symlinking = シンボリックリンクの作成 +stage_optimizing_videos = 動画の最適化 +stage_cleaning_exif = EXIF をクリーンアップ中 +# Group headers in scan results +duplicates_group_header = { $count } files x { $per_file } / file = { $total } total +similar_images_group_header = { $count } と同様の画像 +same_music_group_header = { $count } 類似のトラック +# Rename confirmation +confirm_rename_items = 選択された { $n } 個のファイルを本当に名前を変更しますか? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = 最大 +option_search_mode_smallest = 小 +option_similarity_very_high = V.高 +option_similarity_high = 高い +option_similarity_medium = ミディアム +option_similarity_low = 低い +option_similarity_very_low = V. Low +option_similarity_minimal = 分. +option_check_method_hash = ハッシュ +option_check_method_name = 名前 +option_check_method_size_and_name = サイズ+名前 +option_check_method_size = サイズ +option_music_method_tags = タグ +option_music_method_audio = オーディオ +option_min_size_none = なし +option_min_size_1kb = 1 KB +option_min_size_8kb = 8 KB +option_min_size_64kb = 64 KB +option_min_size_1mb = 1 MB +option_max_size_16kb = 16 KB +option_max_size_1mb = 1 MB +option_max_size_10mb = 10 MB +option_max_size_100mb = 100 MB +option_max_size_unlimited = 無制限です +# Volume labels (shown in the directories screen) +volume_internal_storage = 内部ストレージ +volume_sd_card = メモリカード(SDカード) +volume_storage = ストレージボリューム +# Directories screen +directories_referenced_tooltip = 参照(削除されていません) +directories_include_section_header = 含まれる +directories_exclude_section_header = 除外しました +directories_custom_paths = カスタムパス +directories_check_button = 分析 +directories_check_popup_title = ディレクトリの統計 +directories_check_label_included = 含まれるパス: +directories_check_label_excluded = 除外パス: +directories_check_label_referenced = 参照パス: +directories_check_label_would_scan = スキャンするファイル: +directories_check_label_processable = 処理可能なファイル: +directories_check_scanning = スキャン中... +directories_check_warning_no_processable = 処理可能なファイルが見つかりません - 含まれるフォルダ/除外フォルダを確認してください +path_edit_title_include = Include に追加 +path_edit_title_exclude = 除外に追加 +path_edit_placeholder = パスを入力... +path_edit_not_exists = パスが存在しません +path_edit_is_dir = ディレクトリ +path_edit_is_file = ファイル +path_edit_no_newlines = パスに改行を含めることはできません — 入力キーは許可されていません +ctx_menu_title = 開く +ctx_open_file = アイテムを開く +ctx_open_folder = 親フォルダを開く diff --git a/cedinia/i18n/ko/cedinia.ftl b/cedinia/i18n/ko/cedinia.ftl new file mode 100644 index 000000000..629000e11 --- /dev/null +++ b/cedinia/i18n/ko/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = 세디니아 +tool_duplicate_files = 중복 파일 +tool_empty_folders = 비어있는 폴더들 +tool_similar_images = 유사한 이미지 +tool_empty_files = 빈 파일 +tool_temporary_files = 임시 파일 +tool_big_files = 가장 큰 파일들 +tool_broken_files = 손상된 파일 +tool_bad_extensions = 잘못된 확장자 +tool_same_music = 중복 음악 +tool_bad_names = 나쁜 이름 +tool_exif_remover = EXIF 데이터 +tool_directories = 디렉터리 (또는 폴더) +tool_settings = 설정 +# Home screen tool card descriptions +home_dup_description = 동일한 내용을 가진 파일을 찾습니다 +home_empty_folders_description = 내용이 없는 폴더 +home_similar_images_description = 시각적으로 유사한 사진을 찾아보세요 +home_empty_files_description = 크기가 0인 파일들 +home_temp_files_description = 임시 파일 및 캐시 파일 +home_big_files_description = 디스크에서 가장 큰/가장 작은 파일들 +home_broken_files_description = PDF, 오디오, 이미지, 아카이브 파일 +home_bad_extensions_description = 유효하지 않은 확장자를 가진 파일들 +home_same_music_description = 태그를 기준으로 한 유사 오디오 파일 +home_bad_names_description = 이름에 문제가 있는 문자가 포함된 파일 +home_exif_description = EXIF 메타데이터가 포함된 이미지 +# Results list +scanning = 스캔 진행 중... +stopping = 정지 중... +no_results = 결과가 없습니다 +press_start = START 버튼을 눌러 스캔을 시작합니다 +select_label = 선택. +deselect_label = Desel. +list_label = 목록 +gallery_label = 갈. +# Selection popup +selection_popup_title = 선택 +select_all = 전체 선택 +select_except_one = 다음 중 하나를 제외하고 모두 선택하세요 +select_except_largest = 가장 큰 것 외에는 모두 선택 +select_except_smallest = 가장 작은 파일 제외하고 모두 선택 +select_largest = 가장 큰 것을 선택하세요 +select_smallest = 가장 작은 것 선택 +select_except_highest_res = 가장 높은 해상도를 제외하고 모두 선택 +select_except_lowest_res = 가장 낮은 해상도를 제외하고 모두 선택합니다 +select_highest_res = 가장 높은 해상도를 선택하세요 +select_lowest_res = 가장 낮은 해상도 선택 +invert_selection = 선택 반전 +close = 닫기 +# Deselection popup +deselection_popup_title = 선택 해제 +deselect_all = 전체 선택 해제 +deselect_except_one = 모두 선택 해제하고, 단 하나만 선택하세요 +# Confirm popup +cancel = 취소 +delete = 삭제 +rename = 이름 바꾸기 +# Delete errors popup +delete_errors_title = 일부 파일을 삭제하는 데 실패했습니다: +ok = 알겠습니다 +# Stopping overlay +stopping_overlay_title = 정지 +stopping_overlay_body = + 현재 스캔이 완료됩니다... + 잠시만 기다려 주십시오. +# Permission popup +permission_title = 파일 접근 권한 +permission_body = 파일을 스캔하려면 앱이 기기 저장 공간에 접근해야 합니다. 이 권한이 없으면 스캔이 불가능합니다. +grant = 수혜 +no_permission_scan_warning = 파일 접근 권한 없음 - 스캔 권한을 부여하세요 +# Settings screen tabs +settings_tab_general = 일반 +settings_tab_tools = 도구들 +settings_tab_diagnostics = 정보 +# Settings - General tab +settings_use_cache = 캐시 사용 +settings_use_cache_desc = 이후 스캔(해시/이미지) 속도를 향상시킵니다 +settings_ignore_hidden = 숨김 파일은 무시합니다 +settings_ignore_hidden_desc = '.'로 시작하는 파일 및 폴더 +settings_show_notification = 스캔이 완료되면 알려주세요 +settings_show_notification_desc = 스캔 완료 시 시스템 알림을 표시합니다 +settings_notify_only_background = 배경으로 전환되었을 때만 +settings_notify_only_background_desc = 앱이 화면에 보이는 경우 알림을 표시하지 않습니다 +notifications_disabled_banner = 알림 기능이 비활성화되었습니다 +notifications_enable_button = 활성화 +settings_scan_label = 스캔 +settings_filters_label = 필터 (일부 도구) +settings_min_file_size = 최소 파일 크기 +settings_max_file_size = 최대 파일 크기 +settings_language = 언어 +settings_language_restart = 앱을 다시 시작해야 합니다 +settings_common_label = 일반 설정 +settings_excluded_items = 제외 대상 항목 (글로브 패턴, 쉼표로 구분) +settings_excluded_items_placeholder = 예: *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = 허용되는 확장자 (비어 있음 = 모두 허용) +settings_allowed_extensions_placeholder = 예: jpg, png, mp4 +settings_excluded_extensions = 제외 대상 확장 프로그램 +settings_excluded_extensions_placeholder = 예: bak, tmp, log +# Settings - Tools section labels +settings_duplicates_header = 중복 항목 +settings_check_method_label = 비교 방법 +settings_check_method = 방식 +settings_hash_type_label = 해시 유형 +settings_hash_type = 해시 유형 +settings_hash_type_desc = Blake3 - 권장되는 옵션이며, CRC32는 오탐 가능성이 낮습니다 +settings_similar_images_header = 유사 이미지 +settings_similarity_preset = 유사성 임계값 +settings_similarity_desc = 매우 높음 = 거의 동일한 것만 +settings_hash_size = 해시 크기 +settings_hash_size_desc = 더 큰 크기의 모델은 오탐이 적은 반면, 유사한 이미지를 찾는 능력도 떨어집니다 +settings_hash_alg = 해시 알고리즘 +settings_image_filter = 크기 조절 필터 +settings_ignore_same_size = 같은 크기의 이미지는 무시합니다 +settings_gallery_image_fit_cover = 갤러리: 정사각형으로 자르기 +settings_gallery_image_fit_cover_desc = 타일을 채우기; 원본 비율을 유지하려면 비활성화하세요 +settings_big_files_header = 가장 큰 파일들 +settings_search_mode = 검색 모드 +settings_file_count = 파일 개수 +settings_same_music_header = 음악 복제본 +settings_music_check_method = 비교 모드 +settings_music_compare_tags_label = 비교 태그 +settings_music_title = 제목 +settings_music_artist = 아티스트 +settings_music_year = 연도 +settings_music_length = 길이 +settings_music_genre = 장르 +settings_music_bitrate = 비트레이트 +settings_music_approx = 대략적인 태그 비교 +settings_broken_files_header = 손상된 파일들 +settings_broken_files_note = 많은 시스템 자원을 사용하는 스캔 작업입니다. 최상의 성능을 위해 데스크톱 환경에서 Krokiet을 사용하십시오. +settings_broken_files_types_label = 확인된 유형 목록 +settings_broken_audio = 오디오 파일 +settings_broken_pdf = PDF +settings_broken_archive = 아카이브 파일 +settings_broken_image = 이미지 파일 +settings_bad_names_header = 나쁜 이름들 +settings_bad_names_checks_label = 수표 +settings_bad_names_uppercase_ext = 대문자 확장 +settings_bad_names_emoji = 이모지 이름에 +settings_bad_names_space = 시작/끝에 있는 공백 +settings_bad_names_non_ascii = ASCII 문자가 아닌 문자들 +settings_bad_names_duplicated = 반복되는 문자 +# Settings - Diagnostics tab +diagnostics_header = 진단 +diagnostics_thumbnails = 미리보기 이미지 캐시 +diagnostics_app_cache = 앱 캐시 +diagnostics_refresh = 새로 고침 +diagnostics_clear_thumbnails = 선명한 썸네일 +diagnostics_open_thumbnails_folder = 폴더 열기 +diagnostics_clear_cache = 캐시 삭제 +diagnostics_open_cache_folder = 폴더 열기 +diagnostics_collect_test = 파일 접근 테스트 +diagnostics_collect_test_desc = 접근 가능한 파일의 개수를 확인하세요 +diagnostics_collect_test_run = 실행 +diagnostics_collect_test_stop = 정지 +collect_test_cancelled = 사용자 의해 중단됨 +diag_confirm_clear_thumbnails = 섬네일 캐시를 모두 삭제하시겠습니까? +diag_confirm_clear_cache = 앱 캐시를 모두 삭제하시겠습니까? +about_repo = 리포지토리 +about_translate = 번역 +about_donate = 지원 +# Collect-test result popup +collect_test_title = 테스트 결과 +collect_test_volumes = 권수: +collect_test_folders = 폴더: +collect_test_files = 파일: +collect_test_time = 시간: +# Licenses +licenses_label = 라이선스 +third_party_licenses = 제3자 라이선스 +licenses_popup_title = 제3자 라이선스 +# Directories screen +directories_include_header = 포함하세요 +directories_included = 포함됨 +directories_exclude_header = 제외 +directories_excluded_header = 제외됨 +directories_add = 다음 항목을 포함합니다 +no_paths = 경로는 없습니다. 아래에 추가해주세요 +directories_volume_header = 권 (卷) +directories_volume_refresh = 새로 고침 +directories_volume_add = 추가 +# Bottom navigation +nav_home = 시작 +nav_dirs = 폴더 목록 +nav_settings = 설정 +# Status messages set from Rust +status_ready = 준비 완료 +status_stopped = 정지됨 +status_no_results = 결과가 없습니다 +status_deleted_selected = 선택된 항목 삭제 +status_deleted_with_errors = 오류와 함께 삭제됨 +scan_not_started = 스캔이 시작되지 않았습니다 +found_items_prefix = 발견됨 +found_items_suffix = 아이템들 +deleted_items_prefix = 삭제됨 +deleted_items_suffix = 아이템들 +deleted_errors_suffix = 오류들 +renamed_prefix = 이름이 변경되었습니다 +renamed_files_suffix = 파일들 +renamed_errors_suffix = 오류들 +cleaned_exif_prefix = EXIF 정보 제거 완료 +cleaned_exif_suffix = 파일들 +cleaned_exif_errors_suffix = 오류들 +and_more_prefix = ...그리고 +and_more_suffix = 더 +# Gallery / delete popups +gallery_delete_button = 삭제 +gallery_back = 뒤로 +gallery_confirm_delete = 네, 삭제합니다 +deleting_files = 파일 삭제 중... +stop = 정지 +files_suffix = 파일들 +scanning_fallback = 스캔중... +app_subtitle = 체디니아 전투(972년)를 기리며 +app_license = Czkawka Core의 프론트엔드 - GPL-3.0 라이선스 +about_app_label = 소개 +cache_label = 캐시(CACHE) +# Notification +scan_completed_notification = 검색 완료 - { $file_count } 개의 항목이 발견되었습니다 +# Confirm popups (set from Rust) +confirm_clean_exif = 선택된 { $n }개의 파일에서 EXIF 태그를 삭제하시겠습니까? +confirm_delete_items = 선택하신 { $n }개의 항목을 삭제하시겠습니까? +gallery_confirm_delete_msg = { $total_groups } 개의 그룹에 있는 { $total_images } 개의 이미지를 삭제하시려고 합니다. +gallery_confirm_delete_warning = 모든 항목은 { $unsafe_groups } 그룹에서 선택되었습니다! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = 오디오 지문 계산 및 비교는 많은 자원을 소모하며, 시간이 오래 걸릴 수 있습니다. 따라서 이 작업은 데스크톱 시스템에서 Krokiet을 사용하는 것이 좋습니다. +# Scan stage labels (shown during scan progress) +stage_collecting_files = 파일 수집 중 +stage_scanning_name = 이름으로 검색 +stage_scanning_size_name = 이름과 크기 기준으로 검색 +stage_scanning_size = 크기에 따른 스캔 +stage_pre_hash = 사전 해싱 +stage_full_hash = 해싱 (Hashing) +stage_loading_cache = 캐시 로드 중 +stage_saving_cache = 캐시 저장 중 +stage_calculating_image_hashes = 이미지 해시 값 계산 중 +stage_comparing_images = 이미지 비교하기 +stage_calculating_video_hashes = 동영상 해시 값 계산 중 +stage_checking_files = 파일 확인 중 +stage_checking_extensions = 확장 프로그램 확인 중 +stage_checking_names = 이름 확인 중 +stage_reading_music_tags = 음악 파일의 태그 읽기 +stage_comparing_tags = 태그 비교 +stage_calculating_music_fingerprints = 음악 지문 계산하기 +stage_comparing_fingerprints = 지문 비교하기 +stage_extracting_exif = EXIF 태그 읽기 +stage_creating_video_thumbnails = 비디오 썸네일 제작하기 +stage_processing_videos = 동영상 처리 중입니다 +stage_deleting = 파일 삭제하기 +stage_renaming = 파일 이름 변경중 +stage_moving = 항목 이동 +stage_hardlinking = 하드 링크 생성하기 +stage_symlinking = 심볼릭 링크 생성하기 +stage_optimizing_videos = 동영상 최적화하기 +stage_cleaning_exif = EXIF 정보 제거 +# Group headers in scan results +duplicates_group_header = { $count } 개의 파일 x { $per_file } / 파일 = 총 { $total } +similar_images_group_header = { $count } 개의 유사 이미지 +same_music_group_header = { $count } 개의 유사한 트랙 +# Rename confirmation +confirm_rename_items = 선택된 { $n }개의 파일 이름을 정말 변경하시겠습니까? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = 가장 큰 +option_search_mode_smallest = 가장 작음 +option_similarity_very_high = V. 매우 높음 +option_similarity_high = 높음 +option_similarity_medium = 보통 +option_similarity_low = 낮음 +option_similarity_very_low = V. 매우 낮음 +option_similarity_minimal = 최소. +option_check_method_hash = 해시 +option_check_method_name = 파일명 +option_check_method_size_and_name = 사이즈 + 이름 +option_check_method_size = 파일 크기 +option_music_method_tags = 태그 기준 검사 +option_music_method_audio = 오디오 파일 +option_min_size_none = 없음 +option_min_size_1kb = 1 KB +option_min_size_8kb = 8 KB +option_min_size_64kb = 64 KB +option_min_size_1mb = 1 MB +option_max_size_16kb = 16 KB +option_max_size_1mb = 1 MB +option_max_size_10mb = 10 MB +option_max_size_100mb = 100 MB +option_max_size_unlimited = 제한 없음 +# Volume labels (shown in the directories screen) +volume_internal_storage = 내부 저장 공간 +volume_sd_card = 메모리 카드 (SD 카드) +volume_storage = 저장 공간 용량 +# Directories screen +directories_referenced_tooltip = 참조 (삭제되지 않음) +directories_include_section_header = 포함됨 +directories_exclude_section_header = 제외됨 +directories_custom_paths = 사용자 정의 경로 +directories_check_button = 분석하십시오 +directories_check_popup_title = 디렉터리 통계 정보 +directories_check_label_included = 포함된 경로: +directories_check_label_excluded = 제외된 경로: +directories_check_label_referenced = 참조 경로: +directories_check_label_would_scan = 검사할 파일: +directories_check_label_processable = 처리 가능한 파일 형식: +directories_check_scanning = 스캔중... +directories_check_warning_no_processable = 처리 가능한 파일이 없습니다. 포함/제외된 폴더 설정을 확인해주세요 +path_edit_title_include = 포함 목록에 추가 +path_edit_title_exclude = 제외 목록에 추가 +path_edit_placeholder = 경로를 입력하세요... +path_edit_not_exists = 경로가 존재하지 않습니다 +path_edit_is_dir = 디렉토리 +path_edit_is_file = 파일 +path_edit_no_newlines = 경로는 줄 바꿈을 포함할 수 없습니다. Enter 키는 사용할 수 없습니다 +ctx_menu_title = 열기 +ctx_open_file = 미결 항목 +ctx_open_folder = 상위 폴더 열기 diff --git a/cedinia/i18n/nl/cedinia.ftl b/cedinia/i18n/nl/cedinia.ftl new file mode 100644 index 000000000..887abdea2 --- /dev/null +++ b/cedinia/i18n/nl/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = Duplicaten +tool_empty_folders = Lege mappen +tool_similar_images = Vergelijkbare afbeeldingen +tool_empty_files = Lege bestanden +tool_temporary_files = Tijdelijke bestanden +tool_big_files = Grootste bestanden +tool_broken_files = Kapotte Bestanden +tool_bad_extensions = Slechte extensies +tool_same_music = Muziek duplicaten +tool_bad_names = Slechte namen +tool_exif_remover = EXIF gegevens +tool_directories = Mappen +tool_settings = Instellingen +# Home screen tool card descriptions +home_dup_description = Bestanden met dezelfde inhoud zoeken +home_empty_folders_description = Mappen zonder inhoud +home_similar_images_description = Vind visueel vergelijkbare foto's +home_empty_files_description = Bestanden met nul grootte +home_temp_files_description = Tijdelijke en opgeslagen bestanden +home_big_files_description = Grootste/Kleinste bestanden op schijf +home_broken_files_description = PDF, audio, afbeeldingen, archieven +home_bad_extensions_description = Bestanden met ongeldige extensie +home_same_music_description = Vergelijkbare audiobestanden via tags +home_bad_names_description = Bestanden met problematische tekens in naam +home_exif_description = Afbeeldingen met EXIF metadata +# Results list +scanning = Scannen in uitvoering... +stopping = Stoppen... +no_results = Geen resultaten gevonden +press_start = Druk op START om te scannen +select_label = Zel. +deselect_label = Desel. +list_label = Klantenlijst +gallery_label = Gal. +# Selection popup +selection_popup_title = Selecteren +select_all = Alles selecteren +select_except_one = Alles behalve één selecteren +select_except_largest = Selecteer alles behalve de grootste +select_except_smallest = Selecteer alles behalve de kleinste +select_largest = Selecteer grootste +select_smallest = Selecteer kleinste +select_except_highest_res = Alles selecteren behalve de hoogste resolutie +select_except_lowest_res = Alles behalve de laagste resolutie selecteren +select_highest_res = Hoogste resolutie selecteren +select_lowest_res = Selecteer de laagste resolutie +invert_selection = Selectie omkeren +close = Afsluiten +# Deselection popup +deselection_popup_title = Deselecteer +deselect_all = Deselecteer alles +deselect_except_one = Deselecteer alles behalve één +# Confirm popup +cancel = annuleren +delete = Verwijderen +rename = Hernoem +# Delete errors popup +delete_errors_title = Kan sommige bestanden niet verwijderen: +ok = Ok +# Stopping overlay +stopping_overlay_title = Stoppen +stopping_overlay_body = + Beëindig huidige scan... + Een ogenblik geduld. +# Permission popup +permission_title = Toegang tot bestand +permission_body = Om bestanden te scannen, moet de app toegang hebben tot de opslag van het apparaat. Zonder deze toestemming is scannen niet mogelijk. +grant = Toestaan +no_permission_scan_warning = Geen bestandstoegang - geef toestemming om te scannen +# Settings screen tabs +settings_tab_general = Algemeen +settings_tab_tools = Hulpmiddelen +settings_tab_diagnostics = Informatie +# Settings - General tab +settings_use_cache = Gebruik cache +settings_use_cache_desc = Versnelt volgende scans (hash/images) +settings_ignore_hidden = Verborgen bestanden negeren +settings_ignore_hidden_desc = Bestanden en mappen beginnend met '.' +settings_show_notification = Melden wanneer scan is voltooid +settings_show_notification_desc = Toon een systeemmelding bij voltooiing van de scan +settings_notify_only_background = Alleen als op de achtergrond +settings_notify_only_background_desc = Melding overslaan als de app zichtbaar is +notifications_disabled_banner = Meldingen uitgeschakeld +notifications_enable_button = Inschakelen +settings_scan_label = SCANNEREN +settings_filters_label = FILTERS (sommige tools) +settings_min_file_size = Minimale bestandsgrootte +settings_max_file_size = Max. bestandsgrootte +settings_language = Taal +settings_language_restart = Vereist herstart van app +settings_common_label = GEWOON INSTELLINGEN +settings_excluded_items = EXCLUDED ITEMS (glob patronen, komma gescheiden) +settings_excluded_items_placeholder = bijv. *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = EXTENSIES TOESTAAN (leeg = alles) +settings_allowed_extensions_placeholder = bijv. jpg, png, mp4 +settings_excluded_extensions = EXTENSIES UITGEVOERD +settings_excluded_extensions_placeholder = bijv. bak, tmp, log +# Settings - Tools section labels +settings_duplicates_header = DUPLICATEN +settings_check_method_label = METHOD KOPEN +settings_check_method = Methode +settings_hash_type_label = HASH TYPE +settings_hash_type = Soort hash +settings_hash_type_desc = Blake3 - wordt aangeraden optie, CRC32 hebben een kleine kans op valse positieven +settings_similar_images_header = SIMILAR AFBEELDINGEN +settings_similarity_preset = Drempelwaarde gelijkwaardigheid +settings_similarity_desc = Zeer Hoog = alleen bijna identiek +settings_hash_size = Hash grootte +settings_hash_size_desc = Grotere formaten, hebben minder valse positieven, maar vinden ook minder gelijksoortige afbeeldingen +settings_hash_alg = Hash algoritme +settings_image_filter = Filter aanpassen +settings_ignore_same_size = Negeer afbeeldingen met dezelfde afmetingen +settings_gallery_image_fit_cover = Galerij: bijsnijden tot vierkant +settings_gallery_image_fit_cover_desc = Vul de tegel; schakel uit om de originele hoogte-breedteverhouding te behouden +settings_big_files_header = BIGGESTE BESTANDEN +settings_search_mode = Zoek modus +settings_file_count = Aantal bestanden +settings_same_music_header = MUSICIES DUPLICATEN +settings_music_check_method = Vergelijkingsmodus +settings_music_compare_tags_label = GECOMPAREERDE TAGS +settings_music_title = Aanspreektitel +settings_music_artist = Kunstenaar +settings_music_year = jaar +settings_music_length = longueur +settings_music_genre = genre +settings_music_bitrate = Bitsnelheid +settings_music_approx = Geschatte tag vergelijking +settings_broken_files_header = BROKEN BESTANDEN +settings_broken_files_note = Resource-intensieve scan. Gebruik de desktopversie van Krokiet. +settings_broken_files_types_label = GECHECKEERde TYPEN +settings_broken_audio = Geluid +settings_broken_pdf = PDF-bestand +settings_broken_archive = Archief +settings_broken_image = Afbeelding +settings_bad_names_header = BAD NAAMS +settings_bad_names_checks_label = KIES +settings_bad_names_uppercase_ext = Hoofdletters extensie +settings_bad_names_emoji = Emoji in de naam +settings_bad_names_space = Spaties bij het starten/einde +settings_bad_names_non_ascii = Niet-ASCII-tekens +settings_bad_names_duplicated = Herhaalde tekens +# Settings - Diagnostics tab +diagnostics_header = DIAGNOSTIËREN +diagnostics_thumbnails = Miniatuurweergavecache +diagnostics_app_cache = App-cache +diagnostics_refresh = Vernieuwen +diagnostics_clear_thumbnails = Miniaturen wissen +diagnostics_open_thumbnails_folder = Map openen +diagnostics_clear_cache = Cache legen +diagnostics_open_cache_folder = Map openen +diagnostics_collect_test = Test bestandstoegang +diagnostics_collect_test_desc = Controleer hoeveel bestanden toegankelijk zijn +diagnostics_collect_test_run = Uitvoeren +diagnostics_collect_test_stop = Stoppen +collect_test_cancelled = Gestopt door gebruiker +diag_confirm_clear_thumbnails = Alle miniatuurcache wissen? +diag_confirm_clear_cache = Alle app-cache wissen? +about_repo = Bewaarplaats +about_translate = Vertalen +about_donate = Ondersteuning +# Collect-test result popup +collect_test_title = Test resultaten +collect_test_volumes = Volumes: +collect_test_folders = Mappen: +collect_test_files = Bestanden: +collect_test_time = Tijd: +# Licenses +licenses_label = LICENTIE +third_party_licenses = Licenties van derden +licenses_popup_title = Licenties van derden +# Directories screen +directories_include_header = Inclusief +directories_included = Inbegrepen +directories_exclude_header = Uitsluiten +directories_excluded_header = Uitgesloten +directories_add = Inclusief +no_paths = Geen paden - voeg hieronder toe +directories_volume_header = Volumes +directories_volume_refresh = Vernieuwen +directories_volume_add = Toevoegen +# Bottom navigation +nav_home = Beginnen +nav_dirs = Mappen +nav_settings = Instellingen +# Status messages set from Rust +status_ready = Klaar +status_stopped = Gestopt +status_no_results = Geen resultaten gevonden +status_deleted_selected = Geselecteerde items verwijderd +status_deleted_with_errors = Verwijderd met fouten +scan_not_started = Scan niet gestart +found_items_prefix = Gevonden +found_items_suffix = artikelen +deleted_items_prefix = Verwijderd +deleted_items_suffix = artikelen +deleted_errors_suffix = fouten +renamed_prefix = Hernoemd +renamed_files_suffix = bestanden +renamed_errors_suffix = fouten +cleaned_exif_prefix = Schoongemaakte EXIF van +cleaned_exif_suffix = bestanden +cleaned_exif_errors_suffix = fouten +and_more_prefix = ...en +and_more_suffix = meer +# Gallery / delete popups +gallery_delete_button = Verwijderen +gallery_back = Achterzijde +gallery_confirm_delete = Ja, verwijderen +deleting_files = Bestanden verwijderen... +stop = Stoppen +files_suffix = bestanden +scanning_fallback = Scannen... +app_subtitle = Ter ere van de slag van Cedynia (972 CE) +app_license = Frontend voor Czkawka Core - GPL-3.0 +about_app_label = Over +cache_label = ACHTERZIJDE +# Notification +scan_completed_notification = Scan voltooid - { $file_count } items gevonden +# Confirm popups (set from Rust) +confirm_clean_exif = Weet je zeker dat je EXIF tags van { $n } geselecteerde bestanden wilt wissen? +confirm_delete_items = Weet je zeker dat je { $n } geselecteerde items wilt verwijderen? +gallery_confirm_delete_msg = Je staat op het punt { $total_images } afbeeldingen in { $total_groups } groepen te verwijderen. +gallery_confirm_delete_warning = Alle items zijn geselecteerd in { $unsafe_groups } groepen! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = Audio-vingerafdrukken berekenen en vergelijken is erg bronintensief en kan een lange tijd duren. Het wordt aangeraden om Krokiet te gebruiken op een bureaublad voor deze taak. +# Scan stage labels (shown during scan progress) +stage_collecting_files = Bestanden verzamelen +stage_scanning_name = Scannen op naam +stage_scanning_size_name = Scannen op naam en grootte +stage_scanning_size = Scannen op grootte +stage_pre_hash = Voorafgaande hashing +stage_full_hash = Hashing +stage_loading_cache = Cache laden +stage_saving_cache = Cache opslaan +stage_calculating_image_hashes = Berekenen afbeeldingshashes +stage_comparing_images = Afbeeldingen vergelijken +stage_calculating_video_hashes = Video-hashes berekenen +stage_checking_files = Bestanden controleren +stage_checking_extensions = Extensies controleren +stage_checking_names = Namen controleren +stage_reading_music_tags = Muziektags lezen +stage_comparing_tags = Tags vergelijken +stage_calculating_music_fingerprints = Vingerafdrukken van muziek berekenen +stage_comparing_fingerprints = Vingerafdrukken vergelijken +stage_extracting_exif = Lees EXIF tags +stage_creating_video_thumbnails = Video-miniaturen worden aangemaakt +stage_processing_videos = Video's verwerken +stage_deleting = Bestanden verwijderen +stage_renaming = Bestanden hernoemen +stage_moving = Bestanden verplaatsen +stage_hardlinking = harde links maken +stage_symlinking = Symlinks maken +stage_optimizing_videos = Video's optimaliseren +stage_cleaning_exif = ExIFF opruimen +# Group headers in scan results +duplicates_group_header = { $count } bestanden x { $per_file } / bestand = { $total } in totaal +similar_images_group_header = { $count } soortgelijke afbeeldingen +same_music_group_header = { $count } soortgelijke nummers +# Rename confirmation +confirm_rename_items = Weet je zeker dat je { $n } geselecteerde bestanden wilt hernoemen? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = Grootste +option_search_mode_smallest = Kleinste +option_similarity_very_high = Hoog +option_similarity_high = hoog +option_similarity_medium = Middelgroot +option_similarity_low = laag +option_similarity_very_low = V.Laag +option_similarity_minimal = min. +option_check_method_hash = Toegangssleutel +option_check_method_name = naam +option_check_method_size_and_name = Grootte+Naam +option_check_method_size = Grootte +option_music_method_tags = Labels +option_music_method_audio = Geluid +option_min_size_none = geen +option_min_size_1kb = 1 kB +option_min_size_8kb = 8 kB +option_min_size_64kb = 64 KB +option_min_size_1mb = 1 MB +option_max_size_16kb = 16 kB +option_max_size_1mb = 1 MB +option_max_size_10mb = 10 MB +option_max_size_100mb = 100 MB +option_max_size_unlimited = Onbeperkt +# Volume labels (shown in the directories screen) +volume_internal_storage = Interne opslag +volume_sd_card = Geheugenkaart (SD-kaart) +volume_storage = Volume voor opslag +# Directories screen +directories_referenced_tooltip = Gerefereerd (niet verwijderd) +directories_include_section_header = INCLUDEERD +directories_exclude_section_header = UITGESLOTEN +directories_custom_paths = Aangepaste paden +directories_check_button = Analyseren +directories_check_popup_title = Map statistieken +directories_check_label_included = Inbegrepen paden: +directories_check_label_excluded = Uitgesloten paden: +directories_check_label_referenced = Referentie paden: +directories_check_label_would_scan = Te scannen bestanden: +directories_check_label_processable = Verbruikbare bestanden: +directories_check_scanning = Scannen... +directories_check_warning_no_processable = Geen verwerkbare bestanden gevonden - controleer uw include/uitgesloten mappen +path_edit_title_include = Toevoegen aan opnemen +path_edit_title_exclude = Toevoegen aan Uitsluiten +path_edit_placeholder = Pad invoeren... +path_edit_not_exists = Pad bestaat niet +path_edit_is_dir = Catalogus +path_edit_is_file = Bestand +path_edit_no_newlines = Paden mogen geen nieuwe regels bevatten — Enter key is niet toegestaan +ctx_menu_title = Open +ctx_open_file = Artikel openen +ctx_open_folder = Open bovenliggende map diff --git a/cedinia/i18n/no/cedinia.ftl b/cedinia/i18n/no/cedinia.ftl new file mode 100644 index 000000000..0289b25fb --- /dev/null +++ b/cedinia/i18n/no/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = Duplikater +tool_empty_folders = Tomme mapper +tool_similar_images = Lignende bilder +tool_empty_files = Tomme filer +tool_temporary_files = Midlertidige filer +tool_big_files = Største Filer +tool_broken_files = Ødelagte filer +tool_bad_extensions = Feil utvidelser +tool_same_music = Musikk dupliserer +tool_bad_names = Dårlig navn +tool_exif_remover = EXIF data +tool_directories = Mapper +tool_settings = Innstillinger +# Home screen tool card descriptions +home_dup_description = Finn filer med samme innhold +home_empty_folders_description = Mapper uten innhold +home_similar_images_description = Finn synlige lignende bilder +home_empty_files_description = Filer med null størrelse +home_temp_files_description = Midlertidige og bufrede filer +home_big_files_description = Biggest/Minste filer på disk +home_broken_files_description = PDF, lyd, bilder, arkiver +home_bad_extensions_description = Filer med ugyldig utvidelse +home_same_music_description = Lignende lydfiler etter koder +home_bad_names_description = Filer med problematiske tegn i navn +home_exif_description = Bilder med EXIF metadata +# Results list +scanning = Skanning pågår... +stopping = Stopper... +no_results = Ingen resultater +press_start = Trykk på START for å skanne +select_label = Selv. +deselect_label = Desel. +list_label = Liste +gallery_label = Gal. +# Selection popup +selection_popup_title = Velg +select_all = Velg alle +select_except_one = Velg alle unntatt en +select_except_largest = Velg alle unntatt største +select_except_smallest = Velg alle unntatt minste +select_largest = Velg største +select_smallest = Velg minste +select_except_highest_res = Velg alle unntatt høyeste oppløsning +select_except_lowest_res = Velg alle unntatt laveste oppløsning +select_highest_res = Velg høyeste oppløsning +select_lowest_res = Velg laveste oppløsning +invert_selection = Inverter merking +close = Lukk +# Deselection popup +deselection_popup_title = Avvelg +deselect_all = Fjern all merking +deselect_except_one = Fravelg alle unntatt én +# Confirm popup +cancel = Avbryt +delete = Slett +rename = Omdøp +# Delete errors popup +delete_errors_title = Kunne ikke slette noen filer: +ok = Ok +# Stopping overlay +stopping_overlay_title = Stopper +stopping_overlay_body = + Avslutter gjeldende søk... + Vennligst vent. +# Permission popup +permission_title = Tilgang til fil +permission_body = For å skanne filer må appen ha tilgang til enhetens lagring. Uten denne tillatelsen vil ikke skanning være mulig. +grant = Tillat +no_permission_scan_warning = Ingen filtilgang - gi tillatelse til å skanne +# Settings screen tabs +settings_tab_general = Generelt +settings_tab_tools = Verktøy +settings_tab_diagnostics = Informasjon +# Settings - General tab +settings_use_cache = Bruk buffer +settings_use_cache_desc = Akselererer påfølgende skanninger (hash/images) +settings_ignore_hidden = Ignorer skjulte filer +settings_ignore_hidden_desc = Filer og mapper som begynner med '.' +settings_show_notification = Varsle når skanning er ferdig +settings_show_notification_desc = Vis en systemnotifikasjon når fullført skanne +settings_notify_only_background = Bare når i bakgrunnen +settings_notify_only_background_desc = Hopp over varsel hvis appen er synlig +notifications_disabled_banner = Varslinger deaktivert +notifications_enable_button = Aktiver +settings_scan_label = SKANN +settings_filters_label = FILTRE (noen verktøy) +settings_min_file_size = Min. filstørrelse +settings_max_file_size = Maks filstørrelse +settings_language = Språk +settings_language_restart = Krever omstart av appen +settings_common_label = FELLES INNSTILLINGER +settings_excluded_items = AVSLUTT GJENSTANDMS (globale mønstre, komma separert) +settings_excluded_items_placeholder = f.eks *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = TILLAT TILLEGG (tomt = alle) +settings_allowed_extensions_placeholder = f.eks jpg, png, mp4 +settings_excluded_extensions = UTKLUDERT TILTAK +settings_excluded_extensions_placeholder = f.eks bak, tmp, logg +# Settings - Tools section labels +settings_duplicates_header = RETNINGSLINJER +settings_check_method_label = SAMARISON METODE +settings_check_method = Metode +settings_hash_type_label = HASH-TYPE +settings_hash_type = Type hash +settings_hash_type_desc = Blake3 - anbefales alternativ, CRC32 har liten sjanse for falske positiver +settings_similar_images_header = SIMILAR BILDER +settings_similarity_preset = Likhetsterskel +settings_similarity_desc = Svært høy = bare nær-identisk +settings_hash_size = Størrelse på hash +settings_hash_size_desc = Større størrelser, har mindre falske positive, men finner også mindre like bilder +settings_hash_alg = Hash algoritme +settings_image_filter = Endre filteret +settings_ignore_same_size = Ignorer bilder med samme dimensjoner +settings_gallery_image_fit_cover = Galleri: avling til firkant +settings_gallery_image_fit_cover_desc = Fyll båndet; deaktiver for å beholde opprinnelige forhold +settings_big_files_header = STØRRELSE FILER +settings_search_mode = Søke modus +settings_file_count = Antall filer +settings_same_music_header = MUSIC DUPLICATER +settings_music_check_method = Sammenligning modus +settings_music_compare_tags_label = SAMMENDRAG TIL TAGER +settings_music_title = Tittel +settings_music_artist = Kunstner +settings_music_year = År +settings_music_length = Lengde +settings_music_genre = Sjanger +settings_music_bitrate = Bithastighet +settings_music_approx = Sammenligning av tag +settings_broken_files_header = BROKEN FILER +settings_broken_files_note = Resource-intensive scan. For best performance bruk Krokiet på skrivebord. +settings_broken_files_types_label = UTFØRTE TYPER +settings_broken_audio = Lyd +settings_broken_pdf = Pdf +settings_broken_archive = Arkiv +settings_broken_image = Bilde +settings_bad_names_header = FINN NAVN +settings_bad_names_checks_label = SEKKER +settings_bad_names_uppercase_ext = Store bokstaver forlengelser +settings_bad_names_emoji = Emoji i navn +settings_bad_names_space = Mellomrom ved start/slutt +settings_bad_names_non_ascii = Ikke-ASCII-tegn +settings_bad_names_duplicated = Gjentatte tegn +# Settings - Diagnostics tab +diagnostics_header = DIAGNOSTIKK +diagnostics_thumbnails = Minibildcache +diagnostics_app_cache = App-cache +diagnostics_refresh = Oppdater +diagnostics_clear_thumbnails = Tøm miniatyrbilder +diagnostics_open_thumbnails_folder = Åpne mappe +diagnostics_clear_cache = Tøm hurtigminne +diagnostics_open_cache_folder = Åpne mappe +diagnostics_collect_test = Filtilgang test +diagnostics_collect_test_desc = Sjekk hvor mange filer som er tilgjengelige +diagnostics_collect_test_run = Kjør +diagnostics_collect_test_stop = Stopp +collect_test_cancelled = Stoppet av bruker +diag_confirm_clear_thumbnails = Slett alt av miniatyrbilde-mellomlager? +diag_confirm_clear_cache = Tømme alle appens hurtiglager? +about_repo = Kodelager +about_translate = Oversettelser +about_donate = Brukerstøtte +# Collect-test result popup +collect_test_title = Prøvingsresultater +collect_test_volumes = Volumer: +collect_test_folders = Mapper: +collect_test_files = Filer: +collect_test_time = Tid: +# Licenses +licenses_label = LISENS +third_party_licenses = Tredjeparts lisenser +licenses_popup_title = Tredjeparts lisenser +# Directories screen +directories_include_header = Inkluder +directories_included = Inkludert +directories_exclude_header = Ekskluder +directories_excluded_header = Ekskludert +directories_add = Inkluder +no_paths = Ingen sti - legg til under +directories_volume_header = Volumer +directories_volume_refresh = Oppdater +directories_volume_add = Legg til +# Bottom navigation +nav_home = Begynn +nav_dirs = Mapper +nav_settings = Innstillinger +# Status messages set from Rust +status_ready = Klar +status_stopped = Stoppet +status_no_results = Ingen resultater +status_deleted_selected = Slettet valgte +status_deleted_with_errors = Slettet med feil +scan_not_started = Skann ikke startet +found_items_prefix = Funnet +found_items_suffix = elementer +deleted_items_prefix = Slettet +deleted_items_suffix = elementer +deleted_errors_suffix = feil +renamed_prefix = Omdøpt +renamed_files_suffix = filer +renamed_errors_suffix = feil +cleaned_exif_prefix = Rengjort EXIF fra +cleaned_exif_suffix = filer +cleaned_exif_errors_suffix = feil +and_more_prefix = ...og +and_more_suffix = mer +# Gallery / delete popups +gallery_delete_button = Slett +gallery_back = Tilbake +gallery_confirm_delete = Ja, slett +deleting_files = Sletter filer... +stop = Stopp +files_suffix = filer +scanning_fallback = Skanner... +app_subtitle = Til ære for Kedynia (972 CE) +app_license = Frontend for Czkawka Core - GPL-3.0 +about_app_label = OM +cache_label = TILBAKE +# Notification +scan_completed_notification = Scan fullført - { $file_count } enheter funnet +# Confirm popups (set from Rust) +confirm_clean_exif = Er du sikker på at du vil rense EXIF tagger fra { $n } valgte filer? +confirm_delete_items = Er du sikker på at du vil slette { $n } valgte elementer? +gallery_confirm_delete_msg = Du er ferd med å slette { $total_images } bilder i { $total_groups } grupper. +gallery_confirm_delete_warning = Alle gjenstander er valgt i { $unsafe_groups } grupper! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = Beregning og sammenligning av lydfingeravtrykk er svært ressurskrevende og kan ta lang tid. Det anbefales å bruke Krokiet på et skrivebordssystem for denne oppgaven. +# Scan stage labels (shown during scan progress) +stage_collecting_files = Samler filer +stage_scanning_name = Skanner etter navn +stage_scanning_size_name = Skanning etter navn og størrelse +stage_scanning_size = Skanner etter størrelse +stage_pre_hash = Forhashing +stage_full_hash = Hashing +stage_loading_cache = Laster cache +stage_saving_cache = Lagrer cachen +stage_calculating_image_hashes = Beregner bildehashes +stage_comparing_images = Sammenligner bilder +stage_calculating_video_hashes = Beregner video hashes +stage_checking_files = Sjekker filer +stage_checking_extensions = Sjekker utvidelser +stage_checking_names = Sjekker navn +stage_reading_music_tags = Leser musikktagger +stage_comparing_tags = Sammenligner tagger +stage_calculating_music_fingerprints = Beregner musikkfingeravtrykk +stage_comparing_fingerprints = Sammenligner fingeravtrykk +stage_extracting_exif = Leser 'EXI'-tagger +stage_creating_video_thumbnails = Lager videomityrbilder +stage_processing_videos = Behandler videoer +stage_deleting = Sletter filer +stage_renaming = Endrer filer +stage_moving = Flytter filer +stage_hardlinking = Oppretter harde linker +stage_symlinking = Oppretter symlinker +stage_optimizing_videos = Optimaliserer videoer +stage_cleaning_exif = Rengjøring av EXIF +# Group headers in scan results +duplicates_group_header = { $count } filer x { $per_file } / fil = { $total} +similar_images_group_header = { $count } lignende bilder +same_music_group_header = { $count } lignende spor +# Rename confirmation +confirm_rename_items = Er du sikker på at du vil endre navnet { $n } valgte filer? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = Størst +option_search_mode_smallest = Minste +option_similarity_very_high = Høy +option_similarity_high = Høy +option_similarity_medium = Middels +option_similarity_low = Lav +option_similarity_very_low = V.Lav +option_similarity_minimal = Min. +option_check_method_hash = Hash +option_check_method_name = Navn +option_check_method_size_and_name = Størrelse+Navn +option_check_method_size = Størrelse +option_music_method_tags = Tagger +option_music_method_audio = Lyd +option_min_size_none = Ingen +option_min_size_1kb = 1 KB +option_min_size_8kb = 8 KB +option_min_size_64kb = 64 KB +option_min_size_1mb = 1 MB +option_max_size_16kb = 16 KB +option_max_size_1mb = 1 MB +option_max_size_10mb = 10 MB +option_max_size_100mb = 100 MB +option_max_size_unlimited = Ubegrenset +# Volume labels (shown in the directories screen) +volume_internal_storage = Intern Lagring +volume_sd_card = Minne kort (SD-kort) +volume_storage = Lagringsvolum +# Directories screen +directories_referenced_tooltip = Referert (ikke slettet) +directories_include_section_header = TRENGER +directories_exclude_section_header = AVSLUTT +directories_custom_paths = Tilpassede Baner +directories_check_button = Analyser +directories_check_popup_title = Katalog statistikk +directories_check_label_included = Inkluderte stier: +directories_check_label_excluded = Ekskluderte baner +directories_check_label_referenced = Referansebaner : +directories_check_label_would_scan = Filer å skanne: +directories_check_label_processable = Prosessbare filer: +directories_check_scanning = Skanner... +directories_check_warning_no_processable = Ingen behandlingsbare filer funnet - kontroller din inkluderte/ekskluderte mapper +path_edit_title_include = Legg til i Inkluder +path_edit_title_exclude = Legg til i Ekskluder +path_edit_placeholder = Angi bane... +path_edit_not_exists = Banen finnes ikke +path_edit_is_dir = Katalog +path_edit_is_file = Fil +path_edit_no_newlines = Baner kan ikke inneholde linjer - Angi nøkkel er ikke tillatt +ctx_menu_title = Åpne +ctx_open_file = Åpne element +ctx_open_folder = Åpne overordnet mappe diff --git a/cedinia/i18n/pl/cedinia.ftl b/cedinia/i18n/pl/cedinia.ftl index d7fa8e6e2..d058f65e4 100644 --- a/cedinia/i18n/pl/cedinia.ftl +++ b/cedinia/i18n/pl/cedinia.ftl @@ -1,6 +1,5 @@ -# Cedinia - Polski (Polish) +# Cedinia - Polish -# App / top bar titles app_name = Cedinia tool_duplicate_files = Duplikaty tool_empty_folders = Puste foldery @@ -9,126 +8,122 @@ tool_empty_files = Puste pliki tool_temporary_files = Pliki tymczasowe tool_big_files = Największe pliki tool_broken_files = Uszkodzone pliki -tool_bad_extensions = Złe rozszerzenia +tool_bad_extensions = Nieprawidłowe rozszerzenia tool_same_music = Duplikaty muzyki -tool_bad_names = Złe nazwy +tool_bad_names = Niepoprawne nazwy tool_exif_remover = Dane EXIF tool_directories = Katalogi tool_settings = Ustawienia -# Home screen tool card descriptions home_dup_description = Znajdź pliki o tej samej zawartości home_empty_folders_description = Katalogi bez zawartości home_similar_images_description = Znajdź wizualnie podobne zdjęcia home_empty_files_description = Pliki o zerowym rozmiarze -home_temp_files_description = Tymczasowe i cache'owane pliki -home_big_files_description = 50 największych plików na dysku -home_broken_files_description = Pliki PDF, audio, obrazy, archiwa +home_temp_files_description = Pliki tymczasowe i cache +home_big_files_description = Największe i najmniejsze pliki na dysku +home_broken_files_description = PDF, audio, obrazy, archiwa home_bad_extensions_description = Pliki z nieprawidłowym rozszerzeniem -home_same_music_description = Podobne pliki audio wg tagów +home_same_music_description = Podobne pliki audio według tagów home_bad_names_description = Pliki z problematycznymi znakami w nazwie home_exif_description = Obrazy z metadanymi EXIF -# Results list -scanning = Skanowanie w toku... +scanning = Trwa skanowanie... stopping = Zatrzymywanie... -no_results = Brak wynikow -press_start = Nacisnij START aby skanowac -select_label = Zaz. +no_results = Brak wyników +press_start = Naciśnij START, aby rozpocząć skanowanie +select_label = Zazn. deselect_label = Odzn. list_label = Lista -gallery_label = Gal. +gallery_label = Galeria -# Selection popup -selection_popup_title = Zaznaczanie +selection_popup_title = Wybór select_all = Zaznacz wszystko -select_except_one = Zaznacz poza jednym -select_except_largest = Zaznacz poza największym -select_except_smallest = Zaznacz poza najmniejszym +select_except_one = Zaznacz wszystko oprócz jednego +select_except_largest = Zaznacz wszystko oprócz największego +select_except_smallest = Zaznacz wszystko oprócz najmniejszego select_largest = Zaznacz największy select_smallest = Zaznacz najmniejszy -select_except_highest_res = Zaznacz poza największą rozdzielczością -select_except_lowest_res = Zaznacz poza najmniejszą rozdzielczością -select_highest_res = Zaznacz największą rozdzielczość -select_lowest_res = Zaznacz najmniejszą rozdzielczość -invert_selection = Odwroc zaznaczenie +select_except_highest_res = Zaznacz wszystko oprócz najwyższej rozdzielczości +select_except_lowest_res = Zaznacz wszystko oprócz najniższej rozdzielczości +select_highest_res = Zaznacz najwyższą rozdzielczość +select_lowest_res = Zaznacz najniższą rozdzielczość +invert_selection = Odwróć zaznaczenie close = Zamknij -# Deselection popup deselection_popup_title = Odznaczanie deselect_all = Odznacz wszystko -deselect_except_one = Odznacz poza jednym +deselect_except_one = Odznacz wszystko oprócz jednego -# Confirm popup cancel = Anuluj delete = Usuń rename = Zmień nazwę -# Delete errors popup -delete_errors_title = Nie udalo sie usunac niektorych plikow: +delete_errors_title = Nie udało się usunąć niektórych plików: ok = OK -# Stopping overlay stopping_overlay_title = Zatrzymywanie -stopping_overlay_body = Kończenie bieżącego skanu… - Proszę czekać. +stopping_overlay_body = + Kończenie bieżącego skanowania... + Proszę czekać. -# Permission popup permission_title = Dostęp do plików -permission_body = Aby skanować pliki, aplikacja potrzebuje dostępu do pamięci urządzenia. Bez tego uprawnienia skanowanie nie będzie możliwe. +permission_body = Aby skanować pliki, aplikacja potrzebuje dostępu do pamięci urządzenia. Bez tego skanowanie nie będzie możliwe. grant = Przyznaj -no_permission_scan_warning = Brak uprawnień do plików - przyznaj dostęp aby skanować +no_permission_scan_warning = Brak dostępu do plików - przyznaj uprawnienia -# Settings screen tabs settings_tab_general = Ogólne settings_tab_tools = Narzędzia -settings_tab_diagnostics = Info +settings_tab_diagnostics = Informacje -# Settings — General tab -settings_use_cache = Użyj pamięci podręcznej -settings_use_cache_desc = Przyspiesza kolejne skany (hash/obrazy) +settings_use_cache = Użyj cache +settings_use_cache_desc = Przyspiesza kolejne skanowania (hashy i obrazów) settings_ignore_hidden = Ignoruj ukryte pliki settings_ignore_hidden_desc = Pliki i foldery zaczynające się od '.' -settings_show_notification = Powiadom po zakończeniu skanu -settings_show_notification_desc = Pokaż systemowe powiadomienie po zakończeniu skanu -settings_notify_only_background = Tylko gdy w tle -settings_notify_only_background_desc = Pomiń powiadomienie jeśli aplikacja jest widoczna +settings_show_notification = Powiadom po zakończeniu skanowania +settings_show_notification_desc = Wyświetl powiadomienie systemowe po zakończeniu +settings_notify_only_background = Tylko w tle +settings_notify_only_background_desc = Pomiń powiadomienie, jeśli aplikacja jest widoczna notifications_disabled_banner = Powiadomienia wyłączone notifications_enable_button = Włącz + settings_scan_label = SKANOWANIE -settings_filters_label = FILTRY (niektóre narzędzia) -settings_min_file_size = Min. rozmiar pliku -settings_max_file_size = Maks. rozmiar pliku +settings_filters_label = FILTRY (wybrane narzędzia) +settings_min_file_size = Minimalny rozmiar pliku +settings_max_file_size = Maksymalny rozmiar pliku settings_language = Język -settings_language_restart = Wymaga restartu aplikacji +settings_language_restart = Wymaga ponownego uruchomienia settings_common_label = USTAWIENIA OGÓLNE -settings_excluded_items = WYKLUCZONE ELEMENTY (wzorce glob, oddzielone przecinkiem) + +settings_excluded_items = WYKLUCZONE POZYCJE (wzorce glob, oddzielone przecinkami) settings_excluded_items_placeholder = np. *.tmp, */.git/*, */node_modules/* settings_allowed_extensions = DOZWOLONE ROZSZERZENIA (puste = wszystkie) settings_allowed_extensions_placeholder = np. jpg, png, mp4 settings_excluded_extensions = WYKLUCZONE ROZSZERZENIA settings_excluded_extensions_placeholder = np. bak, tmp, log -# Settings — Tools section labels settings_duplicates_header = DUPLIKATY settings_check_method_label = METODA PORÓWNANIA settings_check_method = Metoda -settings_hash_type_label = TYP HASHA -settings_hash_type = Typ hasha -settings_hash_type_desc = Blake3 - najszybszy; CRC32/xxH3 - alternatywy +settings_hash_type_label = TYP HASHU +settings_hash_type = Typ hashu +settings_hash_type_desc = Blake3 - zalecany, CRC32 ma niewielkie ryzyko błędów + settings_similar_images_header = PODOBNE OBRAZY settings_similarity_preset = Próg podobieństwa -settings_similarity_desc = Bardzo wysoka = tylko prawie identyczne -settings_hash_size = Rozmiar hasha -settings_hash_size_desc = Większy = dokładniejszy, wolniejszy -settings_hash_alg = Algorytm hasha -settings_image_filter = Filtr zmiany rozmiaru +settings_similarity_desc = Bardzo wysoki = tylko niemal identyczne +settings_hash_size = Rozmiar hashu +settings_hash_size_desc = Większy = mniej błędów, ale mniej wyników +settings_hash_alg = Algorytm haszowania +settings_image_filter = Filtr skalowania settings_ignore_same_size = Ignoruj obrazy o tych samych wymiarach -settings_gallery_image_fit_cover = Galeria: kadruj do kwadratu -settings_gallery_image_fit_cover_desc = Wypełnia kafelek; wyłącz, by zachować proporcje obrazu + +settings_gallery_image_fit_cover = Galeria: przycinanie do kwadratu +settings_gallery_image_fit_cover_desc = Wypełnia kafelek; wyłącz, aby zachować proporcje + settings_big_files_header = NAJWIĘKSZE PLIKI settings_search_mode = Tryb wyszukiwania settings_file_count = Liczba plików + settings_same_music_header = DUPLIKATY MUZYKI settings_music_check_method = Tryb porównania settings_music_compare_tags_label = PORÓWNYWANE TAGI @@ -137,122 +132,126 @@ settings_music_artist = Artysta settings_music_year = Rok settings_music_length = Długość settings_music_genre = Gatunek -settings_music_bitrate = Przepływność -settings_music_approx = Przybliżone porównywanie tagów +settings_music_bitrate = Bitrate +settings_music_approx = Przybliżone porównanie tagów + settings_broken_files_header = USZKODZONE PLIKI -settings_broken_files_note = ⚠ Zasobożerna operacja. Dla lepszej wydajności użyj aplikacji Krokiet na komputerze. +settings_broken_files_note = Wymaga dużo zasobów. Zalecane użycie na komputerze. settings_broken_files_types_label = SPRAWDZANE TYPY -settings_broken_audio = Dźwięk +settings_broken_audio = Audio settings_broken_pdf = PDF settings_broken_archive = Archiwum settings_broken_image = Obraz -settings_bad_names_header = ZŁE NAZWY -settings_bad_names_checks_label = SPRAWDZENIA + +settings_bad_names_header = NIEPOPRAWNE NAZWY +settings_bad_names_checks_label = SPRAWDZANE REGUŁY settings_bad_names_uppercase_ext = Wielkie litery w rozszerzeniu settings_bad_names_emoji = Emoji w nazwie settings_bad_names_space = Spacje na początku/końcu settings_bad_names_non_ascii = Znaki spoza ASCII settings_bad_names_duplicated = Powtarzające się znaki -# Settings — Diagnostics tab diagnostics_header = DIAGNOSTYKA -diagnostics_thumbnails = Pamięć miniatur -diagnostics_app_cache = Pamięć aplikacji +diagnostics_thumbnails = Cache miniatur +diagnostics_app_cache = Cache aplikacji diagnostics_refresh = Odśwież diagnostics_clear_thumbnails = Wyczyść miniatury diagnostics_open_thumbnails_folder = Otwórz folder diagnostics_clear_cache = Wyczyść cache diagnostics_open_cache_folder = Otwórz folder -diagnostics_collect_test = Test skanowania -diagnostics_collect_test_desc = Skanuje każdy wolumin rekurencyjnie +diagnostics_collect_test = Test dostępu do plików +diagnostics_collect_test_desc = Sprawdź liczbę dostępnych plików diagnostics_collect_test_run = Uruchom -diagnostics_collect_test_stop = Stop +diagnostics_collect_test_stop = Zatrzymaj + collect_test_cancelled = Zatrzymano przez użytkownika diag_confirm_clear_thumbnails = Wyczyścić cache miniatur? diag_confirm_clear_cache = Wyczyścić cache aplikacji? + about_repo = Repozytorium about_translate = Tłumaczenia -about_donate = Wesprzyj +about_donate = Wsparcie -# Collect-test result popup collect_test_title = Wyniki testu -collect_test_volumes = Woluminy: +collect_test_volumes = Wolumeny: collect_test_folders = Foldery: collect_test_files = Pliki: collect_test_time = Czas: -# Licenses licenses_label = LICENCJA third_party_licenses = Licencje zewnętrzne licenses_popup_title = Licencje zewnętrzne -# Directories screen -directories_include_header = Katalogi do skanowania -directories_included = Dodano -directories_exclude_header = Katalogi wykluczone -directories_add = + Dodaj +directories_include_header = Dołączone +directories_included = Dołączone +directories_exclude_header = Wykluczone +directories_excluded_header = Wykluczone +directories_add = Dodaj no_paths = Brak ścieżek - dodaj poniżej -directories_volume_header = Woluminy + +directories_volume_header = Wolumeny directories_volume_refresh = Odśwież directories_volume_add = Dodaj -# Bottom navigation nav_home = Start nav_dirs = Katalogi nav_settings = Ustawienia -# Status messages set from Rust -status_ready = Gotowy / Ready +status_ready = Gotowy status_stopped = Zatrzymano status_no_results = Brak wyników -status_deleted_selected = Usunięto zaznaczone +status_deleted_selected = Usunięto wybrane status_deleted_with_errors = Usunięto z błędami -scan_not_started = Nie uruchomiono skanu + +scan_not_started = Skanowanie nie rozpoczęte found_items_prefix = Znaleziono found_items_suffix = elementów deleted_items_prefix = Usunięto deleted_items_suffix = elementów deleted_errors_suffix = błędów -renamed_prefix = Zmieniono nazwy + +renamed_prefix = Zmieniono nazwę renamed_files_suffix = plików renamed_errors_suffix = błędów -cleaned_exif_prefix = Wyczyszczono EXIF z + +cleaned_exif_prefix = Usunięto EXIF z cleaned_exif_suffix = plików cleaned_exif_errors_suffix = błędów -and_more_prefix = …i + +and_more_prefix = ...oraz and_more_suffix = więcej # Gallery / delete popups gallery_delete_button = Usuń -gallery_back = Wstecz +gallery_back = Powrót gallery_confirm_delete = Tak, usuń -deleting_files = Usuwanie plików… -stop = Stop +deleting_files = Usuwanie plików... +stop = Zatrzymaj files_suffix = plików -scanning_fallback = Skanowanie… -app_subtitle = Ku czci Bitwy pod Cedynią (972 r.) -app_license = Frontend dla Czkawka Core • GPL-3.0 -about_app_label = O APLIKACJI +scanning_fallback = Skanowanie... +app_subtitle = Na cześć Bitwy pod Cedynią (972) +app_license = Frontend dla Czkawka Core - GPL-3.0 +about_app_label = O aplikacji cache_label = PAMIĘĆ PODRĘCZNA # Notification -scan_completed_notification = Skan zakończony - znaleziono { $file_count } elementów +scan_completed_notification = Skanowanie zakończone - znaleziono { $file_count } elementów # Confirm popups (set from Rust) -confirm_clean_exif = Czy na pewno chcesz wyczyścić tagi EXIF z { $n } zaznaczonych plików? -confirm_delete_items = Czy na pewno chcesz usunąć { $n } zaznaczonych elementów? -gallery_confirm_delete_msg = Zamierzasz usunąć { $total_images } obrazów w { $total_groups } grupach. -gallery_confirm_delete_warning = W { $unsafe_groups } grupach zaznaczono wszystkie elementy! +confirm_clean_exif = Czy na pewno chcesz usunąć dane EXIF z { $n } wybranych plików? +confirm_delete_items = Czy na pewno chcesz usunąć { $n } wybranych elementów? +gallery_confirm_delete_msg = Za chwilę usuniesz { $total_images } obrazów w { $total_groups } grupach. +gallery_confirm_delete_warning = Wszystkie elementy są zaznaczone w { $unsafe_groups } grupach! -# Settings — SameMusic fingerprint warning -same_music_fingerprint_warning = Porównanie na podstawie zawartości (odciski muzyczne) jest bardzo zasobochłonne i może trwać długo. +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = Obliczanie i porównywanie odcisków audio jest bardzo zasobożerne i może trwać długo. Zalecane jest użycie wersji desktopowej. -# Scan stage labels (shown during scan progress) +# Scan stage labels stage_collecting_files = Zbieranie plików -stage_scanning_name = Skanowanie po nazwie -stage_scanning_size_name = Skanowanie po nazwie i rozmiarze -stage_scanning_size = Skanowanie po rozmiarze -stage_pre_hash = Pre-hash +stage_scanning_name = Skanowanie według nazwy +stage_scanning_size_name = Skanowanie według nazwy i rozmiaru +stage_scanning_size = Skanowanie według rozmiaru +stage_pre_hash = Wstępne haszowanie stage_full_hash = Haszowanie stage_loading_cache = Ładowanie cache stage_saving_cache = Zapisywanie cache @@ -264,81 +263,73 @@ stage_checking_extensions = Sprawdzanie rozszerzeń stage_checking_names = Sprawdzanie nazw stage_reading_music_tags = Odczyt tagów muzycznych stage_comparing_tags = Porównywanie tagów -stage_calculating_music_fingerprints = Obliczanie odcisków muzycznych -stage_comparing_fingerprints = Porównywanie odcisków muzycznych -stage_extracting_exif = Odczyt tagów EXIF +stage_calculating_music_fingerprints = Obliczanie odcisków audio +stage_comparing_fingerprints = Porównywanie odcisków audio +stage_extracting_exif = Odczyt danych EXIF stage_creating_video_thumbnails = Tworzenie miniatur wideo stage_processing_videos = Przetwarzanie wideo stage_deleting = Usuwanie plików stage_renaming = Zmiana nazw plików stage_moving = Przenoszenie plików -stage_hardlinking = Tworzenie hardlinków -stage_symlinking = Tworzenie dowiązań +stage_hardlinking = Tworzenie twardych linków +stage_symlinking = Tworzenie dowiązań symbolicznych stage_optimizing_videos = Optymalizacja wideo -stage_cleaning_exif = Czyszczenie EXIF +stage_cleaning_exif = Usuwanie danych EXIF -# Group headers in scan results -duplicates_group_header = { $count } pliki x { $per_file } / plik = { $total } łącznie +# Group headers +duplicates_group_header = { $count } plików x { $per_file } / plik = { $total } łącznie similar_images_group_header = { $count } podobnych obrazów same_music_group_header = { $count } podobnych utworów # Rename confirmation -confirm_rename_items = Czy na pewno chcesz zmienić nazwy { $n } zaznaczonych plików? +confirm_rename_items = Czy na pewno chcesz zmienić nazwę { $n } wybranych plików? -# Combo-box option labels (translatable display names) +# Combo-box options option_search_mode_biggest = Największe option_search_mode_smallest = Najmniejsze -option_similarity_very_high = B.Wys. +option_similarity_very_high = Bardzo wysoki option_similarity_high = Wysoki option_similarity_medium = Średni option_similarity_low = Niski -option_similarity_very_low = B.Niski -option_similarity_minimal = Min. +option_similarity_very_low = Bardzo niski +option_similarity_minimal = Minimalny option_check_method_hash = Hash option_check_method_name = Nazwa -option_check_method_size_and_name = Rozm+Naz +option_check_method_size_and_name = Rozmiar + nazwa option_check_method_size = Rozmiar option_music_method_tags = Tagi option_music_method_audio = Audio option_min_size_none = Brak -option_min_size_1kb = 1 KB -option_min_size_8kb = 8 KB -option_min_size_64kb = 64 KB -option_min_size_1mb = 1 MB -option_max_size_16kb = 16 KB -option_max_size_1mb = 1 MB -option_max_size_10mb = 10 MB -option_max_size_100mb = 100 MB option_max_size_unlimited = Bez limitu -# Volume labels (shown in the directories screen) -volume_internal_storage = 💾 Pamięć wbudowana -volume_sd_card = 💳 Karta pamięci (SD card) -volume_storage = 📦 Wolumin pamięci +# Volumes +volume_internal_storage = Pamięć wewnętrzna +volume_sd_card = Karta SD +volume_storage = Wolumen pamięci -# Directories screen -directories_referenced_tooltip = Referencyjny (nie kasowany) -directories_include_section_header = ZAWIERANE +# Directories +directories_referenced_tooltip = Referencyjne (nieusuwane) +directories_include_section_header = DOŁĄCZONE directories_exclude_section_header = WYKLUCZONE -directories_custom_paths = Sciezki wlasne +directories_custom_paths = Ścieżki niestandardowe directories_check_button = Analizuj -directories_check_popup_title = Statystyki katalogow -directories_check_label_included = Sciezki dolaczone: -directories_check_label_excluded = Sciezki wykluczone: -directories_check_label_referenced = Sciezki referencyjne: -directories_check_label_would_scan = Pliki do skanowania: -directories_check_label_processable = Pliki do przetworzenia: +directories_check_popup_title = Statystyki katalogów +directories_check_label_included = Dołączone ścieżki: +directories_check_label_excluded = Wykluczone ścieżki: +directories_check_label_referenced = Ścieżki referencyjne: +directories_check_label_would_scan = Pliki do przeskanowania: +directories_check_label_processable = Pliki możliwe do przetworzenia: directories_check_scanning = Skanowanie... -directories_check_warning_no_processable = Brak plikow do przetworzenia - zweryfikuj katalogi dolaczone/wykluczone -path_edit_title_include = Dodaj do dolaczonych +directories_check_warning_no_processable = Brak plików do przetworzenia - sprawdź ustawienia + +path_edit_title_include = Dodaj do dołączonych path_edit_title_exclude = Dodaj do wykluczonych -path_edit_placeholder = Wpisz sciezke... -path_edit_not_exists = Sciezka nie istnieje +path_edit_placeholder = Wprowadź ścieżkę... +path_edit_not_exists = Ścieżka nie istnieje path_edit_is_dir = Katalog path_edit_is_file = Plik -path_edit_no_newlines = Ścieżki nie mogą zawierać znaku nowej linii — klawisz Enter jest niedozwolony +path_edit_no_newlines = Ścieżki nie mogą zawierać nowych linii - Enter jest niedozwolony ctx_menu_title = Otwórz -ctx_open_file = Otwórz plik -ctx_open_folder = Otwórz folder - +ctx_open_file = Otwórz element +ctx_open_folder = Otwórz folder nadrzędny \ No newline at end of file diff --git a/cedinia/i18n/pt-BR/cedinia.ftl b/cedinia/i18n/pt-BR/cedinia.ftl new file mode 100644 index 000000000..bdb18e9a3 --- /dev/null +++ b/cedinia/i18n/pt-BR/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = Duplicados +tool_empty_folders = Pastas vazias +tool_similar_images = Imagens semelhantes +tool_empty_files = Arquivos vazios +tool_temporary_files = Arquivos Temporários +tool_big_files = Maiores arquivos +tool_broken_files = Arquivos quebrados +tool_bad_extensions = Extensões inválidas +tool_same_music = Músicas duplicadas +tool_bad_names = Nomes ruins +tool_exif_remover = Dados EXIF +tool_directories = Diretórios +tool_settings = Confirgurações +# Home screen tool card descriptions +home_dup_description = Localizar arquivos com o mesmo conteúdo +home_empty_folders_description = Diretórios sem conteúdo +home_similar_images_description = Encontrar fotos visualmente semelhantes +home_empty_files_description = Arquivos com tamanho zero +home_temp_files_description = Arquivos temporários e em cache +home_big_files_description = Maior/Pequenos arquivos em disco +home_broken_files_description = PDF, áudio, imagens, arquivos +home_bad_extensions_description = Arquivos com extensão inválida +home_same_music_description = Arquivos de áudio similares por tags +home_bad_names_description = Arquivos com caracteres problemáticos no nome +home_exif_description = Imagens com metadados EXIF +# Results list +scanning = Verificando em andamento... +stopping = Parando... +no_results = Nenhum resultado +press_start = Pressione INICIAR para verificar +select_label = Sel. +deselect_label = Desel. +list_label = Lista +gallery_label = Gal. +# Selection popup +selection_popup_title = Selecionar +select_all = Selecionar todos +select_except_one = Selecionar todos, exceto um +select_except_largest = Selecionar todos, exceto o maior +select_except_smallest = Selecionar todos, exceto menor +select_largest = Selecionar maior +select_smallest = Selecionar menor +select_except_highest_res = Selecionar todos, exceto a maior resolução +select_except_lowest_res = Selecionar todos, exceto resolução mais baixa +select_highest_res = Selecionar a maior resolução +select_lowest_res = Selecionar resolução mais baixa +invert_selection = Inverter seleção +close = FECHAR +# Deselection popup +deselection_popup_title = Desselecionar +deselect_all = Desmarcar todos +deselect_except_one = Desmarcar todos, exceto um +# Confirm popup +cancel = cancelar +delete = excluir +rename = Renomear +# Delete errors popup +delete_errors_title = Falha ao excluir alguns arquivos: +ok = Certo +# Stopping overlay +stopping_overlay_title = Parando +stopping_overlay_body = + Finalizando a varredura atual... + Por favor, aguarde. +# Permission popup +permission_title = Acesso ao arquivo +permission_body = Para verificar arquivos, o app precisa de acesso ao armazenamento do dispositivo. Sem esta permissão, o escaneamento não será possível. +grant = Conceder +no_permission_scan_warning = Sem acesso de arquivo - conceder permissão para escanear +# Settings screen tabs +settings_tab_general = Gerais +settings_tab_tools = Ferramentas +settings_tab_diagnostics = Informações +# Settings - General tab +settings_use_cache = Usar cache +settings_use_cache_desc = Acelera verificações subsequentes (hash/imagens) +settings_ignore_hidden = Ignorar arquivos ocultos +settings_ignore_hidden_desc = Arquivos e pastas que começam com '.' +settings_show_notification = Notificar quando terminar a varredura +settings_show_notification_desc = Mostrar uma notificação do sistema na conclusão de verificação +settings_notify_only_background = Somente quando em segundo plano +settings_notify_only_background_desc = Pular notificação se o aplicativo estiver visível +notifications_disabled_banner = Notificações desativadas +notifications_enable_button = Habilitado +settings_scan_label = PROCURAR +settings_filters_label = FILTROS (algumas ferramentas) +settings_min_file_size = Tamanho mínimo do arquivo +settings_max_file_size = Tamanho máximo do arquivo +settings_language = IDIOMA +settings_language_restart = Requer reinicialização do aplicativo +settings_common_label = CONFIGURAÇÕES COMUM +settings_excluded_items = ITENS EXCLUÍDOS (padrões globas, separados por vírgula) +settings_excluded_items_placeholder = ex.: *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = EXTENSÕES PERMITIDAS (vazio = todos) +settings_allowed_extensions_placeholder = ex. jpg, png, mp4 +settings_excluded_extensions = EXTENSÕES EXCLUÍDAS +settings_excluded_extensions_placeholder = por exemplo, bak, tmp, log +# Settings - Tools section labels +settings_duplicates_header = DUPLICADOS +settings_check_method_label = MÉTODO DE COMPARISÃO +settings_check_method = Método +settings_hash_type_label = TIPO DE HASH +settings_hash_type = Tipo de hash +settings_hash_type_desc = Blake3 - é recomendada opção, CRC32 têm uma pequena chance de falsos positivos +settings_similar_images_header = IMAGENS DO SIMILAR +settings_similarity_preset = Limite de similaridade +settings_similarity_desc = Muito alta = apenas quase idêntica +settings_hash_size = Tamanho do hash +settings_hash_size_desc = Tamanho maior, tem menos falsos positivos, mas também encontra menos imagens semelhantes +settings_hash_alg = Algoritmo de hash +settings_image_filter = Redimensionar filtro +settings_ignore_same_size = Ignorar imagens com as mesmas dimensões +settings_gallery_image_fit_cover = Galeria: cortar para um quadrado +settings_gallery_image_fit_cover_desc = Preencher o bloco; desativar para manter a proporção original +settings_big_files_header = ARQUIVOS MAIS +settings_search_mode = Modo de pesquisa +settings_file_count = Contagem de arquivos +settings_same_music_header = DUPLICADOS MÚSICAS +settings_music_check_method = Modo de comparação +settings_music_compare_tags_label = TAGS COMPARADAS +settings_music_title = Título +settings_music_artist = Artista +settings_music_year = ano +settings_music_length = Comprimento +settings_music_genre = gênero +settings_music_bitrate = Taxa de bits +settings_music_approx = Comparação de tag aproximada +settings_broken_files_header = ARQUIVOS DE TREINO +settings_broken_files_note = Varredura intensiva de recursos. Para obter melhor desempenho, use Krokiet no desktop. +settings_broken_files_types_label = TIPOS DE ALTERAÇÃO +settings_broken_audio = Áudio +settings_broken_pdf = Pdf +settings_broken_archive = Arquivo +settings_broken_image = Imagem: +settings_bad_names_header = NOMES DO BAD +settings_bad_names_checks_label = CORAÇÕES +settings_bad_names_uppercase_ext = Extensão maiúscula +settings_bad_names_emoji = Emoji em nome +settings_bad_names_space = Espaços ao início/final +settings_bad_names_non_ascii = Caracteres não ASCII +settings_bad_names_duplicated = Caracteres repetidos +# Settings - Diagnostics tab +diagnostics_header = DIAGNOSTICAS +diagnostics_thumbnails = Cache de miniaturas +diagnostics_app_cache = Cache do app +diagnostics_refresh = atualizar +diagnostics_clear_thumbnails = Limpar miniaturas +diagnostics_open_thumbnails_folder = Abrir pasta +diagnostics_clear_cache = Limpar cache +diagnostics_open_cache_folder = Abrir pasta +diagnostics_collect_test = Teste de acesso a arquivos +diagnostics_collect_test_desc = Verifique quantos arquivos estão acessíveis +diagnostics_collect_test_run = Executar +diagnostics_collect_test_stop = Interromper +collect_test_cancelled = Parado pelo usuário +diag_confirm_clear_thumbnails = Limpar todo o cache de miniaturas? +diag_confirm_clear_cache = Limpar todo o cache de apps? +about_repo = Repositório +about_translate = Traduções +about_donate = SUPORTE +# Collect-test result popup +collect_test_title = Resultados do teste +collect_test_volumes = Volumes: +collect_test_folders = Pastas: +collect_test_files = Arquivos: +collect_test_time = Hora: +# Licenses +licenses_label = LICENÇA +third_party_licenses = Licenças de terceiros +licenses_popup_title = Licenças de terceiros +# Directories screen +directories_include_header = incluir +directories_included = Incluído +directories_exclude_header = Excluir +directories_excluded_header = Excluído +directories_add = incluir +no_paths = Sem caminhos - adicionar abaixo +directories_volume_header = Volume +directories_volume_refresh = atualizar +directories_volume_add = Adicionar +# Bottom navigation +nav_home = Iniciar +nav_dirs = Diretórios +nav_settings = Confirgurações +# Status messages set from Rust +status_ready = pronto +status_stopped = Parado +status_no_results = Nenhum resultado +status_deleted_selected = Excluído selecionado +status_deleted_with_errors = Excluído com erros +scan_not_started = Verificação não iniciada +found_items_prefix = Encontrado +found_items_suffix = Itens +deleted_items_prefix = Excluído +deleted_items_suffix = Itens +deleted_errors_suffix = erros +renamed_prefix = Renomeado +renamed_files_suffix = Arquivos +renamed_errors_suffix = erros +cleaned_exif_prefix = EXIF limpo de +cleaned_exif_suffix = Arquivos +cleaned_exif_errors_suffix = erros +and_more_prefix = ...e +and_more_suffix = Mais +# Gallery / delete popups +gallery_delete_button = excluir +gallery_back = Anterior +gallery_confirm_delete = Sim, excluir +deleting_files = Excluindo arquivos... +stop = Interromper +files_suffix = Arquivos +scanning_fallback = Escaneando... +app_subtitle = Em honra da Batalha de Cedynia (972 CE) +app_license = Frontend para o Núcleo Czkawka - GPL-3.0 +about_app_label = SOBRE +cache_label = CACHAR +# Notification +scan_completed_notification = Verificação concluída - { $file_count } itens encontrados +# Confirm popups (set from Rust) +confirm_clean_exif = Tem certeza que deseja limpar as tags EXIF de { $n } arquivos selecionados? +confirm_delete_items = Tem certeza que deseja excluir { $n } itens selecionados? +gallery_confirm_delete_msg = Você está prestes a excluir { $total_images } imagens em { $total_groups } grupos. +gallery_confirm_delete_warning = Todos os itens estão selecionados em grupos de { $unsafe_groups}! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = O cálculo e a comparação das impressões digitais de áudio é muito intenso em recursos e pode demorar muito tempo. É recomendado usar o Krokiet em um computador para esta tarefa. +# Scan stage labels (shown during scan progress) +stage_collecting_files = Coletando arquivos +stage_scanning_name = Digitalização pelo nome +stage_scanning_size_name = Digitalização por nome e tamanho +stage_scanning_size = Escaneando por tamanho +stage_pre_hash = Pré-hashing +stage_full_hash = Hashing +stage_loading_cache = Carregando cache +stage_saving_cache = Salvando cache +stage_calculating_image_hashes = Calculando hashes de imagem +stage_comparing_images = Comparando imagens +stage_calculating_video_hashes = Calculando hashes de vídeo +stage_checking_files = Verificando arquivos +stage_checking_extensions = Verificando extensões +stage_checking_names = Verificando nomes +stage_reading_music_tags = Lendo etiquetas de música +stage_comparing_tags = Comparando tags +stage_calculating_music_fingerprints = Calculando impressões digitais +stage_comparing_fingerprints = Comparação de impressões digitais +stage_extracting_exif = Lendo etiquetas EXIF +stage_creating_video_thumbnails = Criando miniaturas de vídeo +stage_processing_videos = Processando vídeos +stage_deleting = Excluindo arquivos +stage_renaming = Renomeando arquivos +stage_moving = Movendo arquivos +stage_hardlinking = Criando links físicos +stage_symlinking = Criando links simbólicos +stage_optimizing_videos = Otimizando vídeos +stage_cleaning_exif = Limpando EXIF +# Group headers in scan results +duplicates_group_header = { $count } arquivos x { $per_file } / arquivo = { $total } no total +similar_images_group_header = { $count } imagens semelhantes +same_music_group_header = { $count } faixas semelhantes +# Rename confirmation +confirm_rename_items = Tem certeza que deseja renomear { $n } arquivos selecionados? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = Maior +option_search_mode_smallest = Menor +option_similarity_very_high = Alto +option_similarity_high = alta +option_similarity_medium = Média +option_similarity_low = baixa +option_similarity_very_low = V.Baixa +option_similarity_minimal = Min. +option_check_method_hash = Hash +option_check_method_name = Nome: +option_check_method_size_and_name = Tamanho+Nome +option_check_method_size = Tamanho +option_music_method_tags = Etiquetas +option_music_method_audio = Áudio +option_min_size_none = Nenhuma +option_min_size_1kb = 1 KB +option_min_size_8kb = 8 KB +option_min_size_64kb = 64 KB +option_min_size_1mb = 1 MB +option_max_size_16kb = 16 KB +option_max_size_1mb = 1 MB +option_max_size_10mb = 10 MB +option_max_size_100mb = 100 MB +option_max_size_unlimited = Ilimitado +# Volume labels (shown in the directories screen) +volume_internal_storage = Armazenamento Interno +volume_sd_card = Cartão de memória (Cartão SD) +volume_storage = Volume de Armazenamento +# Directories screen +directories_referenced_tooltip = Referenciado (não excluído) +directories_include_section_header = INCLUÍDO +directories_exclude_section_header = EXCLUÍDO +directories_custom_paths = Caminhos Personalizados +directories_check_button = Analisar +directories_check_popup_title = Estatísticas do diretório +directories_check_label_included = Caminhos incluídos: +directories_check_label_excluded = Caminhos excluídos: +directories_check_label_referenced = Rotas de referência: +directories_check_label_would_scan = Arquivos para verificar: +directories_check_label_processable = Arquivos processáveis: +directories_check_scanning = Escaneando... +directories_check_warning_no_processable = Nenhum arquivo processável encontrado - verifique suas pastas incluídas/excluídas +path_edit_title_include = Adicionar para incluir +path_edit_title_exclude = Adicionar à Exclusão +path_edit_placeholder = Digite o caminho... +path_edit_not_exists = Caminho não existe +path_edit_is_dir = Diretório +path_edit_is_file = Arquivo +path_edit_no_newlines = Caminhos não podem conter novas linhas — Chave Enter não é permitida +ctx_menu_title = Abertas +ctx_open_file = Abrir item +ctx_open_folder = Abrir pasta pai diff --git a/cedinia/i18n/pt-PT/cedinia.ftl b/cedinia/i18n/pt-PT/cedinia.ftl new file mode 100644 index 000000000..281124008 --- /dev/null +++ b/cedinia/i18n/pt-PT/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = Duplicados +tool_empty_folders = Pastas vazias +tool_similar_images = Imagens semelhantes +tool_empty_files = Arquivos vazios +tool_temporary_files = Arquivos Temporários +tool_big_files = Maiores arquivos +tool_broken_files = Arquivos quebrados +tool_bad_extensions = Extensões inválidas +tool_same_music = Músicas duplicadas +tool_bad_names = Nomes ruins +tool_exif_remover = Dados EXIF +tool_directories = Diretórios +tool_settings = Confirgurações +# Home screen tool card descriptions +home_dup_description = Localizar arquivos com o mesmo conteúdo +home_empty_folders_description = Diretórios sem conteúdo +home_similar_images_description = Encontrar fotos visualmente semelhantes +home_empty_files_description = Arquivos com tamanho zero +home_temp_files_description = Arquivos temporários e em cache +home_big_files_description = Maior/Pequenos arquivos em disco +home_broken_files_description = PDF, áudio, imagens, arquivos +home_bad_extensions_description = Arquivos com extensão inválida +home_same_music_description = Arquivos de áudio similares por tags +home_bad_names_description = Arquivos com caracteres problemáticos no nome +home_exif_description = Imagens com metadados EXIF +# Results list +scanning = Verificando em andamento... +stopping = Parando... +no_results = Nenhum resultado +press_start = Pressione INICIAR para verificar +select_label = Sel. +deselect_label = Desel. +list_label = Lista +gallery_label = Gal. +# Selection popup +selection_popup_title = Selecionar +select_all = Selecionar todos +select_except_one = Selecionar todos, exceto um +select_except_largest = Selecionar todos, exceto o maior +select_except_smallest = Selecionar todos, exceto menor +select_largest = Selecionar maior +select_smallest = Selecionar menor +select_except_highest_res = Selecionar todos, exceto a maior resolução +select_except_lowest_res = Selecionar todos, exceto resolução mais baixa +select_highest_res = Selecionar a maior resolução +select_lowest_res = Selecionar resolução mais baixa +invert_selection = Inverter seleção +close = FECHAR +# Deselection popup +deselection_popup_title = Desselecionar +deselect_all = Desmarcar todos +deselect_except_one = Desmarcar todos, exceto um +# Confirm popup +cancel = cancelar +delete = excluir +rename = Renomear +# Delete errors popup +delete_errors_title = Falha ao excluir alguns arquivos: +ok = Certo +# Stopping overlay +stopping_overlay_title = Parando +stopping_overlay_body = + Finalizando a leitura atual... + Por favor, aguarde. +# Permission popup +permission_title = Acesso ao arquivo +permission_body = Para verificar arquivos, o app precisa de acesso ao armazenamento do dispositivo. Sem esta permissão, o escaneamento não será possível. +grant = Conceder +no_permission_scan_warning = Sem acesso de arquivo - conceder permissão para escanear +# Settings screen tabs +settings_tab_general = Gerais +settings_tab_tools = Ferramentas +settings_tab_diagnostics = Informações +# Settings - General tab +settings_use_cache = Usar cache +settings_use_cache_desc = Acelera verificações subsequentes (hash/imagens) +settings_ignore_hidden = Ignorar arquivos ocultos +settings_ignore_hidden_desc = Arquivos e pastas que começam com '.' +settings_show_notification = Notificar quando terminar a varredura +settings_show_notification_desc = Mostrar uma notificação do sistema na conclusão de verificação +settings_notify_only_background = Somente quando em segundo plano +settings_notify_only_background_desc = Pular notificação se o aplicativo estiver visível +notifications_disabled_banner = Notificações desativadas +notifications_enable_button = Habilitado +settings_scan_label = PROCURAR +settings_filters_label = FILTROS (algumas ferramentas) +settings_min_file_size = Tamanho mínimo do arquivo +settings_max_file_size = Tamanho máximo do arquivo +settings_language = IDIOMA +settings_language_restart = Requer reinicialização do aplicativo +settings_common_label = CONFIGURAÇÕES COMUM +settings_excluded_items = ITENS EXCLUÍDOS (padrões globas, separados por vírgula) +settings_excluded_items_placeholder = ex.: *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = EXTENSÕES PERMITIDAS (vazio = todos) +settings_allowed_extensions_placeholder = ex. jpg, png, mp4 +settings_excluded_extensions = EXTENSÕES EXCLUÍDAS +settings_excluded_extensions_placeholder = por exemplo, bak, tmp, log +# Settings - Tools section labels +settings_duplicates_header = DUPLICADOS +settings_check_method_label = MÉTODO DE COMPARISÃO +settings_check_method = Método +settings_hash_type_label = TIPO DE HASH +settings_hash_type = Tipo de hash +settings_hash_type_desc = Blake3 - é recomendada opção, CRC32 têm uma pequena chance de falsos positivos +settings_similar_images_header = IMAGENS DO SIMILAR +settings_similarity_preset = Limite de similaridade +settings_similarity_desc = Muito alta = apenas quase idêntica +settings_hash_size = Tamanho do hash +settings_hash_size_desc = Tamanho maior, tem menos falsos positivos, mas também encontra menos imagens semelhantes +settings_hash_alg = Algoritmo de hash +settings_image_filter = Redimensionar filtro +settings_ignore_same_size = Ignorar imagens com as mesmas dimensões +settings_gallery_image_fit_cover = Galeria: cortar para um quadrado +settings_gallery_image_fit_cover_desc = Preencher o bloco; desativar para manter a proporção original +settings_big_files_header = ARQUIVOS MAIS +settings_search_mode = Modo de pesquisa +settings_file_count = Contagem de arquivos +settings_same_music_header = DUPLICADOS MÚSICAS +settings_music_check_method = Modo de comparação +settings_music_compare_tags_label = TAGS COMPARADAS +settings_music_title = Título +settings_music_artist = Artista +settings_music_year = ano +settings_music_length = Comprimento +settings_music_genre = gênero +settings_music_bitrate = Taxa de bits +settings_music_approx = Comparação de tag aproximada +settings_broken_files_header = ARQUIVOS DE TREINO +settings_broken_files_note = Varredura intensiva de recursos. Para obter melhor desempenho, use Krokiet no desktop. +settings_broken_files_types_label = TIPOS DE ALTERAÇÃO +settings_broken_audio = Áudio +settings_broken_pdf = Pdf +settings_broken_archive = Arquivo +settings_broken_image = Imagem: +settings_bad_names_header = NOMES DO BAD +settings_bad_names_checks_label = CORAÇÕES +settings_bad_names_uppercase_ext = Extensão maiúscula +settings_bad_names_emoji = Emoji em nome +settings_bad_names_space = Espaços ao início/final +settings_bad_names_non_ascii = Caracteres não-ASCII +settings_bad_names_duplicated = Caracteres repetidos +# Settings - Diagnostics tab +diagnostics_header = DIAGNOSTICAS +diagnostics_thumbnails = Cache de miniaturas +diagnostics_app_cache = Cache do app +diagnostics_refresh = atualizar +diagnostics_clear_thumbnails = Limpar miniaturas +diagnostics_open_thumbnails_folder = Abrir pasta +diagnostics_clear_cache = Limpar cache +diagnostics_open_cache_folder = Abrir pasta +diagnostics_collect_test = Teste de acesso a arquivos +diagnostics_collect_test_desc = Verifique quantos arquivos estão acessíveis +diagnostics_collect_test_run = Executar +diagnostics_collect_test_stop = Interromper +collect_test_cancelled = Parado pelo usuário +diag_confirm_clear_thumbnails = Limpar todo o cache de miniaturas? +diag_confirm_clear_cache = Limpar todo o cache de apps? +about_repo = Repositório +about_translate = Traduções +about_donate = SUPORTE +# Collect-test result popup +collect_test_title = Resultados do teste +collect_test_volumes = Volumes: +collect_test_folders = Pastas: +collect_test_files = Arquivos: +collect_test_time = Hora: +# Licenses +licenses_label = LICENÇA +third_party_licenses = Licenças de terceiros +licenses_popup_title = Licenças de terceiros +# Directories screen +directories_include_header = incluir +directories_included = Incluído +directories_exclude_header = Excluir +directories_excluded_header = Excluído +directories_add = incluir +no_paths = Sem caminhos - adicionar abaixo +directories_volume_header = Volume +directories_volume_refresh = atualizar +directories_volume_add = Adicionar +# Bottom navigation +nav_home = Iniciar +nav_dirs = Diretórios +nav_settings = Confirgurações +# Status messages set from Rust +status_ready = pronto +status_stopped = Parado +status_no_results = Nenhum resultado +status_deleted_selected = Excluído selecionado +status_deleted_with_errors = Excluído com erros +scan_not_started = Verificação não iniciada +found_items_prefix = Encontrado +found_items_suffix = Itens +deleted_items_prefix = Excluído +deleted_items_suffix = Itens +deleted_errors_suffix = erros +renamed_prefix = Renomeado +renamed_files_suffix = Arquivos +renamed_errors_suffix = erros +cleaned_exif_prefix = EXIF limpo de +cleaned_exif_suffix = Arquivos +cleaned_exif_errors_suffix = erros +and_more_prefix = ...e +and_more_suffix = Mais +# Gallery / delete popups +gallery_delete_button = excluir +gallery_back = Anterior +gallery_confirm_delete = Sim, excluir +deleting_files = Excluindo arquivos... +stop = Interromper +files_suffix = Arquivos +scanning_fallback = Escaneando... +app_subtitle = Em honra da Batalha de Cedynia (972 CE) +app_license = Frontend para o Núcleo Czkawka - GPL-3.0 +about_app_label = SOBRE +cache_label = CACHAR +# Notification +scan_completed_notification = Verificação concluída - { $file_count } itens encontrados +# Confirm popups (set from Rust) +confirm_clean_exif = Tem certeza que deseja limpar as tags EXIF de { $n } arquivos selecionados? +confirm_delete_items = Tem certeza que deseja excluir { $n } itens selecionados? +gallery_confirm_delete_msg = Você está prestes a excluir { $total_images } imagens em { $total_groups } grupos. +gallery_confirm_delete_warning = Todos os itens estão selecionados em grupos de { $unsafe_groups}! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = O cálculo e a comparação das impressões digitais de áudio é muito intenso em recursos e pode demorar muito tempo. É recomendado usar o Krokiet em um computador para esta tarefa. +# Scan stage labels (shown during scan progress) +stage_collecting_files = Coletando arquivos +stage_scanning_name = Digitalização pelo nome +stage_scanning_size_name = Digitalização por nome e tamanho +stage_scanning_size = Escaneando por tamanho +stage_pre_hash = Pré-hashing +stage_full_hash = Hashing +stage_loading_cache = Carregando cache +stage_saving_cache = Salvando cache +stage_calculating_image_hashes = Calculando hashes de imagem +stage_comparing_images = Comparando imagens +stage_calculating_video_hashes = Calculando hashes de vídeo +stage_checking_files = Verificando arquivos +stage_checking_extensions = Verificando extensões +stage_checking_names = Verificando nomes +stage_reading_music_tags = Lendo etiquetas de música +stage_comparing_tags = Comparando tags +stage_calculating_music_fingerprints = Calculando impressões digitais +stage_comparing_fingerprints = Comparação de impressões digitais +stage_extracting_exif = Lendo etiquetas EXIF +stage_creating_video_thumbnails = Criando miniaturas de vídeo +stage_processing_videos = Processando vídeos +stage_deleting = Excluindo arquivos +stage_renaming = Renomeando arquivos +stage_moving = Movendo arquivos +stage_hardlinking = Criando links físicos +stage_symlinking = Criando links simbólicos +stage_optimizing_videos = Otimizando vídeos +stage_cleaning_exif = Limpando EXIF +# Group headers in scan results +duplicates_group_header = { $count } arquivos x { $per_file } / arquivo = { $total } no total +similar_images_group_header = { $count } imagens semelhantes +same_music_group_header = { $count } faixas semelhantes +# Rename confirmation +confirm_rename_items = Tem certeza que deseja renomear { $n } arquivos selecionados? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = Maior +option_search_mode_smallest = Menor +option_similarity_very_high = Alto +option_similarity_high = alta +option_similarity_medium = Média +option_similarity_low = baixa +option_similarity_very_low = V.Baixa +option_similarity_minimal = Min. +option_check_method_hash = Hash +option_check_method_name = Nome: +option_check_method_size_and_name = Tamanho+Nome +option_check_method_size = Tamanho +option_music_method_tags = Etiquetas +option_music_method_audio = Áudio +option_min_size_none = Nenhuma +option_min_size_1kb = 1 KB +option_min_size_8kb = 8 KB +option_min_size_64kb = 64 KB +option_min_size_1mb = 1 MB +option_max_size_16kb = 16 KB +option_max_size_1mb = 1 MB +option_max_size_10mb = 10 MB +option_max_size_100mb = 100 MB +option_max_size_unlimited = Ilimitado +# Volume labels (shown in the directories screen) +volume_internal_storage = Armazenamento Interno +volume_sd_card = Cartão de memória (Cartão SD) +volume_storage = Volume de Armazenamento +# Directories screen +directories_referenced_tooltip = Referenciado (não excluído) +directories_include_section_header = INCLUÍDO +directories_exclude_section_header = EXCLUÍDO +directories_custom_paths = Caminhos Personalizados +directories_check_button = Analisar +directories_check_popup_title = Estatísticas do diretório +directories_check_label_included = Caminhos incluídos: +directories_check_label_excluded = Caminhos excluídos: +directories_check_label_referenced = Rotas de referência: +directories_check_label_would_scan = Arquivos para verificar: +directories_check_label_processable = Arquivos processáveis: +directories_check_scanning = Escaneando... +directories_check_warning_no_processable = Nenhum arquivo processável encontrado - verifique suas pastas incluídas/excluídas +path_edit_title_include = Adicionar para incluir +path_edit_title_exclude = Adicionar à Exclusão +path_edit_placeholder = Digite o caminho... +path_edit_not_exists = Caminho não existe +path_edit_is_dir = Diretório +path_edit_is_file = Arquivo +path_edit_no_newlines = Caminhos não podem conter novas linhas — Chave Enter não é permitida +ctx_menu_title = Abertas +ctx_open_file = Abrir item +ctx_open_folder = Abrir pasta pai diff --git a/cedinia/i18n/ro/cedinia.ftl b/cedinia/i18n/ro/cedinia.ftl new file mode 100644 index 000000000..75f9372d6 --- /dev/null +++ b/cedinia/i18n/ro/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = Duplicate +tool_empty_folders = Golire dosare +tool_similar_images = Imagini similare +tool_empty_files = Fișiere goale +tool_temporary_files = Fișiere temporare +tool_big_files = Fișiere mai mari +tool_broken_files = Fișiere defecte +tool_bad_extensions = Extensii rele +tool_same_music = Duplicate Muzică +tool_bad_names = Nume greșit +tool_exif_remover = Date EXIF +tool_directories = Directoare +tool_settings = Setări +# Home screen tool card descriptions +home_dup_description = Găsește fișiere cu același conținut +home_empty_folders_description = Dosare fără conținut +home_similar_images_description = Găsiți fotografii vizuale similare +home_empty_files_description = Fișiere cu dimensiune zero +home_temp_files_description = Fișiere temporare și în cache +home_big_files_description = Fişiere mai mici pe disc +home_broken_files_description = PDF, audio, imagini, arhive +home_bad_extensions_description = Fișiere cu extensie invalidă +home_same_music_description = Fişiere audio similare după etichete +home_bad_names_description = Fișiere cu caractere problematice în nume +home_exif_description = Imagini cu metadate EXIF +# Results list +scanning = Scanare în curs... +stopping = Oprire... +no_results = Niciun rezultat +press_start = Apăsați START pentru a scana +select_label = Sel. +deselect_label = Desel. +list_label = Listă +gallery_label = Gal. +# Selection popup +selection_popup_title = Selectare +select_all = Selectează tot +select_except_one = Selectează toate cu excepția uneia +select_except_largest = Selectează toate cu excepția celui mai mare +select_except_smallest = Selectează toate cu excepția celor mici +select_largest = Selectează cel mai mare +select_smallest = Selectează cel mai mic +select_except_highest_res = Selectează toate cu excepția rezoluției maxime +select_except_lowest_res = Selectează toate cu excepția celei mai mici rezoluții +select_highest_res = Selectează cea mai mare rezoluție +select_lowest_res = Selectează cea mai mică rezoluție +invert_selection = Inversează selecția +close = Inchide +# Deselection popup +deselection_popup_title = Deselectează +deselect_all = Deselectează tot +deselect_except_one = Deselectează toate cu o singură excepție +# Confirm popup +cancel = Anulează +delete = Ștergere +rename = Redenumire +# Delete errors popup +delete_errors_title = Nu s-a putut șterge unele fișiere: +ok = Ok +# Stopping overlay +stopping_overlay_title = Oprire +stopping_overlay_body = + Se termină scanarea curentă... + Vă rugăm să așteptați. +# Permission popup +permission_title = Acces fișier +permission_body = Pentru a scana fișierele, aplicația are nevoie de acces la memoria dispozitivului. Fără această permisiune, scanarea nu va fi posibilă. +grant = Acordă +no_permission_scan_warning = Fără acces la fișier - acordă permisiunea de a scana +# Settings screen tabs +settings_tab_general = Generalități +settings_tab_tools = Unelte +settings_tab_diagnostics = Informații +# Settings - General tab +settings_use_cache = Utilizare geocutie +settings_use_cache_desc = Accelerează scanările ulterioare (hash/imagini) +settings_ignore_hidden = Ignoră fișierele ascunse +settings_ignore_hidden_desc = Fișiere și dosare care încep cu '' +settings_show_notification = Notifică când scanarea se termină +settings_show_notification_desc = Arată o notificare de sistem la finalizarea scanării +settings_notify_only_background = Numai când în fundal +settings_notify_only_background_desc = Sari peste notificare dacă aplicația este vizibilă +notifications_disabled_banner = Notificări dezactivate +notifications_enable_button = Activare +settings_scan_label = SCANARE +settings_filters_label = FILTRELE (unele unelte) +settings_min_file_size = Dimensiune minimă fișier +settings_max_file_size = Mărimea maximă a fișierului +settings_language = Limba +settings_language_restart = Necesită repornirea aplicației +settings_common_label = SETĂRI COMUNE +settings_excluded_items = OBIECTE EXCLUZATE (modele de virgulă, separate prin virgulă) +settings_excluded_items_placeholder = ex. *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = EXTENSIUNI ADMISE (goale = toate) +settings_allowed_extensions_placeholder = de ex. jpg, png, mp4 +settings_excluded_extensions = EXTENSIUNI EXCLUSE +settings_excluded_extensions_placeholder = ex. coacă, tmp, log +# Settings - Tools section labels +settings_duplicates_header = DUPLICAȚII +settings_check_method_label = METODĂ DE COMPARARE +settings_check_method = Metodă +settings_hash_type_label = TIPUL HASH +settings_hash_type = Tip hash +settings_hash_type_desc = Blake3 - este recomandată opțiunea, CRC32 are șanse mici de a avea efecte pozitive false +settings_similar_images_header = IMAGINI SIMILARE +settings_similarity_preset = Prag similar +settings_similarity_desc = Foarte mare = numai aproape identic +settings_hash_size = Dimensiune hash +settings_hash_size_desc = Mărimile mai mari au mai puține rezultate pozitive false, dar găsesc și imagini mai puțin similare +settings_hash_alg = Algoritm hash +settings_image_filter = Redimensionare filtru +settings_ignore_same_size = Ignoră imaginile cu aceleași dimensiuni +settings_gallery_image_fit_cover = Galerie: recoltă în pătrat +settings_gallery_image_fit_cover_desc = Umpleți dala; dezactivați pentru a păstra raportul original de aspect +settings_big_files_header = FILURI BIGGEST +settings_search_mode = Mod căutare +settings_file_count = Număr de fișiere +settings_same_music_header = DUPLICAȚII MUSIC +settings_music_check_method = Mod de comparaţie +settings_music_compare_tags_label = TAGURI COMPAATE +settings_music_title = Titlu +settings_music_artist = Artist +settings_music_year = An +settings_music_length = Lungime +settings_music_genre = Gen +settings_music_bitrate = Debit de biți +settings_music_approx = Comparare aproximativă a etichetelor +settings_broken_files_header = FILURI BROKEN +settings_broken_files_note = Scanare intensivă de resurse. Pentru cea mai bună performanță folosește Krokiet pe desktop. +settings_broken_files_types_label = TIPURI VERIFICATE +settings_broken_audio = Audio +settings_broken_pdf = PDF +settings_broken_archive = Arhivează +settings_broken_image = Imagine +settings_bad_names_header = NAMELE BAD +settings_bad_names_checks_label = CONTROALE +settings_bad_names_uppercase_ext = Extensie cu majuscule +settings_bad_names_emoji = Emoji în nume +settings_bad_names_space = Spaţii la start/end +settings_bad_names_non_ascii = Caractere non-ASCII +settings_bad_names_duplicated = Caractere repetate +# Settings - Diagnostics tab +diagnostics_header = DIAGNOSTICE +diagnostics_thumbnails = Cache pentru miniaturi +diagnostics_app_cache = Geocutie aplicaţie +diagnostics_refresh = Împrospătează +diagnostics_clear_thumbnails = Șterge miniaturile +diagnostics_open_thumbnails_folder = Deschide dosarul +diagnostics_clear_cache = Golește memoria cache +diagnostics_open_cache_folder = Deschide dosarul +diagnostics_collect_test = Test acces fișier +diagnostics_collect_test_desc = Verificați câte fișiere sunt accesibile +diagnostics_collect_test_run = Rulează +diagnostics_collect_test_stop = Oprește +collect_test_cancelled = Oprită de utilizator +diag_confirm_clear_thumbnails = Ştergeţi toate cutiile miniaturale? +diag_confirm_clear_cache = Șterge tot cache-ul aplicației? +about_repo = Depozit +about_translate = Traduceri +about_donate = Suport +# Collect-test result popup +collect_test_title = Rezultatele testului +collect_test_volumes = Volume: +collect_test_folders = Dosare: +collect_test_files = Fișiere: +collect_test_time = Ora: +# Licenses +licenses_label = LICENŢĂ +third_party_licenses = Licențe pentru terți +licenses_popup_title = Licențe terțe +# Directories screen +directories_include_header = Includeți +directories_included = Inclus +directories_exclude_header = Excludere +directories_excluded_header = Exclus +directories_add = Includeți +no_paths = Nici o cale - adaugă mai jos +directories_volume_header = Volume +directories_volume_refresh = Împrospătează +directories_volume_add = Adăugare +# Bottom navigation +nav_home = Pornire +nav_dirs = Directoare +nav_settings = Setări +# Status messages set from Rust +status_ready = Gata +status_stopped = Oprit +status_no_results = Niciun rezultat +status_deleted_selected = Sters selectat +status_deleted_with_errors = Șters cu erori +scan_not_started = Scanarea nu a început +found_items_prefix = Găsit +found_items_suffix = articole +deleted_items_prefix = Șters +deleted_items_suffix = articole +deleted_errors_suffix = erori +renamed_prefix = Redenumit +renamed_files_suffix = fişiere +renamed_errors_suffix = erori +cleaned_exif_prefix = Curățare EXIF din +cleaned_exif_suffix = fişiere +cleaned_exif_errors_suffix = erori +and_more_prefix = ...și +and_more_suffix = mai mult +# Gallery / delete popups +gallery_delete_button = Ștergere +gallery_back = Înapoi +gallery_confirm_delete = Da, șterge +deleting_files = Ștergere fișiere... +stop = Oprește +files_suffix = fişiere +scanning_fallback = Scanare... +app_subtitle = În onoarea Bătăliei din Cedynia (972 CE) +app_license = Frontend pentru Czkawka Core - GPL-3.0 +about_app_label = DESPRE +cache_label = CACHE +# Notification +scan_completed_notification = Scanare completă - { $file_count } elemente găsite +# Confirm popups (set from Rust) +confirm_clean_exif = Sunteţi sigur că doriţi să ştergeţi etichetele EXIF din { $n } selectate? +confirm_delete_items = Sunteţi sigur că doriţi să ştergeţi { $n } elementele selectate? +gallery_confirm_delete_msg = Sunteţi pe cale să ştergeţi imaginile { $total_images } în grupurile { $total_groups}. +gallery_confirm_delete_warning = Toate elementele sunt selectate în grupele { $unsafe_groups}! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = Calcularea și compararea amprentelor audio necesită foarte multe resurse și poate dura mult timp. Este recomandat să utilizaţi Krokiet pe un calculator pentru această sarcină. +# Scan stage labels (shown during scan progress) +stage_collecting_files = Colectarea fişierelor +stage_scanning_name = Scanare după nume +stage_scanning_size_name = Scanare după nume și dimensiune +stage_scanning_size = Scanare după dimensiune +stage_pre_hash = Pre-hash +stage_full_hash = Hashing +stage_loading_cache = Se încarcă geocutia +stage_saving_cache = Salvare geocutie +stage_calculating_image_hashes = Calcularea hash-urilor imaginii +stage_comparing_images = Compararea imaginilor +stage_calculating_video_hashes = Calcularea hash-urilor video +stage_checking_files = Se verifică fișierele +stage_checking_extensions = Verificare extensii +stage_checking_names = Verificare nume +stage_reading_music_tags = Citire etichete muzicale +stage_comparing_tags = Comparare etichete +stage_calculating_music_fingerprints = Calcularea amprentelor muzicale +stage_comparing_fingerprints = Compararea amprentelor +stage_extracting_exif = Citire etichete EXIF +stage_creating_video_thumbnails = Creare miniaturi video +stage_processing_videos = Procesare videoclipuri +stage_deleting = Ştergere fişiere +stage_renaming = Redenumire fişiere +stage_moving = Mutarea fişierelor +stage_hardlinking = Crearea de legături dure +stage_symlinking = Crearea de legături simbolice +stage_optimizing_videos = Optimizarea videoclipurilor +stage_cleaning_exif = Curățare EXIF +# Group headers in scan results +duplicates_group_header = { $count } fişiere x { $per_file } / fişier = { $total } total +similar_images_group_header = { $count } imagini similare +same_music_group_header = { $count } piese similare +# Rename confirmation +confirm_rename_items = Sunteţi sigur că doriţi să redenumiţi { $n } fişierele selectate? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = Miggest +option_search_mode_smallest = Mici +option_similarity_very_high = V.Înaltă +option_similarity_high = Ridicat +option_similarity_medium = Medie +option_similarity_low = scazut +option_similarity_very_low = V. Foarte scăzut +option_similarity_minimal = Minim. +option_check_method_hash = Hash +option_check_method_name = Nume +option_check_method_size_and_name = Dimensiune+Nume +option_check_method_size = Dimensiune +option_music_method_tags = Etichete +option_music_method_audio = Audio +option_min_size_none = Niciunul +option_min_size_1kb = 1 KO +option_min_size_8kb = 8 KO +option_min_size_64kb = 64 KO +option_min_size_1mb = 1 Mo +option_max_size_16kb = 16 KO +option_max_size_1mb = 1 Mo +option_max_size_10mb = 10 Mo +option_max_size_100mb = 100 MO +option_max_size_unlimited = Nelimitat +# Volume labels (shown in the directories screen) +volume_internal_storage = Stocare internă +volume_sd_card = Card de memorie (SD Card) +volume_storage = Volum stocare +# Directories screen +directories_referenced_tooltip = Referință (nu ștearsă) +directories_include_section_header = INCLUSE +directories_exclude_section_header = EXCLUZĂ +directories_custom_paths = Căi personalizate +directories_check_button = Analizează +directories_check_popup_title = Statistici Director +directories_check_label_included = Căi incluse: +directories_check_label_excluded = Căi excluse: +directories_check_label_referenced = Căi de referință: +directories_check_label_would_scan = Fișiere de scanat: +directories_check_label_processable = Fișiere procesabile: +directories_check_scanning = Scanare... +directories_check_warning_no_processable = Nu au fost găsite fișiere procesabile - verifică dosarele incluse/excluse +path_edit_title_include = Adaugă la Includere +path_edit_title_exclude = Adaugă la Excludere +path_edit_placeholder = Introduceți calea... +path_edit_not_exists = Calea nu există +path_edit_is_dir = Director +path_edit_is_file = Fişier +path_edit_no_newlines = Căile nu pot conține noutăți - cheia nu este permisă +ctx_menu_title = Deschideți +ctx_open_file = Deschideți articolul +ctx_open_folder = Deschide dosarul părinte diff --git a/cedinia/i18n/ru/cedinia.ftl b/cedinia/i18n/ru/cedinia.ftl new file mode 100644 index 000000000..234197f22 --- /dev/null +++ b/cedinia/i18n/ru/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = Дубликаты +tool_empty_folders = Пустые папки +tool_similar_images = Похожие изображения +tool_empty_files = Пустые файлы +tool_temporary_files = Временные файлы +tool_big_files = Крупнейшие файлы +tool_broken_files = Сломанные файлы +tool_bad_extensions = Плохие расширения +tool_same_music = Музыкальные дубликаты +tool_bad_names = Неверные имена +tool_exif_remover = Данные EXIF +tool_directories = Каталоги +tool_settings = Настройки +# Home screen tool card descriptions +home_dup_description = Найти файлы с одним и тем же контентом +home_empty_folders_description = Директории без содержания +home_similar_images_description = Найти похожие на визуальное фото +home_empty_files_description = Файлы с нулевым размером +home_temp_files_description = Временные и кэшированные файлы +home_big_files_description = Крупнейшие/маленькие файлы на диске +home_broken_files_description = PDF, аудио, изображения, архивы +home_bad_extensions_description = Файлы с недопустимым расширением +home_same_music_description = Похожие аудио файлы по тегам +home_bad_names_description = Файлы с проблемными символами в имени +home_exif_description = Изображения с метаданными EXIF +# Results list +scanning = Идет сканирование... +stopping = Остановка... +no_results = Нет результатов +press_start = Нажмите НАЧАТЬ для сканирования +select_label = Сел. +deselect_label = Desel. +list_label = Список +gallery_label = Гал. +# Selection popup +selection_popup_title = Выбрать +select_all = Выбрать все +select_except_one = Выделить все, кроме одного +select_except_largest = Выбрать все, кроме наибольшего +select_except_smallest = Выделить все, кроме самых маленьких +select_largest = Выберите наибольший +select_smallest = Выберите наименьший +select_except_highest_res = Выделить все кроме самого высокого разрешения +select_except_lowest_res = Выделить все кроме минимального разрешения +select_highest_res = Выберите наибольшее разрешение +select_lowest_res = Выберите минимальное разрешение +invert_selection = Инвертировать выделение +close = Закрыть +# Deselection popup +deselection_popup_title = Отменить выбор +deselect_all = Отменить выбор +deselect_except_one = Отменить выбор всех кроме одного +# Confirm popup +cancel = Отмена +delete = Удалить +rename = Переименовать +# Delete errors popup +delete_errors_title = Не удалось удалить некоторые файлы: +ok = ОК +# Stopping overlay +stopping_overlay_title = Остановка +stopping_overlay_body = + Завершение сканирования... + Пожалуйста подождите. +# Permission popup +permission_title = Доступ к файлу +permission_body = Для сканирования файлов приложению требуется доступ к хранилищу устройства. Без этого разрешения сканирование будет невозможно. +grant = Предоставить +no_permission_scan_warning = Нет доступа к файлу - предоставить разрешение для сканирования +# Settings screen tabs +settings_tab_general = Общие положения +settings_tab_tools = Инструменты +settings_tab_diagnostics = Инфо +# Settings - General tab +settings_use_cache = Использовать кэш +settings_use_cache_desc = Ускоряет последующие сканирования (хэш/изображения) +settings_ignore_hidden = Игнорировать скрытые файлы +settings_ignore_hidden_desc = Файлы и папки, начинающиеся с '.' +settings_show_notification = Уведомлять о завершении сканирования +settings_show_notification_desc = Показывать системное уведомление при сканировании +settings_notify_only_background = Только когда в фоне +settings_notify_only_background_desc = Пропустить уведомление, если приложение видно +notifications_disabled_banner = Уведомления отключены +notifications_enable_button = Включить +settings_scan_label = СКАН +settings_filters_label = ФИЛЬТРЫ (некоторые инструменты) +settings_min_file_size = Минимальный размер файла +settings_max_file_size = Макс. размер файла +settings_language = Язык +settings_language_restart = Требуется перезапуск приложения +settings_common_label = ОБЩИЕ НАСТРОЙКИ +settings_excluded_items = ВЫПОЛНЕННЫЕ ПРЕДМЕТЫ (мрачные шаблоны, разделённые запятыми) +settings_excluded_items_placeholder = например, *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = РАЗРЕШЕННЫЕ ВЫХОДЫ (пусто = все) +settings_allowed_extensions_placeholder = напр. jpg, png, mp4 +settings_excluded_extensions = РАСПРОСТРАНЕНИЕ ВЫШЕНИЙ +settings_excluded_extensions_placeholder = например, bak, tmp, log +# Settings - Tools section labels +settings_duplicates_header = ПОДРАЗУМЕВАНИЯ +settings_check_method_label = МЕТОД КОМПАРИЗНА +settings_check_method = Метод +settings_hash_type_label = ТИП ЛЕГКОГО +settings_hash_type = Тип хэша +settings_hash_type_desc = Blake3 - рекомендуется, CRC32 имеет малые шансы на ложное срабатывание +settings_similar_images_header = СИЛИЛАРНЫЕ ИМЕНИЯ +settings_similarity_preset = Порог сходства +settings_similarity_desc = Очень высокий = только почти идентичный +settings_hash_size = Размер хэша +settings_hash_size_desc = Большие размеры, имеют меньше ложных срабатываний, но и находят менее похожие изображения +settings_hash_alg = Алгоритм хеша +settings_image_filter = Изменить размер фильтра +settings_ignore_same_size = Игнорировать изображения с одинаковыми размерами +settings_gallery_image_fit_cover = Галерея: обрезать на квадрат +settings_gallery_image_fit_cover_desc = Заполните плитку; отключите для сохранения оригинального соотношения сторон +settings_big_files_header = БЫСТРЫЕ ФАЙЛЫ +settings_search_mode = Режим поиска +settings_file_count = Количество файлов +settings_same_music_header = МУЗЫЧЕСКИЕ ДВИГАТЕЛИ +settings_music_check_method = Режим сравнения +settings_music_compare_tags_label = Тэги КОМПАНИИ +settings_music_title = Заголовок +settings_music_artist = Художник +settings_music_year = Год +settings_music_length = Длина +settings_music_genre = Жанр +settings_music_bitrate = Битрейт +settings_music_approx = Приблизительное сравнение тегов +settings_broken_files_header = БРОКЕН ФАЙЛЫ +settings_broken_files_note = Ресурсоемкое сканирование. Для оптимальной производительности используйте Krokiet на рабочем столе. +settings_broken_files_types_label = ИЗМЕНЕННЫЕ ТИПЫ +settings_broken_audio = Аудио +settings_broken_pdf = PDF +settings_broken_archive = Архивировать +settings_broken_image = Изображение +settings_bad_names_header = НАЗВАНИЯ BAD +settings_bad_names_checks_label = ПОИСК +settings_bad_names_uppercase_ext = Расширение прописных букв +settings_bad_names_emoji = Эмодзи в имени +settings_bad_names_space = Пробелы в начале/конце +settings_bad_names_non_ascii = Не ASCII символы +settings_bad_names_duplicated = Повторяющиеся символы +# Settings - Diagnostics tab +diagnostics_header = ДИАГНОСТИКА +diagnostics_thumbnails = Кэш миниатюр +diagnostics_app_cache = Кэш приложений +diagnostics_refresh = Обновить +diagnostics_clear_thumbnails = Очистить эскизы +diagnostics_open_thumbnails_folder = Открыть папку +diagnostics_clear_cache = Очистить кэш +diagnostics_open_cache_folder = Открыть папку +diagnostics_collect_test = Тест доступа к файлу +diagnostics_collect_test_desc = Проверьте, сколько файлов доступно +diagnostics_collect_test_run = Запустить +diagnostics_collect_test_stop = Остановить +collect_test_cancelled = Остановлено пользователем +diag_confirm_clear_thumbnails = Очистить кэш эскизов? +diag_confirm_clear_cache = Очистить весь кэш приложений? +about_repo = Репозиторий +about_translate = Переводы +about_donate = Поддержка +# Collect-test result popup +collect_test_title = Результаты испытания +collect_test_volumes = Объем: +collect_test_folders = Папки: +collect_test_files = Файлы: +collect_test_time = Время: +# Licenses +licenses_label = ЛИЦЕНЗИЯ +third_party_licenses = Сторонние лицензии +licenses_popup_title = Сторонние лицензии +# Directories screen +directories_include_header = Включить +directories_included = Включено +directories_exclude_header = Исключить +directories_excluded_header = Исключено +directories_add = Включить +no_paths = Нет путей - добавить ниже +directories_volume_header = Громкость +directories_volume_refresh = Обновить +directories_volume_add = Добавить +# Bottom navigation +nav_home = Начать +nav_dirs = Каталоги +nav_settings = Настройки +# Status messages set from Rust +status_ready = Готово +status_stopped = Остановлено +status_no_results = Нет результатов +status_deleted_selected = Удалено +status_deleted_with_errors = Удалено с ошибками +scan_not_started = Сканирование не начато +found_items_prefix = Найдено +found_items_suffix = элементы +deleted_items_prefix = Удалено +deleted_items_suffix = элементы +deleted_errors_suffix = ошибки +renamed_prefix = Переименовано +renamed_files_suffix = файлы +renamed_errors_suffix = ошибки +cleaned_exif_prefix = Удалено EXIF из +cleaned_exif_suffix = файлы +cleaned_exif_errors_suffix = ошибки +and_more_prefix = ...и +and_more_suffix = больше +# Gallery / delete popups +gallery_delete_button = Удалить +gallery_back = Назад +gallery_confirm_delete = Да, удалить +deleting_files = Удаление файлов... +stop = Остановить +files_suffix = файлы +scanning_fallback = Сканирование... +app_subtitle = В честь Сединии (972 CE) +app_license = Фронтенд для Czkawka Core - лицензия GPL-3.0 +about_app_label = О программе +cache_label = ОЧИСТЬ +# Notification +scan_completed_notification = Сканирование завершено - { $file_count } элементов найдено +# Confirm popups (set from Rust) +confirm_clean_exif = Вы уверены, что хотите удалить EXIF теги из { $n } выбранных файлов? +confirm_delete_items = Вы уверены, что хотите удалить { $n } выбранных элементов? +gallery_confirm_delete_msg = Вы собираетесь удалить { $total_images } изображений в { $total_groups } группах. +gallery_confirm_delete_warning = Все элементы выбраны в { $unsafe_groups } группах! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = Вычисление и сравнение аудио отпечатков пальцев очень ресурсоемкое и может занять много времени. Для этого рекомендуется использовать Krokiet на настольной системе. +# Scan stage labels (shown during scan progress) +stage_collecting_files = Сбор файлов +stage_scanning_name = Сканирование по имени +stage_scanning_size_name = Сканирование по имени и размеру +stage_scanning_size = Сканирование по размеру +stage_pre_hash = Пре-хеширование +stage_full_hash = Хэширование +stage_loading_cache = Загрузка кэша +stage_saving_cache = Сохранение кэша +stage_calculating_image_hashes = Расчет хэшей изображений +stage_comparing_images = Сравнение изображений +stage_calculating_video_hashes = Вычисление хэшей видео +stage_checking_files = Проверка файлов +stage_checking_extensions = Проверка расширений +stage_checking_names = Проверка имен +stage_reading_music_tags = Чтение музыкальных тегов +stage_comparing_tags = Сравнение тегов +stage_calculating_music_fingerprints = Вычисление отпечатков музыки +stage_comparing_fingerprints = Сравнение отпечатков пальцев +stage_extracting_exif = Чтение тегов EXIF +stage_creating_video_thumbnails = Создание миниатюр видео +stage_processing_videos = Обработка видео +stage_deleting = Удаление файлов +stage_renaming = Переименование файлов +stage_moving = Перемещение файлов +stage_hardlinking = Создание жёстких ссылок +stage_symlinking = Создание символьных ссылок +stage_optimizing_videos = Оптимизация видео +stage_cleaning_exif = Очистка EXIF +# Group headers in scan results +duplicates_group_header = { $count } файлов x { $per_file } / file = { $total } всего +similar_images_group_header = { $count } похожие изображения +same_music_group_header = { $count } похожие треки +# Rename confirmation +confirm_rename_items = Вы уверены, что хотите переименовать { $n } выбранных файлов? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = Крупнейший +option_search_mode_smallest = Наименьший +option_similarity_very_high = Высокий V +option_similarity_high = Высокий +option_similarity_medium = Средний +option_similarity_low = Низкий +option_similarity_very_low = V.Низкий +option_similarity_minimal = Мин. +option_check_method_hash = Хэш +option_check_method_name = Наименование +option_check_method_size_and_name = Размер+Имя +option_check_method_size = Размер +option_music_method_tags = Теги +option_music_method_audio = Аудио +option_min_size_none = Нет +option_min_size_1kb = 1 КБ +option_min_size_8kb = 8 КБ +option_min_size_64kb = 64 КБ +option_min_size_1mb = 1 МБ +option_max_size_16kb = 16 КБ +option_max_size_1mb = 1 МБ +option_max_size_10mb = 10 МБ +option_max_size_100mb = 100 МБ +option_max_size_unlimited = Неограниченный +# Volume labels (shown in the directories screen) +volume_internal_storage = Внутреннее хранилище +volume_sd_card = Карта памяти (SD карта) +volume_storage = Громкость хранения +# Directories screen +directories_referenced_tooltip = Ссылаемый (не удален) +directories_include_section_header = ВКЛЮЧЕНО +directories_exclude_section_header = ВЫКЛЮЧЕНО +directories_custom_paths = Пользовательские пути +directories_check_button = Анализ +directories_check_popup_title = Статистика каталога +directories_check_label_included = Включенные пути: +directories_check_label_excluded = Исключенные пути: +directories_check_label_referenced = Путь к ссылке: +directories_check_label_would_scan = Файлы для сканирования: +directories_check_label_processable = Обрабатываемые файлы: +directories_check_scanning = Сканирование... +directories_check_warning_no_processable = Не найдено обрабатываемых файлов - проверьте ваши включные/исключенные папки +path_edit_title_include = Добавить в Включить +path_edit_title_exclude = Добавить к исключению +path_edit_placeholder = Введите путь... +path_edit_not_exists = Путь не существует +path_edit_is_dir = Каталог +path_edit_is_file = Файл +path_edit_no_newlines = Пути не могут содержать новые строки — Ввод ключа не допускается +ctx_menu_title = Открыть +ctx_open_file = Открыть предмет +ctx_open_folder = Открыть родительскую папку diff --git a/cedinia/i18n/sv-SE/cedinia.ftl b/cedinia/i18n/sv-SE/cedinia.ftl new file mode 100644 index 000000000..a609ec3cb --- /dev/null +++ b/cedinia/i18n/sv-SE/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = Dubbletter +tool_empty_folders = Tomma mappar +tool_similar_images = Liknande bilder +tool_empty_files = Tomma filer +tool_temporary_files = Tillfälliga filer +tool_big_files = Största filer +tool_broken_files = Trasiga filer +tool_bad_extensions = Dåliga tillägg +tool_same_music = Musik Duplicerar +tool_bad_names = Dåliga namn +tool_exif_remover = EXIF data +tool_directories = Kataloger +tool_settings = Inställningar +# Home screen tool card descriptions +home_dup_description = Hitta filer med samma innehåll +home_empty_folders_description = Kataloger utan innehåll +home_similar_images_description = Hitta visuellt liknande bilder +home_empty_files_description = Filer med nollstorlek +home_temp_files_description = Tillfälliga och cachade filer +home_big_files_description = Största/minsta filer på disk +home_broken_files_description = PDF, ljud, bilder, arkiv +home_bad_extensions_description = Filer med ogiltigt tillägg +home_same_music_description = Liknande ljudfiler med taggar +home_bad_names_description = Filer med problematiska tecken i namnet +home_exif_description = Bilder med EXIF-metadata +# Results list +scanning = Skannar pågår... +stopping = Stoppar... +no_results = Inga resultat +press_start = Tryck på START för att skanna +select_label = Sälj. +deselect_label = Desel. +list_label = Lista +gallery_label = Gal. +# Selection popup +selection_popup_title = Välj +select_all = Markera alla +select_except_one = Markera alla utom en +select_except_largest = Välj alla utom största +select_except_smallest = Välj alla utom minsta +select_largest = Välj största +select_smallest = Välj minsta +select_except_highest_res = Välj alla utom högsta upplösning +select_except_lowest_res = Välj alla utom lägsta upplösning +select_highest_res = Välj högsta upplösning +select_lowest_res = Välj lägsta upplösning +invert_selection = Invertera markering +close = Stäng +# Deselection popup +deselection_popup_title = Avmarkera +deselect_all = Avmarkera alla +deselect_except_one = Avmarkera alla utom en +# Confirm popup +cancel = Avbryt +delete = Radera +rename = Döp om +# Delete errors popup +delete_errors_title = Det gick inte att ta bort några filer: +ok = Ok +# Stopping overlay +stopping_overlay_title = Stoppar +stopping_overlay_body = + Slutför aktuell skanning... + Vänligen vänta. +# Permission popup +permission_title = Åtkomst till fil +permission_body = För att skanna filer behöver appen åtkomst till enhetslagring. Utan denna behörighet kommer skanning inte att vara möjlig. +grant = Bevilja +no_permission_scan_warning = Ingen filåtkomst - bevilja behörighet att skanna +# Settings screen tabs +settings_tab_general = Allmänt +settings_tab_tools = Verktyg +settings_tab_diagnostics = Information +# Settings - General tab +settings_use_cache = Använd cache +settings_use_cache_desc = Snabbar upp efterföljande skanningar (hash/images) +settings_ignore_hidden = Ignorera dolda filer +settings_ignore_hidden_desc = Filer och mappar som börjar med '' +settings_show_notification = Meddela när skanningen är klar +settings_show_notification_desc = Visa en systemavisering vid skanning slutförd +settings_notify_only_background = Endast när i bakgrunden +settings_notify_only_background_desc = Hoppa över avisering om appen är synlig +notifications_disabled_banner = Aviseringar inaktiverade +notifications_enable_button = Aktivera +settings_scan_label = SKANNA +settings_filters_label = FILTERAR (vissa verktyg) +settings_min_file_size = Min. filstorlek +settings_max_file_size = Max. filstorlek +settings_language = Språk +settings_language_restart = Kräver omstart av appen +settings_common_label = KOMMON INSTÄLLNINGAR +settings_excluded_items = EXCLUDED ITEMS (glob mönster, kommaseparerade) +settings_excluded_items_placeholder = t.ex. *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = TILLGÄNGLIGA EXTENSIONER (tom = alla) +settings_allowed_extensions_placeholder = t.ex. jpg, png, mp4 +settings_excluded_extensions = EXKLICKA EXTENSIONER +settings_excluded_extensions_placeholder = t.ex. bak, tmp, logg +# Settings - Tools section labels +settings_duplicates_header = DUPLIKATER +settings_check_method_label = KOMPARISON METOD +settings_check_method = Metod +settings_hash_type_label = HASHTYP +settings_hash_type = Hash typ +settings_hash_type_desc = Blake3 - rekommenderas alternativ, CRC32 har liten chans att falska positiva +settings_similar_images_header = LIKNANDE BILDER +settings_similarity_preset = Likhet tröskel +settings_similarity_desc = Mycket hög = endast nästan identisk +settings_hash_size = Hashstorlek +settings_hash_size_desc = Större storlekar, har mindre falska positiva, men hittar också mindre liknande bilder +settings_hash_alg = Hash-algoritm +settings_image_filter = Ändra storlek +settings_ignore_same_size = Ignorera bilder med samma mått +settings_gallery_image_fit_cover = Galleri: beskära till kvadrat +settings_gallery_image_fit_cover_desc = Fyll i kakel; inaktivera för att behålla det ursprungliga bildförhållandet +settings_big_files_header = BIGGEST FILER +settings_search_mode = Sök läge +settings_file_count = Antal filer +settings_same_music_header = MUSIKA DUPLIKATER +settings_music_check_method = Jämförelse-läge +settings_music_compare_tags_label = KOMPARED TAGS +settings_music_title = Titel +settings_music_artist = Konstnären +settings_music_year = År +settings_music_length = Längd +settings_music_genre = Genre +settings_music_bitrate = Bithastighet +settings_music_approx = Ungefärlig tagg jämförelse +settings_broken_files_header = BLÄDDRA FILER +settings_broken_files_note = Resursintensiv skanning. För bästa prestanda använd Krokiet på skrivbordet. +settings_broken_files_types_label = CHECKADE TYPER +settings_broken_audio = Ljud +settings_broken_pdf = PDF +settings_broken_archive = Arkivera +settings_broken_image = Bild +settings_bad_names_header = BAD NAMN +settings_bad_names_checks_label = CHECKAR +settings_bad_names_uppercase_ext = Versaler förlängning +settings_bad_names_emoji = Emoji i namn +settings_bad_names_space = Mellanslag vid start/slut +settings_bad_names_non_ascii = Tecken som inte är ASCII +settings_bad_names_duplicated = Upprepade tecken +# Settings - Diagnostics tab +diagnostics_header = DIAGNOSTIKER +diagnostics_thumbnails = Miniatyrbildscache +diagnostics_app_cache = Applikationscache +diagnostics_refresh = Uppdatera +diagnostics_clear_thumbnails = Rensa miniatyrer +diagnostics_open_thumbnails_folder = Öppna mapp +diagnostics_clear_cache = Rensa cache +diagnostics_open_cache_folder = Öppna mapp +diagnostics_collect_test = Testa åtkomst till filer +diagnostics_collect_test_desc = Kontrollera hur många filer som är tillgängliga +diagnostics_collect_test_run = Kör +diagnostics_collect_test_stop = Stoppa +collect_test_cancelled = Stoppad av användare +diag_confirm_clear_thumbnails = Rensa alla miniatyrcache? +diag_confirm_clear_cache = Rensa alla appcache? +about_repo = Utveckling +about_translate = Översättningar +about_donate = Stöd +# Collect-test result popup +collect_test_title = Testa resultat +collect_test_volumes = Volymer: +collect_test_folders = Mappar: +collect_test_files = Filer: +collect_test_time = Tid: +# Licenses +licenses_label = LICENS +third_party_licenses = Tredjeparts licenser +licenses_popup_title = Licenser för tredje part +# Directories screen +directories_include_header = Inkludera +directories_included = Ingår +directories_exclude_header = Exkludera +directories_excluded_header = Utesluten +directories_add = Inkludera +no_paths = Inga sökvägar - lägg till nedan +directories_volume_header = Volymer +directories_volume_refresh = Uppdatera +directories_volume_add = Lägg till +# Bottom navigation +nav_home = Starta +nav_dirs = Kataloger +nav_settings = Inställningar +# Status messages set from Rust +status_ready = Redo +status_stopped = Stoppad +status_no_results = Inga resultat +status_deleted_selected = Borttagna valda +status_deleted_with_errors = Tog bort med fel +scan_not_started = Skanna inte startad +found_items_prefix = Hittad +found_items_suffix = objekt +deleted_items_prefix = Borttagen +deleted_items_suffix = objekt +deleted_errors_suffix = fel +renamed_prefix = Namnbyte +renamed_files_suffix = filer +renamed_errors_suffix = fel +cleaned_exif_prefix = Rensat EXIF från +cleaned_exif_suffix = filer +cleaned_exif_errors_suffix = fel +and_more_prefix = ...och +and_more_suffix = mer +# Gallery / delete popups +gallery_delete_button = Radera +gallery_back = Tillbaka +gallery_confirm_delete = Ja, ta bort +deleting_files = Tar bort filer... +stop = Stoppa +files_suffix = filer +scanning_fallback = Skannar... +app_subtitle = För att hedra slaget vid Cedynia (972 CE) +app_license = Frontend för Czkawka Core - GPL-3.0 +about_app_label = OM +cache_label = CACHE +# Notification +scan_completed_notification = Skanna klar - { $file_count } objekt hittade +# Confirm popups (set from Rust) +confirm_clean_exif = Vill du verkligen rensa EXIF-taggar från { $n } valda filer? +confirm_delete_items = Är du säker på att du vill ta bort { $n } valda objekt? +gallery_confirm_delete_msg = Du håller på att ta bort { $total_images } bilder i { $total_groups } grupper. +gallery_confirm_delete_warning = Alla objekt är markerade i { $unsafe_groups } grupper! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = Att beräkna och jämföra ljudfingeravtryck är mycket resurskrävande och kan ta lång tid. Det rekommenderas att använda Krokiet på ett skrivbordssystem för denna uppgift. +# Scan stage labels (shown during scan progress) +stage_collecting_files = Samlar in filer +stage_scanning_name = Skannar efter namn +stage_scanning_size_name = Skannar efter namn och storlek +stage_scanning_size = Skannar efter storlek +stage_pre_hash = För-hashning +stage_full_hash = Hashning +stage_loading_cache = Laddar cache +stage_saving_cache = Sparar cache +stage_calculating_image_hashes = Beräknar bildhashen +stage_comparing_images = Jämföra bilder +stage_calculating_video_hashes = Beräknar videohashar +stage_checking_files = Kontrollerar filer +stage_checking_extensions = Kontrollerar tillägg +stage_checking_names = Kontrollerar namn +stage_reading_music_tags = Läser musik taggar +stage_comparing_tags = Jämföra taggar +stage_calculating_music_fingerprints = Beräknar musikfingeravtryck +stage_comparing_fingerprints = Jämföra fingeravtryck +stage_extracting_exif = Läser EXIF-taggar +stage_creating_video_thumbnails = Skapa miniatyrer för video +stage_processing_videos = Bearbetar videor +stage_deleting = Tar bort filer +stage_renaming = Byter namn på filer +stage_moving = Flyttar filer +stage_hardlinking = Skapar hårda länkar +stage_symlinking = Skapar symlänkar +stage_optimizing_videos = Optimerar videor +stage_cleaning_exif = Rengöring av EXIF +# Group headers in scan results +duplicates_group_header = { $count } filer x { $per_file } / fil = { $total } totalt +similar_images_group_header = { $count } liknande bilder +same_music_group_header = { $count } liknande spår +# Rename confirmation +confirm_rename_items = Är du säker på att du vill byta namn på { $n } valda filer? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = Största +option_search_mode_smallest = Minsta +option_similarity_very_high = V.Hög +option_similarity_high = Hög +option_similarity_medium = Medel +option_similarity_low = Låg +option_similarity_very_low = V.Låg +option_similarity_minimal = Min. +option_check_method_hash = Hash +option_check_method_name = Namn +option_check_method_size_and_name = Storlek+namn +option_check_method_size = Storlek +option_music_method_tags = Taggar +option_music_method_audio = Ljud +option_min_size_none = Ingen +option_min_size_1kb = 1 kB +option_min_size_8kb = 8 KB +option_min_size_64kb = 64 KB +option_min_size_1mb = 1 MB +option_max_size_16kb = 16 KB +option_max_size_1mb = 1 MB +option_max_size_10mb = 10 MB +option_max_size_100mb = 100 MB +option_max_size_unlimited = Obegränsad +# Volume labels (shown in the directories screen) +volume_internal_storage = Intern lagring +volume_sd_card = Minneskort (SD-kort) +volume_storage = Lagring Volym +# Directories screen +directories_referenced_tooltip = Refererad (ej borttagen) +directories_include_section_header = ÖKLICKA +directories_exclude_section_header = EXKLICKA +directories_custom_paths = Anpassade sökvägar +directories_check_button = Analysera +directories_check_popup_title = Katalogstatistik +directories_check_label_included = Inkluderade sökvägar: +directories_check_label_excluded = Uteslutna sökvägar: +directories_check_label_referenced = Referens sökvägar: +directories_check_label_would_scan = Filer att skanna: +directories_check_label_processable = Processbara filer: +directories_check_scanning = Skannar... +directories_check_warning_no_processable = Inga bearbetningsbara filer hittades - verifiera dina inkluderade/uteslutna mappar +path_edit_title_include = Lägg till i Inkludera +path_edit_title_exclude = Lägg till för att utesluta +path_edit_placeholder = Ange sökväg... +path_edit_not_exists = Sökvägen finns inte +path_edit_is_dir = Katalog +path_edit_is_file = Fil +path_edit_no_newlines = Sökvägar kan inte innehålla newlines — Ange nyckel är inte tillåten +ctx_menu_title = Öppna +ctx_open_file = Öppna objekt +ctx_open_folder = Öppna överordnad mapp diff --git a/cedinia/i18n/tr/cedinia.ftl b/cedinia/i18n/tr/cedinia.ftl new file mode 100644 index 000000000..64c4b4a8e --- /dev/null +++ b/cedinia/i18n/tr/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = Eş Dosyalar +tool_empty_folders = Boş Klasörler +tool_similar_images = Benzer Resimler +tool_empty_files = Boş Dosyalar +tool_temporary_files = Geçici Dosyalar +tool_big_files = En Büyük Dosyalar +tool_broken_files = Bozuk Dosyalar +tool_bad_extensions = Hatalı Uzantılar +tool_same_music = Müzik Kopyaları +tool_bad_names = Kötü İsimler +tool_exif_remover = EXIF Verileri +tool_directories = Klasörler +tool_settings = Ayarlar +# Home screen tool card descriptions +home_dup_description = Aynı içeriğe sahip dosyaları bulun +home_empty_folders_description = İçerik olmayan dizinler +home_similar_images_description = Görsel olarak benzer fotoğrafları bulun +home_empty_files_description = Sıfır boyutlu dosyalar +home_temp_files_description = Geçici ve önbelleğe alınmış dosyalar +home_big_files_description = Disk üzerindeki en büyük/en küçük dosyalar +home_broken_files_description = PDF, ses, resimler, arşivler +home_bad_extensions_description = Geçersiz uzantıya sahip dosyalar +home_same_music_description = Etiketlere göre benzer ses dosyaları +home_bad_names_description = İsimlerinde sorunlu karakterler içeren dosyalar +home_exif_description = EXIF meta verisi içeren resimler +# Results list +scanning = Taramaya başlanıyor... +stopping = Bekleniyor... +no_results = Sonuç bulunamadı +press_start = TARAMAYA başlamak için START düğmesine basın +select_label = Selam. +deselect_label = Desel. +list_label = Liste +gallery_label = Gal. +# Selection popup +selection_popup_title = Seç +select_all = Tümünü Seç +select_except_one = Bir tanesini hariç tutarak, hepsini seçin +select_except_largest = En büyüğü hariç, hepsini seç +select_except_smallest = En küçük olan hariç hepsini seç +select_largest = En büyüğünü seçin +select_smallest = En küçüğü seç +select_except_highest_res = En yüksek çözünürlük hariç, tüm seçenekleri seçin +select_except_lowest_res = En düşük çözünürlük hariç, tümünü seçin +select_highest_res = En yüksek çözünürlüğü seçin +select_lowest_res = En düşük çözünürlüğü seçin +invert_selection = Seçimi Ters Çevir +close = Kapat +# Deselection popup +deselection_popup_title = Seçimi Kaldır +deselect_all = Seçili olanları kaldırın +deselect_except_one = Tümünü seçili olmaktan çıkarın, sadece bir tanesini seçili bırakın +# Confirm popup +cancel = İptal +delete = Sil +rename = Yeniden Adlandır +# Delete errors popup +delete_errors_title = Bazı dosyaların silinmesi sırasında bir hata oluştu: +ok = Tamam +# Stopping overlay +stopping_overlay_title = Duraklama +stopping_overlay_body = + Mevcut tarama işlemi tamamlanıyor... + Lütfen bekleyin. +# Permission popup +permission_title = Dosya Erişimi +permission_body = Dosyaları taramak için, uygulamanın cihazınızın depolama alanına erişmesi gerekmektedir. Bu izne sahip olmadan, tarama işlemi mümkün olmayacaktır. +grant = Hibe +no_permission_scan_warning = Dosya erişimi yok - tarama izni verin +# Settings screen tabs +settings_tab_general = Genel +settings_tab_tools = Araçlar +settings_tab_diagnostics = Bilgi +# Settings - General tab +settings_use_cache = Önbellek Kullan +settings_use_cache_desc = Sonraki taramaları (hash/görseller) hızlandırır +settings_ignore_hidden = Gizli dosyaları yoksay +settings_ignore_hidden_desc = "." ile başlayan dosyalar ve klasörler +settings_show_notification = Tarama işlemi tamamlandığında bildirim gönder +settings_show_notification_desc = Taramayı tamamladığında, sistemde bir bildirim göster +settings_notify_only_background = Sadece arka planda çalışırken +settings_notify_only_background_desc = Uygulama görünürse, bildirimi göstermeyi atlayın +notifications_disabled_banner = Bildirimler devre dışı +notifications_enable_button = Etkinleştir +settings_scan_label = TARA +settings_filters_label = FİLTRELER (bazı araçlar) +settings_min_file_size = Minimum dosya boyutu +settings_max_file_size = Maksimum dosya boyutu +settings_language = Dil +settings_language_restart = Uygulamanın yeniden başlatılması gereklidir +settings_common_label = ORTAK AYARLAR +settings_excluded_items = İSTİSNALAR (küre desenleri, virgülle ayrılmış) +settings_excluded_items_placeholder = Örneğin: *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = İZİN VERİLEN UZANTILAR (boş bırakıldığında = tüm uzantılar) +settings_allowed_extensions_placeholder = Örneğin: jpg, png, mp4 +settings_excluded_extensions = DESTEKLENMEYEN UZANTILAR +settings_excluded_extensions_placeholder = Örneğin: bak, tmp, log +# Settings - Tools section labels +settings_duplicates_header = KOPYALAR +settings_check_method_label = KARŞILAŞTIRMA YÖNTEMİ +settings_check_method = Yöntem +settings_hash_type_label = HASH TİPİ +settings_hash_type = SUÇ türü: +settings_hash_type_desc = Blake3 - önerilen seçenektir, CRC32'nin yanlış pozitif sonuç verme olasılığı daha düşüktür +settings_similar_images_header = BENZER GÖRÜNTÜLER +settings_similarity_preset = Benzerlik eşik değeri +settings_similarity_desc = Çok Yüksek = sadece neredeyse aynı olanlar +settings_hash_size = SURÇ boyutu: +settings_hash_size_desc = Daha büyük boyutlardaki modeller, daha az yanlış pozitif sonuç üretir, ancak aynı zamanda daha az benzer görüntü bulur +settings_hash_alg = Karma algoritması +settings_image_filter = Boyutlandırma filtresi +settings_ignore_same_size = Aynı boyutlara sahip resimleri görmezden gelin +settings_gallery_image_fit_cover = Galeri: Kare formatına getirin +settings_gallery_image_fit_cover_desc = Koyu rengi doldurun; orijinal oranları korumak için bu özelliği devre dışı bırakın +settings_big_files_header = EN BÜYÜK DOSYALAR +settings_search_mode = Arama modu +settings_file_count = Dosya sayısı +settings_same_music_header = MÜZİK YAYINLARI/MÜZİK ÇOĞALTMA HİZMETLERİ +settings_music_check_method = Karşılaştırma modu +settings_music_compare_tags_label = KARŞILAŞTIRMA ETIKETLERİ +settings_music_title = Başlık +settings_music_artist = Sanatçı +settings_music_year = Yıl +settings_music_length = Uzunluk +settings_music_genre = Müzik Türü +settings_music_bitrate = Bit Hızı +settings_music_approx = Yaklaşık etiket karşılaştırması +settings_broken_files_header = BOZULMUŞ DOSYALAR +settings_broken_files_note = Yüksek işlem gücü gerektiren bir tarama. En iyi performansı elde etmek için Krokiet'i masaüstü bilgisayarınızda kullanın. +settings_broken_files_types_label = KONTROL EDİLEN TİPLER +settings_broken_audio = Ses +settings_broken_pdf = PDF +settings_broken_archive = Arşiv +settings_broken_image = Görsel +settings_bad_names_header = KÖTÜ İSİMLER +settings_bad_names_checks_label = ÇEKLER +settings_bad_names_uppercase_ext = BÜYÜK HARF EKLENTİSİ +settings_bad_names_emoji = Emoji'de isim +settings_bad_names_space = Başlangıçta/sonunda boşluklar +settings_bad_names_non_ascii = ASCII olmayan karakterler +settings_bad_names_duplicated = Tekrarlayan karakterler +# Settings - Diagnostics tab +diagnostics_header = TEŞHİS +diagnostics_thumbnails = Küçük resim önbelleği +diagnostics_app_cache = Uygulama önbelleği +diagnostics_refresh = Yenile +diagnostics_clear_thumbnails = Açık ve net önizlemeler +diagnostics_open_thumbnails_folder = Klasörü aç +diagnostics_clear_cache = Önbelleği temizle +diagnostics_open_cache_folder = Klasörü aç +diagnostics_collect_test = Dosya erişim testi +diagnostics_collect_test_desc = Kontrol edin, kaç tane dosyanın erişilebilir olduğunu +diagnostics_collect_test_run = Çalıştır +diagnostics_collect_test_stop = Durdur +collect_test_cancelled = Kullanıcı tarafından durduruldu +diag_confirm_clear_thumbnails = Tüm önizleme önbelleğini temizlemek istiyor musunuz? +diag_confirm_clear_cache = Uygulama önbelleğini temizlemek ister misiniz? +about_repo = Depo +about_translate = Çeviriler +about_donate = Destek +# Collect-test result popup +collect_test_title = Test sonuçları +collect_test_volumes = Ciltler: +collect_test_folders = Klasörler: +collect_test_files = Dosyalar: +collect_test_time = Zaman: +# Licenses +licenses_label = LİSANS +third_party_licenses = Üçüncü taraf lisansları +licenses_popup_title = Üçüncü Taraf Lisansları +# Directories screen +directories_include_header = İçerir +directories_included = Ek olarak +directories_exclude_header = Hariç tutun +directories_excluded_header = Hariç tutulan +directories_add = İçermelidir +no_paths = Yol belirtilmemiş - aşağıdaki gibi ekleyin +directories_volume_header = Ciltler +directories_volume_refresh = Yenile +directories_volume_add = Ekle +# Bottom navigation +nav_home = Başla +nav_dirs = Dizinler +nav_settings = Ayarlar +# Status messages set from Rust +status_ready = Hazır +status_stopped = Durduruldu +status_no_results = Sonuç bulunamadı +status_deleted_selected = Seçilen öğeler silindi +status_deleted_with_errors = Hatalarla birlikte silindi +scan_not_started = Taramaya henüz başlanmadı +found_items_prefix = Bulundu +found_items_suffix = ürünler +deleted_items_prefix = Silindi +deleted_items_suffix = ürünler +deleted_errors_suffix = hatalar +renamed_prefix = Yeniden adlandırıldı +renamed_files_suffix = dosyalar +renamed_errors_suffix = hatalar +cleaned_exif_prefix = EXIF verilerinden arındırıldı +cleaned_exif_suffix = dosyalar +cleaned_exif_errors_suffix = Hatalar +and_more_prefix = ...ve +and_more_suffix = daha fazla +# Gallery / delete popups +gallery_delete_button = Sil +gallery_back = Geri +gallery_confirm_delete = Evet, sil +deleting_files = Dosyalar siliniyor... +stop = Durdur +files_suffix = dosyalar +scanning_fallback = Taramaya başlanıyor... +app_subtitle = 972 yılında gerçekleşen Cedynia Savaşı'nın anısına +app_license = Czkawka Core için ön yüz - GPL-3.0 +about_app_label = HAKKINDA +cache_label = ÖNBELLEK +# Notification +scan_completed_notification = Tarama tamamlandı - { $file_count } adet öğe bulundu +# Confirm popups (set from Rust) +confirm_clean_exif = { $n } seçili dosyadan EXIF etiketlerini silmek istediğinizden emin misiniz? +confirm_delete_items = Seçili { $n } öğeyi silmek istediğinizden emin misiniz? +gallery_confirm_delete_msg = Şu anda { $total_groups } grup içinde toplam { $total_images } fotoğrafı sileceksiniz. +gallery_confirm_delete_warning = Tüm öğeler, { $unsafe_groups } gruplarından seçildi! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = Ses parmak izlerini hesaplamak ve karşılaştırmak çok fazla kaynak gerektirir ve uzun sürebilir. Bu işlem için Krokiet'in masaüstü bir sistemde kullanılması önerilir. +# Scan stage labels (shown during scan progress) +stage_collecting_files = Dosyaları toplama işlemi +stage_scanning_name = İsimle tarama +stage_scanning_size_name = İsim ve boyuta göre tarama +stage_scanning_size = Boyuta göre tarama +stage_pre_hash = Önceden karma işlemi +stage_full_hash = Karma Alma (veya Karma Fonksiyonları) +stage_loading_cache = Önbellek yükleniyor +stage_saving_cache = Önbellek kaydediliyor +stage_calculating_image_hashes = Görüntü karmalarının hesaplanması +stage_comparing_images = Resimleri karşılaştırma +stage_calculating_video_hashes = Video dosyalarının hash değerlerini hesaplama +stage_checking_files = Dosyaları kontrol ediliyor +stage_checking_extensions = Uzantıların kontrolü +stage_checking_names = İsimlerin kontrol edilmesi +stage_reading_music_tags = Müzik etiketlerini okuma +stage_comparing_tags = Etiketleri karşılaştırma +stage_calculating_music_fingerprints = Müzik parmak izlerini hesaplama +stage_comparing_fingerprints = Parmak izlerini karşılaştırma +stage_extracting_exif = EXIF etiketlerini okuma +stage_creating_video_thumbnails = Video önizleme resimleri oluşturma +stage_processing_videos = Videolar işleniyor +stage_deleting = Dosyaları silme +stage_renaming = Dosya isimlerini değiştirme +stage_moving = Öğeleri Taşı +stage_hardlinking = Sabit bağlantılar oluşturma +stage_symlinking = Sembolik bağlantılar oluşturma +stage_optimizing_videos = Videoları optimize etme +stage_cleaning_exif = EXIF verilerini temizleme +# Group headers in scan results +duplicates_group_header = { $count } dosya x { $per_file } / dosya = { $total } toplam +similar_images_group_header = { $count } benzer resim +same_music_group_header = { $count } benzer şarkı +# Rename confirmation +confirm_rename_items = Seçili olan { $n } dosyayı yeniden adlandırmak istediğinizden emin misiniz? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = En büyük +option_search_mode_smallest = En küçük +option_similarity_very_high = Çok Yüksek +option_similarity_high = Yüksek +option_similarity_medium = Orta +option_similarity_low = Düşük +option_similarity_very_low = Çok Düşük +option_similarity_minimal = Dakika. +option_check_method_hash = Karma +option_check_method_name = Ad Karşılaştırma +option_check_method_size_and_name = Beden+İsim +option_check_method_size = Boyut +option_music_method_tags = Etiketler +option_music_method_audio = Ses +option_min_size_none = Çevrilecek metin bulunmamaktadır +option_min_size_1kb = 1 KB +option_min_size_8kb = 8 KB +option_min_size_64kb = 64 KB +option_min_size_1mb = 1 MB +option_max_size_16kb = 16 KB +option_max_size_1mb = 1 MB +option_max_size_10mb = 10 MB +option_max_size_100mb = 100 MB +option_max_size_unlimited = Sınırsız +# Volume labels (shown in the directories screen) +volume_internal_storage = İç Depolama Alanı +volume_sd_card = Bellek Kartı (SD Kart) +volume_storage = Depolama Kapasitesi +# Directories screen +directories_referenced_tooltip = Referans alınmış (silinmemiş) +directories_include_section_header = DAHİL +directories_exclude_section_header = HARİÇ TUTULMUŞ +directories_custom_paths = Özel Yollar +directories_check_button = Analiz et +directories_check_popup_title = Dizin İstatistikleri +directories_check_label_included = İçerilen yollar: +directories_check_label_excluded = Hariç tutulan yollar: +directories_check_label_referenced = Referans yolları: +directories_check_label_would_scan = Taranacak dosyalar: +directories_check_label_processable = İşlenebilen dosyalar: +directories_check_scanning = Tarama yapılıyor... +directories_check_warning_no_processable = İşlenebilir dosya bulunamadı - dahil edilen/hariç tutulan klasörlerinizi kontrol edin +path_edit_title_include = Ekle (içermesi için) +path_edit_title_exclude = Hariç Tutulacaklar Listesine Ekle +path_edit_placeholder = Yol belirtin... +path_edit_not_exists = Yol bulunamadı +path_edit_is_dir = Dizin +path_edit_is_file = Dosya +path_edit_no_newlines = Yollar yeni satır karakterleri içermemelidir — Enter tuşunun kullanılmasına izin verilmez +ctx_menu_title = Açık +ctx_open_file = Açık işlem +ctx_open_folder = Üst klasörü aç diff --git a/cedinia/i18n/uk/cedinia.ftl b/cedinia/i18n/uk/cedinia.ftl new file mode 100644 index 000000000..3273ca572 --- /dev/null +++ b/cedinia/i18n/uk/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = Дублює +tool_empty_folders = Порожні теки +tool_similar_images = Схожі зображення +tool_empty_files = Порожні файли +tool_temporary_files = Тимчасові файли +tool_big_files = Найбільші файли +tool_broken_files = Пошкоджені файли +tool_bad_extensions = Помилкові розширення +tool_same_music = Музичні дублікати +tool_bad_names = Помилкові імена +tool_exif_remover = Дані EXIF +tool_directories = Каталоги +tool_settings = Налаштування +# Home screen tool card descriptions +home_dup_description = Знайти файли з тим самим вмістом +home_empty_folders_description = Каталоги без вмісту +home_similar_images_description = Пошук візуально схожих фотографій +home_empty_files_description = Файли з нульовим розміром +home_temp_files_description = Тимчасові і кешовані файли +home_big_files_description = Найгірші файли на диску +home_broken_files_description = PDF, аудіо та зображення, архіви +home_bad_extensions_description = Файли з неправильним розширенням +home_same_music_description = Схожі аудіо файли за тегами +home_bad_names_description = Файли з логічними символами в імені +home_exif_description = Зображення з EXIF метаданими +# Results list +scanning = Виконується сканування... +stopping = Зупинення... +no_results = Немає результатів +press_start = Натисніть СТАРТ для сканування +select_label = Від. +deselect_label = Desel. +list_label = Список +gallery_label = Галь. +# Selection popup +selection_popup_title = Вибрати +select_all = Виділити все +select_except_one = Вибрати всі крім однієї +select_except_largest = Виділити всі, крім найбільшого +select_except_smallest = Вибрати всі крім найменших +select_largest = Виберіть найбільший +select_smallest = Виберіть найменший +select_except_highest_res = Вибрати всі крім найвищої роздільної здатності +select_except_lowest_res = Вибрати всі крім найнижчої роздільної здатності +select_highest_res = Виберіть найкращу роздільну здатність +select_lowest_res = Виберіть найнижчу роздільну здатність +invert_selection = Інвертувати виділення +close = Закрити +# Deselection popup +deselection_popup_title = Зняти виділення +deselect_all = Зняти всі виділення +deselect_except_one = Зняти виділення з усього крім одного +# Confirm popup +cancel = Скасувати +delete = Видалити +rename = Перейменувати +# Delete errors popup +delete_errors_title = Не вдалося видалити деякі файли: +ok = Гаразд +# Stopping overlay +stopping_overlay_title = Зупиняю +stopping_overlay_body = + Завершення поточного сканування... + Будь ласка, зачекайте. +# Permission popup +permission_title = Доступ до файлу +permission_body = Для сканування файлів потрібен доступ до пам'яті пристрою. Без цього дозволу сканування буде неможливим. +grant = Грант +no_permission_scan_warning = Немає доступу до файлу - надайте дозвіл для сканування +# Settings screen tabs +settings_tab_general = Загальні налаштування +settings_tab_tools = Інструменти +settings_tab_diagnostics = Інформація +# Settings - General tab +settings_use_cache = Використання кешу +settings_use_cache_desc = Прискорює наступні скани (хеш/зображення) +settings_ignore_hidden = Ігнорувати приховані файли +settings_ignore_hidden_desc = Файли та теки починаються з '.' +settings_show_notification = Сповіщати при завершенні сканування +settings_show_notification_desc = Показувати системні сповіщення при завершенні сканування +settings_notify_only_background = Тільки коли у фоновому режимі +settings_notify_only_background_desc = Пропустити сповіщення, якщо програма видима +notifications_disabled_banner = Сповіщення вимкнено +notifications_enable_button = Увімкнено +settings_scan_label = СКАНУВАТИ +settings_filters_label = FILTERS (деякі інструменти) +settings_min_file_size = Мінімальний розмір файлу +settings_max_file_size = Макс. розмір файлу +settings_language = Мова: +settings_language_restart = Потрібно перезапустити програму +settings_common_label = ЗАГАЛЬНІ НАЛАШТУВАННЯ +settings_excluded_items = ЕКСКЛАДЕНІ РЕЧІ (glob шаблони, кома розділені) +settings_excluded_items_placeholder = напр. *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = ДОЗВОЛЕНІ ДОЗВОЛЕННЯ (порожнє = всі) +settings_allowed_extensions_placeholder = напр. jpg, png, mp4 +settings_excluded_extensions = РОЗШИРЕНІ ДОДАТКОВІ ЗАПИСИ +settings_excluded_extensions_placeholder = напр. bak, tmp, log +# Settings - Tools section labels +settings_duplicates_header = ВИМКНУТИ +settings_check_method_label = КОМЕЙНИЙ СПАРИЖ +settings_check_method = Метод +settings_hash_type_label = ТИП ГОЛОВУ +settings_hash_type = Тип хешу +settings_hash_type_desc = Blake3 - рекомендована опція, CRC32 має невеликий шанс помилкових додатніх +settings_similar_images_header = ЗОБРАЖЕННЯ SIM +settings_similarity_preset = Поріг подібності +settings_similarity_desc = Дуже висока = тільки майже ідентична +settings_hash_size = Розмір хешу +settings_hash_size_desc = Великі розміри мають менше помилкових додатніх, але також менш схожі зображення +settings_hash_alg = Алгоритм хеша +settings_image_filter = Змінити розмір фільтру +settings_ignore_same_size = Ігнорувати зображення з такими ж розмірами +settings_gallery_image_fit_cover = Галерея: обрізати в квадрат +settings_gallery_image_fit_cover_desc = Заповніть плитку; вимкнути щоб зберегти оригінальне співвідношення сторін +settings_big_files_header = СВІТЛОВІ ФАЙЛИ +settings_search_mode = Режим пошуку +settings_file_count = Кількість файлів +settings_same_music_header = ОПИС МУЗИКУ +settings_music_check_method = Режим порівняння +settings_music_compare_tags_label = ПОЗНАЧЕНІ ТАГИ (ДЛЯ ПОРІВНЯННЯ) +settings_music_title = Найменування +settings_music_artist = Художник +settings_music_year = Рік +settings_music_length = Довжина +settings_music_genre = Жанр +settings_music_bitrate = Бітрейт +settings_music_approx = Приблизне порівняння тегів +settings_broken_files_header = АКТИВНІ ФАЙЛИ +settings_broken_files_note = Відстеження ресурсів. Для кращої продуктивності використовуйте Krokiet на робочому столі. +settings_broken_files_types_label = РЕЄСТРАЦІЯ +settings_broken_audio = Аудіо +settings_broken_pdf = Файл pdf +settings_broken_archive = Архів +settings_broken_image = Зображення +settings_bad_names_header = НАЗВА БАД +settings_bad_names_checks_label = ПЕРЕВІРИТИ +settings_bad_names_uppercase_ext = Верхнє розширення +settings_bad_names_emoji = Назва емодзі +settings_bad_names_space = Пробіли на початку/кінці +settings_bad_names_non_ascii = Не-ASCII символи +settings_bad_names_duplicated = Символи, що повторюються +# Settings - Diagnostics tab +diagnostics_header = ДІАГНОСТИКА +diagnostics_thumbnails = Кеш мініатюр +diagnostics_app_cache = Кеш додатків +diagnostics_refresh = Оновити +diagnostics_clear_thumbnails = Очистити мініатюри +diagnostics_open_thumbnails_folder = Відкрити папку +diagnostics_clear_cache = Очистити кеш +diagnostics_open_cache_folder = Відкрити папку +diagnostics_collect_test = Тестування доступу до файлу +diagnostics_collect_test_desc = Перевірте кількість доступних файлів +diagnostics_collect_test_run = Ран +diagnostics_collect_test_stop = Зупинити +collect_test_cancelled = Зупинено користувачем +diag_confirm_clear_thumbnails = Очистити кеш мініатюр ? +diag_confirm_clear_cache = Очистити кеш усіх застосунків? +about_repo = Репозиторій +about_translate = Переклади +about_donate = Підтримка +# Collect-test result popup +collect_test_title = Результати тестування +collect_test_volumes = Гучність: +collect_test_folders = Теки: +collect_test_files = Файли: +collect_test_time = Час: +# Licenses +licenses_label = ЛІЦЕНЗІЯ +third_party_licenses = Сторонні ліцензії +licenses_popup_title = Сторонні ліцензії +# Directories screen +directories_include_header = Включити +directories_included = Включено +directories_exclude_header = Не включати +directories_excluded_header = Виключені +directories_add = Включити +no_paths = Відсутні шляхи - додайте нижче +directories_volume_header = Томи +directories_volume_refresh = Оновити +directories_volume_add = Додати +# Bottom navigation +nav_home = Старт +nav_dirs = Каталоги +nav_settings = Налаштування +# Status messages set from Rust +status_ready = Готовий +status_stopped = Зупинено +status_no_results = Немає результатів +status_deleted_selected = Видалено +status_deleted_with_errors = Видалено з помилками +scan_not_started = Сканування не почалося +found_items_prefix = Знайдено +found_items_suffix = елементи +deleted_items_prefix = Видалено +deleted_items_suffix = елементи +deleted_errors_suffix = помилки +renamed_prefix = Перейменовано +renamed_files_suffix = файлів +renamed_errors_suffix = помилки +cleaned_exif_prefix = Очищено EXIF від +cleaned_exif_suffix = файлів +cleaned_exif_errors_suffix = помилки +and_more_prefix = ... і +and_more_suffix = більше +# Gallery / delete popups +gallery_delete_button = Видалити +gallery_back = Відмінити +gallery_confirm_delete = Так, видалити +deleting_files = Видалення файлів... +stop = Зупинити +files_suffix = файлів +scanning_fallback = Сканування... +app_subtitle = Пошанування битви в Сединії (972 р.) +app_license = Інтерфейс для Czkawka Core - GPL-3.0 +about_app_label = Про +cache_label = КЕШ +# Notification +scan_completed_notification = Сканування завершено - { $file_count } знайдено елементів +# Confirm popups (set from Rust) +confirm_clean_exif = Ви дійсно хочете очистити EXIF мітки { $n } вибраних файлів? +confirm_delete_items = Ви впевнені, що хочете видалити { $n } виділених елементів? +gallery_confirm_delete_msg = Ви збираєтесь видалити { $total_images } зображень у { $total_groups } групі. +gallery_confirm_delete_warning = Всі елементи обрані в { $unsafe_groups } групи! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = Обчислення та порівняння аудіо-відбитків є дуже ресурсоємними і може зайняти тривалий час. Рекомендується використовувати Krokiet на настільному комп'ютері для цього завдання. +# Scan stage labels (shown during scan progress) +stage_collecting_files = Збирання файлів +stage_scanning_name = Сканування по імені +stage_scanning_size_name = Сканування по імені та розміру +stage_scanning_size = Сканування за розміром +stage_pre_hash = Попереднє хешування +stage_full_hash = Хеш +stage_loading_cache = Завантаження кешу +stage_saving_cache = Збереження кешу +stage_calculating_image_hashes = Обчислення хешів зображення +stage_comparing_images = Порівняння зображень +stage_calculating_video_hashes = Обчислення хешів відео +stage_checking_files = Перевірка файлів +stage_checking_extensions = Перевірка розширень +stage_checking_names = Перевірка імен +stage_reading_music_tags = Читання музичних тегів +stage_comparing_tags = Порівняння міток +stage_calculating_music_fingerprints = Обчислення відбитків музики +stage_comparing_fingerprints = Порівняння відбитків +stage_extracting_exif = Читання EXIF тегів +stage_creating_video_thumbnails = Створення мініатюр відео +stage_processing_videos = Обробка відео +stage_deleting = Видалення файлів +stage_renaming = Перейменування файлів +stage_moving = Переміщення файлів +stage_hardlinking = Створення жорстких посилань +stage_symlinking = Створення символічних посилань +stage_optimizing_videos = Оптимізація відео +stage_cleaning_exif = Очищення EXIF +# Group headers in scan results +duplicates_group_header = { $count } файлів x { $per_file } / файл = { $total } всього +similar_images_group_header = { $count } схожих зображень +same_music_group_header = { $count } схожих маршрутів +# Rename confirmation +confirm_rename_items = Ви впевнені, що хочете перейменувати { $n } вибраних файлів? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = Найбільший +option_search_mode_smallest = Найменший +option_similarity_very_high = Вертикальний +option_similarity_high = Високий +option_similarity_medium = Медіум +option_similarity_low = Низька +option_similarity_very_low = В.Низька +option_similarity_minimal = Мін. +option_check_method_hash = Хеш +option_check_method_name = Ім'я +option_check_method_size_and_name = Розмір+Ім'я +option_check_method_size = Розмір +option_music_method_tags = Мітки +option_music_method_audio = Аудіо +option_min_size_none = Без ефекту +option_min_size_1kb = 1 КБ +option_min_size_8kb = 8 Кб +option_min_size_64kb = 64 КБ +option_min_size_1mb = 1 Мб +option_max_size_16kb = 16 Кб +option_max_size_1mb = 1 Мб +option_max_size_10mb = 10 Мб +option_max_size_100mb = 100 МБ +option_max_size_unlimited = Необмежено +# Volume labels (shown in the directories screen) +volume_internal_storage = Внутрішня пам’ять +volume_sd_card = Карта пам'яті (SD карта) +volume_storage = Гучність сховища +# Directories screen +directories_referenced_tooltip = Посилання (не видалено) +directories_include_section_header = ВКЛЮЧЕНО +directories_exclude_section_header = ЗАКЛЮЧЕНО +directories_custom_paths = Користувацькі шляхи +directories_check_button = Аналізувати +directories_check_popup_title = Статистика каталогів +directories_check_label_included = Включені шляхи: +directories_check_label_excluded = Виключені шляхи: +directories_check_label_referenced = Шлях до посилання: +directories_check_label_would_scan = Файлів для сканування: +directories_check_label_processable = Файли для обробки: +directories_check_scanning = Сканування... +directories_check_warning_no_processable = Не знайдено жодного файлу, що обробляється - перевірте ваші включені/виключені теки +path_edit_title_include = Додати до включення +path_edit_title_exclude = Додати до виключення +path_edit_placeholder = Введіть шлях... +path_edit_not_exists = Шлях не існує +path_edit_is_dir = Каталог +path_edit_is_file = Файл +path_edit_no_newlines = Шляхи не можуть містити нових рядків — Enter не дозволено +ctx_menu_title = Відкриті +ctx_open_file = Відкрити елемент +ctx_open_folder = Відкрити батьківську теку diff --git a/cedinia/i18n/vi/cedinia.ftl b/cedinia/i18n/vi/cedinia.ftl new file mode 100644 index 000000000..e18973af3 --- /dev/null +++ b/cedinia/i18n/vi/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = Các bản sao +tool_empty_folders = Thư mục trống +tool_similar_images = Hình ảnh tương tự +tool_empty_files = Các tệp trống +tool_temporary_files = Các tệp tạm +tool_big_files = Các tệp lớn nhất +tool_broken_files = Tệp tin bị lỗi +tool_bad_extensions = Các tiện ích mở rộng kém chất lượng +tool_same_music = Bản sao nhạc +tool_bad_names = Tên nghe tệ +tool_exif_remover = Dữ liệu EXIF +tool_directories = Thư mục +tool_settings = Cài đặt +# Home screen tool card descriptions +home_dup_description = Tìm các tệp có nội dung giống nhau +home_empty_folders_description = Các thư mục không có nội dung +home_similar_images_description = Tìm các ảnh có hình ảnh tương tự +home_empty_files_description = Các tệp có kích thước bằng không +home_temp_files_description = Các tệp tạm thời và tệp được lưu trong bộ nhớ đệm +home_big_files_description = Các tệp lớn nhất/nhỏ nhất trên ổ đĩa +home_broken_files_description = PDF, âm thanh, hình ảnh, các tệp lưu trữ +home_bad_extensions_description = Các tệp có phần mở rộng không hợp lệ +home_same_music_description = Các tệp âm thanh tương tự theo thẻ +home_bad_names_description = Các tệp có chứa các ký tự không hợp lệ trong tên +home_exif_description = Hình ảnh có siêu dữ liệu EXIF +# Results list +scanning = Đang quét... +stopping = Đang dừng... +no_results = Không có kết quả +press_start = Nhấn nút BẮT ĐẦU để quét +select_label = Chọn. +deselect_label = Desel. +list_label = Danh sách +gallery_label = Ga-la. +# Selection popup +selection_popup_title = Chọn +select_all = Chọn tất cả +select_except_one = Chọn tất cả trừ một +select_except_largest = Chọn tất cả các mục trừ mục lớn nhất +select_except_smallest = Chọn tất cả trừ phần nhỏ nhất +select_largest = Chọn phần lớn nhất +select_smallest = Chọn phần nhỏ nhất +select_except_highest_res = Chọn tất cả các tùy chọn, ngoại trừ độ phân giải cao nhất +select_except_lowest_res = Chọn tất cả các tùy chọn, trừ độ phân giải thấp nhất +select_highest_res = Chọn độ phân giải cao nhất +select_lowest_res = Chọn độ phân giải thấp nhất +invert_selection = Đảo ngược lựa chọn +close = Đóng +# Deselection popup +deselection_popup_title = Bỏ chọn +deselect_all = Bỏ chọn tất cả +deselect_except_one = Bỏ chọn tất cả, chỉ giữ lại một +# Confirm popup +cancel = Hủy bỏ +delete = Xóa +rename = Đổi tên +# Delete errors popup +delete_errors_title = Không thể xóa một số tập tin: +ok = Được +# Stopping overlay +stopping_overlay_title = Dừng lại +stopping_overlay_body = + Đang hoàn thành quá trình quét hiện tại... + Vui lòng chờ. +# Permission popup +permission_title = Truy cập tệp +permission_body = Để ứng dụng có thể quét các tệp, ứng dụng cần quyền truy cập vào bộ nhớ của thiết bị. Nếu không có quyền này, việc quét sẽ không thể thực hiện được. +grant = Trao tặng +no_permission_scan_warning = Không thể truy cập tệp - vui lòng cấp quyền để quét +# Settings screen tabs +settings_tab_general = Tổng quan +settings_tab_tools = Công cụ +settings_tab_diagnostics = Thông tin +# Settings - General tab +settings_use_cache = Sử dụng bộ nhớ đệm +settings_use_cache_desc = Tăng tốc độ quét sau (băm/hình ảnh) +settings_ignore_hidden = Bỏ qua các tệp ẩn +settings_ignore_hidden_desc = Các tệp và thư mục bắt đầu bằng dấu '.' +settings_show_notification = Thông báo khi quá trình quét hoàn tất +settings_show_notification_desc = Hiển thị thông báo hệ thống khi quá trình quét hoàn tất +settings_notify_only_background = Chỉ khi đang chạy ngầm +settings_notify_only_background_desc = Bỏ qua thông báo nếu ứng dụng đang hiển thị +notifications_disabled_banner = Thông báo đã bị tắt +notifications_enable_button = Bật +settings_scan_label = QUÉT +settings_filters_label = LỌC (một số công cụ) +settings_min_file_size = Kích thước tệp tối thiểu +settings_max_file_size = Kích thước tệp tối đa +settings_language = Ngôn ngữ +settings_language_restart = Yêu cầu khởi động lại ứng dụng +settings_common_label = CÁC CÀI ĐẶT CHUNG +settings_excluded_items = CÁC MỤC ĐƯỢC LOẠI TRỪ (mẫu toàn cục, phân tách bằng dấu phẩy) +settings_excluded_items_placeholder = Ví dụ: *.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = CÁC ĐỊNH DẠNG TỆP ĐƯỢC PHÉP (để trống = tất cả) +settings_allowed_extensions_placeholder = Ví dụ: jpg, png, mp4 +settings_excluded_extensions = CÁC TIỆN ÍCH KHÔNG ĐƯỢC HỖ TRỢ +settings_excluded_extensions_placeholder = Ví dụ: bak, tmp, log +# Settings - Tools section labels +settings_duplicates_header = BẢN SAO CHÉ +settings_check_method_label = PHƯƠNG PHÁP SO SÁNH +settings_check_method = Phương pháp +settings_hash_type_label = LOẠI MÃ HÓA +settings_hash_type = Loại hàm băm +settings_hash_type_desc = Blake3 - là lựa chọn được khuyến nghị, trong khi CRC32 có khả năng tạo ra kết quả dương tính giả +settings_similar_images_header = CÁC HÌNH ẢNH TƯƠNG TỰ +settings_similarity_preset = Ngưỡng tương đồng +settings_similarity_desc = Rất cao = chỉ gần giống hệt +settings_hash_size = Kích thước hàm băm +settings_hash_size_desc = Các kích thước lớn hơn có xu hướng tạo ra ít kết quả dương tính giả hơn, nhưng đồng thời cũng tìm thấy ít hình ảnh tương tự hơn +settings_hash_alg = Thuật toán băm +settings_image_filter = Điều chỉnh kích thước bộ lọc +settings_ignore_same_size = Bỏ qua các hình ảnh có cùng kích thước +settings_gallery_image_fit_cover = Thư viện ảnh: Cắt ảnh thành hình vuông +settings_gallery_image_fit_cover_desc = Điền đầy ô; tắt tùy chọn để giữ nguyên tỷ lệ khung hình gốc +settings_big_files_header = TỆP LỚN NHẤT +settings_search_mode = Chế độ tìm kiếm +settings_file_count = Số lượng file +settings_same_music_header = BẢN SAO NHẠC +settings_music_check_method = Chế độ so sánh +settings_music_compare_tags_label = NHỮNG THẺ SO SÁNH +settings_music_title = Tiêu đề +settings_music_artist = Nghệ sĩ +settings_music_year = Năm +settings_music_length = Độ dài +settings_music_genre = Thể loại +settings_music_bitrate = Bitrate +settings_music_approx = So sánh thẻ (ước tính) +settings_broken_files_header = TỆP BỊ HƯ HỎNG +settings_broken_files_note = Quá trình quét này đòi hỏi nhiều tài nguyên. Để đạt hiệu suất tốt nhất, hãy sử dụng Krokiet trên máy tính để bàn. +settings_broken_files_types_label = LOẠI ĐÃ KIỂM TRA +settings_broken_audio = Âm thanh +settings_broken_pdf = PDF +settings_broken_archive = Lưu trữ +settings_broken_image = Hình ảnh +settings_bad_names_header = TÊN XẤU +settings_bad_names_checks_label = KIỂM TRA +settings_bad_names_uppercase_ext = Ký hiệu mở rộng viết hoa +settings_bad_names_emoji = Biểu tượng cảm xúc trong tên +settings_bad_names_space = Các khoảng trắng ở đầu/cuối +settings_bad_names_non_ascii = Ký tự không thuộc bảng ASCII +settings_bad_names_duplicated = Ký tự lặp lại +# Settings - Diagnostics tab +diagnostics_header = CHẨN ĐOÁN +diagnostics_thumbnails = Bộ nhớ đệm ảnh thu nhỏ +diagnostics_app_cache = Bộ nhớ đệm của ứng dụng +diagnostics_refresh = Tươi mới +diagnostics_clear_thumbnails = Hình thu nhỏ rõ ràng +diagnostics_open_thumbnails_folder = Mở thư mục +diagnostics_clear_cache = Xóa bộ nhớ cache +diagnostics_open_cache_folder = Mở thư mục +diagnostics_collect_test = Kiểm tra quyền truy cập tệp +diagnostics_collect_test_desc = Kiểm tra xem có bao nhiêu tệp có thể truy cập được +diagnostics_collect_test_run = Chạy +diagnostics_collect_test_stop = Dừng lại +collect_test_cancelled = Đã bị người dùng chặn +diag_confirm_clear_thumbnails = Xóa toàn bộ bộ nhớ đệm hình thu nhỏ? +diag_confirm_clear_cache = Xóa toàn bộ bộ nhớ cache của ứng dụng? +about_repo = Kho lưu trữ +about_translate = Dịch thuật +about_donate = Hỗ trợ +# Collect-test result popup +collect_test_title = Kết quả kiểm tra +collect_test_volumes = Số lượng: +collect_test_folders = Thư mục: +collect_test_files = Tệp: +collect_test_time = Thời gian: +# Licenses +licenses_label = GIẤY PHÉP SỬ DỤNG +third_party_licenses = Giấy phép của bên thứ ba +licenses_popup_title = Giấy phép của bên thứ ba +# Directories screen +directories_include_header = Bao gồm +directories_included = Đã bao gồm +directories_exclude_header = Loại trừ +directories_excluded_header = Loại trừ +directories_add = Bao gồm +no_paths = Không có đường dẫn - thêm vào phần dưới đây +directories_volume_header = Số lượng +directories_volume_refresh = Làm mới +directories_volume_add = Thêm +# Bottom navigation +nav_home = Bắt đầu +nav_dirs = Thư mục +nav_settings = Cài đặt +# Status messages set from Rust +status_ready = Sẵn sàng +status_stopped = Đã dừng +status_no_results = Không có kết quả +status_deleted_selected = Đã xóa mục đã chọn +status_deleted_with_errors = Đã xóa, có lỗi +scan_not_started = Quá trình quét chưa bắt đầu +found_items_prefix = Đã tìm thấy +found_items_suffix = các mục +deleted_items_prefix = Đã xóa +deleted_items_suffix = các mục +deleted_errors_suffix = lỗi +renamed_prefix = Đã đổi tên +renamed_files_suffix = các tệp +renamed_errors_suffix = lỗi +cleaned_exif_prefix = Đã loại bỏ thông tin EXIF từ +cleaned_exif_suffix = các tệp +cleaned_exif_errors_suffix = lỗi +and_more_prefix = ...và +and_more_suffix = thêm nữa +# Gallery / delete popups +gallery_delete_button = Xóa +gallery_back = Quay lại +gallery_confirm_delete = Vâng, xóa +deleting_files = Đang xóa các tệp... +stop = Dừng lại +files_suffix = các tệp +scanning_fallback = Đang quét... +app_subtitle = Để tưởng nhớ trận chiến Cedynia (năm 972 CN) +app_license = Giao diện người dùng cho Czkawka Core - Giấy phép GPL-3.0 +about_app_label = VỀ +cache_label = BỘ NHỚ ĐỆM +# Notification +scan_completed_notification = Quá trình quét đã hoàn tất - Tìm thấy { $file_count } mục +# Confirm popups (set from Rust) +confirm_clean_exif = Bạn có chắc chắn muốn xóa các thẻ EXIF khỏi { $n } tập tin đã chọn không? +confirm_delete_items = Bạn có chắc chắn muốn xóa { $n } mục đã chọn không? +gallery_confirm_delete_msg = Bạn sắp xóa { $total_images } ảnh trong { $total_groups } nhóm. +gallery_confirm_delete_warning = Tất cả các mục đã được chọn trong { $unsafe_groups } nhóm! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = Việc tính toán và so sánh dấu vân âm thanh đòi hỏi rất nhiều tài nguyên và có thể mất nhiều thời gian. Chúng tôi khuyến nghị nên sử dụng Krokiet trên một hệ thống máy tính để bàn để thực hiện tác vụ này. +# Scan stage labels (shown during scan progress) +stage_collecting_files = Đang thu thập các tệp +stage_scanning_name = Quét theo tên +stage_scanning_size_name = Quét theo tên và kích thước +stage_scanning_size = Quét theo kích thước +stage_pre_hash = Tiền xử lý băm +stage_full_hash = Mã hóa hàm +stage_loading_cache = Đang tải bộ nhớ đệm +stage_saving_cache = Lưu bộ nhớ đệm +stage_calculating_image_hashes = Tính toán giá trị băm của ảnh +stage_comparing_images = So sánh hình ảnh +stage_calculating_video_hashes = Tính toán giá trị băm của video +stage_checking_files = Đang kiểm tra các tệp +stage_checking_extensions = Đang kiểm tra các tiện ích mở rộng +stage_checking_names = Kiểm tra tên +stage_reading_music_tags = Đọc thông tin thẻ nhạc +stage_comparing_tags = So sánh các thẻ +stage_calculating_music_fingerprints = Tính toán dấu vân tay âm nhạc +stage_comparing_fingerprints = So sánh dấu vân tay +stage_extracting_exif = Đọc các thẻ EXIF +stage_creating_video_thumbnails = Tạo hình thu nhỏ cho video +stage_processing_videos = Đang xử lý video +stage_deleting = Xóa các tệp +stage_renaming = Đổi tên tệp +stage_moving = Di chuyển các tập tin +stage_hardlinking = Tạo liên kết cứng +stage_symlinking = Tạo liên kết tượng trưng +stage_optimizing_videos = Tối ưu hóa video +stage_cleaning_exif = Loại bỏ thông tin EXIF +# Group headers in scan results +duplicates_group_header = { $count } tệp tin x { $per_file } / tệp tin = { $total } tổng cộng +similar_images_group_header = { $count } hình ảnh tương tự +same_music_group_header = { $count } bản nhạc tương tự +# Rename confirmation +confirm_rename_items = Bạn có chắc chắn muốn đổi tên { $n } tệp đã chọn không? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = Lớn nhất +option_search_mode_smallest = Nhỏ nhất +option_similarity_very_high = V. Cực cao +option_similarity_high = Cao +option_similarity_medium = Trung bình +option_similarity_low = Thấp +option_similarity_very_low = Rất thấp +option_similarity_minimal = Tối thiểu. +option_check_method_hash = Mã băm +option_check_method_name = Tên +option_check_method_size_and_name = Kích thước + Tên +option_check_method_size = Kích thước +option_music_method_tags = Các thẻ +option_music_method_audio = Âm thanh +option_min_size_none = Không có +option_min_size_1kb = 1 KB +option_min_size_8kb = 8 KB +option_min_size_64kb = 64 KB +option_min_size_1mb = 1 MB +option_max_size_16kb = 16 KB +option_max_size_1mb = 1 MB +option_max_size_10mb = 10 MB +option_max_size_100mb = 100 MB +option_max_size_unlimited = Không giới hạn +# Volume labels (shown in the directories screen) +volume_internal_storage = Bộ nhớ trong +volume_sd_card = Thẻ nhớ (thẻ SD) +volume_storage = Dung lượng lưu trữ +# Directories screen +directories_referenced_tooltip = Đã tham chiếu (chưa bị xóa) +directories_include_section_header = ĐÃ BAO GỒM +directories_exclude_section_header = LOẠI TRỪ +directories_custom_paths = Đường dẫn tùy chỉnh +directories_check_button = Phân tích +directories_check_popup_title = Thống kê thư mục +directories_check_label_included = Các đường dẫn được bao gồm: +directories_check_label_excluded = Các đường dẫn bị loại trừ: +directories_check_label_referenced = Đường dẫn tham khảo: +directories_check_label_would_scan = Các tệp cần quét: +directories_check_label_processable = Các loại tệp có thể xử lý: +directories_check_scanning = Đang quét... +directories_check_warning_no_processable = Không tìm thấy tệp nào có thể xử lý - hãy kiểm tra lại các thư mục đã được bao gồm/loại trừ +path_edit_title_include = Thêm vào để bao gồm +path_edit_title_exclude = Thêm vào danh sách loại trừ +path_edit_placeholder = Nhập đường dẫn... +path_edit_not_exists = Đường dẫn không tồn tại +path_edit_is_dir = Thư mục +path_edit_is_file = Tệp +path_edit_no_newlines = Đường dẫn không được chứa ký tự xuống dòng — Không được sử dụng phím Enter +ctx_menu_title = Mở +ctx_open_file = Mục đang mở +ctx_open_folder = Mở thư mục cha diff --git a/cedinia/i18n/zh-CN/cedinia.ftl b/cedinia/i18n/zh-CN/cedinia.ftl new file mode 100644 index 000000000..fc884274c --- /dev/null +++ b/cedinia/i18n/zh-CN/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = 重复项 +tool_empty_folders = 空文件夹 +tool_similar_images = 相似图像 +tool_empty_files = 空文件 +tool_temporary_files = 临时文件 +tool_big_files = 最大的文件 +tool_broken_files = 损坏的文件 +tool_bad_extensions = 错误的扩展 +tool_same_music = 重复音乐 +tool_bad_names = 名称错误 +tool_exif_remover = EXIF 数据 +tool_directories = 目录 +tool_settings = 设置 +# Home screen tool card descriptions +home_dup_description = 查找具有相同内容的文件 +home_empty_folders_description = 没有内容的目录 +home_similar_images_description = 寻找相似的照片 +home_empty_files_description = 零大小的文件 +home_temp_files_description = 临时文件和缓存文件 +home_big_files_description = 磁盘上最大/最大文件 +home_broken_files_description = PDF、音频、图像、存档 +home_bad_extensions_description = 无效扩展名的文件 +home_same_music_description = 按标签显示类似的音频文件 +home_bad_names_description = 有问题字符名称的文件 +home_exif_description = 使用 EXIF 元数据的图像 +# Results list +scanning = 正在扫描... +stopping = 正在停止... +no_results = 没有结果 +press_start = 点击开始扫描 +select_label = 出售。. +deselect_label = Desel. +list_label = 列表 +gallery_label = 加拉太书。. +# Selection popup +selection_popup_title = 选择 +select_all = 选择所有 +select_except_one = 选择除一个 +select_except_largest = 选择除最大以外的所有 +select_except_smallest = 选择除最小以外的所有 +select_largest = 选择最大的 +select_smallest = 选择最小值 +select_except_highest_res = 选择除最高分辨率以外的所有选项 +select_except_lowest_res = 选择除最低分辨率以外的所有选项 +select_highest_res = 选择最高分辨率 +select_lowest_res = 选择最低分辨率 +invert_selection = 反转选择 +close = 关闭 +# Deselection popup +deselection_popup_title = 取消选择 +deselect_all = 取消全选 +deselect_except_one = 取消选择除一个 +# Confirm popup +cancel = 取消 +delete = 删除 +rename = 重命名: +# Delete errors popup +delete_errors_title = 删除文件失败: +ok = 好的 +# Stopping overlay +stopping_overlay_title = 正在停止 +stopping_overlay_body = + 正在完成当前扫描... + 请稍候。. +# Permission popup +permission_title = 文件访问权限 +permission_body = 要扫描文件,应用程序需要访问设备存储。没有此权限,扫描将无法进行。. +grant = 授权 +no_permission_scan_warning = 没有文件访问权限 - 允许扫描 +# Settings screen tabs +settings_tab_general = A. 概况 +settings_tab_tools = 工具 +settings_tab_diagnostics = 信息 +# Settings - General tab +settings_use_cache = 使用缓存 +settings_use_cache_desc = 加速随后的扫描(哈希/图像) +settings_ignore_hidden = 忽略隐藏文件 +settings_ignore_hidden_desc = 以“.”开头的文件和文件夹 +settings_show_notification = 扫描结束时通知 +settings_show_notification_desc = 扫描完成时显示系统通知 +settings_notify_only_background = 仅在后台显示 +settings_notify_only_background_desc = 如果应用程序可见则跳过通知 +notifications_disabled_banner = 通知已禁用 +notifications_enable_button = 启用 +settings_scan_label = 已扫描的 +settings_filters_label = FILTERS (一些工具) +settings_min_file_size = 最小文件大小 +settings_max_file_size = 最大文件大小 +settings_language = 语言 +settings_language_restart = 需要重启应用程序 +settings_common_label = COMMON设置 +settings_excluded_items = EXCLUDED ITEMS (glob 模式, 逗号分隔) +settings_excluded_items_placeholder = 例如:*.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = 允许延长时间(空=所有) +settings_allowed_extensions_placeholder = 例如:jpg, png, mp4 +settings_excluded_extensions = ExcluDED Extensions +settings_excluded_extensions_placeholder = 例如:bak、tmp、日志 +# Settings - Tools section labels +settings_duplicates_header = 脱机 +settings_check_method_label = 竞技模式 +settings_check_method = 方法 +settings_hash_type_label = HASH 类型 +settings_hash_type = 哈希类型 +settings_hash_type_desc = Blake3 - 推荐选项,CRC32 几率较小的假阳性 +settings_similar_images_header = 缩放图像 +settings_similarity_preset = 相似度阈值 +settings_similarity_desc = 非常高 = 仅几乎完全相同 +settings_hash_size = 哈希大小 +settings_hash_size_desc = 较大的尺寸,较小的正直性,但也发现较不相似的图像 +settings_hash_alg = 哈希算法 +settings_image_filter = 调整滤镜大小 +settings_ignore_same_size = 忽略同一尺寸的图像 +settings_gallery_image_fit_cover = 相册:裁剪到正方形 +settings_gallery_image_fit_cover_desc = 填充电量;禁用以保持原始宽高比 +settings_big_files_header = BIGES文件 +settings_search_mode = 搜索模式 +settings_file_count = 文件计数 +settings_same_music_header = 我的大家都知道这个问题 +settings_music_check_method = 比较模式 +settings_music_compare_tags_label = 美容战术师 +settings_music_title = 标题 +settings_music_artist = 艺人 +settings_music_year = 年份 +settings_music_length = 长度 +settings_music_genre = 流派数 +settings_music_bitrate = 位速率 +settings_music_approx = 近似标签比较 +settings_broken_files_header = 蓝色文件 +settings_broken_files_note = 资源密集扫描。为了最佳性能,请在桌面上使用 Krokiet。. +settings_broken_files_types_label = 选择类型 +settings_broken_audio = 音频 +settings_broken_pdf = PDF +settings_broken_archive = 存档 +settings_broken_image = 图片 +settings_bad_names_header = 备用名称 +settings_bad_names_checks_label = 搜索 +settings_bad_names_uppercase_ext = 大写扩展 +settings_bad_names_emoji = 表情符号名称 +settings_bad_names_space = 开始/结束时的空间 +settings_bad_names_non_ascii = 非ASCII字符 +settings_bad_names_duplicated = 重复字符 +# Settings - Diagnostics tab +diagnostics_header = 恐龙座 +diagnostics_thumbnails = 缩略图缓存 +diagnostics_app_cache = 应用缓存 +diagnostics_refresh = 刷新 +diagnostics_clear_thumbnails = 清除缩略图 +diagnostics_open_thumbnails_folder = 打开文件夹 +diagnostics_clear_cache = 清除缓存 +diagnostics_open_cache_folder = 打开文件夹 +diagnostics_collect_test = 文件访问测试 +diagnostics_collect_test_desc = 检查可以访问多少个文件 +diagnostics_collect_test_run = 运行 +diagnostics_collect_test_stop = 停止 +collect_test_cancelled = 被用户停止 +diag_confirm_clear_thumbnails = 清除所有缩略图缓存? +diag_confirm_clear_cache = 清除所有应用缓存? +about_repo = 存储库 +about_translate = 翻译 +about_donate = 支持 +# Collect-test result popup +collect_test_title = 测试结果 +collect_test_volumes = 卷: +collect_test_folders = 文件夹: +collect_test_files = 文件: +collect_test_time = 时间: +# Licenses +licenses_label = 许可证 +third_party_licenses = 第三方许可证 +licenses_popup_title = 第三方许可证 +# Directories screen +directories_include_header = 包含 +directories_included = 包含 +directories_exclude_header = 不包含 +directories_excluded_header = 不包含 +directories_add = 包含 +no_paths = 没有路径 - 在下方添加 +directories_volume_header = 卷 +directories_volume_refresh = 刷新 +directories_volume_add = 添加 +# Bottom navigation +nav_home = 开始 +nav_dirs = 目录 +nav_settings = 设置 +# Status messages set from Rust +status_ready = 准备好 +status_stopped = 已停止 +status_no_results = 没有结果 +status_deleted_selected = 已删除选中项 +status_deleted_with_errors = 删除时出现错误 +scan_not_started = 扫描未开始 +found_items_prefix = 找到了 +found_items_suffix = 项目 +deleted_items_prefix = 已删除 +deleted_items_suffix = 项目 +deleted_errors_suffix = 错误 +renamed_prefix = 重命名的 +renamed_files_suffix = 文件 +renamed_errors_suffix = 错误 +cleaned_exif_prefix = 清除 EXIF 来自 +cleaned_exif_suffix = 文件 +cleaned_exif_errors_suffix = 错误 +and_more_prefix = ...及 +and_more_suffix = 更多 +# Gallery / delete popups +gallery_delete_button = 删除 +gallery_back = 后退 +gallery_confirm_delete = 是,删除 +deleting_files = 正在删除文件... +stop = 停止 +files_suffix = 文件 +scanning_fallback = 正在扫描... +app_subtitle = 为纪念Cedynia战役(972 CE) +app_license = Czkawka Core - GPL-3.0 的前端 +about_app_label = 关于 +cache_label = 缓存 +# Notification +scan_completed_notification = 扫描完成 - 找到 { $file_count } 个文件。 +# Confirm popups (set from Rust) +confirm_clean_exif = 您确定要从 { $n } 个选定的文件中清除 EXIF 标签吗? +confirm_delete_items = 您确定要删除 { $n } 个选中的项目吗? +gallery_confirm_delete_msg = 您即将删除 { $total_images } 张图片,这些图片位于 { $total_groups } 个分组中。. +gallery_confirm_delete_warning = 所有商品均已从 { $unsafe_groups } 个组别中挑选! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = 计算和比较音频指纹耗费大量资源,可能需要很长时间。 建议在桌面系统上使用Krokiet来完成这项任务。. +# Scan stage labels (shown during scan progress) +stage_collecting_files = 正在收集文件 +stage_scanning_name = 按名称扫描 +stage_scanning_size_name = 按名称和大小扫描 +stage_scanning_size = 按大小扫描 +stage_pre_hash = 预散列 +stage_full_hash = 正在散列 +stage_loading_cache = 加载缓存 +stage_saving_cache = 正在保存缓存 +stage_calculating_image_hashes = 正在计算图像哈希值 +stage_comparing_images = 比较图像 +stage_calculating_video_hashes = 计算视频哈希值 +stage_checking_files = 正在检查文件 +stage_checking_extensions = 正在检查扩展 +stage_checking_names = 正在检查名称 +stage_reading_music_tags = 读取音乐标签 +stage_comparing_tags = 标签比较 +stage_calculating_music_fingerprints = 正在计算音乐指纹 +stage_comparing_fingerprints = 比较指纹 +stage_extracting_exif = 读取 EXIF 标签 +stage_creating_video_thumbnails = 创建视频缩略图 +stage_processing_videos = 正在处理视频 +stage_deleting = 正在删除文件 +stage_renaming = 重命名文件 +stage_moving = 正在移动文件 +stage_hardlinking = 创建硬链接 +stage_symlinking = 创建符号链接 +stage_optimizing_videos = 优化视频 +stage_cleaning_exif = 正在清理 EXIF +# Group headers in scan results +duplicates_group_header = { $count } 个文件 x { $per_file } / 个文件 = 共有 { $total } 个文件 +similar_images_group_header = { $count } 张相似图片 +same_music_group_header = { $count } 首相似歌曲 +# Rename confirmation +confirm_rename_items = 您确定要重命名所选中的 { $n } 个文件吗? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = 最大的 +option_search_mode_smallest = 最小值 +option_similarity_very_high = 高 +option_similarity_high = 高 +option_similarity_medium = 中 +option_similarity_low = 低 +option_similarity_very_low = 低 +option_similarity_minimal = 最小值. +option_check_method_hash = 哈希 +option_check_method_name = 名称 +option_check_method_size_and_name = 大小+名称 +option_check_method_size = 大小 +option_music_method_tags = 标签 +option_music_method_audio = 音频 +option_min_size_none = 无 +option_min_size_1kb = 1 KB +option_min_size_8kb = 8 KB +option_min_size_64kb = 64 KB +option_min_size_1mb = 1 MB +option_max_size_16kb = 16 KB +option_max_size_1mb = 1 MB +option_max_size_10mb = 10 MB +option_max_size_100mb = 100 MB +option_max_size_unlimited = 无限制 +# Volume labels (shown in the directories screen) +volume_internal_storage = 内部存储 +volume_sd_card = 内存卡 (SD 卡) +volume_storage = 存储音量 +# Directories screen +directories_referenced_tooltip = 引用(未删除) +directories_include_section_header = 包含 +directories_exclude_section_header = 外观 +directories_custom_paths = 自定义路径 +directories_check_button = 分析 +directories_check_popup_title = 目录统计 +directories_check_label_included = 包含的路径: +directories_check_label_excluded = 排除的路径: +directories_check_label_referenced = 参考路径: +directories_check_label_would_scan = 要扫描的文件: +directories_check_label_processable = 可处理的文件: +directories_check_scanning = 正在扫描... +directories_check_warning_no_processable = 未找到可处理的文件 - 请验证您所包含/排除的文件夹 +path_edit_title_include = 添加到包含 +path_edit_title_exclude = 添加到排除 +path_edit_placeholder = 输入路径... +path_edit_not_exists = 路径不存在 +path_edit_is_dir = 目录 +path_edit_is_file = 文件 +path_edit_no_newlines = 路径不能包含换行符 - 输入密钥是不允许的 +ctx_menu_title = 打开 +ctx_open_file = 打开项目 +ctx_open_folder = 打开父文件夹 diff --git a/cedinia/i18n/zh-TW/cedinia.ftl b/cedinia/i18n/zh-TW/cedinia.ftl new file mode 100644 index 000000000..1866bbe15 --- /dev/null +++ b/cedinia/i18n/zh-TW/cedinia.ftl @@ -0,0 +1,317 @@ +# Cedinia - English (fallback) + +# App / top bar titles +app_name = Cedinia +tool_duplicate_files = 重複項目 +tool_empty_folders = 空資料夾 +tool_similar_images = 相似影像 +tool_empty_files = 空檔案 +tool_temporary_files = 臨時檔案 +tool_big_files = 最大檔案。 +tool_broken_files = 損壞的檔案 +tool_bad_extensions = 錯誤的副檔名 +tool_same_music = 音樂重複 +tool_bad_names = 糟糕的名字 +tool_exif_remover = EXIF 數據 +tool_directories = 目錄 +tool_settings = 設定 +# Home screen tool card descriptions +home_dup_description = 尋找內容相同的檔案。 +home_empty_folders_description = 沒有內容的目錄。 +home_similar_images_description = 尋找視覺上相似的照片。 +home_empty_files_description = 檔案大小為零。 +home_temp_files_description = 臨時檔案與快取檔案 +home_big_files_description = 磁碟上最大的/最小的文件。 +home_broken_files_description = PDF文件、音訊、圖片、檔案。 +home_bad_extensions_description = 具有無效檔案擴充名的檔案。 +home_same_music_description = 依標籤搜尋的相似音訊檔案。 +home_bad_names_description = 檔案名稱含有問題字元。 +home_exif_description = 帶有 EXIF 原始數據的圖片。 +# Results list +scanning = 掃描中... +stopping = 暫停... +no_results = 沒有找到任何結果。 +press_start = 請按「開始」按鈕以進行掃描。 +select_label = 精選。. +deselect_label = Desel. +list_label = 清單。 +gallery_label = 加拉太書。. +# Selection popup +selection_popup_title = 選擇 +select_all = 選擇全部 +select_except_one = 請選擇所有選項,除了其中一個。 +select_except_largest = 請選擇所有項目,除了最大值。 +select_except_smallest = 選擇除最小以外的全部影像 +select_largest = 選擇最大值。 +select_smallest = 選擇最小值。 +select_except_highest_res = 請選擇所有選項,除了最高解析度之外。 +select_except_lowest_res = 請選擇所有選項,除了解析度最低的那一個。 +select_highest_res = 選擇最高解析度。 +select_lowest_res = 選擇最低解析度。 +invert_selection = 反向選擇 +close = 關閉 +# Deselection popup +deselection_popup_title = 取消選擇。 +deselect_all = 取消全部 +deselect_except_one = 取消所有選項,只保留一個。 +# Confirm popup +cancel = 取消 +delete = 刪除 +rename = 重新命名 +# Delete errors popup +delete_errors_title = 刪除部分檔案失敗: +ok = 好的。 +# Stopping overlay +stopping_overlay_title = 暫停。 +stopping_overlay_body = + 掃描完成中... + 請稍候。. +# Permission popup +permission_title = 檔案存取權限 +permission_body = 為了掃描檔案,應用程式需要存取裝置儲存空間。若沒有此授權,將無法進行掃描。. +grant = 補助金;授予;(人名)格兰特。 +no_permission_scan_warning = 無法存取檔案 - 授權進行掃描。 +# Settings screen tabs +settings_tab_general = 一般 +settings_tab_tools = 工具 +settings_tab_diagnostics = 資訊。 +# Settings - General tab +settings_use_cache = 使用快取 +settings_use_cache_desc = 加快後續掃描速度(例如:雜湊碼/圖片)。 +settings_ignore_hidden = 忽略隱藏檔案。 +settings_ignore_hidden_desc = 以「.」開頭的檔案和資料夾。 +settings_show_notification = 請在掃描完成時通知。 +settings_show_notification_desc = 在掃描完成時,顯示系統通知。 +settings_notify_only_background = 僅在背景時顯示。 +settings_notify_only_background_desc = 如果應用程式視窗已顯示,則跳過通知。 +notifications_disabled_banner = 通知已禁用。 +notifications_enable_button = 啟用 +settings_scan_label = 掃描 +settings_filters_label = 篩選器 (部分工具) +settings_min_file_size = 最小文件大小。 +settings_max_file_size = 最大檔案大小。 +settings_language = 語言 +settings_language_restart = 需要重新啟動應用程式。 +settings_common_label = 常用設定 +settings_excluded_items = 排除項目 (全域模式,以逗號分隔) +settings_excluded_items_placeholder = 例如:*.tmp, */.git/*, */node_modules/* +settings_allowed_extensions = 允許的檔案類型 (若為空白,則代表所有類型) +settings_allowed_extensions_placeholder = 例如:jpg、png、mp4。 +settings_excluded_extensions = 排除的擴展功能。 +settings_excluded_extensions_placeholder = 例如:bak、tmp、log。 +# Settings - Tools section labels +settings_duplicates_header = 重複項目 +settings_check_method_label = 比較方法 +settings_check_method = 方法 +settings_hash_type_label = 雜湊類型 +settings_hash_type = 雜湊類型 +settings_hash_type_desc = Blake3 – 這是推薦的選項,CRC32 存在極小的誤判機率。 +settings_similar_images_header = 相似圖片 +settings_similarity_preset = 相似度閾值 +settings_similarity_desc = 極高 = 僅接近完全相同。 +settings_hash_size = 雜湊大小 +settings_hash_size_desc = 較大的尺寸,雖然能減少誤判的機率,但同時也可能找到的相似圖片數量較少。 +settings_hash_alg = 哈希算法 +settings_image_filter = 調整過濾器大小。 +settings_ignore_same_size = 忽略尺寸相同的圖片。 +settings_gallery_image_fit_cover = 相簿:裁剪至正方形。 +settings_gallery_image_fit_cover_desc = 填滿圖格;禁用此選項以保留原始比例。 +settings_big_files_header = 檔案大小:巨 كبير +settings_search_mode = 搜尋模式 +settings_file_count = 文件數量 +settings_same_music_header = 音樂複製品 +settings_music_check_method = 比較模式 +settings_music_compare_tags_label = 相關標籤 +settings_music_title = 標題 +settings_music_artist = 藝人 +settings_music_year = 年份 +settings_music_length = 長度 +settings_music_genre = 類型 +settings_music_bitrate = 位元率 +settings_music_approx = 近似標籤比較 +settings_broken_files_header = 損毀檔案 +settings_broken_files_note = 資源佔用較高的掃描操作。如需最佳效能,請在桌面上使用 Krokiet。. +settings_broken_files_types_label = 已選取的類型。 +settings_broken_audio = 音訊 +settings_broken_pdf = PDF 文件。 +settings_broken_archive = 歸檔 +settings_broken_image = 影像 +settings_bad_names_header = 不良名稱 +settings_bad_names_checks_label = 支票 +settings_bad_names_uppercase_ext = 大寫延伸 +settings_bad_names_emoji = 表情符號在名字裡 +settings_bad_names_space = 開頭/結尾的空格。 +settings_bad_names_non_ascii = 非ASCII字元 +settings_bad_names_duplicated = 重複字元 +# Settings - Diagnostics tab +diagnostics_header = 診斷儀器 +diagnostics_thumbnails = 縮圖快取。 +diagnostics_app_cache = 應用程式快取。 +diagnostics_refresh = 重新整理 +diagnostics_clear_thumbnails = 清晰的縮圖。 +diagnostics_open_thumbnails_folder = 開啟資料夾 +diagnostics_clear_cache = 清除快取。 +diagnostics_open_cache_folder = 開啟資料夾 +diagnostics_collect_test = 檔案存取測試 +diagnostics_collect_test_desc = 請確認可以存取的檔案數量。 +diagnostics_collect_test_run = 執行。 +diagnostics_collect_test_stop = 停止 +collect_test_cancelled = 由用戶停止。 +diag_confirm_clear_thumbnails = 是否清除所有縮圖快取? +diag_confirm_clear_cache = 是否清除所有應用程式快取? +about_repo = 儲存庫 +about_translate = 翻譯 +about_donate = 支持 +# Collect-test result popup +collect_test_title = 測試結果 +collect_test_volumes = 篇數: +collect_test_folders = 資料夾: +collect_test_files = 檔案: +collect_test_time = 時間: +# Licenses +licenses_label = 許可證 +third_party_licenses = 第三方授權條款。 +licenses_popup_title = 第三方授權條款 +# Directories screen +directories_include_header = 包含。 +directories_included = 包含於內。 +directories_exclude_header = 排除。 +directories_excluded_header = 已排除。 +directories_add = 請包含。 +no_paths = 沒有任何路徑 - 請在下方新增。 +directories_volume_header = 冊數 +directories_volume_refresh = 刷新 +directories_volume_add = 新增 +# Bottom navigation +nav_home = 開始。 +nav_dirs = 目錄 +nav_settings = 設定 +# Status messages set from Rust +status_ready = 準備好了。 +status_stopped = 已停止。 +status_no_results = 沒有找到任何結果。 +status_deleted_selected = 已刪除所選項目。 +status_deleted_with_errors = 已刪除,但可能存在錯誤。 +scan_not_started = 掃描尚未開始。 +found_items_prefix = 已找到。 +found_items_suffix = 商品。 +deleted_items_prefix = 已刪除。 +deleted_items_suffix = 商品。 +deleted_errors_suffix = 錯誤。 +renamed_prefix = 已重新命名。 +renamed_files_suffix = 檔案 +renamed_errors_suffix = 錯誤。 +cleaned_exif_prefix = 已清除來自以下來源的 EXIF 資訊: +cleaned_exif_suffix = 檔案 +cleaned_exif_errors_suffix = 錯誤。 +and_more_prefix = ...以及 +and_more_suffix = 更多。 +# Gallery / delete popups +gallery_delete_button = 刪除 +gallery_back = 返回 +gallery_confirm_delete = 是的,刪除。 +deleting_files = 正在刪除檔案... +stop = 停止 +files_suffix = 檔案 +scanning_fallback = 掃描中... +app_subtitle = 為紀念塞迪尼亞戰役 (西元 972 年) 而作。 +app_license = Czkawka Core 的前端 - GPL-3.0 协议。 +about_app_label = 關於 +cache_label = 快取 +# Notification +scan_completed_notification = 掃描完成 - 發現 { $file_count } 個項目。 +# Confirm popups (set from Rust) +confirm_clean_exif = 您確定要清除所選 { $n } 個檔案中的 EXIF 標籤嗎? +confirm_delete_items = 您確定要刪除 { $n } 個已選取的項目嗎? +gallery_confirm_delete_msg = 您即將刪除 { $total_images } 張圖片,這些圖片位於 { $total_groups } 個群組中。. +gallery_confirm_delete_warning = 所有項目都已從 { $unsafe_groups } 個群組中選取! +# Settings - SameMusic fingerprint warning +same_music_fingerprint_warning = 計算和比較音頻指紋需要消耗大量資源,而且可能需要很長時間。 建議在桌面系統上使用 Krokiet 來執行此項任務。. +# Scan stage labels (shown during scan progress) +stage_collecting_files = 收集檔案中 +stage_scanning_name = 按姓名掃描。 +stage_scanning_size_name = 以名稱和大小進行掃描。 +stage_scanning_size = 依尺寸掃描。 +stage_pre_hash = 預先哈希處理。 +stage_full_hash = 雜湊演算法 (Hashing) +stage_loading_cache = 正在載入快取 +stage_saving_cache = 正在儲存快取 +stage_calculating_image_hashes = 計算影像的雜湊值。 +stage_comparing_images = 比較圖片。 +stage_calculating_video_hashes = 計算影片的雜湊值。 +stage_checking_files = 正在檢查檔案 +stage_checking_extensions = 正在檢查擴充功能。 +stage_checking_names = 檢查姓名。 +stage_reading_music_tags = 閱讀音樂標籤。 +stage_comparing_tags = 比較標籤。 +stage_calculating_music_fingerprints = 計算音樂指紋。 +stage_comparing_fingerprints = 比對指紋。 +stage_extracting_exif = 讀取 EXIF 標籤。 +stage_creating_video_thumbnails = 製作影片縮圖。 +stage_processing_videos = 正在處理影片。 +stage_deleting = 刪除檔案 +stage_renaming = 重新命名檔案 +stage_moving = 移動檔案 +stage_hardlinking = 建立硬連結。 +stage_symlinking = 建立符號連結。 +stage_optimizing_videos = 優化影片。 +stage_cleaning_exif = 清除 EXIF 資訊。 +# Group headers in scan results +duplicates_group_header = { $count } 個檔案 x { $per_file } / 個檔案 = 總計 { $total } +similar_images_group_header = { $count } 張相似圖片 +same_music_group_header = { $count } 相似曲目 +# Rename confirmation +confirm_rename_items = 您確定要將選取的 { $n } 個檔案重新命名嗎? +# Combo-box option labels (translatable display names) +option_search_mode_biggest = 最大。 +option_search_mode_smallest = 最小的 +option_similarity_very_high = 極高 +option_similarity_high = 高 +option_similarity_medium = 中等 +option_similarity_low = 低 +option_similarity_very_low = V. 低 +option_similarity_minimal = 最小. +option_check_method_hash = 雜湊 +option_check_method_name = 名稱 +option_check_method_size_and_name = 尺寸 + 姓名 +option_check_method_size = 大小 +option_music_method_tags = 標籤 +option_music_method_audio = 音訊 +option_min_size_none = 無。 +option_min_size_1kb = 1 KB +option_min_size_8kb = 8 KB +option_min_size_64kb = 64 KB +option_min_size_1mb = 1 MB +option_max_size_16kb = 16 KB +option_max_size_1mb = 1 MB +option_max_size_10mb = 10 MB +option_max_size_100mb = 100 MB +option_max_size_unlimited = 無限大。 +# Volume labels (shown in the directories screen) +volume_internal_storage = 內部儲存空間 +volume_sd_card = 記憶卡 (SD 卡) +volume_storage = 儲存空間容量 +# Directories screen +directories_referenced_tooltip = 已參閱(未刪除)。 +directories_include_section_header = 內含項目 +directories_exclude_section_header = 已排除。 +directories_custom_paths = 自定義路徑 +directories_check_button = 分析。 +directories_check_popup_title = 目錄統計資訊 +directories_check_label_included = 包含的路径: +directories_check_label_excluded = 排除路徑: +directories_check_label_referenced = 參考路徑: +directories_check_label_would_scan = 需要掃描的檔案: +directories_check_label_processable = 可處理的文件: +directories_check_scanning = 掃描中... +directories_check_warning_no_processable = 未找到可處理的文件 - 請確認您包含/排除的資料夾。 +path_edit_title_include = 新增包含項目。 +path_edit_title_exclude = 新增至排除列表 +path_edit_placeholder = 請輸入路徑... +path_edit_not_exists = 路徑不存在。 +path_edit_is_dir = 目錄 +path_edit_is_file = 檔案 +path_edit_no_newlines = 路徑名稱中不能包含換行符號 — 不允許使用Enter鍵。 +ctx_menu_title = 開啟。 +ctx_open_file = 開啟項目。 +ctx_open_folder = 開啟父目錄。 diff --git a/cedinia/java/CediniaFilePicker.java b/cedinia/java/CediniaFilePicker.java index a8da46ddb..9c1638438 100644 --- a/cedinia/java/CediniaFilePicker.java +++ b/cedinia/java/CediniaFilePicker.java @@ -251,26 +251,38 @@ public void run() { private static void openFolderInternal(Activity activity, String path) { try { - // Strip known prefixes to get the path relative to the primary volume root. - String rel = path; - if (rel.startsWith("/storage/emulated/0/")) { - rel = rel.substring("/storage/emulated/0/".length()); - } else if (rel.startsWith("/sdcard/")) { - rel = rel.substring("/sdcard/".length()); + String docId; + if (path.startsWith("/storage/emulated/0/")) { + docId = "primary:" + path.substring("/storage/emulated/0/".length()); + } else if (path.equals("/storage/emulated/0")) { + docId = "primary:"; + } else if (path.startsWith("/sdcard/")) { + docId = "primary:" + path.substring("/sdcard/".length()); + } else if (path.equals("/sdcard")) { + docId = "primary:"; + } else if (path.startsWith("/storage/")) { + // Non-primary volume, e.g. /storage/FAEB-190A or /storage/FAEB-190A/Music. + // DocumentsUI uses ":" as the document ID. + String rest = path.substring("/storage/".length()); + int slash = rest.indexOf('/'); + if (slash < 0) { + docId = rest + ":"; + } else { + docId = rest.substring(0, slash) + ":" + rest.substring(slash + 1); + } } else { - // Non-primary volume or unrecognised prefix – just show a toast-level fallback. - Log.w(TAG, "openFolder: non-primary path, skipping: " + path); + Log.w(TAG, "openFolder: unrecognised path prefix, cannot open: " + path); return; } - // Use the DocumentsUI content URI understood by the built-in Files app. - Uri folderUri = Uri.parse( - "content://com.android.externalstorage.documents/document/primary:" - + Uri.encode(rel)); + // Build the DocumentsUI content URI via the official API so that the document ID + // is correctly percent-encoded (e.g. slashes inside the ID become %2F). + Uri folderUri = DocumentsContract.buildDocumentUri( + "com.android.externalstorage.documents", docId); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(folderUri, DocumentsContract.Document.MIME_TYPE_DIR); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); activity.startActivity(intent); - Log.i(TAG, "openFolder: launched for " + path); + Log.i(TAG, "openFolder: launched for " + path + " (docId=" + docId + ")"); } catch (Exception e) { Log.e(TAG, "openFolder: failed for " + path + ": " + e); } diff --git a/cedinia/src/callbacks/misc.rs b/cedinia/src/callbacks/misc.rs index aa84a3c02..ab44b10e6 100644 --- a/cedinia/src/callbacks/misc.rs +++ b/cedinia/src/callbacks/misc.rs @@ -244,8 +244,8 @@ pub(crate) fn wire_language_change(window: &MainWindow) { let weak = window.as_weak(); window.global::().on_apply_language_change(move || { let win = weak.upgrade().expect("MainWindow dropped in on_apply_language_change"); - let idx = win.global::().get_language_idx(); - let lang = if idx == 1 { "pl" } else { "en" }; + let idx = win.global::().get_language_idx() as usize; + let lang = crate::localizer_cedinia::LANGUAGE_LIST.get(idx).map_or("en", |&(code, _)| code); crate::localizer_cedinia::apply_language_preference(lang); crate::translations::translate_items(&win); }); diff --git a/cedinia/src/callbacks/selection.rs b/cedinia/src/callbacks/selection.rs index d5571f8c9..694ae0279 100644 --- a/cedinia/src/callbacks/selection.rs +++ b/cedinia/src/callbacks/selection.rs @@ -6,7 +6,7 @@ use slint::{ComponentHandle, Model, ModelRc, VecModel}; use crate::common::{INT_IDX_SIZE_HI, INT_IDX_SIZE_LO, IntDataSimilarImages, STR_IDX_NAME, STR_IDX_PATH, StrDataBadExtensions, StrDataBadNames}; use crate::model::{count_checked, toggle_row}; -use crate::{ActiveTool, AppState, FileEntry, MainWindow, SimilarGroupCard, SimilarImageItem}; +use crate::{ActiveTool, AppState, ConfirmPopupAction, FileEntry, MainWindow, SimilarGroupCard, SimilarImageItem}; #[cfg(not(target_os = "android"))] fn delete_path(path: &str) -> Result<(), String> { @@ -257,7 +257,7 @@ pub(crate) fn wire_selection(window: &MainWindow, delete_tx: std::sync::mpsc::Se } let state = win.global::(); state.set_confirm_popup_message(slint::SharedString::from(crate::flc!("confirm_clean_exif", n = n))); - state.set_confirm_popup_action(slint::SharedString::from("clean_exif")); + state.set_confirm_popup_action(ConfirmPopupAction::CleanExif); state.set_confirm_popup_visible(true); let _ = tx.clone(); }); @@ -275,7 +275,7 @@ pub(crate) fn wire_selection(window: &MainWindow, delete_tx: std::sync::mpsc::Se } let state = win.global::(); state.set_confirm_popup_message(slint::SharedString::from(crate::flc!("confirm_delete_items", n = n))); - state.set_confirm_popup_action(slint::SharedString::from("delete")); + state.set_confirm_popup_action(ConfirmPopupAction::Delete); state.set_confirm_popup_visible(true); let _ = tx.clone(); }); @@ -551,8 +551,12 @@ pub(crate) fn wire_selection(window: &MainWindow, delete_tx: std::sync::mpsc::Se } let state = win.global::(); state.set_confirm_popup_message(slint::SharedString::from(crate::flc!("confirm_rename_items", n = n))); - let action = if tool == ActiveTool::BadNames { "rename_bad_names" } else { "rename" }; - state.set_confirm_popup_action(slint::SharedString::from(action)); + let action = if tool == ActiveTool::BadNames { + ConfirmPopupAction::RenameBadNames + } else { + ConfirmPopupAction::Rename + }; + state.set_confirm_popup_action(action); state.set_confirm_popup_visible(true); let _ = tx.clone(); }); @@ -562,14 +566,14 @@ pub(crate) fn wire_selection(window: &MainWindow, delete_tx: std::sync::mpsc::Se let tx_confirm = delete_tx; window.global::().on_confirm_popup_ok(move || { let win = weak.upgrade().expect("MainWindow dropped in on_confirm_popup_ok"); - let action = win.global::().get_confirm_popup_action().to_string(); + let action = win.global::().get_confirm_popup_action(); win.global::().set_confirm_popup_visible(false); - match action.as_str() { - "delete" => execute_delete_selected(&win, tx_confirm.clone()), - "rename" => execute_rename_selected(&win, tx_confirm.clone()), - "rename_bad_names" => execute_rename_bad_names(&win, tx_confirm.clone()), - "clean_exif" => execute_clean_exif_selected(&win, tx_confirm.clone()), - _ => {} + match action { + ConfirmPopupAction::Delete => execute_delete_selected(&win, tx_confirm.clone()), + ConfirmPopupAction::Rename => execute_rename_selected(&win, tx_confirm.clone()), + ConfirmPopupAction::RenameBadNames => execute_rename_bad_names(&win, tx_confirm.clone()), + ConfirmPopupAction::CleanExif => execute_clean_exif_selected(&win, tx_confirm.clone()), + ConfirmPopupAction::None => {} } }); } diff --git a/cedinia/src/localizer_cedinia.rs b/cedinia/src/localizer_cedinia.rs index 152a502bb..4a42e0745 100644 --- a/cedinia/src/localizer_cedinia.rs +++ b/cedinia/src/localizer_cedinia.rs @@ -23,7 +23,35 @@ pub(crate) fn localizer_cedinia() -> Box { Box::from(DefaultLocalizer::new(&*LANGUAGE_LOADER_CEDINIA, &Localizations)) } -pub const LANGUAGE_LIST: &[&str] = &["en", "pl"]; +pub const LANGUAGE_LIST: &[(&str, &str)] = &[ + ("en", "English"), + ("pl", "Polski (Polish)"), + ("fr", "Français (French)"), + ("it", "Italiano (Italian)"), + ("ru", "Русский (Russian)"), + ("uk", "український (Ukrainian)"), + ("ko", "한국어 (Korean)"), + ("cs", "Česky (Czech)"), + ("de", "Deutsch (German)"), + ("ja", "日本語 (Japanese)"), + ("pt-PT", "Português (Portuguese)"), + ("pt-BR", "Português Brasileiro (Brazilian Portuguese)"), + ("zh-CN", "简体中文 (Simplified Chinese)"), + ("zh-TW", "繁體中文 (Traditional Chinese)"), + ("es-ES", "Español (Spanish)"), + ("no", "Norsk (Norwegian)"), + ("sv-SE", "Svenska (Swedish)"), + ("ar", "العربية (Arabic)"), + ("bg", "Български (Bulgarian)"), + ("el", "Ελληνικά (Greek)"), + ("nl", "Nederlands (Dutch)"), + ("ro", "Română (Romanian)"), + ("tr", "Türkçe (Turkish)"), + ("fa", "فارسی (Persian)"), + ("hi", "हिंदी (Hindi)"), + ("id", "Bahasa Indonesia (Indonesian)"), + ("vi", "Tiếng Việt (Vietnamese)"), +]; pub(crate) fn detect_os_language_idx() -> i32 { #[cfg(not(target_os = "android"))] @@ -31,7 +59,7 @@ pub(crate) fn detect_os_language_idx() -> i32 { let requested = i18n_embed::DesktopLanguageRequester::requested_languages(); if let Some(lang) = requested.first() { let short = lang.language.as_str(); - for (idx, &code) in LANGUAGE_LIST.iter().enumerate() { + for (idx, &(code, _)) in LANGUAGE_LIST.iter().enumerate() { if short == code { return idx as i32; } @@ -43,7 +71,7 @@ pub(crate) fn detect_os_language_idx() -> i32 { pub(crate) fn apply_language_preference(lang: &str) { let localizer = localizer_cedinia(); - if LANGUAGE_LIST.contains(&lang) { + if LANGUAGE_LIST.iter().any(|&(code, _)| code == lang) { if let Ok(lang_id) = lang.parse::() { let _ = localizer.select(&[lang_id]); } diff --git a/cedinia/src/notifications.rs b/cedinia/src/notifications.rs index 57a2e68e3..a94e4d1b1 100644 --- a/cedinia/src/notifications.rs +++ b/cedinia/src/notifications.rs @@ -304,6 +304,49 @@ fn send_notification(title: &str, body: &str) { let sig_bool = RuntimeMethodSignature::from_str("(Z)Landroid/app/Notification$Builder;").unwrap(); env.call_method(&builder, jni_str!("setAutoCancel"), &sig_bool.method_signature(), &[JValue::Bool(true)])?; + // Attach a PendingIntent so tapping the notification brings the app to the foreground. + let pm: JObject = env + .call_method(&activity, jni_str!("getPackageManager"), jni_sig!(() -> android.content.pm.PackageManager), &[])? + .l()?; + let pkg2: JObject = env.call_method(&activity, jni_str!("getPackageName"), jni_sig!(() -> java.lang.String), &[])?.l()?; + let launch_intent: JObject = env + .call_method( + &pm, + jni_str!("getLaunchIntentForPackage"), + jni_sig!((packageName: java.lang.String) -> android.content.Intent), + &[JValue::Object(&pkg2)], + )? + .l()?; + if !launch_intent.is_null() { + // FLAG_ACTIVITY_SINGLE_TOP (0x20000000) | FLAG_ACTIVITY_CLEAR_TOP (0x04000000): + // bring the existing Activity to front instead of creating a new instance. + env.call_method( + &launch_intent, + jni_str!("addFlags"), + jni_sig!((flags: int) -> android.content.Intent), + &[JValue::Int(0x2000_0000 | 0x0400_0000)], + )?; + // FLAG_IMMUTABLE (0x04000000) is required on Android 12+ (API 31+). + let sig_pending = RuntimeMethodSignature::from_str("(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;").unwrap(); + let pending_intent: JObject = env + .call_static_method( + jni_str!("android/app/PendingIntent"), + jni_str!("getActivity"), + &sig_pending.method_signature(), + &[JValue::Object(&activity), JValue::Int(0), JValue::Object(&launch_intent), JValue::Int(0x0400_0000)], + )? + .l()?; + if !pending_intent.is_null() { + let sig_set_intent = RuntimeMethodSignature::from_str("(Landroid/app/PendingIntent;)Landroid/app/Notification$Builder;").unwrap(); + env.call_method( + &builder, + jni_str!("setContentIntent"), + &sig_set_intent.method_signature(), + &[JValue::Object(&pending_intent)], + )?; + } + } + let sig_build = RuntimeMethodSignature::from_str("()Landroid/app/Notification;").unwrap(); let notification: JObject = env.call_method(&builder, jni_str!("build"), &sig_build.method_signature(), &[])?.l()?; diff --git a/cedinia/src/settings/gui_settings_values.rs b/cedinia/src/settings/gui_settings_values.rs index e39828566..8e6c6691a 100644 --- a/cedinia/src/settings/gui_settings_values.rs +++ b/cedinia/src/settings/gui_settings_values.rs @@ -133,7 +133,11 @@ impl StringComboBoxItems { ("smallest", SearchMode::SmallestFiles, DisplaySpec::Translatable("option_search_mode_smallest")), ]); - let big_files_count = Self::convert(&[("5", "5", 5usize), ("50", "50", 50), ("500", "500", 500), ("5000", "5000", 5000)]); + let big_files_count = Self::convert(&[ + ("10", "10", 10usize), + ("100", "100", 100), + // ("1000", "1000", 1000), ("10000", "10000", 10000) // Too slowefor now + ]); let similarity_preset = Self::convert_i18n(&[ ("very_high", SimilarityPreset::VeryHigh, DisplaySpec::Translatable("option_similarity_very_high")), diff --git a/cedinia/src/settings/mod.rs b/cedinia/src/settings/mod.rs index d28336d0b..20d43cada 100644 --- a/cedinia/src/settings/mod.rs +++ b/cedinia/src/settings/mod.rs @@ -292,7 +292,7 @@ pub fn apply_settings_to_gui(win: &MainWindow, s: &CediniaSettings) { win.global::().set_max_file_size_idx(max_idx as i32); let lang_idx = crate::localizer_cedinia::LANGUAGE_LIST .iter() - .position(|&c| c == s.language.as_str()) + .position(|&(code, _)| code == s.language.as_str()) .unwrap_or_else(|| crate::localizer_cedinia::detect_os_language_idx() as usize) as i32; win.global::().set_language_idx(lang_idx); win.global::().set_excluded_items(s.excluded_items.clone().into()); @@ -380,7 +380,7 @@ pub fn collect_settings_from_gui(win: &MainWindow) -> CediniaSettings { max_file_size: StringComboBoxItems::config_name_from_idx(&items.max_file_size, g.get_max_file_size_idx(), "unlimited"), language: crate::localizer_cedinia::LANGUAGE_LIST .get(g.get_language_idx() as usize) - .map_or_else(|| "en".to_string(), |&s| s.to_string()), + .map_or_else(|| "en".to_string(), |&(code, _)| code.to_string()), excluded_items: g.get_excluded_items().to_string(), allowed_extensions: g.get_allowed_extensions().to_string(), excluded_extensions: g.get_excluded_extensions().to_string(), diff --git a/cedinia/src/thumbnail_loader.rs b/cedinia/src/thumbnail_loader.rs index e5868edd5..37b472ab9 100644 --- a/cedinia/src/thumbnail_loader.rs +++ b/cedinia/src/thumbnail_loader.rs @@ -5,7 +5,8 @@ use std::sync::Arc; use std::sync::atomic::{AtomicBool, AtomicU64, AtomicUsize, Ordering}; use std::time::{Duration, SystemTime}; -use czkawka_core::common::image::{ImgResizeOptions, LoadedImage}; +use czkawka_core::common::image::{ImgResizeOptions, LoadedImage, get_dynamic_image_from_path}; +use czkawka_core::re_exported::FirFilterType; use log::trace; use crate::scan_runner::FileItem; @@ -118,9 +119,6 @@ pub fn rgba_to_slint_image(rgba: &[u8], width: u32, height: u32) -> slint::Image } pub fn load_and_resize_thumbnail(path: &str, cache_dir: &Path) -> Option<(Vec, u32, u32)> { - use czkawka_core::common::image::get_dynamic_image_from_path; - use fast_image_resize::FilterType; - let meta = std::fs::metadata(path).ok(); let (mtime_secs, file_size) = meta.as_ref().map_or((0, 0), |m| { let mtime = m.modified().ok().and_then(|t| t.duration_since(std::time::UNIX_EPOCH).ok()).map_or(0, |d| d.as_secs()); @@ -141,7 +139,7 @@ pub fn load_and_resize_thumbnail(path: &str, cache_dir: &Path) -> Option<(Vec use_cache: true; @@ -13,7 +13,7 @@ export global GeneralSettings { in-out property <[string]> max_file_size_options: ["16 KB", "1 MB", "10 MB", "100 MB", "Bez limitu"]; in-out property language_idx: 0; - in-out property <[string]> language_options: ["English", "Polski (Polish)"]; + in-out property <[string]> language_options: ["English", "Polski (Polish)", "Français (French)", "Italiano (Italian)", "Русский (Russian)", "український (Ukrainian)", "한국어 (Korean)", "Česky (Czech)", "Deutsch (German)", "日本語 (Japanese)", "Português (Portuguese)", "Português Brasileiro (Brazilian Portuguese)", "简体中文 (Simplified Chinese)", "繁體中文 (Traditional Chinese)", "Español (Spanish)", "Norsk (Norwegian)", "Svenska (Swedish)", "العربية (Arabic)", "Български (Bulgarian)", "Ελληνικά (Greek)", "Nederlands (Dutch)", "Română (Romanian)", "Türkçe (Turkish)", "فارسی (Persian)", "हिंदी (Hindi)", "Bahasa Indonesia (Indonesian)", "Tiếng Việt (Vietnamese)"]; in-out property excluded_items: ""; @@ -93,8 +93,8 @@ export global BigFilesSettings { in-out property <[string]> search_mode_options: ["Biggest", "Smallest"]; in-out property count_idx: 1; - in-out property count_value: "50"; - in-out property <[string]> count_options: ["5", "50", "500", "5000"]; + in-out property count_value: "100"; + in-out property <[string]> count_options: ["10", "100"]; } @@ -238,9 +238,9 @@ export global AppState { in-out property delete_errors_text: ""; - in-out property confirm_popup_visible: false; - in-out property confirm_popup_message: ""; - in-out property confirm_popup_action: ""; + in-out property confirm_popup_visible: false; + in-out property confirm_popup_message: ""; + in-out property confirm_popup_action: ConfirmPopupAction.None; callback confirm_popup_ok(); callback confirm_popup_cancel(); diff --git a/cedinia/ui/common.slint b/cedinia/ui/common.slint index b7b261f31..76c3da1a9 100644 --- a/cedinia/ui/common.slint +++ b/cedinia/ui/common.slint @@ -4,6 +4,14 @@ export enum SettingsTab { Diagnostics, } +export enum ConfirmPopupAction { + None, + Delete, + Rename, + RenameBadNames, + CleanExif, +} + export enum ActiveTool { Home, DuplicateFiles, diff --git a/cedinia/ui/components.slint b/cedinia/ui/components.slint index acbe9b9f5..bb4d063a1 100644 --- a/cedinia/ui/components.slint +++ b/cedinia/ui/components.slint @@ -125,13 +125,21 @@ export component FileRow { // `clicked` event (fired on finger-up) doesn't also toggle selection. property lp_fired: false; + // Set to true once the finger drifts beyond the dead zone or the scroll + // SGR claims the gesture. Prevents `clicked` from toggling selection + // after a drag/scroll release. + property _moved: false; + // Set by the parent MomentumScrollView via `scroll_swiping: scroll_view.is_swiping`. // When the scroll SGR claims the pointer gesture it stops forwarding pointer // events to child TouchAreas, so the only reliable way to cancel the // long-press timer during a scroll is to watch this flag directly. in property scroll_swiping: false; changed scroll_swiping => { - if root.scroll_swiping { lp_timer.running = false; } + if root.scroll_swiping { + lp_timer.running = false; + root._moved = true; + } } // Stored press coordinates for the dead-zone check. @@ -167,15 +175,17 @@ export component FileRow { clicked => { if (root.lp_fired) { root.lp_fired = false; - } else if (!root.is_header && !root.is_reference) { + } else if (!root._moved && !root.is_header && !root.is_reference) { root.toggle_checked(); } + root._moved = false; } pointer-event(e) => { if (!root.is_header) { if (e.kind == PointerEventKind.down) { root._lp_start_x = ta.mouse-x; root._lp_start_y = ta.mouse-y; + root._moved = false; lp_timer.running = true; lp_timer.restart(); } else if (e.kind == PointerEventKind.up) { @@ -189,6 +199,7 @@ export component FileRow { || ta.mouse-y - root._lp_start_y > 8px || root._lp_start_y - ta.mouse-y > 8px) { lp_timer.running = false; + root._moved = true; } } if (e.button == PointerEventButton.middle && e.kind == PointerEventKind.up) { diff --git a/cedinia/ui/directories_screen.slint b/cedinia/ui/directories_screen.slint index cf22894cc..03b0b2bff 100644 --- a/cedinia/ui/directories_screen.slint +++ b/cedinia/ui/directories_screen.slint @@ -35,6 +35,7 @@ component DirRow { in property exists: true; callback remove(); callback toggle_referenced(); + callback open_folder(); min-height: 52px; @@ -121,6 +122,28 @@ component DirRow { } } + Rectangle { + horizontal-stretch: 0.0; + width: 40px; + border-radius: 20px; + background: open_ta.has-hover ? CediniaColors.accent.with-alpha(0.15) : transparent; + vertical-stretch: 0.0; + + open_ta := TouchArea { + clicked => { root.open_folder(); } + } + VerticalLayout { + alignment: LayoutAlignment.center; + Text { + text: "↗"; + color: CediniaColors.text_secondary; + font-size: 18px; + horizontal-alignment: center; + vertical-alignment: center; + } + } + } + Rectangle { horizontal-stretch: 0.0; width: 40px; @@ -182,7 +205,7 @@ export component DirectoriesScreen { property path_enter_error: false; - // ── Main layout ─────────────────────────────────────────────────────────── + // Main layout VerticalLayout { height: parent.height; spacing: 0px; @@ -223,6 +246,7 @@ export component DirectoriesScreen { is_referenced: entry.is_referenced; exists: entry.exists; toggle_referenced => { AppState.toggle_referenced_dir(entry.path); } + open_folder => { AppState.open_parent_folder(entry.path); } remove => { AppState.remove_include_dir(entry.path); AppState.save_settings_now(); @@ -249,6 +273,7 @@ export component DirectoriesScreen { is_included: false; is_referenced: false; exists: entry.exists; + open_folder => { AppState.open_parent_folder(entry.path); } remove => { AppState.remove_exclude_dir(entry.path); AppState.save_settings_now(); @@ -326,7 +351,7 @@ export component DirectoriesScreen { } } - // ── Volumes popup ───────────────────────────────────────────────────────── + // Volumes popup if AppState.storage_volumes.length > 0 && !AppState.custom_paths_popup_visible : Rectangle { x: 0; y: root.height - self.height - 74px; @@ -480,7 +505,7 @@ export component DirectoriesScreen { } } - // ── Custom Paths popup ──────────────────────────────────────────────────── + // Custom Paths popup if AppState.custom_paths_popup_visible : Rectangle { x: 0; y: root.height - self.height - 74px; @@ -691,7 +716,7 @@ export component DirectoriesScreen { } } - // ── Path edit popup (centered overlay) ──────────────────────────────────── + // Path edit popup (centered overlay) if AppState.path_edit_popup_visible : Rectangle { x: 0; y: 0; @@ -795,7 +820,7 @@ export component DirectoriesScreen { } } - // ── Directory statistics popup (centered overlay) ───────────────────────── + // Directory statistics popup (centered overlay) ───────────────────────── if AppState.dirs_check_popup_visible : Rectangle { x: 0; y: 0; diff --git a/cedinia/ui/momentum_scroll.slint b/cedinia/ui/momentum_scroll.slint index d6840a0e6..c7abea6e6 100644 --- a/cedinia/ui/momentum_scroll.slint +++ b/cedinia/ui/momentum_scroll.slint @@ -1,6 +1,5 @@ import { CediniaColors } from "colors.slint"; -// ───────────────────────────────────────────────────────────────────────────── // MomentumScrollView // // A vertically-scrolling container with natural fling / inertia driven by Rust. @@ -30,12 +29,9 @@ import { CediniaColors } from "colors.slint"; // lock_vertical – when true the vertical SGR will not claim new gestures // (used by the gallery when a horizontal per-row SGR owns // the pointer). -// ───────────────────────────────────────────────────────────────────────────── export component MomentumScrollView { - // ── Public interface ────────────────────────────────────────────────── - // Scroll offset (negative = scrolled down). Driven by Rust during fling. in-out property scroll_y: 0px; @@ -56,11 +52,11 @@ export component MomentumScrollView { // Stop any ongoing fling animation (call when user touches again). callback stop_momentum(); - // ── Internal scroll geometry ────────────────────────────────────────── + // ── Internal scroll geometry property max_scroll: max(0px, content_vl.preferred-height - root.height); - // ── Scrollbar indicator ─────────────────────────────────────────────── + // ── Scrollbar indicator property content_f: max(1.0, content_vl.preferred-height / 1px); property viewport_f: root.height / 1px; @@ -108,7 +104,6 @@ export component MomentumScrollView { } } - // ── Layout ──────────────────────────────────────────────────────────── sgr := SwipeGestureHandler { handle-swipe-up: !root.lock_vertical; diff --git a/cedinia/ui/results_list.slint b/cedinia/ui/results_list.slint index e345871b4..c70a335dd 100644 --- a/cedinia/ui/results_list.slint +++ b/cedinia/ui/results_list.slint @@ -1,5 +1,5 @@ import { CediniaColors } from "colors.slint"; -import { FileEntry, FileEntryIdx, ScanState } from "common.slint"; +import { ConfirmPopupAction, FileEntry, FileEntryIdx, ScanState } from "common.slint"; import { AppState } from "app_state.slint"; import { Translations } from "translations.slint"; import { FileRow, StatusChip, TouchButton } from "components.slint"; @@ -544,11 +544,11 @@ export component ResultsList { } TouchButton { - label: (AppState.confirm_popup_action == "rename" || AppState.confirm_popup_action == "rename_bad_names") ? Translations.rename_text : Translations.delete_text; + label: (AppState.confirm_popup_action == ConfirmPopupAction.Rename || AppState.confirm_popup_action == ConfirmPopupAction.RenameBadNames) ? Translations.rename_text : Translations.delete_text; horizontal-stretch: 1.0; min_h: 44px; - bg: (AppState.confirm_popup_action == "rename" || AppState.confirm_popup_action == "rename_bad_names") ? CediniaColors.accent_muted : CediniaColors.danger; - fg: (AppState.confirm_popup_action == "rename" || AppState.confirm_popup_action == "rename_bad_names") ? CediniaColors.accent_light : #ffffff; + bg: (AppState.confirm_popup_action == ConfirmPopupAction.Rename || AppState.confirm_popup_action == ConfirmPopupAction.RenameBadNames) ? CediniaColors.accent_muted : CediniaColors.danger; + fg: (AppState.confirm_popup_action == ConfirmPopupAction.Rename || AppState.confirm_popup_action == ConfirmPopupAction.RenameBadNames) ? CediniaColors.accent_light : #ffffff; clicked => { AppState.confirm_popup_ok(); } } } diff --git a/cedinia/ui/settings_components.slint b/cedinia/ui/settings_components.slint index ff25053a1..cb9333138 100644 --- a/cedinia/ui/settings_components.slint +++ b/cedinia/ui/settings_components.slint @@ -186,76 +186,89 @@ export component DropdownRow { in-out property selected; callback changed_selection(int); - height: description == "" ? 56px : 72px; + // Inline accordion – no PopupWindow, so the parent Flickable handles + // all scrolling through the options without "close on outside touch" issues. + property expanded: false; - Rectangle { - background: row_ta.has-hover ? CediniaColors.bg_elevated : CediniaColors.bg_surface; - animate background { duration: 100ms; } - - row_ta := TouchArea { - clicked => { dropdown.show(); } - } + VerticalLayout { + spacing: 0px; - HorizontalLayout { - padding-left: 16px; - padding-right: 16px; - spacing: 12px; - alignment: LayoutAlignment.center; + Rectangle { + height: root.description == "" ? 56px : 72px; + background: row_ta.has-hover ? CediniaColors.bg_elevated : CediniaColors.bg_surface; + animate background { duration: 100ms; } - Text { - text: root.options[root.selected]; - color: CediniaColors.accent_light; - font-size: 13px; - font-weight: 700; - vertical-alignment: TextVerticalAlignment.center; - overflow: TextOverflow.elide; - max-width: 180px; + row_ta := TouchArea { + clicked => { root.expanded = !root.expanded; } } - } - } - dropdown := PopupWindow { - x: 16px; - y: root.height; - width: root.width - 32px; + HorizontalLayout { + padding-left: 16px; + padding-right: 16px; + spacing: 12px; + alignment: LayoutAlignment.center; - Rectangle { - background: CediniaColors.bg_elevated; - border-radius: 8px; - border-width: 1px; - border-color: CediniaColors.divider; - drop-shadow-blur: 16px; - drop-shadow-color: #000000aa; - clip: true; + Text { + text: root.options[root.selected]; + color: CediniaColors.accent_light; + font-size: 13px; + font-weight: 700; + vertical-alignment: TextVerticalAlignment.center; + overflow: TextOverflow.elide; + horizontal-stretch: 1.0; + } + } + } - VerticalLayout { - for opt[i] in root.options : Rectangle { - height: 48px; - background: item_ta.has-hover ? CediniaColors.accent_muted : (i == root.selected ? CediniaColors.accent_muted.with-alpha(0.5) : transparent); - animate background { duration: 80ms; } + if root.expanded : VerticalLayout { + spacing: 0px; - item_ta := TouchArea { - clicked => { + for opt[i] in root.options : Rectangle { + height: 48px; + // Per-item drag tracking: prevents toggling selection on scroll release. + property _opt_moved: false; + property _opt_start_y: 0px; + + background: item_ta.has-hover + ? CediniaColors.accent_muted + : (i == root.selected ? CediniaColors.accent_muted.with-alpha(0.5) : transparent); + animate background { duration: 80ms; } + + item_ta := TouchArea { + pointer-event(e) => { + if (e.kind == PointerEventKind.down) { + parent._opt_start_y = item_ta.mouse-y; + parent._opt_moved = false; + } else if (e.kind == PointerEventKind.move) { + if (item_ta.mouse-y - parent._opt_start_y > 8px + || parent._opt_start_y - item_ta.mouse-y > 8px) { + parent._opt_moved = true; + } + } + } + clicked => { + if (!parent._opt_moved) { root.selected = i; root.changed_selection(i); AppState.save_settings_now(); - dropdown.close(); + root.expanded = false; } + parent._opt_moved = false; } + } - HorizontalLayout { - padding-left: 20px; - padding-right: 16px; - spacing: 8px; - - Text { - text: opt; - color: i == root.selected ? CediniaColors.accent_light : CediniaColors.text_primary; - font-size: 15px; - font-weight: i == root.selected ? 700 : 400; - vertical-alignment: TextVerticalAlignment.center; - horizontal-stretch: 1; - } + HorizontalLayout { + padding-left: 20px; + padding-right: 16px; + spacing: 8px; + + Text { + text: opt; + color: i == root.selected ? CediniaColors.accent_light : CediniaColors.text_primary; + font-size: 15px; + font-weight: i == root.selected ? 700 : 400; + vertical-alignment: TextVerticalAlignment.center; + horizontal-stretch: 1; } } } diff --git a/cedinia/ui/settings_screen.slint b/cedinia/ui/settings_screen.slint index e78f631d9..b1ca0f898 100644 --- a/cedinia/ui/settings_screen.slint +++ b/cedinia/ui/settings_screen.slint @@ -209,13 +209,15 @@ export component SettingsScreen { vertical-alignment: TextVerticalAlignment.center; horizontal-stretch: 1.0; } - - TouchButton { - label: Translations.notifications_enable_button_text; - bg: CediniaColors.warning; - fg: #000000; - min_h: 36px; - clicked => { AppState.open_notification_settings(); } + VerticalLayout { + alignment: LayoutAlignment.center; + TouchButton { + label: Translations.notifications_enable_button_text; + bg: CediniaColors.warning; + fg: #000000; + min_h: 36px; + clicked => { AppState.open_notification_settings(); } + } } } } diff --git a/cedinia/ui/similar_images_gallery.slint b/cedinia/ui/similar_images_gallery.slint index 69f414441..f7746fd02 100644 --- a/cedinia/ui/similar_images_gallery.slint +++ b/cedinia/ui/similar_images_gallery.slint @@ -110,11 +110,7 @@ component GalleryImageCell { height: 140px; border-radius: 8px; clip: true; - - border-width: (root.checked || root.is_reference) ? 3px : 0px; - border-color: root.is_reference ? #4488ff : CediniaColors.accent; background: CediniaColors.bg_elevated; - animate border-width { duration: 100ms; } Image { width: parent.width; @@ -123,12 +119,19 @@ component GalleryImageCell { image-fit: SimilarImagesSettings.gallery_image_fit_cover ? ImageFit.cover : ImageFit.contain; } - Rectangle { border-radius: 8px; background: ta.pressed ? #ffffff22 : transparent; } + // Border drawn after the image so it is not covered by it. + Rectangle { + border-radius: 8px; + border-width: (root.checked || root.is_reference) ? 3px : 0px; + border-color: root.is_reference ? #4488ff : CediniaColors.accent; + background: transparent; + animate border-width { duration: 100ms; } + } if root.checked : Rectangle { x: parent.width - 30px; diff --git a/cedinia/ui/translations.slint b/cedinia/ui/translations.slint index b09c6c977..976382547 100644 --- a/cedinia/ui/translations.slint +++ b/cedinia/ui/translations.slint @@ -219,6 +219,7 @@ export global Translations { in-out property ctx_menu_title_text: "Open"; in-out property ctx_open_file_text: "Open item"; in-out property ctx_open_folder_text: "Open parent folder"; + in-out property dir_open_folder_text: "Open folder"; // Gallery / delete popups in-out property gallery_delete_button_text: "Delete"; diff --git a/czkawka_cli/CLAUDE.md b/czkawka_cli/CLAUDE.md new file mode 100644 index 000000000..e48d801de --- /dev/null +++ b/czkawka_cli/CLAUDE.md @@ -0,0 +1,160 @@ +# czkawka_cli – Architecture Guide + +## Overview + +`czkawka_cli` is a thin CLI wrapper around `czkawka_core`. It handles argument +parsing, thread orchestration, progress rendering, and result output. All +scanning logic lives in `czkawka_core`; this crate only wires it to the +terminal. + +--- + +## Source Layout + +``` +czkawka_cli/src/ +├── main.rs # Entry point, thread spawning, tool dispatchers +├── commands.rs # All clap CLI argument definitions +└── progress.rs # indicatif progress bar rendering +``` + +--- + +## Execution Model + +``` +main() + ├─ Parse args (clap) + ├─ Create crossbeam channel (Sender, Receiver) + ├─ Create Arc stop_flag + ├─ spawn calculation_thread → dispatches to one of 14 tool functions + ├─ Register Ctrl+C handler → sets stop_flag = true + ├─ connect_progress(&progress_receiver) [blocks, renders progress bar] + └─ join calculation_thread → print output → exit(11) if items found +``` + +The **main thread** renders progress. The **calculation thread** runs the scan. +`progress_receiver.recv()` exits naturally when the sender drops (scan ends). + +--- + +## CLI Subcommands + +Defined via `clap` derive in `commands.rs`. Top-level enum `Commands` has 14 +variants: + +| Subcommand | Alias | Purpose | +|-------------------|------------------|-----------------------------------------| +| `Duplicates` | `dup` | Find duplicate files (hash/name/size) | +| `EmptyFolders` | `empty-folders` | Find empty directories | +| `BiggestFiles` | `big` | Find biggest or smallest files | +| `EmptyFiles` | `empty-files` | Find zero-byte files | +| `Temporary` | `temp` | Find temporary files | +| `SimilarImages` | `image` | Find similar images (perceptual hash) | +| `SameMusic` | `music` | Find duplicate music (tags/fingerprint) | +| `InvalidSymlinks` | `symlinks` | Find broken symlinks | +| `BrokenFiles` | `broken` | Find broken PDF/audio/image/archive | +| `SimilarVideos` | `video` | Find similar videos (frame hashing) | +| `BadExtensions` | `ext` | Find files with wrong extensions | +| `BadNames` | `bad-names` | Find problematic file names | +| `VideoOptimizer` | `video-optimizer`| Transcode or crop videos | +| `ExifRemover` | `exif-remover` | Remove EXIF metadata from images | + +### `CommonCliItems` (shared by every subcommand) + +- `-d` directories (required) +- `-e` excluded directories +- `-E` excluded items (glob patterns, e.g. `*/.*`) +- `-x` allowed extensions (supports macros: `IMAGE`, `VIDEO`, `MUSIC`, `TEXT`) +- `-P` excluded extensions +- `-R` disable recursive search +- `-X` (unix only) exclude other filesystems +- `-f` save text results to file +- `-C` save compact JSON results to file +- `--pretty-json-file-to-save` save pretty JSON results to file +- `-N` / `-M` suppress result/message output +- `-W` suppress non-zero exit code when items found +- `-T` thread count (0 = all CPUs) +- `-H` disable cache + +### Delete methods + +**`DMethod`** (for similarity-grouping tools): `-D NONE|AEN|AEO|ON|OO|AEB|AES|OB|OS|HARD` +**`SDMethod`** (for simple tools): `-D` delete flag, `-Q` dry-run, `-y` move-to-trash + +--- + +## Tool Dispatcher Pattern + +Every one of the 14 dispatch functions follows the same structure: + +```rust +fn tool_name(args: ToolArgs, stop_flag: &Arc, progress_sender: &Sender) -> CliOutput { + // 1. Destructure args + // 2. Build tool-specific parameter struct + let mut tool = ToolType::new(params); + // 3. Apply common settings (paths, extensions, cache, threads) + set_common_settings(&mut tool, &common_cli_items, reference_directories); + // 4. Apply tool-specific settings (file sizes, delete method, etc.) + // 5. Run scan + tool.search(stop_flag, Some(progress_sender)); + // 6. Optionally run fix (rename/delete/etc.) + // 7. Collect and return output + save_and_write_results_to_writer(&tool, &common_cli_items) +} +``` + +`set_common_settings` applies paths, recursion, extensions, cache flags, and +thread count via the `AllTraits` bound. + +--- + +## Progress Rendering (`progress.rs`) + +`connect_progress(&progress_receiver)` loops on `progress_receiver.recv()` and +renders via indicatif: + +- **Spinner** while collecting files or loading/saving cache. +- **Linear bar** `[=> ]` once the total entry or byte count is known. + +The stage label (e.g. "Calculating hashes", "Reading tags") is derived from the +`CurrentStage` enum on each `ProgressData` message. + +--- + +## Result Output + +`save_and_write_results_to_writer` writes three optional file formats (text, +compact JSON, pretty JSON) and buffers stdout output, which is printed after the +thread join. The `CliOutput.found_any_files` flag drives the exit code: + +- `exit(11)` when items are found (and `-W` is not set) — useful in scripts. +- `exit(0)` otherwise. + +--- + +## Cancellation + +`Arc` (SeqCst ordering) is shared between the Ctrl+C signal handler +and the calculation thread. The tools in `czkawka_core` poll it during scanning +and stop gracefully when it is `true`. + +--- + +## Key Dependencies + +| Crate | Purpose | +|--------------------|----------------------------------| +| `clap` 4.5 | CLI parsing (derive API) | +| `indicatif` 0.18 | Progress bars | +| `crossbeam-channel`| Unbounded channel for progress | +| `ctrlc` 3.4 | SIGINT / Ctrl+C handling | +| `humansize` 2.1 | Human-readable byte sizes | +| `czkawka_core` | All scanning logic | + +### Optional features (forwarded to `czkawka_core`) + +- `heif` – HEIF/HEIC image support (requires libheif) +- `libraw` – RAW image support (requires libraw) +- `libavif` – AVIF image support (requires libavif) +- `xdg_portal_trash` – FlatPak-compatible trash (XDG portal) diff --git a/czkawka_cli/src/commands.rs b/czkawka_cli/src/commands.rs index 8980629c1..2e86a6da5 100644 --- a/czkawka_cli/src/commands.rs +++ b/czkawka_cli/src/commands.rs @@ -11,7 +11,7 @@ use czkawka_core::re_exported::{Cropdetect, FilterType, HashAlg}; use czkawka_core::tools::broken_files::CheckedTypes; use czkawka_core::tools::same_music::MusicSimilarity; use czkawka_core::tools::similar_videos::{ALLOWED_SKIP_FORWARD_AMOUNT, ALLOWED_VID_HASH_DURATION, DEFAULT_SKIP_FORWARD_AMOUNT, crop_detect_from_str_opt}; -use czkawka_core::tools::video_optimizer::VideoCodec; +use czkawka_core::tools::video_optimizer::{NoiseReductionMethod, VideoCodec}; #[cfg(not(feature = "no_colors"))] pub const CLAP_STYLING: Styles = Styles::styled() @@ -657,6 +657,28 @@ pub struct TranscodeArgs { long_help = "Maximum video height in pixels when limit_video_size is enabled" )] pub max_height: u32, + #[clap( + long, + default_value = "none", + value_parser = parse_noise_reduction, + help = "Noise reduction method (none, hqdn3d)", + long_help = "Noise reduction filter to apply during transcoding.\nnone - disabled\nhqdn3d - general-purpose temporal/spatial denoiser; higher strength = more aggressive noise removal" + )] + pub noise_reduction: NoiseReductionMethod, + #[clap( + long, + default_value = "5", + value_parser = clap::value_parser!(u32).range(1..=10), + help = "Noise reduction strength (1-10)", + long_help = "Strength of the noise reduction filter (1-10). Higher values remove more noise but may soften fine details. Only used when --noise-reduction is not 'none'." + )] + pub noise_reduction_strength: u32, + #[clap( + long, + help = "Custom ffmpeg command", + long_help = "Custom ffmpeg command-line arguments to pass to ffmpeg during transcoding. When set, most other encoding options are ignored." + )] + pub custom_ffmpeg_command: Option, } #[derive(Debug, clap::Args)] @@ -1247,6 +1269,10 @@ fn parse_crop_mechanism(src: &str) -> Result { } } +fn parse_noise_reduction(src: &str) -> Result { + src.parse::() +} + const HELP_TEMPLATE: &str = r#" {bin} {version} diff --git a/czkawka_cli/src/main.rs b/czkawka_cli/src/main.rs index 871183662..31d39e787 100644 --- a/czkawka_cli/src/main.rs +++ b/czkawka_cli/src/main.rs @@ -432,6 +432,9 @@ fn video_optimizer(video_optimizer: VideoOptimizerArgs, stop_flag: &Arc, + progress_sender: Option<&Sender>); +} + +pub trait CommonData { + type Info; + type Parameters; + fn get_cd(&self) -> &CommonToolData; + fn get_cd_mut(&mut self) -> &mut CommonToolData; + fn found_any_items(&self) -> bool; + // + common setters/getters +} + +pub trait PrintResults: CommonData { + fn write_results(&self, w: &mut T) -> io::Result<()>; + fn print_results_to_writer(&self, w: &mut T) -> io::Result<()>; + fn save_results_to_file_as_json(&self, file: &str, pretty: bool) -> io::Result<()>; +} + +pub trait DeletingItems { + fn delete_files(&mut self, stop_flag: &Arc, + progress_sender: Option<&Sender>) -> WorkContinueStatus; +} + +pub trait FixingItems { + type FixParams; + fn fix_items(&mut self, stop_flag: &Arc, + progress_sender: Option<&Sender>, fix_params: Self::FixParams); +} + +pub trait ResultEntry { + fn get_path(&self) -> &Path; + fn get_modified_date(&self) -> u64; + fn get_size(&self) -> u64; +} + +pub trait AllTraits: DebugPrint + PrintResults + DeletingItems + CommonData + Search {} +``` + +--- + +## CommonToolData (`src/common/tool_data.rs`) + +```rust +pub struct CommonToolData { + pub(crate) tool_type: ToolType, + pub(crate) text_messages: Messages, // Accumulated warnings / errors + pub(crate) directories: Directories, // Included / excluded / reference paths + pub(crate) extensions: Extensions, // Allowed / excluded extensions + pub(crate) excluded_items: ExcludedItems, // Glob patterns (e.g. "*/.*") + pub(crate) recursive_search: bool, + pub(crate) delete_method: DeleteMethod, + pub(crate) maximal_file_size: u64, + pub(crate) minimal_file_size: u64, + pub(crate) stopped_search: bool, + pub(crate) use_cache: bool, + pub(crate) delete_outdated_cache: bool, + pub(crate) save_also_as_json: bool, + pub(crate) use_reference_folders: bool, + pub(crate) dry_run: bool, + pub(crate) move_to_trash: bool, + pub(crate) hide_hard_links: bool, +} +``` + +--- + +## DirTraversal (`src/common/dir_traversal.rs`) + +Builder-pattern filesystem traversal used by all tools: + +```rust +let result = DirTraversalBuilder::new() + .common_data(&self.common_data) + .group_by(|fe: &FileEntry| fe.size) // Groups entries by this key + .stop_flag(stop_flag) + .progress_sender(progress_sender) + .checking_method(CheckingMethod::Size) + .build() + .run(); + +match result { + DirTraversalResult::SuccessFiles { grouped_file_entries, warnings } => { … } + DirTraversalResult::Stopped => return WorkContinueStatus::Stop, +} +``` + +**Internals:** +- Rayon `into_par_iter().with_max_len(2)` for parallel folder processing. +- Two-phase: visit root dirs/files first, then recurse batch by batch. +- Applies extension, exclusion, and size filters during traversal. +- On Unix: optional filesystem-boundary checking (`exclude_other_filesystems`). +- Progress tracked via `ProgressThreadHandler` (dedicated thread, 200 ms interval). + +--- + +## Progress Reporting (`src/common/progress_stop_handler.rs`) + +```rust +pub struct ProgressData { + pub sstage: CurrentStage, // Current operation + pub current_stage_idx: u8, // Index of current stage + pub max_stage_idx: u8, // Max stages for this tool + pub entries_checked: usize, + pub entries_to_check: usize, + pub bytes_checked: u64, + pub bytes_to_check: u64, + pub tool_type: ToolType, +} +``` + +`ProgressThreadHandler` spawns a background thread that polls `AtomicUsize`/`AtomicU64` +counters and sends `ProgressData` to the frontend channel every ~200 ms. + +Call `handler.increase_items(n)` / `handler.increase_size(n)` from rayon tasks +(using `Relaxed` ordering — fast, no synchronization overhead). + +--- + +## Cancellation + +```rust +// In hot paths: +if check_if_stop_received(stop_flag) { + return WorkContinueStatus::Stop; // or break / return None in rayon +} +``` + +`stop_flag` is `Arc` with `Relaxed` ordering — sufficient for simple +"should I stop?" polling without synchronization cost. The frontend sets it to +`true`; the backend polls and stops gracefully. + +--- + +## Cache (`src/common/cache.rs`) + +```rust +// Save +save_cache_to_file_generalized::( + cache_file_name, // e.g. "cache_duplicates.bin" + &btree_map, // BTreeMap (String = canonical path) + save_also_as_json, + minimum_file_size, +); + +// Load +let (messages, opt_cache) = + load_cache_from_file_generalized_by_path::( + cache_file_name, + delete_outdated_cache, + &used_files, // Current BTreeMap to validate against + ); +``` + +- Serialized with `bincode` (binary). Optionally also as `.json`. +- Cached entries validated by path + size + mtime on load. +- 8 GB memory limit on serialization. +- Each tool has its own version constant (`CACHE_DUPLICATE_VERSION`, …). + +--- + +## Rayon Usage Patterns + +```rust +// Directory traversal +folders.into_par_iter().with_max_len(2).map(|dir| { … }).while_some().collect(); + +// Deletion with early exit +items.into_par_iter().map(|e| { + if check_if_stop_received(stop_flag) { return None; } + // … process e … + Some(result) +}).while_some().flatten().collect() +``` + +Thread count is globally controlled via `set_number_of_threads(n)` which stores +to a `LazyLock>>` and is applied via rayon's thread pool. + +--- + +## ToolType Enum (`src/common/model.rs`) + +```rust +pub enum ToolType { + Duplicate, EmptyFolders, EmptyFiles, InvalidSymlinks, + BrokenFiles, BadExtensions, BadNames, BigFile, SameMusic, + SimilarImages, SimilarVideos, TemporaryFiles, ExifRemover, + VideoOptimizer, + #[default] + None, +} +``` + +Tools that support reference directories: `Duplicate`, `SameMusic`, +`SimilarImages`, `SimilarVideos` (`may_use_reference_paths()`). + +--- + +## Key Dependencies + +| Crate | Purpose | +|-------|---------| +| `rayon` | Parallel iterators | +| `crossbeam-channel` | Progress channels | +| `blake3` | Fast file hashing | +| `image` + `image_hasher` | Image loading + perceptual hash | +| `lofty` | Audio tag reading | +| `symphonia` | Audio decoding | +| `rusty-chromaprint` | Audio fingerprinting | +| `vid_dup_finder_lib` | Video similarity | +| `bincode` | Cache serialization | +| `zip` | ZIP validation | +| `i18n-embed` + `rust-embed` | Fluent translations | +| `trash` | Move-to-trash | +| `directories-next` | Config/cache path | +| `fun_time` | `#[fun_time]` timing attribute | + +Optional (behind features): +- `heif` → `libheif-rs` – HEIC/HEIF image support +- `libraw` → `rawler` / `libraw-rs` – RAW photo support +- `libavif` – AVIF image support +- `xdg_portal_trash` – FlatPak trash via XDG portal diff --git a/czkawka_core/i18n/ar/czkawka_core.ftl b/czkawka_core/i18n/ar/czkawka_core.ftl index 48c604c69..a6c11284b 100644 --- a/czkawka_core/i18n/ar/czkawka_core.ftl +++ b/czkawka_core/i18n/ar/czkawka_core.ftl @@ -9,7 +9,7 @@ core_similarity_minimal = الحد الأدنى core_cannot_open_dir = لا يمكن فتح dir { $dir }، السبب { $reason } core_cannot_read_entry_dir = لا يمكن قراءة الإدخال في dir { $dir }، السبب { $reason } core_cannot_read_metadata_dir = لا يمكن قراءة البيانات الوصفية في dir { $dir }، السبب { $reason } -core_cannot_read_metadata_file = Cannot read metadata of file { $file }, reason { $reason } +core_cannot_read_metadata_file = لا يمكن قراءة البيانات الوصفية للملف { $file }، سبب { $reason} core_file_modified_before_epoch = يبدو أن الملف { $name } قد تم تعديله قبل يونكس Epoch core_folder_modified_before_epoch = يبدو أن المجلد { $name } قد تم تعديله قبل يونكس Epoch core_file_no_modification_date = غير قادر على الحصول على تاريخ التعديل من الملف { $name }، السبب { $reason } @@ -80,7 +80,7 @@ core_failed_to_get_video_duration = تعذر الحصول على مدة الفي core_failed_to_get_video_dimensions = فشل الحصول على أبعاد الفيديو للملف "{ $file }" core_frame_dimensions_mismatch = أبعاد الإطار لعلامة الوقت { $timestamp } لا تتطابق مع أبعاد الإطار الأول ({ $first_w }x{ $first_h }) core_failed_to_load_data_from_cache = تعذر تحميل البيانات من ملف التخزين المؤقت { $file }، والسبب { $reason } -core_failed_to_load_data_from_json_cache = تعذر تحميل البيانات من ملف ذاكرة التخزين المؤقت JSON { $file}، والسبب { $reason} +core_failed_to_load_data_from_json_cache = تعذر تحميل البيانات من ملف ذاكرة التخزين المؤقت JSON { $file }، والسبب { $reason } core_failed_to_replace_with_optimized = فشل استبدال الملف "{ $file }" بإصدار مُحسّن: { $reason } core_failed_to_write_data_to_cache = لا يمكن كتابة البيانات إلى ملف التخزين المؤقت "{ $file }"، والسبب { $reason } core_properly_saved_cache_entries = تم حفظها بشكل صحيح في الملف { $count } إدخالات ذاكرة تخزين مؤقت. @@ -95,3 +95,6 @@ core_cannot_create_or_open_cache_file = لا يمكن إنشاء أو فتح م core_cannot_set_config_cache_path = لا يمكن تعيين مسار التكوين/التخزين المؤقت - لن يتم استخدام التكوين والتخزين المؤقت. core_invalid_extension_contains_space = { $extension } ليس امتدادًا صالحًا لأنه يحتوي على مساحة فارغة داخلية core_invalid_extension_contains_dot = { $extension } ليس امتدادًا صالحًا لأنه يحتوي على نقطة داخلية + +core_ffmpeg_unknown_encoder = لا يمكن ترميز الملف { $file } باستخدام برنامج الترميز { $encoder }. إصدار FFmpeg الحالي لا يدعم هذا البرنامج الترميز. استخدم إصدارًا مختلفًا من FFmpeg يدعم البرنامج الترميز المطلوب، أو اختر برنامج ترميز آخر. +core_ffmpeg_error = خطأ في FFmpeg أثناء معالجة الملف { $file }، رمز الحالة { $code }، والسبب { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/bg/czkawka_core.ftl b/czkawka_core/i18n/bg/czkawka_core.ftl index 013c6bb6d..35fed3a84 100644 --- a/czkawka_core/i18n/bg/czkawka_core.ftl +++ b/czkawka_core/i18n/bg/czkawka_core.ftl @@ -95,3 +95,6 @@ core_cannot_create_or_open_cache_file = Не може да се създаде core_cannot_set_config_cache_path = Не може да се зададе път към config/cache - config и cache няма да бъдат използвани. core_invalid_extension_contains_space = { $extension } не е валиден разширение, защото съдържа празно пространство вътре core_invalid_extension_contains_dot = { $extension } не е валиден разширение, защото съдържа точка вътре + +core_ffmpeg_unknown_encoder = Не може да се кодира файлът { $file } с кодека { $encoder }. Текущата версия на FFmpeg не поддържа този кодек. Използвайте друга версия на FFmpeg, която поддържа необходимия кодек, или изберете друг кодек. +core_ffmpeg_error = Грешка във FFmpeg при обработката на файла { $file }, код на грешката { $code }, причина: { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/cs/czkawka_core.ftl b/czkawka_core/i18n/cs/czkawka_core.ftl index 139e5caf2..1678784e0 100644 --- a/czkawka_core/i18n/cs/czkawka_core.ftl +++ b/czkawka_core/i18n/cs/czkawka_core.ftl @@ -6,93 +6,95 @@ core_similarity_medium = Střední core_similarity_small = Malá core_similarity_very_small = Velmi malá core_similarity_minimal = Minimální -core_cannot_open_dir = Nelze otevřít adresář { $dir }, důvod { $reason } -core_cannot_read_entry_dir = Nelze načíst záznam v adresáři { $dir }, důvod { $reason } -core_cannot_read_metadata_dir = Nelze načíst metadata v adresáři { $dir }, důvod { $reason } -core_cannot_read_metadata_file = Cannot read metadata of file { $file }, reason { $reason } -core_file_modified_before_epoch = Soubor { $name } se zdá být před Unix Epoch upraven -core_folder_modified_before_epoch = Složka { $name } se zdá být upravena před Unix Epoch -core_file_no_modification_date = Nelze získat datum úpravy ze souboru { $name }, důvod { $reason } -core_folder_no_modification_date = Nelze získat datum úpravy ze složky { $name }, důvod { $reason } -core_cannot_start_scan_no_included_paths = Nemožno spustit skenování, protože nejsou zahrnuty žádné cesty -core_skip_exist_check_all_included_paths_nonexistent = Nemožno zahájit skenování, protože všechny zahrnuté cesty neexistují -core_missing_no_chosen_included_path = Neosáhlý zahrnutý cíl nebyl vybrán (vyloučený cesty mohly vyloučit všechny zahrnuté cesty) -core_reference_included_paths_same = Nelze spustit sken, kde jsou všechny platné zahrnuté cesty také odkazované cesty, zkuste ověřit nebo vypnout odkazované cesty -core_must_be_directory_or_file = Zadaná cesta musí ukazovat na platný adresář nebo soubor, ignoruje { $path } -core_excluded_paths_pointless_slash = Vyloučení / je zbytečné, protože to znamená, že nebude naskenováno žádných souborů -core_paths_unable_to_get_device_id = Nemožno získat ID zařízení z adresáře { $path } -core_needs_allowed_extensions_limited_by_tool = Nelze spustit sken, když byly všechny dostupné rozšíření v tomto nástroji ({ $extensions }) vyloučeny ze skenu -core_needs_allowed_extensions = Nedaří se spustit sken, když byly všechny rozšíření vyloučeny ze skenu -core_needs_to_set_at_least_one_broken_option = Nemožno spustit sken, ak nie je nastavená možnosť zlomeného skenovania -core_needs_to_set_at_least_one_bad_name_option = Nemožné spustit sken, pokud není nastavená možnost špatného jména pro skenování -core_ffmpeg_not_found = Nemohu najít správnou instalaci FFmpeg nebo FFprobe. Jedná se o externí programy, které je třeba nainstalovat ručně. +core_cannot_open_dir = Nebylo možné otevřít složku { $dir } – důvod: { $reason } +core_cannot_read_entry_dir = Nebylo možné číst položku ve složce { $dir } – důvod: { $reason } +core_cannot_read_metadata_dir = Nebylo možné číst metadata ve složce { $dir } – důvod: { $reason } +core_cannot_read_metadata_file = Nebylo možné číst metadata souboru { $file } – důvod: { $reason } +core_file_modified_before_epoch = Soubor { $name } se jeví, jako by byl změněn před začátkem počítání doby v unixových systémech +core_folder_modified_before_epoch = Složka { $name } se jeví jako by byla změněna před začátkem počítání doby v unixových systémech +core_file_no_modification_date = Nebylo možné získat datum změny ze souboru { $name } – důvod: { $reason } +core_folder_no_modification_date = Nebylo možné získat datum změny ze složky { $name } – důvod: { $reason } +core_cannot_start_scan_no_included_paths = Není možné spustit sken, protože nejsou zahrnuty žádné popisy umístění +core_skip_exist_check_all_included_paths_nonexistent = Není možné spusit sken, protože žádné ze zahrnutých popisů umístění neexistuje +core_missing_no_chosen_included_path = Nebyl zvolen žádný platný popis zahrnutého umístění (mohlo se stát, že ty vynechané vedly k vynechání všech zahrnutých popisů umístění) +core_reference_included_paths_same = Nelze spustit sken, kde jsou všechny platné zahrnuté popisy umístění zároveň těmi odkazovanými – zkuste ověřit nebo vypnout odkazované popisy umístění +core_path_must_exists = Je třeba, aby zadaný popis umístění existoval – { $path } bude ignorováno +core_must_be_directory_or_file = Je třeba, aby zadaný popis umístění ukazoval na platnou složku nebo soubor – { $path } bude ignorováno +core_excluded_paths_pointless_slash = Vynechání / (kořenové složky) nedává smysl, protože to znamená, že nebudou skenovány žádné soubory +core_paths_unable_to_get_device_id = Nebylo možné získat identifikátor zařízení ze složky { $path } +core_needs_allowed_extensions_limited_by_tool = Není možné spustit sken, pokud všechny přípony, které jsou k dispozici v tomto nástroji ({ $extensions }) byly vynechány ze skenu +core_needs_allowed_extensions = Není možné spustit sken, pokud byly ze skenování vynechány všechny přípony +core_needs_to_set_at_least_one_broken_option = Není možné spustit sken, pokud není nastavená žádná předvolba pro poškození, ohledně kterých skenovat +core_needs_to_set_at_least_one_bad_name_option = Není možné spustit sken, pokud není nastavená žádná předvolba nesprávně napsaného názvu, ohledně které skenovat +core_ffmpeg_not_found = Nebylo možné najít správnou instalaci FFmpeg nebo FFprobe. Jedná se o externí programy, které je třeba nainstalovat ručně. core_ffmpeg_not_found_windows = Ujistěte se, že ffmpeg.exe a ffprobe.exe jsou k dispozici v PATH nebo jsou umístěny přímo ve stejné složce jako spustitelný soubor aplikace core_invalid_symlink_infinite_recursion = Nekonečná rekurze core_invalid_symlink_non_existent_destination = Neexistující cílový soubor -core_messages_limit_reached_characters = Počet zpráv překročil nastavený limit ({ $current }/{ $limit } znaků), takže výstup byl zkrácen. Chcete-li číst celý výstup, zakažte v nastavení omezovací možnost. -core_messages_limit_reached_lines = Počet zpráv překročil nastavený limit ({ $current }/{ $limit } řádky), takže výstup byl zkrácen. Chcete-li číst celý výstup, zakažte v nastavení omezovací možnost. -core_error_moving_to_trash = Chyba při přesouvání "{ $file }" do koše: { $error } -core_error_removing = Chyba při odstraňování "{ $file }": { $error } -core_no_similarity_method_selected = Nemůže najít podobné hudební soubory bez vybrané metody podobnosti -core_failed_to_spawn_command = Selhalo spuštění příkazu: { $reason } -core_failed_to_wait_for_process = Selhalo čekání na proces: { $reason } -core_failed_to_read_video_properties = Selhalo načtení vlastností videa: { $reason } -core_failed_to_execute_ffmpeg = Selhalo provedení ffmpeg: { $reason } -core_ffmpeg_failed_with_status = ffmpeg selhal s stavem { $status }: { $stderr } (příkaz: { $command }) -core_failed_to_load_image_frame = Selhalo načtení snímku obrazu: { $reason } -core_failed_to_extract_frame = Selhalo načtení snímku v { $time } sekundách z "{ $file }": { $reason } -core_failed_to_save_thumbnail = Selhalo uložení miniatury pro "{ $file }": { $reason } -core_failed_get_frame_at_timestamp = Selhalo získání snímku v časové značce { $timestamp } z "{ $file }": { $reason } -core_failed_get_frame_from_file = Selhalo získání snímku z "{ $file }" v časové značce { $timestamp }: { $reason } -core_invalid_crop_rectangle = Neplatná obdélníková oblast pro zrání: levý={ $left }, horní={ $top }, pravý={ $right }, dolní={ $bottom } -core_failed_to_crop_video_file = Selhalo oříznutí video souboru "{ $file }": { $reason } -core_cropped_video_not_created = Zkrácený video soubor nebyl vytvořen: { $temp } -core_unable_check_hash_of_file = Nemožno zkontrolovat soubor "{ $file }", důvod { $reason } -core_error_checking_hash_of_file = Chyba nastala při kontrole souhrnu souboru "{ $file }", důvod { $reason } -core_image_zero_dimensions = Obraz má nulovou šířku nebo výšku "{ $path }" -core_image_open_failed = Nemožno otevřít soubor s obrázkem "{ $path }": { $reason } -core_not_directory_remove = Pokouším se odstranit složku "{ $path }" která není adresář -core_cannot_read_directory = Nelze číst adresář "{ $path }" -core_cannot_read_entry_from_directory = Nelze přečíst záznam z adresáře "{ $path }" -core_folder_contains_file_inside = Složka obsahuje soubor "{ $entry }" uvnitř "{ $folder }" -core_unknown_directory_entry = Nemožno určit typ súboru záznamu adresára "{ $entry }" v "{ $path }" -core_video_width_exceeds_limit = Video šířka { $width } překračuje limit { $limit } -core_video_height_exceeds_limit = Video výška { $height } překračuje limit { $limit } -core_failed_to_process_video = Selhalo zpracování video souboru { $file }: { $reason } -core_optimized_file_larger = Optimalizovaný soubor { $optimized } (velikost: { $new_size }) není menší než originální { $original } (velikost: { $original_size }) +core_messages_limit_reached_characters = Počet zpráv překročil nastavený limit ({ $current }/{ $limit } znaků), takže výstup byl zkrácen. Pokud si chcete přečíst celý výstup, vypněte v nastavení předvolbu omezování. +core_messages_limit_reached_lines = Počet zpráv překročil nastavený limit ({ $current }/{ $limit } řádků), takže výstup byl zkrácen. Pokud si chcete přečíst celý výstup, vypněte v nastavení předvolbu omezování. +core_error_moving_to_trash = Chyba při přesouvání „{ $file }“ do koše: { $error } +core_error_removing = Chyba při odstraňování „{ $file }“: { $error } +core_no_similarity_method_selected = Pokud není vybraná metoda hledání podobnosti, není možné vyhledat, které soubory s hudbou jsou si podobné +core_failed_to_spawn_command = Nepodařilo se spustit příkaz: { $reason } +core_failed_to_check_process_status = Nepodařilo se zkontrolovat stav procesu: { $reason } +core_failed_to_wait_for_process = Nepodařilo se počkat na proces: { $reason } +core_failed_to_read_video_properties = Nepodařilo se načíst vlastnosti videa: { $reason } +core_failed_to_execute_ffmpeg = Nepodařilo se spustit ffmpeg: { $reason } +core_ffmpeg_failed_with_status = ffmpeg selhalo se stavem { $status }: { $stderr } (příkaz: { $command }) +core_failed_to_load_image_frame = Nepodařilo se načíst snímek obrázku: { $reason } +core_failed_to_extract_frame = Nepodařilo se vyzískat snímek z { $time }. sekundy z „{ $file }“: { $reason } +core_failed_to_save_thumbnail = Nepodařilo se uložit náhled „{ $file }“: { $reason } +core_failed_get_frame_at_timestamp = Nepodařilo se získat snímek na časové značce { $timestamp } z „{ $file }“: { $reason } +core_failed_get_frame_from_file = Nepodařilo se získat snímek z „{ $file }“ na časové značce { $timestamp }: { $reason } +core_invalid_crop_rectangle = Neplatný obdélník výběru ořezu: vlevo={ $left }, nahoře={ $top }, vpravo={ $right }, dole={ $bottom } +core_failed_to_crop_video_file = Nepodařilo se oříznout videosoubor „{ $file }“: { $reason } +core_cropped_video_not_created = Soubor s oříznutým videem nebyl vytvořen: { $temp } +core_unable_check_hash_of_file = Nebylo možné zkontrolovat otisk soubor „{ $file }“ – důvod: { $reason } +core_error_checking_hash_of_file = Došlo k chybě při kontrole otisku souboru „{ $file }“ – důvod: { $reason } +core_image_zero_dimensions = Obrázek má nulovou šířku nebo výšku: „{ $path }“ +core_image_open_failed = Nebylo možné otevřít soubor s obrázkem „{ $path }“: { $reason } +core_not_directory_remove = Pokoušíte se odstranit složku „{ $path }“, která ale složkou není +core_cannot_read_directory = Nebylo možné číst složku „{ $path }“ +core_cannot_read_entry_from_directory = Nebylo možné číst položku ze složky „{ $path }“ +core_folder_contains_file_inside = Složka obsahuje soubor „{ $entry }“ uvnitř „{ $folder }“ +core_unknown_directory_entry = Nebylo možné zjistit typ souboru položky složky „{ $entry }“ v „{ $path }“ +core_video_width_exceeds_limit = Šířka videa { $width } překračuje limit { $limit } +core_video_height_exceeds_limit = Výška videa { $height } překračuje limit { $limit } +core_failed_to_process_video = Nepodařilo se zpracovat video soubor { $file }: { $reason } +core_optimized_file_larger = Optimalizovaný soubor { $optimized } (velikost: { $new_size }) není menší než ten původní { $original } (velikost: { $original_size }) core_unknown_codec = Neznámý kodek: { $codec } -core_invalid_video_optimizer_mode = Neplatý režim optimalizátoru videa: '{ $mode }'. Umožněné hodnoty: transkodovat, oříznout +core_invalid_video_optimizer_mode = Neplatý režim nástroje pro optimalizaci videa: „{ $mode }“. Možné hodnoty: transkódovat, oříznout core_folder_does_not_exist = Složka neexistuje: { $folder } -core_path_not_directory = Cesta není adresář: { $folder } -core_test_error_for_folder = Test chyba pro složku: { $folder } -core_unknown_exif_tag_group = Neznámá EXIF skupina značek: { $tag } -core_error_comparing_fingerprints = Chyba při porovnávání otisků prstů: { $reason } -core_failed_to_generate_thumbnail_frames_different_dimensions = Selhalo generování miniatury pro "{ $file }": extrahované snímky mají různé rozměry -core_failed_to_generate_thumbnail = Selhalo při generování miniatury pro "{ $file }": { $reason } -core_failed_to_extract_frame_at_seek_time = Selhalo načtení snímku v { $time } sekundách z "{ $file }": { $reason } -core_video_file_does_not_exist = Video soubor neexistuje (může být odstraněn mezi skenem/pozdějšími kroky): "{ $path }" -core_image_too_large = Obraz je příliš velký ({ $width }x{ $height }) - více než podporovaných { $max } pixelů -core_failed_to_get_video_metadata = Selhalo načtení metadat videa pro soubor "{ $file }": { $reason } -core_failed_to_get_video_codec = Selhalo načtení video kódu pro soubor "{ $file }" -core_failed_to_get_video_duration = Selhalo načtení délky videa pro soubor "{ $file }" -core_failed_to_get_video_dimensions = Selhalo načtení rozměrů souboru "{ $file }" +core_path_not_directory = Popis umístění není složkou: { $folder } +core_test_error_for_folder = Chyba testu pro složku: { $folder } +core_unknown_exif_tag_group = Neznámá skupina EXIF štítků: { $tag } +core_error_comparing_fingerprints = Chyba při porovnávání otisků: { $reason } +core_failed_to_generate_thumbnail_frames_different_dimensions = Nepodařilo se vytvořit náhled pro „{ $file }“: extrahované snímky mají různé rozměry +core_failed_to_generate_thumbnail = Nepodařilo se vytvořit náhled pro „{ $file }“: { $reason } +core_failed_to_extract_frame_at_seek_time = Nepodařilo se vyzískat snímku z { $time }. sekundy z „{ $file }“: { $reason } +core_video_file_does_not_exist = Video soubor neexistuje (mohl být odstraněn v období mezi skenem/pozdějšími kroky): „{ $path }“ +core_image_too_large = Obrázek je příliš velký ({ $width }x{ $height }) – více než podporovaných { $max } pixelů +core_failed_to_get_video_metadata = Nepodařilo se načíst metadata videa pro soubor „{ $file }“: { $reason } +core_failed_to_get_video_codec = Nepodařilo se zjistit video kodek pro soubor „{ $file }“ +core_failed_to_get_video_duration = Nepodařilo se načíst délku videa v souboru „{ $file }“ +core_failed_to_get_video_dimensions = Nepodařilo se zjistit rozměry videa v souboru „{ $file }“ core_frame_dimensions_mismatch = Rozměry snímku pro časové razítko { $timestamp } se neshodují s rozměry prvního snímku ({ $first_w }x{ $first_h }) -core_failed_to_load_data_from_cache = Nepodařilo se načíst data z mezipaměťového souboru { $file }, důvod { $reason } -core_failed_to_load_data_from_json_cache = Nepodařilo se načíst data z JSON mezipaměťového souboru { $file }, důvod { $reason } -core_failed_to_replace_with_optimized = Selhalo při nahrazení souboru "{ $file }" optimalizovanou verzí: { $reason } -core_failed_to_write_data_to_cache = Nelze zapisovat data do souboru dočasné paměti "{ $file }", důvod { $reason } -core_properly_saved_cache_entries = Správně uloženo do souboru { $count } políček mezipaměti. -core_video_processing_stopped_by_user = Video zpracování bylo uživatelem zastaveno -core_thumbnail_generation_stopped_by_user = Generování miniatur bylo zastaveno uživatelem -core_failed_to_optimize_video = Selhalo při optimalizaci videa "{ $file }": { $reason } -core_failed_to_crop_video = Selhalo oříznutí videa "{ $file }": { $reason } -core_failed_to_get_metadata_of_optimized_file = Selhalo načtení metadat optimalizovaného souboru "{ $file }": { $reason } -core_cannot_create_config_folder = Nemožno vytvořit složku „{ $folder }“, důvod { $reason } -core_cannot_create_cache_folder = Nemůže být vytvořena složka pro ukládání "{ $folder }", důvod { $reason } -core_cannot_create_or_open_cache_file = Nemožno vytvořit nebo otevřít mezipaměťový soubor "{ $file }", důvod { $reason } -core_cannot_set_config_cache_path = Nelze nastavit cestu k souboru s konfigurací/cache - konfigurace a cache nebude použity. -core_invalid_extension_contains_space = { $extension } není platná přípona, protože obsahuje prázdné místo uvnitř -core_invalid_extension_contains_dot = { $extension } není platná přípona, protože obsahuje tečku uvnitř +core_failed_to_load_data_from_cache = Nepodařilo se načíst data ze souboru mezipaměti { $file } – důvod: { $reason } +core_failed_to_load_data_from_json_cache = Nepodařilo se načíst data z JSON souboru mezipaměti { $file } – důvod: { $reason } +core_failed_to_replace_with_optimized = Nepodařilo se nahradit soubor „{ $file }“ optimalizovanou verzí: { $reason } +core_failed_to_write_data_to_cache = Nebylo možné zapisovat data do souboru mezipaměti „{ $file }“ – důvod: { $reason } +core_properly_saved_cache_entries = { $count } položek mezipaměti v pořádku uloženo do souboru. +core_video_processing_stopped_by_user = Zpracovávání videa bylo zastaveno uživatelem +core_thumbnail_generation_stopped_by_user = Vytváření náhledů bylo zastaveno uživatelem +core_failed_to_optimize_video = Nepodařilo se optimalizovat video „{ $file }“: { $reason } +core_failed_to_crop_video = Nepodařilo se oříznout video „{ $file }“: { $reason } +core_failed_to_get_metadata_of_optimized_file = Nepodařilo se získat metadata optimalizovaného souboru „{ $file }“: { $reason } +core_cannot_create_config_folder = Nebylo možné vytvořit složku s nastaveními „{ $folder }“ – důvod: { $reason } +core_cannot_create_cache_folder = Nebylo možné vytvořit složku pro mezipaměť „{ $folder }“ – důvod: { $reason } +core_cannot_create_or_open_cache_file = Nebylo možné vytvořit nebo otevřít soubor mezipaměti „{ $file }“ – důvod: { $reason } +core_cannot_set_config_cache_path = Nebylo možné nastavit popis umístění souboru s nastaveními/mezipamětí – nastavení a mezipaměť nebude použity. +core_invalid_extension_contains_space = { $extension } není platná přípona, protože má v sobě prázdné místo +core_invalid_extension_contains_dot = { $extension } není platná přípona, protože má v sobě tečku -core_path_must_exists = Zadaná cesta musí existovat, bez ohledu na { $path } -core_failed_to_check_process_status = Nepodařilo se zkontrolovat stav procesu: { $reason } \ No newline at end of file +core_ffmpeg_unknown_encoder = Nelze zakódovat soubor { $file } pomocí kodeku { $encoder }. Současná verze FFmpeg tuto funkci nepodporuje. Použijte jinou verzi FFmpeg s podporou požadovaného kodeku, nebo zvolte jiný kodek. +core_ffmpeg_error = Chyba FFmpeg při zpracování souboru { $file }, kód chyby { $code }, důvod { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/de/czkawka_core.ftl b/czkawka_core/i18n/de/czkawka_core.ftl index efc44cb10..b37a8e609 100644 --- a/czkawka_core/i18n/de/czkawka_core.ftl +++ b/czkawka_core/i18n/de/czkawka_core.ftl @@ -9,7 +9,7 @@ core_similarity_minimal = Minimalistisch core_cannot_open_dir = Verzeichnis { $dir } kann nicht geöffnet werden, Grund { $reason } core_cannot_read_entry_dir = Kann Eintrag in Verzeichnis { $dir } nicht lesen, Grund { $reason } core_cannot_read_metadata_dir = Metadaten können in Verzeichnis { $dir } nicht gelesen werden, Grund { $reason } -core_cannot_read_metadata_file = Cannot read metadata of file { $file }, reason { $reason } +core_cannot_read_metadata_file = Kann Metadaten von { $file } nicht lesen, Grund: { $reason } core_file_modified_before_epoch = Datei { $name } scheint vor der Unix-Epoche geändert worden zu sein core_folder_modified_before_epoch = Ordner { $name } scheint vor der Unix-Epoche geändert worden zu sein core_file_no_modification_date = Konnte das Änderungsdatum von Datei { $name } nicht abrufen, Grund { $reason } @@ -18,7 +18,10 @@ core_cannot_start_scan_no_included_paths = Kann den Scan nicht starten, da keine core_skip_exist_check_all_included_paths_nonexistent = Kann den Scan nicht starten, da alle enthaltenen Pfade nicht existieren core_missing_no_chosen_included_path = Kein gültiger einzubander Pfad ausgewählt (ausgeschlossene Pfade hätten alle einzubanderten Pfade ausschließen können) core_reference_included_paths_same = Kann den Scan nicht starten, wo alle gültigen eingeschlossenen Pfade auch referenzierte Pfade sind, bitte validieren oder die referenzierten Pfade deaktivieren +core_path_must_exists = Der angegebene Pfad muss existieren, wobei { $path } ignoriert wird +core_must_be_directory_or_file = Der angegebene Pfad muss auf ein gültiges Verzeichnis oder eine Datei verweisen, wobei { $path } ignoriert wird core_excluded_paths_pointless_slash = Ausgeschlossen / ist zwecklos, weil es bedeutet, dass keine Dateien gescannt werden +core_paths_unable_to_get_device_id = Gerät-ID konnte nicht aus dem Ordner { $path } abgerufen werden core_needs_allowed_extensions_limited_by_tool = Kann den Scan nicht starten, wenn alle verfügbaren Erweiterungen in diesem Tool ({ $extensions }) vom Scan ausgeschlossen wurden core_needs_allowed_extensions = Kann den Scan nicht starten, wenn alle Erweiterungen vom Scan ausgeschlossen wurden core_needs_to_set_at_least_one_broken_option = Kann den Scan nicht starten, wenn keine Option „defektes Element“ zum Scannen festgelegt ist @@ -93,6 +96,5 @@ core_cannot_set_config_cache_path = Kann die Konfiguration/Cache-Pfad nicht setz core_invalid_extension_contains_space = { $extension } ist keine gültige Erweiterung, da sie Leerzeichen enthält core_invalid_extension_contains_dot = { $extension } ist keine gültige Erweiterung, da sie einen Punkt enthält -core_path_must_exists = Der angegebene Pfad muss existieren, wobei { $path } ignoriert wird -core_must_be_directory_or_file = Der angegebene Pfad muss auf ein gültiges Verzeichnis oder eine Datei verweisen, wobei { $path } ignoriert wird -core_paths_unable_to_get_device_id = Gerät-ID konnte nicht aus dem Ordner { $path } abgerufen werden \ No newline at end of file +core_ffmpeg_unknown_encoder = Die Datei { $file } konnte nicht mit dem Encoder { $encoder } codiert werden. Die aktuelle FFmpeg-Version unterstützt diesen Encoder nicht. Verwenden Sie eine andere FFmpeg-Version mit der erforderlichen Codec-Unterstützung oder wählen Sie einen anderen Encoder. +core_ffmpeg_error = FFmpeg-Fehler bei der Verarbeitung von { $file }, Statuscode: { $code }, Grund: { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/el/czkawka_core.ftl b/czkawka_core/i18n/el/czkawka_core.ftl index 2ac6335af..d488f9a0f 100644 --- a/czkawka_core/i18n/el/czkawka_core.ftl +++ b/czkawka_core/i18n/el/czkawka_core.ftl @@ -95,3 +95,6 @@ core_cannot_create_or_open_cache_file = Δεν μπορεί να δημιουρ core_cannot_set_config_cache_path = Δεν μπορεί να ρυθμιστεί ο/η διαδρομή config/cache - η config και η cache δεν θα χρησιμοποιηθούν. core_invalid_extension_contains_space = { $extension } δεν είναι έγκυρος τύπος επέκτασης επειδή περιέχει κενό διάστημα μέσα core_invalid_extension_contains_dot = Το { $extension } δεν είναι έγκυρος τύπος επέκτασης επειδή περιέχει τελεία μέσα + +core_ffmpeg_unknown_encoder = Δεν είναι δυνατή η κωδικοποίηση του αρχείου { $file } χρησιμοποιώντας τον κωδικοποιητή { $encoder }. Η τρέχουσα έκδοση του FFmpeg δεν υποστηρίζει αυτόν τον κωδικοποιητή. Χρησιμοποιήστε μια διαφορετική έκδοση του FFmpeg με την απαραίτητη υποστήριξη κωδικοποιητή ή επιλέξτε έναν άλλο κωδικοποιητή. +core_ffmpeg_error = Σφάλμα FFmpeg κατά την επεξεργασία του αρχείου { $file }, κωδικός κατάστασης { $code }, αιτία: { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/en/czkawka_core.ftl b/czkawka_core/i18n/en/czkawka_core.ftl index efe0f3559..29a90aa7f 100644 --- a/czkawka_core/i18n/en/czkawka_core.ftl +++ b/czkawka_core/i18n/en/czkawka_core.ftl @@ -105,4 +105,6 @@ core_cannot_set_config_cache_path = Cannot set config/cache path - config and ca core_invalid_extension_contains_space = { $extension } is not a valid extension because it contains empty space inside core_invalid_extension_contains_dot = { $extension } is not a valid extension because it contains dot inside core_ffmpeg_unknown_encoder = Cannot encode { $file } using the { $encoder } encoder. The current FFmpeg build does not support this encoder. Use a different FFmpeg version with the required codec support or select another encoder. -core_ffmpeg_error = FFmpeg error while processing { $file }, status code { $code }, reason { $reason } \ No newline at end of file +core_ffmpeg_error = FFmpeg error while processing { $file }, status code { $code }, reason { $reason } +core_custom_command_missing_path_placeholder = Custom FFmpeg command must contain {"{PATH}"} as input file placeholder +core_custom_command_empty = Custom FFmpeg command cannot be empty \ No newline at end of file diff --git a/czkawka_core/i18n/es-ES/czkawka_core.ftl b/czkawka_core/i18n/es-ES/czkawka_core.ftl index 42ac43f82..e6d98b9f0 100644 --- a/czkawka_core/i18n/es-ES/czkawka_core.ftl +++ b/czkawka_core/i18n/es-ES/czkawka_core.ftl @@ -9,7 +9,7 @@ core_similarity_minimal = Mínimo core_cannot_open_dir = No se puede abrir el directorio { $dir }, razón { $reason } core_cannot_read_entry_dir = No se puede leer la entrada en directorio { $dir }, razón { $reason } core_cannot_read_metadata_dir = No se pueden leer metadatos en el directorio { $dir }, razón { $reason } -core_cannot_read_metadata_file = Cannot read metadata of file { $file }, reason { $reason } +core_cannot_read_metadata_file = No se pueden leer metadatos del archivo { $file }, razón { $reason} core_file_modified_before_epoch = El archivo { $name } parece haber sido modificado antes del Epoch Unix core_folder_modified_before_epoch = La carpeta { $name } parece haber sido modificada antes del Epoch Unix core_file_no_modification_date = No se puede obtener la fecha de modificación del archivo { $name }, razón { $reason } @@ -35,7 +35,13 @@ core_messages_limit_reached_lines = Número de mensajes excedido el límite esta core_error_moving_to_trash = Error al mover "{ $file }" a la papelera: { $error } core_error_removing = Error al eliminar "{ $file }": { $error } core_no_similarity_method_selected = No se pueden encontrar archivos de música similares sin un método de similitud seleccionado +core_failed_to_spawn_command = No se pudo ejecutar el comando: { $reason } +core_failed_to_check_process_status = No se pudo verificar el estado del proceso: { $reason } +core_failed_to_wait_for_process = No se pudo esperar a que finalizara el proceso: { $reason } +core_failed_to_read_video_properties = No se pudieron leer las propiedades del video: { $reason } +core_failed_to_execute_ffmpeg = No se pudo ejecutar ffmpeg: { $reason } core_ffmpeg_failed_with_status = ffmpeg falló con estado { $status }: { $stderr } (comando: { $command }) +core_failed_to_load_image_frame = No se pudo cargar el fotograma de la imagen: { $reason } core_failed_to_extract_frame = Falló al extraer el fotograma en { $time } segundos de "{ $file }": { $reason } core_failed_to_save_thumbnail = Falló al guardar el miniagujete para "{ $file }": { $reason } core_failed_get_frame_at_timestamp = Error al obtener el fotograma en el sello de tiempo { $timestamp } de "{ $file }": { $reason } @@ -90,9 +96,5 @@ core_cannot_set_config_cache_path = No se puede establecer la ruta de configurac core_invalid_extension_contains_space = { $extension } no es una extensión válida porque contiene espacios en blanco dentro core_invalid_extension_contains_dot = { $extension } no es una extensión válida porque contiene un punto dentro -core_failed_to_spawn_command = No se pudo ejecutar el comando: { $reason } -core_failed_to_check_process_status = No se pudo verificar el estado del proceso: { $reason } -core_failed_to_wait_for_process = No se pudo esperar a que finalizara el proceso: { $reason } -core_failed_to_read_video_properties = No se pudieron leer las propiedades del video: { $reason } -core_failed_to_execute_ffmpeg = No se pudo ejecutar ffmpeg: { $reason } -core_failed_to_load_image_frame = No se pudo cargar el fotograma de la imagen: { $reason } \ No newline at end of file +core_ffmpeg_unknown_encoder = No se puede codificar el archivo { $file } utilizando el codificador { $encoder }. La versión actual de FFmpeg no es compatible con este codificador. Utilice una versión diferente de FFmpeg que admita el códec requerido o seleccione otro codificador. +core_ffmpeg_error = Error de FFmpeg al procesar el archivo { $file }, código de estado { $code }, motivo { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/fa/czkawka_core.ftl b/czkawka_core/i18n/fa/czkawka_core.ftl index 2b33bc7e6..fa548b50d 100644 --- a/czkawka_core/i18n/fa/czkawka_core.ftl +++ b/czkawka_core/i18n/fa/czkawka_core.ftl @@ -82,7 +82,7 @@ core_failed_to_get_video_duration = ناموفق بود دریافت مدت زم core_failed_to_get_video_dimensions = ناموفق بود دریافت ابعاد ویدیو برای فایل "{ $file }" core_frame_dimensions_mismatch = ابعاد فریم برای زمان‌بندی { $timestamp } با ابعاد فریم اول ({ $first_w }x{ $first_h }) مطابقت ندارند core_failed_to_load_data_from_cache = ناموفق بود تا داده‌ها را از فایل کش { $file } بارگیری شود، دلیل { $reason } -core_failed_to_load_data_from_json_cache = ناموفق بود تا داده‌ها را از فایل کش JSON { $file} بارگیری شود، دلیل { $reason } +core_failed_to_load_data_from_json_cache = ناموفق بود تا داده‌ها را از فایل کش JSON { $file } بارگیری شود، دلیل { $reason } core_failed_to_replace_with_optimized = ناموفق بود فایل "{ $file }" با نسخه بهینه جایگزین شود: { $reason } core_failed_to_write_data_to_cache = امکان نوشتن داده‌ها به فایل کش "{ $file }" وجود ندارد، دلیل { $reason } core_properly_saved_cache_entries = ذخیره شده به درستی در فایل { $count } ورودی کش. @@ -97,3 +97,6 @@ core_cannot_create_or_open_cache_file = امکان ایجاد یا باز کرد core_cannot_set_config_cache_path = امکان تنظیم مسیر config/cache وجود ندارد - config و cache استفاده نخواهند شد. core_invalid_extension_contains_space = { $extension } یک پسوند معتبر نیست زیرا حاوی فاصله خالی در داخل است core_invalid_extension_contains_dot = { $extension } یک پسوند معتبر نیست زیرا شامل نقطه داخل آن است + +core_ffmpeg_unknown_encoder = امکان رمزگذاری فایل { $file } با استفاده از رمزگذار { $encoder } وجود ندارد. نسخه فعلی FFmpeg از این رمزگذار پشتیبانی نمی‌کند. از یک نسخه دیگر از FFmpeg که از کدک مورد نیاز پشتیبانی می‌کند، استفاده کنید یا یک رمزگذار دیگر را انتخاب کنید. +core_ffmpeg_error = خطای FFmpeg در حین پردازش فایل { $file }، کد خطا: { $code }، دلیل: { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/fr/czkawka_core.ftl b/czkawka_core/i18n/fr/czkawka_core.ftl index c92858d2a..fb44ffb0d 100644 --- a/czkawka_core/i18n/fr/czkawka_core.ftl +++ b/czkawka_core/i18n/fr/czkawka_core.ftl @@ -9,7 +9,7 @@ core_similarity_minimal = Minimale core_cannot_open_dir = Impossible d’ouvrir le répertoire { $dir }. Raison : { $reason } core_cannot_read_entry_dir = Impossible de lire l'entrée dans le répertoire { $dir }. Raison : { $reason } core_cannot_read_metadata_dir = Impossible de lire les métadonnées dans le répertoire { $dir }. Raison  : { $reason } -core_cannot_read_metadata_file = Cannot read metadata of file { $file }, reason { $reason } +core_cannot_read_metadata_file = Impossible de lire les métadonnées du fichier { $file }. Raison  : { $reason } core_file_modified_before_epoch = Le fichier { $name } semble avoir été modifié avant l'époque Unix core_folder_modified_before_epoch = Le dossier { $name } semble avoir été modifié avant l'époque Unix core_file_no_modification_date = Impossible d'obtenir la date de modification du fichier { $name }. Raison  : { $reason } @@ -35,6 +35,11 @@ core_messages_limit_reached_lines = Le nombre de messages a dépassé la limite core_error_moving_to_trash = Erreur lors du déplacement de "{ $file }" vers la poubelle : { $error } core_error_removing = Erreur lors de la suppression de "{ $file }": { $error } core_no_similarity_method_selected = Impossible de trouver des fichiers musicaux similaires sans une méthode de similarité sélectionnée +core_failed_to_spawn_command = Impossible de lancer la commande : { $reason } +core_failed_to_check_process_status = Impossible de vérifier l'état du processus : { $reason } +core_failed_to_wait_for_process = Impossible d'attendre la fin du processus : { $reason } +core_failed_to_read_video_properties = Impossible de lire les propriétés de la vidéo : { $reason } +core_failed_to_execute_ffmpeg = Impossible d'exécuter ffmpeg : { $reason } core_ffmpeg_failed_with_status = ffmpeg a échoué avec le statut { $status } : { $stderr } (commande : { $command }) core_failed_to_load_image_frame = Erreur de chargement du cadre d'image : { $reason } core_failed_to_extract_frame = Échec de l'extraction du cadre à { $time } secondes depuis "{ $file }": { $reason } @@ -56,12 +61,14 @@ core_unknown_directory_entry = Impossible de déterminer le type de fichier de l core_video_width_exceeds_limit = La largeur de la vidéo { $width } dépasse la limite de { $limit } core_video_height_exceeds_limit = Vidéo hauteur { $height } dépasse la limite de { $limit } core_failed_to_process_video = Échec du traitement du fichier vidéo { $file }: { $reason } +core_optimized_file_larger = Le fichier optimisé { $optimized } (taille : { $new_size }) n'est pas plus petit que le fichier original { $original } (taille : { $original_size }) core_unknown_codec = Codec inconnu : { $codec } core_invalid_video_optimizer_mode = Mode d'optimisation vidéo non valide : '{ $mode }'. Valeurs autorisées : transcode, crop core_folder_does_not_exist = Le dossier n’existe pas : { $folder } core_path_not_directory = Le chemin n'est pas un répertoire : { $folder } core_test_error_for_folder = Erreur de test pour le dossier : { $folder } core_unknown_exif_tag_group = Groupe de balises EXIF inconnu : { $tag } +core_error_comparing_fingerprints = Erreur lors de la comparaison des empreintes : { $reason } core_failed_to_generate_thumbnail_frames_different_dimensions = Échec de génération de miniature pour "{ $file }": les images extraites ont des dimensions différentes core_failed_to_generate_thumbnail = Échec de la génération de miniature pour "{ $file }": { $reason } core_failed_to_extract_frame_at_seek_time = Échec de l'extraction du cadre à { $time } secondes depuis "{ $file }": { $reason } @@ -89,10 +96,5 @@ core_cannot_set_config_cache_path = Impossible de définir le chemin de config/c core_invalid_extension_contains_space = { $extension } n'est pas une extension valide car elle contient des espaces vides à l'intérieur core_invalid_extension_contains_dot = { $extension } n'est pas une extension valide car elle contient un point à l'intérieur -core_failed_to_spawn_command = Impossible de lancer la commande : { $reason } -core_failed_to_check_process_status = Impossible de vérifier l'état du processus : { $reason } -core_failed_to_wait_for_process = Impossible d'attendre la fin du processus : { $reason } -core_failed_to_read_video_properties = Impossible de lire les propriétés de la vidéo : { $reason } -core_failed_to_execute_ffmpeg = Impossible d'exécuter ffmpeg : { $reason } -core_optimized_file_larger = Le fichier optimisé { $optimized } (taille : { $new_size }) n'est pas plus petit que le fichier original { $original } (taille : { $original_size }) -core_error_comparing_fingerprints = Erreur lors de la comparaison des empreintes : { $reason } \ No newline at end of file +core_ffmpeg_unknown_encoder = Impossible d'encoder le fichier { $file } avec l'encodeur { $encoder }. La version actuelle de FFmpeg ne prend pas en charge cet encodeur. Utilisez une autre version de FFmpeg qui prend en charge le codec requis, ou sélectionnez un autre encodeur. +core_ffmpeg_error = Erreur FFmpeg lors du traitement de { $file }, code de statut { $code }, raison : { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/hi/czkawka_core.ftl b/czkawka_core/i18n/hi/czkawka_core.ftl new file mode 100644 index 000000000..773429649 --- /dev/null +++ b/czkawka_core/i18n/hi/czkawka_core.ftl @@ -0,0 +1,100 @@ +# Core +core_similarity_original = मूल पाठ +core_similarity_very_high = बहुत उच्च +core_similarity_high = ऊँचा +core_similarity_medium = माध्यम +core_similarity_small = छोटा। +core_similarity_very_small = बहुत छोटा। +core_similarity_minimal = न्यूनतम +core_cannot_open_dir = Cannot open dir { $dir }, reason { $reason } +core_cannot_read_entry_dir = Cannot read entry in dir { $dir }, reason { $reason } +core_cannot_read_metadata_dir = Cannot read metadata in dir { $dir }, reason { $reason } +core_cannot_read_metadata_file = Cannot read metadata of file { $file }, reason { $reason } +core_file_modified_before_epoch = File { $name } seems to have been modified before the Unix Epoch +core_folder_modified_before_epoch = Folder { $name } seems to have been modified before the Unix Epoch +core_file_no_modification_date = Unable to get modification date from file { $name }, reason { $reason } +core_folder_no_modification_date = Unable to get modification date from folder { $name }, reason { $reason } +core_cannot_start_scan_no_included_paths = स्कैन शुरू नहीं किया जा सकता, क्योंकि इसमें कोई भी पथ शामिल नहीं है +core_skip_exist_check_all_included_paths_nonexistent = स्कैन शुरू नहीं किया जा सकता, क्योंकि शामिल सभी पथ मौजूद नहीं हैं +core_missing_no_chosen_included_path = कोई भी मान्य शामिल पथ नहीं चुना गया (बहिष्कृत पथों ने सभी शामिल पथों को बाहर कर दिया हो सकता है)। +core_reference_included_paths_same = स्कैन शुरू नहीं किया जा सकता यदि सभी मान्य शामिल पथ भी संदर्भित पथ हैं। कृपया संदर्भित पथों को मान्य करने या अक्षम करने का प्रयास करें। +core_path_must_exists = दिए गए पाथ का अस्तित्व होना चाहिए, {$path} को अनदेखा करते हुए। +core_must_be_directory_or_file = दिए गए पथ को एक वैध फ़ोल्डर या फ़ाइल की ओर इंगित करना चाहिए, { $path } को छोड़कर +core_excluded_paths_pointless_slash = "Excluding /" का उपयोग करना निरर्थक है, क्योंकि इसका मतलब है कि कोई भी फ़ाइल स्कैन नहीं की जाएगी +core_paths_unable_to_get_device_id = डिवाइस आईडी फ़ोल्डर { $path } से प्राप्त करने में असमर्थ। +core_needs_allowed_extensions_limited_by_tool = यह स्कैन शुरू नहीं हो सकता, जब इस टूल में उपलब्ध सभी एक्सटेंशन ({$extensions}) स्कैन से बाहर कर दिए गए हों +core_needs_allowed_extensions = स्कैन शुरू नहीं किया जा सकता, जब सभी एक्सटेंशन को स्कैन से बाहर कर दिया गया हो +core_needs_to_set_at_least_one_broken_option = स्कैन शुरू नहीं हो पा रहा है, जब तक कि स्कैन करने के लिए कोई "टूटा हुआ" विकल्प सेट न किया गया हो। +core_needs_to_set_at_least_one_bad_name_option = स्कैन शुरू नहीं किया जा सकता, यदि "खराब नाम" के लिए स्कैन करने का कोई विकल्प सेट नहीं है +core_ffmpeg_not_found = FFmpeg या FFprobe का सही इंस्टॉलेशन नहीं मिला। ये बाहरी प्रोग्राम हैं जिन्हें मैन्युअल रूप से इंस्टॉल करना होगा. +core_ffmpeg_not_found_windows = सुनिश्चित करें कि ffmpeg.exe और ffprobe.exe या तो PATH में उपलब्ध हैं, या सीधे एप्लिकेशन निष्पादन योग्य फ़ाइल के समान फ़ोल्डर में स्थित हैं। +core_invalid_symlink_infinite_recursion = अनंत पुनरावृत्ति। +core_invalid_symlink_non_existent_destination = अस्तित्वहीन गंतव्य फ़ाइल +core_messages_limit_reached_characters = Number of messages exceeded the set limit ({ $current }/{ $limit } characters), so the output was truncated. To read the full output, disable the limiting option in settings. +core_messages_limit_reached_lines = Number of messages exceeded the set limit ({ $current }/{ $limit } lines), so the output was truncated. To read the full output, disable the limiting option in settings. +core_error_moving_to_trash = "{ $file }" को ट्रैश में ले जाने के दौरान त्रुटि: { $error } +core_error_removing = "{ $file }" को हटाने के दौरान त्रुटि: { $error } +core_no_similarity_method_selected = समान संगीत फ़ाइलें नहीं मिल पा रही हैं क्योंकि कोई समानता विधि नहीं चुनी गई है +core_failed_to_spawn_command = कमांड शुरू करने में विफल: { $reason } +core_failed_to_check_process_status = प्रक्रिया की स्थिति जाँच करने में विफल: { $reason } +core_failed_to_wait_for_process = प्रक्रिया के लिए प्रतीक्षा करने में विफल: { $reason } +core_failed_to_read_video_properties = वीडियो की जानकारी पढ़ने में विफल: { $reason } +core_failed_to_execute_ffmpeg = ffmpeg को चलाने में त्रुटि: { $reason } +core_ffmpeg_failed_with_status = ffmpeg विफल हो गया, त्रुटि कोड: { $status }, त्रुटि संदेश: { $stderr } (कमांड: { $command }) +core_failed_to_load_image_frame = छवि फ़्रेम लोड करने में विफल: { $reason } +core_failed_to_extract_frame = "{ $file }" फ़ाइल से { $time } सेकंड पर फ्रेम निकालने में विफल: { $reason } +core_failed_to_save_thumbnail = थंबनेल को "{ $file }" के लिए सहेजने में विफल: { $reason } +core_failed_get_frame_at_timestamp = निर्धारित समय { $timestamp } पर फ़ाइल "{ $file }" से फ़्रेम प्राप्त करने में विफलता: { $reason } +core_failed_get_frame_from_file = "{ $file }" फ़ाइल से दिए गए समय { $timestamp } पर फ़्रेम प्राप्त करने में विफल: { $reason }। +core_invalid_crop_rectangle = अमान्य क्रॉप आयत: बायां={ $left }, ऊपर={ $top }, दायां={ $right }, नीचे={ $bottom } +core_failed_to_crop_video_file = वीडियो फ़ाइल "{ $file }" को क्रॉप करने में विफल: { $reason } +core_cropped_video_not_created = काटित वीडियो फ़ाइल नहीं बनाई जा सकी: { $temp } +core_unable_check_hash_of_file = फ़ाइल "{ $file }" का हैश जाँचने में असमर्थ, कारण: { $reason } +core_error_checking_hash_of_file = फ़ाइल "{ $file }" के हैश की जाँच करते समय एक त्रुटि हुई, कारण: { $reason } +core_image_zero_dimensions = छवि की चौड़ाई या ऊंचाई शून्य है "{ $path }" +core_image_open_failed = इमेज फ़ाइल "{ $path }" खोलने में असमर्थ: { $reason } +core_not_directory_remove = फ़ोल्डर "{ $path }" को हटाने की कोशिश की जा रही है, लेकिन यह कोई डायरेक्टरी नहीं है +core_cannot_read_directory = निर्देशिका "{ $path }" को पढ़ने में असमर्थ +core_cannot_read_entry_from_directory = "{ $path }" डायरेक्टरी से एंट्री पढ़ने में असमर्थ। +core_folder_contains_file_inside = फ़ोल्डर में फ़ाइल "{ $entry }" है, जो कि फ़ोल्डर "{ $folder }" के अंदर स्थित है। +core_unknown_directory_entry = "{ $path }" के अंदर स्थित डायरेक्टरी प्रविष्टि "{ $entry }" का फ़ाइल प्रकार निर्धारित करने में असमर्थ। +core_video_width_exceeds_limit = वीडियो की चौड़ाई { $width }, { $limit } की सीमा से अधिक है +core_video_height_exceeds_limit = वीडियो की ऊंचाई { $height } सीमा { $limit } से अधिक है +core_failed_to_process_video = वीडियो फ़ाइल { $file } को प्रोसेस करने में विफल: { $reason } +core_optimized_file_larger = अनुकूलित फ़ाइल { $optimized } (आकार: { $new_size }) मूल फ़ाइल { $original } (आकार: { $original_size }) से छोटी नहीं है +core_unknown_codec = अज्ञात कोडेक: { $codec } +core_invalid_video_optimizer_mode = अमान्य वीडियो ऑप्टिमाइज़र मोड: '{ $mode }'। अनुमत मान: ट्रांसकोड, क्रॉप +core_folder_does_not_exist = फ़ोल्डर मौजूद नहीं है: { $folder } +core_path_not_directory = पथ एक डायरेक्टरी नहीं है: { $folder } +core_test_error_for_folder = फ़ोल्डर के लिए त्रुटि परीक्षण: { $folder } +core_unknown_exif_tag_group = अज्ञात EXIF टैग समूह: { $tag } +core_error_comparing_fingerprints = फिंगरप्रिंट की तुलना करते समय त्रुटि: { $reason } +core_failed_to_generate_thumbnail_frames_different_dimensions = "{ $file }" के लिए थंबनेल बनाने में विफल: निकाले गए फ्रेमों का आकार अलग-अलग है +core_failed_to_generate_thumbnail = "{ $file }" के लिए थंबनेल बनाने में विफल: { $reason } +core_failed_to_extract_frame_at_seek_time = "{ $file }" फ़ाइल से { $time } सेकंड पर फ्रेम निकालने में विफलता: { $reason }। +core_video_file_does_not_exist = वीडियो फ़ाइल मौजूद नहीं है (यह स्कैन/बाद के चरणों के बीच में हटाया गया हो सकता है): "{ $path }" +core_image_too_large = छवि बहुत बड़ी है ({$width}x{$height}) - समर्थित {$max} पिक्सेल से अधिक। +core_failed_to_get_video_metadata = फ़ाइल "{ $file }" के लिए वीडियो मेटाडेटा प्राप्त करने में विफल: { $reason } +core_failed_to_get_video_codec = फ़ाइल "{ $file }" के लिए वीडियो कोडेक प्राप्त करने में विफल। +core_failed_to_get_video_duration = फ़ाइल "{ $file }" के लिए वीडियो की अवधि प्राप्त करने में विफल। +core_failed_to_get_video_dimensions = फ़ाइल "{ $file }" के लिए वीडियो आयाम प्राप्त करने में विफल। +core_frame_dimensions_mismatch = टाइमस्टैम्प { $timestamp } के लिए फ्रेम का आकार पहले फ्रेम के आकार ({ $first_w }x{ $first_h }) से मेल नहीं खाता +core_failed_to_load_data_from_cache = कैश फ़ाइल { $file } से डेटा लोड करने में विफल, कारण: { $reason } +core_failed_to_load_data_from_json_cache = JSON कैश फ़ाइल { $file } से डेटा लोड करने में विफल, कारण: { $reason } +core_failed_to_replace_with_optimized = फ़ाइल "{ $file }" को अनुकूलित संस्करण से बदलने में विफल: { $reason } +core_failed_to_write_data_to_cache = कैश फ़ाइल "{ $file }" में डेटा लिखने में असमर्थ, कारण: { $reason } +core_properly_saved_cache_entries = सही तरीके से फ़ाइल में { $count } कैश प्रविष्टियाँ सहेजी गईं. +core_video_processing_stopped_by_user = वीडियो प्रोसेसिंग उपयोगकर्ता द्वारा रोक दिया गया था +core_thumbnail_generation_stopped_by_user = उपयोगकर्ता द्वारा थंबनेल जनरेशन रोक दिया गया। +core_failed_to_optimize_video = वीडियो "{ $file }" को ऑप्टिमाइज़ करने में विफल: { $reason } +core_failed_to_crop_video = वीडियो "{ $file }" को क्रॉप करने में विफल: { $reason } +core_failed_to_get_metadata_of_optimized_file = अनुकूलित फ़ाइल "{ $file }" का मेटाडेटा प्राप्त करने में विफल: { $reason } +core_cannot_create_config_folder = कॉन्फ़िगरेशन फ़ोल्डर "{ $folder }" बनाने में असमर्थ, कारण: { $reason } +core_cannot_create_cache_folder = कैश फ़ोल्डर "{ $folder }" बनाने में असमर्थ, कारण: { $reason } +core_cannot_create_or_open_cache_file = कैश फ़ाइल "{ $file }" बनाने या खोलने में असमर्थ, कारण: { $reason } +core_cannot_set_config_cache_path = कॉन्फ़िगरेशन/कैश पाथ सेट नहीं किया जा सका - कॉन्फ़िगरेशन और कैश का उपयोग नहीं किया जाएगा. +core_invalid_extension_contains_space = { $extension } एक मान्य एक्सटेंशन नहीं है क्योंकि इसमें अंदर खाली स्थान है +core_invalid_extension_contains_dot = { $extension } एक मान्य एक्सटेंशन नहीं है क्योंकि इसमें एक डॉट मौजूद है + +core_ffmpeg_unknown_encoder = { $file } फ़ाइल को { $encoder } एन्कोडर का उपयोग करके एन्कोड नहीं किया जा सकता। वर्तमान FFmpeg संस्करण इस एन्कोडर का समर्थन नहीं करता है। आवश्यक कोडेक समर्थन वाले किसी अन्य FFmpeg संस्करण का उपयोग करें या किसी अन्य एन्कोडर का चयन करें।. +core_ffmpeg_error = FFmpeg में त्रुटि: फ़ाइल { $file } को संसाधित करते समय, स्थिति कोड { $code }, कारण { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/id/czkawka_core.ftl b/czkawka_core/i18n/id/czkawka_core.ftl new file mode 100644 index 000000000..871f987db --- /dev/null +++ b/czkawka_core/i18n/id/czkawka_core.ftl @@ -0,0 +1,100 @@ +# Core +core_similarity_original = Teks asli +core_similarity_very_high = Sangat Tinggi +core_similarity_high = Tinggi +core_similarity_medium = Sedang +core_similarity_small = Kecil +core_similarity_very_small = Sangat Kecil +core_similarity_minimal = Minimal +core_cannot_open_dir = Cannot open dir { $dir }, reason { $reason } +core_cannot_read_entry_dir = Cannot read entry in dir { $dir }, reason { $reason } +core_cannot_read_metadata_dir = Cannot read metadata in dir { $dir }, reason { $reason } +core_cannot_read_metadata_file = Cannot read metadata of file { $file }, reason { $reason } +core_file_modified_before_epoch = File { $name } seems to have been modified before the Unix Epoch +core_folder_modified_before_epoch = Folder { $name } seems to have been modified before the Unix Epoch +core_file_no_modification_date = Unable to get modification date from file { $name }, reason { $reason } +core_folder_no_modification_date = Unable to get modification date from folder { $name }, reason { $reason } +core_cannot_start_scan_no_included_paths = Tidak dapat memulai pemindaian, karena tidak ada jalur yang disertakan +core_skip_exist_check_all_included_paths_nonexistent = Tidak dapat memulai pemindaian, karena semua jalur yang disertakan tidak ada +core_missing_no_chosen_included_path = Tidak ada jalur yang valid yang dipilih (jalur yang dikecualikan mungkin telah mengecualikan semua jalur yang disertakan) +core_reference_included_paths_same = Tidak dapat memulai pemindaian jika semua jalur yang valid yang disertakan juga merupakan jalur yang dirujuk. Coba validasi atau nonaktifkan jalur yang dirujuk +core_path_must_exists = Jalur yang diberikan harus ada, mengabaikan { $path } +core_must_be_directory_or_file = Jalur yang diberikan harus mengarah ke direktori atau berkas yang valid, dengan mengabaikan { $path } +core_excluded_paths_pointless_slash = Menghilangkan "/"-nya tidak ada gunanya, karena itu berarti tidak ada file yang akan dipindai +core_paths_unable_to_get_device_id = Tidak dapat memperoleh ID perangkat dari folder { $path } +core_needs_allowed_extensions_limited_by_tool = Tidak dapat memulai pemindaian jika semua ekstensi yang tersedia di alat ini ({$extensions}) dikecualikan dari pemindaian +core_needs_allowed_extensions = Tidak dapat memulai pemindaian jika semua ekstensi dikecualikan dari pemindaian +core_needs_to_set_at_least_one_broken_option = Tidak dapat memulai pemindaian jika tidak ada opsi "rusak" yang dipilih untuk dipindai +core_needs_to_set_at_least_one_bad_name_option = Tidak dapat memulai pemindaian jika tidak ada opsi "nama buruk" yang dipilih untuk dipindai +core_ffmpeg_not_found = Tidak dapat menemukan instalasi FFmpeg atau FFprobe yang sesuai. Ini adalah program eksternal yang harus diinstal secara manual. +core_ffmpeg_not_found_windows = Pastikan bahwa ffmpeg.exe dan ffprobe.exe tersedia di dalam PATH atau ditempatkan langsung di folder yang sama dengan file executable aplikasi +core_invalid_symlink_infinite_recursion = Rekursi tak terbatas +core_invalid_symlink_non_existent_destination = File tujuan tidak ditemukan +core_messages_limit_reached_characters = Number of messages exceeded the set limit ({ $current }/{ $limit } characters), so the output was truncated. To read the full output, disable the limiting option in settings. +core_messages_limit_reached_lines = Number of messages exceeded the set limit ({ $current }/{ $limit } lines), so the output was truncated. To read the full output, disable the limiting option in settings. +core_error_moving_to_trash = Terjadi kesalahan saat memindahkan "{ $file }" ke tempat sampah: { $error } +core_error_removing = Terjadi kesalahan saat menghapus "{ $file }": { $error } +core_no_similarity_method_selected = Tidak dapat menemukan file musik serupa tanpa metode pencarian kesamaan yang dipilih +core_failed_to_spawn_command = Gagal menjalankan perintah: { $reason } +core_failed_to_check_process_status = Gagal memeriksa status proses: { $reason } +core_failed_to_wait_for_process = Gagal menunggu proses: { $reason } +core_failed_to_read_video_properties = Gagal membaca properti video: { $reason } +core_failed_to_execute_ffmpeg = Gagal menjalankan ffmpeg: { $reason } +core_ffmpeg_failed_with_status = ffmpeg gagal dengan status { $status }: { $stderr } (perintah: { $command }) +core_failed_to_load_image_frame = Gagal memuat bingkai gambar: { $reason } +core_failed_to_extract_frame = Gagal mengekstrak frame pada detik { $time } dari "{ $file }": { $reason } +core_failed_to_save_thumbnail = Gagal menyimpan thumbnail untuk "{ $file }": { $reason } +core_failed_get_frame_at_timestamp = Gagal mendapatkan frame pada waktu { $timestamp } dari "{ $file }": { $reason } +core_failed_get_frame_from_file = Gagal mendapatkan frame dari "{ $file }" pada waktu { $timestamp }: { $reason } +core_invalid_crop_rectangle = Area pemotongan tidak valid: kiri={ $left }, atas={ $top }, kanan={ $right }, bawah={ $bottom } +core_failed_to_crop_video_file = Gagal memotong file video "{ $file }": { $reason } +core_cropped_video_not_created = Berkas video hasil pemotongan tidak berhasil dibuat: { $temp } +core_unable_check_hash_of_file = Tidak dapat memeriksa hash dari file "{ $file }", alasannya { $reason } +core_error_checking_hash_of_file = Terjadi kesalahan saat memeriksa hash dari file "{ $file }", dengan alasan { $reason } +core_image_zero_dimensions = Gambar memiliki lebar atau tinggi sebesar nol: "{ $path }" +core_image_open_failed = Tidak dapat membuka berkas gambar "{ $path }": { $reason } +core_not_directory_remove = Sedang mencoba menghapus folder "{ $path }" yang bukan merupakan direktori +core_cannot_read_directory = Tidak dapat membaca direktori "{ $path }" +core_cannot_read_entry_from_directory = Tidak dapat membaca entri dari direktori "{ $path }" +core_folder_contains_file_inside = Folder ini berisi file "{ $entry }" di dalam folder "{ $folder }" +core_unknown_directory_entry = Tidak dapat menentukan jenis berkas dari entri direktori "{ $entry }" di dalam "{ $path }" +core_video_width_exceeds_limit = Lebar video { $width } melebihi batas maksimum { $limit } +core_video_height_exceeds_limit = Tinggi video { $height } melebihi batas { $limit } +core_failed_to_process_video = Gagal memproses berkas video { $file }: { $reason } +core_optimized_file_larger = Berkas yang telah dioptimalkan { $optimized } (ukuran: { $new_size }) tidak lebih kecil dari berkas asli { $original } (ukuran: { $original_size }) +core_unknown_codec = Codec tidak dikenal: { $codec } +core_invalid_video_optimizer_mode = Mode pengoptimalan video tidak valid: '{ $mode }'. Nilai yang diperbolehkan: transcode, crop +core_folder_does_not_exist = Folder tidak ditemukan: { $folder } +core_path_not_directory = Jalur bukan merupakan direktori: { $folder } +core_test_error_for_folder = Deteksi kesalahan untuk folder: { $folder } +core_unknown_exif_tag_group = Grup tag EXIF yang tidak dikenal: { $tag } +core_error_comparing_fingerprints = Terjadi kesalahan saat membandingkan sidik jari: { $reason } +core_failed_to_generate_thumbnail_frames_different_dimensions = Gagal menghasilkan thumbnail untuk "{ $file }": frame yang diekstrak memiliki dimensi yang berbeda +core_failed_to_generate_thumbnail = Gagal membuat thumbnail untuk "{ $file }": { $reason } +core_failed_to_extract_frame_at_seek_time = Gagal mengekstrak frame pada detik { $time } dari "{ $file }": { $reason } +core_video_file_does_not_exist = Berkas video tidak ditemukan (mungkin telah dihapus antara proses pemindaian/langkah selanjutnya): "{ $path }" +core_image_too_large = Gambar terlalu besar ({$width}x{$height}) - melebihi jumlah piksel yang didukung yaitu {$max} +core_failed_to_get_video_metadata = Gagal mendapatkan metadata video untuk file "{ $file }": { $reason } +core_failed_to_get_video_codec = Gagal mendapatkan codec video untuk file "{ $file }" +core_failed_to_get_video_duration = Gagal mendapatkan durasi video untuk file "{ $file }" +core_failed_to_get_video_dimensions = Gagal mendapatkan dimensi video untuk berkas "{ $file }" +core_frame_dimensions_mismatch = Dimensi frame untuk stempel waktu { $timestamp } tidak sesuai dengan dimensi frame pertama ({ $first_w }x{ $first_h }) +core_failed_to_load_data_from_cache = Gagal memuat data dari file cache { $file }, alasan: { $reason } +core_failed_to_load_data_from_json_cache = Gagal memuat data dari file cache JSON { $file }, alasannya: { $reason } +core_failed_to_replace_with_optimized = Gagal mengganti file "{ $file }" dengan versi yang lebih optimal: { $reason } +core_failed_to_write_data_to_cache = Tidak dapat menulis data ke file cache "{ $file }", alasannya: { $reason } +core_properly_saved_cache_entries = Entri cache sebanyak { $count } berhasil disimpan ke dalam file. +core_video_processing_stopped_by_user = Pemrosesan video dihentikan oleh pengguna +core_thumbnail_generation_stopped_by_user = Pembuatan thumbnail dihentikan oleh pengguna +core_failed_to_optimize_video = Gagal mengoptimalkan video "{ $file }": { $reason } +core_failed_to_crop_video = Gagal memotong video "{ $file }": { $reason } +core_failed_to_get_metadata_of_optimized_file = Gagal mendapatkan metadata dari file yang dioptimalkan "{ $file }": { $reason } +core_cannot_create_config_folder = Tidak dapat membuat folder konfigurasi "{ $folder }", alasannya: { $reason } +core_cannot_create_cache_folder = Tidak dapat membuat folder cache "{ $folder }", alasannya { $reason } +core_cannot_create_or_open_cache_file = Tidak dapat membuat atau membuka file cache "{ $file }", alasannya { $reason } +core_cannot_set_config_cache_path = Tidak dapat mengatur jalur konfigurasi/cache - konfigurasi dan cache tidak akan digunakan. +core_invalid_extension_contains_space = { $extension } bukanlah ekstensi yang valid karena mengandung spasi di dalamnya +core_invalid_extension_contains_dot = { $extension } bukanlah ekstensi yang valid karena mengandung titik di dalamnya + +core_ffmpeg_unknown_encoder = Tidak dapat mengenkode { $file } menggunakan encoder { $encoder }. Versi FFmpeg yang sedang digunakan tidak mendukung encoder ini. Gunakan versi FFmpeg yang berbeda yang mendukung codec yang diperlukan, atau pilih encoder lain. +core_ffmpeg_error = Terjadi kesalahan FFmpeg saat memproses { $file }, kode status { $code }, alasan { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/it/czkawka_core.ftl b/czkawka_core/i18n/it/czkawka_core.ftl index 6d785274d..2436fcc1c 100644 --- a/czkawka_core/i18n/it/czkawka_core.ftl +++ b/czkawka_core/i18n/it/czkawka_core.ftl @@ -95,3 +95,6 @@ core_cannot_create_or_open_cache_file = Impossibile creare o aprire il file di c core_cannot_set_config_cache_path = Impossibile impostare il percorso config/cache - config e cache non verranno utilizzati. core_invalid_extension_contains_space = { $extension } non è un'estensione valida perché contiene spazi vuoti all'interno core_invalid_extension_contains_dot = { $extension } non è un'estensione valida perché contiene un punto all'interno + +core_ffmpeg_unknown_encoder = Impossibile codificare il file { $file } utilizzando il codec { $encoder }. La versione di FFmpeg attualmente in uso non supporta questo codec. Utilizzare una versione diversa di FFmpeg che supporti il codec richiesto, oppure selezionare un altro codec. +core_ffmpeg_error = Errore di FFmpeg durante l'elaborazione di { $file }, codice di stato { $code }, motivo: { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/ja/czkawka_core.ftl b/czkawka_core/i18n/ja/czkawka_core.ftl index 0f20b7800..5c9e6c780 100644 --- a/czkawka_core/i18n/ja/czkawka_core.ftl +++ b/czkawka_core/i18n/ja/czkawka_core.ftl @@ -9,7 +9,7 @@ core_similarity_minimal = 最小 core_cannot_open_dir = ディレクトリを開くことができません { $dir }、理由 { $reason } core_cannot_read_entry_dir = Dir { $dir } でエントリを読み込めません、理由 { $reason } core_cannot_read_metadata_dir = Dir { $dir } でメタデータを読み込めません、理由 { $reason } -core_cannot_read_metadata_file = Cannot read metadata of file { $file }, reason { $reason } +core_cannot_read_metadata_file = ファイルのメタデータが読み込めません { $file }, reason { $reason} core_file_modified_before_epoch = ファイル { $name } は Unix Epoch より前に変更されているようです core_folder_modified_before_epoch = フォルダ { $name } は、Unix Epoch の前に変更されているようです core_file_no_modification_date = ファイル { $name } から変更日を取得できません、理由 { $reason } @@ -95,3 +95,6 @@ core_cannot_create_or_open_cache_file = キャッシュファイル "{ $file }" core_cannot_set_config_cache_path = 設定/キャッシュのパスを設定できません - 設定とキャッシュは使用されません。. core_invalid_extension_contains_space = { $extension } は有効な拡張子ではありません。なぜなら、中に空白が含まれているからです。 core_invalid_extension_contains_dot = { $extension } は有効な拡張子ではありません。なぜなら、中にドットが含まれているからです。 + +core_ffmpeg_unknown_encoder = { $file } を { $encoder } エンコーダでエンコードできません。現在の FFmpeg のバージョンでは、このエンコーダがサポートされていません。必要なコーデックをサポートしている別の FFmpeg のバージョンを使用するか、別のエンコーダを選択してください。. +core_ffmpeg_error = FFmpeg処理中にエラーが発生しました。ファイル: { $file }, エラーコード: { $code }, エラー内容: { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/ko/czkawka_core.ftl b/czkawka_core/i18n/ko/czkawka_core.ftl index 6a586d609..4ae4c1812 100644 --- a/czkawka_core/i18n/ko/czkawka_core.ftl +++ b/czkawka_core/i18n/ko/czkawka_core.ftl @@ -50,6 +50,7 @@ core_invalid_crop_rectangle = 유효하지 않은 래스터 영역: left={ $left core_failed_to_crop_video_file = 비디오 파일 "{ $file }" 자르기 실패: { $reason } core_cropped_video_not_created = 잘린 비디오 파일이 생성되지 않았습니다: { $temp } core_unable_check_hash_of_file = 파일 해시 확인 불가 { $file }, 이유 { $reason } +core_error_checking_hash_of_file = 파일 "{ $file }"의 해시 값을 확인하는 과정에서 오류가 발생했습니다. 원인: { $reason } core_image_zero_dimensions = 이미지의 너비 또는 높이는 0입니다 "{ $path }" core_image_open_failed = 불가능: "{ $path }" 이미지 파일을 열 수 없습니다. { $reason } core_not_directory_remove = 폴더 "{ $path }"을 제거하려고 하는데, 디렉터리가 아닙니다 @@ -94,5 +95,6 @@ core_cannot_create_or_open_cache_file = 캐시 파일 "{ $file }"를 생성하 core_cannot_set_config_cache_path = 설정/캐시 경로 설정 불가 - 설정 및 캐시는 사용되지 않습니다. core_invalid_extension_contains_space = { $extension }는 유효하지 않은 확장자입니다. 확장자 안에 빈 공간이 있기 때문입니다 core_invalid_extension_contains_dot = { $extension }는 유효하지 않은 확장자입니다. 확장자 안에 점이 포함되어 있기 때문입니다 - -core_error_checking_hash_of_file = 파일 "{ $file }"의 해시 값을 확인하는 과정에서 오류가 발생했습니다. 원인: { $reason } \ No newline at end of file + +core_ffmpeg_unknown_encoder = { $file } 파일을 { $encoder } 인코더를 사용하여 인코딩할 수 없습니다. 현재 FFmpeg 버전은 이 인코더를 지원하지 않습니다. 필요한 코덱을 지원하는 다른 FFmpeg 버전을 사용하거나, 다른 인코더를 선택하십시오. +core_ffmpeg_error = FFmpeg 처리 중 오류 발생: 파일 { $file }, 상태 코드 { $code }, 이유 { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/nl/czkawka_core.ftl b/czkawka_core/i18n/nl/czkawka_core.ftl index f99d376b9..5cc35687d 100644 --- a/czkawka_core/i18n/nl/czkawka_core.ftl +++ b/czkawka_core/i18n/nl/czkawka_core.ftl @@ -9,7 +9,7 @@ core_similarity_minimal = Minimaal core_cannot_open_dir = Kan dir { $dir }niet openen, reden { $reason } core_cannot_read_entry_dir = Kan invoer niet lezen in map { $dir }, reden { $reason } core_cannot_read_metadata_dir = Kan metadata niet lezen in map { $dir }, reden { $reason } -core_cannot_read_metadata_file = Cannot read metadata of file { $file }, reason { $reason } +core_cannot_read_metadata_file = Kan de metadata van bestand { $file }, reden { $reason } niet lezen core_file_modified_before_epoch = Het bestand { $name } lijkt aangepast te zijn voor Unix Epoch core_folder_modified_before_epoch = Map { $name } lijkt gewijzigd te zijn voor Unix Epoch core_file_no_modification_date = Niet in staat om de datum van bestand { $name }te krijgen, reden { $reason } @@ -18,7 +18,10 @@ core_cannot_start_scan_no_included_paths = Kan de scan niet starten, omdat er ge core_skip_exist_check_all_included_paths_nonexistent = Kan de scan niet starten, omdat alle opgenomen paden niet bestaan core_missing_no_chosen_included_path = Geen geldige opgenomen pad werd gekozen (uitgesloten paden konden alle opgenomen paden uitsluiten) core_reference_included_paths_same = Kan geen scan starten waar alle geldige opgenomen paden ook naar verwijzingen paden zijn, probeer te valideren of verwijzingen paden uitschakelen +core_path_must_exists = Het opgegeven pad moet bestaan, waarbij { $path } genegeerd wordt +core_must_be_directory_or_file = Het opgegeven pad moet verwijzen naar een geldige map of bestand, waarbij { $path } genegeerd wordt core_excluded_paths_pointless_slash = Uitsluiten / is zinloos, omdat het betekent dat er geen bestanden zullen worden gescand +core_paths_unable_to_get_device_id = Kan het apparaat-ID niet ophalen vanuit de map { $path } core_needs_allowed_extensions_limited_by_tool = Kan de scan niet starten, wanneer alle extensies beschikbaar in dit hulpmiddel ({ $extensions }) zijn uitgesloten van de scan core_needs_allowed_extensions = Kan de scan niet starten, wanneer alle extensies zijn uitgesloten van de scan core_needs_to_set_at_least_one_broken_option = Kan geen scan starten, wanneer er geen gebroken optie is ingesteld om te scannen @@ -33,7 +36,12 @@ core_error_moving_to_trash = Fout bij het verplaatsen van "{ $file }" naar de pr core_error_removing = Fout bij het verwijderen van "{ $file }": { $error } core_no_similarity_method_selected = Kan geen soortgelijke muziekbestanden vinden zonder een geselecteerde similariteitsmethode core_failed_to_spawn_command = Faillissement van het opstarten van het commando: { $reason } +core_failed_to_check_process_status = Het controleren van de processtatus is mislukt: { $reason } +core_failed_to_wait_for_process = Het wachten op het proces is mislukt: { $reason } +core_failed_to_read_video_properties = Het lukte niet om de videoproperties te lezen: { $reason } +core_failed_to_execute_ffmpeg = Het uitvoeren van ffmpeg is mislukt: { $reason } core_ffmpeg_failed_with_status = ffmpeg faalde met status { $status }: { $stderr } (command: { $command }) +core_failed_to_load_image_frame = Het laden van het afbeeldingsframe is mislukt: { $reason } core_failed_to_extract_frame = Faalde om frame te extraheren op { $time } seconden van "{ $file }": { $reason } core_failed_to_save_thumbnail = Faillissement van miniature opslaan voor "{ $file }": { $reason } core_failed_get_frame_at_timestamp = Faalde bij het ophalen van frame op timestamp { $timestamp } van "{ $file }": { $reason } @@ -43,6 +51,7 @@ core_failed_to_crop_video_file = Faillissement van video bestand "{ $file }": { core_cropped_video_not_created = Verwijderde videobestand is niet aangemaakt: { $temp } core_unable_check_hash_of_file = Kan hash van bestand "{ $file }" niet controleren, reden { $reason } core_error_checking_hash_of_file = Fout opgetreden bij het controleren van de hash van bestand "{ $file }", reden { $reason } +core_image_zero_dimensions = De afbeelding heeft een breedte of hoogte van nul: "{ $path }" core_image_open_failed = Kan bestand niet openen "{ $path }": { $reason } core_not_directory_remove = Proberen om map "{ $path }" te verwijderen, wat geen directory is core_cannot_read_directory = Kan de directory "{ $path }" niet lezen @@ -59,6 +68,7 @@ core_folder_does_not_exist = Map niet bestaan: { $folder } core_path_not_directory = Pad is geen directory: { $folder } core_test_error_for_folder = Test fout voor map: { $folder } core_unknown_exif_tag_group = Onbekende EXIF tag groep: { $tag } +core_error_comparing_fingerprints = Fout tijdens het vergelijken van vingerafdrukken: { $reason } core_failed_to_generate_thumbnail_frames_different_dimensions = Faalde bij het genereren van de miniaturen voor "{ $file }": de geëxtraheerde frames hebben verschillende afmetingen core_failed_to_generate_thumbnail = Faalde bij het genereren van miniaturen voor "{ $file }": { $reason } core_failed_to_extract_frame_at_seek_time = Faalde om frame te extraheren op { $time } seconden van "{ $file }": { $reason } @@ -86,13 +96,5 @@ core_cannot_set_config_cache_path = Kan de config/cache pad niet instellen - con core_invalid_extension_contains_space = { $extension } is geen geldige extensie omdat het lege ruimte bevat binnenin core_invalid_extension_contains_dot = { $extension } is geen geldige extensie omdat het punt erin zit -core_path_must_exists = Het opgegeven pad moet bestaan, waarbij { $path } genegeerd wordt -core_must_be_directory_or_file = Het opgegeven pad moet verwijzen naar een geldige map of bestand, waarbij { $path } genegeerd wordt -core_paths_unable_to_get_device_id = Kan het apparaat-ID niet ophalen vanuit de map { $path } -core_failed_to_check_process_status = Het controleren van de processtatus is mislukt: { $reason } -core_failed_to_wait_for_process = Het wachten op het proces is mislukt: { $reason } -core_failed_to_read_video_properties = Het lukte niet om de videoproperties te lezen: { $reason } -core_failed_to_execute_ffmpeg = Het uitvoeren van ffmpeg is mislukt: { $reason } -core_failed_to_load_image_frame = Het laden van het afbeeldingsframe is mislukt: { $reason } -core_image_zero_dimensions = De afbeelding heeft een breedte of hoogte van nul: "{ $path }" -core_error_comparing_fingerprints = Fout tijdens het vergelijken van vingerafdrukken: { $reason } \ No newline at end of file +core_ffmpeg_unknown_encoder = Kan { $file } niet coderen met de { $encoder } encoder. De huidige FFmpeg-versie ondersteunt deze encoder niet. Gebruik een andere FFmpeg-versie met de benodigde codec-ondersteuning of selecteer een andere encoder. +core_ffmpeg_error = FFmpeg-fout tijdens het verwerken van { $file }, statuscode { $code }, reden { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/no/czkawka_core.ftl b/czkawka_core/i18n/no/czkawka_core.ftl index c7096fab3..155dddfef 100644 --- a/czkawka_core/i18n/no/czkawka_core.ftl +++ b/czkawka_core/i18n/no/czkawka_core.ftl @@ -9,7 +9,7 @@ core_similarity_minimal = Minimalt core_cannot_open_dir = Kan ikke åpne dir { $dir }, årsak { $reason } core_cannot_read_entry_dir = Kan ikke lese oppføringen i dir { $dir }, årsak { $reason } core_cannot_read_metadata_dir = Kan ikke lese metadata i dir { $dir }, årsak { $reason } -core_cannot_read_metadata_file = Cannot read metadata of file { $file }, reason { $reason } +core_cannot_read_metadata_file = Kan ikke lese metadata om filen { $file }, grunn { $reason} core_file_modified_before_epoch = Filen { $name } ser ut til å ha blitt endret før Unix Epoch core_folder_modified_before_epoch = Mappen { $name } ser ut til å ha blitt endret før Unix Epoch core_file_no_modification_date = Klarte ikke å hente endringsdato fra filen { $name }. Årsak { $reason } @@ -18,6 +18,7 @@ core_cannot_start_scan_no_included_paths = Kan ikke starte skanning, fordi det i core_skip_exist_check_all_included_paths_nonexistent = Kan ikke starte skanning, fordi alle inkluderte stiene ikke eksisterer core_missing_no_chosen_included_path = Ingen gyldig inkludert sti ble valgt (utelatelser kunne ha utelukket alle inkluderte stier) core_reference_included_paths_same = Kan ikke starte skanning der alle gyldige inkluderte stier også er refererte stier, prøv å validere eller deaktivere refererte stier +core_path_must_exists = Den angitte stien må eksistere, ignorerer { $path } core_must_be_directory_or_file = Angitt sti må peke til en gyldig mappe eller fil, og ignorere { $path } core_excluded_paths_pointless_slash = Unntatt / er meningsløst, fordi det betyr at ingen filer vil bli scannet core_paths_unable_to_get_device_id = Kan ikke hente enhets-ID fra mappen { $path } @@ -60,8 +61,10 @@ core_unknown_directory_entry = Kan ikke fastslå filtype for directory entry "{ core_video_width_exceeds_limit = Video bredde { $width } overstiger grensen for { $limit } core_video_height_exceeds_limit = Video høyde { $height } overstiger grensen på { $limit } core_failed_to_process_video = Klarte ikke å behandle videofilen { $file }: { $reason } +core_optimized_file_larger = Den optimaliserte filen { $optimized } (størrelse: { $new_size }) er ikke mindre enn den originale filen { $original } (størrelse: { $original_size }) core_unknown_codec = Ukjent kodek: { $codec } core_invalid_video_optimizer_mode = Ugyldig videobestøkningsmodus: '{ $mode }'. Tillatte verdier: transkode, kutt +core_folder_does_not_exist = Mappen finnes ikke: { $folder } core_path_not_directory = Stien er ikke en mappe: { $folder } core_test_error_for_folder = Test feil for mappe: { $folder } core_unknown_exif_tag_group = Ukjent EXIF-tag gruppe: { $tag } @@ -77,7 +80,7 @@ core_failed_to_get_video_duration = Kunne ikke hente videolengde for fil "{ $fil core_failed_to_get_video_dimensions = Kunne ikke hente vide dimensjoner for fil "{ $file }" core_frame_dimensions_mismatch = Ramme dimensjoner for tidsstempel { $timestamp } stemmer ikke overens med de første ramme dimensjonene ({ $first_w }x{ $first_h }) core_failed_to_load_data_from_cache = Kunne ikke laste data fra cache-fil { $file }, årsak { $reason } -core_failed_to_load_data_from_json_cache = Kunne ikke laste data fra json-cachen { $file}, årsak { $reason } +core_failed_to_load_data_from_json_cache = Kunne ikke laste data fra json-cachen { $file }, årsak { $reason } core_failed_to_replace_with_optimized = Klarte ikke å erstatte filen "{ $file }" med den optimaliserte versjonen: { $reason } core_failed_to_write_data_to_cache = Kan ikke skrive data til cache-fil "{ $file }", årsak { $reason } core_properly_saved_cache_entries = Riktig lagret til fil { $count } cache-poster. @@ -91,8 +94,7 @@ core_cannot_create_cache_folder = Kan ikke opprette cache-mappe "{ $folder }", core_cannot_create_or_open_cache_file = Kan ikke opprette eller åpne cachefil "{ $file }", årsak { $reason } core_cannot_set_config_cache_path = Kan ikke sette config/cache-sti - config og cache vil ikke bli brukt. core_invalid_extension_contains_space = { $extension } er ikke en gyldig filtype fordi den inneholder mellomrom - -core_path_must_exists = Den angitte stien må eksistere, ignorerer { $path } -core_optimized_file_larger = Den optimaliserte filen { $optimized } (størrelse: { $new_size }) er ikke mindre enn den originale filen { $original } (størrelse: { $original_size }) -core_folder_does_not_exist = Mappen finnes ikke: { $folder } -core_invalid_extension_contains_dot = { $extension } er ikke en gyldig filtype fordi den inneholder et punkt (.) inni seg \ No newline at end of file +core_invalid_extension_contains_dot = { $extension } er ikke en gyldig filtype fordi den inneholder et punkt (.) inni seg + +core_ffmpeg_unknown_encoder = Kan ikke kode { $file } ved hjelp av koderen { $encoder }. Den nåværende FFmpeg-versjonen støtter ikke denne koderen. Bruk en annen FFmpeg-versjon med støtte for den nødvendige kodeken, eller velg en annen koder. +core_ffmpeg_error = FFmpeg-feil under behandling av { $file }, statuskode { $code }, årsak { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/pl/czkawka_core.ftl b/czkawka_core/i18n/pl/czkawka_core.ftl index 6ebbf9f9e..d6367cc30 100644 --- a/czkawka_core/i18n/pl/czkawka_core.ftl +++ b/czkawka_core/i18n/pl/czkawka_core.ftl @@ -95,3 +95,6 @@ core_cannot_create_or_open_cache_file = Nie można utworzyć ani otworzyć pliku core_cannot_set_config_cache_path = Nie można ustawić ścieżki do konfiguracji/pamięci podręcznej — konfiguracja i pamięć podręczna nie zostaną użyte. core_invalid_extension_contains_space = "{ $extension }" nie jest prawidłowym rozszerzeniem, ponieważ zawiera spację core_invalid_extension_contains_dot = "{ $extension }" nie jest prawidłowym rozszerzeniem, ponieważ zawiera kropkę + +core_ffmpeg_unknown_encoder = Nie można zakodować pliku { $file } przy użyciu kodeka { $encoder }. Aktualna wersja FFmpeg nie obsługuje tego kodeka. Użyj innej wersji FFmpeg, która obsługuje wymagany kodek, lub wybierz inny kodek. +core_ffmpeg_error = Błąd FFmpeg podczas przetwarzania pliku { $file }, kod statusu { $code }, powód: { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/pt-BR/czkawka_core.ftl b/czkawka_core/i18n/pt-BR/czkawka_core.ftl index 71b4a6da5..baa37f27f 100644 --- a/czkawka_core/i18n/pt-BR/czkawka_core.ftl +++ b/czkawka_core/i18n/pt-BR/czkawka_core.ftl @@ -36,7 +36,12 @@ core_error_moving_to_trash = Ocorreu o erro ‘{ $error }’ ao tentar mover o a core_error_removing = Ocorreu o erro ‘{ $error }’ ao tentar remover o arquivo ‘{ $file }’ core_no_similarity_method_selected = Não foi possível encontrar os arquivos de música equivalentes porque um método de equivalência não foi definido core_failed_to_spawn_command = Falha ao gerar comando: { $reason } +core_failed_to_check_process_status = Falha ao verificar o status do processo: { $reason } +core_failed_to_wait_for_process = Falha ao aguardar o processo: { $reason } +core_failed_to_read_video_properties = Falha ao ler as propriedades do vídeo: { $reason } +core_failed_to_execute_ffmpeg = Falha ao executar o ffmpeg: { $reason } core_ffmpeg_failed_with_status = ffmpeg falhou com o status { $status }: { $stderr } (comando: { $command }) +core_failed_to_load_image_frame = Falha ao carregar o quadro da imagem: { $reason } core_failed_to_extract_frame = Falha ao extrair quadro em { $time } segundos de "{ $file }": { $reason } core_failed_to_save_thumbnail = Falha ao salvar miniatura para "{ $file }": { $reason } core_failed_get_frame_at_timestamp = Falha ao obter frame no timestamp { $timestamp } de "{ $file }": { $reason } @@ -53,18 +58,22 @@ core_cannot_read_directory = Não é possível ler o diretório "{ $path }" core_cannot_read_entry_from_directory = Não é possível ler entrada do diretório "{ $path }" core_folder_contains_file_inside = A pasta contém o arquivo "{ $entry }" dentro de "{ $folder }" core_unknown_directory_entry = Não foi possível determinar o tipo de arquivo da entrada de diretório "{ $entry }" dentro de "{ $path }" +core_video_width_exceeds_limit = Largura do vídeo { $width } excede o limite de { $limit } core_video_height_exceeds_limit = Vídeo altura { $height } excede o limite de { $limit } core_failed_to_process_video = Falha ao processar o arquivo de vídeo { $file }: { $reason } +core_optimized_file_larger = O arquivo otimizado { $optimized } (tamanho: { $new_size }) não é menor que o arquivo original { $original } (tamanho: { $original_size }) core_unknown_codec = Codec desconhecido: { $codec } core_invalid_video_optimizer_mode = Modo otimizador de vídeo inválido: '{ $mode }'. Valores permitidos: transcodar, cortar core_folder_does_not_exist = A pasta não existe: { $folder } core_path_not_directory = O caminho não é um diretório: { $folder } core_test_error_for_folder = Erro de teste para a pasta: { $folder } core_unknown_exif_tag_group = Grupo EXIF desconhecido: { $tag } +core_error_comparing_fingerprints = Erro ao comparar impressões digitais: { $reason } core_failed_to_generate_thumbnail_frames_different_dimensions = Falha ao gerar miniatura para "{ $file }": os quadros extraídos têm dimensões diferentes core_failed_to_generate_thumbnail = Falha ao gerar miniatura para "{ $file }": { $reason } core_failed_to_extract_frame_at_seek_time = Falha ao extrair quadro em { $time } segundos de "{ $file }": { $reason } core_video_file_does_not_exist = Arquivo de vídeo não existe (pode ser removido entre as etapas de digitalização/mais tarde): "{ $path }" +core_image_too_large = A imagem é muito grande ({ $width }x{ $height }) - excede o limite de { $max } pixels suportados core_failed_to_get_video_metadata = Falha ao obter metadados de vídeo para o arquivo "{ $file }": { $reason } core_failed_to_get_video_codec = Falha ao obter codec de vídeo para o arquivo "{ $file }" core_failed_to_get_video_duration = Falhou ao obter a duração do vídeo para o arquivo "{ $file }" @@ -87,12 +96,5 @@ core_cannot_set_config_cache_path = Não é possível definir o caminho de confi core_invalid_extension_contains_space = { $extension } não é uma extensão válida porque contém espaço em branco dentro core_invalid_extension_contains_dot = { $extension } não é uma extensão válida porque contém ponto dentro -core_failed_to_check_process_status = Falha ao verificar o status do processo: { $reason } -core_failed_to_wait_for_process = Falha ao aguardar o processo: { $reason } -core_failed_to_read_video_properties = Falha ao ler as propriedades do vídeo: { $reason } -core_failed_to_execute_ffmpeg = Falha ao executar o ffmpeg: { $reason } -core_failed_to_load_image_frame = Falha ao carregar o quadro da imagem: { $reason } -core_video_width_exceeds_limit = Largura do vídeo { $width } excede o limite de { $limit } -core_optimized_file_larger = O arquivo otimizado { $optimized } (tamanho: { $new_size }) não é menor que o arquivo original { $original } (tamanho: { $original_size }) -core_error_comparing_fingerprints = Erro ao comparar impressões digitais: { $reason } -core_image_too_large = A imagem é muito grande ({$width}x{$height}) - excede o limite de { $max } pixels suportados \ No newline at end of file +core_ffmpeg_unknown_encoder = Não é possível codificar o arquivo { $file } usando o codificador { $encoder }. A versão atual do FFmpeg não oferece suporte a este codificador. Utilize uma versão diferente do FFmpeg que possua o suporte ao codec necessário, ou selecione outro codificador. +core_ffmpeg_error = Erro do FFmpeg durante o processamento de { $file }, código de status { $code }, motivo: { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/pt-PT/czkawka_core.ftl b/czkawka_core/i18n/pt-PT/czkawka_core.ftl index 9eee37db5..98cb6fa5f 100644 --- a/czkawka_core/i18n/pt-PT/czkawka_core.ftl +++ b/czkawka_core/i18n/pt-PT/czkawka_core.ftl @@ -9,7 +9,7 @@ core_similarity_minimal = Mínimo core_cannot_open_dir = Não é possível abrir o diretório { $dir }, razão { $reason } core_cannot_read_entry_dir = Não é possível ler a entrada no diretório { $dir }, razão { $reason } core_cannot_read_metadata_dir = Não é possível ler os metadados no diretório { $dir }, razão { $reason } -core_cannot_read_metadata_file = Cannot read metadata of file { $file }, reason { $reason } +core_cannot_read_metadata_file = Não foi possível ler metadados do arquivo { $file }, reason { $reason} core_file_modified_before_epoch = O arquivo { $name } parece ter sido modificado antes do Epoch Unix core_folder_modified_before_epoch = A pasta { $name } parece ter sido modificada antes do Epoch Unix core_file_no_modification_date = Não foi possível obter a data de modificação do arquivo { $name }, motivo { $reason } @@ -36,6 +36,10 @@ core_error_moving_to_trash = Erro ao mover "{ $file }" para a lixeira: { $error core_error_removing = Erro ao remover "{ $file }": { $error } core_no_similarity_method_selected = Não é possível encontrar arquivos de música semelhantes sem um método de similaridade selecionado core_failed_to_spawn_command = Falhou em spawn comando: { $reason } +core_failed_to_check_process_status = Falha ao verificar o status do processo: { $reason } +core_failed_to_wait_for_process = Falha ao aguardar a conclusão do processo: { $reason } +core_failed_to_read_video_properties = Falha ao ler as propriedades do vídeo: { $reason } +core_failed_to_execute_ffmpeg = Falha ao executar o ffmpeg: { $reason } core_ffmpeg_failed_with_status = ffmpeg falhou com o status { $status }: { $stderr } (comando: { $command }) core_failed_to_load_image_frame = Falha ao carregar o quadro de imagem: { $reason } core_failed_to_extract_frame = Falhou em extrair o quadro em { $time } segundos de "{ $file }": { $reason } @@ -54,17 +58,22 @@ core_cannot_read_directory = Não é possível ler o diretório "{ $path }" core_cannot_read_entry_from_directory = Não é possível ler entrada do diretório "{ $path }" core_folder_contains_file_inside = A pasta contém o arquivo "{ $entry }" dentro de "{ $folder }" core_unknown_directory_entry = Não foi possível determinar o tipo de arquivo da entrada de diretório "{ $entry }" dentro de "{ $path }" +core_video_width_exceeds_limit = Largura do vídeo { $width } excede o limite de { $limit } core_video_height_exceeds_limit = Vídeo altura { $height } excede o limite de { $limit } core_failed_to_process_video = Falha ao processar o arquivo de vídeo { $file }: { $reason } +core_optimized_file_larger = O arquivo otimizado { $optimized } (tamanho: { $new_size }) não é menor que o arquivo original { $original } (tamanho: { $original_size }) core_unknown_codec = Codec desconhecido: { $codec } core_invalid_video_optimizer_mode = Modo otimizador de vídeo inválido: '{ $mode }'. Valores permitidos: transcodar, cortar +core_folder_does_not_exist = Pasta não encontrada: { $folder } core_path_not_directory = O caminho não é um diretório: { $folder } core_test_error_for_folder = Erro de teste para a pasta: { $folder } core_unknown_exif_tag_group = Grupo EXIF desconhecido: { $tag } +core_error_comparing_fingerprints = Erro ao comparar impressões digitais: { $reason } core_failed_to_generate_thumbnail_frames_different_dimensions = Falhou ao gerar miniatura para "{ $file }": os quadros extraídos têm dimensões diferentes core_failed_to_generate_thumbnail = Falhou ao gerar miniatura para "{ $file }": { $reason } core_failed_to_extract_frame_at_seek_time = Falhou em extrair o quadro em { $time } segundos de "{ $file }": { $reason } core_video_file_does_not_exist = O arquivo de vídeo não existe (pode ser removido entre as etapas de digitalização/mais tarde): "{ $path }" +core_image_too_large = A imagem é muito grande ({ $width }x{ $height }) - mais do que suportado { $max } pixels core_failed_to_get_video_metadata = Falhou ao obter os metadados de vídeo para o arquivo "{ $file }": { $reason } core_failed_to_get_video_codec = Falhou ao obter o codec de vídeo para o arquivo "{ $file }" core_failed_to_get_video_duration = Falhou ao obter a duração do vídeo para o arquivo "{ $file }" @@ -87,11 +96,5 @@ core_cannot_set_config_cache_path = Não é possível definir o caminho de confi core_invalid_extension_contains_space = { $extension } não é uma extensão válida porque contém espaço em branco no interior core_invalid_extension_contains_dot = { $extension } não é uma extensão válida porque contém ponto dentro -core_failed_to_check_process_status = Falha ao verificar o status do processo: { $reason } -core_failed_to_wait_for_process = Falha ao aguardar a conclusão do processo: { $reason } -core_failed_to_read_video_properties = Falha ao ler as propriedades do vídeo: { $reason } -core_failed_to_execute_ffmpeg = Falha ao executar o ffmpeg: { $reason } -core_video_width_exceeds_limit = Largura do vídeo { $width } excede o limite de { $limit } -core_optimized_file_larger = O arquivo otimizado { $optimized } (tamanho: { $new_size }) não é menor que o arquivo original { $original } (tamanho: { $original_size }) -core_folder_does_not_exist = Pasta não encontrada: { $folder } -core_error_comparing_fingerprints = Erro ao comparar impressões digitais: { $reason } \ No newline at end of file +core_ffmpeg_unknown_encoder = Não é possível codificar o arquivo { $file } usando o codificador { $encoder }. A versão atual do FFmpeg não oferece suporte a este codificador. Utilize uma versão diferente do FFmpeg que suporte o codec necessário ou selecione outro codificador. +core_ffmpeg_error = Erro do FFmpeg durante o processamento de { $file }, código de status { $code }, motivo { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/ro/czkawka_core.ftl b/czkawka_core/i18n/ro/czkawka_core.ftl index b33fd8112..f67b933ad 100644 --- a/czkawka_core/i18n/ro/czkawka_core.ftl +++ b/czkawka_core/i18n/ro/czkawka_core.ftl @@ -9,7 +9,7 @@ core_similarity_minimal = Minimă core_cannot_open_dir = Nu se poate deschide dir { $dir }, motiv { $reason } core_cannot_read_entry_dir = Nu se poate citi intrarea în dir { $dir }, motivul { $reason } core_cannot_read_metadata_dir = Metadatele nu pot fi citite în dir { $dir }, motivul { $reason } -core_cannot_read_metadata_file = Cannot read metadata of file { $file }, reason { $reason } +core_cannot_read_metadata_file = Nu se pot citi metadatele din fişierul { $file }, motiv { $reason} core_file_modified_before_epoch = Fișierul { $name } pare să fi fost modificat înainte de Epocul Unix core_folder_modified_before_epoch = Dosarul { $name } pare să fi fost modificat înainte de Epocul Unix core_file_no_modification_date = Imposibil de obținut data modificării din fișierul { $name }, motivul { $reason } @@ -95,3 +95,6 @@ core_cannot_create_or_open_cache_file = Nu se poate crea sau deschide fișierul core_cannot_set_config_cache_path = Nu se poate seta calea de configurare/cache - configurarea și cache-ul nu vor fi utilizate. core_invalid_extension_contains_space = { $extension } nu este o extensie validă deoarece conține spații goale în interior core_invalid_extension_contains_dot = { $extension } nu este o extensie validă deoarece conține punct în interior + +core_ffmpeg_unknown_encoder = Nu se poate codifica fișierul { $file } folosind codificatorul { $encoder }. Versiunea curentă de FFmpeg nu suportă acest codificator. Folosiți o altă versiune de FFmpeg care să suporte codec-ul necesar sau selectați un alt codificator. +core_ffmpeg_error = Eroare FFmpeg în timpul procesării fișierului { $file }, cod de stare { $code }, motiv { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/ru/czkawka_core.ftl b/czkawka_core/i18n/ru/czkawka_core.ftl index 9f7fd9431..b0e832b23 100644 --- a/czkawka_core/i18n/ru/czkawka_core.ftl +++ b/czkawka_core/i18n/ru/czkawka_core.ftl @@ -9,7 +9,7 @@ core_similarity_minimal = Минимальное core_cannot_open_dir = Невозможно открыть каталог { $dir }, причина: { $reason } core_cannot_read_entry_dir = Невозможно прочитать запись в директории { $dir }, причина: { $reason } core_cannot_read_metadata_dir = Невозможно прочитать метаданные в директории { $dir }, причина: { $reason } -core_cannot_read_metadata_file = Cannot read metadata of file { $file }, reason { $reason } +core_cannot_read_metadata_file = Невозможно прочитать метаданные файла { $file }, причина { $reason} core_file_modified_before_epoch = Файл { $name } был изменен до эпохи Unix core_folder_modified_before_epoch = Папка { $name } была изменена до начала Unix Epoch core_file_no_modification_date = Не удаётся получить дату изменения из файла { $name }, причина: { $reason } @@ -48,7 +48,7 @@ core_failed_get_frame_at_timestamp = Не удалось получить кад core_failed_get_frame_from_file = Не удалось получить кадр из "{ $file }" в метке времени { $timestamp }: { $reason } core_invalid_crop_rectangle = Неверный прямоугольник обрезки: лево={ $left }, сверху={ $top }, право={ $right }, снизу={ $bottom } core_failed_to_crop_video_file = Не удалось обрезать видеофайл "{ $file }": { $reason } -core_cropped_video_not_created = Обрезённый видеофайл не был создан: { $temp } +core_cropped_video_not_created = Обрезанный видеофайл не был создан: { $temp } core_unable_check_hash_of_file = Невозможно проверить хэш файла "{ $file }", причина { $reason } core_error_checking_hash_of_file = Ошибка при проверке хэша файла "{ $file }", причина { $reason } core_image_zero_dimensions = Изображение имеет нулевую ширину или высоту "{ $path }" @@ -95,3 +95,6 @@ core_cannot_create_or_open_cache_file = Невозможно создать ил core_cannot_set_config_cache_path = Невозможно установить путь к config/cache - config и cache не будут использоваться. core_invalid_extension_contains_space = { $extension } не является допустимым расширением, поскольку оно содержит пробел внутри core_invalid_extension_contains_dot = { $extension } не является допустимым расширением, так как оно содержит точку внутри + +core_ffmpeg_unknown_encoder = Не удалось закодировать файл { $file } с использованием кодека { $encoder }. Текущая версия FFmpeg не поддерживает этот кодек. Используйте другую версию FFmpeg с поддержкой необходимого кодека или выберите другой кодек. +core_ffmpeg_error = Ошибка FFmpeg при обработке файла { $file }, код ошибки { $code }, причина { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/sv-SE/czkawka_core.ftl b/czkawka_core/i18n/sv-SE/czkawka_core.ftl index d35b8000c..ec307a5c8 100644 --- a/czkawka_core/i18n/sv-SE/czkawka_core.ftl +++ b/czkawka_core/i18n/sv-SE/czkawka_core.ftl @@ -9,7 +9,7 @@ core_similarity_minimal = Minimalt core_cannot_open_dir = Kan inte öppna dir { $dir }anledning { $reason } core_cannot_read_entry_dir = Kan inte läsa post i dir { $dir }, anledning { $reason } core_cannot_read_metadata_dir = Kan inte läsa metadata i dir { $dir }, anledning { $reason } -core_cannot_read_metadata_file = Cannot read metadata of file { $file }, reason { $reason } +core_cannot_read_metadata_file = Kan inte läsa metadata för filen { $file }, orsak { $reason } core_file_modified_before_epoch = Filen { $name } verkar ha ändrats innan Unix Epoch core_folder_modified_before_epoch = Folder { $name } verkar ha ändrats innan Unix Epoch core_file_no_modification_date = Det går inte att hämta ändringsdatum från filen { $name }, anledning { $reason } @@ -60,8 +60,10 @@ core_folder_contains_file_inside = Mappen innehåller filen "{ $entry }" inuti " core_unknown_directory_entry = Kan inte fastställa filtyp för katalogposten "{ $entry }" inuti "{ $path }" core_video_width_exceeds_limit = Video bredd { $width } överskrider gränsen för { $limit } core_video_height_exceeds_limit = Video höjd { $height } överskrider gränsen för { $limit } +core_failed_to_process_video = Kunde inte bearbeta videofil { $file }: { $reason } core_optimized_file_larger = Optimerad fil { $optimized } (storlek: { $new_size }) är inte mindre än original { $original } (storlek: { $original_size }) core_unknown_codec = Okänt codec: { $codec } +core_invalid_video_optimizer_mode = Ogiltigt optimeringsläge för video: '{ $mode }'. Tillåtna värden: transcode, crop core_folder_does_not_exist = Mappexisterar inte: { $folder } core_path_not_directory = Sökvägen är inte en katalog: { $folder } core_test_error_for_folder = Feltest för mapp: { $folder } @@ -78,7 +80,7 @@ core_failed_to_get_video_duration = Kunde inte få videolängd för fil "{ $file core_failed_to_get_video_dimensions = Misslyckades med att få videons dimensioner för filen "{ $file }" core_frame_dimensions_mismatch = Bildens mått för tidstämplar { $timestamp } stämmer inte överens med bildens mått ({ $first_w }x{ $first_h }) core_failed_to_load_data_from_cache = Misslyckades med att ladda data från cachefil { $file }, anledning { $reason } -core_failed_to_load_data_from_json_cache = Kunde inte ladda data från json-cache-fil { $file}, anledning { $reason } +core_failed_to_load_data_from_json_cache = Kunde inte ladda data från json-cache-fil { $file }, anledning { $reason } core_failed_to_replace_with_optimized = Misslyckades med att ersätta filen "{ $file }" med den optimerade versionen: { $reason } core_failed_to_write_data_to_cache = Kan inte skriva data till cachefil "{ $file }", anledning { $reason } core_properly_saved_cache_entries = Spara korrekt till fil { $count } cacheposter. @@ -94,5 +96,5 @@ core_cannot_set_config_cache_path = Kan inte ställa in config/cache-sökväg - core_invalid_extension_contains_space = { $extension } är inte en giltig filändelse eftersom den innehåller tomma utrymmen däri core_invalid_extension_contains_dot = { $extension } är inte en giltig filändelse eftersom den innehåller en punkt inuti -core_failed_to_process_video = Kunde inte bearbeta videofil { $file }: { $reason } -core_invalid_video_optimizer_mode = Ogiltigt optimeringsläge för video: '{ $mode }'. Tillåtna värden: transcode, crop \ No newline at end of file +core_ffmpeg_unknown_encoder = Det går inte att koda { $file } med kodaren { $encoder }. Den aktuella FFmpeg-versionen stöder inte denna kodare. Använd en annan FFmpeg-version med stöd för den nödvändiga codec:en, eller välj en annan kodare. +core_ffmpeg_error = FFmpeg-fel vid bearbetning av { $file }, statuskod { $code }, anledning { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/tr/czkawka_core.ftl b/czkawka_core/i18n/tr/czkawka_core.ftl index 5bf4448cf..0d72d19f4 100644 --- a/czkawka_core/i18n/tr/czkawka_core.ftl +++ b/czkawka_core/i18n/tr/czkawka_core.ftl @@ -18,6 +18,7 @@ core_cannot_start_scan_no_included_paths = Tarama başlatılamıyor, çünkü hi core_skip_exist_check_all_included_paths_nonexistent = Tarama başlatılamıyor, çünkü tüm dahil yollar mevcut değil core_missing_no_chosen_included_path = Geçerli bir dahil yol seçilemedi (hariç tutulan yollar tüm dahil yolları hariç bırakmış olabilir) core_reference_included_paths_same = Geçerli dahil yolların tamamının başvurulan yollar olarak da referanslandırıldığı bir tarama başlatılamaz, lütfen doğrulamayı deneyin veya başvurulan yolları devre dışı bırakın +core_path_must_exists = Verilen yolun mevcut olması gerekmektedir, ancak { $path } kısmını dikkate almayınız core_must_be_directory_or_file = Verilen yol geçer bir dizine veya dosyaya işaret etmelidir, { $path }'i göz ardı ederek core_excluded_paths_pointless_slash = Hariç tutmak / anlamsızdır, çünkü bu, hiçbir dosyanın taranmayacağı anlamına gelir core_paths_unable_to_get_device_id = Cihaz kimliğini { $path } klasöründen elde edilemiyor @@ -46,6 +47,7 @@ core_failed_to_save_thumbnail = "{ $file }" için önizlemeyi kaydedemedi: { $re core_failed_get_frame_at_timestamp = { $timestamp } zaman damgası üzerinde çerçeve alınamadı "{ $file }": { $reason } core_failed_get_frame_from_file = "{ $file }" adlı dosyadaki çerçeve alınamadı zaman damgası { $timestamp }'te: { $reason } core_invalid_crop_rectangle = Geçersiz tarım dikdörtgeni: sol={ $left }, üst={ $top }, sağ={ $right }, alt={ $bottom } +core_failed_to_crop_video_file = "{ $file }" video dosyasını kırpmakta bir sorun oluştu: { $reason } core_cropped_video_not_created = Kesilmiş video dosyası oluşturulmadı: { $temp } core_unable_check_hash_of_file = Dosyanın hash'ini "{ $file }" kontrol edilemedi, nedeni { $reason } core_error_checking_hash_of_file = Dosya "{ $file }" için hash kontrolünde hata oluştu, nedeni { $reason } @@ -58,6 +60,7 @@ core_folder_contains_file_inside = Klasör içinde "{ $entry }" dosyası "{ $fol core_unknown_directory_entry = Dosya türünü "{ $entry }" girişine ait "{ $path }" içinde belirleyemiyorum core_video_width_exceeds_limit = Video genişliği { $width } limiti { $limit } değerini aşmaktadır core_video_height_exceeds_limit = Video yüksekliği { $height } limiti { $limit }'i aşmaktadır +core_failed_to_process_video = Video dosyasını işleme sırasında bir hata oluştu: { $file } - Neden: { $reason } core_optimized_file_larger = Optimize edilmiş dosya { $optimized } (boyut: { $new_size }) orijinal { $original } (boyut: { $original_size })'den daha küçük değil core_unknown_codec = Bilinmeyen codec: { $codec } core_invalid_video_optimizer_mode = Geçersiz video optimizasyon modu: '{ $mode }'. İzin verilen değerler: transcode, crop @@ -70,13 +73,14 @@ core_failed_to_generate_thumbnail_frames_different_dimensions = "{ $file }" içi core_failed_to_generate_thumbnail = "{ $file }" için önizlemeyi oluşturulamadı: { $reason } core_failed_to_extract_frame_at_seek_time = { $time } saniyede kareyi "{ $file }" dosyasından çıkarılamadı: { $reason } core_video_file_does_not_exist = Video dosyası mevcut değil (tarama/daha sonra adımları arasında kaldırılabilir): "{ $path }" -core_image_too_large = Görüntü çok büyü ({$width}x{$height}) - desteklenmeyen { $max } pikselden fazla +core_image_too_large = Görüntü çok büyü ({ $width }x{ $height }) - desteklenmeyen { $max } pikselden fazla core_failed_to_get_video_metadata = Video meta verilerini dosyayı "{ $file }" için elde edilemedi: { $reason } core_failed_to_get_video_codec = Dosya "{ $file }" için video codec'i alınamadı core_failed_to_get_video_duration = Video süresini "{ $file }" dosyası için elde edilemedi core_failed_to_get_video_dimensions = Video boyutlarını dosya için "{ $file }" alınamadı -core_frame_dimensions_mismatch = Çerçeve boyutları { $timestamp } zaman damgası için ilk çerçeve boyutlarıyla (%{$first_w}x%{$first_h}) uyuşmuyor -core_failed_to_load_data_from_cache = Verilen dosyadaki {$file} verisi yüklenemedi, nedeni { $reason } +core_frame_dimensions_mismatch = Çerçeve boyutları { $timestamp } zaman damgası için ilk çerçeve boyutlarıyla (%{ $first_w }x%{ $first_h }) uyuşmuyor +core_failed_to_load_data_from_cache = Verilen dosyadaki { $file } verisi yüklenemedi, nedeni { $reason } +core_failed_to_load_data_from_json_cache = JSON önbellek dosyasından veri yüklenemedi: { $file }, nedeni: { $reason } core_failed_to_replace_with_optimized = Dosya "{ $file }" optimize edilmiş versiyon ile değiştirilemedi: { $reason } core_failed_to_write_data_to_cache = Katalog dosyasına "{ $file }" yazamıyor, nedeni { $reason } core_properly_saved_cache_entries = Doğru şekilde dosyaya { $count } önbellek girişi kaydedildi. @@ -87,12 +91,10 @@ core_failed_to_crop_video = Video kırpma başarısız: "{ $file }": { $reason } core_failed_to_get_metadata_of_optimized_file = Optimizasyonlu dosya "{ $file }": { $reason } meta verisi alınamadı core_cannot_create_config_folder = Konfigürasyon klasörü "{ $folder }" oluşturulamazdı, nedeni { $reason } core_cannot_create_cache_folder = "{ $folder }" önbellek klasörü oluşturulamaz, nedeni { $reason } +core_cannot_create_or_open_cache_file = "{ $file }" adlı geçici dosyayı oluşturamadı veya açamadı, nedeni: { $reason } core_cannot_set_config_cache_path = Config/cache yolu yapılamadı - config ve cache kullanılmayacak. core_invalid_extension_contains_space = { $extension } geçerli bir uzantı değildir çünkü içinde boşluk içermektedir core_invalid_extension_contains_dot = { $extension } geçerli bir uzantı değildir çünkü içinde nokta içeriyor -core_path_must_exists = Verilen yolun mevcut olması gerekmektedir, ancak {$path} kısmını dikkate almayınız -core_failed_to_crop_video_file = "{ $file }" video dosyasını kırpmakta bir sorun oluştu: { $reason } -core_failed_to_process_video = Video dosyasını işleme sırasında bir hata oluştu: { $file } - Neden: { $reason } -core_failed_to_load_data_from_json_cache = JSON önbellek dosyasından veri yüklenemedi: { $file }, nedeni: { $reason } -core_cannot_create_or_open_cache_file = "{ $file }" adlı geçici dosyayı oluşturamadı veya açamadı, nedeni: { $reason } \ No newline at end of file +core_ffmpeg_unknown_encoder = { $file } dosyasını { $encoder } kodlayıcıyla kodlayamaz. Mevcut FFmpeg sürümü bu kodlayıcıyı desteklemiyor. Gerekli codec desteği olan farklı bir FFmpeg sürümü kullanın veya başka bir kodlayıcı seçin. +core_ffmpeg_error = FFmpeg işleme sırasında { $file } dosyasında bir hata oluştu, hata kodu { $code }, nedeni { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/uk/czkawka_core.ftl b/czkawka_core/i18n/uk/czkawka_core.ftl index 103bca098..7a634fba2 100644 --- a/czkawka_core/i18n/uk/czkawka_core.ftl +++ b/czkawka_core/i18n/uk/czkawka_core.ftl @@ -9,7 +9,7 @@ core_similarity_minimal = Мінімальна core_cannot_open_dir = Не вдалося відкрити каталог { $dir }, причина: { $reason } core_cannot_read_entry_dir = Не вдалося прочитати запис в каталозі { $dir }, причина: { $reason } core_cannot_read_metadata_dir = Не вдалося прочитати метадані в каталозі { $dir }, причина: { $reason } -core_cannot_read_metadata_file = Cannot read metadata of file { $file }, reason { $reason } +core_cannot_read_metadata_file = Неможливо прочитати метадані файлу { $file }, причина { $reason} core_file_modified_before_epoch = Файл { $name } здається змінено до Unix Epoch core_folder_modified_before_epoch = Папка { $name } здається була змінена до Unix Epoch core_file_no_modification_date = Не вдалося отримати дату модифікації з файлу { $name }, причина: { $reason } @@ -80,7 +80,7 @@ core_failed_to_get_video_duration = Не вдалося отримати три core_failed_to_get_video_dimensions = Не вдалося отримати розміри відео для файлу "{ $file }" core_frame_dimensions_mismatch = Розміри кадру для відмітку часу { $timestamp } не відповідають розмірам першого кадру ({ $first_w }x{ $first_h }) core_failed_to_load_data_from_cache = Не вдалося завантажити дані з файлу кешу { $file }, причина { $reason } -core_failed_to_load_data_from_json_cache = Не вдалося завантажити дані з JSON файлу кешу { $file}, причина { $reason } +core_failed_to_load_data_from_json_cache = Не вдалося завантажити дані з JSON файлу кешу { $file }, причина { $reason } core_failed_to_replace_with_optimized = Не вдалося замінити файл "{ $file }" на оптимізовану версію: { $reason } core_failed_to_write_data_to_cache = Не вдається записати дані до кешованого файлу "{ $file }", причина { $reason } core_properly_saved_cache_entries = Правильно збережено у файл { $count } записів кешу. @@ -95,3 +95,6 @@ core_cannot_create_or_open_cache_file = Не вдається створити core_cannot_set_config_cache_path = Не вдається встановити шлях до конфігурації/кешу - конфігурація та кеш не будуть використані. core_invalid_extension_contains_space = { $extension } не є допустимим розширенням, оскільки воно містить порожній простір всередині core_invalid_extension_contains_dot = { $extension } не є допустимим розширенням, оскільки воно містить крапку всередині + +core_ffmpeg_unknown_encoder = Не вдалося закодувати файл { $file } за допомогою кодека { $encoder }. Поточна версія FFmpeg не підтримує цей кодек. Використовуйте іншу версію FFmpeg з підтримкою необхідного кодека або виберіть інший кодек. +core_ffmpeg_error = Помилка FFmpeg під час обробки файлу { $file }, код помилки { $code }, причина { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/vi/czkawka_core.ftl b/czkawka_core/i18n/vi/czkawka_core.ftl new file mode 100644 index 000000000..cd110fdb7 --- /dev/null +++ b/czkawka_core/i18n/vi/czkawka_core.ftl @@ -0,0 +1,100 @@ +# Core +core_similarity_original = Bản gốc +core_similarity_very_high = Rất cao +core_similarity_high = Cao +core_similarity_medium = Trung bình +core_similarity_small = Nhỏ +core_similarity_very_small = Rất nhỏ +core_similarity_minimal = Tối giản +core_cannot_open_dir = Cannot open dir { $dir }, reason { $reason } +core_cannot_read_entry_dir = Cannot read entry in dir { $dir }, reason { $reason } +core_cannot_read_metadata_dir = Cannot read metadata in dir { $dir }, reason { $reason } +core_cannot_read_metadata_file = Cannot read metadata of file { $file }, reason { $reason } +core_file_modified_before_epoch = File { $name } seems to have been modified before the Unix Epoch +core_folder_modified_before_epoch = Folder { $name } seems to have been modified before the Unix Epoch +core_file_no_modification_date = Unable to get modification date from file { $name }, reason { $reason } +core_folder_no_modification_date = Unable to get modification date from folder { $name }, reason { $reason } +core_cannot_start_scan_no_included_paths = Không thể bắt đầu quá trình quét, vì không có đường dẫn nào được bao gồm +core_skip_exist_check_all_included_paths_nonexistent = Không thể bắt đầu quá trình quét, vì tất cả các đường dẫn được bao gồm đều không tồn tại +core_missing_no_chosen_included_path = Không có đường dẫn hợp lệ nào được chọn (các đường dẫn bị loại trừ có thể đã loại trừ tất cả các đường dẫn được chọn) +core_reference_included_paths_same = Không thể bắt đầu quá trình quét nếu tất cả các đường dẫn được bao gồm đều cũng là các đường dẫn được tham chiếu. Vui lòng kiểm tra tính hợp lệ hoặc tắt các đường dẫn được tham chiếu +core_path_must_exists = Đường dẫn được cung cấp phải tồn tại, bỏ qua { $path } +core_must_be_directory_or_file = Đường dẫn được cung cấp phải trỏ đến một thư mục hoặc tệp hợp lệ, bỏ qua { $path } +core_excluded_paths_pointless_slash = Việc loại trừ "/ " là vô ích, vì điều đó có nghĩa là không có tệp nào sẽ được quét +core_paths_unable_to_get_device_id = Không thể lấy ID thiết bị từ thư mục { $path } +core_needs_allowed_extensions_limited_by_tool = Không thể bắt đầu quá trình quét nếu tất cả các tiện ích mở rộng có sẵn trong công cụ này ({$extensions}) đều bị loại trừ khỏi quá trình quét +core_needs_allowed_extensions = Không thể bắt đầu quá trình quét nếu tất cả các tiện ích mở rộng đều bị loại trừ khỏi quá trình quét +core_needs_to_set_at_least_one_broken_option = Không thể bắt đầu quá trình quét nếu không có tùy chọn nào được chọn để quét +core_needs_to_set_at_least_one_bad_name_option = Không thể bắt đầu quá trình quét nếu không có tùy chọn "tên xấu" được chọn để quét +core_ffmpeg_not_found = Không tìm thấy phiên bản FFmpeg hoặc FFprobe được cài đặt đúng cách. Đây là các chương trình bên ngoài và cần được cài đặt thủ công. +core_ffmpeg_not_found_windows = Đảm bảo rằng các tệp ffmpeg.exe và ffprobe.exe có mặt trong biến môi trường PATH hoặc được đặt trực tiếp trong cùng thư mục với tệp thực thi của ứng dụng +core_invalid_symlink_infinite_recursion = Đệ quy vô hạn +core_invalid_symlink_non_existent_destination = Tệp đích không tồn tại +core_messages_limit_reached_characters = Number of messages exceeded the set limit ({ $current }/{ $limit } characters), so the output was truncated. To read the full output, disable the limiting option in settings. +core_messages_limit_reached_lines = Number of messages exceeded the set limit ({ $current }/{ $limit } lines), so the output was truncated. To read the full output, disable the limiting option in settings. +core_error_moving_to_trash = Lỗi khi di chuyển "{ $file }" vào thùng rác: { $error } +core_error_removing = Lỗi khi xóa "{ $file }": { $error } +core_no_similarity_method_selected = Không thể tìm thấy các tệp nhạc tương tự nếu chưa chọn phương pháp so sánh +core_failed_to_spawn_command = Không thể khởi động lệnh: { $reason } +core_failed_to_check_process_status = Không thể kiểm tra trạng thái tiến trình: { $reason } +core_failed_to_wait_for_process = Không thể chờ đợi quá trình hoàn tất: { $reason } +core_failed_to_read_video_properties = Không thể đọc thông tin của video: { $reason } +core_failed_to_execute_ffmpeg = Không thể thực thi ffmpeg: { $reason } +core_ffmpeg_failed_with_status = ffmpeg đã gặp lỗi với mã trạng thái { $status }: { $stderr } (lệnh: { $command }) +core_failed_to_load_image_frame = Không thể tải khung hình ảnh: { $reason } +core_failed_to_extract_frame = Không thể trích xuất khung tại giây { $time } từ "{ $file }": { $reason } +core_failed_to_save_thumbnail = Không thể lưu bản xem trước cho "{ $file }": { $reason } +core_failed_get_frame_at_timestamp = Không thể lấy khung dữ liệu tại thời điểm { $timestamp } từ "{ $file }": { $reason } +core_failed_get_frame_from_file = Không thể lấy khung hình từ "{ $file }" tại thời điểm { $timestamp }: { $reason } +core_invalid_crop_rectangle = Khu vực cắt không hợp lệ: trái={ $left }, trên={ $top }, phải={ $right }, dưới={ $bottom } +core_failed_to_crop_video_file = Không thể cắt đoạn video "{ $file }": { $reason } +core_cropped_video_not_created = Tệp video đã được cắt nhưng không được tạo: { $temp } +core_unable_check_hash_of_file = Không thể kiểm tra giá trị băm của tệp "{ $file }", lý do: { $reason } +core_error_checking_hash_of_file = Đã xảy ra lỗi khi kiểm tra giá trị hash của tệp "{ $file }", nguyên nhân: { $reason } +core_image_zero_dimensions = Hình ảnh có chiều rộng hoặc chiều cao bằng không tại đường dẫn "{ $path }" +core_image_open_failed = Không thể mở file ảnh "{ $path }": { $reason } +core_not_directory_remove = Đang cố gắng xóa thư mục "{ $path }" nhưng đây không phải là một thư mục +core_cannot_read_directory = Không thể đọc thư mục "{ $path }" +core_cannot_read_entry_from_directory = Không thể đọc mục từ thư mục "{ $path }" +core_folder_contains_file_inside = Thư mục chứa tệp "{ $entry }" nằm trong thư mục "{ $folder }" +core_unknown_directory_entry = Không thể xác định kiểu tệp của mục thư mục "{ $entry }" nằm trong thư mục "{ $path }" +core_video_width_exceeds_limit = Độ rộng video { $width } vượt quá giới hạn { $limit } +core_video_height_exceeds_limit = Chiều cao của video { $height } vượt quá giới hạn { $limit } +core_failed_to_process_video = Không thể xử lý tệp video { $file }: { $reason } +core_optimized_file_larger = Tệp đã được tối ưu hóa { $optimized } (dung lượng: { $new_size }) không nhỏ hơn tệp gốc { $original } (dung lượng: { $original_size }) +core_unknown_codec = Mã hóa không xác định: { $codec } +core_invalid_video_optimizer_mode = Chế độ tối ưu hóa video không hợp lệ: '{ $mode }'. Các giá trị cho phép: transcode, crop +core_folder_does_not_exist = Thư mục không tồn tại: { $folder } +core_path_not_directory = Đường dẫn không phải là một thư mục: { $folder } +core_test_error_for_folder = Kiểm tra lỗi cho thư mục: { $folder } +core_unknown_exif_tag_group = Nhóm thẻ EXIF không xác định: { $tag } +core_error_comparing_fingerprints = Lỗi khi so sánh dấu vân tay: { $reason } +core_failed_to_generate_thumbnail_frames_different_dimensions = Không thể tạo ảnh thu nhỏ cho "{ $file }": các khung hình được trích xuất có kích thước khác nhau +core_failed_to_generate_thumbnail = Không thể tạo ảnh thu nhỏ cho "{ $file }": { $reason } +core_failed_to_extract_frame_at_seek_time = Không thể trích xuất khung tại giây { $time } từ "{ $file }": { $reason } +core_video_file_does_not_exist = Tệp video không tồn tại (có thể đã bị xóa trong quá trình quét/các bước sau): "{ $path }" +core_image_too_large = Hình ảnh quá lớn ({$width}x{$height}) - vượt quá giới hạn { $max } pixel được hỗ trợ +core_failed_to_get_video_metadata = Không thể lấy thông tin chi tiết của video cho tệp "{ $file }": { $reason } +core_failed_to_get_video_codec = Không thể lấy được bộ mã hóa video cho file "{ $file }" +core_failed_to_get_video_duration = Không thể lấy được thời lượng video cho tệp "{ $file }" +core_failed_to_get_video_dimensions = Không thể lấy được kích thước video của file "{ $file }" +core_frame_dimensions_mismatch = Kích thước khung hình cho dấu thời gian { $timestamp } không khớp với kích thước khung hình đầu tiên ({ $first_w }x{ $first_h }) +core_failed_to_load_data_from_cache = Không thể tải dữ liệu từ tệp cache { $file }, lý do: { $reason } +core_failed_to_load_data_from_json_cache = Không thể tải dữ liệu từ tệp bộ nhớ đệm JSON { $file }, nguyên nhân { $reason } +core_failed_to_replace_with_optimized = Không thể thay thế tệp "{ $file }" bằng phiên bản tối ưu hóa: { $reason } +core_failed_to_write_data_to_cache = Không thể ghi dữ liệu vào tệp bộ nhớ đệm "{ $file }", lý do: { $reason } +core_properly_saved_cache_entries = Đã lưu thành công { $count } mục vào bộ nhớ đệm. +core_video_processing_stopped_by_user = Quá trình xử lý video đã bị người dùng dừng lại +core_thumbnail_generation_stopped_by_user = Quá trình tạo ảnh thu nhỏ đã bị người dùng hủy +core_failed_to_optimize_video = Không thể tối ưu hóa video "{ $file }": { $reason } +core_failed_to_crop_video = Không thể cắt video "{ $file }": { $reason } +core_failed_to_get_metadata_of_optimized_file = Không thể lấy thông tin chi tiết của tệp đã được tối ưu hóa "{ $file }": { $reason } +core_cannot_create_config_folder = Không thể tạo thư mục cấu hình "{ $folder }", lý do: { $reason } +core_cannot_create_cache_folder = Không thể tạo thư mục cache "{ $folder }", lý do: { $reason } +core_cannot_create_or_open_cache_file = Không thể tạo hoặc mở tệp cache "{ $file }", lý do: { $reason } +core_cannot_set_config_cache_path = Không thể thiết lập đường dẫn cấu hình/cache - cấu hình và cache sẽ không được sử dụng. +core_invalid_extension_contains_space = { $extension } không phải là một phần mở rộng hợp lệ vì nó chứa khoảng trắng ở bên trong +core_invalid_extension_contains_dot = { $extension } không phải là một phần mở rộng hợp lệ vì nó chứa dấu chấm bên trong + +core_ffmpeg_unknown_encoder = Không thể mã hóa { $file } bằng bộ mã hóa { $encoder }. Phiên bản FFmpeg hiện tại không hỗ trợ bộ mã hóa này. Vui lòng sử dụng một phiên bản FFmpeg khác có hỗ trợ codec cần thiết hoặc chọn một bộ mã hóa khác. +core_ffmpeg_error = Lỗi FFmpeg khi xử lý { $file }, mã lỗi { $code }, lý do { $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/zh-CN/czkawka_core.ftl b/czkawka_core/i18n/zh-CN/czkawka_core.ftl index e4fcb0d47..876933bef 100644 --- a/czkawka_core/i18n/zh-CN/czkawka_core.ftl +++ b/czkawka_core/i18n/zh-CN/czkawka_core.ftl @@ -95,3 +95,6 @@ core_cannot_create_or_open_cache_file = 无法创建或打开缓存文件 "{ $fi core_cannot_set_config_cache_path = 无法设置配置/缓存路径 - 配置和缓存将不会被使用。. core_invalid_extension_contains_space = { $extension } 不是一个有效的扩展名,因为它包含内部的空格 core_invalid_extension_contains_dot = { $extension } 不是一个有效的扩展名,因为它包含在点内 + +core_ffmpeg_unknown_encoder = 无法使用 { $encoder } 编码器对 { $file } 进行编码。当前的 FFmpeg 版本不支持此编码器。请使用支持所需编解码器的其他 FFmpeg 版本,或选择其他编码器。. +core_ffmpeg_error = FFmpeg 处理 { $file } 时发生错误,状态码为 { $code },原因:{ $reason } \ No newline at end of file diff --git a/czkawka_core/i18n/zh-TW/czkawka_core.ftl b/czkawka_core/i18n/zh-TW/czkawka_core.ftl index f4c9d7bcc..bdc1feaa8 100644 --- a/czkawka_core/i18n/zh-TW/czkawka_core.ftl +++ b/czkawka_core/i18n/zh-TW/czkawka_core.ftl @@ -95,3 +95,6 @@ core_cannot_create_or_open_cache_file = 無法建立或開啟快取檔案 "{ $fi core_cannot_set_config_cache_path = 無法設定 config/cache 路径 - config 和 cache 将不会被使用。. core_invalid_extension_contains_space = { $extension } 不是一個有效的擴充類型,因為它包含內部的空白 core_invalid_extension_contains_dot = { $extension } 不是一個有效的擴充類型,因為它包含內部的點。 + +core_ffmpeg_unknown_encoder = 無法使用 { $encoder } 編碼器來編碼 { $file }。 目前的 FFmpeg 版本不支援此編碼器。 請使用支援所需編碼器的其他 FFmpeg 版本,或選擇其他編碼器。. +core_ffmpeg_error = FFmpeg 處理 { $file } 時發生錯誤,狀態碼為 { $code },原因:{ $reason } \ No newline at end of file diff --git a/czkawka_core/src/common/image.rs b/czkawka_core/src/common/image.rs index abc510e26..13ddb80a2 100644 --- a/czkawka_core/src/common/image.rs +++ b/czkawka_core/src/common/image.rs @@ -119,6 +119,16 @@ pub struct ImgResizeOptions { pub filter: FirFilterType, } +pub fn resize_image_exact(img: &DynamicImage, width: u32, height: u32, filter: FirFilterType) -> DynamicImage { + let mut dst = DynamicImage::new(width, height, img.color()); + let fir_opts = FirResizeOptions::new().resize_alg(ResizeAlg::Interpolation(filter)); + + match Resizer::new().resize(img, &mut dst, Some(&fir_opts)) { + Ok(()) => dst, + Err(_) => img.resize_exact(width, height, image::imageops::FilterType::Lanczos3), + } +} + fn resize_image(img: DynamicImage, opts: ImgResizeOptions) -> DynamicImage { let orig_w = img.width(); let orig_h = img.height(); diff --git a/czkawka_core/src/tools/video_optimizer/core.rs b/czkawka_core/src/tools/video_optimizer/core.rs index b8d1653bc..7246103b4 100644 --- a/czkawka_core/src/tools/video_optimizer/core.rs +++ b/czkawka_core/src/tools/video_optimizer/core.rs @@ -386,7 +386,7 @@ impl VideoOptimizer { return None; } - match process_video(stop_flag, &entry.path.to_string_lossy(), entry.size, video_transcode_params) { + match process_video(stop_flag, &entry.path.to_string_lossy(), entry.size, &video_transcode_params) { Ok(_new_size) => Some(None), Err(e) => Some(Some(flc!("core_failed_to_optimize_video", file = entry.path.to_string_lossy(), reason = e))), } diff --git a/czkawka_core/src/tools/video_optimizer/core/video_converter.rs b/czkawka_core/src/tools/video_optimizer/core/video_converter.rs index ae0b09676..7acaff6a2 100644 --- a/czkawka_core/src/tools/video_optimizer/core/video_converter.rs +++ b/czkawka_core/src/tools/video_optimizer/core/video_converter.rs @@ -46,48 +46,13 @@ pub fn check_video(mut entry: VideoTranscodeEntry) -> VideoTranscodeEntry { entry } -pub fn process_video(stop_flag: &Arc, video_path: &str, original_size: u64, params: VideoTranscodeFixParams) -> Result<(), String> { +pub fn process_video(stop_flag: &Arc, video_path: &str, original_size: u64, params: &VideoTranscodeFixParams) -> Result<(), String> { let temp_output = Path::new(video_path).with_extension("czkawka_optimized.mp4"); - let mut command = Command::new("ffmpeg"); - command - .arg("-i") - .arg(video_path) - .arg("-nostdin") - .arg("-c:v") - .arg(params.codec.as_str()) - .arg("-crf") - .arg(params.quality.to_string()); - - if params.limit_video_size { - let scale_filter = format!("scale='min({},iw):min({},ih):force_original_aspect_ratio=decrease'", params.max_width, params.max_height); - command.arg("-vf").arg(scale_filter); - } - - command.arg("-c:a").arg("copy").arg("-y").arg(&temp_output); - - match run_command_interruptible(command, stop_flag) { - None => { - let _ = fs::remove_file(&temp_output); - return Err(flc!("core_video_processing_stopped_by_user")); - } - Some(Err(e)) => { - let _ = fs::remove_file(&temp_output); - return Err(flc!("core_failed_to_process_video", file = video_path, reason = e)); - } - Some(Ok(output)) => { - if !output.status.success() { - let connected = format!("{} - {}", output.stdout, output.stderr); - if connected.to_lowercase().contains("unknown encoder") { - return Err(flc!("core_ffmpeg_unknown_encoder", file = video_path, encoder = params.codec.as_ffprobe_codec_name())); - } - error!( - "FFmpeg failed to transcode video \"{}\" with status {}. Stdout: {}, Stderr: {}", - video_path, output.status, output.stdout, output.stderr - ); - return Err(flc!("core_ffmpeg_error", file = video_path, code = output.status.to_string(), reason = output.stderr)); - } - } + if let Some(ref cmd) = params.custom_ffmpeg_command { + run_custom_command(cmd, video_path, &temp_output, stop_flag)?; + } else { + run_standard_command(params, video_path, &temp_output, stop_flag)?; } let metadata = fs::metadata(&temp_output).map_err(|e| { @@ -117,8 +82,85 @@ pub fn process_video(stop_flag: &Arc, video_path: &str, original_siz let _ = fs::remove_file(&temp_output); flc!("core_failed_to_replace_with_optimized", file = video_path, reason = e.to_string()) })?; - return Ok(()); } Ok(()) } + +fn run_standard_command(params: &VideoTranscodeFixParams, video_path: &str, temp_output: &Path, stop_flag: &Arc) -> Result<(), String> { + let mut command = Command::new("ffmpeg"); + command + .arg("-i") + .arg(video_path) + .arg("-nostdin") + .arg("-c:v") + .arg(params.codec.as_str()) + .arg("-crf") + .arg(params.quality.to_string()); + + let mut filters: Vec = Vec::new(); + if params.limit_video_size { + filters.push(format!( + "scale='min({},iw):min({},ih):force_original_aspect_ratio=decrease'", + params.max_width, params.max_height + )); + } + if let Some(nr_filter) = params.noise_reduction.to_ffmpeg_filter(params.noise_reduction_strength) { + filters.push(nr_filter); + } + if !filters.is_empty() { + command.arg("-vf").arg(filters.join(",")); + } + + command.arg("-c:a").arg("copy").arg("-y").arg(temp_output); + + run_ffmpeg_command(command, video_path, params.codec.as_ffprobe_codec_name(), stop_flag, temp_output) +} + +fn run_custom_command(cmd: &str, video_path: &str, temp_output: &Path, stop_flag: &Arc) -> Result<(), String> { + if !cmd.split_whitespace().any(|t| t == "{PATH}") { + return Err(flc!("core_custom_command_missing_path_placeholder")); + } + + let args: Vec = cmd.split_whitespace().map(|t| if t == "{PATH}" { video_path.to_string() } else { t.to_string() }).collect(); + + let Some(first_arg) = args.first() else { + return Err(flc!("core_custom_command_empty")); + }; + let Some(next_args) = args.get(1..) else { + return Err(flc!("core_custom_command_empty")); + }; + + let mut command = Command::new(first_arg); + command.args(next_args).arg("-y").arg(temp_output); + + run_ffmpeg_command(command, video_path, "custom", stop_flag, temp_output) +} + +fn run_ffmpeg_command(command: Command, video_path: &str, codec_name: &str, stop_flag: &Arc, temp_output: &Path) -> Result<(), String> { + match run_command_interruptible(command, stop_flag) { + None => { + let _ = fs::remove_file(temp_output); + Err(flc!("core_video_processing_stopped_by_user")) + } + Some(Err(e)) => { + let _ = fs::remove_file(temp_output); + Err(flc!("core_failed_to_process_video", file = video_path, reason = e)) + } + Some(Ok(output)) => { + if !output.status.success() { + let connected = format!("{} - {}", output.stdout, output.stderr); + if connected.to_lowercase().contains("unknown encoder") { + return Err(flc!("core_ffmpeg_unknown_encoder", file = video_path, encoder = codec_name)); + } + error!( + "FFmpeg failed to transcode video \"{}\" with status {}. Stdout: {}, Stderr: {}", + video_path, output.status, output.stdout, output.stderr + ); + let _ = fs::remove_file(temp_output); + return Err(flc!("core_ffmpeg_error", file = video_path, code = output.status.to_string(), reason = output.stderr)); + } + Ok(()) + } + } +} diff --git a/czkawka_core/src/tools/video_optimizer/mod.rs b/czkawka_core/src/tools/video_optimizer/mod.rs index ace9ddb8e..2928c25a8 100644 --- a/czkawka_core/src/tools/video_optimizer/mod.rs +++ b/czkawka_core/src/tools/video_optimizer/mod.rs @@ -27,7 +27,7 @@ impl VideoCodec { match self { Self::H264 => "libx264", Self::H265 => "libx265", - Self::Av1 => "libaom-av1", + Self::Av1 => "libsvtav1", Self::Vp9 => "libvpx-vp9", } } @@ -49,13 +49,49 @@ impl std::str::FromStr for VideoCodec { match codec.to_lowercase().as_str() { "h264" | "libx264" => Ok(Self::H264), "h265" | "hevc" | "libx265" => Ok(Self::H265), - "av1" | "libaom-av1" => Ok(Self::Av1), + "av1" | "libaom-av1" | "libsvtav1" | "svtav1" => Ok(Self::Av1), "vp9" | "libvpx-vp9" => Ok(Self::Vp9), _ => Err(flc!("core_unknown_codec", codec = codec)), } } } +#[derive(Clone, Debug, Default, PartialEq)] +pub enum NoiseReductionMethod { + #[default] + None, + Hqdn3d, +} + +impl NoiseReductionMethod { + pub const fn as_str(&self) -> &str { + match self { + Self::None => "none", + Self::Hqdn3d => "hqdn3d", + } + } + + pub fn to_ffmpeg_filter(&self, strength: u32) -> Option { + let s = strength.clamp(1, 10) as f32; + match self { + Self::None => None, + Self::Hqdn3d => Some(format!("hqdn3d={:.1}:{:.1}:{:.1}:{:.1}", s * 0.8, s * 0.6, s * 1.2, s * 0.9)), + } + } +} + +impl std::str::FromStr for NoiseReductionMethod { + type Err = String; + + fn from_str(s: &str) -> Result { + match s.to_lowercase().as_str() { + "none" => Ok(Self::None), + "hqdn3d" => Ok(Self::Hqdn3d), + _ => Err(format!("Unknown noise reduction method: {s}")), + } + } +} + #[derive(Copy, Clone, Eq, PartialEq, Debug)] pub enum VideoCroppingMechanism { BlackBars, @@ -79,13 +115,13 @@ impl std::str::FromStr for VideoOptimizerMode { } } -#[derive(Copy, Clone, Eq, PartialEq, Debug)] +#[derive(Clone, PartialEq, Debug)] pub enum VideoOptimizerFixParams { VideoTranscode(VideoTranscodeFixParams), VideoCrop(VideoCropFixParams), } -#[derive(Copy, Clone, Eq, PartialEq, Debug)] +#[derive(Clone, PartialEq, Debug)] pub struct VideoTranscodeFixParams { pub codec: VideoCodec, pub quality: u32, @@ -94,6 +130,9 @@ pub struct VideoTranscodeFixParams { pub limit_video_size: bool, pub max_width: u32, pub max_height: u32, + pub noise_reduction: NoiseReductionMethod, + pub noise_reduction_strength: u32, + pub custom_ffmpeg_command: Option, } #[derive(Copy, Clone, Eq, PartialEq, Debug)] diff --git a/czkawka_gui/CLAUDE.md b/czkawka_gui/CLAUDE.md new file mode 100644 index 000000000..73404e999 --- /dev/null +++ b/czkawka_gui/CLAUDE.md @@ -0,0 +1,194 @@ +# czkawka_gui – Architecture Guide + +## Status: Maintenance mode only + +No new features. Bug-fixes that keep it compatible with `czkawka_core` API +changes are accepted. + +--- + +## Overview + +GTK4 frontend using XML UI files authored in Cambalache. All scanning tools +available in `czkawka_core` are exposed via a notebook (tab-based) interface. + +--- + +## Source Layout + +``` +czkawka_gui/src/ +├── main.rs # GTK Application setup, GuiData construction +├── initialize_gui.rs # Initial widget state +├── compute_results.rs # Converts scan results → GTK ListStore rows +├── saving_loading.rs # JSON settings load/save +├── language_functions.rs # LANGUAGES_ALL constant (26 entries) +├── localizer_gui.rs # flg! macro, Fluent loader +├── gui_structs/ +│ ├── gui_data.rs # GuiData – central struct for all UI components +│ ├── gui_main_notebook.rs # 11-tool tab notebook +│ ├── gui_upper_notebook.rs # Included/excluded directory tabs +│ ├── gui_settings.rs # Settings dialog +│ ├── gui_header.rs # Menu bar (About, Settings) +│ ├── gui_bottom_buttons.rs # Action buttons (Search, Delete, etc.) +│ ├── gui_progress_dialog.rs # Scan progress window +│ ├── gui_about.rs # About dialog +│ ├── gui_compare_images.rs # Side-by-side image diff overlay +│ ├── common_tree_view.rs # TreeView/ListStore rendering + SharedModelEnum +│ ├── common_upper_tree_view.rs # Dir-list TreeViews +│ ├── gui_popovers_select.rs # Selection filter popovers +│ └── gui_popovers_sort.rs # Sort filter popovers +├── connect_things/ # Callback wiring files +│ ├── connect_button_search.rs # Scan thread spawn + progress forwarding +│ ├── connect_button_delete.rs # File deletion with confirmation +│ ├── connect_button_save.rs # Export results (CSV/JSON) +│ ├── connect_button_select.rs # Row selection helpers +│ ├── connect_button_sort.rs # Column-header sort +│ ├── connect_button_stop.rs # Cancel scan (stop flag) +│ ├── connect_button_move.rs # Move files to folder +│ ├── connect_button_hardlink.rs # Hard-link/symlink creation +│ ├── connect_button_compare.rs # Image comparison launcher +│ ├── connect_duplicate_buttons.rs # Duplicate-specific UI +│ ├── connect_notebook_tabs.rs # Tab-switch handler +│ ├── connect_selection_of_directories.rs # Dir-picker dialogs +│ ├── connect_change_language.rs # Language switch + full UI relabel +│ ├── connect_settings.rs # Settings window callbacks +│ ├── connect_progress_window.rs # Progress bar updates from channel +│ ├── connect_show_hide_ui.rs # Error text visibility toggle +│ ├── connect_similar_image_size_change.rs +│ ├── connect_same_music_mode_changed.rs +│ ├── connect_popovers_select.rs +│ ├── connect_popovers_sort.rs +│ ├── connect_header_buttons.rs +│ ├── connect_about_buttons.rs +│ ├── connect_krokiet_info_dialog.rs # One-time Krokiet migration notice +│ └── file_chooser_helpers.rs +├── helpers/ +│ ├── enums.rs # Column index enums for all tools +│ ├── list_store_operations.rs # Append/read GTK ListStore rows +│ ├── image_operations.rs # Image resize/preview for GTK +│ ├── model_iter.rs # GTK TreeView iteration +│ └── mod.rs +├── help_functions.rs # HEADER_ROW_COLOR, MAIN_ROW_COLOR, set_buttons +├── help_combo_box.rs # Combo box option arrays (hash algs, etc.) +├── notebook_enums.rs # NotebookMainEnum (per-tool tab index) +├── notebook_info.rs # Tab label + ListStore column definitions +├── opening_selecting_records.rs # Double-click → open file/folder +├── taskbar_progress.rs # Windows/dummy taskbar progress +└── gtk_traits.rs # Custom GTK trait extensions + +ui/ +├── main_window.ui # Cambalache XML (65 KB) – entire main window layout +├── settings.ui # Settings dialog +├── compare_images.ui # Image comparison panel +├── popover_select.ui # Selection filter popover +├── popover_sort.ui # Sort popover +├── about_dialog.ui # About window +└── progress.ui # Scan progress dialog +``` + +--- + +## GuiData Struct (`gui_structs/gui_data.rs`) + +Central struct passed by clone/reference to every callback: + +```rust +pub struct GuiData { + pub window_main: gtk4::Window, + pub main_notebook: GuiMainNotebook, // 11 tool tabs + pub upper_notebook: GuiUpperNotebook, // Dir configuration + pub bottom_buttons: GuiBottomButtons, // Action buttons + pub progress_window: GuiProgressDialog, + pub settings: GuiSettings, + pub header: GuiHeader, + pub compare_images: GuiCompareImages, + pub about: GuiAbout, + pub popovers_select: GuiSelectPopovers, + pub popovers_sort: GuiSortPopovers, + pub entry_info: gtk4::Entry, + pub text_view_errors: gtk4::TextView, + pub taskbar_state: Rc>, + pub shared_buttons: Rc>>, + pub stop_flag: Arc, +} +``` + +Constructed by `GuiData::new_with_application()` which loads all `.ui` files +via `gtk4::Builder`. + +--- + +## Scan Thread Architecture + +``` +User clicks Search +→ connect_button_search.rs +→ Disables UI, shows progress window +→ Spawn worker thread: + - Read settings from GTK widgets + - Create tool struct (e.g. DuplicateFinder) + - Call tool.search(stop_flag, progress_sender) + - Send Message::Duplicates(tool) via result_sender +→ Main thread: receive progress updates → update bars +→ On result received: + - compute_results.rs processes tool data → appends to ListStore + - Re-enables UI, hides progress +``` + +**Channel types:** +- `Sender` – one-shot result channel (tool enum with full data) +- `Sender` – real-time progress from core + +--- + +## Result Population (`compute_results.rs`) + +1. Receive `Message::Duplicates(DuplicateFinder)` from worker thread. +2. Extract sorted file groups from the tool. +3. For each group: insert a **header row** (colored `HEADER_ROW_COLOR`), then + one row per file (`MAIN_ROW_COLOR`). +4. `append_row_to_list_store()` writes individual cells to `gtk4::ListStore`. +5. `finalize_compute()` stores the tool object in `SubView.shared_model_enum` + (for later re-use by selection/sort callbacks). + +--- + +## Language Switching (`language_functions.rs`) + +26 languages defined as `LANGUAGES_ALL: &[Language]` with `combo_box_text` +(display name) and `short_text` (BCP-47 code). + +On language change: +1. Look up `short_text` from selected combo index. +2. Call `localizer.select([lang_id])` for both `czkawka_core` and `czkawka_gui`. +3. Call `gui_data.update_language()` → propagates to all sub-structs which + update their widget labels via `flg!("key")`. + +--- + +## Settings Storage (`saving_loading.rs`) + +JSON file at `~/.config/Czkawka/czkawka_gui_config.json`. Struct `SettingsJson` +serialized with `serde_json`. Includes directories, tool parameters, UI state, +language preference. + +--- + +## Key Dependencies + +| Crate | Purpose | +|-------|---------| +| `gtk4` 0.11 | GTK4 GUI framework | +| `gdk4` 0.11 | Drawing/rendering | +| `glib` 0.22 | Event loop, `spawn_future_local` | +| `i18n-embed` + `rust-embed` | Fluent translations | +| `open` 5.3 | Launch file manager | +| `image` 0.25 | Preview thumbnails | +| `resvg` 0.47 | SVG icon scaling | +| `rayon` 1.10 | Parallel sort of results | +| `crossbeam-channel` | Result + progress channels | +| `czkawka_core` | Scanning engine | + +Optional features (forwarded to core): `heif`, `libraw`, `libavif`, +`xdg_portal_trash`. diff --git a/czkawka_gui/Cargo.toml b/czkawka_gui/Cargo.toml index b03ab03b3..c68a41142 100644 --- a/czkawka_gui/Cargo.toml +++ b/czkawka_gui/Cargo.toml @@ -19,15 +19,13 @@ chrono = "0.4.38" crossbeam-channel = "0.5" directories-next = "2.0" open = "5.3" -image = "0.25" +image = { version = "0.25", default-features = false, features = ["jpeg", "png"] } regex = "1.11" fs_extra = "1.3" -dunce = "1.0.5" 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"] } diff --git a/czkawka_gui/i18n/ar/czkawka_gui.ftl b/czkawka_gui/i18n/ar/czkawka_gui.ftl index 4ee153579..7797f1815 100644 --- a/czkawka_gui/i18n/ar/czkawka_gui.ftl +++ b/czkawka_gui/i18n/ar/czkawka_gui.ftl @@ -8,18 +8,18 @@ general_ok_button = حسناً general_close_button = أغلق # Krokiet info dialog krokiet_info_title = تقديم Krokiet - نسخة جديدة من Czkawka -krokiet_info_message = - كروكيت هو الإصدار الجديد والمحسّن والأسرع والأكثر موثوقية لـ Czkawka GTK GUI! - - إنه أسهل في التشغيل وأكثر مقاومة للتغييرات في النظام، لأنه يعتمد فقط على المكتبات الأساسية المتاحة افتراضيًا على معظم الأنظمة. - - كروكيت أيضًا يقدم ميزات يفتقر إليها Czkawka، بما في ذلك الصور المصغرة في وضع مقارنة الفيديو، ومسحّف EXIF، وخيارات تقدم نقل/نسخ/حذف الملفات أو ترتيب موسع. - - جربه بنفسك وشاهد الفرق! - - ستواصل Czkawka تلقي إصلاحات الأخطاء والتحديثات الصغيرة مني، ولكن جميع الميزات الجديدة ستتم تطويرها حصريًا لكروكيت، وأي شخص حر في المساهمة بميزات جديدة أو إضافة أوضاع مفقودة أو توسيع Czkawka بشكل أكبر. - - ملاحظة: يجب أن يظهر هذا الرسالة مرة واحدة فقط. إذا ظهر مرة أخرى، قم بتعيين متغير البيئة CZKAWKA_DONT_ANNOY_ME إلى أي قيمة غير فارغة. +krokiet_info_message = + كروكيت هو الإصدار الجديد والمحسّن والأسرع والأكثر موثوقية لـ Czkawka GTK GUI! + + إنه أسهل في التشغيل وأكثر مقاومة للتغييرات في النظام، لأنه يعتمد فقط على المكتبات الأساسية المتاحة افتراضيًا على معظم الأنظمة. + + كروكيت أيضًا يقدم ميزات يفتقر إليها Czkawka، بما في ذلك الصور المصغرة في وضع مقارنة الفيديو، ومسحّف EXIF، وخيارات تقدم نقل/نسخ/حذف الملفات أو ترتيب موسع. + + جربه بنفسك وشاهد الفرق! + + ستواصل Czkawka تلقي إصلاحات الأخطاء والتحديثات الصغيرة مني، ولكن جميع الميزات الجديدة ستتم تطويرها حصريًا لكروكيت، وأي شخص حر في المساهمة بميزات جديدة أو إضافة أوضاع مفقودة أو توسيع Czkawka بشكل أكبر. + + ملاحظة: يجب أن يظهر هذا الرسالة مرة واحدة فقط. إذا ظهر مرة أخرى، قم بتعيين متغير البيئة CZKAWKA_DONT_ANNOY_ME إلى أي قيمة غير فارغة. # Main window music_title_checkbox = العنوان music_artist_checkbox = الفنان @@ -194,9 +194,9 @@ upper_excluded_extensions_tooltip = قائمة الملفات المعطلة التي سيتم تجاهلها في المسح. عند استخدام الملحقات المسموح بها والمعطلة على حد سواء، هذه واحدة لها أولوية أعلى، لذلك لن يتم تحديد الملف. -upper_excluded_items_tooltip = - يجب أن تتضمن العناصر المستبعدة * ويفصل بينها الفواصل. - هذا أبطأ من المسارات المستبعدة، لذا استخدمه بحذر. +upper_excluded_items_tooltip = + يجب أن تتضمن العناصر المستبعدة * ويفصل بينها الفواصل. + هذا أبطأ من المسارات المستبعدة، لذا استخدمه بحذر. upper_excluded_items = البنود المستثناة: upper_allowed_extensions = الإضافات المسموح بها: upper_excluded_extensions = الملحقات المعطّلة: @@ -376,7 +376,7 @@ settings_multiple_clear_cache_button = إزالة النتائج القديمة ## Duplicates -settings_duplicates_hide_hard_link_button_tooltip = +settings_duplicates_hide_hard_link_button_tooltip = يختبئ جميع الملفات باستثناء واحد، إذا أشار كل منها إلى نفس البيانات (وهو متصل بشكل صلب). مثال: في حالة وجود سبع ملفات على дисك مترابطة ببيانات معينة وملف مختلف يحتوي على نفس البيانات ولكن inode مختلف,则继续翻译剩下的部分: diff --git a/czkawka_gui/i18n/bg/czkawka_gui.ftl b/czkawka_gui/i18n/bg/czkawka_gui.ftl index 6754a316e..aab6c4f14 100644 --- a/czkawka_gui/i18n/bg/czkawka_gui.ftl +++ b/czkawka_gui/i18n/bg/czkawka_gui.ftl @@ -8,18 +8,18 @@ general_ok_button = Ок general_close_button = Затвори # Krokiet info dialog krokiet_info_title = Представяме ви Krokiet - Нова версия на Czkawka -krokiet_info_message = - Krokiet е новата, подобрена, по-бърза и по-надеждна версия на Czkawka GTK GUI! - - По-лесно се изпълнява и е по-устойчив на системни промени, тъй като разчита само на основни библиотеки, налични по подразбиране на повечето системи. - - Krokiet също така предлага функции, които Czkawka няма, включително миниатюри в режим на сравнение на видео, EXIF почистване, прогрес при преместване/копиране/изтриване на файлове или разширени опции за сортиране. - - Опитайте го и вижте разликата! - - Czkawka ще продължи да получава поправки на грешки и малки актуализации от мен, но всички нови функции ще бъдат разработени изключително за Krokiet, а всеки е свободен да допринася с нови функции, да добавя липсващи режими или да разширява Czkawka допълнително. - - ПС: Това съобщение трябва да се появи само веднъж. Ако се появи отново, задайте променливата на средата CZKAWKA_DONT_ANNOY_ME на всяка непразна стойност. +krokiet_info_message = + Krokiet е новата, подобрена, по-бърза и по-надеждна версия на Czkawka GTK GUI! + + По-лесно се изпълнява и е по-устойчив на системни промени, тъй като разчита само на основни библиотеки, налични по подразбиране на повечето системи. + + Krokiet също така предлага функции, които Czkawka няма, включително миниатюри в режим на сравнение на видео, EXIF почистване, прогрес при преместване/копиране/изтриване на файлове или разширени опции за сортиране. + + Опитайте го и вижте разликата! + + Czkawka ще продължи да получава поправки на грешки и малки актуализации от мен, но всички нови функции ще бъдат разработени изключително за Krokiet, а всеки е свободен да допринася с нови функции, да добавя липсващи режими или да разширява Czkawka допълнително. + + ПС: Това съобщение трябва да се появи само веднъж. Ако се появи отново, задайте променливата на средата CZKAWKA_DONT_ANNOY_ME на всяка непразна стойност. # Main window music_title_checkbox = Заглавие music_artist_checkbox = Изпълнител @@ -194,9 +194,9 @@ upper_excluded_extensions_tooltip = Списък с изключени от търсенето файлове. Когато се ползват едновременно включени и изключени разширения, този тук има по-голям приоритет и файла няма да бъде проверен. -upper_excluded_items_tooltip = - Изключените елементи трябва да съдържат * wildcard и да бъдат разделени с ками. - Това е по-бавно от Excluded Paths, така че използвайте внимателно. +upper_excluded_items_tooltip = + Изключените елементи трябва да съдържат * wildcard и да бъдат разделени с ками. + Това е по-бавно от Excluded Paths, така че използвайте внимателно. upper_excluded_items = Изключени елементи: upper_allowed_extensions = Разрешени разширения: upper_excluded_extensions = Изключени разширения: diff --git a/czkawka_gui/i18n/cs/czkawka_gui.ftl b/czkawka_gui/i18n/cs/czkawka_gui.ftl index d3489d343..78cfb2e95 100644 --- a/czkawka_gui/i18n/cs/czkawka_gui.ftl +++ b/czkawka_gui/i18n/cs/czkawka_gui.ftl @@ -4,39 +4,39 @@ window_main_title = Czkawka (Škytavka) window_progress_title = Skenování window_compare_images = Porovnat obrázky # General -general_ok_button = Ok +general_ok_button = OK general_close_button = Zavřít # Krokiet info dialog -krokiet_info_title = Představujeme Krokiet - Nová verze Czkawka -krokiet_info_message = - Krokiet je nový, vylepšený, rychlejší a spolehlivější verze Czkawky GTK GUI! - - Je snazší spouštět a odolnější vůči systémovým změnám, protože závisí pouze na základních knihovnách, které jsou standardně dostupné na většině systémů. - - Krokiet přináší také funkce, které Czkawka postrádá, včetně miniatur v režimu porovnání videa, EXIF čističe, průběhu přenosu/kopírování/smazání souborů nebo rozšířených možností třídění. - - Vyzkoušejte to a uvidíte rozdíl! - - Czkawka bude nadále dostávat opravy chyb a drobné aktualizace od mě, ale všechny nové funkce budou vyvíjeny výhradně pro Krokiet a kdokoliv je může volně přispívat novými funkcemi, přidávat chybějící režimy nebo rozšiřovat Czkawku dále. - - PS: Tato zpráva by měla být zobrazena pouze jednou. Pokud se zobrazí znovu, nastavte proměnnou CZKAWKA_DONT_ANNOY_ME na libovolnou neprázdnou hodnotu. +krokiet_info_title = Představujeme Krokiet – novou verzi Czkawky +krokiet_info_message = + Krokiet je nová, vylepšená, rychlejší a spolehlivější verze Czkawky (původní GTK GUI)! + + Je snáze provozovatelná a odolnější změnám v systému, protože závisí pouze na základních knihovnách, které jsou standardně dostupné na většině systémů. + + Krokiet také přináší funkce, které Czkawka postrádá – včetně náhledů v režimu porovnávání videí, nástroje pro čištění EXIF, ukazatele průběhu přesouvání/kopírování/mazání souborů nebo rozšířených možností třídění. + + Vyzkoušejte a uvidíte rozdíl! + + Czkawka ode mne bude nadále dostávat opravy chyb a drobné aktualizace, ale všechny nové funkce budou vyvíjeny výhradně pro Krokiet. Nicméně pokud by někdo chtěl, samozřejmě může do Czkawky přispívat novými funkcemi, přidávat chybějící režimy a nadále ji rozvíjet. + + PS: Tato zpráva by se měla zobrazit pouze jednou. Pokud se tak stane znovu, nastavte si proměnnou prostředí CZKAWKA_DONT_ANNOY_ME (na libovolnou neprázdnou hodnotu). # Main window -music_title_checkbox = Hlava 1 - Celkem +music_title_checkbox = Název music_artist_checkbox = Umělec music_year_checkbox = Rok -music_bitrate_checkbox = Přenosová rychlost +music_bitrate_checkbox = Bitová rychlost music_genre_checkbox = Žánr music_length_checkbox = Délka -music_comparison_checkbox = Přibližné srovnání +music_comparison_checkbox = Přibližné porovnání music_checking_by_tags = Štítky music_checking_by_content = Obsah same_music_seconds_label = Minimální délka trvání druhého fragmentu -same_music_similarity_label = Maximální rozdíl +same_music_similarity_label = Rozdíl nejvýše 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. + Pokud je zapnuto, soubory jsou seskupeny podle názvu a 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í. + V případě 10 000 souborů, namísto aby se dělalo téměř 100 milionů porovnání, takto obvykle postačí jen přibližně 20 000 porovnání. same_music_tooltip = Vyhledávání podobných hudebních souborů podle jejich obsahu může být nakonfigurováno nastavením: @@ -45,120 +45,120 @@ same_music_tooltip = 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. + Nastavení minimální doby na 5 s a maximálního rozdílu na 1,0 bude hledat téměř stejné fragmenty v souborech. + Doba 20 s a maximální rozdíl 6,0 naproti tomu funguje dobře pro nalezení remixů / nahrávek naživo 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). + Ve výchozím nastavení je každý hudební soubor porovnáván s ostatními a to může trvat opravdu 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ů 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 = Rozlišovat mezi malými a VELKÝMI písmeny duplicate_case_sensitive_name_tooltip = - Pokud je povoleno, skupiny pouze záznamy, pokud mají přesně stejný název, např.Żołd <-> Żołd + Pokud je povoleno, seskupit pouze záznamy, když 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 + Zakázání takové volby bude seskupovat názvy bez kontrolování, 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_mode_hash_combo_box = Otisk duplicate_hash_type_tooltip = - Czkawka nabízí 3 typy hash: + Czkawka nabízí 3 typy otisků: - Blake3 - kryptografická hash funkce. Toto je výchozí, protože je velmi rychlý. + Blake3 – kryptografická funkce pro spočítání otisku. 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. + CRC32 - jednoduchá funkce pro spočítání otisku. Toto by mělo být rychlejší než Blake3, ale může docházet (byť jen zřídka) k tomu, že různá data budou mít stejný otisk. - XXH3 - velmi podobné ve výkonu a kvalitě hash jako Blake3 (ale nekryptografické). Takovéto režimy mohou být snadno zaměnitelné. + XXH3 - velmi podobné ve výkonu a kvalitě jednoznačnosti otisku jako Blake3 (ale nezaloženo na kryptografii). Takže je vlastně jedno, který z těchto dvou použijete. duplicate_check_method_tooltip = - Pro tuto chvíli nabízí Czkawka tři typy metod, které vyhledávají duplicitní soubory: + Pro tuto chvíli Czkawka nabízí tři typy metod pro vyhledávání duplicitních souborů: - Název - Nalezení souborů, které mají stejný název. + Název – hledá soubory, které mají stejný název. - Velikost - Nalezí soubory, které mají stejnou velikost. + Velikost – hledá 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í. + Otisk – hledá soubory, které mají stejný obsah. V tomto režimu je u každého souboru vypočítán jeho otisk, a následně jejich porovnáním jsou hledány duplicity. Tento režim je nejbezpečnějším způsobem, jak hledat duplicity. Aplikace používá mezipaměť, takže druhé a další skenování stejných dat by mělo být mnohem rychlejší než to 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é. + Pro každý z kontrolovaných obrázků je vytvořen zvlášť otisk, které je mezi sebou možné porovnávat. Malý rozdíl mezi nimi znamená, že obrázky jsou si 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. + Velikost otisku 8 je docela dobrá k nalezení obrázků, které jsou alespoň trochu podobné originálům. V případě větší sady obrázků (>1000) to ale vytvoří velké množství falešných shod, takže je v takovém případě doporučeno použít větší velikost otisku. - 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í. + 16 je výchozí velikost otisku, což je docela dobrý kompromis mezi nalezením alespoň trochu podobných obrázků a pouze malým množstvím falešných shod. - 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). + S otisky velikosti 32 a 64 budou nalezeny jen opravdu velmi podobné obrázky, ale nemělo by docházet k téměř žádným falešným shodám (snad krom některých obrázků, obsahující alfa kanál průhlednosti). image_resize_filter_tooltip = - Pro výpočet hash obrázku musí knihovna nejprve změnit velikost. + Před vypočítáním otisku obrázku je třeba, aby zpracovávající softwarová knihovna přepočítala rozlišení jeho dočasné kopie na stejnou velikost, jako u ostatních porovnávaných. - V závislosti na zvoleném algoritmu bude výsledný obrázek použitý k výpočtu hash vypadat trochu jinak. + V závislosti na zvoleném algoritmu bude výsledný obrázek, použitý k výpočtu otisku, 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á. + Nejrychlejší algoritmus k používání, ale také ten, který dává nejhorší výsledky, je Nejbližší. Je nastavený jako výchozí, protože v případě velikost otisku 16x16 hash nedělá tato nižší kvalita rozdíl. - S velikostí hash 8x8 je doporučeno použít jiný algoritmus než nejbližší pro lepší skupiny obrázků. + V případě velikosti otisku 8x8 je doporučeno použít jiný algoritmus než Nejbližší, aby bylo obrázky seskupovány lépe. image_hash_alg_tooltip = - Uživatelé si mohou vybrat z jednoho z mnoha algoritmů pro výpočet hashu. + Uživatelé si mohou vybrat z jednoho z mnoha algoritmů pro výpočet otisku. - Každý má silné a slabší body a někdy přinese lepší a někdy horší výsledky pro různé obrázky. + Každý má silné a slabší stránky a někdy přinese lepší a někdy zase 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 + Takže k určení nejlepšího pro vás je zapotřebí ruční zkoušení. +big_files_mode_combobox_tooltip = Umožňuje vyhledávat nejmenší / 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_empty_directories = Prázdné složky 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_same_music = Hudební duplicity main_notebook_symlinks = Neplatné symbolické odkazy -main_notebook_broken_files = Rozbité soubory -main_notebook_bad_extensions = Špatná rozšíření +main_notebook_broken_files = Poškozené soubory +main_notebook_bad_extensions = Nesprávné přípony 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_path = Popis umístění 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_title = Název 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_bitrate = Bitová 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_destination_path = Cílový popis umístění 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_tree_view_column_fps = FPS +main_tree_view_column_current_extension = Stávající přípona +main_tree_view_column_proper_extensions = Správná přípona +main_tree_view_column_fps = Snímků/s main_tree_view_column_codec = Kodek main_label_check_method = Metoda kontroly -main_label_hash_type = Typ Hash -main_label_hash_size = Velikost hash +main_label_hash_type = Typ otisku +main_label_hash_size = Velikost otisku 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_resize_algorithm = Algoritmus pro změnu rozlišení 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_pdf = PDF +main_check_box_broken_files_archive = Archiv main_check_box_broken_files_image = Obrázek main_check_box_broken_files_video = Video -main_check_box_broken_files_video_tooltip = Používá ffmpeg/ffprobe k ověření video souborů. Poměrně pomalé a může detekovat pedantické chyby i když soubor hraje v pořádku. +main_check_box_broken_files_video_tooltip = Pro ověření videosouborů používá ffmpeg/ffprobe. Docela pomalé a může detekovat pedantické chyby i když se soubor přehrává v pořádku. 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í +check_button_general_same_size_tooltip = Ignorovat ve výsledcích soubory se stejnou velikostí – obvykle se jedná o duplicity 1:1 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_folder_column_title = Složky k prohledání 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_recursive_button = Rekurzivní +upper_recursive_button_tooltip = Pokud je vybráno, hledat 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 @@ -166,13 +166,13 @@ 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ě. + Ručně přidat název složky pro prohledání. - Chcete-li přidat více cest najednou, oddělte je od ; + Pokud chcete přidat vícero popisů umístění naráz, oddělujte je znakem ; (středník) - /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í. + /home/roman;/home/rozkaz přidá dvě složky: /home/roman a /home/rozkaz +upper_add_included_button_tooltip = Přidat novou složku k prohledání. +upper_remove_included_button_tooltip = Odstranit složku z prohledání. upper_manual_add_excluded_button_tooltip = Přidejte ručně název vyloučené adresáře. @@ -181,25 +181,25 @@ upper_manual_add_excluded_button_tooltip = /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é cesty +upper_notebook_items_configuration = Nastavení položek +upper_notebook_excluded_directories = Vynechané popisy umístění upper_notebook_included_directories = Zahrnuté cesty upper_allowed_extensions_tooltip = - Povolené přípony musí být odděleny čárkami (ve výchozím nastavení jsou všechny k dispozici). + Je třeba, aby povolené přípony byly oddělované čárkou (ve výchozím nastavení jsou k dispozici všechny). - Následující makra, která přidávají více rozšíření najednou, jsou také k dispozici: IMAGE, VIDEO, MUSIC, TEXT. + Jsou také k dispozici následující makra, která přidávají více rozšíření najednou: 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. + Příklad použití „.exe, IMAGE, VIDEO, .rar, 7z“ – toto znamená, že budou skenovány obrázky (např. jpg, png), videa (např. avi, mp4), exe, rar a 7z soubory. 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 = - Vyřazené položky musí obsahovat * wildcard a měly by být odděleny čárkami. - Toto je pomalejší než Excluded Paths, takže používejte opatrně. -upper_excluded_items = Vyloučené položky: -upper_allowed_extensions = Povolená rozšíření: -upper_excluded_extensions = Zakázané rozšíření: + Při používání povolených i zakázaných přípon, má tato vyšší prioritu, takže soubor nebude kontrolován. +upper_excluded_items_tooltip = + Je třeba, aby vynechané položky obsahovaly zástupný znak * (hvězdička) a byly oddělovány čárkou. + Toto je pomalejší než „Vynechané popisy umístění“, takže používejte opatrně. +upper_excluded_items = Vynechané položky: +upper_allowed_extensions = Povolené přípony: +upper_excluded_extensions = Zakázané přípony: # Popovers popover_select_all = Vybrat vše popover_unselect_all = Odznačit vše @@ -263,11 +263,11 @@ bottom_select_button = Vybrat bottom_delete_button = Vymazat bottom_save_button = Uložit bottom_symlink_button = Symlink -bottom_hardlink_button = Hardlink +bottom_hardlink_button = Pevný odkaz bottom_move_button = Přesunout bottom_sort_button = Seřadit bottom_compare_button = Porovnat -bottom_search_button_tooltip = Začít hledání +bottom_search_button_tooltip = Zahájit vyhledává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 @@ -285,24 +285,24 @@ bottom_hardlink_button_not_available_tooltip = 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. + Přesune soubory do zvolené složky. + Zkopíruje všechny soubory do složky (bez zachování stromu podsložek). + Pokud by takto mělo být do složky přesunuto vícero stejně nazvaných souborů, bude provedeno pouze u prvního z nich a pro ty ostatní bude vyhlášen nezdar a zobrazena chyba. 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. +bottom_show_upper_notebook_tooltip = Zobrazit/skrýt horní panel karet. # Progress Window progress_stop_button = Zastavit -progress_stop_additional_message = Zastavit požadavek +progress_stop_additional_message = Vyžádáno zastavení # About Window -about_repository_button_tooltip = Odkaz na stránku repositáře se zdrojovým kódem. +about_repository_button_tooltip = Odkaz na stránku repositáře se zdrojovými kódy. 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_instruction_button_tooltip = Odkaz na stránku s pokyny. +about_translation_button_tooltip = Odkaz na stránku Crowdin s překlady aplikace. Vývojář sám se soustřeďuje na polština a angličtinu. about_repository_button = Repozitář about_donation_button = Darovat -about_instruction_button = Instrukce +about_instruction_button = Pokyny about_translation_button = Překlad # Header header_setting_button_tooltip = Otevře dialogové okno nastavení. @@ -313,45 +313,45 @@ header_about_button_tooltip = Otevře dialog s informacemi o aplikaci. ## 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_number_of_threads = Počet použitých vláken procesoru +settings_number_of_threads_tooltip = Počet použitých vláken procesoru (0 znamená, že budou použita veškerá, která poskytuje). +settings_use_rust_preview = Pro načítání náhledů používat externí knihovny namísto gtk 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. + Používání gtk náhledů je někdy rychlejší a podporuje vícero formátů, ale v některých případech tomu může být právě naopak. - Pokud máte problémy s načítáním náhledů, můžete zkusit toto nastavení změnit. + Pokud máte problémy s načítáním náhledů, je možné vyzkoušet změnu tohoto nastavení. - 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) + Na jiných systémech, než jsou ty linuxové, je doporučeno tuto volbu použít, protože gtk-pixbuf nebývá vždy k dispozici – takže (při vypnutí této volby) by nebyly načítány náhledy některých obrázků. +settings_label_restart = Aby byla nastavení uplatněna, je třeba aplikaci restartovat! +settings_ignore_other_filesystems = Nepřekračovat na ostatní souborové systémy (pouze v Linuxu) settings_ignore_other_filesystems_tooltip = - ignoruje soubory, které nejsou ve stejném souborovém systému jako prohledávané adresáře. + ignoruje soubory, které se nenachází na stejném souborovém systému, jako prohledávané složky. - 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. + Funguje stejně jako předvolba -xdev u linuxového příkazu find +settings_save_at_exit_button_tooltip = Při ukončování aplikace uložit nastavení do souboru. settings_load_at_start_button_tooltip = - Načíst konfiguraci ze souboru při otevírání aplikace. + Při spouštění aplikace načíst nastavení ze souboru. - 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. + Pokud není zapnuto, budou použita výchozí nastavení. +settings_confirm_deletion_button_tooltip = Při kliknutí na tlačítko mazání zobrazit potvrzovací dialog. +settings_confirm_link_button_tooltip = Při kliknutí na tlačítko vytvoření pevného / symbolického odkazu zobrazit potvrzovací dialog. +settings_confirm_group_deletion_button_tooltip = Před pokusem o odstranění všech záznamů ze skupiny zobrazit varovný dialog. 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_use_cache_button_tooltip = Použít mezipaměť souborů. +settings_save_also_as_json_button_tooltip = Ukládat mezipaměť do (člověku srozumitelného) formátu JSON. Tím je možné ručně měnit její obsah. V případě, že by chyběla mezipaměť v binárním formátu (s příponou .bin), bude automaticky náhradně načtena právě z JSON souboru. +settings_use_trash_button_tooltip = Namísto jejich nevratného odstranění, přesouvá soubory do koše. 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_save_at_exit_button = Uložit nastavení při zavření aplikace +settings_load_at_start_button = Načíst nastavení při otevření aplikace +settings_confirm_deletion_button = Před mazáním jakýchkoli souborů zobrazit potvrzovací dialog +settings_confirm_link_button = Před vytvářením pevných / symbolických odkazů na jakékoli soubory zobrazit potvrzovací dialog +settings_confirm_group_deletion_button = Před mazáním všech souborů ve skupině zobrazit potvrzovací dialog settings_show_text_view_button = Zobrazit spodní textový panel -settings_use_cache_button = Použít keš +settings_use_cache_button = Použít mezipaměť 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_use_trash_button = Přesouvat mazané 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 = Automaticky z mezipaměti odstraňovat už neplatné položky settings_multiple_delete_outdated_cache_checkbutton_tooltip = Odstranit zastaralé výsledky mezipaměti, které ukazují na neexistující soubory. @@ -360,19 +360,19 @@ settings_multiple_delete_outdated_cache_checkbutton_tooltip = 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_general = Obecná +settings_notebook_duplicates = Duplicity settings_notebook_images = Podobné obrázky -settings_notebook_videos = Podobné video +settings_notebook_videos = Podobná videa ## 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_image_preview_checkbutton_tooltip = Při výběru obrázku zobrazí vpravo jeho náhled. +settings_multiple_image_preview_checkbutton = Zobrazovat 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. + Ručně spustit vyčištění mezipaměť od už neaktuálních položek. + Toto je zde pouze pro případy, kdy je vypnuté automatické čištění. +settings_multiple_clear_cache_button = Odstranit už neaktuální výsledky z mezipaměti. ## Duplicates @@ -398,29 +398,29 @@ settings_duplicates_minimal_size_cache_prehash_label = Minimální velikost soub ## 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_tooltip = Uložit stávající nastavení do souboru. +settings_loading_button_tooltip = Načíst nastavení ze souboru a nahradit jimi ta stávající. +settings_reset_button_tooltip = Vrátit stávající nastavení na výchozí hodnoty. settings_saving_button = Uložit konfiguraci -settings_loading_button = Načíst konfiguraci -settings_reset_button = Obnovit konfiguraci +settings_loading_button = Načíst nastavení +settings_reset_button = Vrátit nastavení na výchozí hodnoty ## Opening cache/config folders settings_folder_cache_open_tooltip = - Otevře složku, kde jsou uloženy soubory txt v mezipaměti. + Otevře složku, ve které jsou uloženy txt soubory 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í. + Úprava souborů může způsobit zobrazení neplatných výsledků. Nicméně upravení popisu umístění může ušetřit čas v případě přesunutí 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). + Tyto soubory je možné zkopírovat mezi počítači a ušetřit tak čas při opětovném skenování souborů (samozřejmě pokud mají podobnou adresářovou strukturu). - V případě problémů s mezipamětí, mohou být tyto soubory odstraněny. Aplikace je automaticky obnoví. + V případě problémů s mezipamětí je možné tyto soubory odstranit. Aplikace je automaticky znovu vytvořít. settings_folder_settings_open_tooltip = - Otevře složku, kde je uloženo nastavení Czkawka. + Otevře složku, ve kterou jsou uložena nastavení pro Czkawku. - VAROVÁNÍ: Ruční úprava konfigurace může poškodit váš pracovní postup. + VAROVÁNÍ: Ruční úprava nastavení může rozbít váš pracovní postup. settings_folder_cache_open = Otevřít složku mezipaměti -settings_folder_settings_open = Otevřít složku s nastavením +settings_folder_settings_open = Otevřít složku s nastaveními # 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 } v { $time } @@ -434,7 +434,7 @@ compute_found_videos = Nalezeno { $number_files } podobných videí v { $number_ compute_found_music = Nalezeno { $number_files } podobných hudebních souborů v { $number_groups } skupinách v { $time } compute_found_invalid_symlinks = Nalezeno { $number_files } neplatných symbolických odkazů v { $time } compute_found_broken_files = Nalezeno { $number_files } rozbitých souborů v { $time } -compute_found_bad_extensions = Nalezeno { $number_files } souborů s neplatnými příponami v { $time } +compute_found_bad_extensions = Nalezeno { $number_files } souborů s nesprávnými příponami za { $time } # Progress window progress_scanning_general_file = { $file_number -> @@ -444,56 +444,56 @@ progress_scanning_general_file = 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_creating_video_thumbnails = Vytvořené náhledy { $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_creating_video_thumbnails = Vytvořeny náhledy { $file_checked }/{ $all_files } videí +progress_scanning_image = Vytvořen otisk pro { $file_checked }/{ $all_files } obrázek ({ $data_checked }/{ $all_data }) +progress_comparing_image_hashes = Porovnáno { $file_checked }/{ $all_files } otisků 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_tags = Číst štížky { $file_checked }/{ $all_files } hudebního souboru +progress_scanning_music_content_end = Porovnávaný otisk souboru s hudbou { $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 + *[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_scanning_name = Naskenován název { $file_number } souboru +progress_analyzed_partial_hash = Analyzováno částečný otisk 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:{ " " } +progress_hash_cache_loading = Načítání mezipaměti otisků +progress_hash_cache_saving = Ukládání mezipaměti otisků +progress_cache_loading = Načítání mezipaměti +progress_cache_saving = Ukládání mezipaměti +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 }, důvod { $reason }. -saving_loading_reset_configuration = Aktuální konfigurace byla vymazána. -saving_loading_loading_success = Správně načtená konfigurace aplikace. -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_saving_success = Nastavení uložena do souboru { $name }. +saving_loading_saving_failure = Nepodařilo se uložit data nastavení do souboru { $name } – důvod: { $reason }. +saving_loading_reset_configuration = Stávající nastavení byla vymazána. +saving_loading_loading_success = Nastavení aplikace v pořádku načtena. +saving_loading_failed_to_create_config_file = Nepodařilo se vytvořit soubor s nastaveními „{ $path }“ – důvod: „{ $reason }“. +saving_loading_failed_to_read_config_file = Nebylo možné načíst nastavení z „{ $path }“, protože neexistuje nebo to není soubor. +saving_loading_failed_to_read_data_from_file = Nebylo možné načíst data ze souboru „{ $path }“ – důvod: „{ $reason }“. # 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. +text_view_errors = CHYBY +about_window_motto = Tuto aplikaci je možné bezplatně používat (nyní i v budoucnu). krokiet_new_app = Czkawka je v režimu údržby, což znamená, že budou opraveny pouze kritické chyby a nebudou přidány žádné nové funkce. Pro nové funkce si prosím přečtěte novou aplikaci Krokiet , která je stabilnější a výkonnější a je stále v aktivním vývoji. # Various dialog -dialogs_ask_next_time = Příště se zeptat -symlink_failed = Nepodařilo se symbolicky propojit { $name } do { $target }, důvod { $reason } +dialogs_ask_next_time = Zeptat se příště +symlink_failed = Nepodařilo se vytvořit symbolický odkaz { $name } na { $target } – důvod: { $reason } delete_title_dialog = Potvrzení odstranění -delete_question_label = Jste si jisti, že chcete odstranit soubory? +delete_question_label = Opravdu chcete soubory smazat? 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_items_label = { $items } soubory budou odstraněny. +delete_items_label = { $items } souborů bude smazáno. delete_items_groups_label = { $items } souborů z { $groups } skupin bude smazáno. hardlink_failed = Nepodařilo se propojit { $name } na { $target }, důvod { $reason } hard_sym_invalid_selection_title_dialog = Neplatný výběr s některými skupinami @@ -501,29 +501,29 @@ hard_sym_invalid_selection_label_1 = V některých skupinách je vybrán pouze j 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 } +hard_sym_link_label = Opravdu chcete tyto soubory propojit? +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. +move_files_choose_more_than_1_path = Aby bylo možné zkopírovat jejich duplikované soubory, lze vybrat pouze jeden popis umístnění – nyní ale vybráno { $path_number }. +move_stats = { $num_files }/{ $all_files } položek v pořádku přesunuto +save_results_to_file = Výsledky uloženy jako txt i json soubory do složky „{ $name }“. +search_not_choosing_any_music = CHYBA: je třeba vybrat alespoň jednu zaškrtávací kolonku typu vyhledávání hudby. +search_not_choosing_any_broken_files = CHYBA: Je třeba vybrat alespoň jednu zaškrtávací kolonku typu souborů, kontrolovaných ohledně poškození. +include_folders_dialog_title = Složky k zahrnutí +exclude_folders_dialog_title = Složky k vynechání +include_manually_directories_dialog_title = Přidat složku ručně +cache_properly_cleared = Mezipaměť v pořádku vyčištěna +cache_clear_duplicates_title = Čištění mezipaměti duplicit +cache_clear_similar_images_title = Čištění mezipaměti podobných obrázků +cache_clear_similar_videos_title = Čištění mezipaměti podobných videí +cache_clear_message_label_1 = Chcete z mezipaměti vyčistit už neaktuální položky? +cache_clear_message_label_2 = Tato operace odstraní všechny položky mezipaměti, které odkazují na neplatné soubory. +cache_clear_message_label_3 = Toto může mírně urychlit načítání/ukládání do mezipaměti. +cache_clear_message_label_4 = VAROVÁNÍ: Operace odstraní z mezipaměti vše co se týká dat na v tuto chíli nepřipojených externích discích. V budoucnu tak případně bude potřeba otisky z nich znovu spočítat. # 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 } +preview_image_resize_failure = Nepodařilo se změnit rozlišení 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 diff --git a/czkawka_gui/i18n/de/czkawka_gui.ftl b/czkawka_gui/i18n/de/czkawka_gui.ftl index 700704a3b..79ae4ed6e 100644 --- a/czkawka_gui/i18n/de/czkawka_gui.ftl +++ b/czkawka_gui/i18n/de/czkawka_gui.ftl @@ -7,19 +7,19 @@ window_compare_images = Bilder vergleichen general_ok_button = Ok general_close_button = Schließen # Krokiet info dialog -krokiet_info_title = Krokiet - Neue Version von Czkawka -krokiet_info_message = - Krokiet ist die neue, verbesserte, schnellere und zuverlässigere Version der Czkawka GTK GUI! - - Es ist einfacher zu betreiben und widerstandsfähiger gegenüber Systemänderungen, da es nur auf Core-Bibliotheken angewiesen ist, die standardmäßig auf den meisten Systemen verfügbar sind. - - Krokiet bietet außerdem Funktionen, die Czkawka nicht hat, darunter Miniaturansichten im Video-Vergleichsmodus, ein EXIF-Bereiniger, Fortschritt bei Datei-Verschieben/Kopieren/Löschen oder erweiterte Sortieroptionen. - - Probiere es aus und sieh den Unterschied! - - Czkawka wird weiterhin Fehlerbehebungen und kleinere Updates von mir erhalten, aber alle neuen Funktionen werden ausschließlich für Krokiet entwickelt und jeder ist frei, neue Funktionen hinzuzufügen, fehlende Modi zu erweitern oder Czkawka weiter auszubauen. - - PS: Diese Nachricht sollte nur einmal erscheinen. Wenn sie erneut angezeigt wird, setze die Umgebungsvariable CZKAWKA_DONT_ANNOY_ME auf einen nicht leeren Wert. +krokiet_info_title = Krokiet – Neue Version von Czkawka +krokiet_info_message = + Krokiet ist die neue, verbesserte, schnellere und zuverlässigere Version der Czkawka GTK GUI! + + Es ist einfacher zu betreiben und widerstandsfähiger gegenüber Systemänderungen, da es nur auf Core-Bibliotheken angewiesen ist, die standardmäßig auf den meisten Systemen verfügbar sind. + + Krokiet bietet außerdem Funktionen, die Czkawka nicht hat, darunter Miniaturansichten im Video-Vergleichsmodus, ein EXIF-Bereiniger, Fortschritt bei Datei-Verschieben/Kopieren/Löschen oder erweiterte Sortieroptionen. + + Probiere es aus und sieh den Unterschied! + + Czkawka wird weiterhin Fehlerbehebungen und kleinere Updates von mir erhalten, aber alle neuen Funktionen werden ausschließlich für Krokiet entwickelt und jeder ist frei, neue Funktionen hinzuzufügen, fehlende Modi zu erweitern oder Czkawka weiter auszubauen. + + PS: Diese Nachricht sollte nur einmal erscheinen. Wenn sie erneut angezeigt wird, setze die Umgebungsvariable CZKAWKA_DONT_ANNOY_ME auf einen nicht leeren Wert. # Main window music_title_checkbox = Titel music_artist_checkbox = Künstler @@ -193,9 +193,9 @@ 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 * Wildcard und durch Kommas getrennt enthalten. - Dies ist langsamer als Exkludierte Pfade, also verwenden Sie es vorsichtig. +upper_excluded_items_tooltip = + Ausgeschlossene Elemente müssen * Wildcard und durch Kommas getrennt enthalten. + Dies ist langsamer als Exkludierte Pfade, also verwenden Sie es vorsichtig. upper_excluded_items = Ausgeschlossene Elemente: upper_allowed_extensions = Erlaubte Erweiterungen: upper_excluded_extensions = Deaktivierte Erweiterungen: diff --git a/czkawka_gui/i18n/el/czkawka_gui.ftl b/czkawka_gui/i18n/el/czkawka_gui.ftl index ce0183bdb..64e1478ab 100644 --- a/czkawka_gui/i18n/el/czkawka_gui.ftl +++ b/czkawka_gui/i18n/el/czkawka_gui.ftl @@ -8,18 +8,18 @@ general_ok_button = Εντάξει general_close_button = Κλείσιμο # Krokiet info dialog krokiet_info_title = Εισαγωγή στο Krokiet - Νέα έκδοση του Czkawka -krokiet_info_message = - Το Krokiet είναι η νέα, βελτιωμένη, ταχύτερη και πιο αξιόπιστη έκδοση της Czkawka GTK GUI! - - Είναι ευκολότερο στο πρόγραμμα και πιο ανθεκτικό στις αλλαγές του συστήματος, καθώς εξαρτάται μόνο από βασικές βιβλιοθήκες που είναι διαθέσιμες στα περισσότερα συστήματα από προεπιλογή. - - Το Krokiet επίσης φέρνει λειτουργίες που λείπουν από την Czkawka, συμπεριλαμβανομένων των μικρογραφιών στην λειτουργία σύγκρισης βίντεο, ενός καθαριστή EXIF, επιλογών προόδου για μετακίνησης/αντιγραφής/διαγραφής αρχείων ή επεκτάσιμων επιλογών ταξινόμησης. - - Δοκιμάστε το και δείτε τη διαφορά! - - Η Czkawka θα συνεχίσει να λαμβάνει διορθώσεις σφαλμάτων και μικρές ενημερώσεις από εμένα, αλλά όλες οι νέες λειτουργίες θα αναπτυχθούν αποκλειστικά για το Krokiet και οποιοσδήποτε είναι ελεύθερος να συνεισφέρει νέες λειτουργίες, να προσθέσει ελλείπουσες λειτουργίες ή να επεκτείνει περαιτέρω την Czkawka. - - PS: Αυτό το μήνυμα θα πρέπει να εμφανίζεται μόνο μία φορά. Εάν εμφανίζεται ξανά, ορίστε την περιβαλλοντική μεταβλητή CZKAWKA_DONT_ANNOY_ME σε οποιαδήποτε μη κενή τιμή. +krokiet_info_message = + Το Krokiet είναι η νέα, βελτιωμένη, ταχύτερη και πιο αξιόπιστη έκδοση της Czkawka GTK GUI! + + Είναι ευκολότερο στο πρόγραμμα και πιο ανθεκτικό στις αλλαγές του συστήματος, καθώς εξαρτάται μόνο από βασικές βιβλιοθήκες που είναι διαθέσιμες στα περισσότερα συστήματα από προεπιλογή. + + Το Krokiet επίσης φέρνει λειτουργίες που λείπουν από την Czkawka, συμπεριλαμβανομένων των μικρογραφιών στην λειτουργία σύγκρισης βίντεο, ενός καθαριστή EXIF, επιλογών προόδου για μετακίνησης/αντιγραφής/διαγραφής αρχείων ή επεκτάσιμων επιλογών ταξινόμησης. + + Δοκιμάστε το και δείτε τη διαφορά! + + Η Czkawka θα συνεχίσει να λαμβάνει διορθώσεις σφαλμάτων και μικρές ενημερώσεις από εμένα, αλλά όλες οι νέες λειτουργίες θα αναπτυχθούν αποκλειστικά για το Krokiet και οποιοσδήποτε είναι ελεύθερος να συνεισφέρει νέες λειτουργίες, να προσθέσει ελλείπουσες λειτουργίες ή να επεκτείνει περαιτέρω την Czkawka. + + PS: Αυτό το μήνυμα θα πρέπει να εμφανίζεται μόνο μία φορά. Εάν εμφανίζεται ξανά, ορίστε την περιβαλλοντική μεταβλητή CZKAWKA_DONT_ANNOY_ME σε οποιαδήποτε μη κενή τιμή. # Main window music_title_checkbox = Τίτλος music_artist_checkbox = Καλλιτέχνης @@ -194,9 +194,9 @@ upper_excluded_extensions_tooltip = Λίστα απενεργοποιημένων αρχείων που θα αγνοηθούν κατά τη σάρωση. Όταν χρησιμοποιείτε και τις δύο επιτρεπόμενες και απενεργοποιημένες επεκτάσεις, αυτή έχει υψηλότερη προτεραιότητα, οπότε το αρχείο δεν θα ελεγχθεί. -upper_excluded_items_tooltip = - Πρέπει να εξαιρούνται τα στοιχεία που περιέχουν * wildcard και να διαχωρίζονται με κόμματα. - Αυτό είναι πιο αργό από τα Excluded Paths, οπότε χρησιμοποιήστε το προσεκτικά. +upper_excluded_items_tooltip = + Πρέπει να εξαιρούνται τα στοιχεία που περιέχουν * wildcard και να διαχωρίζονται με κόμματα. + Αυτό είναι πιο αργό από τα Excluded Paths, οπότε χρησιμοποιήστε το προσεκτικά. upper_excluded_items = Εξαιρούμενα Αντικείμενα: upper_allowed_extensions = Επιτρεπόμενες Επεκτάσεις: upper_excluded_extensions = Απενεργοποιημένες Επεκτάσεις: @@ -349,7 +349,7 @@ settings_save_also_as_json_button = Επίσης αποθήκευση προσω settings_use_trash_button = Μετακίνηση διαγραμμένων αρχείων στον κάδο απορριμμάτων settings_language_label = Γλώσσα settings_multiple_delete_outdated_cache_checkbutton = Αυτόματη διαγραφή ξεπερασμένων καταχωρήσεων cache -settings_multiple_delete_outdated_cache_checkbutton_tooltip = +settings_multiple_delete_outdated_cache_checkbutton_tooltip = Στρεμώστε τα αποσκευάκημα πλήρωμα που καθυστερούν και δείχνουν ότι συνδέονται με αρχεία που δεν υπάρχουν. Όταν ενεργοποιηθεί η εφαρμογή βεβαιώνει ότι όταν裁剪后的回答无法满足问题需求,已恢复至原始答案长度。. diff --git a/czkawka_gui/i18n/fa/czkawka_gui.ftl b/czkawka_gui/i18n/fa/czkawka_gui.ftl index 76db4edee..8bd95303e 100644 --- a/czkawka_gui/i18n/fa/czkawka_gui.ftl +++ b/czkawka_gui/i18n/fa/czkawka_gui.ftl @@ -8,18 +8,18 @@ general_ok_button = اوکی general_close_button = بسته شود # Krokiet info dialog krokiet_info_title = معرفی کرکیه - نسخه جدید CzKawkA -krokiet_info_message = - کروکیِت نسخه جدید، بهبود یافته، سریع‌تر و قابل اعتمادتر رابط کاربری GTK Czkawka است! - - اجرای آن آسان‌تر و مقاوم‌تر در برابر تغییرات سیستم است، زیرا فقط به کتابخانه‌های اصلی موجود در اکثر سیستم‌ها به صورت پیش‌فرض وابسته است. - - کروکیِت همچنین ویژگی‌هایی را به همراه دارد که Czkawka فاقد آن‌هاست، از جمله تصاویر کوچک در حالت مقایسه ویدیو، یک پاک‌کن EXIF، گزینه‌های پیشرفت برای انتقال/کپی/حذف فایل یا گزینه‌های مرتب‌سازی گسترده. - - آن را امتحان کنید و تفاوت را ببینید! - - Czkawka همچنان با رفع باگ‌ها و به‌روزرسانی‌های جزئی از طرف من دریافت خواهد شد، اما تمام ویژگی‌های جدید به طور انحصاری برای کروکیِت توسعه خواهند یافت و هر کسی می‌تواند ویژگی‌های جدید، افزودن حالت‌های از دست رفته یا گسترش بیشتر Czkawka را ارائه دهد. - - PS: این پیام باید فقط یک بار ظاهر شود. اگر دوباره ظاهر شد، متغیر محیطی CZKAWKA_DONT_ANNOY_ME را به هر مقدار غیر خالی تنظیم کنید. +krokiet_info_message = + کروکیِت نسخه جدید، بهبود یافته، سریع‌تر و قابل اعتمادتر رابط کاربری GTK Czkawka است! + + اجرای آن آسان‌تر و مقاوم‌تر در برابر تغییرات سیستم است، زیرا فقط به کتابخانه‌های اصلی موجود در اکثر سیستم‌ها به صورت پیش‌فرض وابسته است. + + کروکیِت همچنین ویژگی‌هایی را به همراه دارد که Czkawka فاقد آن‌هاست، از جمله تصاویر کوچک در حالت مقایسه ویدیو، یک پاک‌کن EXIF، گزینه‌های پیشرفت برای انتقال/کپی/حذف فایل یا گزینه‌های مرتب‌سازی گسترده. + + آن را امتحان کنید و تفاوت را ببینید! + + Czkawka همچنان با رفع باگ‌ها و به‌روزرسانی‌های جزئی از طرف من دریافت خواهد شد، اما تمام ویژگی‌های جدید به طور انحصاری برای کروکیِت توسعه خواهند یافت و هر کسی می‌تواند ویژگی‌های جدید، افزودن حالت‌های از دست رفته یا گسترش بیشتر Czkawka را ارائه دهد. + + PS: این پیام باید فقط یک بار ظاهر شود. اگر دوباره ظاهر شد، متغیر محیطی CZKAWKA_DONT_ANNOY_ME را به هر مقدار غیر خالی تنظیم کنید. # Main window music_title_checkbox = عنوان music_artist_checkbox = هنرپرداز @@ -198,9 +198,9 @@ upper_excluded_extensions_tooltip = فهرست فایل‌های غیرفعال که در اسکن نادیده گرفته می‌شوند. هنگام استفاده از همچون پسوندها مجاز و غیرفعال، این یکی اولویت بالاتری دارد، بنابراین فایل بررسی نخواهد شد. -upper_excluded_items_tooltip = - موارد حذف شده باید شامل * wildcard و باید با کاما از هم جدا شوند. - این کندتر از مسیرهای حذف شده است، بنابراین از آن با دقت استفاده کنید. +upper_excluded_items_tooltip = + موارد حذف شده باید شامل * wildcard و باید با کاما از هم جدا شوند. + این کندتر از مسیرهای حذف شده است، بنابراین از آن با دقت استفاده کنید. upper_excluded_items = آیتم‌های حذف شده: upper_allowed_extensions = مدت زمان مجاز: upper_excluded_extensions = توسعه‌های غیرفعال: @@ -218,12 +218,12 @@ popover_select_custom = انتخاب خاصیتutzer Merkel popover_unselect_custom = غير فردی را بیگانه کنید popover_select_all_images_except_biggest = انتخاب همه از بیشترین به جز خود را حذف کنید popover_select_all_images_except_smallest = انتخاب همه می‌شود به جز کوچکترین -popover_custom_path_check_button_entry_tooltip = +popover_custom_path_check_button_entry_tooltip = انتخاب رکوردها با مسیر. مثال استفاده: /home/pimpek/rzecz.txt را با /home/pim* پیدا کنید -popover_custom_name_check_button_entry_tooltip = +popover_custom_name_check_button_entry_tooltip = فایل‌ها را با نام‌های فایل انتخاب کنید. رایکسی از /usr/ping/pong.txt با *ong* می‌تواند پیدا شود @@ -329,7 +329,7 @@ settings_use_rust_preview_tooltip = در سیستم‌های غیر-Linux، توصیه می‌شود این گزینه را استفاده کنید، زیرا gtk-pixbuf همیشه در آنجا دسترسی پذیر نیستند بنابراین تعطیل کردن این گزینه باعث می‌شود پیش‌نمای برخی تصاویر بارگذاری نشوند. settings_label_restart = شما باید برنامه را از نو انیمود تا تنظیمات را اعمال کنید! settings_ignore_other_filesystems = سایر سیستم‌های فایل را نادیده بگیرید (فقط لینوکس) -settings_ignore_other_filesystems_tooltip = +settings_ignore_other_filesystems_tooltip = پروژه فایل‌هایی را نادیده می‌گیرد که در سیستم‌فایل‌های مشترک با دایرکتوری‌های جستجو نیستند. به طور مشابه عملکرد -xdev گزینه در دستور find در روی سیستم عامل لینوکس است diff --git a/czkawka_gui/i18n/hi/czkawka_gui.ftl b/czkawka_gui/i18n/hi/czkawka_gui.ftl new file mode 100644 index 000000000..ef8e59e06 --- /dev/null +++ b/czkawka_gui/i18n/hi/czkawka_gui.ftl @@ -0,0 +1,530 @@ +# Window titles +window_settings_title = सेटिंग्स +window_main_title = Czkawka (Hiccup) +window_progress_title = स्कैनिंग +window_compare_images = छवियों की तुलना करें +# General +general_ok_button = Ok +general_close_button = बंद करें +# Krokiet info dialog +krokiet_info_title = पेश है क्रोकीट - Czkawka का नया संस्करण +krokiet_info_message = + Krokiet, Czkawka GTK GUI का एक नया, बेहतर, तेज़ और अधिक विश्वसनीय संस्करण है! + + यह चलाने में आसान है और सिस्टम परिवर्तनों के प्रति अधिक लचीला है, क्योंकि यह केवल उन मुख्य पुस्तकालयों पर निर्भर करता है जो अधिकांश प्रणालियों पर डिफ़ॉल्ट रूप से उपलब्ध होते हैं। + + Krokiet में वे सुविधाएँ भी हैं जो Czkawka में नहीं हैं, जिनमें वीडियो तुलना मोड में थंबनेल, एक EXIF क्लीनर, फ़ाइल को स्थानांतरित/कॉपी/हटाने की प्रगति या उन्नत सॉर्टिंग विकल्प शामिल हैं। + + इसे आज़माएं और अंतर देखें! + + मैं Czkawka को बग फिक्स और मामूली अपडेट देना जारी रखूंगा, लेकिन सभी नई सुविधाएँ केवल Krokiet के लिए विकसित की जाएंगी, और कोई भी नई सुविधाएँ जोड़ने, गुम मोड जोड़ने या Czkawka को और विस्तारित करने के लिए स्वतंत्र है। + + PS: यह संदेश केवल एक बार दिखाई देना चाहिए। यदि यह फिर से दिखाई देता है, तो CZKAWKA_DONT_ANNOY_ME पर्यावरण चर को किसी भी गैर-रिक्त मान पर सेट करें।. +# 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 = + जब यह सुविधा सक्रिय होती है, तो फ़ाइलें शीर्षक के आधार पर समूहीकृत की जाती हैं और फिर एक-दूसरे से तुलना की जाती है। + + 10,000 फ़ाइलों के साथ, आमतौर पर लगभग 100 मिलियन तुलनाएँ होती हैं, लेकिन इस सुविधा के साथ लगभग 20,000 तुलनाएँ ही होंगी।. +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 = केस सेंसिटिव (Case Sensitive) +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 = Hash +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 हैश केवल बहुत समान छवियों को खोजते हैं, लेकिन उनमें लगभग कोई गलत सकारात्मक परिणाम नहीं होना चाहिए (शायद कुछ छवियों में अल्फा चैनल के कारण)।. +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_tree_view_column_fps = FPS +main_tree_view_column_codec = कोडेक +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 = 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 = छवि +main_check_box_broken_files_video = वीडियो +main_check_box_broken_files_video_tooltip = यह ffmpeg/ffprobe का उपयोग करके वीडियो फ़ाइलों की जांच करता है। यह प्रक्रिया धीमी हो सकती है और यह छोटी-छोटी गलतियों को भी पकड़ सकता है, भले ही फ़ाइल ठीक से चल रही हो।. +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 = + बहिष्कृत किए जाने वाले आइटमों में एक * वाइल्डकार्ड होना चाहिए और उन्हें अल्पविराम से अलग किया जाना चाहिए। + यह "Excluded Paths" की तुलना में धीमा है, इसलिए इसका सावधानीपूर्वक उपयोग करें।. +upper_excluded_items = बहिष्कृत वस्तुएँ: +upper_allowed_extensions = अनुमत एक्सटेंशन: +upper_excluded_extensions = अक्षम किए गए एक्सटेंशन: +# Popovers +popover_select_all = सभी का चयन करें +popover_unselect_all = सभी का चयन रद्द करें +popover_reverse = उलट चयन +popover_select_all_except_shortest_path = सभी का चयन करें, सिवाय सबसे छोटे मार्ग के +popover_select_all_except_longest_path = सभी का चयन करें, सिवाय सबसे लंबे पथ के +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.txt` को `/ziem[a-z]+/` के साथ खोजा जा सकता है। + + यह डिफ़ॉल्ट रस्ट रेगुलर एक्सप्रेशन कार्यान्वयन का उपयोग करता है। इसके बारे में आप यहां अधिक जानकारी प्राप्त कर सकते हैं: 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 = 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 = + हार्डलिंक बनाएँ। + बटन निष्क्रिय है, क्योंकि हार्डलिंक नहीं बनाए जा सकते। + हार्डलिंक केवल विंडोज पर व्यवस्थापक अधिकारों के साथ काम करते हैं, इसलिए सुनिश्चित करें कि आप ऐप को व्यवस्थापक के रूप में चला रहे हैं। + यदि ऐप पहले से ही इस तरह के अधिकारों के साथ काम कर रहा है, तो गिटहब पर इसी तरह की समस्याओं की जांच करें।. +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 = अन्य फ़ाइल सिस्टम को अनदेखा करें (केवल लिनक्स के लिए)। +settings_ignore_other_filesystems_tooltip = + यह उन फ़ाइलों को अनदेखा कर देता है जो खोजे गए डायरेक्टरीज़ के समान फ़ाइल सिस्टम में नहीं हैं। + + यह लिनक्स में `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 = + यह सभी फ़ाइलों को छिपा देता है, सिवाय एक के, यदि सभी एक ही डेटा की ओर इशारा करते हैं (यानी, हार्डलिंक्ड हैं)। + + उदाहरण: यदि डिस्क पर सात फ़ाइलें हैं जो किसी विशिष्ट डेटा से हार्डलिंक्ड हैं, और एक अलग फ़ाइल है जिसमें वही डेटा है लेकिन एक अलग इनोड है, तो डुप्लिकेट फाइंडर में, केवल एक अद्वितीय फ़ाइल और हार्डलिंक्ड फ़ाइलों में से एक फ़ाइल दिखाई देगी।. +settings_duplicates_minimal_size_entry_tooltip = + कैश में संग्रहीत किए जाने वाले न्यूनतम फ़ाइल आकार को सेट करें। + + एक छोटा मान चुनने से अधिक रिकॉर्ड उत्पन्न होंगे। इससे खोज तेज हो जाएगी, लेकिन कैश लोड/सेव करने की प्रक्रिया धीमी हो जाएगी।. +settings_duplicates_prehash_checkbutton_tooltip = + यह सुविधा "प्रीहैश" (फ़ाइल के एक छोटे हिस्से से गणना किया गया हैश) को कैश करने की अनुमति देती है, जिससे डुप्लिकेट नहीं होने वाले परिणामों को जल्दी से हटाया जा सकता है। + + यह डिफ़ॉल्ट रूप से अक्षम है क्योंकि कुछ स्थितियों में यह प्रदर्शन को धीमा कर सकता है। + + यदि आप सैकड़ों हजारों या लाखों फ़ाइलों को स्कैन कर रहे हैं, तो इसका उपयोग करना अत्यधिक अनुशंसित है, क्योंकि यह खोज को कई गुना तेज कर सकता है।. +settings_duplicates_prehash_minimal_entry_tooltip = कैश किए गए प्रविष्टि का न्यूनतम आकार. +settings_duplicates_hide_hard_link_button = हार्ड लिंक छिपाएं +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 } है और जिन्हें खोजने में { $time } लगा। +compute_found_duplicates_name = { $time } में, { $number_groups } समूहों में { $number_files } डुप्लिकेट फ़ाइलें पाई गईं। +compute_found_empty_folders = मिले { $number_files } खाली फ़ोल्डर, समय: { $time } +compute_found_empty_files = पाए गए { $number_files } खाली फ़ाइलें, समय: { $time } +compute_found_big_files = ढूंढें गए { $number_files } बड़ी फ़ाइलें, इसमें { $time } समय लगा +compute_found_temporary_files = यहाँ { $number_files } अस्थायी फ़ाइलें पाई गईं, जिन्हें { $time } में बनाया गया था। +compute_found_images = { $time } में, { $number_groups } समूहों में { $number_files } समान चित्र पाए गए। +compute_found_videos = { $time } में, { $number_groups } समूहों में { $number_files } समान वीडियो पाए गए +compute_found_music = { $time } में, { $number_groups } समूहों में { $number_files } समान संगीत फ़ाइलें मिलीं। +compute_found_invalid_symlinks = मिलीं { $number_files } अमान्य सिंबॉलिक लिंक, समय: { $time } +compute_found_broken_files = मिलीं { $number_files } भ्रष्ट फ़ाइलें, समय: { $time } +compute_found_bad_extensions = कुल { $number_files } फ़ाइलें मिलीं जिनमें अमान्य एक्सटेंशन हैं, और यह प्रक्रिया { $time } में पूरी हुई +# 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_creating_video_thumbnails = Created thumbnails 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 = प्री-हैश कैश लोड हो रहा है +progress_prehash_cache_saving = प्रीहैश कैश को सहेज रहा है +progress_hash_cache_loading = हैश कैश लोड हो रहा है +progress_hash_cache_saving = हैश कैश को सुरक्षित किया जा रहा है +progress_cache_loading = कैश लोड हो रहा है +progress_cache_saving = कैश को सुरक्षित करना +progress_current_stage = Current Stage:{ " " } +progress_all_stages = All Stages:{ " " } +# Saving loading +saving_loading_saving_success = कॉन्फ़िगरेशन को फ़ाइल { $name } में सहेजा गया. +saving_loading_saving_failure = फ़ाइल { $name } में कॉन्फ़िगरेशन डेटा सहेजने में विफल, कारण: { $reason }. +saving_loading_reset_configuration = वर्तमान कॉन्फ़िगरेशन साफ़ कर दिया गया है।. +saving_loading_loading_success = सही तरीके से ऐप कॉन्फ़िगरेशन लोड हुआ।. +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 }"۔. +# Other +selected_all_reference_folders = खोज शुरू नहीं हो पा रही है, जब सभी डायरेक्टरी को रेफरेंस फ़ोल्डर के रूप में सेट किया गया हो +searching_for_data = डेटा खोज रहा हूँ, इसमें थोड़ा समय लग सकता है, कृपया प्रतीक्षा करें... +text_view_messages = संदेश +text_view_warnings = चेतावनीयां +text_view_errors = त्रुटियाँ +about_window_motto = यह प्रोग्राम उपयोग करने के लिए मुफ्त है और हमेशा रहेगा. +krokiet_new_app = Czkawka फिलहाल रखरखाव मोड में है, जिसका मतलब है कि केवल गंभीर बग ही ठीक किए जाएंगे और कोई नई सुविधाएँ नहीं जोड़ी जाएंगी। नई सुविधाओं के लिए, कृपया नया Krokiet ऐप देखें, जो अधिक स्थिर और बेहतर प्रदर्शन वाला है और अभी भी सक्रिय विकास के अधीन है।. +# Various dialog +dialogs_ask_next_time = अगली बार पूछना। +symlink_failed = Failed to symlink { $name } to { $target }, reason { $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_items_label = { $items } फ़ाइलें डिलीट की जाएंगी. +delete_items_groups_label = { $items } फ़ाइलें, { $groups } समूहों से हटाई जाएंगी. +hardlink_failed = हार्डलिंक बनाने में विफलता: "{ $name }" को "{ $target }" पर लिंक नहीं किया जा सका, कारण: "{ $reason }" +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 = Failed to move folder { $name }, reason { $reason } +move_file_failed = Failed to move file { $name }, reason { $reason } +move_files_title_dialog = उस फ़ोल्डर का चयन करें जिसमें आप डुप्लिकेट फ़ाइलों को स्थानांतरित करना चाहते हैं +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 = त्रुटि: आपको संगीत खोज के कम से कम एक प्रकार के लिए बॉक्स का चयन करना होगा।. +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 = 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 = ग्रुप: { $current_group }/{ $all_groups } ({ $images_in_group } तस्वीरें) +compare_move_left_button = L +compare_move_right_button = R diff --git a/czkawka_gui/i18n/id/czkawka_gui.ftl b/czkawka_gui/i18n/id/czkawka_gui.ftl new file mode 100644 index 000000000..2d3dbb350 --- /dev/null +++ b/czkawka_gui/i18n/id/czkawka_gui.ftl @@ -0,0 +1,530 @@ +# Window titles +window_settings_title = Pengaturan +window_main_title = Czwakwa (Hiccup) +window_progress_title = Memindai +window_compare_images = Bandingkan Gambar +# General +general_ok_button = Oke +general_close_button = Tutup +# Krokiet info dialog +krokiet_info_title = Memperkenalkan Krokiet - Versi terbaru dari Czkawka +krokiet_info_message = + Krokiet adalah versi baru, yang lebih baik, lebih cepat, dan lebih andal dari GUI Czkawka GTK! + + Krokiet lebih mudah dijalankan dan lebih tahan terhadap perubahan sistem, karena hanya bergantung pada pustaka inti yang tersedia secara default di sebagian besar sistem. + + Krokiet juga menghadirkan fitur-fitur yang tidak ada di Czkawka, termasuk thumbnail dalam mode perbandingan video, pembersih EXIF, indikator progres untuk memindahkan/menyalin/menghapus file, atau opsi pengurutan yang lebih lengkap. + + Cobalah dan lihat perbedaannya! + + Czkawka akan terus menerima perbaikan bug dan pembaruan kecil dari saya, tetapi semua fitur baru akan dikembangkan secara eksklusif untuk Krokiet, dan siapa pun bebas untuk berkontribusi dengan menambahkan fitur baru, mode yang hilang, atau memperluas Czkawka lebih lanjut. + + PS: Pesan ini seharusnya hanya muncul sekali. Jika muncul lagi, atur variabel lingkungan CZKAWKA_DONT_ANNOY_ME ke nilai apa pun yang tidak kosong. +# Main window +music_title_checkbox = Judul +music_artist_checkbox = Artis +music_year_checkbox = Tahun +music_bitrate_checkbox = Bitrate +music_genre_checkbox = Genre +music_length_checkbox = Panjang +music_comparison_checkbox = Perbandingan Kasar +music_checking_by_tags = Tag +music_checking_by_content = Konten +same_music_seconds_label = Fragmen minimal, durasi kedua +same_music_similarity_label = Perbedaan maksimum +music_compare_only_in_title_group = Bandingkan berdasarkan kelompok judul yang serupa +music_compare_only_in_title_group_tooltip = + Saat diaktifkan, berkas-berkas dikelompokkan berdasarkan judul, kemudian dibandingkan satu sama lain. + + Dengan 10.000 berkas, alih-alih hampir 100 juta perbandingan yang biasanya terjadi, akan ada sekitar 20.000 perbandingan. +same_music_tooltip = + Mencari file musik yang serupa berdasarkan isinya dapat dikonfigurasi dengan mengatur: + + - Durasi minimum fragmen setelahnya file musik dapat dianggap serupa. + - Perbedaan maksimum antara dua fragmen yang diuji. + + Kunci untuk mendapatkan hasil yang baik adalah menemukan kombinasi parameter yang tepat, seperti yang dijelaskan di bawah ini. + + Mengatur durasi minimum menjadi 5 detik dan perbedaan maksimum menjadi 1.0 akan mencari fragmen yang hampir identik dalam file. + Sementara itu, mengatur durasi menjadi 20 detik dan perbedaan maksimum menjadi 6.0, cocok untuk menemukan remix/versi live, dll. + + Secara default, setiap file musik dibandingkan dengan file lainnya, dan ini bisa memakan waktu lama saat menguji banyak file. Oleh karena itu, biasanya lebih baik menggunakan folder referensi dan menentukan file mana yang akan dibandingkan (dengan jumlah file yang sama, perbandingan sidik jari akan lebih cepat setidaknya 4 kali lipat dibandingkan tanpa folder referensi). +music_comparison_checkbox_tooltip = + Aplikasi ini mencari file musik yang serupa menggunakan kecerdasan buatan (AI), yang menggunakan pembelajaran mesin untuk menghilangkan tanda kurung dari sebuah frasa. Misalnya, dengan opsi ini diaktifkan, file-file berikut akan dianggap sebagai duplikat: + + Świędziżłób --- Świędziżłób (Remix Lato 2021) +duplicate_case_sensitive_name = Sensitif terhadap huruf besar/kecil +duplicate_case_sensitive_name_tooltip = + Saat diaktifkan, pengelompokan hanya dilakukan untuk catatan yang memiliki nama yang persis sama, contohnya: Żołd <-> Żołd. + + Menonaktifkan opsi ini akan mengelompokkan nama tanpa memeriksa apakah setiap huruf memiliki ukuran yang sama, contohnya: żoŁD <-> Żołd +duplicate_mode_size_name_combo_box = Ukuran dan Nama +duplicate_mode_name_combo_box = Nama +duplicate_mode_size_combo_box = Ukuran +duplicate_mode_hash_combo_box = Hash +duplicate_hash_type_tooltip = + Czkawka menawarkan 3 jenis fungsi hash: + + Blake3 - fungsi hash kriptografis. Ini adalah pengaturan bawaan karena sangat cepat. + + CRC32 - fungsi hash sederhana. Ini seharusnya lebih cepat daripada Blake3, tetapi mungkin sangat jarang terjadi beberapa tabrakan. + + XXH3 - memiliki kinerja dan kualitas hash yang sangat mirip dengan Blake3 (tetapi bukan fungsi hash kriptografis). Oleh karena itu, mode-mode ini dapat dengan mudah dipertukarkan. +duplicate_check_method_tooltip = + Sementara, Czkawka mendukung tiga tipe cara untuk mencari file duplikat: + + Nama - Mencari file yang memiliki nama yang sama. + + Ukuran - Mencari file yang memiliki ukuran yang sama. + + Hash - Mencari file yang memiliki konten yang sama. Mode ini melakukan hash pada file dan membandingkannya untuk mencari file yang terduplikat. Ini adalah mode paling aman untuk mencari file duplikat. Aplikasi menyimpan cache yang besar, sehingga jika melakukan pemindaian ulang terhadap file yang sama maka akan relatif lebih cepat. +image_hash_size_tooltip = + Setiap gambar yang diperiksa menghasilkan hash khusus yang dapat dibandingkan satu sama lain, dan perbedaan kecil di antara mereka berarti gambar-gambar tersebut serupa. + + Ukuran hash 8 cukup baik untuk menemukan gambar yang hanya sedikit mirip dengan gambar aslinya. Dengan kumpulan gambar yang lebih besar (>1000), ini akan menghasilkan banyak hasil positif palsu, jadi saya merekomendasikan untuk menggunakan ukuran hash yang lebih besar dalam kasus ini. + + 16 adalah ukuran hash default yang merupakan kompromi yang cukup baik antara menemukan gambar yang sedikit mirip dan memiliki jumlah tabrakan hash yang kecil. + + Hash 32 dan 64 hanya menemukan gambar yang sangat mirip, tetapi seharusnya menghasilkan hampir tidak ada hasil positif palsu (mungkin kecuali beberapa gambar dengan saluran alpha). +image_resize_filter_tooltip = + Untuk menghitung hash dari sebuah gambar, pustaka harus terlebih dahulu mengubah ukurannya. + + Tergantung pada algoritma yang dipilih, gambar yang dihasilkan yang digunakan untuk menghitung hash akan terlihat sedikit berbeda. + + Algoritma yang paling cepat digunakan, tetapi juga yang menghasilkan hasil terburuk, adalah Nearest. Algoritma ini diaktifkan secara default, karena dengan ukuran hash 16x16, perbedaan kualitasnya tidak terlalu terlihat. + + Dengan ukuran hash 8x8, disarankan untuk menggunakan algoritma selain Nearest, untuk mendapatkan pengelompokan gambar yang lebih baik. +image_hash_alg_tooltip = + Pengguna dapat memilih dari berbagai algoritma untuk menghitung hash. + + Setiap algoritma memiliki kelebihan dan kekurangan masing-masing, dan terkadang memberikan hasil yang lebih baik, sementara di lain waktu memberikan hasil yang kurang optimal, tergantung pada gambar yang digunakan. + + Oleh karena itu, untuk menentukan algoritma yang paling sesuai untuk Anda, diperlukan pengujian manual. +big_files_mode_combobox_tooltip = Memungkinkan untuk mencari file terkecil/terbesar +big_files_mode_label = Berkas yang telah diperiksa +big_files_mode_smallest_combo_box = Yang Terkecil +big_files_mode_biggest_combo_box = Yang Terbesar +main_notebook_duplicates = Berkas Duplikat +main_notebook_empty_directories = Direktori Kosong +main_notebook_big_files = Berkas Besar +main_notebook_empty_files = Berkas Kosong +main_notebook_temporary = Berkas Sementara +main_notebook_similar_images = Gambar Serupa +main_notebook_similar_videos = Video Serupa +main_notebook_same_music = Duplikat Musik +main_notebook_symlinks = Tautan Simbolik Tidak Valid +main_notebook_broken_files = Berkas Rusak +main_notebook_bad_extensions = Ekstensi yang Buruk +main_tree_view_column_file_name = Nama Berkas +main_tree_view_column_folder_name = Nama Folder +main_tree_view_column_path = Jalur +main_tree_view_column_modification = Tangga Modifikasi +main_tree_view_column_size = Ukuran +main_tree_view_column_similarity = Kesamaan +main_tree_view_column_dimensions = Dimensi +main_tree_view_column_title = Judul +main_tree_view_column_artist = Artis +main_tree_view_column_year = Tahun +main_tree_view_column_bitrate = Bitrate +main_tree_view_column_length = Panjang +main_tree_view_column_genre = Genre +main_tree_view_column_symlink_file_name = Nama File Simbolik (Symlink) +main_tree_view_column_symlink_folder = Simbolik Link Folder +main_tree_view_column_destination_path = Jalur Tujuan +main_tree_view_column_type_of_error = Jenis Kesalahan +main_tree_view_column_current_extension = Ekstensi Saat Ini +main_tree_view_column_proper_extensions = Ekstensi yang Tepat +main_tree_view_column_fps = FPS +main_tree_view_column_codec = Codec +main_label_check_method = Metode cek +main_label_hash_type = Jenis hash +main_label_hash_size = Ukuran hash +main_label_size_bytes = Ukuran (byte) +main_label_min_size = Min +main_label_max_size = Maks +main_label_shown_files = Jumlah berkas yang ditampilkan +main_label_resize_algorithm = Algoritma perubahan ukuran +main_label_similarity = Similarity{ " " } +main_check_box_broken_files_audio = Audio +main_check_box_broken_files_pdf = PDF +main_check_box_broken_files_archive = Arsip +main_check_box_broken_files_image = Gambar +main_check_box_broken_files_video = Video +main_check_box_broken_files_video_tooltip = Menggunakan ffmpeg/ffprobe untuk memvalidasi berkas video. Prosesnya cukup lambat dan mungkin mendeteksi kesalahan-kesalahan kecil, bahkan jika berkas video tersebut dapat diputar dengan baik. +check_button_general_same_size = Abaikan ukuran sama +check_button_general_same_size_tooltip = Abaikan file dengan ukuran yang sama dalam hasil pencarian - biasanya ini adalah duplikat yang identik +main_label_size_bytes_tooltip = Ukuran berkas yang akan digunakan dalam proses pemindaian +# Upper window +upper_tree_view_included_folder_column_title = Folder yang Akan Dicari +upper_tree_view_included_reference_column_title = Folder Referensi +upper_recursive_button = Rekursif +upper_recursive_button_tooltip = Jika opsi ini dipilih, pencarian juga akan mencakup file-file yang tidak terletak langsung di dalam folder yang dipilih. +upper_manual_add_included_button = Tambah Manual +upper_add_included_button = Tambahkan +upper_remove_included_button = Hapus +upper_manual_add_excluded_button = Tambah Manual +upper_add_excluded_button = Tambahkan +upper_remove_excluded_button = Hapus +upper_manual_add_included_button_tooltip = + Tambahkan nama direktori secara manual untuk pencarian. + + Untuk menambahkan beberapa jalur sekaligus, pisahkan dengan tanda ";". + + `/home/roman;/home/rozkaz` akan menambahkan dua direktori, yaitu `/home/roman` dan `/home/rozkaz` +upper_add_included_button_tooltip = Tambahkan direktori baru ke daftar pencarian. +upper_remove_included_button_tooltip = Hapus direktori dari pencarian. +upper_manual_add_excluded_button_tooltip = + Tambahkan nama direktori yang dikecualikan secara manual. + + Untuk menambahkan beberapa jalur sekaligus, pisahkan dengan tanda ";". + + `/home/roman;/home/krokiet` akan menambahkan dua direktori: `/home/roman` dan `/home/keokiet` +upper_add_excluded_button_tooltip = Tambahkan direktori yang akan dikecualikan dari pencarian. +upper_remove_excluded_button_tooltip = Hapus direktori dari daftar yang dikecualikan. +upper_notebook_items_configuration = Konfigurasi Item +upper_notebook_excluded_directories = Jalur yang Dikecualikan +upper_notebook_included_directories = Jalur yang Termasuk +upper_allowed_extensions_tooltip = + Ekstensi yang diizinkan harus dipisahkan dengan koma (secara default, semua tersedia). + + Makro berikut, yang menambahkan beberapa ekstensi sekaligus, juga tersedia: IMAGE, VIDEO, MUSIC, TEXT. + + Contoh penggunaan: ".exe, IMAGE, VIDEO, .rar, 7z" - ini berarti bahwa file gambar (misalnya, jpg, png), video (misalnya, avi, mp4), file exe, rar, dan 7z akan dipindai. +upper_excluded_extensions_tooltip = + Daftar berkas yang dinonaktifkan dan akan diabaikan selama pemindaian. + + Ketika menggunakan baik ekstensi yang diizinkan maupun yang dinonaktifkan, yang dinonaktifkan memiliki prioritas lebih tinggi, sehingga berkas tidak akan diperiksa. +upper_excluded_items_tooltip = + Item-item yang dikecualikan harus mengandung karakter "*wildcard*" dan dipisahkan dengan koma. + Ini lebih lambat dibandingkan dengan "Excluded Paths", jadi gunakan dengan hati-hati. +upper_excluded_items = Barang yang Tidak Termasuk: +upper_allowed_extensions = Ekstensi yang Diizinkan: +upper_excluded_extensions = Ekstensi yang Dinonaktifkan: +# Popovers +popover_select_all = Pilih Semua +popover_unselect_all = Batal Pilih +popover_reverse = Seleksi Terbalik +popover_select_all_except_shortest_path = Pilih semua kecuali jalur terpendek +popover_select_all_except_longest_path = Pilih semua kecuali jalur terpanjang +popover_select_all_except_oldest = Pilih semua kecuali yang paling tua +popover_select_all_except_newest = Pilih semua kecuali yang terbaru +popover_select_one_oldest = Pilih salah satu yang tertua +popover_select_one_newest = Pilih salah satu yang terbaru +popover_select_custom = Pilih kustom +popover_unselect_custom = Batalkan pilihan khusus +popover_select_all_images_except_biggest = Pilih semua kecuali yang terbesar +popover_select_all_images_except_smallest = Pilih semua kecuali yang terkecil +popover_custom_path_check_button_entry_tooltip = + Pilih catatan berdasarkan jalur. + + Contoh penggunaan: + File "/home/pimpek/rzecz.txt" dapat ditemukan dengan menggunakan "/home/pim*" +popover_custom_name_check_button_entry_tooltip = + Pilih catatan berdasarkan nama file. + + Contoh penggunaan: + File `/usr/ping/pong.txt` dapat ditemukan dengan menggunakan pola `*ong*` +popover_custom_regex_check_button_entry_tooltip = + Pilih catatan berdasarkan ekspresi reguler (Regex) yang ditentukan. + + Dalam mode ini, teks yang dicari adalah Jalur (Path) dengan Nama. + + Contoh penggunaan: + File `/usr/bin/ziemniak.txt` dapat ditemukan dengan ekspresi `/ziem[a-z]+`. + + Ini menggunakan implementasi ekspresi reguler (regex) bawaan Rust. Anda dapat membaca lebih lanjut tentangnya di sini: https://docs.rs/regex. +popover_custom_case_sensitive_check_button_tooltip = + Mengaktifkan deteksi yang memperhatikan huruf besar/kecil. + + Ketika dinonaktifkan, `/home/*` akan menemukan baik `/HoMe/roman` maupun `/home/roman`. +popover_custom_not_all_check_button_tooltip = + Mencegah pemilihan semua catatan dalam suatu grup. + + Fitur ini aktif secara bawaan, karena dalam banyak situasi, Anda tidak ingin menghapus baik file asli maupun file duplikat, melainkan ingin menyisakan setidaknya satu file. + + PERINGATAN: Pengaturan ini tidak berfungsi jika Anda telah memilih semua hasil secara manual dalam suatu grup. +popover_custom_regex_path_label = Jalur +popover_custom_regex_name_label = Nama +popover_custom_regex_regex_label = Jalur Regex + Nama +popover_custom_case_sensitive_check_button = Sensitif terhadap huruf besar/kecil +popover_custom_all_in_group_label = Jangan pilih semua catatan dalam grup +popover_custom_mode_unselect = Batalkan pilihan Kustom +popover_custom_mode_select = Pilih Kustom +popover_sort_file_name = Nama file +popover_sort_folder_name = Nama folder +popover_sort_full_name = Nama lengkap +popover_sort_size = Ukuran +popover_sort_selection = Pemilihan +popover_invalid_regex = Ekspresi reguler tidak valid +popover_valid_regex = Ekspresi reguler valid +# Bottom buttons +bottom_search_button = Cari +bottom_select_button = Pilih +bottom_delete_button = Hapus +bottom_save_button = Simpan +bottom_symlink_button = Symlink +bottom_hardlink_button = Hardlink +bottom_move_button = Pindah +bottom_sort_button = Urutkan +bottom_compare_button = Bandingkan +bottom_search_button_tooltip = Mulai pencarian +bottom_select_button_tooltip = Pilih rekaman. Hanya berkas/folder yang dipilih yang dapat diproses selanjutnya. +bottom_delete_button_tooltip = Hapus berkas/folder yang dipilih. +bottom_save_button_tooltip = Simpan data tentang pencarian ke dalam file +bottom_symlink_button_tooltip = + Buat tautan simbolik. + Hanya berfungsi jika setidaknya dua hasil dalam suatu grup dipilih. + Hasil pertama tidak akan berubah, sedangkan hasil kedua dan seterusnya akan menjadi tautan simbolik ke hasil pertama. +bottom_hardlink_button_tooltip = + Buat tautan keras. + Hanya berfungsi jika setidaknya dua hasil dipilih dalam suatu grup. + Hasil pertama tidak berubah, dan hasil kedua dan seterusnya akan ditautkan secara keras ke hasil pertama. +bottom_hardlink_button_not_available_tooltip = + Buat tautan keras. + Tombol ini dinonaktifkan, karena tautan keras tidak dapat dibuat. + Tautan keras hanya berfungsi dengan hak administrator di Windows, jadi pastikan untuk menjalankan aplikasi sebagai administrator. + Jika aplikasi sudah berjalan dengan hak tersebut, periksa masalah serupa di Github. +bottom_move_button_tooltip = + Memindahkan berkas ke direktori yang dipilih. + Berkas-berkas tersebut disalin ke direktori tanpa mempertahankan struktur direktori aslinya. + Jika mencoba memindahkan dua berkas dengan nama yang sama ke folder, proses untuk berkas kedua akan gagal dan menampilkan pesan kesalahan. +bottom_sort_button_tooltip = Mengurutkan berkas/folder berdasarkan metode yang dipilih. +bottom_compare_button_tooltip = Bandingkan gambar-gambar dalam grup ini. +bottom_show_errors_tooltip = Tampilkan/Sembunyikan panel teks di bagian bawah. +bottom_show_upper_notebook_tooltip = Tampilkan/Sembunyikan panel notebook atas. +# Progress Window +progress_stop_button = Berhenti +progress_stop_additional_message = Permintaan berhenti telah diterima +# About Window +about_repository_button_tooltip = Tautan ke halaman repositori yang berisi kode sumber. +about_donation_button_tooltip = Tautan ke halaman donasi. +about_instruction_button_tooltip = Tautan ke halaman instruksi. +about_translation_button_tooltip = Tautan ke halaman Crowdin yang berisi terjemahan aplikasi. Secara resmi, bahasa Polandia dan Inggris didukung. +about_repository_button = Repositori +about_donation_button = Donasi +about_instruction_button = Instruksi +about_translation_button = Terjemahan +# Header +header_setting_button_tooltip = Membuka dialog pengaturan. +header_about_button_tooltip = Membuka dialog yang berisi informasi tentang aplikasi. + +# Settings + + +## General + +settings_number_of_threads = Jumlah thread yang digunakan +settings_number_of_threads_tooltip = Jumlah thread yang digunakan, 0 berarti semua thread yang tersedia akan digunakan. +settings_use_rust_preview = Gunakan pustaka eksternal sebagai pengganti gtk untuk memuat pratinjau +settings_use_rust_preview_tooltip = + Menggunakan pratinjau berbasis gtk terkadang bisa lebih cepat dan mendukung lebih banyak format, tetapi terkadang hal ini justru bisa menjadi sebaliknya. + + Jika Anda mengalami masalah saat memuat pratinjau, Anda mungkin perlu mencoba mengubah pengaturan ini. + + Pada sistem non-Linux, disarankan untuk menggunakan opsi ini, karena gtk-pixbuf tidak selalu tersedia di sana, sehingga menonaktifkan opsi ini akan mencegah pemuatan pratinjau untuk beberapa gambar. +settings_label_restart = Anda perlu memulai ulang aplikasi untuk menerapkan pengaturan! +settings_ignore_other_filesystems = Abaikan sistem berkas lainnya (hanya untuk Linux) +settings_ignore_other_filesystems_tooltip = + Mengabaikan berkas yang tidak berada dalam sistem berkas yang sama dengan direktori yang dicari. + + Berfungsi sama seperti opsi -xdev pada perintah `find` di Linux +settings_save_at_exit_button_tooltip = Simpan konfigurasi ke file saat aplikasi ditutup. +settings_load_at_start_button_tooltip = + Muat konfigurasi dari file saat aplikasi dibuka. + + Jika fitur ini tidak diaktifkan, pengaturan bawaan akan digunakan. +settings_confirm_deletion_button_tooltip = Tampilkan dialog konfirmasi saat tombol hapus diklik. +settings_confirm_link_button_tooltip = Tampilkan dialog konfirmasi saat tombol "hard link" atau "symlink" diklik. +settings_confirm_group_deletion_button_tooltip = Tampilkan dialog peringatan ketika pengguna mencoba menghapus semua catatan dari grup tersebut. +settings_show_text_view_button_tooltip = Tampilkan panel teks di bagian bawah antarmuka pengguna. +settings_use_cache_button_tooltip = Gunakan *file cache*. +settings_save_also_as_json_button_tooltip = Simpan *cache* ke dalam format JSON (yang mudah dibaca oleh manusia). Anda dapat memodifikasi isinya. *Cache* dari file ini akan dibaca secara otomatis oleh aplikasi jika *cache* dalam format biner (dengan ekstensi .bin) tidak tersedia. +settings_use_trash_button_tooltip = Memindahkan berkas ke tempat sampah, bukan menghapusnya secara permanen. +settings_language_label_tooltip = Bahasa untuk antarmuka pengguna. +settings_save_at_exit_button = Simpan konfigurasi saat aplikasi ditutup +settings_load_at_start_button = Muat konfigurasi saat aplikasi dibuka +settings_confirm_deletion_button = Tampilkan kotak dialog konfirmasi saat menghapus file apa pun +settings_confirm_link_button = Tampilkan dialog konfirmasi saat membuat tautan keras/simbolik ke file apa pun +settings_confirm_group_deletion_button = Tampilkan dialog konfirmasi saat menghapus semua file dalam grup +settings_show_text_view_button = Tampilkan panel teks bagian bawah +settings_use_cache_button = Gunakan *cache* +settings_save_also_as_json_button = Simpan juga cache sebagai file JSON +settings_use_trash_button = Pindahkan berkas yang dihapus ke tempat sampah +settings_language_label = Bahasa +settings_multiple_delete_outdated_cache_checkbutton = Hapus entri cache yang sudah kedaluwarsa secara otomatis +settings_multiple_delete_outdated_cache_checkbutton_tooltip = + Hapus hasil cache yang sudah kedaluwarsa dan mengarah ke file yang tidak ada. + + Saat diaktifkan, aplikasi memastikan bahwa saat memuat data, semua data mengarah ke file yang valid (data yang rusak akan diabaikan). + + Menonaktifkan fitur ini akan membantu saat memindai file di drive eksternal, sehingga entri cache tentang file tersebut tidak akan dihapus pada pemindaian berikutnya. + + Jika Anda memiliki ratusan ribu data dalam cache, disarankan untuk mengaktifkan fitur ini, karena akan mempercepat proses pemuatan/penyimpanan cache di awal/akhir pemindaian. +settings_notebook_general = Umum +settings_notebook_duplicates = Duplikat +settings_notebook_images = Gambar Serupa +settings_notebook_videos = Video Serupa + +## Multiple - settings used in multiple tabs + +settings_multiple_image_preview_checkbutton_tooltip = Menampilkan pratinjau di sisi kanan (saat memilih berkas gambar). +settings_multiple_image_preview_checkbutton = Tampilkan pratinjau gambar +settings_multiple_clear_cache_button_tooltip = + Bersihkan cache secara manual dari entri yang sudah kedaluwarsa. + Ini hanya boleh digunakan jika penghapusan otomatis telah dinonaktifkan. +settings_multiple_clear_cache_button = Hapus hasil yang sudah kedaluwarsa dari penyimpanan sementara. + +## Duplicates + +settings_duplicates_hide_hard_link_button_tooltip = + Menyembunyikan semua berkas kecuali satu, jika semua berkas tersebut menunjuk ke data yang sama (melalui hard link). + + Contoh: Jika terdapat tujuh berkas di disk yang memiliki hard link ke data yang sama, dan satu berkas lain dengan data yang sama tetapi inode yang berbeda, maka pada fitur pencari duplikat, hanya akan ditampilkan satu berkas unik dan satu berkas dari berkas-berkas yang memiliki hard link. +settings_duplicates_minimal_size_entry_tooltip = + Atur ukuran file minimum yang akan disimpan dalam cache. + + Memilih nilai yang lebih kecil akan menghasilkan lebih banyak catatan. Hal ini akan mempercepat pencarian, tetapi memperlambat proses pemuatan/penyimpanan cache. +settings_duplicates_prehash_checkbutton_tooltip = + Memungkinkan penyimpanan sementara (cache) dari *prehash* (sebuah nilai hash yang dihitung dari sebagian kecil file), yang memungkinkan penghapusan hasil yang tidak duplikat lebih cepat. + + Fitur ini dinonaktifkan secara bawaan karena dapat menyebabkan perlambatan dalam beberapa situasi. + + Sangat disarankan untuk mengaktifkannya saat memindai ratusan ribu atau jutaan file, karena dapat mempercepat pencarian berkali-kali lipat. +settings_duplicates_prehash_minimal_entry_tooltip = Ukuran minimal entri yang disimpan dalam cache. +settings_duplicates_hide_hard_link_button = Sembunyikan tautan keras +settings_duplicates_prehash_checkbutton = Gunakan *cache* pra-hash +settings_duplicates_minimal_size_cache_label = Ukuran file terkecil (dalam byte) yang disimpan ke cache +settings_duplicates_minimal_size_cache_prehash_label = Ukuran minimum file (dalam byte) yang disimpan ke cache pra-hash + +## Saving/Loading settings + +settings_saving_button_tooltip = Simpan konfigurasi pengaturan saat ini ke dalam file. +settings_loading_button_tooltip = Muat pengaturan dari file dan ganti konfigurasi yang sedang digunakan dengan pengaturan tersebut. +settings_reset_button_tooltip = Kembalikan konfigurasi saat ini ke pengaturan bawaan. +settings_saving_button = Simpan konfigurasi +settings_loading_button = Muat konfigurasi +settings_reset_button = Atur ulang konfigurasi + +## Opening cache/config folders + +settings_folder_cache_open_tooltip = + Membuka folder tempat file cache disimpan. + + Memodifikasi file cache dapat menyebabkan hasil yang tidak valid ditampilkan. Namun, mengubah jalur dapat menghemat waktu saat memindahkan sejumlah besar file ke lokasi yang berbeda. + + Anda dapat menyalin file-file ini antar komputer untuk menghemat waktu karena tidak perlu melakukan pemindaian ulang (tentu saja jika struktur direktori mereka serupa). + + Jika terjadi masalah dengan cache, file-file ini dapat dihapus. Aplikasi akan secara otomatis membuat ulang file-file tersebut. +settings_folder_settings_open_tooltip = + Membuka folder tempat konfigurasi Czkawka disimpan. + + PERINGATAN: Mengubah konfigurasi secara manual dapat merusak alur kerja Anda. +settings_folder_cache_open = Buka folder cache +settings_folder_settings_open = Buka folder pengaturan +# Compute results +compute_stopped_by_user = Pencarian dihentikan oleh pengguna +compute_found_duplicates_hash_size = Ditemukan { $number_files } duplikat dalam { $number_groups } grup, yang memakan ruang sebesar { $size } dan membutuhkan waktu { $time} +compute_found_duplicates_name = Ditemukan { $number_files } duplikat dalam { $number_groups } grup dalam waktu { $time } +compute_found_empty_folders = Ditemukan { $number_files } folder kosong dalam waktu { $time } +compute_found_empty_files = Ditemukan { $number_files } berkas kosong dalam { $time } +compute_found_big_files = Ditemukan { $number_files } berkas besar dalam waktu { $time } +compute_found_temporary_files = Ditemukan { $number_files } berkas sementara dalam { $time } +compute_found_images = Ditemukan { $number_files } gambar serupa dalam { $number_groups } kelompok dalam waktu { $time } +compute_found_videos = Ditemukan { $number_files } video serupa dalam { $number_groups } grup, dalam waktu { $time } +compute_found_music = Ditemukan { $number_files } file musik serupa dalam { $number_groups } kelompok dalam waktu { $time } +compute_found_invalid_symlinks = Ditemukan { $number_files } tautan simbolik yang tidak valid dalam { $time } +compute_found_broken_files = Ditemukan { $number_files } berkas yang rusak dalam waktu { $time } +compute_found_bad_extensions = Ditemukan { $number_files } berkas dengan ekstensi yang tidak valid dalam waktu { $time } +# 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_creating_video_thumbnails = Created thumbnails 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 = Memuat cache pra-hash +progress_prehash_cache_saving = Menyimpan cache pra-hash +progress_hash_cache_loading = Memuat cache hash +progress_hash_cache_saving = Menyimpan cache hash +progress_cache_loading = Memuat cache +progress_cache_saving = Menyimpan data sementara +progress_current_stage = Current Stage:{ " " } +progress_all_stages = All Stages:{ " " } +# Saving loading +saving_loading_saving_success = Konfigurasi telah disimpan ke file { $name }. +saving_loading_saving_failure = Gagal menyimpan data konfigurasi ke file { $name }, alasannya { $reason }. +saving_loading_reset_configuration = Konfigurasi saat ini telah dihapus. +saving_loading_loading_success = Konfigurasi aplikasi telah dimuat dengan benar. +saving_loading_failed_to_create_config_file = Gagal membuat file konfigurasi "{ $path }", alasannya "{ $reason }". +saving_loading_failed_to_read_config_file = Tidak dapat memuat konfigurasi dari "{ $path }" karena file tersebut tidak ada atau bukan merupakan sebuah file. +saving_loading_failed_to_read_data_from_file = Tidak dapat membaca data dari file "{ $path }", alasannya "{ $reason }". +# Other +selected_all_reference_folders = Tidak dapat memulai pencarian jika semua direktori telah ditetapkan sebagai folder referensi +searching_for_data = Sedang mencari data, mungkin membutuhkan waktu, mohon tunggu... +text_view_messages = PESAN +text_view_warnings = PERINGATAN +text_view_errors = KESALAHAN +about_window_motto = Program ini gratis untuk digunakan dan akan selalu demikian. +krokiet_new_app = Czkawka sedang dalam masa pemeliharaan, yang berarti hanya *bug* penting yang akan diperbaiki dan tidak ada fitur baru yang akan ditambahkan. Untuk fitur-fitur baru, silakan coba aplikasi Krokiet yang baru, yang lebih stabil dan memiliki kinerja lebih baik, dan masih dalam tahap pengembangan aktif. +# Various dialog +dialogs_ask_next_time = Tanyakan lagi lain waktu +symlink_failed = Failed to symlink { $name } to { $target }, reason { $reason } +delete_title_dialog = Konfirmasi penghapusan +delete_question_label = Apakah Anda yakin ingin menghapus berkas-berkas ini? +delete_all_files_in_group_title = Konfirmasi penghapusan semua berkas dalam grup +delete_all_files_in_group_label1 = Dalam beberapa kelompok, semua catatan dipilih. +delete_all_files_in_group_label2 = Apakah Anda yakin ingin menghapusnya? +delete_items_label = { $items } berkas akan dihapus. +delete_items_groups_label = { $items } berkas dari { $groups } grup akan dihapus. +hardlink_failed = Gagal membuat tautan keras untuk { $name } ke { $target }, alasannya: { $reason } +hard_sym_invalid_selection_title_dialog = Pemilihan tidak valid dengan beberapa grup +hard_sym_invalid_selection_label_1 = Dalam beberapa grup, hanya ada satu catatan yang dipilih, dan catatan tersebut akan diabaikan. +hard_sym_invalid_selection_label_2 = Untuk dapat membuat tautan keras/simbolik ke file-file ini, setidaknya dua hasil dalam grup tersebut harus dipilih. +hard_sym_invalid_selection_label_3 = Yang pertama dalam kelompok dianggap sebagai yang asli dan tidak diubah, tetapi yang kedua dan selanjutnya dimodifikasi. +hard_sym_link_title_dialog = Konfirmasi tautan +hard_sym_link_label = Apakah Anda yakin ingin menautkan file-file ini? +move_folder_failed = Failed to move folder { $name }, reason { $reason } +move_file_failed = Failed to move file { $name }, reason { $reason } +move_files_title_dialog = Pilih folder tempat Anda ingin memindahkan file-file yang terduplikasi +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: Anda harus memilih setidaknya satu kotak centang dengan jenis pencarian musik. +search_not_choosing_any_broken_files = ERROR: Anda harus memilih setidaknya satu kotak centang yang menunjukkan jenis file rusak. +include_folders_dialog_title = Folder yang akan disertakan +exclude_folders_dialog_title = Folder yang akan dikecualikan +include_manually_directories_dialog_title = Tambahkan direktori secara manual +cache_properly_cleared = Cache berhasil dihapus +cache_clear_duplicates_title = Menghapus cache duplikat +cache_clear_similar_images_title = Menghapus cache gambar-gambar yang serupa +cache_clear_similar_videos_title = Menghapus cache untuk video yang serupa +cache_clear_message_label_1 = Apakah Anda ingin menghapus cache entri yang sudah kedaluwarsa? +cache_clear_message_label_2 = Operasi ini akan menghapus semua entri cache yang mengarah ke berkas-berkas yang tidak valid. +cache_clear_message_label_3 = Ini mungkin sedikit mempercepat proses memuat/menyimpan data ke dalam cache. +cache_clear_message_label_4 = PERINGATAN: Operasi ini akan menghapus semua data yang tersimpan sementara dari perangkat eksternal yang tidak terhubung. Oleh karena itu, setiap hash perlu dibuat ulang. +# 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 = Grup { $current_group }/{ $all_groups } ({ $images_in_group } gambar) +compare_move_left_button = L +compare_move_right_button = R diff --git a/czkawka_gui/i18n/it/czkawka_gui.ftl b/czkawka_gui/i18n/it/czkawka_gui.ftl index d5692594a..b8eef7879 100644 --- a/czkawka_gui/i18n/it/czkawka_gui.ftl +++ b/czkawka_gui/i18n/it/czkawka_gui.ftl @@ -337,7 +337,7 @@ settings_confirm_deletion_button_tooltip = Mostra la finestra di conferma quando 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 risultati dal gruppo. settings_show_text_view_button_tooltip = Mostra il pannello di testo in fondo all'interfaccia utente. -settings_use_cache_button_tooltip = Usa i file di cache. +settings_use_cache_button_tooltip = Usa i file di cache. 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 di eliminarli in modo permanente. settings_language_label_tooltip = Lingua per l'interfaccia utente. diff --git a/czkawka_gui/i18n/ja/czkawka_gui.ftl b/czkawka_gui/i18n/ja/czkawka_gui.ftl index b96add335..f3cf0702d 100644 --- a/czkawka_gui/i18n/ja/czkawka_gui.ftl +++ b/czkawka_gui/i18n/ja/czkawka_gui.ftl @@ -7,19 +7,19 @@ window_compare_images = 画像を比較 general_ok_button = Ok general_close_button = 閉じる # Krokiet info dialog -krokiet_info_title = Krokiet - 新バージョン Czkawka -krokiet_info_message = - Krokietは、Czkawka GTK GUIの新しい、改良され、高速かつ信頼性の高いバージョンです! - - 実行が簡単で、システム変更に強く、ほとんどのシステムでデフォルトで利用可能なコアライブラリに依存するためです。 - - Krokietは、サムネイルをビデオ比較モードで、EXIFクリーナー、ファイル移動/コピー/削除の進捗状況、または拡張されたソートオプションなど、Czkawkaにはない機能も提供します。 - - 試してみてください。違いを確かめてください! - - Czkawkaは、私からバグ修正や軽微なアップデートを継続的に受け取りますが、すべての新機能はKrokietにのみ開発され、誰でも新しい機能を追加したり、欠落しているモードを補ったり、Czkawkaをさらに拡張したりすることができます。 - - 追伸:このメッセージは一度だけ表示されるように設計されています。もし表示された場合は、CZKAWKA_DONT_ANNOY_ME環境変数を任意の非空の値に設定してください。. +krokiet_info_title = Krokiet – 新バージョン Czkawka +krokiet_info_message = + Krokietは、Czkawka GTK GUIの新しい、改良され、高速かつ信頼性の高いバージョンです! + + 実行が簡単で、システム変更に強く、ほとんどのシステムでデフォルトで利用可能なコアライブラリに依存するためです。 + + Krokietは、サムネイルをビデオ比較モードで、EXIFクリーナー、ファイル移動/コピー/削除の進捗状況、または拡張されたソートオプションなど、Czkawkaにはない機能も提供します。 + + 試してみてください。違いを確かめてください! + + Czkawkaは、私からバグ修正や軽微なアップデートを継続的に受け取りますが、すべての新機能はKrokietにのみ開発され、誰でも新しい機能を追加したり、欠落しているモードを補ったり、Czkawkaをさらに拡張したりすることができます。 + + 追伸:このメッセージは一度だけ表示されるように設計されています。もし表示された場合は、CZKAWKA_DONT_ANNOY_ME環境変数を任意の非空の値に設定してください。. # Main window music_title_checkbox = タイトル music_artist_checkbox = アーティスト @@ -33,11 +33,11 @@ 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 = +music_compare_only_in_title_group_tooltip = 有効にすると、ファイルはタイトルでグループ化され、それから比較されます。 10000ファイルでは、その代わりに約100万比較が通常、約20000比較があります。. -same_music_tooltip = +same_music_tooltip = 音楽ファイルの内容から類似ファイルを検索するように設定できます: - 音楽ファイルが類似していると識別されるフラグメントの最小時間 @@ -62,7 +62,7 @@ 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 = +duplicate_hash_type_tooltip = Czkawkaは3種類のハッシュを提供します: Blake3 - 暗号学的ハッシュ関数。非常に高速であるため、デフォルトのハッシュ方式として使用されます。 @@ -70,7 +70,7 @@ duplicate_hash_type_tooltip = CRC32 - シンプルなハッシュ関数。Blake3より高速ですが、まれに衝突が発生する可能性があります。 XXH3 - パフォーマンスとハッシュの質がBlake3に非常に近いので、このようなモードの代わりに簡単に使用できます。(ただし、暗号学的ではありません). -duplicate_check_method_tooltip = +duplicate_check_method_tooltip = Czkawkaは、今のところ以下の3種類の方法で重複を見つけることができます: 名前 - 同じ名前のファイルを検索します。 @@ -78,7 +78,7 @@ duplicate_check_method_tooltip = サイズ - 同じサイズのファイルを探します。 ハッシュ - 同じ内容のファイルを探します。ファイルをハッシュ化して比較することにより重複を見つけます。このモードは、重複を見つけるための最も安全な方法です。このツールはキャッシュを多用するので、同じデータの2回目以降のスキャンは最初の時よりずっと速くなるはずです。. -image_hash_size_tooltip = +image_hash_size_tooltip = チェックした画像はそれぞれ特別なハッシュを生成し、そのハッシュを比較したときに差が小さいほど、この画像は類似していることを意味します。 8のハッシュサイズは、オリジナルに少ししか似ていない画像を見つけるのにかなり適しています。しかし、1000枚を超えるような大きな画像では、誤検出が多くなるため、より大きなハッシュサイズを使用することをお勧めします。 @@ -86,7 +86,7 @@ image_hash_size_tooltip = 16はデフォルトのハッシュサイズであり、少しでも類似した画像を見つけることとハッシュの衝突を少なくすることの間でかなり良い妥協点です。 32と64のハッシュは非常に類似した画像しか見つけられませんが、誤検出はほとんどありません(アルファチャンネルのある一部の画像を除いて)。. -image_resize_filter_tooltip = +image_resize_filter_tooltip = 画像のハッシュを計算するために、ライブラリはまず画像のサイズを必ず変更します。 どのアルゴリズムを選択したかによって、ハッシュを計算するために使用される画像は少し違って見えるかもしれません。 @@ -94,7 +94,7 @@ image_resize_filter_tooltip = 最も高速なアルゴリズムは Nearest ですが、最も悪い結果を出すのも Nearest です。16x16のハッシュサイズで低品質の場合、それが明らかになることはないので、デフォルトは Nearest です。 8x8のハッシュサイズでは、より良い画像群を得るために、Nearestとは異なるアルゴリズムを使用することが推奨されます。. -image_hash_alg_tooltip = +image_hash_alg_tooltip = ハッシュの計算方法は、多くのアルゴリズムの中からユーザーが選択することができます。 それぞれ長所と短所があり、画像によって良い結果が出る場合もあれば、悪い結果が出る場合もあります。 @@ -184,19 +184,19 @@ upper_remove_excluded_button_tooltip = 除外されたディレクトリを削 upper_notebook_items_configuration = アイテム設定 upper_notebook_excluded_directories = 除外パス upper_notebook_included_directories = 含まれるパス -upper_allowed_extensions_tooltip = +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_extensions_tooltip = スキャンで無視される無効なファイルの一覧です。 許可された拡張子と無効化された拡張子の両方を使用する場合、この拡張子の方が優先度が高いので、ファイルはチェックされません。. -upper_excluded_items_tooltip = - 除外項目には *ワイルドカードを含んでおり、カンマで区切ってください。 - これはExcluded Pathsよりも遅いため、注意して使用してください。. +upper_excluded_items_tooltip = + 除外項目には *ワイルドカードを含んでおり、カンマで区切ってください。 + これはExcluded Pathsよりも遅いため、注意して使用してください。. upper_excluded_items = 除外するアイテム: upper_allowed_extensions = 許可される拡張子: upper_excluded_extensions = 無効なエクステンション: @@ -224,7 +224,7 @@ popover_custom_name_check_button_entry_tooltip = 使用例: /usr/ping/pong.txt は *ong* でを見つけることができます -popover_custom_regex_check_button_entry_tooltip = +popover_custom_regex_check_button_entry_tooltip = 指定した正規表現でレコードを選択することができます。 このモードでは、検索される文字列はパスと文字列になります。 @@ -233,11 +233,11 @@ 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 = +popover_custom_case_sensitive_check_button_tooltip = 大文字小文字を区別する検出を有効にします。 /home/* を無効にすると、/Home/roman と /home/roman の両方が検出されます。. -popover_custom_not_all_check_button_tooltip = +popover_custom_not_all_check_button_tooltip = グループ内のすべてのレコードを選択できないようにします。 ほとんどの状況でユーザーは元のファイルと重複ファイルの両方を削除したくないため、これはデフォルトで有効になっています。 少なくとも1つのファイルを残したい。 @@ -271,20 +271,20 @@ bottom_search_button_tooltip = 検索を開始 bottom_select_button_tooltip = レコードを選択します。選択したファイル/フォルダのみが後で処理できます。. bottom_delete_button_tooltip = 選択したファイル/フォルダを削除します。. bottom_save_button_tooltip = 検索に関するデータをファイルに保存します。 -bottom_symlink_button_tooltip = +bottom_symlink_button_tooltip = シンボリックリンクを作成します。 グループ内の2つ以上の結果が選択されている場合にのみ機能します。 最初の結果は変更されず、2番目以降の結果が最初の結果にシンボリックリンクされます。. -bottom_hardlink_button_tooltip = +bottom_hardlink_button_tooltip = ハードリンクを作成します。 グループ内の2つ以上の結果が選択されている場合にのみ機能します。 最初の結果は変更されず、2番目以降の結果が最初の結果にハードリンクされます。. -bottom_hardlink_button_not_available_tooltip = +bottom_hardlink_button_not_available_tooltip = ハードリンクを作成する。 ハードリンクを作成できないため、ボタンは無効になっています。 ハードリンクはWindowsの管理者権限でのみ動作するので、アプリは必ず管理者として実行してください。 アプリがすでにそのような権限で動作している場合は、Githubに同様の問題がないか確認してください。. -bottom_move_button_tooltip = +bottom_move_button_tooltip = 選択したフォルダにファイルを移動します。 ディレクトリツリーを維持したまま、すべてのファイルをフォルダにコピーします。 同じ名前の2つのファイルをフォルダに移動しようとすると、2番目のファイルが失敗し、エラーが表示されます。. @@ -307,7 +307,7 @@ about_translation_button = 翻訳 # Header header_setting_button_tooltip = 設定ダイアログを開きます。. header_about_button_tooltip = アプリに関する情報を含むダイアログを開きます。. - + # Settings @@ -316,7 +316,7 @@ header_about_button_tooltip = アプリに関する情報を含むダイアロ settings_number_of_threads = 使用されるスレッドの数 settings_number_of_threads_tooltip = 使用するスレッドの数、0 は、使用可能なすべてのスレッドが使用されることを意味します。. settings_use_rust_preview = プレビューの読み込みにgtkの代わりに外部ライブラリを使用する -settings_use_rust_preview_tooltip = +settings_use_rust_preview_tooltip = GTKプレビューはいくらかの場合において高速で多くのフォーマットをサポートしているが、全く逆となる場合もある。 プレビューの読み込みに問題がある場合、この設定を変更してみるとよい。 @@ -329,7 +329,7 @@ settings_ignore_other_filesystems_tooltip = Linux の find コマンドで -xdev オプションのように動作します。 settings_save_at_exit_button_tooltip = 終了時に設定をファイルに保存します。. -settings_load_at_start_button_tooltip = +settings_load_at_start_button_tooltip = 起動時にファイルから設定を読み込みます。 このオプションが無効の場合、デフォルトの設定が使用されます。. @@ -352,7 +352,7 @@ 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_multiple_delete_outdated_cache_checkbutton_tooltip = 存在しないファイルを指している古いキャッシュエントリを削除できるようにします。 このオプションを有効にすると、アプリはレコードを読み込むときにすべてのポイントが有効なファイルであることを確認します(壊れたファイルは無視されます)。 @@ -369,22 +369,22 @@ settings_notebook_videos = 類似の動画 settings_multiple_image_preview_checkbutton_tooltip = 画像ファイルを選択しているとき、右側にプレビューを表示します。. settings_multiple_image_preview_checkbutton = 画像のプレビューを表示 -settings_multiple_clear_cache_button_tooltip = +settings_multiple_clear_cache_button_tooltip = 古いキャッシュエントリを手動でクリアします。 自動クリアが無効の場合にのみ使用する必要があります。. settings_multiple_clear_cache_button = キャッシュから古い結果を削除します。. - + ## Duplicates -settings_duplicates_hide_hard_link_button_tooltip = +settings_duplicates_hide_hard_link_button_tooltip = ハードリンクされていてかつ同じデータを指している場合、1つを除くすべてのファイルを非表示にします。 例: ディスク上に特定のデータにハードリンクされている同じデータを持つ7つのファイルと、1つの異なるinodeのファイルがある場合、 重複検索では一意のファイルとハードリンクされたファイルのみが表示されます。. -settings_duplicates_minimal_size_entry_tooltip = +settings_duplicates_minimal_size_entry_tooltip = キャッシュされるファイルの最小サイズを設定します。 値を小さくするとキャッシュが生成されるレコードが増え検索が高速化しますが、キャッシュの読み込みと保存が遅くなります。. -settings_duplicates_prehash_checkbutton_tooltip = +settings_duplicates_prehash_checkbutton_tooltip = プレハッシュ(ファイルの一部から計算したハッシュ) のキャッシュを有効にし、重複していない検索結果をより早く捨てられるようにします。 いくつかの場面では低速化の要因になりうるので、この機能はデフォルトでは無効になっています。 @@ -407,7 +407,7 @@ settings_reset_button = 設定をリセット ## Opening cache/config folders -settings_folder_cache_open_tooltip = +settings_folder_cache_open_tooltip = キャッシュを持つtxtファイルが保存されているフォルダを開きます。 これらのファイルを変更すると不正な結果を表示することがありますが、パスなどを変更することで、大量のファイルを別の場所に移動する際の時間を短縮することができます。 @@ -415,7 +415,7 @@ settings_folder_cache_open_tooltip = このファイルをコンピュータ間でコピーすることで、再度ファイルをスキャンするときの時間を節約できます(もちろん、コンピュータのディレクトリ構造が似ている場合に限り)。 キャッシュに問題がある場合、このファイルを削除することができます。アプリは自動的にそれらを再生成します。. -settings_folder_settings_open_tooltip = +settings_folder_settings_open_tooltip = Czkawkaの設定ファイルが保存されているフォルダを開きます。 警告: 手動で変更すると、ワークフローが壊れる可能性があります。. diff --git a/czkawka_gui/i18n/ko/czkawka_gui.ftl b/czkawka_gui/i18n/ko/czkawka_gui.ftl index ab1d99a79..665e54377 100644 --- a/czkawka_gui/i18n/ko/czkawka_gui.ftl +++ b/czkawka_gui/i18n/ko/czkawka_gui.ftl @@ -8,18 +8,18 @@ general_ok_button = 확인 general_close_button = 닫기 # Krokiet info dialog krokiet_info_title = Introducing Krokiet - 새로운 버전의 Czkawka -krokiet_info_message = - 크로키트는 Czkawka GTK GUI의 새로운, 개선된, 더 빠르고 더 안정적인 버전입니다! - - 실행하기가 더 쉽고 시스템 변경에 더 강하며, 대부분의 시스템에서 기본적으로 사용 가능한 핵심 라이브러리에만 의존합니다. - - 크로키트는 Czkawka에 없는 기능도 제공하며, 비디오 비교 모드에서 미리보기, EXIF 클리너, 파일 이동/복사/삭제 진행률 또는 확장된 정렬 옵션 등이 포함됩니다. - - 사용해 보고 차이점을 확인해 보세요! - - Czkawka는 저로부터 버그 수정 및 소규모 업데이트를 계속 받겠지만, 모든 새로운 기능은 크로키트에만 개발되며, 누구나 새로운 기능 추가, 누락된 모드 확장 또는 Czkawka 추가 확장을 자유롭게 기여할 수 있습니다. - - PS: 이 메시지는 한 번만 표시되어야 합니다. 다시 나타나면 CZKAWKA_DONT_ANNOY_ME 환경 변수를 비어 있는 값이 아닌 값으로 설정하십시오. +krokiet_info_message = + 크로키트는 Czkawka GTK GUI의 새로운, 개선된, 더 빠르고 더 안정적인 버전입니다! + + 실행하기가 더 쉽고 시스템 변경에 더 강하며, 대부분의 시스템에서 기본적으로 사용 가능한 핵심 라이브러리에만 의존합니다. + + 크로키트는 Czkawka에 없는 기능도 제공하며, 비디오 비교 모드에서 미리보기, EXIF 클리너, 파일 이동/복사/삭제 진행률 또는 확장된 정렬 옵션 등이 포함됩니다. + + 사용해 보고 차이점을 확인해 보세요! + + Czkawka는 저로부터 버그 수정 및 소규모 업데이트를 계속 받겠지만, 모든 새로운 기능은 크로키트에만 개발되며, 누구나 새로운 기능 추가, 누락된 모드 확장 또는 Czkawka 추가 확장을 자유롭게 기여할 수 있습니다. + + PS: 이 메시지는 한 번만 표시되어야 합니다. 다시 나타나면 CZKAWKA_DONT_ANNOY_ME 환경 변수를 비어 있는 값이 아닌 값으로 설정하십시오. # Main window music_title_checkbox = 제목 music_artist_checkbox = 아티스트 @@ -160,7 +160,7 @@ main_check_box_broken_files_image = 이미지 main_check_box_broken_files_video = 비디오 main_check_box_broken_files_video_tooltip = ffmpeg/ffprobe를 사용하여 비디오 파일 유효성 검사합니다. 상당히 느리고 파일이 잘 재생되더라도 형식에 민감한 오류를 감지할 수 있습니다. check_button_general_same_size = 같은 파일크기 무시 -check_button_general_same_size_tooltip = 동일한 크기의 파일은 결과에서 제외합니다 - 대부분 1:1 중복일 가능성이 높습니다 +check_button_general_same_size_tooltip = 동일한 크기의 파일은 결과에서 제외합니다 – 대부분 1:1 중복일 가능성이 높습니다 main_label_size_bytes_tooltip = 스캔할 파일의 크기입니다 # Upper window upper_tree_view_included_folder_column_title = 검색할 폴더 @@ -173,7 +173,7 @@ upper_remove_included_button = 제거 upper_manual_add_excluded_button = 수동 추가 upper_add_excluded_button = 추가 upper_remove_excluded_button = 제거 -upper_manual_add_included_button_tooltip = +upper_manual_add_included_button_tooltip = 직접 검색할 경로를 입력합니다. 여러 경로를 입력하고자 한다면, ';'로 구분하세요. @@ -181,7 +181,7 @@ upper_manual_add_included_button_tooltip = '/home/roman;/home/rozkaz' 를 입력하면, '/home/roman'와 '/home/rozkaz'가 추가됩니다 upper_add_included_button_tooltip = 검색할 디렉터리를 추가합니다. upper_remove_included_button_tooltip = 검색할 디렉터리에서 제거합니다. -upper_manual_add_excluded_button_tooltip = +upper_manual_add_excluded_button_tooltip = 직접 제외할 경로를 입력합니다. 여러 경로를 입력하고자 한다면, ';'로 구분하세요. @@ -202,9 +202,9 @@ upper_excluded_extensions_tooltip = 검사에서 무시될 비활성화된 파일 목록입니다. 허용된 확장자와 비활성화된 확장자를 둘 다 사용할 경우, 비활성화된 확장자가 더 높은 우선순위를 가지므로 해당 파일은 검사되지 않습니다. -upper_excluded_items_tooltip = - 제외 항목은 * 와일드카드와 쉼표로 구분되어야 합니다. - 이는 Excluded Paths 보다 느리므로 주의해서 사용하십시오. +upper_excluded_items_tooltip = + 제외 항목은 * 와일드카드와 쉼표로 구분되어야 합니다. + 이는 Excluded Paths 보다 느리므로 주의해서 사용하십시오. upper_excluded_items = 제외할 항목: upper_allowed_extensions = 허용할 확장자: upper_excluded_extensions = 비활성 확장자: @@ -222,12 +222,12 @@ 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 = +popover_custom_path_check_button_entry_tooltip = 경로를 기준으로 선택합니다. 사용 예시: '/home/pimpek/rzecz.txt' 파일을 선택하려면 '/home/pim*'와 같이 입력하세요 -popover_custom_name_check_button_entry_tooltip = +popover_custom_name_check_button_entry_tooltip = 파일 이름을 기준으로 선택합니다. 사용 예시: @@ -245,7 +245,7 @@ popover_custom_case_sensitive_check_button_tooltip = 대소문자를 구분할 지 여부를 선택합니다. 만일 꺼져 있으면, '/home/*'은 '/HoMe/roman'과 '/home/roman'를 모두 선택합니다. -popover_custom_not_all_check_button_tooltip = +popover_custom_not_all_check_button_tooltip = 한 그룹에 있는 모든 항목이 선택되는 것을 방지합니다. 이 옵션은 기본적으로 켜져 있습니다. 대부분의 경우, 원본과 중복 파일을 전부 선택하여 삭제하는 것은 원하지 않는 동작일 것입니다. 즉 각 그룹에서 최소한 하나의 항목은 삭제하지 않고 남겨놓게 됩니다. @@ -334,7 +334,7 @@ settings_use_rust_preview_tooltip = 이 옵션을 끄면 일부 이미지 미리보기가 로드되지 않을 수 있습니다. settings_label_restart = 이 설정을 적용하려면 프로그램을 재시작해야 합니다! settings_ignore_other_filesystems = 다른 파일시스템 무시(Linux에서만) -settings_ignore_other_filesystems_tooltip = +settings_ignore_other_filesystems_tooltip = 검색할 디렉터리와 파일시스템이 다른 디렉터리를 무시합니다. Linux의 find 명령에서 -xdev 옵션을 준 것과 동일하게 동작합니다 @@ -383,7 +383,7 @@ settings_multiple_clear_cache_button_tooltip = 더 이상 존재하지 않는 파일을 캐시에서 제거합니다. 캐시를 자동으로 정리하는 옵션이 꺼져 있을 때만 사용하세요. settings_multiple_clear_cache_button = 캐시에서 오래된 결과 제거. - + ## Duplicates settings_duplicates_hide_hard_link_button_tooltip = diff --git a/czkawka_gui/i18n/nl/czkawka_gui.ftl b/czkawka_gui/i18n/nl/czkawka_gui.ftl index 43301772d..bd4270c72 100644 --- a/czkawka_gui/i18n/nl/czkawka_gui.ftl +++ b/czkawka_gui/i18n/nl/czkawka_gui.ftl @@ -8,18 +8,18 @@ general_ok_button = OK general_close_button = Afsluiten # Krokiet info dialog krokiet_info_title = Introductie van Krokiet - Nieuwe versie van Czkawka -krokiet_info_message = - Krokiet is de nieuwe, verbeterde, snellere en betrouwbaardere versie van de Czkawka GTK GUI! - - Het is eenvoudiger te draaien en robuuster tegen systeemwijzigingen, omdat het alleen afhankelijk is van kernbibliotheken die standaard op de meeste systemen beschikbaar zijn. - - Krokiet brengt ook functies die Czkawka mist, waaronder thumbnails in video vergelijking modus, een EXIF cleaner, bestand verplaatsen/kopieer/verwijderen voortgang of uitgebreide sorteeropties. - - Probeer het uit en zie het verschil! - - Czkawka zal blijven ontvangen bugfixes en kleine updates van mij, maar alle nieuwe functies zullen exclusief voor Krokiet worden ontwikkeld, en iedereen is vrij om nieuwe functies toe te voegen, ontbrekende modi uit te breiden of Czkawka verder te ontwikkelen. - - PS: Dit bericht zou alleen één keer moeten verschijnen. Als het weer verschijnt, stel dan de CZKAWKA_DONT_ANNOY_ME omgeving variabele in op een niet-lege waarde. +krokiet_info_message = + Krokiet is de nieuwe, verbeterde, snellere en betrouwbaardere versie van de Czkawka GTK GUI! + + Het is eenvoudiger te draaien en robuuster tegen systeemwijzigingen, omdat het alleen afhankelijk is van kernbibliotheken die standaard op de meeste systemen beschikbaar zijn. + + Krokiet brengt ook functies die Czkawka mist, waaronder thumbnails in video vergelijking modus, een EXIF cleaner, bestand verplaatsen/kopieer/verwijderen voortgang of uitgebreide sorteeropties. + + Probeer het uit en zie het verschil! + + Czkawka zal blijven ontvangen bugfixes en kleine updates van mij, maar alle nieuwe functies zullen exclusief voor Krokiet worden ontwikkeld, en iedereen is vrij om nieuwe functies toe te voegen, ontbrekende modi uit te breiden of Czkawka verder te ontwikkelen. + + PS: Dit bericht zou alleen één keer moeten verschijnen. Als het weer verschijnt, stel dan de CZKAWKA_DONT_ANNOY_ME omgeving variabele in op een niet-lege waarde. # Main window music_title_checkbox = Aanspreektitel music_artist_checkbox = Kunstenaar @@ -194,9 +194,9 @@ 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 = - Uitsluitende items moeten * wildcard bevatten en moeten gescheiden worden door komma's. - Dit is langzamer dan Uitsluitingspaden, dus gebruik het voorzichtig. +upper_excluded_items_tooltip = + Uitsluitende items moeten * wildcard bevatten en moeten gescheiden worden door komma's. + Dit is langzamer dan Uitsluitingspaden, dus gebruik het voorzichtig. upper_excluded_items = Uitgesloten artikelen: upper_allowed_extensions = Toegestane extensies: upper_excluded_extensions = Uitgeschakelde extensies: diff --git a/czkawka_gui/i18n/no/czkawka_gui.ftl b/czkawka_gui/i18n/no/czkawka_gui.ftl index a8f54c2d3..6dab3f830 100644 --- a/czkawka_gui/i18n/no/czkawka_gui.ftl +++ b/czkawka_gui/i18n/no/czkawka_gui.ftl @@ -8,18 +8,18 @@ general_ok_button = Ok general_close_button = Lukk # Krokiet info dialog krokiet_info_title = Introduserer Krokiet - Ny versjon av Czkawka -krokiet_info_message = - Krokiet er den nye, forbedrede, raskere og mer pålitelige versjonen av Czkawka GTK GUI! - - Det er lettere å kjøre og mer motstandsdyktig mot systemendringer, siden det bare er avhengig av kjernelibbrer som er tilgjengelige på de fleste systemer som standard. - - Krokiet bringer også funksjoner som Czkawka mangler, inkludert forhåndsvisninger i videoj sammenligningsmodus, en EXIF-renser, fil flytt/kopier/slett fremdrift eller utvidede sorteringsalternativer. - - Prøv det og se forskjellen! - - Czkawka vil fortsette å motta feilrettinger og mindre oppdateringer fra meg, men alle nye funksjoner vil bli utviklet eksklusivt for Krokiet, og alle er fri til å bidra med nye funksjoner, legge til manglende moduser eller utvide Czkawka videre. - - PS: Denne meldingen skal bare vises én gang. Hvis den dukker opp igjen, sett CZKAWKA_DONT_ANNOY_ME miljøvariabelen til en hvilken som helst ikke-tom verdi. +krokiet_info_message = + Krokiet er den nye, forbedrede, raskere og mer pålitelige versjonen av Czkawka GTK GUI! + + Det er lettere å kjøre og mer motstandsdyktig mot systemendringer, siden det bare er avhengig av kjernelibbrer som er tilgjengelige på de fleste systemer som standard. + + Krokiet bringer også funksjoner som Czkawka mangler, inkludert forhåndsvisninger i videoj sammenligningsmodus, en EXIF-renser, fil flytt/kopier/slett fremdrift eller utvidede sorteringsalternativer. + + Prøv det og se forskjellen! + + Czkawka vil fortsette å motta feilrettinger og mindre oppdateringer fra meg, men alle nye funksjoner vil bli utviklet eksklusivt for Krokiet, og alle er fri til å bidra med nye funksjoner, legge til manglende moduser eller utvide Czkawka videre. + + PS: Denne meldingen skal bare vises én gang. Hvis den dukker opp igjen, sett CZKAWKA_DONT_ANNOY_ME miljøvariabelen til en hvilken som helst ikke-tom verdi. # Main window music_title_checkbox = Tittel music_artist_checkbox = Kunstner @@ -194,9 +194,9 @@ 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 = - Uekskluderte elementer må inneholde * wildcard og skal være separert med komma. - Dette er tregere enn Excluded Paths, så bruk det forsiktig. +upper_excluded_items_tooltip = + Uekskluderte elementer må inneholde * wildcard og skal være separert med komma. + Dette er tregere enn Excluded Paths, så bruk det forsiktig. upper_excluded_items = Ekskluderte elementer: upper_allowed_extensions = Tillatte utvidelser: upper_excluded_extensions = Deaktiverte utvidelser: diff --git a/czkawka_gui/i18n/pl/czkawka_gui.ftl b/czkawka_gui/i18n/pl/czkawka_gui.ftl index b820ecebb..a997a60fe 100644 --- a/czkawka_gui/i18n/pl/czkawka_gui.ftl +++ b/czkawka_gui/i18n/pl/czkawka_gui.ftl @@ -8,18 +8,18 @@ general_ok_button = Ok general_close_button = Zamknij # Krokiet info dialog krokiet_info_title = Wprowadzamy Krokiet - Nowa wersja Czkawki -krokiet_info_message = - Krokiet to nowa, ulepszona, szybsza i bardziej niezawodna wersja Czkawki GTK! - - Jest łatwiejszy w uruchomieniu i bardziej odporny na zmiany w systemie, ponieważ polega tylko na podstawowych bibliotekach dostępnych domyślnie na większości systemów. - - Krokiet oferuje również funkcje, których brakuje Czkawce, w tym miniaturki w trybie porównania wideo, czyszczenie EXIF, wyświetlanie postępu kopiowania/przenoszenia/usuwania plików czy rozszerzone opcje sortowania. - - Wypróbuj go i zobacz różnicę! - - Czkawka będzie nadal otrzymywać poprawki błędów i drobne aktualizacje z mojej strony, ale wszystkie nowe funkcje będą rozwijane wyłącznie dla Krokieta, lecz zachęcam każdego chętnego by jeśli chce, to by implementował na własną rękę nowe funkcje czy brakujące tryby w Czkawce. - - PS: Ta wiadomość powinna pojawić się tylko raz. Jeśli pojawia się ponownie, ustaw zmienną środowiskową CZKAWKA_DONT_ANNOY_ME na dowolną niepustą wartość. +krokiet_info_message = + Krokiet to nowa, ulepszona, szybsza i bardziej niezawodna wersja Czkawki GTK! + + Jest łatwiejszy w uruchomieniu i bardziej odporny na zmiany w systemie, ponieważ polega tylko na podstawowych bibliotekach dostępnych domyślnie na większości systemów. + + Krokiet oferuje również funkcje, których brakuje Czkawce, w tym miniaturki w trybie porównania wideo, czyszczenie EXIF, wyświetlanie postępu kopiowania/przenoszenia/usuwania plików czy rozszerzone opcje sortowania. + + Wypróbuj go i zobacz różnicę! + + Czkawka będzie nadal otrzymywać poprawki błędów i drobne aktualizacje z mojej strony, ale wszystkie nowe funkcje będą rozwijane wyłącznie dla Krokieta, lecz zachęcam każdego chętnego by jeśli chce, to by implementował na własną rękę nowe funkcje czy brakujące tryby w Czkawce. + + PS: Ta wiadomość powinna pojawić się tylko raz. Jeśli pojawia się ponownie, ustaw zmienną środowiskową CZKAWKA_DONT_ANNOY_ME na dowolną niepustą wartość. # Main window music_title_checkbox = Tytuł music_artist_checkbox = Wykonawca @@ -194,9 +194,9 @@ 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 * i powinny być oddzielone przecinkami. - To działa wolniej niż ustawianie wykluczonych katalogow i plików, więc używaj tego z rozwagą. +upper_excluded_items_tooltip = + Wykluczone elementy muszą zawierać znak * i powinny być oddzielone przecinkami. + To działa wolniej niż ustawianie wykluczonych katalogow i plików, więc używaj tego z rozwagą. upper_excluded_items = Ignorowane Obiekty: upper_allowed_extensions = Dozwolone Rozszerzenia: upper_excluded_extensions = Wyłączone rozszerzenia: @@ -293,7 +293,7 @@ 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 = Zatrzymaj +progress_stop_button = Stop progress_stop_additional_message = Przerywanie skanowania # About Window about_repository_button_tooltip = Link do repozytorium z kodem źródłowym. diff --git a/czkawka_gui/i18n/pt-BR/czkawka_gui.ftl b/czkawka_gui/i18n/pt-BR/czkawka_gui.ftl index 37abfd36b..7e5d4869c 100644 --- a/czkawka_gui/i18n/pt-BR/czkawka_gui.ftl +++ b/czkawka_gui/i18n/pt-BR/czkawka_gui.ftl @@ -43,7 +43,7 @@ music_comparison_checkbox_tooltip = Świędziżłób --- Świędziżłób (Remix Lato 2021) (Santuário --- O santuário foi remixado no verão de 2021) duplicate_case_sensitive_name = Diferenciar as letras maiúsculas das minúsculas -duplicate_case_sensitive_name_tooltip = +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 das minúsculas. Por exemplo, pagar <-> Pagar @@ -156,7 +156,7 @@ upper_remove_included_button = Remover upper_manual_add_excluded_button = Adicionar manualmente upper_add_excluded_button = Adicionar upper_remove_excluded_button = Remover -upper_manual_add_included_button_tooltip = +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 ‘ ; ’. @@ -164,7 +164,7 @@ upper_manual_add_included_button_tooltip = Por exemplo, ao utilizar ‘/home/roman;/home/rozkaz’ irá adicionar os 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 = +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 ‘ ; ’. @@ -185,9 +185,9 @@ upper_excluded_extensions_tooltip = Lista dos 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 = - Itens excluídos devem conter * wildcard e devem ser separados por vírgulas. - Isto é mais lento que Excluídas Caminhos, portanto use-o com cuidado. +upper_excluded_items_tooltip = + Itens excluídos devem conter * wildcard e devem ser separados por vírgulas. + Isto é mais lento que Excluídas Caminhos, portanto use-o com cuidado. upper_excluded_items = Itens ignorados: upper_allowed_extensions = Extensões permitidas: upper_excluded_extensions = Extensões ignoradas: @@ -514,8 +514,3 @@ preview_image_opening_failure = Ocorreu uma falha ao abrir a imagem ‘{ $name } compare_groups_number = Os ‘{ $current_group }’ de ‘{ $all_groups }’ grupos possuem ‘{ $images_in_group }’ imagens compare_move_left_button = E compare_move_right_button = D - -progress_scanning_empty_folders = - {$pasta_numero -> - [um] Pasta {$folder_number} escaneada - *[outro] Pastas {$folder_number} escaneadas} \ No newline at end of file diff --git a/czkawka_gui/i18n/pt-PT/czkawka_gui.ftl b/czkawka_gui/i18n/pt-PT/czkawka_gui.ftl index 60176cba6..48615123b 100644 --- a/czkawka_gui/i18n/pt-PT/czkawka_gui.ftl +++ b/czkawka_gui/i18n/pt-PT/czkawka_gui.ftl @@ -8,18 +8,18 @@ general_ok_button = Ok general_close_button = Fechar # Krokiet info dialog krokiet_info_title = Apresentando Krokiet - Nova versão do Czkawka -krokiet_info_message = - Krokiet é a nova, melhorada, mais rápida e mais confiável versão da interface gráfica Czkawka GTK! - - É mais fácil de executar e mais resistente a alterações do sistema, pois depende apenas de bibliotecas principais disponíveis na maioria dos sistemas por padrão. - - Krokiet também traz recursos que a Czkawka não possui, incluindo miniaturas no modo de comparação de vídeo, um limpador EXIF, opções de progresso de mover/copiar/excluir arquivos ou opções de classificação estendidas. - - Experimente e veja a diferença! - - A Czkawka continuará a receber correções de bugs e atualizações menores de mim, mas todos os novos recursos serão desenvolvidos exclusivamente para o Krokiet e qualquer pessoa é livre para contribuir com novos recursos, adicionar modos ausentes ou estender ainda mais a Czkawka. - - PS: Esta mensagem deve aparecer apenas uma vez. Se ela aparecer novamente, defina a variável de ambiente CZKAWKA_DONT_ANNOY_ME para qualquer valor não vazio. +krokiet_info_message = + Krokiet é a nova, melhorada, mais rápida e mais confiável versão da interface gráfica Czkawka GTK! + + É mais fácil de executar e mais resistente a alterações do sistema, pois depende apenas de bibliotecas principais disponíveis na maioria dos sistemas por padrão. + + Krokiet também traz recursos que a Czkawka não possui, incluindo miniaturas no modo de comparação de vídeo, um limpador EXIF, opções de progresso de mover/copiar/excluir arquivos ou opções de classificação estendidas. + + Experimente e veja a diferença! + + A Czkawka continuará a receber correções de bugs e atualizações menores de mim, mas todos os novos recursos serão desenvolvidos exclusivamente para o Krokiet e qualquer pessoa é livre para contribuir com novos recursos, adicionar modos ausentes ou estender ainda mais a Czkawka. + + PS: Esta mensagem deve aparecer apenas uma vez. Se ela aparecer novamente, defina a variável de ambiente CZKAWKA_DONT_ANNOY_ME para qualquer valor não vazio. # Main window music_title_checkbox = Título music_artist_checkbox = Artista @@ -192,9 +192,9 @@ 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 * wildcard e devem ser separados por vírgulas. - Este é mais lento que Excluídas Caminhos, portanto use-o com cuidado. +upper_excluded_items_tooltip = + Itens excluídos devem conter * wildcard e devem ser separados por vírgulas. + Este é mais lento que Excluídas Caminhos, portanto use-o com cuidado. upper_excluded_items = Itens excluídos: upper_allowed_extensions = Extensões permitidas: upper_excluded_extensions = Extensões desabilitadas: diff --git a/czkawka_gui/i18n/ro/czkawka_gui.ftl b/czkawka_gui/i18n/ro/czkawka_gui.ftl index 2ecfb925e..71861569c 100644 --- a/czkawka_gui/i18n/ro/czkawka_gui.ftl +++ b/czkawka_gui/i18n/ro/czkawka_gui.ftl @@ -8,18 +8,18 @@ general_ok_button = Ok general_close_button = Inchide # Krokiet info dialog krokiet_info_title = Introducerea lui Krokiet - Noua versiune a Czkawka -krokiet_info_message = - Krokiet este noua, îmbunătățită, mai rapidă și mai fiabilă versiune a Czkawka GTK GUI! - - Este mai ușor de rulat și mai rezistent la modificările sistemului, deoarece depinde doar de bibliotecile de bază disponibile pe majoritatea sistemelor implicit. - - Krokiet aduce, de asemenea, funcții pe care Czkawka nu le are, inclusiv miniaturile în modul de comparare video, un curățător EXIF, progresul mutării/copierii/ștergerii fișierelor sau opțiuni extinse de sortare. - - Îl testează și vezi diferența! - - Czkawka va continua să primească corecții de erori și actualizări minore de la mine, dar toate noile funcții vor fi dezvoltate exclusiv pentru Krokiet, iar oricine este liber să contribuie cu noi funcții, să adauge moduri lipsă sau să extindă Czkawka în continuare. - - PS: Acest mesaj ar trebui să apară doar o dată. Dacă apare din nou, setați variabila de mediu CZKAWKA_DONT_ANNOY_ME la orice valoare non-goalomptă. +krokiet_info_message = + Krokiet este noua, îmbunătățită, mai rapidă și mai fiabilă versiune a Czkawka GTK GUI! + + Este mai ușor de rulat și mai rezistent la modificările sistemului, deoarece depinde doar de bibliotecile de bază disponibile pe majoritatea sistemelor implicit. + + Krokiet aduce, de asemenea, funcții pe care Czkawka nu le are, inclusiv miniaturile în modul de comparare video, un curățător EXIF, progresul mutării/copierii/ștergerii fișierelor sau opțiuni extinse de sortare. + + Îl testează și vezi diferența! + + Czkawka va continua să primească corecții de erori și actualizări minore de la mine, dar toate noile funcții vor fi dezvoltate exclusiv pentru Krokiet, iar oricine este liber să contribuie cu noi funcții, să adauge moduri lipsă sau să extindă Czkawka în continuare. + + PS: Acest mesaj ar trebui să apară doar o dată. Dacă apare din nou, setați variabila de mediu CZKAWKA_DONT_ANNOY_ME la orice valoare non-goalomptă. # Main window music_title_checkbox = Titlu music_artist_checkbox = Artist @@ -194,9 +194,9 @@ 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 = - Elemente excluse trebuie să conțină * wildcard și să fie separate prin virgulă. - Aceasta este mai lentă decât Excluded Paths, deci folosiți-o cu grijă. +upper_excluded_items_tooltip = + Elemente excluse trebuie să conțină * wildcard și să fie separate prin virgulă. + Aceasta este mai lentă decât Excluded Paths, deci folosiți-o cu grijă. upper_excluded_items = Elemente excluse: upper_allowed_extensions = Extensii permise: upper_excluded_extensions = Extensii dezactivate: @@ -279,7 +279,7 @@ 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 = +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. diff --git a/czkawka_gui/i18n/ru/czkawka_gui.ftl b/czkawka_gui/i18n/ru/czkawka_gui.ftl index e5dd9bfb7..6d9d24e7d 100644 --- a/czkawka_gui/i18n/ru/czkawka_gui.ftl +++ b/czkawka_gui/i18n/ru/czkawka_gui.ftl @@ -8,18 +8,18 @@ general_ok_button = ОК general_close_button = Закрыть # Krokiet info dialog krokiet_info_title = Представляем Krokiet - новая версия Czkawka -krokiet_info_message = - Крокиет - это новая, улучшенная, более быстрая и надежная версия Czkawka GTK GUI! - - Его проще запускать и он более устойчив к изменениям системы, так как он зависит только от основных библиотек, доступных по умолчанию на большинстве систем. - - Крокиет также предоставляет функции, которых нет в Czkawka, включая миниатюры в режиме сравнения видео, EXIF-очиститель, прогресс перемещения/копирования/удаления файлов или расширенные возможности сортировки. - - Попробуйте сами и посмотрите разницу! - - Czkawka продолжит получать исправления ошибок и небольшие обновления от меня, но все новые функции будут разрабатываться исключительно для Крокиета, и любой может внести свой вклад, добавив новые функции, расширив режимы или дополнительно развив Czkawka. - - P.S.: Это сообщение должно появиться только один раз. Если оно снова появляется, установите переменную CZKAWKA_DONT_ANNOY_ME в любое непустое значение. +krokiet_info_message = + Крокиет – это новая, улучшенная, более быстрая и надежная версия Czkawka GTK GUI! + + Его проще запускать и он более устойчив к изменениям системы, так как он зависит только от основных библиотек, доступных по умолчанию на большинстве систем. + + Крокиет также предоставляет функции, которых нет в Czkawka, включая миниатюры в режиме сравнения видео, EXIF-очиститель, прогресс перемещения/копирования/удаления файлов или расширенные возможности сортировки. + + Попробуйте сами и посмотрите разницу! + + Czkawka продолжит получать исправления ошибок и небольшие обновления от меня, но все новые функции будут разрабатываться исключительно для Крокиета, и любой может внести свой вклад, добавив новые функции, расширив режимы или дополнительно развив Czkawka. + + P.S.: Это сообщение должно появиться только один раз. Если оно снова появляется, установите переменную CZKAWKA_DONT_ANNOY_ME в любое непустое значение. # Main window music_title_checkbox = Заголовок music_artist_checkbox = Исполнитель @@ -54,7 +54,7 @@ music_comparison_checkbox_tooltip = Świędziżłób --- Świędziżłób (Remix Lato 2021) duplicate_case_sensitive_name = С учётом регистра -duplicate_case_sensitive_name_tooltip = +duplicate_case_sensitive_name_tooltip = При включённой опции записи группируются, только если у них полностью совпадают имена с точностью до каждого символа. Например, «ХИТ Дискотека» не совпадёт с «хит дискотека». При отключённой опции записи группируются вне зависимости от того, заглавные или строчные буквы использовались при написании. Например, «ХИТ Дискотека», «хит дискотека», «хИт ДиСкОтЕКа» будут эквивалентны @@ -194,9 +194,9 @@ upper_excluded_extensions_tooltip = Список отключенных файлов, которые будут игнорироваться в сканировании. При использовании разрешенных и отключенных расширений этот файл имеет более высокий приоритет, поэтому файл не будет проверяться. -upper_excluded_items_tooltip = - Исключенные элементы должны содержать * wildcard и должны быть разделены запятыми. - Это медленнее, чем Excluded Paths, поэтому используйте его осторожно. +upper_excluded_items_tooltip = + Исключенные элементы должны содержать * wildcard и должны быть разделены запятыми. + Это медленнее, чем Excluded Paths, поэтому используйте его осторожно. upper_excluded_items = Исключённые элементы: upper_allowed_extensions = Допустимые расширения: upper_excluded_extensions = Отключенные расширения: diff --git a/czkawka_gui/i18n/sv-SE/czkawka_gui.ftl b/czkawka_gui/i18n/sv-SE/czkawka_gui.ftl index fb29becba..098ccb437 100644 --- a/czkawka_gui/i18n/sv-SE/czkawka_gui.ftl +++ b/czkawka_gui/i18n/sv-SE/czkawka_gui.ftl @@ -7,19 +7,19 @@ window_compare_images = Jämför bilder general_ok_button = Ok general_close_button = Stäng # Krokiet info dialog -krokiet_info_title = Införande av Krokiet - Ny version av Czkawka -krokiet_info_message = - Stödet är den nya, förbättrade, snabbare och mer pålitliga versionen av Czkawka GTK GUI! - - Det är lättare att köra och mer motståndskraftigt mot systemändringar, eftersom det bara förlitar sig på kärnbibliotek som finns tillgängliga på de flesta system som standard. - - Stödet medför också funktioner som Czkawka saknar, inklusive miniatyrbilder i videojämförelsetillstånd, en EXIF-renare, filflytt/kopiera/ta bort-framsteg eller utökade sorteringsalternativ. - - Prova det och se skillnaden! - - Czkawka kommer fortsätta att få buggfixar och mindre uppdateringar från mig, men alla nya funktioner kommer att utvecklas exklusivt för Stödet, och vem som helst är fri att bidra med nya funktioner, lägga till saknade lägen eller utöka Czkawka vidare. - - PS: Detta meddelande bör bara visas en gång. Om det visas igen, sätt miljökvariabeln CZKAWKA_DONT_ANNOY_ME till ett värde som inte är tomt. +krokiet_info_title = Införande av Krokiet – Ny version av Czkawka +krokiet_info_message = + Stödet är den nya, förbättrade, snabbare och mer pålitliga versionen av Czkawka GTK GUI! + + Det är lättare att köra och mer motståndskraftigt mot systemändringar, eftersom det bara förlitar sig på kärnbibliotek som finns tillgängliga på de flesta system som standard. + + Stödet medför också funktioner som Czkawka saknar, inklusive miniatyrbilder i videojämförelsetillstånd, en EXIF-renare, filflytt/kopiera/ta bort-framsteg eller utökade sorteringsalternativ. + + Prova det och se skillnaden! + + Czkawka kommer fortsätta att få buggfixar och mindre uppdateringar från mig, men alla nya funktioner kommer att utvecklas exklusivt för Stödet, och vem som helst är fri att bidra med nya funktioner, lägga till saknade lägen eller utöka Czkawka vidare. + + PS: Detta meddelande bör bara visas en gång. Om det visas igen, sätt miljökvariabeln CZKAWKA_DONT_ANNOY_ME till ett värde som inte är tomt. # Main window music_title_checkbox = Titel music_artist_checkbox = Kunstnär @@ -194,9 +194,9 @@ 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 = - Uteslutna objekt måste innehålla * wildcard och ska separeras med komma. - Detta är långsammare än Exkluderade Sökvägar, så använd det försiktigt. +upper_excluded_items_tooltip = + Uteslutna objekt måste innehålla * wildcard och ska separeras med komma. + Detta är långsammare än Exkluderade Sökvägar, så använd det försiktigt. upper_excluded_items = Exkluderade objekt: upper_allowed_extensions = Tillåtna tillägg: upper_excluded_extensions = Inaktiverade tillägg: diff --git a/czkawka_gui/i18n/tr/czkawka_gui.ftl b/czkawka_gui/i18n/tr/czkawka_gui.ftl index 10a55ab00..08028b807 100644 --- a/czkawka_gui/i18n/tr/czkawka_gui.ftl +++ b/czkawka_gui/i18n/tr/czkawka_gui.ftl @@ -8,18 +8,18 @@ general_ok_button = Tamam general_close_button = Kapat # Krokiet info dialog krokiet_info_title = Krokiet - Yeni versiyon Czkawka -krokiet_info_message = - Krokiet, Czkawka GTK GUI’nin yeni, geliştirilmiş, daha hızlı ve daha güvenilir versiyonudur! - - Çalıştırması daha kolay ve sistem değişikliklerine karşı daha dirençlidir, çünkü çoğu sistemde varsayılan olarak bulunan temel kütüphanelere dayanır. - - Krokiet ayrıca, Czkawka’da bulunmayan özellikler getirir, örneğin video karşılaştırma modunda alıştırmalar, bir EXIF temizleyici, dosya taşıma/kopyalama/silme ilerleme veya gelişmiş sıralama seçenekleri. - - Deneyin ve farkı görün! - - Czkawka’nın benim tarafımdan düzeltmeler ve küçük güncellemeler almaya devam etmesi muhtemeldir, ancak tüm yeni özellikler yalnızca Krokiet için geliştirilecek ve herkes yeni özellikler eklemek, eksik modları tamamlamak veya Czkawka’yı daha da genişletmekten serbestçe yararlanabilir. - - PS: Bu mesaj yalnızca bir kez görünmelidir. Tekrar gösteriliyorsa, CZKAWKA_DONT_ANNOY_ME ortam değişkenini herhangi bir boş olmayan değere ayarlayın. +krokiet_info_message = + Krokiet, Czkawka GTK GUI’nin yeni, geliştirilmiş, daha hızlı ve daha güvenilir versiyonudur! + + Çalıştırması daha kolay ve sistem değişikliklerine karşı daha dirençlidir, çünkü çoğu sistemde varsayılan olarak bulunan temel kütüphanelere dayanır. + + Krokiet ayrıca, Czkawka’da bulunmayan özellikler getirir, örneğin video karşılaştırma modunda alıştırmalar, bir EXIF temizleyici, dosya taşıma/kopyalama/silme ilerleme veya gelişmiş sıralama seçenekleri. + + Deneyin ve farkı görün! + + Czkawka’nın benim tarafımdan düzeltmeler ve küçük güncellemeler almaya devam etmesi muhtemeldir, ancak tüm yeni özellikler yalnızca Krokiet için geliştirilecek ve herkes yeni özellikler eklemek, eksik modları tamamlamak veya Czkawka’yı daha da genişletmekten serbestçe yararlanabilir. + + PS: Bu mesaj yalnızca bir kez görünmelidir. Tekrar gösteriliyorsa, CZKAWKA_DONT_ANNOY_ME ortam değişkenini herhangi bir boş olmayan değere ayarlayın. # Main window music_title_checkbox = Başlık music_artist_checkbox = Sanatçı @@ -153,7 +153,7 @@ 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_min_size = En az main_label_max_size = Maks main_label_shown_files = Gösterilecek Dosya Sayısı: main_label_resize_algorithm = Yeniden boyutlandırma algoritması: @@ -178,7 +178,7 @@ 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 = +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. @@ -187,7 +187,7 @@ upper_manual_add_included_button_tooltip = 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 = +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. @@ -210,9 +210,9 @@ 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çlanan öğeler * joker karakterini içermeli ve virgülle ayrılmalıdır. - Bu, Hariç Yollar'dan daha yavaştır, bu nedenle dikkatli kullanılmalıdır. +upper_excluded_items_tooltip = + Hariçlanan öğeler * joker karakterini içermeli ve virgülle ayrılmalıdır. + Bu, Hariç Yollar'dan daha yavaştır, bu nedenle dikkatli kullanılmalıdır. upper_excluded_items = Hariç Tutulan Öğeler: upper_allowed_extensions = İzin Verilen Uzantılar: upper_excluded_extensions = Devre Dışı Uzantılar: @@ -343,7 +343,7 @@ settings_use_rust_preview_tooltip = 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 = +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 diff --git a/czkawka_gui/i18n/uk/czkawka_gui.ftl b/czkawka_gui/i18n/uk/czkawka_gui.ftl index ae6c925e8..69fa6cc28 100644 --- a/czkawka_gui/i18n/uk/czkawka_gui.ftl +++ b/czkawka_gui/i18n/uk/czkawka_gui.ftl @@ -8,18 +8,18 @@ general_ok_button = Гаразд general_close_button = Закрити # Krokiet info dialog krokiet_info_title = Представляємо Krokiet - Нова версія Czkawka -krokiet_info_message = - Крокієт - це нова, покращена, швидша та надійніша версія Czkawka GTK GUI! - - Він легше запускається та більш стійкий до змін у системі, оскільки покладається лише на основні бібліотеки, які за замовчуванням доступні на більшості систем. - - Крокієт також приносить функції, яких немає в Czkawka, включаючи мініатюри в режимі порівняння відео, EXIF очищувач, прогрес переміщення/копіювання/видалення файлів або розширені опції сортування. - - Спробуйте його та подивіться на різницю! - - Czkawka продовжуватиме отримувати виправлення помилок та невеликі оновлення від мене, але всі нові функції будуть розроблені виключно для Крокієта, і будь-хто вільний пропонувати нові функції, додавати відсутні режими або розширювати Czkawka далі. - - P.S.: Це повідомлення має з’явитися лише один раз. Якщо воно з’являється знову, встановіть змінну середовища CZKAWKA_DONT_ANNOY_ME на будь-яке не порожнє значення. +krokiet_info_message = + Крокієт – це нова, покращена, швидша та надійніша версія Czkawka GTK GUI! + + Він легше запускається та більш стійкий до змін у системі, оскільки покладається лише на основні бібліотеки, які за замовчуванням доступні на більшості систем. + + Крокієт також приносить функції, яких немає в Czkawka, включаючи мініатюри в режимі порівняння відео, EXIF очищувач, прогрес переміщення/копіювання/видалення файлів або розширені опції сортування. + + Спробуйте його та подивіться на різницю! + + Czkawka продовжуватиме отримувати виправлення помилок та невеликі оновлення від мене, але всі нові функції будуть розроблені виключно для Крокієта, і будь-хто вільний пропонувати нові функції, додавати відсутні режими або розширювати Czkawka далі. + + P.S.: Це повідомлення має з’явитися лише один раз. Якщо воно з’являється знову, встановіть змінну середовища CZKAWKA_DONT_ANNOY_ME на будь-яке не порожнє значення. # Main window music_title_checkbox = Найменування music_artist_checkbox = Виконавець @@ -54,7 +54,7 @@ music_comparison_checkbox_tooltip = Świędziżłób --- Świędziżłób (Remix Lato 2021) duplicate_case_sensitive_name = З урахуванням регістру -duplicate_case_sensitive_name_tooltip = +duplicate_case_sensitive_name_tooltip = Коли увімкнено, записи групуються, тільки якщо вони повністю збігаються імена з точністю до кожного символу. Наприклад, «ХІТ Дискотека» не збігається з "хіт дискотека". Коли вимкнено, записи групуються незалежно від того, великі або малі літери використовувалися при написанні. Наприклад, «ХІТ Дискотека», «хіт дискотека», «хІт ДиСкОтЕКа» будуть еквівалентні @@ -73,11 +73,11 @@ duplicate_hash_type_tooltip = duplicate_check_method_tooltip = На цей час Czkawka пропонує три методи пошуку дублікатів: - Ім'я - шукає файли з однаковими іменами. + Ім'я – шукає файли з однаковими іменами. - Розмір - шукає файли однакового розміру. + Розмір – шукає файли однакового розміру. - Хеш - шукає файли з однаковим вмістом. Цей режим хешує файл, а потім порівнює хеш для пошуку дублікатів. Цей режим є найнадійнішим способом пошуку. Додаток активно використовує кеш, тому друге та подальші сканування одних і тих же даних повинні бути набагато швидшими, ніж перше. + Хеш – шукає файли з однаковим вмістом. Цей режим хешує файл, а потім порівнює хеш для пошуку дублікатів. Цей режим є найнадійнішим способом пошуку. Додаток активно використовує кеш, тому друге та подальші сканування одних і тих же даних повинні бути набагато швидшими, ніж перше. image_hash_size_tooltip = Кожне перевірене зображення видає спеціальний хеш, який можна порівнювати один з одним, і невелика різниця між ними означає, що ці зображення є схожими. @@ -194,9 +194,9 @@ upper_excluded_extensions_tooltip = Список вимкнених файлів, які будуть ігноруватися при скануванні. При використанні дозволених і вимкнених розширень, цей файл має більший пріоритет, тому файл не буде відмітити. -upper_excluded_items_tooltip = - Виключені елементи повинні містити * wildcard і повинні бути розділені комами. - Це повільніше, ніж Excluded Paths, тому використовуйте його обережно. +upper_excluded_items_tooltip = + Виключені елементи повинні містити * wildcard і повинні бути розділені комами. + Це повільніше, ніж Excluded Paths, тому використовуйте його обережно. upper_excluded_items = Виключені елементи: upper_allowed_extensions = Дозволені розширення: upper_excluded_extensions = Вимкнені розширення: @@ -448,7 +448,7 @@ progress_creating_video_thumbnails = Створені мініатюри { $file 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_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 = diff --git a/czkawka_gui/i18n/vi/czkawka_gui.ftl b/czkawka_gui/i18n/vi/czkawka_gui.ftl new file mode 100644 index 000000000..c2f15dc8e --- /dev/null +++ b/czkawka_gui/i18n/vi/czkawka_gui.ftl @@ -0,0 +1,530 @@ +# Window titles +window_settings_title = Cài đặt +window_main_title = Czkawka (Hiccup) +window_progress_title = Đang quét +window_compare_images = So sánh hình ảnh +# General +general_ok_button = OK +general_close_button = Đóng +# Krokiet info dialog +krokiet_info_title = Giới thiệu Krokiet - Phiên bản mới của Czkawka +krokiet_info_message = + Krokiet là phiên bản mới, cải tiến, nhanh hơn và đáng tin cậy hơn của giao diện người dùng Czkawka GTK! + + Nó dễ sử dụng hơn và ít bị ảnh hưởng bởi các thay đổi hệ thống hơn, vì nó chỉ phụ thuộc vào các thư viện cốt lõi có sẵn trên hầu hết các hệ thống theo mặc định. + + Krokiet cũng mang đến các tính năng mà Czkawka không có, bao gồm hình thu nhỏ trong chế độ so sánh video, một công cụ làm sạch EXIF, thanh tiến trình cho việc di chuyển/sao chép/xóa tệp hoặc các tùy chọn sắp xếp nâng cao. + + Hãy thử và cảm nhận sự khác biệt! + + Czkawka vẫn sẽ tiếp tục nhận được các bản sửa lỗi và các bản cập nhật nhỏ từ tôi, nhưng tất cả các tính năng mới sẽ chỉ được phát triển dành riêng cho Krokiet, và bất kỳ ai cũng có thể đóng góp các tính năng mới, thêm các chế độ bị thiếu hoặc mở rộng Czkawka hơn nữa. + + P.S: Thông báo này chỉ nên hiển thị một lần. Nếu nó xuất hiện lại, hãy đặt biến môi trường CZKAWKA_DONT_ANNOY_ME thành bất kỳ giá trị nào khác trống. +# Main window +music_title_checkbox = Tiêu đề +music_artist_checkbox = Nghệ sĩ +music_year_checkbox = Năm +music_bitrate_checkbox = Tốc độ bit +music_genre_checkbox = Thể loại +music_length_checkbox = Độ dài +music_comparison_checkbox = So sánh tương đối +music_checking_by_tags = Các thẻ +music_checking_by_content = Nội dung +same_music_seconds_label = Độ dài tối thiểu của đoạn thứ hai +same_music_similarity_label = Sự khác biệt lớn nhất +music_compare_only_in_title_group = So sánh trong các nhóm sách có tựa đề tương tự +music_compare_only_in_title_group_tooltip = + Khi được kích hoạt, các tệp sẽ được nhóm theo tiêu đề và sau đó so sánh với nhau. + + Với 10.000 tệp, thay vì thường phải thực hiện gần 100 triệu lần so sánh, con số này sẽ giảm xuống còn khoảng 20.000 lần so sánh. +same_music_tooltip = + Bạn có thể cấu hình việc tìm kiếm các tệp nhạc tương tự dựa trên nội dung của chúng bằng cách thiết lập: + + - Thời gian tối thiểu của một đoạn nhạc mà sau đó các tệp nhạc có thể được xác định là tương tự. + - Sự khác biệt tối đa giữa hai đoạn nhạc được kiểm tra. + + Điều quan trọng để có kết quả tốt là tìm ra các kết hợp hợp lý của các tham số này, như đã được cung cấp. + + Việc đặt thời gian tối thiểu là 5 giây và sự khác biệt tối đa là 1.0 sẽ tìm kiếm các đoạn nhạc gần như giống hệt nhau trong các tệp. + Ngược lại, việc đặt thời gian là 20 giây và sự khác biệt tối đa là 6.0 hoạt động tốt để tìm các bản remix/phiên bản live, v.v. + + Theo mặc định, mỗi tệp nhạc được so sánh với tất cả các tệp khác, và điều này có thể tốn rất nhiều thời gian khi kiểm tra nhiều tệp, vì vậy thường tốt hơn là sử dụng các thư mục tham chiếu và chỉ định các tệp nào cần được so sánh với nhau (với cùng số lượng tệp, việc so sánh dấu vân tay sẽ nhanh hơn ít nhất 4 lần so với việc không sử dụng thư mục tham chiếu). +music_comparison_checkbox_tooltip = + Nó sẽ tìm kiếm các tệp nhạc tương tự bằng trí tuệ nhân tạo, sử dụng học máy để loại bỏ dấu ngoặc khỏi một cụm từ. Ví dụ, với tùy chọn này được bật, các tệp được đề cập sẽ được coi là trùng lặp: + + Świędziżłób --- Świędziżłób (Remix Lato 2021) +duplicate_case_sensitive_name = Phân biệt chữ hoa chữ thường +duplicate_case_sensitive_name_tooltip = + Khi được bật, chỉ nhóm các bản ghi khi chúng có tên giống hệt nhau, ví dụ: Żołd <-> Żołd. + + Tắt tùy chọn này sẽ nhóm các tên mà không kiểm tra xem mỗi chữ có cùng kích thước hay không, ví dụ: żoŁD <-> Żołd +duplicate_mode_size_name_combo_box = Kích thước và Tên +duplicate_mode_name_combo_box = Tên +duplicate_mode_size_combo_box = Kích thước +duplicate_mode_hash_combo_box = Hash +duplicate_hash_type_tooltip = + Czkawka cung cấp 3 loại hàm băm: + + Blake3: Hàm băm mật mã. Đây là mặc định vì nó rất nhanh. + + CRC32: Hàm băm đơn giản. Hàm này có thể nhanh hơn Blake3, nhưng có thể rất hiếm khi xảy ra xung đột. + + XXH3: Hiệu suất và chất lượng băm tương tự như Blake3 (nhưng không phải là hàm băm mật mã). Do đó, các chế độ này có thể dễ dàng thay đổi cho nhau. +duplicate_check_method_tooltip = + Hiện tại, Czkawka cung cấp ba loại phương pháp để tìm các bản sao trùng lặp: + + Tên: Tìm các tệp có cùng tên. + + Kích thước: Tìm các tệp có cùng kích thước. + + Hash: Tìm các tệp có cùng nội dung. Chế độ này tính toán giá trị hash của tệp và sau đó so sánh giá trị hash này để tìm các bản sao trùng lặp. Đây là cách an toàn nhất để tìm các bản sao trùng lặp. Ứng dụng sử dụng bộ nhớ đệm (cache) rất nhiều, vì vậy các lần quét tiếp theo của cùng một dữ liệu sẽ nhanh hơn đáng kể so với lần quét đầu tiên. +image_hash_size_tooltip = + Mỗi ảnh được kiểm tra sẽ tạo ra một mã hash đặc biệt, có thể so sánh với nhau. Sự khác biệt nhỏ giữa các mã hash này cho thấy các ảnh đó tương tự nhau. + + Kích thước mã hash 8 hoạt động khá tốt để tìm các ảnh chỉ hơi giống với ảnh gốc. Tuy nhiên, với một tập ảnh lớn hơn (>1000 ảnh), điều này có thể tạo ra rất nhiều kết quả sai, vì vậy tôi khuyên bạn nên sử dụng kích thước mã hash lớn hơn trong trường hợp này. + + Kích thước mã hash 16 là giá trị mặc định, và đây là một sự cân bằng tốt giữa việc tìm các ảnh tương tự, ngay cả khi chỉ hơi giống, và giảm thiểu số lượng va chạm mã hash. + + Mã hash 32 và 64 chỉ tìm các ảnh rất giống nhau, và dự kiến sẽ có rất ít hoặc không có kết quả sai (có thể ngoại trừ một số ảnh có kênh alpha). +image_resize_filter_tooltip = + Để tính toán giá trị hash của ảnh, thư viện phải điều chỉnh kích thước ảnh trước. + + Tùy thuộc vào thuật toán được chọn, hình ảnh kết quả được sử dụng để tính toán giá trị hash sẽ có vẻ hơi khác nhau. + + Thuật toán nhanh nhất để sử dụng, nhưng cũng là thuật toán cho kết quả tệ nhất, là thuật toán "Nearest". Nó được bật theo mặc định, vì với kích thước giá trị hash là 16x16, sự khác biệt về chất lượng không thực sự đáng chú ý. + + Với kích thước giá trị hash là 8x8, nên sử dụng một thuật toán khác ngoài "Nearest" để có các nhóm ảnh tốt hơn. +image_hash_alg_tooltip = + Người dùng có thể lựa chọn từ nhiều thuật toán khác nhau để tính toán giá trị băm. + + Mỗi thuật toán có những ưu điểm và nhược điểm riêng, và đôi khi sẽ cho kết quả tốt hơn, đôi khi lại cho kết quả tệ hơn, tùy thuộc vào từng hình ảnh. + + Do đó, để xác định thuật toán tốt nhất cho bạn, cần phải thực hiện kiểm tra thủ công. +big_files_mode_combobox_tooltip = Cho phép tìm kiếm các tập tin có kích thước nhỏ nhất/lớn nhất +big_files_mode_label = Các tệp đã được kiểm tra +big_files_mode_smallest_combo_box = Nhỏ nhất +big_files_mode_biggest_combo_box = Lớn nhất +main_notebook_duplicates = Tệp trùng lặp +main_notebook_empty_directories = Thư mục trống +main_notebook_big_files = Các tập tin lớn +main_notebook_empty_files = Các tệp trống +main_notebook_temporary = Tệp tạm +main_notebook_similar_images = Hình ảnh tương tự +main_notebook_similar_videos = Các video tương tự +main_notebook_same_music = Bản sao nhạc +main_notebook_symlinks = Liên kết tượng trưng không hợp lệ +main_notebook_broken_files = Tệp tin bị lỗi +main_notebook_bad_extensions = Các tiện ích mở rộng kém chất lượng +main_tree_view_column_file_name = Tên tệp +main_tree_view_column_folder_name = Tên thư mục +main_tree_view_column_path = Đường đi +main_tree_view_column_modification = Ngày sửa đổi +main_tree_view_column_size = Kích thước +main_tree_view_column_similarity = Tính tương đồng +main_tree_view_column_dimensions = Kích thước +main_tree_view_column_title = Tiêu đề +main_tree_view_column_artist = Nghệ sĩ +main_tree_view_column_year = Năm +main_tree_view_column_bitrate = Tốc độ bit +main_tree_view_column_length = Độ dài +main_tree_view_column_genre = Thể loại +main_tree_view_column_symlink_file_name = Tên tệp liên kết tượng trưng +main_tree_view_column_symlink_folder = Thư mục liên kết tượng trưng +main_tree_view_column_destination_path = Đường dẫn đích +main_tree_view_column_type_of_error = Loại lỗi +main_tree_view_column_current_extension = Phiên bản mở rộng hiện tại +main_tree_view_column_proper_extensions = Độ mở rộng phù hợp +main_tree_view_column_fps = FPS +main_tree_view_column_codec = Codec +main_label_check_method = Kiểm tra phương pháp +main_label_hash_type = Loại hàm băm +main_label_hash_size = Kích thước hàm +main_label_size_bytes = Kích thước (byte) +main_label_min_size = Min +main_label_max_size = Max +main_label_shown_files = Số lượng tệp hiển thị +main_label_resize_algorithm = Thuật toán thay đổi kích thước +main_label_similarity = Similarity{ " " } +main_check_box_broken_files_audio = Âm thanh +main_check_box_broken_files_pdf = Pdf +main_check_box_broken_files_archive = Lưu trữ +main_check_box_broken_files_image = Hình ảnh +main_check_box_broken_files_video = Video +main_check_box_broken_files_video_tooltip = Sử dụng ffmpeg/ffprobe để kiểm tra tính hợp lệ của các tệp video. Quá trình này khá chậm và có thể phát hiện ra những lỗi nhỏ nhặt ngay cả khi tệp video vẫn hoạt động bình thường. +check_button_general_same_size = Bỏ qua kích thước giống nhau +check_button_general_same_size_tooltip = Bỏ qua các tệp có kích thước giống nhau trong kết quả - thường thì đây là các bản sao giống hệt nhau +main_label_size_bytes_tooltip = Kích thước của các tệp sẽ được sử dụng trong quá trình quét +# Upper window +upper_tree_view_included_folder_column_title = Các thư mục cần tìm kiếm +upper_tree_view_included_reference_column_title = Thư mục tham khảo +upper_recursive_button = Đệ quy +upper_recursive_button_tooltip = Nếu được chọn, tìm kiếm sẽ bao gồm cả các tệp không nằm trực tiếp trong các thư mục đã chọn. +upper_manual_add_included_button = Thêm thủ công +upper_add_included_button = Thêm +upper_remove_included_button = Xóa +upper_manual_add_excluded_button = Thêm thủ công +upper_add_excluded_button = Thêm +upper_remove_excluded_button = Xóa +upper_manual_add_included_button_tooltip = + Thêm tên thư mục để tìm kiếm thủ công. + + Để thêm nhiều đường dẫn cùng lúc, hãy phân tách chúng bằng dấu ";". + + /home/roman;/home/rozkaz sẽ thêm hai thư mục /home/roman và /home/rozkaz +upper_add_included_button_tooltip = Thêm thư mục mới vào danh sách tìm kiếm. +upper_remove_included_button_tooltip = Xóa thư mục khỏi kết quả tìm kiếm. +upper_manual_add_excluded_button_tooltip = + Thêm tên thư mục bị loại trực tiếp. + + Để thêm nhiều đường dẫn cùng lúc, hãy phân tách chúng bằng dấu ";". + + Ví dụ: "/home/roman;/home/krokiet" sẽ thêm hai thư mục /home/roman và /home/keokiet +upper_add_excluded_button_tooltip = Thêm thư mục cần loại trừ khỏi quá trình tìm kiếm. +upper_remove_excluded_button_tooltip = Xóa thư mục khỏi danh sách bị loại trừ. +upper_notebook_items_configuration = Cấu hình mục +upper_notebook_excluded_directories = Các đường dẫn bị loại trừ +upper_notebook_included_directories = Các đường dẫn được bao gồm +upper_allowed_extensions_tooltip = + Các phần mở rộng được phép phải được phân tách bằng dấu phẩy (mặc định là tất cả đều được cho phép). + + Các Macro sau đây, cho phép thêm nhiều phần mở rộng cùng lúc, cũng có sẵn: IMAGE, VIDEO, MUSIC, TEXT. + + Ví dụ sử dụng: ".exe, IMAGE, VIDEO, .rar, 7z" - điều này có nghĩa là các tệp hình ảnh (ví dụ: jpg, png), video (ví dụ: avi, mp4), tệp .exe, .rar và .7z sẽ được quét. +upper_excluded_extensions_tooltip = + Danh sách các tệp bị vô hiệu hóa, những tệp này sẽ bị bỏ qua trong quá trình quét. + + Khi sử dụng cả danh sách các phần mở rộng được phép và danh sách các phần mở rộng bị vô hiệu hóa, danh sách này (danh sách các phần mở rộng bị vô hiệu hóa) sẽ được ưu tiên hơn, do đó tệp sẽ không được kiểm tra. +upper_excluded_items_tooltip = + Các mục bị loại trừ phải chứa ký tự "*wildcard*" và được phân tách bằng dấu phẩy. + Cách này chậm hơn so với "Excluded Paths", vì vậy hãy sử dụng nó một cách cẩn thận. +upper_excluded_items = Các mục bị loại trừ: +upper_allowed_extensions = Các định dạng tệp được phép: +upper_excluded_extensions = Các tiện ích bị tắt: +# Popovers +popover_select_all = Chọn tất cả +popover_unselect_all = Bỏ chọn tất cả +popover_reverse = Chọn ngược +popover_select_all_except_shortest_path = Chọn tất cả các tùy chọn, ngoại trừ "đường đi ngắn nhất" +popover_select_all_except_longest_path = Chọn tất cả các đường dẫn, ngoại trừ đường dẫn dài nhất +popover_select_all_except_oldest = Chọn tất cả trừ mục cũ nhất +popover_select_all_except_newest = Chọn tất cả trừ mục mới nhất +popover_select_one_oldest = Chọn một sản phẩm lâu đời nhất +popover_select_one_newest = Chọn một sản phẩm mới nhất +popover_select_custom = Chọn tùy chỉnh +popover_unselect_custom = Bỏ chọn tùy chỉnh +popover_select_all_images_except_biggest = Chọn tất cả các mục trừ mục lớn nhất +popover_select_all_images_except_smallest = Chọn tất cả các mục trừ mục nhỏ nhất +popover_custom_path_check_button_entry_tooltip = + Chọn các bản ghi theo đường dẫn. + + Ví dụ sử dụng: + Tệp /home/pimpek/rzecz.txt có thể được tìm thấy với đường dẫn /home/pim* +popover_custom_name_check_button_entry_tooltip = + Chọn các bản ghi theo tên tệp. + + Ví dụ sử dụng: + Tệp /usr/ping/pong.txt có thể được tìm thấy với cú pháp *ong* +popover_custom_regex_check_button_entry_tooltip = + Chọn các bản ghi theo biểu thức chính quy (Regex) đã chỉ định. + + Ở chế độ này, văn bản được tìm kiếm là đường dẫn có tên. + + Ví dụ sử dụng: + Tệp "/usr/bin/ziemniak.txt" có thể được tìm thấy bằng biểu thức chính quy "/ziem[a-z]+" + + Điều này sử dụng triển khai biểu thức chính quy mặc định của Rust. Bạn có thể tìm hiểu thêm về nó tại đây: https://docs.rs/regex. +popover_custom_case_sensitive_check_button_tooltip = + Cho phép phát hiện phân biệt chữ hoa chữ thường. + + Khi tính năng này bị tắt, `/home/*` sẽ tìm thấy cả `/HoMe/roman` và `/home/roman`. +popover_custom_not_all_check_button_tooltip = + Ngăn chặn việc chọn tất cả các bản ghi trong một nhóm. + + Tính năng này được bật theo mặc định, vì trong hầu hết các trường hợp, bạn không muốn xóa cả tệp gốc và các bản sao, mà muốn giữ lại ít nhất một tệp. + + CẢNH BÁO: Cài đặt này không hoạt động nếu bạn đã chọn thủ công tất cả các kết quả trong một nhóm. +popover_custom_regex_path_label = Đường dẫn +popover_custom_regex_name_label = Tên +popover_custom_regex_regex_label = Đường dẫn Regex + Tên +popover_custom_case_sensitive_check_button = Phân biệt chữ hoa chữ thường +popover_custom_all_in_group_label = Không chọn tất cả các bản ghi trong nhóm +popover_custom_mode_unselect = Bỏ chọn "Tùy chỉnh" +popover_custom_mode_select = Chọn Tùy chỉnh +popover_sort_file_name = Tên tệp +popover_sort_folder_name = Tên thư mục +popover_sort_full_name = Tên đầy đủ +popover_sort_size = Kích thước +popover_sort_selection = Lựa chọn +popover_invalid_regex = Biểu thức chính quy không hợp lệ +popover_valid_regex = Biểu thức chính quy hợp lệ +# Bottom buttons +bottom_search_button = Tìm kiếm +bottom_select_button = Chọn +bottom_delete_button = Xóa +bottom_save_button = Lưu lại +bottom_symlink_button = Symlink +bottom_hardlink_button = Hardlink +bottom_move_button = Di chuyển +bottom_sort_button = Sắp xếp +bottom_compare_button = So sánh +bottom_search_button_tooltip = Bắt đầu tìm kiếm +bottom_select_button_tooltip = Chọn các bản ghi. Chỉ các tệp/thư mục đã chọn mới có thể được xử lý sau. +bottom_delete_button_tooltip = Xóa các tệp/thư mục đã chọn. +bottom_save_button_tooltip = Lưu dữ liệu tìm kiếm vào file +bottom_symlink_button_tooltip = + Tạo các liên kết tượng trưng. + Chỉ hoạt động khi ít nhất hai kết quả trong một nhóm được chọn. + Kết quả đầu tiên không thay đổi, và các kết quả thứ hai trở đi sẽ được tạo liên kết tượng trưng đến kết quả đầu tiên. +bottom_hardlink_button_tooltip = + Tạo liên kết cứng. + Chỉ hoạt động khi có ít nhất hai kết quả được chọn trong một nhóm. + Kết quả đầu tiên không thay đổi, và các kết quả thứ hai trở đi sẽ được liên kết cứng với kết quả đầu tiên. +bottom_hardlink_button_not_available_tooltip = + Tạo liên kết cứng. + Nút này bị tắt, vì không thể tạo liên kết cứng. + Liên kết cứng chỉ hoạt động với quyền quản trị viên trên Windows, vì vậy hãy đảm bảo chạy ứng dụng với quyền quản trị viên. + Nếu ứng dụng đã chạy với quyền như vậy, hãy kiểm tra các vấn đề tương tự trên Github. +bottom_move_button_tooltip = + Di chuyển các tệp đến thư mục được chọn. + Nó sao chép tất cả các tệp vào thư mục mà không giữ lại cấu trúc thư mục gốc. + Khi cố gắng di chuyển hai tệp có cùng tên vào một thư mục, thao tác với tệp thứ hai sẽ thất bại và hiển thị thông báo lỗi. +bottom_sort_button_tooltip = Sắp xếp các tệp/thư mục theo phương pháp đã chọn. +bottom_compare_button_tooltip = So sánh các hình ảnh trong nhóm. +bottom_show_errors_tooltip = Hiện/Ẩn bảng điều khiển văn bản phía dưới. +bottom_show_upper_notebook_tooltip = Hiện/Ẩn bảng điều khiển phía trên của sổ. +# Progress Window +progress_stop_button = Dừng lại +progress_stop_additional_message = Yêu cầu dừng đã được thực hiện +# About Window +about_repository_button_tooltip = Liên kết đến trang lưu trữ mã nguồn. +about_donation_button_tooltip = Liên kết đến trang quyên góp. +about_instruction_button_tooltip = Liên kết đến trang hướng dẫn. +about_translation_button_tooltip = Liên kết đến trang Crowdin với các bản dịch ứng dụng. Hiện tại, tiếng Ba Lan và tiếng Anh là các ngôn ngữ được hỗ trợ chính thức. +about_repository_button = Kho lưu trữ +about_donation_button = Quyên góp +about_instruction_button = Hướng dẫn +about_translation_button = Dịch thuật +# Header +header_setting_button_tooltip = Mở hộp thoại cài đặt. +header_about_button_tooltip = Mở hộp thoại hiển thị thông tin về ứng dụng. + +# Settings + + +## General + +settings_number_of_threads = Số lượng luồng đang được sử dụng +settings_number_of_threads_tooltip = Số lượng luồng được sử dụng, 0 có nghĩa là tất cả các luồng khả dụng sẽ được sử dụng. +settings_use_rust_preview = Sử dụng các thư viện bên ngoài thay vì gtk để tải các hình xem trước +settings_use_rust_preview_tooltip = + Việc sử dụng bản xem trước của gtk đôi khi có thể nhanh hơn và hỗ trợ nhiều định dạng hơn, nhưng đôi khi điều này có thể hoàn toàn ngược lại. + + Nếu bạn gặp vấn đề khi tải bản xem trước, bạn có thể thử thay đổi cài đặt này. + + Trên các hệ thống không phải Linux, nên sử dụng tùy chọn này, vì các tệp gtk-pixbuf không phải lúc nào cũng có sẵn, vì vậy việc tắt tùy chọn này sẽ không tải bản xem trước của một số hình ảnh. +settings_label_restart = Bạn cần khởi động lại ứng dụng để áp dụng các thiết lập! +settings_ignore_other_filesystems = Bỏ qua các hệ thống tập tin khác (chỉ dành cho Linux) +settings_ignore_other_filesystems_tooltip = + Bỏ qua các tệp không nằm trong cùng hệ thống tệp với các thư mục được tìm kiếm. + + Hoạt động tương tự như tùy chọn `-xdev` trong lệnh `find` trên Linux +settings_save_at_exit_button_tooltip = Lưu cấu hình vào file khi đóng ứng dụng. +settings_load_at_start_button_tooltip = + Tải cấu hình từ tệp khi mở ứng dụng. + + Nếu tính năng này chưa được bật, các cài đặt mặc định sẽ được sử dụng. +settings_confirm_deletion_button_tooltip = Hiển thị hộp thoại xác nhận khi người dùng nhấp vào nút xóa. +settings_confirm_link_button_tooltip = Hiển thị hộp thoại xác nhận khi người dùng nhấp vào nút "liên kết cứng/liên kết tượng trưng". +settings_confirm_group_deletion_button_tooltip = Hiển thị hộp thoại cảnh báo khi người dùng cố gắng xóa tất cả các bản ghi trong nhóm. +settings_show_text_view_button_tooltip = Hiển thị bảng điều khiển văn bản ở phía dưới giao diện người dùng. +settings_use_cache_button_tooltip = Sử dụng bộ nhớ đệm tệp. +settings_save_also_as_json_button_tooltip = Lưu bộ nhớ đệm dưới định dạng JSON (dễ đọc). Bạn có thể chỉnh sửa nội dung của nó. Ứng dụng sẽ tự động đọc bộ nhớ đệm từ tệp này nếu không tìm thấy bộ nhớ đệm ở định dạng nhị phân (có phần mở rộng .bin). +settings_use_trash_button_tooltip = Di chuyển các tệp vào thùng rác thay vì xóa chúng vĩnh viễn. +settings_language_label_tooltip = Ngôn ngữ cho giao diện người dùng. +settings_save_at_exit_button = Lưu cấu hình khi đóng ứng dụng +settings_load_at_start_button = Tải cấu hình khi mở ứng dụng +settings_confirm_deletion_button = Hiển thị hộp thoại xác nhận khi xóa bất kỳ tệp nào +settings_confirm_link_button = Hiển thị hộp thoại xác nhận khi tạo liên kết cứng hoặc liên kết tượng trưng cho bất kỳ tệp nào +settings_confirm_group_deletion_button = Hiển thị hộp thoại xác nhận khi xóa tất cả các tệp trong một nhóm +settings_show_text_view_button = Hiển thị bảng điều khiển văn bản ở dưới cùng +settings_use_cache_button = Sử dụng bộ nhớ đệm +settings_save_also_as_json_button = Ngoài ra, hãy lưu bộ nhớ đệm dưới dạng tệp JSON +settings_use_trash_button = Di chuyển các tệp đã xóa đến thùng rác +settings_language_label = Ngôn ngữ +settings_multiple_delete_outdated_cache_checkbutton = Tự động xóa các mục bộ nhớ đệm đã cũ +settings_multiple_delete_outdated_cache_checkbutton_tooltip = + Xóa các kết quả lưu trữ cũ trỏ đến các tệp không tồn tại. + + Khi tính năng này được bật, ứng dụng sẽ đảm bảo rằng khi tải các bản ghi, tất cả các bản ghi đều trỏ đến các tệp hợp lệ (các tệp bị lỗi sẽ bị bỏ qua). + + Tắt tính năng này sẽ hữu ích khi quét các tệp trên ổ đĩa ngoài, để các mục nhập lưu trữ liên quan đến chúng sẽ không bị xóa trong lần quét tiếp theo. + + Trong trường hợp có hàng trăm nghìn bản ghi trong bộ nhớ cache, nên bật tính năng này, điều này sẽ giúp tăng tốc độ tải/lưu bộ nhớ cache ở đầu/cuối quá trình quét. +settings_notebook_general = Tổng quan +settings_notebook_duplicates = Bản sao +settings_notebook_images = Hình ảnh tương tự +settings_notebook_videos = Video tương tự + +## Multiple - settings used in multiple tabs + +settings_multiple_image_preview_checkbutton_tooltip = Hiển thị bản xem trước ở phía bên phải (khi chọn một tệp hình ảnh). +settings_multiple_image_preview_checkbutton = Hiển thị hình ảnh xem trước +settings_multiple_clear_cache_button_tooltip = + Xóa bộ nhớ cache thủ công để loại bỏ các mục đã hết hạn. + Chỉ nên sử dụng tùy chọn này khi tính năng xóa tự động đã bị tắt. +settings_multiple_clear_cache_button = Xóa các kết quả đã cũ khỏi bộ nhớ đệm. + +## Duplicates + +settings_duplicates_hide_hard_link_button_tooltip = + Ẩn tất cả các tệp, ngoại trừ một, nếu tất cả chúng đều trỏ đến cùng một dữ liệu (được liên kết cứng). + + Ví dụ: Trong trường hợp có bảy tệp trên ổ đĩa được liên kết cứng đến cùng một dữ liệu, và một tệp khác có cùng dữ liệu nhưng inode khác, thì trong trình tìm kiếm bản sao, chỉ hiển thị một tệp duy nhất và một tệp từ các tệp được liên kết cứng. +settings_duplicates_minimal_size_entry_tooltip = + Thiết lập kích thước tệp tối thiểu sẽ được lưu trong bộ nhớ đệm. + + Việc chọn giá trị nhỏ hơn sẽ tạo ra nhiều bản ghi hơn. Điều này sẽ tăng tốc độ tìm kiếm, nhưng làm chậm quá trình tải/lưu bộ nhớ đệm. +settings_duplicates_prehash_checkbutton_tooltip = + Cho phép lưu trữ tạm thời (cache) giá trị prehash (một giá trị băm được tính từ một phần nhỏ của tệp), điều này cho phép loại bỏ nhanh chóng hơn các kết quả không trùng lặp. + + Tính năng này bị tắt theo mặc định vì nó có thể gây ra tình trạng chậm lại trong một số trường hợp. + + Nên bật tính năng này khi quét hàng trăm nghìn hoặc hàng triệu tệp, vì nó có thể tăng tốc độ tìm kiếm lên nhiều lần. +settings_duplicates_prehash_minimal_entry_tooltip = Kích thước tối thiểu của mục được lưu trong bộ nhớ đệm. +settings_duplicates_hide_hard_link_button = Ẩn các liên kết cứng +settings_duplicates_prehash_checkbutton = Sử dụng bộ nhớ đệm trước khi tính toán hash +settings_duplicates_minimal_size_cache_label = Kích thước tối thiểu của các tệp (tính bằng byte) được lưu vào bộ nhớ cache +settings_duplicates_minimal_size_cache_prehash_label = Kích thước tối thiểu của các tệp (tính bằng byte) được lưu vào bộ nhớ đệm trước khi tính toán hash + +## Saving/Loading settings + +settings_saving_button_tooltip = Lưu cấu hình cài đặt hiện tại vào tệp. +settings_loading_button_tooltip = Tải cài đặt từ tệp và thay thế cấu hình hiện tại bằng các cài đặt đó. +settings_reset_button_tooltip = Khôi phục cấu hình hiện tại về cấu hình mặc định. +settings_saving_button = Lưu cấu hình +settings_loading_button = Tải cấu hình +settings_reset_button = Đặt lại cấu hình + +## Opening cache/config folders + +settings_folder_cache_open_tooltip = + Mở thư mục chứa các file txt cache. + + Việc sửa đổi các file cache có thể gây ra kết quả không chính xác. Tuy nhiên, việc thay đổi đường dẫn có thể tiết kiệm thời gian khi di chuyển một lượng lớn file đến một vị trí khác. + + Bạn có thể sao chép các file này giữa các máy tính để tiết kiệm thời gian khi phải quét lại các file (tất nhiên là nếu chúng có cấu trúc thư mục tương tự). + + Trong trường hợp có vấn đề với cache, bạn có thể xóa các file này. Ứng dụng sẽ tự động tạo lại chúng. +settings_folder_settings_open_tooltip = + Mở thư mục chứa cấu hình của Czkawka. + + CẢNH BÁO: Việc chỉnh sửa cấu hình thủ công có thể làm gián đoạn quy trình làm việc của bạn. +settings_folder_cache_open = Mở thư mục bộ nhớ đệm +settings_folder_settings_open = Mở thư mục cài đặt +# Compute results +compute_stopped_by_user = Quá trình tìm kiếm đã bị người dùng dừng lại +compute_found_duplicates_hash_size = Đã tìm thấy { $number_files } bản sao trong { $number_groups } nhóm, chiếm dung lượng { $size } và mất { $time } +compute_found_duplicates_name = Đã tìm thấy { $number_files } bản sao trong { $number_groups } nhóm trong { $time } +compute_found_empty_folders = Đã tìm thấy { $number_files } thư mục trống trong { $time } +compute_found_empty_files = Đã tìm thấy { $number_files } tệp trống trong { $time } +compute_found_big_files = Đã tìm thấy { $number_files } tệp lớn trong { $time } +compute_found_temporary_files = Đã tìm thấy { $number_files } tệp tạm thời trong { $time } +compute_found_images = Đã tìm thấy { $number_files } hình ảnh tương tự trong { $number_groups } nhóm, mất { $time } +compute_found_videos = Đã tìm thấy { $number_files } video tương tự trong { $number_groups } nhóm, mất { $time } để hoàn thành +compute_found_music = Đã tìm thấy { $number_files } tệp nhạc tương tự trong { $number_groups } nhóm, mất { $time } +compute_found_invalid_symlinks = Đã tìm thấy { $number_files } liên kết tượng trưng không hợp lệ trong { $time } +compute_found_broken_files = Đã tìm thấy { $number_files } tệp bị lỗi trong { $time } +compute_found_bad_extensions = Đã tìm thấy { $number_files } tệp có phần mở rộng không hợp lệ trong { $time } +# 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_creating_video_thumbnails = Created thumbnails 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 = Đang tải bộ nhớ đệm trước khi tính toán hash +progress_prehash_cache_saving = Lưu bộ nhớ đệm trước khi tính toán hash +progress_hash_cache_loading = Đang tải bộ nhớ đệm hash +progress_hash_cache_saving = Lưu bộ nhớ đệm hash +progress_cache_loading = Đang tải bộ nhớ đệm +progress_cache_saving = Lưu bộ nhớ đệm +progress_current_stage = Current Stage:{ " " } +progress_all_stages = All Stages:{ " " } +# Saving loading +saving_loading_saving_success = Đã lưu cấu hình vào file { $name }. +saving_loading_saving_failure = Không thể lưu dữ liệu cấu hình vào tệp { $name }, lý do: { $reason }. +saving_loading_reset_configuration = Cấu hình hiện tại đã được xóa. +saving_loading_loading_success = Cấu hình ứng dụng đã được tải đúng. +saving_loading_failed_to_create_config_file = Không thể tạo file cấu hình "{ $path }", lý do: "{ $reason }". +saving_loading_failed_to_read_config_file = Không thể tải cấu hình từ "{ $path }" vì nó không tồn tại hoặc không phải là một tệp. +saving_loading_failed_to_read_data_from_file = Không thể đọc dữ liệu từ tệp "{ $path }", lý do: "{ $reason }". +# Other +selected_all_reference_folders = Không thể bắt đầu tìm kiếm nếu tất cả các thư mục được đặt làm thư mục tham chiếu +searching_for_data = Đang tìm kiếm dữ liệu, quá trình này có thể mất một chút thời gian, vui lòng chờ... +text_view_messages = TIN NHẮN +text_view_warnings = CẢNH BÁO +text_view_errors = LỖI +about_window_motto = Chương trình này hoàn toàn miễn phí để sử dụng và sẽ luôn như vậy. +krokiet_new_app = Czkawka hiện đang ở chế độ bảo trì, điều này có nghĩa là chỉ các lỗi nghiêm trọng mới được sửa và không có tính năng mới nào được thêm vào. Để trải nghiệm các tính năng mới, vui lòng sử dụng ứng dụng Krokiet mới, ứng dụng này ổn định và hiệu suất tốt hơn, đồng thời vẫn đang được phát triển tích cực. +# Various dialog +dialogs_ask_next_time = Hỏi lần sau nhé +symlink_failed = Failed to symlink { $name } to { $target }, reason { $reason } +delete_title_dialog = Xác nhận xóa +delete_question_label = Bạn có chắc chắn rằng bạn muốn xóa các tệp này không? +delete_all_files_in_group_title = Xác nhận xóa tất cả các tệp trong nhóm +delete_all_files_in_group_label1 = Trong một số nhóm, tất cả các bản ghi đều được chọn. +delete_all_files_in_group_label2 = Bạn có chắc chắn rằng bạn muốn xóa chúng không? +delete_items_label = { $items } tập tin sẽ bị xóa. +delete_items_groups_label = { $items } tệp từ { $groups } nhóm sẽ bị xóa. +hardlink_failed = Không thể tạo liên kết cứng từ { $name } đến { $target }, lý do: { $reason } +hard_sym_invalid_selection_title_dialog = Lựa chọn không hợp lệ với một số nhóm +hard_sym_invalid_selection_label_1 = Trong một số nhóm, chỉ có một bản ghi được chọn và nó sẽ bị bỏ qua. +hard_sym_invalid_selection_label_2 = Để có thể tạo liên kết cứng hoặc liên kết tượng trưng cho các tệp này, bạn cần chọn ít nhất hai kết quả trong nhóm. +hard_sym_invalid_selection_label_3 = Trong một nhóm, phần tử đầu tiên được công nhận là bản gốc và không được thay đổi, nhưng các phần tử thứ hai trở đi sẽ được sửa đổi. +hard_sym_link_title_dialog = Xác nhận liên kết +hard_sym_link_label = Bạn có chắc chắn rằng bạn muốn liên kết các tệp này không? +move_folder_failed = Failed to move folder { $name }, reason { $reason } +move_file_failed = Failed to move file { $name }, reason { $reason } +move_files_title_dialog = Chọn thư mục mà bạn muốn chuyển các tập tin trùng lặp đến +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 = LỖI: Bạn phải chọn ít nhất một tùy chọn tìm kiếm nhạc. +search_not_choosing_any_broken_files = LỖI: Bạn phải chọn ít nhất một ô kiểm với loại là các tệp bị lỗi. +include_folders_dialog_title = Các thư mục cần đưa vào +exclude_folders_dialog_title = Các thư mục cần loại trừ +include_manually_directories_dialog_title = Thêm thư mục một cách thủ công +cache_properly_cleared = Đã xóa bộ nhớ cache thành công +cache_clear_duplicates_title = Xóa bộ nhớ đệm chứa các mục trùng lặp +cache_clear_similar_images_title = Xóa bộ nhớ đệm chứa các ảnh tương tự +cache_clear_similar_videos_title = Xóa bộ nhớ đệm của các video tương tự +cache_clear_message_label_1 = Bạn có muốn xóa bộ nhớ đệm chứa các mục đã cũ không? +cache_clear_message_label_2 = Thao tác này sẽ xóa tất cả các mục trong bộ nhớ cache trỏ đến các tệp không hợp lệ. +cache_clear_message_label_3 = Điều này có thể giúp tăng tốc độ tải/lưu vào bộ nhớ đệm một chút. +cache_clear_message_label_4 = CẢNH BÁO: Quá trình này sẽ xóa tất cả dữ liệu đã được lưu trữ tạm thời trên các ổ đĩa ngoài không được kết nối. Do đó, mỗi giá trị băm (hash) sẽ cần được tạo lại. +# 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 = Nhóm { $current_group }/{ $all_groups } ({ $images_in_group } ảnh) +compare_move_left_button = L +compare_move_right_button = R diff --git a/czkawka_gui/i18n/zh-CN/czkawka_gui.ftl b/czkawka_gui/i18n/zh-CN/czkawka_gui.ftl index 7c14d62ff..4c97a3508 100644 --- a/czkawka_gui/i18n/zh-CN/czkawka_gui.ftl +++ b/czkawka_gui/i18n/zh-CN/czkawka_gui.ftl @@ -8,18 +8,18 @@ general_ok_button = 确定 general_close_button = 关闭 # Krokiet info dialog krokiet_info_title = Introducing Krokiet - 新版本 Czkawka -krokiet_info_message = - 克罗基特是 Czkawka GTK GUI 的新、改进、更快、更可靠的版本! - - 它更易于运行,并且对系统更改更具弹性,因为它只依赖于大多数系统默认可用的核心库。 - - 克罗基特还带来 Czkawka 缺乏的功能,包括视频比较模式下的缩略图、EXIF 清理器、文件移动/复制/删除进度或扩展排序选项。 - - 尝试一下并看看区别! - - Czkawka 将继续收到我提供的错误修复和小更新,但所有新功能都将专门为克罗基特开发,任何人都可以在添加新功能、添加缺失模式或进一步扩展 Czkawka 时自由贡献。 - - PS:此消息只应出现一次。如果它再次出现,请将 CZKAWKA_DONT_ANNOY_ME 环境变量设置为任何非空值。. +krokiet_info_message = + 克罗基特是 Czkawka GTK GUI 的新、改进、更快、更可靠的版本! + + 它更易于运行,并且对系统更改更具弹性,因为它只依赖于大多数系统默认可用的核心库。 + + 克罗基特还带来 Czkawka 缺乏的功能,包括视频比较模式下的缩略图、EXIF 清理器、文件移动/复制/删除进度或扩展排序选项。 + + 尝试一下并看看区别! + + Czkawka 将继续收到我提供的错误修复和小更新,但所有新功能都将专门为克罗基特开发,任何人都可以在添加新功能、添加缺失模式或进一步扩展 Czkawka 时自由贡献。 + + PS:此消息只应出现一次。如果它再次出现,请将 CZKAWKA_DONT_ANNOY_ME 环境变量设置为任何非空值。. # Main window music_title_checkbox = 标题 music_artist_checkbox = 艺人 @@ -33,11 +33,11 @@ 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 = +music_compare_only_in_title_group_tooltip = 如果启用,文件按标题分类,然后相互比较。 如果有一亿文件,而不是几乎1亿文件的比较,通常就会有大约2000万份比较。. -same_music_tooltip = +same_music_tooltip = 通过设置以下内容,可以配置按其内容搜索类似的音乐文件: - 可以识别音乐文件为类似文件的最小碎片时间 @@ -62,7 +62,7 @@ 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 = +duplicate_hash_type_tooltip = Czkawka提供3种哈希类型: Blake3 - 加密散列函数。这是默认选项,因为它非常快。 @@ -70,7 +70,7 @@ duplicate_hash_type_tooltip = CRC32 - 简单的散列函数。这应该比Blake3更快,但极少情况下可能会有一些冲突。 XXH3 - 与Blake3非常相似,性能和哈希质量也很高 (但不是加密的)。因此,这些模式可以很容易地互换使用。. -duplicate_check_method_tooltip = +duplicate_check_method_tooltip = 目前,Czkawka提供三种方法来查找重复: 名称 - 查找名称相同的文件。 @@ -78,7 +78,7 @@ duplicate_check_method_tooltip = 大小 - 查找大小相同的文件。 哈希 - 查找内容相同的文件。 这种模式会对文件进行哈希计算,然后将哈希值进行比较以查找重复项。这种模式是查找重复项的最安全方法。应用程序大量使用缓存,因此对相同数据进行的第二次及更多次扫描应比第一次更快。. -image_hash_size_tooltip = +image_hash_size_tooltip = 每张选中的图像都产生了一个可相互比较的特殊哈希。 两者之间的小差别意味着这些图像是相似的。 8 散列尺寸非常适合于找到仅略类似于原始图像的图像。 有了更大的一组图像 (>1000),这将产生大量虚假的正数, 所以我建议在这种情况下使用更大的散列尺寸。 @@ -86,7 +86,7 @@ image_hash_size_tooltip = 16是默认的散列尺寸,它是一个很好的折衷,既使找到了一些小相似的图像,又仅有少量的散列碰撞。 32和64 散列只找到非常相似的图像,但是几乎不应该有假正数 (可能只有一些带着Alpha 通道的图像)。. -image_resize_filter_tooltip = +image_resize_filter_tooltip = 要计算图像散列,库必须首先调整大小。 在选定的算法上花费, 用来计算散列的结果图像看起来有点不同。 @@ -94,7 +94,7 @@ image_resize_filter_tooltip = 最快使用的算法,也是结果最差的算法,是Nearest。 默认情况下启用它,因为16x16散列大小较低的质量并不真正可见。 使用 8x8 散列大小,建议使用不同于Nearest的算法来拥有更好的图像组。. -image_hash_alg_tooltip = +image_hash_alg_tooltip = 用户可以从许多计算哈希值的算法中选择一种。 每种算法都有强项和弱项,对于不同的图像,有时结果更好,有时结果更差。 @@ -184,7 +184,7 @@ upper_remove_excluded_button_tooltip = 从排除中删除目录。. upper_notebook_items_configuration = 项目配置 upper_notebook_excluded_directories = 排除路径 upper_notebook_included_directories = 包含路径 -upper_allowed_extensions_tooltip = +upper_allowed_extensions_tooltip = 允许的扩展名必须用逗号分隔(默认情况下所有扩展名都可用)。 还可以使用以下可一次添加多个扩展名的宏:IMAGE、VIDEO、MUSIC、TEXT。 @@ -192,13 +192,13 @@ upper_allowed_extensions_tooltip = 填写 /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_extensions_tooltip = 在扫描中忽略的已禁用文件列表。 在使用允许和禁用的扩展时,这个扩展具有更高的优先级,所以文件将不会被检查。. -upper_excluded_items_tooltip = - 排除项目必须包含 * 并且应以逗号分隔。 - 这比排除路径慢,因此请谨慎使用。. +upper_excluded_items_tooltip = + 排除项目必须包含 * 并且应以逗号分隔。 + 这比排除路径慢,因此请谨慎使用。. upper_excluded_items = 排除的项目: upper_allowed_extensions = 允许的扩展: upper_excluded_extensions = 已禁用扩展: @@ -226,7 +226,7 @@ popover_custom_name_check_button_entry_tooltip = 示例用法: /usr/ping/pong.txt 可以通过 *ong* 找到。 -popover_custom_regex_check_button_entry_tooltip = +popover_custom_regex_check_button_entry_tooltip = 按指定的正则表达式选择记录。 使用此模式,搜索的文本是带有名称的路径。 @@ -235,11 +235,11 @@ 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 = +popover_custom_case_sensitive_check_button_tooltip = 启用大小写检测。 该选项禁用时,/home/* 将同时找到 /HoMe/roman 和 /home/roman。. -popover_custom_not_all_check_button_tooltip = +popover_custom_not_all_check_button_tooltip = 禁止在分组中选择所有记录。 这是默认启用的,因为在大多数情况下, 您不想删除原始文件和重复文件,而是想留下至少一个文件。 @@ -273,20 +273,20 @@ bottom_search_button_tooltip = 开始搜索 bottom_select_button_tooltip = 选择记录。只能稍后处理选定的文件/文件夹。. bottom_delete_button_tooltip = 删除选中的文件/文件夹。. bottom_save_button_tooltip = 保存搜索数据到文件 -bottom_symlink_button_tooltip = +bottom_symlink_button_tooltip = 创建软链接。 只有在至少选择了一组中的两个结果时才起作用。 第一个结果保持不变,第二个及后续结果都会被软链接到第一个结果上。. -bottom_hardlink_button_tooltip = +bottom_hardlink_button_tooltip = 创建硬链接。 只有在至少选择了一组中的两个结果时才起作用。 第一个结果保持不变,第二个及后续结果都会被硬链接到第一个结果上。. -bottom_hardlink_button_not_available_tooltip = +bottom_hardlink_button_not_available_tooltip = 创建硬链接。 按钮已禁用,因为无法创建硬链接。 在 Windows 上,只有使用管理员权限才能使用硬链接,所以请确保以管理员身份运行该应用程序。 如果应用程序已经具有管理员权限,请在 Github 上查找类似的问题。. -bottom_move_button_tooltip = +bottom_move_button_tooltip = 移动文件到选定的目录。 它复制所有文件到目录,而不保留目录树。 试图将两个具有相同名称的文件移动到文件夹时,第二个将失败并显示错误。. @@ -309,7 +309,7 @@ about_translation_button = 翻译 # Header header_setting_button_tooltip = 打开设置对话框。. header_about_button_tooltip = 打开包含应用程序信息的对话框。. - + # Settings @@ -318,7 +318,7 @@ header_about_button_tooltip = 打开包含应用程序信息的对话框。. settings_number_of_threads = 使用的线程数 settings_number_of_threads_tooltip = 使用的线程数,0表示所有可用线程都将被使用。. settings_use_rust_preview = 使用外部库来加载预览 -settings_use_rust_preview_tooltip = +settings_use_rust_preview_tooltip = 使用 gtk 预览有时会更快,支持更多格式,但有时恰恰相反。 如果您在加载预览时遇到问题,您可以尝试更改此设置。 @@ -331,7 +331,7 @@ settings_ignore_other_filesystems_tooltip = 在 Linux 上查找命令时类似-xdev选项 settings_save_at_exit_button_tooltip = 关闭应用时将配置保存到文件。. -settings_load_at_start_button_tooltip = +settings_load_at_start_button_tooltip = 打开应用程序时从文件加载配置。 如果未启用,将使用默认设置。. @@ -354,7 +354,7 @@ 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_multiple_delete_outdated_cache_checkbutton_tooltip = 删除指向不存在文件的过期缓存结果。 当启用时,应用程序确保在加载记录时所有记录都指向有效文件 (无法访问的文件将被忽略)。 @@ -371,22 +371,22 @@ settings_notebook_videos = 相似视频 settings_multiple_image_preview_checkbutton_tooltip = 在右侧显示预览 (当选择图像文件时)。. settings_multiple_image_preview_checkbutton = 显示图像预览 -settings_multiple_clear_cache_button_tooltip = +settings_multiple_clear_cache_button_tooltip = 手动清除过时条目的缓存。 仅在禁用自动清除时才使用。. settings_multiple_clear_cache_button = 从缓存中删除过时的结果。. - + ## Duplicates -settings_duplicates_hide_hard_link_button_tooltip = +settings_duplicates_hide_hard_link_button_tooltip = 隐藏除一个以外的所有文件,如果所有文件都指向同一数据(即为硬链接)。 示例:如果(磁盘上)有七个文件硬链接到特定数据,而一个不同文件具有相同数据但不同 inode,则在重复查找器中,将仅显示一个唯一文件和一个来自硬链接文件的文件。. -settings_duplicates_minimal_size_entry_tooltip = +settings_duplicates_minimal_size_entry_tooltip = 设置将被缓存的最小文件大小。 选择较小的值将会生成更多的记录。这将加快搜索速度,但会减慢缓存的加载/保存速度。. -settings_duplicates_prehash_checkbutton_tooltip = +settings_duplicates_prehash_checkbutton_tooltip = 启用预散列缓存 (从文件的一小部分计算出的哈希),以便更早地排除非重复结果。 默认情况下禁用它,因为在某些情况下可能会导致减慢速度。 @@ -409,7 +409,7 @@ settings_reset_button = 重置配置 ## Opening cache/config folders -settings_folder_cache_open_tooltip = +settings_folder_cache_open_tooltip = 打开存储缓存的txt文件的文件夹。 修改缓存文件可能会导致显示无效的结果。然而,当将大量文件移动到另一个位置时,修改路径可能会节省时间。 @@ -417,7 +417,7 @@ settings_folder_cache_open_tooltip = 您可以在计算机之间复制这些文件,以节省再次扫描文件的时间 (当然,如果它们具有相似的目录结构)。 如果出现缓存问题,可以删除这些文件。该应用程序将自动重新生成它们。. -settings_folder_settings_open_tooltip = +settings_folder_settings_open_tooltip = 打开保存Czkawka配置的文件夹。 警告:手动修改配置可能会破坏您的工作流程。. diff --git a/czkawka_gui/i18n/zh-TW/czkawka_gui.ftl b/czkawka_gui/i18n/zh-TW/czkawka_gui.ftl index eff03a7a5..4ce64597b 100644 --- a/czkawka_gui/i18n/zh-TW/czkawka_gui.ftl +++ b/czkawka_gui/i18n/zh-TW/czkawka_gui.ftl @@ -8,18 +8,18 @@ general_ok_button = 確定 general_close_button = 關閉 # Krokiet info dialog krokiet_info_title = 介紹 Krokiet - Czkawka 的新版本 -krokiet_info_message = - 考基特是新的、改良的、更快速且更可靠的Czkawka GTK GUI版本! - - 它更容易運行,並且更能抵抗系統變動,因為它僅依賴於大多數系統預設可用的核心函式庫。 - - 考基特還帶來了Czkawka所沒有的功能,包括影片比較模式下的縮圖、EXIF清理器、檔案移動/複製/刪除進度或擴展的排序選項。 - - 試試看,看看區別吧! - - Czkawka將繼續由我提供錯誤修復和輕微更新,但所有新功能都將專門為考基特開發,任何人都可以在自由地貢獻新的功能、添加缺失的模式或進一步擴展Czkawka。 - - PS:這則訊息只應該出現一次。如果它再次出現,請將CZKAWKA_DONT_ANNOY_ME環境變數設定為任何非空值。. +krokiet_info_message = + 考基特是新的、改良的、更快速且更可靠的Czkawka GTK GUI版本! + + 它更容易運行,並且更能抵抗系統變動,因為它僅依賴於大多數系統預設可用的核心函式庫。 + + 考基特還帶來了Czkawka所沒有的功能,包括影片比較模式下的縮圖、EXIF清理器、檔案移動/複製/刪除進度或擴展的排序選項。 + + 試試看,看看區別吧! + + Czkawka將繼續由我提供錯誤修復和輕微更新,但所有新功能都將專門為考基特開發,任何人都可以在自由地貢獻新的功能、添加缺失的模式或進一步擴展Czkawka。 + + PS:這則訊息只應該出現一次。如果它再次出現,請將CZKAWKA_DONT_ANNOY_ME環境變數設定為任何非空值。. # Main window music_title_checkbox = 標題 music_artist_checkbox = 藝人 @@ -33,11 +33,11 @@ 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 = +music_compare_only_in_title_group_tooltip = 當啟用時,檔案會按照標題分組然後相互比較。 有萬個檔案,通常會有的近乎十億次比較,反之只會約有二萬次比較。. -same_music_tooltip = +same_music_tooltip = 透過以下設定,可以根據內容搜尋相似的音樂檔案: - 音樂檔案在超過最小片段時間後可以被識別為相似 @@ -62,7 +62,7 @@ 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 = +duplicate_hash_type_tooltip = Czkawka 提供三種類型的雜湊: Blake3 - 這是一種加密雜湊函式,也是預設選項,主要因為它的計算速度非常快。 @@ -70,7 +70,7 @@ duplicate_hash_type_tooltip = CRC32 - 這是一種簡單的雜湊函式。理論上它比 Blake3 更快,雖然機率很低但有時可能會產生碰撞。 XXH3 - 在效能和雜湊品質上與 Blake3 非常相似,但它不是加密型的。因此,這兩種模式可以輕易地互換使用。. -duplicate_check_method_tooltip = +duplicate_check_method_tooltip = 目前,Czkawka 提供三種方法來找出重複檔案: 名稱 - 找出名稱相同的檔案。 @@ -78,7 +78,7 @@ duplicate_check_method_tooltip = 大小 - 找出大小相同的檔案。 雜湊 - 找出內容相同的檔案。這個模式會先對檔案進行雜湊運算,然後比較這些雜湊值來識別重複檔案。這是找出重複檔案最安全的方式。由於應用程式大量使用快取,對同一組資料進行的第二次及後續掃描會比第一次快得多。. -image_hash_size_tooltip = +image_hash_size_tooltip = 每個檢查的圖片會產生一個可用來來互相比較的的特定的雜湊值,它們之間些微的差異則代表這些圖片是相似的。 8 雜湊大小是相當不錯用以尋找與原版僅些微相似的圖片。對於更大規模的圖片組(>1000),則會產生大量的誤報,所以在此情形中推薦使用更大的雜湊大小。 @@ -86,7 +86,7 @@ image_hash_size_tooltip = 16 是預設的雜湊大小是相當不錯的折衷方案,對於尋找即使僅些微相似的圖片,並且只會有少量的雜湊衝突。 32 與 64 雜湊值用於尋找非常相似的圖片,但應該幾乎沒有誤報(也許除了一些具有 Alpha 通道的圖片)。. -image_resize_filter_tooltip = +image_resize_filter_tooltip = 要計算圖片的雜湊值,函式庫必須先對它進行調整大小。 取決於選取的演算法,用於計算雜湊值的圖片將會看起來有些不同。 @@ -94,7 +94,7 @@ image_resize_filter_tooltip = 最快的演算法是 Nearest,但也許會給出最差結果。預設為啟用,因為 16x16 雜湊大小並不是明顯可見的較低品質。 對於 8x8 雜湊大小,建議使用不同於 Nearest 的演算法,以獲得更好的圖片分組。. -image_hash_alg_tooltip = +image_hash_alg_tooltip = 使用者可以從許多計算雜湊值的演算法中選擇一種。 每種演算法都有強項和弱項,對於不同的圖片,有時會有更好的結果,有時會有更差的結果。 @@ -184,19 +184,19 @@ upper_remove_excluded_button_tooltip = 從排除中移除目錄。. upper_notebook_items_configuration = 項目設定 upper_notebook_excluded_directories = 排除路徑 upper_notebook_included_directories = 包含的路徑 -upper_allowed_extensions_tooltip = +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_extensions_tooltip = 在掃描中將會被忽略的禁用檔案清單。 當使同時使用允許與禁用兩者時,此項擁有更高的優先等級,所以檔案將不會被檢查。. -upper_excluded_items_tooltip = - 排除的項目必須包含 * 萬位符號,並且用逗號分隔。 - 這比排除路徑慢,所以請謹慎使用。. +upper_excluded_items_tooltip = + 排除的項目必須包含 * 萬位符號,並且用逗號分隔。 + 這比排除路徑慢,所以請謹慎使用。. upper_excluded_items = 排除的項目: upper_allowed_extensions = 允許的副檔名: upper_excluded_extensions = 禁用的副檔名: @@ -224,7 +224,7 @@ popover_custom_name_check_button_entry_tooltip = 範例用法: /usr/ping/pong.txt 可以在 *ong* 中找到。 -popover_custom_regex_check_button_entry_tooltip = +popover_custom_regex_check_button_entry_tooltip = 透過指定的正規表達式(Regex)來選擇記錄。 在這個模式下,被搜尋的文字是「路徑」加上「名稱」。 @@ -233,11 +233,11 @@ 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 = +popover_custom_case_sensitive_check_button_tooltip = 啟用區分大小寫的偵測。 當此選項停用時,「/home/*」會同時找到「/HoMe/roman」和「/home/roman」。. -popover_custom_not_all_check_button_tooltip = +popover_custom_not_all_check_button_tooltip = 防止在同一群組中全選所有記錄。 這個選項預設是啟用的,主要是因為在多數情況下,您不會想要同時刪除原始檔案和其重複檔,而是會希望至少保留一個檔案。 @@ -271,20 +271,20 @@ bottom_search_button_tooltip = 開始搜尋 bottom_select_button_tooltip = 選擇記錄。只能稍後處理選定的檔案/資料夾。. bottom_delete_button_tooltip = 刪除選取的檔案/資料夾。. bottom_save_button_tooltip = 儲存搜尋資料到檔案 -bottom_symlink_button_tooltip = +bottom_symlink_button_tooltip = 建立符號連結。 只有在一個群組中至少選擇了兩個結果時才會生效。 第一個檔案保持不變,第二個以及之後的檔案會建立為指向第一個檔案的符號連結。. -bottom_hardlink_button_tooltip = +bottom_hardlink_button_tooltip = 建立永久連結。 只有在一個群組中至少選擇了兩個結果時才會生效。 第一個檔案保持不變,第二個以及之後的檔案會建立為與第一個檔案的永久連結。. -bottom_hardlink_button_not_available_tooltip = +bottom_hardlink_button_not_available_tooltip = 建立永久連結。 此按鈕已被停用,因為無法建立永久連結。 在 Windows 上,只有擁有管理員權限才能建立永久連結,請確保以管理員身份執行應用程式。 如果應用程式已經具有對應的權限,請在 GitHub 上查詢相關問題。. -bottom_move_button_tooltip = +bottom_move_button_tooltip = 將檔案移動到指定目錄。 會將所有檔案複製到目錄中,但不會保留原始的目錄結構。 如果試圖將兩個同名檔案移動到同一資料夾,第二個檔案將無法移動並會顯示錯誤。. @@ -307,7 +307,7 @@ about_translation_button = 翻譯 # Header header_setting_button_tooltip = 開啟設定對話方塊。. header_about_button_tooltip = 開啟包含應用程式資訊的對話方塊。. - + # Settings @@ -316,7 +316,7 @@ header_about_button_tooltip = 開啟包含應用程式資訊的對話方塊。. settings_number_of_threads = 使用的執行緒數 settings_number_of_threads_tooltip = 使用的執行緒數,0 表示所有可用執行緒都將被使用。. settings_use_rust_preview = 使用外部庫 Instead gtk 來加載預覽 -settings_use_rust_preview_tooltip = +settings_use_rust_preview_tooltip = 使用 gtk 預覽通常會較快且支援更多格式,但有時這可能會正好相反。 如果您在載入預覽時遇到問題,您可以嘗試更變這個設定。 @@ -329,7 +329,7 @@ settings_ignore_other_filesystems_tooltip = 在 Linux 上查詢命令時類似 -xdev 選項 settings_save_at_exit_button_tooltip = 關閉應用程式時將設定儲存到檔案。. -settings_load_at_start_button_tooltip = +settings_load_at_start_button_tooltip = 開啟應用程式時從檔案載入設定。 如果未啟用,將使用預設設定。. @@ -352,7 +352,7 @@ 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_multiple_delete_outdated_cache_checkbutton_tooltip = 刪除指向不存在檔案的過時快取結果。 啟用後,應用程式在載入記錄時會確保所有記錄都指向有效的檔案(無效的檔案會被忽略)。 @@ -369,22 +369,22 @@ settings_notebook_videos = 相似影片 settings_multiple_image_preview_checkbutton_tooltip = 在右側顯示預覽(當選擇影像檔案時)。. settings_multiple_image_preview_checkbutton = 顯示影像預覽 -settings_multiple_clear_cache_button_tooltip = +settings_multiple_clear_cache_button_tooltip = 手動清除過時項目的快取。 僅在停用自動清除時才應使用。. settings_multiple_clear_cache_button = 從快取中移除過時結果. - + ## Duplicates -settings_duplicates_hide_hard_link_button_tooltip = +settings_duplicates_hide_hard_link_button_tooltip = 如果所有檔案都指向相同的資料(即為永久連結),則隱藏除一個以外的所有檔案。 例如:在有七個檔案與特定資料有永久連結,以及一個具有相同資料但不同 inode 的不同檔案的情況下,重複檔案檢查工具只會顯示一個獨特的檔案和一個來自永久連結的檔案。. -settings_duplicates_minimal_size_entry_tooltip = +settings_duplicates_minimal_size_entry_tooltip = 設定將被快取的最小檔案大小。 選擇較小的值會產生更多記錄。這會加速搜尋,但會減慢快取的載入和儲存。. -settings_duplicates_prehash_checkbutton_tooltip = +settings_duplicates_prehash_checkbutton_tooltip = 啟用預先計算的雜湊(從檔案的一小部分計算出來)的快取,這允許更早地排除非重複的結果。 這個選項預設是停用的,因為在某些情況下它可能會造成減速。 @@ -407,7 +407,7 @@ settings_reset_button = 重設設定 ## Opening cache/config folders -settings_folder_cache_open_tooltip = +settings_folder_cache_open_tooltip = 開啟儲存快取 txt 檔案的資料夾。 修改快取檔案可能會導致顯示無效的結果。然而,如果需要將大量檔案移動到不同位置,修改路徑可能會節省時間。 @@ -415,7 +415,7 @@ settings_folder_cache_open_tooltip = 如果兩台電腦有類似的目錄結構,您可以在它們之間複製這些檔案,以節省重新掃描檔案的時間。 如果快取有問題,這些檔案可以被移除。應用程式會自動重新產生它們。. -settings_folder_settings_open_tooltip = +settings_folder_settings_open_tooltip = 開啟儲存 Czkawka 設定的資料夾。 警告:手動修改設定可能會影響您的工作流程。. diff --git a/czkawka_gui/src/language_functions.rs b/czkawka_gui/src/language_functions.rs index ba21840df..b87f97e69 100644 --- a/czkawka_gui/src/language_functions.rs +++ b/czkawka_gui/src/language_functions.rs @@ -97,6 +97,22 @@ pub const LANGUAGES_ALL: &[Language] = &[ combo_box_text: "Türkçe (Turkish)", short_text: "tr", }, + Language { + combo_box_text: "فارسی (Persian)", + short_text: "fa", + }, + Language { + combo_box_text: "हिंदी (Hindi)", + short_text: "hi", + }, + Language { + combo_box_text: "Bahasa Indonesia (Indonesian)", + short_text: "id", + }, + Language { + combo_box_text: "Tiếng Việt (Vietnamese)", + short_text: "vi", + }, ]; pub(crate) fn get_language_from_combo_box_text(combo_box_text: &str) -> Language { diff --git a/justfile b/justfile index 350054a62..1cee07c8b 100644 --- a/justfile +++ b/justfile @@ -83,8 +83,11 @@ clip: cargo clippy --fix --allow-dirty --allow-staged --no-default-features --features winit_software --all-targets fix: - ruff format --line-length 120 --no-cache - mypy misc --strict + cp misc/pyproject.toml . + uv sync + + uv run ruff format --line-length 120 --no-cache + uv run mypy misc --strict bash misc/run_checks.sh @@ -214,7 +217,7 @@ install: prepare_translations_deps: @command -v uv >/dev/null 2>&1 || curl -LsSf https://astral.sh/uv/install.sh | sh @command -v ollama >/dev/null 2>&1 || curl -fsSL https://ollama.com/install.sh | sh - cd misc/ai_translate; uv sync + uv sync # qwen2.5:7b - fast, but quite bad quality # qwen2.5:32b - very slow, still not good quality # zongwei/gemma3-translator:4b - not so fast, but looks quite good @@ -222,15 +225,17 @@ prepare_translations_deps: export OLLAMA_VULKAN=1; export HSA_OVERRIDE_GFX_VERSION=10.3.0; ollama pull translategemma:12b translate: - cd misc/ai_translate; uv run translate.py ../../czkawka_gui/i18n - cd misc/ai_translate; uv run translate.py ../../czkawka_core/i18n - cd misc/ai_translate; uv run translate.py ../../krokiet/i18n + uv run misc/ai_translate/translate.py czkawka_gui/i18n + uv run misc/ai_translate/translate.py czkawka_core/i18n + uv run misc/ai_translate/translate.py krokiet/i18n + uv run misc/ai_translate/translate.py cedinia/i18n just pack_translations validate_translations *args: # Available --fix argument, which removes invalid translations - cd misc/ai_translate; uv run validate_translations.py ../../czkawka_gui/i18n {{args}} - cd misc/ai_translate; uv run validate_translations.py ../../czkawka_core/i18n {{args}} - cd misc/ai_translate; uv run validate_translations.py ../../krokiet/i18n {{args}} + uv run misc/ai_translate/validate_translations.py czkawka_gui/i18n {{args}} + uv run misc/ai_translate/validate_translations.py czkawka_core/i18n {{args}} + uv run misc/ai_translate/validate_translations.py krokiet/i18n {{args}} + uv run misc/ai_translate/validate_translations.py cedinia/i18n {{args}} # Crowdin allows to import zip file with structured translations pack_translations: @@ -243,6 +248,7 @@ pack_translations: [ -f "czkawka_gui/i18n/$lang_code/czkawka_gui.ftl" ] && cp "czkawka_gui/i18n/$lang_code/czkawka_gui.ftl" "/tmp/czkawka_i18n/i18n/$lang_code/" || true; \ [ -f "czkawka_core/i18n/$lang_code/czkawka_core.ftl" ] && cp "czkawka_core/i18n/$lang_code/czkawka_core.ftl" "/tmp/czkawka_i18n/i18n/$lang_code/" || true; \ [ -f "krokiet/i18n/$lang_code/krokiet.ftl" ] && cp "krokiet/i18n/$lang_code/krokiet.ftl" "/tmp/czkawka_i18n/i18n/$lang_code/" || true; \ + [ -f "cedinia/i18n/$lang_code/cedinia.ftl" ] && cp "cedinia/i18n/$lang_code/cedinia.ftl" "/tmp/czkawka_i18n/i18n/$lang_code/" || true; \ done cd /tmp/czkawka_i18n && zip -r - i18n > "{{justfile_directory()}}/i18n_translations.zip" rm -rf /tmp/czkawka_i18n @@ -257,6 +263,7 @@ unpack_translations path_to_file: [ -f "$lang_dir/czkawka_gui.ftl" ] && mkdir -p "czkawka_gui/i18n/$lang_code" && cp "$lang_dir/czkawka_gui.ftl" "czkawka_gui/i18n/$lang_code/" && echo "Copied czkawka_gui.ftl to czkawka_gui/i18n/$lang_code/" || true; \ [ -f "$lang_dir/czkawka_core.ftl" ] && mkdir -p "czkawka_core/i18n/$lang_code" && cp "$lang_dir/czkawka_core.ftl" "czkawka_core/i18n/$lang_code/" && echo "Copied czkawka_core.ftl to czkawka_core/i18n/$lang_code/" || true; \ [ -f "$lang_dir/krokiet.ftl" ] && mkdir -p "krokiet/i18n/$lang_code" && cp "$lang_dir/krokiet.ftl" "krokiet/i18n/$lang_code/" && echo "Copied krokiet.ftl to krokiet/i18n/$lang_code/" || true; \ + [ -f "$lang_dir/cedinia.ftl" ] && mkdir -p "cedinia/i18n/$lang_code" && cp "$lang_dir/cedinia.ftl" "cedinia/i18n/$lang_code/" && echo "Copied cedinia.ftl to cedinia/i18n/$lang_code/" || true; \ done rm -rf /tmp/czkawka_unpack @echo "Translations unpacked successfully" @@ -346,3 +353,13 @@ time_passes: cd czkawka_cli; RUSTFLAGS="-Ztime-passes" cargo +nightly rustc; cd ..; cargo clean cd krokiet; RUSTFLAGS="-Ztime-passes" cargo +nightly rustc; cd ..; + +test_heaptrack: + cd test && cargo build --profile rdebug + heaptrack test/target/rdebug/TEST + heaptrack_gui --appimage-extract-and-run "$(ls -t *.zst | head -n1)" + +heaptrack bin: + cargo build --profile rdebug --bin {{bin}} + heaptrack target/rdebug/{{bin}} + heaptrack_gui --appimage-extract-and-run "$(ls -t *.zst | head -n1)" diff --git a/krokiet/CLAUDE.md b/krokiet/CLAUDE.md new file mode 100644 index 000000000..6bf4c9684 --- /dev/null +++ b/krokiet/CLAUDE.md @@ -0,0 +1,220 @@ +# krokiet – Architecture Guide + +## Overview + +Primary desktop GUI. Built with [Slint](https://slint.dev/) (GPL-3.0). The UI +is declared in `ui/*.slint`; Rust wires all callbacks and drives the Slint data +models. All scanning logic lives in `czkawka_core`. + +--- + +## Source Layout + +``` +krokiet/ +├── build.rs # slint_build::compile("ui/main_window.slint") +├── src/ +│ ├── main.rs # Entry point: load settings, create MainWindow, +│ │ # wire all callbacks, run event loop +│ ├── shared_models.rs # SharedModels – Arc> of all tool results +│ ├── common.rs # Column index enums (IntDataDuplicateFiles, …) +│ │ # and sort index helpers +│ ├── localizer_krokiet.rs # flk! macro, LANGUAGE_LOADER_KROKIET +│ ├── set_initial_gui_info.rs # Asserts Slint combo lists == Rust enums +│ ├── set_initial_scroll_list_data_indexes.rs +│ ├── simpler_model.rs # Minimal serializable row struct for threading +│ ├── audio_player.rs # Play sound on scan completion +│ ├── notification_manager.rs # Desktop notifications +│ ├── create_calculate_task_size.rs # Background total-size calculator +│ ├── clear_outdated_video_thumbnails.rs +│ ├── connect_scan.rs # Routes scan to per-tool functions +│ ├── connect_scan/ # One file per tool (duplicate.rs, …) +│ ├── connect_progress_receiver.rs # Receives ProgressData → updates UI bar +│ ├── connect_row_selection.rs # Row checkbox logic, group handling +│ ├── connect_sort.rs # Column-header sort (string + int indices) +│ ├── connect_translation.rs # LANGUAGE_LIST, change_language(), translate_items() +│ ├── connect_compare.rs # Image comparison overlay +│ ├── connect_show_preview.rs # File preview / thumbnail +│ ├── connect_open.rs # Open file/folder in system app +│ ├── connect_save.rs # Export results via PrintResults +│ ├── connect_show_confirmation.rs # Confirmation popup before destructive action +│ ├── connect_directories_changes.rs +│ ├── connect_clean_cache.rs +│ ├── connect_tab_changed.rs +│ ├── connect_stop.rs # Sets stop_flag = true +│ ├── connect_rfd.rs # File picker (rfd) +│ ├── connect_select/ +│ │ ├── mod.rs +│ │ └── custom_select.rs # Advanced filter popup +│ ├── file_actions/ +│ │ ├── connect_delete.rs +│ │ ├── connect_move.rs +│ │ ├── connect_rename.rs +│ │ ├── connect_hardlink.rs +│ │ ├── connect_symlink.rs +│ │ ├── connect_optimize_video.rs +│ │ └── connect_clean_exif.rs +│ ├── model_operations/ +│ │ ├── mod.rs # Slint model ↔ thread-safe model conversion +│ │ └── model_processor.rs # Parallel item processing framework +│ └── settings/ +│ ├── mod.rs # Load/save JSON settings (11 presets) +│ ├── model.rs # BasicSettings, SettingsCustom structs +│ └── combo_box.rs # StringComboBoxItems + regenerate_items() +└── ui/ + ├── main_window.slint # Root component; imports everything; exports globals + ├── common.slint # Enums + structs: ActiveTab, SingleMainListModel, … + ├── gui_state.slint # Global GuiState (transient runtime state) + ├── settings.slint # Global Settings (persisted) + ├── translations.slint # Global Translations (all UI strings) + ├── callabler.slint # Global Callabler (all Rust→UI callbacks) + ├── left_side_panel.slint # Tool selector + tool settings sub-panel + ├── main_lists.slint # Results table (bound to model) + ├── action_buttons.slint # Scan / Stop / Select / Delete / … buttons + ├── bottom_panel.slint # Progress bar + error text + status + ├── progress.slint # Real-time scan progress widget + ├── preview.slint # File preview / thumbnail side panel + ├── image_compare.slint # Side-by-side image diff overlay + ├── settings_list.slint # Settings tab form + ├── tool_settings.slint # Per-tool options (hash alg, threshold, …) + ├── about.slint # About tab + ├── selectable_tree_view.slint # Custom tree widget for path lists + ├── fonts.slint # FontSizes global + ├── color_palette.slint # Dark-theme color definitions + └── popup_*.slint # 15 modal dialogs +``` + +--- + +## SharedModels (`src/shared_models.rs`) + +```rust +pub struct SharedModels { + pub shared_duplication_state: Option, + pub shared_empty_folders_state: Option, + // … one field per tool (14 total) +} +``` + +Created once in `main.rs` as `Arc>`, cloned and passed to +every callback that needs scan results (preview, compare, save, delete, …). + +Worker threads lock exclusively to **write** results after a scan finishes. +UI callbacks lock briefly to **read** results for previews / exports. + +--- + +## Scan Data Flow + +``` +1. User clicks Scan → on_scan_starting(active_tab) +2. connect_scan.rs: collect_settings() → ScanData → route to scan_() +3. scan_(): spawn worker thread + → create and configure tool struct + → tool.search(stop_flag, progress_sender) + → store tool in shared_models.lock() + → populate Slint VecModel + → app.upgrade_in_event_loop(|app| app.set__model(model)) +4. UI re-renders with new model +``` + +--- + +## Slint Data Model + +```rust +// ui/common.slint +export struct SingleMainListModel { + checked: bool, // row selected by user + header_row: bool, // group header + filled_header_row: bool, // header with formatted summary + selected_row: bool, // UI highlight + val_str: [string], // text columns + val_int: [int], // numeric columns (raw values for sorting) +} +``` + +Column indices are constants in `src/common.rs`: + +```rust +pub enum StrDataDuplicateFiles { Size, Name, Path, ModificationDate } +pub enum IntDataDuplicateFiles { ModificationDatePart1, ModificationDatePart2, + SizePart1, SizePart2 } +``` + +Slint cannot store `i64`, so dates and file sizes are split into two `i32` fields. + +--- + +## Translation System + +Slint has no native Fluent support. Workaround: +1. All UI text is bound to properties in the `Translations` global + (`ui/translations.slint`), not hardcoded in `.slint`. +2. `translate_items()` in `connect_translation.rs` (~350 lines) sets every + property via `flk!("key")` after language changes. +3. Language list defined as `LANGUAGE_LIST: &[Language]` in + `connect_translation.rs`. +4. Hardcoded combo-box lists in `.slint` files (e.g. `Settings.languages_list`) + are verified at startup against Rust enums via `assert_eq!` in + `set_initial_gui_info.rs` (workaround for [slint#7632](https://github.com/slint-ui/slint/issues/7632)). + +--- + +## Settings (`src/settings/`) + +Two-tier JSON system: + +| File | Content | +|------|---------| +| `~/.config/Czkawka/krokiet/base.json` | `BasicSettings` – default preset index, preset names, theme, window size | +| `~/.config/Czkawka/krokiet/preset_N.json` | `SettingsCustom` – paths, extensions, tool parameters | + +11 preset slots (indices 0–10). Slot 10 is reserved for CLI-mode overrides. +`StringComboBoxItems::regenerate_items()` builds all combo box option arrays +from Rust enums; used both for settings serialization and UI initialization. + +--- + +## Callback Registration Pattern + +```rust +let weak = app.as_weak(); +app.global::().on_some_action(move || { + let app = weak.upgrade().expect("MainWindow dropped while callback is still live"); + // use app … +}); +``` + +`expect()` is correct here: if the window is gone, no callback should fire. +Cross-thread updates use `weak.upgrade_in_event_loop(|app| { … })`. + +--- + +## Key Dependencies + +| Crate | Purpose | +|-------|---------| +| `slint` 1.15 | UI framework (GPL-3.0) | +| `czkawka_core` | Scanning engine | +| `i18n-embed` + `rust-embed` | Fluent translations | +| `crossbeam-channel` | Progress + result channels | +| `rayon` | Parallel result sorting | +| `serde_json` | Settings persistence | +| `image` | Thumbnail loading | +| `rfd` 0.17 | File picker (xdg-portal backend) | +| `notify-rust` | Desktop notifications | +| `rodio` | Scan-complete sound (optional `audio` feature) | +| `fontique` | Font discovery (dlopen, avoids C dep) | + +### Optional features + +- `audio` – scan-complete sound via `rodio` +- Renderer features: `winit_femtovg` (default), `winit_software` (default), + `skia_opengl`, `skia_vulkan`, etc. – select GPU backend at compile time +- `heif`, `libraw`, `libavif`, `xdg_portal_trash` – forwarded to `czkawka_core` + +### Build + +`build.rs` compiles `ui/main_window.slint` with style `fluent-dark` (overridable +via `SLINT_STYLE` env var). diff --git a/krokiet/Cargo.toml b/krokiet/Cargo.toml index deea88132..f4854c3c2 100644 --- a/krokiet/Cargo.toml +++ b/krokiet/Cargo.toml @@ -21,11 +21,12 @@ log = "0.4.22" serde = "1.0" serde_json = "1.0" humansize = "2.1" -image = "0.25" +image = { version = "0.25", default-features = false, features = ["jpeg", "png"] } rayon = "1.10" fs_extra = "1.3" # TODO replace with less buggy library num_enum = "0.7.5" regex = "1.11" +copypasta = "0.10" # Translations i18n-embed = { version = "0.16", features = ["fluent-system", "desktop-requester"] } @@ -33,7 +34,7 @@ i18n-embed-fl = "0.10" rust-embed = { version = "8.5", features = ["debug-embed"] } # Try to use only needed features from https://github.com/slint-ui/slint/blob/master/api/rs/slint/Cargo.toml#L23-L31 -#slint = { path = "/home/rafal/test/slint/api/rs/slint/", default-features = false, features = ["std", +#slint = { path = "/home/rafal/test/slint/api/rs/slint/", default-features = false, features = [ #slint = { git = "https://github.com/slint-ui/slint.git", default-features = false, features = [ slint = { version = "1.15.0", default-features = false, features = [ "std", @@ -45,7 +46,8 @@ rodio = { version = "0.22.0", default-features = false, features = ["playback", notify-rust = { version = "4" } # Easier cross-compilation of app to e.g. 32 bit os, by using dlopen instead of linking libraries at compile time -fontique = { version = "0.7.0", default-features = false, features = ["fontconfig-dlopen"] } +# Must match version used in slint +fontique = { version = "=0.7.0", default-features = false, features = ["fontconfig-dlopen", "std"] } [build-dependencies] #slint-build = { path = "/home/rafal/test/slint/api/rs/build/"} diff --git a/krokiet/README.md b/krokiet/README.md index bebacd88a..d7588089e 100644 --- a/krokiet/README.md +++ b/krokiet/README.md @@ -68,24 +68,6 @@ You should see output like: Slint: Build config: debug; Backend: software ``` -## Scaling the Application - -By default, the Slint application will automatically scale to match your system settings, but you can also manually set the scaling factor with the `SLINT_SCALE_FACTOR` environment variable: - -``` -SLINT_SCALE_FACTOR=2 cargo run -``` - -## Different Theme - -By default, Czkawka was created with the `fluent` theme in mind, but Slint also supports other themes, which are not officially supported by this app and may look broken. - -``` -SLINT_STYLE=cupertino-light cargo run -- --path . -SLINT_STYLE=cupertino-dark cargo run -- --path . -SLINT_STYLE=material-light cargo run -- --path . -SLINT_STYLE=material-dark cargo run -- --path . -``` ## Why create a new frontend instead of improving the existing Czkawka GTK 4 app? diff --git a/krokiet/i18n/ar/krokiet.ftl b/krokiet/i18n/ar/krokiet.ftl index d750139a3..fb8752d83 100644 --- a/krokiet/i18n/ar/krokiet.ftl +++ b/krokiet/i18n/ar/krokiet.ftl @@ -1,13 +1,13 @@ # In Rust translations rust_init_error_title = خطأ حرج أثناء بدء التطبيق -rust_init_error_message = - حدث خطأ حرج أثناء بدء التطبيق: - - { $error_message } - - قد يكون ذلك بسبب نقص أو تلف تعريفات OpenGL/Vulkan، أو تشغيل التطبيق في جهاز افتراضي أو خلل في Krokiet أو أحد مكتباته. - - يمكنك محاولة تشغيل إصدارات مختلفة (skia_opengl، skia_vulkan، femtovg_opengl - الافتراضي) أو مع مُسرِّع رسومي للبرامج لتحديد ما إذا كان ذلك يحل المشكلة. +rust_init_error_message = + حدث خطأ حرج أثناء بدء التطبيق: + + { $error_message } + + قد يكون ذلك بسبب نقص أو تلف تعريفات OpenGL/Vulkan، أو تشغيل التطبيق في جهاز افتراضي أو خلل في Krokiet أو أحد مكتباته. + + يمكنك محاولة تشغيل إصدارات مختلفة (skia_opengl، skia_vulkan، femtovg_opengl - الافتراضي) أو مع مُسرِّع رسومي للبرامج لتحديد ما إذا كان ذلك يحل المشكلة. rust_loaded_preset = تم تحميل الإعداد المسبق { $preset_idx } rust_file_already_exists = الملف "{ $file }" موجود بالفعل، ولن يتم الكتابة فوقه rust_error_removing_file_after_copy = خطأ أثناء حذف الملف "{ $file }" (بعد نسخه إلى قسم مختلف)، السبب: { $reason } @@ -114,7 +114,7 @@ rust_cache_processed_files = تمت معالجة ملفات التخزين ال rust_cache_entries_stats = تمت إزالة { $removed } من جميع { $all }، { $left } متبقية rust_cache_size_reduced = تم تقليل حجم ملفات التخزين المؤقت بنسبة { $size } rust_cache_time_elapsed = الوقت المنقضي: { $time } -rust_symlink_failed = Failed to symlink { $name } to { $target }, reason { $reason } +rust_symlink_failed = فشل في ربط { $name } إلى { $target }، سبب { $reason} rust_hardlink_failed = فشل ربط الروابط الصلبة { $name } بـ { $target }، والسبب { $reason } # Slint translations, but in arrays @@ -366,3 +366,49 @@ hardlink_confirmation_text = هل أنت متأكد من أنك تريد إنش softlink_button_text = سولت لينك softlink_text = إنشاء روابط رمزية softlink_confirmation_text = هل أنت متأكد من أنك تريد إنشاء روابط رمزية (symlinks) للعناصر المحددة؟ + +column_full_path = المسار الكامل +file_dialog_open = أغلق نافذة الحوار للمتابعة +selection_custom_select_unselect = تحديد/إلغاء تحديد مخصص +settings_similar_videos_preview_hint = يمكن رؤية المعاينة فقط عندما تكون خاصية "إنشاء صور مصغرة" مُفعَّلة، أو عندما تكون صورة مصغرة قد تم إنشاؤها بالفعل. +settings_show_notification_on_scan_completion_text = أظهر إشعارًا عند اكتمال المسح +settings_notification_feature_hint_text = متاح فقط عند التجميع مع ميزة الإشعارات +settings_notification_focused_hint_text = قد لا تظهر الإشعارات كنافذة منبثقة عندما يكون نافذة التطبيق هي النافذة النشطة +popup_custom_select_title_text = تحديد/إلغاء تحديد مخصص +popup_custom_select_button_text = اختر +popup_custom_unselect_button_text = إلغاء التحديد +popup_custom_column_name_header_text = عمود +popup_custom_filter_value_header_text = قيمة الفلتر (رمز بدل / تعبير نمطي) +popup_custom_case_sensitive_text = حساس لحالة الأحرف +popup_custom_leave_one_in_group_text = اختر جميع العناصر باستثناء عنصر واحد، في كل مجموعة +popup_custom_hint_str_text = أعمدة النص: أحرف البدل *name* /home/* *.rs +popup_custom_hint_int_text = الحجم [كيلوبايت] / الأعمدة الرقمية: >= 2048 < 512 = 0 (العوامل: >= <= > < =) +popup_custom_hint_date_text = أعمدة التاريخ: بتنسيق DD-MM-YYYY أو YYYY-MM-DD، مع إمكانية إضافة الوقت بتنسيق HH:MM:SS اختياريًا. مثال: >= 2020-01-01 أو < 31-12-2022 23:59:59 +compare_button_text = قارن +compare_back_text = رجوع +compare_prev_group_text = المجموعة السابقة +compare_next_group_text = المجموعة التالية +compare_swap_text = تبادل +compare_info_text = معلومات +compare_diff_text = الفرق +compare_loading_title_text = الرجاء الانتظار... +compare_cancel_text = إلغاء +compare_resolution_mismatch_text = دقات مختلفة - قد تكون النتائج المختلفة غير دقيقة +compare_computing_diff_text = جاري حساب الفروقات... +compare_info_file_name_text = اسم الملف +compare_info_path_text = المسار +compare_info_size_text = الحجم +compare_info_resolution_text = قرار +compare_info_modification_date_text = تاريخ التعديل +compare_loading_images_text = جاري تحميل الصور... +compare_cancelling_text = جارٍ الإلغاء، يرجى الانتظار... +context_menu_open_item_text = عنصر مفتوح +context_menu_open_parent_text = افتح المجلد الأب +context_menu_remove_from_results_text = إزالة من النتائج +context_menu_remove_all_from_folder_text = إزالة الكل من المجلد +context_menu_select_all_from_folder_text = اختر الكل من المجلد +context_menu_select_all_from_folder_except_one_text = تحديد الكل من المجلد (مع الاحتفاظ بواحد فقط) +context_menu_exclude_parent_folder_text = استبعاد المجلد الأب +context_menu_exclude_item_text = استبعاد العنصر +context_menu_copy_name_text = نسخ الاسم +context_menu_copy_parent_folder_path_text = انسخ مسار المجلد الأب \ No newline at end of file diff --git a/krokiet/i18n/bg/krokiet.ftl b/krokiet/i18n/bg/krokiet.ftl index ee57a31a5..0ddf404fc 100644 --- a/krokiet/i18n/bg/krokiet.ftl +++ b/krokiet/i18n/bg/krokiet.ftl @@ -1,13 +1,13 @@ # In Rust translations rust_init_error_title = Критична грешка по време на стартиране на приложението -rust_init_error_message = - Възникна критична грешка при стартиране на приложението: - - { $error_message } - - Това може да се дължи на липсващи или дефектни драйвери OpenGL/Vulkan, стартиране на приложението във виртуална машина или бъг в Krokiet или една от библиотеките му. - - Можете да опитате да стартирате различни версии (skia_opengl, skia_vulkan, femtovg_opengl - стандартната) или с софтуерен ренделер, за да видите дали това разрешава проблема. +rust_init_error_message = + Възникна критична грешка при стартиране на приложението: + + { $error_message } + + Това може да се дължи на липсващи или дефектни драйвери OpenGL/Vulkan, стартиране на приложението във виртуална машина или бъг в Krokiet или една от библиотеките му. + + Можете да опитате да стартирате различни версии (skia_opengl, skia_vulkan, femtovg_opengl - стандартната) или с софтуерен ренделер, за да видите дали това разрешава проблема. rust_loaded_preset = Заредена запазена настройка { $preset_idx } rust_file_already_exists = Файл "{ $file }" вече съществува и няма да бъде презаписан rust_error_removing_file_after_copy = Грешка при премахване на файла "{ $file }" (след копиране в различен дял), причина: { $reason } @@ -60,11 +60,11 @@ rust_found_duplicate_files = Намерени са { $items_found } дублир rust_found_duplicate_files_no_lost_space = Найдени са { $items_found } дублиращи файлове в групи { $groups } във времето { $time } rust_found_big_files = Намерени { $items_found } големи файлове с размер { $size } в течност на { $time } rust_found_exif_files = Намерени { $items_found } файла(а) с EXIF данни в { $time } -rust_cannot_load_preset = Не може да се зареди или смени preset { $preset_idx } - причина: { $reason }. Ще се използват настройки по подразбиране +rust_cannot_load_preset = Не може да се зареди или смени preset { $preset_idx } – причина: { $reason }. Ще се използват настройки по подразбиране rust_saved_preset = Preset { $preset_idx } е запазен -rust_cannot_save_preset = Не може да се запази preset { $preset_idx } - причина: { $reason } +rust_cannot_save_preset = Не може да се запази preset { $preset_idx } – причина: { $reason } rust_reset_preset = Preset { $preset_idx } е нулиран -rust_cannot_create_output_folder = Не може да се създаде изходна папка { $output_folder } - причина: { $error } +rust_cannot_create_output_folder = Не може да се създаде изходна папка { $output_folder } – причина: { $error } rust_delete_summary = Изтрих { $deleted } стойност(и), не успях да убягна { $failed } стойности, от общия брой { $total } стойности rust_rename_summary = Променени { $renamed } стойности, неуспешно променени { $failed } стойности, от общия брой { $total } стойности rust_move_summary = Пренесли са { $moved } стойност(и), не успяхме да пренесем { $failed } стойност(и) от общия брой на { $total } стойност(и) @@ -369,3 +369,49 @@ hardlink_confirmation_text = Наистина ли искате да създа softlink_button_text = Softlink softlink_text = Създай символични връзки softlink_confirmation_text = Наистина ли искате да създадете символики (symlinks) за избраните елементи? + +column_full_path = Пълен път +file_dialog_open = За да продължите, затворете диалоговия прозорец +selection_custom_select_unselect = Персонализирано избиране/премахване на избор +settings_similar_videos_preview_hint = Предварителен преглед е видим само когато опцията "Генериране на миниатюри" е активирана, или когато вече е генерирана миниатюра. +settings_show_notification_on_scan_completion_text = Показвайте известие, когато сканирането приключи +settings_notification_feature_hint_text = Налично само при компилация с активирана функция за уведомления +settings_notification_focused_hint_text = Уведомлението може да не се появи като изскачащ прозорец, когато прозорецът на приложението е активен +popup_custom_select_title_text = Персонализиран избор / Отмяна на избор +popup_custom_select_button_text = Изберете +popup_custom_unselect_button_text = Премахнете селекцията +popup_custom_column_name_header_text = Колона +popup_custom_filter_value_header_text = Стойност на филтъра (символ за търсене / регулярен израз) +popup_custom_case_sensitive_text = Чувствителен към главни букви +popup_custom_leave_one_in_group_text = Изберете всички елементи, с изключение на един, във всяка група +popup_custom_hint_str_text = Колони от текст: символи-заместващи знаци *name* /home/* *.rs +popup_custom_hint_int_text = Размер [KB] / числови колони: >= 2048 < 512 = 0 (оператори: >= <= > < =) +popup_custom_hint_date_text = Колони с дати: DD-MM-YYYY или YYYY-MM-DD, опционално време HH:MM:SS, например: >= 2020-01-01 или < 31-12-2022 23:59:59 +compare_button_text = Сравнете +compare_back_text = Назад +compare_prev_group_text = Предишна група +compare_next_group_text = Следваща група +compare_swap_text = Размени +compare_info_text = Информация +compare_diff_text = Разлика +compare_loading_title_text = Моля, изчакайте... +compare_cancel_text = Отказ +compare_resolution_mismatch_text = Различни резолюции - различните резултати могат да бъдат неточни +compare_computing_diff_text = Изчислява се разликата... +compare_info_file_name_text = Име на файла +compare_info_path_text = Път +compare_info_size_text = Размер +compare_info_resolution_text = Резолюция +compare_info_modification_date_text = Дата на последната промяна +compare_loading_images_text = Зареждане на изображения... +compare_cancelling_text = Отменяне, моля, изчакайте... +context_menu_open_item_text = Отворена позиция +context_menu_open_parent_text = Отворете родителската папка +context_menu_remove_from_results_text = Премахни от резултатите +context_menu_remove_all_from_folder_text = Изтрий всички от папката +context_menu_select_all_from_folder_text = Изберете всички от папката +context_menu_select_all_from_folder_except_one_text = Изберете всички от папката (запазете само един) +context_menu_exclude_parent_folder_text = Изключи родителската папка +context_menu_exclude_item_text = Изключи елемент +context_menu_copy_name_text = Копирай името +context_menu_copy_parent_folder_path_text = Копирай пътя до родителската папка \ No newline at end of file diff --git a/krokiet/i18n/cs/krokiet.ftl b/krokiet/i18n/cs/krokiet.ftl index ba82f5dc0..deaf74b44 100644 --- a/krokiet/i18n/cs/krokiet.ftl +++ b/krokiet/i18n/cs/krokiet.ftl @@ -1,224 +1,225 @@ # In Rust translations -rust_init_error_title = Kritická chyba při spuštění aplikace -rust_init_error_message = - Kritická chyba se vyskytla při spuštění aplikace: - - { $error_message } - - Může to být způsobeno chybějícími nebo nefunkčními ovladači OpenGL/Vulkan, spuštěním aplikace ve virtuálním stroji nebo chybou v Krokiet nebo jedné z jeho knihoven. - - Můžete zkusit spustit různé buildy (skia_opengl, skia_vulkan, femtovg_opengl - výchozí) nebo s grafickým renderem, abyste zjistili, zda to vyřeší problém. -rust_loaded_preset = Načtená předvolba { $preset_idx } -rust_file_already_exists = Soubor "{ $file }" již existuje a nebude přepsán -rust_error_removing_file_after_copy = Chyba při odstraňování souboru "{ $file }" (po kopírování do jiného oddílu), důvod: { $reason } -rust_error_copying_file = Chyba při kopírování "{ $input }" do "{ $output }", důvod: { $reason } -rust_loading_tags_cache = Načítání mezipaměti značek -rust_loading_fingerprints_cache = Načítání mezipaměti otisků prstů +rust_init_error_title = Kritická chyba při spouštění aplikace +rust_init_error_message = + Při spouštění aplikace se vyskytla kritická chyba: + + { $error_message } + + Může to být způsobeno chybějícími nebo nefunkčními ovladači OpenGL/Vulkan, spuštěním aplikace ve virtuálním stroji nebo chybou v Krokiet nebo jedné z jeho knihoven. + + Můžete zkusit spustit různá sestavení (skia_opengl, skia_vulkan, femtovg_opengl – výchozí) nebo se softwarovým vykreslováním, abyste zjistili, zda to problém vyřeší. +rust_loaded_preset = Načtené přednastavení { $preset_idx } +rust_file_already_exists = Soubor „{ $file }“ už existuje a nebude přepsán +rust_error_removing_file_after_copy = Chyba při odstraňování souboru „{ $file }“ (po zkopírování na jiný oddíl) – důvod: { $reason } +rust_error_copying_file = Chyba při kopírování „{ $input }“ do „{ $output }“ – důvod: { $reason } +rust_loading_tags_cache = Načítání mezipaměti štítků +rust_loading_fingerprints_cache = Načítání mezipaměti otisků rust_saving_tags_cache = Ukládání mezipaměti štítků -rust_saving_fingerprints_cache = Ukládání mezipaměti otisků prstů +rust_saving_fingerprints_cache = Ukládání mezipaměti otisků rust_loading_prehash_cache = Načítání mezipaměti rozpoznání rust_saving_prehash_cache = Ukládání mezipaměti rozpoznání -rust_loading_hash_cache = Načítání hash keše -rust_saving_hash_cache = Ukládání keše hash -rust_loading_exif_cache = Načítá EXIF mezipaměť -rust_saving_exif_cache = Ukládání EXIF mezipaměti -rust_scanning_name = Skenování názvu { $entries_checked } souboru -rust_scanning_size_name = Velikost prohledávání a název souboru { $entries_checked } -rust_scanning_size = Skenování velikosti { $entries_checked } souboru +rust_loading_hash_cache = Načítání mezipaměti otisků +rust_saving_hash_cache = Ukládání mezipaměti otisků +rust_loading_exif_cache = Načítání mezipaměti EXIF +rust_saving_exif_cache = Ukládání mezipaměti EXIF +rust_scanning_name = Skenování názvu souboru { $entries_checked } +rust_scanning_size_name = Skenování velikosti a názvu souboru { $entries_checked } +rust_scanning_size = Skenování velikosti souboru { $entries_checked } rust_scanning_file = Skenování { $entries_checked } souboru rust_scanning_folder = Skenování složky { $entries_checked } -rust_checked_tags = Kontrolované štítky { $items_stats } -rust_checked_content = Kontrolovaný obsah { $items_stats } ({ $size_stats }) -rust_compared_tags = Porovnávané štítky { $items_stats } -rust_compared_content = Porovnávaný obsah { $items_stats } -rust_hashed_images = Hashed { $items_stats } obrázky ({ $size_stats }) -rust_compared_image_hashes = Porovnávané hashy obrázků { $items_stats } -rust_hashed_videos = Hashované { $items_stats } videa -rust_created_thumbnails = Vytvořené náhledy pro videa { $items_stats } -rust_checked_files = Kontrola { $items_stats } souboru ({ $size_stats }) -rust_checked_files_bad_extensions = Kontrolovaný soubor { $items_stats } +rust_checked_tags = Zkontrolovány štítky { $items_stats } +rust_checked_content = Zkontrolován obsah { $items_stats } ({ $size_stats }) +rust_compared_tags = Porovnány štítky { $items_stats } +rust_compared_content = Porovnán obsah { $items_stats } +rust_hashed_images = Vypočítány otisky { $items_stats } obrázků ({ $size_stats }) +rust_compared_image_hashes = Porovnány otisky obrázků { $items_stats } +rust_hashed_videos = Spočítány otisky { $items_stats } videí +rust_created_thumbnails = Vytvořeny náhledy pro { $items_stats } videí +rust_checked_files = Zkontrolován { $items_stats } soubor ({ $size_stats }) +rust_checked_files_bad_extensions = Zkontrolován soubor { $items_stats } rust_checked_files_bad_names = Zkontrolován soubor { $items_stats } rust_checked_videos = Zkontrolováno { $items_stats } videí ({ $size_stats }) -rust_analyzed_partial_hash = Analyzováno částečné hash { $items_stats } souborů ({ $size_stats }) -rust_analyzed_full_hash = Analyzováno plné hash { $items_stats } souborů ({ $size_stats }) -rust_failed_to_rename_file = Nepodařilo se přejmenovat soubor { $old_path } na { $new_path }, chyba: { $error } -rust_no_included_paths = Nemožno spustit skenovanie, ak nie sú nastavené zahrnuté cesty. -rust_all_paths_referenced = Nemožno spustit skenovanie, keď sú všetky zahrnuté cesty nastavené ako referenčné cesty, potrebujete vypnúť políčko pre odkaz pre vstupnú cestu. -rust_found_empty_folders = Nalezeno { $items_found } prázdné složky v { $time } -rust_found_empty_files = Nalezeno { $items_found } prázdných souborů v { $time } -rust_found_similar_images = Nalezeno { $items_found } podobných obrázků v { $groups } skupinách v { $time } -rust_found_similar_videos = Nalezeno { $items_found } podobných video souborů v { $groups } skupinách v { $time } -rust_found_similar_music_files = Nalezeno { $items_found } podobných hudebních souborů v { $groups } skupinách v { $time } -rust_found_invalid_symlinks = Nalezeno { $items_found } neplatných symbolických odkazů v { $time } -rust_found_temporary_files = Nalezeno { $items_found } dočasných souborů v { $time } -rust_no_file_type_selected = Nelze najít poškozené soubory bez vybraného typu souboru. -rust_found_broken_files = Nalezeno { $items_found } rozbitých souborů s { $size } v { $time } -rust_found_bad_extensions = Nalezeno { $items_found } souborů s chybnými příponami v { $time } -rust_found_bad_names = Nalezlo se { $items_found } souborů s chybnými názvy v { $time } -rust_found_video_optimizer = Nalezlo { $items_found } souborů pro optimalizaci v { $time } -rust_found_duplicate_files = Nalezeno { $items_found } duplicitních souborů v { $groups } skupinách při převzetí { $size } v { $time } -rust_found_duplicate_files_no_lost_space = Nalezeno { $items_found } duplicitních souborů v { $groups } skupinách v { $time } -rust_found_big_files = Nalezeno { $items_found } velkých souborů o velikosti { $size } v { $time } -rust_found_exif_files = Nalezlo { $items_found } souborů s EXIF daty v { $time } -rust_cannot_load_preset = Nelze změnit a načíst předvolbu { $preset_idx } - důvod { $reason }, použijte místo toho výchozí nastavení -rust_saved_preset = Uložená předvolba { $preset_idx } -rust_cannot_save_preset = Nelze uložit předvolbu { $preset_idx } - důvod { $reason } -rust_reset_preset = Resetovat výchozí nastavení { $preset_idx } -rust_cannot_create_output_folder = Nelze vytvořit výstupní složku { $output_folder }, důvod: { $error } -rust_delete_summary = Smazáno { $deleted } položek, nepodařilo se odstranit { $failed } položky, z { $total } položek -rust_rename_summary = Přejmenováno { $renamed } položek, nepodařilo se přejmenovat { $failed } položky, z { $total } položek -rust_move_summary = Přesunuto { $moved } položek, nelze přesunout { $failed } položky, z { $total } položek -rust_hardlink_summary = Tvrdě odkazované { $hardlinked } položky, selhalo tvrdé odkazování { $failed } položek, z { $total } položek -rust_symlink_summary = Symbolicky odkazované { $symlinked } položky, selhalo symbolické odkazování { $failed } položek, z celkem { $total } položek -rust_optimize_video_summary = Optimalizované { $optimized } videa, neoptimalizované { $failed } videa, z celkem { $total } videí -rust_clean_exif_summary = Vyčištěné EXIF z { $cleaned } souborů, nebylo možné vyčistit { $failed } souborů, z celkem { $total } souborů +rust_analyzed_partial_hash = Analyzován částečný otisk { $items_stats } souborů ({ $size_stats }) +rust_analyzed_full_hash = Analyzován úplný otisk { $items_stats } souborů ({ $size_stats }) +rust_failed_to_rename_file = Nepodařilo se přejmenovat soubor { $old_path } na { $new_path } – chyba: { $error } +rust_no_included_paths = Není možné spustit sken, pokud nejsou nastavené žádné popisy umístění, které do něho zahrnout. +rust_all_paths_referenced = Není možné spustit sken, pokud jsou všechny do něho zahrnuté popisy umístění natavené jako ty odkazované. Je třeba zrušit příslušné zaškrtnutí vedle zadání popisu umístění. +rust_found_empty_folders = Nalezeno { $items_found } prázdných složek za { $time } +rust_found_empty_files = Nalezeno { $items_found } prázdných souborů za { $time } +rust_found_similar_images = Nalezeno { $items_found } podobajících se obrázků v { $groups } skupinách za { $time } +rust_found_similar_videos = Nalezeno { $items_found } podobajících se video souborů v { $groups } skupinách za { $time } +rust_found_similar_music_files = Nalezeno { $items_found } podobajících se hudebních souborů v { $groups } skupinách za { $time } +rust_found_invalid_symlinks = Nalezeno { $items_found } neplatných symbolických odkazů za { $time } +rust_found_temporary_files = Nalezeno { $items_found } dočasných souborů za { $time } +rust_no_file_type_selected = Pokud není vybrán žádný typ souboru, není možné vyhledat poškozené soubory. +rust_found_broken_files = Nalezeno { $items_found } rozbitých souborů zabírajících { $size } za { $time } +rust_found_bad_extensions = Nalezeno { $items_found } souborů s nesprávnými příponami za { $time } +rust_found_bad_names = Nalezeno { $items_found } souborů s chybně napsanými názvy za { $time } +rust_found_video_optimizer = Nalezeno { $items_found } souborů pro optimalizaci za { $time } +rust_found_duplicate_files = Nalezeno { $items_found } duplicitních souborů v { $groups } skupinách, zabírajících{ $size } za { $time } +rust_found_duplicate_files_no_lost_space = Nalezeno { $items_found } duplicitních souborů v { $groups } skupinách za { $time } +rust_found_big_files = Nalezeno { $items_found } velkých souborů o velikosti { $size } za { $time } +rust_found_exif_files = Nalezeno { $items_found } souborů s EXIF metadaty za { $time } +rust_cannot_load_preset = Nebylo možné změnit a načíst přednastavení { $preset_idx } – důvod: { $reason }. Namísto toho budou použita výchozí nastavení +rust_saved_preset = Uloženo přednastavení { $preset_idx } +rust_cannot_save_preset = Nebylo možné uložit přednastavení { $preset_idx } – důvod: { $reason } +rust_reset_preset = Vrátit přednastavení na výchozí hodnoty { $preset_idx } +rust_cannot_create_output_folder = Nebylo možné vytvořit výstupní složku { $output_folder } – důvod: { $error } +rust_delete_summary = Smazáno { $deleted } položek – nepodařilo se odstranit { $failed } položek z { $total } položek +rust_rename_summary = Přejmenováno { $renamed } položek – nepodařilo se přejmenovat { $failed } položek z { $total } položek +rust_move_summary = Přesunuto { $moved } položek, nepodařilo se přesunout { $failed } položek z { $total } položek +rust_hardlink_summary = Vytvořeny pevné odkazy na { $hardlinked } položek – nepodařilo se pro { $failed } položek z { $total } položek +rust_symlink_summary = Vytvořeny symbolické odkazy na { $symlinked } položek – nepodařilo se pro { $failed } položek z { $total } položek +rust_optimize_video_summary = Optimalizováno { $optimized } videí – nepodařilo se u { $failed } videí z { $total } videí +rust_clean_exif_summary = Odstraněna EXIF metadata z { $cleaned } souborů – nepodařilo se u { $failed } souborů z { $total } souborů rust_deleting_files = Mazání { $items_stats } souboru ({ $size_stats }) rust_deleting_no_size_files = Mazání { $items_stats } souboru rust_renaming_files = Přejmenování { $items_stats } souboru rust_moving_files = Přesouvání { $items_stats } souboru ({ $size_stats }) rust_moving_no_size_files = Přesouvání { $items_stats } souboru -rust_hardlinking_files = Tvrdé odkazování { $items_stats } soubor ({ $size_stats }) -rust_hardlinking_no_size_files = Tvrdé odkazování { $items_stats } soubor -rust_symlinking_files = Symlinkování souboru { $items_stats } ({ $size_stats }) -rust_symlinking_no_size_files = Symlink { $items_stats } soubor -rust_optimizing_videos = Optimalizovaný { $items_stats } video ({ $size_stats }) -rust_optimizing_no_size_videos = Optimalizovaný { $items_stats } video -rust_cleaning_exif = Odstraňování EXIF z souboru { $items_stats } ({ $size_stats }) -rust_cleaning_no_size_exif = Odstraňování EXIF z souboru { $items_stats } -rust_no_files_deleted = Pro smazání nejsou vybrány žádné soubory ani složky -rust_no_files_renamed = Pro přejmenování nejsou vybrány žádné soubory ani složky -rust_no_files_moved = Pro přesunutí nejsou vybrány žádné soubory ani složky -rust_no_files_hardlinked = Žádné soubory ani složky vybrány pro tvrdé odkazování -rust_no_files_symlinked = Žádné soubory ani složky vybrány pro symlinkování -rust_no_videos_optimized = Žádné videa vybrány pro optimalizaci -rust_no_exif_cleaned = Žádné soubory vybrány pro čištění EXIF -rust_extracted_exif_tags = Extrahované EXIF tagy z { $items_stats } souborů ({ $size_stats }) -rust_delete_confirmation = Jste si jisti, že chcete odstranit vybrané položky? -rust_delete_confirmation_number_simple = { $items } vybraných položek. -rust_delete_confirmation_number_groups = { $items } položek vybráno ve skupinách { $groups }. -rust_delete_confirmation_selected_all_in_group = Všechny položky vybrané ve skupinách { $groups }. -rust_move_confirmation = Jste si jistí, že chcete přesunout vybrané položky? -rust_move_confirmation_number_simple = { $items } položek vybráno. -rust_clean_exif_confirmation = Jste si jisti, že chcete odstranit EXIF data z vybraných položek? -rust_clean_exif_confirmation_number_simple = { $items } položek vybráno. +rust_hardlinking_files = Vytváření pevného odkazu { $items_stats } souboru ({ $size_stats }) +rust_hardlinking_no_size_files = Vytváření pevného odkazu na { $items_stats } soubor +rust_symlinking_files = Vytváření symbolického odkazu na soubor { $items_stats } ({ $size_stats }) +rust_symlinking_no_size_files = Vytváření symbolického odkazu na { $items_stats } soubor +rust_optimizing_videos = Optimalizováno { $items_stats } video ({ $size_stats }) +rust_optimizing_no_size_videos = Optimalizováno { $items_stats } video +rust_cleaning_exif = Odstraňování EXIF ze souboru { $items_stats } ({ $size_stats }) +rust_cleaning_no_size_exif = Odstraňování EXIF ze souboru { $items_stats } +rust_no_files_deleted = Nevybrány žádné soubory ani složky pro smazání +rust_no_files_renamed = Nevybrány žádné soubory ani složky pro přejmenování +rust_no_files_moved = Nevybrány žádné soubory ani složky pro přesunutí +rust_no_files_hardlinked = Nevybrány žádné soubory ani složky pro vytvoření pevných odkazů +rust_no_files_symlinked = Nevybrány žádné soubory ani složky pro vytvoření symbolických odkazů +rust_no_videos_optimized = Nevybrána žádná videa pro optimalizaci +rust_no_exif_cleaned = Nevybrány žádné soubory pro ostranění EXIF +rust_extracted_exif_tags = Vyzískány EXIF štítky z { $items_stats } souborů ({ $size_stats }) +rust_delete_confirmation = Opravdu chcete označené položky smazat? +rust_delete_confirmation_number_simple = Vybráno { $items } položek. +rust_delete_confirmation_number_groups = Vybráno { $items } položek v { $groups } skupinách. +rust_delete_confirmation_selected_all_in_group = Vybrány všechny položky v { $groups } skupinách. +rust_move_confirmation = Opravdu chcete označené položky přesunout? +rust_move_confirmation_number_simple = Vybráno { $items } položek. +rust_clean_exif_confirmation = Opravdu chcete z označených položek odstranit EXIF metadata? +rust_clean_exif_confirmation_number_simple = Vybráno { $items } položek. clean_exif_overwrite_files_text = Přepsat soubory -rust_optimize_video_confirmation = Jste si jistí, že chcete optimalizovat vybrané videa? -rust_optimize_video_confirmation_number_simple = { $items } položek vybráno. -rust_hardlink_confirmation = Jste si jisti, že chcete vytvořit tvrdé odkazy pro vybrané položky? -rust_hardlink_confirmation_number_simple = { $items } položek vybráno. -rust_symlink_confirmation = Jste si jisti, že chcete vytvořit symlinky pro vybrané položky? -rust_symlink_confirmation_number_simple = { $items } položek vybráno. -rust_rename_confirmation = Jste si jisti, že chcete přejmenovat vybrané položky? -rust_rename_confirmation_number_simple = { $items } položek vybráno. -rust_cache_entries_stats = Odstraněny { $removed } záznamy z { $all }, { $left } zbývá -rust_cache_size_reduced = Snížená velikost souborů mezipaměti o { $size } -rust_cache_time_elapsed = Čas uplynul: { $time } -rust_symlink_failed = Failed to symlink { $name } to { $target }, reason { $reason } -rust_hardlink_failed = Selhalo vytvoření pevného odkazu { $name } na { $target }, důvod { $reason } +rust_optimize_video_confirmation = Opravdu chcete označená videa optimalizovat? +rust_optimize_video_confirmation_number_simple = Vybráno { $items } položek. +rust_hardlink_confirmation = Opravdu chcete na označené položky vytvořit pevné odkazy? +rust_hardlink_confirmation_number_simple = Vybráno { $items } položek. +rust_symlink_confirmation = Opravdu chcete na vybrané položky vytvořit symbolické odkazy? +rust_symlink_confirmation_number_simple = Vybráno { $items } položek. +rust_rename_confirmation = Opravdu chcete označené položky přejmenovat? +rust_rename_confirmation_number_simple = Vybráno { $items } položek. +rust_cache_processed_files = Zpracováno { $files } souborů mezipaměti +rust_cache_entries_stats = Odstraněno { $removed } položek ze všech { $all }, { $left } zbývá +rust_cache_size_reduced = Velikost souborů mezipaměti snížena o { $size } +rust_cache_time_elapsed = Uplynulý čas: { $time } +rust_symlink_failed = Nepodařilo se vytvořit symbolický odkaz { $name } na { $target } – důvod: { $reason } +rust_hardlink_failed = Nepodařilo se vytvořit pevný odkaz { $name } na { $target } – důvod: { $reason } # Slint translations, but in arrays column_selection = Výběr column_size = Velikost column_file_name = Název souboru -column_path = Cesta +column_path = Popis umístění column_modification_date = Datum změny column_similarity = Podobnost column_dimensions = Rozměry -column_new_dimensions = Nové dimenze -column_title = Hlava 1 - Celkem +column_new_dimensions = Nové rozměry +column_title = Název column_artist = Umělec column_year = Rok -column_bitrate = Bitová sazba +column_bitrate = Bitová rychlost column_length = Délka column_genre = Žánr column_type_of_error = Typ chyby column_symlink_name = Název symbolického odkazu column_symlink_folder = Složka symbolického odkazu -column_destination_path = Cílová cesta -column_current_extension = Aktuální rozšíření -column_proper_extension = Řádné rozšíření -column_fps = FPS +column_destination_path = Cílový popis umístění +column_current_extension = Stávající přípona +column_proper_extension = Správná přípona +column_fps = Snímků/s column_codec = Kodek column_duration = Doba trvání -column_exif_tags = EXIF tagy +column_exif_tags = EXIF štítky column_new_name = Nový název # Slint translations -ok_button = Dobře +ok_button = OK cancel_button = Zrušit do_you_want_to_continue = Chcete pokračovat? -main_window_title = Krokiet - Čistič dat +main_window_title = Krokiet – čistič dat scan_button = Skenovat stop_button = Zastavit stop_text = Zastavit select_button = Vybrat move_button = Přesunout -delete_button = Vymazat +delete_button = Smazat save_button = Uložit sort_button = Seřadit rename_button = Přejmenovat -motto = Tento program je zdarma a bude vždy používán.\nPodrobnosti naleznete v licenci MIT/GPL. -unicorn = Nemusíte se podívat na jednorožce, ale jednorožec se na vás vždy dívá. +motto = Tuto aplikaci je možné používat bezplatně (nyní i v budoucnu).\nPodrobnosti viz licence MIT/GPL. +unicorn = Je možné, že se nedíváte na jednorožce, ale jednorožec se vždy dívá na vás. repository = Repozitář -instruction = Instrukce +instruction = Pokyny donation = Darovat translation = Překlad -included_paths = Zahrnuté cesty -excluded_paths = Vyloučené cesty +included_paths = Zahrnuté popisy umístění +excluded_paths = Vynechané popisy umístění ref = Pozn -path = Cesta -tool_duplicate_files = Duplikovat soubory +path = Popis umístění +tool_duplicate_files = Duplicitní soubory tool_empty_folders = Prázdné složky tool_big_files = Velké soubory tool_empty_files = Prázdné soubory tool_temporary_files = Dočasné soubory -tool_similar_images = Podobné obrázky -tool_similar_videos = Podobná videa -tool_music_duplicates = Hudební duplikáty +tool_similar_images = Podobající se obrázky +tool_similar_videos = Podobající se videa +tool_music_duplicates = Hudební duplicity tool_invalid_symlinks = Neplatné symbolické odkazy -tool_broken_files = Rozbité soubory -tool_bad_extensions = Špatná rozšíření -tool_bad_names = Špatná jména -tool_video_optimizer = Video Optimalizátor -tool_exif_remover = Odstraňovač EXIF -sort_by_full_name = Seřadit podle celého jména +tool_broken_files = Poškozené soubory +tool_bad_extensions = Nesprávné přípony +tool_bad_names = Nesprávně napsané názvy +tool_video_optimizer = Optimaliz. videí +tool_exif_remover = Odstraň. EXIF metadat +sort_by_full_name = Seřadit podle celého názvu sort_by_selection = Seřadit podle výběru sort_reverse = Obrácené pořadí selection_all = Vybrat vše -selection_deselect_all = Zrušit výběr všech +selection_deselect_all = Zrušit výběr všeho selection_invert_selection = Invertovat výběr -selection_the_biggest_size = Vyberte největší velikost -selection_the_biggest_resolution = Vyberte největší rozlišení -selection_the_smallest_size = Vyberte nejmenší velikost -selection_the_smallest_resolution = Vyberte nejmenší rozlišení +selection_the_biggest_size = Vybrat nejvyšší velikost +selection_the_biggest_resolution = Vybrat nejvyšší rozlišení +selection_the_smallest_size = Vybrat nejnižší velikost +selection_the_smallest_resolution = Vybrat nejmenší rozlišení selection_newest = Vybrat nejnovější -selection_oldest = Vyberte nejstarší -selection_shortest_path = Vyberte nejkratší cestu -selection_longest_path = Vyberte nejdelší cestu +selection_oldest = Vybrat nejstarší +selection_shortest_path = Vybrat nejkratší popis umístění +selection_longest_path = Vybrat nejdelší popis umístění stage_current = Aktuální fáze: stage_all = Všechny fáze: -subsettings = Podnastavení -subsettings_images_hash_size = Velikost hash -subsettings_images_resize_algorithm = Změnit velikost algoritmu -subsettings_images_ignore_same_size = Ignorovat obrázky se stejnou velikostí -subsettings_images_max_difference = Maximální rozdíl -subsettings_images_duplicates_hash_type = Typ Hash +subsettings = Dílčí nastavení +subsettings_images_hash_size = Velikost otisku +subsettings_images_resize_algorithm = Algoritmus pro změnu rozlišení +subsettings_images_ignore_same_size = Ignorovat stejně velké obrázky +subsettings_images_max_difference = Rozdíl nejvýše +subsettings_images_duplicates_hash_type = Typ otisku subsettings_duplicates_check_method = Metoda kontroly -subsettings_duplicates_name_case_sensitive = Citlivost písmen (pouze režimy jména) +subsettings_duplicates_name_case_sensitive = Rozlišovat VELKÁ/malá písmena (pouze režimy pracující s názvy) subsettings_biggest_files_sub_method = Metoda subsettings_biggest_files_sub_number_of_files = Počet souborů -subsettings_videos_max_difference = Maximální rozdíl -subsettings_videos_ignore_same_size = Ignorovat videa se stejnou velikostí +subsettings_videos_max_difference = Rozdíl nejvýše +subsettings_videos_ignore_same_size = Ignorovat stejně velká videa subsettings_music_audio_check_type = Typ kontroly zvuku subsettings_music_approximate_comparison = Přibližné porovnání štítků subsettings_music_compared_tags = Porovnávané štítky -subsettings_music_title = Hlava 1 - Celkem +subsettings_music_title = Název subsettings_music_artist = Umělec -subsettings_music_bitrate = Bitová供不应求率 +subsettings_music_bitrate = Bitová rychlost subsettings_music_genre = Žánr subsettings_music_year = Rok subsettings_music_length = Délka -subsettings_music_max_difference = Maximální rozdíl +subsettings_music_max_difference = Rozdíl nejvýše subsettings_music_minimal_fragment_duration = Minimální doba trvání fragmentu subsettings_music_compare_fingerprints_only_with_similar_titles = Porovnat v rámci skupin podobných názvů subsettings_broken_files_type = Typ souborů ke kontrole @@ -227,143 +228,187 @@ subsettings_broken_files_pdf = PDF subsettings_broken_files_archive = Archiv subsettings_broken_files_image = Obrázek subsettings_broken_files_video = Video -subsettings_broken_files_video_info = Používá ffmpeg/ffprobe. Poměrně pomalé a může detekovat pedantické chyby i když se soubor hraje v pořádku. -subsettings_bad_names_issues = Kontrola jmen souborů -subsettings_bad_names_uppercase_extension = Velké rozšíření -subsettings_bad_names_uppercase_extension_hint = Najde soubory s velkými písmeny v příkladu názvu souboru (např. .JPG, .Mp3) a navrhne verzi s malými písmeny -subsettings_bad_names_emoji_used = Emoji v jméně -subsettings_bad_names_emoji_used_hint = Najde soubory s emoji znaky (😀, 🎉, atd.) v názvu a navrhuje je odstranit -subsettings_bad_names_space_at_start_end = Vedení/závěrečné mezery -subsettings_bad_names_space_at_start_end_hint = Najde soubory s mezerami na začátku nebo na konci názvu a navrhuje je oříznout -subsettings_bad_names_non_ascii = Nekódované znaky -subsettings_bad_names_non_ascii_hint = Najde ne-ASCII znaky (ą, ć, ñ, atd.) a navrhuje je nahradit ASCII ekvivalenty (a, c, n) nebo je odstranit, pokud neexistuje mapování +subsettings_broken_files_video_info = Používá ffmpeg/ffprobe. Docela pomalé a může detekovat pedantické chyby i když se soubor přehrává v pořádku. +subsettings_bad_names_issues = Kontroly názvů souborů +subsettings_bad_names_uppercase_extension = Přípona velkými písmeny +subsettings_bad_names_uppercase_extension_hint = Najde soubory s velkými písmeny v příponě (např. .JPG, .Mp3) a navrhne verzi s malými písmeny +subsettings_bad_names_emoji_used = Emoji v názvu +subsettings_bad_names_emoji_used_hint = Najde soubory s emoji znaky (😀, 🎉, atd.) v názvu a navrhne jejich odstranění +subsettings_bad_names_space_at_start_end = Mezery na začátku/konci +subsettings_bad_names_space_at_start_end_hint = Najde soubory s mezerami na začátku nebo na konci názvu a navrhne jejich oříznutí +subsettings_bad_names_non_ascii = Znaky z ne-ASCII kódování +subsettings_bad_names_non_ascii_hint = Najde ne-ASCII znaky (ą, ć, ñ, atd.) a navrhne jejich nahrazení ASCII ekvivalenty (a, c, n). Případně také jejich odstranění, pokud není možné namapovat na ASCII subsettings_bad_names_restricted_charset = Omezená sada znaků -subsettings_bad_names_restricted_charset_hint = Transliteruje ne-ASCII znaky do ASCII, pak hledá soubory obsahující znaky mimo 0-9a-zA-Z a povolené znaky definované uživatelem -subsettings_bad_names_allowed_chars = Povolena znaků +subsettings_bad_names_restricted_charset_hint = Transliteruje ne-ASCII znaky do ASCII, pak hledá soubory obsahující znaky mimo množiny 0-9a-zA-Z a mimo povolené znaky definované uživatelem +subsettings_bad_names_allowed_chars = Povolené znaky subsettings_bad_names_remove_duplicated = Duplikované znaky -subsettings_bad_names_remove_duplicated_hint = Najde se opakující se duplicitní znaky, které nejsou alfanumerické (např. "file---name..txt") a navrhuje odstranění duplikátů +subsettings_bad_names_remove_duplicated_hint = Najde po sobě jdoucí opakující se duplicitní znaky, které nejsou písmena či číslice (např. nazev---souboru..txt") a navrhne odstranění duplicit settings_global_settings = Globální nastavení -settings_dark_theme = Tmavý motiv -settings_show_only_icons = Zobrazit pouze ikony -settings_excluded_items = Vyloučené položky: -settings_allowed_extensions = Povolené rozšíření: -settings_excluded_extensions = Vyloučená rozšíření: -settings_file_size = Velikost souboru (kilobytů) -settings_minimum_file_size = Min: -settings_maximum_file_size = Maximálně: -settings_recursive_search = Rekurentní vyhledávání -settings_use_cache = Použít keš +settings_dark_theme = Tmavý vzhled +settings_show_only_icons = Zobrazovat pouze ikony +settings_excluded_items = Vynechané položky: +settings_allowed_extensions = Povolené přípony: +settings_excluded_extensions = Vynechané přípony: +settings_file_size = Velikost souboru (kilobajty) +settings_minimum_file_size = Nejméně: +settings_maximum_file_size = Nejvýše: +settings_recursive_search = Rekurzivní vyhledávání +settings_use_cache = Používat mezipaměť settings_save_as_json = Ukládat mezipaměť také jako soubor JSON -settings_move_to_trash = Přesunout smazané soubory do koše -settings_ignore_other_filesystems = Ignorovat ostatní souborové systémy (pouze Linux) -settings_delete_outdated_cache_entries = Smažte automaticky zastaralé položky v mezipaměti -settings_delete_outdated_cache_entries_hint = Když je povoleno, aplikace prověří během načítání z mezipaměti (maximálně jednou za týden), zda stále ukazují uložené záznamy na existující a nezměněné soubory/data +settings_move_to_trash = Přesouvat smazané soubory do koše +settings_ignore_other_filesystems = Nepřekračovat na ostatní souborové systémy (pouze v Linuxu) +settings_delete_outdated_cache_entries = Automaticky z mezipaměti odstraňovat už neplatné položky +settings_delete_outdated_cache_entries_hint = Pokud zapnuto, aplikace bude během načítání mezipaměti prověřovat (maximálně jednou za týden), zda uložené záznamy stále ještě odkazují na existující a nezměněné soubory/data settings_hide_hard_links = Skrýt pevné odkazy -settings_hide_hard_links_hint = Skrýt tvrdé odkazy na stejné soubory v výsledcích -settings_thread_number = Číslo vlákna -settings_restart_required = ---Pro použití změn ve vlákně musíte restartovat aplikaci --- +settings_hide_hard_links_hint = Ve výsledcích skrýt pevné odkazy na stejné soubory +settings_thread_number = Počet vláken procesoru +settings_restart_required = --- Aby se změna v počtu vláken projevila, je třeba aplikaci restartovat --- settings_duplicate_image_preview = Náhled obrázku -settings_duplicate_minimal_hash_cache_size = Minimální velikost uložených souborů v mezipaměti - Hash (KB) +settings_duplicate_minimal_hash_cache_size = Minimální velikost souboru pro uložení do mezipaměti – otisk (KB) settings_duplicate_use_prehash = Použít rozpoznání -settings_duplicate_minimal_prehash_cache_size = Minimální velikost uložených souborů v mezipaměti - Prehash (KB) +settings_duplicate_minimal_prehash_cache_size = Minimální velikost souboru pro uložení do mezipaměti – rozpoznání (KB) settings_similar_images_show_image_preview = Náhled obrázku -settings_application_scale_text = Škálování aplikace -settings_application_scale_hint_text = Když je povoleno ruční měřítko, umožňuje vám to vybrat vlastní škálovací faktor, ale zcela vypne automatické škálování na základě DPI monitoru. -settings_restart_required_scale_text = ---Potřebujete znovu spustit aplikaci, aby se aplikovaly změny ve měřítku--- -settings_use_manual_application_scale_text = Použijte ruční měřicí stupnici -settings_video_thumbnails_preview = Předběžný náhled obrázku -settings_open_config_folder = Otevřít konfigurační složku +settings_application_scale_text = Měřítko aplikace +settings_application_scale_hint_text = Když je povoleno ruční měřítko, umožňuje vám toto zvolit si své vlastní, ale zcela vypne automatické škálování na základě DPI monitoru. +settings_restart_required_scale_text = --- Aby se změna měřítka projevila, je třeba aplikaci restartovat --- +settings_use_manual_application_scale_text = Použít ruční měřítko aplikace +settings_video_thumbnails_preview = Náhled obrázku +settings_open_config_folder = Otevřít složku s nastaveními settings_open_cache_folder = Otevřít složku mezipaměti settings_language = Jazyk -settings_current_preset = Aktuální přednastavení: +settings_current_preset = Stávající přednastavení: settings_edit_name = Upravit název -settings_choose_name_for_prefix = Zvolte název prefixu +settings_choose_name_for_prefix = Zvolte název pro předponu settings_save = Uložit settings_load = Načíst -settings_reset = Obnovit -settings_similar_videos_tool = Podobný nástroj pro videa -settings_video_thumbnails_clear_unused_thumbnails = Smažte nepoužívané videové náhledy starší než 7 dní při spuštění aplikace -settings_video_thumbnails_header = Video Miniatury -settings_video_thumbnails_generate = Generuj náhledy -settings_video_thumbnails_position = Miniatura pozice ve videu (%) -settings_video_thumbnails_generate_grid = Generovat dlaždicovou galerii namísto jedné obrázku -settings_video_thumbnails_generate_grid_hint = Generování více obrázků v mřížce je mnohem pomalejší než generování jednoho náhledu -settings_video_thumbnails_grid_tiles_per_side = Počet dlaždic na straně v miniaturovém gride -settings_video_thumbnails_grid_tiles_per_side_hint = Počet miniaturových dlaždic na straně v mřížce. Například výběr 2 vytvoří mřížku 2 x 2, což vede k jedné miniaturě složené z 4 obrázků. -settings_similar_images_tool = Podobný nástroj pro obrázky +settings_reset = Vrátit na výchozí +settings_similar_videos_tool = Nástroj pro podobající se videa +settings_video_thumbnails_clear_unused_thumbnails = Při spuštění aplikace smazat nepoužívané náhledy videí starší než 7 dní +settings_video_thumbnails_header = Náhledy videa +settings_video_thumbnails_generate = Vytvářet náhledy +settings_video_thumbnails_position = Pozice ve videu (%) ze které pořídit náhled +settings_video_thumbnails_generate_grid = Namísto jediného obrázku vytvořit mřížků z náhledů +settings_video_thumbnails_generate_grid_hint = Vytváření vícera obrázků v mřížce je mnohem pomalejší než vytváření náhledu jediného snímku +settings_video_thumbnails_grid_tiles_per_side = Počet dlaždic (po stranách) mřížky náhledů +settings_video_thumbnails_grid_tiles_per_side_hint = Počet dlaždic s náhledy (po stranách mřížky). Například vybráním 2 bude vytvořena mřížka 2 x 2, což bude mít za výsledek náhled složený ze 4 obrázků. +settings_similar_images_tool = Nástroj pro podobající se obrázky settings_general_settings = Obecná nastavení settings_cache_header_text = Nastavení mezipaměti -settings_clean_cache_button_text = Vyčisti zastaralý mezipaměť +settings_clean_cache_button_text = Vyčistit zastaralou mezipaměť settings_settings = Nastavení -settings_load_tabs_sizes_at_startup = Načíst velikost záložek při startu +settings_load_tabs_sizes_at_startup = Načíst velikost panelů při startu settings_load_windows_size_at_startup = Načíst velikost oken při spuštění -settings_limit_lines_of_messages = Omezit zprávy na 500 řádků (fungují pro pomalý TextEdit widget) -settings_play_audio_on_scan_completion_text = Přehrát zvuk při úspěšném dokončení skenování -settings_audio_feature_hint_text = Dostupné pouze při kompilaci s audio funkcí -settings_audio_env_variable_hint_text = Zvuk může být změněn, nastavením proměnné prostředí KROKIET_AUDIO_STOP_FILE na platný zvukový souborový cestu +settings_limit_lines_of_messages = Omezit zprávy na 500 řádků (obejití problému s pomalou součástí TextEdit pro uživatelské rozhraní) +settings_play_audio_on_scan_completion_text = Po úspěšném dokončení skenování přehrát zvuk +settings_audio_feature_hint_text = K dispozici pouze pokud bylo zkompilováno s funkcí pro zvuk +settings_audio_env_variable_hint_text = Zvuk je možné změnit a to nastavením proměnné prostředí KROKIET_AUDIO_STOP_FILE na platné umístění zvukového souboru popup_save_title = Ukládání výsledků -popup_save_message = Tímto uložíte výsledky do 3 různých souborů +popup_save_message = Toto výsledky uloží do 3 různých souborů popup_rename_title = Přejmenovávání souborů -popup_new_paths_title = Prosím přidejte cesty jednu za každou řádek +popup_new_paths_title = Popisy umístění přidávejte každý na zvlášť řádek popup_move_title = Přesouvání souborů -popup_move_copy_checkbox = Kopírovat soubory místo přesunutí +popup_move_copy_checkbox = Namísto přesunutí soubory zkopírovat popup_move_preserve_folder_checkbox = Zachovat strukturu složek -move_confirmation_text = Jste si jistí, že chcete přesunout vybrané položky? -rename_confirmation_text = Jste si jisti, že chcete přejmenovat vybrané položky? +move_confirmation_text = Opravdu chcete označené položky přesunout? +rename_confirmation_text = Opravdu chcete vybrané položky přejmenovat? delete = Odstranit položky -stopping_scan = Zastavuji skenování, čekejte prosím... -searching = Vyhledávání... -subsettings_videos_crop_detect = Oříznout metodu detekce -subsettings_videos_skip_forward_amount = Přeskočit trvání [s] -subsettings_videos_vid_hash_duration = Doba trvání hash videa +stopping_scan = Zastavování skenování – vyčkejte…. +searching = Vyhledávání…. +subsettings_videos_crop_detect = Metoda zjišťování ořezů +subsettings_videos_skip_forward_amount = Délka přeskočení [s] +subsettings_videos_vid_hash_duration = Délka úseku videa, ze kterého vytvářet otisk settings_cache_number_size_text = Velikost souborů mezipaměti: { $size }, počet souborů: { $number } settings_video_thumbnails_number_size_text = Velikost náhledů videa: { $size }, počet souborů: { $number } -settings_log_number_size_text = Velikost souborů protokolu: { $size }, počet souborů: { $number } -popup_clean_cache_title_text = Vyčisti zastaralý mezipaměť -popup_clean_cache_confirmation_text = Jste si jistí, že chcete vymazat zastaralé položky v mezipaměti? To odstraní položky v mezipaměti pro soubory, které již neexistují nebo byly změněny. +settings_log_number_size_text = Velikost souborů záznamu událostí: { $size }, počet souborů: { $number } +popup_clean_cache_title_text = Vymazat zastaralou mezipaměť +popup_clean_cache_confirmation_text = Opravdu chcete vymazat zastaralé položky z mezipaměti? To odstraní položky pro soubory, které už neexistují nebo byly změněny. popup_clean_cache_progress_text = Zpracovává se soubor mezipaměti: -popup_clean_cache_current_file_text = Soubor: -popup_clean_cache_file_progress_text = Souborový průběh: -popup_clean_cache_overall_progress_text = Celkový pokrok: -popup_clean_cache_stopped_by_user_text = Úklid mezipaměti byl uživatelem zastaven -popup_clean_cache_finished_text = Úklid mezipaměti dokončen úspěšně! -popup_clean_cache_error_details_text = Chyby: +popup_clean_cache_current_file_text = Stávající soubor: +popup_clean_cache_file_progress_text = Průběh na stávajícím souboru: +popup_clean_cache_overall_progress_text = Celkový průběh: +popup_clean_cache_stopped_by_user_text = Úklid mezipaměti byl zastaven uživatelem +popup_clean_cache_finished_text = Úklid mezipaměti úspěšně dokončen! +popup_clean_cache_error_details_text = Podrobnosti chyby: popup_clean_cache_files_with_errors = Soubory s chybami: subsettings_video_optimizer_mode = Režim -subsettings_video_optimizer_crop_type = Typ kategorie -subsettings_video_optimizer_black_pixel_threshold = Černá pixelová prahová hodnota -subsettings_video_optimizer_black_pixel_threshold_hint = Maximální RGB hodnota pro každý barevný kanál, která má být považována za černou (0-128). Výchozí: 20 -subsettings_video_optimizer_black_bar_min_percentage = Černá lišta Minimální procento -subsettings_video_optimizer_black_bar_min_percentage_hint = Minimální procento černých pixelů v řadě/sloupcové, aby se považovala za černou lištu (50-100). Výchozí: 90 -subsettings_video_optimizer_max_samples = Maximální počet vzorků -subsettings_video_optimizer_max_samples_hint = Maximální počet snímků k analýze na video (5-1000). Výchozí: 60 -subsettings_video_optimizer_min_crop_size = Minimální velikost ořezu -subsettings_video_optimizer_min_crop_size_hint = Minimální počet pixelů pro prořezání na kterékoli straně (1-1000). Menší prořezávky se ignorují. Výchozí: 5 +subsettings_video_optimizer_crop_type = Typ ořezu +subsettings_video_optimizer_black_pixel_threshold = Prahová hodnota pro černé pixely +subsettings_video_optimizer_black_pixel_threshold_hint = Nejvyšší RGB hodnota pro každý kanál barev, která má být považován za černou (0-128). Výchozí: 20 +subsettings_video_optimizer_black_bar_min_percentage = Nejnižší procento hranice pro černou +subsettings_video_optimizer_black_bar_min_percentage_hint = Nejnižší procento černých pixelů v řádku/sloupci, aby bylo považováno za černý pruh (50-100). Výchozí: 90 +subsettings_video_optimizer_max_samples = Nejvýše vzorků +subsettings_video_optimizer_max_samples_hint = Nejvyšší nastavený počet snímků k analýze pro každé z videí (5-1000). Výchozí: 60 +subsettings_video_optimizer_min_crop_size = Nejnižší velikost ořezu +subsettings_video_optimizer_min_crop_size_hint = Nejnižší počet pixelů pro ořez na kterékoli straně (1-1000). Menší ořezy jsou ignorovány. Výchozí: 5 subsettings_video_optimizer_video_codec = Kodek videa -subsettings_video_optimizer_excluded_codecs = Vyloučené kodeky -subsettings_video_optimizer_video_quality = Video kvalita (CRF) -subsettings_reset = Obnovit -subsettings_exif_ignored_tags_text = Ignorované tagy: -subsettings_exif_ignored_tags_hint_text = Červy oddělené čárkami seznam štítků, které se mají vyloučit z skenování (např. GPS, Miniatura). Některé štítky, jako například ImageWidth ve formátech TIFF, jsou skryté, aby se zabránilo poškození obrázku. -clean_button_text = Čistý -clean_text = Čistá EXIF data -clean_confirmation_text = Jste si jisti, že chcete odstranit EXIF data z vybraných položek? -crop_videos_text = Střihejte videa -crop_video_confirmation_text = Jste si jistí, že chcete oříznout vybrané videa? -crop_reencode_video_text = Rekóduj video -reencode_videos_text = Znovu zakódujte videa +subsettings_video_optimizer_excluded_codecs = Vynechané kodeky +subsettings_video_optimizer_video_quality = Kvalita videa (CRF) +subsettings_reset = Vrátit na výchozí +subsettings_exif_ignored_tags_text = Ignorované štítky: +subsettings_exif_ignored_tags_hint_text = Čárkou oddělovaný seznam štítků, které vynechat ze skenování (např. GPS, miniatura). Některé štítky, jako například ImageWidth v TIFF souborech, jsou skryty, aby se zabránilo poškození obrázku. +clean_button_text = Vyčistit +clean_text = Odstranit EXIF metadata +clean_confirmation_text = Opravdu chcet z označených položek odebrat EXIF metadata? +crop_videos_text = Oříznout videa +crop_video_confirmation_text = Opravdu chcete označená videa oříznout? +crop_reencode_video_text = Ještě znovu zkomprimovat video +reencode_videos_text = Ještě znovu zkomprimovat videa optimize_button_text = Optimalizovat -optimize_confirmation_text = Jste si jistí, že chcete znovu zakódovat vybrané videa? -optimize_fail_if_bigger_text = Selhání, pokud je optimalizovaný soubor větší +optimize_confirmation_text = Opravdu chcete označená videa nechat ještě znovu zkomprimovat? +optimize_fail_if_bigger_text = Vyhlásit nezdar, pokud by optimalizovaný soubor byl větší optimize_overwrite_files_text = Přepsat soubory -optimize_limit_video_size_text = Omezte velikost videa -optimize_max_width_text = Max šířka: -optimize_max_height_text = Max výška: -hardlink_button_text = Tvrdý odkaz -hardlink_text = Vytvoř tvrdé odkazy -hardlink_confirmation_text = Jste si jisti, že chcete vytvořit tvrdé odkazy pro vybrané položky? -softlink_button_text = Měkký odkaz -softlink_text = Vytvořit softlinky -softlink_confirmation_text = Jste si jisti, že chcete vytvořit softlinky (symlinky) pro vybrané položky? +optimize_limit_video_size_text = Omezit velikost videa +optimize_max_width_text = Nej. šířka: +optimize_max_height_text = Nej. výška: +hardlink_button_text = Pevný odkaz +hardlink_text = Vytvořit pevné odkazy +hardlink_confirmation_text = Opravdu chcete pro vybrané položky vytvořit pevné odkazy? +softlink_button_text = Symbolický odkaz +softlink_text = Vytvořit symbolické odkazy +softlink_confirmation_text = Opravdu chcete pro vybrané položky vytvořit symbolické odkazy? -rust_cache_processed_files = Zpracováno { $files } souborů mezipaměti \ No newline at end of file +column_full_path = Úplná cesta +file_dialog_open = Pro pokračování zavřete okno dialogového okna +selection_custom_select_unselect = Vlastní výběr/odvolání výběru +settings_similar_videos_preview_hint = Náhled je viditelný pouze v případě, že je povolena možnost "Generovat náhledy", nebo pokud byl náhled již vytvořen. +settings_show_notification_on_scan_completion_text = Zobrazit upozornění po dokončení skenování +settings_notification_feature_hint_text = Dostupné pouze při kompilaci s funkcí upozornění +settings_notification_focused_hint_text = Upozornění se nemusí zobrazit jako vyskakovací okno, pokud je okno aplikace aktivní +popup_custom_select_title_text = Vlastní výběr / zrušení výběru +popup_custom_select_button_text = Vybrat +popup_custom_unselect_button_text = Zrušit výběr +popup_custom_column_name_header_text = Sloupec +popup_custom_filter_value_header_text = Hodnota filtru (zástupný znak / regulární výraz) +popup_custom_case_sensitive_text = Rozlišuje velikost písmen +popup_custom_leave_one_in_group_text = Vyberte všechny položky kromě jedné v každé skupině +popup_custom_hint_str_text = Textové sloupce: zástupné znaky *name* /home/* *.rs +popup_custom_hint_int_text = Velikost [KB] / číselné sloupce: >= 2048 < 512 = 0 (operátory: >= <= > < =) +popup_custom_hint_date_text = Sloupce s datem: formát DD-MM-YYYY nebo YYYY-MM-DD, volitelná časová část HH:MM:SS, např. >= 2020-01-01 nebo < 31-12-2022 23:59:59 +compare_button_text = Porovnejte +compare_back_text = Zpět +compare_prev_group_text = Prev Group +compare_next_group_text = Další skupina +compare_swap_text = Výměna +compare_info_text = Informace +compare_diff_text = Změny +compare_loading_title_text = Prosím, počkejte... +compare_cancel_text = Zrušit +compare_resolution_mismatch_text = Různé rozlišení – odlišné výsledky mohou být nepřesné +compare_computing_diff_text = Probíhá výpočet rozdílů... +compare_info_file_name_text = Název souboru +compare_info_path_text = Cesta +compare_info_size_text = Velikost +compare_info_resolution_text = Rozlišení +compare_info_modification_date_text = Datum poslední úpravy +compare_loading_images_text = Načítají se obrázky... +compare_cancelling_text = Rušení, prosím, počkejte... +context_menu_open_item_text = Otevřená položka +context_menu_open_parent_text = Otevřít nadřazenou složku +context_menu_remove_from_results_text = Odebrat z výsledků +context_menu_remove_all_from_folder_text = Odstranit vše ze složky +context_menu_select_all_from_folder_text = Vybrat vše ze složky +context_menu_select_all_from_folder_except_one_text = Vybrat vše ze složky (ponechat pouze jednu položku) +context_menu_exclude_parent_folder_text = Vyloučit nadřazenou složku +context_menu_exclude_item_text = Vyloučit položku +context_menu_copy_name_text = Zkopírovat jméno +context_menu_copy_parent_folder_path_text = Zkopírovat cestu k nadřazené složce \ No newline at end of file diff --git a/krokiet/i18n/de/krokiet.ftl b/krokiet/i18n/de/krokiet.ftl index 24baa0215..fe345713b 100644 --- a/krokiet/i18n/de/krokiet.ftl +++ b/krokiet/i18n/de/krokiet.ftl @@ -1,13 +1,13 @@ # In Rust translations rust_init_error_title = Kritischer Fehler während des App-Startlaufs -rust_init_error_message = - Beim Starten der Anwendung ist ein kritischer Fehler aufgetreten: - - { $error_message } - - Dies kann durch fehlende oder fehlerhafte OpenGL/Vulkan-Treiber, das Ausführen der Anwendung in einer virtuellen Maschine oder einem Fehler in Krokiet oder einer seiner Bibliotheken verursacht werden. - - Sie können versuchen, verschiedene Builds (skia_opengl, skia_vulkan, femtovg_opengl - Standard) oder mit dem Software-Renderer auszuführen, um zu sehen, ob das Problem dadurch behoben wird. +rust_init_error_message = + Beim Starten der Anwendung ist ein kritischer Fehler aufgetreten: + + { $error_message } + + Dies kann durch fehlende oder fehlerhafte OpenGL/Vulkan-Treiber, das Ausführen der Anwendung in einer virtuellen Maschine oder einem Fehler in Krokiet oder einer seiner Bibliotheken verursacht werden. + + Sie können versuchen, verschiedene Builds (skia_opengl, skia_vulkan, femtovg_opengl - Standard) oder mit dem Software-Renderer auszuführen, um zu sehen, ob das Problem dadurch behoben wird. rust_loaded_preset = Geladene Voreinstellung { $preset_idx } rust_file_already_exists = Datei "{ $file }" existiert bereits und wird nicht überschrieben rust_error_removing_file_after_copy = Fehler beim Entfernen der Datei "{ $file }" (nach Kopieren auf eine andere Partition), Grund: { $reason } @@ -16,12 +16,12 @@ rust_loading_tags_cache = Tag-Cache wird geladen rust_loading_fingerprints_cache = Cache für Fingerabdrücke wird geladen rust_saving_tags_cache = Speichere Tag-Cache rust_saving_fingerprints_cache = Speichere Fingerabdruck-Cache -rust_loading_prehash_cache = Lade Vorhash-Cache -rust_saving_prehash_cache = Speichere Vorhash-Cache +rust_loading_prehash_cache = Lade Prehash-Cache +rust_saving_prehash_cache = Speichere Prehash-Cache rust_loading_hash_cache = Hash-Cache wird geladen rust_saving_hash_cache = Speichere Hash-Cache rust_loading_exif_cache = Lade EXIF-Cache -rust_saving_exif_cache = Speichern EXIF-Cache +rust_saving_exif_cache = Speichere EXIF-Cache rust_scanning_name = Scanne Name der { $entries_checked } Datei rust_scanning_size_name = Scanne Größe und Name der { $entries_checked } Datei rust_scanning_size = Scanne Größe der { $entries_checked } Datei @@ -54,7 +54,7 @@ rust_found_temporary_files = { $items_found } temporäre Dateien in { $time } ge rust_no_file_type_selected = defekte Dateien ohne ausgewählten Dateityp nicht gefunden. rust_found_broken_files = { $items_found } fehlerhafte Dateien gefunden, die { $size } in { $time } einnehmen rust_found_bad_extensions = { $items_found } Dateien mit schlechten Erweiterungen in { $time } gefunden -rust_found_bad_names = Gefunden { $items_found } Dateien mit schlechten Namen in { $time} +rust_found_bad_names = Gefunden { $items_found } Dateien mit schlechten Namen in { $time } rust_found_video_optimizer = Gefunden { $items_found } Dateien zur Optimierung in { $time } rust_found_duplicate_files = { $items_found } Duplikate in { $groups } Gruppen gefunden, die { $size } in { $time } einnehmen rust_found_duplicate_files_no_lost_space = { $items_found } Duplikate in { $groups } Gruppen in { $time } gefunden @@ -114,7 +114,7 @@ rust_cache_processed_files = Verarbeitete { $files } Cache-Dateien rust_cache_entries_stats = Entfernt { $removed } Einträge aus { $all }, { $left } Einträge übrig rust_cache_size_reduced = Reduzierte Cache-Dateigröße um { $size } rust_cache_time_elapsed = Zeit vergangen: { $time } -rust_symlink_failed = Failed to symlink { $name } to { $target }, reason { $reason } +rust_symlink_failed = Symbolische Verknüpfung von { $name } nach { $target } fehlgeschlagen, Grund: { $reason } rust_hardlink_failed = Fehlgeschlagenes Hardlink von { $name } zu { $target }, Grund { $reason } # Slint translations, but in arrays @@ -168,7 +168,7 @@ included_paths = Einbezogene Pfade excluded_paths = Ausgeschlossene Pfade ref = Referenz path = Pfad -tool_duplicate_files = Dateien duplizieren +tool_duplicate_files = Gleiche Dateien tool_empty_folders = Leere Ordner tool_big_files = Große Dateien tool_empty_files = Leere Dateien @@ -336,7 +336,7 @@ subsettings_video_optimizer_black_pixel_threshold = Schwarzer Pixel-Schwellenwer subsettings_video_optimizer_black_pixel_threshold_hint = Maximaler RGB-Wert für jeden Farbkanal, der als Schwarz (0-128) betrachtet wird. Standard: 20 subsettings_video_optimizer_black_bar_min_percentage = Schwarze Balken Mindestprozentsatz subsettings_video_optimizer_black_bar_min_percentage_hint = Mindestprozentsatz der schwarzen Pixel in einer Zeile/Spalte, um als schwarze Linie zu gelten (50-100). Standard: 90 -subsettings_video_optimizer_max_samples = Max Samples +subsettings_video_optimizer_max_samples = Max. Samples subsettings_video_optimizer_max_samples_hint = Maximal Anzahl an Frames zur Analyse pro Video (5-1000). Standard: 60 subsettings_video_optimizer_min_crop_size = Minimale Bildgröße subsettings_video_optimizer_min_crop_size_hint = Mindestanzahl der zu abschneidenden Pixel auf jeder Seite (1-1000). Kleinere Abschneidungen werden ignoriert. Standard: 5 @@ -366,3 +366,49 @@ hardlink_confirmation_text = Sind Sie sicher, dass Sie harte Links für die ausg softlink_button_text = Softlink softlink_text = Erstelle Softlinks softlink_confirmation_text = Sind Sie sicher, dass Sie Softlinks (Symlinks) für die ausgewählten Elemente erstellen möchten? + +column_full_path = Vollständiger Pfad +file_dialog_open = Schließen Sie das Dialogfenster, um fortzufahren +selection_custom_select_unselect = Benutzerdefinierte Auswahl/Abwahl +settings_similar_videos_preview_hint = Die Vorschau ist nur sichtbar, wenn die Option "Miniaturansichten generieren" aktiviert ist, oder wenn bereits eine Miniaturansicht erstellt wurde. +settings_show_notification_on_scan_completion_text = Zeige eine Benachrichtigung an, wenn der Scan abgeschlossen ist +settings_notification_feature_hint_text = Nur verfügbar, wenn die Benachrichtigungsfunktion beim Kompilieren aktiviert ist +settings_notification_focused_hint_text = Die Benachrichtigung wird möglicherweise nicht als Popup-Fenster angezeigt, wenn das Anwendungsfenster im Fokus steht +popup_custom_select_title_text = Benutzerdefinierte Auswahl / Deauswahl +popup_custom_select_button_text = Auswählen +popup_custom_unselect_button_text = Abwählen +popup_custom_column_name_header_text = Spalte +popup_custom_filter_value_header_text = Filterwert (Wildcard / regulärer Ausdruck) +popup_custom_case_sensitive_text = Groß- und Kleinschreibung beachten +popup_custom_leave_one_in_group_text = Wählen Sie alle Elemente aus, mit Ausnahme eines, in jeder Gruppe +popup_custom_hint_str_text = Textspalten: Platzhalter *name* /home/* *.rs +popup_custom_hint_int_text = Größe [KB] / numerische Spalten: >= 2048 < 512 = 0 (Operatoren: >= <= > < =) +popup_custom_hint_date_text = Datumsspalten: DD-MM-YYYY oder YYYY-MM-DD, optional Uhrzeit HH:MM:SS z.B. >= 2020-01-01 oder < 31-12-2022 23:59:59 +compare_button_text = Vergleichen +compare_back_text = Zurück +compare_prev_group_text = Prev Group +compare_next_group_text = Nächste Gruppe +compare_swap_text = Tauschen +compare_info_text = Information +compare_diff_text = Änderungen +compare_loading_title_text = Bitte warten... +compare_cancel_text = Abbrechen +compare_resolution_mismatch_text = Verschiedene Auflösungen – unterschiedliche Ergebnisse können ungenau sein +compare_computing_diff_text = Berechne Differenz... +compare_info_file_name_text = Dateiname +compare_info_path_text = Pfad +compare_info_size_text = Größe +compare_info_resolution_text = Auflösung +compare_info_modification_date_text = Datum der Änderung +compare_loading_images_text = Bilder werden geladen... +compare_cancelling_text = Stornierung wird bearbeitet... Bitte warten. +context_menu_open_item_text = Offener Posten +context_menu_open_parent_text = Ordner öffnen (übergeordnet) +context_menu_remove_from_results_text = Entfernen aus den Ergebnissen +context_menu_remove_all_from_folder_text = Entferne alle Elemente aus dem Ordner +context_menu_select_all_from_folder_text = Alle auswählen aus Ordner +context_menu_select_all_from_folder_except_one_text = Alle auswählen aus Ordner (einen beibehalten) +context_menu_exclude_parent_folder_text = Ordner "Eltern" ausschließen +context_menu_exclude_item_text = Artikel ausblenden +context_menu_copy_name_text = Kopiere Namen +context_menu_copy_parent_folder_path_text = Pfad des übergeordneten Ordners kopieren \ No newline at end of file diff --git a/krokiet/i18n/el/krokiet.ftl b/krokiet/i18n/el/krokiet.ftl index 2964c32b7..f195bf2b6 100644 --- a/krokiet/i18n/el/krokiet.ftl +++ b/krokiet/i18n/el/krokiet.ftl @@ -1,13 +1,13 @@ # In Rust translations rust_init_error_title = Κρίσιμο Σφάλμα Κατά την Εκκίνηση της Εφαρμογής -rust_init_error_message = - Σημειώθηκε ένα κρίσιμο σφάλμα κατά την εκκίνηση της εφαρμογής: - - { $error_message } - - Αυτό μπορεί να οφείλεται σε ελλείψεις ή ελαττωματικούς οδηγούς OpenGL/Vulkan, στην εκτέλεση της εφαρμογής σε εικονικό μηχάνημα ή σε σφάλμα στο Krokiet ή σε μία από τις βιβλιοθήκες του. - - Μπορείτε να δοκιμάσετε να εκτελέσετε διαφορετικές εκδόσεις (skia_opengl, skia_vulkan, femtovg_opengl - η προεπιλεγμένη) ή με renderer υλικού για να δείτε αν αυτό επιλύσει το πρόβλημα. +rust_init_error_message = + Σημειώθηκε ένα κρίσιμο σφάλμα κατά την εκκίνηση της εφαρμογής: + + { $error_message } + + Αυτό μπορεί να οφείλεται σε ελλείψεις ή ελαττωματικούς οδηγούς OpenGL/Vulkan, στην εκτέλεση της εφαρμογής σε εικονικό μηχάνημα ή σε σφάλμα στο Krokiet ή σε μία από τις βιβλιοθήκες του. + + Μπορείτε να δοκιμάσετε να εκτελέσετε διαφορετικές εκδόσεις (skia_opengl, skia_vulkan, femtovg_opengl - η προεπιλεγμένη) ή με renderer υλικού για να δείτε αν αυτό επιλύσει το πρόβλημα. rust_loaded_preset = Φορτωμένη προκαθορισμένη τιμή { $preset_idx } rust_file_already_exists = Το αρχείο "{ $file }" υπάρχει ήδη και δεν θα αντικατασταθεί rust_error_removing_file_after_copy = Σφάλμα κατά την αφαίρεση του αρχείου "{ $file }" (μετά αντιγραφή σε διαφορετικό διαμέριση), λόγος: { $reason } @@ -54,7 +54,7 @@ rust_found_temporary_files = Βρέθηκαν { $items_found } προσωριν rust_no_file_type_selected = Αδυναμία εύρεσης κατεστραμμένων αρχείων χωρίς κανέναν επιλεγμένο τύπο αρχείου. rust_found_broken_files = Βρέθηκαν { $items_found } σπασμένα αρχεία λαμβάνοντας { $size } σε { $time } rust_found_bad_extensions = Βρέθηκαν { $items_found } αρχεία με κακές επεκτάσεις στο { $time } -rust_found_bad_names = Βρέθηκαν { $items_found } αρχεία με κακές ονομασίες σε { $time} +rust_found_bad_names = Βρέθηκαν { $items_found } αρχεία με κακές ονομασίες σε { $time } rust_found_video_optimizer = Βρέθηκαν { $items_found } αρχεία για βελτιστοποίηση σε { $time } rust_found_duplicate_files = Βρέθηκαν { $items_found } διπλότυπα αρχεία σε { $groups } ομάδες που λαμβάνουν { $size } σε { $time } rust_found_duplicate_files_no_lost_space = Βρέθηκαν { $items_found } διπλότυπα αρχεία σε { $groups } ομάδες σε { $time } @@ -114,7 +114,7 @@ rust_cache_processed_files = Επεξεργάστηκαν { $files } αρχεί rust_cache_entries_stats = Αφαίρεσε { $removed } εγγραφές από τις { $all }, { $left } απομένουν rust_cache_size_reduced = Μειώθηκε το μέγεθος των αρχείων cache κατά { $size } rust_cache_time_elapsed = Χρόνος που πέρασε: { $time } -rust_symlink_failed = Failed to symlink { $name } to { $target }, reason { $reason } +rust_symlink_failed = Απέτυχε η συντόμευση { $name } στο { $target }, λόγος { $reason} rust_hardlink_failed = Αποτυχία δημιουργίας σκληρού συνδέσμου { $name } προς { $target }, λόγος { $reason } # Slint translations, but in arrays @@ -366,3 +366,49 @@ hardlink_confirmation_text = Είστε βέβαια ότι θέλετε να δ softlink_button_text = Softlink softlink_text = Δημιουργία συμβολικών συνδέσμων softlink_confirmation_text = Είστε βέβαια ότι θέλετε να δημιουργήσετε συντόμευτες συνδέσμους (symlinks) για τα επιλεγμένα αντικείμενα; + +column_full_path = Πλήρης διαδρομή +file_dialog_open = Κλείστε το παράθυρο διαλόγου για να συνεχίσετε +selection_custom_select_unselect = Επιλογή/Αποεπιλογή (προσαρμοσμένη) +settings_similar_videos_preview_hint = Η προεπισκόπηση είναι ορατή μόνο όταν η επιλογή "Δημιουργία μικρογραφιών" είναι ενεργοποιημένη, ή όταν έχει ήδη δημιουργηθεί μια μικρογραφία. +settings_show_notification_on_scan_completion_text = Εμφάνισε ειδοποίηση όταν ολοκληρωθεί η σάρωση +settings_notification_feature_hint_text = Διαθέσιμο μόνο κατά τη μεταγλώττιση με την λειτουργία ειδοποιήσεων +settings_notification_focused_hint_text = Η ειδοποίηση ενδέχεται να μην εμφανίζεται ως παράθυρο διαλόγου όταν το παράθυρο της εφαρμογής είναι σε λειτουργία +popup_custom_select_title_text = Προσαρμοσμένη Επιλογή / Αποεπιλογή +popup_custom_select_button_text = Επιλέξτε +popup_custom_unselect_button_text = Άκυρη επιλογή +popup_custom_column_name_header_text = Στήλη +popup_custom_filter_value_header_text = Τιμή φίλτρου (καρτέλα / κανονική έκφραση) +popup_custom_case_sensitive_text = Ευαίσθητο σε κεφαλαία/μικρά γράμματα +popup_custom_leave_one_in_group_text = Επιλέξτε όλα τα αντικείμενα, εκτός από ένα, σε κάθε ομάδα +popup_custom_hint_str_text = Στήλες κειμένου: χαρακτήρες αντικατάστασης *name* /home/* *.rs +popup_custom_hint_int_text = Μέγεθος [KB] / αριθμητικές στήλες: >= 2048 < 512 = 0 (τελεστές: >= <= > < =) +popup_custom_hint_date_text = Στήλες ημερομηνίας: ΜΜ/ΕΕ/YYYY ή YYYY-MM-DD, προαιρετική ώρα ΏΩ:ΛΛ:ΔΔ. π.χ. >= 2020-01-01 ή < 31-12-2022 23:59:59 +compare_button_text = Σύγκρινε +compare_back_text = Πίσω +compare_prev_group_text = Προηγούμενη ομάδα +compare_next_group_text = Επόμενη Ομάδα +compare_swap_text = Ανταλλαγή +compare_info_text = Πληροφορίες +compare_diff_text = Διαφορές +compare_loading_title_text = Παρακαλώ περιμένετε... +compare_cancel_text = Ακύρωση +compare_resolution_mismatch_text = Διαφορετικές αναλύσεις - τα διαφορετικά αποτελέσματα ενδέχεται να είναι ανακριβή +compare_computing_diff_text = Υπολογισμός διαφορών... +compare_info_file_name_text = Όνομα αρχείου +compare_info_path_text = Δρόμος +compare_info_size_text = Μέγεθος +compare_info_resolution_text = Απόφαση +compare_info_modification_date_text = Ημερομηνία τροποποίησης +compare_loading_images_text = Φόρτωση εικόνων... +compare_cancelling_text = Ακύρωση, παρακαλώ περιμένετε... +context_menu_open_item_text = Ανοιχτό στοιχείο +context_menu_open_parent_text = Άνοιγμα του γονικού φακέλου +context_menu_remove_from_results_text = Αφαίρεση από τα αποτελέσματα +context_menu_remove_all_from_folder_text = Αφαίρεση Όλων από Φάκελο +context_menu_select_all_from_folder_text = Επιλογή Όλων από Φάκελο +context_menu_select_all_from_folder_except_one_text = Επιλογή Όλων από Φάκελο (κρατήστε ένα) +context_menu_exclude_parent_folder_text = Εξαιρέστε τον γονικό φάκελο +context_menu_exclude_item_text = Αποκλεισμός στοιχείου +context_menu_copy_name_text = Αντιγραφή Ονόματος +context_menu_copy_parent_folder_path_text = Αντιγραφή της διαδρομής του γονικού φακέλου \ No newline at end of file diff --git a/krokiet/i18n/en/krokiet.ftl b/krokiet/i18n/en/krokiet.ftl index ac27bfa8d..31a9892c6 100644 --- a/krokiet/i18n/en/krokiet.ftl +++ b/krokiet/i18n/en/krokiet.ftl @@ -364,6 +364,11 @@ subsettings_video_optimizer_min_crop_size_hint = Minimum pixels to crop on any s subsettings_video_optimizer_video_codec = Video codec subsettings_video_optimizer_excluded_codecs = Excluded codecs subsettings_video_optimizer_video_quality = Video quality (CRF) +subsettings_video_optimizer_noise_reduction = Noise Reduction +subsettings_video_optimizer_noise_reduction_strength = NR Strength +subsettings_video_optimizer_use_custom_command = Use custom FFmpeg command +subsettings_video_optimizer_custom_command_hint = Command with {"{PATH}"} for input file. Output path is appended automatically. +subsettings_video_optimizer_generate_template = Generate template subsettings_reset = Reset subsettings_exif_ignored_tags_text = Ignored tags: subsettings_exif_ignored_tags_hint_text = Comma-separated list of tags to exclude from scanning (e.g. GPS, Thumbnail). Some tags, such as ImageWidth in TIFF files, are hidden to prevent breaking the image. @@ -381,6 +386,9 @@ optimize_overwrite_files_text = Overwrite files optimize_limit_video_size_text = Limit video size optimize_max_width_text = Max width: optimize_max_height_text = Max height: +optimize_crf_hint = Lower value = better quality. 0 is nearly lossless, 51 is worst. Recommended: 18–28. +optimize_noise_reduction_hint = Noise reduction may significantly increase encoding time. +optimize_noise_reduction_strength_hint = 1 = minimal, 10 = maximum noise reduction. hardlink_button_text = Hardlink hardlink_text = Create hardlinks hardlink_confirmation_text = Are you sure you want to create hardlinks for the selected items? @@ -397,4 +405,34 @@ popup_custom_leave_one_in_group_text = Select all items except one, in each grou popup_custom_hint_str_text = Text columns: wildcards *name* /home/* *.rs popup_custom_hint_int_text = Size [KB] / numeric columns: >= 2048 < 512 = 0 (operators: >= <= > < =) popup_custom_hint_date_text = Date columns: DD-MM-YYYY or YYYY-MM-DD, optional time HH:MM:SS e.g. >= 2020-01-01 or < 31-12-2022 23:59:59 +compare_button_text = Compare +compare_back_text = Back +compare_prev_group_text = Prev Group +compare_next_group_text = Next Group +compare_swap_text = Swap +compare_info_text = Info +compare_diff_text = Diff +compare_loading_title_text = Please wait... +compare_cancel_text = Cancel +compare_resolution_mismatch_text = Different resolutions - diff results may be inaccurate +compare_computing_diff_text = Computing diff... +compare_info_file_name_text = File name +compare_info_path_text = Path +compare_info_size_text = Size +compare_info_resolution_text = Resolution +compare_info_modification_date_text = Modification date +compare_loading_images_text = Loading images... +compare_cancelling_text = Cancelling, please wait... +context_menu_open_item_text = Open Item +context_menu_open_parent_text = Open Parent Folder +context_menu_remove_from_results_text = Remove from Results +context_menu_remove_all_from_folder_text = Remove All from Folder +context_menu_remove_all_from_folder_recursive_text = Remove All from Folder (recursive) +context_menu_select_all_from_folder_text = Select All from Folder +context_menu_select_all_from_folder_recursive_text = Select All from Folder (recursive) +context_menu_exclude_parent_folder_text = Exclude Parent Folder +context_menu_exclude_item_text = Exclude Item +context_menu_copy_file_name_text = Copy File Name +context_menu_copy_parent_folder_path_text = Copy Parent Folder +context_menu_copy_full_path_text = Copy Full Path diff --git a/krokiet/i18n/es-ES/krokiet.ftl b/krokiet/i18n/es-ES/krokiet.ftl index 69f155077..b20109617 100644 --- a/krokiet/i18n/es-ES/krokiet.ftl +++ b/krokiet/i18n/es-ES/krokiet.ftl @@ -1,13 +1,13 @@ # In Rust translations rust_init_error_title = Error Crítico Durante el Inicio de la Aplicación -rust_init_error_message = - Ocurrió un error crítico al iniciar la aplicación: - - { $error_message } - - Esto puede ser causado por controladores OpenGL/Vulkan faltantes o defectuosos, ejecutando la aplicación en una máquina virtual o un error en Krokiet o en una de sus bibliotecas. - - Puede intentar ejecutar diferentes versiones (skia_opengl, skia_vulkan, femtovg_opengl - la predeterminada) o con renderizador de software para ver si eso resuelve el problema. +rust_init_error_message = + Ocurrió un error crítico al iniciar la aplicación: + + { $error_message } + + Esto puede ser causado por controladores OpenGL/Vulkan faltantes o defectuosos, ejecutando la aplicación en una máquina virtual o un error en Krokiet o en una de sus bibliotecas. + + Puede intentar ejecutar diferentes versiones (skia_opengl, skia_vulkan, femtovg_opengl - la predeterminada) o con renderizador de software para ver si eso resuelve el problema. rust_loaded_preset = Preset cargado { $preset_idx } rust_file_already_exists = Archivo "{ $file }" ya existe, y no será sobreescrito rust_error_removing_file_after_copy = Error al eliminar el archivo "{ $file }" (después de copiar en una partición diferente), razón: { $reason } @@ -54,7 +54,7 @@ rust_found_temporary_files = Encontrados archivos temporales { $items_found } en rust_no_file_type_selected = No se pueden encontrar archivos rotos sin ningún tipo de archivo seleccionado. rust_found_broken_files = Se encontraron { $items_found } archivos dañados ocupando { $size } en { $time } rust_found_bad_extensions = Se encontraron archivos { $items_found } con extensiones incorrectas en { $time } -rust_found_bad_names = Encontrados { $items_found } archivos con nombres incorrectos en { $time} +rust_found_bad_names = Encontrados { $items_found } archivos con nombres incorrectos en { $time } rust_found_video_optimizer = Encontrados { $items_found } archivos para optimizar en { $time } rust_found_duplicate_files = Se encontraron { $items_found } archivos duplicados en { $groups } grupos ocupando { $size } en { $time } rust_found_duplicate_files_no_lost_space = Se encontraron { $items_found } archivos duplicados en { $groups } grupos en { $time } @@ -114,7 +114,7 @@ rust_cache_processed_files = Procesados { $files } archivos en caché rust_cache_entries_stats = Eliminados { $removed } entradas de todas { $all }, { $left } restantes rust_cache_size_reduced = Reducido tamaño de archivos en caché por { $size } rust_cache_time_elapsed = Tiempo transcurrido: { $time } -rust_symlink_failed = Failed to symlink { $name } to { $target }, reason { $reason } +rust_symlink_failed = No se pudo symlink { $name } a { $target }, razón { $reason} rust_hardlink_failed = Falló crear el enlace duro { $name } a { $target }, motivo { $reason } # Slint translations, but in arrays @@ -366,3 +366,49 @@ hardlink_confirmation_text = ¿Está usted seguro de que desea crear enlaces dur softlink_button_text = Softlink softlink_text = Crear enlaces simbólicos softlink_confirmation_text = ¿Está usted seguro de que desea crear enlaces simbólicos (softlinks) para los elementos seleccionados? + +column_full_path = Ruta completa +file_dialog_open = Cierre la ventana de diálogo para continuar +selection_custom_select_unselect = Selección/Deselección personalizada +settings_similar_videos_preview_hint = La vista previa solo es visible cuando la opción "Generar miniaturas" está habilitada, o cuando ya se ha generado una miniatura. +settings_show_notification_on_scan_completion_text = Mostrar notificación cuando el escaneo se complete +settings_notification_feature_hint_text = Disponible únicamente al compilar con la función de notificaciones +settings_notification_focused_hint_text = Es posible que la notificación no aparezca como una ventana emergente cuando la ventana de la aplicación está en foco +popup_custom_select_title_text = Selección/Desselección personalizada +popup_custom_select_button_text = Seleccionar +popup_custom_unselect_button_text = Desmarcar +popup_custom_column_name_header_text = Columna +popup_custom_filter_value_header_text = Valor del filtro (carácter comodín / expresión regular) +popup_custom_case_sensitive_text = Sensible a mayúsculas y minúsculas +popup_custom_leave_one_in_group_text = Seleccione todos los elementos, excepto uno, en cada grupo +popup_custom_hint_str_text = Columnas de texto: comodines *name* /home/* *.rs +popup_custom_hint_int_text = Tamaño [KB] / columnas numéricas: >= 2048 < 512 = 0 (operadores: >= <= > < =) +popup_custom_hint_date_text = Columnas de fecha: DD-MM-AAAA o AAAA-MM-DD, opcionalmente con la hora HH:MM:SS. Ejemplo: >= 2020-01-01 o < 31-12-2022 23:59:59 +compare_button_text = Comparar +compare_back_text = Atrás +compare_prev_group_text = Grupo Prev +compare_next_group_text = Siguiente grupo +compare_swap_text = Intercambio +compare_info_text = Información +compare_diff_text = Diferencias +compare_loading_title_text = Por favor, espere... +compare_cancel_text = Cancelar +compare_resolution_mismatch_text = Diferentes resoluciones: los resultados pueden ser inexactos +compare_computing_diff_text = Calculando las diferencias... +compare_info_file_name_text = Nombre del archivo +compare_info_path_text = Ruta +compare_info_size_text = Tamaño +compare_info_resolution_text = Resolución +compare_info_modification_date_text = Fecha de modificación +compare_loading_images_text = Cargando imágenes... +compare_cancelling_text = Cancelando, por favor espere... +context_menu_open_item_text = Element abierto +context_menu_open_parent_text = Abrir carpeta padre +context_menu_remove_from_results_text = Eliminar de los resultados +context_menu_remove_all_from_folder_text = Eliminar todo de la carpeta +context_menu_select_all_from_folder_text = Seleccionar todo de la carpeta +context_menu_select_all_from_folder_except_one_text = Seleccionar todo del directorio (mantener uno) +context_menu_exclude_parent_folder_text = Excluir carpeta principal +context_menu_exclude_item_text = Excluir elemento +context_menu_copy_name_text = Copiar nombre +context_menu_copy_parent_folder_path_text = Copiar la ruta de la carpeta principal \ No newline at end of file diff --git a/krokiet/i18n/fa/krokiet.ftl b/krokiet/i18n/fa/krokiet.ftl index a4aa63c4d..773040561 100644 --- a/krokiet/i18n/fa/krokiet.ftl +++ b/krokiet/i18n/fa/krokiet.ftl @@ -1,11 +1,11 @@ # In Rust translations rust_init_error_title = خطای حیاتی در هنگام راه‌اندازی برنامه -rust_init_error_message = - خطای حیاتی در هنگام راه‌اندازی برنامه رخ داد: - - { $error_message } - - این ممکن است به دلیل نبودن یا عملکرد نادرست درایورهای OpenGL/Vulkan، اجرای برنامه در یک ماشین مجازی یا یک باگ در Krokiet یا یکی از کتابخانه‌های آن باشد. +rust_init_error_message = + خطای حیاتی در هنگام راه‌اندازی برنامه رخ داد: + + { $error_message } + + این ممکن است به دلیل نبودن یا عملکرد نادرست درایورهای OpenGL/Vulkan، اجرای برنامه در یک ماشین مجازی یا یک باگ در Krokiet یا یکی از کتابخانه‌های آن باشد. rust_loaded_preset = پیش‌-installed سفارش { $preset_idx } rust_file_already_exists = فایل "{ $file }" قبلاً وجود دارد و بر روی آن پوشیده نمی‌شود rust_error_removing_file_after_copy = خطای هنگام حذف فایل "{ $file }" (پس از کپی شدن به پارتیشن متفاوت)، دلیل: { $reason } @@ -157,7 +157,7 @@ save_button = پای 若要继续,请输入完整的问题或命令。保存 sort_button = مرتب کردن rename_button = تغییر نام motto = این برنامه را می‌توانید به طور آزاد استفاده کنید و همیشه اینطور خواهد بود.\nبرای جزئیات، به پروتکلライセンス MIT/GPL نگاه کنید. -unicorn = +unicorn = شما ممکن است یک گوسفند سرخ نگاه نکنید، اما گوسفند سرخ همいつante始发时间总是过去时,你总是在它之后。永远不要认为你了解了什么,因为每一次的遇见都是一次新的开始。 你可能不会去看一只独角兽,但独角兽总是看着你。. repository = گارایو @@ -366,3 +366,49 @@ hardlink_confirmation_text = آیا مطمئن هستید که می‌خواهی softlink_button_text = سافت‌لینک softlink_text = ایجاد پیوند نرم softlink_confirmation_text = آیا مطمئن هستید که می‌خواهید پیوند نرم‌افزاری (symlinks) را برای آیتم‌های انتخاب شده ایجاد کنید؟ + +column_full_path = مسیر کامل +file_dialog_open = برای ادامه، پنجره گفتگو را ببندید +selection_custom_select_unselect = انتخاب/عدم انتخاب سفارشی +settings_similar_videos_preview_hint = پیش‌نمایش فقط زمانی قابل مشاهده است که گزینه "تولید تصاویر کوچک" فعال باشد، یا زمانی که یک تصویر کوچک از قبل تولید شده باشد. +settings_show_notification_on_scan_completion_text = هنگامی که اسکن کامل شد، یک اعلان نمایش دهید +settings_notification_feature_hint_text = فقط در صورتی که با قابلیت اعلان‌ها کامپایل شود، در دسترس خواهد بود +settings_notification_focused_hint_text = ممکن است اعلان به صورت یک پنجره جداگانه نمایش داده نشود، زمانی که پنجره اصلی برنامه در حال استفاده باشد +popup_custom_select_title_text = انتخاب/عدم انتخاب سفارشی +popup_custom_select_button_text = انتخاب کنید +popup_custom_unselect_button_text = غیرفعال کردن/انتخاب نکردن +popup_custom_column_name_header_text = ستون +popup_custom_filter_value_header_text = مقدار فیلتر (حروف جایگزین / عبارات باقاعده) +popup_custom_case_sensitive_text = حساس به حروف بزرگ و کوچک +popup_custom_leave_one_in_group_text = همه موارد را به جز یک مورد، در هر گروه انتخاب کنید +popup_custom_hint_str_text = ستون‌های متن: کاراکترهای کلی *name* /home/* *.rs +popup_custom_hint_int_text = اندازه [KB] / ستون‌های عددی: >= 2048 < 512 = 0 (عملگرها: >= <= > < =) +popup_custom_hint_date_text = ستون‌های تاریخ: فرمت DD-MM-YYYY یا YYYY-MM-DD، زمان اختیاری به فرمت HH:MM:SS. به عنوان مثال: >= 2020-01-01 یا < 31-12-2022 23:59:59 +compare_button_text = مقایسه کنید +compare_back_text = بازگشت +compare_prev_group_text = گروه قبلی +compare_next_group_text = گروه بعدی +compare_swap_text = جایگزینی +compare_info_text = اطلاعات +compare_diff_text = تفاوت +compare_loading_title_text = لطفاً منتظر بمانید... +compare_cancel_text = لغو کنید +compare_resolution_mismatch_text = رزولوشن‌های مختلف - نتایج متفاوت ممکن است نادرست باشند +compare_computing_diff_text = محاسبه تفاوت‌ها... +compare_info_file_name_text = نام فایل +compare_info_path_text = مسیر +compare_info_size_text = اندازه +compare_info_resolution_text = تصمیم‌گیری / تعیین تکلیف +compare_info_modification_date_text = تاریخ آخرین تغییرات +compare_loading_images_text = در حال بارگذاری تصاویر... +compare_cancelling_text = لغو کردن، لطفا منتظر بمانید... +context_menu_open_item_text = بخش قابل ویرایش را باز کنید +context_menu_open_parent_text = باز کردن پوشه والد +context_menu_remove_from_results_text = حذف از نتایج +context_menu_remove_all_from_folder_text = حذف همه موارد از پوشه +context_menu_select_all_from_folder_text = انتخاب همه فایل‌ها از پوشه +context_menu_select_all_from_folder_except_one_text = انتخاب همه فایل‌ها از پوشه (فقط یک فایل را نگه دارید) +context_menu_exclude_parent_folder_text = داده‌های پوشه اصلی را نادیده بگیرید +context_menu_exclude_item_text = حذف مورد +context_menu_copy_name_text = کپی نام +context_menu_copy_parent_folder_path_text = کپی کردن مسیر پوشه والد \ No newline at end of file diff --git a/krokiet/i18n/fr/krokiet.ftl b/krokiet/i18n/fr/krokiet.ftl index 3a4c8d300..e0f934165 100644 --- a/krokiet/i18n/fr/krokiet.ftl +++ b/krokiet/i18n/fr/krokiet.ftl @@ -1,13 +1,13 @@ # In Rust translations rust_init_error_title = Erreur Critique Pendant Le Démarrage De L'Application -rust_init_error_message = - Une erreur critique s'est produite lors du démarrage de l'application : - - { $error_message } - - Cela peut être dû à des pilotes OpenGL/Vulkan manquants ou défectueux, à l'exécution de l'application dans une machine virtuelle ou à un bug dans Krokiet ou l'une de ses bibliothèques. - - Vous pouvez essayer d'exécuter différentes versions (skia_opengl, skia_vulkan, femtovg_opengl - par défaut) ou avec un rendu logiciel pour voir si cela résout le problème. +rust_init_error_message = + Une erreur critique s'est produite lors du démarrage de l'application : + + { $error_message } + + Cela peut être dû à des pilotes OpenGL/Vulkan manquants ou défectueux, à l'exécution de l'application dans une machine virtuelle ou à un bug dans Krokiet ou l'une de ses bibliothèques. + + Vous pouvez essayer d'exécuter différentes versions (skia_opengl, skia_vulkan, femtovg_opengl - par défaut) ou avec un rendu logiciel pour voir si cela résout le problème. rust_loaded_preset = Préréglage { $preset_idx } chargé rust_file_already_exists = Fichier "{ $file }" existe déjà et ne sera pas écrasé rust_error_removing_file_after_copy = Erreur lors de la suppression du fichier "{ $file }" (après copie sur une autre partition), la raison : { $reason } @@ -114,7 +114,7 @@ rust_cache_processed_files = Les fichiers de cache { $files } ont été traités rust_cache_entries_stats = Supprimés { $removed } entrées sur { $all }, { $left } restantes rust_cache_size_reduced = Réduit la taille des fichiers de cache de { $size } rust_cache_time_elapsed = Temps écoulé : { $time } -rust_symlink_failed = Failed to symlink { $name } to { $target }, reason { $reason } +rust_symlink_failed = Échec du lien symbolique { $name } vers { $target }, raison { $reason } rust_hardlink_failed = Échec du lien dur { $name } vers { $target }, la raison { $reason } # Slint translations, but in arrays @@ -336,7 +336,7 @@ subsettings_video_optimizer_black_pixel_threshold = Seuil Pixel Noir subsettings_video_optimizer_black_pixel_threshold_hint = Valeur RGB maximale pour chaque canal de pixel à être considérée comme noire (0-128). Valeur par défaut : 20 subsettings_video_optimizer_black_bar_min_percentage = Barre noire pourcentage minimum subsettings_video_optimizer_black_bar_min_percentage_hint = Minimum pourcentage de pixels noirs dans une ligne/colonne à être considéré comme une barre noire (50-100). Valeur par défaut : 90 -subsettings_video_optimizer_max_samples = Max Samples +subsettings_video_optimizer_max_samples = Nombre max. d'échantillons subsettings_video_optimizer_max_samples_hint = Nombre maximal de séquences à analyser par vidéo (5-1000). Valeur par défaut : 60 subsettings_video_optimizer_min_crop_size = Taille minimale de l'image subsettings_video_optimizer_min_crop_size_hint = Minimum pixels à rogner sur n'importe quel côté (1-1000). Les rognages plus petits sont ignorés. Valeur par défaut : 5 @@ -366,3 +366,49 @@ hardlink_confirmation_text = Êtes-vous sûr de vouloir créer des liens matéri softlink_button_text = Lien Softlink softlink_text = Créer des liens logiciels softlink_confirmation_text = Êtes-vous sûr de vouloir créer des liens logiciels (liens symboliques) pour les éléments sélectionnés ? + +column_full_path = Chemin complet +file_dialog_open = Fermez la fenêtre de dialogue pour continuer +selection_custom_select_unselect = Sélection/Désélection personnalisée +settings_similar_videos_preview_hint = L'aperçu est visible uniquement lorsque l'option "Générer les miniatures" est activée, ou lorsqu'une miniature a déjà été générée. +settings_show_notification_on_scan_completion_text = Afficher une notification lorsque la numérisation est terminée +settings_notification_feature_hint_text = Disponible uniquement lors de la compilation avec la fonctionnalité de notifications +settings_notification_focused_hint_text = La notification peut ne pas apparaître sous forme de fenêtre contextuelle lorsque la fenêtre de l'application est active +popup_custom_select_title_text = Sélection personnalisée / Désélection personnalisée +popup_custom_select_button_text = Sélectionner +popup_custom_unselect_button_text = Désélectionner +popup_custom_column_name_header_text = Colonne +popup_custom_filter_value_header_text = Valeur du filtre (caractère générique / expression régulière) +popup_custom_case_sensitive_text = Sensible à la casse +popup_custom_leave_one_in_group_text = Sélectionnez tous les éléments, à l'exception d'un seul, dans chaque groupe +popup_custom_hint_str_text = Colonnes de texte : caractères génériques *name* /home/* *.rs +popup_custom_hint_int_text = Taille [Ko] / colonnes numériques : >= 2048 < 512 = 0 (opérateurs : >= <= > < =) +popup_custom_hint_date_text = Colonnes de dates : Format JJ-MM-AAAA ou AAAA-MM-JJ, heure optionnelle HH:MM:SS. Exemple : >= 2020-01-01 ou < 31-12-2022 23:59:59 +compare_button_text = Comparez +compare_back_text = Retour +compare_prev_group_text = Groupe précédent +compare_next_group_text = Groupe suivant +compare_swap_text = Échange +compare_info_text = Info +compare_diff_text = Diff +compare_loading_title_text = Veuillez patienter... +compare_cancel_text = Annuler +compare_resolution_mismatch_text = Différentes résolutions - les résultats des comparaisons peuvent être imprécis +compare_computing_diff_text = Calcul du diff... +compare_info_file_name_text = Nom du fichier +compare_info_path_text = Chemin +compare_info_size_text = Taille +compare_info_resolution_text = Résolution +compare_info_modification_date_text = Date de modification +compare_loading_images_text = Chargement des images... +compare_cancelling_text = Annulation en cours, veuillez patienter... +context_menu_open_item_text = Élément ouvert +context_menu_open_parent_text = Ouvrir le dossier parent +context_menu_remove_from_results_text = Supprimer des résultats +context_menu_remove_all_from_folder_text = Supprimer tout du dossier +context_menu_select_all_from_folder_text = Sélectionner tout depuis le dossier +context_menu_select_all_from_folder_except_one_text = Sélectionner tout depuis le dossier (en ne conservant qu'un seul élément) +context_menu_exclude_parent_folder_text = Exclure le dossier parent +context_menu_exclude_item_text = Exclure l'élément +context_menu_copy_name_text = Copier le nom +context_menu_copy_parent_folder_path_text = Copier le chemin du dossier parent \ No newline at end of file diff --git a/krokiet/i18n/hi/krokiet.ftl b/krokiet/i18n/hi/krokiet.ftl new file mode 100644 index 000000000..a68295e75 --- /dev/null +++ b/krokiet/i18n/hi/krokiet.ftl @@ -0,0 +1,416 @@ +# In Rust translations +rust_init_error_title = एप्लिकेशन शुरू होने के दौरान गंभीर त्रुटि। +rust_init_error_message = + एप्लिकेशन शुरू करते समय एक गंभीर त्रुटि हुई: + + { $error_message } + + यह OpenGL/Vulkan ड्राइवरों की कमी या खराबी, एप्लिकेशन को वर्चुअल मशीन में चलाने या Krokiet या उसके किसी एक लाइब्रेरी में मौजूद बग के कारण हो सकता है। + + आप विभिन्न बिल्ड (skia_opengl, skia_vulkan, femtovg_opengl - डिफ़ॉल्ट) या सॉफ़्टवेयर रेंडरर के साथ एप्लिकेशन चलाने की कोशिश कर सकते हैं, यह देखने के लिए कि क्या इससे समस्या हल होती है।. +rust_loaded_preset = लोड किया गया प्रीसेट { $preset_idx } +rust_file_already_exists = फ़ाइल "{ $file }" पहले से मौजूद है, और इसे ओवरराइट नहीं किया जाएगा +rust_error_removing_file_after_copy = फ़ाइल "{ $file }" को हटाने के दौरान त्रुटि (किसी अन्य विभाजन में कॉपी करने के बाद), कारण: { $reason } +rust_error_copying_file = "{ $input }" को "{ $output }" में कॉपी करते समय त्रुटि आई, कारण: { $reason } +rust_loading_tags_cache = टैग कैश लोड हो रहा है +rust_loading_fingerprints_cache = फिंगरप्रिंट कैश लोड हो रहा है +rust_saving_tags_cache = टैग्स की कैश को सुरक्षित रखना +rust_saving_fingerprints_cache = फिंगरप्रिंट डेटा का अस्थायी संग्रहण +rust_loading_prehash_cache = प्री-हैश कैश लोड हो रहा है +rust_saving_prehash_cache = प्री-हैश कैश को सुरक्षित करना +rust_loading_hash_cache = हैश कैश लोड हो रहा है +rust_saving_hash_cache = हैश कैश को सहेज रहा है +rust_loading_exif_cache = EXIF कैश लोड हो रहा है +rust_saving_exif_cache = EXIF कैश को सहेज रहा है +rust_scanning_name = { $entries_checked } फ़ाइल का नाम स्कैन किया जा रहा है +rust_scanning_size_name = { $entries_checked } फ़ाइलों का आकार और नाम स्कैन कर रहा है +rust_scanning_size = { $entries_checked } फ़ाइल का स्कैन आकार +rust_scanning_file = { $entries_checked } फ़ाइल को स्कैन कर रहा हूँ +rust_scanning_folder = फ़ोल्डर { $entries_checked } को स्कैन कर रहा हूँ +rust_checked_tags = जांच किए गए टैग: { $items_stats } +rust_checked_content = जांच की गई सामग्री: { $items_stats } ({ $size_stats }) +rust_compared_tags = तुलना किए गए टैग: { $items_stats } +rust_compared_content = तुलना की गई सामग्री: { $items_stats } +rust_hashed_images = हैश किए गए { $items_stats } चित्र (आकार: { $size_stats }) +rust_compared_image_hashes = तुलना किए गए इमेज हैश: { $items_stats } +rust_hashed_videos = हैश किए गए { $items_stats } वीडियो। +rust_created_thumbnails = { $items_stats } वीडियो के लिए थंबनेल बनाए गए +rust_checked_files = जाँच किया गया: { $items_stats } फ़ाइल ({ $size_stats }) +rust_checked_files_bad_extensions = जांच की गई { $items_stats } फ़ाइल +rust_checked_files_bad_names = जांच की गई { $items_stats } फ़ाइल +rust_checked_videos = जांच किए गए { $items_stats } वीडियो (आकार: { $size_stats }) +rust_analyzed_partial_hash = विश्लेषित किया गया आंशिक हैश: { $items_stats } फ़ाइलें ({ $size_stats }) +rust_analyzed_full_hash = विश्लेषण किया गया: { $items_stats } फ़ाइलों का पूरा हैश ({ $size_stats })। +rust_failed_to_rename_file = फ़ाइल "{ $old_path }" का नाम बदलकर "{ $new_path }" करने में विफल, त्रुटि: "{ $error }" +rust_no_included_paths = जब कोई भी पथ शामिल नहीं किया गया है, तो स्कैन शुरू नहीं किया जा सकता।. +rust_all_paths_referenced = जब सभी शामिल किए गए पथों को "संदर्भित पथ" के रूप में सेट किया जाता है, तो स्कैन शुरू नहीं किया जा सकता। आपको इनपुट पथ के बगल में स्थित "संदर्भ" चेकबॉक्स को निष्क्रिय करना होगा. +rust_found_empty_folders = { $time } में, { $items_found } खाली फ़ोल्डर पाए गए +rust_found_empty_files = मिली { $items_found } खाली फ़ाइलें, इसमें { $time } समय लगा +rust_found_similar_images = { $time } में, { $groups } समूहों में { $items_found } समान इमेज फ़ाइलें मिलीं। +rust_found_similar_videos = पाए गए { $items_found } समान वीडियो फाइलें, जो { $groups } समूहों में हैं, और इसमें { $time } समय लगा। +rust_found_similar_music_files = { $time } में, { $groups } समूहों में { $items_found } समान संगीत फ़ाइलें मिलीं। +rust_found_invalid_symlinks = मिली { $items_found } गलत सिंबॉलिक लिंकें, इसमें { $time } समय लगा +rust_found_temporary_files = { $time } में, { $items_found } अस्थायी फ़ाइलें पाई गईं +rust_no_file_type_selected = बिना किसी चयनित फ़ाइल प्रकार के, टूटी हुई फ़ाइलों को नहीं खोजा जा सकता. +rust_found_broken_files = पाए गए { $items_found } दूषित फ़ाइलें, जिनका आकार { $size } है और जिन्हें खोजने में { $time } लगा। +rust_found_bad_extensions = ढूंढें गए { $items_found } फ़ाइलें जिनमें गलत एक्सटेंशन हैं, और इसमें { $time } समय लगा। +rust_found_bad_names = { $time } में, { $items_found } ऐसी फ़ाइलें मिलीं जिनके नाम गलत हैं +rust_found_video_optimizer = { $time } में, अनुकूलन के लिए { $items_found } फ़ाइलें मिलीं +rust_found_duplicate_files = { $groups } समूहों में { $items_found } डुप्लिकेट फ़ाइलें पाई गईं, जिनका आकार { $size } है और जिन्हें खोजने में { $time } लगा। +rust_found_duplicate_files_no_lost_space = पाए गए { $items_found } डुप्लिकेट फ़ाइलें, जो { $groups } समूहों में हैं, और इसमें { $time } समय लगा। +rust_found_big_files = मिले { $items_found } बड़ी फ़ाइलें, जिनका आकार { $size } है और जिन्हें खोजने में { $time } लगा। +rust_found_exif_files = { $time } में, EXIF डेटा वाले { $items_found } फ़ाइलें मिलीं +rust_cannot_load_preset = पूर्व निर्धारित सेटिंग { $preset_idx } को बदलने और लोड करने में असमर्थ - कारण: { $reason }, इसके बजाय डिफ़ॉल्ट सेटिंग्स का उपयोग किया जा रहा है +rust_saved_preset = सहेजा गया प्रीसेट: { $preset_idx } +rust_cannot_save_preset = प्रीसेट { $preset_idx } को सहेजने में असमर्थ - कारण: { $reason } +rust_reset_preset = रीसेट प्रीसेट { $preset_idx } +rust_cannot_create_output_folder = आउटपुट फ़ोल्डर "{ $output_folder }" बनाने में असमर्थ, कारण: { $error } +rust_delete_summary = डिलीट किए गए: { $deleted } आइटम, हटाने में विफल: { $failed } आइटम, कुल आइटम: { $total } +rust_rename_summary = नाम बदलने वाले { $renamed } आइटम, नाम बदलने में विफल { $failed } आइटम, कुल { $total } आइटम में से +rust_move_summary = { $moved } आइटम स्थानांतरित किए गए, { $failed } आइटम स्थानांतरित करने में विफल रहे, कुल { $total } आइटम में से +rust_hardlink_summary = हार्डलिंक्ड { $hardlinked } आइटम, हार्डलिंक करने में विफल { $failed } आइटम, कुल { $total } आइटम में से। +rust_symlink_summary = सिंबोलिंक किए गए { $symlinked } आइटम, सिंबोलिंक करने में विफल { $failed } आइटम, कुल { $total } आइटम में से +rust_optimize_video_summary = अनुकूलित किए गए { $optimized } वीडियो, अनुकूलन में विफल { $failed } वीडियो, कुल { $total } वीडियो में से +rust_clean_exif_summary = { $cleaned } फ़ाइलों से EXIF डेटा साफ़ किया गया, { $failed } फ़ाइलों को साफ़ करने में विफलता हुई, कुल { $total } फ़ाइलें +rust_deleting_files = { $items_stats } फ़ाइल को हटाना ({ $size_stats }) +rust_deleting_no_size_files = { $items_stats } फ़ाइल को हटाना +rust_renaming_files = { $items_stats } फ़ाइल का नाम बदल रहा है +rust_moving_files = { $items_stats } फ़ाइल को स्थानांतरित किया जा रहा है ({ $size_stats }) +rust_moving_no_size_files = { $items_stats } फ़ाइल को स्थानांतरित किया जा रहा है +rust_hardlinking_files = हार्डलिंकिंग { $items_stats } फ़ाइल ({ $size_stats }) +rust_hardlinking_no_size_files = हार्डलिंकिंग { $items_stats } फ़ाइल +rust_symlinking_files = सिंबोलिंक लिंक बनाना: फ़ाइल { $items_stats } ({ $size_stats }) +rust_symlinking_no_size_files = सिंबॉलिक लिंक बनाना: { $items_stats } फ़ाइल +rust_optimizing_videos = अनुकूलित { $items_stats } वीडियो ({ $size_stats }) +rust_optimizing_no_size_videos = अनुकूलित { $items_stats } वीडियो। +rust_cleaning_exif = { $items_stats } फ़ाइल से EXIF डेटा हटाना ({ $size_stats }) +rust_cleaning_no_size_exif = { $items_stats } फ़ाइल से EXIF डेटा हटाना +rust_no_files_deleted = कोई भी फ़ाइल या फ़ोल्डर हटाने के लिए चयनित नहीं है +rust_no_files_renamed = कोई भी फ़ाइल या फ़ोल्डर चयन नहीं किया गया है जिनका नाम बदला जाना है +rust_no_files_moved = कोई भी फ़ाइल या फ़ोल्डर स्थानांतरित करने के लिए चयनित नहीं है +rust_no_files_hardlinked = कोई भी फ़ाइल या फ़ोल्डर हार्डलिंकिंग के लिए चयनित नहीं है +rust_no_files_symlinked = कोई भी फ़ाइल या फ़ोल्डर सिम्लिंकिंग के लिए चयनित नहीं है +rust_no_videos_optimized = कोई भी वीडियो चयन नहीं किया गया है जिन्हें अनुकूलित किया जा सके +rust_no_exif_cleaned = कोई भी फ़ाइल EXIF डेटा साफ़ करने के लिए चुनी नहीं गई है +rust_extracted_exif_tags = { $items_stats } फ़ाइलों से EXIF टैग निकाले गए ({ $size_stats }) +rust_delete_confirmation = क्या आप वाकई में चयनित आइटमों को डिलीट करना चाहते हैं? +rust_delete_confirmation_number_simple = { $items } आइटम चुने गए. +rust_delete_confirmation_number_groups = { $items } आइटम, { $groups } समूहों में से चुने गए. +rust_delete_confirmation_selected_all_in_group = सभी आइटम { $groups } समूहों में से चुने गए हैं. +rust_move_confirmation = क्या आप वाकई में चयनित आइटमों को स्थानांतरित करना चाहते हैं? +rust_move_confirmation_number_simple = { $items } आइटम चुने गए. +rust_clean_exif_confirmation = क्या आप वाकई में चयनित आइटमों से EXIF डेटा हटाना चाहते हैं? +rust_clean_exif_confirmation_number_simple = { $items } आइटम चुने गए. +clean_exif_overwrite_files_text = फ़ाइलों को अधिलेखित करें +rust_optimize_video_confirmation = क्या आप वाकई में चयनित वीडियो को ऑप्टिमाइज़ करना चाहते हैं? +rust_optimize_video_confirmation_number_simple = { $items } आइटम चुने गए. +rust_hardlink_confirmation = क्या आप वाकई में चयनित आइटम्स के लिए हार्डलिंक्स बनाना चाहते हैं? +rust_hardlink_confirmation_number_simple = { $items } आइटम चुने गए. +rust_symlink_confirmation = क्या आप वाकई में चयनित आइटम्स के लिए सिंबॉलिक लिंक बनाना चाहते हैं? +rust_symlink_confirmation_number_simple = { $items } आइटम चुने गए. +rust_rename_confirmation = क्या आप वाकई में चुने गए आइटम का नाम बदलना चाहते हैं? +rust_rename_confirmation_number_simple = { $items } आइटम चुने गए. +rust_cache_processed_files = प्रोसेस्ड { $files } कैशे फाइलें +rust_cache_entries_stats = हटाए गए: { $removed } प्रविष्टियाँ, कुल: { $all }, शेष: { $left } +rust_cache_size_reduced = कैश फ़ाइलों का आकार { $size } तक कम कर दिया गया है +rust_cache_time_elapsed = बीता हुआ समय: { $time } +rust_symlink_failed = Failed to symlink { $name } to { $target }, reason { $reason } +rust_hardlink_failed = हार्डलिंक बनाने में विफलता: फ़ाइल "{ $name }" को "{ $target }" पर लिंक नहीं किया जा सका, कारण: "{ $reason }" + +# Slint translations, but in arrays + +column_selection = चयन। +column_size = आकार +column_file_name = फ़ाइल का नाम +column_path = रास्ता +column_modification_date = संशोधन की तारीख +column_similarity = समानता +column_dimensions = आयाम +column_new_dimensions = नए आयाम +column_title = शीर्षक +column_artist = कलाकार +column_year = वर्ष +column_bitrate = बिटरेट +column_length = लंबाई +column_genre = शैली +column_type_of_error = त्रुटि का प्रकार +column_symlink_name = सिम्लिंक का नाम +column_symlink_folder = सिंबॉलिक लिंक फ़ोल्डर +column_destination_path = गंतव्य पथ +column_current_extension = वर्तमान एक्सटेंशन +column_proper_extension = उचित विस्तार +column_fps = FPS +column_codec = कोडेक +column_duration = अवधि +column_exif_tags = EXIF टैग +column_new_name = नया नाम +# Slint translations +ok_button = Ok +cancel_button = रद्द करें +do_you_want_to_continue = क्या आप जारी रखना चाहेंगे? +main_window_title = Krokiet - डेटा क्लीनर +scan_button = स्कैन करें। +stop_button = रुकें। +stop_text = रुकें। +select_button = चयन करें। +move_button = आगे बढ़ें। +delete_button = हटाएं +save_button = सुरक्षित करें। +sort_button = क्रमबद्ध करें। +rename_button = नाम बदलें +motto = + यह प्रोग्राम उपयोग करने के लिए मुफ्त है और हमेशा रहेगा। + विस्तृत जानकारी के लिए MIT/GPL लाइसेंस देखें।. +unicorn = आप एक यूनिकॉर्न को नहीं देख सकते, लेकिन यूनिकॉर्न हमेशा आपको देखता रहता है।. +repository = रिपॉजिटरी +instruction = निर्देश। +donation = दान +translation = अनुवाद +included_paths = शामिल पथ +excluded_paths = बहिष्कृत पथ +ref = Ref +path = रास्ता +tool_duplicate_files = डुप्लिकेट फ़ाइलें +tool_empty_folders = खाली फ़ोल्डर +tool_big_files = बड़ी फ़ाइलें +tool_empty_files = खाली फ़ाइलें +tool_temporary_files = अस्थायी फ़ाइलें +tool_similar_images = समान चित्र +tool_similar_videos = समान वीडियो +tool_music_duplicates = संगीत की डुप्लिकेट प्रतियां +tool_invalid_symlinks = अमान्य सिंबोलिंक। +tool_broken_files = टूटी हुई फाइलें +tool_bad_extensions = खराब एक्सटेंशन +tool_bad_names = खराब नाम। +tool_video_optimizer = वीडियो ऑप्टिमाइज़र +tool_exif_remover = Exif डेटा हटाने वाला उपकरण +sort_by_full_name = पूरा नाम के अनुसार क्रमबद्ध करें +sort_by_selection = क्रम चयन के अनुसार लगाएं +sort_reverse = उल्टा क्रम +selection_all = सभी का चयन करें। +selection_deselect_all = सभी का चयन रद्द करें +selection_invert_selection = चयन को उलटा करें +selection_the_biggest_size = सबसे बड़ा आकार चुनें +selection_the_biggest_resolution = सबसे बड़ा रिज़ॉल्यूशन चुनें +selection_the_smallest_size = सबसे छोटा आकार चुनें +selection_the_smallest_resolution = सबसे छोटा रिज़ॉल्यूशन चुनें +selection_newest = नवीनतम चुनें +selection_oldest = सबसे पुराना चुनें +selection_shortest_path = सबसे छोटा रास्ता चुनें +selection_longest_path = सबसे लंबा रास्ता चुनें। +stage_current = वर्तमान अवस्था: +stage_all = सभी चरण: +subsettings = उपसमुच्चय। +subsettings_images_hash_size = हैश का आकार +subsettings_images_resize_algorithm = आकार बदलने का एल्गोरिदम +subsettings_images_ignore_same_size = एक ही आकार की छवियों को अनदेखा करें +subsettings_images_max_difference = अधिकतम अंतर +subsettings_images_duplicates_hash_type = हैश का प्रकार +subsettings_duplicates_check_method = जांच विधि +subsettings_duplicates_name_case_sensitive = केस संवेदनशीलता (केवल नाम मोड में)। +subsettings_biggest_files_sub_method = विधि +subsettings_biggest_files_sub_number_of_files = फ़ाइलों की संख्या +subsettings_videos_max_difference = अधिकतम अंतर +subsettings_videos_ignore_same_size = समान आकार वाले वीडियो को अनदेखा करें +subsettings_music_audio_check_type = ऑडियो जांच का प्रकार +subsettings_music_approximate_comparison = अनुमानित टैग तुलना +subsettings_music_compared_tags = तुलना किए गए टैग +subsettings_music_title = शीर्षक +subsettings_music_artist = कलाकार +subsettings_music_bitrate = बिटरेट +subsettings_music_genre = शैली +subsettings_music_year = साल +subsettings_music_length = लंबाई +subsettings_music_max_difference = अधिकतम अंतर +subsettings_music_minimal_fragment_duration = न्यूनतम फ़्रेम अवधि +subsettings_music_compare_fingerprints_only_with_similar_titles = समान शीर्षकों वाले समूहों के भीतर तुलना करें +subsettings_broken_files_type = जांच करने के लिए फ़ाइलों के प्रकार +subsettings_broken_files_audio = ऑडियो +subsettings_broken_files_pdf = पीडीएफ +subsettings_broken_files_archive = संग्रह +subsettings_broken_files_image = छवि +subsettings_broken_files_video = वीडियो +subsettings_broken_files_video_info = यह ffmpeg/ffprobe का उपयोग करता है। यह काफी धीमा हो सकता है और छोटी-छोटी त्रुटियों का भी पता लगा सकता है, भले ही फ़ाइल ठीक से चल रही हो।. +subsettings_bad_names_issues = फ़ाइल नाम की जाँचें। +subsettings_bad_names_uppercase_extension = बड़े अक्षरों में एक्सटेंशन +subsettings_bad_names_uppercase_extension_hint = ऐसे फ़ाइलों को खोजें जिनमें एक्सटेंशन में बड़े अक्षर हों (जैसे, .JPG, .Mp3) और छोटे अक्षरों में लिखे गए संस्करण का सुझाव दें +subsettings_bad_names_emoji_used = नाम में इमोजी +subsettings_bad_names_emoji_used_hint = उन फ़ाइलों को खोजें जिनके नाम में इमोजी अक्षर (😀, 🎉, आदि) हैं, और उन्हें हटाने का सुझाव दें +subsettings_bad_names_space_at_start_end = शुरुआती/अंतिम स्पेस। +subsettings_bad_names_space_at_start_end_hint = उन फ़ाइलों को खोजें जिनके नाम में शुरुआत या अंत में स्पेस हैं, और उन्हें हटाने का सुझाव दें। +subsettings_bad_names_non_ascii = गैर-ASCII वर्ण +subsettings_bad_names_non_ascii_hint = गैर-ASCII वर्णों (ą, ć, ñ, आदि) का पता लगाता है और उन्हें ASCII समकक्षों (a, c, n) से बदलने का सुझाव देता है, या यदि कोई मिलान नहीं है तो उन्हें हटा देता है +subsettings_bad_names_restricted_charset = सीमित अक्षर सेट +subsettings_bad_names_restricted_charset_hint = गैर-ASCII अक्षरों को ASCII में बदलता है, फिर उन फ़ाइलों को खोजता है जिनमें 0-9a-zA-Z और उपयोगकर्ता द्वारा परिभाषित अनुमत वर्णों के बाहर के वर्ण शामिल हैं +subsettings_bad_names_allowed_chars = अनुमत वर्ण +subsettings_bad_names_remove_duplicated = डुप्लिकेट अक्षर। +subsettings_bad_names_remove_duplicated_hint = लगातार दोहराए गए गैर-अक्षरांकीय वर्णों (जैसे, "file---name..txt") को खोजता है और डुप्लिकेट को हटाने का सुझाव देता है। +settings_global_settings = वैश्विक सेटिंग्स +settings_dark_theme = डार्क थीम +settings_show_only_icons = केवल आइकन दिखाएं +settings_excluded_items = बहिष्कृत आइटम: +settings_allowed_extensions = अनुमत एक्सटेंशन: +settings_excluded_extensions = बहिष्कृत एक्सटेंशन: +settings_file_size = फ़ाइल का आकार (किलोबाइट में) +settings_minimum_file_size = न्यूनतम: +settings_maximum_file_size = मैक्स: +settings_recursive_search = पुनरावर्ती खोज +settings_use_cache = कैश का उपयोग करें +settings_save_as_json = इसके अतिरिक्त, कैश को JSON फ़ाइल के रूप में भी सहेजें +settings_move_to_trash = डिलीट की गई फ़ाइलों को ट्रैश में ले जाएं +settings_ignore_other_filesystems = अन्य फ़ाइल सिस्टम को अनदेखा करें (केवल लिनक्स के लिए)। +settings_delete_outdated_cache_entries = स्वचालित रूप से पुरानी कैश प्रविष्टियों को हटा दें +settings_delete_outdated_cache_entries_hint = जब यह सुविधा सक्षम होती है, तो ऐप कैश लोड करते समय (अधिकतम एक बार प्रति सप्ताह) यह सत्यापित करेगा कि क्या कैश में मौजूद रिकॉर्ड अभी भी मौजूदा और अपरिवर्तित फ़ाइलों/डेटा की ओर इशारा कर रहे हैं +settings_hide_hard_links = हार्ड लिंक छिपाएं +settings_hide_hard_links_hint = परिणामों में एक ही फ़ाइल के लिए बने हार्ड लिंक को छिपाएं +settings_thread_number = थ्रेड नंबर: +settings_restart_required = ---परिवर्तनों को लागू करने के लिए, आपको ऐप को पुनः आरंभ करना होगा।--- +settings_duplicate_image_preview = छवि का पूर्वावलोकन +settings_duplicate_minimal_hash_cache_size = कैश किए गए फ़ाइलों का न्यूनतम आकार - हैश (केबी) +settings_duplicate_use_prehash = प्रीहैश का उपयोग करें। +settings_duplicate_minimal_prehash_cache_size = कैश किए गए फ़ाइलों का न्यूनतम आकार - प्रीहैश (KB) +settings_similar_images_show_image_preview = छवि का पूर्वावलोकन +settings_application_scale_text = एप्लिकेशन का पैमाना +settings_application_scale_hint_text = जब मैनुअल स्केल सक्षम होता है, तो यह आपको एक कस्टम स्केल फैक्टर चुनने की अनुमति देता है, लेकिन मॉनिटर के DPI के आधार पर स्वचालित स्केलिंग को पूरी तरह से निष्क्रिय कर देता है।. +settings_restart_required_scale_text = ---स्केल में किए गए बदलावों को लागू करने के लिए, आपको ऐप को पुनः आरंभ करना होगा।--- +settings_use_manual_application_scale_text = मैन्युअल रूप से एप्लिकेशन स्केल का उपयोग करें +settings_video_thumbnails_preview = छवि का पूर्वावलोकन +settings_open_config_folder = कॉन्फ़िगरेशन फ़ोल्डर खोलें +settings_open_cache_folder = कैश फ़ोल्डर खोलें +settings_language = भाषा +settings_current_preset = वर्तमान में चयनित सेटिंग: +settings_edit_name = नाम संपादित करें +settings_choose_name_for_prefix = उपसर्ग के लिए नाम चुनें +settings_save = सहेजें। +settings_load = लोड करें। +settings_reset = रीसेट करें +settings_similar_videos_tool = समान वीडियो टूल +settings_video_thumbnails_clear_unused_thumbnails = ऐप शुरू होने पर, 7 दिनों से पुराने अप्रयुक्त वीडियो थंबनेल हटा दें +settings_video_thumbnails_header = वीडियो थंबनेल +settings_video_thumbnails_generate = थंबनेल उत्पन्न करें +settings_video_thumbnails_position = थंबनेल की स्थिति वीडियो में (प्रतिशत में) +settings_video_thumbnails_generate_grid = एकल छवि के बजाय, थंबनेल ग्रिड उत्पन्न करें +settings_video_thumbnails_generate_grid_hint = ग्रिड में कई छवियों को उत्पन्न करना, एक ही थंबनेल उत्पन्न करने की तुलना में बहुत धीमा होता है। +settings_video_thumbnails_grid_tiles_per_side = थंबनेल ग्रिड में प्रत्येक तरफ टाइलों की संख्या +settings_video_thumbnails_grid_tiles_per_side_hint = ग्रिड में प्रत्येक तरफ थंबनेल टाइलों की संख्या। उदाहरण के लिए, 2 का चयन करने से 2x2 का ग्रिड बनेगा, जिससे एक थंबनेल बनेगा जिसमें 4 छवियां होंगी।. +settings_similar_images_tool = समान छवियों का उपकरण +settings_general_settings = सामान्य सेटिंग्स +settings_cache_header_text = कैश सेटिंग्स +settings_clean_cache_button_text = पुरानी, अप्रचलित कैश साफ़ करें +settings_settings = सेटिंग्स +settings_load_tabs_sizes_at_startup = शुरू होने पर टैब साइज़ लोड करें +settings_load_windows_size_at_startup = विंडोज का आकार स्टार्टअप पर लोड करें +settings_limit_lines_of_messages = संदेशों को 500 पंक्तियों तक सीमित करें (यह टेक्स्टएडिट विजेट की धीमी गति के लिए एक अस्थायी समाधान है)। +settings_play_audio_on_scan_completion_text = जब स्कैन सफलतापूर्वक पूरा हो जाए, तो ध्वनि बजाएं +settings_audio_feature_hint_text = यह सुविधा केवल तभी उपलब्ध होती है जब आप ऑडियो सुविधा के साथ कंपाइल कर रहे हों +settings_audio_env_variable_hint_text = ध्वनि बदली जा सकती है, इसके लिए KROKIET_AUDIO_STOP_FILE नामक पर्यावरण चर को एक मान्य ऑडियो फ़ाइल के पथ पर सेट करें। +popup_save_title = परिणामों को सहेजें +popup_save_message = यह परिणाम 3 अलग-अलग फ़ाइलों में सहेजे जाएंगे +popup_rename_title = फ़ाइलों का नाम बदलना +popup_new_paths_title = कृपया प्रत्येक पथ को एक अलग पंक्ति में जोड़ें। +popup_move_title = फ़ाइलों को स्थानांतरित करना +popup_move_copy_checkbox = फ़ाइलों को स्थानांतरित करने के बजाय, उनकी प्रतियां बनाएँ +popup_move_preserve_folder_checkbox = फ़ोल्डर संरचना को बनाए रखें +move_confirmation_text = क्या आप वाकई में चयनित आइटमों को स्थानांतरित करना चाहते हैं? +rename_confirmation_text = क्या आप वाकई में चयनित आइटमों का नाम बदलना चाहते हैं? +delete = आइटम हटाएं +stopping_scan = स्कैन रोक दिया गया है, कृपया प्रतीक्षा करें... +searching = खोज जारी है... +subsettings_videos_crop_detect = फसल का पता लगाने की विधि +subsettings_videos_skip_forward_amount = छोड़ने की अवधि [सेकंड] +subsettings_videos_vid_hash_duration = वीडियो का हैश अवधि +settings_cache_number_size_text = कैश फ़ाइलों का आकार: { $size }, फ़ाइलों की संख्या: { $number } +settings_video_thumbnails_number_size_text = वीडियो थंबनेल का आकार: { $size }, फ़ाइलों की संख्या: { $number } +settings_log_number_size_text = लॉग फ़ाइलों का आकार: { $size }, फ़ाइलों की संख्या: { $number } +popup_clean_cache_title_text = पुरानी, अप्रचलित कैश साफ़ करें +popup_clean_cache_confirmation_text = क्या आप वाकई में पुरानी कैशे प्रविष्टियों को साफ़ करना चाहते हैं? इससे उन फ़ाइलों के लिए कैशे प्रविष्टियाँ हट जाएंगी जो अब मौजूद नहीं हैं या जिन्हें संशोधित किया गया है. +popup_clean_cache_progress_text = कैश फ़ाइल संसाधित की जा रही है: +popup_clean_cache_current_file_text = वर्तमान फ़ाइल: +popup_clean_cache_file_progress_text = वर्तमान फ़ाइल की प्रगति: +popup_clean_cache_overall_progress_text = कुल मिलाकर प्रगति: +popup_clean_cache_stopped_by_user_text = कैश साफ़ करने की प्रक्रिया उपयोगकर्ता द्वारा रोक दी गई। +popup_clean_cache_finished_text = कैश की सफाई सफलतापूर्वक पूरी हो गई! +popup_clean_cache_error_details_text = त्रुटि विवरण: +popup_clean_cache_files_with_errors = त्रुटियों वाली फ़ाइलें: +subsettings_video_optimizer_mode = मोड +subsettings_video_optimizer_crop_type = फसल का प्रकार +subsettings_video_optimizer_black_pixel_threshold = ब्लैक पिक्सेल थ्रेशोल्ड +subsettings_video_optimizer_black_pixel_threshold_hint = प्रत्येक पिक्सेल चैनल के लिए अधिकतम RGB मान जिसे काला (0-128) माना जाएगा। डिफ़ॉल्ट: 20 +subsettings_video_optimizer_black_bar_min_percentage = ब्लैक बार का न्यूनतम प्रतिशत +subsettings_video_optimizer_black_bar_min_percentage_hint = एक पंक्ति/स्तंभ में काले पिक्सेल का न्यूनतम प्रतिशत, जिसे "काला बार" माना जाएगा (50-100)। डिफ़ॉल्ट: 90 +subsettings_video_optimizer_max_samples = अधिकतम नमूने +subsettings_video_optimizer_max_samples_hint = प्रत्येक वीडियो के लिए विश्लेषण किए जाने वाले अधिकतम फ़्रेमों की संख्या (5-1000)। डिफ़ॉल्ट: 60 +subsettings_video_optimizer_min_crop_size = न्यूनतम क्रॉप आकार +subsettings_video_optimizer_min_crop_size_hint = किसी भी तरफ से क्रॉप करने के लिए न्यूनतम पिक्सेल (1-1000)। छोटे क्रॉप को नजरअंदाज किया जाएगा। डिफ़ॉल्ट: 5 +subsettings_video_optimizer_video_codec = वीडियो कोडेक +subsettings_video_optimizer_excluded_codecs = बहिष्कृत कोडेक +subsettings_video_optimizer_video_quality = वीडियो की गुणवत्ता (सीआरएफ) +subsettings_reset = रीसेट करें +subsettings_exif_ignored_tags_text = अवरोपित टैग: +subsettings_exif_ignored_tags_hint_text = टैग की अल्पविराम से अलग की गई सूची जो स्कैनिंग से बाहर की जानी चाहिए (उदाहरण के लिए, GPS, थंबनेल)। कुछ टैग, जैसे कि TIFF फ़ाइलों में ImageWidth, छवि को खराब होने से बचाने के लिए छिपे हुए हैं।. +clean_button_text = साफ़। +clean_text = EXIF डेटा को साफ़ करें +clean_confirmation_text = क्या आप वाकई में चयनित आइटमों से EXIF डेटा हटाना चाहते हैं? +crop_videos_text = वीडियो क्रॉप करें +crop_video_confirmation_text = क्या आप वाकई में चयनित वीडियो को क्रॉप करना चाहते हैं? +crop_reencode_video_text = वीडियो को फिर से एन्कोड करें +reencode_videos_text = वीडियो को फिर से एन्कोड करें +optimize_button_text = अनुकूलित करें। +optimize_confirmation_text = क्या आप वाकई में चुने गए वीडियो को फिर से एन्कोड करना चाहते हैं? +optimize_fail_if_bigger_text = यदि अनुकूलित फ़ाइल बड़ी है, तो त्रुटि उत्पन्न करें +optimize_overwrite_files_text = फ़ाइलों को अधिलेखित करें +optimize_limit_video_size_text = वीडियो का आकार सीमित करें +optimize_max_width_text = अधिकतम चौड़ाई: +optimize_max_height_text = अधिकतम ऊंचाई: +hardlink_button_text = हार्डलिंक +hardlink_text = हार्डलिंक बनाएँ +hardlink_confirmation_text = क्या आप वाकई में चयनित आइटम्स के लिए हार्डलिंक बनाना चाहते हैं? +softlink_button_text = Softlink +softlink_text = सॉफ्टलिंक बनाएं +softlink_confirmation_text = क्या आप वाकई में चुने गए आइटम्स के लिए सॉफ्टलिंक (सिमलिंक) बनाना चाहते हैं? + +column_full_path = पूरा पथ +file_dialog_open = जारी रखने के लिए, डायलॉग विंडो को बंद करें +selection_custom_select_unselect = कस्टम चयन/अ चयन +settings_similar_videos_preview_hint = प्रीव्यू केवल तभी दिखाई देगा जब "थंबनेल उत्पन्न करें" विकल्प सक्षम हो, या जब पहले से ही कोई थंबनेल उत्पन्न हो चुका हो।. +settings_show_notification_on_scan_completion_text = जब स्कैन पूरा हो जाए, तो एक नोटिफिकेशन दिखाएं +settings_notification_feature_hint_text = यह सुविधा केवल तभी उपलब्ध होती है जब आप नोटिफिकेशन फीचर के साथ कंपाइल कर रहे हों +settings_notification_focused_hint_text = सूचना एक पॉप-अप के रूप में दिखाई नहीं दे सकती है जब ऐप विंडो सक्रिय होती है। +popup_custom_select_title_text = कस्टम चयन / चयन रद्द करें +popup_custom_select_button_text = चयन करें। +popup_custom_unselect_button_text = अनचयन करें +popup_custom_column_name_header_text = कॉलम +popup_custom_filter_value_header_text = फ़िल्टर मान (वाइल्डकार्ड / रेगुलर एक्सप्रेशन) +popup_custom_case_sensitive_text = केस सेंसिटिव (Case sensitive) +popup_custom_leave_one_in_group_text = प्रत्येक समूह में, सभी आइटमों को चुनें, सिवाय एक के +popup_custom_hint_str_text = टेक्स्ट कॉलम: वाइल्डकार्ड्स *name* /home/* *.rs +popup_custom_hint_int_text = आकार [KB] / संख्यात्मक कॉलम: >= 2048 < 512 = 0 (ऑपरेटर: >= <= > < =) +popup_custom_hint_date_text = तिथि कॉलम: DD-MM-YYYY या YYYY-MM-DD, वैकल्पिक समय HH:MM:SS। उदाहरण: >= 2020-01-01 या < 31-12-2022 23:59:59 +compare_button_text = तुलना करें +compare_back_text = वापस +compare_prev_group_text = पिछला समूह +compare_next_group_text = अगला समूह +compare_swap_text = बदलाव करें। +compare_info_text = जानकारी +compare_diff_text = अंतर +compare_loading_title_text = कृपया प्रतीक्षा करें... +compare_cancel_text = रद्द करें +compare_resolution_mismatch_text = विभिन्न रिज़ॉल्यूशन - विभिन्न परिणाम गलत हो सकते हैं +compare_computing_diff_text = गणना चल रही है... +compare_info_file_name_text = फ़ाइल का नाम +compare_info_path_text = रास्ता +compare_info_size_text = आकार +compare_info_resolution_text = संकल्प +compare_info_modification_date_text = संशोधन की तारीख +compare_loading_images_text = इमेजेस लोड हो रही हैं... +compare_cancelling_text = रद्द करने की प्रक्रिया चल रही है, कृपया प्रतीक्षा करें... +context_menu_open_item_text = खुला आइटम +context_menu_open_parent_text = मूल फ़ोल्डर खोलें +context_menu_remove_from_results_text = परिणामों से हटाएं +context_menu_remove_all_from_folder_text = फ़ोल्डर से सभी फ़ाइलें हटाएं +context_menu_select_all_from_folder_text = फ़ोल्डर से सभी चुनें +context_menu_select_all_from_folder_except_one_text = फ़ोल्डर से सभी चुनें (एक रखें)। +context_menu_exclude_parent_folder_text = पैरेंट फ़ोल्डर को शामिल न करें +context_menu_exclude_item_text = आइटम को बाहर करें +context_menu_copy_name_text = नाम की प्रतिलिपि बनाएँ +context_menu_copy_parent_folder_path_text = पेरेंट फ़ोल्डर का पाथ कॉपी करें \ No newline at end of file diff --git a/krokiet/i18n/id/krokiet.ftl b/krokiet/i18n/id/krokiet.ftl new file mode 100644 index 000000000..0149be3a1 --- /dev/null +++ b/krokiet/i18n/id/krokiet.ftl @@ -0,0 +1,416 @@ +# In Rust translations +rust_init_error_title = Kesalahan Kritis Selama Aplikasi Dimulai +rust_init_error_message = + Terjadi kesalahan kritis saat memulai aplikasi: + + { $error_message } + + Hal ini mungkin disebabkan oleh driver OpenGL/Vulkan yang hilang atau bermasalah, menjalankan aplikasi di dalam mesin virtual, atau adanya *bug* pada Krokiet atau salah satu *library*-nya. + + Anda dapat mencoba menjalankan versi aplikasi yang berbeda (skia_opengl, skia_vulkan, femtovg_opengl - versi *default*) atau menggunakan *renderer* berbasis perangkat lunak untuk melihat apakah masalah tersebut teratasi. +rust_loaded_preset = Preset yang dimuat: { $preset_idx } +rust_file_already_exists = File "{ $file }" sudah ada, dan tidak akan ditimpa +rust_error_removing_file_after_copy = Terjadi kesalahan saat menghapus file "{ $file }" (setelah disalin ke partisi lain), alasan: { $reason } +rust_error_copying_file = Terjadi kesalahan saat menyalin "{ $input }" ke "{ $output }", alasannya: { $reason } +rust_loading_tags_cache = Memuat cache tag +rust_loading_fingerprints_cache = Memuat cache sidik jari +rust_saving_tags_cache = Menyimpan cache tag +rust_saving_fingerprints_cache = Menyimpan data sidik jari sementara +rust_loading_prehash_cache = Memuat cache pra-hash +rust_saving_prehash_cache = Menyimpan cache pra-hash +rust_loading_hash_cache = Memuat cache hash +rust_saving_hash_cache = Menyimpan cache hash +rust_loading_exif_cache = Memuat cache EXIF +rust_saving_exif_cache = Menyimpan data cache EXIF +rust_scanning_name = Memindai nama dari { $entries_checked } berkas +rust_scanning_size_name = Memindai ukuran dan nama dari { $entries_checked } berkas +rust_scanning_size = Memeriksa ukuran berkas sebanyak { $entries_checked } berkas +rust_scanning_file = Memindai file { $entries_checked } +rust_scanning_folder = Memindai folder { $entries_checked } +rust_checked_tags = Memeriksa tag dari { $items_stats } +rust_checked_content = Memeriksa konten dari { $items_stats } ({ $size_stats }) +rust_compared_tags = Bandingkan tag dari { $items_stats } +rust_compared_content = Bandingkan konten dari { $items_stats } +rust_hashed_images = Gambar yang telah di-hash { $items_stats } ({ $size_stats }) +rust_compared_image_hashes = Bandingkan hash gambar dari { $items_stats } +rust_hashed_videos = Video yang telah dienkripsi: { $items_stats } +rust_created_thumbnails = Membuat thumbnail untuk { $items_stats } video +rust_checked_files = File { $items_stats } telah diperiksa (ukuran: { $size_stats }) +rust_checked_files_bad_extensions = Memeriksa berkas { $items_stats } +rust_checked_files_bad_names = File { $items_stats } telah diperiksa +rust_checked_videos = Telah diperiksa { $items_stats } video ({ $size_stats }) +rust_analyzed_partial_hash = Menganalisis sebagian dari hash file { $items_stats } ({ $size_stats }) +rust_analyzed_full_hash = Menganalisis hash lengkap dari { $items_stats } file ({ $size_stats }) +rust_failed_to_rename_file = Gagal mengganti nama file dari { $old_path } menjadi { $new_path }, kesalahan: { $error } +rust_no_included_paths = Tidak dapat memulai pemindaian jika tidak ada jalur yang ditentukan. +rust_all_paths_referenced = Tidak dapat memulai pemindaian jika semua jalur yang disertakan diatur sebagai jalur referensi. Anda perlu menonaktifkan kotak centang "referensi" di samping jalur input. +rust_found_empty_folders = Ditemukan { $items_found } folder kosong dalam { $time } +rust_found_empty_files = Ditemukan { $items_found } berkas kosong dalam { $time } +rust_found_similar_images = Ditemukan { $items_found } file gambar serupa dalam { $groups } kelompok dalam waktu { $time } +rust_found_similar_videos = Ditemukan { $items_found } berkas video serupa dalam { $groups } kelompok, dalam waktu { $time } +rust_found_similar_music_files = Ditemukan { $items_found } file musik serupa dalam { $groups } grup, dalam waktu { $time } +rust_found_invalid_symlinks = Ditemukan { $items_found } tautan simbolik yang tidak valid dalam waktu { $time } +rust_found_temporary_files = Ditemukan { $items_found } berkas sementara dalam { $time } +rust_no_file_type_selected = Tidak dapat menemukan file yang rusak tanpa memilih jenis file tertentu. +rust_found_broken_files = Ditemukan { $items_found } berkas rusak yang membutuhkan { $size } ruang penyimpanan dan waktu { $time} +rust_found_bad_extensions = Ditemukan { $items_found } file dengan ekstensi yang tidak valid dalam { $time } +rust_found_bad_names = Ditemukan { $items_found } file dengan nama yang tidak valid dalam { $time } +rust_found_video_optimizer = Ditemukan { $items_found } file untuk dioptimalkan dalam { $time } +rust_found_duplicate_files = Ditemukan { $items_found } berkas duplikat dalam { $groups } grup, yang memakan ruang sebesar { $size } dan membutuhkan waktu { $time} +rust_found_duplicate_files_no_lost_space = Ditemukan { $items_found } file duplikat dalam { $groups } grup dalam waktu { $time } +rust_found_big_files = Ditemukan { $items_found } berkas besar dengan ukuran { $size } dalam waktu { $time } +rust_found_exif_files = Ditemukan { $items_found } berkas dengan data EXIF dalam { $time } +rust_cannot_load_preset = Tidak dapat mengubah dan memuat preset { $preset_idx } - alasannya { $reason }, menggunakan pengaturan bawaan sebagai gantinya +rust_saved_preset = Preset yang disimpan { $preset_idx } +rust_cannot_save_preset = Tidak dapat menyimpan preset { $preset_idx } - alasannya: { $reason } +rust_reset_preset = Reset pengaturan awal { $preset_idx } +rust_cannot_create_output_folder = Tidak dapat membuat folder output "{ $output_folder }", alasannya: { $error } +rust_delete_summary = Dihapus { $deleted } item, gagal menghapus { $failed } item, dari total { $total } item +rust_rename_summary = Mengganti nama { $renamed } item, gagal mengganti nama { $failed } item, dari total { $total } item +rust_move_summary = Dipindahkan { $moved } item, gagal dipindahkan { $failed } item, dari total { $total } item +rust_hardlink_summary = Tautan keras ke { $hardlinked } item, gagal membuat tautan keras ke { $failed } item, dari total { $total } item +rust_symlink_summary = Membuat tautan simbolis untuk { $symlinked } item, gagal membuat tautan simbolis untuk { $failed } item, dari total { $total } item +rust_optimize_video_summary = Video yang berhasil dioptimalkan: { $optimized }, video yang gagal dioptimalkan: { $failed }, total video: { $total } +rust_clean_exif_summary = Membersihkan data EXIF dari { $cleaned } berkas, gagal membersihkan { $failed } berkas, dari total { $total } berkas +rust_deleting_files = Menghapus file { $items_stats } (ukuran: { $size_stats }) +rust_deleting_no_size_files = Menghapus file { $items_stats } +rust_renaming_files = Mengganti nama file { $items_stats } +rust_moving_files = Memindahkan file { $items_stats } ({ $size_stats }) +rust_moving_no_size_files = Memindahkan file { $items_stats } +rust_hardlinking_files = Membuat tautan keras ke file { $items_stats } ({ $size_stats }) +rust_hardlinking_no_size_files = Membuat tautan keras ke file { $items_stats } +rust_symlinking_files = Membuat tautan simbolik ke file { $items_stats } ({ $size_stats }) +rust_symlinking_no_size_files = Membuat tautan simbolik ke file { $items_stats } +rust_optimizing_videos = Video yang telah dioptimalkan { $items_stats } ({ $size_stats }) +rust_optimizing_no_size_videos = Video yang sudah dioptimalkan { $items_stats } +rust_cleaning_exif = Menghapus data EXIF dari { $items_stats } berkas ({ $size_stats }) +rust_cleaning_no_size_exif = Membersihkan data EXIF dari { $items_stats } file +rust_no_files_deleted = Tidak ada file atau folder yang dipilih untuk dihapus +rust_no_files_renamed = Tidak ada file atau folder yang dipilih untuk diganti namanya +rust_no_files_moved = Tidak ada berkas atau folder yang dipilih untuk dipindahkan +rust_no_files_hardlinked = Tidak ada file atau folder yang dipilih untuk hardlinking +rust_no_files_symlinked = Tidak ada berkas atau folder yang dipilih untuk dijadikan tautan simbolik +rust_no_videos_optimized = Tidak ada video yang dipilih untuk dioptimalkan +rust_no_exif_cleaned = Tidak ada file yang dipilih untuk pembersihan data EXIF +rust_extracted_exif_tags = Diekstrak tag EXIF dari { $items_stats } berkas ({ $size_stats }) +rust_delete_confirmation = Apakah Anda yakin ingin menghapus item yang dipilih? +rust_delete_confirmation_number_simple = { $items } item telah dipilih. +rust_delete_confirmation_number_groups = { $items } item dipilih dalam { $groups } grup. +rust_delete_confirmation_selected_all_in_group = Semua item yang dipilih dari { $groups } grup. +rust_move_confirmation = Apakah Anda yakin ingin memindahkan item yang dipilih? +rust_move_confirmation_number_simple = { $items } item telah dipilih. +rust_clean_exif_confirmation = Apakah Anda yakin ingin menghapus data EXIF dari item yang dipilih? +rust_clean_exif_confirmation_number_simple = { $items } item telah dipilih. +clean_exif_overwrite_files_text = Timpa file +rust_optimize_video_confirmation = Apakah Anda yakin ingin mengoptimalkan video yang telah dipilih? +rust_optimize_video_confirmation_number_simple = { $items } item telah dipilih. +rust_hardlink_confirmation = Apakah Anda yakin ingin membuat tautan fisik (hardlink) untuk item yang dipilih? +rust_hardlink_confirmation_number_simple = { $items } item telah dipilih. +rust_symlink_confirmation = Apakah Anda yakin ingin membuat tautan simbolis untuk item yang dipilih? +rust_symlink_confirmation_number_simple = { $items } item telah dipilih. +rust_rename_confirmation = Apakah Anda yakin ingin mengubah nama item yang dipilih? +rust_rename_confirmation_number_simple = { $items } item telah dipilih. +rust_cache_processed_files = Memproses { $files } berkas cache +rust_cache_entries_stats = Dihapus { $removed } entri dari total { $all }, tersisa { $left} +rust_cache_size_reduced = Ukuran berkas cache dikurangi sebesar { $size } +rust_cache_time_elapsed = Waktu yang telah berlalu: { $time } +rust_symlink_failed = Failed to symlink { $name } to { $target }, reason { $reason } +rust_hardlink_failed = Gagal membuat tautan keras untuk { $name } ke { $target }, alasannya: { $reason } + +# Slint translations, but in arrays + +column_selection = Pemilihan +column_size = Ukuran +column_file_name = Nama Berkas +column_path = Jalur +column_modification_date = Tangga Modifikasi +column_similarity = Kesamaan +column_dimensions = Dimensi +column_new_dimensions = Dimensi Baru +column_title = Judul +column_artist = Artis +column_year = Tahun +column_bitrate = Bitrate +column_length = Panjang +column_genre = Genre +column_type_of_error = Jenis Kesalahan +column_symlink_name = Nama Symlink +column_symlink_folder = Simbolik Link Folder +column_destination_path = Jalur Tujuan +column_current_extension = Ekstensi Saat Ini +column_proper_extension = Ekstensi yang Tepat +column_fps = FPS +column_codec = Codec +column_duration = Durasi +column_exif_tags = Tag EXIF +column_new_name = Nama Baru +# Slint translations +ok_button = Oke +cancel_button = Batalkan +do_you_want_to_continue = Apakah Anda ingin melanjutkan? +main_window_title = Krokiet - Pembersih Data +scan_button = Pindai +stop_button = Berhenti +stop_text = Berhenti +select_button = Pilih +move_button = Pindah +delete_button = Hapus +save_button = Simpan +sort_button = Urutkan +rename_button = Ubah nama +motto = + Program ini gratis untuk digunakan dan akan selalu demikian. + Lihat Lisensi MIT/GPL untuk detailnya. +unicorn = Anda mungkin tidak bisa melihat seekor unicorn, tetapi unicorn selalu melihat Anda. +repository = Repositori +instruction = Instruksi +donation = Donasi +translation = Terjemahan +included_paths = Jalur yang Termasuk +excluded_paths = Jalur yang Dikecualikan +ref = Ref +path = Jalur +tool_duplicate_files = Berkas Duplikat +tool_empty_folders = Folder Kosong +tool_big_files = Berkas Besar +tool_empty_files = Berkas Kosong +tool_temporary_files = Berkas Sementara +tool_similar_images = Gambar Serupa +tool_similar_videos = Video Serupa +tool_music_duplicates = Duplikat Musik +tool_invalid_symlinks = Tautan Simbolik Tidak Valid +tool_broken_files = Berkas Rusak +tool_bad_extensions = Ekstensi yang Buruk +tool_bad_names = Nama yang Buruk +tool_video_optimizer = Pengoptimal Video +tool_exif_remover = Penghapus Data EXIF +sort_by_full_name = Urutkan berdasarkan nama lengkap +sort_by_selection = Urutkan berdasarkan pilihan +sort_reverse = Urutan terbalik +selection_all = Pilih Semua +selection_deselect_all = Batalkan semua pilihan +selection_invert_selection = Balikkan pilihan +selection_the_biggest_size = Pilih ukuran yang paling besar +selection_the_biggest_resolution = Pilih resolusi terbesar +selection_the_smallest_size = Pilih ukuran terkecil +selection_the_smallest_resolution = Pilih resolusi terkecil +selection_newest = Pilih yang terbaru +selection_oldest = Pilih yang tertua +selection_shortest_path = Pilih jalur terpendek +selection_longest_path = Pilih jalur terpanjang +stage_current = Tahap Saat Ini: +stage_all = Semua Tahap: +subsettings = Subkelompok +subsettings_images_hash_size = Ukuran Hash +subsettings_images_resize_algorithm = Algoritma Pengubahan Ukuran +subsettings_images_ignore_same_size = Abaikan gambar-gambar dengan ukuran yang sama +subsettings_images_max_difference = Perbedaan maksimum +subsettings_images_duplicates_hash_type = Jenis Hash +subsettings_duplicates_check_method = Metode cek +subsettings_duplicates_name_case_sensitive = Sensitif terhadap huruf besar/kecil (hanya untuk mode penamaan) +subsettings_biggest_files_sub_method = Metode +subsettings_biggest_files_sub_number_of_files = Jumlah berkas +subsettings_videos_max_difference = Perbedaan maksimum +subsettings_videos_ignore_same_size = Abaikan video dengan ukuran yang sama +subsettings_music_audio_check_type = Jenis pemeriksaan audio +subsettings_music_approximate_comparison = Perbandingan Tag Perkiraan +subsettings_music_compared_tags = Tag yang dibandingkan +subsettings_music_title = Judul +subsettings_music_artist = Artis +subsettings_music_bitrate = Bitrate +subsettings_music_genre = Genre +subsettings_music_year = Tahun +subsettings_music_length = Panjang +subsettings_music_max_difference = Perbedaan maksimum +subsettings_music_minimal_fragment_duration = Durasi fragmen minimum +subsettings_music_compare_fingerprints_only_with_similar_titles = Bandingkan berdasarkan kelompok dengan judul yang serupa +subsettings_broken_files_type = Jenis file yang akan diperiksa +subsettings_broken_files_audio = Audio +subsettings_broken_files_pdf = PDF +subsettings_broken_files_archive = Arsip +subsettings_broken_files_image = Gambar +subsettings_broken_files_video = Video +subsettings_broken_files_video_info = Menggunakan ffmpeg/ffprobe. Cukup lambat dan mungkin mendeteksi kesalahan yang terlalu detail, bahkan jika file tersebut dapat diputar dengan baik. +subsettings_bad_names_issues = Pemeriksaan nama berkas +subsettings_bad_names_uppercase_extension = Ekstensi huruf kapital +subsettings_bad_names_uppercase_extension_hint = Mencari file yang memiliki huruf kapital dalam ekstensinya (misalnya, .JPG, .Mp3) dan menyarankan versi dengan huruf kecil +subsettings_bad_names_emoji_used = Emoji dalam nama +subsettings_bad_names_emoji_used_hint = Mencari file yang memiliki karakter emoji (seperti 😀, 🎉, dll.) dalam namanya dan menyarankan untuk menghapusnya +subsettings_bad_names_space_at_start_end = Spasi di awal/akhir +subsettings_bad_names_space_at_start_end_hint = Mencari file yang memiliki spasi di awal atau akhir namanya dan memberikan saran untuk menghapus spasi tersebut +subsettings_bad_names_non_ascii = Karakter non-ASCII +subsettings_bad_names_non_ascii_hint = Mendeteksi karakter non-ASCII (seperti ą, ć, ñ, dll.) dan menyarankan untuk menggantinya dengan karakter ASCII yang setara (seperti a, c, n) atau menghapusnya jika tidak ada padanan yang tersedia +subsettings_bad_names_restricted_charset = Kumpulan karakter yang terbatas +subsettings_bad_names_restricted_charset_hint = Mentransliterasikan karakter non-ASCII menjadi karakter ASCII, kemudian mencari file yang mengandung karakter di luar rentang 0-9a-zA-Z dan karakter yang diizinkan yang ditentukan oleh pengguna +subsettings_bad_names_allowed_chars = Karakter yang diizinkan +subsettings_bad_names_remove_duplicated = Karakter yang berulang +subsettings_bad_names_remove_duplicated_hint = Mencari karakter non-alfanumerik yang berulang secara berurutan (misalnya, "file---name..txt") dan memberikan saran untuk menghapus duplikasi tersebut +settings_global_settings = Pengaturan Global +settings_dark_theme = Tema gelap +settings_show_only_icons = Tampilkan hanya ikon +settings_excluded_items = Item yang dikecualikan: +settings_allowed_extensions = Ekstensi yang diizinkan: +settings_excluded_extensions = Ekstensi yang dikecualikan: +settings_file_size = Ukuran File (Kilobyte) +settings_minimum_file_size = Min: +settings_maximum_file_size = Maks: +settings_recursive_search = Pencarian rekursif +settings_use_cache = Gunakan *cache* +settings_save_as_json = Simpan juga cache sebagai file JSON +settings_move_to_trash = Pindahkan file yang dihapus ke tempat sampah +settings_ignore_other_filesystems = Abaikan sistem berkas lainnya (hanya untuk Linux) +settings_delete_outdated_cache_entries = Hapus secara otomatis entri cache yang sudah kedaluwarsa +settings_delete_outdated_cache_entries_hint = Saat diaktifkan, aplikasi akan memverifikasi (paling banyak sekali seminggu) apakah data yang disimpan dalam cache masih mengarah ke file/data yang ada dan belum dimodifikasi, saat proses pemuatan cache berlangsung +settings_hide_hard_links = Sembunyikan tautan keras +settings_hide_hard_links_hint = Sembunyikan tautan langsung ke berkas yang sama dalam hasil pencarian +settings_thread_number = Nomor thread +settings_restart_required = Anda perlu memulai ulang aplikasi untuk menerapkan perubahan pada nomor thread +settings_duplicate_image_preview = Pratinjau gambar +settings_duplicate_minimal_hash_cache_size = Ukuran minimum file yang disimpan dalam cache - Hash (KB) +settings_duplicate_use_prehash = Gunakan pra-hash +settings_duplicate_minimal_prehash_cache_size = Ukuran minimum berkas yang disimpan dalam cache - Pra-hash (KB) +settings_similar_images_show_image_preview = Pratinjau gambar +settings_application_scale_text = Skala aplikasi +settings_application_scale_hint_text = Saat mode skala manual diaktifkan, ini memungkinkan Anda untuk memilih faktor skala khusus, tetapi sepenuhnya menonaktifkan penskalaan otomatis berdasarkan DPI monitor. +settings_restart_required_scale_text = Anda perlu memulai ulang aplikasi untuk menerapkan perubahan pada skala +settings_use_manual_application_scale_text = Gunakan penskalaan aplikasi secara manual +settings_video_thumbnails_preview = Pratinjau gambar +settings_open_config_folder = Buka folder konfigurasi +settings_open_cache_folder = Buka folder cache +settings_language = Bahasa +settings_current_preset = Pengaturan Saat Ini: +settings_edit_name = Edit nama +settings_choose_name_for_prefix = Pilih nama untuk awalan +settings_save = Simpan +settings_load = Muat +settings_reset = Reset +settings_similar_videos_tool = Alat Video Serupa +settings_video_thumbnails_clear_unused_thumbnails = Hapus gambar mini video yang tidak digunakan dan berusia lebih dari 7 hari saat aplikasi dimulai +settings_video_thumbnails_header = Cuplikan Video +settings_video_thumbnails_generate = Buat gambar mini +settings_video_thumbnails_position = Posisi thumbnail dalam video (%) +settings_video_thumbnails_generate_grid = Buatlah tata letak thumbnail alih-alih hanya menampilkan satu gambar +settings_video_thumbnails_generate_grid_hint = Membuat beberapa gambar dalam format grid jauh lebih lambat daripada membuat satu thumbnail saja +settings_video_thumbnails_grid_tiles_per_side = Jumlah ubin per sisi dalam tata letak thumbnail +settings_video_thumbnails_grid_tiles_per_side_hint = Jumlah ubin thumbnail per sisi dalam grid. Misalnya, memilih angka 2 akan membuat grid 2x2, yang menghasilkan satu thumbnail yang terdiri dari 4 gambar. +settings_similar_images_tool = Alat Pencarian Gambar Serupa +settings_general_settings = Pengaturan Umum +settings_cache_header_text = Pengaturan Cache +settings_clean_cache_button_text = Bersihkan cache yang sudah kedaluwarsa +settings_settings = Pengaturan +settings_load_tabs_sizes_at_startup = Muat ukuran tab saat memulai program +settings_load_windows_size_at_startup = Muat ukuran jendela saat program dimulai +settings_limit_lines_of_messages = Batasi pesan hingga 500 baris (solusi sementara untuk widget TextEdit yang lambat) +settings_play_audio_on_scan_completion_text = Putar suara saat pemindaian selesai dengan sukses +settings_audio_feature_hint_text = Hanya tersedia ketika dikompilasi dengan fitur audio +settings_audio_env_variable_hint_text = Suara dapat diubah dengan mengatur variabel lingkungan KROKIET_AUDIO_STOP_FILE ke jalur file audio yang valid +popup_save_title = Menyimpan hasil +popup_save_message = Ini akan menyimpan hasil ke dalam 3 file yang berbeda +popup_rename_title = Mengganti nama berkas +popup_new_paths_title = Mohon tambahkan jalur, satu jalur per baris +popup_move_title = Memindahkan berkas +popup_move_copy_checkbox = Salin file, jangan dipindahkan +popup_move_preserve_folder_checkbox = Pertahankan struktur folder +move_confirmation_text = Apakah Anda yakin ingin memindahkan item yang dipilih? +rename_confirmation_text = Apakah Anda yakin ingin mengubah nama item yang dipilih? +delete = Hapus item +stopping_scan = Menghentikan pemindaian, mohon tunggu... +searching = Mencari... +subsettings_videos_crop_detect = Metode deteksi tanaman +subsettings_videos_skip_forward_amount = Durasi lewati [detik] +subsettings_videos_vid_hash_duration = Durasi hash video +settings_cache_number_size_text = Ukuran berkas cache: { $size }, jumlah berkas: { $number } +settings_video_thumbnails_number_size_text = Ukuran thumbnail video: { $size }, jumlah file: { $number } +settings_log_number_size_text = Ukuran file log: { $size }, jumlah file: { $number } +popup_clean_cache_title_text = Bersihkan Cache yang Sudah Kedaluwarsa +popup_clean_cache_confirmation_text = Apakah Anda yakin ingin menghapus entri cache yang sudah kedaluwarsa? Tindakan ini akan menghapus entri cache untuk file yang tidak lagi ada atau telah dimodifikasi. +popup_clean_cache_progress_text = Memproses berkas cache: +popup_clean_cache_current_file_text = Berkas saat ini: +popup_clean_cache_file_progress_text = Kemajuan pengolahan berkas saat ini: +popup_clean_cache_overall_progress_text = Kemajuan keseluruhan: +popup_clean_cache_stopped_by_user_text = Pembersihan cache dihentikan oleh pengguna +popup_clean_cache_finished_text = Pembersihan cache berhasil diselesaikan! +popup_clean_cache_error_details_text = Detail kesalahan: +popup_clean_cache_files_with_errors = File yang memiliki kesalahan: +subsettings_video_optimizer_mode = Mode +subsettings_video_optimizer_crop_type = Jenis Tanaman +subsettings_video_optimizer_black_pixel_threshold = Ambang Batas Piksel Hitam +subsettings_video_optimizer_black_pixel_threshold_hint = Nilai RGB maksimum untuk setiap saluran piksel yang dianggap sebagai warna hitam (0-128). Nilai default: 20 +subsettings_video_optimizer_black_bar_min_percentage = Persentase Minimum Batang Hitam +subsettings_video_optimizer_black_bar_min_percentage_hint = Persentase minimum piksel hitam dalam sebuah baris/kolom yang dianggap sebagai garis hitam (50-100). Default: 90 +subsettings_video_optimizer_max_samples = Jumlah Sampel Maksimum +subsettings_video_optimizer_max_samples_hint = Jumlah maksimum frame yang akan dianalisis per video (5-1000). Default: 60 +subsettings_video_optimizer_min_crop_size = Ukuran Potongan Minimum +subsettings_video_optimizer_min_crop_size_hint = Jumlah piksel minimum untuk memotong pada setiap sisi (1-1000). Potongan yang lebih kecil akan diabaikan. Default: 5 +subsettings_video_optimizer_video_codec = Codec video +subsettings_video_optimizer_excluded_codecs = Kodek yang dikecualikan +subsettings_video_optimizer_video_quality = Kualitas video (CRF) +subsettings_reset = Reset +subsettings_exif_ignored_tags_text = Tag yang diabaikan: +subsettings_exif_ignored_tags_hint_text = Daftar tag yang dipisahkan dengan koma untuk dikecualikan dari proses pemindaian (misalnya, GPS, Thumbnail). Beberapa tag, seperti ImageWidth dalam file TIFF, disembunyikan untuk mencegah kerusakan pada gambar. +clean_button_text = Bersih +clean_text = Bersihkan data EXIF +clean_confirmation_text = Apakah Anda yakin ingin menghapus data EXIF dari item yang dipilih? +crop_videos_text = Potong video +crop_video_confirmation_text = Apakah Anda yakin ingin memotong video yang dipilih? +crop_reencode_video_text = Encode ulang video +reencode_videos_text = Encode ulang video +optimize_button_text = Optimalkan +optimize_confirmation_text = Apakah Anda yakin ingin melakukan pengkodean ulang pada video yang dipilih? +optimize_fail_if_bigger_text = Gagal jika ukuran berkas yang telah dioptimalkan lebih besar +optimize_overwrite_files_text = Timpa file yang ada +optimize_limit_video_size_text = Batasi ukuran video +optimize_max_width_text = Lebar maksimum: +optimize_max_height_text = Tinggi maksimum: +hardlink_button_text = Hardlink +hardlink_text = Buat tautan keras +hardlink_confirmation_text = Apakah Anda yakin ingin membuat tautan fisik (hardlink) untuk item yang dipilih? +softlink_button_text = Softlink +softlink_text = Buat tautan simbolik +softlink_confirmation_text = Apakah Anda yakin ingin membuat tautan simbolik (symlink) untuk item yang dipilih? + +column_full_path = Jalur Lengkap +file_dialog_open = Tutup jendela dialog untuk melanjutkan +selection_custom_select_unselect = Pilih/Batalkan pilihan secara manual +settings_similar_videos_preview_hint = Pratinjau hanya akan ditampilkan jika opsi "Buat thumbnail" diaktifkan, atau jika thumbnail sudah dibuat sebelumnya. +settings_show_notification_on_scan_completion_text = Tampilkan notifikasi ketika proses pemindaian selesai +settings_notification_feature_hint_text = Hanya tersedia saat dikompilasi dengan fitur notifikasi +settings_notification_focused_hint_text = Notifikasi mungkin tidak muncul sebagai jendela pop-up ketika jendela aplikasi sedang aktif +popup_custom_select_title_text = Pilih/Batalkan pilihan secara manual +popup_custom_select_button_text = Pilih +popup_custom_unselect_button_text = Batalkan pilihan +popup_custom_column_name_header_text = Kolom +popup_custom_filter_value_header_text = Filter nilai (wildcard / ekspresi reguler) +popup_custom_case_sensitive_text = Sensitif terhadap huruf besar/kecil +popup_custom_leave_one_in_group_text = Pilih semua item kecuali satu, di setiap kelompok +popup_custom_hint_str_text = Kolom teks: karakter pengganti *name* /home/* *.rs +popup_custom_hint_int_text = Ukuran [KB] / kolom numerik: >= 2048 < 512 = 0 (operator: >= <= > < =) +popup_custom_hint_date_text = Kolom tanggal: DD-MM-YYYY atau YYYY-MM-DD, waktu bersifat opsional dalam format HH:MM:SS. Contoh: >= 2020-01-01 atau < 31-12-2022 23:59:59 +compare_button_text = Bandingkan +compare_back_text = Kembali +compare_prev_group_text = Kelompok Sebelumnya +compare_next_group_text = Kelompok Berikutnya +compare_swap_text = Tukar +compare_info_text = Informasi +compare_diff_text = Perbedaan +compare_loading_title_text = Harap tunggu... +compare_cancel_text = Batalkan +compare_resolution_mismatch_text = Resolusi yang berbeda - hasil yang berbeda mungkin tidak akurat +compare_computing_diff_text = Menghitung perbedaan... +compare_info_file_name_text = Nama file +compare_info_path_text = Jalur +compare_info_size_text = Ukuran +compare_info_resolution_text = Resolusi +compare_info_modification_date_text = Tanggal modifikasi +compare_loading_images_text = Memuat gambar... +compare_cancelling_text = Proses pembatalan, mohon tunggu... +context_menu_open_item_text = Buka Item +context_menu_open_parent_text = Buka Folder Induk +context_menu_remove_from_results_text = Hapus dari Hasil +context_menu_remove_all_from_folder_text = Hapus Semua dari Folder +context_menu_select_all_from_folder_text = Pilih Semua dari Folder +context_menu_select_all_from_folder_except_one_text = Pilih Semua dari Folder (pertahankan satu) +context_menu_exclude_parent_folder_text = Kecualikan Folder Induk +context_menu_exclude_item_text = Kecualikan Item +context_menu_copy_name_text = Salin Nama +context_menu_copy_parent_folder_path_text = Salin Jalur Folder Induk \ No newline at end of file diff --git a/krokiet/i18n/it/krokiet.ftl b/krokiet/i18n/it/krokiet.ftl index 7598375a2..dece33ecf 100644 --- a/krokiet/i18n/it/krokiet.ftl +++ b/krokiet/i18n/it/krokiet.ftl @@ -1,13 +1,13 @@ # In Rust translations rust_init_error_title = Errore Critico Durante l'Avvio dell'App -rust_init_error_message = - Si è verificato un errore critico durante l'avvio dell'applicazione: - - { $error_message } - - Questo può essere causato da driver OpenGL/Vulkan mancanti o malfunzionanti, dall'esecuzione dell'applicazione in una macchina virtuale o da un bug in Krokiet o in uno dei suoi librerie. - - È possibile provare ad eseguire diverse build (skia_opengl, skia_vulkan, femtovg_opengl - predefinito) o con il renderer software per vedere se ciò risolve il problema. +rust_init_error_message = + Si è verificato un errore critico durante l'avvio dell'applicazione: + + { $error_message } + + Questo può essere causato da driver OpenGL/Vulkan mancanti o malfunzionanti, dall'esecuzione dell'applicazione in una macchina virtuale o da un bug in Krokiet o in uno dei suoi librerie. + + È possibile provare ad eseguire diverse build (skia_opengl, skia_vulkan, femtovg_opengl - predefinito) o con il renderer software per vedere se ciò risolve il problema. rust_loaded_preset = Predefinito caricato { $preset_idx } rust_file_already_exists = File "{ $file }" già esistente, e non verrà sovrascritto rust_error_removing_file_after_copy = Errore durante l'eliminazione del file "{ $file }" (dopo averlo copiato in una partizione diversa), motivo: { $reason } @@ -54,7 +54,7 @@ rust_found_temporary_files = Trovati { $items_found } file temporanei in { $time rust_no_file_type_selected = Impossibile trovare file corrotti senza alcun tipo di file selezionato. rust_found_broken_files = Trovato { $items_found } file interrotti che prendono { $size } in { $time } rust_found_bad_extensions = Trovati { $items_found } file con estensioni errate in { $time } -rust_found_bad_names = Trovati { $items_found } file(s) con nomi scadenti in { $time} +rust_found_bad_names = Trovati { $items_found } file(s) con nomi scadenti in { $time } rust_found_video_optimizer = Trovati { $items_found } file da ottimizzare in { $time } rust_found_duplicate_files = Trova { $items_found } file duplicati in { $groups } gruppi occupando { $size } nel tempo di { $time } rust_found_duplicate_files_no_lost_space = Trovate { $items_found } file duplicati in { $groups } gruppi in { $time } @@ -114,7 +114,7 @@ rust_cache_processed_files = File { $files } cache elaborati rust_cache_entries_stats = Rimosse { $removed } voci da tutte le { $all }, { $left } voci rimanenti rust_cache_size_reduced = Diminuiti le dimensioni dei file della cache di { $size } rust_cache_time_elapsed = Tempo trascorso: { $time } -rust_symlink_failed = Failed to symlink { $name } to { $target }, reason { $reason } +rust_symlink_failed = Collegamento simbolico { $name } a { $target }, motivo { $reason } rust_hardlink_failed = Impossibile creare il collegamento diretto a { $name } in { $target }, motivo { $reason } # Slint translations, but in arrays @@ -366,3 +366,49 @@ hardlink_confirmation_text = Sei sicuro di voler creare collegamenti duri per gl softlink_button_text = Softlink softlink_text = Crea collegamenti simbolici softlink_confirmation_text = Sei sicuro di voler creare collegamenti simbolici (symlink) per gli elementi selezionati? + +column_full_path = Percorso completo +file_dialog_open = Chiudere la finestra di dialogo per continuare +selection_custom_select_unselect = Selezione/Deselezione personalizzata +settings_similar_videos_preview_hint = L'anteprima è visibile solo quando l'opzione "Genera miniature" è attiva, oppure quando una miniatura è già stata generata. +settings_show_notification_on_scan_completion_text = Mostra una notifica al termine della scansione +settings_notification_feature_hint_text = Disponibile solo quando si compila includendo la funzionalità di notifiche +settings_notification_focused_hint_text = La notifica potrebbe non apparire come una finestra pop-up quando la finestra dell'app è in primo piano +popup_custom_select_title_text = Selezione personalizzata / Deselezione +popup_custom_select_button_text = Seleziona +popup_custom_unselect_button_text = Deseleziona +popup_custom_column_name_header_text = Colonna +popup_custom_filter_value_header_text = Valore del filtro (carattere jolly / espressione regolare) +popup_custom_case_sensitive_text = Distinzione tra maiuscole e minuscole +popup_custom_leave_one_in_group_text = Selezionare tutti gli elementi, ad eccezione di uno, in ogni gruppo +popup_custom_hint_str_text = Colonne di testo: caratteri jolly *name* /home/* *.rs +popup_custom_hint_int_text = Dimensione [KB] / colonne numeriche: >= 2048 < 512 = 0 (operatori: >= <= > < =) +popup_custom_hint_date_text = Colonne di data: Formato GG-MM-AAAA o AAAA-MM-GG, facoltativamente con l'ora HH:MM:SS. Esempio: >= 2020-01-01 oppure < 31-12-2022 23:59:59 +compare_button_text = Confronta +compare_back_text = Indietro +compare_prev_group_text = Gruppo precedente +compare_next_group_text = Gruppo successivo +compare_swap_text = Scambio +compare_info_text = Informazioni +compare_diff_text = Diff +compare_loading_title_text = Attendi, per favore... +compare_cancel_text = Annulla +compare_resolution_mismatch_text = Risoluzioni diverse: i risultati potrebbero essere imprecisi +compare_computing_diff_text = Calcolo delle differenze... +compare_info_file_name_text = Nome del file +compare_info_path_text = Percorso +compare_info_size_text = Misura +compare_info_resolution_text = Risoluzione +compare_info_modification_date_text = Data di modifica +compare_loading_images_text = Caricamento immagini... +compare_cancelling_text = Annullamento in corso, attenda un momento... +context_menu_open_item_text = Element aperto +context_menu_open_parent_text = Apri cartella padre +context_menu_remove_from_results_text = Rimuovi dai risultati +context_menu_remove_all_from_folder_text = Rimuovi tutto dalla cartella +context_menu_select_all_from_folder_text = Seleziona tutto dalla cartella +context_menu_select_all_from_folder_except_one_text = Seleziona tutto dalla cartella (mantieni solo uno) +context_menu_exclude_parent_folder_text = Escludi la cartella principale +context_menu_exclude_item_text = Escludi elemento +context_menu_copy_name_text = Copia Nome +context_menu_copy_parent_folder_path_text = Copia il percorso della cartella principale \ No newline at end of file diff --git a/krokiet/i18n/ja/krokiet.ftl b/krokiet/i18n/ja/krokiet.ftl index b0fee68d0..ef9d09b44 100644 --- a/krokiet/i18n/ja/krokiet.ftl +++ b/krokiet/i18n/ja/krokiet.ftl @@ -1,13 +1,13 @@ # In Rust translations rust_init_error_title = アプリの起動中に致命的なエラーが発生しました -rust_init_error_message = - アプリケーションの起動中に、次のエラーが発生しました: - - { $error_message } - - これは、OpenGL/Vulkanドライバが不足しているか、または動作していないこと、仮想マシンでアプリケーションを実行していること、またはKrokietまたはそのライブラリ内のバグによって引き起こされた可能性があります。 - - 問題が解決するかどうかを確認するために、異なるビルド(skia_opengl、skia_vulkan、femtovg_opengl - デフォルト)を実行するか、ソフトウェアレンダラーを使用してみてください。. +rust_init_error_message = + アプリケーションの起動中に、次のエラーが発生しました: + + { $error_message } + + これは、OpenGL/Vulkanドライバが不足しているか、または動作していないこと、仮想マシンでアプリケーションを実行していること、またはKrokietまたはそのライブラリ内のバグによって引き起こされた可能性があります。 + + 問題が解決するかどうかを確認するために、異なるビルド(skia_opengl、skia_vulkan、femtovg_opengl - デフォルト)を実行するか、ソフトウェアレンダラーを使用してみてください。. rust_loaded_preset = プリセット { $preset_idx }を読み込みました rust_file_already_exists = ファイル "{ $file }" は既に存在し、上書きされません。 rust_error_removing_file_after_copy = ファイル "{ $file }" の削除中にエラー (別のパーティションにコピーされた後)、理由: { $reason } @@ -118,7 +118,7 @@ rust_cache_processed_files = 処理済み { $files } キャッシュファイル rust_cache_entries_stats = 削除 { $removed } エントリのうち、{ $all } のうち、{ $left } が残る rust_cache_size_reduced = キャッシュファイルのサイズを{ $size }に削減しました。 rust_cache_time_elapsed = 経過時間: { $time } -rust_symlink_failed = Failed to symlink { $name } to { $target }, reason { $reason } +rust_symlink_failed = シンボリックリンクに失敗しました { $name } to { $target }, reason { $reason} rust_hardlink_failed = { $name } を { $target } へのハードリンクに失敗しました、理由 { $reason } # Slint translations, but in arrays @@ -370,3 +370,49 @@ hardlink_confirmation_text = 選択した項目に対してハードリンクを softlink_button_text = ソフトリンク softlink_text = 作成してリンク softlink_confirmation_text = 選択した項目に対して、シンボリックリンク(symlinks)を作成しますか? + +column_full_path = 完全なパス +file_dialog_open = ダイアログウィンドウを閉じて、操作を続行してください。 +selection_custom_select_unselect = カスタム選択/非選択 +settings_similar_videos_preview_hint = プレビューは、「サムネイルを生成する」が有効になっている場合、またはサムネイルがすでに生成されている場合にのみ表示されます。. +settings_show_notification_on_scan_completion_text = スキャンが完了したら、通知を表示する。 +settings_notification_feature_hint_text = 通知機能を使用する場合にのみ利用可能です。 +settings_notification_focused_hint_text = 通知が、アプリのウィンドウがアクティブになっている場合に、ポップアップとして表示されないことがあります。 +popup_custom_select_title_text = カスタム選択 / 選択解除 +popup_custom_select_button_text = 選択 +popup_custom_unselect_button_text = 選択を解除 +popup_custom_column_name_header_text = 列 +popup_custom_filter_value_header_text = フィルタ値 (ワイルドカード / 正規表現) +popup_custom_case_sensitive_text = 大文字小文字を区別します。 +popup_custom_leave_one_in_group_text = 各グループの中で、1つだけ除外して、残りのすべてを選択してください。 +popup_custom_hint_str_text = テキスト列: ワイルドカード *name* /home/* *.rs +popup_custom_hint_int_text = サイズ[KB] / 数値項目: >= 2048 < 512 = 0 (演算子: >= <= > < =) +popup_custom_hint_date_text = 日付列: DD-MM-YYYY または YYYY-MM-DD 形式。オプションで時刻 HH:MM:SS を追加できます。例: >= 2020-01-01 または < 31-12-2022 23:59:59 +compare_button_text = 比較する。 +compare_back_text = 戻る +compare_prev_group_text = 前のグループ +compare_next_group_text = 次のグループへ +compare_swap_text = 交換する。 +compare_info_text = 情報 +compare_diff_text = 差分。 +compare_loading_title_text = お待ちください... +compare_cancel_text = キャンセル +compare_resolution_mismatch_text = 異なる解像度では、結果が異なり、精度が低下する可能性があります。 +compare_computing_diff_text = 差分を計算中... +compare_info_file_name_text = ファイル名 +compare_info_path_text = パス +compare_info_size_text = サイズ +compare_info_resolution_text = 解像度 +compare_info_modification_date_text = 修正日 +compare_loading_images_text = 画像を読み込み中... +compare_cancelling_text = キャンセル処理中... しばらくお待ちください。. +context_menu_open_item_text = 未開封商品 +context_menu_open_parent_text = 親フォルダを開く +context_menu_remove_from_results_text = 結果から削除 +context_menu_remove_all_from_folder_text = フォルダからすべて削除 +context_menu_select_all_from_folder_text = フォルダからすべて選択 +context_menu_select_all_from_folder_except_one_text = フォルダからすべて選択 (ただし、一つのみ保持) +context_menu_exclude_parent_folder_text = 親フォルダを除外 +context_menu_exclude_item_text = 除外項目 +context_menu_copy_name_text = コピー元名 +context_menu_copy_parent_folder_path_text = 親フォルダのパスをコピー \ No newline at end of file diff --git a/krokiet/i18n/ko/krokiet.ftl b/krokiet/i18n/ko/krokiet.ftl index 20f8b8068..d10b57bf0 100644 --- a/krokiet/i18n/ko/krokiet.ftl +++ b/krokiet/i18n/ko/krokiet.ftl @@ -1,13 +1,13 @@ # In Rust translations rust_init_error_title = 앱 시작 중 심각한 오류 -rust_init_error_message = - 애플리케이션 시작 중 오류가 발생했습니다: - - { $error_message } - - 이는 OpenGL/Vulkan 드라이버가 누락되었거나 제대로 작동하지 않아서, 가상 머신에서 애플리케이션을 실행하거나 Krokiet 또는 해당 라이브러리의 버그 때문일 수 있습니다. - - 다른 빌드(skia_opengl, skia_vulkan, femtovg_opengl - 기본)를 실행하거나 소프트웨어 렌더러를 사용하여 문제가 해결되는지 확인해 볼 수 있습니다. +rust_init_error_message = + 애플리케이션 시작 중 오류가 발생했습니다: + + { $error_message } + + 이는 OpenGL/Vulkan 드라이버가 누락되었거나 제대로 작동하지 않아서, 가상 머신에서 애플리케이션을 실행하거나 Krokiet 또는 해당 라이브러리의 버그 때문일 수 있습니다. + + 다른 빌드(skia_opengl, skia_vulkan, femtovg_opengl - 기본)를 실행하거나 소프트웨어 렌더러를 사용하여 문제가 해결되는지 확인해 볼 수 있습니다. rust_loaded_preset = 로드된 프리셋 { $preset_idx } rust_file_already_exists = 파일 "{ $file }" 이 이미 존재하며 덮어쓰이지 않습니다 rust_error_removing_file_after_copy = 파일 "{ $file }" 삭제 중 오류 발생 (다른 파티션으로 복사 후), 이유: { $reason } @@ -158,7 +158,7 @@ delete_button = 삭제 save_button = 저장 sort_button = 종류 rename_button = 이름 바꾸기 -motto = +motto = 이 프로그램은 무료로 사용할 수 있으며 항상如此翻译结果: 这个程序是免费使用的,而且将会一直如此。 请参见MIT/MPL许可证以获取详细信息。. @@ -372,3 +372,49 @@ hardlink_confirmation_text = 선택한 항목에 대해 하드 링크를 생성 softlink_button_text = 소프트링크 softlink_text = 생성 softlinks softlink_confirmation_text = 선택한 항목에 대한 심볼릭 링크(symlink)를 생성하시겠습니까? + +column_full_path = 전체 경로 +file_dialog_open = 대화 상자를 닫으시면 계속 진행됩니다 +selection_custom_select_unselect = 사용자 정의 선택/선택 해제 +settings_similar_videos_preview_hint = 미리보기는 "미니이미지 생성" 옵션이 활성화되었거나, 이미 미니이미지가 생성된 경우에만 표시됩니다. +settings_show_notification_on_scan_completion_text = 스캔이 완료되면 알림을 표시합니다 +settings_notification_feature_hint_text = 알림 기능과 함께 컴파일할 때만 사용 가능합니다 +settings_notification_focused_hint_text = 알림이 앱 창에 초점이 맞춰져 있을 때 팝업으로 표시되지 않을 수 있습니다 +popup_custom_select_title_text = 사용자 정의 선택/선택 해제 +popup_custom_select_button_text = 선택 +popup_custom_unselect_button_text = 선택 해제 +popup_custom_column_name_header_text = 열 (기사/칼럼) +popup_custom_filter_value_header_text = 필터 값 (와일드카드 / 정규 표현식) +popup_custom_case_sensitive_text = 대소문자 구분 +popup_custom_leave_one_in_group_text = 각 그룹에서 하나의 항목을 제외하고 모든 항목을 선택하세요 +popup_custom_hint_str_text = 텍스트 열: 와일드카드 *name* /home/* *.rs +popup_custom_hint_int_text = 크기 [KB] / 숫자 열: >= 2048 < 512 = 0 (연산자: >=, <=, >, <, =) +popup_custom_hint_date_text = 날짜 컬럼: DD-MM-YYYY 또는 YYYY-MM-DD 형식, 선택적으로 시간 HH:MM:SS 추가 가능. 예: >= 2020-01-01 또는 < 31-12-2022 23:59:59 +compare_button_text = 비교 +compare_back_text = 뒤로 +compare_prev_group_text = 이전 그룹 +compare_next_group_text = 다음 그룹으로 +compare_swap_text = 교환 +compare_info_text = 정보 +compare_diff_text = 변경 사항 +compare_loading_title_text = 잠시만 기다려 주세요... +compare_cancel_text = 취소 +compare_resolution_mismatch_text = 다양한 해상도 - 서로 다른 결과가 나올 수 있으며, 이 경우 결과가 부정확할 수 있습니다 +compare_computing_diff_text = 차이점 계산 중... +compare_info_file_name_text = 파일명 +compare_info_path_text = 경로 +compare_info_size_text = 크기 +compare_info_resolution_text = 해상도 +compare_info_modification_date_text = 수정 날짜 +compare_loading_images_text = 이미지 로딩 중... +compare_cancelling_text = 취소 중입니다... 잠시 기다려 주십시오. +context_menu_open_item_text = 개방형 항목 +context_menu_open_parent_text = 상위 폴더 열기 +context_menu_remove_from_results_text = 결과에서 제외 +context_menu_remove_all_from_folder_text = 폴더에서 모두 삭제 +context_menu_select_all_from_folder_text = 폴더에서 모두 선택 +context_menu_select_all_from_folder_except_one_text = 폴더에서 모두 선택 (단, 하나만 유지) +context_menu_exclude_parent_folder_text = 상위 폴더 제외 +context_menu_exclude_item_text = 제외 항목 +context_menu_copy_name_text = 복사 대상 이름 +context_menu_copy_parent_folder_path_text = 부모 폴더 경로 복사 \ No newline at end of file diff --git a/krokiet/i18n/nl/krokiet.ftl b/krokiet/i18n/nl/krokiet.ftl index 333f96be2..92c03c0d3 100644 --- a/krokiet/i18n/nl/krokiet.ftl +++ b/krokiet/i18n/nl/krokiet.ftl @@ -1,11 +1,11 @@ # In Rust translations -rust_init_error_title = Critische fout tijdens app opstarten -rust_init_error_message = - Een kritische fout is opgetreden bij het starten van de applicatie: - - { $error_message } - - Dit kan worden veroorzaakt door ontbrekende of defecte OpenGL/Vulkan drivers, het uitvoeren van de applicatie in een virtuele machine of een bug in Krokiet of een van zijn libraries. +rust_init_error_title = Kritische fout tijdens app opstarten +rust_init_error_message = + Een kritische fout is opgetreden bij het starten van de applicatie: + + { $error_message } + + Dit kan worden veroorzaakt door ontbrekende of defecte OpenGL/Vulkan drivers, het uitvoeren van de applicatie in een virtuele machine of een bug in Krokiet of een van zijn libraries. rust_loaded_preset = Voorinstelling geladen { $preset_idx } rust_file_already_exists = Bestand "{ $file }" bestaat al en zal niet worden overschreven rust_error_removing_file_after_copy = Fout bij het verwijderen van bestand "{ $file }" (na kopiëren naar een andere partitie), reden: { $reason } @@ -52,7 +52,7 @@ rust_found_temporary_files = Gevonden { $items_found } tijdelijke bestanden in { rust_no_file_type_selected = Kan defecte bestanden niet vinden zonder geselecteerde bestandstype. rust_found_broken_files = Gevonden { $items_found } defecte bestanden in { $size } in { $time } rust_found_bad_extensions = { $items_found } bestanden met ongeldige extensies gevonden in { $time } -rust_found_bad_names = Vond { $items_found } bestanden met slechte namen in { $time} +rust_found_bad_names = Vond { $items_found } bestanden met slechte namen in { $time } rust_found_video_optimizer = Vond { $items_found } bestanden om te optimaliseren in { $time } rust_found_duplicate_files = Gevonden { $items_found } dubbele bestanden in { $groups } groepen die { $size } in { $time } nemen rust_found_duplicate_files_no_lost_space = Gevonden { $items_found } dubbele bestanden in { $groups } groepen in { $time } @@ -112,7 +112,7 @@ rust_cache_processed_files = Verwerkt { $files } cache bestanden rust_cache_entries_stats = Verwijderd { $removed } entries uit alle { $all }, { $left } overgebleven rust_cache_size_reduced = Verkleinde cachebestandsgrootte met { $size } rust_cache_time_elapsed = Tijd verstreken: { $time } -rust_symlink_failed = Failed to symlink { $name } to { $target }, reason { $reason } +rust_symlink_failed = symlink { $name } naar { $target }mislukt, reden { $reason } rust_hardlink_failed = Faalde bij het hardlinken van { $name } naar { $target }, reden { $reason } # Slint translations, but in arrays @@ -149,7 +149,7 @@ do_you_want_to_continue = Wilt u doorgaan? main_window_title = Krokiet - Opschoner gegevens scan_button = Scannen stop_button = Stoppen -stop_text = Stop +stop_text = Stoppen select_button = Selecteren move_button = Verplaatsen delete_button = Verwijderen @@ -364,3 +364,49 @@ hardlink_confirmation_text = Ben je er zeker van dat je hardlinks wilt aanmaken softlink_button_text = Softlink softlink_text = Maak softlinks softlink_confirmation_text = Ben je zeker dat je softlinks (symlinks) wilt maken voor de geselecteerde items? + +column_full_path = Volledig pad +file_dialog_open = Sluit het dialoogvenster om verder te gaan +selection_custom_select_unselect = Aangepaste selectie/deselectie +settings_similar_videos_preview_hint = De preview is alleen zichtbaar wanneer "Genereren van thumbnails" is ingeschakeld, of wanneer een thumbnail al is gegenereerd. +settings_show_notification_on_scan_completion_text = Toon een melding wanneer de scan is voltooid +settings_notification_feature_hint_text = Alleen beschikbaar wanneer gecompileerd met de notificatiefunctie +settings_notification_focused_hint_text = De melding verschijnt mogelijk niet als een pop-up wanneer het app-venster actief is +popup_custom_select_title_text = Aangepaste selectie / deselectie +popup_custom_select_button_text = Selecteren +popup_custom_unselect_button_text = Deselcteren +popup_custom_column_name_header_text = Kolom +popup_custom_filter_value_header_text = Filterwaarde (wildcard / reguliere expressie) +popup_custom_case_sensitive_text = Hoofdlettergevoelig +popup_custom_leave_one_in_group_text = Selecteer alle items, behalve één, in elke groep +popup_custom_hint_str_text = Tekstkolommen: wildcards *name* /home/* *.rs +popup_custom_hint_int_text = Grootte [KB] / numerieke kolommen: >= 2048 < 512 = 0 (operatoren: >= <= > < =) +popup_custom_hint_date_text = Datumkolommen: DD-MM-YYYY of YYYY-MM-DD, optioneel tijdstip HH:MM:SS. Bijvoorbeeld: >= 2020-01-01 of < 31-12-2022 23:59:59 +compare_button_text = Vergelijk +compare_back_text = Terug +compare_prev_group_text = Vorige groep +compare_next_group_text = Volgende groep +compare_swap_text = Ruil +compare_info_text = Info +compare_diff_text = Verschil +compare_loading_title_text = Wacht alstublieft... +compare_cancel_text = Annuleren +compare_resolution_mismatch_text = Verschillende resoluties - verschillende resultaten kunnen onnauwkeurig zijn +compare_computing_diff_text = Het verschil wordt berekend... +compare_info_file_name_text = Bestandsnaam +compare_info_path_text = Pad +compare_info_size_text = Maat +compare_info_resolution_text = Resolutie +compare_info_modification_date_text = Datum van wijziging +compare_loading_images_text = Afbeeldingen worden geladen... +compare_cancelling_text = Annuleren, even geduld... +context_menu_open_item_text = Open item +context_menu_open_parent_text = Open bovenliggende map +context_menu_remove_from_results_text = Verwijder uit resultaten +context_menu_remove_all_from_folder_text = Verwijder alles uit map +context_menu_select_all_from_folder_text = Selecteer alles in map +context_menu_select_all_from_folder_except_one_text = Selecteer alles in map (houd er één) +context_menu_exclude_parent_folder_text = Exclusief bovenliggende map +context_menu_exclude_item_text = Item uitsluiten +context_menu_copy_name_text = Kopieer Naam +context_menu_copy_parent_folder_path_text = Kopieer het pad van de bovenliggende map \ No newline at end of file diff --git a/krokiet/i18n/no/krokiet.ftl b/krokiet/i18n/no/krokiet.ftl index a5f116fec..ec6b7a30c 100644 --- a/krokiet/i18n/no/krokiet.ftl +++ b/krokiet/i18n/no/krokiet.ftl @@ -1,13 +1,13 @@ # In Rust translations rust_init_error_title = Kritisk feil under applikasjonsstart -rust_init_error_message = - En kritisk feil oppstod under oppstart av applikasjonen: - - { $error_message } - - Dette kan skyldes manglende eller defekte OpenGL/Vulkan-drivere, kjøring av applikasjonen i en virtuell maskin eller en feil i Krokiet eller en av dets biblioteker. - - Du kan prøve å kjøre forskjellige bygg (skia_opengl, skia_vulkan, femtovg_opengl - standard) eller med programvarerenderer for å se om det løser problemet. +rust_init_error_message = + En kritisk feil oppstod under oppstart av applikasjonen: + + { $error_message } + + Dette kan skyldes manglende eller defekte OpenGL/Vulkan-drivere, kjøring av applikasjonen i en virtuell maskin eller en feil i Krokiet eller en av dets biblioteker. + + Du kan prøve å kjøre forskjellige bygg (skia_opengl, skia_vulkan, femtovg_opengl - standard) eller med programvarerenderer for å se om det løser problemet. rust_loaded_preset = Lastet inn forhåndsinnstilling { $preset_idx } rust_file_already_exists = Fil "{ $file }" eksisterer allerede, og vil ikke bli overskrevet rust_error_removing_file_after_copy = Feil ved sletting av fil "{ $file }" (etter kopiert til annen partisjon), årsak: { $reason } @@ -54,7 +54,7 @@ rust_found_temporary_files = Fant { $items_found } midlertidige filer i { $time rust_no_file_type_selected = Finner ikke ødelagte filer uten valgt filtype. rust_found_broken_files = Fant { $items_found } ødelagte filer som tar { $size } i { $time } rust_found_bad_extensions = Fant { $items_found } filer med feilaktige utvidelser i { $time } -rust_found_bad_names = Fant { $items_found } filer med dårlige navn i { $time} +rust_found_bad_names = Fant { $items_found } filer med dårlige navn i { $time } rust_found_video_optimizer = Fant { $items_found } filer å optimalisere i { $time } rust_found_duplicate_files = Fant { $items_found } dupliserte filer i { $groups } grupper som tar { $size } i { $time } rust_found_duplicate_files_no_lost_space = Fant { $items_found } dupliserte filer i { $groups } grupper i { $time } @@ -110,10 +110,11 @@ rust_symlink_confirmation = Er du sikker på at du vil opprette symlinker for de rust_symlink_confirmation_number_simple = { $items } elementer valgt. rust_rename_confirmation = Er du sikker på at du vil omdøpe de valgte elementene? rust_rename_confirmation_number_simple = { $items } elementer valgt. +rust_cache_processed_files = Behandlet { $files } cache-filer rust_cache_entries_stats = Fjernet { $removed } oppføringer ut av alle { $all }, { $left } igjen rust_cache_size_reduced = Redusert cachefilstørrelse med { $size } rust_cache_time_elapsed = Tid som er gått: { $time } -rust_symlink_failed = Failed to symlink { $name } to { $target }, reason { $reason } +rust_symlink_failed = Feil under symlink { $name } til { $target }, grunn { $reason} rust_hardlink_failed = Feilet med å hardlenke { $name } til { $target }, årsak { $reason } # Slint translations, but in arrays @@ -366,4 +367,48 @@ softlink_button_text = Programlenke softlink_text = Opprett mylkoblinger softlink_confirmation_text = Er du sikker på at du vil opprette softlenker (symlinks) for de valgte elementene? -rust_cache_processed_files = Behandlet { $files } cache-filer \ No newline at end of file +column_full_path = Full sti +file_dialog_open = Lukk dialogvinduet for å fortsette +selection_custom_select_unselect = Egendefinert valg/fravik +settings_similar_videos_preview_hint = Forhåndsvisningen er kun synlig når "Generer miniatyrbilder" er aktivert, eller når et miniatyrbilde allerede er generert. +settings_show_notification_on_scan_completion_text = Vis varsling når skanningen er fullført +settings_notification_feature_hint_text = Tilgjengelig kun når du kompilerer med funksjonalitet for varslinger +settings_notification_focused_hint_text = Varselen vises kanskje ikke som et popup-vindu når applikasjonsvinduet er i fokus +popup_custom_select_title_text = Egendefinert valg / fjern valg +popup_custom_select_button_text = Velg +popup_custom_unselect_button_text = Fjern markering +popup_custom_column_name_header_text = Kolonne +popup_custom_filter_value_header_text = Filterverdi (wildcard / regulært uttrykk) +popup_custom_case_sensitive_text = Skiller mellom store og små bokstaver +popup_custom_leave_one_in_group_text = Velg alle elementene bortsett fra ett, i hver gruppe +popup_custom_hint_str_text = Tekstkolonner: jokertegn *navn* /home/* *.rs +popup_custom_hint_int_text = Størrelse [KB] / numeriske kolonner: >= 2048 < 512 = 0 (operatorer: >= <= > < =) +popup_custom_hint_date_text = Datokolonner: DD-MM-YYYY eller YYYY-MM-DD, valgfri tid HH:MM:SS, f.eks. >= 2020-01-01 eller < 31-12-2022 23:59:59 +compare_button_text = Sammenlign +compare_back_text = Tilbake +compare_prev_group_text = Prev Group +compare_next_group_text = Neste gruppe +compare_swap_text = Bytt +compare_info_text = Info +compare_diff_text = Forskjell +compare_loading_title_text = Vennligst vent... +compare_cancel_text = Avbryt +compare_resolution_mismatch_text = Ulike oppløsninger – ulike resultater kan være unøyaktige +compare_computing_diff_text = Regner ut forskjellen... +compare_info_file_name_text = Filnavn +compare_info_path_text = Sti +compare_info_size_text = Størrelse +compare_info_resolution_text = Resolusjon +compare_info_modification_date_text = Endringsdato +compare_loading_images_text = Laster inn bilder... +compare_cancelling_text = Avbestilling, vennligst vent... +context_menu_open_item_text = Åpne element +context_menu_open_parent_text = Åpne overordnet mappe +context_menu_remove_from_results_text = Fjern fra resultater +context_menu_remove_all_from_folder_text = Fjern alt fra mappe +context_menu_select_all_from_folder_text = Velg alle fra mappe +context_menu_select_all_from_folder_except_one_text = Velg alt fra mappe (behold én) +context_menu_exclude_parent_folder_text = Ekskluder overordnet mappe +context_menu_exclude_item_text = Ekskluder element +context_menu_copy_name_text = Kopier navn +context_menu_copy_parent_folder_path_text = Kopier stien til overordnet mappe \ No newline at end of file diff --git a/krokiet/i18n/pl/krokiet.ftl b/krokiet/i18n/pl/krokiet.ftl index 5dc5ce213..0ad0f7d33 100644 --- a/krokiet/i18n/pl/krokiet.ftl +++ b/krokiet/i18n/pl/krokiet.ftl @@ -1,13 +1,13 @@ # In Rust translations rust_init_error_title = Krytyczny błąd podczas uruchamiania aplikacji rust_init_error_message = - Wystąpił krytyczny błąd podczas uruchamiania aplikacji: - - { $error_message } - - Może to być spowodowane brakiem lub uszkodzeniem sterowników OpenGL/Vulkan, uruchamianiem aplikacji w maszynie wirtualnej lub błędem w Krokiecie albo jednej z używanych bibliotek. - - Możesz spróbować uruchomić różne wersje renderera (skia_opengl, skia_vulkan, femtovg_opengl — domyślny) lub użyć renderera programowego, aby sprawdzić, czy to rozwiąże problem. + Wystąpił krytyczny błąd podczas uruchamiania aplikacji: + + { $error_message } + + Może to być spowodowane brakiem lub uszkodzeniem sterowników OpenGL/Vulkan, uruchamianiem aplikacji w maszynie wirtualnej lub błędem w Krokiecie albo jednej z używanych bibliotek. + + Możesz spróbować uruchomić różne wersje renderera (skia_opengl, skia_vulkan, femtovg_opengl — domyślny) lub użyć renderera programowego, aby sprawdzić, czy to rozwiąże problem. rust_loaded_preset = Wczytano preset { $preset_idx } rust_file_already_exists = Plik "{ $file }" już istnieje i nie zostanie nadpisany rust_error_removing_file_after_copy = Błąd podczas usuwania pliku "{ $file }" (po skopiowaniu na inną partycję), powód: { $reason } @@ -22,11 +22,11 @@ rust_loading_hash_cache = Ładowanie pamięci podręcznej hashy rust_saving_hash_cache = Zapisywanie pamięci podręcznej hashy rust_loading_exif_cache = Ładowanie pamięci podręcznej EXIF rust_saving_exif_cache = Zapisywanie pamięci podręcznej EXIF -rust_scanning_name = Skanowanie nazw { $entries_checked } plików -rust_scanning_size_name = Skanowanie rozmiaru i nazw { $entries_checked } plików -rust_scanning_size = Skanowanie rozmiaru { $entries_checked } plików -rust_scanning_file = Skanowanie { $entries_checked } plików -rust_scanning_folder = Skanowanie { $entries_checked } folderów +rust_scanning_name = Skanowanie nazw ({ $entries_checked }) plików +rust_scanning_size_name = Skanowanie rozmiaru i nazw ({ $entries_checked }) plików +rust_scanning_size = Skanowanie rozmiaru ({ $entries_checked }) plików +rust_scanning_file = Skanowanie ({ $entries_checked }) plików +rust_scanning_folder = Skanowanie ({ $entries_checked }) folderów rust_checked_tags = Sprawdzono tagi: { $items_stats } rust_checked_content = Sprawdzono zawartość: { $items_stats } ({ $size_stats }) rust_compared_tags = Porównano tagi: { $items_stats } @@ -110,6 +110,7 @@ rust_symlink_confirmation = Czy na pewno chcesz utworzyć dowiązania symboliczn rust_symlink_confirmation_number_simple = Wybrano { $items } elementów. rust_rename_confirmation = Czy na pewno chcesz zmienić nazwę wybranych elementów? rust_rename_confirmation_number_simple = Wybrano { $items } elementów. +rust_cache_processed_files = Przetworzono { $files } plików pamięci podręcznej rust_cache_entries_stats = Usunięto { $removed } wpisów z { $all }, { $left } pozostało rust_cache_size_reduced = Zmniejszono rozmiar pamięci podręcznej o { $size } rust_cache_time_elapsed = Upłynęło: { $time } @@ -165,7 +166,7 @@ donation = Darowizna translation = Tłumaczenie included_paths = Wybrane ścieżki excluded_paths = Wykluczone ścieżki -ref = Ref +ref = Ref. path = Ścieżka tool_duplicate_files = Zduplikowane pliki tool_empty_folders = Puste foldery @@ -277,12 +278,11 @@ settings_open_cache_folder = Otwórz folder pamięci podręcznej settings_language = Język settings_current_preset = Bieżący preset: settings_edit_name = Edytuj nazwę -settings_choose_name_for_prefix = Wybierz nazwę prefiksu +settings_choose_name_for_prefix = Wybierz nazwę dla prefiksu settings_save = Zapisz settings_load = Wczytaj settings_reset = Resetuj settings_similar_videos_tool = Narzędzie do podobnych wideo -settings_similar_videos_preview_hint = Podgląd będzie widoczny tylko, gdy opcja „Generuj miniatury” jest włączona, lub jeśli miniatura została już wygenerowana. settings_video_thumbnails_clear_unused_thumbnails = Usuń nieużywane miniatury wideo starsze niż 7 dni przy uruchamianiu aplikacji settings_video_thumbnails_header = Miniatury wideo settings_video_thumbnails_generate = Generuj miniatury @@ -302,9 +302,6 @@ settings_limit_lines_of_messages = Ogranicz wiadomości do 500 linii (dotyczy wo settings_play_audio_on_scan_completion_text = Odtwórz dźwięk po zakończeniu skanu settings_audio_feature_hint_text = Dostępne tylko, gdy aplikacja skompilowana została z funkcją audio settings_audio_env_variable_hint_text = Dźwięk można zmienić ustawiając zmienną środowiskową KROKIET_AUDIO_STOP_FILE na ścieżkę do pliku audio -settings_show_notification_on_scan_completion_text = Pokaż powiadomienie po zakończeniu skanu -settings_notification_feature_hint_text = Dostępne tylko, gdy aplikacja skompilowana została z funkcją notifications -settings_notification_focused_hint_text = Powiadomienie może nie pojawić się jako popup, gdy okno aplikacji jest aktywne popup_save_title = Zapisywanie wyników popup_save_message = To zapisze wyniki do 3 różnych plików popup_rename_title = Zmienianie nazw plików @@ -370,4 +367,48 @@ softlink_button_text = Dowiązanie symboliczne softlink_text = Utwórz dowiązania symboliczne softlink_confirmation_text = Czy na pewno chcesz utworzyć dowiązania symboliczne dla wybranych elementów? -rust_cache_processed_files = Przetworzono { $files } plików pamięci podręcznej \ No newline at end of file +column_full_path = Pełna ścieżka +file_dialog_open = Aby kontynuować, zamknij okno dialogowe +selection_custom_select_unselect = Wybierz/Odznacz niestandardowe opcje +settings_similar_videos_preview_hint = Podgląd jest widoczny tylko wtedy, gdy włączona jest opcja "Generuj miniaturki" lub gdy miniatura została już utworzona. +settings_show_notification_on_scan_completion_text = Wyświetlaj powiadomienie po zakończeniu skanowania +settings_notification_feature_hint_text = Dostępne tylko podczas kompilacji z włączoną funkcją powiadomień +settings_notification_focused_hint_text = Powiadomienie może nie wyświetlać się jako okienko wyskakujące, gdy okno aplikacji jest aktywne +popup_custom_select_title_text = Wybór/Odznaczenie (własne ustawienia) +popup_custom_select_button_text = Wybierz +popup_custom_unselect_button_text = Odznacz +popup_custom_column_name_header_text = Kolumna +popup_custom_filter_value_header_text = Wartość filtru (znak wieloznaczny / wyrażenie regularne) +popup_custom_case_sensitive_text = Wielkość liter ma znaczenie +popup_custom_leave_one_in_group_text = Wybierz wszystkie elementy, z wyjątkiem jednego, w każdej grupie +popup_custom_hint_str_text = Kolumny tekstowe: symbole wieloznaczne *name* /home/* *.rs +popup_custom_hint_int_text = Rozmiar [KB] / kolumny numeryczne: >= 2048 < 512 = 0 (operatory: >= <= > < =) +popup_custom_hint_date_text = Kolumny dat: format DD-MM-YYYY lub YYYY-MM-DD, opcjonalnie godzina HH:MM:SS, np. >= 2020-01-01 lub < 31-12-2022 23:59:59 +compare_button_text = Porównaj +compare_back_text = Wstecz +compare_prev_group_text = Poprzednia grupa +compare_next_group_text = Następna grupa +compare_swap_text = Zamień +compare_info_text = Informacje +compare_diff_text = Różnice +compare_loading_title_text = Proszę czekać... +compare_cancel_text = Anuluj +compare_resolution_mismatch_text = Różne rozdzielczości - wyniki mogą być niedokładne +compare_computing_diff_text = Obliczanie różnic... +compare_info_file_name_text = Nazwa pliku +compare_info_path_text = Ścieżka +compare_info_size_text = Rozmiar +compare_info_resolution_text = Rozdzielczość +compare_info_modification_date_text = Data modyfikacji +compare_loading_images_text = Wczytywanie obrazów... +compare_cancelling_text = Anulowanie, proszę czekać... +context_menu_open_item_text = Otwórz element +context_menu_open_parent_text = Otwórz folder nadrzędny +context_menu_remove_from_results_text = Usuń z wyników +context_menu_remove_all_from_folder_text = Usuń wszystko z folderu +context_menu_select_all_from_folder_text = Wybierz wszystko z folderu +context_menu_select_all_from_folder_except_one_text = Wybierz wszystko z folderu (zachowaj jeden) +context_menu_exclude_parent_folder_text = Wyklucz folder główny +context_menu_exclude_item_text = Wyklucz element +context_menu_copy_name_text = Skopiuj nazwę +context_menu_copy_parent_folder_path_text = Skopiuj ścieżkę do folderu nadrzędnego \ No newline at end of file diff --git a/krokiet/i18n/pt-BR/krokiet.ftl b/krokiet/i18n/pt-BR/krokiet.ftl index c9a9be8b1..7462e8dc0 100644 --- a/krokiet/i18n/pt-BR/krokiet.ftl +++ b/krokiet/i18n/pt-BR/krokiet.ftl @@ -364,3 +364,49 @@ hardlink_confirmation_text = Você tem certeza de que quer criar a ligação rí softlink_button_text = Ligação simbólica softlink_text = Criar a ligação simbólica softlink_confirmation_text = Você tem certeza de que quer criar a ligação simbólica (softlinks ou symlinks) para os itens que foram selecionados? + +column_full_path = Caminho completo +file_dialog_open = Feche a janela de diálogo para continuar +selection_custom_select_unselect = Seleção/Deseleção Personalizada +settings_similar_videos_preview_hint = A visualização da miniatura só é exibida quando a opção "Gerar miniaturas" está ativada, ou quando uma miniatura já foi gerada. +settings_show_notification_on_scan_completion_text = Exibir notificação quando a leitura for concluída +settings_notification_feature_hint_text = Disponível apenas ao compilar com o recurso de notificações +settings_notification_focused_hint_text = A notificação pode não aparecer como uma janela pop-up quando a janela do aplicativo está em foco +popup_custom_select_title_text = Seleção/Deseleção Personalizada +popup_custom_select_button_text = Selecionar +popup_custom_unselect_button_text = Desmarcar +popup_custom_column_name_header_text = Coluna +popup_custom_filter_value_header_text = Valor do filtro (caractere curinga / expressão regular) +popup_custom_case_sensitive_text = Diferenciação entre maiúsculas e minúsculas +popup_custom_leave_one_in_group_text = Selecione todos os itens, exceto um, em cada grupo +popup_custom_hint_str_text = Colunas de texto: curingas *name* /home/* *.rs +popup_custom_hint_int_text = Tamanho [KB] / colunas numéricas: >= 2048 < 512 = 0 (operadores: >= <= > < =) +popup_custom_hint_date_text = Colunas de data: DD-MM-AAAA ou AAAA-MM-DD, horário opcional HH:MM:SS. Exemplo: >= 2020-01-01 ou < 31-12-2022 23:59:59 +compare_button_text = Compare +compare_back_text = Voltar +compare_prev_group_text = Prev Group +compare_next_group_text = Próximo Grupo +compare_swap_text = Troca +compare_info_text = Informações +compare_diff_text = Diferenças +compare_loading_title_text = Por favor, aguarde... +compare_cancel_text = Cancelar +compare_resolution_mismatch_text = Resoluções diferentes - os resultados podem ser imprecisos +compare_computing_diff_text = Calculando as diferenças... +compare_info_file_name_text = Nome do arquivo +compare_info_path_text = Caminho +compare_info_size_text = Tamanho +compare_info_resolution_text = Resolução +compare_info_modification_date_text = Data de modificação +compare_loading_images_text = Carregando imagens... +compare_cancelling_text = Cancelando, por favor, aguarde... +context_menu_open_item_text = Item Aberto +context_menu_open_parent_text = Abrir pasta pai +context_menu_remove_from_results_text = Remover dos resultados +context_menu_remove_all_from_folder_text = Remover Tudo da Pasta +context_menu_select_all_from_folder_text = Selecionar Tudo da Pasta +context_menu_select_all_from_folder_except_one_text = Selecionar Todos os arquivos da pasta (manter apenas um) +context_menu_exclude_parent_folder_text = Excluir Pasta Pai +context_menu_exclude_item_text = Excluir item +context_menu_copy_name_text = Copiar Nome +context_menu_copy_parent_folder_path_text = Copiar o caminho da pasta pai \ No newline at end of file diff --git a/krokiet/i18n/pt-PT/krokiet.ftl b/krokiet/i18n/pt-PT/krokiet.ftl index ee813f4a0..6a440f403 100644 --- a/krokiet/i18n/pt-PT/krokiet.ftl +++ b/krokiet/i18n/pt-PT/krokiet.ftl @@ -1,13 +1,13 @@ # In Rust translations rust_init_error_title = Erro Crítico Durante a Inicialização do Aplicativo -rust_init_error_message = - Ocorreu um erro crítico ao iniciar a aplicação: - - { $error_message } - - Isto pode ser causado por drivers OpenGL/Vulkan ausentes ou com defeito, executando a aplicação em uma máquina virtual ou por um bug no Krokiet ou em uma de suas bibliotecas. - - Você pode tentar executar diferentes builds (skia_opengl, skia_vulkan, femtovg_opengl - o padrão) ou com o renderizador de software para ver se isso resolve o problema. +rust_init_error_message = + Ocorreu um erro crítico ao iniciar a aplicação: + + { $error_message } + + Isto pode ser causado por drivers OpenGL/Vulkan ausentes ou com defeito, executando a aplicação em uma máquina virtual ou por um bug no Krokiet ou em uma de suas bibliotecas. + + Você pode tentar executar diferentes builds (skia_opengl, skia_vulkan, femtovg_opengl - o padrão) ou com o renderizador de software para ver se isso resolve o problema. rust_loaded_preset = Predefinição carregada { $preset_idx } rust_file_already_exists = Arquivo "{ $file }" já existe e não será sobrescrito rust_error_removing_file_after_copy = Erro ao remover o arquivo "{ $file }" (após copiar para outra partição), motivo: { $reason } @@ -54,7 +54,7 @@ rust_found_temporary_files = { $items_found } arquivos temporários encontrados rust_no_file_type_selected = Não é possível encontrar arquivos quebrados sem o tipo de arquivo selecionado. rust_found_broken_files = Encontrados { $items_found } arquivos quebrados que levam { $size } em { $time } rust_found_bad_extensions = Encontrados { $items_found } arquivos com extensões ruins em { $time } -rust_found_bad_names = Encontrados { $items_found } arquivos com nomes ruins em { $time} +rust_found_bad_names = Encontrados { $items_found } arquivos com nomes ruins em { $time } rust_found_video_optimizer = Encontrados { $items_found } arquivos para otimizar em { $time } rust_found_duplicate_files = Encontrados { $items_found } arquivos duplicados em { $groups } grupos que levam { $size } em { $time } rust_found_duplicate_files_no_lost_space = Encontrados { $items_found } arquivos duplicados em { $groups } grupos em { $time } @@ -114,7 +114,7 @@ rust_cache_processed_files = Arquivados { $files } arquivos em cache rust_cache_entries_stats = Removidas { $removed } entradas de todas as { $all }, { $left } restantes rust_cache_size_reduced = Reduziu o tamanho dos arquivos de cache por { $size } rust_cache_time_elapsed = Tempo decorrido: { $time } -rust_symlink_failed = Failed to symlink { $name } to { $target }, reason { $reason } +rust_symlink_failed = Falha ao simbolizar { $name } para { $target }, reason { $reason} rust_hardlink_failed = Falhou em criar um link rígido { $name } para { $target }, motivo { $reason } # Slint translations, but in arrays @@ -366,3 +366,49 @@ hardlink_confirmation_text = Tem certeza de que deseja criar hardlinks para os i softlink_button_text = Link softlink_text = Criar softlinks softlink_confirmation_text = Tem certeza de que deseja criar links simbólicos (softlinks) para os itens selecionados? + +column_full_path = Caminho completo +file_dialog_open = Feche a janela de diálogo para continuar +selection_custom_select_unselect = Seleção/Deseleção Personalizada +settings_similar_videos_preview_hint = A visualização da miniatura é exibida apenas quando a opção "Gerar miniaturas" está ativada, ou quando uma miniatura já foi gerada. +settings_show_notification_on_scan_completion_text = Exibir notificação quando a leitura for concluída +settings_notification_feature_hint_text = Disponível apenas ao compilar com o recurso de notificações +settings_notification_focused_hint_text = A notificação pode não aparecer como uma janela pop-up quando a janela do aplicativo está em foco +popup_custom_select_title_text = Seleção Personalizada / Desseleção +popup_custom_select_button_text = Selecione +popup_custom_unselect_button_text = Desmarcar +popup_custom_column_name_header_text = Coluna +popup_custom_filter_value_header_text = Valor do filtro (caractere curinga / expressão regular) +popup_custom_case_sensitive_text = Distinção entre maiúsculas e minúsculas +popup_custom_leave_one_in_group_text = Selecione todos os itens, exceto um, em cada grupo +popup_custom_hint_str_text = Colunas de texto: curingas *name* /home/* *.rs +popup_custom_hint_int_text = Tamanho [KB] / colunas numéricas: >= 2048 < 512 = 0 (operadores: >= <= > < =) +popup_custom_hint_date_text = Colunas de data: DD-MM-AAAA ou AAAA-MM-DD, hora opcional HH:MM:SS. Exemplo: >= 2020-01-01 ou < 31-12-2022 23:59:59 +compare_button_text = Compare +compare_back_text = Voltar +compare_prev_group_text = Prev Group +compare_next_group_text = Próximo Grupo +compare_swap_text = Trocar +compare_info_text = Informações +compare_diff_text = Diferenças +compare_loading_title_text = Por favor, aguarde... +compare_cancel_text = Cancelar +compare_resolution_mismatch_text = Resoluções diferentes - resultados diferentes podem ser imprecisos +compare_computing_diff_text = Calculando as diferenças... +compare_info_file_name_text = Nome do arquivo +compare_info_path_text = Caminho +compare_info_size_text = Tamanho +compare_info_resolution_text = Resolução +compare_info_modification_date_text = Data de modificação +compare_loading_images_text = Carregando imagens... +compare_cancelling_text = Cancelando, por favor aguarde... +context_menu_open_item_text = Item Aberto +context_menu_open_parent_text = Abrir pasta pai +context_menu_remove_from_results_text = Remover dos resultados +context_menu_remove_all_from_folder_text = Remover Tudo da Pasta +context_menu_select_all_from_folder_text = Selecionar tudo da pasta +context_menu_select_all_from_folder_except_one_text = Selecionar Tudo da Pasta (manter um) +context_menu_exclude_parent_folder_text = Excluir Pasta Pai +context_menu_exclude_item_text = Excluir item +context_menu_copy_name_text = Copiar Nome +context_menu_copy_parent_folder_path_text = Copiar o caminho da pasta pai \ No newline at end of file diff --git a/krokiet/i18n/ro/krokiet.ftl b/krokiet/i18n/ro/krokiet.ftl index e52c305dc..ce9abdda3 100644 --- a/krokiet/i18n/ro/krokiet.ftl +++ b/krokiet/i18n/ro/krokiet.ftl @@ -1,13 +1,13 @@ # In Rust translations rust_init_error_title = Eroare critică în timpul pornirii aplicației -rust_init_error_message = - A eroare critică a apărut în timpul lansării aplicației: - - { $error_message } - - Aceasta poate fi cauzată de drivere OpenGL/Vulkan lipsă sau defectuoase, de rularea aplicației într-o mașină virtuală sau de o eroare în Krokiet sau într-una dintre bibliotecile sale. - - Puteți încerca să rulați diferite versiuni (skia_opengl, skia_vulkan, femtovg_opengl - implicit) sau cu renderer software pentru a vedea dacă acest lucru rezolvă problema. +rust_init_error_message = + A eroare critică a apărut în timpul lansării aplicației: + + { $error_message } + + Aceasta poate fi cauzată de drivere OpenGL/Vulkan lipsă sau defectuoase, de rularea aplicației într-o mașină virtuală sau de o eroare în Krokiet sau într-una dintre bibliotecile sale. + + Puteți încerca să rulați diferite versiuni (skia_opengl, skia_vulkan, femtovg_opengl - implicit) sau cu renderer software pentru a vedea dacă acest lucru rezolvă problema. rust_loaded_preset = Presetare încărcată { $preset_idx } rust_file_already_exists = Fișierul "{ $file }" există deja și nu va fi suprascris rust_error_removing_file_after_copy = Eroare la ștergerea fișierului "{ $file }" (după copierea în altă partiție), motiv: { $reason } @@ -54,7 +54,7 @@ rust_found_temporary_files = Fișiere temporare { $items_found } găsite în { $ rust_no_file_type_selected = Fișierele defecte nu pot fi găsite fără niciun tip de fișier selectat. rust_found_broken_files = Am găsit { $items_found } fişiere defecte luând { $size } în { $time } rust_found_bad_extensions = Fisiere { $items_found } cu extensii gresite in { $time } -rust_found_bad_names = Găsite { $items_found } fișiere cu nume defectuos în { $time} +rust_found_bad_names = Găsite { $items_found } fișiere cu nume defectuos în { $time } rust_found_video_optimizer = Găsite { $items_found } fișiere de optimizat în { $time } rust_found_duplicate_files = Am găsit { $items_found } fișiere duplicate în { $groups } grupuri care iau { $size } în { $time } rust_found_duplicate_files_no_lost_space = Fişierele duplicate { $items_found } au fost găsite în grupurile { $groups } în { $time } @@ -111,10 +111,10 @@ rust_symlink_confirmation_number_simple = { $items } articole selectate. rust_rename_confirmation = Ești sigur(ă) că dorești să redenumești elementele selectate? rust_rename_confirmation_number_simple = { $items } articole selectate. rust_cache_processed_files = Fișierele cache { $files } au fost procesate -rust_cache_entries_stats = Eliminate { $removed } înregistrări din toate { $all }, { $left} au rămas +rust_cache_entries_stats = Eliminate { $removed } înregistrări din toate { $all }, { $left } au rămas rust_cache_size_reduced = Diminuat dimensiunea fișierelor cache cu { $size } rust_cache_time_elapsed = Timp scurs: { $time } -rust_symlink_failed = Failed to symlink { $name } to { $target }, reason { $reason } +rust_symlink_failed = Eșuare simlink { $name } către { $target }, motiv { $reason} rust_hardlink_failed = Eșec la crearea unui hardlink { $name } către { $target }, motiv { $reason } # Slint translations, but in arrays @@ -366,3 +366,49 @@ hardlink_confirmation_text = Ești sigur că dorești să creezi hardlink-uri pe softlink_button_text = Softlink softlink_text = Creează link-uri simbolice softlink_confirmation_text = Ești sigur că dorești să creezi link-uri simbolice (symlinks) pentru elementele selectate? + +column_full_path = Calea completă +file_dialog_open = Închideți fereastra de dialog pentru a continua +selection_custom_select_unselect = Selectare/Deselectare personalizată +settings_similar_videos_preview_hint = Previzualizarea este vizibilă doar atunci când opțiunea "Generează miniaturi" este activată, sau atunci când o miniatură a fost deja generată. +settings_show_notification_on_scan_completion_text = Afișează o notificare când scanarea este finalizată +settings_notification_feature_hint_text = Disponibil doar atunci când se compilează cu funcția de notificări +settings_notification_focused_hint_text = Notificarea s-ar putea să nu apară ca o fereastră pop-up atunci când fereastra aplicației este activă +popup_custom_select_title_text = Selectare / Deselectare personalizată +popup_custom_select_button_text = Selectați +popup_custom_unselect_button_text = Debifează +popup_custom_column_name_header_text = Coloană +popup_custom_filter_value_header_text = Valoare filtru (caracter sălbatic / expresie regulată) +popup_custom_case_sensitive_text = Sensibil la majuscule și minuscule +popup_custom_leave_one_in_group_text = Selectați toate elementele, cu excepția unuia, din fiecare grup +popup_custom_hint_str_text = Coloane de text: caractere sălbatice *name* /home/* *.rs +popup_custom_hint_int_text = Dimensiune [KB] / coloane numerice: >= 2048 < 512 = 0 (operatori: >= <= > < =) +popup_custom_hint_date_text = Coloanele de date: DD-LL-AAAA sau AAAA-LL-DD, opțional, ora HH:MM:SS. De exemplu: >= 2020-01-01 sau < 31-12-2022 23:59:59 +compare_button_text = Compară +compare_back_text = Înapoi +compare_prev_group_text = Grupul Anterior +compare_next_group_text = Următorul grup +compare_swap_text = Schimb +compare_info_text = Informații +compare_diff_text = Diferențe +compare_loading_title_text = Vă rugăm să așteptați... +compare_cancel_text = Anulează +compare_resolution_mismatch_text = Diferite rezoluții - rezultatele pot fi imprecise +compare_computing_diff_text = Calcularea diferențelor... +compare_info_file_name_text = Numele fișierului +compare_info_path_text = Cale +compare_info_size_text = Dimensiune +compare_info_resolution_text = Rezoluție +compare_info_modification_date_text = Data modificării +compare_loading_images_text = Încărcare imagini... +compare_cancelling_text = Anulare, vă rugăm să așteptați... +context_menu_open_item_text = Element deschis +context_menu_open_parent_text = Deschide folderul principal +context_menu_remove_from_results_text = Elimină din rezultate +context_menu_remove_all_from_folder_text = Șterge tot din folder +context_menu_select_all_from_folder_text = Selectează tot din folder +context_menu_select_all_from_folder_except_one_text = Selectează tot din folder (păstrează unul) +context_menu_exclude_parent_folder_text = Exclude folderul părinte +context_menu_exclude_item_text = Excludere element +context_menu_copy_name_text = Copiază numele +context_menu_copy_parent_folder_path_text = Copiază calea folderului părinte \ No newline at end of file diff --git a/krokiet/i18n/ru/krokiet.ftl b/krokiet/i18n/ru/krokiet.ftl index 8a6bbf967..e23789959 100644 --- a/krokiet/i18n/ru/krokiet.ftl +++ b/krokiet/i18n/ru/krokiet.ftl @@ -1,13 +1,13 @@ # In Rust translations rust_init_error_title = Критическая ошибка при запуске приложения -rust_init_error_message = - Произошла критическая ошибка при запуске приложения: - - { $error_message } - - Это может быть вызвано отсутствием или неисправностью драйверов OpenGL/Vulkan, запуском приложения в виртуальной машине или ошибкой в Krokiet или одной из его библиотек. - - Вы можете попробовать запустить разные сборки (skia_opengl, skia_vulkan, femtovg_opengl - по умолчанию) или с программным рендерером, чтобы посмотреть, решит ли это проблему. +rust_init_error_message = + Произошла критическая ошибка при запуске приложения: + + { $error_message } + + Это может быть вызвано отсутствием или неисправностью драйверов OpenGL/Vulkan, запуском приложения в виртуальной машине или ошибкой в Krokiet или одной из его библиотек. + + Вы можете попробовать запустить разные сборки (skia_opengl, skia_vulkan, femtovg_opengl - по умолчанию) или с программным рендером, чтобы посмотреть, решит ли это проблему. rust_loaded_preset = Загружен пресет { $preset_idx } rust_file_already_exists = Файл "{ $file }" уже существует и не будет перезаписан rust_error_removing_file_after_copy = Ошибка при удалении файла "{ $file }" (после копирования на другой раздел), причина: { $reason } @@ -114,7 +114,7 @@ rust_cache_processed_files = Обработаны { $files } кэш-файлы rust_cache_entries_stats = Удалены { $removed } записей из всех { $all }, { $left } осталось rust_cache_size_reduced = Уменьшено размер файлов кэша на { $size } rust_cache_time_elapsed = Время прошло: { $time } -rust_symlink_failed = Failed to symlink { $name } to { $target }, reason { $reason } +rust_symlink_failed = Ошибка symlink { $name } to { $target }, причина { $reason} rust_hardlink_failed = Не удалось создать жёсткую ссылку { $name } на { $target }, причина { $reason } # Slint translations, but in arrays @@ -366,3 +366,49 @@ hardlink_confirmation_text = Вы уверены, что хотите созда softlink_button_text = Софтссылка softlink_text = Создать символические ссылки softlink_confirmation_text = Вы уверены, что хотите создать символические ссылки (symlinks) для выбранных элементов? + +column_full_path = Полный путь +file_dialog_open = Закройте окно диалога, чтобы продолжить +selection_custom_select_unselect = Выбор/снятие выделения (пользовательская настройка) +settings_similar_videos_preview_hint = Предварительный просмотр отображается только в том случае, если включена опция "Генерировать миниатюры" или если миниатюра уже была создана. +settings_show_notification_on_scan_completion_text = Отображать уведомление по завершении сканирования +settings_notification_feature_hint_text = Доступно только при компиляции с поддержкой уведомлений +settings_notification_focused_hint_text = Уведомление может не отображаться во всплывающем окне, если окно приложения находится в фокусе +popup_custom_select_title_text = Настройка: Выбор/Снятие выбора +popup_custom_select_button_text = Выберите +popup_custom_unselect_button_text = Снять выделение +popup_custom_column_name_header_text = Колонка +popup_custom_filter_value_header_text = Значение фильтра (шаблон / регулярное выражение) +popup_custom_case_sensitive_text = Учитывает регистр +popup_custom_leave_one_in_group_text = Выберите все элементы, кроме одного, в каждой группе +popup_custom_hint_str_text = Столбцы текста: подстановочные знаки *name* /home/* *.rs +popup_custom_hint_int_text = Размер [КБ] / числовые столбцы: >= 2048 < 512 = 0 (операторы: >=, <=, >, <, =) +popup_custom_hint_date_text = Столбцы с датами: формат DD-MM-YYYY или YYYY-MM-DD, необязательное указание времени HH:MM:SS, например: >= 2020-01-01 или < 31-12-2022 23:59:59 +compare_button_text = Сравнить +compare_back_text = Назад +compare_prev_group_text = Предыдущая группа +compare_next_group_text = Следующая группа +compare_swap_text = Обмен +compare_info_text = Информация +compare_diff_text = Изменения +compare_loading_title_text = Пожалуйста, подождите... +compare_cancel_text = Отменить +compare_resolution_mismatch_text = Разные разрешения - результаты могут быть неточными +compare_computing_diff_text = Вычисляю разницу... +compare_info_file_name_text = Имя файла +compare_info_path_text = Путь +compare_info_size_text = Размер +compare_info_resolution_text = Решение +compare_info_modification_date_text = Дата изменения +compare_loading_images_text = Загрузка изображений... +compare_cancelling_text = Отмена, пожалуйста, подождите... +context_menu_open_item_text = Открыть элемент +context_menu_open_parent_text = Открыть родительскую папку +context_menu_remove_from_results_text = Удалить из результатов +context_menu_remove_all_from_folder_text = Удалить все из папки +context_menu_select_all_from_folder_text = Выбрать все из папки +context_menu_select_all_from_folder_except_one_text = Выбрать все из папки (оставить один) +context_menu_exclude_parent_folder_text = Исключить родительскую папку +context_menu_exclude_item_text = Исключить элемент +context_menu_copy_name_text = Копировать имя +context_menu_copy_parent_folder_path_text = Скопировать путь к родительской папке \ No newline at end of file diff --git a/krokiet/i18n/sv-SE/krokiet.ftl b/krokiet/i18n/sv-SE/krokiet.ftl index 82a9489ec..74c25041a 100644 --- a/krokiet/i18n/sv-SE/krokiet.ftl +++ b/krokiet/i18n/sv-SE/krokiet.ftl @@ -1,13 +1,13 @@ # In Rust translations rust_init_error_title = Kritisk Fel Vid Applikationsstart -rust_init_error_message = - Ett allvarligt fel inträffade vid start av applikationen: - - { $error_message } - - Detta kan bero på saknade eller felaktiga OpenGL/Vulkan-drivrutiner, att applikationen körs i en virtuell maskin eller ett fel i Krokiet eller någon av dess bibliotek. - - Du kan försöka köra olika byggen (skia_opengl, skia_vulkan, femtovg_opengl - standard) eller med en renderingsmotor för att se om det löser problemet. +rust_init_error_message = + Ett allvarligt fel inträffade vid start av applikationen: + + { $error_message } + + Detta kan bero på saknade eller felaktiga OpenGL/Vulkan-drivrutiner, att applikationen körs i en virtuell maskin eller ett fel i Krokiet eller någon av dess bibliotek. + + Du kan försöka köra olika byggen (skia_opengl, skia_vulkan, femtovg_opengl - standard) eller med en renderingsmotor för att se om det löser problemet. rust_loaded_preset = Laddad förinställning { $preset_idx } rust_file_already_exists = Fil "{ $file }" finns redan och kommer inte att skrivas över rust_error_removing_file_after_copy = Fel vid borttagning av fil "{ $file }" (efter kopiering till en annan partition), anledning: { $reason } @@ -54,7 +54,7 @@ rust_found_temporary_files = Hittade { $items_found } temporära filer i { $time rust_no_file_type_selected = Kan inte hitta trasiga filer utan någon vald filtyp. rust_found_broken_files = Hittade { $items_found } trasiga filer som tog { $size } i { $time } rust_found_bad_extensions = Hittade { $items_found } filer med dåliga tillägg i { $time } -rust_found_bad_names = Hittade { $items_found } filer med dåliga namn i { $time} +rust_found_bad_names = Hittade { $items_found } filer med dåliga namn i { $time } rust_found_video_optimizer = Hittade { $items_found } filer att optimera i { $time } rust_found_duplicate_files = Hittade { $items_found } duplicerade filer i { $groups } grupper som tog { $size } i { $time } rust_found_duplicate_files_no_lost_space = Hittade { $items_found } dubblettfiler i { $groups } grupper i { $time } @@ -110,10 +110,11 @@ rust_symlink_confirmation = Är du säker på att du vill skapa symboliska länk rust_symlink_confirmation_number_simple = { $items } föremål valda. rust_rename_confirmation = Är du säker på att du vill omdöpa de valda objekten? rust_rename_confirmation_number_simple = { $items } föremål valda. +rust_cache_processed_files = Bearbetade { $files } cache-filer rust_cache_entries_stats = Borttagna { $removed } posteringar ut av alla { $all }, { $left } kvar rust_cache_size_reduced = Minskade cachefilers storlek med { $size } rust_cache_time_elapsed = Tid som gått: { $time } -rust_symlink_failed = Failed to symlink { $name } to { $target }, reason { $reason } +rust_symlink_failed = Misslyckades med att länka den symboliska länken { $name } till { $target }, orsak { $reason } rust_hardlink_failed = Misslyckades med att skapa hårdlänk { $name } till { $target }, anledning { $reason } # Slint translations, but in arrays @@ -366,4 +367,48 @@ softlink_button_text = Softlink softlink_text = Skapa symboliska länkar softlink_confirmation_text = Är du säker på att du vill skapa symboliska länkar (symlinks) för de valda objekten? -rust_cache_processed_files = Bearbetade { $files } cache-filer \ No newline at end of file +column_full_path = Fullständig sökväg +file_dialog_open = Stäng dialogfönstret för att fortsätta +selection_custom_select_unselect = Anpassad val/avmarkering +settings_similar_videos_preview_hint = Förhandsvisningen visas endast när "Generera miniatyrbilder" är aktiverat, eller när en miniatyrbild redan har genererats. +settings_show_notification_on_scan_completion_text = Visa en notis när skanningen är klar +settings_notification_feature_hint_text = Tillgängligt endast när man kompilerar med funktionen för notifikationer +settings_notification_focused_hint_text = Meddelandet kanske inte visas som en popup när appfönstret är aktivt +popup_custom_select_title_text = Anpassad val/avmarkering +popup_custom_select_button_text = Välj +popup_custom_unselect_button_text = Avmarkera +popup_custom_column_name_header_text = Kolumn +popup_custom_filter_value_header_text = Filtervärde (wildcard / regex) +popup_custom_case_sensitive_text = Skiftlägeskänslig +popup_custom_leave_one_in_group_text = Välj alla objekt förutom ett, i varje grupp +popup_custom_hint_str_text = Textkolumner: jokertecken *namn* /home/* *.rs +popup_custom_hint_int_text = Storlek [KB] / numeriska kolumner: >= 2048 < 512 = 0 (operatorer: >= <= > < =) +popup_custom_hint_date_text = Datumkolumner: DD-MM-YYYY eller YYYY-MM-DD, valfri tid HH:MM:SS. Exempel: >= 2020-01-01 eller < 31-12-2022 23:59:59 +compare_button_text = Jämför +compare_back_text = Tillbaka +compare_prev_group_text = Föregående grupp +compare_next_group_text = Nästa grupp +compare_swap_text = Byt +compare_info_text = Info +compare_diff_text = Skillnad +compare_loading_title_text = Vänligen vänta... +compare_cancel_text = Avbryt +compare_resolution_mismatch_text = Olika upplösningar – resultaten kan bli felaktiga +compare_computing_diff_text = Beräknar skillnaden... +compare_info_file_name_text = Filnamn +compare_info_path_text = Väg +compare_info_size_text = Storlek +compare_info_resolution_text = Beslut +compare_info_modification_date_text = Ändringsdatum +compare_loading_images_text = Laddar bilder... +compare_cancelling_text = Avbokning, vänligen vänta... +context_menu_open_item_text = Öppna objekt +context_menu_open_parent_text = Öppna överordnad mapp +context_menu_remove_from_results_text = Ta bort från resultat +context_menu_remove_all_from_folder_text = Ta bort allt från mappen +context_menu_select_all_from_folder_text = Välj alla från mapp +context_menu_select_all_from_folder_except_one_text = Välj alla från mapp (behåll en) +context_menu_exclude_parent_folder_text = Exkludera överordnad mapp +context_menu_exclude_item_text = Exkludera objekt +context_menu_copy_name_text = Kopiera namn +context_menu_copy_parent_folder_path_text = Kopiera sökvägen till överordnad mapp \ No newline at end of file diff --git a/krokiet/i18n/tr/krokiet.ftl b/krokiet/i18n/tr/krokiet.ftl index cf6fa1f40..6c65d329b 100644 --- a/krokiet/i18n/tr/krokiet.ftl +++ b/krokiet/i18n/tr/krokiet.ftl @@ -1,13 +1,13 @@ # In Rust translations rust_init_error_title = Uygulama Başlangıç Sırasında Kritik Hata -rust_init_error_message = - Uygulamayı başlatırken kritik bir hata oluştu: - - { $error_message } - - Bu, eksik veya arızalı OpenGL/Vulkan sürücüleri, bir sanal makinede uygulama çalıştırma veya Krokiet veya kütüphanelerinden birinde bir hata nedeniyle oluşmuş olabilir. - - Sorunu çözmek için farklı sürümler (skia_opengl, skia_vulkan, femtovg_opengl - varsayılan) veya yazılım render'ı kullanarak denemeyi deneyebilirsiniz. +rust_init_error_message = + Uygulamayı başlatırken kritik bir hata oluştu: + + { $error_message } + + Bu, eksik veya arızalı OpenGL/Vulkan sürücüleri, bir sanal makinede uygulama çalıştırma veya Krokiet veya kütüphanelerinden birinde bir hata nedeniyle oluşmuş olabilir. + + Sorunu çözmek için farklı sürümler (skia_opengl, skia_vulkan, femtovg_opengl - varsayılan) veya yazılım render'ı kullanarak denemeyi deneyebilirsiniz. rust_loaded_preset = Yüklenen ön ayar { $preset_idx } rust_file_already_exists = Dosya "{ $file }" zaten mevcut ve geçersiz kılınmayacak rust_error_removing_file_after_copy = Dosya "{ $file }" silinirken hata oluştu (farklı bir bölüme kopyalandıktan sonra), sebep: { $reason } @@ -139,7 +139,7 @@ column_symlink_folder = Sembolik Bağlantı Klasörü column_destination_path = Hedef Yol column_current_extension = Geçerli Uzantı column_proper_extension = Doğru Uzantı -column_fps = FPS +column_fps = FPS (Saniyedeki Kare Sayısı) column_codec = Kodçalışma column_duration = Süre column_exif_tags = EXIF Etiketleri @@ -366,3 +366,49 @@ hardlink_confirmation_text = Seçilen öğeler için sert bağlantılar oluştur softlink_button_text = Yumuşak bağlantı softlink_text = Yumuşak bağlantılar oluştur softlink_confirmation_text = Seçilen öğeler için yumuşak bağlantılar (sembolik bağlantılar) oluşturmaya emin misiniz? + +column_full_path = Tam Yol +file_dialog_open = Devam etmek için iletişim kutusunu kapatın +selection_custom_select_unselect = Özel Seç/İptal Etme +settings_similar_videos_preview_hint = Ön izleme, "Küçük resimleri oluştur" seçeneği etkinleştirildiğinde veya zaten bir küçük resim oluşturulduğunda görünür. +settings_show_notification_on_scan_completion_text = Taramayı tamamladığında bir bildirim göster +settings_notification_feature_hint_text = Sadece bildirim özelliğiyle derleme yapıldığında kullanılabilir +settings_notification_focused_hint_text = Bildirim, uygulama penceresi aktifken açılır pencere şeklinde görünmeyebilir +popup_custom_select_title_text = Özel Seçme / Seçme İptali +popup_custom_select_button_text = Seç +popup_custom_unselect_button_text = Seçimi Kaldır +popup_custom_column_name_header_text = Sütun +popup_custom_filter_value_header_text = Filtre değeri (wildcard / regex) +popup_custom_case_sensitive_text = Büyük/küçük harf duyarlılığı +popup_custom_leave_one_in_group_text = Her grupta, sadece bir öğeyi hariç tutarak, diğer tüm öğeleri seçin +popup_custom_hint_str_text = Metin sütunları: joker karakterler *name* /home/* *.rs +popup_custom_hint_int_text = Boyut [KB] / sayısal sütunlar: >= 2048 < 512 = 0 (işleçler: >= <= > < =) +popup_custom_hint_date_text = Tarih sütunları: GG-AA-YYYY veya YYYY-AA-GG, isteğe bağlı olarak saat bilgisi HH:MM:SS. Örneğin: >= 2020-01-01 veya < 31-12-2022 23:59:59 +compare_button_text = Karşılaştır +compare_back_text = Geri +compare_prev_group_text = Önceki Grup +compare_next_group_text = Sonraki Grup +compare_swap_text = Değiştir +compare_info_text = Bilgi +compare_diff_text = Farklılıklar +compare_loading_title_text = Lütfen bekleyin... +compare_cancel_text = İptal +compare_resolution_mismatch_text = Farklı çözünürlükler kullanıldığında, elde edilen sonuçlar hatalı olabilir +compare_computing_diff_text = Farkları hesaplanıyor... +compare_info_file_name_text = Dosya adı +compare_info_path_text = Yol +compare_info_size_text = Size +compare_info_resolution_text = Çözünürlük +compare_info_modification_date_text = Değişiklik tarihi +compare_loading_images_text = Resimleri yükleniyor... +compare_cancelling_text = İptal işlemi gerçekleştiriliyor, lütfen bekleyin... +context_menu_open_item_text = Açık Olarak Belirtilen Öğe +context_menu_open_parent_text = Üst Klasörü Aç +context_menu_remove_from_results_text = Sonuçlardan Kaldır +context_menu_remove_all_from_folder_text = Klasördeki Tüm Öğeleri Sil +context_menu_select_all_from_folder_text = Klasördeki Tüm Öğeleri Seç +context_menu_select_all_from_folder_except_one_text = Klasördeki Tüm Öğeleri Seç (sadece bir tanesini bırak) +context_menu_exclude_parent_folder_text = Ebeveyn Klasörünü Hariç Bırak +context_menu_exclude_item_text = Seçili Öğeyi Hariç Tut +context_menu_copy_name_text = Kopyala Adı +context_menu_copy_parent_folder_path_text = Ebeveyn Klasörünün Yolunu Kopyala \ No newline at end of file diff --git a/krokiet/i18n/uk/krokiet.ftl b/krokiet/i18n/uk/krokiet.ftl index 71071e1b0..b68a82718 100644 --- a/krokiet/i18n/uk/krokiet.ftl +++ b/krokiet/i18n/uk/krokiet.ftl @@ -1,13 +1,13 @@ # In Rust translations rust_init_error_title = Критична помилка під час запуску додатку -rust_init_error_message = - Виникла критична помилка під час запуску програми: - - { $error_message } - - Це може бути спричинено відсутніми або несправними драйверами OpenGL/Vulkan, запуском програми у віртуальній машині або помилкою в Krokiet або одній із його бібліотек. - - Ви можете спробувати запустити різні версії (skia_opengl, skia_vulkan, femtovg_opengl - за замовчуванням) або з програмним рендерером, щоб побачити, чи це вирішить проблему. +rust_init_error_message = + Виникла критична помилка під час запуску програми: + + { $error_message } + + Це може бути спричинено відсутніми або несправними драйверами OpenGL/Vulkan, запуском програми у віртуальній машині або помилкою в Krokiet або одній із його бібліотек. + + Ви можете спробувати запустити різні версії (skia_opengl, skia_vulkan, femtovg_opengl - за замовчуванням) або з програмним рендерером, щоб побачити, чи це вирішить проблему. rust_loaded_preset = Завантажено пресет { $preset_idx } rust_file_already_exists = Файл "{ $file }" вже існує і не буде перезаписано rust_error_removing_file_after_copy = Помилка при видаленні файлу "{ $file }" (після копіювання на інший розділ), причина: { $reason } @@ -114,7 +114,7 @@ rust_cache_processed_files = Оброблені { $files } кешовані фа rust_cache_entries_stats = Видалено { $removed } записів з усіх { $all }, { $left } залишилось rust_cache_size_reduced = Зменшено розмір файлів кешу на { $size } rust_cache_time_elapsed = Час, що минув: { $time } -rust_symlink_failed = Failed to symlink { $name } to { $target }, reason { $reason } +rust_symlink_failed = Не вдалося прив'язати посилання { $name } до { $target }, причиною { $reason} rust_hardlink_failed = Не вдалося створити символічне посилання { $name } на { $target }, причина { $reason } # Slint translations, but in arrays @@ -366,3 +366,49 @@ hardlink_confirmation_text = Ви впевнені, що хочете створ softlink_button_text = М'яке посилання softlink_text = Створити символічні посилання softlink_confirmation_text = Ви впевнені, що хочете створити символічні посилання (symlinks) для вибраних елементів? + +column_full_path = Повний шлях +file_dialog_open = Закрийте вікно діалогу, щоб продовжити +selection_custom_select_unselect = Власне налаштування: вибір/зняття вибору +settings_similar_videos_preview_hint = Попередній перегляд доступний лише тоді, коли увімкнено опцію "Генерувати мініатюри", або коли мініатюра вже була згенерована. +settings_show_notification_on_scan_completion_text = Показувати сповіщення після завершення сканування +settings_notification_feature_hint_text = Доступно лише при компіляції з увімкненою функцією сповіщень +settings_notification_focused_hint_text = Повідомлення може не відображатися у вигляді спливаючого вікна, коли вікно програми активовано +popup_custom_select_title_text = Вибір / Зняття вибору (для користувача) +popup_custom_select_button_text = Виберіть +popup_custom_unselect_button_text = Зняти виділення +popup_custom_column_name_header_text = Колонка +popup_custom_filter_value_header_text = Значення фільтра (символ-замінник / регулярний вираз) +popup_custom_case_sensitive_text = Розрізняє великі та малі літери +popup_custom_leave_one_in_group_text = Виберіть усі елементи, за винятком одного, у кожній групі +popup_custom_hint_str_text = Текстові колонки: підстановки *name* /home/* *.rs +popup_custom_hint_int_text = Розмір [KB] / числові стовпці: >= 2048 < 512 = 0 (оператори: >= <= > < =) +popup_custom_hint_date_text = Колонки з датами: формат DD-MM-YYYY або YYYY-MM-DD, необов'язково з часом HH:MM:SS, наприклад: >= 2020-01-01 або < 31-12-2022 23:59:59 +compare_button_text = Порівняйте +compare_back_text = Назад +compare_prev_group_text = Попередня група +compare_next_group_text = Наступна група +compare_swap_text = Обмін +compare_info_text = Інформація +compare_diff_text = Зміни +compare_loading_title_text = Будь ласка, зачекайте... +compare_cancel_text = Скасувати +compare_resolution_mismatch_text = Різні роздільні здатності – результати можуть бути неточними +compare_computing_diff_text = Обчислення різниці... +compare_info_file_name_text = Назва файлу +compare_info_path_text = Шлях +compare_info_size_text = Розмір +compare_info_resolution_text = Роздільна здатність +compare_info_modification_date_text = Дата внесення змін +compare_loading_images_text = Завантаження зображень... +compare_cancelling_text = Скасування, будь ласка, зачекайте... +context_menu_open_item_text = Відкритий пункт +context_menu_open_parent_text = Відкрити батьківську папку +context_menu_remove_from_results_text = Видалити з результатів +context_menu_remove_all_from_folder_text = Видалити все з папки +context_menu_select_all_from_folder_text = Вибрати все з папки +context_menu_select_all_from_folder_except_one_text = Вибрати все з папки (залишити один) +context_menu_exclude_parent_folder_text = Виключити батьківську папку +context_menu_exclude_item_text = Видалити елемент +context_menu_copy_name_text = Скопіювати назву +context_menu_copy_parent_folder_path_text = Скопіювати шлях до батьківської папки \ No newline at end of file diff --git a/krokiet/i18n/vi/krokiet.ftl b/krokiet/i18n/vi/krokiet.ftl new file mode 100644 index 000000000..bf1b31531 --- /dev/null +++ b/krokiet/i18n/vi/krokiet.ftl @@ -0,0 +1,414 @@ +# In Rust translations +rust_init_error_title = Lỗi nghiêm trọng trong quá trình khởi động ứng dụng +rust_init_error_message = + Đã xảy ra một lỗi nghiêm trọng khi khởi động ứng dụng: + + { $error_message } + + Lỗi này có thể do thiếu hoặc lỗi trong trình điều khiển OpenGL/Vulkan, chạy ứng dụng trong máy ảo, hoặc một lỗi trong Krokiet hoặc một trong các thư viện của nó. + + Bạn có thể thử chạy các phiên bản khác nhau (skia_opengl, skia_vulkan, femtovg_opengl - mặc định) hoặc sử dụng trình render phần mềm để xem liệu điều đó có giải quyết vấn đề không. +rust_loaded_preset = Tải cài đặt sẵn { $preset_idx } +rust_file_already_exists = Tệp "{ $file }" đã tồn tại và sẽ không được ghi đè +rust_error_removing_file_after_copy = Lỗi khi xóa tệp "{ $file }" (sau khi sao chép vào phân vùng khác), nguyên nhân: { $reason } +rust_error_copying_file = Lỗi khi sao chép "{ $input }" đến "{ $output }", nguyên nhân: { $reason } +rust_loading_tags_cache = Đang tải bộ nhớ đệm các thẻ +rust_loading_fingerprints_cache = Đang tải bộ nhớ đệm dấu vân tay +rust_saving_tags_cache = Lưu bộ nhớ đệm của các thẻ +rust_saving_fingerprints_cache = Lưu trữ dữ liệu vân tay +rust_loading_prehash_cache = Đang tải bộ nhớ đệm trước khi tính toán hash +rust_saving_prehash_cache = Lưu bộ nhớ đệm trước khi tính toán hash +rust_loading_hash_cache = Đang tải bộ nhớ đệm hash +rust_saving_hash_cache = Đang lưu bộ nhớ đệm hash +rust_loading_exif_cache = Đang tải bộ nhớ đệm EXIF +rust_saving_exif_cache = Lưu bộ nhớ đệm EXIF +rust_scanning_name = Đang quét tên của { $entries_checked } tệp +rust_scanning_size_name = Đang kiểm tra kích thước và tên của { $entries_checked } file +rust_scanning_size = Đang kiểm tra kích thước của { $entries_checked } tập tin +rust_scanning_file = Đang quét tệp { $entries_checked } +rust_scanning_folder = Đang quét thư mục { $entries_checked } +rust_checked_tags = Đã kiểm tra các thẻ của { $items_stats } +rust_checked_content = Đã kiểm tra nội dung của { $items_stats } ({ $size_stats }) +rust_compared_tags = So sánh các thẻ của { $items_stats } +rust_compared_content = So sánh nội dung của { $items_stats } +rust_hashed_images = Đã tạo các ảnh đã mã hóa { $items_stats } (dung lượng: { $size_stats }) +rust_compared_image_hashes = So sánh các giá trị băm hình ảnh của { $items_stats } +rust_hashed_videos = Đã mã hóa { $items_stats } video +rust_created_thumbnails = Đã tạo ảnh thu nhỏ cho { $items_stats } video +rust_checked_files = Đã kiểm tra tệp { $items_stats } (dung lượng: { $size_stats }) +rust_checked_files_bad_extensions = Đã kiểm tra { $items_stats } file +rust_checked_files_bad_names = Đã kiểm tra file { $items_stats } +rust_checked_videos = Đã kiểm tra { $items_stats } video ({ $size_stats }) +rust_analyzed_partial_hash = Đã phân tích phần hash của { $items_stats } file ({ $size_stats }) +rust_analyzed_full_hash = Đã phân tích toàn bộ mã hash của { $items_stats } tệp ({ $size_stats }) +rust_failed_to_rename_file = Không thể đổi tên file từ "{ $old_path }" thành "{ $new_path }, lỗi: "{ $error }" +rust_no_included_paths = Không thể bắt đầu quá trình quét nếu không có đường dẫn nào được chỉ định. +rust_all_paths_referenced = Không thể bắt đầu quá trình quét nếu tất cả các đường dẫn được chọn đều được đặt là "đường dẫn tham chiếu". Bạn cần bỏ chọn ô "tham chiếu" bên cạnh đường dẫn đầu vào. +rust_found_empty_folders = Đã tìm thấy { $items_found } thư mục trống trong { $time } +rust_found_empty_files = Đã tìm thấy { $items_found } tệp trống trong { $time } +rust_found_similar_images = Đã tìm thấy { $items_found } tệp hình ảnh tương tự trong { $groups } nhóm, mất { $time } để hoàn thành +rust_found_similar_videos = Đã tìm thấy { $items_found } tệp video tương tự trong { $groups } nhóm, mất { $time } để hoàn thành +rust_found_similar_music_files = Đã tìm thấy { $items_found } tệp nhạc tương tự trong { $groups } nhóm, mất { $time } để hoàn thành +rust_found_invalid_symlinks = Đã tìm thấy { $items_found } liên kết tượng trưng không hợp lệ trong { $time } +rust_found_temporary_files = Đã tìm thấy { $items_found } tệp tạm thời trong { $time } +rust_no_file_type_selected = Không thể tìm thấy các tệp bị hỏng nếu không chọn bất kỳ loại tệp nào. +rust_found_broken_files = Đã tìm thấy { $items_found } tệp bị hỏng, chiếm { $size } dung lượng và mất { $time } thời gian +rust_found_bad_extensions = Đã tìm thấy { $items_found } tệp có phần mở rộng không hợp lệ trong { $time } +rust_found_bad_names = Đã tìm thấy { $items_found } tệp có tên không hợp lệ trong { $time } +rust_found_video_optimizer = Đã tìm thấy { $items_found } file cần tối ưu hóa trong { $time } +rust_found_duplicate_files = Đã tìm thấy { $items_found } tệp trùng lặp trong { $groups } nhóm, chiếm { $size } và mất { $time } +rust_found_duplicate_files_no_lost_space = Đã tìm thấy { $items_found } tệp trùng lặp trong { $groups } nhóm, mất { $time } để hoàn thành +rust_found_big_files = Đã tìm thấy { $items_found } tệp lớn với kích thước { $size } trong { $time } +rust_found_exif_files = Đã tìm thấy { $items_found } tệp có dữ liệu EXIF trong { $time } +rust_cannot_load_preset = Không thể thay đổi và tải cài đặt sẵn { $preset_idx } - lý do: { $reason }, sử dụng cài đặt mặc định thay thế +rust_saved_preset = Cài đặt đã lưu: { $preset_idx } +rust_cannot_save_preset = Không thể lưu cài đặt sẵn { $preset_idx } - lý do: { $reason } +rust_reset_preset = Đặt lại cài đặt sẵn { $preset_idx } +rust_cannot_create_output_folder = Không thể tạo thư mục đầu ra { $output_folder }, lý do: { $error } +rust_delete_summary = Đã xóa { $deleted } mục, không thể xóa { $failed } mục, trong tổng số { $total } mục +rust_rename_summary = Đã đổi tên { $renamed } mục, không thể đổi tên { $failed } mục, tổng số mục là { $total } +rust_move_summary = Đã di chuyển { $moved } mục, không thể di chuyển { $failed } mục, trong tổng số { $total } mục +rust_hardlink_summary = Đã tạo liên kết cứng cho { $hardlinked } mục, thất bại khi tạo liên kết cứng cho { $failed } mục, trong tổng số { $total } mục +rust_symlink_summary = Đã tạo liên kết tượng trưng cho { $symlinked } mục, không thể tạo liên kết tượng trưng cho { $failed } mục, trong tổng số { $total } mục +rust_optimize_video_summary = Đã tối ưu hóa { $optimized } video, không thể tối ưu hóa { $failed } video, trong tổng số { $total } video +rust_clean_exif_summary = Đã xóa thông tin EXIF khỏi { $cleaned } tệp, không thể xóa thông tin EXIF khỏi { $failed } tệp, trong tổng số { $total } tệp +rust_deleting_files = Đang xóa tệp { $items_stats } ({ $size_stats }) +rust_deleting_no_size_files = Đang xóa tệp { $items_stats } +rust_renaming_files = Đang đổi tên file { $items_stats } +rust_moving_files = Đang di chuyển tệp { $items_stats } (dung lượng: { $size_stats }) +rust_moving_no_size_files = Đang di chuyển tệp { $items_stats } +rust_hardlinking_files = Tạo liên kết cứng đến tệp { $items_stats } ({ $size_stats }) +rust_hardlinking_no_size_files = Tạo liên kết cứng cho file { $items_stats } +rust_symlinking_files = Tạo liên kết tượng trưng đến tệp { $items_stats } ({ $size_stats }) +rust_symlinking_no_size_files = Tạo liên kết tượng trưng đến file { $items_stats } +rust_optimizing_videos = Đã tối ưu hóa video { $items_stats } ({ $size_stats }) +rust_optimizing_no_size_videos = Video được tối ưu hóa { $items_stats } +rust_cleaning_exif = Xóa thông tin EXIF khỏi { $items_stats } tệp ({ $size_stats }) +rust_cleaning_no_size_exif = Loại bỏ thông tin EXIF khỏi { $items_stats } tập tin +rust_no_files_deleted = Không có tệp hoặc thư mục nào được chọn để xóa +rust_no_files_renamed = Không có tệp hoặc thư mục nào được chọn để đổi tên +rust_no_files_moved = Không có tệp hoặc thư mục nào được chọn để di chuyển +rust_no_files_hardlinked = Không có tệp hoặc thư mục nào được chọn để tạo liên kết cứng +rust_no_files_symlinked = Không có tệp hoặc thư mục nào được chọn để tạo liên kết cứng +rust_no_videos_optimized = Không có video nào được chọn để tối ưu hóa +rust_no_exif_cleaned = Không có tệp nào được chọn để làm sạch thông tin EXIF +rust_extracted_exif_tags = Đã trích xuất các thẻ EXIF từ { $items_stats } tệp ({ $size_stats }) +rust_delete_confirmation = Bạn có chắc chắn muốn xóa các mục đã chọn không? +rust_delete_confirmation_number_simple = { $items } mục đã được chọn. +rust_delete_confirmation_number_groups = Đã chọn { $items } mục trong { $groups } nhóm. +rust_delete_confirmation_selected_all_in_group = Tất cả các mục đã được chọn trong các nhóm { $groups }. +rust_move_confirmation = Bạn có chắc chắn muốn di chuyển các mục đã chọn không? +rust_move_confirmation_number_simple = { $items } mục đã được chọn. +rust_clean_exif_confirmation = Bạn có chắc chắn muốn xóa dữ liệu EXIF khỏi các mục đã chọn không? +rust_clean_exif_confirmation_number_simple = { $items } mục đã được chọn. +clean_exif_overwrite_files_text = Ghi đè các tệp +rust_optimize_video_confirmation = Bạn có chắc chắn muốn tối ưu hóa các video đã chọn không? +rust_optimize_video_confirmation_number_simple = { $items } mục đã được chọn. +rust_hardlink_confirmation = Bạn có chắc chắn muốn tạo các liên kết cứng cho các mục đã chọn không? +rust_hardlink_confirmation_number_simple = { $items } mục đã được chọn. +rust_symlink_confirmation = Bạn có chắc chắn muốn tạo các liên kết tượng trưng (symlinks) cho các mục đã chọn không? +rust_symlink_confirmation_number_simple = { $items } mục đã được chọn. +rust_rename_confirmation = Bạn có chắc chắn muốn đổi tên các mục đã chọn không? +rust_rename_confirmation_number_simple = { $items } mục đã được chọn. +rust_cache_processed_files = Đã xử lý { $files } tệp bộ nhớ đệm +rust_cache_entries_stats = Đã loại bỏ { $removed } mục trong tổng số { $all } mục, còn lại { $left } mục +rust_cache_size_reduced = Đã giảm kích thước các tệp cache xuống { $size } +rust_cache_time_elapsed = Thời gian đã trôi qua: { $time } +rust_symlink_failed = Failed to symlink { $name } to { $target }, reason { $reason } +rust_hardlink_failed = Không thể tạo liên kết cứng từ { $name } đến { $target }, lý do: { $reason } + +# Slint translations, but in arrays + +column_selection = Lựa chọn +column_size = Kích thước +column_file_name = Tên tệp +column_path = Đường đi +column_modification_date = Ngày sửa đổi +column_similarity = Tính tương đồng +column_dimensions = Kích thước +column_new_dimensions = Những Khía Cạnh Mới +column_title = Tiêu đề +column_artist = Nghệ sĩ +column_year = Năm +column_bitrate = Tốc độ bit +column_length = Chiều dài +column_genre = Thể loại +column_type_of_error = Loại lỗi +column_symlink_name = Tên liên kết tượng trưng +column_symlink_folder = Thư mục liên kết tượng trưng +column_destination_path = Đường dẫn đích +column_current_extension = Phiên bản mở rộng hiện tại +column_proper_extension = Độ mở rộng phù hợp +column_fps = FPS +column_codec = Codec +column_duration = Thời lượng +column_exif_tags = Các thẻ EXIF +column_new_name = Tên mới +# Slint translations +ok_button = OK +cancel_button = Hủy bỏ +do_you_want_to_continue = Bạn có muốn tiếp tục không? +main_window_title = Krokiet - Công cụ làm sạch dữ liệu +scan_button = Quét +stop_button = Dừng lại +stop_text = Dừng lại +select_button = Chọn +move_button = Di chuyển +delete_button = Xóa +save_button = Lưu +sort_button = Sắp xếp +rename_button = Đổi tên +motto = Chương trình này là miễn phí để sử dụng và sẽ luôn luôn như vậy.\nXem giấy phép MIT/GPL để biết thêm chi tiết. +unicorn = Bạn có thể không nhìn vào một con kỳ lân, nhưng con kỳ lân luôn nhìn bạn. +repository = Kho lưu trữ +instruction = Hướng dẫn +donation = Quyên góp +translation = Dịch thuật +included_paths = Đường dẫn được bao gồm +excluded_paths = Các đường dẫn bị loại trừ +ref = Ref +path = Đường đi +tool_duplicate_files = Tệp trùng lặp +tool_empty_folders = Thư mục trống +tool_big_files = Tập tin lớn +tool_empty_files = Các tệp trống +tool_temporary_files = Các tệp tạm +tool_similar_images = Hình ảnh tương tự +tool_similar_videos = Các video tương tự +tool_music_duplicates = Bản sao nhạc +tool_invalid_symlinks = Liên kết tượng trưng không hợp lệ +tool_broken_files = Tệp tin bị lỗi +tool_bad_extensions = Các tiện ích mở rộng kém chất lượng +tool_bad_names = Tên thật tệ +tool_video_optimizer = Tối ưu hóa video +tool_exif_remover = Công cụ Xóa Exif +sort_by_full_name = Sắp xếp theo tên đầy đủ +sort_by_selection = Sắp xếp theo lựa chọn +sort_reverse = Đảo ngược thứ tự +selection_all = Chọn tất cả +selection_deselect_all = Bỏ chọn tất cả +selection_invert_selection = Đảo ngược lựa chọn +selection_the_biggest_size = Chọn kích thước lớn nhất +selection_the_biggest_resolution = Chọn độ phân giải lớn nhất +selection_the_smallest_size = Chọn kích thước nhỏ nhất +selection_the_smallest_resolution = Chọn độ phân giải nhỏ nhất +selection_newest = Chọn "Mới nhất" +selection_oldest = Chọn phần tử cũ nhất +selection_shortest_path = Chọn đường đi ngắn nhất +selection_longest_path = Chọn đường đi dài nhất +stage_current = Giai đoạn hiện tại: +stage_all = Tất cả các giai đoạn: +subsettings = Các tập con +subsettings_images_hash_size = Kích thước hàm +subsettings_images_resize_algorithm = Thuật toán thay đổi kích thước +subsettings_images_ignore_same_size = Bỏ qua các hình ảnh có cùng kích thước +subsettings_images_max_difference = Chênh lệch tối đa +subsettings_images_duplicates_hash_type = Loại Hash +subsettings_duplicates_check_method = Kiểm tra phương pháp +subsettings_duplicates_name_case_sensitive = Phân biệt chữ hoa/thường (chỉ áp dụng cho chế độ đặt tên) +subsettings_biggest_files_sub_method = Phương pháp +subsettings_biggest_files_sub_number_of_files = Số lượng tệp +subsettings_videos_max_difference = Sự khác biệt lớn nhất +subsettings_videos_ignore_same_size = Bỏ qua các video có cùng kích thước +subsettings_music_audio_check_type = Loại kiểm tra âm thanh +subsettings_music_approximate_comparison = So sánh thẻ gần đúng +subsettings_music_compared_tags = So sánh các thẻ +subsettings_music_title = Tiêu đề +subsettings_music_artist = Nghệ sĩ +subsettings_music_bitrate = Tốc độ bit +subsettings_music_genre = Thể loại +subsettings_music_year = Năm +subsettings_music_length = Độ dài +subsettings_music_max_difference = Sự khác biệt lớn nhất +subsettings_music_minimal_fragment_duration = Độ dài tối thiểu của đoạn +subsettings_music_compare_fingerprints_only_with_similar_titles = So sánh các sản phẩm trong cùng một nhóm với các tên gọi tương tự +subsettings_broken_files_type = Loại file cần kiểm tra +subsettings_broken_files_audio = Âm thanh +subsettings_broken_files_pdf = Tài liệu PDF +subsettings_broken_files_archive = Lưu trữ +subsettings_broken_files_image = Hình ảnh +subsettings_broken_files_video = Video +subsettings_broken_files_video_info = Sử dụng ffmpeg/ffprobe. Quá trình diễn ra khá chậm và có thể phát hiện ra các lỗi nhỏ nhặt ngay cả khi tệp tin hoạt động bình thường. +subsettings_bad_names_issues = Kiểm tra tên tệp +subsettings_bad_names_uppercase_extension = Kéo dài chữ hoa +subsettings_bad_names_uppercase_extension_hint = Tìm các tệp có chữ hoa trong phần mở rộng (ví dụ: .JPG, .Mp3) và gợi ý phiên bản viết thường +subsettings_bad_names_emoji_used = Biểu tượng cảm xúc trong tên +subsettings_bad_names_emoji_used_hint = Tìm các tệp có chứa ký tự emoji (😀, 🎉, v.v.) trong tên và gợi ý xóa chúng +subsettings_bad_names_space_at_start_end = Khoảng trắng ở đầu/cuối +subsettings_bad_names_space_at_start_end_hint = Tìm các tệp có khoảng trắng ở đầu hoặc cuối tên và đề xuất loại bỏ chúng +subsettings_bad_names_non_ascii = Ký tự không thuộc bảng ASCII +subsettings_bad_names_non_ascii_hint = Tìm kiếm các ký tự không thuộc bảng ASCII (ví dụ: ą, ć, ñ) và gợi ý thay thế chúng bằng các ký tự ASCII tương đương (ví dụ: a, c, n) hoặc xóa bỏ nếu không có ký tự tương ứng +subsettings_bad_names_restricted_charset = Bộ ký tự hạn chế +subsettings_bad_names_restricted_charset_hint = Chuyển đổi các ký tự không thuộc bảng ASCII thành ký tự ASCII, sau đó tìm các tệp chứa các ký tự nằm ngoài phạm vi 0-9a-zA-Z và các ký tự được phép do người dùng định nghĩa +subsettings_bad_names_allowed_chars = Ký tự được phép +subsettings_bad_names_remove_duplicated = Các ký tự lặp lại +subsettings_bad_names_remove_duplicated_hint = Tìm các ký tự không phải là chữ hoặc số liên tiếp và lặp lại (ví dụ: "file---name..txt") và đề xuất loại bỏ các ký tự trùng lặp +settings_global_settings = Cài đặt toàn cục +settings_dark_theme = Chủ đề tối +settings_show_only_icons = Chỉ hiển thị biểu tượng +settings_excluded_items = Vật phẩm bị loại: +settings_allowed_extensions = Các định dạng tệp được hỗ trợ: +settings_excluded_extensions = Các tiện ích bị loại trừ: +settings_file_size = Kích thước tệp (Kilobyte) +settings_minimum_file_size = Tối thiểu: +settings_maximum_file_size = Max: +settings_recursive_search = Tìm kiếm đệ quy +settings_use_cache = Sử dụng bộ nhớ đệm +settings_save_as_json = Ngoài ra, hãy lưu bộ nhớ đệm dưới dạng tệp JSON +settings_move_to_trash = Di chuyển các tệp đã xóa đến thùng rác +settings_ignore_other_filesystems = Bỏ qua các hệ thống tệp khác (chỉ dành cho Linux) +settings_delete_outdated_cache_entries = Xóa tự động các mục bộ nhớ đệm đã hết hạn +settings_delete_outdated_cache_entries_hint = Khi được kích hoạt, ứng dụng sẽ kiểm tra (tối đa một lần mỗi tuần) xem các bản ghi đã lưu trong bộ nhớ đệm có còn trỏ đến các tệp/dữ liệu hiện có và chưa bị thay đổi hay không, trong quá trình tải bộ nhớ đệm +settings_hide_hard_links = Ẩn các liên kết cứng +settings_hide_hard_links_hint = Ẩn các liên kết cứng đến cùng một tệp trong kết quả +settings_thread_number = Số thứ tự của luồng +settings_restart_required = ---Bạn cần khởi động lại ứng dụng để áp dụng các thay đổi liên quan đến số lượng luồng--- +settings_duplicate_image_preview = Ảnh xem trước +settings_duplicate_minimal_hash_cache_size = Kích thước tối thiểu của các tệp được lưu trong bộ nhớ đệm - Hash (KB) +settings_duplicate_use_prehash = Sử dụng tính năng prehash +settings_duplicate_minimal_prehash_cache_size = Kích thước tối thiểu của các tệp được lưu trong bộ nhớ đệm - Tiền tính toán (KB) +settings_similar_images_show_image_preview = Ảnh xem trước +settings_application_scale_text = Quy mô ứng dụng +settings_application_scale_hint_text = Khi chế độ "Điều chỉnh tỷ lệ thủ công" được bật, bạn có thể chọn một hệ số tỷ lệ tùy chỉnh, nhưng điều này sẽ hoàn toàn vô hiệu hóa khả năng tự động điều chỉnh tỷ lệ dựa trên độ phân giải (DPI) của màn hình. +settings_restart_required_scale_text = ---Bạn cần khởi động lại ứng dụng để áp dụng các thay đổi về kích thước--- +settings_use_manual_application_scale_text = Sử dụng phương pháp điều chỉnh quy mô thủ công +settings_video_thumbnails_preview = Ảnh xem trước +settings_open_config_folder = Mở thư mục cấu hình +settings_open_cache_folder = Mở thư mục bộ nhớ đệm +settings_language = Ngôn ngữ +settings_current_preset = Cài đặt hiện tại: +settings_edit_name = Chỉnh sửa tên +settings_choose_name_for_prefix = Chọn tên cho tiền tố +settings_save = Lưu +settings_load = Tải +settings_reset = Đặt lại +settings_similar_videos_tool = Công cụ "Video tương tự" +settings_video_thumbnails_clear_unused_thumbnails = Xóa các hình thu nhỏ (thumbnail) video không được sử dụng, có thời gian tạo quá 7 ngày, khi ứng dụng khởi động +settings_video_thumbnails_header = Ảnh thu nhỏ video +settings_video_thumbnails_generate = Tạo hình thu nhỏ +settings_video_thumbnails_position = Vị trí thu nhỏ trong video (%) +settings_video_thumbnails_generate_grid = Tạo lưới ảnh thu nhỏ thay vì chỉ hiển thị một ảnh duy nhất +settings_video_thumbnails_generate_grid_hint = Việc tạo nhiều ảnh trong dạng lưới chậm hơn nhiều so với việc tạo một ảnh thu nhỏ duy nhất +settings_video_thumbnails_grid_tiles_per_side = Số lượng ô vuông trên mỗi cạnh trong lưới hình thu nhỏ +settings_video_thumbnails_grid_tiles_per_side_hint = Số lượng ô hình thu nhỏ trên mỗi cạnh của lưới. Ví dụ, chọn 2 sẽ tạo ra một lưới 2x2, kết quả là một hình thu nhỏ duy nhất được tạo thành từ 4 hình ảnh. +settings_similar_images_tool = Công cụ tìm kiếm hình ảnh tương tự +settings_general_settings = Cài đặt chung +settings_cache_header_text = Cài đặt bộ nhớ đệm +settings_clean_cache_button_text = Xóa bộ nhớ đệm cũ +settings_settings = Cài đặt +settings_load_tabs_sizes_at_startup = Tải kích thước tab khi khởi động +settings_load_windows_size_at_startup = Tự động tải kích thước cửa sổ khi khởi động +settings_limit_lines_of_messages = Hạn chế số lượng dòng trong mỗi tin nhắn lên 500 dòng (giải pháp tạm thời cho widget TextEdit chậm) +settings_play_audio_on_scan_completion_text = Phát âm thanh khi quá trình quét hoàn tất thành công +settings_audio_feature_hint_text = Chỉ khả dụng khi biên dịch với tính năng âm thanh +settings_audio_env_variable_hint_text = Âm thanh có thể được thay đổi bằng cách thiết lập biến môi trường KROKIET_AUDIO_STOP_FILE thành đường dẫn đến một tệp âm thanh hợp lệ +popup_save_title = Lưu kết quả +popup_save_message = Điều này sẽ lưu kết quả vào 3 tệp khác nhau +popup_rename_title = Đổi tên file +popup_new_paths_title = Vui lòng thêm các đường dẫn, mỗi đường dẫn một dòng +popup_move_title = Di chuyển các tệp +popup_move_copy_checkbox = Sao chép các tệp thay vì di chuyển +popup_move_preserve_folder_checkbox = Giữ nguyên cấu trúc thư mục +move_confirmation_text = Bạn có chắc chắn muốn di chuyển các mục đã chọn không? +rename_confirmation_text = Bạn có chắc chắn muốn đổi tên các mục đã chọn không? +delete = Xóa các mục +stopping_scan = Dừng quá trình quét, vui lòng chờ... +searching = Đang tìm kiếm... +subsettings_videos_crop_detect = Phương pháp phát hiện cây trồng +subsettings_videos_skip_forward_amount = Thời gian bỏ qua [giây] +subsettings_videos_vid_hash_duration = Thời lượng của mã hash video +settings_cache_number_size_text = Kích thước các tệp cache: { $size }, số lượng tệp: { $number } +settings_video_thumbnails_number_size_text = Kích thước hình thu nhỏ của video: { $size }, số lượng tệp: { $number } +settings_log_number_size_text = Kích thước tệp nhật ký: { $size }, số lượng tệp: { $number } +popup_clean_cache_title_text = Xóa bộ nhớ đệm cũ +popup_clean_cache_confirmation_text = Bạn có chắc chắn muốn xóa các mục bộ nhớ cache đã lỗi thời không? Việc này sẽ xóa các mục bộ nhớ cache cho các tệp không còn tồn tại hoặc đã bị sửa đổi. +popup_clean_cache_progress_text = Đang xử lý tệp bộ nhớ đệm: +popup_clean_cache_current_file_text = Tệp hiện tại: +popup_clean_cache_file_progress_text = Tiến trình xử lý file hiện tại: +popup_clean_cache_overall_progress_text = Tiến độ tổng thể: +popup_clean_cache_stopped_by_user_text = Quá trình dọn dẹp bộ nhớ cache đã bị người dùng dừng lại +popup_clean_cache_finished_text = Quá trình dọn dẹp bộ nhớ cache đã hoàn thành thành công! +popup_clean_cache_error_details_text = Chi tiết lỗi: +popup_clean_cache_files_with_errors = Các tệp có lỗi: +subsettings_video_optimizer_mode = Chế độ +subsettings_video_optimizer_crop_type = Loại cây trồng +subsettings_video_optimizer_black_pixel_threshold = Ngưỡng đen +subsettings_video_optimizer_black_pixel_threshold_hint = Giá trị RGB tối đa cho mỗi kênh màu của pixel được coi là màu đen (0-128). Mặc định: 20 +subsettings_video_optimizer_black_bar_min_percentage = Phần trăm tối thiểu của thanh đen +subsettings_video_optimizer_black_bar_min_percentage_hint = Tỷ lệ phần trăm tối thiểu của các pixel đen trong một hàng/cột để được coi là một thanh đen (50-100). Mặc định: 90 +subsettings_video_optimizer_max_samples = Số lượng mẫu tối đa +subsettings_video_optimizer_max_samples_hint = Số lượng khung hình tối đa để phân tích cho mỗi video (từ 5 đến 1000). Giá trị mặc định: 60 +subsettings_video_optimizer_min_crop_size = Kích thước cắt nhỏ nhất +subsettings_video_optimizer_min_crop_size_hint = Số lượng pixel tối thiểu để cắt trên mỗi cạnh (1-1000). Các hình ảnh cắt nhỏ hơn sẽ bị bỏ qua. Giá trị mặc định: 5 +subsettings_video_optimizer_video_codec = Mã hóa video +subsettings_video_optimizer_excluded_codecs = Các codec bị loại trừ +subsettings_video_optimizer_video_quality = Chất lượng video (CRF) +subsettings_reset = Đặt lại +subsettings_exif_ignored_tags_text = Các thẻ bị bỏ qua: +subsettings_exif_ignored_tags_hint_text = Danh sách các thẻ được phân tách bằng dấu phẩy mà bạn muốn loại trừ khỏi quá trình quét (ví dụ: GPS, Thumbnail). Một số thẻ, chẳng hạn như ImageWidth trong các tệp TIFF, bị ẩn đi để tránh làm hỏng ảnh. +clean_button_text = Sạch sẽ +clean_text = Làm sạch dữ liệu EXIF +clean_confirmation_text = Bạn có chắc chắn muốn xóa dữ liệu EXIF khỏi các mục đã chọn không? +crop_videos_text = Cắt xén video +crop_video_confirmation_text = Bạn có chắc chắn muốn cắt xén các video đã chọn không? +crop_reencode_video_text = Mã hóa lại video +reencode_videos_text = Mã hóa lại video +optimize_button_text = Tối ưu hóa +optimize_confirmation_text = Bạn có chắc chắn muốn mã hóa lại các video đã chọn không? +optimize_fail_if_bigger_text = Nếu tệp đã được tối ưu hóa lớn hơn kích thước ban đầu, quá trình sẽ thất bại +optimize_overwrite_files_text = Ghi đè các tệp +optimize_limit_video_size_text = Giới hạn kích thước video +optimize_max_width_text = Độ rộng tối đa: +optimize_max_height_text = Chiều cao tối đa: +hardlink_button_text = Liên kết cứng +hardlink_text = Tạo liên kết cứng +hardlink_confirmation_text = Bạn có chắc chắn muốn tạo các liên kết cứng cho các mục đã chọn không? +softlink_button_text = Softlink +softlink_text = Tạo liên kết mềm +softlink_confirmation_text = Bạn có chắc chắn muốn tạo các liên kết mềm (symlink) cho các mục đã chọn không? + +column_full_path = Đường dẫn đầy đủ +file_dialog_open = Để tiếp tục, vui lòng đóng cửa cửa sổ đối thoại +selection_custom_select_unselect = Chọn/Bỏ chọn tùy chỉnh +settings_similar_videos_preview_hint = Ảnh xem trước chỉ hiển thị khi tùy chọn "Tạo ảnh thu nhỏ" được bật, hoặc khi một ảnh thu nhỏ đã được tạo. +settings_show_notification_on_scan_completion_text = Hiển thị thông báo khi quá trình quét hoàn tất +settings_notification_feature_hint_text = Chỉ khả dụng khi biên dịch với tính năng thông báo +settings_notification_focused_hint_text = Thông báo có thể không hiển thị dưới dạng cửa sổ bật lên khi cửa sổ ứng dụng đang được làm nổi +popup_custom_select_title_text = Tùy chọn / Bỏ chọn theo ý muốn +popup_custom_select_button_text = Chọn +popup_custom_unselect_button_text = Bỏ chọn +popup_custom_column_name_header_text = Cột +popup_custom_filter_value_header_text = Giá trị bộ lọc (ký tự đại diện / biểu thức chính quy) +popup_custom_case_sensitive_text = Phân biệt chữ hoa chữ thường +popup_custom_leave_one_in_group_text = Chọn tất cả các mục, trừ một, trong mỗi nhóm +popup_custom_hint_str_text = Cột văn bản: ký tự đại diện *name* /home/* *.rs +popup_custom_hint_int_text = Kích thước [KB] / cột số: >= 2048 < 512 = 0 (các phép toán: >=, <=, >, <, =) +popup_custom_hint_date_text = Các cột ngày tháng: Định dạng DD-MM-YYYY hoặc YYYY-MM-DD, có thể thêm thời gian HH:MM:SS (tùy chọn). Ví dụ: >= 2020-01-01 hoặc < 31-12-2022 23:59:59 +compare_button_text = So sánh +compare_back_text = Quay lại +compare_prev_group_text = Nhóm trước đó +compare_next_group_text = Nhóm tiếp theo +compare_swap_text = Trao đổi +compare_info_text = Thông tin +compare_diff_text = Sự khác biệt +compare_loading_title_text = Vui lòng chờ... +compare_cancel_text = Hủy bỏ +compare_resolution_mismatch_text = Các độ phân giải khác nhau - kết quả có thể khác nhau và có thể không chính xác +compare_computing_diff_text = Đang tính toán sự khác biệt... +compare_info_file_name_text = Tên tệp +compare_info_path_text = Đường đi +compare_info_size_text = Kích thước +compare_info_resolution_text = Độ phân giải +compare_info_modification_date_text = Ngày sửa đổi +compare_loading_images_text = Đang tải hình ảnh... +compare_cancelling_text = Đang hủy, vui lòng chờ... +context_menu_open_item_text = Mở mục +context_menu_open_parent_text = Mở thư mục cha +context_menu_remove_from_results_text = Loại khỏi kết quả +context_menu_remove_all_from_folder_text = Xóa tất cả khỏi thư mục +context_menu_select_all_from_folder_text = Chọn Tất cả từ Thư mục +context_menu_select_all_from_folder_except_one_text = Chọn Tất cả từ Thư mục (chỉ giữ lại một) +context_menu_exclude_parent_folder_text = Loại trừ thư mục cha +context_menu_exclude_item_text = Loại bỏ mục này +context_menu_copy_name_text = Sao chép tên +context_menu_copy_parent_folder_path_text = Sao chép đường dẫn thư mục cha \ No newline at end of file diff --git a/krokiet/i18n/zh-CN/krokiet.ftl b/krokiet/i18n/zh-CN/krokiet.ftl index 39c12aa5e..a488fa11d 100644 --- a/krokiet/i18n/zh-CN/krokiet.ftl +++ b/krokiet/i18n/zh-CN/krokiet.ftl @@ -1,13 +1,13 @@ # In Rust translations rust_init_error_title = 应用启动时发生严重错误 -rust_init_error_message = - 在启动应用程序时发生了一个严重错误: - - { $error_message } - - 这可能是由于缺少或损坏的 OpenGL/Vulkan 驱动程序、在虚拟机中运行应用程序或 Krokiet 或其库中的错误所致。 - - 您可以尝试运行不同的构建(skia_opengl、skia_vulkan、femtovg_opengl - 默认)或使用软件渲染器,看看是否可以解决问题。. +rust_init_error_message = + 在启动应用程序时发生了一个严重错误: + + { $error_message } + + 这可能是由于缺少或损坏的 OpenGL/Vulkan 驱动程序、在虚拟机中运行应用程序或 Krokiet 或其库中的错误所致。 + + 您可以尝试运行不同的构建(skia_opengl、skia_vulkan、femtovg_opengl - 默认)或使用软件渲染器,看看是否可以解决问题。. rust_loaded_preset = 加载预设 { $preset_idx } rust_file_already_exists = 文件 "{ $file }" 已存在,不会被覆盖 rust_error_removing_file_after_copy = 删除文件 "{ $file }" 时出错 (复制到不同分区后), 原因: { $reason } @@ -16,8 +16,8 @@ rust_loading_tags_cache = 加载标签缓存 rust_loading_fingerprints_cache = 正在加载指纹缓存 rust_saving_tags_cache = 正在保存标签缓存 rust_saving_fingerprints_cache = 保存指纹缓存 -rust_loading_prehash_cache = 正在加载逮捕缓存 -rust_saving_prehash_cache = 正在保存抓取缓存 +rust_loading_prehash_cache = 正在加载预哈希缓存 +rust_saving_prehash_cache = 正在保存预哈希缓存 rust_loading_hash_cache = 加载散列缓存 rust_saving_hash_cache = 保存哈希缓存 rust_loading_exif_cache = 加载 EXIF 缓存 @@ -35,7 +35,7 @@ rust_hashed_images = 哈希的 { $items_stats } 图像 ({ $size_stats }) rust_compared_image_hashes = 对比的 { $items_stats } 图像哈希值 rust_hashed_videos = 哈希的 { $items_stats } 视频 rust_created_thumbnails = 为 { $items_stats } 视频创建缩略图 -rust_checked_files = 签入 { $items_stats } 文件 ({ $size_stats }) +rust_checked_files = 已检查 { $items_stats } 文件 ({ $size_stats }) rust_checked_files_bad_extensions = 已检查 { $items_stats } 文件 rust_checked_files_bad_names = 检查 { $items_stats } 文件 rust_checked_videos = 已检查 { $items_stats } 视频 ({ $size_stats }) @@ -132,7 +132,7 @@ column_artist = 艺人 column_year = 年份 column_bitrate = 位速率 column_length = 长度 -column_genre = 流派数 +column_genre = 流派 column_type_of_error = 错误类型 column_symlink_name = 符号链接名称 column_symlink_folder = 符号链接文件夹 @@ -141,7 +141,7 @@ column_current_extension = 当前扩展 column_proper_extension = 合适的扩展 column_fps = 帧率 column_codec = 编解码器 -column_duration = 期限 +column_duration = 时长 column_exif_tags = EXIF 标签 column_new_name = 新名称 # Slint translations @@ -168,7 +168,7 @@ included_paths = 包含路径 excluded_paths = 排除路径 ref = 参考值 path = 路径 -tool_duplicate_files = 复制文件 +tool_duplicate_files = 重复文件 tool_empty_folders = 空文件夹 tool_big_files = 大文件 tool_empty_files = 空文件 @@ -216,7 +216,7 @@ subsettings_music_compared_tags = 比较标签 subsettings_music_title = 标题 subsettings_music_artist = 艺人 subsettings_music_bitrate = 位速率 -subsettings_music_genre = 流派数 +subsettings_music_genre = 流派 subsettings_music_year = 年份 subsettings_music_length = 长度 subsettings_music_max_difference = 最大差异 @@ -224,7 +224,7 @@ subsettings_music_minimal_fragment_duration = 最小碎片持续时间 subsettings_music_compare_fingerprints_only_with_similar_titles = 在相似标题的组中比较 subsettings_broken_files_type = 要检查的文件类型 subsettings_broken_files_audio = 音频 -subsettings_broken_files_pdf = 帕德夫 +subsettings_broken_files_pdf = PDF subsettings_broken_files_archive = 存档 subsettings_broken_files_image = 图片 subsettings_broken_files_video = 视频 @@ -265,7 +265,7 @@ settings_thread_number = 线程编号 settings_restart_required = ---你需要重新启动应用才能应用线程编号中的更改-- settings_duplicate_image_preview = 图像预览 settings_duplicate_minimal_hash_cache_size = 缓存文件的最小大小 - 哈希值 (KB) -settings_duplicate_use_prehash = 使用预设的 +settings_duplicate_use_prehash = 使用预哈希 settings_duplicate_minimal_prehash_cache_size = 缓存文件最小大小 - Prehash (KB) settings_similar_images_show_image_preview = 图像预览 settings_application_scale_text = 应用规模 @@ -280,7 +280,7 @@ settings_current_preset = 当前预设: settings_edit_name = 编辑名称 settings_choose_name_for_prefix = 选择前缀的名称 settings_save = 保存 -settings_load = 负载 +settings_load = 加载 settings_reset = 恢复 settings_similar_videos_tool = 相似视频工具 settings_video_thumbnails_clear_unused_thumbnails = 删除启动时超过7天未使用的视频缩略图 @@ -366,3 +366,49 @@ hardlink_confirmation_text = 您确定要为所选项目创建硬链接吗? softlink_button_text = 软链接 softlink_text = 创建软链接 softlink_confirmation_text = 您确定要为所选项目创建软链接(符号链接)吗? + +column_full_path = 完整路径 +file_dialog_open = 点击关闭对话框以继续。 +selection_custom_select_unselect = 自定义选择/取消选择 +settings_similar_videos_preview_hint = 预览功能仅在“生成缩略图”选项启用时,或已生成缩略图时可见。. +settings_show_notification_on_scan_completion_text = 完成扫描时,显示通知。 +settings_notification_feature_hint_text = 仅在编译时启用通知功能时可用。 +settings_notification_focused_hint_text = 通知可能不会以弹出窗口的形式显示,尤其是在应用程序窗口处于活动状态时。 +popup_custom_select_title_text = 自定义选择/取消选择 +popup_custom_select_button_text = 选择 +popup_custom_unselect_button_text = 取消选择 +popup_custom_column_name_header_text = 列。 +popup_custom_filter_value_header_text = 筛选值 (通配符 / 正则表达式) +popup_custom_case_sensitive_text = 区分大小写 +popup_custom_leave_one_in_group_text = 请在每个组中,选择所有项目,但只保留一个。 +popup_custom_hint_str_text = 文本列:通配符 *name* /home/* *.rs +popup_custom_hint_int_text = 大小 [KB] / 数值列:>= 2048 < 512 = 0 (运算符:>= <= > < =) +popup_custom_hint_date_text = 日期列:格式为 DD-MM-YYYY 或 YYYY-MM-DD,可选时间部分为 HH:MM:SS。例如:>= 2020-01-01 或 < 31-12-2022 23:59:59。 +compare_button_text = 比较 +compare_back_text = 返回 +compare_prev_group_text = 上一组 +compare_next_group_text = 下一组。 +compare_swap_text = 交换;互换。 +compare_info_text = 信息。 +compare_diff_text = 差异。 +compare_loading_title_text = 请稍候... +compare_cancel_text = 取消 +compare_resolution_mismatch_text = 不同的分辨率 - 不同的结果可能不准确。 +compare_computing_diff_text = 正在计算差异... +compare_info_file_name_text = 文件名 +compare_info_path_text = 路径 +compare_info_size_text = 尺寸 +compare_info_resolution_text = 决议 +compare_info_modification_date_text = 修改日期 +compare_loading_images_text = 正在加载图片... +compare_cancelling_text = 正在取消,请稍候... +context_menu_open_item_text = 打开项目。 +context_menu_open_parent_text = 打开父文件夹 +context_menu_remove_from_results_text = 从结果中移除。 +context_menu_remove_all_from_folder_text = 从文件夹中删除所有文件。 +context_menu_select_all_from_folder_text = 从文件夹中选择所有文件。 +context_menu_select_all_from_folder_except_one_text = 从文件夹中选择全部(保留一个)。 +context_menu_exclude_parent_folder_text = 排除父文件夹。 +context_menu_exclude_item_text = 排除项目 +context_menu_copy_name_text = 复制名称 +context_menu_copy_parent_folder_path_text = 复制父文件夹路径 \ No newline at end of file diff --git a/krokiet/i18n/zh-TW/krokiet.ftl b/krokiet/i18n/zh-TW/krokiet.ftl index 00d5bb497..702bdf75a 100644 --- a/krokiet/i18n/zh-TW/krokiet.ftl +++ b/krokiet/i18n/zh-TW/krokiet.ftl @@ -1,16 +1,16 @@ # In Rust translations rust_init_error_title = 應用程式啟動期間發生嚴重錯誤 -rust_init_error_message = - 當啟動應用程式時發生了嚴重錯誤: - - { $error_message } - - 這可能是因為缺少或損壞的 OpenGL/Vulkan 驅動程式、在虛擬機器中或在 Krokiet 或其其中一個函式庫中執行所致,或 Krokiet 或其函式庫中的錯誤。 - - 您可以嘗試執行不同的建置(skia_opengl、skia_vulkan、femtovg_opengl - 預設)或使用軟體渲染器,看看是否能解決問題。. +rust_init_error_message = + 當啟動應用程式時發生了嚴重錯誤: + + { $error_message } + + 這可能是因為缺少或損壞的 OpenGL/Vulkan 驅動程式、在虛擬機器中或在 Krokiet 或其其中一個函式庫中執行所致,或 Krokiet 或其函式庫中的錯誤。 + + 您可以嘗試執行不同的建置(skia_opengl、skia_vulkan、femtovg_opengl - 預設)或使用軟體渲染器,看看是否能解決問題。. rust_loaded_preset = 已載入預設設定 { $preset_idx } rust_file_already_exists = 檔案 "{ $file }" 已存在,不會被覆蓋。 -rust_error_removing_file_after_copy = 移除檔案 "{ $file }" 發生錯誤 (將其複製到不同分割區後),原因:{ $reason} +rust_error_removing_file_after_copy = 移除檔案 "{ $file }" 發生錯誤 (將其複製到不同分割區後),原因:{ $reason } rust_error_copying_file = 複製 "{ $input }" 到 "{ $output }" 發生錯誤,原因:{ $reason } rust_loading_tags_cache = 正在載入標籤快取 rust_loading_fingerprints_cache = 正在載入指紋快取 @@ -366,3 +366,49 @@ hardlink_confirmation_text = 您確定要為所選項目建立硬連結嗎? softlink_button_text = 軟連結 softlink_text = 建立軟連結 softlink_confirmation_text = 您確定要為所選項目建立軟連結 (symlinks) 嗎? + +column_full_path = 完整路徑 +file_dialog_open = 點擊「關閉」按鈕,即可繼續。 +selection_custom_select_unselect = 自訂選擇/取消選擇 +settings_similar_videos_preview_hint = 預覽圖僅在啟用「產生縮圖」選項,或已產生縮圖的情況下才會顯示。. +settings_show_notification_on_scan_completion_text = 當掃描完成時,顯示通知。 +settings_notification_feature_hint_text = 僅在編譯時啟用通知功能時才可用。 +settings_notification_focused_hint_text = 請注意:當應用程式視窗處於焦點狀態時,通知可能不會以彈出視窗的形式顯示。 +popup_custom_select_title_text = 自訂選擇/取消選擇 +popup_custom_select_button_text = 選擇 +popup_custom_unselect_button_text = 取消選取 +popup_custom_column_name_header_text = 欄位 +popup_custom_filter_value_header_text = 篩選值 (萬用字元 / 正則表達式) +popup_custom_case_sensitive_text = 區分大小寫。 +popup_custom_leave_one_in_group_text = 請在每個群組中,選取所有項目,除了其中一個。 +popup_custom_hint_str_text = 文本列:通配符 *name* /home/* *.rs +popup_custom_hint_int_text = 大小 [KB] / 数值列:>= 2048 < 512 = 0 (运算符:>= <= > < =) +popup_custom_hint_date_text = 日期欄位:格式為 DD-MM-YYYY 或 YYYY-MM-DD,可選時間為 HH:MM:SS。例如:>= 2020-01-01 或 < 31-12-2022 23:59:59。 +compare_button_text = 比較。 +compare_back_text = 返回 +compare_prev_group_text = 上一組 +compare_next_group_text = 下一組 +compare_swap_text = 交換。 +compare_info_text = 資訊 +compare_diff_text = 差異。 +compare_loading_title_text = 請稍候... +compare_cancel_text = 取消 +compare_resolution_mismatch_text = 不同解析度 - 不同的結果可能不準確。 +compare_computing_diff_text = 正在計算差異... +compare_info_file_name_text = 檔案名稱 +compare_info_path_text = 路徑。 +compare_info_size_text = 尺寸 +compare_info_resolution_text = 決議 +compare_info_modification_date_text = 修改日期 +compare_loading_images_text = 正在載入圖片... +compare_cancelling_text = 取消中,請稍候... +context_menu_open_item_text = 開啟項目。 +context_menu_open_parent_text = 展開上層資料夾。 +context_menu_remove_from_results_text = 從搜尋結果中移除。 +context_menu_remove_all_from_folder_text = 移除資料夾內所有項目。 +context_menu_select_all_from_folder_text = 從資料夾中選取所有項目。 +context_menu_select_all_from_folder_except_one_text = 從資料夾中選取全部項目(保留一個)。 +context_menu_exclude_parent_folder_text = 排除父資料夾 +context_menu_exclude_item_text = 排除項目 +context_menu_copy_name_text = 複製名稱 +context_menu_copy_parent_folder_path_text = 複製父目錄路徑。 \ No newline at end of file diff --git a/krokiet/icons/krokiet_compare.svg b/krokiet/icons/krokiet_compare.svg new file mode 100644 index 000000000..5e80b9fe4 --- /dev/null +++ b/krokiet/icons/krokiet_compare.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/krokiet/icons/krokiet_compare_back.svg b/krokiet/icons/krokiet_compare_back.svg new file mode 100644 index 000000000..8b5a4d2b8 --- /dev/null +++ b/krokiet/icons/krokiet_compare_back.svg @@ -0,0 +1,4 @@ + + + + diff --git a/krokiet/icons/krokiet_compare_diff.svg b/krokiet/icons/krokiet_compare_diff.svg new file mode 100644 index 000000000..8dbd24879 --- /dev/null +++ b/krokiet/icons/krokiet_compare_diff.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/krokiet/icons/krokiet_compare_next.svg b/krokiet/icons/krokiet_compare_next.svg new file mode 100644 index 000000000..ca009b7aa --- /dev/null +++ b/krokiet/icons/krokiet_compare_next.svg @@ -0,0 +1,2 @@ + + diff --git a/krokiet/icons/krokiet_compare_prev.svg b/krokiet/icons/krokiet_compare_prev.svg new file mode 100644 index 000000000..cfb4e55d4 --- /dev/null +++ b/krokiet/icons/krokiet_compare_prev.svg @@ -0,0 +1,2 @@ + + diff --git a/krokiet/icons/krokiet_compare_swap.svg b/krokiet/icons/krokiet_compare_swap.svg new file mode 100644 index 000000000..195f04848 --- /dev/null +++ b/krokiet/icons/krokiet_compare_swap.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/krokiet/src/connect_compare.rs b/krokiet/src/connect_compare.rs new file mode 100644 index 000000000..6a3288f5d --- /dev/null +++ b/krokiet/src/connect_compare.rs @@ -0,0 +1,643 @@ +use std::cell::RefCell; +use std::path::Path; +use std::rc::Rc; +use std::sync::Arc; +use std::sync::atomic::{AtomicBool, AtomicU64, Ordering}; +use std::thread; + +use czkawka_core::common::image::{ImgResizeOptions, get_dynamic_image_from_path, resize_image_exact}; +use czkawka_core::re_exported::FirFilterType; +use image::GenericImageView; +use log::error; +use slint::{ComponentHandle, Model, ModelRc, VecModel}; + +use crate::common::StrDataSimilarImages; +use crate::connect_row_selection::checker::change_number_of_enabled_items; +use crate::shared_models::SharedModels; +use crate::{ActiveTab, Callabler, CompareImageData, GuiState, MainWindow, SingleMainListModel}; + +thread_local! { + static CANCEL_TOKEN: RefCell> = + RefCell::new(Arc::new(AtomicBool::new(false))); +} + +fn new_cancel_token() -> Arc { + let token = Arc::new(AtomicBool::new(false)); + CANCEL_TOKEN.with(|t| *t.borrow_mut() = token.clone()); + token +} + +fn request_cancel() { + CANCEL_TOKEN.with(|t| t.borrow().store(true, Ordering::Relaxed)); +} + +thread_local! { + static DIFF_GENERATION: RefCell> = + RefCell::new(Arc::new(AtomicU64::new(0))); +} + +fn next_diff_gen() -> (Arc, u64) { + DIFF_GENERATION.with(|g| { + let arc = g.borrow().clone(); + let gen_val = arc.fetch_add(1, Ordering::Relaxed) + 1; + (arc, gen_val) + }) +} + +struct RawPixels { + data: Vec, + width: u32, + height: u32, +} + +impl RawPixels { + fn empty() -> Self { + Self { + data: vec![], + width: 0, + height: 0, + } + } + fn into_slint_image(self) -> slint::Image { + if self.width == 0 { + return slint::Image::default(); + } + let buf = slint::SharedPixelBuffer::::clone_from_slice(&self.data, self.width, self.height); + slint::Image::from_rgba8(buf) + } +} + +struct RawCompareItem { + path: String, + dir: String, + name: String, + size: String, + resolution: String, + modification_date: String, + similarity: String, + checked: bool, + thumbnail: RawPixels, + flat_idx: i32, +} + +pub(crate) fn connect_compare(app: &MainWindow, _shared_models: Arc>) { + connect_compare_open(app); + connect_compare_set_left(app); + connect_compare_set_right(app); + connect_compare_toggle_checkbox(app); + connect_compare_next_group(app); + connect_compare_prev_group(app); + connect_compare_swap(app); + connect_compare_cancel_load(app); + connect_compare_compute_diff(app); +} + +fn connect_compare_open(app: &MainWindow) { + let a = app.as_weak(); + app.global::().on_compare_open(move || { + let app = a.upgrade().expect("Failed to upgrade app"); + let model = app.get_similar_images_model(); + if model.row_count() == 0 { + return; + } + let header_idx = find_group_header_for_current_selection(&model); + open_group(&app, header_idx); + }); +} + +fn connect_compare_set_left(app: &MainWindow) { + let a = app.as_weak(); + app.global::().on_compare_set_left(move |compare_idx| { + let app = a.upgrade().expect("Failed to upgrade app"); + let gui_state = app.global::(); + let idx = compare_idx as usize; + if compare_idx == gui_state.get_compare_right_idx() { + return; + } + let images = gui_state.get_compare_images(); + if idx >= images.row_count() { + return; + } + let path = images.row_data(idx).unwrap().path.to_string(); + gui_state.set_compare_left_idx(idx as i32); + gui_state.set_compare_diff_image(slint::Image::default()); + if let Some(img) = load_full_image(&path) { + gui_state.set_compare_left_image(img); + } + }); +} + +fn connect_compare_set_right(app: &MainWindow) { + let a = app.as_weak(); + app.global::().on_compare_set_right(move |compare_idx| { + let app = a.upgrade().expect("Failed to upgrade app"); + let gui_state = app.global::(); + let idx = compare_idx as usize; + if compare_idx == gui_state.get_compare_left_idx() { + return; + } + let images = gui_state.get_compare_images(); + if idx >= images.row_count() { + return; + } + let path = images.row_data(idx).unwrap().path.to_string(); + gui_state.set_compare_right_idx(idx as i32); + gui_state.set_compare_diff_image(slint::Image::default()); + if let Some(img) = load_full_image(&path) { + gui_state.set_compare_right_image(img); + } + }); +} + +fn connect_compare_toggle_checkbox(app: &MainWindow) { + let a = app.as_weak(); + app.global::().on_compare_toggle_checkbox(move |compare_idx| { + let app = a.upgrade().expect("Failed to upgrade app"); + let gui_state = app.global::(); + let compare_idx = compare_idx as usize; + let images_model = gui_state.get_compare_images(); + + if compare_idx >= images_model.row_count() { + return; + } + + let item = images_model.row_data(compare_idx).unwrap(); + let flat_idx = item.flat_idx as usize; + let new_checked = !item.checked; + + let main_model = app.get_similar_images_model(); + if let Some(mut main_row) = main_model.row_data(flat_idx) { + let old_main_checked = main_row.checked; + main_row.checked = new_checked; + main_model.set_row_data(flat_idx, main_row); + + if old_main_checked != new_checked { + let delta: i64 = if new_checked { 1 } else { -1 }; + change_number_of_enabled_items(&app, ActiveTab::SimilarImages, delta); + } + } + + update_compare_checked(&gui_state, compare_idx, new_checked); + }); +} + +fn connect_compare_next_group(app: &MainWindow) { + let a = app.as_weak(); + app.global::().on_compare_next_group(move || { + let app = a.upgrade().expect("Failed to upgrade app"); + let gui_state = app.global::(); + let model = app.get_similar_images_model(); + let current = gui_state.get_compare_current_group_header_flat_idx() as usize; + if let Some(next) = find_adjacent_group_header(&model, current, true) { + open_group(&app, next); + } + }); +} + +fn connect_compare_prev_group(app: &MainWindow) { + let a = app.as_weak(); + app.global::().on_compare_prev_group(move || { + let app = a.upgrade().expect("Failed to upgrade app"); + let gui_state = app.global::(); + let model = app.get_similar_images_model(); + let current = gui_state.get_compare_current_group_header_flat_idx() as usize; + if let Some(prev) = find_adjacent_group_header(&model, current, false) { + open_group(&app, prev); + } + }); +} + +fn connect_compare_swap(app: &MainWindow) { + let a = app.as_weak(); + app.global::().on_compare_swap(move || { + let app = a.upgrade().expect("Failed to upgrade app"); + let gui_state = app.global::(); + let left_idx = gui_state.get_compare_left_idx(); + let right_idx = gui_state.get_compare_right_idx(); + let left_image = gui_state.get_compare_left_image(); + let right_image = gui_state.get_compare_right_image(); + gui_state.set_compare_left_idx(right_idx); + gui_state.set_compare_right_idx(left_idx); + gui_state.set_compare_left_image(right_image); + gui_state.set_compare_right_image(left_image); + gui_state.set_compare_diff_image(slint::Image::default()); + }); +} + +fn connect_compare_cancel_load(app: &MainWindow) { + let a = app.as_weak(); + app.global::().on_compare_cancel_load(move || { + let app = a.upgrade().expect("Failed to upgrade app"); + app.global::().set_compare_cancelling(true); + request_cancel(); + }); +} + +fn connect_compare_compute_diff(app: &MainWindow) { + let a = app.as_weak(); + app.global::().on_compare_compute_diff(move || { + let app = a.upgrade().expect("Failed to upgrade app"); + let gui_state = app.global::(); + + let left_idx = gui_state.get_compare_left_idx() as usize; + let right_idx = gui_state.get_compare_right_idx() as usize; + let images = gui_state.get_compare_images(); + + let left_path = images.row_data(left_idx).map(|d| d.path.to_string()).unwrap_or_default(); + let right_path = images.row_data(right_idx).map(|d| d.path.to_string()).unwrap_or_default(); + + if left_path.is_empty() || right_path.is_empty() { + return; + } + + gui_state.set_compare_diff_image(slint::Image::default()); + let (gen_counter, gen_val) = next_diff_gen(); + + let weak = a.clone(); + thread::spawn(move || { + let diff = compute_diff_image(&left_path, &right_path); + if gen_counter.load(Ordering::Relaxed) != gen_val { + return; + } + weak.upgrade_in_event_loop(move |app| { + if gen_counter.load(Ordering::Relaxed) == gen_val + && let Some(raw) = diff + { + app.global::().set_compare_diff_image(raw.into_slint_image()); + } + }) + .expect("Failed to upgrade app :("); + }); + }); +} + +fn open_group(app: &MainWindow, header_idx: usize) { + let model = app.get_similar_images_model(); + let gui_state = app.global::(); + + let data_indices = collect_group_data_indices(&model, header_idx); + if data_indices.is_empty() { + return; + } + + let total = data_indices.len() as i32; + + let rows: Vec<(usize, bool, Vec)> = data_indices + .iter() + .map(|&flat_idx| { + let row = model.row_data(flat_idx).unwrap(); + let strs: Vec = (0..row.val_str.row_count()) + .map(|i| row.val_str.row_data(i).map(|s| s.to_string()).unwrap_or_default()) + .collect(); + (flat_idx, row.checked, strs) + }) + .collect(); + + gui_state.set_compare_current_group_header_flat_idx(header_idx as i32); + gui_state.set_compare_loading_current(0); + gui_state.set_compare_loading_total(total); + + gui_state.set_compare_images(Rc::new(VecModel::from(vec![])).into()); + gui_state.set_compare_left_image(slint::Image::default()); + gui_state.set_compare_right_image(slint::Image::default()); + gui_state.set_compare_diff_image(slint::Image::default()); + gui_state.set_compare_loading(true); + gui_state.set_compare_cancelling(false); + gui_state.set_compare_visible(true); + + let cancel = new_cancel_token(); + let weak = app.as_weak(); + + thread::spawn(move || { + let mut raw_items: Vec = Vec::with_capacity(rows.len()); + + for (i, (flat_idx, checked, strs)) in rows.iter().enumerate() { + if cancel.load(Ordering::Relaxed) { + let weak_c = weak.clone(); + weak_c + .upgrade_in_event_loop(move |app| { + let gs = app.global::(); + gs.set_compare_loading(false); + gs.set_compare_cancelling(false); + gs.set_compare_visible(false); + }) + .expect("Failed to upgrade app :("); + return; + } + + let dir = strs.get(StrDataSimilarImages::Path as usize).cloned().unwrap_or_default(); + let name = strs.get(StrDataSimilarImages::Name as usize).cloned().unwrap_or_default(); + let full_path = format!("{dir}/{name}"); + let thumbnail = load_raw_thumbnail(&full_path); + + raw_items.push(RawCompareItem { + path: full_path, + dir: dir.clone(), + name, + size: strs.get(StrDataSimilarImages::Size as usize).cloned().unwrap_or_default(), + resolution: strs.get(StrDataSimilarImages::Resolution as usize).cloned().unwrap_or_default(), + modification_date: strs.get(StrDataSimilarImages::ModificationDate as usize).cloned().unwrap_or_default(), + similarity: strs.get(StrDataSimilarImages::Similarity as usize).cloned().unwrap_or_default(), + checked: *checked, + thumbnail, + flat_idx: *flat_idx as i32, + }); + + let current = i as i32 + 1; + let weak_c = weak.clone(); + weak_c + .upgrade_in_event_loop(move |app| { + app.global::().set_compare_loading_current(current); + }) + .expect("Failed to upgrade app :("); + } + + let left_idx_slint = 0i32; + let right_idx_slint = (raw_items.len() as i32 - 1).min(1); + + if cancel.load(Ordering::Relaxed) { + weak.upgrade_in_event_loop(move |app| { + let gs = app.global::(); + gs.set_compare_loading(false); + gs.set_compare_cancelling(false); + gs.set_compare_visible(false); + }) + .expect("Failed to upgrade app :("); + return; + } + + let left_path = raw_items.get(left_idx_slint as usize).map(|r| r.path.clone()).unwrap_or_default(); + let right_path = raw_items.get(right_idx_slint as usize).map(|r| r.path.clone()).unwrap_or_default(); + + let left_raw = load_raw_full_image(&left_path); + let right_raw = load_raw_full_image(&right_path); + + weak.upgrade_in_event_loop(move |app| { + let gui_state = app.global::(); + + let main_model = app.get_similar_images_model(); + let compare_data: Vec = raw_items + .into_iter() + .map(|r| { + let current_checked = main_model.row_data(r.flat_idx as usize).map_or(r.checked, |row| row.checked); + CompareImageData { + path: r.path.into(), + dir: r.dir.into(), + name: r.name.into(), + size: r.size.into(), + resolution: r.resolution.into(), + modification_date: r.modification_date.into(), + similarity: r.similarity.into(), + checked: current_checked, + thumbnail: r.thumbnail.into_slint_image(), + flat_idx: r.flat_idx, + } + }) + .collect(); + + gui_state.set_compare_images(Rc::new(VecModel::from(compare_data)).into()); + gui_state.set_compare_left_idx(left_idx_slint); + gui_state.set_compare_right_idx(right_idx_slint); + + if let Some(raw) = left_raw { + gui_state.set_compare_left_image(raw.into_slint_image()); + } + if let Some(raw) = right_raw { + gui_state.set_compare_right_image(raw.into_slint_image()); + } + + gui_state.set_compare_cancelling(false); + gui_state.set_compare_loading(false); + }) + .expect("Failed to upgrade app :("); + }); +} + +fn update_compare_checked(gui_state: &GuiState, compare_idx: usize, new_checked: bool) { + let images_model = gui_state.get_compare_images(); + let vec_model = images_model + .as_any() + .downcast_ref::>() + .expect("compare_images is always a VecModel"); + let mut item = vec_model.row_data(compare_idx).expect("compare_idx must be a valid index into compare_images"); + item.checked = new_checked; + vec_model.set_row_data(compare_idx, item); +} + +fn collect_group_data_indices(model: &ModelRc, header_idx: usize) -> Vec { + let count = model.row_count(); + let mut indices = Vec::new(); + let h = model.row_data(header_idx).expect("header_idx must be a valid model row index"); + if h.header_row && h.filled_header_row { + indices.push(header_idx); + } + + let mut i = header_idx + 1; + while i < count { + let row = model.row_data(i).expect("i must be within row_count bounds"); + if row.header_row { + break; + } + indices.push(i); + i += 1; + } + + indices +} + +fn find_group_header_for_current_selection(model: &ModelRc) -> usize { + if let Some(sel_idx) = model.iter().enumerate().find(|(_, r)| r.selected_row && !r.header_row).map(|(i, _)| i) { + for i in (0..=sel_idx).rev() { + if model.row_data(i).expect("i is within sel_idx bounds which is within row_count").header_row { + return i; + } + } + } + + model.iter().enumerate().find(|(_, r)| r.header_row).map_or(0, |(i, _)| i) +} + +fn find_adjacent_group_header(model: &ModelRc, current_header_idx: usize, forward: bool) -> Option { + let count = model.row_count(); + if forward { + for i in (current_header_idx + 1)..count { + if model.row_data(i).expect("i is within row_count bounds").header_row { + return Some(i); + } + } + } else if current_header_idx > 0 { + for i in (0..current_header_idx).rev() { + if model.row_data(i).expect("i is within row_count bounds").header_row { + return Some(i); + } + } + } + None +} + +fn load_raw_thumbnail(path: &str) -> RawPixels { + load_raw_image(path, 200, 150).unwrap_or_else(RawPixels::empty) +} + +fn load_raw_full_image(path: &str) -> Option { + load_raw_image(path, 1200, 900) +} + +fn load_raw_image(path: &str, max_w: u32, max_h: u32) -> Option { + let p = Path::new(path); + if !p.is_file() { + return None; + } + match get_dynamic_image_from_path( + &p.to_string_lossy(), + Some(ImgResizeOptions { + max_width: max_w, + max_height: max_h, + filter: FirFilterType::Bilinear, + }), + ) { + Ok(result) => { + let buf = result.image.into_rgba8(); + Some(RawPixels { + data: buf.as_raw().clone(), + width: buf.width(), + height: buf.height(), + }) + } + Err(e) => { + error!("Failed to load compare image \"{path}\": {e}"); + None + } + } +} + +fn load_full_image(path: &str) -> Option { + load_raw_full_image(path).map(RawPixels::into_slint_image) +} + +fn compute_diff_image(left_path: &str, right_path: &str) -> Option { + let resize_opts = Some(ImgResizeOptions { + max_width: 1200, + max_height: 900, + filter: FirFilterType::Bilinear, + }); + + let left = get_dynamic_image_from_path(left_path, resize_opts).ok()?.image; + let right = get_dynamic_image_from_path(right_path, resize_opts).ok()?.image; + + let (w, h) = (left.width(), left.height()); + + let right = if (right.width(), right.height()) != (w, h) { + resize_image_exact(&right, w, h, FirFilterType::Lanczos3) + } else { + right + }; + + assert_eq!(left.dimensions(), right.dimensions()); + + let left_rgba = left.to_rgba8(); + let right_rgba = right.to_rgba8(); + + let mut data: Vec = Vec::with_capacity((w * h * 4) as usize); + + for y in 0..h { + for x in 0..w { + let lp = left_rgba.get_pixel(x, y).0; + let rp = right_rgba.get_pixel(x, y).0; + + let dr = (lp[0] as f32 - rp[0] as f32).powi(2); + let dg = (lp[1] as f32 - rp[1] as f32).powi(2); + let db = (lp[2] as f32 - rp[2] as f32).powi(2); + + let val = ((dr + dg + db) / (3.0 * 255.0_f32 * 255.0_f32)).sqrt() * 255.0; + let val = val.clamp(0.0, 255.0) as u8; + + data.extend_from_slice(&[val, val, val, 255]); + } + } + + Some(RawPixels { data, width: w, height: h }) +} + +#[cfg(test)] +mod tests { + use std::rc::Rc; + + use slint::{ModelRc, VecModel}; + + use super::{collect_group_data_indices, find_adjacent_group_header, find_group_header_for_current_selection}; + use crate::SingleMainListModel; + + fn row(header: bool, filled: bool, selected: bool) -> SingleMainListModel { + SingleMainListModel { + header_row: header, + filled_header_row: filled, + selected_row: selected, + ..Default::default() + } + } + + fn make_model(rows: Vec) -> ModelRc { + Rc::new(VecModel::from(rows)).into() + } + + #[test] + fn test_collect_group_data_indices() { + // [H*] [D] [D] | filled header → all 3 included + let model = make_model(vec![row(true, true, false), row(false, false, false), row(false, false, false)]); + assert_eq!(collect_group_data_indices(&model, 0), vec![0, 1, 2]); + + // unfilled header → only data rows + let model = make_model(vec![row(true, false, false), row(false, false, false), row(false, false, false)]); + assert_eq!(collect_group_data_indices(&model, 0), vec![1, 2]); + + // two groups: first group stops at second header + let model = make_model(vec![row(true, true, false), row(false, false, false), row(true, true, false), row(false, false, false)]); + assert_eq!(collect_group_data_indices(&model, 0), vec![0, 1]); + assert_eq!(collect_group_data_indices(&model, 2), vec![2, 3]); + } + + #[test] + fn test_find_group_header_for_current_selection() { + // no selection → fall back to first header (idx 0) + let model = make_model(vec![row(true, true, false), row(false, false, false)]); + assert_eq!(find_group_header_for_current_selection(&model), 0); + + // selected data row belongs to first group + let model = make_model(vec![ + row(true, true, false), + row(false, false, true), // selected + row(true, true, false), + row(false, false, false), + ]); + assert_eq!(find_group_header_for_current_selection(&model), 0); + + // selected data row belongs to second group + let model = make_model(vec![ + row(true, true, false), + row(false, false, false), + row(true, true, false), + row(false, false, true), // selected + ]); + assert_eq!(find_group_header_for_current_selection(&model), 2); + } + + #[test] + fn test_find_adjacent_group_header() { + let model = make_model(vec![ + row(true, true, false), // 0 + row(false, false, false), // 1 + row(true, true, false), // 2 + row(false, false, false), // 3 + row(true, true, false), // 4 + ]); + + assert_eq!(find_adjacent_group_header(&model, 0, true), Some(2)); + assert_eq!(find_adjacent_group_header(&model, 2, true), Some(4)); + assert_eq!(find_adjacent_group_header(&model, 4, true), None); + + assert_eq!(find_adjacent_group_header(&model, 4, false), Some(2)); + assert_eq!(find_adjacent_group_header(&model, 2, false), Some(0)); + assert_eq!(find_adjacent_group_header(&model, 0, false), None); + } +} diff --git a/krokiet/src/connect_directories_changes.rs b/krokiet/src/connect_directories_changes.rs index 473a0aec9..198c1b47c 100644 --- a/krokiet/src/connect_directories_changes.rs +++ b/krokiet/src/connect_directories_changes.rs @@ -138,7 +138,7 @@ fn add_included_paths(settings: &Settings, folders: &[String]) { settings.set_included_paths_model(new_folders_model); } -fn add_excluded_paths(settings: &Settings, folders: &[String]) { +pub(crate) fn add_excluded_paths(settings: &Settings, folders: &[String]) { let old_folders = settings.get_excluded_paths_model(); let old_folders_path = old_folders.iter().map(|x| x.path.to_string()).collect::>(); let mut new_folders = old_folders.iter().collect::>(); diff --git a/krokiet/src/connect_row_selection.rs b/krokiet/src/connect_row_selection.rs index a8d8b58e0..1497bf592 100644 --- a/krokiet/src/connect_row_selection.rs +++ b/krokiet/src/connect_row_selection.rs @@ -138,6 +138,7 @@ pub(crate) fn connect_row_selections(app: &MainWindow) { opener::open_provided_parent_item(app); opener::connect_on_open_item(app); checker::change_number_of_checked_items(app); + context_menu::connect_context_menu_actions(app); } mod opener { @@ -420,9 +421,9 @@ pub(crate) mod checker { pub(crate) fn change_number_of_enabled_items(app: &MainWindow, active_tab: ActiveTab, additions: i64) { let before_number_of_items = get_number_of_enabled_items(app, active_tab); - let after_number_of_items = before_number_of_items - .checked_add_signed(additions) - .unwrap_or_else(|| panic!("Overflow when adding signed number to items: before_number_of_items = {before_number_of_items}, additions = {additions}")); + let after_number_of_items = before_number_of_items.checked_add_signed(additions).unwrap_or_else(|| { + panic!("Counter desync: before_number_of_items = {before_number_of_items}, additions = {additions}, tab = {active_tab:?}"); + }); set_number_of_enabled_items(app, active_tab, after_number_of_items); } @@ -768,6 +769,353 @@ fn rows_reverse_checked_selection(selection: &SelectionData, model: &ModelRc().on_row_remove_from_results(move |idx| { + let app = a.upgrade().expect("Failed to upgrade app"); + let active_tab = app.global::().get_active_tab(); + let model = active_tab.get_tool_model(&app); + let idx = idx as usize; + + let Some(row) = model.row_data(idx) else { return }; + if row.header_row { + return; + } + + let new_items: Vec = model.iter().enumerate().filter_map(|(i, r)| if i == idx { None } else { Some(r) }).collect(); + let cleaned = remove_single_items_in_groups(new_items, active_tab.get_is_header_mode()); + active_tab.set_tool_model(&app, ModelRc::new(VecModel::from(cleaned))); + reset_selection(&app, active_tab, true); + }); + } + + fn connect_remove_all_from_folder(app: &MainWindow) { + let a = app.as_weak(); + app.global::().on_row_remove_all_from_folder(move |idx| { + remove_all_from_folder_impl(&a.upgrade().expect("Failed to upgrade app"), idx as usize, false); + }); + } + + fn connect_remove_all_from_folder_recursive(app: &MainWindow) { + let a = app.as_weak(); + app.global::().on_row_remove_all_from_folder_recursive(move |idx| { + remove_all_from_folder_impl(&a.upgrade().expect("Failed to upgrade app"), idx as usize, true); + }); + } + + fn remove_all_from_folder_impl(app: &MainWindow, idx: usize, recursive: bool) { + let active_tab = app.global::().get_active_tab(); + let model = active_tab.get_tool_model(app); + let path_idx = active_tab.get_str_path_idx(); + + let Some(clicked_row) = model.row_data(idx) else { return }; + if clicked_row.header_row { + return; + } + let target_path = clicked_row.val_str.iter().nth(path_idx).map(|s| s.to_string()).unwrap_or_default(); + let target_prefix = format!("{target_path}/"); + + let mut in_reference_group = false; + let new_items: Vec = model + .iter() + .filter(|row| { + if row.header_row { + in_reference_group = row.filled_header_row; + true + } else if in_reference_group { + true // never remove items from a reference-folder group + } else { + let p = row.val_str.iter().nth(path_idx).map(|s| s.as_str().to_owned()).unwrap_or_default(); + if recursive { + p != target_path && !p.starts_with(&target_prefix) + } else { + p != target_path + } + } + }) + .collect(); + let cleaned = remove_single_items_in_groups(new_items, active_tab.get_is_header_mode()); + active_tab.set_tool_model(app, ModelRc::new(VecModel::from(cleaned))); + reset_selection(app, active_tab, true); + } + + fn connect_select_all_from_folder(app: &MainWindow) { + let a = app.as_weak(); + app.global::().on_row_select_all_from_folder(move |idx| { + select_all_from_folder_impl(&a.upgrade().expect("Failed to upgrade app"), idx as usize, false); + }); + } + + fn connect_select_all_from_folder_recursive(app: &MainWindow) { + let a = app.as_weak(); + app.global::().on_row_select_all_from_folder_recursive(move |idx| { + select_all_from_folder_impl(&a.upgrade().expect("Failed to upgrade app"), idx as usize, true); + }); + } + + fn select_all_from_folder_impl(app: &MainWindow, idx: usize, recursive: bool) { + let active_tab = app.global::().get_active_tab(); + let model = active_tab.get_tool_model(app); + let path_idx = active_tab.get_str_path_idx(); + let is_header_mode = active_tab.get_is_header_mode(); + + let Some(clicked_row) = model.row_data(idx) else { return }; + if clicked_row.header_row { + return; + } + let target_path = clicked_row.val_str.iter().nth(path_idx).map(|s| s.to_string()).unwrap_or_default(); + let target_prefix = format!("{target_path}/"); + + let items: Vec = model.iter().collect(); + let n = items.len(); + + let path_matches = |i: usize| -> bool { + if items[i].header_row { + return false; + } + let p = items[i].val_str.iter().nth(path_idx).map(|s| s.as_str().to_owned()).unwrap_or_default(); + if recursive { + p == target_path || p.starts_with(&target_prefix) + } else { + p == target_path + } + }; + + // should_check[i] = true → set checked=true for that item (never uncheck) + let mut should_check = vec![false; n]; + + if !is_header_mode { + // Flat list: simply check all matching items. + for i in 0..n { + if path_matches(i) && !items[i].checked { + should_check[i] = true; + } + } + } else { + // Group-aware: iterate group by group. + let mut i = 0; + while i < n { + if !items[i].header_row { + i += 1; + continue; + } + let is_reference = items[i].filled_header_row; + i += 1; // skip the header row + + let group_start = i; + while i < n && !items[i].header_row { + i += 1; + } + let group_end = i; // exclusive + let total_in_group = group_end - group_start; + if total_in_group == 0 { + continue; + } + + let currently_checked = (group_start..group_end).filter(|&j| items[j].checked).count(); + let matching_unchecked: Vec = (group_start..group_end).filter(|&j| path_matches(j) && !items[j].checked).collect(); + let would_be_checked = currently_checked + matching_unchecked.len(); + + if is_reference { + // The reference header itself is permanently unchecked, so there is always + // at least one "uncheckable" item in the group → no restriction needed. + for j in matching_unchecked { + should_check[j] = true; + } + } else if would_be_checked == total_in_group && currently_checked < total_in_group { + // Checking all matching items would make the whole group checked, and the + // group is not already full → check all but skip the last matching unchecked + // so one item remains unchecked. + let count = matching_unchecked.len(); + if count > 1 { + for &j in &matching_unchecked[..count - 1] { + should_check[j] = true; + } + } + // count == 1: checking that single item would fill the group → skip it. + // count == 0: nothing to check (impossible to reach here, but harmless). + } else { + // Either the group won't be fully checked, or it is already fully checked + // (currently_checked == total_in_group → matching_unchecked is empty). + // In both cases just check all matching unchecked items. + for j in matching_unchecked { + should_check[j] = true; + } + } + } + } + + let new_items: Vec = items + .into_iter() + .enumerate() + .map(|(i, mut row)| { + if should_check[i] { + row.checked = true; + } + row.selected_row = false; // keep in sync with TOOLS_SELECTION reset below + row + }) + .collect(); + + let checked_count = new_items.iter().filter(|r| r.checked).count() as u64; + active_tab.set_tool_model(app, ModelRc::new(VecModel::from(new_items))); + reset_selection(app, active_tab, true); + set_number_of_enabled_items(app, active_tab, checked_count); + } + + fn connect_exclude_parent_folder(app: &MainWindow) { + let a = app.as_weak(); + app.global::().on_row_exclude_parent_folder(move |idx| { + let app = a.upgrade().expect("Failed to upgrade app"); + let active_tab = app.global::().get_active_tab(); + let model = active_tab.get_tool_model(&app); + let path_idx = active_tab.get_str_path_idx(); + + let row = model.row_data(idx as usize).expect("Row index out of bounds"); + if row.header_row { + return; + } + let path = row.val_str.iter().nth(path_idx).expect("path_idx out of bounds").to_string(); + add_excluded_paths(&app.global::(), std::slice::from_ref(&path)); + + // Also remove matching rows from results, keeping reference-group items. + let mut in_reference_group = false; + let new_items: Vec = model + .iter() + .filter(|r| { + if r.header_row { + in_reference_group = r.filled_header_row; + true + } else if in_reference_group { + true + } else { + r.val_str.iter().nth(path_idx).is_none_or(|p| p.as_str() != path) + } + }) + .collect(); + let cleaned = remove_single_items_in_groups(new_items, active_tab.get_is_header_mode()); + active_tab.set_tool_model(&app, ModelRc::new(VecModel::from(cleaned))); + reset_selection(&app, active_tab, true); + }); + } + + fn connect_exclude_item(app: &MainWindow) { + let a = app.as_weak(); + app.global::().on_row_exclude_item(move |idx| { + let app = a.upgrade().expect("Failed to upgrade app"); + let active_tab = app.global::().get_active_tab(); + let model = active_tab.get_tool_model(&app); + let path_idx = active_tab.get_str_path_idx(); + let name_idx = active_tab.get_str_name_idx(); + let idx = idx as usize; + + let row = model.row_data(idx).expect("Row index out of bounds"); + if row.header_row { + return; + } + let path = row.val_str.iter().nth(path_idx).expect("path_idx out of bounds").to_string(); + let name = row.val_str.iter().nth(name_idx).expect("name_idx out of bounds").to_string(); + let full_path = std::path::PathBuf::from(&path).join(&name).to_string_lossy().to_string(); + add_excluded_paths(&app.global::(), &[full_path]); + + // Remove the specific item from results. + let new_items: Vec = model.iter().enumerate().filter_map(|(i, r)| if i == idx { None } else { Some(r) }).collect(); + let cleaned = remove_single_items_in_groups(new_items, active_tab.get_is_header_mode()); + active_tab.set_tool_model(&app, ModelRc::new(VecModel::from(cleaned))); + reset_selection(&app, active_tab, true); + }); + } + + fn set_clipboard(text: String) { + use copypasta::{ClipboardContext, ClipboardProvider}; + match ClipboardContext::new() { + Ok(mut ctx) => { + if let Err(e) = ctx.set_contents(text) { + warn!("Failed to set clipboard contents: {e}"); + } + } + Err(e) => warn!("Failed to create clipboard context: {e}"), + } + } + + fn connect_copy_file_name(app: &MainWindow) { + let a = app.as_weak(); + app.global::().on_row_copy_file_name(move |idx| { + let app = a.upgrade().expect("Failed to upgrade app"); + let active_tab = app.global::().get_active_tab(); + let model = active_tab.get_tool_model(&app); + let name_idx = active_tab.get_str_name_idx(); + + let row = model.row_data(idx as usize).expect("Row index out of bounds"); + if row.header_row { + return; + } + let name = row.val_str.iter().nth(name_idx).expect("name_idx out of bounds").to_string(); + set_clipboard(name); + }); + } + + fn connect_copy_parent_folder_path(app: &MainWindow) { + let a = app.as_weak(); + app.global::().on_row_copy_parent_folder_path(move |idx| { + let app = a.upgrade().expect("Failed to upgrade app"); + let active_tab = app.global::().get_active_tab(); + let model = active_tab.get_tool_model(&app); + let path_idx = active_tab.get_str_path_idx(); + + let row = model.row_data(idx as usize).expect("Row index out of bounds"); + if row.header_row { + return; + } + let path = row.val_str.iter().nth(path_idx).expect("path_idx out of bounds").to_string(); + set_clipboard(path); + }); + } + + fn connect_copy_full_path(app: &MainWindow) { + let a = app.as_weak(); + app.global::().on_row_copy_full_path(move |idx| { + let app = a.upgrade().expect("Failed to upgrade app"); + let active_tab = app.global::().get_active_tab(); + let model = active_tab.get_tool_model(&app); + let name_idx = active_tab.get_str_name_idx(); + let path_idx = active_tab.get_str_path_idx(); + + let row = model.row_data(idx as usize).expect("Row index out of bounds"); + if row.header_row { + return; + } + let name = row.val_str.iter().nth(name_idx).expect("name_idx out of bounds").to_string(); + let path = row.val_str.iter().nth(path_idx).expect("path_idx out of bounds").to_string(); + let full_path = if path.is_empty() { name } else { format!("{path}/{name}") }; + set_clipboard(full_path); + }); + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/krokiet/src/connect_translation.rs b/krokiet/src/connect_translation.rs index 20fd1608f..bc6473c68 100644 --- a/krokiet/src/connect_translation.rs +++ b/krokiet/src/connect_translation.rs @@ -104,6 +104,22 @@ pub const LANGUAGE_LIST: &[Language] = &[ long_name: "Türkçe (Turkish)", short_name: "tr", }, + Language { + long_name: "فارسی (Persian)", + short_name: "fa", + }, + Language { + long_name: "हिंदी (Hindi)", + short_name: "hi", + }, + Language { + long_name: "Bahasa Indonesia (Indonesian)", + short_name: "id", + }, + Language { + long_name: "Tiếng Việt (Vietnamese)", + short_name: "vi", + }, ]; pub(crate) fn connect_translations(app: &MainWindow) { @@ -265,6 +281,11 @@ fn translate_items(app: &MainWindow) { translation.set_subsettings_video_optimizer_video_codec_text(flk!("subsettings_video_optimizer_video_codec").into()); translation.set_subsettings_video_optimizer_excluded_codecs_text(flk!("subsettings_video_optimizer_excluded_codecs").into()); translation.set_subsettings_video_optimizer_video_quality_text(flk!("subsettings_video_optimizer_video_quality").into()); + translation.set_subsettings_video_optimizer_noise_reduction_text(flk!("subsettings_video_optimizer_noise_reduction").into()); + translation.set_subsettings_video_optimizer_noise_reduction_strength_text(flk!("subsettings_video_optimizer_noise_reduction_strength").into()); + translation.set_subsettings_video_optimizer_use_custom_command_text(flk!("subsettings_video_optimizer_use_custom_command").into()); + translation.set_subsettings_video_optimizer_custom_command_hint_text(flk!("subsettings_video_optimizer_custom_command_hint").into()); + translation.set_subsettings_video_optimizer_generate_template_text(flk!("subsettings_video_optimizer_generate_template").into()); translation.set_subsettings_reset_text(flk!("subsettings_reset").into()); translation.set_subsettings_exif_ignored_tags_text(flk!("subsettings_exif_ignored_tags_text").into()); translation.set_subsettings_exif_ignored_tags_hint_text(flk!("subsettings_exif_ignored_tags_hint_text").into()); @@ -282,6 +303,9 @@ fn translate_items(app: &MainWindow) { translation.set_optimize_limit_video_size_text(flk!("optimize_limit_video_size_text").into()); translation.set_optimize_max_width_text(flk!("optimize_max_width_text").into()); translation.set_optimize_max_height_text(flk!("optimize_max_height_text").into()); + translation.set_optimize_crf_hint_text(flk!("optimize_crf_hint").into()); + translation.set_optimize_noise_reduction_hint_text(flk!("optimize_noise_reduction_hint").into()); + translation.set_optimize_noise_reduction_strength_hint_text(flk!("optimize_noise_reduction_strength_hint").into()); translation.set_hardlink_button_text(flk!("hardlink_button_text").into()); translation.set_hardlink_text(flk!("hardlink_text").into()); translation.set_hardlink_confirmation_text(flk!("hardlink_confirmation_text").into()); @@ -392,6 +416,38 @@ fn translate_items(app: &MainWindow) { translation.set_popup_custom_case_sensitive_text(flk!("popup_custom_case_sensitive_text").into()); translation.set_popup_custom_leave_one_in_group_text(flk!("popup_custom_leave_one_in_group_text").into()); + translation.set_compare_button_text(flk!("compare_button_text").into()); + translation.set_compare_back_text(flk!("compare_back_text").into()); + translation.set_compare_prev_group_text(flk!("compare_prev_group_text").into()); + translation.set_compare_next_group_text(flk!("compare_next_group_text").into()); + translation.set_compare_swap_text(flk!("compare_swap_text").into()); + translation.set_compare_info_text(flk!("compare_info_text").into()); + translation.set_compare_diff_text(flk!("compare_diff_text").into()); + translation.set_compare_loading_title_text(flk!("compare_loading_title_text").into()); + translation.set_compare_cancel_text(flk!("compare_cancel_text").into()); + translation.set_compare_resolution_mismatch_text(flk!("compare_resolution_mismatch_text").into()); + translation.set_compare_computing_diff_text(flk!("compare_computing_diff_text").into()); + translation.set_compare_info_file_name_text(flk!("compare_info_file_name_text").into()); + translation.set_compare_info_path_text(flk!("compare_info_path_text").into()); + translation.set_compare_info_size_text(flk!("compare_info_size_text").into()); + translation.set_compare_info_resolution_text(flk!("compare_info_resolution_text").into()); + translation.set_compare_info_modification_date_text(flk!("compare_info_modification_date_text").into()); + translation.set_compare_loading_images_text(flk!("compare_loading_images_text").into()); + translation.set_compare_cancelling_text(flk!("compare_cancelling_text").into()); + + translation.set_context_menu_open_item_text(flk!("context_menu_open_item_text").into()); + translation.set_context_menu_open_parent_text(flk!("context_menu_open_parent_text").into()); + translation.set_context_menu_remove_from_results_text(flk!("context_menu_remove_from_results_text").into()); + translation.set_context_menu_remove_all_from_folder_text(flk!("context_menu_remove_all_from_folder_text").into()); + translation.set_context_menu_remove_all_from_folder_recursive_text(flk!("context_menu_remove_all_from_folder_recursive_text").into()); + translation.set_context_menu_select_all_from_folder_text(flk!("context_menu_select_all_from_folder_text").into()); + translation.set_context_menu_select_all_from_folder_recursive_text(flk!("context_menu_select_all_from_folder_recursive_text").into()); + translation.set_context_menu_exclude_parent_folder_text(flk!("context_menu_exclude_parent_folder_text").into()); + translation.set_context_menu_exclude_item_text(flk!("context_menu_exclude_item_text").into()); + translation.set_context_menu_copy_file_name_text(flk!("context_menu_copy_file_name_text").into()); + translation.set_context_menu_copy_parent_folder_path_text(flk!("context_menu_copy_parent_folder_path_text").into()); + translation.set_context_menu_copy_full_path_text(flk!("context_menu_copy_full_path_text").into()); + let tools_model: [(SharedString, ActiveTab); TOOLS_NUMBER] = [ (flk!("tool_duplicate_files").into(), ActiveTab::DuplicateFiles), (flk!("tool_empty_folders").into(), ActiveTab::EmptyFolders), diff --git a/krokiet/src/file_actions/connect_optimize_video.rs b/krokiet/src/file_actions/connect_optimize_video.rs index ab3265936..381dc9fdb 100644 --- a/krokiet/src/file_actions/connect_optimize_video.rs +++ b/krokiet/src/file_actions/connect_optimize_video.rs @@ -5,7 +5,7 @@ use std::thread; use crossbeam_channel::Sender; use czkawka_core::common::progress_data::ProgressData; -use czkawka_core::tools::video_optimizer::{VideoCodec, VideoCropSingleFixParams, VideoCroppingMechanism, VideoTranscodeFixParams}; +use czkawka_core::tools::video_optimizer::{NoiseReductionMethod, VideoCodec, VideoCropSingleFixParams, VideoCroppingMechanism, VideoTranscodeFixParams}; use slint::{ComponentHandle, Weak}; use crate::common::IntDataVideoOptimizer; @@ -55,7 +55,8 @@ pub(crate) fn connect_optimize_video(app: &MainWindow, progress_sender: Sender

().get_active_tab(); let settings = app.global::(); - let codec = collect_combo_box_settings(&app).video_optimizer_video_codec.value; + let combo = collect_combo_box_settings(&app); + let codec = combo.video_optimizer_video_codec.value; let fail_if_bigger = settings.get_popup_reencode_video_fail_if_bigger(); let overwrite_files = settings.get_popup_reencode_video_overwrite_files(); let video_quality = settings.get_popup_reencode_video_quality(); @@ -70,6 +71,11 @@ pub(crate) fn connect_optimize_video(app: &MainWindow, progress_sender: Sender

0 { max_width } else { 1920 }; let max_height = if max_height > 0 { max_height } else { 1920 }; + let noise_reduction = combo.video_optimizer_noise_reduction.value; + let noise_reduction_strength = settings.get_video_optimizer_sub_noise_reduction_strength().round() as u32; + let use_custom_command = settings.get_video_optimizer_sub_use_custom_command(); + let custom_ffmpeg_command = use_custom_command.then(|| settings.get_video_optimizer_sub_custom_command().to_string()); + let processor = ModelProcessor::new(active_tab); processor.optimize_selected_videos( @@ -83,11 +89,53 @@ pub(crate) fn connect_optimize_video(app: &MainWindow, progress_sender: Sender

().on_generate_video_optimizer_template(move || { + let app = a3.upgrade().expect("Failed to upgrade app :("); + let settings = app.global::(); + let combo = collect_combo_box_settings(&app); + let codec = combo.video_optimizer_video_codec.value; + let quality = settings.get_popup_reencode_video_quality().round() as u32; + let nr = combo.video_optimizer_noise_reduction.value; + let nr_strength = settings.get_video_optimizer_sub_noise_reduction_strength().round() as u32; + let limit = settings.get_popup_reencode_video_limit_video_size(); + let max_w = settings.get_popup_reencode_video_max_width().parse::().unwrap_or(1920); + let max_h = settings.get_popup_reencode_video_max_height().parse::().unwrap_or(1920); + + let mut parts: Vec = vec![ + "ffmpeg".into(), + "-i".into(), + "{PATH}".into(), + "-nostdin".into(), + "-c:v".into(), + codec.as_str().into(), + "-crf".into(), + quality.to_string(), + ]; + let mut filters: Vec = Vec::new(); + if limit { + filters.push(format!("scale='min({max_w},iw):min({max_h},ih):force_original_aspect_ratio=decrease'")); + } + if let Some(f) = nr.to_ffmpeg_filter(nr_strength) { + filters.push(f); + } + if !filters.is_empty() { + parts.extend(["-vf".into(), filters.join(",")]); + } + parts.extend(["-c:a".into(), "copy".into()]); + + settings.set_video_optimizer_sub_custom_command(parts.join(" ").into()); + }); } impl ModelProcessor { + #[expect(clippy::too_many_arguments)] fn optimize_selected_videos( self, progress_sender: Sender, @@ -100,6 +148,9 @@ impl ModelProcessor { limit_video_size: bool, max_width: u32, max_height: u32, + noise_reduction: NoiseReductionMethod, + noise_reduction_strength: u32, + custom_ffmpeg_command: Option, ) { let codec_str = requested_video_codec.as_ffprobe_codec_name().to_string(); @@ -114,8 +165,8 @@ impl ModelProcessor { let stop_flag_clone = stop_flag.clone(); let optimize_fnc = move |data: &SimplerSingleMainListModel| { let file_codec = &data.val_str[codec_idx]; - if codec_str == *file_codec { - return Ok(()); // No need to transcode if codec is the same + if custom_ffmpeg_command.is_none() && codec_str == *file_codec { + return Ok(()); // No need to transcode if codec is the same and no custom command } let full_path = format!("{}{MAIN_SEPARATOR}{}", data.val_str[path_idx], data.val_str[name_idx]); @@ -126,7 +177,7 @@ impl ModelProcessor { &stop_flag_clone, &full_path, original_size, - VideoTranscodeFixParams { + &VideoTranscodeFixParams { codec: requested_video_codec, quality: target_quality, fail_if_not_smaller: fail_if_bigger, @@ -134,6 +185,9 @@ impl ModelProcessor { limit_video_size, max_width, max_height, + noise_reduction: noise_reduction.clone(), + noise_reduction_strength, + custom_ffmpeg_command: custom_ffmpeg_command.clone(), }, ) }; @@ -216,12 +270,12 @@ impl ModelProcessor { } #[cfg(not(test))] -fn optimize_single_video(stop_flag: &Arc, video_path: &str, original_size: u64, transcode_params: VideoTranscodeFixParams) -> Result<(), String> { +fn optimize_single_video(stop_flag: &Arc, video_path: &str, original_size: u64, transcode_params: &VideoTranscodeFixParams) -> Result<(), String> { czkawka_core::tools::video_optimizer::core::process_video(stop_flag, video_path, original_size, transcode_params) } #[cfg(test)] -fn optimize_single_video(_stop_flag: &Arc, video_path: &str, _original_size: u64, _transcode_params: VideoTranscodeFixParams) -> Result<(), String> { +fn optimize_single_video(_stop_flag: &Arc, video_path: &str, _original_size: u64, _transcode_params: &VideoTranscodeFixParams) -> Result<(), String> { if video_path.contains("test_error") { return Err(format!("Test error for item: {video_path}")); } diff --git a/krokiet/src/main.rs b/krokiet/src/main.rs index 06e910c28..d4cb1cb85 100644 --- a/krokiet/src/main.rs +++ b/krokiet/src/main.rs @@ -26,6 +26,7 @@ use slint::VecModel; use crate::clear_outdated_video_thumbnails::clear_outdated_video_thumbnails; use crate::connect_clean_cache::connect_clean_cache; +use crate::connect_compare::connect_compare; use crate::connect_directories_changes::connect_add_remove_directories; use crate::connect_open::connect_open_items; use crate::connect_progress_receiver::connect_progress_gathering; @@ -52,6 +53,7 @@ mod audio_player; mod clear_outdated_video_thumbnails; mod common; mod connect_clean_cache; +mod connect_compare; mod connect_directories_changes; mod connect_open; mod connect_progress_receiver; @@ -141,6 +143,7 @@ fn main() { connect_progress_gathering(&app, progress_receiver); connect_add_remove_directories(&app); connect_show_preview(&app, Arc::clone(&shared_models)); + connect_compare(&app, Arc::clone(&shared_models)); connect_translations(&app); connect_changing_settings_preset(&app); connect_select(&app, &shared_models); diff --git a/krokiet/src/set_initial_gui_info.rs b/krokiet/src/set_initial_gui_info.rs index f697d6f3d..cbbc43946 100644 --- a/krokiet/src/set_initial_gui_info.rs +++ b/krokiet/src/set_initial_gui_info.rs @@ -23,6 +23,7 @@ pub(crate) fn set_initial_gui_infos(app: &MainWindow) { video_optimizer_crop_type, video_optimizer_mode, video_optimizer_video_codec, + video_optimizer_noise_reduction, } = &*collected_items; let languages_display_names = StringComboBoxItems::get_display_names(languages); @@ -37,6 +38,7 @@ pub(crate) fn set_initial_gui_infos(app: &MainWindow) { let video_optimizer_crop_type_display_names = StringComboBoxItems::get_display_names(video_optimizer_crop_type); let video_optimizer_mode_display_names = StringComboBoxItems::get_display_names(video_optimizer_mode); let video_optimizer_video_codec_display_names = StringComboBoxItems::get_display_names(video_optimizer_video_codec); + let video_optimizer_noise_reduction_display_names = StringComboBoxItems::get_display_names(video_optimizer_noise_reduction); // Currently this is not possible due to slint bug - after 11.0 version I will try to fight with this - https://github.com/slint-ui/slint/issues/7632 // For now I just assert that names will be in sync with slint files @@ -99,4 +101,8 @@ pub(crate) fn set_initial_gui_infos(app: &MainWindow) { settings.get_video_optimizer_sub_video_codec_config().iter().collect::>(), video_optimizer_video_codec_display_names ); + assert_eq!( + settings.get_video_optimizer_sub_noise_reduction().iter().collect::>(), + video_optimizer_noise_reduction_display_names + ); } diff --git a/krokiet/src/settings/combo_box.rs b/krokiet/src/settings/combo_box.rs index 470e8e9e9..3412210a2 100644 --- a/krokiet/src/settings/combo_box.rs +++ b/krokiet/src/settings/combo_box.rs @@ -4,7 +4,7 @@ use std::sync::{Arc, Mutex, MutexGuard}; use czkawka_core::common::model::{CheckingMethod, HashType}; use czkawka_core::re_exported::{Cropdetect, HashAlg}; use czkawka_core::tools::big_file::SearchMode; -use czkawka_core::tools::video_optimizer::{VideoCodec, VideoCroppingMechanism, VideoOptimizerMode}; +use czkawka_core::tools::video_optimizer::{NoiseReductionMethod, VideoCodec, VideoCroppingMechanism, VideoOptimizerMode}; use image::imageops::FilterType; use log::warn; use slint::SharedString; @@ -34,6 +34,7 @@ pub struct StringComboBoxItems { pub video_optimizer_crop_type: Vec>, pub video_optimizer_mode: Vec>, pub video_optimizer_video_codec: Vec>, + pub video_optimizer_noise_reduction: Vec>, } pub static STRING_COMBO_BOX_ITEMS: std::sync::LazyLock>> = std::sync::LazyLock::new(|| { @@ -125,6 +126,9 @@ impl StringComboBoxItems { ("av1", "AV1", VideoCodec::Av1), ]); + let video_optimizer_noise_reduction = + Self::convert_to_combobox_items(&[("none", "None", NoiseReductionMethod::None), ("hqdn3d", "hqdn3d (fast)", NoiseReductionMethod::Hqdn3d)]); + Self { languages, hash_size, @@ -138,6 +142,7 @@ impl StringComboBoxItems { video_optimizer_crop_type, video_optimizer_mode, video_optimizer_video_codec, + video_optimizer_noise_reduction, } } diff --git a/krokiet/src/settings/mod.rs b/krokiet/src/settings/mod.rs index 24996878d..6271aa6e9 100644 --- a/krokiet/src/settings/mod.rs +++ b/krokiet/src/settings/mod.rs @@ -354,6 +354,12 @@ pub(crate) fn set_combobox_custom_settings_items(settings: &Settings, custom_set let (idx, display_names) = StringComboBoxItems::get_item_and_idx_from_config_name(&custom_settings.video_optimizer_video_codec, &collected_items.video_optimizer_video_codec); settings.set_video_optimizer_sub_video_codec_index(idx as i32); settings.set_video_optimizer_sub_video_codec_value(display_names[idx].clone()); + + // Video Optimizer noise reduction + let (idx, display_names) = + StringComboBoxItems::get_item_and_idx_from_config_name(&custom_settings.video_optimizer_noise_reduction, &collected_items.video_optimizer_noise_reduction); + settings.set_video_optimizer_sub_noise_reduction_index(idx as i32); + settings.set_video_optimizer_sub_noise_reduction_value(display_names[idx].clone()); } pub(crate) fn set_settings_to_gui(app: &MainWindow, custom_settings: &SettingsCustom, base_settings: &BasicSettings, cli_args: Option) { @@ -476,6 +482,9 @@ pub(crate) fn set_settings_to_gui(app: &MainWindow, custom_settings: &SettingsCu settings.set_video_optimizer_sub_max_width(custom_settings.video_optimizer_max_width.to_string().into()); settings.set_video_optimizer_sub_max_height(custom_settings.video_optimizer_max_height.to_string().into()); settings.set_video_optimizer_sub_image_threshold(custom_settings.video_optimizer_image_threshold as f32); + settings.set_video_optimizer_sub_noise_reduction_strength(custom_settings.video_optimizer_noise_reduction_strength.clamp(1, 10) as f32); + settings.set_video_optimizer_sub_use_custom_command(custom_settings.video_optimizer_use_custom_command); + settings.set_video_optimizer_sub_custom_command(custom_settings.video_optimizer_custom_command.clone().into()); settings.set_ignored_exif_tags(custom_settings.ignored_exif_tags.clone().into()); @@ -627,7 +636,8 @@ pub(crate) fn collect_settings(app: &MainWindow) -> SettingsCustom { let video_optimizer_mode = combo_box_items.video_optimizer_mode.config_name.clone(); let video_optimizer_crop_type = combo_box_items.video_optimizer_crop_type.config_name.clone(); - let video_optimizer_video_codec = combo_box_items.video_optimizer_video_codec.config_name; + let video_optimizer_video_codec = combo_box_items.video_optimizer_video_codec.config_name.clone(); + let video_optimizer_noise_reduction = combo_box_items.video_optimizer_noise_reduction.config_name; let video_optimizer_excluded_codecs = settings.get_video_optimizer_sub_excluded_codecs().to_string(); let video_optimizer_black_pixel_threshold = settings .get_video_optimizer_sub_black_pixel_threshold() @@ -656,6 +666,9 @@ pub(crate) fn collect_settings(app: &MainWindow) -> SettingsCustom { let video_optimizer_max_width = settings.get_video_optimizer_sub_max_width().parse::().unwrap_or(1920); let video_optimizer_max_height = settings.get_video_optimizer_sub_max_height().parse::().unwrap_or(1920); let video_optimizer_image_threshold = settings.get_video_optimizer_sub_image_threshold().round() as u8; + let video_optimizer_noise_reduction_strength = settings.get_video_optimizer_sub_noise_reduction_strength().round() as u32; + let video_optimizer_use_custom_command = settings.get_video_optimizer_sub_use_custom_command(); + let video_optimizer_custom_command = settings.get_video_optimizer_sub_custom_command().to_string(); let ignored_exif_tags = settings.get_ignored_exif_tags().to_string(); @@ -758,6 +771,10 @@ pub(crate) fn collect_settings(app: &MainWindow) -> SettingsCustom { video_optimizer_max_width, video_optimizer_max_height, video_optimizer_image_threshold, + video_optimizer_noise_reduction, + video_optimizer_noise_reduction_strength, + video_optimizer_use_custom_command, + video_optimizer_custom_command, ignored_exif_tags, column_sizes, popup_move_preserve_folder_structure: settings.get_popup_move_preserve_folder_structure(), @@ -791,6 +808,7 @@ pub(crate) fn collect_combo_box_settings(app: &MainWindow) -> ComboBoxItems { let video_optimizer_crop_type_idx = settings.get_video_optimizer_sub_crop_type_index() as usize; let video_optimizer_mode_idx = settings.get_video_optimizer_sub_mode_index() as usize; let video_optimizer_video_codec_idx = settings.get_video_optimizer_sub_video_codec_index() as usize; + let video_optimizer_noise_reduction_idx = settings.get_video_optimizer_sub_noise_reduction_index() as usize; ComboBoxItems { language: collected_combo_boxes.languages[language_idx].clone(), @@ -805,6 +823,7 @@ pub(crate) fn collect_combo_box_settings(app: &MainWindow) -> ComboBoxItems { video_optimizer_crop_type: collected_combo_boxes.video_optimizer_crop_type[video_optimizer_crop_type_idx].clone(), video_optimizer_mode: collected_combo_boxes.video_optimizer_mode[video_optimizer_mode_idx].clone(), video_optimizer_video_codec: collected_combo_boxes.video_optimizer_video_codec[video_optimizer_video_codec_idx].clone(), + video_optimizer_noise_reduction: collected_combo_boxes.video_optimizer_noise_reduction[video_optimizer_noise_reduction_idx].clone(), } } diff --git a/krokiet/src/settings/model.rs b/krokiet/src/settings/model.rs index 92af16ea1..cddd1d1ec 100644 --- a/krokiet/src/settings/model.rs +++ b/krokiet/src/settings/model.rs @@ -7,7 +7,7 @@ use czkawka_core::common::model::{CheckingMethod, HashType}; use czkawka_core::re_exported::{Cropdetect, HashAlg}; use czkawka_core::tools::big_file::SearchMode; use czkawka_core::tools::similar_videos::{DEFAULT_SKIP_FORWARD_AMOUNT, DEFAULT_VID_HASH_DURATION, DEFAULT_VIDEO_PERCENTAGE_FOR_THUMBNAIL}; -use czkawka_core::tools::video_optimizer::{VideoCodec, VideoCroppingMechanism, VideoOptimizerMode}; +use czkawka_core::tools::video_optimizer::{NoiseReductionMethod, VideoCodec, VideoCroppingMechanism, VideoOptimizerMode}; use home::home_dir; use image::imageops::FilterType; use serde::{Deserialize, Serialize}; @@ -197,6 +197,14 @@ pub struct SettingsCustom { pub video_optimizer_max_height: u32, #[serde(default = "default_video_optimizer_image_threshold")] pub video_optimizer_image_threshold: u8, + #[serde(default = "default_video_optimizer_noise_reduction")] + pub video_optimizer_noise_reduction: String, + #[serde(default = "default_video_optimizer_noise_reduction_strength")] + pub video_optimizer_noise_reduction_strength: u32, + #[serde(default)] + pub video_optimizer_use_custom_command: bool, + #[serde(default)] + pub video_optimizer_custom_command: String, #[serde(default = "default_ignored_exif_tags")] pub ignored_exif_tags: String, #[serde(default)] @@ -247,6 +255,7 @@ pub struct ComboBoxItems { pub video_optimizer_crop_type: StringComboBoxItem, pub video_optimizer_mode: StringComboBoxItem, pub video_optimizer_video_codec: StringComboBoxItem, + pub video_optimizer_noise_reduction: StringComboBoxItem, } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -438,6 +447,12 @@ pub(crate) fn default_video_optimizer_max_height() -> u32 { pub(crate) fn default_video_optimizer_image_threshold() -> u8 { 1 } +pub(crate) fn default_video_optimizer_noise_reduction() -> String { + "none".to_string() +} +pub(crate) fn default_video_optimizer_noise_reduction_strength() -> u32 { + 5 +} pub(crate) fn default_manual_application_scale() -> f32 { 1.0 } diff --git a/krokiet/ui/action_buttons.slint b/krokiet/ui/action_buttons.slint index f492098eb..8ec38c4f5 100644 --- a/krokiet/ui/action_buttons.slint +++ b/krokiet/ui/action_buttons.slint @@ -3,6 +3,7 @@ import { ActiveTab, BottomPanelVisibility, PopupRequest, SingleMainListModel } f import { GuiState } from "gui_state.slint"; import { Translations } from "translations.slint"; import { Settings } from "settings.slint"; +import { Callabler } from "callabler.slint"; export component VisibilityButton inherits Button { in-out property button_visibility; @@ -219,6 +220,17 @@ export component ActionButtons inherits HorizontalLayout { } } + if lists_enabled && GuiState.active_tab == ActiveTab.SimilarImages && results_available: compare_button := Button { + height: parent.height; + enabled: base_buttons_may_be_available && self.visible; + text: self.visible && Settings.show_only_icons ? "" : Translations.compare_button_text; + icon: @image-url("../icons/krokiet_compare.svg"); + colorize-icon: true; + clicked => { + Callabler.compare_open(); + } + } + if lists_enabled && GuiState.tool_with_groups: hardlink_button := Button { height: parent.height; enabled: base_buttons_may_be_available && self.visible && checked_anything; diff --git a/krokiet/ui/callabler.slint b/krokiet/ui/callabler.slint index ab4cffc7c..56d13549f 100644 --- a/krokiet/ui/callabler.slint +++ b/krokiet/ui/callabler.slint @@ -19,6 +19,18 @@ export global Callabler { callback row_open_item_with_index(int); callback row_open_parent_item_with_index(int); + // Context menu actions + callback row_remove_from_results(int); + callback row_remove_all_from_folder(int); + callback row_remove_all_from_folder_recursive(int); + callback row_select_all_from_folder(int); + callback row_select_all_from_folder_recursive(int); + callback row_exclude_parent_folder(int); + callback row_exclude_item(int); + callback row_copy_file_name(int); + callback row_copy_parent_folder_path(int); + callback row_copy_full_path(int); + // Right click or middle click opener callback open_item(string); callback open_parent(string); @@ -69,4 +81,18 @@ export global Callabler { } callback change_sort_column_mode(SortColumnMode, int); + + // Image Compare mode + callback compare_open(); + callback compare_set_left(int); + callback compare_set_right(int); + callback compare_toggle_checkbox(int); + callback compare_next_group(); + callback compare_prev_group(); + callback compare_swap(); + callback compare_cancel_load(); + callback compare_compute_diff(); + + // Video optimizer + callback generate_video_optimizer_template(); } diff --git a/krokiet/ui/color_palette.slint b/krokiet/ui/color_palette.slint index 7eeaa4451..317f3b2a2 100644 --- a/krokiet/ui/color_palette.slint +++ b/krokiet/ui/color_palette.slint @@ -25,6 +25,13 @@ export global ColorPalette { in-out property hint_color: Settings.dark_theme ? #888888 : #888888; + in-out property compare_left_value_color: Settings.dark_theme ? #6699cc : #224488; + in-out property compare_right_value_color: Settings.dark_theme ? #cc9966 : #885522; + in-out property compare_divider_color: Settings.dark_theme ? #444444 : #aaaaaa; + in-out property compare_info_background: Settings.dark_theme ? #222222 : #d8d8d8; + in-out property compare_info_border: Settings.dark_theme ? #444444 : #bbbbbb; + in-out property compare_loading_card_background: Settings.dark_theme ? #2a2a2a : #f4f4f4; + public pure function get_listview_color(selected: bool, hovered: bool) -> color { if (selected) { return hovered ? self.list_view_item_selected_hovered_color : self.list_view_item_selected_color; diff --git a/krokiet/ui/common.slint b/krokiet/ui/common.slint index 0c4cb2c76..b4a84cbe4 100644 --- a/krokiet/ui/common.slint +++ b/krokiet/ui/common.slint @@ -138,3 +138,16 @@ export struct CacheCleaningResult { errors_count: int, errors: string, } + +export struct CompareImageData { + path: string, + dir: string, + name: string, + size: string, + resolution: string, + modification_date: string, + similarity: string, + checked: bool, + thumbnail: image, + flat_idx: int, +} diff --git a/krokiet/ui/gui_state.slint b/krokiet/ui/gui_state.slint index bc6a2a405..af77d00a3 100644 --- a/krokiet/ui/gui_state.slint +++ b/krokiet/ui/gui_state.slint @@ -1,4 +1,4 @@ -import { ActiveTab, BottomPanelVisibility, CacheCleaningProgress, CacheCleaningResult, CustomSelectColumnModel, SelectMode, SelectModel, SortMode, SortModel } from "common.slint"; +import { ActiveTab, BottomPanelVisibility, CacheCleaningProgress, CacheCleaningResult, CompareImageData, CustomSelectColumnModel, SelectMode, SelectModel, SortMode, SortModel } from "common.slint"; import { Translations } from "translations.slint"; // State Gui state that shows the current state of the GUI @@ -104,6 +104,25 @@ export global GuiState { in-out property <[int]> video_optimizer_data_idx: [2, 1, 8, -1]; in-out property <[int]> bad_names_data_idx: [2, 1, -1, -1]; + // Image Compare mode state + in-out property compare_visible: false; + in-out property <[CompareImageData]> compare_images: []; + in-out property compare_left_idx: 0; + in-out property compare_right_idx: 1; + in-out property compare_left_image; + in-out property compare_right_image; + // Flat index of the header row for the currently displayed group (for group navigation) + in-out property compare_current_group_header_flat_idx: -1; + + // Loading overlay: shown while thumbnails are being prepared + in-out property compare_loading: false; + in-out property compare_cancelling: false; + in-out property compare_loading_current: 0; + in-out property compare_loading_total: 0; + + // Pixel-diff image (computed on demand in diff mode) + in-out property compare_diff_image; + in-out property file_dialog_open: false; in-out property cache_cleaning_is_cleaning: false; diff --git a/krokiet/ui/image_compare.slint b/krokiet/ui/image_compare.slint new file mode 100644 index 000000000..8d12a7b8a --- /dev/null +++ b/krokiet/ui/image_compare.slint @@ -0,0 +1,437 @@ +import { Button, ScrollView } from "std-widgets.slint"; +import { ColorPalette } from "color_palette.slint"; +import { FontSizes } from "fonts.slint"; +import { GuiState } from "gui_state.slint"; +import { Callabler } from "callabler.slint"; +import { Preview } from "preview.slint"; +import { Settings } from "settings.slint"; +import { Translations } from "translations.slint"; + +component CompareInfoBar inherits Rectangle { + in property l_name; + in property l_path; + in property l_size; + in property l_res; + in property l_mod_date; + in property r_name; + in property r_path; + in property r_size; + in property r_res; + in property r_mod_date; + + // Hidden off-screen Text elements to measure the natural width of each label + // so the middle column automatically adapts to the current language + lbl_file_name := Text { x: -10000px; y: -10000px; height: 0; font-size: FontSizes.small; text: Translations.compare_info_file_name_text; } + lbl_path := Text { x: -10000px; y: -10000px; height: 0; font-size: FontSizes.small; text: Translations.compare_info_path_text; } + lbl_size := Text { x: -10000px; y: -10000px; height: 0; font-size: FontSizes.small; text: Translations.compare_info_size_text; } + lbl_resolution := Text { x: -10000px; y: -10000px; height: 0; font-size: FontSizes.small; text: Translations.compare_info_resolution_text; } + lbl_mod_date := Text { x: -10000px; y: -10000px; height: 0; font-size: FontSizes.small; text: Translations.compare_info_modification_date_text; } + + property middle_col_width: + max(lbl_file_name.preferred-width, + max(lbl_path.preferred-width, + max(lbl_size.preferred-width, + max(lbl_resolution.preferred-width, + lbl_mod_date.preferred-width)))) + 12px; + + background: ColorPalette.compare_info_background; + border-radius: 4px; + border-width: 1px; + border-color: ColorPalette.compare_info_border; + + HorizontalLayout { + padding: 6px; + spacing: 0px; + + Rectangle { + horizontal-stretch: 1.0; + clip: true; + VerticalLayout { + x: 0; y: 0; + width: parent.width; + spacing: 2px; + padding-right: 8px; + Text { height: 18px; text: l_name; font-size: FontSizes.small; color: ColorPalette.compare_left_value_color; horizontal-alignment: right; vertical-alignment: center; overflow: elide; } + Text { height: 18px; text: l_path; font-size: FontSizes.small; color: ColorPalette.compare_left_value_color; horizontal-alignment: right; vertical-alignment: center; overflow: elide; } + Text { height: 18px; text: l_size; font-size: FontSizes.small; color: ColorPalette.compare_left_value_color; horizontal-alignment: right; vertical-alignment: center; overflow: elide; } + Text { height: 18px; text: l_res; font-size: FontSizes.small; color: ColorPalette.compare_left_value_color; horizontal-alignment: right; vertical-alignment: center; overflow: elide; } + Text { height: 18px; text: l_mod_date; font-size: FontSizes.small; color: ColorPalette.compare_left_value_color; horizontal-alignment: right; vertical-alignment: center; overflow: elide; } + } + } + + Rectangle { width: 1px; background: ColorPalette.compare_divider_color; } + + VerticalLayout { + width: middle_col_width; + spacing: 2px; + padding-left: 6px; + padding-right: 6px; + Text { height: 18px; text: Translations.compare_info_file_name_text; font-size: FontSizes.small; color: ColorPalette.hint_color; horizontal-alignment: center; vertical-alignment: center; } + Text { height: 18px; text: Translations.compare_info_path_text; font-size: FontSizes.small; color: ColorPalette.hint_color; horizontal-alignment: center; vertical-alignment: center; } + Text { height: 18px; text: Translations.compare_info_size_text; font-size: FontSizes.small; color: ColorPalette.hint_color; horizontal-alignment: center; vertical-alignment: center; } + Text { height: 18px; text: Translations.compare_info_resolution_text; font-size: FontSizes.small; color: ColorPalette.hint_color; horizontal-alignment: center; vertical-alignment: center; } + Text { height: 18px; text: Translations.compare_info_modification_date_text; font-size: FontSizes.small; color: ColorPalette.hint_color; horizontal-alignment: center; vertical-alignment: center; } + } + + Rectangle { width: 1px; background: ColorPalette.compare_divider_color; } + + Rectangle { + horizontal-stretch: 1.0; + clip: true; + VerticalLayout { + x: 0; y: 0; + width: parent.width; + spacing: 2px; + padding-left: 8px; + Text { height: 18px; text: r_name; font-size: FontSizes.small; color: ColorPalette.compare_right_value_color; horizontal-alignment: left; vertical-alignment: center; overflow: elide; } + Text { height: 18px; text: r_path; font-size: FontSizes.small; color: ColorPalette.compare_right_value_color; horizontal-alignment: left; vertical-alignment: center; overflow: elide; } + Text { height: 18px; text: r_size; font-size: FontSizes.small; color: ColorPalette.compare_right_value_color; horizontal-alignment: left; vertical-alignment: center; overflow: elide; } + Text { height: 18px; text: r_res; font-size: FontSizes.small; color: ColorPalette.compare_right_value_color; horizontal-alignment: left; vertical-alignment: center; overflow: elide; } + Text { height: 18px; text: r_mod_date; font-size: FontSizes.small; color: ColorPalette.compare_right_value_color; horizontal-alignment: left; vertical-alignment: center; overflow: elide; } + } + } + } +} + +export component ImageCompareOverlay inherits Rectangle { + private property info_visible: false; + private property diff_mode: false; + + private property left_valid: + GuiState.compare_left_idx >= 0 && + GuiState.compare_left_idx < GuiState.compare_images.length; + private property right_valid: + GuiState.compare_right_idx >= 0 && + GuiState.compare_right_idx < GuiState.compare_images.length; + + private property resolution_mismatch: left_valid && right_valid && GuiState.compare_images[GuiState.compare_left_idx].resolution != GuiState.compare_images[GuiState.compare_right_idx].resolution; + + background: Settings.dark_theme ? #181818 : #ebebeb; + + TouchArea { width: parent.width; height: parent.height; } + + property _loading_watch: GuiState.compare_loading; + changed _loading_watch => { + if !_loading_watch && diff_mode { Callabler.compare_compute_diff(); } + } + property _left_idx_watch: GuiState.compare_left_idx; + changed _left_idx_watch => { + if diff_mode { Callabler.compare_compute_diff(); } + } + property _right_idx_watch: GuiState.compare_right_idx; + changed _right_idx_watch => { + if diff_mode { Callabler.compare_compute_diff(); } + } + + if GuiState.compare_loading: Rectangle { + z: 100; + width: parent.width; height: parent.height; + background: Settings.dark_theme ? #181818 : #ebebeb; + + // Block all pointer events so buttons behind the overlay cannot be clicked + TouchArea { width: parent.width; height: parent.height; } + + // Steal keyboard focus so Space / arrow-keys do NOT reach the main + // table's FocusScope while loading is in progress. Without this a + // Space press during thumbnail loading would toggle checked state in + // the main model BEFORE compare_images is rebuilt, producing a stale + // snapshot and eventually a counter underflow crash. + FocusScope { + width: parent.width; height: parent.height; + key-released(event) => { accept } + key-pressed(event) => { accept } + } + + Rectangle { + x: (parent.width - self.width) / 2; + y: (parent.height - self.height) / 2; + width: 300px; height: 180px; + background: ColorPalette.compare_loading_card_background; + border-radius: 8px; + border-width: 1px; + border-color: ColorPalette.compare_divider_color; + + VerticalLayout { + alignment: center; spacing: 10px; padding: 24px; + Text { + text: GuiState.compare_cancelling + ? Translations.compare_cancelling_text + : Translations.compare_loading_title_text; + font-size: FontSizes.header; + color: Settings.dark_theme ? #f0f0f0 : #111111; + horizontal-alignment: center; + } + Text { + text: Translations.compare_loading_images_text; + font-size: FontSizes.normal; + color: ColorPalette.hint_color; + horizontal-alignment: center; + visible: !GuiState.compare_cancelling; + } + Text { + text: GuiState.compare_loading_current + " / " + GuiState.compare_loading_total; + font-size: FontSizes.normal; + color: ColorPalette.hint_color; + horizontal-alignment: center; + } + HorizontalLayout { + alignment: center; + Button { + text: Translations.compare_cancel_text; + enabled: !GuiState.compare_cancelling; + clicked => { + GuiState.compare_visible = false; + Callabler.compare_cancel_load(); + } + } + } + } + } + } + + VerticalLayout { + padding: 5px; spacing: 5px; + + HorizontalLayout { + height: 32px; spacing: 5px; + + Button { + icon: @image-url("../icons/krokiet_compare_prev.svg"); + colorize-icon: true; + text: Translations.compare_prev_group_text; + height: parent.height; + clicked => { Callabler.compare_prev_group(); } + } + + Rectangle { horizontal-stretch: 1.0; } + + Button { + icon: @image-url("../icons/krokiet_compare_swap.svg"); + colorize-icon: true; + text: Translations.compare_swap_text; + height: parent.height; + clicked => { Callabler.compare_swap(); } + } + Button { + icon: @image-url("../icons/krokiet_info.svg"); + colorize-icon: true; + text: Translations.compare_info_text; + height: parent.height; + checked: info_visible; + clicked => { info_visible = !info_visible; } + } + Button { + icon: @image-url("../icons/krokiet_compare_diff.svg"); + colorize-icon: true; + text: Translations.compare_diff_text; + height: parent.height; + checked: diff_mode; + clicked => { + if !diff_mode { Callabler.compare_compute_diff(); } + diff_mode = !diff_mode; + } + } + Button { + icon: @image-url("../icons/krokiet_compare_back.svg"); + colorize-icon: true; + text: Translations.compare_back_text; + height: parent.height; + clicked => { + GuiState.compare_visible = false; + info_visible = false; + diff_mode = false; + } + } + + Rectangle { horizontal-stretch: 1.0; } + + Button { + icon: @image-url("../icons/krokiet_compare_next.svg"); + colorize-icon: true; + text: Translations.compare_next_group_text; + height: parent.height; + clicked => { Callabler.compare_next_group(); } + } + } + + if resolution_mismatch && diff_mode: Rectangle { + height: 22px; + background: #ff880033; + border-radius: 4px; + Text { + text: Translations.compare_resolution_mismatch_text; + color: ColorPalette.compare_right_value_color; + font-size: FontSizes.small; + horizontal-alignment: center; + vertical-alignment: center; + overflow: elide; + } + } + + Rectangle { + vertical-stretch: 1.0; + clip: true; + + if diff_mode: Rectangle { + width: parent.width; height: parent.height; + background: #000000; border-radius: 4px; clip: true; + Image { + width: parent.width; height: parent.height; + source: GuiState.compare_diff_image; + image-fit: ImageFit.contain; + image-rendering: ImageRendering.pixelated; + } + if GuiState.compare_diff_image.width == 0: Text { + text: Translations.compare_computing_diff_text; + color: ColorPalette.hint_color; + font-size: FontSizes.normal; + horizontal-alignment: center; + vertical-alignment: center; + } + } + + if !diff_mode: Rectangle { + width: parent.width; height: parent.height; + + VerticalLayout { + x: 0px; y: 0px; + width: (parent.width - 1px) / 2; height: parent.height; + padding: 2px; + Rectangle { + vertical-stretch: 1.0; + Rectangle { + width: parent.width; height: parent.height; + background: Settings.dark_theme ? #0e0e0e : #e0e0e0; + border-radius: 4px; clip: true; + Preview { + width: parent.width; height: parent.height; + source: GuiState.compare_left_image; + image-fit: ImageFit.contain; + } + } + Button { + x: parent.width - self.width - 6px; + y: parent.height - self.height - 6px; + width: 32px; height: 28px; + text: (left_valid && GuiState.compare_images[GuiState.compare_left_idx].checked) ? "✓" : "□"; + checked: left_valid && GuiState.compare_images[GuiState.compare_left_idx].checked; + clicked => { Callabler.compare_toggle_checkbox(GuiState.compare_left_idx); } + } + } + } + + Rectangle { + x: (parent.width - 1px) / 2; y: 0px; + width: 1px; height: parent.height; + background: ColorPalette.compare_divider_color; + } + + VerticalLayout { + x: (parent.width + 1px) / 2; y: 0px; + width: (parent.width - 1px) / 2; height: parent.height; + padding: 2px; + Rectangle { + vertical-stretch: 1.0; + Rectangle { + width: parent.width; height: parent.height; + background: Settings.dark_theme ? #0e0e0e : #e0e0e0; + border-radius: 4px; clip: true; + Preview { + width: parent.width; height: parent.height; + source: GuiState.compare_right_image; + image-fit: ImageFit.contain; + } + } + Button { + x: 6px; + y: parent.height - self.height - 6px; + width: 32px; height: 28px; + text: (right_valid && GuiState.compare_images[GuiState.compare_right_idx].checked) ? "✓" : "□"; + checked: right_valid && GuiState.compare_images[GuiState.compare_right_idx].checked; + clicked => { Callabler.compare_toggle_checkbox(GuiState.compare_right_idx); } + } + } + } + } + } + + if info_visible && !diff_mode: CompareInfoBar { + vertical-stretch: 0; + + l_name: left_valid ? GuiState.compare_images[GuiState.compare_left_idx].name : ""; + l_path: left_valid ? GuiState.compare_images[GuiState.compare_left_idx].dir : ""; + l_size: left_valid ? GuiState.compare_images[GuiState.compare_left_idx].size : ""; + l_res: left_valid ? GuiState.compare_images[GuiState.compare_left_idx].resolution : ""; + l_mod_date: left_valid ? GuiState.compare_images[GuiState.compare_left_idx].modification_date : ""; + + r_name: right_valid ? GuiState.compare_images[GuiState.compare_right_idx].name : ""; + r_path: right_valid ? GuiState.compare_images[GuiState.compare_right_idx].dir : ""; + r_size: right_valid ? GuiState.compare_images[GuiState.compare_right_idx].size : ""; + r_res: right_valid ? GuiState.compare_images[GuiState.compare_right_idx].resolution : ""; + r_mod_date: right_valid ? GuiState.compare_images[GuiState.compare_right_idx].modification_date : ""; + } + + ScrollView { + height: 155px; vertical-stretch: 0; + viewport-width: GuiState.compare_images.length * 135px; + + HorizontalLayout { + width: GuiState.compare_images.length * 135px; + spacing: 5px; padding: 2px; alignment: start; + + for img[idx] in GuiState.compare_images: VerticalLayout { + width: 125px; spacing: 2px; alignment: start; + + Rectangle { + height: 90px; border-radius: 4px; border-width: 2px; + border-color: + idx == GuiState.compare_left_idx ? ColorPalette.compare_left_value_color : + idx == GuiState.compare_right_idx ? ColorPalette.compare_right_value_color : transparent; + background: Settings.dark_theme ? #222222 : #d4d4d4; + clip: true; + Image { + x: 2px; y: 2px; + width: parent.width - 4px; height: parent.height - 4px; + source: img.thumbnail; + image-fit: ImageFit.contain; + image-rendering: ImageRendering.smooth; + } + } + + HorizontalLayout { + height: 26px; spacing: 2px; + Button { + text: "←"; height: parent.height; horizontal-stretch: 1; + checked: idx == GuiState.compare_left_idx; + enabled: idx != GuiState.compare_right_idx; + clicked => { Callabler.compare_set_left(idx); } + } + Button { + text: "→"; height: parent.height; horizontal-stretch: 1; + checked: idx == GuiState.compare_right_idx; + enabled: idx != GuiState.compare_left_idx; + clicked => { Callabler.compare_set_right(idx); } + } + } + + HorizontalLayout { + height: 22px; spacing: 3px; alignment: center; + Button { + width: 38px; height: parent.height; + text: img.checked ? "✓" : "□"; + checked: img.checked; + clicked => { Callabler.compare_toggle_checkbox(idx); } + } + Text { + text: img.name; + font-size: FontSizes.small; + overflow: elide; + vertical-alignment: center; + horizontal-stretch: 1; + } + } + } + } + } + } +} diff --git a/krokiet/ui/main_window.slint b/krokiet/ui/main_window.slint index 297797096..ef1bfda5e 100644 --- a/krokiet/ui/main_window.slint +++ b/krokiet/ui/main_window.slint @@ -26,6 +26,7 @@ import { PopupCleanExif } from "popup_clean_exif.slint"; import { PopupCleanCache } from "popup_clean_cache.slint"; import { ToolSettings } from "tool_settings.slint"; import { Translations } from "translations.slint"; +import { ImageCompareOverlay } from "image_compare.slint"; export {Settings, Callabler, GuiState, Translations, Palette} @@ -382,6 +383,14 @@ export component MainWindow inherits Window { } } + if GuiState.compare_visible: ImageCompareOverlay { + x: 0; + y: 0; + width: root.width; + height: root.height; + z: 500; + } + if GuiState.file_dialog_open: Rectangle { x: 0; y: 0; diff --git a/krokiet/ui/popup_context_menu.slint b/krokiet/ui/popup_context_menu.slint new file mode 100644 index 000000000..f429e15e6 --- /dev/null +++ b/krokiet/ui/popup_context_menu.slint @@ -0,0 +1,121 @@ +import { Button } from "std-widgets.slint"; +import { ColorPalette } from "color_palette.slint"; +import { Translations } from "translations.slint"; + +export component PopupContextMenu inherits Rectangle { + callback open_item(); + callback open_parent(); + callback remove_from_results(); + callback remove_all_from_folder(); + callback remove_all_from_folder_recursive(); + callback select_all_from_folder(); + callback select_all_from_folder_recursive(); + callback exclude_parent_folder(); + callback exclude_item(); + callback copy_file_name(); + callback copy_parent_folder_path(); + callback copy_full_path(); + + out property popup_menu_width: 230px; + private property menu_item_height: 28px; + private property divider_height: 5px; + + callback show_popup(); + + popup_window := PopupWindow { + width: popup_menu_width; + height: menu_item_height * 12 + divider_height * 4; + close-policy: PopupClosePolicy.close-on-click-outside; + + Rectangle { + width: parent.width; + height: parent.height; + border-radius: 5px; + background: ColorPalette.popup_background; + border-color: ColorPalette.popup_border_color; + border-width: 1px; + + VerticalLayout { + Button { + text: Translations.context_menu_open_item_text; + height: menu_item_height; + clicked => { popup_window.close(); root.open_item(); } + } + Button { + text: Translations.context_menu_open_parent_text; + height: menu_item_height; + clicked => { popup_window.close(); root.open_parent(); } + } + + Rectangle { height: divider_height; background: ColorPalette.popup_border_color.with_alpha(0.25); } + + // ── Remove ──────────────────────────────────────────────── + Button { + text: Translations.context_menu_remove_from_results_text; + height: menu_item_height; + clicked => { popup_window.close(); root.remove_from_results(); } + } + Button { + text: Translations.context_menu_remove_all_from_folder_text; + height: menu_item_height; + clicked => { popup_window.close(); root.remove_all_from_folder(); } + } + Button { + text: Translations.context_menu_remove_all_from_folder_recursive_text; + height: menu_item_height; + clicked => { popup_window.close(); root.remove_all_from_folder_recursive(); } + } + + Rectangle { height: divider_height; background: ColorPalette.popup_border_color.with_alpha(0.25); } + + // ── Select ──────────────────────────────────────────────── + Button { + text: Translations.context_menu_select_all_from_folder_text; + height: menu_item_height; + clicked => { popup_window.close(); root.select_all_from_folder(); } + } + Button { + text: Translations.context_menu_select_all_from_folder_recursive_text; + height: menu_item_height; + clicked => { popup_window.close(); root.select_all_from_folder_recursive(); } + } + + Rectangle { height: divider_height; background: ColorPalette.popup_border_color.with_alpha(0.25); } + + // ── Exclude ─────────────────────────────────────────────── + Button { + text: Translations.context_menu_exclude_parent_folder_text; + height: menu_item_height; + clicked => { popup_window.close(); root.exclude_parent_folder(); } + } + Button { + text: Translations.context_menu_exclude_item_text; + height: menu_item_height; + clicked => { popup_window.close(); root.exclude_item(); } + } + + Rectangle { height: divider_height; background: ColorPalette.popup_border_color.with_alpha(0.25); } + + Button { + text: Translations.context_menu_copy_file_name_text; + height: menu_item_height; + clicked => { popup_window.close(); root.copy_file_name(); } + } + Button { + text: Translations.context_menu_copy_parent_folder_path_text; + height: menu_item_height; + clicked => { popup_window.close(); root.copy_parent_folder_path(); } + } + Button { + text: Translations.context_menu_copy_full_path_text; + height: menu_item_height; + clicked => { popup_window.close(); root.copy_full_path(); } + } + } + } + } + + show_popup() => { + popup_window.show(); + } +} diff --git a/krokiet/ui/popup_optimize.slint b/krokiet/ui/popup_optimize.slint index 6c799aa54..214633e43 100644 --- a/krokiet/ui/popup_optimize.slint +++ b/krokiet/ui/popup_optimize.slint @@ -1,16 +1,19 @@ import { PopupBase } from "popup_base.slint"; import { Translations } from "translations.slint"; -import { CheckBox, ComboBox, LineEdit, Slider } from "std-widgets.slint"; +import { Button, CheckBox, ComboBox, LineEdit, Slider } from "std-widgets.slint"; import { Settings } from "settings.slint"; import { PopupCenteredText } from "popup_centered_text.slint"; +import { ColorPalette } from "color_palette.slint"; +import { FontSizes } from "fonts.slint"; +import { Callabler } from "callabler.slint"; export component PopupReencodeVideo inherits Rectangle { in-out property title_text; callback action_confirmed(); - out property popup_width: 420px; - out property popup_height: 300px; + out property popup_width: 440px; + out property popup_height: 560px; callback show_popup(); popup_window := PopupBase { @@ -54,6 +57,54 @@ export component PopupReencodeVideo inherits Rectangle { } } + Text { + text: Translations.optimize_crf_hint_text; + font-size: FontSizes.small; + color: ColorPalette.hint_color; + wrap: TextWrap.word-wrap; + } + + HorizontalLayout { + spacing: 5px; + Text { text: Translations.subsettings_video_optimizer_noise_reduction_text; vertical_alignment: TextVerticalAlignment.center; } + ComboBox { + model <=> Settings.video_optimizer_sub_noise_reduction; + current_index <=> Settings.video_optimizer_sub_noise_reduction_index; + current_value <=> Settings.video_optimizer_sub_noise_reduction_value; + enabled: !Settings.video_optimizer_sub_use_custom_command; + } + } + + if Settings.video_optimizer_sub_noise_reduction_index != 0: HorizontalLayout { + spacing: 5px; + Text { text: Translations.subsettings_video_optimizer_noise_reduction_strength_text; vertical_alignment: TextVerticalAlignment.center; } + Slider { + minimum: 1; + maximum: 10; + value <=> Settings.video_optimizer_sub_noise_reduction_strength; + enabled: !Settings.video_optimizer_sub_use_custom_command; + } + Text { + text: Math.round(Settings.video_optimizer_sub_noise_reduction_strength) + " / 10"; + vertical_alignment: TextVerticalAlignment.center; + min-width: 40px; + } + } + + if Settings.video_optimizer_sub_noise_reduction_index != 0: Text { + text: Translations.optimize_noise_reduction_strength_hint_text; + font-size: FontSizes.small; + color: ColorPalette.hint_color; + wrap: TextWrap.word-wrap; + } + + Text { + text: Translations.optimize_noise_reduction_hint_text; + font-size: FontSizes.small; + color: ColorPalette.hint_color; + wrap: TextWrap.word-wrap; + } + CheckBox { text: Translations.optimize_fail_if_bigger_text; checked <=> Settings.popup_reencode_video_fail_if_bigger; } CheckBox { text: Translations.optimize_overwrite_files_text; checked <=> Settings.popup_reencode_video_overwrite_files; } @@ -67,6 +118,34 @@ export component PopupReencodeVideo inherits Rectangle { LineEdit { text <=> Settings.popup_reencode_video_max_height; enabled: Settings.popup_reencode_video_limit_video_size; } } + CheckBox { text: Translations.subsettings_video_optimizer_use_custom_command_text; checked <=> Settings.video_optimizer_sub_use_custom_command; } + + if Settings.video_optimizer_sub_use_custom_command: VerticalLayout { + spacing: 5px; + + Text { + text: Translations.subsettings_video_optimizer_custom_command_hint_text; + font-size: FontSizes.small; + color: ColorPalette.hint_color; + wrap: TextWrap.word-wrap; + } + + HorizontalLayout { + spacing: 5px; + + LineEdit { + text <=> Settings.video_optimizer_sub_custom_command; + font-size: FontSizes.normal; + horizontal-stretch: 1.0; + } + + Button { + text: Translations.subsettings_video_optimizer_generate_template_text; + clicked => { Callabler.generate_video_optimizer_template(); } + } + } + } + Rectangle { height: 10px; } } diff --git a/krokiet/ui/selectable_tree_view.slint b/krokiet/ui/selectable_tree_view.slint index 912a06200..1fafadcd2 100644 --- a/krokiet/ui/selectable_tree_view.slint +++ b/krokiet/ui/selectable_tree_view.slint @@ -3,6 +3,7 @@ import { ColorPalette } from "color_palette.slint"; import { SingleMainListModel, SortColumnMode } from "common.slint"; import { Callabler } from "callabler.slint"; import { FontSizes } from "fonts.slint"; +import { PopupContextMenu } from "popup_context_menu.slint"; export component SelectableTableView inherits Rectangle { in property <[string]> columns; @@ -24,6 +25,7 @@ export component SelectableTableView inherits Rectangle { in-out property originalHeightIdx: -1; in-out property start_shift_idx: -1; in-out property last_selected_idx: -1; + private property context_menu_row_idx: -1; out property item_height: 23px; in-out property sort_column_mode: SortColumnMode.None; in-out property sort_column_idx: -1; @@ -123,7 +125,10 @@ export component SelectableTableView inherits Rectangle { if (event.button == PointerEventButton.right && event.kind == PointerEventKind.up) { if (contains_data(idx)) { Callabler.row_reverse_single_unique_item(idx); - Callabler.row_open_parent_item_with_index(idx); + context_menu_row_idx = idx; + context_menu.x = touch_area.mouse-x; + context_menu.y = list_view.y + idx * item_height + list_view.viewport-y; + context_menu.show_popup(); } } else if (event.button == PointerEventButton.left && event.kind == PointerEventKind.up) { if (event.modifiers.control) { @@ -327,6 +332,69 @@ export component SelectableTableView inherits Rectangle { Callabler.load_image_preview("NOT_AVAILABLE.NOT_AVAILABLE", -1, -1, -1, -1, -1, -1); } + context_menu := PopupContextMenu { + open_item() => { + if (context_menu_row_idx != -1) { + Callabler.row_open_item_with_index(context_menu_row_idx); + } + } + open_parent() => { + if (context_menu_row_idx != -1) { + Callabler.row_open_parent_item_with_index(context_menu_row_idx); + } + } + remove_from_results() => { + if (context_menu_row_idx != -1) { + Callabler.row_remove_from_results(context_menu_row_idx); + } + } + remove_all_from_folder() => { + if (context_menu_row_idx != -1) { + Callabler.row_remove_all_from_folder(context_menu_row_idx); + } + } + remove_all_from_folder_recursive() => { + if (context_menu_row_idx != -1) { + Callabler.row_remove_all_from_folder_recursive(context_menu_row_idx); + } + } + select_all_from_folder() => { + if (context_menu_row_idx != -1) { + Callabler.row_select_all_from_folder(context_menu_row_idx); + } + } + select_all_from_folder_recursive() => { + if (context_menu_row_idx != -1) { + Callabler.row_select_all_from_folder_recursive(context_menu_row_idx); + } + } + exclude_parent_folder() => { + if (context_menu_row_idx != -1) { + Callabler.row_exclude_parent_folder(context_menu_row_idx); + } + } + exclude_item() => { + if (context_menu_row_idx != -1) { + Callabler.row_exclude_item(context_menu_row_idx); + } + } + copy_file_name() => { + if (context_menu_row_idx != -1) { + Callabler.row_copy_file_name(context_menu_row_idx); + } + } + copy_parent_folder_path() => { + if (context_menu_row_idx != -1) { + Callabler.row_copy_parent_folder_path(context_menu_row_idx); + } + } + copy_full_path() => { + if (context_menu_row_idx != -1) { + Callabler.row_copy_full_path(context_menu_row_idx); + } + } + } + focus_item := FocusScope { // TODO hack works and not steal first click anymore, but key-released event is not working with it // width: 0px; // Hack to not steal first click from other components - https://github.com/slint-ui/slint/issues/3503 diff --git a/krokiet/ui/settings.slint b/krokiet/ui/settings.slint index 946ffa98e..febe73233 100644 --- a/krokiet/ui/settings.slint +++ b/krokiet/ui/settings.slint @@ -4,7 +4,7 @@ export global Settings { in-out property settings_preset_idx: 0; in-out property <[string]> settings_presets: ["Preset 1", "Preset 2"]; - in-out property <[string]> languages_list: ["English", "Polski (Polish)", "Français (French)", "Italiano (Italian)", "Русский (Russian)", "український (Ukrainian)", "한국어 (Korean)", "Česky (Czech)", "Deutsch (German)", "日本語 (Japanese)", "Português (Portuguese)", "Português Brasileiro (Brazilian Portuguese)", "简体中文 (Simplified Chinese)", "繁體中文 (Traditional Chinese)", "Español (Spanish)", "Norsk (Norwegian)", "Svenska (Swedish)", "العربية (Arabic)", "Български (Bulgarian)", "Ελληνικά (Greek)", "Nederlands (Dutch)", "Română (Romanian)", "Türkçe (Turkish)"]; + in-out property <[string]> languages_list: ["English", "Polski (Polish)", "Français (French)", "Italiano (Italian)", "Русский (Russian)", "український (Ukrainian)", "한국어 (Korean)", "Česky (Czech)", "Deutsch (German)", "日本語 (Japanese)", "Português (Portuguese)", "Português Brasileiro (Brazilian Portuguese)", "简体中文 (Simplified Chinese)", "繁體中文 (Traditional Chinese)", "Español (Spanish)", "Norsk (Norwegian)", "Svenska (Swedish)", "العربية (Arabic)", "Български (Bulgarian)", "Ελληνικά (Greek)", "Nederlands (Dutch)", "Română (Romanian)", "Türkçe (Turkish)", "فارسی (Persian)", "हिंदी (Hindi)", "Bahasa Indonesia (Indonesian)", "Tiếng Việt (Vietnamese)"]; in-out property language_index: 0; in-out property language_value: "English"; @@ -172,6 +172,16 @@ export global Settings { in-out property video_optimizer_sub_max_width: "1920"; in-out property video_optimizer_sub_max_height: "1920"; + // Video noise reduction + in-out property <[string]> video_optimizer_sub_noise_reduction: ["None", "hqdn3d (fast)"]; + in-out property video_optimizer_sub_noise_reduction_index: 0; + in-out property video_optimizer_sub_noise_reduction_value: "none"; + in-out property video_optimizer_sub_noise_reduction_strength: 5; + + // Custom FFmpeg command + in-out property video_optimizer_sub_use_custom_command: false; + in-out property video_optimizer_sub_custom_command: ""; + // Exif Finder in-out property ignored_exif_tags: ""; diff --git a/krokiet/ui/tool_settings.slint b/krokiet/ui/tool_settings.slint index 22a965f12..f2041143c 100644 --- a/krokiet/ui/tool_settings.slint +++ b/krokiet/ui/tool_settings.slint @@ -472,6 +472,7 @@ export component ToolSettings { } } } + } if Settings.video_optimizer_sub_mode_index == 0: VerticalLayout { diff --git a/krokiet/ui/translations.slint b/krokiet/ui/translations.slint index d0ebd06f1..4a1f394ee 100644 --- a/krokiet/ui/translations.slint +++ b/krokiet/ui/translations.slint @@ -143,6 +143,11 @@ export global Translations { in-out property subsettings_video_optimizer_video_codec_text: "Video codec"; in-out property subsettings_video_optimizer_excluded_codecs_text: "Excluded codecs"; in-out property subsettings_video_optimizer_video_quality_text: "Video quality (CRF)"; + in-out property subsettings_video_optimizer_noise_reduction_text: "Noise Reduction"; + in-out property subsettings_video_optimizer_noise_reduction_strength_text: "NR Strength"; + in-out property subsettings_video_optimizer_use_custom_command_text: "Use custom FFmpeg command"; + in-out property subsettings_video_optimizer_custom_command_hint_text: "Command with {PATH} for input file. Output path is appended automatically."; + in-out property subsettings_video_optimizer_generate_template_text: "Generate template"; in-out property subsettings_reset_text: "Reset"; in-out property subsettings_exif_ignored_tags_text: "Ignored tags:"; in-out property subsettings_exif_ignored_tags_hint_text: "Comma-separated list of tags to exclude from scanning (e.g. GPS, Thumbnail). Some tags, such as ImageWidth in TIFF files, are hidden to prevent breaking the image."; @@ -220,6 +225,20 @@ export global Translations { // Popup + // Context menu + in-out property context_menu_open_item_text: "Open Item"; + in-out property context_menu_open_parent_text: "Open Parent Folder"; + in-out property context_menu_remove_from_results_text: "Remove from Results"; + in-out property context_menu_remove_all_from_folder_text: "Remove All from Folder"; + in-out property context_menu_remove_all_from_folder_recursive_text: "Remove All from Folder (recursive)"; + in-out property context_menu_select_all_from_folder_text: "Select All from Folder"; + in-out property context_menu_select_all_from_folder_recursive_text: "Select All from Folder (recursive)"; + in-out property context_menu_exclude_parent_folder_text: "Exclude Parent Folder"; + in-out property context_menu_exclude_item_text: "Exclude Item"; + in-out property context_menu_copy_file_name_text: "Copy File Name"; + in-out property context_menu_copy_parent_folder_path_text: "Copy Parent Folder"; + in-out property context_menu_copy_full_path_text: "Copy Full Path"; + // Popup Save in-out property popup_save_title_text: "Saving results"; in-out property popup_save_message_text: "This will save results to 3 different files"; @@ -257,6 +276,9 @@ export global Translations { in-out property optimize_limit_video_size_text: "Limit video size"; in-out property optimize_max_width_text: "Max width:"; in-out property optimize_max_height_text: "Max height:"; + in-out property optimize_crf_hint_text: "Lower value = better quality. 0 is nearly lossless, 51 is worst. Recommended: 18–28."; + in-out property optimize_noise_reduction_hint_text: "Noise reduction may significantly increase encoding time."; + in-out property optimize_noise_reduction_strength_hint_text: "1 = minimal, 10 = maximum noise reduction."; // Popup hardlink in-out property hardlink_text: "Create hardlinks"; @@ -282,5 +304,24 @@ export global Translations { in-out property popup_clean_cache_error_details_text: "Error details:"; in-out property popup_clean_cache_files_with_errors: "Files with errors:"; + // Image Compare mode + in-out property compare_button_text: "Compare"; + in-out property compare_back_text: "Back"; + in-out property compare_prev_group_text: "Prev Group"; + in-out property compare_next_group_text: "Next Group"; + in-out property compare_swap_text: "Swap"; + in-out property compare_info_text: "Info"; + in-out property compare_diff_text: "Diff"; + in-out property compare_loading_title_text: "Please wait..."; + in-out property compare_cancel_text: "Cancel"; + in-out property compare_resolution_mismatch_text: "Different resolutions - diff results may be inaccurate"; + in-out property compare_computing_diff_text: "Computing diff..."; + in-out property compare_info_file_name_text: "File name"; + in-out property compare_info_path_text: "Path"; + in-out property compare_info_size_text: "Size"; + in-out property compare_info_resolution_text: "Resolution"; + in-out property compare_info_modification_date_text: "Modification date"; + in-out property compare_loading_images_text: "Loading images..."; + in-out property compare_cancelling_text: "Cancelling, please wait..."; } diff --git a/misc/ai_translate/pyproject.toml b/misc/ai_translate/pyproject.toml deleted file mode 100644 index ee4cddce7..000000000 --- a/misc/ai_translate/pyproject.toml +++ /dev/null @@ -1,8 +0,0 @@ -[project] -name = "i18n-ai-translate" -version = "0.1.0" -requires-python = "==3.13.*" -dependencies = [ - "fluent.syntax", - "ollama" -] diff --git a/misc/ai_translate/translate.py b/misc/ai_translate/translate.py index 1c809fae9..9f5909166 100644 --- a/misc/ai_translate/translate.py +++ b/misc/ai_translate/translate.py @@ -53,13 +53,7 @@ def read_ftl_with_structure(file_path: pathlib.Path) -> Tuple[str, Dict[str, str def translate_text(text: str, target_language: str, model: str = DEFAULT_MODEL) -> str: - try: - import ollama # type: ignore - except ImportError: - print("Error: 'ollama' package not installed.") - print(" Install it with: pip install ollama") - print(" Or run: just prepare_translations_deps") - sys.exit(1) + import ollama language_name = LANGUAGE_NAMES.get(target_language, target_language) diff --git a/misc/find_unused_callbacks.py b/misc/find_unused_callbacks.py index 864862e81..87be9ecd2 100644 --- a/misc/find_unused_callbacks.py +++ b/misc/find_unused_callbacks.py @@ -4,6 +4,15 @@ excluded = ["theme_changed"] # Executed from Slint +# Callbacks with platform-specific cfg-gated implementations (e.g. #[cfg(target_os = "android")] +# and #[cfg(not(target_os = "android"))]) produce two matches but are intentionally correct. +allowed_multiple: set[str] = { + "open_path", + "open_parent_folder", + "open_url", + "request_storage_permission", +} + def find_files(root: str, ext: str, folder: str | None) -> list[str]: files = [] @@ -40,18 +49,18 @@ def format_green(text: str) -> str: if len(sys.argv) < 2: - print("Usage: python find_unused_callbacks.py ") + print("Usage: python find_unused_callbacks.py [callabler_path]") sys.exit(1) folder = sys.argv[1] -callabler_path = f"{folder}/ui/callabler.slint" +callabler_path = sys.argv[2] if len(sys.argv) >= 3 else f"{folder}/ui/callabler.slint" if not os.path.exists(callabler_path): print(f"Error: {callabler_path} not found") sys.exit(1) callbacks = extract_callbacks(callabler_path) -print(f"Found {len(callbacks)} callbacks in callabler.slint") +print(f"Found {len(callbacks)} callbacks in {os.path.basename(callabler_path)}") rust_files = find_files(f"{folder}/src", ".rs", None) rust_content = read_files(rust_files) @@ -68,7 +77,7 @@ def format_green(text: str) -> str: if len(matches) == 0: print(f"Error: Callback {format_green(callback)} has NO Rust implementation") errors_found = True - elif len(matches) > 1: + elif len(matches) > 1 and callback not in allowed_multiple: print(f"Error: Callback {format_green(callback)} has {len(matches)} Rust implementations (expected 1)") errors_found = True diff --git a/misc/gen_android_icons.py b/misc/gen_android_icons.py index 9c4df5fa4..d118f0b27 100755 --- a/misc/gen_android_icons.py +++ b/misc/gen_android_icons.py @@ -51,8 +51,6 @@ android:gravity="center" /> """ -# ── renderers ──────────────────────────────────────────────────────────────── - def render_cairosvg(svg: Path, out: Path, size: int) -> None: import cairosvg # type: ignore @@ -92,9 +90,6 @@ def render_inkscape(svg: Path, out: Path, size: int) -> None: raise RuntimeError(f"inkscape failed (exit {result.returncode}):\n{result.stderr}\n{result2.stderr}") -# ── main ───────────────────────────────────────────────────────────────────── - - def main() -> None: script_dir = Path(__file__).resolve().parent project_root = script_dir.parent # misc/../ = czkawka/ diff --git a/misc/pyproject.toml b/misc/pyproject.toml new file mode 100644 index 000000000..cb151529f --- /dev/null +++ b/misc/pyproject.toml @@ -0,0 +1,13 @@ +[project] +name = "test" +version = "1.0.0" +requires-python = "==3.13.*" +dependencies = [ + "ruff==0.15.8", + "mypy==1.19.1", + "ty==0.0.26", + "pandas-stubs", + "fluent.syntax", + "ollama" +] + diff --git a/misc/run_checks.sh b/misc/run_checks.sh index 3223466f5..a950d581d 100644 --- a/misc/run_checks.sh +++ b/misc/run_checks.sh @@ -10,6 +10,7 @@ cmds=( "python3 misc/find_unused_slint_translations.py krokiet" "python3 misc/find_unused_slint_translations.py cedinia" "python3 misc/find_unused_callbacks.py krokiet" + "python3 misc/find_unused_callbacks.py cedinia cedinia/ui/app_state.slint" "python3 misc/find_unused_settings_properties.py krokiet" "python3 misc/find_unused_settings_properties.py cedinia" )