diff --git a/Changelog.txt b/Changelog.txt index a69c5b6bf10..6c91ff11f6c 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,5 +1,77 @@ Subtitle Edit Changelog +5.3.0 (14th of October 2026) + + Subtitle Edit 5.3 collects the work of 26 betas and 4 release candidates. + A summary of the changes since 5.2.0: + +New features: +* Command palette (Ctrl+Shift+K) +* Import subtitles directly from DVD (IFO/VOB) with title picker, fast rip and exact cell timing +* Improve time codes (forced alignment) - re-time a roughly synced subtitle, with a speech-to-text check and waveform preview +* Remux video - video, multi-track audio (with mixing) and soft subtitles, also embedded CEA-608 captions +* Cut video transitions and fades, burn-in for selected lines, and 3D (half side-by-side / top-bottom) burn-in and image export +* Generate background music locally (ACE-Step) +* Compare: merge view, sync points, time tolerance and taking only text or timing per row +* Custom shortcut slots built from steps, AltGr modifier, per-plugin shortcuts and many new shortcuts +* Actor picker, "Set style..." quick pick, and "Shot in"/"Shot out" grid columns +* Reload the subtitle when it is changed outside Subtitle Edit, and "Frame numbers" time code mode +* Taskbar/Dock progress and prevent sleep for long jobs (speech to text, text to speech, burn-in, batch convert) + +Video player and waveform: +* New FFmpeg video player with hardware decoding, audio track picker, real frame stepping and Linux sound +* Experimental mpv Metal video player on macOS, deinterlace setting, and customizable player controls +* Editor-style layout 14 with a track timeline, and layouts 12 and 13 (text box below the video) +* Experimental fast waveform renderer, "Show speech only" waveform, grid color and remembered zoom +* Waveform toolbar: initial text box, move-lines buttons, line breaks and wrapping + +Speech to text: +* Crisp ASR: speaker detection (Sortformer), VAD choice (Silero, FireRedVAD, WebRTC, Whisper-VAD) and "Isolate speech" +* New models: Parakeet Ultra, Phonon-2, ReazonSpeech/Japanese Parakeet, Voxtral F16 and Index-Echo +* OpenAI-compatible API works with vLLM; retry of failed clips on selected lines + +Text to speech: +* New engines: OpenAI-compatible TTS, ElevenLabs v4/v4 Turbo, KugelAudio and Supertonic-3 +* Voice manager with transcripts, voice packs and copying voices between engines +* "Remove original speech", "Speak from current line" and "Play with speech" +* Optional Sidon cleaning of voice-clone reference audio + +Auto-translate and AI: +* New engines: LM Studio advanced and API Route, model browsing, and new llama.cpp models (Index-Translate, TranslatePsy-AfriSLM) +* Translate in place, translate one file into several languages in batch convert, and a no-prompt shortcut +* 22 more languages for the AI engines, MyMemory without an API key, and line breaks kept for ChatGPT/Anthropic +* AI review: prompt templates and reference context + +OCR: +* nOCR: much better accuracy, new Cyrillic database, "Optimize database", and a redesigned trainer +* Find and Replace in the OCR window, remembered pre-processing settings, and a per-language spell check dictionary +* Romanian and Croatian OCR fix lists; better word splitting + +Subtitle formats: +* Read CEA-608/708 closed captions from .ts, .mkv, .mp4, .mxf, .vob, .mpg and .m2v +* New: EZTitles binary (.ezt), PSP UMD Video, HD-DVD sup, Cheetah Caption ASC, ELR Studio and more SE 4 formats opened again +* Transport stream, MP4 caption, CEA-708 and Blu-ray sup timing fixes; PAC code page detection and secondary code page +* ASSA draw: redesigned with layers, shape library, curve tools, SVG import and live preview +* ASSA styles: overwrite/keep both on import, reorder, font collector; Source view syntax highlighting + +Batch convert and seconv: +* Batch convert: named presets, new functions and filters, multi-language translate, OCR language per file, and many format settings +* seconv: DVD sup and IMSC image outputs, openai-compatible and DeepL translate, nOCR optimize, and more SE 4 formats + +Accessibility and UI: +* Screen reader names across settings and tool windows, F1 help in 145 more dialogs, and remembered dialog sizes/positions +* Settings show one category at a time with search and back/forward navigation; settings auto-backup +* macOS-standard default shortcuts and a new rounded app icon + +Translations and engines: +* All language files synced with English +* Updated engines: Crisp ASR v0.8.43, whisper.cpp v1.9.5, llama.cpp b11553, CrispEmbed v0.17.12, audio.cpp v0.9.1, WhisperX build 103, FFmpeg 9.0.2 (Windows), libVLC 3.0.24 (Windows), Avalonia 12.1.4 and Flatpak runtime 26.08 + + A big thank you to everyone who tested the pre-releases, reported issues and + contributed code and translations - and a special thanks to Anthropic for + sponsoring a Claude subscription used in the development of this release :) + + 5.2.0 (10th of September 2026) Subtitle Edit 5.2 collects the work of 32 betas and 7 release candidates. diff --git a/Dictionaries/ru_NoBreakAfterList.xml b/Dictionaries/ru_NoBreakAfterList.xml index cf50a9b34ff..358d6eb98da 100644 --- a/Dictionaries/ru_NoBreakAfterList.xml +++ b/Dictionaries/ru_NoBreakAfterList.xml @@ -15,4 +15,92 @@ г-жа г-жа. г-ца. - \ No newline at end of file + в + В + во + Во + на + На + с + С + со + Со + к + К + ко + Ко + о + О + об + Об + обо + Обо + от + От + ото + Ото + по + По + у + У + за + За + из + Из + изо + Изо + до + До + для + Для + без + Без + под + Под + подо + Подо + над + Над + при + При + про + Про + через + Через + перед + Перед + из-за + Из-за + из-под + Из-под + и + И + а + А + но + Но + да + Да + или + Или + либо + Либо + ни + Ни + что + Что + чтобы + Чтобы + как + Как + если + Если + когда + Когда + то + То + не + Не + я + Я + diff --git a/Dictionaries/rus_OCRFixReplaceList.xml b/Dictionaries/rus_OCRFixReplaceList.xml index 8568bb5d79a..ccb57bb671e 100644 --- a/Dictionaries/rus_OCRFixReplaceList.xml +++ b/Dictionaries/rus_OCRFixReplaceList.xml @@ -243,6 +243,8 @@ + + @@ -282,5 +284,8 @@ + + \ No newline at end of file diff --git a/Ocr/Cyrillic.nocr b/Ocr/Cyrillic.nocr new file mode 100644 index 00000000000..e9f840891ce Binary files /dev/null and b/Ocr/Cyrillic.nocr differ diff --git a/Ocr/Latin.nocr b/Ocr/Latin.nocr index 4a6a5b715c5..cf4d34d5417 100644 Binary files a/Ocr/Latin.nocr and b/Ocr/Latin.nocr differ diff --git a/change-log.txt b/change-log.txt index f00f02994d7..6e8d217f15c 100644 --- a/change-log.txt +++ b/change-log.txt @@ -1,6 +1,161 @@  Subtitle Edit Changelog +----------------------------------------------------------------------------------------------------- + +v5.3.0 (14th of October 2026) + +Subtitle Edit 5.3 collects the work of 26 betas and 4 release candidates. +A summary of the changes since v5.2.0 (full details in the pre-release entries below): + +New features: +* Command palette (Ctrl+Shift+K) +* Import subtitles directly from DVD (IFO/VOB) with title picker, fast rip and exact cell timing +* Improve time codes (forced alignment) - re-time a roughly synced subtitle, with a speech-to-text check and waveform preview +* Remux video - video, multi-track audio (with mixing) and soft subtitles, also embedded CEA-608 captions +* Cut video transitions and fades, burn-in for selected lines, and 3D (half side-by-side / top-bottom) burn-in and image export +* Generate background music locally (ACE-Step) +* Compare: merge view, sync points, time tolerance and taking only text or timing per row +* Custom shortcut slots built from steps, AltGr modifier, per-plugin shortcuts and many new shortcuts +* Actor picker, "Set style..." quick pick, and "Shot in"/"Shot out" grid columns +* Reload the subtitle when it is changed outside Subtitle Edit, and "Frame numbers" time code mode +* Taskbar/Dock progress and prevent sleep for long jobs (speech to text, text to speech, burn-in, batch convert) + +Video player and waveform: +* New FFmpeg video player with hardware decoding, audio track picker, real frame stepping and Linux sound +* Experimental mpv Metal video player on macOS, deinterlace setting, and customizable player controls +* Editor-style layout 14 with a track timeline, and layouts 12 and 13 (text box below the video) +* Experimental fast waveform renderer, "Show speech only" waveform, grid color and remembered zoom +* Waveform toolbar: initial text box, move-lines buttons, line breaks and wrapping + +Speech to text: +* Crisp ASR: speaker detection (Sortformer), VAD choice (Silero, FireRedVAD, WebRTC, Whisper-VAD) and "Isolate speech" +* New models: Parakeet Ultra, Phonon-2, ReazonSpeech/Japanese Parakeet, Voxtral F16 and Index-Echo +* OpenAI-compatible API works with vLLM; retry of failed clips on selected lines + +Text to speech: +* New engines: OpenAI-compatible TTS, ElevenLabs v4/v4 Turbo, KugelAudio and Supertonic-3 +* Voice manager with transcripts, voice packs and copying voices between engines +* "Remove original speech", "Speak from current line" and "Play with speech" +* Optional Sidon cleaning of voice-clone reference audio + +Auto-translate and AI: +* New engines: LM Studio advanced and API Route, model browsing, and new llama.cpp models (Index-Translate, TranslatePsy-AfriSLM) +* Translate in place, translate one file into several languages in batch convert, and a no-prompt shortcut +* 22 more languages for the AI engines, MyMemory without an API key, and line breaks kept for ChatGPT/Anthropic +* AI review: prompt templates and reference context + +OCR: +* nOCR: much better accuracy, new Cyrillic database, "Optimize database", and a redesigned trainer +* Find and Replace in the OCR window, remembered pre-processing settings, and a per-language spell check dictionary +* Romanian and Croatian OCR fix lists; better word splitting + +Subtitle formats: +* Read CEA-608/708 closed captions from .ts, .mkv, .mp4, .mxf, .vob, .mpg and .m2v +* New: EZTitles binary (.ezt), PSP UMD Video, HD-DVD sup, Cheetah Caption ASC, ELR Studio and more SE 4 formats opened again +* Transport stream, MP4 caption, CEA-708 and Blu-ray sup timing fixes; PAC code page detection and secondary code page +* ASSA draw: redesigned with layers, shape library, curve tools, SVG import and live preview +* ASSA styles: overwrite/keep both on import, reorder, font collector; Source view syntax highlighting + +Batch convert and seconv: +* Batch convert: named presets, new functions and filters, multi-language translate, OCR language per file, and many format settings +* seconv: DVD sup and IMSC image outputs, openai-compatible and DeepL translate, nOCR optimize, and more SE 4 formats + +Accessibility and UI: +* Screen reader names across settings and tool windows, F1 help in 145 more dialogs, and remembered dialog sizes/positions +* Settings show one category at a time with search and back/forward navigation; settings auto-backup +* macOS-standard default shortcuts and a new rounded app icon + +Translations and engines: +* All language files synced with English +* Updated engines: Crisp ASR v0.8.43, whisper.cpp v1.9.5, llama.cpp b11553, CrispEmbed v0.17.12, audio.cpp v0.9.1, WhisperX build 103, FFmpeg 9.0.2 (Windows), libVLC 3.0.24 (Windows), Avalonia 12.1.4 and Flatpak runtime 26.08 + +A big thank you to everyone who tested the pre-releases, reported issues and +contributed code and translations - and a special thanks to Anthropic for +sponsoring a Claude subscription used in the development of this release :) + +----------------------------------------------------------------------------------------------------- + +v5.3.0-rc4 (13th of October 2026) + +* Add Whisper-VAD to the Crisp ASR VAD choices - thx jodilife +* macOS: show "Search help topics" field with translated menus - thx GitGianluc +* Fix jitter/crackling in layout 14 (filmstrip thumbnails decode keyframes only) - thx ruonghieu +* Fix context menu submenu icons not showing on first open - thx GitGianluc +* Fix Linux/OpenGL fullscreen leaving an mpv instance alive (VRAM leak) - thx vitonique +* Fix Whisper OpenAI model download "path not found" - thx Shaima-Almarzooqi +* Fix Auto-translate advanced settings cut off at high UI scaling - thx mmmsh-125 +* Update whisper.cpp to v1.9.5 +* Update Crisp ASR to v0.8.43 +* Update Czech translation - thx Matěj +* Update French translation - thx Need74 +* Update German translation - thx FunkyKnilch +* Update Italian translation - thx bovirus +* Update Japanese translation - thx hisui3393 +* Update Korean translation - thx 12si27 + + +----------------------------------------------------------------------------------------------------- + +v5.3.0-rc3 (12th of October 2026) + +* Add nOCR Cyrillic database (Cyrillic.nocr) with case and "ы" handling +* Add nOCR "Optimize database" (OCR window + seconv optimize-nocr) +* Add "Fast (HTDemucs)" model option for TTS "Remove original speech" - thx invio-a11y +* Improve time codes: fix mistimed overlaps kept, skip lyrics/positioned signs/comments, snap to frames in frame mode +* Import plain text: hold ends for max CPS, use the Gap setting, allow cancel of alignment +* Improve Latin.nocr (drop lines that don't tell glyphs apart from lookalikes) +* Improve help: F1 help in 35 more dialogs, docs updates +* Batch convert: VobSub uses the profile's font and outline color - thx mehdittttt +* Batch convert: keep fades in Blu-ray sup and alignment in D-Cinema PNG +* Blu-ray sup: bridge gaps shorter than half a frame +* Fix settings export/import/reset missing sections - thx FunkyKnilch +* Fix list scroll bars covering item content (e.g. command palette shortcuts) - thx GrampaWildWilly +* Fix OCR upgrade replacing user-trained/optimized nOCR databases +* Fix high memory use with image subtitles in Point sync via other +* Fix crash risk when clicking OK while the Matroska track picker preview is loading +* Fix "New line format" placeholder in Custom text format - thx GitGianluc +* Update llama.cpp to b11553 +* Update French translation - thx Need74 +* Update Italian translation - thx bovirus +* Update Japanese translation - thx hisui3393 +* Update Polish translation - thx potplayer-fanpack +* Update Turkish translation - thx bilimiyorum + + +----------------------------------------------------------------------------------------------------- + +v5.3.0-rc2 (11th of October 2026) + +* Add command palette (Ctrl+Shift+K) +* Add experimental mpv Metal video player on macOS +* ASSA draw: new layout with menus, undo/redo, scale/rotate, line/curve tools, backgrounds and SVG import +* ASSA draw: add shape tool with shape library (speech bubbles, arrows, symbols) and eyedropper +* Train nOCR window: new layout with preview, start from an existing database, several font sizes and progress +* Improve nOCR accuracy (scale-aware matching, auto spaces, shadow threshold, better Latin.nocr) +* Point sync via other subtitle: load subtitles embedded in mkv/mp4 and .sup files - thx mmmsh-125 +* Find/Replace: delete individual history entries - thx FunkyKnilch +* OCR: remember image pre-processing settings +* Format combo: show full format names in the drop-down +* Improve layout for long translated texts in Spell check and Batch convert - thx Slava46 +* Hide "Close video file" menu item when no video is loaded +* Improve performance of Netflix check, spell check, shot change extend, Video OCR, VobSub writing and more +* Fix "Could not convert to double" when typing a frame rate in Change frame rate - thx jojorne +* Fix Video OCR ignoring the llama.cpp external server setting - thx GitGerby +* Fix SSA losing [Events] header when [Fonts]/[Graphics] precede it +* Fix TTML italic/bold/underline inheritance +* Fix MS Office Workbook, D-Cinema Interop, Projection Subtitle List, FCP XML and IMSC/TTML frame-rate issues +* Fix Apply duration limits ignoring unticked rows and Modify selection duration defaults +* Fix OCR fix stripping accents from English loanwords/names +* Fix shot changes not sorted when assigned or loaded +* Fix nOCR trainer Stop button and closing saving a partial database +* Fix image export "Box per line" boxes shifted left +* Update SharpCompress to 0.50.5 +* Update German translation - thx FunkyKnilch +* Update Polish translation - thx potplayer-fanpack +* Update Russian translation - thx LazySwift + + ----------------------------------------------------------------------------------------------------- v5.3.0-rc1 (10th of October 2026) diff --git a/docs/faq.md b/docs/faq.md index fbd89329b71..3392042f5fc 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -46,10 +46,11 @@ You can use **File → Import → Image-based subtitle for edit...** to work/exp ### What video players are supported? Subtitle Edit supports: -- **libmpv** — High-quality, wide format support -- **VLC** - Popular player, limited support in SE +- **libmpv** — High-quality, wide format support (default). Several rendering modes: OpenGL, Native Window ID (not macOS), Software rendering, and on macOS **libmpv - Metal (experimental, needs restart)** +- **libVLC** — Popular player, limited support in SE (Windows and Linux only) +- **FFmpeg** — Plays video through FFmpeg (all platforms) -Configure the video player in **Options → Settings → Video Player**. +Configure the video player in **Options → Settings → Video player**. If you have problems with a video, try **Video → More → Re-encode video for better subtitling**. @@ -70,14 +71,16 @@ You can also download FFmpeg in **Options → Settings**. ### What speech-to-text engines are supported? Subtitle Edit supports several local and downloadable speech-to-text engines: -- **Whisper.cpp** — Cross-platform, CPU-based -- **Whisper.cpp (cuBLAS)** — GPU-accelerated (Windows, NVIDIA) -- **Whisper.cpp (Vulkan)** — GPU-accelerated via Vulkan (Windows) -- **Purfview's Faster-Whisper-XXL** — Fast GPU/CPU-based (Windows, Linux) -- **CTranslate2** — Fast CPU/GPU-based -- **Const-me's Whisper** — DirectX-based (Windows) +- **Whisper CPP** — Cross-platform, CPU-based. On Windows the cuBLAS (NVIDIA) and Vulkan GPU backends are picked from its **Backend** drop-down +- **Purfview Faster Whisper XXL** — Fast GPU/CPU-based (Windows, Linux x64) +- **Whisper CTranslate2** — Fast CPU/GPU-based +- **Whisper Const-me** — DirectX-based (Windows) - **WhisperX** — Faster-Whisper with wav2vec2 word-level alignment, standalone build (Windows x64, Linux x64, macOS Apple Silicon) -- **OpenAI Whisper** — Original Python implementation +- **Whisper OpenAI** — Original Python implementation +- **Qwen3 ASR CPP** and **Crisp ASR** (many backends: Parakeet, Canary, Cohere, Qwen3 and more) — local engines +- **OpenAI Compatible Server**, **OpenRouter**, **Alibaba Qwen3-ASR** and **Google Cloud Speech-to-Text** — online services + +See [Speech to Text](features/speech-to-text.md) for details. - **OpenAI-compatible STT** — Send audio to any OpenAI-compatible speech endpoint - **Qwen3 ASR CPP** — Local GGUF-based engine (Windows, Linux, macOS) - **Crisp ASR** — Local engine with multiple backends (Parakeet, Canary, Cohere, Fire Red, Fun-ASR Nano, GigaAM, GLM, Granite, Qwen3, Mega, MOSS Diarize, Omni, Kyutai, SenseVoice, ARK, Voxtral) and a Forced-aligner picker (built-in / Canary CTC / Qwen3 / 12 wav2vec2 language aligners) for word-level timestamps @@ -135,7 +138,7 @@ Use **Synchronization → Change frame rate...** and select the source and targe Go to **Spell check → Get dictionaries...** and download the dictionary for your language. Dictionaries are based on Hunspell/OpenOffice format. ### How do I add words to the dictionary? -During spell check, click **Add to dictionary** to add a word. You can also manage custom words in **Options → Word lists**. +During spell check, click **Add to user dictionary** to add a word. You can also manage custom words in **Options → Word lists**. --- @@ -163,16 +166,25 @@ See the [Keyboard Shortcuts Reference](reference/keyboard-shortcuts.md) for the ### Subtitle Edit won't play video - Ensure you have a video player installed (libmpv or VLC) -- Check that the video player path is correctly set in **Options → Settings → Video Player** +- Check that the video player path is correctly set in **Options → Settings → Video player** - Try to re-encode the video for better compatibility via **Video → More → Re-encode video for better subtitling** ### Video is black with no sound, but the waveform works The waveform is made with FFmpeg while the picture comes from libmpv, so this points at libmpv failing to load rather than at the file. - Update your graphics driver from Intel/NVIDIA/AMD directly — the generic Microsoft Basic Display driver has no usable OpenGL -- Re-download libmpv via **Options → Settings → Video Player → Download libmpv** +- Re-download libmpv via **Options → Settings → Video player → Download libmpv** - If you installed libmpv by hand, make sure `vulkan-1.dll` sits next to `libmpv-2.dll` — recent libmpv builds do not load without it (see [Third-Party Components](third-party-components.md)) - Check that your antivirus is not blocking `libmpv-2.dll` -- As a cross-check, switch to VLC under **Options → Settings → Video Player**; if VLC plays the file, the problem is libmpv/OpenGL +- As a cross-check, switch to VLC under **Options → Settings → Video player**; if VLC plays the file, the problem is libmpv/OpenGL + +### Video does not play on Linux +With the native `.tar.gz` builds, Subtitle Edit uses the system libmpv. If it is not installed (common on Fedora), the video area stays empty, with no picture or sound. +- Install libmpv and FFmpeg with your package manager, e.g. `sudo apt install libmpv-dev ffmpeg` (Debian/Ubuntu) or `sudo dnf install mpv-libs ffmpeg-free` (Fedora) - see the [README](https://github.com/SubtitleEdit/subtitleedit#linux) for other distributions +- Or use the Flatpak, which bundles mpv and FFmpeg +- As a fallback, switch to **FFmpeg** under **Options → Settings → Video player** + +### Video does not play on macOS +The `.dmg` bundles libmpv and FFmpeg, so nothing needs to be installed. If video still does not show, try another player under **Options → Settings → Video player** (e.g. **FFmpeg**, or **libmpv - Metal (experimental, needs restart)** - restart Subtitle Edit after switching to it). ### Waveform is not showing - Ensure FFmpeg is installed and the path is set in settings diff --git a/docs/features/apply-duration-limits.md b/docs/features/apply-duration-limits.md index ce364bcd654..d925ee31882 100644 --- a/docs/features/apply-duration-limits.md +++ b/docs/features/apply-duration-limits.md @@ -9,8 +9,10 @@ Enforce minimum and maximum duration limits on subtitle lines. ## Options -- **Fix min duration** — Enable the minimum limit and set the minimum display time in milliseconds +- **Fix minimum duration (ms)** — Enable the minimum limit and set the minimum display time in milliseconds - **Do not go past shot change** — Shown when shot changes are loaded: a line extended to reach the minimum duration stops at the next shot change -- **Fix max duration** — Enable the maximum limit and set the maximum display time in milliseconds +- **Fix maximum duration (ms)** — Enable the maximum limit and set the maximum display time in milliseconds + +When the global *Time code mode* setting is one of the frame modes, the labels read **Fix minimum duration (frames)** / **Fix maximum duration (frames)** and both values are entered in frames at the current frame rate (like [Bridge gaps](bridge-gaps.md) and [Apply min. gap](apply-min-gap.md)). The values are still stored in milliseconds, and a frame count you leave unchanged keeps the saved millisecond value. The window shows two lists that update live as you change values: the proposed fixes, each with an **Apply** checkbox, and the lines that cannot be fixed (because there is not enough room before the next subtitle). The counts are reported under the lists. diff --git a/docs/features/assa-attachments.md b/docs/features/assa-attachments.md index 059a981ba21..d67181df01e 100644 --- a/docs/features/assa-attachments.md +++ b/docs/features/assa-attachments.md @@ -45,5 +45,5 @@ Manage fonts and images embedded as attachments in an Advanced SubStation Alpha | Shortcut | Action | |----------|--------| -| F1 | Show help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | | Escape | Close dialog | diff --git a/docs/features/assa-draw.md b/docs/features/assa-draw.md index d72526dc482..56f22a61d1f 100644 --- a/docs/features/assa-draw.md +++ b/docs/features/assa-draw.md @@ -1,57 +1,171 @@ # ASSA Draw -A vector drawing tool for creating ASSA drawing commands (\p1 ... \p0) used in Advanced SubStation Alpha subtitles. +A vector drawing editor for ASSA drawings (`\p1 ... \p0`) in Advanced SubStation Alpha subtitles: speech bubbles, arrows, logos, masks and other shapes drawn on top of the video. **Menu:** `ASSA tools` → `Draw...` -![ASSA Draw Screenshot](../screenshots/assa-draw.png) +![ASSA Draw](../screenshots/assa-draw.png) + +The window works like a vector drawing program: + +- **Options bar** (top): undo/redo, shape actions, grid and preview toggles, background, canvas size, and Import SVG/Copy/Load/Save. +- **Tool strip** (left): the drawing tools, zoom, and the current color. +- **Canvas** (center): the video frame area (the script resolution). +- **Shapes panel** (right): layers, shapes and points, with the properties of what is selected. +- **Status bar** (bottom): pointer position, tool, selection, and zoom. The generated ASSA code is shown next to **OK** and **Cancel**. ## How to Use -1. Go to **ASSA tools** → **Draw...** to open the drawing canvas. -2. Select a drawing tool (Line, Bézier curve, Rectangle, Circle, etc.) from the toolbar. -3. Click on the canvas to create points and shapes. -4. Use the shape tree on the side to manage layers and shapes. -5. Adjust individual point coordinates for precise positioning. -6. Toggle the grid overlay for alignment guidance. -7. Click **OK** to insert the generated ASSA drawing code into your subtitle. - -## Features - -### Drawing Tools -- **Select:** Selection/move tool for picking and dragging existing shapes and points. -- **Line:** Draw straight line segments. -- **Bézier Curve:** Draw smooth curves with control points. -- **Rectangle:** Draw rectangles. -- **Circle:** Draw circles/ellipses. - -### Toolbar Actions -- **Save**, **Load**, **Copy to Clipboard** (`Ctrl+C`). -- **Close Shape** (`F8`/`Enter`), **Delete Shape** (`Del`), **Clear All** (`Ctrl+N`). -- **Zoom in**, **Zoom out** (10% steps, same as `Ctrl`+mouse wheel), **Reset View** (`Ctrl+0`, fits the whole frame), **Toggle Grid** (`Ctrl+G`). -- **Toggle preview** (`F9`): shows the drawing as it will render (filled, in layer colors, with erase shapes cut out) over the video frame, with the outlines and points still on top for editing. Needs ffmpeg with libass. - -### Canvas -- Canvas size follows the script resolution (PlayResX/PlayResY), else the video size, and can be changed. -- Zoom in/out for detailed editing. -- Grid overlay for alignment. -- Real-time position display. - -### Shape Management -- Organize shapes in a tree view with layers. -- Select, move, and delete shapes or individual points. -- Set the layer color with the color swatch in the layer panel. -- **Change Layer** moves the selected shape to another layer; **Use shape for erase (iclip)** turns it into an \iclip cut-out. -- Edit exact X/Y coordinates for selected points. - -### Import / Export -- Open existing ASSA drawing files. -- Save drawing code as files. -- Copy generated ASSA drawing code to the subtitle. +1. Select one or more lines and go to **ASSA tools** → **Draw...**. Drawings already in the selected lines are loaded. +2. Pick a tool in the tool strip and draw on the canvas, or place a ready-made shape with the **Shape tool**. +3. Use the **Select** tool to move, scale and rotate shapes. Right-click anything for more options. +4. Click **OK** to write the drawing back to the subtitle. Each layer becomes one line with its own color. + +## Tools + +| Tool | Key | What it does | +|------|-----|--------------| +| Select | `V` | Click a shape to select it, and drag it to move it. Drag the handles around the selection to scale it, or the round handle above it to rotate it. | +| Line | `L` / `F4` | Click to add straight-line points. `Enter`/`F8` closes the shape, and `Esc` cancels it. | +| Bézier curve | `B` / `F5` | Click to add curve points. Drag the green control points to shape the curves. | +| Rectangle | `R` / `F6` | Click two corners. | +| Circle | `C` / `F7` | Click the center, then the radius. | +| Shape tool | `S` | Places a shape from the [shape library](#shape-library). | +| Eyedropper | `I` | Picks a color from a shape or from the background. | + +Drag a point with any tool to move it. The single-letter keys are ignored while typing in a number field. + +### Scale and rotate + +With the **Select** tool, a selected shape (or a multi-selection, `Ctrl+A`) gets eight scale handles and a rotate handle: + +- The dragged edge or corner follows the pointer, and the opposite side stays in place. +- Hold `Shift` while dragging a corner to keep the proportions, or while rotating to snap to 15° steps. +- The size or angle is shown while dragging. +- Dragging a shape that is part of a multi-selection moves the whole selection. + +### Selecting several shapes + +- **Drag on empty canvas** to draw a selection rectangle: every shape it touches is selected. Hold `Ctrl` to add to the selection, or `Alt` to leave out the rest of a touched shape's group. +- **`Ctrl`+click** (`⌘`+click on macOS) adds a shape to the selection or takes it out. In the shapes panel, `Ctrl`+click and `Shift`+click select several rows. +- A plain click on empty canvas clears the selection. + +### Groups + +A multi-part shape from the shape library (clip art, the ring) and an imported SVG are placed as a **group**: + +- A click on any part selects the whole group, so moving, scaling, rotating, flipping, duplicating and deleting act on all of it. +- `Alt`+click or double-click selects a single part, to edit its points. +- **Group** (`Ctrl+G`) makes one group of the selected shapes, **Ungroup** (`Ctrl+Shift+G`) takes the selected shapes out of their groups. Both are in the options bar and the right-click menu. +- Groups are only for editing: they are saved in `.assadraw` files, but the ASSA result is the same with or without them. + +## Shape Library + +![Shape library](../screenshots/assa-draw-shape-library.png) + +Click the **Shape tool** to open the shape library, then pick a shape: + +- **Drag** on the canvas to place the shape in that rectangle. Hold `Shift` to keep its proportions. +- **Click** to place it at a default size, centered on the click. + +The shape is placed on a new layer in the current color and selected with the Select tool, ready to be moved or resized. + +Built-in shapes: + +- **Speech bubbles:** speech bubble (tail left, right or up), oval, box, thought, shout, caption box. +- **Arrows:** arrow, double arrow, chevron, curved arrow. +- **Basic shapes:** rounded rectangle, triangle, diamond, pentagon, hexagon, octagon, star, ring, plus, banner. +- **Symbols:** heart, check mark, music note, music notes, lightning, cloud, moon, badge. + +**My shapes:** To save your own shape, right-click a shape (or a multi-selection) and choose **Add to shape library...**. Saved shapes keep their colors, one per layer. Right-click a saved shape in the library to remove it. + +## Colors and Layers + +ASSA drawings have one color per line, so each **layer** has one color. The layer color is shown as a swatch in the shapes panel and at the bottom of the tool strip (the current color). + +- New shapes use the current color. They join the layer that already has that color, or a new layer. +- To change a color, select a shape or layer and use the color swatch in the properties panel. +- **Eyedropper** (`I`): click a shape to take its color, or click the background (video frame or image) to take that pixel's color. A preview of the color under the pointer follows the cursor. The picked color becomes the current color and recolors the selected shape's layer. +- **Use shape for erase (iclip):** turns a shape into a cut-out (`\iclip`) of its layer. Eraser shapes are drawn dashed. + +## Right-click Menus + +![Right-click menu](../screenshots/assa-draw-context-menu.png) + +- **Shape:** + - Duplicate (`Ctrl+D`), Group (`Ctrl+G`) / Ungroup (`Ctrl+Shift+G`), Move to layer + - Rotate 90° clockwise/counter-clockwise, Flip horizontally/vertically + - Convert all lines to curves / all curves to lines + - Use shape for erase, Hide shape + - Add to shape library..., Delete shape (`Del`) +- **Point:** + - Convert segment to curve / to line + - Delete point. A curve's end point takes its control points with it. +- **Empty canvas:** + - Undo/redo, Close shape/Cancel drawing (while drawing), Select all + - Zoom, Grid, Preview + - Import SVG image..., Background, Clear all +- **Shapes panel:** the same shape and point items. On a layer: Hide/show layer, Change layer, Delete layer. On a group: Duplicate, Ungroup, Rotate, Flip, Add to shape library, Delete. + +## Shapes Panel + +- Layers contain shapes, and shapes contain their points. Click the eye button to hide or show a layer, group or shape. Hidden shapes are not included in the preview. +- A group on one layer is shown inside that layer. A group spread over several layers (clip art has one layer per color) is shown as one group row next to its lowest layer, with the layer in each shape's name. Selecting a group row selects the whole group. +- **Selected shape:** edit its position (X/Y), size (W/H), layer number and color, and turn **Use shape for erase (iclip)** on or off. +- **Selected point:** edit its exact X/Y coordinates. +- Selecting a shape or point on the canvas selects it in the panel, and the other way around. + +## Background + +Use the **Background** button (picture icon) in the options bar to show something behind the drawing to trace over: + +- **Video frame (current position):** the frame at the video position (or at the start of the selected line). +- **Video frame at...:** a frame at a time code you type. +- **Image file...:** a PNG, JPG, BMP or WebP image. You can also drop an image on the window. +- **Stretch image to canvas:** otherwise the image keeps its aspect ratio and is centered. +- **No background**. + +The slider next to the button sets the background opacity. The background is only for display and is never part of the result. + +## Import SVG Images + +Use **Import SVG** in the options bar or the canvas menu, or drop an `.svg` file on the window. The SVG is converted to ASSA drawing shapes: + +- Supported: paths, rectangles, circles, ellipses, lines, polygons and polylines, groups, `` and transforms. Arcs and quadratic curves become Bézier curves. +- Each fill color becomes its own layer, in the order of the SVG file. Strokes become filled outlines on their own layer, and holes are kept. +- Colors and opacity come from attributes, `style`, and simple `.class` rules. Gradients use their first color. +- An SVG with the frame's aspect ratio fills the frame. Other SVGs are fitted to half the frame and centered. +- Not supported: gradients (as gradients), patterns, masks and clip paths, text, and filters. + +## Preview + +**Toggle preview** (`F9`) shows the drawing as libass renders it: filled, in the layer colors, with eraser shapes cut out. The outlines and points stay on top for editing. This needs ffmpeg with libass. + +## Undo and Redo + +Every change can be undone with `Ctrl+Z` and redone with `Ctrl+Y` or `Ctrl+Shift+Z` (`⌘` on macOS). While you are drawing a shape, undo removes the last point you added. A whole drag, or holding an arrow key, counts as one step. ## Keyboard Shortcuts | Shortcut | Action | |----------|--------| -| F1 | Show help | -| Escape | Close dialog | +| `V` `L` `B` `R` `C` `S` `I` | Select, line, Bézier, rectangle, circle, shape tool, eyedropper | +| `F4`–`F7` | Line, Bézier, rectangle, circle | +| `Enter` / `F8` | Close the shape being drawn | +| `Esc` | Cancel the shape being drawn (or close the dialog) | +| `Del` | Delete the selected shape | +| `Ctrl+Z` / `Ctrl+Y` | Undo / redo | +| `Ctrl+D` | Duplicate the selected shape | +| `Ctrl+A` | Select all shapes | +| `Ctrl+G` / `Ctrl+Shift+G` | Group / ungroup the selected shapes | +| `Ctrl`+click, `Ctrl`+drag | Add to or take out of the selection | +| `Alt`+click, double-click | Select one part of a group | +| `Ctrl+Arrow` / `Alt+Arrow` | Move the selection 10 px / 1 px | +| `Ctrl` + mouse wheel | Zoom around the pointer | +| `Ctrl++` / `Ctrl+-` / `Ctrl+0` | Zoom in / zoom out / fit the frame | +| `Shift` + drag, middle mouse button | Pan | +| `Ctrl+'` | Toggle the grid | +| `F9` | Toggle the libass preview | +| `Ctrl+C` | Copy the ASSA code to the clipboard | +| `Ctrl+N` | Clear all | +| `F1` | Show help | diff --git a/docs/features/assa-image-color-picker.md b/docs/features/assa-image-color-picker.md index a093d4b798b..2e7a17fa049 100644 --- a/docs/features/assa-image-color-picker.md +++ b/docs/features/assa-image-color-picker.md @@ -37,5 +37,5 @@ Pick colors directly from a video frame screenshot for use in ASSA subtitle styl | Shortcut | Action | |----------|--------| -| F1 | Show help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | | Escape | Close dialog | diff --git a/docs/features/assa-override-tags.md b/docs/features/assa-override-tags.md index 43b516153bb..d4e30cbfdad 100644 --- a/docs/features/assa-override-tags.md +++ b/docs/features/assa-override-tags.md @@ -41,5 +41,5 @@ Apply ASSA override tags to subtitle lines with a live video preview. | Shortcut | Action | |----------|--------| -| F1 | Show help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | | Escape | Close dialog | diff --git a/docs/features/assa-progress-bar.md b/docs/features/assa-progress-bar.md index e6e761848d5..421979b826e 100644 --- a/docs/features/assa-progress-bar.md +++ b/docs/features/assa-progress-bar.md @@ -43,5 +43,5 @@ Generate an animated progress bar overlay in ASSA format, with optional chapter | Shortcut | Action | |----------|--------| -| F1 | Show help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | | Escape | Close dialog | diff --git a/docs/features/assa-properties.md b/docs/features/assa-properties.md index 724592366d4..0348ad48325 100644 --- a/docs/features/assa-properties.md +++ b/docs/features/assa-properties.md @@ -43,5 +43,5 @@ Edit the script info header properties of an Advanced SubStation Alpha (ASS/SSA) | Shortcut | Action | |----------|--------| -| F1 | Show help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | | Escape | Close dialog | diff --git a/docs/features/assa-resolution-resampler.md b/docs/features/assa-resolution-resampler.md index 79165dc7569..7543c910354 100644 --- a/docs/features/assa-resolution-resampler.md +++ b/docs/features/assa-resolution-resampler.md @@ -35,7 +35,7 @@ Resample ASSA subtitle styles and positions from one video resolution to another | Shortcut | Action | |----------|--------| -| F1 | Show help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | | Escape | Close dialog | ## Resolution set from the video diff --git a/docs/features/assa-set-background.md b/docs/features/assa-set-background.md index a58d6305010..cb848d6dfe5 100644 --- a/docs/features/assa-set-background.md +++ b/docs/features/assa-set-background.md @@ -43,5 +43,5 @@ Add styled background boxes behind subtitle text using ASSA drawing commands. | Shortcut | Action | |----------|--------| -| F1 | Show help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | | Escape | Close dialog | diff --git a/docs/features/assa-set-position.md b/docs/features/assa-set-position.md index cac505f0f33..3a661ed795d 100644 --- a/docs/features/assa-set-position.md +++ b/docs/features/assa-set-position.md @@ -35,5 +35,5 @@ Visually position subtitles on screen by dragging them over a video screenshot, | Shortcut | Action | |----------|--------| -| F1 | Show help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | | Escape | Close dialog | diff --git a/docs/features/assa-styles.md b/docs/features/assa-styles.md index 85e40850813..aaba413c676 100644 --- a/docs/features/assa-styles.md +++ b/docs/features/assa-styles.md @@ -52,5 +52,5 @@ Manage Advanced SubStation Alpha (ASS/SSA) subtitle styles, including file style | Shortcut | Action | |----------|--------| -| F1 | Show help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | | Escape | Close dialog | diff --git a/docs/features/assisted-split.md b/docs/features/assisted-split.md index 9d0edb41200..8c8979e4a87 100644 --- a/docs/features/assisted-split.md +++ b/docs/features/assisted-split.md @@ -11,7 +11,7 @@ The previews are produced by running the real split or move on a copy of the lin ## Assisted Split - +![Assisted Split](../screenshots/assisted-split.png) Where **Split line** cuts the selected line at the middle (or at the text cursor), assisted split shows the sensible cut points first. @@ -42,7 +42,7 @@ Applying a card uses the same rules as **Split line**: the time codes are divide ## Assisted Move - +![Assisted Move](../screenshots/assisted-move.png) Moves words across the boundary between the selected line and the previous or next line, or between the two lines of the selected subtitle. The list is context aware: word moves across a boundary are only offered when the sentence actually continues across it, so words are never pushed into a line that starts a new sentence or a new dialog. @@ -87,4 +87,4 @@ A sentence "continues" when the earlier text does not end with `.`, `!`, `?` or |-----|--------| | 1-5 (split) / 1-6 (move) | Apply that candidate | | Escape | Close without changes | -| F1 | Open help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | diff --git a/docs/features/audio-visualizer.md b/docs/features/audio-visualizer.md index 576207b74b4..ed48e8b05d8 100644 --- a/docs/features/audio-visualizer.md +++ b/docs/features/audio-visualizer.md @@ -50,10 +50,10 @@ What a single click and a double-click do is configurable: **Waveform single-cli | Shortcut | Action | |----------|--------| -| Set start | Set the start time of the selected subtitle | -| Set end | Set the end time of the selected subtitle | +| Set start | Set the start time of the selected subtitle (F11; F9 on macOS) | +| Set end | Set the end time of the selected subtitle (F12) | | Set end and go to next | Set end time and move to next subtitle | -| Set start and offset the rest | Set start and shift all following subtitles | +| Set start and offset the rest | Set start and shift all following subtitles (F9 on Windows / Linux; no default on macOS) | | Set end and offset the rest | Set end and shift all following subtitles | | Center on video position | Center the waveform on the current video position | | Insert at position (focus text) | Insert a new subtitle at video position and focus the text editor | diff --git a/docs/features/auto-translate-advanced.md b/docs/features/auto-translate-advanced.md index 6b3dcb007eb..2106c8085e7 100644 --- a/docs/features/auto-translate-advanced.md +++ b/docs/features/auto-translate-advanced.md @@ -1,6 +1,8 @@ # Auto Translate: Advanced Local Engines -The **llama.cpp advanced (local LLM)** and **Ollama advanced (local LLM)** engines translate in batches with surrounding context, a synopsis, and a glossary — giving more consistent names, pronouns, and terminology than line-by-line translation. This page covers their **Advanced...** settings dialog and the llama.cpp engine settings. +The **llama.cpp advanced (local LLM)**, **Ollama advanced (local LLM)** and **LM Studio advanced (local LLM)** engines translate in batches with surrounding context, a synopsis, and a glossary — giving more consistent names, pronouns, and terminology than line-by-line translation. This page covers their **Advanced...** settings dialog and the llama.cpp engine settings. + +LM Studio advanced talks to LM Studio's OpenAI-compatible endpoint (default `http://localhost:1234/v1/chat/completions`). LM Studio can have several models loaded; leave the model empty to use the loaded one. See [Auto Translate](auto-translate.md) for the translation window itself. @@ -8,7 +10,7 @@ See [Auto Translate](auto-translate.md) for the translation window itself. With an advanced engine selected, click **Advanced...** in the engine settings row. - +![Advanced Settings](../screenshots/auto-translate-advanced.png) ### Context @@ -27,7 +29,7 @@ With an advanced engine selected, click **Advanced...** in the engine settings r - **Temperature** — Randomness. When unset, Subtitle Edit uses the curated value for the model, or 0.2 — low temperatures keep terminology consistent across batches - **Top-p**, **Top-k**, **Repeat penalty** — Standard sampling options, passed through when set - **Max tokens per reply** — Response length cap; unset means no cap is sent -- **Server context size (tokens)** — The context window for the locally started llama.cpp server (default 16384). Bigger batches, more history, and a long synopsis/glossary need more context. Only affects the local llama.cpp server; Ollama manages its own context +- **Server context size (tokens)** — The context window for the locally started llama.cpp server (default 16384). Bigger batches, more history, and a long synopsis/glossary need more context. Only affects the local llama.cpp server; Ollama and LM Studio manage their own context - **Extra server parameters** — Additional `llama-server` command-line arguments, e.g. `-ngl 30 --no-mmap`, applied when the local server starts. They are appended after Subtitle Edit's own flags, so a repeated flag overrides Subtitle Edit's value - **Use only these parameters** — Start `llama-server` with the parameters above instead of Subtitle Edit's own tuning; only the model, host and port are still set. Ignored while the field is empty diff --git a/docs/features/auto-translate.md b/docs/features/auto-translate.md index 8c4b308b27f..87cd9de55c4 100644 --- a/docs/features/auto-translate.md +++ b/docs/features/auto-translate.md @@ -17,6 +17,12 @@ Automatically translate subtitles using various translation engines and AI servi 5. Review the translations in the grid 6. Click **OK** to apply +### Translating selected lines + +Right-click selected lines in the grid and choose **Auto-translate** to translate only those lines. With no original column open, the dialog offers **Translate in place (do not create original)**: the translated text replaces the selected lines' text instead of turning the subtitle into the original. Otherwise the whole subtitle becomes the original, as with a whole-file translation. + +The shortcut **Auto-translate selected lines (no prompt, use last engine/languages)** (no default key; set it in [Shortcuts](shortcuts.md)) starts right away with the last used engine and languages; the dialog only shows progress and closes when done. Until a translation has been run once, it prompts as usual. + ## Supported Engines - **Google Translate V1 API** — Free Google Translate. When Google answers with its "unusual traffic" block page, Subtitle Edit retries the request through a fallback endpoint (`clients5.google.com`) before giving up; a block is on Google's side and is usually lifted again after minutes to a few hours @@ -27,6 +33,7 @@ Automatically translate subtitles using various translation engines and AI servi - **MyMemory Translate** — Free translation memory - **ChatGPT** — OpenAI AI translation (requires API key) - **LM Studio (local LLM)** — Local LLM translation +- **LM Studio advanced (local LLM)** — LM Studio translated in batches with surrounding context, a synopsis and a glossary; see [Advanced local engines](auto-translate-advanced.md) - **Ollama (local LLM)** — Local LLM-based translation - **Ollama advanced (local LLM)** — Ollama translated in batches with surrounding context, a synopsis and a glossary; see [Advanced local engines](auto-translate-advanced.md) - **llama.cpp (local LLM)** — Server-managed local LLM translation; Subtitle Edit downloads llama.cpp and a curated model (TranslateGemma, Gemma 4, Qwen, Aya Expanse, MiLMMT, Hy-MT2 or TranslatePsy-AfriSLM for English ↔ 19 African languages) and runs a local `llama-server` for you. See [Using your own model](#llamacpp-using-your-own-model) to run a model we don't ship, such as TranslateGemma 27B @@ -35,6 +42,7 @@ Automatically translate subtitles using various translation engines and AI servi - **Anthropic Claude** — AI translation (requires API key) - **Groq** — AI translation (requires API key) - **OpenRouter** — AI translation (requires API key) +- **API Route** — AI translation through [api-route.com](https://www.api-route.com) (requires API key) - **Lara** — AI translation (requires API key) - **Perplexity** — AI translation (requires API key) - **Google Gemini** — AI translation (requires API key) @@ -105,9 +113,9 @@ Depending on the selected engine, you may need to provide: - **API URL** — Custom endpoint URL (for self-hosted services) - **Model** — Specific model to use (for AI engines) -The gear button opens the engine's **Settings** dialog with **Line merge**, **Delay in seconds between requests**, **Max bytes per request** and, for engines that have one, the **Prompt text** with a reset-to-default button. +The gear button opens the engine's **Settings** dialog with **Line merge**, **Delay in seconds between requests**, **Max bytes per request** and, for engines that have one, the **Prompt text** with a reset-to-default button. **Do not translate lines in music symbols (♪ ... ♪)** leaves song lines untranslated. -The **llama.cpp advanced** and **Ollama advanced** engines translate in batches with context, synopsis, and glossary support — see [Advanced Local Engines](auto-translate-advanced.md). +The **llama.cpp advanced**, **Ollama advanced** and **LM Studio advanced** engines translate in batches with context, synopsis, and glossary support — see [Advanced Local Engines](auto-translate-advanced.md). ## Translation Review @@ -122,4 +130,4 @@ Switching engine to compare results keeps the source and target languages you pi | Key | Action | |-----|--------| | Escape | Close / Cancel | -| F1 | Open help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | diff --git a/docs/features/background-music.md b/docs/features/background-music.md new file mode 100644 index 00000000000..495cca2ed41 --- /dev/null +++ b/docs/features/background-music.md @@ -0,0 +1,91 @@ +# Generate Background Music + +Generate royalty-free instrumental background music from a text prompt, loop it seamlessly to the length of the video, and put it on the video - or mix it under the speech made by [Text to Speech](text-to-speech.md). + +- **Menu:** Video → More → Generate background music... +- **Shortcut:** None (menu only) + +![Generate Background Music](../screenshots/background-music.png) + +The music is made on your own computer by **ACE-Step 1.5 Turbo** (MIT license) running on the audio.cpp runtime - nothing is sent to an online service. The **More** submenu is shown while a video is loaded, and ffmpeg is required (you are offered to download it when it is missing). + +## How to Use + +1. Open **Video → More → Generate background music...** +2. Pick a **Preset**, or choose *Custom* and write your own **Prompt**. +3. Click **Generate**. The first time, the runtime and the model are downloaded (see [Requirements](#requirements)). The progress bar shows the current step - loading the model, composing, generating audio, decoding audio, creating a seamless loop - and the estimated time left. +4. Click **Play** to listen (click **Stop** to stop). Not happy? Click **Generate** again - with **Random** seed checked, every run gives a different piece. +5. Click **Add to video...** to write a copy of the video with the music, or **Save audio...** to save the music as a `.wav` file. + +The window is not modal, so the main window stays usable while it is open; only one background music window can be open at a time. **Cancel** while generating or adding stops the work; otherwise the button reads **Close**. + +## Presets + +Each preset fills in a prompt and a tempo that were tried to give music without vocals that loops cleanly: + +- Cooking / baking (120 BPM) +- Corporate / explainer (100 BPM) +- Forest / nature (84 BPM) +- Lo-fi vlog (85 BPM) +- Relaxing piano (72 BPM) +- Tech / gadget review (110 BPM) +- Custom - keeps the prompt you write + +Preset prompts are in English, since they are input for the model. They all end with a phrase that keeps the music unobtrusive and instrumental, for example "unobtrusive underscore for someone talking, instrumental, no vocals, steady tempo". Keep a similar ending in your own prompts. Vocals, singing, choir, rap, distorted guitar, heavy drums and dark or horror moods are always asked to be left out. + +## Options + +| Option | Description | Default | +|--------|-------------|---------| +| Preset | A starting point for the prompt and tempo; editing the prompt afterwards is kept | Cooking / baking | +| Prompt | Description of the music: genre, instruments, mood | (from the preset) | +| Tempo (BPM) | Beats per minute, 40-200 | 120 | +| Generate (seconds) | How much music the model makes, 20-240. A longer video loops this clip; a short video only needs a little more than its own length, so less is generated | 60 | +| Seed | The random seed. The same prompt, tempo, length and seed give the same music | 42 | +| Random | Pick a new seed for each **Generate** (the seed used is shown in the Seed field, so a piece you like can be made again) | On | +| Output length | Shows the final length - the video's length, as the music loops seamlessly | - | +| Music volume (%) | Level of the music, 0-200 | 100 | +| Remove existing audio tracks | The music replaces all the video's audio | On | +| Original audio volume (%) | Shown when **Remove existing audio tracks** is off: level of the video's own audio, which the music is mixed under | 100 | + +All settings are remembered. + +## Looping + +The model makes a clip of **Generate (seconds)**. Subtitle Edit then finds a loop in it that is aligned to the bars of the measured tempo and repeats it to the full length, with a fade-out at the end, and normalizes the level. After generating, the result line shows the loop's length, the measured tempo and how well the seam matches ("Loop: ... at 120 BPM, seam match 94%"), or "Music ready: ..." with the length when no loop is needed. + +## Add to Video + +**Add to video...** asks for the output file (by default the video name with `_music` added, in the same format) and runs ffmpeg: + +- The video stream is copied, not re-encoded, so it is quick and lossless. +- With **Remove existing audio tracks**, the music becomes the only audio track. +- Without it, the video's first audio track is kept at **Original audio volume** and the music is mixed under it. +- The audio is encoded as AAC (192 kb/s), or Opus for a `.webm` output. +- The output file cannot be the input video. + +When done, a file-saved prompt offers to open the containing folder or play the video. + +## With Text to Speech + +In the [Text to Speech](text-to-speech.md) window, check **Add background music** to mix generated music under the dubbed speech. The settings button next to it opens this window in a text to speech mode: + +- **Add to video...**, **Remove existing audio tracks** and **Original audio volume** are hidden, and an **OK** button is shown instead. +- **Music volume** is the level between lines (30% by default, saved separately). The music dips automatically while someone talks and comes back up in the gaps. +- The output length follows the generated speech. +- Music you generate here is reused by the text to speech run when the prompt, tempo and length are unchanged, so the piece you listened to is the one you get. **OK** checks **Add background music**. + +## Requirements + +- **audio.cpp runtime** - shared with the audio.cpp text to speech engines (IndexTTS 2.5, Higgs Audio v3, Fish Audio S2 Pro, ...). If it is missing, or too old to have ACE-Step, you are asked to download it. On Windows and Linux you pick the CPU, Vulkan or CUDA build; a GPU build is much faster. On macOS it needs an Apple Silicon Mac and uses Metal. +- **ACE-Step 1.5 Turbo model** (Q8_0, 5.8 GB) - downloaded after asking, the first time you click **Generate**. +- **ffmpeg** - for adding the music to the video. + +Generating takes a minute or two on a fast machine, including about 20 seconds to load the model; it is slower on the CPU. + +## Keyboard Shortcuts + +| Key | Action | +|-----|--------| +| Escape | Cancel generating / close | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | diff --git a/docs/features/batch-convert.md b/docs/features/batch-convert.md index 18052290bf9..ba21922a16b 100644 --- a/docs/features/batch-convert.md +++ b/docs/features/batch-convert.md @@ -16,6 +16,12 @@ Convert multiple subtitle files between formats and apply various transformation 5. Choose an output folder 6. Click **Convert** +Use **Filter** above the file list to show only some files: **File name contains...**, **Track language contains...**, **Format contains...**, **Extension is...**, **Status is error** or **Forced tracks only**. + +### Presets + +The function choices and their options can be saved as a named preset: pick **Save preset...**, enter a name, and choose it later from the **Preset** drop-down to restore everything. **Delete preset** removes the selected one. + ## Available Functions You can chain multiple conversion functions: @@ -40,6 +46,10 @@ You can chain multiple conversion functions: - Unbreak lines — join a cue's lines into one, optionally only for short ones - Auto-balance lines - Fix right-to-left +- Remove Unicode control characters — remove the invisible direction control characters (LRM, RLM, LRE, RLE, PDF, LRO and RLO) and replace no-break spaces with normal spaces +- Convert actors — convert actor/voice labels from one style to another (e.g. inline `[NAME]` text to the Actor property), like [Convert actors](convert-actors.md) +- Merge continuation lines +- Renumber - Sort by - Change resolution — the [ASSA resolution resampler](assa-resolution-resampler.md) applied to every file - Change style — swap one ASSA style for another, or import styles from a file, optionally trimming unused ones @@ -54,15 +64,19 @@ You can chain multiple conversion functions: Batch Convert can machine-translate files as part of the conversion. Supported engines: - Ollama +- OpenAI Compatible API - Ollama advanced (local LLM) — the batch/context engine described in [Advanced local engines](auto-translate-advanced.md), talking to Ollama's OpenAI-compatible endpoint - LibreTranslate -- LM Studio +- LM Studio (local LLM) +- LM Studio advanced (local LLM) — the batch/context engine described in [Advanced local engines](auto-translate-advanced.md) - llama.cpp — fully managed: Batch Convert reuses an already-running local `llama-server`, or downloads llama.cpp plus a curated translation model (e.g. TranslateGemma) and starts the server for you. Point it at your own server via the remote-server option in [Auto-translate](auto-translate.md) settings. - llama.cpp advanced (local LLM) — the batch/context engine described in [Advanced local engines](auto-translate-advanced.md); it gets the context size configured there - NLLB (nllb-serve and nllb-api) - DeepL (API key required) - CrispASR MADLAD +To translate into several languages in one run, click **Add** next to the **To** language and pick more target languages (**Remove** drops one). Every file is translated into each language and saved as its own output file, with the target language code as the language post fix (e.g. `movie.de.srt`, `movie.fr.srt`). + The same feature is available headlessly in `seconv` via `--translate-to` — see the [command line documentation](../reference/command-line.md). ## OCR in Batch Convert @@ -75,7 +89,7 @@ Supported OCR engines in Batch Convert: - BinaryOcr - Tesseract - Ollama -- llama.cpp (curated OCR vision models, best-first — GLM-OCR, LFM2.5-VL 3B, PaddleOCR-VL, HunyuanOCR 1.5, LightOnOCR; a local `llama-server` is started automatically) +- llama.cpp (curated OCR vision models, best-first — GLM-OCR, LightOnOCR-3 4B, LFM2.5-VL 3B, PaddleOCR-VL, HunyuanOCR 1.5, QARI-OCR 0.2.2.1 (Arabic), LightOnOCR-3 0.8B; a local `llama-server` is started automatically) - CrispEmbed (local, multiple model backends — see [OCR](ocr.md#crispembed)) - PaddleOCR (Windows and Linux only) - Apple Vision (macOS only — pick a language, nothing to download) @@ -112,11 +126,24 @@ Speech-to-text batch mode can transcribe multiple media files and save the resul ## Settings -- **Output format** — Choose from 380+ subtitle formats -- **Output folder** — Where converted files are saved -- **Overwrite existing** — Whether to overwrite files -- **Encoding** — Text encoding for output files -- **Keep source file timestamp** — Give the output file the modification time of the source file -- **Language post fix** — Append the detected language code (2- or 3-letter) to the output file name, e.g. `movie.en.srt` +- **Target format** — Choose from 380+ subtitle formats +- **Target format settings** — shown for formats with export options: ASSA (styles, properties, attachments), EBU STL header, PAC code page, Cavena 890 titles/translator/start of programme, DVB Teletext page number/language/hearing impaired, custom text format, and the image formats (Blu-ray sup, BDN XML, VobSub, D-Cinema, DOST, FCP, images) + +The **Settings** button opens **Batch convert settings**: + +- **Output** + - **Target encoding** — Text encoding for output files + - **Use source folder** / **Use output folder** — Where converted files are saved + - **Overwrite existing files** + - **Keep source file date/time on output files** + - **Language post-fix (mkv/mp4/auto-translate)** — Append the detected language code (2- or 3-letter) to the output file name, e.g. `movie.en.srt` +- **Adding files** + - **Include subfolders when adding a folder** + - **Video files (mkv, mp4, ts...) when adding a folder** — **Ask** (default; a prompt offers **Add video files** or **Subtitle files only**, with **Do not ask again**), **Add their subtitle tracks**, or **Skip** +- **Image-based subtitles (OCR)** — OCR engine and its language/database/model, and VobSub color isolation +- **Other** + - **Prevent computer from sleeping while converting** + +Text formats are saved with CR+LF line breaks when **Force CR+LF on save (text subtitle files)** is on in [Settings](settings.md). For headless batch conversion, see [Command Line (seconv)](../reference/command-line.md). diff --git a/docs/features/binary-edit.md b/docs/features/binary-edit.md index 28bf96b9ded..e5952a89ea1 100644 --- a/docs/features/binary-edit.md +++ b/docs/features/binary-edit.md @@ -6,7 +6,7 @@ Edit image-based subtitles — Blu-ray SUP, VobSub, DVB, BDN XML — directly, w - **Also:** The **Edit/export...** button in the [OCR window](ocr.md) opens the loaded subtitle here - **Shortcut:** Configurable (no default) - +![Edit Image-Based Subtitle](../screenshots/binary-edit.png) ## Supported Files diff --git a/docs/features/blank-video.md b/docs/features/blank-video.md index e64e9b1c40d..093f1c1d9eb 100644 --- a/docs/features/blank-video.md +++ b/docs/features/blank-video.md @@ -33,4 +33,4 @@ Generate a blank video file for testing or subtitle preview purposes. | Key | Action | |-----|--------| | Escape | Close / Cancel | -| F1 | Open help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | diff --git a/docs/features/burn-in.md b/docs/features/burn-in.md index b6bbead2f96..ff445c9ffaf 100644 --- a/docs/features/burn-in.md +++ b/docs/features/burn-in.md @@ -18,6 +18,10 @@ Hardcode (burn-in) subtitles permanently into a video file using FFmpeg. 6. Select an output folder 7. Click **Generate** to start encoding (or use the **Generate** split-button item **Prompt for ffmpeg parameters and generate** to edit the FFmpeg command line first) +### Burn in selected lines only + +To burn in just part of the subtitle, select the lines in the subtitle grid, right-click and choose **Selected lines → Generate video with burned-in subtitles...**. The window opens with only the selected lines, and **Cut** is set from the first selected line's start to the last one's end, so a short clip needs no manual cut times. If no video is open you are asked to open one first. + ## Font Settings - **Font name** — Select the subtitle font @@ -145,4 +149,4 @@ Click **Batch mode** to queue several video/subtitle pairs (**Single mode** swit | Key | Action | |-----|--------| | Escape | Close / Cancel | -| F1 | Open help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | diff --git a/docs/features/change-frame-rate.md b/docs/features/change-frame-rate.md index a2f7433cf26..fde8e8cf45b 100644 --- a/docs/features/change-frame-rate.md +++ b/docs/features/change-frame-rate.md @@ -23,8 +23,10 @@ Convert subtitle timings from one frame rate to another. - **Video line** — When a video is open, the top of the window shows its file name and detected frame rate (hover for the full path) - **From frame rate** — Preset to the current frame rate (the toolbar value, which follows the open video), as in Subtitle Edit 4: a subtitle taken from a video was made at that video's frame rate - **To frame rate** — Remembers the last used value; if it equals the from rate, the PAL/NTSC-film counterpart (25 ↔ 23.976) is suggested instead -- **From frame rate** / **To frame rate** — Pick from the list, or click the browse button next to either to choose a video file; its frame rate is read and selected +- **From frame rate** / **To frame rate** — Pick from the list, type any other rate (e.g. `47.952`; a comma works as decimal separator too), or click the browse button next to either to choose a video file; its frame rate is read and selected. A typed rate is applied on Enter or when you leave the box; invalid input is reverted - The swap button exchanges the from and to values - **OK** applies the conversion; **Cancel** closes without changes +The **Frame rate** box on the main toolbar takes a typed rate the same way (Enter or leaving the box applies it, Escape reverts). + The window remembers its size and position between sessions. diff --git a/docs/features/command-palette.md b/docs/features/command-palette.md new file mode 100644 index 00000000000..9d45922b453 --- /dev/null +++ b/docs/features/command-palette.md @@ -0,0 +1,39 @@ +# Command Palette + +Find and run any main-window command by typing part of its name, without hunting through the menus. + +- **Menu:** Edit → Command palette... +- **Shortcut:** `Ctrl+Shift+K` (`Cmd+Shift+K` on macOS), configurable + +![Command Palette](../screenshots/command-palette.png) + +The palette lists the same commands as [Options → Shortcuts](shortcuts.md), so commands that have no menu entry and no shortcut can still be reached from the keyboard. Each row shows the command name, its group (File, Edit, Tools, Video, ...) and its current shortcut, if it has one. + +## How to Use + +1. Press `Ctrl+Shift+K` (or open **Edit → Command palette...**). +2. Type part of a command name. The list narrows with every key press, and the best match is selected. +3. Use the arrow keys to pick another match if needed. +4. Press **Enter** (or double-click a row, or click **OK**) to close the palette and run the command. + +## Searching + +- **Every word must match.** Type several words separated by spaces, in any order - `merge short` and `short merge` both find *Merge short lines*. A word can match the command name, its group name, or its shortcut keys, so `ctrl+s` or `tools` also work. +- **Initials.** A single word can be the first letters of the command's words: `fce` finds *Fix common errors*, `bc` finds *Batch convert*. +- **Ranking.** Commands whose name starts with what you typed come first, then initials matches, then names where every word starts a word in the name, then names that contain the text anywhere. +- **Recently used first.** With an empty search box, the commands you ran from the palette most recently are listed at the top (the last 10), followed by the rest in alphabetical order. Among equally good matches, recently used commands also win. The recent list lasts until Subtitle Edit is closed. +- When nothing matches, "No matching commands" is shown. + +Text box commands (the ones that only act on a focused text box, like the shortcuts in the text box category) are not listed, because the palette itself has the focus when you pick a command. The palette does not list itself. + +## Keyboard Shortcuts + +| Key | Action | +|-----|--------| +| Enter | Run the selected command | +| Up / Down | Select the previous / next command | +| Page Up / Page Down | Move the selection 10 commands up / down | +| Escape | Close without running anything | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | + +To change the palette's own shortcut, look for **Command palette** in [Options → Shortcuts](shortcuts.md). diff --git a/docs/features/compare.md b/docs/features/compare.md index 94de646b727..7eaaafead85 100644 --- a/docs/features/compare.md +++ b/docs/features/compare.md @@ -13,8 +13,11 @@ Compare two subtitle files side by side to identify differences in text, timing, 3. Use the file picker on either side (or drag-and-drop) to load a second subtitle file as the **Reference** on the right. 4. Each row holds a matching pair of lines, so the two sides always stay aligned. Differences are highlighted with colors: - **Red:** Lines present in only one side (added or removed). - - **Green:** Cells where the start time, end time, or text differs. - - **Orange:** Cells where the line number differs. + - **Green:** Rows where the start time, end time, or text differs. The changed words are highlighted inside the text. + - **Orange:** Rows where only the line number differs. + - **Violet:** Lines you changed in the compare window. + + When the timing differs, a time delta is shown next to the time codes, e.g. `Δ +120ms → −40ms`: how much later (+) or earlier (−) the reference starts and ends than the current line. 5. Use **Previous difference** / **Next difference** (F8 / Shift+F8) to jump between differing rows, or click the overview strip on the right to jump to any part of the file. 6. Use the tabs (**All**, **Differences**, **Text differences**) and the options to refine the comparison. Each tab shows how many rows it holds. @@ -35,7 +38,7 @@ The two lines are now always shown as a pair, marked with a link icon between th The current subtitle can be edited right in the compare window. The reference is read-only. -- **Take from reference:** The arrow button between the two sides copies the reference line's text and timing to the current line. For a line that exists only in the reference, it inserts the line into the current subtitle. +- **Take from reference:** The arrow button between the two sides copies the reference line's text and timing to the current line. For a line that exists only in the reference, it inserts the line into the current subtitle. Right-click the arrow (or the row; Ctrl+Click on macOS) and choose **Take text** or **Take timing** to copy only one part. - **Delete:** For a line that exists only in the current subtitle, the trash button deletes it. - **Edit a line:** Double-click a row, press F2, or click the pencil to edit the text and timing inline. **Take text** and **Take timing** copy just one part from the reference. - **Undo:** Every change can be undone, one step at a time. @@ -47,8 +50,9 @@ Editing is only available while the left side is the loaded subtitle. If you loa ### Comparison Options - **Ignore formatting:** Compare text only, ignoring formatting tags. -- **Ignore white space:** Ignore differences in whitespace. +- **Ignore whitespace:** Lines that differ only in spaces, tabs or line breaks do not count as different. - **Ignore numbering:** Lines that differ only in their number do not count as different. +- **Time tolerance (ms):** Start and end times that differ by this many milliseconds or less do not count as different. ### Visual Comparison - Side-by-side subtitle display, one aligned pair per row. @@ -57,14 +61,14 @@ Editing is only available while the left side is the loaded subtitle. If you loa - View modes: **All**, **Differences**, **Text differences**. ### Actions -- **Reload right from file:** Reload the right pane from the same file as the left pane (useful for diffing in-memory edits against the saved file). +- **Load saved file:** Load the saved file of the current subtitle as the reference (useful for diffing in-memory edits against the saved file). - **Export:** Export the comparison as an HTML file. ## Keyboard Shortcuts | Shortcut | Action | |----------|--------| -| F1 | Show help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | | F8 / Shift+F8 | Next / previous difference | | F2 | Edit the selected line | | Ctrl+Enter | Save the line being edited | diff --git a/docs/features/cut-video.md b/docs/features/cut-video.md index b9da59d1db7..3aaf1f46d15 100644 --- a/docs/features/cut-video.md +++ b/docs/features/cut-video.md @@ -59,4 +59,4 @@ The built-in audio visualizer helps you precisely identify cut points by showing |-----|--------| | Escape | Close / Cancel | | Space | Toggle video play/pause | -| F1 | Open help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | diff --git a/docs/features/edit.md b/docs/features/edit.md index d3b902c7d4a..30d167245df 100644 --- a/docs/features/edit.md +++ b/docs/features/edit.md @@ -52,7 +52,7 @@ Find and replace text in the subtitle. - **Menu:** Edit → Replace - **Shortcut:** `Ctrl+H` (`Cmd+Option+F` on macOS, since Cmd+H hides the app) -The buttons have Alt accelerators, underlined while Alt is held: `Alt+F` **Find next**, `Alt+R` **Replace & find next**, `Alt+A` **Replace all**. As in Subtitle Edit 4, the bare letter (`F`, `R`, `A`) also works once the focus has left the text boxes, e.g. after clicking a button. The Find window has `Alt+F` **Find next** and `Alt+P` **Find previous** the same way. The history button next to the search box lists recent searches; `Ctrl+Delete` removes the current search text from the search history. +The buttons have Alt accelerators, underlined while Alt is held: `Alt+F` **Find next**, `Alt+R` **Replace & find next**, `Alt+A` **Replace all**. As in Subtitle Edit 4, the bare letter (`F`, `R`, `A`) also works once the focus has left the text boxes, e.g. after clicking a button. The Find window has `Alt+F` **Find next** and `Alt+P` **Find previous** the same way. The history button next to the search box lists recent searches. Each entry has a **✕** to delete it (in the history menu and in the search box's drop-down; `Delete` on a highlighted entry does the same), and **Clear history** at the bottom of the menu removes them all. `Ctrl+Delete` removes the current search text from the search history. The line under the buttons reports the outcome: **Count** shows how many matches there are, **Replace all** shows how many occurrences were replaced, and **Replace & find next** keeps a running total of the occurrences replaced with the current search text. Typing a new search text starts the count over. @@ -111,7 +111,9 @@ Each rule has one of three match types, shown as an icon in the tree: | Case sensitive | Plain text match, exact case | | Regular expression | Full .NET regex syntax. Use `\n` to match a line break between two lines (`\r\n` and `\r` are accepted too and treated as `\n`). | -Unlike Find and Replace, regular expression rules here are matched in multiline mode: `^` and `$` match at the start and the end of *every* line, so `^- ` strips the dash from both lines of a two-line subtitle. Put `(?-m)` in front of the pattern to anchor to the whole subtitle text instead. The replacement text follows the same rules as in Replace above - `$1` and `\n` work, other backslash escapes do not. +The **Whole word** checkbox in the rule dialog makes a plain-text rule match only whole words (it is disabled for regular expression rules, where `\b` does the same). + +Unlike Find and Replace, regular expression rules here are matched in multiline mode: `^` and `$` match at the start and the end of *every* line, so `^- ` strips the dash from both lines of a two-line subtitle. Put `(?-m)` in front of the pattern to anchor to the whole subtitle text instead. In the replacement, `$1` and `\n` work like in Replace above, and regular expression rules here also support the case conversion escapes `\u` / `\l` (next character to upper / lower case) and `\U` / `\L` (upper / lower case until `\E` or the end). For example `^(?:Um|Uh),\s*(\w)` replaced with `\u$1` removes a leading "Um, " and capitalizes the word after it, and `\u\L$1` gives "Word" for "wORD". Write `\\u` for a literal `\u`; other backslash escapes are not supported. The Replace window does not support the case conversion escapes. > **Slow patterns:** the same five-second match timeout as in Find applies to each rule on each line. A rule that runs out of time is retired for the rest of the pass and flagged in the tree with "Regular expression gave up after 5 seconds - the rule is skipped, try a simpler pattern", so a catastrophically backtracking pattern shows up as an error rather than as a rule that silently matches nothing. The timeout is fixed; there is no setting for it. @@ -171,7 +173,7 @@ Rules can also be exported to and imported from **CSV** (choose the `.csv` type The CSV has one row per rule with this header: ```csv -Category,Find,ReplaceWith,Description,Active,Type +Category,Find,ReplaceWith,Description,Active,Type,WholeWord ``` | Column | Description | @@ -182,6 +184,7 @@ Category,Find,ReplaceWith,Description,Active,Type | `Description` | Optional note | | `Active` | `true` or `false` — whether the rule is enabled | | `Type` | `CaseInsensitive`, `CaseSensitive`, or `RegularExpression` | +| `WholeWord` | `true` or `false` — optional; older files without this column import as `false` | Values are quoted per RFC 4180, so `Find`/`ReplaceWith` may contain commas, double quotes (written as `""`) and line breaks. The header row is optional on import; unknown `Type` values fall back to `CaseInsensitive`. Files are written as UTF-8 (with BOM) so non-ASCII rules open correctly in spreadsheet apps. @@ -200,6 +203,15 @@ Jump to a subtitle by its line number. - **Menu:** Edit → Go to line number... - **Shortcut:** `Ctrl+G` (`Control+G` on macOS, where Cmd+G is find next) +## Command Palette + +Search every command by name and run it from the keyboard. + +- **Menu:** Edit → Command palette... +- **Shortcut:** `Ctrl+Shift+K` (`Cmd+Shift+K` on macOS) + +See [Command palette](command-palette.md). + ## Modify Selection Select or deselect subtitle lines based on rules (e.g., text contains, duration, etc.). diff --git a/docs/features/embedded-subtitles.md b/docs/features/embedded-subtitles.md index 945297f753c..f494ee3af7d 100644 --- a/docs/features/embedded-subtitles.md +++ b/docs/features/embedded-subtitles.md @@ -78,7 +78,7 @@ When the loaded video is `.mp4`, `.m4v` or `.mov`, **Video → Add/remove embedd | Insert | Add an external subtitle file | | Delete | Mark the selected track for deletion / undo deletion mark | | Escape | Close or cancel generation | -| F1 | Open help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | ## Notes diff --git a/docs/features/file.md b/docs/features/file.md index 13ae6276d53..1c44bb2a8a8 100644 --- a/docs/features/file.md +++ b/docs/features/file.md @@ -67,12 +67,26 @@ Close the secondary (original) subtitle file in translation mode. ## Close Translation -Shown while an editable original is open: discards the translation and makes the original the working subtitle (you are asked to save unsaved changes first). Not offered when the original is a read-only reference. +Shown while an editable original is open: closes the translation and makes the original the working subtitle. The translation file on disk is not changed. + +- You are always asked first: with unsaved changes you get the usual save prompt, otherwise a confirmation ("Close the translation ...? The original subtitle ... becomes the subtitle you edit."), since the item sits right next to **Close original** in the menu. +- When the original lines up with the translation, the rows keep their time codes and the original text moves into the text column. +- When the original does **not** line up 1:1 (see [Translation Mode](main-window.md#translation-mode)), the original subtitle itself - with its own lines and time codes, and any edits you made to the original text - becomes the working subtitle. The translation's timing is not carried over. +- Not offered when the original is a read-only reference. ## Format Properties Formats with their own settings (ASSA, EBU STL, PAC, ...) get a ** properties...** item here, opening the same dialog as the gear button next to the format combo box. +## Reload When Changed Outside Subtitle Edit + +When the open subtitle file is changed by another program - another editor, a script, a sync tool - Subtitle Edit notices it when you switch back to its main window: + +- **No unsaved changes:** the file is reloaded right away, and the status bar shows "Subtitle reloaded (changed outside Subtitle Edit)". +- **Unsaved changes:** you are asked "The file ... was changed outside Subtitle Edit. Reload it and lose your changes?" Answer **No** to keep your edits; you are not asked again until the file changes once more. + +The reload keeps the video, the selected line, the encoding, the original subtitle in translation mode, the video offset and SMPTE timing. There is no live file watcher: the file's time stamp and size are compared when the window is activated. A converted import (for example a file opened from a video container) is not checked, and a file that is missing or empty (likely still being written) is skipped until the next time. There is no setting for this. + ## Recent Files Quick access to recently opened subtitle files. @@ -101,6 +115,35 @@ Import image files and create subtitle entries from them. Read the subtitles out of an image-based file (Blu-ray `.sup`, VobSub `.sub`, `.ts`, BDN xml) and run [OCR](ocr.md) on them to get editable text. +### Import subtitles from DVD + +Rip the subtitles of a DVD title straight from its IFO and VOB files, then [OCR](ocr.md) them to text. + +- **Menu:** File → Import → Subtitles from DVD (IFO/VOB)... + +![Import Subtitles from DVD](../screenshots/import-dvd.png) + +1. Click the folder button next to **IFO file** and open the title set's IFO file (for example `VIDEO_TS\VTS_01_0.IFO`), or click **Add VOB files** - or drop IFO/VOB files on the window +2. With an IFO, pick the **Title**. Each title shows its duration, number of chapters and subtitle languages; the longest complete title is selected. Opening `VIDEO_TS.IFO` lists the titles of every title set. A title whose VOB files are not all there is marked "VOB files missing (x% found)" +3. Check the **VOB files** list - the title's VOB files are filled in. **Remove**, **Move up**, **Move down** and **Clear** edit the list +4. Check the **Video standard** - *PAL (25 fps)* or *NTSC (29.97 fps)*, taken from the IFO when there is one +5. Click **Start ripping**. **Abort** (or Escape) stops it +6. When the DVD has several subtitle streams, pick the language in the next window; then the [OCR](ocr.md) window opens with the chosen stream + +Ripping a title from its IFO reads only that title's cells, in play order. If you edit the VOB list, all listed VOB files are read instead. The palette and the stream languages come from the IFO (also for loose VOB files when the title set's IFO is next to them), and the language is passed on to OCR. + +Subtitle Edit does not decrypt CSS. If the VOB files were copied from a DVD without decrypting, a warning tells how many subtitle packets are still encrypted (their images would be garbled) and asks whether to continue - decrypt the DVD with a ripping tool first for a clean result. + +**File → Open** on an `.ifo` file opens this window with it, and opening a single `.vob` file with subtitles goes straight to the language pick and OCR. + +### Other sources opened with File → Open + +These are recognised when opened with **File → Open** (or **Import → Image-based subtitle for OCR...**): + +- **PSP UMD Video** - `.mps` and `.pmf` files (and `.subs` dumps of their subtitles): the subtitle images are read, you pick the stream when there are several, and they go to [OCR](ocr.md) +- **HD-DVD `.sup`** - HD-DVD subpicture files are read and sent to [OCR](ocr.md) +- **CEA-608 closed captions in MPEG video** - DVD `.vob` files without subpictures, program streams (`.mpg`, `.mpeg`, `.m2p`) and bare MPEG video (`.m2v`, `.m1v`, `.mpv`) are searched for Line 21 / ATSC A/53 / SCTE 20 closed captions; you pick the caption track when there are several, and the captions are loaded as text + ### Import image-based subtitle for edit Open an image-based subtitle in the [image-based subtitle editor](binary-edit.md) — moving, resizing and re-colouring the bitmaps — without converting them to text. diff --git a/docs/features/import-plain-text.md b/docs/features/import-plain-text.md index 0d2152e177c..d0c6f524147 100644 --- a/docs/features/import-plain-text.md +++ b/docs/features/import-plain-text.md @@ -40,7 +40,9 @@ Setup dialog: - **Engine** — Uses the Crisp ASR engine; click **Download / update engine...** if it is not installed yet - **Aligner model** — Pick an alignment model. The wav2vec2 aligners are language-specific and small (~200–300 MB); the Canary CTC and Qwen3 forced aligner models are multilingual -Missing models are downloaded automatically when you press OK. Progress is shown per window and line while aligning. If the script is longer than the speech in the video, the trailing lines cannot be aligned and a warning tells you how many lines were matched. +Missing models are downloaded automatically when you press OK. Progress is shown per window and line while aligning; **Cancel** (or Esc) stops the alignment and leaves the lines as they were, and OK is unavailable until it has finished. If the script is longer than the speech in the video, the lines that cannot be aligned are placed by reading time and a warning tells you how many lines are only estimated. + +Ends are set from reading time (see below), but a line always stays up long enough for the maximum characters per second from Settings → General, as long as that does not run into the next line. Both align buttons use the **Gap (ms)** set in this dialog. #### Set end times from isolated speech diff --git a/docs/features/improve-time-codes.md b/docs/features/improve-time-codes.md index b9e12a8adfb..b15160d49d0 100644 --- a/docs/features/improve-time-codes.md +++ b/docs/features/improve-time-codes.md @@ -56,7 +56,7 @@ One row per subtitle line, with the shift of its start and end in milliseconds a | Heard where it was | Speech-to-text heard the line where it already was, not where the aligner moved it. The aligner's time codes are offered **unticked**. | | Moved with the sync | The subtitle was synced first, and the aligner left this line where the sync put it - a line with no speech, one already in place after the sync, or one the aligner could not place. | | Already in place | The aligner agrees with the current time codes. | -| No speech | Nothing to listen for - blank lines, `[sound descriptions]`, `(sighs)`, `♪`. These lines are never moved. | +| No speech | Nothing to listen for - blank lines, `[sound descriptions]`, `(sighs)`, song lyrics (a line starting or ending with `♪`/`♫`, or wrapped in `#`), positioned signs (`{\pos}`/`{\move}`) and ASSA comments. These lines are never moved by the aligner. | | Kept - shift too large | The start would have moved more than *Max shift*, so the line was left alone. | | Kept - aligner failed | The aligner could not process this group of lines. | @@ -106,6 +106,8 @@ If speech-to-text hears less than 30% of the subtitle's words, the status line a - The start is where the first word of the line begins. - The end is where the last word ends - but a line is never cut shorter than the minimum display time or the optimal reading speed from Settings → General, as long as that does not show it for longer than it used to be shown or run into the next line. -- Overlaps that were in the subtitle on purpose are left alone; the tool never creates new ones. +- A line is held long enough for the maximum reading speed (characters per second) from Settings → General, room permitting. +- Overlaps that were in the subtitle on purpose - at least half a second and half of the shorter line, as with two speakers at once or a sign over dialogue - are left alone. Smaller overlaps are mistiming and are closed, keeping the minimum gap. The tool never creates new ones. +- In frame mode (Settings → General) the moved lines are put on whole frames, keeping the minimum gap. -Run [Beautify time codes](beautify-time-codes.md) afterwards to snap the result to frames and shot changes. +Run [Beautify time codes](beautify-time-codes.md) afterwards to snap the result to shot changes. diff --git a/docs/features/list-errors.md b/docs/features/list-errors.md index 30a2f81ec72..3107f0f4048 100644 --- a/docs/features/list-errors.md +++ b/docs/features/list-errors.md @@ -5,7 +5,7 @@ List every line that breaks a rule - reading speed, duration, line length, overl - **Menu:** Tools → List errors... - **Shortcut:** Ctrl+F8 (Cmd+F8 on macOS) - +![List Errors](../screenshots/list-errors.png) The checks are the same ones that color cells in the [subtitle grid](subtitle-grid.md): which checks run is set by the **Syntax coloring** switches in [Settings](settings.md#syntax-coloring), and their limits come from the active rules profile in **Settings → Rules**. @@ -61,4 +61,4 @@ Every target exports the rows exactly as shown, so an active card filter is part | Enter / double-click | Go to the selected line | | Home / End | First / last row | | Escape | Close | -| F1 | Open help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | diff --git a/docs/features/main-window.md b/docs/features/main-window.md index 8cb7ef166ea..5cf51648ebe 100644 --- a/docs/features/main-window.md +++ b/docs/features/main-window.md @@ -19,11 +19,11 @@ The menu bar provides access to all features organized into categories: | Menu | Description | |------|-------------| | **File** | New, New (keep video), New window, Open, Open (keep video), Open original, Edit original subtitle, Close original, Close translation, Reopen, Restore auto-backup, Save, Save as, Save forced lines as, format properties, Open containing folder, Compare, Statistics, Import, Export, Exit | -| **Edit** | Undo, Redo, Show history for undo, Find, Find next, Replace, Multiple replace, Go to line number, Right-to-left mode and the RTL tools (fix RTL via Unicode control chars, remove Unicode control chars, reverse RTL start/end), Modify selection, Invert selection, Select all | -| **Tools** | Adjust durations, AI review, Apply duration limits, Apply min. gap between subtitles, Batch convert, Beautify time codes, Bridge gaps, Change casing, Change formatting, Check and fix Netflix errors, Convert actors, Fix common errors, List errors, Make new empty translation from current subtitle, Merge continuation lines, Merge lines with same text, Merge lines with same time codes, Merge short lines, Merge two subtitles, Remove text for hearing impaired, Remove/replace Unicode characters, Renumber, Snap all times to frames, Sort subtitles, Split/rebalance long lines, and below a separator Join subtitles and Split subtitle | +| **Edit** | Undo, Redo, Show history for undo, Find, Find next, Replace, Multiple replace, Go to line number, [Command palette](command-palette.md), Right-to-left mode and the RTL tools (fix RTL via Unicode control chars, remove Unicode control chars, reverse RTL start/end), Modify selection, Invert selection, Select all | +| **Tools** | Adjust durations, AI review, Apply duration limits, Apply min. gap between subtitles, Batch convert, Beautify time codes, [Improve time codes (forced alignment)](improve-time-codes.md), Bridge gaps, Change casing, Change formatting, Check and fix Netflix errors, Convert actors, Fix common errors, List errors, Make new empty translation from current subtitle, Merge continuation lines, Merge lines with same text, Merge lines with same time codes, Merge short lines, Merge two subtitles, Remove text for hearing impaired, Remove/replace Unicode characters, Renumber, Snap all times to frames, Sort subtitles, Split/rebalance long lines, and below a separator Join subtitles and Split subtitle | | **Plugins** | Run installed plugins; manage installed plugins (only shown when **Options → Settings → Appearance → Show Plugins menu** is on) | | **Spell check** | Spell check, Find double words, Find double lines, Add name to names list, Get dictionaries | -| **Video** | Open video, Open video from URL, Open recent video, Close video file, Open/remove second subtitle file, Audio tracks, Go to video position, Speech to text, Text to speech, OCR burned-in subtitle, Generate video with burned-in subtitles, Generate transparent video with subtitles, Generate blank video, Embed subtitles, Generate/import shot changes, List shot changes, Undock/Dock video controls, Toggle select subtitle while playing, and a **More** submenu (Chapters, Cut video, Find voices in video and clone, Re-encode video, Remux video, Set video offset, SMPTE timing, Toggle waveform toolbar) shown while a video is loaded | +| **Video** | Open video, Open video from URL, Open recent video, Close video file, Open second subtitle file, Edit second subtitle settings, Remove second subtitle file, Audio tracks, Go to video position, Speech to text, Text to speech, Speak from current line, Play with speech, TTS voice manager, OCR burned-in subtitle, Generate video with burned-in subtitles, Generate transparent video with subtitles, Generate blank video, Embed subtitles, Generate/import shot changes, List shot changes, Undock/Dock video controls, Toggle select subtitle while playing, and a **More** submenu (Chapters, Cut video, Find voices in video and clone, [Generate background music](background-music.md), Re-encode video, Remux video, Set video offset, SMPTE timing, Toggle waveform toolbar) shown while a video is loaded | | **Synchronization** | Adjust all times, Visual sync, Point sync, Point sync via other subtitle, Change frame rate, Change speed | | **Translate** | Auto-translate, Auto-translate via copy-paste | | **Options** | Settings, Shortcuts, Word lists, Choose UI language | @@ -81,13 +81,15 @@ The subtitle grid shows all subtitle lines in a table format. Each row represent | Column | Description | |--------|-------------| | **#** | Line number | -| **Start time** | When the subtitle appears (e.g., `00:01:23,456`) | -| **End time** | When the subtitle disappears | +| **Show** | When the subtitle appears (e.g., `00:01:23,456`) | +| **Hide** | When the subtitle disappears | | **Duration** | Display duration | -| **CPS** | Characters per second (reading speed) | -| **WPM** | Words per minute | +| **Chars/sec** | Characters per second (reading speed) | +| **Words/min** | Words per minute | | **Text** | The subtitle text content | -| **Original** | Original text (visible in translation mode) | +| **Original text** | Original text (visible in translation mode) | + +More columns (**Gap**, **Style**, **Actor**, **Layer**, **Pixel width**, **Forced**, ...) can be turned on or off by right-clicking the column header, e.g. **Show "Gap" column**, or with **Columns...**. **Mouse:** - **Click** a row to select it and load its text into the text editor @@ -354,12 +356,12 @@ Panel sizes can be adjusted by dragging the splitters (dividers) between areas. You can undock the video player or audio visualizer into separate windows for multi-monitor setups: - **Undock video controls** — Move video player to its own window -- **Redock video controls** — Return video player to the main window +- **Dock video controls** — Return video player to the main window ## Translation Mode When you open an original subtitle file (**File → Open original subtitle**), the main window enters translation mode: -- The subtitle grid shows an additional **Original** column +- The subtitle grid shows an additional **Original text** column - The text editor shows both the original and translation text - This allows side-by-side translation work @@ -399,7 +401,7 @@ Subtitle Edit accepts a few command-line arguments at startup, useful for deskto | `/video:` | Open the given video file alongside the subtitle. `--video:` and `--video ` are accepted too. | | `/batchconvertui` | Launch directly into the standalone **Batch Convert** window instead of the full editor. `--batchconvertui` is accepted too. | -The video file is always loaded when supplied via `/video:` (or `--video`), even if **Options → Settings → Video → Auto-open** is disabled — a flag on the command line is treated as an explicit instruction. +The video file is always loaded when supplied via `/video:` (or `--video`), even if **Options → Settings → Video player → Auto-open video file when opening subtitle** is disabled — a flag on the command line is treated as an explicit instruction. Examples (Windows shell): diff --git a/docs/features/merge-continuation-lines.md b/docs/features/merge-continuation-lines.md new file mode 100644 index 00000000000..770de388ad8 --- /dev/null +++ b/docs/features/merge-continuation-lines.md @@ -0,0 +1,56 @@ +# Merge Continuation Lines + +Merge subtitles where one sentence has been split across two or more consecutive lines, with a preview of every merge before anything is changed. + +- **Menu:** Tools → Merge continuation lines... +- **Shortcut:** Configurable (no default) + +![Merge Continuation Lines](../screenshots/merge-continuation-lines.png) + +Unlike [Merge Short Lines](merge-short-lines.md), which merges by length, this tool looks at punctuation: a line that does not end a sentence is joined with the line after it. This is useful for subtitles made by speech recognition or for scripts that will be read by [Text to Speech](text-to-speech.md), where a sentence spoken as one unit sounds more natural. + +## How to Use + +1. Open **Tools → Merge continuation lines...** +2. Adjust **Max gap between lines (ms)** and **Max characters per paragraph** - the list of candidates updates as you change them. +3. Uncheck any merge in the **Merge** column you do not want. **Select all** and **Invert selection** change all the check boxes at once. +4. Click **OK** to apply the checked merges. + +The status line shows how many candidates were found ("Continuation candidates found: 12") or "No continuation candidates found". The merge can be undone with **Edit → Undo**. + +## What Counts as a Continuation + +Two consecutive lines are offered for merging when all of these hold: + +- The first line does **not end a sentence** - it does not end with `.`, `!`, `?` or a sentence-ending mark of the subtitle's language (detected automatically), also when a closing quote follows the mark. A line ending with an ellipsis (`...` or `…`) counts as unfinished and *is* merged. Formatting tags are ignored when checking. +- The **gap** from the end of the first line to the start of the next is less than **Max gap between lines (ms)**. +- The two texts together (without formatting tags) are shorter than **Max characters per paragraph**. +- Neither line is a **dialog line** starting with a dash (`-`, `‐`, `–`, `—`) - those are two speakers, not one sentence. +- Neither side is a **music line** - the first line ending with `♪`/`♫`, or the next one starting with it. + +An empty first line also qualifies. When several lines in a row qualify, they are all merged into one subtitle. + +## The Merge + +The merged subtitle starts at the first line's start time and ends at the last line's end time. The texts are joined with a space and re-broken with auto-break for the subtitle's language. The **Merged** column shows exactly the text that will be written. + +## Options + +| Option | Description | Default | +|--------|-------------|---------| +| Max gap between lines (ms) | Lines further apart than this are never merged (0-10000) | 500 | +| Max characters per paragraph | Upper limit for the merged text (20-1000) | Max line length × max number of lines from Options → Settings | + +The values are remembered for the next time the tool is opened from the Tools menu. + +## Other Places + +- **[Text to Speech](text-to-speech.md#merge-continuation-lines)** - before generating, Subtitle Edit offers to merge continuation lines (using a 500 ms gap and 500 characters), so each sentence is spoken in one go. Turn the prompt off with **Text to speech: prompt to merge continuation lines** in **Options → Settings → Tools**. +- **[Batch Convert](batch-convert.md)** - *Merge continuation lines* is one of the batch functions, with its own max gap and max characters. + +## Keyboard Shortcuts + +| Key | Action | +|-----|--------| +| Escape | Close without changes | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | diff --git a/docs/features/ocr.md b/docs/features/ocr.md index 7d4406574b6..d8a52485f5e 100644 --- a/docs/features/ocr.md +++ b/docs/features/ocr.md @@ -31,6 +31,8 @@ Built-in trainable OCR engine. - Very accurate once trained - Best for consistent fonts (like DVD/Blu-ray subtitles) - **Train nOCR database...** - a database can also be trained from installed fonts instead of being taught during OCR. Open the nOCR database settings (the settings button next to the database list) and right-click anywhere in that dialog to reach it. Pick one or more fonts, a font size, the characters to train (or **Import characters from subtitle file...**), letter combinations that might end up in one image, whether to include bold and italic, and the number of line segments; **Start training** renders every character in every selected font and saves the result as a new `.nocr` database in the OCR folder, ready to pick from the database list +- **Optimize nOCR database...** - in the same right-click menu. Removes the lines of each character that don't tell it apart from similar characters (e.g. the stem that "i", "l" and "j" share), using glyphs rendered from common subtitle fonts as the check: every similar character must still be rejected, and the character itself must still match as well as before. The database gets smaller and OCR faster, usually with fewer errors - the shipped Latin database is already optimized this way. It takes up to a minute; the original is kept as `.nocr.bak` in the OCR folder. Also available in seconv as `seconv optimize-nocr ` +- **Mixed italic in one image** - when an italic letter touches an upright one and both end up in a single image, type the text with italic tags, e.g. `it`. The tagged part is italic and the rest upright, whatever the surrounding word is, so an italic line comes out as `... it?` instead of nested tags. This works the same in Binary OCR ### Binary OCR Binary image comparison engine, listed as **Binary image compare** in the engine dropdown. @@ -59,7 +61,7 @@ Local LLM-based OCR via an Ollama server (e.g. with a vision model). ### llama.cpp Local LLM-based OCR using a llama.cpp-compatible server. Subtitle Edit can download llama.cpp and the model for you, or talk to a server you run yourself. - Default endpoint: `http://127.0.0.1:8080/v1/chat/completions` -- Curated vision models, listed best-first for subtitles: **GLM-OCR 0.9B** (Q8_0, about 1.4 GB — the default, and the most accurate on subtitle images), **LFM2.5-VL 3B** (Q8_0, about 3.5 GB — a general vision model with flawless character recognition, slower and a bigger download; it uses its own prompt as long as the shared prompt below is unedited), **PaddleOCR-VL 1.6** (about 1.8 GB, 109 languages), **HunyuanOCR 1.5** (Q8_0, about 1.3 GB) and **LightOnOCR 1B** (Q8_0, about 1.2 GB — the least accurate and much the slowest). Custom vision models also appear in the list: put the `*.gguf` in the llama.cpp models folder together with its `mmproj` vision projector, named either `mmproj-.gguf` or `-mmproj.gguf` (the two naming schemes used on Hugging Face). A `*.gguf` without a projector next to it is not offered — it cannot see the image +- Curated vision models, listed best-first for subtitles: **GLM-OCR 0.9B** (Q8_0, about 1.4 GB — the default, and the most accurate on subtitle images), **LightOnOCR-3 4B** (Q8_0, about 5.2 GB — as accurate as GLM-OCR and more than twice as fast, but a much bigger download), **LFM2.5-VL 3B** (Q8_0, about 3.5 GB — a general vision model with flawless character recognition, slower and a bigger download; it uses its own prompt as long as the shared prompt below is unedited), **PaddleOCR-VL 1.6** (about 1.8 GB, 109 languages), **HunyuanOCR 1.5** (Q8_0, about 1.3 GB), **QARI-OCR 0.2.2.1** (Q8_0, about 2.4 GB — fine-tuned for Arabic and the most accurate choice there; it joins two-line subtitles into one line) and **LightOnOCR-3 0.8B** (Q8_0, about 1.0 GB — by far the fastest, with slightly more misread words than the models above). Custom vision models also appear in the list: put the `*.gguf` in the llama.cpp models folder together with its `mmproj` vision projector, named either `mmproj-.gguf` or `-mmproj.gguf` (the two naming schemes used on Hugging Face). A `*.gguf` without a projector next to it is not offered — it cannot see the image - The settings dialog has a download/update button for the llama.cpp engine itself; the dot next to it turns amber when a newer build than the one installed is available ### CrispEmbed @@ -165,7 +167,7 @@ number, time codes, duration and image size. | F3 / Shift+F3 | Find next / Find previous | | Ctrl++ | Zoom in (images in grid) | | Ctrl+- | Zoom out (images in grid) | -| F1 | Show help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | ### Subtitle Grid @@ -188,12 +190,14 @@ number, time codes, duration and image size. ## Pre-processing -Before OCR, you can apply image pre-processing: -- Crop transparent colors -- Remove borders (with configurable border size) -- Invert colors -- To one color (keep pixels brighter than a darkness threshold) -- Binarize (convert to black/white using Otsu thresholding) +Before OCR, you can apply image pre-processing via the **Image pre-processing** toggle button in the OCR window (it shows as pressed while any pre-processing is active): +- **Crop transparent colors** +- **Remove borders** (with configurable **Border size**) +- **Inverse colors** +- **One color (white)** (keep pixels brighter than a **Darkness threshold**) +- **Binarize** (convert to black/white using Otsu thresholding) + +The settings are remembered between sessions and applied automatically the next time you open the OCR window. **Reset** in the **Pre-processing** window sets all options back to their defaults (all off, border size 2, darkness threshold 128). ## Batch OCR diff --git a/docs/features/point-sync-via-other.md b/docs/features/point-sync-via-other.md index f7c36f5bdc1..9d16498d59a 100644 --- a/docs/features/point-sync-via-other.md +++ b/docs/features/point-sync-via-other.md @@ -10,12 +10,14 @@ Synchronize a subtitle file using another subtitle file as reference. ## How to Use 1. Open the subtitle you want to sync -2. Open **Sync → Point sync via other subtitle...** -3. Click the browse button in the right pane to load the reference subtitle +2. Open **Synchronization → Point sync via other subtitle...** +3. Click the browse button in the right pane to load the reference subtitle - a subtitle file, a Blu-ray `.sup`, or a subtitle track in an `.mkv` or `.mp4` (pick the track when there are several) 4. Select a line in your subtitle and the matching line in the other subtitle, then click **Set sync point** — or **Set sync point via video...** to pick the time from the video for a line the other subtitle does not cover 5. Repeat for more sync points; they are listed in the middle and can be removed with right-click **Delete** or the Delete/Backspace key 6. Click **Apply** to apply the sync points and keep working, or **OK** to apply and close +An image based reference (a Blu-ray `.sup`, a PGS/VobSub/DVB track in `.mkv` or a VobSub track in `.mp4`) is not OCR'ed: sync points only need its time codes, so the right grid shows each line's image instead of text, the same way the OCR window does. Press **Ctrl+P** to see the selected image full size in its own window, where the arrow keys step to the previous/next image (same as the OCR window). **Find text** is not available for an image based reference. + Both grids have a **Gap after** column with the silence after each line, the same as the main window's **Gap** column. Gaps of 3 seconds or more are shown as a green badge that gets stronger at 6, 12 and 25+ seconds, so the long silences stand out. **Find text** above each grid searches that subtitle. ### Choosing good sync points @@ -31,3 +33,14 @@ The sync point list in the middle is kept in subtitle order, and a line has at m **Set sync point via video...** opens the same window as [Point sync](point-sync.md#set-sync-point-window): the video with the subtitle drawn on it, playing the audio track selected in the main window, and a **Sync point time code** box that follows the video and can be edited by hand. Opened from here the window has no waveform pane. The window remembers its size and position between sessions. + +## Keyboard shortcuts + +| Shortcut | Action | +|----------|--------| +| Ctrl+P | View the selected image of an image based reference full size (arrow keys step to the previous/next image) | +| Ctrl+Plus / Ctrl+Minus | Make the images of an image based reference bigger/smaller | +| Ctrl+G | Go to line number, in the grid used last (the left one at first) | +| Delete / Backspace | Remove the selected sync point (sync point list focused) | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | +| Escape | Cancel | diff --git a/docs/features/point-sync.md b/docs/features/point-sync.md index 52c057927f4..70c9bba49ff 100644 --- a/docs/features/point-sync.md +++ b/docs/features/point-sync.md @@ -9,7 +9,7 @@ Synchronize subtitles using multiple reference points. ## How to Use -1. Open **Sync → Point sync...** +1. Open **Synchronization → Point sync...** 2. Select a subtitle line in the list and click **Set sync point** to set its correct video position 3. Repeat for additional sync points as needed for accuracy; a sync point can be removed with right-click **Delete** on the list or the Delete/Backspace key 4. Click **OK** to apply diff --git a/docs/features/re-encode-video.md b/docs/features/re-encode-video.md index e4dc43680dd..b286224037b 100644 --- a/docs/features/re-encode-video.md +++ b/docs/features/re-encode-video.md @@ -26,4 +26,4 @@ Re-encode a video file with a different frame rate or container format using FFm | Key | Action | |-----|--------| | Escape | Close / Cancel | -| F1 | Open help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | diff --git a/docs/features/remove-unicode-characters.md b/docs/features/remove-unicode-characters.md index d5b047f0dd3..df3867ccc88 100644 --- a/docs/features/remove-unicode-characters.md +++ b/docs/features/remove-unicode-characters.md @@ -5,7 +5,7 @@ Find every character outside Latin-1 (code point above 255) in the subtitle and - **Menu:** Tools → Remove/replace Unicode characters... - **Shortcut:** None (menu only) - +![Remove/Replace Unicode Characters](../screenshots/remove-unicode-characters.png) Typical targets are typographic quotes and apostrophes, the `…` ellipsis, em and en dashes, music notes and emoji - characters that some players, encoders or delivery formats cannot show. Accented Latin-1 letters such as `é`, `ü` and `ñ` are below the limit and are not listed. @@ -48,4 +48,4 @@ Every non-empty **Replace with** is saved when you click OK and filled in again |-----|--------| | Space | Toggle Apply for the selected rows | | Escape | Close without changes | -| F1 | Open help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | diff --git a/docs/features/remux-video.md b/docs/features/remux-video.md index f0185fc777a..1e217015dd2 100644 --- a/docs/features/remux-video.md +++ b/docs/features/remux-video.md @@ -5,7 +5,7 @@ Repackage the video with new audio tracks and optional soft subtitles into an MP - **Menu:** Video → More → Remux video... - **Shortcut:** None (menu only) - +![Remux Video](../screenshots/remux-video.png) Remuxing copies the streams into a new container, so it is quick and lossless. Use it to attach a dubbed or translated audio track (for example from [Text to Speech](text-to-speech.md)), to add subtitle tracks that can be switched on and off in the player, to embed CEA-608 closed captions, or to convert between MP4, MKV, MOV and MPG. To draw the subtitle into the picture instead, see [Burn-In Subtitles](burn-in.md). @@ -76,4 +76,4 @@ The window remembers its size and position. | Ctrl+Up / Ctrl+Down | Move the selected audio or subtitle file up / down | | Delete | Remove the selected file from its list | | Escape | Close (not while remuxing) | -| F1 | Open help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | diff --git a/docs/features/renumber.md b/docs/features/renumber.md index 052586209c2..fe3c6d61f0b 100644 --- a/docs/features/renumber.md +++ b/docs/features/renumber.md @@ -28,4 +28,4 @@ Subtitle Edit updates the visible subtitle numbers in order. Timing, text, forma |-----|--------| | Enter | Apply | | Escape | Close / Cancel | -| F1 | Open help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | diff --git a/docs/features/settings.md b/docs/features/settings.md index d1440c9c519..815c3dd652c 100644 --- a/docs/features/settings.md +++ b/docs/features/settings.md @@ -22,7 +22,7 @@ The window is split into sections; the list below follows the order they appear The subtitle rules that drive error checking, the grid's warning colors, and tools such as [Fix common errors](fix-common-errors.md). -- **Profiles** — Rules are stored per profile, so you can switch between e.g. Netflix, broadcast and default. Profiles can be exported and imported +- **Profiles** — Rules are stored per profile, so you can switch between e.g. Netflix, Amazon Prime, Arte, broadcast and default. Built-in profiles include **TikTok/YouTube-shorts (9:16)** (24 chars, 2 lines) and **TikTok/YouTube-shorts (1-3 words)** (one short line per cue). Profiles can be exported and imported - **Single line max length**, **Optimal chars/sec**, **Max chars/sec**, **Max words/min** - **Min duration (ms)**, **Max duration (ms)** - **Min gap (ms)** — The "..." button opens a calculator: pick a frame rate and a number of frames and it works out the milliseconds. It opens on the current video's frame rate and the frame count already configured. Shown in millisecond mode only; in frame mode the value is entered in frames @@ -34,22 +34,48 @@ The subtitle rules that drive error checking, the grid's warning colors, and too - **Default new subtitle duration (ms)** - The duration a newly inserted subtitle gets, e.g. when inserting at the video position - **Time up/down increment (ms)** - The step of the start/end/duration up-down boxes in millisecond mode +- **Move selected lines shortcut step (ms)** and **Move start/end shortcut step (ms)** - How far the move shortcuts shift lines or their start/end +- **Move lines: shorten previous/next line instead of overlapping it** - **Prompt before delete**, **Lock time codes**, **Remember window position and size** - **Show full file path in title bar** — Show the subtitle file's full path in the main window title instead of only its name. Off by default +- **Show recent files (for reopen)** — Turn off to stop recording recent files; this also hides the Reopen menus and clears the lists - **Time code mode** — How times are shown and typed: *Time (hh:mm:ss,zzz)* with milliseconds, *Frames (hh:mm:ss:ff)*, or *Frame numbers* - the absolute frame number at the current frame rate (e.g. 15230), also for durations and the video position, so a sync offset is just "video frame - start frame". Both frame modes snap edited times to frames. The mode is also shown in the status bar - click it (or use the "Toggle time code mode" shortcut) to cycle through the three. +- **Store times on video frames (not frames within each second)** — Only for *Frames (hh:mm:ss:ff)*, off by default. Stores each time at the exact time of a real video frame, so the milliseconds in a saved `.srt` match the video and a Blu-ray sup export. See [Frames and video frames](#frames-and-video-frames) below. - **Limit number of lines in subtitle text box** - **Open last recent file on start** -- **Auto-convert encoding to UTF-8 on open**, **Force CR+LF on save**, **Auto-trim white-space** +- **Auto-convert encoding to UTF-8 on open**, **Force CR+LF on save (text subtitle files)** (also used by [Batch convert](batch-convert.md)), **Auto-trim white-space** - **Warn on save when lines exceed the format's limits (e.g. SCC 32 chars/line)** - **Remove blank lines when opening a subtitle** — Off by default +- **Copy text via xclip/wl-copy (keeps accented characters)** — Linux only - **Default encoding** - **Subtitle grid Enter-key / single-click / double-click action** — What each gesture does to the video position and focus - **Subtitle grid, center when selecting prev/next row** - **Save as behavior**, **Save as: append language code**, **Default save location** (with a custom folder) - **Auto-save** — Save the open file while editing -- **Auto-backup** — Automatic backups at a set interval, with a restore dialog, and **Auto-backup retention (days)** for how long they are kept +- **Auto-backup** — Automatic backups every **Auto-backup interval (minutes)**, with a restore dialog, and **Auto-backup retention (days)** for how long they are kept - **Auto-backup settings** — Keeps dated copies of `Settings.json` (settings and shortcuts). **Settings backup interval (days)** sets how often: the check runs when Subtitle Edit starts, and `0` means every start. A backup is skipped when nothing but the recent files lists has changed since the newest backup. **Settings backups to keep** sets how many copies are kept (default 30). Restore them from File → Restore auto-backup → Settings +### Frames and video frames + +At 25, 24, 30 or 50 fps a second holds a whole number of frames, so there is nothing to choose here. At **23.976, 29.97 and 59.94 fps** it does not, and the two ways of counting frames end up slightly different. + +- **The video** counts its frames from the start without stopping: frame 0, 1, 2, ... At 23.976 fps each frame is about 41.708 ms, and every frame has one exact time. +- **hh:mm:ss:ff** shows whole seconds plus the frame within that second (0-23). Since a real second holds a little fewer than 24 frames, this count slowly slides away from the video's frames, up to one frame, and then lines up again. + +By default, a time typed or snapped in frame mode is stored on the hh:mm:ss:ff count: `00:01:58:22` is stored as 118 s + 22 frames = **00:01:58,918**. The video frame shown at that point starts at **00:01:58,910**. Turn on **Store times on video frames (not frames within each second)** and `00:01:58:22` is stored as **00:01:58,910**. The display does not change, only the stored milliseconds do. + +Turn it on when the milliseconds have to match the video exactly, for example: + +- You check an `.srt` in a player (MPC-HC, mpv, ...) and then export a **Blu-ray sup**. The sup export always puts times on video frames, so with this option the `.srt` and the `.sup` show each subtitle on the same frame. +- Another tool reads the times as real video time. + +Good to know: + +- Only lines you add or re-time are stored this way. Existing lines keep their times; use **Tools → Snap all times to frames** to put them all on video frames. +- Because times are whole milliseconds, two neighbouring video frames can now and then show the same hh:mm:ss:ff. Typing that time code picks the nearer one; step the frames with the up/down arrows of the time box to reach the other. +- With **SMPTE timing** on (Video → More), frames are exactly 1/24 (1/30, 1/60) s each, so both counts are the same and this option makes no difference. SMPTE timing is a different idea: times follow the broadcast time code clock instead of real video time. +- *Frame numbers* mode always uses video frames. + ## Subtitle Formats - **Default format** and **default save-as format** @@ -68,8 +94,10 @@ The subtitle rules that drive error checking, the grid's warning colors, and too ## Video Player -- **Video player** — Which player to use +- **Video player** — Which player to use: **libmpv - OpenGL**, **libmpv - Native Window ID rendering** (not macOS), **libmpv - Software rendering (slow)**, **libVLC - Native Window ID rendering** (Windows and Linux), **FFmpeg**, and **libmpv - Metal (experimental, needs restart)** (macOS only) - **Video controls** (order and visibility of the controls under the video, see [Video Player](video-player.md#video-controls)), **Hide video controls in full-screen**, **Auto-open video file when opening subtitle** +- **Show style dialog when opening a second subtitle file**, **Remember second subtitle file** +- **Deinterlace video** — **Off**, **Auto (interlaced frames only)** or **Always** (mpv) - **Subtitle preview properties** — Font name, size and bold, primary/outline/shadow colors, border style and outline/shadow width for the subtitle drawn on the video - **Download mpv** / **Download VLC** / **Download FFmpeg libraries** — Grouped at the bottom; fetch the library a player needs when it is not installed @@ -79,6 +107,7 @@ The subtitle rules that drive error checking, the grid's warning colors, and too - **Show toolbar** and **Toolbar items** — Which timing buttons the waveform toolbar shows, and in which order - **Waveform single-click / double-click action** - **Extract audio format, sample rate and bitrate** — What the audio Subtitle Edit extracts for the waveform looks like +- **Use only front center channel for 5.1 audio (FFmpeg)** — Extract only the dialog channel of 5.1 audio for a cleaner waveform - **Select subtitle on right click**, **Allow overlap (when moving/resizing)**, **Set video position when moving start/end** - **Snap to shot changes (hold Shift to override)** and **Snap to frames** - **Snap distance when dragging (pixels)** — how close a dragged cue has to come to a shot change before it snaps; in pixels, so it feels the same at every zoom @@ -87,7 +116,10 @@ The subtitle rules that drive error checking, the grid's warning colors, and too - **Shot changes auto-generate** - **Focus on mouse over**, **Focus text box after insert** - **Invert mouse-wheel**, **Mouse-wheel sets video position**, **Mouse-wheel video position step** -- **Center video position also while paused**, **Draw grid lines** +- **Center video position also while paused**, **Select current subtitle also while paused**, **Draw grid lines** +- **Remember zoom (horizontal and vertical)** — Off by default +- **Use experimental fast renderer** +- **Show # + Duration** and **Show Chars/sec** — The number/duration footer and chars/sec line drawn on each cue in the waveform - **Waveform text font size**, **Waveform text font bold** and the full color set — text, waveform, subtitle background, background, selected subtitle background, selected, cursor/head, shot change, left/right border, fancy high color. Color themes can be imported and exported - **Auto-transcribe new waveform selection via speech-to-text** - **Download ffmpeg** and a **disk space** readout for the extracted audio @@ -101,22 +133,23 @@ The subtitle rules that drive error checking, the grid's warning colors, and too - **Merge lines: keep end time (allow overlap with next subtitle)**, and the variant that limits it to ASSA files - **Merge lines: auto-break merged text** - On by default; turn it off to keep the merged lines' own line breaks when merging from menus, the waveform or *Merge selected lines* (the explicit "unbreak" and "keep breaks" shortcuts are not affected) - **Auto-break** — Break early for end of sentence, comma or dash; break by pixel width; prefer bottom heavy and its **bottom heavy percentage**; **use do-not-break-after list** (with an editor for the list); **split odd lines action** -- **Spell check engine**, and *treat words ending in 'in'' as 'ing'* (English only) +- **Spell check engine**, and *treat words ending in 'in'' as 'ing'* (English only), **Spell check: remember "Use always" list** - **OCR: use word split list**, **OCR: try to guess unknown words** - **Speech to text: prompt for language/engine first time only** - **Multiple replace: show context menu buttons** - **Grid: focus text box after insert new subtitle** +- **Undo/redo: go to changed line (and video position)** - **Text to speech: prompt to merge continuation lines** - **Text to speech: prompt to skip sound/music lines**, **Text to speech: prompt to detect speaker names in the text** -- **Fix common errors: skip step 1 (choose fixes)** +- **Fix common errors: skip step 1 (choose fixes)**, **Fix common errors: fix short display times may move start time** - **Music symbol** and **music symbols to replace** ## Appearance -- **Theme**, **icon theme**, **match icon color to dark theme foreground color**, **UI scale (%)** +- **Theme**, **icon theme**, **match icon color to dark theme foreground color**, **UI scale (%)**, **Font scale (%)** - **Text selection opacity (%)** — How strong the selection highlight in text boxes is. 100 (default) is the theme's solid highlight with white text; lower values make it see-through and keep the text in its own color - **Dark theme foreground / background color**, **focused button background color** -- **UI font**, and a separate font for the subtitle text box and grid +- **UI font**, and a separate font for the subtitle text box and grid, with **Font size in subtitle grid** and **Font size in subtitle text box** - **Grid** — Show subtitle text as single line (with the separator to use), text fit, [show formatted text](subtitle-grid.md#formatting-display), live spell check, **Center text in subtitle grid** (centers the text column, as Subtitle Edit 4 could), compact mode, alternating row colors (light and dark), grid lines, bookmark color - **Spell check highlight color** - The color of the unknown word highlighted in the spell check and OCR unknown-word windows (red by default; pick a lighter color for the dark theme) - **Subtitle text box** — Bold text, color tags, live spell check, centered text, and which buttons are shown (auto-break, unbreak, italic, color, remove formatting, AI assistant), the up/down start/end/duration controls and their labels @@ -133,8 +166,8 @@ Proxy settings for every download and online engine: **address**, **username**, ## Updates -- **Check for updates on startup** — Hidden for store-managed installs (e.g. Flatpak), which update through the store -- **Update channel** — Stable, or stable and beta +- **Check for updates when the app starts** — Hidden for store-managed installs (e.g. Flatpak), which update through the store +- **Notify about** — **Stable versions only**, or **Stable and beta versions** ## File Type Associations @@ -144,9 +177,13 @@ Windows only. Tick the subtitle file types Subtitle Edit should open by default. Links to the **error log**, the **tools log** and the **settings file** (each enabled only when the file exists), plus **write tools log** to turn the tools log on. +## Reset, Import and Export + +The **Reset** button at the bottom opens **Reset settings**, where you tick what to reset: **Reset all settings**, or only **Reset rules**, **Reset shortcuts**, **Reset recent files**, **Reset auto-translate**, **Reset appearance**, **Reset waveform**, **Reset syntax coloring** or **Reset window position and size**. The arrow next to **Reset** has **Import...** and **Export...** to move settings between computers (all settings, or chosen parts such as rules, appearance, waveform, syntax coloring, shortcuts and auto-translate). **Apply** saves the changes without closing the window. + ## Keyboard Shortcuts | Key | Action | |-----|--------| | Escape | Close settings | -| F1 | Open help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | diff --git a/docs/features/shortcuts.md b/docs/features/shortcuts.md index 11bcd256c46..99ae373a703 100644 --- a/docs/features/shortcuts.md +++ b/docs/features/shortcuts.md @@ -37,7 +37,7 @@ Independent of the thematic category, each command has a scope shown in the **Ac ## Assigning a Shortcut 1. Select a command from the list -2. Check the desired modifier keys: **Ctrl**, **Alt**, **Shift**, **Win** +2. Check the desired modifier keys: **Ctrl**, **Alt**, **Shift**, **Win** — and on Windows also **AltGr** (the right Alt key). A shortcut with AltGr only fires when the right Alt key is held, so Ctrl+Alt shortcuts no longer swallow the characters AltGr types (€, @, …) on many keyboard layouts. Ctrl/Alt and AltGr cannot be combined 3. Select the key from the dropdown 4. The shortcut is applied immediately in the list 5. Alternatively, **double-click a command in the list** to open the key capture dialog, then press the desired key combination directly @@ -49,6 +49,7 @@ Some commands have additional configuration beyond the shortcut key: - **Set color 1–8** — Choose a color for each color shortcut - **Surround with 1–8** — Define the left/right text to surround selected text with (this replaces the *Shortcut toggle custom start/end* setting from Subtitle Edit 4), and its **Behavior**: *Toggle* adds the text, or removes it when it is already there; *Add* adds it every time, so pressing the shortcut twice adds it twice; *Remove (all)* only removes it, all at once; *Remove (one each time)* removes one pair per press, so it undoes *Add* step by step. **Works on** picks *Selection, else whole text* (the selected part of the text box, otherwise the whole text of each selected subtitle) or *Each line* (every line of a subtitle gets its own pair, e.g. `[Hello]` / `[Bye]`) - **Video move custom 1–4 back/forward** — Set the number of milliseconds to skip. Each one also has a **…and pause** variant that uses the same milliseconds but pauses playback first, so a jog/shuttle step leaves the video paused on the new position +- **Move selected lines / Move selected lines and forward / Move all lines, custom 1–2 back/forward** — Set the number of milliseconds the lines are moved; the command name shows the current value - **Set actor 1–10** — Define the actor name assigned by each actor shortcut - **Custom search 1–5** — Set the name and URL for each search slot - **Custom shortcut 1–8** — Build your own shortcut from steps (see below) @@ -68,6 +69,16 @@ Examples: *Insert text* `\N` at end of text to lift a subtitle one line per key **Active in** sets where the key works: *Everywhere*, *Subtitle list view*, *Text box*, *Subtitle list view & text box* or *Waveform* — so the same key can do something else elsewhere. For text box areas use a key with Ctrl/Alt, as a plain key would no longer type. Handy commands for steps: **Focus subtitle list view**, **Focus text box**, **Focus original text box**, **Focus waveform**, **Text box, go to start** and **Text box, go to end** — each step waits for focus to move before the next one runs. Assign a key like for any other command. The text changes of one run are undone in a single step. A custom shortcut cannot run another custom shortcut; a slot without steps does nothing. +## Worth Knowing + +- **Help** — F1 by default. It can be changed here like any other shortcut, and the same key works in every dialog, where it opens the help page for that dialog +- **Command palette** — Ctrl+Shift+K (Cmd+Shift+K on macOS) by default; search for any command by name and run it, see [Command palette](command-palette.md) +- **Toggle break/unbreak** — Unbreaks the text if it has a line break, otherwise forces a break (no default key) +- **Save original** — Saves only the original subtitle in translation mode (no default key; Ctrl+S saves both) +- **Toggle screen privacy (hide file names, then also texts)** — Each press cycles: hide file names → also blur the subtitle texts → off. Handy for screen sharing and recordings (no default key) + +See [Keyboard Shortcuts](../reference/keyboard-shortcuts.md) for the full list of default keys. + ## Resetting Shortcuts - **Reset** (next to the assignment controls) — Clear the shortcut for the selected command @@ -106,4 +117,4 @@ This is useful for sharing shortcut configurations between machines or team memb | Key | Action | |-----|--------| | Escape | Close shortcuts window | -| F1 | Open help | \ No newline at end of file +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | \ No newline at end of file diff --git a/docs/features/shot-changes.md b/docs/features/shot-changes.md index 9637760265c..91c5a3b8c2a 100644 --- a/docs/features/shot-changes.md +++ b/docs/features/shot-changes.md @@ -5,7 +5,7 @@ Detect scene/shot changes in a video using FFmpeg, or import them from a file. - **Menu:** Video → Generate/import shot changes - **Shortcut:** Configurable -A second menu item, **Show shot changes list**, appears under the Video menu once the loaded video has any shot changes. It lists the current shot changes with **Go to** (also double-click), **Clear**, and a right-click **Delete** for the selected entry. +A second menu item, **Show shot changes list**, appears under the Video menu once the loaded video has any shot changes - see [Shot changes list](#shot-changes-list). ![Shot Changes](../screenshots/shot-changes.png) @@ -35,9 +35,22 @@ The window has two tabs: **Generate shot changes** and **Import shot changes**. Shot changes are displayed as vertical lines on the audio visualizer waveform. +## Shot Changes List + +**Video → Show shot changes list** opens the **Shot changes list** window with every shot change of the loaded video (number and time): + +- **Go to** (or double-click) — Move the video position to the selected shot change +- **Clear** — Remove all shot changes +- Right-click → **Copy** (or Ctrl+C) copies the selected times; **Delete** removes the selected shot change +- **Home** / **End** jump to the first / last entry + +## Export Shot Changes + +**Export...** in the shot changes list saves the shot changes to a `.shotchanges` or `.txt` file (one time in seconds per line, the same format Subtitle Edit stores and imports). The file name defaults to the video's name. + ## Keyboard Shortcuts | Key | Action | |-----|--------| | Escape | Close / Cancel | -| F1 | Open help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | diff --git a/docs/features/speech-to-text.md b/docs/features/speech-to-text.md index 16213202d1c..e5b3deeb0c1 100644 --- a/docs/features/speech-to-text.md +++ b/docs/features/speech-to-text.md @@ -22,7 +22,7 @@ Subtitle Edit can automatically transcribe audio to text using Whisper-based and | Alibaba Qwen3-ASR | All | Online Qwen3-ASR via Alibaba Model Studio (DashScope) | | Google Cloud Speech-to-Text | All | Online Google Cloud Speech-to-Text v2 (Chirp models) with word-level timings. Needs a service account key file (JSON) - the v2 API does not accept API keys | | Qwen3 ASR CPP | Windows, Linux, macOS | Local Qwen3 ASR engine with downloadable GGUF models | -| Crisp ASR | Windows, Linux, macOS | Single engine with selectable backends: Parakeet, Canary, Cohere, Fire Red, Fun-ASR Nano, GigaAM, GLM, Granite, Qwen3, Mega, MOSS Diarize, Omni, Kyutai, SenseVoice, ARK, Voxtral | +| Crisp ASR | Windows, Linux, macOS | Single engine with selectable backends: Parakeet, Canary, Cohere, Fire Red, Fun-ASR Nano, GigaAM, GLM, Granite, Index-Echo, Qwen3, Mega, MOSS Diarize, Omni, Kyutai, SenseVoice, ARK, Voxtral | Engines and models are downloaded automatically on first use. @@ -30,8 +30,10 @@ Engines and models are downloaded automatically on first use. - **Whisper CPP** is shown as a single entry; the CPU / cuBLAS / Vulkan backends are selected from a secondary dropdown when Whisper CPP is selected. - **Qwen3 ASR CPP** includes 0.6B and 1.7B model options, plus a forced-aligner model used for timing workflows. -- **Crisp ASR** is exposed as one engine that wraps multiple backends (Parakeet, Canary, Cohere, Fire Red, Fun-ASR Nano, GigaAM, GLM, Granite, Qwen3, Mega, MOSS Diarize, Omni, Kyutai, SenseVoice, ARK, Voxtral). Pick the backend from the Crisp ASR backend dropdown - see [Crisp ASR backends](#crisp-asr-backends) for what each one is good at. +- **Crisp ASR** is exposed as one engine that wraps multiple backends (Parakeet, Canary, Cohere, Fire Red, Fun-ASR Nano, GigaAM, GLM, Granite, Index-Echo, Qwen3, Mega, MOSS Diarize, Omni, Kyutai, SenseVoice, ARK, Voxtral). Pick the backend from the Crisp ASR backend dropdown - see [Crisp ASR backends](#crisp-asr-backends) for what each one is good at. - A **Forced aligner** option is shown for Crisp ASR backends and exposes the built-in aligner, Canary CTC, Qwen3, and the wav2vec2 zoo (12 language-specific CTC aligners that run on top of any Crisp ASR backend). +- **Detect speakers** (Crisp ASR backends, except MOSS Diarize which labels speakers itself) starts each line with the speaker, like `(speaker 0)`, using NVIDIA's Sortformer diarization (up to 8 speakers). The Nemotron-3-Diarization (Sortformer) model (107 MB) is downloaded on first use, and Crisp ASR v0.8.37 or newer is needed. Works best with backends that split lines where the speaker changes, like Parakeet and Cohere. +- **Purfview Faster Whisper XXL** has a **Multilingual (detect per segment)** language entry below **Auto detect**: the language is detected for every segment instead of once for the whole file, which helps with audio that switches between spoken languages. - Automatic language detection: the Whisper engines (Whisper CPP, Purfview Faster Whisper XXL, CTranslate2, WhisperX, Const-me and OpenAI) and every Crisp ASR backend have an **Auto detect** entry at the top of the language list - except the Russian-only GigaAM and MOSS Diarize, which keep their fixed languages. - **Google Cloud Speech-to-Text** is Google's v2 API, which does not take API keys. In the Google Cloud console, create a project with billing, enable the Speech-to-Text API, create a service account with the *Cloud Speech Client* and *Storage Admin* roles, add a JSON key to it and pick that file as the **Key file**. If your organisation does not allow service account keys, leave the key file empty, run `gcloud auth application-default login` and fill in the **Project ID**. The other fields are **Region** (`us` or `eu` for chirp_3, or a specific region for other models), **Model** (`chirp_3`, `chirp_2`, `long`, `latest_long`...), a **Language** hint (leave it empty for automatic detection with the Chirp models), the Cloud Storage **bucket name** long audio is uploaded to (one named `-subtitle-edit-stt` is created on first use, and uploads are deleted after each run), **Dynamic batching** (on by default - about a fifth of the price, but Google gives no latency guarantee) and a timeout. - Each engine can have separate advanced command-line parameters. @@ -57,6 +59,7 @@ The languages column counts what the backend dropdown offers (an *auto* entry is | **GLM** | 17 | Needs aligner | 1.3 - 4.5 GB | GLM-ASR Nano, Chinese-first with a wide second tier of languages | | **SenseVoice** | 5 (zh, yue, en, ja, ko) | Needs aligner | 136 - 469 MB | Tiny and quick for CJK audio - useful on machines where the larger backends are too slow | | **Fun-ASR Nano** | 5 (en, zh, yue, ja, ko) | Needs aligner | 0.90 - 1.98 GB | CJK-focused Fun-ASR | +| **Index-Echo** | 3 target languages (Chinese → en, ja, es) | Native timings | 2.7 - 5.1 GB (model + decoder pair) | Speech *translation*: Chinese audio in, English, Japanese or Spanish subtitles out. The language dropdown picks the target language. Needs Crisp ASR v0.8.41 or newer | | **Mega** | 2 (en, zh) | Needs aligner | 1.3 - 4.4 GB | Mega-ASR 1.7B. VAD is on by default (see the VAD section below) | | **Granite** | 6 (en, fr, de, es, pt, ja) | Needs aligner | 1.54 - 5.58 GB | IBM Granite Speech 4.1 2B. The `plus` models are the newer revision; `mini` and `f16enc` trade encoder precision for size | | **ARK** | 19 (European + zh, ja, ko) | Needs aligner | 3.52 - 7.51 GB | A 3B model - the heaviest backend here, so only worth it when the smaller ones fall short | diff --git a/docs/features/spell-check.md b/docs/features/spell-check.md index 94d7ecc771a..dea820279d1 100644 --- a/docs/features/spell-check.md +++ b/docs/features/spell-check.md @@ -79,4 +79,4 @@ Spell check requires a dictionary to be installed. If no dictionary is found, yo | Key | Action | |-----|--------| | Escape | Close spell check | -| F1 | Open help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | diff --git a/docs/features/statistics.md b/docs/features/statistics.md index 2e4918a96a4..91cde4ffdc7 100644 --- a/docs/features/statistics.md +++ b/docs/features/statistics.md @@ -39,5 +39,5 @@ View detailed statistics about the currently loaded subtitle file, including lin | Shortcut | Action | |----------|--------| -| F1 | Show help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | | Escape | Close dialog | diff --git a/docs/features/subtitle-grid.md b/docs/features/subtitle-grid.md index b7cd0b39e8f..9b011d48af9 100644 --- a/docs/features/subtitle-grid.md +++ b/docs/features/subtitle-grid.md @@ -25,6 +25,8 @@ The grid can show the columns below. A few are always visible; the others can be | **Pixel width** | | Rendered pixel width of the text | | **Forced** | | Check mark on lines marked as forced narrative (set with **Toggle forced** in the context menu) | | **Layer** | | Layer number (only available for formats that support layers, e.g. ASS/SSA) | +| **Shot in** | | Signed distance from the start time to the nearest shot change (milliseconds, or frames in frame mode). Highlighted when [Beautify time codes](beautify-time-codes.md) would move the cue. Empty without a video and shot changes | +| **Shot out** | | The same for the end time | ## Customizing Visible Columns @@ -50,7 +52,7 @@ Right-click a line to access: - Delete - Insert before / Insert after - Insert subtitle after current line... (insert a whole subtitle file) -- Column (delete text, insert text, paste from clipboard, shift cells up/down, text up/down) +- Column (delete text, insert text, paste from clipboard, shift cells up/down, text up/down) — see [Column paste](#column-paste) - Split line / Assisted split... / Assisted move... - Merge before / Merge after / Merge selected / Merge selected as dialog - Extend to line before / Extend to line after @@ -98,18 +100,34 @@ The actor order is alphabetical when a file is opened. Actors added while workin | `Ctrl+C` | Copy | | `Ctrl+V` | Paste | | `Ctrl+X` | Cut | +| `Ctrl+Shift+V` | Fill selected lines with clipboard text (also works on one line) | | `Enter` | Go to subtitle and set video position (default; **Options → Settings** can change it to *Go to next line*) | | `Up/Down` | Navigate lines | +| `PageUp/PageDown` | Move the selection one page up / down | +| `Home/End` | Go to the first / last line | +| `Shift+Up/Down/PageUp/PageDown/Home/End` | Extend the selection (`Ctrl+Shift`, or `Cmd+Shift` on macOS, works too when that chord has no shortcut of its own) | +| `0`–`9` | Type a line number to jump to it — digits typed within a second add up, so `1` then `2` goes to line 12 | + +The navigation keys and the line-number type-ahead are built in. A shortcut you assign to a bare digit in **Options → Shortcuts** wins over the type-ahead. ### Pasting over several lines -With **one** line selected, `Ctrl+V` inserts the clipboard content below it. With **several** lines selected, the clipboard is pasted *over* the selection instead — handy for translating: copy the lines out, translate them elsewhere, select the same lines here and paste. +With **one** line selected, `Ctrl+V` inserts the clipboard content as new lines below it, and the status bar says "Inserted N line(s) from the clipboard". To replace the text of that one line instead, use `Ctrl+Shift+V` (**Fill selected lines with clipboard text**): it puts the whole clipboard text into every selected line, time codes untouched. With **several** lines selected, the clipboard is pasted *over* the selection instead — handy for translating: copy the lines out, translate them elsewhere, select the same lines here and paste. - Clipboard holds a subtitle (SRT, ASSA, …): the selected lines are replaced by the pasted ones, time codes included. The number of pasted lines does not have to match the selection. - Clipboard holds plain text: one clipboard line goes into each selected line's text, and the time codes are left alone. Clipboard lines that go past the end of the selection are not pasted. Both are a normal edit, so `Ctrl+Z` undoes them. +### Column paste + +**Column → Paste from clipboard...** in the context menu (shortcut "Column, paste", no default key) pastes the clipboard into one column, starting at the first selected line and going down. It never adds lines: pasting stops at the last line of the subtitle. + +- **Choose column** — **All** (time codes and text), **Time codes only**, or **Text only**. When the clipboard holds plain text rather than a subtitle, only **Text only** is available and each clipboard line goes into one line's text. +- **Overwrite/shift cells down** — **Overwrite existing cells** replaces the cells, **Shift text cells down** moves the existing cells down one row per pasted line first (the cells pushed past the last line are dropped). + +Like SE 4's column paste, this is useful for bringing timings from one file into another, or a translated text block into existing time codes. + ## Formatting Display How the grid treats HTML/ASSA markup is a five-way choice — **Show formatted (HTML/ASSA) text in subtitle grid** in **Options → Settings → Appearance**: diff --git a/docs/features/text-editor.md b/docs/features/text-editor.md index 5b01e34c9b2..6ef341ac239 100644 --- a/docs/features/text-editor.md +++ b/docs/features/text-editor.md @@ -36,6 +36,8 @@ Additional formatting options: | `Ctrl+A` | Select all text | | `Ctrl+Z` | Undo | +On macOS, **Option+Backspace** deletes the previous word and **Cmd+Backspace** (or Cmd+Delete) deletes to the start of the line, like in other Mac apps. + ## Split Line - **Split at cursor** — Split the subtitle at the text cursor position diff --git a/docs/features/text-to-speech.md b/docs/features/text-to-speech.md index 5bea77315c1..24e3968df1b 100644 --- a/docs/features/text-to-speech.md +++ b/docs/features/text-to-speech.md @@ -26,8 +26,9 @@ By default **Add audio to video file** replaces the video's sound with the new s **Remove original speech (slow)** (also under **Advanced...**) gets rid of just the voices: it splits the video's sound into speech and everything else, throws the speech away, and mixes the new speech over the music and sound effects. That is what a dub normally sounds like. -- The first use downloads the CrispASR runtime (if no CrispASR engine is installed yet) and a source separation model (Mel-Band RoFormer, 457 MB). Speech to text's **Isolate speech** uses the same model. -- It is slow: about as long as the video itself on a GPU (Metal, CUDA, Vulkan), and many times longer on CPU only. +- **Model** (below the checkbox) picks the separation model: **Best quality (Mel-Band RoFormer)** (default) keeps the most of the music and sound effects; **Fast (HTDemucs)** is about three times quicker, with a little more of the music lost. +- The first use downloads the CrispASR runtime (if no CrispASR engine is installed yet) and the selected separation model (Mel-Band RoFormer 457 MB, HTDemucs 81 MB). Speech to text's **Isolate speech** uses the Mel-Band RoFormer model too. +- It is slow: with **Best quality**, about as long as the video itself on a GPU (Metal, CUDA, Vulkan), and many times longer on CPU only. - The music and effects play at full volume. Turn on **Audio ducking** as well to lower them - its volume then applies to the music and effects. - The video's first audio track is used. - If the separation fails, the speech is added to the video the normal way and the tools log says why. @@ -123,6 +124,7 @@ The next few lines are generated ahead while the video plays. If the engine fall - **Pocket TTS (CrispASR)** — Kyutai Pocket TTS 100M; the smallest and fastest cloning engine (one 124-365 MB GGUF per language, 6 languages), and the reference is sent per request - **Higgs Audio v3 (audio.cpp)** — Boson AI Higgs Audio v3 4B on the audio.cpp runtime; zero-shot cloning in 100+ languages, per-request reference so switching voice does not restart the server - **Fish Audio S2 Pro (audio.cpp)** — Fish Audio S2 Pro on the audio.cpp runtime; zero-shot cloning in 80+ languages at 44.1 kHz, per-request reference +- **Breeze TTS 2 (audio.cpp)** — BreezeBlue's Breeze TTS 2 on the audio.cpp runtime; English and Chinese only, at 24 kHz. The **Default** voice is designed from the voice instruction (for example "A warm female narrator with calm pacing"). With a cloned voice, the instruction directs the delivery instead (tone, emotion, pace), and the reference needs its transcript. Per-request reference. The weights are licensed for research and non-commercial use only, and that also covers the audio it generates, so it shows a licence window before the first download - **FireRedTTS3 (audio.cpp)** — FireRedTTS3-Base on the audio.cpp runtime; zero-shot cloning in 24 languages at 24 kHz with the best published speaker similarity of the open models, per-request reference. Pick the language explicitly (there is no auto-detection); numbers and dates are only spelled out for English, Chinese and Cantonese. Every reference needs its transcript — without one the model produces noise, so a voice imported without a transcript is asked for it when picked, and [Clone from video](#clone-from-video-voice-of-each-line) needs the original subtitle loaded. It clones best when the reference and the text are in the same language; for dubbing a video into another language, Fish Audio S2 Pro or CosyVoice3 hold up much better Local downloadable engines are installed into the Subtitle Edit data folder when you accept the download prompt. @@ -159,7 +161,7 @@ Notes on picking one: - **Highest output rate:** VoxCPM2 and dots.tts at 48 kHz, then Zonos and Supertonic at 44.1 kHz. - **MOSS-TTS is by far the largest** because its Qwen3-8B backbone needs a ~3.5 GB codec companion on top of the backbone quant. Check free disk space before selecting it. - Quantized engines follow the same rule as the speech-to-text models: `Q4_K` is the small fast default, `Q8_0` is close to full precision, and `F16` is rarely worth the extra gigabytes. -- **Most of the CrispASR engines load their reference voice at server start**, so switching voice reloads the model. The exceptions are **Pocket TTS**, **VibeVoice**, **MOSS-TTS**, **CosyVoice3** and **VoxCPM2** (per-request reference) and **Qwen3 TTS** with the Voice clone model — those, the four audio.cpp engines (**IndexTTS 2.5**, **Higgs Audio v3**, **Fish Audio S2 Pro**, **FireRedTTS3**) and the standalone OmniVoice TTS engine are what [Clone From Video (Voice of Each Line)](#clone-from-video-voice-of-each-line) can use. +- **Most of the CrispASR engines load their reference voice at server start**, so switching voice reloads the model. The exceptions are **Pocket TTS**, **VibeVoice**, **MOSS-TTS**, **CosyVoice3** and **VoxCPM2** (per-request reference) and **Qwen3 TTS** with the Voice clone model — those, the audio.cpp cloning engines (**IndexTTS 2.5**, **Higgs Audio v3**, **Fish Audio S2 Pro**, **Breeze TTS 2**, **FireRedTTS3**) and the standalone OmniVoice TTS engine are what [Clone From Video (Voice of Each Line)](#clone-from-video-voice-of-each-line) can use. ## Engine Settings @@ -185,6 +187,10 @@ The points that matter: Declining just means "not now" — nothing is changed, the clone is refused, and you are asked again the next time. The answer is remembered per terms version, so you are asked again if the terms change. +### Clean Voice-Clone References + +**Clean voice-clone references (Sidon)** under **Advanced...** removes music, noise and reverb from the audio a voice is cloned from before the engine sees it: clips taken from the video (**Clone voice to**, **Clone from video**, **Find voices in video and clone**) and recordings imported in the voice manager. It uses the Sidon speech restoration model on audio.cpp (940 MB download, asked for on first use). The cloned voice no longer copies the background, but very quiet or overlapping speech can come out muffled. If the download is declined or cleaning fails, the reference is used as it is. + ### Renaming and Deleting Imported Voices Right-click the voice combo box for **Rename voice...** and **Delete voice...**. Both work on voices you imported or cloned - the engines list those straight from their `voices` folder, one reference recording per voice - and are disabled for engine presets, built-in speakers and the *Clone from video* entry. @@ -192,7 +198,7 @@ Right-click the voice combo box for **Rename voice...** and **Delete voice...**. - **Rename voice...** moves the recording together with its sidecar files (the `.txt` transcript, engine JSON) and the cached prepared copy, so nothing is left behind as an orphan. Spaces are stored as underscores, which is what the engines show as spaces. - **Delete voice...** asks for confirmation, then removes the recording and its files from disk. -Supported for every file-backed cloning voice: the CrispASR engines (Chatterbox, Confucius4-TTS, CosyVoice3, dots.tts, IndexTTS, MOSS-TTS, OmniVoice, Pocket TTS, Qwen3 TTS, VibeVoice, VoxCPM2), the standalone OmniVoice TTS, and the audio.cpp engines (IndexTTS 2.5, Higgs Audio v3, Fish Audio S2 Pro, FireRedTTS3). +Supported for every file-backed cloning voice: the CrispASR engines (Chatterbox, Confucius4-TTS, CosyVoice3, dots.tts, IndexTTS, MOSS-TTS, OmniVoice, Pocket TTS, Qwen3 TTS, VibeVoice, VoxCPM2), the standalone OmniVoice TTS, and the audio.cpp engines (IndexTTS 2.5, Higgs Audio v3, Fish Audio S2 Pro, Breeze TTS 2, FireRedTTS3). ### Voice Manager @@ -200,7 +206,7 @@ Click the voice-manager button (the head-and-microphone icon next to the voice c - **Engines** that support voice cloning are listed on the left; pick one to list its voices with type (cloned voice or built-in preset), duration, format and whether a transcript is present. Search filters the list. - **Play** (Space, or double-click) plays a cloned voice's reference recording; the waveform below shows the whole clip with a playhead, and clicking the waveform seeks. -- **Transcript** - for engines that read the transcript of the reference recording (ref-text), the text is shown under the waveform and can be edited and saved, or filled in with **Use speech-to-text...**. The hint says whether the engine requires it (CosyVoice3, Fish Audio S2 Pro, Qwen3 TTS, OmniVoice TTS) or only benefits from it (F5-TTS, FireRedTTS3, Higgs Audio, MOSS-TTS, OmniVoice CrispASR, VoxCPM2). Engines that clone from a speaker embedding do not use one. +- **Transcript** - for engines that read the transcript of the reference recording (ref-text), the text is shown under the waveform and can be edited and saved, or filled in with **Use speech-to-text...**. The hint says whether the engine requires it (CosyVoice3, Fish Audio S2 Pro, Breeze TTS 2, Qwen3 TTS, OmniVoice TTS) or only benefits from it (F5-TTS, FireRedTTS3, Higgs Audio, MOSS-TTS, OmniVoice CrispASR, VoxCPM2). Engines that clone from a speaker embedding do not use one. - **Rename** (F2) and **Delete** (Del) work as in the combo box menu. - **Copy voice to engine...** imports the recording and its transcript into another cloning engine, resampled to what that engine wants. A transcript is asked for when the target requires one and none is stored. Voices with the same name in the target are confirmed first. - **Import voice...** adds a recording (or, for Piper, a voice model) to the current engine, with the same transcript prompt as the voice settings dialog. @@ -240,8 +246,8 @@ For dubbing a video with several speakers there is a faster way than cloning eac Before generating, Subtitle Edit cuts one short reference clip per line out of the video's audio. Lines shorter than about three seconds are grown into the silence around them, but never into the neighbouring line — a reference with two speakers in it would clone the wrong person. -- **Supported engines:** OmniVoice TTS, Pocket TTS (CrispASR), VibeVoice (CrispASR), MOSS-TTS (CrispASR), CosyVoice3 (CrispASR), VoxCPM2 (CrispASR), Qwen3 TTS (CrispASR) with the Voice clone model, and the audio.cpp engines IndexTTS 2.5, Higgs Audio v3, Fish Audio S2 Pro and FireRedTTS3. The entry only appears for engines that accept a reference for each line; engines that load their reference when their server starts would have to reload the model for every line. -- **Reference text:** if you have the original subtitle loaded next to the translation, its lines are used as the transcript of the clips — that is what the video actually says, and it makes cloning noticeably better. Without an original loaded the clips have no transcript (the translated line is never used as one, since telling the model the clip already says the target text makes it replay the clip instead of speaking the line). What happens then depends on the engine: CosyVoice3 transcribes the clip itself, IndexTTS 2.5, Higgs Audio v3 and Fish Audio S2 Pro clone from the audio alone, and Qwen3 TTS and FireRedTTS3 need the transcript — FireRedTTS3 refuses to start without an original subtitle loaded, and Qwen3 speaks such lines with the first ordinary voice. +- **Supported engines:** OmniVoice TTS, Pocket TTS (CrispASR), VibeVoice (CrispASR), MOSS-TTS (CrispASR), CosyVoice3 (CrispASR), VoxCPM2 (CrispASR), Qwen3 TTS (CrispASR) with the Voice clone model, and the audio.cpp engines IndexTTS 2.5, Higgs Audio v3, Fish Audio S2 Pro, Breeze TTS 2 and FireRedTTS3. The entry only appears for engines that accept a reference for each line; engines that load their reference when their server starts would have to reload the model for every line. +- **Reference text:** if you have the original subtitle loaded next to the translation, its lines are used as the transcript of the clips — that is what the video actually says, and it makes cloning noticeably better. Without an original loaded the clips have no transcript (the translated line is never used as one, since telling the model the clip already says the target text makes it replay the clip instead of speaking the line). What happens then depends on the engine: CosyVoice3 transcribes the clip itself, IndexTTS 2.5, Higgs Audio v3, Fish Audio S2 Pro and Breeze TTS 2 clone from the audio alone, and Qwen3 TTS and FireRedTTS3 need the transcript — FireRedTTS3 refuses to start without an original subtitle loaded, and Qwen3 speaks such lines with the first ordinary voice. - **Language:** the engines clone best when the voice in the video speaks the language you are generating. Fish Audio S2 Pro and CosyVoice3 handle a video in one language dubbed into another well; FireRedTTS3 does not (its single language tag covers both the clip's transcript and the text, and the result garbles or mixes the two languages). - **Test voice** previews the clone taken from the longest line of the subtitle. - Quality depends on the source audio. Loud music or two people talking over each other in a line makes that line's clone worse. Longer subtitle lines clone better than very short ones, so a subtitle segmented into full sentences gives the best result. @@ -291,10 +297,11 @@ You can control pausing and pacing in ElevenLabs output directly from the subtit Subtitle Edit sends your text to ElevenLabs with **text normalization turned off**, so these pause cues are preserved instead of being collapsed or rewritten. -Behavior depends on the selected model: +The models offered are `eleven_v4_turbo` (the default), `eleven_v4`, `eleven_turbo_v2_5`, `eleven_v3` and `eleven_multilingual_v2`. Behavior depends on the selected model: -- **Standard models** (`eleven_turbo_v2_5`, `eleven_multilingual_v2`, …) honor SSML `` tags and punctuation pauses. -- **Eleven v3** does not support SSML `` tags. Subtitle Edit automatically converts each `` into the nearest v3 audio pause tag — `[short pause]` (under 0.75 s), `[pause]` (up to 1.5 s), or `[long pause]` (longer) — so the same subtitle text keeps working when you switch to v3. +- **Standard models** (`eleven_turbo_v2_5`, `eleven_multilingual_v2`) honor SSML `` tags and punctuation pauses. +- **Eleven v4, v4 Turbo and v3** do not support SSML `` tags. Subtitle Edit automatically converts each `` into the nearest audio pause tag — `[short pause]` (under 0.75 s), `[pause]` (up to 1.5 s), or `[long pause]` (longer) — so the same subtitle text keeps working when you switch model. +- These three models also understand expressive audio tags such as `[whispers]` or `[laughs]`. With one of them selected, a help button next to the **Model** drop-down in the review window opens ElevenLabs' guide to audio tags. ## Review Audio Clips @@ -370,4 +377,4 @@ From there you can play, edit text, regenerate single lines, and finish the sess | R / Ctrl+R | Regenerate selected line | | Space | Play / pause the selected line | | Escape | Close / Cancel | -| F1 | Open help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | diff --git a/docs/features/transparent-subtitles.md b/docs/features/transparent-subtitles.md index 0c0b38f5f77..89d2575de76 100644 --- a/docs/features/transparent-subtitles.md +++ b/docs/features/transparent-subtitles.md @@ -57,4 +57,4 @@ Click **Batch mode** to queue several subtitle files (**Single mode** switches b | Key | Action | |-----|--------| | Escape | Close / Cancel | -| F1 | Open help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | diff --git a/docs/features/video-ocr.md b/docs/features/video-ocr.md index b1266510287..bcac1235e62 100644 --- a/docs/features/video-ocr.md +++ b/docs/features/video-ocr.md @@ -29,7 +29,7 @@ Engines are listed best-first for burned-in subtitles: - **Apple Vision** (macOS) — the OCR built into macOS: local, fast, and nothing to download. Recommended on macOS. - **Paddle OCR** (Windows/Linux) — local, fast and accurate; downloaded automatically. Recommended on Windows and Linux. - **CrispEmbed** — local OCR engine with several model backends, downloaded automatically. For video the offered backends are GLM-OCR (default), DeepSeek-OCR-2 and PP-OCRv6 (see [OCR](ocr.md#crispembed)). -- **llama.cpp** — local vision model via a managed llama.cpp server; the engine and models are downloaded automatically. Available models, listed best-first for subtitles: GLM-OCR 0.9B (the default), LFM2.5-VL 3B, PaddleOCR-VL 1.6 (109 languages), HunyuanOCR 1.5 and LightOnOCR 1B. A green dot marks models that are already downloaded; custom vision models in the llama.cpp models folder also appear, as long as the `mmproj` vision projector sits next to the `*.gguf` (see [OCR](ocr.md#llamacpp)). +- **llama.cpp** — local vision model via a managed llama.cpp server; the engine and models are downloaded automatically. Available models, listed best-first for subtitles: GLM-OCR 0.9B (the default), LightOnOCR-3 4B, LFM2.5-VL 3B, PaddleOCR-VL 1.6 (109 languages), HunyuanOCR 1.5, QARI-OCR 0.2.2.1 (best for Arabic) and LightOnOCR-3 0.8B (the fastest). A green dot marks models that are already downloaded; custom vision models in the llama.cpp models folder also appear, as long as the `mmproj` vision projector sits next to the `*.gguf` (see [OCR](ocr.md#llamacpp)). - **Ollama vision** — local vision model via a self-managed [Ollama](https://ollama.com) installation, e.g. `glm-ocr` - **GLM API** — GLM vision model via the Z.ai / bigmodel.cn cloud API (requires an API key) diff --git a/docs/features/video-player.md b/docs/features/video-player.md index fd6a0ec5ac9..f43a3d24aca 100644 --- a/docs/features/video-player.md +++ b/docs/features/video-player.md @@ -70,11 +70,11 @@ Jump to a specific time code position in the video. - **Shortcut:** Configurable - Toggle full-screen video playback -## Undock / Redock +## Undock / Dock You can undock the video player into a separate window for multi-monitor setups: - **Undock video controls** -- **Redock video controls** +- **Dock video controls** ## Secondary Subtitles @@ -95,6 +95,8 @@ Configure the video player backend in **Options → Settings → Video player**: - **libmpv - Native Window ID rendering** — default on Windows (not available on macOS) - **libmpv - Software rendering (slow)** - **libVLC - Native Window ID rendering** — alternative backend (Windows and Linux only) +- **FFmpeg** — plays video through FFmpeg, no libmpv/libVLC needed (all platforms) +- **libmpv - Metal (experimental, needs restart)** — macOS only The same settings page also has: - **Video controls** — see [Video Controls](#video-controls) diff --git a/docs/features/visual-sync.md b/docs/features/visual-sync.md index 9e3f5695455..9e379c31102 100644 --- a/docs/features/visual-sync.md +++ b/docs/features/visual-sync.md @@ -13,7 +13,7 @@ The Visual sync window shows two video player panes ("Start scene" and "End scen The waveform under each video only appears when the main window has a waveform to share. Drag the handle between the video and the waveform to resize the waveform - both panes follow, and the height is remembered between sessions. -1. Open **Sync → Visual sync...** +1. Open **Synchronization → Visual sync...** 2. In the **Start scene** pane, pick a subtitle line near the beginning and play the video to the position where that line should start 3. In the **End scene** pane, pick a subtitle line near the end and play the video to the position where that line should start 4. Click **Sync** to apply (or use **Manual sync...** from the Sync split-button for a manual offset/speed adjustment) diff --git a/docs/features/webvtt-styles.md b/docs/features/webvtt-styles.md index ba3594f69d4..6f9a9bad936 100644 --- a/docs/features/webvtt-styles.md +++ b/docs/features/webvtt-styles.md @@ -70,7 +70,7 @@ With a video loaded in a browser-playable container (`.mp4`, `.m4v`, `.webm`, `. | Shortcut | Action | |----------|--------| -| F1 | Show help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | | Ctrl+Up / Ctrl+Down | Move the selected style up / down | | Escape | Close dialog | diff --git a/docs/features/whats-new-in-se5.md b/docs/features/whats-new-in-se5.md index fc1022f0f9a..f8d0fdc7787 100644 --- a/docs/features/whats-new-in-se5.md +++ b/docs/features/whats-new-in-se5.md @@ -2,6 +2,108 @@ Subtitle Edit 5 is the Avalonia-based, cross-platform version of Subtitle Edit. It keeps the familiar subtitle editing workflow from the Windows Forms version, but many features were expanded. +The first section lists the highlights of 5.3. The sections after it describe what Subtitle Edit 5 (up to 5.2) added compared to Subtitle Edit 4. + +## What's New in 5.3 + +### Editing + +- **Command palette** - **Edit → Command palette...** (Ctrl+Shift+K) finds any command by name (with its shortcut) and runs it (see [Command palette](command-palette.md)). +- **Custom shortcut slots** built from steps (run commands, insert text, find and replace), and **Surround with** slots with toggle/add/remove behavior, like SE 4 (see [Custom shortcuts](shortcuts.md#custom-shortcuts)). +- **AltGr** as a shortcut modifier on Windows, and new shortcuts: *Toggle break/unbreak*, *Save original*, *Remove all formatting*, *Delete selection (everywhere)*, *Set style 1-10*, *Toggle screen privacy* and more. +- **Tools → Merge continuation lines...** merges lines unless a line ends a sentence (see [Merge continuation lines](merge-continuation-lines.md)). +- **Find/Replace** shows the replace count and a search history whose entries can be deleted one by one; **Multiple replace** rules get a *Whole word* option. +- **Actor picker**, *Rename...* in the grid's Actors menu, and *Remove/replace Unicode characters* and *Convert actors* for selected lines. +- Tools report "*N lines changed*" and get their own named undo step; optional *go to changed line* on undo/redo. +- Built-in interjection lists for 11 languages, a spell check editor for the *Use always* list, and the British English word list. +- *Merge lines without auto-break* setting, and *Lock time codes* is respected by ripple delete, recalculate duration and the shot-change commands. + +### Main window and layout + +- **Layout 14** - an editor-style layout with a timeline: a video thumbnail row and subtitle rows (by layer, actor or style) above the waveform (see [Layouts](main-window.md#layouts)). +- **Layouts 12 and 13** put the text box below the video player, and a **Font scale (%)** setting sits next to UI scale. +- **Time code mode "Frame numbers"** shows absolute frame numbers, switchable in Settings or from the status bar (see [Settings → General](settings.md#general)). +- **Reload the subtitle** when the file is changed outside Subtitle Edit. +- Optional **Shot in / Shot out** grid columns, a *Show recent files* option, the full file path in the title bar, and a text selection opacity setting. +- Settings show one category at a time (Ctrl+PageUp/Down, Alt+Left/Right), and Settings.json gets automatic backups. +- Taskbar/Dock progress for speech to text, text to speech, AI review, auto-translate, burn-in and shot-change generation. +- Screen reader names for lists, grids, combo boxes and buttons across the tool windows. + +### Video and waveform + +- **FFmpeg video player** - plays video through FFmpeg with hardware decoding, real frame stepping (also variable frame rate), sound on Linux and an audio track picker (see [Supported video players](video-player.md#supported-video-players)). +- **Remember waveform zoom** across restarts (Options → Settings → Waveform), a waveform grid color, and a **Show speech only** waveform (see [Speech-only waveform](audio-visualizer.md#speech-only-waveform)). +- Customizable order and visibility of the video player controls, a deinterlace setting, and an experimental mpv **Metal** player on macOS. +- New video shortcuts: *move X ms back/forward*, *custom milliseconds back/forward and pause*, and *Guess start and end time from waveform*. +- The waveform toolbar wraps to a second row, and can show the selected line's initial text and *move lines* buttons. +- **Video → More → Generate background music...** makes local ACE-Step music looped to the video's length (see [Background music](background-music.md)). +- **Video → More → Remux video...** puts video, several audio tracks and subtitles in one container, can mix audio files and embed CEA-608 captions (see [Remux video](remux-video.md)). +- **Cut video** opens and generates much faster, with [transitions and fade from/to black](cut-video.md#transitions). +- **Burn-in** of selected lines from the grid context menu, and burn-in into half side-by-side / top-bottom [3D video](burn-in.md#3d-video). + +### Speech to text + +- **Detect speakers** (Sortformer diarization), a choice of VAD (Silero, FireRedVAD, Whisper-VAD, WebRTC) and **Isolate speech** for Crisp ASR (see [Isolate speech](speech-to-text.md#isolate-speech-crisp-asr)). +- New Crisp ASR models: Index-Echo (Chinese speech to English/Japanese/Spanish text), Parakeet Ultra, Phonon-2, ReazonSpeech and Voxtral F16. +- A *Multilingual* option for Purfview Faster-Whisper XXL, a new standalone WhisperX build with live output, and vLLM support in the OpenAI-compatible engine. +- Transcribing selected lines keeps the lines that worked and offers to retry the failed ones; the computer no longer sleeps while it runs. + +### Text to speech + +- **Play with speech** speaks the lines in sync while the video plays, and **Speak from current line** reads aloud from the selected line (see [Play with speech](text-to-speech.md#play-with-speech) and [Speak from current line](text-to-speech.md#speak-from-current-line)). +- **KugelAudio** (23 European languages), **Supertonic-3** and an **OpenAI-compatible** engine (OpenAI, OpenRouter, custom server) (see [Supported engines](text-to-speech.md#supported-engines)). +- **ElevenLabs Eleven v4** and **v4 Turbo** (the new default), with `` tags turned into audio pause tags (see [ElevenLabs pauses](text-to-speech.md#elevenlabs-pauses-and-pacing)). +- **Remove original speech** keeps the music and effects under the new voices, now with a **Fast (HTDemucs)** model option (see [Remove the original speech](text-to-speech.md#remove-the-original-speech-from-the-video)). +- Optional **Sidon cleaning** of voice-clone reference audio, and a **Voice manager** to copy voices between engines and share voice packs (see [Voice manager](text-to-speech.md#voice-manager)). + +### Auto-translate + +- New engines: **LM Studio advanced**, **API Route**, and a *Browse models* button for OpenAI-compatible and LM Studio. +- **Translate in place**, a model drop-down, 22 more languages for the AI engines, and an option to leave music lines untranslated. +- A shortcut to translate the selected lines without the prompt, and MyMemory works without an API key. +- More llama.cpp models (Index-Translate, TranslatePsy-AfriSLM), and lines that come back untranslated are retried. + +### OCR + +- **nOCR** is more accurate (scale-aware matching, automatic spaces, shadow threshold, a better Latin database), and glyphs can carry their own italic (see [nOCR](ocr.md#nocr-nikse-ocr)). +- The **Train nOCR** window has a preview, can start from an existing database, trains several font sizes, and a database can be optimized. +- **Find and Replace** in the OCR window, remembered [pre-processing](ocr.md#pre-processing) settings, and the spell check dictionary remembered per language (see [Find and Replace](ocr.md#find-and-replace)). + +### Sync and timing + +- **Tools → Improve time codes (forced alignment)...** re-times a roughly synced subtitle with a Crisp ASR aligner and can check large moves with speech to text (see [Improve time codes](improve-time-codes.md)). +- **Point sync via other subtitle** loads subtitles from mkv/mp4/.sup, shows gap badges and a *Gap after* column (see [Point sync via other subtitle](point-sync-via-other.md)). +- *Move start/end X ms* shortcuts, also in Visual sync, and *Extend to next/previous shot change* resolves overlaps. +- Custom **Beautify time codes** profiles can be saved, loaded and deleted, and a frame rate can be typed in *Change frame rate*. + +### Formats and import + +- **File → Import → Subtitles from DVD (IFO/VOB)...** with a title picker, fast rip and exact cell timing (see [Import subtitles from DVD](file.md#import-subtitles-from-dvd)). +- CEA-608/708 closed captions from `.ts`, `.mkv`, `.mp4`, `.mxf`, `.vob`/`.mpg` and `.m2v`, with a channel/service picker. +- New readers: EZTitles `.ezt`, PSP UMD Video, HD-DVD sup, Cheetah Caption ASC, ELR Studio and more SE 4 formats that open again. +- PAC code page detection and a secondary code page, and transport streams saved with a video extension open. +- The format drop-down shows full format names, and Source view colors WebVTT, LRC and SCC. + +### ASSA + +- **ASSA draw** has a new layout with menus, undo/redo, scale/rotate, a shape library, backgrounds and SVG import (see [ASSA draw](assa-draw.md)). +- Styles: overwrite or keep both on import, *Replace style with*, move up/down, and a *Set style...* quick-pick shortcut. + +### Batch convert + +- **Translate into several languages** in one run, **named presets**, and new filters (format, extension, error status, forced tracks). +- New functions: *Remove Unicode control characters*, *Renumber*, *Merge continuation lines* and *Convert actors* (see [Available functions](batch-convert.md#available-functions)). +- Asks before adding video files from a folder, adds many files faster, and shows converted/failed/not processed counts. + +### Compare + +- **Time tolerance** option and how far the times are off, a merge view to edit while comparing, and right-click on the gutter arrow to take only text or timing (see [Compare](compare.md#comparison-options)). + +### macOS and Linux + +- Search help topics from the macOS **Help** menu, macOS-standard default shortcuts, and a new rounded app icon. +- Flatpak runtime moved to freedesktop 26.08, and Finnish spell checking with Voikko in the Flatpak and macOS builds. + ## Application Platform - Cross-platform Avalonia UI for Windows, Linux, and **macOS** — macOS is a new supported platform in SE 5. @@ -47,9 +149,9 @@ See [Spell Check](spell-check.md) for details. ## Video -- New **Video → Re-encode** tool that re-encodes a video into a format better suited for subtitling work. -- New **Video → Cut video** tool for trimming video segments directly from Subtitle Edit. -- **Video → Burn-in with logo** — a logo/watermark image can now be included when burning subtitles into video. +- New **Video → More → Re-encode video for better subtitling...** tool that re-encodes a video into a format better suited for subtitling work (see [Re-encode video](re-encode-video.md)). +- New **Video → More → Cut video...** tool for trimming video segments directly from Subtitle Edit (see [Cut video](cut-video.md)). +- **Logo in burn-in** — **Video → Generate video with burned-in subtitles...** can include a logo/watermark image (see [Effect and logo](burn-in.md#effect-and-logo)). - Many new speech-to-text engines (see [Speech to Text](#speech-to-text) below). - New **Video → OCR burned-in subtitle** tool that extracts hardcoded subtitles from video via OCR (see [Video OCR](video-ocr.md)). - Improved reading of subtitles embedded in MP4 files. diff --git a/docs/features/word-lists.md b/docs/features/word-lists.md index 1752a980a43..523ef78149a 100644 --- a/docs/features/word-lists.md +++ b/docs/features/word-lists.md @@ -47,4 +47,4 @@ Word lists are organized by language. The language dropdown shows all languages | Key | Action | |-----|--------| | Escape | Close | -| F1 | Open help | +| F1 | Show help (default key, [changeable](shortcuts.md#worth-knowing)) | diff --git a/docs/index.md b/docs/index.md index d29a01e5e1e..e47f430031c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -19,6 +19,7 @@ Subtitle Edit is a free, open-source editor for video subtitles. This is the doc ### Editing - [Edit Menu](features/edit.md) — Find, Replace, Multiple Replace, History +- [Command Palette](features/command-palette.md) — Find and run any command by typing part of its name (Ctrl+Shift+K) - [Source View](features/source-view.md) — Edit the raw subtitle source: syntax coloring, live parse check, find/replace, line commands - [Modify Selection](features/modify-selection.md) — Select lines by rules: text, hearing-impaired text, duration, CPS, gaps, styles, actors - [Assisted Split and Assisted Move](features/assisted-split.md) — Ranked one-click split points and word moves with full previews @@ -43,6 +44,7 @@ Subtitle Edit is a free, open-source editor for video subtitles. This is the doc - [Bridge Gaps](features/bridge-gaps.md) — Bridge gaps between subtitles - [Apply Minimum Gap](features/apply-min-gap.md) — Set minimum gap between subtitles - [Merge Short Lines](features/merge-short-lines.md) — Merge short subtitle lines +- [Merge Continuation Lines](features/merge-continuation-lines.md) — Merge sentences split across several subtitles, with a preview - [Merge Lines with Same Text](features/merge-same-text.md) — Merge duplicate text lines - [Merge Lines with Same Time Codes](features/merge-same-timecodes.md) — Merge lines with identical timings - [Merge Two Subtitles](features/merge-two-subtitles.md) — Combine two subtitles into one bilingual subtitle @@ -78,10 +80,11 @@ Subtitle Edit is a free, open-source editor for video subtitles. This is the doc - [Re-encode Video](features/re-encode-video.md) — Re-encode video files - [Cut Video](features/cut-video.md) — Cut video segments - [Remux Video](features/remux-video.md) — Repackage video with new audio tracks and soft subtitles, without re-encoding +- [Generate Background Music](features/background-music.md) — Generate looping instrumental music locally (ACE-Step) and add it to the video or under TTS speech ### Translation - [Auto Translate](features/auto-translate.md) — Automatic subtitle translation -- [Auto Translate: Advanced Local Engines](features/auto-translate-advanced.md) — Batch/context settings for the llama.cpp and Ollama advanced engines +- [Auto Translate: Advanced Local Engines](features/auto-translate-advanced.md) — Batch/context settings for the llama.cpp, Ollama and LM Studio advanced engines - [Copy/Paste Translate](features/copy-paste-translate.md) — Translate via copy/paste workflow ### Spell Check diff --git a/docs/overview.md b/docs/overview.md index 847cba1da3b..473ab00ed61 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -26,15 +26,25 @@ Subtitle Edit is a free, open-source editor for video subtitles. It allows you t ## System Requirements - Windows 10 (version 22H2 / build 19045) or newer, Linux, or macOS 12 (Monterey) or newer (macOS 14 / Sonoma or newer recommended - that is the oldest macOS .NET 10 is supported on) -- [FFmpeg](https://ffmpeg.org/) (for audio/video processing) +- [FFmpeg](https://ffmpeg.org/) (for audio/video processing, waveforms, burn-in etc.) - [libmpv](https://mpv.io/) for video playback +How you get FFmpeg and libmpv depends on the platform: +- **Windows** — not included; Subtitle Edit offers to download them the first time they are needed (libmpv when you open a video, FFmpeg for waveforms and other video features). Both can also be downloaded from **Options → Settings**. +- **macOS** — the `.dmg` is self-contained: libmpv and FFmpeg are bundled inside `Subtitle Edit.app`. +- **Linux** — the Flatpak bundles mpv and FFmpeg. The native `.tar.gz` builds use the system libraries, so install libmpv and FFmpeg with your package manager (see the [README](https://github.com/SubtitleEdit/subtitleedit#linux) for the package names per distribution). + +All builds are self-contained and do not need a separate .NET installation. + ## Getting Started Follow these simple steps to begin working with subtitles in Subtitle Edit: 1. **Install Subtitle Edit** - Download and install the latest version from the official website. + Download the latest version from the [Releases](https://github.com/SubtitleEdit/subtitleedit/releases) page: + - **Windows** — `SubtitleEdit-Windows-x64-Setup.exe` (installer), or `SubtitleEdit-Windows-x64.zip` / `SubtitleEdit-Windows-ARM64.zip` (portable - unzip and run `SubtitleEdit.exe`; settings are kept next to the program) + - **macOS** — `SubtitleEdit-macOS-ARM64.dmg` (Apple Silicon) or `SubtitleEdit-macOS-x64.dmg` (Intel). Open the `.dmg` and drag `Subtitle Edit.app` into `Applications`; it is signed and notarized, so it opens normally + - **Linux** — `SubtitleEdit-linux-x64.flatpak` (any distribution, install with `flatpak install SubtitleEdit-linux-x64.flatpak`), or the native `SubtitleEdit-Linux-x64.tar.gz` / `SubtitleEdit-Linux-ARM64.tar.gz` builds (need libmpv and FFmpeg from your package manager, see the [README](https://github.com/SubtitleEdit/subtitleedit#linux)) 2. **Open a video file** Go to **Video → Open video...** and select your video. @@ -71,7 +81,7 @@ The main window consists of several key areas: - **Video Player** — Preview video with subtitles - **Audio Visualizer** — Waveform/spectrogram for precise timing adjustments -Subtitle Edit offers **12 different layouts** for arranging these areas. Choose one with the **Layout** button on the toolbar or its configurable shortcut. +Subtitle Edit offers **15 different layouts** for arranging these areas. Choose one with the **Layout** button on the toolbar or its configurable shortcut. For a detailed guide to each area, mouse interactions, and keyboard shortcuts, see the **[Main Window](features/main-window.md)** documentation. diff --git a/docs/plugin.md b/docs/plugin.md index 5f51bfc03f5..6ddba7ef07e 100644 --- a/docs/plugin.md +++ b/docs/plugin.md @@ -142,6 +142,7 @@ The manifest lets Subtitle Edit list the plugin in its menus without launching i | `executables` | yes\* | Native executable file names per OS, relative to the plugin folder. | | `runtime` | no | Set to `"dotnet"` to launch via the shared .NET runtime instead of a native exe. | | `entry` | no | Entry `.dll` (relative to the plugin folder), used with `runtime: "dotnet"`. | +| `batch` | no | `true` when the plugin supports **Batch convert**: it handles the `batch` and `configure` request types (see [Batch convert](#batch-convert)). Default `false`. | \* Provide either `executables` **or** `runtime` + `entry`. A `dotnet` plugin is launched as `dotnet `. @@ -247,6 +248,34 @@ launched as `dotnet `. your plugin's own UI can match Subtitle Edit. May be omitted in older SE versions — fall back to your platform's defaults when it is missing. +- `requestType` is `run` from the Plugins menu. Plugins with `"batch": true` in + their manifest can also get `batch` and `configure` — see below. + +## Batch convert + +A plugin that sets `"batch": true` in `plugin.json` is offered as **Run plugin** in +**Tools → Batch convert**. Subtitle Edit then sends two more request types: + +| `requestType` | When | What the plugin must do | +|---------------|------|-------------------------| +| `configure` | The user clicks **Configure...** next to the plugin in Batch convert. | Show your settings UI only. Return `status: "ok"` with `settings` (and `settingsVersion`) and **no** `subtitle`, or `cancelled`. `subtitle` in the request is empty except `format`, which is the batch target format. | +| `batch` | Once per file during a batch run. | **Do not show any UI** — the batch runs unattended. Apply your saved `settings` (from a previous `run` or `configure`) to **all lines** and return `ok` with the subtitle, `ok` without a subtitle for "no changes", or `error` with a `message`. | + +- In a `batch` request `subtitle` is the file being converted after the batch steps + before it, in the file's original format (`subtitle.format`), and + `subtitle.fileName` is the source file. `selectedIndices` is empty, and the video + fields are empty/null. +- `settings` returned from a `batch` response are **ignored**, so one run cannot + change its own configuration halfway through. Use `configure` (or a normal `run`) + to change them. +- `error` (or a crash, non-zero exit code or missing response) marks that file as + failed in Batch convert; the batch continues with the next file. `message` is shown + as the file's status. +- Run plugin is applied after the other text steps (just before Sort by and + Renumber) and is skipped for image-to-image conversions. +- Plugins without `"batch": true` never receive these request types, so older + plugins are not affected. + ## response.json (plugin → Subtitle Edit) Write this file to `responseFilePath` before exiting with code `0`. diff --git a/docs/reference/command-line.md b/docs/reference/command-line.md index 2b0a6aa7952..201cfc9ad27 100644 --- a/docs/reference/command-line.md +++ b/docs/reference/command-line.md @@ -10,7 +10,7 @@ - **Container input** — Matroska (`.mkv` / `.mks`), MP4, MCC, MXF, AVI (`.avi` / `.divx`), transport stream teletext, Blu-Ray `.sup`. - **OCR for image-based sources** via seven engines (Tesseract subprocess, nOCR built-in, BinaryOCR built-in, Ollama HTTP, llama.cpp HTTP with automatic server start, PaddleOCR subprocess, Apple Vision built into macOS). - **Auto-translate** via local LLMs (llama.cpp with automatic server start, Ollama, LM Studio), any OpenAI-compatible API, DeepL, or self-hosted services (LibreTranslate, NLLB). -- **Image-based output** — Blu-Ray sup, BDN-XML, DOST, FCP (Final Cut Pro + image), D-Cinema interop / SMPTE 2014, images-with-time-code. +- **Image-based output** — Blu-Ray sup, BDN-XML, DOST, FCP (Final Cut Pro + image), D-Cinema interop / SMPTE 2014 (also as a DCP-ready SMPTE MXF track file), images-with-time-code. - **Operations pipeline** — offset, fps change, change-speed, renumber, adjust-duration, fix-common-errors, merge/split, balance, redo casing, RTL fixes, multiple-replace, custom-text format, plain text. - **Cross-platform** — Windows, Linux, macOS. Only requires the .NET runtime; no display or GUI needed. @@ -85,6 +85,7 @@ seconv list-rf-rules # list remove-formatting rule IDs (alias: list-remov seconv dump-settings # print a full --settings JSON with libse defaults (alias: default-settings) seconv info # print format/encoding/duration/language for a file seconv lint # validate subtitle(s); exit 1 if issues found +seconv optimize-nocr # remove nOCR lines that don't tell characters apart (in place + .bak, or --output:) seconv --help # show help (same text as -h, /? and /help) seconv --help-json # print the whole command-line schema as JSON seconv --version # print version and exit @@ -161,6 +162,8 @@ seconv lint *.srt --json # CI-friendly: exit 1 on any issue | `--pac-codepage:` | PAC | Code page name (`Latin`, `Greek`, `Hebrew`, …) or numeric (0–12). See `seconv list-pac-codepages` | | `--pac-secondary-codepage:` | PAC | Code page for lines in another script (e.g. `Cyrillic` for the Russian lines of a Hebrew file); those lines are flagged "secondary code page". Reading detects it automatically | | `--ebu-header-file:` | EBU STL | Reuse the GSI header block from an existing `.stl` file | +| `--dcinema-font:` | D-Cinema SMPTE MXF (`dcinemasmpte2014mxf`) | Font (`.ttf`/`.otf`) embedded in the track file under the `LoadFont` `urn:uuid` (required) | +| `--reel-duration:` | D-Cinema SMPTE MXF (text and png) | Reel (picture) length at the output frame rate. Every asset of a DCP reel must have it, so set it to the picture's length; default ends the track at the last subtitle | | `--plaintext-merge` | Plain text (`txt`) | Merge all subtitles into one space-separated block (no blank lines). Takes precedence over the two options below | | `--plaintext-unbreak` | Plain text (`txt`) | Unbreak each subtitle, joining its lines into one | | `--plaintext-no-blank-line` | Plain text (`txt`) | Do not put a blank line between subtitles (default keeps it) | @@ -262,7 +265,7 @@ An AVI stream header carries no language, so a multi-stream `.avi` names its out | `nocr` | In-process | Built-in nOCR matcher. Required: `--ocr-db:`. | | `binaryocr` *(alias: `binary`)* | In-process | Built-in BinaryOCR matcher (different accuracy profile, similar speed). Required: `--ocr-db:`. | | `ollama` | HTTP | Local Ollama server with a vision-capable model (e.g. `llama3.2-vision`, `qwen2.5vl`). Configure via `--ollama-url` (default `http://localhost:11434/api/chat`) and `--ollama-model` (default `llama3.2-vision`). Pass `--ocr-language` as a human name like `English`. | -| `llamacpp` *(aliases: `llama.cpp`, `llama`)* | HTTP | llama.cpp with a curated OCR vision model (best-first: GLM-OCR, LFM2.5-VL 3B, PaddleOCR-VL, HunyuanOCR 1.5, LightOnOCR). With no `--ocr-url`, seconv finds `llama-server` (SE data folder next to seconv, installed SE data folder, then `PATH`) and an OCR model — the first model in that order that is installed, unless `--ocr-model` names one — starts the server on a free loopback port, and stops it at exit. seconv never downloads engines/models — install them via the SE UI's OCR window (engine "llama.cpp") or point `--ocr-url` at a running server. Pass `--ocr-language` as a human name like `English`. | +| `llamacpp` *(aliases: `llama.cpp`, `llama`)* | HTTP | llama.cpp with a curated OCR vision model (best-first: GLM-OCR, LightOnOCR-3 4B, LFM2.5-VL 3B, PaddleOCR-VL, HunyuanOCR 1.5, QARI-OCR 0.2.2.1 (Arabic), LightOnOCR-3 0.8B). With no `--ocr-url`, seconv finds `llama-server` (SE data folder next to seconv, installed SE data folder, then `PATH`) and an OCR model — the first model in that order that is installed, unless `--ocr-model` names one — starts the server on a free loopback port, and stops it at exit. seconv never downloads engines/models — install them via the SE UI's OCR window (engine "llama.cpp") or point `--ocr-url` at a running server. Pass `--ocr-language` as a human name like `English`. | | `paddle` *(alias: `paddleocr`)* | Subprocess | Install via `pip install paddleocr` (3.7 or newer, for the PP-OCRv6 models); ensure the `paddleocr` binary is on `PATH`. Pass `--ocr-language` as a short code (`en`, `de`, …). Images are OCR'ed in batches: the prepared images of a file are written to a folder and one `paddleocr` process reads the whole folder, so the roughly twenty-second model load is paid once per file rather than once per image. | | `applevision` *(alias: `apple-vision`)* | In-process (macOS only) | macOS's built-in Vision framework — the same recognizer as the GUI's "Apple Vision" engine. Nothing to install. Pass `--ocr-language` as a Vision tag (`en-US`, `de-DE`, `zh-Hans`, …; default `en-US`); `de`, `deu` and `German` are mapped to the matching tag too. `seconv list-ocr-engines --json` lists the tags this Mac supports. | @@ -436,14 +439,14 @@ a no-op. `ollama` and `lmstudio` have no per-model template, so it is simply | Option | Description | |---|---| -| `--multiple-replace:` | Multiple-replace rules applied per paragraph after operations. Accepts the legacy SE *MultipleSearchAndReplaceGroups* XML **and** the file the SE5 GUI exports from *Tools → Multiple replace → export* — either `.template` (JSON) or `.csv`. Supports case-insensitive, `CaseSensitive`, and `RegularExpression` rules; only active rules are applied. The format is chosen by extension, then by content | +| `--multiple-replace:` | Multiple-replace rules applied per paragraph after operations. Accepts the legacy SE *MultipleSearchAndReplaceGroups* XML **and** the file the SE5 GUI exports from *Edit → Multiple replace → export* — either `.template` (JSON) or `.csv`. Supports case-insensitive, `CaseSensitive`, and `RegularExpression` rules; only active rules are applied. The format is chosen by extension, then by content | | `--custom-format:` | SE *CustomFormatItem* XML (use with `--format customtext`) | | `--settings:` | JSON file overlaying `Configuration.Settings` (general / tools / removeTextForHearingImpaired) plus image-output styling (exportImages). Optional `profiles` map for named overlays. The `tools` section also carries the auto-translate prompts (`llamaCppPrompt`, `ollamaPrompt`, `lmStudioPrompt`), so a `profiles` entry can hold a per-target-language prompt. `tools.ocrUseWordSplitList: true` lets *Fix common OCR errors* split run-together words via the word split list (off by default, as in the GUI, because it also splits valid words missing from the dictionary) | | `--profile:` | Selects a named overlay from the settings file's `profiles` map. Requires `--settings` | #### Multiple-replace rule files -The quickest way to share rules between the GUI and `seconv`: in Subtitle Edit open **Tools → Multiple replace**, then **export** the rules as `.template` (JSON) or `.csv`, and pass that file to `--multiple-replace`. Both are read directly — no conversion needed. +The quickest way to share rules between the GUI and `seconv`: in Subtitle Edit open **Edit → Multiple replace**, then **export** the rules as `.template` (JSON) or `.csv`, and pass that file to `--multiple-replace`. Both are read directly — no conversion needed. ```bash seconv *.srt subrip --multiple-replace:my-rules.csv # exported from the GUI @@ -796,6 +799,8 @@ This mirrors the desktop app, where batch convert's *Remove formatting* function | `fcpimage`, `fcp` | FCP/image | | `dcinemainterop`, `dcinema-interop` | D-Cinema interop/png | | `dcinemasmpte2014`, `dcinema-smpte` | D-Cinema SMPTE 2014/png | +| `dcinemasmpte2014mxf`, `dcinema-smpte-mxf` | D-Cinema SMPTE 2014 as a SMPTE ST 429-5 MXF track file (DCP subtitle asset), font embedded (requires `--dcinema-font`) | +| `dcinemasmpte2014pngmxf`, `dcinema-smpte-png-mxf` | D-Cinema SMPTE 2014/png as one MXF track file, PNGs embedded — image | | `imageswithtimecode`, `imagesintc` | Images with time codes in file name | | `webvttthumbnail`, `webvtt-thumbnail`, `vttthumb` | WebVTT Thumbnail — image (sprite sheet + `.vtt`) | | `plaintext`, `text`, `txt` | Plain text (HTML stripped) | @@ -841,6 +846,14 @@ seconv subs.sup subrip \ --overwrite ``` +### DCP subtitle track file (SMPTE MXF) +```bash +# text, font embedded; reel duration = the picture's length (here 1:32:10 + 4 frames at 24 fps) +seconv movie.srt dcinemasmpte2014mxf --fps:24 --dcinema-font:Arial.ttf --reel-duration:01:32:10:04 +# rendered images instead of text, e.g. from a Blu-ray sup +seconv movie.sup dcinemasmpte2014pngmxf --fps:24 --reel-duration:01:32:10:04 +``` + ### Round-trip via image-based output ```bash seconv subs.srt bluraysup --resolution:1920x1080 --overwrite diff --git a/docs/reference/keyboard-shortcuts.md b/docs/reference/keyboard-shortcuts.md index 8ffff260d42..53c54e0cee5 100644 --- a/docs/reference/keyboard-shortcuts.md +++ b/docs/reference/keyboard-shortcuts.md @@ -19,6 +19,8 @@ A few defaults differ on macOS so the standard macOS shortcuts keep working and | Delete selected line(s) | Delete | Cmd+Backspace | The Delete key on Apple keyboards is a backspace | | Extend selected line to previous | Alt+Shift+E | Cmd+Option+Shift+E | Option+Shift+E types a character (È on Italian keyboards) | | Set start time | F11 | F9 | F11 shows the desktop | +| Set start and offset the rest | F9 | No default | F9 is set start time on macOS | +| Open data folder | Ctrl+Alt+Shift+D | Control+Cmd+Option+Shift+D | Cmd+Option+Shift+D alone never reaches the app | | Toggle play/pause (secondary) | Ctrl+Space | No default | Cmd+Space opens Spotlight | Settings that still had the old defaults are moved to the new ones on first start. Shortcuts you assigned yourself are left alone. @@ -48,8 +50,15 @@ Settings that still had the old defaults are moved to the new ones on first star | Alt+Down | Go to next line | | Ctrl+Home | Go to first line | | Ctrl+End | Go to last line | -| F1 | Show help | +| Ctrl+Shift+K | [Command palette](../features/command-palette.md) — search and run any command | +| F1 | Show help (every window opens its own help page) | | F2 | Show source view | +| F10 | Activate the main menu bar (press F10 or Escape again to return to editing) | +| Ctrl+F8 | List errors | +| F8 / Shift+F8 | Go to next / previous error | +| Alt+F7 | Spell check | + +F1 is the default for the **Help** action and can be changed in **Options** → **Shortcuts** like any other shortcut. The same key works in every dialog, and opens the help page for that dialog. ## Editing Lines @@ -76,6 +85,8 @@ Active while the subtitle text box has focus. | Ctrl+A | Select all text | | Shift+Delete | Cut (Windows-standard gesture; Subtitle Edit binds it because Avalonia does not) | | Shift+Backspace | Delete selection or next character — forward delete. Default on macOS only, where the Delete key is a backspace; assign it yourself elsewhere | +| Option+Backspace | Delete the previous word (macOS only, fixed) | +| Cmd+Backspace / Cmd+Delete | Delete to the start of the line (macOS only, fixed) | > **Note:** "Text box: Cut / Copy / Paste (alternative)" exist as separate, unbound actions in **Options** → **Shortcuts** for anyone who wants a second gesture (e.g. Ctrl+Insert / Shift+Insert). @@ -88,10 +99,14 @@ Active while the subtitle text box has focus. | Ctrl+Shift+I | Inverse selection | | Ctrl+I | Toggle italic on selected lines or text | | Ctrl+X / Ctrl+C / Ctrl+V | Cut / copy / paste selected lines | -| Ctrl+Shift+V | Fill selected lines with clipboard | -| Ctrl+F8 | List errors | -| F8 / Shift+F8 | Go to next / previous error | -| Alt+F7 | Spell check | +| Ctrl+Shift+V | Fill selected lines with clipboard text (also on a single line) | +| Up / Down | Previous / next line | +| PageUp / PageDown | Move the selection one page up / down | +| Home / End | First / last line | +| Shift+Up / Down / PageUp / PageDown / Home / End | Extend the selection (Ctrl+Shift, or Cmd+Shift on macOS, also works when that chord has no shortcut of its own) | +| 0–9 | Type a line number to jump to that line (digits typed within a second add up, e.g. 1 then 2 is line 12) | + +The navigation keys and the line-number type-ahead are fixed, not part of **Options** → **Shortcuts**. A shortcut you assign to a bare digit wins over the type-ahead. ## Source View @@ -134,6 +149,7 @@ Inside the [source view](../features/source-view.md) window (F2), which edits th |----------|--------| | F11 | Set start time | | F12 | Set end time | +| F9 | Set start and offset the rest (Windows / Linux; no default on macOS) | "Set end time and go to next line" has no default shortcut: bare F10 activates the main menu bar (the Windows standard). Assign F10 to the action in Options → @@ -146,8 +162,8 @@ wins over the menu activation. |----------|--------| | Ctrl+V | Paste lines from clipboard at waveform position | | Ctrl+C | Copy the selected subtitle to the clipboard ("Copy (text only)" has no default key) | -| Shift++ | Vertical zoom in | -| Shift+- | Vertical zoom out | +| Shift+Numpad + | Vertical zoom in (waveform focused) | +| Shift+Numpad − | Vertical zoom out (waveform focused) | ## Tools diff --git a/docs/reference/mouse-controls.md b/docs/reference/mouse-controls.md index 5aac4e09155..76eb84ad51a 100644 --- a/docs/reference/mouse-controls.md +++ b/docs/reference/mouse-controls.md @@ -22,7 +22,7 @@ Full screen is toggled with Alt+Enter — see [Keyboard Shortcuts](keyboard-shor | Left-click + drag in empty area | Create a new selection | | Shift + Click | Set the selected subtitle's start time to the clicked position | | Ctrl (or Cmd) + Click | Set the selected subtitle's end time to the clicked position | -| Ctrl + Shift + Click | Set the selected subtitle's start time and offset all following subtitles by the same amount | +| Ctrl (Cmd on macOS) + Shift + Click | Set the selected subtitle's start time and offset all following subtitles by the same amount | | Alt + Click | Move the selected subtitle's start to the clicked position, keeping its duration | | Right-click | Select the subtitle under the cursor ("Select subtitle on right click", on by default), move the video position there, and open the context menu. On macOS, Ctrl + left-click opens the same menu | | Scroll wheel | Scroll waveform horizontally — or seek the video by one step per notch when "Mouse-wheel sets video position" is on; "Invert mouse-wheel" flips the direction (Options → Settings → Waveform/spectrogram) | @@ -31,6 +31,8 @@ Full screen is toggled with Alt+Enter — see [Keyboard Shortcuts](keyboard-shor | Ctrl (or Cmd) + Scroll wheel | Scroll waveform and seek video to cursor | | Double-click | Nothing by default — set "Waveform double-click action" in Options → Settings → Waveform/spectrogram to select the subtitle, center on it, pause, or play | +With the waveform focused, the Delete key deletes the selected subtitle(s). On Apple keyboards that is the forward delete, Fn+Delete — the key labeled Delete is a backspace. + ## Subtitle Grid | Action | Effect | diff --git a/docs/screenshots/README.md b/docs/screenshots/README.md index ab7fa318fac..9dcef9269af 100644 --- a/docs/screenshots/README.md +++ b/docs/screenshots/README.md @@ -27,6 +27,7 @@ All listed files exist on disk. Filenames are stable and may be linked from `../ - `file-menu.png` — File menu - `compare.png` — Compare window - `import-plain-text.png` — Import plain text window +- `import-dvd.png` — Import subtitles from DVD window - `export-image-based.png` — Export image based window ## Edit @@ -38,6 +39,8 @@ All listed files exist on disk. Filenames are stable and may be linked from `../ - `modify-selection.png` — Modify selection window - `show-history.png` — Show history window - `ai-assistant.png` — AI assistant window +- `assisted-split.png` — Assisted split window +- `assisted-move.png` — Assisted move window ## Tools @@ -65,6 +68,10 @@ All listed files exist on disk. Filenames are stable and may be linked from `../ - `renumber.png` — Renumber window - `remove-text-hi.png` — Remove text for hearing impaired window - `ai-review.png` - AI review window +- `list-errors.png` — List errors window +- `merge-continuation-lines.png` — Merge continuation lines window +- `remove-unicode-characters.png` — Remove/replace Unicode characters window +- `improve-time-codes.png` — Improve time codes window ## Synchronization @@ -91,11 +98,14 @@ All listed files exist on disk. Filenames are stable and may be linked from `../ - `re-encode-video.png` — Re-encode video window - `video-ocr.png` — Video OCR window - `chapters.png` — Chapters window +- `remux-video.png` — Remux video window +- `background-music.png` — Generate background music window ## Translation - `auto-translate.png` — Auto translate window - `copy-paste-translate.png` — Copy/paste translate window +- `auto-translate-advanced.png` — Advanced settings for the advanced local LLM translate engines ## Spell Check @@ -111,6 +121,7 @@ All listed files exist on disk. Filenames are stable and may be linked from `../ - `ocr.png` — OCR window - `ocr-preprocessing.png` — OCR pre-processing window +- `binary-edit.png` — Edit image-based subtitle window ## ASSA — Tool Windows @@ -118,6 +129,8 @@ All listed files exist on disk. Filenames are stable and may be linked from `../ - `assa-properties.png` — ASSA properties window - `assa-attachments.png` — ASSA attachments window - `assa-draw.png` — ASSA draw window +- `assa-draw-shape-library.png` — ASSA draw shape library +- `assa-draw-context-menu.png` — ASSA draw right-click menu - `assa-set-position.png` — ASSA set position window - `assa-set-background.png` — ASSA set background window - `assa-progress-bar.png` — ASSA progress bar window @@ -152,6 +165,7 @@ Used by `../reference/assa-override-tags.md` to illustrate individual override t - `subtitle-grid-column-menu.png` — Subtitle grid column menu - `text-editor.png` — Text editor standalone - `statistics.png` — Statistics window +- `command-palette.png` — Command palette with a search typed ## Options @@ -161,9 +175,9 @@ Used by `../reference/assa-override-tags.md` to illustrate individual override t ## Counts -- Top-level screenshots: **96** +- Top-level screenshots: **110** - ASSA override-tag examples (`assa/`): **35** -- Total: **131** +- Total: **145** ## How the dialog screenshots are made diff --git a/docs/screenshots/assa-draw-context-menu.png b/docs/screenshots/assa-draw-context-menu.png new file mode 100644 index 00000000000..f6177f5242d Binary files /dev/null and b/docs/screenshots/assa-draw-context-menu.png differ diff --git a/docs/screenshots/assa-draw-shape-library.png b/docs/screenshots/assa-draw-shape-library.png new file mode 100644 index 00000000000..1168acf4a0f Binary files /dev/null and b/docs/screenshots/assa-draw-shape-library.png differ diff --git a/docs/screenshots/assa-draw.png b/docs/screenshots/assa-draw.png index c41b8a11b9e..bfcfd9d6ff8 100644 Binary files a/docs/screenshots/assa-draw.png and b/docs/screenshots/assa-draw.png differ diff --git a/docs/screenshots/assisted-move.png b/docs/screenshots/assisted-move.png new file mode 100644 index 00000000000..86a2ee0360f Binary files /dev/null and b/docs/screenshots/assisted-move.png differ diff --git a/docs/screenshots/assisted-split.png b/docs/screenshots/assisted-split.png new file mode 100644 index 00000000000..594ad2bf980 Binary files /dev/null and b/docs/screenshots/assisted-split.png differ diff --git a/docs/screenshots/auto-translate-advanced.png b/docs/screenshots/auto-translate-advanced.png new file mode 100644 index 00000000000..b0ba23ce6fe Binary files /dev/null and b/docs/screenshots/auto-translate-advanced.png differ diff --git a/docs/screenshots/background-music.png b/docs/screenshots/background-music.png new file mode 100644 index 00000000000..08a41da28f4 Binary files /dev/null and b/docs/screenshots/background-music.png differ diff --git a/docs/screenshots/binary-edit.png b/docs/screenshots/binary-edit.png new file mode 100644 index 00000000000..1273c4a3df9 Binary files /dev/null and b/docs/screenshots/binary-edit.png differ diff --git a/docs/screenshots/command-palette.png b/docs/screenshots/command-palette.png new file mode 100644 index 00000000000..9d977baf2e6 Binary files /dev/null and b/docs/screenshots/command-palette.png differ diff --git a/docs/screenshots/import-dvd.png b/docs/screenshots/import-dvd.png new file mode 100644 index 00000000000..a04e8081074 Binary files /dev/null and b/docs/screenshots/import-dvd.png differ diff --git a/docs/screenshots/list-errors.png b/docs/screenshots/list-errors.png new file mode 100644 index 00000000000..b50318df4e8 Binary files /dev/null and b/docs/screenshots/list-errors.png differ diff --git a/docs/screenshots/merge-continuation-lines.png b/docs/screenshots/merge-continuation-lines.png new file mode 100644 index 00000000000..341a68260c1 Binary files /dev/null and b/docs/screenshots/merge-continuation-lines.png differ diff --git a/docs/screenshots/remove-unicode-characters.png b/docs/screenshots/remove-unicode-characters.png new file mode 100644 index 00000000000..04a73e569f3 Binary files /dev/null and b/docs/screenshots/remove-unicode-characters.png differ diff --git a/docs/screenshots/remux-video.png b/docs/screenshots/remux-video.png new file mode 100644 index 00000000000..a974782cc91 Binary files /dev/null and b/docs/screenshots/remux-video.png differ diff --git a/docs/third-party-components.md b/docs/third-party-components.md index c42d3997011..6c6aefdf89b 100644 --- a/docs/third-party-components.md +++ b/docs/third-party-components.md @@ -150,12 +150,12 @@ Subtitle Edit 5 can download local TTS servers and models from the **Text to spe * **Piper:** Stored in `[Data Folder]/TextToSpeech/Piper`. A custom voice is an `.onnx` model with its `.onnx.json` beside it in that folder (imported from the voice settings dialog or copied in by hand). ### audio.cpp (Text-to-Speech runtime) -The runtime behind **IndexTTS 2.5**, **Higgs Audio v3**, **Fish Audio S2 Pro**, **FireRedTTS3** and **KugelAudio**. One install serves all five engines, and each of them prompts for it on first use. +The runtime behind **IndexTTS 2.5**, **Higgs Audio v3**, **Fish Audio S2 Pro**, **Breeze TTS 2**, **FireRedTTS3** and **KugelAudio**. One install serves all six engines, and each of them prompts for it on first use. * **Download:** Built by Subtitle Edit's own workflow from upstream audio.cpp and published in [SubtitleEdit/support-files releases](https://github.com/SubtitleEdit/support-files/releases) (upstream only ships Windows builds). CPU, CUDA and Vulkan builds for Windows and Linux x64, and a Metal build for macOS Apple Silicon. * **Destination:** `[Data Folder]/audio.cpp` - `audiocpp_server.exe` (`audiocpp_server` on Linux/macOS) plus a `BUILD-INFO.txt` listing the model families the build was compiled with. Subtitle Edit reads that file and offers an update when an engine needs a family the installed build lacks, so keep it next to the binary if you install by hand. -* **Models:** GGUF weights come straight from Hugging Face (`audio-cpp/audio.cpp-gguf`) and go into `[Data Folder]/audio.cpp/models/-GGUF`: `IndexTTS2.5-GGUF`, `Higgs-Audio-v3-TTS-4B-GGUF`, `Fish-Audio-S2-Pro-GGUF`, `FireRedTTS3-Base-GGUF` and `KugelAudio-0-Open-GGUF`. IndexTTS 2.5, Higgs Audio v3 and Fish Audio S2 Pro show a licence window before the first download. -* **Voices:** Reference recordings are kept per engine under `[Data Folder]/TextToSpeech/IndexTts25AudioCpp`, `HiggsTtsAudioCpp`, `FishTtsAudioCpp` and `FireRedTts3AudioCpp`. KugelAudio has no reference recordings: its four preset voices are inside the model file. +* **Models:** GGUF weights come straight from Hugging Face (`audio-cpp/audio.cpp-gguf`) and go into `[Data Folder]/audio.cpp/models/-GGUF`: `IndexTTS2.5-GGUF`, `Higgs-Audio-v3-TTS-4B-GGUF`, `Fish-Audio-S2-Pro-GGUF`, `Breeze-TTS-2-GGUF`, `FireRedTTS3-Base-GGUF` and `KugelAudio-0-Open-GGUF`. IndexTTS 2.5, Higgs Audio v3, Fish Audio S2 Pro and Breeze TTS 2 show a licence window before the first download. +* **Voices:** Reference recordings are kept per engine under `[Data Folder]/TextToSpeech/IndexTts25AudioCpp`, `HiggsTtsAudioCpp`, `FishTtsAudioCpp`, `BreezeTtsAudioCpp` and `FireRedTts3AudioCpp`. KugelAudio has no reference recordings: its four preset voices are inside the model file. These are examples, not the full set — many more local engines are downloadable from the Text to speech window (IndexTTS, CosyVoice3, dots.tts, VoxCPM2, MOSS-TTS, Zonos, VibeVoice, Confucius4-TTS, Pocket TTS, Supertonic, and more), following the same layout: CrispASR-based engines share the `[Data Folder]/CrispASR` cache, the audio.cpp engines share `[Data Folder]/audio.cpp`, and the rest live under `[Data Folder]/TextToSpeech/`. diff --git a/installer/flatpak/dk.nikse.subtitleedit.metainfo.xml b/installer/flatpak/dk.nikse.subtitleedit.metainfo.xml index 1d4b74ad3c1..739569519c9 100644 --- a/installer/flatpak/dk.nikse.subtitleedit.metainfo.xml +++ b/installer/flatpak/dk.nikse.subtitleedit.metainfo.xml @@ -74,6 +74,12 @@ + + https://github.com/SubtitleEdit/subtitleedit/releases/tag/v5.3.0 + +

A command palette, DVD import, forced-alignment time code improvement, video remuxing, a new FFmpeg video player, closed captions from video files, a redesigned ASSA drawing tool, much better nOCR, new speech to text, text to speech and translation engines, and many accessibility and bug fixes.

+
+
https://github.com/SubtitleEdit/subtitleedit/releases/tag/v5.2.0 diff --git a/installer/flatpak/flathub/dk.nikse.subtitleedit.yaml b/installer/flatpak/flathub/dk.nikse.subtitleedit.yaml index a19b6513072..82bd4a80a03 100644 --- a/installer/flatpak/flathub/dk.nikse.subtitleedit.yaml +++ b/installer/flatpak/flathub/dk.nikse.subtitleedit.yaml @@ -468,8 +468,14 @@ modules: # AppStream metainfo - install -Dm644 installer/flatpak/dk.nikse.subtitleedit.metainfo.xml /app/share/metainfo/dk.nikse.subtitleedit.metainfo.xml - # Icon (256x256 PNG from the source tree) + # Icon (256x256 PNG from the source tree, plus pre-scaled smaller sizes so + # desktop menus/panels don't show a blank icon when they look up e.g. 48x48) - install -Dm644 src/ui/Assets/SE.png /app/share/icons/hicolor/256x256/apps/dk.nikse.subtitleedit.png + - | + for size in 16 24 32 48 64 128; do + install -Dm644 "installer/flatpak/icons/dk.nikse.subtitleedit-${size}.png" \ + "/app/share/icons/hicolor/${size}x${size}/apps/dk.nikse.subtitleedit.png" + done # MIT license — distribute the project's terms alongside the app (issue #11278). - install -Dm644 LICENSE /app/share/licenses/dk.nikse.subtitleedit/LICENSE @@ -486,16 +492,12 @@ modules: # regeneration pass before merging; see ../flathub/README.md. - type: git url: https://github.com/SubtitleEdit/subtitleedit.git - tag: v5.2.0 - commit: d8e3b8b41e856a896c541ce7e59b490a99c21196 + tag: v5.3.0 + commit: 89f14c8273cac44bae33a613d3adf4a6efe6b3ad x-checker-data: type: git tag-pattern: ^v(\d+\.\d+\.\d+)$ - - type: shell - commands: - - sed -i 's|/subtitleedit/images/main.png|/subtitleedit/screenshots/main-window.png|' installer/flatpak/dk.nikse.subtitleedit.metainfo.xml - # NuGet packages pre-fetched for the exact commit pinned above. # Regenerate with ./prepare-flathub-release.sh whenever the pin changes. - nuget-sources.json diff --git a/src/libse/BluRaySup/BluRaySupPicture.cs b/src/libse/BluRaySup/BluRaySupPicture.cs index 735d63d694a..3d3a24381ca 100644 --- a/src/libse/BluRaySup/BluRaySupPicture.cs +++ b/src/libse/BluRaySup/BluRaySupPicture.cs @@ -1141,9 +1141,10 @@ private static byte[] CreateSupFrame(BluRaySupPicture pic, IList= 0; long pts; long endPts; diff --git a/src/libse/CDG/CdgGraphics.cs b/src/libse/CDG/CdgGraphics.cs index ebe438b87cc..5da5ed3b213 100644 --- a/src/libse/CDG/CdgGraphics.cs +++ b/src/libse/CDG/CdgGraphics.cs @@ -84,7 +84,11 @@ public SKBitmap ToBitmap(int packetNumber) // long timeInMilliseconds) // Skia read that back as R,G,B,A - i.e. red and blue swapped in every frame. var bitmap = new SKBitmap(FullWidth, FullHeight, SKColorType.Bgra8888, SKAlphaType.Premul); - // Copy pixel data into the bitmap + // Copy pixel data into the bitmap, making the color at (1, 1) transparent on the way + // (equivalent to the original's image.MakeTransparent(image.GetPixel(1, 1))). Every + // pixel is opaque, so a match is written as 0 - what a Src-blended transparent + // DrawPoint used to produce, without two native calls per pixel. + var transparentValue = PackOpaque(graphicData[1, 1]); var pixelData = bitmap.GetPixels(); unsafe { @@ -93,41 +97,24 @@ public SKBitmap ToBitmap(int packetNumber) // long timeInMilliseconds) { for (var x = 0; x < FullWidth; x++) { - var colorValue = graphicData[y, x]; - var a = 255; // Fully opaque - var r = (byte)((colorValue >> 16) & 0xFF); - var g = (byte)((colorValue >> 8) & 0xFF); - var b = (byte)(colorValue & 0xFF); - - // Pack ARGB components into a single 32-bit integer - pixels[y * FullWidth + x] = (uint)((a << 24) | (r << 16) | (g << 8) | b); + var packed = PackOpaque(graphicData[y, x]); + pixels[y * FullWidth + x] = packed == transparentValue ? 0 : packed; } } } - // Make a specific color transparent (equivalent to the original's image.MakeTransparent(image.GetPixel(1, 1))) - var transparentColor = bitmap.GetPixel(1, 1); - using (var canvas = new SKCanvas(bitmap)) - { - var paint = new SKPaint - { - Color = SKColors.Transparent, - BlendMode = SKBlendMode.Src - }; + return bitmap; + } - for (var y = 0; y < FullHeight; y++) - { - for (var x = 0; x < FullWidth; x++) - { - if (bitmap.GetPixel(x, y) == transparentColor) - { - canvas.DrawPoint(x, y, paint); - } - } - } - } + private static uint PackOpaque(int colorValue) + { + var a = 255; // Fully opaque + var r = (byte)((colorValue >> 16) & 0xFF); + var g = (byte)((colorValue >> 8) & 0xFF); + var b = (byte)(colorValue & 0xFF); - return bitmap; + // Pack ARGB components into a single 32-bit integer + return (uint)((a << 24) | (r << 16) | (g << 8) | b); } private bool Process(Packet packet) diff --git a/src/libse/Cea608/SerializedScreenText.cs b/src/libse/Cea608/SerializedScreenText.cs index 3c888681a23..3a61a5b361a 100644 --- a/src/libse/Cea608/SerializedScreenText.cs +++ b/src/libse/Cea608/SerializedScreenText.cs @@ -137,7 +137,7 @@ private static int GetPreviousCharIndex(StringBuilder sb, int end) private static bool IsOpeningMark(StringBuilder sb, int index) { var ch = sb[index]; - if ("([{“‘¿¡".IndexOf(ch) >= 0) + if ("([{“‘¿¡".Contains(ch)) { return true; } @@ -147,7 +147,7 @@ private static bool IsOpeningMark(StringBuilder sb, int index) // A straight quote opens at the start or after a space or bracket: "Jaws" // - after a word it closes (or is an apostrophe). var before = GetPreviousCharIndex(sb, index); - return before < 0 || char.IsWhiteSpace(sb[before]) || "([{".IndexOf(sb[before]) >= 0; + return before < 0 || char.IsWhiteSpace(sb[before]) || "([{".Contains(sb[before]); } return false; @@ -156,7 +156,7 @@ private static bool IsOpeningMark(StringBuilder sb, int index) private static bool IsClosingMark(SerializedStyledUnicodeChar[] columns, int index) { var ch = columns[index].Character[0]; - if (".,!?;:)]}'…’”".IndexOf(ch) >= 0) + if (".,!?;:)]}'…’”".Contains(ch)) { return true; // a straight apostrophe right after a word: "Jaws's" } diff --git a/src/libse/Common/ContinuationUtilities.cs b/src/libse/Common/ContinuationUtilities.cs index 14e4069bdac..6f460b4c0ae 100644 --- a/src/libse/Common/ContinuationUtilities.cs +++ b/src/libse/Common/ContinuationUtilities.cs @@ -742,7 +742,7 @@ public static string RemovePrefix(string originalText, ContinuationProfile profi string result = null; // If we can find it... - if (originalText.IndexOf(firstWord, StringComparison.Ordinal) >= 0) + if (originalText.Contains(firstWord)) { // Replace it result = ReplaceFirstOccurrence(originalText, firstWord, newFirstWord); @@ -903,7 +903,7 @@ public static bool IsItalic(string input) return false; } - while (input.IndexOf("", StringComparison.Ordinal) >= 0) + while (input.Contains("")) { var startIndex = input.IndexOf("", StringComparison.Ordinal); var endIndex = input.IndexOf("", startIndex, StringComparison.Ordinal); @@ -932,7 +932,7 @@ public static bool IsBold(string input) return false; } - while (input.IndexOf("", StringComparison.Ordinal) >= 0) + while (input.Contains("")) { var startIndex = input.IndexOf("", StringComparison.Ordinal); // From startIndex, as IsItalic does: searching from 0 found a stray leading diff --git a/src/libse/Common/DutchCasing.cs b/src/libse/Common/DutchCasing.cs index 492b19de02f..e7cd537e3c8 100644 --- a/src/libse/Common/DutchCasing.cs +++ b/src/libse/Common/DutchCasing.cs @@ -52,7 +52,7 @@ public static bool StartsWithContraction(string text) return text != null && text.Length > 3 && Array.IndexOf(Apostrophes, text[0]) >= 0 && - ContractionLetters.IndexOf(char.ToLowerInvariant(text[1])) >= 0 && + ContractionLetters.Contains(char.ToLowerInvariant(text[1])) && text[2] == ' '; } diff --git a/src/libse/Common/HtmlUtil.cs b/src/libse/Common/HtmlUtil.cs index d60999325fe..1d9858521c7 100644 --- a/src/libse/Common/HtmlUtil.cs +++ b/src/libse/Common/HtmlUtil.cs @@ -689,7 +689,7 @@ private static bool TryGetTagLength(ReadOnlySpan slice, out int length) /// True if the text is considered a URL, otherwise false. public static bool IsUrl(string text) { - if (string.IsNullOrWhiteSpace(text) || text.Length < 6 || text.IndexOf('.') < 0 || text.IndexOf(' ') >= 0) + if (string.IsNullOrWhiteSpace(text) || text.Length < 6 || !text.Contains('.') || text.Contains(' ')) { return false; } @@ -1343,8 +1343,8 @@ public static string ToggleTag(string input, string tag, bool wholeLine, bool as return text; } - if (text.IndexOf("<" + tag + ">", StringComparison.OrdinalIgnoreCase) >= 0 || - text.IndexOf("", StringComparison.OrdinalIgnoreCase) >= 0) + if (text.Contains("<" + tag + ">", StringComparison.OrdinalIgnoreCase) || + text.Contains("", StringComparison.OrdinalIgnoreCase)) { text = text.Replace("<" + tag + ">", string.Empty); text = text.Replace("", string.Empty); @@ -1389,8 +1389,8 @@ public static bool IsTagOn(string input, string tag, bool wholeLine, bool assa) return text.Contains($"\\{tag}"); } - return text.IndexOf("<" + tag + ">", StringComparison.OrdinalIgnoreCase) >= 0 || - text.IndexOf("", StringComparison.OrdinalIgnoreCase) >= 0; + return text.Contains("<" + tag + ">", StringComparison.OrdinalIgnoreCase) || + text.Contains("", StringComparison.OrdinalIgnoreCase); } /// @@ -1484,8 +1484,8 @@ public static string TagOff(string input, string tag, bool wholeLine, bool assa) return text; } - if (text.IndexOf("<" + tag + ">", StringComparison.OrdinalIgnoreCase) >= 0 || - text.IndexOf("", StringComparison.OrdinalIgnoreCase) >= 0) + if (text.Contains("<" + tag + ">", StringComparison.OrdinalIgnoreCase) || + text.Contains("", StringComparison.OrdinalIgnoreCase)) { text = text.Replace("<" + tag + ">", string.Empty); text = text.Replace("", string.Empty); diff --git a/src/libse/Common/LanguageAutoDetect.cs b/src/libse/Common/LanguageAutoDetect.cs index a557abbcce5..47c627d61ea 100644 --- a/src/libse/Common/LanguageAutoDetect.cs +++ b/src/libse/Common/LanguageAutoDetect.cs @@ -597,6 +597,8 @@ private static string AutoDetectGoogleLanguage(string text, int bestCount) return AutoDetectGoogleLanguage(text, bestCount, out _); } + /// The text to detect the language of. + /// The minimum number of keyword hits for a match. /// The number of keyword hits for the returned language. private static string AutoDetectGoogleLanguage(string text, int bestCount, out int score) { @@ -1337,10 +1339,8 @@ public static LanguageForAutoDetect[] GetLanguagesWithCount(string text) public static string AutoDetectGoogleLanguageOrNull(Subtitle subtitle) { - var s = new Subtitle(subtitle); - s.RemoveEmptyLines(); - var allText = s.GetAllTexts(500000).TrimEnd(); - var languageId = AutoDetectGoogleLanguage(allText, s.Paragraphs.Count / 14); + var allText = GetNonEmptyTexts(subtitle, 500000, out var nonEmptyCount); + var languageId = AutoDetectGoogleLanguage(allText, nonEmptyCount / 14); if (string.IsNullOrEmpty(languageId)) { languageId = GetEncodingViaLetter(allText); @@ -1363,12 +1363,40 @@ public static string AutoDetectGoogleLanguageOrNull(Subtitle subtitle) /// Keyword hits for the returned language - higher is more certain. public static string AutoDetectGoogleLanguageFromWordsOrNull(Subtitle subtitle, out int score) { - var s = new Subtitle(subtitle); - s.RemoveEmptyLines(); - var languageId = AutoDetectGoogleLanguage(s.GetAllTexts(500000).TrimEnd(), s.Paragraphs.Count / 14, out score); + var allText = GetNonEmptyTexts(subtitle, 500000, out var nonEmptyCount); + var languageId = AutoDetectGoogleLanguage(allText, nonEmptyCount / 14, out score); return string.IsNullOrEmpty(languageId) ? null : languageId; } + /// + /// The texts of the non-empty lines, one per line, stopping once past + /// and trimmed at the end - what a copy of the subtitle + /// with RemoveEmptyLines and GetAllTexts gave, without deep-copying every paragraph. + /// + /// The subtitle to read. + /// Stop collecting texts once past this many characters. + /// All non-empty lines, also those past the stop. + private static string GetNonEmptyTexts(Subtitle subtitle, int stopAfterBytes, out int nonEmptyCount) + { + nonEmptyCount = 0; + var sb = new StringBuilder(); + foreach (var p in subtitle.Paragraphs) + { + if (p.Text.IsOnlyControlCharactersOrWhiteSpace()) + { + continue; + } + + nonEmptyCount++; + if (sb.Length <= stopAfterBytes) + { + sb.AppendLine(p.Text); + } + } + + return sb.ToString().TrimEnd(); + } + /// /// Alias for AutoDetectGoogleLanguageOrNull for backward compatibility. /// @@ -1932,11 +1960,11 @@ public static Encoding DetectAnsiEncoding(byte[] buffer) } var spanishCount1252 = counts1252.Get(AutoDetectWordsSpanish); - if (textEnc1252.IndexOf('¡') >= 0) + if (textEnc1252.Contains('¡')) { spanishCount1252 += 5; } - if (textEnc1252.IndexOf('¿') >= 0) + if (textEnc1252.Contains('¿')) { spanishCount1252 += 5; } diff --git a/src/libse/Common/NoBreakAfterListInfo.cs b/src/libse/Common/NoBreakAfterListInfo.cs index 52764425d0d..59744ed9cbe 100644 --- a/src/libse/Common/NoBreakAfterListInfo.cs +++ b/src/libse/Common/NoBreakAfterListInfo.cs @@ -25,7 +25,7 @@ public NoBreakAfterListInfo(List items) { HasRegex = true; } - else if (item.Text != null && item.Text.IndexOf(' ') >= 0) + else if (item.Text != null && item.Text.Contains(' ')) { MultiWordItems = MultiWordItems ?? new List(); MultiWordItems.Add(item); diff --git a/src/libse/Common/Paragraph.cs b/src/libse/Common/Paragraph.cs index 5e7e1d48930..aab509ae18d 100644 --- a/src/libse/Common/Paragraph.cs +++ b/src/libse/Common/Paragraph.cs @@ -172,12 +172,7 @@ public double WordsPerMinute public double GetCharactersPerSecond() { - if (DurationTotalMilliseconds < 1) - { - return 999; - } - - return (double)Text.CountCharacters(true) / DurationTotalSeconds; + return GetCharactersPerSecond(CalcFactory.MakeCalculator(Configuration.Settings.General.CpsLineLengthStrategy)); } public double GetCharactersPerSecond(ICalcLength calc) diff --git a/src/libse/Common/RegexUtils.cs b/src/libse/Common/RegexUtils.cs index 73896ec1e15..c4265417817 100644 --- a/src/libse/Common/RegexUtils.cs +++ b/src/libse/Common/RegexUtils.cs @@ -299,13 +299,169 @@ public static string ReplaceNewLineSafe(Regex regularExpression, string text, st // unchanged through the SplitToLines+Join normalization, so skip the four allocations. if (!ContainsNonLineFeedNewLine(text) && !ContainsNonLineFeedNewLine(replaceWith)) { - return RestorePlatformNewLines(regularExpression.Replace(text, replaceWith, count, startIndex)); + return RestorePlatformNewLines(Replace(regularExpression, text, replaceWith, count, startIndex)); } - text = regularExpression.Replace(string.Join("\n", text.SplitToLines()), replaceWith, count, startIndex); + text = Replace(regularExpression, string.Join("\n", text.SplitToLines()), replaceWith, count, startIndex); return RestorePlatformNewLines(text); } + private static string Replace(Regex regularExpression, string text, string replaceWith, int count, int startIndex) + { + var parts = ParseCaseConversionReplacement(replaceWith); + if (parts == null) + { + return regularExpression.Replace(text, replaceWith, count, startIndex); + } + + return regularExpression.Replace(text, m => ApplyCaseConversion(m, parts), count, startIndex); + } + + private enum CaseConversion + { + None, + UpperNext, + LowerNext, + Upper, + Lower, + End, + } + + private readonly struct ReplacementPart + { + public ReplacementPart(string text, CaseConversion conversion) + { + Text = text; + Conversion = conversion; + } + + public string Text { get; } + public CaseConversion Conversion { get; } + } + + /// + /// Splits a replacement on the Perl-style case conversion escapes \u, \l (next character to + /// upper/lower case), \U, \L (upper/lower case until \E or the end) and \E (#16033), so a + /// rule like "^Um,\s*(\w)" -> "\u$1" can capitalize the word left at the start. "\\u" keeps + /// a literal "\u". Returns null when the replacement has none of them - plain .NET replace. + /// + private static List ParseCaseConversionReplacement(string replaceWith) + { + if (string.IsNullOrEmpty(replaceWith) || replaceWith.IndexOf('\\') < 0) + { + return null; + } + + List parts = null; + var sb = new System.Text.StringBuilder(); + for (var i = 0; i < replaceWith.Length; i++) + { + var ch = replaceWith[i]; + if (ch != '\\' || i + 1 >= replaceWith.Length) + { + sb.Append(ch); + continue; + } + + var next = replaceWith[i + 1]; + if (next == '\\' && i + 2 < replaceWith.Length && GetCaseConversion(replaceWith[i + 2]) != CaseConversion.None) + { + // "\\u" is an escaped backslash followed by a plain "u". + sb.Append('\\').Append(replaceWith[i + 2]); + i += 2; + parts = parts ?? new List(); + continue; + } + + var conversion = GetCaseConversion(next); + if (conversion == CaseConversion.None || + conversion != CaseConversion.End && i + 2 < replaceWith.Length && char.IsDigit(replaceWith[i + 2])) + { + // A digit after \u, \l, \U or \L is an ASSA tag like {\u1} (underline), not a case escape. + sb.Append(ch); + continue; + } + + parts = parts ?? new List(); + parts.Add(new ReplacementPart(sb.ToString(), conversion)); + sb.Clear(); + i++; + } + + if (parts == null) + { + return null; + } + + parts.Add(new ReplacementPart(sb.ToString(), CaseConversion.None)); + return parts; + } + + private static CaseConversion GetCaseConversion(char ch) + { + switch (ch) + { + case 'u': return CaseConversion.UpperNext; + case 'l': return CaseConversion.LowerNext; + case 'U': return CaseConversion.Upper; + case 'L': return CaseConversion.Lower; + case 'E': return CaseConversion.End; + default: return CaseConversion.None; + } + } + + /// + /// Builds one match's replacement: each part's text is expanded with + /// (so $1 etc. work), then cased by the \U/\L mode in effect, then the first character after a + /// \u/\l gets that one-shot conversion - so "\u\L$1" gives "Word" like in Perl. + /// + private static string ApplyCaseConversion(Match match, List parts) + { + var sb = new System.Text.StringBuilder(); + var mode = CaseConversion.None; + var oneShot = CaseConversion.None; + foreach (var part in parts) + { + var expanded = part.Text.Length == 0 ? string.Empty : match.Result(part.Text); + if (mode == CaseConversion.Upper) + { + expanded = expanded.ToUpperInvariant(); + } + else if (mode == CaseConversion.Lower) + { + expanded = expanded.ToLowerInvariant(); + } + + if (oneShot != CaseConversion.None && expanded.Length > 0) + { + var first = oneShot == CaseConversion.UpperNext + ? char.ToUpperInvariant(expanded[0]) + : char.ToLowerInvariant(expanded[0]); + expanded = first + expanded.Substring(1); + oneShot = CaseConversion.None; + } + + sb.Append(expanded); + + switch (part.Conversion) + { + case CaseConversion.UpperNext: + case CaseConversion.LowerNext: + oneShot = part.Conversion; + break; + case CaseConversion.Upper: + case CaseConversion.Lower: + mode = part.Conversion; + break; + case CaseConversion.End: + mode = CaseConversion.None; + break; + } + } + + return sb.ToString(); + } + /// /// Re-joins line-feed-normalized text with . The rest of /// libse keeps paragraph text with platform newlines, and the format writers rely on it - @@ -335,7 +491,7 @@ public static int CountNewLineSafe(Regex regularExpression, string text) private static bool ContainsNonLineFeedNewLine(string text) { - return text.IndexOf('\r') >= 0 || text.IndexOf('\u2028') >= 0; + return text.Contains('\r') || text.Contains('\u2028'); } } } diff --git a/src/libse/Common/SeJsonParser.cs b/src/libse/Common/SeJsonParser.cs index ff98339fe2f..8fe1b4e032e 100644 --- a/src/libse/Common/SeJsonParser.cs +++ b/src/libse/Common/SeJsonParser.cs @@ -255,7 +255,7 @@ public List GetAllTagsByNameAsStrings(string content, string name) list.Add("false"); } } - else if ("+-0123456789".IndexOf(ch) >= 0) + else if ("+-0123456789".Contains(ch)) { sb.Clear(); // Bounds check FIRST: this indexed content[i] before testing i < max, @@ -562,7 +562,7 @@ public List GetArrayElementsByName(string content, string name) list.Add("false"); } } - else if ("+-0123456789".IndexOf(ch) >= 0) + else if ("+-0123456789".Contains(ch)) { sb.Clear(); while (i < max && IsNumberChar(content[i])) @@ -860,7 +860,7 @@ public List GetArrayElements(string content) state.Peek().Count++; } } - else if ("+-0123456789".IndexOf(ch) >= 0) + else if ("+-0123456789".Contains(ch)) { // Bounds check FIRST: this indexed content[i] before testing i < max, // so a file whose last characters are a number (a truncated one) @@ -1189,7 +1189,7 @@ public string GetFirstObject(string content, string name) state.Peek().Count++; } } - else if ("+-0123456789".IndexOf(ch) >= 0) + else if ("+-0123456789".Contains(ch)) { sb.Clear(); // Bounds check FIRST: this indexed content[i] before testing i < max, @@ -1537,7 +1537,7 @@ public List GetRootElements(string content) // list.Add("false"); //} } - else if ("+-0123456789".IndexOf(ch) >= 0) + else if ("+-0123456789".Contains(ch)) { while (i < max && IsNumberChar(content[i])) { diff --git a/src/libse/Common/SeJsonValidator.cs b/src/libse/Common/SeJsonValidator.cs index 83328334984..de572f08edd 100644 --- a/src/libse/Common/SeJsonValidator.cs +++ b/src/libse/Common/SeJsonValidator.cs @@ -207,9 +207,9 @@ public bool ValidateJson(string content) state.Peek().Count++; } } - else if ("+-0123456789".IndexOf(ch) >= 0) + else if ("+-0123456789".Contains(ch)) { - while ("+-0123456789.Ee".IndexOf(content[i]) >= 0 && i < max) + while ("+-0123456789.Ee".Contains(content[i]) && i < max) { i++; } diff --git a/src/libse/Common/StringBuilderExtensions.cs b/src/libse/Common/StringBuilderExtensions.cs index f76f5875e1e..ef679413a53 100644 --- a/src/libse/Common/StringBuilderExtensions.cs +++ b/src/libse/Common/StringBuilderExtensions.cs @@ -67,12 +67,12 @@ public static bool EndsWith(this StringBuilder sb, string value) public static bool EndsWithAny(this StringBuilder sb, string chars, string skipTrailing = "") { var i = sb.Length - 1; - while (i >= 0 && skipTrailing.IndexOf(sb[i]) >= 0) + while (i >= 0 && skipTrailing.Contains(sb[i])) { i--; } - return i >= 0 && chars.IndexOf(sb[i]) >= 0; + return i >= 0 && chars.Contains(sb[i]); } // Same answer as string.IsNullOrWhiteSpace(sb.ToString()) without the copy. Walks the diff --git a/src/libse/Common/StringExtensions.cs b/src/libse/Common/StringExtensions.cs index ad9c9f8f5b9..999ccc80aac 100644 --- a/src/libse/Common/StringExtensions.cs +++ b/src/libse/Common/StringExtensions.cs @@ -115,21 +115,11 @@ public static bool EndsWith(this string s, char c) return s.Length > 0 && s[s.Length - 1] == c; } - public static bool Contains(this string source, char value) - { - return source.IndexOf(value) >= 0; - } - public static bool Contains(this string source, char[] value) { return source.IndexOfAny(value) >= 0; } - public static bool Contains(this string source, string value, StringComparison comparisonType) - { - return source.IndexOf(value, comparisonType) >= 0; - } - public static List SplitToLines(this string s) => s.SplitToLines(s.Length); /// diff --git a/src/libse/Common/StrippableText.cs b/src/libse/Common/StrippableText.cs index e6bc09e0a86..c02b017e015 100644 --- a/src/libse/Common/StrippableText.cs +++ b/src/libse/Common/StrippableText.cs @@ -415,7 +415,7 @@ public void FixCasing(IEnumerable nameList, bool changeNameCases, bool m lastWasBreak = true; } } - else if (s == ']' && idx == -1 && Pre.IndexOf('[') >= 0) + else if (s == ']' && idx == -1 && Pre.Contains('[')) { // [ Motor roaring ] Hallo! lastWasBreak = true; } @@ -436,7 +436,7 @@ public void FixCasing(IEnumerable nameList, bool changeNameCases, bool m } } } - else if (s == '-' && Pre.IndexOf('-') >= 0) + else if (s == '-' && Pre.Contains('-')) { if (sb.EndsWith(NewLineDash)) { diff --git a/src/libse/Common/SubtitlePositionToAssa.cs b/src/libse/Common/SubtitlePositionToAssa.cs index 451d0ee9cb8..4e631d3be0c 100644 --- a/src/libse/Common/SubtitlePositionToAssa.cs +++ b/src/libse/Common/SubtitlePositionToAssa.cs @@ -58,8 +58,8 @@ public static bool ApplyPositions(Subtitle subtitle, string sourceHeader, int pl // ASSA/SSA margins are already in script units - they are the one thing that must be left alone. if (!string.IsNullOrEmpty(sourceHeader) && - (sourceHeader.IndexOf("[V4+ Styles]", StringComparison.Ordinal) >= 0 || - sourceHeader.IndexOf("[V4 Styles]", StringComparison.Ordinal) >= 0)) + (sourceHeader.Contains("[V4+ Styles]") || + sourceHeader.Contains("[V4 Styles]"))) { return false; } diff --git a/src/libse/Common/TinyJsonParser.cs b/src/libse/Common/TinyJsonParser.cs index 7a2eeacc2fd..c9d10c3b246 100644 --- a/src/libse/Common/TinyJsonParser.cs +++ b/src/libse/Common/TinyJsonParser.cs @@ -132,6 +132,12 @@ private void WriteLineLog(string msg, params object[] args) Logger?.WriteLine(msg, args); } + // The params overload boxes the value and allocates an array for every token, logger or not. + private void WriteLineLog(string msg, T arg) + { + Logger?.WriteLine(msg, arg); + } + private ParserException BuildParserException(string msg) { if (CollectLineInfo) @@ -176,11 +182,10 @@ private string Accept(string s) return null; } - if (Input.IndexOf(s, Pos, len, StringComparison.Ordinal) != -1) + if (string.CompareOrdinal(Input, Pos, s, 0, len) == 0) { - var match = Input.Substring(Pos, len); AdvanceInput(len); - return match; + return s; } return null; @@ -325,6 +330,28 @@ private void ExpectDigits(ref int pos) private string String() { int currentPos = Pos; + + // Most strings have no escapes: slice them out instead of appending char by char. + while (currentPos < InputLength) + { + var ch = Input[currentPos]; + if (ch == '"') + { + var plain = Input.Substring(Pos, currentPos - Pos); + AdvanceInput(currentPos - Pos + 1); + WriteLineLog("string: {0}", plain); + return plain; + } + + if (ch == '\\' || ch < 0x20) + { + break; + } + + currentPos++; + } + + currentPos = Pos; StringBuilder sb = new StringBuilder(); while (true) diff --git a/src/libse/Common/Utilities.cs b/src/libse/Common/Utilities.cs index 542e42fcc2f..c0b4c9e1398 100644 --- a/src/libse/Common/Utilities.cs +++ b/src/libse/Common/Utilities.cs @@ -611,7 +611,7 @@ public static string AutoBreakLinePrivate(string input, int maximumLength, int m } var text = input.Replace('\u00a0', ' '); // replace non-break-space (160 decimal) ascii char with normal space - if (!(text.IndexOf(' ') >= 0 || text.IndexOf('\n') >= 0)) + if (!(text.Contains(' ') || text.Contains('\n'))) { if (!IsCjkLanguage(language)) { @@ -620,7 +620,7 @@ public static string AutoBreakLinePrivate(string input, int maximumLength, int m } // do not auto break dialogs or music symbol - if (text.Contains(Environment.NewLine) && (text.IndexOf('-') >= 0 || text.IndexOf('♪') >= 0)) + if (text.Contains(Environment.NewLine) && (text.Contains('-') || text.Contains('♪'))) { var sanitizedLines = RemoveUnicodeControlChars(HtmlUtil.RemoveHtmlTags(text, true)).SplitToLines(); if (sanitizedLines.Count == 2) @@ -968,6 +968,8 @@ public static string UnbreakLine(string text) /// /// Removes ASSA override blocks ({\...}), the {Kara Effector...} block and \N, \n, \h. /// + /// The text to remove tags from. + /// Return an empty string when what is left is only a drawing ("m 0 0 l ..."). /// /// Also remove any other closed {...} block. ASSA renderers never draw a brace block, so /// fansubbers use {...} for comments (#15584); an unclosed '{' is drawn as text. Off by @@ -1076,7 +1078,7 @@ private static bool IsOnlyDrawingCharacters(ReadOnlySpan span) // Check if remaining string is just coordinates/commands foreach (char c in span) { - if (!char.IsDigit(c) && "-lm .".IndexOf(c) == -1) + if (!char.IsDigit(c) && !"-lm .".Contains(c)) return false; } @@ -3507,7 +3509,7 @@ public static bool QualifiesForMerge(Paragraph p, Paragraph next, double maximum var isLineContinuation = s.EndsWith("...", StringComparison.Ordinal) || IsLetterOrCombiningMark(lastChar) || char.IsDigit(lastChar) || - LineContinuationEndChars.IndexOf(lastChar) >= 0 || + LineContinuationEndChars.Contains(lastChar) || (CalcCjk.IsCjk(lastChar) && !IsCjkSentenceEnding(lastChar)); if (s.EndsWith('♪') || nextText.StartsWith('♪')) diff --git a/src/libse/ContainerFormats/MaterialExchangeFormat/TimedTextMxfResource.cs b/src/libse/ContainerFormats/MaterialExchangeFormat/TimedTextMxfResource.cs new file mode 100644 index 00000000000..a3b957b2d17 --- /dev/null +++ b/src/libse/ContainerFormats/MaterialExchangeFormat/TimedTextMxfResource.cs @@ -0,0 +1,25 @@ +using System; + +namespace Nikse.SubtitleEdit.Core.ContainerFormats.MaterialExchangeFormat +{ + /// + /// An ancillary resource (font or PNG image) of a SMPTE ST 429-5 timed text track file. The + /// XML refers to it by "urn:uuid:" + (LoadFont / Image). + /// + public class TimedTextMxfResource + { + public const string MimeTypeFont = "application/x-font-opentype"; + public const string MimeTypePng = "image/png"; + + public Guid Id { get; set; } + public string MimeType { get; set; } + public byte[] Data { get; set; } + + public TimedTextMxfResource(Guid id, string mimeType, byte[] data) + { + Id = id; + MimeType = mimeType; + Data = data; + } + } +} diff --git a/src/libse/ContainerFormats/MaterialExchangeFormat/TimedTextMxfWriter.cs b/src/libse/ContainerFormats/MaterialExchangeFormat/TimedTextMxfWriter.cs new file mode 100644 index 00000000000..fcdad709f33 --- /dev/null +++ b/src/libse/ContainerFormats/MaterialExchangeFormat/TimedTextMxfWriter.cs @@ -0,0 +1,765 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Xml; + +namespace Nikse.SubtitleEdit.Core.ContainerFormats.MaterialExchangeFormat +{ + /// + /// Writes a SMPTE ST 429-5 timed text track file: a D-Cinema SMPTE subtitle XML (ST 428-7) + /// clip-wrapped in OP-Atom MXF, each font/PNG it references in its own generic stream + /// partition. This is the subtitle asset of a SMPTE DCP. The layout follows asdcplib (the + /// reference implementation DCP tools and verifiers are built on) byte for byte, except + /// for the identification strings and the random instance ids. + /// + public class TimedTextMxfWriter + { + /// + /// The MXF asset id - the id the DCP's CPL and PKL refer to the track file by. It must not + /// be the subtitle XML's own Id. + /// + public Guid AssetId { get; set; } = Guid.NewGuid(); + + public DateTime ModifiedUtc { get; set; } = DateTime.UtcNow; + + /// + /// The track's duration in edit units. 0 = from StartTime to the latest TimeOut, like + /// asdcplib - but in a DCP every asset of a reel must have the reel's duration (DCP-o-matic's + /// verifier rejects a shorter subtitle track), so set it to the picture's length. + /// + public long ContainerDuration { get; set; } + + public List Resources { get; } = new List(); + + /// + /// Generates the instance ids of the metadata sets - replaceable for reproducible output in tests. + /// + public Func NewInstanceId { get; set; } = Guid.NewGuid; + + public string CompanyName { get; set; } = "Nikse"; + public string ProductName { get; set; } = "Subtitle Edit"; + + private const uint IndexSid = 129; + private const uint BodySid = 1; + private const uint FirstResourceStreamId = 10; + + private static readonly byte[] OperationalPatternAtom = Hex("060e2b34040101020d01020110000000"); + private static readonly byte[] OperationalPatternGenericStream = Hex("060e2b34040101010d01020101010100"); + private static readonly byte[] EssenceContainerMultiple = Hex("060e2b34040101030d010301027f0100"); + private static readonly byte[] EssenceContainerTimedText = Hex("060e2b340401010a0d01030102130101"); + private static readonly byte[] DataDefinitionTimecode = Hex("060e2b34040101010103020101000000"); + private static readonly byte[] DataDefinitionData = Hex("060e2b34040101010103020203000000"); + private static readonly byte[] TimedTextEssenceKey = Hex("060e2b34010201010d01030117010b01"); + private static readonly byte[] GenericStreamDataKey = Hex("060e2b340101010c0d01050901000000"); + private static readonly byte[] FillKey = Hex("060e2b34010101020301021001000000"); + private static readonly byte[] PrimerKey = Hex("060e2b34020501010d01020101050100"); + private static readonly byte[] IndexTableSegmentKey = Hex("060e2b34025301010d01020101100100"); + private static readonly byte[] RandomIndexPackKey = Hex("060e2b34020501010d01020101110100"); + private static readonly byte[] UmidPrefix = Hex("060a2b340101010501010f2013000000"); + + // Local tag -> UL, all static so the primer is always the same; unused entries are allowed + private static readonly (ushort Tag, string Ul)[] PrimerEntries = + { + (0x0201, "060e2b34010101020407010000000000"), + (0x0202, "060e2b34010101020702020101030000"), + (0x1001, "060e2b34010101020601010406090000"), + (0x1101, "060e2b34010101020601010301000000"), + (0x1102, "060e2b34010101020601010302000000"), + (0x1201, "060e2b34010101020702010301040000"), + (0x1501, "060e2b34010101020702010301050000"), + (0x1502, "060e2b34010101020404010102060000"), + (0x1503, "060e2b34010101010404010105000000"), + (0x1901, "060e2b34010101020601010405010000"), + (0x1902, "060e2b34010101020601010405020000"), + (0x2701, "060e2b34010101020601010601000000"), + (0x3001, "060e2b34010101010406010100000000"), + (0x3002, "060e2b34010101010406010200000000"), + (0x3004, "060e2b34010101020601010401020000"), + (0x3006, "060e2b34010101050601010305000000"), + (0x3b02, "060e2b34010101020702011002040000"), + (0x3b03, "060e2b34010101020601010402010000"), + (0x3b05, "060e2b34010101020301020105000000"), + (0x3b06, "060e2b34010101020601010406040000"), + (0x3b07, "060e2b34010101020301020104000000"), + (0x3b08, "060e2b34010101040601010401080000"), + (0x3b09, "060e2b34010101050102020300000000"), + (0x3b0a, "060e2b34010101050102021002010000"), + (0x3b0b, "060e2b34010101050102021002020000"), + (0x3c01, "060e2b34010101020520070102010000"), + (0x3c02, "060e2b34010101020520070103010000"), + (0x3c03, "060e2b34010101020520070104000000"), + (0x3c04, "060e2b34010101020520070105010000"), + (0x3c05, "060e2b34010101020520070107000000"), + (0x3c06, "060e2b34010101020702011002030000"), + (0x3c07, "060e2b3401010102052007010a000000"), + (0x3c08, "060e2b34010101020520070106010000"), + (0x3c09, "060e2b34010101020520070101000000"), + (0x3c0a, "060e2b34010101010101150200000000"), + (0x3e01, "060e2b34010101030403030200000000"), + (0x3f05, "060e2b34010101040406020100000000"), + (0x3f06, "060e2b34010101040103040500000000"), + (0x3f07, "060e2b34010101040103040400000000"), + (0x3f08, "060e2b34010101040404040101000000"), + (0x3f09, "060e2b34010101050404040106000000"), + (0x3f0a, "060e2b34010101050404040205000000"), + (0x3f0b, "060e2b34010101050530040600000000"), + (0x3f0c, "060e2b340101010507020103010a0000"), + (0x3f0d, "060e2b34010101050702020101020000"), + (0x3f0e, "060e2b34010101050404040107000000"), + (0x4401, "060e2b34010101010101151000000000"), + (0x4402, "060e2b34010101010103030201000000"), + (0x4403, "060e2b34010101020601010406050000"), + (0x4404, "060e2b34010101020702011002050000"), + (0x4405, "060e2b34010101020702011001030000"), + (0x4701, "060e2b34010101020601010402030000"), + (0x4801, "060e2b34010101020107010100000000"), + (0x4802, "060e2b34010101020107010201000000"), + (0x4803, "060e2b34010101020601010402040000"), + (0x4804, "060e2b34010101020104010300000000"), + (0x4b01, "060e2b34010101020530040500000000"), + (0x4b02, "060e2b34010101020702010301030000"), + (0xfff9, "060e2b34010101070409020100000000"), // TimedTextResourceSubDescriptor MIMEMediaType + (0xfffa, "060e2b340101010c0101151300000000"), // TimedTextResourceSubDescriptor AncillaryResourceID + (0xfffb, "060e2b340101010e0301010202160000"), // TimedTextDescriptor RFC5646LanguageTagList + (0xfffc, "060e2b34010101080102010501000000"), // TimedTextDescriptor NamespaceURI + (0xfffd, "060e2b340101010c0409050000000000"), // TimedTextDescriptor UCSEncoding + (0xfffe, "060e2b340101010c0101151200000000"), // TimedTextDescriptor ResourceID + (0xffff, "060e2b34010101090601010406100000"), // GenericDescriptor SubDescriptors + }; + + /// + /// The most fonts/images one track file can carry: the descriptor's SubDescriptors batch + /// (8 + 16 bytes per resource) is a local set item, whose length is a 16-bit value. + /// + public const int MaxResources = (ushort.MaxValue - 8) / 16; + + public void Write(string fileName, string xml) + { + // Fail before the file is created/truncated + ThrowIfTooManyResources(); + using (var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None)) + { + Write(fs, xml); + } + } + + public void Write(Stream stream, string xml) + { + ThrowIfTooManyResources(); + var info = TimedTextInfo.Parse(xml); + if (ContainerDuration > 0) + { + info.Duration = ContainerDuration; + } + + // A LoadFont/Image the track does not carry plays without its font or image + var missing = info.ResourceReferences.FirstOrDefault(id => Resources.All(r => r.Id != id)); + if (missing != Guid.Empty) + { + throw new InvalidDataException("Timed text XML references resource urn:uuid:" + missing + ", which is not in the track file"); + } + var xmlBytes = new UTF8Encoding(false).GetBytes(xml); + + var metadata = MakeHeaderMetadata(info); + + // asdcplib reserves 16 KiB for the header plus room per resource sub-descriptor + long headerSize = 16384; + if (Resources.Count > 0) + { + headerSize += 12 + Resources.Sum(r => 88 + 2 * r.MimeType.Length); + } + + const int partitionPackSize = 16 + 4 + 120; + byte[] fill = null; + var fillLength = headerSize - partitionPackSize - metadata.Length - 20; + if (fillLength >= 0) + { + fill = Klv(FillKey, new byte[fillLength]); + } + else + { + headerSize = partitionPackSize + metadata.Length; + } + + var bodyPosition = headerSize; + var position = bodyPosition + partitionPackSize + KlvSize(xmlBytes.Length); + var resourcePositions = new List(); + foreach (var resource in Resources) + { + resourcePositions.Add(position); + position += partitionPackSize + KlvSize(resource.Data.Length); + } + + var footerPosition = position; + var indexSegment = MakeIndexTableSegment(info); + var lastPartition = resourcePositions.Count > 0 ? resourcePositions[resourcePositions.Count - 1] : bodyPosition; + + WriteBytes(stream, PartitionPack(0x02, 0, 0, footerPosition, headerSize - partitionPackSize, 0, 0, 0, OperationalPatternAtom)); + WriteBytes(stream, metadata); + if (fill != null) + { + WriteBytes(stream, fill); + } + + WriteBytes(stream, PartitionPack(0x03, bodyPosition, 0, 0, 0, 0, 0, BodySid, OperationalPatternAtom)); + WriteKlv(stream, TimedTextEssenceKey, xmlBytes); + + for (var i = 0; i < Resources.Count; i++) + { + var previous = i == 0 ? bodyPosition : resourcePositions[i - 1]; + WriteBytes(stream, PartitionPack(0x03, resourcePositions[i], previous, 0, 0, 0, 0, FirstResourceStreamId + (uint)i, OperationalPatternGenericStream)); + WriteKlv(stream, GenericStreamDataKey, Resources[i].Data); + } + + WriteBytes(stream, PartitionPack(0x04, footerPosition, lastPartition, footerPosition, 0, indexSegment.Length, IndexSid, 0, OperationalPatternAtom)); + WriteBytes(stream, indexSegment); + + var rip = new MemoryStream(); + WriteUInt32(rip, 0); + WriteUInt64(rip, 0); + WriteUInt32(rip, BodySid); + WriteUInt64(rip, (ulong)bodyPosition); + for (var i = 0; i < Resources.Count; i++) + { + WriteUInt32(rip, FirstResourceStreamId + (uint)i); + WriteUInt64(rip, (ulong)resourcePositions[i]); + } + + WriteUInt32(rip, 0); + WriteUInt64(rip, (ulong)footerPosition); + WriteUInt32(rip, (uint)(16 + 4 + rip.Length + 4)); + WriteKlv(stream, RandomIndexPackKey, rip.ToArray()); + } + + private byte[] MakeHeaderMetadata(TimedTextInfo info) + { + var preface = NewInstanceId(); + var identification = NewInstanceId(); + var contentStorage = NewInstanceId(); + var essenceContainerData = NewInstanceId(); + var materialPackage = NewInstanceId(); + var materialTracks = new[] { NewInstanceId(), NewInstanceId() }; + var materialSequences = new[] { NewInstanceId(), NewInstanceId() }; + var materialComponents = new[] { NewInstanceId(), NewInstanceId() }; + var sourcePackage = NewInstanceId(); + var sourceTracks = new[] { NewInstanceId(), NewInstanceId() }; + var sourceSequences = new[] { NewInstanceId(), NewInstanceId() }; + var sourceComponents = new[] { NewInstanceId(), NewInstanceId() }; + var descriptor = NewInstanceId(); + var subDescriptors = Resources.Select(_ => NewInstanceId()).ToList(); + var thisGeneration = NewInstanceId(); + var materialPackageUmid = NewInstanceId(); + var productUid = NewInstanceId(); + + var now = Timestamp(ModifiedUtc); + var version = (Assembly.GetEntryAssembly() ?? typeof(TimedTextMxfWriter).Assembly).GetName().Version ?? new Version(0, 0, 0, 0); + var productVersion = ProductVersion(version); + var editRate = Rational(info.EditRateNumerator, info.EditRateDenominator); + var duration = UInt64(info.Duration); + + var ms = new MemoryStream(); + + var primer = new MemoryStream(); + WriteUInt32(primer, (uint)PrimerEntries.Length); + WriteUInt32(primer, 18); + foreach (var entry in PrimerEntries) + { + WriteUInt16(primer, entry.Tag); + WriteBytes(primer, Hex(entry.Ul)); + } + + WriteKlv(ms, PrimerKey, primer.ToArray()); + + WriteSet(ms, 0x2f, preface, + (0x3b02, now), + (0x3b05, UInt16(0x0102)), + (0x3b07, UInt32(1)), + (0x3b08, Uuid(sourcePackage)), + (0x3b06, Batch(Uuid(identification))), + (0x3b03, Uuid(contentStorage)), + (0x3b09, OperationalPatternAtom), + (0x3b0a, Batch(EssenceContainerMultiple, EssenceContainerTimedText)), + (0x3b0b, Batch(16))); + + WriteSet(ms, 0x30, identification, + (0x3c09, Uuid(thisGeneration)), + (0x3c01, Utf16(CompanyName)), + (0x3c02, Utf16(ProductName)), + (0x3c03, productVersion), + (0x3c04, Utf16(version.ToString(3))), + (0x3c05, Uuid(productUid)), + (0x3c06, now), + (0x3c07, productVersion), + (0x3c08, Utf16("dotnet"))); + + WriteSet(ms, 0x18, contentStorage, + (0x1901, Batch(Uuid(sourcePackage), Uuid(materialPackage))), + (0x1902, Batch(Uuid(essenceContainerData)))); + + WriteSet(ms, 0x23, essenceContainerData, + (0x2701, Umid(AssetId)), + (0x3f06, UInt32(IndexSid)), + (0x3f07, UInt32(BodySid))); + + WriteSet(ms, 0x36, materialPackage, + (0x4401, Umid(materialPackageUmid)), + (0x4402, Utf16("Material Package")), + (0x4405, now), + (0x4404, now), + (0x4403, Batch(Uuid(materialTracks[0]), Uuid(materialTracks[1])))); + WriteTracks(ms, materialTracks, materialSequences, materialComponents, editRate, duration, info.TimecodeRate, Umid(AssetId), 2); + + WriteSet(ms, 0x37, sourcePackage, + (0x4401, Umid(AssetId)), + (0x4402, Utf16("File Package: SMPTE 429-5 clip wrapping of D-Cinema Timed Text data")), + (0x4405, now), + (0x4404, now), + (0x4403, Batch(Uuid(sourceTracks[0]), Uuid(sourceTracks[1]))), + (0x4701, Uuid(descriptor))); + WriteTracks(ms, sourceTracks, sourceSequences, sourceComponents, editRate, duration, info.TimecodeRate, new byte[32], 0); + + var descriptorItems = new List<(ushort, byte[])>(); + if (subDescriptors.Count > 0) + { + descriptorItems.Add((0xffff, Batch(subDescriptors.Select(Uuid).ToArray()))); + } + + descriptorItems.Add((0x3006, UInt32(2))); + descriptorItems.Add((0x3001, editRate)); + descriptorItems.Add((0x3002, duration)); + descriptorItems.Add((0x3004, EssenceContainerTimedText)); + descriptorItems.Add((0x3e01, new byte[16])); + descriptorItems.Add((0xfffe, Uuid(info.ResourceId))); + descriptorItems.Add((0xfffd, Utf16("UTF-8"))); + descriptorItems.Add((0xfffc, Utf16(info.NamespaceUri))); + if (!string.IsNullOrEmpty(info.Language)) + { + descriptorItems.Add((0xfffb, Utf16(info.Language))); + } + + WriteSet(ms, 0x64, descriptor, descriptorItems.ToArray()); + + for (var i = 0; i < Resources.Count; i++) + { + WriteSet(ms, 0x65, subDescriptors[i], + (0xfffa, Uuid(Resources[i].Id)), + (0xfff9, Utf16(Resources[i].MimeType)), + (0x3f07, UInt32(FirstResourceStreamId + (uint)i))); + } + + return ms.ToArray(); + } + + /// + /// A package's timecode track (1) and timed text track (2), each with a sequence of one component. + /// + private static void WriteTracks(Stream ms, Guid[] tracks, Guid[] sequences, Guid[] components, byte[] editRate, byte[] duration, int timecodeRate, byte[] sourcePackageUmid, uint sourceTrackId) + { + WriteSet(ms, 0x3b, tracks[0], + (0x4801, UInt32(1)), + (0x4804, UInt32(0)), + (0x4802, Utf16("Timecode Track")), + (0x4803, Uuid(sequences[0])), + (0x4b01, editRate), + (0x4b02, UInt64(0))); + WriteSet(ms, 0x0f, sequences[0], + (0x0201, DataDefinitionTimecode), + (0x0202, duration), + (0x1001, Batch(Uuid(components[0])))); + WriteSet(ms, 0x14, components[0], + (0x0201, DataDefinitionTimecode), + (0x0202, duration), + (0x1502, UInt16((ushort)timecodeRate)), + (0x1501, UInt64(0)), + (0x1503, new byte[] { 0 })); + + WriteSet(ms, 0x3b, tracks[1], + (0x4801, UInt32(2)), + (0x4804, UInt32(0)), + (0x4802, Utf16("Timed Text Track")), + (0x4803, Uuid(sequences[1])), + (0x4b01, editRate), + (0x4b02, UInt64(0))); + WriteSet(ms, 0x0f, sequences[1], + (0x0201, DataDefinitionData), + (0x0202, duration), + (0x1001, Batch(Uuid(components[1])))); + WriteSet(ms, 0x11, components[1], + (0x0201, DataDefinitionData), + (0x0202, duration), + (0x1201, UInt64(0)), + (0x1101, sourcePackageUmid), + (0x1102, UInt32(sourceTrackId))); + } + + /// + /// The footer index: one edit unit (the clip-wrapped XML) at stream offset 0. + /// + private byte[] MakeIndexTableSegment(TimedTextInfo info) + { + var ms = new MemoryStream(); + WriteLocalSetItems(ms, + (0x3c0a, Uuid(NewInstanceId())), + (0x3f0b, Rational(info.EditRateNumerator, info.EditRateDenominator)), + (0x3f0c, UInt64(0)), + (0x3f0d, UInt64(1)), + (0x3f05, UInt32(0)), + (0x3f06, UInt32(IndexSid)), + (0x3f07, UInt32(BodySid)), + (0x3f08, new byte[] { 0 }), + (0x3f0e, new byte[] { 0 }), + (0x3f09, BatchOfSize(6, new byte[6])), + (0x3f0a, BatchOfSize(11, new byte[] { 0, 0, 0x80, 0, 0, 0, 0, 0, 0, 0, 0 }))); + return Klv(IndexTableSegmentKey, ms.ToArray()); + } + + private static byte[] PartitionPack(byte kind, long thisPartition, long previousPartition, long footerPartition, long headerByteCount, long indexByteCount, uint indexSid, uint bodySid, byte[] operationalPattern) + { + var key = Hex("060e2b34020501010d01020101000400"); + key[13] = kind; + if (operationalPattern == OperationalPatternGenericStream) + { + key[14] = 0x11; // generic stream partition + } + + var ms = new MemoryStream(); + WriteUInt16(ms, 1); // major version + WriteUInt16(ms, 2); // minor version + WriteUInt32(ms, 1); // KAG size + WriteUInt64(ms, (ulong)thisPartition); + WriteUInt64(ms, (ulong)previousPartition); + WriteUInt64(ms, (ulong)footerPartition); + WriteUInt64(ms, (ulong)headerByteCount); + WriteUInt64(ms, (ulong)indexByteCount); + WriteUInt32(ms, indexSid); + WriteUInt64(ms, 0); // body offset + WriteUInt32(ms, bodySid); + WriteBytes(ms, operationalPattern); + WriteBytes(ms, Batch(EssenceContainerMultiple, EssenceContainerTimedText)); + return Klv(key, ms.ToArray()); + } + + private void ThrowIfTooManyResources() + { + if (Resources.Count > MaxResources) + { + throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, + "A D-Cinema MXF timed text track file can hold at most {0} images/fonts, this one has {1} - split the subtitle into more reels.", + MaxResources, Resources.Count)); + } + } + + private static void WriteSet(Stream stream, byte setType, Guid instanceId, params (ushort Tag, byte[] Value)[] items) + { + var key = Hex("060e2b34025301010d01010101010000"); + key[14] = setType; + var ms = new MemoryStream(); + WriteLocalSetItems(ms, (0x3c0a, Uuid(instanceId))); + WriteLocalSetItems(ms, items); + WriteKlv(stream, key, ms.ToArray()); + } + + private static void WriteLocalSetItems(Stream stream, params (ushort Tag, byte[] Value)[] items) + { + foreach (var item in items) + { + if (item.Value.Length > ushort.MaxValue) + { + // The local set length is 16 bits - a cast would silently corrupt the header + throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, + "MXF local set item 0x{0:x4} is {1} bytes, the limit is {2} (a track file can hold at most {3} images/fonts).", + item.Tag, item.Value.Length, ushort.MaxValue, MaxResources)); + } + + WriteUInt16(stream, item.Tag); + WriteUInt16(stream, (ushort)item.Value.Length); + WriteBytes(stream, item.Value); + } + } + + private static long KlvSize(long length) => 16 + BerLength(length).Length + length; + + private static byte[] Klv(byte[] key, byte[] value) + { + var ms = new MemoryStream(); + WriteKlv(ms, key, value); + return ms.ToArray(); + } + + private static void WriteKlv(Stream stream, byte[] key, byte[] value) + { + WriteBytes(stream, key); + WriteBytes(stream, BerLength(value.Length)); + WriteBytes(stream, value); + } + + /// + /// Four-byte BER length like asdcplib, eight bytes for values of 16 MiB or more. + /// + private static byte[] BerLength(long length) + { + if (length < 0x1000000) + { + return new[] { (byte)0x83, (byte)(length >> 16), (byte)(length >> 8), (byte)length }; + } + + var bytes = new byte[9]; + bytes[0] = 0x88; + for (var i = 0; i < 8; i++) + { + bytes[8 - i] = (byte)(length >> (8 * i)); + } + + return bytes; + } + + private static byte[] Batch(params byte[][] items) => BatchOfSize(16, items); + + private static byte[] Batch(int itemSize) => BatchOfSize(itemSize); + + private static byte[] BatchOfSize(int itemSize, params byte[][] items) + { + var ms = new MemoryStream(); + WriteUInt32(ms, (uint)items.Length); + WriteUInt32(ms, (uint)itemSize); + foreach (var item in items) + { + WriteBytes(ms, item); + } + + return ms.ToArray(); + } + + /// + /// UUID in RFC 4122 byte order (Guid.ToByteArray swaps the first three fields). + /// + private static byte[] Uuid(Guid guid) => Hex(guid.ToString("N")); + + private static byte[] Umid(Guid material) + { + var umid = new byte[32]; + Array.Copy(UmidPrefix, umid, 16); + Array.Copy(Uuid(material), 0, umid, 16, 16); + return umid; + } + + private static byte[] Rational(int numerator, int denominator) + { + var bytes = new byte[8]; + Array.Copy(UInt32((uint)numerator), 0, bytes, 0, 4); + Array.Copy(UInt32((uint)denominator), 0, bytes, 4, 4); + return bytes; + } + + private static byte[] Timestamp(DateTime utc) + { + return new[] + { + (byte)(utc.Year >> 8), (byte)utc.Year, (byte)utc.Month, (byte)utc.Day, + (byte)utc.Hour, (byte)utc.Minute, (byte)utc.Second, (byte)(utc.Millisecond / 4), + }; + } + + private static byte[] ProductVersion(Version version) + { + var ms = new MemoryStream(); + WriteUInt16(ms, (ushort)Math.Max(0, version.Major)); + WriteUInt16(ms, (ushort)Math.Max(0, version.Minor)); + WriteUInt16(ms, (ushort)Math.Max(0, version.Build)); + WriteUInt16(ms, (ushort)Math.Max(0, version.Revision)); + WriteUInt16(ms, 0); // release type: unknown + return ms.ToArray(); + } + + private static byte[] Utf16(string s) => Encoding.BigEndianUnicode.GetBytes(s ?? string.Empty); + + private static byte[] UInt16(ushort value) => new[] { (byte)(value >> 8), (byte)value }; + + private static byte[] UInt32(uint value) => new[] { (byte)(value >> 24), (byte)(value >> 16), (byte)(value >> 8), (byte)value }; + + private static byte[] UInt64(long value) => UInt64((ulong)value); + + private static byte[] UInt64(ulong value) + { + var bytes = new byte[8]; + for (var i = 0; i < 8; i++) + { + bytes[7 - i] = (byte)(value >> (8 * i)); + } + + return bytes; + } + + private static void WriteUInt16(Stream stream, ushort value) => WriteBytes(stream, UInt16(value)); + + private static void WriteUInt32(Stream stream, uint value) => WriteBytes(stream, UInt32(value)); + + private static void WriteUInt64(Stream stream, ulong value) => WriteBytes(stream, UInt64(value)); + + private static void WriteBytes(Stream stream, byte[] bytes) => stream.Write(bytes, 0, bytes.Length); + + private static byte[] Hex(string hex) + { + var bytes = new byte[hex.Length / 2]; + for (var i = 0; i < bytes.Length; i++) + { + bytes[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16); + } + + return bytes; + } + + /// + /// What the descriptor needs from the subtitle XML: Id, namespace, language, edit rate, + /// and the duration in edit units from StartTime to the latest TimeOut (like asdcplib). + /// + private class TimedTextInfo + { + public string NamespaceUri { get; private set; } + public Guid ResourceId { get; private set; } + public string Language { get; private set; } + public int EditRateNumerator { get; private set; } + public int EditRateDenominator { get; private set; } + public int TimecodeRate { get; private set; } + public long Duration { get; set; } + public List ResourceReferences { get; } = new List(); + + public static TimedTextInfo Parse(string xml) + { + var doc = new XmlDocument { XmlResolver = null }; + doc.LoadXml(xml); + var root = doc.DocumentElement ?? throw new InvalidDataException("Timed text XML has no root element"); + var info = new TimedTextInfo { NamespaceUri = root.NamespaceURI }; + + var id = Child(root, "Id"); + if (id == null || !Guid.TryParse(id.Trim().Replace("urn:uuid:", string.Empty), out var resourceId)) + { + throw new InvalidDataException("Timed text XML has no urn:uuid Id"); + } + + info.ResourceId = resourceId; + info.Language = Child(root, "Language")?.Trim(); + + var editRate = (Child(root, "EditRate") ?? string.Empty).Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + if (editRate.Length != 2 || + !int.TryParse(editRate[0], NumberStyles.None, CultureInfo.InvariantCulture, out var numerator) || + !int.TryParse(editRate[1], NumberStyles.None, CultureInfo.InvariantCulture, out var denominator) || + numerator <= 0 || denominator <= 0) + { + throw new InvalidDataException("Timed text XML has no valid EditRate"); + } + + info.EditRateNumerator = numerator; + info.EditRateDenominator = denominator; + info.TimecodeRate = (int)Math.Round(numerator / (double)denominator); + + var start = FramesFromTimeCode(Child(root, "StartTime"), info.TimecodeRate); + long end = 0; + foreach (var element in root.GetElementsByTagName("*").OfType().Where(e => e.LocalName == "Subtitle")) + { + end = Math.Max(end, FramesFromTimeCode(element.GetAttribute("TimeOut"), info.TimecodeRate)); + } + + if (end <= start) + { + throw new InvalidDataException("Timed text XML has no subtitles"); + } + + info.Duration = end - start; + info.ResourceReferences.AddRange(GetResourceReferences(root, "LoadFont")); + info.ResourceReferences.AddRange(GetResourceReferences(root, "Image")); + return info; + } + + public static IEnumerable GetResourceReferences(XmlElement root, string localName) + { + foreach (var element in root.GetElementsByTagName("*").OfType().Where(e => e.LocalName == localName)) + { + var text = element.InnerText.Trim(); + if (text.StartsWith("urn:uuid:", StringComparison.OrdinalIgnoreCase) && Guid.TryParse(text.Substring(9), out var id)) + { + yield return id; + } + } + } + + private static string Child(XmlElement root, string localName) + { + return root.ChildNodes.OfType().FirstOrDefault(e => e.LocalName == localName)?.InnerText; + } + + private static long FramesFromTimeCode(string timeCode, int frameRate) + { + return TryParseTimeCode(timeCode, frameRate, out var frames) ? frames : 0; + } + } + + /// + /// The urn:uuid ids of the fonts the XML loads (LoadFont) - the ids to embed the fonts under. + /// + public static List GetLoadFontIds(string xml) + { + var doc = new XmlDocument { XmlResolver = null }; + doc.LoadXml(xml); + return doc.DocumentElement == null + ? new List() + : TimedTextInfo.GetResourceReferences(doc.DocumentElement, "LoadFont").Distinct().ToList(); + } + + /// + /// HH:MM:SS:FF as a frame count at the given (integer) time code rate. + /// + public static bool TryParseTimeCode(string timeCode, int frameRate, out long frames) + { + frames = 0; + if (frameRate <= 0) + { + return false; + } + + var parts = (timeCode ?? string.Empty).Trim().Split(':'); + var values = new int[4]; + if (parts.Length != 4) + { + return false; + } + + for (var i = 0; i < 4; i++) + { + if (!int.TryParse(parts[i], NumberStyles.None, CultureInfo.InvariantCulture, out values[i])) + { + return false; + } + } + + if (values[1] >= 60 || values[2] >= 60 || values[3] >= frameRate) + { + return false; + } + + frames = ((values[0] * 60L + values[1]) * 60 + values[2]) * frameRate + values[3]; + return true; + } + + /// + /// A duration as HH:MM:SS:FF at the given (integer) time code rate, rounded to whole frames. + /// + public static string ToTimeCode(TimeSpan duration, int frameRate) + { + return ToTimeCode((long)Math.Round(duration.TotalSeconds * frameRate), frameRate); + } + + /// + /// A frame count as HH:MM:SS:FF at the given (integer) time code rate. + /// + public static string ToTimeCode(long frames, int frameRate) + { + var seconds = frames / frameRate; + return string.Format(CultureInfo.InvariantCulture, "{0:00}:{1:00}:{2:00}:{3:00}", seconds / 3600, seconds / 60 % 60, seconds % 60, frames % frameRate); + } + } +} diff --git a/src/libse/ContainerFormats/TransportStream/AribCaptionParser.cs b/src/libse/ContainerFormats/TransportStream/AribCaptionParser.cs index d1e4172988b..7d5574c3266 100644 --- a/src/libse/ContainerFormats/TransportStream/AribCaptionParser.cs +++ b/src/libse/ContainerFormats/TransportStream/AribCaptionParser.cs @@ -105,6 +105,10 @@ public void Flush() /// private static void MergeContinuations(List paragraphs) { + // A merge only removes index i, above everything compared later, so the removals + // are collected and done in one compaction (RemoveAt per merge was O(n) each). + var removed = new bool[paragraphs.Count]; + var anyRemoved = false; for (var i = paragraphs.Count - 1; i > 0; i--) { var previous = paragraphs[i - 1]; @@ -114,9 +118,24 @@ private static void MergeContinuations(List paragraphs) { previous.Text = current.Text; previous.EndTime.TotalMilliseconds = current.EndTime.TotalMilliseconds; - paragraphs.RemoveAt(i); + removed[i] = true; + anyRemoved = true; } } + + if (anyRemoved) + { + var write = 0; + for (var read = 0; read < paragraphs.Count; read++) + { + if (!removed[read]) + { + paragraphs[write++] = paragraphs[read]; + } + } + + paragraphs.RemoveRange(write, paragraphs.Count - write); + } } private void ParseCaptionManagementData(byte[] payload, int index, int end, int groupSet) diff --git a/src/libse/ContainerFormats/XSubParser.cs b/src/libse/ContainerFormats/XSubParser.cs index 2b09b9351d7..433ab64c538 100644 --- a/src/libse/ContainerFormats/XSubParser.cs +++ b/src/libse/ContainerFormats/XSubParser.cs @@ -403,16 +403,31 @@ private static List FindPacketPositions(Stream stream) break; } + // A header starts with '[', so jump from one '[' to the next with the vectorized + // IndexOf instead of testing every byte of what can be a multi-GB file. var span = new ReadOnlySpan(buffer, 0, bytesRead); - for (var i = 0; i <= bytesRead - TimeCodeLength; i++) + var lastStart = bytesRead - TimeCodeLength; + var i = 0; + while (i <= lastStart) { + var next = span.Slice(i, lastStart - i + 1).IndexOf((byte)'['); + if (next < 0) + { + break; + } + + i += next; var position = blockStart + i; if (position >= nextUnscanned && IsTimeCodeHeader(span.Slice(i, TimeCodeLength))) { positions.Add(position); - i += TimeCodeLength - 1; + i += TimeCodeLength; nextUnscanned = position + TimeCodeLength; } + else + { + i++; + } } if (bytesRead <= overlap) diff --git a/src/libse/Dictionaries/NameList.cs b/src/libse/Dictionaries/NameList.cs index b745b0da397..7440c3b0c76 100644 --- a/src/libse/Dictionaries/NameList.cs +++ b/src/libse/Dictionaries/NameList.cs @@ -145,7 +145,7 @@ private void LoadNamesList(string fileNameOrUrl) var name = reader.ReadElementContentAsString().Trim(); if (name.Length > 0) { - if (name.IndexOf(' ') >= 0) + if (name.Contains(' ')) { _namesMultiList.Add(name); } @@ -399,7 +399,7 @@ public bool ContainsCaseInsensitive(string name, out string newName) } Dictionary index; - if (name.IndexOf(' ') >= 0) + if (name.Contains(' ')) { index = _namesMultiListCaseInsensitive ?? (_namesMultiListCaseInsensitive = BuildCaseInsensitiveIndex(_namesMultiList)); } diff --git a/src/libse/Forms/FixCommonErrors/FixCommas.cs b/src/libse/Forms/FixCommonErrors/FixCommas.cs index 36310f677a9..32f83d5c30f 100644 --- a/src/libse/Forms/FixCommonErrors/FixCommas.cs +++ b/src/libse/Forms/FixCommonErrors/FixCommas.cs @@ -41,7 +41,7 @@ public void Fix(Subtitle subtitle, IFixCallbacks callbacks) var s = p.Text; var oldText = s; - if (p.Text.IndexOf(',') >= 0) + if (p.Text.Contains(',')) { s = CommaDouble.Replace(s, "$1,$2"); s = CommaTriple.Replace(s, "$1...$2"); @@ -59,7 +59,7 @@ public void Fix(Subtitle subtitle, IFixCallbacks callbacks) s = RemoveCommaBeforeSentenceEndingChar(s, ','); } - if (p.Text.IndexOf('،') >= 0) + if (p.Text.Contains('،')) { s = CommaDoubleAr.Replace(s, "$1،$2"); s = CommaTripleAr.Replace(s, "$1...$2"); diff --git a/src/libse/Forms/FixCommonErrors/FixMisreadQuotes.cs b/src/libse/Forms/FixCommonErrors/FixMisreadQuotes.cs index 0af881fb92d..2cab2a266a3 100644 --- a/src/libse/Forms/FixCommonErrors/FixMisreadQuotes.cs +++ b/src/libse/Forms/FixCommonErrors/FixMisreadQuotes.cs @@ -286,7 +286,7 @@ private static int FirstTextIndex(string v, int start, int end) private static int LastTextIndex(string v, int start, int end) { var i = end - 1; - while (i >= start && (char.IsWhiteSpace(v[i]) || ".,!?;:".IndexOf(v[i]) >= 0)) + while (i >= start && (char.IsWhiteSpace(v[i]) || ".,!?;:".Contains(v[i]))) { i--; } @@ -296,12 +296,12 @@ private static int LastTextIndex(string v, int start, int end) private static bool IsOpenerBoundary(string v, int i, int start) { - return i == start || char.IsWhiteSpace(v[i - 1]) || "-([—".IndexOf(v[i - 1]) >= 0; + return i == start || char.IsWhiteSpace(v[i - 1]) || "-([—".Contains(v[i - 1]); } private static bool IsCloserBoundary(string v, int i, int end) { - return i + 1 >= end || char.IsWhiteSpace(v[i + 1]) || ".,!?;:)]-—".IndexOf(v[i + 1]) >= 0; + return i + 1 >= end || char.IsWhiteSpace(v[i + 1]) || ".,!?;:)]-—".Contains(v[i + 1]); } private static bool IsOpening(string v, int i, int start, int end) diff --git a/src/libse/Forms/FixCommonErrors/FixMissingSpaces.cs b/src/libse/Forms/FixCommonErrors/FixMissingSpaces.cs index a21f5508da4..7dc06845d0d 100644 --- a/src/libse/Forms/FixCommonErrors/FixMissingSpaces.cs +++ b/src/libse/Forms/FixCommonErrors/FixMissingSpaces.cs @@ -374,7 +374,7 @@ public void Fix(Subtitle subtitle, IFixCallbacks callbacks) } } - if (p.Text.IndexOf('<') >= 0) // fix: You!Well, bye! + if (p.Text.Contains('<')) // fix: You!Well, bye! { var matchFontStart = FixMissingSpacesReFontStart.Match(p.Text); var jumpOut = 0; diff --git a/src/libse/Forms/FixCommonErrors/FixMusicNotation.cs b/src/libse/Forms/FixCommonErrors/FixMusicNotation.cs index 622c8be083c..bcfb135c6f2 100644 --- a/src/libse/Forms/FixCommonErrors/FixMusicNotation.cs +++ b/src/libse/Forms/FixCommonErrors/FixMusicNotation.cs @@ -16,6 +16,16 @@ public void Fix(Subtitle subtitle, IFixCallbacks callbacks) string fixAction = Language.FixMusicNotation; int fixCount = 0; string[] musicSymbols = Configuration.Settings.Tools.MusicSymbolReplace.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + + // Trimmed and upper-cased once per run instead of once per symbol per line. + var trimmedSymbols = new string[musicSymbols.Length]; + var upperSymbols = new string[musicSymbols.Length]; + for (var k = 0; k < musicSymbols.Length; k++) + { + trimmedSymbols[k] = musicSymbols[k].Trim(); + upperSymbols[k] = trimmedSymbols[k].ToUpperInvariant(); + } + for (int i = 0; i < subtitle.Paragraphs.Count; i++) { Paragraph p = subtitle.Paragraphs[i]; @@ -24,9 +34,9 @@ public void Fix(Subtitle subtitle, IFixCallbacks callbacks) var oldText = p.Text; var newText = oldText; bool containsFontTag = oldText.Contains(" 0 && text[0] < 0x80 && char.IsLetterOrDigit(text[0])) + { + continue; + } + if ((text.StartsWith("..") || text.StartsWith("…")) && callbacks.AllowFix(p, fixAction)) { var oldText = p.Text; diff --git a/src/libse/Forms/FixCommonErrors/NormalizeStrings.cs b/src/libse/Forms/FixCommonErrors/NormalizeStrings.cs index 0ea2058f9fa..527516fa7b3 100644 --- a/src/libse/Forms/FixCommonErrors/NormalizeStrings.cs +++ b/src/libse/Forms/FixCommonErrors/NormalizeStrings.cs @@ -11,6 +11,31 @@ public static class Language public static string NormalizeStrings { get; set; } = "Normalize strings"; } + private static readonly string[] LowQuoteLanguages = { "de", "cs", "sk", "pl", "sl", "hr", "sr", "hu", "lt", "et", "ro", "is", "bg", "ka", "sq" }; + private static readonly string[] CyrillicLanguages = { "ru", "uk", "bg", "sr", "mk", "be", "kk", "ky", "mn", "tg" }; + + // Every character any replacement below looks for, whatever the language. + private static readonly char[] AllReplacedChars = + { + '\u00a0', '\u200B', '\uFEFF', '\u02F8', '\uFF1A', '\uFE13', '\u2043', '\u2010', '\u2011', '\u2012', '\u2013', '\u2015', + '\u2026', '\u2032', '\u2033', '\u2018', '\u2019', '\u201A', '\u201B', '\u201C', '\u201D', '\u201E', '\u201F', '\u0435', + '\u03a4', '\u03a5', '\u03b3', '\u03a7', '\u03ba', '\u03bd', '\u03c1', '\u03c5', '\u039c', '\u039a', '\u039d', '\u039f', + '\u03a1', '\u0395', '\u0396', '\u0397', '\u0384', '\u0392', '\u0391', '\u03bf', + }; + + private static bool IsAscii(string s) + { + foreach (var ch in s) + { + if (ch >= 0x80) + { + return false; + } + } + + return true; + } + public void Fix(Subtitle subtitle, IFixCallbacks callbacks) { var twoLetterLanguageCode = callbacks.Language; @@ -18,87 +43,21 @@ public void Fix(Subtitle subtitle, IFixCallbacks callbacks) foreach (var p in subtitle.Paragraphs) { var oldText = p.Text; - var text = p.Text - .Normalize() - - .Replace('\u00a0', ' ') // replace non-break-space (160 decimal) ascii char with normal space - .Replace("\u200B", string.Empty) // Zero Width Space - .Replace("\uFEFF", string.Empty) // Zero Width No-Break Space - - .Replace('\u02F8', ':') // ˸ Modifier Letter Raised Colon (\u02F8) - .Replace('\uFF1A', ':') // : Fullwidth Colon (\uFF1A) - .Replace('\uFE13', ':') // ︓ Presentation Form for Vertical Colon (\uFE13) - - .Replace('\u2043', '-') // ⁃ Hyphen bullet (\u2043) - .Replace('\u2010', '-') // ‐ Hyphen (\u2010) - .Replace('\u2011', '-') // ‑ Non-breaking hyphen (\u2011) - .Replace('\u2012', '-') // ‒ Figure dash (\u2012) - .Replace('\u2013', '-') // – En dash (\u2013) - //.Replace('\u2014', '-') // — Em dash (\u2014) - we keep em dash - .Replace('\u2015', '\u2014') // ― Horizontal bar (\u2015) - - // Machine translation hands back typographic punctuation the source never - // had - DeepL alone answers plain ASCII input with curly quotes, en dashes - // and a one-character ellipsis (issue #14092). - .Replace("\u2026", "...") // … Horizontal ellipsis (\u2026) - .Replace('\u2032', '\'') // ′ Prime (\u2032) - .Replace('\u2033', '"') // ″ Double prime (\u2033) - ; - // Quotation marks are the language-specific part of this: „…“ and ‚…‘ are how German - // and several of its neighbours quote, so replacing them there would take the - // language's own punctuation away rather than normalize anything. - var lowQuoteLanguages = new[] { "de", "cs", "sk", "pl", "sl", "hr", "sr", "hu", "lt", "et", "ro", "is", "bg", "ka", "sq" }; - if (!lowQuoteLanguages.Contains(twoLetterLanguageCode)) + // Every character replaced below is outside ASCII and Normalize() leaves ASCII + // alone, so a plain ASCII line (most lines in most files) cannot change - skip + // the ~45 scans and the Normalize call. + if (IsAscii(oldText)) { - text = text - .Replace('\u2018', '\'') // ‘ Left single quotation mark (\u2018) - .Replace('\u2019', '\'') // ’ Right single quotation mark (\u2019) - the typographic apostrophe - .Replace('\u201A', '\'') // ‚ Single low-9 quotation mark (\u201A) - .Replace('\u201B', '\'') // ‛ Single high-reversed-9 quotation mark (\u201B) - .Replace('\u201C', '"') // “ Left double quotation mark (\u201C) - .Replace('\u201D', '"') // ” Right double quotation mark (\u201D) - .Replace('\u201E', '"') // „ Double low-9 quotation mark (\u201E) - .Replace('\u201F', '"') // ‟ Double high-reversed-9 quotation mark (\u201F) - ; + continue; } - // Replacing Cyrillic "е" with Latin "e" is an OCR heuristic for Latin-script - // languages. Only Russian was exempt, so Bulgarian, Ukrainian, Serbian, Macedonian - // and the rest had a Latin "e" spliced into Cyrillic words - breaking spell check, - // search and sorting. - var cyrillicLanguages = new[] { "ru", "uk", "bg", "sr", "mk", "be", "kk", "ky", "mn", "tg" }; - if (!cyrillicLanguages.Contains(twoLetterLanguageCode)) - { - text = text - .Replace('\u0435', 'e') // Cyrillic Small Letter Ie: "е" - ; - } + var text = oldText.Normalize(); - if (twoLetterLanguageCode != "el") + // Only a line holding one of the replaced characters needs the replace chain. + if (text.IndexOfAny(AllReplacedChars) >= 0) { - text = text - .Replace("\u03a4", "T") // Greek Capital Letter Tau - .Replace("\u03a5", "Y") // Greek Capital Letter Upsilon - .Replace("\u03b3", "Y") // Greek Small Letter Gamma - .Replace("\u03a7", "X") // Greek Capital Letter Chi - .Replace("\u03ba", "k") // Greek Small Letter Kappa - .Replace("\u03bd", "v") // Greek Small Letter Nu - .Replace("\u03c1", "p") // Greek Small Letter Rho - .Replace("\u03c5", "u") // Greek Small Letter Upsilon - .Replace("\u039c", "M") // Greek Capital Letter Mu - .Replace("\u039a", "K") // Greek Capital Letter Kappa - .Replace("\u039d", "N") // Greek Capital Letter Nu - .Replace("\u039f", "O") // Greek Capital Letter Omicron - .Replace("\u03a1", "P") // Greek Capital Letter Rho - .Replace("\u0395", "E") // Greek Capital Letter Epsilon - .Replace("\u0396", "Z") // Greek Capital Letter Zeta - .Replace("\u0397", "H") // Greek Capital Letter Eta - .Replace("\u0384", "'") // Greek Tonos - .Replace("\u0392", "B") // Greek Capital Letter Beta - .Replace("\u0391", "A") // Greek Capital Letter Alpha - .Replace("\u03bf", "o") // Greek small letter Omicron - ; + text = ReplaceChars(text, twoLetterLanguageCode); } if (oldText != text && callbacks.AllowFix(p, Language.NormalizeStrings)) @@ -110,5 +69,89 @@ public void Fix(Subtitle subtitle, IFixCallbacks callbacks) } callbacks.UpdateFixStatus(noOfFixes, Language.NormalizeStrings); } + + private static string ReplaceChars(string text, string twoLetterLanguageCode) + { + text = text + .Replace('\u00a0', ' ') // replace non-break-space (160 decimal) ascii char with normal space + .Replace("\u200B", string.Empty) // Zero Width Space + .Replace("\uFEFF", string.Empty) // Zero Width No-Break Space + + .Replace('\u02F8', ':') // ˸ Modifier Letter Raised Colon (\u02F8) + .Replace('\uFF1A', ':') // : Fullwidth Colon (\uFF1A) + .Replace('\uFE13', ':') // ︓ Presentation Form for Vertical Colon (\uFE13) + + .Replace('\u2043', '-') // ⁃ Hyphen bullet (\u2043) + .Replace('\u2010', '-') // ‐ Hyphen (\u2010) + .Replace('\u2011', '-') // ‑ Non-breaking hyphen (\u2011) + .Replace('\u2012', '-') // ‒ Figure dash (\u2012) + .Replace('\u2013', '-') // – En dash (\u2013) + //.Replace('\u2014', '-') // — Em dash (\u2014) - we keep em dash + .Replace('\u2015', '\u2014') // ― Horizontal bar (\u2015) + + // Machine translation hands back typographic punctuation the source never + // had - DeepL alone answers plain ASCII input with curly quotes, en dashes + // and a one-character ellipsis (issue #14092). + .Replace("\u2026", "...") // … Horizontal ellipsis (\u2026) + .Replace('\u2032', '\'') // ′ Prime (\u2032) + .Replace('\u2033', '"') // ″ Double prime (\u2033) + ; + + // Quotation marks are the language-specific part of this: „…“ and ‚…‘ are how German + // and several of its neighbours quote, so replacing them there would take the + // language's own punctuation away rather than normalize anything. + if (!LowQuoteLanguages.Contains(twoLetterLanguageCode)) + { + text = text + .Replace('\u2018', '\'') // ‘ Left single quotation mark (\u2018) + .Replace('\u2019', '\'') // ’ Right single quotation mark (\u2019) - the typographic apostrophe + .Replace('\u201A', '\'') // ‚ Single low-9 quotation mark (\u201A) + .Replace('\u201B', '\'') // ‛ Single high-reversed-9 quotation mark (\u201B) + .Replace('\u201C', '"') // “ Left double quotation mark (\u201C) + .Replace('\u201D', '"') // ” Right double quotation mark (\u201D) + .Replace('\u201E', '"') // „ Double low-9 quotation mark (\u201E) + .Replace('\u201F', '"') // ‟ Double high-reversed-9 quotation mark (\u201F) + ; + } + + // Replacing Cyrillic "е" with Latin "e" is an OCR heuristic for Latin-script + // languages. Only Russian was exempt, so Bulgarian, Ukrainian, Serbian, Macedonian + // and the rest had a Latin "e" spliced into Cyrillic words - breaking spell check, + // search and sorting. + if (!CyrillicLanguages.Contains(twoLetterLanguageCode)) + { + text = text + .Replace('\u0435', 'e') // Cyrillic Small Letter Ie: "е" + ; + } + + if (twoLetterLanguageCode != "el") + { + text = text + .Replace("\u03a4", "T") // Greek Capital Letter Tau + .Replace("\u03a5", "Y") // Greek Capital Letter Upsilon + .Replace("\u03b3", "Y") // Greek Small Letter Gamma + .Replace("\u03a7", "X") // Greek Capital Letter Chi + .Replace("\u03ba", "k") // Greek Small Letter Kappa + .Replace("\u03bd", "v") // Greek Small Letter Nu + .Replace("\u03c1", "p") // Greek Small Letter Rho + .Replace("\u03c5", "u") // Greek Small Letter Upsilon + .Replace("\u039c", "M") // Greek Capital Letter Mu + .Replace("\u039a", "K") // Greek Capital Letter Kappa + .Replace("\u039d", "N") // Greek Capital Letter Nu + .Replace("\u039f", "O") // Greek Capital Letter Omicron + .Replace("\u03a1", "P") // Greek Capital Letter Rho + .Replace("\u0395", "E") // Greek Capital Letter Epsilon + .Replace("\u0396", "Z") // Greek Capital Letter Zeta + .Replace("\u0397", "H") // Greek Capital Letter Eta + .Replace("\u0384", "'") // Greek Tonos + .Replace("\u0392", "B") // Greek Capital Letter Beta + .Replace("\u0391", "A") // Greek Capital Letter Alpha + .Replace("\u03bf", "o") // Greek small letter Omicron + ; + } + + return text; + } } } diff --git a/src/libse/Forms/MoveWordUpDown.cs b/src/libse/Forms/MoveWordUpDown.cs index 5e3fd141e90..0e28b19fb6d 100644 --- a/src/libse/Forms/MoveWordUpDown.cs +++ b/src/libse/Forms/MoveWordUpDown.cs @@ -453,7 +453,7 @@ private static string RemoveEmptyTags(string s) .Replace("", string.Empty) .Replace("", string.Empty); - if (s.IndexOf("", StringComparison.OrdinalIgnoreCase) >= 0) + if (s.Contains("", StringComparison.OrdinalIgnoreCase)) { // A whose last word moved to the other line is left empty, and // repeated moves piled them up (" ..."). diff --git a/src/libse/Forms/RemoveTextForHI.cs b/src/libse/Forms/RemoveTextForHI.cs index 8a622bb81df..5f8cb0cb7d2 100644 --- a/src/libse/Forms/RemoveTextForHI.cs +++ b/src/libse/Forms/RemoveTextForHI.cs @@ -650,7 +650,7 @@ public string RemoveColon(string text) // arr came from SplitToLines, which accepts "\n", "\r" and "\r\n" alike, so on // Windows a text broken with a bare "\n" reached the Substring below with an index // of -1 and threw out of the whole Remove-text-for-HI run. - if (insertDash && newText.IndexOf(Environment.NewLine, StringComparison.Ordinal) >= 0) + if (insertDash && newText.Contains(Environment.NewLine)) { if (indexOfDialogChar < 0 || indexOfDialogChar > 4) { diff --git a/src/libse/LibSE.csproj b/src/libse/LibSE.csproj index beb7c4f179a..215fac8638a 100644 --- a/src/libse/LibSE.csproj +++ b/src/libse/LibSE.csproj @@ -8,7 +8,7 @@ false libse - 5.2.0 + 5.3.0 Subtitle Edit's subtitle library - read/write 300+ subtitle formats (SubRip, ASSA, WebVTT, EBU STL, Blu-ray sup, and many more), fix common errors, auto-break lines, convert formats, and more. https://github.com/SubtitleEdit/subtitleedit/tree/main/src/libse https://github.com/SubtitleEdit/subtitleedit diff --git a/src/libse/Settings/ToolsSettings.cs b/src/libse/Settings/ToolsSettings.cs index 1ad02612d4f..775c492ece1 100644 --- a/src/libse/Settings/ToolsSettings.cs +++ b/src/libse/Settings/ToolsSettings.cs @@ -176,7 +176,7 @@ public ToolsSettings() OllamaPrompt = "Translate from {0} to {1}, keep punctuation as input, keep line breaks exactly the same, do not censor the translation, give only the output without comments or notes:"; AnthropicApiUrl = "https://api.anthropic.com/v1/messages"; AnthropicPrompt = "Translate from {0} to {1}, keep sentences in {1} as they are, keep punctuation as input, keep line breaks exactly the same, do not censor the translation, give only the output without comments:"; - AnthropicApiModel = "claude-sonnet-5"; // AnthropicTranslate.Models[0] in LibUiLogic + AnthropicApiModel = "claude-sonnet-5-5"; // AnthropicTranslate.Models[0] in LibUiLogic BaiduUrl = "https://fanyi-api.baidu.com"; GeminiModel = "gemini-flash-latest"; // GeminiTranslate.Models[0] in LibUiLogic GeminiPrompt = "Please translate the following text from {0} to {1}, keep line breaks exactly the same, do not censor the translation, only write the result:"; diff --git a/src/libse/SubtitleFormats/IsmtDfxp.cs b/src/libse/SubtitleFormats/IsmtDfxp.cs index 45c02d4bb97..80954d580a6 100644 --- a/src/libse/SubtitleFormats/IsmtDfxp.cs +++ b/src/libse/SubtitleFormats/IsmtDfxp.cs @@ -80,7 +80,7 @@ public override void LoadSubtitle(Subtitle subtitle, List lines, string continue; } - if (xmlAsString.IndexOf('\0') >= 0) + if (xmlAsString.Contains('\0')) { _errorCount++; continue; diff --git a/src/libse/SubtitleFormats/Sami.cs b/src/libse/SubtitleFormats/Sami.cs index 3a80e54c2bf..b1308c69209 100644 --- a/src/libse/SubtitleFormats/Sami.cs +++ b/src/libse/SubtitleFormats/Sami.cs @@ -254,7 +254,7 @@ internal static bool HasSyncTag(List lines) { foreach (var line in lines) { - if (line.IndexOf("= 0) + if (line.Contains(" lines, string const string syncTag = "= 0 && StepFrames(pendingClear, 2) > startFrame) + { + pendingClear = -1; + } + + var loadStart = Math.Max(cursor, StepFrames(startFrame, -(loadCodes.Length + 2))); + int loadEnd; + if (pendingClear < 0 || loadStart >= StepFrames(pendingClear, 2)) + { + if (pendingClear >= 0) + { + AppendSccLine(sb, pendingClear, "942c 942c"); + } - sb.AppendLine($"{ToTimeCode(loadTime)}\t{loadData}"); - sb.AppendLine(); - sb.AppendLine($"{ToTimeCode(p.StartTime.TotalMilliseconds)}\t942f 942f"); - sb.AppendLine(); + AppendSccLine(sb, loadStart, string.Join(" ", loadCodes)); + loadEnd = StepFrames(loadStart, loadCodes.Length); + } + else + { + // The previous caption is cleared while this one should be loading: load it + // before the clear. If there is not enough time for that, the clear waits + // until the load is sent (a load is never split - decoders and our own + // reader treat 942c inside a load differently), or is dropped when the flip + // comes first anyway. + var earlyStart = Math.Max(cursor, StepFrames(pendingClear, -loadCodes.Length)); + AppendSccLine(sb, earlyStart, string.Join(" ", loadCodes)); + loadEnd = StepFrames(earlyStart, loadCodes.Length); + var clearFrame = Math.Max(pendingClear, loadEnd); + if (StepFrames(clearFrame, 2) <= startFrame) + { + AppendSccLine(sb, clearFrame, "942c 942c"); + loadEnd = StepFrames(clearFrame, 2); + } + } + + var displayFrame = Math.Max(startFrame, loadEnd); + AppendSccLine(sb, displayFrame, "942f 942f"); + cursor = StepFrames(displayFrame, 2); + pendingClear = Math.Max(cursor, MillisecondsToFrame(p.EndTime.TotalMilliseconds)); + } - sb.AppendLine($"{ToTimeCode(p.EndTime.TotalMilliseconds)}\t942c 942c"); - sb.AppendLine(); + if (pendingClear >= 0) + { + AppendSccLine(sb, pendingClear, "942c 942c"); } return sb.ToString(); } + private void AppendSccLine(StringBuilder sb, int frame, string codes) + { + sb.AppendLine($"{FrameToTimeCode(frame)}\t{codes}"); + sb.AppendLine(); + } + + private static int TimeCodeFramesPerSecond => Math.Max(1, (int)Math.Round(Configuration.Settings.General.CurrentFrameRate)); + + /// + /// Frame number on the timecode label grid (seconds * fps + frame label), so it + /// converts back to the exact label. In drop-frame the skipped labels are numbers + /// no frame ever gets. + /// + private int MillisecondsToFrame(double totalMilliseconds) + { + var totalSeconds = (int)Math.Floor(Math.Max(0, totalMilliseconds) / 1000.0); + var frame = MillisecondsToFramesMaxFrameRate(Math.Max(0, totalMilliseconds) - totalSeconds * 1000.0); + frame = Math.Min(frame, TimeCodeFramesPerSecond - 1); + var result = totalSeconds * TimeCodeFramesPerSecond + frame; + while (IsDroppedFrameLabel(result)) + { + result++; + } + + return result; + } + + /// + /// 29.97 drop-frame skips frame numbers 00 and 01 at the start of every minute except + /// every tenth, so those labels do not exist in a DF file - emitting them produced + /// timecodes no DF-aware tool accepts. Same skip MacCaption10's StepToNextFrame and + /// apply. + /// + private bool IsDroppedFrameLabel(int frame) + { + if (!DropFrame || frame % TimeCodeFramesPerSecond >= 2) + { + return false; + } + + var totalSeconds = frame / TimeCodeFramesPerSecond; + var minutes = totalSeconds / 60; + return totalSeconds % 60 == 0 && minutes % 10 != 0; + } + + private int StepFrames(int frame, int count) + { + var direction = Math.Sign(count); + for (var i = Math.Abs(count); i > 0; i--) + { + do + { + frame += direction; + } + while (IsDroppedFrameLabel(frame)); + } + + return Math.Max(0, frame); + } + + private string FrameToTimeCode(int frame) + { + var framesPerSecond = TimeCodeFramesPerSecond; + var totalSeconds = frame / framesPerSecond; + var separator = DropFrame ? ";" : ":"; + return $"{totalSeconds / 3600:00}:{totalSeconds / 60 % 60:00}:{totalSeconds % 60:00}{separator}{frame % framesPerSecond:00}"; + } + // A style change is written as a CEA-608 mid-row code. It is put into the prepared line // as this single marker character so it takes exactly one screen cell - which is what a // mid-row code does when displayed (it shows as a space) - and the code itself is kept @@ -1274,27 +1386,6 @@ public static string GetCenterCodes(string text, int lineNumber, int totalLines, return $"{code} {code} "; } - private string ToTimeCode(double totalMilliseconds) - { - var ts = TimeSpan.FromMilliseconds(totalMilliseconds); - if (DropFrame) - { - // 29.97 drop-frame skips frame numbers 00 and 01 at the start of every minute - // except every tenth, so those labels do not exist in a DF file - emitting them - // produced timecodes no DF-aware tool accepts. Same skip MacCaption10's - // StepToNextFrame already applies. - var frames = MillisecondsToFramesMaxFrameRate(ts.Milliseconds); - if (ts.Seconds == 0 && ts.Minutes % 10 != 0 && frames < 2) - { - frames = 2; - } - - return $"{ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00};{frames:00}"; - } - - return $"{ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}:{MillisecondsToFramesMaxFrameRate(ts.Milliseconds):00}"; - } - private static Dictionary _styleLookup; public static SccPositionAndStyle GetColorAndPosition(string code) { @@ -1471,7 +1562,7 @@ private static bool IsPreambleAddressCode(string code) // Row-code first byte: low 7 bits in 0x10-0x17 (parity-stripped 10-17), plus the // odd-parity forms that differ (11->91, 12->92, 14->94, 17->97). var firstByte = code.Substring(0, 2); - return IsPreambleAddressRowCode(firstByte) && "4567cdef".IndexOf(code[2]) >= 0; + return IsPreambleAddressRowCode(firstByte) && "4567cdef".Contains(code[2]); } private static bool IsPreambleAddressRowCode(string firstByte) @@ -1934,14 +2025,6 @@ private TimeCode ParseTimeCode(string start, int frameOffset) return new TimeCode(totalMilliseconds); } - private static int CalculatePreRollMilliseconds(string loadData) - { - var frameDuration = Math.Max(1, FramesToMillisecondsMax999(1)); - var codeCount = loadData.Split(new[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries).Length; - var frameCount = Math.Max(2, codeCount + 2); - return frameCount * frameDuration; - } - private static bool ContainsSccCommand(IEnumerable parts, string command) { foreach (var part in parts) diff --git a/src/libse/SubtitleFormats/SubStationAlpha.cs b/src/libse/SubtitleFormats/SubStationAlpha.cs index 7dd1d6955d6..57cb2f3ecc7 100644 --- a/src/libse/SubtitleFormats/SubStationAlpha.cs +++ b/src/libse/SubtitleFormats/SubStationAlpha.cs @@ -456,6 +456,16 @@ public override void LoadSubtitle(Subtitle subtitle, List lines, string } else if (line.Trim().Equals("[events]", StringComparison.OrdinalIgnoreCase)) { + // [Fonts]/[Graphics] before [Events] (Aegisub order) skips the header append above + if ((Environment.NewLine + header).IndexOf(Environment.NewLine + "[events]", StringComparison.OrdinalIgnoreCase) < 0) + { + var h = header.ToString().TrimEnd(); + header.Clear(); + header.AppendLine(h); + header.AppendLine(); + header.AppendLine("[Events]"); + } + eventsStarted = true; fontsStarted = false; graphicsStarted = false; diff --git a/src/libse/SubtitleFormats/SubtitleFormat.cs b/src/libse/SubtitleFormats/SubtitleFormat.cs index 9b20ce07e85..0036bc0edc6 100644 --- a/src/libse/SubtitleFormats/SubtitleFormat.cs +++ b/src/libse/SubtitleFormats/SubtitleFormat.cs @@ -88,7 +88,7 @@ protected static bool AnyLineContains(List lines, string value) { foreach (var line in lines) { - if (line.IndexOf(value, StringComparison.Ordinal) >= 0) + if (line.Contains(value)) { return true; } diff --git a/src/libse/SubtitleFormats/TimedText10.cs b/src/libse/SubtitleFormats/TimedText10.cs index b4ab890a14b..b31e4689b4e 100644 --- a/src/libse/SubtitleFormats/TimedText10.cs +++ b/src/libse/SubtitleFormats/TimedText10.cs @@ -1305,7 +1305,8 @@ private static bool IsSameTtmlColor(string a, string b) } /// - /// Styling a paragraph inherits from body/div - the document default, which is not written as tags. + /// Styling a paragraph inherits from body/div. Its color/font are the document default and are + /// not written as tags; italic/bold/underline are (and are part of the returned style). /// private static TtmlTextStyle GetInheritedTtmlTextStyle(XmlNode paragraph, List styles, TtmlHeadIndex headIndex) { @@ -1334,16 +1335,103 @@ private static void ReadParagraph(StringBuilder pText, XmlNode node, List become tags; its color/font are kept as paragraph effects - var italic = paragraphStyle.Italic && !inherited.Italic; - var bold = paragraphStyle.Bold && !inherited.Bold; - var underline = paragraphStyle.Underline && !inherited.Underline; - pText.Append(italic ? "" : string.Empty).Append(bold ? "" : string.Empty).Append(underline ? "" : string.Empty); - ReadParagraphChildren(pText, node, styles, headIndex, paragraphStyle); - pText.Append(underline ? "" : string.Empty).Append(bold ? "" : string.Empty).Append(italic ? "" : string.Empty); + // italic/bold/underline in effect on the

(own or from body/div) become tags; + // its color/font are kept as paragraph effects + var openTags = new List(); + var start = pText.Length; + SetTtmlTextTags(pText, openTags, paragraphStyle.Italic, paragraphStyle.Bold, paragraphStyle.Underline, null); + ReadParagraphChildren(pText, node, styles, headIndex, paragraphStyle, openTags); + CloseTtmlTags(pText, openTags, 0); + RemoveEmptyTtmlTags(pText, start); } - private static void ReadParagraphChildren(StringBuilder pText, XmlNode node, List styles, TtmlHeadIndex headIndex, TtmlTextStyle parentStyle) + private static string GetCloseTag(string openTag) + { + return openTag.StartsWith("" : " openTags, int count) + { + while (openTags.Count > count) + { + pText.Append(GetCloseTag(openTags[openTags.Count - 1])); + openTags.RemoveAt(openTags.Count - 1); + } + } + + ///

+ /// Makes italic/bold/underline match the given state and opens the optional font tag. A style that + /// turns off closes its tag (and the tags opened inside it, which are reopened). + /// + private static void SetTtmlTextTags(StringBuilder pText, List openTags, bool italic, bool bold, bool underline, string fontTag) + { + var keepCount = openTags.Count; + for (var i = 0; i < openTags.Count; i++) + { + var tag = openTags[i]; + if ((tag == "" && !italic) || (tag == "" && !bold) || (tag == "" && !underline)) + { + keepCount = i; + break; + } + } + + var reopen = new List(); + for (var i = keepCount; i < openTags.Count; i++) + { + var tag = openTags[i]; + if (!((tag == "" && !italic) || (tag == "" && !bold) || (tag == "" && !underline))) + { + reopen.Add(tag); + } + } + + CloseTtmlTags(pText, openTags, keepCount); + + if (italic && !reopen.Contains("") && !openTags.Contains("")) + { + reopen.Add(""); + } + + if (bold && !reopen.Contains("") && !openTags.Contains("")) + { + reopen.Add(""); + } + + if (underline && !reopen.Contains("") && !openTags.Contains("")) + { + reopen.Add(""); + } + + if (fontTag != null) + { + reopen.Add(fontTag); + } + + foreach (var tag in reopen) + { + pText.Append(tag); + openTags.Add(tag); + } + } + + private static readonly Regex EmptyFontTagRegex = new Regex("]*>
", RegexOptions.Compiled); + + private static void RemoveEmptyTtmlTags(StringBuilder pText, int start) + { + var text = pText.ToString(start, pText.Length - start); + string old; + do + { + old = text; + text = EmptyFontTagRegex.Replace(text.Replace("", string.Empty).Replace("", string.Empty).Replace("", string.Empty), string.Empty); + } while (text != old); + + pText.Length = start; + pText.Append(text); + } + + private static void ReadParagraphChildren(StringBuilder pText, XmlNode node, List styles, TtmlHeadIndex headIndex, TtmlTextStyle parentStyle, List openTags) { foreach (XmlNode child in node.ChildNodes) { @@ -1374,68 +1462,39 @@ private static void ReadParagraphChildren(StringBuilder pText, XmlNode node, Lis var spanStyle = parentStyle.Clone(); ApplyTtmlTextStyle(spanStyle, child, styles, headIndex); - var isItalic = spanStyle.Italic && !parentStyle.Italic; - var isBold = spanStyle.Bold && !parentStyle.Bold; - var isUnderlined = spanStyle.Underline && !parentStyle.Underline; var fontFamily = !string.IsNullOrEmpty(spanStyle.FontFamily) && spanStyle.FontFamily != parentStyle.FontFamily && !(parentStyle.FontFamily == null && TtmlGenericFontFamilies.Contains(spanStyle.FontFamily)) ? spanStyle.FontFamily : null; var color = !string.IsNullOrEmpty(spanStyle.Color) && !IsSameTtmlColor(spanStyle.Color, parentStyle.Color) ? spanStyle.Color : null; - - // Applying styles - if (isItalic) - { - pText.Append(""); - } - - if (isBold) - { - pText.Append(""); - } - - if (isUnderlined) - { - pText.Append(""); - } - + string fontTag = null; if (!string.IsNullOrEmpty(fontFamily) || !string.IsNullOrEmpty(color)) { - pText.Append(""); + fontTag = ""; } - ReadParagraphChildren(pText, child, styles, headIndex, spanStyle); - - if (!string.IsNullOrEmpty(fontFamily) || !string.IsNullOrEmpty(color)) - { - pText.Append(""); - } + // Applying styles - tags turned off by the span are closed and reopened after it + var parentTags = new List(openTags); + SetTtmlTextTags(pText, openTags, spanStyle.Italic, spanStyle.Bold, spanStyle.Underline, fontTag); + var spanTags = new List(openTags); - if (isUnderlined) - { - pText.Append(""); - } + ReadParagraphChildren(pText, child, styles, headIndex, spanStyle, openTags); - if (isBold) + // restore the parent's tags, reusing the ones still open + var common = 0; + while (common < parentTags.Count && common < spanTags.Count && parentTags[common] == spanTags[common]) { - pText.Append(""); + common++; } - if (isItalic) + CloseTtmlTags(pText, openTags, common); + for (var i = common; i < parentTags.Count; i++) { - pText.Append(""); + pText.Append(parentTags[i]); + openTags.Add(parentTags[i]); } } } diff --git a/src/libse/SubtitleFormats/TimedTextImsc11.cs b/src/libse/SubtitleFormats/TimedTextImsc11.cs index 63cbad402ea..77396d900cf 100644 --- a/src/libse/SubtitleFormats/TimedTextImsc11.cs +++ b/src/libse/SubtitleFormats/TimedTextImsc11.cs @@ -626,7 +626,7 @@ public override void LoadSubtitle(Subtitle subtitle, List lines, string assStyle = GetAssStyleFromRegion(region.InnerText, headIndex); } - var text = assStyle + ReadParagraph(node, headIndex).TrimEnd(); + var text = assStyle + ReadParagraph(node, headIndex); // Keep the region name: the alignment tag above only snaps to the screen thirds, // the video preview positions the line from the region box itself. @@ -637,9 +637,30 @@ public override void LoadSubtitle(Subtitle subtitle, List lines, string subtitle.Renumber(); } + /// + /// Reads one TTML p element into subtitle text. Trailing source whitespace is + /// trimmed here, but the line breaks a trailing
adds are content: in TTML they are + /// forced breaks with layout meaning, so dropping them changes the cue (#15289). Nested + /// spans are read raw - only the finished paragraph is trimmed, so a space inside the + /// last span still survives. + ///
private static string ReadParagraph(XmlNode node, TtmlHeadIndex headIndex) + { + var raw = BuildParagraph(node, headIndex, out var forcedBreakEnd); + if (forcedBreakEnd < 0) + { + return raw.TrimEnd(); + } + + // Everything before the last forced break already ends in a line break, so only the + // text behind it can be source formatting - that tail is trimmed as before. + return raw[..forcedBreakEnd] + raw[forcedBreakEnd..].TrimEnd(); + } + + private static string BuildParagraph(XmlNode node, TtmlHeadIndex headIndex, out int forcedBreakEnd) { var pText = new StringBuilder(); + forcedBreakEnd = -1; foreach (XmlNode child in node.ChildNodes) { if (child.NodeType == XmlNodeType.Text) @@ -649,6 +670,7 @@ private static string ReadParagraph(XmlNode node, TtmlHeadIndex headIndex) else if (child.Name == "br" || child.Name == "tt:br") { pText.AppendLine(); + forcedBreakEnd = pText.Length; } else if (child.Name == "#significant-whitespace" || child.Name == "tt:#significant-whitespace") { @@ -787,7 +809,13 @@ private static string ReadParagraph(XmlNode node, TtmlHeadIndex headIndex) pText.Append(">"); } - pText.Append(ReadParagraph(child, headIndex)); + var contentStart = pText.Length; + var content = BuildParagraph(child, headIndex, out var nestedBreakEnd); + pText.Append(content); + if (nestedBreakEnd >= 0) + { + forcedBreakEnd = contentStart + nestedBreakEnd; + } if (!string.IsNullOrEmpty(fontFamily) || !string.IsNullOrEmpty(color)) { diff --git a/src/libse/VobSub/IfoParser.cs b/src/libse/VobSub/IfoParser.cs index e59e7338508..fa601455c4d 100644 --- a/src/libse/VobSub/IfoParser.cs +++ b/src/libse/VobSub/IfoParser.cs @@ -336,6 +336,8 @@ public static string GetIfoFileName(string vobFileName) /// A file in named ignoring case (a DVD /// copied to a case sensitive file system may be all lowercase: video_ts/vts_01_1.vob), or null. ///
+ /// The folder to look in. + /// The file name to find. /// The folder's files, listed on the first miss and reused. internal static string FindFile(string folder, string fileName, ref string[] folderFiles) { diff --git a/src/libse/VobSub/VobSubWriter.cs b/src/libse/VobSub/VobSubWriter.cs index 280b7ff05db..74425f9aa83 100644 --- a/src/libse/VobSub/VobSubWriter.cs +++ b/src/libse/VobSub/VobSubWriter.cs @@ -13,10 +13,10 @@ public class VobSubWriter : IDisposable { private class MemWriter { - private readonly byte[] _buf; - private long _pos; + private byte[] _buf; + private int _pos; - public MemWriter(long size) + public MemWriter(int size) { _buf = new byte[size]; _pos = 0; @@ -39,10 +39,30 @@ public void GotoBegin() public void WriteByte(byte val) { + EnsureCapacity(1); _buf[_pos++] = val; } + + public void WriteBytes(byte[] source, int offset, int count) + { + EnsureCapacity(count); + Buffer.BlockCopy(source, offset, _buf, _pos, count); + _pos += count; + } + + private void EnsureCapacity(int count) + { + if (_pos + count > _buf.Length) + { + Array.Resize(ref _buf, Math.Max(_buf.Length * 2, _pos + count)); + } + } } + // Reused for every sub picture unit: a new 200 KB buffer per unit was a large object + // heap allocation (zeroed each time) for units that are usually a few KB. + private readonly MemWriter _packetWriter = new MemWriter(0x800 * 16); + private readonly string _subFileName; private FileStream _subFile; private readonly StringBuilder _idx; @@ -183,7 +203,8 @@ public void WriteSubPictureUnit(TimeCode startTime, byte[] subPictureUnit) var imageBuffer = subPictureUnit; int bufferIndex = 0; byte vobSubId = (byte)_languageStreamId; - var mwsub = new MemWriter(200000); + var mwsub = _packetWriter; + mwsub.GotoBegin(); byte[] subHeader = new byte[30]; byte[] ts = new byte[4]; @@ -262,16 +283,11 @@ public void WriteSubPictureUnit(TimeCode startTime, byte[] subPictureUnit) subHeader[19] = (byte)(j % 0x100); // First Write header - for (int x = 0; x < headerSize; x++) - { - mwsub.WriteByte(subHeader[x]); - } + mwsub.WriteBytes(subHeader, 0, (int)headerSize); // Write Image Data - for (int x = 0; x < toWrite; x++) - { - mwsub.WriteByte(imageBuffer[bufferIndex++]); - } + mwsub.WriteBytes(imageBuffer, bufferIndex, (int)toWrite); + bufferIndex += (int)toWrite; // Pad remaining space, not technically nessesary lots of old things like to assume 2048 blocks long paddingSize = 0x800 - headerSize - toWrite; @@ -303,16 +319,11 @@ public void WriteSubPictureUnit(TimeCode startTime, byte[] subPictureUnit) subHeader[19] = (byte)(j % 0x100); // First Write header - for (int x = 0; x < headerSize; x++) - { - mwsub.WriteByte(subHeader[x]); - } + mwsub.WriteBytes(subHeader, 0, (int)headerSize); // Write Image Data - for (int x = 0; x < blockSize; x++) - { - mwsub.WriteByte(imageBuffer[bufferIndex++]); - } + mwsub.WriteBytes(imageBuffer, bufferIndex, (int)blockSize); + bufferIndex += (int)blockSize; toWrite -= blockSize; } diff --git a/src/libuilogic/AutoTranslate/AnthropicTranslate.cs b/src/libuilogic/AutoTranslate/AnthropicTranslate.cs index 5bba38aef91..dadae1fa322 100644 --- a/src/libuilogic/AutoTranslate/AnthropicTranslate.cs +++ b/src/libuilogic/AutoTranslate/AnthropicTranslate.cs @@ -30,6 +30,9 @@ public class AnthropicTranslate : IAutoTranslator, IDisposable ///
public static string[] Models => new[] { + "claude-sonnet-5-5", + "claude-opus-5-5", + "claude-haiku-5-5", "claude-sonnet-5", "claude-opus-5", "claude-opus-4-8", diff --git a/src/libuilogic/AutoTranslate/ApiRouteTranslate.cs b/src/libuilogic/AutoTranslate/ApiRouteTranslate.cs index b0a690d0d72..a1cd414fbd0 100644 --- a/src/libuilogic/AutoTranslate/ApiRouteTranslate.cs +++ b/src/libuilogic/AutoTranslate/ApiRouteTranslate.cs @@ -31,11 +31,17 @@ public class ApiRouteTranslate : IAutoTranslator, IDisposable { // Anthropic Claude "claude-sonnet-5", + "claude-sonnet-5-5", + "claude-opus-5-5", + "claude-haiku-5-5", "claude-opus-5", "claude-haiku-4-5", "claude-sonnet-4-6", // OpenAI GPT Series + "gpt-6.1-sol", + "gpt-6-sol", + "gpt-6-luna", "gpt-5.6-sol", "gpt-5.5", "gpt-5.4", @@ -49,8 +55,10 @@ public class ApiRouteTranslate : IAutoTranslator, IDisposable // Google Gemini "gemini-flash-latest", + "gemini-4-argon", + "gemini-3.8-flash", + "gemini-3.6-flash", "gemini-3.1-pro-preview", - "gemini-3.5-flash", "gemini-2.5-pro", "gemini-2.5-flash", }; diff --git a/src/libuilogic/AutoTranslate/ChatGptTranslate.cs b/src/libuilogic/AutoTranslate/ChatGptTranslate.cs index 0cbb19e5928..6e95154f7ed 100644 --- a/src/libuilogic/AutoTranslate/ChatGptTranslate.cs +++ b/src/libuilogic/AutoTranslate/ChatGptTranslate.cs @@ -38,7 +38,9 @@ public class ChatGptTranslate : IAutoTranslator, ILineBreakPreservingTranslator, // gpt-oss-120b is an open-weights model not hosted on api.openai.com at all. public static string[] Models => new[] { + "gpt-6.1-sol", "gpt-6-astra", + "gpt-6-sol", "gpt-6-luna", "gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna", "gpt-5.5", "gpt-5.4", "gpt-5.4-mini", "gpt-5.4-nano", diff --git a/src/libuilogic/AutoTranslate/GeminiTranslate.cs b/src/libuilogic/AutoTranslate/GeminiTranslate.cs index 4c4b64360ae..7af16ade4ec 100644 --- a/src/libuilogic/AutoTranslate/GeminiTranslate.cs +++ b/src/libuilogic/AutoTranslate/GeminiTranslate.cs @@ -35,11 +35,12 @@ public class GeminiTranslate : IAutoTranslator, IDisposable "gemini-flash-latest", "gemini-flash-lite-latest", - // Gemini 3.x - Latest Generation + // Gemini 4 + "gemini-4-argon", + + // Gemini 3.x "gemini-3.8-flash", - "gemini-3.7-flash", "gemini-3.6-flash", - "gemini-3.5-flash", "gemini-3.5-flash-lite", "gemini-3.1-pro-preview", "gemini-3.1-flash-lite", diff --git a/src/libuilogic/AutoTranslate/GroqTranslate.cs b/src/libuilogic/AutoTranslate/GroqTranslate.cs index 61665b3e067..a9d85f2be3a 100644 --- a/src/libuilogic/AutoTranslate/GroqTranslate.cs +++ b/src/libuilogic/AutoTranslate/GroqTranslate.cs @@ -34,7 +34,8 @@ public class GroqTranslate : IAutoTranslator, IDisposable // Medium / Efficient Multilingual "openai/gpt-oss-20b", // High-speed reasoning model (Production) - "qwen/qwen3.6-27b", // Strong multilingual mid-size model (Preview) + "qwen/qwen3.8-27b", // Strong multilingual mid-size model (Preview) + "llama-3.3-70b-versatile", // Solid multilingual Llama (Production) // Agentic systems "groq/compound", // Groq compound system diff --git a/src/libuilogic/AutoTranslate/NvidiaTranslate.cs b/src/libuilogic/AutoTranslate/NvidiaTranslate.cs index f14602394c1..002380f4440 100644 --- a/src/libuilogic/AutoTranslate/NvidiaTranslate.cs +++ b/src/libuilogic/AutoTranslate/NvidiaTranslate.cs @@ -43,10 +43,12 @@ public class NvidiaTranslate : IAutoTranslator, IDisposable "nvidia/nvidia-nemotron-nano-9b-v2", // NVIDIA Riva (translation-specific) + "nvidia/riva-translate-4b-instruct-v2", "nvidia/riva-translate-4b-instruct-v1.1", "nvidia/riva-translate-4b-instruct", // DeepSeek + "deepseek-ai/deepseek-v4.1-flash", "deepseek-ai/deepseek-v4-pro", "deepseek-ai/deepseek-v4-flash", @@ -69,6 +71,7 @@ public class NvidiaTranslate : IAutoTranslator, IDisposable "moonshotai/kimi-k2.6", // Zhipu GLM + "z-ai/glm-5.3", "z-ai/glm-5.2", // OpenAI (open weights) diff --git a/src/libuilogic/AutoTranslate/OpenRouterTranslate.cs b/src/libuilogic/AutoTranslate/OpenRouterTranslate.cs index a57bcb4978e..bd88509aceb 100644 --- a/src/libuilogic/AutoTranslate/OpenRouterTranslate.cs +++ b/src/libuilogic/AutoTranslate/OpenRouterTranslate.cs @@ -31,33 +31,44 @@ public class OpenRouterTranslate : IAutoTranslator, IDisposable { // High-Reasoning & Multilingual (The Leaders) "openai/gpt-5.6-sol", // OpenAI flagship for complex professional work + "openai/gpt-6.1-sol", // Newest OpenAI flagship + "openai/gpt-6-sol", // GPT-6 flagship "openai/gpt-5.5", // Previous-gen flagship general-purpose translator - "anthropic/claude-opus-5", // Current Anthropic flagship for nuanced translation + "anthropic/claude-opus-5.5", // Current Anthropic flagship for nuanced translation + "anthropic/claude-sonnet-5.5", // Strong balance of quality and cost + "anthropic/claude-opus-5", // Previous Anthropic flagship "anthropic/claude-opus-4.8", // Exceptional nuance and formal tone preservation - "anthropic/claude-sonnet-5", // Strong balance of quality and cost + "anthropic/claude-sonnet-5", // Previous-gen Sonnet + "google/gemini-4-argon", // Google's newest frontier model "google/gemini-3.1-pro-preview", // Massive context for translating whole books "deepseek/deepseek-v4-pro", // The most cost-effective reasoning translator - "z-ai/glm-5.2", // Strong open-weight generalist - "moonshotai/kimi-k2.6", // Strong for Asian languages + "z-ai/glm-5.3", // Strong open-weight generalist + "z-ai/glm-5.2", // Previous GLM generalist + "moonshotai/kimi-k3", // Strong for Asian languages + "moonshotai/kimi-k2.6", // Previous Kimi + "x-ai/grok-4.7", // xAI flagship // Efficient / Fast Translation "openai/gpt-5.6-terra", // Balanced intelligence and cost + "openai/gpt-6-luna", // GPT-6 cost-optimized, high-volume "openai/gpt-5.6-luna", // Cost-optimized, high-volume - "google/gemini-3.6-flash", // Google's newest flash model, cheaper and smarter - "google/gemini-3.5-flash", // Strong previous-gen flash model + "google/gemini-3.8-flash", // Google's newest flash model, cheaper and smarter + "google/gemini-3.6-flash", // Strong previous-gen flash model "google/gemini-3.1-flash-lite", // Speed-optimized multimodal - "anthropic/claude-haiku-4.5", // Fast Anthropic option - "deepseek/deepseek-v4-flash", // Low-latency DeepSeek + "anthropic/claude-haiku-5.5", // Fast Anthropic option + "anthropic/claude-haiku-4.5", // Previous fast Anthropic option + "deepseek/deepseek-v4.1-flash", // Low-latency DeepSeek // Specialized & Open-Weight (High Translation Performance) - "qwen/qwen3.6-max-preview", // Dominant for Asian & Middle Eastern languages + "qwen/qwen3.8-max-0902", // Dominant for Asian & Middle Eastern languages "meta-llama/llama-4-maverick", // MoE architecture, strong multilingual coverage - "mistralai/mistral-large-2512", // Superior for European romance languages + "mistralai/mistral-large-4-0", // Superior for European romance languages (preview) + "mistralai/mistral-large-2512", // Mistral Large 3 "mistralai/mistral-medium-3-5", // Solid mid-tier European-language model // Free tier - "meta-llama/llama-3.3-70b-instruct:free", // High-quality free-tier model - "qwen/qwen3-next-80b-a3b-instruct:free", // Free-tier MoE alternative + "google/gemma-4-31b-it:free", // High-quality free-tier model + "google/gemma-4-26b-a4b-it:free", // Free-tier MoE alternative }; /// diff --git a/src/libuilogic/AutoTranslate/PerplexityTranslate.cs b/src/libuilogic/AutoTranslate/PerplexityTranslate.cs index 950985fbe8b..a7c727e20fa 100644 --- a/src/libuilogic/AutoTranslate/PerplexityTranslate.cs +++ b/src/libuilogic/AutoTranslate/PerplexityTranslate.cs @@ -30,24 +30,29 @@ public class PerplexityTranslate : IAutoTranslator, IDisposable public static string[] Models => new[] { "perplexity/sonar", + "openai/gpt-6.1-sol", + "openai/gpt-6-sol", + "openai/gpt-6-luna", "openai/gpt-5.6-sol", "openai/gpt-5.6-terra", "openai/gpt-5.6-luna", + "anthropic/claude-opus-5-5", + "anthropic/claude-sonnet-5-5", + "anthropic/claude-haiku-5-5", "anthropic/claude-opus-5", "anthropic/claude-opus-4-8", "anthropic/claude-sonnet-5", "anthropic/claude-haiku-4-5", "google/gemini-3.8-flash", - "google/gemini-3.7-flash", "google/gemini-3.6-flash", - "google/gemini-3.5-flash", "google/gemini-3.1-pro-preview", "google/gemini-3.1-flash-lite", + "xai/grok-4.7", "xai/grok-4.6", "xai/grok-4.5", "perplexity/glm-5.3", + "perplexity/glm-5.3-flash", "perplexity/kimi-k3", - "perplexity/kimi-k2.7-code", }; /// diff --git a/src/libuilogic/Export/CustomTextFormatter.cs b/src/libuilogic/Export/CustomTextFormatter.cs index 873131e0044..f86e49ddb65 100644 --- a/src/libuilogic/Export/CustomTextFormatter.cs +++ b/src/libuilogic/Export/CustomTextFormatter.cs @@ -256,21 +256,21 @@ private static string ReplaceStandardComponents(string template, TimeCode timeCo // introduce new pattern letters, so grouping "hh" with "h" is safe), and every // TimeCode getter re-runs a TimeSpan conversion - so read them at most once. var result = template; - if (result.IndexOf('h') >= 0) + if (result.Contains('h')) { var hours = Math.Abs(timeCode.Hours); result = result.Replace("hh", hours.ToString("00")) .Replace("h", hours.ToString()); } - if (result.IndexOf('m') >= 0) + if (result.Contains('m')) { var minutes = Math.Abs(timeCode.Minutes); result = result.Replace("mm", minutes.ToString("00")) .Replace("m", minutes.ToString()); } - if (result.IndexOf('f') >= 0) + if (result.Contains('f')) { if (template == "ff") { diff --git a/src/libuilogic/Export/ExportHandlerBluRaySup.cs b/src/libuilogic/Export/ExportHandlerBluRaySup.cs index 9b68f039a97..b224cb8f97c 100644 --- a/src/libuilogic/Export/ExportHandlerBluRaySup.cs +++ b/src/libuilogic/Export/ExportHandlerBluRaySup.cs @@ -44,6 +44,12 @@ private sealed record PendingCue(byte[] Buffer, BluRaySupPicture Picture, SKColo private long _pendingStartPts; private long _pendingEndPts; + /// + /// The pending subtitles' times were changed after made their + /// display sets, so even a single one has to be written again. + /// + private bool _pendingRetimed; + public void WriteHeader(string fileOrFolderName, ImageParameter imageParameter) { _width = imageParameter.ScreenWidth; @@ -78,6 +84,7 @@ public void WriteParagraph(ImageParameter param) startPts < _pendingEndPts && endPts > _pendingStartPts; if (_pending.Count > 0 && !overlapsPending) { + BridgeGapShorterThanHalfAFrame(picture.StartTime, startPts, param.FramesPerSecond); FlushPending(); } @@ -114,7 +121,7 @@ private void FlushPending() try { - if (_pending.Count == 1) + if (_pending.Count == 1 && !_pendingRetimed) { // Nothing to compose - the display sets CreateParagraph made are the file. var buffer = _pending[0].Buffer; @@ -128,9 +135,38 @@ private void FlushPending() finally { _pending.Clear(); + _pendingRetimed = false; } } + /// + /// A gap shorter than half a frame is not a pause anyone means: the typewriter effect left + /// 1 ms between its steps (issue #15933). On the frame grid such a gap usually vanishes, but + /// when it straddles the middle of a frame the end rounds down and the next start rounds up, + /// and that frame shows nothing. The text flickers, and with a full frame image the video + /// shows through. The pending subtitles that end last are kept up until the next one starts. + /// + private void BridgeGapShorterThanHalfAFrame(long nextStartMs, long nextStartPts, double fps) + { + var gapMs = nextStartMs - _pendingEndMs; + if (fps <= 0 || gapMs <= 0 || gapMs >= 500.0 / fps || _pendingEndPts >= nextStartPts) + { + return; + } + + foreach (var cue in _pending) + { + if (cue.Picture.EndTime == _pendingEndMs) + { + cue.Picture.EndTime = nextStartMs; + } + } + + _pendingEndMs = nextStartMs; + _pendingEndPts = nextStartPts; + _pendingRetimed = true; + } + /// /// A subtitle as it sits in the frame, ready to be composed with others. /// diff --git a/src/libuilogic/Export/ExportHandlerDCinemaSmpte2014Mxf.cs b/src/libuilogic/Export/ExportHandlerDCinemaSmpte2014Mxf.cs new file mode 100644 index 00000000000..91d0ebf7197 --- /dev/null +++ b/src/libuilogic/Export/ExportHandlerDCinemaSmpte2014Mxf.cs @@ -0,0 +1,75 @@ +using Nikse.SubtitleEdit.Core.ContainerFormats.MaterialExchangeFormat; + +namespace Nikse.SubtitleEdit.UiLogic.Export; + +/// +/// D-Cinema SMPTE 2014 image subtitles as one SMPTE ST 429-5 timed text track file: the +/// index.xml of with each PNG embedded as an +/// ancillary resource under its urn:uuid - the subtitle asset of a SMPTE DCP. +/// +public class ExportHandlerDCinemaSmpte2014Mxf : ExportHandlerDCinemaSmpte2014Png +{ + public override string Extension => ".mxf"; + public override bool UseFileName => true; + public override string Title => string.Format("Export to {0}", "DCinema SMPTE 2014 (MXF)"); + + /// + /// The reel (picture) length - every asset of a DCP reel must have it, so the track runs to + /// it instead of ending at the last subtitle. Null = until the last subtitle. + /// + public TimeSpan? ReelDuration { get; set; } + + /// + /// The reel length as a picture frame count (e.g. a time code typed by the user) - takes + /// precedence over . + /// + public long? ReelFrames { get; set; } + + private string _fileName = string.Empty; + private readonly List _images = new(); + + protected override void PrepareOutput(string fileOrFolderName) + { + _fileName = fileOrFolderName; + _images.Clear(); + } + + protected override void SaveImage(string uuid, byte[] png) + { + _images.Add(new TimedTextMxfResource(Guid.Parse(uuid), TimedTextMxfResource.MimeTypePng, png)); + } + + protected override void SaveXml(string xml) + { + var writer = new TimedTextMxfWriter(); + if (ReelFrames is { } reelFrames && reelFrames > 0) + { + writer.ContainerDuration = reelFrames; + } + else if (ReelDuration is { TotalMilliseconds: > 0 } reelDuration) + { + writer.ContainerDuration = GetReelFrames(reelDuration, FrameRate); + } + + // Throws (before the file is created) when there are more images than + // TimedTextMxfWriter.MaxResources - one track file cannot hold them. + writer.Resources.AddRange(_images); + writer.Write(_fileName, xml); + _images.Clear(); + } + + /// + /// The picture frame count of a reel from its real-time length: a 23.976 video plays as 24 + /// frames per second in a DCP, but it has duration x 23.976 frames (1 h = 86314, not 86400), + /// so count with the actual (fractional) rate, not the integer edit rate. + /// + public static long GetReelFrames(TimeSpan duration, double frameRate) + { + if (frameRate <= 0) + { + frameRate = 24; + } + + return (long)Math.Round(duration.TotalSeconds * frameRate, MidpointRounding.AwayFromZero); + } +} diff --git a/src/libuilogic/Export/ExportHandlerDCinemaSmpte2014Png.cs b/src/libuilogic/Export/ExportHandlerDCinemaSmpte2014Png.cs index 23a5926db96..5d5e3b78e0e 100644 --- a/src/libuilogic/Export/ExportHandlerDCinemaSmpte2014Png.cs +++ b/src/libuilogic/Export/ExportHandlerDCinemaSmpte2014Png.cs @@ -9,9 +9,9 @@ namespace Nikse.SubtitleEdit.UiLogic.Export; public class ExportHandlerDCinemaSmpte2014Png : IExportHandler { public ExportImageType ExportImageType => ExportImageType.DCinemaPng; - public string Extension => ""; - public bool UseFileName => false; - public string Title => string.Format("Export to {0}", "DCinema SMPTE 2014/png"); + public virtual string Extension => ""; + public virtual bool UseFileName => false; + public virtual string Title => string.Format("Export to {0}", "DCinema SMPTE 2014/png"); public double FrameRate { get; set; } = 23.976; private int _width; @@ -34,12 +34,7 @@ public void WriteHeader(string fileOrFolderName, ImageParameter imageParameter) FrameRate = imageParameter.FramesPerSecond; } - _folderName = fileOrFolderName; - if (!Directory.Exists(_folderName)) - { - Directory.CreateDirectory(_folderName); - } - + PrepareOutput(fileOrFolderName); _sb.Clear(); _imagesSavedCount = 0; } @@ -53,8 +48,7 @@ public void WriteParagraph(ImageParameter param) // string numberString = $"{i:0000}"; _imagesSavedCount++; string uuidString = Guid.NewGuid().ToString().RemoveChar('-').Insert(8, "-").Insert(13, "-").Insert(18, "-").Insert(23, "-"); - string fileName = Path.Combine(_folderName, uuidString + ".png"); - File.WriteAllBytes(fileName, param.Bitmap.ToPngArray()); + SaveImage(uuidString, param.Bitmap.ToPngArray()); string verticalAlignment = "bottom"; string horizontalAlignment = "center"; @@ -130,7 +124,8 @@ public void WriteFooter() " urn:uuid:" + guid + "" + Environment.NewLine + " Movie Title" + Environment.NewLine + " This is a subtitle file" + Environment.NewLine + - " " + DateTime.Now.ToString("o") + "" + Environment.NewLine + + // xs:dateTime without fractions or zone - DCP-o-matic's verifier warns on "o" (Bv2.1) + " " + DateTime.Now.ToString("s") + "" + Environment.NewLine + " 1" + Environment.NewLine + " en" + Environment.NewLine + " [FRAMERATE] 1" + Environment.NewLine + @@ -145,9 +140,31 @@ public void WriteFooter() xml = xml.Replace("[FRAMERATE]", ((int)Math.Round(FrameRate, MidpointRounding.AwayFromZero)).ToString(CultureInfo.InvariantCulture)); doc.LoadXml(xml); - var fName = Path.Combine(_folderName, "index.xml"); + // "UTF-8" like the text D-Cinema formats - ClairMeta rejects the lowercase declaration + SaveXml(SubtitleFormat.ToUtf8XmlString(doc).Replace("encoding=\"utf-8\"", "encoding=\"UTF-8\"")); + } - File.WriteAllText(fName, SubtitleFormat.ToUtf8XmlString(doc)); + /// + /// The PNGs and index.xml go into a folder; see + /// for the same subtitles wrapped in one MXF track file. + /// + protected virtual void PrepareOutput(string fileOrFolderName) + { + _folderName = fileOrFolderName; + if (!Directory.Exists(_folderName)) + { + Directory.CreateDirectory(_folderName); + } + } + + protected virtual void SaveImage(string uuid, byte[] png) + { + File.WriteAllBytes(Path.Combine(_folderName, uuid + ".png"), png); + } + + protected virtual void SaveXml(string xml) + { + File.WriteAllText(Path.Combine(_folderName, "index.xml"), xml); } private static string FormatUtf8Xml(XmlDocument doc) diff --git a/src/libuilogic/Export/PlainTextFormatter.cs b/src/libuilogic/Export/PlainTextFormatter.cs new file mode 100644 index 00000000000..dc6e1453957 --- /dev/null +++ b/src/libuilogic/Export/PlainTextFormatter.cs @@ -0,0 +1,134 @@ +using Nikse.SubtitleEdit.Core.Common; +using System.Globalization; +using System.Text; + +namespace Nikse.SubtitleEdit.UiLogic.Export; + +public enum PlainTextProcessing +{ + None, + Merge, + Unbreak, +} + +public class PlainTextOptions +{ + public PlainTextProcessing TextProcessing { get; set; } + public bool RemoveStyling { get; set; } = true; + public bool ShowLineNumbers { get; set; } + public bool AddNewLineAfterLineNumber { get; set; } = true; + public bool ShowTimeCodes { get; set; } + public bool AddNewLineAfterTimeCode { get; set; } = true; + public string TimeCodeFormat { get; set; } = PlainTextFormatter.TimeCodeFormatSrt; + public string TimeCodeSeparator { get; set; } = " --> "; + public bool AddLineAfterText { get; set; } = true; + public bool AddLineBetweenSubtitles { get; set; } = true; +} + +/// +/// Plain text export, shared by File → Export → Plain text and batch convert so both write the same text. +/// +public static class PlainTextFormatter +{ + public const string TimeCodeFormatSrt = "hh:mm:ss,zzz"; + public const string TimeCodeFormatDot = "hh:mm:ss.zzz"; + public const string TimeCodeFormatFrames = "hh:mm:ss:ff"; + public const string TimeCodeFormatSeconds = "seconds"; + + public static string Generate(IReadOnlyList paragraphs, PlainTextOptions options) + { + if (options.TextProcessing == PlainTextProcessing.Merge) + { + var parts = new List(); + foreach (var p in paragraphs) + { + var text = p.Text ?? string.Empty; + if (options.RemoveStyling) + { + text = HtmlUtil.RemoveHtmlTags(text, true); + } + + text = text.Replace(Environment.NewLine, " ").Trim(); + if (!string.IsNullOrEmpty(text)) + { + parts.Add(text); + } + } + + return string.Join(" ", parts); + } + + var sb = new StringBuilder(); + for (var i = 0; i < paragraphs.Count; i++) + { + var p = paragraphs[i]; + var text = p.Text ?? string.Empty; + + if (options.RemoveStyling) + { + text = HtmlUtil.RemoveHtmlTags(text, true); + } + + if (options.TextProcessing == PlainTextProcessing.Unbreak) + { + text = text.Replace(Environment.NewLine, " "); + text = Utilities.UnbreakLine(text); + } + + if (options.ShowLineNumbers) + { + sb.Append(i + 1); + if (options.AddNewLineAfterLineNumber) + { + sb.AppendLine(); + } + else + { + sb.Append(' '); + } + } + + if (options.ShowTimeCodes) + { + sb.Append(FormatTimeCode(p.StartTime.TotalMilliseconds, options.TimeCodeFormat)); + sb.Append(options.TimeCodeSeparator); + sb.Append(FormatTimeCode(p.EndTime.TotalMilliseconds, options.TimeCodeFormat)); + if (options.AddNewLineAfterTimeCode) + { + sb.AppendLine(); + } + else + { + sb.Append(' '); + } + } + + sb.AppendLine(text.Trim()); + + if (options.AddLineAfterText) + { + sb.AppendLine(); + } + + if (options.AddLineBetweenSubtitles) + { + sb.AppendLine(); + } + } + + return sb.ToString().TrimEnd(); + } + + private static string FormatTimeCode(double totalMilliseconds, string timeCodeFormat) + { + var tc = new TimeCode(totalMilliseconds); + return timeCodeFormat switch + { + TimeCodeFormatSeconds => tc.TotalSeconds.ToString("0.000", CultureInfo.InvariantCulture), + TimeCodeFormatSrt => tc.ToString(false), + TimeCodeFormatDot => tc.ToString().Replace(',', '.'), + TimeCodeFormatFrames => tc.ToHHMMSSFF(), + _ => tc.ToString() + }; + } +} diff --git a/src/libuilogic/HarfBuzzNativeFix.cs b/src/libuilogic/HarfBuzzNativeFix.cs index aadf074d4c3..ad2f4fa4f90 100644 --- a/src/libuilogic/HarfBuzzNativeFix.cs +++ b/src/libuilogic/HarfBuzzNativeFix.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; @@ -21,6 +22,7 @@ public static class HarfBuzzNativeFix { private const int RtldNow = 2; private const int RtldDeepBind = 8; + private const string LibraryFileName = "libHarfBuzzSharp.so"; [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr DlopenDelegate(string fileName, int flags); @@ -68,7 +70,8 @@ public static void Apply() foreach (var path in CandidatePaths()) { - if (!File.Exists(path)) + // A bare file name (no directory) is resolved by the dynamic loader's own search. + if (Path.IsPathRooted(path) && !File.Exists(path)) { continue; } @@ -112,13 +115,53 @@ public static void Apply() return null; } - private static string[] CandidatePaths() + private static List CandidatePaths() { - var baseDir = AppContext.BaseDirectory; - return - [ - Path.Combine(baseDir, "libHarfBuzzSharp.so"), - Path.Combine(baseDir, "runtimes", "linux-x64", "native", "libHarfBuzzSharp.so"), - ]; + var paths = new List(); + AddDirectory(paths, AppContext.BaseDirectory); + + // Packages may symlink the executable into /usr/bin (AppContext.BaseDirectory is then + // the symlink's folder), so also look next to the real executable. + try + { + var processPath = Environment.ProcessPath; + if (!string.IsNullOrEmpty(processPath)) + { + var target = File.ResolveLinkTarget(processPath, returnFinalTarget: true)?.FullName ?? processPath; + AddDirectory(paths, Path.GetDirectoryName(target)); + } + } + catch + { + // Ignore - the other candidates still apply. + } + + // Distro packages may move the native library out of the app folder entirely, e.g. the + // Arch AUR package installs the binary to /usr/bin and libHarfBuzzSharp.so to /usr/lib + // (issue #16014). A bare name lets dlopen search LD_LIBRARY_PATH, the ld cache and the + // default library folders - the same lookup .NET's default resolution would end up using. + paths.Add(LibraryFileName); + + return paths; + } + + private static void AddDirectory(List paths, string? directory) + { + if (string.IsNullOrEmpty(directory)) + { + return; + } + + foreach (var path in new[] + { + Path.Combine(directory, LibraryFileName), + Path.Combine(directory, "runtimes", "linux-x64", "native", LibraryFileName), + }) + { + if (!paths.Contains(path)) + { + paths.Add(path); + } + } } } diff --git a/src/libuilogic/LlamaCpp/LlamaCppServerManager.cs b/src/libuilogic/LlamaCpp/LlamaCppServerManager.cs index c403fb4760c..15c53767909 100644 --- a/src/libuilogic/LlamaCpp/LlamaCppServerManager.cs +++ b/src/libuilogic/LlamaCpp/LlamaCppServerManager.cs @@ -46,7 +46,9 @@ public sealed record LlamaCppModel( // stays empty until the token budget runs out, so the line comes back untranslated. The // Qwen families avoid this through their chat-template override instead (chatml + // --no-jinja bypasses the embedded template's thinking logic). - bool NoThinking = false); + bool NoThinking = false, + // OCR models only: how the subtitle image is framed before it is sent (see AiOcrPadding). + AiOcrPadding OcrPadding = AiOcrPadding.Square); /// /// Manages the local llama-server process used by the llama.cpp auto-translate and OCR @@ -296,6 +298,15 @@ public static class LlamaCppServerManager new LlamaCppModel("Phi-4 mini 3.8B (Q4_K_M)", "microsoft_Phi-4-mini-instruct-Q4_K_M.gguf", "2.5 GB", "https://huggingface.co/bartowski/microsoft_Phi-4-mini-instruct-GGUF/resolve/main/microsoft_Phi-4-mini-instruct-Q4_K_M.gguf"), + // PrismML Bonsai 27B, 1-bit (Q1_0, upstream llama.cpp - the ternary Q2_0/PQ2_0/PTQ1_0 files + // need PrismML's fork). English only: tested 2026-10-11 on b11425 with the review protocol it + // found 8/8 planted English errors with no false edits (Qwen 3.5 4B: 7/8), but only 2/6 in + // Danish, and its translations were poor - hence review only, not in TranslateModels. + // NoThinking is required: with thinking on a 15-line batch took ~400 s. ~12 tok/s on an M4. + new LlamaCppModel("Bonsai 27B 1-bit (Q1_0) - English only", "Bonsai-27B-Q1_0.gguf", "3.8 GB", + "https://huggingface.co/prism-ml/Bonsai-27B-gguf/resolve/main/Bonsai-27B-Q1_0.gguf", + NoThinking: true), + // EuroLLM 2512 - all 24 official EU languages (incl. Danish/Swedish/Norwegian/Finnish, which // the Hy-MT2 family lacks entirely), so these are the best picks for proofreading European // subtitles. Replaces the older EuroLLM-9B-Instruct entry; anyone who already downloaded that @@ -327,6 +338,10 @@ public static class LlamaCppServerManager /// and every music note; PaddleOCR-VL 12/14 recognized (0.32% char error) but merges two-line /// subtitles; HunyuanOCR 12/14 recognized (0.6%) with the same merging; LightOnOCR 9/14 /// recognized (2.53%) at 18.5 s/image - weakest and ~7x slower, hence last. + /// LightOnOCR-3 (2026-10-15, b11553): measured on 390 real Blu-ray subtitle images - 150 Dutch + /// from #16031 plus 60 each German/Danish/French/English, reference hand-checked against the + /// image wherever any model disagreed - exact lines: GLM-OCR 385, LightOnOCR-3 4B 384, + /// LightOnOCR-3 0.8B 379 - the 4B ranks second, the 0.8B took LightOnOCR 1B's last place. /// // DeepSeek-OCR-2 was evaluated for this list and rejected (2026-08-26): through // mainline llama.cpp with the OCR prompt it captions the image ("The image displays a @@ -340,6 +355,23 @@ public static class LlamaCppServerManager "https://huggingface.co/ggml-org/GLM-OCR-GGUF/resolve/main/GLM-OCR-Q8_0.gguf", MmprojFileName: "mmproj-GLM-OCR-Q8_0.gguf", MmprojUrl: "https://huggingface.co/ggml-org/GLM-OCR-GGUF/resolve/main/mmproj-GLM-OCR-Q8_0.gguf"), + // LightOnOCR-3 4B (LightOn, Apache-2.0, Qwen 3.5 VL) as mradermacher's Q8_0 - no official + // GGUF exists. As accurate as GLM-OCR on the 390 real images (384 vs 385 exact) and ~2.5x + // faster (1.3-1.8 s vs 3.5-5 s per image), and right where GLM-OCR fails: it keeps the line + // break in two-line ♪ lyrics and reads capital I where GLM-OCR writes "lst"/"ledereen". Its + // misses: two misread words, a closing quote added to a quotation that continues in the next + // cue, and "- Hi!" for "-Hi!" on English dialogue dashes. Second, not first, because it is + // a 5.2 GB download against GLM-OCR's 1.4 GB. Q8_0 only: the i1-Q4_K_M was no better than + // the 0.8B (143/150 Dutch vs 147/150 for Q8_0). + // NoThinking: the Qwen 3.5 template thinks by default and the answer then lands in + // reasoning_content, leaving content empty on most images. Border: the square cost it + // accuracy on every corpus (synthetic 16/19 vs 17/19) and ~2.5x the time. + new LlamaCppModel("LightOnOCR-3 4B (Q8_0)", "LightOnOCR-3-4B.Q8_0.gguf", "5.2 GB", + "https://huggingface.co/mradermacher/LightOnOCR-3-4B-GGUF/resolve/main/LightOnOCR-3-4B.Q8_0.gguf", + MmprojFileName: "mmproj-LightOnOCR-3-4B.Q8_0.gguf", + MmprojUrl: "https://huggingface.co/mradermacher/LightOnOCR-3-4B-GGUF/resolve/main/LightOnOCR-3-4B.mmproj-f16.gguf", + NoThinking: true, + OcrPadding: AiOcrPadding.Border), // Liquid AI's general vision model (3B), not an OCR specialist. Measured 2026-09-05 on the // same 14-image corpus: 0.00% character error - flawless across all eight scripts, italics, // busy video backgrounds and small text, where GLM-OCR misread one Russian word - and with @@ -367,20 +399,71 @@ public static class LlamaCppServerManager // unstrippable because genuine SDH "# lyrics" hash cues - which it preserves verbatim - // look the same), and it silently drops ♪ note marks. GLM-OCR gets both right. // Q8_0 only: bf16 measured identical on the same corpus while twice the size. + // Border, not the square (2026-10-15, b10840, 60 English + 121 Arabic images): English + // character error 1.4% vs 8.6% in the square, Arabic 8.1% vs 7.7%, and Video OCR crops + // take 1.5 s instead of 16-21 s because the square triples the image tokens. new LlamaCppModel("HunyuanOCR 1.5 (Q8_0)", "HunyuanOCR-Q8_0.gguf", "1.3 GB", "https://huggingface.co/ggml-org/HunyuanOCR-GGUF/resolve/main/HunyuanOCR-Q8_0.gguf", MmprojFileName: "mmproj-HunyuanOCR-Q8_0.gguf", - MmprojUrl: "https://huggingface.co/ggml-org/HunyuanOCR-GGUF/resolve/main/mmproj-HunyuanOCR-Q8_0.gguf"), - // Last on purpose: the weakest and by far the slowest of the four on subtitle images - // (9/14 recognized, 2.53% character error, 18.5 s/image against GLM-OCR's 2.5 s). It loses - // line breaks, drops ♪ note marks, misreads Cyrillic ё as е and Chinese 的, and wraps - // Japanese output in ``` fences. Kept for users who already rely on it. - new LlamaCppModel("LightOnOCR 1B (Q8_0)", "LightOnOCR-1B-1025-Q8_0.gguf", "1.2 GB", - "https://huggingface.co/ggml-org/LightOnOCR-1B-1025-GGUF/resolve/main/LightOnOCR-1B-1025-Q8_0.gguf", - MmprojFileName: "mmproj-LightOnOCR-1B-1025-Q8_0.gguf", - MmprojUrl: "https://huggingface.co/ggml-org/LightOnOCR-1B-1025-GGUF/resolve/main/mmproj-LightOnOCR-1B-1025-Q8_0.gguf"), + MmprojUrl: "https://huggingface.co/ggml-org/HunyuanOCR-GGUF/resolve/main/mmproj-HunyuanOCR-Q8_0.gguf", + OcrPadding: AiOcrPadding.Border), + // QARI-OCR 0.2.2.1 (NAMAA-Space, Apache-2.0): Qwen2-VL-2B fine-tuned for Arabic, here as + // mradermacher's merged GGUF. The pick for Arabic, not a general default - see #16043. + // Measured 2026-10-14 on b10840 with SE's flags, shared prompt and square pad over 61 + // Arabic images (20 HD bitmaps, 20 SD bitmaps, 20 burned-in 720p bottom-third crops, one + // real anime frame), exact / character error / median s per image: + // QARI 0.2.2.1 29/61, 5.2% (HD bitmaps 0.6%), 4.5 s - no loops, no empty answers + // HunyuanOCR 26/61, 9.3%, 1.5 s; LFM2.5-VL 10/61, 10.1%; PaddleOCR-VL 4/61, 12.7% + // (writes أ/إ as ا and ى as ي); GLM-OCR 1/61, 56% (fluent invented Arabic); + // LightOnOCR 1/61 (loops); plain Qwen2-VL-2B 0/61 (chats about the image). + // Rejected alongside it: QARI 0.3 (13-17/61, emits HTML tags - a document-structure + // model), QARI 0.4 4B (25/61 with its own prompt, 0/61 under the shared prompt) and + // Arabic-GLM-OCR-v2 (18/61 with 16 repetition loops and 7 empty answers). + // It follows the shared prompt as-is and reads Latin text correctly, but it joins every + // two-line subtitle into one line (all 12 two-line Arabic cases, and English too) and + // turns ♪ into لَ, so it ranks behind the general models for non-Arabic subtitles. + // Border, not the square (2026-10-15, 121 Arabic images): 7.3% character error vs 7.7%, + // the same line breaks, and 2.6 s instead of 31 s per Video OCR crop. The square's only + // edge is on HD bitmaps, and there only in how often a mixed Arabic/Latin line comes back + // with its runs swapped (1 vs 3 of 40) - the words themselves are read equally well. + new LlamaCppModel("QARI-OCR 0.2.2.1 Arabic 2B (Q8_0)", "Qari-OCR-0.2.2.1-VL-2B-Instruct-merged.Q8_0.gguf", "2.4 GB", + "https://huggingface.co/mradermacher/Qari-OCR-0.2.2.1-VL-2B-Instruct-merged-GGUF/resolve/main/Qari-OCR-0.2.2.1-VL-2B-Instruct-merged.Q8_0.gguf", + MmprojFileName: "mmproj-Qari-OCR-0.2.2.1-VL-2B-Instruct-merged.Q8_0.gguf", + MmprojUrl: "https://huggingface.co/mradermacher/Qari-OCR-0.2.2.1-VL-2B-Instruct-merged-GGUF/resolve/main/Qari-OCR-0.2.2.1-VL-2B-Instruct-merged.mmproj-Q8_0.gguf", + OcrPadding: AiOcrPadding.Border), + // LightOnOCR-3 0.8B (LightOn, Apache-2.0, Qwen 3.5 VL) as Prathat's Q8_0 - no official GGUF. + // Replaces LightOnOCR 1B (18.5 s/image, last in every measurement); anyone who already + // downloaded that one still sees it, as a custom entry from the models folder. The fast + // pick: 0.35-0.85 s per real image, 6-12x GLM-OCR, at about 1.0 GB. Last because it is the + // least accurate of the general models on real data (379/390 vs GLM-OCR's 385): five + // fluent misreads (four of them Dutch), a closing quote added to a quotation that continues + // in the next cue, and "- " after dialogue dashes. Best of all on the synthetic corpus + // (18/19), so the misses are language-prior guesses rather than unreadable images. + // Q8_0 and f16 gave identical output. NoThinking and Border for the same reasons as the 4B. + new LlamaCppModel("LightOnOCR-3 0.8B (Q8_0)", "LightOnOCR-3-0.8B-Q8_0.gguf", "1.0 GB", + "https://huggingface.co/Prathat/LightOnOCR-3-0.8B-GGUF/resolve/main/LightOnOCR-3-0.8B-Q8_0.gguf", + MmprojFileName: "mmproj-LightOnOCR-3-0.8B-Q8_0.gguf", + MmprojUrl: "https://huggingface.co/Prathat/LightOnOCR-3-0.8B-GGUF/resolve/main/LightOnOCR-3-0.8B-mmproj-f16.gguf", + NoThinking: true, + OcrPadding: AiOcrPadding.Border), }; + /// + /// The image framing for a curated OCR model given by its file name without extension (what + /// the engines send as the model name). Unknown and self-supplied models get the square. + /// + public static AiOcrPadding GetOcrPadding(string? modelName) + { + if (string.IsNullOrWhiteSpace(modelName)) + { + return AiOcrPadding.Square; + } + + var model = OcrModels.FirstOrDefault(m => + Path.GetFileNameWithoutExtension(m.FileName).Equals(modelName.Trim(), StringComparison.OrdinalIgnoreCase)); + return model?.OcrPadding ?? AiOcrPadding.Square; + } + /// /// The OCR prompt to send for : the model's own /// when it has one and the user has left the shared diff --git a/src/libuilogic/Media/FfmpegTrackInfo.cs b/src/libuilogic/Media/FfmpegTrackInfo.cs index a308d4a6254..5a51c2f06e8 100644 --- a/src/libuilogic/Media/FfmpegTrackInfo.cs +++ b/src/libuilogic/Media/FfmpegTrackInfo.cs @@ -16,6 +16,10 @@ public class FfmpegTrackInfo // "-map 0:N". -1 when ffmpeg did not report one. public int StreamIndex { get; set; } = -1; + // ffmpeg's stream type word for FfmpegTrackType.Other ("Data", "Attachment", "Unknown"), + // e.g. to leave data streams (MOV timecode, SCTE-35) out of a stream copy. + public string TypeName { get; set; } = string.Empty; + private static readonly Regex BitRateRegex = new Regex(@"\d+ kb/s", RegexOptions.Compiled); public int BitRate diff --git a/src/libuilogic/Ocr/AiOcrImagePadding.cs b/src/libuilogic/Ocr/AiOcrImagePadding.cs new file mode 100644 index 00000000000..697a64db105 --- /dev/null +++ b/src/libuilogic/Ocr/AiOcrImagePadding.cs @@ -0,0 +1,62 @@ +using SkiaSharp; +using System; + +namespace Nikse.SubtitleEdit.UiLogic.Ocr; + +/// +/// How a vision-model OCR engine wants the subtitle image framed. +/// +public enum AiOcrPadding +{ + /// Centered in a black square with a 20% margin - GLM-OCR drops line breaks without it (#16031). + Square, + + /// A thin black border that keeps the aspect ratio - far fewer image tokens on wide strips. + Border, +} + +/// +/// Image preparation for the llama.cpp vision-model OCR engine (UI and seconv). The models do +/// not downscale, so the square turns a 1280x240 Video OCR crop into a 1536x1536 image of +/// ~3000 image tokens, while a border keeps it near 1300x260. +/// +public static class AiOcrImagePadding +{ + public static SKBitmap Pad(SKBitmap source, AiOcrPadding padding) + { + return padding == AiOcrPadding.Border + ? PadWithBorder(source) + : PadToSquare(source); + } + + public static SKBitmap PadToSquare(SKBitmap source) + { + var longest = Math.Max(source.Width, source.Height); + var side = longest + (int)(longest * 0.2); + return Draw(source, side, side); + } + + /// + /// A black border of 10% of the image height (at least 10 px) on every side. + /// + public static SKBitmap PadWithBorder(SKBitmap source) + { + var border = Math.Max(10, (int)(source.Height * 0.1)); + return Draw(source, source.Width + 2 * border, source.Height + 2 * border); + } + + private static SKBitmap Draw(SKBitmap source, int width, int height) + { + var info = new SKImageInfo(width, height, SKColorType.Rgba8888, SKAlphaType.Opaque); + var padded = new SKBitmap(info); + using var canvas = new SKCanvas(padded); + canvas.Clear(SKColors.Black); + using var image = SKImage.FromBitmap(source); + var left = (width - source.Width) / 2f; + var top = (height - source.Height) / 2f; + var sampling = new SKSamplingOptions(SKFilterMode.Linear, SKMipmapMode.None); + canvas.DrawImage(image, new SKRect(left, top, left + source.Width, top + source.Height), sampling, null); + canvas.Flush(); + return padded; + } +} diff --git a/src/libuilogic/Ocr/FixEngine/OcrFixEngine.cs b/src/libuilogic/Ocr/FixEngine/OcrFixEngine.cs index af72cd5805a..3456943c9c1 100644 --- a/src/libuilogic/Ocr/FixEngine/OcrFixEngine.cs +++ b/src/libuilogic/Ocr/FixEngine/OcrFixEngine.cs @@ -1,4 +1,5 @@ using System.Buffers; +using System.Text; using System.Text.RegularExpressions; using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Core.Dictionaries; @@ -237,8 +238,8 @@ internal static string NormalizeApostrophes(string text) return text; } - var hasOpening = text.IndexOf('‘') >= 0; - var hasClosing = text.IndexOf('’') >= 0; + var hasOpening = text.Contains('‘'); + var hasClosing = text.Contains('’'); if (hasOpening == hasClosing) { return text; // neither, or a quotation pair @@ -506,6 +507,17 @@ private void CheckAndFixWord(OcrFixLinePartResult word, OcrFixLineResult splitLi isWordCorrect = true; } + // nOCR and binary image compare read a plain letter as an accented lookalike when the + // accent sits where the letter's own dot or serif is ("ìs", "pà", "vøn") and confuse + // accented letters of similar bodies ("č" read as "ë"). Pixels can't settle these; + // the dictionary can, so try the lookalikes and keep a result only when it is confirmed. + if (!isWordCorrect && TryFixAccentMisread(result, out var accentFixed)) + { + result = accentFixed; + word.GuessUsed = true; + isWordCorrect = true; + } + // Splitting a word via the word split list ("soproudofyou" -> "so proud of you") runs even // with "try to guess unknown words" off, like SE4's cautious guess level: every part must // be a dictionary word, so it rarely breaks a correct word. The heuristic splitter and the @@ -684,6 +696,151 @@ bool Accept(IReadOnlyList swap) return false; } + private static readonly string[] AccentLookalikeGroups = + { + "aàáâãäåā", "AÀÁÂÃÄÅĀ", "eèéêëēěęė", "EÈÉÊËĒĚĘĖ", "iìíîïī", "IÌÍÎÏĪ", "oòóôõöøō", "OÒÓÔÕÖØŌ", + "uùúûüūů", "UÙÚÛÜŪŮ", "cçčć", "CÇČĆ", "sšśş", "SŠŚŞ", "zžźż", "ZŽŹŻ", "nñńň", "NÑŃŇ", + "yýÿ", "YÝŸ", "rř", "RŘ", "dď", "DĎ", "tť", "TŤ", "lł", "LŁ", "gğ", "GĞ", "Bß", + }; + + // Lookalikes across different base letters (the hook of "č" vs the dots of "ë"). + private static readonly string[] AccentCrossGroups = { "čë", "ČË", "šë", "žä", "ŽÄ" }; + + // Languages written without accented letters: an accented letter there is a loanword or name + // ("café", "René", "résumé") that the dictionary usually lacks, so it must not be stripped. + private static readonly HashSet PlainLatinLanguages = new(StringComparer.Ordinal) { "en", "id", "ms" }; + + // Letters whose accent sits where the dot is - nOCR's typical misread of a plain "i" ("ìs", "movíes"). + private const string DotPositionAccents = "ìíîÌÍÎ"; + + private string GetAccentLookalikesForLanguage(char c) + { + var lookalikes = GetAccentLookalikes(c); + if (!PlainLatinLanguages.Contains(_twoLetterIsoLanguageName) || DotPositionAccents.Contains(c)) + { + return lookalikes; + } + + return new string(lookalikes.Where(ch => ch > 127).ToArray()); + } + + private static string GetAccentLookalikes(char c) + { + var sb = new StringBuilder(); + foreach (var group in AccentLookalikeGroups) + { + if (group.Contains(c)) + { + sb.Append(group); + } + } + + foreach (var group in AccentCrossGroups) + { + if (group.Contains(c)) + { + sb.Append(group); + } + } + + // The OCR did see a mark, so other accented letters come first and the plain letter last + // (Danish "Màske" is "Måske", not "Maske"); "ìs" still reaches "is" when "ís" is no word. + var lookalikes = sb.ToString().Where(ch => ch != c).Distinct().ToList(); + return new string(lookalikes.Where(ch => ch > 127).Concat(lookalikes.Where(ch => ch <= 127)).ToArray()); + } + + private bool IsAccentCandidate(char c) + { + return c > 127 && char.IsLetter(c) && GetAccentLookalikesForLanguage(c).Length > 0; + } + + /// + /// Tries the lookalikes of every accented letter in (fewest changes + /// first, other accented letters before the plain letter) and returns the first variant the + /// dictionary or names list accepts. + /// + private bool TryFixAccentMisread(string word, out string fixedWord) + { + fixedWord = word; + if (word.Length < 2) + { + return false; + } + + var positions = new List(); + for (var i = 0; i < word.Length; i++) + { + var ch = word[i]; + if (IsAccentCandidate(ch)) + { + positions.Add(i); + } + else if (!char.IsLetter(ch) && ch != '\'' && ch != '-') + { + return false; + } + } + + const int maxAccentPositions = 3; + if (positions.Count == 0 || positions.Count > maxAccentPositions) + { + return false; + } + + var alternatives = positions.Select(p => GetAccentLookalikesForLanguage(word[p])).ToList(); + var chars = word.ToCharArray(); + string? found = null; + + bool Accept() + { + var candidate = new string(chars); + if (IsSpelledCorrect(candidate) || _spellCheckWordLists.HasName(candidate.Trim('\'', '-'))) + { + found = candidate; + return true; + } + + return false; + } + + // Change exactly `changes` of the positions (from index `from` on), recursively. + bool Search(int from, int changes) + { + if (changes == 0) + { + return Accept(); + } + + for (var k = from; k < positions.Count; k++) + { + var pos = positions[k]; + foreach (var alt in alternatives[k]) + { + chars[pos] = alt; + if (Search(k + 1, changes - 1)) + { + return true; + } + } + + chars[pos] = word[pos]; + } + + return false; + } + + for (var changes = 1; changes <= positions.Count; changes++) + { + if (Search(0, changes)) + { + fixedWord = found!; + return true; + } + } + + return false; + } + private const char UnknownCharacter = '*'; private const string UnknownCharacterCandidates = "abcdefghijklmnopqrstuvwxyz'"; private const string UnknownCharacterCandidatesFirst = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; diff --git a/src/libuilogic/Ocr/FixEngine/OcrFixReplaceList2.cs b/src/libuilogic/Ocr/FixEngine/OcrFixReplaceList2.cs index 251d988a77f..92b1e22ab64 100644 --- a/src/libuilogic/Ocr/FixEngine/OcrFixReplaceList2.cs +++ b/src/libuilogic/Ocr/FixEngine/OcrFixReplaceList2.cs @@ -603,7 +603,7 @@ void EndRun() } // Inline options like "(?i)" change how the rest of the pattern matches. - if (i + 2 < pattern.Length && pattern[i + 1] == '?' && "imnsx-".IndexOf(pattern[i + 2]) >= 0) + if (i + 2 < pattern.Length && pattern[i + 1] == '?' && "imnsx-".Contains(pattern[i + 2])) { return null; } diff --git a/src/libuilogic/Ocr/ImageSplitterItem2.cs b/src/libuilogic/Ocr/ImageSplitterItem2.cs index 7d5768e82c6..e28707d9ac6 100644 --- a/src/libuilogic/Ocr/ImageSplitterItem2.cs +++ b/src/libuilogic/Ocr/ImageSplitterItem2.cs @@ -11,6 +11,18 @@ public class ImageSplitterItem2 public string? SpecialCharacter { get; set; } public bool CouldBeSpaceBefore { get; set; } + /// + /// Where the line's baseline is, in the same coordinates as (null when the + /// splitter didn't work it out). The part of a glyph above it tells "д" from "Д" and "у" from + /// "У", where the descender makes the whole glyph about as tall as a capital. + /// + public int? Baseline { get; set; } + + /// The glyph's height above the line's baseline, or its whole height when that's unknown. + public int HeightAboveBaseline => Baseline.HasValue && NikseBitmap != null + ? Math.Min(NikseBitmap.Height, Baseline.Value - Top) + : NikseBitmap?.Height ?? 0; + public ImageSplitterItem2(int x, int y, NikseBitmap2 bitmap, bool couldBeSpaceBefore = false) { X = x; diff --git a/src/libuilogic/Ocr/ItalicTextMerger.cs b/src/libuilogic/Ocr/ItalicTextMerger.cs index 4d5a850545b..a1e59a5737f 100644 --- a/src/libuilogic/Ocr/ItalicTextMerger.cs +++ b/src/libuilogic/Ocr/ItalicTextMerger.cs @@ -186,26 +186,103 @@ private static List BuildSegments(List words) var segments = new List(words.Count); for (var i = 0; i < words.Count; i++) { - var isWhitespace = slants[i] == WordSlant.Whitespace; + if (slants[i] == WordSlant.Whitespace) + { + segments.Add(new TextSegment { Text = ConcatCharTexts(words[i].Chars), IsWhitespace = true }); + continue; + } - // Words and whitespace alternate, so whitespace is inside italic only when the words - // on both sides of it are italic. - var shouldBeItalic = isWhitespace - ? i > 0 && i < words.Count - 1 && italic[i - 1] && italic[i + 1] - : italic[i]; + if (!ContainsItalicTag(words[i].Chars)) + { + segments.Add(new TextSegment { Text = ConcatCharTexts(words[i].Chars), ShouldBeItalic = italic[i] }); + continue; + } - segments.Add(new TextSegment + foreach (var ch in words[i].Chars) { - Text = ConcatCharTexts(words[i].Chars), - ShouldBeItalic = shouldBeItalic, - IsWhitespace = isWhitespace - }); + if (HasItalicTag(ch.Text)) + { + AddTaggedRuns(segments, ch.Text); + } + else + { + segments.Add(new TextSegment { Text = ch.Text, ShouldBeItalic = italic[i] }); + } + } + } + + // Words and whitespace alternate, so whitespace is inside italic only when the text on + // both sides of it is italic. + for (var i = 0; i < segments.Count; i++) + { + if (segments[i].IsWhitespace) + { + segments[i].ShouldBeItalic = i > 0 && i < segments.Count - 1 && + segments[i - 1].ShouldBeItalic && segments[i + 1].ShouldBeItalic; + } } // Post-process to merge consecutive segments with same formatting return MergeConsecutiveSegments(segments); } + /// + /// A glyph trained with italic tags in its text (e.g. "<i>i</i>t" for an italic i + /// joined to an upright t) sets its own formatting: tagged parts are italic, the rest upright, + /// whatever the word around it is. Appending the text as-is nested the tags inside the word's + /// italic tag ("<i>yada<i>i</i>t?</i>"). + /// + private static void AddTaggedRuns(List segments, string text) + { + var inItalic = false; + var start = 0; + var i = 0; + while (i < text.Length) + { + var tagLength = text.Length - i >= 3 && string.Compare(text, i, "", 0, 3, StringComparison.OrdinalIgnoreCase) == 0 ? 3 + : text.Length - i >= 4 && string.Compare(text, i, "", 0, 4, StringComparison.OrdinalIgnoreCase) == 0 ? 4 + : 0; + if (tagLength == 0) + { + i++; + continue; + } + + if (i > start) + { + segments.Add(new TextSegment { Text = text.Substring(start, i - start), ShouldBeItalic = inItalic }); + } + + inItalic = tagLength == 3; + i += tagLength; + start = i; + } + + if (start < text.Length) + { + segments.Add(new TextSegment { Text = text.Substring(start), ShouldBeItalic = inItalic }); + } + } + + private static bool HasItalicTag(string text) + { + return text.Contains("", StringComparison.OrdinalIgnoreCase) || + text.Contains("", StringComparison.OrdinalIgnoreCase); + } + + private static bool ContainsItalicTag(List chars) + { + for (var i = 0; i < chars.Count; i++) + { + if (HasItalicTag(chars[i].Text)) + { + return true; + } + } + + return false; + } + /// /// Italic state of the nearest word with letters in (ties only /// when ), or null when there is none. @@ -246,7 +323,7 @@ private static WordSlant GetSlant(WordGroup word) for (var i = 0; i < word.Chars.Count; i++) { var ch = word.Chars[i]; - if (!HasLetterOrDigit(ch.Text)) + if (!HasLetterOrDigit(ch.Text) || HasItalicTag(ch.Text)) { continue; } diff --git a/src/libuilogic/Ocr/NOcrCaseFixer.cs b/src/libuilogic/Ocr/NOcrCaseFixer.cs index 6c31b05d96b..e4abd9832d5 100644 --- a/src/libuilogic/Ocr/NOcrCaseFixer.cs +++ b/src/libuilogic/Ocr/NOcrCaseFixer.cs @@ -2,16 +2,29 @@ public class NOcrCaseFixer : INOcrCaseFixer { + /// + /// Cyrillic letters whose lowercase is a smaller copy of the uppercase in the usual subtitle + /// fonts, as lowercase/uppercase pairs. "д", "у", "ц" and "щ" have a descender, so their case + /// shows in the height above the baseline, not in the whole height. + /// + public const string CyrillicCaseTwins = "вВгГдДжЖзЗиИкКлЛмМнНоОпПсСтТуУхХцЦчЧшШщЩъЪыЫьЬэЭюЮяЯєЄѕЅљЉњЊџЏ"; + private static readonly HashSet UppercaseLikeLowercase = new() { "V", "W", "U", "S", "Z", "O", "X", "Ø", "C" }; private static readonly HashSet LowercaseLikeUppercase = new() { "v", "w", "u", "s", "z", "o", "x", "ø", "c" }; - private static readonly HashSet UppercaseWithAccent = new() { "Č", "Š", "Ž", "Ś", "Ż", "Ö", "Ü", "Ú", "Ï", "Í", "Ç", "Ì", "Ò", "Ù", "Ó" }; - private static readonly HashSet LowercaseWithAccent = new() { "č", "š", "ž", "ś", "ż", "ö", "ü", "ú", "ï", "í", "ç", "ì", "ò", "ù", "ó" }; + private static readonly HashSet UppercaseWithAccent = new() { "Č", "Š", "Ž", "Ś", "Ż", "Ö", "Ü", "Ú", "Ï", "Í", "Ç", "Ì", "Ò", "Ù", "Ó", "Й" }; + private static readonly HashSet LowercaseWithAccent = new() { "č", "š", "ž", "ś", "ż", "ö", "ü", "ú", "ï", "í", "ç", "ì", "ò", "ù", "ó", "й" }; private long _ocrLowercaseHeightsTotal; private int _ocrLowercaseHeightsTotalCount; private long _ocrUppercaseHeightsTotal; private int _ocrUppercaseHeightsTotalCount; + // Heights above the baseline of x-height and cap-height reference letters. + private long _xHeightTotal; + private int _xHeightCount; + private long _capHeightTotal; + private int _capHeightCount; + public bool HasWarmedUp { get; set; } /// @@ -24,7 +37,8 @@ public string FixUppercaseLowercaseIssues(ImageSplitterItem2 targetItem, NOcrCha return result.Text; } - if (result.Text is "e" or "a" or "d" or "t") + // Reference heights: letters with no lookalike in the other case. + if (result.Text is "e" or "a" or "d" or "t" or "а" or "е") { _ocrLowercaseHeightsTotalCount++; _ocrLowercaseHeightsTotal += targetItem.NikseBitmap.Height; @@ -35,7 +49,7 @@ public string FixUppercaseLowercaseIssues(ImageSplitterItem2 targetItem, NOcrCha } } - if (result.Text is "E" or "H" or "R" or "D" or "T" or "M") + if (result.Text is "E" or "H" or "R" or "D" or "T" or "M" or "Б" or "Е" or "Р" or "А") { _ocrUppercaseHeightsTotalCount++; _ocrUppercaseHeightsTotal += targetItem.NikseBitmap.Height; @@ -46,12 +60,31 @@ public string FixUppercaseLowercaseIssues(ImageSplitterItem2 targetItem, NOcrCha } } + if (result.Text is "e" or "a" or "а" or "е") + { + _xHeightTotal += targetItem.HeightAboveBaseline; + _xHeightCount++; + } + else if (result.Text is "E" or "H" or "R" or "D" or "T" or "M" or "Б" or "Е" or "Р" or "А") + { + _capHeightTotal += targetItem.HeightAboveBaseline; + _capHeightCount++; + } + + // Merged letter pairs ("гу", "жд" drawn as one connected glyph) are case twins as a + // whole when both letters are twins of the same case. + if (result.Text.Length > 0 && result.Text.All(c => CyrillicCaseTwins.Contains(c)) && + (result.Text.All(char.IsLower) || result.Text.All(char.IsUpper))) + { + return FixCyrillicCase(targetItem, result); + } + if (_ocrLowercaseHeightsTotalCount <= 2 || _ocrUppercaseHeightsTotalCount <= 2) { return result.Text; } - // Latin letters where lowercase versions look like uppercase version + // Latin letters where lowercase versions look like uppercase version if (UppercaseLikeLowercase.Contains(result.Text)) { var averageLowercase = _ocrLowercaseHeightsTotal / _ocrLowercaseHeightsTotalCount; @@ -98,4 +131,28 @@ public string FixUppercaseLowercaseIssues(ImageSplitterItem2 targetItem, NOcrCha return result.Text; } -} \ No newline at end of file + + /// + /// Picks the case of a Cyrillic case-twin letter from its height above the baseline: closer + /// to the x-height of "а"/"е" is lowercase, closer to the cap height of "Б"/"Е"/"Р"/"А" is + /// uppercase. Until both have been seen a few times the matcher's choice stands, and so does + /// a lowercase entry that was trained as tall as a capital: that shape is lowercase only (the + /// "∂"-like "д" of some fonts, which has no descender and reaches the cap height). + /// + private string FixCyrillicCase(ImageSplitterItem2 targetItem, NOcrChar result) + { + var text = result.Text; + if (_xHeightCount <= 2 || _capHeightCount <= 2 || + char.IsLower(text[0]) && result.MarginTop * 10 <= result.Height) + { + return text; + } + + var xHeight = _xHeightTotal / (double)_xHeightCount; + var capHeight = _capHeightTotal / (double)_capHeightCount; + var height = targetItem.HeightAboveBaseline; + return Math.Abs(height - xHeight) < Math.Abs(height - capHeight) + ? text.ToLowerInvariant() + : text.ToUpperInvariant(); + } +} diff --git a/src/libuilogic/Ocr/NOcrDb.cs b/src/libuilogic/Ocr/NOcrDb.cs index fa02a1fdd22..68a43437f7a 100644 --- a/src/libuilogic/Ocr/NOcrDb.cs +++ b/src/libuilogic/Ocr/NOcrDb.cs @@ -506,12 +506,12 @@ private static OcrPoint GetTotalSize(int listIndex, List ite { if (cached.ExactMatch != null) { - return cached.ExactMatch; + return ComposeYery(cached.ExactMatch, list, item, deepSeek, maxWrongPixels, lastDitch); } // The expanded scan depends on the neighboring splitter items and the parent // bitmap, so it can't be cached per glyph bitmap - always evaluate it live. - return GetMatchExpanded(parentBitmap, item, list.IndexOf(item), list) ?? cached.SingleMatch; + return GetMatchExpanded(parentBitmap, item, list.IndexOf(item), list) ?? ComposeYery(cached.SingleMatch, list, item, deepSeek, maxWrongPixels, lastDitch); } // A perfect single match (exact size, 0 errors) means the user has explicitly added an @@ -520,7 +520,7 @@ private static OcrPoint GetTotalSize(int listIndex, List ite if (exactSingle != null) { CacheMatch(key, new MatchCacheEntry { ExactMatch = exactSingle }); - return exactSingle; + return ComposeYery(exactSingle, list, item, deepSeek, maxWrongPixels, lastDitch); } var expandedResult = GetMatchExpanded(parentBitmap, item, list.IndexOf(item), list); @@ -553,7 +553,50 @@ private static OcrPoint GetTotalSize(int listIndex, List ite } CacheMatch(key, new MatchCacheEntry { SingleMatch = single }); - return single; + return ComposeYery(single, list, item, deepSeek, maxWrongPixels, lastDitch); + } + + /// + /// "ы"/"Ы" is a soft sign plus a separate bar. The trained two-part entries only fit fonts + /// with a similar gap and weight - in a heavy outlined font the pair is far wider than any + /// trained one and came out as "ьІ". A soft sign directly followed (no space) by a dotless bar + /// of the same height and top is that letter in any font: a capital "І" after a lowercase + /// "ь" is taller, and the dotted "і" isn't a bar. + /// + private NOcrChar? ComposeYery(NOcrChar? softSign, List list, ImageSplitterItem2 item, bool deepSeek, int maxWrongPixels, bool lastDitch) + { + if (softSign?.Text is not ("ь" or "Ь") || item.NikseBitmap == null) + { + return softSign; + } + + var index = list.IndexOf(item); + var next = index >= 0 && index + 1 < list.Count ? list[index + 1] : null; + if (next?.NikseBitmap == null) + { + return softSign; + } + + var height = item.NikseBitmap.Height; + var tolerance = Math.Max(2, height / 8); + if (Math.Abs(next.NikseBitmap.Height - height) > tolerance || + Math.Abs(next.Top - item.Top) > tolerance || + next.NikseBitmap.Width >= item.NikseBitmap.Width) + { + return softSign; + } + + var bar = GetMatchSingle(next.NikseBitmap, next.Top, deepSeek, maxWrongPixels, lastDitch); + if (bar?.Text is not ("І" or "l" or "I" or "|" or "/" or "1")) + { + return softSign; + } + + return new NOcrChar(softSign) + { + Text = softSign.Text == "ь" ? "ы" : "Ы", + ExpandCount = 2, + }; } private void CacheMatch(MatchCacheKey key, MatchCacheEntry entry) @@ -654,12 +697,18 @@ private void CacheMatch(MatchCacheKey key, MatchCacheEntry entry) // Best-match within the pass: the first candidate that fits the error budget used to // win outright, so with generous budgets a mediocre early entry beat a near-perfect - // later one. Now the candidate with the fewest wrong pixels wins; ties keep list - // order (newest first), so a user's just-added character still takes precedence over - // an equally-good older one. The counting loop shrinks its budget to "current best - // minus one", so each candidate aborts as soon as it can no longer win. + // later one. Now the candidate with the lowest share of wrong points wins; ties keep + // list order (newest first), so a user's just-added character still takes precedence + // over an equally-good older one. Ranking by share instead of by count matters once + // entries differ in line count: a 100-line entry (from Train nOCR) used to beat a + // 300-line one on a count that was low only because fewer points were checked, which + // read "o" as a sparsely trained "ø" and "i" as "ì". NOcrChar? best = null; - var bestErrors = int.MaxValue; + var bestRate = double.MaxValue; + NOcrChar? bestUpper = null; + var bestUpperRate = double.MaxValue; + NOcrChar? bestLower = null; + var bestLowerRate = double.MaxValue; foreach (var oc in OcrCharacters) { if (!PassFilter(bitmap, heightToWidthPercent, oc, topMargin, pass)) @@ -675,18 +724,71 @@ private void CacheMatch(MatchCacheKey key, MatchCacheEntry entry) ? pass.ErrorsAllowedSensitive(maxWrongPixels) : errorsAllowed; - var budget = Math.Min(Math.Min(candidateAllowed, areaErrorCap), bestErrors - 1); - if (TryCountErrors(bitmap, oc, budget, out var errors)) + // The number of points walked grows with the glyph's size, so a character trained + // at 20 px and matched at 40 px collects twice the errors for the same fit. + var scale = bitmap.Height / (double)oc.Height; + if (scale > 1) + { + candidateAllowed = (int)Math.Round(candidateAllowed * scale); + } + + var budget = Math.Min(candidateAllowed, areaErrorCap); + if (best != null) { - best = oc; - bestErrors = errors; - if (errors == 0) + // A candidate can only win with a lower share than the best so far, and its + // share is at least errors / (all its points), so stop counting once that + // bound reaches the best share. + var maxPoints = CountPointsUpperBound(oc, bitmap.Width, bitmap.Height); + budget = Math.Min(budget, (int)Math.Ceiling((bestRate + CaseTwinRateMargin) * maxPoints) - 1); + } + + if (TryCountErrors(bitmap, oc, budget, out var errors, out var points) && points > 0) + { + var rate = errors / (double)points; + if (IsCaseTwinLetter(oc.Text)) { - break; + if (char.IsUpper(oc.Text[0]) && rate < bestUpperRate) + { + bestUpper = oc; + bestUpperRate = rate; + } + else if (char.IsLower(oc.Text[0]) && rate < bestLowerRate) + { + bestLower = oc; + bestLowerRate = rate; + } } + + if (rate < bestRate) + { + best = oc; + bestRate = rate; + if (errors == 0 && !IsCaseTwinLetter(oc.Text)) + { + break; + } + } + } + } + + if (best != null && IsCaseTwinLetter(best.Text) && (bestUpper == null || bestLower == null)) + { + // The strict passes gate on size, so the other case (smaller or bigger by + // definition) is often not even a candidate in the pass that found this one. + var twinText = char.IsUpper(best.Text[0]) ? best.Text.ToLowerInvariant() : best.Text.ToUpperInvariant(); + var (twin, twinRate) = FindBestByText(bitmap, twinText, bestRate + CaseTwinRateMargin); + if (char.IsUpper(twinText[0])) + { + (bestUpper, bestUpperRate) = (twin, twinRate); + } + else + { + (bestLower, bestLowerRate) = (twin, twinRate); } } + best = ResolveCaseTwin(best, bestRate, bestUpper, bestUpperRate, bestLower, bestLowerRate, bitmap.Height, topMargin); + if (best != null) { return best; @@ -701,9 +803,22 @@ private void CacheMatch(MatchCacheKey key, MatchCacheEntry entry) // aspect ratio instead. private const int SmallGlyphAreaLimit = 150; private const double SmallGlyphMaxAspectRatio = 2.0; + private const int SmallGlyphMaxAreaRatio = 5; private static bool PassFilter(NikseBitmap2 bitmap, double heightToWidthPercent, NOcrChar oc, int topMargin, in MatchPass pass) { + // A small entry (dot, comma, apostrophe) carries only a few lines of evidence, and since + // every gate below scales with the glyph, it fits a much bigger glyph once stretched + // onto it: an apostrophe trained at 3x9 read the stem of a 8x22 "t" with zero errors. + // Allow about twice the size per axis, as between a DVD and a Blu-ray rendering. + var area = bitmap.Width * bitmap.Height; + var ocArea = oc.Width * oc.Height; + var smallArea = Math.Min(area, ocArea); + if (smallArea < SmallGlyphAreaLimit && Math.Max(area, ocArea) > smallArea * SmallGlyphMaxAreaRatio) + { + return false; + } + if (bitmap.Width * bitmap.Height < SmallGlyphAreaLimit) { // Small glyphs: absolute h/w% deltas are useless here - a dot (aspect ~100) vs a @@ -725,8 +840,12 @@ private static bool PassFilter(NikseBitmap2 bitmap, double heightToWidthPercent, var aspectMaxDelta = oc.IsSensitive && pass.AspectMaxDeltaSensitive != 0 ? pass.AspectMaxDeltaSensitive : pass.AspectMaxDelta; - if (aspectMaxDelta != int.MaxValue && - Math.Abs(heightToWidthPercent - oc.HeightToWidthPercent) >= aspectMaxDelta) + // Relative difference, in percent of the narrower aspect: an absolute h/w-% delta + // treated tall glyphs unfairly - "i" at 4x21 vs 6x43 is 525 vs 717, so a delta of 190 + // shut it out of every pass although the shapes are the same. + var aspectDelta = Math.Abs(heightToWidthPercent - oc.HeightToWidthPercent) * 100.0 / + Math.Min(heightToWidthPercent, oc.HeightToWidthPercent); + if (aspectMaxDelta != int.MaxValue && aspectDelta >= aspectMaxDelta) { return false; } @@ -739,7 +858,13 @@ private static bool PassFilter(NikseBitmap2 bitmap, double heightToWidthPercent, return false; } - if (Math.Abs(oc.MarginTop - topMargin) >= pass.MarginTopMaxDelta) + // Top margin and its tolerance are pixels at the size the character was trained at; scale + // both to the glyph being matched, or a "." trained at 30 px can never match one at 60 px + // (expected top 18, actual 36), while an "8" passes for an "e" at a smaller size. + var scale = bitmap.Height / (double)oc.Height; + var expectedTop = oc.MarginTop * scale; + var topTolerance = pass.MarginTopMaxDelta * Math.Max(1.0, scale); + if (Math.Abs(expectedTop - topMargin) >= topTolerance) { return false; } @@ -855,14 +980,95 @@ private readonly struct MatchPass }, }; + // Letters whose upper and lower case differ only in size ("o"/"O", "s"/"S", ...): scaled to + // the glyph they fit equally well, so pixels alone can't pick the case. Cyrillic has many + // more of them than Latin ("о"/"О", "т"/"Т", "и"/"И", ...). + private const string CaseTwinLetters = "cCoOsSuUvVwWxXzZøØ" + NOcrCaseFixer.CyrillicCaseTwins; + private const double CaseTwinRateMargin = 0.01; + + private static bool IsCaseTwinLetter(string text) => text.Length == 1 && CaseTwinLetters.Contains(text[0]); + + /// + /// When the winner is a case-twin letter and its other case scored within + /// , pick the case whose trained top margin, scaled to the + /// glyph, is closer to where the glyph sits in its line. The case fixer does this from the + /// heights seen so far, but has nothing to go on for the first lines of a file. + /// + private static NOcrChar? ResolveCaseTwin(NOcrChar? best, double bestRate, NOcrChar? upper, double upperRate, NOcrChar? lower, double lowerRate, int height, int topMargin) + { + if (best == null || !IsCaseTwinLetter(best.Text) || upper == null || lower == null || + !string.Equals(upper.Text, lower.Text, StringComparison.OrdinalIgnoreCase) || + Math.Max(upperRate, lowerRate) > bestRate + CaseTwinRateMargin) + { + return best; + } + + double TopDistance(NOcrChar oc) => Math.Abs(oc.MarginTop * height / (double)oc.Height - topMargin); + return TopDistance(upper) <= TopDistance(lower) ? upper : lower; + } + + /// + /// The entry with text and a similar aspect that fits + /// best, if its share of wrong points is below . + /// + private (NOcrChar? Match, double Rate) FindBestByText(NikseBitmap2 bitmap, string text, double maxRate) + { + NOcrChar? best = null; + var bestRate = maxRate; + var heightToWidthPercent = bitmap.Height * 100.0 / bitmap.Width; + foreach (var oc in OcrCharacters) + { + if (oc.Text != text || + Math.Abs(heightToWidthPercent - oc.HeightToWidthPercent) * 100.0 / Math.Min(heightToWidthPercent, oc.HeightToWidthPercent) >= 30) + { + continue; + } + + var maxPoints = CountPointsUpperBound(oc, bitmap.Width, bitmap.Height); + if (TryCountErrors(bitmap, oc, (int)Math.Ceiling(bestRate * maxPoints), out var errors, out var points) && + points > 0 && errors / (double)points <= bestRate) + { + best = oc; + bestRate = errors / (double)points; + } + } + + return (best, bestRate); + } + + /// + /// Number of points walks for at the given + /// size if none of them falls outside the bitmap. + /// + private static int CountPointsUpperBound(NOcrChar oc, int width, int height) + { + var points = 0; + foreach (var op in oc.LinesForeground) + { + var start = op.GetScaledStart(oc, width, height); + var end = op.GetScaledEnd(oc, width, height); + points += Math.Max(Math.Abs(end.X - start.X), Math.Abs(end.Y - start.Y)) + 1; + } + + foreach (var op in oc.LinesBackground) + { + var start = op.GetScaledStart(oc, width, height); + var end = op.GetScaledEnd(oc, width, height); + points += Math.Max(Math.Abs(end.X - start.X), Math.Abs(end.Y - start.Y)) + 1; + } + + return points; + } + /// /// Like but reports how many pixels disagreed, so callers can rank - /// candidates that all fit the budget. Returns false (and an unspecified count) as soon as - /// the budget is exceeded. + /// candidates that all fit the budget, and how many points were checked. Returns false (and + /// unspecified counts) as soon as the budget is exceeded. /// - private static bool TryCountErrors(NikseBitmap2 bitmap, NOcrChar oc, int errorsAllowed, out int errors) + private static bool TryCountErrors(NikseBitmap2 bitmap, NOcrChar oc, int errorsAllowed, out int errors, out int points) { errors = 0; + points = 0; if (errorsAllowed < 0) { return false; @@ -885,6 +1091,7 @@ private static bool TryCountErrors(NikseBitmap2 bitmap, NOcrChar oc, int errorsA { if ((uint)point.X < (uint)width && (uint)point.Y < (uint)height) { + points++; var a = pixelData[point.X * 4 + point.Y * widthX4 + 3]; if (a <= 150) { @@ -903,6 +1110,7 @@ private static bool TryCountErrors(NikseBitmap2 bitmap, NOcrChar oc, int errorsA { if ((uint)point.X < (uint)width && (uint)point.Y < (uint)height) { + points++; var a = pixelData[point.X * 4 + point.Y * widthX4 + 3]; if (a > 150) { diff --git a/src/libuilogic/Ocr/NOcrDbOptimizer.cs b/src/libuilogic/Ocr/NOcrDbOptimizer.cs new file mode 100644 index 00000000000..8833e766e92 --- /dev/null +++ b/src/libuilogic/Ocr/NOcrDbOptimizer.cs @@ -0,0 +1,520 @@ +using SkiaSharp; + +namespace Nikse.SubtitleEdit.UiLogic.Ocr; + +public sealed class NOcrDbOptimizerSettings +{ + /// Fonts to render the validation glyphs in; missing fonts are skipped. + public List FontNames { get; set; } = new(DefaultFontNames); + + public List FontSizes { get; set; } = new() { 24, 30, 40 }; + + /// + /// Entries keep at least this many lines. The wide and deep-seek match passes skip entries + /// with fewer than 41 / 51 lines, so going below 52 trades wrong letters for asterisks. + /// + public int MinLines { get; set; } = 52; + + /// + /// The loosest wrong-pixel budget a lookalike must stay above: the last-ditch pass (batch + /// convert, seconv, binary OCR fallback) doubles the deep-seek default of 25. + /// + public int MaxWrongPixels { get; set; } = 50; + + public static readonly string[] DefaultFontNames = + { + "Arial", "Helvetica", "Verdana", "Tahoma", "Trebuchet MS", "Arial Narrow", "Helvetica Neue", "Times New Roman", + }; +} + +public sealed class NOcrDbOptimizeResult +{ + public int Entries { get; init; } + public int LinesBefore { get; init; } + public int LinesAfter { get; init; } + public int ValidationGlyphs { get; init; } + public List FontsUsed { get; init; } = new(); +} + +/// +/// Removes the lines of each nOCR entry that don't tell it apart from its lookalikes. Most +/// trained lines are random and also hold for similar characters ("i" and "l" share the stem), +/// so they carry no evidence, and they dilute the share of wrong points the matcher ranks +/// candidates by. Every entry and its lookalikes are rendered in common subtitle fonts; the +/// entry then keeps the fewest lines for which each lookalike: +/// - still has at least min(original wrong points, budget + 1) wrong points, so it is still +/// rejected by every pass (and by the exact-size check, which needs one wrong point), and +/// - has a share of wrong points no lower than before, +/// while the entry's own rendered glyphs keep their share of wrong points. A/B on real +/// Blu-ray/DVD images: 43% fewer lines with a lower character error rate and fewer wrong letters. +/// Multi-part (expanded) entries are left as they are. +/// +public static class NOcrDbOptimizer +{ + private const int TwoColorThreshold = 200; + private const int PixelsAreSpace = 10; + private const int MinLineHeight = 25; + private const double PositiveShareMargin = 0.005; + + private sealed record Glyph(string Text, bool[] Ink, int Width, int Height); + + /// + /// A backup file name for that doesn't exist yet + /// (Latin.nocr.bak, then Latin.nocr.2.bak, ...), so optimizing again never overwrites the + /// backup of the unoptimized database. + /// + public static string GetFreeBackupFileName(string fileName) + { + var backupFileName = fileName + ".bak"; + for (var i = 2; File.Exists(backupFileName); i++) + { + backupFileName = fileName + "." + i + ".bak"; + } + + return backupFileName; + } + + /// + /// Optimizes the single-part entries of in place (call + /// afterwards). Call from a background thread. Returns null, with + /// the database unchanged, when returns true. + /// + public static NOcrDbOptimizeResult? Optimize(NOcrDb db, NOcrDbOptimizerSettings settings, Func? abortRequested = null, Action? progress = null) + { + var fonts = GetInstalledFonts(settings.FontNames); + var glyphs = RenderGlyphs(db, settings, fonts); + var entries = db.OcrCharacters.ToList(); + var newLines = new (List Foreground, List Background)?[entries.Count]; + var done = 0; + var aborted = false; + + Parallel.For(0, entries.Count, (index, state) => + { + if (abortRequested?.Invoke() == true) + { + aborted = true; + state.Stop(); + return; + } + + newLines[index] = Prune(entries[index], glyphs, settings); + progress?.Invoke(Interlocked.Increment(ref done), entries.Count); + }); + + if (aborted) + { + return null; + } + + var before = 0; + var after = 0; + for (var i = 0; i < entries.Count; i++) + { + var oc = entries[i]; + before += oc.LinesForeground.Count + oc.LinesBackground.Count; + if (newLines[i] is { } lines) + { + oc.LinesForeground.Clear(); + oc.LinesForeground.AddRange(lines.Foreground); + oc.LinesBackground.Clear(); + oc.LinesBackground.AddRange(lines.Background); + } + + after += oc.LinesForeground.Count + oc.LinesBackground.Count; + } + + return new NOcrDbOptimizeResult + { + Entries = entries.Count, + LinesBefore = before, + LinesAfter = after, + ValidationGlyphs = glyphs.Count, + FontsUsed = fonts, + }; + } + + private static List GetInstalledFonts(List fontNames) + { + var installed = new HashSet(SKFontManager.Default.FontFamilies, StringComparer.OrdinalIgnoreCase); + var fonts = fontNames.Where(installed.Contains).Distinct(StringComparer.OrdinalIgnoreCase).ToList(); + if (fonts.Count == 0) + { + fonts.Add(SKTypeface.Default.FamilyName); + } + + return fonts; + } + + private static List RenderGlyphs(NOcrDb db, NOcrDbOptimizerSettings settings, List fonts) + { + // Every single-character text in the database is a possible lookalike, not just the + // default training set (e.g. "č" or "♪" taught during OCR). + var texts = new List(); + foreach (var text in NOcrTrainer.DefaultTrainingCharacters.Select(c => c.ToString()) + .Concat(db.OcrCharacters.Select(oc => oc.Text))) + { + if (text.Length == 1 && !char.IsWhiteSpace(text[0]) && !texts.Contains(text)) + { + texts.Add(text); + } + } + + var jobs = (from font in fonts + from size in settings.FontSizes + from style in new[] { (Bold: false, Italic: false), (Bold: true, Italic: false), (Bold: false, Italic: true) } + select (font, size, style)).ToList(); + var perJob = new List[jobs.Count]; + Parallel.For(0, jobs.Count, i => + { + var (font, size, style) = jobs[i]; + var list = new List(); + foreach (var text in texts) + { + var glyph = RenderGlyph(text, font, size, style.Bold, style.Italic); + if (glyph != null) + { + list.Add(glyph); + } + } + + perJob[i] = list; + }); + + return perJob.SelectMany(p => p).ToList(); + } + + private static Glyph? RenderGlyph(string text, string font, float size, bool bold, bool italic) + { + // Same rendering and splitting as NOcrTrainer: "H" sets the cap height, and only + // characters that come out as one connected glyph are used. + using var bitmap = NOcrTrainer.RenderCharacterImage("H " + text, font, size, bold, italic); + if (bitmap == null) + { + return null; + } + + var nikseBitmap = new NikseBitmap2(bitmap); + nikseBitmap.MakeTwoColor(TwoColorThreshold); + nikseBitmap.CropTop(0, new SKColor(0, 0, 0, 0)); + var list = NikseBitmapImageSplitter2.SplitBitmapToLettersNew(nikseBitmap, PixelsAreSpace, false, false, MinLineHeight, false); + if (list.Count != 3 || list[2].NikseBitmap == null) + { + return null; + } + + var glyph = list[2].NikseBitmap!; + var width = glyph.Width; + var height = glyph.Height; + var pixels = glyph.GetPixelData(); + var ink = new bool[width * height]; + for (var y = 0; y < height; y++) + { + for (var x = 0; x < width; x++) + { + ink[y * width + x] = pixels[x * 4 + y * width * 4 + 3] > 150; + } + } + + return new Glyph(text, ink, width, height); + } + + private static (List Foreground, List Background)? Prune(NOcrChar oc, List glyphs, NOcrDbOptimizerSettings settings) + { + var lines = oc.LinesForeground.Select(l => (Line: l, Foreground: true)) + .Concat(oc.LinesBackground.Select(l => (Line: l, Foreground: false))) + .ToList(); + var lineCount = lines.Count; + if (lineCount <= settings.MinLines || oc.Width <= 0 || oc.Height <= 0) + { + return null; + } + + var positives = new List(); + var negatives = new List(); + foreach (var glyph in glyphs) + { + if (glyph.Text == oc.Text) + { + positives.Add(glyph); + } + else if (!AreSameShape(oc.Text, glyph.Text) && IsNear(oc, glyph)) + { + negatives.Add(glyph); + } + } + + var negErrors = new int[lineCount, negatives.Count]; + var negPoints = new int[lineCount, negatives.Count]; + var posErrors = new int[lineCount, positives.Count]; + var posPoints = new int[lineCount, positives.Count]; + for (var i = 0; i < lineCount; i++) + { + for (var j = 0; j < negatives.Count; j++) + { + Count(oc, lines[i].Line, lines[i].Foreground, negatives[j], out negErrors[i, j], out negPoints[i, j]); + } + + for (var j = 0; j < positives.Count; j++) + { + Count(oc, lines[i].Line, lines[i].Foreground, positives[j], out posErrors[i, j], out posPoints[i, j]); + } + } + + var negTotalErrors = new int[negatives.Count]; + var negTotalPoints = new int[negatives.Count]; + var need = new int[negatives.Count]; + for (var j = 0; j < negatives.Count; j++) + { + for (var i = 0; i < lineCount; i++) + { + negTotalErrors[j] += negErrors[i, j]; + negTotalPoints[j] += negPoints[i, j]; + } + + // Mirrors the matcher's budget: scaled up for bigger glyphs, capped by glyph area. + var glyph = negatives[j]; + var scale = glyph.Height / (double)oc.Height; + var budget = Math.Min((int)Math.Round(settings.MaxWrongPixels * Math.Max(1, scale)), Math.Max(8, glyph.Width * glyph.Height / 8)); + need[j] = Math.Min(negTotalErrors[j], budget + 1); + } + + var posTotalErrors = new int[positives.Count]; + var posTotalPoints = new int[positives.Count]; + var posErrorsPerLine = new int[lineCount]; + var negErrorsPerLine = new int[lineCount]; + for (var i = 0; i < lineCount; i++) + { + for (var j = 0; j < positives.Count; j++) + { + posTotalErrors[j] += posErrors[i, j]; + posTotalPoints[j] += posPoints[i, j]; + posErrorsPerLine[i] += posErrors[i, j]; + } + + for (var j = 0; j < negatives.Count; j++) + { + negErrorsPerLine[i] += negErrors[i, j]; + } + } + + var selected = new bool[lineCount]; + var selectedCount = 0; + + // Greedy set multicover: the line that adds the most still-needed wrong points to the + // lookalikes, preferring lines the entry's own glyphs agree with. + var remaining = (int[])need.Clone(); + while (true) + { + var best = -1; + var bestScore = 0.0; + for (var i = 0; i < lineCount; i++) + { + if (selected[i]) + { + continue; + } + + var gain = 0; + for (var j = 0; j < negatives.Count; j++) + { + if (remaining[j] > 0) + { + gain += Math.Min(negErrors[i, j], remaining[j]); + } + } + + var score = gain - 0.1 * posErrorsPerLine[i]; + if (gain > 0 && (best < 0 || score > bestScore)) + { + best = i; + bestScore = score; + } + } + + if (best < 0) + { + break; + } + + selected[best] = true; + selectedCount++; + for (var j = 0; j < negatives.Count; j++) + { + remaining[j] = Math.Max(0, remaining[j] - negErrors[best, j]); + } + } + + // Fill up to the minimum with the most telling lines. + foreach (var i in Enumerable.Range(0, lineCount).OrderByDescending(i => negErrorsPerLine[i] - 10 * posErrorsPerLine[i])) + { + if (selectedCount >= settings.MinLines) + { + break; + } + + if (!selected[i]) + { + selected[i] = true; + selectedCount++; + } + } + + // Shares: a lookalike within the budget competes on its share of wrong points, so it + // must not look better than before; the entry's own glyphs must not look worse. + for (var round = 0; round < lineCount; round++) + { + var added = AddLineForNegativeShare(selected, negErrors, negPoints, negTotalErrors, negTotalPoints, need) ?? + AddLineForPositiveShare(selected, posErrors, posPoints, posTotalErrors, posTotalPoints); + if (added == null) + { + break; + } + + selected[added.Value] = true; + } + + var foreground = new List(); + var background = new List(); + for (var i = 0; i < lineCount; i++) + { + if (selected[i]) + { + (lines[i].Foreground ? foreground : background).Add(lines[i].Line); + } + } + + return (foreground, background); + } + + private static int? AddLineForNegativeShare(bool[] selected, int[,] errors, int[,] points, int[] totalErrors, int[] totalPoints, int[] need) + { + for (var j = 0; j < totalErrors.Length; j++) + { + // Never matched, or rejected by the budget whatever its share. + if (totalErrors[j] == 0 || totalErrors[j] > need[j]) + { + continue; + } + + long e = 0; + long p = 0; + for (var i = 0; i < selected.Length; i++) + { + if (selected[i]) + { + e += errors[i, j]; + p += points[i, j]; + } + } + + if (p > 0 && e * totalPoints[j] >= (long)totalErrors[j] * p) + { + continue; + } + + int? best = null; + var bestShare = -1.0; + for (var i = 0; i < selected.Length; i++) + { + if (!selected[i] && points[i, j] > 0 && errors[i, j] / (double)points[i, j] > bestShare) + { + best = i; + bestShare = errors[i, j] / (double)points[i, j]; + } + } + + if (best != null) + { + return best; + } + } + + return null; + } + + private static int? AddLineForPositiveShare(bool[] selected, int[,] errors, int[,] points, int[] totalErrors, int[] totalPoints) + { + for (var j = 0; j < totalErrors.Length; j++) + { + long e = 0; + long p = 0; + for (var i = 0; i < selected.Length; i++) + { + if (selected[i]) + { + e += errors[i, j]; + p += points[i, j]; + } + } + + var oldShare = totalPoints[j] == 0 ? 0 : totalErrors[j] / (double)totalPoints[j]; + if (p > 0 && e / (double)p <= oldShare + PositiveShareMargin) + { + continue; + } + + int? best = null; + var bestPoints = 0; + for (var i = 0; i < selected.Length; i++) + { + if (!selected[i] && errors[i, j] == 0 && points[i, j] > bestPoints) + { + best = i; + bestPoints = points[i, j]; + } + } + + if (best != null) + { + return best; + } + } + + return null; + } + + /// Case pairs (o/O) share the shape, and I/l/| are the same bar in sans-serif fonts. + private static bool AreSameShape(string a, string b) + { + return a.Equals(b, StringComparison.OrdinalIgnoreCase) || + a is "I" or "l" or "|" && b is "I" or "l" or "|"; + } + + /// The matcher's loosest size and aspect gates, widened. + private static bool IsNear(NOcrChar oc, Glyph glyph) + { + var area = glyph.Width * glyph.Height; + var ocArea = oc.Width * oc.Height; + var smallArea = Math.Min(area, ocArea); + if (smallArea < 150 && Math.Max(area, ocArea) > smallArea * 5) + { + return false; + } + + var aspect = glyph.Height * 100.0 / glyph.Width; + var ocAspect = oc.HeightToWidthPercent; + if (area < 150) + { + return Math.Max(aspect, ocAspect) / Math.Min(aspect, ocAspect) <= 2.0; + } + + return Math.Abs(aspect - ocAspect) * 100.0 / Math.Min(aspect, ocAspect) < 100; + } + + private static void Count(NOcrChar oc, NOcrLine line, bool foreground, Glyph glyph, out int errors, out int points) + { + errors = 0; + points = 0; + foreach (var p in line.ScaledWalkPoints(oc, glyph.Width, glyph.Height)) + { + if ((uint)p.X < (uint)glyph.Width && (uint)p.Y < (uint)glyph.Height) + { + points++; + if (glyph.Ink[p.Y * glyph.Width + p.X] != foreground) + { + errors++; + } + } + } + } +} diff --git a/src/libuilogic/Ocr/NOcrSpaceDetector.cs b/src/libuilogic/Ocr/NOcrSpaceDetector.cs new file mode 100644 index 00000000000..408a1c44d68 --- /dev/null +++ b/src/libuilogic/Ocr/NOcrSpaceDetector.cs @@ -0,0 +1,174 @@ +namespace Nikse.SubtitleEdit.UiLogic.Ocr; + +/// +/// Decides which gaps between glyphs are word spaces, relative to the text size instead of a +/// fixed pixel count. A fixed "pixels are space" value cannot fit every source: DVD-sized text +/// has 7-9 px word spaces (all lost at the default 12), while widely tracked all-caps Blu-ray +/// text has letter gaps of 12 px. Measured on real subtitles, letter gaps stay below ~0.19 of +/// the line's ink height and word spaces start at ~0.22 - except for tracked all-caps lines, +/// where letters sit up to 0.32 apart and spaces start at 0.47. So the threshold is found per +/// image from the biggest jump in its sorted gap sizes, and falls back to the median of earlier +/// images (one-word lines have no jump) or to . +/// +/// Split with so every gap becomes a space item, then call +/// . One instance per OCR run, like . +/// +/// +public class NOcrSpaceDetector +{ + /// "Pixels are space" value to split with, so that every gap is reported. + public const int SplitPixelsAreSpace = 1; + + private const double DefaultRelativeThreshold = 0.22; + private const double MinJumpRatio = 1.5; + private const double MinJumpSize = 0.08; + private const double MinSpace = 0.18; + private const double MaxLetterGap = 0.5; + private const int MaxHistory = 100; + + private readonly Lock _lock = new(); + private readonly List _history = new(); + + /// + /// Removes the space items of that are only gaps between letters. + /// + /// Split with . + /// The threshold used, in pixels (of the first line), for code + /// that still needs a pixel value. + public List RemoveFalseSpaces(List letters, out int pixelsAreSpace) + { + var lines = GetLines(letters); + var relativeThreshold = FindRelativeThreshold(letters, lines); + + var result = new List(letters.Count); + pixelsAreSpace = -1; + foreach (var (start, end, height) in lines) + { + var threshold = Math.Max(2, (int)Math.Round(height * relativeThreshold, MidpointRounding.AwayFromZero)); + if (pixelsAreSpace < 0 && height > 0) + { + pixelsAreSpace = threshold; + } + + for (var i = start; i < end; i++) + { + var item = letters[i]; + if (item.SpecialCharacter == " " && item.NikseBitmap == null && item.SpacePixels < threshold) + { + continue; + } + + result.Add(item); + } + + if (end < letters.Count) + { + result.Add(letters[end]); // the line break + } + } + + if (pixelsAreSpace < 0) + { + pixelsAreSpace = 12; + } + + return result; + } + + private double FindRelativeThreshold(List letters, List<(int Start, int End, int Height)> lines) + { + var gaps = new List(); + foreach (var (start, end, height) in lines) + { + if (height <= 0) + { + continue; + } + + for (var i = start; i < end; i++) + { + var item = letters[i]; + if (item.SpecialCharacter == " " && item.NikseBitmap == null) + { + gaps.Add(item.SpacePixels / (double)height); + } + } + } + + gaps.Sort(); + var bestRatio = 0.0; + var bestThreshold = -1.0; + for (var i = 0; i + 1 < gaps.Count; i++) + { + var low = gaps[i]; + var high = gaps[i + 1]; + if (high < MinSpace || low > MaxLetterGap || high - low < MinJumpSize) + { + continue; + } + + var ratio = high / Math.Max(low, 0.02); + if (ratio > bestRatio) + { + bestRatio = ratio; + bestThreshold = (low + high) / 2; + } + } + + lock (_lock) + { + if (bestRatio >= MinJumpRatio) + { + if (_history.Count >= MaxHistory) + { + _history.RemoveAt(0); + } + + _history.Add(bestThreshold); + return bestThreshold; + } + + if (_history.Count > 0) + { + var sorted = _history.OrderBy(p => p).ToList(); + return sorted[sorted.Count / 2]; + } + } + + return DefaultRelativeThreshold; + } + + /// Item ranges per text line (end exclusive, at the line break) with the line's ink height. + private static List<(int Start, int End, int Height)> GetLines(List letters) + { + var lines = new List<(int, int, int)>(); + var start = 0; + while (start <= letters.Count) + { + var end = start; + var top = int.MaxValue; + var bottom = int.MinValue; + while (end < letters.Count && letters[end].SpecialCharacter != Environment.NewLine) + { + var bitmap = letters[end].NikseBitmap; + if (bitmap != null) + { + top = Math.Min(top, letters[end].Top); + bottom = Math.Max(bottom, letters[end].Top + bitmap.Height); + } + + end++; + } + + lines.Add((start, end, bottom > top ? bottom - top : 0)); + if (end >= letters.Count) + { + break; + } + + start = end + 1; + } + + return lines; + } +} diff --git a/src/libuilogic/Ocr/NOcrTrainer.cs b/src/libuilogic/Ocr/NOcrTrainer.cs index b673f2fb5ac..7f59da342c6 100644 --- a/src/libuilogic/Ocr/NOcrTrainer.cs +++ b/src/libuilogic/Ocr/NOcrTrainer.cs @@ -78,6 +78,12 @@ public int Train(NOcrTrainerSettings settings, NOcrDb db, Func? abortReque foreach (var fontName in settings.FontNames) { + var lookalikes = new Dictionary<(bool Bold, bool Italic), Dictionary>(); + foreach (var style in GetStyles(settings)) + { + lookalikes[style] = RenderSinglePartGlyphs(singleCharacters, fontName, settings.FontSize, style.Bold, style.Italic); + } + foreach (var text in singleCharacters.Concat(mergedCombinations)) { if (abortRequested?.Invoke() == true) @@ -88,7 +94,7 @@ public int Train(NOcrTrainerSettings settings, NOcrDb db, Func? abortReque var isMerged = text.Length > 1; foreach (var (bold, italic) in GetStyles(settings)) { - if (TrainCharacter(settings, db, text, fontName, bold, italic, isMerged)) + if (TrainCharacter(settings, db, text, fontName, bold, italic, isMerged, lookalikes[(bold, italic)])) { learned++; } @@ -126,7 +132,35 @@ public int Train(NOcrTrainerSettings settings, NOcrDb db, Func? abortReque } } - private static bool TrainCharacter(NOcrTrainerSettings settings, NOcrDb db, string text, string fontName, bool bold, bool italic, bool isMerged) + /// + /// Renders every character that comes out as one connected glyph, keyed by its text. Used as + /// the set of lookalikes a newly trained character must not match. + /// + private static Dictionary RenderSinglePartGlyphs(List characters, string fontName, float fontSize, bool bold, bool italic) + { + var result = new Dictionary(); + foreach (var text in characters) + { + using var bitmap = RenderCharacterImage("H " + text, fontName, fontSize, bold, italic); + if (bitmap == null) + { + continue; + } + + var nikseBitmap = new NikseBitmap2(bitmap); + nikseBitmap.MakeTwoColor(TwoColorThreshold); + nikseBitmap.CropTop(0, new SKColor(0, 0, 0, 0)); + var list = NikseBitmapImageSplitter2.SplitBitmapToLettersNew(nikseBitmap, PixelsAreSpace, false, false, MinLineHeight, false); + if (list.Count == 3 && list[2].NikseBitmap != null) + { + result[text] = list[2].NikseBitmap!; + } + } + + return result; + } + + private static bool TrainCharacter(NOcrTrainerSettings settings, NOcrDb db, string text, string fontName, bool bold, bool italic, bool isMerged, Dictionary lookalikes) { // "H" establishes the line's cap height so the target glyph gets a realistic top // margin; the wide gap makes the splitter separate it from the target. @@ -146,11 +180,19 @@ private static bool TrainCharacter(NOcrTrainerSettings settings, NOcrDb db, stri { var item = list[2]; var match = db.GetMatchSingle(item.NikseBitmap!, item.Top, false, MaxWrongPixels); - if (match != null && match.Text == text) + if (match != null && (match.Text == text || IsSameShapeInSansSerif(match.Text, text))) { return false; // already recognized } + if (text is "I" or "|" && IsSolidBar(item.NikseBitmap!)) + { + // A plain bar is also the "l" of most sans-serif fonts: an "I" entry would only + // tie with those and win or lose by list order. Keep reading bars as "l"; the + // fix engine settles I/l from the dictionary. + return false; + } + var nOcrChar = new NOcrChar(text) { Width = item.NikseBitmap!.Width, @@ -160,6 +202,15 @@ private static bool TrainCharacter(NOcrTrainerSettings settings, NOcrDb db, stri }; var segments = settings.NumberOfLineSegments + (isMerged ? 20 : 0); NOcrChar.GenerateLineSegments(segments, false, nOcrChar, item.NikseBitmap, settings.LineSegmentAlgorithm); + foreach (var (otherText, otherBitmap) in lookalikes) + { + // Case pairs (o/O, s/S, ...) share the shape; size and position tell them apart. + if (!otherText.Equals(text, StringComparison.OrdinalIgnoreCase)) + { + AddDiscriminativeLines(nOcrChar, item.NikseBitmap, otherBitmap); + } + } + db.Add(nOcrChar); return true; } @@ -167,7 +218,7 @@ private static bool TrainCharacter(NOcrTrainerSettings settings, NOcrDb db, stri // Multi-part glyphs (e.g. ", %, ?) - train as an expanded character spanning all parts. // Merged letter combinations are only trained when they render as one connected glyph // (same as SE4); separate glyphs are already covered by the single characters. - if (!isMerged && list.Count is 4 or 5) + if (!isMerged && list.Count is 4 or 5 && CanBeMultiPart(text)) { var group = ExpandedOcrGroup.Create(nikseBitmap, list, 2, list.Count - 2); if (group == null) @@ -193,6 +244,202 @@ private static bool TrainCharacter(NOcrTrainerSettings settings, NOcrDb db, stri return false; } + /// + /// "I", "l" and "|" are the same bar in sans-serif fonts. Training one when the database + /// already reads the bar as another only adds an identical entry with a different label that + /// then wins ties at random; the OCR fix engine settles I/l from the dictionary. + /// + private static bool IsSameShapeInSansSerif(string a, string b) + { + return a is "I" or "l" or "|" && b is "I" or "l" or "|"; + } + + /// + /// A plain vertical bar: tall, thin and almost fully inked, like "I" and "l" in sans-serif + /// fonts. Two bars differ by a column of anti-aliasing at most, and the matcher scales the + /// rest away. + /// + private static bool IsSolidBar(NikseBitmap2 bitmap) + { + if (bitmap.Height < bitmap.Width * 3) + { + return false; + } + + var ink = 0; + for (var y = 0; y < bitmap.Height; y++) + { + for (var x = 0; x < bitmap.Width; x++) + { + if (bitmap.GetAlpha(x, y) > 150) + { + ink++; + } + } + } + + return ink * 10 >= bitmap.Width * bitmap.Height * 9; + } + + /// + /// The random line generator only keeps lines whose pixels and their neighbours are all ink, + /// so strokes narrower than three pixels - the slash in "ø", an accent, the bar of "e" in a + /// light font - get no lines at all, and the trained character then matches its lookalike + /// ("o", "i", "c") with zero errors. When would match + /// , add precise lines on the pixels where the two glyphs + /// differ until the lookalike clearly fails. + /// + internal static void AddDiscriminativeLines(NOcrChar nOcrChar, NikseBitmap2 own, NikseBitmap2 lookalike) + { + var ownAspect = own.Height / (double)own.Width; + var otherAspect = lookalike.Height / (double)lookalike.Width; + if (Math.Max(ownAspect, otherAspect) / Math.Min(ownAspect, otherAspect) > 1.6) + { + return; // the matcher's aspect gate already keeps these apart + } + + var (errors, points) = CountErrors(nOcrChar, lookalike); + var wanted = Math.Max(8, points * 6 / 100); + if (points == 0 || errors >= Math.Max(4, points * 3 / 100)) + { + return; // already tells them apart + } + + // Start lines only where the glyphs differ: ink here but not in the lookalike (a + // foreground line) or the other way round (a background line). Random starts anywhere + // almost never hit a one pixel slash. + var inkOnlyHere = new List(); + var inkOnlyThere = new List(); + for (var y = 0; y < own.Height; y++) + { + for (var x = 0; x < own.Width; x++) + { + var p = new NOcrLine(new OcrPoint(x, y), new OcrPoint(x, y)).GetScaledStart(nOcrChar, lookalike.Width, lookalike.Height); + if ((uint)p.X >= (uint)lookalike.Width || (uint)p.Y >= (uint)lookalike.Height) + { + continue; + } + + var here = own.GetAlpha(x, y) > 150; + var there = lookalike.GetAlpha(p.X, p.Y) > 150; + if (here && !there) + { + inkOnlyHere.Add(new OcrPoint(x, y)); + } + else if (!here && there) + { + inkOnlyThere.Add(new OcrPoint(x, y)); + } + } + } + + if (inkOnlyHere.Count == 0 && inkOnlyThere.Count == 0) + { + return; // identical at this size - nothing to tell them apart by + } + + var r = Random.Shared; + for (var attempt = 0; attempt < 3000 && errors < wanted; attempt++) + { + var foreground = inkOnlyThere.Count == 0 || (inkOnlyHere.Count > 0 && attempt % 2 == 0); + var starts = foreground ? inkOnlyHere : inkOnlyThere; + var start = starts[r.Next(starts.Count)]; + var end = new OcrPoint( + Math.Clamp(start.X + r.Next(-8, 9), 0, nOcrChar.Width - 1), + Math.Clamp(start.Y + r.Next(-8, 9), 0, nOcrChar.Height - 1)); + if (Math.Abs(start.X - end.X) < 2 && Math.Abs(start.Y - end.Y) < 2) + { + continue; + } + + var line = new NOcrLine(start, end); + var fits = foreground + ? NOcrChar.IsMatchPointForeGround(line, false, own, nOcrChar) + : NOcrChar.IsMatchPointBackGround(line, false, own, nOcrChar); + if (!fits) + { + continue; + } + + var lineErrors = 0; + foreach (var p in line.ScaledWalkPoints(nOcrChar, lookalike.Width, lookalike.Height)) + { + if ((uint)p.X < (uint)lookalike.Width && (uint)p.Y < (uint)lookalike.Height && + lookalike.GetAlpha(p.X, p.Y) > 150 != foreground) + { + lineErrors++; + } + } + + if (lineErrors >= 2) + { + (foreground ? nOcrChar.LinesForeground : nOcrChar.LinesBackground).Add(line); + errors += lineErrors; + } + } + } + + private static (int Errors, int Points) CountErrors(NOcrChar nOcrChar, NikseBitmap2 bitmap) + { + var errors = 0; + var points = 0; + foreach (var line in nOcrChar.LinesForeground) + { + foreach (var p in line.ScaledWalkPoints(nOcrChar, bitmap.Width, bitmap.Height)) + { + if ((uint)p.X < (uint)bitmap.Width && (uint)p.Y < (uint)bitmap.Height) + { + points++; + if (bitmap.GetAlpha(p.X, p.Y) <= 150) + { + errors++; + } + } + } + } + + foreach (var line in nOcrChar.LinesBackground) + { + foreach (var p in line.ScaledWalkPoints(nOcrChar, bitmap.Width, bitmap.Height)) + { + if ((uint)p.X < (uint)bitmap.Width && (uint)p.Y < (uint)bitmap.Height) + { + points++; + if (bitmap.GetAlpha(p.X, p.Y) > 150) + { + errors++; + } + } + } + } + + return (errors, points); + } + + /// + /// Only characters that are drawn in separate pieces by design (a letter plus diacritic, or + /// punctuation like " % ; :) may be trained as an expanded character. A plain letter that + /// falls apart is a thin font losing hairlines at the two-color threshold; stored as an + /// expanded "f" or "m" it later claims pairs of ordinary glyphs ("t." read as "f"). + /// + internal static bool CanBeMultiPart(string text) + { + if (text.Length != 1) + { + return false; + } + + var c = text[0]; + if (char.IsLetterOrDigit(c)) + { + // Cyrillic ы/Ы are a soft sign plus a separate bar. + return text.Normalize(System.Text.NormalizationForm.FormD).Length > 1 || c is 'Ø' or 'ø' or 'ы' or 'Ы'; + } + + return c is '"' or '%' or ';' or ':' or '?' or '!' or '=' or '÷' or '¡' or '¿' or '‰' or + '«' or '»' or '‹' or '›' or '“' or '”' or '„' or '‟' or '″' or '‴' or '…' or '‼' or '⁇' or '⁈' or '⁉'; + } + /// /// Renders text like a typical image subtitle: white fill with a black outline on a /// transparent background. diff --git a/src/libuilogic/Ocr/NikseBitmapImageSplitter2.cs b/src/libuilogic/Ocr/NikseBitmapImageSplitter2.cs index a9c5957fbfb..6c5ea323df9 100644 --- a/src/libuilogic/Ocr/NikseBitmapImageSplitter2.cs +++ b/src/libuilogic/Ocr/NikseBitmapImageSplitter2.cs @@ -539,6 +539,7 @@ public static List SplitBitmapToLettersNew(NikseBitmap2 bmp, list.Add(new ImageSplitterItem2(Environment.NewLine)); } + var lineStart = list.Count; var horizontalSplit = SplitHorizontalNew(b, xOrMorePixelsMakesSpace); if (rightToLeft) { @@ -561,11 +562,49 @@ public static List SplitBitmapToLettersNew(NikseBitmap2 bmp, list.Add(item); } } + + SetBaseline(list, lineStart); } return list; } + /// + /// Sets on the line's glyphs from + /// on: the median glyph bottom, as descenders and raised marks + /// (apostrophes, quotes) are the minority in any line of text. + /// + private static void SetBaseline(List list, int lineStart) + { + var bottoms = new List(); + for (var i = lineStart; i < list.Count; i++) + { + var bitmap = list[i].NikseBitmap; + if (bitmap != null) + { + bottoms.Add(list[i].Top + bitmap.Height); + } + } + + if (bottoms.Count == 0) + { + return; + } + + bottoms.Sort(); + + // Lower median: with an even count the upper one is a descender in a two-glyph line + // ("Ну"), which made the other glyph look capital-height. + var baseline = bottoms[(bottoms.Count - 1) / 2]; + for (var i = lineStart; i < list.Count; i++) + { + if (list[i].NikseBitmap != null) + { + list[i].Baseline = baseline; + } + } + } + /// /// split into lines diff --git a/src/libuilogic/Ocr/OcrHelper.cs b/src/libuilogic/Ocr/OcrHelper.cs index a63f3103ad5..d459216e843 100644 --- a/src/libuilogic/Ocr/OcrHelper.cs +++ b/src/libuilogic/Ocr/OcrHelper.cs @@ -46,6 +46,27 @@ public static string FixAiOcrPunctuationSpaces(string? input, string? language) return text; } + /// + /// Trims every line of an AI OCR result, not only the whole text. LightOnOCR-3 ends each + /// line but the last with a markdown hard break (two spaces), which would otherwise stay in + /// the subtitle text. + /// + public static string TrimAiOcrLines(string? input) + { + if (string.IsNullOrEmpty(input)) + { + return string.Empty; + } + + var lines = input.SplitToLines(); + for (var i = 0; i < lines.Count; i++) + { + lines[i] = lines[i].Trim(); + } + + return string.Join(Environment.NewLine, lines).Trim(); + } + /// /// French and Breton typography puts a real space before "?" and "!", so removing it /// damages correct OCR output. Same rule as Utilities.FixOcrErrors in libse. diff --git a/src/libuilogic/Ocr/OcrTwoColorThreshold.cs b/src/libuilogic/Ocr/OcrTwoColorThreshold.cs new file mode 100644 index 00000000000..6d9e722b7a2 --- /dev/null +++ b/src/libuilogic/Ocr/OcrTwoColorThreshold.cs @@ -0,0 +1,93 @@ +namespace Nikse.SubtitleEdit.UiLogic.Ocr; + +/// +/// Picks the brightness threshold (sum of R+G+B) for +/// before matching. The usual 200 keeps a white or yellow fill and drops a black outline, but a +/// grey drop shadow ("3D" subtitles) sums to 190-290 and fuses with the letters, so whole words +/// came out as "*". When a large share of what 200 would keep is mid-grey that Otsu's method +/// puts on the dark side, use Otsu's threshold instead. Normal subtitles keep 200: there only +/// anti-aliased edge pixels fall in that band (under 10% on real discs, against over 30% for +/// shadowed text), and a higher threshold would thin the glyphs compared to the database. +/// +public static class OcrTwoColorThreshold +{ + public const int Default = 200; + private const double ShadowShare = 0.2; + + public static int Get(NikseBitmap2 bitmap) + { + var data = bitmap.GetPixelData(); + var histogram = new double[766]; + for (var i = 0; i + 3 < data.Length; i += 4) + { + var alpha = data[i + 3]; + if (alpha == 0) + { + continue; + } + + histogram[data[i] + data[i + 1] + data[i + 2]] += alpha / 255.0; + } + + var otsu = GetOtsuThreshold(histogram); + if (otsu <= Default) + { + return Default; + } + + double kept = 0; + double shadow = 0; + for (var i = Default; i < histogram.Length; i++) + { + kept += histogram[i]; + if (i < otsu) + { + shadow += histogram[i]; + } + } + + return kept > 0 && shadow / kept > ShadowShare ? otsu : Default; + } + + private static int GetOtsuThreshold(double[] histogram) + { + double total = 0; + double sumAll = 0; + for (var i = 0; i < histogram.Length; i++) + { + total += histogram[i]; + sumAll += i * histogram[i]; + } + + double weightBackground = 0; + double sumBackground = 0; + var bestVariance = -1.0; + var threshold = Default; + for (var i = 0; i < histogram.Length; i++) + { + weightBackground += histogram[i]; + if (weightBackground == 0) + { + continue; + } + + var weightForeground = total - weightBackground; + if (weightForeground <= 0) + { + break; + } + + sumBackground += i * histogram[i]; + var meanBackground = sumBackground / weightBackground; + var meanForeground = (sumAll - sumBackground) / weightForeground; + var variance = weightBackground * weightForeground * (meanBackground - meanForeground) * (meanBackground - meanForeground); + if (variance > bestVariance) + { + bestVariance = variance; + threshold = i + 1; + } + } + + return threshold; + } +} diff --git a/src/libuilogic/SpellCheck/SpellChecker.cs b/src/libuilogic/SpellCheck/SpellChecker.cs index 1df3c1346de..ededd121373 100644 --- a/src/libuilogic/SpellCheck/SpellChecker.cs +++ b/src/libuilogic/SpellCheck/SpellChecker.cs @@ -1,4 +1,5 @@ using System.Globalization; +using System.Collections.Concurrent; using System.Text.RegularExpressions; using Nikse.SubtitleEdit.Core.Dictionaries; using Nikse.SubtitleEdit.Core.Interfaces; @@ -30,6 +31,13 @@ public class SpellChecker : ISpellChecker, IDoSpell private WordList? _hunspellWeCantSpell; // Finnish via libvoikko when the "fi_FI.voikko" pseudo dictionary is selected; null otherwise. private VoikkoSpellChecker? _voikko; + + // Dictionary answers per word. A subtitle repeats its words many times (OCR fix also asks + // about a line's words more than once, plus spelling variants of the unknown ones), and a + // Hunspell check - a miss in particular - costs far more than a lookup. The dictionaries + // only change in Initialize, which clears this. + private readonly ConcurrentDictionary _dictionaryAnswers = new(StringComparer.Ordinal); + private const int MaxDictionaryAnswers = 200_000; protected SpellCheckWordLists? WordLists; // Case-insensitive so per-word membership tests need no ToUpperInvariant allocation - // IsWordCorrect runs per word per grid cell repaint with live spell check on. @@ -139,6 +147,7 @@ public bool Initialize(string dictionaryFile, string twoLetterLanguageCode) _voikko?.Dispose(); _voikko = null; _hunspellWeCantSpell = null; + _dictionaryAnswers.Clear(); if (IsVoikkoDictionary(dictionaryFile)) { var dictionaryFolder = Path.GetDirectoryName(Path.GetDirectoryName(dictionaryFile)) ?? string.Empty; @@ -516,12 +525,24 @@ public bool DoSpell(string word) private bool CheckWithDictionary(string word) { - if (_voikko != null) + if (_voikko == null && _hunspellWeCantSpell == null) + { + return false; + } + + if (_dictionaryAnswers.TryGetValue(word, out var correct)) { - return _voikko.Spell(word); + return correct; } - return _hunspellWeCantSpell != null && _hunspellWeCantSpell.Check(word); + correct = _voikko != null ? _voikko.Spell(word) : _hunspellWeCantSpell!.Check(word); + if (_dictionaryAnswers.Count >= MaxDictionaryAnswers) + { + _dictionaryAnswers.Clear(); + } + + _dictionaryAnswers[word] = correct; + return correct; } /// @@ -531,6 +552,42 @@ private bool CheckWithDictionary(string word) /// as misspelled (#14788, aarondandy/WeCantSpell.Hunspell#118). Native Hunspell ignores the comment. /// internal static WordList LoadHunspell(string dictionaryFile, string affixFile) + { + // Parsing a Hunspell dictionary takes tens of milliseconds and more (en_US is 640 KB), + // and it happened for every SpellChecker - per file in a seconv batch, per opening of + // spell check. The last one parsed is kept and handed out again while both files are + // unchanged; a WordList is read-only after loading and safe for concurrent checks. + var key = GetHunspellCacheKey(dictionaryFile, affixFile); + lock (HunspellCacheLock) + { + if (_hunspellCache != null && _hunspellCache.Value.Key == key) + { + return _hunspellCache.Value.WordList; + } + } + + var wordList = ParseHunspell(dictionaryFile, affixFile); + lock (HunspellCacheLock) + { + _hunspellCache = (key, wordList); + } + + return wordList; + } + + private static readonly object HunspellCacheLock = new(); + private static (string Key, WordList WordList)? _hunspellCache; + + private static string GetHunspellCacheKey(string dictionaryFile, string affixFile) + { + var dictionary = new FileInfo(dictionaryFile); + var affix = new FileInfo(affixFile); + return string.Join("|", + dictionary.FullName, dictionary.Length, dictionary.LastWriteTimeUtc.Ticks, + affix.FullName, affix.Length, affix.LastWriteTimeUtc.Ticks); + } + + private static WordList ParseHunspell(string dictionaryFile, string affixFile) { var affixBytes = StripCompoundRuleComments(File.ReadAllBytes(affixFile)); using var dictionaryStream = File.OpenRead(dictionaryFile); diff --git a/src/libuilogic/Translate/MergeAndSplitHelper.cs b/src/libuilogic/Translate/MergeAndSplitHelper.cs index 40ceb88c30d..ac610a63b64 100644 --- a/src/libuilogic/Translate/MergeAndSplitHelper.cs +++ b/src/libuilogic/Translate/MergeAndSplitHelper.cs @@ -1437,7 +1437,7 @@ public static string RebalanceLines(string text, TranslationPair target) // Lyrics keep one line per phrase; AutoBreakLine's own ♪ guard only fires on text that // still holds line breaks, which the UnbreakLine below removes, so guard here. - if (text.IndexOf('♪') >= 0 || text.IndexOf('♫') >= 0) + if (text.Contains('♪') || text.Contains('♫')) { return text; } diff --git a/src/libuilogic/Translate/TranslationHelper.cs b/src/libuilogic/Translate/TranslationHelper.cs index 32a9b48b8d1..bf6aa59c0ea 100644 --- a/src/libuilogic/Translate/TranslationHelper.cs +++ b/src/libuilogic/Translate/TranslationHelper.cs @@ -80,7 +80,7 @@ public static string PreTranslate(string input, string source) { string s = FixInvalidCarriageReturnLineFeedCharacters(input); - if (source == "en" && s.IndexOf('\'') >= 0) + if (source == "en" && s.Contains('\'')) { // Every pattern needs an apostrophe, so lines without one skip the whole table. // These were 21 static Regex.Replace calls per line - more distinct patterns than diff --git a/src/seconv/Commands/ConvertCommand.cs b/src/seconv/Commands/ConvertCommand.cs index f34d842e1d1..c9d51389f87 100644 --- a/src/seconv/Commands/ConvertCommand.cs +++ b/src/seconv/Commands/ConvertCommand.cs @@ -52,6 +52,14 @@ public sealed class Settings : CommandSettings [Description("ASSA style file name")] public string? AssaStyleFile { get; init; } + [CommandOption("--dcinema-font|--dcinemafont")] + [Description("Font file (.ttf/.otf) embedded in dcinemasmpte2014mxf output")] + public string? DCinemaFont { get; init; } + + [CommandOption("--reel-duration|--reelduration")] + [Description("D-Cinema MXF output: the reel (picture) length as hh:mm:ss:ff - every asset of a DCP reel must have it (default: until the last subtitle)")] + public string? ReelDuration { get; init; } + [CommandOption("--ebu-header-file|--ebuheaderfile")] [Description("EBU header file name")] public string? EbuHeaderFile { get; init; } @@ -824,6 +832,8 @@ public override async Task ExecuteAsync(CommandContext context, Settings se PacCodePage = pacCodePage, PacSecondaryCodePage = pacSecondaryCodePage, EbuHeaderFile = settings.EbuHeaderFile, + DCinemaFontFile = settings.DCinemaFont, + ReelDuration = settings.ReelDuration, MultipleReplaceFile = settings.MultipleReplace, CustomFormatFile = settings.CustomFormat, PlainTextMerge = settings.PlainTextMerge, diff --git a/src/seconv/Core/ImageOutputWriter.cs b/src/seconv/Core/ImageOutputWriter.cs index 14269d839e6..b97a2b5a06d 100644 --- a/src/seconv/Core/ImageOutputWriter.cs +++ b/src/seconv/Core/ImageOutputWriter.cs @@ -1,4 +1,5 @@ using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.ContainerFormats.MaterialExchangeFormat; using SkiaSharp; using Nikse.SubtitleEdit.UiLogic.Export; @@ -14,6 +15,8 @@ internal static class ImageOutputWriter { public sealed record FormatTarget(string Name, IExportHandler Handler); + public const string DCinemaSmpte2014PngMxfName = "D-Cinema SMPTE 2014/png MXF"; + public static IExportHandler? TryCreateHandler(string normalizedFormat) { var n = normalizedFormat.Trim(); @@ -43,6 +46,9 @@ var x when x.Equals("D-Cinema interop/png", StringComparison.OrdinalIgnoreCase) => new ExportHandlerDCinemaInteropPng(), var x when x.Equals("D-Cinema SMPTE 2014/png", StringComparison.OrdinalIgnoreCase) || x.Equals("DCinemaSmpte2014", StringComparison.OrdinalIgnoreCase) => new ExportHandlerDCinemaSmpte2014Png(), + // The same images and XML as one SMPTE ST 429-5 track file - the subtitle asset of a SMPTE DCP. + var x when x.Equals(DCinemaSmpte2014PngMxfName, StringComparison.OrdinalIgnoreCase) || x.Equals("DCinemaSmpte2014PngMxf", StringComparison.OrdinalIgnoreCase) + => new ExportHandlerDCinemaSmpte2014Mxf(), var x when x.Equals("Images with time codes in file name", StringComparison.OrdinalIgnoreCase) || x.Equals("ImagesWithTimeCodes", StringComparison.OrdinalIgnoreCase) => new ExportHandlerImagesWithTimeCode(), // WebVTT thumbnail bundle: a directory of numbered PNG sprites plus an @@ -64,6 +70,7 @@ public static void Write(Subtitle subtitle, string filePath, IExportHandler hand } var (screenWidth, screenHeight) = options.Resolution ?? (1920, 1080); + ApplyReelDuration(handler, options); // "{\pos(x,y)}" is in the script's own resolution, the export canvas may be another one. var (scriptWidth, scriptHeight) = ExportTextTags.GetScriptResolution(subtitle.Header); @@ -95,6 +102,27 @@ public static void Write(Subtitle subtitle, string filePath, IExportHandler hand handler.WriteFooter(); } + /// + /// --reel-duration for the D-Cinema MXF track: hh:mm:ss:ff at the output frame rate. + /// + private static void ApplyReelDuration(IExportHandler handler, ConversionOptions options) + { + if (handler is not ExportHandlerDCinemaSmpte2014Mxf mxf || string.IsNullOrWhiteSpace(options.ReelDuration)) + { + return; + } + + var frameRate = (int)Math.Round(options.TargetFps ?? options.Fps ?? 25.0, MidpointRounding.AwayFromZero); + if (!TimedTextMxfWriter.TryParseTimeCode(options.ReelDuration, frameRate, out var frames)) + { + throw new InvalidOperationException($"--reel-duration must be hh:mm:ss:ff, not '{options.ReelDuration}'."); + } + + // A time code is a frame count already - converting it to seconds at the integer rate and + // back at the real (e.g. 23.976) rate would shrink it. + mxf.ReelFrames = frames; + } + /// /// Image-to-image variant: write a sequence of pre-rendered bitmaps (Blu-Ray .sup, /// VobSub, MKV PGS, DVB-sub) into without going through @@ -119,6 +147,7 @@ public static void WritePreservedBitmaps( var first = items[0]; var firstParam = BuildPreservedParameter(first, 0, defaultWidth, defaultHeight, options); + ApplyReelDuration(handler, options); handler.WriteHeader(filePath, firstParam); var apply3D = Stereo3DImage.IsModeSupported(handler.ExportImageType); diff --git a/src/seconv/Core/LibSEIntegration.cs b/src/seconv/Core/LibSEIntegration.cs index 2ccb58d380b..cdb7f9f640f 100644 --- a/src/seconv/Core/LibSEIntegration.cs +++ b/src/seconv/Core/LibSEIntegration.cs @@ -1,10 +1,13 @@ using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.ContainerFormats.MaterialExchangeFormat; using Nikse.SubtitleEdit.Core.Forms; using Nikse.SubtitleEdit.Core.Interfaces; using Nikse.SubtitleEdit.Core.SubtitleFormats; using Nikse.SubtitleEdit.UiLogic.SubtitleLoading; using Spectre.Console; +using System.Globalization; using System.Text; +using System.Text.RegularExpressions; namespace SeConv.Core; @@ -477,6 +480,12 @@ public static void SaveSubtitle( return; } + if (IsDCinemaSmpte2014Mxf(formatName)) + { + SaveDCinemaSmpte2014Mxf(subtitle, filePath, sourceFormat, options); + return; + } + // Image-based output formats: render text → bitmaps → format-specific bytes var imageHandler = ImageOutputWriter.TryCreateHandler(formatName); if (imageHandler is not null) @@ -565,6 +574,71 @@ public static void SaveSubtitle( SaveTextFormat(subtitle, filePath, targetFormat, encodingName); } + public const string DCinemaSmpte2014MxfName = "D-Cinema SMPTE 2014 MXF"; + + private static bool IsDCinemaSmpte2014Mxf(string formatName) => + formatName.Replace(" ", "").Equals(DCinemaSmpte2014MxfName.Replace(" ", ""), StringComparison.OrdinalIgnoreCase); + + /// + /// D-Cinema SMPTE 2014 XML wrapped as a SMPTE ST 429-5 timed text track file (the subtitle + /// asset of a SMPTE DCP) with the --dcinema-font embedded under the id the XML loads it by. + /// + private static void SaveDCinemaSmpte2014Mxf(Subtitle subtitle, string filePath, SubtitleFormat? sourceFormat, ConversionOptions? options) + { + var fontFile = options?.DCinemaFontFile; + if (string.IsNullOrWhiteSpace(fontFile)) + { + throw new InvalidOperationException("D-Cinema SMPTE 2014 MXF output requires --dcinema-font= - the track file embeds the font."); + } + + if (!File.Exists(fontFile)) + { + throw new FileNotFoundException($"D-Cinema font file not found: {fontFile}", fontFile); + } + + var ss = Configuration.Settings.SubtitleSettings; + var oldFontUri = ss.CurrentDCinemaFontUri; + var xml = string.Empty; + try + { + // The track carries the font under a urn:uuid - an Interop-style file name won't do + if (!(ss.CurrentDCinemaFontUri ?? string.Empty).StartsWith("urn:uuid:", StringComparison.OrdinalIgnoreCase)) + { + ss.CurrentDCinemaFontUri = ss.DCinemaLoadFontResource; + } + + WithFreshDCinemaIdentity(subtitle, sourceFormat, () => xml = new DCinemaSmpte2014().ToText(subtitle, Path.GetFileNameWithoutExtension(filePath))); + } + finally + { + ss.CurrentDCinemaFontUri = oldFontUri; + } + + var fontId = TimedTextMxfWriter.GetLoadFontIds(xml).FirstOrDefault(); + if (fontId == Guid.Empty) + { + throw new InvalidOperationException("The D-Cinema font URI must be a urn:uuid to embed the font in the MXF."); + } + + var writer = new TimedTextMxfWriter(); + writer.Resources.Add(new TimedTextMxfResource(fontId, TimedTextMxfResource.MimeTypeFont, File.ReadAllBytes(fontFile))); + if (!string.IsNullOrWhiteSpace(options?.ReelDuration)) + { + var editRate = Regex.Match(xml, @"<(?:\w+:)?EditRate>\s*(\d+)\s+(\d+)\s*<"); + var frameRate = editRate.Success + ? (int)Math.Round(double.Parse(editRate.Groups[1].Value, CultureInfo.InvariantCulture) / double.Parse(editRate.Groups[2].Value, CultureInfo.InvariantCulture), MidpointRounding.AwayFromZero) + : 24; + if (!TimedTextMxfWriter.TryParseTimeCode(options.ReelDuration, frameRate, out var frames)) + { + throw new InvalidOperationException($"--reel-duration must be hh:mm:ss:ff, not '{options.ReelDuration}'."); + } + + writer.ContainerDuration = frames; + } + + AtomicFileWriter.Write(filePath, stream => writer.Write(stream, xml)); + } + private static bool IsDCinemaTextFormat(SubtitleFormat? format) => format is DCinemaInterop or DCinemaSmpte2007 or DCinemaSmpte2010 or DCinemaSmpte2014; @@ -575,6 +649,11 @@ private static bool IsDCinemaTextFormat(SubtitleFormat? format) => /// was D-Cinema (its loaded title is kept). /// private static void SaveWithFreshDCinemaIdentity(Subtitle subtitle, string filePath, SubtitleFormat format, string? encodingName, SubtitleFormat? sourceFormat) + { + WithFreshDCinemaIdentity(subtitle, sourceFormat, () => SaveTextFormat(subtitle, filePath, format, encodingName)); + } + + private static void WithFreshDCinemaIdentity(Subtitle subtitle, SubtitleFormat? sourceFormat, Action save) { var ss = Configuration.Settings.SubtitleSettings; var oldId = ss.CurrentDCinemaSubtitleId; @@ -587,7 +666,7 @@ private static void SaveWithFreshDCinemaIdentity(Subtitle subtitle, string fileP ss.CurrentDCinemaMovieTitle = string.Empty; } - SaveTextFormat(subtitle, filePath, format, encodingName); + save(); } finally { @@ -1212,6 +1291,11 @@ public static string GetExtensionForFormat(string formatName) return ".txt"; } + if (IsDCinemaSmpte2014Mxf(normalized)) + { + return ".mxf"; + } + var imageHandler = ImageOutputWriter.TryCreateHandler(normalized); if (imageHandler is not null) { @@ -1254,6 +1338,8 @@ public static string NormalizeFormatName(string formatName) "fcp" or "fcpimage" => "FCP/image", "dcinemainterop" or "dcinema-interop" => "D-Cinema interop/png", "dcinemasmpte2014" or "dcinema-smpte" => "D-Cinema SMPTE 2014/png", + "dcinemasmpte2014mxf" or "dcinema-smpte-mxf" => DCinemaSmpte2014MxfName, + "dcinemasmpte2014pngmxf" or "dcinema-smpte-png-mxf" => ImageOutputWriter.DCinemaSmpte2014PngMxfName, "imageswithtimecode" or "imagesintc" => "Images with time codes in file name", "webvttthumbnail" or "webvtt-thumbnail" or "vttthumb" => "WebVTT Thumbnail", "plaintext" or "text" or "txt" => "Plain text", diff --git a/src/seconv/Core/LlamaCppOcrEngine.cs b/src/seconv/Core/LlamaCppOcrEngine.cs index b1ba726ec44..d33442dff92 100644 --- a/src/seconv/Core/LlamaCppOcrEngine.cs +++ b/src/seconv/Core/LlamaCppOcrEngine.cs @@ -68,7 +68,7 @@ public static LlamaCppOcrEngine Create(ConversionOptions options) : url.TrimEnd('/') + "/v1/chat/completions"; var modelName = string.IsNullOrWhiteSpace(options.OcrModel) ? "glmocr" - : Path.GetFileNameWithoutExtension(options.OcrModel.Trim()); + : ModelStem(options.OcrModel); // Only for the prompt: a curated model named by file/stem still gets its own tuned // prompt against a user-managed server. The engine itself stays in URL mode. var curated = LlamaCppServerManager.OcrModels.FirstOrDefault(m => @@ -82,6 +82,20 @@ public static LlamaCppOcrEngine Create(ConversionOptions options) return new LlamaCppOcrEngine(null, model, Path.GetFileNameWithoutExtension(model.FileName), options.OcrLanguage, options.OcrPrompt, options.Quiet); } + /// + /// The model name for a user-managed server: the file name without a trailing .gguf, + /// the form the curated lookups (padding, prompt) match on. Only .gguf is stripped - + /// would cut "LightOnOCR-3-0.8B-Q8_0" + /// to "LightOnOCR-3-0", so the model lost its border padding and was sent the square. + /// + internal static string ModelStem(string model) + { + var fileName = Path.GetFileName(model.Trim()); + return fileName.EndsWith(".gguf", StringComparison.OrdinalIgnoreCase) + ? fileName[..^".gguf".Length] + : fileName; + } + public string Recognize(SKBitmap bitmap) { if (bitmap is null || bitmap.Width == 0 || bitmap.Height == 0) @@ -103,7 +117,7 @@ public string Recognize(SKBitmap bitmap) url = LlamaCppServerManager.ApiUrl; } - using var padded = PadToSquare(bitmap); + using var padded = AiOcrImagePadding.Pad(bitmap, LlamaCppServerManager.GetOcrPadding(_modelName)); using var image = SKImage.FromBitmap(padded); using var data = image.Encode(SKEncodedImageFormat.Png, 90); var base64 = Convert.ToBase64String(data.ToArray()); @@ -129,7 +143,7 @@ public string Recognize(SKBitmap bitmap) var contents = parser.GetAllTagsByNameAsStrings(json, "content"); var text = string.Join(string.Empty, contents).Trim(); text = text.Replace("\\n", Environment.NewLine).Replace("\\\"", "\""); - return text.Trim(); + return OcrHelper.TrimAiOcrLines(text); } /// @@ -202,20 +216,5 @@ internal static LlamaCppModel ResolveOcrModel(string? requestedModel) private static string Escape(string s) => s.Replace("\\", "\\\\").Replace("\"", "\\\"").Replace("\n", "\\n").Replace("\r", "\\r"); - private static SKBitmap PadToSquare(SKBitmap source) - { - var margin = (int)(Math.Max(source.Width, source.Height) * 0.2); - var side = Math.Max(source.Width, source.Height) + margin; - var info = new SKImageInfo(side, side, SKColorType.Rgba8888, SKAlphaType.Opaque); - var square = new SKBitmap(info); - using var canvas = new SKCanvas(square); - canvas.Clear(SKColors.Black); - var left = (side - source.Width) / 2f; - var top = (side - source.Height) / 2f; - canvas.DrawBitmap(source, new SKRect(left, top, left + source.Width, top + source.Height)); - canvas.Flush(); - return square; - } - public void Dispose() => _httpClient.Dispose(); } diff --git a/src/seconv/Core/NOcrOcrEngine.cs b/src/seconv/Core/NOcrOcrEngine.cs index 7e2de19e4b9..a742e8105e3 100644 --- a/src/seconv/Core/NOcrOcrEngine.cs +++ b/src/seconv/Core/NOcrOcrEngine.cs @@ -15,7 +15,7 @@ internal sealed class NOcrOcrEngine : IOcrEngine private readonly NOcrDb _db; private readonly NOcrCaseFixer _caseFixer = new(); private const int MaxWrongPixels = 25; - private const int PixelsAreSpaceDefault = 12; + private readonly NOcrSpaceDetector _spaceDetector = new(); public NOcrOcrEngine(string nOcrDbPath) { @@ -40,12 +40,13 @@ public string Recognize(SKBitmap bitmap) } var parent = new NikseBitmap2(bitmap); - parent.MakeTwoColor(200); + parent.MakeTwoColor(OcrTwoColorThreshold.Get(parent)); parent.CropTop(0, new SKColor(0, 0, 0, 0)); var letters = NikseBitmapImageSplitter2.SplitBitmapToLettersNew( - parent, PixelsAreSpaceDefault, rightToLeft: false, topToBottom: true, + parent, NOcrSpaceDetector.SplitPixelsAreSpace, rightToLeft: false, topToBottom: true, _lineHeightTracker.GetMinLineHeight(), autoHeight: true, _lineHeightTracker.GetAverageLineHeight()); _lineHeightTracker.Update(letters); + letters = _spaceDetector.RemoveFalseSpaces(letters, out _); var matches = new List(); var i = 0; diff --git a/src/seconv/Core/SubtitleConverter.cs b/src/seconv/Core/SubtitleConverter.cs index e21b93c0e1a..2492dac4523 100644 --- a/src/seconv/Core/SubtitleConverter.cs +++ b/src/seconv/Core/SubtitleConverter.cs @@ -1377,6 +1377,12 @@ internal record class ConversionOptions /// PAC code page for lines in another script, written flagged as "secondary code page". public int? PacSecondaryCodePage { get; init; } public string? EbuHeaderFile { get; init; } + + /// Font embedded in D-Cinema SMPTE 2014 MXF (text) output. + public string? DCinemaFontFile { get; init; } + + /// D-Cinema MXF output: reel length as hh:mm:ss:ff, null = until the last subtitle. + public string? ReelDuration { get; init; } public string? MultipleReplaceFile { get; init; } public string? CustomFormatFile { get; init; } public IReadOnlyList TrackNumbers { get; init; } = []; diff --git a/src/seconv/Helpers/CliSchema.cs b/src/seconv/Helpers/CliSchema.cs index 6425a7ef4d7..fe501bc4145 100644 --- a/src/seconv/Helpers/CliSchema.cs +++ b/src/seconv/Helpers/CliSchema.cs @@ -374,6 +374,7 @@ public static string ToJson() new { name = "dump-settings", json = true, description = "Print a full --settings JSON with libse defaults. Always JSON; redirect to a file." }, new { name = "info", json = true, description = "Print format / encoding / duration / language for one file. Usage: seconv info " }, new { name = "lint", json = true, description = "Validate subtitles; exit 1 if any issues found. Usage: seconv lint ..." }, + new { name = "optimize-nocr", json = true, description = "Remove nOCR database lines that don't tell characters apart from lookalikes (smaller, faster, usually more accurate). In place with a .bak backup unless --output:. Usage: seconv optimize-nocr " }, new { name = "--help-json", json = true, description = "Print this schema." }, new { name = "--version", json = false, description = "Print the seconv version and exit." }, }, diff --git a/src/seconv/Helpers/HelpDisplay.cs b/src/seconv/Helpers/HelpDisplay.cs index 1e0bbc1ac9a..d8e2cefdcc2 100644 --- a/src/seconv/Helpers/HelpDisplay.cs +++ b/src/seconv/Helpers/HelpDisplay.cs @@ -1,4 +1,4 @@ -using Spectre.Console; +using Spectre.Console; namespace SeConv.Helpers; @@ -42,6 +42,7 @@ private static void ShowHelp(IAnsiConsole console) ShowParameter(console, "--adjust-duration:", "Adjust duration in milliseconds"); ShowParameter(console, "--assa-style-file:", "ASSA style file"); ShowParameter(console, "--change-speed:", "Change speed by percent (e.g. 125 = 1.25x faster)"); + ShowParameter(console, "--dcinema-font:", "Font (.ttf/.otf) embedded in dcinemasmpte2014mxf output"); ShowParameter(console, "--ebu-header-file:", "EBU header file"); ShowParameter(console, "--encoding:", "Character encoding (e.g., utf-8, windows-1252, or 'source' to keep the input file's encoding)"); ShowParameter(console, "--input-encoding-fallback:", "Assumed input encoding when no BOM and not UTF-8 (skips ANSI guess)"); @@ -58,6 +59,7 @@ private static void ShowHelp(IAnsiConsole console) ShowParameter(console, "--pac-codepage:", "PAC code page"); ShowParameter(console, "--pac-secondary-codepage:", "PAC code page for lines in another script (e.g. Cyrillic lines in a Hebrew file)"); ShowParameter(console, "--profile:", "Profile name"); + ShowParameter(console, "--reel-duration:", "D-Cinema MXF output: reel (picture) length, which every asset of a DCP reel must have (default: until the last subtitle)"); ShowParameter(console, "--renumber:", "Renumber subtitles from this number"); ShowParameter(console, "--resolution:x", "Video resolution (e.g., 1920x1080)"); ShowParameter(console, "--target-fps:", "Target frame rate"); @@ -168,6 +170,7 @@ private static void ShowHelp(IAnsiConsole console) ShowParameter(console, "dump-settings", "Print a full --settings JSON with libse defaults (redirect to a file)"); ShowParameter(console, "info ", "Print format / encoding / duration / language info"); ShowParameter(console, "lint ", "Validate subtitle(s); exit 1 if any issues found"); + ShowParameter(console, "optimize-nocr ", "Remove nOCR lines that don't tell characters apart (in place + .bak, or --output:)"); console.WriteLine(); ShowSection(console, "Examples", null); diff --git a/src/seconv/Program.cs b/src/seconv/Program.cs index f049344ebc8..c9591b10a93 100644 --- a/src/seconv/Program.cs +++ b/src/seconv/Program.cs @@ -1,4 +1,4 @@ -using Spectre.Console; +using Spectre.Console; using Spectre.Console.Cli; using SeConv.Commands; using SeConv.Core; @@ -30,6 +30,13 @@ static int Main(string[] args) // Encoding code pages and the headless EBU UI helper are wired by the // module initializer in SeConv.Core.Bootstrap. + // Before the convert-oriented rewrites below, which would read the database path as + // a positional format. + if (args.Length > 0 && args[0].TrimStart('/', '-').Equals("optimize-nocr", StringComparison.OrdinalIgnoreCase)) + { + return RunOptimizeNOcrCommand(args.Skip(1).ToArray()); + } + // Handle legacy /convert syntax and convert to modern syntax args = ConvertLegacyArguments(args); @@ -645,6 +652,124 @@ private static int RunLintCommand(string[] args) return hasError || reports.Any(r => r.Issues.Count > 0) ? 1 : 0; } + /// + /// Dispatches seconv optimize-nocr <database.nocr> [--output:<path>] [--json]: + /// removes the lines that don't tell characters apart from lookalikes (see + /// ). Without --output the + /// database is optimized in place and the original kept as <database.nocr>.bak. + /// + private static int RunOptimizeNOcrCommand(string[] args) + { + var json = HasJsonFlag(args); + string? output = null; + var positional = new List(); + for (var i = 0; i < args.Length; i++) + { + var arg = args[i]; + var name = arg.TrimStart('/', '-'); + + // Only "output" itself, optionally with :value or =value, so a Unix path like + // /outputs/Latin.nocr stays the input file. + var rest = name.StartsWith("output", StringComparison.OrdinalIgnoreCase) ? name.Substring("output".Length) : null; + var isOutputOption = rest != null && (rest.Length == 0 || rest[0] is ':' or '=') && + (LooksLikeOption(arg) || arg.StartsWith("/output", StringComparison.OrdinalIgnoreCase)); + if (isOutputOption) + { + if (rest!.Length > 0) + { + output = rest.Substring(1); + } + else + { + // A bare --output with no value is an error, not "optimize in place". + output = i + 1 < args.Length ? args[++i] : string.Empty; + } + + continue; + } + + if (!LooksLikeOption(arg) && !arg.Equals("/json", StringComparison.OrdinalIgnoreCase)) + { + positional.Add(arg); + } + } + + if (positional.Count != 1 || output == string.Empty) + { + const string usage = "Usage: seconv optimize-nocr [--output:] [--json]"; + if (json) + { + Console.Error.WriteLine($"{{\"error\": {JsonOut.Serialize("'seconv optimize-nocr' requires exactly one .nocr file. " + usage)}}}"); + } + else + { + AnsiConsole.MarkupLine("[red]Error: 'seconv optimize-nocr' requires exactly one .nocr file.[/]"); + AnsiConsole.MarkupLine($"[dim]{Markup.Escape(usage)}[/]"); + } + + return 1; + } + + var input = positional[0]; + try + { + if (!File.Exists(input)) + { + throw new FileNotFoundException($"nOCR database not found: {input}", input); + } + + var stopwatch = System.Diagnostics.Stopwatch.StartNew(); + var db = new Nikse.SubtitleEdit.UiLogic.Ocr.NOcrDb(input); + var result = Nikse.SubtitleEdit.UiLogic.Ocr.NOcrDbOptimizer.Optimize(db, new Nikse.SubtitleEdit.UiLogic.Ocr.NOcrDbOptimizerSettings())!; + + string? backup = null; + if (output == null) + { + backup = Nikse.SubtitleEdit.UiLogic.Ocr.NOcrDbOptimizer.GetFreeBackupFileName(input); + File.Copy(input, backup, false); + output = input; + } + + new Nikse.SubtitleEdit.UiLogic.Ocr.NOcrDb(db, output).Save(); + + if (json) + { + JsonOut.Write(new + { + success = true, + input, + output, + backup, + entries = result.Entries, + linesBefore = result.LinesBefore, + linesAfter = result.LinesAfter, + fonts = result.FontsUsed, + elapsedMs = stopwatch.ElapsedMilliseconds, + }); + } + else + { + AnsiConsole.MarkupLineInterpolated($"[green]Optimized {input}[/]: {result.LinesBefore:#,##0} -> {result.LinesAfter:#,##0} lines in {result.Entries:#,##0} characters ({stopwatch.Elapsed.TotalSeconds:0.0} s)"); + AnsiConsole.MarkupLineInterpolated($"[dim]Saved to {output}{(backup != null ? $", original kept as {backup}" : string.Empty)}. Fonts: {string.Join(", ", result.FontsUsed)}[/]"); + } + + return 0; + } + catch (Exception ex) + { + if (json) + { + Console.Error.WriteLine($"{{\"error\": {System.Text.Json.JsonSerializer.Serialize(ex.Message)}}}"); + } + else + { + AnsiConsole.MarkupLineInterpolated($"[red]Error: {ex.Message}[/]"); + } + + return 1; + } + } + private static bool HasJsonFlag(string[] args) => args.Any(a => a.Equals("--json", StringComparison.OrdinalIgnoreCase) || diff --git a/src/ui/Assets/Languages/Arabic.json b/src/ui/Assets/Languages/Arabic.json index c953db993de..99000da9185 100644 --- a/src/ui/Assets/Languages/Arabic.json +++ b/src/ui/Assets/Languages/Arabic.json @@ -1,12 +1,71 @@ { "title": "العربية", - "version": "v5.2.0-rc7", + "version": "v5.3.0", "translatedBy": "", "cultureName": "ar", "general": { + "prompt": "المطالبة", + "temperature": "درجة الحرارة", + "preset": "الإعداد المسبق", + "output": "الإخراج", + "outputFormat": "تنسيق الإخراج", + "other": "أخرى", + "timeCodeFormat": "تنسيق الرمز الزمني", + "topBottomMargin": "الهامش العلوي/السفلي", + "theme": "السمة", + "brightness": "السطوع", + "chooseColor": "اختيار اللون", + "lineX": "السطر {0}", + "playLine": "تشغيل السطر", + "maxLineLength": "الحد الأقصى لطول السطر", + "maxCharsPerSec": "الحد الأقصى حرف/ثانية", + "maxNumberOfLines": "الحد الأقصى لعدد الأسطر", + "subtitles": "الترجمات", + "shotChanges": "تغييرات اللقطات", + "chapters": "الفصول", + "audio": "الصوت", + "interjections": "التعجّبات", + "blankLines": "أسطر فارغة", + "editWholeText": "تحرير النص بالكامل", + "noTextInClipboard": "لا يوجد نص في الحافظة", + "noSubtitlesFoundTitle": "لم يُعثر على ترجمة", + "replacedXOccurrences": "تم استبدال {0} من التكرارات", + "invalidRegularExpressionX": "تعبير نمطي غير صالح: {0}", + "discardChangesTitle": "تجاهل التغييرات؟", + "downloadingXDotDotDot": "جارٍ تنزيل {0}...", + "importTimeCodesDotDotDot": "استيراد الرموز الزمنية...", + "original": "الأصلي", + "nextChange": "التغيير التالي", + "previousChange": "التغيير السابق", + "changeXOfY": "التغيير {0} من {1}", + "tooLong": "طويل جداً", + "tooShort": "قصير جداً", + "overlapping": "متداخل", + "detail": "التفصيل", + "fixOcrErrors": "إصلاح أخطاء التعرف الضوئي على الحروف", + "runningOcrXY": "جارٍ تشغيل OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "يتطلب llama.cpp تنزيل محرك llama-server. هل تريد التنزيل الآن؟", "abort": "إجهاض", "actor": "الممثل", "actors": "الممثلون", + "setActorDotDotDot": "تعيين الممثل...", + "actorPickerTitle": "تعيين الممثل", + "actorPickerFilterHint": "اكتب للتصفية، أو اكتب اسم ممثل جديد", + "actorPickerKeysHint": "اضغط رقمًا أو Enter لتعيين الممثل. Alt+أعلى/أسفل يغيّر الترتيب، وDelete يزيل الممثل.", + "actorPickerNewActorX": "ممثل جديد \"{0}\"", + "actorPickerLinesSelectedX": "الأسطر المحددة: {0}", + "setStyleDotDotDot": "تعيين النمط...", + "stylePickerTitle": "تعيين النمط", + "stylePickerFilterHint": "اكتب للتصفية، أو اكتب اسم نمط جديد", + "stylePickerKeysHint": "اضغط رقمًا (1-9، 0) لتعيين النمط على جميع الأسطر المحددة.", + "stylePickerNewStyleX": "نمط جديد \"{0}\"", + "stylePickerNewStyleInfo": "اضغط Enter لإضافة هذا النمط بالإعدادات الافتراضية وتعيينه على الأسطر المحددة. استخدم \"إدارة الأنماط...\" لتغيير خطه وألوانه وموضعه لاحقًا.", + "stylePickerCurrentStyleX": "النمط الحالي: {0}", + "stylePickerLinesUsingStyleX": "الأسطر التي تستخدم هذا النمط: {0}", + "stylePickerMarginsXYZ": "يسار {0}، يمين {1}، عمودي {2}", + "stylePickerSetStyle": "_تعيين النمط", + "stylePickerManageStyles": "إدارة الأنماط...", + "stylePickerManageStylesHint": "إغلاق هذه النافذة وفتح مدير الأنماط لتحرير الخطوط والألوان والموضع والمزيد", "add": "إضافة", "addDotDotDot": "إضافة...", "addToNamesListCaseSensitive": "إضافة إلى قائمة الأسماء (حساس لحالة الأحرف)", @@ -15,7 +74,6 @@ "adjustAlpha": "ضبط ألفا (الشفافية)", "adjustDisplayDuration": "ضبط مدة العرض", "adjustment": "الضبط", - "advanced": "متقدم", "advancedSettings": "الإعدادات المتقدمة", "after": "بعد", "alignment": "المحاذاة", @@ -60,7 +118,6 @@ "bdnXml": "BDN/xml", "bdnXml8Bit": "BDN/xml 8-bit", "before": "قبل", - "beforeX": "قبل \"{0}\"", "beginning": "البداية", "bluRaySup": "Blu-ray (sup)", "bold": "عريض", @@ -72,7 +129,6 @@ "bookmarkEdit": "تحرير العلامة المرجعية", "bookmarkEditForSelectedLinesX": "تحرير العلامة المرجعية لـ {0} من الأسطر المحددة", "bookmarksList": "سرد العلامات المرجعية", - "borderColor": "لون الحدود", "borderStyle": "نمط الحدود", "bottomCenter": "أسفل، وسط", "bottomLeft": "أسفل، يسار", @@ -99,7 +155,6 @@ "changeCasing": "تغيير حالة الأحرف", "changeFormatting": "تغيير التنسيق", "changeFrameRate": "تغيير معدل الإطارات", - "changeLanguageFilter": "تغيير عامل تصفية اللغة...", "changeOnce": "تغيير مرة واحدة", "changeSpeed": "تغيير السرعة", "character": "الحرف", @@ -141,7 +196,6 @@ "conversionCancelledByUser": "أُلغي التحويل من قبل المستخدم", "convert": "تحويل", "converted": "حُوِّل", - "convertingDotDotDot": "جارٍ التحويل...", "convertingXofYDotDoDot": "جارٍ تحويل {0:#,###,##0}/{1:#,###,##0}...", "copy": "نسخ", "copyImageToClipboard": "نسخ الصورة إلى الحافظة", @@ -152,7 +206,6 @@ "couldNotOpenFileXErrorY": "تعذر فتح الملف \"{0}\". خطأ: {1}", "count": "العدد", "cps": "حرف/ثانية", - "currentSubtitle": "الترجمة الحالية", "cudaRuntime": "وقت تشغيل CUDA", "currentVideoPosition": "موضع الفيديو الحالي", "custom": "مخصص", @@ -212,7 +265,6 @@ "expand": "توسيع", "export": "تصدير", "exportDotDotDot": "تصدير...", - "exportToX": "تصدير إلى {0}", "extendAfter": "تمديد/تقصير إلى السطر التالي", "extendBefore": "تمديد/تقصير إلى السطر السابق", "extendSelectedLinesToNextShotChangeOrNextSubtitle": "تمديد الأسطر المحددة إلى تغيير اللقطة التالي (أو الترجمة التالية)", @@ -229,7 +281,6 @@ "fileExtension": "امتداد الملف", "fileName": "اسم الملف", "fileNameX": "اسم الملف: {0}", - "fileNameXAndSize": "اسم الملف: {0} ({1})", "fileSaved": "حُفِظ الملف", "fileSavedToX": "حُفِظ الملف في {0}", "fileXAlreadyExists": "الملف \"{0}\" موجود بالفعل.", @@ -239,8 +290,6 @@ "find": "بحث", "findNext": "البحث عن التالي", "findTextX": "البحث عن نص - {0}", - "fiveHundredMilliseconds": "500 ms", - "fiveSeconds": "خمس ثوانٍ", "fix": "إصلاح", "fixCommonErrors": "إصلاح الأخطاء الشائعة", "fixRightToLeft": "إصلاح الاتجاه من اليمين إلى اليسار", @@ -264,14 +313,12 @@ "foundXInLineYZ": "عُثر على \"{0}\" في السطر {1}، الموضع {2}", "foundXMatches": "عُثر على {0} تطابق", "frameRate": "معدل الإطارات", - "frameRateX": "معدل الإطارات: {0:0.0###}", "frames": "الإطارات", "from": "من", "fromCurrentVideoPosition": "من موضع الفيديو الحالي", "fullScreen": "ملء الشاشة", "gap": "الفجوة", "general": "عام", - "generalText": "عام", "generate": "توليد", "generateImportShotChanges": "توليد/استيراد تغييرات اللقطات", "generating": "جارٍ التوليد...", @@ -289,12 +336,8 @@ "help": "مساعدة", "hex": "ست عشري", "hide": "إخفاء", - "hidePreview": "إخفاء المعاينة", "history": "السجل", "horizontal": "أفقي", - "hourMinutesSecondsDecimalSeparatorMilliseconds": "ساعة:دقيقة:ثانية{0}ms", - "hourMinutesSecondsFrames": "ساعة:دقيقة:ثانية:إطارات", - "ip": "IP", "id": "ID", "image": "الصورة", "imageSaved": "حُفِظت الصورة", @@ -355,6 +398,7 @@ "mergeSelectedLinesDialog": "دمج الأسطر المحددة كحوار", "mergeWithLineAfterAndAutoBreak": "دمج مع السطر التالي مع الكسر التلقائي", "mergeWithLineAfterKeepBreaks": "دمج مع السطر التالي (مع الاحتفاظ بالكسور)", + "mergeWithLineAfterAndUnbreak": "الدمج مع السطر التالي وإلغاء فواصل الأسطر", "mergeWithLineBeforeAndAutoBreak": "دمج مع السطر السابق مع الكسر التلقائي", "mergeWithLineBeforeKeepBreaks": "دمج مع السطر السابق (مع الاحتفاظ بالكسور)", "middleCenter": "وسط، وسط", @@ -369,13 +413,13 @@ "moveAllShotChangeOneFrameForward": "تحريك كل تغييرات اللقطات إطاراً واحداً للأمام", "multiMode": "الوضع المتعدد", "moveDown": "تحريك لأسفل", + "increase": "زيادة", + "decrease": "إنقاص", "moveUp": "تحريك لأعلى", "moveToTop": "نقل إلى الأعلى", "moveToBottom": "نقل إلى الأسفل", "multipleReplace": "استبدال متعدد", - "mute": "كتم", "name": "الاسم", - "negative": "سالب", "new": "جديد", "newDotDotDot": "جديد...", "newProfile": "ملف تعريف جديد", @@ -405,20 +449,15 @@ "offsetY": "الإزاحة Y", "ok": "_موافق", "oneFile": "ملف واحد", - "oneHundredMilliseconds": "100 ms", - "oneSecond": "ثانية واحدة", "oneSecondBack": "ثانية واحدة للخلف", "oneSecondForward": "ثانية واحدة للأمام", - "onlineVideoFeatureNotAvailable": "الميزة غير متوفرة للفيديو عبر الإنترنت", "openContainingFolder": "فتح المجلد المحتوي", "openDictionaryFolder": "فتح مجلد القاموس", "openFile": "فتح ملف", "openImageBasedSubtitle": "فتح ترجمة قائمة على الصور", "openImageFile": "فتح ملف صورة", - "openOriginalSubtitleFile": "فتح ملف الترجمة الأصلية...", "openOriginalSubtitleFileTitle": "فتح ملف الترجمة الأصلية", "openOutputFolder": "فتح مجلد الإخراج", - "openSubtitle": "فتح ترجمة...", "openSubtitleFileTitle": "فتح ملف الترجمة", "openSubtitles": "فتح ترجمات...", "openVideoFile": "فتح ملف فيديو...", @@ -433,11 +472,6 @@ "outlineWidth": "عرض المخطط الخارجي", "outputFolder": "مجلد الإخراج", "outputProperties": "خصائص الإخراج", - "overlap": "التداخل", - "overlapNextX": "تداخل التالي ({0:#;##0.###})", - "overlapPreviousLineX": "تداخل السطر السابق ({0:#;##0.###})", - "overlapStartAndEnd": "تداخل البداية والنهاية", - "overlapX": "تداخل ({0:#;##0.###})", "overwriteExistingFiles": "الكتابة فوق الملفات الموجودة", "overwriteFilesInFolderX": "الكتابة فوق الملفات في المجلد: \"{0}\"", "overwriteQuestion": "الكتابة فوق الملف؟", @@ -450,6 +484,7 @@ "percent": "النسبة المئوية", "pickLayer": "تعيين الطبقة", "pickOllamaModel": "اختيار نموذج Ollama", + "pickModel": "اختيار النموذج", "llamaCppUseRemoteServer": "استخدام خادم خارجي (URL)", "llamaCppEngineSettings": "إعدادات محرك llama.cpp", "llamaCppEngineSettingsSubtitle": "إصدار خادم llama.cpp المحلي", @@ -501,7 +536,6 @@ "refresh": "تحديث", "region": "المنطقة", "regularExpression": "التعبير النمطي", - "regularExpressionIsNotValid": "التعبير النمطي غير صالح!", "relativeToCurrentVideoPosition": "بالنسبة إلى موضع الفيديو الحالي", "remove": "إزالة", "removeAlignment": "إزالة المحاذاة", @@ -527,7 +561,7 @@ "reset": "إعادة تعيين", "resizePanels": "تغيير حجم اللوحات", "resolution": "الدقة", - "resolutionX": "الدقة: {0}", + "retry": "إعادة المحاولة", "reverseRightToLeftStartEnd": "عكس بداية/نهاية الكتابة من اليمين إلى اليسار", "right": "يمين", "rightToLeft": "من اليمين إلى اليسار", @@ -567,8 +601,6 @@ "selectedlinesX": "الأسطر المحددة: {0}", "sensitivity": "الحساسية", "separator": "الفاصل", - "sessionKey": "مفتاح الجلسة", - "sessionKeyGenerate": "توليد مفتاح جديد", "setEnd": "تعيين النهاية", "setEndAndGoToNext": "تعيين النهاية والانتقال إلى التالي", "setEndAddNewAndGoToNew": "تعيين النهاية وإضافة سطر جديد والانتقال إليه", @@ -591,8 +623,9 @@ "shadowColor": "لون الظل", "shadowWidth": "عرض الظل", "shiftLineBy": "إزاحة السطر بمقدار", + "shotIn": "بداية اللقطة", + "shotOut": "نهاية اللقطة", "shortcut": "الاختصار", - "shortcutX": "الاختصار: {0}", "shortcuts": "الاختصارات", "show": "الظهور", "showActorColumn": "إظهار عمود \"الممثل\"", @@ -603,17 +636,19 @@ "showStartColumn": "إظهار عمود \"البداية\"", "showHideColumn": "إظهار عمود \"الإخفاء\"", "showHistory": "إظهار السجل", + "clearHistory": "مسح السجل", + "removeFromHistory": "إزالة من السجل", "showLayerColumn": "إظهار عمود \"الطبقة\"", "showPreview": "إظهار المعاينة", "showShotChangesList": "إظهار قائمة تغييرات اللقطات", + "showShotInColumn": "إظهار عمود \"بداية اللقطة\"", + "showShotOutColumn": "إظهار عمود \"نهاية اللقطة\"", "showStyleColumn": "إظهار عمود \"النمط\"", "showTeletext": "إظهار عمود التلتكست في عرض القائمة", "showTimeCodes": "إظهار الرموز الزمنية", "showWpmColumn": "إظهار عمود \"كلمة/دقيقة\"", "showPixelWidthColumn": "إظهار عمود \"عرض البكسل\"", "shrink": "تصغير", - "singleBox": "مربع واحد", - "singleLineLengths": "طول السطر الواحد:", "singleMode": "الوضع الفردي", "textTotalLength": "النص - الطول الإجمالي", "textSingleLineMaxLength": "النص - الحد الأقصى لطول السطر الواحد", @@ -662,16 +697,16 @@ "strikeout": "يتوسطه خط", "style": "النمط", "styleExaggeration": "مبالغة النمط", - "styleLanguage": "النمط / اللغة", "styles": "الأنماط", "subtitleFile": "ملف الترجمة", + "subtitleFileChangedOutsideX": "تم تغيير الملف \"{0}\" خارج Subtitle Edit.\n\nهل تريد إعادة تحميله وفقدان تغييراتك؟", "subtitleFileName": "اسم ملف الترجمة", "subtitleFileSaved": "تم حفظ ملف الترجمة", "subtitleFileSavedToX": "تم حفظ ملف الترجمة في {0}", "subtitleFiles": "ملفات الترجمة", "subtitleFormats": "صيغ الترجمة", "subtitleLoadedX": "تم تحميل الترجمة: {0}", - "subtitleXOfY": "الترجمة {0} من {1}", + "subtitleReloadedChangedOutsideX": "تمت إعادة تحميل الترجمة (تم تغييرها خارج Subtitle Edit): {0}", "suffix": "اللاحقة", "suggestions": "الاقتراحات", "sync": "المزامنة", @@ -683,7 +718,6 @@ "teletextColor": "لون التلتكست", "teletextLine": "سطر التلتكست", "tenHours": "10 ساعات", - "tenMilliseconds": "10 مللي ثانية", "text": "النص", "textColor": "لون النص", "textFiles": "الملفات النصية", @@ -710,9 +744,6 @@ "topRight": "أعلى-يمين", "top": "أعلى", "totalAdjustmentX": "إجمالي التعديل: {0}", - "totalFramesX": "إجمالي الإطارات: {0:#;##0.##}", - "totalLengthX": "الطول الإجمالي: {0}", - "totalLengthXSplitLine": "الطول الإجمالي: {0} (تقسيم السطر!)", "translate": "ترجمة", "translatePercentX": "جارٍ الترجمة: {0}%", "translateRow": "ترجمة الصف", @@ -721,6 +752,7 @@ "type": "النوع", "unbreak": "إلغاء فصل النص", "unbreakLines": "إلغاء فصل الأسطر", + "undelete": "استعادة المحذوف", "underline": "تسطير", "undo": "تراجع", "unknown": "غير معروف", @@ -740,13 +772,11 @@ "usages": "الاستخدامات", "use": "استخدام", "useAlways": "الاستخدام دائمًا", - "useLargerFontForThisWindow": "استخدام خط أكبر لهذه النافذة", "useOnce": "الاستخدام مرة واحدة", "useOutputFolder": "استخدام مجلد الإخراج", "useSourceFolder": "استخدام المجلد المصدر", "useSourceResolution": "استخدام دقة المصدر", "userName": "اسم المستخدم", - "userNameAlreadyInUse": "اسم المستخدم مستخدم بالفعل", "vertical": "عمودي", "video100MsBack": "الفيديو، 100 مللي ثانية للخلف", "video100MsForward": "الفيديو، 100 مللي ثانية للأمام", @@ -760,14 +790,25 @@ "videoCustom3ForwardX": "الفيديو، مللي ثانية مخصصة ({0:#,###,##0}) للأمام، 3", "videoCustom4BackX": "الفيديو، مللي ثانية مخصصة ({0:#,###,##0}) للخلف، 4", "videoCustom4ForwardX": "الفيديو، مللي ثانية مخصصة ({0:#,###,##0}) للأمام، 4", - "videoEncodingX": "ترميز الفيديو: {0}", + "videoCustom1BackAndPauseX": "الفيديو، أجزاء من الثانية مخصصة ({0:#,###,##0}) للخلف ثم إيقاف مؤقت، 1", + "videoCustom1ForwardAndPauseX": "الفيديو، أجزاء من الثانية مخصصة ({0:#,###,##0}) للأمام ثم إيقاف مؤقت، 1", + "videoCustom2BackAndPauseX": "الفيديو، أجزاء من الثانية مخصصة ({0:#,###,##0}) للخلف ثم إيقاف مؤقت، 2", + "videoCustom2ForwardAndPauseX": "الفيديو، أجزاء من الثانية مخصصة ({0:#,###,##0}) للأمام ثم إيقاف مؤقت، 2", + "videoCustom3BackAndPauseX": "الفيديو، أجزاء من الثانية مخصصة ({0:#,###,##0}) للخلف ثم إيقاف مؤقت، 3", + "videoCustom3ForwardAndPauseX": "الفيديو، أجزاء من الثانية مخصصة ({0:#,###,##0}) للأمام ثم إيقاف مؤقت، 3", + "videoCustom4BackAndPauseX": "الفيديو، أجزاء من الثانية مخصصة ({0:#,###,##0}) للخلف ثم إيقاف مؤقت، 4", + "videoCustom4ForwardAndPauseX": "الفيديو، أجزاء من الثانية مخصصة ({0:#,###,##0}) للأمام ثم إيقاف مؤقت، 4", "videoExtension": "امتداد ملف الفيديو", "videoFile": "ملف الفيديو", "videoFileGenerated": "تم إنشاء ملف الفيديو", "videoFileGeneratedX": "تم إنشاء ملف الفيديو: \"{0}\"", + "videoFilesGenerated": "تم توليد ملفات الفيديو", + "xVideosGenerated": "تم توليد {0} من مقاطع الفيديو", + "xOfYVideosGenerated": "تم توليد {0} من {1} من مقاطع الفيديو", + "savedInX": "تم الحفظ في {0}", + "savedInXFolders": "تم الحفظ في {0} من المجلدات", "videoFiles": "ملفات الفيديو", "videoAndAudioFiles": "ملفات الفيديو والصوت", - "videoInformation": "معلومات الفيديو", "videoOffset": "إزاحة الفيديو", "videoOneFrameBack": "الفيديو، إطار واحد للخلف", "videoOneFrameForward": "الفيديو، إطار واحد للأمام", @@ -778,7 +819,6 @@ "videoPlayer": "مشغل الفيديو", "videoPosition": "موضع الفيديو", "videoResolution": "دقة الفيديو", - "viewX": "عرض {0}", "visible": "مرئي", "voice": "الصوت", "volume": "مستوى الصوت", @@ -787,9 +827,7 @@ "waveformCenterOnVideoPosition": "توسيط الموجة الصوتية على موضع الفيديو", "waveformPasteFromClipboard": "لصق من الحافظة", "waveformSpectrogram": "الموجة الصوتية/الطيف الترددي", - "webServiceUrl": "URL خدمة الويب", "width": "العرض", - "windowPositionAndSize": "موضع النافذة وحجمها", "wordsPerMin": "كلمة/دقيقة", "pixelWidth": "عرض البكسل", "wpm": "كلمة/دقيقة", @@ -803,8 +841,6 @@ "noBookmarksFound": "لم يُعثر على المزيد من العلامات المرجعية", "xRequiresAnApiKey": "{0} يتطلب مفتاح API", "xRequiresAValidUrl": "{0} يتطلب URL صالحًا (مثل \"http://...\" أو \"https://...\")", - "xSeconds": "{0:0.0##} ثانية", - "xSubtitles": "{0:#,###,##0} ترجمة", "yes": "نعم", "zeroBytes": "0 بايت", "copyToClipboard": "نسخ إلى الحافظة", @@ -826,10 +862,8 @@ "playbackSpeed": "سرعة التشغيل", "hoursMinutesSecondsMilliseconds": "HH:MM:SS.FFF", "imageFiles": "ملفات الصور", - "openAiCompatibleStt": "STT متوافق مع OpenAI", "openAiCompatibleSttEndpoint": "URL نقطة نهاية STT", "openAiCompatibleSttApiKey": "مفتاح API", - "openAiCompatibleSttModel": "النموذج", "openAiCompatibleSttExtraHeaders": "ترويسات إضافية", "openAiCompatibleSttTimeout": "المهلة (ثوانٍ)", "openAiCompatibleSttLanguage": "تلميح اللغة", @@ -839,6 +873,9 @@ "dashScopeSttRegion": "المنطقة", "dashScopeSttEnableWords": "طوابع زمنية على مستوى الكلمة", "dashScopeSttRegionKeyHint": "ملاحظة: مفاتيح API الخاصة بـ Alibaba Cloud Model Studio مرتبطة بالمنطقة، تأكد من أن المنطقة المحددة تطابق المنطقة التي أُنشئ فيها مفتاح API (الصين مقابل الدولية).", + "googleCloudSttProjectId": "معرّف المشروع (فقط لـ Application Default Credentials)", + "googleCloudSttBucketName": "حاوية التخزين (فارغ = تلقائي)", + "googleCloudSttDynamicBatching": "التجميع الديناميكي (أرخص بنحو 5 مرات، دون ضمان لزمن الاستجابة)", "onlineSttApiKeyMissing": "مفتاح API مطلوب. الرجاء إدخال مفتاح API والمحاولة مرة أخرى.", "openAiCompatibleSttAutoTranscribeOnAudioSelection": "التفريغ التلقائي لتحديد الموجة الصوتية الجديد عبر تحويل الكلام إلى نص", "openAiCompatibleSttStream": "بث الاستجابة", @@ -848,11 +885,9 @@ "configurationRequired": "التهيئة مطلوبة", "transcriptionError": "خطأ في التفريغ الصوتي", "transcriptionComplete": "اكتمل التفريغ الصوتي", - "transcribingWithOpenAi": "جارٍ التفريغ الصوتي باستخدام خدمة OpenAI...", "processingResponse": "جارٍ معالجة الاستجابة...", "unauthorizedApiKey": "غير مصرح: مفتاح API غير صالح أو أذونات غير كافية.", "requestTimeout": "انتهت مهلة الطلب: استغرق الخادم وقتًا طويلاً للاستجابة.", - "noSegmentsReturned": "لم تُرجع أي مقاطع من خدمة التفريغ الصوتي.", "openAiCompatibleSttUrlMissing": "URL نقطة نهاية STT المتوافقة مع OpenAI مطلوب. الرجاء إدخال URL والمحاولة مرة أخرى.", "openAiCompatibleSttUrlNotResponding": "لم تستجب نقطة نهاية STT المتوافقة مع OpenAI:\n{0}\n\nالرجاء التحقق من URL ومن أن الخادم قيد التشغيل.", "transcriptionFailed": "فشل التفريغ الصوتي", @@ -898,14 +933,15 @@ "multipleReplace": "استبدال _متعدد...", "fillSelectedLinesWithClipboard": "ملء الأسطر المحددة بنص الحافظة", "goToLineNumber": "الانت_قال إلى رقم السطر...", + "commandPalette": "_لوحة الأوامر...", "rightToLeftMode": "وضع اليم_ين إلى اليسار", "modifySelectionDotDotDot": "تعديل الت_حديد...", "tools": "أ_دوات", - "toolsSelectedLines": "أ_دوات (الأسطر المحددة)", "adjustDurations": "_ضبط المدد...", "applyDurationLimits": "تطبيق _حدود المدة...", "batchConvert": "تحويل د_فعات...", "beautifyTimeCodes": "تحسين الرموز الزمنية...", + "improveTimeCodes": "تحسين الرموز الزمنية (المحاذاة القسرية)...", "bridgeGaps": "جسر ال_فجوات بين الأسطر...", "applyMinGap": "تطبيق الحد الأدنى للفجوة بين الأسطر...", "changeCasing": "تغيير _حالة الأحرف...", @@ -1044,6 +1080,9 @@ "selectCurrentLineWhilePlayingHint": "تحديد السطر الحالي أثناء التشغيل {0}", "videoPosition": "موضع الفيديو {0}", "videoPositionTextBox": "مربع نص موضع الفيديو {0}", + "toolbarLineBreakX": "فاصل سطر {0} (يستمر باقي شريط الأدوات في صف جديد)", + "initialText": "النص الأولي للسطر المحدد", + "initialTextHint": "نص السطر المحدد كما كان عند تحديد السطر", "hideWaveformToolbar": "إخفاء شريط الأدوات {0}", "resetZoomAndSpeed": "إعادة تعيين التكبير وسرعة التشغيل {0}", "removeBlankLines": "إزالة الأسطر الفارغة {0}", @@ -1057,6 +1096,15 @@ "textPlayHint": "تشغيل الترجمة الحالية والتوقف عند النهاية {0}", "textPauseHint": "إيقاف التشغيل مؤقتًا {0}", "textNextHint": "تشغيل الترجمة التالية والتوقف عند النهاية {0}", + "moveSelectedLines": "نقل الأسطر المحددة (أزرار للخلف/للأمام)", + "moveSelectedLinesAndFollowing": "نقل الأسطر المحددة وكل ما يليها (أزرار للخلف/للأمام)", + "moveAllLines": "نقل جميع الأسطر (أزرار للخلف/للأمام)", + "moveSelectedLinesBackHint": "نقل الأسطر المحددة {0} مللي ثانية للخلف {1}", + "moveSelectedLinesForwardHint": "نقل الأسطر المحددة {0} مللي ثانية للأمام {1}", + "moveSelectedLinesAndFollowingBackHint": "نقل الأسطر المحددة وكل ما يليها {0} مللي ثانية للخلف {1}", + "moveSelectedLinesAndFollowingForwardHint": "نقل الأسطر المحددة وكل ما يليها {0} مللي ثانية للأمام {1}", + "moveAllLinesBackHint": "نقل جميع الأسطر {0} مللي ثانية للخلف {1}", + "moveAllLinesForwardHint": "نقل جميع الأسطر {0} مللي ثانية للأمام {1}", "guessStartNoLineSelected": "تخمين البداية: لم يُحدَّد أي سطر", "guessStartTimeCodesLocked": "تخمين البداية: الرموز الزمنية مقفلة", "guessStartNoWaveform": "تخمين البداية: لا يوجد مخطط موجي", @@ -1078,12 +1126,15 @@ "charactersPerSecond": "حرف/ثانية: {0}", "chooseColumn": "اختيار العمود", "columnPaste": "لصق في عمود", + "commandPaletteTitle": "لوحة الأوامر", + "commandPaletteSearchPlaceholder": "اكتب للبحث عن الأوامر...", + "commandPaletteNoCommandsFound": "لا توجد أوامر مطابقة", "createdEmptyTranslation": "أُنشئت ترجمة فارغة من الملف الحالي", "deleteText": "حذف النص", "deleteTextAndShiftCellsUp": "حذف النص وإزاحة الخلايا لأعلى", "endTimeMustBeAfterStartTime": "يجب أن يكون وقت النهاية بعد وقت البداية.", "errorLoad7Zip": "يبدو أن هذا الملف مضغوط بصيغة 7-Zip.\n\nلا يستطيع Subtitle Edit فتح الملفات المضغوطة.", - "errorLoadBinaryZeroes": "عذراً، هذا الملف لا يحتوي إلا على أصفار ثنائية!\n\nإذا كنت قد حررت هذا الملف باستخدام Subtitle Edit فقد تجد نسخة احتياطية عبر القائمة ملف -> استعادة النسخة الاحتياطية التلقائية...", + "errorLoadBinaryZeroes": "عذراً، هذا الملف لا يحتوي إلا على أصفار ثنائية!\n\nإذا كنت قد حررت هذا الملف باستخدام Subtitle Edit فقد تجد نسخة احتياطية عبر القائمة ملف -> استعادة النسخة الاحتياطية التلقائية...", "errorLoadGZip": "يبدو أن هذا الملف مضغوط بصيغة GZip.\n\nلا يستطيع Subtitle Edit فتح الملفات المضغوطة.", "errorLoadLargeFile": "هذا الملف أكبر من أن يُفتح كملف ترجمة.", "errorLoadVideoFilePrompt": "يبدو أن هذا الملف ملف فيديو:\n{0}\n\nيمكنك فتح فيديو عبر \"فيديو -> فتح فيديو\" أو بسحب الفيديو وإفلاته على مشغّل الفيديو.\n\nهل تريد فتحه كملف فيديو؟", @@ -1116,18 +1167,20 @@ "numberOfLinesEvenlyDistributedX": "وُزّع {0} من الأسطر بالتساوي", "oneLineCopiedFromOriginal": "نُسخ سطر واحد من الملف الأصلي", "oneLineCopiedToOriginal": "نُسخ سطر واحد إلى الترجمة الأصلية", + "onlineOnlyVideo": "فيديو متاح عبر الإنترنت فقط", + "onlineOnlyVideoXSizeYDownloadAndOpen": "ملف الفيديو \"{0}\" ({1}) مخزّن عبر الإنترنت فقط، على سبيل المثال في Dropbox أو iCloud Drive، ويجب تنزيله قبل أن يمكن فتحه.\n\nهل تريد تنزيله وفتحه الآن؟", "oneLineMerged": "دُمج سطر واحد", "oneLineSwitched": "بُدّل سطر واحد", "overwriteExistingCells": "الكتابة فوق الخلايا الموجودة", "overwriteOrShiftCellsDown": "الكتابة فوق الخلايا أو إزاحتها لأسفل", "parsingMatroskaFile": "جارٍ تحليل ملف Matroska...", + "readingDvdSubtitles": "جارٍ قراءة ترجمات DVD...", "pasteFromClipboardDotDotDot": "لصق من الحافظة...", "redoPerformed": "نُفّذت الإعادة", "redoPerformedXActionLeft": "نُفّذت الإعادة (الإجراءات المتبقية: {0})", "removedUnicodeControlCharactersX": "أُزيلت محارف يونيكود للتحكم من {0} من الأسطر", "removedXBlankLines": "أُزيل {0} من الأسطر الفارغة", "replacedXWithYCountZ": "استُبدل \"{0}\" بـ\"{1}\" ({2} من المواضع)", - "replacedXWithYInLineZ": "استُبدل \"{0}\" بـ\"{1}\" في السطر {2}", "reversedStartAndEndingsForRightToLeftX": "عُكست البدايات والنهايات لليمين إلى اليسار في {0} من الأسطر", "ruleProfileIsX": "ملف قواعد التحقق الآن \"{0}\"", "saveLanguageFile": "حفظ ملف اللغة", @@ -1135,7 +1188,6 @@ "shiftTextCellsDown": "إزاحة خلايا النص لأسفل", "singleLineLength": "طول السطر: ", "speedIsNowX": "السرعة الآن \"{0}\"", - "spellCheckResult": "اكتمل التدقيق الإملائي. \n\n• الكلمات المغيّرة: {0}\n• الكلمات المتخطاة: {1}", "subtitleGridFormattingX": "تنسيق قائمة الترجمة: {0}", "subtitleImportedFromMatroskaFile": "استُوردت الترجمة من ملف Matroska", "textDown": "النص لأسفل", @@ -1162,13 +1214,14 @@ "trimmedXLines": "شُذّب {0} من أسطر الترجمة", "pastedXLinesOverSelectedLines": "لُصق {0} من الأسطر فوق الأسطر المحددة", "pastedXOfYLinesOverSelectedLines": "لُصق {0} من أصل {1} سطر فوق الأسطر المحددة - لم يتسع الباقي للتحديد", + "insertedXLinesFromClipboard": "تم إدراج {0} سطر (أسطر) من الحافظة", "openOriginalDifferentNumberOfSubtitlesXY": "ملف الترجمة الأصلي لا يحتوي على نفس عدد الأسطر في ملف الترجمة الحالي.\n\n• أسطر الملف الأصلي: {0}\n• أسطر الملف الحالي: {1}", - "importXMatchingOriginalLines": "استيراد {0} من الأسطر الأصلية المتطابقة؟", "originalTextReadOnly": "النص الأصلي (للقراءة فقط)", "originalTextEditMode": "النص الأصلي (وضع التحرير)", "originalIsReadOnlyNotSaved": "الترجمة الأصلية مرجع للقراءة فقط ولم تُحفظ", "originalIsEmptyNotSaved": "الترجمة الأصلية لا تحتوي على أي نص ولم تُحفظ", "originalIsReadOnlyReference": "الترجمة الأصلية مفتوحة كمرجع للقراءة فقط", + "closeTranslationQuestionXY": "هل تريد إغلاق الترجمة \"{0}\"؟\n\nتصبح الترجمة الأصلية \"{1}\" هي الترجمة التي تحررها. لا يتم تغيير ملف الترجمة نفسه.", "allowEditOfOriginalSubtitle": "السماح بتحرير الترجمة الأصلية", "showAllOriginalLinesX": "إظهار كل الأسطر الأصلية ({0} بلا مطابق هنا)", "showAllOriginalLinesHint": "تظهر الأسطر التي لا مطابق لها كصفوف إضافية، لترى ما ينقص الترجمة.", @@ -1203,6 +1256,7 @@ "fileExportedInFormatXToY": "صُدّر الملف بصيغة {0} إلى {1}", "fileExportedInFormatXToFileY": "صُدّر الملف بصيغة \"{0}\" إلى الملف \"{1}\"", "fixedXLines": "أُصلح {0} من الأسطر", + "toolXChangedYLines": "{0}: تم تغيير {1} سطر", "transcriptionCompletedWithXLines": "اكتمل التفريغ الصوتي بعدد {0} من الأسطر", "openSubtitleFileX": "فتح ملف الترجمة \"{0}\"؟", "replacedXOccurrences": "استُبدل {0} من المواضع", @@ -1234,13 +1288,9 @@ "file": { "ebuSaveOptions": { "title": "خيارات حفظ EBU", - "generalSubtitleInformation": "معلومات عامة عن الترجمة", "codePageNumber": "رقم صفحة الترميز", "diskFormatCode": "رمز صيغة القرص", "displayStandardCode": "رمز معيار العرض", - "colorRequiresTeletext": "الألوان تتطلب التلتكست!", - "alignmentRequiresTeletext": "المحاذاة تتطلب التلتكست!", - "teletextCharsShouldBe38": "يجب أن يكون 'الحد الأقصى لعدد الأحرف في كل صف' للتلتكست 38!", "characterCodeTable": "جدول الأحرف", "languageCode": "رمز اللغة", "originalProgramTitle": "عنوان البرنامج الأصلي", @@ -1257,7 +1307,6 @@ "maxNumberOfDisplayableRows": "الحد الأقصى لعدد الصفوف", "diskSequenceNumber": "الرقم التسلسلي للقرص", "totalNumberOfDisks": "إجمالي عدد الأقراص", - "import": "استيراد...", "textAndTimingInformation": "معلومات النص والتوقيت", "justificationCode": "رمز المحاذاة", "verticalPosition": "الموضع العمودي", @@ -1274,11 +1323,6 @@ "errors": "الأخطاء", "errorsX": "الأخطاء: {0}", "maxLengthError": "السطر {0} يتجاوز الحد الأقصى للطول ({1}) بمقدار {2}: {3}", - "textUnchangedPresentation": "عرض دون تغيير", - "textLeftJustifiedText": "نص محاذى لليسار", - "textCenteredText": "نص موسّط", - "textRightJustifiedText": "نص محاذى لليمين", - "useBoxForOneNewLine": "حدد 'استخدام إطار حول النص' لسطر جديد واحد فقط", "maxLengthErrorTeletextColored": "السطر {0}-{1}: يجب أن يكون الحد الأقصى 36 حرفاً (لا {2}) للنص الملون مزدوج الارتفاع", "maxLengthErrorTeletextWhite": "السطر {0}-{1}: يجب أن يكون الحد الأقصى 37 حرفاً (لا {2}) للنص الأبيض مزدوج الارتفاع", "maxLengthErrorTeletextSingleHeight": "السطر {0}: يجب أن يكون الحد الأقصى 38 حرفاً (لا {1}) للنص الأبيض أحادي الارتفاع", @@ -1303,22 +1347,29 @@ "formattingDotDotDot": "التنسيق...", "imageBasedSubtitleForEditDotDotDot": "ترجمة قائمة على الصور للتحرير...", "imageBasedSubtitleForOcrDotDotDot": "ترجمة قائمة على الصور لـ OCR...", + "dvdSubtitlesDotDotDot": "ترجمات من DVD (IFO/VOB)...", + "titleImportDvd": "استيراد ترجمات من DVD", + "dvdIfoFile": "ملف IFO", + "dvdVobFiles": "ملفات VOB", + "dvdVideoStandard": "معيار الفيديو", + "dvdStartRipping": "بدء الاستخراج", + "dvdRippingAborted": "تم إلغاء الاستخراج", + "dvdOpenIfoFile": "فتح ملف DVD IFO", + "dvdAddVobFiles": "إضافة ملفات VOB", + "dvdIfoFiles": "ملفات DVD IFO", + "dvdVobFileType": "ملفات DVD VOB", + "dvdDropHint": "افتح ملف IFO (VIDEO_TS\\VTS_01_0.IFO) أو أضف ملفات VOB - أو أفلتها هنا", + "dvdNotAnIfoFileX": "{0} ليس ملف DVD IFO", + "dvdMenuIfoNoTitleSetsX": "لم يتم العثور على مجموعات عناوين (VTS_xx_0.IFO) بجوار {0}", + "dvdEncryptedXOfY": "لا تزال {0} من أصل {1} من حزم الترجمة مشفرة بـ CSS - تم نسخ ملفات VOB هذه دون فك التشفير، لذا ستكون بعض صور الترجمة مشوهة.\n\nفك تشفير DVD باستخدام أداة استخراج DVD أولاً للحصول على نتيجة نظيفة.\n\nهل تريد المتابعة على أي حال؟", "splitTextAt": "تقسيم النص عند", "blankLines": "الأسطر الفارغة", "oneLineIsOneSubtitle": "كل سطر ترجمة واحدة", "twoLinesAreOneSubtitle": "كل سطرين ترجمة واحدة", "importFilesDotDotDot": "استيراد الملفات...", "multipleFiles": "استيراد من ملفات نصية متعددة (كل ملف ترجمة واحدة)", - "importOptions": "خيارات الاستيراد", - "autoSplitText": "تقسيم النص تلقائيًا", - "lineMode": "وضع السطر", "maxLineLength": "الحد الأقصى لطول السطر", - "maxLinesPerSubtitle": "الحد الأقصى للأسطر في كل ترجمة", - "minGapBetweenSubtitles": "الحد الأدنى للفجوة بين الترجمات", "mergeShortLines": "دمج الأسطر القصيرة", - "removeLinesWithoutLetters": "إزالة الأسطر الخالية من الأحرف", - "splitAtEndCharsSetting": "التقسيم عند أحرف النهاية", - "takeTimeFromCurrentFile": "أخذ التوقيت من الملف الحالي", "fixed": "ثابت", "numberOfSubtitlesX": "عدد الترجمات: {0}", "numberOfSubtitlesXForcedY": "عدد الترجمات: {0} ({1} مُجبَرة)", @@ -1330,14 +1381,18 @@ "forcedAlignerProgress": "جارٍ المحاذاة... النافذة {0} من {1}، {2} من {3} سطر", "forcedAlignerSetupTitle": "محاذاة الرموز الزمنية عبر المحاذي القسري", "forcedAlignerSetupIntro": "يطابق المحاذي القسري نص الترجمة الذي لديك بالفعل مع الصوت، دون نسخه أولاً. تُحاذى مقاطع الفيديو الطويلة على أجزاء، لذا فأي طول يعمل.", + "forcedAlignerEndsFromSpeech": "تعيين أوقات النهاية من الكلام المعزول (بطيء)", + "forcedAlignerEndsFromSpeechHint": "يجد المحاذي القسري موضع بداية السطر، لا موضع نهايته، لذا تأتي أوقات النهاية عادةً من وقت القراءة. عند تفعيل هذا الخيار، تُزال الموسيقى والمؤثرات الصوتية من الصوت أولاً وينتهي كل سطر حيث يصمت كلامه. يستغرق ذلك تقريبًا مدة الفيديو نفسه مع GPU - وأضعافها بدونه.", + "forcedAlignerIsolatingSpeech": "جارٍ عزل الكلام... {0}", + "forcedAlignerIsolatingSpeechFailed": "تعذّر عزل الكلام - تم تعيين أوقات النهاية من وقت القراءة بدلاً من ذلك.", "forcedAlignerModel": "نموذج المحاذاة", - "forcedAlignerDownloadEngine": "تنزيل / تحديث المحرك..." + "forcedAlignerDownloadEngine": "تنزيل / تحديث المحرك...", + "forcedAlignerEstimatedXOfY": "تعذّرت محاذاة {0} من أصل {1} سطر ووُضعت حسب وقت القراءة - رموزها الزمنية تقديرية فقط. على الأرجح النص أطول مما يُنطق في الفيديو." }, "export": { "exportImagesProfiles": "تصدير ملفات تعريف الصور", "leftRightMargin": "الهامش الأيسر/الأيمن", "topBottomMargin": "الهامش العلوي/السفلي", - "titleExportBluRaySup": "تصدير Blu-ray (sup)", "lineSpacingPercent": "تباعد الأسطر %", "paddingLeftRight": "الحشو الأيسر/الأيمن", "paddingTopBottom": "الحشو العلوي/السفلي", @@ -1378,10 +1433,21 @@ "titleExportDCinemaInteropPng": "D-Cinema interop/png", "titleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", "imageBasedSubtitleSaved": "تم حفظ الترجمة القائمة على الصور", - "titleExportBdnXml": "تصدير BDN/xml", "titleExportWebVttThumbnails": "تصدير WebVTT (صور مصغرة)", "fullFrameImage": "صورة بحجم الإطار الكامل", "fullFrameImageHint": "جعل كل صورة بحجم إطار الفيديو، مع وضع الترجمة في مكانها", + "stereo3D": "3D", + "stereo3DHint": "للفيديو ثلاثي الأبعاد: رسم الترجمة مرة واحدة في نصف الإطار الخاص بكل عين", + "halfSideBySide": "نصف جنبًا إلى جنب", + "halfTopBottom": "نصف أعلى/أسفل", + "depth3D": "العمق", + "depth3DHint": "مدى بروز الترجمة خارج الشاشة - القيمة الموجبة تقرّبها، والسالبة تدفعها للخلف", + "plane3D": "3D-Plane", + "plane3DHint": "إعطاء كل ترجمة العمق الذي يخزّنه قرص 3D Blu-ray لها، من ملف 3D-Plane (.ofs) أنشأه BD3D2MK3D أو OFSExtractor. يُستخدم العمق المحدد حيث لا يحتوي 3D-Plane على قيمة", + "openPlane3DTitle": "فتح ملف 3D-Plane", + "unableToLoadPlane3DX": "تعذّر تحميل 3D-Plane: {0}", + "plane3DXDepthYToZ": "{0} (العمق من {1} إلى {2})", + "plane3DXNoDepth": "{0} (لا توجد قيم عمق)", "textEffect": "تأثير النص", "textEffectSettingsTitle": "إعدادات تأثير النص", "textEffectPreset": "إعداد مسبق", @@ -1413,13 +1479,10 @@ "statistics": { "title": "الإحصائيات", "titleWithFileName": "الإحصائيات - {0}", - "generalStatistics": "إحصائيات عامة", - "mostUsed": "الأكثر استخدامًا...", "mostUsedLines": "الأسطر الأكثر استخدامًا", "mostUsedWords": "الكلمات الأكثر استخدامًا", "nothingFound": "لم يُعثر على شيء", "numberOfLinesX": "عدد أسطر الترجمة: {0:#,##0}", - "numberOfFilesX": "عدد ملفات الترجمة: {0:#,##0}", "lengthInFormatXinCharactersY": "عدد الأحرف كـ {0}: {1:#,###,##0}", "numberOfCharactersInTextOnly": "عدد الأحرف في النص فقط: {0:#,###,##0}", "totalDuration": "إجمالي مدة جميع الترجمات: {0:#,##0}", @@ -1460,7 +1523,6 @@ "gapMaximum": "الفجوة - الحد الأقصى: {0:#,##0} ms", "gapAverage": "الفجوة - المتوسط: {0:#,##0.##} ms", "gapExceedingMinimum": "الفجوة - أقل من الحد الأدنى ({0:#,##0} ms): {1} ({2:0.00}%)", - "export": "تصدير...", "subtitles": "الترجمات", "words": "الكلمات", "totalDurationShort": "المدة الإجمالية", @@ -1490,7 +1552,22 @@ "restoreAutoBackupFile": "استعادة ملف النسخة الاحتياطية التلقائية", "restoreXFromY": "هل تريد استعادة \"{0}\" من {1}؟", "deleteAllSubtitleBackups": "هل تريد حذف جميع ملفات النسخ الاحتياطية للترجمة؟", - "deleteAll": "حذف الكل" + "deleteAll": "حذف الكل", + "subtitles": "الترجمات", + "settingsBackupInfo": "يتم نسخ Settings.json احتياطيًا عند بدء Subtitle Edit، بحد أقصى مرة كل {0} يوم (أيام) وفقط إذا تغيرت الإعدادات. يتم الاحتفاظ بأحدث {1} نسخة احتياطية.", + "settingsBackupInfoEveryStart": "يتم نسخ Settings.json احتياطيًا في كل مرة يبدأ فيها Subtitle Edit، إذا تغيرت الإعدادات. يتم الاحتفاظ بأحدث {0} نسخة احتياطية.", + "settingsBackupOff": "النسخ الاحتياطي التلقائي للإعدادات متوقف (الخيارات → الإعدادات → ملف).", + "lastSettingsBackupX": "آخر نسخة احتياطية: {0}", + "noSettingsBackupsYet": "لا توجد نسخ احتياطية للإعدادات بعد", + "openSettingsBackupFolder": "فتح مجلد النسخ الاحتياطية للإعدادات", + "backUpSettingsNow": "نسخ احتياطي الآن", + "settingsBackedUp": "تم نسخ الإعدادات الحالية احتياطيًا.", + "restoreSettings": "استعادة الإعدادات", + "restoreSettingsFromX": "هل تريد استبدال إعداداتك الحالية بالنسخة الاحتياطية من {0}؟\n\nسيتم نسخ إعداداتك الحالية احتياطيًا أولاً. بعض التغييرات لا تسري إلا بعد إعادة تشغيل Subtitle Edit.", + "settingsRestored": "تمت استعادة الإعدادات. يرجى إعادة تشغيل Subtitle Edit لتسري جميع التغييرات.", + "settingsRestoreFailed": "تعذّرت استعادة الإعدادات: {0}", + "settingsBackupNotValid": "النسخة الاحتياطية ليست ملف إعدادات صالحًا، لذا تم الاحتفاظ بإعداداتك الحالية", + "deleteAllSettingsBackups": "هل تريد حذف جميع ملفات النسخ الاحتياطية للإعدادات؟" }, "propertiesDCinema": { "title": "خصائص D-Cinema SMPTE", @@ -1504,22 +1581,16 @@ "editRate": "معدل التحرير", "timeCodeRate": "معدل الرمز الزمني", "startTime": "وقت البداية", - "font": "الخط", "fontId": "ID الخط", "fontUri": "URI الخط", - "generate": "إنشاء", - "fontColor": "لون الخط", "chooseColor": "اختيار اللون", "fontEffect": "تأثير الخط", "effectColor": "لون التأثير", - "fontSize": "حجم الخط", "topBottomMargin": "الهامش العلوي/السفلي", "fadeUpTime": "وقت الظهور التدريجي", "fadeDownTime": "وقت الاختفاء التدريجي", - "frames": "الإطارات", "zPosition": "الموضع Z", - "zPositionHelp": "الأرقام الموجبة تُبعد النص، والأرقام السالبة تُقرّبه، وإذا كان الموضع Z صفراً فالنص ثنائي الأبعاد", - "export": "تصدير..." + "zPositionHelp": "الأرقام الموجبة تُبعد النص، والأرقام السالبة تُقرّبه، وإذا كان الموضع Z صفراً فالنص ثنائي الأبعاد" }, "webVtt": { "setStylesForSelectedLinesTitle": "تعيين أنماط WebVTT للأسطر المحددة", @@ -1552,20 +1623,66 @@ "compareOnlyInOneFile": "في ملف واحد فقط", "compareTextOrTimeDifference": "اختلاف النص/الوقت", "compareNumberDifference": "اختلاف الأرقام", - "ignoreLineBreaks": "تجاهل فواصل الأسطر", "ignoreWhitespace": "تجاهل المسافات البيضاء", "ignoreWhitespaceHint": "الأسطر التي تختلف في المسافات أو علامات الجدولة أو كسور الأسطر فقط لا تُعدّ مختلفة", "ignoreFormatting": "تجاهل التنسيق", - "onlyLookForDifferencesInText": "البحث عن الاختلافات في النص فقط", - "cannotCompareWithImageBasedSubtitles": "لا يمكن المقارنة مع الترجمات القائمة على الصور", - "statisticsTitle": "الإحصائيات", "ignoreFormattingHint": "الأسطر التي تختلف في وسوم التنسيق فقط، مثل أو {\\an8}، لا تُعدّ مختلفة", "showOnlyDifferencesInText": "الاختلافات في النص فقط", + "ignoreNumbering": "تجاهل الترقيم", + "ignoreNumberingHint": "الأسطر التي تختلف في رقمها فقط لا تُعد مختلفة", + "ignoreTimeDifferenceMs": "هامش الوقت المسموح (مللي ثانية)", + "ignoreTimeDifferenceMsHint": "أوقات البداية والنهاية التي تختلف بهذا العدد من أجزاء الثانية أو أقل لا تُعد مختلفة", + "compareDifferences": "الاختلافات", + "compareTextDifferences": "اختلافات النص", + "compareCurrent": "الحالي", + "compareReference": "المرجع", + "compareEditable": "قابل للتحرير", + "compareEditableHint": "التغييرات التي تُجرى هنا تعود إلى الترجمة عند النقر على تطبيق", + "compareReadOnly": "للقراءة فقط", + "compareTakeFromReference": "أخذ النص والتوقيت من المرجع", + "compareInsertFromReference": "إدراج هذا السطر في الترجمة الحالية", + "compareDeleteFromCurrent": "حذف هذا السطر من الترجمة الحالية", + "compareTakeText": "أخذ النص", + "compareTakeTiming": "أخذ التوقيت", + "compareEditLine": "تحرير السطر", + "compareEditHint": "Ctrl+Enter للحفظ، Esc للإلغاء", + "compareEdited": "محرَّر", + "compareOnePendingChange": "تغيير واحد معلّق", + "compareXPendingChanges": "{0} تغييرات معلّقة", + "compareDiscardXChanges": "هل تريد تجاهل {0} تغيير (تغييرات) أُجريت في المقارنة؟", + "compareXChangesApplied": "المقارنة: تم تطبيق {0} تغيير (تغييرات)", + "compareChangeTextX": "#{0} النص من المرجع", + "compareChangeTimingX": "#{0} التوقيت من المرجع", + "compareChangeTextAndTimingX": "#{0} النص والتوقيت من المرجع", + "compareChangeEditedX": "#{0} محرَّر", + "compareChangeInsertedX": "#{0} مُدرج", + "compareChangeDeletedX": "#{0} محذوف", + "compareSyncPoint": "نقطة مزامنة", + "compareSyncPointHint": "نقطة مزامنة - يُعرض هذان السطران دائمًا كزوج، وتُصفّ الأسطر التي فوقهما وتحتهما بشكل مستقل", + "compareSyncPickCurrent": "نقطة مزامنة: استخدام هذا السطر الحالي", + "compareSyncPickReference": "نقطة مزامنة: استخدام هذا السطر المرجعي", + "compareSyncRemove": "إزالة نقطة المزامنة", + "compareClearXSyncPoints": "مسح نقاط المزامنة ({0})", + "compareSyncCurrentPickedX": "تم اختيار الحالي #{0} كنقطة مزامنة - حدد السطر المرجعي المطابق وانقر على مزامنة", + "compareSyncReferencePickedX": "تم اختيار المرجع #{0} كنقطة مزامنة - حدد السطر الحالي المطابق وانقر على مزامنة", + "compareSyncWithCurrentX": "مزامنة مع الحالي #{0}", + "compareSyncWithReferenceX": "مزامنة مع المرجع #{0}", + "compareSyncApply": "المزامنة", + "compareSyncPointSetXY": "تم تعيين نقطة المزامنة: يُعرض الآن الحالي #{0} والمرجع #{1} كزوج", + "compareSyncAlreadyPairedXY": "الحالي #{0} والمرجع #{1} معروضان بالفعل كزوج بنفس البداية - لا شيء للمزامنة", + "compareSyncPointShiftedXYZW": "تم تعيين نقطة المزامنة: تمت إزاحة الحالي #{0}-#{1} بمقدار {2} ليبدأ مع المرجع #{3}", + "compareChangeSyncShiftXYZ": "تمت إزاحة #{0}-#{1} بمقدار {2} (نقطة مزامنة)", + "compareTimingDeltaHint": "مقدار تأخر (+) أو تقدم (−) بداية ونهاية المرجع عن السطر الحالي", "loadXFromFile": "تحميل \"{0}\" من الملف", + "compareLoadSavedFile": "تحميل الملف المحفوظ", "saveCompareHtmlTitle": "حفظ ملف مقارنة HTML", "pickMatroskaTrackX": "اختيار مسار Matroska - {0}", "pickTransportStreamTrackX": "اختيار مسار تدفق النقل - {0}", + "chapters": "الفصول", + "dvdVobFilesMissingX": "ملفات VOB مفقودة (تم العثور على {0}%)", "pickMp4TrackX": "اختيار مسار MP4 - {0}", + "pickMxfTrackX": "اختيار مسار MXF - {0}", + "pickMpegTrackX": "اختيار مسار MPEG - {0}", "rosettaProperties": "خصائص Timed Text Rosetta IMSC", "rosettaFontSize": "حجم الخط (ارتفاع الصف)", "propertyTimeBase": "الأساس الزمني", @@ -1575,7 +1692,6 @@ "propertyDefaultRegion": "المنطقة الافتراضية", "propertyStyleAttributeName": "اسم سمة النمط", "propertyTimeCodeFormat": "تنسيق الرمز الزمني", - "propertyFileExtension": "امتداد الملف", "propertyTopOrigin": "أصل الأعلى", "propertyTopExtent": "امتداد الأعلى", "propertyBottomOrigin": "أصل الأسفل", @@ -1625,7 +1741,6 @@ "selectionIntersect": "تقاطع مع المُحدد" }, "multipleReplace": { - "title": "استبدال متعدد", "editRule": "تعديل القاعدة", "newRule": "قاعدة جديدة", "editCategory": "تعديل الفئة", @@ -1642,24 +1757,23 @@ "findWhat": "البحث عن", "descriptionOptional": "الوصف (اختياري)", "invalidRegularExpressionX": "تعبير نمطي غير صالح: {0}", - "regularExpressionTooSlowX": "توقف التعبير النمطي بعد {0} ثانية - تم تخطي القاعدة، جرّب نمطاً أبسط" + "regularExpressionTooSlowX": "توقف التعبير النمطي بعد {0} ثانية - تم تخطي القاعدة، جرّب نمطاً أبسط", + "moveToCategory": "نقل إلى فئة" }, "find": { "searchTextWatermark": "نص البحث...", "wholeWord": "كلمة كاملة", - "caseSensitive": "حساس لحالة الأحرف", - "caseInsensitive": "غير حساس لحالة الأحرف", "findPrevious": "البحث عن ال_سابق", "findNext": "_البحث عن التالي", "replaceAndFindNext": "_استبدال والبحث عن التالي", "replaceAll": "استبدال ال_كل", - "replaceTitle": "استبدال", - "replaceWith": "استبدال بـ", "replaceTextWatermark": "استبدال بـ...", "replaceIn": "الاستبدال/البحث في", "replaceInTextAndOriginal": "النص والنص الأصلي", "replaceInTextOnly": "النص فقط", - "replaceInOriginalOnly": "النص الأصلي فقط" + "replaceInOriginalOnly": "النص الأصلي فقط", + "replacedOneOccurrence": "تم استبدال تكرار واحد", + "replacedXOccurrences": "تم استبدال {0} من التكرارات" }, "regularExpressionContextMenu": { "wordBoundary": "حد كلمة (\\b)", @@ -1687,6 +1801,7 @@ "xLinesYSubtitles": "{0} سطر، {1} ترجمة", "xLinesYSubtitlesZErrors": "{0} سطر، {1} ترجمة، {2} خطأ", "couldNotParseAsX": "تعذر التحليل بصيغة {0}", + "readAsXUseAsY": "تعذّرت قراءة المصدر كـ {1}، لكن أمكن قراءته كـ {0}.\nهل تريد استخدام الأسطر ومواصلة الحفظ كـ {1}؟", "selectedXCharactersYLines": "المحدد: {0} حرف في {1} سطر", "replacedXOccurrences": "تم استبدال {0} تطابق", "invalidRegularExpression": "تعبير نمطي غير صالح", @@ -1701,7 +1816,6 @@ "aiReview": { "title": "مراجعة بالذكاء الاصطناعي", "review": "مراجعة", - "stop": "إيقاف", "editPrompt": "تحرير الموجّه...", "editPromptTitle": "تحرير موجّه المراجعة", "promptInfo": "التعليمات المُرسلة إلى النموذج، يُستبدل {language} بلغة الترجمة.", @@ -1712,7 +1826,6 @@ "reviewingLineXOfY": "مراجعة السطر {0} من {1}...", "reviewDone": "اكتملت المراجعة، {0} اقتراحات في {1} أسطر", "noIssuesFound": "لم يُعثر على مشكلات", - "categoryAll": "الكل", "categorySpelling": "الإملاء", "categoryGrammar": "القواعد", "categoryPunctuation": "علامات الترقيم", @@ -1724,8 +1837,23 @@ "largeChangeWarning": "تغيير كبير، يبدو كإعادة صياغة، راجعه بعناية", "mismatchWarning": "لا يشبه الأصل - قد ينتمي إلى سطر آخر", "engineError": "تعذّر الوصول إلى محرك الذكاء الاصطناعي: {0}", - "setupHint": "يرجى اختيار محرك ونموذج في الأدوات -> مراجعة بالذكاء الاصطناعي أولاً.", - "playCurrentLineHint": "تشغيل السطر المحدد في مشغل الفيديو والإيقاف عند نهايته (أو انقر نقراً مزدوجاً على سطر)" + "playCurrentLineHint": "تشغيل السطر المحدد في مشغل الفيديو والإيقاف عند نهايته (أو انقر نقراً مزدوجاً على سطر)", + "editAfterHint": "انقر على نص الصف المحدد لتحرير الإصلاح قبل تطبيقه (Enter للحفظ، Escape للإلغاء)", + "template": "القالب", + "templatePlaceholder": "اختر قالبًا لاستبدال المطالبة", + "templateStandard": "تدقيق لغوي قياسي", + "templateSpeechToText": "تنظيف تحويل الكلام إلى نص", + "templateMachineTranslation": "إصلاح الترجمة الآلية", + "templateSdh": "SDH / ضعاف السمع", + "referenceContext": "السياق المرجعي", + "referenceContextInfo": "اختياري. الأسماء أو الشخصيات أو المسرد أو الملخص أو ملاحظات الأسلوب - يعامل النموذج هذا كمرجع معتمد للأسماء والمصطلحات. يُرسل مع كل دفعة.", + "referenceContextPlaceholder": "الأسماء: كايتو، العمة مي، د. هوليس\nالمصطلحات: شينكانسن، قلب الالتواء\nالملخص: يسافر كايتو إلى طوكيو للعثور على والده المفقود.", + "generateContext": "التوليد بالذكاء الاصطناعي", + "generateContextHint": "دع محرك الذكاء الاصطناعي المحدد يقرأ الترجمة ويصوغ الأسماء والمصطلحات وملخصًا - تحقق من النتيجة قبل الاستخدام", + "generatingContextPartXOfY": "جارٍ قراءة الجزء {0} من {1}...", + "generatingContextSynopsis": "جارٍ كتابة الملخص...", + "replaceContextQuestion": "هل تريد استبدال السياق المرجعي الحالي؟", + "noContextGenerated": "لم يُرجع محرك الذكاء الاصطناعي أي معلومات مرجعية قابلة للاستخدام." }, "aiAssistant": { "title": "مساعد الذكاء الاصطناعي", @@ -1743,22 +1871,14 @@ "showReasoning": "إظهار استدلال النموذج" }, "fixCommonErrors": { - "title": "إصلاح الأخطاء الشائعة", - "step1": "الخطوة 1/2، اختيار الأخطاء المراد إصلاحها", - "whatToFix": "ما المراد إصلاحه", - "example": "مثال", - "selectAll": "تحديد الكل", - "inverseSelection": "عكس التحديد", "back": "< &رجوع", "next": "&التالي >", - "step2": "الخطوة 2/2، التحقق من الإصلاحات", "fixes": "الإصلاحات", "ruleDetailsDotDotDot": "تفاصيل القاعدة...", "showOnlyThisRule": "إظهار إصلاحات هذه القاعدة فقط", "appliedRulesForLineX": "القواعد المطبقة على السطر {0}", "ruleX": "القاعدة: {0}", "log": "السجل", - "function": "الوظيفة", "removedEmptyLine": "إزالة السطر الفارغ", "removedEmptyLineAtTop": "إزالة السطر الفارغ في الأعلى", "removedEmptyLineAtBottom": "إزالة السطر الفارغ في الأسفل", @@ -1779,13 +1899,13 @@ "removeLineBreaksPixelWidth": "إلغاء كسر الترجمات التي يمكن أن تتسع في سطر واحد (عرض البكسل)", "fixUppercaseIInsideLowercaseWords": "إصلاح حرف 'i' الكبير داخل الكلمات الصغيرة (خطأ OCR)", "fixDoubleApostrophes": "إصلاح حرفي الفاصلة العليا المزدوجين ('') إلى علامة اقتباس مفردة (\")", + "fixMisreadQuotes": "إصلاح الفواصل العليا المقروءة خطأً كعلامات اقتباس مزدوجة (OCR، الإنجليزية)", "addPeriods": "إضافة نقطة بعد الأسطر التي يبدأ سطرها التالي بحرف كبير", "startWithUppercaseLetterAfterParagraph": "البدء بحرف كبير بعد الفقرة", "startWithUppercaseLetterAfterPeriodInsideParagraph": "البدء بحرف كبير بعد النقطة داخل الفقرة", "startWithUppercaseLetterAfterColon": "البدء بحرف كبير بعد النقطتين/الفاصلة المنقوطة", "fixLowercaseIToUppercaseI": "إصلاح حرف 'i' الصغير المنفرد إلى 'I' (الإنجليزية)", "fixCommonOcrErrors": "إصلاح أخطاء OCR الشائعة (باستخدام قائمة استبدال OCR)", - "commonOcrErrorsFixed": "أخطاء OCR الشائعة المُصلَحة (باستخدام ملف OcrReplaceList): {0}", "removeSpaceBetweenNumber": "إزالة المسافة بين الأرقام", "breakDialogsOnOneLine": "تقسيم الحوارات في سطر واحد", "removeDialogFirstInNonDialogs": "إزالة الشرطة الأولى في السطر الأول لغير الحوارات", @@ -1802,18 +1922,17 @@ "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Foo
bar! -> Foo bar!", "fixDoubleApostrophesExample": "''Has double single quotes'' -> \"Has single double quote\"", + "fixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "addPeriodsExample": "Hello world -> Hello world.", "startWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: Foobar!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Hello there! how are you? -> Hello there! How are you?", "startWithUppercaseLetterAfterColonExample": "Speaker: hello world! -> Speaker: Hello world!", "removeHyphensSingleLineExample": "- Foobar. -> Foobar.", "fix3PlusLinesExample": "Foo
bar
baz! -> Foo bar baz!", - "xMissingQuotesAdded": "علامات الاقتباس الناقصة المُضافة: {0}", "fix3PlusLine": "إصلاح ترجمة تحتوي على أكثر من سطرين", "fix3PlusLines": "إصلاح الترجمات التي تحتوي على أكثر من سطرين", "analysing": "جارٍ التحليل...", "nothingToFix": "لا شيء لإصلاحه :)", - "fixesFoundX": "الإصلاحات الموجودة: {0}", "xFixesApplied": "الإصلاحات المطبَّقة: {0}", "xFixesYSelected": "{0} إصلاحات، {1} محدد", "nothingFixableBut": "تعذّر إصلاح أي شيء تلقائيًا. تحتوي الترجمة على أخطاء، راجع السجل للتفاصيل", @@ -1822,7 +1941,6 @@ "fixFirstLetterToUppercaseAfterParagraph": "تحويل الحرف الأول إلى كبير بعد الفقرة", "mergeShortLine": "دمج السطر القصير (جملة واحدة)", "mergeShortLineAll": "دمج السطر القصير (الكل عدا الحوارات)", - "unbreakShortLinePixelWidth": "إلغاء كسر السطر القصير (عرض البكسل)", "breakLongLine": "كسر السطر الطويل", "fixLongDisplayTime": "إصلاح وقت العرض الطويل", "fixInvalidItalicTag": "إصلاح وسم المائل غير الصالح", @@ -1845,7 +1963,6 @@ "fixUppercaseIInsideLowercaseWord": "إصلاح حرف 'i' الكبير داخل كلمة صغيرة", "fixMissingPeriodAtEndOfLine": "إضافة النقطة الناقصة في نهاية السطر", "refreshFixes": "تحديث الإصلاحات المتاحة", - "applyFixes": "تطبيق الإصلاحات المحددة والإغلاق", "autoBreak": "&كسر تلقائي", "unbreak": "&إلغاء الكسر", "fixDoubleDash": "إصلاح '--' -> '...'", @@ -1864,8 +1981,6 @@ "fixSpaceBetweenNumbersExample": "1 100 -> 1100", "fixDialogsOneLineExample": "Hi John! - Hi Ida! -> Hi John!
- Hi Ida!", "removeDialogFirstInNonDialogsExample": "- How are you? -> How are you?", - "selectDefault": "تحديد الافتراضي", - "setDefault": "تعيين الإصلاحات الحالية كافتراضية", "fixContinuationStyleX": "إصلاح نمط الاستمرار: {0}", "fixUnnecessaryLeadingDots": "إزالة النقاط البادئة غير الضرورية", "fixCommonErrorsProfiles": "ملفات قواعد إصلاح الأخطاء الشائعة", @@ -1873,7 +1988,6 @@ "searchRulesDotDotDot": "بحث في القواعد...", "goToApplyFixes": "الانتقال إلى تطبيق الإصلاحات", "backToFixList": "العودة إلى قائمة الإصلاحات", - "applyFixesAndClose": "تطبيق الإصلاحات والإغلاق", "fixCommonOcrErrorsStep2": "إصلاح الأخطاء الشائعة، الخطوة 2 (تطبيق الإصلاحات)", "fixCommonOcrErrorsStep2FixesFoundX": "إصلاح الأخطاء الشائعة، الخطوة 2، الإصلاحات الموجودة: {0}", "action": "الإجراء", @@ -1886,18 +2000,11 @@ "adjustDurations": { "title": "ضبط المدد", "adjustVia": "الضبط عبر", - "seconds": "ثوانٍ", - "percent": "نسبة مئوية", "recalculate": "إعادة الحساب", "addSeconds": "إضافة ثوانٍ", - "setAsPercent": "التعيين كنسبة مئوية من المدة", "note": "ملاحظة: لن يتداخل وقت العرض مع وقت بداية النص التالي", "fixed": "ثابت", - "milliseconds": "ميلي ثانية", "extendOnly": "التمديد فقط", - "enforceDurationLimits": "فرض الحد الأدنى والأقصى للمدة", - "checkShotChanges": "عدم التمديد بعد تغييرات اللقطات", - "batchCheckShotChanges": "مراعاة تغييرات اللقطات (إن وُجدت)", "recalculateRequiresOcrNote": "إعادة الحساب غير متاحة، إحدى الترجمات أو أكثر لا تحتوي على نص OCR. شغّل OCR أولًا." }, "applyDurationLimits": { @@ -1905,6 +2012,8 @@ "fixMinDurationMs": "إصلاح الحد الأدنى للمدة (ms)", "doNotGoPastShotChange": "عدم التجاوز بعد تغيير اللقطة", "fixMaxDurationMs": "إصلاح الحد الأقصى للمدة (ms)", + "fixMinDurationFrames": "إصلاح الحد الأدنى للمدة (إطارات)", + "fixMaxDurationFrames": "إصلاح الحد الأقصى للمدة (إطارات)", "minimumDurationMilliseconds": "المدة الدنيا (بالمللي ثانية):", "maximumDurationMilliseconds": "المدة القصوى (بالمللي ثانية):", "maxDurationShouldBeHigherThanMinDuration": "يجب أن يكون الحد الأقصى للمدة أعلى من الحد الأدنى للمدة", @@ -1924,12 +2033,8 @@ }, "beautifyTimeCodes": { "title": "تجميل الرموز الزمنية", - "beautifySettings": "إعدادات التجميل", "snapToFrames": "المحاذاة إلى الإطارات", - "frameGap": "فجوة الإطارات", "minDuration": "الحد الأدنى للمدة (ms)", - "shotChangeThreshold": "عتبة تغيير اللقطة (ms)", - "shotChangeOffset": "إزاحة تغيير اللقطة (إطارات)", "original": "الأصلي", "beautified": "المُجمَّل", "subtitlesCount": "الترجمات", @@ -1958,13 +2063,80 @@ "timeCodesExtractFailed": "تعذر قراءة الرموز الزمنية من الفيديو", "timeCodesHint": "محاذاة الإشارات إلى أوقات الإطارات الحقيقية للفيديو بدلاً من افتراض معدل إطارات ثابت. يتطلب قراءة الفيديو كاملاً مرة واحدة؛ وتُخزَّن النتيجة مؤقتاً." }, + "improveTimeCodes": { + "title": "تحسين الرموز الزمنية (المحاذاة القسرية)", + "aligner": "المحاذي", + "alignerHint": "النموذج الذي يستمع لكل سطر في الصوت. أفضل الخيارات للغة الترجمة مدرجة أولاً.", + "maxShift": "أقصى إزاحة (ثوانٍ)", + "maxShiftHint": "مدى عدم تزامن الترجمة المحتمل. السطر الذي ستتحرك بدايته أبعد من ذلك يُترك كما هو ويُعلَّم. أيًّا كانت القيمة، فإن السطر المنفرد الذي يريد التحرك أكثر من نصف ثانية أبعد من الأسطر المحيطة به لا يُنقل عشوائيًا: فهو يتبع جيرانه إذا تحركوا جميعًا، وإلا يُعرض غير محدد لتتحقق منه.", + "adjustStartTimes": "ضبط أوقات البداية", + "adjustEndTimes": "ضبط أوقات النهاية", + "isolateSpeech": "عزل الكلام أولاً (بطيء)", + "isolateSpeechHint": "يزيل الموسيقى والمؤثرات الصوتية قبل المحاذاة، بحيث لا يسمع المحاذي سوى الحوار. يفيد في الأسطر المنطوقة فوق موسيقى صاخبة أو مشاهد حركة، لكنه يستغرق تقريبًا مدة الصوت نفسه مع GPU - وأضعافها بدونه.", + "isolatingSpeech": "جارٍ عزل الكلام... (يستغرق هذا بعض الوقت)", + "isolateSpeechFailed": "تعذّر عزل الكلام - تمت المحاذاة مقابل الصوت الأصلي بدلاً من ذلك.", + "checkWithSpeechToText": "التحقق باستخدام تحويل الكلام إلى نص", + "checkWithSpeechToTextHint": "يقوم بنسخ الصوت أيضًا، ويتحقق من كل نقل مقابل الموضع الذي سُمعت فيه الكلمات فعليًا. النقلات الكبيرة التي يؤكدها الكلام تُحدَّد لك، والنقلات بعيدًا عن موضع سماع السطر تُترك غير محددة لتتحقق منها. يُظهر أيضًا مقدار ما سُمع من كل سطر - النسبة المنخفضة تعني أن النص يختلف عما يُقال. الترجمة غير المتزامنة بأكثر من أقصى إزاحة - إزاحة ثابتة، أو انحراف بسبب عدم تطابق معدل الإطارات، أو قفزات حيث قُصّت المشاهد - تُزامَن أولاً حسب الكلمات المسموعة. يستخدم Crisp ASR Parakeet، الذي يستغرق بضع دقائق لفيلم روائي طويل مع GPU.", + "checkWithSpeechToTextNotAvailableX": "التحقق بتحويل الكلام إلى نص غير متاح لـ {0}", + "transcribingToCheck": "جارٍ النسخ للتحقق من المحاذاة...", + "speechToTextFailed": "فشل تحويل الكلام إلى نص - لم يتم التحقق من الرموز الزمنية مقابله.", + "speechToTextX": "تحويل الكلام إلى نص: {0}", + "speechToTextConfirmedXDisputedY": "الكلام: {0} مؤكد، {1} متنازع عليه", + "hardlyHeardX": "لم يسمع تحويل الكلام إلى نص سوى {0}% من كلمات الترجمة. هل الترجمة باللغة المنطوقة؟ لا يستطيع المحاذي وضع ترجمة بلغة أخرى.", + "heard": "مسموع", + "heardHint": "مقدار ما سمعه تحويل الكلام إلى نص من السطر. النسبة المنخفضة تعني أن النص يختلف عما يُقال - وهنا يكون المحاذي على الأرجح مخطئًا.", + "statusConfirmedBySpeech": "مؤكد بالكلام", + "statusDisputedBySpeech": "سُمع حيث كان", + "statusMovedWithSync": "نُقل مع المزامنة", + "syncedFirstXY": "تمت المزامنة أولاً: {0} ث في البداية، {1} ث في النهاية", + "showSpeechOnly": "إظهار الكلام فقط", + "showSpeechOnlyHint": "رسم الموجة الصوتية المحاذاة من الصوت بعد إزالة الموسيقى والمؤثرات الصوتية؛ تبقى الموجة الصوتية الأصلية كما هي للمقارنة. متاح بعد عزل الكلام - هنا، أو باستخدام \"إظهار الكلام فقط\" في الموجة الصوتية بالنافذة الرئيسية.", + "align": "محاذاة", + "original": "الأصلي", + "aligned": "المحاذى", + "intro": "اختر محاذيًا واضغط \"محاذاة\" للاستماع لكل سطر في الصوت وإحكام رموزه الزمنية.", + "extractingAudio": "جارٍ استخراج الصوت...", + "aligningBatchXOfY": "جارٍ المحاذاة... الدفعة {0} من {1}", + "extractAudioFailed": "تعذّر استخراج الصوت باستخدام ffmpeg.", + "modelWillBeDownloaded": "سيتم تنزيل {0}", + "summaryXRetimedYKeptZSkipped": "أُعيد توقيته: {0} · أُبقي: {1} · لا كلام: {2}", + "meanShiftX": "متوسط الإزاحة: {0} مللي ثانية", + "toCheckX": "للتحقق: {0}", + "largeMovesToCheckX": "{0} سطر (أسطر) ستتحرك مسافة كبيرة بمفردها وتُركت غير محددة - استمع إليها (F5 يشغّل السطر المحاذى، وShift+F5 الأصلي) وحدد الصحيحة منها.", + "linesToCheckX": "{0} سطر (أسطر) تُركت غير محددة للتحقق - استمع إليها (F5 يشغّل السطر المحاذى، وShift+F5 الأصلي) وحدد الصحيحة منها.", + "changeXOfY": "التغيير {0} من {1}", + "previousChange": "التغيير السابق", + "nextChange": "التغيير التالي", + "startShift": "البداية", + "endShift": "النهاية", + "statusRetimed": "أُعيد توقيته", + "statusMovedWithNeighbours": "نُقل مع جيرانه", + "statusLargeMoveUnconfirmed": "نقل كبير - استمع، وحدد للتطبيق", + "statusUnchanged": "في مكانه بالفعل", + "statusNoSpeech": "لا كلام", + "statusShiftTooLarge": "أُبقي - الإزاحة كبيرة جدًا", + "statusFailed": "أُبقي - فشل المحاذي", + "statusAdjustedByHand": "ضُبط يدويًا", + "alignedWaveformHint": "اسحب سطرًا لنقله، أو اسحب حوافه لتغيير بدايته أو نهايته.", + "playLine": "تشغيل السطر", + "undoAdjustment": "التراجع عن الضبط", + "playPause": "تشغيل / إيقاف مؤقت", + "playAligned": "المحاذى", + "playAlignedHint": "تشغيل السطر المحدد برموزه الزمنية المحاذاة", + "apply": "تطبيق", + "applyHint": "ألغِ تحديد سطر للإبقاء على رموزه الزمنية الأصلية. انقر نقرًا مزدوجًا على سطر لتشغيله. يمكن أيضًا نقل الأسطر أو تغيير حجمها في الموجة الصوتية المحاذاة." + }, "beautifyTimeCodesProfile": { "title": "تحرير ملف قواعد تجميل الرموز الزمنية", "loadPreset": "تحميل الإعداد المسبق", "presetDefault": "الافتراضي", "presetNetflix": "Netflix", "presetSdi": "SDI", - "general": "عام", + "saveAsProfile": "حفظ كملف تعريف...", + "deleteProfile": "حذف ملف التعريف", + "profileName": "اسم ملف التعريف", + "overwriteProfileX": "يوجد ملف تعريف باسم \"{0}\" بالفعل. هل تريد استبداله؟", + "deleteProfileX": "هل تريد حذف ملف التعريف \"{0}\"؟", "gap": "الفجوة", "gapSuffix": "إطارات (يُحدّث أيضًا حقول الفجوة غير الصفرية أدناه)", "milliseconds": "ms", @@ -1993,9 +2165,12 @@ "hintChaining": "كيفية التعامل مع الترجمات المتلامسة تقريبًا: تمديدها معًا أو إبعادها، حسب وجود تغيير لقطة بينهما." }, "bridgeGaps": { - "title": "سدّ الفجوات", "bridgeGapsSmallerThan": "سدّ الفجوات الأصغر من (ms)", "minGap": "الحد الأدنى للفجوة (ms)", + "bridgeGapsSmallerThanFrames": "سد الفجوات الأصغر من (إطارات)", + "minGapFrames": "الحد الأدنى للفجوة (إطارات)", + "calculateBridgeGapsSmallerThanDotDotDot": "حساب حد سد الفجوات من معدل إطارات...", + "useXMsAsBridgeGapsSmallerThan": "سد الفجوات الأصغر من \"{0}\" مللي ثانية؟", "numberOfSmallGapsBridgedX": "عدد الفجوات الصغيرة المسدودة: {0}", "percentFoPrevious": "الفجوة للسابق (%)", "gapChange": "تغيير الفجوة" @@ -2007,8 +2182,6 @@ "sortBy": { "title": "ترتيب الترجمات", "sortOrder": "ترتيب الفرز", - "sortByNumber": "الرقم", - "sortByStartTime": "وقت البداية", "sortByEndTime": "وقت النهاية" }, "batchConvert": { @@ -2031,6 +2204,7 @@ "addColor": "إضافة اللون", "deleteLinesWithSpecificActorsOrStyles": "حذف الأسطر ذات الممثلين أو الأنماط (افصل المتعدد بفاصلة)", "useSourceStylesIfPossible": "استخدام أنماط المصدر إن أمكن", + "keepSourceEmbeddedFonts": "الإبقاء على الخطوط المضمّنة في المصدر (التذييل)", "editStyles": "تحرير الأنماط", "editProperties": "تحرير الخصائص", "editAttachments": "تحرير المرفقات", @@ -2051,7 +2225,6 @@ "assaChangeStyleFromStyle": "تغيير النمط من", "assaChangeStyleToStyle": "إلى", "assaChangeStyleImportStyle": "استيراد النمط...", - "assaChangeStyleImportedX": "المستورد: {0}", "assaChangeStyleTrimUnusedStyles": "إزالة الأنماط غير المستخدمة", "assaChangeStylePropertiesTitle": "تغيير خصائص النمط", "assaChangeStylePropertiesInfo": "يغيّر الحقول المختارة في كل نمط في الملف، مع ترك الأنماط نفسها دون تغيير.", @@ -2063,13 +2236,52 @@ "convertColorsToDialogReBreakLines": "إعادة كسر الأسطر", "snapTimeCodesToFramesInfo": "يقرّب كل وقت بداية ونهاية إلى أقرب إطار. يُقرأ معدل الإطارات من ملف فيديو يحمل اسم ملف الترجمة نفسه، ما لم يُختَر معدل إطارات ثابت.", "addFolderDotDotDot": "إضافة مجلد...", + "addFolderRecursiveDotDotDot": "إضافة مجلد مع المجلدات الفرعية...", "selectFolderToConvert": "اختر مجلداً يحتوي على ملفات للتحويل", "includeSubfolders": "تضمين المجلدات الفرعية عند إضافة مجلد", + "videoFilesWhenAddingFolder": "ملفات الفيديو (mkv، mp4، ts...) عند إضافة مجلد", + "videoFilesAsk": "السؤال", + "videoFilesInclude": "إضافة مسارات الترجمة الخاصة بها", + "videoFilesSkip": "تخطي", + "folderContainsXVideoFiles": "يحتوي المجلد على {0} ملف (ملفات) فيديو (mkv، mp4، ts...).\n\nهل تريد إضافة مسارات الترجمة المضمّنة فيها أيضًا، أم ملفات الترجمة فقط؟", + "addVideoFiles": "إضافة ملفات الفيديو", + "skipVideoFiles": "ملفات الترجمة فقط", + "doNotAskAgainVideoFiles": "عدم السؤال مجددًا (يمكن تغييره في إعدادات التحويل الدُّفعي)", + "settingsSectionOutput": "المخرجات", + "settingsSectionAddingFiles": "إضافة الملفات", + "settingsSectionImageBasedSubtitles": "الترجمات القائمة على الصور (OCR)", + "settingsSectionOther": "أخرى", "keepSourceFileTimestamp": "الاحتفاظ بتاريخ/وقت الملف المصدر في ملفات الإخراج", - "scanningFolderX": "جارٍ فحص {0}..." + "preventSleepWhileConverting": "منع الكمبيوتر من السكون أثناء التحويل", + "scanningFolderX": "جارٍ فحص {0}...", + "transportStreamSettings": "إعدادات Transport Stream", + "transportStreamSettingsDotDotDot": "إعدادات Transport Stream...", + "transportStreamSettingsInfo": "ينطبق على مسارات الترجمة المستخرجة من ملفات Transport Stream (.ts/.m2ts). يؤثر الموضع وحجم الفيديو فقط على مسارات صور DVB المصدّرة إلى تنسيق قائم على الصور.", + "transportStreamOverrideXPosition": "تجاوز موضع X الأصلي", + "transportStreamOverrideYPosition": "تجاوز موضع Y الأصلي", + "transportStreamOverrideVideoSize": "تجاوز حجم الفيديو الأصلي", + "transportStreamBottomMargin": "الهامش السفلي", + "transportStreamFileNameEnding": "نهاية اسم الملف", + "transportStreamFileNameEndingInfo": "يُضاف قبل الامتداد لكل مسار مستخرج. اتركه فارغًا لاستخدام لاحقة اللغة العادية.", + "transportStreamOnlyTeletext": "Teletext فقط", + "transportStreamGetSizeFromVideo": "الحصول على الحجم من الفيديو...", + "twoLetterLanguageCodeUppercase": "رمز اللغة المكون من حرفين (أحرف كبيرة)", + "threeLetterLanguageCodeUppercase": "رمز اللغة المكون من ثلاثة أحرف (أحرف كبيرة)", + "formatContainsDotDotDot": "التنسيق يحتوي على...", + "extensionIsDotDotDot": "الامتداد هو...", + "statusIsError": "الحالة خطأ", + "forcedTracksOnly": "المسارات الإجبارية فقط", + "xConvertedYFailedInZ": "تم تحويل {0:#,###,##0}، وفشل {1:#,###,##0} في {2}", + "xNotProcessed": "لم تتم معالجة {0:#,###,##0}", + "removeUnicodeControlCharactersTitle": "إزالة أحرف التحكم في Unicode", + "removeUnicodeControlCharactersInfo": "يزيل أحرف التحكم في الاتجاه غير المرئية في Unicode (LRM وRLM وLRE وRLE وPDF وLRO وRLO) من النص، ويستبدل المسافات غير القابلة للكسر بمسافات عادية.", + "preset": "الإعداد المسبق", + "savePresetDotDotDot": "حفظ الإعداد المسبق...", + "deletePreset": "حذف الإعداد المسبق", + "presetName": "اسم الإعداد المسبق", + "deletePresetX": "هل تريد حذف الإعداد المسبق \"{0}\"؟" }, "changeCasing": { - "title": "تغيير حالة الأحرف", "fixNames": "إصلاح الأسماء", "namesX": "الأسماء: {0:#,##0}", "hitsX": "النتائج: {0:#,##0}", @@ -2080,9 +2292,7 @@ "allUppercase": "الكل بأحرف كبيرة", "allLowercase": "الكل بأحرف صغيرة" }, - "changeFormatting": { - "title": "تغيير التنسيق" - }, + "changeFormatting": {}, "convertActors": { "title": "تحويل الممثلين", "convertActorFrom": "تحويل الممثل من", @@ -2111,18 +2321,12 @@ "outputFormatAssa": "Advanced Sub Station Alpha (.ass)", "style1": "النمط 1", "style2": "النمط 2", - "outlineWidth": "عرض الحدّ الخارجي", - "shadowWidth": "عرض الظل", - "alignTop": "أعلى", - "alignBottom": "أسفل", - "merge": "_دمج", - "pleaseLoadTwoSubtitles": "الرجاء تحميل ترجمتين" + "merge": "_دمج" }, "splitSubtitle": { "title": "تقسيم الترجمة", "numberOfEqualParts": "عدد الأجزاء المتساوية", "saveSplitParts": "_حفظ الأجزاء المقسّمة", - "subtitleSplitIntoXParts": "قُسّمت الترجمة إلى {0} أجزاء.", "xPartsSavedInFormatYToFolder": "حُفظ {0} أجزاء بالصيغة {1} إلى المجلد:" }, "splitBreakLongLines": { @@ -2156,18 +2360,17 @@ "columnMerge": "دمج", "columnFirst": "السطر الأول", "columnSecond": "السطر الثاني", - "columnMerged": "المدمج", - "selectAll": "تحديد الكل", - "inverseSelection": "عكس التحديد" + "columnMerged": "المدمج" }, "mergeLinesWithSameText": { - "title": "دمج الأسطر ذات النص نفسه", "maxMsBetweenLines": "الحد الأقصى للميلي ثانية بين الأسطر", - "includeIncrementingLines": "تضمين الأسطر ذات النص المتزايد" + "maxFramesBetweenLines": "أقصى عدد إطارات بين الأسطر", + "includeIncrementingLines": "تضمين الأسطر ذات النص المتزايد", + "includeRollUpCaptions": "تضمين التسميات التوضيحية المتدحرجة (Roll-up)" }, "mergeLinesWithSameTimeCodes": { - "title": "دمج الأسطر ذات الرموز الزمنية نفسها", "maxMsDifference": "الحد الأقصى للفرق (ميلي ثانية)", + "maxFramesDifference": "أقصى فرق (إطارات)", "makeDialog": "إنشاء حوارات" }, "netflixCheckAndFix": { @@ -2190,7 +2393,6 @@ "shotChanges": "تغييرات اللقطات", "startNumberSpellOut": "كتابة الرقم في البداية", "textforHiUseBrackets": "الترميزات المتعلقة بضعاف السمع، استخدم الأقواس", - "frameRate": "معدل الإطارات", "twoFrameGrap": "فجوة إطارين", "whiteSpace": "المسافة البيضاء", "childrensProgram": "برنامج أطفال", @@ -2228,7 +2430,6 @@ "italicsFixed": "أُصلح المائل", "italicsNotAllowed": "المائل غير مسموح به", "bridgeGapsXToYFrames": "فجوة 3-{0} إطارات => فجوة إطارين", - "startNumberSpellOutComment": "عندما يبدأ رقم جملة، يجب دائمًا كتابته بالحروف", "maximumXCharactersPerSecond": "الحد الأقصى {0} حرف في الثانية" }, "imageBasedEdit": { @@ -2237,10 +2438,8 @@ "resizeImagesDotDotDot": "تغيير حجم الصور...", "adjustBrightnessDotDotDot": "ضبط السطوع...", "adjustAlphaDotDotDot": "ضبط ألفا...", - "centerHorizontally": "التوسيط أفقيًا", "cropImages": "اقتصاص الصور", "importTimeCodes": "استيراد الرموز الزمنية...", - "setTextForSubtitle": "تعيين نص للترجمة", "setText": "تعيين النص", "screenWidth": "عرض الشاشة", "screenHeight": "ارتفاع الشاشة", @@ -2271,15 +2470,31 @@ "letterboxCustom": "ارتفاع شريط مخصص", "barHeightPx": "ارتفاع الشريط (بكسل)", "titleSafePercent": "منطقة أمان العنوان (%)", + "moveCaptions": "نقل التسميات التوضيحية", + "moveCaptionsDotDotDot": "نقل التسميات التوضيحية...", + "moveCaptionsTo": "نقل التسميات التوضيحية", + "moveCaptionsIntoBars": "إلى الأشرطة السوداء (خارج الصورة)", + "moveCaptionsIntoPicture": "داخل الصورة (خارج الأشرطة)", + "moveCaptionsOffset": "الإزاحة من الحافة (px)", + "letterboxBarHeightXPxYOfZCaptionsWillMove": "ارتفاع الشريط: {0} px - ستتحرك {1} من {2} تسمية توضيحية", + "removeFadeInOut": "إزالة التلاشي للداخل/للخارج", + "removeFadeInOutXLinesRemoved": "تم دمج {0} سطر تلاشٍ في الأسطر التي تنتمي إليها", + "removeFadeInOutNothingFound": "لم يتم العثور على أسطر تلاشٍ للداخل/للخارج", "positionSummary": "{0}×{1} - {2} ترجمة - ارتفاع الشريط: {3} بكسل", "xInActivePicture": "{0} داخل الصورة", "xInTopBar": "{0} في الشريط العلوي", "xInBottomBar": "{0} في الشريط السفلي", "noImageSubtitlesLoaded": "لم تُحمَّل ترجمات مستندة إلى الصور", - "imageBasedFormatNotSupported": "تنسيق الترجمة القائم على الصور غير موجود/غير مدعوم." + "imageBasedFormatNotSupported": "تنسيق الترجمة القائم على الصور غير موجود/غير مدعوم.", + "frameRateDeclaredInFile": "معدل الإطارات المعلن في ملف Blu-ray sup", + "frameRateDetectedFromTimeCodesX": "معدل الإطارات المكتشف من الرموز الزمنية لـ Blu-ray sup (يعلن الملف {0})", + "frameRateFromVideo": "معدل إطارات الفيديو", + "frameRateCurrent": "معدل الإطارات الحالي", + "frameRateSetManually": "معدل الإطارات المعيّن يدويًا", + "frameRateUsageInfo": "تُكتب صادرات Blu-ray sup وBDN XML وDOST وFCP بمعدل الإطارات هذا. لا يغيّر أي أوقات - استخدم \"تغيير معدل الإطارات\" لذلك.", + "useVideoFrameRateXInsteadOfY": "معدل إطارات الفيديو هو {0}، لكن الترجمة مضبوطة على {1}.\n\nهل تريد استخدام معدل إطارات الفيديو ({0})؟" }, "removeTextForHearingImpaired": { - "title": "إزالة الترميزات المتعلقة بضعاف السمع", "interjections": "التعجّبات", "skipIfStartWith": "التخطي إذا بدأ بـ", "removeTextBetween": "إزالة النص بين", @@ -2298,7 +2513,6 @@ "removeInterjections": "إزالة التعجّبات", "linesFoundX": "الأسطر الموجودة: {0}" }, - "pickAlignmentTitle": "اختيار المحاذاة", "removeUnicodeCharacters": { "title": "إزالة/استبدال أحرف Unicode", "charactersFoundX": "أحرف Unicode التي عُثر عليها: {0}", @@ -2308,13 +2522,13 @@ "pickFontNameInstalledFonts": "الخطوط المثبتة", "pickFontNameCollectedFonts": "الخطوط المُجمَّعة", "colorPickerTitle": "اختيار اللون", + "colorPickerBrightness": "السطوع", "filterLayersTitle": "تصفية الطبقات للعرض", "filterLayersHideFromWaveform": "الإخفاء من الموجة الصوتية/الطيف الترددي", "filterLayersHideFromSubtitleGrid": "الإخفاء من شبكة الترجمة", "filterLayersHideFromVideoPreview": "الإخفاء من معاينة الفيديو", "pickSubtitleFormat": "اختيار صيغة الترجمة", "pickSubtitleFormatImageBasedNoPreview": "صيغة ترجمة مستندة إلى الصور.\nتُنشأ الصور النقطية أثناء التحويل، لا معاينة نصية.", - "pickLayerTitle": "تعيين الطبقة", "recentColors": "الألوان الأخيرة", "fixCommonErrorsSettingsTitle": "إعدادات إصلاح الأخطاء الشائعة" }, @@ -2359,59 +2573,51 @@ "correctWordsX": "الكلمات الصحيحة: {0}", "namesX": "الأسماء: {0}", "addedToDictionaryX": "المُضاف إلى القاموس: {0}", - "doNotShowThisAgain": "عدم إظهار هذه الرسالة مرة أخرى" + "doNotShowThisAgain": "عدم إظهار هذه الرسالة مرة أخرى", + "editUseAlwaysList": "تحرير قائمة \"الاستخدام دائمًا\"...", + "useAlwaysListTitle": "التدقيق الإملائي - قائمة \"الاستخدام دائمًا\"", + "useAlwaysListHeader": "قائمة \"الاستخدام دائمًا\"", + "useAlwaysListDescription": "كلمات يستبدلها التدقيق الإملائي تلقائيًا، محفوظة عبر \"تغيير الكل\" و\"الاستخدام دائمًا\". لا يُستخدم الزوج إلا عندما تكون الكلمة خاطئة إملائيًا.", + "useAlwaysWord": "الكلمة الخاطئة إملائيًا", + "xPairs": "{0:#,##0} زوج", + "xUnusedPairs": "{0:#,##0} لم يُستخدم أبدًا", + "useAlwaysUnusedHint": "لم يُستخدم أبدًا - هذه الكلمة مكتوبة بشكل صحيح (أو هي اسم أو كلمة مستخدم)، لذا لا يعلّمها التدقيق الإملائي أبدًا", + "removeUnused": "إزالة غير المستخدم", + "useAlwaysEmpty": "لا توجد أزواج \"الاستخدام دائمًا\" لهذه اللغة بعد", + "useAlwaysEmptyHint": "تُضاف الأزواج عند النقر على \"تغيير الكل\" أو \"الاستخدام دائمًا\" في التدقيق الإملائي.", + "useAlwaysNoMatch": "لا توجد أزواج تطابق البحث", + "useAlwaysSameWord": "يجب أن يكون البديل مختلفًا عن الكلمة.", + "useAlwaysRememberOff": "خيار \"تذكر قائمة 'الاستخدام دائمًا'\" متوقف في الإعدادات، لذا لا يستخدم التدقيق الإملائي هذه القائمة ولا يحفظها." }, "video": { "burnIn": { "title": "إنشاء فيديو بترجمة مدمجة", - "infoAssaOff": "ملاحظة: تنسيق Advanced SubStation Alpha مدعوم.", - "infoAssaOn": "ملاحظة: سيُستخدم تنسيق Advanced SubStation Alpha :)", - "xGeneratedWithBurnedInSubsInX": "تم إنشاء \"{0}\" بترجمة مدمجة في {1}.", - "timeRemainingMinutes": "الوقت المتبقي: {0} دقيقة", - "timeRemainingOneMinute": "الوقت المتبقي: دقيقة واحدة", - "timeRemainingSeconds": "الوقت المتبقي: {0} ثانية", - "timeRemainingAFewSeconds": "الوقت المتبقي: بضع ثوانٍ", - "timeRemainingMinutesAndSeconds": "الوقت المتبقي: {0} دقيقة و{1} ثانية", - "timeRemainingOneMinuteAndSeconds": "الوقت المتبقي: دقيقة واحدة و{0} ثانية", - "targetFileName": "اسم الملف الهدف: {0}", "targetFileSize": "حجم الملف الهدف (يتطلب ترميزًا بمرورين)", "fileSizeMb": "حجم الملف بالميغابايت", "matchSourceVideoSize": "مطابقة حجم فيديو المصدر", - "passX": "المرور {0}", - "encoding": "الترميز", "bitRate": "معدل البِت", "totalBitRateX": "إجمالي معدل البِت: {0}", "sampleRate": "معدل العينات", "audio": "الصوت", - "stereo": "ستيريو", "preset": "الإعداد المسبق", + "tune": "الضبط (Tune)", "pixelFormat": "تنسيق البكسل", "crf": "CRF", - "tuneFor": "الضبط من أجل", - "alignRight": "محاذاة لليمين", - "getStartPosition": "الحصول على موضع البداية", - "getEndPosition": "الحصول على موضع النهاية", "useSource": "استخدام المصدر", - "useSourceFolder": "استخدام مجلد المصدر", - "useSourceResolution": "استخدام دقة المصدر", - "outputSettings": "ملف/مجلد الإخراج...", "fontSizeFactor": "معامل حجم الخط", "boxType": "نوع المربع", - "fixRightToLeft": "إصلاح الكتابة من اليمين إلى اليسار", - "cut": "قص", "fromTime": "من الوقت", "toTime": "إلى الوقت", "audioEncoding": "ترميز الصوت", "outputProperties": "خصائص الإخراج...", "videoFileSize": "حجم ملف الفيديو", "oneBox": "مربع واحد", - "boxPerLine": "مربع لكل سطر", - "logoInfo": "اختر صورة PNG واسحبها لتحديد موضعها على الفيديو." + "logoInfo": "اختر صورة PNG واسحبها لتحديد موضعها على الفيديو.", + "noSubtitlesGenerateAnyway": "لا توجد أسطر ترجمة لدمجها.\n\nهل تريد توليد الفيديو بدون ترجمة؟", + "noSubtitlesInXItemsGenerateAnyway": "{0} عنصر (عناصر) دفعي لا يحتوي على أسطر ترجمة لدمجها.\n\nهل تريد توليد مقاطع الفيديو هذه بدون ترجمة؟" }, "videoTransparent": { - "title": "إنشاء فيديو شفاف مع الترجمة", - "infoAssaOff": "ملاحظة: تنسيق Advanced SubStation Alpha مدعوم.", - "infoAssaOn": "ملاحظة: سيُستخدم تنسيق Advanced SubStation Alpha :)" + "title": "إنشاء فيديو شفاف مع الترجمة" }, "audioToText": { "title": "تحويل الكلام إلى نص", @@ -2419,6 +2625,21 @@ "translateToEnglish": "الترجمة إلى الإنجليزية", "transcribing": "جارٍ التفريغ الصوتي...", "transcribingXOfY": "جارٍ تفريغ {0} من {1}...", + "linesTranscribedXOfYFailedZ": "تم نسخ {0} من {1} سطر - {2} فشل أو لم يحتوِ على كلام.\n\nتحتفظ الأسطر الفاشلة بنصها الحالي. هل تريد تطبيق الأسطر المنسوخة، أم إعادة محاولة الفاشلة (يمكنك تغيير المحرك أو الإعدادات أولاً)؟", + "linesTranscribedXOfYCancelled": "تم إلغاء النسخ بعد {0} من {1} سطر.\n\nهل تريد تطبيق الأسطر المنسوخة؟ تحتفظ الأسطر الأخرى بنصها الحالي.", + "noLinesTranscribed": "تعذّر نسخ أي من الأسطر الـ {0}.\nيرجى مراجعة سجل الأدوات للتفاصيل.", + "applyTranscribedLines": "تطبيق المنسوخ", + "retryFailedLines": "إعادة محاولة الفاشل", + "isolateSpeech": "عزل الكلام (بطيء)", + "isolateSpeechHint": "يزيل الموسيقى والمؤثرات الصوتية قبل النسخ. يقلل الأسطر المفقودة ويحسّن التوقيت في الصوت ذي الموسيقى الصاخبة، لكنه يستغرق تقريبًا مدة الصوت نفسه مع GPU - وأضعافها بدونه.", + "isolatingSpeech": "جارٍ عزل الكلام...", + "isolateSpeechFailed": "تعذّر عزل الكلام - يتم نسخ الصوت الأصلي بدلاً من ذلك.", + "detectSpeakers": "اكتشاف المتحدثين", + "detectSpeakersHint": "يبدأ كل سطر بالمتحدث، مثل \"(speaker 0)\"، باستخدام تمييز المتحدثين Sortformer من NVIDIA (حتى 8 متحدثين). يعمل بشكل أفضل مع المحركات التي تقسم الأسطر عند تغيّر المتحدث، مثل Parakeet وCohere.", + "detectSpeakersNeedsNewerCrispAsr": "تتطلب ميزة \"اكتشاف المتحدثين\" Crisp ASR v{0} أو أحدث، لكن الإصدار v{1} هو المثبت.\n\nحدّث Crisp ASR (زر الترس بجوار المحرك) أو أوقف \"اكتشاف المتحدثين\".", + "xNeedsNewerCrispAsr": "يتطلب {0} Crisp ASR v{1} أو أحدث، لكن الإصدار v{2} هو المثبت.\n\nهل تريد تنزيل التحديث وتثبيته الآن؟", + "vad": "VAD", + "vadHint": "اكتشاف النشاط الصوتي: يُنسخ الكلام فقط، ويُقطع حيث يتوقف المتحدث.\nتلقائي: Silero، وفقط للمحركات التي تحتاجه (Cohere وMega وIndex-Echo).\nSilero وFireRedVAD وWhisper-VAD وWebRTC: مفعّل دائمًا، لكل محركات Crisp ASR. FireRedVAD هو الأدق، وWhisper-VAD يعطي أقل وأنظف التقطيعات لكنه الأبطأ.\nيستخدم Index-Echo دائمًا Silero. الخيارات --vad أو --vad-model أو --chunk-seconds في الإعدادات المتقدمة لها الأولوية.", "inputLanguage": "لغة الإدخال", "advancedWhisperSettings": "معاملات متقدمة لتحويل الكلام إلى نص", "downloadingSpeechToTextEngine": "جارٍ تنزيل محرك تحويل الكلام إلى نص", @@ -2433,8 +2654,6 @@ "addCustomModelDotDotDot": "إضافة نموذج مخصص...", "customModelHelp": "يمكنك استخدام نموذجك الخاص: اختر ملف النموذج (whisper.cpp ggml '.bin') أو مجلد النموذج (مجلد faster-whisper يحتوي على 'model.bin' بداخله). سيُنسخ إلى مجلد النماذج ويُضاف إلى القائمة أعلاه.", "viewToolsLogFile": "عرض ملف سجل الأدوات", - "reDownloadX": "إعادة تنزيل {0}", - "downloadX": "تنزيل {0}", "updateXTitle": "تحديث {0}؟", "updateXMessage": "يتوفر إصدار أحدث من {0}.{1}{1}هل تريد تنزيل التحديث وتثبيته الآن؟", "downloadingSpeechToTextModel": "جارٍ تنزيل نموذج تحويل الكلام إلى نص", @@ -2446,14 +2665,6 @@ "fixCasing": "إصلاح حالة الأحرف", "addPeriods": "إضافة النقاط", "changeUnderlineToColor": "تغيير التسطير إلى لون", - "cueBuilding": "بناء المقاطع (MLX Whisper)", - "cueRebuild": "إعادة بناء المقاطع من الطوابع الزمنية للكلمات", - "cueMaxChars": "الحد الأقصى للأحرف لكل مقطع", - "cueMaxSeconds": "الحد الأقصى للثواني لكل مقطع", - "cueMaxCps": "الحد الأقصى للأحرف في الثانية", - "vocabularyPrompt": "موجّه المفردات (الأسماء، الأماكن، المصطلحات)", - "beamSize": "حجم الشعاع", - "beamSizeNote": "القيمة 0 تفك التشفير بأسرع سرعة. القيمة 5 تعطي أفضل دقة (مثل Faster Whisper) مقابل زيادة في الوقت بنحو 20-30%. نادرًا ما تفيد القيم الأعلى من 5.", "removeNonSpeechLines": "إزالة الأسطر غير الكلامية", "removeNonSpeechLinesHint": "إسقاط الأسطر التي تصف الصوت فقط، مثل \"[موسيقى]\" أو \"(تلاطم الأمواج)\"", "removeRepeatedLines": "إزالة الأسطر المكررة", @@ -2489,14 +2700,11 @@ }, "textToSpeech": { "title": "تحويل النص إلى كلام", - "textToSpeechEngine": "محرك تحويل النص إلى كلام", "reviewAudioSegments": "TTS - مراجعة المقاطع الصوتية", "reviewAudioSegmentsHistory": "TTS - مراجعة سجل الصوت", "stability": "الثبات", "similarity": "التشابه", "speakerBoost": "تعزيز المتحدث", - "styleExaggeration": "المبالغة في النمط", - "regenerateAudioSelectedLine": "إعادة توليد الصوت للسطر المحدد", "generateSpeechFromText": "توليد كلام من النص", "testVoice": "اختبار الصوت", "addAudioToVideoFile": "إضافة الصوت إلى ملف الفيديو", @@ -2515,6 +2723,19 @@ "videoEncodingSettings": "TTS - إعدادات ترميز الفيديو", "elevenLabsSettings": "TTS - إعدادات ElevenLabs", "elevenLabsSettingsResetHint": "إعادة تعيين إعدادات ElevenLabs إلى القيم الافتراضية", + "provider": "المزوّد", + "openAiCompatibleSettings": "TTS - إعدادات متوافقة مع OpenAI", + "customServerUrl": "عنوان URL للخادم المخصص", + "customServerUrlHint": "نقطة نهاية الكلام الكاملة لخادم متوافق مع OpenAI، تُستخدم عندما يكون المزوّد \"مخصص\"، مثل http://localhost:8880/v1/audio/speech", + "customModels": "نماذج مخصصة", + "customModelsHint": "أسماء النماذج مفصولة بفواصل، تُعرض عندما يكون المزوّد \"مخصص\"", + "customVoices": "أصوات مخصصة", + "customVoicesHint": "أسماء الأصوات مفصولة بفواصل، يستخدمها المزوّد \"مخصص\" ونماذج OpenRouter التي لا تنشر قائمة أصوات", + "instructions": "التعليمات", + "instructionsHint": "أسلوب نطق اختياري، مثل \"تحدث بصوت هادئ ودافئ\". يُرسل فقط إلى النماذج التي تدعمه (ليس tts-1/tts-1-hd)", + "openAiSpeedHint": "سرعة الكلام من 0.25 إلى 4.0 (1.0 هي العادية). لا تدعمها جميع النماذج", + "outputFormat": "تنسيق الإخراج", + "outputFormatHint": "تنسيق الصوت المطلوب من الخادم. \"تلقائي\" يطلب MP3 ويتحول إلى PCM للنماذج التي لا تُرجع سوى PCM (مثل Gemini TTS)", "regenerateAudio": "إعادة توليد الصوت", "autoContinuePlaying": "المتابعة التلقائية للتشغيل", "playLine": "تشغيل السطر", @@ -2523,6 +2744,13 @@ "addingAudioToVideoFileDotDotDot": "جارٍ إضافة الصوت إلى ملف الفيديو...", "preparingMergeDotDotDot": "جارٍ تحضير الدمج...", "importVoiceDotDotDot": "استيراد صوت...", + "renameVoiceDotDotDot": "إعادة تسمية الصوت...", + "renameVoiceTitle": "إعادة تسمية الصوت", + "voiceXCouldNotBeRenamedX": "تعذّرت إعادة تسمية الصوت '{0}': {1}", + "deleteVoiceDotDotDot": "حذف الصوت...", + "deleteVoiceTitle": "حذف الصوت", + "deleteVoiceXQuestion": "هل تريد حذف الصوت '{0}'؟\n\nستُزال التسجيل المرجعي وملفاته من القرص.", + "voiceXCouldNotBeDeletedX": "تعذّر حذف الصوت '{0}': {1}", "voiceImportSuccessTitle": "تم استيراد الصوت", "voiceXImported": "تم استيراد الصوت '{0}' بنجاح", "voiceXCouldNotBeImported": "تعذر استيراد الصوت '{0}' - راجع السجل للتفاصيل", @@ -2532,6 +2760,49 @@ "dropAudioFileHereToImportVoice": "أفلِت ملف الصوت هنا لاستيراد الصوت", "dropAudioFileHereHint": ".wav أو .mp3", "voiceCloneTranscriptTitle": "أدخل نص تفريغ الصوت (مطلوب لاستنساخ الصوت)", + "voiceManagerTitle": "TTS - مدير الأصوات", + "voiceManagerDotDotDot": "مدير الأصوات...", + "voiceManagerMenuItem": "مدير أصوات TTS...", + "speakFromCurrentLineTitle": "النطق من السطر الحالي", + "speakFromCurrentLineDotDotDot": "النطق من السطر الحالي...", + "speakFromCurrentLineHint": "يقرأ الأسطر بصوت عالٍ واحدًا تلو الآخر، بدءًا من السطر الحالي. اضغط Escape أو انقر على سطر آخر للإيقاف.", + "stopSpeaking": "إيقاف النطق", + "speakingLineX": "جارٍ نطق السطر {0}... (Escape للإيقاف)", + "playWithSpeechTitle": "التشغيل مع الكلام", + "playWithSpeechDotDotDot": "التشغيل مع الكلام...", + "playWithSpeechHint": "يشغّل الفيديو وينطق كل سطر عندما يصل إليه الفيديو. أوقف مؤقتًا وانتقل كالمعتاد؛ اضغط Escape للإيقاف.", + "lowerVideoVolumeWhileSpeaking": "خفض صوت الفيديو أثناء النطق", + "pauseVideoWhenSpeechRunsLate": "إيقاف الفيديو مؤقتًا عندما يمتد الكلام إلى السطر التالي", + "waitingForSpeechLineX": "جارٍ توليد الكلام للسطر {0}... (Escape للإيقاف)", + "voiceKindClone": "صوت مستنسخ", + "voiceKindPreset": "مدمج", + "voiceKindModel": "نموذج صوت", + "voiceKindOnline": "عبر الإنترنت", + "transcript": "النص المنسوخ", + "transcriptRequiredHint": "مطلوب - يقرأ المحرك هذا النص المنسوخ للتسجيل (ref-text) عند الاستنساخ", + "transcriptOptionalHint": "اختياري - النص المنسوخ الدقيق للتسجيل يحسّن الاستنساخ", + "saveTranscript": "حفظ النص المنسوخ", + "searchVoices": "البحث في الأصوات", + "loadingVoicesDotDotDot": "جارٍ تحميل الأصوات...", + "noVoicesForEngine": "لا توجد أصوات - استورد تسجيلاً أو نزّل حزمة أصوات", + "noVoicesMatchFilter": "لا توجد أصوات تطابق البحث", + "copyVoiceTo": "نسخ الصوت إلى", + "copyVoiceToDotDotDot": "نسخ الصوت إلى محرك...", + "copyingVoiceXToYDotDotDot": "جارٍ نسخ الصوت '{0}' إلى {1}...", + "voiceXCopiedToY": "تم نسخ الصوت '{0}' إلى {1}", + "voiceXCouldNotBeCopiedToY": "تعذّر نسخ الصوت '{0}' إلى {1} - راجع السجل للتفاصيل", + "voiceXAlreadyExistsInYContinue": "يوجد صوت باسم '{0}' بالفعل في {1}.\n\nهل تريد النسخ على أي حال؟", + "openVoicesFolder": "فتح مجلد الأصوات", + "downloadVoicePacksDotDotDot": "تنزيل حزم الأصوات...", + "downloadVoicePacksTitle": "TTS - تنزيل حزم الأصوات", + "voicePackIntro": "حزم الأصوات هي مجموعات من التسجيلات القصيرة والنظيفة مع نصوصها المنسوخة، جاهزة للاستنساخ منها. تُستورد كل حزمة إلى المحرك المختار (تُتخطى الأصوات الموجودة بالفعل) وتتضمن ملف ATTRIBUTION.txt بترخيصها ومصادرها.", + "voicePackDetailsXVoicesYSizeZLicense": "{0} صوت · {1} · {2}", + "installToEngine": "التثبيت في المحرك", + "downloadAndInstall": "التنزيل والتثبيت", + "selectAtLeastOneVoicePack": "حدد حزمة أصوات واحدة على الأقل", + "downloadingXDotDotDot": "جارٍ تنزيل {0}...", + "installingXDotDotDot": "جارٍ تثبيت {0}...", + "xVoicesInstalledYSkipped": "تم تثبيت {0} صوت ({1} موجود بالفعل)", "useSpeechToTextDotDotDot": "استخدام تحويل الكلام إلى نص...", "autoCastMenuItem": "البحث عن أصوات في الفيديو واستنساخها...", "autoCastSpeakersTitle": "الأصوات التي عُثر عليها في الفيديو", @@ -2550,7 +2821,7 @@ "cloneVoicePerLinePreparing": "جارٍ أخذ صوت كل سطر من الفيديو...", "cloneVoicePerLineNeedsVideo": "يتطلب استنساخ صوت كل سطر الفيديو الذي تنتمي إليه الترجمة. افتح الفيديو وحاول مرة أخرى.", "cloneVoicePerLineNoClips": "تعذر أخذ أي صوت من الفيديو، لذا لا يوجد ما يُستنسخ منه. تأكد من أن الفيديو يحتوي على مسار صوتي.", - "cloneVoicePerLineNeedsOriginalSubtitleX": "لا يستطيع {0} استنساخ سطر إلا إذا عرف ما يُقال في الفيديو عند ذلك السطر، وهو ما يأتي من ترجمة اللغة الأصلية. لا توجد ترجمة أصلية محمّلة، لذا سيُنطق كل سطر بأول صوت مستورد بدلاً من الصوت الموجود في الفيديو.\n\nافتح الترجمة الأصلية (ملف > فتح الأصل...) بجوار الترجمة، ثم ولّد مرة أخرى.", + "cloneVoicePerLineTranscribeClipsXYZ": "لا يستطيع {0} استنساخ سطر إلا إذا عرف ما يُقال في الفيديو عند ذلك السطر. هذا غير معروف لـ {1} من {2} سطر - وعادةً يأتي من ترجمة اللغة الأصلية (ملف > فتح الأصلي...).\n\nهل تريد نسخ تلك الأسطر من الفيديو باستخدام تحويل الكلام إلى نص الآن؟\n\nنعم: اختر المحرك واللغة المنطوقة في الفيديو، وتُنسخ المقاطع المرجعية قبل توليد الكلام.\nلا: التوليد على أي حال - تُنطق تلك الأسطر بصوت عادي بدلاً من الصوت الموجود في الفيديو.", "voiceCloneConsentTitle": "استنساخ الصوت - قبل أن تبدأ", "voiceCloneConsentHeader": "أنت على وشك استنساخ صوت", "voiceCloneConsentIntro": "الاستنساخ ينسخ صوت شخص حقيقي. ولهذا قواعد في معظم الأماكن، وفي الاتحاد الأوروبي واجبات قانونية تقع عليك أنت، لا على Subtitle Edit. يُرجى قراءة هذا مرة واحدة.", @@ -2567,10 +2838,29 @@ "advancedTtsSettings": "إعدادات TTS المتقدمة", "advancedTtsAudioProcessing": "معالجة الصوت", "advancedTtsOutput": "الإخراج", + "advancedTtsVoiceCloning": "استنساخ الصوت", + "cleanCloneReferences": "تنظيف مراجع استنساخ الصوت (Sidon)", + "cleanCloneReferencesDescription": "يزيل الموسيقى والضوضاء والصدى من الصوت الذي يُستنسخ منه الصوت: المقاطع المأخوذة من الفيديو والتسجيلات المستوردة في مدير الأصوات. يستخدم نموذج استعادة الكلام Sidon على audio.cpp (تنزيل 940 MB). لم يعد الصوت المستنسخ ينسخ الخلفية، لكن الكلام الهادئ جدًا أو المتداخل قد يخرج مكتومًا.", + "cleaningCloneReferencesDotDotDot": "جارٍ تنظيف مراجع استنساخ الصوت...", + "downloadSidonTitle": "تنزيل Sidon؟", + "downloadSidonQuestionX": "يتطلب تنظيف مراجع استنساخ الصوت نموذج استعادة الكلام Sidon ({0}).\n\nهل تريد تنزيله الآن؟ بدونه تُستخدم المراجع كما هي.", "proAudioPostProcessing": "معالجة صوتية لاحقة احترافية", "proAudioPostProcessingDescription": "يطبّق دفء الموازن، وبوابة الضوضاء، والضغط، وتسوية مستوى الصوت (-16 LUFS)، والتلاشي للداخل/للخارج على كل مقطع.", + "generatingSpeechSegmentXOfY": "جارٍ توليد الكلام: المقطع {0} من {1}", + "adjustingSpeedSegmentXOfY": "جارٍ ضبط السرعة: المقطع {0} من {1}", + "mergingAudioSegmentXOfY": "جارٍ دمج الصوت: المقطع {0} من {1}", + "postProcessingSegmentXOfY": "المعالجة اللاحقة: المقطع {0} من {1}", "audioDucking": "خفض الصوت التلقائي", "audioDuckingDescription": "يخفض مستوى صوت الفيديو الأصلي ويمزجه مع صوت TTS، بحيث يظل المسار الصوتي الأصلي مسموعًا بخفوت.", + "removeOriginalSpeech": "إزالة الكلام الأصلي (بطيء)", + "removeOriginalSpeechDescription": "يحتفظ بالموسيقى والمؤثرات الصوتية للفيديو الأصلي لكنه يزيل كلامه، ويمزج الكلام الجديد فوقها. يستغرق تقريبًا مدة الفيديو نفسه مع GPU، وأضعافها بدونه. عند تفعيل خفض الصوت التلقائي، يُطبق مستواه على الموسيقى والمؤثرات. لا ينطبق إلا عند إضافة الكلام إلى ملف الفيديو.", + "removingOriginalSpeech": "جارٍ إزالة الكلام الأصلي...", + "removeOriginalSpeechFailed": "تعذّرت إزالة الكلام الأصلي - أُضيف الكلام إلى الفيديو بدون ذلك.", + "speechRemovalModel": "النموذج", + "speechRemovalModelDescription": "أفضل جودة تحتفظ بأكبر قدر من الموسيقى والمؤثرات الصوتية. السريع أسرع بنحو ثلاث مرات، مع فقدان قدر أكبر قليلاً من الموسيقى.", + "speechRemovalBestQuality": "أفضل جودة (Mel-Band RoFormer)", + "speechRemovalFast": "سريع (HTDemucs)", + "videoTruncatedWarning": "الصورة في ملف الفيديو الجديد تتوقف بعد {0}، لكن طول الفيديو الأصلي {1} - ستتجمد الصورة بينما يستمر الصوت.\n\nتم الاحتفاظ بالملف. راجع error-log.txt في مجلد بيانات Subtitle Edit لمخرجات ffmpeg.", "originalVolumePercent": "نسبة مستوى الصوت الأصلي %", "vadSilenceCompression": "ضغط الصمت بـ VAD", "vadSilenceCompressionDescription": "يقصّر فترات التوقف بين الكلمات قبل تغيير الإيقاع. يستخدم كشف نشاط الصوت لضغط فجوات الصمت فقط مع إبقاء الكلام دون تغيير. هذه هي الخطوة الأولى المفضّلة، إذ تقلل المدة دون أي فقدان في الجودة.", @@ -2644,7 +2934,6 @@ "subtitleMergedLinesAppliedPlural": "تم تطبيق {0} عملية دمج أسطر من تحويل النص إلى كلام" }, "shotChanges": { - "titleGenerateOrImport": "إنشاء/استيراد تغييرات اللقطات", "generateShotChanges": "إنشاء تغييرات اللقطات", "importShotChanges": "استيراد تغييرات اللقطات", "generateShotChangesWithFfmpeg": "إنشاء تغييرات اللقطات باستخدام ffmpeg", @@ -2654,7 +2943,9 @@ "timeCodeFormatColon": "صيغة الرمز الزمني:", "shotChangesList": "قائمة تغييرات اللقطات", "shotChangesClearQuestion": "هل أنت متأكد أنك تريد مسح جميع تغييرات اللقطات؟", - "deleteSelectedShotChangeQuestion": "هل أنت متأكد أنك تريد حذف تغيير اللقطة المحدد؟" + "deleteSelectedShotChangeQuestion": "هل أنت متأكد أنك تريد حذف تغيير اللقطة المحدد؟", + "shotChanges": "تغييرات اللقطات", + "exportShotChanges": "تصدير تغييرات اللقطات" }, "chapters": { "title": "الفصول", @@ -2684,7 +2975,6 @@ "scaleTimesDescription": "تحجيم وقت كل فصل من معدل إطارات إلى آخر.", "fromFrameRate": "من", "toFrameRate": "إلى", - "apply": "تطبيق", "writeToVideo": "كتابة إلى الفيديو...", "writeToVideoTitle": "كتابة الفصول إلى الفيديو", "writeToVideoDescription": "تُكتب الفصول في نسخة من ملف الفيديو. لا يُعاد ترميز أي شيء، لذا فالعملية سريعة وبلا فقد.", @@ -2694,7 +2984,6 @@ "writtenToX": "كُتبت الفصول إلى {0}", "unableToWriteChapters": "تعذرت كتابة الفصول في ملف الفيديو.", "chaptersSavedToX": "حُفظت الفصول في {0}", - "noVideoLoaded": "لم يُحمَّل أي فيديو", "emptyListCallToAction": "لا توجد فصول بعد - أضف فصلاً عند موضع الفيديو، أو استوردها من فيديو أو ملف." }, "videoOcr": { @@ -2705,10 +2994,6 @@ "bottomHalf": "النصف السفلي", "fullFrame": "الإطار الكامل", "engine": "محرك OCR", - "language": "اللغة", - "url": "URL", - "model": "النموذج", - "apiKey": "مفتاح API", "scan": "مسح", "framesPerSecond": "الإطارات في الثانية", "textBrightnessMinimum": "الحد الأدنى لسطوع النص (0=إيقاف)", @@ -2723,10 +3008,10 @@ "runningOcrXY": "جارٍ تشغيل OCR... {0}/{1}", "noLinesFoundTitle": "لم يُعثر على ترجمة", "noLinesFoundMessage": "لم يُعثر على نص في منطقة المسح، جرّب ضبط منطقة المسح أو المحرك أو الحد الأدنى للسطوع.", + "ocrStoppedEarlyMessage": "توقف محرك OCR قبل قراءة جميع الإطارات، لذا تم الاحتفاظ بالأسطر التي عُثر عليها حتى الآن والباقي مفقود.{0}{0}{1}", "linesFoundX": "تم العثور على {0} سطر", "refiningTimingXY": "جارٍ تحسين التوقيت... {0}/{1}", "fixOcrErrors": "إصلاح أخطاء التعرف الضوئي على الحروف", - "dictionary": "القاموس", "editLineX": "تحرير السطر {0}", "downloadDictionaryHint": "تنزيل قاموس تدقيق إملائي...", "framesPerSecondHint": "عدد الإطارات التي تُفحص في الثانية. القيمة 5 تكفي للترجمات العادية؛ والقيم الأعلى تلتقط الأسطر القصيرة جداً وتُحكم التجميع، لكنها تكلف وقت تعرف ضوئي أكبر.", @@ -2743,7 +3028,58 @@ "testOcr": "اختبار الإطار الحالي", "testOcrRunning": "جارٍ اختبار OCR على الإطار الحالي...", "testOcrResultX": "نتيجة الاختبار: {0}", - "testOcrNoTextFound": "الاختبار: لم يُعثر على نص في منطقة المسح" + "testOcrNoTextFound": "الاختبار: لم يُعثر على نص في منطقة المسح", + "engineSettings": "إعدادات محرك OCR", + "engineBuiltIn": "مدمج في نظام التشغيل", + "engineExternalServer": "خادم خارجي (مثبت ومُدار خارج Subtitle Edit)", + "engineCloudApi": "Cloud API (يتطلب مفتاح API)", + "engineNothingToInstall": "لا شيء للتثبيت", + "engineModelsMissing": "المحرك مثبت، والنماذج مفقودة", + "website": "الموقع الإلكتروني" + }, + "backgroundMusic": { + "title": "توليد موسيقى الخلفية", + "generateBackgroundMusicDotDotDot": "توليد موسيقى الخلفية...", + "preset": "الإعداد المسبق", + "prompt": "المطالبة", + "tempoBpm": "الإيقاع (BPM)", + "generateSeconds": "التوليد (ثوانٍ)", + "seed": "البذرة", + "randomSeed": "عشوائي", + "outputLength": "طول الإخراج", + "outputLengthVideoX": "{0} (طول الفيديو - تتكرر الموسيقى بسلاسة)", + "musicVolumePercent": "مستوى صوت الموسيقى (%)", + "removeExistingAudioTracks": "إزالة المسارات الصوتية الموجودة", + "originalAudioVolumePercent": "مستوى الصوت الأصلي (%)", + "saveAudioDotDotDot": "حفظ الصوت...", + "addToVideoDotDotDot": "إضافة إلى الفيديو...", + "engineInfo": "ACE-Step 1.5 Turbo عبر audio.cpp (ترخيص MIT) - يعمل محليًا", + "presetCooking": "الطبخ / الخَبز", + "presetTech": "التقنية / مراجعة الأجهزة", + "presetForest": "الغابة / الطبيعة", + "presetRelaxingPiano": "بيانو مريح", + "presetLofiVlog": "مدونة فيديو Lo-fi", + "presetCorporate": "الشركات / الشروحات", + "loadingModel": "جارٍ تحميل النموذج...", + "composing": "جارٍ التأليف...", + "generatingAudio": "جارٍ توليد الصوت...", + "decodingAudio": "جارٍ فك ترميز الصوت...", + "creatingLoop": "جارٍ إنشاء حلقة سلسة...", + "resultLoopXYZ": "الحلقة: {0} عند {1} BPM، تطابق الوصلة {2}%", + "resultNoLoopX": "الموسيقى جاهزة: {0}", + "addingMusicToVideo": "جارٍ إضافة الموسيقى إلى الفيديو...", + "downloadModelTitle": "تنزيل نموذج الموسيقى؟", + "downloadModelQuestionX": "يتطلب توليد الموسيقى نموذج ACE-Step 1.5 ({0}).\n\nهل تريد تنزيل النموذج؟", + "downloadingModel": "جارٍ تنزيل نموذج ACE-Step 1.5...", + "saveAudioTitle": "حفظ موسيقى الخلفية", + "audioFileSavedX": "تم حفظ الملف الصوتي: {0}", + "unableToGenerateMusic": "تعذّر توليد الموسيقى", + "unableToAddMusicToVideo": "تعذّرت إضافة الموسيقى إلى الفيديو", + "outputLengthTextToSpeech": "يتبع الكلام المولَّد - تتكرر الموسيقى بسلاسة وتنخفض أثناء حديث أحدهم", + "addBackgroundMusic": "إضافة موسيقى خلفية", + "addBackgroundMusicHint": "توليد موسيقى محليًا باستخدام ACE-Step 1.5 ومزجها تحت الكلام - تنخفض أثناء حديث أحدهم", + "generatingBackgroundMusicDotDotDot": "جارٍ توليد موسيقى الخلفية...", + "mixingBackgroundMusicDotDotDot": "جارٍ مزج موسيقى الخلفية..." }, "goToVideoPosition": "الانتقال إلى موضع الفيديو", "goToVideoPositionDotDotDot": "الانتقال إلى موضع الفيديو...", @@ -2754,30 +3090,88 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "الترجمة الثانوية على مشغل الفيديو، فتح...", "openSecondarySubtitleOnVideoPlayer": "الترجمة الثانوية (على مشغل الفيديو)", "removeSecondarySubtitleOnVideoPlayer": "الترجمة الثانوية على مشغل الفيديو، إزالة", + "editSecondarySubtitleSettings": "تحرير إعدادات الترجمة الثانية", + "editSecondarySubtitleSettingsDotDotDot": "تحرير إعدادات الترجمة الثانية...", + "secondarySubtitleRememberSettings": "تذكر هذه الإعدادات", + "secondarySubtitleDoNotShowAgain": "عدم إظهار مربع الحوار هذا مجددًا", + "secondarySubtitleJustifyLines": "ضبط محاذاة الأسطر", "openRecentVideo": "فتح فيديو حديث", "clearRecentVideos": "مسح مقاطع الفيديو الحديثة", "cutVideoTitle": "قص الفيديو", "cutVideoDotDotDot": "قص الفيديو...", + "remuxVideoTitle": "إعادة تغليف الفيديو (Remux)", + "remuxVideoDotDotDot": "إعادة تغليف الفيديو (Remux)...", + "remuxVideoInputVideo": "فيديو الإدخال:", + "remuxVideoMultipleTracksRequiresMkv": "تتطلب المسارات الصوتية أو مسارات الترجمة المتعددة حاوية MKV. تم تحويل تنسيق الإخراج تلقائيًا إلى .mkv.", + "remuxVideoOutputFormat": "تنسيق الإخراج:", + "remuxVideoOutputFile": "ملف الإخراج:", + "remuxVideoRemuxing": "جارٍ إعادة تغليف الفيديو والصوت...", + "remuxVideoFinalizing": "جارٍ إنهاء ملف الإخراج (نقل الفهرس إلى البداية)...", + "remuxVideoCompleted": "تمت إعادة تغليف الفيديو بنجاح.", + "remuxVideoFailed": "فشلت إعادة تغليف الفيديو.", + "remuxVideoPleaseSelectBoth": "يرجى تحديد ملفي الفيديو والصوت كليهما.", + "remuxVideoAssRequiresMkv": "تتطلب ترجمات ASS/SSA حاوية MKV للحفاظ على كل التنسيقات والأنماط.", + "remuxVideoSccRequiresMov": "تُضمَّن ترجمات Scenarist (.scc) كتسميات توضيحية مغلقة CEA-608، والتي تتطلب حاوية MOV أو MPG. تم تحويل تنسيق الإخراج تلقائيًا إلى .mov.", + "remuxVideoSccNotWithWebM": "تحتاج التسميات التوضيحية المغلقة Scenarist (.scc) إلى حاوية MOV، والتي لا يمكنها احتواء فيديو VP9/AV1 لملف .webm. أزل ملف .scc أو حوّله إلى تنسيق ترجمة آخر.", + "remuxVideoMpgMaxTwoCaptionTracks": "يحتوي ملف .mpg على مسارين كحد أقصى للتسميات التوضيحية المغلقة (CC1 وCC3) - أزل ملفات ترجمة بحيث يتبقى واحد أو اثنان.", + "remuxVideoMccRequiresMpg": "تُضمَّن ترجمات MacCaption (.mcc) كتسميات توضيحية مغلقة CEA-608/708 في فيديو MPEG-2، الذي يتطلب حاوية MPG. تم تحويل تنسيق الإخراج تلقائيًا إلى .mpg.", + "remuxVideoMpgReencodeVideoX": "تحتاج التسميات التوضيحية المغلقة في ملف .mpg إلى فيديو MPEG-2، والفيديو هو {0}. هل تريد إعادة ترميز الفيديو إلى MPEG-2؟ يستغرق ذلك وقتًا أطول ويخفض الجودة قليلاً.", + "remuxVideoFileHasNoAudioX": "\"{0}\" لا يحتوي على مسار صوتي، لذا لا يمكن استخدامه كمصدر صوت.", + "remuxVideoAddingClosedCaptions": "جارٍ إضافة التسميات التوضيحية المغلقة...", + "remuxVideoSelectAudioTrack": "تحديد المسار الصوتي", + "remuxVideoSelectAudioTrackFor": "تحديد المسار الصوتي لـ {0}", + "remuxVideoSelectAudioTrackPrompt": "يحتوي الملف '{0}' على {1} مسارات صوتية. يرجى تحديد المسار الصوتي لإعادة التغليف:", + "remuxVideoVideoFile": "فيديو", + "remuxVideoAudioFile": "صوت", + "remuxVideoAudioFiles": "الملفات الصوتية:", + "remuxVideoSubtitleFiles": "ملفات الترجمة (اختياري، ترجمات منفصلة):", + "remuxVideoSelectAudioTrackDotDotDot": "تحديد المسار الصوتي...", + "remuxVideoFilesX": "{0} ملفات", + "remuxVideoMixAudio": "مزج الصوت في مسار واحد", + "remuxVideoVolumePercent": "مستوى الصوت %:", + "remuxVideoVolumeX": "مستوى الصوت {0}%", + "remuxVideoFastStart": "التحسين للبث عبر الويب (نقل الفهرس إلى المقدمة - أبطأ)", "embedSubtitlesDotDotDot": "إضافة/إزالة الترجمة المضمّنة...", "generateTimeCodes": "إنشاء الرموز الزمنية", "checkeredImage": "صورة مربّعات", - "saveVideoAsTitle": "حفظ الفيديو باسم", "promptForFfmpegParamsAndGenerate": "طلب معاملات ffmpeg والإنشاء", "cutVideoCutSegments": "قص المقاطع", "cutVideoMergeSegments": "دمج المقاطع", "cutVideoSplitSegments": "حفظ المقاطع كلٌ على حدة", - "cutVideoType": "نوع القص", - "mpvRenderAuto": "تلقائي", - "mpvRenderNative": "أصلي", - "mpvRenderOpenGl": "OpenGL", - "mpvRenderSoftware": "برمجي (بطيء)", "cutVideoAlsoCutSubtitle": "قص الترجمة أيضاً", "cutVideoSubtitleFileGeneratedX": "تم توليد ملف الترجمة: {0}", + "cutVideoTransition": "الانتقال بين المقاطع", + "cutVideoTransitionDurationSeconds": "المدة (ثوانٍ)", + "cutVideoFadeInSeconds": "التلاشي من الأسود في البداية (ثوانٍ)", + "cutVideoFadeOutSeconds": "التلاشي إلى الأسود في النهاية (ثوانٍ)", + "cutVideoPreviewTransition": "معاينة الانتقال", + "cutVideoPreviewTransitionTitle": "معاينة الانتقال", + "cutVideoPreviewNeedsJoin": "لا يوجد وصل للمعاينة - أضف مقطعين على الأقل للدمج، أو مقطعًا لقصه من المنتصف.", + "cutVideoTransitionInfoX": "يتداخل كل انتقال مع الأجزاء التي يصلها، لذا يقصر الإخراج بمقدار {0} ثانية لكل وصل. يُعاد توقيت الترجمة المقصوصة لتتطابق.", + "cutVideoTransitionFade": "تلاشٍ", + "cutVideoTransitionFadeBlack": "تلاشٍ عبر الأسود", + "cutVideoTransitionFadeWhite": "تلاشٍ عبر الأبيض", + "cutVideoTransitionFadeGrays": "تلاشٍ عبر الرمادي", + "cutVideoTransitionDissolve": "ذوبان", + "cutVideoTransitionWipeLeft": "مسح لليسار", + "cutVideoTransitionWipeRight": "مسح لليمين", + "cutVideoTransitionWipeUp": "مسح للأعلى", + "cutVideoTransitionWipeDown": "مسح للأسفل", + "cutVideoTransitionSlideLeft": "انزلاق لليسار", + "cutVideoTransitionSlideRight": "انزلاق لليمين", + "cutVideoTransitionSlideUp": "انزلاق للأعلى", + "cutVideoTransitionSlideDown": "انزلاق للأسفل", + "cutVideoTransitionSmoothLeft": "انسيابي لليسار", + "cutVideoTransitionSmoothRight": "انسيابي لليمين", + "cutVideoTransitionCircleOpen": "فتح دائري", + "cutVideoTransitionCircleClose": "إغلاق دائري", + "cutVideoTransitionRadial": "شعاعي", + "cutVideoTransitionPixelize": "تقطيع إلى بكسلات", + "cutVideoTransitionBlur": "تمويه", "importCurrentSubtitle": "استيراد الترجمة الحالية", "addRemoveEmbeddedSubtitlesTitle": "إضافة/إزالة الترجمة المضمّنة", "addRemoveEmbeddedSubtitlesMp4Title": "إضافة/إزالة الترجمة المضمّنة (MP4)", "addCurrentSubtitle": "إضافة الترجمة الحالية", - "embeddedTrackColumnNew": "جديد", "embeddedTrackNoSubtitlesFoundTitle": "لم يُعثر على ترجمة", "embeddedTrackNoSubtitlesFoundMessage": "ملف الترجمة المحدد لا يحتوي على أي ترجمة.", "embeddedTrackNoTracksTitle": "لم تُضَف أي مسارات", @@ -2789,7 +3183,7 @@ "embeddedTrackGeneratingVideoXY": "جارٍ إنشاء الفيديو... {0}% {1}", "embeddedTrackGeneratingVideo": "جارٍ إنشاء الفيديو...", "mp4FilesFilter": "ملفات MP4", - "titleOrLanguage": "العنوان/اللغة", + "embeddedTracksPickVideoHint": "اختر ملف فيديو، أو أفلته هنا، لرؤية مسارات الترجمة الخاصة به.", "viewMatroskaTrackX": "عرض مسار Matroska - {0}", "resolutionSeparator": "x", "openFromUrlTitle": "فتح ملف فيديو من URL", @@ -2799,9 +3193,7 @@ "openFromUrlDownloadAndOpen": "تنزيل وفتح", "openFromUrlDownloadAndOpenDescription": "حفظ الفيديو محليًا ثم فتحه.", "openFromUrlDownloadAndOpenNote": "مطلوب لتحويل الكلام إلى نص وقمم الموجة الصوتية.", - "openFromUrlMissing": "الرجاء إدخال عنوان URL للفيديو أولًا.", "openFromUrlDownloadingTitle": "جارٍ تنزيل الفيديو", - "openFromUrlSaveAs": "حفظ الفيديو باسم", "openFromUrlDownloadSubtitles": "تنزيل الترجمة أيضًا", "openFromUrlDownloadVideo": "تنزيل الفيديو", "openFromUrlIncludeAutoGeneratedSubtitles": "تضمين الترجمات المولّدة تلقائياً (اللغة الأصلية)", @@ -2838,12 +3230,15 @@ "reEncodeGeneratingDone": "اكتمل الإنشاء", "reEncodeGeneratedFilesX": "الملفات المُنشأة ({0}):", "reEncodeFfmpegParameters": "معاملات ffmpeg", + "analyzingVideoX": "جارٍ تحليل الفيديو... {0}% {1}", + "analyzingVideoXofY": "جارٍ تحليل الفيديو {0}/{1}... {2}% {3}", + "backgroundImageFileNotSelected": "لم يتم تحديد ملف صورة الخلفية", + "backgroundImageFileDoesNotExistX": "ملف صورة الخلفية غير موجود: {0}", "voices": "الأصوات", "presets": "الإعدادات المسبقة", "talkerX": "المتحدث {0}", "baseModel": "النموذج الأساسي", "turboModel": "النموذج السريع", - "ttsUpdateX": "تحديث {0}", "ttsEngineNotInstalled": "{0} غير مثبت", "ttsEngineUpdateAvailable": "{0} - يتوفر تحديث", "ttsEngineTooOldUpdateRequired": "{0} قديم جداً - التحديث مطلوب", @@ -2866,19 +3261,25 @@ "cloneVoiceTo": "استنساخ الصوت إلى", "cloneVoiceNameTitle": "اسم الصوت الجديد", "cloneVoiceExtractFailed": "تعذر استخراج الصوت للسطر المحدد.", + "lineXHasNoDuration": "السطر {0} ليس له مدة (وقت النهاية ليس بعد وقت البداية)، لذا لا يوجد صوت لاستخراجه.", + "audioClipsSkippedLinesX": "تعذّر استخراج أي صوت لهذه الأسطر، لذا تم تخطيها: {0}", "toggleShotChange": "تبديل تغيير اللقطة", "resetWaveformZoomAndSpeed": "إعادة تعيين تكبير الموجة الصوتية وسرعتها", "showOriginalSubtitle": "إظهار الترجمة الأصلية", + "timelineGroupTracksBy": "تجميع مسارات الترجمة حسب", + "timelineShowThumbnails": "إظهار الصور المصغرة للفيديو", + "showSpeechOnly": "إظهار الكلام فقط (بطيء التوليد)", + "isolatingSpeechForWaveformX": "جارٍ عزل الكلام للموجة الصوتية... {0}", + "isolatingSpeechForWaveformFailed": "تعذّر عزل الكلام للموجة الصوتية - راجع سجل الأدوات", + "speechOnlyWaveformReady": "تُظهر الموجة الصوتية الآن الكلام فقط", "showOnlyWaveform": "عرض الموجة الصوتية فقط", "showOnlySpectrogram": "عرض الطيف الترددي فقط", "showWaveformAndSpectrogram": "عرض الموجة الصوتية والطيف الترددي", - "spectrogramClassic": "كلاسيكي", "spectrogramClassicViridis": "Viridis", "spectrogramClassicPlasma": "Plasma", "spectrogramClassicInferno": "Inferno", "spectrogramClassicTurbo": "Turbo", "spectrogramNeon": "Neon", - "waveformDrawStyleClassic": "كلاسيكي", "waveformDrawStyleFancy": "مزخرف", "setVideoPositionAndPauseAndSelectSubtitle": "تعيين موضع الفيديو والإيقاف المؤقت وتحديد الترجمة", "setVideopositionAndPauseAndSelectSubtitleAndCenter": "تعيين موضع الفيديو والإيقاف المؤقت وتحديد الترجمة والتوسيط", @@ -2888,7 +3289,6 @@ }, "sync": { "visualSync": "المزامنة المرئية", - "sync": "المزامنة", "startScene": "مشهد البداية", "endScene": "مشهد النهاية", "playTwoSecondsAndBack": "تشغيل ثانيتين والرجوع", @@ -2904,19 +3304,18 @@ "adjustSelectedLinesAndForward": "ضبط الأسطر المحددة وما بعدها", "toFrameRate": "إلى معدل الإطارات", "fromFrameRate": "من معدل الإطارات", + "videoXFrameRateY": "{0} - {1} fps", "adjustAllTimes": "ضبط كل الأوقات (الظهور مبكراً/متأخراً)", "showEarlier": "الظهور مبكراً", "showLater": "الظهور متأخراً", - "changeFrameRate": "تغيير معدل الإطارات", "setSyncPoint": "تعيين نقطة مزامنة", "setSyncPointViaVideo": "تعيين نقطة المزامنة عبر الفيديو...", "syncPointTimeCode": "الرمز الزمني لنقطة المزامنة", "syncPoints": "نقاط المزامنة", "pointSync": "المزامنة بالنقاط", "pointSyncViaOther": "المزامنة بالنقاط عبر ترجمة أخرى", - "adjustmentX": "الضبط: {0}", - "totalAdjustmentX": "إجمالي الضبط: {0}", - "syncPointCandidateInfo": "تُميَّز الأسطر التي تبدأ بعد {0}+ ثانية من الصمت - فهي غالباً ما تشكّل نقاط مزامنة موثوقة", + "syncPointCandidateAfterInfo": "تُبرز الأسطر التي يليها {0}+ ثانية من الصمت - فهي غالبًا نقاط مزامنة موثوقة", + "gapAfter": "الفجوة بعد", "adjustAllShortcuts": "اختصارات لوحة المفاتيح:\r\n\r\n• Shift + يسار/يمين: تحريك 10 ms\r\n• Ctrl + يسار/يمين: تحريك 100 ms\r\n• Alt + يسار/يمين: تحريك 500 ms", "adjustAllShortcutsFrames": "اختصارات لوحة المفاتيح:\r\n\r\n• Shift + يسار/يمين: تحريك إطار واحد\r\n• Ctrl + يسار/يمين: تحريك 10 إطارات\r\n• Alt + يسار/يمين: تحريك ثانية واحدة", "offsetInSeconds": "الإزاحة بالثواني", @@ -2936,6 +3335,7 @@ "lineMerge": "دمج الأسطر", "delayInSecondsBetweenRequests": "التأخير بالثواني بين الطلبات", "maxBytesPerRequest": "أقصى عدد بايت لكل طلب", + "keepMusicLinesUntranslated": "عدم ترجمة الأسطر داخل رموز الموسيقى (♪ ... ♪)", "promptText": "نص الموجِّه", "resetPromptToDefault": "إعادة تعيين الموجّه إلى الافتراضي", "translateEachLineSeparately": "ترجمة كل سطر على حدة", @@ -2949,11 +3349,10 @@ "readyToTranslate": "جاهز للترجمة", "translating": "جارٍ الترجمة...", "translationComplete": "اكتملت الترجمة", + "translateInPlaceNoOriginal": "الترجمة في المكان (دون إنشاء أصلي)", "translationCancelled": "أُلغيت الترجمة", "swapLanguages": "تبديل لغتي المصدر والهدف", "xIsAlreadyDownloadedReDownload": "{0} مُنزَّل بالفعل. إعادة التنزيل؟", - "advancedDotDotDot": "متقدم...", - "advancedSettings": "الإعدادات المتقدمة", "advancedSettingsSubtitle": "خيارات الدفعات والسياق وأخذ العينات لمحرك llama.cpp المتقدم", "context": "السياق", "synopsis": "الملخص", @@ -2977,6 +3376,7 @@ "useOnlyExtraServerParametersHint": "بدء llama-server بالمعاملات أعلاه بدلاً من ضبط Subtitle Edit الخاص - يبقى تعيين النموذج والمضيف والمنفذ فقط", "serverRunningAtX": "الخادم يعمل على {0}", "customPromptHint": "تعليمات مخصصة ({0} = اللغة المصدر، {1} = اللغة الهدف)؛ الفراغ = الموجّه المدمج", + "editTranslationHint": "انقر على ترجمة الصف المحدد لتحريرها (Enter للحفظ، Escape للإلغاء)", "llamaCppDownloadEngineAndModelPrompt": "يتطلب llama.cpp تنزيل محرك llama-server ونموذج ترجمة. هل تريد التنزيل الآن؟", "llamaCppDownloadEnginePrompt": "يتطلب llama.cpp تنزيل محرك llama-server. هل تريد التنزيل الآن؟", "llamaCppDownloadModelPrompt": "يتطلب llama.cpp تنزيل نموذج الترجمة المحدد. هل تريد التنزيل الآن؟" @@ -2989,7 +3389,6 @@ "dialogStyleDashBothLinesWithSpace": "شرطة في كلا السطرين مع مسافة", "dialogStyleDashBothLinesWithoutSpace": "شرطة في كلا السطرين بدون مسافة", "continuationStyle": "نمط الاستمرار", - "continuationStyleNone": "بلا", "continuationStyleNoneTrailingDots": "بلا، نقاط للوقفات (في النهاية فقط)", "continuationStyleNoneLeadingTrailingDots": "بلا، نقاط للوقفات", "continuationStyleNoneTrailingEllipsis": "بلا، علامة حذف للوقفات (في النهاية فقط)", @@ -3000,7 +3399,6 @@ "continuationStyleLeadingTrailingEllipsis": "علامة حذف", "continuationStyleLeadingTrailingDash": "شرطة", "continuationStyleLeadingTrailingDashDots": "شرطة، لكن نقاط للوقفات", - "continuationStyleCustom": "مخصص", "cpsLineLengthStyle": "حرف/ثانية / طول السطر", "cpsLineLengthStyleCalcAll": "عد جميع الأحرف", "cpsLineLengthStyleCalcNoSpaceCpsOnly": "عد الكل عدا المسافة، حرف/ثانية فقط", @@ -3013,14 +3411,6 @@ "cpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly": "بلا مسافة أو علامات ترقيم، حرف/ثانية فقط", "cpsLineLengthStyleCalcIgnoreArabicDiacritics": "تجاهل التشكيل العربي", "cpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "تجاهل التشكيل العربي، بلا مسافة", - "timeCodeModeHhMmSsMs": "HH:MM:SS:MS", - "timeCodeModeHhMmSsFf": "HH:MM:SS:FF", - "splitBehaviorPrevious": "إضافة فجوة على يسار نقطة التقسيم (التركيز على اليمين)", - "splitBehaviorHalf": "إضافة فجوة في منتصف نقطة التقسيم (التركيز على اليسار)", - "splitBehaviorNext": "إضافة فجوة على يمين نقطة التقسيم (التركيز على اليسار)", - "subtitleListActionNothing": "لا شيء", - "subtitleListActionVideoGoToPositionAndPause": "الانتقال إلى موضع الفيديو والإيقاف المؤقت", - "subtitleListActionVideoGoToPositionAndPlay": "الانتقال إلى موضع الفيديو والتشغيل", "subtitleGridCenterText": "توسيط النص في شبكة الترجمة", "minGapCalculateDotDotDot": "حساب الفجوة الدنيا من معدل إطارات...", "minGapCalculateTitle": "الفجوة الدنيا بين الترجمات بالمللي ثانية", @@ -3052,8 +3442,14 @@ "checkForUpdatesChannelStableAndBeta": "الإصدارات المستقرة والتجريبية", "assaAutoSetResolution": "ASSA: تعيين الدقة (PlayResX/PlayResY) من الفيديو عند فتح فيديو", "assaAutoSetResolutionPrompt": "ASSA: السؤال قبل تغيير الدقة لتطابق الفيديو (وإلا يُعاد التحجيم تلقائياً)", + "videoControls": "عناصر التحكم بالفيديو", + "videoControlsEdit": "تحرير عناصر التحكم بالفيديو...", + "videoControlsPositionText": "نص الموضع / المدة", + "videoControlsVideoFileName": "اسم ملف الفيديو", + "videoControlsPlayerName": "اسم مشغل الفيديو", "mergeKeepEndTime": "دمج الأسطر: الاحتفاظ بوقت النهاية (السماح بالتداخل مع الترجمة التالية)", "mergeKeepEndTimeOnlyAssa": "دمج الأسطر: الاحتفاظ بوقت النهاية لتنسيق \"Advanced Sub Station Alpha\" فقط", + "mergeAutoBreak": "دمج الأسطر: فاصل تلقائي للنص المدمج (عند إيقافه تُحفظ فواصل الأسطر الأصلية)", "defaultSaveLocation": "موقع الحفظ الافتراضي", "defaultSaveLocationSourceFileFolder": "مجلد ملف الترجمة/الفيديو", "defaultSaveLocationLastUsedFolder": "آخر مجلد مستخدم", @@ -3061,18 +3457,10 @@ "defaultSaveLocationSubtitleFileFolder": "مجلد ملف الترجمة", "defaultSaveLocationCustomFolder": "مجلد مخصص", "subtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "الانتقال إلى موضع الفيديو، تشغيل الحالي، ثم الإيقاف المؤقت", - "subtitleListActionEditText": "الانتقال إلى مربع تحرير النص", "subtitleListActionVideoGoToPositionMinus1SecAndPause": "الانتقال إلى موضع الفيديو - 1 ثانية والإيقاف المؤقت", "subtitleListActionVideoGoToPositionMinusHalfSecAndPause": "الانتقال إلى موضع الفيديو - 0.5 ثانية والإيقاف المؤقت", "subtitleListActionVideoGoToPositionMinus1SecAndPlay": "الانتقال إلى موضع الفيديو - 1 ثانية والتشغيل", - "subtitleListActionEditTextAndPause": "الانتقال إلى مربع تحرير النص، والإيقاف المؤقت عند موضع الفيديو", - "autoBackupEveryMinute": "كل دقيقة", - "autoBackupEveryXthMinute": "كل {0} دقيقة", - "profiles": "ملفات التعريف", - "autoBackupDeleteAfterXMonths": "حذف النسخ الاحتياطية التلقائية بعد {0} أشهر", "searchSettingsDotDotDot": "البحث في الإعدادات...", - "syntaxColoring": "تلوين الصياغة", - "waveformSpectrogram": "الموجة الصوتية / الطيف الترددي", "network": "الشبكة", "fileTypeAssociations": "اقترانات أنواع الملفات", "textBoxColorTags": "وسوم الألوان (HTML/ASSA) في مربع نص الترجمة", @@ -3105,10 +3493,9 @@ "darkThemeForegroundColor": "لون المقدمة للسمة الداكنة", "darkThemeBackgroundColor": "لون الخلفية للسمة الداكنة", "showGridLines": "إظهار خطوط الشبكة", - "resetSettings": "إعادة تعيين الإعدادات؟", - "resetSettingsDetail": "سيؤدي هذا إلى إعادة تعيين جميع الإعدادات إلى قيمها الافتراضية.\n\nهل تريد المتابعة؟", "showHorizontalLineAboveToolbar": "إظهار خط أفقي فوق شريط الأدوات", "bookmarkColor": "لون العلامة المرجعية", + "spellCheckHighlightColor": "لون تمييز التدقيق الإملائي", "singleLineMaxLength": "الحد الأقصى لطول السطر الواحد", "optimalCharsPerSec": "المعدل الأمثل حرف/ثانية", "maxCharsPerSec": "الحد الأقصى حرف/ثانية", @@ -3121,13 +3508,21 @@ "unbreakSubtitlesShortThan": "إلغاء فصل أسطر الترجمات الأقصر من", "newEmptyDefaultMs": "المدة الافتراضية للترجمة الجديدة (ms)", "timeCodeUpDownStepMs": "خطوة زيادة/إنقاص الوقت (ms)", + "moveSelectedLinesStepMs": "خطوة اختصار نقل الأسطر المحددة (مللي ثانية)", + "moveStartEndStepMs": "خطوة اختصار نقل البداية/النهاية (مللي ثانية)", + "moveLinesShortenNeighbor": "نقل الأسطر: تقصير السطر السابق/التالي بدلاً من التداخل معه", "promptBeforeDelete": "المطالبة قبل الحذف", "rememberPositionAndSize": "تذكر موضع النافذة وحجمها", + "titleBarFullFileName": "إظهار المسار الكامل للملف في شريط العنوان", + "showRecentFiles": "إظهار الملفات الأخيرة (لإعادة الفتح)", "openLastFileOnStart": "فتح آخر ملف حديث عند البدء", "autoSave": "الحفظ التلقائي (حفظ الملف المفتوح أثناء التحرير)", "autoBackupOn": "النسخ الاحتياطي التلقائي", "autoBackupIntervalMinutes": "الفاصل الزمني للنسخ الاحتياطي التلقائي (دقائق)", "autoBackupDeleteAfterDays": "مدة الاحتفاظ بالنسخ الاحتياطية التلقائية (أيام)", + "settingsBackupOn": "النسخ الاحتياطي التلقائي للإعدادات", + "settingsBackupIntervalDays": "الفاصل الزمني للنسخ الاحتياطي للإعدادات (أيام، 0 = كل بدء)", + "settingsBackupMaxCount": "عدد النسخ الاحتياطية للإعدادات المحتفظ بها", "autoConvertToUtf8": "تحويل الترميز تلقائيًا إلى UTF-8 عند الفتح", "autoTrimWhiteSpace": "اقتطاع المسافات البيضاء تلقائيًا", "defaultEncoding": "الترميز الافتراضي", @@ -3143,23 +3538,14 @@ "colorGapTooShort": "تلوين إذا كانت الفجوة قصيرة جدًا", "errorBackgroundColor": "لون خلفية الخطأ", "waveformDrawGridLines": "رسم خطوط الشبكة", - "waveformCenterVideoPosition": "توسيط موضع الفيديو", + "waveformUseSkiaRenderer": "استخدام العارض السريع التجريبي", "waveformCenterVideoPositionAlsoWhenPaused": "توسيط موضع الفيديو أيضًا أثناء الإيقاف المؤقت", + "waveformSelectCurrentSubtitleWhilePaused": "تحديد الترجمة الحالية أيضًا أثناء الإيقاف المؤقت", + "waveformRememberZoom": "تذكر التكبير (الأفقي والعمودي)", "waveformShowToolbar": "إظهار شريط الأدوات", "waveformShowToolbarEdit": "تحرير شريط الأدوات...", "waveformShowToolbarEditLabel": "عناصر شريط الأدوات", "waveformSpectrogramCombinedWaveformHeight": "الموجة الصوتية / الطيف الترددي مدمجان، ارتفاع الموجة الصوتية %", - "showWaveformToolbarPlay": "شريط الأدوات: إظهار زر التشغيل", - "showWaveformToolbarRepeat": "شريط الأدوات: إظهار زر التكرار", - "showWaveformToolbarRemoveBlankLines": "شريط الأدوات: إظهار زر إزالة الأسطر الفارغة", - "showWaveformToolbarNew": "شريط الأدوات: إظهار زر الترجمة الجديدة", - "showWaveformToolbarSetStart": "شريط الأدوات: إظهار زر تعيين البداية", - "showWaveformToolbarSetEnd": "شريط الأدوات: إظهار زر تعيين النهاية", - "showWaveformToolbarStartAndOffsetTheRest": "شريط الأدوات: إظهار زر تعيين البداية وإزاحة الباقي", - "showWaveformToolbarHorizontalZoom": "شريط الأدوات: إظهار شريط تمرير التكبير الأفقي", - "showWaveformToolbarVerticalZoom": "شريط الأدوات: إظهار شريط تمرير التكبير الرأسي", - "showWaveformToolbarVideoPositionSlider": "شريط الأدوات: إظهار شريط تمرير موضع الفيديو", - "showWaveformToolbarPlaybackSpeed": "شريط الأدوات: إظهار سرعة التشغيل", "waveformFocusTextboxAfterInsertNew": "تركيز مربع النص بعد الإدراج", "waveformInvertMouseWheel": "عكس عجلة الفأرة", "waveformMouseWheelSetsVideoPosition": "عجلة الفأرة تحدد موضع الفيديو", @@ -3180,20 +3566,20 @@ "fixCommonErrorsSkipStep1": "إصلاح الأخطاء الشائعة: تخطي الخطوة 1 (اختيار الإصلاحات)", "showPluginsMenu": "إظهار قائمة الإضافات", "proxyAddress": "عنوان الوكيل", - "username": "اسم المستخدم", "password": "كلمة المرور", "defaultFormat": "الصيغة الافتراضية", "defaultSaveAsFormat": "صيغة \"حفظ باسم\" الافتراضية", "favoriteSubtitleFormats": "صيغ الترجمة المفضلة", "favoriteLanguages": "اللغات المفضلة", "webVttUseXTimestampMap": "WebVTT: استخدام X-TIMESTAMP-MAP (إزاحة الرموز الزمنية عند التحميل)", - "showStopButton": "إظهار زر الإيقاف", - "showFullscreenButton": "إظهار زر ملء الشاشة", "fullscreenHideControls": "إخفاء عناصر تحكم الفيديو في وضع ملء الشاشة", + "showSecondarySubtitleDialog": "إظهار مربع حوار النمط عند فتح ملف ترجمة ثانٍ", + "rememberSecondarySubtitleFile": "تذكر ملف الترجمة الثاني", "autoOpenVideoFile": "فتح ملف الفيديو تلقائيًا عند فتح الترجمة", "downloadMpv": "تنزيل mpv", "downloadVlc": "تنزيل VLC", "allowSingleLetterShortcutsInTextbox": "السماح باختصارات الحرف الواحد في مربع النص", + "allowTextNavigationShortcutsInTextbox": "السماح بالاختصارات على مفاتيح التنقل في النص (Ctrl+Left/Right، Home/End) في مربع النص", "spellCheckEnglishTreatInApostropheAsIng": "التدقيق الإملائي: معاملة الكلمات المنتهية بـ 'in'' كأنها 'ing' (الإنجليزية فقط)", "goToLineNumberSetsVideoPosition": "الانتقال إلى رقم السطر يحدد أيضًا موضع الفيديو", "adjustAllTimesRememberLineSelectionChoice": "ضبط جميع الأوقات، تذكر خيار تحديد الأسطر", @@ -3205,6 +3591,7 @@ "showAssaLayer": "إظهار مربع طبقة ASSA", "waveformCursorColor": "لون مؤشر/رأس الموجة الصوتية", "waveformShotChangeColor": "لون تغيير اللقطة في الموجة الصوتية", + "waveformGridColor": "لون شبكة الموجة الصوتية", "waveformParagraphLeftColor": "لون الحد الأيسر للموجة الصوتية", "waveformParagraphRightColor": "لون الحد الأيمن للموجة الصوتية", "waveformFancyHighColor": "اللون العالي المزخرف للموجة الصوتية", @@ -3232,27 +3619,31 @@ "resetSyntaxColoring": "إعادة تعيين تلوين الصياغة", "resetWaveform": "إعادة تعيين الموجة الصوتية", "resetRules": "إعادة تعيين القواعد", - "useFrameMode": "استخدام وضع الإطارات (hh.mm.ss.ff)", + "timeCodeMode": "وضع الرمز الزمني", + "timeCodeModeTime": "الوقت (hh:mm:ss,zzz)", + "timeCodeModeFrames": "الإطارات (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "أرقام الإطارات", + "frameModeSnapToVideoFrames": "تخزين الأوقات على إطارات الفيديو (وليس الإطارات داخل كل ثانية)", "textBoxLimitNewLines": "تحديد عدد الأسطر في مربع نص الترجمة", - "mpvVideoOutput": "خرج الفيديو (mpv)", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - العرض البرمجي (بطيء)", + "mpvMetalRendering": "libmpv - Metal (تجريبي، يتطلب إعادة التشغيل)", "mpvWidRendering": "libmpv - عرض بمعرّف النافذة الأصلي", "waveFormsAndSpectrogramFoldersContainsX": "مجلدا \"Waveforms\" و\"spectrogram\" يحتويان على {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "حذف ملفات \"Waveforms\" و\"Spectrogram\"؟", "waveformGenerateSpectrogram": "توليد الطيف الترددي", "waveformAutoGenerate": "توليد الموجة الصوتية تلقائيًا عند فتح فيديو", "waveformSpectrogramMode": "وضع الطيف الترددي", - "waveformCenterOnSingleClick": "التوسيط عند النقر المفرد", - "waveformSingleClickSelectsSubtitle": "تحديد الترجمة عند النقر المفرد", "waveformRightClickSelectsSubtitle": "تحديد الترجمة عند النقر بالزر الأيمن", - "waveformPauseOnSingleClick": "الإيقاف المؤقت عند النقر المفرد", "waveformDrawStyle": "نمط رسم الموجة الصوتية", "waveformExtractAudioFormat": "صيغة استخراج الصوت", "waveformExtractAudioSampleRate": "معدل عينات استخراج الصوت", "waveformExtractAudioSampleRateOriginal": "الأصلي (الاحتفاظ بالمصدر)", "waveformExtractAudioBitRate": "معدل بت استخراج الصوت (MP3/M4A)", + "ffmpegUseCenterChannelOnly": "استخدام القناة الأمامية الوسطى فقط لصوت 5.1 (FFmpeg)", "vlcWidRendering": "libVLC - عرض بمعرّف النافذة الأصلي", + "ffmpegSoftwareRendering": "FFmpeg", + "downloadFfmpegLibs": "تنزيل مكتبات FFmpeg (لمشغل الفيديو FFmpeg)", "subtitleGridEnterKeyAction": "إجراء مفتاح Enter في شبكة الترجمة", "subtitleSingleClickAction": "إجراء النقر المفرد في شبكة الترجمة", "subtitleDoubleClickAction": "إجراء النقر المزدوج في شبكة الترجمة", @@ -3270,6 +3661,7 @@ "subtitleGridFormattingShowFormatting": "إظهار التنسيق", "subtitleGridFormattingShowTags": "إظهار الوسوم", "subtitleGridFormattingHideTags": "إخفاء الوسوم", + "subtitleGridFormattingShowFormattingKeepTags": "إظهار التنسيق، مع الإبقاء على الوسوم غير المرئية", "waveformParagraphBackgroundColor": "لون خلفية الترجمة في الموجة الصوتية", "waveformParagraphSelectedBackgroundColor": "لون خلفية الترجمة المحددة في الموجة الصوتية", "waveformAllowOverlap": "السماح بالتداخل (عند النقل/تغيير الحجم)", @@ -3279,17 +3671,18 @@ "saveAsBehaviorUseVideoFileName": "استخدام اسم ملف الفيديو", "saveAsBehaviorUseSubtitleFileName": "استخدام اسم ملف الترجمة", "saveAsAppendLanguageCodeTwoLetter": "حرفان", - "saveAsAppendLanguageCodeThreeLetter": "ثلاثة أحرف (ISO 639-2/T)", - "saveAsAppendLanguageCodeThreeLetterBibliographic": "ثلاثة أحرف (ISO 639-2/B)", "saveAsAppendLanguageCodeLanguageName": "اسم اللغة", "splitOddLineActionWeightTop": "ترجيح الأعلى", "splitOddLineActionWeightBottom": "ترجيح الأسفل", "splitOddLinesAction": "إجراء تقسيم الأسطر الفردية", "ocrUseWordSplitList": "OCR: استخدام قائمة تقسيم الكلمات", "ocrGuessUnknownWords": "OCR: محاولة تخمين الكلمات غير المعروفة", + "spellCheckRememberUseAlwaysList": "التدقيق الإملائي: تذكر قائمة \"الاستخدام دائمًا\"", + "fixShortDisplayTimesAllowMoveStartTime": "إصلاح الأخطاء الشائعة: قد يؤدي إصلاح أوقات العرض القصيرة إلى نقل وقت البداية", "speechToTextSelectedLinesPromptFirstTimeOnly": "تحويل الكلام إلى نص: الأسطر المحددة، المطالبة باللغة/المحرك في المرة الأولى فقط", "multipleReplaceShowDotDotDotButtons": "الاستبدال المتعدد: إظهار أزرار قائمة السياق", "gridFocusTextboxAfterInsertNew": "الشبكة: تركيز مربع النص بعد إدراج ترجمة جديدة", + "undoRedoGoToChangedLine": "تراجع/إعادة: الانتقال إلى السطر الذي تغيّر (وموضع الفيديو)", "musicSymbol": "رمز الموسيقى", "musicSymbolsToReplace": "رموز الموسيقى المراد استبدالها (مفصولة بفاصلة)", "textToSpeechPromptMergeContinuationLines": "تحويل النص إلى كلام: المطالبة بدمج أسطر الاستمرار", @@ -3298,8 +3691,7 @@ "useFocusedButtonBackgroundColor": "استخدام لون خلفية الزر المركّز عليه", "focusedButtonBackgroundColor": "لون خلفية الزر المركّز عليه", "forceCrLfOnSave": "فرض CR+LF عند الحفظ (ملفات الترجمة النصية)", - "showWaveformToolbarPlayNext": "شريط الأدوات: إظهار زر تشغيل التالي", - "showWaveformToolbarPlaySelection": "شريط الأدوات: إظهار زر تشغيل المُحدد", + "linuxClipboardUseExternalTool": "نسخ النص عبر xclip/wl-copy (يحافظ على الأحرف المشكّلة)", "showFormatLimitWarning": "التحذير عند الحفظ إذا تجاوزت الأسطر حدود التنسيق (مثل 32 حرفاً/سطر في SCC)", "textBoxButtonShowAutoBreak": "مربع النص: إظهار زر الفصل التلقائي", "textBoxButtonShowUnbreak": "مربع النص: إظهار زر إلغاء الفصل", @@ -3311,12 +3703,18 @@ "waveformDoubleClickAction": "إجراء النقر المزدوج في الموجة الصوتية (بعد إجراء النقر المفرد)", "allSettings": "جميع الإعدادات", "uiScale": "مقياس الواجهة (%)", + "fontScale": "مقياس الخط (%)", + "textSelectionOpacity": "شفافية تحديد النص (%)", "waveformToolbarItems": "عناصر شريط أدوات الموجة الصوتية", "matchIconColorToDarkTheme": "مطابقة لون الأيقونة مع لون مقدمة السمة الداكنة", "subtitlePreviewProperties": "خصائص معاينة الترجمة", "usePositionFromSubtitleFile": "استخدام الموضع من ملف الترجمة (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "الهامش جزء من منطقة الترجمة", "textJustify": "ضبط الأسطر", + "deinterlace": "إزالة التشابك من الفيديو", + "deinterlaceOff": "إيقاف", + "deinterlaceAuto": "تلقائي (الإطارات المتشابكة فقط)", + "deinterlaceAlways": "دائمًا", "pixelWidthInfo": "الخطوط الخضراء = حد العرض الأقصى | المنطقة الحمراء = النص يتجاوز الحد", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3325,117 +3723,89 @@ "waveformColorTheme": "سمة الألوان:", "waveformSaveAsCustomTheme": "حفظ كنمط مخصص...", "waveformLoadThemeDotDotDot": "تحميل نمط...", - "waveformExportThemeDotDotDot": "تصدير النمط..." + "waveformExportThemeDotDotDot": "تصدير النمط...", + "waveformSaveCustomThemeTitle": "حفظ سمة مخصصة", + "waveformThemeFileType": "سمة الموجة الصوتية لـ Subtitle Edit", + "waveformThemeHighContrast": "تباين عالٍ", + "waveformThemeOceanBlue": "أزرق المحيط", + "waveformThemeWarmSunset": "غروب دافئ", + "waveformThemeForest": "الغابة", + "waveformThemeMidnightPurple": "أرجواني منتصف الليل", + "waveformThemeRetroAmber": "كهرماني قديم", + "waveformThemeIce": "الجليد" }, "shortcuts": { - "title": "الاختصارات", "searchShortcuts": "البحث في الاختصارات...", - "filter": "تصفية", - "categoryGeneral": "عام", "categorySubtitleGridAndTextBox": "عرض قائمة الترجمة ومربع النص", "categorySubtitleGrid": "عرض قائمة الترجمة", - "categoryWaveform": "الموجة الصوتية", "categoryTextBox": "مربع النص", "categoryFile": "ملف", "categoryVideo": "فيديو", "categorySync": "المزامنة", - "categoryTranslate": "ترجمة", - "categorySearch": "بحث", - "categoryTools": "الأدوات", "categoryAi": "الذكاء الاصطناعي", + "categoryCustom": "مخصص", + "editCustomShortcut": "تحرير الاختصار المخصص", + "customShortcutTextBoxKeyHint": "استخدم مفتاحًا مع Ctrl/Alt هنا - فالمفتاح العادي لن يكتب بعد ذلك في مربع النص.", + "customShortcutNumberX": "اختصار مخصص #{0}", + "customShortcutNumberXY": "اختصار مخصص #{0}: {1}", + "customShortcutStep": "الخطوة", + "customShortcutSteps": "الخطوات", + "customShortcutStepRunCommand": "تشغيل أمر", + "customShortcutStepInsertText": "إدراج نص", + "customShortcutStepReplace": "بحث واستبدال", + "customShortcutInsertAtCursor": "عند المؤشر", + "customShortcutInsertAtStart": "في بداية النص", + "customShortcutInsertAtEnd": "في نهاية النص", + "customShortcutSummaryRunCommandX": "تشغيل: {0}", + "customShortcutSummaryInsertXY": "إدراج \"{0}\" ({1})", + "customShortcutSummaryReplaceXY": "استبدال \"{0}\" بـ \"{1}\"", + "customShortcutSummaryReplaceRegexXY": "استبدال التعبير النمطي \"{0}\" بـ \"{1}\"", + "customShortcutPickCommand": "يرجى تحديد أمر لتشغيله.", + "customShortcutEnterText": "يرجى إدخال النص المراد إدراجه.", + "customShortcutEnterFind": "يرجى إدخال النص المراد البحث عنه.", + "customShortcutInvalidRegexX": "تعبير نمطي غير صالح: {0}", + "customShortcutStepsHint": "تُنفذ الخطوات من الأعلى إلى الأسفل. تعمل خطوات النص على الأسطر المحددة؛ والأوامر التي تفتح نافذة تستمر بعد إغلاقها.", "activeIn": "نشط في", "activeInEverywhere": "في كل مكان", - "generalSetupLikeSe4": "الإعداد مثل Subtitle Edit 4 (النمط، الاختصارات، قواعد الاستبدال)", - "generalMergeSelectedLines": "دمج الأسطر المحددة", - "generalMergeWithPrevious": "دمج مع السابق", - "generalMergeWithNext": "دمج مع التالي", - "generalMergeWithPreviousAndUnbreak": "دمج مع السابق وإلغاء الفصل", - "generalMergeWithNextAndUnbreak": "دمج مع التالي وإلغاء الفصل", - "generalMergeWithPreviousAndAutoBreak": "دمج مع السابق والفصل التلقائي", - "generalMergeWithNextAndAutoBreak": "دمج مع التالي والفصل التلقائي", - "generalMergeSelectedLinesAndAutoBreak": "دمج الأسطر المحددة والفصل التلقائي", "generalMergeSelectedLinesAndUnbreak": "دمج الأسطر المحددة وإلغاء الفصل", "generalMergeSelectedLinesAndUnbreakCjk": "دمج الأسطر المحددة وإلغاء الفصل بدون مسافة (CJK)", "generalUnbreakNoSpaceCjk": "إلغاء الفصل بدون مسافة (CJK)", - "generalMergeSelectedLinesOnlyFirstText": "دمج الأسطر المحددة مع النص الأول فقط", + "generalToggleBreak": "تبديل الفاصل/إلغاء الفاصل", "generalMergeSelectedLinesBilingual": "دمج الأسطر المحددة ثنائي اللغة", - "generalMergeWithPreviousBilingual": "دمج مع السابق ثنائي اللغة", - "generalMergeWithNextBilingual": "دمج مع التالي ثنائي اللغة", - "generalMergeOriginalAndTranslation": "دمج الأصلي والترجمة", "generalToggleTranslationMode": "تبديل وضع الترجمة", - "generalSwitchOriginalAndTranslation": "تبديل الأصلي والترجمة", - "generalSwitchOriginalAndTranslationTextBoxes": "تبديل مربعي نص الأصلي والترجمة", "generalToggleTranslationAndOriginalInPreviews": "تبديل الترجمة والأصل في معاينة الفيديو/الصوت", "generalChooseLayout": "اختيار التخطيط", - "generalLayoutChooseX": "التخطيط {0}", - "generalPlayFirstSelected": "تشغيل أول محدد", - "generalGoToFirstSelectedLine": "الانتقال إلى أول سطر محدد", - "generalGoToNextEmptyLine": "الانتقال إلى السطر الفارغ التالي", "generalGoToNextSubtitle": "الانتقال إلى الترجمة التالية", "generalGoToNextSubtitlePlayTranslate": "الانتقال إلى الترجمة التالية (تشغيل الترجمة)", "generalGoToNextSubtitleCursorAtEnd": "الانتقال إلى الترجمة التالية (المؤشر في النهاية)", "generalGoToPrevSubtitle": "الانتقال إلى الترجمة السابقة", "generalGoToPrevSubtitlePlayTranslate": "الانتقال إلى الترجمة السابقة (تشغيل الترجمة)", - "generalGoToStartOfCurrentSubtitle": "الانتقال إلى بداية الترجمة الحالية", - "generalGoToEndOfCurrentSubtitle": "الانتقال إلى نهاية الترجمة الحالية", - "generalGoToPreviousSubtitleAndFocusVideo": "الانتقال إلى الترجمة السابقة والتركيز على الفيديو", - "generalGoToNextSubtitleAndFocusVideo": "الانتقال إلى الترجمة التالية والتركيز على الفيديو", - "generalGoToPrevSubtitleAndPlay": "الانتقال إلى الترجمة السابقة والتشغيل", - "generalGoToNextSubtitleAndPlay": "الانتقال إلى الترجمة التالية والتشغيل", - "generalGoToPreviousSubtitleAndFocusWaveform": "الانتقال إلى الترجمة السابقة والتركيز على الموجة الصوتية", - "generalGoToNextSubtitleAndFocusWaveform": "الانتقال إلى الترجمة التالية والتركيز على الموجة الصوتية", - "generalGoToLineNumber": "الانتقال إلى رقم السطر", "generalGoToFirstLine": "الانتقال إلى السطر الأول", "generalGoToLastLine": "الانتقال إلى السطر الأخير", "alsoSetVideoPosition": "تعيين موضع الفيديو أيضاً", "generalGoToVideoPosition": "الانتقال إلى موضع الفيديو", "generalToggleItalic": "تبديل المائل", "generalToggleBold": "تبديل العريض", - "generalToggleBookmarks": "تبديل العلامات المرجعية", - "generalFocusTextBox": "التركيز على مربع النص", - "generalToggleBookmarksWithText": "تبديل العلامات المرجعية مع النص", - "generalEditBookmarks": "تحرير العلامات المرجعية", - "fileNew": "جديد", "generalToggleUnderline": "تبديل التسطير", + "generalToggleBox": "تبديل المربع (EBU STL)", "fileOpen": "فتح", "fileOpenKeepVideo": "فتح (مع الاحتفاظ بالفيديو)", "fileSave": "حفظ", "fileSaveAs": "حفظ باسم", - "fileSaveAll": "حفظ الكل", "fileSaveOriginal": "حفظ الأصلي", - "fileSaveOriginalAs": "حفظ الأصلي باسم", - "fileOpenOriginalSubtitle": "فتح الترجمة الأصلية", - "fileCloseOriginalSubtitle": "إغلاق الترجمة الأصلية", - "fileTranslatedSubtitle": "الترجمة المُترجمة", "fileCompare": "مقارنة", "fileStatistics": "إحصائيات", "fileImportPlainText": "استيراد نص عادي", - "fileImportBluRaySupForOcr": "استيراد Blu-ray SUP لأجل OCR", - "fileImportBluRaySupForEdit": "استيراد Blu-ray SUP للتحرير", - "fileImportTimeCodes": "استيراد الرموز الزمنية", "fileExportEbuStl": "تصدير EBU STL", "fileExportPac": "تصدير PAC", - "fileExportEdlClipName": "تصدير اسم مقطع EDL", - "fileExportPlainText": "تصدير نص عادي", - "fileExportCustomTextFormat1": "تصدير صيغة نص مخصصة 1", - "fileExportCustomTextFormat2": "تصدير صيغة نص مخصصة 2", - "fileExportCustomTextFormat3": "تصدير صيغة نص مخصصة 3", "fileExit": "خروج", "openSeDataFolder": "فتح مجلد Subtitle Edit", - "editFind": "بحث", - "editFindNext": "بحث عن التالي", "editFindPrevious": "بحث عن السابق", - "editReplace": "استبدال", - "editMultipleReplace": "استبدال متعدد", "fillSelectedLinesWithClipboard": "ملء الأسطر المحددة بنص الحافظة", - "editModifySelection": "تعديل التحديد", - "listSelectAll": "تحديد الكل", - "listSelectFirst": "تحديد الأول", - "listSelectLast": "تحديد الأخير", "listInverseSelection": "عكس التحديد", "listDeleteSelection": "حذف التحديد", + "deleteSelectionEverywhere": "حذف التحديد (في كل مكان)", "rippleDeleteSelection": "حذف متتابع للتحديد", - "settings": "الإعدادات", "assigned": "معيّن", "unassigned": "غير معيّن", "pressedKeyX": "المفتاح المضغوط: {0}", @@ -3443,6 +3813,7 @@ "detectKey": "اكتشاف المفتاح", "control": "Control", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Shift", "controlMac": "⌃", @@ -3453,11 +3824,14 @@ "resetShortcutsDetail": "هل تريد إعادة تعيين جميع الاختصارات إلى القيم الافتراضية؟", "togglePlayPause": "تبديل التشغيل/الإيقاف المؤقت", "toggleLockTimeCodes": "تبديل قفل الرموز الزمنية", + "toggleTimeCodeMode": "تبديل وضع الرمز الزمني (الوقت/الإطارات/أرقام الإطارات)", + "toggleScreenPrivacy": "تبديل خصوصية الشاشة (إخفاء أسماء الملفات، ثم النصوص أيضًا)", + "screenPrivacyFileNamesHidden": "خصوصية الشاشة: أسماء الملفات مخفية", + "screenPrivacyFileNamesAndTextsHidden": "خصوصية الشاشة: أسماء الملفات والنصوص مخفية", + "screenPrivacyOff": "خصوصية الشاشة: متوقفة", "duplicateSelectedLines": "تكرار الأسطر المحددة", "sourceView": "عرض المصدر", - "showAlignmentPicker": "المحاذاة", "addOrEditBookmark": "إضافة أو تحرير علامة مرجعية", - "listBookmarks": "سرد العلامات المرجعية", "toggleBookmark": "تبديل العلامة المرجعية (الأسطر المحددة، بدون نص)", "toggleForcedSelectedLines": "تبديل مُجبَر (الأسطر المحددة)", "goToNextBookmark": "الانتقال إلى العلامة المرجعية التالية", @@ -3468,12 +3842,12 @@ "waveformSetStartAndSetEndOfPreviousMinusGap": "تعيين البداية وتعيين نهاية السابق ناقص الفجوة", "waveformSetEndAndStartOfNextAfterGap": "تعيين النهاية وبداية التالي زائد الفجوة", "waveformSetEndAndStartOfNextAfterGapAndGoToNext": "تعيين النهاية وبداية التالي زائد الفجوة والانتقال إلى التالي", - "fetchFirstWordFromNextSubtitle": "جلب الكلمة الأولى من الترجمة التالية", "moveLastWordToNextSubtitle": "نقل الكلمة الأخيرة إلى الترجمة التالية", "moveLastWordFromFirstLineDownCurrentSubtitle": "نقل الكلمة الأخيرة من السطر الأول للأسفل (الترجمة الحالية)", "moveFirstWordFromNextLineUpCurrentSubtitle": "نقل الكلمة الأولى من السطر التالي للأعلى (الترجمة الحالية)", "moveTextFromCursorToNextAndGoToNext": "نقل النص بعد موضع المؤشر إلى الترجمة التالية والانتقال إلى التالي", "moveTextFromCursorToNextAndGoToNextAndPlay": "نقل النص بعد موضع المؤشر إلى الترجمة التالية، الانتقال إلى التالي والتشغيل", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "نقل النص بعد موضع المؤشر إلى الترجمة التالية، والانتقال إليها، وتشغيلها والإيقاف المؤقت عند نهايتها", "breakAtFirstSpaceFromCursor": "الكسر عند أول مسافة من موضع المؤشر", "breakAtFirstSpaceFromCursorAndGoToNext": "الكسر عند أول مسافة من موضع المؤشر والانتقال إلى التالي", "toggleFocusGridAndWaveform": "تبديل التركيز بين شبكة الترجمة والموجة الصوتية/الطيف الترددي", @@ -3485,7 +3859,6 @@ "videoGoToPreviousTimeCode": "الانتقال إلى الرمز الزمني السابق", "videoGoToNextTimeCode": "الانتقال إلى الرمز الزمني التالي", "goToNextLineAndSetVideoPosition": "الانتقال إلى الترجمة التالية وتعيين موضع الفيديو", - "textBoxDeleteSelectionNoClipboard": "مربع النص: حذف التحديد (بدون الحافظة)", "textBoxDeleteForward": "مربع النص: حذف التحديد أو الحرف التالي (حذف للأمام)", "textBoxCut": "مربع النص: قص", "textBoxCut2": "مربع النص: قص (بديل)", @@ -3504,6 +3877,7 @@ "listViewColumnTextUp": "العمود، النص للأعلى", "listViewColumnTextDown": "العمود، النص للأسفل", "autoTranslateSelectedLines": "ترجمة الأسطر المحددة تلقائياً...", + "autoTranslateSelectedLinesNoPrompt": "الترجمة التلقائية للأسطر المحددة (دون سؤال، باستخدام آخر محرك/لغات)", "setAssaResolution": "تعيين دقة ASSA (PlayResX/PlayResY)", "setShortcutForX": "تعيين اختصار لـ \"{0}\"", "commandFileNewKeepVideo": "جديد (مع الاحتفاظ بالفيديو)", @@ -3511,29 +3885,22 @@ "fileCloseOriginal": "إغلاق الأصلي", "fileCloseTranslation": "إغلاق الترجمة", "restoreAutoBackup": "استعادة النسخة الاحتياطية التلقائية", - "openContainingFolder": "فتح المجلد المحتوي", "importTimeCodes": "استيراد الرموز الزمنية", "importSubtitleWithManuallyChosenEncoding": "استيراد الترجمة بترميز مختار يدوياً", "exportBluRaySup": "تصدير Blu-ray SUP", "exportCustomTextFormat": "تصدير صيغة نص مخصصة", "exportPlainText": "تصدير نص عادي", - "showHistory": "إظهار السجل", "toggleRightToLeft": "تبديل من اليمين إلى اليسار", "modifySelection": "تعديل التحديد", "adjustDurations": "ضبط المدد", "applyDurationLimits": "تطبيق حدود المدة", "batchConvert": "تحويل دفعي", - "bridgeGaps": "سد الفجوات", "applyMinGap": "تطبيق الحد الأدنى للفجوة", - "fixCommonErrors": "إصلاح الأخطاء الشائعة", "makeEmptyTranslationFromCurrentSubtitle": "إنشاء ترجمة فارغة من الترجمة الحالية", - "mergeLinesWithSameText": "دمج الأسطر ذات النص نفسه", - "mergeLinesWithSameTimeCodes": "دمج الأسطر ذات الرموز الزمنية نفسها", "splitBreakLongLines": "تقسيم/إعادة توازن الأسطر الطويلة", "mergeShortLines": "دمج الأسطر القصيرة", "mergeContinuationLines": "دمج أسطر التكملة", "snapAllTimesToFrames": "محاذاة جميع الأوقات إلى الإطارات", - "removeTextForHearingImpaired": "إزالة الترميزات المتعلقة بضعاف السمع", "joinSubtitles": "ضم الترجمات", "splitSubtitle": "تقسيم الترجمة", "spellCheck": "التدقيق الإملائي", @@ -3555,7 +3922,6 @@ "adjustAllTimes": "ضبط جميع الأوقات", "visualSync": "المزامنة المرئية", "translateViaCopyPaste": "الترجمة عبر النسخ واللصق", - "shortcuts": "الاختصارات", "wordLists": "قوائم الكلمات", "chooseUiLanguage": "اختيار لغة الواجهة", "chooseRuleProfile": "اختيار ملف القواعد", @@ -3566,6 +3932,7 @@ "textBoxItalic": "مائل مربع النص", "textBoxBold": "مربع النص: عريض", "textBoxUnderline": "مربع النص: تسطير", + "textBoxBox": "مربع في مربع النص (EBU STL)", "resetWaveformZoomAndSpeed": "إعادة تعيين تكبير الموجة الصوتية وسرعة التشغيل (معدل التشغيل)", "togglePlaybackSpeed": "تبديل سرعة التشغيل (معدل التشغيل)", "playbackSpeedSlower": "إبطاء سرعة التشغيل (معدل التشغيل)", @@ -3577,22 +3944,28 @@ "seekSilenceForward": "البحث عن الصمت للأمام", "waveformGuessStart": "تخمين وقت البداية من المخطط الموجي", "waveformGuessEnd": "تخمين وقت النهاية من المخطط الموجي", + "waveformGuessStartAndEnd": "تخمين وقت البداية والنهاية من الموجة الصوتية", "setVideoPositionCurrentSubtitleStart": "تعيين موضع الفيديو إلى بداية السطر الحالي", "goToSubtitlePositionAndPause": "الانتقال إلى موضع الترجمة والإيقاف المؤقت", "setVideoPositionCurrentSubtitleEnd": "تعيين موضع الفيديو إلى نهاية السطر الحالي", "toggleAudioTracks": "تبديل المسارات الصوتية", - "listErrors": "سرد الأخطاء", "goToNextError": "الانتقال إلى الخطأ التالي", "goToPreviousError": "الانتقال إلى الخطأ السابق", "addNameToNameList": "إضافة اسم إلى قائمة الأسماء", "findDoubleWords": "البحث عن الكلمات المكررة", "findDoubleLines": "البحث عن الأسطر المكررة", "colorX": "اللون {0}", - "removeColor": "إزالة اللون", "surroundWith": "إحاطة بـ...", "surroundWithXY": "إحاطة بـ {0}/{1}", - "repeatLine": "تكرار السطر", "surroundWithNumberX": "الإحاطة بـ #{0}", + "surroundWithBehavior": "السلوك", + "surroundWithBehaviorToggle": "تبديل (إضافة، أو إزالة إن وُجد)", + "surroundWithBehaviorAdd": "إضافة (في كل مرة)", + "surroundWithBehaviorRemove": "إزالة (الكل)", + "surroundWithBehaviorRemoveOnce": "إزالة (واحد في كل مرة)", + "surroundWithWorksOn": "يعمل على", + "surroundWithScopeSelectionOrText": "التحديد، وإلا النص بالكامل", + "surroundWithScopeEachLine": "كل سطر", "searchVia": "البحث عبر", "searchViaX": "البحث عبر {0}", "searchViaNumberX": "البحث عبر #{0}", @@ -3620,6 +3993,11 @@ "copySubtitlePathToClipboard": "نسخ مسار الترجمة إلى الحافظة", "copySubtitleOriginalPathToClipboard": "نسخ مسار ترجمة الأصلي إلى الحافظة", "focusTextBox": "التركيز على مربع النص", + "focusSubtitleListView": "التركيز على عرض قائمة الترجمة", + "focusWaveform": "التركيز على الموجة الصوتية", + "focusOriginalTextBox": "التركيز على مربع النص الأصلي", + "textBoxGoToStart": "مربع النص، الانتقال إلى البداية", + "textBoxGoToEnd": "مربع النص، الانتقال إلى النهاية", "sortByNumber": "الترتيب حسب الرقم", "sortByStartTime": "الترتيب حسب وقت \"الظهور\"", "sortByEndTime": "الترتيب حسب وقت \"الإخفاء\"", @@ -3644,7 +4022,6 @@ "assaStyles": "أنماط ASSA", "assaProperties": "خصائص ASSA", "assaAttachments": "مرفقات ASSA", - "assaVideoColorPicker": "منتقي ألوان فيديو ASSA", "recalculateDurationSelectedLines": "إعادة حساب المدة (الأسطر المحددة)", "setDurationMaxCpsSelectedLines": "تعيين المدة إلى أقصى حرف/ثانية (الأسطر المحددة)", "toggleWaveformAndSpectrogramHeight": "تبديل الارتفاع المقسّم للموجة الصوتية/الطيف الترددي", @@ -3658,9 +4035,9 @@ "selectionToSentenceCase": "مربع النص: تحويل التحديد إلى حالة الجملة", "selectionToggleCasing": "مربع النص: تبديل حالة الأحرف (كبيرة -> صغيرة -> حالة العنوان)", "googleIt": "البحث في Google (النص المحدد)", - "setActorXY": "تعيين الممثل {0}: {1}", + "setActorX": "تعيين الممثل: {0}", "setNewActor": "تعيين ممثل جديد...", - "setActorSlotXTitle": "خانة الممثل {0}", + "setStyleX": "تعيين النمط: {0}", "toggleDialogDashes": "تبديل شرطات الحوار", "mergeWithLineBeforeAsDialog": "دمج مع السطر السابق كحوار", "mergeWithLineAfterAsDialog": "دمج مع السطر اللاحق كحوار", @@ -3671,13 +4048,27 @@ "moveStartOneFrameBackKeepGapPrev": "نقل البداية إطاراً واحداً للخلف (الحفاظ على الفجوة مع السابق إن كانت قريبة)", "moveStartOneFrameForwardKeepGapPrev": "نقل البداية إطاراً واحداً للأمام (الحفاظ على الفجوة مع السابق إن كانت قريبة)", "moveEndOneFrameBackKeepGapNext": "نقل النهاية إطاراً واحداً للخلف (الحفاظ على الفجوة مع التالي إن كانت قريبة)", - "moveEndOneFrameForwardKeepGapNext": "نقل النهاية إطاراً واحداً للأمام (الحفاظ على الفجوة مع التالي إن كانت قريبة)" + "moveEndOneFrameForwardKeepGapNext": "نقل النهاية إطاراً واحداً للأمام (الحفاظ على الفجوة مع التالي إن كانت قريبة)", + "moveStartXMsBack": "نقل البداية X مللي ثانية للخلف (تُضبط X في الإعدادات، وأيضًا في المزامنة المرئية)", + "moveStartXMsForward": "نقل البداية X مللي ثانية للأمام (تُضبط X في الإعدادات، وأيضًا في المزامنة المرئية)", + "moveEndXMsBack": "نقل النهاية X مللي ثانية للخلف (تُضبط X في الإعدادات، وأيضًا في المزامنة المرئية)", + "moveEndXMsForward": "نقل النهاية X مللي ثانية للأمام (تُضبط X في الإعدادات، وأيضًا في المزامنة المرئية)", + "moveSelectedLinesXMsBack": "نقل الأسطر المحددة X مللي ثانية للخلف (تُضبط X في الإعدادات)", + "moveSelectedLinesXMsForward": "نقل الأسطر المحددة X مللي ثانية للأمام (تُضبط X في الإعدادات)", + "moveSelectedLinesAndForwardXMsBack": "نقل الأسطر المحددة وكل ما يليها X مللي ثانية للخلف (تُضبط X في الإعدادات)", + "moveSelectedLinesAndForwardXMsForward": "نقل الأسطر المحددة وكل ما يليها X مللي ثانية للأمام (تُضبط X في الإعدادات)", + "moveAllLinesXMsBack": "نقل جميع الأسطر X مللي ثانية للخلف (تُضبط X في الإعدادات)", + "moveAllLinesXMsForward": "نقل جميع الأسطر X مللي ثانية للأمام (تُضبط X في الإعدادات)", + "moveSelectedLinesCustomMsBack": "نقل الأسطر المحددة، أجزاء من الثانية مخصصة ({0:#,###,##0}) للخلف، {1}", + "moveSelectedLinesCustomMsForward": "نقل الأسطر المحددة، أجزاء من الثانية مخصصة ({0:#,###,##0}) للأمام، {1}", + "moveSelectedLinesAndForwardCustomMsBack": "نقل الأسطر المحددة وكل ما يليها، أجزاء من الثانية مخصصة ({0:#,###,##0}) للخلف، {1}", + "moveSelectedLinesAndForwardCustomMsForward": "نقل الأسطر المحددة وكل ما يليها، أجزاء من الثانية مخصصة ({0:#,###,##0}) للأمام، {1}", + "moveAllLinesCustomMsBack": "نقل جميع الأسطر، أجزاء من الثانية مخصصة ({0:#,###,##0}) للخلف، {1}", + "moveAllLinesCustomMsForward": "نقل جميع الأسطر، أجزاء من الثانية مخصصة ({0:#,###,##0}) للأمام، {1}" }, "wordLists": { "title": "قوائم الكلمات", "addName": "إضافة اسم", - "addWord": "إضافة كلمة", - "addPair": "إضافة زوج", "nameAndIgnoreList": "قائمة الأسماء/التجاهل", "userWords": "قائمة كلمات المستخدم", "ocrFixList": "قائمة إصلاح OCR", @@ -3694,7 +4085,6 @@ "noPluginsInstalled": "لا توجد إضافات مثبَّتة", "getPluginsOnline": "الحصول على إضافات عبر الإنترنت...", "getPluginsTitle": "الحصول على الإضافات", - "enabled": "مفعّل", "disabled": "معطّل", "notSupportedOnThisOs": "غير مدعوم على نظام التشغيل هذا", "removePluginXConfirm": "إزالة الإضافة '{0}'؟ هذا يحذف مجلد الإضافة:{1}", @@ -3711,17 +4101,19 @@ "downloadingXPercent": "جارٍ التنزيل {0}%...", "pluginXInstalled": "تم تثبيت '{0}'.", "couldNotInstallPluginX": "تعذّر تثبيت '{0}': {1}", - "notInstalled": "غير مثبَّت", "install": "تثبيت", "reinstall": "إعادة التثبيت", - "update": "تحديث", "installedX": "مثبَّت ({0})", "updateAvailableXToY": "تحديث متاح ({0} → {1})", "applyPluginToWhichLinesX": "تطبيق '{0}' على:", "applyToSelectedLinesX": "الأسطر المحددة ({0})", "applyToAllLinesX": "كل الأسطر ({0})", "updateAllXAvailable": "تحديث الكل ({0})", - "updatingXOfY": "جارٍ التحديث {0}/{1}..." + "updatingXOfY": "جارٍ التحديث {0}/{1}...", + "doNotAskAgain": "عدم السؤال مجددًا (يمكن تغييره في إدارة الإضافات)", + "applyPluginsTo": "تطبيق الإضافات على", + "askEachTime": "السؤال في كل مرة", + "allLines": "جميع الأسطر" }, "help": { "aboutSubtitleEdit": "حول Subtitle Edit", @@ -3765,6 +4157,8 @@ "nOcrDatabase": "قاعدة بيانات nOCR", "drawMode": "وضع الرسم:", "addNewCharcter": "إضافة حرف جديد", + "addNOcrCharacterTitle": "إضافة حرف nOCR للسطر {0}، الحرف {1} من {2} باستخدام قاعدة البيانات \"{3}\"", + "addBinaryOcrCharacterTitle": "إضافة حرف OCR ثنائي للسطر {0}، الحرف {1} من {2} باستخدام قاعدة البيانات \"{3}\"", "lineIndexX": "السطر {0}", "inspectNOcrAdditions": "فحص إضافات nOCR الجديدة", "ocrSelectedLines": "إجراء OCR على الأسطر المحددة", @@ -3813,6 +4207,8 @@ "binaryImageCompareInspectImageMatches": "\"مقارنة الصور الثنائية\" - فحص تطابقات الصور", "saveBlankTextTitle": "حفظ نص فارغ؟", "saveBlankTextPrompt": "حفظ نص فارغ للصورة؟", + "drawnLinesDoNotMatchTitle": "الخطوط لا تطابق الصورة", + "drawnLinesDoNotMatchPrompt": "بعض الخطوط المرسومة لا تطابق الصورة (يجب أن تكون الخطوط الخضراء على الحرف، والحمراء خارجه)، لذا لن يتم التعرف على هذا الحرف.\n\nهل تريد الحفظ على أي حال؟", "yesAndNeverAskAgain": "نعم ولا تسأل مرة أخرى أبدًا", "importTextFromSubtitleDotDotDot": "استيراد نص من الترجمة...", "importTextFromSubtitleOverwritePrompt": "بعض الأسطر تحتوي بالفعل على نص OCR. هل تريد استبدال النص الحالي؟", @@ -3838,7 +4234,6 @@ "vobSubColorsTitle": "ألوان VobSub/DVD", "vobSubColorsHeader": "تخصيص ألوان VobSub الأربعة", "vobSubColorsDescription": "تستخدم ترجمات VobSub/DVD أربعة ألوان مفهرسة: الخلفية، والنقش، والتوكيد 1 والتوكيد 2. اختر كل لون أدناه لتجاوز اللوحة المدمجة، وهو مفيد عندما تعطي الألوان الأصلية تباين OCR ضعيفًا.", - "vobSubColorBackground": "الخلفية", "vobSubColorPattern": "النقش", "vobSubColorEmphasis1": "التوكيد 1", "vobSubColorEmphasis2": "التوكيد 2", @@ -3872,9 +4267,26 @@ "crispEmbedSettingsTitle": "إعدادات CrispEmbed", "crispEmbedDescription": "محرك تعرف ضوئي محلي بواجهات نماذج متعددة - نزّل المحرك والنماذج من هنا.", "trainNOcrDatabase": "تدريب قاعدة بيانات nOCR...", + "optimizeNOcrDatabase": "تحسين قاعدة بيانات nOCR...", + "optimizeNOcrDatabaseQuestionXY": "هل تريد إزالة الخطوط التي لا تميّز الأحرف عن الأحرف المشابهة في قاعدة بيانات nOCR \"{0}\"؟\n\nيجعل هذا قاعدة البيانات أصغر وOCR أسرع، وعادةً بأخطاء أقل. يستغرق حتى دقيقة.\n\nتُحفظ نسخة احتياطية باسم \"{1}\".", + "optimizingNOcrDatabaseXY": "جارٍ تحسين قاعدة بيانات nOCR... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "تم تحسين قاعدة بيانات nOCR \"{0}\": {1:#,##0} -> {2:#,##0} خط.", "startTraining": "بدء التدريب", "abortTraining": "إلغاء التدريب", "trainingOptions": "خيارات التدريب", + "trainNOcrSubtitle": "يرسم الأحرف بالخطوط المثبتة ويعلّم nOCR أشكالها. اختر الخطوط التي تستخدمها ترجماتك.", + "xFontsSelected": "{0:#,##0} محدد", + "subtitleFonts": "خطوط الترجمة", + "emptyDatabase": "قاعدة بيانات فارغة", + "startFromDatabase": "البدء من", + "startFromDatabaseHint": "إضافة الأحرف المدرَّبة إلى نسخة من قاعدة بيانات موجودة (موصى به) أو البدء من قاعدة فارغة", + "fontSizes": "أحجام الخط", + "fontSizesHint": "أحجام الخط بالبكسل للرسم بها، مفصولة بفواصل، مثل \"30, 40\"", + "numberOfLineSegmentsHint": "الخطوط المفحوصة لكل حرف - العدد الأكبر أكثر صرامة لكنه أبطأ", + "enterDatabaseName": "أدخل اسمًا لقاعدة البيانات", + "trainingFontXSizeYCharacterZ": "جارٍ تدريب \"{0}\" عند {1} px: {2}", + "xLearned": "{0:#,##0} تم تعلّمه", + "xSkipped": "{0:#,##0} تم تخطيه", "charactersToTrain": "الأحرف المراد تدريبها", "letterCombinationsToTrain": "تركيبات الأحرف التي قد تنقسم إلى صورة واحدة", "importCharactersFromSubtitleFile": "استيراد الأحرف من ملف ترجمة...", @@ -3901,6 +4313,8 @@ "drawZoomOut": "تصغير (Ctrl+-)", "drawResetView": "إعادة تعيين العرض (Ctrl+0)", "drawToggleGrid": "تبديل الشبكة (Ctrl+G)", + "drawTogglePreview": "تبديل المعاينة (F9)", + "drawPreviewFailed": "فشلت المعاينة - يلزم ffmpeg مع libass (مرشح subtitles)", "drawCopyToClipboard": "نسخ إلى الحافظة (Ctrl+C)", "drawShapes": "الأشكال", "drawSelectedPoint": "النقطة المحددة", @@ -3908,16 +4322,86 @@ "drawSelectedLayer": "الطبقة المحددة", "drawToolX": "الأداة: {0}", "drawHelpText": "انقر لإضافة النقاط • Enter/F8 لإغلاق الشكل • Shift+سحب للتحريك • Ctrl+تمرير للتكبير", + "drawMoveToLayer": "نقل إلى طبقة", + "drawFlipHorizontal": "قلب أفقي", + "drawFlipVertical": "قلب عمودي", + "drawHideShape": "إخفاء الشكل", + "drawShowShape": "إظهار الشكل", + "drawHideLayer": "إخفاء الطبقة", + "drawShowLayer": "إظهار الطبقة", + "drawDeleteLayer": "حذف الطبقة", + "drawDeletePoint": "حذف النقطة", + "drawCancelDrawing": "إلغاء الرسم", + "drawLayerX": "الطبقة {0}", + "drawImportSvg": "استيراد صورة SVG...", + "drawRotateClockwise": "تدوير 90° باتجاه عقارب الساعة", + "drawConvertToCurve": "تحويل المقطع إلى منحنى", + "drawBackground": "الخلفية", + "drawPosition": "الموضع", + "drawZoom": "تكبير", + "drawShapeTool": "أداة الأشكال", + "drawColorPickerTool": "اختيار لون من شكل أو من الخلفية", + "drawShapeLibrary": "مكتبة الأشكال", + "drawShapeLibraryHint": "اسحب على اللوحة لوضع شكل، أو انقر للحجم الافتراضي. Shift يحافظ على تناسبه.", + "drawAddToLibrary": "إضافة إلى مكتبة الأشكال...", + "drawRemoveFromLibrary": "إزالة من مكتبة الأشكال", + "drawShapeName": "اسم الشكل", + "drawCategorySpeechBubbles": "فقاعات الكلام", + "drawCategoryArrows": "الأسهم", + "drawCategoryBasicShapes": "الأشكال الأساسية", + "drawCategorySymbols": "الرموز", + "drawCategoryMyShapes": "أشكالي", + "drawShapeSpeechBubble": "فقاعة كلام", + "drawShapeSpeechBubbleRight": "فقاعة كلام، الذيل لليمين", + "drawShapeSpeechBubbleUp": "فقاعة كلام، الذيل للأعلى", + "drawShapeOvalBubble": "فقاعة كلام بيضاوية", + "drawShapeBoxBubble": "فقاعة كلام مربعة", + "drawShapeThoughtBubble": "فقاعة تفكير", + "drawShapeShoutBubble": "فقاعة صراخ", + "drawShapeCaptionBox": "مربع تعليق", + "drawShapeArrow": "سهم", + "drawShapeDoubleArrow": "سهم مزدوج", + "drawShapeChevron": "شيفرون", + "drawShapeCurvedArrow": "سهم منحنٍ", + "drawShapeRoundedRectangle": "مستطيل مستدير الزوايا", + "drawShapeTriangle": "مثلث", + "drawShapeDiamond": "معيّن", + "drawShapePentagon": "خماسي", + "drawShapeHexagon": "سداسي", + "drawShapeOctagon": "ثماني", + "drawShapeStar": "نجمة", + "drawShapeRing": "حلقة", + "drawShapePlus": "علامة زائد", + "drawShapeBanner": "لافتة", + "drawShapeHeart": "قلب", + "drawShapeCheck": "علامة صح", + "drawShapeMusicNote": "نوتة موسيقية", + "drawShapeMusicNotes": "نوتات موسيقية", + "drawShapeLightning": "برق", + "drawShapeCloud": "سحابة", + "drawShapeMoon": "قمر", + "drawShapeBadge": "شارة", + "drawSize": "الحجم", + "drawLayer": "الطبقة", + "drawBackgroundVideoFrame": "إطار الفيديو (الموضع الحالي)", + "drawBackgroundVideoFrameAt": "إطار الفيديو عند...", + "drawBackgroundImage": "ملف صورة...", + "drawBackgroundNone": "بدون خلفية", + "drawBackgroundStretch": "تمديد الصورة إلى اللوحة", + "drawBackgroundOpacity": "شفافية الخلفية", + "drawBackgroundVideoFrameFailed": "تعذّر الحصول على إطار فيديو عند {0}.", + "drawImages": "الصور", + "drawConvertToLine": "تحويل المقطع إلى خط", + "drawConvertShapeToCurves": "تحويل كل الخطوط إلى منحنيات", + "drawConvertShapeToLines": "تحويل كل المنحنيات إلى خطوط", + "drawRotateCounterClockwise": "تدوير 90° عكس اتجاه عقارب الساعة", + "drawSvgImages": "صور SVG", + "drawSvgNoShapes": "لم يتم العثور على أشكال معبأة أو حدود في ملف SVG.", "progressBarTitle": "شريط تقدم ASSA", "progressBarSettings": "شريط التقدم", - "progressBarPosition": "الموضع", - "progressBarBottom": "الأسفل", - "progressBarTop": "الأعلى", "mouseOverColor": "لون تمرير الماوس", "clickedColor": "لون النقر", "progressBarForeColor": "لون المقدمة", - "progressBarBackColor": "لون الخلفية", - "progressBarStyle": "النمط", "progressBarSquareCorners": "زوايا مربعة", "progressBarRoundedCorners": "زوايا دائرية", "progressBarChapters": "الفصول", @@ -3926,8 +4410,6 @@ "progressBarXAdjustment": "تعديل X", "progressBarYAdjustment": "تعديل Y", "progressBarTextAlignment": "محاذاة النص", - "progressBarTakePosFromVideo": "أخذ الموضع من الفيديو", - "progressBarPreview": "معاينة", "fontCollectorTitle": "مُجمِّع الخطوط", "fontCollectorUsedIn": "مستخدم في", "fontCollectorFontFiles": "ملفات الخطوط", @@ -3974,9 +4456,7 @@ "resolutionResamplerVideoDiffers": "دقة الترجمة ({0}x{1}) تختلف عن دقة الفيديو ({2}x{3}).\nهل تريد تغيير الترجمة لتطابق الفيديو؟", "resolutionResamplerAskOnVideoOpen": "السؤال عند فتح فيديو بدقة مختلفة", "backgroundBoxGenerator": "توليد مربع الخلفية", - "backgroundBoxPadding": "التباعد الداخلي", "backgroundBoxFillWidth": "ملء العرض", - "backgroundBoxBoxColor": "لون المربع", "backgroundBoxRadius": "نصف القطر", "backgroundBoxCircle": "دائرة", "backgroundBoxSpikes": "أشواك", @@ -3988,12 +4468,9 @@ "backgroundBoxTornPaperDouble": "ورق ممزق (أعلى وأسفل)", "backgroundBoxStarburst": "انفجار نجمي", "backgroundBoxScroll": "لفافة / رَقّ", - "stylesTitle": "أنماط Advanced Sub Station Alpha", "stylesInFile": "الأنماط في الملف", "stylesSaved": "الأنماط المحفوظة", - "category": "الفئة", "allCategories": "[الكل]", - "defaultCategory": "الافتراضية", "newCategory": "فئة جديدة...", "renameCategory": "إعادة تسمية الفئة...", "deleteCategory": "حذف الفئة", @@ -4016,13 +4493,26 @@ "graphics": "الرسومات", "copyToStorageStyles": "نسخ إلى أنماط التخزين", "copyToFileStyles": "نسخ إلى أنماط الملف", + "styleXAlreadyExistsInStorage": "يوجد نمط باسم \"{0}\" بالفعل في التخزين.\n\nهل تريد استبداله، أم الإبقاء على كليهما (تحصل النسخة على اسم جديد)؟", + "styleXAlreadyExistsInFile": "يوجد نمط باسم \"{0}\" بالفعل في الملف.\n\nهل تريد استبداله، أم الإبقاء على كليهما (تحصل النسخة على اسم جديد)؟", + "styleNameCannotBeEmpty": "لا يمكن أن يكون اسم النمط فارغًا.", + "styleNameXIsUsedMoreThanOnce": "اسم النمط \"{0}\" مستخدم من قِبل أكثر من نمط واحد في الملف.", + "overwrite": "استبدال", + "keepBoth": "الإبقاء على كليهما", + "doThisForAllConflictingStyles": "تطبيق هذا على جميع الأنماط المتعارضة", "setStyleAsDefault": "تعيين النمط كافتراضي", "takeUsagesFromDotDotDot": "أخذ الاستخدامات من...", "replaceStyleWithDotDotDot": "استبدال النمط بـ...", "noAttachmentsFound": "لم يتم العثور على مرفقات في ملف ASSA المحدد.", "deleteStyleQuestion": "حذف النمط؟", "deleteStylesQuestion": "حذف الأنماط؟", + "deleteXStylesQuestion": "هل تريد حذف {0} من الأنماط؟", + "deleteXStylesFromStorageQuestion": "هل تريد حذف {0} من الأنماط من التخزين؟", + "deleteStyleXFromStorageQuestion": "هل تريد حذف النمط \"{0}\" من التخزين؟", + "deleteStyleXFromFileQuestion": "هل تريد حذف النمط \"{0}\" من الملف الحالي؟", "openStyleImportFile": "افتح ملف ترجمة لاستيراد الأنماط منه", + "styleImportFiles": "ملفات الأنماط (.ass، .sty، فئات Subtitle Edit 4 بصيغة .template)", + "ssaStyleImportFiles": "ملفات الأنماط (.ssa، .ass، .sty)", "primary": "أساسي", "secondary": "ثانوي", "applyOverrideTags": "تطبيق وسوم التجاوز", @@ -4037,7 +4527,6 @@ "spaceIncrease": "زيادة التباعد", "popIn": "ظهور مفاجئ", "spinIn": "ظهور دوراني", - "playCurrent": "تشغيل الحالي", "setPosition": "تعيين الموضع", "rotation": "التدوير", "scaleX": "التحجيم X", @@ -4081,10 +4570,8 @@ "advancedEffectOldMovieDescription": "يحاكي جهاز عرض أفلام 35mm عتيقًا مع تشويش وتظليل حوافي وخدوش", "advancedEffectNeonBurst": "انفجار نيون", "advancedEffectNeonBurstDescription": "ترجمات عالية الطاقة بنمط 'Shorts' مع توهج نيون متوهج وحركة 'ظهور' بتكبير", - "advancedEffectSettings": "الإعدادات", "advancedEffectSnowFlakeCount": "عدد الرقاقات", "advancedEffectStarfieldStarCount": "عدد النجوم", - "advancedEffectStarfieldSpeed": "السرعة", "advancedEffectGlitch": "خلل", "advancedEffectGlitchDescription": "خلل رقمي مع زيغ لوني ووميض أبيض وطبقات تشويه", "advancedEffectBounceIn": "ظهور ارتدادي", @@ -4093,8 +4580,6 @@ "advancedEffectFirefliesDescription": "نقاط صفراء كهرمانية دافئة متوهجة تنجرف عضويًا عبر الشاشة مع توهج نابض", "advancedEffectMatrix": "ماتريكس", "advancedEffectMatrixDescription": "أعمدة أحرف خضراء متساقطة مع نص الترجمة يتكون حرفًا حرفًا من المطر", - "advancedEffectAudioBars": "أشرطة صوتية (موجة صوتية)", - "advancedEffectAudioBarsDescription": "أشرطة معادل صوتي متحركة مدفوعة بالموجة الصوتية، تنزلق الأشرطة إلى اليسار كموجة صوتية وتنبض مع الصوت", "advancedEffectAudioPulse": "نبض النص الصوتي", "advancedEffectAudioPulseDescription": "يتوهج نص الترجمة وينبض مع مستوى الصوت، تُظهر المقاطع الهادئة نصًا عاديًا، وتضيف الذُرى العالية هالة ملونة وتكبيرًا طفيفًا", "advancedEffectConfetti": "انفجار قصاصات", @@ -4108,7 +4593,6 @@ "advancedEffectFancyKaraokeGlow": "توهج الكلمة النشطة", "advancedEffectFancyKaraokeActiveColor": "اللون النشط", "advancedEffectFancyKaraokeInactiveColor": "اللون غير النشط", - "advancedEffectFancyKaraokeInactiveOpacity": "شفافية غير النشط (0-255)", "advancedEffectWordSpacingPixels": "التباعد (بكسل)", "advancedEffectSlowZoomOut": "تصغير بطيء", "advancedEffectSlowZoomOutDescription": "يبدأ النص أكبر قليلًا ويتقلص برفق إلى الحجم العادي على مدى مدة الترجمة", @@ -4124,7 +4608,6 @@ "advancedEffectSlideInLeftDescription": "ينزلق النص إلى الداخل من خارج الشاشة يسارًا، يثبت، ثم يخرج عائدًا إلى اليسار", "advancedEffectSlideInRight": "انزلاق من اليمين", "advancedEffectSlideInRightDescription": "ينزلق النص إلى الداخل من خارج الشاشة يمينًا، يثبت، ثم يخرج عائدًا إلى اليمين", - "advancedEffectFadeInOut": "ظهور/اختفاء تدريجي", "advancedEffectFadeInOutDescription": "يظهر النص تدريجيًا في البداية ويختفي تدريجيًا في نهاية كل ترجمة", "advancedEffectWordFlip3D": "قلب الكلمات ثلاثي الأبعاد", "advancedEffectWordFlip3DDescription": "تنطوي كل كلمة بقلب ثلاثي الأبعاد ووثبة مرنة عند نطقها — أسلوب تعليقات 'Shorts' الحديث", diff --git a/src/ui/Assets/Languages/Azerbaijani.json b/src/ui/Assets/Languages/Azerbaijani.json index 3acdecc39d9..55d1a3a0c86 100644 --- a/src/ui/Assets/Languages/Azerbaijani.json +++ b/src/ui/Assets/Languages/Azerbaijani.json @@ -1,12 +1,71 @@ { "title": "Subtitle Edit", - "version": "v5.2.0-rc6", + "version": "v5.3.0", "translatedBy": "", "cultureName": "az-AZ", "general": { + "prompt": "Təlimat", + "temperature": "Temperatur", + "preset": "Hazır parametr dəsti", + "output": "Çıxış", + "outputFormat": "Çıxış formatı", + "other": "Digər", + "timeCodeFormat": "Vaxt kodu formatı", + "topBottomMargin": "Üst/alt kənar boşluğu", + "theme": "Tema", + "brightness": "Parlaqlıq", + "chooseColor": "Rəng seç", + "lineX": "Sətir {0}", + "playLine": "Sətri oynat", + "maxLineLength": "Maksimum sətir uzunluğu", + "maxCharsPerSec": "Saniyədə maksimum simvol sayı", + "maxNumberOfLines": "Maksimum sətir sayı", + "subtitles": "Altyazılar", + "shotChanges": "Səhnə dəyişiklikləri", + "chapters": "Bölmələr", + "audio": "Səs", + "interjections": "Nidalar", + "blankLines": "Boş sətirlər", + "editWholeText": "Bütün mətni redaktə et", + "noTextInClipboard": "Mübadilə buferində mətn yoxdur", + "noSubtitlesFoundTitle": "Altyazı tapılmadı", + "replacedXOccurrences": "{0} uyğunluq əvəz edildi", + "invalidRegularExpressionX": "Yanlış müntəzəm ifadə: {0}", + "discardChangesTitle": "Dəyişikliklərdən imtina edilsin?", + "downloadingXDotDotDot": "{0} endirilir...", + "importTimeCodesDotDotDot": "Zaman kodlarını idxal et...", + "original": "Orijinal", + "nextChange": "Növbəti dəyişiklik", + "previousChange": "Əvvəlki dəyişiklik", + "changeXOfY": "Dəyişiklik {0} / {1}", + "tooLong": "Çox uzundur", + "tooShort": "Çox qısadır", + "overlapping": "Zamanların kəsişməsi", + "detail": "Təfərrüat", + "fixOcrErrors": "OCR xətalarını düzəlt", + "runningOcrXY": "OCR işləyir... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp üçün llama-server mühərriki endirilməlidir. İndi endirilsin?", "abort": "Dayandır", "actor": "Aktyor", "actors": "Aktyorlar", + "setActorDotDotDot": "Aktyoru təyin et...", + "actorPickerTitle": "Aktyoru təyin et", + "actorPickerFilterHint": "Süzmək üçün yazın və ya yeni aktyor adı daxil edin", + "actorPickerKeysHint": "Aktyoru təyin etmək üçün rəqəm və ya Enter düyməsini basın. Alt+Up/Down sıranı dəyişir, Delete aktyoru silir.", + "actorPickerNewActorX": "Yeni aktyor \"{0}\"", + "actorPickerLinesSelectedX": "Seçilmiş sətirlər: {0}", + "setStyleDotDotDot": "Üslubu təyin et...", + "stylePickerTitle": "Üslubu təyin et", + "stylePickerFilterHint": "Süzmək üçün yazın və ya yeni üslub adı daxil edin", + "stylePickerKeysHint": "Üslubu bütün seçilmiş sətirlərə təyin etmək üçün rəqəm (1-9, 0) basın.", + "stylePickerNewStyleX": "Yeni üslub \"{0}\"", + "stylePickerNewStyleInfo": "Bu üslubu standart parametrlərlə əlavə etmək və seçilmiş sətirlərə təyin etmək üçün Enter basın. Sonradan onun şriftini, rənglərini və mövqeyini dəyişmək üçün \"Üslubları idarə et...\" istifadə edin.", + "stylePickerCurrentStyleX": "Cari üslub: {0}", + "stylePickerLinesUsingStyleX": "Bu üslubdan istifadə edən sətirlər: {0}", + "stylePickerMarginsXYZ": "Sol {0}, sağ {1}, şaquli {2}", + "stylePickerSetStyle": "Üslubu _təyin et", + "stylePickerManageStyles": "Üslubları idarə et...", + "stylePickerManageStylesHint": "Bu pəncərəni bağla və şriftləri, rəngləri, mövqeyi və s. redaktə etmək üçün üslub menecerini aç", "add": "Əlavə et", "addDotDotDot": "Əlavə et...", "addToNamesListCaseSensitive": "Adlar siyahısına əlavə et (böyük və kiçik hərflərə həssas)", @@ -339,6 +398,7 @@ "mergeSelectedLinesDialog": "Seçilmiş sətirləri dialoq kimi birləşdir", "mergeWithLineAfterAndAutoBreak": "Sonrakı sətirlə birləşdir və avtomatik sətirlərə böl", "mergeWithLineAfterKeepBreaks": "Sonrakı sətirlə birləşdir (sətir keçidlərini saxla)", + "mergeWithLineAfterAndUnbreak": "Sonrakı sətirlə birləşdir və sətir keçidlərini çıxar", "mergeWithLineBeforeAndAutoBreak": "Əvvəlki sətirlə birləşdir və avtomatik sətirlərə böl", "mergeWithLineBeforeKeepBreaks": "Əvvəlki sətirlə birləşdir (sətir keçidlərini saxla)", "middleCenter": "Ortada mərkəzdə", @@ -353,6 +413,8 @@ "moveAllShotChangeOneFrameForward": "Bütün səhnə dəyişikliklərini bir kadr irəli çək", "multiMode": "Çoxlu rejim", "moveDown": "Aşağı köçür", + "increase": "Artır", + "decrease": "Azalt", "moveUp": "Yuxarı köçür", "moveToTop": "Ən yuxarıya köçür", "moveToBottom": "Ən aşağıya köçür", @@ -422,6 +484,7 @@ "percent": "Faiz", "pickLayer": "Qatı təyin et", "pickOllamaModel": "Ollama modelini seç", + "pickModel": "Model seç", "llamaCppUseRemoteServer": "Xarici serverdən istifadə et (URL)", "llamaCppEngineSettings": "llama.cpp mühərrikinin parametrləri", "llamaCppEngineSettingsSubtitle": "Lokal llama.cpp serverinin yığımı", @@ -498,6 +561,7 @@ "reset": "Sıfırla", "resizePanels": "Panellərin ölçüsünü dəyiş", "resolution": "Görüntü ölçüsü", + "retry": "Yenidən cəhd et", "reverseRightToLeftStartEnd": "Sağdan sola yazılan mətnin başlanğıcını və sonunu tərsinə çevir", "right": "Sağ", "rightToLeft": "Sağdan sola", @@ -559,6 +623,8 @@ "shadowColor": "Kölgənin rəngi", "shadowWidth": "Kölgənin eni", "shiftLineBy": "Sətrin sürüşmə miqdarı", + "shotIn": "Səhnə girişi", + "shotOut": "Səhnə çıxışı", "shortcut": "Düymə birləşməsi", "shortcuts": "Düymə birləşmələri", "show": "Göstər", @@ -570,9 +636,13 @@ "showStartColumn": "\"Başlama\" sütununu göstər", "showHideColumn": "\"Gizlət\" sütununu göstər", "showHistory": "Tarixçəni göstər", + "clearHistory": "Tarixçəni təmizlə", + "removeFromHistory": "Tarixçədən çıxar", "showLayerColumn": "\"Qat\" sütununu göstər", "showPreview": "Önbaxışı göstər", "showShotChangesList": "Səhnə dəyişikliklərinin siyahısını göstər", + "showShotInColumn": "\"Səhnə girişi\" sütununu göstər", + "showShotOutColumn": "\"Səhnə çıxışı\" sütununu göstər", "showStyleColumn": "\"Üslub\" sütununu göstər", "showTeletext": "Siyahı görünüşündə teletekst sütununu göstər", "showTimeCodes": "Vaxt kodlarını göstər", @@ -629,12 +699,14 @@ "styleExaggeration": "Üslubun şişirdilməsi", "styles": "Üslublar", "subtitleFile": "Altyazı faylı", + "subtitleFileChangedOutsideX": "\"{0}\" faylı Subtitle Edit xaricində dəyişdirilib.\n\nOnu yenidən yükləyib dəyişikliklərinizi itirmək istəyirsiniz?", "subtitleFileName": "Altyazı faylının adı", "subtitleFileSaved": "Altyazı faylı yadda saxlanıldı", "subtitleFileSavedToX": "Altyazı faylı {0} məkanında yadda saxlanıldı", "subtitleFiles": "Altyazı faylları", "subtitleFormats": "Altyazı formatları", "subtitleLoadedX": "Altyazı yükləndi: {0}", + "subtitleReloadedChangedOutsideX": "Altyazı yenidən yükləndi (Subtitle Edit xaricində dəyişdirilib): {0}", "suffix": "Sonluq", "suggestions": "Təkliflər", "sync": "Sinxronlaşdırma", @@ -680,6 +752,7 @@ "type": "Növ", "unbreak": "Mətndəki sətir keçidlərini çıxar", "unbreakLines": "Sətir keçidlərini çıxar", + "undelete": "Silinməni geri al", "underline": "Altından xətt çəkilmiş", "undo": "Geri al", "unknown": "Naməlum", @@ -717,10 +790,23 @@ "videoCustom3ForwardX": "Video, fərdi müddət ({0:#,###,##0} millisaniyə) irəli, 3", "videoCustom4BackX": "Video, fərdi müddət ({0:#,###,##0} millisaniyə) geri, 4", "videoCustom4ForwardX": "Video, fərdi müddət ({0:#,###,##0} millisaniyə) irəli, 4", + "videoCustom1BackAndPauseX": "Video, xüsusi millisaniyə ({0:#,###,##0}) geri və fasilə, 1", + "videoCustom1ForwardAndPauseX": "Video, xüsusi millisaniyə ({0:#,###,##0}) irəli və fasilə, 1", + "videoCustom2BackAndPauseX": "Video, xüsusi millisaniyə ({0:#,###,##0}) geri və fasilə, 2", + "videoCustom2ForwardAndPauseX": "Video, xüsusi millisaniyə ({0:#,###,##0}) irəli və fasilə, 2", + "videoCustom3BackAndPauseX": "Video, xüsusi millisaniyə ({0:#,###,##0}) geri və fasilə, 3", + "videoCustom3ForwardAndPauseX": "Video, xüsusi millisaniyə ({0:#,###,##0}) irəli və fasilə, 3", + "videoCustom4BackAndPauseX": "Video, xüsusi millisaniyə ({0:#,###,##0}) geri və fasilə, 4", + "videoCustom4ForwardAndPauseX": "Video, xüsusi millisaniyə ({0:#,###,##0}) irəli və fasilə, 4", "videoExtension": "Video faylının genişlənməsi", "videoFile": "Video faylı", "videoFileGenerated": "Video faylı yaradıldı", "videoFileGeneratedX": "Video faylı yaradıldı: \"{0}\"", + "videoFilesGenerated": "Video faylları yaradıldı", + "xVideosGenerated": "{0} video yaradıldı", + "xOfYVideosGenerated": "{1} videodan {0} yaradıldı", + "savedInX": "{0} yerində yadda saxlanıldı", + "savedInXFolders": "{0} qovluqda yadda saxlanıldı", "videoFiles": "Video faylları", "videoAndAudioFiles": "Video və səs faylları", "videoOffset": "Videonun vaxt sürüşməsi", @@ -778,7 +864,6 @@ "imageFiles": "Şəkil faylları", "openAiCompatibleSttEndpoint": "STT xidmətinin URL ünvanı", "openAiCompatibleSttApiKey": "API açarı", - "openAiCompatibleSttModel": "Model", "openAiCompatibleSttExtraHeaders": "Əlavə başlıqlar", "openAiCompatibleSttTimeout": "Gözləmə müddəti (saniyə)", "openAiCompatibleSttLanguage": "Dil göstərişi", @@ -788,6 +873,9 @@ "dashScopeSttRegion": "Region", "dashScopeSttEnableWords": "Söz səviyyəsində vaxt nişanları", "dashScopeSttRegionKeyHint": "Qeyd: Alibaba Cloud Model Studio API açarları regiona bağlıdır. Seçilmiş regionun API açarının yaradıldığı regionla (Çin və ya beynəlxalq) uyğun olduğunu yoxlayın.", + "googleCloudSttProjectId": "Layihə ID-si (yalnız Application Default Credentials üçün)", + "googleCloudSttBucketName": "Saxlama bucket-i (boş = avtomatik)", + "googleCloudSttDynamicBatching": "Dinamik paketləmə (təxminən 5 dəfə ucuz, gecikmə zəmanəti yoxdur)", "onlineSttApiKeyMissing": "API açarı tələb olunur. API açarınızı daxil edib yenidən cəhd edin.", "openAiCompatibleSttAutoTranscribeOnAudioSelection": "Səs dalğası qrafikində yeni seçilmiş hissədəki nitqi avtomatik mətnə çevir", "openAiCompatibleSttStream": "Cavabı axın şəklində al", @@ -845,6 +933,7 @@ "multipleReplace": "_Çoxsaylı əvəzetmə...", "fillSelectedLinesWithClipboard": "Seçilmiş sətirləri mübadilə buferindəki mətnlə doldur", "goToLineNumber": "_Sətir nömrəsinə keç...", + "commandPalette": "Əmr _palitrası...", "rightToLeftMode": "S_ağdan sola yazı rejimi", "modifySelectionDotDotDot": "_Seçimi dəyiş...", "tools": "_Alətlər", @@ -852,6 +941,7 @@ "applyDurationLimits": "Müddət _məhdudiyyətlərini tətbiq et...", "batchConvert": "_Toplu çevir...", "beautifyTimeCodes": "Vaxt kodlarını nizamla...", + "improveTimeCodes": "Vaxt kodlarını yaxşılaşdır (məcburi uyğunlaşdırma)...", "bridgeGaps": "_Boşluqları bağla...", "applyMinGap": "Altyazılar arasında minimal boşluq tətbiq et...", "changeCasing": "_Böyük və kiçik hərfləri dəyiş...", @@ -990,6 +1080,9 @@ "selectCurrentLineWhilePlayingHint": "Oynatma zamanı cari altyazını seç {0}", "videoPosition": "Video mövqeyi {0}", "videoPositionTextBox": "Video mövqeyi üçün mətn xanası {0}", + "toolbarLineBreakX": "Sətir keçidi {0} (alətlər panelinin qalanı yeni sırada davam edir)", + "initialText": "Seçilmiş sətrin ilkin mətni", + "initialTextHint": "Seçilmiş sətrin seçildiyi andakı mətni", "hideWaveformToolbar": "Alətlər panelini gizlət {0}", "resetZoomAndSpeed": "Miqyası və oynatma sürətini sıfırla {0}", "removeBlankLines": "Boş sətirləri çıxar {0}", @@ -1003,6 +1096,15 @@ "textPlayHint": "Cari altyazını oynat və sonunda dayan {0}", "textPauseHint": "Oynatmaya fasilə ver {0}", "textNextHint": "Növbəti altyazını oynat və sonunda dayan {0}", + "moveSelectedLines": "Seçilmiş sətirləri sürüşdür (geri/irəli düymələri)", + "moveSelectedLinesAndFollowing": "Seçilmiş sətirləri və bütün sonrakıları sürüşdür (geri/irəli düymələri)", + "moveAllLines": "Bütün sətirləri sürüşdür (geri/irəli düymələri)", + "moveSelectedLinesBackHint": "Seçilmiş sətirləri {0} ms geri sürüşdür {1}", + "moveSelectedLinesForwardHint": "Seçilmiş sətirləri {0} ms irəli sürüşdür {1}", + "moveSelectedLinesAndFollowingBackHint": "Seçilmiş sətirləri və bütün sonrakıları {0} ms geri sürüşdür {1}", + "moveSelectedLinesAndFollowingForwardHint": "Seçilmiş sətirləri və bütün sonrakıları {0} ms irəli sürüşdür {1}", + "moveAllLinesBackHint": "Bütün sətirləri {0} ms geri sürüşdür {1}", + "moveAllLinesForwardHint": "Bütün sətirləri {0} ms irəli sürüşdür {1}", "guessStartNoLineSelected": "Başlanğıcı təxmin et: sətir seçilməyib", "guessStartTimeCodesLocked": "Başlanğıcı təxmin et: vaxt kodları kilidlənib", "guessStartNoWaveform": "Başlanğıcı təxmin et: səs dalğası qrafiki yoxdur", @@ -1024,12 +1126,15 @@ "charactersPerSecond": "Simvol/saniyə: {0}", "chooseColumn": "Sütun seç", "columnPaste": "Sütun üzrə yapışdır", + "commandPaletteTitle": "Əmr palitrası", + "commandPaletteSearchPlaceholder": "Əmrləri axtarmaq üçün yazın...", + "commandPaletteNoCommandsFound": "Uyğun əmr yoxdur", "createdEmptyTranslation": "Cari altyazıdan boş tərcümə yaradıldı", "deleteText": "Mətni sil", "deleteTextAndShiftCellsUp": "Mətni sil və xanaları yuxarı sürüşdür", "endTimeMustBeAfterStartTime": "Bitmə vaxtı başlama vaxtından sonra olmalıdır.", "errorLoad7Zip": "Görünür, bu fayl sıxılmış 7-Zip faylıdır.\n\nSubtitle Edit sıxılmış faylları aça bilmir.", - "errorLoadBinaryZeroes": "Təəssüf ki, bu faylda yalnız ikilik sıfırlar var!\n\nBu faylı Subtitle Edit ilə redaktə etmisinizsə, Fayl > Avtomatik ehtiyat nüsxəni bərpa et... menyusundan ehtiyat nüsxə tapa bilərsiniz.", + "errorLoadBinaryZeroes": "Təəssüf ki, bu faylda yalnız ikilik sıfırlar var!\n\nBu faylı Subtitle Edit ilə redaktə etmisinizsə, Fayl > Avtomatik ehtiyat nüsxəni bərpa et... menyusundan ehtiyat nüsxə tapa bilərsiniz.", "errorLoadGZip": "Görünür, bu fayl sıxılmış GZip faylıdır.\n\nSubtitle Edit sıxılmış faylları aça bilmir.", "errorLoadLargeFile": "Bu fayl altyazı faylı kimi açılmaq üçün çox böyükdür.", "errorLoadVideoFilePrompt": "Görünür, bu fayl video faylıdır:\n{0}\n\nVideonu \"Video > Videonu aç\" menyusundan və ya videonu pleyerin üzərinə sürükləyib buraxaraq aça bilərsiniz.\n\nOnu video faylı kimi açmaq istəyirsiniz?", @@ -1062,11 +1167,14 @@ "numberOfLinesEvenlyDistributedX": "{0} sətir bərabər paylandı", "oneLineCopiedFromOriginal": "Orijinal altyazıdan bir sətir kopyalandı", "oneLineCopiedToOriginal": "Orijinal altyazıya bir sətir kopyalandı", + "onlineOnlyVideo": "Yalnız onlayn olan video", + "onlineOnlyVideoXSizeYDownloadAndOpen": "\"{0}\" video faylı ({1}) yalnız onlayn saxlanılır, məsələn, Dropbox və ya iCloud Drive-da, və açılmazdan əvvəl endirilməlidir.\n\nİndi endirilib açılsın?", "oneLineMerged": "Bir sətir birləşdirildi", "oneLineSwitched": "Bir sətrin yeri dəyişdirildi", "overwriteExistingCells": "Mövcud xanaların üzərinə yaz", "overwriteOrShiftCellsDown": "Üzərinə yaz/xanaları aşağı sürüşdür", "parsingMatroskaFile": "Matroska faylı təhlil edilir...", + "readingDvdSubtitles": "DVD altyazıları oxunur...", "pasteFromClipboardDotDotDot": "Mübadilə buferindən yapışdır...", "redoPerformed": "Əməliyyat yenidən icra edildi", "redoPerformedXActionLeft": "Əməliyyat yenidən icra edildi (qalan əməliyyat: {0})", @@ -1106,12 +1214,14 @@ "trimmedXLines": "{0} altyazı sətri qısaldıldı", "pastedXLinesOverSelectedLines": "Seçilmiş sətirlərin üzərinə {0} sətir yapışdırıldı", "pastedXOfYLinesOverSelectedLines": "{1} sətirdən {0} sətir seçilmiş sətirlərin üzərinə yapışdırıldı, qalanları seçilmiş sahəyə sığmadı", + "insertedXLinesFromClipboard": "Mübadilə buferindən {0} sətir daxil edildi", "openOriginalDifferentNumberOfSubtitlesXY": "Orijinal və cari altyazı fayllarındakı altyazıların sayı eyni deyil.\n\n• Orijinal altyazılar: {0}\n• Cari altyazılar: {1}", "originalTextReadOnly": "Orijinal mətn (yalnız oxumaq üçün)", "originalTextEditMode": "Orijinal mətn (redaktə rejimi)", "originalIsReadOnlyNotSaved": "Orijinal altyazı yalnız oxumaq üçün istinaddır və yadda saxlanılmadı", "originalIsEmptyNotSaved": "Orijinal altyazıda mətn yoxdur və yadda saxlanılmadı", "originalIsReadOnlyReference": "Orijinal altyazı yalnız oxumaq üçün istinad kimi açılıb", + "closeTranslationQuestionXY": "\"{0}\" tərcüməsi bağlansın?\n\n\"{1}\" orijinal altyazısı redaktə etdiyiniz altyazıya çevriləcək. Tərcümə faylının özü dəyişdirilmir.", "allowEditOfOriginalSubtitle": "Orijinal altyazının redaktəsinə icazə ver", "showAllOriginalLinesX": "Bütün orijinal sətirləri göstər (burada {0} sətrin qarşılığı yoxdur)", "showAllOriginalLinesHint": "Tərcümədə nəyin çatışmadığını görə bilməyiniz üçün qarşılığı olmayan sətirlər əlavə sətirlər kimi göstərilir.", @@ -1146,6 +1256,7 @@ "fileExportedInFormatXToY": "Fayl {0} formatında {1} məkanına ixrac edildi", "fileExportedInFormatXToFileY": "Fayl \"{0}\" formatında \"{1}\" faylına ixrac edildi", "fixedXLines": "{0} sətir düzəldildi", + "toolXChangedYLines": "{0}: {1} sətir dəyişdirildi", "transcriptionCompletedWithXLines": "Transkripsiya tamamlandı, {0} sətir yaradıldı", "openSubtitleFileX": "\"{0}\" altyazı faylı açılsın?", "replacedXOccurrences": "{0} uyğunluq əvəz edildi", @@ -1236,6 +1347,21 @@ "formattingDotDotDot": "Formatlaşdırma...", "imageBasedSubtitleForEditDotDotDot": "Redaktə üçün şəkil əsaslı altyazı...", "imageBasedSubtitleForOcrDotDotDot": "OCR üçün şəkil əsaslı altyazı...", + "dvdSubtitlesDotDotDot": "DVD-dən altyazılar (IFO/VOB)...", + "titleImportDvd": "DVD-dən altyazıları idxal et", + "dvdIfoFile": "IFO faylı", + "dvdVobFiles": "VOB faylları", + "dvdVideoStandard": "Video standartı", + "dvdStartRipping": "Çıxarmağa başla", + "dvdRippingAborted": "Çıxarma dayandırıldı", + "dvdOpenIfoFile": "DVD IFO faylını aç", + "dvdAddVobFiles": "VOB faylları əlavə et", + "dvdIfoFiles": "DVD IFO faylları", + "dvdVobFileType": "DVD VOB faylları", + "dvdDropHint": "IFO faylını açın (VIDEO_TS\\VTS_01_0.IFO) və ya VOB faylları əlavə edin - ya da onları bura sürükləyin", + "dvdNotAnIfoFileX": "{0} DVD IFO faylı deyil", + "dvdMenuIfoNoTitleSetsX": "{0} yanında başlıq dəstləri (VTS_xx_0.IFO) tapılmadı", + "dvdEncryptedXOfY": "{1} altyazı paketindən {0} hələ də CSS ilə şifrələnib - bu VOB faylları şifrəsi açılmadan kopyalanıb, buna görə bəzi altyazı şəkilləri pozulmuş olacaq.\n\nTəmiz nəticə üçün əvvəlcə DVD-nin şifrəsini DVD çıxarma aləti ilə açın.\n\nYenə də davam edilsin?", "splitTextAt": "Mətni bölmə meyarı", "blankLines": "Boş sətirlər", "oneLineIsOneSubtitle": "Bir sətir bir altyazıdır", @@ -1255,8 +1381,13 @@ "forcedAlignerProgress": "Uyğunlaşdırılır... pəncərə {0} / {1}, sətir {2} / {3}", "forcedAlignerSetupTitle": "Vaxt kodlarını məcburi uyğunlaşdırıcı vasitəsilə uyğunlaşdır", "forcedAlignerSetupIntro": "Məcburi uyğunlaşdırıcı səsi əvvəlcədən mətnə çevirmədən mövcud altyazı mətnini səslə uyğunlaşdırır. Uzun videolar hissələr üzrə uyğunlaşdırıldığı üçün istənilən uzunluqda video ilə işləyir.", + "forcedAlignerEndsFromSpeech": "Son vaxtları ayrılmış nitqdən təyin et (yavaş)", + "forcedAlignerEndsFromSpeechHint": "Məcburi uyğunlaşdırıcı sətrin harada bitdiyini deyil, harada başladığını tapır, buna görə son vaxtlar adətən oxuma vaxtından götürülür. Bu açıq olduqda əvvəlcə səsdən musiqi və səs effektləri çıxarılır və hər sətir nitqin susduğu yerdə bitir. GPU ilə təxminən videonun özü qədər, GPU olmadan isə dəfələrlə çox vaxt aparır.", + "forcedAlignerIsolatingSpeech": "Nitq ayrılır... {0}", + "forcedAlignerIsolatingSpeechFailed": "Nitqi ayırmaq mümkün olmadı - son vaxtlar əvəzinə oxuma vaxtından təyin edildi.", "forcedAlignerModel": "Uyğunlaşdırıcı modeli", - "forcedAlignerDownloadEngine": "Mühərriki endir / yenilə..." + "forcedAlignerDownloadEngine": "Mühərriki endir / yenilə...", + "forcedAlignerEstimatedXOfY": "{1} sətirdən {0} uyğunlaşdırıla bilmədi və oxuma vaxtına görə yerləşdirildi - onların vaxt kodları yalnız təxminidir. Ehtimal ki, ssenari videoda deyiləndən uzundur." }, "export": { "exportImagesProfiles": "Şəkil ixracı profilləri", @@ -1305,6 +1436,18 @@ "imageBasedSubtitleSaved": "Şəkil əsaslı altyazı yadda saxlanıldı", "fullFrameImage": "Tam kadr ölçüsündə şəkil", "fullFrameImageHint": "Altyazının mövqeyini saxlayaraq hər şəkli video kadrının ölçüsünə uyğunlaşdır", + "stereo3D": "3D", + "stereo3DHint": "3D video üçün: altyazını kadrın hər gözə aid yarısında bir dəfə çək", + "halfSideBySide": "Yarım yan-yana", + "halfTopBottom": "Yarım yuxarı/aşağı", + "depth3D": "Dərinlik", + "depth3DHint": "Altyazının ekrandan nə qədər önə çıxması - müsbət onu yaxınlaşdırır, mənfi geri itələyir", + "plane3D": "3D-Plane", + "plane3DHint": "BD3D2MK3D və ya OFSExtractor ilə yaradılmış 3D-Plane (.ofs) faylından hər altyazıya 3D Blu-ray-in onun üçün saxladığı dərinliyi ver. 3D-Plane-də dərinlik olmayan yerlərdə Dərinlik istifadə olunur", + "openPlane3DTitle": "3D-Plane faylını aç", + "unableToLoadPlane3DX": "3D-Plane yüklənə bilmədi: {0}", + "plane3DXDepthYToZ": "{0} (dərinlik {1} - {2})", + "plane3DXNoDepth": "{0} (dərinlik dəyərləri yoxdur)", "textEffect": "Mətn effekti", "textEffectSettingsTitle": "Mətn effekti parametrləri", "textEffectPreset": "Hazır parametr dəsti", @@ -1409,7 +1552,22 @@ "restoreAutoBackupFile": "Avtomatik ehtiyat nüsxə faylını bərpa et", "restoreXFromY": "\"{0}\" faylını {1} tarixli nüsxədən bərpa etmək istəyirsiniz?", "deleteAllSubtitleBackups": "Bütün altyazı ehtiyat nüsxə fayllarını silmək istəyirsiniz?", - "deleteAll": "Hamısını sil" + "deleteAll": "Hamısını sil", + "subtitles": "Altyazılar", + "settingsBackupInfo": "Settings.json faylının ehtiyat nüsxəsi Subtitle Edit başladıqda, ən çoxu {0} gündə bir dəfə və yalnız parametrlər dəyişibsə çıxarılır. Ən yeni {1} ehtiyat nüsxə saxlanılır.", + "settingsBackupInfoEveryStart": "Parametrlər dəyişibsə, Settings.json faylının ehtiyat nüsxəsi Subtitle Edit hər dəfə başladıqda çıxarılır. Ən yeni {0} ehtiyat nüsxə saxlanılır.", + "settingsBackupOff": "Parametrlərin avtomatik ehtiyat nüsxəsi söndürülüb (Seçimlər → Parametrlər → Fayl).", + "lastSettingsBackupX": "Son ehtiyat nüsxə: {0}", + "noSettingsBackupsYet": "Hələ parametrlərin ehtiyat nüsxəsi yoxdur", + "openSettingsBackupFolder": "Parametrlərin ehtiyat nüsxə qovluğunu aç", + "backUpSettingsNow": "İndi ehtiyat nüsxə çıxar", + "settingsBackedUp": "Cari parametrlərin ehtiyat nüsxəsi çıxarıldı.", + "restoreSettings": "Parametrləri bərpa et", + "restoreSettingsFromX": "Cari parametrlərinizi {0} tarixli ehtiyat nüsxə ilə əvəz etmək istəyirsiniz?\n\nƏvvəlcə cari parametrlərinizin ehtiyat nüsxəsi çıxarılacaq. Bəzi dəyişikliklər yalnız Subtitle Edit yenidən başladıldıqdan sonra qüvvəyə minir.", + "settingsRestored": "Parametrlər bərpa edildi. Bütün dəyişikliklərin qüvvəyə minməsi üçün Subtitle Edit-i yenidən başladın.", + "settingsRestoreFailed": "Parametrləri bərpa etmək mümkün olmadı: {0}", + "settingsBackupNotValid": "ehtiyat nüsxə etibarlı parametrlər faylı deyil, buna görə cari parametrləriniz saxlanıldı", + "deleteAllSettingsBackups": "Bütün parametr ehtiyat nüsxə fayllarını silmək istəyirsiniz?" }, "propertiesDCinema": { "title": "DCinema SMPTE xüsusiyyətləri", @@ -1423,22 +1581,16 @@ "editRate": "Montaj sürəti", "timeCodeRate": "Vaxt kodu sürəti", "startTime": "Başlama vaxtı", - "font": "Şrift", "fontId": "Şrift identifikatoru", "fontUri": "Şriftin resurs ünvanı (URI)", - "generate": "Yarat", - "fontColor": "Şrift rəngi", "chooseColor": "Rəng seç", "fontEffect": "Şrift effekti", "effectColor": "Effekt rəngi", - "fontSize": "Şrift ölçüsü", "topBottomMargin": "Üst/alt kənar boşluğu", "fadeUpTime": "Tədricən görünmə müddəti", "fadeDownTime": "Tədricən itmə müddəti", - "frames": "Kadrlar", "zPosition": "Z mövqeyi", - "zPositionHelp": "Müsbət ədədlər mətni uzaqlaşdırır, mənfi ədədlər yaxınlaşdırır. Z mövqeyi sıfır olduqda mətn 2D olur", - "export": "İxrac et..." + "zPositionHelp": "Müsbət ədədlər mətni uzaqlaşdırır, mənfi ədədlər yaxınlaşdırır. Z mövqeyi sıfır olduqda mətn 2D olur" }, "webVtt": { "setStylesForSelectedLinesTitle": "Seçilmiş sətirlər üçün WebVTT üslublarını təyin et", @@ -1476,11 +1628,61 @@ "ignoreFormatting": "Formatlaşdırmanı nəzərə alma", "ignoreFormattingHint": "Yalnız və ya {\\an8} kimi formatlaşdırma etiketləri ilə fərqlənən sətirlər fərqli sayılmır", "showOnlyDifferencesInText": "Yalnız mətndəki fərqlər", + "ignoreNumbering": "Nömrələməni nəzərə alma", + "ignoreNumberingHint": "Yalnız nömrəsi ilə fərqlənən sətirlər fərqli sayılmır", + "ignoreTimeDifferenceMs": "Vaxt tolerantlığı (ms)", + "ignoreTimeDifferenceMsHint": "Bu qədər və ya daha az millisaniyə fərqlənən başlanğıc və son vaxtları fərqli sayılmır", + "compareDifferences": "Fərqlər", + "compareTextDifferences": "Mətn fərqləri", + "compareCurrent": "Cari", + "compareReference": "İstinad", + "compareEditable": "Redaktə edilə bilən", + "compareEditableHint": "Burada edilən dəyişikliklər Tətbiq et düyməsini basdıqda altyazıya qaytarılır", + "compareReadOnly": "Yalnız oxunuş", + "compareTakeFromReference": "Mətni və vaxtlamanı istinaddan götür", + "compareInsertFromReference": "Bu sətri cari altyazıya daxil et", + "compareDeleteFromCurrent": "Bu sətri cari altyazıdan sil", + "compareTakeText": "Mətni götür", + "compareTakeTiming": "Vaxtlamanı götür", + "compareEditLine": "Sətri redaktə et", + "compareEditHint": "Yadda saxlamaq üçün Ctrl+Enter, ləğv etmək üçün Esc", + "compareEdited": "Redaktə edilib", + "compareOnePendingChange": "1 gözləyən dəyişiklik", + "compareXPendingChanges": "{0} gözləyən dəyişiklik", + "compareDiscardXChanges": "Müqayisədə edilən {0} dəyişiklik ləğv edilsin?", + "compareXChangesApplied": "Müqayisə: {0} dəyişiklik tətbiq edildi", + "compareChangeTextX": "#{0} mətn istinaddan", + "compareChangeTimingX": "#{0} vaxtlama istinaddan", + "compareChangeTextAndTimingX": "#{0} mətn və vaxtlama istinaddan", + "compareChangeEditedX": "#{0} redaktə edildi", + "compareChangeInsertedX": "#{0} daxil edildi", + "compareChangeDeletedX": "#{0} silindi", + "compareSyncPoint": "Sinxronlaşdırma nöqtəsi", + "compareSyncPointHint": "Sinxronlaşdırma nöqtəsi - bu iki sətir həmişə cüt kimi göstərilir, yuxarı və aşağıdakı sətirlər isə ayrıca düzülür", + "compareSyncPickCurrent": "Sinxronlaşdırma nöqtəsi: bu cari sətirdən istifadə et", + "compareSyncPickReference": "Sinxronlaşdırma nöqtəsi: bu istinad sətrindən istifadə et", + "compareSyncRemove": "Sinxronlaşdırma nöqtəsini sil", + "compareClearXSyncPoints": "Sinxronlaşdırma nöqtələrini təmizlə ({0})", + "compareSyncCurrentPickedX": "Cari #{0} sinxronlaşdırma nöqtəsi kimi seçildi - uyğun istinad sətrini seçin və Sinxronlaşdır düyməsini basın", + "compareSyncReferencePickedX": "İstinad #{0} sinxronlaşdırma nöqtəsi kimi seçildi - uyğun cari sətri seçin və Sinxronlaşdır düyməsini basın", + "compareSyncWithCurrentX": "Cari #{0} ilə sinxronlaşdır", + "compareSyncWithReferenceX": "İstinad #{0} ilə sinxronlaşdır", + "compareSyncApply": "Sinxronlaşdır", + "compareSyncPointSetXY": "Sinxronlaşdırma nöqtəsi təyin edildi: cari #{0} və istinad #{1} indi cüt kimi göstərilir", + "compareSyncAlreadyPairedXY": "Cari #{0} və istinad #{1} artıq eyni başlanğıcla cüt kimi göstərilir - sinxronlaşdırmağa ehtiyac yoxdur", + "compareSyncPointShiftedXYZW": "Sinxronlaşdırma nöqtəsi təyin edildi: cari #{0}-#{1} istinad #{3} ilə başlamaq üçün {2} sürüşdürüldü", + "compareChangeSyncShiftXYZ": "#{0}-#{1} {2} sürüşdürüldü (sinxronlaşdırma nöqtəsi)", + "compareTimingDeltaHint": "İstinadın cari sətirdən nə qədər gec (+) və ya tez (−) başlayıb bitdiyi", "loadXFromFile": "\"{0}\" faylını yüklə", + "compareLoadSavedFile": "Yadda saxlanılmış faylı yüklə", "saveCompareHtmlTitle": "Müqayisə HTML faylını yadda saxla", "pickMatroskaTrackX": "Matroska cığırını seç: {0}", "pickTransportStreamTrackX": "Nəqliyyat axını cığırını seç: {0}", + "chapters": "Bölmələr", + "dvdVobFilesMissingX": "VOB faylları çatışmır ({0}% tapıldı)", "pickMp4TrackX": "MP4 cığırını seç: {0}", + "pickMxfTrackX": "MXF trekini seç - {0}", + "pickMpegTrackX": "MPEG trekini seç - {0}", "rosettaProperties": "Timed Text Rosetta IMSC xüsusiyyətləri", "rosettaFontSize": "Şrift ölçüsü (sətrin hündürlüyü)", "propertyTimeBase": "Vaxt bazası", @@ -1490,7 +1692,6 @@ "propertyDefaultRegion": "Standart bölgə", "propertyStyleAttributeName": "Üslub atributunun adı", "propertyTimeCodeFormat": "Vaxt kodu formatı", - "propertyFileExtension": "Fayl genişlənməsi", "propertyTopOrigin": "Üst bölgənin başlanğıc nöqtəsi", "propertyTopExtent": "Üst bölgənin ölçüsü", "propertyBottomOrigin": "Alt bölgənin başlanğıc nöqtəsi", @@ -1556,7 +1757,8 @@ "findWhat": "Axtarılan mətn", "descriptionOptional": "Təsvir (istəyə bağlı)", "invalidRegularExpressionX": "Yanlış müntəzəm ifadə: {0}", - "regularExpressionTooSlowX": "Müntəzəm ifadənin icrası {0} saniyədən sonra dayandı. Qayda ötürülür, daha sadə nümunə sınayın" + "regularExpressionTooSlowX": "Müntəzəm ifadənin icrası {0} saniyədən sonra dayandı. Qayda ötürülür, daha sadə nümunə sınayın", + "moveToCategory": "Kateqoriyaya köçür" }, "find": { "searchTextWatermark": "Axtarılacaq mətn...", @@ -1569,7 +1771,9 @@ "replaceIn": "Əvəzetmə/axtarış sahəsi", "replaceInTextAndOriginal": "Mətn və orijinal mətn", "replaceInTextOnly": "Yalnız mətn", - "replaceInOriginalOnly": "Yalnız orijinal mətn" + "replaceInOriginalOnly": "Yalnız orijinal mətn", + "replacedOneOccurrence": "Bir uyğunluq əvəz edildi", + "replacedXOccurrences": "{0} uyğunluq əvəz edildi" }, "regularExpressionContextMenu": { "wordBoundary": "Söz sərhədi (\\b)", @@ -1597,6 +1801,7 @@ "xLinesYSubtitles": "{0} sətir, {1} altyazı", "xLinesYSubtitlesZErrors": "{0} sətir, {1} altyazı, {2} xəta", "couldNotParseAsX": "{0} kimi təhlil etmək mümkün olmadı", + "readAsXUseAsY": "Mənbə {1} kimi oxuna bilmədi, lakin {0} kimi oxuna bildi.\nSətirlərdən istifadə edib {1} kimi yadda saxlamağa davam edilsin?", "selectedXCharactersYLines": "Seçilib: {1} sətirdə {0} simvol", "replacedXOccurrences": "{0} uyğunluq əvəz edildi", "invalidRegularExpression": "Yanlış müntəzəm ifadə", @@ -1632,7 +1837,23 @@ "largeChangeWarning": "Böyük dəyişiklikdir, mətn yenidən yazılmış kimi görünür. Diqqətlə yoxlayın", "mismatchWarning": "Orijinala bənzəmir, başqa sətrə aid ola bilər", "engineError": "Süni intellekt mühərriki ilə əlaqə yaratmaq mümkün olmadı: {0}", - "playCurrentLineHint": "Seçilmiş sətri video pleyerdə oynat və sonunda fasilə ver (sətrə iki dəfə klikləməklə də mümkündür)" + "playCurrentLineHint": "Seçilmiş sətri video pleyerdə oynat və sonunda fasilə ver (sətrə iki dəfə klikləməklə də mümkündür)", + "editAfterHint": "Tətbiq etməzdən əvvəl düzəlişi redaktə etmək üçün seçilmiş sıranın mətninə klikləyin (Enter yadda saxlayır, Escape ləğv edir)", + "template": "Şablon", + "templatePlaceholder": "Təlimatı əvəz etmək üçün şablon seçin", + "templateStandard": "Standart korrektura", + "templateSpeechToText": "Nitqdən mətnə nəticəsinin təmizlənməsi", + "templateMachineTranslation": "Maşın tərcüməsinin düzəldilməsi", + "templateSdh": "SDH / eşitmə məhdudiyyətli şəxslər üçün", + "referenceContext": "İstinad konteksti", + "referenceContextInfo": "İxtiyari. Adlar, personajlar, terminlər lüğəti, xülasə və ya üslub qeydləri - model bunu adlar və terminlər üçün əsas mənbə kimi qəbul edir. Hər paketlə göndərilir.", + "referenceContextPlaceholder": "Adlar: Kaito, Mei xala, Dr. Hollis\nTerminlər: Şinkansen, warp nüvəsi\nXülasə: Kaito itkin atasını tapmaq üçün Tokioya gedir.", + "generateContext": "Süni intellektlə yarat", + "generateContextHint": "Seçilmiş süni intellekt mühərriki altyazını oxuyub adlar, terminlər və xülasə layihəsini hazırlasın - istifadə etməzdən əvvəl nəticəni yoxlayın", + "generatingContextPartXOfY": "{1} hissədən {0} oxunur...", + "generatingContextSynopsis": "Xülasə yazılır...", + "replaceContextQuestion": "Cari istinad konteksti əvəz edilsin?", + "noContextGenerated": "Süni intellekt mühərriki istifadəyə yararlı istinad məlumatı qaytarmadı." }, "aiAssistant": { "title": "Süni intellekt köməkçisi", @@ -1678,6 +1899,7 @@ "removeLineBreaksPixelWidth": "Bir sətrə sığan altyazıların sətirlərini birləşdir (piksel eni)", "fixUppercaseIInsideLowercaseWords": "Kiçik hərflə yazılmış sözlərdəki böyük 'I' hərfini düzəlt (OCR xətası)", "fixDoubleApostrophes": "Qoşa apostrof işarələrini ('') bir dırnaq işarəsi (\") ilə əvəz et", + "fixMisreadQuotes": "Qoşa dırnaq kimi səhv oxunmuş apostrofları düzəlt (OCR, ingilis dili)", "addPeriods": "Növbəti sətir böyük hərflə başlayırsa, əvvəlki sətrin sonuna nöqtə əlavə et", "startWithUppercaseLetterAfterParagraph": "Abzasdan sonra böyük hərflə başla", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Abzas daxilində nöqtədən sonra böyük hərflə başla", @@ -1700,6 +1922,7 @@ "fixCommasExample": ",, → ,", "removeLineBreaksExample": "Salam
dünya! → Salam dünya!", "fixDoubleApostrophesExample": "''Qoşa apostroflar var'' → \"Bir cüt dırnaq işarəsi var\"", + "fixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "addPeriodsExample": "Salam dünya → Salam dünya.", "startWithUppercaseLetterAfterParagraphExample": "p1: Salam! || p2: salam! → p1: Salam! || p2: Salam!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Salam! necəsən? → Salam! Necəsən?", @@ -1789,6 +2012,8 @@ "fixMinDurationMs": "Minimum müddəti düzəlt (ms)", "doNotGoPastShotChange": "Səhnə dəyişikliyini keçmə", "fixMaxDurationMs": "Maksimum müddəti düzəlt (ms)", + "fixMinDurationFrames": "Minimum müddəti düzəlt (kadr)", + "fixMaxDurationFrames": "Maksimum müddəti düzəlt (kadr)", "minimumDurationMilliseconds": "Minimum müddət (millisaniyə):", "maximumDurationMilliseconds": "Maksimum müddət (millisaniyə):", "maxDurationShouldBeHigherThanMinDuration": "Maksimum müddət minimum müddətdən çox olmalıdır", @@ -1838,13 +2063,80 @@ "timeCodesExtractFailed": "Videodan vaxt kodlarını oxumaq mümkün olmadı", "timeCodesHint": "Altyazı vaxtlarını sabit kadr sürəti fərziyyəsinə əsaslanmadan videonun həqiqi kadr vaxtlarına uyğunlaşdır. Bütün videonu bir dəfə oxumaq lazımdır; nəticə keşdə saxlanılır." }, + "improveTimeCodes": { + "title": "Vaxt kodlarını yaxşılaşdır (məcburi uyğunlaşdırma)", + "aligner": "Uyğunlaşdırıcı", + "alignerHint": "Səsdə hər sətri dinləyən model. Altyazının dili üçün ən yaxşı seçimlər əvvəldə göstərilir.", + "maxShift": "Maksimum sürüşmə (saniyə)", + "maxShiftHint": "Altyazının nə qədər sinxrondan çıxa biləcəyi. Başlanğıcı bundan daha çox sürüşəcək sətir olduğu kimi saxlanılır və işarələnir. Dəyərdən asılı olmayaraq, ətrafdakı sətirlərdən yarım saniyədən çox sürüşmək istəyən tək sətir kor-koranə sürüşdürülmür: qonşuları hamısı sürüşübsə, onlarla birlikdə sürüşür, əks halda yoxlamağınız üçün işarəsiz təklif olunur.", + "adjustStartTimes": "Başlanğıc vaxtlarını tənzimlə", + "adjustEndTimes": "Son vaxtları tənzimlə", + "isolateSpeech": "Əvvəlcə nitqi ayır (yavaş)", + "isolateSpeechHint": "Uyğunlaşdırmadan əvvəl musiqi və səs effektlərini çıxarır ki, uyğunlaşdırıcı yalnız dialoqu eşitsin. Yüksək musiqi və ya hərəkət fonunda deyilən sətirlərdə kömək edir, lakin GPU ilə təxminən səsin özü qədər, GPU olmadan isə dəfələrlə çox vaxt aparır.", + "isolatingSpeech": "Nitq ayrılır... (bu bir qədər vaxt aparır)", + "isolateSpeechFailed": "Nitqi ayırmaq mümkün olmadı - əvəzində orijinal səslə uyğunlaşdırıldı.", + "checkWithSpeechToText": "Nitqi mətnə çevirmə ilə yoxla", + "checkWithSpeechToTextHint": "Səsi həm də mətnə çevirir və hər sürüşməni sözlərin həqiqətən eşidildiyi yerlə yoxlayır. Nitqin təsdiqlədiyi böyük sürüşmələr sizin üçün işarələnir, sətrin eşidildiyi yerdən uzaqlaşan sürüşmələr isə yoxlamağınız üçün işarəsiz qalır. Həmçinin hər sətrin nə qədərinin eşidildiyini göstərir - aşağı pay mətnin deyiləndən fərqləndiyini bildirir. Maksimum sürüşmədən daha çox sinxrondan çıxmış altyazı - sabit fərq, kadr sürəti uyğunsuzluğundan yaranan sürüşmə və ya səhnələrin kəsildiyi yerlərdəki sıçrayışlar - əvvəlcə eşidilən sözlərə görə sinxronlaşdırılır. Crisp ASR Parakeet istifadə edir, bu da GPU ilə tammetrajlı film üçün bir neçə dəqiqə çəkir.", + "checkWithSpeechToTextNotAvailableX": "{0} üçün nitqi mətnə çevirmə yoxlaması mövcud deyil", + "transcribingToCheck": "Uyğunlaşdırmanı yoxlamaq üçün mətnə çevrilir...", + "speechToTextFailed": "Nitqi mətnə çevirmə alınmadı - vaxt kodları onunla yoxlanılmadı.", + "speechToTextX": "Nitqi mətnə çevirmə: {0}", + "speechToTextConfirmedXDisputedY": "Nitq: {0} təsdiqləndi, {1} şübhəli", + "hardlyHeardX": "Nitqi mətnə çevirmə altyazı sözlərinin yalnız {0}%-ni eşitdi. Altyazı danışılan dildədirmi? Uyğunlaşdırıcı tərcüməni yerləşdirə bilmir.", + "heard": "Eşidilən", + "heardHint": "Sətrin nə qədərini nitqi mətnə çevirmə eşitdi. Aşağı pay mətnin deyiləndən fərqləndiyini bildirir - uyğunlaşdırıcının ən çox səhv edə biləcəyi yer.", + "statusConfirmedBySpeech": "Nitqlə təsdiqləndi", + "statusDisputedBySpeech": "Olduğu yerdə eşidildi", + "statusMovedWithSync": "Sinxronlaşdırma ilə sürüşdürüldü", + "syncedFirstXY": "Əvvəlcə sinxronlaşdırıldı: əvvəldə {0} s, sonda {1} s", + "showSpeechOnly": "Yalnız nitqi göstər", + "showSpeechOnlyHint": "Uyğunlaşdırılmış səs dalğasını musiqi və səs effektləri çıxarılmış səsdən çək; orijinal səs dalğası müqayisə üçün olduğu kimi qalır. Nitq ayrıldıqdan sonra mövcuddur - burada və ya əsas pəncərənin səs dalğasındakı \"Yalnız nitqi göstər\" ilə.", + "align": "Uyğunlaşdır", + "original": "Orijinal", + "aligned": "Uyğunlaşdırılmış", + "intro": "Səsdə hər sətri dinləmək və vaxt kodlarını dəqiqləşdirmək üçün uyğunlaşdırıcı seçin və \"Uyğunlaşdır\" düyməsini basın.", + "extractingAudio": "Səs çıxarılır...", + "aligningBatchXOfY": "Uyğunlaşdırılır... {1} paketdən {0}", + "extractAudioFailed": "ffmpeg ilə səsi çıxarmaq mümkün olmadı.", + "modelWillBeDownloaded": "{0} endiriləcək", + "summaryXRetimedYKeptZSkipped": "Yenidən vaxtlandı: {0} · Saxlanıldı: {1} · Nitq yoxdur: {2}", + "meanShiftX": "Orta sürüşmə: {0} ms", + "toCheckX": "Yoxlanılacaq: {0}", + "largeMovesToCheckX": "{0} sətir təkbaşına çox uzağa sürüşəcək və işarəsiz saxlanılıb - onları dinləyin (F5 uyğunlaşdırılmış sətri, Shift+F5 orijinalı oxudur) və düzgün olanları işarələyin.", + "linesToCheckX": "{0} sətir yoxlamaq üçün işarəsiz saxlanılıb - onları dinləyin (F5 uyğunlaşdırılmış sətri, Shift+F5 orijinalı oxudur) və düzgün olanları işarələyin.", + "changeXOfY": "{1} dəyişiklikdən {0}", + "previousChange": "Əvvəlki dəyişiklik", + "nextChange": "Növbəti dəyişiklik", + "startShift": "Başlanğıc", + "endShift": "Son", + "statusRetimed": "Yenidən vaxtlandı", + "statusMovedWithNeighbours": "Qonşuları ilə birlikdə sürüşdürüldü", + "statusLargeMoveUnconfirmed": "Böyük sürüşmə - dinləyin, tətbiq etmək üçün işarələyin", + "statusUnchanged": "Artıq yerindədir", + "statusNoSpeech": "Nitq yoxdur", + "statusShiftTooLarge": "Saxlanıldı - sürüşmə çox böyükdür", + "statusFailed": "Saxlanıldı - uyğunlaşdırıcı uğursuz oldu", + "statusAdjustedByHand": "Əl ilə tənzimləndi", + "alignedWaveformHint": "Sətri sürüşdürmək üçün onu sürükləyin və ya başlanğıcını və ya sonunu dəyişmək üçün kənarlarını sürükləyin.", + "playLine": "Sətri oynat", + "undoAdjustment": "Tənzimləməni geri al", + "playPause": "Oynat / fasilə", + "playAligned": "Uyğunlaşdırılmış", + "playAlignedHint": "Seçilmiş sətri uyğunlaşdırılmış vaxt kodları ilə oynat", + "apply": "Tətbiq et", + "applyHint": "Orijinal vaxt kodlarını saxlamaq üçün sətrin işarəsini götürün. Sətri oynatmaq üçün ona iki dəfə klikləyin. Sətirləri uyğunlaşdırılmış səs dalğasında da sürüşdürmək və ya ölçüsünü dəyişmək olar." + }, "beautifyTimeCodesProfile": { "title": "Vaxt kodlarının təkmilləşdirilməsi profilini redaktə et", "loadPreset": "Hazır parametr dəstini yüklə", "presetDefault": "Standart", "presetNetflix": "Netflix", "presetSdi": "SDI", - "general": "Ümumi", + "saveAsProfile": "Profil kimi yadda saxla...", + "deleteProfile": "Profili sil", + "profileName": "Profil adı", + "overwriteProfileX": "\"{0}\" adlı profil artıq mövcuddur. Üzərinə yazılsın?", + "deleteProfileX": "\"{0}\" profili silinsin?", "gap": "Fasilə", "gapSuffix": "kadr (aşağıdakı sıfırdan fərqli fasilə sahələrini də yeniləyir)", "milliseconds": "ms", @@ -1875,6 +2167,10 @@ "bridgeGaps": { "bridgeGapsSmallerThan": "Bu dəyərdən kiçik aralıqları doldur (ms)", "minGap": "Minimum aralıq (ms)", + "bridgeGapsSmallerThanFrames": "Bundan kiçik boşluqları birləşdir (kadr)", + "minGapFrames": "Minimum boşluq (kadr)", + "calculateBridgeGapsSmallerThanDotDotDot": "Boşluq birləşdirmə həddini kadr sürətindən hesabla...", + "useXMsAsBridgeGapsSmallerThan": "\"{0}\" millisaniyədən kiçik boşluqlar birləşdirilsin?", "numberOfSmallGapsBridgedX": "Doldurulmuş kiçik aralıqların sayı: {0}", "percentFoPrevious": "Əvvəlki altyazı üçün aralıq (%)", "gapChange": "Aralıq dəyişikliyi" @@ -1908,6 +2204,7 @@ "addColor": "Rəng əlavə et", "deleteLinesWithSpecificActorsOrStyles": "Bu aktyor və ya üslubların olduğu sətirləri sil (bir neçə dəyəri vergüllə ayırın)", "useSourceStylesIfPossible": "Mümkün olduqda mənbə üslublarından istifadə et", + "keepSourceEmbeddedFonts": "Mənbəyə daxil edilmiş şriftləri saxla (son hissə)", "editStyles": "Üslubları redaktə et", "editProperties": "Xassələri redaktə et", "editAttachments": "Qoşmaları redaktə et", @@ -1939,10 +2236,50 @@ "convertColorsToDialogReBreakLines": "Sətirləri yenidən böl", "snapTimeCodesToFramesInfo": "Hər başlama və bitmə vaxtını ən yaxın kadra yuvarlaqlaşdırır. Sabit kadr sürəti seçilmədikdə, kadr sürəti altyazı faylı ilə eyniadlı video faylından oxunur.", "addFolderDotDotDot": "Qovluq əlavə et...", + "addFolderRecursiveDotDotDot": "Qovluğu alt qovluqlarla əlavə et...", "selectFolderToConvert": "Çevriləcək faylların olduğu qovluğu seçin", "includeSubfolders": "Qovluq əlavə edərkən alt qovluqları da daxil et", + "videoFilesWhenAddingFolder": "Qovluq əlavə edərkən video faylları (mkv, mp4, ts...)", + "videoFilesAsk": "Soruş", + "videoFilesInclude": "Onların altyazı treklərini əlavə et", + "videoFilesSkip": "Ötür", + "folderContainsXVideoFiles": "Qovluqda {0} video faylı var (mkv, mp4, ts...).\n\nOnların daxili altyazı trekləri də əlavə edilsin, yoxsa yalnız altyazı faylları?", + "addVideoFiles": "Video faylları əlavə et", + "skipVideoFiles": "Yalnız altyazı faylları", + "doNotAskAgainVideoFiles": "Bir daha soruşma (Toplu çevirmə parametrlərində dəyişin)", + "settingsSectionOutput": "Çıxış", + "settingsSectionAddingFiles": "Faylların əlavə edilməsi", + "settingsSectionImageBasedSubtitles": "Şəkil əsaslı altyazılar (OCR)", + "settingsSectionOther": "Digər", "keepSourceFileTimestamp": "Çıxış fayllarında mənbə faylının tarixini/vaxtını saxla", - "scanningFolderX": "{0} yoxlanılır..." + "preventSleepWhileConverting": "Çevirmə zamanı kompüterin yuxu rejiminə keçməsinin qarşısını al", + "scanningFolderX": "{0} yoxlanılır...", + "transportStreamSettings": "Transport Stream parametrləri", + "transportStreamSettingsDotDotDot": "Transport Stream parametrləri...", + "transportStreamSettingsInfo": "Transport Stream fayllarından (.ts/.m2ts) çıxarılan altyazı treklərinə aiddir. Mövqe və video ölçüsü yalnız şəkil əsaslı formata ixrac edilən DVB şəkil treklərinə təsir edir.", + "transportStreamOverrideXPosition": "Orijinal X mövqeyini əvəz et", + "transportStreamOverrideYPosition": "Orijinal Y mövqeyini əvəz et", + "transportStreamOverrideVideoSize": "Orijinal video ölçüsünü əvəz et", + "transportStreamBottomMargin": "Alt kənar boşluğu", + "transportStreamFileNameEnding": "Fayl adının sonu", + "transportStreamFileNameEndingInfo": "Hər çıxarılan trek üçün genişlənmədən əvvəl əlavə olunur. Adi dil şəkilçisindən istifadə etmək üçün boş buraxın.", + "transportStreamOnlyTeletext": "Yalnız teletekst", + "transportStreamGetSizeFromVideo": "Ölçünü videodan götür...", + "twoLetterLanguageCodeUppercase": "İki hərfli dil kodu (böyük hərflərlə)", + "threeLetterLanguageCodeUppercase": "Üç hərfli dil kodu (böyük hərflərlə)", + "formatContainsDotDotDot": "Format ehtiva edir...", + "extensionIsDotDotDot": "Genişlənmə budur...", + "statusIsError": "Vəziyyət xətadır", + "forcedTracksOnly": "Yalnız məcburi treklər", + "xConvertedYFailedInZ": "{2} ərzində {0:#,###,##0} çevrildi, {1:#,###,##0} uğursuz oldu", + "xNotProcessed": "{0:#,###,##0} emal edilmədi", + "removeUnicodeControlCharactersTitle": "Unicode idarəetmə simvollarını çıxar", + "removeUnicodeControlCharactersInfo": "Mətndən görünməz Unicode istiqamət idarəetmə simvollarını (LRM, RLM, LRE, RLE, PDF, LRO və RLO) çıxarır və bölünməz boşluqları adi boşluqlarla əvəz edir.", + "preset": "Hazır parametr dəsti", + "savePresetDotDotDot": "Hazır parametr dəstini yadda saxla...", + "deletePreset": "Hazır parametr dəstini sil", + "presetName": "Hazır parametr dəstinin adı", + "deletePresetX": "\"{0}\" hazır parametr dəsti silinsin?" }, "changeCasing": { "fixNames": "Adları düzəlt", @@ -2027,10 +2364,13 @@ }, "mergeLinesWithSameText": { "maxMsBetweenLines": "Sətirlər arasında maksimum aralıq (millisaniyə)", - "includeIncrementingLines": "Mətni tədricən artan sətirləri də daxil et" + "maxFramesBetweenLines": "Sətirlər arasında maksimum kadr", + "includeIncrementingLines": "Mətni tədricən artan sətirləri də daxil et", + "includeRollUpCaptions": "Sürüşən (roll-up) titrləri daxil et" }, "mergeLinesWithSameTimeCodes": { "maxMsDifference": "Maksimum fərq (millisaniyə)", + "maxFramesDifference": "Maksimum fərq (kadr)", "makeDialog": "Dialoqlar yarat" }, "netflixCheckAndFix": { @@ -2130,12 +2470,29 @@ "letterboxCustom": "Fərdi zolaq hündürlüyü", "barHeightPx": "Zolağın hündürlüyü (px)", "titleSafePercent": "Başlıq üçün təhlükəsiz sahə (%)", + "moveCaptions": "Titrləri sürüşdür", + "moveCaptionsDotDotDot": "Titrləri sürüşdür...", + "moveCaptionsTo": "Titrləri sürüşdür", + "moveCaptionsIntoBars": "Qara zolaqların içinə (təsvirdən kənara)", + "moveCaptionsIntoPicture": "Təsvirin içinə (zolaqlardan kənara)", + "moveCaptionsOffset": "Kənardan məsafə (px)", + "letterboxBarHeightXPxYOfZCaptionsWillMove": "Zolağın hündürlüyü: {0} px - {2} titrdən {1} sürüşdürüləcək", + "removeFadeInOut": "Tədricən görünmə/itməni çıxar", + "removeFadeInOutXLinesRemoved": "{0} keçid sətri aid olduğu sətirlərlə birləşdirildi", + "removeFadeInOutNothingFound": "Tədricən görünmə/itmə sətirləri tapılmadı", "positionSummary": "{0}×{1}, {2} altyazı, zolağın hündürlüyü: {3} px", "xInActivePicture": "Görüntüdə: {0}", "xInTopBar": "Üst zolaqda: {0}", "xInBottomBar": "Alt zolaqda: {0}", "noImageSubtitlesLoaded": "Şəkil əsaslı altyazı yüklənməyib", - "imageBasedFormatNotSupported": "Şəkil əsaslı altyazı formatı tapılmadı və ya dəstəklənmir." + "imageBasedFormatNotSupported": "Şəkil əsaslı altyazı formatı tapılmadı və ya dəstəklənmir.", + "frameRateDeclaredInFile": "Blu-ray sup faylında göstərilən kadr sürəti", + "frameRateDetectedFromTimeCodesX": "Blu-ray sup vaxt kodlarından aşkarlanan kadr sürəti (faylda {0} göstərilib)", + "frameRateFromVideo": "Videonun kadr sürəti", + "frameRateCurrent": "Cari kadr sürəti", + "frameRateSetManually": "Əl ilə təyin edilmiş kadr sürəti", + "frameRateUsageInfo": "Blu-ray sup, BDN XML, DOST və FCP ixracları bu kadr sürəti ilə yazılır. Bu heç bir vaxtı dəyişmir - bunun üçün \"Kadr sürətini dəyiş\" istifadə edin.", + "useVideoFrameRateXInsteadOfY": "Videonun kadr sürəti {0}, lakin altyazı üçün {1} təyin edilib.\n\nVideonun kadr sürətindən ({0}) istifadə edilsin?" }, "removeTextForHearingImpaired": { "interjections": "Nidalar", @@ -2165,6 +2522,7 @@ "pickFontNameInstalledFonts": "Quraşdırılmış şriftlər", "pickFontNameCollectedFonts": "Toplanmış şriftlər", "colorPickerTitle": "Rəng seç", + "colorPickerBrightness": "Parlaqlıq", "filterLayersTitle": "Göstəriləcək qatları süzgəcdən keçir", "filterLayersHideFromWaveform": "Səs dalğasının qrafikində/spektroqramda gizlət", "filterLayersHideFromSubtitleGrid": "Altyazı cədvəlində gizlət", @@ -2215,7 +2573,21 @@ "correctWordsX": "Düzgün sözlər: {0}", "namesX": "Adlar: {0}", "addedToDictionaryX": "Lüğətə əlavə edilənlər: {0}", - "doNotShowThisAgain": "Bu mesajı bir daha göstərmə" + "doNotShowThisAgain": "Bu mesajı bir daha göstərmə", + "editUseAlwaysList": "\"Həmişə istifadə et\" siyahısını redaktə et...", + "useAlwaysListTitle": "Orfoqrafiya yoxlaması - \"Həmişə istifadə et\" siyahısı", + "useAlwaysListHeader": "\"Həmişə istifadə et\" siyahısı", + "useAlwaysListDescription": "Orfoqrafiya yoxlamasının avtomatik əvəz etdiyi sözlər, \"Hamısını dəyiş\" və \"Həmişə istifadə et\" ilə yadda saxlanılır. Cüt yalnız söz səhv yazıldıqda istifadə olunur.", + "useAlwaysWord": "Səhv yazılmış söz", + "xPairs": "{0:#,##0} cüt", + "xUnusedPairs": "{0:#,##0} heç vaxt istifadə olunmayıb", + "useAlwaysUnusedHint": "Heç vaxt istifadə olunmayıb - bu söz düzgün yazılıb (və ya ad, yaxud istifadəçi sözüdür), buna görə orfoqrafiya yoxlaması onu heç vaxt işarələmir", + "removeUnused": "İstifadə olunmayanları sil", + "useAlwaysEmpty": "Bu dil üçün hələ \"Həmişə istifadə et\" cütləri yoxdur", + "useAlwaysEmptyHint": "Cütlər orfoqrafiya yoxlamasında \"Hamısını dəyiş\" və ya \"Həmişə istifadə et\" düyməsini basdıqda əlavə olunur.", + "useAlwaysNoMatch": "Axtarışa uyğun cüt yoxdur", + "useAlwaysSameWord": "Əvəzləyici söz sözün özündən fərqli olmalıdır.", + "useAlwaysRememberOff": "Parametrlərdə \"'Həmişə istifadə et' siyahısını yadda saxla\" söndürülüb, buna görə orfoqrafiya yoxlaması bu siyahıdan istifadə etmir və onu yadda saxlamır." }, "video": { "burnIn": { @@ -2228,6 +2600,7 @@ "sampleRate": "Nümunələmə tezliyi", "audio": "Səs", "preset": "Hazır parametr dəsti", + "tune": "Tənzimləmə (tune)", "pixelFormat": "Piksel formatı", "crf": "CRF", "useSource": "Mənbədən istifadə et", @@ -2239,7 +2612,9 @@ "outputProperties": "Çıxış xüsusiyyətləri...", "videoFileSize": "Video faylının ölçüsü", "oneBox": "Bir çərçivə", - "logoInfo": "PNG şəkli seçin və videoda yerləşdirmək üçün sürükləyin." + "logoInfo": "PNG şəkli seçin və videoda yerləşdirmək üçün sürükləyin.", + "noSubtitlesGenerateAnyway": "Həkk ediləcək altyazı sətri yoxdur.\n\nVideo altyazısız yaradılsın?", + "noSubtitlesInXItemsGenerateAnyway": "{0} toplu elementdə həkk ediləcək altyazı sətri yoxdur.\n\nHəmin videolar altyazısız yaradılsın?" }, "videoTransparent": { "title": "Altyazılı şəffaf video yarat" @@ -2250,6 +2625,21 @@ "translateToEnglish": "İngilis dilinə tərcümə et", "transcribing": "Mətnə çevrilir...", "transcribingXOfY": "Mətnə çevrilir: {0} / {1}...", + "linesTranscribedXOfYFailedZ": "{1} sətirdən {0} mətnə çevrildi - {2} uğursuz oldu və ya nitq yox idi.\n\nUğursuz sətirlər cari mətnini saxlayır. Mətnə çevrilmiş sətirlər tətbiq edilsin, yoxsa uğursuz olanlar yenidən cəhd edilsin (əvvəlcə mühərriki və ya parametrləri dəyişə bilərsiniz)?", + "linesTranscribedXOfYCancelled": "Mətnə çevirmə {1} sətirdən {0} sonra ləğv edildi.\n\nMətnə çevrilmiş sətirlər tətbiq edilsin? Digər sətirlər cari mətnini saxlayır.", + "noLinesTranscribed": "{0} sətrin heç biri mətnə çevrilə bilmədi.\nTəfərrüatlar üçün alətlər jurnalını yoxlayın.", + "applyTranscribedLines": "Mətnə çevrilənləri tətbiq et", + "retryFailedLines": "Uğursuzları yenidən cəhd et", + "isolateSpeech": "Nitqi ayır (yavaş)", + "isolateSpeechHint": "Mətnə çevirmədən əvvəl musiqi və səs effektlərini çıxarır. Yüksək musiqili səsdə daha az buraxılmış sətir və daha yaxşı vaxtlama verir, lakin GPU ilə təxminən səsin özü qədər, GPU olmadan isə dəfələrlə çox vaxt aparır.", + "isolatingSpeech": "Nitq ayrılır...", + "isolateSpeechFailed": "Nitqi ayırmaq mümkün olmadı - əvəzində orijinal səs mətnə çevrilir.", + "detectSpeakers": "Danışanları aşkarla", + "detectSpeakersHint": "NVIDIA-nın Sortformer diarizasiyasından (8 danışana qədər) istifadə edərək hər sətri danışanla başladır, məsələn \"(speaker 0)\". Danışan dəyişdikdə sətirləri bölən icra mühitləri ilə, məsələn Parakeet və Cohere ilə ən yaxşı işləyir.", + "detectSpeakersNeedsNewerCrispAsr": "\"Danışanları aşkarla\" üçün Crisp ASR v{0} və ya daha yeni versiya lazımdır, lakin v{1} quraşdırılıb.\n\nCrisp ASR-i yeniləyin (mühərrikin yanındakı dişli düyməsi) və ya \"Danışanları aşkarla\" seçimini söndürün.", + "xNeedsNewerCrispAsr": "{0} üçün Crisp ASR v{1} və ya daha yeni versiya lazımdır, lakin v{2} quraşdırılıb.\n\nYeniləmə indi endirilib quraşdırılsın?", + "vad": "VAD", + "vadHint": "Səs aktivliyinin aşkarlanması: yalnız nitq mətnə çevrilir, danışanın fasilə verdiyi yerlərdən kəsilir.\nAvtomatik: Silero, yalnız ona ehtiyacı olan mühərriklər üçün (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: hər Crisp ASR mühərriki üçün həmişə açıqdır. FireRedVAD ən dəqiqdir, Whisper-VAD ən az və ən təmiz kəsiklər verir, lakin ən yavaşdır.\nIndex-Echo həmişə Silero istifadə edir. Əlavə parametrlərdəki --vad, --vad-model və ya --chunk-seconds üstünlük təşkil edir.", "inputLanguage": "Giriş dili", "advancedWhisperSettings": "Nitqin mətnə çevrilməsi üçün genişləndirilmiş parametrlər", "downloadingSpeechToTextEngine": "Nitqi mətnə çevirən mühərrik endirilir", @@ -2333,6 +2723,19 @@ "videoEncodingSettings": "TTS: videonun kodlaşdırma parametrləri", "elevenLabsSettings": "TTS: ElevenLabs parametrləri", "elevenLabsSettingsResetHint": "ElevenLabs parametrlərinin standart dəyərlərini bərpa et", + "provider": "Provayder", + "openAiCompatibleSettings": "TTS - OpenAI ilə uyğun parametrlər", + "customServerUrl": "Xüsusi serverin URL ünvanı", + "customServerUrlHint": "OpenAI ilə uyğun serverin tam nitq ünvanı, provayder \"Custom\" olduqda istifadə olunur, məsələn http://localhost:8880/v1/audio/speech", + "customModels": "Xüsusi modellər", + "customModelsHint": "Provayder \"Custom\" olduqda təklif olunan, vergüllə ayrılmış model adları", + "customVoices": "Xüsusi səslər", + "customVoicesHint": "Vergüllə ayrılmış səs adları, \"Custom\" provayderi və səs siyahısı dərc etməyən OpenRouter modelləri tərəfindən istifadə olunur", + "instructions": "Təlimatlar", + "instructionsHint": "İxtiyari danışıq üslubu, məsələn \"Sakit, isti səslə danış\". Yalnız bunu dəstəkləyən modellərə göndərilir (tts-1/tts-1-hd deyil)", + "openAiSpeedHint": "Nitq sürəti 0.25-dən 4.0-a qədər (1.0 normaldır). Bunu hər model dəstəkləmir", + "outputFormat": "Çıxış formatı", + "outputFormatHint": "Serverdən tələb olunan səs formatı. \"Auto\" MP3 istəyir və yalnız PCM qaytaran modellər üçün PCM-ə keçir (məsələn Gemini TTS)", "regenerateAudio": "Səsi yenidən yarat", "autoContinuePlaying": "Oxutmanı avtomatik davam etdir", "playLine": "Sətri oxut", @@ -2341,6 +2744,13 @@ "addingAudioToVideoFileDotDotDot": "Video faylına səs əlavə edilir...", "preparingMergeDotDotDot": "Birləşdirməyə hazırlıq görülür...", "importVoiceDotDotDot": "Səs idxal et...", + "renameVoiceDotDotDot": "Səsin adını dəyiş...", + "renameVoiceTitle": "Səsin adını dəyiş", + "voiceXCouldNotBeRenamedX": "'{0}' səsinin adı dəyişdirilə bilmədi: {1}", + "deleteVoiceDotDotDot": "Səsi sil...", + "deleteVoiceTitle": "Səsi sil", + "deleteVoiceXQuestion": "'{0}' səsi silinsin?\n\nİstinad yazısı və onun faylları diskdən silinir.", + "voiceXCouldNotBeDeletedX": "'{0}' səsi silinə bilmədi: {1}", "voiceImportSuccessTitle": "Səs idxal edildi", "voiceXImported": "'{0}' səsi uğurla idxal edildi", "voiceXCouldNotBeImported": "'{0}' səsi idxal edilə bilmədi. Təfərrüatlar üçün jurnala baxın", @@ -2350,6 +2760,49 @@ "dropAudioFileHereToImportVoice": "Səsi idxal etmək üçün səs faylını buraya buraxın", "dropAudioFileHereHint": ".wav və ya .mp3", "voiceCloneTranscriptTitle": "Səs yazısının mətnini daxil edin (səsin klonlanması üçün tələb olunur)", + "voiceManagerTitle": "TTS - Səs meneceri", + "voiceManagerDotDotDot": "Səs meneceri...", + "voiceManagerMenuItem": "TTS səs meneceri...", + "speakFromCurrentLineTitle": "Cari sətirdən səsləndir", + "speakFromCurrentLineDotDotDot": "Cari sətirdən səsləndir...", + "speakFromCurrentLineHint": "Cari sətirdən başlayaraq sətirləri bir-birinin ardınca ucadan oxuyur. Dayandırmaq üçün Escape basın və ya başqa sətrə klikləyin.", + "stopSpeaking": "Səsləndirməni dayandır", + "speakingLineX": "{0} sətri səsləndirilir... (dayandırmaq üçün Escape)", + "playWithSpeechTitle": "Nitqlə oynat", + "playWithSpeechDotDotDot": "Nitqlə oynat...", + "playWithSpeechHint": "Videonu oynadır və video hər sətrə çatdıqda onu səsləndirir. Fasilə verin və həmişəki kimi keçid edin; dayandırmaq üçün Escape basın.", + "lowerVideoVolumeWhileSpeaking": "Səsləndirmə zamanı videonun səsini azalt", + "pauseVideoWhenSpeechRunsLate": "Nitq növbəti sətrə keçdikdə videonu fasiləyə al", + "waitingForSpeechLineX": "{0} sətri üçün nitq yaradılır... (dayandırmaq üçün Escape)", + "voiceKindClone": "Klonlanmış səs", + "voiceKindPreset": "Daxili", + "voiceKindModel": "Səs modeli", + "voiceKindOnline": "Onlayn", + "transcript": "Transkript", + "transcriptRequiredHint": "Tələb olunur - mühərrik klonlama zamanı yazının bu transkriptini (ref-text) oxuyur", + "transcriptOptionalHint": "İxtiyari - yazının dəqiq transkripti klonlamanı yaxşılaşdırır", + "saveTranscript": "Transkripti yadda saxla", + "searchVoices": "Səsləri axtar", + "loadingVoicesDotDotDot": "Səslər yüklənir...", + "noVoicesForEngine": "Səs yoxdur - yazı idxal edin və ya səs paketi endirin", + "noVoicesMatchFilter": "Axtarışa uyğun səs yoxdur", + "copyVoiceTo": "Səsi buraya kopyala", + "copyVoiceToDotDotDot": "Səsi mühərrikə kopyala...", + "copyingVoiceXToYDotDotDot": "'{0}' səsi {1} mühərrikinə kopyalanır...", + "voiceXCopiedToY": "'{0}' səsi {1} mühərrikinə kopyalandı", + "voiceXCouldNotBeCopiedToY": "'{0}' səsi {1} mühərrikinə kopyalana bilmədi - təfərrüatlar üçün jurnala baxın", + "voiceXAlreadyExistsInYContinue": "{1} mühərrikində '{0}' adlı səs artıq mövcuddur.\n\nYenə də kopyalansın?", + "openVoicesFolder": "Səslər qovluğunu aç", + "downloadVoicePacksDotDotDot": "Səs paketlərini endir...", + "downloadVoicePacksTitle": "TTS - Səs paketlərini endir", + "voicePackIntro": "Səs paketləri transkriptləri olan, klonlamağa hazır qısa, təmiz yazılar dəstləridir. Hər paket seçilmiş mühərrikə idxal olunur (artıq mövcud olan səslər ötürülür) və lisenziyası və mənbələri ilə birlikdə ATTRIBUTION.txt faylını ehtiva edir.", + "voicePackDetailsXVoicesYSizeZLicense": "{0} səs · {1} · {2}", + "installToEngine": "Mühərrikə quraşdır", + "downloadAndInstall": "Endir və quraşdır", + "selectAtLeastOneVoicePack": "Ən azı bir səs paketi seçin", + "downloadingXDotDotDot": "{0} endirilir...", + "installingXDotDotDot": "{0} quraşdırılır...", + "xVoicesInstalledYSkipped": "{0} səs quraşdırıldı ({1} artıq mövcud idi)", "useSpeechToTextDotDotDot": "Nitqi mətnə çevirmə funksiyasından istifadə et...", "autoCastMenuItem": "Videodakı səsləri tap və klonla...", "autoCastSpeakersTitle": "Videoda tapılan səslər", @@ -2368,7 +2821,7 @@ "cloneVoicePerLinePreparing": "Hər sətrin səsi videodan götürülür...", "cloneVoicePerLineNeedsVideo": "Hər sətrin səsini klonlamaq üçün altyazının aid olduğu video lazımdır. Videonu açın və yenidən cəhd edin.", "cloneVoicePerLineNoClips": "Videodan səs götürülə bilmədi, buna görə klonlama üçün mənbə yoxdur. Videoda səs cığırının olub olmadığını yoxlayın.", - "cloneVoicePerLineNeedsOriginalSubtitleX": "{0} yalnız həmin sətirdə videoda nə deyildiyini bildikdə sətri klonlaya bilər. Bu məlumat orijinal dildəki altyazıdan alınır. Orijinal altyazı yüklənmədiyinə görə hər sətir videodakı səslə deyil, ilk idxal edilmiş səslə oxunacaq.\n\nTərcümənin yanında orijinal altyazını açın (Fayl > Orijinalı aç...), sonra yenidən yaradın.", + "cloneVoicePerLineTranscribeClipsXYZ": "{0} sətri yalnız videoda həmin sətirdə nə deyildiyini bildikdə klonlaya bilər. Bu, {2} sətirdən {1} üçün məlum deyil - adətən orijinal dildəki altyazıdan götürülür (Fayl > Orijinalı aç...).\n\nHəmin sətirlər indi videodan nitqi mətnə çevirmə ilə transkripsiya edilsin?\n\nBəli: mühərriki və videoda danışılan dili seçin, istinad klipləri nitq yaradılmazdan əvvəl mətnə çevriləcək.\nXeyr: yenə də yarat - həmin sətirlər videodakı səslə deyil, adi səslə səsləndiriləcək.", "voiceCloneConsentTitle": "Səsin klonlanması: başlamazdan əvvəl", "voiceCloneConsentHeader": "Səsi klonlamağa hazırlaşırsınız", "voiceCloneConsentIntro": "Klonlama real insanın səsini kopyalayır. Bununla bağlı əksər yerlərdə qaydalar, Avropa İttifaqında isə sizin üzərinizə düşən hüquqi öhdəliklər var. Bu öhdəliklər Subtitle Edit üzərinə düşmür. Zəhmət olmasa, bu mətni bir dəfə oxuyun.", @@ -2385,10 +2838,29 @@ "advancedTtsSettings": "Genişləndirilmiş TTS parametrləri", "advancedTtsAudioProcessing": "Səsin emalı", "advancedTtsOutput": "Çıxış", + "advancedTtsVoiceCloning": "Səs klonlama", + "cleanCloneReferences": "Səs klonlama istinadlarını təmizlə (Sidon)", + "cleanCloneReferencesDescription": "Səsin klonlandığı audiodan musiqini, küyü və əks-sədanı çıxarır: videodan götürülmüş kliplər və səs menecerində idxal edilmiş yazılar. audio.cpp üzərində Sidon nitq bərpası modelindən istifadə edir (940 MB endirmə). Klonlanmış səs artıq fonu təkrarlamır, lakin çox sakit və ya üst-üstə düşən nitq boğuq çıxa bilər.", + "cleaningCloneReferencesDotDotDot": "Səs klonlama istinadları təmizlənir...", + "downloadSidonTitle": "Sidon endirilsin?", + "downloadSidonQuestionX": "Səs klonlama istinadlarını təmizləmək üçün Sidon nitq bərpası modeli ({0}) lazımdır.\n\nİndi endirilsin? Onsuz istinadlar olduğu kimi istifadə olunur.", "proAudioPostProcessing": "Yaradılmış səsin peşəkar emalı", "proAudioPostProcessingDescription": "Hər hissəyə EQ, küy qapısı, sıxılma, səs ucalığının normallaşdırılması (-16 LUFS), başlanğıcda qısa tədrici yüksəlmə və sonda qısa tədrici azalma tətbiq edir.", + "generatingSpeechSegmentXOfY": "Nitq yaradılır: {1} seqmentdən {0}", + "adjustingSpeedSegmentXOfY": "Sürət tənzimlənir: {1} seqmentdən {0}", + "mergingAudioSegmentXOfY": "Səs birləşdirilir: {1} seqmentdən {0}", + "postProcessingSegmentXOfY": "Sonrakı emal: {1} seqmentdən {0}", "audioDucking": "Fon səsinin azaldılması", "audioDuckingDescription": "Videonun orijinal səsini azaldır və nitqlə qarışdırır, beləliklə orijinal səs cığırı zəif eşidilir. Yalnız nitq video faylına əlavə edildikdə tətbiq olunur.", + "removeOriginalSpeech": "Orijinal nitqi çıxar (yavaş)", + "removeOriginalSpeechDescription": "Orijinal videonun musiqisini və səs effektlərini saxlayır, lakin nitqini çıxarır və yeni nitqi onun üzərinə qarışdırır. GPU ilə təxminən videonun özü qədər, GPU olmadan isə dəfələrlə çox vaxt aparır. Fon səsinin azaldılması açıq olduqda onun səs səviyyəsi musiqiyə və effektlərə tətbiq olunur. Yalnız nitq video faylına əlavə edildikdə tətbiq olunur.", + "removingOriginalSpeech": "Orijinal nitq çıxarılır...", + "removeOriginalSpeechFailed": "Orijinal nitqi çıxarmaq mümkün olmadı - nitq videoya onu çıxarmadan əlavə edildi.", + "speechRemovalModel": "Model", + "speechRemovalModelDescription": "Ən yaxşı keyfiyyət musiqinin və səs effektlərinin ən çoxunu saxlayır. Sürətli təxminən üç dəfə tezdir, lakin musiqinin bir az çoxu itir.", + "speechRemovalBestQuality": "Ən yaxşı keyfiyyət (Mel-Band RoFormer)", + "speechRemovalFast": "Sürətli (HTDemucs)", + "videoTruncatedWarning": "Yeni video faylında təsvir {0} sonra dayanır, lakin orijinal video {1} uzunluğundadır - səs davam edərkən təsvir donacaq.\n\nFayl saxlanıldı. ffmpeg çıxışı üçün Subtitle Edit məlumat qovluğundakı error-log.txt faylına baxın.", "originalVolumePercent": "Orijinal səs səviyyəsi %", "vadSilenceCompression": "VAD ilə səssizliyin qısaldılması", "vadSilenceCompressionDescription": "Nitqi sürətləndirmək əvəzinə sözlər arasındakı fasilələri qısaldır ki, səs hissəsi keyfiyyət itkisi olmadan ayrılmış müddətə sığsın.", @@ -2471,7 +2943,9 @@ "timeCodeFormatColon": "Vaxt kodunun formatı:", "shotChangesList": "Səhnə dəyişmələrinin siyahısı", "shotChangesClearQuestion": "Bütün səhnə dəyişmələrini təmizləmək istədiyinizə əminsiniz?", - "deleteSelectedShotChangeQuestion": "Seçilmiş səhnə dəyişməsini silmək istədiyinizə əminsiniz?" + "deleteSelectedShotChangeQuestion": "Seçilmiş səhnə dəyişməsini silmək istədiyinizə əminsiniz?", + "shotChanges": "Səhnə dəyişiklikləri", + "exportShotChanges": "Səhnə dəyişikliklərini ixrac et" }, "chapters": { "title": "Bölmələr", @@ -2501,7 +2975,6 @@ "scaleTimesDescription": "Hər bölmənin vaxtını bir kadr sürətindən digərinə uyğunlaşdır.", "fromFrameRate": "İlkin", "toFrameRate": "Hədəf", - "apply": "Tətbiq et", "writeToVideo": "Videoya yaz...", "writeToVideoTitle": "Bölmələri videoya yaz", "writeToVideoDescription": "Bölmələr video faylının nüsxəsinə yazılır. Yenidən kodlaşdırma aparılmadığı üçün əməliyyat sürətli və itkisizdir.", @@ -2511,7 +2984,6 @@ "writtenToX": "Bölmələrin yazıldığı fayl: {0}", "unableToWriteChapters": "Bölmələri video faylına yazmaq mümkün olmadı.", "chaptersSavedToX": "Bölmələrin yadda saxlandığı fayl: {0}", - "noVideoLoaded": "Video yüklənməyib", "emptyListCallToAction": "Hələ fəsil yoxdur. Videonun cari mövqeyində fəsil əlavə edin və ya videodan, yaxud fayldan idxal edin." }, "videoOcr": { @@ -2536,10 +3008,10 @@ "runningOcrXY": "OCR icra olunur... {0}/{1}", "noLinesFoundTitle": "Altyazı tapılmadı", "noLinesFoundMessage": "Skan sahəsində mətn tapılmadı. Skan sahəsini, mühərriki və ya minimum parlaqlığı dəyişməyə çalışın.", + "ocrStoppedEarlyMessage": "OCR mühərriki bütün kadrlar oxunmazdan əvvəl dayandı, buna görə indiyədək tapılan sətirlər saxlanılır, qalanları isə çatışmır.{0}{0}{1}", "linesFoundX": "{0} sətir tapıldı", "refiningTimingXY": "Vaxtlar dəqiqləşdirilir... {0}/{1}", "fixOcrErrors": "OCR xətalarını düzəlt", - "dictionary": "Lüğət", "editLineX": "{0} nömrəli sətri redaktə et", "downloadDictionaryHint": "Orfoqrafiya yoxlaması üçün lüğət endir...", "framesPerSecondHint": "Saniyədə neçə kadrın skan edildiyini göstərir. Adi altyazılar üçün 5 kifayətdir. Daha yüksək qiymət çox qısa sətirləri aşkar etməyə və qruplaşdırmanı dəqiqləşdirməyə imkan verir, lakin OCR daha çox vaxt aparır.", @@ -2556,7 +3028,58 @@ "testOcr": "Cari kadrı sına", "testOcrRunning": "Cari kadrda OCR sınanır...", "testOcrResultX": "Sınaq nəticəsi: {0}", - "testOcrNoTextFound": "Sınaq: skan sahəsində mətn tapılmadı" + "testOcrNoTextFound": "Sınaq: skan sahəsində mətn tapılmadı", + "engineSettings": "OCR mühərrikinin parametrləri", + "engineBuiltIn": "Əməliyyat sisteminə daxildir", + "engineExternalServer": "Xarici server (Subtitle Edit xaricində quraşdırılır və idarə olunur)", + "engineCloudApi": "Bulud API (API açarı tələb olunur)", + "engineNothingToInstall": "Quraşdırılacaq heç nə yoxdur", + "engineModelsMissing": "Mühərrik quraşdırılıb, modellər çatışmır", + "website": "Veb sayt" + }, + "backgroundMusic": { + "title": "Fon musiqisi yarat", + "generateBackgroundMusicDotDotDot": "Fon musiqisi yarat...", + "preset": "Hazır parametr dəsti", + "prompt": "Təlimat", + "tempoBpm": "Temp (BPM)", + "generateSeconds": "Yarat (saniyə)", + "seed": "Seed", + "randomSeed": "Təsadüfi", + "outputLength": "Çıxışın uzunluğu", + "outputLengthVideoX": "{0} (videonun uzunluğu - musiqi fasiləsiz təkrarlanır)", + "musicVolumePercent": "Musiqinin səs səviyyəsi (%)", + "removeExistingAudioTracks": "Mövcud səs treklərini çıxar", + "originalAudioVolumePercent": "Orijinal səsin səviyyəsi (%)", + "saveAudioDotDotDot": "Səsi yadda saxla...", + "addToVideoDotDotDot": "Videoya əlavə et...", + "engineInfo": "audio.cpp vasitəsilə ACE-Step 1.5 Turbo (MIT lisenziyası) - lokal işləyir", + "presetCooking": "Yemək bişirmə / çörək bişirmə", + "presetTech": "Texnologiya / qadcet icmalı", + "presetForest": "Meşə / təbiət", + "presetRelaxingPiano": "Rahatladıcı piano", + "presetLofiVlog": "Lo-fi vloq", + "presetCorporate": "Korporativ / izahedici", + "loadingModel": "Model yüklənir...", + "composing": "Bəstələnir...", + "generatingAudio": "Səs yaradılır...", + "decodingAudio": "Səs dekodlaşdırılır...", + "creatingLoop": "Fasiləsiz təkrar yaradılır...", + "resultLoopXYZ": "Təkrar: {0}, {1} BPM, birləşmə uyğunluğu {2}%", + "resultNoLoopX": "Musiqi hazırdır: {0}", + "addingMusicToVideo": "Musiqi videoya əlavə edilir...", + "downloadModelTitle": "Musiqi modeli endirilsin?", + "downloadModelQuestionX": "Musiqi yaratmaq üçün ACE-Step 1.5 modeli ({0}) tələb olunur.\n\nModel endirilsin?", + "downloadingModel": "ACE-Step 1.5 modeli endirilir...", + "saveAudioTitle": "Fon musiqisini yadda saxla", + "audioFileSavedX": "Səs faylı yadda saxlanıldı: {0}", + "unableToGenerateMusic": "Musiqi yaratmaq mümkün olmadı", + "unableToAddMusicToVideo": "Musiqini videoya əlavə etmək mümkün olmadı", + "outputLengthTextToSpeech": "Yaradılmış nitqə uyğunlaşır - musiqi fasiləsiz təkrarlanır və kimsə danışarkən səsi azalır", + "addBackgroundMusic": "Fon musiqisi əlavə et", + "addBackgroundMusicHint": "ACE-Step 1.5 ilə lokal olaraq musiqi yarat və onu nitqin altına qarışdır - kimsə danışarkən səsi azalır", + "generatingBackgroundMusicDotDotDot": "Fon musiqisi yaradılır...", + "mixingBackgroundMusicDotDotDot": "Fon musiqisi qarışdırılır..." }, "goToVideoPosition": "Video mövqeyinə keç", "goToVideoPositionDotDotDot": "Video mövqeyinə keç...", @@ -2567,10 +3090,47 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "İkinci altyazı faylını aç...", "openSecondarySubtitleOnVideoPlayer": "İkinci altyazı faylı (video pleyerdə)", "removeSecondarySubtitleOnVideoPlayer": "İkinci altyazı faylını çıxar", + "editSecondarySubtitleSettings": "İkinci altyazının parametrlərini redaktə et", + "editSecondarySubtitleSettingsDotDotDot": "İkinci altyazının parametrlərini redaktə et...", + "secondarySubtitleRememberSettings": "Bu parametrləri yadda saxla", + "secondarySubtitleDoNotShowAgain": "Bu dialoqu bir daha göstərmə", + "secondarySubtitleJustifyLines": "Sətirləri hər iki kənara düzləndir", "openRecentVideo": "Son açılan videonu aç", "clearRecentVideos": "Son açılan videoların siyahısını təmizlə", "cutVideoTitle": "Videonu kəs", "cutVideoDotDotDot": "Videonu kəs...", + "remuxVideoTitle": "Videonu yenidən paketlə (remux)", + "remuxVideoDotDotDot": "Videonu yenidən paketlə (remux)...", + "remuxVideoInputVideo": "Giriş videosu:", + "remuxVideoMultipleTracksRequiresMkv": "Bir neçə səs və ya altyazı treki MKV konteyneri tələb edir. Çıxış formatı avtomatik olaraq .mkv-yə dəyişdirildi.", + "remuxVideoOutputFormat": "Çıxış formatı:", + "remuxVideoOutputFile": "Çıxış faylı:", + "remuxVideoRemuxing": "Video və səs yenidən paketlənir...", + "remuxVideoFinalizing": "Çıxış faylı yekunlaşdırılır (indeks əvvələ köçürülür)...", + "remuxVideoCompleted": "Video uğurla yenidən paketləndi.", + "remuxVideoFailed": "Videonu yenidən paketləmək mümkün olmadı.", + "remuxVideoPleaseSelectBoth": "Həm video, həm də səs fayllarını seçin.", + "remuxVideoAssRequiresMkv": "ASS/SSA altyazıları bütün formatlaşdırmanı və üslubları qorumaq üçün MKV konteyneri tələb edir.", + "remuxVideoSccRequiresMov": "Scenarist (.scc) altyazıları MOV və ya MPG konteyneri tələb edən CEA-608 qapalı titrlər kimi daxil edilir. Çıxış formatı avtomatik olaraq .mov-a dəyişdirildi.", + "remuxVideoSccNotWithWebM": "Scenarist (.scc) qapalı titrləri .webm faylının VP9/AV1 videosunu saxlaya bilməyən MOV konteyneri tələb edir. .scc faylını çıxarın və ya onu başqa altyazı formatına çevirin.", + "remuxVideoMpgMaxTwoCaptionTracks": ".mpg faylı ən çoxu iki qapalı titr treki (CC1 və CC3) saxlaya bilər - bir və ya iki qalması üçün altyazı fayllarını çıxarın.", + "remuxVideoMccRequiresMpg": "MacCaption (.mcc) altyazıları MPEG-2 videoda CEA-608/708 qapalı titrlər kimi daxil edilir, bu da MPG konteyneri tələb edir. Çıxış formatı avtomatik olaraq .mpg-yə dəyişdirildi.", + "remuxVideoMpgReencodeVideoX": ".mpg faylındakı qapalı titrlər MPEG-2 video tələb edir, video isə {0}-dir. Video MPEG-2-yə yenidən kodlaşdırılsın? Bu daha uzun çəkir və keyfiyyəti bir az aşağı salır.", + "remuxVideoFileHasNoAudioX": "\"{0}\" faylında səs treki yoxdur, buna görə səs mənbəyi kimi istifadə oluna bilməz.", + "remuxVideoAddingClosedCaptions": "Qapalı titrlər əlavə edilir...", + "remuxVideoSelectAudioTrack": "Səs trekini seç", + "remuxVideoSelectAudioTrackFor": "{0} üçün səs trekini seç", + "remuxVideoSelectAudioTrackPrompt": "'{0}' faylında {1} səs treki var. Yenidən paketləmək üçün səs trekini seçin:", + "remuxVideoVideoFile": "video", + "remuxVideoAudioFile": "səs", + "remuxVideoAudioFiles": "Səs faylları:", + "remuxVideoSubtitleFiles": "Altyazı faylları (ixtiyari, yumşaq altyazılar):", + "remuxVideoSelectAudioTrackDotDotDot": "Səs trekini seç...", + "remuxVideoFilesX": "{0} fayl", + "remuxVideoMixAudio": "Səsi bir trekə qarışdır", + "remuxVideoVolumePercent": "Səs səviyyəsi %:", + "remuxVideoVolumeX": "Səs səviyyəsi {0}%", + "remuxVideoFastStart": "Veb yayım üçün optimallaşdır (indeksi əvvələ köçür - daha yavaş)", "embedSubtitlesDotDotDot": "Daxili altyazıları əlavə et/çıxar...", "generateTimeCodes": "Vaxt kodları yarat", "checkeredImage": "Damalı şəkil", @@ -2580,6 +3140,34 @@ "cutVideoSplitSegments": "Hissələri ayrıca yadda saxla", "cutVideoAlsoCutSubtitle": "Altyazını da kəs", "cutVideoSubtitleFileGeneratedX": "Altyazı faylı yaradıldı: {0}", + "cutVideoTransition": "Hissələr arasında keçid", + "cutVideoTransitionDurationSeconds": "Müddət (saniyə)", + "cutVideoFadeInSeconds": "Əvvəldə qaradan tədricən görünmə (saniyə)", + "cutVideoFadeOutSeconds": "Sonda tədricən qaralma (saniyə)", + "cutVideoPreviewTransition": "Keçidə ön baxış", + "cutVideoPreviewTransitionTitle": "Keçidə ön baxış", + "cutVideoPreviewNeedsJoin": "Ön baxış üçün birləşmə yoxdur - birləşdirmək üçün ən azı iki hissə və ya ortadan kəsiləcək bir hissə əlavə edin.", + "cutVideoTransitionInfoX": "Hər keçid birləşdirdiyi hissələri üst-üstə salır, buna görə çıxış hər birləşmədə {0} saniyə qısalır. Kəsilmiş altyazı buna uyğun yenidən vaxtlanır.", + "cutVideoTransitionFade": "Tədricən keçid", + "cutVideoTransitionFadeBlack": "Qara vasitəsilə keçid", + "cutVideoTransitionFadeWhite": "Ağ vasitəsilə keçid", + "cutVideoTransitionFadeGrays": "Boz vasitəsilə keçid", + "cutVideoTransitionDissolve": "Əriyərək keçid", + "cutVideoTransitionWipeLeft": "Sola silinmə", + "cutVideoTransitionWipeRight": "Sağa silinmə", + "cutVideoTransitionWipeUp": "Yuxarı silinmə", + "cutVideoTransitionWipeDown": "Aşağı silinmə", + "cutVideoTransitionSlideLeft": "Sola sürüşmə", + "cutVideoTransitionSlideRight": "Sağa sürüşmə", + "cutVideoTransitionSlideUp": "Yuxarı sürüşmə", + "cutVideoTransitionSlideDown": "Aşağı sürüşmə", + "cutVideoTransitionSmoothLeft": "Sola hamar keçid", + "cutVideoTransitionSmoothRight": "Sağa hamar keçid", + "cutVideoTransitionCircleOpen": "Dairəvi açılma", + "cutVideoTransitionCircleClose": "Dairəvi bağlanma", + "cutVideoTransitionRadial": "Radial", + "cutVideoTransitionPixelize": "Pikselləşmə", + "cutVideoTransitionBlur": "Bulanıqlaşma", "importCurrentSubtitle": "Cari altyazını idxal et", "addRemoveEmbeddedSubtitlesTitle": "Daxili altyazıları əlavə et/çıxar", "addRemoveEmbeddedSubtitlesMp4Title": "Daxili altyazıları əlavə et/çıxar (MP4)", @@ -2595,6 +3183,7 @@ "embeddedTrackGeneratingVideoXY": "Video yaradılır... {0}% {1}", "embeddedTrackGeneratingVideo": "Video yaradılır...", "mp4FilesFilter": "MP4 faylları", + "embeddedTracksPickVideoHint": "Altyazı treklərini görmək üçün video faylı seçin və ya onu bura sürükləyin.", "viewMatroskaTrackX": "Matroska cığırına bax: {0}", "resolutionSeparator": "x", "openFromUrlTitle": "URL vasitəsilə video faylı aç", @@ -2641,12 +3230,15 @@ "reEncodeGeneratingDone": "Yaradılma tamamlandı", "reEncodeGeneratedFilesX": "Yaradılmış fayllar ({0}):", "reEncodeFfmpegParameters": "FFmpeg parametrləri", + "analyzingVideoX": "Video təhlil edilir... {0}% {1}", + "analyzingVideoXofY": "Video təhlil edilir {0}/{1}... {2}% {3}", + "backgroundImageFileNotSelected": "Fon şəkli faylı seçilməyib", + "backgroundImageFileDoesNotExistX": "Fon şəkli faylı mövcud deyil: {0}", "voices": "Səslər", "presets": "Hazır parametr dəstləri", "talkerX": "Danışan {0}", "baseModel": "Əsas model", "turboModel": "Turbo model", - "ttsUpdateX": "Yenilə: {0}", "ttsEngineNotInstalled": "{0} quraşdırılmayıb", "ttsEngineUpdateAvailable": "{0}: yeniləmə mövcuddur", "ttsEngineTooOldUpdateRequired": "{0} çox köhnədir, yeniləmə tələb olunur", @@ -2669,9 +3261,17 @@ "cloneVoiceTo": "Səsi buraya klonla", "cloneVoiceNameTitle": "Yeni səsin adı", "cloneVoiceExtractFailed": "Seçilmiş sətir üçün səs çıxarılmadı.", + "lineXHasNoDuration": "{0} sətrinin müddəti yoxdur (son vaxt başlanğıc vaxtından sonra deyil), buna görə çıxarılacaq səs yoxdur.", + "audioClipsSkippedLinesX": "Bu sətirlər üçün səs çıxarmaq mümkün olmadı, buna görə onlar ötürüldü: {0}", "toggleShotChange": "Səhnə dəyişikliyini əlavə et/çıxar", "resetWaveformZoomAndSpeed": "Səs dalğası qrafikinin miqyasını və sürətini sıfırla", "showOriginalSubtitle": "Orijinal altyazını göstər", + "timelineGroupTracksBy": "Altyazı treklərini qruplaşdır", + "timelineShowThumbnails": "Video miniatürlərini göstər", + "showSpeechOnly": "Yalnız nitqi göstər (yaradılması yavaşdır)", + "isolatingSpeechForWaveformX": "Səs dalğası üçün nitq ayrılır... {0}", + "isolatingSpeechForWaveformFailed": "Səs dalğası üçün nitqi ayırmaq mümkün olmadı - alətlər jurnalına baxın", + "speechOnlyWaveformReady": "Səs dalğası indi yalnız nitqi göstərir", "showOnlyWaveform": "Yalnız səs dalğası qrafikini göstər", "showOnlySpectrogram": "Yalnız spektroqramı göstər", "showWaveformAndSpectrogram": "Səs dalğası qrafikini və spektroqramı göstər", @@ -2704,6 +3304,7 @@ "adjustSelectedLinesAndForward": "Seçilmiş və sonrakı sətirləri tənzimlə", "toFrameRate": "Hədəf kadr sürəti", "fromFrameRate": "Başlanğıc kadr sürəti", + "videoXFrameRateY": "{0} - {1} kadr/san", "adjustAllTimes": "Bütün vaxtları tənzimlə (daha tez/gec göstər)", "showEarlier": "Daha tez göstər", "showLater": "Daha gec göstər", @@ -2713,7 +3314,8 @@ "syncPoints": "Sinxronlaşdırma nöqtələri", "pointSync": "Nöqtələr üzrə sinxronlaşdırma", "pointSyncViaOther": "Başqa altyazı vasitəsilə nöqtələr üzrə sinxronlaşdırma", - "syncPointCandidateInfo": "{0}+ saniyəlik səssizlikdən sonra başlayan sətirlər vurğulanır. Onlar çox vaxt etibarlı sinxronlaşdırma nöqtələri olur", + "syncPointCandidateAfterInfo": "Ardınca {0}+ saniyə sükut gələn sətirlər vurğulanır - onlar çox vaxt etibarlı sinxronlaşdırma nöqtələri olur", + "gapAfter": "Sonrakı boşluq", "adjustAllShortcuts": "Klaviatura qısayolları:\n\n• Shift + sol/sağ: 10 ms sürüşdür\n• Ctrl + sol/sağ: 100 ms sürüşdür\n• Alt + sol/sağ: 500 ms sürüşdür", "adjustAllShortcutsFrames": "Klaviatura qısayolları:\n\n• Shift + sol/sağ: 1 kadr sürüşdür\n• Ctrl + sol/sağ: 10 kadr sürüşdür\n• Alt + sol/sağ: 1 saniyə sürüşdür", "offsetInSeconds": "Saniyə ilə sürüşmə", @@ -2733,6 +3335,7 @@ "lineMerge": "Sətirlərin birləşdirilməsi", "delayInSecondsBetweenRequests": "Sorğular arasında saniyə ilə gecikmə", "maxBytesPerRequest": "Hər sorğu üçün maksimum bayt sayı", + "keepMusicLinesUntranslated": "Musiqi simvolları (♪ ... ♪) içindəki sətirləri tərcümə etmə", "promptText": "Təlimat mətni", "resetPromptToDefault": "Təlimatı standart mətnə qaytar", "translateEachLineSeparately": "Hər sətri ayrıca tərcümə et", @@ -2746,11 +3349,10 @@ "readyToTranslate": "Tərcüməyə hazırdır", "translating": "Tərcümə edilir...", "translationComplete": "Tərcümə tamamlandı", + "translateInPlaceNoOriginal": "Yerində tərcümə et (orijinal yaratma)", "translationCancelled": "Tərcümə ləğv edildi", "swapLanguages": "Mənbə və hədəf dillərinin yerini dəyiş", "xIsAlreadyDownloadedReDownload": "{0} artıq endirilib. Yenidən endirilsin?", - "advancedDotDotDot": "Əlavə...", - "advancedSettings": "Əlavə parametrlər", "advancedSettingsSubtitle": "Təkmilləşdirilmiş llama.cpp mühərriki üçün toplu emal, kontekst və nümunə seçmə parametrləri", "context": "Kontekst", "synopsis": "Xülasə", @@ -2774,6 +3376,7 @@ "useOnlyExtraServerParametersHint": "llama-server mühərrikini Subtitle Edit proqramının öz parametrləri əvəzinə yuxarıdakı parametrlərlə başlat. Yalnız model, şəbəkə ünvanı və port əvvəlki qaydada təyin olunur", "serverRunningAtX": "Server {0} ünvanında işləyir", "customPromptHint": "Fərdi təlimatlar ({0} = mənbə dili, {1} = hədəf dil); boş = daxili təlimat", + "editTranslationHint": "Redaktə etmək üçün seçilmiş sıranın tərcüməsinə klikləyin (Enter yadda saxlayır, Escape ləğv edir)", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp üçün llama-server mühərriki və tərcümə modeli endirilməlidir. İndi endirilsin?", "llamaCppDownloadEnginePrompt": "llama.cpp üçün llama-server mühərriki endirilməlidir. İndi endirilsin?", "llamaCppDownloadModelPrompt": "llama.cpp üçün seçilmiş tərcümə modeli endirilməlidir. İndi endirilsin?" @@ -2844,6 +3447,7 @@ "showGridLines": "Cədvəl xətlərini göstər", "showHorizontalLineAboveToolbar": "Alətlər panelinin üstündə üfüqi xətt göstər", "bookmarkColor": "Əlfəcin rəngi", + "spellCheckHighlightColor": "Orfoqrafiya yoxlamasında vurğulama rəngi", "singleLineMaxLength": "Bir sətrin maksimum uzunluğu", "optimalCharsPerSec": "Saniyədə optimal simvol sayı", "maxCharsPerSec": "Saniyədə maksimum simvol sayı", @@ -2868,13 +3472,21 @@ "useDoNotBreakAfterList": "Ardınca sətir bölünməyən sözlər siyahısından istifadə et", "newEmptyDefaultMs": "Yeni altyazının standart müddəti (ms)", "timeCodeUpDownStepMs": "Vaxtı artırma/azaltma addımı (ms)", + "moveSelectedLinesStepMs": "Seçilmiş sətirləri sürüşdürmə düymə birləşməsinin addımı (ms)", + "moveStartEndStepMs": "Başlanğıcı/sonu sürüşdürmə düymə birləşməsinin addımı (ms)", + "moveLinesShortenNeighbor": "Sətirləri sürüşdürmə: əvvəlki/sonrakı sətirlə üst-üstə düşmək əvəzinə onu qısalt", "promptBeforeDelete": "Silməzdən əvvəl soruş", "rememberPositionAndSize": "Pəncərənin mövqeyini və ölçüsünü xatırla", + "titleBarFullFileName": "Başlıq panelində faylın tam yolunu göstər", + "showRecentFiles": "Son faylları göstər (yenidən açmaq üçün)", "openLastFileOnStart": "Başladıqda son istifadə olunan faylı aç", "autoSave": "Avtomatik yadda saxla (redaktə zamanı açıq faylı yadda saxla)", "autoBackupOn": "Avtomatik ehtiyat nüsxələmə", "autoBackupIntervalMinutes": "Avtomatik ehtiyat nüsxələmə intervalı (dəqiqə)", "autoBackupDeleteAfterDays": "Avtomatik ehtiyat nüsxələrin saxlanma müddəti (gün)", + "settingsBackupOn": "Parametrlərin avtomatik ehtiyat nüsxəsi", + "settingsBackupIntervalDays": "Parametrlərin ehtiyat nüsxə intervalı (gün, 0 = hər başlanğıcda)", + "settingsBackupMaxCount": "Saxlanılacaq parametr ehtiyat nüsxələri", "autoConvertToUtf8": "Açarkən kodlaşdırmanı avtomatik UTF-8 formatına çevir", "autoTrimWhiteSpace": "Kənar boşluqları avtomatik təmizlə", "removeBlankLinesWhenOpening": "Altyazını açarkən boş sətirləri çıxar", @@ -2891,7 +3503,10 @@ "colorGapTooShort": "Ara çox qısadırsa, rənglə göstər", "errorBackgroundColor": "Xətanın fon rəngi", "waveformDrawGridLines": "Şəbəkə xətlərini çək", + "waveformUseSkiaRenderer": "Eksperimental sürətli renderer istifadə et", "waveformCenterVideoPositionAlsoWhenPaused": "Video mövqeyini fasilə zamanı da mərkəzdə saxla", + "waveformSelectCurrentSubtitleWhilePaused": "Fasilə zamanı da cari altyazını seç", + "waveformRememberZoom": "Miqyası yadda saxla (üfüqi və şaquli)", "waveformShowToolbar": "Alətlər panelini göstər", "waveformShowToolbarEdit": "Alətlər panelini redaktə et...", "waveformShowToolbarEditLabel": "Alətlər panelinin elementləri", @@ -2939,18 +3554,25 @@ "webVttUseXTimestampMap": "WebVTT: X-TIMESTAMP-MAP sahəsindən istifadə et (yükləyərkən vaxt kodlarını sürüşdür)", "assaAutoSetResolution": "ASSA: video açıldıqda ayırdetməni (PlayResX/PlayResY) videoya əsasən təyin et", "assaAutoSetResolutionPrompt": "ASSA: ayırdetməni videoya uyğunlaşdırmazdan əvvəl soruş (əks halda avtomatik yenidən miqyaslandır)", - "showStopButton": "Dayandırma düyməsini göstər", - "showFullscreenButton": "Tam ekran düyməsini göstər", + "videoControls": "Video idarəetmə elementləri", + "videoControlsEdit": "Video idarəetmə elementlərini redaktə et...", + "videoControlsPositionText": "Mövqe / müddət mətni", + "videoControlsVideoFileName": "Video faylının adı", + "videoControlsPlayerName": "Video pleyerin adı", "fullscreenHideControls": "Tam ekranda video idarələrini gizlət", + "showSecondarySubtitleDialog": "İkinci altyazı faylını açarkən üslub dialoqunu göstər", + "rememberSecondarySubtitleFile": "İkinci altyazı faylını yadda saxla", "autoOpenVideoFile": "Altyazını açarkən video faylını avtomatik aç", "downloadMpv": "MPV proqramını endir", "downloadVlc": "VLC proqramını endir", "allowSingleLetterShortcutsInTextbox": "Mətn xanasında tək hərfli qısayollara icazə ver", + "allowTextNavigationShortcutsInTextbox": "Mətn xanasında mətn naviqasiyası düymələrində (Ctrl+Left/Right, Home/End) düymə birləşmələrinə icazə ver", "spellCheckEnglishTreatInApostropheAsIng": "Yazılış yoxlaması: 'in'' ilə bitən sözləri 'ing' kimi qəbul et (yalnız ingilis dili)", "goToLineNumberSetsVideoPosition": "Sətir nömrəsinə keçərkən video mövqeyini də təyin et", "adjustAllTimesRememberLineSelectionChoice": "Bütün vaxtları tənzimləyərkən sətir seçimi tərcihini xatırla", "mergeKeepEndTime": "Sətirləri birləşdir: bitmə vaxtını saxla (növbəti altyazı ilə vaxtların kəsişməsinə icazə ver)", "mergeKeepEndTimeOnlyAssa": "Sətirləri birləşdir: bitmə vaxtını yalnız \"Advanced Sub Station Alpha\" üçün saxla", + "mergeAutoBreak": "Sətirləri birləşdirmə: birləşdirilmiş mətni avtomatik sətirlərə böl (söndürüldükdə sətirlərin öz sətir keçidləri saxlanılır)", "filesAndLogs": "Fayllar və jurnallar", "showErrorLogFile": "Xəta jurnalı faylını göstər", "showToolsLogFile": "Alətlər jurnalı faylını göstər", @@ -2959,6 +3581,7 @@ "showAssaLayer": "ASSA qat xanasını göstər", "waveformCursorColor": "Səs dalğası kursorunun/oxutma göstəricisinin rəngi", "waveformShotChangeColor": "Səs dalğasında səhnə dəyişməsinin rəngi", + "waveformGridColor": "Səs dalğası şəbəkəsinin rəngi", "waveformParagraphLeftColor": "Səs dalğasının sol sərhəd rəngi", "waveformParagraphRightColor": "Səs dalğasının sağ sərhəd rəngi", "waveformFancyHighColor": "Səs dalğasının bəzəkli görünüşündə yüksək səviyyə rəngi", @@ -2986,10 +3609,15 @@ "resetSyntaxColoring": "Sintaksis rənglərini sıfırla", "resetWaveform": "Səs dalğasını sıfırla", "resetRules": "Qaydaları sıfırla", - "useFrameMode": "Kadr rejimindən istifadə et (hh.mm.ss.ff)", + "timeCodeMode": "Vaxt kodu rejimi", + "timeCodeModeTime": "Vaxt (hh:mm:ss,zzz)", + "timeCodeModeFrames": "Kadrlar (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "Kadr nömrələri", + "frameModeSnapToVideoFrames": "Vaxtları video kadrlarında saxla (hər saniyə daxilindəki kadrlarda deyil)", "textBoxLimitNewLines": "Altyazı mətn xanasında sətir sayını məhdudlaşdır", "mpvOpenGl": "libmpv: OpenGL", "mpvSoftwareRendering": "libmpv: proqram vasitəsilə görüntüləmə (yavaş)", + "mpvMetalRendering": "libmpv - Metal (eksperimental, yenidən başlatma tələb olunur)", "mpvWidRendering": "libmpv: sistem pəncərəsinin ID dəyəri vasitəsilə görüntüləmə", "waveFormsAndSpectrogramFoldersContainsX": "Səs dalğası və spektroqram qovluqlarında {0} var", "deleteWaveformAndSpectrogramFoldersQuestion": "Səs dalğası və spektroqram faylları silinsin?", @@ -3002,7 +3630,10 @@ "waveformExtractAudioSampleRate": "Çıxarılan səsin nümunələmə tezliyi", "waveformExtractAudioSampleRateOriginal": "Orijinal (mənbəni saxla)", "waveformExtractAudioBitRate": "Çıxarılan səsin bit sürəti (MP3/M4A)", + "ffmpegUseCenterChannelOnly": "5.1 səs üçün yalnız ön mərkəzi kanaldan istifadə et (FFmpeg)", "vlcWidRendering": "libVLC: sistem pəncərəsinin ID dəyəri vasitəsilə görüntüləmə", + "ffmpegSoftwareRendering": "FFmpeg", + "downloadFfmpegLibs": "FFmpeg kitabxanalarını endir (FFmpeg video pleyeri üçün)", "subtitleGridEnterKeyAction": "Altyazı cədvəlində Enter düyməsinin əməliyyatı", "subtitleSingleClickAction": "Altyazı cədvəlində tək klik əməliyyatı", "subtitleDoubleClickAction": "Altyazı cədvəlində ikiqat klik əməliyyatı", @@ -3030,6 +3661,7 @@ "subtitleGridFormattingShowFormatting": "Formatlamanı göstər", "subtitleGridFormattingShowTags": "Etiketləri göstər", "subtitleGridFormattingHideTags": "Etiketləri gizlət", + "subtitleGridFormattingShowFormattingKeepTags": "Formatlaşdırmanı göstər, görünməyən etiketləri saxla", "waveformParagraphBackgroundColor": "Səs dalğasında altyazının fon rəngi", "waveformParagraphSelectedBackgroundColor": "Səs dalğasında seçilmiş altyazının fon rəngi", "waveformAllowOverlap": "Vaxtların kəsişməsinə icazə ver (yerini/ölçüsünü dəyişərkən)", @@ -3045,9 +3677,12 @@ "splitOddLinesAction": "Sətir sayı tək olduqda bölmə əməliyyatı", "ocrUseWordSplitList": "OCR: söz bölmə siyahısından istifadə et", "ocrGuessUnknownWords": "OCR: naməlum sözləri təxmin etməyə çalış", + "spellCheckRememberUseAlwaysList": "Orfoqrafiya yoxlaması: \"Həmişə istifadə et\" siyahısını yadda saxla", + "fixShortDisplayTimesAllowMoveStartTime": "Yayılmış xətaları düzəlt: qısa nümayiş vaxtlarının düzəldilməsi başlanğıc vaxtını sürüşdürə bilər", "speechToTextSelectedLinesPromptFirstTimeOnly": "Nitqi mətnə çevirmə: seçilmiş sətirlər üçün dili/mühərriki yalnız ilk dəfə soruş", "multipleReplaceShowDotDotDotButtons": "Çoxsaylı əvəzetmə: kontekst menyusu düymələrini göstər", "gridFocusTextboxAfterInsertNew": "Cədvəl: yeni altyazı əlavə etdikdən sonra mətn xanasına fokuslan", + "undoRedoGoToChangedLine": "Geri al/yenidən et: dəyişdirilmiş sətrə (və video mövqeyinə) keç", "musicSymbol": "Musiqi simvolu", "musicSymbolsToReplace": "Əvəz ediləcək musiqi simvolları (vergüllə ayrılır)", "textToSpeechPromptMergeContinuationLines": "Mətni nitqə çevirmə: davam sətirlərini birləşdirmək üçün soruş", @@ -3056,6 +3691,7 @@ "useFocusedButtonBackgroundColor": "Fokuslanmış düymənin fon rəngindən istifadə et", "focusedButtonBackgroundColor": "Fokuslanmış düymənin fon rəngi", "forceCrLfOnSave": "Yadda saxlayarkən CR+LF istifadəsini məcburi et (mətn altyazı faylları)", + "linuxClipboardUseExternalTool": "Mətni xclip/wl-copy vasitəsilə kopyala (diakritik işarəli simvolları saxlayır)", "showFormatLimitWarning": "Yadda saxlayarkən sətirlər formatın hədlərini keçirsə, xəbərdar et (məsələn, SCC üçün sətirdə 32 simvol)", "textBoxButtonShowAutoBreak": "Mətn xanası: avtomatik sətir bölmə düyməsini göstər", "textBoxButtonShowUnbreak": "Mətn xanası: sətir bölünmələrini ləğv etmə düyməsini göstər", @@ -3067,12 +3703,18 @@ "waveformDoubleClickAction": "Səs dalğasında ikiqat klik əməliyyatı (tək klik əməliyyatından sonra)", "allSettings": "Bütün parametrlər", "uiScale": "İnterfeys miqyası (%)", + "fontScale": "Şrift miqyası (%)", + "textSelectionOpacity": "Mətn seçiminin qeyri-şəffaflığı (%)", "waveformToolbarItems": "Səs dalğası alətlər panelinin elementləri", "matchIconColorToDarkTheme": "Nişan rəngini qaranlıq temanın ön plan rənginə uyğunlaşdır", "subtitlePreviewProperties": "Altyazı önbaxışının xüsusiyyətləri", "usePositionFromSubtitleFile": "Altyazı faylındakı mövqedən istifadə et (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "Kənar boşluq altyazı sahəsinə daxildir", "textJustify": "Sətirləri hər iki kənara düzləndir", + "deinterlace": "Videonun hörülməsini aradan qaldır (deinterlace)", + "deinterlaceOff": "Söndürülüb", + "deinterlaceAuto": "Avtomatik (yalnız hörülmüş kadrlar)", + "deinterlaceAlways": "Həmişə", "pixelWidthInfo": "Yaşıl xətlər = maksimum en həddi | Qırmızı sahə = mətn həddi keçir", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3081,7 +3723,16 @@ "waveformColorTheme": "Rəng teması:", "waveformSaveAsCustomTheme": "Fərdi tema kimi yadda saxla...", "waveformLoadThemeDotDotDot": "Temanı yüklə...", - "waveformExportThemeDotDotDot": "Temanı ixrac et..." + "waveformExportThemeDotDotDot": "Temanı ixrac et...", + "waveformSaveCustomThemeTitle": "Xüsusi temanı yadda saxla", + "waveformThemeFileType": "Subtitle Edit səs dalğası teması", + "waveformThemeHighContrast": "Yüksək kontrast", + "waveformThemeOceanBlue": "Okean mavisi", + "waveformThemeWarmSunset": "İsti qürub", + "waveformThemeForest": "Meşə", + "waveformThemeMidnightPurple": "Gecə yarısı bənövşəyi", + "waveformThemeRetroAmber": "Retro kəhrəba", + "waveformThemeIce": "Buz" }, "shortcuts": { "searchShortcuts": "Qısayollar üzrə axtarış...", @@ -3092,11 +3743,34 @@ "categoryVideo": "Video", "categorySync": "Sinxronlaşdırma", "categoryAi": "Süni intellekt", + "categoryCustom": "Xüsusi", + "editCustomShortcut": "Xüsusi düymə birləşməsini redaktə et", + "customShortcutTextBoxKeyHint": "Burada Ctrl/Alt ilə düymə istifadə edin - adi düymə artıq mətn xanasında yazmayacaq.", + "customShortcutNumberX": "Xüsusi düymə birləşməsi #{0}", + "customShortcutNumberXY": "Xüsusi düymə birləşməsi #{0}: {1}", + "customShortcutStep": "Addım", + "customShortcutSteps": "Addımlar", + "customShortcutStepRunCommand": "Əmri icra et", + "customShortcutStepInsertText": "Mətn daxil et", + "customShortcutStepReplace": "Tap və əvəz et", + "customShortcutInsertAtCursor": "Kursorun yerində", + "customShortcutInsertAtStart": "Mətnin əvvəlində", + "customShortcutInsertAtEnd": "Mətnin sonunda", + "customShortcutSummaryRunCommandX": "İcra et: {0}", + "customShortcutSummaryInsertXY": "\"{0}\" daxil et ({1})", + "customShortcutSummaryReplaceXY": "\"{0}\" ifadəsini \"{1}\" ilə əvəz et", + "customShortcutSummaryReplaceRegexXY": "\"{0}\" müntəzəm ifadəsini \"{1}\" ilə əvəz et", + "customShortcutPickCommand": "İcra ediləcək əmri seçin.", + "customShortcutEnterText": "Daxil ediləcək mətni yazın.", + "customShortcutEnterFind": "Axtarılacaq mətni yazın.", + "customShortcutInvalidRegexX": "Yanlış müntəzəm ifadə: {0}", + "customShortcutStepsHint": "Addımlar yuxarıdan aşağıya icra olunur. Mətn addımları seçilmiş sətirlərdə işləyir; pəncərə açan əmrlərdən sonra icra pəncərə bağlandıqdan sonra davam edir.", "activeIn": "Aktiv olduğu sahə", "activeInEverywhere": "Hər yerdə", "generalMergeSelectedLinesAndUnbreak": "Seçilmiş sətirləri birləşdir və sətir bölünmələrini ləğv et", "generalMergeSelectedLinesAndUnbreakCjk": "Seçilmiş sətirləri birləşdir və sətir bölünmələrini boşluqsuz ləğv et (CJK)", "generalUnbreakNoSpaceCjk": "Sətir bölünmələrini boşluqsuz ləğv et (CJK)", + "generalToggleBreak": "Sətirlərə böl/sətir keçidlərini çıxar arasında keçid et", "generalMergeSelectedLinesBilingual": "Seçilmiş sətirləri iki dildə birləşdir", "generalToggleTranslationMode": "Tərcümə rejimini dəyiş", "generalToggleTranslationAndOriginalInPreviews": "Video/səs önbaxışında tərcümə ilə orijinal arasında keçid et", @@ -3113,10 +3787,12 @@ "generalToggleItalic": "Kursivi aç/bağla", "generalToggleBold": "Qalın yazını aç/bağla", "generalToggleUnderline": "Altından xətt çəkməni aç/bağla", + "generalToggleBox": "Qutunu aç/bağla (EBU STL)", "fileOpen": "Aç", "fileOpenKeepVideo": "Aç (videonu saxla)", "fileSave": "Yadda saxla", "fileSaveAs": "Başqa adla yadda saxla", + "fileSaveOriginal": "Orijinalı yadda saxla", "fileCompare": "Müqayisə et", "fileStatistics": "Statistika", "fileImportPlainText": "Sadə mətn idxal et", @@ -3128,6 +3804,7 @@ "fillSelectedLinesWithClipboard": "Seçilmiş sətirləri mübadilə buferindəki mətnlə doldur", "listInverseSelection": "Seçimi tərsinə çevir", "listDeleteSelection": "Seçimi sil", + "deleteSelectionEverywhere": "Seçimi sil (hər yerdə)", "rippleDeleteSelection": "Seçimi sil və yaranan boşluğu bağla", "assigned": "Təyin edildi", "unassigned": "Təyin olunmayıb", @@ -3136,6 +3813,7 @@ "detectKey": "Düyməni müəyyən et", "control": "Ctrl", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Shift", "controlMac": "⌃", @@ -3146,6 +3824,11 @@ "resetShortcutsDetail": "Bütün qısayolları standart dəyərlərə sıfırlamaq istəyirsiniz?", "togglePlayPause": "Oynat/fasilə ver", "toggleLockTimeCodes": "Vaxt kodlarının kilidini aç/bağla", + "toggleTimeCodeMode": "Vaxt kodu rejimini dəyiş (vaxt/kadrlar/kadr nömrələri)", + "toggleScreenPrivacy": "Ekran məxfiliyini dəyiş (fayl adlarını, sonra mətnləri də gizlət)", + "screenPrivacyFileNamesHidden": "Ekran məxfiliyi: fayl adları gizlədilib", + "screenPrivacyFileNamesAndTextsHidden": "Ekran məxfiliyi: fayl adları və mətnlər gizlədilib", + "screenPrivacyOff": "Ekran məxfiliyi: söndürülüb", "duplicateSelectedLines": "Seçilmiş sətirlərin surətini yarat", "sourceView": "Mənbə görünüşü", "addOrEditBookmark": "Əlfəcin əlavə et və ya redaktə et", @@ -3164,6 +3847,7 @@ "moveFirstWordFromNextLineUpCurrentSubtitle": "Növbəti sətirdəki ilk sözü yuxarı köçür (cari altyazı)", "moveTextFromCursorToNextAndGoToNext": "Kursordan sonrakı mətni növbəti altyazıya köçür və növbətiyə keç", "moveTextFromCursorToNextAndGoToNextAndPlay": "Kursordan sonrakı mətni növbəti altyazıya köçür, növbətiyə keç və oynat", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "Kursordan sonrakı mətni növbəti altyazıya köçür, növbətiyə keç, onu oynat və sonunda dayandır", "breakAtFirstSpaceFromCursor": "Kursordan sonrakı ilk boşluqdan böl", "breakAtFirstSpaceFromCursorAndGoToNext": "Kursordan sonrakı ilk boşluqdan böl və növbətiyə keç", "toggleFocusGridAndWaveform": "Fokusu altyazı cədvəli ilə səs dalğası qrafiki/spektroqram arasında dəyiş", @@ -3193,6 +3877,7 @@ "listViewColumnTextUp": "Sütun: mətni yuxarı köçür", "listViewColumnTextDown": "Sütun: mətni aşağı köçür", "autoTranslateSelectedLines": "Seçilmiş sətirləri avtomatik tərcümə et...", + "autoTranslateSelectedLinesNoPrompt": "Seçilmiş sətirləri avtomatik tərcümə et (soruşmadan, son mühərrik/dillərdən istifadə et)", "setAssaResolution": "ASSA təsvir ölçüsünü təyin et (PlayResX/PlayResY)", "setShortcutForX": "\"{0}\" üçün qısayol təyin et", "commandFileNewKeepVideo": "Yeni (videonu saxla)", @@ -3247,6 +3932,7 @@ "textBoxItalic": "Mətn sahəsi: kursiv yazı", "textBoxBold": "Mətn sahəsi: qalın yazı", "textBoxUnderline": "Mətn sahəsi: altından xətt çək", + "textBoxBox": "Mətn xanası qutusu (EBU STL)", "resetWaveformZoomAndSpeed": "Səs dalğası qrafikinin miqyasını və oynatma sürətini sıfırla (ifa sürəti)", "togglePlaybackSpeed": "Oynatma sürətini dəyiş (ifa sürəti)", "playbackSpeedSlower": "Oynatma sürətini azalt (ifa sürəti)", @@ -3258,6 +3944,7 @@ "seekSilenceForward": "İrəliyə doğru səssiz hissəni tap", "waveformGuessStart": "Səs dalğası qrafikinə əsasən başlanğıc vaxtını təxmin et", "waveformGuessEnd": "Səs dalğası qrafikinə əsasən bitmə vaxtını təxmin et", + "waveformGuessStartAndEnd": "Başlanğıc və son vaxtı səs dalğasından təxmin et", "setVideoPositionCurrentSubtitleStart": "Videodakı mövqeyi cari sətrin başlanğıcına qoy", "goToSubtitlePositionAndPause": "Altyazının mövqeyinə keç və fasilə ver", "setVideoPositionCurrentSubtitleEnd": "Videodakı mövqeyi cari sətrin sonuna qoy", @@ -3271,6 +3958,14 @@ "surroundWith": "Bu işarələrlə əhatələ...", "surroundWithXY": "{0}/{1} ilə əhatələ", "surroundWithNumberX": "#{0} ilə əhatələ", + "surroundWithBehavior": "Davranış", + "surroundWithBehaviorToggle": "Keçid (əlavə et, varsa sil)", + "surroundWithBehaviorAdd": "Əlavə et (hər dəfə)", + "surroundWithBehaviorRemove": "Sil (hamısını)", + "surroundWithBehaviorRemoveOnce": "Sil (hər dəfə birini)", + "surroundWithWorksOn": "Tətbiq sahəsi", + "surroundWithScopeSelectionOrText": "Seçim, əks halda bütün mətn", + "surroundWithScopeEachLine": "Hər sətir", "searchVia": "Axtarış vasitəsi", "searchViaX": "{0} vasitəsilə axtarış", "searchViaNumberX": "#{0} vasitəsilə axtarış", @@ -3298,6 +3993,11 @@ "copySubtitlePathToClipboard": "Altyazının yolunu mübadilə buferinə kopyala", "copySubtitleOriginalPathToClipboard": "Orijinal altyazının yolunu mübadilə buferinə kopyala", "focusTextBox": "Fokusu mətn sahəsinə keçir", + "focusSubtitleListView": "Altyazı siyahısına fokuslan", + "focusWaveform": "Səs dalğasına fokuslan", + "focusOriginalTextBox": "Orijinal mətn xanasına fokuslan", + "textBoxGoToStart": "Mətn xanası, əvvələ keç", + "textBoxGoToEnd": "Mətn xanası, sona keç", "sortByNumber": "Nömrəyə görə sırala", "sortByStartTime": "\"Göstər\" vaxtına görə sırala", "sortByEndTime": "\"Gizlət\" vaxtına görə sırala", @@ -3335,9 +4035,9 @@ "selectionToSentenceCase": "Mətn sahəsi: seçimi cümlə qaydasına uyğunlaşdır", "selectionToggleCasing": "Mətn sahəsi: hərf registrini dəyiş (böyük hərflər → kiçik hərflər → sözlərin ilk hərfi böyük)", "googleIt": "Google ilə axtarış (seçilmiş mətn)", - "setActorXY": "{0} nömrəli danışanı təyin et: {1}", + "setActorX": "Aktyoru təyin et: {0}", "setNewActor": "Yeni danışan təyin et...", - "setActorSlotXTitle": "{0} nömrəli danışan yeri", + "setStyleX": "Üslubu təyin et: {0}", "toggleDialogDashes": "Dialoq tirelərini aç/bağla", "mergeWithLineBeforeAsDialog": "Əvvəlki sətirlə dialoq kimi birləşdir", "mergeWithLineAfterAsDialog": "Növbəti sətirlə dialoq kimi birləşdir", @@ -3348,7 +4048,23 @@ "moveStartOneFrameBackKeepGapPrev": "Başlanğıcı bir kadr geri çək (əvvəlki yaxındırsa, aradakı fasiləni saxla)", "moveStartOneFrameForwardKeepGapPrev": "Başlanğıcı bir kadr irəli çək (əvvəlki yaxındırsa, aradakı fasiləni saxla)", "moveEndOneFrameBackKeepGapNext": "Sonu bir kadr geri çək (növbəti yaxındırsa, aradakı fasiləni saxla)", - "moveEndOneFrameForwardKeepGapNext": "Sonu bir kadr irəli çək (növbəti yaxındırsa, aradakı fasiləni saxla)" + "moveEndOneFrameForwardKeepGapNext": "Sonu bir kadr irəli çək (növbəti yaxındırsa, aradakı fasiləni saxla)", + "moveStartXMsBack": "Başlanğıcı X ms geri sürüşdür (X Parametrlərdə, həmçinin Vizual sinxronlaşdırmada təyin edilir)", + "moveStartXMsForward": "Başlanğıcı X ms irəli sürüşdür (X Parametrlərdə, həmçinin Vizual sinxronlaşdırmada təyin edilir)", + "moveEndXMsBack": "Sonu X ms geri sürüşdür (X Parametrlərdə, həmçinin Vizual sinxronlaşdırmada təyin edilir)", + "moveEndXMsForward": "Sonu X ms irəli sürüşdür (X Parametrlərdə, həmçinin Vizual sinxronlaşdırmada təyin edilir)", + "moveSelectedLinesXMsBack": "Seçilmiş sətirləri X ms geri sürüşdür (X Parametrlərdə təyin edilir)", + "moveSelectedLinesXMsForward": "Seçilmiş sətirləri X ms irəli sürüşdür (X Parametrlərdə təyin edilir)", + "moveSelectedLinesAndForwardXMsBack": "Seçilmiş sətirləri və bütün sonrakıları X ms geri sürüşdür (X Parametrlərdə təyin edilir)", + "moveSelectedLinesAndForwardXMsForward": "Seçilmiş sətirləri və bütün sonrakıları X ms irəli sürüşdür (X Parametrlərdə təyin edilir)", + "moveAllLinesXMsBack": "Bütün sətirləri X ms geri sürüşdür (X Parametrlərdə təyin edilir)", + "moveAllLinesXMsForward": "Bütün sətirləri X ms irəli sürüşdür (X Parametrlərdə təyin edilir)", + "moveSelectedLinesCustomMsBack": "Seçilmiş sətirləri sürüşdür, xüsusi millisaniyə ({0:#,###,##0}) geri, {1}", + "moveSelectedLinesCustomMsForward": "Seçilmiş sətirləri sürüşdür, xüsusi millisaniyə ({0:#,###,##0}) irəli, {1}", + "moveSelectedLinesAndForwardCustomMsBack": "Seçilmiş sətirləri və bütün sonrakıları sürüşdür, xüsusi millisaniyə ({0:#,###,##0}) geri, {1}", + "moveSelectedLinesAndForwardCustomMsForward": "Seçilmiş sətirləri və bütün sonrakıları sürüşdür, xüsusi millisaniyə ({0:#,###,##0}) irəli, {1}", + "moveAllLinesCustomMsBack": "Bütün sətirləri sürüşdür, xüsusi millisaniyə ({0:#,###,##0}) geri, {1}", + "moveAllLinesCustomMsForward": "Bütün sətirləri sürüşdür, xüsusi millisaniyə ({0:#,###,##0}) irəli, {1}" }, "wordLists": { "title": "Söz siyahıları", @@ -3393,7 +4109,11 @@ "applyToSelectedLinesX": "Seçilmiş sətirlər ({0})", "applyToAllLinesX": "Bütün sətirlər ({0})", "updateAllXAvailable": "Hamısını yenilə ({0})", - "updatingXOfY": "{0}/{1} yenilənir..." + "updatingXOfY": "{0}/{1} yenilənir...", + "doNotAskAgain": "Bir daha soruşma (Plaginləri idarə et bölməsində dəyişin)", + "applyPluginsTo": "Plaginləri buna tətbiq et", + "askEachTime": "Hər dəfə soruş", + "allLines": "Bütün sətirlər" }, "help": { "aboutSubtitleEdit": "Subtitle Edit haqqında", @@ -3437,6 +4157,8 @@ "nOcrDatabase": "nOCR verilənlər bazası", "drawMode": "Çəkmə rejimi:", "addNewCharcter": "Yeni simvol əlavə et", + "addNOcrCharacterTitle": "\"{3}\" verilənlər bazasından istifadə edərək {0} sətri üçün nOCR simvolu əlavə et, {2} simvoldan {1}", + "addBinaryOcrCharacterTitle": "\"{3}\" verilənlər bazasından istifadə edərək {0} sətri üçün ikili OCR simvolu əlavə et, {2} simvoldan {1}", "lineIndexX": "Sətir {0}", "inspectNOcrAdditions": "Yeni nOCR əlavələrini yoxla", "ocrSelectedLines": "Seçilmiş sətirlərə OCR tətbiq et", @@ -3485,6 +4207,8 @@ "binaryImageCompareInspectImageMatches": "\"İkili şəkil müqayisəsi\": şəkil uyğunluqlarını yoxla", "saveBlankTextTitle": "Boş mətn yadda saxlanılsın?", "saveBlankTextPrompt": "Şəkil üçün boş mətn yadda saxlanılsın?", + "drawnLinesDoNotMatchTitle": "Xətlər şəkillə uyğun gəlmir", + "drawnLinesDoNotMatchPrompt": "Çəkilmiş xətlərin bəziləri şəkillə uyğun gəlmir (yaşıl xətlər simvolun üzərində, qırmızı xətlər isə ondan kənarda olmalıdır), buna görə bu simvol tanınmayacaq.\n\nYenə də yadda saxlanılsın?", "yesAndNeverAskAgain": "Bəli, bir daha soruşma", "importTextFromSubtitleDotDotDot": "Altyazıdan mətn idxal et...", "importTextFromSubtitleOverwritePrompt": "Bəzi sətirlərdə artıq OCR mətni var. Mövcud mətnin üzərinə yazılsın?", @@ -3543,9 +4267,26 @@ "crispEmbedSettingsTitle": "CrispEmbed parametrləri", "crispEmbedDescription": "Bir neçə model icra mühitini dəstəkləyən lokal OCR mühərriki. Mühərriki və modelləri buradan endirin.", "trainNOcrDatabase": "nOCR verilənlər bazasını öyrət...", + "optimizeNOcrDatabase": "nOCR verilənlər bazasını optimallaşdır...", + "optimizeNOcrDatabaseQuestionXY": "\"{0}\" nOCR verilənlər bazasında simvolları oxşar simvollardan fərqləndirməyən xətlər silinsin?\n\nBu, verilənlər bazasını kiçildir və OCR-i sürətləndirir, adətən daha az xəta ilə. Bir dəqiqəyədək çəkir.\n\nEhtiyat nüsxə \"{1}\" kimi yadda saxlanılır.", + "optimizingNOcrDatabaseXY": "nOCR verilənlər bazası optimallaşdırılır... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "\"{0}\" nOCR verilənlər bazası optimallaşdırıldı: {1:#,##0} -> {2:#,##0} xətt.", "startTraining": "Öyrətməni başlat", "abortTraining": "Öyrətməni dayandır", "trainingOptions": "Öyrətmə seçimləri", + "trainNOcrSubtitle": "Simvolları quraşdırılmış şriftlərlə çəkir və nOCR-ə onların formalarını öyrədir. Altyazılarınızın istifadə etdiyi şriftləri seçin.", + "xFontsSelected": "{0:#,##0} seçilib", + "subtitleFonts": "Altyazı şriftləri", + "emptyDatabase": "Boş verilənlər bazası", + "startFromDatabase": "Başlanğıc nöqtəsi", + "startFromDatabaseHint": "Öyrədilmiş simvolları mövcud verilənlər bazasının surətinə əlavə edin (tövsiyə olunur) və ya boş bazadan başlayın", + "fontSizes": "Şrift ölçüləri", + "fontSizesHint": "Çəkiləcək şrift ölçüləri piksellə, vergüllə ayrılmış, məsələn \"30, 40\"", + "numberOfLineSegmentsHint": "Hər simvol üçün yoxlanılan xətlər - çox olduqda daha sərt, lakin daha yavaş", + "enterDatabaseName": "Verilənlər bazası üçün ad daxil edin", + "trainingFontXSizeYCharacterZ": "\"{0}\" {1} px ölçüdə öyrədilir: {2}", + "xLearned": "{0:#,##0} öyrənildi", + "xSkipped": "{0:#,##0} ötürüldü", "charactersToTrain": "Öyrədiləcək simvollar", "letterCombinationsToTrain": "Bir şəkil kimi ayrıla biləcək hərf birləşmələri", "importCharactersFromSubtitleFile": "Altyazı faylından simvollar idxal et...", @@ -3572,6 +4313,8 @@ "drawZoomOut": "Kiçilt (Ctrl+-)", "drawResetView": "Görünüşü sıfırla (Ctrl+0)", "drawToggleGrid": "Toru göstər/gizlət (Ctrl+G)", + "drawTogglePreview": "Ön baxışı aç/bağla (F9)", + "drawPreviewFailed": "Ön baxış alınmadı - libass ilə ffmpeg (subtitles filtri) tələb olunur", "drawCopyToClipboard": "Mübadilə buferinə kopyala (Ctrl+C)", "drawShapes": "Fiqurlar", "drawSelectedPoint": "Seçilmiş nöqtə", @@ -3579,6 +4322,81 @@ "drawSelectedLayer": "Seçilmiş qat", "drawToolX": "Alət: {0}", "drawHelpText": "Nöqtə əlavə etmək üçün klikləyin • Fiquru bağlamaq üçün Enter/F8 düyməsini basın • Görünüşü sürüşdürmək üçün Shift düyməsini basılı saxlayaraq siçanla dartın • Miqyası dəyişmək üçün Ctrl düyməsini basılı saxlayaraq siçanın çarxını fırladın", + "drawMoveToLayer": "Qata köçür", + "drawFlipHorizontal": "Üfüqi çevir", + "drawFlipVertical": "Şaquli çevir", + "drawHideShape": "Fiquru gizlət", + "drawShowShape": "Fiquru göstər", + "drawHideLayer": "Qatı gizlət", + "drawShowLayer": "Qatı göstər", + "drawDeleteLayer": "Qatı sil", + "drawDeletePoint": "Nöqtəni sil", + "drawCancelDrawing": "Çəkməni ləğv et", + "drawLayerX": "Qat {0}", + "drawImportSvg": "SVG şəkli idxal et...", + "drawRotateClockwise": "Saat əqrəbi istiqamətində 90° fırlat", + "drawConvertToCurve": "Seqmenti əyriyə çevir", + "drawBackground": "Fon", + "drawPosition": "Mövqe", + "drawZoom": "Miqyas", + "drawShapeTool": "Fiqur aləti", + "drawColorPickerTool": "Rəngi fiqurdan və ya fondan götür", + "drawShapeLibrary": "Fiqur kitabxanası", + "drawShapeLibraryHint": "Fiquru yerləşdirmək üçün kətan üzərində sürükləyin və ya standart ölçü üçün klikləyin. Shift onun nisbətlərini saxlayır.", + "drawAddToLibrary": "Fiqur kitabxanasına əlavə et...", + "drawRemoveFromLibrary": "Fiqur kitabxanasından çıxar", + "drawShapeName": "Fiqurun adı", + "drawCategorySpeechBubbles": "Danışıq qabarcıqları", + "drawCategoryArrows": "Oxlar", + "drawCategoryBasicShapes": "Əsas fiqurlar", + "drawCategorySymbols": "Simvollar", + "drawCategoryMyShapes": "Mənim fiqurlarım", + "drawShapeSpeechBubble": "Danışıq qabarcığı", + "drawShapeSpeechBubbleRight": "Danışıq qabarcığı, quyruq sağda", + "drawShapeSpeechBubbleUp": "Danışıq qabarcığı, quyruq yuxarıda", + "drawShapeOvalBubble": "Oval danışıq qabarcığı", + "drawShapeBoxBubble": "Düzbucaqlı danışıq qabarcığı", + "drawShapeThoughtBubble": "Fikir qabarcığı", + "drawShapeShoutBubble": "Qışqırıq qabarcığı", + "drawShapeCaptionBox": "Yazı qutusu", + "drawShapeArrow": "Ox", + "drawShapeDoubleArrow": "İkitərəfli ox", + "drawShapeChevron": "Şevron", + "drawShapeCurvedArrow": "Əyri ox", + "drawShapeRoundedRectangle": "Yumru künclü düzbucaqlı", + "drawShapeTriangle": "Üçbucaq", + "drawShapeDiamond": "Romb", + "drawShapePentagon": "Beşbucaq", + "drawShapeHexagon": "Altıbucaq", + "drawShapeOctagon": "Səkkizbucaq", + "drawShapeStar": "Ulduz", + "drawShapeRing": "Halqa", + "drawShapePlus": "Artı", + "drawShapeBanner": "Banner", + "drawShapeHeart": "Ürək", + "drawShapeCheck": "Təsdiq işarəsi", + "drawShapeMusicNote": "Not", + "drawShapeMusicNotes": "Notlar", + "drawShapeLightning": "İldırım", + "drawShapeCloud": "Bulud", + "drawShapeMoon": "Ay", + "drawShapeBadge": "Nişan", + "drawSize": "Ölçü", + "drawLayer": "Qat", + "drawBackgroundVideoFrame": "Video kadrı (cari mövqe)", + "drawBackgroundVideoFrameAt": "Bu vaxtdakı video kadrı...", + "drawBackgroundImage": "Şəkil faylı...", + "drawBackgroundNone": "Fon yoxdur", + "drawBackgroundStretch": "Şəkli kətana uyğun dart", + "drawBackgroundOpacity": "Fonun qeyri-şəffaflığı", + "drawBackgroundVideoFrameFailed": "{0} vaxtında video kadrını almaq mümkün olmadı.", + "drawImages": "Şəkillər", + "drawConvertToLine": "Seqmenti düz xəttə çevir", + "drawConvertShapeToCurves": "Bütün düz xətləri əyrilərə çevir", + "drawConvertShapeToLines": "Bütün əyriləri düz xətlərə çevir", + "drawRotateCounterClockwise": "Saat əqrəbinin əksinə 90° fırlat", + "drawSvgImages": "SVG şəkilləri", + "drawSvgNoShapes": "SVG faylında doldurulmuş fiqur və ya kontur tapılmadı.", "progressBarTitle": "ASSA gedişat zolağı", "progressBarSettings": "Gedişat zolağı", "mouseOverColor": "Siçan göstəricisi üzərinə gətirildikdə rəng", @@ -3675,13 +4493,26 @@ "graphics": "Qrafika", "copyToStorageStyles": "Saxlanılan üslublara kopyala", "copyToFileStyles": "Fayldakı üslublara kopyala", + "styleXAlreadyExistsInStorage": "Saxlanılan üslublarda \"{0}\" adlı üslub artıq mövcuddur.\n\nÜzərinə yazılsın, yoxsa hər ikisi saxlanılsın (surətə yeni ad veriləcək)?", + "styleXAlreadyExistsInFile": "Faylda \"{0}\" adlı üslub artıq mövcuddur.\n\nÜzərinə yazılsın, yoxsa hər ikisi saxlanılsın (surətə yeni ad veriləcək)?", + "styleNameCannotBeEmpty": "Üslub adı boş ola bilməz.", + "styleNameXIsUsedMoreThanOnce": "\"{0}\" üslub adı faylda birdən çox üslub tərəfindən istifadə olunur.", + "overwrite": "Üzərinə yaz", + "keepBoth": "Hər ikisini saxla", + "doThisForAllConflictingStyles": "Bütün ziddiyyətli üslublar üçün bunu et", "setStyleAsDefault": "Üslubu standart olaraq təyin et", "takeUsagesFromDotDotDot": "İstifadə yerlərini buradan götür...", "replaceStyleWithDotDotDot": "Üslubu bununla əvəz et...", "noAttachmentsFound": "Seçilmiş ASSA faylında qoşma tapılmadı.", "deleteStyleQuestion": "Üslub silinsin?", "deleteStylesQuestion": "Üslublar silinsin?", + "deleteXStylesQuestion": "{0} üslubu silmək istəyirsiniz?", + "deleteXStylesFromStorageQuestion": "{0} üslubu saxlanılan üslublardan silmək istəyirsiniz?", + "deleteStyleXFromStorageQuestion": "\"{0}\" üslubunu saxlanılan üslublardan silmək istəyirsiniz?", + "deleteStyleXFromFileQuestion": "\"{0}\" üslubunu cari fayldan silmək istəyirsiniz?", "openStyleImportFile": "Üslubların idxal ediləcəyi altyazı faylını aç", + "styleImportFiles": "Üslub faylları (.ass, .sty, Subtitle Edit 4 kateqoriyaları .template)", + "ssaStyleImportFiles": "Üslub faylları (.ssa, .ass, .sty)", "primary": "Əsas", "secondary": "İkinci", "applyOverrideTags": "Üslubu dəyişən etiketləri tətbiq et", diff --git a/src/ui/Assets/Languages/Bulgarian.json b/src/ui/Assets/Languages/Bulgarian.json index a592ae49a8a..2a279010788 100644 --- a/src/ui/Assets/Languages/Bulgarian.json +++ b/src/ui/Assets/Languages/Bulgarian.json @@ -1,12 +1,30 @@ { "title": "Subtitle Edit", - "version": "v5.2.0-rc7", + "version": "v5.3.0", "translatedBy": "", "cultureName": "bg-BG", "general": { "abort": "Прекрати", "actor": "Актьор", "actors": "Актьори", + "setActorDotDotDot": "Задаване на актьор...", + "actorPickerTitle": "Задаване на актьор", + "actorPickerFilterHint": "Пишете, за да филтрирате, или въведете ново име на актьор", + "actorPickerKeysHint": "Натиснете цифра или Enter, за да зададете актьора. Alt+Up/Down променя реда, Delete премахва актьора.", + "actorPickerNewActorX": "Нов актьор „{0}“", + "actorPickerLinesSelectedX": "Избрани редове: {0}", + "setStyleDotDotDot": "Задаване на стил...", + "stylePickerTitle": "Задаване на стил", + "stylePickerFilterHint": "Пишете, за да филтрирате, или въведете ново име на стил", + "stylePickerKeysHint": "Натиснете цифра (1-9, 0), за да зададете стила на всички избрани редове.", + "stylePickerNewStyleX": "Нов стил „{0}“", + "stylePickerNewStyleInfo": "Натиснете Enter, за да добавите този стил с настройки по подразбиране и да го зададете на избраните редове. Използвайте \"Управление на стилове...\", за да промените по-късно шрифта, цветовете и позицията му.", + "stylePickerCurrentStyleX": "Текущ стил: {0}", + "stylePickerLinesUsingStyleX": "Редове с този стил: {0}", + "stylePickerMarginsXYZ": "Ляво {0}, дясно {1}, вертикално {2}", + "stylePickerSetStyle": "_Задаване на стил", + "stylePickerManageStyles": "Управление на стилове...", + "stylePickerManageStylesHint": "Затваряне на този прозорец и отваряне на управлението на стилове за редактиране на шрифтове, цветове, позиция и др.", "add": "Добавяне", "addDotDotDot": "Добави...", "addToNamesListCaseSensitive": "Добавяне към списъка с имена (с малки и главни букви)", @@ -52,7 +70,7 @@ "autoTranslate": "Автоматичен превод", "autodetect": "Автоматично откриване", "backend": "Бекенд", - "background": "Предистория", + "background": "Фон", "backgroundColor": "Цвят на фона", "backward": "Назад", "batchMode": "Пакетен режим", @@ -339,6 +357,7 @@ "mergeSelectedLinesDialog": "Обедини избраните редове като диалог", "mergeWithLineAfterAndAutoBreak": "Сливане с реда след и автоматично прекъсване", "mergeWithLineAfterKeepBreaks": "Сливане с реда след (запазване на разделителите)", + "mergeWithLineAfterAndUnbreak": "Обединяване със следващия ред и премахване на пренасянето", "mergeWithLineBeforeAndAutoBreak": "Сливане с предишния ред и автоматично прекъсване", "mergeWithLineBeforeKeepBreaks": "Сливане с реда отпред (запазване на раздели)", "middleCenter": "Средно център", @@ -353,6 +372,8 @@ "moveAllShotChangeOneFrameForward": "Преместване на всички промени в кадрите с един кадър напред", "multiMode": "Многорежимно", "moveDown": "Премести надолу", + "increase": "Увеличаване", + "decrease": "Намаляване", "moveUp": "Премести нагоре", "moveToTop": "Премести нагоре", "moveToBottom": "Премести надолу", @@ -422,6 +443,7 @@ "percent": "Процент", "pickLayer": "Задаване на слой", "pickOllamaModel": "Избери модел Ollama", + "pickModel": "Избор на модел", "llamaCppUseRemoteServer": "Използвайте външен сървър (URL адрес)", "llamaCppEngineSettings": "настройки на енджина llama.cpp", "llamaCppEngineSettingsSubtitle": "Локална компилация на сървъра llama.cpp", @@ -498,6 +520,7 @@ "reset": "Нулиране", "resizePanels": "Преоразмеряване на панелите", "resolution": "Резолюция", + "retry": "Повторен опит", "reverseRightToLeftStartEnd": "Обратно начало/край надясно", "right": "Дясно", "rightToLeft": "Отдясно наляво", @@ -559,6 +582,8 @@ "shadowColor": "Цвят на сянката", "shadowWidth": "Ширина на сянката", "shiftLineBy": "Измести реда с", + "shotIn": "Начало на кадър", + "shotOut": "Край на кадър", "shortcut": "Пряк път", "shortcuts": "Преки пътища", "show": "Начално", @@ -570,9 +595,13 @@ "showStartColumn": "Показване на колона \"Начално\"", "showHideColumn": "Показване на колоната \"Крайно\"", "showHistory": "Покажи историята", + "clearHistory": "Изчистване на историята", + "removeFromHistory": "Премахване от историята", "showLayerColumn": "Показване на колона \"Слой\"", "showPreview": "Показване на предварителен преглед", "showShotChangesList": "Покажи списъка с промени на кадрите", + "showShotInColumn": "Показване на колона \"Начало на кадър\"", + "showShotOutColumn": "Показване на колона \"Край на кадър\"", "showStyleColumn": "Показване на колона \"Стил\"", "showTeletext": "Покажи ТТ", "showTimeCodes": "Показване на времеви кодове", @@ -629,12 +658,14 @@ "styleExaggeration": "Преувеличение в стила", "styles": "Стилове", "subtitleFile": "Файл със субтитри", + "subtitleFileChangedOutsideX": "Файлът \"{0}\" е променен извън Subtitle Edit.\n\nДа се зареди ли отново, като загубите промените си?", "subtitleFileName": "Име на файла със субтитри", "subtitleFileSaved": "Файлът със субтитри е запазен", "subtitleFileSavedToX": "Файлът със субтитри е запазен в {0}", "subtitleFiles": "Файлове със субтитри", "subtitleFormats": "Формати на субтитри", "subtitleLoadedX": "Заредени субтитри: {0}", + "subtitleReloadedChangedOutsideX": "Субтитрите са заредени отново (променени извън Subtitle Edit): {0}", "suffix": "Суфикс", "suggestions": "Предложения", "sync": "Синхронизиране", @@ -680,8 +711,11 @@ "type": "Тип", "unbreak": "Разделяне на текста", "unbreakLines": "Разделяне на редовете", + "undelete": "Възстановяване на изтритото", "underline": "Подчертаване", "undo": "Отмяна", + "uninstall": "Деинсталиране", + "uninstalled": "Деинсталирано", "unknown": "Неизвестен", "unknownNoInstallRecord": "Неизвестно (няма запис за инсталиране)", "unknownSubtitleFormat": "Неизвестен формат на субтитрите", @@ -717,10 +751,23 @@ "videoCustom3ForwardX": "Видео, персонализирани милисекунди ({0:#,###,##0}) напред, 3", "videoCustom4BackX": "Видео, персонализирани милисекунди ({0:#,###,##0}) назад, 4", "videoCustom4ForwardX": "Видео, персонализирани милисекунди ({0:#,###,##0}) напред, 4", + "videoCustom1BackAndPauseX": "Видео, потребителски милисекунди ({0:#,###,##0}) назад и пауза, 1", + "videoCustom1ForwardAndPauseX": "Видео, потребителски милисекунди ({0:#,###,##0}) напред и пауза, 1", + "videoCustom2BackAndPauseX": "Видео, потребителски милисекунди ({0:#,###,##0}) назад и пауза, 2", + "videoCustom2ForwardAndPauseX": "Видео, потребителски милисекунди ({0:#,###,##0}) напред и пауза, 2", + "videoCustom3BackAndPauseX": "Видео, потребителски милисекунди ({0:#,###,##0}) назад и пауза, 3", + "videoCustom3ForwardAndPauseX": "Видео, потребителски милисекунди ({0:#,###,##0}) напред и пауза, 3", + "videoCustom4BackAndPauseX": "Видео, потребителски милисекунди ({0:#,###,##0}) назад и пауза, 4", + "videoCustom4ForwardAndPauseX": "Видео, потребителски милисекунди ({0:#,###,##0}) напред и пауза, 4", "videoExtension": "Разширение на видео файл", "videoFile": "Видео файл", "videoFileGenerated": "Генериран видео файл", "videoFileGeneratedX": "Генериран видео файл: \"{0}\"", + "videoFilesGenerated": "Генерирани видео файлове", + "xVideosGenerated": "Генерирани видеоклипове: {0}", + "xOfYVideosGenerated": "Генерирани {0} от {1} видеоклипа", + "savedInX": "Запазено в {0}", + "savedInXFolders": "Запазено в {0} папки", "videoFiles": "Видео файлове", "videoAndAudioFiles": "Видео и аудио файлове", "videoOffset": "Видео отместване", @@ -778,16 +825,16 @@ "imageFiles": "Файлове с изображения", "openAiCompatibleSttEndpoint": "URL адрес на крайната точка на STT", "openAiCompatibleSttApiKey": "API ключ", - "openAiCompatibleSttModel": "Модел", "openAiCompatibleSttExtraHeaders": "Допълнителни заглавки", "openAiCompatibleSttTimeout": "Време за изчакване (секунди)", "openAiCompatibleSttLanguage": "Подсказка за език", - "openAiCompatibleSttTemperature": "Температура", - "openAiCompatibleSttPrompt": "Подкана", "openAiCompatibleSttModelRejectedHint": "Сървърът отхвърли името на модела. Не всяка крайна точка, съвместима с OpenAI, приема модел - например https://api.x.ai/v1/stt на xAI изобщо няма параметър \"model\". Опитайте да изчистите полето \"Модел\".", "dashScopeSttRegion": "Регион", "dashScopeSttEnableWords": "Времеви марки на ниво дума", "dashScopeSttRegionKeyHint": "Забележка: Ключовете за API на Alibaba Cloud Model Studio са специфични за региона - уверете се, че избраният регион съответства на региона, където е създаден ключът за API (Китай срещу Международен).", + "googleCloudSttProjectId": "ID на проекта (само за Application Default Credentials)", + "googleCloudSttBucketName": "Storage bucket (празно = автоматично)", + "googleCloudSttDynamicBatching": "Динамично групиране (около 5 пъти по-евтино, без гаранция за забавянето)", "onlineSttApiKeyMissing": "Изисква се API ключ. Моля, въведете вашия API ключ и опитайте отново.", "openAiCompatibleSttAutoTranscribeOnAudioSelection": "Автоматично транскрибиране при избор на аудио", "openAiCompatibleSttStream": "Поточен отговор", @@ -806,7 +853,48 @@ "transcriptionProgressServerFormat": "Сървър: {0}", "transcriptionProgressModelFormat": "Модел: {0}", "transcriptionProgressReceivedSegmentsFormat": "Получени сегменти ({0})", - "transcriptionProgressModelAuto": "(автоматично)" + "transcriptionProgressModelAuto": "(автоматично)", + "prompt": "Подкана", + "temperature": "Температура", + "preset": "Предварително зададено", + "output": "Изход", + "outputFormat": "Изходен формат", + "other": "Друго", + "timeCodeFormat": "Формат на времевия код", + "topBottomMargin": "Горен/долен марж", + "theme": "Тема", + "brightness": "Яркост", + "chooseColor": "Изберете цвят", + "lineX": "Ред {0}", + "playLine": "Пускане на реда", + "maxLineLength": "Максимална дължина на реда", + "maxCharsPerSec": "Максимален брой символи/сек", + "maxNumberOfLines": "Максимален брой редове", + "subtitles": "Субтитри", + "shotChanges": "Промени в кадъра", + "chapters": "Глави", + "audio": "Аудио", + "interjections": "Междуметия", + "blankLines": "Празни редове", + "editWholeText": "Редактиране на целия текст", + "noTextInClipboard": "Няма текст в клипборда", + "noSubtitlesFoundTitle": "Няма намерени субтитри", + "replacedXOccurrences": "Заменени срещания: {0}", + "invalidRegularExpressionX": "Невалиден регулярен израз: {0}", + "discardChangesTitle": "Да се отхвърлят ли промените?", + "downloadingXDotDotDot": "Изтегляне на {0}...", + "importTimeCodesDotDotDot": "Импортиране на времеви кодове...", + "original": "Оригинал", + "nextChange": "Следваща промяна", + "previousChange": "Предишна промяна", + "changeXOfY": "Промяна {0} от {1}", + "tooLong": "Твърде дълго", + "tooShort": "Твърде кратко", + "overlapping": "Припокриване", + "detail": "Детайл", + "fixOcrErrors": "Коригиране на OCR грешки", + "runningOcrXY": "Изпълнява се OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp изисква изтегляне на двигателя llama-server. Да се изтегли ли сега?" }, "main": { "menu": { @@ -845,6 +933,7 @@ "multipleReplace": "_Множествена замяна...", "fillSelectedLinesWithClipboard": "Запълни избраните редове с текст от клипборда", "goToLineNumber": "_Отиди на номер на ред...", + "commandPalette": "Палитра с _команди...", "rightToLeftMode": "Режим отдясно наляво", "modifySelectionDotDotDot": "Промяна на _селекция...", "tools": "_Инструменти", @@ -852,6 +941,7 @@ "applyDurationLimits": "Прилагане на ограничения за Траене...", "batchConvert": "_Пакетно конвертиране...", "beautifyTimeCodes": "Разкрасяване на времевите кодове...", + "improveTimeCodes": "Подобряване на времевите кодове (принудително подравняване)...", "bridgeGaps": "Запълване _на празнини...", "applyMinGap": "Приложи мин. разстояние между субтитрите...", "changeCasing": "_Смяна на главни и малки букви...", @@ -990,6 +1080,9 @@ "selectCurrentLineWhilePlayingHint": "Маркиране на текущ субтитър при възпроизвеждане {0}", "videoPosition": "Позиция на видеото {0}", "videoPositionTextBox": "Текстово поле за позиция на видеоклипа {0}", + "toolbarLineBreakX": "Нов ред {0} (останалата част от лентата с инструменти продължава на нов ред)", + "initialText": "Първоначален текст на избрания ред", + "initialTextHint": "Текстът на избрания ред такъв, какъвто е бил при избирането на реда", "hideWaveformToolbar": "Скриване на лентата с инструменти {0}", "resetZoomAndSpeed": "Нулиране на мащаба и скоростта на възпроизвеждане {0}", "removeBlankLines": "Премахване на празни редове {0}", @@ -1003,6 +1096,15 @@ "textPlayHint": "Пусни текущия субтитър и спри в края {0}", "textPauseHint": "Пауза на възпроизвеждането {0}", "textNextHint": "Пусни следващия субтитър и спри в края {0}", + "moveSelectedLines": "Преместване на избраните редове (бутони назад/напред)", + "moveSelectedLinesAndFollowing": "Преместване на избраните редове и всички следващи (бутони назад/напред)", + "moveAllLines": "Преместване на всички редове (бутони назад/напред)", + "moveSelectedLinesBackHint": "Преместване на избраните редове {0} ms назад {1}", + "moveSelectedLinesForwardHint": "Преместване на избраните редове {0} ms напред {1}", + "moveSelectedLinesAndFollowingBackHint": "Преместване на избраните редове и всички следващи {0} ms назад {1}", + "moveSelectedLinesAndFollowingForwardHint": "Преместване на избраните редове и всички следващи {0} ms напред {1}", + "moveAllLinesBackHint": "Преместване на всички редове {0} ms назад {1}", + "moveAllLinesForwardHint": "Преместване на всички редове {0} ms напред {1}", "guessStartNoLineSelected": "Начало на предположението: няма избран ред", "guessStartTimeCodesLocked": "Начало на предположението: времевите кодове са заключени", "guessStartNoWaveform": "Начало на предположението: няма вълнова форма", @@ -1024,6 +1126,9 @@ "charactersPerSecond": "Знаци/секунда: {0}", "chooseColumn": "Избери колона", "columnPaste": "Вмъкни колони", + "commandPaletteTitle": "Палитра с команди", + "commandPaletteSearchPlaceholder": "Пишете, за да търсите команди...", + "commandPaletteNoCommandsFound": "Няма съвпадащи команди", "createdEmptyTranslation": "Създаден е празен превод от текущия субтитър", "deleteText": "Изтриване на текст", "deleteTextAndShiftCellsUp": "Изтриване на текст и преместване на клетките нагоре", @@ -1058,15 +1163,17 @@ "loadingWaveInfoFromCache": "Зареждане на информация за вълната от кеша...", "clickToGenerateWaveform": "Клик, да генерира вълнова форма", "waveformFfmpegNotFoundClickToSetUp": "FFmpeg не е намерен - щракнете върху формата на вълната, за да настроите FFmpeg и да генерирате формата на вълната", - "noTextInClipboard": "Няма текст в клипборда", "numberOfLinesEvenlyDistributedX": "Равномерно разпределени {0} реда", "oneLineCopiedFromOriginal": "Един ред, копиран от оригиналния субтитър", "oneLineCopiedToOriginal": "Един ред е копиран в оригиналния субтитър", + "onlineOnlyVideo": "Видео само онлайн", + "onlineOnlyVideoXSizeYDownloadAndOpen": "Видео файлът \"{0}\" ({1}) се съхранява само онлайн, например в Dropbox или iCloud Drive, и трябва да бъде изтеглен, преди да може да се отвори.\n\nДа се изтегли и отвори ли сега?", "oneLineMerged": "Един ред е обединен", "oneLineSwitched": "Един превключен ред", "overwriteExistingCells": "Презаписване на съществуващи клетки", "overwriteOrShiftCellsDown": "Презаписване/преместване на клетки надолу", "parsingMatroskaFile": "Разбор на Matroska файл...", + "readingDvdSubtitles": "Четене на DVD субтитри...", "pasteFromClipboardDotDotDot": "Поставяне от клипборда...", "redoPerformed": "Повторно извършено", "redoPerformedXActionLeft": "Възстановяване на изпълнението (оставащи действия: {0})", @@ -1106,12 +1213,14 @@ "trimmedXLines": "Съкратени са {0} реда със субтитри", "pastedXLinesOverSelectedLines": "Поставени са {0} реда върху избраните редове", "pastedXOfYLinesOverSelectedLines": "Поставени са {0} от {1} реда върху избраните редове - останалите не се побират в селекцията", + "insertedXLinesFromClipboard": "Вмъкнати {0} ред(а) от клипборда", "openOriginalDifferentNumberOfSubtitlesXY": "Оригиналният файл със субтитри няма същия брой субтитри като текущия файл със субтитри.\n\n• Оригинални субтитри: {0}\n• Текущи субтитри: {1}", "originalTextReadOnly": "Оригинален текст (само за четене)", "originalTextEditMode": "Оригинален текст (режим на редактиране)", "originalIsReadOnlyNotSaved": "Оригиналният субтитър е само за четене и не е запазен", "originalIsEmptyNotSaved": "Оригиналният субтитър изобщо няма текст и не е запазен", "originalIsReadOnlyReference": "Оригиналният субтитър е отворен само за четене", + "closeTranslationQuestionXY": "Затваряне на превода \"{0}\"?\n\nОригиналните субтитри \"{1}\" стават субтитрите, които редактирате. Самият файл с превода не се променя.", "allowEditOfOriginalSubtitle": "Разрешаване на редактиране на оригиналните субтитри", "showAllOriginalLinesX": "Показване на всички оригинални редове ({0} нямат съвпадение тук)", "showAllOriginalLinesHint": "Редовете без съвпадение се показват като допълнителни редове, за да можете да видите какво липсва в превода.", @@ -1146,9 +1255,9 @@ "fileExportedInFormatXToY": "Файлът е експортиран във формат {0} към {1}", "fileExportedInFormatXToFileY": "Файлът е експортиран във формат \"{0}\" към файл \"{1}\"", "fixedXLines": "Фиксирани {0} редове", + "toolXChangedYLines": "{0}: променени редове: {1}", "transcriptionCompletedWithXLines": "Транскрипцията е завършена с {0} реда", "openSubtitleFileX": "Да се отвори ли файлът със субтитри \"{0}\"?", - "replacedXOccurrences": "Заменени са {0} съвпадения", "ffmpegDownloadedAndInstalledToX": "ffmpeg е изтеглен и инсталиран на {0}", "nothingToSave": "Няма какво да се запази", "formatLimitWarningTitle": "Превишени са ограниченията на формата", @@ -1215,10 +1324,11 @@ "maxLengthErrorTeletextColored": "Ред {0}-{1}: 36 (не {2}) трябва да са максималният брой знаци за цветен текст с двойна височина", "maxLengthErrorTeletextWhite": "Ред {0}-{1}: 37 (не {2}) трябва да са максималният брой знаци за бял текст с двойна височина", "maxLengthErrorTeletextSingleHeight": "Ред {0}: 38 (не {1}) трябва да са максималният брой знаци за бял текст с една височина", - "discSequenceNumber": "Пореден номер на диска" + "discSequenceNumber": "Пореден номер на диска", + "programme": "Програма", + "discAndDisplay": "Диск и дисплей" }, "import": { - "importTimeCodes": "Импортиране на времеви кодове...", "plainTextDotDotDot": "Обикновен текст...", "titleImportPlainText": "Импортиране на обикновен текст", "csvXlsxCustomColumnsDotDotDot": "CSV/XLSX с персонализирани колони...", @@ -1236,13 +1346,26 @@ "formattingDotDotDot": "Форматиране...", "imageBasedSubtitleForEditDotDotDot": "Субтитри, базирани на изображения, за редактиране...", "imageBasedSubtitleForOcrDotDotDot": "Субтитри, базирани на изображения, за OCR...", + "dvdSubtitlesDotDotDot": "Субтитри от DVD (IFO/VOB)...", + "titleImportDvd": "Импортиране на субтитри от DVD", + "dvdIfoFile": "IFO файл", + "dvdVobFiles": "VOB файлове", + "dvdVideoStandard": "Видео стандарт", + "dvdStartRipping": "Започване на извличането", + "dvdRippingAborted": "Извличането е прекратено", + "dvdOpenIfoFile": "Отваряне на DVD IFO файл", + "dvdAddVobFiles": "Добавяне на VOB файлове", + "dvdIfoFiles": "DVD IFO файлове", + "dvdVobFileType": "DVD VOB файлове", + "dvdDropHint": "Отворете IFO файл (VIDEO_TS\\VTS_01_0.IFO) или добавете VOB файлове - или ги пуснете тук", + "dvdNotAnIfoFileX": "{0} не е DVD IFO файл", + "dvdMenuIfoNoTitleSetsX": "Не са намерени набори от заглавия (VTS_xx_0.IFO) до {0}", + "dvdEncryptedXOfY": "{0} от {1} пакета със субтитри все още са CSS криптирани - тези VOB файлове са копирани без декриптиране, така че някои изображения на субтитрите ще бъдат повредени.\n\nЗа чист резултат първо декриптирайте DVD диска с програма за извличане на DVD.\n\nПродължаване въпреки това?", "splitTextAt": "Разделяне на текста на", - "blankLines": "Празни редове", "oneLineIsOneSubtitle": "Един ред е един субтитър", "twoLinesAreOneSubtitle": "Два реда са един субтитър", "importFilesDotDotDot": "Импортиране на файлове...", "multipleFiles": "Импортиране от множество текстови файлове (един файл е един субтитър)", - "maxLineLength": "Максимална дължина на реда", "mergeShortLines": "Обединяване на къси редове", "fixed": "Фиксирано", "numberOfSubtitlesX": "Брой субтитри: {0}", @@ -1255,13 +1378,17 @@ "forcedAlignerProgress": "Подравняване... прозорец {0} от {1}, {2} от {3} реда", "forcedAlignerSetupTitle": "Подравняване на времевите кодове чрез принудително подравняване", "forcedAlignerSetupIntro": "Принудителното подравняване съпоставя текста на субтитрите, който вече имате, със звука, без първо да го транскрибира. Дългите видеоклипове се подравняват на части, така че всяка дължина е подходяща.", + "forcedAlignerEndsFromSpeech": "Задаване на крайните времена от изолираната реч (бавно)", + "forcedAlignerEndsFromSpeechHint": "Принудителното подравняване намира къде започва даден ред, но не и къде свършва, затова крайните времена обикновено идват от времето за четене. Когато това е включено, първо музиката и звуковите ефекти се премахват от звука и всеки ред свършва там, където речта му заглъхне. Отнема приблизително колкото продължителността на самото видео с GPU - и многократно повече без такъв.", + "forcedAlignerIsolatingSpeech": "Изолиране на речта... {0}", + "forcedAlignerIsolatingSpeechFailed": "Речта не можа да бъде изолирана - крайните времена бяха зададени от времето за четене.", "forcedAlignerModel": "Модел на подравняване", - "forcedAlignerDownloadEngine": "Изтегляне / актуализиране на двигателя..." + "forcedAlignerDownloadEngine": "Изтегляне / актуализиране на двигателя...", + "forcedAlignerEstimatedXOfY": "{0} от {1} реда не можаха да бъдат подравнени и бяха поставени според времето за четене - времевите им кодове са само приблизителни. Сценарият вероятно е по-дълъг от изговореното във видеото." }, "export": { "exportImagesProfiles": "Експорт на профили с изображения", "leftRightMargin": "Ляв/десен марж", - "topBottomMargin": "Горен/долен марж", "lineSpacingPercent": "Разстояние между редовете %", "paddingLeftRight": "Разминаване отляво/отдясно", "paddingTopBottom": "Подплата отгоре/отдолу", @@ -1283,14 +1410,22 @@ "exportDvbTeletextSubtitleType": "Тип субтитри", "exportDvbTeletextSubtitleTypeNormal": "Нормално", "exportDvbTeletextSubtitleTypeHearingImpaired": "Увреден слух", + "exportPacCodePage": "Изберете PAC кодова страница", + "exportPacSecondaryCodePage": "Вторична кодова страница", "customTextFormatsDotDotDot": "_Персонализирани текстови формати...", "plainTextDotDotDot": "_Обикновен текст...", + "dialogueListDotDotDot": "Монтажен лист с диалози в Excel (.xlsx)...", + "titleExportDialogueList": "Експортиране на монтажен лист с диалози в Excel", + "dialogueListLineBreaksInCell": "Запазване на преходите на нов ред в клетката (изключено: редовете се съединяват с \" | \")", + "dialogueListHeaderRow": "Заглавен ред", + "dialogueListFramesFormat": "чч:мм:сс:фф (кадри)", + "dialogueListNoColumns": "Изберете поне една колона.", + "dialogueListEnd": "Край", "customTextFormats": "Персонализирани текстови формати", "titleExportCustomFormat": "Експортиране на персонализиран текстов формат", "editCustomFormat": "Редактиране на персонализиран текстов формат", "newCustomFormat": "Нов персонализиран текстов формат", "deleteSelectedCustomTextFormatX": "Да се изтрие ли избраният персонализиран текстов формат \"{0}\"?", - "timeCodeFormat": "Формат на времевия код", "newLineFormat": "Нов формат на реда", "pleaseEnterNameForTheCustomFormat": "Моля, въведете име за персонализирания формат", "titleExportPlainText": "Експортиране на обикновен текст", @@ -1302,12 +1437,25 @@ "addLineBetweenSubtitles": "Добавяне на ред между субтитрите", "titleExportDCinemaInteropPng": "D-Cinema интероперация/png", "titleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", + "titleExportDCinemaSmpte2014Mxf": "D-Cinema SMPTE 2014 (MXF)", + "titleExportDCinemaSmpte2014PngMxf": "D-Cinema SMPTE 2014/png (MXF)", "imageBasedSubtitleSaved": "Запазени са субтитри, базирани на изображение", "fullFrameImage": "Изображение в цял кадър", "fullFrameImageHint": "Направете всяко изображение с размера на видеокадра, като поставите субтитрите на негово място", + "stereo3D": "3D", + "stereo3DHint": "За 3D видео: субтитрите се изчертават веднъж във всяка половина на кадъра (за всяко око)", + "halfSideBySide": "Половин един до друг", + "halfTopBottom": "Половин горе/долу", + "depth3D": "Дълбочина", + "depth3DHint": "Колко изпъкват субтитрите от екрана - положителна стойност ги приближава, отрицателна ги отдалечава", + "plane3D": "3D-равнина", + "plane3DHint": "Задава на всеки субтитър дълбочината, която 3D Blu-ray съхранява за него, от 3D-Plane (.ofs) файл, създаден с BD3D2MK3D или OFSExtractor. Дълбочината се използва там, където 3D-Plane няма стойност", + "openPlane3DTitle": "Отваряне на 3D-Plane файл", + "unableToLoadPlane3DX": "Не може да се зареди 3D-Plane: {0}", + "plane3DXDepthYToZ": "{0} (дълбочина от {1} до {2})", + "plane3DXNoDepth": "{0} (без стойности за дълбочина)", "textEffect": "Текстов ефект", "textEffectSettingsTitle": "Настройки на текстовите ефекти", - "textEffectPreset": "Предварително зададено", "textEffectStrength": "Сила", "textEffectLetterSpacing": "Разстояние между буквите", "textEffectArcBend": "Крива", @@ -1380,7 +1528,6 @@ "gapMaximum": "Интервал - максимум: {0:#,##0} мс", "gapAverage": "Интервал - средно: {0:#,##0.##} мс", "gapExceedingMinimum": "Разлика - под минимума ({0:#,##0} мс): {1} ({2:0.00}%)", - "subtitles": "Субтитри", "words": "Думи", "totalDurationShort": "Обща продължителност", "timingAndPacing": "Време и темпо", @@ -1409,7 +1556,21 @@ "restoreAutoBackupFile": "Възстановяване на файл с автоматично архивиране", "restoreXFromY": "Искате ли да възстановите \"{0}\" от {1}?", "deleteAllSubtitleBackups": "Искате ли да изтриете всички резервни копия на субтитрите?", - "deleteAll": "Изтрий всички" + "deleteAll": "Изтрий всички", + "settingsBackupInfo": "Settings.json се архивира при стартиране на Subtitle Edit, най-много веднъж на {0} ден(а) и само ако настройките са променени. Пазят се най-новите {1} архива.", + "settingsBackupInfoEveryStart": "Settings.json се архивира при всяко стартиране на Subtitle Edit, ако настройките са променени. Пазят се най-новите {0} архива.", + "settingsBackupOff": "Автоматичното архивиране на настройките е изключено (Опции → Настройки → Файл).", + "lastSettingsBackupX": "Последен архив: {0}", + "noSettingsBackupsYet": "Все още няма архиви на настройките", + "openSettingsBackupFolder": "Отваряне на папката с архиви на настройките", + "backUpSettingsNow": "Архивиране сега", + "settingsBackedUp": "Текущите настройки бяха архивирани.", + "restoreSettings": "Възстановяване на настройките", + "restoreSettingsFromX": "Искате ли да замените текущите си настройки с архива от {0}?\n\nПърво ще бъде направен архив на текущите ви настройки. Някои промени влизат в сила едва след рестартиране на Subtitle Edit.", + "settingsRestored": "Настройките бяха възстановени. Моля, рестартирайте Subtitle Edit, за да влязат в сила всички промени.", + "settingsRestoreFailed": "Настройките не можаха да бъдат възстановени: {0}", + "settingsBackupNotValid": "архивът не е валиден файл с настройки, затова текущите ви настройки бяха запазени", + "deleteAllSettingsBackups": "Искате ли да изтриете всички архивни файлове с настройки?" }, "propertiesDCinema": { "title": "D-Cinema SMPTE Properties", @@ -1423,22 +1584,20 @@ "editRate": "Редактиране на цената", "timeCodeRate": "Скорост на времевия код", "startTime": "Начално време", - "font": "Шрифт", "fontId": "Идентификатор на шрифта", "fontUri": "URI на шрифта", - "generate": "Генериране", - "fontColor": "Цвят на шрифта", - "chooseColor": "Изберете цвят", "fontEffect": "Ефект на шрифта", "effectColor": "Цвят на ефекта", - "fontSize": "Размер на шрифта", - "topBottomMargin": "Горен/долен марж", "fadeUpTime": "Време за затихване", "fadeDownTime": "Време за затихване", - "frames": "Рамки", "zPosition": "Z-позиция", "zPositionHelp": "Положителните числа отдалечават текста, отрицателните числа го приближават. Ако z-позицията е нула, тогава е 2D", - "export": "Експорт..." + "fontFile": "Файл с шрифт", + "chooseFontFile": "Изберете файл с шрифт", + "fontFileMissing": "Изберете файла с шрифт TrueType/OpenType, който да се вгради в MXF файла на записа.", + "reelDuration": "Продължителност на ролката", + "reelDurationHint": "ЧЧ:ММ:СС:КК - дължината на картината, която трябва да има всеки ресурс от DCP ролката. Празно = до последния субтитър.", + "reelDurationInvalid": "Продължителността на ролката трябва да е празна или във формат ЧЧ:ММ:СС:КК." }, "webVtt": { "setStylesForSelectedLinesTitle": "Задаване на WebVTT стилове за избрани линии", @@ -1476,11 +1635,60 @@ "ignoreFormatting": "Игнориране на форматирането", "ignoreFormattingHint": "Редове, които се различават само по таговете за форматиране, като или {\\an8}, не се броят за различни", "showOnlyDifferencesInText": "Само разлики в текста", + "ignoreNumbering": "Игнориране на номерацията", + "ignoreNumberingHint": "Редовете, които се различават само по номера си, не се смятат за различни", + "ignoreTimeDifferenceMs": "Толеранс на времето (ms)", + "ignoreTimeDifferenceMsHint": "Началните и крайните времена, които се различават с толкова милисекунди или по-малко, не се смятат за различни", + "compareDifferences": "Разлики", + "compareTextDifferences": "Разлики в текста", + "compareCurrent": "Текущ", + "compareReference": "Референтен", + "compareEditable": "Редактируем", + "compareEditableHint": "Промените, направени тук, се връщат в субтитрите, когато щракнете върху Приложи", + "compareReadOnly": "Само за четене", + "compareTakeFromReference": "Вземане на текста и времената от референтния", + "compareInsertFromReference": "Вмъкване на този ред в текущите субтитри", + "compareDeleteFromCurrent": "Изтриване на този ред от текущите субтитри", + "compareTakeText": "Вземане на текста", + "compareTakeTiming": "Вземане на времената", + "compareEditLine": "Редактиране на реда", + "compareEditHint": "Ctrl+Enter за запазване, Esc за отказ", + "compareEdited": "Редактиран", + "compareOnePendingChange": "1 чакаща промяна", + "compareXPendingChanges": "{0} чакащи промени", + "compareDiscardXChanges": "Отхвърляне на {0} промяна(и), направени в Сравнение?", + "compareXChangesApplied": "Сравнение: приложени {0} промяна(и)", + "compareChangeTextX": "#{0} текст от референтния", + "compareChangeTimingX": "#{0} времена от референтния", + "compareChangeTextAndTimingX": "#{0} текст и времена от референтния", + "compareChangeEditedX": "#{0} редактиран", + "compareChangeInsertedX": "#{0} вмъкнат", + "compareChangeDeletedX": "#{0} изтрит", + "compareSyncPoint": "Точка на синхронизация", + "compareSyncPointHint": "Точка на синхронизация - тези два реда винаги се показват като двойка, а редовете над и под тях се подравняват самостоятелно", + "compareSyncPickCurrent": "Точка на синхронизация: използване на този текущ ред", + "compareSyncPickReference": "Точка на синхронизация: използване на този референтен ред", + "compareSyncRemove": "Премахване на точката на синхронизация", + "compareClearXSyncPoints": "Изчистване на точките на синхронизация ({0})", + "compareSyncCurrentPickedX": "Текущ #{0} е избран за точка на синхронизация - изберете съответния референтен ред и щракнете върху Синхронизиране", + "compareSyncReferencePickedX": "Референтен #{0} е избран за точка на синхронизация - изберете съответния текущ ред и щракнете върху Синхронизиране", + "compareSyncWithCurrentX": "Синхронизиране с текущ #{0}", + "compareSyncWithReferenceX": "Синхронизиране с референтен #{0}", + "compareSyncApply": "Синхронизиране", + "compareSyncPointSetXY": "Точката на синхронизация е зададена: текущ #{0} и референтен #{1} вече се показват като двойка", + "compareSyncAlreadyPairedXY": "Текущ #{0} и референтен #{1} вече се показват като двойка със същото начало - няма какво да се синхронизира", + "compareSyncPointShiftedXYZW": "Точката на синхронизация е зададена: текущи #{0}-#{1} са изместени с {2}, за да започват с референтен #{3}", + "compareChangeSyncShiftXYZ": "#{0}-#{1} изместени с {2} (точка на синхронизация)", + "compareTimingDeltaHint": "Колко по-късно (+) или по-рано (−) започва и свършва референтният ред спрямо текущия", "loadXFromFile": "Зареждане на \"{0}\" от файл", + "compareLoadSavedFile": "Зареждане на запазения файл", "saveCompareHtmlTitle": "Запазване на HTML файл за сравнение", "pickMatroskaTrackX": "Избери песен на Matroska - {0}", "pickTransportStreamTrackX": "Изберете траектория на транспортния поток - {0}", + "dvdVobFilesMissingX": "Липсват VOB файлове (намерени {0}%)", "pickMp4TrackX": "Избор на MP4 запис - {0}", + "pickMxfTrackX": "Избор на MXF писта - {0}", + "pickMpegTrackX": "Избор на MPEG писта - {0}", "rosettaProperties": "Свойства на IMSC с времеви текст Rosetta", "rosettaFontSize": "Размер на шрифта (височина на реда)", "propertyTimeBase": "Времева база", @@ -1489,8 +1697,6 @@ "propertyDefaultStyle": "Стил по подразбиране", "propertyDefaultRegion": "Регион по подразбиране", "propertyStyleAttributeName": "Име на атрибута на стила", - "propertyTimeCodeFormat": "Формат на времевия код", - "propertyFileExtension": "Разширение на файла", "propertyTopOrigin": "Най-често срещан произход", "propertyTopExtent": "Най-висока степен", "propertyBottomOrigin": "Долен произход", @@ -1522,7 +1728,6 @@ "bookmarked": "Запазено в отметки", "forced": "Принуден", "bookmarkContains": "Отметката съдържа", - "blankLines": "Празни редове", "hearingImpaired": "Увреден слух (УСН)", "hearingImpairedBrackets": "Скоби [...]", "hearingImpairedCurlyBrackets": "Къдрави скоби {...}", @@ -1532,8 +1737,8 @@ "hearingImpairedUppercaseLine": "Главна буква", "hearingImpairedLineContains": "Редът съдържа", "hearingImpairedMusicSymbols": "Само музикални символи", - "hearingImpairedInterjections": "Междуметия", "hearingImpairedSettingsHint": "Подробностите са от Инструменти > Премахване на текст за хора с увреден слух", + "selection": "Избрано", "selectionNew": "Нова селекция", "selectionAdd": "Добавяне към селекцията", "selectionSubtract": "Изваждане от селекцията", @@ -1555,8 +1760,8 @@ "deleteRuleConfirm": "Да се изтрие ли правилото \"{0}\"?", "findWhat": "Намери какво", "descriptionOptional": "Описание (по избор)", - "invalidRegularExpressionX": "Невалиден регулярен израз: {0}", - "regularExpressionTooSlowX": "Регулярният израз се отказа след {0} секунди - правилото е пропуснато, опитайте по-прост модел" + "regularExpressionTooSlowX": "Регулярният израз се отказа след {0} секунди - правилото е пропуснато, опитайте по-прост модел", + "moveToCategory": "Преместване в категория" }, "find": { "searchTextWatermark": "Търсене на текст...", @@ -1569,7 +1774,8 @@ "replaceIn": "Замяна/търсене в", "replaceInTextAndOriginal": "Текст и оригинален текст", "replaceInTextOnly": "Само текст", - "replaceInOriginalOnly": "Само оригинален текст" + "replaceInOriginalOnly": "Само оригинален текст", + "replacedOneOccurrence": "Заменено е едно срещане" }, "regularExpressionContextMenu": { "wordBoundary": "Граница на думата (\\b)", @@ -1592,11 +1798,11 @@ "pleaseSelectExactlyOneSubtitle": "Моля, изберете точно един субтитър." }, "sourceView": { - "discardChangesTitle": "Да се отхвърлят ли промените?", "discardChanges": "Изходният текст е променен.\nДа се отхвърлят промените?", "xLinesYSubtitles": "{0} реда, {1} субтитри", "xLinesYSubtitlesZErrors": "{0} реда, {1} субтитри, {2} грешка(и)", "couldNotParseAsX": "Не можа да се анализира като {0}", + "readAsXUseAsY": "Източникът не можа да бъде прочетен като {1}, но можа да бъде прочетен като {0}.\nДа се използват ли редовете и да продължи запазването като {1}?", "selectedXCharactersYLines": "Избрани: {0} знака в {1} ред(а)", "replacedXOccurrences": "Заменени {0} съвпадения", "invalidRegularExpression": "Невалиден регулярен израз", @@ -1625,14 +1831,28 @@ "categoryGrammar": "Граматика", "categoryPunctuation": "Пунктуация", "categoryCasing": "Корпус", - "categoryOther": "Друго", "xNeedACloserLook": "{0} предложения се нуждаят от по-внимателно разглеждане", - "lineX": "Ред {0}", "linesXToY": "Редове {0}-{1}", "largeChangeWarning": "Голяма промяна - изглежда като пренаписване, прегледайте внимателно", "mismatchWarning": "Не прилича на оригинала - може да принадлежи към друга линия", "engineError": "AI енджина не можа да бъде достигнат: {0}", - "playCurrentLineHint": "Възпроизвеждане на избрания ред във видеоплейъра и пауза в края му (също така щракнете двукратно върху ред)" + "playCurrentLineHint": "Възпроизвеждане на избрания ред във видеоплейъра и пауза в края му (също така щракнете двукратно върху ред)", + "editAfterHint": "Щракнете върху текста на избрания ред, за да редактирате поправката, преди да я приложите (Enter запазва, Escape отказва)", + "template": "Шаблон", + "templatePlaceholder": "Изберете шаблон, който да замени подканата", + "templateStandard": "Стандартна коректура", + "templateSpeechToText": "Почистване след реч в текст", + "templateMachineTranslation": "Поправка на машинен превод", + "templateSdh": "SDH / за хора с увреден слух", + "referenceContext": "Референтен контекст", + "referenceContextInfo": "По избор. Имена, персонажи, речник, синопсис или бележки за стила - моделът приема това за меродавно за имена и термини. Изпраща се с всяка партида.", + "referenceContextPlaceholder": "Имена: Кайто, леля Мей, д-р Холис\nТермини: Шинкансен, уорп ядро\nСинопсис: Кайто пътува до Токио, за да намери изчезналия си баща.", + "generateContext": "Генериране с ИИ", + "generateContextHint": "Избраният ИИ двигател прочита субтитрите и изготвя чернова с имена, термини и синопсис - проверете резултата преди употреба", + "generatingContextPartXOfY": "Четене на част {0} от {1}...", + "generatingContextSynopsis": "Писане на синопсис...", + "replaceContextQuestion": "Да се замени ли текущият референтен контекст?", + "noContextGenerated": "ИИ двигателят не върна използваема референтна информация." }, "aiAssistant": { "title": "Асистент с изкуствен интелект", @@ -1678,6 +1898,7 @@ "removeLineBreaksPixelWidth": "Разделяне на субтитри, които се побират на един ред (ширина на пиксели)", "fixUppercaseIInsideLowercaseWords": "Коригирано е главното \"i\" в думи с малки букви (грешка в OCR)", "fixDoubleApostrophes": "Коригиране на двойните апострофи ('') в единични кавички (\")", + "fixMisreadQuotes": "Поправяне на апострофи, разпознати погрешно като двойни кавички (OCR, английски)", "addPeriods": "Добавяне на точка след редовете, където следващият ред започва с главна буква", "startWithUppercaseLetterAfterParagraph": "Започвайте с главна буква след параграфа", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Започва се с главна буква след точка в параграфа", @@ -1698,8 +1919,9 @@ "addMissingQuotesExample": "\"Как си? -> \"Как си?\"", "removedEmptyLinesUnusedLineBreaksExample": "Има само един валиден ред!
-> Има само един валиден ред!", "fixCommasExample": ",, -> ,", - "removeLineBreaksExample": "Фу бар! -> Фу бар!", + "removeLineBreaksExample": "Фу
бар! -> Фу бар!", "fixDoubleApostrophesExample": "''Има двойни единични кавички'' -> \"Има единични двойни кавички\"", + "fixMisreadQuotesExample": "„Здравей“ -> „Здравей“", "addPeriodsExample": "Здравей, свят -> Здравей, свят.", "startWithUppercaseLetterAfterParagraphExample": "p1: Фубар! || p2: Фубар! -> p1: Фубар! || p2: Фубар!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Здравей! Как си? -> Здравей! Как си?", @@ -1789,6 +2011,8 @@ "fixMinDurationMs": "Фиксирано минимално Траене (мс)", "doNotGoPastShotChange": "Не пропущай при смяната на кадър", "fixMaxDurationMs": "Фиксирано максимално Траене (мс)", + "fixMinDurationFrames": "Поправяне на минималното траене (кадри)", + "fixMaxDurationFrames": "Поправяне на максималното траене (кадри)", "minimumDurationMilliseconds": "Минимална продължителност (милисекунди):", "maximumDurationMilliseconds": "Максимална продължителност (милисекунди):", "maxDurationShouldBeHigherThanMinDuration": "Максималното Траене трябва да е по-голямо от минималното", @@ -1810,12 +2034,10 @@ "title": "Разкрасяване на времевите кодове", "snapToFrames": "Прилепване към рамки", "minDuration": "Мин. Траене (мс)", - "original": "Оригинал", "beautified": "Разкрасен", "subtitlesCount": "Субтитри", "changedCount": "Променено", "shotChangesCount": "Промени в кадъра", - "changeXOfY": "Промяна {0} от {1}", "noChanges": "Няма промени — всеки сигнал вече е на прав път", "snappedToShotChange": "щракна за промяна на кадъра", "snappedToFrame": "закачен към кадъра", @@ -1823,8 +2045,6 @@ "minDurationEnforced": "минимална продължителност, наложена", "maxDurationEnforced": "максималната продължителност е наложена", "noReasonNote": "прецизирано от правилата на профила", - "previousChange": "Предишна промяна", - "nextChange": "Следваща промяна", "editProfile": "Редактиране на профил...", "batchSnapToShotChanges": "Прикачване на сигнали към промени в удара (ако е възможно)", "batchFrameRateFromVideo": "Използвайте честота на кадрите от видеофайл със същото име като файла със субтитри", @@ -1838,13 +2058,74 @@ "timeCodesExtractFailed": "Не можах да прочета времевите кодове от видеото", "timeCodesHint": "Прихваща сигнали към реалното време на кадрите на видеото, вместо да приема постоянна честота на кадрите. Изисква еднократно прочитане на цялото видео; резултатът се кешира." }, + "improveTimeCodes": { + "title": "Подобряване на времевите кодове (принудително подравняване)", + "aligner": "Подравняващ модел", + "alignerHint": "Моделът, който търси всеки ред в звука. Най-добрите избори за езика на субтитрите са изброени първи.", + "maxShift": "Макс. изместване (секунди)", + "maxShiftHint": "Колко може да са разсинхронизирани субтитрите. Ред, чието начало би се преместило повече, се оставя както е и се маркира. Независимо от стойността, отделен ред, който иска да се премести с повече от половин секунда повече от редовете около него, не се премества сляпо: той следва съседите си, ако всички те са се преместили, а иначе се предлага без отметка, за да го проверите.", + "adjustStartTimes": "Коригиране на началните времена", + "adjustEndTimes": "Коригиране на крайните времена", + "isolateSpeech": "Първо изолиране на речта (бавно)", + "isolateSpeechHint": "Премахва музиката и звуковите ефекти преди подравняването, така че подравняващият модел чува само диалога. Помага при редове, изговорени върху силна музика или екшън, но отнема приблизително колкото продължителността на самия звук с GPU - и многократно повече без такъв.", + "isolatingSpeech": "Изолиране на речта... (това отнема известно време)", + "isolateSpeechFailed": "Речта не можа да бъде изолирана - подравнено е спрямо оригиналния звук.", + "checkWithSpeechToText": "Проверка с реч в текст", + "checkWithSpeechToTextHint": "Транскрибира и звука и проверява всяко преместване спрямо мястото, където думите действително са чути. Големите премествания, потвърдени от речта, се отмятат автоматично, а преместванията встрани от мястото, където се чува редът, остават без отметка, за да ги проверите. Показва също колко от всеки ред е чуто - малкият дял означава, че текстът се различава от казаното. Субтитри, които са разсинхронизирани повече от макс. изместване - постоянно отместване, отклонение поради несъответствие в честотата на кадрите или скокове при изрязани сцени - първо се синхронизират по чутите думи. Използва Crisp ASR Parakeet, което отнема няколко минути за пълнометражен филм с GPU.", + "checkWithSpeechToTextNotAvailableX": "Проверката с реч в текст не е налична за {0}", + "transcribingToCheck": "Транскрибиране за проверка на подравняването...", + "speechToTextFailed": "Реч в текст не успя - времевите кодове не бяха проверени спрямо нея.", + "speechToTextX": "Реч в текст: {0}", + "speechToTextConfirmedXDisputedY": "Реч: {0} потвърдени, {1} оспорени", + "hardlyHeardX": "Реч в текст чу само {0}% от думите в субтитрите. На езика, който се говори, ли са субтитрите? Подравняващият модел не може да позиционира превод.", + "heard": "Чуто", + "heardHint": "Колко от реда е чул модулът реч в текст. Малкият дял означава, че текстът се различава от казаното - там подравняващият модел най-вероятно греши.", + "statusConfirmedBySpeech": "Потвърдено от речта", + "statusDisputedBySpeech": "Чуто там, където беше", + "statusMovedWithSync": "Преместено със синхронизацията", + "syncedFirstXY": "Първо синхронизирано: {0} s в началото, {1} s в края", + "showSpeechOnly": "Показване само на речта", + "showSpeechOnlyHint": "Изчертава подравнената форма на вълната от звука с премахнати музика и звукови ефекти; оригиналната форма на вълната остава непроменена за сравнение. Налично, след като речта е изолирана - тук или с \"Показване само на речта\" във формата на вълната на главния прозорец.", + "align": "Подравняване", + "aligned": "Подравнено", + "intro": "Изберете подравняващ модел и натиснете \"Подравняване\", за да бъде потърсен всеки ред в звука и времевите му кодове да бъдат прецизирани.", + "extractingAudio": "Извличане на звука...", + "aligningBatchXOfY": "Подравняване... партида {0} от {1}", + "extractAudioFailed": "Звукът не можа да бъде извлечен с ffmpeg.", + "modelWillBeDownloaded": "{0} ще бъде изтеглен", + "summaryXRetimedYKeptZSkipped": "Пренастроени: {0} · Запазени: {1} · Без реч: {2}", + "meanShiftX": "Средно изместване: {0} ms", + "toCheckX": "За проверка: {0}", + "largeMovesToCheckX": "{0} ред(а) биха се преместили много самостоятелно и са оставени без отметка - чуйте ги (F5 пуска подравнения ред, Shift+F5 оригинала) и отметнете правилните.", + "linesToCheckX": "{0} ред(а) са оставени без отметка за проверка - чуйте ги (F5 пуска подравнения ред, Shift+F5 оригинала) и отметнете правилните.", + "startShift": "Начало", + "endShift": "Край", + "statusRetimed": "Пренастроен", + "statusMovedWithNeighbours": "Преместен заедно със съседите си", + "statusLargeMoveUnconfirmed": "Голямо преместване - чуйте, отметнете за прилагане", + "statusUnchanged": "Вече е на мястото си", + "statusNoSpeech": "Без реч", + "statusShiftTooLarge": "Запазен - твърде голямо изместване", + "statusFailed": "Запазен - подравняването не успя", + "statusAdjustedByHand": "Коригиран ръчно", + "alignedWaveformHint": "Плъзнете ред, за да го преместите, или плъзнете краищата му, за да промените началото или края му.", + "undoAdjustment": "Отмяна на корекцията", + "playPause": "Пускане / пауза", + "playAligned": "Подравнено", + "playAlignedHint": "Пускане на избрания ред с подравнените му времеви кодове", + "applyHint": "Махнете отметката от ред, за да запазите оригиналните му времеви кодове. Щракнете двукратно върху ред, за да го пуснете. Редовете могат също да се преместват или преоразмеряват в подравнената форма на вълната." + }, "beautifyTimeCodesProfile": { "title": "Редактиране на профил за разкрасяване на времеви кодове", "loadPreset": "Зареждане на предварително зададена настройка", "presetDefault": "По подразбиране", "presetNetflix": "Netflix", "presetSdi": "SDI", - "general": "Общи", + "saveAsProfile": "Запазване като профил...", + "deleteProfile": "Изтриване на профила", + "profileName": "Име на профила", + "overwriteProfileX": "Профил с име \"{0}\" вече съществува. Да бъде ли презаписан?", + "deleteProfileX": "Изтриване на профил \"{0}\"?", "gap": "Интервал", "gapSuffix": "рамки (също така актуализира полетата с ненулева празнина по-долу)", "milliseconds": "мс", @@ -1875,6 +2156,10 @@ "bridgeGaps": { "bridgeGapsSmallerThan": "Пролуки между мостовете по-малки от (ms)", "minGap": "Минимална празнина (ms)", + "bridgeGapsSmallerThanFrames": "Запълване на интервали, по-малки от (кадри)", + "minGapFrames": "Минимален интервал (кадри)", + "calculateBridgeGapsSmallerThanDotDotDot": "Изчисляване на границата за запълване на интервали от честота на кадрите...", + "useXMsAsBridgeGapsSmallerThan": "Запълване на интервали, по-малки от \"{0}\" милисекунди?", "numberOfSmallGapsBridgedX": "Брой преодоляни малки пролуки: {0}", "percentFoPrevious": "Разлика спрямо предишния период (%)", "gapChange": "Промяна на разликата" @@ -1908,6 +2193,7 @@ "addColor": "Добавете цвят", "deleteLinesWithSpecificActorsOrStyles": "Изтриване на редове с актьори или стилове (разделете няколкото със запетая)", "useSourceStylesIfPossible": "Използвайте стилове на изходния код, ако е възможно", + "keepSourceEmbeddedFonts": "Запазване на вградените шрифтове от източника (footer)", "editStyles": "Редактиране на стилове", "editProperties": "Редактиране на свойства", "editAttachments": "Редактиране на прикачени файлове", @@ -1939,10 +2225,47 @@ "convertColorsToDialogReBreakLines": "Прекъсване на линиите", "snapTimeCodesToFramesInfo": "Закръглява всяко начално и крайно време до най-близкия кадър. Честотата на кадрите се чете от видеофайл със същото име като файла със субтитрите, освен ако не е избрана фиксирана честота на кадрите.", "addFolderDotDotDot": "Добавяне на папка...", + "addFolderRecursiveDotDotDot": "Добавяне на папка рекурсивно...", "selectFolderToConvert": "Изберете папка с файлове за конвертиране", "includeSubfolders": "Включване на подпапки при добавяне на папка", + "videoFilesWhenAddingFolder": "Видео файлове (mkv, mp4, ts...) при добавяне на папка", + "videoFilesAsk": "Питане", + "videoFilesInclude": "Добавяне на субтитровите им писти", + "videoFilesSkip": "Пропускане", + "folderContainsXVideoFiles": "Папката съдържа {0} видео файл(а) (mkv, mp4, ts...).\n\nДа се добавят ли и вградените им субтитрови писти, или само файловете със субтитри?", + "addVideoFiles": "Добавяне на видео файловете", + "skipVideoFiles": "Само файлове със субтитри", + "doNotAskAgainVideoFiles": "Без повторно питане (промяна в настройките на Пакетно конвертиране)", + "settingsSectionAddingFiles": "Добавяне на файлове", + "settingsSectionImageBasedSubtitles": "Субтитри, базирани на изображения (OCR)", "keepSourceFileTimestamp": "Запазване на датата/часа на изходния файл в изходните файлове", - "scanningFolderX": "Сканиране на {0}..." + "preventSleepWhileConverting": "Предотвратяване на заспиването на компютъра по време на конвертиране", + "scanningFolderX": "Сканиране на {0}...", + "transportStreamSettings": "Настройки на Transport Stream", + "transportStreamSettingsDotDotDot": "Настройки на Transport Stream...", + "transportStreamSettingsInfo": "Отнася се за субтитрови писти, извлечени от Transport Stream файлове (.ts/.m2ts). Позицията и размерът на видеото засягат само DVB писти с изображения, експортирани във формат, базиран на изображения.", + "transportStreamOverrideXPosition": "Замяна на оригиналната позиция X", + "transportStreamOverrideYPosition": "Замяна на оригиналната позиция Y", + "transportStreamOverrideVideoSize": "Замяна на оригиналния размер на видеото", + "transportStreamBottomMargin": "Долно поле", + "transportStreamFileNameEnding": "Окончание на името на файла", + "transportStreamFileNameEndingInfo": "Добавя се преди разширението за всяка извлечена писта. Оставете празно, за да се използва обичайната езикова наставка.", + "transportStreamOnlyTeletext": "Само телетекст", + "transportStreamGetSizeFromVideo": "Вземане на размера от видеото...", + "twoLetterLanguageCodeUppercase": "Двубуквен код на езика (главни букви)", + "threeLetterLanguageCodeUppercase": "Трибуквен код на езика (главни букви)", + "formatContainsDotDotDot": "Форматът съдържа...", + "extensionIsDotDotDot": "Разширението е...", + "statusIsError": "Статусът е грешка", + "forcedTracksOnly": "Само принудителни писти", + "xConvertedYFailedInZ": "{0:#,###,##0} конвертирани, {1:#,###,##0} неуспешни за {2}", + "xNotProcessed": "{0:#,###,##0} необработени", + "removeUnicodeControlCharactersTitle": "Премахване на Unicode контролни знаци", + "removeUnicodeControlCharactersInfo": "Премахва невидимите Unicode знаци за управление на посоката (LRM, RLM, LRE, RLE, PDF, LRO и RLO) от текста и заменя неразделящите интервали с обикновени интервали.", + "savePresetDotDotDot": "Запазване на предварителна настройка...", + "deletePreset": "Изтриване на предварителната настройка", + "presetName": "Име на предварителната настройка", + "deletePresetX": "Изтриване на предварителна настройка \"{0}\"?" }, "changeCasing": { "fixNames": "Коригиране на имена", @@ -1979,7 +2302,6 @@ "loadFromCurrentText": "Зареждане от текущия (текст)", "loadFromCurrentTranslation": "Зареждане от текущия (транслация)", "loadFromFile": "Зареждане от файл...", - "outputFormat": "Изходен формат", "outputFormatSubRip": "SubRip (.srt)", "outputFormatAssa": "Advanced Sub Station Alpha (.ass)", "style1": "Стил 1", @@ -1990,7 +2312,8 @@ "title": "Разделяне на субтитри", "numberOfEqualParts": "Брой равни части", "saveSplitParts": "_Запазване на разделени части", - "xPartsSavedInFormatYToFolder": "{0} части са запазени във формат {1} в папка:" + "xPartsSavedInFormatYToFolder": "{0} части са запазени във формат {1} в папка:", + "splitBy": "Разделяне по" }, "splitBreakLongLines": { "title": "Разделяне/ребалансиране на дълги редове", @@ -2027,10 +2350,13 @@ }, "mergeLinesWithSameText": { "maxMsBetweenLines": "Максимален брой милисекунди между редовете", - "includeIncrementingLines": "Включване на редове с нарастващ текст" + "maxFramesBetweenLines": "Макс. кадри между редовете", + "includeIncrementingLines": "Включване на редове с нарастващ текст", + "includeRollUpCaptions": "Включване на roll-up (превъртащи се) надписи" }, "mergeLinesWithSameTimeCodes": { "maxMsDifference": "Максимална разлика (милисекунди)", + "maxFramesDifference": "Макс. разлика (кадри)", "makeDialog": "Създавайте диалози" }, "netflixCheckAndFix": { @@ -2044,13 +2370,9 @@ "ellipsesNotThreeDots": "Използвай многоточия (не три точки)", "onlyAllowedGlyphs": "Само разрешени глифове", "italics": "Курсив", - "maxCharsSec": "Максимален брой символи/сек", "maxDuration": "Максимално Траене", - "maxLineLength": "Максимална дължина на реда", "minDuration": "Мин. Траене", - "maxNumberOfLines": "Максимален брой редове", "oneToTenSpellOut": "Изписване от едно до десет", - "shotChanges": "Промени в кадъра", "startNumberSpellOut": "Изписване на стартов номер", "textforHiUseBrackets": "Текст за HI, използвайте скоби", "twoFrameGrap": "Два кадъра разстояние", @@ -2099,7 +2421,6 @@ "adjustBrightnessDotDotDot": "Регулиране на яркостта...", "adjustAlphaDotDotDot": "Коригиране на алфа...", "cropImages": "Изрязване на изображения", - "importTimeCodes": "Импортиране на времеви кодове...", "setText": "Задай текст", "screenWidth": "Ширина на екрана", "screenHeight": "Височина на екрана", @@ -2107,7 +2428,6 @@ "resetToDefaults": "Възстановяване на фабричните настройки", "alphaAdjustmentInfo": "Алфа корекция: Добавяне/изваждане от алфа канала.\nПрегледът се актуализира автоматично и се показва с кариран фон, за да се визуализира прозрачността.", "adjustBrightness": "Регулиране на яркостта", - "brightness": "Яркост", "contrast": "Контраст", "gamma": "Гама", "brightnessAdjustmentInfo": "Регулирайте плъзгачите, за да промените яркостта, контраста и гамата.\nПрегледът се актуализира автоматично и показва първия избран субтитър.", @@ -2130,15 +2450,31 @@ "letterboxCustom": "Височина на лентата по избор", "barHeightPx": "Височина на лентата (px)", "titleSafePercent": "Безопасно за заглавие (%)", + "moveCaptions": "Преместване на надписите", + "moveCaptionsDotDotDot": "Преместване на надписите...", + "moveCaptionsTo": "Преместване на надписите", + "moveCaptionsIntoBars": "В черните ленти (извън картината)", + "moveCaptionsIntoPicture": "Вътре в картината (извън лентите)", + "moveCaptionsOffset": "Отместване от ръба (px)", + "letterboxBarHeightXPxYOfZCaptionsWillMove": "Височина на лентата: {0} px - {1} от {2} надписа ще бъдат преместени", + "removeFadeInOut": "Премахване на избледняване/появяване", + "removeFadeInOutXLinesRemoved": "{0} реда с избледняване са обединени с редовете, към които принадлежат", + "removeFadeInOutNothingFound": "Не са намерени редове с избледняване/появяване", "positionSummary": "{0}×{1} - {2} субтитри - височина на лентата: {3} пиксела", "xInActivePicture": "{0} на снимката", "xInTopBar": "{0} в горната лента", "xInBottomBar": "{0} в долната лента", "noImageSubtitlesLoaded": "Няма заредени субтитри за изображението", - "imageBasedFormatNotSupported": "Форматът на субтитрите, базиран на изображение, не е намерен/не се поддържа." + "imageBasedFormatNotSupported": "Форматът на субтитрите, базиран на изображение, не е намерен/не се поддържа.", + "frameRateDeclaredInFile": "Честота на кадрите, обявена в Blu-ray sup файла", + "frameRateDetectedFromTimeCodesX": "Честота на кадрите, открита от времевите кодове на Blu-ray sup (файлът обявява {0})", + "frameRateFromVideo": "Честота на кадрите на видеото", + "frameRateCurrent": "Текуща честота на кадрите", + "frameRateSetManually": "Ръчно зададена честота на кадрите", + "frameRateUsageInfo": "Експортите в Blu-ray sup, BDN XML, DOST и FCP се записват с тази честота на кадрите. Тя не променя никакви времена - за това използвайте \"Промяна на честотата на кадрите\".", + "useVideoFrameRateXInsteadOfY": "Честотата на кадрите на видеото е {0}, но за субтитрите е зададена {1}.\n\nДа се използва ли честотата на кадрите на видеото ({0})?" }, "removeTextForHearingImpaired": { - "interjections": "Междуметия", "skipIfStartWith": "Пропусни, ако започва с", "removeTextBetween": "Премахване на текст между", "brackets": "Скоби", @@ -2164,7 +2500,6 @@ "pickFontNameTitle": "Изберете име на шрифт", "pickFontNameInstalledFonts": "Инсталирани шрифтове", "pickFontNameCollectedFonts": "Събрани шрифтове", - "colorPickerTitle": "Изберете цвят", "filterLayersTitle": "Филтриране на слоеве за показване", "filterLayersHideFromWaveform": "Скриване от формата на вълната/спектрограмата", "filterLayersHideFromSubtitleGrid": "Скриване от мрежата със субтитри", @@ -2178,6 +2513,7 @@ "spellCheck": "Правопис", "getDictionariesTitle": "Проверка на правописа - изтегли речници", "getDictionaryInstructions": "Изберете език и кликнете върху \"Изтегляне\"", + "uninstallDictionaryX": "Да се деинсталира речникът „{0}“?", "addNameToUserDictionary": "Добавяне на име към потребителския речник", "addNameToNamesList": "Добавяне на име към списъка с имена", "addNamesToNamesList": "Добавяне на имена към списъка с имена", @@ -2205,7 +2541,6 @@ "pickLiveSpellCheckDictionary": "Изберете речник за проверка на правописа на живо", "undoX": "Отмяна: {0}", "playCurrentLineHint": "Възпроизвеждане на текущия ред във видеоплейъра и пауза в края му", - "editWholeText": "Редактиране на целия текст", "editWholeTextTitle": "Проверка на правописа - Редактиране на целия текст", "continueFromCurrentLine": "Да продължи ли проверката на правописа от текущия ред?\n\nДа = продължаване от текущия ред\nНе = започване от началото", "continueFromTop": "Проверката на правописа достигна края на субтитрите.\n\nДа продължи ли от начало?", @@ -2215,7 +2550,21 @@ "correctWordsX": "Правилни думи: {0}", "namesX": "Имена: {0}", "addedToDictionaryX": "Добавено към речника: {0}", - "doNotShowThisAgain": "Не показвай това съобщение отново" + "doNotShowThisAgain": "Не показвай това съобщение отново", + "editUseAlwaysList": "Редактиране на списъка \"Използвай винаги\"...", + "useAlwaysListTitle": "Проверка на правописа - списък \"Използвай винаги\"", + "useAlwaysListHeader": "Списък \"Използвай винаги\"", + "useAlwaysListDescription": "Думи, които проверката на правописа заменя автоматично, запазени чрез \"Промени всички\" и \"Използвай винаги\". Двойката се използва само когато думата е изписана грешно.", + "useAlwaysWord": "Грешно изписана дума", + "xPairs": "{0:#,##0} двойки", + "xUnusedPairs": "{0:#,##0} никога неизползвани", + "useAlwaysUnusedHint": "Никога не е използвана - тази дума е изписана правилно (или е име или потребителска дума), затова проверката на правописа никога не я отбелязва", + "removeUnused": "Премахване на неизползваните", + "useAlwaysEmpty": "Все още няма двойки \"Използвай винаги\" за този език", + "useAlwaysEmptyHint": "Двойките се добавят, когато щракнете върху „Промени всички“ или „Използвай винаги“ в проверката на правописа.", + "useAlwaysNoMatch": "Няма двойки, отговарящи на търсенето", + "useAlwaysSameWord": "Заместителят трябва да се различава от думата.", + "useAlwaysRememberOff": "\"Запомняне на списъка 'Използвай винаги'\" е изключено в Настройки, затова проверката на правописа не използва и не запазва този списък." }, "video": { "burnIn": { @@ -2226,8 +2575,7 @@ "bitRate": "Битова скорост", "totalBitRateX": "Обща битрейт: {0}", "sampleRate": "Честота на дискретизация", - "audio": "Аудио", - "preset": "Предварително зададено", + "tune": "Настройка", "pixelFormat": "Пикселов формат", "crf": "Хронична ренална хипертония (ХРХ)", "useSource": "Използвай източника", @@ -2239,7 +2587,12 @@ "outputProperties": "Изходни свойства...", "videoFileSize": "Размер на видеофайла", "oneBox": "Една кутия", - "logoInfo": "Изберете PNG изображение и го плъзнете, за да го позиционирате върху видеото." + "logoInfo": "Изберете PNG изображение и го плъзнете, за да го позиционирате върху видеото.", + "noSubtitlesGenerateAnyway": "Няма редове със субтитри за вграждане.\n\nДа се генерира ли видеото без субтитри?", + "noSubtitlesInXItemsGenerateAnyway": "{0} елемент(а) от пакета нямат редове със субтитри за вграждане.\n\nДа се генерират ли тези видеоклипове без субтитри?", + "subtitleStyle": "Стил на субтитрите", + "videoOutput": "Видео изход", + "targetSize": "Целеви размер" }, "videoTransparent": { "title": "Генериране на прозрачно видео със субтитри" @@ -2250,6 +2603,21 @@ "translateToEnglish": "Превод на английски", "transcribing": "Транскрибиране...", "transcribingXOfY": "Транскрибиране на {0} от {1}...", + "linesTranscribedXOfYFailedZ": "Транскрибирани са {0} от {1} реда - {2} са неуспешни или без реч.\n\nНеуспешните редове запазват текущия си текст. Да се приложат ли транскрибираните редове, или да се опита отново с неуспешните (можете първо да смените двигателя или настройките)?", + "linesTranscribedXOfYCancelled": "Транскрибирането беше отменено след {0} от {1} реда.\n\nДа се приложат ли транскрибираните редове? Останалите редове запазват текущия си текст.", + "noLinesTranscribed": "Нито един от {0} реда не можа да бъде транскрибиран.\nМоля, проверете дневника на инструментите за подробности.", + "applyTranscribedLines": "Прилагане на транскрибираните", + "retryFailedLines": "Нов опит с неуспешните", + "isolateSpeech": "Изолиране на речта (бавно)", + "isolateSpeechHint": "Премахва музиката и звуковите ефекти преди транскрибирането. Дава по-малко пропуснати редове и по-добро тайминг при звук със силна музика, но отнема приблизително колкото продължителността на самия звук с GPU - и многократно повече без такъв.", + "isolatingSpeech": "Изолиране на речта...", + "isolateSpeechFailed": "Речта не можа да бъде изолирана - транскрибира се оригиналният звук.", + "detectSpeakers": "Разпознаване на говорещите", + "detectSpeakersHint": "Започва всеки ред с говорещия, например \"(speaker 0)\", чрез диаризацията Sortformer на NVIDIA (до 8 говорещи). Работи най-добре с бекендове, които разделят редовете при смяна на говорещия, като Parakeet и Cohere.", + "detectSpeakersNeedsNewerCrispAsr": "\"Разпознаване на говорещите\" изисква Crisp ASR v{0} или по-нова версия, но е инсталирана v{1}.\n\nАктуализирайте Crisp ASR (бутона със зъбно колело до двигателя) или изключете \"Разпознаване на говорещите\".", + "xNeedsNewerCrispAsr": "{0} изисква Crisp ASR v{1} или по-нова версия, но е инсталирана v{2}.\n\nДа се изтегли и инсталира ли актуализацията сега?", + "vad": "VAD", + "vadHint": "Откриване на гласова активност: транскрибира се само речта, разделена там, където говорещият прави пауза.\nАвтоматично: Silero и само за двигателите, които се нуждаят от него (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: винаги включени, за всеки Crisp ASR двигател. FireRedVAD е най-точен, Whisper-VAD дава най-малко и най-чисти разрези, но е най-бавен.\nIndex-Echo винаги използва Silero. --vad, --vad-model или --chunk-seconds в разширените настройки имат предимство.", "inputLanguage": "Език за въвеждане", "advancedWhisperSettings": "Разширени настройки на \"Шепот\"", "downloadingSpeechToTextEngine": "Изтегляне на преобразуване реч в текст", @@ -2286,11 +2654,8 @@ "qualityReportLinesChecked": "Линиите са проверени", "qualityReportIssuesFound": "Открити проблеми", "qualityReportLinesRemoved": "Премахнати линии", - "qualityReportTooShort": "Твърде кратко", "qualityReportTooShortHint": "По-кратко от минималното време за показване или скорост на четене над максималната", - "qualityReportTooLong": "Твърде дълго", "qualityReportTooLongHint": "По-дълго от максималното време за показване или много малко думи за дълго време (често халюцинация)", - "qualityReportOverlap": "Припокриване", "qualityReportOverlapHint": "Завършва след началото на следващия ред", "qualityReportNonSpeech": "Неречеви", "qualityReportNonSpeechHint": "Само описание на звук или музика, като например „[Музика]“", @@ -2299,7 +2664,6 @@ "qualityReportRemoved": "Премахнато", "qualityReportAll": "Всички", "qualityReportIssue": "Проблем", - "qualityReportDetail": "Детайл", "qualityReportTip": "Редовете са изброени с номерата си в новото подзаглавие. Използвайте „Поправяне на често срещани грешки“ или настройките за последваща обработка, за да коригирате по-автоматично, или опитайте друг модел/енджин, ако са засегнати много редове.", "qualityReportDoNotShowAgain": "Не показвай този отчет отново", "engineSettings": "Настройки на системата за преобразуване на реч в текст", @@ -2319,7 +2683,6 @@ "testVoice": "Тест на гласа", "addAudioToVideoFile": "Добавяне на аудио към видео файл", "engineAndVoice": "Енджин & глас", - "output": "Изход", "xLinesFromY": "{0} реда от {1}", "xLines": "{0} реда", "xVoices": "{0} гласа", @@ -2333,14 +2696,32 @@ "videoEncodingSettings": "TTS - Настройки за видео кодиране", "elevenLabsSettings": "TTS - настройки на ElevenLabs", "elevenLabsSettingsResetHint": "Нулиране на настройките на ElevenLabs до стойностите по подразбиране", + "provider": "Доставчик", + "openAiCompatibleSettings": "TTS - настройки за съвместими с OpenAI", + "customServerUrl": "URL адрес на потребителски сървър", + "customServerUrlHint": "Пълен адрес за реч на съвместим с OpenAI сървър, използван, когато доставчикът е \"Custom\", напр. http://localhost:8880/v1/audio/speech", + "customModels": "Потребителски модели", + "customModelsHint": "Разделени със запетая имена на модели, предлагани, когато доставчикът е \"Custom\"", + "customVoices": "Потребителски гласове", + "customVoicesHint": "Разделени със запетая имена на гласове, използвани от доставчика \"Custom\" и от модели на OpenRouter, които не публикуват списък с гласове", + "instructions": "Инструкции", + "instructionsHint": "Незадължителен стил на говорене, напр. \"Говори със спокоен, топъл глас\". Изпраща се само към модели, които го поддържат (не tts-1/tts-1-hd)", + "openAiSpeedHint": "Скорост на речта от 0.25 до 4.0 (1.0 е нормална). Не всеки модел я поддържа", + "outputFormatHint": "Аудио формат, изискван от сървъра. \"Auto\" иска MP3 и превключва на PCM за модели, които връщат само PCM (напр. Gemini TTS)", "regenerateAudio": "Регенериране на аудио", "autoContinuePlaying": "Автоматично продължаване на играта", - "playLine": "Линия за игра", "fitDurationToGeneratedAudio": "Напасване на продължителността към генерираното аудио", "resetTiming": "Нулиране на времето", "addingAudioToVideoFileDotDotDot": "Добавяне на аудио към видеофайл...", "preparingMergeDotDotDot": "Подготовка на сливане...", "importVoiceDotDotDot": "Импортиране на глас...", + "renameVoiceDotDotDot": "Преименуване на гласа...", + "renameVoiceTitle": "Преименуване на гласа", + "voiceXCouldNotBeRenamedX": "Гласът „{0}“ не можа да бъде преименуван: {1}", + "deleteVoiceDotDotDot": "Изтриване на гласа...", + "deleteVoiceTitle": "Изтриване на гласа", + "deleteVoiceXQuestion": "Изтриване на гласа '{0}'?\n\nРеферентният запис и файловете му се премахват от диска.", + "voiceXCouldNotBeDeletedX": "Гласът „{0}“ не можа да бъде изтрит: {1}", "voiceImportSuccessTitle": "Гласът е импортиран", "voiceXImported": "Гласът \"{0}\" е импортиран успешно", "voiceXCouldNotBeImported": "Гласът „{0}“ не можа да бъде импортиран - вижте лога за подробности", @@ -2350,13 +2731,54 @@ "dropAudioFileHereToImportVoice": "Пуснете аудио файл тук, за да импортирате глас", "dropAudioFileHereHint": ".wav или .mp3", "voiceCloneTranscriptTitle": "Въведете препис на аудиото (необходим за клониране на глас)", + "voiceManagerTitle": "TTS - Управление на гласове", + "voiceManagerDotDotDot": "Управление на гласове...", + "voiceManagerMenuItem": "Управление на TTS гласове...", + "speakFromCurrentLineTitle": "Четене от текущия ред", + "speakFromCurrentLineDotDotDot": "Четене от текущия ред...", + "speakFromCurrentLineHint": "Чете редовете на глас един след друг, започвайки от текущия ред. Натиснете Escape или щракнете върху друг ред, за да спрете.", + "stopSpeaking": "Спиране на четенето", + "speakingLineX": "Четене на ред {0}... (Escape за спиране)", + "playWithSpeechTitle": "Пускане с реч", + "playWithSpeechDotDotDot": "Пускане с реч...", + "playWithSpeechHint": "Пуска видеото и изговаря всеки ред, когато видеото стигне до него. Паузирайте и превъртайте както обикновено; натиснете Escape, за да спрете.", + "lowerVideoVolumeWhileSpeaking": "Намаляване на звука на видеото по време на речта", + "pauseVideoWhenSpeechRunsLate": "Пауза на видеото, когато речта навлезе в следващия ред", + "waitingForSpeechLineX": "Генериране на реч за ред {0}... (Escape за спиране)", + "voiceKindClone": "Клониран глас", + "voiceKindPreset": "Вграден", + "voiceKindModel": "Гласов модел", + "voiceKindOnline": "Онлайн", + "transcript": "Транскрипция", + "transcriptRequiredHint": "Задължително - двигателят чете тази транскрипция на записа (ref-text) при клониране", + "transcriptOptionalHint": "По избор - точната транскрипция на записа подобрява клонирането", + "saveTranscript": "Запазване на транскрипцията", + "searchVoices": "Търсене на гласове", + "loadingVoicesDotDotDot": "Зареждане на гласове...", + "noVoicesForEngine": "Няма гласове - импортирайте запис или изтеглете гласов пакет", + "noVoicesMatchFilter": "Няма гласове, отговарящи на търсенето", + "copyVoiceTo": "Копиране на гласа в", + "copyVoiceToDotDotDot": "Копиране на гласа в двигател...", + "copyingVoiceXToYDotDotDot": "Копиране на гласа '{0}' в {1}...", + "voiceXCopiedToY": "Гласът „{0}“ е копиран в {1}", + "voiceXCouldNotBeCopiedToY": "Гласът '{0}' не можа да бъде копиран в {1} - вижте дневника за подробности", + "voiceXAlreadyExistsInYContinue": "Глас с име '{0}' вече съществува в {1}.\n\nКопиране въпреки това?", + "openVoicesFolder": "Отваряне на папката с гласове", + "downloadVoicePacksDotDotDot": "Изтегляне на гласови пакети...", + "downloadVoicePacksTitle": "TTS - Изтегляне на гласови пакети", + "voicePackIntro": "Гласовите пакети са набори от кратки, чисти записи с транскрипции, готови за клониране. Всеки пакет се импортира в избрания двигател (вече наличните гласове се пропускат) и включва ATTRIBUTION.txt с лиценза и източниците си.", + "voicePackDetailsXVoicesYSizeZLicense": "{0} гласа · {1} · {2}", + "installToEngine": "Инсталиране в двигател", + "downloadAndInstall": "Изтегляне и инсталиране", + "selectAtLeastOneVoicePack": "Изберете поне един гласов пакет", + "installingXDotDotDot": "Инсталиране на {0}...", + "xVoicesInstalledYSkipped": "Инсталирани гласове: {0} ({1} вече налични)", "useSpeechToTextDotDotDot": "Използване на преобразуване на реч в текст...", "autoCastMenuItem": "Намери гласове във видео и клонирай...", "autoCastSpeakersTitle": "Гласове, открити във видеото", "autoCastSpeakersSubtitle": "Дайте име на всеки говорител - името става актьорът в субтитрите и името на клонирания глас. Дайте едно и също име на двама говорители, за да ги обедините в един глас.", "autoCastFoundXSpeakersInYLines": "{0} високоговорители в {1} реда", "autoCastLines": "Редове", - "autoCastAudio": "Аудио", "autoCastSays": "Казва", "autoCastNeedsVideo": "За да се намерят гласовете, е необходимо отворено видео за слушане.", "autoCastNoSpeakersFound": "Не бяха открити говорещи. Транскрипцията трябва да дойде от система за преобразуване на реч в текст, която разграничава говорещите един от друг, като например Crisp ASR MOSS Diarize.", @@ -2368,7 +2790,7 @@ "cloneVoicePerLinePreparing": "Вземи гласа за всеки ред от видеото...", "cloneVoicePerLineNeedsVideo": "Клонирането на гласа на всеки ред изисква видеото, към което принадлежи субтитърът. Отворете видеото и опитайте отново.", "cloneVoicePerLineNoClips": "Не можа да се вземе аудио от видеото, така че няма от какво да се клонира. Проверете дали видеото има аудио запис.", - "cloneVoicePerLineNeedsOriginalSubtitleX": "{0} може да клонира ред само когато знае какво се казва във видеото на този ред, което произлиза от субтитрите на оригиналния език. Не се зареждат оригинални субтитри, така че всеки ред ще бъде произнесен от първия импортиран глас, вместо от гласа във видеото.\n\nОтвори оригиналните субтитри (Файл > Отваряне на оригинала...) до превода, след което генерирайте отново.", + "cloneVoicePerLineTranscribeClipsXYZ": "{0} може да клонира ред само когато знае какво се казва във видеото на този ред. Това не е известно за {1} от {2} реда - обикновено идва от субтитрите на оригиналния език (Файл > Отвори оригинала...).\n\nДа се транскрибират ли тези редове от видеото с реч в текст сега?\n\nДа: изберете двигателя и езика, който се говори във видеото, и референтните клипове се транскрибират преди генерирането на речта.\nНе: генериране въпреки това - тези редове се изговарят с обикновен глас вместо с гласа от видеото.", "voiceCloneConsentTitle": "Клониране на глас - преди да започнете", "voiceCloneConsentHeader": "На път сте да клонирате глас", "voiceCloneConsentIntro": "Клонирането копира гласа на истински човек. Това е свързано с правила на повечето места, а в ЕС с правни задължения, които са ваша отговорност, а не на редактора на субтитри. Моля, прочетете това веднъж.", @@ -2384,11 +2806,28 @@ "voiceCloneConsentDeclined": "Клонирането на глас не е налично, докато тези условия не бъдат приети.", "advancedTtsSettings": "Разширени настройки за синтез на говор", "advancedTtsAudioProcessing": "Обработка на аудио", - "advancedTtsOutput": "Изход", + "advancedTtsVoiceCloning": "Клониране на глас", + "cleanCloneReferences": "Почистване на референциите за клониране на глас (Sidon)", + "cleanCloneReferencesDescription": "Премахва музиката, шума и ехото от звука, от който се клонира глас: клипове, взети от видеото, и записи, импортирани в управлението на гласове. Използва модела за възстановяване на реч Sidon в audio.cpp (изтегляне от 940 MB). Клонираният глас вече не копира фона, но много тиха или застъпваща се реч може да прозвучи приглушено.", + "cleaningCloneReferencesDotDotDot": "Почистване на референциите за клониране на глас...", + "downloadSidonTitle": "Изтегляне на Sidon?", + "downloadSidonQuestionX": "Почистването на референциите за клониране на глас изисква модела за възстановяване на реч Sidon ({0}).\n\nДа се изтегли ли сега? Без него референциите се използват такива, каквито са.", "proAudioPostProcessing": "Професионална аудио последваща обработка", "proAudioPostProcessingDescription": "Прилага EQ топлина, noise gate, компресия, нормализиране на силата на звука (-16 LUFS) и постепенно увеличаване/угасване към всеки сегмент.", + "generatingSpeechSegmentXOfY": "Генериране на реч: сегмент {0} от {1}", + "adjustingSpeedSegmentXOfY": "Коригиране на скоростта: сегмент {0} от {1}", + "mergingAudioSegmentXOfY": "Обединяване на звука: сегмент {0} от {1}", + "postProcessingSegmentXOfY": "Последваща обработка: сегмент {0} от {1}", "audioDucking": "Заглушаване на звука", "audioDuckingDescription": "Намалява силата на звука на оригиналното видео и го смесва с TTS аудиото, така че оригиналният саундтрак все още е слабо чуваем.", + "removeOriginalSpeech": "Премахване на оригиналната реч (бавно)", + "removeOriginalSpeechDescription": "Запазва музиката и звуковите ефекти на оригиналното видео, но премахва речта му и смесва новата реч върху тях. Отнема приблизително колкото продължителността на самото видео с GPU и многократно повече без такъв. При включено приглушаване на звука силата му се прилага към музиката и ефектите. Прилага се само когато речта се добавя към видео файла.", + "removingOriginalSpeech": "Премахване на оригиналната реч...", + "removeOriginalSpeechFailed": "Оригиналната реч не можа да бъде премахната - речта беше добавена към видеото без това.", + "speechRemovalModelDescription": "Най-доброто качество запазва най-много от музиката и звуковите ефектите. Бързият е около три пъти по-бърз, като се губи малко повече от музиката.", + "speechRemovalBestQuality": "Най-добро качество (Mel-Band RoFormer)", + "speechRemovalFast": "Бърз (HTDemucs)", + "videoTruncatedWarning": "Картината в новия видео файл спира след {0}, но оригиналното видео е с продължителност {1} - картината ще замръзне, докато звукът продължава.\n\nФайлът беше запазен. Вижте error-log.txt в папката с данни на Subtitle Edit за изхода на ffmpeg.", "originalVolumePercent": "Първоначален обем %", "vadSilenceCompression": "VAD компресия на тишината", "vadSilenceCompressionDescription": "Скъсява паузите между думите преди промяна на темпото. Използва разпознаване на гласова активност, за да компресира само паузите в заглушаването, като същевременно запазва речта непокътната. Това е предпочитаната първа стъпка — намалява Траене без загуба на качество.", @@ -2471,12 +2910,11 @@ "timeCodeFormatColon": "Формат на времевия код:", "shotChangesList": "Списък с промени в кадри", "shotChangesClearQuestion": "Сигурни ли сте, че искате да изчистите всички промени в кадрите?", - "deleteSelectedShotChangeQuestion": "Сигурни ли сте, че искате да изтриете избраната промяна на кадъра?" + "deleteSelectedShotChangeQuestion": "Сигурни ли сте, че искате да изтриете избраната промяна на кадъра?", + "exportShotChanges": "Експортиране на промените в кадъра" }, "chapters": { - "title": "Глави", "chaptersDotDotDot": "Глави...", - "chapters": "Глави", "selectedChapter": "Избрана глава", "chapterTitle": "Заглавие на главата", "startTime": "Начално време", @@ -2497,11 +2935,9 @@ "adjustTimes": "Коригиране на времената", "shiftAllTimes": "Shift през цялото време", "shiftAllTimesDescription": "Премести всяка глава напред или назад със същата стойност.", - "scaleTimes": "Промяна на честотата на кадрите", "scaleTimesDescription": "Мащабирай времето на всяка глава от една кадрова честота към друга.", "fromFrameRate": "От", "toFrameRate": "До", - "apply": "Приложи", "writeToVideo": "Запис във видеото...", "writeToVideoTitle": "Запис глави към видео", "writeToVideoDescription": "Главите се записват в копие на видеофайла. Нищо не се прекодира, така че това е бързо и без загуби.", @@ -2511,7 +2947,6 @@ "writtenToX": "Глави, написани за {0}", "unableToWriteChapters": "Не е възможно да се запишат глави във видеофайла.", "chaptersSavedToX": "Главите са запазени в {0}", - "noVideoLoaded": "Няма заредено видео", "emptyListCallToAction": "Все още няма глави - добавете една на позицията на видеото или ги импортирайте от видео или файл." }, "videoOcr": { @@ -2533,13 +2968,10 @@ "startOcr": "Стартиране на OCR", "extractingFramesX": "Извличане на рамки с изображения... {0}%", "analyzingFramesXY": "Анализиране на кадрите... {0}/{1}", - "runningOcrXY": "Изпълнява се OCR... {0}/{1}", - "noLinesFoundTitle": "Няма намерени субтитри", "noLinesFoundMessage": "Не е намерен текст в областта за сканиране - опитайте да регулирате областта за сканиране, двигателя или минималната яркост.", + "ocrStoppedEarlyMessage": "OCR двигателят спря, преди да бъдат прочетени всички кадри, затова намерените досега редове са запазени, а останалите липсват.{0}{0}{1}", "linesFoundX": "Намерени са {0} реда", "refiningTimingXY": "Уточняване на времето... {0}/{1}", - "fixOcrErrors": "Коригиране на OCR грешки", - "dictionary": "Речник", "editLineX": "Редактиране на ред {0}", "downloadDictionaryHint": "Изтеглете речник за проверка на правописа...", "framesPerSecondHint": "Колко кадъра в секунда се сканират. 5 обхваща нормални субтитри; по-високата стойност улавя много къси редове и затяга групирането, но изисква повече време за OCR.", @@ -2556,7 +2988,57 @@ "testOcr": "Тест на текущия кадър", "testOcrRunning": "Тестване на OCR върху текущия кадър...", "testOcrResultX": "Резултат от теста: {0}", - "testOcrNoTextFound": "Тест: не е намерен текст в областта за сканиране" + "testOcrNoTextFound": "Тест: не е намерен текст в областта за сканиране", + "engineSettings": "Настройки на OCR двигателя", + "engineBuiltIn": "Вграден в операционната система", + "engineExternalServer": "Външен сървър (инсталиран и управляван извън Subtitle Edit)", + "engineCloudApi": "Облачен API (изисква API ключ)", + "engineNothingToInstall": "Няма нищо за инсталиране", + "engineModelsMissing": "Двигателят е инсталиран, липсват модели", + "website": "Уебсайт" + }, + "backgroundMusic": { + "title": "Генериране на фонова музика", + "generateBackgroundMusicDotDotDot": "Генериране на фонова музика...", + "tempoBpm": "Темпо (BPM)", + "generateSeconds": "Генериране (секунди)", + "seed": "Семе", + "randomSeed": "Случаен", + "outputLength": "Дължина на изхода", + "outputLengthVideoX": "{0} (дължина на видеото - музиката се повтаря безпроблемно)", + "musicVolumePercent": "Сила на звука на музиката (%)", + "removeExistingAudioTracks": "Премахване на съществуващите аудио писти", + "originalAudioVolumePercent": "Сила на оригиналния звук (%)", + "saveAudioDotDotDot": "Запазване на звука...", + "addToVideoDotDotDot": "Добавяне към видеото...", + "engineInfo": "ACE-Step 1.5 Turbo чрез audio.cpp (лиценз MIT) - работи локално", + "presetCooking": "Готвене / печене", + "presetTech": "Технологии / ревю на джаджи", + "presetForest": "Гора / природа", + "presetRelaxingPiano": "Релаксиращо пиано", + "presetLofiVlog": "Lo-fi влог", + "presetCorporate": "Корпоративно / обяснително", + "loadingModel": "Зареждане на модела...", + "composing": "Композиране...", + "generatingAudio": "Генериране на звука...", + "decodingAudio": "Декодиране на звука...", + "creatingLoop": "Създаване на безпроблемен цикъл...", + "resultLoopXYZ": "Цикъл: {0} при {1} BPM, съвпадение на прехода {2}%", + "resultNoLoopX": "Музиката е готова: {0}", + "addingMusicToVideo": "Добавяне на музика към видеото...", + "downloadModelTitle": "Изтегляне на музикалния модел?", + "downloadModelQuestionX": "Генерирането на музика изисква модела ACE-Step 1.5 ({0}).\n\nИзтегляне на модела?", + "downloadingModel": "Изтегляне на модела ACE-Step 1.5...", + "saveAudioTitle": "Запазване на фоновата музика", + "audioFileSavedX": "Аудио файлът е запазен: {0}", + "unableToGenerateMusic": "Не може да се генерира музика", + "unableToAddMusicToVideo": "Не може да се добави музика към видеото", + "outputLengthTextToSpeech": "Следва генерираната реч - музиката се повтаря безпроблемно и се приглушава, докато някой говори", + "addBackgroundMusic": "Добавяне на фонова музика", + "addBackgroundMusicHint": "Генериране на музика локално с ACE-Step 1.5 и смесването ѝ под речта - тя се приглушава, докато някой говори", + "music": "Музика", + "generatingBackgroundMusicDotDotDot": "Генериране на фонова музика...", + "mixingBackgroundMusicDotDotDot": "Смесване на фоновата музика..." }, "goToVideoPosition": "Отиди на позиция видео", "goToVideoPositionDotDotDot": "Отидете на позицията на видеото...", @@ -2567,11 +3049,57 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "Вторични субтитри за видеоплейъра, отвори...", "openSecondarySubtitleOnVideoPlayer": "Вторични субтитри (за видеоплейъра)", "removeSecondarySubtitleOnVideoPlayer": "Вторични субтитри за видеоплейъра, премахни", + "editSecondarySubtitleSettings": "Редактиране на настройките на вторите субтитри", + "editSecondarySubtitleSettingsDotDotDot": "Редактиране на настройките на вторите субтитри...", + "secondarySubtitleRememberSettings": "Запомняне на тези настройки", + "secondarySubtitleDoNotShowAgain": "Този диалог да не се показва повече", + "secondarySubtitleJustifyLines": "Двустранно подравняване на редовете", "openRecentVideo": "Отвори скорошно видео", "clearRecentVideos": "Изчистване на скорошни видеоклипове", "cutVideoTitle": "Изрежи видео", "cutVideoDotDotDot": "Изрязване на видео...", + "remuxVideoTitle": "Ремуксиране на видео", + "remuxVideoDotDotDot": "Ремуксиране на видео...", + "remuxVideoInputVideo": "Входно видео:", + "remuxVideoMultipleTracksRequiresMkv": "Няколко аудио или субтитрови писти изискват контейнера MKV. Изходният формат беше автоматично превключен на .mkv.", + "remuxVideoOutputFormat": "Изходен формат:", + "remuxVideoOutputFile": "Изходен файл:", + "remuxVideoRemuxing": "Ремуксиране на видеото и звука...", + "remuxVideoFinalizing": "Финализиране на изходния файл (преместване на индекса в началото)...", + "remuxVideoCompleted": "Видеото беше ремуксирано успешно.", + "remuxVideoFailed": "Ремуксирането на видеото не успя.", + "remuxVideoPleaseSelectBoth": "Моля, изберете и видео, и аудио файлове.", + "remuxVideoAssRequiresMkv": "ASS/SSA субтитрите изискват контейнера MKV, за да се запази цялото форматиране и стиловете.", + "remuxVideoSccRequiresMov": "Scenarist (.scc) субтитрите се вграждат като CEA-608 скрити надписи, които изискват контейнера MOV или MPG. Изходният формат беше автоматично превключен на .mov.", + "remuxVideoSccNotWithWebM": "Scenarist (.scc) скритите надписи изискват контейнера MOV, който не може да съдържа VP9/AV1 видеото на .webm файл. Премахнете .scc файла или го конвертирайте в друг формат на субтитри.", + "remuxVideoMpgMaxTwoCaptionTracks": "Един .mpg файл съдържа най-много две писти със скрити надписи (CC1 и CC3) - премахнете файлове със субтитри, така че да останат един или два.", + "remuxVideoMccRequiresMpg": "MacCaption (.mcc) субтитрите се вграждат като CEA-608/708 скрити надписи в MPEG-2 видеото, което изисква контейнера MPG. Изходният формат беше автоматично превключен на .mpg.", + "remuxVideoMpgReencodeVideoX": "Скритите надписи в .mpg файл изискват MPEG-2 видео, а видеото е {0}. Да се прекодира ли видеото в MPEG-2? Това отнема повече време и леко намалява качеството.", + "remuxVideoFileHasNoAudioX": "\"{0}\" няма аудио писта, затова не може да се използва като източник на звук.", + "remuxVideoAddingClosedCaptions": "Добавяне на скрити надписи...", + "remuxVideoSelectAudioTrack": "Избор на аудио писта", + "remuxVideoSelectAudioTrackFor": "Избор на аудио писта за {0}", + "remuxVideoSelectAudioTrackPrompt": "Файлът '{0}' съдържа {1} аудио писти. Моля, изберете аудио пистата за ремуксиране:", + "remuxVideoVideoFile": "видео", + "remuxVideoAudioFile": "аудио", + "remuxVideoAudioFiles": "Аудио файлове:", + "remuxVideoSubtitleFiles": "Файлове със субтитри (по избор, меки субтитри):", + "remuxVideoSelectAudioTrackDotDotDot": "Избор на аудио писта...", + "remuxVideoFilesX": "{0} файла", + "remuxVideoMixAudio": "Смесване на звука в една писта", + "remuxVideoVolumePercent": "Сила на звука %:", + "remuxVideoVolumeX": "Сила на звука {0}%", + "remuxVideoFastStart": "Оптимизиране за уеб стрийминг (преместване на индекса в началото - по-бавно)", "embedSubtitlesDotDotDot": "Добавяне/премахване на вградени субтитри...", + "syncAudioTrackDotDotDot": "Синхронизиране на аудио запис...", + "syncAudioTrackTitle": "Синхронизиране на аудио запис", + "syncAudioTrackAudioTrack": "Аудио запис", + "syncAudioTrackOffset": "Отместване (мс)", + "syncAudioTrackHint": "Положителните стойности пускат звука по-късно, отрицателните - по-рано. Запазеното видео е копие, в което е преместен само този запис - нищо не се прекодира.", + "syncAudioTrackPreviewNeedsMpv": "Прегледът на отместването на живо изисква видео плейъра mpv (Опции > Настройки > Видео) - запазеното видео получава отместването така или иначе.", + "syncAudioTrackNoAudio": "Видеото няма аудио запис.", + "syncAudioTrackSaveVideoDotDotDot": "Запазване на видеото...", + "syncAudioTrackSaving": "Запазване на видеото...", "generateTimeCodes": "Генериране на времеви кодове", "checkeredImage": "Карирано изображение", "promptForFfmpegParamsAndGenerate": "Напомни параметри за ffmpeg и генерирай", @@ -2580,11 +3108,41 @@ "cutVideoSplitSegments": "Запазване на сегменти поотделно", "cutVideoAlsoCutSubtitle": "Също така изрязани субтитри", "cutVideoSubtitleFileGeneratedX": "Генериран файл със субтитри: {0}", + "cutVideoTransition": "Преход между сегментите", + "cutVideoTransitionDurationSeconds": "Траене (секунди)", + "cutVideoFadeInSeconds": "Появяване от черно в началото (секунди)", + "cutVideoFadeOutSeconds": "Избледняване до черно в края (секунди)", + "cutVideoPreviewTransition": "Преглед на прехода", + "cutVideoPreviewTransitionTitle": "Преглед на прехода", + "cutVideoPreviewNeedsJoin": "Няма съединяване за преглед - добавете поне два сегмента за обединяване или сегмент за изрязване от средата.", + "cutVideoTransitionInfoX": "Всеки преход застъпва частите, които съединява, затова изходът става с {0} секунди по-къс за всяко съединяване. Изрязаните субтитри се пренастройват съответно.", + "cutVideoTransitionFade": "Избледняване", + "cutVideoTransitionFadeBlack": "Избледняване през черно", + "cutVideoTransitionFadeWhite": "Избледняване през бяло", + "cutVideoTransitionFadeGrays": "Избледняване през сиво", + "cutVideoTransitionDissolve": "Разтваряне", + "cutVideoTransitionWipeLeft": "Изтриване наляво", + "cutVideoTransitionWipeRight": "Изтриване надясно", + "cutVideoTransitionWipeUp": "Изтриване нагоре", + "cutVideoTransitionWipeDown": "Изтриване надолу", + "cutVideoTransitionSlideLeft": "Плъзгане наляво", + "cutVideoTransitionSlideRight": "Плъзгане надясно", + "cutVideoTransitionSlideUp": "Плъзгане нагоре", + "cutVideoTransitionSlideDown": "Плъзгане надолу", + "cutVideoTransitionSmoothLeft": "Плавно наляво", + "cutVideoTransitionSmoothRight": "Плавно надясно", + "cutVideoTransitionCircleOpen": "Отваряне в кръг", + "cutVideoTransitionCircleClose": "Затваряне в кръг", + "cutVideoTransitionRadial": "Радиален", + "cutVideoTransitionPixelize": "Пикселизиране", + "cutVideoTransitionBlur": "Размазване", + "cutVideoSegments": "Сегменти", + "cutVideoTransitions": "Преходи", + "cutVideoCutType": "Вид на изрязването", "importCurrentSubtitle": "Импортиране на текущи субтитри", "addRemoveEmbeddedSubtitlesTitle": "Добавяне/премахване на вградени субтитри", "addRemoveEmbeddedSubtitlesMp4Title": "Добавяне/премахване на вградени субтитри (MP4)", "addCurrentSubtitle": "Добавяне на текущия субтитър", - "embeddedTrackNoSubtitlesFoundTitle": "Няма намерени субтитри", "embeddedTrackNoSubtitlesFoundMessage": "Избраният файл със субтитри не съдържа никакви субтитри.", "embeddedTrackNoTracksTitle": "Няма добавени тракове", "embeddedTrackNoTracksMessage": "Добавете една или повече записи със субтитри или заредете видеоклип, който вече има вградени субтитри.", @@ -2595,6 +3153,8 @@ "embeddedTrackGeneratingVideoXY": "Генериране на видео... {0}% {1}", "embeddedTrackGeneratingVideo": "Генериране на видео...", "mp4FilesFilter": "MP4 файлове", + "embeddedTracksPickVideoHint": "Изберете видео файл или го пуснете тук, за да видите субтитровите му писти.", + "embeddedTracks": "Записи", "viewMatroskaTrackX": "Преглед на Matroska трак- {0}", "resolutionSeparator": "х", "openFromUrlTitle": "Отваряне на видео файл от URL адрес", @@ -2608,6 +3168,10 @@ "openFromUrlDownloadSubtitles": "Изтегляне на субтитри", "openFromUrlDownloadVideo": "Изтегляне на видео", "openFromUrlIncludeAutoGeneratedSubtitles": "Включи автоматично генерирани субтитри (на оригиналния език)", + "openFromUrlCookiesFromBrowser": "„Бисквитки“ от браузъра", + "openFromUrlCookiesFromBrowserHint": "Изпращане на „бисквитките“ на браузъра, в който сте влезли, до YouTube – необходими са, когато YouTube поиска потвърждение, че не сте бот.", + "openFromUrlBotCheckHint": "YouTube иска да потвърди, че не сте бот. Влезте в YouTube в браузъра си, след което изберете този браузър в „Бисквитки от браузър“ в прозореца „Отваряне на видеофайл от URL адрес“ и опитайте отново (Firefox работи най-добре). Изключването на VPN също може да помогне.", + "openFromUrlBotCheckHintWithBrowserX": "YouTube все още иска да потвърди, че не сте бот. Уверете се, че сте влезли в YouTube в {0}. Chrome и Edge на Windows често блокират четенето на „бисквитките“ си – първо затворете браузъра или опитайте Firefox.", "assaStyleWillBeUsed": "Ще се използва текущият стил ASSA\n\nПроменете формата на субтитрите, ако\nискате да зададете стилове тук", "pickOnlineSubtitleTitle": "Изберете субтитри за изтегляне", "outputSettingsTitle": "Настройки на изхода", @@ -2641,12 +3205,15 @@ "reEncodeGeneratingDone": "Генерирането е завършено", "reEncodeGeneratedFilesX": "Генерирани файлове ({0}):", "reEncodeFfmpegParameters": "параметри на ffmpeg", + "analyzingVideoX": "Анализиране на видеото... {0}% {1}", + "analyzingVideoXofY": "Анализиране на видео {0}/{1}... {2}% {3}", + "backgroundImageFileNotSelected": "Не е избран файл с фоново изображение", + "backgroundImageFileDoesNotExistX": "Файлът с фоново изображение не съществува: {0}", "voices": "Гласове", "presets": "Предварителни настройки", "talkerX": "Говорител {0}", "baseModel": "Базов модел", "turboModel": "Турбо модел", - "ttsUpdateX": "Актуализиране на {0}", "ttsEngineNotInstalled": "{0} не е инсталиран", "ttsEngineUpdateAvailable": "{0} - налична е актуализация", "ttsEngineTooOldUpdateRequired": "{0} е твърде старо - необходима е актуализация", @@ -2669,9 +3236,17 @@ "cloneVoiceTo": "Клониране на глас към", "cloneVoiceNameTitle": "Име на новия глас", "cloneVoiceExtractFailed": "Не можа да се извлече аудио за избрания ред.", + "lineXHasNoDuration": "Ред {0} няма траене (крайното време не е след началното), затова няма звук за извличане.", + "audioClipsSkippedLinesX": "Не можа да бъде извлечен звук за тези редове, затова те бяха пропуснати: {0}", "toggleShotChange": "Превключви за промяната на кадъра", "resetWaveformZoomAndSpeed": "Нулиране мащабирането и скоростта на вълновата форма", "showOriginalSubtitle": "Показвай оригиналните субтитри", + "timelineGroupTracksBy": "Групиране на субтитровите писти по", + "timelineShowThumbnails": "Показване на миниатюри от видеото", + "showSpeechOnly": "Показване само на речта (бавно генериране)", + "isolatingSpeechForWaveformX": "Изолиране на речта за формата на вълната... {0}", + "isolatingSpeechForWaveformFailed": "Речта за формата на вълната не можа да бъде изолирана - вижте дневника на инструментите", + "speechOnlyWaveformReady": "Формата на вълната вече показва само речта", "showOnlyWaveform": "Показване само на вълнова форма", "showOnlySpectrogram": "Показване само на спектрограма", "showWaveformAndSpectrogram": "Показване на форма на вълната и спектрограма", @@ -2704,6 +3279,7 @@ "adjustSelectedLinesAndForward": "Коригиране на избраните редове и пренасочване напред", "toFrameRate": "До честота на кадрите", "fromFrameRate": "От честотата на кадрите", + "videoXFrameRateY": "{0} - {1} кадъра в секунда", "adjustAllTimes": "Коригиране на всички часове (показване по-рано/по-късно)", "showEarlier": "Покажи по-рано", "showLater": "Покажи по-късно", @@ -2713,7 +3289,8 @@ "syncPoints": "Точки за синхронизация", "pointSync": "Синхронизиране на точки", "pointSyncViaOther": "Синхронизиране на точки чрез други субтитри", - "syncPointCandidateInfo": "Редовете, започващи след {0}+ секунди тишина, са маркирани - те често представляват надеждни точки на синхронизация", + "syncPointCandidateAfterInfo": "Редовете, последвани от {0}+ секунди тишина, са маркирани - те често са надеждни точки на синхронизация", + "gapAfter": "Интервал след", "adjustAllShortcuts": "Клавишни комбинации:\n\n• Shift+ Left/Right: Мести с 10 ms\n• Ctrl+ Left/Right: Мести с 100 ms\n• Alt+ Left/Right: Мести с 500 ms", "adjustAllShortcutsFrames": "Клавишни комбинации:\n\n• Shift+ Left/Right: Мести с 1 кадър\n• Ctrl+ Left/Right: Мести с 10 кадъра\n• Alt+ Left/Right: Мести с 1 секунда", "offsetInSeconds": "Отместване в секунди", @@ -2728,11 +3305,11 @@ "blockCopyGetFromClipboard": "Извличане на текст от клипборда (от преводач/AI)", "reCopyTextToClipboard": "Прекопиране на текст в клипборда (за преводач/AI)", "blockXOfY": "Блок {0} от {1}", - "noTextInClipboard": "Няма текст в клипборда", "textInClipboardIsSameAsSourceText": "Текстът в клипборда е същият като изходния текст, моля опитайте отново.", "lineMerge": "Сливане на редове", "delayInSecondsBetweenRequests": "Забавяне в секунди между заявките", "maxBytesPerRequest": "Максимален брой байтове на заявка", + "keepMusicLinesUntranslated": "Без превод на редове в музикални символи (♪ ... ♪)", "promptText": "Подканен текст", "resetPromptToDefault": "Възстановяване на подканата към по подразбиране", "translateEachLineSeparately": "Преведи всеки ред поотделно", @@ -2746,11 +3323,10 @@ "readyToTranslate": "Готов за превод", "translating": "Превежда се...", "translationComplete": "Преводът е завършен", + "translateInPlaceNoOriginal": "Превод на място (без създаване на оригинал)", "translationCancelled": "Преводът е анулиран", "swapLanguages": "Размяна на изходния и целевия език", "xIsAlreadyDownloadedReDownload": "{0} вече е изтеглен. Да се изтегли ли отново?", - "advancedDotDotDot": "Разширено...", - "advancedSettings": "Разширени настройки", "advancedSettingsSubtitle": "Опции за пакетно, контекстно и семплиращо обработване за усъвършенствания енджин llama.cpp", "context": "Context", "synopsis": "Синопсис", @@ -2762,7 +3338,6 @@ "keepLineBreaks": "Запазете разделянето на редовете", "samplingParameters": "Параметри за вземане на проби", "minusOneMeansDefault": "-1 = модел/сървър по подразбиране", - "temperature": "Температура", "topP": "Топ-п", "topK": "Топ-к", "repeatPenalty": "Повторно наказание", @@ -2774,8 +3349,8 @@ "useOnlyExtraServerParametersHint": "Стартирай llama-server с горните параметри, вместо със собствените настройки на Subtitle Edit - само моделът, хостът и портът са зададени", "serverRunningAtX": "Сървърът работи на адрес {0}", "customPromptHint": "Персонализирани инструкции ({0} = изходен език, {1} = целеви език); празно = вградена подкана", + "editTranslationHint": "Щракнете върху превода на избрания ред, за да го редактирате (Enter запазва, Escape отказва)", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp изисква изтегляне на двигателя llama-server и модела за превод. Да се изтегли ли сега?", - "llamaCppDownloadEnginePrompt": "llama.cpp изисква изтегляне на двигателя llama-server. Да се изтегли ли сега?", "llamaCppDownloadModelPrompt": "llama.cpp изисква избраният модел за превод да бъде изтеглен. Да се изтегли ли сега?" }, "options": { @@ -2837,16 +3412,15 @@ "gridAlternatingRowColor": "Редуващ се цвят на редовете (светла тема)", "gridAlternatingRowColorDark": "Редуващ се цвят на редовете (тъмна тема)", "uiFont": "Шрифт на потребителския интерфейс", - "theme": "Тема", "iconTheme": "Тема на иконите", "darkThemeForegroundColor": "Цвят на предния план в тъмна тема", "darkThemeBackgroundColor": "Цвят на фона за тъмна тема", "showGridLines": "Показване на редовете на мрежата", "showHorizontalLineAboveToolbar": "Показване на хоризонталния ред над лентата с инструменти", "bookmarkColor": "Цвят на отметката", + "spellCheckHighlightColor": "Цвят на маркирането при проверка на правописа", "singleLineMaxLength": "Максимална дължина на един ред", "optimalCharsPerSec": "Оптимални символи/сек", - "maxCharsPerSec": "Максимален брой символи/сек", "maxWordsPerMin": "Максимален брой думи/мин", "minDurationMs": "Мин. Траене (мс)", "maxDurationMs": "Максимална Траене (мс)", @@ -2857,7 +3431,6 @@ "minGapCalculateFrames": "Мин. разстояние между рамките", "minGapCalculateXFramesAtYGivesZMs": "{0} кадъра при честота на кадрите от {1} дават {2} милисекунди.", "minGapCalculateUseXAsNewGap": "Да се използват ли милисекунди „{0}“ като нов минимален интервал?", - "maxLines": "Максимален брой редове", "unbreakSubtitlesShortThan": "Субтитрите Unbreak са по-къси от", "autoBreakLineEndingEarly": "Автоматично прекъсване в края на изречението (.!?)", "autoBreakCommaBreakEarly": "Автоматично прекъсване по-рано за запетая", @@ -2868,13 +3441,21 @@ "useDoNotBreakAfterList": "Използвайте списък \"не се прекъсва след\"", "newEmptyDefaultMs": "Стандартно Траене на новите субтитри (мс)", "timeCodeUpDownStepMs": "Време за ускорение/скъсяване (ms)", + "moveSelectedLinesStepMs": "Стъпка на клавишната комбинация за преместване на избраните редове (ms)", + "moveStartEndStepMs": "Стъпка на клавишната комбинация за преместване на начало/край (ms)", + "moveLinesShortenNeighbor": "Преместване на редове: скъсяване на предишния/следващия ред вместо застъпване", "promptBeforeDelete": "Подкана преди изтриване", "rememberPositionAndSize": "Запомни позицията и размера на прозореца", + "titleBarFullFileName": "Показване на пълния път до файла в заглавната лента", + "showRecentFiles": "Показване на последните файлове (за повторно отваряне)", "openLastFileOnStart": "Отваряне на последния скорошен файл при стартиране", "autoSave": "Автоматично запазване (запазване на отворения файл по време на редактиране)", "autoBackupOn": "Автоматично архивиране", "autoBackupIntervalMinutes": "Интервал за автоматично архивиране (минути)", "autoBackupDeleteAfterDays": "Запазване на автоматично архивиране (дни)", + "settingsBackupOn": "Автоматично архивиране на настройките", + "settingsBackupIntervalDays": "Интервал на архивиране на настройките (дни, 0 = при всяко стартиране)", + "settingsBackupMaxCount": "Брой архиви на настройките за пазене", "autoConvertToUtf8": "Автоматично конвертиране на кодирането в UTF-8 при отваряне", "autoTrimWhiteSpace": "Автоматично изрязване на празните пространства", "removeBlankLinesWhenOpening": "Премахване на празни редове при отваряне на субтитри", @@ -2891,7 +3472,10 @@ "colorGapTooShort": "Оцвети, ако разстоянието е твърде късо", "errorBackgroundColor": "Цвят на фона на грешката", "waveformDrawGridLines": "Начертайте редове на мрежата", + "waveformUseSkiaRenderer": "Използване на експериментален бърз рендерер", "waveformCenterVideoPositionAlsoWhenPaused": "Центриране на видеото и по време на пауза", + "waveformSelectCurrentSubtitleWhilePaused": "Избиране на текущия субтитър и по време на пауза", + "waveformRememberZoom": "Запомняне на мащаба (хоризонтален и вертикален)", "waveformShowToolbar": "Показване на лентата с инструменти", "waveformShowToolbarEdit": "Редактиране на лентата с инструменти...", "waveformShowToolbarEditLabel": "Панел с инструменти за вълнова форма/спектрограма", @@ -2939,18 +3523,27 @@ "webVttUseXTimestampMap": "WebVTT: използване на X-TIMESTAMP-MAP (отместване на времеви кодове при зареждане)", "assaAutoSetResolution": "ASSA: задаване на резолюция (PlayResX/PlayResY) от видеото, когато то се отвори", "assaAutoSetResolutionPrompt": "ASSA: питай преди да промениш резолюцията, за да съответства на видеото (в противен случай се преразглежда автоматично)", - "showStopButton": "Показване на бутона за спиране", - "showFullscreenButton": "Бутон за показване на цял екран", + "videoControls": "Видео контроли", + "videoControlsEdit": "Редактиране на видео контролите...", + "videoControlsPositionText": "Текст за позиция / траене", + "videoControlsVideoFileName": "Име на видео файла", + "videoControlsPlayerName": "Име на видео плейъра", + "videoControlsPreviousSubtitle": "Предишен субтитър", + "videoControlsNextSubtitle": "Следващ субтитър", "fullscreenHideControls": "Скриване на контролите за видео на цял екран", + "showSecondarySubtitleDialog": "Показване на диалога за стил при отваряне на втори файл със субтитри", + "rememberSecondarySubtitleFile": "Запомняне на втория файл със субтитри", "autoOpenVideoFile": "Автоматично отваряне на видеофайл при отваряне на субтитри", "downloadMpv": "Изтегляне на mpv", "downloadVlc": "Изтегляне на VLC", "allowSingleLetterShortcutsInTextbox": "Позволяване на еднобуквени клавишни комбинации в текстово поле", + "allowTextNavigationShortcutsInTextbox": "Разрешаване на клавишни комбинации с клавишите за навигация в текста (Ctrl+Left/Right, Home/End) в текстовото поле", "spellCheckEnglishTreatInApostropheAsIng": "Проверка на правописа: Думите, завършващи на \"in\", да се третират като \"ing\" (само на английски език)", "goToLineNumberSetsVideoPosition": "Номерът на реда за преминаване също задава позицията на видеото", "adjustAllTimesRememberLineSelectionChoice": "Настрой всички времена, запомни избора на ред", "mergeKeepEndTime": "Обединяване на редове: запазване на крайния час (позволява се припокриване със следващия субтитър)", "mergeKeepEndTimeOnlyAssa": "Обединяване на редове: запазване на крайния час само за \"Разширена подстанция Алфа\"", + "mergeAutoBreak": "Обединяване на редове: автоматично пренасяне на обединения текст (изключено запазва собствените нови редове)", "filesAndLogs": "Файлове и лог файлове", "showErrorLogFile": "Показване на лог файла с грешки", "showToolsLogFile": "Показване на лог файла на инструментите", @@ -2959,6 +3552,7 @@ "showAssaLayer": "Показване на кутията със слой ASSA", "waveformCursorColor": "Цвят на курсора/главата на вълновата форма", "waveformShotChangeColor": "Промяна на цвета на кадъра на вълновата форма", + "waveformGridColor": "Цвят на мрежата на формата на вълната", "waveformParagraphLeftColor": "Цвят на лявата рамка на вълновата форма", "waveformParagraphRightColor": "Цвят на дясната рамка на вълновата форма", "waveformFancyHighColor": "Вълнова форма, фантастичен висок цвят", @@ -2986,10 +3580,16 @@ "resetSyntaxColoring": "Нулиране на оцветяването на синтаксиса", "resetWaveform": "Нулиране на вълновата форма", "resetRules": "Нулиране на правилата", - "useFrameMode": "Използване на режим на кадриране (чч.мм.сс.фф)", + "timeCodeMode": "Режим на времевия код", + "timeCodeModeTime": "Време (hh:mm:ss,zzz)", + "timeCodeModeFrames": "Кадри (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "Номера на кадри", + "frameModeSnapToVideoFrames": "Съхраняване на времената по видео кадри (не кадри в рамките на всяка секунда)", "textBoxLimitNewLines": "Ограничаване на броя редове в текстовото поле на субтитрите", + "textBoxAutoWrapWhileTyping": "Автоматично пренасяне при писане", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - Софтуерно рендиране (бавно)", + "mpvMetalRendering": "libmpv - Metal (експериментално, изисква рестартиране)", "mpvWidRendering": "libmpv - Native Window ID рендиране (по-бързо на Windows/Linux)", "waveFormsAndSpectrogramFoldersContainsX": "Папките \"Waveforms\" и \"spectrogram\" съдържат {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "Да се изтрият ли файловете \"Вълнови форми\" и \"Спектрограма\"?", @@ -3002,7 +3602,10 @@ "waveformExtractAudioSampleRate": "Извличане на аудио честота на дискретизация", "waveformExtractAudioSampleRateOriginal": "Оригинал (запази източника)", "waveformExtractAudioBitRate": "Извличане на аудио битрейт (MP3/M4A)", + "ffmpegUseCenterChannelOnly": "Използване само на предния централен канал за 5.1 звук (FFmpeg)", "vlcWidRendering": "libVLC - рендиране на Native Window ID", + "ffmpegSoftwareRendering": "FFmpeg", + "downloadFfmpegLibs": "Изтегляне на библиотеките на FFmpeg (за видео плейъра FFmpeg)", "subtitleGridEnterKeyAction": "Мрежа със субтитри Действие с клавиша Enter", "subtitleSingleClickAction": "Действие с едно щракване върху мрежата със субтитри", "subtitleDoubleClickAction": "Двойно щракване върху мрежата със субтитри", @@ -3030,6 +3633,7 @@ "subtitleGridFormattingShowFormatting": "Показване на форматирането", "subtitleGridFormattingShowTags": "Показване на етикети", "subtitleGridFormattingHideTags": "Скриване на етикети", + "subtitleGridFormattingShowFormattingKeepTags": "Показване на форматирането, запазване на невизуалните тагове", "waveformParagraphBackgroundColor": "Цвят на фона на субтитрите на вълновата форма", "waveformParagraphSelectedBackgroundColor": "Цвят на фона на избраните субтитри за вълнова форма", "waveformAllowOverlap": "Позволява се припокриване (при преместване/преоразмеряване)", @@ -3045,9 +3649,12 @@ "splitOddLinesAction": "Действие за разделяне на нечетни редове", "ocrUseWordSplitList": "OCR: използване на списък с разделяне на думи", "ocrGuessUnknownWords": "OCR: опитайте се да познаете непознати думи", + "spellCheckRememberUseAlwaysList": "Проверка на правописа: запомняне на списъка \"Използвай винаги\"", + "fixShortDisplayTimesAllowMoveStartTime": "Поправка на често срещани грешки: поправката на кратки времена за показване може да мести началното време", "speechToTextSelectedLinesPromptFirstTimeOnly": "Реч към текст: избрани редове, подкана за език/енджин само при първия път", "multipleReplaceShowDotDotDotButtons": "Множествена замяна: показване на бутони от контекстното меню", "gridFocusTextboxAfterInsertNew": "Мрежа: фокус върху текстовото поле след вмъкване на нов субтитър", + "undoRedoGoToChangedLine": "Отмяна/повтаряне: отиване на променения ред (и позицията във видеото)", "musicSymbol": "Музикален символ", "musicSymbolsToReplace": "Музикални символи за заместване (разделени със запетая)", "textToSpeechPromptMergeContinuationLines": "Текст към реч: подкана за сливане на редове за продължаване", @@ -3056,6 +3663,7 @@ "useFocusedButtonBackgroundColor": "Използвай цвета на фона на фокусирания бутон", "focusedButtonBackgroundColor": "Цвят на фона на фокусирания бутон", "forceCrLfOnSave": "Принудително CR+LF при запазване (файлове със субтитри)", + "linuxClipboardUseExternalTool": "Копиране на текст чрез xclip/wl-copy (запазва знаците с ударения)", "showFormatLimitWarning": "Предупреждение при запазване, когато редовете надвишават ограниченията на формата (напр. SCC 32 знака/ред)", "textBoxButtonShowAutoBreak": "Текстово поле: показване на бутон за автоматично прекъсване", "textBoxButtonShowUnbreak": "Текстово поле: показване на бутон за отмяна на разделянето", @@ -3067,12 +3675,18 @@ "waveformDoubleClickAction": "Двойно щракване върху вълнова форма (след еднократно щракване)", "allSettings": "Всички настройки", "uiScale": "Скала на потребителския интерфейс (%)", + "fontScale": "Мащаб на шрифта (%)", + "textSelectionOpacity": "Непрозрачност на маркирания текст (%)", "waveformToolbarItems": "Елементи на лентата с инструменти за вълнови форми", "matchIconColorToDarkTheme": "Съчетайте цвета на иконата с цвета на предния план на тъмната тема", "subtitlePreviewProperties": "Свойства за преглед на субтитрите", "usePositionFromSubtitleFile": "Използване на позиция от файла със субтитри (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "Маржът е част от областта на субтитрите", "textJustify": "Подравняване на редовете", + "deinterlace": "Деинтерлейсинг на видеото", + "deinterlaceOff": "Изключено", + "deinterlaceAuto": "Автоматично (само презредови кадри)", + "deinterlaceAlways": "Винаги", "pixelWidthInfo": "Зелени редове = макс ширина | Червена зона = текста превишава", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3081,7 +3695,16 @@ "waveformColorTheme": "Цветова тема:", "waveformSaveAsCustomTheme": "Запазване като персонализирана тема...", "waveformLoadThemeDotDotDot": "Зареждане на тема...", - "waveformExportThemeDotDotDot": "Експортиране на тема..." + "waveformExportThemeDotDotDot": "Експортиране на тема...", + "waveformSaveCustomThemeTitle": "Запазване на потребителска тема", + "waveformThemeFileType": "Тема за формата на вълната на Subtitle Edit", + "waveformThemeHighContrast": "Висок контраст", + "waveformThemeOceanBlue": "Океанско синьо", + "waveformThemeWarmSunset": "Топъл залез", + "waveformThemeForest": "Гора", + "waveformThemeMidnightPurple": "Среднощно лилаво", + "waveformThemeRetroAmber": "Ретро кехлибар", + "waveformThemeIce": "Лед" }, "shortcuts": { "searchShortcuts": "Търсене на преки пътища...", @@ -3092,11 +3715,33 @@ "categoryVideo": "Видео", "categorySync": "Синхронизация", "categoryAi": "Изкуствен интелект", + "categoryCustom": "Потребителски", + "editCustomShortcut": "Редактиране на потребителска клавишна комбинация", + "customShortcutTextBoxKeyHint": "Използвайте тук клавиш с Ctrl/Alt - обикновен клавиш вече няма да пише в текстовото поле.", + "customShortcutNumberX": "Потребителска клавишна комбинация #{0}", + "customShortcutNumberXY": "Потребителска клавишна комбинация #{0}: {1}", + "customShortcutStep": "Стъпка", + "customShortcutSteps": "Стъпки", + "customShortcutStepRunCommand": "Изпълнение на команда", + "customShortcutStepInsertText": "Вмъкване на текст", + "customShortcutStepReplace": "Търсене и замяна", + "customShortcutInsertAtCursor": "При курсора", + "customShortcutInsertAtStart": "В началото на текста", + "customShortcutInsertAtEnd": "В края на текста", + "customShortcutSummaryRunCommandX": "Изпълнение: {0}", + "customShortcutSummaryInsertXY": "Вмъкване на \"{0}\" ({1})", + "customShortcutSummaryReplaceXY": "Замяна на \"{0}\" с \"{1}\"", + "customShortcutSummaryReplaceRegexXY": "Замяна на регулярен израз \"{0}\" с \"{1}\"", + "customShortcutPickCommand": "Моля, изберете команда за изпълнение.", + "customShortcutEnterText": "Моля, въведете текста за вмъкване.", + "customShortcutEnterFind": "Моля, въведете текста за търсене.", + "customShortcutStepsHint": "Стъпките се изпълняват отгоре надолу. Текстовите стъпки работят върху избраните редове; командите, които отварят прозорец, продължават след затварянето му.", "activeIn": "Активен в", "activeInEverywhere": "Навсякъде", "generalMergeSelectedLinesAndUnbreak": "Обедини избраните редове и премахни прекъсването", "generalMergeSelectedLinesAndUnbreakCjk": "Обедини избраните редове и възстанови прекъсване CJK", "generalUnbreakNoSpaceCjk": "Не разделяй без интервал (CJK)", + "generalToggleBreak": "Превключване на пренасяне/премахване на пренасяне", "generalMergeSelectedLinesBilingual": "Обедини избраните двуезични редове", "generalToggleTranslationMode": "Превключване на режима на превод", "generalToggleTranslationAndOriginalInPreviews": "Превключване между превода и оригинала при преглед на видео/аудио", @@ -3113,10 +3758,12 @@ "generalToggleItalic": "Превключване на курсива", "generalToggleBold": "Превключване на удебелен текст", "generalToggleUnderline": "Превключване на подчертаването", + "generalToggleBox": "Превключване на кутия (EBU STL)", "fileOpen": "Отворено", "fileOpenKeepVideo": "Отвори (запази видеото)", "fileSave": "Запазване", "fileSaveAs": "Запази като", + "fileSaveOriginal": "Запазване на оригинала", "fileCompare": "Сравнение на субтитри", "fileStatistics": "Статистика", "fileImportPlainText": "Импортиране на обикновен текст", @@ -3128,6 +3775,7 @@ "fillSelectedLinesWithClipboard": "Запълни избраните редове с текст от клипборда", "listInverseSelection": "Обратен избор", "listDeleteSelection": "Изтриване на селекцията", + "deleteSelectionEverywhere": "Изтриване на селекцията (навсякъде)", "rippleDeleteSelection": "Изтриване на селекция от Ripple", "assigned": "Присвоено", "unassigned": "Неразпределено", @@ -3136,6 +3784,7 @@ "detectKey": "Detect key", "control": "Control", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Shift", "controlMac": "⌃", @@ -3146,6 +3795,11 @@ "resetShortcutsDetail": "Искате ли да възстановите всички преки пътища до стойностите им по подразбиране?", "togglePlayPause": "Превключване между възпроизвеждане/пауза", "toggleLockTimeCodes": "Превключи времевите кодове за заключване", + "toggleTimeCodeMode": "Превключване на режима на времевия код (време/кадри/номера на кадри)", + "toggleScreenPrivacy": "Превключване на поверителност на екрана (скриване на имената на файлове, след това и на текстовете)", + "screenPrivacyFileNamesHidden": "Поверителност на екрана: имената на файлове са скрити", + "screenPrivacyFileNamesAndTextsHidden": "Поверителност на екрана: имената на файлове и текстовете са скрити", + "screenPrivacyOff": "Поверителност на екрана: изключена", "duplicateSelectedLines": "Дублиране на избраните редове", "sourceView": "Изглед на източника", "addOrEditBookmark": "Добавяне или редактиране на отметка", @@ -3164,6 +3818,7 @@ "moveFirstWordFromNextLineUpCurrentSubtitle": "Преместване на първата дума от следващия ред нагоре (текущ субтитър)", "moveTextFromCursorToNextAndGoToNext": "Премести текста след позицията на курсора до следващия субтитър и премини към следващия", "moveTextFromCursorToNextAndGoToNextAndPlay": "Преместване на текст след позицията на курсора до следващия субтитър, преминаване към следващия и възпроизвеждане", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "Преместване на текста след курсора в следващия субтитър, отиване на следващия, пускането му и пауза в края му", "breakAtFirstSpaceFromCursor": "Прекъсване на първия интервал от позицията на курсора", "breakAtFirstSpaceFromCursorAndGoToNext": "Прекъсване на първия интервал от позицията на курсора и преминаване към следващия", "toggleFocusGridAndWaveform": "Превключване на фокуса между мрежата на субтитрите и формата на вълната/спектрограмата", @@ -3193,6 +3848,7 @@ "listViewColumnTextUp": "Колона, текст нагоре", "listViewColumnTextDown": "Колона, текст надолу", "autoTranslateSelectedLines": "Автоматичен превод на избраните редове...", + "autoTranslateSelectedLinesNoPrompt": "Автоматичен превод на избраните редове (без питане, с последния двигател/езици)", "setAssaResolution": "Задаване на ASSA резолюция (PlayResX/PlayResY)", "setShortcutForX": "Задаване на пряк път за \"{0}\"", "commandFileNewKeepVideo": "Ново (запазване на видеото)", @@ -3247,6 +3903,7 @@ "textBoxItalic": "Курсив на текстовото поле", "textBoxBold": "Удебелен текст в текстовото поле", "textBoxUnderline": "Подчертаване на текстовото поле", + "textBoxBox": "Кутия в текстовото поле (EBU STL)", "resetWaveformZoomAndSpeed": "Нулиране на мащабирането на вълновата форма и скоростта на възпроизвеждане (честота на възпроизвеждане)", "togglePlaybackSpeed": "Превключване на скоростта на възпроизвеждане (честота на възпроизвеждане)", "playbackSpeedSlower": "По-бавна скорост на възпроизвеждане (честота на възпроизвеждане)", @@ -3258,6 +3915,7 @@ "seekSilenceForward": "Търси тишина напред", "waveformGuessStart": "Предполага се начално време от вълновата форма", "waveformGuessEnd": "Предполага се крайният час от вълновата форма", + "waveformGuessStartAndEnd": "Отгатване на началното и крайното време от формата на вълната", "setVideoPositionCurrentSubtitleStart": "Задаване на позицията на видеото на началото на текущия ред", "goToSubtitlePositionAndPause": "Отидете на подпозиция и направете пауза", "setVideoPositionCurrentSubtitleEnd": "Задаване на позицията на видеото до края на текущия ред", @@ -3271,6 +3929,14 @@ "surroundWith": "Обгради с...", "surroundWithXY": "Обграждане с {0}/{1}", "surroundWithNumberX": "Обградете с #{0}", + "surroundWithBehavior": "Поведение", + "surroundWithBehaviorToggle": "Превключване (добавяне или премахване, ако има)", + "surroundWithBehaviorAdd": "Добавяне (всеки път)", + "surroundWithBehaviorRemove": "Премахване (всички)", + "surroundWithBehaviorRemoveOnce": "Премахване (по едно всеки път)", + "surroundWithWorksOn": "Работи върху", + "surroundWithScopeSelectionOrText": "Селекцията, иначе целия текст", + "surroundWithScopeEachLine": "Всеки ред", "searchVia": "Търсене чрез", "searchViaX": "Търсене чрез {0}", "searchViaNumberX": "Търсене чрез #{0}", @@ -3298,6 +3964,11 @@ "copySubtitlePathToClipboard": "Копиране на пътя към субтитрите в клипборда", "copySubtitleOriginalPathToClipboard": "Копиране на пътя на субтитрите на оригинала в клипборда", "focusTextBox": "Фокусиране върху текстово поле", + "focusSubtitleListView": "Фокус върху списъка със субтитри", + "focusWaveform": "Фокус върху формата на вълната", + "focusOriginalTextBox": "Фокус върху текстовото поле с оригинала", + "textBoxGoToStart": "Текстово поле, отиване в началото", + "textBoxGoToEnd": "Текстово поле, отиване в края", "sortByNumber": "Сортиране по номер", "sortByStartTime": "Сортиране по време на \"Показване\"", "sortByEndTime": "Сортиране по време на \"скриване\"", @@ -3316,6 +3987,8 @@ "duplicatesFound": "Намерени са следните дублиращи се преки пътища:", "copyTextToClipboard": "Копиране на текст в клипборда (избрани редове)", "copyTextFromOriginalToClipboard": "Копиране на текст от оригинала в клипборда (избрани редове)", + "copyPlainTextToClipboard": "Копиране на обикновен текст в клипборда (избрани редове)", + "copyPlainTextFromOriginalToClipboard": "Копиране на обикновен текст от оригинала в клипборда (избрани редове)", "assaDraw": "ASSA - жребий", "assaGenerateProgressBar": "ASSA Генериране на лента за напредък", "assaGenerateBackgroundBox": "ASSA Генериране на фоново поле", @@ -3335,9 +4008,9 @@ "selectionToSentenceCase": "Текстово поле: Избор на регистър на изречението", "selectionToggleCasing": "Текстово поле: Превключване между главни и малки букви (ГОРНИ -> долни -> Главни букви)", "googleIt": "Потърси в Google (избран текст)", - "setActorXY": "Задаване на актьор {0}: {1}", + "setActorX": "Задаване на актьор: {0}", "setNewActor": "Задайте нов актьор...", - "setActorSlotXTitle": "Слот за актьор {0}", + "setStyleX": "Задаване на стил: {0}", "toggleDialogDashes": "Превключи диалогови тирета", "mergeWithLineBeforeAsDialog": "Обедини с реда преди диалога", "mergeWithLineAfterAsDialog": "Обедини с реда след диалога", @@ -3348,7 +4021,23 @@ "moveStartOneFrameBackKeepGapPrev": "Премести началото с един кадър назад (запази разстоянието до предишния кадър, ако е близо)", "moveStartOneFrameForwardKeepGapPrev": "Премести началото с един кадър напред (запази разстоянието до предишния кадър, ако е близо)", "moveEndOneFrameBackKeepGapNext": "Премести края с един кадър назад (запази разстоянието до следващия, ако е близо)", - "moveEndOneFrameForwardKeepGapNext": "Премести края с един кадър напред (запази разстоянието до следващия, ако е близо)" + "moveEndOneFrameForwardKeepGapNext": "Премести края с един кадър напред (запази разстоянието до следващия, ако е близо)", + "moveStartXMsBack": "Преместване на началото X ms назад (X се задава в Настройки, също и във Визуална синхронизация)", + "moveStartXMsForward": "Преместване на началото X ms напред (X се задава в Настройки, също и във Визуална синхронизация)", + "moveEndXMsBack": "Преместване на края X ms назад (X се задава в Настройки, също и във Визуална синхронизация)", + "moveEndXMsForward": "Преместване на края X ms напред (X се задава в Настройки, също и във Визуална синхронизация)", + "moveSelectedLinesXMsBack": "Преместване на избраните редове X ms назад (X се задава в Настройки)", + "moveSelectedLinesXMsForward": "Преместване на избраните редове X ms напред (X се задава в Настройки)", + "moveSelectedLinesAndForwardXMsBack": "Преместване на избраните редове и всички следващи X ms назад (X се задава в Настройки)", + "moveSelectedLinesAndForwardXMsForward": "Преместване на избраните редове и всички следващи X ms напред (X се задава в Настройки)", + "moveAllLinesXMsBack": "Преместване на всички редове X ms назад (X се задава в Настройки)", + "moveAllLinesXMsForward": "Преместване на всички редове X ms напред (X се задава в Настройки)", + "moveSelectedLinesCustomMsBack": "Преместване на избраните редове, потребителски милисекунди ({0:#,###,##0}) назад, {1}", + "moveSelectedLinesCustomMsForward": "Преместване на избраните редове, потребителски милисекунди ({0:#,###,##0}) напред, {1}", + "moveSelectedLinesAndForwardCustomMsBack": "Преместване на избраните редове и всички следващи, потребителски милисекунди ({0:#,###,##0}) назад, {1}", + "moveSelectedLinesAndForwardCustomMsForward": "Преместване на избраните редове и всички следващи, потребителски милисекунди ({0:#,###,##0}) напред, {1}", + "moveAllLinesCustomMsBack": "Преместване на всички редове, потребителски милисекунди ({0:#,###,##0}) назад, {1}", + "moveAllLinesCustomMsForward": "Преместване на всички редове, потребителски милисекунди ({0:#,###,##0}) напред, {1}" }, "wordLists": { "title": "Списъци с думи", @@ -3393,7 +4082,17 @@ "applyToSelectedLinesX": "Избрани редове ({0})", "applyToAllLinesX": "Всички редове ({0})", "updateAllXAvailable": "Актуализирай всички ({0})", - "updatingXOfY": "Актуализиране на {0}/{1}..." + "updatingXOfY": "Актуализиране на {0}/{1}...", + "doNotAskAgain": "Без повторно питане (промяна в Управление на плъгини)", + "applyPluginsTo": "Прилагане на плъгините към", + "askEachTime": "Питане всеки път", + "allLines": "Всички редове", + "runPlugin": "Стартиране на плъгин", + "plugin": "Плъгин", + "configurePlugin": "Конфигуриране...", + "noBatchPluginsInstalled": "Няма инсталиран плъгин, който да поддържа пакетно конвертиране.", + "batchPluginInfo": "Плъгинът се изпълнява за всеки файл, без да показва прозореца си, със запазените си настройки.", + "pluginXNotAvailable": "Плъгинът „{0}“ не е инсталиран, е деактивиран или не поддържа пакетно конвертиране." }, "help": { "aboutSubtitleEdit": "Относно Subtitle Edit", @@ -3402,7 +4101,10 @@ "checkForUpdatesUpToDate": "Използвате най-новата версия.", "checkForUpdatesNewVersionAvailable": "Налична е нова версия: {0}", "checkForUpdatesUnableToCheck": "Не може да се провери за актуализации.", - "checkForUpdatesDownloadNewVersion": "Изтегли новата версия" + "checkForUpdatesDownloadNewVersion": "Изтегли новата версия", + "checkForUpdatesInstallAndRestart": "Инсталиране и рестартиране", + "checkForUpdatesInstallFailed": "Автоматичната актуализация не бе успешна - моля, използвайте „Изтегляне на нова версия“.", + "checkForUpdatesInstallsWhenClosed": "Актуализацията ще бъде инсталирана, когато Subtitle Edit се затвори." }, "ocr": { "linesToDraw": "редове за рисуване", @@ -3423,7 +4125,6 @@ "numberOfPixelsIsSpace": "Броят на пикселите е пространство", "inspectImageMatches": "Провери съвпадения на изображенията", "resolutionXYAndTopmarginZ": "Резолюция {0}x{1}, горен марж {2}", - "runningOcrDotDotDotXY": "Изпълнява се OCR... {0}/{1}", "runningOcrDotDotDot": "Изпълнява се OCR...", "autoSubmitFirstCharacter": "Автоматично изпращане на първия символ", "editNOcrDatabase": "Редактиране на nOCR базата данни", @@ -3437,12 +4138,12 @@ "nOcrDatabase": "nOCR база данни", "drawMode": "Режим на рисуване:", "addNewCharcter": "Добавяне на нов герой", - "lineIndexX": "Ред {0}", + "addNOcrCharacterTitle": "Добавяне на nOCR знак за ред {0}, знак {1} от {2}, с база данни \"{3}\"", + "addBinaryOcrCharacterTitle": "Добавяне на двоичен OCR знак за ред {0}, знак {1} от {2}, с база данни \"{3}\"", "inspectNOcrAdditions": "Провери новите допълнения на nOCR", "ocrSelectedLines": "OCR избрани редове", "fillSelectedLinesWithClipboard": "Запълни избраните редове с текст от клипборда", "showImage": "Покажи изображение", - "fixOcrErrors": "Коригиране на OCR грешки", "promptForUknownWords": "Подкана за непознати думи", "tryToGuessUnknownWords": "Опитай да познае непознати думи", "autoBreakIfMoreThanXLines": "Автоматично прекъсване, ако има повече от {0} реда", @@ -3461,7 +4162,6 @@ "clearBackground": "Прозрачен фон", "clearForeground": "Ясен преден план", "nOcrDrawHelp": "Съвети за рисуване\n──────────────────────\n• Задръжте Ctrl, за да продължите реда\n• Ctrl z=отмяна, Ctrl y=повторяване", - "editWholeText": "Редактиране на целия текст", "editWordOnly": "Редактиране само на дума", "imagePreProcessing": "Предварителна обработка на изображения", "preProcessingTitle": "Предварителна обработка", @@ -3485,6 +4185,8 @@ "binaryImageCompareInspectImageMatches": "\"Сравняване на двоични изображения\" - Проверка на съвпаденията на изображенията", "saveBlankTextTitle": "Запазване на празен текст?", "saveBlankTextPrompt": "Запазване на празен текст за изображение?", + "drawnLinesDoNotMatchTitle": "Линиите не съответстват на изображението", + "drawnLinesDoNotMatchPrompt": "Някои от начертаните линии не съответстват на изображението (зелените линии трябва да са върху знака, червените - извън него), затова този знак няма да бъде разпознат.\n\nЗапазване въпреки това?", "yesAndNeverAskAgain": "Да и никога повече да не пита", "importTextFromSubtitleDotDotDot": "Импортиране на текст от субтитри...", "importTextFromSubtitleOverwritePrompt": "Някои редове вече съдържат OCR текст. Да се презапише ли съществуващият текст?", @@ -3504,7 +4206,6 @@ "htmlExportNoMatches": "Няма редове, които да съответстват на филтъра", "htmlExportImageBackground": "Фоново изображение", "htmlExportCheckerboard": "Шахматна дъска", - "htmlExportTheme": "Тема", "htmlExportGeneratedBySubtitleEdit": "Генерирано от редактиране на субтитри", "vobSubColors": "Цветове на VobSub/DVD...", "vobSubColorsTitle": "Цветове на VobSub/DVD", @@ -3535,7 +4236,6 @@ "llamaCppNotDownloaded": "Енджин/моделът на llama.cpp не е изтеглен - изтегляне чрез настройки за пакетно конвертиране", "llamaCppReturnedNoText": "llama.cpp не върна текст - проверете сървъра и модела", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp изисква изтегляне на сървърния енджин llama и избрания OCR модел. Да се изтегли ли сега?", - "llamaCppDownloadEnginePrompt": "llama.cpp изисква изтегляне на двигателя llama-server. Да се изтегли ли сега?", "llamaCppDownloadModelPrompt": "llama.cpp изисква избраният OCR модел да бъде изтеглен. Да се изтегли ли сега?", "crispEmbedNotDownloaded": "CrispEmbed двигател/модел не е изтеглен - изтегляне чрез настройки за пакетно конвертиране", "crispEmbedReturnedNoText": "CrispEmbed не върна текст - проверете модела", @@ -3543,9 +4243,26 @@ "crispEmbedSettingsTitle": "Настройки на CrispEmbed", "crispEmbedDescription": "Локален OCR енджин с множество бекендове за модели - изтеглете енджина и моделите тук.", "trainNOcrDatabase": "Обучение на nOCR база данни...", + "optimizeNOcrDatabase": "Оптимизиране на nOCR базата данни...", + "optimizeNOcrDatabaseQuestionXY": "Да се премахнат ли линиите, които не различават знаците от подобни знаци, в nOCR базата данни \"{0}\"?\n\nТова прави базата данни по-малка и OCR по-бърз, обикновено с по-малко грешки. Отнема до минута.\n\nАрхив се запазва като \"{1}\".", + "optimizingNOcrDatabaseXY": "Оптимизиране на nOCR базата данни... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "nOCR базата данни \"{0}\" е оптимизирана: {1:#,##0} -> {2:#,##0} линии.", "startTraining": "Започнете обучението", "abortTraining": "Прекратяване на обучението", "trainingOptions": "Опции за обучение", + "trainNOcrSubtitle": "Изобразява знаци с инсталираните шрифтове и учи nOCR на формите им. Изберете шрифтовете, които използват субтитрите ви.", + "xFontsSelected": "{0:#,##0} избрани", + "subtitleFonts": "Шрифтове на субтитрите", + "emptyDatabase": "Празна база данни", + "startFromDatabase": "Начало от", + "startFromDatabaseHint": "Добавяне на обучените знаци към копие на съществуваща база данни (препоръчително) или започване от празна", + "fontSizes": "Размери на шрифта", + "fontSizesHint": "Размери на шрифта в пиксели за изобразяване, разделени със запетаи, напр. \"30, 40\"", + "numberOfLineSegmentsHint": "Проверявани линии на знак - повече е по-строго, но по-бавно", + "enterDatabaseName": "Въведете име за базата данни", + "trainingFontXSizeYCharacterZ": "Обучение на \"{0}\" при {1} px: {2}", + "xLearned": "{0:#,##0} научени", + "xSkipped": "{0:#,##0} пропуснати", "charactersToTrain": "Герои за обучение", "letterCombinationsToTrain": "Комбинации от букви, които могат да бъдат разделени на едно изображение", "importCharactersFromSubtitleFile": "Импортиране на символи от файл със субтитри...", @@ -3554,7 +4271,11 @@ "alsoTrainItalic": "Също така тренирайте курсив", "trainingXLearnedYSkipped": "Обучение \"{0}\" - {1:#,##0} символа са научени, {2:#,##0} са пропуснати", "trainingDoneXLearned": "Обучението е завършено - научени са {0:#,##0} символа", - "selectAtLeastOneFont": "Моля, изберете поне един шрифт" + "selectAtLeastOneFont": "Моля, изберете поне един шрифт", + "nOcrZoomIn": "Увеличаване", + "nOcrZoomOut": "Намаляване на мащаба", + "nOcrLineAlgorithm": "Алгоритъм", + "nOcrLineAlgorithmHint": "Алгоритъм, който автоматичното рисуване използва за генериране на линии за преден план/фон" }, "assa": { "assaDraw": "ASSA - жребий", @@ -3572,6 +4293,8 @@ "drawZoomOut": "Намаляване на мащаба (Ctrl+-)", "drawResetView": "Нулиране на изгледа (Ctrl+0)", "drawToggleGrid": "Превключване на мрежата (Ctrl+G)", + "drawTogglePreview": "Превключване на прегледа (F9)", + "drawPreviewFailed": "Прегледът не успя - изисква се ffmpeg с libass (филтър subtitles)", "drawCopyToClipboard": "Копиране в клипборда (Ctrl+C)", "drawShapes": "Форми", "drawSelectedPoint": "Избрана точка", @@ -3579,6 +4302,212 @@ "drawSelectedLayer": "Избран слой", "drawToolX": "Инструмент: {0}", "drawHelpText": "Щракнете, за да добавите точки • Enter/F8, за да затворите формата • Shift+плъзгане, за да преместите панорамно • Ctrl+превъртане, за да увеличите мащаба", + "drawMoveToLayer": "Преместване в слой", + "drawFlipHorizontal": "Хоризонтално обръщане", + "drawFlipVertical": "Вертикално обръщане", + "drawHideShape": "Скриване на фигурата", + "drawShowShape": "Показване на фигурата", + "drawHideLayer": "Скриване на слоя", + "drawShowLayer": "Показване на слоя", + "drawDeleteLayer": "Изтриване на слоя", + "drawDeletePoint": "Изтриване на точката", + "drawCancelDrawing": "Отказ от рисуването", + "drawLayerX": "Слой {0}", + "drawImportSvg": "Импортиране на SVG изображение...", + "drawRotateClockwise": "Завъртане на 90° по часовниковата стрелка", + "drawConvertToCurve": "Преобразуване на сегмента в крива", + "drawZoom": "Мащаб", + "drawShapeTool": "Инструмент за фигури", + "drawColorPickerTool": "Вземане на цвят от фигура или от фона", + "drawShapeLibrary": "Библиотека с фигури", + "drawShapeLibraryHint": "Плъзнете върху платното, за да поставите фигура, или щракнете за размера по подразбиране. Shift запазва пропорциите ѝ.", + "drawAddToLibrary": "Добавяне към библиотеката с фигури...", + "drawRemoveFromLibrary": "Премахване от библиотеката с фигури", + "drawShapeName": "Име на фигурата", + "drawCategorySpeechBubbles": "Балончета за реч", + "drawCategoryArrows": "Стрелки", + "drawCategoryBasicShapes": "Основни фигури", + "drawCategorySymbols": "Символи", + "drawCategoryClipArt": "Клипарт", + "drawClipArtRedHeart": "Червено сърце", + "drawClipArtAngerMark": "Знак за гняв", + "drawClipArtSweatDrop": "Капка пот", + "drawClipArtSparkles": "Искри", + "drawClipArtBlush": "Изчервяване", + "drawClipArtSurpriseLines": "Линии на изненада", + "drawClipArtBamBurst": "Взрив „Бам!“", + "drawClipArtZzz": "Ззз", + "drawClipArtSun": "Слънце", + "drawClipArtFlame": "Пламък", + "drawClipArtLightBulb": "Крушка", + "drawClipArtLightningBolt": "Светкавица", + "drawClipArtColoredMusicNotes": "Цветни музикални ноти", + "drawClipArtPhone": "Телефон", + "drawClipArtQuestionMark": "Въпросителен знак", + "drawClipArtExclamationMark": "Удивителен знак", + "drawClipArtGreenCheck": "Зелена отметка", + "drawClipArtRedCross": "Червен хикс", + "drawClipArtThumbsUp": "Палец нагоре", + "drawClipArtGoldStar": "Златна звезда", + "drawClipArtBrokenHeart": "Разбито сърце", + "drawClipArtGhost": "Призрак", + "drawClipArtSkull": "Череп", + "drawClipArtSnowflake": "Снежинка", + "drawClipArtMoonAndStars": "Луна и звезди", + "drawClipArtRainCloud": "Дъждовен облак", + "drawClipArtBomb": "Бомба", + "drawClipArtGift": "Подарък", + "drawClipArtCrown": "Корона", + "drawClipArtClock": "Часовник", + "drawClipArtClapperboard": "Филмова клапа", + "drawClipArtMicrophone": "Микрофон", + "drawClipArtWarningSign": "Предупредителен знак", + "drawClipArtNoEntry": "Вход забранен", + "drawClipArtPopcorn": "Пуканки", + "drawClipArtCoffeeCup": "Чаша за кафе", + "drawClipArtRainbow": "Дъга", + "drawClipArtTrophy": "Трофей", + "drawClipArtRocket": "Ракета", + "drawClipArtBalloon": "Балон", + "drawClipArtCamera": "Камера", + "drawClipArtPartyPopper": "Парти конфети", + "drawClipArtPizzaSlice": "Парче пица", + "drawClipArtIceCream": "Сладолед", + "drawClipArtUmbrella": "Чадър", + "drawClipArtCatFace": "Котешка муцунка", + "drawClipArtKey": "Ключ", + "drawClipArtChristmasTree": "Коледна елха", + "drawClipArtYouTube": "YouTube", + "drawClipArtInstagram": "Instagram", + "drawClipArtLinkedIn": "LinkedIn", + "drawClipArtFacebook": "Facebook", + "drawClipArtX": "X", + "drawClipArtTikTok": "TikTok", + "drawClipArtClosedCaptions": "Субтитри", + "drawClipArtSpeakerLabel": "Говорител", + "drawClipArtTranslation": "Превод", + "drawClipArtSignLanguage": "Жестов език", + "drawClipArtAi": "ИИ", + "drawClipArtHeadphones": "Слушалки", + "drawClipArtYummy": "Вкусно", + "drawClipArtDrooling": "Текат лиги", + "drawClipArtDisgusted": "Отвратен", + "drawClipArtTooSpicy": "Твърде пикантно", + "drawClipArtChefsKiss": "Целувка на готвача", + "drawClipArtLoveIt": "Харесва ми", + "drawClipArtStarRating": "{0} от 5 звезди", + "drawAnimation": "Анимация", + "drawAnimationIn": "Появяване", + "drawAnimationOut": "Изчезване", + "drawAnimationFade": "Избледняване", + "drawAnimationPop": "Изскачане", + "drawAnimationZoom": "Мащабиране", + "drawAnimationSpin": "Завъртане", + "drawAnimationFromLeft": "Отляво", + "drawAnimationFromRight": "Отдясно", + "drawAnimationFromTop": "Отгоре", + "drawAnimationFromBottom": "Отдолу", + "drawAnimationToLeft": "Наляво", + "drawAnimationToRight": "Надясно", + "drawAnimationToTop": "Нагоре", + "drawAnimationToBottom": "Надолу", + "drawAnimationPlay": "Пускане на анимацията", + "drawAnimationStop": "Спиране на анимацията", + "drawAnimationLayerHint": "Прилага се за целия слой (един ред със субтитрите); групата се движи като едно цяло.", + "drawAnimationLoop": "Цикъл", + "drawAnimationPulse": "Пулс", + "drawAnimationBlink": "Мигане", + "drawAnimationBounce": "Отскачане", + "drawAnimationShake": "Разклащане", + "drawAnimationSwing": "Люлеене", + "drawAnimationFlip": "Обръщане", + "drawAnimationLoopBlocked": "Този цикъл се върти около различна точка от ефекта за появяване/изчезване, затова е пропуснат.", + "drawClipArtLoadingSpinner": "Индикатор за зареждане", + "drawClipArtRec": "REC", + "drawClipArtRingingPhone": "Звънящ телефон", + "drawClipArtBeatingHeart": "Биещо сърце", + "drawClipArtBouncingArrow": "Подскачаща стрелка", + "drawClipArtRingingBell": "Звънящ звънец", + "drawClipArtPointingHand": "Сочеща ръка", + "drawClipArtWiFi": "Wi-Fi", + "drawClipArtTwinklingStar": "Трепкаща звезда", + "drawClipArtAlarmClock": "Будилник", + "drawClipArtHourglass": "Пясъчен часовник", + "drawClipArtIdea": "Идея", + "drawCategoryMyShapes": "Моите фигури", + "drawShapeSpeechBubble": "Балонче за реч", + "drawShapeSpeechBubbleRight": "Балонче за реч, опашка надясно", + "drawShapeSpeechBubbleUp": "Балонче за реч, опашка нагоре", + "drawShapeOvalBubble": "Овално балонче за реч", + "drawShapeBoxBubble": "Правоъгълно балонче за реч", + "drawShapeThoughtBubble": "Балонче за мисъл", + "drawShapeShoutBubble": "Балонче за вик", + "drawShapeCaptionBox": "Каре за надпис", + "drawShapeSpeechBubbleSide": "Балонче за реч, опашка наляво", + "drawShapeRoundBubble": "Кръгло балонче", + "drawShapePillBubble": "Овално балонче", + "drawShapeScreamBubble": "Балонче за писък", + "drawShapeArrow": "Стрелка", + "drawShapeDoubleArrow": "Двойна стрелка", + "drawShapeChevron": "Шеврон", + "drawShapeCurvedArrow": "Извита стрелка", + "drawShapeRepeatArrow": "Стрелка за повтаряне", + "drawShapeUTurnArrow": "Стрелка за обратен завой", + "drawShapeRoundedRectangle": "Заоблен правоъгълник", + "drawShapeTriangle": "Триъгълник", + "drawShapeDiamond": "Ромб", + "drawShapePentagon": "Петоъгълник", + "drawShapeHexagon": "Шестоъгълник", + "drawShapeOctagon": "Осмоъгълник", + "drawShapeStar": "Звезда", + "drawShapeRing": "Пръстен", + "drawShapePlus": "Плюс", + "drawShapeBanner": "Банер", + "drawShapeHalfCircle": "Полукръг", + "drawShapeTeardrop": "Капка", + "drawShapeHeart": "Сърце", + "drawShapeCheck": "Отметка", + "drawShapeMusicNote": "Музикална нота", + "drawShapeMusicNotes": "Музикални ноти", + "drawShapeLightning": "Мълния", + "drawShapeCloud": "Облак", + "drawShapeMoon": "Луна", + "drawShapeBadge": "Значка", + "drawShapeSpeaker": "Високоговорител", + "drawShapeCross": "Кръст", + "drawShapeSmiley": "Усмихнато лице", + "drawShapeSadSmiley": "Тъжно лице", + "drawBackgroundVideoFrame": "Видео кадър (текуща позиция)", + "drawBackgroundVideoFrameAt": "Видео кадър при...", + "drawBackgroundImage": "Файл с изображение...", + "drawBackgroundNone": "Без фон", + "drawBackgroundStretch": "Разтягане на изображението до платното", + "drawBackgroundOpacity": "Непрозрачност на фона", + "drawBackgroundVideoFrameFailed": "Не можа да бъде взет видео кадър при {0}.", + "drawConvertToLine": "Преобразуване на сегмента в линия", + "drawConvertShapeToCurves": "Преобразуване на всички линии в криви", + "drawConvertShapeToLines": "Преобразуване на всички криви в линии", + "drawRotateCounterClockwise": "Завъртане на 90° обратно на часовниковата стрелка", + "drawSvgImages": "SVG изображения", + "drawSvgNoShapes": "В SVG файла не са намерени запълнени фигури или контури.", + "drawTextTool": "Инструмент за текст", + "drawDefaultText": "Текст", + "drawShrinkToFit": "Смаляване до побиране", + "drawTextBox": "Текстово поле", + "drawDiscardChanges": "Рисунката е променена.\nДа се отхвърлят ли промените?", + "drawColorPickerToolName": "Избор на цвят", + "drawOpenDrawing": "Отваряне на ASSA рисунка", + "drawSaveDrawing": "Запазване на ASSA рисунка", + "drawDrawingFiles": "Файлове с ASSA рисунки", + "drawAssFiles": "ASS файлове", + "drawPositionXY": "Позиция: {0}, {1}", + "drawXShapes": "{0} фигури", + "drawXPoints": "{0} точки", + "drawShapeXDraw": "Фигура {0} (рисуване)", + "drawShapeXErase": "Фигура {0} (изтриване)", + "drawGroup": "Групиране (Ctrl+G)", + "drawUngroup": "Разгрупиране (Ctrl+Shift+G)", + "drawGroupX": "Група {0}", "progressBarTitle": "Лента за напредък на ASSA", "progressBarSettings": "Лента за напредък", "mouseOverColor": "Цвят при задържане на мишката", @@ -3586,17 +4515,34 @@ "progressBarForeColor": "Цвят на предния план", "progressBarSquareCorners": "Квадратни ъгли", "progressBarRoundedCorners": "Заоблени ъгли", - "progressBarChapters": "Глави", "progressBarSplitterWidth": "Ширина на разделителя", "progressBarSplitterHeight": "Височина на разделителя", "progressBarXAdjustment": "X корекция", "progressBarYAdjustment": "Y-корекция", "progressBarTextAlignment": "Подравняване на текста", + "progressBarStyleCutCorners": "Срязани ъгли", + "progressBarStyleArrow": "Стрелка", + "progressBarStyleSlanted": "Наклонен", + "progressBarStyleSegments": "Сегменти", + "progressBarStyleRoundedSegments": "Заоблени сегменти", + "progressBarStyleDots": "Точки", + "progressBarStyleDiamonds": "Ромбове", + "progressBarStyleChevrons": "Шеврони", + "progressBarStyleStripes": "Райета", + "progressBarStyleWave": "Вълна", + "progressBarStyleZigzag": "Зигзаг", + "progressBarStyleTapered": "Стесняващ се", + "progressBarStyleRuler": "Линийка", + "progressBarStyleDoubleLine": "Двойна линия", + "progressBarStyleEqualizer": "Еквалайзер", + "progressBarStyleStars": "Звезди", + "progressBarPlayhead": "Маркер за възпроизвеждане", + "progressBarEdgeMargin": "Отстояние от ръба", + "progressBarSplitter": "Разделител", "fontCollectorTitle": "Колектор на шрифтове", "fontCollectorUsedIn": "Използва се в", "fontCollectorFontFiles": "Файл(ове) с шрифтове", "fontCollectorStyleX": "Стил: {0}", - "fontCollectorInlineLineX": "Ред {0}", "fontCollectorFound": "Намерено", "fontCollectorNotFound": "Не е намерено", "fontCollectorEmbedded": "Вграден", @@ -3650,8 +4596,26 @@ "backgroundBoxTornPaperDouble": "Скъсана хартия (отгоре и отдолу)", "backgroundBoxStarburst": "Звездообразен взрив", "backgroundBoxScroll": "Свитък / Пергамент", + "backgroundBoxPill": "Овал", + "backgroundBoxCutCorners": "Срязани ъгли", + "backgroundBoxSlanted": "Наклонен", + "backgroundBoxTicket": "Билет", + "backgroundBoxSpeechBubble": "Балонче за реч", + "backgroundBoxRibbon": "Лента", + "backgroundBoxBrushStroke": "Мазка с четка", + "backgroundBoxCornerBrackets": "Ъглови скоби", + "backgroundBoxUnderline": "Подчертаваща лента", + "backgroundBoxFrame": "Рамка", + "backgroundBoxArrowTag": "Етикет със стрелка", + "backgroundBoxSideBar": "Странична лента", "stylesInFile": "Стилове във файла", "stylesSaved": "Стиловете са запазени", + "stylesSummary": "{0} стила във файла · {1} запазени", + "stylesTransform": "Трансформация", + "stylesEditing": "Редактиране", + "stylesPreviewSampleTextHint": "Примерен текст - \\N за нов ред", + "stylesScale": "Мащаб %", + "stylesPreviewChecker": "Шахматна дъска", "allCategories": "[Всички]", "newCategory": "Нова категория...", "renameCategory": "Преименуване на категория...", @@ -3675,13 +4639,28 @@ "graphics": "Графика", "copyToStorageStyles": "Копиране в стилове за съхранение", "copyToFileStyles": "Копиране във файл със стилове", + "styleXAlreadyExistsInStorage": "Стил с име \"{0}\" вече съществува в хранилището.\n\nДа бъде ли презаписан, или да се запазят и двата (копието получава ново име)?", + "styleXAlreadyExistsInFile": "Стил с име \"{0}\" вече съществува във файла.\n\nДа бъде ли презаписан, или да се запазят и двата (копието получава ново име)?", + "styleNameCannotBeEmpty": "Името на стила не може да бъде празно.", + "styleNameXIsUsedMoreThanOnce": "Името на стил \"{0}\" се използва от повече от един стил във файла.", + "overwrite": "Презаписване", + "keepBoth": "Запазване и на двата", + "doThisForAllConflictingStyles": "Същото за всички конфликтни стилове", "setStyleAsDefault": "Задаване на стил по подразбиране", "takeUsagesFromDotDotDot": "Вземи използвани от...", "replaceStyleWithDotDotDot": "Замени стила с...", "noAttachmentsFound": "Не са намерени прикачени файлове в избрания ASSA файл.", + "attachmentsDropHint": "Пуснете файлове с шрифтове или изображения тук, за да ги прикачите", + "attachmentsSummary": "{0} шрифтове · {1} графики · {2}", "deleteStyleQuestion": "Изтриване на стила?", "deleteStylesQuestion": "Да се изтрият ли стиловете?", + "deleteXStylesQuestion": "Искате ли да изтриете {0} стила?", + "deleteXStylesFromStorageQuestion": "Искате ли да изтриете {0} стила от хранилището?", + "deleteStyleXFromStorageQuestion": "Искате ли да изтриете стил \"{0}\" от хранилището?", + "deleteStyleXFromFileQuestion": "Искате ли да изтриете стил \"{0}\" от текущия файл?", "openStyleImportFile": "Отвори файл със субтитри, за импорт на стилове от", + "styleImportFiles": "Файлове със стилове (.ass, .sty, категории .template на Subtitle Edit 4)", + "ssaStyleImportFiles": "Файлове със стилове (.ssa, .ass, .sty)", "primary": "Основно", "secondary": "Вторично", "applyOverrideTags": "Прилагане на етикети за презаписване", @@ -3698,12 +4677,31 @@ "spinIn": "Завъртане", "setPosition": "Задаване на позиция", "rotation": "Ротация", + "setPositionTopLeft": "Горе вляво", + "setPositionTopCenter": "Горе в центъра", + "setPositionTopRight": "Горе вдясно", + "setPositionMiddleLeft": "В средата вляво", + "setPositionMiddleRight": "В средата вдясно", + "setPositionBottomLeft": "Долу вляво", + "setPositionBottomCenter": "Долу в центъра", + "setPositionBottomRight": "Долу вдясно", + "setPositionCustom": "Потребителска", + "setPositionReset": "Връщане към позицията на реда", + "setPositionResetRotation": "Нулиране на въртенето", + "setPositionGuides": "Помощни линии", + "setPositionSafeArea": "Безопасна зона", + "setPositionCenterLines": "Централни линии", + "setPositionSnapToGuides": "Прилепване към помощните линии", + "setPositionNudgeHint": "Стрелките преместват с 1 пиксел, Shift с 10 пиксела", "scaleX": "Мащаб X", "scaleY": "Мащаб Y", "spacing": "Разстояние", "angle": "Ъгъл", "imageColorPicker": "Избор на цвят на изображението", "copyColorAsHextoClipboard": "Копиране на цвета като шестнадесетичен код в клипборда", + "imageColorPickerHint": "Щракнете върху рамката, за да изберете цвят", + "copyColorAsAssaToClipboard": "Копиране на цвета като ASSA (&HBBGGRR&) в клипборда", + "copyColorAsAssaTagToClipboard": "Копиране на цвета като ASSA таг \\c в клипборда", "generatingBackgroundBoxXOfY": "Генериране на фонова кутия {0} от {1}...", "applyAdvancedEffectTitle": "Прилагане на разширен ефект", "chooseEffect": "Изберете ефект", @@ -3785,6 +4783,34 @@ "advancedEffectLowerThird": "Долна трета", "advancedEffectLowerThirdDescription": "Банер с име и длъжност долу вляво с плъзгаща се лента с акценти — стил интервю/документален документален филм (първи ред = име, следващи редове = длъжност)", "advancedEffectLowerThirdAccentColor": "Акцентен цвят", + "advancedEffectCategoryWords": "Думи и караоке", + "advancedEffectCategoryInOut": "Появяване и изчезване", + "advancedEffectCategoryTextFx": "Текстови ефекти", + "advancedEffectCategoryScenes": "Сцени", + "advancedEffectCategoryTitles": "Заглавия и надписи", + "advancedEffectSearchWatermark": "Търсене на ефекти...", + "advancedEffectNoMatches": "Няма ефекти, съответстващи на търсенето", + "advancedEffectCustomize": "Персонализиране", + "advancedEffectNoSettings": "Този ефект няма настройки - работи както е.", + "advancedEffectAmount": "Сила", + "advancedEffectPreviewNoVideo": "Примерен преглед - отворете видеоклип, за да видите реалното рендиране", + "advancedEffectHighlightBox": "Маркиращо каре", + "advancedEffectHighlightBoxDescription": "Цветно каре прескача от дума на дума, докато се изговаря репликата - субтитри в стил CapCut", + "advancedEffectSingleWordPop": "Дума по дума", + "advancedEffectSingleWordPopDescription": "Показва по една голяма дума, която изскача, когато бъде изговорена - стил на субтитри за кратки видеа", + "advancedEffectBoldCaptions": "Удебелени субтитри", + "advancedEffectBoldCaptionsDescription": "Удебелени субтитри с дебел контур - изговорената дума светва в цвят и се уголемява", + "advancedEffectHighlightColor": "Цвят на маркирането", + "advancedEffectUpperCase": "Главни букви", + "advancedEffectTextSizePercent": "Размер на текста (%)", + "advancedEffectSmoothFill": "Плавно запълване", + "advancedEffectSmoothFillDescription": "Цветът на маркирането преминава плавно през всяка дума, докато се произнася", + "advancedEffectBlurInWords": "Думи от размазване", + "advancedEffectBlurInWordsDescription": "Думите се появяват една по една, докато се изговарят - всяка се изостря от размазване и се издига на мястото си", + "advancedEffectRollingCaptions": "Подвижни субтитри", + "advancedEffectRollingCaptionsDescription": "Всеки ред се плъзга нагоре и измества предишния ред нагоре, като чат на живо или телесуфлер", + "advancedEffectFillColor": "Цвят на запълване", + "advancedEffectRise": "Издигане от базовата линия", "overrideTagsHistory": "История на замяната на тагове" }, "about": { @@ -3807,11 +4833,8 @@ "all": "Всички", "tooManyLines": "Твърде много редове", "charactersPerSecond": "Скорост на четене", - "durationTooShort": "Твърде кратко", - "durationTooLong": "Твърде дълго", "lineTooLong": "Редът е твърде дълъг", "lineTooWide": "Линията е твърде широка", - "overlap": "Припокриване", "gapTooShort": "Разстоянието е твърде късо", "tooManyLinesHint": "Повече редове от максималния брой редове", "charactersPerSecondHint": "Знаци в секунда над максимума", @@ -3827,7 +4850,6 @@ "detailOverlapToNext": "до следващото: {0} мс", "detailGapToPrevious": "към предишното: {0} < {1} мс", "detailGapToNext": "към следващото: {0} < {1} мс", - "detail": "Детайл", "tip": "Щракнете двукратно върху ред (или натиснете Enter), за да отидете на него. Кои проверки да се изпълняват и техните ограничения се задават в Настройки > Общи.", "exportAsText": "Текстов файл (.txt)...", "exportAsExcel": "Екселски файл (.xlsx)...", diff --git a/src/ui/Assets/Languages/Catalan.json b/src/ui/Assets/Languages/Catalan.json index a00c0072684..5bc76d88b80 100644 --- a/src/ui/Assets/Languages/Catalan.json +++ b/src/ui/Assets/Languages/Catalan.json @@ -1,12 +1,70 @@ { "title": "Subtitle Edit", - "version": "v5.2.0-rc7", + "version": "v5.3.0", "translatedBy": "", "cultureName": "ca-ES", "general": { + "prompt": "Indicació", + "temperature": "Temperatura", + "preset": "Predefinit", + "output": "Sortida", + "outputFormat": "Format de sortida", + "other": "Altres", + "timeCodeFormat": "Format del codi de temps", + "topBottomMargin": "Marge superior/inferior", + "theme": "Tema", + "brightness": "Brillantor", + "chooseColor": "Trieu un color", + "lineX": "Línia {0}", + "playLine": "Reprodueix la línia", + "maxLineLength": "Llargària màxima de la línia", + "maxCharsPerSec": "Màxim de caràcters/s", + "maxNumberOfLines": "Nombre màxim de línies", + "subtitles": "Subtítols", + "shotChanges": "Canvis de pla", + "chapters": "Capítols", + "audio": "Àudio", + "interjections": "Interjeccions", + "blankLines": "Línies en blanc", + "editWholeText": "Edita tot el text", + "noTextInClipboard": "No hi ha text al porta-retalls", + "noSubtitlesFoundTitle": "No s'ha trobat cap subtítol", + "replacedXOccurrences": "S'han substituït {0} coincidències", + "invalidRegularExpressionX": "Expressió regular no vàlida: {0}", + "discardChangesTitle": "Voleu descartar els canvis?", + "downloadingXDotDotDot": "S'està baixant {0}...", + "importTimeCodesDotDotDot": "Importa codis de temps...", + "nextChange": "Canvi següent", + "previousChange": "Canvi anterior", + "changeXOfY": "Canvi {0} de {1}", + "tooLong": "Massa llarga", + "tooShort": "Massa curta", + "overlapping": "Superposició", + "detail": "Detall", + "fixOcrErrors": "Corregeix els errors d'OCR", + "runningOcrXY": "S'està executant l'OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "El llama.cpp requereix baixar el motor llama-server. Voleu baixar-lo ara?", "abort": "Interromp", "actor": "Actor", "actors": "Actors", + "setActorDotDotDot": "Estableix l'actor...", + "actorPickerTitle": "Estableix l'actor", + "actorPickerFilterHint": "Escriviu per filtrar o escriviu el nom d'un actor nou", + "actorPickerKeysHint": "Premeu un número o Enter per establir l'actor. Alt+Amunt/Avall canvia l'ordre, Supr elimina l'actor.", + "actorPickerNewActorX": "Actor nou «{0}»", + "actorPickerLinesSelectedX": "Línies seleccionades: {0}", + "setStyleDotDotDot": "Estableix l'estil...", + "stylePickerTitle": "Estableix l'estil", + "stylePickerFilterHint": "Escriviu per filtrar o escriviu el nom d'un estil nou", + "stylePickerKeysHint": "Premeu un número (1-9, 0) per establir l'estil a totes les línies seleccionades.", + "stylePickerNewStyleX": "Estil nou «{0}»", + "stylePickerNewStyleInfo": "Premeu Enter per afegir aquest estil amb la configuració per defecte i establir-lo a les línies seleccionades. Utilitzeu «Gestiona els estils...» per canviar-ne més endavant la lletra, els colors i la posició.", + "stylePickerCurrentStyleX": "Estil actual: {0}", + "stylePickerLinesUsingStyleX": "Línies que utilitzen aquest estil: {0}", + "stylePickerMarginsXYZ": "Esquerre {0}, dret {1}, vertical {2}", + "stylePickerSetStyle": "_Estableix l'estil", + "stylePickerManageStyles": "Gestiona els estils...", + "stylePickerManageStylesHint": "Tanca aquesta finestra i obre el gestor d'estils per editar les lletres, els colors, la posició i més", "add": "Afegeix", "addDotDotDot": "Afegeix...", "addToNamesListCaseSensitive": "Afegeix a la llista de noms (distingeix majúscules)", @@ -339,6 +397,7 @@ "mergeSelectedLinesDialog": "Fusiona les línies seleccionades com a diàleg", "mergeWithLineAfterAndAutoBreak": "Fusiona amb la línia següent i salta automàticament", "mergeWithLineAfterKeepBreaks": "Fusiona amb la línia següent (mantén els salts)", + "mergeWithLineAfterAndUnbreak": "Fusiona amb la línia següent i desfés el salt de línia", "mergeWithLineBeforeAndAutoBreak": "Fusiona amb la línia anterior i salta automàticament", "mergeWithLineBeforeKeepBreaks": "Fusiona amb la línia anterior (mantén els salts)", "middleCenter": "Mig-Centre", @@ -424,6 +483,7 @@ "percent": "Percentatge", "pickLayer": "Estableix la capa", "pickOllamaModel": "Trieu un model d'Ollama", + "pickModel": "Trieu el model", "llamaCppUseRemoteServer": "Utilitza un servidor extern (URL)", "llamaCppEngineSettings": "Configuració del motor llama.cpp", "llamaCppEngineSettingsSubtitle": "Compilació local del servidor llama.cpp", @@ -500,6 +560,7 @@ "reset": "Restableix", "resizePanels": "Redimensiona els plafons", "resolution": "Resolució", + "retry": "Torna-ho a provar", "reverseRightToLeftStartEnd": "Inverteix l'inici/final RTL", "right": "Dreta", "rightToLeft": "De dreta a esquerra", @@ -561,6 +622,8 @@ "shadowColor": "Color de l'ombra", "shadowWidth": "Ample de l'ombra", "shiftLineBy": "Desplaça la línia per", + "shotIn": "Entrada de pla", + "shotOut": "Sortida de pla", "shortcut": "Drecera", "shortcuts": "Dreceres", "show": "Mostra", @@ -572,9 +635,13 @@ "showStartColumn": "Mostra la columna «Inici»", "showHideColumn": "Mostra la columna «Amaga»", "showHistory": "Mostra l'historial", + "clearHistory": "Neteja l'historial", + "removeFromHistory": "Elimina de l'historial", "showLayerColumn": "Mostra la columna «Capa»", "showPreview": "Mostra la vista prèvia", "showShotChangesList": "Mostra la llista de canvis de pla", + "showShotInColumn": "Mostra la columna «Entrada de pla»", + "showShotOutColumn": "Mostra la columna «Sortida de pla»", "showStyleColumn": "Mostra la columna «Estil»", "showTeletext": "Mostra la columna de teletext a la vista de llista", "showTimeCodes": "Mostra els codis de temps", @@ -631,12 +698,14 @@ "styleExaggeration": "Exageració de l'estil", "styles": "Estils", "subtitleFile": "Fitxer de subtítols", + "subtitleFileChangedOutsideX": "El fitxer «{0}» s'ha modificat fora del Subtitle Edit.\n\nVoleu tornar-lo a carregar i perdre els canvis?", "subtitleFileName": "Nom del fitxer del subtítol", "subtitleFileSaved": "S'ha desat el fitxer de subtítols", "subtitleFileSavedToX": "S'ha desat el fitxer de subtítols a {0}", "subtitleFiles": "Fitxers de subtítols", "subtitleFormats": "Formats de subtítols", "subtitleLoadedX": "S'ha carregat el subtítol: {0}", + "subtitleReloadedChangedOutsideX": "S'ha tornat a carregar el subtítol (modificat fora del Subtitle Edit): {0}", "suffix": "Sufix", "suggestions": "Suggeriments", "sync": "Sincronitza", @@ -682,6 +751,7 @@ "type": "Tipus", "unbreak": "Desfés el salt de línia del text", "unbreakLines": "Desfés el salt de línia", + "undelete": "Recupera", "underline": "Subratllat", "undo": "Desfés", "unknown": "Desconegut", @@ -719,10 +789,23 @@ "videoCustom3ForwardX": "Vídeo, mil·lisegons personalitzats ({0:#,###,##0}) endavant, 3", "videoCustom4BackX": "Vídeo, mil·lisegons personalitzats ({0:#,###,##0}) enrere, 4", "videoCustom4ForwardX": "Vídeo, mil·lisegons personalitzats ({0:#,###,##0}) endavant, 4", + "videoCustom1BackAndPauseX": "Vídeo, mil·lisegons personalitzats ({0:#,###,##0}) enrere i pausa, 1", + "videoCustom1ForwardAndPauseX": "Vídeo, mil·lisegons personalitzats ({0:#,###,##0}) endavant i pausa, 1", + "videoCustom2BackAndPauseX": "Vídeo, mil·lisegons personalitzats ({0:#,###,##0}) enrere i pausa, 2", + "videoCustom2ForwardAndPauseX": "Vídeo, mil·lisegons personalitzats ({0:#,###,##0}) endavant i pausa, 2", + "videoCustom3BackAndPauseX": "Vídeo, mil·lisegons personalitzats ({0:#,###,##0}) enrere i pausa, 3", + "videoCustom3ForwardAndPauseX": "Vídeo, mil·lisegons personalitzats ({0:#,###,##0}) endavant i pausa, 3", + "videoCustom4BackAndPauseX": "Vídeo, mil·lisegons personalitzats ({0:#,###,##0}) enrere i pausa, 4", + "videoCustom4ForwardAndPauseX": "Vídeo, mil·lisegons personalitzats ({0:#,###,##0}) endavant i pausa, 4", "videoExtension": "Extensió del fitxer de vídeo", "videoFile": "Fitxer de vídeo", "videoFileGenerated": "S'ha generat el fitxer de vídeo", "videoFileGeneratedX": "S'ha generat el fitxer de vídeo: \"{0}\"", + "videoFilesGenerated": "S'han generat els fitxers de vídeo", + "xVideosGenerated": "S'han generat {0} vídeos", + "xOfYVideosGenerated": "S'han generat {0} de {1} vídeos", + "savedInX": "Desat a {0}", + "savedInXFolders": "Desat a {0} carpetes", "videoFiles": "Fitxers de vídeo", "videoAndAudioFiles": "Fitxers de vídeo i àudio", "videoOffset": "Desplaçament del vídeo", @@ -780,7 +863,6 @@ "imageFiles": "Fitxer d'imatge", "openAiCompatibleSttEndpoint": "URL del punt final STT", "openAiCompatibleSttApiKey": "Clau API", - "openAiCompatibleSttModel": "Model", "openAiCompatibleSttExtraHeaders": "Capçaleres addicionals", "openAiCompatibleSttTimeout": "Temps d'espera (segons)", "openAiCompatibleSttLanguage": "Pista de llengua", @@ -790,6 +872,9 @@ "dashScopeSttRegion": "Regió", "dashScopeSttEnableWords": "Marques de temps per paraula", "dashScopeSttRegionKeyHint": "Nota: Les claus API d'Alibaba Cloud Model Studio són específiques de la regió - assegureu-vos que la regió seleccionada coincideix amb la regió on es va crear la clau API (Xina vs. Internacional).", + "googleCloudSttProjectId": "ID del projecte (només per a Application Default Credentials)", + "googleCloudSttBucketName": "Bucket d'emmagatzematge (buit = automàtic)", + "googleCloudSttDynamicBatching": "Processament per lots dinàmic (unes 5 vegades més barat, sense garantia de latència)", "onlineSttApiKeyMissing": "Es requereix una clau API. Introduïu la vostra clau API i torneu-ho a provar.", "openAiCompatibleSttAutoTranscribeOnAudioSelection": "Transcriu automàticament la selecció nova de la forma d'ona amb veu a text", "openAiCompatibleSttStream": "Resposta en flux", @@ -847,6 +932,7 @@ "multipleReplace": "Substitució _múltiple...", "fillSelectedLinesWithClipboard": "Omple les línies seleccionades amb el text del porta-retalls", "goToLineNumber": "_Ves al número de línia...", + "commandPalette": "_Paleta d'ordres...", "rightToLeftMode": "Mode de dreta a _esquerra", "modifySelectionDotDotDot": "Modifica la _selecció...", "tools": "E_ines", @@ -854,6 +940,7 @@ "applyDurationLimits": "Aplica els _límits de durada...", "batchConvert": "Conversió per _lots...", "beautifyTimeCodes": "Embelleix els codis de temps...", + "improveTimeCodes": "Millora els codis de temps (alineació forçada)...", "bridgeGaps": "Uneix els _buits...", "applyMinGap": "Aplica l'interval mínim entre subtítols...", "changeCasing": "_Canvia les majúscules i minúscules...", @@ -992,6 +1079,9 @@ "selectCurrentLineWhilePlayingHint": "Selecciona el subtítol actual durant la reproducció {0}", "videoPosition": "Posició del vídeo {0}", "videoPositionTextBox": "Quadre de text de la posició del vídeo {0}", + "toolbarLineBreakX": "Salt de línia {0} (la resta de la barra d'eines continua en una fila nova)", + "initialText": "Text inicial de la línia seleccionada", + "initialTextHint": "El text de la línia seleccionada tal com era quan es va seleccionar la línia", "hideWaveformToolbar": "Amaga la barra d'eines {0}", "resetZoomAndSpeed": "Restableix el zoom i la velocitat de reproducció {0}", "removeBlankLines": "Elimina les línies en blanc {0}", @@ -1005,6 +1095,15 @@ "textPlayHint": "Reprodueix el subtítol actual i atura't al final {0}", "textPauseHint": "Posa en pausa la reproducció {0}", "textNextHint": "Reprodueix el subtítol següent i atura't al final {0}", + "moveSelectedLines": "Mou les línies seleccionades (botons enrere/endavant)", + "moveSelectedLinesAndFollowing": "Mou les línies seleccionades i totes les següents (botons enrere/endavant)", + "moveAllLines": "Mou totes les línies (botons enrere/endavant)", + "moveSelectedLinesBackHint": "Mou les línies seleccionades {0} ms enrere {1}", + "moveSelectedLinesForwardHint": "Mou les línies seleccionades {0} ms endavant {1}", + "moveSelectedLinesAndFollowingBackHint": "Mou les línies seleccionades i totes les següents {0} ms enrere {1}", + "moveSelectedLinesAndFollowingForwardHint": "Mou les línies seleccionades i totes les següents {0} ms endavant {1}", + "moveAllLinesBackHint": "Mou totes les línies {0} ms enrere {1}", + "moveAllLinesForwardHint": "Mou totes les línies {0} ms endavant {1}", "guessStartNoLineSelected": "Endevina l'inici: no hi ha cap línia seleccionada", "guessStartTimeCodesLocked": "Endevina l'inici: els codis de temps estan blocats", "guessStartNoWaveform": "Endevina l'inici: no hi ha forma d'ona", @@ -1026,12 +1125,15 @@ "charactersPerSecond": "Caràcters/segon: {0}", "chooseColumn": "Trieu la columna", "columnPaste": "Enganxa la columna", + "commandPaletteTitle": "Paleta d'ordres", + "commandPaletteSearchPlaceholder": "Escriviu per cercar ordres...", + "commandPaletteNoCommandsFound": "No hi ha cap ordre coincident", "createdEmptyTranslation": "S'ha creat una traducció buida a partir del subtítol actual", "deleteText": "Suprimeix el text", "deleteTextAndShiftCellsUp": "Suprimeix el text i desplaça les cel·les amunt", "endTimeMustBeAfterStartTime": "El temps final ha de ser posterior al temps d'inici.", "errorLoad7Zip": "Sembla que aquest fitxer és un fitxer comprimit 7-Zip.\n\nEl Subtitle Edit no pot obrir fitxers comprimits.", - "errorLoadBinaryZeroes": "Aquest fitxer només conté zeros binaris!\n\nSi heu editat aquest fitxer amb el Subtitle Edit, potser podeu trobar-ne una còpia de seguretat a l'element de menú Fitxer -> Restaura la còpia de seguretat automàtica...", + "errorLoadBinaryZeroes": "Aquest fitxer només conté zeros binaris!\n\nSi heu editat aquest fitxer amb el Subtitle Edit, potser podeu trobar-ne una còpia de seguretat a l'element de menú Fitxer -> Restaura la còpia de seguretat automàtica...", "errorLoadGZip": "Sembla que aquest fitxer és un fitxer comprimit GZip.\n\nEl Subtitle Edit no pot obrir fitxers comprimits.", "errorLoadLargeFile": "Aquest fitxer és massa gran per obrir-lo com a fitxer de subtítols.", "errorLoadVideoFilePrompt": "Sembla que aquest fitxer és un fitxer de vídeo:\n{0}\n\nPodeu obrir un vídeo amb \"Vídeo -> Obre el vídeo\" o arrossegant-lo i deixant-lo anar al reproductor de vídeo.\n\nVoleu obrir-lo com a fitxer de vídeo?", @@ -1064,11 +1166,14 @@ "numberOfLinesEvenlyDistributedX": "S'han distribuït uniformement {0} línies", "oneLineCopiedFromOriginal": "S'ha copiat una línia del subtítol original", "oneLineCopiedToOriginal": "S'ha copiat una línia al subtítol original", + "onlineOnlyVideo": "Vídeo només en línia", + "onlineOnlyVideoXSizeYDownloadAndOpen": "El fitxer de vídeo «{0}» ({1}) només està emmagatzemat en línia, per exemple al Dropbox o a l'iCloud Drive, i s'ha de baixar abans de poder-lo obrir.\n\nVoleu baixar-lo i obrir-lo ara?", "oneLineMerged": "S'ha fusionat una línia", "oneLineSwitched": "S'ha intercanviat una línia", "overwriteExistingCells": "Sobreescriu les cel·les existents", "overwriteOrShiftCellsDown": "Sobreescriu/desplaça les cel·les avall", "parsingMatroskaFile": "S'està analitzant el fitxer Matroska...", + "readingDvdSubtitles": "S'estan llegint els subtítols del DVD...", "pasteFromClipboardDotDotDot": "Enganxa del porta-retalls...", "redoPerformed": "S'ha refet", "redoPerformedXActionLeft": "S'ha refet (accions restants: {0})", @@ -1108,12 +1213,14 @@ "trimmedXLines": "S'han retallat {0} línies de subtítol", "pastedXLinesOverSelectedLines": "S'han enganxat {0} línia/línies sobre les línies seleccionades", "pastedXOfYLinesOverSelectedLines": "S'han enganxat {0} de {1} línia/línies sobre les línies seleccionades - la resta no cabia a la selecció", + "insertedXLinesFromClipboard": "S'han inserit {0} línies des del porta-retalls", "openOriginalDifferentNumberOfSubtitlesXY": "El fitxer de subtítols original no té el mateix nombre de subtítols que el fitxer de subtítols actual.\n\n• Subtítols originals: {0}\n• Subtítols actuals: {1}", "originalTextReadOnly": "Text original (només de lectura)", "originalTextEditMode": "Text original (mode d'edició)", "originalIsReadOnlyNotSaved": "El subtítol original és una referència només de lectura i no s'ha desat", "originalIsEmptyNotSaved": "El subtítol original no té gens de text i no s'ha desat", "originalIsReadOnlyReference": "El subtítol original està obert com a referència només de lectura", + "closeTranslationQuestionXY": "Voleu tancar la traducció «{0}»?\n\nEl subtítol original «{1}» passa a ser el subtítol que editeu. El fitxer de traducció en si no es modifica.", "allowEditOfOriginalSubtitle": "Permet editar el subtítol original", "showAllOriginalLinesX": "Mostra totes les línies originals ({0} no tenen coincidència aquí)", "showAllOriginalLinesHint": "Les línies sense coincidència es mostren com a files addicionals, per veure què li falta a la traducció.", @@ -1148,6 +1255,7 @@ "fileExportedInFormatXToY": "S'ha exportat el fitxer en format {0} a {1}", "fileExportedInFormatXToFileY": "S'ha exportat el fitxer en format \"{0}\" al fitxer \"{1}\"", "fixedXLines": "S'han corregit {0} línies", + "toolXChangedYLines": "{0}: s'han canviat {1} línies", "transcriptionCompletedWithXLines": "S'ha completat la transcripció amb {0} línies", "openSubtitleFileX": "Voleu obrir el fitxer de subtítols \"{0}\"?", "replacedXOccurrences": "S'han substituït {0} coincidències", @@ -1238,6 +1346,21 @@ "formattingDotDotDot": "Format...", "imageBasedSubtitleForEditDotDotDot": "Subtítol basat en imatges per editar...", "imageBasedSubtitleForOcrDotDotDot": "Subtítol basat en imatges per a OCR...", + "dvdSubtitlesDotDotDot": "Subtítols de DVD (IFO/VOB)...", + "titleImportDvd": "Importa subtítols de DVD", + "dvdIfoFile": "Fitxer IFO", + "dvdVobFiles": "Fitxers VOB", + "dvdVideoStandard": "Estàndard de vídeo", + "dvdStartRipping": "Comença l'extracció", + "dvdRippingAborted": "S'ha interromput l'extracció", + "dvdOpenIfoFile": "Obre un fitxer IFO de DVD", + "dvdAddVobFiles": "Afegeix fitxers VOB", + "dvdIfoFiles": "Fitxers IFO de DVD", + "dvdVobFileType": "Fitxers VOB de DVD", + "dvdDropHint": "Obriu un fitxer IFO (VIDEO_TS\\VTS_01_0.IFO) o afegiu fitxers VOB, o deixeu-los anar aquí", + "dvdNotAnIfoFileX": "{0} no és un fitxer IFO de DVD", + "dvdMenuIfoNoTitleSetsX": "No s'ha trobat cap conjunt de títols (VTS_xx_0.IFO) al costat de {0}", + "dvdEncryptedXOfY": "{0} dels {1} paquets de subtítols encara estan xifrats amb CSS: aquests fitxers VOB es van copiar sense desxifrar, de manera que algunes imatges dels subtítols estaran malmeses.\n\nDesxifreu primer el DVD amb una eina d'extracció de DVD per obtenir un resultat net.\n\nVoleu continuar igualment?", "splitTextAt": "Divideix el text a", "blankLines": "Línies en blanc", "oneLineIsOneSubtitle": "Una línia és un subtítol", @@ -1257,8 +1380,13 @@ "forcedAlignerProgress": "S'està alineant... finestra {0} de {1}, {2} de {3} línies", "forcedAlignerSetupTitle": "Alinea els codis de temps amb un alineador forçat", "forcedAlignerSetupIntro": "Un alineador forçat fa coincidir el text de subtítols que ja teniu amb l'àudio, sense transcriure'l abans. Els vídeos llargs s'alineen per fragments, de manera que funciona amb qualsevol durada.", + "forcedAlignerEndsFromSpeech": "Estableix els temps finals a partir de la veu aïllada (lent)", + "forcedAlignerEndsFromSpeechHint": "Un alineador forçat troba on comença una línia, no on acaba, de manera que els temps finals normalment provenen del temps de lectura. Amb aquesta opció activada, primer s'eliminen la música i els efectes de so de l'àudio i cada línia acaba on la seva veu queda en silenci. Triga aproximadament el mateix que el vídeo amb una GPU, i moltes vegades més sense.", + "forcedAlignerIsolatingSpeech": "S'està aïllant la veu... {0}", + "forcedAlignerIsolatingSpeechFailed": "No s'ha pogut aïllar la veu; els temps finals s'han establert a partir del temps de lectura.", "forcedAlignerModel": "Model d'alineador", - "forcedAlignerDownloadEngine": "Baixa / actualitza el motor..." + "forcedAlignerDownloadEngine": "Baixa / actualitza el motor...", + "forcedAlignerEstimatedXOfY": "{0} de {1} línies no s'han pogut alinear i s'han col·locat segons el temps de lectura; els seus codis de temps només són estimats. Probablement el guió és més llarg que el que es diu al vídeo." }, "export": { "exportImagesProfiles": "Perfils d'exportació d'imatges", @@ -1308,8 +1436,17 @@ "fullFrameImage": "Imatge de fotograma complet", "fullFrameImageHint": "Fes que cada imatge tingui la mida del fotograma del vídeo, amb el subtítol al seu lloc", "stereo3D": "3D", + "stereo3DHint": "Per a vídeo 3D: dibuixa el subtítol una vegada a cada meitat del fotograma (una per ull)", + "halfSideBySide": "Mig costat a costat", + "halfTopBottom": "Mig a dalt/a baix", "depth3D": "Profunditat", + "depth3DHint": "Quant sobresurt el subtítol de la pantalla: un valor positiu l'apropa, un de negatiu l'allunya", + "plane3D": "Pla 3D", + "plane3DHint": "Dona a cada subtítol la profunditat que hi desa un Blu-ray 3D, a partir d'un fitxer de pla 3D (.ofs) creat amb BD3D2MK3D o OFSExtractor. S'utilitza la profunditat on el pla 3D no en té", + "openPlane3DTitle": "Obre un fitxer de pla 3D", + "unableToLoadPlane3DX": "No s'ha pogut carregar el pla 3D: {0}", "plane3DXDepthYToZ": "{0} (profunditat {1} a {2})", + "plane3DXNoDepth": "{0} (sense valors de profunditat)", "textEffect": "Efecte de text", "textEffectSettingsTitle": "Configuració de l'efecte de text", "textEffectPreset": "Predefinit", @@ -1416,9 +1553,20 @@ "deleteAllSubtitleBackups": "Voleu suprimir tots els fitxers de còpia de seguretat de subtítols?", "deleteAll": "Suprimeix-ho tot", "subtitles": "Subtítols", + "settingsBackupInfo": "Es fa una còpia de seguretat de Settings.json quan s'inicia el Subtitle Edit, com a màxim una vegada cada {0} dies i només si la configuració ha canviat. Es conserven les {1} còpies més recents.", + "settingsBackupInfoEveryStart": "Es fa una còpia de seguretat de Settings.json cada vegada que s'inicia el Subtitle Edit, si la configuració ha canviat. Es conserven les {0} còpies més recents.", + "settingsBackupOff": "La còpia de seguretat automàtica de la configuració està desactivada (Opcions → Configuració → Fitxer).", + "lastSettingsBackupX": "Última còpia de seguretat: {0}", + "noSettingsBackupsYet": "Encara no hi ha còpies de seguretat de la configuració", + "openSettingsBackupFolder": "Obre la carpeta de còpies de seguretat de la configuració", "backUpSettingsNow": "Fes una còpia de seguretat ara", "settingsBackedUp": "S'ha fet una còpia de seguretat de la configuració actual.", - "restoreSettings": "Restaura la configuració" + "restoreSettings": "Restaura la configuració", + "restoreSettingsFromX": "Voleu substituir la configuració actual per la còpia de seguretat de {0}?\n\nPrimer es farà una còpia de seguretat de la configuració actual. Alguns canvis només tenen efecte després de reiniciar el Subtitle Edit.", + "settingsRestored": "S'ha restaurat la configuració. Reinicieu el Subtitle Edit perquè tots els canvis tinguin efecte.", + "settingsRestoreFailed": "No s'ha pogut restaurar la configuració: {0}", + "settingsBackupNotValid": "la còpia de seguretat no és un fitxer de configuració vàlid, de manera que s'ha mantingut la configuració actual", + "deleteAllSettingsBackups": "Voleu suprimir tots els fitxers de còpia de seguretat de la configuració?" }, "propertiesDCinema": { "title": "Propietats de D-Cinema SMPTE", @@ -1432,22 +1580,16 @@ "editRate": "Taxa d'edició", "timeCodeRate": "Taxa del codi de temps", "startTime": "Temps d'inici", - "font": "Lletra", "fontId": "ID de la lletra", "fontUri": "URI de la lletra", - "generate": "Genera", - "fontColor": "Color de la lletra", "chooseColor": "Trieu un color", "fontEffect": "Efecte de la lletra", "effectColor": "Color de l'efecte", - "fontSize": "Mida de la lletra", "topBottomMargin": "Marge superior/inferior", "fadeUpTime": "Temps d'aparició gradual", "fadeDownTime": "Temps de desaparició gradual", - "frames": "Fotogrames", "zPosition": "Posició Z", - "zPositionHelp": "Els números positius allunyen el text, els negatius l'acosten; si la posició Z és zero, aleshores és 2D", - "export": "Exporta..." + "zPositionHelp": "Els números positius allunyen el text, els negatius l'acosten; si la posició Z és zero, aleshores és 2D" }, "webVtt": { "setStylesForSelectedLinesTitle": "Estableix els estils WebVTT per a les línies seleccionades", @@ -1485,11 +1627,61 @@ "ignoreFormatting": "Ignora el format", "ignoreFormattingHint": "Les línies que només difereixen en etiquetes de format, com o {\\an8}, no compten com a diferents", "showOnlyDifferencesInText": "Només les diferències en el text", + "ignoreNumbering": "Ignora la numeració", + "ignoreNumberingHint": "Les línies que només difereixen en el número no compten com a diferents", + "ignoreTimeDifferenceMs": "Tolerància de temps (ms)", + "ignoreTimeDifferenceMsHint": "Els temps d'inici i final que difereixen aquests mil·lisegons o menys no compten com a diferents", + "compareDifferences": "Diferències", + "compareTextDifferences": "Diferències de text", + "compareCurrent": "Actual", + "compareReference": "Referència", + "compareEditable": "Editable", + "compareEditableHint": "Els canvis fets aquí s'apliquen al subtítol quan feu clic a Aplica", + "compareReadOnly": "Només de lectura", + "compareTakeFromReference": "Agafa el text i la temporització de la referència", + "compareInsertFromReference": "Insereix aquesta línia al subtítol actual", + "compareDeleteFromCurrent": "Suprimeix aquesta línia del subtítol actual", + "compareTakeText": "Agafa el text", + "compareTakeTiming": "Agafa la temporització", + "compareEditLine": "Edita la línia", + "compareEditHint": "Ctrl+Enter per desar, Esc per cancel·lar", + "compareEdited": "Editat", + "compareOnePendingChange": "1 canvi pendent", + "compareXPendingChanges": "{0} canvis pendents", + "compareDiscardXChanges": "Voleu descartar els {0} canvis fets a Compara?", + "compareXChangesApplied": "Compara: s'han aplicat {0} canvis", + "compareChangeTextX": "#{0} text de la referència", + "compareChangeTimingX": "#{0} temporització de la referència", + "compareChangeTextAndTimingX": "#{0} text i temporització de la referència", + "compareChangeEditedX": "#{0} editat", + "compareChangeInsertedX": "#{0} inserit", + "compareChangeDeletedX": "#{0} suprimit", + "compareSyncPoint": "Punt de sincronització", + "compareSyncPointHint": "Punt de sincronització: aquestes dues línies sempre es mostren com a parella, i les línies de sobre i de sota s'alineen pel seu compte", + "compareSyncPickCurrent": "Punt de sincronització: utilitza aquesta línia actual", + "compareSyncPickReference": "Punt de sincronització: utilitza aquesta línia de referència", + "compareSyncRemove": "Elimina el punt de sincronització", + "compareClearXSyncPoints": "Neteja els punts de sincronització ({0})", + "compareSyncCurrentPickedX": "S'ha triat l'actual #{0} com a punt de sincronització; seleccioneu la línia de referència corresponent i feu clic a Sincronitza", + "compareSyncReferencePickedX": "S'ha triat la referència #{0} com a punt de sincronització; seleccioneu la línia actual corresponent i feu clic a Sincronitza", + "compareSyncWithCurrentX": "Sincronitza amb l'actual #{0}", + "compareSyncWithReferenceX": "Sincronitza amb la referència #{0}", + "compareSyncApply": "Sincronitza", + "compareSyncPointSetXY": "Punt de sincronització establert: l'actual #{0} i la referència #{1} ara es mostren com a parella", + "compareSyncAlreadyPairedXY": "L'actual #{0} i la referència #{1} ja es mostren com a parella amb el mateix inici; no hi ha res per sincronitzar", + "compareSyncPointShiftedXYZW": "Punt de sincronització establert: l'actual #{0}-#{1} s'ha desplaçat {2} per començar amb la referència #{3}", + "compareChangeSyncShiftXYZ": "#{0}-#{1} desplaçat {2} (punt de sincronització)", + "compareTimingDeltaHint": "Quant més tard (+) o més d'hora (−) comença i acaba la referència respecte a la línia actual", "loadXFromFile": "Carrega \"{0}\" des d'un fitxer", + "compareLoadSavedFile": "Carrega el fitxer desat", "saveCompareHtmlTitle": "Desa el fitxer HTML de comparació", "pickMatroskaTrackX": "Trieu la pista Matroska - {0}", "pickTransportStreamTrackX": "Trieu la pista del flux de transport - {0}", + "chapters": "Capítols", + "dvdVobFilesMissingX": "Falten fitxers VOB (trobat el {0}%)", "pickMp4TrackX": "Trieu la pista MP4 - {0}", + "pickMxfTrackX": "Trieu la pista MXF - {0}", + "pickMpegTrackX": "Trieu la pista MPEG - {0}", "rosettaProperties": "Propietats de Timed Text Rosetta IMSC", "rosettaFontSize": "Mida de la lletra (alçada de la fila)", "propertyTimeBase": "Base de temps", @@ -1499,7 +1691,6 @@ "propertyDefaultRegion": "Regió per defecte", "propertyStyleAttributeName": "Nom de l'atribut d'estil", "propertyTimeCodeFormat": "Format del codi de temps", - "propertyFileExtension": "Extensió del fitxer", "propertyTopOrigin": "Origen superior", "propertyTopExtent": "Extensió superior", "propertyBottomOrigin": "Origen inferior", @@ -1565,7 +1756,8 @@ "findWhat": "Cerca", "descriptionOptional": "Descripció (opcional)", "invalidRegularExpressionX": "Expressió regular no vàlida: {0}", - "regularExpressionTooSlowX": "L'expressió regular s'ha aturat després de {0} segons - s'omet la regla, proveu un patró més senzill" + "regularExpressionTooSlowX": "L'expressió regular s'ha aturat després de {0} segons - s'omet la regla, proveu un patró més senzill", + "moveToCategory": "Mou a la categoria" }, "find": { "searchTextWatermark": "Cerca text...", @@ -1578,7 +1770,9 @@ "replaceIn": "Substitueix/cerca a", "replaceInTextAndOriginal": "Text i text original", "replaceInTextOnly": "Només el text", - "replaceInOriginalOnly": "Només el text original" + "replaceInOriginalOnly": "Només el text original", + "replacedOneOccurrence": "S'ha substituït una coincidència", + "replacedXOccurrences": "S'han substituït {0} coincidències" }, "regularExpressionContextMenu": { "wordBoundary": "Límit de paraula (\\b)", @@ -1606,6 +1800,7 @@ "xLinesYSubtitles": "{0} línies, {1} subtítols", "xLinesYSubtitlesZErrors": "{0} línies, {1} subtítols, {2} error(s)", "couldNotParseAsX": "No s'ha pogut analitzar com a {0}", + "readAsXUseAsY": "No s'ha pogut llegir l'origen com a {1}, però sí com a {0}.\nVoleu utilitzar les línies i continuar desant com a {1}?", "selectedXCharactersYLines": "Seleccionats: {0} caràcters en {1} línia/línies", "replacedXOccurrences": "S'han substituït {0} coincidència/coincidències", "invalidRegularExpression": "Expressió regular no vàlida", @@ -1641,7 +1836,23 @@ "largeChangeWarning": "Canvi gran - sembla una reescriptura, reviseu-ho amb atenció", "mismatchWarning": "No s'assembla a l'original - pot correspondre a una altra línia", "engineError": "No s'ha pogut contactar amb el motor d'IA: {0}", - "playCurrentLineHint": "Reprodueix la línia seleccionada al reproductor de vídeo i atura't al final (també podeu fer doble clic a una línia)" + "playCurrentLineHint": "Reprodueix la línia seleccionada al reproductor de vídeo i atura't al final (també podeu fer doble clic a una línia)", + "editAfterHint": "Feu clic al text de la fila seleccionada per editar la correcció abans d'aplicar-la (Enter desa, Esc cancel·la)", + "template": "Plantilla", + "templatePlaceholder": "Trieu una plantilla per substituir la indicació", + "templateStandard": "Revisió estàndard", + "templateSpeechToText": "Neteja de veu a text", + "templateMachineTranslation": "Correcció de traducció automàtica", + "templateSdh": "SDH / discapacitat auditiva", + "referenceContext": "Context de referència", + "referenceContextInfo": "Opcional. Noms, personatges, glossari, sinopsi o notes d'estil: el model ho tracta com a autoritat per als noms i termes. S'envia amb cada lot.", + "referenceContextPlaceholder": "Noms: Kaito, tia Mei, Dr. Hollis\nTermes: Shinkansen, nucli de curvatura\nSinopsi: el Kaito viatja a Tòquio per trobar el seu pare desaparegut.", + "generateContext": "Genera amb IA", + "generateContextHint": "Deixa que el motor d'IA seleccionat llegeixi el subtítol i redacti noms, termes i una sinopsi; comproveu el resultat abans d'utilitzar-lo", + "generatingContextPartXOfY": "S'està llegint la part {0} de {1}...", + "generatingContextSynopsis": "S'està escrivint la sinopsi...", + "replaceContextQuestion": "Voleu substituir el context de referència actual?", + "noContextGenerated": "El motor d'IA no ha retornat cap informació de referència utilitzable." }, "aiAssistant": { "title": "Assistent d'IA", @@ -1687,6 +1898,7 @@ "removeLineBreaksPixelWidth": "Desfés el salt dels subtítols que caben en una línia (amplada en píxels)", "fixUppercaseIInsideLowercaseWords": "Corregeix la 'i' majúscula dins de paraules en minúscules (error d'OCR)", "fixDoubleApostrophes": "Corregeix els apòstrofs dobles ('') per una cometa doble (\")", + "fixMisreadQuotes": "Corregeix els apòstrofs llegits erròniament com a cometes dobles (OCR, anglès)", "addPeriods": "Afegeix un punt després de les línies on la línia següent comença amb majúscula", "startWithUppercaseLetterAfterParagraph": "Comença amb majúscula després d'un paràgraf", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Comença amb majúscula després d'un punt dins del paràgraf", @@ -1709,6 +1921,7 @@ "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Foo
bar! -> Foo bar!", "fixDoubleApostrophesExample": "''Has double single quotes'' -> \"Has single double quote\"", + "fixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "addPeriodsExample": "Hello world -> Hello world.", "startWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: Foobar!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Hello there! how are you? -> Hello there! How are you?", @@ -1798,6 +2011,8 @@ "fixMinDurationMs": "Corregeix la durada mínima (ms)", "doNotGoPastShotChange": "No passis del canvi de pla", "fixMaxDurationMs": "Corregeix la durada màxima (ms)", + "fixMinDurationFrames": "Corregeix la durada mínima (fotogrames)", + "fixMaxDurationFrames": "Corregeix la durada màxima (fotogrames)", "minimumDurationMilliseconds": "Durada mínima (mil·lisegons):", "maximumDurationMilliseconds": "Durada màxima (mil·lisegons):", "maxDurationShouldBeHigherThanMinDuration": "La durada màxima hauria de ser superior a la durada mínima", @@ -1848,16 +2063,67 @@ "timeCodesHint": "Ajusta els cues als temps reals dels fotogrames del vídeo en lloc de suposar uns fotogrames per segon constants. Cal llegir tot el vídeo una vegada; el resultat es desa a la memòria cau." }, "improveTimeCodes": { + "title": "Millora els codis de temps (alineació forçada)", + "aligner": "Alineador", + "alignerHint": "El model que escolta cada línia a l'àudio. Les millors opcions per a la llengua del subtítol es mostren primer.", + "maxShift": "Desplaçament màxim (segons)", + "maxShiftHint": "Fins a quin punt el subtítol pot estar desincronitzat. Una línia l'inici de la qual es desplaçaria més es deixa com està i es marca. Sigui quin sigui el valor, una sola línia que es vulgui moure més de mig segon més que les línies del voltant no es mou a cegues: segueix les veïnes quan totes s'han mogut, i en cas contrari s'ofereix desmarcada perquè la comproveu.", + "adjustStartTimes": "Ajusta els temps d'inici", + "adjustEndTimes": "Ajusta els temps finals", + "isolateSpeech": "Aïlla primer la veu (lent)", + "isolateSpeechHint": "Elimina la música i els efectes de so abans d'alinear, de manera que l'alineador només sent el diàleg. Ajuda en línies dites sobre música forta o acció, però triga aproximadament el mateix que l'àudio amb una GPU, i moltes vegades més sense.", + "isolatingSpeech": "S'està aïllant la veu... (pot trigar una estona)", + "isolateSpeechFailed": "No s'ha pogut aïllar la veu; s'ha alineat amb l'àudio original.", + "checkWithSpeechToText": "Comprova amb veu a text", + "checkWithSpeechToTextHint": "També transcriu l'àudio i comprova cada moviment respecte a on realment s'han sentit les paraules. Els moviments grans que la veu confirma es marquen automàticament, i els moviments que s'allunyen d'on se sent una línia es deixen desmarcats perquè els comproveu. També mostra quina part de cada línia s'ha sentit: una proporció baixa vol dir que el text difereix del que es diu. Un subtítol més desincronitzat que el desplaçament màxim (un desfasament constant, una deriva per fotogrames per segon incorrectes o salts on s'han tallat escenes) es sincronitza primer amb les paraules sentides. Utilitza Crisp ASR Parakeet, que triga uns minuts per a un llargmetratge amb una GPU.", + "checkWithSpeechToTextNotAvailableX": "La comprovació amb veu a text no està disponible per a {0}", + "transcribingToCheck": "S'està transcrivint per comprovar l'alineació...", + "speechToTextFailed": "Ha fallat la veu a text; els codis de temps no s'hi han comprovat.", + "speechToTextX": "Veu a text: {0}", + "speechToTextConfirmedXDisputedY": "Veu: {0} confirmades, {1} qüestionades", + "hardlyHeardX": "La veu a text només ha sentit el {0}% de les paraules del subtítol. El subtítol està en la llengua que es parla? L'alineador no pot col·locar una traducció.", + "heard": "Sentit", + "heardHint": "Quina part de la línia ha sentit la veu a text. Una proporció baixa vol dir que el text difereix del que es diu, que és on és més probable que l'alineador s'equivoqui.", + "statusConfirmedBySpeech": "Confirmat per la veu", + "statusDisputedBySpeech": "Sentit on era", + "statusMovedWithSync": "Mogut amb la sincronització", + "syncedFirstXY": "Sincronitzat primer: {0} s a l'inici, {1} s al final", + "showSpeechOnly": "Mostra només la veu", + "showSpeechOnlyHint": "Dibuixa la forma d'ona alineada a partir de l'àudio sense música ni efectes de so; la forma d'ona original es manté igual, per comparar. Disponible un cop s'ha aïllat la veu, aquí o amb «Mostra només la veu» a la forma d'ona de la finestra principal.", "align": "Alineació", "original": "Original", "aligned": "Alineat", + "intro": "Trieu un alineador i premeu «Alinea» per escoltar cada línia a l'àudio i ajustar-ne els codis de temps.", + "extractingAudio": "S'està extraient l'àudio...", + "aligningBatchXOfY": "S'està alineant... lot {0} de {1}", + "extractAudioFailed": "No s'ha pogut extreure l'àudio amb ffmpeg.", + "modelWillBeDownloaded": "Es baixarà {0}", + "summaryXRetimedYKeptZSkipped": "Retemporitzades: {0} · Mantingudes: {1} · Sense veu: {2}", + "meanShiftX": "Desplaçament mitjà: {0} ms", + "toCheckX": "Per comprovar: {0}", + "largeMovesToCheckX": "{0} línies es mourien molt per si soles i es deixen desmarcades; escolteu-les (F5 reprodueix la línia alineada, Shift+F5 l'original) i marqueu les que siguin correctes.", + "linesToCheckX": "{0} línies es deixen desmarcades per comprovar; escolteu-les (F5 reprodueix la línia alineada, Shift+F5 l'original) i marqueu les que siguin correctes.", + "changeXOfY": "Canvi {0} de {1}", "previousChange": "Canvi anterior", "nextChange": "Canvi següent", "startShift": "Inici", "endShift": "Final", + "statusRetimed": "Retemporitzada", + "statusMovedWithNeighbours": "Moguda amb les veïnes", + "statusLargeMoveUnconfirmed": "Moviment gran: escolteu-la i marqueu-la per aplicar", + "statusUnchanged": "Ja és al seu lloc", "statusNoSpeech": "Sense veu", + "statusShiftTooLarge": "Mantinguda: desplaçament massa gran", + "statusFailed": "Mantinguda: ha fallat l'alineador", + "statusAdjustedByHand": "Ajustada manualment", + "alignedWaveformHint": "Arrossegueu una línia per moure-la, o arrossegueu-ne les vores per canviar-ne l'inici o el final.", + "playLine": "Reprodueix la línia", + "undoAdjustment": "Desfés l'ajust", + "playPause": "Reprodueix / pausa", "playAligned": "Alineat", - "apply": "Aplica" + "playAlignedHint": "Reprodueix la línia seleccionada amb els codis de temps alineats", + "apply": "Aplica", + "applyHint": "Desmarqueu una línia per mantenir-ne els codis de temps originals. Feu doble clic en una línia per reproduir-la. Les línies també es poden moure o redimensionar a la forma d'ona alineada." }, "beautifyTimeCodesProfile": { "title": "Edita el perfil d'embelliment dels codis de temps", @@ -1865,7 +2131,11 @@ "presetDefault": "Per defecte", "presetNetflix": "Netflix", "presetSdi": "SDI", - "general": "General", + "saveAsProfile": "Desa com a perfil...", + "deleteProfile": "Suprimeix el perfil", + "profileName": "Nom del perfil", + "overwriteProfileX": "Ja existeix un perfil anomenat «{0}». Voleu sobreescriure'l?", + "deleteProfileX": "Voleu suprimir el perfil «{0}»?", "gap": "Interval", "gapSuffix": "fotogrames (també actualitza els camps d'interval diferents de zero de sota)", "milliseconds": "ms", @@ -1896,6 +2166,10 @@ "bridgeGaps": { "bridgeGapsSmallerThan": "Uneix els buits menors de (ms)", "minGap": "Interval mínim (ms)", + "bridgeGapsSmallerThanFrames": "Uneix els buits més petits que (fotogrames)", + "minGapFrames": "Interval mínim (fotogrames)", + "calculateBridgeGapsSmallerThanDotDotDot": "Calcula el límit d'unió de buits a partir dels fotogrames per segon...", + "useXMsAsBridgeGapsSmallerThan": "Voleu unir els buits més petits que «{0}» mil·lisegons?", "numberOfSmallGapsBridgedX": "Nombre de buits petits units: {0}", "percentFoPrevious": "Interval per a l'anterior (%)", "gapChange": "Canvi d'interval" @@ -1929,6 +2203,7 @@ "addColor": "Afegeix color", "deleteLinesWithSpecificActorsOrStyles": "Suprimeix les línies amb aquests actors o estils (separeu-los amb comes)", "useSourceStylesIfPossible": "Utilitza els estils d'origen si és possible", + "keepSourceEmbeddedFonts": "Mantén les lletres incrustades de l'origen (peu)", "editStyles": "Edita els estils", "editProperties": "Edita les propietats", "editAttachments": "Edita els adjunts", @@ -1960,17 +2235,50 @@ "convertColorsToDialogReBreakLines": "Torna a saltar les línies", "snapTimeCodesToFramesInfo": "Arrodoneix tots els temps d'inici i final al fotograma més proper. Els fotogrames per segon es llegeixen d'un fitxer de vídeo amb el mateix nom que el fitxer de subtítols, tret que se'n triï un valor fix.", "addFolderDotDotDot": "Afegeix una carpeta...", + "addFolderRecursiveDotDotDot": "Afegeix una carpeta de manera recursiva...", "selectFolderToConvert": "Seleccioneu la carpeta amb els fitxers a convertir", "includeSubfolders": "Inclou les subcarpetes en afegir una carpeta", + "videoFilesWhenAddingFolder": "Fitxers de vídeo (mkv, mp4, ts...) en afegir una carpeta", + "videoFilesAsk": "Pregunta", + "videoFilesInclude": "Afegeix-ne les pistes de subtítols", + "videoFilesSkip": "Omet", + "folderContainsXVideoFiles": "La carpeta conté {0} fitxers de vídeo (mkv, mp4, ts...).\n\nVoleu afegir també les pistes de subtítols incrustades, o només els fitxers de subtítols?", + "addVideoFiles": "Afegeix els fitxers de vídeo", + "skipVideoFiles": "Només fitxers de subtítols", + "doNotAskAgainVideoFiles": "No ho tornis a preguntar (es pot canviar a la configuració de la conversió per lots)", + "settingsSectionOutput": "Sortida", + "settingsSectionAddingFiles": "Addició de fitxers", + "settingsSectionImageBasedSubtitles": "Subtítols basats en imatges (OCR)", + "settingsSectionOther": "Altres", "keepSourceFileTimestamp": "Mantén la data/hora del fitxer d'origen als fitxers de sortida", + "preventSleepWhileConverting": "Evita que l'ordinador entri en repòs durant la conversió", "scanningFolderX": "S'està analitzant {0}...", + "transportStreamSettings": "Configuració del flux de transport", + "transportStreamSettingsDotDotDot": "Configuració del flux de transport...", + "transportStreamSettingsInfo": "S'aplica a les pistes de subtítols extretes de fitxers de flux de transport (.ts/.m2ts). La posició i la mida del vídeo només afecten les pistes d'imatge DVB exportades a un format basat en imatges.", "transportStreamOverrideXPosition": "Sobreescriu la posició X original", "transportStreamOverrideYPosition": "Sobreescriu la posició Y original", "transportStreamOverrideVideoSize": "Sobreescriu la mida original del vídeo", "transportStreamBottomMargin": "Marge inferior", + "transportStreamFileNameEnding": "Final del nom del fitxer", + "transportStreamFileNameEndingInfo": "S'afegeix abans de l'extensió per a cada pista extreta. Deixeu-ho buit per utilitzar el sufix de llengua habitual.", "transportStreamOnlyTeletext": "Només teletext", + "transportStreamGetSizeFromVideo": "Obtén la mida del vídeo...", "twoLetterLanguageCodeUppercase": "Codi de llengua de dues lletres (en majúscules)", - "threeLetterLanguageCodeUppercase": "Codi de llengua de tres lletres (en majúscules)" + "threeLetterLanguageCodeUppercase": "Codi de llengua de tres lletres (en majúscules)", + "formatContainsDotDotDot": "El format conté...", + "extensionIsDotDotDot": "L'extensió és...", + "statusIsError": "L'estat és error", + "forcedTracksOnly": "Només pistes forçades", + "xConvertedYFailedInZ": "{0:#,###,##0} convertits, {1:#,###,##0} fallits en {2}", + "xNotProcessed": "{0:#,###,##0} no processats", + "removeUnicodeControlCharactersTitle": "Elimina els caràcters de control Unicode", + "removeUnicodeControlCharactersInfo": "Elimina del text els caràcters invisibles de control de direcció Unicode (LRM, RLM, LRE, RLE, PDF, LRO i RLO) i substitueix els espais no separables per espais normals.", + "preset": "Predefinit", + "savePresetDotDotDot": "Desa el predefinit...", + "deletePreset": "Suprimeix el predefinit", + "presetName": "Nom del predefinit", + "deletePresetX": "Voleu suprimir el predefinit «{0}»?" }, "changeCasing": { "fixNames": "Corregeix els noms", @@ -1983,6 +2291,7 @@ "allUppercase": "Tot en majúscules", "allLowercase": "Tot en minúscules" }, + "changeFormatting": {}, "convertActors": { "title": "Converteix els actors", "convertActorFrom": "Converteix l'actor de", @@ -2054,10 +2363,13 @@ }, "mergeLinesWithSameText": { "maxMsBetweenLines": "Màxim de mil·lisegons entre línies", - "includeIncrementingLines": "Inclou les línies amb text incremental" + "maxFramesBetweenLines": "Màxim de fotogrames entre línies", + "includeIncrementingLines": "Inclou les línies amb text incremental", + "includeRollUpCaptions": "Inclou els subtítols roll-up (desplaçables)" }, "mergeLinesWithSameTimeCodes": { "maxMsDifference": "Diferència màxima (mil·lisegons)", + "maxFramesDifference": "Diferència màxima (fotogrames)", "makeDialog": "Crea diàlegs" }, "netflixCheckAndFix": { @@ -2157,12 +2469,29 @@ "letterboxCustom": "Alçada de banda personalitzada", "barHeightPx": "Alçada de la banda (px)", "titleSafePercent": "Zona segura del títol (%)", + "moveCaptions": "Mou els subtítols", + "moveCaptionsDotDotDot": "Mou els subtítols...", + "moveCaptionsTo": "Mou els subtítols", + "moveCaptionsIntoBars": "A les bandes negres (fora de la imatge)", + "moveCaptionsIntoPicture": "Dins de la imatge (fora de les bandes)", + "moveCaptionsOffset": "Distància des de la vora (px)", + "letterboxBarHeightXPxYOfZCaptionsWillMove": "Alçada de la banda: {0} px - es mouran {1} de {2} subtítols", + "removeFadeInOut": "Elimina l'aparició/desaparició gradual", + "removeFadeInOutXLinesRemoved": "S'han fusionat {0} línies de transició amb les línies a què pertanyen", + "removeFadeInOutNothingFound": "No s'ha trobat cap línia d'aparició/desaparició gradual", "positionSummary": "{0}×{1} - {2} subtítols - alçada de la banda: {3} px", "xInActivePicture": "{0} a la imatge", "xInTopBar": "{0} a la banda superior", "xInBottomBar": "{0} a la banda inferior", "noImageSubtitlesLoaded": "No s'ha carregat cap subtítol d'imatge", - "imageBasedFormatNotSupported": "Format de subtítols basat en imatges no trobat o no compatible." + "imageBasedFormatNotSupported": "Format de subtítols basat en imatges no trobat o no compatible.", + "frameRateDeclaredInFile": "Fotogrames per segon declarats al fitxer sup de Blu-ray", + "frameRateDetectedFromTimeCodesX": "Fotogrames per segon detectats a partir dels codis de temps del sup de Blu-ray (el fitxer declara {0})", + "frameRateFromVideo": "Fotogrames per segon del vídeo", + "frameRateCurrent": "Fotogrames per segon actuals", + "frameRateSetManually": "Fotogrames per segon establerts manualment", + "frameRateUsageInfo": "Les exportacions a Blu-ray sup, BDN XML, DOST i FCP s'escriuen amb aquests fotogrames per segon. No canvia cap temps; per a això utilitzeu «Canvia els fotogrames per segon».", + "useVideoFrameRateXInsteadOfY": "Els fotogrames per segon del vídeo són {0}, però el subtítol està establert a {1}.\n\nVoleu utilitzar els fotogrames per segon del vídeo ({0})?" }, "removeTextForHearingImpaired": { "interjections": "Interjeccions", @@ -2192,6 +2521,7 @@ "pickFontNameInstalledFonts": "Lletres instal·lades", "pickFontNameCollectedFonts": "Lletres recollides", "colorPickerTitle": "Trieu un color", + "colorPickerBrightness": "Brillantor", "filterLayersTitle": "Filtra les capes per mostrar", "filterLayersHideFromWaveform": "Amaga a la forma d'ona/l'espectrograma", "filterLayersHideFromSubtitleGrid": "Amaga a la graella de subtítols", @@ -2242,7 +2572,21 @@ "correctWordsX": "Paraules correctes: {0}", "namesX": "Noms: {0}", "addedToDictionaryX": "Afegides al diccionari: {0}", - "doNotShowThisAgain": "No tornis a mostrar aquest missatge" + "doNotShowThisAgain": "No tornis a mostrar aquest missatge", + "editUseAlwaysList": "Edita la llista «Utilitza sempre»...", + "useAlwaysListTitle": "Verificació ortogràfica - llista «Utilitza sempre»", + "useAlwaysListHeader": "Llista «Utilitza sempre»", + "useAlwaysListDescription": "Paraules que la verificació ortogràfica substitueix automàticament, desades amb «Canvia-ho tot» i «Utilitza sempre». Un parell només s'utilitza quan la paraula està mal escrita.", + "useAlwaysWord": "Paraula mal escrita", + "xPairs": "{0:#,##0} parells", + "xUnusedPairs": "{0:#,##0} mai utilitzats", + "useAlwaysUnusedHint": "Mai utilitzat: aquesta paraula està ben escrita (o és un nom o una paraula de l'usuari), de manera que la verificació ortogràfica no la marca mai", + "removeUnused": "Elimina els no utilitzats", + "useAlwaysEmpty": "Encara no hi ha parells «Utilitza sempre» per a aquesta llengua", + "useAlwaysEmptyHint": "Els parells s'afegeixen quan feu clic a «Canvia-ho tot» o «Utilitza sempre» a la verificació ortogràfica.", + "useAlwaysNoMatch": "Cap parell coincideix amb la cerca", + "useAlwaysSameWord": "La substitució ha de ser diferent de la paraula.", + "useAlwaysRememberOff": "«Recorda la llista 'Utilitza sempre'» està desactivat a la configuració, de manera que la verificació ortogràfica no utilitza ni desa aquesta llista." }, "video": { "burnIn": { @@ -2255,6 +2599,7 @@ "sampleRate": "Freqüència de mostreig", "audio": "Àudio", "preset": "Predefinit", + "tune": "Ajust (tune)", "pixelFormat": "Format de píxel", "crf": "CRF", "useSource": "Utilitza l'origen", @@ -2266,7 +2611,9 @@ "outputProperties": "Propietats de la sortida...", "videoFileSize": "Mida del fitxer de vídeo", "oneBox": "Una caixa", - "logoInfo": "Trieu una imatge PNG i arrossegueu-la per situar-la al vídeo." + "logoInfo": "Trieu una imatge PNG i arrossegueu-la per situar-la al vídeo.", + "noSubtitlesGenerateAnyway": "No hi ha línies de subtítols per incrustar.\n\nVoleu generar el vídeo sense subtítols?", + "noSubtitlesInXItemsGenerateAnyway": "{0} elements del lot no tenen línies de subtítols per incrustar.\n\nVoleu generar aquests vídeos sense subtítols?" }, "videoTransparent": { "title": "Genera un vídeo transparent amb subtítols" @@ -2277,6 +2624,21 @@ "translateToEnglish": "Tradueix a l'anglès", "transcribing": "S'està transcrivint...", "transcribingXOfY": "S'està transcrivint {0} de {1}...", + "linesTranscribedXOfYFailedZ": "S'han transcrit {0} de {1} línies; {2} han fallat o no tenien veu.\n\nLes línies fallides mantenen el text actual. Voleu aplicar les línies transcrites o tornar a provar les fallides (primer podeu canviar el motor o la configuració)?", + "linesTranscribedXOfYCancelled": "S'ha cancel·lat la transcripció després de {0} de {1} línies.\n\nVoleu aplicar les línies transcrites? Les altres línies mantenen el text actual.", + "noLinesTranscribed": "No s'ha pogut transcriure cap de les {0} línies.\nConsulteu el registre de les eines per obtenir-ne més detalls.", + "applyTranscribedLines": "Aplica les transcrites", + "retryFailedLines": "Torna a provar les fallides", + "isolateSpeech": "Aïlla la veu (lent)", + "isolateSpeechHint": "Elimina la música i els efectes de so abans de transcriure. Fa que es perdin menys línies i millora la temporització en àudio amb música forta, però triga aproximadament el mateix que l'àudio amb una GPU, i moltes vegades més sense.", + "isolatingSpeech": "S'està aïllant la veu...", + "isolateSpeechFailed": "No s'ha pogut aïllar la veu; es transcriu l'àudio original.", + "detectSpeakers": "Detecta els parlants", + "detectSpeakersHint": "Comença cada línia amb el parlant, com ara «(speaker 0)», mitjançant la diarització Sortformer de NVIDIA (fins a 8 parlants). Funciona millor amb motors que divideixen les línies on canvia el parlant, com Parakeet i Cohere.", + "detectSpeakersNeedsNewerCrispAsr": "«Detecta els parlants» necessita Crisp ASR v{0} o posterior, però hi ha instal·lada la v{1}.\n\nActualitzeu Crisp ASR (el botó d'engranatge al costat del motor) o desactiveu «Detecta els parlants».", + "xNeedsNewerCrispAsr": "{0} necessita Crisp ASR v{1} o posterior, però hi ha instal·lada la v{2}.\n\nVoleu baixar i instal·lar l'actualització ara?", + "vad": "VAD", + "vadHint": "Detecció d'activitat de veu: només es transcriu la veu, tallada on el parlant fa pauses.\nAuto: Silero, i només per als motors que ho necessiten (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: sempre activat, per a tots els motors Crisp ASR. FireRedVAD és el més precís; Whisper-VAD fa menys talls i més nets, però és el més lent.\nIndex-Echo sempre utilitza Silero. --vad, --vad-model o --chunk-seconds a la configuració avançada tenen prioritat.", "inputLanguage": "Llengua d'entrada", "advancedWhisperSettings": "Paràmetres avançats de veu a text", "downloadingSpeechToTextEngine": "S'està baixant el motor de veu a text", @@ -2360,6 +2722,19 @@ "videoEncodingSettings": "TTS - Configuració de la codificació de vídeo", "elevenLabsSettings": "TTS - Configuració d'ElevenLabs", "elevenLabsSettingsResetHint": "Restableix la configuració d'ElevenLabs als valors per defecte", + "provider": "Proveïdor", + "openAiCompatibleSettings": "TTS - Configuració compatible amb OpenAI", + "customServerUrl": "URL del servidor personalitzat", + "customServerUrlHint": "Punt final de veu complet d'un servidor compatible amb OpenAI, utilitzat quan el proveïdor és «Custom», p. ex. http://localhost:8880/v1/audio/speech", + "customModels": "Models personalitzats", + "customModelsHint": "Noms de models separats per comes que s'ofereixen quan el proveïdor és «Custom»", + "customVoices": "Veus personalitzades", + "customVoicesHint": "Noms de veus separats per comes, utilitzats pel proveïdor «Custom» i pels models d'OpenRouter que no publiquen cap llista de veus", + "instructions": "Instruccions", + "instructionsHint": "Estil de parla opcional, p. ex. «Parla amb una veu tranquil·la i càlida». Només s'envia als models que ho admeten (no tts-1/tts-1-hd)", + "openAiSpeedHint": "Velocitat de la veu de 0,25 a 4,0 (1,0 és normal). No tots els models ho admeten", + "outputFormat": "Format de sortida", + "outputFormatHint": "Format d'àudio sol·licitat al servidor. «Auto» demana MP3 i canvia a PCM per als models que només retornen PCM (p. ex. Gemini TTS)", "regenerateAudio": "Torna a generar l'àudio", "autoContinuePlaying": "Continua reproduint automàticament", "playLine": "Reprodueix la línia", @@ -2370,8 +2745,11 @@ "importVoiceDotDotDot": "Importa una veu...", "renameVoiceDotDotDot": "Canvia el nom de la veu...", "renameVoiceTitle": "Canvia el nom de la veu", + "voiceXCouldNotBeRenamedX": "No s'ha pogut canviar el nom de la veu «{0}»: {1}", "deleteVoiceDotDotDot": "Suprimeix la veu...", "deleteVoiceTitle": "Suprimeix la veu", + "deleteVoiceXQuestion": "Voleu suprimir la veu «{0}»?\n\nL'enregistrament de referència i els seus fitxers s'eliminen del disc.", + "voiceXCouldNotBeDeletedX": "No s'ha pogut suprimir la veu «{0}»: {1}", "voiceImportSuccessTitle": "Veu importada", "voiceXImported": "La veu «{0}» s'ha importat correctament", "voiceXCouldNotBeImported": "No s'ha pogut importar la veu «{0}» - consulteu el registre per als detalls", @@ -2384,24 +2762,46 @@ "voiceManagerTitle": "TTS - Gestor de veu", "voiceManagerDotDotDot": "Gestor de veu...", "voiceManagerMenuItem": "Gestor de veu TTS...", + "speakFromCurrentLineTitle": "Llegeix en veu alta des de la línia actual", + "speakFromCurrentLineDotDotDot": "Llegeix en veu alta des de la línia actual...", + "speakFromCurrentLineHint": "Llegeix les línies en veu alta una darrere l'altra, començant per la línia actual. Premeu Esc o feu clic a una altra línia per aturar-ho.", + "stopSpeaking": "Atura la lectura", + "speakingLineX": "S'està llegint la línia {0}... (Esc per aturar)", + "playWithSpeechTitle": "Reprodueix amb veu", + "playWithSpeechDotDotDot": "Reprodueix amb veu...", + "playWithSpeechHint": "Reprodueix el vídeo i llegeix cada línia quan el vídeo hi arriba. Feu pausa i cerqueu com sempre; premeu Esc per aturar.", + "lowerVideoVolumeWhileSpeaking": "Abaixa el volum del vídeo mentre es parla", + "pauseVideoWhenSpeechRunsLate": "Posa en pausa el vídeo quan la veu s'allargui fins a la línia següent", + "waitingForSpeechLineX": "S'està generant la veu per a la línia {0}... (Esc per aturar)", "voiceKindClone": "Veu clonada", "voiceKindPreset": "Integrat", "voiceKindModel": "Model de veu", "voiceKindOnline": "En línia", "transcript": "Transcripció", + "transcriptRequiredHint": "Obligatori: el motor llegeix aquesta transcripció de l'enregistrament (ref-text) en clonar", + "transcriptOptionalHint": "Opcional: una transcripció precisa de l'enregistrament millora la clonació", "saveTranscript": "Desa la transcripció", "searchVoices": "Cerca veus", "loadingVoicesDotDotDot": "S'estan carregant veus...", + "noVoicesForEngine": "No hi ha veus: importeu un enregistrament o baixeu un paquet de veu", + "noVoicesMatchFilter": "Cap veu coincideix amb la cerca", "copyVoiceTo": "Copia la veu a", "copyVoiceToDotDotDot": "Copia la veu al motor...", + "copyingVoiceXToYDotDotDot": "S'està copiant la veu «{0}» a {1}...", + "voiceXCopiedToY": "S'ha copiat la veu «{0}» a {1}", + "voiceXCouldNotBeCopiedToY": "No s'ha pogut copiar la veu «{0}» a {1}; consulteu el registre per obtenir-ne més detalls", + "voiceXAlreadyExistsInYContinue": "Ja existeix una veu anomenada «{0}» a {1}.\n\nVoleu copiar-la igualment?", "openVoicesFolder": "Obre la carpeta de veus", "downloadVoicePacksDotDotDot": "Baixa els paquets de veu...", "downloadVoicePacksTitle": "TTS - Baixa els paquets de veu", + "voicePackIntro": "Els paquets de veu són conjunts d'enregistraments curts i nets amb transcripcions, preparats per clonar. Cada paquet s'importa al motor triat (les veus que ja hi són s'ometen) i inclou un ATTRIBUTION.txt amb la seva llicència i fonts.", "voicePackDetailsXVoicesYSizeZLicense": "{0} veus · {1} · {2}", "installToEngine": "Instal·la al motor", "downloadAndInstall": "Baixa i instal·la", + "selectAtLeastOneVoicePack": "Seleccioneu almenys un paquet de veu", "downloadingXDotDotDot": "S'està baixant {0}...", "installingXDotDotDot": "S'està instal·lant {0}...", + "xVoicesInstalledYSkipped": "S'han instal·lat {0} veus ({1} ja hi eren)", "useSpeechToTextDotDotDot": "Utilitza veu a text...", "autoCastMenuItem": "Cerca veus al vídeo i clona-les...", "autoCastSpeakersTitle": "Veus trobades al vídeo", @@ -2420,7 +2820,7 @@ "cloneVoicePerLinePreparing": "S'està prenent la veu de cada línia del vídeo...", "cloneVoicePerLineNeedsVideo": "Per clonar la veu de cada línia cal el vídeo al qual pertany el subtítol. Obriu el vídeo i torneu-ho a provar.", "cloneVoicePerLineNoClips": "No s'ha pogut prendre àudio del vídeo, així que no hi ha res per clonar. Comproveu que el vídeo tingui una pista d'àudio.", - "cloneVoicePerLineNeedsOriginalSubtitleX": "{0} només pot clonar una línia quan sap què es diu al vídeo en aquella línia, cosa que prové del subtítol en la llengua original. No hi ha cap subtítol original carregat, així que totes les línies les diria la primera veu importada en lloc de la veu del vídeo.\n\nObriu el subtítol original (Fitxer > Obre l'original...) al costat de la traducció i torneu a generar.", + "cloneVoicePerLineTranscribeClipsXYZ": "{0} només pot clonar una línia quan sap què es diu al vídeo en aquella línia. Això no se sap per a {1} de {2} línies; normalment prové del subtítol en la llengua original (Fitxer > Obre l'original...).\n\nVoleu transcriure ara aquestes línies del vídeo amb veu a text?\n\nSí: trieu el motor i la llengua que es parla al vídeo, i els fragments de referència es transcriuran abans de generar la veu.\nNo: genera igualment; aquestes línies les dirà una veu normal en lloc de la veu del vídeo.", "voiceCloneConsentTitle": "Clonació de veu - abans de començar", "voiceCloneConsentHeader": "Esteu a punt de clonar una veu", "voiceCloneConsentIntro": "La clonació copia la veu d'una persona real. Això comporta normes a la majoria de llocs i, a la UE, obligacions legals que recauen sobre vós, no sobre el Subtitle Edit. Llegiu això una vegada.", @@ -2437,10 +2837,29 @@ "advancedTtsSettings": "Configuració avançada de TTS", "advancedTtsAudioProcessing": "Processament de l'àudio", "advancedTtsOutput": "Sortida", + "advancedTtsVoiceCloning": "Clonació de veu", + "cleanCloneReferences": "Neteja les referències de clonació de veu (Sidon)", + "cleanCloneReferencesDescription": "Elimina la música, el soroll i la reverberació de l'àudio a partir del qual es clona una veu: fragments presos del vídeo i enregistraments importats al gestor de veu. Utilitza el model de restauració de veu Sidon amb audio.cpp (baixada de 940 MB). La veu clonada ja no copia el fons, però la veu molt baixa o superposada pot sortir esmorteïda.", + "cleaningCloneReferencesDotDotDot": "S'estan netejant les referències de clonació de veu...", + "downloadSidonTitle": "Voleu baixar Sidon?", + "downloadSidonQuestionX": "Per netejar les referències de clonació de veu cal el model de restauració de veu Sidon ({0}).\n\nVoleu baixar-lo ara? Sense ell, les referències s'utilitzen tal com són.", "proAudioPostProcessing": "Postprocessament d'àudio professional", "proAudioPostProcessingDescription": "Afegeix EQ, porta de soroll, compressió, normalització de sonoritat (-16 LUFS) i una breu aparició/desaparició gradual a cada tall.", + "generatingSpeechSegmentXOfY": "S'està generant la veu: segment {0} de {1}", + "adjustingSpeedSegmentXOfY": "S'està ajustant la velocitat: segment {0} de {1}", + "mergingAudioSegmentXOfY": "S'està fusionant l'àudio: segment {0} de {1}", + "postProcessingSegmentXOfY": "Postprocessament: segment {0} de {1}", "audioDucking": "Atenuació de l'àudio", "audioDuckingDescription": "Abaixa el so original del vídeo i hi mescla la veu a sobre, de manera que la pista original queda lleugerament audible. Només s'aplica quan la veu s'afegeix al fitxer de vídeo.", + "removeOriginalSpeech": "Elimina la veu original (lent)", + "removeOriginalSpeechDescription": "Manté la música i els efectes de so del vídeo original però n'elimina la veu, i hi barreja la veu nova a sobre. Triga aproximadament el mateix que el vídeo amb una GPU, i moltes vegades més sense. Amb l'atenuació de l'àudio activada, el seu volum s'aplica a la música i els efectes. Només s'aplica quan la veu s'afegeix al fitxer de vídeo.", + "removingOriginalSpeech": "S'està eliminant la veu original...", + "removeOriginalSpeechFailed": "No s'ha pogut eliminar la veu original; la veu s'ha afegit al vídeo sense fer-ho.", + "speechRemovalModel": "Model", + "speechRemovalModelDescription": "La millor qualitat conserva més música i efectes de so. El ràpid és unes tres vegades més ràpid, amb una mica més de pèrdua de música.", + "speechRemovalBestQuality": "Millor qualitat (Mel-Band RoFormer)", + "speechRemovalFast": "Ràpid (HTDemucs)", + "videoTruncatedWarning": "La imatge del fitxer de vídeo nou s'atura després de {0}, però el vídeo original dura {1}: la imatge es quedarà congelada mentre el so continua.\n\nS'ha conservat el fitxer. Consulteu error-log.txt a la carpeta de dades del Subtitle Edit per veure la sortida de ffmpeg.", "originalVolumePercent": "% del volum original", "vadSilenceCompression": "Compressió de silencis VAD", "vadSilenceCompressionDescription": "Escurça les pauses entre paraules en lloc d'accelerar la parla, de manera que un tall hi cap sense cap pèrdua de qualitat.", @@ -2523,7 +2942,9 @@ "timeCodeFormatColon": "Format del codi de temps:", "shotChangesList": "Llista de canvis de pla", "shotChangesClearQuestion": "Segur que voleu buidar tots els canvis de pla?", - "deleteSelectedShotChangeQuestion": "Segur que voleu suprimir el canvi de pla seleccionat?" + "deleteSelectedShotChangeQuestion": "Segur que voleu suprimir el canvi de pla seleccionat?", + "shotChanges": "Canvis de pla", + "exportShotChanges": "Exporta els canvis de pla" }, "chapters": { "title": "Capítols", @@ -2553,7 +2974,6 @@ "scaleTimesDescription": "Escala tots els temps dels capítols d'uns fotogrames per segon a uns altres.", "fromFrameRate": "De", "toFrameRate": "A", - "apply": "Aplica", "writeToVideo": "Escriu al vídeo...", "writeToVideoTitle": "Escriu els capítols al vídeo", "writeToVideoDescription": "Els capítols s'escriuen en una còpia del fitxer de vídeo. No es torna a codificar res, així que és ràpid i sense pèrdua.", @@ -2563,7 +2983,6 @@ "writtenToX": "S'han escrit els capítols a {0}", "unableToWriteChapters": "No s'han pogut escriure els capítols al fitxer de vídeo.", "chaptersSavedToX": "S'han desat els capítols a {0}", - "noVideoLoaded": "No s'ha carregat cap vídeo", "emptyListCallToAction": "Encara no hi ha capítols - afegiu-ne un a la posició del vídeo o importeu-los d'un vídeo o fitxer." }, "videoOcr": { @@ -2588,10 +3007,10 @@ "runningOcrXY": "S'està executant l'OCR... {0}/{1}", "noLinesFoundTitle": "No s'ha trobat cap subtítol", "noLinesFoundMessage": "No s'ha trobat text a l'àrea d'escaneig - proveu d'ajustar l'àrea d'escaneig, el motor o la brillantor mínima.", + "ocrStoppedEarlyMessage": "El motor d'OCR s'ha aturat abans de llegir tots els fotogrames, de manera que es conserven les línies trobades fins ara i falta la resta.{0}{0}{1}", "linesFoundX": "S'han trobat {0} línies", "refiningTimingXY": "S'està refinant la temporització... {0}/{1}", "fixOcrErrors": "Corregeix els errors d'OCR", - "dictionary": "Diccionari", "editLineX": "Edita la línia {0}", "downloadDictionaryHint": "Baixeu un diccionari de verificació ortogràfica...", "framesPerSecondHint": "Quants fotogrames per segon s'escanegen. 5 cobreix els subtítols normals; un valor més alt capta línies molt curtes i ajusta millor l'agrupació, però costa més temps d'OCR.", @@ -2609,19 +3028,57 @@ "testOcrRunning": "S'està provant l'OCR al fotograma actual...", "testOcrResultX": "Resultat de la prova: {0}", "testOcrNoTextFound": "Prova: no s'ha trobat text a l'àrea d'escaneig", + "engineSettings": "Configuració del motor d'OCR", "engineBuiltIn": "Integrat en el sistema operatiu", + "engineExternalServer": "Servidor extern (instal·lat i gestionat fora del Subtitle Edit)", + "engineCloudApi": "API al núvol (requereix una clau API)", + "engineNothingToInstall": "No cal instal·lar res", + "engineModelsMissing": "Motor instal·lat, falten models", "website": "Lloc web" }, "backgroundMusic": { "title": "Genera música de fons", "generateBackgroundMusicDotDotDot": "Genera música de fons...", + "preset": "Predefinit", + "prompt": "Indicació", + "tempoBpm": "Tempo (BPM)", "generateSeconds": "Genera (segons)", "seed": "Llavor", "randomSeed": "Aleatori", "outputLength": "Longitud de la sortida", + "outputLengthVideoX": "{0} (durada del vídeo; la música es repeteix sense interrupcions)", "musicVolumePercent": "Volum de música (%)", + "removeExistingAudioTracks": "Elimina les pistes d'àudio existents", + "originalAudioVolumePercent": "Volum de l'àudio original (%)", "saveAudioDotDotDot": "Desa l'àudio...", - "addToVideoDotDotDot": "Afegeix al vídeo..." + "addToVideoDotDotDot": "Afegeix al vídeo...", + "engineInfo": "ACE-Step 1.5 Turbo amb audio.cpp (llicència MIT): s'executa localment", + "presetCooking": "Cuina / rebosteria", + "presetTech": "Tecnologia / ressenya de gadgets", + "presetForest": "Bosc / natura", + "presetRelaxingPiano": "Piano relaxant", + "presetLofiVlog": "Vlog lo-fi", + "presetCorporate": "Corporatiu / explicatiu", + "loadingModel": "S'està carregant el model...", + "composing": "S'està component...", + "generatingAudio": "S'està generant l'àudio...", + "decodingAudio": "S'està descodificant l'àudio...", + "creatingLoop": "S'està creant un bucle continu...", + "resultLoopXYZ": "Bucle: {0} a {1} BPM, coincidència de la unió {2}%", + "resultNoLoopX": "Música a punt: {0}", + "addingMusicToVideo": "S'està afegint la música al vídeo...", + "downloadModelTitle": "Voleu baixar el model de música?", + "downloadModelQuestionX": "Per generar música cal el model ACE-Step 1.5 ({0}).\n\nVoleu baixar el model?", + "downloadingModel": "S'està baixant el model ACE-Step 1.5...", + "saveAudioTitle": "Desa la música de fons", + "audioFileSavedX": "S'ha desat el fitxer d'àudio: {0}", + "unableToGenerateMusic": "No s'ha pogut generar la música", + "unableToAddMusicToVideo": "No s'ha pogut afegir la música al vídeo", + "outputLengthTextToSpeech": "Segueix la veu generada: la música es repeteix sense interrupcions i baixa mentre algú parla", + "addBackgroundMusic": "Afegeix música de fons", + "addBackgroundMusicHint": "Genera música localment amb ACE-Step 1.5 i barreja-la sota la veu; baixa mentre algú parla", + "generatingBackgroundMusicDotDotDot": "S'està generant la música de fons...", + "mixingBackgroundMusicDotDotDot": "S'està barrejant la música de fons..." }, "goToVideoPosition": "Ves a la posició del vídeo", "goToVideoPositionDotDotDot": "Ves a la posició del vídeo...", @@ -2632,20 +3089,47 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "Obre un segon fitxer de subtítols...", "openSecondarySubtitleOnVideoPlayer": "Segon fitxer de subtítols (al reproductor de vídeo)", "removeSecondarySubtitleOnVideoPlayer": "Elimina el segon fitxer de subtítols", + "editSecondarySubtitleSettings": "Edita la configuració del segon subtítol", + "editSecondarySubtitleSettingsDotDotDot": "Edita la configuració del segon subtítol...", + "secondarySubtitleRememberSettings": "Recorda aquesta configuració", + "secondarySubtitleDoNotShowAgain": "No tornis a mostrar aquest diàleg", + "secondarySubtitleJustifyLines": "Justifica les línies", "openRecentVideo": "Obre un vídeo recent", "clearRecentVideos": "Neteja els vídeos recents", "cutVideoTitle": "Retalla el vídeo", "cutVideoDotDotDot": "Retalla el vídeo...", + "remuxVideoTitle": "Remultiplexa el vídeo", + "remuxVideoDotDotDot": "Remultiplexa el vídeo...", "remuxVideoInputVideo": "Vídeo d'entrada:", + "remuxVideoMultipleTracksRequiresMkv": "Diverses pistes d'àudio o de subtítols requereixen el contenidor MKV. El format de sortida s'ha canviat automàticament a .mkv.", "remuxVideoOutputFormat": "Format de sortida:", "remuxVideoOutputFile": "Fitxer de sortida:", + "remuxVideoRemuxing": "S'estan remultiplexant el vídeo i l'àudio...", + "remuxVideoFinalizing": "S'està finalitzant el fitxer de sortida (movent l'índex al principi)...", + "remuxVideoCompleted": "S'ha remultiplexat el vídeo correctament.", + "remuxVideoFailed": "No s'ha pogut remultiplexar el vídeo.", + "remuxVideoPleaseSelectBoth": "Seleccioneu tant el fitxer de vídeo com el d'àudio.", + "remuxVideoAssRequiresMkv": "Els subtítols ASS/SSA requereixen el contenidor MKV per conservar tot el format i els estils.", + "remuxVideoSccRequiresMov": "Els subtítols Scenarist (.scc) s'incrusten com a subtítols tancats CEA-608, que requereixen el contenidor MOV o MPG. El format de sortida s'ha canviat automàticament a .mov.", + "remuxVideoSccNotWithWebM": "Els subtítols tancats Scenarist (.scc) necessiten el contenidor MOV, que no pot contenir el vídeo VP9/AV1 d'un fitxer .webm. Elimineu el fitxer .scc o convertiu-lo a un altre format de subtítols.", + "remuxVideoMpgMaxTwoCaptionTracks": "Un fitxer .mpg conté com a màxim dues pistes de subtítols tancats (CC1 i CC3); elimineu fitxers de subtítols perquè en quedin un o dos.", + "remuxVideoMccRequiresMpg": "Els subtítols MacCaption (.mcc) s'incrusten com a subtítols tancats CEA-608/708 al vídeo MPEG-2, que requereix el contenidor MPG. El format de sortida s'ha canviat automàticament a .mpg.", + "remuxVideoMpgReencodeVideoX": "Els subtítols tancats en un fitxer .mpg necessiten vídeo MPEG-2, i el vídeo és {0}. Voleu tornar a codificar el vídeo a MPEG-2? Triga més i redueix una mica la qualitat.", + "remuxVideoFileHasNoAudioX": "«{0}» no té cap pista d'àudio, de manera que no es pot utilitzar com a font d'àudio.", + "remuxVideoAddingClosedCaptions": "S'estan afegint els subtítols tancats...", "remuxVideoSelectAudioTrack": "Selecciona la pista d'àudio", "remuxVideoSelectAudioTrackFor": "Selecciona la pista d'àudio per a {0}", + "remuxVideoSelectAudioTrackPrompt": "El fitxer «{0}» conté {1} pistes d'àudio. Seleccioneu la pista d'àudio que voleu remultiplexar:", "remuxVideoVideoFile": "vídeo", "remuxVideoAudioFile": "àudio", "remuxVideoAudioFiles": "Fitxers d'àudio:", "remuxVideoSubtitleFiles": "Fitxers de subtítols (opcionals, subtítols suaus):", + "remuxVideoSelectAudioTrackDotDotDot": "Selecciona la pista d'àudio...", "remuxVideoFilesX": "{0} fitxers", + "remuxVideoMixAudio": "Barreja l'àudio en una sola pista", + "remuxVideoVolumePercent": "Volum %:", + "remuxVideoVolumeX": "Volum {0}%", + "remuxVideoFastStart": "Optimitza per a la reproducció en línia (mou l'índex al principi; més lent)", "embedSubtitlesDotDotDot": "Afegeix/elimina subtítols incrustats...", "generateTimeCodes": "Genera codis de temps", "checkeredImage": "Imatge de quadres", @@ -2655,6 +3139,34 @@ "cutVideoSplitSegments": "Desa els segments per separat", "cutVideoAlsoCutSubtitle": "Retalla també el subtítol", "cutVideoSubtitleFileGeneratedX": "S'ha generat el fitxer de subtítols: {0}", + "cutVideoTransition": "Transició entre segments", + "cutVideoTransitionDurationSeconds": "Durada (segons)", + "cutVideoFadeInSeconds": "Fosa des del negre a l'inici (segons)", + "cutVideoFadeOutSeconds": "Fosa a negre al final (segons)", + "cutVideoPreviewTransition": "Previsualitza la transició", + "cutVideoPreviewTransitionTitle": "Vista prèvia de la transició", + "cutVideoPreviewNeedsJoin": "No hi ha cap unió per previsualitzar: afegiu almenys dos segments per fusionar, o un segment per retallar del mig.", + "cutVideoTransitionInfoX": "Cada transició se superposa a les parts que uneix, de manera que la sortida és {0} segons més curta per cada unió. Un subtítol retallat es retemporitza en conseqüència.", + "cutVideoTransitionFade": "Fosa", + "cutVideoTransitionFadeBlack": "Fosa a negre", + "cutVideoTransitionFadeWhite": "Fosa a blanc", + "cutVideoTransitionFadeGrays": "Fosa a gris", + "cutVideoTransitionDissolve": "Encadenat", + "cutVideoTransitionWipeLeft": "Cortina cap a l'esquerra", + "cutVideoTransitionWipeRight": "Cortina cap a la dreta", + "cutVideoTransitionWipeUp": "Cortina cap amunt", + "cutVideoTransitionWipeDown": "Cortina cap avall", + "cutVideoTransitionSlideLeft": "Lliscament cap a l'esquerra", + "cutVideoTransitionSlideRight": "Lliscament cap a la dreta", + "cutVideoTransitionSlideUp": "Lliscament cap amunt", + "cutVideoTransitionSlideDown": "Lliscament cap avall", + "cutVideoTransitionSmoothLeft": "Suau cap a l'esquerra", + "cutVideoTransitionSmoothRight": "Suau cap a la dreta", + "cutVideoTransitionCircleOpen": "Cercle que s'obre", + "cutVideoTransitionCircleClose": "Cercle que es tanca", + "cutVideoTransitionRadial": "Radial", + "cutVideoTransitionPixelize": "Pixelització", + "cutVideoTransitionBlur": "Desenfocament", "importCurrentSubtitle": "Importa el subtítol actual", "addRemoveEmbeddedSubtitlesTitle": "Afegeix/elimina subtítols incrustats", "addRemoveEmbeddedSubtitlesMp4Title": "Afegeix/elimina subtítols incrustats (MP4)", @@ -2670,6 +3182,7 @@ "embeddedTrackGeneratingVideoXY": "S'està generant el vídeo... {0}% {1}", "embeddedTrackGeneratingVideo": "S'està generant el vídeo...", "mp4FilesFilter": "Fitxers MP4", + "embeddedTracksPickVideoHint": "Trieu un fitxer de vídeo, o deixeu-lo anar aquí, per veure'n les pistes de subtítols.", "viewMatroskaTrackX": "Mostra la pista Matroska - {0}", "resolutionSeparator": "x", "openFromUrlTitle": "Obre un fitxer de vídeo des d'un URL", @@ -2716,12 +3229,15 @@ "reEncodeGeneratingDone": "Generació acabada", "reEncodeGeneratedFilesX": "Fitxers generats ({0}):", "reEncodeFfmpegParameters": "Paràmetres de ffmpeg", + "analyzingVideoX": "S'està analitzant el vídeo... {0}% {1}", + "analyzingVideoXofY": "S'està analitzant el vídeo {0}/{1}... {2}% {3}", + "backgroundImageFileNotSelected": "No s'ha seleccionat cap fitxer d'imatge de fons", + "backgroundImageFileDoesNotExistX": "El fitxer d'imatge de fons no existeix: {0}", "voices": "Veus", "presets": "Predefinits", "talkerX": "Parlant {0}", "baseModel": "Model base", "turboModel": "Model turbo", - "ttsUpdateX": "Actualitza {0}", "ttsEngineNotInstalled": "{0} no està instal·lat", "ttsEngineUpdateAvailable": "{0} - hi ha una actualització disponible", "ttsEngineTooOldUpdateRequired": "{0} és massa antic - cal actualitzar-lo", @@ -2744,9 +3260,17 @@ "cloneVoiceTo": "Clona la veu a", "cloneVoiceNameTitle": "Nom de la veu nova", "cloneVoiceExtractFailed": "No s'ha pogut extreure l'àudio de la línia seleccionada.", + "lineXHasNoDuration": "La línia {0} no té durada (el temps final no és posterior al temps d'inici), de manera que no hi ha àudio per extreure.", + "audioClipsSkippedLinesX": "No s'ha pogut extreure àudio per a aquestes línies, de manera que s'han omès: {0}", "toggleShotChange": "Commuta el canvi de pla", "resetWaveformZoomAndSpeed": "Restableix el zoom i la velocitat de la forma d'ona", "showOriginalSubtitle": "Mostra el subtítol original", + "timelineGroupTracksBy": "Agrupa les pistes de subtítols per", + "timelineShowThumbnails": "Mostra les miniatures del vídeo", + "showSpeechOnly": "Mostra només la veu (lent de generar)", + "isolatingSpeechForWaveformX": "S'està aïllant la veu per a la forma d'ona... {0}", + "isolatingSpeechForWaveformFailed": "No s'ha pogut aïllar la veu per a la forma d'ona; consulteu el registre de les eines", + "speechOnlyWaveformReady": "La forma d'ona ara només mostra la veu", "showOnlyWaveform": "Mostra només la forma d'ona", "showOnlySpectrogram": "Mostra només l'espectrograma", "showWaveformAndSpectrogram": "Mostra la forma d'ona i l'espectrograma", @@ -2779,6 +3303,7 @@ "adjustSelectedLinesAndForward": "Ajusta les línies seleccionades i les següents", "toFrameRate": "Als fotogrames per segon", "fromFrameRate": "Dels fotogrames per segon", + "videoXFrameRateY": "{0} - {1} fps", "adjustAllTimes": "Ajusta tots els temps (mostra abans/després)", "showEarlier": "Mostra abans", "showLater": "Mostra després", @@ -2788,7 +3313,8 @@ "syncPoints": "Punts de sincronització", "pointSync": "Sincronització per punts", "pointSyncViaOther": "Sincronització per punts amb un altre subtítol", - "syncPointCandidateInfo": "Les línies que comencen després de {0}+ segons de silenci es ressalten - sovint són bons punts de sincronització", + "syncPointCandidateAfterInfo": "Es ressalten les línies seguides de {0} segons o més de silenci: sovint són punts de sincronització fiables", + "gapAfter": "Interval després", "adjustAllShortcuts": "Dreceres de teclat:\n\n• Maj + Esquerra/Dreta: mou 10 ms\n• Ctrl + Esquerra/Dreta: mou 100 ms\n• Alt + Esquerra/Dreta: mou 500 ms", "adjustAllShortcutsFrames": "Dreceres de teclat:\n\n• Maj + Esquerra/Dreta: mou 1 fotograma\n• Ctrl + Esquerra/Dreta: mou 10 fotogrames\n• Alt + Esquerra/Dreta: mou 1 segon", "offsetInSeconds": "Desplaçament en segons", @@ -2808,6 +3334,7 @@ "lineMerge": "Fusió de línies", "delayInSecondsBetweenRequests": "Retard en segons entre peticions", "maxBytesPerRequest": "Màxim de bytes per petició", + "keepMusicLinesUntranslated": "No tradueixis les línies entre símbols musicals (♪ ... ♪)", "promptText": "Text de la indicació", "resetPromptToDefault": "Restableix la indicació al valor per defecte", "translateEachLineSeparately": "Tradueix cada línia per separat", @@ -2821,11 +3348,10 @@ "readyToTranslate": "A punt per traduir", "translating": "S'està traduint...", "translationComplete": "Traducció completada", + "translateInPlaceNoOriginal": "Tradueix in situ (no creïs l'original)", "translationCancelled": "Traducció cancel·lada", "swapLanguages": "Intercanvia les llengües d'origen i de destí", "xIsAlreadyDownloadedReDownload": "{0} ja s'ha baixat. Voleu tornar-lo a baixar?", - "advancedDotDotDot": "Avançat...", - "advancedSettings": "Configuració avançada", "advancedSettingsSubtitle": "Opcions de lots, context i mostreig per al motor avançat llama.cpp", "context": "Context", "synopsis": "Sinopsi", @@ -2849,6 +3375,7 @@ "useOnlyExtraServerParametersHint": "Inicia llama-server amb els paràmetres de dalt en lloc de l'ajust propi del Subtitle Edit - només s'estableixen el model, l'amfitrió i el port", "serverRunningAtX": "El servidor s'executa a {0}", "customPromptHint": "Instruccions personalitzades ({0} = llengua d'origen, {1} = llengua de destí); buit = indicació integrada", + "editTranslationHint": "Feu clic a la traducció de la fila seleccionada per editar-la (Enter desa, Esc cancel·la)", "llamaCppDownloadEngineAndModelPrompt": "El llama.cpp requereix baixar el motor llama-server i un model de traducció. Voleu baixar-los ara?", "llamaCppDownloadEnginePrompt": "El llama.cpp requereix baixar el motor llama-server. Voleu baixar-lo ara?", "llamaCppDownloadModelPrompt": "El llama.cpp requereix baixar el model de traducció seleccionat. Voleu baixar-lo ara?" @@ -2919,6 +3446,7 @@ "showGridLines": "Mostra les línies de la graella", "showHorizontalLineAboveToolbar": "Mostra una línia horitzontal sobre la barra d'eines", "bookmarkColor": "Color dels marcadors", + "spellCheckHighlightColor": "Color de ressaltat de la verificació ortogràfica", "singleLineMaxLength": "Llargària màxima d'una línia", "optimalCharsPerSec": "Caràcters/s òptims", "maxCharsPerSec": "Màxim de caràcters/s", @@ -2943,13 +3471,21 @@ "useDoNotBreakAfterList": "Utilitza la llista de no-saltar-després", "newEmptyDefaultMs": "Durada per defecte dels subtítols nous (ms)", "timeCodeUpDownStepMs": "Increment de temps amunt/avall (ms)", + "moveSelectedLinesStepMs": "Pas de la drecera per moure les línies seleccionades (ms)", + "moveStartEndStepMs": "Pas de la drecera per moure l'inici/final (ms)", + "moveLinesShortenNeighbor": "Mou les línies: escurça la línia anterior/següent en lloc de superposar-s'hi", "promptBeforeDelete": "Demana confirmació abans de suprimir", "rememberPositionAndSize": "Recorda la posició i la mida de la finestra", + "titleBarFullFileName": "Mostra el camí complet del fitxer a la barra de títol", + "showRecentFiles": "Mostra els fitxers recents (per tornar-los a obrir)", "openLastFileOnStart": "Obre l'últim fitxer recent en iniciar", "autoSave": "Desat automàtic (desa el fitxer obert mentre s'edita)", "autoBackupOn": "Còpia de seguretat automàtica", "autoBackupIntervalMinutes": "Interval de la còpia de seguretat automàtica (minuts)", "autoBackupDeleteAfterDays": "Retenció de les còpies de seguretat automàtiques (dies)", + "settingsBackupOn": "Còpia de seguretat automàtica de la configuració", + "settingsBackupIntervalDays": "Interval de còpia de seguretat de la configuració (dies, 0 = a cada inici)", + "settingsBackupMaxCount": "Còpies de seguretat de la configuració que es conserven", "autoConvertToUtf8": "Converteix automàticament la codificació a UTF-8 en obrir", "autoTrimWhiteSpace": "Retalla automàticament els espais en blanc", "removeBlankLinesWhenOpening": "Elimina les línies en blanc en obrir un subtítol", @@ -2966,7 +3502,10 @@ "colorGapTooShort": "Acoloreix si l'interval és massa curt", "errorBackgroundColor": "Color de fons dels errors", "waveformDrawGridLines": "Dibuixa les línies de la graella", + "waveformUseSkiaRenderer": "Utilitza el renderitzador ràpid experimental", "waveformCenterVideoPositionAlsoWhenPaused": "Centra la posició del vídeo també en pausa", + "waveformSelectCurrentSubtitleWhilePaused": "Selecciona el subtítol actual també mentre està en pausa", + "waveformRememberZoom": "Recorda el zoom (horitzontal i vertical)", "waveformShowToolbar": "Mostra la barra d'eines", "waveformShowToolbarEdit": "Edita la barra d'eines...", "waveformShowToolbarEditLabel": "Elements de la barra d'eines", @@ -3014,18 +3553,25 @@ "webVttUseXTimestampMap": "WebVTT: utilitza X-TIMESTAMP-MAP (desplaça els codis de temps en carregar)", "assaAutoSetResolution": "ASSA: estableix la resolució (PlayResX/PlayResY) a partir del vídeo quan se n'obre un", "assaAutoSetResolutionPrompt": "ASSA: pregunta abans de canviar la resolució perquè coincideixi amb el vídeo (si no, remostreja automàticament)", - "showStopButton": "Mostra el botó d'aturada", - "showFullscreenButton": "Mostra el botó de pantalla completa", + "videoControls": "Controls de vídeo", + "videoControlsEdit": "Edita els controls de vídeo...", + "videoControlsPositionText": "Text de posició / durada", + "videoControlsVideoFileName": "Nom del fitxer de vídeo", + "videoControlsPlayerName": "Nom del reproductor de vídeo", "fullscreenHideControls": "Amaga els controls de vídeo a pantalla completa", + "showSecondarySubtitleDialog": "Mostra el diàleg d'estil en obrir un segon fitxer de subtítols", + "rememberSecondarySubtitleFile": "Recorda el segon fitxer de subtítols", "autoOpenVideoFile": "Obre automàticament el fitxer de vídeo en obrir el subtítol", "downloadMpv": "Baixa l'mpv", "downloadVlc": "Baixa el VLC", "allowSingleLetterShortcutsInTextbox": "Permet dreceres d'una sola lletra al quadre de text", + "allowTextNavigationShortcutsInTextbox": "Permet dreceres a les tecles de navegació de text (Ctrl+Left/Right, Home/End) al quadre de text", "spellCheckEnglishTreatInApostropheAsIng": "Verificació ortogràfica: tracta les paraules acabades en 'in'' com a 'ing' (només anglès)", "goToLineNumberSetsVideoPosition": "Ves al número de línia també estableix la posició del vídeo", "adjustAllTimesRememberLineSelectionChoice": "Ajusta tots els temps, recorda la tria de selecció de línies", "mergeKeepEndTime": "Fusiona les línies: mantén el temps final (permet superposar-se al subtítol següent)", "mergeKeepEndTimeOnlyAssa": "Fusiona les línies: mantén el temps final només per a «Advanced Sub Station Alpha»", + "mergeAutoBreak": "Fusiona les línies: salt automàtic del text fusionat (desactivat manté els salts de línia propis de les línies)", "filesAndLogs": "Fitxers i registres", "showErrorLogFile": "Mostra el fitxer de registre d'errors", "showToolsLogFile": "Mostra el fitxer de registre de les eines", @@ -3034,6 +3580,7 @@ "showAssaLayer": "Mostra el quadre de capa ASSA", "waveformCursorColor": "Color del cursor/capçal de la forma d'ona", "waveformShotChangeColor": "Color dels canvis de pla de la forma d'ona", + "waveformGridColor": "Color de la graella de la forma d'ona", "waveformParagraphLeftColor": "Color de la vora esquerra de la forma d'ona", "waveformParagraphRightColor": "Color de la vora dreta de la forma d'ona", "waveformFancyHighColor": "Color alt elegant de la forma d'ona", @@ -3061,10 +3608,15 @@ "resetSyntaxColoring": "Restableix la coloració de la sintaxi", "resetWaveform": "Restableix la forma d'ona", "resetRules": "Restableix les regles", - "useFrameMode": "Utilitza el mode de fotogrames (hh.mm.ss.ff)", + "timeCodeMode": "Mode de codi de temps", + "timeCodeModeTime": "Temps (hh:mm:ss,zzz)", + "timeCodeModeFrames": "Fotogrames (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "Números de fotograma", + "frameModeSnapToVideoFrames": "Desa els temps en fotogrames del vídeo (no en fotogrames dins de cada segon)", "textBoxLimitNewLines": "Limita el nombre de línies al quadre de text del subtítol", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - Renderització per programari (lenta)", + "mpvMetalRendering": "libmpv - Metal (experimental, cal reiniciar)", "mpvWidRendering": "libmpv - Renderització amb ID de finestra natiu", "waveFormsAndSpectrogramFoldersContainsX": "Les carpetes «Waveforms» i «spectrogram» contenen {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "Voleu suprimir els fitxers de «Waveforms» i «Spectrogram»?", @@ -3077,8 +3629,10 @@ "waveformExtractAudioSampleRate": "Freqüència de mostreig d'extracció de l'àudio", "waveformExtractAudioSampleRateOriginal": "Original (mantén l'origen)", "waveformExtractAudioBitRate": "Taxa de bits d'extracció de l'àudio (MP3/M4A)", + "ffmpegUseCenterChannelOnly": "Utilitza només el canal central frontal per a l'àudio 5.1 (FFmpeg)", "vlcWidRendering": "libVLC - Renderització amb ID de finestra natiu", "ffmpegSoftwareRendering": "FFmpeg", + "downloadFfmpegLibs": "Baixa les biblioteques FFmpeg (per al reproductor de vídeo FFmpeg)", "subtitleGridEnterKeyAction": "Acció de la tecla Retorn a la graella de subtítols", "subtitleSingleClickAction": "Acció del clic simple a la graella de subtítols", "subtitleDoubleClickAction": "Acció del doble clic a la graella de subtítols", @@ -3106,6 +3660,7 @@ "subtitleGridFormattingShowFormatting": "Mostra el format", "subtitleGridFormattingShowTags": "Mostra les etiquetes", "subtitleGridFormattingHideTags": "Amaga les etiquetes", + "subtitleGridFormattingShowFormattingKeepTags": "Mostra el format, mantén les etiquetes no visuals", "waveformParagraphBackgroundColor": "Color de fons dels subtítols a la forma d'ona", "waveformParagraphSelectedBackgroundColor": "Color de fons del subtítol seleccionat a la forma d'ona", "waveformAllowOverlap": "Permet la superposició (en moure/redimensionar)", @@ -3121,9 +3676,12 @@ "splitOddLinesAction": "Acció en dividir línies senars", "ocrUseWordSplitList": "OCR: utilitza la llista de divisió de paraules", "ocrGuessUnknownWords": "OCR: intenta endevinar les paraules desconegudes", + "spellCheckRememberUseAlwaysList": "Verificació ortogràfica: recorda la llista «Utilitza sempre»", + "fixShortDisplayTimesAllowMoveStartTime": "Corregeix els errors comuns: corregir els temps de visualització curts pot moure el temps d'inici", "speechToTextSelectedLinesPromptFirstTimeOnly": "Veu a text: línies seleccionades, demana la llengua/el motor només el primer cop", "multipleReplaceShowDotDotDotButtons": "Substitució múltiple: mostra els botons del menú contextual", "gridFocusTextboxAfterInsertNew": "Graella: enfoca el quadre de text després d'inserir un subtítol nou", + "undoRedoGoToChangedLine": "Desfés/refés: ves a la línia canviada (i a la posició del vídeo)", "musicSymbol": "Símbol musical", "musicSymbolsToReplace": "Símbols musicals a substituir (separats per comes)", "textToSpeechPromptMergeContinuationLines": "Text a veu: demana si cal fusionar les línies de continuació", @@ -3132,6 +3690,7 @@ "useFocusedButtonBackgroundColor": "Utilitza un color de fons per al botó enfocat", "focusedButtonBackgroundColor": "Color de fons del botó enfocat", "forceCrLfOnSave": "Força CR+LF en desar (fitxers de subtítols de text)", + "linuxClipboardUseExternalTool": "Copia el text amb xclip/wl-copy (conserva els caràcters accentuats)", "showFormatLimitWarning": "Avisa en desar quan les línies superin els límits del format (p. ex. SCC 32 car./línia)", "textBoxButtonShowAutoBreak": "Quadre de text: mostra el botó de salt automàtic", "textBoxButtonShowUnbreak": "Quadre de text: mostra el botó de desfés el salt", @@ -3143,12 +3702,18 @@ "waveformDoubleClickAction": "Acció del doble clic a la forma d'ona (després de l'acció del clic simple)", "allSettings": "Tota la configuració", "uiScale": "Escala de la interfície (%)", + "fontScale": "Escala de la lletra (%)", + "textSelectionOpacity": "Opacitat de la selecció de text (%)", "waveformToolbarItems": "Elements de la barra d'eines de la forma d'ona", "matchIconColorToDarkTheme": "Fes coincidir el color de les icones amb el color de primer pla del tema fosc", "subtitlePreviewProperties": "Propietats de la vista prèvia del subtítol", "usePositionFromSubtitleFile": "Utilitza la posició del fitxer de subtítols (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "El marge forma part de l'àrea del subtítol", "textJustify": "Justifica les línies", + "deinterlace": "Desentrellaça el vídeo", + "deinterlaceOff": "Desactivat", + "deinterlaceAuto": "Automàtic (només fotogrames entrellaçats)", + "deinterlaceAlways": "Sempre", "pixelWidthInfo": "Línies verdes = límit d'amplada màxima | Àrea vermella = el text supera el límit", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3157,7 +3722,16 @@ "waveformColorTheme": "Tema de color:", "waveformSaveAsCustomTheme": "Desa com a tema personalitzat...", "waveformLoadThemeDotDotDot": "Carrega un tema...", - "waveformExportThemeDotDotDot": "Exporta el tema..." + "waveformExportThemeDotDotDot": "Exporta el tema...", + "waveformSaveCustomThemeTitle": "Desa el tema personalitzat", + "waveformThemeFileType": "Tema de forma d'ona del Subtitle Edit", + "waveformThemeHighContrast": "Contrast alt", + "waveformThemeOceanBlue": "Blau oceà", + "waveformThemeWarmSunset": "Posta de sol càlida", + "waveformThemeForest": "Bosc", + "waveformThemeMidnightPurple": "Porpra de mitjanit", + "waveformThemeRetroAmber": "Ambre retro", + "waveformThemeIce": "Gel" }, "shortcuts": { "searchShortcuts": "Cerca dreceres...", @@ -3168,11 +3742,34 @@ "categoryVideo": "Vídeo", "categorySync": "Sincronització", "categoryAi": "IA", + "categoryCustom": "Personalitzat", + "editCustomShortcut": "Edita la drecera personalitzada", + "customShortcutTextBoxKeyHint": "Utilitzeu aquí una tecla amb Ctrl/Alt: una tecla sola ja no escriuria al quadre de text.", + "customShortcutNumberX": "Drecera personalitzada #{0}", + "customShortcutNumberXY": "Drecera personalitzada #{0}: {1}", + "customShortcutStep": "Pas", + "customShortcutSteps": "Passos", + "customShortcutStepRunCommand": "Executa una ordre", + "customShortcutStepInsertText": "Insereix text", + "customShortcutStepReplace": "Cerca i substitueix", + "customShortcutInsertAtCursor": "Al cursor", + "customShortcutInsertAtStart": "A l'inici del text", + "customShortcutInsertAtEnd": "Al final del text", + "customShortcutSummaryRunCommandX": "Executa: {0}", + "customShortcutSummaryInsertXY": "Insereix «{0}» ({1})", + "customShortcutSummaryReplaceXY": "Substitueix «{0}» per «{1}»", + "customShortcutSummaryReplaceRegexXY": "Substitueix l'expressió regular «{0}» per «{1}»", + "customShortcutPickCommand": "Seleccioneu una ordre per executar.", + "customShortcutEnterText": "Introduïu el text que voleu inserir.", + "customShortcutEnterFind": "Introduïu el text que voleu cercar.", + "customShortcutInvalidRegexX": "Expressió regular no vàlida: {0}", + "customShortcutStepsHint": "Els passos s'executen de dalt a baix. Els passos de text funcionen sobre les línies seleccionades; les ordres que obren una finestra continuen quan es tanca.", "activeIn": "Actiu a", "activeInEverywhere": "Tot arreu", "generalMergeSelectedLinesAndUnbreak": "Fusiona les línies seleccionades i desfés el salt", "generalMergeSelectedLinesAndUnbreakCjk": "Fusiona les línies seleccionades i desfés el salt sense espai (CJK)", "generalUnbreakNoSpaceCjk": "Desfés el salt sense espai (CJK)", + "generalToggleBreak": "Commuta el salt de línia (afegeix/desfés)", "generalMergeSelectedLinesBilingual": "Fusiona les línies seleccionades de manera bilingüe", "generalToggleTranslationMode": "Commuta el mode de traducció", "generalToggleTranslationAndOriginalInPreviews": "Commuta la traducció i l'original a la vista prèvia de vídeo/àudio", @@ -3189,10 +3786,12 @@ "generalToggleItalic": "Commuta la cursiva", "generalToggleBold": "Commuta la negreta", "generalToggleUnderline": "Commuta el subratllat", + "generalToggleBox": "Commuta la caixa (EBU STL)", "fileOpen": "Obre", "fileOpenKeepVideo": "Obre (mantén el vídeo)", "fileSave": "Desa", "fileSaveAs": "Anomena i desa", + "fileSaveOriginal": "Desa l'original", "fileCompare": "Compara", "fileStatistics": "Estadístiques", "fileImportPlainText": "Importa text pla", @@ -3204,6 +3803,7 @@ "fillSelectedLinesWithClipboard": "Omple les línies seleccionades amb el text del porta-retalls", "listInverseSelection": "Inverteix la selecció", "listDeleteSelection": "Suprimeix la selecció", + "deleteSelectionEverywhere": "Suprimeix la selecció (a tot arreu)", "rippleDeleteSelection": "Suprimeix la selecció amb desplaçament", "assigned": "Assignada", "unassigned": "Sense assignar", @@ -3212,6 +3812,7 @@ "detectKey": "Detecta la tecla", "control": "Control", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Maj", "controlMac": "⌃", @@ -3222,6 +3823,11 @@ "resetShortcutsDetail": "Voleu restablir totes les dreceres als valors per defecte?", "togglePlayPause": "Commuta reprodueix/pausa", "toggleLockTimeCodes": "Commuta el bloqueig dels codis de temps", + "toggleTimeCodeMode": "Commuta el mode de codi de temps (temps/fotogrames/números de fotograma)", + "toggleScreenPrivacy": "Commuta la privadesa de pantalla (amaga els noms de fitxer i després també els textos)", + "screenPrivacyFileNamesHidden": "Privadesa de pantalla: noms de fitxer amagats", + "screenPrivacyFileNamesAndTextsHidden": "Privadesa de pantalla: noms de fitxer i textos amagats", + "screenPrivacyOff": "Privadesa de pantalla: desactivada", "duplicateSelectedLines": "Duplica les línies seleccionades", "sourceView": "Vista de codi", "addOrEditBookmark": "Afegeix o edita un marcador", @@ -3240,6 +3846,7 @@ "moveFirstWordFromNextLineUpCurrentSubtitle": "Mou la primera paraula de la línia següent amunt (subtítol actual)", "moveTextFromCursorToNextAndGoToNext": "Mou el text posterior al cursor al subtítol següent i ves-hi", "moveTextFromCursorToNextAndGoToNextAndPlay": "Mou el text posterior al cursor al subtítol següent, ves-hi i reprodueix", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "Mou el text després del cursor al subtítol següent, ves al següent, reprodueix-lo i fes pausa al final", "breakAtFirstSpaceFromCursor": "Salta al primer espai des de la posició del cursor", "breakAtFirstSpaceFromCursorAndGoToNext": "Salta al primer espai des de la posició del cursor i ves al següent", "toggleFocusGridAndWaveform": "Commuta el focus entre la graella de subtítols i la forma d'ona/l'espectrograma", @@ -3269,6 +3876,7 @@ "listViewColumnTextUp": "Columna, text amunt", "listViewColumnTextDown": "Columna, text avall", "autoTranslateSelectedLines": "Tradueix automàticament les línies seleccionades...", + "autoTranslateSelectedLinesNoPrompt": "Tradueix automàticament les línies seleccionades (sense preguntar, utilitza l'últim motor/llengües)", "setAssaResolution": "Estableix la resolució ASSA (PlayResX/PlayResY)", "setShortcutForX": "Estableix la drecera per a \"{0}\"", "commandFileNewKeepVideo": "Nou (mantén el vídeo)", @@ -3323,6 +3931,7 @@ "textBoxItalic": "Cursiva al quadre de text", "textBoxBold": "Negreta al quadre de text", "textBoxUnderline": "Subratllat al quadre de text", + "textBoxBox": "Quadre de text: caixa (EBU STL)", "resetWaveformZoomAndSpeed": "Restableix el zoom de la forma d'ona i la velocitat de reproducció", "togglePlaybackSpeed": "Commuta la velocitat de reproducció", "playbackSpeedSlower": "Velocitat de reproducció més lenta", @@ -3334,6 +3943,7 @@ "seekSilenceForward": "Cerca silenci endavant", "waveformGuessStart": "Endevina el temps d'inici a partir de la forma d'ona", "waveformGuessEnd": "Endevina el temps final a partir de la forma d'ona", + "waveformGuessStartAndEnd": "Endevina el temps d'inici i final a partir de la forma d'ona", "setVideoPositionCurrentSubtitleStart": "Estableix la posició del vídeo a l'inici de la línia actual", "goToSubtitlePositionAndPause": "Ves a la posició del subtítol i pausa", "setVideoPositionCurrentSubtitleEnd": "Estableix la posició del vídeo al final de la línia actual", @@ -3347,6 +3957,14 @@ "surroundWith": "Envolta amb...", "surroundWithXY": "Envolta amb {0}/{1}", "surroundWithNumberX": "Envolta amb #{0}", + "surroundWithBehavior": "Comportament", + "surroundWithBehaviorToggle": "Commuta (afegeix, o elimina si hi és)", + "surroundWithBehaviorAdd": "Afegeix (cada vegada)", + "surroundWithBehaviorRemove": "Elimina (tots)", + "surroundWithBehaviorRemoveOnce": "Elimina (un cada vegada)", + "surroundWithWorksOn": "Funciona sobre", + "surroundWithScopeSelectionOrText": "La selecció, si no tot el text", + "surroundWithScopeEachLine": "Cada línia", "searchVia": "Cerca amb", "searchViaX": "Cerca amb {0}", "searchViaNumberX": "Cerca amb #{0}", @@ -3374,6 +3992,11 @@ "copySubtitlePathToClipboard": "Copia el camí del subtítol al porta-retalls", "copySubtitleOriginalPathToClipboard": "Copia el camí del subtítol original al porta-retalls", "focusTextBox": "Enfoca el quadre de text", + "focusSubtitleListView": "Enfoca la llista de subtítols", + "focusWaveform": "Enfoca la forma d'ona", + "focusOriginalTextBox": "Enfoca el quadre de text original", + "textBoxGoToStart": "Quadre de text, ves a l'inici", + "textBoxGoToEnd": "Quadre de text, ves al final", "sortByNumber": "Ordena per número", "sortByStartTime": "Ordena pel temps de «Mostra»", "sortByEndTime": "Ordena pel temps d'«Amaga»", @@ -3411,9 +4034,9 @@ "selectionToSentenceCase": "Quadre de text: selecció a Majúscula inicial", "selectionToggleCasing": "Quadre de text: commuta les majúscules i minúscules (MAJÚSCULES -> minúscules -> Majúscula Inicial)", "googleIt": "Cerca-ho a Google (text seleccionat)", - "setActorXY": "Estableix l'actor {0}: {1}", + "setActorX": "Estableix l'actor: {0}", "setNewActor": "Estableix un actor nou...", - "setActorSlotXTitle": "Ranura d'actor {0}", + "setStyleX": "Estableix l'estil: {0}", "toggleDialogDashes": "Commuta els guions de diàleg", "mergeWithLineBeforeAsDialog": "Fusiona amb la línia anterior com a diàleg", "mergeWithLineAfterAsDialog": "Fusiona amb la línia següent com a diàleg", @@ -3424,7 +4047,23 @@ "moveStartOneFrameBackKeepGapPrev": "Mou l'inici un fotograma enrere (mantén l'interval amb l'anterior si és a prop)", "moveStartOneFrameForwardKeepGapPrev": "Mou l'inici un fotograma endavant (mantén l'interval amb l'anterior si és a prop)", "moveEndOneFrameBackKeepGapNext": "Mou el final un fotograma enrere (mantén l'interval amb el següent si és a prop)", - "moveEndOneFrameForwardKeepGapNext": "Mou el final un fotograma endavant (mantén l'interval amb el següent si és a prop)" + "moveEndOneFrameForwardKeepGapNext": "Mou el final un fotograma endavant (mantén l'interval amb el següent si és a prop)", + "moveStartXMsBack": "Mou l'inici X ms enrere (X es defineix a la configuració, també a la sincronització visual)", + "moveStartXMsForward": "Mou l'inici X ms endavant (X es defineix a la configuració, també a la sincronització visual)", + "moveEndXMsBack": "Mou el final X ms enrere (X es defineix a la configuració, també a la sincronització visual)", + "moveEndXMsForward": "Mou el final X ms endavant (X es defineix a la configuració, també a la sincronització visual)", + "moveSelectedLinesXMsBack": "Mou les línies seleccionades X ms enrere (X es defineix a la configuració)", + "moveSelectedLinesXMsForward": "Mou les línies seleccionades X ms endavant (X es defineix a la configuració)", + "moveSelectedLinesAndForwardXMsBack": "Mou les línies seleccionades i totes les següents X ms enrere (X es defineix a la configuració)", + "moveSelectedLinesAndForwardXMsForward": "Mou les línies seleccionades i totes les següents X ms endavant (X es defineix a la configuració)", + "moveAllLinesXMsBack": "Mou totes les línies X ms enrere (X es defineix a la configuració)", + "moveAllLinesXMsForward": "Mou totes les línies X ms endavant (X es defineix a la configuració)", + "moveSelectedLinesCustomMsBack": "Mou les línies seleccionades, mil·lisegons personalitzats ({0:#,###,##0}) enrere, {1}", + "moveSelectedLinesCustomMsForward": "Mou les línies seleccionades, mil·lisegons personalitzats ({0:#,###,##0}) endavant, {1}", + "moveSelectedLinesAndForwardCustomMsBack": "Mou les línies seleccionades i totes les següents, mil·lisegons personalitzats ({0:#,###,##0}) enrere, {1}", + "moveSelectedLinesAndForwardCustomMsForward": "Mou les línies seleccionades i totes les següents, mil·lisegons personalitzats ({0:#,###,##0}) endavant, {1}", + "moveAllLinesCustomMsBack": "Mou totes les línies, mil·lisegons personalitzats ({0:#,###,##0}) enrere, {1}", + "moveAllLinesCustomMsForward": "Mou totes les línies, mil·lisegons personalitzats ({0:#,###,##0}) endavant, {1}" }, "wordLists": { "title": "Llistes de paraules", @@ -3470,6 +4109,9 @@ "applyToAllLinesX": "Totes les línies ({0})", "updateAllXAvailable": "Actualitza-ho tot ({0})", "updatingXOfY": "S'està actualitzant {0}/{1}...", + "doNotAskAgain": "No ho tornis a preguntar (es pot canviar a Gestiona els connectors)", + "applyPluginsTo": "Aplica els connectors a", + "askEachTime": "Pregunta cada vegada", "allLines": "Totes les línies" }, "help": { @@ -3514,6 +4156,8 @@ "nOcrDatabase": "Base de dades nOCR", "drawMode": "Mode de dibuix:", "addNewCharcter": "Afegeix un caràcter nou", + "addNOcrCharacterTitle": "Afegeix un caràcter nOCR per a la línia {0}, caràcter {1} de {2}, amb la base de dades «{3}»", + "addBinaryOcrCharacterTitle": "Afegeix un caràcter d'OCR binari per a la línia {0}, caràcter {1} de {2}, amb la base de dades «{3}»", "lineIndexX": "Línia {0}", "inspectNOcrAdditions": "Inspecciona les addicions noves d'nOCR", "ocrSelectedLines": "OCR de les línies seleccionades", @@ -3562,6 +4206,8 @@ "binaryImageCompareInspectImageMatches": "«Comparació d'imatges binàries» - Inspecciona les coincidències d'imatge", "saveBlankTextTitle": "Voleu desar el text en blanc?", "saveBlankTextPrompt": "Voleu desar el text en blanc per a la imatge?", + "drawnLinesDoNotMatchTitle": "Les línies no coincideixen amb la imatge", + "drawnLinesDoNotMatchPrompt": "Algunes de les línies dibuixades no coincideixen amb la imatge (les línies verdes han d'estar sobre el caràcter i les vermelles fora), de manera que aquest caràcter no es reconeixerà.\n\nVoleu desar igualment?", "yesAndNeverAskAgain": "Sí i no ho tornis a preguntar", "importTextFromSubtitleDotDotDot": "Importa text d'un subtítol...", "importTextFromSubtitleOverwritePrompt": "Algunes línies ja tenen text d'OCR. Voleu sobreescriure el text existent?", @@ -3620,9 +4266,26 @@ "crispEmbedSettingsTitle": "Configuració de CrispEmbed", "crispEmbedDescription": "Motor d'OCR local amb diversos motors de model - baixeu aquí el motor i els models.", "trainNOcrDatabase": "Entrena la base de dades nOCR...", + "optimizeNOcrDatabase": "Optimitza la base de dades nOCR...", + "optimizeNOcrDatabaseQuestionXY": "Voleu eliminar les línies que no distingeixen els caràcters d'altres de similars a la base de dades nOCR «{0}»?\n\nAixò fa la base de dades més petita i l'OCR més ràpid, normalment amb menys errors. Triga fins a un minut.\n\nEs desa una còpia de seguretat com a «{1}».", + "optimizingNOcrDatabaseXY": "S'està optimitzant la base de dades nOCR... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "S'ha optimitzat la base de dades nOCR «{0}»: {1:#,##0} -> {2:#,##0} línies.", "startTraining": "Inicia l'entrenament", "abortTraining": "Interromp l'entrenament", "trainingOptions": "Opcions d'entrenament", + "trainNOcrSubtitle": "Renderitza caràcters amb les lletres instal·lades i n'ensenya les formes a nOCR. Trieu les lletres que fan servir els vostres subtítols.", + "xFontsSelected": "{0:#,##0} seleccionades", + "subtitleFonts": "Lletres dels subtítols", + "emptyDatabase": "Base de dades buida", + "startFromDatabase": "Comença des de", + "startFromDatabaseHint": "Afegeix els caràcters entrenats a una còpia d'una base de dades existent (recomanat) o comença des d'una de buida", + "fontSizes": "Mides de lletra", + "fontSizesHint": "Mides de lletra en píxels per renderitzar, separades per comes, p. ex. «30, 40»", + "numberOfLineSegmentsHint": "Línies comprovades per caràcter: més és més estricte però més lent", + "enterDatabaseName": "Introduïu un nom per a la base de dades", + "trainingFontXSizeYCharacterZ": "S'està entrenant «{0}» a {1} px: {2}", + "xLearned": "{0:#,##0} apresos", + "xSkipped": "{0:#,##0} omesos", "charactersToTrain": "Caràcters a entrenar", "letterCombinationsToTrain": "Combinacions de lletres que es podrien dividir en una sola imatge", "importCharactersFromSubtitleFile": "Importa caràcters d'un fitxer de subtítols...", @@ -3649,6 +4312,8 @@ "drawZoomOut": "Redueix (Ctrl+-)", "drawResetView": "Restableix la vista (Ctrl+0)", "drawToggleGrid": "Commuta la graella (Ctrl+G)", + "drawTogglePreview": "Commuta la vista prèvia (F9)", + "drawPreviewFailed": "Ha fallat la vista prèvia: cal ffmpeg amb libass (filtre subtitles)", "drawCopyToClipboard": "Copia al porta-retalls (Ctrl+C)", "drawShapes": "Formes", "drawSelectedPoint": "Punt seleccionat", @@ -3656,6 +4321,81 @@ "drawSelectedLayer": "Capa seleccionada", "drawToolX": "Eina: {0}", "drawHelpText": "Feu clic per afegir punts • Retorn/F8 per tancar la forma • Maj+Arrossega per desplaçar • Ctrl+Roda per fer zoom", + "drawMoveToLayer": "Mou a la capa", + "drawFlipHorizontal": "Inverteix horitzontalment", + "drawFlipVertical": "Inverteix verticalment", + "drawHideShape": "Amaga la forma", + "drawShowShape": "Mostra la forma", + "drawHideLayer": "Amaga la capa", + "drawShowLayer": "Mostra la capa", + "drawDeleteLayer": "Suprimeix la capa", + "drawDeletePoint": "Suprimeix el punt", + "drawCancelDrawing": "Cancel·la el dibuix", + "drawLayerX": "Capa {0}", + "drawImportSvg": "Importa una imatge SVG...", + "drawRotateClockwise": "Gira 90° en sentit horari", + "drawConvertToCurve": "Converteix el segment en corba", + "drawBackground": "Fons", + "drawPosition": "Posició", + "drawZoom": "Zoom", + "drawShapeTool": "Eina de formes", + "drawColorPickerTool": "Agafa el color d'una forma o del fons", + "drawShapeLibrary": "Biblioteca de formes", + "drawShapeLibraryHint": "Arrossegueu sobre el llenç per col·locar una forma, o feu clic per a la mida per defecte. Shift en manté les proporcions.", + "drawAddToLibrary": "Afegeix a la biblioteca de formes...", + "drawRemoveFromLibrary": "Elimina de la biblioteca de formes", + "drawShapeName": "Nom de la forma", + "drawCategorySpeechBubbles": "Bafarades", + "drawCategoryArrows": "Fletxes", + "drawCategoryBasicShapes": "Formes bàsiques", + "drawCategorySymbols": "Símbols", + "drawCategoryMyShapes": "Les meves formes", + "drawShapeSpeechBubble": "Bafarada", + "drawShapeSpeechBubbleRight": "Bafarada, cua a la dreta", + "drawShapeSpeechBubbleUp": "Bafarada, cua amunt", + "drawShapeOvalBubble": "Bafarada ovalada", + "drawShapeBoxBubble": "Bafarada rectangular", + "drawShapeThoughtBubble": "Bafarada de pensament", + "drawShapeShoutBubble": "Bafarada de crit", + "drawShapeCaptionBox": "Requadre de text", + "drawShapeArrow": "Fletxa", + "drawShapeDoubleArrow": "Fletxa doble", + "drawShapeChevron": "Galó", + "drawShapeCurvedArrow": "Fletxa corba", + "drawShapeRoundedRectangle": "Rectangle arrodonit", + "drawShapeTriangle": "Triangle", + "drawShapeDiamond": "Rombe", + "drawShapePentagon": "Pentàgon", + "drawShapeHexagon": "Hexàgon", + "drawShapeOctagon": "Octàgon", + "drawShapeStar": "Estrella", + "drawShapeRing": "Anell", + "drawShapePlus": "Més", + "drawShapeBanner": "Bàner", + "drawShapeHeart": "Cor", + "drawShapeCheck": "Marca de verificació", + "drawShapeMusicNote": "Nota musical", + "drawShapeMusicNotes": "Notes musicals", + "drawShapeLightning": "Llamp", + "drawShapeCloud": "Núvol", + "drawShapeMoon": "Lluna", + "drawShapeBadge": "Insígnia", + "drawSize": "Mida", + "drawLayer": "Capa", + "drawBackgroundVideoFrame": "Fotograma del vídeo (posició actual)", + "drawBackgroundVideoFrameAt": "Fotograma del vídeo a...", + "drawBackgroundImage": "Fitxer d'imatge...", + "drawBackgroundNone": "Sense fons", + "drawBackgroundStretch": "Estira la imatge al llenç", + "drawBackgroundOpacity": "Opacitat del fons", + "drawBackgroundVideoFrameFailed": "No s'ha pogut obtenir un fotograma del vídeo a {0}.", + "drawImages": "Imatges", + "drawConvertToLine": "Converteix el segment en línia", + "drawConvertShapeToCurves": "Converteix totes les línies en corbes", + "drawConvertShapeToLines": "Converteix totes les corbes en línies", + "drawRotateCounterClockwise": "Gira 90° en sentit antihorari", + "drawSvgImages": "Imatges SVG", + "drawSvgNoShapes": "No s'ha trobat cap forma plena ni traç al fitxer SVG.", "progressBarTitle": "Barra de progrés ASSA", "progressBarSettings": "Barra de progrés", "mouseOverColor": "Color en passar-hi el ratolí", @@ -3752,13 +4492,26 @@ "graphics": "Gràfics", "copyToStorageStyles": "Copia als estils emmagatzemats", "copyToFileStyles": "Copia als estils del fitxer", + "styleXAlreadyExistsInStorage": "Ja existeix un estil anomenat «{0}» als estils emmagatzemats.\n\nVoleu sobreescriure'l o conservar tots dos (la còpia rep un nom nou)?", + "styleXAlreadyExistsInFile": "Ja existeix un estil anomenat «{0}» al fitxer.\n\nVoleu sobreescriure'l o conservar tots dos (la còpia rep un nom nou)?", + "styleNameCannotBeEmpty": "El nom d'un estil no pot estar buit.", + "styleNameXIsUsedMoreThanOnce": "El nom d'estil «{0}» l'utilitza més d'un estil al fitxer.", + "overwrite": "Sobreescriu", + "keepBoth": "Conserva tots dos", + "doThisForAllConflictingStyles": "Fes això per a tots els estils en conflicte", "setStyleAsDefault": "Estableix l'estil com a predeterminat", "takeUsagesFromDotDotDot": "Pren els usos de...", "replaceStyleWithDotDotDot": "Substitueix l'estil per...", "noAttachmentsFound": "No s'ha trobat cap adjunt al fitxer ASSA seleccionat.", "deleteStyleQuestion": "Voleu suprimir l'estil?", "deleteStylesQuestion": "Voleu suprimir els estils?", + "deleteXStylesQuestion": "Voleu suprimir {0} estils?", + "deleteXStylesFromStorageQuestion": "Voleu suprimir {0} estils dels estils emmagatzemats?", + "deleteStyleXFromStorageQuestion": "Voleu suprimir l'estil «{0}» dels estils emmagatzemats?", + "deleteStyleXFromFileQuestion": "Voleu suprimir l'estil «{0}» del fitxer actual?", "openStyleImportFile": "Obre un fitxer de subtítols del qual importar estils", + "styleImportFiles": "Fitxers d'estil (.ass, .sty, categories .template del Subtitle Edit 4)", + "ssaStyleImportFiles": "Fitxers d'estil (.ssa, .ass, .sty)", "primary": "Primari", "secondary": "Secundari", "applyOverrideTags": "Aplica etiquetes de substitució", diff --git a/src/ui/Assets/Languages/Central Kurdish.json b/src/ui/Assets/Languages/Central Kurdish.json index af5dc226ef3..7e93e5a052a 100644 --- a/src/ui/Assets/Languages/Central Kurdish.json +++ b/src/ui/Assets/Languages/Central Kurdish.json @@ -1,12 +1,70 @@ { "title": "Subtitle Edit", - "version": "v5.2.0-rc7", + "version": "v5.3.0", "translatedBy": "", "cultureName": "ckb-IQ", "general": { + "prompt": "پرۆمپت", + "preset": "پێش-ڕێکخستن", + "output": "دەرچوون", + "outputFormat": "فۆرماتی دەرچوون", + "other": "ئەوانی تر", + "timeCodeFormat": "فۆرماتی کۆدی کات", + "topBottomMargin": "پەراوێزی سەرەوە/خوارەوە", + "theme": "ڕووکار", + "brightness": "ڕووناکی", + "chooseColor": "هەڵبژاردنی ڕەنگ", + "lineX": "دێڕی {0}", + "playLine": "لێدانی دێڕ", + "maxLineLength": "زۆرترین درێژی دێڕ", + "maxCharsPerSec": "زۆرترین پیت/چرکە", + "maxNumberOfLines": "زۆرترین ژمارەی دێڕ", + "subtitles": "ژێرنووسەکان", + "shotChanges": "گۆڕانی دیمەنەکان", + "chapters": "بەشەکان", + "audio": "دەنگ", + "interjections": "هاوار و دەنگەکان", + "blankLines": "دێڕە بۆشەکان", + "editWholeText": "دەستکاری تەواوی دەق", + "noTextInClipboard": "هیچ دەقێک لە کلیپبۆرددا نییە", + "noSubtitlesFoundTitle": "هیچ ژێرنووسێک نەدۆزرایەوە", + "replacedXOccurrences": "{0} دووبارەبوونەوە جێگیرکرانەوە", + "invalidRegularExpressionX": "دەربڕینی ئاسایی هەڵەیە: {0}", + "discardChangesTitle": "پشتگوێخستنی گۆڕانکارییەکان؟", + "downloadingXDotDotDot": "داگرتنی {0}...", + "importTimeCodesDotDotDot": "هێنانەناوی کۆدەکانی کات...", + "original": "ڕەسەن", + "nextChange": "گۆڕانکاری دواتر", + "previousChange": "گۆڕانکاری پێشوو", + "changeXOfY": "گۆڕینی {0} لە {1}", + "tooLong": "زۆر درێژ", + "tooShort": "زۆر کورت", + "overlapping": "تێکەڵبوون", + "detail": "وردەکاری", + "fixOcrErrors": "چاککردنی هەڵەکانی OCR", + "runningOcrXY": "جێبەجێکردنی OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp پێویستی بە داگرتنی بزوێنەری llama-server هەیە. ئێستا دابگریت؟", "abort": "وازهێنان", "actor": "ئەکتەر", "actors": "ئەکتەرەکان", + "setActorDotDotDot": "دانانی ئەکتەر...", + "actorPickerTitle": "دانانی ئەکتەر", + "actorPickerFilterHint": "بنووسە بۆ پاڵاوتن، یان ناوی ئەکتەرێکی نوێ بنووسە", + "actorPickerKeysHint": "ژمارەیەک یان Enter دابگرە بۆ دانانی ئەکتەر. Alt+Up/Down ڕیزبەندی دەگۆڕێت، Delete ئەکتەرەکە لادەبات.", + "actorPickerNewActorX": "ئەکتەری نوێ \"{0}\"", + "actorPickerLinesSelectedX": "دێڕە هەڵبژێردراوەکان: {0}", + "setStyleDotDotDot": "دانانی شێواز...", + "stylePickerTitle": "دانانی شێواز", + "stylePickerFilterHint": "بنووسە بۆ پاڵاوتن، یان ناوی شێوازێکی نوێ بنووسە", + "stylePickerKeysHint": "ژمارەیەک (1-9، 0) دابگرە بۆ دانانی شێوازەکە لەسەر هەموو دێڕە هەڵبژێردراوەکان.", + "stylePickerNewStyleX": "شێوازی نوێ \"{0}\"", + "stylePickerNewStyleInfo": "Enter دابگرە بۆ زیادکردنی ئەم شێوازە بە ڕێکخستنە بنەڕەتییەکان و دانانی لەسەر دێڕە هەڵبژێردراوەکان. دواتر \"بەڕێوەبردنی شێوازەکان...\" بەکاربهێنە بۆ گۆڕینی فۆنت، ڕەنگەکان و شوێنەکەی.", + "stylePickerCurrentStyleX": "شێوازی ئێستا: {0}", + "stylePickerLinesUsingStyleX": "ئەو دێڕانەی ئەم شێوازە بەکاردەهێنن: {0}", + "stylePickerMarginsXYZ": "چەپ {0}، ڕاست {1}، ستوونی {2}", + "stylePickerSetStyle": "دانانی شێواز", + "stylePickerManageStyles": "بەڕێوەبردنی شێوازەکان...", + "stylePickerManageStylesHint": "ئەم پەنجەرەیە دابخە و بەڕێوەبەری شێوازەکان بکەرەوە بۆ دەستکاریکردنی فۆنت، ڕەنگەکان، شوێن و زیاتر", "add": "زیادکردن", "addDotDotDot": "زیادکردن...", "addToNamesListCaseSensitive": "زیادکردن بۆ لیستی ناوەکان (هەستیار بۆ پیتی گەورە و بچووک)", @@ -339,6 +397,7 @@ "mergeSelectedLinesDialog": "تێکەڵکردنی دێڕە هەڵبژێردراوەکان وەک دیالۆگ", "mergeWithLineAfterAndAutoBreak": "تێکەڵکردن لەگەڵ دێڕی پاشەوە و دابەشکردنی خۆکار", "mergeWithLineAfterKeepBreaks": "تێکەڵکردن لەگەڵ دێڕی پاشەوە (پاراستنی دابەشکراوەکان)", + "mergeWithLineAfterAndUnbreak": "تێکەڵکردن لەگەڵ دێڕی دواتر و لابردنی دابەشبوونی دێڕ", "mergeWithLineBeforeAndAutoBreak": "تێکەڵکردن لەگەڵ دێڕی پێشەوە و دابەشکردنی خۆکار", "mergeWithLineBeforeKeepBreaks": "تێکەڵکردن لەگەڵ دێڕی پێشەوە (پاراستنی دابەشکراوەکان)", "middleCenter": "ناوەڕاست-ناوەڕاست", @@ -353,6 +412,8 @@ "moveAllShotChangeOneFrameForward": "گواستنەوەی هەموو گۆڕانی دیمەنەکان یەک چوارچێوە بۆ پێشەوە", "multiMode": "دۆخی فرەیی", "moveDown": "بردنە خوارەوە", + "increase": "زیادکردن", + "decrease": "کەمکردنەوە", "moveUp": "بردنە سەرەوە", "moveToTop": "بردن بۆ سەرەتا", "moveToBottom": "بردن بۆ کۆتایی", @@ -422,6 +483,7 @@ "percent": "ڕێژە", "pickLayer": "دانانی چین", "pickOllamaModel": "هەڵبژاردنی مۆدێلی Ollama", + "pickModel": "هەڵبژاردنی مۆدێل", "llamaCppUseRemoteServer": "بەکارهێنانی سێرڤەری دەرەکی (URL)", "llamaCppEngineSettings": "ڕێکخستنەکانی بزوێنەری llama.cpp", "llamaCppEngineSettingsSubtitle": "بنەمای سێرڤەری ناوخۆیی llama.cpp", @@ -498,6 +560,7 @@ "reset": "گەڕاندنەوە", "resizePanels": "گۆڕینی قەبارەی پانێڵەکان", "resolution": "ڕێزۆلیوشن", + "retry": "دووبارە هەوڵدانەوە", "reverseRightToLeftStartEnd": "پێچەوانەکردنی دەستپێک/کۆتایی RTL", "right": "ڕاست", "rightToLeft": "ڕاست بۆ چەپ", @@ -559,6 +622,8 @@ "shadowColor": "ڕەنگی سێبەر", "shadowWidth": "پانی سێبەر", "shiftLineBy": "گواستنی دێڕ بە", + "shotIn": "سەرەتای دیمەن", + "shotOut": "کۆتایی دیمەن", "shortcut": "کورتەڕێگە", "shortcuts": "کورتەڕێگەکان", "show": "نیشاندان", @@ -570,9 +635,13 @@ "showStartColumn": "پیشاندانی ستوونی «دەستپێک»", "showHideColumn": "پیشاندانی ستوونی «شاردنەوە»", "showHistory": "پیشاندانی مێژوو", + "clearHistory": "پاککردنەوەی مێژوو", + "removeFromHistory": "لابردن لە مێژوو", "showLayerColumn": "پیشاندانی ستوونی «چین»", "showPreview": "پیشاندانی پێشبینین", "showShotChangesList": "پیشاندانی پێرستی گۆڕانی دیمەنەکان", + "showShotInColumn": "پیشاندانی ستوونی \"سەرەتای دیمەن\"", + "showShotOutColumn": "پیشاندانی ستوونی \"کۆتایی دیمەن\"", "showStyleColumn": "پیشاندانی ستوونی «شێواز»", "showTeletext": "پیشاندانی ستوونی تێلەتێکست لە بینینی لیستدا", "showTimeCodes": "پیشاندانی کۆدەکانی کات", @@ -629,12 +698,14 @@ "styleExaggeration": "زۆرکردنی شێواز", "styles": "شێوازەکان", "subtitleFile": "فایلی ژێرنووس", + "subtitleFileChangedOutsideX": "فایلی \"{0}\" لە دەرەوەی Subtitle Edit گۆڕدرا.\n\nدووبارە باری بکەیتەوە و گۆڕانکارییەکانت لەدەست بدەیت؟", "subtitleFileName": "ناوی فایلی ژێرنووس", "subtitleFileSaved": "فایلی ژێرنووس پاشەکەوتکرا", "subtitleFileSavedToX": "فایلی ژێرنووس پاشەکەوتکرا لە {0}", "subtitleFiles": "فایلەکانی ژێرنووس", "subtitleFormats": "فۆرماتەکانی ژێرنووس", "subtitleLoadedX": "ژێرنووس بارکرا: {0}", + "subtitleReloadedChangedOutsideX": "ژێرنووس دووبارە بارکرایەوە (لە دەرەوەی Subtitle Edit گۆڕدرابوو): {0}", "suffix": "پاشگر", "suggestions": "پێشنیارەکان", "sync": "هاوکاتکردن", @@ -680,6 +751,7 @@ "type": "جۆر", "unbreak": "یەکخستنی دەق", "unbreakLines": "یەکخستنی دێڕەکان", + "undelete": "گەڕاندنەوەی سڕاوە", "underline": "ژێرهێڵ", "undo": "پاشگەزبوونەوە", "unknown": "نەزانراو", @@ -717,10 +789,23 @@ "videoCustom3ForwardX": "ڤیدیۆ، میلی چرکەی دڵخواز ({0:#,###,##0}) بۆ پێشەوە، 3", "videoCustom4BackX": "ڤیدیۆ، میلی چرکەی دڵخواز ({0:#,###,##0}) بۆ دواوە، 4", "videoCustom4ForwardX": "ڤیدیۆ، میلی چرکەی دڵخواز ({0:#,###,##0}) بۆ پێشەوە، 4", + "videoCustom1BackAndPauseX": "ڤیدیۆ، میلی چرکەی تایبەت ({0:#,###,##0}) بۆ دواوە و وەستان، 1", + "videoCustom1ForwardAndPauseX": "ڤیدیۆ، میلی چرکەی تایبەت ({0:#,###,##0}) بۆ پێشەوە و وەستان، 1", + "videoCustom2BackAndPauseX": "ڤیدیۆ، میلی چرکەی تایبەت ({0:#,###,##0}) بۆ دواوە و وەستان، 2", + "videoCustom2ForwardAndPauseX": "ڤیدیۆ، میلی چرکەی تایبەت ({0:#,###,##0}) بۆ پێشەوە و وەستان، 2", + "videoCustom3BackAndPauseX": "ڤیدیۆ، میلی چرکەی تایبەت ({0:#,###,##0}) بۆ دواوە و وەستان، 3", + "videoCustom3ForwardAndPauseX": "ڤیدیۆ، میلی چرکەی تایبەت ({0:#,###,##0}) بۆ پێشەوە و وەستان، 3", + "videoCustom4BackAndPauseX": "ڤیدیۆ، میلی چرکەی تایبەت ({0:#,###,##0}) بۆ دواوە و وەستان، 4", + "videoCustom4ForwardAndPauseX": "ڤیدیۆ، میلی چرکەی تایبەت ({0:#,###,##0}) بۆ پێشەوە و وەستان، 4", "videoExtension": "پاشگری فایلی ڤیدیۆ", "videoFile": "فایلی ڤیدیۆ", "videoFileGenerated": "فایلی ڤیدیۆ دروستکرا", "videoFileGeneratedX": "فایلی ڤیدیۆ دروستکرا: \"{0}\"", + "videoFilesGenerated": "فایلە ڤیدیۆییەکان دروستکران", + "xVideosGenerated": "{0} ڤیدیۆ دروستکران", + "xOfYVideosGenerated": "{0} لە {1} ڤیدیۆ دروستکران", + "savedInX": "پاشەکەوتکرا لە {0}", + "savedInXFolders": "پاشەکەوتکرا لە {0} فۆڵدەر", "videoFiles": "فایلە ڤیدیۆییەکان", "videoAndAudioFiles": "فایلە ڤیدیۆ و دەنگییەکان", "videoOffset": "لادانی ڤیدیۆ", @@ -778,7 +863,6 @@ "imageFiles": "فایلە وێنەکان", "openAiCompatibleSttEndpoint": "بەستەری STT (URL)", "openAiCompatibleSttApiKey": "کلیلی API", - "openAiCompatibleSttModel": "مۆدێل", "openAiCompatibleSttExtraHeaders": "سەرپەڕە زیادەکان", "openAiCompatibleSttTimeout": "کاتی چاوەڕوانی (چرکە)", "openAiCompatibleSttLanguage": "ئاماژەی زمان", @@ -788,6 +872,9 @@ "dashScopeSttRegion": "ناوچە", "dashScopeSttEnableWords": "کاتبەندی ئاستی وشە", "dashScopeSttRegionKeyHint": "تێبینی: کلیلی API ی Alibaba Cloud Model Studio پەیوەستە بە ناوچە - دڵنیابە ناوچەی هەڵبژێردراو لەگەڵ ئەو ناوچەیە بگونجێت کە کلیلی تێدا دروستکراوە (چین یان نێودەوڵەتی).", + "googleCloudSttProjectId": "ناسنامەی پرۆژە (تەنها بۆ Application Default Credentials)", + "googleCloudSttBucketName": "Storage bucket (بەتاڵ = خۆکار)", + "googleCloudSttDynamicBatching": "کۆمەڵکردنی داینامیکی (نزیکەی 5 جار هەرزانتر، بێ گەرەنتی دواکەوتن)", "onlineSttApiKeyMissing": "پێویستە کلیلی API دابنرێت. تکایە کلیلی API ـەکەت بنووسە و دووبارە هەوڵبدە.", "openAiCompatibleSttAutoTranscribeOnAudioSelection": "دەقکردنی خۆکاری هەڵبژاردە نوێکانی شەپۆل بە قسە بۆ دەق", "openAiCompatibleSttStream": "وەڵامی ستریم", @@ -845,6 +932,7 @@ "multipleReplace": "جێگرتنەوەی فرەیی...", "fillSelectedLinesWithClipboard": "پڕکردنەوەی دێڕە هەڵبژێردراوەکان بە دەقی کلیپبۆرد", "goToLineNumber": "چوون بۆ دێڕی ژمارە...", + "commandPalette": "پالێتی فەرمانەکان...", "rightToLeftMode": "دۆخی ڕاست بۆ چەپ", "modifySelectionDotDotDot": "دەستکاری هەڵبژاردە...", "tools": "ئامرازەکان", @@ -852,6 +940,7 @@ "applyDurationLimits": "جێبەجێکردنی سنوورەکانی ماوە...", "batchConvert": "گۆڕینی بەکۆمەڵ...", "beautifyTimeCodes": "جوانکردنی کۆدەکانی کات...", + "improveTimeCodes": "باشترکردنی کۆدەکانی کات (forced alignment)...", "bridgeGaps": "پڕکردنەوەی بۆشاییەکان...", "applyMinGap": "جێبەجێکردنی کەمترین بۆشایی لە نێوان ژێرنووسەکاندا...", "changeCasing": "گۆڕینی جۆری پیت...", @@ -990,6 +1079,9 @@ "selectCurrentLineWhilePlayingHint": "هەڵبژاردنی ژێرنووسی ئێستا لە کاتی لێداندا {0}", "videoPosition": "شوێنی ڤیدیۆ {0}", "videoPositionTextBox": "سنووقی دەقی شوێنی ڤیدیۆ {0}", + "toolbarLineBreakX": "دابەشبوونی دێڕ {0} (باقی تووڵامراز لە ڕیزێکی نوێدا بەردەوام دەبێت)", + "initialText": "دەقی سەرەتایی دێڕی هەڵبژێردراو", + "initialTextHint": "دەقی دێڕی هەڵبژێردراو وەک ئەوەی لە کاتی هەڵبژاردنی دێڕەکەدا بوو", "hideWaveformToolbar": "شاردنەوەی تووڵامراز {0}", "resetZoomAndSpeed": "گەڕاندنەوەی زووم و خێرایی لێدان {0}", "removeBlankLines": "لابردنی دێڕە بۆشەکان {0}", @@ -1003,6 +1095,15 @@ "textPlayHint": "لێدانی ژێرنووسی ئێستا و وەستان لە کۆتاییدا {0}", "textPauseHint": "وەستاندنی لێدان {0}", "textNextHint": "لێدانی ژێرنووسی دواتر و وەستان لە کۆتاییدا {0}", + "moveSelectedLines": "گواستنەوەی دێڕە هەڵبژێردراوەکان (دوگمەکانی دواوە/پێشەوە)", + "moveSelectedLinesAndFollowing": "گواستنەوەی دێڕە هەڵبژێردراوەکان و هەموو دواترەکان (دوگمەکانی دواوە/پێشەوە)", + "moveAllLines": "گواستنەوەی هەموو دێڕەکان (دوگمەکانی دواوە/پێشەوە)", + "moveSelectedLinesBackHint": "گواستنەوەی دێڕە هەڵبژێردراوەکان {0} ms بۆ دواوە {1}", + "moveSelectedLinesForwardHint": "گواستنەوەی دێڕە هەڵبژێردراوەکان {0} ms بۆ پێشەوە {1}", + "moveSelectedLinesAndFollowingBackHint": "گواستنەوەی دێڕە هەڵبژێردراوەکان و هەموو دواترەکان {0} ms بۆ دواوە {1}", + "moveSelectedLinesAndFollowingForwardHint": "گواستنەوەی دێڕە هەڵبژێردراوەکان و هەموو دواترەکان {0} ms بۆ پێشەوە {1}", + "moveAllLinesBackHint": "گواستنەوەی هەموو دێڕەکان {0} ms بۆ دواوە {1}", + "moveAllLinesForwardHint": "گواستنەوەی هەموو دێڕەکان {0} ms بۆ پێشەوە {1}", "guessStartNoLineSelected": "مەزەندەی دەستپێک: هیچ دێڕێک هەڵنەبژێردراوە", "guessStartTimeCodesLocked": "مەزەندەی دەستپێک: کۆدەکانی کات چەسپێنراون", "guessStartNoWaveform": "مەزەندەی دەستپێک: هیچ شەپۆلێک نییە", @@ -1024,15 +1125,18 @@ "charactersPerSecond": "پیت/چرکە: {0}", "chooseColumn": "هەڵبژاردنی ستوون", "columnPaste": "لکاندنی ستوونی", + "commandPaletteTitle": "پالێتی فەرمانەکان", + "commandPaletteSearchPlaceholder": "بنووسە بۆ گەڕان لە فەرمانەکان...", + "commandPaletteNoCommandsFound": "هیچ فەرمانێکی گونجاو نییە", "createdEmptyTranslation": "وەرگێڕانێکی بەتاڵ لە ژێرنووسی ئێستا دروستکرا", "deleteText": "سڕینەوەی دەق", "deleteTextAndShiftCellsUp": "سڕینەوەی دەق و گواستنەوەی خانەکان بۆ سەرەوە", "endTimeMustBeAfterStartTime": "کۆتایی دەبێت دوای دەستپێک بێت.", "errorLoad7Zip": "ئەم فایلە وا دیارە فایلێکی پەستاوکراوی 7-Zip بێت.\n\nSubtitle Edit ناتوانێت فایلی پەستاوکراو بکاتەوە.", - "errorLoadBinaryZeroes": "بەداخەوە ئەم فایلە تەنها سفرە باینەرییەکان لەخۆ دەگرێت!\n\nئەگەر ئەم فایلەت بە Subtitle Edit دەستکاری کردبێت، لە ڕێگەی بابەتی مینیو فایل -> گەڕاندنەوەی پاشەکەوتی خۆکار... ڕەنگە پاشەکەوتێک بدۆزیتەوە.", + "errorLoadBinaryZeroes": "بەداخەوە ئەم فایلە تەنها سفرە باینەرییەکان لەخۆ دەگرێت!\n\nئەگەر ئەم فایلەت بە Subtitle Edit دەستکاری کردبێت، لە ڕێگەی بابەتی مینیو فایل -> گەڕاندنەوەی پاشەکەوتی خۆکار... ڕەنگە پاشەکەوتێک بدۆزیتەوە.", "errorLoadGZip": "ئەم فایلە وا دیارە فایلێکی پەستاوکراوی GZip بێت.\n\nSubtitle Edit ناتوانێت فایلی پەستاوکراو بکاتەوە.", "errorLoadLargeFile": "ئەم فایلە زۆر گەورەیە بۆ ئەوەی وەک فایلی ژێرنووس بکرێتەوە.", - "errorLoadVideoFilePrompt": "ئەم فایلە وا دیارە فایلێکی ڤیدیۆ بێت:\n{0}\n\nدەتوانیت ڤیدیۆیەک لە ڕێی «ڤیدیۆ -> کردنەوەی ڤیدیۆ» یان بە ڕاکێشان و دانانی ڤیدیۆ لەسەر لێدەری ڤیدیۆ بکەیتەوە.\n\nدەتەوێت وەک فایلی ڤیدیۆ بکرێتەوە؟", + "errorLoadVideoFilePrompt": "ئەم فایلە وا دیارە فایلێکی ڤیدیۆ بێت:\n{0}\n\nدەتوانیت ڤیدیۆیەک لە ڕێی «ڤیدیۆ -> کردنەوەی ڤیدیۆ» یان بە ڕاکێشان و دانانی ڤیدیۆ لەسەر لێدەری ڤیدیۆ بکەیتەوە.\n\nدەتەوێت وەک فایلی ڤیدیۆ بکرێتەوە؟", "errorLoadJpg": "ئەم فایلە وا دیارە فایلێکی وێنەی JPG بێت.\n\nSubtitle Edit ناتوانێت فایلی وێنە بکاتەوە.", "errorLoadPng": "ئەم فایلە وا دیارە فایلێکی وێنەی PNG بێت.\n\nSubtitle Edit ناتوانێت فایلی وێنە بکاتەوە.", "errorLoadRar": "ئەم فایلە وا دیارە فایلێکی پەستاوکراوی 7-Zip بێت.\n\nSubtitle Edit ناتوانێت فایلی پەستاوکراو بکاتەوە.", @@ -1062,11 +1166,14 @@ "numberOfLinesEvenlyDistributedX": "{0} دێڕ بە یەکسانی دابەشکران", "oneLineCopiedFromOriginal": "یەک دێڕ لە ژێرنووسی ڕەسەنەوە لەبەرگیرا", "oneLineCopiedToOriginal": "یەک دێڕ بۆ ژێرنووسی ڕەسەن لەبەرگیرا", + "onlineOnlyVideo": "ڤیدیۆی تەنها-ئۆنلاین", + "onlineOnlyVideoXSizeYDownloadAndOpen": "فایلی ڤیدیۆی \"{0}\" ({1}) تەنها بە شێوەی ئۆنلاین هەڵگیراوە، بۆ نموونە لە Dropbox یان iCloud Drive، و پێش کردنەوەی دەبێت دابگیرێت.\n\nئێستا دایبگریت و بیکەیتەوە؟", "oneLineMerged": "یەک دێڕ تێکەڵکرا", "oneLineSwitched": "یەک دێڕ ئاڵوگۆڕکرا", "overwriteExistingCells": "لەسەرنووسی خانەکانی ئێستا", "overwriteOrShiftCellsDown": "لەسەرنووسین/گواستنەوەی خانەکان بۆ خوارەوە", "parsingMatroskaFile": "شیکردنەوەی فایلی Matroska...", + "readingDvdSubtitles": "خوێندنەوەی ژێرنووسەکانی DVD...", "pasteFromClipboardDotDotDot": "لکاندن لە کلیپبۆردەوە...", "redoPerformed": "دووبارەکردنەوە جێبەجێکرا", "redoPerformedXActionLeft": "دووبارەکردنەوە جێبەجێکرا (کردار ماوە: {0})", @@ -1106,12 +1213,14 @@ "trimmedXLines": "{0} دێڕی ژێرنووس کورتکرانەوە", "pastedXLinesOverSelectedLines": "{0} دێڕ لەسەر دێڕە هەڵبژێردراوەکان لکێشران", "pastedXOfYLinesOverSelectedLines": "{0} لە {1} دێڕ لەسەر دێڕە هەڵبژێردراوەکان لکێشران - ئەوانی تر جێیان نەبوو لە هەڵبژاردەکەدا", + "insertedXLinesFromClipboard": "{0} دێڕ لە کلیپبۆردەوە تێخرا", "openOriginalDifferentNumberOfSubtitlesXY": "فایلی ژێرنووسی ڕەسەن هەمان ژمارەی ژێرنووسی فایلی ئێستا نییە.\n\n• ژێرنووسە ڕەسەنەکان: {0}\n• ژێرنووسە ئێستاکان: {1}", "originalTextReadOnly": "دەقی ڕەسەن (تەنها خوێندنەوە)", "originalTextEditMode": "دەقی ڕەسەن (دۆخی دەستکاری)", "originalIsReadOnlyNotSaved": "ژێرنووسی ڕەسەن ئاماژەیەکی تەنها-خوێندنەوەیە و پاشەکەوت نەکرا", "originalIsEmptyNotSaved": "ژێرنووسی ڕەسەن هیچ دەقێکی تێدا نییە و پاشەکەوت نەکرا", "originalIsReadOnlyReference": "ژێرنووسی ڕەسەن وەک ئاماژەیەکی تەنها-خوێندنەوە کراوە", + "closeTranslationQuestionXY": "وەرگێڕانی \"{0}\" دابخرێت؟\n\nژێرنووسی ڕەسەنی \"{1}\" دەبێتە ئەو ژێرنووسەی دەستکاری دەکەیت. خودی فایلی وەرگێڕانەکە ناگۆڕدرێت.", "allowEditOfOriginalSubtitle": "ڕێگەدان بە دەستکاریکردنی ژێرنووسی ڕەسەن", "showAllOriginalLinesX": "پیشاندانی هەموو دێڕە ڕەسەنەکان ({0} لێرە هاوتایان نییە)", "showAllOriginalLinesHint": "دێڕەکانی بێ لێکچوون وەک ڕیزی زیادە پیشان دەدرێن، بۆ ئەوەی ببینیت وەرگێڕان چ دێڕێک کەمە.", @@ -1146,6 +1255,7 @@ "fileExportedInFormatXToY": "فایلەکە بە فۆرماتی {0} بۆ {1} دەرهێنرا", "fileExportedInFormatXToFileY": "فایلەکە بە فۆرماتی \"{0}\" بۆ فایلی \"{1}\" دەرهێنرا", "fixedXLines": "{0} دێڕ چاککران", + "toolXChangedYLines": "{0}: {1} دێڕ گۆڕدران", "transcriptionCompletedWithXLines": "دەقکردنەوە تەواوبوو بە {0} دێڕ", "openSubtitleFileX": "کردنەوەی فایلی ژێرنووسی \"{0}\"؟", "replacedXOccurrences": "{0} جار جێگیرکرایەوە", @@ -1236,6 +1346,21 @@ "formattingDotDotDot": "فۆرماتکردن...", "imageBasedSubtitleForEditDotDotDot": "ژێرنووسی وێنەیی بۆ دەستکاری...", "imageBasedSubtitleForOcrDotDotDot": "ژێرنووسی وێنەیی بۆ OCR...", + "dvdSubtitlesDotDotDot": "ژێرنووس لە DVD (IFO/VOB)...", + "titleImportDvd": "هێنانەناوی ژێرنووس لە DVD", + "dvdIfoFile": "فایلی IFO", + "dvdVobFiles": "فایلەکانی VOB", + "dvdVideoStandard": "ستانداردی ڤیدیۆ", + "dvdStartRipping": "دەستپێکردنی دەرهێنان", + "dvdRippingAborted": "دەرهێنان هەڵوەشێنرایەوە", + "dvdOpenIfoFile": "کردنەوەی فایلی DVD IFO", + "dvdAddVobFiles": "زیادکردنی فایلەکانی VOB", + "dvdIfoFiles": "فایلەکانی DVD IFO", + "dvdVobFileType": "فایلەکانی DVD VOB", + "dvdDropHint": "فایلێکی IFO بکەرەوە (VIDEO_TS\\VTS_01_0.IFO) یان فایلەکانی VOB زیاد بکە - یان ئێرە دایانبنێ", + "dvdNotAnIfoFileX": "{0} فایلی DVD IFO نییە", + "dvdMenuIfoNoTitleSetsX": "هیچ title set ێک (VTS_xx_0.IFO) لە تەنیشت {0} نەدۆزرایەوە", + "dvdEncryptedXOfY": "{0} لە {1} پاکەتی ژێرنووس هێشتا بە CSS شفرەکراون - ئەم فایلانەی VOB بەبێ شفرەلابردن کۆپی کراون، بۆیە هەندێک وێنەی ژێرنووس تێکدەچن.\n\nسەرەتا DVD ەکە بە ئامرازێکی دەرهێنانی DVD شفرە لابدە بۆ ئەنجامێکی پاک.\n\nهەر بەردەوام دەبیت؟", "splitTextAt": "دابەشکردنی دەق لە", "blankLines": "دێڕە بۆشەکان", "oneLineIsOneSubtitle": "یەک دێڕ یەک ژێرنووسە", @@ -1255,8 +1380,13 @@ "forcedAlignerProgress": "هاوشانکردن... پەنجەرەی {0} لە {1}، {2} لە {3} دێڕ", "forcedAlignerSetupTitle": "هاوشانکردنی کۆدەکانی کات لە ڕێی forced aligner", "forcedAlignerSetupIntro": "Forced aligner ـێک دەقی ژێرنووسی هەتەوەریت لەگەڵ دەنگدا دەگونجێنێت، بەبێ ئەوەی سەرەتا بیخوێنێتەوە. ڤیدیۆ درێژەکان بە پارچە هاوشان دەکرێن، بۆیە هەر درێژییەک کار دەکات.", + "forcedAlignerEndsFromSpeech": "دانانی کاتەکانی کۆتایی لە قسەی جیاکراوە (هێواش)", + "forcedAlignerEndsFromSpeechHint": "forced aligner دەدۆزێتەوە دێڕێک لە کوێ دەستپێدەکات، نەک لە کوێ کۆتایی دێت، بۆیە کاتەکانی کۆتایی بە ئاسایی لە کاتی خوێندنەوەوە دێن. کاتێک ئەمە چالاکە، سەرەتا مۆسیقا و کاریگەرییە دەنگییەکان لە دەنگەکە لادەبرێن و هەر دێڕێک لەو شوێنەدا کۆتایی دێت کە قسەکەی بێدەنگ دەبێت. نزیکەی هێندەی خودی ڤیدیۆکە کات دەبات لەگەڵ GPU - و چەندین جار زیاتر بەبێ GPU.", + "forcedAlignerIsolatingSpeech": "جیاکردنەوەی قسە... {0}", + "forcedAlignerIsolatingSpeechFailed": "نەتوانرا قسەکە جیا بکرێتەوە - کاتەکانی کۆتایی لەبری ئەوە لە کاتی خوێندنەوەوە دانران.", "forcedAlignerModel": "مۆدێلی aligner", - "forcedAlignerDownloadEngine": "داگرتن/نوێکردنەوەی بزوێنەر..." + "forcedAlignerDownloadEngine": "داگرتن/نوێکردنەوەی بزوێنەر...", + "forcedAlignerEstimatedXOfY": "{0} لە {1} دێڕ نەتوانران هاوشان بکرێن و بەپێی کاتی خوێندنەوە دانران - کۆدەکانی کاتیان تەنها خەمڵێنراون. ڕەنگە دەقەکە درێژتر بێت لەوەی لە ڤیدیۆکەدا دەوترێت." }, "export": { "exportImagesProfiles": "پرۆفایلەکانی دەرهێنانی وێنە", @@ -1305,6 +1435,18 @@ "imageBasedSubtitleSaved": "ژێرنووسی وێنەیی پاشەکەوتکرا", "fullFrameImage": "وێنەی چوارچێوەی تەواو", "fullFrameImageHint": "هەر وێنەیەک بە قەبارەی چوارچێوەی ڤیدیۆ بکە، لەگەڵ ژێرنووس لە شوێنی خۆیدا", + "stereo3D": "3D", + "stereo3DHint": "بۆ ڤیدیۆی 3D: ژێرنووسەکە یەک جار لە نیوەی هەر چاوێکی چوارچێوەکەدا بکێشە", + "halfSideBySide": "نیوە لە تەنیشت یەک", + "halfTopBottom": "نیوە سەرەوە/خوارەوە", + "depth3D": "قووڵی", + "depth3DHint": "ژێرنووسەکە چەند لە شاشەکە دێتە دەرەوە - پۆزەتیڤ نزیکتری دەکاتەوە، نێگەتیڤ دوورتری دەخاتەوە", + "plane3D": "3D-Plane", + "plane3DHint": "بە هەر ژێرنووسێک ئەو قووڵییە بدە کە Blu-ray ی 3D بۆی هەڵدەگرێت، لە فایلێکی 3D-Plane (.ofs) کە بە BD3D2MK3D یان OFSExtractor دروستکراوە. قووڵی لەو شوێنانە بەکاردێت کە 3D-Plane هیچی تێدا نییە", + "openPlane3DTitle": "کردنەوەی فایلی 3D-Plane", + "unableToLoadPlane3DX": "نەتوانرا 3D-Plane باربکرێت: {0}", + "plane3DXDepthYToZ": "{0} (قووڵی {1} بۆ {2})", + "plane3DXNoDepth": "{0} (هیچ بەهایەکی قووڵی نییە)", "textEffect": "کاریگەری دەق", "textEffectSettingsTitle": "ڕێکخستنەکانی کاریگەری دەق", "textEffectPreset": "پێش-ڕێکخستن", @@ -1409,7 +1551,22 @@ "restoreAutoBackupFile": "گەڕاندنەوەی فایلی پاشەکەوتی خۆکار", "restoreXFromY": "دەتەوێت \"{0}\" لە {1}ەوە بگەڕێنیتەوە؟", "deleteAllSubtitleBackups": "دەتەوێت هەموو فایلەکانی پاشەکەوتی ژێرنووس بسڕیتەوە؟", - "deleteAll": "سڕینەوەی هەموو" + "deleteAll": "سڕینەوەی هەموو", + "subtitles": "ژێرنووسەکان", + "settingsBackupInfo": "Settings.json پاشەکەوت دەکرێت کاتێک Subtitle Edit دەستپێدەکات، زۆرترین جارێک لە هەر {0} ڕۆژدا و تەنها ئەگەر ڕێکخستنەکان گۆڕابن. نوێترین {1} پاشەکەوت دەهێڵدرێنەوە.", + "settingsBackupInfoEveryStart": "Settings.json هەر جارێک Subtitle Edit دەستپێدەکات پاشەکەوت دەکرێت، ئەگەر ڕێکخستنەکان گۆڕابن. نوێترین {0} پاشەکەوت دەهێڵدرێنەوە.", + "settingsBackupOff": "پاشەکەوتی خۆکاری ڕێکخستنەکان ناچالاکە (هەڵبژاردەکان → ڕێکخستنەکان → فایل).", + "lastSettingsBackupX": "دوایین پاشەکەوت: {0}", + "noSettingsBackupsYet": "هێشتا هیچ پاشەکەوتێکی ڕێکخستنەکان نییە", + "openSettingsBackupFolder": "کردنەوەی فۆڵدەری پاشەکەوتی ڕێکخستنەکان", + "backUpSettingsNow": "ئێستا پاشەکەوت بکە", + "settingsBackedUp": "ڕێکخستنەکانی ئێستا پاشەکەوت کران.", + "restoreSettings": "گەڕاندنەوەی ڕێکخستنەکان", + "restoreSettingsFromX": "دەتەوێت ڕێکخستنەکانی ئێستات بە پاشەکەوتەکەی {0} جێگیر بکەیتەوە؟\n\nسەرەتا ڕێکخستنەکانی ئێستات پاشەکەوت دەکرێن. هەندێک گۆڕانکاری تەنها دوای دووبارە دەستپێکردنەوەی Subtitle Edit کاریگەر دەبن.", + "settingsRestored": "ڕێکخستنەکان گەڕێندرانەوە. تکایە Subtitle Edit دووبارە دەستپێبکەرەوە بۆ ئەوەی هەموو گۆڕانکارییەکان کاریگەر بن.", + "settingsRestoreFailed": "نەتوانرا ڕێکخستنەکان بگەڕێندرێنەوە: {0}", + "settingsBackupNotValid": "پاشەکەوتەکە فایلێکی دروستی ڕێکخستنەکان نییە، بۆیە ڕێکخستنەکانی ئێستات هێڵدرانەوە", + "deleteAllSettingsBackups": "دەتەوێت هەموو فایلەکانی پاشەکەوتی ڕێکخستنەکان بسڕیتەوە؟" }, "propertiesDCinema": { "title": "تایبەتمەندییەکانی D-Cinema SMPTE", @@ -1423,22 +1580,16 @@ "editRate": "ڕێژەی دەستکاری", "timeCodeRate": "ڕێژەی کۆدی کات", "startTime": "کاتی دەستپێک", - "font": "فۆنت", "fontId": "ID ی فۆنت", "fontUri": "URI ی فۆنت", - "generate": "دروستکردن", - "fontColor": "ڕەنگی فۆنت", "chooseColor": "هەڵبژاردنی ڕەنگ", "fontEffect": "کاریگەری فۆنت", "effectColor": "ڕەنگی کاریگەری", - "fontSize": "قەبارەی فۆنت", "topBottomMargin": "پەراوێزی سەرەوە/خوارەوە", "fadeUpTime": "کاتی فەیدی ناوچوون", "fadeDownTime": "کاتی فەیدی دەرچوون", - "frames": "چوارچێوەکان", "zPosition": "شوێنی Z", - "zPositionHelp": "ژمارە ئەرێنییەکان دەق دوور دەخەنەوە، ژمارە نەرێنییەکان دەق نزیک دەکەنەوە؛ ئەگەر شوێنی Z سفر بێت ئەوا دوو ڕەهەندییە (2D)", - "export": "دەرهێنان..." + "zPositionHelp": "ژمارە ئەرێنییەکان دەق دوور دەخەنەوە، ژمارە نەرێنییەکان دەق نزیک دەکەنەوە؛ ئەگەر شوێنی Z سفر بێت ئەوا دوو ڕەهەندییە (2D)" }, "webVtt": { "setStylesForSelectedLinesTitle": "دانانی شێوازەکانی WebVTT بۆ دێڕە هەڵبژێردراوەکان", @@ -1476,11 +1627,61 @@ "ignoreFormatting": "پشتگوێخستنی فۆرمات", "ignoreFormattingHint": "دێڕەکان کە تەنها لە تەگەکانی فۆرماتدا جیاوازن، وەک یان {\\an8}، بە جیاواز هەژمار ناکرێن", "showOnlyDifferencesInText": "تەنها جیاوازییەکان لە دەقدا", + "ignoreNumbering": "پشتگوێخستنی ژمارەکردن", + "ignoreNumberingHint": "ئەو دێڕانەی تەنها لە ژمارەکەیاندا جیاوازن بە جیاواز ناژمێردرێن", + "ignoreTimeDifferenceMs": "لێبووردەیی کات (ms)", + "ignoreTimeDifferenceMsHint": "ئەو کاتانەی دەستپێک و کۆتایی کە ئەوەندە میلی چرکە یان کەمتر جیاوازن بە جیاواز ناژمێردرێن", + "compareDifferences": "جیاوازییەکان", + "compareTextDifferences": "جیاوازییەکانی دەق", + "compareCurrent": "ئێستا", + "compareReference": "سەرچاوە", + "compareEditable": "دەستکاریکراو", + "compareEditableHint": "ئەو گۆڕانکارییانەی لێرە دەکرێن دەگەڕێنەوە بۆ ژێرنووسەکە کاتێک کرتە لە جێبەجێکردن دەکەیت", + "compareReadOnly": "تەنها خوێندنەوە", + "compareTakeFromReference": "وەرگرتنی دەق و کاتبەندی لە سەرچاوەکە", + "compareInsertFromReference": "تێخستنی ئەم دێڕە بۆ ناو ژێرنووسی ئێستا", + "compareDeleteFromCurrent": "سڕینەوەی ئەم دێڕە لە ژێرنووسی ئێستا", + "compareTakeText": "وەرگرتنی دەق", + "compareTakeTiming": "وەرگرتنی کاتبەندی", + "compareEditLine": "دەستکاری دێڕ", + "compareEditHint": "Ctrl+Enter بۆ پاشەکەوتکردن، Esc بۆ هەڵوەشاندنەوە", + "compareEdited": "دەستکاریکراو", + "compareOnePendingChange": "1 گۆڕانکاری چاوەڕوان", + "compareXPendingChanges": "{0} گۆڕانکاری چاوەڕوان", + "compareDiscardXChanges": "وازهێنان لەو {0} گۆڕانکارییەی لە بەراوردکردندا کراون؟", + "compareXChangesApplied": "بەراوردکردن: {0} گۆڕانکاری جێبەجێکران", + "compareChangeTextX": "#{0} دەق لە سەرچاوەوە", + "compareChangeTimingX": "#{0} کاتبەندی لە سەرچاوەوە", + "compareChangeTextAndTimingX": "#{0} دەق و کاتبەندی لە سەرچاوەوە", + "compareChangeEditedX": "#{0} دەستکاریکرا", + "compareChangeInsertedX": "#{0} تێخرا", + "compareChangeDeletedX": "#{0} سڕایەوە", + "compareSyncPoint": "خاڵی هاوکات", + "compareSyncPointHint": "خاڵی هاوکات - ئەم دوو دێڕە هەمیشە وەک جووتێک پیشان دەدرێن، و دێڕەکانی سەرەوە و خوارەوە بە جیا ڕیز دەکرێن", + "compareSyncPickCurrent": "خاڵی هاوکات: ئەم دێڕەی ئێستا بەکاربهێنە", + "compareSyncPickReference": "خاڵی هاوکات: ئەم دێڕەی سەرچاوە بەکاربهێنە", + "compareSyncRemove": "لابردنی خاڵی هاوکات", + "compareClearXSyncPoints": "پاککردنەوەی خاڵەکانی هاوکات ({0})", + "compareSyncCurrentPickedX": "ئێستای #{0} وەک خاڵی هاوکات هەڵبژێردرا - دێڕی سەرچاوەی گونجاو هەڵبژێرە و کرتە لە هاوکاتکردن بکە", + "compareSyncReferencePickedX": "سەرچاوەی #{0} وەک خاڵی هاوکات هەڵبژێردرا - دێڕی ئێستای گونجاو هەڵبژێرە و کرتە لە هاوکاتکردن بکە", + "compareSyncWithCurrentX": "هاوکاتکردن لەگەڵ ئێستای #{0}", + "compareSyncWithReferenceX": "هاوکاتکردن لەگەڵ سەرچاوەی #{0}", + "compareSyncApply": "هاوکاتکردن", + "compareSyncPointSetXY": "خاڵی هاوکات دانرا: ئێستای #{0} و سەرچاوەی #{1} ئێستا وەک جووتێک پیشان دەدرێن", + "compareSyncAlreadyPairedXY": "ئێستای #{0} و سەرچاوەی #{1} پێشتر وەک جووتێک بە هەمان دەستپێک پیشان دەدرێن - هیچ شتێک بۆ هاوکاتکردن نییە", + "compareSyncPointShiftedXYZW": "خاڵی هاوکات دانرا: ئێستای #{0}-#{1} {2} جوڵێندرا بۆ ئەوەی لەگەڵ سەرچاوەی #{3} دەستپێبکات", + "compareChangeSyncShiftXYZ": "#{0}-#{1} {2} جوڵێندرا (خاڵی هاوکات)", + "compareTimingDeltaHint": "سەرچاوەکە چەند درەنگتر (+) یان زووتر (−) لە دێڕی ئێستا دەستپێدەکات و کۆتایی دێت", "loadXFromFile": "بارکردنی \"{0}\" لە فایلەوە", + "compareLoadSavedFile": "بارکردنی فایلی پاشەکەوتکراو", "saveCompareHtmlTitle": "پاشەکەوتکردنی فایلی HTML ی بەراورد", "pickMatroskaTrackX": "هەڵبژاردنی تراکی Matroska - {0}", "pickTransportStreamTrackX": "هەڵبژاردنی تراکی transport stream - {0}", + "chapters": "بەشەکان", + "dvdVobFilesMissingX": "فایلەکانی VOB ونن ({0}% دۆزرایەوە)", "pickMp4TrackX": "هەڵبژاردنی تراکی MP4 - {0}", + "pickMxfTrackX": "هەڵبژاردنی ڕێڕەوی MXF - {0}", + "pickMpegTrackX": "هەڵبژاردنی ڕێڕەوی MPEG - {0}", "rosettaProperties": "تایبەتمەندییەکانی Timed Text Rosetta IMSC", "rosettaFontSize": "قەبارەی فۆنت (بەرزی ڕیز)", "propertyTimeBase": "بنەمای کات", @@ -1490,7 +1691,6 @@ "propertyDefaultRegion": "ناوچەی بنەڕەتی", "propertyStyleAttributeName": "ناوی تایبەتمەندی شێواز", "propertyTimeCodeFormat": "فۆرماتی کۆدی کات", - "propertyFileExtension": "پاشگری فایل", "propertyTopOrigin": "سەرچاوەی سەرەوە", "propertyTopExtent": "درێژی سەرەوە", "propertyBottomOrigin": "سەرچاوەی خوارەوە", @@ -1556,7 +1756,8 @@ "findWhat": "دۆزینەوەی چی", "descriptionOptional": "وەسف (ئارەزوومەندانە)", "invalidRegularExpressionX": "دەربڕینی ئاسایی هەڵەیە: {0}", - "regularExpressionTooSlowX": "دەربڕینی ئاسایی دوای {0} چرکە وازی هێنا - یاساکە بازدەخرێت، نموونەیەکی سادەتر تاقی بکەوە" + "regularExpressionTooSlowX": "دەربڕینی ئاسایی دوای {0} چرکە وازی هێنا - یاساکە بازدەخرێت، نموونەیەکی سادەتر تاقی بکەوە", + "moveToCategory": "گواستنەوە بۆ هاوپۆل" }, "find": { "searchTextWatermark": "گەڕان بۆ دەق...", @@ -1569,7 +1770,9 @@ "replaceIn": "جێگرتنەوە/گەڕان لە", "replaceInTextAndOriginal": "دەق و دەقی ڕەسەن", "replaceInTextOnly": "تەنها دەق", - "replaceInOriginalOnly": "تەنها دەقی ڕەسەن" + "replaceInOriginalOnly": "تەنها دەقی ڕەسەن", + "replacedOneOccurrence": "یەک دووبارەبوونەوە جێگیرکرایەوە", + "replacedXOccurrences": "{0} دووبارەبوونەوە جێگیرکرانەوە" }, "regularExpressionContextMenu": { "wordBoundary": "سنووری وشە (\\b)", @@ -1597,6 +1800,7 @@ "xLinesYSubtitles": "{0} دێڕ، {1} ژێرنووس", "xLinesYSubtitlesZErrors": "{0} دێڕ، {1} ژێرنووس، {2} هەڵە", "couldNotParseAsX": "نەتوانرا وەک {0} شیکردنەوە بکرێت", + "readAsXUseAsY": "سەرچاوەکە نەتوانرا وەک {1} بخوێندرێتەوە، بەڵام دەتوانرا وەک {0} بخوێندرێتەوە.\nدێڕەکان بەکاربهێنرێن و هەر وەک {1} پاشەکەوت بکرێت؟", "selectedXCharactersYLines": "هەڵبژێردراو: {0} پیت لە {1} دێڕدا", "replacedXOccurrences": "{0} جار جێگیرکرایەوە", "invalidRegularExpression": "دەربڕینی ئاسایی هەڵەیە", @@ -1632,7 +1836,23 @@ "largeChangeWarning": "گۆڕانکاری گەورە - وا دیارە دووبارە نووسینەوە بێت، بە وریاییەوە پێداچوونەوەی بکە", "mismatchWarning": "لە ڕەسەنەکە ناچێتەوە - ڕەنگە سەر بە دێڕێکی تر بێت", "engineError": "پەیوەندی بە بزوێنەری AI نەکرا: {0}", - "playCurrentLineHint": "لێدانی دێڕی هەڵبژێردراو لە لێدەری ڤیدیۆدا و وەستان لە کۆتاییدا (هەروەها دوو کرتە لەسەر دێڕێک)" + "playCurrentLineHint": "لێدانی دێڕی هەڵبژێردراو لە لێدەری ڤیدیۆدا و وەستان لە کۆتاییدا (هەروەها دوو کرتە لەسەر دێڕێک)", + "editAfterHint": "کرتە لە دەقی ڕیزی هەڵبژێردراو بکە بۆ دەستکاریکردنی چاککردنەکە پێش جێبەجێکردنی (Enter پاشەکەوت دەکات، Escape هەڵدەوەشێنێتەوە)", + "template": "قاڵب", + "templatePlaceholder": "قاڵبێک هەڵبژێرە بۆ جێگرتنەوەی پرۆمپتەکە", + "templateStandard": "پێداچوونەوەی ستاندارد", + "templateSpeechToText": "پاککردنەوەی قسە-بۆ-دەق", + "templateMachineTranslation": "چاککردنی وەرگێڕانی ئامێر", + "templateSdh": "SDH / کەمبیستەکان", + "referenceContext": "زانیاری سەرچاوە", + "referenceContextInfo": "ئارەزوومەندانە. ناوەکان، کارەکتەرەکان، فەرهەنگۆک، کورتەی چیرۆک یان تێبینییەکانی شێواز - مۆدێلەکە ئەمە وەک سەرچاوەی بڕیاردەر بۆ ناو و زاراوەکان دادەنێت. لەگەڵ هەموو کۆمەڵێک دەنێردرێت.", + "referenceContextPlaceholder": "ناوەکان: Kaito، Aunt Mei، Dr. Hollis\nزاراوەکان: Shinkansen، warp core\nکورتەی چیرۆک: Kaito گەشت دەکات بۆ تۆکیۆ بۆ دۆزینەوەی باوکە ونبووەکەی.", + "generateContext": "دروستکردن بە AI", + "generateContextHint": "با بزوێنەری AI ی هەڵبژێردراو ژێرنووسەکە بخوێنێتەوە و ڕەشنووسی ناوەکان، زاراوەکان و کورتەی چیرۆک ئامادە بکات - پێش بەکارهێنان ئەنجامەکە بپشکنە", + "generatingContextPartXOfY": "خوێندنەوەی بەشی {0} لە {1}...", + "generatingContextSynopsis": "نووسینی کورتەی چیرۆک...", + "replaceContextQuestion": "زانیاری سەرچاوەی ئێستا جێگیر بکرێتەوە؟", + "noContextGenerated": "بزوێنەری AI هیچ زانیارییەکی سەرچاوەی بەسوودی نەگەڕاندەوە." }, "aiAssistant": { "title": "یاریدەدەری AI", @@ -1678,6 +1898,7 @@ "removeLineBreaksPixelWidth": "یەکخستنی ژێرنووسەکان کە جێی یەک دێڕ دەبن (پانی پیکسڵ)", "fixUppercaseIInsideLowercaseWords": "چاککردنی 'i' ی گەورە لەناو وشە بچووکەکاندا (هەڵەی OCR)", "fixDoubleApostrophes": "چاککردنی پیتەکانی دوو کۆمە ('') بۆ یەک وێنەچە (\")", + "fixMisreadQuotes": "چاککردنی ئەپۆسترۆفی هەڵە خوێندراو وەک دوو جووت-کۆتێشن (OCR، ئینگلیزی)", "addPeriods": "زیادکردنی خاڵ دوای دێڕەکان کە دێڕی دواتر بە پیتی گەورە دەستپێدەکات", "startWithUppercaseLetterAfterParagraph": "دەستپێکردن بە پیتی گەورە دوای پەرەگراف", "startWithUppercaseLetterAfterPeriodInsideParagraph": "دەستپێکردن بە پیتی گەورە دوای خاڵ لەناو پەرەگرافدا", @@ -1700,6 +1921,7 @@ "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Foo
bar! -> Foo bar!", "fixDoubleApostrophesExample": "''Has double single quotes'' -> \"Has single double quote\"", + "fixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "addPeriodsExample": "Hello world -> Hello world.", "startWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: Foobar!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Hello there! how are you? -> Hello there! How are you?", @@ -1789,6 +2011,8 @@ "fixMinDurationMs": "چاککردنی کەمترین ماوە (میلی چرکە)", "doNotGoPastShotChange": "لە گۆڕانی دیمەن تێنەپەڕە", "fixMaxDurationMs": "چاککردنی زۆرترین ماوە (میلی چرکە)", + "fixMinDurationFrames": "چاککردنی کەمترین ماوە (چوارچێوە)", + "fixMaxDurationFrames": "چاککردنی زۆرترین ماوە (چوارچێوە)", "minimumDurationMilliseconds": "کەمترین ماوە (میلی چرکە):", "maximumDurationMilliseconds": "زۆرترین ماوە (میلی چرکە):", "maxDurationShouldBeHigherThanMinDuration": "زۆرترین ماوە دەبێت لە کەمترین ماوە گەورەتر بێت", @@ -1838,13 +2062,80 @@ "timeCodesExtractFailed": "نەتوانرا کۆدەکانی کات لە ڤیدیۆکە بخوێنرێنەوە", "timeCodesHint": "لەبری گریمانەکردنی ڕێژەیەکی چوارچێوەی جێگیر، cue ـەکان بە کاتە ڕاستەقینەکانی چوارچێوەی ڤیدیۆ چەسپێنە. پێویستی بە خوێندنەوەی تەواوی ڤیدیۆکە هەیە؛ ئەنجامەکە کاش دەکرێت." }, + "improveTimeCodes": { + "title": "باشترکردنی کۆدەکانی کات (forced alignment)", + "aligner": "Aligner", + "alignerHint": "ئەو مۆدێلەی گوێ لە هەر دێڕێک دەگرێت لە دەنگەکەدا. باشترین هەڵبژاردەکان بۆ زمانی ژێرنووسەکە یەکەم پیشان دەدرێن.", + "maxShift": "زۆرترین جوڵاندن (چرکە)", + "maxShiftHint": "ژێرنووسەکە چەند دەکرێت لە هاوکاتی دەرچووبێت. دێڕێک کە دەستپێکەکەی زیاتر لەمە بجوڵێت وەک خۆی دەهێڵدرێتەوە و نیشانە دەکرێت. هەر بەهایەک بێت، دێڕێکی تاک کە بیەوێت زیاتر لە نیو چرکە زیاتر لە دێڕەکانی دەوروبەری بجوڵێت بە کوێرانە ناجوڵێندرێت: ئەگەر هەموو دراوسێکانی جوڵابن لەگەڵیان دەڕوات، ئەگەرنا بەبێ نیشانەی هەڵبژاردن پێشکەش دەکرێت بۆ ئەوەی بیپشکنیت.", + "adjustStartTimes": "ڕێکخستنی کاتەکانی دەستپێک", + "adjustEndTimes": "ڕێکخستنی کاتەکانی کۆتایی", + "isolateSpeech": "سەرەتا جیاکردنەوەی قسە (هێواش)", + "isolateSpeechHint": "پێش هاوشانکردن مۆسیقا و کاریگەرییە دەنگییەکان لادەبات، بۆ ئەوەی aligner تەنها گفتوگۆکە ببیستێت. یارمەتی دەدات بۆ ئەو دێڕانەی بەسەر مۆسیقای بەرز یان ئاکشندا دەوترێن، بەڵام نزیکەی هێندەی خودی دەنگەکە کات دەبات لەگەڵ GPU - و چەندین جار زیاتر بەبێ GPU.", + "isolatingSpeech": "جیاکردنەوەی قسە... (ئەمە کەمێک کات دەبات)", + "isolateSpeechFailed": "نەتوانرا قسەکە جیا بکرێتەوە - لەبری ئەوە بەرامبەر دەنگی ڕەسەن هاوشان کرا.", + "checkWithSpeechToText": "پشکنین بە قسە-بۆ-دەق", + "checkWithSpeechToTextHint": "دەنگەکەش دەقدەکاتەوە، و هەموو جوڵاندنێک بەرامبەر ئەو شوێنە دەپشکنێت کە وشەکان بەڕاستی تێیدا بیستراون. ئەو جوڵاندنە گەورانەی قسەکە پشتڕاستیان دەکاتەوە بۆت نیشانە دەکرێن، و ئەو جوڵاندنانەی لەو شوێنە دوور دەکەونەوە کە دێڕێک تێیدا دەبیسترێت بەبێ نیشانە دەهێڵدرێنەوە بۆ ئەوەی بیانپشکنیت. هەروەها پیشانی دەدات چەند لە هەر دێڕێک بیستراوە - ڕێژەیەکی کەم واتە دەقەکە جیاوازە لەوەی دەوترێت. ژێرنووسێک کە زیاتر لە زۆرترین جوڵاندن لە هاوکاتی دەرچووبێت - لادانێکی نەگۆڕ، خلیسکانێک بەهۆی جیاوازی ڕێژەی چوارچێوە، یان بازدان لەو شوێنانەی دیمەنەکان بڕاون - سەرەتا بەپێی وشە بیستراوەکان هاوکات دەکرێت. Crisp ASR Parakeet بەکاردەهێنێت، کە بۆ فیلمێکی درێژ لەگەڵ GPU چەند خولەکێک دەخایەنێت.", + "checkWithSpeechToTextNotAvailableX": "پشکنینی قسە-بۆ-دەق بۆ {0} بەردەست نییە", + "transcribingToCheck": "دەقکردنەوە بۆ پشکنینی هاوشانکردنەکە...", + "speechToTextFailed": "قسە-بۆ-دەق سەرکەوتوو نەبوو - کۆدەکانی کات بەرامبەری نەپشکنران.", + "speechToTextX": "قسە-بۆ-دەق: {0}", + "speechToTextConfirmedXDisputedY": "قسە: {0} پشتڕاستکرایەوە، {1} ناکۆک", + "hardlyHeardX": "قسە-بۆ-دەق تەنها {0}% ی وشەکانی ژێرنووسەکەی بیست. ئایا ژێرنووسەکە بەو زمانەیە کە قسەی پێدەکرێت؟ aligner ناتوانێت وەرگێڕانێک دابنێت.", + "heard": "بیستراو", + "heardHint": "قسە-بۆ-دەق چەند لە دێڕەکەی بیست. ڕێژەیەکی کەم واتە دەقەکە جیاوازە لەوەی دەوترێت - ئەو شوێنەی کە ئەگەری هەڵەی aligner زۆرترە.", + "statusConfirmedBySpeech": "بە قسە پشتڕاستکرایەوە", + "statusDisputedBySpeech": "لە شوێنی پێشووی خۆی بیسترا", + "statusMovedWithSync": "لەگەڵ هاوکاتکردنەکە جوڵێندرا", + "syncedFirstXY": "سەرەتا هاوکاتکرا: {0} چرکە لە دەستپێک، {1} چرکە لە کۆتایی", + "showSpeechOnly": "تەنها قسە پیشان بدە", + "showSpeechOnlyHint": "شەپۆلی دەنگی هاوشانکراو لە دەنگێک بکێشە کە مۆسیقا و کاریگەرییە دەنگییەکانی لێ لابراوە؛ شەپۆلی دەنگی ڕەسەن وەک خۆی دەمێنێتەوە بۆ بەراوردکردن. دوای جیاکردنەوەی قسە بەردەست دەبێت - لێرە، یان بە \"تەنها قسە پیشان بدە\" لە شەپۆلی دەنگی پەنجەرەی سەرەکیدا.", + "align": "هاوشانکردن", + "original": "ڕەسەن", + "aligned": "هاوشانکراو", + "intro": "aligner ێک هەڵبژێرە و \"هاوشانکردن\" دابگرە بۆ گوێگرتن لە هەموو دێڕێک لە دەنگەکەدا و ورددکردنی کۆدەکانی کاتی.", + "extractingAudio": "دەرهێنانی دەنگ...", + "aligningBatchXOfY": "هاوشانکردن... کۆمەڵی {0} لە {1}", + "extractAudioFailed": "نەتوانرا دەنگەکە بە ffmpeg دەربهێنرێت.", + "modelWillBeDownloaded": "{0} دادەگیرێت", + "summaryXRetimedYKeptZSkipped": "کاتی نوێ دانرا: {0} · هێڵدرایەوە: {1} · بێ قسە: {2}", + "meanShiftX": "تێکڕای جوڵاندن: {0} ms", + "toCheckX": "بۆ پشکنین: {0}", + "largeMovesToCheckX": "{0} دێڕ بە تەنها خۆیان زۆر دوور دەجوڵێن و بەبێ نیشانە هێڵدراونەتەوە - گوێیان لێ بگرە (F5 دێڕی هاوشانکراو لێدەدات، Shift+F5 ڕەسەنەکە) و ئەوانەی دروستن نیشانە بکە.", + "linesToCheckX": "{0} دێڕ بەبێ نیشانە هێڵدراونەتەوە بۆ پشکنین - گوێیان لێ بگرە (F5 دێڕی هاوشانکراو لێدەدات، Shift+F5 ڕەسەنەکە) و ئەوانەی دروستن نیشانە بکە.", + "changeXOfY": "گۆڕانکاری {0} لە {1}", + "previousChange": "گۆڕانکاری پێشوو", + "nextChange": "گۆڕانکاری دواتر", + "startShift": "دەستپێک", + "endShift": "کۆتایی", + "statusRetimed": "کاتی نوێ دانرا", + "statusMovedWithNeighbours": "لەگەڵ دراوسێکانی جوڵێندرا", + "statusLargeMoveUnconfirmed": "جوڵاندنی گەورە - گوێ بگرە، نیشانە بکە بۆ جێبەجێکردن", + "statusUnchanged": "پێشتر لە شوێنی خۆیدایە", + "statusNoSpeech": "بێ قسە", + "statusShiftTooLarge": "هێڵدرایەوە - جوڵاندن زۆر گەورەیە", + "statusFailed": "هێڵدرایەوە - aligner سەرکەوتوو نەبوو", + "statusAdjustedByHand": "بە دەست ڕێکخرا", + "alignedWaveformHint": "دێڕێک ڕابکێشە بۆ جوڵاندنی، یان لێوارەکانی ڕابکێشە بۆ گۆڕینی دەستپێک یان کۆتاییەکەی.", + "playLine": "لێدانی دێڕ", + "undoAdjustment": "پاشگەزبوونەوە لە ڕێکخستن", + "playPause": "لێدان / وەستان", + "playAligned": "هاوشانکراو", + "playAlignedHint": "دێڕی هەڵبژێردراو بە کۆدەکانی کاتی هاوشانکراوی لێبدە", + "apply": "جێبەجێکردن", + "applyHint": "نیشانەی دێڕێک لابدە بۆ پاراستنی کۆدەکانی کاتی ڕەسەنی. دوو کرتە لە دێڕێک بکە بۆ لێدانی. دێڕەکان هەروەها دەتوانرێن لە شەپۆلی دەنگی هاوشانکراودا بجوڵێندرێن یان قەبارەیان بگۆڕدرێت." + }, "beautifyTimeCodesProfile": { "title": "دەستکاری پرۆفیلی جوانکردنی کۆدەکانی کات", "loadPreset": "بارکردنی پێش-ڕێکخستن", "presetDefault": "بنەڕەتی", "presetNetflix": "Netflix", "presetSdi": "SDI", - "general": "گشتی", + "saveAsProfile": "پاشەکەوتکردن وەک پرۆفایل...", + "deleteProfile": "سڕینەوەی پرۆفایل", + "profileName": "ناوی پرۆفایل", + "overwriteProfileX": "پرۆفایلێک بە ناوی \"{0}\" پێشتر هەیە. جێگیری بکرێتەوە؟", + "deleteProfileX": "پرۆفایلی \"{0}\" بسڕدرێتەوە؟", "gap": "بۆشایی", "gapSuffix": "چوارچێوە (هەروەها خانەکانی بۆشایی نا-سفری خوارەوە نوێ دەکاتەوە)", "milliseconds": "میلی چرکە", @@ -1875,6 +2166,10 @@ "bridgeGaps": { "bridgeGapsSmallerThan": "پڕکردنەوەی بۆشاییە بچووکتر لە (میلی چرکە)", "minGap": "کەمترین بۆشایی (میلی چرکە)", + "bridgeGapsSmallerThanFrames": "پڕکردنەوەی بۆشاییەکانی بچووکتر لە (چوارچێوە)", + "minGapFrames": "کەمترین بۆشایی (چوارچێوە)", + "calculateBridgeGapsSmallerThanDotDotDot": "هەژمارکردنی سنووری پڕکردنەوەی بۆشایی لە ڕێژەی چوارچێوەوە...", + "useXMsAsBridgeGapsSmallerThan": "پڕکردنەوەی بۆشاییەکانی بچووکتر لە \"{0}\" میلی چرکە؟", "numberOfSmallGapsBridgedX": "ژمارەی بۆشاییە بچووکە پڕکراوەکان: {0}", "percentFoPrevious": "بۆشایی بۆ پێشوو (%)", "gapChange": "گۆڕینی بۆشایی" @@ -1908,6 +2203,7 @@ "addColor": "زیادکردنی ڕەنگ", "deleteLinesWithSpecificActorsOrStyles": "سڕینەوەی دێڕەکان بە ئەکتەر یان شێوازی دیاریکراو (چەند دانەیەک بە کۆما جیا بکە)", "useSourceStylesIfPossible": "بەکارهێنانی شێوازەکانی سەرچاوە ئەگەر بکرێت", + "keepSourceEmbeddedFonts": "پاراستنی فۆنتە تێخراوەکانی سەرچاوە (footer)", "editStyles": "دەستکاری شێوازەکان", "editProperties": "دەستکاری تایبەتمەندییەکان", "editAttachments": "دەستکاری هاوپێچەکان", @@ -1939,10 +2235,50 @@ "convertColorsToDialogReBreakLines": "دابەشکردنەوەی دێڕەکان", "snapTimeCodesToFramesInfo": "هەموو کاتی دەستپێک و کۆتایی بۆ نزیکترین چوارچێوە دەخڕێنرێتەوە. ڕێژەی چوارچێوە لە فایلێکی ڤیدیۆی هاوناو لەگەڵ فایلی ژێرنووسدا دەخوێنرێتەوە، مەگەر ڕێژەیەکی جێگیر هەڵبژێردرابێت.", "addFolderDotDotDot": "زیادکردنی فۆڵدەر...", + "addFolderRecursiveDotDotDot": "زیادکردنی فۆڵدەر بە ژێرفۆڵدەرەکانەوە...", "selectFolderToConvert": "فۆڵدەرێکی فایلەکان هەڵبژێرە بۆ گۆڕین", "includeSubfolders": "لەخۆگرتنی ژێرفۆڵدەرەکان کە فۆڵدەر زیاد دەکەیت", + "videoFilesWhenAddingFolder": "فایلە ڤیدیۆییەکان (mkv، mp4، ts...) لە کاتی زیادکردنی فۆڵدەردا", + "videoFilesAsk": "پرسیارکردن", + "videoFilesInclude": "زیادکردنی ڕێڕەوەکانی ژێرنووسیان", + "videoFilesSkip": "تێپەڕاندن", + "folderContainsXVideoFiles": "فۆڵدەرەکە {0} فایلی ڤیدیۆیی (mkv، mp4، ts...) تێدایە.\n\nڕێڕەوە تێخراوەکانی ژێرنووسیشیان زیاد بکرێن، یان تەنها فایلەکانی ژێرنووس؟", + "addVideoFiles": "زیادکردنی فایلە ڤیدیۆییەکان", + "skipVideoFiles": "تەنها فایلەکانی ژێرنووس", + "doNotAskAgainVideoFiles": "دووبارە مەپرسە (لە ڕێکخستنەکانی گۆڕینی بەکۆمەڵدا بیگۆڕە)", + "settingsSectionOutput": "دەرچوون", + "settingsSectionAddingFiles": "زیادکردنی فایلەکان", + "settingsSectionImageBasedSubtitles": "ژێرنووسی وێنەیی (OCR)", + "settingsSectionOther": "ئەوانی تر", "keepSourceFileTimestamp": "پاراستنی بەروار/کاتی فایلی سەرچاوە لەسەر فایلە دەرهێنراوەکان", - "scanningFolderX": "پشکنینی {0}..." + "preventSleepWhileConverting": "ڕێگریکردن لە خەوتنی کۆمپیوتەر لە کاتی گۆڕیندا", + "scanningFolderX": "پشکنینی {0}...", + "transportStreamSettings": "ڕێکخستنەکانی Transport Stream", + "transportStreamSettingsDotDotDot": "ڕێکخستنەکانی Transport Stream...", + "transportStreamSettingsInfo": "بۆ ئەو ڕێڕەوانەی ژێرنووس جێبەجێ دەبێت کە لە فایلەکانی Transport Stream (.ts/.m2ts) دەرهێنراون. شوێن و قەبارەی ڤیدیۆ تەنها کاریگەرییان لەسەر ڕێڕەوە وێنەییەکانی DVB هەیە کە بۆ فۆرماتێکی وێنەیی دەرهێنراون.", + "transportStreamOverrideXPosition": "جێگرتنەوەی شوێنی X ی ڕەسەن", + "transportStreamOverrideYPosition": "جێگرتنەوەی شوێنی Y ی ڕەسەن", + "transportStreamOverrideVideoSize": "جێگرتنەوەی قەبارەی ڤیدیۆی ڕەسەن", + "transportStreamBottomMargin": "پەراوێزی خوارەوە", + "transportStreamFileNameEnding": "کۆتایی ناوی فایل", + "transportStreamFileNameEndingInfo": "پێش پاشگری فایل بۆ هەر ڕێڕەوێکی دەرهێنراو زیاد دەکرێت. بەتاڵی بهێڵەرەوە بۆ بەکارهێنانی پاشگری ئاسایی زمان.", + "transportStreamOnlyTeletext": "تەنها teletext", + "transportStreamGetSizeFromVideo": "وەرگرتنی قەبارە لە ڤیدیۆوە...", + "twoLetterLanguageCodeUppercase": "کۆدی زمانی دوو پیتی (پیتی گەورە)", + "threeLetterLanguageCodeUppercase": "کۆدی زمانی سێ پیتی (پیتی گەورە)", + "formatContainsDotDotDot": "فۆرمات لەخۆدەگرێت...", + "extensionIsDotDotDot": "پاشگری فایل بریتییە لە...", + "statusIsError": "دۆخ هەڵەیە", + "forcedTracksOnly": "تەنها ڕێڕەوە ناچارییەکان (forced)", + "xConvertedYFailedInZ": "{0:#,###,##0} گۆڕدران، {1:#,###,##0} سەرکەوتوو نەبوون لە {2}", + "xNotProcessed": "{0:#,###,##0} پرۆسێس نەکران", + "removeUnicodeControlCharactersTitle": "لابردنی پیتە کۆنترۆڵییەکانی Unicode", + "removeUnicodeControlCharactersInfo": "پیتە نادیارەکانی کۆنترۆڵی ئاراستەی Unicode (LRM، RLM، LRE، RLE، PDF، LRO و RLO) لە دەقەکە لادەبات، و بۆشاییە نەشکاوەکان بە بۆشایی ئاسایی جێگیر دەکاتەوە.", + "preset": "پێش-ڕێکخستن", + "savePresetDotDotDot": "پاشەکەوتکردنی پێش-ڕێکخستن...", + "deletePreset": "سڕینەوەی پێش-ڕێکخستن", + "presetName": "ناوی پێش-ڕێکخستن", + "deletePresetX": "پێش-ڕێکخستنی \"{0}\" بسڕدرێتەوە؟" }, "changeCasing": { "fixNames": "چاککردنی ناوەکان", @@ -2027,10 +2363,13 @@ }, "mergeLinesWithSameText": { "maxMsBetweenLines": "زۆرترین میلی چرکە لە نێوان دێڕەکاندا", - "includeIncrementingLines": "لەخۆگرتنی دێڕەکانی دەقی ژمارە بەرزبوو" + "maxFramesBetweenLines": "زۆرترین چوارچێوە لە نێوان دێڕەکاندا", + "includeIncrementingLines": "لەخۆگرتنی دێڕەکانی دەقی ژمارە بەرزبوو", + "includeRollUpCaptions": "لەخۆگرتنی ژێرنووسی roll-up (خلیسکاو)" }, "mergeLinesWithSameTimeCodes": { "maxMsDifference": "زۆرترین جیاوازی (میلی چرکە)", + "maxFramesDifference": "زۆرترین جیاوازی (چوارچێوە)", "makeDialog": "دروستکردنی دیالۆگەکان" }, "netflixCheckAndFix": { @@ -2130,12 +2469,29 @@ "letterboxCustom": "بەرزی دڵخوازی بارەکە", "barHeightPx": "بەرزی بارەکە (پیکسڵ)", "titleSafePercent": "ناوچەی سەلامەتی ناونیشان (%)", + "moveCaptions": "گواستنەوەی ژێرنووسەکان", + "moveCaptionsDotDotDot": "گواستنەوەی ژێرنووسەکان...", + "moveCaptionsTo": "گواستنەوەی ژێرنووسەکان", + "moveCaptionsIntoBars": "بۆ ناو شریتە ڕەشەکانی letterbox (دەرەوەی وێنەکە)", + "moveCaptionsIntoPicture": "ناو وێنەکە (دەرەوەی شریتەکان)", + "moveCaptionsOffset": "دووری لە لێوار (px)", + "letterboxBarHeightXPxYOfZCaptionsWillMove": "بەرزی شریت: {0} px - {1} لە {2} ژێرنووس دەجوڵێن", + "removeFadeInOut": "لابردنی fade in/out", + "removeFadeInOutXLinesRemoved": "{0} دێڕی fade تێکەڵ کران لەگەڵ ئەو دێڕانەی سەر بەوانن", + "removeFadeInOutNothingFound": "هیچ دێڕێکی fade in/out نەدۆزرایەوە", "positionSummary": "{0}×{1} - {2} ژێرنووس - بەرزی بارەکە: {3} پیکسڵ", "xInActivePicture": "{0} لە وێنەکەدا", "xInTopBar": "{0} لە بارە سەرەوەکەدا", "xInBottomBar": "{0} لە بارە خوارەوەکەدا", "noImageSubtitlesLoaded": "هیچ ژێرنووسێکی وێنەیی بارنەکراوە", - "imageBasedFormatNotSupported": "فۆرماتی ژێرنووسی وێنەیی نەدۆزرایەوە/پشتگیری نەکراوە." + "imageBasedFormatNotSupported": "فۆرماتی ژێرنووسی وێنەیی نەدۆزرایەوە/پشتگیری نەکراوە.", + "frameRateDeclaredInFile": "ڕێژەی چوارچێوەی ڕاگەیەندراو لە فایلی Blu-ray sup", + "frameRateDetectedFromTimeCodesX": "ڕێژەی چوارچێوە لە کۆدەکانی کاتی Blu-ray sup دۆزرایەوە (فایلەکە {0} ڕادەگەیەنێت)", + "frameRateFromVideo": "ڕێژەی چوارچێوەی ڤیدیۆ", + "frameRateCurrent": "ڕێژەی چوارچێوەی ئێستا", + "frameRateSetManually": "ڕێژەی چوارچێوە بە دەست دانراوە", + "frameRateUsageInfo": "دەرهێنانەکانی Blu-ray sup، BDN XML، DOST و FCP بەم ڕێژەی چوارچێوەیە دەنووسرێن. هیچ کاتێک ناگۆڕێت - بۆ ئەوە \"گۆڕینی ڕێژەی چوارچێوە\" بەکاربهێنە.", + "useVideoFrameRateXInsteadOfY": "ڕێژەی چوارچێوەی ڤیدیۆکە {0} ە، بەڵام ژێرنووسەکە لەسەر {1} دانراوە.\n\nڕێژەی چوارچێوەی ڤیدیۆکە ({0}) بەکاربهێنرێت؟" }, "removeTextForHearingImpaired": { "interjections": "هاوار و دەنگەکان", @@ -2165,6 +2521,7 @@ "pickFontNameInstalledFonts": "فۆنتە دامەزراوەکان", "pickFontNameCollectedFonts": "فۆنتە کۆکراوەکان", "colorPickerTitle": "هەڵبژاردنی ڕەنگ", + "colorPickerBrightness": "ڕووناکی", "filterLayersTitle": "پاڵاوتنی چینەکان بۆ پیشاندان", "filterLayersHideFromWaveform": "شاردنەوە لە شەپۆل/سپێکترۆگرام", "filterLayersHideFromSubtitleGrid": "شاردنەوە لە خشتەی ژێرنووس", @@ -2215,7 +2572,21 @@ "correctWordsX": "وشە دروستەکان: {0}", "namesX": "ناوەکان: {0}", "addedToDictionaryX": "زیادکراو بۆ فەرهەنگ: {0}", - "doNotShowThisAgain": "ئەم نامەیە دووبارە پیشان مەدە" + "doNotShowThisAgain": "ئەم نامەیە دووبارە پیشان مەدە", + "editUseAlwaysList": "دەستکاری لیستی \"هەمیشە بەکاربهێنە\"...", + "useAlwaysListTitle": "پشکنینی ڕێنووس - لیستی \"هەمیشە بەکاربهێنە\"", + "useAlwaysListHeader": "لیستی \"هەمیشە بەکاربهێنە\"", + "useAlwaysListDescription": "ئەو وشانەی پشکنینی ڕێنووس بە خۆکاری جێگیریان دەکاتەوە، کە بە \"گۆڕینی هەموو\" و \"هەمیشە بەکاربهێنە\" پاشەکەوت کراون. جووتێک تەنها کاتێک بەکاردێت کە وشەکە بە هەڵە نووسرابێت.", + "useAlwaysWord": "وشەی هەڵە نووسراو", + "xPairs": "{0:#,##0} جووت", + "xUnusedPairs": "{0:#,##0} هەرگیز بەکارنەهاتوون", + "useAlwaysUnusedHint": "هەرگیز بەکارنەهاتووە - ئەم وشەیە دروست نووسراوە (یان ناوە یان وشەی بەکارهێنەرە)، بۆیە پشکنینی ڕێنووس هەرگیز نیشانەی ناکات", + "removeUnused": "لابردنی بەکارنەهاتووەکان", + "useAlwaysEmpty": "هێشتا هیچ جووتێکی \"هەمیشە بەکاربهێنە\" بۆ ئەم زمانە نییە", + "useAlwaysEmptyHint": "جووتەکان زیاد دەکرێن کاتێک لە پشکنینی ڕێنووسدا کرتە لە \"گۆڕینی هەموو\" یان \"هەمیشە بەکاربهێنە\" دەکەیت.", + "useAlwaysNoMatch": "هیچ جووتێک لەگەڵ گەڕانەکە ناگونجێت", + "useAlwaysSameWord": "جێگرەوەکە دەبێت جیاواز بێت لە وشەکە.", + "useAlwaysRememberOff": "\"لەبیرکردنی لیستی 'هەمیشە بەکاربهێنە'\" لە ڕێکخستنەکاندا ناچالاکە، بۆیە پشکنینی ڕێنووس ئەم لیستە بەکارناهێنێت و پاشەکەوتی ناکات." }, "video": { "burnIn": { @@ -2228,6 +2599,7 @@ "sampleRate": "ڕێژەی نموونە", "audio": "دەنگ", "preset": "پێش-ڕێکخستن", + "tune": "Tune", "pixelFormat": "فۆرماتی پیکسڵ", "crf": "CRF", "useSource": "بەکارهێنانی سەرچاوە", @@ -2239,7 +2611,9 @@ "outputProperties": "تایبەتمەندییەکانی دەرچوون...", "videoFileSize": "قەبارەی فایلی ڤیدیۆ", "oneBox": "یەک چوارگۆشە", - "logoInfo": "وێنەیەکی PNG هەڵبژێرە و ڕایبکێشە بۆ دانانی لەسەر ڤیدیۆ." + "logoInfo": "وێنەیەکی PNG هەڵبژێرە و ڕایبکێشە بۆ دانانی لەسەر ڤیدیۆ.", + "noSubtitlesGenerateAnyway": "هیچ دێڕێکی ژێرنووس نییە بۆ سووتاندن.\n\nڤیدیۆکە بەبێ ژێرنووس دروست بکرێت؟", + "noSubtitlesInXItemsGenerateAnyway": "{0} بڕگەی بەکۆمەڵ هیچ دێڕێکی ژێرنووسیان نییە بۆ سووتاندن.\n\nئەو ڤیدیۆیانە بەبێ ژێرنووس دروست بکرێن؟" }, "videoTransparent": { "title": "دروستکردنی ڤیدیۆی شەفاف لەگەڵ ژێرنووس" @@ -2250,6 +2624,21 @@ "translateToEnglish": "وەرگێڕان بۆ ئینگلیزی", "transcribing": "دەقکردنەوە...", "transcribingXOfY": "دەقکردنەوەی {0} لە {1}...", + "linesTranscribedXOfYFailedZ": "{0} لە {1} دێڕ دەقکرانەوە - {2} سەرکەوتوو نەبوون یان قسەیان تێدا نەبوو.\n\nدێڕە سەرکەوتوو نەبووەکان دەقی ئێستایان دەپارێزن. دێڕە دەقکراوەکان جێبەجێ بکرێن، یان سەرکەوتوو نەبووەکان دووبارە هەوڵ بدرێنەوە (دەتوانیت سەرەتا بزوێنەر یان ڕێکخستنەکان بگۆڕیت)؟", + "linesTranscribedXOfYCancelled": "دەقکردنەوە دوای {0} لە {1} دێڕ هەڵوەشێنرایەوە.\n\nدێڕە دەقکراوەکان جێبەجێ بکرێن؟ دێڕەکانی تر دەقی ئێستایان دەپارێزن.", + "noLinesTranscribed": "هیچ کام لە {0} دێڕەکە نەتوانران دەقبکرێنەوە.\nتکایە تۆماری ئامرازەکان بپشکنە بۆ وردەکاری.", + "applyTranscribedLines": "جێبەجێکردنی دەقکراوەکان", + "retryFailedLines": "دووبارە هەوڵدانەوەی سەرکەوتوو نەبووەکان", + "isolateSpeech": "جیاکردنەوەی قسە (هێواش)", + "isolateSpeechHint": "پێش دەقکردنەوە مۆسیقا و کاریگەرییە دەنگییەکان لادەبات. دێڕی لەدەستچووی کەمتر و کاتبەندی باشتر دەدات لە دەنگێکدا کە مۆسیقای بەرزی تێدایە، بەڵام نزیکەی هێندەی خودی دەنگەکە کات دەبات لەگەڵ GPU - و چەندین جار زیاتر بەبێ GPU.", + "isolatingSpeech": "جیاکردنەوەی قسە...", + "isolateSpeechFailed": "نەتوانرا قسەکە جیا بکرێتەوە - لەبری ئەوە دەنگی ڕەسەن دەقدەکرێتەوە.", + "detectSpeakers": "ناسینەوەی قسەکەران", + "detectSpeakersHint": "هەر دێڕێک بە قسەکەرەکە دەستپێدەکات، وەک \"(speaker 0)\"، بە بەکارهێنانی diarization ی Sortformer ی NVIDIA (تا 8 قسەکەر). باشترین کار دەکات لەگەڵ ئەو backend انەی دێڕەکان لەو شوێنەدا دابەش دەکەن کە قسەکەر دەگۆڕێت، وەک Parakeet و Cohere.", + "detectSpeakersNeedsNewerCrispAsr": "\"ناسینەوەی قسەکەران\" پێویستی بە Crisp ASR v{0} یان نوێترە، بەڵام v{1} دامەزراوە.\n\nCrisp ASR نوێ بکەرەوە (دوگمەی چەرخەکە لە تەنیشت بزوێنەرەکە) یان \"ناسینەوەی قسەکەران\" ناچالاک بکە.", + "xNeedsNewerCrispAsr": "{0} پێویستی بە Crisp ASR v{1} یان نوێترە، بەڵام v{2} دامەزراوە.\n\nئێستا نوێکردنەوەکە دابگیرێت و دابمەزرێت؟", + "vad": "VAD", + "vadHint": "ناسینەوەی چالاکی دەنگ: تەنها قسەکە دەقدەکرێتەوە، لەو شوێنانەدا دەبڕدرێت کە قسەکەر دەوەستێت.\nخۆکار: Silero، و تەنها بۆ ئەو بزوێنەرانەی پێویستیان پێیەتی (Cohere، Mega، Index-Echo).\nSilero، FireRedVAD، Whisper-VAD، WebRTC: هەمیشە چالاک، بۆ هەموو بزوێنەرێکی Crisp ASR. FireRedVAD وردترینە، Whisper-VAD کەمترین و پاکترین بڕین دەدات بەڵام هێواشترینە.\nIndex-Echo هەمیشە Silero بەکاردەهێنێت. --vad، --vad-model یان --chunk-seconds لە ڕێکخستنە پێشکەوتووەکاندا لە پێشترن.", "inputLanguage": "زمانی داخڵ", "advancedWhisperSettings": "پارامێترە پێشکەوتووەکانی قسە بۆ دەق", "downloadingSpeechToTextEngine": "داگرتنی بزوێنەری قسە بۆ دەق", @@ -2333,6 +2722,19 @@ "videoEncodingSettings": "TTS - ڕێکخستنەکانی کۆدکردنی ڤیدیۆ", "elevenLabsSettings": "TTS - ڕێکخستنەکانی ElevenLabs", "elevenLabsSettingsResetHint": "گەڕاندنەوەی ڕێکخستنەکانی ElevenLabs بۆ بەها بنەڕەتییەکان", + "provider": "دابینکەر", + "openAiCompatibleSettings": "TTS - ڕێکخستنەکانی گونجاو لەگەڵ OpenAI", + "customServerUrl": "URL ی ڕاژەکاری تایبەت", + "customServerUrlHint": "endpoint ی تەواوی قسەی ڕاژەکارێکی گونجاو لەگەڵ OpenAI، بەکاردێت کاتێک دابینکەر \"Custom\" ە، بۆ نموونە http://localhost:8880/v1/audio/speech", + "customModels": "مۆدێلە تایبەتەکان", + "customModelsHint": "ناوی مۆدێلەکان بە کۆما جیاکراونەتەوە، پێشکەش دەکرێن کاتێک دابینکەر \"Custom\" ە", + "customVoices": "دەنگە تایبەتەکان", + "customVoicesHint": "ناوی دەنگەکان بە کۆما جیاکراونەتەوە، لەلایەن دابینکەری \"Custom\" و ئەو مۆدێلانەی OpenRouter بەکاردێن کە هیچ لیستێکی دەنگ بڵاو ناکەنەوە", + "instructions": "ڕێنماییەکان", + "instructionsHint": "شێوازی قسەکردنی ئارەزوومەندانە، بۆ نموونە \"بە دەنگێکی هێمن و گەرم قسە بکە\". تەنها بۆ ئەو مۆدێلانە دەنێردرێت کە پشتگیری دەکەن (نەک tts-1/tts-1-hd)", + "openAiSpeedHint": "خێرایی قسە لە 0.25 تا 4.0 (1.0 ئاساییە). هەموو مۆدێلێک پشتگیری ناکات", + "outputFormat": "فۆرماتی دەرچوون", + "outputFormatHint": "فۆرماتی دەنگ کە لە ڕاژەکار داوا دەکرێت. \"Auto\" داوای MP3 دەکات و بۆ ئەو مۆدێلانەی تەنها PCM دەگەڕێننەوە دەگۆڕێت بۆ PCM (بۆ نموونە Gemini TTS)", "regenerateAudio": "دروستکردنەوەی دەنگ", "autoContinuePlaying": "بەردەوامبوونی خۆکاری لێدان", "playLine": "لێدانی دێڕ", @@ -2341,6 +2743,13 @@ "addingAudioToVideoFileDotDotDot": "زیادکردنی دەنگ بۆ فایلی ڤیدیۆ...", "preparingMergeDotDotDot": "ئامادەکاری تێکەڵکردن...", "importVoiceDotDotDot": "هێنانەناوی دەنگ...", + "renameVoiceDotDotDot": "ناوگۆڕینی دەنگ...", + "renameVoiceTitle": "ناوگۆڕینی دەنگ", + "voiceXCouldNotBeRenamedX": "نەتوانرا ناوی دەنگی '{0}' بگۆڕدرێت: {1}", + "deleteVoiceDotDotDot": "سڕینەوەی دەنگ...", + "deleteVoiceTitle": "سڕینەوەی دەنگ", + "deleteVoiceXQuestion": "دەنگی '{0}' بسڕدرێتەوە؟\n\nتۆمارە سەرچاوەکە و فایلەکانی لە دیسک لادەبرێن.", + "voiceXCouldNotBeDeletedX": "نەتوانرا دەنگی '{0}' بسڕدرێتەوە: {1}", "voiceImportSuccessTitle": "دەنگ هێنرا", "voiceXImported": "دەنگی '{0}' بە سەرکەوتوویی هێنرا", "voiceXCouldNotBeImported": "نەتوانرا دەنگی '{0}' بهێنرێت - بۆ وردەکارییەکان تۆمار ببینە", @@ -2350,6 +2759,49 @@ "dropAudioFileHereToImportVoice": "فایلی دەنگ لێرە دادەبنێ بۆ هێنانەناوی دەنگ", "dropAudioFileHereHint": ".wav یان .mp3", "voiceCloneTranscriptTitle": "دەقی دەنگەکە بنووسە (بۆ کلۆنکردنی دەنگ پێویستە)", + "voiceManagerTitle": "TTS - بەڕێوەبەری دەنگ", + "voiceManagerDotDotDot": "بەڕێوەبەری دەنگ...", + "voiceManagerMenuItem": "بەڕێوەبەری دەنگی TTS...", + "speakFromCurrentLineTitle": "خوێندنەوە لە دێڕی ئێستاوە", + "speakFromCurrentLineDotDotDot": "خوێندنەوە لە دێڕی ئێستاوە...", + "speakFromCurrentLineHint": "دێڕەکان یەک لە دوای یەک بە دەنگی بەرز دەخوێنێتەوە، لە دێڕی ئێستاوە دەستپێدەکات. Escape دابگرە یان کرتە لە دێڕێکی تر بکە بۆ وەستاندن.", + "stopSpeaking": "وەستاندنی خوێندنەوە", + "speakingLineX": "خوێندنەوەی دێڕی {0}... (Escape بۆ وەستاندن)", + "playWithSpeechTitle": "لێدان لەگەڵ قسە", + "playWithSpeechDotDotDot": "لێدان لەگەڵ قسە...", + "playWithSpeechHint": "ڤیدیۆکە لێدەدات و هەر دێڕێک دەخوێنێتەوە کاتێک ڤیدیۆکە دەگاتە ئەو. وەک ئاسایی بوەستێنە و بگەڕێ؛ Escape دابگرە بۆ وەستاندن.", + "lowerVideoVolumeWhileSpeaking": "کەمکردنەوەی دەنگی ڤیدیۆ لە کاتی خوێندنەوەدا", + "pauseVideoWhenSpeechRunsLate": "وەستاندنی ڤیدیۆ کاتێک قسە دەچێتە ناو دێڕی دواتر", + "waitingForSpeechLineX": "دروستکردنی قسە بۆ دێڕی {0}... (Escape بۆ وەستاندن)", + "voiceKindClone": "دەنگی کلۆنکراو", + "voiceKindPreset": "ناوخۆیی", + "voiceKindModel": "مۆدێلی دەنگ", + "voiceKindOnline": "ئۆنلاین", + "transcript": "دەقی نووسراو", + "transcriptRequiredHint": "پێویستە - بزوێنەرەکە لە کاتی کلۆنکردندا ئەم دەقە نووسراوەی تۆمارەکە (ref-text) دەخوێنێتەوە", + "transcriptOptionalHint": "ئارەزوومەندانە - دەقێکی نووسراوی وردی تۆمارەکە کلۆنکردن باشتر دەکات", + "saveTranscript": "پاشەکەوتکردنی دەقی نووسراو", + "searchVoices": "گەڕان لە دەنگەکان", + "loadingVoicesDotDotDot": "بارکردنی دەنگەکان...", + "noVoicesForEngine": "هیچ دەنگێک نییە - تۆمارێک هێنانەناو بکە یان پاکێجێکی دەنگ دابگرە", + "noVoicesMatchFilter": "هیچ دەنگێک لەگەڵ گەڕانەکە ناگونجێت", + "copyVoiceTo": "کۆپیکردنی دەنگ بۆ", + "copyVoiceToDotDotDot": "کۆپیکردنی دەنگ بۆ بزوێنەر...", + "copyingVoiceXToYDotDotDot": "کۆپیکردنی دەنگی '{0}' بۆ {1}...", + "voiceXCopiedToY": "دەنگی '{0}' کۆپی کرا بۆ {1}", + "voiceXCouldNotBeCopiedToY": "نەتوانرا دەنگی '{0}' کۆپی بکرێت بۆ {1} - بۆ وردەکاری سەیری تۆمارەکە بکە", + "voiceXAlreadyExistsInYContinue": "دەنگێک بە ناوی '{0}' پێشتر لە {1} هەیە.\n\nهەر کۆپی بکرێت؟", + "openVoicesFolder": "کردنەوەی فۆڵدەری دەنگەکان", + "downloadVoicePacksDotDotDot": "داگرتنی پاکێجەکانی دەنگ...", + "downloadVoicePacksTitle": "TTS - داگرتنی پاکێجەکانی دەنگ", + "voicePackIntro": "پاکێجەکانی دەنگ کۆمەڵێک تۆماری کورت و پاکن لەگەڵ دەقی نووسراو، ئامادەن بۆ کلۆنکردن. هەر پاکێجێک بۆ ناو بزوێنەری هەڵبژێردراو هێنانەناو دەکرێت (ئەو دەنگانەی پێشتر هەن تێدەپەڕێندرێن) و ATTRIBUTION.txt ێکی تێدایە لەگەڵ مۆڵەت و سەرچاوەکانی.", + "voicePackDetailsXVoicesYSizeZLicense": "{0} دەنگ · {1} · {2}", + "installToEngine": "دامەزراندن بۆ بزوێنەر", + "downloadAndInstall": "داگرتن و دامەزراندن", + "selectAtLeastOneVoicePack": "لانیکەم یەک پاکێجی دەنگ هەڵبژێرە", + "downloadingXDotDotDot": "داگرتنی {0}...", + "installingXDotDotDot": "دامەزراندنی {0}...", + "xVoicesInstalledYSkipped": "{0} دەنگ دامەزران ({1} پێشتر هەبوون)", "useSpeechToTextDotDotDot": "بەکارهێنانی قسە بۆ دەق...", "autoCastMenuItem": "دۆزینەوەی دەنگەکان لە ڤیدیۆ و کلۆنکردن...", "autoCastSpeakersTitle": "دەنگە دۆزراوەکان لە ڤیدیۆدا", @@ -2368,7 +2820,7 @@ "cloneVoicePerLinePreparing": "وەرگرتنی دەنگی هەر دێڕێک لە ڤیدیۆکەوە...", "cloneVoicePerLineNeedsVideo": "کلۆنکردنی دەنگی هەر دێڕێک پێویستی بە ئەو ڤیدیۆیە هەیە کە ژێرنووسەکە سەری دەگرێت. ڤیدیۆکە بکەوە و دووبارە تاقی بکەوە.", "cloneVoicePerLineNoClips": "هیچ دەنگێک نەتوانرا لە ڤیدیۆکەوە وەربگیرێت، بۆیە هیچ شتێک نییە بۆ کلۆنکردن. پشکنین بکە ڤیدیۆکە تراکێکی دەنگی هەیە.", - "cloneVoicePerLineNeedsOriginalSubtitleX": "{0} تەنها کاتێک دەتوانێت دێڕێک کۆپی بکات کە بزانێت لەو دێڕەدا لە ڤیدیۆکەدا چی دەوترێت، کە لە ژێرنووسی زمانی ڕەسەنەوە دێت. هیچ ژێرنووسێکی ڕەسەن بارنەکراوە، بۆیە هەموو دێڕەکان بە یەکەم دەنگی هاوردەکراو دەوترێن لە جیاتی ئەو دەنگەی لە ڤیدیۆکەدایە.\n\nژێرنووسی ڕەسەن لەتەنیشت وەرگێڕانەکە بکەرەوە (فایل > کردنەوەی ڕەسەن...)، پاشان دووبارە دروستی بکە.", + "cloneVoicePerLineTranscribeClipsXYZ": "{0} تەنها کاتێک دەتوانێت دێڕێک کلۆن بکات کە بزانێت لەو دێڕەدا چی لە ڤیدیۆکەدا دەوترێت. ئەوە بۆ {1} لە {2} دێڕ نەزانراوە - بە ئاسایی لە ژێرنووسی زمانی ڕەسەنەوە دێت (فایل > کردنەوەی ڕەسەن...).\n\nئێستا ئەو دێڕانە لە ڤیدیۆکەوە بە قسە-بۆ-دەق دەقبکرێنەوە؟\n\nبەڵێ: بزوێنەر و ئەو زمانەی لە ڤیدیۆکەدا قسەی پێدەکرێت هەڵبژێرە، و کلیپە سەرچاوەکان پێش دروستکردنی قسەکە دەقدەکرێنەوە.\nنەخێر: هەر دروستی بکە - ئەو دێڕانە بە دەنگێکی ئاسایی دەخوێندرێنەوە لەبری دەنگەکەی ناو ڤیدیۆکە.", "voiceCloneConsentTitle": "کلۆنکردنی دەنگ - پێش دەستپێکردن", "voiceCloneConsentHeader": "دەچیت دەنگێک کلۆن بکەیت", "voiceCloneConsentIntro": "کلۆنکردن دەنگی کەسێکی ڕاستەقینە لەبەردەگرێتەوە. ئەمە لە زۆربەی شوێنەکاندا یاسای خۆی هەیە، و لە یەکێتیی ئەورووپادا بەرهەستێکی یاسایی دێتە پاڵ تۆ، نەک Subtitle Edit. تکایە ئەمە جارێک بخوێنەوە.", @@ -2385,10 +2837,29 @@ "advancedTtsSettings": "ڕێکخستنە پێشکەوتووەکانی TTS", "advancedTtsAudioProcessing": "پرۆسێسکردنی دەنگ", "advancedTtsOutput": "دەرچوون", + "advancedTtsVoiceCloning": "کلۆنکردنی دەنگ", + "cleanCloneReferences": "پاککردنەوەی سەرچاوەکانی کلۆنی دەنگ (Sidon)", + "cleanCloneReferencesDescription": "مۆسیقا، ژاوەژاو و دەنگدانەوە لەو دەنگە لادەبات کە دەنگێکی لێ کلۆن دەکرێت: کلیپە وەرگیراوەکان لە ڤیدیۆکە و ئەو تۆمارانەی لە بەڕێوەبەری دەنگدا هێنانەناو کراون. مۆدێلی گەڕاندنەوەی قسەی Sidon لەسەر audio.cpp بەکاردەهێنێت (940 MB داگرتن). دەنگی کلۆنکراو چیتر پاشبنەما کۆپی ناکات، بەڵام قسەی زۆر نزم یان یەکتربڕ لەوانەیە خنکاو دەربچێت.", + "cleaningCloneReferencesDotDotDot": "پاککردنەوەی سەرچاوەکانی کلۆنی دەنگ...", + "downloadSidonTitle": "Sidon دابگیرێت؟", + "downloadSidonQuestionX": "پاککردنەوەی سەرچاوەکانی کلۆنی دەنگ پێویستی بە مۆدێلی گەڕاندنەوەی قسەی Sidon ({0}) هەیە.\n\nئێستا دابگیرێت؟ بەبێ ئەو، سەرچاوەکان وەک خۆیان بەکاردێن.", "proAudioPostProcessing": "پرۆسێسی دوایی دەنگی پڕۆفیشناڵ", "proAudioPostProcessingDescription": "EQ، دەروازەی دەنگ، کۆمپرێشن، ئاساییکردنەوەی توندی (-16 LUFS) و فەیدێکی کورت لە ناوچوون/دەرچوون بۆ هەر پارچەیەک زیاد دەکات.", + "generatingSpeechSegmentXOfY": "دروستکردنی قسە: پارچەی {0} لە {1}", + "adjustingSpeedSegmentXOfY": "ڕێکخستنی خێرایی: پارچەی {0} لە {1}", + "mergingAudioSegmentXOfY": "تێکەڵکردنی دەنگ: پارچەی {0} لە {1}", + "postProcessingSegmentXOfY": "پرۆسێسی دوایی: پارچەی {0} لە {1}", "audioDucking": "نزمکردنی دەنگ", "audioDuckingDescription": "دەنگی ڤیدیۆ ڕەسەن کەم دەکاتەوە و قسەکە تێکەڵ دەکات لەسەری، بۆ ئەوەی تراکە ڕەسەنەکە بە کەمی بمێنێتەوە. تەنها کاتێک جێبەجێ دەبێت کە قسەکە زیاد دەکرێت بۆ فایلی ڤیدیۆ.", + "removeOriginalSpeech": "لابردنی قسەی ڕەسەن (هێواش)", + "removeOriginalSpeechDescription": "مۆسیقا و کاریگەرییە دەنگییەکانی ڤیدیۆی ڕەسەن دەپارێزێت بەڵام قسەکەی لادەبات، و قسە نوێیەکە بەسەریدا تێکەڵ دەکات. نزیکەی هێندەی خودی ڤیدیۆکە کات دەبات لەگەڵ GPU، و چەندین جار زیاتر بەبێ GPU. کاتێک audio ducking چالاکە، ئاستی دەنگەکەی لەسەر مۆسیقا و کاریگەرییەکان جێبەجێ دەبێت. تەنها کاتێک جێبەجێ دەبێت کە قسەکە بۆ فایلی ڤیدیۆکە زیاد دەکرێت.", + "removingOriginalSpeech": "لابردنی قسەی ڕەسەن...", + "removeOriginalSpeechFailed": "نەتوانرا قسەی ڕەسەن لابدرێت - قسەکە بەبێ ئەوە بۆ ڤیدیۆکە زیادکرا.", + "speechRemovalModel": "مۆدێل", + "speechRemovalModelDescription": "باشترین کوالیتی زۆرترینی مۆسیقا و کاریگەرییە دەنگییەکان دەپارێزێت. خێرا نزیکەی سێ جار خێراترە، لەگەڵ لەدەستدانی کەمێک زیاتری مۆسیقا.", + "speechRemovalBestQuality": "باشترین کوالیتی (Mel-Band RoFormer)", + "speechRemovalFast": "خێرا (HTDemucs)", + "videoTruncatedWarning": "وێنەی ناو فایلە ڤیدیۆ نوێیەکە دوای {0} دەوەستێت، بەڵام ڤیدیۆی ڕەسەن {1} درێژە - وێنەکە دەچەقێت لە کاتێکدا دەنگەکە بەردەوام دەبێت.\n\nفایلەکە هێڵدرایەوە. سەیری error-log.txt بکە لە فۆڵدەری داتای Subtitle Edit بۆ دەرچوونی ffmpeg.", "originalVolumePercent": "ئاستی دەنگی ڕەسەن %", "vadSilenceCompression": "کۆمپرێکردنی بێدەنگی VAD", "vadSilenceCompressionDescription": "وەستانەکان لە نێوان وشەکاندا کورت دەکاتەوە لەبری خێراکردنی قسەکە، بۆ ئەوەی پارچەکە بگونجێت بەبێ هیچ زیانی کوالیتی.", @@ -2471,7 +2942,9 @@ "timeCodeFormatColon": "فۆرماتی کۆدی کات:", "shotChangesList": "پێرستی گۆڕانی دیمەنەکان", "shotChangesClearQuestion": "دڵنیایت لە پاککردنەوەی هەموو گۆڕانی دیمەنەکان؟", - "deleteSelectedShotChangeQuestion": "دڵنیایت لە سڕینەوەی گۆڕانی دیمەنی هەڵبژێردراو؟" + "deleteSelectedShotChangeQuestion": "دڵنیایت لە سڕینەوەی گۆڕانی دیمەنی هەڵبژێردراو؟", + "shotChanges": "گۆڕانی دیمەنەکان", + "exportShotChanges": "دەرهێنانی گۆڕانی دیمەنەکان" }, "chapters": { "title": "بەشەکان", @@ -2501,7 +2974,6 @@ "scaleTimesDescription": "کاتی هەموو بەشێک لە ڕێژەیەکی چوارچێوەوە بۆ ئەوی تر گۆڕە.", "fromFrameRate": "لە", "toFrameRate": "بۆ", - "apply": "جێبەجێکردن", "writeToVideo": "نووسین بۆ ڤیدیۆ...", "writeToVideoTitle": "نووسینی بەشەکان بۆ ڤیدیۆ", "writeToVideoDescription": "بەشەکان دەنووسرێن بەناو کۆپییەک لە فایلی ڤیدیۆدا. هیچ شتێک دووبارە کۆد ناکرێت، بۆیە خێرا و بێ زیانە.", @@ -2511,7 +2983,6 @@ "writtenToX": "بەشەکان نووسران بۆ {0}", "unableToWriteChapters": "نەتوانرا بەشەکان بنووسرێن بۆ فایلی ڤیدیۆ.", "chaptersSavedToX": "بەشەکان پاشەکەوتکران لە {0}", - "noVideoLoaded": "هیچ ڤیدیۆیەک بارنەکراوە", "emptyListCallToAction": "هێشتا هیچ بەشێک نییە - یەکێک زیاد بکە لە شوێنی ڤیدیۆدا، یان لە ڤیدیۆ یان فایلێکەوە بهێنە." }, "videoOcr": { @@ -2536,10 +3007,10 @@ "runningOcrXY": "جێبەجێکردنی OCR... {0}/{1}", "noLinesFoundTitle": "هیچ ژێرنووسێک نەدۆزرایەوە", "noLinesFoundMessage": "هیچ دەقێک لە ناوچەی سکاندا نەدۆزرایەوە - هەوڵبدە ناوچەی سکان، بزوێنەر یان کەمترین ڕووناکی ڕێک بخەیت.", + "ocrStoppedEarlyMessage": "بزوێنەری OCR پێش خوێندنەوەی هەموو چوارچێوەکان وەستا، بۆیە ئەو دێڕانەی تا ئێستا دۆزراونەتەوە دەهێڵدرێنەوە و باقییەکەی ونن.{0}{0}{1}", "linesFoundX": "{0} دێڕ دۆزرانەوە", "refiningTimingXY": "وردکردنەوەی کاتبەندی... {0}/{1}", "fixOcrErrors": "چاککردنی هەڵەکانی OCR", - "dictionary": "فەرهەنگ", "editLineX": "دەستکاری دێڕی {0}", "downloadDictionaryHint": "داگرتنی فەرهەنگی پشکنینی ڕێنووس...", "framesPerSecondHint": "چەند چوارچێوە لە چرکەیەکدا پشکنراون. 5 بۆ ژێرنووسی ئاسایی بەسە؛ بەرزتر دێڕە زۆر کورتەکان دەگرێتەوە و گرووپکردن توندتر دەکات، بەڵام کاتی OCR زیاتر دەبات.", @@ -2556,7 +3027,58 @@ "testOcr": "تاقیکردنەوەی چوارچێوەی ئێستا", "testOcrRunning": "تاقیکردنەوەی OCR لەسەر چوارچێوەی ئێستا...", "testOcrResultX": "ئەنجامی تاقیکردنەوە: {0}", - "testOcrNoTextFound": "تاقیکردنەوە: هیچ دەقێک لە ناوچەی سکاندا نەدۆزرایەوە" + "testOcrNoTextFound": "تاقیکردنەوە: هیچ دەقێک لە ناوچەی سکاندا نەدۆزرایەوە", + "engineSettings": "ڕێکخستنەکانی بزوێنەری OCR", + "engineBuiltIn": "ناوخۆیی لە سیستەمی کارپێکردندا", + "engineExternalServer": "ڕاژەکاری دەرەکی (لە دەرەوەی Subtitle Edit دامەزراوە و بەڕێوە دەبرێت)", + "engineCloudApi": "Cloud API (پێویستی بە کلیلی API هەیە)", + "engineNothingToInstall": "هیچ شتێک بۆ دامەزراندن نییە", + "engineModelsMissing": "بزوێنەر دامەزراوە، مۆدێلەکان ونن", + "website": "ماڵپەڕ" + }, + "backgroundMusic": { + "title": "دروستکردنی مۆسیقای پاشبنەما", + "generateBackgroundMusicDotDotDot": "دروستکردنی مۆسیقای پاشبنەما...", + "preset": "پێش-ڕێکخستن", + "prompt": "پرۆمپت", + "tempoBpm": "تێمپۆ (BPM)", + "generateSeconds": "دروستکردن (چرکە)", + "seed": "تۆو (Seed)", + "randomSeed": "هەڕەمەکی", + "outputLength": "درێژی دەرچوون", + "outputLengthVideoX": "{0} (درێژی ڤیدیۆ - مۆسیقاکە بێ پچڕان دووبارە دەبێتەوە)", + "musicVolumePercent": "ئاستی دەنگی مۆسیقا (%)", + "removeExistingAudioTracks": "لابردنی ڕێڕەوە دەنگییە هەبووەکان", + "originalAudioVolumePercent": "ئاستی دەنگی ڕەسەن (%)", + "saveAudioDotDotDot": "پاشەکەوتکردنی دەنگ...", + "addToVideoDotDotDot": "زیادکردن بۆ ڤیدیۆ...", + "engineInfo": "ACE-Step 1.5 Turbo لە ڕێی audio.cpp (مۆڵەتی MIT) - بە ناوخۆیی کاردەکات", + "presetCooking": "چێشتلێنان / نانکردن", + "presetTech": "تەکنەلۆژیا / هەڵسەنگاندنی ئامێر", + "presetForest": "دارستان / سروشت", + "presetRelaxingPiano": "پیانۆی ئارامبەخش", + "presetLofiVlog": "ڤلۆگی Lo-fi", + "presetCorporate": "کۆمپانیا / ڕوونکردنەوە", + "loadingModel": "بارکردنی مۆدێل...", + "composing": "دانانی مۆسیقا...", + "generatingAudio": "دروستکردنی دەنگ...", + "decodingAudio": "کۆدکردنەوەی دەنگ...", + "creatingLoop": "دروستکردنی دووبارەبوونەوەی بێ پچڕان...", + "resultLoopXYZ": "دووبارەبوونەوە: {0} لە {1} BPM، گونجانی جومگە {2}%", + "resultNoLoopX": "مۆسیقا ئامادەیە: {0}", + "addingMusicToVideo": "زیادکردنی مۆسیقا بۆ ڤیدیۆ...", + "downloadModelTitle": "مۆدێلی مۆسیقا دابگیرێت؟", + "downloadModelQuestionX": "دروستکردنی مۆسیقا پێویستی بە مۆدێلی ACE-Step 1.5 ({0}) هەیە.\n\nمۆدێلەکە دابگیرێت؟", + "downloadingModel": "داگرتنی مۆدێلی ACE-Step 1.5...", + "saveAudioTitle": "پاشەکەوتکردنی مۆسیقای پاشبنەما", + "audioFileSavedX": "فایلی دەنگ پاشەکەوتکرا: {0}", + "unableToGenerateMusic": "نەتوانرا مۆسیقا دروست بکرێت", + "unableToAddMusicToVideo": "نەتوانرا مۆسیقا بۆ ڤیدیۆ زیاد بکرێت", + "outputLengthTextToSpeech": "شوێن قسە دروستکراوەکە دەکەوێت - مۆسیقاکە بێ پچڕان دووبارە دەبێتەوە و کاتێک کەسێک قسە دەکات نزم دەبێتەوە", + "addBackgroundMusic": "زیادکردنی مۆسیقای پاشبنەما", + "addBackgroundMusicHint": "مۆسیقا بە ناوخۆیی بە ACE-Step 1.5 دروست بکە و لە ژێر قسەکەدا تێکەڵی بکە - کاتێک کەسێک قسە دەکات نزم دەبێتەوە", + "generatingBackgroundMusicDotDotDot": "دروستکردنی مۆسیقای پاشبنەما...", + "mixingBackgroundMusicDotDotDot": "تێکەڵکردنی مۆسیقای پاشبنەما..." }, "goToVideoPosition": "چوون بۆ شوێنی ڤیدیۆ", "goToVideoPositionDotDotDot": "چوون بۆ شوێنی ڤیدیۆ...", @@ -2567,10 +3089,47 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "کردنەوەی فایلی ژێرنووسی دووەم...", "openSecondarySubtitleOnVideoPlayer": "فایلی ژێرنووسی دووەم (لەسەر لێدەری ڤیدیۆ)", "removeSecondarySubtitleOnVideoPlayer": "لابردنی فایلی ژێرنووسی دووەم", + "editSecondarySubtitleSettings": "دەستکاری ڕێکخستنەکانی ژێرنووسی دووەم", + "editSecondarySubtitleSettingsDotDotDot": "دەستکاری ڕێکخستنەکانی ژێرنووسی دووەم...", + "secondarySubtitleRememberSettings": "ئەم ڕێکخستنانە لەبیر بکە", + "secondarySubtitleDoNotShowAgain": "ئەم دیالۆگە دووبارە پیشان مەدە", + "secondarySubtitleJustifyLines": "ڕێکخستنی دێڕەکان (justify)", "openRecentVideo": "کردنەوەی ڤیدیۆی دوایی", "clearRecentVideos": "پاککردنەوەی ڤیدیۆ دوایینەکان", "cutVideoTitle": "بڕینی ڤیدیۆ", "cutVideoDotDotDot": "بڕینی ڤیدیۆ...", + "remuxVideoTitle": "Remux ی ڤیدیۆ", + "remuxVideoDotDotDot": "Remux ی ڤیدیۆ...", + "remuxVideoInputVideo": "ڤیدیۆی هاتوو:", + "remuxVideoMultipleTracksRequiresMkv": "چەند ڕێڕەوێکی دەنگ یان ژێرنووس پێویستیان بە کۆنتەینەری MKV هەیە. فۆرماتی دەرچوون بە خۆکاری گۆڕدرا بۆ .mkv.", + "remuxVideoOutputFormat": "فۆرماتی دەرچوون:", + "remuxVideoOutputFile": "فایلی دەرچوون:", + "remuxVideoRemuxing": "Remux کردنی ڤیدیۆ و دەنگ...", + "remuxVideoFinalizing": "تەواوکردنی فایلی دەرچوون (گواستنەوەی ئیندێکس بۆ سەرەتا)...", + "remuxVideoCompleted": "ڤیدیۆ بە سەرکەوتوویی remux کرا.", + "remuxVideoFailed": "Remux کردنی ڤیدیۆ سەرکەوتوو نەبوو.", + "remuxVideoPleaseSelectBoth": "تکایە هەردوو فایلی ڤیدیۆ و دەنگ هەڵبژێرە.", + "remuxVideoAssRequiresMkv": "ژێرنووسەکانی ASS/SSA پێویستیان بە کۆنتەینەری MKV هەیە بۆ پاراستنی هەموو فۆرمات و شێوازەکان.", + "remuxVideoSccRequiresMov": "ژێرنووسەکانی Scenarist (.scc) وەک closed captions ی CEA-608 تێدەخرێن، کە پێویستیان بە کۆنتەینەری MOV یان MPG هەیە. فۆرماتی دەرچوون بە خۆکاری گۆڕدرا بۆ .mov.", + "remuxVideoSccNotWithWebM": "closed captions ی Scenarist (.scc) پێویستیان بە کۆنتەینەری MOV هەیە، کە ناتوانێت ڤیدیۆی VP9/AV1 ی فایلێکی .webm هەڵبگرێت. فایلی .scc لابدە یان بیگۆڕە بۆ فۆرماتێکی تری ژێرنووس.", + "remuxVideoMpgMaxTwoCaptionTracks": "فایلێکی .mpg زۆرترین دوو ڕێڕەوی closed caption (CC1 و CC3) هەڵدەگرێت - فایلەکانی ژێرنووس لابدە تا یەک یان دوو بمێننەوە.", + "remuxVideoMccRequiresMpg": "ژێرنووسەکانی MacCaption (.mcc) وەک closed captions ی CEA-608/708 لە ڤیدیۆی MPEG-2 دا تێدەخرێن، کە پێویستی بە کۆنتەینەری MPG هەیە. فۆرماتی دەرچوون بە خۆکاری گۆڕدرا بۆ .mpg.", + "remuxVideoMpgReencodeVideoX": "closed captions لە فایلێکی .mpg دا پێویستیان بە ڤیدیۆی MPEG-2 هەیە، و ڤیدیۆکە {0} ە. ڤیدیۆکە دووبارە بۆ MPEG-2 کۆد بکرێتەوە؟ ئەمە زیاتر کات دەبات و کەمێک کوالیتی دادەبەزێنێت.", + "remuxVideoFileHasNoAudioX": "\"{0}\" هیچ ڕێڕەوێکی دەنگی نییە، بۆیە ناتوانرێت وەک سەرچاوەی دەنگ بەکاربهێنرێت.", + "remuxVideoAddingClosedCaptions": "زیادکردنی closed captions...", + "remuxVideoSelectAudioTrack": "هەڵبژاردنی ڕێڕەوی دەنگ", + "remuxVideoSelectAudioTrackFor": "هەڵبژاردنی ڕێڕەوی دەنگ بۆ {0}", + "remuxVideoSelectAudioTrackPrompt": "فایلی '{0}' {1} ڕێڕەوی دەنگی تێدایە. تکایە ئەو ڕێڕەوە دەنگییە هەڵبژێرە کە remux دەکرێت:", + "remuxVideoVideoFile": "ڤیدیۆ", + "remuxVideoAudioFile": "دەنگ", + "remuxVideoAudioFiles": "فایلە دەنگییەکان:", + "remuxVideoSubtitleFiles": "فایلەکانی ژێرنووس (ئارەزوومەندانە، ژێرنووسی نەرم):", + "remuxVideoSelectAudioTrackDotDotDot": "هەڵبژاردنی ڕێڕەوی دەنگ...", + "remuxVideoFilesX": "{0} فایل", + "remuxVideoMixAudio": "تێکەڵکردنی دەنگ بۆ یەک ڕێڕەو", + "remuxVideoVolumePercent": "ئاستی دەنگ %:", + "remuxVideoVolumeX": "ئاستی دەنگ {0}%", + "remuxVideoFastStart": "باشکردن بۆ پەخشی وێب (گواستنەوەی ئیندێکس بۆ پێشەوە - هێواشتر)", "embedSubtitlesDotDotDot": "زیادکردن/لابردنی ژێرنووسە نوقمکراوەکان...", "generateTimeCodes": "دروستکردنی کۆدەکانی کات", "checkeredImage": "وێنەی خشتەیی", @@ -2580,6 +3139,34 @@ "cutVideoSplitSegments": "پاشەکەوتکردنی پارچەکان بە جیا", "cutVideoAlsoCutSubtitle": "بڕینی ژێرنووسیش", "cutVideoSubtitleFileGeneratedX": "فایلی ژێرنووس دروستکرا: {0}", + "cutVideoTransition": "گواستنەوە لە نێوان پارچەکاندا", + "cutVideoTransitionDurationSeconds": "ماوە (چرکە)", + "cutVideoFadeInSeconds": "دەرکەوتن لە ڕەشەوە لە سەرەتادا (چرکە)", + "cutVideoFadeOutSeconds": "ونبوون بۆ ڕەش لە کۆتاییدا (چرکە)", + "cutVideoPreviewTransition": "پێشبینینی گواستنەوە", + "cutVideoPreviewTransitionTitle": "پێشبینینی گواستنەوە", + "cutVideoPreviewNeedsJoin": "هیچ لکاندنێک نییە بۆ پێشبینین - لانیکەم دوو پارچە زیاد بکە بۆ تێکەڵکردن، یان پارچەیەک بۆ بڕینی لە ناوەڕاستدا.", + "cutVideoTransitionInfoX": "هەر گواستنەوەیەک بەسەر ئەو بەشانەدا دەکەوێت کە دەیانلکێنێت، بۆیە دەرچوون بۆ هەر لکاندنێک {0} چرکە کورتتر دەبێت. ژێرنووسێکی بڕاو کاتەکانی بە گونجاوی دووبارە ڕێکدەخرێن.", + "cutVideoTransitionFade": "کاڵبوونەوە", + "cutVideoTransitionFadeBlack": "کاڵبوونەوە بە ڕەشدا", + "cutVideoTransitionFadeWhite": "کاڵبوونەوە بە سپیدا", + "cutVideoTransitionFadeGrays": "کاڵبوونەوە بە خۆڵەمێشیدا", + "cutVideoTransitionDissolve": "توانەوە", + "cutVideoTransitionWipeLeft": "سڕینەوە بۆ چەپ", + "cutVideoTransitionWipeRight": "سڕینەوە بۆ ڕاست", + "cutVideoTransitionWipeUp": "سڕینەوە بۆ سەرەوە", + "cutVideoTransitionWipeDown": "سڕینەوە بۆ خوارەوە", + "cutVideoTransitionSlideLeft": "خلیسکان بۆ چەپ", + "cutVideoTransitionSlideRight": "خلیسکان بۆ ڕاست", + "cutVideoTransitionSlideUp": "خلیسکان بۆ سەرەوە", + "cutVideoTransitionSlideDown": "خلیسکان بۆ خوارەوە", + "cutVideoTransitionSmoothLeft": "نەرم بۆ چەپ", + "cutVideoTransitionSmoothRight": "نەرم بۆ ڕاست", + "cutVideoTransitionCircleOpen": "کردنەوەی بازنەیی", + "cutVideoTransitionCircleClose": "داخستنی بازنەیی", + "cutVideoTransitionRadial": "تیشکی", + "cutVideoTransitionPixelize": "پیکسڵکردن", + "cutVideoTransitionBlur": "لێڵکردن", "importCurrentSubtitle": "هێنانەناوی ژێرنووسی ئێستا", "addRemoveEmbeddedSubtitlesTitle": "زیادکردن/لابردنی ژێرنووسە نوقمکراوەکان", "addRemoveEmbeddedSubtitlesMp4Title": "زیادکردن/لابردنی ژێرنووسە نوقمکراوەکان (MP4)", @@ -2595,6 +3182,7 @@ "embeddedTrackGeneratingVideoXY": "دروستکردنی ڤیدیۆ... {0}% {1}", "embeddedTrackGeneratingVideo": "دروستکردنی ڤیدیۆ...", "mp4FilesFilter": "فایلەکانی MP4", + "embeddedTracksPickVideoHint": "فایلێکی ڤیدیۆ هەڵبژێرە، یان یەکێک ئێرە دابنێ، بۆ بینینی ڕێڕەوەکانی ژێرنووسی.", "viewMatroskaTrackX": "بینینی تراکی Matroska - {0}", "resolutionSeparator": "x", "openFromUrlTitle": "کردنەوەی فایلی ڤیدیۆ لە URL ەوە", @@ -2641,12 +3229,15 @@ "reEncodeGeneratingDone": "دروستکردن تەواوبوو", "reEncodeGeneratedFilesX": "فایلە دروستکراوەکان ({0}):", "reEncodeFfmpegParameters": "پارامێترەکانی ffmpeg", + "analyzingVideoX": "شیکردنەوەی ڤیدیۆ... {0}% {1}", + "analyzingVideoXofY": "شیکردنەوەی ڤیدیۆ {0}/{1}... {2}% {3}", + "backgroundImageFileNotSelected": "فایلی وێنەی پاشبنەما هەڵنەبژێردراوە", + "backgroundImageFileDoesNotExistX": "فایلی وێنەی پاشبنەما بوونی نییە: {0}", "voices": "دەنگەکان", "presets": "پێش-ڕێکخستنەکان", "talkerX": "قسەکەری {0}", "baseModel": "مۆدێلی بنکە", "turboModel": "مۆدێلی توربۆ", - "ttsUpdateX": "نوێکردنەوەی {0}", "ttsEngineNotInstalled": "{0} دامەزراو نییە", "ttsEngineUpdateAvailable": "{0} - نوێکردنەوە بەردەستە", "ttsEngineTooOldUpdateRequired": "{0} زۆر کۆنە - نوێکردنەوە پێویستە", @@ -2669,9 +3260,17 @@ "cloneVoiceTo": "کلۆنکردنی دەنگ بۆ", "cloneVoiceNameTitle": "ناوی دەنگی نوێ", "cloneVoiceExtractFailed": "نەتوانرا دەنگ بۆ دێڕی هەڵبژێردراو دەربهێنرێت.", + "lineXHasNoDuration": "دێڕی {0} هیچ ماوەیەکی نییە (کاتی کۆتایی دوای کاتی دەستپێک نییە)، بۆیە هیچ دەنگێک نییە بۆ دەرهێنان.", + "audioClipsSkippedLinesX": "هیچ دەنگێک بۆ ئەم دێڕانە دەرنەهێنرا، بۆیە تێپەڕێندران: {0}", "toggleShotChange": "گۆڕینی گۆڕانی دیمەن", "resetWaveformZoomAndSpeed": "گەڕاندنەوەی زووم و خێرایی شەپۆل", "showOriginalSubtitle": "پیشاندانی ژێرنووسی ڕەسەن", + "timelineGroupTracksBy": "گرووپکردنی ڕێڕەوەکانی ژێرنووس بەپێی", + "timelineShowThumbnails": "پیشاندانی وێنە بچووکەکانی ڤیدیۆ", + "showSpeechOnly": "تەنها قسە پیشان بدە (دروستکردنی هێواشە)", + "isolatingSpeechForWaveformX": "جیاکردنەوەی قسە بۆ شەپۆلی دەنگ... {0}", + "isolatingSpeechForWaveformFailed": "نەتوانرا قسە بۆ شەپۆلی دەنگ جیا بکرێتەوە - سەیری تۆماری ئامرازەکان بکە", + "speechOnlyWaveformReady": "شەپۆلی دەنگ ئێستا تەنها قسە پیشان دەدات", "showOnlyWaveform": "پیشاندانی تەنها شەپۆل", "showOnlySpectrogram": "پیشاندانی تەنها سپێکترۆگرام", "showWaveformAndSpectrogram": "پیشاندانی شەپۆل و سپێکترۆگرام", @@ -2704,6 +3303,7 @@ "adjustSelectedLinesAndForward": "ڕێکخستنی دێڕە هەڵبژێردراوەکان و پێشەوە", "toFrameRate": "بۆ ڕێژەی چوارچێوە", "fromFrameRate": "لە ڕێژەی چوارچێوە", + "videoXFrameRateY": "{0} - {1} fps", "adjustAllTimes": "ڕێکخستنی هەموو کاتەکان (پیشاندانی زووتر/دواتر)", "showEarlier": "پیشاندانی زووتر", "showLater": "پیشاندانی دواتر", @@ -2713,7 +3313,8 @@ "syncPoints": "خاڵەکانی هاوکات", "pointSync": "هاوکاتکردنی خاڵ", "pointSyncViaOther": "هاوکاتکردنی خاڵ بە ژێرنووسێکی ترەوە", - "syncPointCandidateInfo": "دێڕەکان کە دوای {0}+ چرکە بێدەنگی دەستپێدەکەن ڕووناک دەکرێنەوە - زۆر جار خاڵی هاوکاتکردنی جێگیرن", + "syncPointCandidateAfterInfo": "ئەو دێڕانەی {0}+ چرکە بێدەنگییان بەدوادا دێت ڕووناک کراونەتەوە - زۆرجار خاڵی هاوکاتی متمانەپێکراو دروست دەکەن", + "gapAfter": "بۆشایی دوای", "adjustAllShortcuts": "کورتەڕێگەکانی کیبۆرد:\n\n• Shift + Left/Right: جوڵاندن بە 10 میلی چرکە\n• Ctrl + Left/Right: جوڵاندن بە 100 میلی چرکە\n• Alt + Left/Right: جوڵاندن بە 500 میلی چرکە", "adjustAllShortcutsFrames": "کورتەڕێگەکانی کیبۆرد:\n\n• Shift + Left/Right: جوڵاندن بە 1 چوارچێوە\n• Ctrl + Left/Right: جوڵاندن بە 10 چوارچێوە\n• Alt + Left/Right: جوڵاندن بە 1 چرکە", "offsetInSeconds": "لادان بە چرکە", @@ -2733,6 +3334,7 @@ "lineMerge": "تێکەڵکردنی دێڕ", "delayInSecondsBetweenRequests": "دواکەوتن بە چرکە لە نێوان داواکارییەکاندا", "maxBytesPerRequest": "زۆرترین بایت بۆ هەر داواکارییەک", + "keepMusicLinesUntranslated": "دێڕەکانی ناو هێماکانی مۆسیقا (♪ ... ♪) وەرمەگێڕە", "promptText": "دەقی پرۆمپت", "resetPromptToDefault": "گەڕاندنەوەی پرۆمپت بۆ بنەڕەتی", "translateEachLineSeparately": "وەرگێڕانی هەر دێڕێک بە جیا", @@ -2746,11 +3348,10 @@ "readyToTranslate": "ئامادە بۆ وەرگێڕان", "translating": "وەرگێڕان...", "translationComplete": "وەرگێڕان تەواوبوو", + "translateInPlaceNoOriginal": "وەرگێڕان لە شوێنی خۆیدا (ڕەسەن دروست مەکە)", "translationCancelled": "وەرگێڕان هەڵوەشێنرایەوە", "swapLanguages": "ئاڵوگۆڕی زمانی سەرچاوە و ئامانج", "xIsAlreadyDownloadedReDownload": "{0} پێشتر داگیراوە. دووبارە دابگریت؟", - "advancedDotDotDot": "پێشکەوتوو...", - "advancedSettings": "ڕێکخستنە پێشکەوتووەکان", "advancedSettingsSubtitle": "هەڵبژاردەکانی بەکۆمەڵ، چوارچێوە و نموونەگرتن بۆ بزوێنەری پێشکەوتووی llama.cpp", "context": "چوارچێوە", "synopsis": "کورتەی چیرۆک", @@ -2774,6 +3375,7 @@ "useOnlyExtraServerParametersHint": "llama-server بە پارامێترەکانی سەرەوە دەستپێبکە لەبری ڕێکخستنەکانی خودی Subtitle Edit - تەنها مۆدێل، هۆست و پۆرت دانران", "serverRunningAtX": "سێرڤەر کار دەکات لە {0}", "customPromptHint": "ڕێنماییە دڵخوازەکان ({0} = زمانی سەرچاوە، {1} = زمانی ئامانج)؛ بەتاڵ = پرۆمپتی دروستکراو", + "editTranslationHint": "کرتە لە وەرگێڕانی ڕیزی هەڵبژێردراو بکە بۆ دەستکاریکردنی (Enter پاشەکەوت دەکات، Escape هەڵدەوەشێنێتەوە)", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp پێویستی بە داگرتنی بزوێنەری llama-server و مۆدێلێکی وەرگێڕان هەیە. ئێستا دابگریت؟", "llamaCppDownloadEnginePrompt": "llama.cpp پێویستی بە داگرتنی بزوێنەری llama-server هەیە. ئێستا دابگریت؟", "llamaCppDownloadModelPrompt": "llama.cpp پێویستی بە داگرتنی مۆدێلی وەرگێڕانی هەڵبژێردراو هەیە. ئێستا دابگریت؟" @@ -2844,6 +3446,7 @@ "showGridLines": "پیشاندانی هێڵەکانی خشتە", "showHorizontalLineAboveToolbar": "پیشاندانی هێڵی ئاسۆیی لە سەرووی تووڵامرازدا", "bookmarkColor": "ڕەنگی نیشانە", + "spellCheckHighlightColor": "ڕەنگی نیشانکردنی پشکنینی ڕێنووس", "singleLineMaxLength": "درێژی زۆرترین یەک دێڕ", "optimalCharsPerSec": "باشترین پیت/چرکە", "maxCharsPerSec": "زۆرترین پیت/چرکە", @@ -2868,13 +3471,21 @@ "useDoNotBreakAfterList": "بەکارهێنانی لیستی دوای-ئەمانە-مەبڕە", "newEmptyDefaultMs": "ماوەی بنەڕەتی ژێرنووسی نوێ (میلی چرکە)", "timeCodeUpDownStepMs": "هەنگاوی سەرەوە/خوارەوەی کات (میلی چرکە)", + "moveSelectedLinesStepMs": "هەنگاوی کورتەڕێگەی گواستنەوەی دێڕە هەڵبژێردراوەکان (ms)", + "moveStartEndStepMs": "هەنگاوی کورتەڕێگەی گواستنەوەی دەستپێک/کۆتایی (ms)", + "moveLinesShortenNeighbor": "گواستنەوەی دێڕەکان: کورتکردنەوەی دێڕی پێشوو/دواتر لەبری یەکتربڕین لەگەڵی", "promptBeforeDelete": "پرسیارکردن پێش سڕینەوە", "rememberPositionAndSize": "بیرهاتنەوەی شوێن و قەبارەی پەنجەرە", + "titleBarFullFileName": "پیشاندانی ڕێڕەوی تەواوی فایل لە شریتی ناونیشاندا", + "showRecentFiles": "پیشاندانی فایلە دوایینەکان (بۆ کردنەوەی دووبارە)", "openLastFileOnStart": "کردنەوەی دوایین فایل لە دەستپێکدا", "autoSave": "پاشەکەوتی خۆکار (پاشەکەوتکردنی فایلە کراوەکە لە کاتی دەستکاریکردندا)", "autoBackupOn": "پاشەکەوتی خۆکار", "autoBackupIntervalMinutes": "ماوەی پاشەکەوتی خۆکار (خولەک)", "autoBackupDeleteAfterDays": "پاراستنی پاشەکەوتی خۆکار (ڕۆژ)", + "settingsBackupOn": "پاشەکەوتی خۆکاری ڕێکخستنەکان", + "settingsBackupIntervalDays": "ماوەی نێوان پاشەکەوتی ڕێکخستنەکان (ڕۆژ، 0 = هەموو دەستپێکردنێک)", + "settingsBackupMaxCount": "ژمارەی پاشەکەوتی ڕێکخستنەکان بۆ هێشتنەوە", "autoConvertToUtf8": "گۆڕینی خۆکاری کۆدکردن بۆ UTF-8 لە کاتی کردنەوەدا", "autoTrimWhiteSpace": "کورتکردنەوەی خۆکاری بۆشاییەکان", "removeBlankLinesWhenOpening": "لابردنی دێڕە بۆشەکان لە کاتی کردنەوەی ژێرنووسێکدا", @@ -2891,7 +3502,10 @@ "colorGapTooShort": "ڕەنگکردن ئەگەر بۆشایی زۆر کورت بوو", "errorBackgroundColor": "ڕەنگی پاشبنەمای هەڵە", "waveformDrawGridLines": "کێشانی هێڵەکانی خشتە", + "waveformUseSkiaRenderer": "بەکارهێنانی ڕێندەرەری خێرای تاقیکاری", "waveformCenterVideoPositionAlsoWhenPaused": "ناوەڕاستکردنی شوێنی ڤیدیۆ لە کاتی وەستانیشدا", + "waveformSelectCurrentSubtitleWhilePaused": "هەڵبژاردنی ژێرنووسی ئێستا لە کاتی وەستانیشدا", + "waveformRememberZoom": "لەبیرکردنی زووم (ئاسۆیی و ستوونی)", "waveformShowToolbar": "پیشاندانی تووڵامراز", "waveformShowToolbarEdit": "دەستکاری تووڵامراز...", "waveformShowToolbarEditLabel": "بابەتەکانی تووڵامراز", @@ -2939,18 +3553,25 @@ "webVttUseXTimestampMap": "WebVTT: بەکارهێنانی X-TIMESTAMP-MAP (لادانی کۆدەکانی کات لە کاتی بارکردندا)", "assaAutoSetResolution": "ASSA: دانانی ڕێزۆلیوشن (PlayResX/PlayResY) لە ڤیدیۆوە کاتێک ڤیدیۆ دەکرێتەوە", "assaAutoSetResolutionPrompt": "ASSA: پرسیار بکە پێش گۆڕینی ڕێزۆلیوشن بۆ گونجان لەگەڵ ڤیدیۆکە (وەللا بە خۆکار ڕیسەمپڵ بکە)", - "showStopButton": "پیشاندانی دوگمەی ڕاوستان", - "showFullscreenButton": "پیشاندانی دوگمەی پڕەپەردە", + "videoControls": "کۆنترۆڵەکانی ڤیدیۆ", + "videoControlsEdit": "دەستکاری کۆنترۆڵەکانی ڤیدیۆ...", + "videoControlsPositionText": "دەقی شوێن / ماوە", + "videoControlsVideoFileName": "ناوی فایلی ڤیدیۆ", + "videoControlsPlayerName": "ناوی لێدەری ڤیدیۆ", "fullscreenHideControls": "شاردنەوەی کۆنترۆڵەکانی ڤیدیۆ لە پڕەپەردەدا", + "showSecondarySubtitleDialog": "پیشاندانی دیالۆگی شێواز لە کاتی کردنەوەی فایلی ژێرنووسی دووەمدا", + "rememberSecondarySubtitleFile": "لەبیرکردنی فایلی ژێرنووسی دووەم", "autoOpenVideoFile": "کردنەوەی خۆکاری فایلی ڤیدیۆ کە ژێرنووس دەکرێتەوە", "downloadMpv": "داگرتنی mpv", "downloadVlc": "داگرتنی VLC", "allowSingleLetterShortcutsInTextbox": "ڕێگەدان بە کورتەڕێگەی یەک-پیت لە سنووقی دەقدا", + "allowTextNavigationShortcutsInTextbox": "ڕێگەدان بە کورتەڕێگە لەسەر کلیلەکانی گەشتی دەق (Ctrl+Left/Right، Home/End) لە سنووقی دەقدا", "spellCheckEnglishTreatInApostropheAsIng": "پشکنینی ڕێنووس: وشەکانی بە 'in'' کۆتاییان دێت وەک 'ing' بزانە (تەنها ئینگلیزی)", "goToLineNumberSetsVideoPosition": "چوون بۆ دێڕی ژمارە شوێنی ڤیدیۆش دادەنێت", "adjustAllTimesRememberLineSelectionChoice": "ڕێکخستنی هەموو کاتەکان، بیرهاتنەوەی هەڵبژاردەی دێڕ", "mergeKeepEndTime": "تێکەڵکردنی دێڕەکان: پاراستنی کاتی کۆتایی (ڕێگەدان بە تێکەڵبوون لەگەڵ ژێرنووسی دواتردا)", "mergeKeepEndTimeOnlyAssa": "تێکەڵکردنی دێڕەکان: پاراستنی کاتی کۆتایی تەنها بۆ \"Advanced Sub Station Alpha\"", + "mergeAutoBreak": "تێکەڵکردنی دێڕەکان: دابەشکردنی خۆکاری دەقی تێکەڵکراو (ناچالاک دابەشبوونی دێڕی خودی دێڕەکان دەپارێزێت)", "filesAndLogs": "فایلەکان و تۆمارەکان", "showErrorLogFile": "پیشاندانی فایلی تۆماری هەڵەکان", "showToolsLogFile": "پیشاندانی فایلی تۆماری ئامرازەکان", @@ -2959,6 +3580,7 @@ "showAssaLayer": "پیشاندانی سنووقی چینی ASSA", "waveformCursorColor": "ڕەنگی نیشاندەری شەپۆل", "waveformShotChangeColor": "ڕەنگی گۆڕانی دیمەن لە شەپۆلدا", + "waveformGridColor": "ڕەنگی تۆڕی شەپۆلی دەنگ", "waveformParagraphLeftColor": "ڕەنگی لێواری چەپی شەپۆل", "waveformParagraphRightColor": "ڕەنگی لێواری ڕاستی شەپۆل", "waveformFancyHighColor": "ڕەنگی لووتکەی فانسی شەپۆل", @@ -2986,10 +3608,15 @@ "resetSyntaxColoring": "گەڕاندنەوەی ڕەنگکردنی سینتاکس", "resetWaveform": "گەڕاندنەوەی شەپۆل", "resetRules": "گەڕاندنەوەی یاساکان", - "useFrameMode": "بەکارهێنانی دۆخی چوارچێوە (hh.mm.ss.ff)", + "timeCodeMode": "دۆخی کۆدی کات", + "timeCodeModeTime": "کات (hh:mm:ss,zzz)", + "timeCodeModeFrames": "چوارچێوەکان (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "ژمارەی چوارچێوەکان", + "frameModeSnapToVideoFrames": "هەڵگرتنی کاتەکان لەسەر چوارچێوەکانی ڤیدیۆ (نەک چوارچێوەکانی ناو هەر چرکەیەک)", "textBoxLimitNewLines": "سنووردانانی ژمارەی دێڕەکان لە سنووقی دەقی ژێرنووسدا", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - ڕەندەرکردنی سۆفتوێر (هێواش)", + "mpvMetalRendering": "libmpv - Metal (تاقیکاری، پێویستی بە دووبارە دەستپێکردنەوە هەیە)", "mpvWidRendering": "libmpv - ڕەندەرکردنی Window ID ی سروشتی", "waveFormsAndSpectrogramFoldersContainsX": "فۆڵدەرەکانی \"Waveforms\" و \"spectrogram\" لەخۆ دەگرن {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "سڕینەوەی فایلەکانی \"Waveforms\" و \"Spectrogram\"؟", @@ -3002,7 +3629,10 @@ "waveformExtractAudioSampleRate": "ڕێژەی نموونەی دەرهێنانی دەنگ", "waveformExtractAudioSampleRateOriginal": "ڕەسەن (پاراستنی سەرچاوە)", "waveformExtractAudioBitRate": "ڕێژەی بیتی دەرهێنانی دەنگ (MP3/M4A)", + "ffmpegUseCenterChannelOnly": "تەنها کەناڵی ناوەڕاستی پێشەوە بەکاربهێنە بۆ دەنگی 5.1 (FFmpeg)", "vlcWidRendering": "libVLC - ڕەندەرکردنی Window ID ی سروشتی", + "ffmpegSoftwareRendering": "FFmpeg", + "downloadFfmpegLibs": "داگرتنی کتێبخانەکانی FFmpeg (بۆ لێدەری ڤیدیۆی FFmpeg)", "subtitleGridEnterKeyAction": "کرداری کلیلی Enter لە خشتەی ژێرنووسدا", "subtitleSingleClickAction": "کرداری کرتەی تاکی خشتەی ژێرنووس", "subtitleDoubleClickAction": "کرداری دوو کرتەی خشتەی ژێرنووس", @@ -3030,6 +3660,7 @@ "subtitleGridFormattingShowFormatting": "پیشاندانی فۆرمات", "subtitleGridFormattingShowTags": "پیشاندانی تەگەکان", "subtitleGridFormattingHideTags": "شاردنەوەی تەگەکان", + "subtitleGridFormattingShowFormattingKeepTags": "پیشاندانی فۆرمات، پاراستنی تەگە نابینراوەکان", "waveformParagraphBackgroundColor": "ڕەنگی پاشبنەمای ژێرنووس لە شەپۆلدا", "waveformParagraphSelectedBackgroundColor": "ڕەنگی پاشبنەمای ژێرنووسی هەڵبژێردراو لە شەپۆلدا", "waveformAllowOverlap": "ڕێگەدان بە تێکەڵبوون (لە کاتی جوڵاندن/گۆڕینی قەبارەدا)", @@ -3045,9 +3676,12 @@ "splitOddLinesAction": "کرداری دابەشکردنی دێڕە تاکەکان", "ocrUseWordSplitList": "OCR: بەکارهێنانی لیستی دابەشکردنی وشە", "ocrGuessUnknownWords": "OCR: هەوڵدان بۆ مەزەندەکردنی وشە نەزانراوەکان", + "spellCheckRememberUseAlwaysList": "پشکنینی ڕێنووس: لەبیرکردنی لیستی \"هەمیشە بەکاربهێنە\"", + "fixShortDisplayTimesAllowMoveStartTime": "چاککردنی هەڵە باوەکان: چاککردنی کاتی پیشاندانی کورت دەکرێت کاتی دەستپێک بجوڵێنێت", "speechToTextSelectedLinesPromptFirstTimeOnly": "قسە بۆ دەق: دێڕە هەڵبژێردراوەکان، پرسیارکردن بۆ زمان/بزوێنەر تەنها یەکەم جار", "multipleReplaceShowDotDotDotButtons": "جێگرتنەوەی فرەیی: پیشاندانی دوگمەکانی مینیوی چوارچێوە", "gridFocusTextboxAfterInsertNew": "خشتە: فۆکەسکردن لەسەر سنووقی دەق دوای تێخستنی ژێرنووسی نوێ", + "undoRedoGoToChangedLine": "پاشگەزبوونەوە/دووبارەکردنەوە: چوون بۆ دێڕی گۆڕاو (و شوێنی ڤیدیۆ)", "musicSymbol": "هێمای مۆسیقا", "musicSymbolsToReplace": "هێماکانی مۆسیقا بۆ جێگرتنەوە (بە کۆما جیاکراوە)", "textToSpeechPromptMergeContinuationLines": "دەق بۆ قسە: پرسیارکردن بۆ تێکەڵکردنی دێڕە بەردەوامبووەکان", @@ -3056,6 +3690,7 @@ "useFocusedButtonBackgroundColor": "بەکارهێنانی ڕەنگی پاشبنەمای دوگمەی فۆکەسکراو", "focusedButtonBackgroundColor": "ڕەنگی پاشبنەمای دوگمەی فۆکەسکراو", "forceCrLfOnSave": "پەراندنی CR+LF لە کاتی پاشەکەوتکردندا (فایلەکانی ژێرنووسی دەقی)", + "linuxClipboardUseExternalTool": "کۆپیکردنی دەق لە ڕێی xclip/wl-copy (پیتە نیشانەدارەکان دەپارێزێت)", "showFormatLimitWarning": "ئاگادارکردنەوە لە کاتی پاشەکەوتکردندا کە دێڕەکان سنوورەکانی فۆرمات تێدەپەڕێن (بۆ نموونە SCC ی 32 پیت/دێڕ)", "textBoxButtonShowAutoBreak": "سنووقی دەق: پیشاندانی دوگمەی دابەشکردنی خۆکار", "textBoxButtonShowUnbreak": "سنووقی دەق: پیشاندانی دوگمەی یەکخستن", @@ -3067,12 +3702,18 @@ "waveformDoubleClickAction": "کرداری دوو کرتەی شەپۆل (دوای کرداری کرتەی تاک)", "allSettings": "هەموو ڕێکخستنەکان", "uiScale": "پێوانەی ڕووکار (%)", + "fontScale": "پێوەری فۆنت (%)", + "textSelectionOpacity": "ناڕوونی هەڵبژاردنی دەق (%)", "waveformToolbarItems": "بابەتەکانی تووڵامرازی شەپۆل", "matchIconColorToDarkTheme": "گونجاندنی ڕەنگی ئایکۆنەکان لەگەڵ ڕەنگی پێشەوەی ڕووکاری تاریک", "subtitlePreviewProperties": "تایبەتمەندییەکانی پێشبینینی ژێرنووس", "usePositionFromSubtitleFile": "بەکارهێنانی شوێن لە فایلی ژێرنووسەوە (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "پەراوێز بەشێکە لە ناوچەی ژێرنووس", "textJustify": "ڕێکخستنی دەق (justify)", + "deinterlace": "Deinterlace ی ڤیدیۆ", + "deinterlaceOff": "ناچالاک", + "deinterlaceAuto": "خۆکار (تەنها چوارچێوە interlaced ەکان)", + "deinterlaceAlways": "هەمیشە", "pixelWidthInfo": "هێڵە سەوزەکان = سنووری زۆرترین پانی | ناوچەی سوور = دەق لە سنوور تێدەپەڕێت", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3081,7 +3722,16 @@ "waveformColorTheme": "ڕووکاری ڕەنگ:", "waveformSaveAsCustomTheme": "پاشەکەوتکردن وەک ڕووکاری دڵخواز...", "waveformLoadThemeDotDotDot": "بارکردنی ڕووکار...", - "waveformExportThemeDotDotDot": "دەرهێنانی ڕووکار..." + "waveformExportThemeDotDotDot": "دەرهێنانی ڕووکار...", + "waveformSaveCustomThemeTitle": "پاشەکەوتکردنی ڕووکاری تایبەت", + "waveformThemeFileType": "ڕووکاری شەپۆلی دەنگی Subtitle Edit", + "waveformThemeHighContrast": "جیاوازی بەرز", + "waveformThemeOceanBlue": "شینی ئۆقیانووس", + "waveformThemeWarmSunset": "ئاوابوونی گەرم", + "waveformThemeForest": "دارستان", + "waveformThemeMidnightPurple": "مۆری نیوەشەو", + "waveformThemeRetroAmber": "کەهرەبای کۆن", + "waveformThemeIce": "سەهۆڵ" }, "shortcuts": { "searchShortcuts": "گەڕان بۆ کورتەڕێگەکان...", @@ -3092,11 +3742,34 @@ "categoryVideo": "ڤیدیۆ", "categorySync": "هاوکاتکردن", "categoryAi": "AI", + "categoryCustom": "تایبەت", + "editCustomShortcut": "دەستکاری کورتەڕێگەی تایبەت", + "customShortcutTextBoxKeyHint": "لێرە کلیلێک لەگەڵ Ctrl/Alt بەکاربهێنە - کلیلێکی سادە چیتر لە سنووقی دەقدا نانووسێت.", + "customShortcutNumberX": "کورتەڕێگەی تایبەت #{0}", + "customShortcutNumberXY": "کورتەڕێگەی تایبەت #{0}: {1}", + "customShortcutStep": "هەنگاو", + "customShortcutSteps": "هەنگاوەکان", + "customShortcutStepRunCommand": "جێبەجێکردنی فەرمان", + "customShortcutStepInsertText": "تێخستنی دەق", + "customShortcutStepReplace": "دۆزینەوە و جێگرتنەوە", + "customShortcutInsertAtCursor": "لە شوێنی نیشانەدەر", + "customShortcutInsertAtStart": "لە سەرەتای دەق", + "customShortcutInsertAtEnd": "لە کۆتایی دەق", + "customShortcutSummaryRunCommandX": "جێبەجێکردن: {0}", + "customShortcutSummaryInsertXY": "تێخستنی \"{0}\" ({1})", + "customShortcutSummaryReplaceXY": "جێگرتنەوەی \"{0}\" بە \"{1}\"", + "customShortcutSummaryReplaceRegexXY": "جێگرتنەوەی regex ی \"{0}\" بە \"{1}\"", + "customShortcutPickCommand": "تکایە فەرمانێک بۆ جێبەجێکردن هەڵبژێرە.", + "customShortcutEnterText": "تکایە ئەو دەقە بنووسە کە تێدەخرێت.", + "customShortcutEnterFind": "تکایە ئەو دەقە بنووسە کە دەدۆزرێتەوە.", + "customShortcutInvalidRegexX": "دەربڕینی ئاسایی (regex) نادروستە: {0}", + "customShortcutStepsHint": "هەنگاوەکان لە سەرەوە بۆ خوارەوە جێبەجێ دەکرێن. هەنگاوەکانی دەق لەسەر دێڕە هەڵبژێردراوەکان کاردەکەن؛ ئەو فەرمانانەی پەنجەرەیەک دەکەنەوە دوای داخستنی بەردەوام دەبن.", "activeIn": "چالاک لە", "activeInEverywhere": "هەموو شوێنێک", "generalMergeSelectedLinesAndUnbreak": "تێکەڵکردنی دێڕە هەڵبژێردراوەکان و یەکخستن", "generalMergeSelectedLinesAndUnbreakCjk": "تێکەڵکردنی دێڕە هەڵبژێردراوەکان و یەکخستن بێ بۆشایی (CJK)", "generalUnbreakNoSpaceCjk": "یەکخستن بێ بۆشایی (CJK)", + "generalToggleBreak": "گۆڕینی دابەشکردن/لابردنی دابەشبوونی دێڕ", "generalMergeSelectedLinesBilingual": "تێکەڵکردنی دێڕە هەڵبژێردراوەکان بە دوو زمان", "generalToggleTranslationMode": "گۆڕینی دۆخی وەرگێڕان", "generalToggleTranslationAndOriginalInPreviews": "گۆڕینی وەرگێڕان و ڕەسەن لە پێشبینینی ڤیدیۆ/دەنگدا", @@ -3113,10 +3786,12 @@ "generalToggleItalic": "گۆڕینی لار", "generalToggleBold": "گۆڕینی قەڵەو", "generalToggleUnderline": "گۆڕینی ژێرهێڵ", + "generalToggleBox": "گۆڕینی چوارگۆشە (EBU STL)", "fileOpen": "کردنەوە", "fileOpenKeepVideo": "کردنەوە (پاراستنی ڤیدیۆ)", "fileSave": "پاشەکەوتکردن", "fileSaveAs": "پاشەکەوتکردن وەک", + "fileSaveOriginal": "پاشەکەوتکردنی ڕەسەن", "fileCompare": "بەراوردکردن", "fileStatistics": "ئامارەکان", "fileImportPlainText": "هێنانەناوی دەقی سادە", @@ -3128,6 +3803,7 @@ "fillSelectedLinesWithClipboard": "پڕکردنەوەی دێڕە هەڵبژێردراوەکان بە دەقی کلیپبۆرد", "listInverseSelection": "پێچەوانەکردنی هەڵبژاردە", "listDeleteSelection": "سڕینەوەی هەڵبژاردە", + "deleteSelectionEverywhere": "سڕینەوەی هەڵبژاردە (لە هەموو شوێنێک)", "rippleDeleteSelection": "سڕینەوەی زنجیرەیی هەڵبژاردە", "assigned": "دانراو", "unassigned": "دانەنراو", @@ -3136,6 +3812,7 @@ "detectKey": "دۆزینەوەی کلیل", "control": "Control", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Shift", "controlMac": "⌃", @@ -3146,6 +3823,11 @@ "resetShortcutsDetail": "دەتەوێت هەموو کورتەڕێگەکان بگەڕێنیتەوە بۆ بەها بنەڕەتییەکان؟", "togglePlayPause": "گۆڕینی لێدان/وەستان", "toggleLockTimeCodes": "گۆڕینی چەسپاندنی کۆدەکانی کات", + "toggleTimeCodeMode": "گۆڕینی دۆخی کۆدی کات (کات/چوارچێوە/ژمارەی چوارچێوە)", + "toggleScreenPrivacy": "گۆڕینی تایبەتمەندی شاشە (شاردنەوەی ناوی فایلەکان، پاشان دەقەکانیش)", + "screenPrivacyFileNamesHidden": "تایبەتمەندی شاشە: ناوی فایلەکان شاراوەن", + "screenPrivacyFileNamesAndTextsHidden": "تایبەتمەندی شاشە: ناوی فایلەکان و دەقەکان شاراوەن", + "screenPrivacyOff": "تایبەتمەندی شاشە: ناچالاک", "duplicateSelectedLines": "دووپاتکردنی دێڕە هەڵبژێردراوەکان", "sourceView": "بینینی سەرچاوە", "addOrEditBookmark": "زیادکردن یان دەستکاری نیشانە", @@ -3164,6 +3846,7 @@ "moveFirstWordFromNextLineUpCurrentSubtitle": "گواستنی یەکەم وشە لە دێڕی دواترەوە بۆ سەرەوە (ژێرنووسی ئێستا)", "moveTextFromCursorToNextAndGoToNext": "گواستنی دەقی دوای شوێنی نیشاندەر بۆ ژێرنووسی دواتر و چوون بۆ دواتر", "moveTextFromCursorToNextAndGoToNextAndPlay": "گواستنی دەقی دوای شوێنی نیشاندەر بۆ ژێرنووسی دواتر، چوون بۆ دواتر و لێدان", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "گواستنەوەی دەقی دوای شوێنی نیشانەدەر بۆ ژێرنووسی دواتر، چوون بۆ دواتر، لێدانی و وەستان لە کۆتاییەکەیدا", "breakAtFirstSpaceFromCursor": "دابەشکردن لە یەکەم بۆشایی لە شوێنی نیشاندەرەوە", "breakAtFirstSpaceFromCursorAndGoToNext": "دابەشکردن لە یەکەم بۆشایی لە شوێنی نیشاندەرەوە و چوون بۆ دواتر", "toggleFocusGridAndWaveform": "گۆڕینی فۆکەس لە نێوان خشتەی ژێرنووس و شەپۆل/سپێکترۆگرامدا", @@ -3193,6 +3876,7 @@ "listViewColumnTextUp": "ستوون، دەق بۆ سەرەوە", "listViewColumnTextDown": "ستوون، دەق بۆ خوارەوە", "autoTranslateSelectedLines": "وەرگێڕانی خۆکاری دێڕە هەڵبژێردراوەکان...", + "autoTranslateSelectedLinesNoPrompt": "وەرگێڕانی خۆکاری دێڕە هەڵبژێردراوەکان (بێ پرسیار، دوایین بزوێنەر/زمانەکان بەکاربهێنە)", "setAssaResolution": "دانانی ڕێزۆلیوشنی ASSA (PlayResX/PlayResY)", "setShortcutForX": "دانانی کورتەڕێگە بۆ \"{0}\"", "commandFileNewKeepVideo": "نوێ (پاراستنی ڤیدیۆ)", @@ -3247,6 +3931,7 @@ "textBoxItalic": "لاری سنووقی دەق", "textBoxBold": "قەڵەوی سنووقی دەق", "textBoxUnderline": "ژێرهێڵی سنووقی دەق", + "textBoxBox": "چوارگۆشەی سنووقی دەق (EBU STL)", "resetWaveformZoomAndSpeed": "گەڕاندنەوەی زووم و خێرایی لێدانی شەپۆل (ڕێژەی لێدان)", "togglePlaybackSpeed": "گۆڕینی خێرایی لێدان (ڕێژەی لێدان)", "playbackSpeedSlower": "خێرایی لێدانی هێواشتر (ڕێژەی لێدان)", @@ -3258,6 +3943,7 @@ "seekSilenceForward": "گەڕان بۆ بێدەنگی بۆ پێشەوە", "waveformGuessStart": "مەزەندەکردنی کاتی دەستپێک لە شەپۆلەوە", "waveformGuessEnd": "مەزەندەی کۆتایی لە شەپۆلەوە", + "waveformGuessStartAndEnd": "خەمڵاندنی کاتی دەستپێک و کۆتایی لە شەپۆلی دەنگەوە", "setVideoPositionCurrentSubtitleStart": "دانانی شوێنی ڤیدیۆ بۆ دەستپێکی دێڕی ئێستا", "goToSubtitlePositionAndPause": "چوون بۆ شوێنی ژێرنووس و وەستان", "setVideoPositionCurrentSubtitleEnd": "دانانی شوێنی ڤیدیۆ بۆ کۆتایی دێڕی ئێستا", @@ -3271,6 +3957,14 @@ "surroundWith": "داپۆشین بە...", "surroundWithXY": "داپۆشین بە {0}/{1}", "surroundWithNumberX": "دەورەدان بە #{0}", + "surroundWithBehavior": "ڕەفتار", + "surroundWithBehaviorToggle": "گۆڕین (زیادکردن، یان لابردن ئەگەر هەبێت)", + "surroundWithBehaviorAdd": "زیادکردن (هەموو جارێک)", + "surroundWithBehaviorRemove": "لابردن (هەموو)", + "surroundWithBehaviorRemoveOnce": "لابردن (یەک لە هەر جارێکدا)", + "surroundWithWorksOn": "کاردەکات لەسەر", + "surroundWithScopeSelectionOrText": "هەڵبژاردە، ئەگەرنا هەموو دەقەکە", + "surroundWithScopeEachLine": "هەر دێڕێک", "searchVia": "گەڕان لە ڕێگەی", "searchViaX": "گەڕان لە ڕێگەی {0}", "searchViaNumberX": "گەڕان لە ڕێگەی #{0}", @@ -3298,6 +3992,11 @@ "copySubtitlePathToClipboard": "لەبەرگرتنەوەی ڕێچکەی ژێرنووس بۆ کلیپبۆرد", "copySubtitleOriginalPathToClipboard": "لەبەرگرتنەوەی ڕێچکەی ژێرنووسی ڕەسەن بۆ کلیپبۆرد", "focusTextBox": "فۆکەسکردن لەسەر سنووقی دەق", + "focusSubtitleListView": "فۆکەس لەسەر لیستی ژێرنووسەکان", + "focusWaveform": "فۆکەس لەسەر شەپۆلی دەنگ", + "focusOriginalTextBox": "فۆکەس لەسەر سنووقی دەقی ڕەسەن", + "textBoxGoToStart": "سنووقی دەق، چوون بۆ سەرەتا", + "textBoxGoToEnd": "سنووقی دەق، چوون بۆ کۆتایی", "sortByNumber": "ڕیزکردن بەپێی ژمارە", "sortByStartTime": "ڕیزکردن بەپێی کاتی «نیشاندان»", "sortByEndTime": "ڕیزکردن بەپێی کاتی «شاردنەوە»", @@ -3335,9 +4034,9 @@ "selectionToSentenceCase": "سنووقی دەق: هەڵبژاردە بکە بە پیتی سەرەتای ڕستە", "selectionToggleCasing": "سنووقی دەق: گۆڕینی جۆری پیت (گەورە -> بچووک -> سەرەتای ڕستە)", "googleIt": "لە گووگڵ بیدۆزەوە (دەقی هەڵبژێردراو)", - "setActorXY": "دانانی ئەکتەری {0}: {1}", + "setActorX": "دانانی ئەکتەر: {0}", "setNewActor": "دانانی ئەکتەری نوێ...", - "setActorSlotXTitle": "خاڵی ئەکتەری {0}", + "setStyleX": "دانانی شێواز: {0}", "toggleDialogDashes": "گۆڕینی تێخەکانی دیالۆگ", "mergeWithLineBeforeAsDialog": "تێکەڵکردن لەگەڵ دێڕی پێشەوە وەک دیالۆگ", "mergeWithLineAfterAsDialog": "تێکەڵکردن لەگەڵ دێڕی پاشەوە وەک دیالۆگ", @@ -3348,7 +4047,23 @@ "moveStartOneFrameBackKeepGapPrev": "جوڵاندنی دەستپێک یەک چوارچێوە بۆ دواوە (پاراستنی بۆشایی بۆ پێشوو ئەگەر نزیک بێت)", "moveStartOneFrameForwardKeepGapPrev": "جوڵاندنی دەستپێک یەک چوارچێوە بۆ پێشەوە (پاراستنی بۆشایی بۆ پێشوو ئەگەر نزیک بێت)", "moveEndOneFrameBackKeepGapNext": "جوڵاندنی کۆتایی یەک چوارچێوە بۆ دواوە (پاراستنی بۆشایی بۆ دواتر ئەگەر نزیک بێت)", - "moveEndOneFrameForwardKeepGapNext": "جوڵاندنی کۆتایی یەک چوارچێوە بۆ پێشەوە (پاراستنی بۆشایی بۆ دواتر ئەگەر نزیک بێت)" + "moveEndOneFrameForwardKeepGapNext": "جوڵاندنی کۆتایی یەک چوارچێوە بۆ پێشەوە (پاراستنی بۆشایی بۆ دواتر ئەگەر نزیک بێت)", + "moveStartXMsBack": "گواستنەوەی دەستپێک X ms بۆ دواوە (X لە ڕێکخستنەکاندا دادەنرێت، هەروەها لە هاوکاتکردنی بینراودا)", + "moveStartXMsForward": "گواستنەوەی دەستپێک X ms بۆ پێشەوە (X لە ڕێکخستنەکاندا دادەنرێت، هەروەها لە هاوکاتکردنی بینراودا)", + "moveEndXMsBack": "گواستنەوەی کۆتایی X ms بۆ دواوە (X لە ڕێکخستنەکاندا دادەنرێت، هەروەها لە هاوکاتکردنی بینراودا)", + "moveEndXMsForward": "گواستنەوەی کۆتایی X ms بۆ پێشەوە (X لە ڕێکخستنەکاندا دادەنرێت، هەروەها لە هاوکاتکردنی بینراودا)", + "moveSelectedLinesXMsBack": "گواستنەوەی دێڕە هەڵبژێردراوەکان X ms بۆ دواوە (X لە ڕێکخستنەکاندا دادەنرێت)", + "moveSelectedLinesXMsForward": "گواستنەوەی دێڕە هەڵبژێردراوەکان X ms بۆ پێشەوە (X لە ڕێکخستنەکاندا دادەنرێت)", + "moveSelectedLinesAndForwardXMsBack": "گواستنەوەی دێڕە هەڵبژێردراوەکان و هەموو دواترەکان X ms بۆ دواوە (X لە ڕێکخستنەکاندا دادەنرێت)", + "moveSelectedLinesAndForwardXMsForward": "گواستنەوەی دێڕە هەڵبژێردراوەکان و هەموو دواترەکان X ms بۆ پێشەوە (X لە ڕێکخستنەکاندا دادەنرێت)", + "moveAllLinesXMsBack": "گواستنەوەی هەموو دێڕەکان X ms بۆ دواوە (X لە ڕێکخستنەکاندا دادەنرێت)", + "moveAllLinesXMsForward": "گواستنەوەی هەموو دێڕەکان X ms بۆ پێشەوە (X لە ڕێکخستنەکاندا دادەنرێت)", + "moveSelectedLinesCustomMsBack": "گواستنەوەی دێڕە هەڵبژێردراوەکان، میلی چرکەی تایبەت ({0:#,###,##0}) بۆ دواوە، {1}", + "moveSelectedLinesCustomMsForward": "گواستنەوەی دێڕە هەڵبژێردراوەکان، میلی چرکەی تایبەت ({0:#,###,##0}) بۆ پێشەوە، {1}", + "moveSelectedLinesAndForwardCustomMsBack": "گواستنەوەی دێڕە هەڵبژێردراوەکان و هەموو دواترەکان، میلی چرکەی تایبەت ({0:#,###,##0}) بۆ دواوە، {1}", + "moveSelectedLinesAndForwardCustomMsForward": "گواستنەوەی دێڕە هەڵبژێردراوەکان و هەموو دواترەکان، میلی چرکەی تایبەت ({0:#,###,##0}) بۆ پێشەوە، {1}", + "moveAllLinesCustomMsBack": "گواستنەوەی هەموو دێڕەکان، میلی چرکەی تایبەت ({0:#,###,##0}) بۆ دواوە، {1}", + "moveAllLinesCustomMsForward": "گواستنەوەی هەموو دێڕەکان، میلی چرکەی تایبەت ({0:#,###,##0}) بۆ پێشەوە، {1}" }, "wordLists": { "title": "لیستەکانی وشە", @@ -3393,7 +4108,11 @@ "applyToSelectedLinesX": "دێڕە هەڵبژێردراوەکان ({0})", "applyToAllLinesX": "هەموو دێڕەکان ({0})", "updateAllXAvailable": "نوێکردنەوەی هەموو ({0})", - "updatingXOfY": "نوێکردنەوە {0}/{1}..." + "updatingXOfY": "نوێکردنەوە {0}/{1}...", + "doNotAskAgain": "دووبارە مەپرسە (لە بەڕێوەبردنی Plugins ـەکاندا بیگۆڕە)", + "applyPluginsTo": "جێبەجێکردنی Plugins ـەکان لەسەر", + "askEachTime": "هەموو جارێک بپرسە", + "allLines": "هەموو دێڕەکان" }, "help": { "aboutSubtitleEdit": "دەربارەی Subtitle Edit", @@ -3437,6 +4156,8 @@ "nOcrDatabase": "بنکەدراوی nOCR", "drawMode": "دۆخی کێشان:", "addNewCharcter": "زیادکردنی پیتی نوێ", + "addNOcrCharacterTitle": "زیادکردنی پیتی nOCR بۆ دێڕی {0}، پیتی {1} لە {2} بە بەکارهێنانی بنکەدراوەی \"{3}\"", + "addBinaryOcrCharacterTitle": "زیادکردنی پیتی binary OCR بۆ دێڕی {0}، پیتی {1} لە {2} بە بەکارهێنانی بنکەدراوەی \"{3}\"", "lineIndexX": "دێڕی {0}", "inspectNOcrAdditions": "پشکنینی زیادکراوە نوێکانی nOCR", "ocrSelectedLines": "OCR کردنی دێڕە هەڵبژێردراوەکان", @@ -3485,6 +4206,8 @@ "binaryImageCompareInspectImageMatches": "\"بەراوردی وێنەی باینەری\" - پشکنینی لێکچوونەکانی وێنە", "saveBlankTextTitle": "پاشەکەوتکردنی دەقی بەتاڵ؟", "saveBlankTextPrompt": "دەقی بەتاڵ بۆ وێنەکە پاشەکەوت بکرێت؟", + "drawnLinesDoNotMatchTitle": "هێڵەکان لەگەڵ وێنەکە ناگونجێن", + "drawnLinesDoNotMatchPrompt": "هەندێک لە هێڵە کێشراوەکان لەگەڵ وێنەکە ناگونجێن (هێڵە سەوزەکان دەبێت لەسەر پیتەکە بن، هێڵە سوورەکان دەبێت لە دەرەوەی بن)، بۆیە ئەم پیتە ناناسرێتەوە.\n\nهەر پاشەکەوت بکرێت؟", "yesAndNeverAskAgain": "بەڵێ و دووبارە پرسیار مەکەوە", "importTextFromSubtitleDotDotDot": "هێنانەناوی دەق لە ژێرنووسەوە...", "importTextFromSubtitleOverwritePrompt": "هەندێک دێڕ پێشتر دەقی OCR یان هەیە. لەسەرنووسی دەقە ئێستاکان بکرێت؟", @@ -3543,9 +4266,26 @@ "crispEmbedSettingsTitle": "ڕێکخستنەکانی CrispEmbed", "crispEmbedDescription": "بزوێنەری ناوخۆیی OCR بە چەند بنکەی مۆدێل - بزوێنەر و مۆدێلەکان لێرە دابگرە.", "trainNOcrDatabase": "ڕاهێناندنی بنکەدراوی nOCR...", + "optimizeNOcrDatabase": "باشکردنی بنکەدراوەی nOCR...", + "optimizeNOcrDatabaseQuestionXY": "ئەو هێڵانە لابدرێن کە پیتەکان لە پیتە هاوشێوەکان جیا ناکەنەوە لە بنکەدراوەی nOCR ی \"{0}\"؟\n\nئەمە بنکەدراوەکە بچووکتر و OCR خێراتر دەکات، بە ئاسایی بە هەڵەی کەمتر. تا خولەکێک دەخایەنێت.\n\nپاشەکەوتێک وەک \"{1}\" هەڵدەگیرێت.", + "optimizingNOcrDatabaseXY": "باشکردنی بنکەدراوەی nOCR... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "بنکەدراوەی nOCR ی \"{0}\" باشکرا: {1:#,##0} -> {2:#,##0} هێڵ.", "startTraining": "دەستپێکردنی ڕاهێنان", "abortTraining": "وازهێنان لە ڕاهێنان", "trainingOptions": "هەڵبژاردەکانی ڕاهێنان", + "trainNOcrSubtitle": "پیتەکان بە فۆنتە دامەزراوەکان دەکێشێت و شێوەکانیان فێری nOCR دەکات. ئەو فۆنتانە هەڵبژێرە کە ژێرنووسەکانت بەکاریان دەهێنن.", + "xFontsSelected": "{0:#,##0} هەڵبژێردراو", + "subtitleFonts": "فۆنتەکانی ژێرنووس", + "emptyDatabase": "بنکەدراوەی بەتاڵ", + "startFromDatabase": "دەستپێکردن لە", + "startFromDatabaseHint": "پیتە فێرکراوەکان بۆ کۆپییەکی بنکەدراوەیەکی هەبوو زیاد بکە (پێشنیارکراو) یان لە بنکەدراوەیەکی بەتاڵەوە دەستپێبکە", + "fontSizes": "قەبارەکانی فۆنت", + "fontSizesHint": "قەبارەکانی فۆنت بە پیکسڵ بۆ کێشان، بە کۆما جیاکراونەتەوە، بۆ نموونە \"30, 40\"", + "numberOfLineSegmentsHint": "ژمارەی هێڵە پشکنراوەکان بۆ هەر پیتێک - زیاتر توندترە بەڵام هێواشترە", + "enterDatabaseName": "ناوێک بۆ بنکەدراوەکە بنووسە", + "trainingFontXSizeYCharacterZ": "فێرکردنی \"{0}\" لە {1} px: {2}", + "xLearned": "{0:#,##0} فێرکران", + "xSkipped": "{0:#,##0} تێپەڕێندران", "charactersToTrain": "پیتەکانی ڕاهێنان", "letterCombinationsToTrain": "تێکەڵەکانی پیت کە ڕەنگە دابەش بکرێن بۆ یەک وێنە", "importCharactersFromSubtitleFile": "هێنانەناوی پیتەکان لە فایلی ژێرنووسەوە...", @@ -3572,6 +4312,8 @@ "drawZoomOut": "زوومی دوورکردنەوە (Ctrl+-)", "drawResetView": "گەڕاندنەوەی بینین (Ctrl+0)", "drawToggleGrid": "گۆڕینی خشتە (Ctrl+G)", + "drawTogglePreview": "گۆڕینی پێشبینین (F9)", + "drawPreviewFailed": "پێشبینین سەرکەوتوو نەبوو - ffmpeg لەگەڵ libass (subtitles filter) پێویستە", "drawCopyToClipboard": "لەبەرگرتنەوە بۆ کلیپبۆرد (Ctrl+C)", "drawShapes": "شێوەکان", "drawSelectedPoint": "خاڵی هەڵبژێردراو", @@ -3579,6 +4321,81 @@ "drawSelectedLayer": "چینی هەڵبژێردراو", "drawToolX": "ئامراز: {0}", "drawHelpText": "کرتە بکە بۆ زیادکردنی خاڵ • Enter/F8 بۆ داخستنی شێوە • Shift+ڕاکێشان بۆ جوڵاندن • Ctrl+سکڕۆڵ بۆ زووم", + "drawMoveToLayer": "گواستنەوە بۆ چین", + "drawFlipHorizontal": "هەڵگێڕانەوەی ئاسۆیی", + "drawFlipVertical": "هەڵگێڕانەوەی ستوونی", + "drawHideShape": "شاردنەوەی شێوە", + "drawShowShape": "پیشاندانی شێوە", + "drawHideLayer": "شاردنەوەی چین", + "drawShowLayer": "پیشاندانی چین", + "drawDeleteLayer": "سڕینەوەی چین", + "drawDeletePoint": "سڕینەوەی خاڵ", + "drawCancelDrawing": "هەڵوەشاندنەوەی وێنەکێشان", + "drawLayerX": "چینی {0}", + "drawImportSvg": "هێنانەناوی وێنەی SVG...", + "drawRotateClockwise": "سوڕاندنی 90° بە ئاراستەی کاتژمێر", + "drawConvertToCurve": "گۆڕینی پارچە بۆ چەماوە", + "drawBackground": "پاشبنەما", + "drawPosition": "شوێن", + "drawZoom": "زووم", + "drawShapeTool": "ئامرازی شێوە", + "drawColorPickerTool": "هەڵگرتنی ڕەنگ لە شێوەیەک یان پاشبنەما", + "drawShapeLibrary": "کتێبخانەی شێوەکان", + "drawShapeLibraryHint": "لەسەر تابلۆکە ڕابکێشە بۆ دانانی شێوەیەک، یان کرتە بکە بۆ قەبارەی بنەڕەتی. Shift ڕێژەکانی دەپارێزێت.", + "drawAddToLibrary": "زیادکردن بۆ کتێبخانەی شێوەکان...", + "drawRemoveFromLibrary": "لابردن لە کتێبخانەی شێوەکان", + "drawShapeName": "ناوی شێوە", + "drawCategorySpeechBubbles": "بڵقی قسە", + "drawCategoryArrows": "تیرەکان", + "drawCategoryBasicShapes": "شێوە سەرەتاییەکان", + "drawCategorySymbols": "هێماکان", + "drawCategoryMyShapes": "شێوەکانی من", + "drawShapeSpeechBubble": "بڵقی قسە", + "drawShapeSpeechBubbleRight": "بڵقی قسە، کلک بۆ ڕاست", + "drawShapeSpeechBubbleUp": "بڵقی قسە، کلک بۆ سەرەوە", + "drawShapeOvalBubble": "بڵقی قسەی هێلکەیی", + "drawShapeBoxBubble": "بڵقی قسەی چوارگۆشە", + "drawShapeThoughtBubble": "بڵقی بیرکردنەوە", + "drawShapeShoutBubble": "بڵقی هاوار", + "drawShapeCaptionBox": "سندوقی ژێرنووس", + "drawShapeArrow": "تیر", + "drawShapeDoubleArrow": "تیری دووسەر", + "drawShapeChevron": "شێڤرۆن", + "drawShapeCurvedArrow": "تیری چەماوە", + "drawShapeRoundedRectangle": "لاکێشەی گۆشە خڕ", + "drawShapeTriangle": "سێگۆشە", + "drawShapeDiamond": "ئەڵماس", + "drawShapePentagon": "پێنجگۆشە", + "drawShapeHexagon": "شەشگۆشە", + "drawShapeOctagon": "هەشتگۆشە", + "drawShapeStar": "ئەستێرە", + "drawShapeRing": "ئەڵقە", + "drawShapePlus": "کۆ", + "drawShapeBanner": "بانەر", + "drawShapeHeart": "دڵ", + "drawShapeCheck": "نیشانەی ڕاست", + "drawShapeMusicNote": "نۆتەی مۆسیقا", + "drawShapeMusicNotes": "نۆتەکانی مۆسیقا", + "drawShapeLightning": "هەورەبروسکە", + "drawShapeCloud": "هەور", + "drawShapeMoon": "مانگ", + "drawShapeBadge": "باج", + "drawSize": "قەبارە", + "drawLayer": "چین", + "drawBackgroundVideoFrame": "چوارچێوەی ڤیدیۆ (شوێنی ئێستا)", + "drawBackgroundVideoFrameAt": "چوارچێوەی ڤیدیۆ لە...", + "drawBackgroundImage": "فایلی وێنە...", + "drawBackgroundNone": "بێ پاشبنەما", + "drawBackgroundStretch": "کشاندنی وێنە بۆ قەبارەی تابلۆ", + "drawBackgroundOpacity": "ناڕوونی پاشبنەما", + "drawBackgroundVideoFrameFailed": "نەتوانرا چوارچێوەیەکی ڤیدیۆ لە {0} وەربگیرێت.", + "drawImages": "وێنەکان", + "drawConvertToLine": "گۆڕینی پارچە بۆ هێڵ", + "drawConvertShapeToCurves": "گۆڕینی هەموو هێڵەکان بۆ چەماوە", + "drawConvertShapeToLines": "گۆڕینی هەموو چەماوەکان بۆ هێڵ", + "drawRotateCounterClockwise": "سوڕاندنی 90° بە پێچەوانەی ئاراستەی کاتژمێر", + "drawSvgImages": "وێنەکانی SVG", + "drawSvgNoShapes": "هیچ شێوەیەکی پڕکراو یان هێڵێک لە فایلی SVG دا نەدۆزرایەوە.", "progressBarTitle": "هێڵی پێشکەوتنی ASSA", "progressBarSettings": "هێڵی پێشکەوتن", "mouseOverColor": "ڕەنگی بردنی مشتەر", @@ -3675,13 +4492,26 @@ "graphics": "گرافیکەکان", "copyToStorageStyles": "لەبەرگرتنەوە بۆ شێوازەکانی کۆگا", "copyToFileStyles": "لەبەرگرتنەوە بۆ شێوازەکانی فایل", + "styleXAlreadyExistsInStorage": "شێوازێک بە ناوی \"{0}\" پێشتر لە کۆگادا هەیە.\n\nجێگیری بکرێتەوە، یان هەردووکیان بهێڵدرێنەوە (کۆپییەکە ناوێکی نوێ وەردەگرێت)؟", + "styleXAlreadyExistsInFile": "شێوازێک بە ناوی \"{0}\" پێشتر لە فایلەکەدا هەیە.\n\nجێگیری بکرێتەوە، یان هەردووکیان بهێڵدرێنەوە (کۆپییەکە ناوێکی نوێ وەردەگرێت)؟", + "styleNameCannotBeEmpty": "ناوی شێواز ناتوانێت بەتاڵ بێت.", + "styleNameXIsUsedMoreThanOnce": "ناوی شێوازی \"{0}\" لەلایەن زیاتر لە یەک شێواز لە فایلەکەدا بەکارهاتووە.", + "overwrite": "جێگیرکردنەوە", + "keepBoth": "هێشتنەوەی هەردووکیان", + "doThisForAllConflictingStyles": "ئەمە بۆ هەموو شێوازە ناکۆکەکان بکە", "setStyleAsDefault": "دانانی شێواز وەک بنەڕەتی", "takeUsagesFromDotDotDot": "وەرگرتنی بەکارهێنانەکان لە...", "replaceStyleWithDotDotDot": "جێگرتنەوەی شێواز بە...", "noAttachmentsFound": "هیچ هاوپێچێک لە فایلی ASSA ی هەڵبژێردراودا نەدۆزرایەوە.", "deleteStyleQuestion": "سڕینەوەی شێواز؟", "deleteStylesQuestion": "سڕینەوەی شێوازەکان؟", + "deleteXStylesQuestion": "دەتەوێت {0} شێواز بسڕیتەوە؟", + "deleteXStylesFromStorageQuestion": "دەتەوێت {0} شێواز لە کۆگا بسڕیتەوە؟", + "deleteStyleXFromStorageQuestion": "دەتەوێت شێوازی \"{0}\" لە کۆگا بسڕیتەوە؟", + "deleteStyleXFromFileQuestion": "دەتەوێت شێوازی \"{0}\" لە فایلی ئێستا بسڕیتەوە؟", "openStyleImportFile": "کردنەوەی فایلی ژێرنووس بۆ هێنانەناوی شێوازەکان", + "styleImportFiles": "فایلەکانی شێواز (.ass، .sty، هاوپۆلەکانی Subtitle Edit 4 .template)", + "ssaStyleImportFiles": "فایلەکانی شێواز (.ssa، .ass، .sty)", "primary": "سەرەکی", "secondary": "لاوەکی", "applyOverrideTags": "جێبەجێکردنی تەگی override", @@ -3828,7 +4658,7 @@ "detailGapToPrevious": "بۆ پێشوو: {0} < {1} میلی چرکە", "detailGapToNext": "بۆ دواتر: {0} < {1} میلی چرکە", "detail": "وردەکاری", - "tip": "دوو کرتە لەسەر دێڕێک بکە (یان Enter دابگرە) بۆ چوون بۆی. ئەو پشکنینانەی جێبەجێ دەکرێن و سنوورەکانیان لە ڕێکخستنەکان > گشتیدا دانراون.", + "tip": "دوو کرتە لەسەر دێڕێک بکە (یان Enter دابگرە) بۆ چوون بۆی. ئەو پشکنینانەی جێبەجێ دەکرێن و سنوورەکانیان لە ڕێکخستنەکان > گشتیدا دانراون.", "exportAsText": "فایلی دەق (.txt)...", "exportAsExcel": "فایلی Excel (.xlsx)...", "exportAsHtml": "پەڕەی وێب (.html)...", diff --git a/src/ui/Assets/Languages/ChineseSimplified.json b/src/ui/Assets/Languages/ChineseSimplified.json index 1767f4d1868..1853ee4ddda 100644 --- a/src/ui/Assets/Languages/ChineseSimplified.json +++ b/src/ui/Assets/Languages/ChineseSimplified.json @@ -1,9 +1,50 @@ { "title": "Subtitle Edit", - "version": "v5.3.0-beta22", + "version": "v5.3.0", "translatedBy": "wuwufei | FeiXJ | Leon Cheung | larsenlouis | VK | nkh0472 | 蒙太奇字幕组(MontageSubs) | emsb8888-prog", "cultureName": "zh-Hans", "general": { + "prompt": "提示词", + "temperature": "温度", + "preset": "预设", + "output": "输出", + "outputFormat": "输出格式", + "other": "其他", + "timeCodeFormat": "时间码格式", + "topBottomMargin": "上下边距", + "theme": "主题", + "brightness": "亮度", + "chooseColor": "选择颜色", + "lineX": "第 {0} 行", + "playLine": "播放行", + "maxLineLength": "单行最大长度", + "maxCharsPerSec": "最大每秒字频", + "maxNumberOfLines": "最多行数", + "subtitles": "字幕", + "shotChanges": "镜头切换", + "chapters": "章节", + "audio": "音频", + "interjections": "感叹语气词", + "blankLines": "空行", + "editWholeText": "编辑整段文本", + "noTextInClipboard": "剪贴板中无文本", + "noSubtitlesFoundTitle": "未检测到字幕内容", + "replacedXOccurrences": "已替换 {0} 处", + "invalidRegularExpressionX": "无效的正则表达式: {0}", + "discardChangesTitle": "放弃更改?", + "downloadingXDotDotDot": "正在下载 {0}...", + "importTimeCodesDotDotDot": "导入时间码...", + "original": "原始", + "nextChange": "下一处更改", + "previousChange": "上一处更改", + "changeXOfY": "第{0}处修改,共{1}处", + "tooLong": "过长", + "tooShort": "过短", + "overlapping": "重叠", + "detail": "详情", + "fixOcrErrors": "修复 OCR 错误", + "runningOcrXY": "正在执行 OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp 需要下载 llama-server 引擎。是否立即下载?", "abort": "中止", "actor": "角色", "actors": "演员", @@ -443,6 +484,7 @@ "percent": "百分比", "pickLayer": "设置图层", "pickOllamaModel": "选择 Ollama 模型", + "pickModel": "选择模型", "llamaCppUseRemoteServer": "使用外部服务器 (URL)", "llamaCppEngineSettings": "llama.cpp 设置", "llamaCppEngineSettingsSubtitle": "本地 llama.cpp 服务器版本", @@ -594,6 +636,8 @@ "showStartColumn": "显示“开始”列", "showHideColumn": "显示“隐藏”列", "showHistory": "显示历史记录(用于撤消)", + "clearHistory": "清除历史", + "removeFromHistory": "从历史中移除", "showLayerColumn": "显示“图层”列", "showPreview": "显示预览", "showShotChangesList": "显示镜头切换列表", @@ -655,12 +699,14 @@ "styleExaggeration": "样式夸张化", "styles": "样式", "subtitleFile": "字幕文件", + "subtitleFileChangedOutsideX": "文件“{0}”已在 Subtitle Edit 外部被修改。\n\n是否重新加载并放弃您的更改?", "subtitleFileName": "字幕文件名", "subtitleFileSaved": "字幕文件已保存", "subtitleFileSavedToX": "字幕文件已保存至 {0}", "subtitleFiles": "字幕文件", "subtitleFormats": "字幕格式", "subtitleLoadedX": "已加载字幕 “{0}”", + "subtitleReloadedChangedOutsideX": "已重新加载字幕(在 Subtitle Edit 外部被修改): {0}", "suffix": "后缀", "suggestions": "建议", "sync": "同步", @@ -744,6 +790,14 @@ "videoCustom3ForwardX": "视频,自定义毫秒 ({0:#,###,##0}) 前进,3", "videoCustom4BackX": "视频,自定义毫秒 ({0:#,###,##0}) 后退,4", "videoCustom4ForwardX": "视频,自定义毫秒 ({0:#,###,##0}) 前进,4", + "videoCustom1BackAndPauseX": "视频,自定义毫秒数 ({0:#,###,##0}) 后退并暂停,1", + "videoCustom1ForwardAndPauseX": "视频,自定义毫秒数 ({0:#,###,##0}) 前进并暂停,1", + "videoCustom2BackAndPauseX": "视频,自定义毫秒数 ({0:#,###,##0}) 后退并暂停,2", + "videoCustom2ForwardAndPauseX": "视频,自定义毫秒数 ({0:#,###,##0}) 前进并暂停,2", + "videoCustom3BackAndPauseX": "视频,自定义毫秒数 ({0:#,###,##0}) 后退并暂停,3", + "videoCustom3ForwardAndPauseX": "视频,自定义毫秒数 ({0:#,###,##0}) 前进并暂停,3", + "videoCustom4BackAndPauseX": "视频,自定义毫秒数 ({0:#,###,##0}) 后退并暂停,4", + "videoCustom4ForwardAndPauseX": "视频,自定义毫秒数 ({0:#,###,##0}) 前进并暂停,4", "videoExtension": "视频文件扩展名", "videoFile": "视频文件", "videoFileGenerated": "视频文件已生成", @@ -840,8 +894,7 @@ "transcriptionProgressServerFormat": "服务器:{0}", "transcriptionProgressModelFormat": "模型:{0}", "transcriptionProgressReceivedSegmentsFormat": "已接收片段 ({0})", - "transcriptionProgressModelAuto": "(自动)", - "openAiCompatibleSttModel": "模型" + "transcriptionProgressModelAuto": "(自动)" }, "main": { "menu": { @@ -880,6 +933,7 @@ "multipleReplace": "多重替换...", "fillSelectedLinesWithClipboard": "使用剪贴板文本填充选中字幕行", "goToLineNumber": "转到字幕编号...", + "commandPalette": "命令面板(_P)...", "rightToLeftMode": "从右到左模式...", "modifySelectionDotDotDot": "修改选区...", "tools": "工具", @@ -1072,6 +1126,9 @@ "charactersPerSecond": "字符/秒: {0}", "chooseColumn": "选择列", "columnPaste": "列粘贴", + "commandPaletteTitle": "命令面板", + "commandPaletteSearchPlaceholder": "输入以搜索命令...", + "commandPaletteNoCommandsFound": "没有匹配的命令", "createdEmptyTranslation": "从当前字幕创建了空的翻译", "deleteText": "删除文本", "deleteTextAndShiftCellsUp": "删除文本并上移单元格", @@ -1164,6 +1221,7 @@ "originalIsReadOnlyNotSaved": "原始字幕为只读参考,未被保存", "originalIsEmptyNotSaved": "原始字幕没有任何文本,因此未保存", "originalIsReadOnlyReference": "原始字幕以只读参考模式打开", + "closeTranslationQuestionXY": "关闭翻译“{0}”?\n\n原始字幕“{1}”将成为您编辑的字幕。翻译文件本身不会被更改。", "allowEditOfOriginalSubtitle": "允许编辑原始字幕", "showAllOriginalLinesX": "显示所有原始字幕行(其中 {0} 行在当前无匹配项)", "showAllOriginalLinesHint": "无匹配项的行将作为额外行显示,以便您查看翻译中缺失的内容。", @@ -1328,7 +1386,8 @@ "forcedAlignerIsolatingSpeech": "正在隔离语音... {0}", "forcedAlignerIsolatingSpeechFailed": "无法隔离语音——结束时间改为根据阅读时间设置。", "forcedAlignerModel": "对齐模型", - "forcedAlignerDownloadEngine": "下载 / 更新引擎..." + "forcedAlignerDownloadEngine": "下载 / 更新引擎...", + "forcedAlignerEstimatedXOfY": "{1} 行中有 {0} 行无法对齐,已按阅读时间放置——其时间码仅为估计值。脚本可能比视频中实际说出的内容更长。" }, "export": { "exportImagesProfiles": "导出图像配置文件", @@ -1531,13 +1590,7 @@ "fadeUpTime": "淡入时间", "fadeDownTime": "淡出时间", "zPosition": "Z 轴位置", - "zPositionHelp": "正数使文本向远处移动,负数使文本向近处移动;若 Z 轴位置为零,则为 2D 效果。", - "font": "字体", - "generate": "生成", - "fontColor": "字体颜色", - "fontSize": "字体大小", - "frames": "帧数", - "export": "导出..." + "zPositionHelp": "正数使文本向远处移动,负数使文本向近处移动;若 Z 轴位置为零,则为 2D 效果。" }, "webVtt": { "setStylesForSelectedLinesTitle": "为所选字幕行设置 WebVTT 样式", @@ -1643,8 +1696,7 @@ "propertyTopExtent": "顶部范围", "propertyBottomOrigin": "底部原点", "propertyBottomExtent": "底部范围", - "xProperties": "{0} 属性", - "propertyFileExtension": "文件扩展名" + "xProperties": "{0} 属性" }, "edit": { "modifySelection": { @@ -2072,9 +2124,7 @@ "playAligned": "已对齐", "playAlignedHint": "使用对齐后的时间码播放所选行", "apply": "应用", - "applyHint": "取消勾选某行以保留其原始时间码。双击某行可播放。", - "playOriginal": "原始", - "playOriginalHint": "使用原始时间码播放所选行" + "applyHint": "取消勾选某行以保留其原始时间码。双击某行可播放。" }, "beautifyTimeCodesProfile": { "title": "编辑时间码美化预设", @@ -2112,8 +2162,7 @@ "hintGap": "字幕之间的最小间隔,单位为帧;下方所有间隔参数均以此数值为基准。", "hintZones": "基于最近镜头切换点设置吸附阈值(红色)与预警阈值(绿色),单位帧;从左至右四组数值:左侧绿色预警、左侧强制吸附、右侧强制吸附、右侧绿色预警。", "hintConnected": "若两段字幕判定为关联(间隔低于阈值),将保留距离镜头切换点最近一侧的时间间隔。", - "hintChaining": "控制两段临近字幕的处理逻辑:可同步拉长,或相互拉开间距,取决于两者之间是否存在镜头切换。", - "general": "通用设置" + "hintChaining": "控制两段临近字幕的处理逻辑:可同步拉长,或相互拉开间距,取决于两者之间是否存在镜头切换。" }, "bridgeGaps": { "bridgeGapsSmallerThan": "桥接小于此值的间隔(毫秒)", @@ -2190,6 +2239,18 @@ "addFolderRecursiveDotDotDot": "递归添加文件夹...", "selectFolderToConvert": "选择包含待转换文件的文件夹", "includeSubfolders": "添加文件夹时包含子文件夹", + "videoFilesWhenAddingFolder": "添加文件夹时的视频文件(mkv、mp4、ts...)", + "videoFilesAsk": "询问", + "videoFilesInclude": "添加其字幕轨道", + "videoFilesSkip": "跳过", + "folderContainsXVideoFiles": "该文件夹包含 {0} 个视频文件(mkv、mp4、ts...)。\n\n是否同时添加其内嵌字幕轨道,还是仅添加字幕文件?", + "addVideoFiles": "添加视频文件", + "skipVideoFiles": "仅字幕文件", + "doNotAskAgainVideoFiles": "不再询问(可在批量转换设置中更改)", + "settingsSectionOutput": "输出", + "settingsSectionAddingFiles": "添加文件", + "settingsSectionImageBasedSubtitles": "图像字幕(OCR)", + "settingsSectionOther": "其他", "keepSourceFileTimestamp": "输出文件保留源文件的日期/时间", "preventSleepWhileConverting": "转换时防止计算机休眠", "scanningFolderX": "正在扫描 {0}...", @@ -2205,7 +2266,20 @@ "transportStreamOnlyTeletext": "仅图文电视", "transportStreamGetSizeFromVideo": "从视频获取大小...", "twoLetterLanguageCodeUppercase": "双字母语言代码(大写)", - "threeLetterLanguageCodeUppercase": "三字母语言代码(大写)" + "threeLetterLanguageCodeUppercase": "三字母语言代码(大写)", + "formatContainsDotDotDot": "格式包含...", + "extensionIsDotDotDot": "扩展名为...", + "statusIsError": "状态为错误", + "forcedTracksOnly": "仅强制轨道", + "xConvertedYFailedInZ": "已转换 {0:#,###,##0} 个,失败 {1:#,###,##0} 个,用时 {2}", + "xNotProcessed": "{0:#,###,##0} 个未处理", + "removeUnicodeControlCharactersTitle": "移除 Unicode 控制字符", + "removeUnicodeControlCharactersInfo": "从文本中移除不可见的 Unicode 方向控制字符(LRM、RLM、LRE、RLE、PDF、LRO 和 RLO),并将不换行空格替换为普通空格。", + "preset": "预设", + "savePresetDotDotDot": "保存预设...", + "deletePreset": "删除预设", + "presetName": "预设名称", + "deletePresetX": "删除预设“{0}”?" }, "changeCasing": { "fixNames": "修复名称", @@ -2499,7 +2573,21 @@ "correctWordsX": "无误单词: {0}", "namesX": "专有名词: {0}", "addedToDictionaryX": "添加至词典: {0}", - "doNotShowThisAgain": "不再显示此提示" + "doNotShowThisAgain": "不再显示此提示", + "editUseAlwaysList": "编辑“总是使用”列表...", + "useAlwaysListTitle": "拼写检查 - “总是使用”列表", + "useAlwaysListHeader": "“总是使用”列表", + "useAlwaysListDescription": "拼写检查自动替换的单词,由“全部更改”和“总是使用”保存。仅当单词拼写错误时才会使用该词对。", + "useAlwaysWord": "拼错的单词", + "xPairs": "{0:#,##0} 个词对", + "xUnusedPairs": "{0:#,##0} 个从未使用", + "useAlwaysUnusedHint": "从未使用——该单词拼写正确(或为名称或用户单词),因此拼写检查从不标记它", + "removeUnused": "移除未使用的", + "useAlwaysEmpty": "此语言尚无“总是使用”词对", + "useAlwaysEmptyHint": "在拼写检查中点击“全部更改”或“总是使用”时会添加词对。", + "useAlwaysNoMatch": "没有与搜索匹配的词对", + "useAlwaysSameWord": "替换词必须与原单词不同。", + "useAlwaysRememberOff": "设置中已关闭“记住‘总是使用’列表”,因此拼写检查不会使用或保存此列表。" }, "video": { "burnIn": { @@ -2680,6 +2768,12 @@ "speakFromCurrentLineHint": "从当前行开始逐行朗读。按 Escape 或点击另一行可停止。", "stopSpeaking": "停止朗读", "speakingLineX": "正在朗读第 {0} 行...(按 Escape 停止)", + "playWithSpeechTitle": "带语音播放", + "playWithSpeechDotDotDot": "带语音播放...", + "playWithSpeechHint": "播放视频,并在视频播放到每一行时朗读该行。可照常暂停和跳转;按 Escape 停止。", + "lowerVideoVolumeWhileSpeaking": "朗读时降低视频音量", + "pauseVideoWhenSpeechRunsLate": "语音延续到下一行时暂停视频", + "waitingForSpeechLineX": "正在为第 {0} 行生成语音...(按 Escape 停止)", "voiceKindClone": "克隆语音", "voiceKindPreset": "内置", "voiceKindModel": "语音模型", @@ -2744,6 +2838,12 @@ "advancedTtsSettings": "高级 TTS 语音合成设置", "advancedTtsAudioProcessing": "音频处理", "advancedTtsOutput": "输出", + "advancedTtsVoiceCloning": "声音克隆", + "cleanCloneReferences": "清理声音克隆参考音频(Sidon)", + "cleanCloneReferencesDescription": "从用于克隆声音的音频中移除音乐、噪音和混响:包括从视频中截取的片段以及在声音管理器中导入的录音。使用 audio.cpp 上的 Sidon 语音修复模型(需下载 940 MB)。克隆的声音不再复制背景,但非常安静或重叠的语音可能会变得发闷。", + "cleaningCloneReferencesDotDotDot": "正在清理声音克隆参考音频...", + "downloadSidonTitle": "下载 Sidon?", + "downloadSidonQuestionX": "清理声音克隆参考音频需要 Sidon 语音修复模型({0})。\n\n现在下载吗?如果不下载,参考音频将按原样使用。", "proAudioPostProcessing": "专业音频后处理", "proAudioPostProcessingDescription": "对每段音频应用均衡器暖化、噪声门、压缩、响度归一化(-16 LUFS)以及淡入淡出效果。", "generatingSpeechSegmentXOfY": "正在生成语音:第 {0} 段,共 {1} 段", @@ -2756,6 +2856,10 @@ "removeOriginalSpeechDescription": "保留原始视频的音乐和音效但移除其语音,并将新语音混合在其上。有 GPU 时约耗时与视频本身相当,无 GPU 时则长很多倍。开启音频闪避时,其音量适用于音乐和音效。仅在将语音添加到视频文件时适用。", "removingOriginalSpeech": "正在移除原始语音...", "removeOriginalSpeechFailed": "无法移除原始语音——语音已在不移除的情况下添加到视频。", + "speechRemovalModel": "模型", + "speechRemovalModelDescription": "最佳质量能最大程度保留音乐和音效。快速模式约快三倍,但音乐损失稍多。", + "speechRemovalBestQuality": "最佳质量(Mel-Band RoFormer)", + "speechRemovalFast": "快速(HTDemucs)", "videoTruncatedWarning": "新视频文件中的画面在 {0} 后停止,但原始视频长度为 {1}——画面将冻结而声音继续。\n\n文件已保留。请查看 Subtitle Edit 数据文件夹中的 error-log.txt 以获取 ffmpeg 输出。", "originalVolumePercent": "原始音量百分比", "vadSilenceCompression": "VAD 静音压缩", @@ -2827,8 +2931,7 @@ "subtitleUpdatedFromReviewSingular": "已根据语音审阅更新1条字幕", "subtitleUpdatedFromReviewPlural": "已根据语音审阅更新 {0} 条字幕", "subtitleMergedLinesAppliedSingular": "已应用1条文本转语音字幕合并操作", - "subtitleMergedLinesAppliedPlural": "已应用 {0} 条文本转语音字幕合并操作", - "cloneVoicePerLineNeedsOriginalSubtitleX": "{0} 只有在知道视频中该行说了什么时才能克隆该行的语音,而这需要原始语言的字幕。当前未加载原始字幕,因此每一行都会使用第一个导入的语音来朗读,而不是视频中的语音。\n\n请在译文字幕旁打开原始字幕(文件 > 打开原始文件...),然后重新生成。" + "subtitleMergedLinesAppliedPlural": "已应用 {0} 条文本转语音字幕合并操作" }, "shotChanges": { "generateShotChanges": "生成场景切换", @@ -2881,9 +2984,7 @@ "writtenToX": "章节已写入 {0}", "unableToWriteChapters": "无法将章节写入视频文件。", "chaptersSavedToX": "章节已保存至 {0}", - "emptyListCallToAction": "暂无章节 - 请在当前视频位置添加,或从视频/文件中导入。", - "apply": "应用", - "noVideoLoaded": "未加载视频" + "emptyListCallToAction": "暂无章节 - 请在当前视频位置添加,或从视频/文件中导入。" }, "videoOcr": { "title": "内嵌字幕 OCR 识别", @@ -2934,8 +3035,7 @@ "engineCloudApi": "云 API(需要 API 密钥)", "engineNothingToInstall": "无需安装", "engineModelsMissing": "引擎已安装,模型缺失", - "website": "网站", - "dictionary": "词典" + "website": "网站" }, "backgroundMusic": { "title": "生成背景音乐", @@ -3142,17 +3242,7 @@ "ttsEngineNotInstalled": "{0} 未安装", "ttsEngineUpdateAvailable": "{0} - 有可用更新", "ttsEngineTooOldUpdateRequired": "{0} 版本过旧 - 需要更新", - "ttsEngineChatterboxCapable": "{0} (支持 Chatterbox)", - "ttsUpdateX": "更新 {0}", - "beautifyTimeCodes": { - "useExactTimeCodes": "使用视频的精确时间码", - "extractTimeCodes": "提取时间码", - "extractingTimeCodes": "正在提取时间码...", - "noTimeCodesLoaded": "未加载时间码", - "xTimeCodesLoaded": "已加载 {0} 个时间码", - "timeCodesExtractFailed": "无法从视频读取时间码", - "timeCodesHint": "将字幕对齐到视频的真实帧时间,而非假定恒定帧率。需完整读取视频一次,结果将被缓存。" - } + "ttsEngineChatterboxCapable": "{0} (支持 Chatterbox)" }, "waveform": { "guessTimeCodes": "猜测时间码", @@ -3224,7 +3314,8 @@ "syncPoints": "同步点", "pointSync": "取点同步", "pointSyncViaOther": "通过其他字幕取点同步", - "syncPointCandidateInfo": "在 {0}+ 秒静音后开始的字幕行会高亮显示——它们通常是可靠的同步点", + "syncPointCandidateAfterInfo": "其后有 {0}+ 秒静音的行会被高亮显示——它们通常是可靠的同步点", + "gapAfter": "之后间隔", "adjustAllShortcuts": "键盘快捷键:\r\n\r\n• Shift + 左/右:移动 10 毫秒\r\n• Ctrl + 左/右:移动 100 毫秒\r\n• Alt + 左/右:移动 500 毫秒", "adjustAllShortcutsFrames": "键盘快捷键:\r\n\r\n• Shift + 左/右:移动 1 帧\r\n• Ctrl + 左/右:移动 10 帧\r\n• Alt + 左/右:移动 1 秒", "offsetInSeconds": "偏移秒数", @@ -3288,9 +3379,7 @@ "editTranslationHint": "点击所选行的译文进行编辑(回车保存,Esc 取消)", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp 需要下载 llama-server 引擎和翻译模型。是否立即下载?", "llamaCppDownloadEnginePrompt": "llama.cpp 需要下载 llama-server 引擎。是否立即下载?", - "llamaCppDownloadModelPrompt": "llama.cpp 需要下载所选的翻译模型。是否立即下载?", - "advancedDotDotDot": "高级...", - "advancedSettings": "高级设置" + "llamaCppDownloadModelPrompt": "llama.cpp 需要下载所选的翻译模型。是否立即下载?" }, "options": { "settings": { @@ -3362,7 +3451,7 @@ "singleLineMaxLength": "单行最大长度", "optimalCharsPerSec": "最佳每秒字节数", "maxCharsPerSec": "最大每秒字频", - "maxWordsPerMin": "最大每分词频 ", + "maxWordsPerMin": "最大每分词频", "minDurationMs": "最小时长,毫秒", "maxDurationMs": "最大时长,毫秒", "minGapMs": "字幕间最小间隔,单位毫秒", @@ -3389,6 +3478,7 @@ "promptBeforeDelete": "删除前提示确认", "rememberPositionAndSize": "记住主窗口的位置和大小", "titleBarFullFileName": "在标题栏中显示完整文件路径", + "showRecentFiles": "显示最近的文件(用于重新打开)", "openLastFileOnStart": "启动时打开最近文件", "autoSave": "自动保存(编辑时自动保存当前打开文件)", "autoBackupOn": "自动备份", @@ -3416,6 +3506,7 @@ "waveformUseSkiaRenderer": "使用实验性快速渲染器", "waveformCenterVideoPositionAlsoWhenPaused": "暂停时也使视频位置居中", "waveformSelectCurrentSubtitleWhilePaused": "暂停时也选中当前字幕", + "waveformRememberZoom": "记住缩放(水平和垂直)", "waveformShowToolbar": "显示工具栏", "waveformShowToolbarEdit": "编辑工具栏...", "waveformShowToolbarEditLabel": "工具栏项目", @@ -3481,6 +3572,7 @@ "adjustAllTimesRememberLineSelectionChoice": "调整所有时间,记住行选择选项", "mergeKeepEndTime": "合并字幕行:保留结束时间(允许与下一条字幕重叠)", "mergeKeepEndTimeOnlyAssa": "合并字幕行:仅对 \"Advanced Sub Station Alpha\" 格式保留结束时间", + "mergeAutoBreak": "合并行:自动换行合并后的文本(关闭则保留各行原有的换行)", "filesAndLogs": "文件和日志", "showErrorLogFile": "显示错误日志文件", "showToolsLogFile": "显示工具日志文件", @@ -3521,9 +3613,11 @@ "timeCodeModeTime": "时间(hh:mm:ss,zzz)", "timeCodeModeFrames": "帧(hh:mm:ss:ff)", "timeCodeModeFrameNumbers": "帧编号", + "frameModeSnapToVideoFrames": "将时间存储在视频帧上(而非每秒内的帧)", "textBoxLimitNewLines": "限制字幕文本框中的行数", "mpvOpenGl": "libmpv - OpenGL 渲染", "mpvSoftwareRendering": "libmpv - 软件渲染(慢)", + "mpvMetalRendering": "libmpv - Metal(实验性,需要重启)", "mpvWidRendering": "libmpv - 原生窗口 ID 渲染", "waveFormsAndSpectrogramFoldersContainsX": "“Waveforms” 和 “Spectrogram” 文件夹包含 {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "清空 “频谱图” 和 “波形” 文件夹", @@ -3617,6 +3711,10 @@ "usePositionFromSubtitleFile": "使用字幕文件中的位置信息 (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "边距属于字幕区域的一部分", "textJustify": "两端对齐行", + "deinterlace": "视频去隔行", + "deinterlaceOff": "关闭", + "deinterlaceAuto": "自动(仅隔行帧)", + "deinterlaceAlways": "总是", "pixelWidthInfo": "绿色线条 = 最大宽度限制 | 红色区域 = 文字超出限制", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3634,10 +3732,7 @@ "waveformThemeForest": "森林", "waveformThemeMidnightPurple": "午夜紫", "waveformThemeRetroAmber": "复古琥珀", - "waveformThemeIce": "冰", - "showStopButton": "显示“停止”按钮", - "showFullscreenButton": "显示“全屏幕”按钮", - "useFrameMode": "使用帧模式(时.分.秒.帧)" + "waveformThemeIce": "冰" }, "shortcuts": { "searchShortcuts": "搜索快捷键...", @@ -3969,9 +4064,7 @@ "moveSelectedLinesAndForwardCustomMsBack": "将所选行及所有后续行向后移动自定义毫秒数({0:#,###,##0}),{1}", "moveSelectedLinesAndForwardCustomMsForward": "将所选行及所有后续行向前移动自定义毫秒数({0:#,###,##0}),{1}", "moveAllLinesCustomMsBack": "将所有行向后移动自定义毫秒数({0:#,###,##0}),{1}", - "moveAllLinesCustomMsForward": "将所有行向前移动自定义毫秒数({0:#,###,##0}),{1}", - "setActorXY": "设置角色 {0}: {1}", - "setActorSlotXTitle": "角色栏 {0}" + "moveAllLinesCustomMsForward": "将所有行向前移动自定义毫秒数({0:#,###,##0}),{1}" }, "wordLists": { "title": "词汇表", @@ -4174,9 +4267,26 @@ "crispEmbedSettingsTitle": "CrispEmbed 设置", "crispEmbedDescription": "支持多种模型后端的本地 OCR 引擎 - 在此处下载引擎和模型。", "trainNOcrDatabase": "训练 nOCR 数据库...", + "optimizeNOcrDatabase": "优化 nOCR 数据库...", + "optimizeNOcrDatabaseQuestionXY": "移除 nOCR 数据库“{0}”中无法将字符与相似字符区分开的线条?\n\n这会使数据库更小、OCR 更快,通常错误也更少。最多需要一分钟。\n\n备份将保存为“{1}”。", + "optimizingNOcrDatabaseXY": "正在优化 nOCR 数据库... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "nOCR 数据库“{0}”已优化:{1:#,##0} -> {2:#,##0} 条线条。", "startTraining": "开始训练", "abortTraining": "中止训练", "trainingOptions": "训练选项", + "trainNOcrSubtitle": "使用已安装的字体渲染字符,并让 nOCR 学习其形状。请选择您的字幕所使用的字体。", + "xFontsSelected": "已选择 {0:#,##0} 个", + "subtitleFonts": "字幕字体", + "emptyDatabase": "空数据库", + "startFromDatabase": "起始于", + "startFromDatabaseHint": "将训练的字符添加到现有数据库的副本中(推荐),或从空数据库开始", + "fontSizes": "字体大小", + "fontSizesHint": "要渲染的字体大小(像素),以逗号分隔,例如“30, 40”", + "numberOfLineSegmentsHint": "每个字符检查的线条数——越多越严格但越慢", + "enterDatabaseName": "输入数据库名称", + "trainingFontXSizeYCharacterZ": "正在训练“{0}”,{1} px:{2}", + "xLearned": "已学习 {0:#,##0} 个", + "xSkipped": "已跳过 {0:#,##0} 个", "charactersToTrain": "待训练的字符", "letterCombinationsToTrain": "可能被合并为单张图像的字母组合", "importCharactersFromSubtitleFile": "从字幕文件导入字符...", @@ -4203,6 +4313,8 @@ "drawZoomOut": "缩小(Ctrl+-)", "drawResetView": "重置视图(Ctrl+0)", "drawToggleGrid": "切换网格(Ctrl+G)", + "drawTogglePreview": "切换预览(F9)", + "drawPreviewFailed": "预览失败——需要带有 libass(subtitles 滤镜)的 ffmpeg", "drawCopyToClipboard": "复制到剪贴板(Ctrl+C)", "drawShapes": "形状", "drawSelectedPoint": "已选点", @@ -4210,6 +4322,81 @@ "drawSelectedLayer": "已选图层", "drawToolX": "工具: {0}", "drawHelpText": "点击添加点 • Enter/F8 闭合形状 • Shift+拖动平移 • Ctrl+滚轮缩放", + "drawMoveToLayer": "移动到图层", + "drawFlipHorizontal": "水平翻转", + "drawFlipVertical": "垂直翻转", + "drawHideShape": "隐藏形状", + "drawShowShape": "显示形状", + "drawHideLayer": "隐藏图层", + "drawShowLayer": "显示图层", + "drawDeleteLayer": "删除图层", + "drawDeletePoint": "删除点", + "drawCancelDrawing": "取消绘制", + "drawLayerX": "图层 {0}", + "drawImportSvg": "导入 SVG 图像...", + "drawRotateClockwise": "顺时针旋转 90°", + "drawConvertToCurve": "将线段转换为曲线", + "drawBackground": "背景", + "drawPosition": "位置", + "drawZoom": "缩放", + "drawShapeTool": "形状工具", + "drawColorPickerTool": "从形状或背景中拾取颜色", + "drawShapeLibrary": "形状库", + "drawShapeLibraryHint": "在画布上拖动以放置形状,或点击以默认大小放置。按住 Shift 保持比例。", + "drawAddToLibrary": "添加到形状库...", + "drawRemoveFromLibrary": "从形状库中移除", + "drawShapeName": "形状名称", + "drawCategorySpeechBubbles": "对话气泡", + "drawCategoryArrows": "箭头", + "drawCategoryBasicShapes": "基本形状", + "drawCategorySymbols": "符号", + "drawCategoryMyShapes": "我的形状", + "drawShapeSpeechBubble": "对话气泡", + "drawShapeSpeechBubbleRight": "对话气泡,尾部向右", + "drawShapeSpeechBubbleUp": "对话气泡,尾部向上", + "drawShapeOvalBubble": "椭圆对话气泡", + "drawShapeBoxBubble": "方框对话气泡", + "drawShapeThoughtBubble": "思考气泡", + "drawShapeShoutBubble": "喊叫气泡", + "drawShapeCaptionBox": "说明框", + "drawShapeArrow": "箭头", + "drawShapeDoubleArrow": "双向箭头", + "drawShapeChevron": "V 形箭头", + "drawShapeCurvedArrow": "弯曲箭头", + "drawShapeRoundedRectangle": "圆角矩形", + "drawShapeTriangle": "三角形", + "drawShapeDiamond": "菱形", + "drawShapePentagon": "五边形", + "drawShapeHexagon": "六边形", + "drawShapeOctagon": "八边形", + "drawShapeStar": "星形", + "drawShapeRing": "圆环", + "drawShapePlus": "加号", + "drawShapeBanner": "横幅", + "drawShapeHeart": "心形", + "drawShapeCheck": "对勾", + "drawShapeMusicNote": "音符", + "drawShapeMusicNotes": "多个音符", + "drawShapeLightning": "闪电", + "drawShapeCloud": "云朵", + "drawShapeMoon": "月亮", + "drawShapeBadge": "徽章", + "drawSize": "大小", + "drawLayer": "图层", + "drawBackgroundVideoFrame": "视频帧(当前位置)", + "drawBackgroundVideoFrameAt": "指定时间的视频帧...", + "drawBackgroundImage": "图像文件...", + "drawBackgroundNone": "无背景", + "drawBackgroundStretch": "将图像拉伸至画布", + "drawBackgroundOpacity": "背景不透明度", + "drawBackgroundVideoFrameFailed": "无法获取 {0} 处的视频帧。", + "drawImages": "图像", + "drawConvertToLine": "将线段转换为直线", + "drawConvertShapeToCurves": "将所有直线转换为曲线", + "drawConvertShapeToLines": "将所有曲线转换为直线", + "drawRotateCounterClockwise": "逆时针旋转 90°", + "drawSvgImages": "SVG 图像", + "drawSvgNoShapes": "在 SVG 文件中未找到填充形状或描边。", "progressBarTitle": "ASSA 进度条", "progressBarSettings": "进度条", "mouseOverColor": "鼠标悬停颜色", diff --git a/src/ui/Assets/Languages/ChineseTraditional.json b/src/ui/Assets/Languages/ChineseTraditional.json index 0cf14f3b4b3..86a7ceb9a85 100644 --- a/src/ui/Assets/Languages/ChineseTraditional.json +++ b/src/ui/Assets/Languages/ChineseTraditional.json @@ -1,9 +1,50 @@ { "title": "Subtitle Edit", - "version": "v5.3.0-beta25", + "version": "v5.3.0", "translatedBy": "昇(以下舊譯者:BAWAN、風逸蘭、Jackie Lam、SiderealArt)", "cultureName": "zh-Hant", "general": { + "prompt": "提示詞 (Prompt)", + "temperature": "溫度 (Temperature)", + "preset": "預設集", + "output": "輸出", + "outputFormat": "輸出格式", + "other": "其他", + "timeCodeFormat": "時間碼格式", + "topBottomMargin": "頂端/底端 外邊距", + "theme": "主題", + "brightness": "亮度", + "chooseColor": "選擇顏色", + "lineX": "第 {0} 行", + "playLine": "播放該行", + "maxLineLength": "最大單行長度", + "maxCharsPerSec": "最大 字元/秒 (CPS)", + "maxNumberOfLines": "最大行數", + "subtitles": "字幕", + "shotChanges": "場景變更線", + "chapters": "章節", + "audio": "音訊", + "interjections": "感嘆詞", + "blankLines": "空白行", + "editWholeText": "編輯整個文字", + "noTextInClipboard": "剪貼簿中無文字", + "noSubtitlesFoundTitle": "沒有找到字幕", + "replacedXOccurrences": "已取代 {0} 處", + "invalidRegularExpressionX": "無效的正規表達式:{0}", + "discardChangesTitle": "拋棄變更?", + "downloadingXDotDotDot": "正在下載 {0}...", + "importTimeCodesDotDotDot": "匯入時間碼...", + "original": "原件", + "nextChange": "下一個變更", + "previousChange": "上一個變更", + "changeXOfY": "變更 {0} / {1}", + "tooLong": "太長", + "tooShort": "太短", + "overlapping": "重疊", + "detail": "詳情", + "fixOcrErrors": "修正 OCR 錯誤", + "runningOcrXY": "正在執行 OCR...{0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp 需要下載 llama-server 引擎。立刻下載?", "abort": "中止(_A)", "actor": "角色", "actors": "角色", @@ -62,7 +103,7 @@ "attachDotDotDot": "附加...", "audioFileSaved": "音訊檔案已儲存", "audioFiles": "音訊檔案", - "audioVisualizer": "音訊視覺化", + "audioVisualizer": "音訊可視化工具", "auto": "自動", "autoBreak": "文本自動斷行", "autoBalanceLines": "自動平衡每行字數", @@ -232,7 +273,7 @@ "extendSelectedToPrevious": "將已選取項延伸至上一項", "extendPreviousEndToSelectedStart": "將上一行的終點延伸至已選取項的起點", "extendNextStartToSelectedEnd": "延伸下一行的起點至已選取項的終點", - "extractingAudioClips": "正在提取音訊片段...", + "extractingAudioClips": "正在摘錄音訊片段...", "exitFullScreen": "退出全螢幕", "fade": "淡化", "fetchFirstWordFromNextSubtitle": "從下一則字幕中取得第一個單字", @@ -309,8 +350,8 @@ "include": "包括", "information": "資訊", "insertAfter": "於後方插入", - "insertAtPositionAndFocusTextBox": "於視訊位置插入字幕並聚焦文字框", - "insertAtPositionNoFocusTextBox": "於視訊位置插入字幕 (不聚焦文字框)", + "insertAtPositionAndFocusTextBox": "於視訊位置插入字幕並聚焦打字框", + "insertAtPositionNoFocusTextBox": "於視訊位置插入字幕 (不聚焦打字框)", "insertBefore": "於前方插入", "insertLine": "插入一行", "insertNewSelection": "插入新選取範圍", @@ -370,7 +411,7 @@ "moreInfo": "更多資訊", "moveAllShotChangeOneFrameBack": "將所有 場景變更線 倒轉一影格", "moveAllShotChangeOneFrameForward": "將所有 場景變更線 快轉一影格", - "multiMode": "多重模式", + "multiMode": "多模式", "moveDown": "下移", "increase": "增加", "decrease": "減少", @@ -559,11 +600,11 @@ "selectedLines": "已選取行", "selectedlinesX": "已選取行:{0}", "sensitivity": "靈敏度", - "separator": "分離器", + "separator": "分隔符號", "setEnd": "設置終點", "setEndAndGoToNext": "設置終點並跳至下一項", "setEndAddNewAndGoToNew": "設置終點,新增後跳至新項", - "setEndAddNewAndGoToNewNoFocusTextBox": "設置終點,新增後跳至新項(不聚焦文字框)", + "setEndAddNewAndGoToNewNoFocusTextBox": "設置終點,新增後跳至新項(不聚焦打字框)", "setEndAndOffsetTheRest": "設置終點並偏移後續行", "setFontDotDotDot": "設置字型...", "setInCueToClosestShotChangeLeftGreenZone": "設置進聲提示點至最近的場景變更線 (貼齊至左側綠色區域)", @@ -595,6 +636,8 @@ "showStartColumn": "顯示「起點」欄", "showHideColumn": "顯示「隱藏」欄", "showHistory": "顯示歷史記錄", + "clearHistory": "清除歷史記錄", + "removeFromHistory": "從歷史記錄移除", "showLayerColumn": "顯示「圖層」欄", "showPreview": "顯示預覽", "showShotChangesList": "顯示 場景變更線 列表", @@ -637,13 +680,13 @@ "splitAtDialogDash": "拆分在對話破折號處", "splitAtLineBreak": "拆分在斷行處", "splitAtSentenceEnd": "拆分在句尾處", - "splitAtTextBoxCursorPosition": "拆分在文字游標位置處", + "splitAtTextBoxCursorPosition": "拆分在文字游標位置", "splitLine": "拆分此行", - "splitNearMiddle": "拆分在最接近中間位置的空白處", - "splitLineAtTextBoxCursorPosition": "拆分此行於游標位置", - "splitLineAtVideoAndTextBoxPosition": "拆分此行於視訊與文字框位置", - "splitLineAtVideoPosition": "拆分此行於視訊位置", - "splitLineAtWaveformPosition": "拆分此行於波形圖游標位置", + "splitNearMiddle": "拆分在最接近中間的空白處", + "splitLineAtTextBoxCursorPosition": "拆分此行在游標位置", + "splitLineAtVideoAndTextBoxPosition": "拆分此行在視訊與打字框位置", + "splitLineAtVideoPosition": "拆分此行在視訊位置", + "splitLineAtWaveformPosition": "拆分此行在波形頭部", "startFrom": "起點從", "startTime": "起頭時間", "startingDotDotDot": "正在啟動...", @@ -656,12 +699,14 @@ "styleExaggeration": "誇張風格", "styles": "樣式", "subtitleFile": "字幕檔案", + "subtitleFileChangedOutsideX": "檔案「{0}」已在 Subtitle Edit 外部被變更。\n\n要重新載入並放棄您的變更嗎?", "subtitleFileName": "字幕檔名", "subtitleFileSaved": "字幕檔已儲存", "subtitleFileSavedToX": "字幕檔已儲存至 {0}", "subtitleFiles": "字幕檔案", "subtitleFormats": "字幕格式", "subtitleLoadedX": "已讀取字幕:{0}", + "subtitleReloadedChangedOutsideX": "已重新載入字幕(在 Subtitle Edit 外部被變更):{0}", "suffix": "字尾", "suggestions": "建議", "sync": "同步", @@ -815,7 +860,7 @@ "manualSync": "手動同步", "unsupportedVideoFormat": "不支援的視訊格式", "playbackSpeed": "重播速度", - "hoursMinutesSecondsMilliseconds": "時:分:SS.FFF", + "hoursMinutesSecondsMilliseconds": "時:分:秒.FFF", "imageFiles": "圖像檔案", "openAiCompatibleSttEndpoint": "STT 端點 URL", "openAiCompatibleSttApiKey": "API金鑰", @@ -888,6 +933,7 @@ "multipleReplace": "多重取代(_M)...", "fillSelectedLinesWithClipboard": "用剪貼簿文字填滿已選取行", "goToLineNumber": "跳至行號(_G)...", + "commandPalette": "命令面板(_P)...", "rightToLeftMode": "由右至左書寫模式(_I)", "modifySelectionDotDotDot": "修改選取範圍(_S)...", "tools": "工具(_T)", @@ -1009,7 +1055,7 @@ "layoutHint": "變更工具列與面板佈局 {0}", "helpHint": "開啟說明網站 {0}", "autoBreakHint": "自動將過長行斷行 {0}", - "unbreakHint": "將多行字幕合併為單行 {0}", + "unbreakHint": "將多行字幕合併進單行 {0}", "assaStylesHint": "ASSA樣式", "assaPropertiesHint": "ASSA屬性", "assaAttachmentsHint": "ASSA附件", @@ -1033,7 +1079,7 @@ "zoomVerticalHint": "垂直縮放 {0}", "selectCurrentLineWhilePlayingHint": "播放時選取目前字幕 {0}", "videoPosition": "從目前的視訊位置 {0}", - "videoPositionTextBox": "視訊位置文字框 {0}", + "videoPositionTextBox": "視訊位置打字框 {0}", "toolbarLineBreakX": "斷行處 {0}(工具列其餘部分會在新一列繼續)", "initialText": "已選取行的初始文字", "initialTextHint": "當該行被選取時,已選取行的文字原本樣子", @@ -1080,6 +1126,9 @@ "charactersPerSecond": "字數/秒: {0}", "chooseColumn": "選擇欄位", "columnPaste": "整欄貼上", + "commandPaletteTitle": "指令選擇區", + "commandPaletteSearchPlaceholder": "輸入以搜尋指令...", + "commandPaletteNoCommandsFound": "找不到符合的指令", "createdEmptyTranslation": "已從目前字幕建立空白翻譯", "deleteText": "刪除文字", "deleteTextAndShiftCellsUp": "刪除文字並將儲存格向上位移", @@ -1088,17 +1137,17 @@ "errorLoadBinaryZeroes": "抱歉,此檔案包含僅二進位的零!\n\n如果您曾使用 Subtitle Edit 編輯過此檔案,或許可以經由「檔案 → 還原自動備份……」功能找回備份...", "errorLoadGZip": "此檔案似乎是壓縮的 GZip 檔案。\n\nSubtitle Edit 無法開啟壓縮檔案。", "errorLoadLargeFile": "此檔案太大,無法作為字幕檔開啟。", - "errorLoadVideoFilePrompt": "此檔案似乎是視訊檔案:\n{0}\n\n您可以經由「視訊 -> 開啟視訊」或將視訊拖曳至視訊播放器來開啟視訊。\n\n確定要將其作為視訊檔案開啟嗎?", + "errorLoadVideoFilePrompt": "此檔案似乎是視訊檔案:\n{0}\n\n您可以經由「視訊 -> 開啟視訊」或將視訊拖曳至視訊播放器來開啟視訊。\n\n確定要將其作為視訊檔案開啟嗎?", "errorLoadJpg": "此檔案似乎是 JPG圖像檔案。\n\nSubtitle Edit 無法開啟圖像檔案。", "errorLoadPng": "此檔案似乎是 PNG圖像檔案。\n\nSubtitle Edit 無法開啟圖像檔案。", "errorLoadRar": "此檔案似乎是 RAR壓縮檔案。\n\nSubtitle Edit 無法開啟壓縮檔案。", - "errorLoadRawPgsPrompt": "此檔案似乎是沒有 Blu-ray SUP「PG」標頭的原始 PGS 串流,因此不包含時間戳記。\n\n這通常發生在以「原始 (raw)」模式提取 Matroska PGS 軌道時。若要取得正確的時間軸,請以一般軌道模式重新匯出該軌道(例如執行「mkvextract tracks」時不要加上 --raw 參數),或直接在 Subtitle Edit 中開啟原件 Matroska 檔案。\n\n無論如何,您仍要匯入字幕圖像嗎(將使用必須手動修正的自動產生占位時間碼)?", + "errorLoadRawPgsPrompt": "此檔案似乎是缺少 Blu-ray SUP「PG」標頭的原始 PGS 串流,因此不包含時間戳記。\n\n這通常發生在 Matroska PGS 軌道在「原始 (raw)」模式被摘錄時。若要取得正確的時間軸,請以一般軌道模式重新摘錄該軌道(例如:缺少 --raw 的「mkvextract tracks」),或直接在 Subtitle Edit 中開啟原件 Matroska 檔案。\n\n不管怎樣您都想要匯入字幕圖像嗎(將使用必須手動修正的自動產生占位時間碼)?", "errorLoadSrr": "此檔案似乎是 ReScene SRR 檔案。\n\nSubtitle Edit 無法開啟 SRR 檔案。", "errorLoadTorrent": "此檔案似乎是 BitTorrent 種子檔案。\n\nSubtitle Edit 無法開啟種子檔案。", "errorLoadZip": "此檔案似乎是壓縮的 ZIP 檔案。\n\nSubtitle Edit 無法開啟壓縮檔案。", - "extractingWaveInfo": "正在提取音訊波形資訊...", - "extractingShotChanges": "正在提取場景變更線...", - "failedToExtractWaveInfo": "提取音訊波形資訊失敗。", + "extractingWaveInfo": "正在摘錄波形資訊...", + "extractingShotChanges": "正在摘錄場景變更線...", + "failedToExtractWaveInfo": "摘錄音訊波形資訊失敗。", "fixedRightToLeftUsingUnicodeControlCharactersX": "已在 {0} 行中利用 Unicode 控制字元修正 RTL", "generatingSpectrogramDotDotDot": "正在建立頻譜圖...", "generatingWaveformDotDotDot": "正在產生波形...", @@ -1164,7 +1213,7 @@ "insertUnicodeSymbol": "插入 Unicode 符號", "trimmedXLines": "已裁切 {0} 行字幕", "pastedXLinesOverSelectedLines": "已將 {0} 行貼上已選取行", - "pastedXOfYLinesOverSelectedLines": "已將 {1} 行中的 {0} 行貼上已選取行,剩下的超出選取範圍", + "pastedXOfYLinesOverSelectedLines": "已貼上 {1} 行中的 {0} 行在已選取行之上 - 剩下的超出選取範圍", "insertedXLinesFromClipboard": "已從剪貼簿插入 {0} 行", "openOriginalDifferentNumberOfSubtitlesXY": "原件字幕檔案的字幕數量與目前字幕檔案的字幕數量不同。\n\n• 原件字幕:{0}\n• 目前字幕:{1}", "originalTextReadOnly": "原件文字(唯讀)", @@ -1285,7 +1334,7 @@ "titleImportPlainText": "匯入純文字", "csvXlsxCustomColumnsDotDotDot": "帶有自訂列的 CSV/XLSX...", "titleImportCsvXlsxCustomColumns": "使用自訂列匯入 CSV/XLSX", - "detectedSeparatorX": "偵測到的分隔符號:{0}", + "detectedSeparatorX": "偵測到分隔符號:{0}", "csvXlsxFilterTitle": "CSV/XLSX/ODS", "separatorTab": "Tab 定位字元", "separatorSpace": "空格字元", @@ -1294,7 +1343,7 @@ "subtitleWithManuallyChosenEncodingDotDotDot": "字幕(手動所選編碼)(_S)...", "titleImportImages": "匯入圖像", "importFileLabel": "選擇要匯入的圖像(支援檔名中包含時間碼)", - "importFilesInfo": "使用內含時間碼的檔名:\nstart_HH_MM_SS_MMM__end_HH_MM_SS_MMM[_index].ext\n\n範例:\n0_00_01_042__0_00_03_919_0001.png\n0_00_01_042__0_00_03_919.png\n\n規則:\n• 起始與結尾時間使用 HH_MM_SS_MMM\n• 使用雙底線分隔 起點/終點\n• 結尾時間後選填索引", + "importFilesInfo": "使用內含時間碼的檔名:\nstart_HH_MM_SS_MMM__end_HH_MM_SS_MMM[_index].ext\n\n範例:\n0_00_01_042__0_00_03_919_0001.png\n0_00_01_042__0_00_03_919.png\n\n規則:\n• 起始與結尾時間使用 HH_MM_SS_MMM\n• 使用雙底線隔開 起點/終點\n• 結尾時間後選填索引", "formattingDotDotDot": "格式排版...", "imageBasedSubtitleForEditDotDotDot": "編輯基於圖像的字幕...", "imageBasedSubtitleForOcrDotDotDot": "OCR 基於圖像的字幕...", @@ -1318,7 +1367,7 @@ "oneLineIsOneSubtitle": "一行為一欄字幕", "twoLinesAreOneSubtitle": "兩行為一欄字幕", "importFilesDotDotDot": "匯入檔案...", - "multipleFiles": "從多個文字檔案匯入(一個檔案一份字幕)", + "multipleFiles": "從多項文字檔案匯入(一個檔案一份字幕)", "maxLineLength": "最大單行長度", "mergeShortLines": "合併短行", "fixed": "固定", @@ -1337,7 +1386,8 @@ "forcedAlignerIsolatingSpeech": "正在隔離語音... {0}", "forcedAlignerIsolatingSpeechFailed": "無法隔離語音 - 結尾時間已改為從閱覽時間設置。", "forcedAlignerModel": "對齊器模型", - "forcedAlignerDownloadEngine": "下載/更新引擎..." + "forcedAlignerDownloadEngine": "下載/更新引擎...", + "forcedAlignerEstimatedXOfY": "有 {0} / {1} 行未能對齊,已依閱覽時間配置 - 其時間碼僅為估算值。劇本可能比視訊中實際朗讀內容更長。" }, "export": { "exportImagesProfiles": "匯出圖像設定檔", @@ -1708,7 +1758,7 @@ "descriptionOptional": "說明(選填)", "invalidRegularExpressionX": "無效的正規表達式:{0}", "regularExpressionTooSlowX": "正規表達式在 {0} 秒後逾時 - 已略過此規則,請嘗試更簡單範本", -"moveToCategory": "移至分類" + "moveToCategory": "移至類別" }, "find": { "searchTextWatermark": "搜尋文字...", @@ -1813,7 +1863,7 @@ "fitReadingSpeed": "符合閱覽速度", "makeFormal": "更正式", "makeInformal": "更口語", - "askPlaceholder": "詢問關於此行的問題,或要求進行修改...", + "askPlaceholder": "詢問關於此行的問題,或要求進行變更...", "ask": "詢問", "result": "建議", "apply": "應用至此行", @@ -1970,7 +2020,7 @@ "changedDurationFromXToYCommentZ": "已將持續時間從 {0} 變更為 {1} {2}", "onlyPartialFixed": "(僅部分修正)", "unfixableX": "無法修復:{0}", - "fixedX": "已修復:{0}", + "fixedX": "已修正:{0}", "fixedXImprovedY": "修正項:{0},改進項:{1}", "noChangesNeeded": "無需變更" }, @@ -2006,8 +2056,8 @@ "batchFrameRateFixed": "使用固定影格率", "batchInfo": "若找到與字幕檔同名的視訊檔案,將從中讀取場景變更線資訊。", "useExactTimeCodes": "使用視訊的精確時間碼", - "extractTimeCodes": "提取時間碼", - "extractingTimeCodes": "正在提取時間碼...", + "extractTimeCodes": "摘錄時間碼", + "extractingTimeCodes": "正在摘錄時間碼...", "noTimeCodesLoaded": "未讀取到時間碼", "xTimeCodesLoaded": "已讀取 {0} 個時間碼", "timeCodesExtractFailed": "無法從視訊中讀取時間碼", @@ -2045,9 +2095,9 @@ "original": "原件", "aligned": "已對齊", "intro": "挑選對齊器並按下「對齊」,在音訊中聆聽每行字幕並上緊時間碼。", - "extractingAudio": "正在提取音訊...", + "extractingAudio": "正在摘錄音訊...", "aligningBatchXOfY": "正在對齊... 第 {0}/{1} 批次", - "extractAudioFailed": "無法使用 ffmpeg 提取音訊。", + "extractAudioFailed": "未能以 ffmpeg 摘錄音訊。", "modelWillBeDownloaded": "將會下載 {0}", "summaryXRetimedYKeptZSkipped": "重新對齊時間軸:{0} · 保留:{1} · 無語音:{2}", "meanShiftX": "平均偏移量:{0} 毫秒", @@ -2152,7 +2202,7 @@ "addUnderline": "增加下劃線", "addAlignment": "增加對齊方式", "addColor": "增加顏色", - "deleteLinesWithSpecificActorsOrStyles": "刪除特定角色或樣式的字幕行(多個項目請以逗號分隔)", + "deleteLinesWithSpecificActorsOrStyles": "刪除特定角色或樣式的字幕行(以逗號隔開多項)", "useSourceStylesIfPossible": "盡可能使用來源樣式(下方的標頭僅用於 非ASSA 輸入)", "keepSourceEmbeddedFonts": "保留來源內嵌字型(註腳)", "editStyles": "編輯樣式", @@ -2177,7 +2227,7 @@ "assaChangeStyleImportStyle": "匯入樣式...", "assaChangeStyleTrimUnusedStyles": "裁切未使用的樣式", "assaChangeStylePropertiesTitle": "變更樣式屬性", - "assaChangeStylePropertiesInfo": "變更檔案中每個樣式的所選欄槽,而不修改樣式本身。", + "assaChangeStylePropertiesInfo": "變更檔案中每個樣式的所選欄槽,不干涉樣式本身。", "assaChangeStylePropertiesSetSpacing": "設定間距至", "assaChangeStylePropertiesSetAlignment": "設定對齊方式至", "convertColorsToDialogTitle": "將顏色轉換為對話", @@ -2206,13 +2256,13 @@ "scanningFolderX": "正在掃描 {0}……", "transportStreamSettings": "傳輸串流設定", "transportStreamSettingsDotDotDot": "傳輸串流設定…", - "transportStreamSettingsInfo": "適用於從傳輸串流檔案(.ts/.m2ts)的已提取字幕軌道。位置和視訊尺寸僅會影響匯出為視訊格式的 DVB 圖像字幕軌道。", + "transportStreamSettingsInfo": "適用於從傳輸串流檔案(.ts/.m2ts)的已摘錄字幕軌道。位置和視訊尺寸僅會影響匯出為視訊格式的 DVB 圖像字幕軌道。", "transportStreamOverrideXPosition": "覆寫原件 X 座標", "transportStreamOverrideYPosition": "覆寫原件 Y 座標", "transportStreamOverrideVideoSize": "覆寫原件視訊尺寸", "transportStreamBottomMargin": "底部邊距", "transportStreamFileNameEnding": "檔案名稱結尾", - "transportStreamFileNameEndingInfo": "會新增在每個已提取軌道的副檔名之前。留空則使用常規語言後綴。", + "transportStreamFileNameEndingInfo": "新增在每個被摘錄軌道的副檔名之前。留空則使用正規語言後綴。", "transportStreamOnlyTeletext": "僅電傳視訊", "transportStreamGetSizeFromVideo": "從視訊取得尺寸…", "twoLetterLanguageCodeUppercase": "兩字母語言代碼(大寫)", @@ -2236,7 +2286,7 @@ "namesX": "名稱:{0:#,##0}", "hitsX": "符合項:{0:#,##0}", "extraNames": "額外名稱", - "enterExtraNamesHint": "輸入要修正的額外名稱,以逗號分隔", + "enterExtraNamesHint": "輸入要修正的額外名稱,以逗號隔開", "onlyFixUppercaseLines": "僅修正大寫行", "fixNamesOnly": "僅修正名稱", "allUppercase": "全部大寫", @@ -2244,9 +2294,9 @@ }, "changeFormatting": {}, "convertActors": { - "title": "轉換角色", + "title": "角色轉換", "convertActorFrom": "將角色從", - "convertActorTo": "變更角色為", + "convertActorTo": "角色轉換為", "inlineActorViaX": "經由 {0} 置入角色名", "setColor": "設置顏色", "onlyNames": "僅限名稱", @@ -2261,11 +2311,11 @@ }, "mergeTwoSubtitles": { "title": "合併兩份字幕", - "subtitle1": "字幕1", - "subtitle2": "字幕2", - "loadFromCurrentText": "從目前加載(文字)", - "loadFromCurrentTranslation": "從目前字幕載入(翻譯)", - "loadFromFile": "從檔案加載...", + "subtitle1": "字幕 1", + "subtitle2": "字幕 2", + "loadFromCurrentText": "從目前(文字)讀取", + "loadFromCurrentTranslation": "從目前(翻譯)讀取", + "loadFromFile": "從檔案讀取...", "outputFormat": "輸出格式", "outputFormatSubRip": "SubRip(.srt)", "outputFormatAssa": "ASSA(.ass)", @@ -2452,12 +2502,12 @@ "curlyBrackets": "花括號", "parentheses": "圓括號", "and": "和", - "onlySeparateLines": "僅獨立行", + "onlySeparateLines": "僅隔開行", "removeTextBeforeColon": "移除冒號前的文字", "onlyIfTextIsUppercase": "僅當文字為大寫時", - "onlyOnSeparateLine": "僅在獨立行時", + "onlyOnSeparateLine": "僅在隔開行", "ifLineIsUppercase": "若該行是大寫", - "keepUppercaseWords": "保留這些單字(用逗號分隔)", + "keepUppercaseWords": "保留這些單字(逗號隔開的)", "ifLineContains": "若該行包含", "ifLineOnlyContainsMusicSymbols": "若該行僅包含音樂符號", "removeInterjections": "移除感嘆詞", @@ -2678,9 +2728,9 @@ "customServerUrl": "自訂伺服器 URL", "customServerUrlHint": "相容 OpenAI 伺服器的完整語音端點,提供者為「自訂」時使用,例如 http://localhost:8880/v1/audio/speech", "customModels": "自訂模型", - "customModelsHint": "提供者為「自訂」時提供的模型名稱(以逗號分隔)", + "customModelsHint": "當提供者是「Custom」時,提供逗號隔開的模型名稱。", "customVoices": "自訂語音", - "customVoicesHint": "語音名稱(以逗號分隔),由「自訂」提供者以及未公布語音列表的 OpenRouter 模型使用", + "customVoicesHint": "逗號隔開的語音名稱,供「Custom」提供者以及未公布語音列表的 OpenRouter 模型使用", "instructions": "指令", "instructionsHint": "選填的說話風格,例如「以平靜、溫和聲音朗讀」。僅傳送給支援此功能的模型(不適用於 tts-1/tts-1-hd)", "openAiSpeedHint": "語音速度,範圍從 0.25 到 4.0(1.0 為正常)。非所有模型都支援", @@ -2715,12 +2765,12 @@ "voiceManagerMenuItem": "TTS 語音管理器...", "speakFromCurrentLineTitle": "從目前行朗讀", "speakFromCurrentLineDotDotDot": "從目前行朗讀...", - "speakFromCurrentLineHint": "開始於目前行,依序朗讀各行字幕。按 Esc 鍵或點擊其它行停止。", + "speakFromCurrentLineHint": "開始於目前行,依序朗讀各行字幕。\n按 Esc 鍵或點擊其它行停止。", "stopSpeaking": "停止朗讀", "speakingLineX": "正在朗讀第 {0} 行...(Esc 鍵停止)", "playWithSpeechTitle": "以朗讀播放", "playWithSpeechDotDotDot": "以朗讀播放...", - "playWithSpeechHint": "播放視訊並於到達各行時逐句朗讀字幕。暫停與照常跳轉;按 Esc 鍵即可停止。", + "playWithSpeechHint": "播放視訊並於到達各行時逐句朗讀字幕。\n照常來暫停及跳轉;按 Esc 鍵即可停止。", "lowerVideoVolumeWhileSpeaking": "朗讀時降低視訊音量", "pauseVideoWhenSpeechRunsLate": "朗讀超時影響至下一行時暫停視訊", "waitingForSpeechLineX": "正在產生第 {0} 行的語音...(Esc 鍵停止)", @@ -2788,6 +2838,12 @@ "advancedTtsSettings": "進階 TTS 設定", "advancedTtsAudioProcessing": "音訊處理", "advancedTtsOutput": "輸出", + "advancedTtsVoiceCloning": "正在仿造聲音", + "cleanCloneReferences": "清理「聲音仿造用參考音訊」(Sidon)", + "cleanCloneReferencesDescription": "從用於仿造語音的音訊中移除音樂、噪音與殘響:包含從視訊提取的片段以及匯入語音管理器的錄音。透過 audio.cpp 使用 Sidon 語音修復模型(需要下載 940 MB)。被仿造語音不再複製背景音,但極輕微或重疊的語音可能會變得含糊不清。", + "cleaningCloneReferencesDotDotDot": "進行清理「聲音仿造用參考音訊」...", + "downloadSidonTitle": "要下載 Sidon 嗎?", + "downloadSidonQuestionX": "進行清理「聲音仿造用參考音訊」需要 Sidon 語音修復模型 ({0})。\n\n要立即下載嗎?缺少它將照原樣使用參考音訊。", "proAudioPostProcessing": "專業音訊後處理", "proAudioPostProcessingDescription": "對每個片段應用 EQ 溫暖度、雜訊門、壓縮、響度標準化 (-16 LUFS) 和淡入/淡出。", "generatingSpeechSegmentXOfY": "正在生成語音:區段 {0} / {1}", @@ -2800,6 +2856,10 @@ "removeOriginalSpeechDescription": "保留原件視訊的音樂與音效並移除其語音,再將新的語音混音疊加於其上。使用 GPU 耗時大約與視訊同樣時長;而沒用 GPU 則耗時更長。開啟音訊閃避時,其音量適用於音樂與音效。僅於語音被新增至視訊檔案時適用。", "removingOriginalSpeech": "正在移除原件語音...", "removeOriginalSpeechFailed": "無法移除原件語音 - 該語音被新增至視訊中,但未移除原件語音。", + "speechRemovalModel": "模型", + "speechRemovalModelDescription": "「最佳品質」保留大部分音樂及音效。「快速」則約三倍快迅速,但會稍微多損失一些音樂。", + "speechRemovalBestQuality": "最佳品質(Mel-Band RoFormer)", + "speechRemovalFast": "快速(HTDemucs)", "videoTruncatedWarning": "新視訊檔案中的畫面在 {0} 後即停止,但原視訊長度為 {1} - 畫面將會凍結,而聲音繼續。\n\n檔案已保留。請參閱 Subtitle Edit 數據資料夾中的 error-log.txt 有關 ffmpeg 的輸出。", "originalVolumePercent": "原件音量百分比 %", "vadSilenceCompression": "VAD 靜音壓縮", @@ -2851,7 +2911,7 @@ "setupCastHint": "為每個角色 (ASSA) 或語音 (WebVTT) 指定 TTS 語音。", "actorVoicesRowSettingsTitle": "TTS - 語音設定", "voiceSettingsForX": "「{0}」的語音設定", - "voiceInstructionFreeTextHint": "引擎用於塑造語音語調的自訂文字。", + "voiceInstructionFreeTextHint": "引擎用於塑造語音語調的隨意文字。", "voiceDesign": "語音設計", "noActorsFoundMessage": "找不到任何角色。請先在字幕行設置角色欄槽。", "noWebVttVoicesFoundMessage": "在 WebVTT 檔案中找不到 語音。", @@ -2867,9 +2927,9 @@ "detectSpeakersTitle": "文本內的說話者名稱", "detectSpeakersFoundX": "找到 {0} 個說話者標籤(共 {1} 位說話者) - 被勾選名稱會成為角色,且不會被朗讀出聲", "detectSpeakersColumnUse": "使用", - "detectSpeakersSticky": "沒有名稱的行會沿用上一位說話者", - "subtitleUpdatedFromReviewSingular": "已根據校對語音更新 1 行字幕", - "subtitleUpdatedFromReviewPlural": "已根據校對語音更新 {0} 行字幕", + "detectSpeakersSticky": "缺少名稱的字幕行延續前一位說話者", + "subtitleUpdatedFromReviewSingular": "根據校對語音更新 1 行字幕", + "subtitleUpdatedFromReviewPlural": "根據校對語音更新 {0} 行字幕", "subtitleMergedLinesAppliedSingular": "已應用 1 行文字轉語音的字幕行合併", "subtitleMergedLinesAppliedPlural": "已應用 {0} 行文字轉語音的字幕行合併" }, @@ -2943,7 +3003,7 @@ "minDurationMs": "最小持續時間(毫秒)", "addAssaPositionTag": "新增 ASSA 位置標籤 (例如 {\\an8})", "startOcr": "開始 OCR", - "extractingFramesX": "正在提取圖像影格... {0}%", + "extractingFramesX": "正在摘錄圖像影格... {0}%", "analyzingFramesXY": "正在分析影格... {0}/{1}", "runningOcrXY": "正在執行 OCR... {0}/{1}", "noLinesFoundTitle": "未找到字幕", @@ -3034,7 +3094,7 @@ "editSecondarySubtitleSettingsDotDotDot": "編輯第二份字幕設定...", "secondarySubtitleRememberSettings": "記住這些設定", "secondarySubtitleDoNotShowAgain": "請勿再顯示此對話", - "secondarySubtitleJustifyLines": "行左右對齊", + "secondarySubtitleJustifyLines": "行對齊", "openRecentVideo": "開啟近期視訊", "clearRecentVideos": "清除近期視訊", "cutVideoTitle": "剪輯視訊", @@ -3042,7 +3102,7 @@ "remuxVideoTitle": "重新封裝視訊", "remuxVideoDotDotDot": "重新封裝視訊…", "remuxVideoInputVideo": "輸入視訊:", - "remuxVideoMultipleTracksRequiresMkv": "多個音訊或字幕軌道需要使用 MKV 容器。輸出格式已自動切換為 .mkv。", + "remuxVideoMultipleTracksRequiresMkv": "多項音訊或字幕軌道需要使用 MKV 容器。輸出格式已自動切換為 .mkv。", "remuxVideoOutputFormat": "輸出格式:", "remuxVideoOutputFile": "輸出檔案:", "remuxVideoRemuxing": "正在重新封裝視訊和音訊…", @@ -3080,34 +3140,34 @@ "cutVideoSplitSegments": "分別儲存各區段", "cutVideoAlsoCutSubtitle": "同時剪輯字幕", "cutVideoSubtitleFileGeneratedX": "已產生的字幕檔:{0}", - "cutVideoTransition": "區段之間的轉場", - "cutVideoTransitionDurationSeconds": "持續時間(秒)", - "cutVideoFadeInSeconds": "起頭從黑畫面淡入(秒)", - "cutVideoFadeOutSeconds": "結尾淡出至黑畫面(秒)", - "cutVideoPreviewTransition": "預覽轉場", - "cutVideoPreviewTransitionTitle": "轉場預覽", - "cutVideoPreviewNeedsJoin": "無可預覽的拼接處 - 請至少新增兩個要合併的區段,或從區段中間剪除。", - "cutVideoTransitionInfoX": "每個轉場都會重疊部分拼接處,因此每次拼接會使輸出時間縮短 {0} 秒。剪輯字幕會重新對齊時間軸以相符。", - "cutVideoTransitionFade": "淡化", - "cutVideoTransitionFadeBlack": "淡化入黑而出", - "cutVideoTransitionFadeWhite": "淡化入白而出", - "cutVideoTransitionFadeGrays": "淡化入灰而出", - "cutVideoTransitionDissolve": "交叉溶解", - "cutVideoTransitionWipeLeft": "向左劃過", - "cutVideoTransitionWipeRight": "向右劃過", - "cutVideoTransitionWipeUp": "向上劃過", - "cutVideoTransitionWipeDown": "向下劃過", - "cutVideoTransitionSlideLeft": "向左滑", - "cutVideoTransitionSlideRight": "向右滑", - "cutVideoTransitionSlideUp": "向上滑", - "cutVideoTransitionSlideDown": "向下滑", - "cutVideoTransitionSmoothLeft": "向左滑動", - "cutVideoTransitionSmoothRight": "向右滑動", - "cutVideoTransitionCircleOpen": "圓形展開", - "cutVideoTransitionCircleClose": "圓形收合", - "cutVideoTransitionRadial": "輻射化", - "cutVideoTransitionPixelize": "像素化", - "cutVideoTransitionBlur": "模糊化", + "cutVideoTransition": "區段之間的轉場", + "cutVideoTransitionDurationSeconds": "持續時間(秒)", + "cutVideoFadeInSeconds": "起頭從黑畫面淡入(秒)", + "cutVideoFadeOutSeconds": "結尾淡出至黑畫面(秒)", + "cutVideoPreviewTransition": "預覽轉場", + "cutVideoPreviewTransitionTitle": "轉場預覽", + "cutVideoPreviewNeedsJoin": "無可預覽的拼接處 - 請至少新增兩個要合併的區段,或從區段中間剪除。", + "cutVideoTransitionInfoX": "每個轉場都會重疊部分拼接處,因此每次拼接會使輸出時間縮短 {0} 秒。剪輯字幕會重新對齊時間軸以相符。", + "cutVideoTransitionFade": "淡化", + "cutVideoTransitionFadeBlack": "淡化入黑而出", + "cutVideoTransitionFadeWhite": "淡化入白而出", + "cutVideoTransitionFadeGrays": "淡化入灰而出", + "cutVideoTransitionDissolve": "交叉溶解", + "cutVideoTransitionWipeLeft": "向左劃過", + "cutVideoTransitionWipeRight": "向右劃過", + "cutVideoTransitionWipeUp": "向上劃過", + "cutVideoTransitionWipeDown": "向下劃過", + "cutVideoTransitionSlideLeft": "向左滑", + "cutVideoTransitionSlideRight": "向右滑", + "cutVideoTransitionSlideUp": "向上滑", + "cutVideoTransitionSlideDown": "向下滑", + "cutVideoTransitionSmoothLeft": "向左滑動", + "cutVideoTransitionSmoothRight": "向右滑動", + "cutVideoTransitionCircleOpen": "圓形展開", + "cutVideoTransitionCircleClose": "圓形收合", + "cutVideoTransitionRadial": "輻射化", + "cutVideoTransitionPixelize": "像素化", + "cutVideoTransitionBlur": "模糊化", "importCurrentSubtitle": "匯入目前字幕", "addRemoveEmbeddedSubtitlesTitle": "新增/移除內嵌字幕", "addRemoveEmbeddedSubtitlesMp4Title": "新增/移除內嵌字幕(MP4)", @@ -3119,7 +3179,7 @@ "embeddedTrackUnableToGenerateTitle": "未能產生視訊", "embeddedTrackUnableToGenerateMessage": "未產生輸出視訊檔:{0}{1}參數:{2}", "embeddedTrackPreviewUnavailableTitle": "預覽不可用", - "embeddedTrackPreviewUnavailableMessage": "無法提取已選取字幕串流。該編碼可能不是 ffmpeg 能轉換為 SRT 的文字格式(例如:基於點陣圖字幕)。", + "embeddedTrackPreviewUnavailableMessage": "未能摘錄已選取字幕串流。該編碼可能不是 ffmpeg 能轉換為 SRT 的文字格式(例如:基於點陣圖字幕)。", "embeddedTrackGeneratingVideoXY": "正在產生視訊... {0}% {1}", "embeddedTrackGeneratingVideo": "正在產生視訊...", "mp4FilesFilter": "MP4 檔案", @@ -3197,12 +3257,12 @@ "maxSilenceVolume": "最大靜音音量(0.0 - 1.0):", "guessTimeCodesDotDotDot": "猜測時間碼...", "seekSilenceDotDotDot": "定位靜音處...", - "extractAudioDotDotDot": "提取音訊...", + "extractAudioDotDotDot": "摘錄音訊...", "cloneVoiceTo": "將語音仿造至", "cloneVoiceNameTitle": "新語音名稱", - "cloneVoiceExtractFailed": "無法提取已選取行的音訊。", - "lineXHasNoDuration": "第 {0} 列沒有持續時間(結尾時間尚未晚於起頭時間),因此無法提取音訊。", - "audioClipsSkippedLinesX": "無法提取這些列的音訊,因此已略過:{0}", + "cloneVoiceExtractFailed": "未能摘錄已選取行的音訊。", + "lineXHasNoDuration": "第 {0} 列沒有持續時間(結尾時間尚未晚於起頭時間),因此無法摘錄音訊。", + "audioClipsSkippedLinesX": "這些行無音訊可被摘錄,所以被略過:{0}", "toggleShotChange": "標記場景變更線", "resetWaveformZoomAndSpeed": "重置波形縮放&速度", "showOriginalSubtitle": "顯示原件字幕", @@ -3263,9 +3323,9 @@ "showEarlierLaterDotDotDot": "提早/延後顯示..." }, "translate": { - "translateViaCopyPaste": "經由複製/貼上進行自動翻譯", + "translateViaCopyPaste": "經由複製/貼上自動翻譯", "maxBlockSize": "最大區塊大小", - "lineSeparator": "換行分隔符", + "lineSeparator": "行分隔符號", "blockCopyInfo": "跳至翻譯工具或 AI 並貼上文字(已在剪貼簿中),並將翻譯結果複製回剪貼簿,最後點擊下方按鈕。", "blockCopyGetFromClipboard": "從剪貼簿取得文字(來自翻譯工具/AI)", "reCopyTextToClipboard": "再次複製文字至剪貼簿(供翻譯工具/AI 使用)", @@ -3278,7 +3338,7 @@ "keepMusicLinesUntranslated": "請勿翻譯音樂符號的行 (♪ ... ♪)", "promptText": "提示詞文字", "resetPromptToDefault": "重置提示詞為預設值", - "translateEachLineSeparately": "逐行分開翻譯", + "translateEachLineSeparately": "請逐行分開翻譯", "translationError": "翻譯錯誤", "translationFailedMessage": "{0} 翻譯失敗。", "translationFailedHint": "這可能是由於網路問題、無效的 API 金鑰或 API 使用量限制所致。\n請檢查您的網路連線與 API 設定,而後再試一次。", @@ -3354,16 +3414,16 @@ "searchSettingsDotDotDot": "搜尋設定...", "network": "網路", "fileTypeAssociations": "檔案類型關聯", - "textBoxColorTags": "字幕文字框內顏色標籤 (HTML/ASSA)", - "textBoxLiveSpellCheck": "字幕文字框內即時拼字檢查", - "textBoxCenterText": "字幕文字框內文本置中", - "textBoxFontBold": "字幕文字框內文字加粗", - "textBoxFontSize": "字幕文字框內字型大小", - "subtitleTextBoxAndGridFontName": "字幕文字框與網格內的介面字型", + "textBoxColorTags": "字幕打字框內顏色標籤 (HTML/ASSA)", + "textBoxLiveSpellCheck": "字幕打字框內即時拼字檢查", + "textBoxCenterText": "字幕打字框內文本置中", + "textBoxFontBold": "字幕打字框內文字加粗", + "textBoxFontSize": "字幕打字框內字型大小", + "subtitleTextBoxAndGridFontName": "字幕打字框與網格內的介面字型", "subtitleGridFontSize": "字幕網格內字型大小", "subtitleGridTextSingleLine": "網格內字幕文字以單行顯示", "subtitleGridTextSingleLineSeparator": "單行分隔符號 (例如
)", - "subtitleGridTextDisplay": "網格內字幕文字合適", + "subtitleGridTextDisplay": "字幕文字容納網格內", "subtitleGridTextDisplayClip": "片段 (單行)", "subtitleGridTextDisplayWrap": "自動換行以符合視窗", "subtitleGridTextDisplayEllipsis": "單行並顯示刪節號", @@ -3427,7 +3487,7 @@ "settingsBackupOn": "自動備份設定", "settingsBackupIntervalDays": "設定備份間隔(天,0 = 每次啟動)", "settingsBackupMaxCount": "保留的設定備份數量", - "autoConvertToUtf8": "開啟時自動將編碼轉換為 UTF-8", + "autoConvertToUtf8": "開啟後編碼自動轉換至 UTF-8", "autoTrimWhiteSpace": "自動修剪空白字元", "removeBlankLinesWhenOpening": "開啟字幕時移除空白行", "defaultEncoding": "預設編碼", @@ -3451,7 +3511,7 @@ "waveformShowToolbarEdit": "編輯工具列...", "waveformShowToolbarEditLabel": "工具列項目", "waveformSpectrogramCombinedWaveformHeight": "波形/頻譜圖雙拼,波形高度 %", - "waveformFocusTextboxAfterInsertNew": "插入之後聚焦文字框", + "waveformFocusTextboxAfterInsertNew": "插入之後聚焦打字框", "waveformInvertMouseWheel": "反轉滑鼠滾輪方向", "waveformMouseWheelSetsVideoPosition": "滑鼠滾輪用於調整視訊位置", "waveformMouseWheelVideoPositionStep": "滑鼠滾輪視訊位置調整步進值", @@ -3481,7 +3541,7 @@ "proxyDomain": "網域", "proxyUseSystemCredentials": "使用系統憑證", "proxyBypassList": "繞過代理伺服器", - "proxyBypassListHint": "直接連線的主機名稱,以分號區隔,例如「internal.company.com;example.org」", + "proxyBypassListHint": "直接連線由分號隔開的主機名稱,例如「internal.company.com;example.org」", "updates": "更新", "checkForUpdatesOnStartup": "應用程式啟動時檢查是否有更新", "checkForUpdatesChannel": "通知版本", @@ -3505,8 +3565,8 @@ "autoOpenVideoFile": "開啟字幕時自動開啟視訊檔案", "downloadMpv": "下載MPV", "downloadVlc": "下載VLC", - "allowSingleLetterShortcutsInTextbox": "在文字框中允許單一字母快捷鍵", - "allowTextNavigationShortcutsInTextbox": "允許在文字框中使用文字導航鍵的快捷鍵(Ctrl+左/右、Home/End)", + "allowSingleLetterShortcutsInTextbox": "在打字框中允許單一字母快捷鍵", + "allowTextNavigationShortcutsInTextbox": "允許在打字框中使用文字導航鍵的快捷鍵(Ctrl+左/右、Home/End)", "spellCheckEnglishTreatInApostropheAsIng": "拼字檢查:將以 'in'' 結尾的單字視為 'ing'(僅限英文)", "goToLineNumberSetsVideoPosition": "移至行號時也設置視訊位置", "adjustAllTimesRememberLineSelectionChoice": "調整所有時間,並記住行選取範圍的選擇", @@ -3552,10 +3612,12 @@ "timeCodeMode": "時間碼模式", "timeCodeModeTime": "時間 (hh:mm:ss,zzz)", "timeCodeModeFrames": "影格 (hh:mm:ss:ff)", - "timeCodeModeFrameNumbers": "影格編號", - "textBoxLimitNewLines": "限制字幕文字框中的行數", + "timeCodeModeFrameNumbers": "影格數", + "frameModeSnapToVideoFrames": "將時間儲存於視訊影格上(而非每秒內的影格)", + "textBoxLimitNewLines": "限制字幕打字框中的行數", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - 軟體彩現(慢)", + "mpvMetalRendering": "libmpv - Metal (實驗性,需重新啟動)", "mpvWidRendering": "libmpv - 原始 視窗ID 彩現", "waveFormsAndSpectrogramFoldersContainsX": "波形「Waveforms」與頻譜圖「spectrogram」資料夾內含量 {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "要刪除「Waveforms」與「Spectrogram」內檔案嗎?", @@ -3564,10 +3626,10 @@ "waveformSpectrogramMode": "頻譜圖模式", "waveformRightClickSelectsSubtitle": "右鍵點擊來選取字幕", "waveformDrawStyle": "波形繪製樣式", - "waveformExtractAudioFormat": "提取音訊格式", - "waveformExtractAudioSampleRate": "提取音訊取樣率", + "waveformExtractAudioFormat": "摘錄音訊格式", + "waveformExtractAudioSampleRate": "摘錄音訊取樣率", "waveformExtractAudioSampleRateOriginal": "原件(保持來源)", - "waveformExtractAudioBitRate": "提取音訊位元率(MP3/M4A)", + "waveformExtractAudioBitRate": "摘錄音訊位元率(MP3/M4A)", "ffmpegUseCenterChannelOnly": "5.1 音訊僅使用前置中央聲道(FFmpeg)", "vlcWidRendering": "libVLC - 原始 視窗ID 彩現", "ffmpegSoftwareRendering": "FFmpeg", @@ -3589,8 +3651,8 @@ "gridGoToSubtitleOnlyWaveformOnly": "僅跳至字幕(僅波形)", "gridGoToSubtitleAndPause": "跳至字幕並暫停", "gridGoToSubtitleAndPlay": "跳至字幕並播放", - "gridGoToSubtitleAndPauseAndFocusTextBox": "跳至字幕、暫停和聚焦文字框", - "gridGoToSubtitleAndPlayAndFocusTextBox": "跳至字幕播放並聚焦文字框", + "gridGoToSubtitleAndPauseAndFocusTextBox": "跳至字幕、暫停和聚焦打字框", + "gridGoToSubtitleAndPlayAndFocusTextBox": "跳至字幕播放並聚焦打字框", "subtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "跳至視訊位置、播放目前字幕之後暫停", "subtitleListActionVideoGoToPositionMinus1SecAndPause": "跳至視訊位置 - 1秒 並暫停", "subtitleListActionVideoGoToPositionMinusHalfSecAndPause": "跳至視訊位置 - 0.5秒 並暫停", @@ -3619,10 +3681,10 @@ "fixShortDisplayTimesAllowMoveStartTime": "修正常見錯誤:修正過短的顯示時間可能會移動起頭時間", "speechToTextSelectedLinesPromptFirstTimeOnly": "語音轉文字:已選取行,僅第一次詢問語言/引擎", "multipleReplaceShowDotDotDotButtons": "多重取代:顯示快顯功能表按鈕", - "gridFocusTextboxAfterInsertNew": "網格:插入新字幕之後聚焦文字框", + "gridFocusTextboxAfterInsertNew": "網格:插入新字幕之後聚焦打字框", "undoRedoGoToChangedLine": "復原/重做:跳至已變更行(及視訊位置)", "musicSymbol": "音樂符號", - "musicSymbolsToReplace": "要取代的音樂符號(以逗號分隔)", + "musicSymbolsToReplace": "要取代的音樂符號(以逗號隔開)", "textToSpeechPromptMergeContinuationLines": "文字轉語音:合併續接行的提示詞", "textToSpeechPromptSkipNoiseLines": "文字轉語音:略過音效/音樂行列的提示詞", "textToSpeechPromptDetectSpeakers": "文字轉語音:偵測內文中說話者名稱的提示詞", @@ -3631,12 +3693,12 @@ "forceCrLfOnSave": "儲存時強制 CR+LF(文字字幕檔案)", "linuxClipboardUseExternalTool": "經由 xclip/wl-copy 複製文字(可保留變音符號字元)", "showFormatLimitWarning": "儲存時,若行數超過格式限制則顯示警告(例:SCC 32 字元/行)", - "textBoxButtonShowAutoBreak": "文字框:顯示自動斷行按鈕", - "textBoxButtonShowUnbreak": "文字框:顯示取消斷行按鈕", - "textBoxButtonShowItalic": "文字框:顯示斜體按鈕", - "textBoxButtonShowColor": "文字框:顯示顏色按鈕", - "textBoxButtonShowRemoveFormatting": "文字框:顯示移除格式排版按鈕", - "textBoxButtonShowAiAssistant": "文字框:顯示 AI 助理按鈕", + "textBoxButtonShowAutoBreak": "打字框:顯示自動斷行按鈕", + "textBoxButtonShowUnbreak": "打字框:顯示取消斷行按鈕", + "textBoxButtonShowItalic": "打字框:顯示斜體按鈕", + "textBoxButtonShowColor": "打字框:顯示顏色按鈕", + "textBoxButtonShowRemoveFormatting": "打字框:顯示移除格式排版按鈕", + "textBoxButtonShowAiAssistant": "打字框:顯示 AI 助理按鈕", "waveformSingleClickAction": "波形 單擊操作", "waveformDoubleClickAction": "波形 雙擊操作(單擊操作後)", "allSettings": "所有設定", @@ -3648,7 +3710,11 @@ "subtitlePreviewProperties": "字幕預覽屬性", "usePositionFromSubtitleFile": "使用字幕檔案中的位置(TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "外邊距屬於字幕區域的一部分", - "textJustify": "行左右對齊", + "textJustify": "行對齊", + "deinterlace": "視訊去交錯", + "deinterlaceOff": "關閉", + "deinterlaceAuto": "自動(僅限交錯影格)", + "deinterlaceAlways": "總是", "pixelWidthInfo": "綠線 = 最大寬度限制 | 紅區 = 文字超出限制", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "微軟Word", @@ -3670,16 +3736,16 @@ }, "shortcuts": { "searchShortcuts": "搜尋快捷鍵...", - "categorySubtitleGridAndTextBox": "字幕列表視圖 & 文字框", + "categorySubtitleGridAndTextBox": "字幕列表視圖 & 打字框", "categorySubtitleGrid": "字幕列表視圖", - "categoryTextBox": "文字框", + "categoryTextBox": "打字框", "categoryFile": "檔案", "categoryVideo": "視訊", "categorySync": "同步", "categoryAi": "AI", "categoryCustom": "自訂", "editCustomShortcut": "編輯自訂快捷鍵", - "customShortcutTextBoxKeyHint": "此處請搭配 Ctrl 或 Alt 鍵使用 - 使用普通單鍵將不能夠在文字框中輸入。", + "customShortcutTextBoxKeyHint": "搭配 Ctrl/Alt 使用按鍵 - 普通單鍵將不能夠在打字框中輸入。", "customShortcutNumberX": "自訂快捷鍵 #{0}", "customShortcutNumberXY": "自訂快捷鍵 #{0}:{1}", "customShortcutStep": "步驟", @@ -3758,7 +3824,7 @@ "resetShortcutsDetail": "確定要將所有快捷鍵重置為預設值嗎?", "togglePlayPause": "切換 播放/暫停", "toggleLockTimeCodes": "切換鎖定時間碼", - "toggleTimeCodeMode": "切換時間碼模式(時間/影格/影格編號)", + "toggleTimeCodeMode": "切換時間碼模式(時間/影格/影格數)", "toggleScreenPrivacy": "切換隱私畫面(隱藏檔案名稱,接著還有文字)", "screenPrivacyFileNamesHidden": "隱私畫面:已隱藏檔案名稱", "screenPrivacyFileNamesAndTextsHidden": "隱私畫面:已隱藏檔案名稱及文字", @@ -3785,22 +3851,22 @@ "breakAtFirstSpaceFromCursor": "從游標位置的第一個空格處斷行", "breakAtFirstSpaceFromCursorAndGoToNext": "從游標位置的第一個空格處斷行並前往下一個", "toggleFocusGridAndWaveform": "切換聚焦(字幕網格、波形/頻譜圖)", - "toggleFocusTextBoxAndWaveform": "切換聚焦(文字框、波形/頻譜圖)", - "toggleFocusTextBoxAndGrid": "切換聚焦(文字框、字幕網格)", + "toggleFocusTextBoxAndWaveform": "切換聚焦(打字框、波形/頻譜圖)", + "toggleFocusTextBoxAndGrid": "切換聚焦(打字框、字幕網格)", "goToPreviousLineAndSetVideoPosition": "跳至上一則字幕並設置視訊位置", "goToPreviousLineFromVideoPosition": "跳至上一則字幕(從目前視訊位置)", "goToNextLineFromVideoPosition": "跳至下一則字幕(從目前視訊位置)", "videoGoToPreviousTimeCode": "跳至上一個時間碼", "videoGoToNextTimeCode": "跳至下一個時間碼", "goToNextLineAndSetVideoPosition": "跳至下一則字幕並設置視訊位置", - "textBoxDeleteForward": "文字框:刪除選取範圍或下一個字元(往後刪除)", - "textBoxCut": "文字框:剪下", - "textBoxCut2": "文字框:剪下(備選)", - "textBoxPaste": "文字框:貼上", - "textBoxPaste2": "文字框:貼上(備選)", - "textBoxCopy": "文字框:複製", - "textBoxCopy2": "文字框:複製(備選)", - "textBoxSelectAll": "文字框:全選", + "textBoxDeleteForward": "打字框:刪除選取範圍或下一個字元(往後刪除)", + "textBoxCut": "打字框:剪下", + "textBoxCut2": "打字框:剪下(備選)", + "textBoxPaste": "打字框:貼上", + "textBoxPaste2": "打字框:貼上(備選)", + "textBoxCopy": "打字框:複製", + "textBoxCopy2": "打字框:複製(備選)", + "textBoxSelectAll": "打字框:全選", "subtitleGridCut": "字幕網格:剪下", "subtitleGridCopy": "字幕網格:複製", "subtitleGridPaste": "字幕網格:貼上", @@ -3862,11 +3928,11 @@ "videoFullScreen": "視訊全螢幕", "copyTextFromOriginalSelectedLines": "從原件複製文字(已選取行)", "copyTextToOriginalSelectedLines": "將文本複製至原件(已選取行)", - "textBoxRemoveAllFormatting": "文字框:移除所有格式排版", - "textBoxItalic": "文字框:斜體", - "textBoxBold": "文字框:粗體", - "textBoxUnderline": "文字框:底線", - "textBoxBox": "文字框區塊(EBU STL)", + "textBoxRemoveAllFormatting": "打字框:移除所有格式排版", + "textBoxItalic": "打字框:斜體", + "textBoxBold": "打字框:粗體", + "textBoxUnderline": "打字框:底線", + "textBoxBox": "打字框區塊(EBU STL)", "resetWaveformZoomAndSpeed": "重置波形縮放和重播速度(播放速率)", "togglePlaybackSpeed": "切換重播速度(播放速率)", "playbackSpeedSlower": "重播速度較慢(播放速率)", @@ -3926,12 +3992,12 @@ "waveformVerticalZoomOutCommand": "波形垂直縮小", "copySubtitlePathToClipboard": "複製字幕路徑至剪貼簿", "copySubtitleOriginalPathToClipboard": "複製原件字幕路徑至剪貼簿", - "focusTextBox": "聚焦文字框", + "focusTextBox": "聚焦打字框", "focusSubtitleListView": "聚焦字幕列表檢視", "focusWaveform": "聚焦波形", - "focusOriginalTextBox": "聚焦原件文字框", - "textBoxGoToStart": "文字框:跳至起點", - "textBoxGoToEnd": "文字框:跳至終點", + "focusOriginalTextBox": "聚焦原件打字框", + "textBoxGoToStart": "打字框:跳至起點", + "textBoxGoToEnd": "打字框:跳至終點", "sortByNumber": "依編號排序", "sortByStartTime": "依「演出」時間排序", "sortByEndTime": "依「隱藏」時間排序", @@ -3964,10 +4030,10 @@ "layoutZoomIn": "放大佈局(縮放 UI)", "layoutZoomOut": "縮小佈局(縮放 UI)", "goToPreviousBookmark": "跳至上一個書籤", - "selectionToLower": "文字框:選取範圍改小寫", - "selectionToUpper": "文字框:選取範圍改大寫", - "selectionToSentenceCase": "文字框:將選取範圍改句首大寫", - "selectionToggleCasing": "文字框:切換大小寫(大寫 -> 小寫 -> 標題大寫)", + "selectionToLower": "打字框:選取範圍改成小寫", + "selectionToUpper": "打字框:選取範圍改成大寫", + "selectionToSentenceCase": "打字框:選取範圍改成句首大寫", + "selectionToggleCasing": "打字框:切換大小寫(大寫 -> 小寫 -> 標題大寫)", "googleIt": "Google 搜尋(已選取文字)", "setActorX": "設置角色 {0}", "setNewActor": "設置新角色...", @@ -4199,11 +4265,28 @@ "crispEmbedReturnedNoText": "CrispEmbed 無文字回傳 - 請檢查模型", "appleVisionReturnedNoText": "Apple Vision 無文字回傳 - 請檢查語言", "crispEmbedSettingsTitle": "CrispEmbed 設置", - "crispEmbedDescription": "具備多種模型後端的本機 OCR 引擎 - 可在此下載引擎與模型。", + "crispEmbedDescription": "具備多項模型後端的本機 OCR 引擎 - 可在此下載引擎與模型。", "trainNOcrDatabase": "訓練 nOCR 資料庫...", + "optimizeNOcrDatabase": "最佳化 nOCR 資料庫...", + "optimizeNOcrDatabaseQuestionXY": "要移除 nOCR 資料庫「{0}」中無法將字元與相似字元區分開來的行嗎?\n\n這會讓資料庫更小及 OCR 速度更快,通常也能減少錯誤。大約需要一分鐘。\n\n備份將儲存為「{1}」。", + "optimizingNOcrDatabaseXY": "正在最佳化 nOCR 資料庫... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "nOCR 資料庫「{0}」已最佳化:{1:#,##0} -> {2:#,##0} 行。", "startTraining": "開始訓練", "abortTraining": "中止訓練", "trainingOptions": "訓練選項", + "trainNOcrSubtitle": "使用已安裝的字型繪製字元,並教導 nOCR 辨識其圖形。請挑選您字幕所使用字型。", + "xFontsSelected": "已選取 {0:#,##0} 個", + "subtitleFonts": "字幕字型", + "emptyDatabase": "空白資料庫", + "startFromDatabase": "開始從", + "startFromDatabaseHint": "將訓練的字元新增至現有資料庫的複本(建議)或從空白資料庫開始", + "fontSizes": "字型大小", + "fontSizesHint": "要用於繪製的字型大小(像素),以逗號隔開,例如「30, 40」", + "numberOfLineSegmentsHint": "依字元檢查的行數 - 數值越高越嚴格但速度較慢", + "enterDatabaseName": "輸入資料庫名稱", + "trainingFontXSizeYCharacterZ": "正在以 {1} 像素訓練「{0}」:{2}", + "xLearned": "已學習 {0:#,##0} 個", + "xSkipped": "已略過 {0:#,##0} 個", "charactersToTrain": "要訓練的字元", "letterCombinationsToTrain": "可能被分割成單一圖像的雙聯字母", "importCharactersFromSubtitleFile": "從字幕檔匯入字元...", @@ -4219,7 +4302,7 @@ "drawSelectTool": "選取(移動點)", "drawUseShapeForErase": "使用形狀進行擦除(iclip)", "drawLineTool": "直線工具 (F4)", - "drawBezierTool": "貝塞爾曲線 (F5)", + "drawBezierTool": "貝茲曲線 (F5)", "drawRectangleTool": "矩形 (F6)", "drawCircleTool": "圓形", "drawCloseShape": "閉合形狀(F8/Enter)", @@ -4230,6 +4313,8 @@ "drawZoomOut": "縮小 (Ctrl+-)", "drawResetView": "重置視圖 (Ctrl+0)", "drawToggleGrid": "切換網格 (Ctrl+G)", + "drawTogglePreview": "切換預覽 (F9)", + "drawPreviewFailed": "預覽失敗 - 需要使用帶有 libass(字幕濾鏡)的 ffmpeg。", "drawCopyToClipboard": "剪貼簿", "drawShapes": "形狀", "drawSelectedPoint": "已選取點", @@ -4237,6 +4322,81 @@ "drawSelectedLayer": "已選取圖層", "drawToolX": "工具:{0}", "drawHelpText": "點擊以新增控制點 • Enter/F8 閉合形狀 • Shift+拖曳 以平移 • Ctrl+滾輪 以縮放", + "drawMoveToLayer": "移至圖層", + "drawFlipHorizontal": "水平翻轉", + "drawFlipVertical": "垂直翻轉", + "drawHideShape": "隱藏圖形", + "drawShowShape": "顯示圖形", + "drawHideLayer": "隱藏圖層", + "drawShowLayer": "顯示圖層", + "drawDeleteLayer": "刪除圖層", + "drawDeletePoint": "刪除點", + "drawCancelDrawing": "取消繪製", + "drawLayerX": "圖層 {0}", + "drawImportSvg": "匯入 SVG 影像...", + "drawRotateClockwise": "順時針旋轉 90°", + "drawConvertToCurve": "將線段轉換為曲線", + "drawBackground": "背景", + "drawPosition": "位置", + "drawZoom": "縮放", + "drawShapeTool": "圖形工具", + "drawColorPickerTool": "從圖形或背景挑選顏色", + "drawShapeLibrary": "圖形庫", + "drawShapeLibraryHint": "在畫布上拖曳以放置圖形,或點擊以使用預設大小。按住 Shift 鍵可維持比例。", + "drawAddToLibrary": "新增至圖形庫...", + "drawRemoveFromLibrary": "從圖形庫移除", + "drawShapeName": "圖形名稱", + "drawCategorySpeechBubbles": "對話泡泡", + "drawCategoryArrows": "箭頭", + "drawCategoryBasicShapes": "基本形狀", + "drawCategorySymbols": "符號", + "drawCategoryMyShapes": "我的形狀", + "drawShapeSpeechBubble": "對話泡泡", + "drawShapeSpeechBubbleRight": "對話泡泡(尾巴向右)", + "drawShapeSpeechBubbleUp": "對話泡泡(尾巴向上)", + "drawShapeOvalBubble": "橢圓對話泡泡", + "drawShapeBoxBubble": "方框對話泡泡", + "drawShapeThoughtBubble": "想法泡泡", + "drawShapeShoutBubble": "吶喊泡泡", + "drawShapeCaptionBox": "說明框", + "drawShapeArrow": "箭頭", + "drawShapeDoubleArrow": "雙向箭頭", + "drawShapeChevron": "V字形", + "drawShapeCurvedArrow": "彎曲箭頭", + "drawShapeRoundedRectangle": "圓角矩形", + "drawShapeTriangle": "三角形", + "drawShapeDiamond": "菱形", + "drawShapePentagon": "五邊形", + "drawShapeHexagon": "六邊形", + "drawShapeOctagon": "八邊形", + "drawShapeStar": "星形", + "drawShapeRing": "環形", + "drawShapePlus": "加號", + "drawShapeBanner": "橫幅", + "drawShapeHeart": "愛心", + "drawShapeCheck": "打勾符號", + "drawShapeMusicNote": "音符", + "drawShapeMusicNotes": "多個音符", + "drawShapeLightning": "閃電", + "drawShapeCloud": "雲朵", + "drawShapeMoon": "月亮", + "drawShapeBadge": "徽章", + "drawSize": "大小", + "drawLayer": "圖層", + "drawBackgroundVideoFrame": "視訊影格(目前位置)", + "drawBackgroundVideoFrameAt": "視訊影格在...", + "drawBackgroundImage": "圖像檔案...", + "drawBackgroundNone": "無背景", + "drawBackgroundStretch": "將圖像伸縮至畫布", + "drawBackgroundOpacity": "背景不透明度", + "drawBackgroundVideoFrameFailed": "未能夠在 {0} 取得視訊畫面。", + "drawImages": "圖像", + "drawConvertToLine": "將線段轉換為直線", + "drawConvertShapeToCurves": "將所有直線轉換為曲線", + "drawConvertShapeToLines": "將所有曲線轉換為直線", + "drawRotateCounterClockwise": "逆時針旋轉 90°", + "drawSvgImages": "SVG 圖像", + "drawSvgNoShapes": "SVG 檔案中沒找到被填滿形狀或筆畫。", "progressBarTitle": "ASSA 進度條", "progressBarSettings": "進度條", "mouseOverColor": "滑鼠懸停顏色", @@ -4293,7 +4453,7 @@ "resolutionResamplerFromVideo": "從視訊...", "resolutionResamplerSourceAndTargetEqual": "來源和目標解析度相同,無需執行任何操作。", "resolutionResamplerNothingSelected": "請至少選取一個選項進行變更。", - "resolutionResamplerVideoDiffers": "字幕解析度 ({0}x{1}) 與視訊解析度 ({2}x{3}) 不符。\n要將字幕修改成與視訊相符嗎?", + "resolutionResamplerVideoDiffers": "字幕解析度 ({0}x{1}) 與視訊解析度 ({2}x{3}) 不符。\n要將字幕變更至與視訊相符嗎?", "resolutionResamplerAskOnVideoOpen": "開啟解析度不同的視訊時進行詢問", "backgroundBoxGenerator": "產生背景框", "backgroundBoxFillWidth": "填滿寬度", @@ -4425,7 +4585,7 @@ "advancedEffectConfetti": "彩色紙屑爆裂", "advancedEffectConfettiDescription": "每則字幕都會從角落的爆裂器與中央星爆效果中爆發出色彩繽紛、旋轉飛舞的紙屑", "advancedEffectHearts": "心(雨)", - "advancedEffectHeartsDescription": "以貝茲曲線繪製的三種形狀愛心,從畫面頂端輕柔飄落,在每則字幕顯示期間旋轉翻滾並逐漸淡出", + "advancedEffectHeartsDescription": "三種形狀的貝茲曲線心形從畫面頂部緩緩落下,在每個字幕播放過程中翻滾、消逝", "advancedEffectWordSpacing": "字間距", "advancedEffectWordSpacingDescription": "使用 \\fsp 標籤增加單字之間的間距以提高可讀性", "advancedEffectKaraokeRightToLeft": "由右至左", diff --git a/src/ui/Assets/Languages/Czech.json b/src/ui/Assets/Languages/Czech.json index afe9ff11429..18856ddc4c8 100644 --- a/src/ui/Assets/Languages/Czech.json +++ b/src/ui/Assets/Languages/Czech.json @@ -1,9 +1,49 @@ { "title": "Subtitle Edit", - "version": "v5.3.0-beta15", + "version": "v5.3.0", "translatedBy": "Matěj Fouma", "cultureName": "cs-CZ", "general": { + "prompt": "Výzva", + "temperature": "Teplota", + "preset": "Předvolba", + "output": "Výstup", + "outputFormat": "Výstupní formát", + "other": "Ostatní", + "timeCodeFormat": "Formát časového kódu", + "topBottomMargin": "Horní/dolní okraj", + "theme": "Motiv", + "brightness": "Jas", + "chooseColor": "Vybrat barvu", + "lineX": "Řádek {0}", + "playLine": "Přehrát řádek", + "maxLineLength": "Max. délka řádku", + "maxCharsPerSec": "Max. znaků/sek.", + "maxNumberOfLines": "Max. počet řádků", + "subtitles": "Titulky", + "shotChanges": "Změny záběrů", + "chapters": "Kapitoly", + "interjections": "Citoslovce", + "blankLines": "Prázdné řádky", + "editWholeText": "Upravit celý text", + "noTextInClipboard": "Ve schránce není žádný text", + "noSubtitlesFoundTitle": "Nenalezeny žádné titulky", + "replacedXOccurrences": "Nahrazeno {0} výskytů", + "invalidRegularExpressionX": "Neplatný regulární výraz: {0}", + "discardChangesTitle": "Zahodit změny?", + "downloadingXDotDotDot": "Stahování {0}…", + "importTimeCodesDotDotDot": "Importovat časové kódy…", + "original": "Originál", + "nextChange": "Následující změna", + "previousChange": "Předchozí změna", + "changeXOfY": "Změnit {0} z {1}", + "tooLong": "Příliš dlouhý", + "tooShort": "Příliš krátký", + "overlapping": "Překrytí", + "detail": "Podrobnosti", + "fixOcrErrors": "Opravit chyby OCR", + "runningOcrXY": "Spuštěno OCR… {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp vyžaduje stažení modulu llama-server. Chcete jej stáhnout?", "abort": "Přerušit", "actor": "Herec", "actors": "Herci", @@ -13,6 +53,18 @@ "actorPickerKeysHint": "Stisknutím čísla nebo klávesy Enter herce nastavíte. Klávesová zkratka Alt + šipka nahoru/dolů mění pořadí, klávesa Delete herce odebere.", "actorPickerNewActorX": "Nový herec \"{0}\"", "actorPickerLinesSelectedX": "Řádků vybráno: {0}", + "setStyleDotDotDot": "Nastavit styl…", + "stylePickerTitle": "Nastavit styl", + "stylePickerFilterHint": "Zadejte text pro filtrování nebo napište název nového stylu", + "stylePickerKeysHint": "Stiskněte číslici (1–9, 0) pro nastavení stylu na všech vybraných řádcích.", + "stylePickerNewStyleX": "Nový styl \"{0}\"", + "stylePickerNewStyleInfo": "Stisknutím klávesy Enter přidáte tento styl s výchozím nastavením a použijete jej na vybrané řádky. Pomocí \"Spravovat styly…\" můžete později změnit jeho písmo, barvy a umístění.", + "stylePickerCurrentStyleX": "Aktuální styl: {0}", + "stylePickerLinesUsingStyleX": "Řádky používající tento styl: {0}", + "stylePickerMarginsXYZ": "Vlevo {0}, vpravo {1}, svisle {2}", + "stylePickerSetStyle": "_Nastavit styl", + "stylePickerManageStyles": "Spravovat styly…", + "stylePickerManageStylesHint": "Zavřete toto okno a otevřete správce stylů, kde můžete upravit písma, barvy, umístění a další parametry", "add": "Přidat", "addDotDotDot": "Přidat…", "addToNamesListCaseSensitive": "Přidat na seznam jmen (rozlišuje velikost písmen)", @@ -187,7 +239,7 @@ "noDataReceived": "Nebyla přijata žádná data", "unknownError": "Neznámá chyba", "downloadComplete": "Stahování dokončeno…", - "downloadCompleteButCouldNotDeleteFile": "Stahování dokončeno, ale nepodařilo se odstranit existující soubor.", + "downloadCompleteButCouldNotDeleteFile": "Stahování dokončeno, ale nepodařilo se smazat existující soubor.", "pleaseRestartSeToUseTheNewLibmpv": "Pro použití nové knihovny libmpv prosím restartujte SE.", "pickVobSubLanguageTitle": "Vyberte jazyk VobSub – {0}", "duplicate": "Duplikovat", @@ -282,7 +334,7 @@ "height": "Výška", "help": "Nápověda", "hex": "Hex", - "hide": "Konec", + "hide": "Skrýt", "history": "Historie", "horizontal": "Vodorovný", "id": "ID", @@ -413,7 +465,7 @@ "options": "Volby", "originalSubtitleClosed": "Originální titulky zavřeny", "originalSubtitleLoadedX": "Originální titulky načteny: {0}", - "originalText": "Originální titulky", + "originalText": "Originální text", "outline": "Obrys", "outlineColor": "Barva obrysu", "outlineWidth": "Šířka obrysu", @@ -431,6 +483,7 @@ "percent": "Procent", "pickLayer": "Nastavit vrstvu", "pickOllamaModel": "Vybrat model Ollama", + "pickModel": "Vybrat model", "llamaCppUseRemoteServer": "Použít externí server (URL)", "llamaCppEngineSettings": "Nastavení modulu llama.cpp", "llamaCppEngineSettingsSubtitle": "Lokální kompilace serveru llama.cpp", @@ -507,6 +560,7 @@ "reset": "Resetovat", "resizePanels": "Změnit velikost panelů", "resolution": "Rozlišení", + "retry": "Zkusit znovu", "reverseRightToLeftStartEnd": "Obrátit začátek/konec zprava doleva", "right": "Vpravo", "rightToLeft": "Zprava doleva", @@ -568,6 +622,8 @@ "shadowColor": "Barva stínu", "shadowWidth": "Šířka stínu", "shiftLineBy": "Posunout řádek o", + "shotIn": "Začátek záběru", + "shotOut": "Konec záběru", "shortcut": "Klávesová zkratka", "shortcuts": "Klávesové zkratky", "show": "Začátek", @@ -579,9 +635,13 @@ "showStartColumn": "Zobrazit buňku \"Začátek\"", "showHideColumn": "Zobrazit buňku \"Konec\"", "showHistory": "Zobrazit historii", + "clearHistory": "Vyčistit historii", + "removeFromHistory": "Odebrat z historie", "showLayerColumn": "Zobrazit buňku \"Vrstva\"", "showPreview": "Zobrazit náhled", "showShotChangesList": "Zobrazit seznam změn záběrů", + "showShotInColumn": "Zobrazit buňku \"Začátek záběru\"", + "showShotOutColumn": "Zobrazit buňku \"Konec záběru\"", "showStyleColumn": "Zobrazit buňku \"Styl\"", "showTeletext": "Zobrazit buňku teletext v seznamovém zobrazení", "showTimeCodes": "Zobrazit časové kódy", @@ -638,12 +698,14 @@ "styleExaggeration": "Zesílení stylu", "styles": "Styly", "subtitleFile": "Soubor titulků", + "subtitleFileChangedOutsideX": "Soubor \"{0}\" byl změněn mimo Subtitle Edit.\n\nZnovu jej načíst a ztratit své úpravy?", "subtitleFileName": "Název souboru titulků", "subtitleFileSaved": "Soubor titulků uložen", "subtitleFileSavedToX": "Soubor titulků uložen do {0}", "subtitleFiles": "Soubory titulků", "subtitleFormats": "Formáty titulků", "subtitleLoadedX": "Načtené titulky: {0}", + "subtitleReloadedChangedOutsideX": "Titulky znovu načteny (změněny mimo Subtitle Edit): {0}", "suffix": "Sufix", "suggestions": "Návrhy", "sync": "Synchronizovat", @@ -727,10 +789,23 @@ "videoCustom3ForwardX": "Video, vlastních milisekund ({0:#,###,##0}) vpřed, 3", "videoCustom4BackX": "Video, vlastních milisekund ({0:#,###,##0}) zpět, 4", "videoCustom4ForwardX": "Video, vlastních milisekund ({0:#,###,##0}) vpřed, 4", + "videoCustom1BackAndPauseX": "Video, vlastních milisekund ({0:#,###,##0}) zpět a pozastavit, 1", + "videoCustom1ForwardAndPauseX": "Video, vlastních milisekund ({0:#,###,##0}) vpřed a pozastavit, 1", + "videoCustom2BackAndPauseX": "Video, vlastních milisekund ({0:#,###,##0}) zpět a pozastavit, 2", + "videoCustom2ForwardAndPauseX": "Video, vlastních milisekund ({0:#,###,##0}) vpřed a pozastavit, 2", + "videoCustom3BackAndPauseX": "Video, vlastních milisekund ({0:#,###,##0}) zpět a pozastavit, 3", + "videoCustom3ForwardAndPauseX": "Video, vlastních milisekund ({0:#,###,##0}) vpřed a pozastavit, 3", + "videoCustom4BackAndPauseX": "Video, vlastních milisekund ({0:#,###,##0}) zpět a pozastavit, 4", + "videoCustom4ForwardAndPauseX": "Video, vlastních milisekund ({0:#,###,##0}) vpřed a pozastavit, 4", "videoExtension": "Přípona souboru videa", "videoFile": "Soubor videa", "videoFileGenerated": "Vygenerovaný soubor videa", "videoFileGeneratedX": "Vygenerovaný soubor videa: \"{0}\"", + "videoFilesGenerated": "Soubory videa vygenerovány", + "xVideosGenerated": "Vygenerováno {0} videí", + "xOfYVideosGenerated": "Vygenerováno {0} z {1} videí", + "savedInX": "Uloženo v {0}", + "savedInXFolders": "Uloženo v {0} složkách", "videoFiles": "Soubory videa", "videoAndAudioFiles": "Soubory videa a audia", "videoOffset": "Posun videa", @@ -857,6 +932,7 @@ "multipleReplace": "Hro_madné nahrazení…", "fillSelectedLinesWithClipboard": "Vyplnit vybrané řádky textem ze schránky", "goToLineNumber": "_Přejít na řádek číslo…", + "commandPalette": "S_ada příkazů", "rightToLeftMode": "_Režim zprava doleva", "modifySelectionDotDotDot": "Upravit _výběr…", "tools": "_Nástroje", @@ -1047,14 +1123,17 @@ "audioTrackX": "Audio stopa {0}", "autoBreakHint": "Automaticky zalomit vybrané řádky", "charactersPerSecond": "Znaků/sek.: {0}", - "chooseColumn": "Vybrat buňky", + "chooseColumn": "Vybrat buňku", "columnPaste": "Vložit buňku", + "commandPaletteTitle": "Sada příkazů", + "commandPaletteSearchPlaceholder": "Zadejte text pro vyhledání příkazů…", + "commandPaletteNoCommandsFound": "Žádné odpovídající příkazy", "createdEmptyTranslation": "Vytvořen prázdný překlad z aktuálních titulků", - "deleteText": "Smazat titulek", + "deleteText": "Smazat text", "deleteTextAndShiftCellsUp": "Smazat text a posunout buňky nahoru", "endTimeMustBeAfterStartTime": "Čas konce musí být před časem začátku.", "errorLoad7Zip": "Zdá se, že tento soubor je komprimovaný soubor .7-Zip.\n\nSubtitle Edit neumí otevřít komprimované soubory.", - "errorLoadBinaryZeroes": "Promiňte, tento soubor obsahuje pouze binární nuly!\n\nPokud jste tento soubor upravili v Subtitle Editu, možná najdete zálohu pomocí položky nabídky Soubor -> Obnovit automatickou zálohu…", + "errorLoadBinaryZeroes": "Promiňte, tento soubor obsahuje pouze binární nuly!\n\nPokud jste tento soubor upravili v Subtitle Editu, možná najdete zálohu pomocí položky nabídky Soubor -> Obnovit automatickou zálohu…", "errorLoadGZip": "Zdá se, že tento soubor je komprimovaný soubor GZip.\n\nSubtitle Edit neumí otevřít komprimované soubory.", "errorLoadLargeFile": "Tento soubor je pro otevření jako soubor titulků příliš veliký.", "errorLoadVideoFilePrompt": "Zdá se, že tento soubor je soubor videa:\n{0}\n\nMůžete otevřít video pomocí \"Video → Otevřít video\" nebo přetažením do videopřehrávače.\n\nChcete jej otevřít jako soubor videa?", @@ -1094,6 +1173,7 @@ "overwriteExistingCells": "Přepsat stávající buňky", "overwriteOrShiftCellsDown": "Přepsat/posunout buňky dolů", "parsingMatroskaFile": "Analýza souboru Matroska…", + "readingDvdSubtitles": "Čtení titulků z DVD…", "pasteFromClipboardDotDotDot": "Vložit ze schránky…", "redoPerformed": "Znovu provedeno", "redoPerformedXActionLeft": "Znovu provedeno (zbývá akcí: {0})", @@ -1133,12 +1213,14 @@ "trimmedXLines": "Ořezáno {0} řádků titulků", "pastedXLinesOverSelectedLines": "Přes vybrané řádky vloženo {0} řádků", "pastedXOfYLinesOverSelectedLines": "Přes vybrané řádky vloženo {0} z {1} řádků – zbytek se do výběru nevešel", + "insertedXLinesFromClipboard": "Vloženo {0} řádků ze schránky", "openOriginalDifferentNumberOfSubtitlesXY": "Originální soubor titulků nemá stejný počet řádků jako aktuální soubor titulků.\n\n• Originální titulky: {0}\n• Aktuální titulky: {1}", "originalTextReadOnly": "Originální text (pouze pro čtení)", "originalTextEditMode": "Originální text (režim úprav)", "originalIsReadOnlyNotSaved": "Originální titulky jsou referenční a nebyly uloženy", "originalIsEmptyNotSaved": "Originální titulky neobsahují žádný text a nebyly uloženy", "originalIsReadOnlyReference": "Originální titulky jsou otevřeny jako referenční a pouze pro čtení", + "closeTranslationQuestionXY": "Zavřít překlad \"{0}\"?\n\nPůvodní titulek \"{1}\" se stane titulkem, který upravujete. Samotný překladový soubor se nezmění.", "allowEditOfOriginalSubtitle": "Povolit úpravu originálních titulků", "showAllOriginalLinesX": "Zobrazit všechny originální řádky ({0} zde nemá žádnou shodu)", "showAllOriginalLinesHint": "Řádky bez shody se zobrazují samostatně, abyste viděli, co v překladu chybí.", @@ -1173,6 +1255,7 @@ "fileExportedInFormatXToY": "Soubor exportován ve formátu {0} do {1}", "fileExportedInFormatXToFileY": "Soubor exportován ve formátu \"{0}\" do souboru \"{1}\"", "fixedXLines": "Opraveno {0} řádků", + "toolXChangedYLines": "{0}: Změněno {1} řádků", "transcriptionCompletedWithXLines": "Přepis dokončen s {0} řádky", "openSubtitleFileX": "Otevřít soubor titulků \"{0}\"?", "replacedXOccurrences": "Nahrazeno {0} výskytů", @@ -1263,6 +1346,21 @@ "formattingDotDotDot": "Formátování…", "imageBasedSubtitleForEditDotDotDot": "Titulky založené na obrázcích pro úpravu…", "imageBasedSubtitleForOcrDotDotDot": "Titulky založené na obrázcích pro OCR…", + "dvdSubtitlesDotDotDot": "Titulky z DVD (IFO/VOB)…", + "titleImportDvd": "Importovat titulky z DVD", + "dvdIfoFile": "Soubor IFO", + "dvdVobFiles": "Soubory VOB", + "dvdVideoStandard": "Video standard", + "dvdStartRipping": "Spustit ripování", + "dvdRippingAborted": "Ripování přerušeno", + "dvdOpenIfoFile": "Otevřít soubor IFO z DVD", + "dvdAddVobFiles": "Přidat soubory VOB…", + "dvdIfoFiles": "Soubory DVD IFO", + "dvdVobFileType": "Soubory DVD VOB", + "dvdDropHint": "Otevřete soubor IFO (VIDEO_TS\\VTS_01_0.IFO) nebo přidejte soubory VOB – případně je přetáhněte sem", + "dvdNotAnIfoFileX": "{0} není soubor IFO z DVD", + "dvdMenuIfoNoTitleSetsX": "Vedle souboru {0} nebyly nalezeny žádné sady titulků (VTS_xx_0.IFO)", + "dvdEncryptedXOfY": "{0} z {1} balíčků titulků je stále šifrováno pomocí CSS – tyto soubory VOB byly zkopírovány bez dešifrování, takže některé obrázky titulků budou nečitelné.\n\nPro čistý výsledek nejprve DVD dešifrujte pomocí nástroje pro ripování DVD.\n\nPřesto pokračovat?", "splitTextAt": "Rozdělit text na", "blankLines": "Prázdné řádky", "oneLineIsOneSubtitle": "Jeden řádek je jeden titulek", @@ -1287,7 +1385,8 @@ "forcedAlignerIsolatingSpeech": "Izolování řeči… {0}", "forcedAlignerIsolatingSpeechFailed": "Nepodařilo se izolovat řeč – časy konce byly místo toho nastaveny na základě doby čtení.", "forcedAlignerModel": "Model pro zarovnání", - "forcedAlignerDownloadEngine": "Stáhnout / aktualizovat modul…" + "forcedAlignerDownloadEngine": "Stáhnout / aktualizovat modul…", + "forcedAlignerEstimatedXOfY": "{0} z {1} řádků nebylo možné zarovnat, a proto byly umístěny podle doby čtení - jejich časové kódy jsou pouze odhadnuté. Skript je pravděpodobně delší než to, co zazní ve videu." }, "export": { "exportImagesProfiles": "Exportovat profily obrázků", @@ -1528,11 +1627,61 @@ "ignoreFormatting": "Ignorovat formátování", "ignoreFormattingHint": "Řádky, které se liší pouze formátovacími značkami, jako nebo {\\an8}, se nepovažují za odlišné", "showOnlyDifferencesInText": "Pouze rozdíly v textu", + "ignoreNumbering": "Ignorovat číslování", + "ignoreNumberingHint": "Řádky, které se liší pouze číslem, se nepovažují za odlišné", + "ignoreTimeDifferenceMs": "Časová tolerance (ms)", + "ignoreTimeDifferenceMsHint": "Časy začátku a konce, které se liší o tento počet milisekund nebo méně, se nepovažují za odlišné", + "compareDifferences": "Rozdíly", + "compareTextDifferences": "Rozdíly v textu", + "compareCurrent": "Aktuální", + "compareReference": "Reference", + "compareEditable": "Upravitelné", + "compareEditableHint": "Změny zde provedené se promítnou do titulků po kliknutí na Použít", + "compareReadOnly": "Jen pro čtení", + "compareTakeFromReference": "Převzít text a časování z reference", + "compareInsertFromReference": "Vložit tento řádek do aktuálních titulků", + "compareDeleteFromCurrent": "Smazat tento řádek z aktuálních titulků", + "compareTakeText": "Převzít text", + "compareTakeTiming": "Převzít časování", + "compareEditLine": "Upravit řádek", + "compareEditHint": "Ctrl + Enter pro uložení, Esc pro zrušení", + "compareEdited": "Upraveno", + "compareOnePendingChange": "1 čekající změna", + "compareXPendingChanges": "{0} čekajících změn", + "compareDiscardXChanges": "Zrušit {0} změn provedených v okně Porovnat?", + "compareXChangesApplied": "Porovnání: {0} změn použito", + "compareChangeTextX": "#{0} textu z reference", + "compareChangeTimingX": "#{0} časování z reference", + "compareChangeTextAndTimingX": "#{0} textu a časování z reference", + "compareChangeEditedX": "#{0} upraveno", + "compareChangeInsertedX": "#{0} vloženo", + "compareChangeDeletedX": "#{0} smazáno", + "compareSyncPoint": "Bod synchronizace", + "compareSyncPointHint": "Bod synchronizace – tyto dva řádky se vždy zobrazují jako pár a řádky nad a pod nimi jsou zarovnány samostatně", + "compareSyncPickCurrent": "Bod synchronizace: použít tento aktuální řádek", + "compareSyncPickReference": "Bod synchronizace: použít tento referenční řádek", + "compareSyncRemove": "Odebrat bod synchronizace", + "compareClearXSyncPoints": "Vymazat body synchronizace ({0})", + "compareSyncCurrentPickedX": "Aktuální #{0} vybráno jako bod synchronizace – vyberte odpovídající referenční řádek a klikněte na Synchronizovat", + "compareSyncReferencePickedX": "Referenční #{0} vybráno jako bod synchronizace – vyberte odpovídající aktuální řádek a klikněte na Synchronizovat", + "compareSyncWithCurrentX": "Synchronizovat s aktuálním #{0}", + "compareSyncWithReferenceX": "Synchronizovat s referenčním #{0}", + "compareSyncApply": "Synchronizovat", + "compareSyncPointSetXY": "Bod synchronizace nastaven: aktuální #{0} a referenční #{1} se nyní zobrazují jako pár", + "compareSyncAlreadyPairedXY": "Aktuální #{0} a referenční #{1} se již zobrazují jako pár se stejným začátkem – není co synchronizovat", + "compareSyncPointShiftedXYZW": "Bod synchronizace nastaven: aktuální #{0}–#{1} posunut o {2}, aby začínal s referencí #{3}", + "compareChangeSyncShiftXYZ": "#{0}–#{1} posunut o {2} (bod synchronizace)", + "compareTimingDeltaHint": "O kolik později (+) nebo dříve (−) začíná a končí reference oproti aktuálnímu řádku", "loadXFromFile": "Načíst \"{0}\" ze souboru", + "compareLoadSavedFile": "Načíst uložený soubor", "saveCompareHtmlTitle": "Uložit porovnání souboru HTML", - "pickMatroskaTrackX": "Vybrat stopy Matrosky – {0}", - "pickTransportStreamTrackX": "Vybrat stopy přenosového toku – {0}", + "pickMatroskaTrackX": "Vybrat stopu Matrosky – {0}", + "pickTransportStreamTrackX": "Vybrat stopu přenosového toku – {0}", + "chapters": "Kapitoly", + "dvdVobFilesMissingX": "Chybí soubory VOB (nalezeno {0} %)", "pickMp4TrackX": "Vybrat stopy MP4 – {0}", + "pickMxfTrackX": "Vybrat stopu MXF – {0}", + "pickMpegTrackX": "Vybrat stopu MPEG – {0}", "rosettaProperties": "Vlastnosti Timed Text Rosetta IMSC", "rosettaFontSize": "Velikost písma (výška řádku)", "propertyTimeBase": "Časová osa", @@ -1607,7 +1756,8 @@ "findWhat": "Najít co", "descriptionOptional": "Popis (volitelné)", "invalidRegularExpressionX": "Neplatný regulární výraz: {0}", - "regularExpressionTooSlowX": "Regulární výraz se po {0} sekundách vzdal – pravidlo je přeskočeno, zkuste jednodušší vzor" + "regularExpressionTooSlowX": "Regulární výraz se po {0} sekundách vzdal – pravidlo je přeskočeno, zkuste jednodušší vzor", + "moveToCategory": "Přesunout do kategorie" }, "find": { "searchTextWatermark": "Vyhledat text…", @@ -1687,7 +1837,22 @@ "mismatchWarning": "Nepodobá se originálu – může patřit k jinému řádku", "engineError": "Nebylo možné se připojit k AI modulu: {0}", "playCurrentLineHint": "Přehrát vybraný řádek v přehrávači a pozastavit na jeho konci (také dvojitým kliknutím na řádek)", - "editAfterHint": "Klikněte na text ve vybraném řádku pro úpravu opravy před jejím použitím (Enterem potvrdit, Escapem zrušit)" + "editAfterHint": "Klikněte na text ve vybraném řádku pro úpravu opravy před jejím použitím (Enterem potvrdit, Escapem zrušit)", + "template": "Šablona", + "templatePlaceholder": "Vyberte šablonu pro nahrazení výzvy", + "templateStandard": "Standardní korektura", + "templateSpeechToText": "Očištění převodu řeči na text", + "templateMachineTranslation": "Oprava strojového překladu", + "templateSdh": "SDH / pro neslyšící", + "referenceContext": "Kontext reference", + "referenceContextInfo": "Volitelné. Jména, postavy, slovníček, přehled nebo stylové poznámky – model je považuje za primární zdroj pro jména a výrazy. Odesíláno s každou dávkou.", + "referenceContextPlaceholder": "Jména: Kaito, teta Mei, Dr. Hollis\nVýrazy: Shinkansen, warp jádro\nPřehled: Kaito cestuje do Tokia, aby našel svého pohřešovaného otce.", + "generateContext": "Vygenerovat pomocí AI", + "generateContextHint": "Nechte vybraný AI modul přečíst titulky a navrhnout jména, termíny a přehled – před použitím zkontrolujte výsledek", + "generatingContextPartXOfY": "Čtení části {0} z {1}…", + "generatingContextSynopsis": "Psaní přehledu…", + "replaceContextQuestion": "Nahradit aktuální referenční kontext?", + "noContextGenerated": "AI modul nevrátil žádné použitelné referenční informace." }, "aiAssistant": { "title": "AI asistent", @@ -1733,6 +1898,7 @@ "removeLineBreaksPixelWidth": "Zrušit zalomení titulků, které se vejdou na jeden řádek (šířka v pixelech)", "fixUppercaseIInsideLowercaseWords": "Opravit velké 'i' uprostřed slova psaného malými písmeny (chyba OCR)", "fixDoubleApostrophes": "Opravit dva znaky apostrofu ('') na uvozovky (\")", + "fixMisreadQuotes": "Opravit apostrofy nesprávně rozpoznané jako uvozovky (OCR, angličtina)", "addPeriods": "Přidat tečku na konec řádku, začíná-li další řádek velkým písmenem", "startWithUppercaseLetterAfterParagraph": "Začít velkým písmenem po odstavci", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Začít velkým písmenem po tečce uvnitř odstavce", @@ -1755,6 +1921,7 @@ "fixCommasExample": ",, → ,", "removeLineBreaksExample": "Foo
bar! → Foo bar!", "fixDoubleApostrophesExample": "''Má dvě jednoduché uvozovky'' → \"Má jedny dvojité uvozovky\"", + "fixMisreadQuotesExample": "\"Ahoj'\" → \"Ahoj\"", "addPeriodsExample": "Ahoj, světe → Ahoj, světe.", "startWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! → p1: Foobar! || p2: Foobar!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Nazdar! jak se máš? → Nazdar! Jak se máš?", @@ -1844,6 +2011,8 @@ "fixMinDurationMs": "Opravit minimální trvání (ms)", "doNotGoPastShotChange": "Nejít za změnu záběru", "fixMaxDurationMs": "Opravit maximální trvání (ms)", + "fixMinDurationFrames": "Opravit minimální trvání (snímků)", + "fixMaxDurationFrames": "Opravit maximální trvání (snímků)", "minimumDurationMilliseconds": "Minimální délka (milisekund):", "maximumDurationMilliseconds": "Maximální délka (milisekund):", "maxDurationShouldBeHigherThanMinDuration": "Maximální trvání by mělo být delší než minimální trvání", @@ -1905,6 +2074,20 @@ "isolateSpeechHint": "Před zarovnáním odstraní hudbu a zvukové efekty, takže nástroj pro zarovnání slyší pouze dialog. Pomáhá u řádků pronášených přes hlasitou hudbu nebo akci, ale s GPU to trvá přibližně stejně dlouho jako samotný zvuk – a bez něj mnohonásobně déle.", "isolatingSpeech": "Izolování řeči… (chvíli to potrvá)", "isolateSpeechFailed": "Nepodařilo se izolovat řeč – místo toho bylo provedeno zarovnání s originálním audiem.", + "checkWithSpeechToText": "Ověřit pomocí převodu řeči na text", + "checkWithSpeechToTextHint": "Provede také přepis zvuku a porovná každý posun s místem, kde byla slova skutečně slyšet. Větší posuny, které řeč potvrdí, se zaškrtnou, a posuny směrem od místa, kde byla věta slyšet, zůstávají nezaškrtnuté, abyste je mohli zkontrolovat. Zobrazuje také, jak velká část každé věty byla slyšet – nízký podíl znamená, že se text liší od toho, co bylo řečeno. Titulky, které jsou nesynchronizované víc, než je maximální posun – ať už jde o konstantní posun, odchylku způsobenou nesouladem snímkové frekvence nebo skoky v místech střihu – se synchronizují nejprve podle zaslechnutých slov. Používá Crisp ASR Parakeet, což u celovečerního filmu trvá GPU několik minut.", + "checkWithSpeechToTextNotAvailableX": "Kontrola pomocí převodu řeči na text není pro {0} k dispozici", + "transcribingToCheck": "Probíhá přepis pro kontrolu zarovnání…", + "speechToTextFailed": "Převod řeči na text selhal – časové kódy s ním nebyly porovnány.", + "speechToTextX": "Převod řeči na text: {0}", + "speechToTextConfirmedXDisputedY": "Řeč: {0} potvrzeno, {1} sporných", + "hardlyHeardX": "Převod řeči na text zachytil pouze {0} % slov v titulcích. Jsou titulky v jazyce, kterým se mluví? Nástroj pro zarovnání nemůže umístit překlad.", + "heard": "Rozpoznáno", + "heardHint": "Jak velká část řádku byla rozpoznána při převodu řeči na text. Nízký podíl znamená, že se text liší od toho, co bylo řečeno – v těchto místech s největší pravděpodobností nástroj pro zarovnání chyboval.", + "statusConfirmedBySpeech": "Potvrzeno řečí", + "statusDisputedBySpeech": "Zaslechnuto na správném místě", + "statusMovedWithSync": "Posunuto se synchronizací", + "syncedFirstXY": "Nejprve synchronizováno: {0} s na začátku, {1} s na konci", "showSpeechOnly": "Zobrazit pouze řeč", "showSpeechOnlyHint": "Zobrazí zarovnanou vlnu z audia po odstranění hudby a zvukových efektů; původní vlna zůstává beze změny pro srovnání. K dispozici po izolaci řeči – zde, nebo pomocí možnosti \"Zobrazit pouze řeč\" ve vlně hlavního okna.", "align": "Zarovnat", @@ -1918,7 +2101,8 @@ "summaryXRetimedYKeptZSkipped": "Přečasováno: {0} · Zachováno: {1} · Bez řeči: {2}", "meanShiftX": "Průměrný posun: {0} ms", "toCheckX": "K ověření: {0}", - "largeMovesToCheckX": "{0} řádků by se o hodně samy posunuly a zůstávají nezaškrtnuté – přehrajte Originál / Zarovnaný a zaškrtněte ty, které jsou správné.", + "largeMovesToCheckX": "{0} řádků by se o hodně samo posunulo a zůstávají nezaškrtnuté – poslechněte si je (F5 přehraje synchronizovaný řádek, Shift + F5 originál) a zaškrtněte ty, které jsou správné.", + "linesToCheckX": "{0} řádků zůstává nezaškrtnutých k ověření – poslechněte si je (F5 přehraje synchronizovaný řádek, Shift + F5 originál) a zaškrtněte ty, které jsou správné.", "changeXOfY": "Změnit {0} z {1}", "previousChange": "Předchozí změna", "nextChange": "Následující změna", @@ -1931,13 +2115,15 @@ "statusNoSpeech": "Bez řeči", "statusShiftTooLarge": "Zachováno – posun příliš velký", "statusFailed": "Zachováno – selhání zarovnání", + "statusAdjustedByHand": "Upraveno ručně", + "alignedWaveformHint": "Přetažením řádku jej posuňte, nebo přetažením jeho okrajů změňte jeho začátek či konec.", + "playLine": "Přehrát řádek", + "undoAdjustment": "Zrušit úpravu", "playPause": "Přehrát / pozastavit", - "playOriginal": "Originál", "playAligned": "Zarovnaný", - "playOriginalHint": "Přehrát vybraný řádek s originálními časovými kódy", "playAlignedHint": "Přehrát vybraný řádek se zarovnanými časovými kódy", "apply": "Použít", - "applyHint": "Odškrtněte řádek, chcete-li zachovat jeho původní časové kódy. Dvojitým kliknutím na řádek jej přehrajete." + "applyHint": "Odškrtněte řádek, chcete-li zachovat jeho původní časové kódy. Dvojitým kliknutím na řádek jej přehrajete. Řádky lze také posouvat nebo měnit jejich velikost ve zarovnané vlně." }, "beautifyTimeCodesProfile": { "title": "Upravit profil zkrášlení časových kódů", @@ -2016,7 +2202,8 @@ "addAlignment": "Přidat zarovnání", "addColor": "Přidat barvu", "deleteLinesWithSpecificActorsOrStyles": "Smazat řádky s herci nebo styly (více položek oddělit čárkou)", - "useSourceStylesIfPossible": "Použít zdrojové styly, je-li to možné", + "useSourceStylesIfPossible": "Použít zdrojové styly, je-li to možné (záhlaví níže se pak použije pouze pro vstupy jiné než ASSA)", + "keepSourceEmbeddedFonts": "Zachovat zdrojová vložená písma (zápatí)", "editStyles": "Upravit styly", "editProperties": "Upravit vlastnosti", "editAttachments": "Upravit přílohy", @@ -2051,6 +2238,18 @@ "addFolderRecursiveDotDotDot": "Přidat složku včetně podsložek…", "selectFolderToConvert": "Vyberte složku se soubory k převodu", "includeSubfolders": "Při přidávání složky zahrnout podsložky", + "videoFilesWhenAddingFolder": "Soubory videa (MKV, MP4, TS…) při přidávání složky", + "videoFilesAsk": "Zeptat se", + "videoFilesInclude": "Přidat jejich titulkové stopy", + "videoFilesSkip": "Přeskočit", + "folderContainsXVideoFiles": "Složka obsahuje {0} souborů videa (MKV, MP4, TS…).\n\nPřidat také jejich vložené titulkové stopy, nebo pouze soubory titulků?", + "addVideoFiles": "Přidat soubory videa", + "skipVideoFiles": "Pouze soubory titulků", + "doNotAskAgainVideoFiles": "Už se znovu neptat (změnit v nastavení Dávkového převodu)", + "settingsSectionOutput": "Výstup", + "settingsSectionAddingFiles": "Přidávání souborů", + "settingsSectionImageBasedSubtitles": "Titulky založené na obrázcích (OCR)", + "settingsSectionOther": "Ostatní", "keepSourceFileTimestamp": "Zachovat datum/čas zdrojového souboru ve výstupních souborech", "preventSleepWhileConverting": "Zabránit počítači v přechodu do režimu spánku během převodu", "scanningFolderX": "Skenování {0}…", @@ -2066,7 +2265,20 @@ "transportStreamOnlyTeletext": "Pouze teletext", "transportStreamGetSizeFromVideo": "Získat velikost z videa…", "twoLetterLanguageCodeUppercase": "Dvoupísmenný jazykový kód (velká písmena)", - "threeLetterLanguageCodeUppercase": "Třípísmenný jazykový kód (velká písmena)" + "threeLetterLanguageCodeUppercase": "Třípísmenný jazykový kód (velká písmena)", + "formatContainsDotDotDot": "Formát obsahuje…", + "extensionIsDotDotDot": "Přípona je…", + "statusIsError": "Stav je chyba", + "forcedTracksOnly": "Pouze vynucené stopy", + "xConvertedYFailedInZ": "{0:#,###,##0} převedeno, {1:#,###,##0} selhalo v {2}", + "xNotProcessed": "{0:#,###,##0} nebylo zpracováno", + "removeUnicodeControlCharactersTitle": "Odebrat řídicí znaky Unicode", + "removeUnicodeControlCharactersInfo": "Odebere z textu neviditelné řídicí znaky Unicode pro směr (LRM, RLM, LRE, RLE, PDF, LRO a RLO) a nahradí pevné mezery běžnými mezerami.", + "preset": "Předvolba", + "savePresetDotDotDot": "Uložit předvolbu…", + "deletePreset": "Smazat předvolbu", + "presetName": "Název předvolby", + "deletePresetX": "Smazat předvolbu \"{0}\"?" }, "changeCasing": { "fixNames": "Opravit jména", @@ -2151,11 +2363,13 @@ }, "mergeLinesWithSameText": { "maxMsBetweenLines": "Max. milisekund mezi řádky", + "maxFramesBetweenLines": "Max. snímků mezi řádky", "includeIncrementingLines": "Zahrnout řádky s přídatným textem", "includeRollUpCaptions": "Zahrnout rolovací titulky" }, "mergeLinesWithSameTimeCodes": { "maxMsDifference": "Max. rozdíl (milisekund)", + "maxFramesDifference": "Max. rozdíl (snímků)", "makeDialog": "Vytvořit dialogy" }, "netflixCheckAndFix": { @@ -2270,7 +2484,14 @@ "xInTopBar": "{0} v horním pruhu", "xInBottomBar": "{0} v dolním pruhu", "noImageSubtitlesLoaded": "Nebyly načteny žádné obrazové titulky", - "imageBasedFormatNotSupported": "Formát obrazových titulků nebyl nalezen / není podporován." + "imageBasedFormatNotSupported": "Formát obrazových titulků nebyl nalezen / není podporován.", + "frameRateDeclaredInFile": "Snímková frekvence deklarovaná v souboru Blu-ray SUP", + "frameRateDetectedFromTimeCodesX": "Snímková frekvence detekovaná z časových kódů souboru Blu-ray SUP (soubor deklaruje {0})", + "frameRateFromVideo": "Snímková frekvence videa", + "frameRateCurrent": "Aktuální snímková frekvence", + "frameRateSetManually": "Ručně nastavená snímková frekvence", + "frameRateUsageInfo": "Exporty do formátů Blu-ray SUP, BDN XML, DOST a FCP se zapíšou s touto snímkovou frekvencí. Nezmění to žádné časy – k tomu použijte funkci \"Změnit snímkovou frekvenci\".", + "useVideoFrameRateXInsteadOfY": "Snímková frekvence videa je {0}, ale titulky jsou nastaveny na {1}.\n\nPoužít snímkovou frekvenci videa ({0})?" }, "removeTextForHearingImpaired": { "interjections": "Citoslovce", @@ -2300,6 +2521,7 @@ "pickFontNameInstalledFonts": "Nainstalovaná písma", "pickFontNameCollectedFonts": "Shromážděná písma", "colorPickerTitle": "Vybrat barvu", + "colorPickerBrightness": "Jas", "filterLayersTitle": "Filtrovat vrstvy pro zobrazení", "filterLayersHideFromWaveform": "Skrýt z vlny/spektrogramu", "filterLayersHideFromSubtitleGrid": "Skrýt z mřížky titulků", @@ -2350,7 +2572,21 @@ "correctWordsX": "Správná slova: {0}", "namesX": "Jména: {0}", "addedToDictionaryX": "Přidaných do slovníku: {0}", - "doNotShowThisAgain": "Tuto zprávu již nezobrazovat" + "doNotShowThisAgain": "Tuto zprávu již nezobrazovat", + "editUseAlwaysList": "Upravit seznam \"Použít vždy\"…", + "useAlwaysListTitle": "Kontrola pravopisu – seznam \"Použít vždy\"", + "useAlwaysListHeader": "Seznam \"Použít vždy\"", + "useAlwaysListDescription": "Slova, která kontrola pravopisu automaticky nahrazuje, uložená pomocí \"Změnit vše\" a \"Použít vždy\". Dvojice se použije pouze v případě, že je slovo napsáno nesprávně.", + "useAlwaysWord": "Nesprávně napsané slovo", + "xPairs": "{0:#,##0} dvojic", + "xUnusedPairs": "{0:#,##0} nikdy nepoužito", + "useAlwaysUnusedHint": "Nikdy nepoužito – toto slovo je napsáno správně (nebo se jedná o jméno či uživatelský výraz), takže kontrola pravopisu jej nikdy neoznačí", + "removeUnused": "Odebrat nepoužívané", + "useAlwaysEmpty": "Pro tento jazyk zatím neexistují žádné dvojice v seznamu \"Použít vždy\"", + "useAlwaysEmptyHint": "Dvojice se přidávají, když v kontrole pravopisu kliknete na \"Změnit vše\" nebo \"Použít vždy\".", + "useAlwaysNoMatch": "Žádné dvojice neodpovídají vyhledávání", + "useAlwaysSameWord": "Náhrada se musí lišit od daného slova.", + "useAlwaysRememberOff": "Možnost \"Zapamatovat seznam 'Použít vždy'\" je v nastaveních vypnutá, takže kontrola pravopisu tento seznam nepoužívá ani neukládá." }, "video": { "burnIn": { @@ -2388,6 +2624,11 @@ "translateToEnglish": "Přeložit do angličtiny", "transcribing": "Přepisování…", "transcribingXOfY": "Přepisování {0} z {1}…", + "linesTranscribedXOfYFailedZ": "Bylo přepsáno {0} z {1} řádků – {2} selhalo nebo neobsahovalo řeč.\n\nU neúspěšných řádků zůstane zachovaný aktuální text. Chcete použít přepsané řádky nebo zkusit neúspěšné znovu (můžete nejprve změnit modul nebo nastavení)?", + "linesTranscribedXOfYCancelled": "Přepis byl zrušen po {0} z {1} řádků.\n\nChcete použít přepsané řádky? U ostatních řádků zůstane zachovaný aktuální text.", + "noLinesTranscribed": "Žádný z {0} řádků se nepodařilo přepsat.\nPodrobnosti najdete v protokolu nástrojů.", + "applyTranscribedLines": "Použít přepsané", + "retryFailedLines": "Zkusit znovu neúspěšné", "isolateSpeech": "Izolovat řeč (pomalé)", "isolateSpeechHint": "Před přepisem odebere hudbu a zvukové efekty. Vede k menšímu počtu vynechaných řádků a lepšímu načasování u audia s hlasitou hudbou, ale s GPU to trvá přibližně stejně dlouho jako samotný zvuk – a bez něj mnohonásobně déle.", "isolatingSpeech": "Izolování řeči…", @@ -2395,6 +2636,9 @@ "detectSpeakers": "Detekce mluvčích", "detectSpeakersHint": "Každý řádek začíná označením mluvčího, například \"(mluvčí 0)\", s využitím diarizace Sortformer od NVIDIA (až 8 mluvčích). Funguje nejlépe s backendy, které rozdělují řádky v místech, kde se mění mluvčí, například Parakeet či Cohere.", "detectSpeakersNeedsNewerCrispAsr": "Funkce \"Detekce mluvčích\" vyžaduje Crisp ASR v{0} nebo novější, ale je nainstalována verze v{1}.\n\nAktualizujte Crisp ASR (tlačítko ozubeného kolečka vedle enginu) nebo vypněte funkci \"Detekce mluvčích\".", + "xNeedsNewerCrispAsr": "{0} vyžaduje Crisp ASR v{1} nebo novější, ale je nainstalována verze v{2}.\n\nStáhnout a nainstalovat aktualizaci nyní?", + "vad": "DHA", + "vadHint": "Detekce hlasové aktivity: přepisuje se pouze řeč, v místech, kde mluvčí udělá pauzu, se záznam ořízne.\nAuto: Silero, a to pouze pro moduly, které to vyžadují (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, WebRTC: vždy zapnuto, pro všechny moduly Crisp ASR. FireRedVAD je nejpřesnější.\nIndex-Echo vždy používá Silero. V pokročilém nastavení mají přednost parametry --vad, --vad-model nebo --chunk-seconds.", "inputLanguage": "Vstupní jazyk", "advancedWhisperSettings": "Pokročilé parametry převodu řeči na text", "downloadingSpeechToTextEngine": "Stahování modulu řeči na text", @@ -2489,6 +2733,8 @@ "instructions": "Pokyny", "instructionsHint": "Volitelný styl projevu, např. \"Mluv klidným, vřelým hlasem\". Odesíláno pouze modelům, které jej podporují (ne tts-1/tts-1-hd)", "openAiSpeedHint": "Rychlost řeči od 0,25 do 4,0 (1,0 je normální). Ne každý model tuto funkci podporuje", + "outputFormat": "Výstupní formát", + "outputFormatHint": "Formát zvuku vyžádaný od serveru. \"Auto\" vyžádá MP3 a přepne na PCM u modelů, které vrací pouze PCM (např. Gemini TTS)", "regenerateAudio": "Znovu generovat audio", "autoContinuePlaying": "Automatické pokračování přehrávání", "playLine": "Přehrát řádek", @@ -2516,6 +2762,17 @@ "voiceManagerTitle": "TTS – Správce hlasů", "voiceManagerDotDotDot": "Správce hlasů…", "voiceManagerMenuItem": "Správce hlasů TTS", + "speakFromCurrentLineTitle": "Číst od aktuálního řádku", + "speakFromCurrentLineDotDotDot": "Číst od aktuálního řádku…", + "speakFromCurrentLineHint": "Čte řádky nahlas jeden po druhém, počínaje aktuálním řádkem. Stisknutím Escape nebo kliknutím na jiný řádek přehrávání zastavíte.", + "stopSpeaking": "Zastavit čtení", + "speakingLineX": "Čtení řádku {0}… (Stiskněte Escape pro zastavení)", + "playWithSpeechTitle": "Přehrát s hlasovým doprovodem", + "playWithSpeechDotDotDot": "Přehrát s hlasovým doprovodem…", + "playWithSpeechHint": "Přehrává video a přečte každý řádek, jakmile se video k němu dostane. Pozastavit a přeskočit jako obvykle; Stiskněte Escape pro zastavení.", + "lowerVideoVolumeWhileSpeaking": "Snížit hlasitost videa během čtení", + "pauseVideoWhenSpeechRunsLate": "Pozastavit video, když čtení přejde na další řádek", + "waitingForSpeechLineX": "Generování řeči pro řádek {0}… (Stiskněte Escape pro zastavení)", "voiceKindClone": "Naklonovaný hlas", "voiceKindPreset": "Vestavěný", "voiceKindModel": "Model hlasu", @@ -2580,14 +2837,29 @@ "advancedTtsSettings": "Pokročilé nastavení TTS", "advancedTtsAudioProcessing": "Zpracování audia", "advancedTtsOutput": "Výstup", + "advancedTtsVoiceCloning": "Klonování hlasu", + "cleanCloneReferences": "Vyčistit reference pro klonování hlasu (Sidon)", + "cleanCloneReferencesDescription": "Odstraní hudbu, šum a dozvuk ze zvukového záznamu, ze kterého se hlas klonuje: klipy pořízené z videa a nahrávky importované do správce hlasů. Používá model obnovy řeči Sidon v souboru audio.cpp (stažení 940 MB). Klonovaný hlas již nekopíruje pozadí, ale velmi tichá nebo překrývající se řeč může znít tlumeně.", + "cleaningCloneReferencesDotDotDot": "Čištění referencí pro klonování hlasu…", + "downloadSidonTitle": "Stáhnout Sidon?", + "downloadSidonQuestionX": "Čištění referencí pro klonování hlasu vyžaduje model obnovy řeči Sidon ({0}).\n\nStáhnout nyní? Bez něj se reference použijí tak, jak jsou.", "proAudioPostProcessing": "Pro postprodukce audia", "proAudioPostProcessingDescription": "Přidá ekvalizér, šumovou bránu, kompresi, normalizaci hlasitosti (-16 LUFS) a krátké postupné zesilování/ztlumení ke každému klipu.", + "generatingSpeechSegmentXOfY": "Generování řeči: segment {0} z {1}", + "adjustingSpeedSegmentXOfY": "Úprava rychlosti: segment {0} z {1}", + "mergingAudioSegmentXOfY": "Slučování audia: segment {0} z {1}", + "postProcessingSegmentXOfY": "Postprodukce: segment {0} z {1}", "audioDucking": "Potlačení hlasitosti pozadí", "audioDuckingDescription": "Ztlumí originální zvuk videa a namixuje do něj řeč tak, aby původní zvuková stopa zůstala slabě slyšitelná. Použije se pouze v případě, že je řeč přidána do souboru videa.", "removeOriginalSpeech": "Odebrat originální řeč (pomalé)", "removeOriginalSpeechDescription": "Zachová hudbu a zvukové efekty originálního videa, ale odebere z něj řeč a namísto ní namixuje novou řeč. S GPU to trvá přibližně stejně dlouho jako samotné video – a bez něj mnohonásobně déle. Je-li zapnuto potlačení hlasitosti pozadí, jeho hlasitost se vztáhne na hudbu a efekty. Použije se pouze v případě, že je řeč přidána do souboru videa.", "removingOriginalSpeech": "Odebírání originální řeči…", "removeOriginalSpeechFailed": "Originální řeč se nepodařilo odebrat – řeč byla přidána do videa bez ní.", + "speechRemovalModel": "Model", + "speechRemovalModelDescription": "Nejlepší kvalita zachová nejvíce hudby a zvukových efektů. Rychlý je zhruba třikrát rychlejší, ale přijde se o trochu více hudby.", + "speechRemovalBestQuality": "Nejlepší kvalita (Mel-Band RoFormer)", + "speechRemovalFast": "Rychlý (HTDemucs)", + "videoTruncatedWarning": "Obraz v novém souboru videa se zastaví po {0}, ale původní video má délku {1} – obraz zamrzne, zatímco zvuk bude pokračovat.\n\nSoubor byl zachován. Výstup ffmpegu najdete v souboru error-log.txt ve složce s daty Subtitle Editu.", "originalVolumePercent": "Původní hlasitost v %", "vadSilenceCompression": "Komprese ticha pomocí VAD", "vadSilenceCompressionDescription": "Zkracuje pauzy mezi slovy namísto zrychlení řeči, takže klip zapadne bez ztráty kvality.", @@ -2670,7 +2942,9 @@ "timeCodeFormatColon": "Formát časového kódu:", "shotChangesList": "Seznam změn záběrů", "shotChangesClearQuestion": "Opravdu chcete vymazat všechny změny záběrů?", - "deleteSelectedShotChangeQuestion": "Opravdu chcete smazat vybranou změnu záběru?" + "deleteSelectedShotChangeQuestion": "Opravdu chcete smazat vybranou změnu záběru?", + "shotChanges": "Změny záběrů", + "exportShotChanges": "Exportovat změny záběrů" }, "chapters": { "title": "Kapitoly", @@ -2733,6 +3007,7 @@ "runningOcrXY": "Spuštěno OCR… {0}/{1}", "noLinesFoundTitle": "Nenalezeny žádné titulky", "noLinesFoundMessage": "V oblasti skenování nebyl nalezen žádný text – zkuste upravit oblast skenování, modul nebo minimální jas.", + "ocrStoppedEarlyMessage": "Modul OCR se zastavil před načtením všech snímků, takže dosud nalezené řádky jsou zachovány a zbytek chybí.{0}{0}{1}", "linesFoundX": "Nalezeno {0} řádků", "refiningTimingXY": "Upřesnění časování… {0}/{1}", "fixOcrErrors": "Opravit chyby OCR", @@ -2835,6 +3110,13 @@ "remuxVideoFailed": "Remuxování videa se nezdařilo.", "remuxVideoPleaseSelectBoth": "Vyberte prosím soubory videa i audia.", "remuxVideoAssRequiresMkv": "Pro zachování veškerého formátování a stylů titulků ASS/SSA je nutný kontejner MKV.", + "remuxVideoSccRequiresMov": "Titulky ve formátu Scenarist (.SCC) jsou vloženy jako skryté titulky CEA-608, které vyžadují kontejner MOV nebo MPG. Výstupní formát byl automaticky přepnut na .MOV.", + "remuxVideoSccNotWithWebM": "Skryté titulky ve formátu Scenarist (.SCC) vyžadují kontejner MOV, který však nemůže obsahovat video ve formátu VP9/AV1 ze souboru .WEBM. Odeberte soubor .SCC nebo jej převeďte do jiného formátu titulků.", + "remuxVideoMpgMaxTwoCaptionTracks": "Soubor .MPG obsahuje maximálně dvě stopy skrytých titulků (CC1 a CC3) – odeberte soubory titulků tak, aby zůstala pouze jedna nebo dvě.", + "remuxVideoMccRequiresMpg": "Titulky MacCaption (.MCC) jsou vloženy jako skryté titulky CEA-608/708 do videa MPEG-2, což vyžaduje kontejner MPG. Výstupní formát byl automaticky přepnut na .MPG.", + "remuxVideoMpgReencodeVideoX": "Skryté titulky v souboru .MPG vyžadují video MPEG-2 a video je {0}. Překódovat video do MPEG-2? Potrvá to déle a mírně sníží kvalitu.", + "remuxVideoFileHasNoAudioX": "\"{0}\" neobsahuje audio stopu, proto jej nelze použít jako zdroj zvuku.", + "remuxVideoAddingClosedCaptions": "Přidávání skrytých titulků…", "remuxVideoSelectAudioTrack": "Vybrat stopu audia", "remuxVideoSelectAudioTrackFor": "Vybrat zvukovou stopu pro {0}", "remuxVideoSelectAudioTrackPrompt": "Soubor '{0}' obsahuje {1} zvukových stop. Vyberte prosím zvukovou stopu k remuxování:", @@ -2847,6 +3129,7 @@ "remuxVideoMixAudio": "Namixovat audio do jedné stopy", "remuxVideoVolumePercent": "Hlasitost v %:", "remuxVideoVolumeX": "Hlasitost {0} %", + "remuxVideoFastStart": "Optimalizovat pro streamování na webu (přesunout index na začátek – pomalejší)", "embedSubtitlesDotDotDot": "Přidat/odebrat vložené titulky…", "generateTimeCodes": "Vygenerovat časové kódy", "checkeredImage": "Šachovnice", @@ -2946,6 +3229,10 @@ "reEncodeGeneratingDone": "Generování dokončeno", "reEncodeGeneratedFilesX": "Generování souborů ({0}):", "reEncodeFfmpegParameters": "Parametry ffmpeg", + "analyzingVideoX": "Analyzování videa… {0} % {1}", + "analyzingVideoXofY": "Analyzování videa {0}/{1}… {2} % {3}", + "backgroundImageFileNotSelected": "Soubor obrázku na pozadí nebyl vybrán", + "backgroundImageFileDoesNotExistX": "Soubor obrázku na pozadí neexistuje: {0}", "voices": "Hlasy", "presets": "Předvolby", "talkerX": "Mluvčí {0}", @@ -3026,7 +3313,8 @@ "syncPoints": "Body synchronizace", "pointSync": "Bodová synchronizace", "pointSyncViaOther": "Bodová synchronizace pomocí jiných titulků", - "syncPointCandidateInfo": "Řádky začínající po {0}+ sekundách ticha jsou zvýrazněny – často představují spolehlivé synchronizační body", + "syncPointCandidateAfterInfo": "Řádky, po kterých následuje {0}+ sekund ticha, jsou zvýrazněny – často představují spolehlivé synchronizační body", + "gapAfter": "Mezera po", "adjustAllShortcuts": "Klávesové zkratky:\n\n• Shift + Vlevo/Vpravo: Posun o 10 ms\r\n• Ctrl + Vlevo/Vpravo: Posun o 100 ms\r\n• Alt + Vlevo/Vpravo: Posunout 500 ms", "adjustAllShortcutsFrames": "Klávesové zkratky:\n\n• Shift + Vlevo/Vpravo: Posun o 1 snímek\r\n• Ctrl + Vlevo/Vpravo: Posun o 10 snímků\r\n• Alt + Vlevo/Vpravo: Posun o 1 sekundu", "offsetInSeconds": "Posun v sekundách", @@ -3184,9 +3472,12 @@ "newEmptyDefaultMs": "Výchozí doba trvání nového titulku (ms)", "timeCodeUpDownStepMs": "Posun času nahoru/dolů (ms)", "moveSelectedLinesStepMs": "Krok zkratky pro posun vybraných řádků (ms)", + "moveStartEndStepMs": "Krok zkratky pro posun začátku/konce (ms)", "moveLinesShortenNeighbor": "Posunout řádky: zkrátit předchozí/následující řádek namísto jeho překrytí", "promptBeforeDelete": "Výzva před smazáním", "rememberPositionAndSize": "Zapamatovat si pozici a velikost okna", + "titleBarFullFileName": "Zobrazit úplnou cestu k souboru v záhlaví", + "showRecentFiles": "Zobrazit poslední soubory (při opětovném otevření)", "openLastFileOnStart": "Při spuštění otevřít poslední nedávný soubor", "autoSave": "Automatické ukládání (ukládání otevřeného souboru během úprav)", "autoBackupOn": "Automatická záloha", @@ -3213,6 +3504,8 @@ "waveformDrawGridLines": "Vykreslit mřížku", "waveformUseSkiaRenderer": "Použít experimentální rychlé vykreslování", "waveformCenterVideoPositionAlsoWhenPaused": "Vystředit pozici videa i při pozastavení", + "waveformSelectCurrentSubtitleWhilePaused": "Vybrat aktuální titulek i při pozastavení", + "waveformRememberZoom": "Zapamatovat si přiblížení (vodorovné a svislé)", "waveformShowToolbar": "Zobrazit panel nástrojů", "waveformShowToolbarEdit": "Upravit panel nástrojů", "waveformShowToolbarEditLabel": "Položky panelu nástrojů", @@ -3263,7 +3556,7 @@ "videoControls": "Ovládání videa", "videoControlsEdit": "Upravit ovládání videa…", "videoControlsPositionText": "Pozice/trvání textu", - "videoControlsVideoFileName": "Názvu souboru videa", + "videoControlsVideoFileName": "Název souboru videa", "videoControlsPlayerName": "Název přehrávače videa", "fullscreenHideControls": "Skrýt ovládání videa v režimu celé obrazovky", "showSecondarySubtitleDialog": "Zobrazit dialogové okno se styly při otevření druhého souboru titulků", @@ -3278,6 +3571,7 @@ "adjustAllTimesRememberLineSelectionChoice": "Upravit všechny časy, zapamatovat výběr řádku", "mergeKeepEndTime": "Sloučit řádky: zachovat čas ukončení (povolit překrytí s dalším titulkem)", "mergeKeepEndTimeOnlyAssa": "Sloučit řádky: zachovat čas ukončení pouze pro \"Advanced Sub Station Alpha\"", + "mergeAutoBreak": "Sloučit řádky: automaticky zalomit sloučený text (vypnuto zachová vlastní konce řádků)", "filesAndLogs": "Soubory a protokoly", "showErrorLogFile": "Zobrazit soubor protokolu chyb", "showToolsLogFile": "Zobrazit soubor protokolu nástrojů", @@ -3286,6 +3580,7 @@ "showAssaLayer": "Zobrazit pole vrstev ASSA", "waveformCursorColor": "Barva kurzoru/ukazatele vlny", "waveformShotChangeColor": "Barva změny záběru vlny", + "waveformGridColor": "Barva mřížky vlny", "waveformParagraphLeftColor": "Barva levého okraje vlny", "waveformParagraphRightColor": "Barva pravého okraje vlny", "waveformFancyHighColor": "Barevné zvýraznění vlny", @@ -3313,10 +3608,15 @@ "resetSyntaxColoring": "Obnovit obarvení syntaxe", "resetWaveform": "Obnovit vlnu", "resetRules": "Obnovit pravidla", - "useFrameMode": "Použít režim snímků (hh.mm.ss.ff)", + "timeCodeMode": "Režim časového kódu", + "timeCodeModeTime": "Čas (hh:mm:ss,zzz)", + "timeCodeModeFrames": "Snímky (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "Čísla snímků", + "frameModeSnapToVideoFrames": "Ukládat časy na snímky videa (ne na snímky v rámci každé sekundy)", "textBoxLimitNewLines": "Omezit počet řádků v textovém poli titulků", "mpvOpenGl": "libmpv – OpenGL", "mpvSoftwareRendering": "libmpv – softwarové vykreslování (pomalé)", + "mpvMetalRendering": "libmpv – Metal (experimentální, vyžaduje restart)", "mpvWidRendering": "libmpv – nativní vykreslování pomocí ID okna", "waveFormsAndSpectrogramFoldersContainsX": "Složky \"Vlny\" a \"Spektrogram\" obsahují {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "Mám smazat soubory ve složkách \"Vlny\" a \"Spektrogram\"?", @@ -3390,6 +3690,7 @@ "useFocusedButtonBackgroundColor": "Použít barvu pozadí tlačítka zaměření", "focusedButtonBackgroundColor": "Barva pozadí tlačítka zaměření", "forceCrLfOnSave": "Vynutit CR+LF při ukládání (textové soubory titulků)", + "linuxClipboardUseExternalTool": "Kopírovat text přes xclip/wl-copy (zachovává znaky s diakritikou)", "showFormatLimitWarning": "Upozornit při ukládání, pokud řádky překračují limity formátu (např. SCC 32 znaků/řádek)", "textBoxButtonShowAutoBreak": "Textové pole: zobrazit tlačítko automatické zalomení", "textBoxButtonShowUnbreak": "Textové pole: zobrazit tlačítko zrušit zalomení", @@ -3402,12 +3703,17 @@ "allSettings": "Všechna nastavení", "uiScale": "Škála UI (%)", "fontScale": "Škála písma (%)", + "textSelectionOpacity": "Průhlednost výběru textu (%)", "waveformToolbarItems": "Položky panelu nástrojů vlny", "matchIconColorToDarkTheme": "Přizpůsobit barvu ikon barvě popředí v tmavém motivu", "subtitlePreviewProperties": "Vlastnosti náhledu titulku", "usePositionFromSubtitleFile": "Použít pozici ze souboru titulků (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "Okraj je součástí oblasti titulků", "textJustify": "Vyrovnat řádky", + "deinterlace": "Odstranění prokládání videa", + "deinterlaceOff": "Vypnuto", + "deinterlaceAuto": "Automaticky (pouze prokládané snímky)", + "deinterlaceAlways": "Vždy", "pixelWidthInfo": "Zelené čáry = limit maximální šířky | Červená oblast = text překračuje limit", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3436,11 +3742,34 @@ "categoryVideo": "Video", "categorySync": "Synchronizace", "categoryAi": "AI", + "categoryCustom": "Vlastní", + "editCustomShortcut": "Upravit vlastní klávesovou zkratku", + "customShortcutTextBoxKeyHint": "Zde použijte klávesu s Ctrl/Alt – samostatná klávesa by již nezadávala text do textového pole.", + "customShortcutNumberX": "Vlastní klávesová zkratka #{0}", + "customShortcutNumberXY": "Vlastní klávesová zkratka #{0}: {1}", + "customShortcutStep": "Krok", + "customShortcutSteps": "Kroky", + "customShortcutStepRunCommand": "Spustit příkaz", + "customShortcutStepInsertText": "Vložit text", + "customShortcutStepReplace": "Najít a nahradit", + "customShortcutInsertAtCursor": "Na pozici kurzoru", + "customShortcutInsertAtStart": "Na začátku textu", + "customShortcutInsertAtEnd": "Na konci textu", + "customShortcutSummaryRunCommandX": "Spustit: {0}", + "customShortcutSummaryInsertXY": "Vložit \"{0}\" ({1})", + "customShortcutSummaryReplaceXY": "Nahradit \"{0}\" za \"{1}\"", + "customShortcutSummaryReplaceRegexXY": "Nahradit regulární výraz \"{0}\" za \"{1}\"", + "customShortcutPickCommand": "Vyberte prosím příkaz, který chcete spustit.", + "customShortcutEnterText": "Zadejte prosím text, který chcete vložit.", + "customShortcutEnterFind": "Zadejte prosím text, který chcete vyhledat.", + "customShortcutInvalidRegexX": "Neplatný regulární výraz: {0}", + "customShortcutStepsHint": "Kroky se provádějí odshora dolů. Textové kroky se provádějí na vybraných řádcích; příkazy, které otevírají okno, pokračují i po jeho zavření.", "activeIn": "Aktivní v", "activeInEverywhere": "Všude", "generalMergeSelectedLinesAndUnbreak": "Sloučit vybrané řádky a zrušit zalomení", "generalMergeSelectedLinesAndUnbreakCjk": "Sloučit vybrané řádky a zrušit zalomení bez mezery (CJK)", "generalUnbreakNoSpaceCjk": "Zrušit zalomení bez mezery (CJK)", + "generalToggleBreak": "Přepnout zalomení/sjednocení", "generalMergeSelectedLinesBilingual": "Sloučit vybrané řádky dvojjazyčně", "generalToggleTranslationMode": "Přepnout režim překládání", "generalToggleTranslationAndOriginalInPreviews": "Přepnout překlad a originální text v náhledu videa/audia", @@ -3462,6 +3791,7 @@ "fileOpenKeepVideo": "Otevřít (zachovat video)", "fileSave": "Uložit", "fileSaveAs": "Uložit jako", + "fileSaveOriginal": "Uložit originál", "fileCompare": "Porovnat", "fileStatistics": "Statistika", "fileImportPlainText": "Importovat prostý text", @@ -3482,6 +3812,7 @@ "detectKey": "Detekovat klávesu", "control": "Ctrl", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Shift", "controlMac": "⌃", @@ -3492,6 +3823,11 @@ "resetShortcutsDetail": "Chcete obnovit výchozí nastavení všech klávesových zkratek?", "togglePlayPause": "Přepnout přehrávání/pozastavení", "toggleLockTimeCodes": "Přepnout zamknutí časových kódů", + "toggleTimeCodeMode": "Přepnout režim časového kódu (čas/snímky/čísla snímků)", + "toggleScreenPrivacy": "Přepnout skrytí obsahu obrazovky (skrýt názvy souborů, poté i texty)", + "screenPrivacyFileNamesHidden": "Ochrana soukromí na obrazovce: skryté názvy souborů", + "screenPrivacyFileNamesAndTextsHidden": "Ochrana soukromí na obrazovce: skryté názvy souborů a texty", + "screenPrivacyOff": "Ochrana soukromí na obrazovce: vypnuto", "duplicateSelectedLines": "Duplikovat vybrané řádky", "sourceView": "Zobrazení zdroje", "addOrEditBookmark": "Přidat nebo upravit záložku", @@ -3540,6 +3876,7 @@ "listViewColumnTextUp": "Sloupec, text nahoru", "listViewColumnTextDown": "Sloupec, text dolů", "autoTranslateSelectedLines": "Automaticky přeložit vybrané řádky…", + "autoTranslateSelectedLinesNoPrompt": "Automaticky přeložit vybrané řádky (bez výzvy, použít poslední překladový modul/jazyky)", "setAssaResolution": "Nastavit rozlišení ASSA (PlayResX/PlayResY)", "setShortcutForX": "Nastavit zkratku pro \"{0}\"", "commandFileNewKeepVideo": "Nový (zachovat video)", @@ -3620,6 +3957,14 @@ "surroundWith": "Obklopit…", "surroundWithXY": "Obklopit {0}/{1}", "surroundWithNumberX": "Obklopit #{0}", + "surroundWithBehavior": "Chování", + "surroundWithBehaviorToggle": "Přepnout (přidat, nebo odebrat, pokud existuje)", + "surroundWithBehaviorAdd": "Přidat (pokaždé)", + "surroundWithBehaviorRemove": "Odebrat (vše)", + "surroundWithBehaviorRemoveOnce": "Odebrat (po jednom)", + "surroundWithWorksOn": "Funguje na", + "surroundWithScopeSelectionOrText": "Výběr, jinak celý text", + "surroundWithScopeEachLine": "Každý řádek", "searchVia": "Vyhledat pomocí", "searchViaX": "Vyhledat pomocí {0}", "searchViaNumberX": "Vyhledat pomocí #{0}", @@ -3647,6 +3992,11 @@ "copySubtitlePathToClipboard": "Kopírovat cestu k titulkům do schránky", "copySubtitleOriginalPathToClipboard": "Kopírovat cestu k originálním titulkům do schránky", "focusTextBox": "Zaměřit se na textové pole", + "focusSubtitleListView": "Zaměřit se na seznamové zobrazení titulků", + "focusWaveform": "Zaměřit se na vlnu", + "focusOriginalTextBox": "Zaměřit se na originální textové pole", + "textBoxGoToStart": "Textové pole, přejít na začátek", + "textBoxGoToEnd": "Textové pole, přejít na konec", "sortByNumber": "Seřadit podle čísla", "sortByStartTime": "Seřadit podle času \"Začátku\"", "sortByEndTime": "Seřadit podle času \"Konce\"", @@ -3686,6 +4036,7 @@ "googleIt": "Vygooglit (vybraný text)", "setActorX": "Nastavit herce: {0}", "setNewActor": "Nastavit nového herce…", + "setStyleX": "Nastavit styl: {0}", "toggleDialogDashes": "Přepnout dialogové pomlčky", "mergeWithLineBeforeAsDialog": "Sloučit s předchozím řádkem jako dialog", "mergeWithLineAfterAsDialog": "Sloučit s následujícím řádkem jako dialog", @@ -3697,12 +4048,16 @@ "moveStartOneFrameForwardKeepGapPrev": "Posunout začátek o jeden snímek vpřed (zachovat mezeru u předchozího, pokud je blízko)", "moveEndOneFrameBackKeepGapNext": "Posunout konec o jeden snímek zpět (zachovat mezeru u dalšího, pokud je blízko)", "moveEndOneFrameForwardKeepGapNext": "Posunout konec o jeden snímek vpřed (zachovat mezeru u dalšího, pokud je blízko)", - "moveSelectedLinesXMsBack": "Posunout vybrané řádky o X ms zpět (X nastaveno v nastavení)", - "moveSelectedLinesXMsForward": "Posunout vybrané řádky o X ms vpřed (X nastaveno v nastavení)", - "moveSelectedLinesAndForwardXMsBack": "Posunout vybrané řádky a všechny následující o X ms zpět (X nastaveno v nastavení)", - "moveSelectedLinesAndForwardXMsForward": "Posunout vybrané řádky a všechny následující o X ms vpřed (X nastaveno v nastavení)", - "moveAllLinesXMsBack": "Posunout všechny řádky o X ms zpět (X nastaveno v nastavení)", - "moveAllLinesXMsForward": "Posunout všechny řádky o X ms vpřed (X nastaveno v nastavení)", + "moveStartXMsBack": "Posunout začátek o X ms zpět (X nastaveno v Nastavení i Vizuální synchronizaci)", + "moveStartXMsForward": "Posunout začátek o X ms vpřed (X nastaveno v Nastavení i Vizuální synchronizaci)", + "moveEndXMsBack": "Posunout konec o X ms zpět (hodnota X je nastavena v Nastavení i Vizuální synchronizaci)", + "moveEndXMsForward": "Posunout konec o X ms dopředu (hodnota X je nastavena v Nastavení i Vizuální synchronizaci)", + "moveSelectedLinesXMsBack": "Posunout vybrané řádky o X ms zpět (X nastaveno v Nastavení)", + "moveSelectedLinesXMsForward": "Posunout vybrané řádky o X ms vpřed (X nastaveno v Nastavení)", + "moveSelectedLinesAndForwardXMsBack": "Posunout vybrané řádky a všechny následující o X ms zpět (X nastaveno v Nastavení)", + "moveSelectedLinesAndForwardXMsForward": "Posunout vybrané řádky a všechny následující o X ms vpřed (X nastaveno v Nastavení)", + "moveAllLinesXMsBack": "Posunout všechny řádky o X ms zpět (X nastaveno v Nastavení)", + "moveAllLinesXMsForward": "Posunout všechny řádky o X ms vpřed (X nastaveno v Nastavení)", "moveSelectedLinesCustomMsBack": "Posunout vybrané řádky, vlastních milisekund ({0:#,###,##0}) zpět, {1}", "moveSelectedLinesCustomMsForward": "Posunout vybrané řádky, vlastních milisekund ({0:#,###,##0}) vpřed, {1}", "moveSelectedLinesAndForwardCustomMsBack": "Posunout vybrané řádky a všechny následující, vlastních milisekund ({0:#,###,##0}) zpět, {1}", @@ -3772,8 +4127,8 @@ "linesToDraw": "Řádky k vykreslení", "currentImage": "Aktuální obrázek", "autoDrawAgain": "Znovu automaticky vykreslit", - "startOcr": "Zahájit OCR", - "pauseOcr": "Pozastavit OCR", + "startOcr": "_Zahájit OCR", + "pauseOcr": "_Pozastavit OCR", "inspectLine": "Zkontrolovat řádek…", "ocrEngine": "Modul OCR", "tesseractEngineMode": "Režim modulu", @@ -3841,7 +4196,7 @@ "ocrImage": "OCR obrázku", "oneColor": "Jedna barva (bílá)", "darknessThreshold": "Práh tmavosti", - "editExportDotDotDot": "Upravit/exportovat…", + "editExportDotDotDot": "_Upravit/exportovat…", "editBinaryOcrDatabase": "Upravit databázi \"binárního porovnání obrázků\"", "binaryImageCompareDatabase": "Databáze \"binárního porovnání obrázků\"", "removeXFromUnknownWordsList": "Odebrat \"{0}\" ze seznamu neznámých slov", @@ -3851,6 +4206,8 @@ "binaryImageCompareInspectImageMatches": "\"Porovnání binárního obrázku\" – Zkontrolovat shody obrázků", "saveBlankTextTitle": "Uložit prázdný text?", "saveBlankTextPrompt": "Uložit prázdný text pro obrázek?", + "drawnLinesDoNotMatchTitle": "Čáry neodpovídají obrázku", + "drawnLinesDoNotMatchPrompt": "Některé nakreslené čáry neodpovídají obrázku (zelené čáry musí být na znaku, červené čáry mimo něj), takže tento znak nebude rozpoznán.\n\nPřesto uložit?", "yesAndNeverAskAgain": "Ano a už se znovu neptat", "importTextFromSubtitleDotDotDot": "Importovat text z titulků…", "importTextFromSubtitleOverwritePrompt": "Některé řádky již obsahují text z OCR. Přepsat stávající text?", @@ -3909,9 +4266,26 @@ "crispEmbedSettingsTitle": "Nastavení CrispEmbed", "crispEmbedDescription": "Lokální OCR modul s více modelovými backendy – stáhněte si modul a modely zde.", "trainNOcrDatabase": "Trénovat databázi nOCR…", + "optimizeNOcrDatabase": "Optimalizovat databázi nOCR…", + "optimizeNOcrDatabaseQuestionXY": "Odebrat z databáze nOCR \"{0}\" řádky, které nepomáhají rozlišit znaky od podobných znaků?\n\nDatabáze tak bude menší a OCR rychlejší, obvykle s menším počtem chyb. Trvá to až minutu.\n\nZáloha bude uložena jako \"{1}\".", + "optimizingNOcrDatabaseXY": "Optimalizace databáze nOCR… {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "Databáze nOCR \"{0}\" optimalizována: {1:#,##0} -> {2:#,##0} řádků.", "startTraining": "Spustit trénování", "abortTraining": "Přerušit trénování", "trainingOptions": "Možnosti trénování", + "trainNOcrSubtitle": "Vykresluje znaky v nainstalovaných písmech a učí nOCR jejich tvary. Vyberte písma, která vaše titulky používají.", + "xFontsSelected": "{0:#,##0} vybráno", + "subtitleFonts": "Písma titulků", + "emptyDatabase": "Prázdná databáze", + "startFromDatabase": "Začít od", + "startFromDatabaseHint": "Přidejte naučené znaky do kopie existující databáze (doporučeno) nebo začněte s prázdnou databází", + "fontSizes": "Velikosti písma", + "fontSizesHint": "Velikosti písma v pixelech, ve kterých se mají vykreslovat, oddělené čárkami, např. \"30, 40\"", + "numberOfLineSegmentsHint": "Zkontrolované řádky na znak – vyšší počet znamená přísnější kontrolu, ale pomalejší zpracování", + "enterDatabaseName": "Zadejte název databáze", + "trainingFontXSizeYCharacterZ": "Trénování \"{0}\" při {1} px: {2}", + "xLearned": "{0:#,##0} naučeno", + "xSkipped": "{0:#,##0} přeskočeno", "charactersToTrain": "Znaky k trénování", "letterCombinationsToTrain": "Kombinace písmen, které mohou být rozděleny do jednoho obrázku", "importCharactersFromSubtitleFile": "Importovat znaky ze souboru titulků…", @@ -3938,13 +4312,90 @@ "drawZoomOut": "Oddálit (Ctrl + -)", "drawResetView": "Obnovit zobrazení (Ctrl + 0)", "drawToggleGrid": "Přepnout mřížku (Ctrl + G)", + "drawTogglePreview": "Přepnout náhled (F9)", + "drawPreviewFailed": "Náhled se nezdařil – je vyžadován ffmpeg s libass (filtr titulků)", "drawCopyToClipboard": "Kopírovat do schránky (Ctrl + C)", "drawShapes": "Tvary", "drawSelectedPoint": "Vybraný bod", "drawSelectedShape": "Vybraný tvar", "drawSelectedLayer": "Vybraná vrstva", "drawToolX": "Nástroj: {0}", - "drawHelpText": "Kliknutím přidáte body • Enter/F8 pro uzavření tvaru • Shift + přetažení pro posun • Ctrl + rolování pro přiblížení", + "drawHelpText": "Kliknutím přidejte body • Pravým tlačítkem myši zobrazíte možnosti • Nástroj výběru: tažením za úchyty měňte měřítko/otáčejte (Shift = zachovat poměr stran/15°) • Enter/F8 pro uzavření tvaru • Shift + tažení nebo prostřední tlačítko myši pro posun • Ctrl + kolečko pro přiblížení/oddálení", + "drawMoveToLayer": "Přesunout na vrstvu", + "drawFlipHorizontal": "Otočit vodorovně", + "drawFlipVertical": "Otočit svisle", + "drawHideShape": "Skrýt tvar", + "drawShowShape": "Zobrazit tvar", + "drawHideLayer": "Skrýt vrstvu", + "drawShowLayer": "Zobrazit vrstvu", + "drawDeleteLayer": "Smazat vrstvu", + "drawDeletePoint": "Smazat bod", + "drawCancelDrawing": "Zrušit kreslení", + "drawLayerX": "Vrstva {0}", + "drawImportSvg": "Importovat obrázek SVG…", + "drawRotateClockwise": "Otočit o 90° ve směru hodinových ručiček", + "drawConvertToCurve": "Převést úsečku na křivku", + "drawBackground": "Pozadí", + "drawPosition": "Pozice", + "drawZoom": "Přiblížení", + "drawShapeTool": "Nástroj pro tvary", + "drawColorPickerTool": "Vybrat barvu z tvaru nebo pozadí", + "drawShapeLibrary": "Knihovna tvarů", + "drawShapeLibraryHint": "Přetažením na plátně umístěte tvar, nebo kliknutím použijte výchozí velikost. Shift zachová proporce.", + "drawAddToLibrary": "Přidat do knihovny tvarů…", + "drawRemoveFromLibrary": "Odebrat z knihovny tvarů", + "drawShapeName": "Název tvaru", + "drawCategorySpeechBubbles": "Bubliny", + "drawCategoryArrows": "Šipky", + "drawCategoryBasicShapes": "Základní tvary", + "drawCategorySymbols": "Symboly", + "drawCategoryMyShapes": "Moje tvary", + "drawShapeSpeechBubble": "Bublina", + "drawShapeSpeechBubbleRight": "Bublina, ocas vpravo", + "drawShapeSpeechBubbleUp": "Bublina, ocas nahoru", + "drawShapeOvalBubble": "Oválná bublina", + "drawShapeBoxBubble": "Čtvercová bublina", + "drawShapeThoughtBubble": "Myšlenková bublina", + "drawShapeShoutBubble": "Bublina výkřiku", + "drawShapeCaptionBox": "Rámeček s popiskem", + "drawShapeArrow": "Šipka", + "drawShapeDoubleArrow": "Dvojitá šipka", + "drawShapeChevron": "Háček", + "drawShapeCurvedArrow": "Zakřivená šipka", + "drawShapeRoundedRectangle": "Zaoblený obdélník", + "drawShapeTriangle": "Trojúhelník", + "drawShapeDiamond": "Kosočtverec", + "drawShapePentagon": "Pětiúhelník", + "drawShapeHexagon": "Šestiúhelník", + "drawShapeOctagon": "Osmiúhelník", + "drawShapeStar": "Hvězda", + "drawShapeRing": "Kruh", + "drawShapePlus": "Plus", + "drawShapeBanner": "Poutač", + "drawShapeHeart": "Srdce", + "drawShapeCheck": "Fajfka", + "drawShapeMusicNote": "Nota", + "drawShapeMusicNotes": "Noty", + "drawShapeLightning": "Blesk", + "drawShapeCloud": "Mrak", + "drawShapeMoon": "Měsíc", + "drawShapeBadge": "Odznak", + "drawSize": "Velikost", + "drawLayer": "Vrstva", + "drawBackgroundVideoFrame": "Snímek videa (aktuální pozice)", + "drawBackgroundVideoFrameAt": "Snímek videa v čase…", + "drawBackgroundImage": "Soubor obrázku…", + "drawBackgroundNone": "Bez pozadí", + "drawBackgroundStretch": "Roztáhnout obrázek na plátno", + "drawBackgroundOpacity": "Průhlednost pozadí", + "drawBackgroundVideoFrameFailed": "Nelze získat snímek videa na {0}.", + "drawImages": "Obrázky", + "drawConvertToLine": "Převést úsečku na čáru", + "drawConvertShapeToCurves": "Převést všechny čáry na křivky", + "drawConvertShapeToLines": "Převést všechny křivky na čáry", + "drawRotateCounterClockwise": "Otočit o 90° proti směru hodinových ručiček", + "drawSvgImages": "SVG obrázky", + "drawSvgNoShapes": "V souboru SVG nebyly nalezeny žádné vyplněné tvary ani tahy.", "progressBarTitle": "Ukazatel průběhu ASSA", "progressBarSettings": "Ukazatel průběhu", "mouseOverColor": "Barva při najetí myší", @@ -4041,13 +4492,26 @@ "graphics": "Grafika", "copyToStorageStyles": "Zkopírovat do úložiště stylů", "copyToFileStyles": "Zkopírovat do souboru stylů", + "styleXAlreadyExistsInStorage": "V úložišti již existuje styl s názvem \"{0}\".\n\nPřepsat, nebo ponechat oba (kopie dostane nový název)?", + "styleXAlreadyExistsInFile": "V souboru již existuje styl s názvem \"{0}\".\n\nPřepsat, nebo ponechat oba (kopie dostane nový název)?", + "styleNameCannotBeEmpty": "Název stylu nemůže zůstat prázdný.", + "styleNameXIsUsedMoreThanOnce": "Název stylu \"{0}\" je použit u více než jednoho stylu v souboru.", + "overwrite": "Přepsat", + "keepBoth": "Ponechat oba", + "doThisForAllConflictingStyles": "Provést u všech konfliktních stylů", "setStyleAsDefault": "Nastavit styl jako výchozí", "takeUsagesFromDotDotDot": "Vzít použití z…", "replaceStyleWithDotDotDot": "Nahradit styl…", "noAttachmentsFound": "Ve vybraném souboru ASSA nebyly nalezeny žádné přílohy.", "deleteStyleQuestion": "Smazat styl?", "deleteStylesQuestion": "Smazat styly?", + "deleteXStylesQuestion": "Chcete smazat {0} stylů?", + "deleteXStylesFromStorageQuestion": "Chcete smazat {0} stylů z úložiště?", + "deleteStyleXFromStorageQuestion": "Chcete smazat styl \"{0}\" z úložiště?", + "deleteStyleXFromFileQuestion": "Chcete smazat styl \"{0}\" z aktuálního souboru?", "openStyleImportFile": "Otevřít soubor titulků, ze kterého se budou styly importovat", + "styleImportFiles": "Soubory stylů (.ASS, .STY, kategorie Subtitle Edit 4 .template)", + "ssaStyleImportFiles": "Soubory stylů (.SSA, .ASS, .STY)", "primary": "Primární", "secondary": "Sekundární", "applyOverrideTags": "Použít přepisové značky", diff --git a/src/ui/Assets/Languages/Danish.json b/src/ui/Assets/Languages/Danish.json index 0591cf9c07a..269bbe33088 100644 --- a/src/ui/Assets/Languages/Danish.json +++ b/src/ui/Assets/Languages/Danish.json @@ -1,12 +1,68 @@ { "title": "Subtitle Edit", - "version": "v5.2.0-rc7", + "version": "v5.3.0", "translatedBy": "", "cultureName": "da-DK", "general": { + "temperature": "Temperatur", + "preset": "Forudindstilling", + "outputFormat": "Outputformat", + "other": "Andet", + "timeCodeFormat": "Tidskodeformat", + "topBottomMargin": "Top/bund margin", + "theme": "Tema", + "brightness": "Lysstyrke", + "chooseColor": "Vælg farve", + "lineX": "Linje {0}", + "playLine": "Afspil linje", + "maxLineLength": "Max linjelængde", + "maxCharsPerSec": "Max tegn/sek", + "maxNumberOfLines": "Max antal linjer", + "subtitles": "Undertekster", + "shotChanges": "Sceneskift", + "chapters": "Kapitler", + "audio": "Lyd", + "interjections": "Interjektioner", + "blankLines": "Tomme linjer", + "editWholeText": "Rediger hele teksten", + "noTextInClipboard": "Ingen tekst i udklipsholderen", + "noSubtitlesFoundTitle": "Ingen undertekster fundet", + "replacedXOccurrences": "Erstattede {0} forekomster", + "invalidRegularExpressionX": "Ugyldigt regulært udtryk: {0}", + "discardChangesTitle": "Kassér ændringer?", + "downloadingXDotDotDot": "Downloader {0}...", + "importTimeCodesDotDotDot": "Importer tidskoder...", + "nextChange": "Næste ændring", + "previousChange": "Forrige ændring", + "changeXOfY": "Ændring {0} af {1}", + "tooLong": "For lang", + "tooShort": "For kort", + "overlapping": "Overlappende", + "detail": "Detalje", + "fixOcrErrors": "Ret OCR-fejl", + "runningOcrXY": "Kører OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp kræver, at llama-server-motoren downloades. Vil du downloade nu?", "abort": "Afbryd", "actor": "Skuespiller", "actors": "Skuespillere", + "setActorDotDotDot": "Angiv skuespiller...", + "actorPickerTitle": "Angiv skuespiller", + "actorPickerFilterHint": "Skriv for at filtrere, eller skriv et nyt skuespillernavn", + "actorPickerKeysHint": "Tryk på et tal eller Enter for at angive skuespilleren. Alt+Op/Ned ændrer rækkefølgen, Delete fjerner skuespilleren.", + "actorPickerNewActorX": "Ny skuespiller \"{0}\"", + "actorPickerLinesSelectedX": "Valgte linjer: {0}", + "setStyleDotDotDot": "Angiv stilart...", + "stylePickerTitle": "Angiv stilart", + "stylePickerFilterHint": "Skriv for at filtrere, eller skriv et nyt stilartsnavn", + "stylePickerKeysHint": "Tryk på et tal (1-9, 0) for at angive stilarten på alle valgte linjer.", + "stylePickerNewStyleX": "Ny stilart \"{0}\"", + "stylePickerNewStyleInfo": "Tryk på Enter for at tilføje denne stilart med standardindstillinger og angive den på de valgte linjer. Brug \"Administrer stilarter...\" til senere at ændre skrifttype, farver og position.", + "stylePickerCurrentStyleX": "Aktuel stilart: {0}", + "stylePickerLinesUsingStyleX": "Linjer, der bruger denne stilart: {0}", + "stylePickerMarginsXYZ": "Venstre {0}, højre {1}, lodret {2}", + "stylePickerSetStyle": "_Angiv stilart", + "stylePickerManageStyles": "Administrer stilarter...", + "stylePickerManageStylesHint": "Luk dette vindue og åbn stilartsadministrationen for at redigere skrifttyper, farver, position og mere", "add": "Tilføj", "addDotDotDot": "Tilføj...", "addToNamesListCaseSensitive": "Føj til navnelisten (der skelnes mellem store og små bogstaver)", @@ -15,7 +71,6 @@ "adjustAlpha": "Juster alfa (gennemsigtighed)", "adjustDisplayDuration": "Juster visningsvarighed", "adjustment": "Justering", - "advanced": "Avanceret", "advancedSettings": "Avancerede indstillinger", "after": "Efter", "alignment": "Justering", @@ -59,7 +114,6 @@ "bdnXml": "BDN/xml", "bdnXml8Bit": "BDN/xml 8-bit", "before": "Før", - "beforeX": "Før '{0}'", "beginning": "Begyndelse", "bluRaySup": "Blu-ray (sup)", "bold": "Fed", @@ -71,7 +125,6 @@ "bookmarkEdit": "Rediger bogmærke", "bookmarkEditForSelectedLinesX": "Rediger bogmærke for {0} valgte linjer", "bookmarksList": "Vis bogmærker", - "borderColor": "Kantfarve", "borderStyle": "Kantstil", "bottomCenter": "Bund-Center", "bottomLeft": "Nederst til venstre", @@ -98,7 +151,6 @@ "changeCasing": "Skift mellem store/små bogstaver", "changeFormatting": "Skift formatering", "changeFrameRate": "Skift billedhastighed", - "changeLanguageFilter": "Skift sprogfilter...", "changeOnce": "Skift én gang", "changeSpeed": "Skift hastighed", "character": "Tegn", @@ -140,7 +192,6 @@ "conversionCancelledByUser": "Konvertering annulleret af bruger", "convert": "Konvertér", "converted": "Konverteret", - "convertingDotDotDot": "Konverterer...", "convertingXofYDotDoDot": "Konverterer {0:#,###,##0}/{1:#,###,##0}...", "copy": "Kopiér", "copyImageToClipboard": "Kopier billede til udklipsholder", @@ -151,7 +202,6 @@ "couldNotOpenFileXErrorY": "Kunne ikke åbne filen \"{0}\". Fejl: {1}", "count": "Antal", "cps": "Tegn/sek", - "currentSubtitle": "Nuværende undertekst", "cudaRuntime": "CUDA-runtime", "currentVideoPosition": "Aktuel videoposition", "custom": "Brugerdefineret", @@ -211,7 +261,6 @@ "expand": "Udvid", "export": "Eksportér", "exportDotDotDot": "Eksportér...", - "exportToX": "Eksporter til {0}", "extendAfter": "Forlæng/forkort til linje efter", "extendBefore": "Forlæng/forkort til linje før", "extendSelectedLinesToNextShotChangeOrNextSubtitle": "Udvid valgte linjer til næste sceneskift (eller næste undertekst)", @@ -228,7 +277,6 @@ "fileExtension": "Filtypenavn", "fileName": "Filnavn", "fileNameX": "Filnavn: {0}", - "fileNameXAndSize": "Filnavn: {0} ({1})", "fileSaved": "Filen er gemt", "fileSavedToX": "Fil gemt i {0}", "fileXAlreadyExists": "Filen '{0}' findes allerede.", @@ -238,8 +286,6 @@ "find": "Find", "findNext": "Find næste", "findTextX": "Find tekst - {0}", - "fiveHundredMilliseconds": "500 millisekunder", - "fiveSeconds": "Fem sekunder", "fix": "Ret", "fixCommonErrors": "Ret almindelige fejl", "fixRightToLeft": "Ret fra højre mod venstre", @@ -263,14 +309,12 @@ "foundXInLineYZ": "Fandt \"{0}\" i linje {1}, position {2}", "foundXMatches": "Fandt {0} match", "frameRate": "Billedhastighed", - "frameRateX": "Billedhastighed: {0:0.0###}", "frames": "Billeder", "from": "Fra", "fromCurrentVideoPosition": "fra den aktuelle videoposition", "fullScreen": "Fuld skærm", "gap": "Mellemrum", "general": "Generel", - "generalText": "Generel", "generate": "Generér", "generateImportShotChanges": "Generer/importér sceneskift", "generating": "Genererer...", @@ -288,12 +332,8 @@ "help": "Hjælp", "hex": "Hex", "hide": "Skjul", - "hidePreview": "Skjul forhåndsvisning", "history": "Historik", "horizontal": "Vandret", - "hourMinutesSecondsDecimalSeparatorMilliseconds": "Time: min: sek. {0} ms", - "hourMinutesSecondsFrames": "Time:Min:Sek:Billeder", - "ip": "Ip", "id": "ID", "image": "Billede", "imageSaved": "Billedet er gemt", @@ -354,6 +394,7 @@ "mergeSelectedLinesDialog": "Flet valgte linjer som dialog", "mergeWithLineAfterAndAutoBreak": "Flet med linje efter og auto-break", "mergeWithLineAfterKeepBreaks": "Flet med linje efter (behold pauser)", + "mergeWithLineAfterAndUnbreak": "Flet med næste linje og fjern linjeskift", "mergeWithLineBeforeAndAutoBreak": "Flet med linje før og auto-break", "mergeWithLineBeforeKeepBreaks": "Flet med linje før (behold pauser)", "middleCenter": "Mellem-Center", @@ -368,13 +409,13 @@ "moveAllShotChangeOneFrameForward": "Flyt alle sceneskift ét billede frem", "multiMode": "Multitilstand", "moveDown": "Flyt ned", + "increase": "Forøg", + "decrease": "Formindsk", "moveUp": "Flyt op", "moveToTop": "Flyt til toppen", "moveToBottom": "Flyt til bunden", "multipleReplace": "Multi-erstat", - "mute": "Stum", "name": "Navn", - "negative": "Negativ", "new": "Ny", "newDotDotDot": "Ny...", "newProfile": "Ny profil", @@ -404,20 +445,15 @@ "offsetY": "Forskydning Y", "ok": "_Ok", "oneFile": "En fil", - "oneHundredMilliseconds": "100 millisekunder", - "oneSecond": "Et sekund", "oneSecondBack": "Et sekund tilbage", "oneSecondForward": "Et sekund frem", - "onlineVideoFeatureNotAvailable": "Funktion ikke tilgængelig til online video", "openContainingFolder": "Åbn indeholdende mappe", "openDictionaryFolder": "Åbn ordbogsmappe", "openFile": "Åbn fil", "openImageBasedSubtitle": "Åbn billedbaseret undertekst", "openImageFile": "Åbn billedfil", - "openOriginalSubtitleFile": "Åbn original undertekstfil...", "openOriginalSubtitleFileTitle": "Åbn den originale undertekstfil", "openOutputFolder": "Åbn outputmappe", - "openSubtitle": "Åbn undertekst...", "openSubtitleFileTitle": "Åbn undertekstfil", "openSubtitles": "Åbn undertekster...", "openVideoFile": "Åbn videofil...", @@ -432,11 +468,6 @@ "outlineWidth": "Konturbredde", "outputFolder": "Outputmappe", "outputProperties": "Outputegenskaber", - "overlap": "Overlap", - "overlapNextX": "Overlap næste ({0:#;##0.###})", - "overlapPreviousLineX": "Overlap forrige linje ({0:#;##0.###})", - "overlapStartAndEnd": "Overlap start og slut", - "overlapX": "Overlap ({0:#;##0.###})", "overwriteExistingFiles": "Overskriv eksisterende filer", "overwriteFilesInFolderX": "Overskriv filer i mappen: \"{0}\"", "overwriteQuestion": "Overskrive?", @@ -449,6 +480,7 @@ "percent": "Procent", "pickLayer": "Indstil lag", "pickOllamaModel": "Vælg Ollama-model", + "pickModel": "Vælg model", "llamaCppUseRemoteServer": "Brug ekstern server (URL)", "llamaCppEngineSettings": "Indstillinger for llama.cpp-motor", "llamaCppEngineSettingsSubtitle": "Lokal llama.cpp-serverbuild", @@ -496,7 +528,6 @@ "refresh": "Opdater", "region": "Område", "regularExpression": "Regulært udtryk", - "regularExpressionIsNotValid": "Regulært udtryk er ikke gyldigt!", "relativeToCurrentVideoPosition": "I forhold til den aktuelle videoposition", "remove": "Fjern", "removeAlignment": "Fjern justering", @@ -521,7 +552,7 @@ "requiresRestart": "Kræver genstart", "reset": "Nulstil", "resolution": "Opløsning", - "resolutionX": "Opløsning: {0}", + "retry": "Prøv igen", "reverseRightToLeftStartEnd": "Omvendt RTL start/slut", "right": "Højre", "rightToLeft": "Højre til venstre", @@ -561,8 +592,6 @@ "selectedlinesX": "Valgte linjer: {0}", "sensitivity": "Følsomhed", "separator": "Separator", - "sessionKey": "Sessionsnøgle", - "sessionKeyGenerate": "Generer ny nøgle", "setEnd": "Sæt slut", "setEndAndGoToNext": "Sæt slut og gå til næste", "setEndAndOffsetTheRest": "Sæt slut og forskyd resten", @@ -581,8 +610,9 @@ "shadowColor": "Skyggefarve", "shadowWidth": "Skyggebredde", "shiftLineBy": "Forskyd linje med", + "shotIn": "Scene ind", + "shotOut": "Scene ud", "shortcut": "Genvej", - "shortcutX": "Genvej: {0}", "shortcuts": "Genveje", "show": "Vis", "showActorColumn": "Vis kolonnen 'Skuespiller'", @@ -593,17 +623,19 @@ "showStartColumn": "Vis \"Start\" kolonne", "showHideColumn": "Vis 'Skjul' kolonne", "showHistory": "Vis historik", + "clearHistory": "Ryd historik", + "removeFromHistory": "Fjern fra historik", "showLayerColumn": "Vis kolonnen 'Lag'", "showPreview": "Vis forhåndsvisning", "showShotChangesList": "Vis liste over sceneskift", + "showShotInColumn": "Vis kolonnen \"Scene ind\"", + "showShotOutColumn": "Vis kolonnen \"Scene ud\"", "showStyleColumn": "Vis kolonnen \"Stil\"", "showTeletext": "Vis tekst-tv-kolonne i listevisning", "showTimeCodes": "Vis tidskoder", "showWpmColumn": "Vis kolonnen 'Ord/min'", "showPixelWidthColumn": "Vis kolonnen \"Pixelbredde\".", "shrink": "Formindsk", - "singleBox": "Enkelt boks", - "singleLineLengths": "Enkelt linjelængde:", "singleMode": "Enkelt tilstand", "textTotalLength": "Tekst - samlet længde", "textSingleLineMaxLength": "Tekst - maks. længde for enkeltlinje", @@ -652,16 +684,16 @@ "strikeout": "Gennemstreget", "style": "Stil", "styleExaggeration": "Stiloverdrivelse", - "styleLanguage": "Stil / sprog", "styles": "Stilarter", "subtitleFile": "Undertekstfil", + "subtitleFileChangedOutsideX": "Filen \"{0}\" er blevet ændret uden for Subtitle Edit.\n\nGenindlæs den og mist dine ændringer?", "subtitleFileName": "Navn på undertekstfil", "subtitleFileSaved": "Undertekstfil gemt", "subtitleFileSavedToX": "Undertekstfil gemt i {0}", "subtitleFiles": "Undertekstfiler", "subtitleFormats": "Undertekstformater", "subtitleLoadedX": "Undertekster indlæst: {0}", - "subtitleXOfY": "Undertekst {0} af {1}", + "subtitleReloadedChangedOutsideX": "Undertekst genindlæst (ændret uden for Subtitle Edit): {0}", "suffix": "Suffiks", "suggestions": "Forslag", "sync": "Synkroniser", @@ -673,7 +705,6 @@ "teletextColor": "Tekst-tv-farve", "teletextLine": "Tekst-tv-linje", "tenHours": "10 timer", - "tenMilliseconds": "10 millisekunder", "text": "Tekst", "textColor": "Tekstfarve", "textFiles": "Tekstfiler", @@ -700,9 +731,6 @@ "topRight": "Øverst til højre", "top": "Øverst", "totalAdjustmentX": "Samlet justering: {0}", - "totalFramesX": "Antal billeder: {0:#;##0.##}", - "totalLengthX": "Samlet længde: {0}", - "totalLengthXSplitLine": "Samlet længde: {0} (del linje!)", "translate": "Oversæt", "translatePercentX": "Oversætter: {0}%", "translateRow": "Oversæt række", @@ -711,6 +739,7 @@ "type": "Type", "unbreak": "Saml linjer", "unbreakLines": "Saml linjer", + "undelete": "Fortryd sletning", "underline": "Understregning", "undo": "Fortryd", "unknown": "Ukendt", @@ -730,13 +759,11 @@ "usages": "Anvendelser", "use": "Benyt", "useAlways": "Brug altid", - "useLargerFontForThisWindow": "Brug større skrifttype til dette vindue", "useOnce": "Brug én gang", "useOutputFolder": "Brug outputmappe", "useSourceFolder": "Brug kildemappe", "useSourceResolution": "Brug kildeopløsning", "userName": "Brugernavn", - "userNameAlreadyInUse": "Brugernavn allerede i brug", "vertical": "Lodret", "video100MsBack": "Video, 100 millisekunder tilbage", "video100MsForward": "Video, 100 millisekunder frem", @@ -746,13 +773,16 @@ "videoCustom1ForwardX": "Video, tilpassede millisekunder ({0:#,###,##0}) frem, 1", "videoCustom2BackX": "Video, tilpassede millisekunder ({0:#,###,##0}) tilbage, 2", "videoCustom2ForwardX": "Video, tilpassede millisekunder ({0:#,###,##0}) frem, 2", - "videoEncodingX": "Videokodning: {0}", "videoExtension": "Videofiludvidelse", "videoFile": "Videofil", "videoFileGenerated": "Videofil genereret", "videoFileGeneratedX": "Videofil genereret: \"{0}\"", + "videoFilesGenerated": "Videofiler genereret", + "xVideosGenerated": "{0} videoer genereret", + "xOfYVideosGenerated": "{0} af {1} videoer genereret", + "savedInX": "Gemt i {0}", + "savedInXFolders": "Gemt i {0} mapper", "videoFiles": "Videofiler", - "videoInformation": "Videoinfo", "videoOffset": "Videooffset", "videoOneFrameBack": "Video, et billede tilbage", "videoOneFrameForward": "Video, et billede frem", @@ -763,7 +793,6 @@ "videoPlayer": "Videoafspiller", "videoPosition": "Videoposition", "videoResolution": "Videoopløsning", - "viewX": "Vis {0}", "visible": "Synlig", "voice": "Stemme", "volume": "Lydstyrke", @@ -771,9 +800,7 @@ "waveformCenterOnVideoPosition": "Bølgeform midt på videoposition", "waveformPasteFromClipboard": "Indsæt fra udklipsholder", "waveformSpectrogram": "Bølgeform/spektrogram", - "webServiceUrl": "WebService URL", "width": "Bredde", - "windowPositionAndSize": "Vinduets placering og størrelse", "wordsPerMin": "Ord/min", "pixelWidth": "Pixelbredde", "wpm": "Ord/min", @@ -787,8 +814,6 @@ "noBookmarksFound": "Ingen flere bogmærker fundet", "xRequiresAnApiKey": "{0} kræver en API-nøgle", "xRequiresAValidUrl": "{0} kræver en gyldig URL (f.eks. \"http://...\" eller \"https://...\")", - "xSeconds": "{0:0.0##} sekunder", - "xSubtitles": "{0:#,###,##0} undertekster", "yes": "Ja", "zeroBytes": "0 bytes", "copyToClipboard": "Kopiér til udklipsholder", @@ -810,10 +835,8 @@ "playbackSpeed": "Afspilningshastighed", "hoursMinutesSecondsMilliseconds": "TT:MM:SS.FFF", "imageFiles": "Billedfiler", - "openAiCompatibleStt": "OpenAI-kompatibel STT", "openAiCompatibleSttEndpoint": "STT-endpoint-URL", "openAiCompatibleSttApiKey": "API nøgle", - "openAiCompatibleSttModel": "Model", "openAiCompatibleSttExtraHeaders": "Ekstra HTTP-headere", "openAiCompatibleSttTimeout": "Timeout (sekunder)", "openAiCompatibleSttLanguage": "Sprogtip", @@ -828,11 +851,9 @@ "configurationRequired": "Konfiguration påkrævet", "transcriptionError": "Transskriptionsfejl", "transcriptionComplete": "Transskription færdig", - "transcribingWithOpenAi": "Transskriberer med OpenAI Service...", "processingResponse": "Behandler svar...", "unauthorizedApiKey": "Uautoriseret: Ugyldig API-nøgle eller utilstrækkelige tilladelser.", "requestTimeout": "Timeout for anmodning: Serveren tog for lang tid at svare.", - "noSegmentsReturned": "Ingen segmenter blev returneret fra transskriptionstjenesten.", "openAiCompatibleSttUrlMissing": "OpenAI-kompatibel STT-slutpunkts-URL er påkrævet.\r\nIndtast venligst en URL og prøv igen.", "openAiCompatibleSttUrlNotResponding": "Det OpenAI-kompatible STT-slutpunkt svarede ikke:\r\n\r\n{0}\r\n\r\n\r\nBekræft venligst URL'en, og at serveren kører.", "transcriptionFailed": "Transskription mislykkedes", @@ -854,11 +875,22 @@ "videoCustom3ForwardX": "Video, tilpasset millisekunder ({0:#,###,##0}) frem, 3", "videoCustom4BackX": "Video, tilpasset millisekunder ({0:#,###,##0}) tilbage, 4", "videoCustom4ForwardX": "Video, tilpasset millisekunder ({0:#,###,##0}) frem, 4", + "videoCustom1BackAndPauseX": "Video, tilpassede millisekunder ({0:#,###,##0}) tilbage og pause, 1", + "videoCustom1ForwardAndPauseX": "Video, tilpassede millisekunder ({0:#,###,##0}) frem og pause, 1", + "videoCustom2BackAndPauseX": "Video, tilpassede millisekunder ({0:#,###,##0}) tilbage og pause, 2", + "videoCustom2ForwardAndPauseX": "Video, tilpassede millisekunder ({0:#,###,##0}) frem og pause, 2", + "videoCustom3BackAndPauseX": "Video, tilpassede millisekunder ({0:#,###,##0}) tilbage og pause, 3", + "videoCustom3ForwardAndPauseX": "Video, tilpassede millisekunder ({0:#,###,##0}) frem og pause, 3", + "videoCustom4BackAndPauseX": "Video, tilpassede millisekunder ({0:#,###,##0}) tilbage og pause, 4", + "videoCustom4ForwardAndPauseX": "Video, tilpassede millisekunder ({0:#,###,##0}) frem og pause, 4", "videoAndAudioFiles": "Video- og lydfiler", "waveform": "Bølgeform", "dashScopeSttRegion": "Region", "dashScopeSttEnableWords": "Tidskoder på ordniveau", "dashScopeSttRegionKeyHint": "Bemærk: API-nøgler til Alibaba Cloud Model Studio er regionsspecifikke - sørg for, at den valgte region matcher den region, hvor API-nøglen blev oprettet (Kina vs. International).", + "googleCloudSttProjectId": "Projekt-id (kun til Application Default Credentials)", + "googleCloudSttBucketName": "Storage bucket (tom = automatisk)", + "googleCloudSttDynamicBatching": "Dynamisk batching (ca. 5x billigere, ingen garanti for ventetid)", "onlineSttApiKeyMissing": "Der kræves en API-nøgle. Indtast din API-nøgle, og prøv igen." }, "main": { @@ -868,12 +900,15 @@ "charactersPerSecond": "Tegn/sekund: {0}", "chooseColumn": "Vælg kolonne", "columnPaste": "Kolonneindsæt", + "commandPaletteTitle": "Kommandopalet", + "commandPaletteSearchPlaceholder": "Skriv for at søge efter kommandoer...", + "commandPaletteNoCommandsFound": "Ingen matchende kommandoer", "createdEmptyTranslation": "Oprettet tom oversættelse fra den aktuelle undertekst", "deleteText": "Slet tekst", "deleteTextAndShiftCellsUp": "Slet tekst og flyt celler op", "endTimeMustBeAfterStartTime": "Sluttidspunktet skal være efter starttidspunktet.", "errorLoad7Zip": "Denne fil ser ud til at være en komprimeret 7-Zip-fil.\r\n\r\n\r\nSubtitle Edit kan ikke åbne komprimerede filer.", - "errorLoadBinaryZeroes": "Beklager, denne fil indeholder kun binære nuller!\r\n\r\n\r\nHvis du har redigeret denne fil med Subtitle Edit, kan du muligvis finde en sikkerhedskopi via menupunktet Filer -> Gendan auto-backup...", + "errorLoadBinaryZeroes": "Beklager, denne fil indeholder kun binære nuller!\n\nHvis du har redigeret denne fil med Subtitle Edit, kan du muligvis finde en sikkerhedskopi via menupunktet Filer -> Gendan auto-backup...", "errorLoadGZip": "Denne fil ser ud til at være en komprimeret GZip-fil.\r\n\r\n\r\nSubtitle Edit kan ikke åbne komprimerede filer.", "errorLoadLargeFile": "Denne fil er for stor til at åbne som en undertekstfil.", "errorLoadVideoFilePrompt": "Denne fil ser ud til at være en videofil:\r\n\r\n{0}\r\n\r\n\r\nDu kan åbne en video via \"Video -> Åbn video\" eller ved at trække og slippe en video til videoafspilleren.\r\n\r\n\r\nVil du åbne den som en videofil?", @@ -905,18 +940,20 @@ "numberOfLinesEvenlyDistributedX": "Fordelte {0} linjer jævnt", "oneLineCopiedFromOriginal": "En linje kopieret fra original undertekst", "oneLineCopiedToOriginal": "Én linje kopieret til den originale undertekst", + "onlineOnlyVideo": "Video kun online", + "onlineOnlyVideoXSizeYDownloadAndOpen": "Videofilen \"{0}\" ({1}) er kun gemt online, f.eks. i Dropbox eller iCloud Drive, og skal downloades, før den kan åbnes.\n\nDownload og åbn den nu?", "oneLineMerged": "En linje flettet", "oneLineSwitched": "En linje skiftet", "overwriteExistingCells": "Overskriv eksisterende celler", "overwriteOrShiftCellsDown": "Overskriv/skift celler ned", "parsingMatroskaFile": "Parser Matroska-fil...", + "readingDvdSubtitles": "Læser DVD-undertekster...", "pasteFromClipboardDotDotDot": "Indsæt fra udklipsholder...", "redoPerformed": "Gendan udført", "redoPerformedXActionLeft": "Gentag udført (handlinger tilbage: {0})", "removedUnicodeControlCharactersX": "Fjernede Unicode-kontroltegn fra {0} linjer", "removedXBlankLines": "Fjernede {0} tomme linjer", "replacedXWithYCountZ": "Erstattet \"{0}\" med \"{1}\" ({2} forekomster)", - "replacedXWithYInLineZ": "Erstattet \"{0}\" med \"{1}\" i linje {2}", "reversedStartAndEndingsForRightToLeftX": "Omvendt start og afslutning for højre mod venstre i {0} linjer", "ruleProfileIsX": "Regelprofilen er nu \"{0}", "saveLanguageFile": "Gem sprogfil", @@ -924,7 +961,6 @@ "shiftTextCellsDown": "Skift tekstceller ned", "singleLineLength": "Linjelængde: ", "speedIsNowX": "Hastigheden er nu \"{0}", - "spellCheckResult": "Stavekontrol gennemført.\r\n\r\n• Antal ord rettet: {0}\r\n• Antal ord sprunget over: {1}", "subtitleGridFormattingX": "Gitterformatering: {0}", "subtitleImportedFromMatroskaFile": "Undertekst importeret fra Matroska-fil", "textDown": "Tekst ned", @@ -951,13 +987,14 @@ "trimmedXLines": "Trimmet {0} undertekstlinjer", "pastedXLinesOverSelectedLines": "Indsatte {0} linje(r) over de valgte linjer", "pastedXOfYLinesOverSelectedLines": "Indsatte {0} af {1} linje(r) over de valgte linjer - resten passede ikke i markeringen", + "insertedXLinesFromClipboard": "Indsatte {0} linje(r) fra udklipsholderen", "openOriginalDifferentNumberOfSubtitlesXY": "Den originale undertekstfil har ikke det samme antal undertekster som den aktuelle undertekstfil.\r\n\r\n\r\n• Originale undertekster: {0}\r\n\r\n• Aktuelle undertekster: {1}", - "importXMatchingOriginalLines": "Vil du importere {0} matchende originale undertekster?", "originalTextReadOnly": "Original tekst (skrivebeskyttet)", "originalTextEditMode": "Original tekst (redigeringstilstand)", "originalIsReadOnlyNotSaved": "Den originale undertekst er en skrivebeskyttet reference og blev ikke gemt", "originalIsEmptyNotSaved": "Den originale undertekst indeholder slet ingen tekst og blev ikke gemt", "originalIsReadOnlyReference": "Den originale undertekst er åbnet som en skrivebeskyttet reference", + "closeTranslationQuestionXY": "Luk oversættelsen \"{0}\"?\n\nDen originale undertekst \"{1}\" bliver den undertekst, du redigerer. Selve oversættelsesfilen ændres ikke.", "allowEditOfOriginalSubtitle": "Tillad redigering af den originale undertekst", "showAllOriginalLinesX": "Vis alle originale linjer ({0} har ingen match her)", "showAllOriginalLinesHint": "Linjerne uden match vises som ekstra rækker, så du kan se, hvad oversættelsen mangler.", @@ -992,6 +1029,7 @@ "fileExportedInFormatXToY": "Fil eksporteret i formatet {0} til {1}", "fileExportedInFormatXToFileY": "Fil eksporteret i formatet \"{0}\" til filen \"{1}", "fixedXLines": "Rettede {0} linjer", + "toolXChangedYLines": "{0}: {1} linjer ændret", "transcriptionCompletedWithXLines": "Transskription afsluttet med {0} linjer", "openSubtitleFileX": "Vil du åbne undertekstfilen \"{0}\"?", "replacedXOccurrences": "Erstattede {0} forekomster", @@ -1053,14 +1091,15 @@ "multipleReplace": "_Multipel erstatning...", "fillSelectedLinesWithClipboard": "Udfyld valgte linjer med udklipsholdertekst", "goToLineNumber": "_Gå til linje nummer...", + "commandPalette": "Kommando_palet...", "rightToLeftMode": "_Højre-til-venstre-tilstand", "modifySelectionDotDotDot": "Rediger _valg...", "tools": "_Værktøjer", - "toolsSelectedLines": "_Værktøjer (valgte linjer)", "adjustDurations": "_Juster varigheder...", "applyDurationLimits": "Anvend varighed _grænser...", "batchConvert": "Batch _konverter...", "beautifyTimeCodes": "Forskøn tidskoder...", + "improveTimeCodes": "Forbedr tidskoder (forced alignment)...", "bridgeGaps": "_Byg bro over huller...", "applyMinGap": "Anvend min. afstand mellem undertekster...", "changeCasing": "_Skift store/små bogstaver...", @@ -1201,6 +1240,9 @@ "selectCurrentLineWhilePlayingHint": "Vælg den aktuelle undertekst, mens du spiller {0}", "videoPosition": "Videoposition {0}", "videoPositionTextBox": "Tekstboks til videoposition {0}", + "toolbarLineBreakX": "Linjeskift {0} (resten af værktøjslinjen fortsætter på en ny række)", + "initialText": "Oprindelig tekst for valgt linje", + "initialTextHint": "Teksten i den valgte linje, som den var, da linjen blev valgt", "hideWaveformToolbar": "Skjul værktøjslinje {0}", "resetZoomAndSpeed": "Nulstil zoom og afspilningshastighed {0}", "removeBlankLines": "Fjern tomme linjer {0}", @@ -1214,6 +1256,15 @@ "textPlayHint": "Afspil aktuel undertekst og stop ved slutningen {0}", "textPauseHint": "Pause afspilning {0}", "textNextHint": "Afspil næste undertekst og stop ved slutningen {0}", + "moveSelectedLines": "Flyt valgte linjer (tilbage/frem-knapper)", + "moveSelectedLinesAndFollowing": "Flyt valgte linjer og alle efterfølgende (tilbage/frem-knapper)", + "moveAllLines": "Flyt alle linjer (tilbage/frem-knapper)", + "moveSelectedLinesBackHint": "Flyt valgte linjer {0} ms tilbage {1}", + "moveSelectedLinesForwardHint": "Flyt valgte linjer {0} ms frem {1}", + "moveSelectedLinesAndFollowingBackHint": "Flyt valgte linjer og alle efterfølgende {0} ms tilbage {1}", + "moveSelectedLinesAndFollowingForwardHint": "Flyt valgte linjer og alle efterfølgende {0} ms frem {1}", + "moveAllLinesBackHint": "Flyt alle linjer {0} ms tilbage {1}", + "moveAllLinesForwardHint": "Flyt alle linjer {0} ms frem {1}", "guessStartNoLineSelected": "Gæt start: ingen linje valgt", "guessStartTimeCodesLocked": "Gæt start: tidskoder er låst", "guessStartNoWaveform": "Gæt start: ingen bølgeform", @@ -1260,20 +1311,66 @@ "xNumberOfDifferenceAndPercentChanged": "Antal forskelle: {0} ({1:0.##} % af ordene ændret)", "xNumberOfDifferenceAndPercentLettersChanged": "Antal forskelle: {0} ({1:0.##} % af bogstaverne ændret)", "showOnlyDifferences": "Kun forskelle", - "ignoreLineBreaks": "Ignorer linjeskift", "ignoreWhitespace": "Ignorer mellemrum", "ignoreWhitespaceHint": "Linjer, der kun adskiller sig i mellemrum, tabulatorer eller linjeskift, tæller ikke som forskellige", "ignoreFormatting": "Ignorer formatering", - "onlyLookForDifferencesInText": "Se kun efter forskelle i tekst", - "cannotCompareWithImageBasedSubtitles": "Kan ikke sammenlignes med billedbaserede undertekster", - "statisticsTitle": "Statistik", "ignoreFormattingHint": "Linjer, der kun adskiller sig i formateringstags som eller {\\an8}, tæller ikke som forskellige", "showOnlyDifferencesInText": "Kun forskelle i tekst", + "ignoreNumbering": "Ignorer nummerering", + "ignoreNumberingHint": "Linjer, der kun adskiller sig i deres nummer, tæller ikke som forskellige", + "ignoreTimeDifferenceMs": "Tidstolerance (ms)", + "ignoreTimeDifferenceMsHint": "Start- og sluttider, der afviger med dette antal millisekunder eller mindre, tæller ikke som forskellige", + "compareDifferences": "Forskelle", + "compareTextDifferences": "Tekstforskelle", + "compareCurrent": "Aktuel", + "compareReference": "Reference", + "compareEditable": "Redigerbar", + "compareEditableHint": "Ændringer foretaget her overføres til underteksten, når du klikker på Anvend", + "compareReadOnly": "Skrivebeskyttet", + "compareTakeFromReference": "Overtag tekst og timing fra referencen", + "compareInsertFromReference": "Indsæt denne linje i den aktuelle undertekst", + "compareDeleteFromCurrent": "Slet denne linje fra den aktuelle undertekst", + "compareTakeText": "Overtag tekst", + "compareTakeTiming": "Overtag timing", + "compareEditLine": "Rediger linje", + "compareEditHint": "Ctrl+Enter for at gemme, Esc for at annullere", + "compareEdited": "Redigeret", + "compareOnePendingChange": "1 ventende ændring", + "compareXPendingChanges": "{0} ventende ændringer", + "compareDiscardXChanges": "Kassér de {0} ændring(er) foretaget i Sammenlign?", + "compareXChangesApplied": "Sammenlign: {0} ændring(er) anvendt", + "compareChangeTextX": "#{0} tekst fra reference", + "compareChangeTimingX": "#{0} timing fra reference", + "compareChangeTextAndTimingX": "#{0} tekst og timing fra reference", + "compareChangeEditedX": "#{0} redigeret", + "compareChangeInsertedX": "#{0} indsat", + "compareChangeDeletedX": "#{0} slettet", + "compareSyncPoint": "Synkroniseringspunkt", + "compareSyncPointHint": "Synkroniseringspunkt - disse to linjer vises altid som et par, og linjerne over og under afstemmes hver for sig", + "compareSyncPickCurrent": "Synkroniseringspunkt: brug denne aktuelle linje", + "compareSyncPickReference": "Synkroniseringspunkt: brug denne referencelinje", + "compareSyncRemove": "Fjern synkroniseringspunkt", + "compareClearXSyncPoints": "Ryd synkroniseringspunkter ({0})", + "compareSyncCurrentPickedX": "Aktuel #{0} valgt som synkroniseringspunkt - vælg den tilsvarende referencelinje, og klik på Synkroniser", + "compareSyncReferencePickedX": "Reference #{0} valgt som synkroniseringspunkt - vælg den tilsvarende aktuelle linje, og klik på Synkroniser", + "compareSyncWithCurrentX": "Synkroniser med aktuel #{0}", + "compareSyncWithReferenceX": "Synkroniser med reference #{0}", + "compareSyncApply": "Synkroniser", + "compareSyncPointSetXY": "Synkroniseringspunkt angivet: aktuel #{0} og reference #{1} vises nu som et par", + "compareSyncAlreadyPairedXY": "Aktuel #{0} og reference #{1} vises allerede som et par med samme start - intet at synkronisere", + "compareSyncPointShiftedXYZW": "Synkroniseringspunkt angivet: aktuel #{0}-#{1} forskudt {2} til at starte med reference #{3}", + "compareChangeSyncShiftXYZ": "#{0}-#{1} forskudt {2} (synkroniseringspunkt)", + "compareTimingDeltaHint": "Hvor meget senere (+) eller tidligere (−) referencen starter og slutter end den aktuelle linje", "loadXFromFile": "Indlæs \"{0}\" fra filen", + "compareLoadSavedFile": "Indlæs gemt fil", "saveCompareHtmlTitle": "Gem sammenligne HTML-fil", "pickMatroskaTrackX": "Vælg Matroska-spor - {0}", "pickTransportStreamTrackX": "Vælg transportstrømspor - {0}", + "chapters": "Kapitler", + "dvdVobFilesMissingX": "VOB-filer mangler ({0}% fundet)", "pickMp4TrackX": "Vælg MP4-spor - {0}", + "pickMxfTrackX": "Vælg MXF-spor - {0}", + "pickMpegTrackX": "Vælg MPEG-spor - {0}", "rosettaProperties": "Timed Text Rosetta IMSC egenskaber", "rosettaFontSize": "Skriftstørrelse (rækkehøjde)", "propertyTimeBase": "Tidsbasis", @@ -1283,7 +1380,6 @@ "propertyDefaultRegion": "Standardregion", "propertyStyleAttributeName": "Navn på stilattribut", "propertyTimeCodeFormat": "Tidskodeformat", - "propertyFileExtension": "Filendelse", "propertyTopOrigin": "Øverste origo", "propertyTopExtent": "Øverste udstrækning", "propertyBottomOrigin": "Nederste origo", @@ -1291,13 +1387,9 @@ "xProperties": "{0} egenskaber", "ebuSaveOptions": { "title": "EBU-gemmeindstillinger", - "generalSubtitleInformation": "Generel undertekstinformation", "codePageNumber": "Kodesidenummer", "diskFormatCode": "Diskformatkode", "displayStandardCode": "Visningsstandardkode", - "colorRequiresTeletext": "Farver kræver tekst-tv!", - "alignmentRequiresTeletext": "Justering kræver tekst-tv!", - "teletextCharsShouldBe38": "'Maks. antal tegn pr. linje' for tekst-tv skal være 38!", "characterCodeTable": "Tegntabel", "languageCode": "Sprogkode", "originalProgramTitle": "Original programtitel", @@ -1314,7 +1406,6 @@ "maxNumberOfDisplayableRows": "Maks. antal linjer", "diskSequenceNumber": "Disksekvensnummer", "totalNumberOfDisks": "Samlet antal diske", - "import": "Importér...", "textAndTimingInformation": "Tekst- og timingoplysninger", "justificationCode": "Justeringskode", "verticalPosition": "Lodret position", @@ -1331,11 +1422,6 @@ "errors": "Fejl", "errorsX": "Fejl: {0}", "maxLengthError": "Linje {0} overskrider maks. længde ({1}) med {2}: {3}", - "textUnchangedPresentation": "Uændret præsentation", - "textLeftJustifiedText": "Venstrejusteret tekst", - "textCenteredText": "Centreret tekst", - "textRightJustifiedText": "Højrejusteret tekst", - "useBoxForOneNewLine": "Markér 'Brug boks omkring tekst' for kun ét linjeskift", "maxLengthErrorTeletextColored": "Linje {0}-{1}: 36 (ikke {2}) bør være maksimalt antal tegn for farvet tekst i dobbelt højde", "maxLengthErrorTeletextWhite": "Linje {0}-{1}: 37 (ikke {2}) bør være maksimalt antal tegn for hvid tekst i dobbelt højde", "maxLengthErrorTeletextSingleHeight": "Linje {0}: 38 (ikke {1}) bør være maksimalt antal tegn for hvid tekst i enkelt højde", @@ -1360,22 +1446,29 @@ "formattingDotDotDot": "Formaterer...", "imageBasedSubtitleForEditDotDotDot": "Billedbaseret undertekst til redigering...", "imageBasedSubtitleForOcrDotDotDot": "Billedbaseret undertekst til OCR...", + "dvdSubtitlesDotDotDot": "Undertekster fra DVD (IFO/VOB)...", + "titleImportDvd": "Importér undertekster fra DVD", + "dvdIfoFile": "IFO-fil", + "dvdVobFiles": "VOB-filer", + "dvdVideoStandard": "Videostandard", + "dvdStartRipping": "Start ripping", + "dvdRippingAborted": "Ripping afbrudt", + "dvdOpenIfoFile": "Åbn DVD IFO-fil", + "dvdAddVobFiles": "Tilføj VOB-filer", + "dvdIfoFiles": "DVD IFO-filer", + "dvdVobFileType": "DVD VOB-filer", + "dvdDropHint": "Åbn en IFO-fil (VIDEO_TS\\VTS_01_0.IFO) eller tilføj VOB-filer - eller slip dem her", + "dvdNotAnIfoFileX": "{0} er ikke en DVD IFO-fil", + "dvdMenuIfoNoTitleSetsX": "Ingen title sets (VTS_xx_0.IFO) fundet ved siden af {0}", + "dvdEncryptedXOfY": "{0} af de {1} undertekstpakker er stadig CSS-krypterede - disse VOB-filer blev kopieret uden dekryptering, så nogle undertekstbilleder vil være forvanskede.\n\nDekryptér DVD'en med et DVD-rippeværktøj først for at få et rent resultat.\n\nFortsæt alligevel?", "splitTextAt": "Del tekst ved", "blankLines": "Tomme linjer", "oneLineIsOneSubtitle": "Én linje er én undertekst", "twoLinesAreOneSubtitle": "To linjer er én undertekst", "importFilesDotDotDot": "Importer filer...", "multipleFiles": "Importer fra flere tekstfiler (én fil er én undertekst)", - "importOptions": "Importmuligheder", - "autoSplitText": "Automatisk opdeling af tekst", - "lineMode": "Linjetilstand", "maxLineLength": "Max linjelængde", - "maxLinesPerSubtitle": "Max linjer pr. undertekst", - "minGapBetweenSubtitles": "Minimum mellemrum mellem undertekster", "mergeShortLines": "Flet korte linjer", - "removeLinesWithoutLetters": "Fjern linjer uden bogstaver", - "splitAtEndCharsSetting": "Opdel ved sluttegn", - "takeTimeFromCurrentFile": "Tag tid fra den aktuelle fil", "fixed": "Fast", "numberOfSubtitlesX": "Antal undertekster: {0}", "numberOfSubtitlesXForcedY": "Antal undertekster: {0} ({1} tvungne)", @@ -1387,14 +1480,18 @@ "forcedAlignerProgress": "Justerer... vindue {0} af {1}, {2} af {3} linjer", "forcedAlignerSetupTitle": "Justér tidskoder via forced aligner", "forcedAlignerSetupIntro": "En forced aligner matcher den undertekst, du allerede har, mod lyden uden først at transskribere den. Lange videoer justeres i bidder, så enhver længde fungerer.", + "forcedAlignerEndsFromSpeech": "Angiv sluttider ud fra isoleret tale (langsom)", + "forcedAlignerEndsFromSpeechHint": "En forced aligner finder, hvor en linje starter, ikke hvor den slutter, så sluttider kommer normalt fra læsetiden. Når dette er slået til, fjernes musik og lydeffekter først fra lyden, og hver linje slutter, hvor dens tale bliver stille. Tager omtrent lige så lang tid som selve videoen med en GPU - og mange gange længere uden.", + "forcedAlignerIsolatingSpeech": "Isolerer tale... {0}", + "forcedAlignerIsolatingSpeechFailed": "Kunne ikke isolere talen - sluttider blev i stedet angivet ud fra læsetid.", "forcedAlignerModel": "Aligner-model", - "forcedAlignerDownloadEngine": "Download / opdater motor..." + "forcedAlignerDownloadEngine": "Download / opdater motor...", + "forcedAlignerEstimatedXOfY": "{0} af {1} linjer kunne ikke justeres og blev placeret efter læsetid - deres tidskoder er kun anslåede. Manuskriptet er sandsynligvis længere end det, der bliver sagt i videoen." }, "export": { "exportImagesProfiles": "Eksporter billedprofiler", "leftRightMargin": "Venstre/højre margin", "topBottomMargin": "Top/bund margin", - "titleExportBluRaySup": "Eksporter Blu-ray (sup)", "lineSpacingPercent": "Linjeafstand %", "paddingLeftRight": "Udfyldning venstre/højre", "paddingTopBottom": "Udfyldning top/bund", @@ -1435,10 +1532,21 @@ "titleExportDCinemaInteropPng": "D-Cinema interop/png", "titleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", "imageBasedSubtitleSaved": "Billedbaseret undertekst er gemt", - "titleExportBdnXml": "Eksporter BDN/xml", "titleExportWebVttThumbnails": "Eksporter WebVTT (miniaturebilleder)", "fullFrameImage": "Fuldt billedfelt", "fullFrameImageHint": "Gør hvert billede lige så stort som videobilledet med underteksten på sin plads", + "stereo3D": "3D", + "stereo3DHint": "Til 3D-video: tegn underteksten én gang i hvert øjes halvdel af billedet", + "halfSideBySide": "Halv side-om-side", + "halfTopBottom": "Halv top/bund", + "depth3D": "Dybde", + "depth3DHint": "Hvor langt underteksten træder ud af skærmen - positiv bringer den tættere på, negativ skubber den tilbage", + "plane3D": "3D-Plane", + "plane3DHint": "Giv hver undertekst den dybde, som en 3D Blu-ray gemmer for den, fra en 3D-Plane-fil (.ofs) lavet med BD3D2MK3D eller OFSExtractor. Dybde bruges, hvor 3D-Plane ikke har nogen", + "openPlane3DTitle": "Åbn 3D-Plane-fil", + "unableToLoadPlane3DX": "Kan ikke indlæse 3D-Plane: {0}", + "plane3DXDepthYToZ": "{0} (dybde {1} til {2})", + "plane3DXNoDepth": "{0} (ingen dybdeværdier)", "textEffect": "Teksteffekt", "textEffectSettingsTitle": "Indstillinger for teksteffekt", "textEffectPreset": "Forudindstilling", @@ -1470,13 +1578,10 @@ "statistics": { "title": "Statistik", "titleWithFileName": "Statistik - {0}", - "generalStatistics": "Generel statistik", - "mostUsed": "Mest brugt...", "mostUsedLines": "Mest brugte linjer", "mostUsedWords": "Mest brugte ord", "nothingFound": "Intet fundet", "numberOfLinesX": "Antal undertekstlinjer: {0:#,##0}", - "numberOfFilesX": "Antal undertekstfiler: {0:#,##0}", "lengthInFormatXinCharactersY": "Antal tegn som {0}: {1:#,###,##0}", "numberOfCharactersInTextOnly": "Antal tegn kun i tekst: {0:#,###,##0}", "totalDuration": "Samlet varighed af alle undertekster: {0:#,##0}", @@ -1517,7 +1622,6 @@ "gapMaximum": "Mellemrum - maksimum: {0:#,##0} ms", "gapAverage": "Mellemrum - gennemsnit: {0:#,##0.##} ms", "gapExceedingMinimum": "Mellemrum - under minimum ({0:#,##0} ms): {1} ({2:0.00}%)", - "export": "Eksportere...", "subtitles": "Undertekster", "words": "Ord", "totalDurationShort": "Samlet varighed", @@ -1547,6 +1651,21 @@ "restoreXFromY": "Vil du gendanne \"{0}\" fra {1}?", "deleteAllSubtitleBackups": "Vil du slette alle undertekst backup-filer?", "deleteAll": "Slet alle", + "subtitles": "Undertekster", + "settingsBackupInfo": "Settings.json sikkerhedskopieres, når Subtitle Edit starter, højst én gang hver {0} dag(e) og kun hvis indstillingerne er ændret. De nyeste {1} sikkerhedskopier beholdes.", + "settingsBackupInfoEveryStart": "Settings.json sikkerhedskopieres hver gang Subtitle Edit starter, hvis indstillingerne er ændret. De nyeste {0} sikkerhedskopier beholdes.", + "settingsBackupOff": "Automatisk sikkerhedskopiering af indstillinger er slået fra (Muligheder → Indstillinger → Fil).", + "lastSettingsBackupX": "Seneste sikkerhedskopi: {0}", + "noSettingsBackupsYet": "Ingen sikkerhedskopier af indstillinger endnu", + "openSettingsBackupFolder": "Åbn mappe med sikkerhedskopier af indstillinger", + "backUpSettingsNow": "Sikkerhedskopiér nu", + "settingsBackedUp": "De aktuelle indstillinger blev sikkerhedskopieret.", + "restoreSettings": "Gendan indstillinger", + "restoreSettingsFromX": "Vil du erstatte dine aktuelle indstillinger med sikkerhedskopien fra {0}?\n\nDine aktuelle indstillinger sikkerhedskopieres først. Nogle ændringer træder først i kraft, når Subtitle Edit genstartes.", + "settingsRestored": "Indstillingerne blev gendannet. Genstart Subtitle Edit, for at alle ændringer træder i kraft.", + "settingsRestoreFailed": "Kunne ikke gendanne indstillinger: {0}", + "settingsBackupNotValid": "sikkerhedskopien er ikke en gyldig indstillingsfil, så dine aktuelle indstillinger blev beholdt", + "deleteAllSettingsBackups": "Vil du slette alle sikkerhedskopifiler af indstillinger?", "xBackups": "{0} sikkerhedskopier" }, "propertiesDCinema": { @@ -1561,22 +1680,16 @@ "editRate": "Editrate", "timeCodeRate": "Tidskodehastighed", "startTime": "Starttidspunkt", - "font": "Skrifttype", "fontId": "Skrifttype-id", "fontUri": "Skrifttype URI", - "generate": "Generer", - "fontColor": "Skriftfarve", "chooseColor": "Vælg farve", "fontEffect": "Skrifttypeeffekt", "effectColor": "Effektfarve", - "fontSize": "Skriftstørrelse", "topBottomMargin": "Top/bund margin", "fadeUpTime": "Optoningstid", "fadeDownTime": "Udtoningstid", - "frames": "Billeder", "zPosition": "Z-position", - "zPositionHelp": "Positive tal flytter teksten længere væk, negative tal flytter teksten tættere på; hvis z-positionen er nul, er det 2D", - "export": "Eksportere..." + "zPositionHelp": "Positive tal flytter teksten længere væk, negative tal flytter teksten tættere på; hvis z-positionen er nul, er det 2D" }, "compareOnlyInOneFile": "Kun i én fil", "compareTextOrTimeDifference": "Tekst-/tidsforskel", @@ -1616,8 +1729,8 @@ "lengthLessThan": "Længde <", "lengthGreaterThan": "Længde >", "pixelLengthGreaterThan": "Pixellængde >", - "gapLessThan": "Mellemrum i ms <", - "gapGreaterThan": "Mellemrum i ms >", + "gapLessThan": "Mellemrum i ms <", + "gapGreaterThan": "Mellemrum i ms >", "exactlyOneLine": "Præcis én linje", "exactlyTwoLines": "Præcis to linjer", "moreThanTwoLines": "Mere end to linjer", @@ -1642,7 +1755,6 @@ "selectionIntersect": "Kryds med markering" }, "multipleReplace": { - "title": "Flere udskiftninger", "editRule": "Rediger regel", "newRule": "Ny regel", "editCategory": "Rediger kategori", @@ -1659,24 +1771,23 @@ "findWhat": "Find hvad", "descriptionOptional": "Beskrivelse (valgfrit)", "invalidRegularExpressionX": "Ugyldigt regulært udtryk: {0}", - "regularExpressionTooSlowX": "Det regulære udtryk gav op efter {0} sekunder - reglen springes over, prøv et enklere mønster" + "regularExpressionTooSlowX": "Det regulære udtryk gav op efter {0} sekunder - reglen springes over, prøv et enklere mønster", + "moveToCategory": "Flyt til kategori" }, "find": { "searchTextWatermark": "Søg tekst...", "wholeWord": "Hele ord", - "caseSensitive": "Der skelnes mellem store og små bogstaver", - "caseInsensitive": "Ufølsom mellem store og små bogstaver", "findPrevious": "F_ind forrige", "findNext": "_Find næste", "replaceAndFindNext": "_Erstat og find næste", "replaceAll": "Erstat _alle", - "replaceTitle": "Erstat", - "replaceWith": "Udskift med", "replaceTextWatermark": "Udskift med...", "replaceIn": "Erstat/søg i", "replaceInTextAndOriginal": "Tekst og original tekst", "replaceInTextOnly": "Kun tekst", - "replaceInOriginalOnly": "Kun original tekst" + "replaceInOriginalOnly": "Kun original tekst", + "replacedOneOccurrence": "Erstattede én forekomst", + "replacedXOccurrences": "Erstattede {0} forekomster" }, "noSubtitleSelected": "Ingen undertekst valgt", "pleaseSelectExactlyOneSubtitle": "Vælg venligst præcis én undertekst." @@ -1687,6 +1798,7 @@ "xLinesYSubtitles": "{0} linjer, {1} undertekster", "xLinesYSubtitlesZErrors": "{0} linjer, {1} undertekster, {2} fejl", "couldNotParseAsX": "Kunne ikke fortolkes som {0}", + "readAsXUseAsY": "Kilden kunne ikke læses som {1}, men den kunne læses som {0}.\nBrug linjerne og fortsæt med at gemme som {1}?", "selectedXCharactersYLines": "Valgt: {0} tegn i {1} linje(r)", "replacedXOccurrences": "Erstattede {0} forekomst(er)", "invalidRegularExpression": "Ugyldigt regulært udtryk", @@ -1698,7 +1810,6 @@ "closeSearch": "Luk søgning" }, "tools": { - "pickAlignmentTitle": "Vælg justering", "removeUnicodeCharacters": { "title": "Fjern/erstat Unicode-tegn", "charactersFoundX": "Unicode-tegn fundet: {0}", @@ -1708,30 +1819,22 @@ "pickFontNameInstalledFonts": "Installerede skrifttyper", "pickFontNameCollectedFonts": "Indsamlede skrifttyper", "colorPickerTitle": "Vælg farve", + "colorPickerBrightness": "Lysstyrke", "filterLayersTitle": "Filterlag til visning", "filterLayersHideFromWaveform": "Skjul fra bølgeform/spektrogram", "filterLayersHideFromSubtitleGrid": "Skjul fra undertekstgitter", "filterLayersHideFromVideoPreview": "Skjul fra videoeksempel", "pickSubtitleFormat": "Vælg undertekstformat", - "pickLayerTitle": "Vælg lag", "recentColors": "Nylige farver", "fixCommonErrors": { - "title": "Ret almindelige fejl", - "step1": "Trin 1/2 - Vælg hvilke fejl der skal rettes", - "whatToFix": "Hvad skal rettes", - "example": "Eksempel", - "selectAll": "Vælg alle", - "inverseSelection": "Invertér markering", "back": "< &Tilbage", "next": "&Næste >", - "step2": "Trin 2/2 - Bekræft rettelser", "fixes": "Rettelser", "ruleDetailsDotDotDot": "Regeldetaljer...", "showOnlyThisRule": "Vis kun rettelser fra denne regel", "appliedRulesForLineX": "Anvendt(e) regel/regler for linje {0}", "ruleX": "Regel: {0}", "log": "Log", - "function": "Funktion", "removedEmptyLine": "Fjern tom linje", "removedEmptyLineAtTop": "Fjern tom linje øverst", "removedEmptyLineAtBottom": "Fjern tom linje nederst", @@ -1752,13 +1855,13 @@ "removeLineBreaksPixelWidth": "Saml undertekster, der kan være på én linje (pixelbredde)", "fixUppercaseIInsideLowercaseWords": "Ret stort 'i' inde i småbogstavsord (OCR-fejl)", "fixDoubleApostrophes": "Ret dobbelte apostroffer ('') til ét anførselstegn (\")", + "fixMisreadQuotes": "Ret apostroffer fejllæst som dobbelte anførselstegn (OCR, engelsk)", "addPeriods": "Tilføj punktum efter linjer, hvor næste linje starter med stort bogstav", "startWithUppercaseLetterAfterParagraph": "Start med stort bogstav efter afsnit", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Start med stort bogstav efter punktum inde i afsnit", "startWithUppercaseLetterAfterColon": "Start med stort bogstav efter kolon/semikolon", "fixLowercaseIToUppercaseI": "Ret enkeltstående lille 'i' til 'I' (engelsk)", "fixCommonOcrErrors": "Ret almindelige OCR-fejl (ved brug af OCR-erstatningsliste)", - "commonOcrErrorsFixed": "Almindelige OCR-fejl rettet (OcrReplaceList-fil brugt): {0}", "removeSpaceBetweenNumber": "Fjern mellemrum mellem tal", "breakDialogsOnOneLine": "Del dialoger på én linje", "removeDialogFirstInNonDialogs": "Fjern indledende bindestreg i første linje for ikke-dialoger", @@ -1775,18 +1878,17 @@ "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Foo
bar!\r\n-> Foo bar!", "fixDoubleApostrophesExample": "''Har dobbelte enkelt anførselstegn'' -> \"Har enkelt dobbelte anførselstegn", + "fixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "addPeriodsExample": "Hello world -> Hello world.", "startWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: Foobar!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Hello there! how are you? -> Hello there! How are you?", "startWithUppercaseLetterAfterColonExample": "Speaker: hello world! -> Speaker: Hello world!", "removeHyphensSingleLineExample": "- Foobar. -> Foobar.", "fix3PlusLinesExample": "Foo
bar
baz! -> Foo bar baz!", - "xMissingQuotesAdded": "Manglende anførselstegn tilføjet: {0}", "fix3PlusLine": "Ret undertekst med mere end to linjer", "fix3PlusLines": "Ret undertekster med mere end to linjer", "analysing": "Analyserer...", "nothingToFix": "Intet at rette :)", - "fixesFoundX": "Fundne rettelser: {0}", "xFixesApplied": "Anvendte rettelser: {0}", "nothingFixableBut": "Intet kunne rettes automatisk. Underteksten indeholder fejl - se loggen for detaljer", "xFixedBut": "{0} problem(er) rettet, men underteksten indeholder stadig fejl - se loggen for detaljer", @@ -1794,7 +1896,6 @@ "fixFirstLetterToUppercaseAfterParagraph": "Ret første bogstav til stort efter afsnit", "mergeShortLine": "Flet kort linje (enkelt sætning)", "mergeShortLineAll": "Flet kort linje (alle undtagen dialoger)", - "unbreakShortLinePixelWidth": "Saml kort linje (pixelbredde)", "breakLongLine": "Ombryd lang linje", "fixLongDisplayTime": "Ret lang visningstid", "fixInvalidItalicTag": "Ret ugyldigt kursiv-tag", @@ -1817,7 +1918,6 @@ "fixUppercaseIInsideLowercaseWord": "Ret stort 'i' inde i småbogstavsord", "fixMissingPeriodAtEndOfLine": "Tilføj manglende punktum i slutningen af linjen", "refreshFixes": "Opdater tilgængelige rettelser", - "applyFixes": "&Anvend valgte rettelser og luk", "autoBreak": "Auto-&ombryd", "unbreak": "&Saml", "fixDoubleDash": "Ret '--' -> '...'", @@ -1836,8 +1936,6 @@ "fixSpaceBetweenNumbersExample": "1 100 -> 1100", "fixDialogsOneLineExample": "Hi John! - Hi Ida! -> Hi John!
- Hi Ida!", "removeDialogFirstInNonDialogsExample": "- How are you? -> How are you?", - "selectDefault": "Vælg standard", - "setDefault": "Angiv aktuelle rettelser som standard", "fixContinuationStyleX": "Ret fortsættelsesstil: {0}", "fixUnnecessaryLeadingDots": "Fjern unødvendige indledende punktummer", "fixCommonErrorsProfiles": "Profiler til retning af almindelige fejl", @@ -1845,7 +1943,6 @@ "searchRulesDotDotDot": "Søgeregler...", "goToApplyFixes": "Gå til at anvende rettelser", "backToFixList": "Tilbage til rettelseslisten", - "applyFixesAndClose": "Anvend rettelser og luk", "fixCommonOcrErrorsStep2": "Ret almindelige fejl, trin 2 (anvend rettelser)", "fixCommonOcrErrorsStep2FixesFoundX": "Ret almindelige fejl, trin 2 - Rettelser fundet: {0}", "action": "Handling", @@ -1859,18 +1956,11 @@ "adjustDurations": { "title": "Juster varigheder", "adjustVia": "Juster via", - "seconds": "Sekunder", - "percent": "Procent", "recalculate": "Genberegn", "addSeconds": "Tilføj sekunder", - "setAsPercent": "Angiv som procent af varighed", "note": "Bemærk: Visningstiden vil ikke overlappe starttiden for næste tekst", "fixed": "Fast", - "milliseconds": "Millisekunder", "extendOnly": "Forlæng kun", - "enforceDurationLimits": "Håndhæv minimum- og maksimumvarighed", - "checkShotChanges": "Udvid ikke forbi sceneskift", - "batchCheckShotChanges": "Respektér sceneskift (hvis tilgængeligt)", "recalculateRequiresOcrNote": "Genberegning er utilgængelig — en eller flere undertekster har ingen OCR-tekst. Kør OCR først." }, "applyDurationLimits": { @@ -1878,6 +1968,8 @@ "fixMinDurationMs": "Fast minimumsvarighed (ms)", "doNotGoPastShotChange": "Gå ikke forbi sceneskifte", "fixMaxDurationMs": "Ret maksimal varighed (ms)", + "fixMinDurationFrames": "Ret minimumsvarighed (billeder)", + "fixMaxDurationFrames": "Ret maksimumsvarighed (billeder)", "minimumDurationMilliseconds": "Minimal varighed (millisekunder):", "maximumDurationMilliseconds": "Maksimal varighed (millisekunder):", "maxDurationShouldBeHigherThanMinDuration": "Maksimal varighed bør være højere end minimumsvarighed", @@ -1897,12 +1989,8 @@ }, "beautifyTimeCodes": { "title": "Forskøn tidskoder", - "beautifySettings": "Forskøn indstillinger", "snapToFrames": "Fastgør til billeder", - "frameGap": "Billedmellemrum", "minDuration": "Min varighed (ms)", - "shotChangeThreshold": "Sceneskift-tærskel (ms)", - "shotChangeOffset": "Sceneskift-forskydning (billeder)", "original": "Original", "beautified": "Forskønnet", "subtitlesCount": "Undertekster", @@ -1931,13 +2019,80 @@ "timeCodesExtractFailed": "Kunne ikke læse tidskoder fra videoen", "timeCodesHint": "Fastgør start-/slutpunkter til videoens reelle billedtider i stedet for at antage en konstant billedhastighed. Kræver, at hele videoen læses igennem én gang; resultatet gemmes i cachen." }, + "improveTimeCodes": { + "title": "Forbedr tidskoder (forced alignment)", + "aligner": "Aligner", + "alignerHint": "Modellen, der lytter efter hver linje i lyden. De bedste valg for undertekstens sprog vises først.", + "maxShift": "Maks. forskydning (sekunder)", + "maxShiftHint": "Hvor langt underteksten må være ude af synkronisering. En linje, hvis start ville flytte sig længere, efterlades som den er og markeres. Uanset værdien flyttes en enkelt linje, der vil flytte sig mere end et halvt sekund længere end linjerne omkring den, ikke blindt: den følger sine naboer, når de alle er flyttet, og tilbydes ellers uden flueben, så du kan tjekke den.", + "adjustStartTimes": "Juster starttider", + "adjustEndTimes": "Juster sluttider", + "isolateSpeech": "Isoler tale først (langsom)", + "isolateSpeechHint": "Fjerner musik og lydeffekter før justering, så aligneren kun hører dialogen. Hjælper på linjer, der tales over høj musik eller action, men tager omtrent lige så lang tid som selve lyden med en GPU - og mange gange længere uden.", + "isolatingSpeech": "Isolerer tale... (dette tager et stykke tid)", + "isolateSpeechFailed": "Kunne ikke isolere talen - justeret mod den originale lyd i stedet.", + "checkWithSpeechToText": "Tjek med tale til tekst", + "checkWithSpeechToTextHint": "Transskriberer også lyden og tjekker hver flytning mod, hvor ordene faktisk blev hørt. Store flytninger, som talen bekræfter, får flueben for dig, og flytninger væk fra, hvor en linje høres, efterlades uden flueben, så du kan tjekke dem. Viser også, hvor meget af hver linje der blev hørt - en lav andel betyder, at teksten afviger fra det, der bliver sagt. En undertekst, der er længere ude af synkronisering end den maks. forskydning - en konstant forskydning, en drift fra forkert billedhastighed eller spring, hvor scener blev klippet - synkroniseres først ud fra de hørte ord. Bruger Crisp ASR Parakeet, som tager nogle få minutter for en spillefilm med en GPU.", + "checkWithSpeechToTextNotAvailableX": "Tjek med tale til tekst er ikke tilgængeligt for {0}", + "transcribingToCheck": "Transskriberer for at tjekke justeringen...", + "speechToTextFailed": "Tale til tekst mislykkedes - tidskoderne blev ikke tjekket mod den.", + "speechToTextX": "Tale til tekst: {0}", + "speechToTextConfirmedXDisputedY": "Tale: {0} bekræftet, {1} omstridt", + "hardlyHeardX": "Tale til tekst hørte kun {0}% af undertekstens ord. Er underteksten på det sprog, der tales? Aligneren kan ikke placere en oversættelse.", + "heard": "Hørt", + "heardHint": "Hvor meget af linjen tale til tekst hørte. En lav andel betyder, at teksten afviger fra det, der bliver sagt - hvor aligneren mest sandsynligt tager fejl.", + "statusConfirmedBySpeech": "Bekræftet af tale", + "statusDisputedBySpeech": "Hørt hvor den var", + "statusMovedWithSync": "Flyttet med synkroniseringen", + "syncedFirstXY": "Synkroniseret først: {0} s i starten, {1} s i slutningen", + "showSpeechOnly": "Vis kun tale", + "showSpeechOnlyHint": "Tegn den justerede bølgeform ud fra lyden med musik og lydeffekter fjernet; den originale bølgeform forbliver uændret til sammenligning. Tilgængelig, når talen er blevet isoleret - her eller med \"Vis kun tale\" i hovedvinduets bølgeform.", + "align": "Justér", + "original": "Original", + "aligned": "Justeret", + "intro": "Vælg en aligner, og tryk på \"Justér\" for at lytte efter hver linje i lyden og stramme dens tidskoder.", + "extractingAudio": "Udtrækker lyd...", + "aligningBatchXOfY": "Justerer... batch {0} af {1}", + "extractAudioFailed": "Kunne ikke udtrække lyden med ffmpeg.", + "modelWillBeDownloaded": "{0} vil blive downloadet", + "summaryXRetimedYKeptZSkipped": "Omtimet: {0} · Beholdt: {1} · Ingen tale: {2}", + "meanShiftX": "Gennemsnitlig forskydning: {0} ms", + "toCheckX": "Til tjek: {0}", + "largeMovesToCheckX": "{0} linje(r) ville flytte sig langt på egen hånd og er efterladt uden flueben - lyt til dem (F5 afspiller den justerede linje, Shift+F5 den originale), og sæt flueben ved dem, der er rigtige.", + "linesToCheckX": "{0} linje(r) er efterladt uden flueben til tjek - lyt til dem (F5 afspiller den justerede linje, Shift+F5 den originale), og sæt flueben ved dem, der er rigtige.", + "changeXOfY": "Ændring {0} af {1}", + "previousChange": "Forrige ændring", + "nextChange": "Næste ændring", + "startShift": "Start", + "endShift": "Slut", + "statusRetimed": "Omtimet", + "statusMovedWithNeighbours": "Flyttet med sine naboer", + "statusLargeMoveUnconfirmed": "Stor flytning - lyt, sæt flueben for at anvende", + "statusUnchanged": "Allerede på plads", + "statusNoSpeech": "Ingen tale", + "statusShiftTooLarge": "Beholdt - forskydning for stor", + "statusFailed": "Beholdt - aligner mislykkedes", + "statusAdjustedByHand": "Justeret manuelt", + "alignedWaveformHint": "Træk en linje for at flytte den, eller træk i dens kanter for at ændre dens start eller slut.", + "playLine": "Afspil linje", + "undoAdjustment": "Fortryd justering", + "playPause": "Afspil / pause", + "playAligned": "Justeret", + "playAlignedHint": "Afspil den valgte linje med dens justerede tidskoder", + "apply": "Anvend", + "applyHint": "Fjern fluebenet ved en linje for at beholde dens originale tidskoder. Dobbeltklik på en linje for at afspille den. Linjer kan også flyttes eller ændres i størrelse i den justerede bølgeform." + }, "beautifyTimeCodesProfile": { "title": "Rediger profil for forskønnelse af tidskoder", "loadPreset": "Indlæs forudindstilling", "presetDefault": "Standard", "presetNetflix": "Netflix", "presetSdi": "SDI", - "general": "Generelt", + "saveAsProfile": "Gem som profil...", + "deleteProfile": "Slet profil", + "profileName": "Profilnavn", + "overwriteProfileX": "Der findes allerede en profil med navnet \"{0}\". Overskriv den?", + "deleteProfileX": "Slet profilen \"{0}\"?", "gap": "Mellemrum", "gapSuffix": "billeder (opdaterer også felter for mellemrum forskellige fra nul nedenfor)", "milliseconds": "ms", @@ -1966,9 +2121,12 @@ "hintChaining": "Hvordan undertekster, der næsten rører hinanden, håndteres — udvid dem sammen, eller skub dem fra hinanden, afhængigt af om der ligger et sceneskift imellem." }, "bridgeGaps": { - "title": "Overbryg mellemrum", "bridgeGapsSmallerThan": "Overbryg mellemrum mindre end (ms)", "minGap": "Minimum mellemrum (ms)", + "bridgeGapsSmallerThanFrames": "Overbryg mellemrum mindre end (billeder)", + "minGapFrames": "Minimum mellemrum (billeder)", + "calculateBridgeGapsSmallerThanDotDotDot": "Beregn grænse for overbrygning ud fra en billedhastighed...", + "useXMsAsBridgeGapsSmallerThan": "Overbryg mellemrum mindre end \"{0}\" millisekunder?", "numberOfSmallGapsBridgedX": "Antal små mellemrum, der er slået bro over: {0}", "percentFoPrevious": "Mellemrum for forrige (%)", "gapChange": "Mellemrumsændring" @@ -1980,8 +2138,6 @@ "sortBy": { "title": "Sorter undertekster", "sortOrder": "Sorteringsrækkefølge", - "sortByNumber": "Nummer", - "sortByStartTime": "Starttidspunkt", "sortByEndTime": "Sluttidspunkt" }, "batchConvert": { @@ -2004,6 +2160,7 @@ "addColor": "Tilføj farve", "deleteLinesWithSpecificActorsOrStyles": "Slet linjer med skuespillere eller stilarter (adskil flere med komma)", "useSourceStylesIfPossible": "Brug kildestilarter, hvis muligt", + "keepSourceEmbeddedFonts": "Behold kildens indlejrede skrifttyper (footer)", "editStyles": "Rediger stilarter", "editProperties": "Rediger egenskaber", "editAttachments": "Rediger vedhæftede filer", @@ -2024,7 +2181,6 @@ "assaChangeStyleFromStyle": "Skift stil fra", "assaChangeStyleToStyle": "til", "assaChangeStyleImportStyle": "Importér stil...", - "assaChangeStyleImportedX": "Importeret: {0}", "assaChangeStyleTrimUnusedStyles": "Fjern ubrugte stilarter", "assaChangeStylePropertiesTitle": "Skift stilegenskaber", "assaChangeStylePropertiesInfo": "Ændrer de valgte felter i alle stilarter i filen, uden at røre selve stilarterne.", @@ -2036,13 +2192,52 @@ "convertColorsToDialogReBreakLines": "Ombryd linjer igen", "snapTimeCodesToFramesInfo": "Runder hver start- og sluttid til nærmeste billede. Billedhastigheden læses fra en videofil med samme navn som undertekstfilen, medmindre der vælges en fast billedhastighed.", "addFolderDotDotDot": "Tilføj mappe...", + "addFolderRecursiveDotDotDot": "Tilføj mappe rekursivt...", "selectFolderToConvert": "Vælg mappe med filer, der skal konverteres", "includeSubfolders": "Medtag undermapper, når en mappe tilføjes", + "videoFilesWhenAddingFolder": "Videofiler (mkv, mp4, ts...) ved tilføjelse af en mappe", + "videoFilesAsk": "Spørg", + "videoFilesInclude": "Tilføj deres undertekstspor", + "videoFilesSkip": "Spring over", + "folderContainsXVideoFiles": "Mappen indeholder {0} videofil(er) (mkv, mp4, ts...).\n\nTilføj også deres indlejrede undertekstspor, eller kun undertekstfilerne?", + "addVideoFiles": "Tilføj videofiler", + "skipVideoFiles": "Kun undertekstfiler", + "doNotAskAgainVideoFiles": "Spørg ikke igen (ændres i indstillingerne for batchkonvertering)", + "settingsSectionOutput": "Output", + "settingsSectionAddingFiles": "Tilføjelse af filer", + "settingsSectionImageBasedSubtitles": "Billedbaserede undertekster (OCR)", + "settingsSectionOther": "Andet", "keepSourceFileTimestamp": "Behold kildefilens dato/tid på outputfilerne", - "scanningFolderX": "Scanner {0}..." + "preventSleepWhileConverting": "Forhindr computeren i at gå i dvale under konvertering", + "scanningFolderX": "Scanner {0}...", + "transportStreamSettings": "Transport Stream-indstillinger", + "transportStreamSettingsDotDotDot": "Transport Stream-indstillinger...", + "transportStreamSettingsInfo": "Gælder for undertekstspor udtrukket fra Transport Stream-filer (.ts/.m2ts). Position og videostørrelse påvirker kun DVB-billedspor, der eksporteres til et billedbaseret format.", + "transportStreamOverrideXPosition": "Tilsidesæt original X-position", + "transportStreamOverrideYPosition": "Tilsidesæt original Y-position", + "transportStreamOverrideVideoSize": "Tilsidesæt original videostørrelse", + "transportStreamBottomMargin": "Bundmargen", + "transportStreamFileNameEnding": "Filnavnsendelse", + "transportStreamFileNameEndingInfo": "Tilføjes før filtypenavnet for hvert udtrukket spor. Lad være tom for at bruge det almindelige sprogsuffiks.", + "transportStreamOnlyTeletext": "Kun tekst-tv", + "transportStreamGetSizeFromVideo": "Hent størrelse fra video...", + "twoLetterLanguageCodeUppercase": "Sprogkode på to bogstaver (store bogstaver)", + "threeLetterLanguageCodeUppercase": "Sprogkode på tre bogstaver (store bogstaver)", + "formatContainsDotDotDot": "Format indeholder...", + "extensionIsDotDotDot": "Filtypenavn er...", + "statusIsError": "Status er fejl", + "forcedTracksOnly": "Kun tvungne spor", + "xConvertedYFailedInZ": "{0:#,###,##0} konverteret, {1:#,###,##0} mislykkedes på {2}", + "xNotProcessed": "{0:#,###,##0} ikke behandlet", + "removeUnicodeControlCharactersTitle": "Fjern Unicode-kontroltegn", + "removeUnicodeControlCharactersInfo": "Fjerner de usynlige Unicode-retningskontroltegn (LRM, RLM, LRE, RLE, PDF, LRO og RLO) fra teksten og erstatter hårde mellemrum med normale mellemrum.", + "preset": "Forudindstilling", + "savePresetDotDotDot": "Gem forudindstilling...", + "deletePreset": "Slet forudindstilling", + "presetName": "Navn på forudindstilling", + "deletePresetX": "Slet forudindstillingen \"{0}\"?" }, "changeCasing": { - "title": "Skift store/små bogstaver", "fixNames": "Ret navne", "namesX": "Navne: {0:#,##0}", "hitsX": "Træffere: {0:#,##0}", @@ -2053,9 +2248,7 @@ "allUppercase": "Alle store bogstaver", "allLowercase": "Alle små bogstaver" }, - "changeFormatting": { - "title": "Skift formatering" - }, + "changeFormatting": {}, "convertActors": { "title": "Konverter skuespillere", "convertActorFrom": "Konverter skuespiller fra", @@ -2084,18 +2277,12 @@ "outputFormatAssa": "Advanced Sub Station Alpha (.ass)", "style1": "Stil 1", "style2": "Stil 2", - "outlineWidth": "Omridsbredde", - "shadowWidth": "Skyggebredde", - "alignTop": "Top", - "alignBottom": "Bund", - "merge": "_Flet sammen", - "pleaseLoadTwoSubtitles": "Indlæs venligst to undertekster" + "merge": "_Flet sammen" }, "splitSubtitle": { "title": "Opdel undertekst", "numberOfEqualParts": "Antal lige store dele", "saveSplitParts": "_Gem delte dele", - "subtitleSplitIntoXParts": "Undertekster opdelt i {0} dele.", "xPartsSavedInFormatYToFolder": "{0} dele gemt i formatet {1} i mappen:" }, "splitBreakLongLines": { @@ -2129,18 +2316,17 @@ "columnMerge": "Flet", "columnFirst": "Første linje", "columnSecond": "Anden linje", - "columnMerged": "Flettet", - "selectAll": "Vælg alle", - "inverseSelection": "Omvendt valg" + "columnMerged": "Flettet" }, "mergeLinesWithSameText": { - "title": "Flet linjer med samme tekst", "maxMsBetweenLines": "Maks. millisekunder mellem linjer", - "includeIncrementingLines": "Inkluder linjer med stigende tekst" + "maxFramesBetweenLines": "Maks. billeder mellem linjer", + "includeIncrementingLines": "Inkluder linjer med stigende tekst", + "includeRollUpCaptions": "Medtag roll-up-undertekster (rullende)" }, "mergeLinesWithSameTimeCodes": { - "title": "Flet linjer med samme tidskoder", "maxMsDifference": "Max forskel (millisekunder)", + "maxFramesDifference": "Maks. forskel (billeder)", "makeDialog": "Lav dialoger" }, "netflixCheckAndFix": { @@ -2163,7 +2349,6 @@ "shotChanges": "Sceneskift", "startNumberSpellOut": "Startnummer staves ud", "textforHiUseBrackets": "Tekst til HI, brug parenteser", - "frameRate": "Billedhastighed", "twoFrameGrap": "To billeders mellemrum", "whiteSpace": "Blanktegn", "childrensProgram": "Børneprogram", @@ -2201,7 +2386,6 @@ "italicsFixed": "Kursiv rettet", "italicsNotAllowed": "Kursiv ikke tilladt", "bridgeGapsXToYFrames": "3-{0} billeders mellemrum => 2 billeders mellemrum", - "startNumberSpellOutComment": "Når et tal begynder en sætning, skal det altid staves", "maximumXCharactersPerSecond": "Maksimalt {0} tegn pr. sekund" }, "imageBasedEdit": { @@ -2210,10 +2394,8 @@ "resizeImagesDotDotDot": "Ændr størrelse på billeder...", "adjustBrightnessDotDotDot": "Juster lysstyrken...", "adjustAlphaDotDotDot": "Juster alfa...", - "centerHorizontally": "Centrer vandret", "cropImages": "Beskær billeder", "importTimeCodes": "Importer tidskoder...", - "setTextForSubtitle": "Indstil tekst til undertekst", "setText": "Indstil tekst", "screenWidth": "Skærmbredde", "screenHeight": "Skærmhøjde", @@ -2244,15 +2426,31 @@ "letterboxCustom": "Brugerdefineret bjælkehøjde", "barHeightPx": "Bjælkehøjde (px)", "titleSafePercent": "Titelsikkert område (%)", + "moveCaptions": "Flyt undertekster", + "moveCaptionsDotDotDot": "Flyt undertekster...", + "moveCaptionsTo": "Flyt undertekster", + "moveCaptionsIntoBars": "Ind i letterbox-bjælkerne (uden for billedet)", + "moveCaptionsIntoPicture": "Inde i billedet (ud af bjælkerne)", + "moveCaptionsOffset": "Afstand fra kant (px)", + "letterboxBarHeightXPxYOfZCaptionsWillMove": "Bjælkehøjde: {0} px - {1} af {2} undertekster vil blive flyttet", + "removeFadeInOut": "Fjern fade ind/ud", + "removeFadeInOutXLinesRemoved": "{0} fade-linjer flettet ind i de linjer, de hører til", + "removeFadeInOutNothingFound": "Ingen fade ind/ud-linjer fundet", "positionSummary": "{0}×{1} - {2} undertekster - bjælkehøjde: {3} px", "xInActivePicture": "{0} i billedet", "xInTopBar": "{0} i øverste bjælke", "xInBottomBar": "{0} i nederste bjælke", "noImageSubtitlesLoaded": "Ingen billedbaserede undertekster indlæst", - "imageBasedFormatNotSupported": "Billedbaseret undertekstformat blev ikke fundet/understøttes ikke." + "imageBasedFormatNotSupported": "Billedbaseret undertekstformat blev ikke fundet/understøttes ikke.", + "frameRateDeclaredInFile": "Billedhastighed angivet i Blu-ray sup-filen", + "frameRateDetectedFromTimeCodesX": "Billedhastighed registreret ud fra Blu-ray sup-tidskoderne (filen angiver {0})", + "frameRateFromVideo": "Videoens billedhastighed", + "frameRateCurrent": "Aktuel billedhastighed", + "frameRateSetManually": "Billedhastighed angivet manuelt", + "frameRateUsageInfo": "Blu-ray sup-, BDN XML-, DOST- og FCP-eksporter skrives med denne billedhastighed. Den ændrer ingen tider - brug \"Skift billedhastighed\" til det.", + "useVideoFrameRateXInsteadOfY": "Videoens billedhastighed er {0}, men underteksten er sat til {1}.\n\nBrug videoens billedhastighed ({0})?" }, "removeTextForHearingImpaired": { - "title": "Fjern tekst for hørehæmmede", "interjections": "Interjektioner", "skipIfStartWith": "Spring over hvis begynder med", "removeTextBetween": "Fjern tekst mellem", @@ -2274,7 +2472,6 @@ "aiReview": { "title": "AI-gennemgang", "review": "Gennemgå", - "stop": "Stop", "editPrompt": "Rediger prompt...", "editPromptTitle": "Rediger gennemgangsprompt", "promptInfo": "Instruktioner sendt til modellen - {language} erstattes med undertekstens sprog.", @@ -2285,7 +2482,6 @@ "reviewingLineXOfY": "Gennemgår linje {0} af {1}...", "reviewDone": "Gennemgang udført - {0} forslag i {1} linjer", "noIssuesFound": "Ingen problemer fundet", - "categoryAll": "Alle", "categorySpelling": "Stavning", "categoryGrammar": "Grammatik", "categoryPunctuation": "Tegnsætning", @@ -2297,8 +2493,23 @@ "largeChangeWarning": "Stor ændring - ligner en omskrivning, gennemgå omhyggeligt", "mismatchWarning": "Ligner ikke originalen - hører måske til en anden linje", "engineError": "AI-motoren kunne ikke nås: {0}", - "setupHint": "Vælg først en motor og en model i Værktøjer -> AI-gennemgang.", - "playCurrentLineHint": "Afspil den valgte linje i videoafspilleren, og sæt på pause ved dens slutning (du kan også dobbeltklikke på en linje)" + "playCurrentLineHint": "Afspil den valgte linje i videoafspilleren, og sæt på pause ved dens slutning (du kan også dobbeltklikke på en linje)", + "editAfterHint": "Klik på teksten i den valgte række for at redigere rettelsen, før den anvendes (Enter gemmer, Escape annullerer)", + "template": "Skabelon", + "templatePlaceholder": "Vælg en skabelon til at erstatte prompten", + "templateStandard": "Standard korrekturlæsning", + "templateSpeechToText": "Oprydning efter tale til tekst", + "templateMachineTranslation": "Rettelse af maskinoversættelse", + "templateSdh": "SDH / hørehæmmede", + "referenceContext": "Referencekontekst", + "referenceContextInfo": "Valgfrit. Navne, personer, ordliste, synopsis eller stilnoter - modellen behandler dette som autoriteten for navne og termer. Sendes med hver batch.", + "referenceContextPlaceholder": "Navne: Kaito, tante Mei, Dr. Hollis\nTermer: Shinkansen, warpkerne\nSynopsis: Kaito rejser til Tokyo for at finde sin forsvundne far.", + "generateContext": "Generer med AI", + "generateContextHint": "Lad den valgte AI-motor læse underteksten og lave udkast til navne, termer og en synopsis - kontrollér resultatet før brug", + "generatingContextPartXOfY": "Læser del {0} af {1}...", + "generatingContextSynopsis": "Skriver synopsis...", + "replaceContextQuestion": "Erstat den aktuelle referencekontekst?", + "noContextGenerated": "AI-motoren returnerede ingen brugbare referenceoplysninger." }, "aiAssistant": { "title": "AI-assistent", @@ -2359,7 +2570,21 @@ "correctWordsX": "Korrekte ord: {0}", "namesX": "Navne: {0}", "addedToDictionaryX": "Føjet til ordbog: {0}", - "doNotShowThisAgain": "Vis ikke denne meddelelse igen" + "doNotShowThisAgain": "Vis ikke denne meddelelse igen", + "editUseAlwaysList": "Rediger listen \"Brug altid\"...", + "useAlwaysListTitle": "Stavekontrol - listen \"Brug altid\"", + "useAlwaysListHeader": "Listen \"Brug altid\"", + "useAlwaysListDescription": "Ord, som stavekontrollen erstatter automatisk, gemt via \"Skift alle\" og \"Brug altid\". Et par bruges kun, når ordet er stavet forkert.", + "useAlwaysWord": "Forkert stavet ord", + "xPairs": "{0:#,##0} par", + "xUnusedPairs": "{0:#,##0} aldrig brugt", + "useAlwaysUnusedHint": "Aldrig brugt - dette ord er stavet korrekt (eller er et navn eller brugerord), så stavekontrollen markerer det aldrig", + "removeUnused": "Fjern ubrugte", + "useAlwaysEmpty": "Ingen \"Brug altid\"-par for dette sprog endnu", + "useAlwaysEmptyHint": "Par tilføjes, når du klikker på \"Skift alle\" eller \"Brug altid\" i stavekontrollen.", + "useAlwaysNoMatch": "Ingen par matcher søgningen", + "useAlwaysSameWord": "Erstatningen skal være forskellig fra ordet.", + "useAlwaysRememberOff": "\"Husk listen 'Brug altid'\" er slået fra i Indstillinger, så stavekontrollen hverken bruger eller gemmer denne liste." }, "video": { "chapters": { @@ -2390,7 +2615,6 @@ "scaleTimesDescription": "Skalér hvert kapitels tid fra én billedhastighed til en anden.", "fromFrameRate": "Fra", "toFrameRate": "Til", - "apply": "Anvend", "writeToVideo": "Skriv til video...", "writeToVideoTitle": "Skriv kapitler til video", "writeToVideoDescription": "Kapitlerne skrives ind i en kopi af videofilen. Intet genkodes, så det går hurtigt og uden kvalitetstab.", @@ -2400,7 +2624,6 @@ "writtenToX": "Kapitler skrevet til {0}", "unableToWriteChapters": "Kunne ikke skrive kapitler til videofilen.", "chaptersSavedToX": "Kapitler gemt i {0}", - "noVideoLoaded": "Ingen video indlæst", "emptyListCallToAction": "Ingen kapitler endnu - tilføj et ved videopositionen, eller importér dem fra en video eller fil." }, "goToVideoPosition": "Gå til videoposition", @@ -2412,30 +2635,88 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "Sekundær undertekst på videoafspiller, åbn...", "openSecondarySubtitleOnVideoPlayer": "Sekundær undertekst (på videoafspiller)", "removeSecondarySubtitleOnVideoPlayer": "Sekundær undertekst på videoafspiller, fjern", + "editSecondarySubtitleSettings": "Rediger indstillinger for sekundær undertekst", + "editSecondarySubtitleSettingsDotDotDot": "Rediger indstillinger for sekundær undertekst...", + "secondarySubtitleRememberSettings": "Husk disse indstillinger", + "secondarySubtitleDoNotShowAgain": "Vis ikke denne dialog igen", + "secondarySubtitleJustifyLines": "Justér linjer", "openRecentVideo": "Åbn seneste video", "clearRecentVideos": "Ryd seneste videoer", "cutVideoTitle": "Klip video", "cutVideoDotDotDot": "Klip video...", + "remuxVideoTitle": "Remux video", + "remuxVideoDotDotDot": "Remux video...", + "remuxVideoInputVideo": "Inputvideo:", + "remuxVideoMultipleTracksRequiresMkv": "Flere lyd- eller undertekstspor kræver MKV-containeren. Outputformatet er automatisk skiftet til .mkv.", + "remuxVideoOutputFormat": "Outputformat:", + "remuxVideoOutputFile": "Outputfil:", + "remuxVideoRemuxing": "Remuxer video og lyd...", + "remuxVideoFinalizing": "Færdiggør outputfil (flytter indeks til starten)...", + "remuxVideoCompleted": "Videoen blev remuxet.", + "remuxVideoFailed": "Kunne ikke remuxe video.", + "remuxVideoPleaseSelectBoth": "Vælg både video- og lydfiler.", + "remuxVideoAssRequiresMkv": "ASS/SSA-undertekster kræver MKV-containeren for at bevare al formatering og alle stilarter.", + "remuxVideoSccRequiresMov": "Scenarist-undertekster (.scc) indlejres som CEA-608 closed captions, som kræver MOV- eller MPG-containeren. Outputformatet er automatisk skiftet til .mov.", + "remuxVideoSccNotWithWebM": "Scenarist closed captions (.scc) kræver MOV-containeren, som ikke kan indeholde VP9/AV1-videoen fra en .webm-fil. Fjern .scc-filen, eller konvertér den til et andet undertekstformat.", + "remuxVideoMpgMaxTwoCaptionTracks": "En .mpg-fil kan højst indeholde to closed caption-spor (CC1 og CC3) - fjern undertekstfiler, så der er én eller to tilbage.", + "remuxVideoMccRequiresMpg": "MacCaption-undertekster (.mcc) indlejres som CEA-608/708 closed captions i MPEG-2-videoen, hvilket kræver MPG-containeren. Outputformatet er automatisk skiftet til .mpg.", + "remuxVideoMpgReencodeVideoX": "Closed captions i en .mpg-fil kræver MPEG-2-video, og videoen er {0}. Genkod videoen til MPEG-2? Dette tager længere tid og forringer kvaliteten en smule.", + "remuxVideoFileHasNoAudioX": "\"{0}\" har intet lydspor, så den kan ikke bruges som lydkilde.", + "remuxVideoAddingClosedCaptions": "Tilføjer closed captions...", + "remuxVideoSelectAudioTrack": "Vælg lydspor", + "remuxVideoSelectAudioTrackFor": "Vælg lydspor for {0}", + "remuxVideoSelectAudioTrackPrompt": "Filen '{0}' indeholder {1} lydspor. Vælg det lydspor, der skal remuxes:", + "remuxVideoVideoFile": "video", + "remuxVideoAudioFile": "lyd", + "remuxVideoAudioFiles": "Lydfiler:", + "remuxVideoSubtitleFiles": "Undertekstfiler (valgfrit, soft subtitles):", + "remuxVideoSelectAudioTrackDotDotDot": "Vælg lydspor...", + "remuxVideoFilesX": "{0} filer", + "remuxVideoMixAudio": "Mix lyd til ét spor", + "remuxVideoVolumePercent": "Lydstyrke %:", + "remuxVideoVolumeX": "Lydstyrke {0}%", + "remuxVideoFastStart": "Optimer til webstreaming (flyt indeks til starten - langsommere)", "embedSubtitlesDotDotDot": "Tilføj/fjern indlejrede undertekster...", "generateTimeCodes": "Generer tidskoder", "checkeredImage": "Ternet billede", - "saveVideoAsTitle": "Gem video som", "promptForFfmpegParamsAndGenerate": "Spørg efter ffmpeg-parametre og generer", "cutVideoCutSegments": "Klip segmenter", "cutVideoMergeSegments": "Flet segmenter", "cutVideoSplitSegments": "Gem segmenter individuelt", - "cutVideoType": "Klip type", - "mpvRenderAuto": "Auto", - "mpvRenderNative": "Indbygget", - "mpvRenderOpenGl": "OpenGL", - "mpvRenderSoftware": "Software (langsom)", "cutVideoAlsoCutSubtitle": "Klip også underteksten", "cutVideoSubtitleFileGeneratedX": "Undertekstfil genereret: {0}", + "cutVideoTransition": "Overgang mellem segmenter", + "cutVideoTransitionDurationSeconds": "Varighed (sekunder)", + "cutVideoFadeInSeconds": "Fade fra sort ved start (sekunder)", + "cutVideoFadeOutSeconds": "Fade til sort ved slutning (sekunder)", + "cutVideoPreviewTransition": "Forhåndsvis overgang", + "cutVideoPreviewTransitionTitle": "Forhåndsvisning af overgang", + "cutVideoPreviewNeedsJoin": "Der er ingen sammenføjning at forhåndsvise - tilføj mindst to segmenter, der skal flettes, eller et segment, der skal klippes ud af midten.", + "cutVideoTransitionInfoX": "Hver overgang overlapper de dele, den sammenføjer, så outputtet bliver {0} sekunder kortere pr. sammenføjning. En klippet undertekst får tilpasset sin timing tilsvarende.", + "cutVideoTransitionFade": "Fade", + "cutVideoTransitionFadeBlack": "Fade gennem sort", + "cutVideoTransitionFadeWhite": "Fade gennem hvid", + "cutVideoTransitionFadeGrays": "Fade gennem grå", + "cutVideoTransitionDissolve": "Opløs", + "cutVideoTransitionWipeLeft": "Visk mod venstre", + "cutVideoTransitionWipeRight": "Visk mod højre", + "cutVideoTransitionWipeUp": "Visk op", + "cutVideoTransitionWipeDown": "Visk ned", + "cutVideoTransitionSlideLeft": "Glid mod venstre", + "cutVideoTransitionSlideRight": "Glid mod højre", + "cutVideoTransitionSlideUp": "Glid op", + "cutVideoTransitionSlideDown": "Glid ned", + "cutVideoTransitionSmoothLeft": "Blød mod venstre", + "cutVideoTransitionSmoothRight": "Blød mod højre", + "cutVideoTransitionCircleOpen": "Cirkel åbn", + "cutVideoTransitionCircleClose": "Cirkel luk", + "cutVideoTransitionRadial": "Radial", + "cutVideoTransitionPixelize": "Pixeler", + "cutVideoTransitionBlur": "Slør", "importCurrentSubtitle": "Importer aktuel undertekst", "addRemoveEmbeddedSubtitlesTitle": "Tilføj/fjern indlejrede undertekster", "addRemoveEmbeddedSubtitlesMp4Title": "Tilføj/fjern indlejrede undertekster (MP4)", "addCurrentSubtitle": "Tilføj aktuel undertekst", - "embeddedTrackColumnNew": "Ny", "embeddedTrackNoSubtitlesFoundTitle": "Ingen undertekster fundet", "embeddedTrackNoSubtitlesFoundMessage": "Den valgte undertekstfil indeholder ingen undertekster.", "embeddedTrackNoTracksTitle": "Ingen spor tilføjet", @@ -2447,7 +2728,7 @@ "embeddedTrackGeneratingVideoXY": "Genererer video... {0}% {1}", "embeddedTrackGeneratingVideo": "Genererer video...", "mp4FilesFilter": "MP4-filer", - "titleOrLanguage": "Titel/sprog", + "embeddedTracksPickVideoHint": "Vælg en videofil, eller slip en her, for at se dens undertekstspor.", "viewMatroskaTrackX": "Se Matroska-spor - {0}", "resolutionSeparator": "x", "openFromUrlTitle": "Åbn videofil fra URL", @@ -2457,9 +2738,7 @@ "openFromUrlDownloadAndOpen": "Download og åbn", "openFromUrlDownloadAndOpenDescription": "Gem videoen lokalt, og åbn den derefter.", "openFromUrlDownloadAndOpenNote": "Påkrævet for tale-til-tekst og bølgeformsspidser.", - "openFromUrlMissing": "Indtast venligst en video-URL først.", "openFromUrlDownloadingTitle": "Downloader video", - "openFromUrlSaveAs": "Gem video som", "openFromUrlDownloadSubtitles": "Download også undertekster", "openFromUrlDownloadVideo": "Download video", "openFromUrlIncludeAutoGeneratedSubtitles": "Medtag automatisk genererede undertekster (originalsprog)", @@ -2496,56 +2775,38 @@ "reEncodeGeneratingDone": "Generering udført", "reEncodeGeneratedFilesX": "Genererede filer ({0}):", "reEncodeFfmpegParameters": "ffmpeg parametre", + "analyzingVideoX": "Analyserer video... {0}% {1}", + "analyzingVideoXofY": "Analyserer video {0}/{1}... {2}% {3}", + "backgroundImageFileNotSelected": "Baggrundsbilledfil ikke valgt", + "backgroundImageFileDoesNotExistX": "Baggrundsbilledfilen findes ikke: {0}", "burnIn": { "title": "Generer video med indbrændte undertekster", - "infoAssaOff": "Bemærk: Advanced SubStation Alpha-styling understøttes.", - "infoAssaOn": "Bemærk: Advanced SubStation Alpha-styling vil blive brugt :)", - "xGeneratedWithBurnedInSubsInX": "\"{0}\" genereret med indbrændt undertekst i {1}.", - "timeRemainingMinutes": "Resterende tid: {0} minutter", - "timeRemainingOneMinute": "Resterende tid: Et minut", - "timeRemainingSeconds": "Resterende tid: {0} sekunder", - "timeRemainingAFewSeconds": "Resterende tid: Et par sekunder", - "timeRemainingMinutesAndSeconds": "Resterende tid: {0} minutter og {1} sekunder", - "timeRemainingOneMinuteAndSeconds": "Resterende tid: Et minut og {0} sekunder", - "targetFileName": "Målfilnavn: {0}", "targetFileSize": "Målfilstørrelse (kræver 2 pass-kodning)", "fileSizeMb": "Filstørrelse i MB", - "passX": "Gennemløb {0}", - "encoding": "Kodning", "bitRate": "Bithastighed", "totalBitRateX": "Samlet bithastighed: {0}", "sampleRate": "Samplingsfrekvens", "audio": "Lyd", - "stereo": "Stereo", "preset": "Forudindstilling", + "tune": "Tune", "pixelFormat": "Pixel-format", "crf": "CRF", - "tuneFor": "Tilpas til", - "alignRight": "Juster til højre", - "getStartPosition": "Hent startposition", - "getEndPosition": "Hent slutposition", "useSource": "Brug kilde", - "useSourceFolder": "Brug kildemappe", - "useSourceResolution": "Brug kildeopløsning", - "outputSettings": "Outputfil/-mappe...", "fontSizeFactor": "Skriftstørrelsesfaktor", "boxType": "Bokstype", - "fixRightToLeft": "Ret fra højre mod venstre", - "cut": "Klip", "fromTime": "Fra tiden", "toTime": "Til tid", "audioEncoding": "Lydkodning", "outputProperties": "Outputegenskaber...", "videoFileSize": "Videofilstørrelse", "oneBox": "Én kasse", - "boxPerLine": "Boks pr. linje", "logoInfo": "Vælg et PNG-billede, og træk det for at placere det på videoen.", + "noSubtitlesGenerateAnyway": "Der er ingen undertekstlinjer at brænde ind.\n\nGenerer videoen uden undertekster?", + "noSubtitlesInXItemsGenerateAnyway": "{0} batch-element(er) har ingen undertekstlinjer at brænde ind.\n\nGenerer disse videoer uden undertekster?", "matchSourceVideoSize": "Match kildevideoens størrelse" }, "videoTransparent": { - "title": "Generer gennemsigtig video med undertekster", - "infoAssaOff": "Bemærk: Advanced SubStation Alpha-styling understøttes.", - "infoAssaOn": "Bemærk: Advanced SubStation Alpha-styling vil blive brugt :)" + "title": "Generer gennemsigtig video med undertekster" }, "audioToText": { "title": "Tale til tekst", @@ -2553,6 +2814,21 @@ "translateToEnglish": "Oversæt til engelsk", "transcribing": "Transskriberer...", "transcribingXOfY": "Transskriberer {0} af {1}...", + "linesTranscribedXOfYFailedZ": "{0} af {1} linjer blev transskriberet - {2} mislykkedes eller havde ingen tale.\n\nMislykkede linjer beholder deres aktuelle tekst. Anvend de transskriberede linjer, eller prøv de mislykkede igen (du kan først ændre motor eller indstillinger)?", + "linesTranscribedXOfYCancelled": "Transskriptionen blev annulleret efter {0} af {1} linjer.\n\nAnvend de transskriberede linjer? De øvrige linjer beholder deres aktuelle tekst.", + "noLinesTranscribed": "Ingen af de {0} linjer kunne transskriberes.\nTjek værktøjsloggen for detaljer.", + "applyTranscribedLines": "Anvend transskriberede", + "retryFailedLines": "Prøv mislykkede igen", + "isolateSpeech": "Isoler tale (langsom)", + "isolateSpeechHint": "Fjerner musik og lydeffekter før transskription. Giver færre oversete linjer og bedre timing på lyd med høj musik, men tager omtrent lige så lang tid som selve lyden med en GPU - og mange gange længere uden.", + "isolatingSpeech": "Isolerer tale...", + "isolateSpeechFailed": "Kunne ikke isolere talen - transskriberer den originale lyd i stedet.", + "detectSpeakers": "Registrer talere", + "detectSpeakersHint": "Starter hver linje med taleren, f.eks. \"(speaker 0)\", ved hjælp af NVIDIAs Sortformer-diarisering (op til 8 talere). Fungerer bedst med backends, der deler linjer, hvor taleren skifter, som Parakeet og Cohere.", + "detectSpeakersNeedsNewerCrispAsr": "\"Registrer talere\" kræver Crisp ASR v{0} eller nyere, men v{1} er installeret.\n\nOpdater Crisp ASR (tandhjulsknappen ved siden af motoren), eller slå \"Registrer talere\" fra.", + "xNeedsNewerCrispAsr": "{0} kræver Crisp ASR v{1} eller nyere, men v{2} er installeret.\n\nDownload og installer opdateringen nu?", + "vad": "VAD", + "vadHint": "Stemmeaktivitetsregistrering: kun talen transskriberes, klippet hvor taleren holder pause.\nAuto: Silero, og kun for de motorer, der har brug for det (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: altid slået til, for alle Crisp ASR-motorer. FireRedVAD er den mest præcise, Whisper-VAD giver de færreste og reneste klip, men er den langsomste.\nIndex-Echo bruger altid Silero. --vad, --vad-model eller --chunk-seconds i de avancerede indstillinger har forrang.", "inputLanguage": "Indtastningssprog", "advancedWhisperSettings": "Avancerede Whisper-indstillinger", "downloadingSpeechToTextEngine": "Downloader tale-til-tekst-motor", @@ -2565,8 +2841,6 @@ "whisperXxlHighlightWord": "Fremhæv ord", "selectModel": "Vælg model", "viewToolsLogFile": "Se Whisper-logfil", - "reDownloadX": "Gendownload {0}", - "downloadX": "Download {0}", "updateXTitle": "Vil du opdatere {0}?", "updateXMessage": "En nyere version af {0} er tilgængelig.{1}{1}Download og installer opdateringen nu?", "downloadingSpeechToTextModel": "Downloader tale-til-tekst-model", @@ -2610,27 +2884,16 @@ "backendAndUpdateStatus": "Backend og opdateringsstatus", "addCustomModelDotDotDot": "Tilføj tilpasset model...", "customModelHelp": "Du kan bruge din egen model: vælg modelfilen (whisper.cpp ggml '.bin') eller modelmappen (faster-whisper-mappe med en 'model.bin' indeni). Den kopieres til modelmappen og føjes til listen ovenfor.", - "cueBuilding": "Opbygning af cues (MLX Whisper)", - "cueRebuild": "Genopbyg cues fra ordtidskoder", - "cueMaxChars": "Maks. tegn pr. cue", - "cueMaxSeconds": "Maks. sekunder pr. cue", - "cueMaxCps": "Maks. tegn pr. sekund", - "vocabularyPrompt": "Ordforrådsprompt (navne, steder, termer)", - "beamSize": "Beam-størrelse", - "beamSizeNote": "0 afkoder hurtigst. 5 giver den bedste nøjagtighed (som Faster Whisper) med cirka 20-30 % mere tid. Værdier over 5 hjælper sjældent.", "addLanguageCodeToFileName": "Tilføj sprogkode til filnavnet", "addLanguageCodeToFileNameHint": "Navngiv genererede undertekster som \"video.da.srt\" i stedet for \"video.srt\"" }, "textToSpeech": { "title": "Tekst til tale", - "textToSpeechEngine": "Tekst til tale-motor", "reviewAudioSegments": "TTS - Gennemgå lydsegmenter", "reviewAudioSegmentsHistory": "TTS - Gennemgå lydhistorik", "stability": "Stabilitet", "similarity": "Lighed", "speakerBoost": "Talerboost", - "styleExaggeration": "Stiloverdrivelse", - "regenerateAudioSelectedLine": "Regenerer lyd for den valgte linje", "generateSpeechFromText": "Generer tale fra tekst", "testVoice": "Test stemme", "addAudioToVideoFile": "Tilføj lyd til videofil", @@ -2640,6 +2903,19 @@ "videoEncodingSettings": "TTS - Indstillinger for videokodning", "elevenLabsSettings": "TTS - ElevenLabs indstillinger", "elevenLabsSettingsResetHint": "Nulstil ElevenLabs-indstillingerne til standardværdier", + "provider": "Udbyder", + "openAiCompatibleSettings": "TTS - OpenAI-kompatible indstillinger", + "customServerUrl": "Brugerdefineret server-URL", + "customServerUrlHint": "Fuldt tale-endpoint for en OpenAI-kompatibel server, bruges når udbyderen er \"Custom\", f.eks. http://localhost:8880/v1/audio/speech", + "customModels": "Brugerdefinerede modeller", + "customModelsHint": "Kommaseparerede modelnavne, der tilbydes, når udbyderen er \"Custom\"", + "customVoices": "Brugerdefinerede stemmer", + "customVoicesHint": "Kommaseparerede stemmenavne, bruges af udbyderen \"Custom\" og af OpenRouter-modeller, der ikke offentliggør en stemmeliste", + "instructions": "Instruktioner", + "instructionsHint": "Valgfri talestil, f.eks. \"Tal med en rolig, varm stemme\". Sendes kun til modeller, der understøtter det (ikke tts-1/tts-1-hd)", + "openAiSpeedHint": "Talehastighed fra 0,25 til 4,0 (1,0 er normal). Ikke alle modeller understøtter det", + "outputFormat": "Outputformat", + "outputFormatHint": "Lydformat, der anmodes om fra serveren. \"Auto\" beder om MP3 og skifter til PCM for modeller, der kun returnerer PCM (f.eks. Gemini TTS)", "regenerateAudio": "Regenerer lyd", "autoContinuePlaying": "Fortsæt automatisk med at afspille", "playLine": "Afspil linje", @@ -2648,6 +2924,13 @@ "addingAudioToVideoFileDotDotDot": "Tilføjer lyd til videofil...", "preparingMergeDotDotDot": "Forbereder fletning...", "importVoiceDotDotDot": "Importer stemme...", + "renameVoiceDotDotDot": "Omdøb stemme...", + "renameVoiceTitle": "Omdøb stemme", + "voiceXCouldNotBeRenamedX": "Stemmen '{0}' kunne ikke omdøbes: {1}", + "deleteVoiceDotDotDot": "Slet stemme...", + "deleteVoiceTitle": "Slet stemme", + "deleteVoiceXQuestion": "Slet stemmen '{0}'?\n\nReferenceoptagelsen og dens filer fjernes fra disken.", + "voiceXCouldNotBeDeletedX": "Stemmen '{0}' kunne ikke slettes: {1}", "voiceImportSuccessTitle": "Stemme importeret", "voiceXImported": "Stemmen '{0}' blev importeret", "voiceXCouldNotBeImported": "Stemmen '{0}' kunne ikke importeres - se loggen for detaljer", @@ -2657,6 +2940,49 @@ "dropAudioFileHereToImportVoice": "Slip lydfil her for at importere stemme", "dropAudioFileHereHint": ".wav eller .mp3", "voiceCloneTranscriptTitle": "Indtast transskription af lyden (påkrævet for stemmekloning)", + "voiceManagerTitle": "TTS - Stemmeadministration", + "voiceManagerDotDotDot": "Stemmeadministration...", + "voiceManagerMenuItem": "TTS-stemmeadministration...", + "speakFromCurrentLineTitle": "Læs op fra aktuel linje", + "speakFromCurrentLineDotDotDot": "Læs op fra aktuel linje...", + "speakFromCurrentLineHint": "Læser linjerne højt én efter én, startende ved den aktuelle linje. Tryk på Escape eller klik på en anden linje for at stoppe.", + "stopSpeaking": "Stop oplæsning", + "speakingLineX": "Læser linje {0} op... (Escape for at stoppe)", + "playWithSpeechTitle": "Afspil med tale", + "playWithSpeechDotDotDot": "Afspil med tale...", + "playWithSpeechHint": "Afspiller videoen og læser hver linje op, når videoen når den. Sæt på pause og spol som normalt; tryk på Escape for at stoppe.", + "lowerVideoVolumeWhileSpeaking": "Sænk videoens lydstyrke under oplæsning", + "pauseVideoWhenSpeechRunsLate": "Sæt videoen på pause, når talen løber ind i næste linje", + "waitingForSpeechLineX": "Genererer tale for linje {0}... (Escape for at stoppe)", + "voiceKindClone": "Klonet stemme", + "voiceKindPreset": "Indbygget", + "voiceKindModel": "Stemmemodel", + "voiceKindOnline": "Online", + "transcript": "Transskription", + "transcriptRequiredHint": "Påkrævet - motoren læser denne transskription af optagelsen (ref-text) ved kloning", + "transcriptOptionalHint": "Valgfri - en præcis transskription af optagelsen forbedrer kloningen", + "saveTranscript": "Gem transskription", + "searchVoices": "Søg i stemmer", + "loadingVoicesDotDotDot": "Indlæser stemmer...", + "noVoicesForEngine": "Ingen stemmer - importér en optagelse eller download en stemmepakke", + "noVoicesMatchFilter": "Ingen stemmer matcher søgningen", + "copyVoiceTo": "Kopiér stemme til", + "copyVoiceToDotDotDot": "Kopiér stemme til motor...", + "copyingVoiceXToYDotDotDot": "Kopierer stemmen '{0}' til {1}...", + "voiceXCopiedToY": "Stemmen '{0}' kopieret til {1}", + "voiceXCouldNotBeCopiedToY": "Stemmen '{0}' kunne ikke kopieres til {1} - se loggen for detaljer", + "voiceXAlreadyExistsInYContinue": "Der findes allerede en stemme med navnet '{0}' i {1}.\n\nKopiér alligevel?", + "openVoicesFolder": "Åbn mappen med stemmer", + "downloadVoicePacksDotDotDot": "Download stemmepakker...", + "downloadVoicePacksTitle": "TTS - Download stemmepakker", + "voicePackIntro": "Stemmepakker er sæt af korte, rene optagelser med transskriptioner, klar til at klone fra. Hver pakke importeres i den valgte motor (stemmer, der allerede findes, springes over) og indeholder en ATTRIBUTION.txt med licens og kilder.", + "voicePackDetailsXVoicesYSizeZLicense": "{0} stemmer · {1} · {2}", + "installToEngine": "Installer i motor", + "downloadAndInstall": "Download og installer", + "selectAtLeastOneVoicePack": "Vælg mindst én stemmepakke", + "downloadingXDotDotDot": "Downloader {0}...", + "installingXDotDotDot": "Installerer {0}...", + "xVoicesInstalledYSkipped": "{0} stemmer installeret ({1} fandtes allerede)", "useSpeechToTextDotDotDot": "Brug tale-til-tekst...", "autoCastMenuItem": "Find stemmer i videoen og klon...", "autoCastSpeakersTitle": "Stemmer fundet i videoen", @@ -2675,7 +3001,7 @@ "cloneVoicePerLinePreparing": "Henter hver linjes stemme fra videoen...", "cloneVoicePerLineNeedsVideo": "For at klone hver linjes stemme kræves den video, underteksten hører til. Åbn videoen, og prøv igen.", "cloneVoicePerLineNoClips": "Der kunne ikke hentes lyd fra videoen, så der er intet at klone fra. Kontrollér, at videoen har et lydspor.", - "cloneVoicePerLineNeedsOriginalSubtitleX": "{0} kan kun klone en linje, når den ved, hvad der siges i videoen ved den linje, hvilket kommer fra underteksten på originalsproget. Der er ingen original undertekst indlæst, så hver linje ville blive talt af den første importerede stemme i stedet for stemmen i videoen.\n\nÅbn den originale undertekst (Fil > Åbn original...) ved siden af oversættelsen, og generér igen.", + "cloneVoicePerLineTranscribeClipsXYZ": "{0} kan kun klone en linje, når den ved, hvad der siges i videoen ved den linje. Det vides ikke for {1} af {2} linjer - det kommer normalt fra underteksten på originalsproget (Fil > Åbn original...).\n\nTransskriber disse linjer fra videoen med tale til tekst nu?\n\nJa: vælg motoren og det sprog, der tales i videoen, og referenceklippene transskriberes, før talen genereres.\nNej: generer alligevel - disse linjer læses op af en almindelig stemme i stedet for stemmen i videoen.", "voiceCloneConsentTitle": "Stemmekloning - før du går i gang", "voiceCloneConsentHeader": "Du er ved at klone en stemme", "voiceCloneConsentIntro": "Kloning kopierer en rigtig persons stemme. Det er de fleste steder omfattet af regler, og i EU af juridiske pligter, der påhviler dig og ikke Subtitle Edit. Læs venligst dette én gang.", @@ -2692,10 +3018,29 @@ "advancedTtsSettings": "Avancerede TTS-indstillinger", "advancedTtsAudioProcessing": "Lydbehandling", "advancedTtsOutput": "Output", + "advancedTtsVoiceCloning": "Stemmekloning", + "cleanCloneReferences": "Rens stemmeklonreferencer (Sidon)", + "cleanCloneReferencesDescription": "Fjerner musik, støj og rumklang fra den lyd, en stemme klones fra: klip taget fra videoen og optagelser importeret i stemmeadministrationen. Bruger Sidon-talegendannelsesmodellen på audio.cpp (940 MB download). Den klonede stemme kopierer ikke længere baggrunden, men meget svag eller overlappende tale kan blive dæmpet.", + "cleaningCloneReferencesDotDotDot": "Renser stemmeklonreferencer...", + "downloadSidonTitle": "Download Sidon?", + "downloadSidonQuestionX": "Rensning af stemmeklonreferencer kræver Sidon-talegendannelsesmodellen ({0}).\n\nDownload den nu? Uden den bruges referencerne, som de er.", "proAudioPostProcessing": "Pro lydefterbehandling", "proAudioPostProcessingDescription": "Anvender EQ-varme, noise gate, kompression, loudness-normalisering (-16 LUFS) og fade ind/ud til hvert segment.", + "generatingSpeechSegmentXOfY": "Genererer tale: segment {0} af {1}", + "adjustingSpeedSegmentXOfY": "Justerer hastighed: segment {0} af {1}", + "mergingAudioSegmentXOfY": "Fletter lyd: segment {0} af {1}", + "postProcessingSegmentXOfY": "Efterbehandling: segment {0} af {1}", "audioDucking": "Lyd-ducking", "audioDuckingDescription": "Reducerer den originale videolydstyrke og blander den med TTS-lyden, så det originale lydspor stadig er svagt hørbart.", + "removeOriginalSpeech": "Fjern original tale (langsom)", + "removeOriginalSpeechDescription": "Beholder musikken og lydeffekterne fra den originale video, men fjerner dens tale og mikser den nye tale ovenpå. Tager omtrent lige så lang tid som selve videoen med en GPU og mange gange længere uden. Med lyd-ducking slået til gælder dens lydstyrke for musikken og effekterne. Gælder kun, når talen tilføjes til videofilen.", + "removingOriginalSpeech": "Fjerner original tale...", + "removeOriginalSpeechFailed": "Kunne ikke fjerne den originale tale - talen blev tilføjet til videoen uden det.", + "speechRemovalModel": "Model", + "speechRemovalModelDescription": "Bedste kvalitet bevarer mest af musikken og lydeffekterne. Hurtig er omkring tre gange hurtigere, men mister lidt mere af musikken.", + "speechRemovalBestQuality": "Bedste kvalitet (Mel-Band RoFormer)", + "speechRemovalFast": "Hurtig (HTDemucs)", + "videoTruncatedWarning": "Billedet i den nye videofil stopper efter {0}, men den originale video er {1} lang - billedet fryser, mens lyden fortsætter.\n\nFilen blev beholdt. Se error-log.txt i Subtitle Edits datamappe for ffmpeg-outputtet.", "originalVolumePercent": "Original volumen %", "vadSilenceCompression": "VAD-stilhedskomprimering", "vadSilenceCompressionDescription": "Forkorter pauser mellem ord, før du skifter tempo.\r\nBruger Voice Activity Detection til kun at komprimere tavshedshuller, mens talen holdes urørt.\r\nDette er det foretrukne første trin - det reducerer varigheden uden kvalitetstab.", @@ -2778,7 +3123,6 @@ "subtitleMergedLinesAppliedPlural": "Anvendte {0} linjesammenlægninger fra tekst til tale" }, "shotChanges": { - "titleGenerateOrImport": "Generer/importér sceneskift", "generateShotChanges": "Generer sceneskift", "importShotChanges": "Importer sceneskift", "generateShotChangesWithFfmpeg": "Generer sceneskift med ffmpeg", @@ -2788,7 +3132,9 @@ "timeCodeFormatColon": "Tidskodeformat:", "shotChangesList": "Liste over sceneskift", "shotChangesClearQuestion": "Er du sikker på, at du vil rydde alle sceneskift?", - "deleteSelectedShotChangeQuestion": "Er du sikker på, at du vil slette det valgte sceneskift?" + "deleteSelectedShotChangeQuestion": "Er du sikker på, at du vil slette det valgte sceneskift?", + "shotChanges": "Sceneskift", + "exportShotChanges": "Eksportér sceneskift" }, "videoOcr": { "title": "OCR af indbrændt undertekst", @@ -2798,10 +3144,6 @@ "bottomHalf": "Nederste halvdel", "fullFrame": "Hele billedet", "engine": "OCR-motor", - "language": "Sprog", - "url": "URL", - "model": "Model", - "apiKey": "API-nøgle", "scan": "Scan", "framesPerSecond": "Billeder pr. sekund", "textBrightnessMinimum": "Minimum tekstlysstyrke (0=fra)", @@ -2816,10 +3158,10 @@ "runningOcrXY": "Kører OCR... {0}/{1}", "noLinesFoundTitle": "Ingen undertekster fundet", "noLinesFoundMessage": "Der blev ikke fundet nogen tekst i scanområdet - prøv at justere scanområdet, motoren eller minimumslysstyrken.", + "ocrStoppedEarlyMessage": "OCR-motoren stoppede, før alle billeder var læst, så de linjer, der er fundet indtil nu, beholdes, og resten mangler.{0}{0}{1}", "linesFoundX": "{0} linjer fundet", "refiningTimingXY": "Finjusterer timing... {0}/{1}", "fixOcrErrors": "Ret OCR-fejl", - "dictionary": "Ordbog", "editLineX": "Rediger linje {0}", "downloadDictionaryHint": "Download en stavekontrolordbog...", "framesPerSecondHint": "Hvor mange billeder pr. sekund der scannes. 5 dækker normale undertekster; højere fanger meget korte linjer og strammer grupperingen, men koster mere OCR-tid.", @@ -2836,14 +3178,64 @@ "testOcr": "Test aktuelt billede", "testOcrRunning": "Tester OCR på aktuelt billede...", "testOcrResultX": "Testresultat: {0}", - "testOcrNoTextFound": "Test: ingen tekst fundet i scanområdet" + "testOcrNoTextFound": "Test: ingen tekst fundet i scanområdet", + "engineSettings": "Indstillinger for OCR-motor", + "engineBuiltIn": "Indbygget i operativsystemet", + "engineExternalServer": "Ekstern server (installeret og administreret uden for Subtitle Edit)", + "engineCloudApi": "Cloud-API (kræver en API-nøgle)", + "engineNothingToInstall": "Intet at installere", + "engineModelsMissing": "Motor installeret, modeller mangler", + "website": "Websted" + }, + "backgroundMusic": { + "title": "Generer baggrundsmusik", + "generateBackgroundMusicDotDotDot": "Generer baggrundsmusik...", + "preset": "Forudindstilling", + "prompt": "Prompt", + "tempoBpm": "Tempo (BPM)", + "generateSeconds": "Generer (sekunder)", + "seed": "Seed", + "randomSeed": "Tilfældig", + "outputLength": "Outputlængde", + "outputLengthVideoX": "{0} (videoens længde - musikken looper sømløst)", + "musicVolumePercent": "Musiklydstyrke (%)", + "removeExistingAudioTracks": "Fjern eksisterende lydspor", + "originalAudioVolumePercent": "Original lydstyrke (%)", + "saveAudioDotDotDot": "Gem lyd...", + "addToVideoDotDotDot": "Tilføj til video...", + "engineInfo": "ACE-Step 1.5 Turbo via audio.cpp (MIT-licens) - kører lokalt", + "presetCooking": "Madlavning / bagning", + "presetTech": "Teknologi / gadget-anmeldelse", + "presetForest": "Skov / natur", + "presetRelaxingPiano": "Afslappende klaver", + "presetLofiVlog": "Lo-fi vlog", + "presetCorporate": "Erhverv / forklaringsvideo", + "loadingModel": "Indlæser model...", + "composing": "Komponerer...", + "generatingAudio": "Genererer lyd...", + "decodingAudio": "Afkoder lyd...", + "creatingLoop": "Opretter sømløst loop...", + "resultLoopXYZ": "Loop: {0} ved {1} BPM, overgangsmatch {2}%", + "resultNoLoopX": "Musik klar: {0}", + "addingMusicToVideo": "Tilføjer musik til video...", + "downloadModelTitle": "Download musikmodel?", + "downloadModelQuestionX": "Generering af musik kræver ACE-Step 1.5-modellen ({0}).\n\nDownload model?", + "downloadingModel": "Downloader ACE-Step 1.5-model...", + "saveAudioTitle": "Gem baggrundsmusik", + "audioFileSavedX": "Lydfil gemt: {0}", + "unableToGenerateMusic": "Kan ikke generere musik", + "unableToAddMusicToVideo": "Kan ikke tilføje musik til video", + "outputLengthTextToSpeech": "Følger den genererede tale - musikken looper sømløst og dæmpes, mens nogen taler", + "addBackgroundMusic": "Tilføj baggrundsmusik", + "addBackgroundMusicHint": "Generer musik lokalt med ACE-Step 1.5, og mix den under talen - den dæmpes, mens nogen taler", + "generatingBackgroundMusicDotDotDot": "Genererer baggrundsmusik...", + "mixingBackgroundMusicDotDotDot": "Mixer baggrundsmusik..." }, "voices": "Stemmer", "presets": "Forudindstillinger", "talkerX": "Taler {0}", "baseModel": "Basismodel", "turboModel": "Turbomodel", - "ttsUpdateX": "Opdater {0}", "ttsEngineNotInstalled": "{0} er ikke installeret", "ttsEngineUpdateAvailable": "{0} - opdatering tilgængelig", "ttsEngineTooOldUpdateRequired": "{0} er for gammel - opdatering påkrævet", @@ -2866,19 +3258,25 @@ "cloneVoiceTo": "Klon stemme til", "cloneVoiceNameTitle": "Navn på ny stemme", "cloneVoiceExtractFailed": "Kunne ikke udtrække lyd for den valgte linje.", + "lineXHasNoDuration": "Linje {0} har ingen varighed (sluttiden ligger ikke efter starttiden), så der er ingen lyd at udtrække.", + "audioClipsSkippedLinesX": "Der kunne ikke udtrækkes lyd for disse linjer, så de blev sprunget over: {0}", "toggleShotChange": "Vis/skjul sceneskift", "resetWaveformZoomAndSpeed": "Nulstil bølgeformszoom og hastighed", "showOriginalSubtitle": "Vis original undertekst", + "timelineGroupTracksBy": "Gruppér undertekstspor efter", + "timelineShowThumbnails": "Vis videominiaturer", + "showSpeechOnly": "Vis kun tale (langsom at generere)", + "isolatingSpeechForWaveformX": "Isolerer tale til bølgeformen... {0}", + "isolatingSpeechForWaveformFailed": "Kunne ikke isolere talen til bølgeformen - se værktøjsloggen", + "speechOnlyWaveformReady": "Bølgeformen viser nu kun tale", "showOnlyWaveform": "Vis kun bølgeform", "showOnlySpectrogram": "Vis kun spektrogram", "showWaveformAndSpectrogram": "Vis bølgeform og spektrogram", - "spectrogramClassic": "Klassisk", "spectrogramClassicViridis": "Viridis", "spectrogramClassicPlasma": "Plasma", "spectrogramClassicInferno": "Inferno", "spectrogramClassicTurbo": "Turbo", "spectrogramNeon": "Neon", - "waveformDrawStyleClassic": "Klassisk", "waveformDrawStyleFancy": "Flot", "setVideoPositionAndPauseAndSelectSubtitle": "Indstil videoposition, pause, og vælg undertekst", "setVideopositionAndPauseAndSelectSubtitleAndCenter": "Indstil videoposition, pause, vælg undertekster og centrer", @@ -2888,7 +3286,6 @@ }, "sync": { "visualSync": "Visuel synkronisering", - "sync": "Synkroniser", "startScene": "Startscene", "endScene": "Slutscene", "playTwoSecondsAndBack": "Spil 2 sekunder og tilbage", @@ -2904,19 +3301,18 @@ "adjustSelectedLinesAndForward": "Juster valgte linjer og frem", "toFrameRate": "Til billedhastighed", "fromFrameRate": "Fra billedhastighed", + "videoXFrameRateY": "{0} - {1} fps", "adjustAllTimes": "Juster alle tidspunkter (vis tidligere/senere)", "showEarlier": "Vis tidligere", "showLater": "Vis senere", - "changeFrameRate": "Skift billedhastighed", "setSyncPoint": "Indstil synkroniseringspunkt", "setSyncPointViaVideo": "Sæt synkroniseringspunkt via video...", "syncPointTimeCode": "Tidskode for synkroniseringspunkt", "syncPoints": "Synkroniseringspunkter", "pointSync": "Punktsynkronisering", "pointSyncViaOther": "Punktsynkronisering via anden undertekst", - "adjustmentX": "Justering: {0}", - "totalAdjustmentX": "Samlet justering: {0}", - "syncPointCandidateInfo": "Linjer, der starter efter {0}+ sekunders stilhed, fremhæves - de giver ofte pålidelige synkroniseringspunkter", + "syncPointCandidateAfterInfo": "Linjer efterfulgt af {0}+ sekunders stilhed er fremhævet - de giver ofte pålidelige synkroniseringspunkter", + "gapAfter": "Mellemrum efter", "adjustAllShortcuts": "Tastaturgenveje:\r\n\r\n• Skift + Venstre/Højre: Flyt 10 ms\r\n• Ctrl + Venstre/Højre: Flyt 100 ms\r\n• Alt + Venstre/Højre: Flyt 500 ms", "offsetInSeconds": "Offset i sekunder", "speedFactor": "Hastighedsfaktor", @@ -2936,6 +3332,7 @@ "lineMerge": "Linjefletning", "delayInSecondsBetweenRequests": "Forsinkelse i sekunder mellem anmodninger", "maxBytesPerRequest": "Maks. bytes pr. anmodning", + "keepMusicLinesUntranslated": "Oversæt ikke linjer i musiksymboler (♪ ... ♪)", "promptText": "Prompttekst", "resetPromptToDefault": "Nulstil prompt til standard", "translateEachLineSeparately": "Oversæt hver linje separat", @@ -2949,11 +3346,10 @@ "readyToTranslate": "Klar til at oversætte", "translating": "Oversætter...", "translationComplete": "Oversættelse færdig", + "translateInPlaceNoOriginal": "Oversæt på stedet (opret ikke original)", "translationCancelled": "Oversættelse annulleret", "swapLanguages": "Skift kilde- og målsprog", "xIsAlreadyDownloadedReDownload": "{0} er allerede downloadet.\r\nGendownload?", - "advancedDotDotDot": "Avanceret...", - "advancedSettings": "Avancerede indstillinger", "advancedSettingsSubtitle": "Batch-, kontekst- og sampling-indstillinger for den avancerede llama.cpp-motor", "context": "Kontekst", "synopsis": "Synopsis", @@ -2977,6 +3373,7 @@ "useOnlyExtraServerParametersHint": "Start llama-server med parametrene ovenfor i stedet for Subtitle Edits egen tuning - kun model, host og port sættes stadig", "serverRunningAtX": "Server kører på {0}", "customPromptHint": "Brugerdefinerede instruktioner ({0} = kildesprog, {1} = målsprog); tom = indbygget prompt", + "editTranslationHint": "Klik på oversættelsen i den valgte række for at redigere den (Enter gemmer, Escape annullerer)", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp kræver, at llama-server-motoren og en oversættelsesmodel downloades. Vil du downloade nu?", "llamaCppDownloadEnginePrompt": "llama.cpp kræver, at llama-server-motoren downloades. Vil du downloade nu?", "llamaCppDownloadModelPrompt": "llama.cpp kræver, at den valgte oversættelsesmodel downloades. Vil du downloade nu?" @@ -2989,7 +3386,6 @@ "dialogStyleDashBothLinesWithSpace": "Bindestreg på begge linjer med mellemrum", "dialogStyleDashBothLinesWithoutSpace": "Bindestreg på begge linjer uden mellemrum", "continuationStyle": "Fortsættelsesstil", - "continuationStyleNone": "Ingen", "continuationStyleNoneTrailingDots": "Ingen, punktummer for pauser (kun afsluttende)", "continuationStyleNoneLeadingTrailingDots": "Ingen, punktummer for pauser", "continuationStyleNoneTrailingEllipsis": "Ingen, ellipse for pauser (kun afsluttende)", @@ -3000,7 +3396,6 @@ "continuationStyleLeadingTrailingEllipsis": "Ellipse", "continuationStyleLeadingTrailingDash": "Bindestreg", "continuationStyleLeadingTrailingDashDots": "Bindestreg, men punktummer for pauser", - "continuationStyleCustom": "Tilpasset", "cpsLineLengthStyle": "Cps/linjelængde", "cpsLineLengthStyleCalcAll": "Tæl alle tegn", "cpsLineLengthStyleCalcNoSpaceCpsOnly": "Tæl alle undtagen mellemrum, kun cps", @@ -3013,14 +3408,6 @@ "cpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly": "Intet mellemrum eller tegnsætning, kun CPS", "cpsLineLengthStyleCalcIgnoreArabicDiacritics": "Ignorer arabiske diakritiske tegn", "cpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "Ignorer arabiske diakritiske tegn, ingen mellemrum", - "timeCodeModeHhMmSsMs": "HH:MM:SS:MS", - "timeCodeModeHhMmSsFf": "HH:MM:SS:FF", - "splitBehaviorPrevious": "Tilføj mellemrum til venstre for delepunktet (fokus til højre)", - "splitBehaviorHalf": "Tilføj mellemrum i midten af delepunktet (fokus til venstre)", - "splitBehaviorNext": "Tilføj mellemrum til højre for delepunktet (fokus til venstre)", - "subtitleListActionNothing": "Intet", - "subtitleListActionVideoGoToPositionAndPause": "Gå til videoposition og sæt på pause", - "subtitleListActionVideoGoToPositionAndPlay": "Gå til videoposition og afspil", "subtitleGridCenterText": "Centrér tekst i undertekstgitteret", "minGapCalculateDotDotDot": "Beregn minimalt mellemrum ud fra en billedhastighed...", "minGapCalculateTitle": "Min. mellemrum mellem undertekster i ms", @@ -3052,8 +3439,14 @@ "checkForUpdatesChannelStableAndBeta": "Stabile og beta-versioner", "assaAutoSetResolution": "ASSA: sæt opløsning (PlayResX/PlayResY) ud fra videoen, når en video åbnes", "assaAutoSetResolutionPrompt": "ASSA: spørg, før opløsningen ændres, så den passer til videoen (ellers gensamples automatisk)", + "videoControls": "Videokontroller", + "videoControlsEdit": "Rediger videokontroller...", + "videoControlsPositionText": "Tekst for position / varighed", + "videoControlsVideoFileName": "Videofilnavn", + "videoControlsPlayerName": "Navn på videoafspiller", "mergeKeepEndTime": "Flet linjer: behold sluttid (tillad overlap med næste undertekst)", "mergeKeepEndTimeOnlyAssa": "Flet linjer: behold kun sluttid for \"Advanced Sub Station Alpha\"", + "mergeAutoBreak": "Flet linjer: automatisk linjeskift i flettet tekst (fra beholder linjernes egne linjeskift)", "defaultSaveLocation": "Standardplacering ved gemning", "defaultSaveLocationSourceFileFolder": "Mappe med undertekst-/videofil", "defaultSaveLocationLastUsedFolder": "Senest brugte mappe", @@ -3061,18 +3454,10 @@ "defaultSaveLocationSubtitleFileFolder": "Undertekstfilens mappe", "defaultSaveLocationCustomFolder": "Brugerdefineret mappe", "subtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "Gå til videoposition, afspil aktuel og sæt på pause", - "subtitleListActionEditText": "Gå til tekstredigeringsfeltet", "subtitleListActionVideoGoToPositionMinus1SecAndPause": "Gå til videoposition - 1 s og sæt på pause", "subtitleListActionVideoGoToPositionMinusHalfSecAndPause": "Gå til videoposition - 0,5 s og sæt på pause", "subtitleListActionVideoGoToPositionMinus1SecAndPlay": "Gå til videoposition - 1 s og afspil", - "subtitleListActionEditTextAndPause": "Gå til tekstredigeringsfeltet, og sæt på pause ved videoposition", - "autoBackupEveryMinute": "Hvert minut", - "autoBackupEveryXthMinute": "Hvert {0}. minut", - "profiles": "Profiler", - "autoBackupDeleteAfterXMonths": "Slet auto-backups efter {0} måneder", "searchSettingsDotDotDot": "Søg efter indstillinger...", - "syntaxColoring": "Syntaksfarvning", - "waveformSpectrogram": "Bølgeform/spektrogram", "network": "Netværk", "fileTypeAssociations": "Filtypetilknytninger", "textBoxColorTags": "Farvemærker (HTML/ASSA) i underteksttekstboks", @@ -3100,10 +3485,9 @@ "darkThemeForegroundColor": "Forgrundsfarve (mørkt tema)", "darkThemeBackgroundColor": "Baggrundsfarve (mørkt tema)", "showGridLines": "Vis gitterlinjer", - "resetSettings": "Vil du nulstille indstillinger?", - "resetSettingsDetail": "Dette vil nulstille alle indstillinger til deres standardværdier.\r\n\r\n\r\nFortsætte?", "showHorizontalLineAboveToolbar": "Vis vandret linje over værktøjslinjen", "bookmarkColor": "Bogmærkefarve", + "spellCheckHighlightColor": "Fremhævningsfarve for stavekontrol", "singleLineMaxLength": "Enkeltlinje maks. længde", "optimalCharsPerSec": "Optimale tegn/sek", "maxCharsPerSec": "Max tegn/sek", @@ -3116,13 +3500,21 @@ "unbreakSubtitlesShortThan": "Saml undertekster kortere end", "newEmptyDefaultMs": "Standard ny undertekstvarighed (ms)", "timeCodeUpDownStepMs": "Tid op/ned-trin (ms)", + "moveSelectedLinesStepMs": "Trin for genvej til flytning af valgte linjer (ms)", + "moveStartEndStepMs": "Trin for genvej til flytning af start/slut (ms)", + "moveLinesShortenNeighbor": "Flyt linjer: forkort forrige/næste linje i stedet for at overlappe den", "promptBeforeDelete": "Spørg før sletning", "rememberPositionAndSize": "Husk vinduers placering og størrelse", + "titleBarFullFileName": "Vis fuld filsti i titellinjen", + "showRecentFiles": "Vis seneste filer (til genåbning)", "openLastFileOnStart": "Åbn sidste seneste fil ved start", "autoSave": "Gem automatisk (gem den åbne fil under redigering)", "autoBackupOn": "Auto-backup", "autoBackupIntervalMinutes": "Interval for automatisk backup (minutter)", "autoBackupDeleteAfterDays": "Opbevaring af automatisk backup (dage)", + "settingsBackupOn": "Automatisk sikkerhedskopiering af indstillinger", + "settingsBackupIntervalDays": "Interval for sikkerhedskopiering af indstillinger (dage, 0 = ved hver start)", + "settingsBackupMaxCount": "Antal sikkerhedskopier af indstillinger, der beholdes", "autoConvertToUtf8": "Konvertér automatisk kodning til UTF-8 ved åbning", "autoTrimWhiteSpace": "Automatisk trim mellemrum", "defaultEncoding": "Standardkodning", @@ -3137,22 +3529,13 @@ "colorGapTooShort": "Farv hvis mellemrummet er for kort", "errorBackgroundColor": "Fejlbaggrundsfarve", "waveformDrawGridLines": "Tegn gitterlinjer", - "waveformCenterVideoPosition": "Centrer videoposition", + "waveformUseSkiaRenderer": "Brug eksperimentel hurtig renderer", "waveformCenterVideoPositionAlsoWhenPaused": "Centrer videoposition også ved pause", + "waveformSelectCurrentSubtitleWhilePaused": "Vælg aktuel undertekst også under pause", + "waveformRememberZoom": "Husk zoom (vandret og lodret)", "waveformShowToolbar": "Vis værktøjslinje", "waveformShowToolbarEdit": "Rediger værktøjslinje...", "waveformSpectrogramCombinedWaveformHeight": "Bølgeform/spektrogram kombineret, bølgeformhøjde %", - "showWaveformToolbarPlay": "Værktøjslinje: vis afspilningsknappen", - "showWaveformToolbarRepeat": "Værktøjslinje: Vis gentag-knap", - "showWaveformToolbarRemoveBlankLines": "Værktøjslinje: vis knappen Fjern tomme linjer", - "showWaveformToolbarNew": "Værktøjslinje: vis ny undertekstknap", - "showWaveformToolbarSetStart": "Værktøjslinje: vis sæt startknap", - "showWaveformToolbarSetEnd": "Værktøjslinje: vis sæt afslutningsknap", - "showWaveformToolbarStartAndOffsetTheRest": "Værktøjslinje: vis sæt start og forskyd resten", - "showWaveformToolbarHorizontalZoom": "Værktøjslinje: vis vandret zoom-skyder", - "showWaveformToolbarVerticalZoom": "Værktøjslinje: vis lodret zoomskyder", - "showWaveformToolbarVideoPositionSlider": "Værktøjslinje: vis videopositionsskyderen", - "showWaveformToolbarPlaybackSpeed": "Værktøjslinje: vis afspilningshastighed", "waveformFocusTextboxAfterInsertNew": "Fokusér tekstboks efter indsættelse", "waveformInvertMouseWheel": "Vend musehjulet", "waveformSnapToShotChanges": "Fastgør til sceneskift", @@ -3168,18 +3551,18 @@ "fixCommonErrorsSkipStep1": "Ret almindelige fejl: spring trin 1 over (vælg rettelser)", "showPluginsMenu": "Vis menuen Plugins", "proxyAddress": "Proxyadresse", - "username": "Brugernavn", "password": "Adgangskode", "defaultFormat": "Standardformat", "defaultSaveAsFormat": "Standard 'Gem som'-format", "favoriteSubtitleFormats": "Foretrukne undertekstformater", - "showStopButton": "Vis stopknap", - "showFullscreenButton": "Vis knap på fuld skærm", "fullscreenHideControls": "Skjul videokontroller i fuld skærm", + "showSecondarySubtitleDialog": "Vis stilartsdialog ved åbning af en sekundær undertekstfil", + "rememberSecondarySubtitleFile": "Husk sekundær undertekstfil", "autoOpenVideoFile": "Åbn automatisk videofil, når du åbner undertekster", "downloadMpv": "Hent mpv", "downloadVlc": "Hent VLC", "allowSingleLetterShortcutsInTextbox": "Tillad enkeltbogstavsgenveje i tekstboksen", + "allowTextNavigationShortcutsInTextbox": "Tillad genveje på tekstnavigationstaster (Ctrl+Venstre/Højre, Home/End) i tekstboks", "spellCheckEnglishTreatInApostropheAsIng": "Stavekontrol: Behandl ord, der ender på 'in'' som 'ing' (kun på engelsk)", "goToLineNumberSetsVideoPosition": "Gå-til-linje-nummer indstiller også videoposition", "adjustAllTimesRememberLineSelectionChoice": "Juster alle tider, husk valg af linjer", @@ -3191,6 +3574,7 @@ "showAssaLayer": "Vis ASSA-lagboks", "waveformCursorColor": "Bølgeform markør-/hovedfarve", "waveformShotChangeColor": "Bølgeform sceneskift-farve", + "waveformGridColor": "Gitterfarve for bølgeform", "waveformParagraphLeftColor": "Bølgeform venstre kantfarve", "waveformParagraphRightColor": "Bølgeform højre kantfarve", "waveformFancyHighColor": "Bølgeform fancy høj farve", @@ -3218,26 +3602,30 @@ "resetSyntaxColoring": "Nulstil syntaksfarve", "resetWaveform": "Nulstil bølgeform", "resetRules": "Nulstil regler", - "useFrameMode": "Brug billedtilstand (tt.mm.ss.ff)", + "timeCodeMode": "Tidskodetilstand", + "timeCodeModeTime": "Tid (hh:mm:ss,zzz)", + "timeCodeModeFrames": "Billeder (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "Billednumre", + "frameModeSnapToVideoFrames": "Gem tider på videobilleder (ikke billeder inden for hvert sekund)", "textBoxLimitNewLines": "Begræns antallet af linjer i undertekstboksen", - "mpvVideoOutput": "Videoudgang (mpv)", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - Softwaregengivelse (langsom)", + "mpvMetalRendering": "libmpv - Metal (eksperimentel, kræver genstart)", "mpvWidRendering": "libmpv - Native Window ID-gengivelse", "waveFormsAndSpectrogramFoldersContainsX": "'Bølgeformer' og 'spektrogram'-mapper indeholder {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "Slet 'Waveforms' og 'Spectrogram' filer?", "waveformGenerateSpectrogram": "Generer spektrogram", "waveformSpectrogramMode": "Spektrogramtilstand", - "waveformCenterOnSingleClick": "Centrer på enkelt klik", - "waveformSingleClickSelectsSubtitle": "Vælg undertekst ved et enkelt klik", "waveformRightClickSelectsSubtitle": "Vælg undertekst ved højreklik", - "waveformPauseOnSingleClick": "Pause ved et enkelt klik", "waveformDrawStyle": "Bølgeformtegnestil", "waveformExtractAudioFormat": "Udtræk lydformat", "waveformExtractAudioSampleRate": "Samplefrekvens for udtrukket lyd", "waveformExtractAudioSampleRateOriginal": "Original (behold kilde)", "waveformExtractAudioBitRate": "Bithastighed for udtrukket lyd (MP3/M4A)", + "ffmpegUseCenterChannelOnly": "Brug kun frontcenterkanalen til 5.1-lyd (FFmpeg)", "vlcWidRendering": "libVLC - Native Window ID-gengivelse", + "ffmpegSoftwareRendering": "FFmpeg", + "downloadFfmpegLibs": "Download FFmpeg-biblioteker (til FFmpeg-videoafspilleren)", "subtitleGridEnterKeyAction": "Undertekstgitter Enter-tasthandling", "subtitleSingleClickAction": "Undertekstgitter handling med et enkelt klik", "subtitleDoubleClickAction": "Undertekstgitter dobbeltklik på handling", @@ -3254,6 +3642,7 @@ "subtitleGridFormattingShowFormatting": "Vis formatering", "subtitleGridFormattingShowTags": "Vis tags", "subtitleGridFormattingHideTags": "Skjul tags", + "subtitleGridFormattingShowFormattingKeepTags": "Vis formatering, behold ikke-visuelle tags", "waveformParagraphBackgroundColor": "Bølgeform undertekst baggrundsfarve", "waveformParagraphSelectedBackgroundColor": "Bølgeform valgt undertekst baggrundsfarve", "waveformAllowOverlap": "Tillad overlapning (ved flytning/ændring af størrelse)", @@ -3263,8 +3652,6 @@ "saveAsBehaviorUseVideoFileName": "Brug videofilnavn", "saveAsBehaviorUseSubtitleFileName": "Brug undertekst filnavn", "saveAsAppendLanguageCodeTwoLetter": "To bogstaver", - "saveAsAppendLanguageCodeThreeLetter": "Tre bogstaver", - "saveAsAppendLanguageCodeThreeLetterBibliographic": "Tre bogstaver (ISO 639-2/B)", "saveAsAppendLanguageCodeLanguageName": "Sprognavn", "splitOddLineActionWeightTop": "Vægt øverst", "splitOddLineActionWeightBottom": "Vægt nederst", @@ -3273,6 +3660,7 @@ "speechToTextSelectedLinesPromptFirstTimeOnly": "Tale til tekst: valgte linjer, spørg kun om sprog/motor første gang", "multipleReplaceShowDotDotDotButtons": "Flere udskiftninger: Vis kontekstmenuknapper", "gridFocusTextboxAfterInsertNew": "Gitter: fokus tekstboks efter indsættelse af ny undertekst", + "undoRedoGoToChangedLine": "Fortryd/gendan: gå til ændret linje (og videoposition)", "musicSymbol": "Musiksymbol", "musicSymbolsToReplace": "Musiksymboler der skal erstattes (adskilt af komma)", "textToSpeechPromptMergeContinuationLines": "Tekst til tale: spørg om at flette fortsættelseslinjer", @@ -3281,8 +3669,7 @@ "useFocusedButtonBackgroundColor": "Brug baggrundsfarve til fokuseret knap", "focusedButtonBackgroundColor": "Fokuseret knap baggrundsfarve", "forceCrLfOnSave": "Tving CR+LF når der gemmes (tekstbaserede undertekstfiler)", - "showWaveformToolbarPlayNext": "Værktøjslinje: vis afspil næste knap", - "showWaveformToolbarPlaySelection": "Værktøjslinje: Vis afspilningsvalgknap", + "linuxClipboardUseExternalTool": "Kopiér tekst via xclip/wl-copy (bevarer tegn med accenter)", "showFormatLimitWarning": "Advar ved gemning, når linjer overskrider formatets grænser (f.eks. SCC 32 tegn/linje)", "textBoxButtonShowAutoBreak": "Tekstboks: vis autobryd-knap", "textBoxButtonShowUnbreak": "Tekstboks: vis saml-knap", @@ -3294,12 +3681,18 @@ "waveformDoubleClickAction": "Bølgeform-dobbeltklik-handling (efter enkelt-klik-handling)", "allSettings": "Alle indstillinger", "uiScale": "UI-skala (%)", + "fontScale": "Skriftskalering (%)", + "textSelectionOpacity": "Uigennemsigtighed for tekstmarkering (%)", "waveformToolbarItems": "Bølgeform-værktøjslinjeelementer", "matchIconColorToDarkTheme": "Match ikonfarve til mørk temaforgrundsfarve", "subtitlePreviewProperties": "Egenskaber til forhåndsvisning af undertekster", "usePositionFromSubtitleFile": "Brug position fra undertekstfilen (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "Margen er en del af undertekstområdet", "textJustify": "Justér linjer", + "deinterlace": "Deinterlace video", + "deinterlaceOff": "Fra", + "deinterlaceAuto": "Auto (kun interlaced billeder)", + "deinterlaceAlways": "Altid", "pixelWidthInfo": "Grønne linjer = maks. breddegrænse | \r\nRødt område = tekst overskrider grænsen", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3309,6 +3702,15 @@ "waveformSaveAsCustomTheme": "Gem som brugerdefineret tema...", "waveformLoadThemeDotDotDot": "Indlæs tema...", "waveformExportThemeDotDotDot": "Eksporter tema...", + "waveformSaveCustomThemeTitle": "Gem brugerdefineret tema", + "waveformThemeFileType": "Subtitle Edit-bølgeformtema", + "waveformThemeHighContrast": "Høj kontrast", + "waveformThemeOceanBlue": "Havblå", + "waveformThemeWarmSunset": "Varm solnedgang", + "waveformThemeForest": "Skov", + "waveformThemeMidnightPurple": "Midnatslilla", + "waveformThemeRetroAmber": "Retro-rav", + "waveformThemeIce": "Is", "subtitleGridTextSingleLineSeparator": "Enkeltlinjeadskiller (f.eks.
)", "subtitleGridTextDisplay": "Undertekst tilpasset i gitter", "subtitleGridTextDisplayClip": "Beskær (enkelt linje)", @@ -3325,107 +3727,53 @@ "webVttUseXTimestampMap": "WebVTT: brug X-TIMESTAMP-MAP (forskyd tidskoder ved indlæsning)", "waveformAutoGenerate": "Generér automatisk bølgeform, når en video åbnes", "gridGoToSubtitleAndPlayAndFocusTextBox": "Gå til undertekst og afspil og fokusér på tekstboks", - "ocrGuessUnknownWords": "OCR: forsøg at gætte ukendte ord" + "ocrGuessUnknownWords": "OCR: forsøg at gætte ukendte ord", + "spellCheckRememberUseAlwaysList": "Stavekontrol: husk listen \"Brug altid\"", + "fixShortDisplayTimesAllowMoveStartTime": "Ret almindelige fejl: ret korte visningstider må flytte starttid" }, "shortcuts": { - "title": "Genveje", "searchShortcuts": "Søg i genveje...", - "filter": "Filter", - "categoryGeneral": "Generelt", "categorySubtitleGridAndTextBox": "Undertekstliste og tekstfelt", "categorySubtitleGrid": "Undertekstliste", - "categoryWaveform": "Bølgeform", - "generalSetupLikeSe4": "Konfigurer som Subtitle Edit 4 (tema, genveje, erstat regler)", - "generalMergeSelectedLines": "Flet markerede linjer", - "generalMergeWithPrevious": "Flet med forrige", - "generalMergeWithNext": "Flet med næste", - "generalMergeWithPreviousAndUnbreak": "Flet med forrige og saml", - "generalMergeWithNextAndUnbreak": "Flet med næste og saml", - "generalMergeWithPreviousAndAutoBreak": "Flet med forrige og auto-del", - "generalMergeWithNextAndAutoBreak": "Flet med næste og auto-del", - "generalMergeSelectedLinesAndAutoBreak": "Flet markerede linjer og auto-del", "generalMergeSelectedLinesAndUnbreak": "Flet markerede linjer og saml", "generalMergeSelectedLinesAndUnbreakCjk": "Flet markerede linjer og saml uden mellemrum (CJK)", "generalUnbreakNoSpaceCjk": "Fjern linjeskift uden mellemrum (CJK)", - "generalMergeSelectedLinesOnlyFirstText": "Flet markerede linjer, kun første tekst", + "generalToggleBreak": "Skift linjeskift/fjern linjeskift", "generalMergeSelectedLinesBilingual": "Flet markerede linjer tosproget", - "generalMergeWithPreviousBilingual": "Flet med forrige tosproget", - "generalMergeWithNextBilingual": "Flet med næste tosproget", - "generalMergeOriginalAndTranslation": "Flet original og oversættelse", "generalToggleTranslationMode": "Slå oversættelsestilstand til/fra", - "generalSwitchOriginalAndTranslation": "Skift original og oversættelse", - "generalSwitchOriginalAndTranslationTextBoxes": "Skift original og oversættelse-tekstfelter", "generalToggleTranslationAndOriginalInPreviews": "Skift mellem oversættelse og original i video-/lydforhåndsvisning", "generalChooseLayout": "Vælg layout", - "generalLayoutChooseX": "Layout {0}", - "generalPlayFirstSelected": "Afspil først markerede", - "generalGoToFirstSelectedLine": "Gå til første markerede linje", - "generalGoToNextEmptyLine": "Gå til næste tomme linje", "generalGoToNextSubtitle": "Gå til næste undertekst", "generalGoToNextSubtitlePlayTranslate": "Gå til næste undertekst (afspil oversæt)", "generalGoToNextSubtitleCursorAtEnd": "Gå til næste undertekst (markør ved slutning)", "generalGoToPrevSubtitle": "Gå til forrige undertekst", "generalGoToPrevSubtitlePlayTranslate": "Gå til forrige undertekst (afspil oversæt)", - "generalGoToStartOfCurrentSubtitle": "Gå til start af aktuel undertekst", - "generalGoToEndOfCurrentSubtitle": "Gå til slutning af aktuel undertekst", - "generalGoToPreviousSubtitleAndFocusVideo": "Gå til forrige undertekst og fokuser på video", - "generalGoToNextSubtitleAndFocusVideo": "Gå til næste undertekst og fokuser på video", - "generalGoToPrevSubtitleAndPlay": "Gå til forrige undertekst og afspil", - "generalGoToNextSubtitleAndPlay": "Gå til næste undertekst og afspil", - "generalGoToPreviousSubtitleAndFocusWaveform": "Gå til forrige undertekst og fokuser på bølgeform", - "generalGoToNextSubtitleAndFocusWaveform": "Gå til næste undertekst og fokuser på bølgeform", - "generalGoToLineNumber": "Gå til linjenummer", "generalGoToFirstLine": "Gå til første linje", "generalGoToLastLine": "Gå til sidste linje", "alsoSetVideoPosition": "Sæt også videoposition", "generalGoToVideoPosition": "Gå til videoposition", "generalToggleItalic": "Slå kursiv til/fra", "generalToggleBold": "Slå fed til/fra", - "generalToggleBookmarks": "Slå bogmærker til/fra", - "generalFocusTextBox": "Fokuser på tekstfelt", - "generalToggleBookmarksWithText": "Slå bogmærker med tekst til/fra", - "generalEditBookmarks": "Rediger bogmærker", - "fileNew": "Ny", "generalToggleUnderline": "Slå understregning til/fra", + "generalToggleBox": "Skift boks (EBU STL)", "fileOpen": "Åbn", "fileOpenKeepVideo": "Åbn (behold video)", "fileSave": "Gem", "fileSaveAs": "Gem som", - "fileSaveAll": "Gem alle", "fileSaveOriginal": "Gem original", - "fileSaveOriginalAs": "Gem original som", - "fileOpenOriginalSubtitle": "Åbn original undertekst", - "fileCloseOriginalSubtitle": "Luk original undertekst", - "fileTranslatedSubtitle": "Oversat undertekst", "fileCompare": "Sammenlign", "fileStatistics": "Statistik", "fileImportPlainText": "Importer almindelig tekst", - "fileImportBluRaySupForOcr": "Importer Blu-ray SUP til OCR", - "fileImportBluRaySupForEdit": "Importer Blu-ray SUP til redigering", - "fileImportTimeCodes": "Importer tidskoder", "fileExportEbuStl": "Eksporter EBU STL", "fileExportPac": "Eksporter PAC", - "fileExportEdlClipName": "Eksporter EDL-klipnavn", - "fileExportPlainText": "Eksporter almindelig tekst", - "fileExportCustomTextFormat1": "Eksporter tilpasset tekstformat 1", - "fileExportCustomTextFormat2": "Eksporter tilpasset tekstformat 2", - "fileExportCustomTextFormat3": "Eksporter tilpasset tekstformat 3", "fileExit": "Afslut", "openSeDataFolder": "Åbn Subtitle Edit-mappe", - "editFind": "Find", - "editFindNext": "Find næste", "editFindPrevious": "Find forrige", - "editReplace": "Erstat", - "editMultipleReplace": "Flere erstatninger", "fillSelectedLinesWithClipboard": "Udfyld valgte linjer med udklipsholdertekst", - "editModifySelection": "Rediger markering", - "listSelectAll": "Vælg alle", - "listSelectFirst": "Vælg første", - "listSelectLast": "Vælg sidste", "listInverseSelection": "Inverter markering", "listDeleteSelection": "Slet markering", + "deleteSelectionEverywhere": "Slet markering (overalt)", "rippleDeleteSelection": "Ripple-slet markering", - "settings": "Indstillinger", "assigned": "Tildelt", "unassigned": "Ikke tildelt", "pressedKeyX": "Trykt tast: {0}", @@ -3433,6 +3781,7 @@ "detectKey": "Registrer tast", "control": "Control", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Shift", "controlMac": "⌃", @@ -3443,11 +3792,14 @@ "resetShortcutsDetail": "Vil du nulstille alle genveje til standardværdier?", "togglePlayPause": "Skift afspilning/pause", "toggleLockTimeCodes": "Slå låsetidskoder til/fra", + "toggleTimeCodeMode": "Skift tidskodetilstand (tid/billeder/billednumre)", + "toggleScreenPrivacy": "Skift skærmbeskyttelse (skjul filnavne, derefter også tekster)", + "screenPrivacyFileNamesHidden": "Skærmbeskyttelse: filnavne skjult", + "screenPrivacyFileNamesAndTextsHidden": "Skærmbeskyttelse: filnavne og tekster skjult", + "screenPrivacyOff": "Skærmbeskyttelse: fra", "duplicateSelectedLines": "Dupliker valgte linjer", "sourceView": "Kildevisning", - "showAlignmentPicker": "Justering", "addOrEditBookmark": "Tilføj eller rediger bogmærke", - "listBookmarks": "Liste bogmærker", "toggleBookmark": "Skift bogmærke (valgte linjer, ingen tekst)", "toggleForcedSelectedLines": "Slå tvungen til/fra (valgte linjer)", "goToNextBookmark": "Gå til næste bogmærke", @@ -3458,7 +3810,6 @@ "waveformSetStartAndSetEndOfPreviousMinusGap": "Indstil start og sæt slutning af forrige minus mellemrum", "waveformSetEndAndStartOfNextAfterGap": "Indstil slutningen og starten af næste plus mellemrum", "waveformSetEndAndStartOfNextAfterGapAndGoToNext": "Indstil slutningen og starten af næste plus mellemrum og gå til næste", - "fetchFirstWordFromNextSubtitle": "Hent det første ord fra næste undertekst", "moveLastWordToNextSubtitle": "Flyt sidste ord til næste undertekst", "moveLastWordFromFirstLineDownCurrentSubtitle": "Flyt sidste ord fra første linje ned (aktuel undertekst)", "moveFirstWordFromNextLineUpCurrentSubtitle": "Flyt første ord fra næste linje op (aktuel undertekst)", @@ -3471,7 +3822,6 @@ "goToPreviousLineFromVideoPosition": "Gå til forrige undertekst (fra den aktuelle videoposition)", "goToNextLineFromVideoPosition": "Gå til næste undertekst (fra den aktuelle videoposition)", "goToNextLineAndSetVideoPosition": "Gå til næste undertekst og indstil videoposition", - "textBoxDeleteSelectionNoClipboard": "Tekstboks: Slet markering (ingen udklipsholder)", "textBoxDeleteForward": "Tekstboks: Slet markering eller næste tegn (slet fremad)", "textBoxCut": "Tekstboks: Klip", "textBoxCut2": "Tekstboks: Klip (alternativt)", @@ -3489,29 +3839,22 @@ "fileCloseOriginal": "Luk originalen", "fileCloseTranslation": "Luk oversættelse", "restoreAutoBackup": "Gendan automatisk sikkerhedskopiering", - "openContainingFolder": "Åbn indeholdende mappe", "importTimeCodes": "Importer tidskoder", "importSubtitleWithManuallyChosenEncoding": "Importer undertekster med manuelt valgt kodning", "exportBluRaySup": "Eksporter Blu-ray SUP", "exportCustomTextFormat": "Eksportér brugerdefineret tekstformat", "exportPlainText": "Eksporter almindelig tekst", - "showHistory": "Vis historik", "toggleRightToLeft": "Skift fra højre mod venstre", "modifySelection": "Rediger valg", "adjustDurations": "Juster varigheder", "applyDurationLimits": "Anvend varighedsgrænser", "batchConvert": "Batchkonvertering", - "bridgeGaps": "Byg bro over mellemrum", "applyMinGap": "Påfør min. mellemrum", - "fixCommonErrors": "Ret almindelige fejl", "makeEmptyTranslationFromCurrentSubtitle": "Lav en tom oversættelse fra den aktuelle undertekst", - "mergeLinesWithSameText": "Flet linjer med samme tekst", - "mergeLinesWithSameTimeCodes": "Flet linjer med samme tidskoder", "splitBreakLongLines": "Opdel/genbalancer lange linjer", "mergeShortLines": "Flet korte linjer", "mergeContinuationLines": "Flet fortsættelseslinjer", "snapAllTimesToFrames": "Fastgør alle tider til billeder", - "removeTextForHearingImpaired": "Fjern tekst for hørehæmmede", "joinSubtitles": "Sammenføj undertekster", "splitSubtitle": "Opdel undertekst", "spellCheck": "Stavekontrol", @@ -3532,7 +3875,6 @@ "adjustAllTimes": "Juster alle tider", "visualSync": "Visuel synkronisering", "translateViaCopyPaste": "Oversæt via copy-paste", - "shortcuts": "Genveje", "wordLists": "Ordlister", "chooseUiLanguage": "Vælg UI-sprog", "chooseRuleProfile": "Vælg regelprofil", @@ -3543,6 +3885,7 @@ "textBoxItalic": "Tekstboks kursiv", "textBoxBold": "Tekstboks fed", "textBoxUnderline": "Tekstboks understregning", + "textBoxBox": "Tekstboks boks (EBU STL)", "resetWaveformZoomAndSpeed": "Nulstil bølgeformszoom og afspilningshastighed", "togglePlaybackSpeed": "Skift afspilningshastighed", "playbackSpeedSlower": "Afspilningshastighed langsommere (afspilningsrate)", @@ -3554,22 +3897,28 @@ "seekSilenceForward": "Søg stilhed fremad", "waveformGuessStart": "Gæt starttid ud fra bølgeform", "waveformGuessEnd": "Gæt sluttid ud fra bølgeform", + "waveformGuessStartAndEnd": "Gæt start- og sluttid ud fra bølgeform", "setVideoPositionCurrentSubtitleStart": "Indstil videopositionen til den aktuelle linjestart", "goToSubtitlePositionAndPause": "Gå til undertekstposition og sæt på pause", "setVideoPositionCurrentSubtitleEnd": "Indstil videopositionen til den aktuelle linjeslutning", "toggleAudioTracks": "Skift lydspor", - "listErrors": "List fejl", "goToNextError": "Gå til næste fejl", "goToPreviousError": "Gå til forrige fejl", "addNameToNameList": "Tilføj navn til navnelisten", "findDoubleWords": "Find dobbeltord", "findDoubleLines": "Find dobbelte linjer", "colorX": "Farve {0}", - "removeColor": "Fjern farve", "surroundWith": "Omgiv med...", "surroundWithXY": "Omring med {0}/{1}", - "repeatLine": "Gentag linje", "surroundWithNumberX": "Omgiv med #{0}", + "surroundWithBehavior": "Adfærd", + "surroundWithBehaviorToggle": "Skift (tilføj, eller fjern hvis til stede)", + "surroundWithBehaviorAdd": "Tilføj (hver gang)", + "surroundWithBehaviorRemove": "Fjern (alle)", + "surroundWithBehaviorRemoveOnce": "Fjern (én ad gangen)", + "surroundWithWorksOn": "Virker på", + "surroundWithScopeSelectionOrText": "Markering, ellers hele teksten", + "surroundWithScopeEachLine": "Hver linje", "searchVia": "Søg via", "searchViaX": "Søg via {0}", "searchViaNumberX": "Søg via #{0}", @@ -3596,6 +3945,11 @@ "copySubtitlePathToClipboard": "Kopier undertekststien til udklipsholderen", "copySubtitleOriginalPathToClipboard": "Kopier undertekststien til originalen til udklipsholderen", "focusTextBox": "Fokus tekstboks", + "focusSubtitleListView": "Fokusér undertekstliste", + "focusWaveform": "Fokusér bølgeform", + "focusOriginalTextBox": "Fokusér original tekstboks", + "textBoxGoToStart": "Tekstboks, gå til start", + "textBoxGoToEnd": "Tekstboks, gå til slut", "sortByNumber": "Sortér efter nummer", "sortByStartTime": "Sorter efter \"Vis\" tid", "sortByEndTime": "Sorter efter \"Skjul\" tid", @@ -3620,7 +3974,6 @@ "assaStyles": "ASSA stilarter", "assaProperties": "ASSA egenskaber", "assaAttachments": "ASSA vedhæftede filer", - "assaVideoColorPicker": "ASSA Video farvevælger", "recalculateDurationSelectedLines": "Genberegn varighed (valgte linjer)", "setDurationMaxCpsSelectedLines": "Sæt varighed til maks. CPS (valgte linjer)", "toggleWaveformAndSpectrogramHeight": "Skift bølgeform/spektrogram opdelt højde", @@ -3634,9 +3987,9 @@ "selectionToSentenceCase": "Tekstboks: Markering til Stort begyndelsesbogstav", "selectionToggleCasing": "Tekstboks: Skift store/små bogstaver (STORE -> små -> Store Forbogstaver)", "googleIt": "Google det (valgt tekst)", - "setActorXY": "Sæt skuespiller {0}: {1}", + "setActorX": "Angiv skuespiller: {0}", "setNewActor": "Sæt ny skuespiller...", - "setActorSlotXTitle": "Skuespillerplads {0}", + "setStyleX": "Angiv stilart: {0}", "toggleDialogDashes": "Slå dialogtankestreger til/fra", "mergeWithLineBeforeAsDialog": "Flet med linjen før som dialog", "mergeWithLineAfterAsDialog": "Flet med linjen efter som dialog", @@ -3648,18 +4001,54 @@ "moveStartOneFrameForwardKeepGapPrev": "Flyt start ét billede frem (behold mellemrum til forrige, hvis tæt på)", "moveEndOneFrameBackKeepGapNext": "Flyt slut ét billede tilbage (behold mellemrum til næste, hvis tæt på)", "moveEndOneFrameForwardKeepGapNext": "Flyt slut ét billede frem (behold mellemrum til næste, hvis tæt på)", + "moveStartXMsBack": "Flyt start X ms tilbage (X angives i Indstillinger, også i Visuel synkronisering)", + "moveStartXMsForward": "Flyt start X ms frem (X angives i Indstillinger, også i Visuel synkronisering)", + "moveEndXMsBack": "Flyt slut X ms tilbage (X angives i Indstillinger, også i Visuel synkronisering)", + "moveEndXMsForward": "Flyt slut X ms frem (X angives i Indstillinger, også i Visuel synkronisering)", + "moveSelectedLinesXMsBack": "Flyt valgte linjer X ms tilbage (X angives i Indstillinger)", + "moveSelectedLinesXMsForward": "Flyt valgte linjer X ms frem (X angives i Indstillinger)", + "moveSelectedLinesAndForwardXMsBack": "Flyt valgte linjer og alle efterfølgende X ms tilbage (X angives i Indstillinger)", + "moveSelectedLinesAndForwardXMsForward": "Flyt valgte linjer og alle efterfølgende X ms frem (X angives i Indstillinger)", + "moveAllLinesXMsBack": "Flyt alle linjer X ms tilbage (X angives i Indstillinger)", + "moveAllLinesXMsForward": "Flyt alle linjer X ms frem (X angives i Indstillinger)", + "moveSelectedLinesCustomMsBack": "Flyt valgte linjer, tilpassede millisekunder ({0:#,###,##0}) tilbage, {1}", + "moveSelectedLinesCustomMsForward": "Flyt valgte linjer, tilpassede millisekunder ({0:#,###,##0}) frem, {1}", + "moveSelectedLinesAndForwardCustomMsBack": "Flyt valgte linjer og alle efterfølgende, tilpassede millisekunder ({0:#,###,##0}) tilbage, {1}", + "moveSelectedLinesAndForwardCustomMsForward": "Flyt valgte linjer og alle efterfølgende, tilpassede millisekunder ({0:#,###,##0}) frem, {1}", + "moveAllLinesCustomMsBack": "Flyt alle linjer, tilpassede millisekunder ({0:#,###,##0}) tilbage, {1}", + "moveAllLinesCustomMsForward": "Flyt alle linjer, tilpassede millisekunder ({0:#,###,##0}) frem, {1}", "categoryTextBox": "Tekstboks", "categoryFile": "Fil", "categoryVideo": "Video", "categorySync": "Synkronisering", - "categoryTranslate": "Oversæt", - "categorySearch": "Søg", - "categoryTools": "Værktøjer", "categoryAi": "AI", + "categoryCustom": "Tilpasset", + "editCustomShortcut": "Rediger brugerdefineret genvej", + "customShortcutTextBoxKeyHint": "Brug en tast med Ctrl/Alt her - en almindelig tast ville ikke længere skrive i tekstboksen.", + "customShortcutNumberX": "Brugerdefineret genvej #{0}", + "customShortcutNumberXY": "Brugerdefineret genvej #{0}: {1}", + "customShortcutStep": "Trin", + "customShortcutSteps": "Trin", + "customShortcutStepRunCommand": "Kør kommando", + "customShortcutStepInsertText": "Indsæt tekst", + "customShortcutStepReplace": "Søg og erstat", + "customShortcutInsertAtCursor": "Ved markøren", + "customShortcutInsertAtStart": "I starten af teksten", + "customShortcutInsertAtEnd": "I slutningen af teksten", + "customShortcutSummaryRunCommandX": "Kør: {0}", + "customShortcutSummaryInsertXY": "Indsæt \"{0}\" ({1})", + "customShortcutSummaryReplaceXY": "Erstat \"{0}\" med \"{1}\"", + "customShortcutSummaryReplaceRegexXY": "Erstat regulært udtryk \"{0}\" med \"{1}\"", + "customShortcutPickCommand": "Vælg en kommando, der skal køres.", + "customShortcutEnterText": "Indtast den tekst, der skal indsættes.", + "customShortcutEnterFind": "Indtast den tekst, der skal findes.", + "customShortcutInvalidRegexX": "Ugyldigt regulært udtryk: {0}", + "customShortcutStepsHint": "Trin køres fra top til bund. Teksttrin virker på de valgte linjer; kommandoer, der åbner et vindue, fortsætter, når det lukkes.", "activeIn": "Aktiv i", "activeInEverywhere": "Overalt", "moveTextFromCursorToNextAndGoToNext": "Flyt tekst efter markørposition til næste undertekst og gå til næste", "moveTextFromCursorToNextAndGoToNextAndPlay": "Flyt tekst efter markørposition til næste undertekst, gå til næste og afspil", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "Flyt tekst efter markørposition til næste undertekst, gå til næste, afspil den og sæt på pause ved slutningen", "videoGoToPreviousTimeCode": "Gå til forrige tidskode", "videoGoToNextTimeCode": "Gå til næste tidskode", "listViewColumnDeleteText": "Kolonne, slet tekst", @@ -3669,6 +4058,7 @@ "listViewColumnTextUp": "Kolonne, tekst op", "listViewColumnTextDown": "Kolonne, tekst ned", "autoTranslateSelectedLines": "Oversæt automatisk valgte linjer...", + "autoTranslateSelectedLinesNoPrompt": "Auto-oversæt valgte linjer (ingen prompt, brug seneste motor/sprog)", "setAssaResolution": "Sæt ASSA-opløsning (PlayResX/PlayResY)", "videoOcr": "OCR af indbrændt undertekst", "waveformInsertNewSelection": "Bølgeform, indsæt ny markering" @@ -3676,8 +4066,6 @@ "wordLists": { "title": "Ordlister", "addName": "Tilføj navn", - "addWord": "Tilføj ord", - "addPair": "Tilføj par", "nameAndIgnoreList": "Navne/ignorer liste", "userWords": "Brugerordliste", "ocrFixList": "OCR rettelsesliste", @@ -3694,7 +4082,6 @@ "noPluginsInstalled": "Ingen plugins installeret", "getPluginsOnline": "Hent plugins online...", "getPluginsTitle": "Hent plugins", - "enabled": "Aktiveret", "disabled": "Deaktiveret", "notSupportedOnThisOs": "Ikke understøttet på dette operativsystem", "removePluginXConfirm": "Vil du fjerne pluginnet '{0}'?\r\nDette sletter plugin-mappen:{1}", @@ -3711,17 +4098,19 @@ "downloadingXPercent": "Downloader {0} %...", "pluginXInstalled": "'{0}' installeret.", "couldNotInstallPluginX": "Kunne ikke installere '{0}': {1}", - "notInstalled": "Ikke installeret", "install": "Installer", "reinstall": "Geninstaller", - "update": "Opdater", "installedX": "Installeret ({0})", "updateAvailableXToY": "Opdatering tilgængelig ({0} → {1})", "applyPluginToWhichLinesX": "Anvend '{0}' til:", "applyToSelectedLinesX": "Valgte linjer ({0})", "applyToAllLinesX": "Alle linjer ({0})", "updateAllXAvailable": "Opdater alle ({0})", - "updatingXOfY": "Opdaterer {0}/{1}..." + "updatingXOfY": "Opdaterer {0}/{1}...", + "doNotAskAgain": "Spørg ikke igen (ændres i Administrer plugins)", + "applyPluginsTo": "Anvend plugins på", + "askEachTime": "Spørg hver gang", + "allLines": "Alle linjer" }, "help": { "aboutSubtitleEdit": "Om Subtitle Edit", @@ -3760,6 +4149,8 @@ "nOcrDatabase": "nOCR-database", "drawMode": "Tegnetilstand:", "addNewCharcter": "Tilføj nyt tegn", + "addNOcrCharacterTitle": "Tilføj nOCR-tegn for linje {0}, tegn {1} af {2} med databasen \"{3}\"", + "addBinaryOcrCharacterTitle": "Tilføj binært OCR-tegn for linje {0}, tegn {1} af {2} med databasen \"{3}\"", "lineIndexX": "Linje {0}", "inspectNOcrAdditions": "Undersøg nye nOCR-tilføjelser", "ocrSelectedLines": "OCR valgte linjer", @@ -3808,6 +4199,8 @@ "binaryImageCompareInspectImageMatches": "\"Sammenlign binært billede\" - Inspicer billedmatches", "saveBlankTextTitle": "Vil du gemme tom tekst?", "saveBlankTextPrompt": "Vil du gemme tom tekst til billede?", + "drawnLinesDoNotMatchTitle": "Linjerne matcher ikke billedet", + "drawnLinesDoNotMatchPrompt": "Nogle af de tegnede linjer matcher ikke billedet (grønne linjer skal være på tegnet, røde linjer skal være uden for det), så dette tegn vil ikke blive genkendt.\n\nGem alligevel?", "yesAndNeverAskAgain": "Ja og spørg aldrig igen", "importTextFromSubtitleDotDotDot": "Importer tekst fra undertekst...", "importTextFromSubtitleOverwritePrompt": "Nogle linjer har allerede OCR-tekst.\r\nVil du overskrive eksisterende tekst?", @@ -3833,7 +4226,6 @@ "vobSubColorsTitle": "VobSub/DVD farver", "vobSubColorsHeader": "Tilpas de fire VobSub-farver", "vobSubColorsDescription": "VobSub/DVD-undertekster bruger fire indekserede farver: baggrund, mønster, betoning 1 og betoning 2. Vælg hver farve nedenfor for at tilsidesætte den indlejrede palet - nyttigt, når de originale farver giver dårlig OCR-kontrast.", - "vobSubColorBackground": "Baggrund", "vobSubColorPattern": "Mønster", "vobSubColorEmphasis1": "Vægt 1", "vobSubColorEmphasis2": "Vægt 2", @@ -3872,9 +4264,26 @@ "crispEmbedSettingsTitle": "CrispEmbed-indstillinger", "crispEmbedDescription": "Lokal OCR-motor med flere modelbackends - download motoren og modellerne her.", "trainNOcrDatabase": "Træn nOCR-database...", + "optimizeNOcrDatabase": "Optimer nOCR-database...", + "optimizeNOcrDatabaseQuestionXY": "Fjern de linjer, der ikke skelner tegn fra lignende tegn, i nOCR-databasen \"{0}\"?\n\nDette gør databasen mindre og OCR hurtigere, som regel med færre fejl. Tager op til et minut.\n\nEn sikkerhedskopi gemmes som \"{1}\".", + "optimizingNOcrDatabaseXY": "Optimerer nOCR-database... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "nOCR-databasen \"{0}\" optimeret: {1:#,##0} -> {2:#,##0} linjer.", "startTraining": "Start træning", "abortTraining": "Afbryd træning", "trainingOptions": "Træningsindstillinger", + "trainNOcrSubtitle": "Gengiver tegn i installerede skrifttyper og lærer nOCR deres former. Vælg de skrifttyper, dine undertekster bruger.", + "xFontsSelected": "{0:#,##0} valgt", + "subtitleFonts": "Undertekstskrifttyper", + "emptyDatabase": "Tom database", + "startFromDatabase": "Start fra", + "startFromDatabaseHint": "Tilføj de trænede tegn til en kopi af en eksisterende database (anbefalet), eller start fra en tom", + "fontSizes": "Skriftstørrelser", + "fontSizesHint": "Skriftstørrelser i pixels, der skal gengives, adskilt af kommaer, f.eks. \"30, 40\"", + "numberOfLineSegmentsHint": "Linjer, der tjekkes pr. tegn - flere er strengere, men langsommere", + "enterDatabaseName": "Indtast et navn til databasen", + "trainingFontXSizeYCharacterZ": "Træner \"{0}\" ved {1} px: {2}", + "xLearned": "{0:#,##0} lært", + "xSkipped": "{0:#,##0} sprunget over", "charactersToTrain": "Tegn, der skal trænes", "letterCombinationsToTrain": "Bogstavkombinationer, der kan blive delt op i ét billede", "importCharactersFromSubtitleFile": "Importér tegn fra undertekstfil...", @@ -3901,6 +4310,8 @@ "drawZoomOut": "Zoom ud (Ctrl+-)", "drawResetView": "Nulstil visning (Ctrl+0)", "drawToggleGrid": "Skift gitter (Ctrl+G)", + "drawTogglePreview": "Slå forhåndsvisning til/fra (F9)", + "drawPreviewFailed": "Forhåndsvisning mislykkedes - ffmpeg med libass (subtitles-filter) er påkrævet", "drawCopyToClipboard": "Kopiér til udklipsholder (Ctrl+C)", "drawShapes": "Former", "drawSelectedPoint": "Valgt punkt", @@ -3908,16 +4319,86 @@ "drawSelectedLayer": "Valgt lag", "drawToolX": "Værktøj: {0}", "drawHelpText": "Klik for at tilføje punkter • Enter/F8 for at lukke form • Shift+Træk for at panorere • Ctrl+Scroll for at zoome", + "drawMoveToLayer": "Flyt til lag", + "drawFlipHorizontal": "Spejlvend vandret", + "drawFlipVertical": "Spejlvend lodret", + "drawHideShape": "Skjul figur", + "drawShowShape": "Vis figur", + "drawHideLayer": "Skjul lag", + "drawShowLayer": "Vis lag", + "drawDeleteLayer": "Slet lag", + "drawDeletePoint": "Slet punkt", + "drawCancelDrawing": "Annuller tegning", + "drawLayerX": "Lag {0}", + "drawImportSvg": "Importér SVG-billede...", + "drawRotateClockwise": "Rotér 90° med uret", + "drawConvertToCurve": "Konvertér segment til kurve", + "drawBackground": "Baggrund", + "drawPosition": "Position", + "drawZoom": "Zoom", + "drawShapeTool": "Figurværktøj", + "drawColorPickerTool": "Vælg farve fra en figur eller baggrunden", + "drawShapeLibrary": "Figurbibliotek", + "drawShapeLibraryHint": "Træk på lærredet for at placere en figur, eller klik for standardstørrelsen. Shift bevarer dens proportioner.", + "drawAddToLibrary": "Føj til figurbibliotek...", + "drawRemoveFromLibrary": "Fjern fra figurbibliotek", + "drawShapeName": "Figurnavn", + "drawCategorySpeechBubbles": "Talebobler", + "drawCategoryArrows": "Pile", + "drawCategoryBasicShapes": "Grundfigurer", + "drawCategorySymbols": "Symboler", + "drawCategoryMyShapes": "Mine figurer", + "drawShapeSpeechBubble": "Taleboble", + "drawShapeSpeechBubbleRight": "Taleboble, hale til højre", + "drawShapeSpeechBubbleUp": "Taleboble, hale op", + "drawShapeOvalBubble": "Oval taleboble", + "drawShapeBoxBubble": "Kasseformet taleboble", + "drawShapeThoughtBubble": "Tankeboble", + "drawShapeShoutBubble": "Råbeboble", + "drawShapeCaptionBox": "Tekstboks", + "drawShapeArrow": "Pil", + "drawShapeDoubleArrow": "Dobbeltpil", + "drawShapeChevron": "Chevron", + "drawShapeCurvedArrow": "Buet pil", + "drawShapeRoundedRectangle": "Afrundet rektangel", + "drawShapeTriangle": "Trekant", + "drawShapeDiamond": "Rombe", + "drawShapePentagon": "Femkant", + "drawShapeHexagon": "Sekskant", + "drawShapeOctagon": "Ottekant", + "drawShapeStar": "Stjerne", + "drawShapeRing": "Ring", + "drawShapePlus": "Plus", + "drawShapeBanner": "Banner", + "drawShapeHeart": "Hjerte", + "drawShapeCheck": "Flueben", + "drawShapeMusicNote": "Node", + "drawShapeMusicNotes": "Noder", + "drawShapeLightning": "Lyn", + "drawShapeCloud": "Sky", + "drawShapeMoon": "Måne", + "drawShapeBadge": "Badge", + "drawSize": "Størrelse", + "drawLayer": "Lag", + "drawBackgroundVideoFrame": "Videobillede (aktuel position)", + "drawBackgroundVideoFrameAt": "Videobillede ved...", + "drawBackgroundImage": "Billedfil...", + "drawBackgroundNone": "Ingen baggrund", + "drawBackgroundStretch": "Stræk billede til lærred", + "drawBackgroundOpacity": "Baggrundens uigennemsigtighed", + "drawBackgroundVideoFrameFailed": "Kunne ikke hente et videobillede ved {0}.", + "drawImages": "Billeder", + "drawConvertToLine": "Konvertér segment til linje", + "drawConvertShapeToCurves": "Konvertér alle linjer til kurver", + "drawConvertShapeToLines": "Konvertér alle kurver til linjer", + "drawRotateCounterClockwise": "Rotér 90° mod uret", + "drawSvgImages": "SVG-billeder", + "drawSvgNoShapes": "Ingen udfyldte figurer eller streger fundet i SVG-filen.", "progressBarTitle": "ASSA statuslinje", "progressBarSettings": "Statuslinje", - "progressBarPosition": "Position", - "progressBarBottom": "Bund", - "progressBarTop": "Top", "mouseOverColor": "Farve ved musemarkør over", "clickedColor": "Farve ved klik", "progressBarForeColor": "Forgrundsfarve", - "progressBarBackColor": "Baggrundsfarve", - "progressBarStyle": "Stil", "progressBarSquareCorners": "Firkantede hjørner", "progressBarRoundedCorners": "Afrundede hjørner", "progressBarChapters": "kapitler", @@ -3926,8 +4407,6 @@ "progressBarXAdjustment": "X justering", "progressBarYAdjustment": "Y justering", "progressBarTextAlignment": "Tekstjustering", - "progressBarTakePosFromVideo": "Tag position fra video", - "progressBarPreview": "Forhåndsvisning", "fontCollectorTitle": "Skrifttypesamler", "fontCollectorUsedIn": "Brugt i", "fontCollectorFontFiles": "Skrifttypefil(er)", @@ -3974,9 +4453,7 @@ "resolutionResamplerVideoDiffers": "Undertekstens opløsning ({0}x{1}) afviger fra videoens opløsning ({2}x{3}).\nVil du ændre underteksten, så den passer til videoen?", "resolutionResamplerAskOnVideoOpen": "Spørg, når en video med en anden opløsning åbnes", "backgroundBoxGenerator": "Generer baggrundsboks", - "backgroundBoxPadding": "Polstring", "backgroundBoxFillWidth": "Fyldbredde", - "backgroundBoxBoxColor": "Boksfarve", "backgroundBoxRadius": "Radius", "backgroundBoxCircle": "Cirkel", "backgroundBoxSpikes": "Pigge", @@ -3988,7 +4465,6 @@ "backgroundBoxTornPaperDouble": "Revet papir (top og bund)", "backgroundBoxStarburst": "Stjerneskud", "backgroundBoxScroll": "Pergament", - "stylesTitle": "Avancerede Sub Station Alpha stilarter", "stylesInFile": "Stilarter i fil", "stylesSaved": "Stilarter gemt", "stylesTitleX": "Stilarter - {0}", @@ -4008,12 +4484,25 @@ "graphics": "Grafik", "copyToStorageStyles": "Kopiér til lagerstile", "copyToFileStyles": "Kopiér til fil-stilarter", + "styleXAlreadyExistsInStorage": "Der findes allerede en stilart med navnet \"{0}\" i lageret.\n\nOverskriv den, eller behold begge (kopien får et nyt navn)?", + "styleXAlreadyExistsInFile": "Der findes allerede en stilart med navnet \"{0}\" i filen.\n\nOverskriv den, eller behold begge (kopien får et nyt navn)?", + "styleNameCannotBeEmpty": "Et stilartsnavn kan ikke være tomt.", + "styleNameXIsUsedMoreThanOnce": "Stilartsnavnet \"{0}\" bruges af mere end én stilart i filen.", + "overwrite": "Overskriv", + "keepBoth": "Behold begge", + "doThisForAllConflictingStyles": "Gør dette for alle stilarter i konflikt", "setStyleAsDefault": "Indstil stil som standard", "takeUsagesFromDotDotDot": "Overtag anvendelser fra...", "noAttachmentsFound": "Ingen vedhæftede filer fundet i den valgte ASSA-fil.", "deleteStyleQuestion": "Vil du slette stil?", "deleteStylesQuestion": "Vil du slette typografier?", + "deleteXStylesQuestion": "Vil du slette {0} stilarter?", + "deleteXStylesFromStorageQuestion": "Vil du slette {0} stilarter fra lageret?", + "deleteStyleXFromStorageQuestion": "Vil du slette stilarten \"{0}\" fra lageret?", + "deleteStyleXFromFileQuestion": "Vil du slette stilarten \"{0}\" fra den aktuelle fil?", "openStyleImportFile": "Åbn undertekstfil for at importere stilarter fra", + "styleImportFiles": "Stilartsfiler (.ass, .sty, Subtitle Edit 4-kategorier .template)", + "ssaStyleImportFiles": "Stilartsfiler (.ssa, .ass, .sty)", "primary": "Primær", "secondary": "Sekundær", "applyOverrideTags": "Anvend tilsidesættelsestags", @@ -4028,7 +4517,6 @@ "spaceIncrease": "Øget bogstavafstand", "popIn": "Pop ind", "spinIn": "Spin ind", - "playCurrent": "Afspil aktuel", "setPosition": "Indstil position", "scaleX": "Skalering X", "scaleY": "Skalering Y", @@ -4071,10 +4559,8 @@ "advancedEffectOldMovieDescription": "Simulerer en vintage 35 mm filmprojektor med støj, vignet og ridser", "advancedEffectNeonBurst": "Neoneksplosion", "advancedEffectNeonBurstDescription": "Højenergiske \"Shorts\"-stil undertekster med neonblomstrende glød og indskaleret \"pop\"-animation", - "advancedEffectSettings": "Indstillinger", "advancedEffectSnowFlakeCount": "Antal flager", "advancedEffectStarfieldStarCount": "Antal stjerner", - "advancedEffectStarfieldSpeed": "Hastighed", "advancedEffectGlitch": "Systemfejl", "advancedEffectGlitchDescription": "Digital fejl med kromatisk aberration, hvide blink og forvrængning overlejringer", "advancedEffectBounceIn": "Hoppe ind", @@ -4083,8 +4569,6 @@ "advancedEffectFirefliesDescription": "Varme glødende gul-rav prikker driver organisk hen over skærmen med pulserende glød", "advancedEffectMatrix": "Matrix", "advancedEffectMatrixDescription": "Faldende grønne tegnsøjler med underteksttekst bygger bogstav for bogstav fra regnen", - "advancedEffectAudioBars": "Lydbjælker (bølgeform)", - "advancedEffectAudioBarsDescription": "Animerede equalizerbjælker drevet af lydbølgeformen - søjler ruller til venstre som en bølgeform og pulserer med lyden", "advancedEffectAudioPulse": "Lyd tekst puls", "advancedEffectAudioPulseDescription": "Underteksttekst lyser og pulserer med lydstyrken - stille sektioner viser normal tekst, høje peaks tilføjer en farvet glorie og en lille opskalering", "advancedEffectConfetti": "Konfettieksplosion", @@ -4097,7 +4581,6 @@ "advancedEffectFancyKaraokeGlow": "Aktiv ord glød", "advancedEffectFancyKaraokeActiveColor": "Aktiv farve", "advancedEffectFancyKaraokeInactiveColor": "Inaktiv farve", - "advancedEffectFancyKaraokeInactiveOpacity": "Inaktiv opacitet (0-255)", "advancedEffectWordSpacingPixels": "Mellemrum (pixels)", "advancedEffectSlowZoomOut": "Langsom zoom ud", "advancedEffectSlowZoomOutDescription": "Tekst starter lidt større og krymper forsigtigt til normal størrelse i løbet af underteksternes varighed", @@ -4113,7 +4596,6 @@ "advancedEffectSlideInLeftDescription": "Tekst glider ind fra venstre uden for skærmen, holder og afsluttes derefter tilbage til venstre", "advancedEffectSlideInRight": "Skub ind fra højre", "advancedEffectSlideInRightDescription": "Tekst glider ind fra højre uden for skærmen, holder og afsluttes derefter tilbage til højre", - "advancedEffectFadeInOut": "Fade ind/ud", "advancedEffectFadeInOutDescription": "Tekst toner ind i starten og fader ud i slutningen af ​​hver undertekst", "advancedEffectWordFlip3D": "Ordvending i 3D", "advancedEffectWordFlip3DDescription": "Hvert ord folder sig ind med en 3D-vending og et elastisk pop, mens det siges — moderne 'Shorts'-undertekststil", @@ -4123,9 +4605,7 @@ "advancedEffectLowerThirdDescription": "Navne- og rollebanner nederst til venstre med en accentbjælke, der glider ind — interview-/dokumentarstil (første linje = navn, følgende linjer = rolle)", "advancedEffectLowerThirdAccentColor": "Accentfarve", "overrideTagsHistory": "ASSA tags historik", - "category": "Kategori", "allCategories": "[Alle]", - "defaultCategory": "Standard", "newCategory": "Ny kategori...", "renameCategory": "Omdøb kategori...", "deleteCategory": "Slet kategori", diff --git a/src/ui/Assets/Languages/Dutch.json b/src/ui/Assets/Languages/Dutch.json index 53f630c76fb..4c91d6dbdcd 100644 --- a/src/ui/Assets/Languages/Dutch.json +++ b/src/ui/Assets/Languages/Dutch.json @@ -2,8 +2,46 @@ "Title": "Subtitle Edit", "TranslatedBy": "", "CultureName": "nl-NL", - "version": "v5.3.0-beta12", + "version": "v5.3.0", "General": { + "Temperature": "Temperatuur", + "Preset": "Voorinstelling", + "Output": "Uitvoer", + "OutputFormat": "Uitvoerformaat", + "Other": "Overig", + "TimeCodeFormat": "Tijdcodeformaat", + "TopBottomMargin": "Marge boven/onder", + "Theme": "Thema", + "Brightness": "Helderheid", + "ChooseColor": "Kleur kiezen", + "LineX": "Regel {0}", + "PlayLine": "Rij afspelen", + "MaxLineLength": "Max. regellengte", + "MaxCharsPerSec": "Max. Kar/s", + "MaxNumberOfLines": "Max. aantal regels", + "Subtitles": "Ondertitels", + "ShotChanges": "Shot-wijzigingen", + "Chapters": "Hoofdstukken", + "Interjections": "Tussenwerpsels", + "BlankLines": "Lege rijen", + "EditWholeText": "Hele tekst bewerken", + "NoTextInClipboard": "Geen tekst op het klembord", + "NoSubtitlesFoundTitle": "Geen ondertitels gevonden", + "ReplacedXOccurrences": "{0} keer vervangen", + "InvalidRegularExpressionX": "Ongeldige reguliere expressie: {0}", + "DiscardChangesTitle": "Wijzigingen negeren?", + "DownloadingXDotDotDot": "{0} downloaden...", + "ImportTimeCodesDotDotDot": "Tijdcodes importeren...", + "Original": "Origineel", + "NextChange": "Volgende wijziging", + "PreviousChange": "Vorige wijziging", + "ChangeXOfY": "Wijziging {0} van {1}", + "TooLong": "Te lang", + "TooShort": "Te kort", + "Overlapping": "Overlappend", + "FixOcrErrors": "OCR-fouten herstellen", + "RunningOcrXY": "OCR wordt uitgevoerd... {0}/{1}", + "LlamaCppDownloadEnginePrompt": "Voor llama.cpp moet de llama-server-engine worden gedownload. Nu downloaden?", "AssistedMove": "Begeleid verplaatsen", "AssistedMoveChooseMove": "Klik op een optie of druk op het nummer ervan om woorden te verplaatsen", "AssistedMoveDotDotDot": "Begeleid verplaatsen...", @@ -77,6 +115,18 @@ "ActorPickerKeysHint": "Druk op een cijfer of Enter om de acteur in te stellen. Alt+Omhoog/Omlaag wijzigt de volgorde, Delete verwijdert de acteur.", "ActorPickerNewActorX": "Nieuwe acteur \"{0}\"", "ActorPickerLinesSelectedX": "Geselecteerde rijen: {0}", + "SetStyleDotDotDot": "Stijl instellen...", + "StylePickerTitle": "Stijl instellen", + "StylePickerFilterHint": "Typ om te filteren, of typ een nieuwe stijlnaam", + "StylePickerKeysHint": "Druk op een cijfer (1-9, 0) om de stijl op alle geselecteerde rijen in te stellen.", + "StylePickerNewStyleX": "Nieuwe stijl \"{0}\"", + "StylePickerNewStyleInfo": "Druk op Enter om deze stijl met standaardinstellingen toe te voegen en op de geselecteerde rijen in te stellen. Gebruik \"Stijlen beheren...\" om later het lettertype, de kleuren en de positie te wijzigen.", + "StylePickerCurrentStyleX": "Huidige stijl: {0}", + "StylePickerLinesUsingStyleX": "Rijen met deze stijl: {0}", + "StylePickerMarginsXYZ": "Links {0}, rechts {1}, verticaal {2}", + "StylePickerSetStyle": "_Stijl instellen", + "StylePickerManageStyles": "Stijlen beheren...", + "StylePickerManageStylesHint": "Dit venster sluiten en de stijlbeheerder openen om lettertypen, kleuren, positie en meer te bewerken", "Add": "Toevoegen", "AddDotDotDot": "Toevoegen...", "AddToNamesListCaseSensitive": "Toevoegen aan namenlijst (hoofdlettergevoelig)", @@ -85,7 +135,6 @@ "AdjustAlpha": "Alpha aanpassen (transparantie)", "AdjustDisplayDuration": "Weergaveduur aanpassen", "Adjustment": "Aanpassing", - "Advanced": "Geavanceerd", "AdvancedSettings": "Geavanceerde instellingen", "After": "Na", "Alignment": "Uitlijning", @@ -121,7 +170,6 @@ "BatchMode": "Batchmodus", "BdnXml": "BDN/xml", "Before": "Voor", - "BeforeX": "Voor \"{0}\"", "Beginning": "Begin", "BluRaySup": "Blu-ray (sup)", "Bold": "Vet", @@ -133,7 +181,6 @@ "BookmarkEdit": "Bladwijzer bewerken", "BookmarkEditForSelectedLinesX": "Bladwijzer bewerken voor {0} geselecteerde rijen", "BookmarksList": "Bladwijzers tonen", - "BorderColor": "Randkleur", "BorderStyle": "Randstijl", "BottomCenter": "Onder-Midden", "BottomLeft": "Onder-Links", @@ -158,7 +205,6 @@ "ChangeCasing": "Hoofdlettergebruik wijzigen", "ChangeFormatting": "Opmaak wijzigen", "ChangeFrameRate": "Framerate wijzigen", - "ChangeLanguageFilter": "Taalfilter wijzigen...", "ChangeOnce": "Eén keer wijzigen", "ChangeSpeed": "Snelheid wijzigen", "Character": "Teken", @@ -183,7 +229,6 @@ "ConversionCancelledByUser": "Conversie geannuleerd door gebruiker", "Convert": "Converteren", "Converted": "Geconverteerd", - "ConvertingDotDotDot": "Converteren...", "ConvertingXofYDotDoDot": "Converteren van {0:#,###,##0}/{1:#,###,##0}...", "Copy": "Kopiëren", "CopyImageToClipboard": "Afbeelding naar klembord kopiëren", @@ -191,7 +236,6 @@ "CouldNotSaveFileXErrorY": "Kan bestand \"{0}\" niet opslaan. Fout: {1}", "Count": "Aantal", "Cps": "Kar/s", - "CurrentSubtitle": "Huidige ondertitel", "CurrentVideoPosition": "Huidige videopositie", "Custom": "Aangepast", "Cut": "Knippen", @@ -237,7 +281,6 @@ "Expand": "Uitvouwen", "Export": "Exporteren", "ExportDotDotDot": "Exporteren...", - "ExportToX": "Exporteren naar {0}", "ExtendAfter": "Verlengen/inkorten naar volgende rij", "ExtendBefore": "Verlengen/inkorten naar vorige rij", "ExtendSelectedLinesToNextShotChangeOrNextSubtitle": "Geselecteerde rijen verlengen naar volgende shot-wijziging (of ondertitel)", @@ -254,7 +297,6 @@ "FileExtension": "Bestandsextensie", "FileName": "Bestandsnaam", "FileNameX": "Bestandsnaam: {0}", - "FileNameXAndSize": "Bestandsnaam: {0} ({1})", "FileSaved": "Bestand opgeslagen", "FileSavedToX": "Bestand opgeslagen in {0}", "FileXAlreadyExists": "Bestand \"{0}\" bestaat al.", @@ -264,8 +306,6 @@ "Find": "Zoeken", "FindNext": "Volgende zoeken", "FindTextX": "Tekst zoeken - {0}", - "FiveHundredMilliseconds": "500 milliseconden", - "FiveSeconds": "Vijf seconden", "Fix": "Herstellen", "FixCommonErrors": "Veelvoorkomende fouten herstellen", "FixRightToLeft": "Rechts-naar-links herstellen", @@ -289,14 +329,12 @@ "FoundXInLineYZ": "\"{0}\" gevonden in rij {1}, positie {2}", "FoundXMatches": "{0} overeenkomsten gevonden", "FrameRate": "Framerate", - "FrameRateX": "Framerate: {0:0.0###}", "Frames": "Frames", "From": "Van", "FromCurrentVideoPosition": "vanaf huidige videopositie", "FullScreen": "Volledig scherm", "Gap": "Gat", "General": "Algemeen", - "GeneralText": "Algemeen", "Generate": "Genereren", "GenerateImportShotChanges": "Shot-wijzigingen genereren/importeren", "Generating": "Bezig met genereren...", @@ -314,12 +352,8 @@ "Help": "Help", "Hex": "Hex", "Hide": "Verberg", - "HidePreview": "Voorbeeld verbergen", "History": "Geschiedenis", "Horizontal": "Horizontaal", - "HourMinutesSecondsDecimalSeparatorMilliseconds": "Uur:min:sec{0}ms", - "HourMinutesSecondsFrames": "Uur:min:sec:frames", - "Ip": "IP", "Id": "ID", "Image": "Afbeelding", "ImageSaved": "Afbeelding opgeslagen", @@ -397,9 +431,7 @@ "Decrease": "Verlagen", "MoveUp": "Omhoog verplaatsen", "MultipleReplace": "Meervoudig vervangen", - "Mute": "Dempen", "Name": "Naam", - "Negative": "Negatief", "New": "Nieuw", "NewDotDotDot": "Nieuw...", "NewProfile": "Nieuw profiel", @@ -427,20 +459,15 @@ "OffsetY": "Y-verschuiving", "Ok": "_OK", "OneFile": "Eén bestand", - "OneHundredMilliseconds": "100 milliseconden", - "OneSecond": "Eén seconde", "OneSecondBack": "Eén seconde terug", "OneSecondForward": "Eén seconde vooruit", - "OnlineVideoFeatureNotAvailable": "Functie niet beschikbaar voor online video", "OpenContainingFolder": "Map openen", "OpenDictionaryFolder": "Woordenboekmap openen", "OpenFile": "Bestand openen", "OpenImageBasedSubtitle": "Op afbeeldingen gebaseerde ondertitel openen", "OpenImageFile": "Afbeeldingsbestand openen", - "OpenOriginalSubtitleFile": "Origineel ondertitelbestand openen...", "OpenOriginalSubtitleFileTitle": "Origineel ondertitelbestand openen", "OpenOutputFolder": "Uitvoermap openen", - "OpenSubtitle": "Ondertitel openen...", "OpenSubtitleFileTitle": "Ondertitelbestand openen", "OpenSubtitles": "Ondertitels openen...", "OpenVideoFile": "Videobestand openen...", @@ -453,11 +480,6 @@ "OutlineWidth": "Contourbreedte", "OutputFolder": "Uitvoermap", "OutputProperties": "Uitvoereigenschappen", - "Overlap": "Overlapping", - "OverlapNextX": "Overlap volgende ({0:#;##0.###})", - "OverlapPreviousLineX": "Overlap vorige rij ({0:#;##0.###})", - "OverlapStartAndEnd": "Overlap begin en eind", - "OverlapX": "Overlapping ({0:#;##0.###})", "OverwriteExistingFiles": "Bestaande bestanden overschrijven", "OverwriteFilesInFolderX": "Bestanden in map overschrijven: \"{0}\"", "OverwriteQuestion": "Overschrijven?", @@ -470,6 +492,7 @@ "Percent": "Procent", "PickLayer": "Laag instellen", "PickOllamaModel": "Kies Ollama-model", + "PickModel": "Model kiezen", "LlamaCppUseRemoteServer": "Externe server gebruiken (URL)", "PickOutputFolder": "Kies uitvoermap", "PickResolutionFromCurrentVideo": "Resolutie van huidige video overnemen", @@ -513,7 +536,6 @@ "Refresh": "Vernieuwen", "Region": "Regio", "RegularExpression": "Reguliere expressie", - "RegularExpressionIsNotValid": "Reguliere expressie is niet geldig!", "RelativeToCurrentVideoPosition": "Relatief aan huidige videopositie", "Remove": "Verwijderen", "RemoveAlignment": "Uitlijning verwijderen", @@ -538,7 +560,7 @@ "Reset": "Resetten", "ResizePanels": "Panelen vergroten/verkleinen", "Resolution": "Resolutie", - "ResolutionX": "Resolutie: {0}", + "Retry": "Opnieuw proberen", "ReverseRightToLeftStartEnd": "RTL begin/eind omkeren", "Right": "Rechts", "RightToLeft": "Rechts naar links", @@ -576,8 +598,6 @@ "SelectedlinesX": "Geselecteerde rijen: {0}", "Sensitivity": "Gevoeligheid", "Separator": "Scheidingsteken", - "SessionKey": "Sessiesleutel", - "SessionKeyGenerate": "Nieuwe sleutel genereren", "SetEnd": "Eindtijd instellen", "SetEndAndGoToNext": "Eind instellen en naar volgende", "SetEndAddNewAndGoToNew": "Eindtijd instellen, nieuwe toevoegen en naar nieuwe gaan", @@ -600,8 +620,9 @@ "ShadowColor": "Schaduwkleur", "ShadowWidth": "Schaduwbreedte", "ShiftLineBy": "Rij verschuiven met", + "ShotIn": "Shot in", + "ShotOut": "Shot uit", "Shortcut": "Sneltoets", - "ShortcutX": "Sneltoets: {0}", "Shortcuts": "Sneltoetsen", "Show": "Toon", "ShowActorColumn": "Kolom \"Acteur\" tonen", @@ -612,17 +633,19 @@ "ShowStartColumn": "Kolom \"Begin\" tonen", "ShowHideColumn": "Kolom \"Verberg\" tonen", "ShowHistory": "Geschiedenis tonen", + "ClearHistory": "Geschiedenis wissen", + "RemoveFromHistory": "Uit geschiedenis verwijderen", "ShowLayerColumn": "Kolom \"Laag\" tonen", "ShowPreview": "Voorbeeld tonen", "ShowShotChangesList": "Shot-wijzigingenlijst tonen", + "ShowShotInColumn": "Kolom \"Shot in\" tonen", + "ShowShotOutColumn": "Kolom \"Shot uit\" tonen", "ShowStyleColumn": "Kolom \"Stijl\" tonen", "ShowTeletext": "Teletekstkolom tonen in lijstweergave", "ShowTimeCodes": "Tijdcodes tonen", "ShowWpmColumn": "Kolom \"W/min\" tonen", "ShowPixelWidthColumn": "Kolom \"Pixelbreedte\" tonen", "Shrink": "Verkleinen", - "SingleBox": "Enkel kader", - "SingleLineLengths": "Lengte enkele regel:", "SingleMode": "Enkele modus", "TextTotalLength": "Tekst - totale lengte", "TextSingleLineMaxLength": "Tekst - max. lengte enkele regel", @@ -671,16 +694,16 @@ "Strikeout": "Doorhalen", "Style": "Stijl", "StyleExaggeration": "Stijloverdrijving", - "StyleLanguage": "Stijl / Taal", "Styles": "Stijlen", "SubtitleFile": "Ondertitelbestand", + "SubtitleFileChangedOutsideX": "Het bestand \"{0}\" is buiten Subtitle Edit gewijzigd.\n\nOpnieuw laden en uw wijzigingen verliezen?", "SubtitleFileName": "Bestandsnaam ondertitel", "SubtitleFileSaved": "Ondertitelbestand opgeslagen", "SubtitleFileSavedToX": "Ondertitelbestand opgeslagen in {0}", "SubtitleFiles": "Ondertitelbestanden", "SubtitleFormats": "Ondertitelformaten", "SubtitleLoadedX": "Ondertitel geladen: {0}", - "SubtitleXOfY": "Ondertitel {0} van {1}", + "SubtitleReloadedChangedOutsideX": "Ondertitel opnieuw geladen (buiten Subtitle Edit gewijzigd): {0}", "Suffix": "Achtervoegsel", "Suggestions": "Suggesties", "Sync": "Synchroniseren", @@ -692,7 +715,6 @@ "TeletextColor": "Teletekstkleur", "TeletextLine": "Teletekstregel", "TenHours": "10 uur", - "TenMilliseconds": "10 milliseconden", "Text": "Tekst", "TextColor": "Tekstkleur", "TextFiles": "Tekstbestanden", @@ -719,9 +741,6 @@ "TopRight": "Boven-Rechts", "Top": "Boven", "TotalAdjustmentX": "Totale aanpassing: {0}", - "TotalFramesX": "Totaal aantal frames: {0:#;##0.##}", - "TotalLengthX": "Totale lengte: {0}", - "TotalLengthXSplitLine": "Totale lengte: {0} (rij splitsen!)", "Translate": "Vertalen", "TranslatePercentX": "Vertalen: {0}%", "TranslateRow": "Rij vertalen", @@ -750,13 +769,11 @@ "Usages": "Gebruik", "Use": "Gebruiken", "UseAlways": "Altijd gebruiken", - "UseLargerFontForThisWindow": "Groter lettertype gebruiken voor dit venster", "UseOnce": "Eenmalig gebruiken", "UseOutputFolder": "Uitvoermap gebruiken", "UseSourceFolder": "Bronmap gebruiken", "UseSourceResolution": "Bronresolutie gebruiken", "UserName": "Gebruikersnaam", - "UserNameAlreadyInUse": "Gebruikersnaam is al in gebruik", "Vertical": "Verticaal", "Video100MsBack": "Video, 100 milliseconden terug", "Video100MsForward": "Video, 100 milliseconden vooruit", @@ -770,14 +787,25 @@ "VideoCustom3ForwardX": "Video, aangepaste milliseconden ({0:#,###,##0}) vooruit, 3", "VideoCustom4BackX": "Video, aangepaste milliseconden ({0:#,###,##0}) achteruit, 4", "VideoCustom4ForwardX": "Video, aangepaste milliseconden ({0:#,###,##0}) vooruit, 4", - "VideoEncodingX": "Videocodering: {0}", + "VideoCustom1BackAndPauseX": "Video, aangepaste milliseconden ({0:#,###,##0}) terug en pauzeren, 1", + "VideoCustom1ForwardAndPauseX": "Video, aangepaste milliseconden ({0:#,###,##0}) vooruit en pauzeren, 1", + "VideoCustom2BackAndPauseX": "Video, aangepaste milliseconden ({0:#,###,##0}) terug en pauzeren, 2", + "VideoCustom2ForwardAndPauseX": "Video, aangepaste milliseconden ({0:#,###,##0}) vooruit en pauzeren, 2", + "VideoCustom3BackAndPauseX": "Video, aangepaste milliseconden ({0:#,###,##0}) terug en pauzeren, 3", + "VideoCustom3ForwardAndPauseX": "Video, aangepaste milliseconden ({0:#,###,##0}) vooruit en pauzeren, 3", + "VideoCustom4BackAndPauseX": "Video, aangepaste milliseconden ({0:#,###,##0}) terug en pauzeren, 4", + "VideoCustom4ForwardAndPauseX": "Video, aangepaste milliseconden ({0:#,###,##0}) vooruit en pauzeren, 4", "VideoExtension": "Videobestandsextensie", "VideoFile": "Videobestand", "VideoFileGenerated": "Videobestand gegenereerd", "VideoFileGeneratedX": "Videobestand gegenereerd: \"{0}\"", + "VideoFilesGenerated": "Videobestanden gegenereerd", + "XVideosGenerated": "{0} video's gegenereerd", + "XOfYVideosGenerated": "{0} van {1} video's gegenereerd", + "SavedInX": "Opgeslagen in {0}", + "SavedInXFolders": "Opgeslagen in {0} mappen", "VideoFiles": "Videobestanden", "VideoAndAudioFiles": "Video- en audiobestanden", - "VideoInformation": "Video-info", "VideoOffset": "Video-offset", "VideoOneFrameBack": "Video, één frame terug", "VideoOneFrameForward": "Video, één frame vooruit", @@ -788,7 +816,6 @@ "VideoPlayer": "Videospeler", "VideoPosition": "Videopositie", "VideoResolution": "Videoresolutie", - "ViewX": "{0} bekijken", "Visible": "Zichtbaar", "Voice": "Stem", "Volume": "Volume", @@ -797,9 +824,7 @@ "WaveformCenterOnVideoPosition": "Golfvorm centreren op videopositie", "WaveformPasteFromClipboard": "Plakken van klembord", "WaveformSpectrogram": "Golfvorm/spectrogram", - "WebServiceUrl": "Webservice URL", "Width": "Breedte", - "WindowPositionAndSize": "Vensterpositie en -grootte", "WordsPerMin": "W/min", "PixelWidth": "Pixelbreedte", "Wpm": "W/min", @@ -813,8 +838,6 @@ "NoBookmarksFound": "Geen bladwijzers meer gevonden", "XRequiresAnApiKey": "{0} vereist een API-sleutel", "XRequiresAValidUrl": "{0} vereist een geldige URL (bijv. \"http://...\" of \"https://...\")", - "XSeconds": "{0:0.0##} seconden", - "XSubtitles": "{0:#,###,##0} ondertitels", "Yes": "Ja", "ZeroBytes": "0 bytes", "CopyToClipboard": "Kopiëren naar klembord", @@ -836,10 +859,8 @@ "PlaybackSpeed": "Afspeelsnelheid", "HoursMinutesSecondsMilliseconds": "HH:MM:SS.FFF", "ImageFiles": "Afbeeldingsbestanden", - "OpenAiCompatibleStt": "OpenAI-compatibele STT", "OpenAiCompatibleSttEndpoint": "STT-eindpunt-URL", "OpenAiCompatibleSttApiKey": "API-sleutel", - "OpenAiCompatibleSttModel": "Model", "OpenAiCompatibleSttExtraHeaders": "Extra headers", "OpenAiCompatibleSttTimeout": "Time-out (seconden)", "OpenAiCompatibleSttLanguage": "Taalhint", @@ -861,11 +882,9 @@ "ConfigurationRequired": "Configuratie vereist", "TranscriptionError": "Transcriptiefout", "TranscriptionComplete": "Transcriptie voltooid", - "TranscribingWithOpenAi": "Transcriberen met OpenAI-service...", "ProcessingResponse": "Antwoord verwerken...", "UnauthorizedApiKey": "Niet geautoriseerd: ongeldige API-sleutel of onvoldoende rechten.", "RequestTimeout": "Time-out van aanvraag: de server deed er te lang over om te antwoorden.", - "NoSegmentsReturned": "Geen segmenten ontvangen van de transcriptieservice.", "OpenAiCompatibleSttUrlMissing": "De URL van het OpenAI-compatibele STT-eindpunt is vereist. Voer een URL in en probeer het opnieuw.", "OpenAiCompatibleSttUrlNotResponding": "Het OpenAI-compatibele STT-eindpunt reageerde niet:\n{0}\n\nControleer de URL en of de server actief is.", "TranscriptionFailed": "Transcriptie mislukt", @@ -881,12 +900,15 @@ "CharactersPerSecond": "Tekens/seconde: {0}", "ChooseColumn": "Kies kolom", "ColumnPaste": "Kolom plakken", + "CommandPaletteTitle": "Opdrachtpalet", + "CommandPaletteSearchPlaceholder": "Typ om opdrachten te zoeken...", + "CommandPaletteNoCommandsFound": "Geen overeenkomende opdrachten", "CreatedEmptyTranslation": "Lege vertaling gemaakt van de huidige ondertitel", "DeleteText": "Tekst verwijderen", "DeleteTextAndShiftCellsUp": "Verwijder tekst en schuif cellen omhoog", "EndTimeMustBeAfterStartTime": "De eindtijd moet na de starttijd liggen.", "ErrorLoad7Zip": "Dit bestand lijkt een gecomprimeerd 7-Zip-bestand te zijn.\r\n\r\n\r\nOndertitelbewerking kan geen gecomprimeerde bestanden openen.", - "ErrorLoadBinaryZeroes": "Sorry, dit bestand bevat alleen binaire nullen!\r\n\r\n\r\nAls u dit bestand heeft bewerkt met Subtitle Edit, kunt u mogelijk een back-up vinden via het menu-item Bestand -> Automatische back-up herstellen...", + "ErrorLoadBinaryZeroes": "Sorry, dit bestand bevat alleen binaire nullen!\n\nAls u dit bestand heeft bewerkt met Subtitle Edit, kunt u mogelijk een back-up vinden via het menu-item Bestand -> Automatische back-up herstellen...", "ErrorLoadGZip": "Dit bestand lijkt een gecomprimeerd GZip-bestand te zijn.\r\n\r\n\r\nOndertitelbewerking kan geen gecomprimeerde bestanden openen.", "ErrorLoadLargeFile": "Dit bestand is te groot om als ondertitelbestand te openen.", "ErrorLoadVideoFilePrompt": "Dit bestand lijkt een videobestand te zijn:\n{0}\n\nU kunt een video openen via \"Video -> Video openen\" of door een video naar de videospeler te slepen.\n\nWilt u het als videobestand openen?", @@ -926,13 +948,13 @@ "OverwriteExistingCells": "Bestaande cellen overschrijven", "OverwriteOrShiftCellsDown": "Cellen overschrijven/naar beneden verschuiven", "ParsingMatroskaFile": "Matroska-bestand parseren...", + "ReadingDvdSubtitles": "DVD-ondertitels lezen...", "PasteFromClipboardDotDotDot": "Plakken vanaf klembord...", "RedoPerformed": "Opnieuw uitgevoerd", "RedoPerformedXActionLeft": "Opnieuw uitgevoerd (resterende acties: {0})", "RemovedUnicodeControlCharactersX": "Unicode-besturingstekens verwijderd uit {0} rijen", "RemovedXBlankLines": "{0} lege rijen verwijderd", "ReplacedXWithYCountZ": "Vervangen \"{0}\" door \"{1}\" ({2} exemplaren)", - "ReplacedXWithYInLineZ": "'{0}' vervangen door '{1}' in rij {2}", "ReversedStartAndEndingsForRightToLeftX": "Omgekeerde start en einde voor rechts naar links in {0} rijen", "RuleProfileIsX": "Regelprofiel is nu '{0}'", "SaveLanguageFile": "Taalbestand opslaan", @@ -940,7 +962,6 @@ "ShiftTextCellsDown": "Verplaats tekstcellen naar beneden", "SingleLineLength": "Regellengte:", "SpeedIsNowX": "Snelheid is nu \"{0}", - "SpellCheckResult": "Spellingcontrole voltooid.\r\n\r\n\r\n• Gewijzigde woorden: {0}\r\n\r\n• Overgeslagen woorden: {1}", "SubtitleGridFormattingX": "Roosteropmaak: {0}", "SubtitleImportedFromMatroskaFile": "Ondertitel geïmporteerd uit Matroska-bestand", "TextDown": "Tekst naar beneden", @@ -967,13 +988,14 @@ "TrimmedXLines": "{0} rijen bijgesneden", "PastedXLinesOverSelectedLines": "{0} rij(en) over de geselecteerde rijen geplakt", "PastedXOfYLinesOverSelectedLines": "{0} van {1} rij(en) over de geselecteerde rijen geplakt - de rest paste niet in de selectie", + "InsertedXLinesFromClipboard": "{0} rij(en) vanaf het klembord ingevoegd", "OpenOriginalDifferentNumberOfSubtitlesXY": "Het originele ondertitelbestand heeft niet hetzelfde aantal ondertitels als het huidige ondertitelbestand.\r\n\r\n\r\n• Originele ondertitels: {0}\r\n\r\n• Huidige ondertitels: {1}", - "ImportXMatchingOriginalLines": "{0} overeenkomende originele ondertitels importeren?", "OriginalTextReadOnly": "Originele tekst (alleen-lezen)", "OriginalTextEditMode": "Originele tekst (bewerkmodus)", "OriginalIsReadOnlyNotSaved": "De originele ondertitel is een alleen-lezen referentie en is niet opgeslagen", "OriginalIsEmptyNotSaved": "De originele ondertitel bevat helemaal geen tekst en is niet opgeslagen", "OriginalIsReadOnlyReference": "De originele ondertitel is geopend als alleen-lezen referentie", + "CloseTranslationQuestionXY": "De vertaling \"{0}\" sluiten?\n\nDe originele ondertitel \"{1}\" wordt de ondertitel die u bewerkt. Het vertaalbestand zelf wordt niet gewijzigd.", "AllowEditOfOriginalSubtitle": "Bewerken van originele ondertitel toestaan", "ShowAllOriginalLinesX": "Alle originele rijen tonen ({0} hebben hier geen overeenkomst)", "ShowAllOriginalLinesHint": "De rijen zonder overeenkomst worden als extra rijen getoond, zodat u ziet wat er in de vertaling ontbreekt.", @@ -1008,6 +1030,7 @@ "FileExportedInFormatXToY": "Bestand geëxporteerd in formaat {0} naar {1}", "FileExportedInFormatXToFileY": "Bestand geëxporteerd in formaat \"{0}\" naar bestand \"{1}", "FixedXLines": "{0} rijen hersteld", + "ToolXChangedYLines": "{0}: {1} rijen gewijzigd", "TranscriptionCompletedWithXLines": "Transcriptie voltooid met {0} rijen", "OpenSubtitleFileX": "Ondertitelbestand \"{0}\" openen?", "ReplacedXOccurrences": "{0} exemplaren vervangen", @@ -1071,10 +1094,10 @@ "MultipleReplace": "_Meervoudig vervangen...", "FillSelectedLinesWithClipboard": "Geselecteerde rijen vullen met klembordtekst", "GoToLineNumber": "Ga naar _rijnummer...", + "CommandPalette": "Opdracht_palet...", "RightToLeftMode": "_Rechts-naar-links modus (RTL)", "ModifySelectionDotDotDot": "_Selectie aanpassen...", "Tools": "_Gereedschappen", - "ToolsSelectedLines": "Gereedschappen (_geselecteerde rijen)", "AdjustDurations": "_Duur aanpassen...", "ApplyDurationLimits": "Duurgrenzen _toepassen...", "BatchConvert": "_Batch-conversie...", @@ -1291,20 +1314,66 @@ "CompareOnlyInOneFile": "Alleen in één bestand", "CompareTextOrTimeDifference": "Tekst-/tijdverschil", "CompareNumberDifference": "Nummerverschil", - "IgnoreLineBreaks": "Regeleinden negeren", "IgnoreWhitespace": "Witruimte negeren", "IgnoreWhitespaceHint": "Rijen die alleen verschillen in spaties, tabs of regeleinden tellen niet als verschillend", "IgnoreFormatting": "Opmaak negeren", - "OnlyLookForDifferencesInText": "Alleen naar verschillen in tekst zoeken", - "CannotCompareWithImageBasedSubtitles": "Kan niet vergelijken met afbeeldingsgebaseerde ondertitels", - "StatisticsTitle": "Statistieken", "IgnoreFormattingHint": "Rijen die alleen verschillen in opmaaktags, zoals of {\\an8}, tellen niet als verschillend", "ShowOnlyDifferencesInText": "Alleen verschillen in tekst", + "IgnoreNumbering": "Nummering negeren", + "IgnoreNumberingHint": "Rijen die alleen in hun nummer verschillen, tellen niet als verschillend", + "IgnoreTimeDifferenceMs": "Tijdtolerantie (ms)", + "IgnoreTimeDifferenceMsHint": "Begin- en eindtijden die dit aantal milliseconden of minder verschillen, tellen niet als verschillend", + "CompareDifferences": "Verschillen", + "CompareTextDifferences": "Tekstverschillen", + "CompareCurrent": "Huidig", + "CompareReference": "Referentie", + "CompareEditable": "Bewerkbaar", + "CompareEditableHint": "Wijzigingen die hier worden gemaakt, gaan terug naar de ondertitel wanneer u op Toepassen klikt", + "CompareReadOnly": "Alleen-lezen", + "CompareTakeFromReference": "Tekst en timing overnemen van de referentie", + "CompareInsertFromReference": "Deze rij in de huidige ondertitel invoegen", + "CompareDeleteFromCurrent": "Deze rij uit de huidige ondertitel verwijderen", + "CompareTakeText": "Tekst overnemen", + "CompareTakeTiming": "Timing overnemen", + "CompareEditLine": "Rij bewerken", + "CompareEditHint": "Ctrl+Enter om op te slaan, Esc om te annuleren", + "CompareEdited": "Bewerkt", + "CompareOnePendingChange": "1 openstaande wijziging", + "CompareXPendingChanges": "{0} openstaande wijzigingen", + "CompareDiscardXChanges": "De {0} wijziging(en) in Vergelijken verwerpen?", + "CompareXChangesApplied": "Vergelijken: {0} wijziging(en) toegepast", + "CompareChangeTextX": "#{0} tekst van referentie", + "CompareChangeTimingX": "#{0} timing van referentie", + "CompareChangeTextAndTimingX": "#{0} tekst en timing van referentie", + "CompareChangeEditedX": "#{0} bewerkt", + "CompareChangeInsertedX": "#{0} ingevoegd", + "CompareChangeDeletedX": "#{0} verwijderd", + "CompareSyncPoint": "Synchronisatiepunt", + "CompareSyncPointHint": "Synchronisatiepunt - deze twee rijen worden altijd als paar getoond, en de rijen erboven en eronder worden afzonderlijk uitgelijnd", + "CompareSyncPickCurrent": "Synchronisatiepunt: deze huidige rij gebruiken", + "CompareSyncPickReference": "Synchronisatiepunt: deze referentierij gebruiken", + "CompareSyncRemove": "Synchronisatiepunt verwijderen", + "CompareClearXSyncPoints": "Synchronisatiepunten wissen ({0})", + "CompareSyncCurrentPickedX": "Huidige #{0} gekozen als synchronisatiepunt - selecteer de overeenkomende referentierij en klik op Synchroniseren", + "CompareSyncReferencePickedX": "Referentie #{0} gekozen als synchronisatiepunt - selecteer de overeenkomende huidige rij en klik op Synchroniseren", + "CompareSyncWithCurrentX": "Synchroniseren met huidige #{0}", + "CompareSyncWithReferenceX": "Synchroniseren met referentie #{0}", + "CompareSyncApply": "Synchroniseren", + "CompareSyncPointSetXY": "Synchronisatiepunt ingesteld: huidige #{0} en referentie #{1} worden nu als paar getoond", + "CompareSyncAlreadyPairedXY": "Huidige #{0} en referentie #{1} worden al als paar getoond met hetzelfde begin - niets te synchroniseren", + "CompareSyncPointShiftedXYZW": "Synchronisatiepunt ingesteld: huidige #{0}-#{1} {2} verschoven om te beginnen met referentie #{3}", + "CompareChangeSyncShiftXYZ": "#{0}-#{1} {2} verschoven (synchronisatiepunt)", + "CompareTimingDeltaHint": "Hoeveel later (+) of eerder (−) de referentie begint en eindigt dan de huidige rij", "LoadXFromFile": "\"{0}\" laden uit bestand", + "CompareLoadSavedFile": "Opgeslagen bestand laden", "SaveCompareHtmlTitle": "HTML-vergelijkingsbestand opslaan", "PickMatroskaTrackX": "Matroska-spoor kiezen - {0}", "PickTransportStreamTrackX": "Transportstream-track kiezen - {0}", + "Chapters": "Hoofdstukken", + "DvdVobFilesMissingX": "VOB-bestanden ontbreken ({0}% gevonden)", "PickMp4TrackX": "MP4-track kiezen - {0}", + "PickMxfTrackX": "MXF-spoor kiezen - {0}", + "PickMpegTrackX": "MPEG-spoor kiezen - {0}", "RosettaProperties": "Timed Text Rosetta IMSC-eigenschappen", "RosettaFontSize": "Tekengrootte (rijhoogte)", "PropertyTimeBase": "Tijdbasis", @@ -1314,7 +1383,6 @@ "PropertyDefaultRegion": "Standaardregio", "PropertyStyleAttributeName": "Naam van stijlattribuut", "PropertyTimeCodeFormat": "Tijdcodeformaat", - "PropertyFileExtension": "Bestandsextensie", "PropertyTopOrigin": "Bovenoorsprong", "PropertyTopExtent": "Bovenomvang", "PropertyBottomOrigin": "Onderoorsprong", @@ -1322,13 +1390,9 @@ "XProperties": "Eigenschappen van {0}", "EbuSaveOptions": { "Title": "EBU-opslagopties", - "GeneralSubtitleInformation": "Algemene ondertitelinformatie", "CodePageNumber": "Codepaginanummer", "DiskFormatCode": "Schijfformaatcode", "DisplayStandardCode": "Weergavestandaardcode", - "ColorRequiresTeletext": "Kleuren vereisen teletekst!", - "AlignmentRequiresTeletext": "Uitlijning vereist teletekst!", - "TeletextCharsShouldBe38": "'Max. aantal tekens per rij' moet 38 zijn voor teletekst!", "CharacterCodeTable": "Tekentabel", "LanguageCode": "Taalcode", "OriginalProgramTitle": "Oorspronkelijke programmatitel", @@ -1345,7 +1409,6 @@ "MaxNumberOfDisplayableRows": "Max. aantal rijen", "DiskSequenceNumber": "Volgnummer schijf", "TotalNumberOfDisks": "Totaal aantal schijven", - "Import": "Importeren...", "TextAndTimingInformation": "Tekst- en timinginformatie", "JustificationCode": "Uitvullingscode", "VerticalPosition": "Verticale positie", @@ -1362,11 +1425,6 @@ "Errors": "Fouten", "ErrorsX": "Fouten: {0}", "MaxLengthError": "Regel {0} overschrijdt de maximale lengte ({1}) met {2}: {3}", - "TextUnchangedPresentation": "Ongewijzigde presentatie", - "TextLeftJustifiedText": "Links uitgelijnde tekst", - "TextCenteredText": "Gecentreerde tekst", - "TextRightJustifiedText": "Rechts uitgelijnde tekst", - "UseBoxForOneNewLine": "Vink 'Kader rond tekst gebruiken' aan voor slechts één nieuwe regel", "MaxLengthErrorTeletextColored": "Regel {0}-{1}: 36 (niet {2}) moet het maximum aantal tekens zijn voor gekleurde tekst met dubbele hoogte", "MaxLengthErrorTeletextWhite": "Regel {0}-{1}: 37 (niet {2}) moet het maximum aantal tekens zijn voor witte tekst met dubbele hoogte", "MaxLengthErrorTeletextSingleHeight": "Regel {0}: 38 (niet {1}) moet het maximum aantal tekens zijn voor witte tekst met enkele hoogte", @@ -1391,22 +1449,29 @@ "FormattingDotDotDot": "Opmaak...", "ImageBasedSubtitleForEditDotDotDot": "Afbeeldingsgebaseerde ondertitel om te bewerken...", "ImageBasedSubtitleForOcrDotDotDot": "Afbeeldingsgebaseerde ondertitel voor OCR...", + "DvdSubtitlesDotDotDot": "Ondertitels van DVD (IFO/VOB)...", + "TitleImportDvd": "Ondertitels van DVD importeren", + "DvdIfoFile": "IFO-bestand", + "DvdVobFiles": "VOB-bestanden", + "DvdVideoStandard": "Videostandaard", + "DvdStartRipping": "Rippen starten", + "DvdRippingAborted": "Rippen afgebroken", + "DvdOpenIfoFile": "DVD IFO-bestand openen", + "DvdAddVobFiles": "VOB-bestanden toevoegen", + "DvdIfoFiles": "DVD IFO-bestanden", + "DvdVobFileType": "DVD VOB-bestanden", + "DvdDropHint": "Open een IFO-bestand (VIDEO_TS\\VTS_01_0.IFO) of voeg VOB-bestanden toe - of sleep ze hierheen", + "DvdNotAnIfoFileX": "{0} is geen DVD IFO-bestand", + "DvdMenuIfoNoTitleSetsX": "Geen titelsets (VTS_xx_0.IFO) gevonden naast {0}", + "DvdEncryptedXOfY": "{0} van de {1} ondertitelpakketten zijn nog CSS-versleuteld - deze VOB-bestanden zijn gekopieerd zonder ontsleuteling, dus sommige ondertitelafbeeldingen zullen vervormd zijn.\n\nOntsleutel de DVD eerst met een DVD-ripprogramma voor een schoon resultaat.\n\nToch doorgaan?", "SplitTextAt": "Tekst splitsen bij", "BlankLines": "Lege regels", "OneLineIsOneSubtitle": "Eén regel is één ondertitel", "TwoLinesAreOneSubtitle": "Twee regels zijn één ondertitel", "ImportFilesDotDotDot": "Bestanden importeren...", "MultipleFiles": "Importeren uit meerdere tekstbestanden (één bestand is één ondertitel)", - "ImportOptions": "Importopties", - "AutoSplitText": "Tekst automatisch splitsen", - "LineMode": "Regelmodus", "MaxLineLength": "Max. regellengte", - "MaxLinesPerSubtitle": "Max. regels per ondertitel", - "MinGapBetweenSubtitles": "Min. tussenruimte tussen ondertitels", "MergeShortLines": "Korte regels samenvoegen", - "RemoveLinesWithoutLetters": "Regels zonder letters verwijderen", - "SplitAtEndCharsSetting": "Splitsen bij eindtekens", - "TakeTimeFromCurrentFile": "Tijd uit huidig bestand overnemen", "Fixed": "Vast", "NumberOfSubtitlesX": "Aantal ondertitels: {0}", "NumberOfSubtitlesXForcedY": "Aantal ondertitels: {0} ({1} geforceerd)", @@ -1423,13 +1488,13 @@ "ForcedAlignerIsolatingSpeech": "Spraak isoleren... {0}", "ForcedAlignerIsolatingSpeechFailed": "Kan de spraak niet isoleren - eindtijden zijn in plaats daarvan ingesteld op basis van leestijd.", "ForcedAlignerModel": "Aligner-model", - "ForcedAlignerDownloadEngine": "Engine downloaden/bijwerken..." + "ForcedAlignerDownloadEngine": "Engine downloaden/bijwerken...", + "ForcedAlignerEstimatedXOfY": "{0} van {1} rijen konden niet worden uitgelijnd en zijn geplaatst op basis van leestijd - hun tijdcodes zijn slechts geschat. Het script is waarschijnlijk langer dan wat er in de video wordt gesproken." }, "Export": { "ExportImagesProfiles": "Profielen voor afbeeldingsexport", "LeftRightMargin": "Marge links/rechts", "TopBottomMargin": "Marge boven/onder", - "TitleExportBluRaySup": "Blu-ray exporteren (sup)", "LineSpacingPercent": "Regelafstand %", "PaddingLeftRight": "Opvulling links/rechts", "PaddingTopBottom": "Opvulling boven/onder", @@ -1470,7 +1535,6 @@ "TitleExportDCinemaInteropPng": "D-Cinema interop/png", "TitleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", "ImageBasedSubtitleSaved": "Afbeeldingsgebaseerde ondertitel opgeslagen", - "TitleExportBdnXml": "BDN/xml exporteren", "TitleExportWebVttThumbnails": "WebVTT exporteren (miniaturen)", "FullFrameImage": "Afbeelding op volledig frame", "FullFrameImageHint": "Maak elke afbeelding even groot als het videoframe, met de ondertitel op zijn plaats", @@ -1517,13 +1581,10 @@ "Statistics": { "Title": "Statistieken", "TitleWithFileName": "Statistieken - {0}", - "GeneralStatistics": "Algemene statistieken", - "MostUsed": "Meest gebruikt...", "MostUsedLines": "Meest gebruikte regels", "MostUsedWords": "Meest gebruikte woorden", "NothingFound": "Niets gevonden", "NumberOfLinesX": "Aantal ondertitels: {0:#,##0}", - "NumberOfFilesX": "Aantal ondertitelbestanden: {0:#,##0}", "LengthInFormatXinCharactersY": "Aantal tekens als {0}: {1:#,###,##0}", "NumberOfCharactersInTextOnly": "Aantal tekens in alleen tekst: {0:#,###,##0}", "TotalDuration": "Totale duur van alle ondertitels: {0:#,##0}", @@ -1564,7 +1625,6 @@ "GapMaximum": "Tussenruimte - maximum: {0:#,##0} ms", "GapAverage": "Tussenruimte - gemiddeld: {0:#,##0.##} ms", "GapExceedingMinimum": "Tussenruimte - onder minimum ({0:#,##0} ms): {1} ({2:0.00}%)", - "Export": "Exporteren...", "Subtitles": "Ondertitels", "Words": "Woorden", "TotalDurationShort": "Totale duur", @@ -1623,22 +1683,16 @@ "EditRate": "Bewerkingssnelheid", "TimeCodeRate": "Tijdcodesnelheid", "StartTime": "Begintijd", - "Font": "Lettertype", "FontId": "Lettertype-ID", "FontUri": "Lettertype-URI", - "Generate": "Genereren", - "FontColor": "Tekstkleur", "ChooseColor": "Kleur kiezen", "FontEffect": "Lettertype-effect", "EffectColor": "Effectkleur", - "FontSize": "Lettergrootte", "TopBottomMargin": "Marge boven/onder", "FadeUpTime": "Tijd voor infaden", "FadeDownTime": "Tijd voor uitfaden", - "Frames": "Frames", "ZPosition": "Z-positie", - "ZPositionHelp": "Positieve getallen verplaatsen de tekst naar achteren, negatieve getallen naar voren; als de z-positie nul is, is het 2D", - "Export": "Exporteren..." + "ZPositionHelp": "Positieve getallen verplaatsen de tekst naar achteren, negatieve getallen naar voren; als de z-positie nul is, is het 2D" } }, "Edit": { @@ -1701,7 +1755,6 @@ "SelectionIntersect": "Snijden met selectie" }, "MultipleReplace": { - "Title": "Meervoudig vervangen", "EditRule": "Regel bewerken", "NewRule": "Nieuwe regel", "EditCategory": "Categorie bewerken", @@ -1718,19 +1771,16 @@ "FindWhat": "Zoeken naar", "DescriptionOptional": "Omschrijving (optioneel)", "InvalidRegularExpressionX": "Ongeldige reguliere expressie: {0}", - "RegularExpressionTooSlowX": "Reguliere expressie is na {0} seconden gestopt - de regel wordt overgeslagen, probeer een eenvoudiger patroon" + "RegularExpressionTooSlowX": "Reguliere expressie is na {0} seconden gestopt - de regel wordt overgeslagen, probeer een eenvoudiger patroon", + "MoveToCategory": "Naar categorie verplaatsen" }, "Find": { "SearchTextWatermark": "Tekst zoeken...", "WholeWord": "Heel woord", - "CaseSensitive": "Hoofdlettergevoelig", - "CaseInsensitive": "Hoofdletterongevoelig", "FindPrevious": "Zoek _vorige", "FindNext": "_Zoek volgende", "ReplaceAndFindNext": "_Vervangen en volgende vinden", "ReplaceAll": "Vervang _alles", - "ReplaceTitle": "Vervangen", - "ReplaceWith": "Vervangen door", "ReplaceTextWatermark": "Vervangen door...", "ReplaceIn": "Vervangen/zoeken in", "ReplaceInTextAndOriginal": "Tekst en originele tekst", @@ -1763,7 +1813,6 @@ "AiReview": { "Title": "AI-review", "Review": "Review", - "Stop": "Stop", "EditPrompt": "Prompt bewerken...", "EditPromptTitle": "Reviewprompt bewerken", "PromptInfo": "Instructies die naar het model worden gestuurd - {language} wordt vervangen door de ondertiteltaal.", @@ -1774,7 +1823,6 @@ "ReviewingLineXOfY": "Bezig met reviewen van rij {0} van {1}...", "ReviewDone": "Review voltooid - {0} suggesties in {1} rijen", "NoIssuesFound": "Geen problemen gevonden", - "CategoryAll": "Alle", "CategorySpelling": "Spelling", "CategoryGrammar": "Grammatica", "CategoryPunctuation": "Interpunctie", @@ -1786,9 +1834,23 @@ "LargeChangeWarning": "Grote wijziging - lijkt op een herschrijving, controleer zorgvuldig", "MismatchWarning": "Lijkt niet op het origineel - hoort mogelijk bij een andere rij", "EngineError": "De AI-engine kon niet worden bereikt: {0}", - "SetupHint": "Kies eerst een engine en model via Gereedschappen -> AI-review.", "PlayCurrentLineHint": "Speel de geselecteerde rij af in de videospeler en pauzeer aan het einde ervan (of dubbelklik op een rij)", - "EditAfterHint": "Klik op de tekst van de geselecteerde rij om de correctie te bewerken voordat u die toepast (Enter slaat op, Escape annuleert)" + "EditAfterHint": "Klik op de tekst van de geselecteerde rij om de correctie te bewerken voordat u die toepast (Enter slaat op, Escape annuleert)", + "Template": "Sjabloon", + "TemplatePlaceholder": "Kies een sjabloon om de prompt te vervangen", + "TemplateStandard": "Standaard proeflezen", + "TemplateSpeechToText": "Opschonen na spraak naar tekst", + "TemplateMachineTranslation": "Machinevertaling corrigeren", + "TemplateSdh": "SDH / slechthorenden", + "ReferenceContext": "Referentiecontext", + "ReferenceContextInfo": "Optioneel. Namen, personages, woordenlijst, synopsis of stijlnotities - het model beschouwt dit als de autoriteit voor namen en termen. Wordt met elke batch meegestuurd.", + "ReferenceContextPlaceholder": "Namen: Kaito, tante Mei, Dr. Hollis\nTermen: Shinkansen, warpkern\nSynopsis: Kaito reist naar Tokio om zijn vermiste vader te vinden.", + "GenerateContext": "Genereren met AI", + "GenerateContextHint": "Laat de geselecteerde AI-engine de ondertitel lezen en namen, termen en een synopsis opstellen - controleer het resultaat voor gebruik", + "GeneratingContextPartXOfY": "Deel {0} van {1} lezen...", + "GeneratingContextSynopsis": "Synopsis schrijven...", + "ReplaceContextQuestion": "De huidige referentiecontext vervangen?", + "NoContextGenerated": "De AI-engine gaf geen bruikbare referentie-informatie terug." }, "AiAssistant": { "Title": "AI-assistent", @@ -1805,7 +1867,6 @@ "Hint": "AI-assistent voor deze rij", "ShowReasoning": "Redenering van het model tonen" }, - "PickAlignmentTitle": "Kies uitlijning", "RemoveUnicodeCharacters": { "Title": "Unicode-tekens verwijderen/vervangen", "CharactersFoundX": "Gevonden Unicode-tekens: {0}", @@ -1815,31 +1876,23 @@ "PickFontNameInstalledFonts": "Geïnstalleerde lettertypen", "PickFontNameCollectedFonts": "Verzamelde lettertypen", "ColorPickerTitle": "Kleur kiezen", + "ColorPickerBrightness": "Helderheid", "FilterLayersTitle": "Lagen filteren voor weergave", "FilterLayersHideFromWaveform": "Verbergen in golfvorm/spectrogram", "FilterLayersHideFromSubtitleGrid": "Verbergen in ondertitelraster", "FilterLayersHideFromVideoPreview": "Verbergen in videovoorbeeld", "PickSubtitleFormat": "Ondertitelformaat kiezen", "PickSubtitleFormatImageBasedNoPreview": "Op afbeeldingen gebaseerd ondertitelformaat.\nBitmaps worden tijdens de conversie gegenereerd - geen tekstvoorbeeld.", - "PickLayerTitle": "Laag instellen", "RecentColors": "Recente kleuren", "FixCommonErrors": { - "Title": "Veelvoorkomende fouten herstellen", - "Step1": "Stap 1/2 - Kies welke fouten hersteld moeten worden", - "WhatToFix": "Wat herstellen", - "Example": "Voorbeeld", - "SelectAll": "Alles selecteren", - "InverseSelection": "Selectie omkeren", "Back": "< &Terug", "Next": "&Volgende >", - "Step2": "Stap 2/2 - Correcties controleren", "Fixes": "Correcties", "RuleDetailsDotDotDot": "Regeldetails...", "ShowOnlyThisRule": "Alleen correcties van deze regel tonen", "AppliedRulesForLineX": "Toegepaste regel(s) voor rij {0}", "RuleX": "Regel: {0}", "Log": "Logboek", - "Function": "Functie", "RemovedEmptyLine": "Lege regel verwijderen", "RemovedEmptyLineAtTop": "Lege regel bovenaan verwijderen", "RemovedEmptyLineAtBottom": "Lege regel onderaan verwijderen", @@ -1860,13 +1913,13 @@ "RemoveLineBreaksPixelWidth": "Ondertitels die op één regel passen samenvoegen (pixelbreedte)", "FixUppercaseIInsideLowercaseWords": "Hoofdletter 'i' in kleine-letterwoorden herstellen (OCR-fout)", "FixDoubleApostrophes": "Dubbele apostroffen ('') vervangen door een dubbel aanhalingsteken (\")", + "FixMisreadQuotes": "Apostrofs die als dubbele aanhalingstekens zijn gelezen herstellen (OCR, Engels)", "AddPeriods": "Punt toevoegen na rijen waarvan de volgende rij met een hoofdletter begint", "StartWithUppercaseLetterAfterParagraph": "Met hoofdletter beginnen na alinea", "StartWithUppercaseLetterAfterPeriodInsideParagraph": "Met hoofdletter beginnen na punt binnen alinea", "StartWithUppercaseLetterAfterColon": "Met hoofdletter beginnen na dubbele punt/puntkomma", "FixLowercaseIToUppercaseI": "Losstaande kleine letter 'i' naar 'I' herstellen (Engels)", "FixCommonOcrErrors": "Veelvoorkomende OCR-fouten herstellen (met OCR-vervanglijst)", - "CommonOcrErrorsFixed": "Veelvoorkomende OCR-fouten hersteld (OcrReplaceList-bestand gebruikt): {0}", "RemoveSpaceBetweenNumber": "Spatie tussen getallen verwijderen", "BreakDialogsOnOneLine": "Dialogen op één regel splitsen", "RemoveDialogFirstInNonDialogs": "Beginstreepje in de eerste regel verwijderen bij niet-dialogen", @@ -1883,18 +1936,17 @@ "FixCommasExample": ",, -> ,", "RemoveLineBreaksExample": "Foo
bar! -> Foo bar!", "FixDoubleApostrophesExample": "''Has double single quotes'' -> \"Has single double quote\"", + "FixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "AddPeriodsExample": "Hello world -> Hello world.", "StartWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: Foobar!", "StartWithUppercaseLetterAfterPeriodInsideParagraphExample": "Hello there! how are you? -> Hello there! How are you?", "StartWithUppercaseLetterAfterColonExample": "Speaker: hello world! -> Speaker: Hello world!", "RemoveHyphensSingleLineExample": "- Foobar. -> Foobar.", "Fix3PlusLinesExample": "Foo
bar
baz! -> Foo bar baz!", - "XMissingQuotesAdded": "Ontbrekende aanhalingstekens toegevoegd: {0}", "Fix3PlusLine": "Ondertitel met meer dan twee regels herstellen", "Fix3PlusLines": "Ondertitels met meer dan twee regels herstellen", "Analysing": "Analyseren...", "NothingToFix": "Niets te herstellen :)", - "FixesFoundX": "Gevonden verbeteringen: {0}", "XFixesApplied": "Toegepaste verbeteringen: {0}", "XFixesYSelected": "{0} correcties - {1} geselecteerd", "NothingFixableBut": "Er kon niets automatisch worden hersteld. De ondertitel bevat fouten - zie het logboek voor details", @@ -1903,7 +1955,6 @@ "FixFirstLetterToUppercaseAfterParagraph": "Eerste letter na alinea naar hoofdletter herstellen", "MergeShortLine": "Korte regel samenvoegen (enkele zin)", "MergeShortLineAll": "Korte regel samenvoegen (alles behalve dialogen)", - "UnbreakShortLinePixelWidth": "Korte regel samenvoegen (pixelbreedte)", "BreakLongLine": "Lange regel afbreken", "FixLongDisplayTime": "Lange weergavetijd herstellen", "FixInvalidItalicTag": "Ongeldige cursief-tag herstellen", @@ -1926,7 +1977,6 @@ "FixUppercaseIInsideLowercaseWord": "Hoofdletter 'i' in kleine-letterwoord herstellen", "FixMissingPeriodAtEndOfLine": "Ontbrekende punt aan het einde van de regel toevoegen", "RefreshFixes": "Beschikbare correcties vernieuwen", - "ApplyFixes": "Geselecteerde correcties toepassen en sluiten", "AutoBreak": "Auto &afbr.", "Unbreak": "&Samenvoegen", "FixDoubleDash": "'--' -> '...' herstellen", @@ -1945,8 +1995,6 @@ "FixSpaceBetweenNumbersExample": "1 100 -> 1100", "FixDialogsOneLineExample": "Hoi Jan! - Hoi Ida! -> Hoi Jan!
- Hoi Ida!", "RemoveDialogFirstInNonDialogsExample": "- Hoe gaat het? -> Hoe gaat het?", - "SelectDefault": "Standaard selecteren", - "SetDefault": "Huidige correcties als standaard instellen", "FixContinuationStyleX": "Voortzettingsstijl herstellen: {0}", "FixUnnecessaryLeadingDots": "Overbodige punten aan het begin verwijderen", "FixCommonErrorsProfiles": "Profielen voor veelvoorkomende fouten herstellen", @@ -1954,7 +2002,6 @@ "SearchRulesDotDotDot": "Regels zoeken...", "GoToApplyFixes": "Naar correcties toepassen", "BackToFixList": "Terug naar de lijst met correcties", - "ApplyFixesAndClose": "Correcties toepassen en sluiten", "FixCommonOcrErrorsStep2": "Veelvoorkomende fouten herstellen, stap 2 (correcties toepassen)", "FixCommonOcrErrorsStep2FixesFoundX": "Veelvoorkomende fouten herstellen, stap 2 - gevonden verbeteringen: {0}", "Action": "Actie", @@ -1967,18 +2014,11 @@ "AdjustDurations": { "Title": "Duur aanpassen", "AdjustVia": "Aanpassen via", - "Seconds": "Seconden", - "Percent": "Procent", "Recalculate": "Opnieuw berekenen", "AddSeconds": "Seconden toevoegen", - "SetAsPercent": "Instellen als percentage van de duur", "Note": "Let op: de weergavetijd zal de begintijd van de volgende tekst niet overlappen", "Fixed": "Vast", - "Milliseconds": "Milliseconden", "ExtendOnly": "Alleen verlengen", - "EnforceDurationLimits": "Minimum- en maximumduur afdwingen", - "CheckShotChanges": "Niet verlengen tot voorbij shot-wijzigingen", - "BatchCheckShotChanges": "Shot-wijzigingen respecteren (indien beschikbaar)", "RecalculateRequiresOcrNote": "Herberekenen is niet beschikbaar — een of meer ondertitels hebben geen OCR-tekst. Voer eerst OCR uit." }, "ApplyDurationLimits": { @@ -1986,6 +2026,8 @@ "FixMinDurationMs": "Minimumduur herstellen (ms)", "DoNotGoPastShotChange": "Niet voorbij shot-wijziging gaan", "FixMaxDurationMs": "Maximumduur herstellen (ms)", + "FixMinDurationFrames": "Minimale duur herstellen (frames)", + "FixMaxDurationFrames": "Maximale duur herstellen (frames)", "MinimumDurationMilliseconds": "Minimale duur (milliseconden):", "MaximumDurationMilliseconds": "Maximale duur (milliseconden):", "MaxDurationShouldBeHigherThanMinDuration": "De maximumduur moet hoger zijn dan de minimumduur", @@ -2005,12 +2047,8 @@ }, "BeautifyTimeCodes": { "Title": "Tijdcodes verfraaien", - "BeautifySettings": "Instellingen voor verfraaien", "SnapToFrames": "Uitlijnen op frames", - "FrameGap": "Tussenruimte in frames", "MinDuration": "Min. duur (ms)", - "ShotChangeThreshold": "Drempel voor shot-wijziging (ms)", - "ShotChangeOffset": "Verschuiving shot-wijziging (frames)", "Original": "Origineel", "Beautified": "Verfraaid", "SubtitlesCount": "Ondertitels", @@ -2051,6 +2089,20 @@ "IsolateSpeechHint": "Verwijdert muziek en geluidseffecten vóór het uitlijnen, zodat de aligner alleen de dialoog hoort. Helpt bij rijen die over luide muziek of actie worden uitgesproken, maar duurt met een GPU ongeveer zo lang als de audio zelf - en zonder GPU vele malen langer.", "IsolatingSpeech": "Spraak isoleren... (dit duurt even)", "IsolateSpeechFailed": "Kan de spraak niet isoleren - in plaats daarvan uitgelijnd op de originele audio.", + "CheckWithSpeechToText": "Controleren met spraak naar tekst", + "CheckWithSpeechToTextHint": "Transcribeert ook de audio en controleert elke verplaatsing aan de hand van waar de woorden daadwerkelijk werden gehoord. Grote verplaatsingen die de spraak bevestigt, worden voor u aangevinkt, en verplaatsingen weg van waar een rij wordt gehoord, blijven uitgevinkt zodat u ze kunt controleren. Toont ook hoeveel van elke rij werd gehoord - een laag aandeel betekent dat de tekst afwijkt van wat er wordt gezegd. Een ondertitel die verder uit sync is dan de max. verschuiving - een constante offset, een drift door een verschil in framerate, of sprongen waar scènes zijn geknipt - wordt eerst gesynchroniseerd op basis van de gehoorde woorden. Gebruikt Crisp ASR Parakeet, wat met een GPU enkele minuten duurt voor een speelfilm.", + "CheckWithSpeechToTextNotAvailableX": "Controle met spraak naar tekst is niet beschikbaar voor {0}", + "TranscribingToCheck": "Transcriberen om de uitlijning te controleren...", + "SpeechToTextFailed": "Spraak naar tekst mislukt - de tijdcodes zijn er niet mee gecontroleerd.", + "SpeechToTextX": "Spraak naar tekst: {0}", + "SpeechToTextConfirmedXDisputedY": "Spraak: {0} bevestigd, {1} betwist", + "HardlyHeardX": "Spraak naar tekst heeft slechts {0}% van de woorden van de ondertitel gehoord. Is de ondertitel in de gesproken taal? De aligner kan geen vertaling plaatsen.", + "Heard": "Gehoord", + "HeardHint": "Hoeveel van de rij spraak naar tekst heeft gehoord. Een laag aandeel betekent dat de tekst afwijkt van wat er wordt gezegd - waar de aligner zich het meest waarschijnlijk vergist.", + "StatusConfirmedBySpeech": "Bevestigd door spraak", + "StatusDisputedBySpeech": "Gehoord waar het was", + "StatusMovedWithSync": "Verplaatst met de synchronisatie", + "SyncedFirstXY": "Eerst gesynchroniseerd: {0} s aan het begin, {1} s aan het einde", "ShowSpeechOnly": "Alleen spraak tonen", "ShowSpeechOnlyHint": "Teken de uitgelijnde golfvorm van de audio zonder muziek en geluidseffecten; de originele golfvorm blijft ter vergelijking ongewijzigd. Beschikbaar zodra de spraak is geïsoleerd - hier, of met \"Alleen spraak tonen\" in de golfvorm van het hoofdvenster.", "Align": "Uitlijnen", @@ -2065,6 +2117,7 @@ "MeanShiftX": "Gemiddelde verschuiving: {0} ms", "ToCheckX": "Te controleren: {0}", "LargeMovesToCheckX": "{0} rij(en) zouden op zichzelf ver verschuiven en zijn niet aangevinkt - speel Origineel / Uitgelijnd af en vink de juiste aan.", + "LinesToCheckX": "{0} rij(en) zijn uitgevinkt gelaten om te controleren - beluister ze (F5 speelt de uitgelijnde rij af, Shift+F5 het origineel) en vink de juiste aan.", "ChangeXOfY": "Wijziging {0} van {1}", "PreviousChange": "Vorige wijziging", "NextChange": "Volgende wijziging", @@ -2077,6 +2130,10 @@ "StatusNoSpeech": "Geen spraak", "StatusShiftTooLarge": "Behouden - verschuiving te groot", "StatusFailed": "Behouden - aligner mislukt", + "StatusAdjustedByHand": "Handmatig aangepast", + "AlignedWaveformHint": "Sleep een rij om deze te verplaatsen, of sleep de randen om het begin of einde te wijzigen.", + "PlayLine": "Rij afspelen", + "UndoAdjustment": "Aanpassing ongedaan maken", "PlayPause": "Afspelen / pauzeren", "PlayAligned": "Uitgelijnd", "PlayAlignedHint": "De geselecteerde rij afspelen met de uitgelijnde tijdcodes", @@ -2094,7 +2151,6 @@ "ProfileName": "Profielnaam", "OverwriteProfileX": "Er bestaat al een profiel met de naam \"{0}\". Overschrijven?", "DeleteProfileX": "Profiel \"{0}\" verwijderen?", - "General": "Algemeen", "Gap": "Tussenruimte", "GapSuffix": "frames (werkt ook de tussenruimtevelden hieronder bij die niet nul zijn)", "Milliseconds": "ms", @@ -2123,7 +2179,6 @@ "HintChaining": "Hoe ondertitels die elkaar bijna raken worden behandeld — samen verlengen of uit elkaar duwen, afhankelijk van of er een shot-wijziging tussen zit." }, "BridgeGaps": { - "Title": "Gaten overbruggen", "BridgeGapsSmallerThan": "Tussenruimten overbruggen kleiner dan (ms)", "MinGap": "Minimale tussenruimte (ms)", "BridgeGapsSmallerThanFrames": "Gaten overbruggen kleiner dan (frames)", @@ -2141,8 +2196,6 @@ "SortBy": { "Title": "Ondertitels sorteren", "SortOrder": "Sorteervolgorde", - "SortByNumber": "Nummer", - "SortByStartTime": "Starttijd", "SortByEndTime": "Eindtijd" }, "BatchConvert": { @@ -2165,6 +2218,7 @@ "AddColor": "Kleur toevoegen", "DeleteLinesWithSpecificActorsOrStyles": "Rijen met acteurs of stijlen verwijderen (scheid meerdere met een komma)", "UseSourceStylesIfPossible": "Bronstijlen gebruiken indien mogelijk", + "KeepSourceEmbeddedFonts": "Ingesloten lettertypen van bron behouden (footer)", "EditStyles": "Stijlen bewerken", "EditProperties": "Eigenschappen bewerken", "EditAttachments": "Bijlagen bewerken", @@ -2185,7 +2239,6 @@ "AssaChangeStyleFromStyle": "Stijl wijzigen van", "AssaChangeStyleToStyle": "naar", "AssaChangeStyleImportStyle": "Stijl importeren...", - "AssaChangeStyleImportedX": "Geïmporteerd: {0}", "AssaChangeStyleTrimUnusedStyles": "Ongebruikte stijlen verwijderen", "AssaChangeStylePropertiesTitle": "Stijleigenschappen wijzigen", "AssaChangeStylePropertiesInfo": "Wijzigt de gekozen velden in elke stijl in het bestand, zonder de stijlen zelf aan te passen.", @@ -2200,6 +2253,18 @@ "AddFolderRecursiveDotDotDot": "Map toevoegen (inclusief submappen)...", "SelectFolderToConvert": "Selecteer map met te converteren bestanden", "IncludeSubfolders": "Submappen meenemen bij het toevoegen van een map", + "VideoFilesWhenAddingFolder": "Videobestanden (mkv, mp4, ts...) bij het toevoegen van een map", + "VideoFilesAsk": "Vragen", + "VideoFilesInclude": "Hun ondertitelsporen toevoegen", + "VideoFilesSkip": "Overslaan", + "FolderContainsXVideoFiles": "De map bevat {0} videobestand(en) (mkv, mp4, ts...).\n\nOok hun ingesloten ondertitelsporen toevoegen, of alleen de ondertitelbestanden?", + "AddVideoFiles": "Videobestanden toevoegen", + "SkipVideoFiles": "Alleen ondertitelbestanden", + "DoNotAskAgainVideoFiles": "Niet opnieuw vragen (wijzigen in instellingen van Batchconversie)", + "SettingsSectionOutput": "Uitvoer", + "SettingsSectionAddingFiles": "Bestanden toevoegen", + "SettingsSectionImageBasedSubtitles": "Op afbeeldingen gebaseerde ondertitels (OCR)", + "SettingsSectionOther": "Overig", "KeepSourceFileTimestamp": "Datum/tijd van bronbestand behouden op uitvoerbestanden", "PreventSleepWhileConverting": "Voorkomen dat de computer in slaapstand gaat tijdens het converteren", "ScanningFolderX": "{0} scannen...", @@ -2215,10 +2280,22 @@ "TransportStreamOnlyTeletext": "Alleen teletekst", "TransportStreamGetSizeFromVideo": "Formaat uit video halen...", "TwoLetterLanguageCodeUppercase": "Taalcode van twee letters (hoofdletters)", - "ThreeLetterLanguageCodeUppercase": "Taalcode van drie letters (hoofdletters)" + "ThreeLetterLanguageCodeUppercase": "Taalcode van drie letters (hoofdletters)", + "FormatContainsDotDotDot": "Formaat bevat...", + "ExtensionIsDotDotDot": "Extensie is...", + "StatusIsError": "Status is fout", + "ForcedTracksOnly": "Alleen geforceerde sporen", + "XConvertedYFailedInZ": "{0:#,###,##0} geconverteerd, {1:#,###,##0} mislukt in {2}", + "XNotProcessed": "{0:#,###,##0} niet verwerkt", + "RemoveUnicodeControlCharactersTitle": "Unicode-besturingstekens verwijderen", + "RemoveUnicodeControlCharactersInfo": "Verwijdert de onzichtbare Unicode-richtingsbesturingstekens (LRM, RLM, LRE, RLE, PDF, LRO en RLO) uit de tekst en vervangt vaste spaties door normale spaties.", + "Preset": "Voorinstelling", + "SavePresetDotDotDot": "Voorinstelling opslaan...", + "DeletePreset": "Voorinstelling verwijderen", + "PresetName": "Naam voorinstelling", + "DeletePresetX": "Voorinstelling \"{0}\" verwijderen?" }, "ChangeCasing": { - "Title": "Hoofdlettergebruik wijzigen", "FixNames": "Namen herstellen", "NamesX": "Namen: {0:#,##0}", "HitsX": "Treffers: {0:#,##0}", @@ -2229,9 +2306,7 @@ "AllUppercase": "Alles in hoofdletters", "AllLowercase": "Alles in kleine letters" }, - "ChangeFormatting": { - "Title": "Opmaak wijzigen" - }, + "ChangeFormatting": {}, "ConvertActors": { "Title": "Acteurs converteren", "ConvertActorFrom": "Acteur converteren van", @@ -2260,18 +2335,12 @@ "OutputFormatAssa": "Advanced Sub Station Alpha (.ass)", "Style1": "Stijl 1", "Style2": "Stijl 2", - "OutlineWidth": "Contourbreedte", - "ShadowWidth": "Schaduwbreedte", - "AlignTop": "Boven", - "AlignBottom": "Onder", - "Merge": "_Samenvoegen", - "PleaseLoadTwoSubtitles": "Laad twee ondertitels" + "Merge": "_Samenvoegen" }, "SplitSubtitle": { "Title": "Ondertitel splitsen", "NumberOfEqualParts": "Aantal gelijke delen", "SaveSplitParts": "Gesplitste delen op_slaan", - "SubtitleSplitIntoXParts": "Ondertitel opgedeeld in {0} delen.", "XPartsSavedInFormatYToFolder": "{0} delen opgeslagen in formaat {1} in map:" }, "SplitBreakLongLines": { @@ -2305,19 +2374,17 @@ "ColumnMerge": "Samenvoegen", "ColumnFirst": "Eerste rij", "ColumnSecond": "Tweede rij", - "ColumnMerged": "Samengevoegd", - "SelectAll": "Alles selecteren", - "InverseSelection": "Selectie omkeren" + "ColumnMerged": "Samengevoegd" }, "MergeLinesWithSameText": { - "Title": "Rijen met dezelfde tekst samenvoegen", "MaxMsBetweenLines": "Max. milliseconden tussen rijen", + "MaxFramesBetweenLines": "Max. frames tussen rijen", "IncludeIncrementingLines": "Rijen met oplopende tekst meenemen", "IncludeRollUpCaptions": "Roll-up-ondertitels (scrollend) meenemen" }, "MergeLinesWithSameTimeCodes": { - "Title": "Rijen met dezelfde tijdcodes samenvoegen", "MaxMsDifference": "Max. verschil (milliseconden)", + "MaxFramesDifference": "Max. verschil (frames)", "MakeDialog": "Dialogen maken" }, "NetflixCheckAndFix": { @@ -2340,7 +2407,6 @@ "ShotChanges": "Shot-wijzigingen", "StartNumberSpellOut": "Getal aan het begin voluit schrijven", "TextforHiUseBrackets": "Tekst voor slechthorenden, rechte haken gebruiken", - "FrameRate": "Framerate", "TwoFrameGrap": "Tussenruimte van twee frames", "WhiteSpace": "Witruimte", "ChildrensProgram": "Kinderprogramma", @@ -2378,7 +2444,6 @@ "ItalicsFixed": "Cursief gecorrigeerd", "ItalicsNotAllowed": "Cursief niet toegestaan", "BridgeGapsXToYFrames": "Tussenruimte van 3-{0} frames => tussenruimte van 2 frames", - "StartNumberSpellOutComment": "Wanneer een getal een zin begint, moet het altijd voluit worden geschreven", "MaximumXCharactersPerSecond": "Maximaal {0} tekens per seconde" }, "ImageBasedEdit": { @@ -2388,10 +2453,8 @@ "ResizeImagesDotDotDot": "Formaat van afbeeldingen wijzigen...", "AdjustBrightnessDotDotDot": "Helderheid aanpassen...", "AdjustAlphaDotDotDot": "Alfa aanpassen...", - "CenterHorizontally": "Horizontaal centreren", "CropImages": "Afbeeldingen bijsnijden", "ImportTimeCodes": "Tijdcodes importeren...", - "SetTextForSubtitle": "Tekst voor ondertitel instellen", "ScreenWidth": "Schermbreedte", "ScreenHeight": "Schermhoogte", "AlphaThresholdInfo": "Pixels met een alfa onder de drempel worden volledig transparant", @@ -2436,10 +2499,16 @@ "XInTopBar": "{0} in bovenbalk", "XInBottomBar": "{0} in onderbalk", "NoImageSubtitlesLoaded": "Geen op afbeeldingen gebaseerde ondertitels geladen", - "ImageBasedFormatNotSupported": "Op afbeeldingen gebaseerd ondertitelformaat niet gevonden/ondersteund." + "ImageBasedFormatNotSupported": "Op afbeeldingen gebaseerd ondertitelformaat niet gevonden/ondersteund.", + "FrameRateDeclaredInFile": "Framerate opgegeven in het Blu-ray sup-bestand", + "FrameRateDetectedFromTimeCodesX": "Framerate gedetecteerd uit de Blu-ray sup-tijdcodes (het bestand geeft {0} op)", + "FrameRateFromVideo": "Framerate van de video", + "FrameRateCurrent": "Huidige framerate", + "FrameRateSetManually": "Framerate handmatig ingesteld", + "FrameRateUsageInfo": "Blu-ray sup-, BDN XML-, DOST- en FCP-exports worden met deze framerate geschreven. Het wijzigt geen tijden - gebruik daarvoor \"Framerate wijzigen\".", + "UseVideoFrameRateXInsteadOfY": "De framerate van de video is {0}, maar de ondertitel is ingesteld op {1}.\n\nDe framerate van de video ({0}) gebruiken?" }, "RemoveTextForHearingImpaired": { - "Title": "Tekst voor slechthorenden verwijderen", "Interjections": "Tussenwerpsels", "SkipIfStartWith": "Overslaan indien beginnend met", "RemoveTextBetween": "Tekst verwijderen tussen", @@ -2501,7 +2570,21 @@ "CorrectWordsX": "Correcte woorden: {0}", "NamesX": "Namen: {0}", "AddedToDictionaryX": "Toegevoegd aan woordenboek: {0}", - "DoNotShowThisAgain": "Dit bericht niet meer tonen" + "DoNotShowThisAgain": "Dit bericht niet meer tonen", + "EditUseAlwaysList": "Lijst \"Altijd gebruiken\" bewerken...", + "UseAlwaysListTitle": "Spellingcontrole - lijst \"Altijd gebruiken\"", + "UseAlwaysListHeader": "Lijst \"Altijd gebruiken\"", + "UseAlwaysListDescription": "Woorden die de spellingcontrole automatisch vervangt, opgeslagen via \"Alles wijzigen\" en \"Altijd gebruiken\". Een paar wordt alleen gebruikt als het woord verkeerd gespeld is.", + "UseAlwaysWord": "Verkeerd gespeld woord", + "XPairs": "{0:#,##0} paren", + "XUnusedPairs": "{0:#,##0} nooit gebruikt", + "UseAlwaysUnusedHint": "Nooit gebruikt - dit woord is correct gespeld (of is een naam of gebruikerswoord), dus de spellingcontrole markeert het nooit", + "RemoveUnused": "Ongebruikte verwijderen", + "UseAlwaysEmpty": "Nog geen \"Altijd gebruiken\"-paren voor deze taal", + "UseAlwaysEmptyHint": "Paren worden toegevoegd wanneer u in de spellingcontrole op \"Alles wijzigen\" of \"Altijd gebruiken\" klikt.", + "UseAlwaysNoMatch": "Geen paren komen overeen met de zoekopdracht", + "UseAlwaysSameWord": "De vervanging moet verschillen van het woord.", + "UseAlwaysRememberOff": "\"Lijst 'Altijd gebruiken' onthouden\" is uitgeschakeld in Instellingen, dus de spellingcontrole gebruikt deze lijst niet en slaat hem niet op." }, "Video": { "Chapters": { @@ -2532,7 +2615,6 @@ "ScaleTimesDescription": "Schaal elke hoofdstuktijd van de ene framerate naar de andere.", "FromFrameRate": "Van", "ToFrameRate": "Naar", - "Apply": "Toepassen", "WriteToVideo": "Naar video schrijven...", "WriteToVideoTitle": "Hoofdstukken naar video schrijven", "WriteToVideoDescription": "De hoofdstukken worden in een kopie van het videobestand geschreven. Er wordt niets opnieuw gecodeerd, dus dit gaat snel en zonder kwaliteitsverlies.", @@ -2542,7 +2624,6 @@ "WrittenToX": "Hoofdstukken geschreven naar {0}", "UnableToWriteChapters": "Kan de hoofdstukken niet naar het videobestand schrijven.", "ChaptersSavedToX": "Hoofdstukken opgeslagen in {0}", - "NoVideoLoaded": "Geen video geladen", "EmptyListCallToAction": "Nog geen hoofdstukken - voeg er een toe op de videopositie, of importeer ze uit een video of bestand." }, "GoToVideoPosition": "Ga naar videopositie", @@ -2575,6 +2656,13 @@ "RemuxVideoFailed": "Video remuxen mislukt.", "RemuxVideoPleaseSelectBoth": "Selecteer zowel een video- als een audiobestand.", "RemuxVideoAssRequiresMkv": "ASS/SSA-ondertitels vereisen de MKV-container om alle opmaak en stijlen te behouden.", + "RemuxVideoSccRequiresMov": "Scenarist (.scc)-ondertitels worden ingesloten als CEA-608 closed captions, die de MOV- of MPG-container vereisen. Het uitvoerformaat is automatisch gewijzigd in .mov.", + "RemuxVideoSccNotWithWebM": "Scenarist (.scc) closed captions vereisen de MOV-container, die de VP9/AV1-video van een .webm-bestand niet kan bevatten. Verwijder het .scc-bestand of converteer het naar een ander ondertitelformaat.", + "RemuxVideoMpgMaxTwoCaptionTracks": "Een .mpg-bestand bevat maximaal twee closed-caption-sporen (CC1 en CC3) - verwijder ondertitelbestanden zodat er een of twee overblijven.", + "RemuxVideoMccRequiresMpg": "MacCaption (.mcc)-ondertitels worden ingesloten als CEA-608/708 closed captions in de MPEG-2-video, wat de MPG-container vereist. Het uitvoerformaat is automatisch gewijzigd in .mpg.", + "RemuxVideoMpgReencodeVideoX": "Closed captions in een .mpg-bestand vereisen MPEG-2-video, en de video is {0}. De video opnieuw coderen naar MPEG-2? Dit duurt langer en verlaagt de kwaliteit een beetje.", + "RemuxVideoFileHasNoAudioX": "\"{0}\" heeft geen audiospoor en kan dus niet als audiobron worden gebruikt.", + "RemuxVideoAddingClosedCaptions": "Closed captions toevoegen...", "RemuxVideoSelectAudioTrack": "Audiospoor selecteren", "RemuxVideoSelectAudioTrackFor": "Audiospoor selecteren voor {0}", "RemuxVideoSelectAudioTrackPrompt": "Het bestand '{0}' bevat {1} audiosporen. Selecteer het audiospoor om te remuxen:", @@ -2587,19 +2675,14 @@ "RemuxVideoMixAudio": "Audio mixen tot één spoor", "RemuxVideoVolumePercent": "Volume %:", "RemuxVideoVolumeX": "Volume {0}%", + "RemuxVideoFastStart": "Optimaliseren voor webstreaming (index naar voren verplaatsen - langzamer)", "EmbedSubtitlesDotDotDot": "Ingesloten ondertitels toevoegen/verwijderen...", "GenerateTimeCodes": "Tijdcodes genereren", "CheckeredImage": "Geblokte afbeelding", - "SaveVideoAsTitle": "Video opslaan als", "PromptForFfmpegParamsAndGenerate": "Om ffmpeg-parameters vragen en genereren", "CutVideoCutSegments": "Segmenten knippen", "CutVideoMergeSegments": "Segmenten samenvoegen", "CutVideoSplitSegments": "Segmenten afzonderlijk opslaan", - "CutVideoType": "Kniptype", - "MpvRenderAuto": "Auto", - "MpvRenderNative": "Systeemeigen", - "MpvRenderOpenGl": "OpenGL", - "MpvRenderSoftware": "Software (traag)", "CutVideoAlsoCutSubtitle": "Ook ondertitel knippen", "CutVideoSubtitleFileGeneratedX": "Ondertitelbestand gegenereerd: {0}", "CutVideoTransition": "Overgang tussen segmenten", @@ -2634,7 +2717,6 @@ "AddRemoveEmbeddedSubtitlesTitle": "Ingesloten ondertitels toevoegen/verwijderen", "AddRemoveEmbeddedSubtitlesMp4Title": "Ingesloten ondertitels toevoegen/verwijderen (MP4)", "AddCurrentSubtitle": "Huidige ondertitel toevoegen", - "EmbeddedTrackColumnNew": "Nieuw", "EmbeddedTrackNoSubtitlesFoundTitle": "Geen ondertitels gevonden", "EmbeddedTrackNoSubtitlesFoundMessage": "Het geselecteerde ondertitelbestand bevat geen ondertitels.", "EmbeddedTrackNoTracksTitle": "Geen tracks toegevoegd", @@ -2647,7 +2729,6 @@ "EmbeddedTrackGeneratingVideo": "Video genereren...", "Mp4FilesFilter": "MP4-bestanden", "EmbeddedTracksPickVideoHint": "Kies een videobestand, of sleep er een hierheen, om de ondertitelsporen te zien.", - "TitleOrLanguage": "Titel/taal", "ViewMatroskaTrackX": "Matroska-spoor tonen - {0}", "ResolutionSeparator": "x", "OpenFromUrlTitle": "Videobestand openen vanaf URL", @@ -2657,9 +2738,7 @@ "OpenFromUrlDownloadAndOpen": "Downloaden en openen", "OpenFromUrlDownloadAndOpenDescription": "De video lokaal opslaan en daarna openen.", "OpenFromUrlDownloadAndOpenNote": "Vereist voor spraak-naar-tekst en golfvormpieken.", - "OpenFromUrlMissing": "Voer eerst een video-URL in.", "OpenFromUrlDownloadingTitle": "Video downloaden", - "OpenFromUrlSaveAs": "Video opslaan als", "OpenFromUrlDownloadSubtitles": "Ook ondertitels downloaden", "OpenFromUrlDownloadVideo": "Video downloaden", "OpenFromUrlIncludeAutoGeneratedSubtitles": "Automatisch gegenereerde ondertitels meenemen (originele taal)", @@ -2696,59 +2775,38 @@ "ReEncodeGeneratingDone": "Genereren voltooid", "ReEncodeGeneratedFilesX": "Gegenereerde bestanden ({0}):", "ReEncodeFfmpegParameters": "ffmpeg-parameters", + "AnalyzingVideoX": "Video analyseren... {0}% {1}", + "AnalyzingVideoXofY": "Video {0}/{1} analyseren... {2}% {3}", + "BackgroundImageFileNotSelected": "Geen achtergrondafbeelding geselecteerd", + "BackgroundImageFileDoesNotExistX": "Achtergrondafbeelding bestaat niet: {0}", "BurnIn": { "Title": "Video genereren met ingebrande ondertitels", - "InfoAssaOff": "Let op: opmaak met Advanced SubStation Alpha wordt ondersteund.", - "InfoAssaOn": "Let op: opmaak met Advanced SubStation Alpha wordt gebruikt :)", - "XGeneratedWithBurnedInSubsInX": "\"{0}\" gegenereerd met ingebrande ondertitel in {1}.", - "TimeRemainingMinutes": "Resterende tijd: {0} minuten", - "TimeRemainingOneMinute": "Resterende tijd: één minuut", - "TimeRemainingSeconds": "Resterende tijd: {0} seconden", - "TimeRemainingAFewSeconds": "Resterende tijd: enkele seconden", - "TimeRemainingMinutesAndSeconds": "Resterende tijd: {0} minuten en {1} seconden", - "TimeRemainingOneMinuteAndSeconds": "Resterende tijd: één minuut en {0} seconden", - "TargetFileName": "Doelbestandsnaam: {0}", "TargetFileSize": "Doelbestandsgrootte (vereist codering in 2 passes)", "FileSizeMb": "Bestandsgrootte in MB", "MatchSourceVideoSize": "Grootte van bronvideo overnemen", - "PassX": "Pass {0}", - "Encoding": "Codering", "BitRate": "Bitsnelheid", "TotalBitRateX": "Totale bitrate: {0}", "SampleRate": "Samplefrequentie", "Audio": "Audio", - "Stereo": "Stereo", "Preset": "Voorinstelling", "Tune": "Afstemming", "PixelFormat": "Pixelformaat", "Crf": "CRF", - "TuneFor": "Afstemmen op", - "AlignRight": "Rechts uitlijnen", - "GetStartPosition": "Beginpositie ophalen", - "GetEndPosition": "Eindpositie ophalen", "UseSource": "Bron gebruiken", - "UseSourceFolder": "Bronmap gebruiken", - "UseSourceResolution": "Bronresolutie gebruiken", - "OutputSettings": "Uitvoerbestand/-map...", "FontSizeFactor": "Factor tekengrootte", "BoxType": "Kadertype", - "FixRightToLeft": "Rechts-naar-links herstellen", - "Cut": "Knippen", "FromTime": "Van tijd", "ToTime": "Tot tijd", "AudioEncoding": "Audiocodering", "OutputProperties": "Uitvoereigenschappen...", "VideoFileSize": "Grootte videobestand", "OneBox": "Eén kader", - "BoxPerLine": "Kader per regel", "LogoInfo": "Kies een PNG-afbeelding en sleep deze om hem op de video te positioneren.", "NoSubtitlesGenerateAnyway": "Er zijn geen ondertitels om in te branden.\n\nDe video zonder ondertitels genereren?", "NoSubtitlesInXItemsGenerateAnyway": "{0} batch-item(s) hebben geen ondertitels om in te branden.\n\nDie video's zonder ondertitels genereren?" }, "VideoTransparent": { - "Title": "Transparante video met ondertitels genereren", - "InfoAssaOff": "Let op: opmaak met Advanced SubStation Alpha wordt ondersteund.", - "InfoAssaOn": "Let op: opmaak met Advanced SubStation Alpha wordt gebruikt :)" + "Title": "Transparante video met ondertitels genereren" }, "AudioToText": { "Title": "Spraak naar tekst", @@ -2756,10 +2814,21 @@ "TranslateToEnglish": "Naar het Engels vertalen", "Transcribing": "Transcriberen...", "TranscribingXOfY": "Transcriberen {0} van {1}...", + "LinesTranscribedXOfYFailedZ": "{0} van {1} rijen zijn getranscribeerd - {2} zijn mislukt of bevatten geen spraak.\n\nMislukte rijen behouden hun huidige tekst. De getranscribeerde rijen toepassen, of de mislukte opnieuw proberen (u kunt eerst de engine of instellingen wijzigen)?", + "LinesTranscribedXOfYCancelled": "Transcriptie is geannuleerd na {0} van {1} rijen.\n\nDe getranscribeerde rijen toepassen? De andere rijen behouden hun huidige tekst.", + "NoLinesTranscribed": "Geen van de {0} rijen kon worden getranscribeerd.\nControleer het hulpprogrammalogboek voor details.", + "ApplyTranscribedLines": "Getranscribeerde toepassen", + "RetryFailedLines": "Mislukte opnieuw proberen", "IsolateSpeech": "Spraak isoleren (traag)", "IsolateSpeechHint": "Verwijdert muziek en geluidseffecten vóór het transcriberen. Geeft minder gemiste rijen en betere timing bij audio met luide muziek, maar duurt met een GPU ongeveer zo lang als de audio zelf - en zonder GPU vele malen langer.", "IsolatingSpeech": "Spraak isoleren...", "IsolateSpeechFailed": "Kan de spraak niet isoleren - in plaats daarvan wordt de originele audio getranscribeerd.", + "DetectSpeakers": "Sprekers detecteren", + "DetectSpeakersHint": "Begint elke rij met de spreker, zoals \"(speaker 0)\", met behulp van NVIDIA's Sortformer-diarisatie (tot 8 sprekers). Werkt het best met backends die rijen splitsen waar de spreker wisselt, zoals Parakeet en Cohere.", + "DetectSpeakersNeedsNewerCrispAsr": "\"Sprekers detecteren\" vereist Crisp ASR v{0} of nieuwer, maar v{1} is geïnstalleerd.\n\nWerk Crisp ASR bij (de tandwielknop naast de engine) of schakel \"Sprekers detecteren\" uit.", + "XNeedsNewerCrispAsr": "{0} vereist Crisp ASR v{1} of nieuwer, maar v{2} is geïnstalleerd.\n\nDe update nu downloaden en installeren?", + "Vad": "VAD", + "VadHint": "Spraakactiviteitsdetectie: alleen de spraak wordt getranscribeerd, geknipt waar de spreker pauzeert.\nAuto: Silero, en alleen voor de engines die het nodig hebben (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: altijd aan, voor elke Crisp ASR-engine. FireRedVAD is het nauwkeurigst, Whisper-VAD geeft de minste, schoonste knippen maar is het traagst.\nIndex-Echo gebruikt altijd Silero. --vad, --vad-model of --chunk-seconds in de geavanceerde instellingen hebben voorrang.", "InputLanguage": "Invoertaal", "AdvancedWhisperSettings": "Geavanceerde parameters voor spraak naar tekst", "DownloadingSpeechToTextEngine": "Spraak-naar-tekst-engine downloaden", @@ -2774,8 +2843,6 @@ "AddCustomModelDotDotDot": "Aangepast model toevoegen...", "CustomModelHelp": "U kunt uw eigen model gebruiken: kies het modelbestand (whisper.cpp ggml '.bin') of de modelmap (faster-whisper-map met een 'model.bin' erin). Het wordt naar de modellenmap gekopieerd en aan de lijst hierboven toegevoegd.", "ViewToolsLogFile": "Logbestand van gereedschappen bekijken", - "ReDownloadX": "{0} opnieuw downloaden", - "DownloadX": "{0} downloaden", "UpdateXTitle": "{0} bijwerken?", "UpdateXMessage": "Er is een nieuwere versie van {0} beschikbaar.{1}{1}De update nu downloaden en installeren?", "DownloadingSpeechToTextModel": "Model voor spraak naar tekst downloaden", @@ -2846,7 +2913,6 @@ "CloneVoicePerLineNeedsVideo": "Om de stem van elke rij te klonen is de video nodig waar de ondertitel bij hoort. Open de video en probeer het opnieuw.", "CloneVoicePerLineNoClips": "Er kon geen audio uit de video worden gehaald, dus er is niets om van te klonen. Controleer of de video een audiospoor heeft.", "CloneVoicePerLineTranscribeClipsXYZ": "{0} kan een rij alleen klonen als bekend is wat er in de video op die rij wordt gezegd. Dat is niet bekend voor {1} van {2} rijen - normaal komt het uit de ondertitel in de originele taal (Bestand > Origineel openen...).\n\nDie rijen nu uit de video transcriberen met spraak-naar-tekst?\n\nJa: kies de engine en de taal die in de video wordt gesproken; de referentieclips worden getranscribeerd voordat de spraak wordt gegenereerd.\nNee: toch genereren - die rijen worden uitgesproken door een gewone stem in plaats van de stem in de video.", - "CloneVoicePerLineNeedsOriginalSubtitleX": "{0} kan een rij alleen klonen als bekend is wat er in de video op die rij wordt gezegd, en dat komt uit de ondertitel in de originele taal. Er is geen originele ondertitel geladen, dus elke rij zou worden uitgesproken door de eerste geïmporteerde stem in plaats van door de stem in de video.\n\nOpen de originele ondertitel (Bestand > Origineel openen...) naast de vertaling en genereer opnieuw.", "VoiceCloneConsentTitle": "Stem klonen - voordat u begint", "VoiceCloneConsentHeader": "U staat op het punt een stem te klonen", "VoiceCloneConsentIntro": "Bij klonen wordt de stem van een echt persoon gekopieerd. Daar gelden vrijwel overal regels voor, en in de EU wettelijke verplichtingen die op u rusten, niet op Subtitle Edit. Lees dit één keer door.", @@ -2862,6 +2928,12 @@ "VoiceCloneConsentDeclined": "Stemklonen is niet beschikbaar totdat deze voorwaarden zijn geaccepteerd.", "AdvancedTtsAudioProcessing": "Audioverwerking", "AdvancedTtsOutput": "Uitvoer", + "AdvancedTtsVoiceCloning": "Stemklonen", + "CleanCloneReferences": "Stemkloonreferenties opschonen (Sidon)", + "CleanCloneReferencesDescription": "Verwijdert muziek, ruis en galm uit de audio waarvan een stem wordt gekloond: fragmenten uit de video en opnamen die in de stembeheerder zijn geïmporteerd. Gebruikt het Sidon-spraakherstelmodel op audio.cpp (download van 940 MB). De gekloonde stem kopieert de achtergrond niet meer, maar zeer zachte of overlappende spraak kan gedempt klinken.", + "CleaningCloneReferencesDotDotDot": "Stemkloonreferenties opschonen...", + "DownloadSidonTitle": "Sidon downloaden?", + "DownloadSidonQuestionX": "Voor het opschonen van stemkloonreferenties is het Sidon-spraakherstelmodel ({0}) nodig.\n\nNu downloaden? Zonder dit model worden de referenties gebruikt zoals ze zijn.", "RubberbandInstalled": "(geïnstalleerd)", "RubberbandNotFound": "(niet gevonden in FFmpeg)", "GenerationFolder": "Generatiemap", @@ -2870,14 +2942,11 @@ "DeleteTempFilesDescription": "Verwijdert de generatiemap wanneer het venster Tekst naar spraak wordt gesloten. Opgeslagen audio- en videobestanden blijven behouden.", "PiperSettings": "Piper-instellingen", "Title": "Tekst naar spraak", - "TextToSpeechEngine": "Engine voor tekst naar spraak", "ReviewAudioSegments": "TTS - audiosegmenten beoordelen", "ReviewAudioSegmentsHistory": "TTS - audiogeschiedenis beoordelen", "Stability": "Stabiliteit", "Similarity": "Gelijkenis", "SpeakerBoost": "Sprekerversterking", - "StyleExaggeration": "Stijloverdrijving", - "RegenerateAudioSelectedLine": "Audio voor geselecteerde rij opnieuw genereren", "GenerateSpeechFromText": "Spraak uit tekst genereren", "TestVoice": "Stem testen", "AddAudioToVideoFile": "Audio aan videobestand toevoegen", @@ -2907,6 +2976,8 @@ "Instructions": "Instructies", "InstructionsHint": "Optionele spreekstijl, bijv. \"Spreek met een rustige, warme stem\". Alleen verzonden naar modellen die dit ondersteunen (niet tts-1/tts-1-hd)", "OpenAiSpeedHint": "Spreeksnelheid van 0,25 tot 4,0 (1,0 is normaal). Niet elk model ondersteunt dit", + "OutputFormat": "Uitvoerformaat", + "OutputFormatHint": "Audioformaat dat bij de server wordt aangevraagd. \"Auto\" vraagt om MP3 en schakelt over naar PCM voor modellen die alleen PCM teruggeven (bijv. Gemini TTS)", "RegenerateAudio": "Audio opnieuw genereren", "AutoContinuePlaying": "Automatisch doorgaan met afspelen", "AddingAudioToVideoFileDotDotDot": "Audio aan videobestand toevoegen...", @@ -2927,6 +2998,17 @@ "VoiceManagerTitle": "TTS - Stembeheer", "VoiceManagerDotDotDot": "Stembeheer...", "VoiceManagerMenuItem": "TTS-stembeheer...", + "SpeakFromCurrentLineTitle": "Voorlezen vanaf huidige rij", + "SpeakFromCurrentLineDotDotDot": "Voorlezen vanaf huidige rij...", + "SpeakFromCurrentLineHint": "Leest de rijen een voor een voor, beginnend bij de huidige rij. Druk op Escape of klik op een andere rij om te stoppen.", + "StopSpeaking": "Voorlezen stoppen", + "SpeakingLineX": "Rij {0} voorlezen... (Escape om te stoppen)", + "PlayWithSpeechTitle": "Afspelen met spraak", + "PlayWithSpeechDotDotDot": "Afspelen met spraak...", + "PlayWithSpeechHint": "Speelt de video af en spreekt elke rij uit wanneer de video die bereikt. Pauzeer en zoek zoals gewoonlijk; druk op Escape om te stoppen.", + "LowerVideoVolumeWhileSpeaking": "Videovolume verlagen tijdens spreken", + "PauseVideoWhenSpeechRunsLate": "Video pauzeren als spraak doorloopt in de volgende rij", + "WaitingForSpeechLineX": "Spraak genereren voor rij {0}... (Escape om te stoppen)", "VoiceKindClone": "Gekloonde stem", "VoiceKindPreset": "Ingebouwd", "VoiceKindModel": "Stemmodel", @@ -2960,12 +3042,21 @@ "AdvancedTtsSettings": "Geavanceerde TTS-instellingen", "ProAudioPostProcessing": "Professionele audionabewerking", "ProAudioPostProcessingDescription": "Past EQ-warmte, ruispoort, compressie, luidheidsnormalisatie (-16 LUFS) en in-/uitfaden toe op elk segment.", + "GeneratingSpeechSegmentXOfY": "Spraak genereren: segment {0} van {1}", + "AdjustingSpeedSegmentXOfY": "Snelheid aanpassen: segment {0} van {1}", + "MergingAudioSegmentXOfY": "Audio samenvoegen: segment {0} van {1}", + "PostProcessingSegmentXOfY": "Nabewerking: segment {0} van {1}", "AudioDucking": "Audio dimmen (ducking)", "AudioDuckingDescription": "Verlaagt het volume van de oorspronkelijke video-audio en mengt deze met de TTS-audio, zodat de originele geluidsband nog zwak hoorbaar blijft.", "RemoveOriginalSpeech": "Originele spraak verwijderen (traag)", "RemoveOriginalSpeechDescription": "Behoudt de muziek en geluidseffecten van de originele video maar verwijdert de spraak, en mixt de nieuwe spraak daaroverheen. Duurt met een GPU ongeveer zo lang als de video zelf, en zonder GPU vele malen langer. Met audio-ducking aan geldt het volume voor de muziek en effecten. Alleen van toepassing als de spraak aan het videobestand wordt toegevoegd.", "RemovingOriginalSpeech": "Originele spraak verwijderen...", "RemoveOriginalSpeechFailed": "Kan de originele spraak niet verwijderen - de spraak is zonder deze stap aan de video toegevoegd.", + "SpeechRemovalModel": "Model", + "SpeechRemovalModelDescription": "Beste kwaliteit behoudt het meeste van de muziek en geluidseffecten. Snel is ongeveer drie keer zo snel, waarbij iets meer van de muziek verloren gaat.", + "SpeechRemovalBestQuality": "Beste kwaliteit (Mel-Band RoFormer)", + "SpeechRemovalFast": "Snel (HTDemucs)", + "VideoTruncatedWarning": "Het beeld in het nieuwe videobestand stopt na {0}, maar de originele video duurt {1} - het beeld bevriest terwijl het geluid doorgaat.\n\nHet bestand is bewaard. Zie error-log.txt in de gegevensmap van Subtitle Edit voor de uitvoer van ffmpeg.", "OriginalVolumePercent": "Oorspronkelijk volume %", "VadSilenceCompression": "VAD-stiltecompressie", "VadSilenceCompressionDescription": "Verkort pauzes tussen woorden voordat het tempo wordt gewijzigd. Gebruikt Voice Activity Detection om alleen stiltes samen te persen en laat spraak ongemoeid. Dit is de aanbevolen eerste stap — de duur wordt korter zonder kwaliteitsverlies.", @@ -3032,7 +3123,6 @@ "SubtitleMergedLinesAppliedPlural": "{0} samenvoegingen van rijen toegepast vanuit tekst naar spraak" }, "ShotChanges": { - "TitleGenerateOrImport": "Shot-wijzigingen genereren/importeren", "GenerateShotChanges": "Shot-wijzigingen genereren", "ImportShotChanges": "Shot-wijzigingen importeren", "GenerateShotChangesWithFfmpeg": "Shot-wijzigingen genereren met ffmpeg", @@ -3042,7 +3132,9 @@ "TimeCodeFormatColon": "Tijdcodeformaat:", "ShotChangesList": "Lijst met shot-wijzigingen", "ShotChangesClearQuestion": "Weet u zeker dat u alle shot-wijzigingen wilt wissen?", - "DeleteSelectedShotChangeQuestion": "Weet u zeker dat u de geselecteerde shot-wijziging wilt verwijderen?" + "DeleteSelectedShotChangeQuestion": "Weet u zeker dat u de geselecteerde shot-wijziging wilt verwijderen?", + "ShotChanges": "Shot-wijzigingen", + "ExportShotChanges": "Shot-wijzigingen exporteren" }, "VideoOcr": { "Title": "OCR op ingebrande ondertitel", @@ -3052,10 +3144,6 @@ "BottomHalf": "Onderste helft", "FullFrame": "Volledig beeld", "Engine": "OCR-engine", - "Language": "Taal", - "Url": "URL", - "Model": "Model", - "ApiKey": "API-sleutel", "Scan": "Scannen", "FramesPerSecond": "Frames per seconde", "TextBrightnessMinimum": "Minimale teksthelderheid (0=uit)", @@ -3070,10 +3158,10 @@ "RunningOcrXY": "OCR uitvoeren... {0}/{1}", "NoLinesFoundTitle": "Geen ondertitels gevonden", "NoLinesFoundMessage": "Er is geen tekst gevonden in het scangebied - probeer het scangebied, de engine of de minimale helderheid aan te passen.", + "OcrStoppedEarlyMessage": "De OCR-engine is gestopt voordat alle frames waren gelezen, dus de tot nu toe gevonden rijen blijven behouden en de rest ontbreekt.{0}{0}{1}", "LinesFoundX": "{0} rijen gevonden", "RefiningTimingXY": "Timing verfijnen... {0}/{1}", "FixOcrErrors": "OCR-fouten herstellen", - "Dictionary": "Woordenboek", "EditLineX": "Rij {0} bewerken", "DownloadDictionaryHint": "Een woordenboek voor spellingcontrole downloaden...", "FramesPerSecondHint": "Hoeveel frames per seconde worden gescand. 5 volstaat voor normale ondertitels; hoger vangt zeer korte rijen op en verscherpt de groepering, maar kost meer OCR-tijd.", @@ -3148,7 +3236,6 @@ "TalkerX": "Spreker {0}", "BaseModel": "Basismodel", "TurboModel": "Turbomodel", - "TtsUpdateX": "{0} bijwerken", "TtsEngineNotInstalled": "{0} niet geïnstalleerd", "TtsEngineUpdateAvailable": "{0} - update beschikbaar", "TtsEngineTooOldUpdateRequired": "{0} te oud - update vereist", @@ -3185,13 +3272,11 @@ "ShowOnlyWaveform": "Alleen golfvorm tonen", "ShowOnlySpectrogram": "Alleen spectrogram tonen", "ShowWaveformAndSpectrogram": "Golfvorm en spectrogram tonen", - "SpectrogramClassic": "Klassiek", "SpectrogramClassicViridis": "Viridis", "SpectrogramClassicPlasma": "Plasma", "SpectrogramClassicInferno": "Inferno", "SpectrogramClassicTurbo": "Turbo", "SpectrogramNeon": "Neon", - "WaveformDrawStyleClassic": "Klassiek", "WaveformDrawStyleFancy": "Fancy", "SetVideoPositionAndPauseAndSelectSubtitle": "Videopositie instellen, pauzeren en ondertitel selecteren", "SetVideopositionAndPauseAndSelectSubtitleAndCenter": "Videopositie instellen, pauzeren, ondertitel selecteren en centreren", @@ -3201,7 +3286,6 @@ }, "Sync": { "VisualSync": "Visueel synchroniseren", - "Sync": "Synchroniseren", "StartScene": "Beginscène", "EndScene": "Eindscène", "PlayTwoSecondsAndBack": "2 sec. afspelen en terug", @@ -3221,16 +3305,14 @@ "AdjustAllTimes": "Alle tijden aanpassen (eerder/later tonen)", "ShowEarlier": "Eerder tonen", "ShowLater": "Later tonen", - "ChangeFrameRate": "Framerate wijzigen", "SetSyncPoint": "Synchronisatiepunt instellen", "SetSyncPointViaVideo": "Synchronisatiepunt instellen via video...", "SyncPointTimeCode": "Tijdcode van synchronisatiepunt", "SyncPoints": "Synchronisatiepunten", "PointSync": "Puntsynchronisatie", "PointSyncViaOther": "Puntsynchronisatie via andere ondertitel", - "AdjustmentX": "Aanpassing: {0}", - "TotalAdjustmentX": "Totale aanpassing: {0}", - "SyncPointCandidateInfo": "Rijen die na {0}+ seconden stilte beginnen, worden gemarkeerd - die vormen vaak betrouwbare synchronisatiepunten", + "SyncPointCandidateAfterInfo": "Rijen gevolgd door {0}+ seconden stilte worden gemarkeerd - ze zijn vaak betrouwbare synchronisatiepunten", + "GapAfter": "Tussenruimte erna", "AdjustAllShortcuts": "Sneltoetsen:\r\n\r\n• Shift + links/rechts: 10 ms verplaatsen\r\n• Ctrl + links/rechts: 100 ms verplaatsen\r\n• Alt + links/rechts: 500 ms verplaatsen", "AdjustAllShortcutsFrames": "Sneltoetsen:\r\n\r\n• Shift + links/rechts: 1 frame verplaatsen\r\n• Ctrl + links/rechts: 10 frames verplaatsen\r\n• Alt + links/rechts: 1 seconde verplaatsen", "OffsetInSeconds": "Verschuiving in seconden", @@ -3268,8 +3350,6 @@ "TranslationCancelled": "Vertaling geannuleerd", "SwapLanguages": "Bron- en doeltaal verwisselen", "XIsAlreadyDownloadedReDownload": "{0} is al gedownload. Opnieuw downloaden?", - "AdvancedDotDotDot": "Geavanceerd...", - "AdvancedSettings": "Geavanceerde instellingen", "AdvancedSettingsSubtitle": "Batch-, context- en sampling-opties voor de geavanceerde llama.cpp-engine", "Context": "Context", "Synopsis": "Synopsis", @@ -3320,14 +3400,6 @@ "WaveformSnapToShotChangeSameShotEndMaxSeconds": "Vastklikken op dichtstbijzijnde shot-wijziging: max. eindafstand wanneer begin en einde dezelfde cut delen (seconden)", "WaveformGuessStartOffsetMs": "Begintijd raden uit golfvorm: begin eerder plaatsen met (ms)", "WaveformGuessEndOffsetMs": "Eindtijd raden uit golfvorm: einde later plaatsen met (ms)", - "ShowToolbarMultipleReplace": "Pictogram meervoudig vervangen tonen", - "ShowToolbarPointSync": "Pictogram puntsynchronisatie tonen", - "ShowToolbarAutoTranslate": "Pictogram automatisch vertalen tonen", - "ShowToolbarSpeechToText": "Pictogram spraak naar tekst tonen", - "ShowToolbarStyleManager": "Pictogram stijlbeheer tonen (ASSA/SSA/WebVTT)", - "ShowToolbarProperties": "Pictogram eigenschappen tonen (ASSA/SSA)", - "ShowToolbarAttachments": "Pictogram bijlagen tonen (ASSA/SSA)", - "ShowToolbarAssaDraw": "Pictogram ASSA-tekenen tonen (ASSA)", "ProxyDomain": "Domein", "ProxyUseSystemCredentials": "Systeemreferenties gebruiken", "ProxyBypassList": "Proxy omzeilen voor", @@ -3339,8 +3411,14 @@ "CheckForUpdatesChannelStableAndBeta": "Stabiele en bètaversies", "AssaAutoSetResolution": "ASSA: resolutie (PlayResX/PlayResY) instellen op basis van de video wanneer een video wordt geopend", "AssaAutoSetResolutionPrompt": "ASSA: vragen voordat de resolutie wordt aangepast aan de video (anders automatisch herschalen)", + "VideoControls": "Videobediening", + "VideoControlsEdit": "Videobediening bewerken...", + "VideoControlsPositionText": "Tekst positie / duur", + "VideoControlsVideoFileName": "Bestandsnaam video", + "VideoControlsPlayerName": "Naam videospeler", "MergeKeepEndTime": "Rijen samenvoegen: eindtijd behouden (overlap met volgende ondertitel toestaan)", "MergeKeepEndTimeOnlyAssa": "Rijen samenvoegen: eindtijd alleen behouden voor \"Advanced Sub Station Alpha\"", + "MergeAutoBreak": "Rijen samenvoegen: samengevoegde tekst automatisch afbreken (uit behoudt de eigen regeleinden van de rijen)", "DefaultSaveLocation": "Standaard opslaglocatie", "DefaultSaveLocationSourceFileFolder": "Map van ondertitel-/videobestand", "DefaultSaveLocationLastUsedFolder": "Laatst gebruikte map", @@ -3359,7 +3437,6 @@ "DialogStyleDashBothLinesWithSpace": "Streepje op beide regels met spatie", "DialogStyleDashBothLinesWithoutSpace": "Streepje op beide regels zonder spatie", "ContinuationStyle": "Voortzettingsstijl", - "ContinuationStyleNone": "Geen", "ContinuationStyleNoneTrailingDots": "Geen, punten bij pauzes (alleen aan het einde)", "ContinuationStyleNoneLeadingTrailingDots": "Geen, punten bij pauzes", "ContinuationStyleNoneTrailingEllipsis": "Geen, beletselteken bij pauzes (alleen aan het einde)", @@ -3370,7 +3447,6 @@ "ContinuationStyleLeadingTrailingEllipsis": "Beletselteken", "ContinuationStyleLeadingTrailingDash": "Streepje", "ContinuationStyleLeadingTrailingDashDots": "Streepje, maar punten bij pauzes", - "ContinuationStyleCustom": "Aangepast", "CpsLineLengthStyle": "Kar/s / regellengte", "CpsLineLengthStyleCalcAll": "Alle tekens tellen", "CpsLineLengthStyleCalcNoSpaceCpsOnly": "Alles behalve spaties tellen, alleen Kar/s", @@ -3383,27 +3459,11 @@ "CpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly": "Geen spaties of leestekens, alleen Kar/s", "CpsLineLengthStyleCalcIgnoreArabicDiacritics": "Arabische diakritische tekens negeren", "CpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "Arabische diakritische tekens negeren, geen spaties", - "TimeCodeModeHhMmSsMs": "HH:MM:SS:MS", - "TimeCodeModeHhMmSsFf": "HH:MM:SS:FF", - "SplitBehaviorPrevious": "Tussenruimte links van het splitspunt toevoegen (focus rechts)", - "SplitBehaviorHalf": "Tussenruimte in het midden van het splitspunt toevoegen (focus links)", - "SplitBehaviorNext": "Tussenruimte rechts van het splitspunt toevoegen (focus links)", - "SubtitleListActionNothing": "Niets", - "SubtitleListActionVideoGoToPositionAndPause": "Naar videopositie gaan en pauzeren", - "SubtitleListActionVideoGoToPositionAndPlay": "Naar videopositie gaan en afspelen", "SubtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "Naar videopositie gaan, huidige afspelen en pauzeren", - "SubtitleListActionEditText": "Naar het tekstvak gaan", "SubtitleListActionVideoGoToPositionMinus1SecAndPause": "Naar videopositie - 1 s gaan en pauzeren", "SubtitleListActionVideoGoToPositionMinusHalfSecAndPause": "Naar videopositie - 0,5 s gaan en pauzeren", "SubtitleListActionVideoGoToPositionMinus1SecAndPlay": "Naar videopositie - 1 s gaan en afspelen", - "SubtitleListActionEditTextAndPause": "Naar het tekstvak gaan en pauzeren op de videopositie", - "AutoBackupEveryMinute": "Elke minuut", - "AutoBackupEveryXthMinute": "Om de {0} minuten", - "Profiles": "Profielen", - "AutoBackupDeleteAfterXMonths": "Automatische reservekopieën verwijderen na {0} maanden", "SearchSettingsDotDotDot": "Instellingen zoeken...", - "SyntaxColoring": "Syntax-kleuring", - "WaveformSpectrogram": "Golfvorm/spectrogram", "Network": "Netwerk", "FileTypeAssociations": "Bestandstypekoppelingen", "TextBoxColorTags": "Kleurtags (HTML/ASSA) in het ondertiteltekstvak", @@ -3436,8 +3496,6 @@ "DarkThemeForegroundColor": "Voorgrondkleur donker thema", "DarkThemeBackgroundColor": "Achtergrondkleur donker thema", "ShowGridLines": "Rasterlijnen tonen", - "ResetSettings": "Instellingen herstellen?", - "ResetSettingsDetail": "Hiermee worden alle instellingen op hun standaardwaarden teruggezet.\n\nDoorgaan?", "ShowHorizontalLineAboveToolbar": "Horizontale lijn boven de werkbalk tonen", "BookmarkColor": "Kleur van bladwijzer", "SpellCheckHighlightColor": "Markeringskleur spellingcontrole", @@ -3454,9 +3512,12 @@ "NewEmptyDefaultMs": "Standaardduur van nieuwe ondertitel (ms)", "TimeCodeUpDownStepMs": "Stapgrootte tijd omhoog/omlaag (ms)", "MoveSelectedLinesStepMs": "Stap voor sneltoets geselecteerde rijen verplaatsen (ms)", + "MoveStartEndStepMs": "Stapgrootte sneltoets begin/einde verplaatsen (ms)", "MoveLinesShortenNeighbor": "Rijen verplaatsen: vorige/volgende rij inkorten in plaats van te overlappen", "PromptBeforeDelete": "Bevestiging vragen vóór verwijderen", "RememberPositionAndSize": "Vensterpositie en -grootte onthouden", + "TitleBarFullFileName": "Volledig bestandspad in titelbalk tonen", + "ShowRecentFiles": "Recente bestanden tonen (om opnieuw te openen)", "OpenLastFileOnStart": "Laatst gebruikte bestand openen bij opstarten", "AutoSave": "Automatisch opslaan (het geopende bestand tijdens het bewerken opslaan)", "AutoBackupOn": "Automatische back-up", @@ -3479,23 +3540,13 @@ "ErrorBackgroundColor": "Achtergrondkleur bij fout", "WaveformDrawGridLines": "Rasterlijnen tekenen", "WaveformUseSkiaRenderer": "Experimentele snelle renderer gebruiken", - "WaveformCenterVideoPosition": "Videopositie centreren", "WaveformCenterVideoPositionAlsoWhenPaused": "Videopositie ook centreren tijdens pauze", + "WaveformSelectCurrentSubtitleWhilePaused": "Huidige ondertitel ook selecteren tijdens pauze", + "WaveformRememberZoom": "Zoom onthouden (horizontaal en verticaal)", "WaveformShowToolbar": "Werkbalk tonen", "WaveformShowToolbarEdit": "Werkbalk bewerken...", "WaveformShowToolbarEditLabel": "Werkbalkitems", "WaveformSpectrogramCombinedWaveformHeight": "Golfvorm/spectrogram gecombineerd, hoogte golfvorm %", - "ShowWaveformToolbarPlay": "Werkbalk: afspeelknop tonen", - "ShowWaveformToolbarRepeat": "Werkbalk: herhaalknop tonen", - "ShowWaveformToolbarRemoveBlankLines": "Werkbalk: knop voor lege rijen verwijderen tonen", - "ShowWaveformToolbarNew": "Werkbalk: knop voor nieuwe ondertitel tonen", - "ShowWaveformToolbarSetStart": "Werkbalk: knop voor begin instellen tonen", - "ShowWaveformToolbarSetEnd": "Werkbalk: knop voor einde instellen tonen", - "ShowWaveformToolbarStartAndOffsetTheRest": "Werkbalk: knop voor begin instellen en rest verschuiven tonen", - "ShowWaveformToolbarHorizontalZoom": "Werkbalk: horizontale zoomschuifregelaar tonen", - "ShowWaveformToolbarVerticalZoom": "Werkbalk: verticale zoomschuifregelaar tonen", - "ShowWaveformToolbarVideoPositionSlider": "Werkbalk: schuifregelaar voor videopositie tonen", - "ShowWaveformToolbarPlaybackSpeed": "Werkbalk: afspeelsnelheid tonen", "WaveformFocusTextboxAfterInsertNew": "Tekstvak focussen na invoegen", "WaveformInvertMouseWheel": "Muiswiel omkeren", "WaveformMouseWheelSetsVideoPosition": "Muiswiel stelt videopositie in", @@ -3514,27 +3565,8 @@ "WaveformSelectedColor": "Selectiekleur van golfvorm", "DownloadFfmpeg": "ffmpeg downloaden", "FixCommonErrorsSkipStep1": "Veelvoorkomende fouten corrigeren: stap 1 overslaan (correcties kiezen)", - "ShowToolbarNew": "Pictogram Nieuw tonen", - "ShowToolbarOpen": "Pictogram Openen tonen", - "ShowToolbarVideoFileOpen": "Pictogram Videobestand openen tonen", - "ShowToolbarSave": "Pictogram Opslaan tonen", - "ShowToolbarSaveAs": "Pictogram Opslaan als tonen", - "ShowToolbarFind": "Pictogram Zoeken tonen", - "ShowToolbarReplace": "Pictogram Vervangen tonen", - "ShowToolbarSpellCheck": "Pictogram Spellingcontrole tonen", - "ShowToolbarFixCommonErrors": "Pictogram Veelvoorkomende fouten herstellen tonen", - "ShowToolbarRemoveTextForHi": "Pictogram voor tekst voor slechthorenden verwijderen tonen", - "ShowToolbarVisualSync": "Pictogram voor visuele synchronisatie tonen", - "ShowToolbarBeautifyTimeCodes": "Pictogram voor tijdcodes verfraaien tonen", - "ShowToolbarBurnIn": "Pictogram voor inbranden tonen", - "ShowToolbarSettings": "Pictogram Instellingen tonen", - "ShowToolbarLayout": "Pictogram Indeling tonen", - "ShowToolbarHelp": "Pictogram Help tonen", - "ShowToolbarEncoding": "Codering tonen", - "ShowToolbarFrameRate": "Beeldsnelheid tonen", "ShowPluginsMenu": "Menu Plugins tonen", "ProxyAddress": "Proxyadres", - "Username": "Gebruikersnaam", "Password": "Wachtwoord", "DefaultFormat": "Standaardformaat", "DefaultSaveAsFormat": "Standaardformaat voor \"Opslaan als\"", @@ -3560,6 +3592,7 @@ "ShowAssaLayer": "ASSA-laagvak tonen", "WaveformCursorColor": "Kleur van golfvormcursor/-kop", "WaveformShotChangeColor": "Kleur shot-wijziging in golfvorm", + "WaveformGridColor": "Rasterkleur golfvorm", "WaveformParagraphLeftColor": "Kleur van linkerrand in golfvorm", "WaveformParagraphRightColor": "Kleur van rechterrand in golfvorm", "WaveformFancyHighColor": "Hoge kleur van golfvorm (Fancy)", @@ -3587,21 +3620,22 @@ "ResetSyntaxColoring": "Syntaxiskleuring herstellen", "ResetWaveform": "Golfvorm herstellen", "ResetRules": "Regels herstellen", - "UseFrameMode": "Framemodus gebruiken (hh.mm.ss.ff)", + "TimeCodeMode": "Tijdcodemodus", + "TimeCodeModeTime": "Tijd (hh:mm:ss,zzz)", + "TimeCodeModeFrames": "Frames (hh:mm:ss:ff)", + "TimeCodeModeFrameNumbers": "Framenummers", + "FrameModeSnapToVideoFrames": "Tijden op videoframes opslaan (niet frames binnen elke seconde)", "TextBoxLimitNewLines": "Aantal regels in het ondertiteltekstvak beperken", - "MpvVideoOutput": "Video-uitvoer (mpv)", "MpvOpenGl": "libmpv - OpenGL", "MpvSoftwareRendering": "libmpv - softwarerendering (traag)", + "MpvMetalRendering": "libmpv - Metal (experimenteel, herstart vereist)", "MpvWidRendering": "libmpv - rendering via systeemeigen venster-ID", "WaveFormsAndSpectrogramFoldersContainsX": "De mappen \"Waveforms\" en \"Spectrograms\" bevatten {0}", "DeleteWaveformAndSpectrogramFoldersQuestion": "Bestanden in \"Waveforms\" en \"Spectrogram\" verwijderen?", "WaveformGenerateSpectrogram": "Spectrogram genereren", "WaveformAutoGenerate": "Golfvorm automatisch genereren bij het openen van een video", "WaveformSpectrogramMode": "Spectrogrammodus", - "WaveformCenterOnSingleClick": "Centreren bij enkele klik", - "WaveformSingleClickSelectsSubtitle": "Ondertitel selecteren bij enkele klik", "WaveformRightClickSelectsSubtitle": "Ondertitel selecteren bij rechtsklikken", - "WaveformPauseOnSingleClick": "Pauzeren bij enkele klik", "WaveformDrawStyle": "Tekenstijl van golfvorm", "WaveformExtractAudioFormat": "Formaat geëxtraheerde audio", "WaveformExtractAudioSampleRate": "Samplefrequentie geëxtraheerde audio", @@ -3636,8 +3670,6 @@ "SaveAsBehaviorUseVideoFileName": "Naam van videobestand gebruiken", "SaveAsBehaviorUseSubtitleFileName": "Naam van ondertitelbestand gebruiken", "SaveAsAppendLanguageCodeTwoLetter": "Twee letters", - "SaveAsAppendLanguageCodeThreeLetter": "Drieletterige taalcode", - "SaveAsAppendLanguageCodeThreeLetterBibliographic": "Drie letters (ISO 639-2/B)", "SaveAsAppendLanguageCodeLanguageName": "Taalnaam", "SplitOddLineActionWeightTop": "Nadruk op bovenste regel", "SplitOddLineActionWeightBottom": "Nadruk op onderste regel", @@ -3656,8 +3688,7 @@ "UseFocusedButtonBackgroundColor": "Achtergrondkleur voor gefocuste knop gebruiken", "FocusedButtonBackgroundColor": "Achtergrondkleur van gefocuste knop", "ForceCrLfOnSave": "CR+LF afdwingen bij opslaan (tekstondertitelbestanden)", - "ShowWaveformToolbarPlayNext": "Werkbalk: knop Volgende afspelen tonen", - "ShowWaveformToolbarPlaySelection": "Werkbalk: knop Selectie afspelen tonen", + "LinuxClipboardUseExternalTool": "Tekst kopiëren via xclip/wl-copy (behoudt tekens met accenten)", "ShowFormatLimitWarning": "Waarschuwen bij opslaan wanneer regels de limieten van het formaat overschrijden (bijv. SCC 32 tekens/regel)", "TextBoxButtonShowAutoBreak": "Tekstvak: knop voor automatisch afbreken tonen", "TextBoxButtonShowUnbreak": "Tekstvak: knop voor samenvoegen tonen", @@ -3670,12 +3701,17 @@ "AllSettings": "Alle instellingen", "UiScale": "Interfaceschaal (%)", "FontScale": "Lettertypeschaal (%)", + "TextSelectionOpacity": "Dekking tekstselectie (%)", "WaveformToolbarItems": "Items op de golfvormwerkbalk", "MatchIconColorToDarkTheme": "Pictogramkleur afstemmen op voorgrondkleur van donker thema", "SubtitlePreviewProperties": "Eigenschappen van ondertitelvoorbeeld", "UsePositionFromSubtitleFile": "Positie uit ondertitelbestand gebruiken (TTML/PAC/EBU STL)", "MarginIsPartOfSubtitleArea": "Marge maakt deel uit van het ondertitelgebied", "TextJustify": "Regels uitvullen", + "Deinterlace": "Video deïnterlacen", + "DeinterlaceOff": "Uit", + "DeinterlaceAuto": "Auto (alleen geïnterlacete frames)", + "DeinterlaceAlways": "Altijd", "PixelWidthInfo": "Groene lijnen = maximale breedte | Rood gebied = tekst overschrijdt de limiet", "SpellCheckEngineHunSpelll": "Hunspell", "SpellCheckEngineMsWord": "MS Word", @@ -3697,115 +3733,76 @@ }, "Shortcuts": { "GeneralUnbreakNoSpaceCjk": "Samenvoegen zonder spatie (CJK)", - "Title": "Sneltoetsen", + "GeneralToggleBreak": "Afbreken/samenvoegen wisselen", "SearchShortcuts": "Sneltoetsen zoeken...", - "Filter": "Filter", - "CategoryGeneral": "Algemeen", "CategorySubtitleGridAndTextBox": "Ondertitellijst en tekstvak", "CategorySubtitleGrid": "Ondertitellijst", - "CategoryWaveform": "Golfvorm", "CategoryTextBox": "Tekstvak", "CategoryFile": "Bestand", "CategoryVideo": "Video", "CategorySync": "Synchronisatie", - "CategoryTranslate": "Vertalen", - "CategorySearch": "Zoeken", - "CategoryTools": "Gereedschappen", "CategoryAi": "AI", + "CategoryCustom": "Aangepast", + "EditCustomShortcut": "Aangepaste sneltoets bewerken", + "CustomShortcutTextBoxKeyHint": "Gebruik hier een toets met Ctrl/Alt - met een gewone toets kan niet meer in het tekstvak worden getypt.", + "CustomShortcutNumberX": "Aangepaste sneltoets #{0}", + "CustomShortcutNumberXY": "Aangepaste sneltoets #{0}: {1}", + "CustomShortcutStep": "Stap", + "CustomShortcutSteps": "Stappen", + "CustomShortcutStepRunCommand": "Opdracht uitvoeren", + "CustomShortcutStepInsertText": "Tekst invoegen", + "CustomShortcutStepReplace": "Zoeken en vervangen", + "CustomShortcutInsertAtCursor": "Bij cursor", + "CustomShortcutInsertAtStart": "Aan begin van tekst", + "CustomShortcutInsertAtEnd": "Aan einde van tekst", + "CustomShortcutSummaryRunCommandX": "Uitvoeren: {0}", + "CustomShortcutSummaryInsertXY": "\"{0}\" invoegen ({1})", + "CustomShortcutSummaryReplaceXY": "\"{0}\" vervangen door \"{1}\"", + "CustomShortcutSummaryReplaceRegexXY": "Regex \"{0}\" vervangen door \"{1}\"", + "CustomShortcutPickCommand": "Selecteer een opdracht om uit te voeren.", + "CustomShortcutEnterText": "Voer de in te voegen tekst in.", + "CustomShortcutEnterFind": "Voer de te zoeken tekst in.", + "CustomShortcutInvalidRegexX": "Ongeldige reguliere expressie: {0}", + "CustomShortcutStepsHint": "Stappen worden van boven naar beneden uitgevoerd. Tekststappen werken op de geselecteerde rijen; opdrachten die een venster openen, gaan verder nadat het is gesloten.", "ActiveIn": "Actief in", "ActiveInEverywhere": "Overal", - "GeneralSetupLikeSe4": "Instellen zoals Subtitle Edit 4 (thema, sneltoetsen, vervangingsregels)", - "GeneralMergeSelectedLines": "Geselecteerde rijen samenvoegen", - "GeneralMergeWithPrevious": "Samenvoegen met vorige", - "GeneralMergeWithNext": "Samenvoegen met volgende", - "GeneralMergeWithPreviousAndUnbreak": "Samenvoegen met vorige en tot één regel maken", - "GeneralMergeWithNextAndUnbreak": "Samenvoegen met volgende en tot één regel maken", - "GeneralMergeWithPreviousAndAutoBreak": "Samenvoegen met vorige en automatisch afbreken", - "GeneralMergeWithNextAndAutoBreak": "Samenvoegen met volgende en automatisch afbreken", - "GeneralMergeSelectedLinesAndAutoBreak": "Geselecteerde rijen samenvoegen en automatisch afbreken", "GeneralMergeSelectedLinesAndUnbreak": "Geselecteerde rijen samenvoegen en tot één regel maken", "GeneralMergeSelectedLinesAndUnbreakCjk": "Geselecteerde rijen samenvoegen en tot één regel maken zonder spatie (CJK)", - "GeneralMergeSelectedLinesOnlyFirstText": "Geselecteerde rijen samenvoegen, alleen de eerste tekst", "GeneralMergeSelectedLinesBilingual": "Geselecteerde rijen tweetalig samenvoegen", - "GeneralMergeWithPreviousBilingual": "Tweetalig samenvoegen met vorige", - "GeneralMergeWithNextBilingual": "Tweetalig samenvoegen met volgende", - "GeneralMergeOriginalAndTranslation": "Origineel en vertaling samenvoegen", "GeneralToggleTranslationMode": "Vertaalmodus in-/uitschakelen", - "GeneralSwitchOriginalAndTranslation": "Origineel en vertaling verwisselen", - "GeneralSwitchOriginalAndTranslationTextBoxes": "Tekstvakken van origineel en vertaling verwisselen", "GeneralToggleTranslationAndOriginalInPreviews": "Wisselen tussen vertaling en origineel in video-/audiovoorbeeld", "GeneralChooseLayout": "Indeling kiezen", - "GeneralLayoutChooseX": "Indeling {0}", - "GeneralPlayFirstSelected": "Eerste geselecteerde afspelen", - "GeneralGoToFirstSelectedLine": "Naar de eerste geselecteerde rij gaan", - "GeneralGoToNextEmptyLine": "Naar de volgende lege rij gaan", "GeneralGoToNextSubtitle": "Naar de volgende ondertitel gaan", "GeneralGoToNextSubtitlePlayTranslate": "Naar de volgende ondertitel gaan (afspelen en vertalen)", "GeneralGoToNextSubtitleCursorAtEnd": "Naar de volgende ondertitel gaan (cursor aan het einde)", "GeneralGoToPrevSubtitle": "Naar de vorige ondertitel gaan", "GeneralGoToPrevSubtitlePlayTranslate": "Naar de vorige ondertitel gaan (afspelen en vertalen)", - "GeneralGoToStartOfCurrentSubtitle": "Naar het begin van de huidige ondertitel gaan", - "GeneralGoToEndOfCurrentSubtitle": "Naar het einde van de huidige ondertitel gaan", - "GeneralGoToPreviousSubtitleAndFocusVideo": "Naar de vorige ondertitel gaan en de video focussen", - "GeneralGoToNextSubtitleAndFocusVideo": "Naar de volgende ondertitel gaan en de video focussen", - "GeneralGoToPrevSubtitleAndPlay": "Naar de vorige ondertitel gaan en afspelen", - "GeneralGoToNextSubtitleAndPlay": "Naar de volgende ondertitel gaan en afspelen", - "GeneralGoToPreviousSubtitleAndFocusWaveform": "Naar de vorige ondertitel gaan en de golfvorm focussen", - "GeneralGoToNextSubtitleAndFocusWaveform": "Naar de volgende ondertitel gaan en de golfvorm focussen", - "GeneralGoToLineNumber": "Ga naar rijnummer", "GeneralGoToFirstLine": "Ga naar eerste rij", "GeneralGoToLastLine": "Ga naar laatste rij", "AlsoSetVideoPosition": "Ook videopositie instellen", "GeneralGoToVideoPosition": "Naar videopositie gaan", "GeneralToggleItalic": "Cursief in-/uitschakelen", "GeneralToggleBold": "Vet in-/uitschakelen", - "GeneralToggleBookmarks": "Bladwijzers in-/uitschakelen", - "GeneralFocusTextBox": "Tekstvak focussen", - "GeneralToggleBookmarksWithText": "Bladwijzers met tekst in-/uitschakelen", - "GeneralEditBookmarks": "Bladwijzers bewerken", - "FileNew": "Nieuw", "GeneralToggleUnderline": "Onderstrepen in-/uitschakelen", "GeneralToggleBox": "Kader in-/uitschakelen (EBU STL)", "FileOpen": "Openen", "FileOpenKeepVideo": "Openen (video behouden)", "FileSave": "Opslaan", "FileSaveAs": "Opslaan als", - "FileSaveAll": "Alles opslaan", "FileSaveOriginal": "Origineel opslaan", - "FileSaveOriginalAs": "Origineel opslaan als", - "FileOpenOriginalSubtitle": "Oorspronkelijke ondertitel openen", - "FileCloseOriginalSubtitle": "Oorspronkelijke ondertitel sluiten", - "FileTranslatedSubtitle": "Vertaalde ondertitel", "FileCompare": "Vergelijken", "FileStatistics": "Statistieken", "FileImportPlainText": "Platte tekst importeren", - "FileImportBluRaySupForOcr": "Blu-ray SUP importeren voor OCR", - "FileImportBluRaySupForEdit": "Blu-ray SUP importeren om te bewerken", - "FileImportTimeCodes": "Tijdcodes importeren", "FileExportEbuStl": "EBU STL exporteren", "FileExportPac": "PAC exporteren", - "FileExportEdlClipName": "EDL-clipnaam exporteren", - "FileExportPlainText": "Platte tekst exporteren", - "FileExportCustomTextFormat1": "Aangepast tekstformaat 1 exporteren", - "FileExportCustomTextFormat2": "Aangepast tekstformaat 2 exporteren", - "FileExportCustomTextFormat3": "Aangepast tekstformaat 3 exporteren", "FileExit": "Afsluiten", "OpenSeDataFolder": "Map van Subtitle Edit openen", - "EditFind": "Zoeken", - "EditFindNext": "Volgende zoeken", "EditFindPrevious": "Vorige zoeken", - "EditReplace": "Vervangen", - "EditMultipleReplace": "Meervoudig vervangen", "FillSelectedLinesWithClipboard": "Geselecteerde rijen vullen met klembordtekst", - "EditModifySelection": "Selectie wijzigen", - "ListSelectAll": "Alles selecteren", - "ListSelectFirst": "Eerste selecteren", - "ListSelectLast": "Laatste selecteren", "ListInverseSelection": "Selectie omkeren", "ListDeleteSelection": "Selectie verwijderen", "DeleteSelectionEverywhere": "Selectie verwijderen (overal)", "RippleDeleteSelection": "Selectie verwijderen en doorschuiven", - "Settings": "Instellingen", "Assigned": "Toegewezen", "Unassigned": "Niet toegewezen", "PressedKeyX": "Ingedrukte toets: {0}", @@ -3813,6 +3810,7 @@ "DetectKey": "Toets detecteren", "Control": "Control", "Alt": "Alt", + "AltGr": "AltGr", "Win": "Win", "Shift": "Shift", "ControlMac": "⌃", @@ -3823,11 +3821,14 @@ "ResetShortcutsDetail": "Wilt u alle sneltoetsen op de standaardwaarden terugzetten?", "TogglePlayPause": "Afspelen/pauzeren", "ToggleLockTimeCodes": "Tijdcodes vergrendelen in-/uitschakelen", + "ToggleTimeCodeMode": "Tijdcodemodus wisselen (tijd/frames/framenummers)", + "ToggleScreenPrivacy": "Schermprivacy wisselen (bestandsnamen verbergen, daarna ook teksten)", + "ScreenPrivacyFileNamesHidden": "Schermprivacy: bestandsnamen verborgen", + "ScreenPrivacyFileNamesAndTextsHidden": "Schermprivacy: bestandsnamen en teksten verborgen", + "ScreenPrivacyOff": "Schermprivacy: uit", "DuplicateSelectedLines": "Geselecteerde rijen dupliceren", "SourceView": "Bronweergave", - "ShowAlignmentPicker": "Uitlijning", "AddOrEditBookmark": "Bladwijzer toevoegen of bewerken", - "ListBookmarks": "Bladwijzers tonen", "ToggleBookmark": "Bladwijzer in-/uitschakelen (geselecteerde rijen, zonder tekst)", "ToggleForcedSelectedLines": "Geforceerd in-/uitschakelen (geselecteerde rijen)", "GoToNextBookmark": "Naar de volgende bladwijzer gaan", @@ -3838,7 +3839,6 @@ "WaveformSetStartAndSetEndOfPreviousMinusGap": "Begin instellen en einde van vorige min tussenruimte instellen", "WaveformSetEndAndStartOfNextAfterGap": "Einde instellen en begin van volgende plus tussenruimte instellen", "WaveformSetEndAndStartOfNextAfterGapAndGoToNext": "Einde instellen, begin van volgende plus tussenruimte instellen en naar de volgende gaan", - "FetchFirstWordFromNextSubtitle": "Eerste woord van volgende ondertitel ophalen", "MoveLastWordToNextSubtitle": "Laatste woord naar de volgende ondertitel verplaatsen", "MoveLastWordFromFirstLineDownCurrentSubtitle": "Laatste woord van de eerste regel omlaag verplaatsen (huidige ondertitel)", "MoveFirstWordFromNextLineUpCurrentSubtitle": "Eerste woord van de volgende regel omhoog verplaatsen (huidige ondertitel)", @@ -3856,7 +3856,6 @@ "VideoGoToPreviousTimeCode": "Ga naar vorige tijdcode", "VideoGoToNextTimeCode": "Ga naar volgende tijdcode", "GoToNextLineAndSetVideoPosition": "Naar de volgende ondertitel gaan en de videopositie instellen", - "TextBoxDeleteSelectionNoClipboard": "Tekstvak: selectie verwijderen (niet naar klembord)", "TextBoxDeleteForward": "Tekstvak: Selectie of volgend teken verwijderen (voorwaarts verwijderen)", "TextBoxCut": "Tekstvak: knippen", "TextBoxCut2": "Tekstvak: knippen (alternatief)", @@ -3875,6 +3874,7 @@ "ListViewColumnTextUp": "Kolom, tekst omhoog", "ListViewColumnTextDown": "Kolom, tekst omlaag", "AutoTranslateSelectedLines": "Geselecteerde rijen automatisch vertalen...", + "AutoTranslateSelectedLinesNoPrompt": "Geselecteerde rijen automatisch vertalen (zonder vragen, laatste engine/talen gebruiken)", "SetAssaResolution": "ASSA-resolutie instellen (PlayResX/PlayResY)", "SetShortcutForX": "Sneltoets instellen voor \"{0}\"", "CommandFileNewKeepVideo": "Nieuw (video behouden)", @@ -3882,29 +3882,22 @@ "FileCloseOriginal": "Origineel sluiten", "FileCloseTranslation": "Vertaling sluiten", "RestoreAutoBackup": "Automatische back-up herstellen", - "OpenContainingFolder": "Map openen", "ImportTimeCodes": "Tijdcodes importeren", "ImportSubtitleWithManuallyChosenEncoding": "Ondertitel importeren met handmatig gekozen codering", "ExportBluRaySup": "Blu-ray SUP exporteren", "ExportCustomTextFormat": "Aangepast tekstformaat exporteren", "ExportPlainText": "Platte tekst exporteren", - "ShowHistory": "Geschiedenis tonen", "ToggleRightToLeft": "Rechts-naar-links in-/uitschakelen", "ModifySelection": "Selectie wijzigen", "AdjustDurations": "Duur aanpassen", "ApplyDurationLimits": "Duurlimieten toepassen", "BatchConvert": "Batchconversie", - "BridgeGaps": "Gaten overbruggen", "ApplyMinGap": "Min. tussenruimte toepassen", - "FixCommonErrors": "Veelvoorkomende fouten herstellen", "MakeEmptyTranslationFromCurrentSubtitle": "Lege vertaling maken van de huidige ondertitel", - "MergeLinesWithSameText": "Rijen met dezelfde tekst samenvoegen", - "MergeLinesWithSameTimeCodes": "Rijen met dezelfde tijdcodes samenvoegen", "SplitBreakLongLines": "Lange regels splitsen/herverdelen", "MergeShortLines": "Korte rijen samenvoegen", "MergeContinuationLines": "Vervolgregels samenvoegen", "SnapAllTimesToFrames": "Alle tijden uitlijnen op frames", - "RemoveTextForHearingImpaired": "Tekst voor slechthorenden verwijderen", "JoinSubtitles": "Ondertitels samenvoegen", "SplitSubtitle": "Ondertitel splitsen", "SpellCheck": "Spellingcontrole", @@ -3926,7 +3919,6 @@ "AdjustAllTimes": "Alle tijden aanpassen", "VisualSync": "Visueel synchroniseren", "TranslateViaCopyPaste": "Vertalen via kopiëren/plakken", - "Shortcuts": "Sneltoetsen", "WordLists": "Woordenlijsten", "ChooseUiLanguage": "Interfacetaal kiezen", "ChooseRuleProfile": "Regelprofiel kiezen", @@ -3954,18 +3946,23 @@ "GoToSubtitlePositionAndPause": "Ga naar ondertitelpositie en pauzeer", "SetVideoPositionCurrentSubtitleEnd": "Videopositie op het einde van de huidige rij instellen", "ToggleAudioTracks": "Audiosporen wisselen", - "ListErrors": "Fouten tonen", "GoToNextError": "Naar de volgende fout gaan", "GoToPreviousError": "Naar de vorige fout gaan", "AddNameToNameList": "Naam aan namenlijst toevoegen", "FindDoubleWords": "Dubbele woorden zoeken", "FindDoubleLines": "Dubbele rijen zoeken", "ColorX": "Kleur {0}", - "RemoveColor": "Kleur verwijderen", "SurroundWith": "Omgeven met...", "SurroundWithXY": "Omringen met {0}/{1}", - "RepeatLine": "Rij herhalen", "SurroundWithNumberX": "Omsluiten met #{0}", + "SurroundWithBehavior": "Gedrag", + "SurroundWithBehaviorToggle": "Wisselen (toevoegen, of verwijderen indien aanwezig)", + "SurroundWithBehaviorAdd": "Toevoegen (elke keer)", + "SurroundWithBehaviorRemove": "Verwijderen (alle)", + "SurroundWithBehaviorRemoveOnce": "Verwijderen (één per keer)", + "SurroundWithWorksOn": "Werkt op", + "SurroundWithScopeSelectionOrText": "Selectie, anders hele tekst", + "SurroundWithScopeEachLine": "Elke regel", "SearchVia": "Zoeken via", "SearchViaX": "Zoeken via {0}", "SearchViaNumberX": "Zoeken via #{0}", @@ -3993,6 +3990,11 @@ "CopySubtitlePathToClipboard": "Pad van ondertitel naar klembord kopiëren", "CopySubtitleOriginalPathToClipboard": "Pad van oorspronkelijke ondertitel naar klembord kopiëren", "FocusTextBox": "Tekstvak focussen", + "FocusSubtitleListView": "Focus op ondertitellijst", + "FocusWaveform": "Focus op golfvorm", + "FocusOriginalTextBox": "Focus op origineel tekstvak", + "TextBoxGoToStart": "Tekstvak, naar begin gaan", + "TextBoxGoToEnd": "Tekstvak, naar einde gaan", "SortByNumber": "Sorteren op nr.", "SortByStartTime": "Sorteren op tijd van \"Toon\"", "SortByEndTime": "Sorteren op tijd van \"Verberg\"", @@ -4017,7 +4019,6 @@ "AssaStyles": "ASSA-stijlen", "AssaProperties": "ASSA-eigenschappen", "AssaAttachments": "ASSA-bijlagen", - "AssaVideoColorPicker": "ASSA-kleurenkiezer voor video", "RecalculateDurationSelectedLines": "Duur opnieuw berekenen (geselecteerde rijen)", "SetDurationMaxCpsSelectedLines": "Duur instellen op max. Kar/s (geselecteerde rijen)", "ToggleWaveformAndSpectrogramHeight": "Verdeelde hoogte van golfvorm/spectrogram wisselen", @@ -4033,7 +4034,7 @@ "GoogleIt": "Google het (geselecteerde tekst)", "SetActorX": "Acteur instellen: {0}", "SetNewActor": "Nieuwe acteur instellen...", - "SetActorSlotXTitle": "Acteursplek {0}", + "SetStyleX": "Stijl instellen: {0}", "ToggleDialogDashes": "Dialoogstreepjes in-/uitschakelen", "MergeWithLineBeforeAsDialog": "Samenvoegen met rij ervoor als dialoog", "MergeWithLineAfterAsDialog": "Samenvoegen met rij erna als dialoog", @@ -4045,6 +4046,10 @@ "MoveStartOneFrameForwardKeepGapPrev": "Begin één frame vooruit (tussenruimte met vorige behouden indien dichtbij)", "MoveEndOneFrameBackKeepGapNext": "Einde één frame terug (tussenruimte met volgende behouden indien dichtbij)", "MoveEndOneFrameForwardKeepGapNext": "Einde één frame vooruit (tussenruimte met volgende behouden indien dichtbij)", + "MoveStartXMsBack": "Begin X ms terug verplaatsen (X ingesteld in Instellingen, ook in Visueel synchroniseren)", + "MoveStartXMsForward": "Begin X ms vooruit verplaatsen (X ingesteld in Instellingen, ook in Visueel synchroniseren)", + "MoveEndXMsBack": "Einde X ms terug verplaatsen (X ingesteld in Instellingen, ook in Visueel synchroniseren)", + "MoveEndXMsForward": "Einde X ms vooruit verplaatsen (X ingesteld in Instellingen, ook in Visueel synchroniseren)", "MoveSelectedLinesXMsBack": "Geselecteerde rijen X ms terug verplaatsen (X in te stellen in Instellingen)", "MoveSelectedLinesXMsForward": "Geselecteerde rijen X ms vooruit verplaatsen (X in te stellen in Instellingen)", "MoveSelectedLinesAndForwardXMsBack": "Geselecteerde rijen en alle volgende X ms terug verplaatsen (X in te stellen in Instellingen)", @@ -4061,8 +4066,6 @@ "WordLists": { "Title": "Woordenlijsten", "AddName": "Naam toevoegen", - "AddWord": "Woord toevoegen", - "AddPair": "Paar toevoegen", "NameAndIgnoreList": "Namen-/negeerlijst", "UserWords": "Gebruikerswoordenlijst", "OcrFixList": "OCR-correctielijst", @@ -4079,7 +4082,6 @@ "NoPluginsInstalled": "Geen plugins geïnstalleerd", "GetPluginsOnline": "Plugins online ophalen...", "GetPluginsTitle": "Plugins ophalen", - "Enabled": "Ingeschakeld", "Disabled": "Uitgeschakeld", "NotSupportedOnThisOs": "Niet ondersteund op dit besturingssysteem", "RemovePluginXConfirm": "Plugin '{0}' verwijderen? Hiermee wordt de pluginmap verwijderd:{1}", @@ -4096,10 +4098,8 @@ "DownloadingXPercent": "Downloaden {0}%...", "PluginXInstalled": "'{0}' geïnstalleerd.", "CouldNotInstallPluginX": "Kon '{0}' niet installeren: {1}", - "NotInstalled": "Niet geïnstalleerd", "Install": "Installeren", "Reinstall": "Opnieuw installeren", - "Update": "Bijwerken", "InstalledX": "Geïnstalleerd ({0})", "UpdateAvailableXToY": "Update beschikbaar ({0} → {1})", "ApplyPluginToWhichLinesX": "'{0}' toepassen op:", @@ -4204,6 +4204,8 @@ "BinaryImageCompareInspectImageMatches": "\"Binaire afbeeldingsvergelijking\" - afbeeldingsovereenkomsten inspecteren", "SaveBlankTextTitle": "Lege tekst opslaan?", "SaveBlankTextPrompt": "Lege tekst opslaan voor afbeelding?", + "DrawnLinesDoNotMatchTitle": "Lijnen komen niet overeen met afbeelding", + "DrawnLinesDoNotMatchPrompt": "Sommige getekende lijnen komen niet overeen met de afbeelding (groene lijnen moeten op het teken liggen, rode lijnen ernaast), dus dit teken wordt niet herkend.\n\nToch opslaan?", "YesAndNeverAskAgain": "Ja en nooit meer vragen", "ImportTextFromSubtitleDotDotDot": "Tekst importeren uit ondertitel...", "ImportTextFromSubtitleOverwritePrompt": "Sommige rijen hebben al OCR-tekst. Bestaande tekst overschrijven?", @@ -4229,7 +4231,6 @@ "VobSubColorsTitle": "VobSub/DVD-kleuren", "VobSubColorsHeader": "De vier VobSub-kleuren aanpassen", "VobSubColorsDescription": "VobSub/DVD-ondertitels gebruiken vier geïndexeerde kleuren: achtergrond, patroon, nadruk 1 en nadruk 2. Kies hieronder elke kleur om het ingebouwde palet te overschrijven - handig wanneer de originele kleuren een slecht OCR-contrast geven.", - "VobSubColorBackground": "Achtergrond", "VobSubColorPattern": "Patroon", "VobSubColorEmphasis1": "Nadruk 1", "VobSubColorEmphasis2": "Nadruk 2", @@ -4263,9 +4264,26 @@ "CrispEmbedSettingsTitle": "CrispEmbed-instellingen", "CrispEmbedDescription": "Lokale OCR-engine met meerdere modelbackends - download hier de engine en de modellen.", "TrainNOcrDatabase": "nOCR-database trainen...", + "OptimizeNOcrDatabase": "nOCR-database optimaliseren...", + "OptimizeNOcrDatabaseQuestionXY": "De lijnen in nOCR-database \"{0}\" verwijderen die tekens niet van vergelijkbare tekens onderscheiden?\n\nDit maakt de database kleiner en OCR sneller, meestal met minder fouten. Duurt tot een minuut.\n\nEr wordt een back-up opgeslagen als \"{1}\".", + "OptimizingNOcrDatabaseXY": "nOCR-database optimaliseren... {0}/{1}", + "NOcrDatabaseOptimizedXYZ": "nOCR-database \"{0}\" geoptimaliseerd: {1:#,##0} -> {2:#,##0} lijnen.", "StartTraining": "Training starten", "AbortTraining": "Training afbreken", "TrainingOptions": "Trainingsopties", + "TrainNOcrSubtitle": "Rendert tekens in geïnstalleerde lettertypen en leert nOCR hun vormen. Kies de lettertypen die uw ondertitels gebruiken.", + "XFontsSelected": "{0:#,##0} geselecteerd", + "SubtitleFonts": "Ondertitellettertypen", + "EmptyDatabase": "Lege database", + "StartFromDatabase": "Beginnen met", + "StartFromDatabaseHint": "De getrainde tekens toevoegen aan een kopie van een bestaande database (aanbevolen) of met een lege beginnen", + "FontSizes": "Lettergrootten", + "FontSizesHint": "Lettergrootten in pixels om mee te renderen, gescheiden door komma's, bijv. \"30, 40\"", + "NumberOfLineSegmentsHint": "Lijnen gecontroleerd per teken - meer is strenger maar langzamer", + "EnterDatabaseName": "Voer een naam in voor de database", + "TrainingFontXSizeYCharacterZ": "\"{0}\" trainen op {1} px: {2}", + "XLearned": "{0:#,##0} geleerd", + "XSkipped": "{0:#,##0} overgeslagen", "CharactersToTrain": "Te trainen tekens", "LetterCombinationsToTrain": "Lettercombinaties die tot één afbeelding gesplitst kunnen worden", "ImportCharactersFromSubtitleFile": "Tekens importeren uit ondertitelbestand...", @@ -4291,7 +4309,9 @@ "DrawZoomIn": "Inzoomen (Ctrl++)", "DrawZoomOut": "Uitzoomen (Ctrl+-)", "DrawResetView": "Weergave herstellen (Ctrl+0)", - "DrawToggleGrid": "Raster in-/uitschakelen (Ctrl+G)", + "DrawToggleGrid": "Raster in-/uitschakelen (Ctrl+')", + "DrawTogglePreview": "Voorbeeld aan/uit (F9)", + "DrawPreviewFailed": "Voorbeeld mislukt - ffmpeg met libass (subtitles-filter) is vereist", "DrawCopyToClipboard": "Naar klembord kopiëren (Ctrl+C)", "DrawShapes": "Vormen", "DrawSelectedPoint": "Geselecteerd punt", @@ -4299,16 +4319,86 @@ "DrawSelectedLayer": "Geselecteerde laag", "DrawToolX": "Gereedschap: {0}", "DrawHelpText": "Klik om punten toe te voegen • Enter/F8 om de vorm te sluiten • Shift+slepen om te pannen • Ctrl+scrollen om te zoomen", + "DrawMoveToLayer": "Naar laag verplaatsen", + "DrawFlipHorizontal": "Horizontaal spiegelen", + "DrawFlipVertical": "Verticaal spiegelen", + "DrawHideShape": "Vorm verbergen", + "DrawShowShape": "Vorm tonen", + "DrawHideLayer": "Laag verbergen", + "DrawShowLayer": "Laag tonen", + "DrawDeleteLayer": "Laag verwijderen", + "DrawDeletePoint": "Punt verwijderen", + "DrawCancelDrawing": "Tekenen annuleren", + "DrawLayerX": "Laag {0}", + "DrawImportSvg": "SVG-afbeelding importeren...", + "DrawRotateClockwise": "90° rechtsom draaien", + "DrawConvertToCurve": "Segment omzetten naar curve", + "DrawBackground": "Achtergrond", + "DrawPosition": "Positie", + "DrawZoom": "Zoom", + "DrawShapeTool": "Vormgereedschap", + "DrawColorPickerTool": "Kleur kiezen uit een vorm of de achtergrond", + "DrawShapeLibrary": "Vormenbibliotheek", + "DrawShapeLibraryHint": "Sleep op het canvas om een vorm te plaatsen, of klik voor de standaardgrootte. Shift behoudt de verhoudingen.", + "DrawAddToLibrary": "Aan vormenbibliotheek toevoegen...", + "DrawRemoveFromLibrary": "Uit vormenbibliotheek verwijderen", + "DrawShapeName": "Vormnaam", + "DrawCategorySpeechBubbles": "Tekstballonnen", + "DrawCategoryArrows": "Pijlen", + "DrawCategoryBasicShapes": "Basisvormen", + "DrawCategorySymbols": "Symbolen", + "DrawCategoryMyShapes": "Mijn vormen", + "DrawShapeSpeechBubble": "Tekstballon", + "DrawShapeSpeechBubbleRight": "Tekstballon, staart rechts", + "DrawShapeSpeechBubbleUp": "Tekstballon, staart omhoog", + "DrawShapeOvalBubble": "Ovale tekstballon", + "DrawShapeBoxBubble": "Rechthoekige tekstballon", + "DrawShapeThoughtBubble": "Gedachtewolk", + "DrawShapeShoutBubble": "Schreeuwballon", + "DrawShapeCaptionBox": "Bijschriftkader", + "DrawShapeArrow": "Pijl", + "DrawShapeDoubleArrow": "Dubbele pijl", + "DrawShapeChevron": "Chevron", + "DrawShapeCurvedArrow": "Gebogen pijl", + "DrawShapeRoundedRectangle": "Afgeronde rechthoek", + "DrawShapeTriangle": "Driehoek", + "DrawShapeDiamond": "Ruit", + "DrawShapePentagon": "Vijfhoek", + "DrawShapeHexagon": "Zeshoek", + "DrawShapeOctagon": "Achthoek", + "DrawShapeStar": "Ster", + "DrawShapeRing": "Ring", + "DrawShapePlus": "Plus", + "DrawShapeBanner": "Banier", + "DrawShapeHeart": "Hart", + "DrawShapeCheck": "Vinkje", + "DrawShapeMusicNote": "Muzieknoot", + "DrawShapeMusicNotes": "Muzieknoten", + "DrawShapeLightning": "Bliksem", + "DrawShapeCloud": "Wolk", + "DrawShapeMoon": "Maan", + "DrawShapeBadge": "Badge", + "DrawSize": "Grootte", + "DrawLayer": "Laag", + "DrawBackgroundVideoFrame": "Videoframe (huidige positie)", + "DrawBackgroundVideoFrameAt": "Videoframe op...", + "DrawBackgroundImage": "Afbeeldingsbestand...", + "DrawBackgroundNone": "Geen achtergrond", + "DrawBackgroundStretch": "Afbeelding uitrekken tot canvas", + "DrawBackgroundOpacity": "Dekking achtergrond", + "DrawBackgroundVideoFrameFailed": "Kon geen videoframe ophalen op {0}.", + "DrawImages": "Afbeeldingen", + "DrawConvertToLine": "Segment omzetten naar lijn", + "DrawConvertShapeToCurves": "Alle lijnen omzetten naar curven", + "DrawConvertShapeToLines": "Alle curven omzetten naar lijnen", + "DrawRotateCounterClockwise": "90° linksom draaien", + "DrawSvgImages": "SVG-afbeeldingen", + "DrawSvgNoShapes": "Geen gevulde vormen of lijnen gevonden in het SVG-bestand.", "ProgressBarTitle": "ASSA-voortgangsbalk", "ProgressBarSettings": "Voortgangsbalk", - "ProgressBarPosition": "Positie", - "ProgressBarBottom": "Onder", - "ProgressBarTop": "Boven", "MouseOverColor": "Kleur bij muisaanwijzer", "ClickedColor": "Kleur bij klikken", "ProgressBarForeColor": "Voorgrondkleur", - "ProgressBarBackColor": "Achtergrondkleur", - "ProgressBarStyle": "Stijl", "ProgressBarSquareCorners": "Rechte hoeken", "ProgressBarRoundedCorners": "Afgeronde hoeken", "ProgressBarChapters": "Hoofdstukken", @@ -4317,8 +4407,6 @@ "ProgressBarXAdjustment": "X-aanpassing", "ProgressBarYAdjustment": "Y-aanpassing", "ProgressBarTextAlignment": "Tekstuitlijning", - "ProgressBarTakePosFromVideo": "Positie uit video overnemen", - "ProgressBarPreview": "Voorbeeld", "FontCollectorTitle": "Lettertypeverzamelaar", "FontCollectorUsedIn": "Gebruikt in", "FontCollectorFontFiles": "Lettertypebestand(en)", @@ -4365,9 +4453,7 @@ "ResolutionResamplerVideoDiffers": "De ondertitelresolutie ({0}x{1}) wijkt af van de videoresolutie ({2}x{3}).\nDe ondertitel aanpassen aan de video?", "ResolutionResamplerAskOnVideoOpen": "Vragen wanneer een video met een andere resolutie wordt geopend", "BackgroundBoxGenerator": "Achtergrondkader genereren", - "BackgroundBoxPadding": "Opvulling", "BackgroundBoxFillWidth": "Vulbreedte", - "BackgroundBoxBoxColor": "Kaderkleur", "BackgroundBoxRadius": "Straal", "BackgroundBoxCircle": "Cirkel", "BackgroundBoxSpikes": "Stekels", @@ -4379,12 +4465,9 @@ "BackgroundBoxTornPaperDouble": "Gescheurd papier (boven en onder)", "BackgroundBoxStarburst": "Stervorm", "BackgroundBoxScroll": "Rol / perkament", - "StylesTitle": "Geavanceerde Sub Station Alpha-stijlen", "StylesInFile": "Stijlen in bestand", "StylesSaved": "Stijlen opgeslagen", - "Category": "Categorie", "AllCategories": "[Alle]", - "DefaultCategory": "Standaard", "NewCategory": "Nieuwe categorie...", "RenameCategory": "Categorie hernoemen...", "DeleteCategory": "Categorie verwijderen", @@ -4407,13 +4490,26 @@ "Graphics": "Afbeeldingen", "CopyToStorageStyles": "Naar opslagstijlen kopiëren", "CopyToFileStyles": "Naar bestandsstijlen kopiëren", + "StyleXAlreadyExistsInStorage": "Er bestaat al een stijl met de naam \"{0}\" in de opslag.\n\nOverschrijven, of beide behouden (de kopie krijgt een nieuwe naam)?", + "StyleXAlreadyExistsInFile": "Er bestaat al een stijl met de naam \"{0}\" in het bestand.\n\nOverschrijven, of beide behouden (de kopie krijgt een nieuwe naam)?", + "StyleNameCannotBeEmpty": "Een stijlnaam mag niet leeg zijn.", + "StyleNameXIsUsedMoreThanOnce": "De stijlnaam \"{0}\" wordt door meer dan één stijl in het bestand gebruikt.", + "Overwrite": "Overschrijven", + "KeepBoth": "Beide behouden", + "DoThisForAllConflictingStyles": "Dit doen voor alle conflicterende stijlen", "SetStyleAsDefault": "Stijl als standaard instellen", "TakeUsagesFromDotDotDot": "Gebruik overnemen van...", "ReplaceStyleWithDotDotDot": "Stijl vervangen door...", "NoAttachmentsFound": "Geen bijlagen gevonden in het geselecteerde ASSA-bestand.", "DeleteStyleQuestion": "Stijl verwijderen?", "DeleteStylesQuestion": "Stijlen verwijderen?", + "DeleteXStylesQuestion": "Wilt u {0} stijlen verwijderen?", + "DeleteXStylesFromStorageQuestion": "Wilt u {0} stijlen uit de opslag verwijderen?", + "DeleteStyleXFromStorageQuestion": "Wilt u stijl \"{0}\" uit de opslag verwijderen?", + "DeleteStyleXFromFileQuestion": "Wilt u stijl \"{0}\" uit het huidige bestand verwijderen?", "OpenStyleImportFile": "Ondertitelbestand openen om stijlen uit te importeren", + "StyleImportFiles": "Stijlbestanden (.ass, .sty, Subtitle Edit 4-categorieën .template)", + "SsaStyleImportFiles": "Stijlbestanden (.ssa, .ass, .sty)", "Primary": "Primair", "Secondary": "Secundair", "ApplyOverrideTags": "Override-tags toepassen", @@ -4428,7 +4524,6 @@ "SpaceIncrease": "Spatiëring vergroten", "PopIn": "Inploppen", "SpinIn": "Draaiend binnenkomen", - "PlayCurrent": "Huidige afspelen", "SetPosition": "Positie instellen", "Rotation": "Rotatie", "ScaleX": "Schaal X", @@ -4472,10 +4567,8 @@ "AdvancedEffectOldMovieDescription": "Simuleert een klassieke 35mm-filmprojector met ruis, vignettering en krassen", "AdvancedEffectNeonBurst": "Neonuitbarsting", "AdvancedEffectNeonBurstDescription": "Energieke ondertitels in 'Shorts'-stijl met neongloed en een inschalende 'pop'-animatie", - "AdvancedEffectSettings": "Instellingen", "AdvancedEffectSnowFlakeCount": "Aantal vlokken", "AdvancedEffectStarfieldStarCount": "Aantal sterren", - "AdvancedEffectStarfieldSpeed": "Snelheid", "AdvancedEffectGlitch": "Glitch", "AdvancedEffectGlitchDescription": "Digitale glitch met chromatische aberratie, witte flitsen en vervormingslagen", "AdvancedEffectBounceIn": "Inveren", @@ -4484,8 +4577,6 @@ "AdvancedEffectFirefliesDescription": "Warm gloeiende geel-amberkleurige stippen die natuurlijk over het scherm zweven met een pulserende gloed", "AdvancedEffectMatrix": "Matrix", "AdvancedEffectMatrixDescription": "Vallende groene tekenkolommen waarbij de ondertiteltekst letter voor letter uit de regen wordt opgebouwd", - "AdvancedEffectAudioBars": "Audiobalken (golfvorm)", - "AdvancedEffectAudioBarsDescription": "Geanimeerde equalizerbalken aangestuurd door de audiogolfvorm — de balken scrollen naar links als een golfvorm en pulseren met de audio", "AdvancedEffectAudioPulse": "Audiopuls op tekst", "AdvancedEffectAudioPulseDescription": "De ondertiteltekst gloeit en pulseert met het audiovolume — stille passages tonen normale tekst, luide pieken voegen een gekleurde halo en een lichte vergroting toe", "AdvancedEffectConfetti": "Confetti-uitbarsting", @@ -4499,7 +4590,6 @@ "AdvancedEffectFancyKaraokeGlow": "Gloed van actief woord", "AdvancedEffectFancyKaraokeActiveColor": "Actieve kleur", "AdvancedEffectFancyKaraokeInactiveColor": "Inactieve kleur", - "AdvancedEffectFancyKaraokeInactiveOpacity": "Dekking inactief (0-255)", "AdvancedEffectWordSpacingPixels": "Spatiëring (pixels)", "AdvancedEffectSlowZoomOut": "Langzaam uitzoomen", "AdvancedEffectSlowZoomOutDescription": "De tekst begint iets groter en krimpt geleidelijk naar de normale grootte gedurende de duur van de ondertitel", @@ -4515,7 +4605,6 @@ "AdvancedEffectSlideInLeftDescription": "De tekst schuift van buiten beeld links naar binnen, blijft staan en verdwijnt weer naar links", "AdvancedEffectSlideInRight": "Van rechts inschuiven", "AdvancedEffectSlideInRightDescription": "De tekst schuift van buiten beeld rechts naar binnen, blijft staan en verdwijnt weer naar rechts", - "AdvancedEffectFadeInOut": "In-/uitfaden", "AdvancedEffectFadeInOutDescription": "De tekst faadt in aan het begin en uit aan het einde van elke ondertitel", "AdvancedEffectWordFlip3D": "3D-woordflip", "AdvancedEffectWordFlip3DDescription": "Elk woord klapt met een 3D-flip en elastische pop naar binnen terwijl het wordt uitgesproken — moderne 'Shorts'-ondertitelstijl", diff --git a/src/ui/Assets/Languages/English.json b/src/ui/Assets/Languages/English.json index ad5126eb5d6..50ac98d62a1 100644 --- a/src/ui/Assets/Languages/English.json +++ b/src/ui/Assets/Languages/English.json @@ -1,6 +1,6 @@ { "title": "Subtitle Edit", - "version": "v5.3.0-rc1", + "version": "v5.3.0", "translatedBy": "", "cultureName": "en-US", "general": { @@ -595,6 +595,8 @@ "showStartColumn": "Show \"Start\" column", "showHideColumn": "Show \"Hide\" column", "showHistory": "Show history", + "clearHistory": "Clear history", + "removeFromHistory": "Remove from history", "showLayerColumn": "Show \"Layer\" column", "showPreview": "Show preview", "showShotChangesList": "Show shot changes list", @@ -712,6 +714,8 @@ "undelete": "Undelete", "underline": "Underline", "undo": "Undo", + "uninstall": "Uninstall", + "uninstalled": "Uninstalled", "unknown": "Unknown", "unknownNoInstallRecord": "Unknown (no install record)", "unknownSubtitleFormat": "Unknown subtitle format", @@ -824,8 +828,6 @@ "openAiCompatibleSttExtraHeaders": "Extra Headers", "openAiCompatibleSttTimeout": "Timeout (seconds)", "openAiCompatibleSttLanguage": "Language Hint", - "openAiCompatibleSttTemperature": "Temperature", - "openAiCompatibleSttPrompt": "Prompt", "openAiCompatibleSttModelRejectedHint": "The server rejected the model name. Not every OpenAI compatible endpoint takes a model - xAI's https://api.x.ai/v1/stt, for one, has no 'model' parameter at all. Try clearing the Model field.", "dashScopeSttRegion": "Region", "dashScopeSttEnableWords": "Word-level timestamps", @@ -851,7 +853,48 @@ "transcriptionProgressServerFormat": "Server: {0}", "transcriptionProgressModelFormat": "Model: {0}", "transcriptionProgressReceivedSegmentsFormat": "Received Segments ({0})", - "transcriptionProgressModelAuto": "(auto)" + "transcriptionProgressModelAuto": "(auto)", + "prompt": "Prompt", + "temperature": "Temperature", + "preset": "Preset", + "output": "Output", + "outputFormat": "Output format", + "other": "Other", + "timeCodeFormat": "Time code format", + "topBottomMargin": "Top/bottom margin", + "theme": "Theme", + "brightness": "Brightness", + "chooseColor": "Choose color", + "lineX": "Line {0}", + "playLine": "Play line", + "maxLineLength": "Max line length", + "maxCharsPerSec": "Max chars/sec", + "maxNumberOfLines": "Max number of lines", + "subtitles": "Subtitles", + "shotChanges": "Shot changes", + "chapters": "Chapters", + "audio": "Audio", + "interjections": "Interjections", + "blankLines": "Blank lines", + "editWholeText": "Edit whole text", + "noTextInClipboard": "No text in clipboard", + "noSubtitlesFoundTitle": "No subtitles found", + "replacedXOccurrences": "Replaced {0} occurrences", + "invalidRegularExpressionX": "Invalid regular expression: {0}", + "discardChangesTitle": "Discard changes?", + "downloadingXDotDotDot": "Downloading {0}...", + "importTimeCodesDotDotDot": "Import time codes...", + "original": "Original", + "nextChange": "Next change", + "previousChange": "Previous change", + "changeXOfY": "Change {0} of {1}", + "tooLong": "Too long", + "tooShort": "Too short", + "overlapping": "Overlapping", + "detail": "Detail", + "fixOcrErrors": "Fix OCR errors", + "runningOcrXY": "Running OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp requires the llama-server engine to be downloaded. Download now?" }, "main": { "menu": { @@ -890,6 +933,7 @@ "multipleReplace": "_Multiple replace...", "fillSelectedLinesWithClipboard": "Fill selected lines with clipboard text", "goToLineNumber": "_Go to line number...", + "commandPalette": "Command _palette...", "rightToLeftMode": "R_ight-to-left mode", "modifySelectionDotDotDot": "Modify _selection...", "tools": "_Tools", @@ -1082,12 +1126,15 @@ "charactersPerSecond": "Chars/second: {0}", "chooseColumn": "Choose column", "columnPaste": "Column paste", + "commandPaletteTitle": "Command palette", + "commandPaletteSearchPlaceholder": "Type to search commands...", + "commandPaletteNoCommandsFound": "No matching commands", "createdEmptyTranslation": "Created empty translation from current subtitle", "deleteText": "Delete text", "deleteTextAndShiftCellsUp": "Delete text and shift cells up", "endTimeMustBeAfterStartTime": "End time must be after start time.", "errorLoad7Zip": "This file seems to be a compressed 7-Zip file.\n\nSubtitle Edit cannot open compressed files.", - "errorLoadBinaryZeroes": "Sorry, this file contains only binary zeroes!\n\nIf you have edited this file with Subtitle Edit you might be able to find a backup via the menu item File -> Restore auto-backup...", + "errorLoadBinaryZeroes": "Sorry, this file contains only binary zeroes!\n\nIf you have edited this file with Subtitle Edit you might be able to find a backup via the menu item File -> Restore auto-backup...", "errorLoadGZip": "This file seems to be a compressed GZip file.\n\nSubtitle Edit cannot open compressed files.", "errorLoadLargeFile": "This file is too large to open as a subtitle file.", "errorLoadVideoFilePrompt": "This file seems to be a video file:\n{0}\n\nYou can open a video via \"Video -> Open video\" or by dragging and dropping a video onto the video player.\n\nDo you want to open it as a video file?", @@ -1116,7 +1163,6 @@ "loadingWaveInfoFromCache": "Loading wave info from cache...", "clickToGenerateWaveform": "Click to generate waveform", "waveformFfmpegNotFoundClickToSetUp": "FFmpeg not found - click the waveform to set up FFmpeg and generate the waveform", - "noTextInClipboard": "No text in clipboard", "numberOfLinesEvenlyDistributedX": "Evenly distributed {0} lines", "oneLineCopiedFromOriginal": "One line copied from original subtitle", "oneLineCopiedToOriginal": "One line copied to original subtitle", @@ -1212,7 +1258,6 @@ "toolXChangedYLines": "{0}: {1} lines changed", "transcriptionCompletedWithXLines": "Transcription completed with {0} lines", "openSubtitleFileX": "Open subtitle file \"{0}\"?", - "replacedXOccurrences": "Replaced {0} occurrences", "ffmpegDownloadedAndInstalledToX": "ffmpeg downloaded and installed to {0}", "nothingToSave": "Nothing to save", "formatLimitWarningTitle": "Format limits exceeded", @@ -1279,10 +1324,11 @@ "maxLengthErrorTeletextColored": "Line {0}-{1}: 36 (not {2}) should be maximum characters for double height colored text", "maxLengthErrorTeletextWhite": "Line {0}-{1}: 37 (not {2}) should be maximum characters for double height white text", "maxLengthErrorTeletextSingleHeight": "Line {0}: 38 (not {1}) should be maximum characters for single height white text", - "discSequenceNumber": "Disc sequence number" + "discSequenceNumber": "Disc sequence number", + "programme": "Programme", + "discAndDisplay": "Disc and display" }, "import": { - "importTimeCodes": "Import time codes...", "plainTextDotDotDot": "Plain text...", "titleImportPlainText": "Import plain text", "csvXlsxCustomColumnsDotDotDot": "CSV/XLSX/ODS with custom columns...", @@ -1316,12 +1362,10 @@ "dvdMenuIfoNoTitleSetsX": "No title sets (VTS_xx_0.IFO) found next to {0}", "dvdEncryptedXOfY": "{0} of the {1} subtitle packets are still CSS encrypted - these VOB files were copied without decrypting, so some subtitle images will be garbled.\n\nDecrypt the DVD with a DVD ripping tool first for a clean result.\n\nContinue anyway?", "splitTextAt": "Split text at", - "blankLines": "Blank lines", "oneLineIsOneSubtitle": "One line is one subtitle", "twoLinesAreOneSubtitle": "Two lines are one subtitle", "importFilesDotDotDot": "Import files...", "multipleFiles": "Import from multiple text files (one file is one subtitle)", - "maxLineLength": "Max line length", "mergeShortLines": "Merge short lines", "fixed": "Fixed", "numberOfSubtitlesX": "Number of subtitles: {0}", @@ -1339,12 +1383,12 @@ "forcedAlignerIsolatingSpeech": "Isolating speech... {0}", "forcedAlignerIsolatingSpeechFailed": "Could not isolate the speech - end times were set from reading time instead.", "forcedAlignerModel": "Aligner model", - "forcedAlignerDownloadEngine": "Download / update engine..." + "forcedAlignerDownloadEngine": "Download / update engine...", + "forcedAlignerEstimatedXOfY": "{0} of {1} lines could not be aligned and were placed by reading time - their time codes are only estimated. The script is probably longer than what is spoken in the video." }, "export": { "exportImagesProfiles": "Export images profiles", "leftRightMargin": "Left/right margin", - "topBottomMargin": "Top/bottom margin", "lineSpacingPercent": "Line spacing %", "paddingLeftRight": "Padding left/right", "paddingTopBottom": "Padding top/bottom", @@ -1366,14 +1410,22 @@ "exportDvbTeletextSubtitleType": "Subtitle type", "exportDvbTeletextSubtitleTypeNormal": "Normal", "exportDvbTeletextSubtitleTypeHearingImpaired": "Hearing impaired", + "exportPacCodePage": "Choose PAC code page", + "exportPacSecondaryCodePage": "Secondary code page", "customTextFormatsDotDotDot": "_Custom text formats...", "plainTextDotDotDot": "_Plain text...", + "dialogueListDotDotDot": "Excel dialogue list (.xlsx)...", + "titleExportDialogueList": "Export Excel dialogue list", + "dialogueListLineBreaksInCell": "Keep line breaks inside the cell (off: join lines with \" | \")", + "dialogueListHeaderRow": "Header row", + "dialogueListFramesFormat": "hh:mm:ss:ff (frames)", + "dialogueListNoColumns": "Choose at least one column.", + "dialogueListEnd": "End", "customTextFormats": "Custom text formats", "titleExportCustomFormat": "Export custom text format", "editCustomFormat": "Edit custom text format", "newCustomFormat": "New custom text format", "deleteSelectedCustomTextFormatX": "Delete selected custom text format \"{0}\"?", - "timeCodeFormat": "Time code format", "newLineFormat": "New line format", "pleaseEnterNameForTheCustomFormat": "Please enter name for the custom format", "titleExportPlainText": "Export plain text", @@ -1385,6 +1437,8 @@ "addLineBetweenSubtitles": "Add line between subtitles", "titleExportDCinemaInteropPng": "D-Cinema interop/png", "titleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", + "titleExportDCinemaSmpte2014Mxf": "D-Cinema SMPTE 2014 (MXF)", + "titleExportDCinemaSmpte2014PngMxf": "D-Cinema SMPTE 2014/png (MXF)", "imageBasedSubtitleSaved": "Image-based subtitle saved", "fullFrameImage": "Full frame image", "fullFrameImageHint": "Make each image the size of the video frame, with the subtitle in its place", @@ -1402,7 +1456,6 @@ "plane3DXNoDepth": "{0} (no depth values)", "textEffect": "Text effect", "textEffectSettingsTitle": "Text effect settings", - "textEffectPreset": "Preset", "textEffectStrength": "Strength", "textEffectLetterSpacing": "Letter spacing", "textEffectArcBend": "Curve", @@ -1475,7 +1528,6 @@ "gapMaximum": "Gap - maximum: {0:#,##0} ms", "gapAverage": "Gap - average: {0:#,##0.##} ms", "gapExceedingMinimum": "Gap - below minimum ({0:#,##0} ms): {1} ({2:0.00}%)", - "subtitles": "Subtitles", "words": "Words", "totalDurationShort": "Total duration", "timingAndPacing": "Timing and pacing", @@ -1505,7 +1557,6 @@ "restoreXFromY": "Do you want to restore \"{0}\" from {1}?", "deleteAllSubtitleBackups": "Do you want to delete all subtitle backup files?", "deleteAll": "Delete all", - "subtitles": "Subtitles", "settingsBackupInfo": "Settings.json is backed up when Subtitle Edit starts, at most once every {0} day(s) and only if the settings have changed. The newest {1} backups are kept.", "settingsBackupInfoEveryStart": "Settings.json is backed up every time Subtitle Edit starts, if the settings have changed. The newest {0} backups are kept.", "settingsBackupOff": "Automatic settings backup is turned off (Options → Settings → File).", @@ -1535,14 +1586,18 @@ "startTime": "Start time", "fontId": "Font ID", "fontUri": "Font URI", - "chooseColor": "Choose color", "fontEffect": "Font effect", "effectColor": "Effect color", - "topBottomMargin": "Top/bottom margin", "fadeUpTime": "Fade up time", "fadeDownTime": "Fade down time", "zPosition": "Z-position", - "zPositionHelp": "Positive numbers move text away, negative numbers move text closer, if z-position is zero then it's 2D" + "zPositionHelp": "Positive numbers move text away, negative numbers move text closer, if z-position is zero then it's 2D", + "fontFile": "Font file", + "chooseFontFile": "Choose font file", + "fontFileMissing": "Choose the TrueType/OpenType font file to embed in the MXF track file.", + "reelDuration": "Reel duration", + "reelDurationHint": "HH:MM:SS:FF - the picture length, which every asset of a DCP reel must have. Empty = until the last subtitle.", + "reelDurationInvalid": "Reel duration must be empty or HH:MM:SS:FF." }, "webVtt": { "setStylesForSelectedLinesTitle": "Set WebVTT styles for selected lines", @@ -1630,7 +1685,6 @@ "saveCompareHtmlTitle": "Save compare HTML file", "pickMatroskaTrackX": "Pick Matroska track - {0}", "pickTransportStreamTrackX": "Pick transport stream track - {0}", - "chapters": "Chapters", "dvdVobFilesMissingX": "VOB files missing ({0}% found)", "pickMp4TrackX": "Pick MP4 track - {0}", "pickMxfTrackX": "Pick MXF track - {0}", @@ -1643,7 +1697,6 @@ "propertyDefaultStyle": "Default style", "propertyDefaultRegion": "Default region", "propertyStyleAttributeName": "Style attribute name", - "propertyTimeCodeFormat": "Time code format", "propertyTopOrigin": "Top origin", "propertyTopExtent": "Top extent", "propertyBottomOrigin": "Bottom origin", @@ -1674,8 +1727,8 @@ "moreThanTwoLines": "More than two lines", "bookmarked": "Bookmarked", "forced": "Forced", + "hasErrors": "Has errors (highlighted in the list)", "bookmarkContains": "Bookmark contains", - "blankLines": "Blank lines", "hearingImpaired": "Hearing impaired (SDH)", "hearingImpairedBrackets": "Brackets [...]", "hearingImpairedCurlyBrackets": "Curly brackets {...}", @@ -1685,8 +1738,8 @@ "hearingImpairedUppercaseLine": "Uppercase line", "hearingImpairedLineContains": "Line contains", "hearingImpairedMusicSymbols": "Only music symbols", - "hearingImpairedInterjections": "Interjections", "hearingImpairedSettingsHint": "Details come from Tools > Remove text for hearing impaired", + "selection": "Selection", "selectionNew": "New selection", "selectionAdd": "Add to selection", "selectionSubtract": "Subtract from selection", @@ -1708,7 +1761,6 @@ "deleteRuleConfirm": "Delete rule '{0}'?", "findWhat": "Find what", "descriptionOptional": "Description (optional)", - "invalidRegularExpressionX": "Invalid regular expression: {0}", "regularExpressionTooSlowX": "Regular expression gave up after {0} seconds - the rule is skipped, try a simpler pattern", "moveToCategory": "Move to category" }, @@ -1724,8 +1776,7 @@ "replaceInTextAndOriginal": "Text and original text", "replaceInTextOnly": "Text only", "replaceInOriginalOnly": "Original text only", - "replacedOneOccurrence": "Replaced one occurrence", - "replacedXOccurrences": "Replaced {0} occurrences" + "replacedOneOccurrence": "Replaced one occurrence" }, "regularExpressionContextMenu": { "wordBoundary": "Word boundary (\\b)", @@ -1748,7 +1799,6 @@ "pleaseSelectExactlyOneSubtitle": "Please select exactly one subtitle." }, "sourceView": { - "discardChangesTitle": "Discard changes?", "discardChanges": "The source text has been changed.\nDiscard the changes?", "xLinesYSubtitles": "{0} lines, {1} subtitles", "xLinesYSubtitlesZErrors": "{0} lines, {1} subtitles, {2} error(s)", @@ -1782,9 +1832,7 @@ "categoryGrammar": "Grammar", "categoryPunctuation": "Punctuation", "categoryCasing": "Casing", - "categoryOther": "Other", "xNeedACloserLook": "{0} suggestion(s) need a closer look", - "lineX": "Line {0}", "linesXToY": "Lines {0}-{1}", "largeChangeWarning": "Large change - looks like a rewrite, review carefully", "mismatchWarning": "Does not resemble the original - may belong to a different line", @@ -1987,12 +2035,10 @@ "title": "Beautify time codes", "snapToFrames": "Snap to Frames", "minDuration": "Min Duration (ms)", - "original": "Original", "beautified": "Beautified", "subtitlesCount": "Subtitles", "changedCount": "Changed", "shotChangesCount": "Shot changes", - "changeXOfY": "Change {0} of {1}", "noChanges": "No changes — every cue is already on target", "snappedToShotChange": "snapped to shot change", "snappedToFrame": "snapped to frame", @@ -2000,8 +2046,6 @@ "minDurationEnforced": "min. duration enforced", "maxDurationEnforced": "max. duration enforced", "noReasonNote": "refined by profile rules", - "previousChange": "Previous change", - "nextChange": "Next change", "editProfile": "Edit profile...", "batchSnapToShotChanges": "Snap cues to shot changes (if available)", "batchFrameRateFromVideo": "Use frame rate from video file with same name as subtitle file", @@ -2044,7 +2088,6 @@ "showSpeechOnly": "Show speech only", "showSpeechOnlyHint": "Draw the aligned waveform from the audio with music and sound effects removed; the original waveform stays as it is, for comparison. Available once the speech has been isolated - here, or with \"Show speech only\" in the main window's waveform.", "align": "Align", - "original": "Original", "aligned": "Aligned", "intro": "Pick an aligner and press \"Align\" to listen for every line in the audio and tighten its time codes.", "extractingAudio": "Extracting audio...", @@ -2056,9 +2099,6 @@ "toCheckX": "To check: {0}", "largeMovesToCheckX": "{0} line(s) would move a long way on their own and are left unticked - listen to them (F5 plays the aligned line, Shift+F5 the original) and tick the ones that are right.", "linesToCheckX": "{0} line(s) are left unticked to check - listen to them (F5 plays the aligned line, Shift+F5 the original) and tick the ones that are right.", - "changeXOfY": "Change {0} of {1}", - "previousChange": "Previous change", - "nextChange": "Next change", "startShift": "Start", "endShift": "End", "statusRetimed": "Re-timed", @@ -2070,12 +2110,10 @@ "statusFailed": "Kept - aligner failed", "statusAdjustedByHand": "Adjusted by hand", "alignedWaveformHint": "Drag a line to move it, or drag its edges to change its start or end.", - "playLine": "Play line", "undoAdjustment": "Undo adjustment", "playPause": "Play / pause", "playAligned": "Aligned", "playAlignedHint": "Play the selected line with its aligned time codes", - "apply": "Apply", "applyHint": "Untick a line to keep its original time codes. Double-click a line to play it. Lines can also be moved or resized in the aligned waveform." }, "beautifyTimeCodesProfile": { @@ -2199,10 +2237,8 @@ "addVideoFiles": "Add video files", "skipVideoFiles": "Subtitle files only", "doNotAskAgainVideoFiles": "Do not ask again (change in Batch convert settings)", - "settingsSectionOutput": "Output", "settingsSectionAddingFiles": "Adding files", "settingsSectionImageBasedSubtitles": "Image-based subtitles (OCR)", - "settingsSectionOther": "Other", "keepSourceFileTimestamp": "Keep source file date/time on output files", "preventSleepWhileConverting": "Prevent computer from sleeping while converting", "scanningFolderX": "Scanning {0}...", @@ -2227,7 +2263,6 @@ "xNotProcessed": "{0:#,###,##0} not processed", "removeUnicodeControlCharactersTitle": "Remove Unicode control characters", "removeUnicodeControlCharactersInfo": "Removes the invisible Unicode direction control characters (LRM, RLM, LRE, RLE, PDF, LRO and RLO) from the text, and replaces no-break spaces with normal spaces.", - "preset": "Preset", "savePresetDotDotDot": "Save preset...", "deletePreset": "Delete preset", "presetName": "Preset name", @@ -2268,7 +2303,6 @@ "loadFromCurrentText": "Load from current (text)", "loadFromCurrentTranslation": "Load from current (translation)", "loadFromFile": "Load from file...", - "outputFormat": "Output format", "outputFormatSubRip": "SubRip (.srt)", "outputFormatAssa": "Advanced Sub Station Alpha (.ass)", "style1": "Style 1", @@ -2279,7 +2313,8 @@ "title": "Split subtitle", "numberOfEqualParts": "Number of equal parts", "saveSplitParts": "_Save split parts", - "xPartsSavedInFormatYToFolder": "{0} parts saved in format {1} to folder:" + "xPartsSavedInFormatYToFolder": "{0} parts saved in format {1} to folder:", + "splitBy": "Split by" }, "splitBreakLongLines": { "title": "Split/rebalance long lines", @@ -2336,13 +2371,9 @@ "ellipsesNotThreeDots": "Use ellipses (not three dots)", "onlyAllowedGlyphs": "Only allowed glyphs", "italics": "Italics", - "maxCharsSec": "Max chars/sec", "maxDuration": "Max duration", - "maxLineLength": "Max line length", "minDuration": "Min duration", - "maxNumberOfLines": "Max number of lines", "oneToTenSpellOut": "One to ten spell out", - "shotChanges": "Shot changes", "startNumberSpellOut": "Start number spell out", "textforHiUseBrackets": "Text for HI, use brackets", "twoFrameGrap": "Two frame gap", @@ -2391,7 +2422,6 @@ "adjustBrightnessDotDotDot": "Adjust brightness...", "adjustAlphaDotDotDot": "Adjust alpha...", "cropImages": "Crop images", - "importTimeCodes": "Import time codes...", "setText": "Set text", "screenWidth": "Screen width", "screenHeight": "Screen height", @@ -2399,7 +2429,6 @@ "resetToDefaults": "Reset to defaults", "alphaAdjustmentInfo": "Alpha adjustment: Add/subtract from alpha channel.\nPreview updates automatically and shows with checkered background to visualize transparency.", "adjustBrightness": "Adjust brightness", - "brightness": "Brightness", "contrast": "Contrast", "gamma": "Gamma", "brightnessAdjustmentInfo": "Adjust the sliders to modify brightness, contrast, and gamma.\nPreview updates automatically and shows the first selected subtitle.", @@ -2447,7 +2476,6 @@ "useVideoFrameRateXInsteadOfY": "The video's frame rate is {0}, but the subtitle is set to {1}.\n\nUse the video's frame rate ({0})?" }, "removeTextForHearingImpaired": { - "interjections": "Interjections", "skipIfStartWith": "Skip if start with", "removeTextBetween": "Remove text between", "brackets": "Brackets", @@ -2473,8 +2501,6 @@ "pickFontNameTitle": "Choose font name", "pickFontNameInstalledFonts": "Installed fonts", "pickFontNameCollectedFonts": "Collected fonts", - "colorPickerTitle": "Choose color", - "colorPickerBrightness": "Brightness", "filterLayersTitle": "Filter layers for display", "filterLayersHideFromWaveform": "Hide from waveform/spectrogram", "filterLayersHideFromSubtitleGrid": "Hide from subtitle grid", @@ -2488,6 +2514,7 @@ "spellCheck": "Spell check", "getDictionariesTitle": "Spell check - get dictionaries", "getDictionaryInstructions": "Choose your language and click download", + "uninstallDictionaryX": "Uninstall dictionary \"{0}\"?", "addNameToUserDictionary": "Add name to user dictionary", "addNameToNamesList": "Add name to names list", "addNamesToNamesList": "Add names to names list", @@ -2515,7 +2542,6 @@ "pickLiveSpellCheckDictionary": "Pick live spell check dictionary", "undoX": "Undo: {0}", "playCurrentLineHint": "Play the current line in the video player and pause at its end", - "editWholeText": "Edit whole text", "editWholeTextTitle": "Spell check - Edit whole text", "continueFromCurrentLine": "Continue spell check from the current line?\n\nYes = continue from the current line\nNo = start from the beginning", "continueFromTop": "Spell check reached the end of the subtitle.\n\nContinue from the top?", @@ -2550,8 +2576,6 @@ "bitRate": "Bit rate", "totalBitRateX": "Total bit rate: {0}", "sampleRate": "Sample rate", - "audio": "Audio", - "preset": "Preset", "tune": "Tune", "pixelFormat": "Pixel format", "crf": "CRF", @@ -2566,7 +2590,10 @@ "oneBox": "One box", "logoInfo": "Pick a PNG image and drag it to position it on the video.", "noSubtitlesGenerateAnyway": "There are no subtitle lines to burn in.\n\nGenerate the video without subtitles?", - "noSubtitlesInXItemsGenerateAnyway": "{0} batch item(s) have no subtitle lines to burn in.\n\nGenerate those videos without subtitles?" + "noSubtitlesInXItemsGenerateAnyway": "{0} batch item(s) have no subtitle lines to burn in.\n\nGenerate those videos without subtitles?", + "subtitleStyle": "Subtitle style", + "videoOutput": "Video output", + "targetSize": "Target size" }, "videoTransparent": { "title": "Generate transparent video with subtitles" @@ -2591,7 +2618,7 @@ "detectSpeakersNeedsNewerCrispAsr": "\"Detect speakers\" needs Crisp ASR v{0} or newer, but v{1} is installed.\n\nUpdate Crisp ASR (the gear button next to the engine) or turn off \"Detect speakers\".", "xNeedsNewerCrispAsr": "{0} needs Crisp ASR v{1} or newer, but v{2} is installed.\n\nDownload and install the update now?", "vad": "VAD", - "vadHint": "Voice activity detection: only the speech is transcribed, cut where the speaker pauses.\nAuto: Silero, and only for the engines that need it (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, WebRTC: always on, for every Crisp ASR engine. FireRedVAD is the most accurate.\nIndex-Echo always uses Silero. --vad, --vad-model or --chunk-seconds in the advanced settings take precedence.", + "vadHint": "Voice activity detection: only the speech is transcribed, cut where the speaker pauses.\nAuto: Silero, and only for the engines that need it (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: always on, for every Crisp ASR engine. FireRedVAD is the most accurate, Whisper-VAD gives the fewest, cleanest cuts but is the slowest.\nIndex-Echo always uses Silero. --vad, --vad-model or --chunk-seconds in the advanced settings take precedence.", "inputLanguage": "Input language", "advancedWhisperSettings": "Advanced speech-to-text parameters", "downloadingSpeechToTextEngine": "Downloading speech-to-text engine", @@ -2628,11 +2655,8 @@ "qualityReportLinesChecked": "Lines checked", "qualityReportIssuesFound": "Issues found", "qualityReportLinesRemoved": "Lines removed", - "qualityReportTooShort": "Too short", "qualityReportTooShortHint": "Shorter than the minimum display time, or reading speed above the maximum", - "qualityReportTooLong": "Too long", "qualityReportTooLongHint": "Longer than the maximum display time, or very few words over a long time (often a hallucination)", - "qualityReportOverlap": "Overlapping", "qualityReportOverlapHint": "Ends after the next line starts", "qualityReportNonSpeech": "Non-speech", "qualityReportNonSpeechHint": "Only a sound or music description, like \"[Music]\"", @@ -2641,7 +2665,6 @@ "qualityReportRemoved": "Removed", "qualityReportAll": "All", "qualityReportIssue": "Issue", - "qualityReportDetail": "Detail", "qualityReportTip": "Lines are listed with their numbers in the new subtitle. Use \"Fix common errors\" or the post-processing settings to fix more automatically, or try another model/engine if many lines are affected.", "qualityReportDoNotShowAgain": "Do not show this report again", "engineSettings": "Speech-to-text engine settings", @@ -2661,7 +2684,6 @@ "testVoice": "Test voice", "addAudioToVideoFile": "Add audio to video file", "engineAndVoice": "Engine & voice", - "output": "Output", "xLinesFromY": "{0} lines from {1}", "xLines": "{0} lines", "xVoices": "{0} voices", @@ -2686,11 +2708,9 @@ "instructions": "Instructions", "instructionsHint": "Optional speaking style, e.g. \"Speak in a calm, warm voice\". Sent only to models that support it (not tts-1/tts-1-hd)", "openAiSpeedHint": "Speech speed from 0.25 to 4.0 (1.0 is normal). Not every model supports it", - "outputFormat": "Output format", "outputFormatHint": "Audio format requested from the server. \"Auto\" asks for MP3 and switches to PCM for models that only return PCM (e.g. Gemini TTS)", "regenerateAudio": "Regenerate audio", "autoContinuePlaying": "Auto-continue playing", - "playLine": "Play line", "fitDurationToGeneratedAudio": "Fit duration to generated audio", "resetTiming": "Reset timing", "addingAudioToVideoFileDotDotDot": "Adding audio to video file...", @@ -2752,7 +2772,6 @@ "installToEngine": "Install to engine", "downloadAndInstall": "Download and install", "selectAtLeastOneVoicePack": "Select at least one voice pack", - "downloadingXDotDotDot": "Downloading {0}...", "installingXDotDotDot": "Installing {0}...", "xVoicesInstalledYSkipped": "{0} voices installed ({1} already present)", "useSpeechToTextDotDotDot": "Use speech-to-text...", @@ -2761,7 +2780,6 @@ "autoCastSpeakersSubtitle": "Name each speaker - the name becomes the actor in the subtitle and the name of the cloned voice. Give two speakers the same name to merge them into one voice.", "autoCastFoundXSpeakersInYLines": "{0} speakers in {1} lines", "autoCastLines": "Lines", - "autoCastAudio": "Audio", "autoCastSays": "Says", "autoCastNeedsVideo": "Finding the voices needs an open video to listen to.", "autoCastNoSpeakersFound": "No speakers were found. The transcription has to come from a speech-to-text engine that tells speakers apart, such as Crisp ASR MOSS Diarize.", @@ -2789,7 +2807,6 @@ "voiceCloneConsentDeclined": "Voice cloning is not available until these terms are accepted.", "advancedTtsSettings": "Advanced TTS settings", "advancedTtsAudioProcessing": "Audio processing", - "advancedTtsOutput": "Output", "advancedTtsVoiceCloning": "Voice cloning", "cleanCloneReferences": "Clean voice-clone references (Sidon)", "cleanCloneReferencesDescription": "Removes music, noise and reverb from the audio a voice is cloned from: clips taken from the video and recordings imported in the voice manager. Uses the Sidon speech restoration model on audio.cpp (940 MB download). The cloned voice no longer copies the background, but very quiet or overlapping speech can come out muffled.", @@ -2808,6 +2825,9 @@ "removeOriginalSpeechDescription": "Keeps the music and sound effects of the original video but removes its speech, and mixes the new speech over that. Takes about as long as the video itself with a GPU, and many times longer without one. With audio ducking on, its volume applies to the music and effects. Only applies when the speech is added to the video file.", "removingOriginalSpeech": "Removing original speech...", "removeOriginalSpeechFailed": "Could not remove the original speech - the speech was added to the video without it.", + "speechRemovalModelDescription": "Best quality keeps the most of the music and sound effects. Fast is about three times quicker, with a little more of the music lost.", + "speechRemovalBestQuality": "Best quality (Mel-Band RoFormer)", + "speechRemovalFast": "Fast (HTDemucs)", "videoTruncatedWarning": "The picture in the new video file stops after {0}, but the original video is {1} long - the picture will freeze while the sound continues.\n\nThe file was kept. See error-log.txt in the Subtitle Edit data folder for the ffmpeg output.", "originalVolumePercent": "Original volume %", "vadSilenceCompression": "VAD silence compression", @@ -2892,13 +2912,10 @@ "shotChangesList": "Shot changes list", "shotChangesClearQuestion": "Are you sure you want to clear all shot changes?", "deleteSelectedShotChangeQuestion": "Are you sure you want to delete the selected shot change?", - "shotChanges": "Shot changes", "exportShotChanges": "Export shot changes" }, "chapters": { - "title": "Chapters", "chaptersDotDotDot": "Chapters...", - "chapters": "Chapters", "selectedChapter": "Selected chapter", "chapterTitle": "Chapter title", "startTime": "Start time", @@ -2919,7 +2936,6 @@ "adjustTimes": "Adjust times", "shiftAllTimes": "Shift all times", "shiftAllTimesDescription": "Move every chapter forward or backward by the same amount.", - "scaleTimes": "Change frame rate", "scaleTimesDescription": "Scale every chapter time from one frame rate to another.", "fromFrameRate": "From", "toFrameRate": "To", @@ -2953,13 +2969,10 @@ "startOcr": "Start OCR", "extractingFramesX": "Extracting image frames... {0}%", "analyzingFramesXY": "Analyzing frames... {0}/{1}", - "runningOcrXY": "Running OCR... {0}/{1}", - "noLinesFoundTitle": "No subtitles found", "noLinesFoundMessage": "No text was found in the scan area - try adjusting the scan area, engine, or brightness minimum.", "ocrStoppedEarlyMessage": "The OCR engine stopped before all frames were read, so the lines found so far are kept and the rest are missing.{0}{0}{1}", "linesFoundX": "{0} lines found", "refiningTimingXY": "Refining timing... {0}/{1}", - "fixOcrErrors": "Fix OCR errors", "editLineX": "Edit line {0}", "downloadDictionaryHint": "Download a spell check dictionary...", "framesPerSecondHint": "How many frames per second are scanned. 5 covers normal subtitles; higher catches very short lines and tightens grouping, but costs more OCR time.", @@ -2988,8 +3001,6 @@ "backgroundMusic": { "title": "Generate background music", "generateBackgroundMusicDotDotDot": "Generate background music...", - "preset": "Preset", - "prompt": "Prompt", "tempoBpm": "Tempo (BPM)", "generateSeconds": "Generate (seconds)", "seed": "Seed", @@ -3026,6 +3037,7 @@ "outputLengthTextToSpeech": "Follows the generated speech - the music loops seamlessly and dips while someone talks", "addBackgroundMusic": "Add background music", "addBackgroundMusicHint": "Generate music locally with ACE-Step 1.5 and mix it under the speech - it dips while someone talks", + "music": "Music", "generatingBackgroundMusicDotDotDot": "Generating background music...", "mixingBackgroundMusicDotDotDot": "Mixing background music..." }, @@ -3080,6 +3092,15 @@ "remuxVideoVolumeX": "Volume {0}%", "remuxVideoFastStart": "Optimize for web streaming (move index to front - slower)", "embedSubtitlesDotDotDot": "Add/remove embedded subtitles...", + "syncAudioTrackDotDotDot": "Sync audio track...", + "syncAudioTrackTitle": "Sync audio track", + "syncAudioTrackAudioTrack": "Audio track", + "syncAudioTrackOffset": "Offset (ms)", + "syncAudioTrackHint": "Positive values play the audio later, negative values earlier. The saved video is a copy with only this track moved - nothing is re-encoded.", + "syncAudioTrackPreviewNeedsMpv": "The live preview of the offset needs the mpv video player (Options > Settings > Video) - the saved video gets the offset all the same.", + "syncAudioTrackNoAudio": "The video has no audio track.", + "syncAudioTrackSaveVideoDotDotDot": "Save video...", + "syncAudioTrackSaving": "Saving video...", "generateTimeCodes": "Generate time codes", "checkeredImage": "Checkered image", "promptForFfmpegParamsAndGenerate": "Prompt for ffmpeg parameters and generate", @@ -3116,11 +3137,13 @@ "cutVideoTransitionRadial": "Radial", "cutVideoTransitionPixelize": "Pixelize", "cutVideoTransitionBlur": "Blur", + "cutVideoSegments": "Segments", + "cutVideoTransitions": "Transitions", + "cutVideoCutType": "Cut type", "importCurrentSubtitle": "Import current subtitle", "addRemoveEmbeddedSubtitlesTitle": "Add/remove embedded subtitles", "addRemoveEmbeddedSubtitlesMp4Title": "Add/remove embedded subtitles (MP4)", "addCurrentSubtitle": "Add current subtitle", - "embeddedTrackNoSubtitlesFoundTitle": "No subtitles found", "embeddedTrackNoSubtitlesFoundMessage": "The selected subtitle file does not contain any subtitles.", "embeddedTrackNoTracksTitle": "No tracks added", "embeddedTrackNoTracksMessage": "Add one or more subtitle tracks, or load a video that already has embedded subtitles.", @@ -3132,6 +3155,7 @@ "embeddedTrackGeneratingVideo": "Generating video...", "mp4FilesFilter": "MP4 files", "embeddedTracksPickVideoHint": "Choose a video file, or drop one here, to see its subtitle tracks.", + "embeddedTracks": "Tracks", "viewMatroskaTrackX": "View Matroska track - {0}", "resolutionSeparator": "x", "openFromUrlTitle": "Open video file from URL", @@ -3145,6 +3169,10 @@ "openFromUrlDownloadSubtitles": "Download subtitles", "openFromUrlDownloadVideo": "Download video", "openFromUrlIncludeAutoGeneratedSubtitles": "Include auto-generated subtitles (original language)", + "openFromUrlCookiesFromBrowser": "Cookies from browser", + "openFromUrlCookiesFromBrowserHint": "Send the cookies of a browser where you are signed in to YouTube - needed when YouTube asks to confirm you are not a bot.", + "openFromUrlBotCheckHint": "YouTube wants to confirm you are not a bot. Sign in to YouTube in your browser, then pick that browser in \"Cookies from browser\" in the \"Open video file from URL\" window and try again (Firefox works best). Turning off a VPN can also help.", + "openFromUrlBotCheckHintWithBrowserX": "YouTube still wants to confirm you are not a bot. Make sure you are signed in to YouTube in {0}. Chrome and Edge on Windows often block reading their cookies - close the browser first, or try Firefox.", "assaStyleWillBeUsed": "Current ASSA style will be used\n\nChange subtitle format if\nyou want to set styles here", "pickOnlineSubtitleTitle": "Pick subtitle to download", "outputSettingsTitle": "Output settings", @@ -3278,7 +3306,6 @@ "blockCopyGetFromClipboard": "Get text from clipboard (from translator/AI)", "reCopyTextToClipboard": "Re-copy text to clipboard (for translator/AI)", "blockXOfY": "Block {0} of {1}", - "noTextInClipboard": "No text in clipboard", "textInClipboardIsSameAsSourceText": "The text in clipboard is the same as the source text, please try again.", "lineMerge": "Line merge", "delayInSecondsBetweenRequests": "Delay in seconds between requests", @@ -3312,7 +3339,6 @@ "keepLineBreaks": "Keep line breaks", "samplingParameters": "Sampling parameters", "minusOneMeansDefault": "-1 = model/server default", - "temperature": "Temperature", "topP": "Top-p", "topK": "Top-k", "repeatPenalty": "Repeat penalty", @@ -3326,7 +3352,6 @@ "customPromptHint": "Custom instructions ({0} = source language, {1} = target language); empty = built-in prompt", "editTranslationHint": "Click the selected row's translation to edit it (Enter saves, Escape cancels)", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp requires the llama-server engine and a translation model to be downloaded. Download now?", - "llamaCppDownloadEnginePrompt": "llama.cpp requires the llama-server engine to be downloaded. Download now?", "llamaCppDownloadModelPrompt": "llama.cpp requires the selected translation model to be downloaded. Download now?" }, "options": { @@ -3388,7 +3413,6 @@ "gridAlternatingRowColor": "Alternating row color (light theme)", "gridAlternatingRowColorDark": "Alternating row color (dark theme)", "uiFont": "UI font", - "theme": "Theme", "iconTheme": "Icon theme", "darkThemeForegroundColor": "Dark theme foreground color", "darkThemeBackgroundColor": "Dark theme background color", @@ -3398,7 +3422,6 @@ "spellCheckHighlightColor": "Spell check highlight color", "singleLineMaxLength": "Single line max length", "optimalCharsPerSec": "Optimal chars/sec", - "maxCharsPerSec": "Max chars/sec", "maxWordsPerMin": "Max words/min", "minDurationMs": "Min duration (ms)", "maxDurationMs": "Max duration (ms)", @@ -3409,7 +3432,6 @@ "minGapCalculateFrames": "Min. gap in frames", "minGapCalculateXFramesAtYGivesZMs": "{0} frames at a frame rate of {1} gives {2} milliseconds.", "minGapCalculateUseXAsNewGap": "Use \"{0}\" milliseconds as new minimum gap?", - "maxLines": "Max number of lines", "unbreakSubtitlesShortThan": "Unbreak subtitles shorter than", "autoBreakLineEndingEarly": "Auto-break early for end of sentence (.!?)", "autoBreakCommaBreakEarly": "Auto-break early for comma", @@ -3450,6 +3472,15 @@ "colorOverlap": "Color time code overlap", "colorGapTooShort": "Color if gap is too short", "errorBackgroundColor": "Error background color", + "customErrorRules": "Custom error rules", + "customErrorRulesHighlight": "Color lines matching a custom error rule", + "customErrorRulesHint": "A line whose text matches an enabled rule's regular expression is colored with the rule's color and counts as an error (List errors, Go to next error). The first matching rule decides the color.", + "customErrorRuleSelected": "Selected rule", + "customErrorRuleTest": "Test", + "customErrorRuleTestMatch": "The selected rule matches the sample text", + "customErrorRuleTestNoMatch": "The selected rule does not match the sample text", + "customErrorRulesOn": "Custom error rules: on", + "customErrorRulesOff": "Custom error rules: off", "waveformDrawGridLines": "Draw grid lines", "waveformUseSkiaRenderer": "Use experimental fast renderer", "waveformCenterVideoPositionAlsoWhenPaused": "Center video position also while paused", @@ -3507,6 +3538,8 @@ "videoControlsPositionText": "Position / duration text", "videoControlsVideoFileName": "Video file name", "videoControlsPlayerName": "Video player name", + "videoControlsPreviousSubtitle": "Previous subtitle", + "videoControlsNextSubtitle": "Next subtitle", "fullscreenHideControls": "Hide video controls in full-screen", "showSecondarySubtitleDialog": "Show style dialog when opening a second subtitle file", "rememberSecondarySubtitleFile": "Remember second subtitle file", @@ -3561,9 +3594,12 @@ "timeCodeModeTime": "Time (hh:mm:ss,zzz)", "timeCodeModeFrames": "Frames (hh:mm:ss:ff)", "timeCodeModeFrameNumbers": "Frame numbers", + "frameModeSnapToVideoFrames": "Store times on video frames (not frames within each second)", "textBoxLimitNewLines": "Limit number of lines in subtitle text box", + "textBoxAutoWrapWhileTyping": "Auto-wrap while typing", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - Software rendering (slow)", + "mpvMetalRendering": "libmpv - Metal (experimental, needs restart)", "mpvWidRendering": "libmpv - Native Window ID rendering", "waveFormsAndSpectrogramFoldersContainsX": "\"Waveforms\" and \"spectrogram\" folders contains {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "Delete \"Waveforms\" and \"Spectrogram\" files?", @@ -3709,7 +3745,6 @@ "customShortcutPickCommand": "Please select a command to run.", "customShortcutEnterText": "Please enter the text to insert.", "customShortcutEnterFind": "Please enter the text to find.", - "customShortcutInvalidRegexX": "Invalid regular expression: {0}", "customShortcutStepsHint": "Steps run from top to bottom. Text steps work on the selected lines; commands that open a window continue after it closes.", "activeIn": "Active in", "activeInEverywhere": "Everywhere", @@ -3794,6 +3829,12 @@ "moveTextFromCursorToNextAndGoToNext": "Move text after cursor position to next subtitle and go to next", "moveTextFromCursorToNextAndGoToNextAndPlay": "Move text after cursor position to next subtitle, go to next and play", "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "Move text after cursor position to next subtitle, go to next, play it and pause at its end", + "moveTextBeforeCursorToPrevious": "Move text before cursor position to previous subtitle", + "showCustomErrorRules": "Show custom error rules", + "toggleCustomErrorRules": "Toggle custom error rules coloring on/off", + "splitAtVideoPositionAndPlay": "Split line at video position, go to second part and play", + "splitAtTextBoxCursorPositionAndPlay": "Split line at text box cursor position, go to second part and play", + "splitAtVideoAndTextBoxPositionAndPlay": "Split line at video and text box position, go to second part and play", "breakAtFirstSpaceFromCursor": "Break at first space from cursor position", "breakAtFirstSpaceFromCursorAndGoToNext": "Break at first space from cursor position and go to next", "toggleFocusGridAndWaveform": "Toggle focus between subtitle grid and waveform/spectrogram", @@ -3962,6 +4003,8 @@ "duplicatesFound": "The following duplicate shortcuts were found:", "copyTextToClipboard": "Copy text to clipboard (selected lines)", "copyTextFromOriginalToClipboard": "Copy text from original to clipboard (selected lines)", + "copyPlainTextToClipboard": "Copy plain text to clipboard (selected lines)", + "copyPlainTextFromOriginalToClipboard": "Copy plain text from original to clipboard (selected lines)", "assaDraw": "ASSA Draw", "assaGenerateProgressBar": "ASSA Generate progress bar", "assaGenerateBackgroundBox": "ASSA Generate background box", @@ -4005,6 +4048,12 @@ "moveSelectedLinesAndForwardXMsForward": "Move selected lines and all following X ms forward (X set in Settings)", "moveAllLinesXMsBack": "Move all lines X ms back (X set in Settings)", "moveAllLinesXMsForward": "Move all lines X ms forward (X set in Settings)", + "moveSelectedLinesOneFrameBack": "Move selected lines one frame back", + "moveSelectedLinesOneFrameForward": "Move selected lines one frame forward", + "moveSelectedLinesAndForwardOneFrameBack": "Move selected lines and all following one frame back", + "moveSelectedLinesAndForwardOneFrameForward": "Move selected lines and all following one frame forward", + "moveAllLinesOneFrameBack": "Move all lines one frame back", + "moveAllLinesOneFrameForward": "Move all lines one frame forward", "moveSelectedLinesCustomMsBack": "Move selected lines, custom milliseconds ({0:#,###,##0}) back, {1}", "moveSelectedLinesCustomMsForward": "Move selected lines, custom milliseconds ({0:#,###,##0}) forward, {1}", "moveSelectedLinesAndForwardCustomMsBack": "Move selected lines and all following, custom milliseconds ({0:#,###,##0}) back, {1}", @@ -4059,7 +4108,13 @@ "doNotAskAgain": "Do not ask again (change in Manage plugins)", "applyPluginsTo": "Apply plugins to", "askEachTime": "Ask each time", - "allLines": "All lines" + "allLines": "All lines", + "runPlugin": "Run plugin", + "plugin": "Plugin", + "configurePlugin": "Configure...", + "noBatchPluginsInstalled": "No installed plugin supports batch convert.", + "batchPluginInfo": "The plugin runs on each file without showing its window, using its saved settings.", + "pluginXNotAvailable": "Plugin '{0}' is not installed, is disabled, or does not support batch convert." }, "help": { "aboutSubtitleEdit": "About Subtitle Edit", @@ -4068,7 +4123,10 @@ "checkForUpdatesUpToDate": "You are running the latest version.", "checkForUpdatesNewVersionAvailable": "New version available: {0}", "checkForUpdatesUnableToCheck": "Unable to check for updates.", - "checkForUpdatesDownloadNewVersion": "Download new version" + "checkForUpdatesDownloadNewVersion": "Download new version", + "checkForUpdatesInstallAndRestart": "Install and restart", + "checkForUpdatesInstallFailed": "Automatic update failed - please use \"Download new version\" instead.", + "checkForUpdatesInstallsWhenClosed": "The update will be installed when Subtitle Edit closes." }, "ocr": { "linesToDraw": "Lines to draw", @@ -4089,7 +4147,6 @@ "numberOfPixelsIsSpace": "Number of pixels is space", "inspectImageMatches": "Inspect image matches", "resolutionXYAndTopmarginZ": "Resolution {0}x{1}, top margin {2}", - "runningOcrDotDotDotXY": "Running OCR... {0}/{1}", "runningOcrDotDotDot": "Running OCR...", "autoSubmitFirstCharacter": "Auto submit first character", "editNOcrDatabase": "Edit nOCR database", @@ -4105,12 +4162,10 @@ "addNewCharcter": "Add new character", "addNOcrCharacterTitle": "Add nOCR character for line {0}, character {1} of {2} using database \"{3}\"", "addBinaryOcrCharacterTitle": "Add binary OCR character for line {0}, character {1} of {2} using database \"{3}\"", - "lineIndexX": "Line {0}", "inspectNOcrAdditions": "Inspect new nOCR additions", "ocrSelectedLines": "OCR selected lines", "fillSelectedLinesWithClipboard": "Fill selected lines with clipboard text", "showImage": "Show image", - "fixOcrErrors": "Fix OCR errors", "promptForUknownWords": "Prompt for unknown words", "tryToGuessUnknownWords": "Try to guess unknown words", "autoBreakIfMoreThanXLines": "Auto break if more than {0} lines", @@ -4129,7 +4184,6 @@ "clearBackground": "Clear background", "clearForeground": "Clear foreground", "nOcrDrawHelp": "Tips for drawing\n────────────────────\n• Hold Ctrl down to continue line\n• Ctrl+z=undo, Ctrl+y=redo", - "editWholeText": "Edit whole text", "editWordOnly": "Edit word only", "imagePreProcessing": "Image pre-processing", "preProcessingTitle": "Pre-processing", @@ -4174,7 +4228,6 @@ "htmlExportNoMatches": "No lines match the filter", "htmlExportImageBackground": "Image background", "htmlExportCheckerboard": "Checkerboard", - "htmlExportTheme": "Theme", "htmlExportGeneratedBySubtitleEdit": "Generated by Subtitle Edit", "vobSubColors": "VobSub/DVD colors...", "vobSubColorsTitle": "VobSub/DVD colors", @@ -4205,7 +4258,6 @@ "llamaCppNotDownloaded": "llama.cpp engine/model not downloaded - download via batch convert settings", "llamaCppReturnedNoText": "llama.cpp returned no text - check the server and model", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp requires the llama-server engine and the selected OCR model to be downloaded. Download now?", - "llamaCppDownloadEnginePrompt": "llama.cpp requires the llama-server engine to be downloaded. Download now?", "llamaCppDownloadModelPrompt": "llama.cpp requires the selected OCR model to be downloaded. Download now?", "crispEmbedNotDownloaded": "CrispEmbed engine/model not downloaded - download via batch convert settings", "crispEmbedReturnedNoText": "CrispEmbed returned no text - check the model", @@ -4213,9 +4265,26 @@ "crispEmbedSettingsTitle": "CrispEmbed settings", "crispEmbedDescription": "Local OCR engine with multiple model backends - download the engine and the models here.", "trainNOcrDatabase": "Train nOCR database...", + "optimizeNOcrDatabase": "Optimize nOCR database...", + "optimizeNOcrDatabaseQuestionXY": "Remove the lines that don't tell characters apart from similar characters in nOCR database \"{0}\"?\n\nThis makes the database smaller and OCR faster, usually with fewer errors. Takes up to a minute.\n\nA backup is saved as \"{1}\".", + "optimizingNOcrDatabaseXY": "Optimizing nOCR database... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "nOCR database \"{0}\" optimized: {1:#,##0} -> {2:#,##0} lines.", "startTraining": "Start training", "abortTraining": "Abort training", "trainingOptions": "Training options", + "trainNOcrSubtitle": "Renders characters in installed fonts and teaches nOCR their shapes. Pick the fonts your subtitles use.", + "xFontsSelected": "{0:#,##0} selected", + "subtitleFonts": "Subtitle fonts", + "emptyDatabase": "Empty database", + "startFromDatabase": "Start from", + "startFromDatabaseHint": "Add the trained characters to a copy of an existing database (recommended) or start from an empty one", + "fontSizes": "Font sizes", + "fontSizesHint": "Font sizes in pixels to render at, separated by commas, e.g. \"30, 40\"", + "numberOfLineSegmentsHint": "Lines checked per character - more is stricter but slower", + "enterDatabaseName": "Enter a name for the database", + "trainingFontXSizeYCharacterZ": "Training \"{0}\" at {1} px: {2}", + "xLearned": "{0:#,##0} learned", + "xSkipped": "{0:#,##0} skipped", "charactersToTrain": "Characters to train", "letterCombinationsToTrain": "Letter combinations that might be split to one image", "importCharactersFromSubtitleFile": "Import characters from subtitle file...", @@ -4224,16 +4293,20 @@ "alsoTrainItalic": "Also train italic", "trainingXLearnedYSkipped": "Training \"{0}\" - {1:#,##0} characters learned, {2:#,##0} skipped", "trainingDoneXLearned": "Training done - {0:#,##0} characters learned", - "selectAtLeastOneFont": "Please select at least one font" + "selectAtLeastOneFont": "Please select at least one font", + "nOcrZoomIn": "Zoom in", + "nOcrZoomOut": "Zoom out", + "nOcrLineAlgorithm": "Algorithm", + "nOcrLineAlgorithmHint": "Algorithm used by Auto-draw to generate foreground/background lines" }, "assa": { "assaDraw": "ASSA Draw", - "drawSelectTool": "Select (move points)", + "drawSelectTool": "Select and move shapes", "drawUseShapeForErase": "Use shape for erase (iclip)", - "drawLineTool": "Line Tool (F4)", - "drawBezierTool": "Bezier Curve (F5)", - "drawRectangleTool": "Rectangle (F6)", - "drawCircleTool": "Circle (F7)", + "drawLineTool": "Line tool", + "drawBezierTool": "Bezier curve", + "drawRectangleTool": "Rectangle", + "drawCircleTool": "Circle", "drawCloseShape": "Close Shape (F8/Enter)", "drawDeleteShape": "Delete Shape (Del)", "drawChangeLayer": "Change Layer", @@ -4241,7 +4314,7 @@ "drawZoomIn": "Zoom In (Ctrl++)", "drawZoomOut": "Zoom Out (Ctrl+-)", "drawResetView": "Reset View (Ctrl+0)", - "drawToggleGrid": "Toggle Grid (Ctrl+G)", + "drawToggleGrid": "Toggle Grid (Ctrl+')", "drawTogglePreview": "Toggle preview (F9)", "drawPreviewFailed": "Preview failed - ffmpeg with libass (subtitles filter) is required", "drawCopyToClipboard": "Copy to Clipboard (Ctrl+C)", @@ -4250,7 +4323,213 @@ "drawSelectedShape": "Selected shape", "drawSelectedLayer": "Selected layer", "drawToolX": "Tool: {0}", - "drawHelpText": "Click to add points • Enter/F8 to close shape • Shift+Drag to pan • Ctrl+Scroll to zoom", + "drawHelpText": "Click to add points • Right-click for options • Select tool: drag handles to scale/rotate (Shift = keep ratio/15°) • Enter/F8 to close shape • Shift+drag or middle mouse to pan • Ctrl+Scroll to zoom", + "drawMoveToLayer": "Move to layer", + "drawFlipHorizontal": "Flip horizontally", + "drawFlipVertical": "Flip vertically", + "drawHideShape": "Hide shape", + "drawShowShape": "Show shape", + "drawHideLayer": "Hide layer", + "drawShowLayer": "Show layer", + "drawDeleteLayer": "Delete layer", + "drawDeletePoint": "Delete point", + "drawCancelDrawing": "Cancel drawing", + "drawLayerX": "Layer {0}", + "drawImportSvg": "Import SVG image...", + "drawRotateClockwise": "Rotate 90° clockwise", + "drawConvertToCurve": "Convert segment to curve", + "drawZoom": "Zoom", + "drawShapeTool": "Shape tool", + "drawColorPickerTool": "Pick color from a shape or the background", + "drawShapeLibrary": "Shape library", + "drawShapeLibraryHint": "Drag on the canvas to place a shape, or click for the default size. Shift keeps its proportions.", + "drawAddToLibrary": "Add to shape library...", + "drawRemoveFromLibrary": "Remove from shape library", + "drawShapeName": "Shape name", + "drawCategorySpeechBubbles": "Speech bubbles", + "drawCategoryArrows": "Arrows", + "drawCategoryBasicShapes": "Basic shapes", + "drawCategorySymbols": "Symbols", + "drawCategoryClipArt": "Clip art", + "drawClipArtRedHeart": "Red heart", + "drawClipArtAngerMark": "Anger mark", + "drawClipArtSweatDrop": "Sweat drop", + "drawClipArtSparkles": "Sparkles", + "drawClipArtBlush": "Blush", + "drawClipArtSurpriseLines": "Surprise lines", + "drawClipArtBamBurst": "Bam! burst", + "drawClipArtZzz": "Zzz", + "drawClipArtSun": "Sun", + "drawClipArtFlame": "Flame", + "drawClipArtLightBulb": "Light bulb", + "drawClipArtLightningBolt": "Lightning bolt", + "drawClipArtColoredMusicNotes": "Colored music notes", + "drawClipArtPhone": "Phone", + "drawClipArtQuestionMark": "Question mark", + "drawClipArtExclamationMark": "Exclamation mark", + "drawClipArtGreenCheck": "Green check", + "drawClipArtRedCross": "Red cross", + "drawClipArtThumbsUp": "Thumbs up", + "drawClipArtGoldStar": "Gold star", + "drawClipArtBrokenHeart": "Broken heart", + "drawClipArtGhost": "Ghost", + "drawClipArtSkull": "Skull", + "drawClipArtSnowflake": "Snowflake", + "drawClipArtMoonAndStars": "Moon and stars", + "drawClipArtRainCloud": "Rain cloud", + "drawClipArtBomb": "Bomb", + "drawClipArtGift": "Gift", + "drawClipArtCrown": "Crown", + "drawClipArtClock": "Clock", + "drawClipArtClapperboard": "Clapperboard", + "drawClipArtMicrophone": "Microphone", + "drawClipArtWarningSign": "Warning sign", + "drawClipArtNoEntry": "No entry", + "drawClipArtPopcorn": "Popcorn", + "drawClipArtCoffeeCup": "Coffee cup", + "drawClipArtRainbow": "Rainbow", + "drawClipArtTrophy": "Trophy", + "drawClipArtRocket": "Rocket", + "drawClipArtBalloon": "Balloon", + "drawClipArtCamera": "Camera", + "drawClipArtPartyPopper": "Party popper", + "drawClipArtPizzaSlice": "Pizza slice", + "drawClipArtIceCream": "Ice cream", + "drawClipArtUmbrella": "Umbrella", + "drawClipArtCatFace": "Cat face", + "drawClipArtKey": "Key", + "drawClipArtChristmasTree": "Christmas tree", + "drawClipArtYouTube": "YouTube", + "drawClipArtInstagram": "Instagram", + "drawClipArtLinkedIn": "LinkedIn", + "drawClipArtFacebook": "Facebook", + "drawClipArtX": "X", + "drawClipArtTikTok": "TikTok", + "drawClipArtClosedCaptions": "Closed captions", + "drawClipArtSpeakerLabel": "Speaker", + "drawClipArtTranslation": "Translation", + "drawClipArtSignLanguage": "Sign language", + "drawClipArtAi": "AI", + "drawClipArtHeadphones": "Headphones", + "drawClipArtYummy": "Yummy", + "drawClipArtDrooling": "Drooling", + "drawClipArtDisgusted": "Disgusted", + "drawClipArtTooSpicy": "Too spicy", + "drawClipArtChefsKiss": "Chef's kiss", + "drawClipArtLoveIt": "Love it", + "drawClipArtStarRating": "{0} of 5 stars", + "drawAnimation": "Animation", + "drawAnimationIn": "In", + "drawAnimationOut": "Out", + "drawAnimationFade": "Fade", + "drawAnimationPop": "Pop", + "drawAnimationZoom": "Zoom", + "drawAnimationSpin": "Spin", + "drawAnimationFromLeft": "From left", + "drawAnimationFromRight": "From right", + "drawAnimationFromTop": "From top", + "drawAnimationFromBottom": "From bottom", + "drawAnimationToLeft": "To left", + "drawAnimationToRight": "To right", + "drawAnimationToTop": "To top", + "drawAnimationToBottom": "To bottom", + "drawAnimationPlay": "Play animation", + "drawAnimationStop": "Stop animation", + "drawAnimationLayerHint": "Applies to the whole layer (one subtitle line); a group moves as one.", + "drawAnimationLoop": "Loop", + "drawAnimationPulse": "Pulse", + "drawAnimationBlink": "Blink", + "drawAnimationBounce": "Bounce", + "drawAnimationShake": "Shake", + "drawAnimationSwing": "Swing", + "drawAnimationFlip": "Flip", + "drawAnimationLoopBlocked": "This loop turns around another point than the in/out effect, so it is left out.", + "drawClipArtLoadingSpinner": "Loading spinner", + "drawClipArtRec": "REC", + "drawClipArtRingingPhone": "Ringing phone", + "drawClipArtBeatingHeart": "Beating heart", + "drawClipArtBouncingArrow": "Bouncing arrow", + "drawClipArtRingingBell": "Ringing bell", + "drawClipArtPointingHand": "Pointing hand", + "drawClipArtWiFi": "Wi-Fi", + "drawClipArtTwinklingStar": "Twinkling star", + "drawClipArtAlarmClock": "Alarm clock", + "drawClipArtHourglass": "Hourglass", + "drawClipArtIdea": "Idea", + "drawCategoryMyShapes": "My shapes", + "drawShapeSpeechBubble": "Speech bubble", + "drawShapeSpeechBubbleRight": "Speech bubble, tail right", + "drawShapeSpeechBubbleUp": "Speech bubble, tail up", + "drawShapeOvalBubble": "Oval speech bubble", + "drawShapeBoxBubble": "Box speech bubble", + "drawShapeThoughtBubble": "Thought bubble", + "drawShapeShoutBubble": "Shout bubble", + "drawShapeCaptionBox": "Caption box", + "drawShapeSpeechBubbleSide": "Speech bubble, tail left side", + "drawShapeRoundBubble": "Round bubble", + "drawShapePillBubble": "Pill bubble", + "drawShapeScreamBubble": "Scream bubble", + "drawShapeArrow": "Arrow", + "drawShapeDoubleArrow": "Double arrow", + "drawShapeChevron": "Chevron", + "drawShapeCurvedArrow": "Curved arrow", + "drawShapeRepeatArrow": "Repeat arrow", + "drawShapeUTurnArrow": "U-turn arrow", + "drawShapeRoundedRectangle": "Rounded rectangle", + "drawShapeTriangle": "Triangle", + "drawShapeDiamond": "Diamond", + "drawShapePentagon": "Pentagon", + "drawShapeHexagon": "Hexagon", + "drawShapeOctagon": "Octagon", + "drawShapeStar": "Star", + "drawShapeRing": "Ring", + "drawShapePlus": "Plus", + "drawShapeBanner": "Banner", + "drawShapeHalfCircle": "Half circle", + "drawShapeTeardrop": "Teardrop", + "drawShapeHeart": "Heart", + "drawShapeCheck": "Check mark", + "drawShapeMusicNote": "Music note", + "drawShapeMusicNotes": "Music notes", + "drawShapeLightning": "Lightning", + "drawShapeCloud": "Cloud", + "drawShapeMoon": "Moon", + "drawShapeBadge": "Badge", + "drawShapeSpeaker": "Speaker", + "drawShapeCross": "Cross", + "drawShapeSmiley": "Smiley", + "drawShapeSadSmiley": "Sad smiley", + "drawBackgroundVideoFrame": "Video frame (current position)", + "drawBackgroundVideoFrameAt": "Video frame at...", + "drawBackgroundImage": "Image file...", + "drawBackgroundNone": "No background", + "drawBackgroundStretch": "Stretch image to canvas", + "drawBackgroundOpacity": "Background opacity", + "drawBackgroundVideoFrameFailed": "Could not get a video frame at {0}.", + "drawConvertToLine": "Convert segment to line", + "drawConvertShapeToCurves": "Convert all lines to curves", + "drawConvertShapeToLines": "Convert all curves to lines", + "drawRotateCounterClockwise": "Rotate 90° counter-clockwise", + "drawSvgImages": "SVG images", + "drawSvgNoShapes": "No filled shapes or strokes found in the SVG file.", + "drawTextTool": "Text tool", + "drawDefaultText": "Text", + "drawShrinkToFit": "Shrink to fit", + "drawTextBox": "Text box", + "drawDiscardChanges": "The drawing has been changed.\nDiscard the changes?", + "drawColorPickerToolName": "Color picker", + "drawOpenDrawing": "Open ASSA drawing", + "drawSaveDrawing": "Save ASSA drawing", + "drawDrawingFiles": "ASSA drawing files", + "drawAssFiles": "ASS files", + "drawPositionXY": "Position: {0}, {1}", + "drawXShapes": "{0} shapes", + "drawXPoints": "{0} points", + "drawShapeXDraw": "Shape {0} (draw)", + "drawShapeXErase": "Shape {0} (erase)", + "drawGroup": "Group (Ctrl+G)", + "drawUngroup": "Ungroup (Ctrl+Shift+G)", + "drawGroupX": "Group {0}", "progressBarTitle": "ASSA progress bar", "progressBarSettings": "Progress bar", "mouseOverColor": "Mouse-over color", @@ -4258,17 +4537,34 @@ "progressBarForeColor": "Foreground color", "progressBarSquareCorners": "Square corners", "progressBarRoundedCorners": "Rounded corners", - "progressBarChapters": "Chapters", "progressBarSplitterWidth": "Splitter width", "progressBarSplitterHeight": "Splitter height", "progressBarXAdjustment": "X adjustment", "progressBarYAdjustment": "Y adjustment", "progressBarTextAlignment": "Text alignment", + "progressBarStyleCutCorners": "Cut corners", + "progressBarStyleArrow": "Arrow", + "progressBarStyleSlanted": "Slanted", + "progressBarStyleSegments": "Segments", + "progressBarStyleRoundedSegments": "Rounded segments", + "progressBarStyleDots": "Dots", + "progressBarStyleDiamonds": "Diamonds", + "progressBarStyleChevrons": "Chevrons", + "progressBarStyleStripes": "Stripes", + "progressBarStyleWave": "Wave", + "progressBarStyleZigzag": "Zigzag", + "progressBarStyleTapered": "Tapered", + "progressBarStyleRuler": "Ruler", + "progressBarStyleDoubleLine": "Double line", + "progressBarStyleEqualizer": "Equalizer", + "progressBarStyleStars": "Stars", + "progressBarPlayhead": "Playhead", + "progressBarEdgeMargin": "Edge margin", + "progressBarSplitter": "Splitter", "fontCollectorTitle": "Font collector", "fontCollectorUsedIn": "Used in", "fontCollectorFontFiles": "Font file(s)", "fontCollectorStyleX": "Style: {0}", - "fontCollectorInlineLineX": "Line {0}", "fontCollectorFound": "Found", "fontCollectorNotFound": "Not found", "fontCollectorEmbedded": "Embedded", @@ -4322,8 +4618,26 @@ "backgroundBoxTornPaperDouble": "Torn paper (top & bottom)", "backgroundBoxStarburst": "Starburst", "backgroundBoxScroll": "Scroll / Parchment", + "backgroundBoxPill": "Pill", + "backgroundBoxCutCorners": "Cut corners", + "backgroundBoxSlanted": "Slanted", + "backgroundBoxTicket": "Ticket", + "backgroundBoxSpeechBubble": "Speech bubble", + "backgroundBoxRibbon": "Ribbon", + "backgroundBoxBrushStroke": "Brush stroke", + "backgroundBoxCornerBrackets": "Corner brackets", + "backgroundBoxUnderline": "Underline bar", + "backgroundBoxFrame": "Frame", + "backgroundBoxArrowTag": "Arrow tag", + "backgroundBoxSideBar": "Side bar", "stylesInFile": "Styles in file", "stylesSaved": "Styles saved", + "stylesSummary": "{0} styles in file · {1} saved", + "stylesTransform": "Transform", + "stylesEditing": "Editing", + "stylesPreviewSampleTextHint": "Sample text - \\N for a new line", + "stylesScale": "Scale %", + "stylesPreviewChecker": "Checker", "allCategories": "[All]", "newCategory": "New category...", "renameCategory": "Rename category...", @@ -4358,6 +4672,8 @@ "takeUsagesFromDotDotDot": "Take usages from...", "replaceStyleWithDotDotDot": "Replace style with...", "noAttachmentsFound": "No attachments found in selected ASSA file.", + "attachmentsDropHint": "Drop font or image files here to attach them", + "attachmentsSummary": "{0} fonts · {1} graphics · {2}", "deleteStyleQuestion": "Delete style?", "deleteStylesQuestion": "Delete styles?", "deleteXStylesQuestion": "Do you want to delete {0} styles?", @@ -4383,12 +4699,31 @@ "spinIn": "Spin in", "setPosition": "Set position", "rotation": "Rotation", + "setPositionTopLeft": "Top left", + "setPositionTopCenter": "Top center", + "setPositionTopRight": "Top right", + "setPositionMiddleLeft": "Middle left", + "setPositionMiddleRight": "Middle right", + "setPositionBottomLeft": "Bottom left", + "setPositionBottomCenter": "Bottom center", + "setPositionBottomRight": "Bottom right", + "setPositionCustom": "Custom", + "setPositionReset": "Reset to the line's position", + "setPositionResetRotation": "Reset rotation", + "setPositionGuides": "Guides", + "setPositionSafeArea": "Safe area", + "setPositionCenterLines": "Center lines", + "setPositionSnapToGuides": "Snap to guides", + "setPositionNudgeHint": "Arrow keys nudge 1 px, Shift 10 px", "scaleX": "Scale X", "scaleY": "Scale Y", "spacing": "Spacing", "angle": "Angle", "imageColorPicker": "Image color picker", "copyColorAsHextoClipboard": "Copy color as hex to clipboard", + "imageColorPickerHint": "Click the frame to pick a color", + "copyColorAsAssaToClipboard": "Copy color as ASSA (&HBBGGRR&) to clipboard", + "copyColorAsAssaTagToClipboard": "Copy color as ASSA \\c tag to clipboard", "generatingBackgroundBoxXOfY": "Generating background box {0} of {1}...", "applyAdvancedEffectTitle": "Apply advanced effect", "chooseEffect": "Choose effect", @@ -4470,6 +4805,34 @@ "advancedEffectLowerThird": "Lower third", "advancedEffectLowerThirdDescription": "Name and role banner bottom-left with an accent bar sliding in — interview/documentary style (first line = name, following lines = role)", "advancedEffectLowerThirdAccentColor": "Accent color", + "advancedEffectCategoryWords": "Words & karaoke", + "advancedEffectCategoryInOut": "In & out", + "advancedEffectCategoryTextFx": "Text effects", + "advancedEffectCategoryScenes": "Scenes", + "advancedEffectCategoryTitles": "Titles & credits", + "advancedEffectSearchWatermark": "Search effects...", + "advancedEffectNoMatches": "No effects match the search", + "advancedEffectCustomize": "Customize", + "advancedEffectNoSettings": "This effect has no settings - it works as is.", + "advancedEffectAmount": "Amount", + "advancedEffectPreviewNoVideo": "Sample preview - open a video to see the real rendering", + "advancedEffectHighlightBox": "Highlight box", + "advancedEffectHighlightBoxDescription": "A colored box jumps from word to word as the line is spoken - CapCut-style captions", + "advancedEffectSingleWordPop": "Single word pop", + "advancedEffectSingleWordPopDescription": "Shows one big word at a time, popping in as it is spoken - short-video caption style", + "advancedEffectBoldCaptions": "Bold captions", + "advancedEffectBoldCaptionsDescription": "Bold captions with a thick outline - the spoken word lights up in color and grows", + "advancedEffectHighlightColor": "Highlight color", + "advancedEffectUpperCase": "Uppercase", + "advancedEffectTextSizePercent": "Text size (%)", + "advancedEffectSmoothFill": "Smooth fill", + "advancedEffectSmoothFillDescription": "A highlight color sweeps smoothly through each word as it is spoken", + "advancedEffectBlurInWords": "Blur-in words", + "advancedEffectBlurInWordsDescription": "Words appear one by one as they are spoken - each sharpens from a blur and rises into place", + "advancedEffectRollingCaptions": "Rolling captions", + "advancedEffectRollingCaptionsDescription": "Each line slides up into place and pushes the previous line up, like a live chat or teleprompter", + "advancedEffectFillColor": "Fill color", + "advancedEffectRise": "Rise from baseline", "overrideTagsHistory": "Override tags history" }, "about": { @@ -4492,12 +4855,10 @@ "all": "All", "tooManyLines": "Too many lines", "charactersPerSecond": "Reading speed", - "durationTooShort": "Too short", - "durationTooLong": "Too long", "lineTooLong": "Line too long", "lineTooWide": "Line too wide", - "overlap": "Overlapping", "gapTooShort": "Gap too short", + "customRule": "Custom rule", "tooManyLinesHint": "More lines than the maximum number of lines", "charactersPerSecondHint": "Characters per second above the maximum", "durationTooShortHint": "Shorter than the minimum display time", @@ -4506,13 +4867,13 @@ "lineTooWideHint": "A line is wider (in pixels) than the maximum width", "overlapHint": "Overlaps the previous or next line", "gapTooShortHint": "Gap to the previous or next line is below the minimum", + "customRuleHint": "The text matches one of your custom error rules", "detailXGreaterThanY": "{0} > {1}", "detailXLessThanY": "{0} < {1}", "detailOverlapFromPrevious": "from previous: {0} ms", "detailOverlapToNext": "to next: {0} ms", "detailGapToPrevious": "to previous: {0} < {1} ms", "detailGapToNext": "to next: {0} < {1} ms", - "detail": "Detail", "tip": "Double-click a line (or press Enter) to go to it. Which checks run, and their limits, are set in Settings > General.", "exportAsText": "Text file (.txt)...", "exportAsExcel": "Excel file (.xlsx)...", diff --git a/src/ui/Assets/Languages/Finnish.json b/src/ui/Assets/Languages/Finnish.json index f4f95a75483..209af61e36a 100644 --- a/src/ui/Assets/Languages/Finnish.json +++ b/src/ui/Assets/Languages/Finnish.json @@ -1,9 +1,50 @@ { "title": "Subtitle Edit", - "version": "v5.2.0-rc7", + "version": "v5.3.0", "translatedBy": "LibreTranslate", "cultureName": "fi-FI", "general": { + "prompt": "Kehote", + "temperature": "Lämpötila", + "preset": "Esiasetus", + "output": "Tuloste", + "outputFormat": "Tulostemuoto", + "other": "Muu", + "timeCodeFormat": "Aikakoodin muoto", + "topBottomMargin": "Ylä-/alamarginaali", + "theme": "Teema", + "brightness": "Kirkkaus", + "chooseColor": "Valitse väri", + "lineX": "Rivi {0}", + "playLine": "Toista rivi", + "maxLineLength": "Rivin enimmäispituus", + "maxCharsPerSec": "Merkkien enimmäismäärä sekunnissa", + "maxNumberOfLines": "Rivien enimmäismäärä", + "subtitles": "Tekstitykset", + "shotChanges": "Kuvanvaihdot", + "chapters": "Luvut", + "audio": "Ääni", + "interjections": "Huudahdukset", + "blankLines": "Tyhjät rivit", + "editWholeText": "Muokkaa koko tekstiä", + "noTextInClipboard": "Leikepöydällä ei ole tekstiä", + "noSubtitlesFoundTitle": "Tekstityksiä ei löytynyt", + "replacedXOccurrences": "Korvattiin {0} esiintymää", + "invalidRegularExpressionX": "Virheellinen säännöllinen lauseke: {0}", + "discardChangesTitle": "Hylätäänkö muutokset?", + "downloadingXDotDotDot": "Ladataan {0}...", + "importTimeCodesDotDotDot": "Tuo aikakoodit...", + "original": "Alkuperäinen", + "nextChange": "Seuraava muutos", + "previousChange": "Edellinen muutos", + "changeXOfY": "Muutos {0}/{1}", + "tooLong": "Liian pitkä", + "tooShort": "Liian lyhyt", + "overlapping": "Päällekkäisyys", + "detail": "Tiedot", + "fixOcrErrors": "Korjaa OCR-virheet", + "runningOcrXY": "OCR käynnissä... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp vaatii llama-server-moottorin lataamisen. Ladataanko nyt?", "assistedMove": "Avustettu siirto", "assistedMoveChooseMove": "Napsauta vaihtoehtoa tai paina sen numeroa siirtääksesi sanoja", "assistedMoveDotDotDot": "Avustettu siirto...", @@ -71,6 +112,24 @@ "abort": "Keskeytä", "actor": "Näyttelijä", "actors": "Näyttelijät", + "setActorDotDotDot": "Aseta näyttelijä...", + "actorPickerTitle": "Aseta näyttelijä", + "actorPickerFilterHint": "Kirjoita suodattaaksesi tai kirjoita uuden näyttelijän nimi", + "actorPickerKeysHint": "Aseta näyttelijä painamalla numeroa tai Enter. Alt+Ylös/Alas muuttaa järjestystä, Delete poistaa näyttelijän.", + "actorPickerNewActorX": "Uusi näyttelijä \"{0}\"", + "actorPickerLinesSelectedX": "Valittuja rivejä: {0}", + "setStyleDotDotDot": "Aseta tyyli...", + "stylePickerTitle": "Aseta tyyli", + "stylePickerFilterHint": "Kirjoita suodattaaksesi tai kirjoita uuden tyylin nimi", + "stylePickerKeysHint": "Aseta tyyli kaikille valituille riveille painamalla numeroa (1-9, 0).", + "stylePickerNewStyleX": "Uusi tyyli \"{0}\"", + "stylePickerNewStyleInfo": "Paina Enter lisätäksesi tämän tyylin oletusasetuksilla ja asettaaksesi sen valituille riveille. Voit muuttaa sen fonttia, värejä ja sijaintia myöhemmin kohdassa \"Hallitse tyylejä...\".", + "stylePickerCurrentStyleX": "Nykyinen tyyli: {0}", + "stylePickerLinesUsingStyleX": "Tätä tyyliä käyttäviä rivejä: {0}", + "stylePickerMarginsXYZ": "Vasen {0}, oikea {1}, pystysuora {2}", + "stylePickerSetStyle": "_Aseta tyyli", + "stylePickerManageStyles": "Hallitse tyylejä...", + "stylePickerManageStylesHint": "Sulje tämä ikkuna ja avaa tyylien hallinta muokataksesi fontteja, värejä, sijaintia ja muuta", "add": "Lisää", "addDotDotDot": "Lisää...", "addToNamesListCaseSensitive": "Lisää nimiluetteloon (kirjainkoko merkitsevä)", @@ -79,7 +138,6 @@ "adjustAlpha": "Säädä alfa (läpinäkyvyys)", "adjustDisplayDuration": "Säädä näyttöaika", "adjustment": "Säätö", - "advanced": "Lisäasetukset", "advancedSettings": "Lisäasetukset", "after": "Jälkeen", "alignment": "Kohdistus", @@ -115,7 +173,6 @@ "batchMode": "Eräajotila", "bdnXml": "BDN/xml", "before": "Ennen", - "beforeX": "Ennen \"{0}\"", "beginning": "Alku", "bluRaySup": "Blu-ray (sup)", "bold": "Lihavoitu", @@ -127,7 +184,6 @@ "bookmarkEdit": "Muokkaa kirjanmerkkiä", "bookmarkEditForSelectedLinesX": "Muokkaa kirjanmerkkiä {0} valitulle riville", "bookmarksList": "Luettelo kirjanmerkeistä", - "borderColor": "Reunan väri", "borderStyle": "Reunan tyyli", "bottomCenter": "Alhaalla keskellä", "bottomLeft": "Alhaalla vasemmalla", @@ -150,7 +206,6 @@ "changeCasing": "Vaihda kirjainkoko", "changeFormatting": "Vaihda muotoilua", "changeFrameRate": "Vaihda kuvataajuutta", - "changeLanguageFilter": "Vaihda kielisuodatinta...", "changeOnce": "Muuta kerran", "changeSpeed": "Muuta nopeutta", "character": "Merkki", @@ -172,7 +227,6 @@ "conversionCancelledByUser": "Käyttäjä peruutti muunnoksen", "convert": "Muunna", "converted": "Muunnettu", - "convertingDotDotDot": "Muunnetaan...", "convertingXofYDotDoDot": "Muunnetaan {0:#,###,##0}/{1:#,###,##0}...", "copy": "Kopioi", "copyImageToClipboard": "Kopioi kuva leikepöydälle", @@ -180,7 +234,6 @@ "couldNotSaveFileXErrorY": "Tiedostoa \"{0}\" ei voitu tallentaa. Virhe: {1}", "count": "Laske", "cps": "Merkkiä sekunnissa", - "currentSubtitle": "Nykyinen tekstitys", "currentVideoPosition": "Nykyinen videon sijainti", "cut": "Leikkaa", "dark": "Tumma", @@ -225,7 +278,6 @@ "expand": "Laajenna", "export": "Vie", "exportDotDotDot": "Vie...", - "exportToX": "Vie kohteeseen {0}", "extendAfter": "Laajenna/lyhennä seuraavaan riviin", "extendBefore": "Laajenna/lyhennä edelliseen riviin", "extendSelectedLinesToNextShotChangeOrNextSubtitle": "Laajenna valitut rivit seuraavaan kuvanvaihtoon (tai seuraavaan tekstitykseen)", @@ -241,7 +293,6 @@ "fileExtension": "Tiedostotunniste", "fileName": "Tiedostonimi", "fileNameX": "Tiedoston nimi: {0}", - "fileNameXAndSize": "Tiedoston nimi: {0} ({1})", "fileSaved": "Tiedosto tallennettu", "fileSavedToX": "Tiedosto tallennettu kohteeseen {0}", "fileXAlreadyExists": "Tiedosto \"{0}\" on jo olemassa.", @@ -251,8 +302,6 @@ "find": "Etsi", "findNext": "Etsi seuraava", "findTextX": "Etsi tekstiä - {0}", - "fiveHundredMilliseconds": "500 millisekuntia", - "fiveSeconds": "Viisi sekuntia", "fix": "Korjaa", "fixCommonErrors": "Korjaa yleiset virheet", "fixRightToLeft": "Korjaa oikealta vasemmalle", @@ -276,14 +325,12 @@ "foundXInLineYZ": "Löytyi \"{0}\" riviltä {1}, kohdasta {2}", "foundXMatches": "Löytyi {0} osumaa", "frameRate": "Kuvataajuus", - "frameRateX": "Kuvataajuus: {0:0.0###}", "frames": "Kuvat", "from": "Alkaen", "fromCurrentVideoPosition": "nykyisestä videon kohdasta", "fullScreen": "Koko näyttö", "gap": "Aukko", "general": "Yleistä", - "generalText": "Yleistä", "generate": "Luo", "generateImportShotChanges": "Luo/tuo kuvanvaihtoja", "generating": "Luodaan...", @@ -300,12 +347,8 @@ "help": "Ohje", "hex": "Hex", "hide": "Piilota", - "hidePreview": "Piilota esikatselu", "history": "Historia", "horizontal": "Vaakasuora", - "hourMinutesSecondsDecimalSeparatorMilliseconds": "Tunti:min:sek{0}ms", - "hourMinutesSecondsFrames": "Tunti:min:sek:kehykset", - "ip": "IP", "id": "ID", "image": "Kuva", "imageSaved": "Kuva tallennettu", @@ -363,6 +406,7 @@ "mergeSelectedLinesDialog": "Yhdistä valitut rivit dialogina", "mergeWithLineAfterAndAutoBreak": "Yhdistä seuraavan rivin kanssa ja automaattinen rivinvaihto", "mergeWithLineAfterKeepBreaks": "Yhdistä seuraavan rivin kanssa (säilytä rivinvaihdot)", + "mergeWithLineAfterAndUnbreak": "Yhdistä seuraavaan riviin ja poista rivinvaihto", "mergeWithLineBeforeAndAutoBreak": "Yhdistä edelliseen riviin ja automaattinen rivinvaihto", "mergeWithLineBeforeKeepBreaks": "Yhdistä edelliseen riviin (säilytä rivinvaihdot)", "middleCenter": "Keskelle", @@ -377,11 +421,11 @@ "moveAllShotChangeOneFrameForward": "Siirrä kaikki kuvanvaihdot yhden kehyksen eteenpäin", "multiMode": "Monitila", "moveDown": "Siirrä alas", + "increase": "Suurenna", + "decrease": "Pienennä", "moveUp": "Siirrä ylös", "multipleReplace": "Useita korvauksia", - "mute": "Mykistä", "name": "Nimi", - "negative": "Negatiivinen", "new": "Uusi", "newDotDotDot": "Uusi...", "newProfile": "Uusi profiili", @@ -409,20 +453,15 @@ "offsetY": "Siirtymä Y", "ok": "_OK", "oneFile": "Yksi tiedosto", - "oneHundredMilliseconds": "100 millisekuntia", - "oneSecond": "Yksi sekunti", "oneSecondBack": "Yksi sekunti taaksepäin", "oneSecondForward": "Yksi sekunti eteenpäin", - "onlineVideoFeatureNotAvailable": "Ominaisuus ei käytettävissä online-videolle", "openContainingFolder": "Avaa sisältävä kansio", "openDictionaryFolder": "Avaa sanakirjakansio", "openFile": "Avaa tiedosto", "openImageBasedSubtitle": "Avaa kuvapohjainen tekstitys", "openImageFile": "Avaa kuvatiedosto", - "openOriginalSubtitleFile": "Avaa alkuperäinen tekstitystiedosto...", "openOriginalSubtitleFileTitle": "Avaa alkuperäinen tekstitystiedosto", "openOutputFolder": "Avaa tulostuskansio", - "openSubtitle": "Avaa tekstitys...", "openSubtitleFileTitle": "Avaa tekstitystiedosto", "openSubtitles": "Avaa tekstitykset...", "openVideoFile": "Avaa videotiedosto...", @@ -435,11 +474,6 @@ "outlineWidth": "Ääriviivan leveys", "outputFolder": "Tulostuskansio", "outputProperties": "Tulostusominaisuudet", - "overlap": "Päällekkäisyys", - "overlapNextX": "Päällekkäisyys seuraavaan ({0:#;##0.###})", - "overlapPreviousLineX": "Päällekkäisyys edellisen rivin kanssa ({0:#;##0.###})", - "overlapStartAndEnd": "Päällekkäisyys alussa ja lopussa", - "overlapX": "Päällekkäisyys ({0:#;##0.###})", "overwriteExistingFiles": "Korvaa olemassa olevat tiedostot", "overwriteFilesInFolderX": "Korvaa kansion tiedostot: \"{0}\"", "overwriteQuestion": "Korvata?", @@ -452,6 +486,7 @@ "percent": "Prosentti", "pickLayer": "Aseta taso", "pickOllamaModel": "Valitse Ollama-malli", + "pickModel": "Valitse malli", "llamaCppUseRemoteServer": "Käytä ulkoista palvelinta (URL)", "pickOutputFolder": "Valitse tulostuskansio", "pickResolutionFromCurrentVideo": "Valitse resoluutio nykyisestä videosta", @@ -491,7 +526,6 @@ "refresh": "Päivitä", "region": "Alue", "regularExpression": "Säännöllinen lauseke", - "regularExpressionIsNotValid": "Säännöllinen lauseke ei ole kelvollinen!", "relativeToCurrentVideoPosition": "Suhteessa nykyiseen videon sijaintiin", "remove": "Poista", "removeAlignment": "Poista kohdistus", @@ -516,7 +550,7 @@ "reset": "Nollaa", "resizePanels": "Muuta paneelien kokoa", "resolution": "Tarkkuus", - "resolutionX": "Tarkkuus: {0}", + "retry": "Yritä uudelleen", "reverseRightToLeftStartEnd": "Käännä RTL:n alku/loppu", "right": "Oikea", "rightToLeft": "Oikealta vasemmalle", @@ -554,8 +588,6 @@ "selectedlinesX": "Valitut rivit: {0}", "sensitivity": "Herkkyys", "separator": "Erotin", - "sessionKey": "Istuntoavain", - "sessionKeyGenerate": "Luo uusi avain", "setEnd": "Aseta loppu", "setEndAndGoToNext": "Aseta loppu ja siirry seuraavaan", "setEndAddNewAndGoToNew": "Aseta loppu, lisää uusi ja siirry uuteen", @@ -574,8 +606,9 @@ "shadowColor": "Varjon väri", "shadowWidth": "Varjon leveys", "shiftLineBy": "Siirrä riviä", + "shotIn": "Kuva alkaa", + "shotOut": "Kuva päättyy", "shortcut": "Pikanäppäin", - "shortcutX": "Pikanäppäin: {0}", "shortcuts": "Pikanäppäimet", "show": "Näytä", "showActorColumn": "Näytä \"Actor\"-sarake", @@ -586,17 +619,19 @@ "showStartColumn": "Näytä \"Alku\"-sarake", "showHideColumn": "Näytä \"Piilota\"-sarake", "showHistory": "Näytä historia", + "clearHistory": "Tyhjennä historia", + "removeFromHistory": "Poista historiasta", "showLayerColumn": "Näytä \"Kerros\"-sarake", "showPreview": "Näytä esikatselu", "showShotChangesList": "Näytä kuvausmuutosten luettelo", + "showShotInColumn": "Näytä \"Kuva alkaa\"-sarake", + "showShotOutColumn": "Näytä \"Kuva päättyy\"-sarake", "showStyleColumn": "Näytä \"Tyyli\"-sarake", "showTeletext": "Näytä teksti-TV-sarake luettelonäkymässä", "showTimeCodes": "Näytä aikakoodit", "showWpmColumn": "Näytä \"Sanoja/min\"-sarake", "showPixelWidthColumn": "Näytä \"Pikselileveys\"-sarake", "shrink": "Pienennä", - "singleBox": "Yksi ruutu", - "singleLineLengths": "Yhden rivin pituus:", "singleMode": "Yksittäinen tila", "textTotalLength": "Teksti - kokonaispituus", "textSingleLineMaxLength": "Teksti - yhden rivin enimmäispituus", @@ -643,16 +678,16 @@ "strikeout": "Yliviivaus", "style": "Tyyli", "styleExaggeration": "Tyylin liioittelu", - "styleLanguage": "Tyyli / Kieli", "styles": "Tyylit", "subtitleFile": "Tekstitystiedosto", + "subtitleFileChangedOutsideX": "Tiedostoa \"{0}\" on muutettu Subtitle Editin ulkopuolella.\n\nLadataanko se uudelleen? Tekemäsi muutokset menetetään.", "subtitleFileName": "Tekstitystiedoston nimi", "subtitleFileSaved": "Tekstitystiedosto tallennettu", "subtitleFileSavedToX": "Tekstitystiedosto tallennettu kohteeseen {0}", "subtitleFiles": "Tekstitystiedostot", "subtitleFormats": "Tekstitysformaatit", "subtitleLoadedX": "Tekstitys ladattu: {0}", - "subtitleXOfY": "Tekstitys {0} / {1}", + "subtitleReloadedChangedOutsideX": "Tekstitys ladattu uudelleen (muutettu Subtitle Editin ulkopuolella): {0}", "suffix": "Jälkiliite", "suggestions": "Ehdotukset", "sync": "Synkronointi", @@ -664,7 +699,6 @@ "teletextColor": "Teksti-TV:n väri", "teletextLine": "Teksti-TV:n rivi", "tenHours": "10 tuntia", - "tenMilliseconds": "10 millisekuntia", "text": "Teksti", "textColor": "Tekstin väri", "textFiles": "Tekstitiedostot", @@ -689,9 +723,6 @@ "topLeft": "Ylävasemmalla", "topRight": "Yläoikealla", "totalAdjustmentX": "Kokonaiskorjaus: {0}", - "totalFramesX": "Kokonaiskuvamäärä: {0:#;##0.##}", - "totalLengthX": "Kokonaispituus: {0}", - "totalLengthXSplitLine": "Kokonaispituus: {0} (jakolinja!)", "translate": "Käännä", "translatePercentX": "Käännetään: {0}%", "translateRow": "Käännä rivi", @@ -700,6 +731,7 @@ "type": "Kirjoita", "unbreak": "Poista tekstin rivinvaihto", "unbreakLines": "Poista rivinvaihto", + "undelete": "Peru poisto", "underline": "Alaviiva", "undo": "Kumoa", "unknown": "Tuntematon", @@ -716,13 +748,11 @@ "usages": "Käyttötarkoitukset", "use": "Käytä", "useAlways": "Käytä aina", - "useLargerFontForThisWindow": "Käytä suurempaa fonttia tässä ikkunassa", "useOnce": "Käytä kerran", "useOutputFolder": "Käytä tulostuskansiota", "useSourceFolder": "Käytä lähdekansiota", "useSourceResolution": "Käytä lähdetarkkuutta", "userName": "Käyttäjänimi", - "userNameAlreadyInUse": "Käyttäjänimi jo käytössä", "vertical": "Pystysuora", "video100MsBack": "Video, 100 millisekuntia taaksepäin", "video100MsForward": "Video, 100 millisekuntia eteenpäin", @@ -736,14 +766,25 @@ "videoCustom3ForwardX": "Video, mukautetut millisekunnit ({0:#,###,##0}) eteenpäin, 3", "videoCustom4BackX": "Video, mukautetut millisekunnit ({0:#,###,##0}) taaksepäin, 4", "videoCustom4ForwardX": "Video, mukautetut millisekunnit ({0:#,###,##0}) eteenpäin, 4", - "videoEncodingX": "Videon koodaus: {0}", + "videoCustom1BackAndPauseX": "Video, mukautetut millisekunnit ({0:#,###,##0}) taaksepäin ja tauko, 1", + "videoCustom1ForwardAndPauseX": "Video, mukautetut millisekunnit ({0:#,###,##0}) eteenpäin ja tauko, 1", + "videoCustom2BackAndPauseX": "Video, mukautetut millisekunnit ({0:#,###,##0}) taaksepäin ja tauko, 2", + "videoCustom2ForwardAndPauseX": "Video, mukautetut millisekunnit ({0:#,###,##0}) eteenpäin ja tauko, 2", + "videoCustom3BackAndPauseX": "Video, mukautetut millisekunnit ({0:#,###,##0}) taaksepäin ja tauko, 3", + "videoCustom3ForwardAndPauseX": "Video, mukautetut millisekunnit ({0:#,###,##0}) eteenpäin ja tauko, 3", + "videoCustom4BackAndPauseX": "Video, mukautetut millisekunnit ({0:#,###,##0}) taaksepäin ja tauko, 4", + "videoCustom4ForwardAndPauseX": "Video, mukautetut millisekunnit ({0:#,###,##0}) eteenpäin ja tauko, 4", "videoExtension": "Videotiedoston laajennus", "videoFile": "Videotiedosto", "videoFileGenerated": "Videotiedosto luotu", "videoFileGeneratedX": "Luotu videotiedosto: \"{0}\"", + "videoFilesGenerated": "Videotiedostot luotu", + "xVideosGenerated": "{0} videota luotu", + "xOfYVideosGenerated": "{0}/{1} videota luotu", + "savedInX": "Tallennettu kohteeseen {0}", + "savedInXFolders": "Tallennettu {0} kansioon", "videoFiles": "Videotiedostot", "videoAndAudioFiles": "Video- ja äänitiedostot", - "videoInformation": "Videotiedot", "videoOffset": "Videon siirtymä", "videoOneFrameBack": "Video, yksi ruutu taaksepäin", "videoOneFrameForward": "Video, yksi ruutu eteenpäin", @@ -754,7 +795,6 @@ "videoPlayer": "Videosoitin", "videoPosition": "Videon sijainti", "videoResolution": "Videon resoluutio", - "viewX": "Näkymä {0}", "visible": "Näkyvissä", "voice": "Ääni", "volume": "Äänenvoimakkuus", @@ -763,9 +803,7 @@ "waveformCenterOnVideoPosition": "Aaltomuodon keskipiste videon sijainnissa", "waveformPasteFromClipboard": "Liitä leikepöydältä", "waveformSpectrogram": "Aaltomuoto/spektrogrammi", - "webServiceUrl": "Verkkopalvelun URL", "width": "Leveys", - "windowPositionAndSize": "Ikkunan sijainti ja koko", "wordsPerMin": "Sanoja/min", "pixelWidth": "Pikselileveys", "wpm": "Sanoja/min", @@ -775,8 +813,6 @@ "xNotFound": "\"{0}\" ei löytynyt", "xRequiresAnApiKey": "{0} vaatii API-avaimen", "xRequiresAValidUrl": "{0} vaatii kelvollisen URL-osoitteen (esim. \"http://...\" tai \"https://...\")", - "xSeconds": "{0:0.0##} sekuntia", - "xSubtitles": "{0:#,###,##0} tekstitystä", "yes": "Kyllä", "zeroBytes": "0 tavua", "copyToClipboard": "Kopioi leikepöydälle", @@ -826,10 +862,8 @@ "xOfYLinesUpdated": "{0}: {1}/{2} riviä päivitetty", "xOfYLinesUpdatedAndZNeighborsAdjusted": "{0}: {1}/{2} riviä päivitetty, {3} naapuria säädetty", "noBookmarksFound": "Ei enää kirjanmerkkejä", - "openAiCompatibleStt": "OpenAI-yhteensopiva STT", "openAiCompatibleSttEndpoint": "STT-päätepisteen URL", "openAiCompatibleSttApiKey": "API-avain", - "openAiCompatibleSttModel": "Malli", "openAiCompatibleSttExtraHeaders": "Lisäotsikot", "openAiCompatibleSttTimeout": "Aikakatkaisu (sekuntia)", "openAiCompatibleSttLanguage": "Kielivihje", @@ -839,6 +873,9 @@ "dashScopeSttRegion": "Alue", "dashScopeSttEnableWords": "Sanatason aikaleimat", "dashScopeSttRegionKeyHint": "Huomaa: Alibaba Cloud Model Studion API-avaimet ovat aluekohtaisia - varmista, että valittu alue vastaa aluetta, jossa API-avain luotiin (Kiina vs. kansainvälinen).", + "googleCloudSttProjectId": "Projektin tunnus (vain Application Default Credentials -tunnistetiedoille)", + "googleCloudSttBucketName": "Tallennussäilö (tyhjä = automaattinen)", + "googleCloudSttDynamicBatching": "Dynaaminen eräkäsittely (noin 5x halvempi, ei viivetakuuta)", "onlineSttApiKeyMissing": "API-avain vaaditaan. Anna API-avain ja yritä uudelleen.", "openAiCompatibleSttAutoTranscribeOnAudioSelection": "Litteroi uusi aaltomuotovalinta automaattisesti puheentunnistuksella", "openAiCompatibleSttStream": "Suoratoistovastaus", @@ -848,11 +885,9 @@ "configurationRequired": "Määritys vaaditaan", "transcriptionError": "Litterointivirhe", "transcriptionComplete": "Litterointi valmis", - "transcribingWithOpenAi": "Litteroidaan OpenAI-palvelulla...", "processingResponse": "Käsitellään vastausta...", "unauthorizedApiKey": "Ei valtuutusta: virheellinen API-avain tai riittämättömät käyttöoikeudet.", "requestTimeout": "Pyynnön aikakatkaisu: palvelimen vastaus kesti liian kauan.", - "noSegmentsReturned": "Litterointipalvelu ei palauttanut segmenttejä.", "openAiCompatibleSttUrlMissing": "OpenAI-yhteensopiva STT-päätepisteen URL vaaditaan. Anna URL ja yritä uudelleen.", "openAiCompatibleSttUrlNotResponding": "OpenAI-yhteensopiva STT-päätepiste ei vastannut:\n{0}\n\nTarkista URL ja että palvelin on käynnissä.", "transcriptionFailed": "Litterointi epäonnistui", @@ -897,10 +932,10 @@ "replace": "_Korvaa...", "multipleReplace": "_Korvaa useita...", "goToLineNumber": "_Siirry rivinumeroon...", + "commandPalette": "Komento_paletti...", "rightToLeftMode": "Oikealta vasemmalle -tila", "modifySelectionDotDotDot": "Muokkaa _valintaa...", "tools": "_Työkalut", - "toolsSelectedLines": "_Työkalut (valitut rivit)", "adjustDurations": "_Säädä kestoja...", "applyDurationLimits": "Käytä kestojen _rajoituksia...", "batchConvert": "_Muunna erissä...", @@ -990,6 +1025,7 @@ "toggleSelectSubtitleWhilePlayingCurrentlyOff": "Vaihda tekstityksen valinta toiston aikana (nykyinen tila: pois päältä)", "fillSelectedLinesWithClipboard": "Täytä valitut rivit leikepöydän tekstillä", "beautifyTimeCodes": "Kaunista aikakoodit...", + "improveTimeCodes": "Paranna aikakoodeja (pakotettu kohdistus)...", "evenlyDistributeLines": "Jaa rivit tasaisesti (CPS:n mukaan)", "mergeContinuationLines": "Yhdistä jatkorivit...", "snapAllTimesToFrames": "Kiinnitä kaikki ajat kehyksiin", @@ -1044,6 +1080,9 @@ "selectCurrentLineWhilePlayingHint": "Valitse nykyinen tekstitys toiston aikana {0}", "videoPosition": "Videon sijainti {0}", "videoPositionTextBox": "Videon sijainnin tekstikenttä {0}", + "toolbarLineBreakX": "Rivinvaihto {0} (työkalurivin loppuosa jatkuu uudella rivillä)", + "initialText": "Valitun rivin alkuperäinen teksti", + "initialTextHint": "Valitun rivin teksti sellaisena kuin se oli, kun rivi valittiin", "hideWaveformToolbar": "Piilota työkalurivi {0}", "resetZoomAndSpeed": "Nollaa zoomaus ja toistonopeus {0}", "removeBlankLines": "Poista tyhjät rivit {0}", @@ -1057,6 +1096,15 @@ "textPlayHint": "Toista nykyinen tekstitys ja pysäytä lopussa {0}", "textPauseHint": "Keskeytä toisto {0}", "textNextHint": "Toista seuraava tekstitys ja pysäytä lopussa {0}", + "moveSelectedLines": "Siirrä valittuja rivejä (taakse/eteen-painikkeet)", + "moveSelectedLinesAndFollowing": "Siirrä valittuja ja kaikkia seuraavia rivejä (taakse/eteen-painikkeet)", + "moveAllLines": "Siirrä kaikkia rivejä (taakse/eteen-painikkeet)", + "moveSelectedLinesBackHint": "Siirrä valittuja rivejä {0} ms taaksepäin {1}", + "moveSelectedLinesForwardHint": "Siirrä valittuja rivejä {0} ms eteenpäin {1}", + "moveSelectedLinesAndFollowingBackHint": "Siirrä valittuja ja kaikkia seuraavia rivejä {0} ms taaksepäin {1}", + "moveSelectedLinesAndFollowingForwardHint": "Siirrä valittuja ja kaikkia seuraavia rivejä {0} ms eteenpäin {1}", + "moveAllLinesBackHint": "Siirrä kaikkia rivejä {0} ms taaksepäin {1}", + "moveAllLinesForwardHint": "Siirrä kaikkia rivejä {0} ms eteenpäin {1}", "guessStartNoLineSelected": "Arvaa alku: yhtään riviä ei ole valittu", "guessStartTimeCodesLocked": "Arvaa alku: aikakoodit on lukittu", "guessStartNoWaveform": "Arvaa alku: ei aaltomuotoa", @@ -1078,6 +1126,9 @@ "charactersPerSecond": "Merkkejä sekunnissa: {0}", "chooseColumn": "Valitse sarake", "columnPaste": "Sarake liitetään", + "commandPaletteTitle": "Komentopaletti", + "commandPaletteSearchPlaceholder": "Kirjoita hakeaksesi komentoja...", + "commandPaletteNoCommandsFound": "Ei vastaavia komentoja", "createdEmptyTranslation": "Luotu tyhjä käännös nykyisestä tekstityksestä", "deleteText": "Poista teksti", "deleteTextAndShiftCellsUp": "Poista teksti ja siirrä soluja ylöspäin", @@ -1115,18 +1166,20 @@ "noTextInClipboard": "Leikepöydällä ei ole tekstiä", "oneLineCopiedFromOriginal": "Yksi rivi kopioitu alkuperäisestä tekstityksestä", "oneLineCopiedToOriginal": "Yksi rivi kopioitu alkuperäiseen tekstitykseen", + "onlineOnlyVideo": "Vain verkossa oleva video", + "onlineOnlyVideoXSizeYDownloadAndOpen": "Videotiedosto \"{0}\" ({1}) on tallennettu vain verkkoon, esimerkiksi Dropboxiin tai iCloud Driveen, ja se on ladattava ennen kuin sen voi avata.\n\nLadataanko ja avataanko se nyt?", "oneLineMerged": "Yksi rivi yhdistetty", "oneLineSwitched": "Yksi rivi vaihdettu", "overwriteExistingCells": "Korvaa olemassa olevat solut", "overwriteOrShiftCellsDown": "Korvaa/siirrä soluja alaspäin", "parsingMatroskaFile": "Jäsennetään Matroska-tiedostoa...", + "readingDvdSubtitles": "Luetaan DVD-tekstityksiä...", "pasteFromClipboardDotDotDot": "Liitä leikepöydältä...", "redoPerformed": "Toiminto suoritettu uudelleen", "redoPerformedXActionLeft": "Toiminto toistettu (jäljellä olevat toimet: {0})", "removedUnicodeControlCharactersX": "Poistettu Unicode-ohjausmerkit {0} riviltä", "removedXBlankLines": "Poistettu {0} tyhjää riviä", "replacedXWithYCountZ": "Korvattu \"{0}\" merkillä \"{1}\" ({2} esiintymää)", - "replacedXWithYInLineZ": "Korvattu \"{0}\" merkillä \"{1}\" rivillä {2}", "reversedStartAndEndingsForRightToLeftX": "Käännetään alku- ja loppumerkit oikealta vasemmalle {0} rivillä", "ruleProfileIsX": "Sääntöprofiili on nyt \"{0}\"", "saveLanguageFile": "Tallenna kielitiedosto", @@ -1134,7 +1187,6 @@ "shiftTextCellsDown": "Siirrä tekstisoluja alaspäin", "singleLineLength": "Rivin pituus: ", "speedIsNowX": "Nopeus on nyt \"{0}\"", - "spellCheckResult": "Oikeinkirjoituksen tarkistus valmis. \n\n• Muutetut sanat: {0}\n• Ohitetut sanat: {1}", "subtitleGridFormattingX": "Ruudukon muotoilu: {0}", "subtitleImportedFromMatroskaFile": "Tekstitys tuotu Matroska-tiedostosta", "textDown": "Teksti alas", @@ -1160,13 +1212,14 @@ "trimmedXLines": "Leikattu {0} tekstitysriviä", "pastedXLinesOverSelectedLines": "Liitetty {0} rivi(ä) valittujen rivien päälle", "pastedXOfYLinesOverSelectedLines": "Liitetty {0}/{1} rivi(ä) valittujen rivien päälle - loput eivät mahtuneet valintaan", + "insertedXLinesFromClipboard": "Lisätty {0} riviä leikepöydältä", "openOriginalDifferentNumberOfSubtitlesXY": "Alkuperäisessä tekstitystiedostossa ei ole sama määrä tekstityksiä kuin nykyisessä tekstitystiedostossa.\n\n• Alkuperäiset tekstitykset: {0}\n• Nykyiset tekstitykset: {1}", - "importXMatchingOriginalLines": "Tuodaanko {0} vastaavaa alkuperäistä tekstitystä?", "originalTextReadOnly": "Alkuperäinen teksti (vain luku)", "originalTextEditMode": "Alkuperäinen teksti (muokkaustila)", "originalIsReadOnlyNotSaved": "Alkuperäinen tekstitys on vain luettava viite, eikä sitä tallennettu", "originalIsEmptyNotSaved": "Alkuperäisessä tekstityksessä ei ole lainkaan tekstiä, eikä sitä tallennettu", "originalIsReadOnlyReference": "Alkuperäinen tekstitys on avattu vain luettavana viitteenä", + "closeTranslationQuestionXY": "Suljetaanko käännös \"{0}\"?\n\nAlkuperäisestä tekstityksestä \"{1}\" tulee muokattava tekstitys. Itse käännöstiedostoa ei muuteta.", "allowEditOfOriginalSubtitle": "Salli alkuperäisen tekstityksen muokkaus", "showAllOriginalLinesX": "Näytä kaikki alkuperäiset rivit ({0} ilman vastinetta täällä)", "showAllOriginalLinesHint": "Rivit, joilla ei ole vastinetta, näytetään lisäriveinä, joten näet mitä käännöksestä puuttuu.", @@ -1200,6 +1253,7 @@ "fileExportedInFormatXToY": "Tiedosto viety muodossa {0} kohteeseen {1}", "fileExportedInFormatXToFileY": "Tiedosto viety muodossa \"{0}\" tiedostoon \"{1}\"", "fixedXLines": "Korjattu {0} riviä", + "toolXChangedYLines": "{0}: {1} riviä muutettu", "transcriptionCompletedWithXLines": "Transkriptio valmis, {0} riviä", "openSubtitleFileX": "Avaako tekstitystiedoston \"{0}\"?", "replacedXOccurrences": "Korvattu {0} esiintymää", @@ -1234,13 +1288,9 @@ "file": { "ebuSaveOptions": { "title": "EBU-tallennusasetukset", - "generalSubtitleInformation": "Yleiset tekstitystiedot", "codePageNumber": "Koodisivunumero", "diskFormatCode": "Levyn muotoilukoodi", "displayStandardCode": "Näytön standardikoodi", - "colorRequiresTeletext": "Värit vaativat teksti-TV:n!", - "alignmentRequiresTeletext": "Kohdistus vaatii teksti-TV:n!", - "teletextCharsShouldBe38": "Teletekstin 'Merkkien enimmäismäärä rivillä' tulisi olla 38!", "characterCodeTable": "Merkkitaulukko", "languageCode": "Kielikoodi", "originalProgramTitle": "Alkuperäinen ohjelman nimi", @@ -1257,7 +1307,6 @@ "maxNumberOfDisplayableRows": "Rivien enimmäismäärä", "diskSequenceNumber": "Levyn järjestysnumero", "totalNumberOfDisks": "Levyjen kokonaismäärä", - "import": "Tuo...", "textAndTimingInformation": "Teksti- ja ajoitustiedot", "justificationCode": "Tasoituskoodi", "verticalPosition": "Pystysuora sijainti", @@ -1274,11 +1323,6 @@ "errors": "Virheet", "errorsX": "Virheet: {0}", "maxLengthError": "Rivi {0} ylittää enimmäispituuden ({1}) {2}: {3}", - "textUnchangedPresentation": "Muuttumaton esitys", - "textLeftJustifiedText": "Vasemmalle tasattu teksti", - "textCenteredText": "Keskitetty teksti", - "textRightJustifiedText": "Oikealle tasattu teksti", - "useBoxForOneNewLine": "Valitse 'Käytä tekstin ympärillä olevaa kehystä' vain yhdelle rivinvaihdolle", "maxLengthErrorTeletextColored": "Rivi {0}-{1}: merkkien enimmäismäärän tulisi olla 36 (ei {2}) kaksinkertaisen korkeuden väritekstille", "maxLengthErrorTeletextWhite": "Rivi {0}-{1}: merkkien enimmäismäärän tulisi olla 37 (ei {2}) kaksinkertaisen korkeuden valkoiselle tekstille", "maxLengthErrorTeletextSingleHeight": "Rivi {0}: merkkien enimmäismäärän tulisi olla 38 (ei {1}) yksinkertaisen korkeuden valkoiselle tekstille", @@ -1303,22 +1347,29 @@ "formattingDotDotDot": "Muotoilu...", "imageBasedSubtitleForEditDotDotDot": "Kuvapohjainen tekstitys muokkausta varten...", "imageBasedSubtitleForOcrDotDotDot": "Kuvapohjainen tekstitys OCR:ää varten...", + "dvdSubtitlesDotDotDot": "Tekstitykset DVD:ltä (IFO/VOB)...", + "titleImportDvd": "Tuo tekstitykset DVD:ltä", + "dvdIfoFile": "IFO-tiedosto", + "dvdVobFiles": "VOB-tiedostot", + "dvdVideoStandard": "Videostandardi", + "dvdStartRipping": "Aloita kopiointi", + "dvdRippingAborted": "Kopiointi keskeytetty", + "dvdOpenIfoFile": "Avaa DVD:n IFO-tiedosto", + "dvdAddVobFiles": "Lisää VOB-tiedostoja", + "dvdIfoFiles": "DVD IFO -tiedostot", + "dvdVobFileType": "DVD VOB -tiedostot", + "dvdDropHint": "Avaa IFO-tiedosto (VIDEO_TS\\VTS_01_0.IFO) tai lisää VOB-tiedostoja - tai pudota ne tähän", + "dvdNotAnIfoFileX": "{0} ei ole DVD:n IFO-tiedosto", + "dvdMenuIfoNoTitleSetsX": "Nimikesarjoja (VTS_xx_0.IFO) ei löytynyt kohteen {0} vierestä", + "dvdEncryptedXOfY": "{0}/{1} tekstityspaketista on yhä CSS-salattuja - nämä VOB-tiedostot on kopioitu purkamatta salausta, joten osa tekstityskuvista on sotkeutuneita.\n\nPura DVD:n salaus ensin DVD-kopiointityökalulla, jotta tulos on puhdas.\n\nJatketaanko silti?", "splitTextAt": "Jaa teksti kohdassa", "blankLines": "Tyhjät rivit", "oneLineIsOneSubtitle": "Yksi rivi on yksi tekstitys", "twoLinesAreOneSubtitle": "Kaksi riviä on yksi tekstitys", "importFilesDotDotDot": "Tuo tiedostot...", "multipleFiles": "Tuo useista tekstitiedostoista (yksi tiedosto on yksi tekstitys)", - "importOptions": "Tuontiasetukset", - "autoSplitText": "Jaa teksti automaattisesti", - "lineMode": "Rivimoodi", "maxLineLength": "Rivien enimmäispituus", - "maxLinesPerSubtitle": "Enimmäisrivimäärä tekstitystä kohti", - "minGapBetweenSubtitles": "Vähimmäisväli tekstitysten välillä", "mergeShortLines": "Yhdistä lyhyet rivit", - "removeLinesWithoutLetters": "Poista rivit, joissa ei ole kirjaimia", - "splitAtEndCharsSetting": "Jaa loppumerkkien kohdalta", - "takeTimeFromCurrentFile": "Ota aika nykyisestä tiedostosta", "fixed": "Kiinteä", "numberOfSubtitlesX": "Tekstitysten lukumäärä: {0}", "numberOfSubtitlesXForcedY": "Tekstitysten määrä: {0} ({1} pakotettua)", @@ -1330,14 +1381,18 @@ "forcedAlignerProgress": "Kohdistetaan... ikkuna {0}/{1}, {2}/{3} riviä", "forcedAlignerSetupTitle": "Kohdista aikakoodit pakotetulla kohdistimella", "forcedAlignerSetupIntro": "Pakotettu kohdistin sovittaa jo olemassa olevan tekstitystekstin ääneen ilman, että sitä litteroidaan ensin. Pitkät videot kohdistetaan paloissa, joten mikä tahansa pituus käy.", + "forcedAlignerEndsFromSpeech": "Aseta loppuajat eristetystä puheesta (hidas)", + "forcedAlignerEndsFromSpeechHint": "Pakotettu kohdistin löytää, mistä rivi alkaa, mutta ei sitä, mihin se päättyy, joten loppuajat tulevat yleensä lukuajasta. Kun tämä on päällä, musiikki ja äänitehosteet poistetaan ensin äänestä ja kukin rivi päättyy, kun sen puhe hiljenee. Kestää GPU:lla suunnilleen yhtä kauan kuin itse video - ja ilman sitä monta kertaa kauemmin.", + "forcedAlignerIsolatingSpeech": "Eristetään puhetta... {0}", + "forcedAlignerIsolatingSpeechFailed": "Puhetta ei voitu eristää - loppuajat asetettiin sen sijaan lukuajan mukaan.", "forcedAlignerModel": "Kohdistimen malli", - "forcedAlignerDownloadEngine": "Lataa / päivitä moottori..." + "forcedAlignerDownloadEngine": "Lataa / päivitä moottori...", + "forcedAlignerEstimatedXOfY": "{0}/{1} riviä ei voitu kohdistaa, ja ne sijoitettiin lukuajan mukaan - niiden aikakoodit ovat vain arvioita. Käsikirjoitus on luultavasti pidempi kuin videossa puhuttu." }, "export": { "exportImagesProfiles": "Vie kuvaprofiilit", "leftRightMargin": "Vasen/oikea marginaali", "topBottomMargin": "Ylä-/alamarginaali", - "titleExportBluRaySup": "Vie Blu-ray (sup)", "lineSpacingPercent": "Riviväli %", "paddingLeftRight": "Vasemman/oikean reunan täyttö", "paddingTopBottom": "Ylä-/alarajan täyttö", @@ -1378,10 +1433,21 @@ "titleExportDCinemaInteropPng": "D-Cinema interop/png", "titleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", "imageBasedSubtitleSaved": "Kuvapohjainen tekstitys tallennettu", - "titleExportBdnXml": "Vie BDN/xml", "titleExportWebVttThumbnails": "Vie WebVTT (pikkukuvat)", "fullFrameImage": "Koko kuvaruudun kokoinen kuva", "fullFrameImageHint": "Tee jokaisesta kuvasta videokehyksen kokoinen, tekstitys omalla paikallaan", + "stereo3D": "3D", + "stereo3DHint": "3D-videolle: piirrä tekstitys kerran kummankin silmän kuvan puolikkaaseen", + "halfSideBySide": "Puolikas rinnakkain", + "halfTopBottom": "Puolikas ylä/ala", + "depth3D": "Syvyys", + "depth3DHint": "Kuinka paljon tekstitys erottuu ruudusta - positiivinen tuo sen lähemmäs, negatiivinen työntää sen taaemmas", + "plane3D": "3D-Plane", + "plane3DHint": "Anna kullekin tekstitykselle syvyys, jonka 3D Blu-ray tallentaa sille, BD3D2MK3D:llä tai OFSExtractorilla tehdystä 3D-Plane-tiedostosta (.ofs). Syvyys-arvoa käytetään, kun 3D-Planessa sitä ei ole", + "openPlane3DTitle": "Avaa 3D-Plane-tiedosto", + "unableToLoadPlane3DX": "3D-Planen lataus epäonnistui: {0}", + "plane3DXDepthYToZ": "{0} (syvyys {1}–{2})", + "plane3DXNoDepth": "{0} (ei syvyysarvoja)", "textEffect": "Tekstitehoste", "textEffectSettingsTitle": "Tekstitehosteen asetukset", "textEffectPreset": "Esiasetus", @@ -1413,13 +1479,10 @@ "statistics": { "title": "Tilastot", "titleWithFileName": "Tilastot - {0}", - "generalStatistics": "Yleiset tilastot", - "mostUsed": "Eniten käytetyt...", "mostUsedLines": "Eniten käytetyt rivit", "mostUsedWords": "Eniten käytetyt sanat", "nothingFound": "Ei löytynyt mitään", "numberOfLinesX": "Tekstitysrivien määrä: {0:#,##0}", - "numberOfFilesX": "Tekstitystiedostojen määrä: {0:#,##0}", "lengthInFormatXinCharactersY": "Merkkien määrä muodossa {0}: {1:#,###,##0}", "numberOfCharactersInTextOnly": "Pelkän tekstin merkkien määrä: {0:#,###,##0}", "totalDuration": "Kaikkien tekstitysten kokonaiskesto: {0:#,##0}", @@ -1453,7 +1516,6 @@ "gapMaximum": "Väli - enimmäisarvo: {0:#,##0} ms", "gapAverage": "Väli - keskiarvo: {0:#,##0.##} ms", "gapExceedingMinimum": "Väli - alle minimi ({0:#,##0} ms): {1} ({2:0.00}%)", - "export": "Vie...", "durationMinimum": "Kesto - vähintään: {0:0.000} sekuntia", "durationMaximum": "Kesto - enintään: {0:0.000} sekuntia", "durationAverage": "Kesto - keskimäärin: {0:0.000} sekuntia", @@ -1490,7 +1552,22 @@ "restoreAutoBackupFile": "Palauta automaattisen varmuuskopion tiedosto", "restoreXFromY": "Haluatko palauttaa \"{0}\" kohteesta {1}?", "deleteAllSubtitleBackups": "Haluatko poistaa kaikki tekstityksen varmuuskopiotiedostot?", - "deleteAll": "Poista kaikki" + "deleteAll": "Poista kaikki", + "subtitles": "Tekstitykset", + "settingsBackupInfo": "Settings.json varmuuskopioidaan Subtitle Editin käynnistyessä, enintään kerran {0} päivässä ja vain, jos asetukset ovat muuttuneet. Uusimmat {1} varmuuskopiota säilytetään.", + "settingsBackupInfoEveryStart": "Settings.json varmuuskopioidaan aina Subtitle Editin käynnistyessä, jos asetukset ovat muuttuneet. Uusimmat {0} varmuuskopiota säilytetään.", + "settingsBackupOff": "Asetusten automaattinen varmuuskopiointi on pois päältä (Asetukset → Asetukset → Tiedosto).", + "lastSettingsBackupX": "Viimeisin varmuuskopio: {0}", + "noSettingsBackupsYet": "Asetuksista ei ole vielä varmuuskopioita", + "openSettingsBackupFolder": "Avaa asetusten varmuuskopiokansio", + "backUpSettingsNow": "Varmuuskopioi nyt", + "settingsBackedUp": "Nykyiset asetukset varmuuskopioitiin.", + "restoreSettings": "Palauta asetukset", + "restoreSettingsFromX": "Haluatko korvata nykyiset asetuksesi varmuuskopiolla ajalta {0}?\n\nNykyiset asetuksesi varmuuskopioidaan ensin. Jotkin muutokset tulevat voimaan vasta, kun Subtitle Edit käynnistetään uudelleen.", + "settingsRestored": "Asetukset palautettiin. Käynnistä Subtitle Edit uudelleen, jotta kaikki muutokset tulevat voimaan.", + "settingsRestoreFailed": "Asetuksia ei voitu palauttaa: {0}", + "settingsBackupNotValid": "varmuuskopio ei ole kelvollinen asetustiedosto, joten nykyiset asetuksesi säilytettiin", + "deleteAllSettingsBackups": "Haluatko poistaa kaikki asetusten varmuuskopiotiedostot?" }, "propertiesDCinema": { "title": "D-Cinema SMPTE -ominaisuudet", @@ -1504,22 +1581,16 @@ "editRate": "Muokkausnopeus", "timeCodeRate": "Aikakoodinopeus", "startTime": "Aloitusaika", - "font": "Fontti", "fontId": "Fontin tunnus", "fontUri": "Fontin URI", - "generate": "Luo", - "fontColor": "Fontin väri", "chooseColor": "Valitse väri", "fontEffect": "Fontin tehoste", "effectColor": "Tehosteen väri", - "fontSize": "Fontin koko", "topBottomMargin": "Ylä-/alamarginaali", "fadeUpTime": "Haalistumisaika", "fadeDownTime": "Haalistumisaika", - "frames": "Kuvat", "zPosition": "Z-sijainti", - "zPositionHelp": "Positiiviset luvut siirtävät tekstiä kauemmas, negatiiviset lähemmäs; jos z-sijainti on nolla, teksti on 2D", - "export": "Vie..." + "zPositionHelp": "Positiiviset luvut siirtävät tekstiä kauemmas, negatiiviset lähemmäs; jos z-sijainti on nolla, teksti on 2D" }, "webVtt": { "setStylesForSelectedLinesTitle": "Aseta WebVTT-tyylit valituille riveille", @@ -1552,20 +1623,66 @@ "compareOnlyInOneFile": "Vain yhdessä tiedostossa", "compareTextOrTimeDifference": "Teksti-/aikaero", "compareNumberDifference": "Numeroero", - "ignoreLineBreaks": "Ohita rivinvaihdot", "ignoreWhitespace": "Ohita välilyönnit", "ignoreWhitespaceHint": "Rivejä, jotka eroavat vain välilyöntien, sarkainten tai rivinvaihtojen osalta, ei lasketa erilaisiksi", "ignoreFormatting": "Ohita muotoilu", - "onlyLookForDifferencesInText": "Etsi eroja vain tekstistä", - "cannotCompareWithImageBasedSubtitles": "Ei voi verrata kuvapohjaisiin tekstityksiin", - "statisticsTitle": "Tilastot", "ignoreFormattingHint": "Rivejä, jotka eroavat vain muotoilutunnisteiden osalta, kuten tai {\\an8}, ei lasketa erilaisiksi", "showOnlyDifferencesInText": "Vain tekstin erot", + "ignoreNumbering": "Ohita numerointi", + "ignoreNumberingHint": "Rivejä, jotka eroavat vain numeroltaan, ei lasketa erilaisiksi", + "ignoreTimeDifferenceMs": "Aikatoleranssi (ms)", + "ignoreTimeDifferenceMsHint": "Alku- ja loppuaikoja, jotka eroavat enintään näin monta millisekuntia, ei lasketa erilaisiksi", + "compareDifferences": "Erot", + "compareTextDifferences": "Tekstierot", + "compareCurrent": "Nykyinen", + "compareReference": "Vertailu", + "compareEditable": "Muokattava", + "compareEditableHint": "Tässä tehdyt muutokset siirtyvät tekstitykseen, kun napsautat Käytä", + "compareReadOnly": "Vain luku", + "compareTakeFromReference": "Ota teksti ja ajoitus vertailusta", + "compareInsertFromReference": "Lisää tämä rivi nykyiseen tekstitykseen", + "compareDeleteFromCurrent": "Poista tämä rivi nykyisestä tekstityksestä", + "compareTakeText": "Ota teksti", + "compareTakeTiming": "Ota ajoitus", + "compareEditLine": "Muokkaa riviä", + "compareEditHint": "Ctrl+Enter tallentaa, Esc peruuttaa", + "compareEdited": "Muokattu", + "compareOnePendingChange": "1 odottava muutos", + "compareXPendingChanges": "{0} odottavaa muutosta", + "compareDiscardXChanges": "Hylätäänkö vertailussa tehdyt {0} muutosta?", + "compareXChangesApplied": "Vertailu: {0} muutosta otettu käyttöön", + "compareChangeTextX": "#{0} teksti vertailusta", + "compareChangeTimingX": "#{0} ajoitus vertailusta", + "compareChangeTextAndTimingX": "#{0} teksti ja ajoitus vertailusta", + "compareChangeEditedX": "#{0} muokattu", + "compareChangeInsertedX": "#{0} lisätty", + "compareChangeDeletedX": "#{0} poistettu", + "compareSyncPoint": "Synkronointipiste", + "compareSyncPointHint": "Synkronointipiste - nämä kaksi riviä näytetään aina parina, ja ylä- ja alapuolen rivit kohdistetaan erikseen", + "compareSyncPickCurrent": "Synkronointipiste: käytä tätä nykyistä riviä", + "compareSyncPickReference": "Synkronointipiste: käytä tätä vertailuriviä", + "compareSyncRemove": "Poista synkronointipiste", + "compareClearXSyncPoints": "Tyhjennä synkronointipisteet ({0})", + "compareSyncCurrentPickedX": "Nykyinen #{0} valittu synkronointipisteeksi - valitse vastaava vertailurivi ja napsauta Synkronoi", + "compareSyncReferencePickedX": "Vertailu #{0} valittu synkronointipisteeksi - valitse vastaava nykyinen rivi ja napsauta Synkronoi", + "compareSyncWithCurrentX": "Synkronoi nykyisen #{0} kanssa", + "compareSyncWithReferenceX": "Synkronoi vertailun #{0} kanssa", + "compareSyncApply": "Synkronointi", + "compareSyncPointSetXY": "Synkronointipiste asetettu: nykyinen #{0} ja vertailu #{1} näytetään nyt parina", + "compareSyncAlreadyPairedXY": "Nykyinen #{0} ja vertailu #{1} näytetään jo parina samalla alulla - ei synkronoitavaa", + "compareSyncPointShiftedXYZW": "Synkronointipiste asetettu: nykyiset #{0}-#{1} siirretty {2} alkamaan vertailun #{3} kanssa", + "compareChangeSyncShiftXYZ": "#{0}-#{1} siirretty {2} (synkronointipiste)", + "compareTimingDeltaHint": "Kuinka paljon myöhemmin (+) tai aiemmin (−) vertailu alkaa ja päättyy kuin nykyinen rivi", "loadXFromFile": "Lataa \"{0}\" tiedostosta", + "compareLoadSavedFile": "Lataa tallennettu tiedosto", "saveCompareHtmlTitle": "Tallenna vertailu HTML-tiedostona", "pickMatroskaTrackX": "Valitse Matroska-raita - {0}", "pickTransportStreamTrackX": "Valitse transport stream -raita - {0}", + "chapters": "Luvut", + "dvdVobFilesMissingX": "VOB-tiedostoja puuttuu ({0} % löytyi)", "pickMp4TrackX": "Valitse MP4-raita - {0}", + "pickMxfTrackX": "Valitse MXF-raita - {0}", + "pickMpegTrackX": "Valitse MPEG-raita - {0}", "rosettaProperties": "Timed Text Rosetta IMSC -ominaisuudet", "rosettaFontSize": "Fonttikoko (rivin korkeus)", "propertyTimeBase": "Aikaperusta", @@ -1575,7 +1692,6 @@ "propertyDefaultRegion": "Oletusalue", "propertyStyleAttributeName": "Tyyliattribuutin nimi", "propertyTimeCodeFormat": "Aikakoodin muoto", - "propertyFileExtension": "Tiedostopääte", "propertyTopOrigin": "Yläreunan origo", "propertyTopExtent": "Yläreunan laajuus", "propertyBottomOrigin": "Alareunan origo", @@ -1625,7 +1741,6 @@ "selectionIntersect": "Leikkaa valinnan kanssa" }, "multipleReplace": { - "title": "Useita korvauksia", "editRule": "Muokkaa sääntöä", "newRule": "Uusi sääntö", "editCategory": "Muokkaa luokkaa", @@ -1642,24 +1757,23 @@ "findWhat": "Etsi", "descriptionOptional": "Kuvaus (valinnainen)", "invalidRegularExpressionX": "Virheellinen säännöllinen lauseke: {0}", - "regularExpressionTooSlowX": "Säännöllinen lauseke luovutti {0} sekunnin jälkeen - sääntö ohitetaan, kokeile yksinkertaisempaa lauseketta" + "regularExpressionTooSlowX": "Säännöllinen lauseke luovutti {0} sekunnin jälkeen - sääntö ohitetaan, kokeile yksinkertaisempaa lauseketta", + "moveToCategory": "Siirrä luokkaan" }, "find": { "searchTextWatermark": "Etsi tekstiä...", "wholeWord": "Koko sana", - "caseSensitive": "Kirjainkoko merkitsevä", - "caseInsensitive": "Kirjainkoko ei merkitse", "findPrevious": "Etsi edellinen", "findNext": "Etsi seuraava", "replaceAndFindNext": "Korvaa ja etsi seuraava", "replaceAll": "Korvaa _kaikki", - "replaceTitle": "Korvaa", - "replaceWith": "Korvaa seuraavalla", "replaceTextWatermark": "Korvaa seuraavalla...", "replaceIn": "Korvaa/etsi kohteesta", "replaceInTextAndOriginal": "Teksti ja alkuperäinen teksti", "replaceInTextOnly": "Vain teksti", - "replaceInOriginalOnly": "Vain alkuperäinen teksti" + "replaceInOriginalOnly": "Vain alkuperäinen teksti", + "replacedOneOccurrence": "Korvattiin yksi esiintymä", + "replacedXOccurrences": "Korvattiin {0} esiintymää" }, "regularExpressionContextMenu": { "wordBoundary": "Sanaraja (\\b)", @@ -1687,6 +1801,7 @@ "xLinesYSubtitles": "{0} riviä, {1} tekstitystä", "xLinesYSubtitlesZErrors": "{0} riviä, {1} tekstitystä, {2} virhe(ttä)", "couldNotParseAsX": "Jäsentäminen muotoon {0} ei onnistunut", + "readAsXUseAsY": "Lähdettä ei voitu lukea muodossa {1}, mutta se voitiin lukea muodossa {0}.\nKäytetäänkö rivejä ja tallennetaanko edelleen muodossa {1}?", "selectedXCharactersYLines": "Valittu: {0} merkkiä {1} rivillä", "replacedXOccurrences": "Korvattu {0} esiintymä(ä)", "invalidRegularExpression": "Virheellinen säännöllinen lauseke", @@ -1701,7 +1816,6 @@ "aiReview": { "title": "Tekoälytarkistus", "review": "Tarkista", - "stop": "Lopeta", "editPrompt": "Muokkaa kehotetta...", "editPromptTitle": "Muokkaa tarkistuskehotetta", "promptInfo": "Mallille lähetettävät ohjeet - {language} korvataan tekstityksen kielellä.", @@ -1712,7 +1826,6 @@ "reviewingLineXOfY": "Tarkistetaan riviä {0}/{1}...", "reviewDone": "Tarkistus valmis - {0} ehdotusta {1} rivillä", "noIssuesFound": "Ongelmia ei löytynyt", - "categoryAll": "Kaikki", "categorySpelling": "Oikeinkirjoitus", "categoryGrammar": "Kielioppi", "categoryPunctuation": "Välimerkit", @@ -1724,8 +1837,23 @@ "largeChangeWarning": "Suuri muutos - näyttää uudelleenkirjoitukselta, tarkista huolellisesti", "mismatchWarning": "Ei muistuta alkuperäistä - saattaa kuulua toiselle riville", "engineError": "Tekoälymoottoriin ei saatu yhteyttä: {0}", - "setupHint": "Valitse ensin moottori ja malli kohdasta Työkalut -> Tekoälytarkistus.", - "playCurrentLineHint": "Toista valittu rivi videosoittimessa ja pysäytä sen loppuun (myös kaksoisnapsauttamalla riviä)" + "playCurrentLineHint": "Toista valittu rivi videosoittimessa ja pysäytä sen loppuun (myös kaksoisnapsauttamalla riviä)", + "editAfterHint": "Napsauta valitun rivin tekstiä muokataksesi korjausta ennen sen käyttöä (Enter tallentaa, Escape peruuttaa)", + "template": "Malli", + "templatePlaceholder": "Valitse malli, joka korvaa kehotteen", + "templateStandard": "Tavallinen oikoluku", + "templateSpeechToText": "Puhe tekstiksi -tuloksen siistiminen", + "templateMachineTranslation": "Konekäännöksen korjaus", + "templateSdh": "SDH / kuulovammaisille", + "referenceContext": "Taustatiedot", + "referenceContextInfo": "Valinnainen. Nimet, hahmot, sanasto, juoniselostus tai tyyliohjeet - malli pitää näitä nimien ja termien auktoriteettina. Lähetetään jokaisen erän mukana.", + "referenceContextPlaceholder": "Nimet: Kaito, Mei-täti, tri Hollis\nTermit: Shinkansen, loimiydin\nJuoni: Kaito matkustaa Tokioon etsimään kadonnutta isäänsä.", + "generateContext": "Luo tekoälyllä", + "generateContextHint": "Anna valitun tekoälymoottorin lukea tekstitys ja laatia luonnos nimistä, termeistä ja juonesta - tarkista tulos ennen käyttöä", + "generatingContextPartXOfY": "Luetaan osaa {0}/{1}...", + "generatingContextSynopsis": "Kirjoitetaan juoniselostusta...", + "replaceContextQuestion": "Korvataanko nykyiset taustatiedot?", + "noContextGenerated": "Tekoälymoottori ei palauttanut käyttökelpoisia taustatietoja." }, "aiAssistant": { "title": "Tekoälyavustaja", @@ -1743,22 +1871,14 @@ "showReasoning": "Näytä mallin päättely" }, "fixCommonErrors": { - "title": "Korjaa yleiset virheet", - "step1": "Vaihe 1/2 - Valitse korjattavat virheet", - "whatToFix": "Mitä korjata", - "example": "Esimerkki", - "selectAll": "Valitse kaikki", - "inverseSelection": "Käännä valinta", "back": "< &Takaisin", "next": "&Seuraava >", - "step2": "Vaihe 2/2 - Tarkista korjaukset", "fixes": "Korjaukset", "ruleDetailsDotDotDot": "Säännön tiedot...", "showOnlyThisRule": "Näytä vain tämän säännön korjaukset", "appliedRulesForLineX": "Rivillä {0} käytetyt säännöt", "ruleX": "Sääntö: {0}", "log": "Loki", - "function": "Funktio", "removedEmptyLine": "Poista tyhjä rivi", "removedEmptyLineAtTop": "Poista tyhjä rivi yläreunasta", "removedEmptyLineAtBottom": "Poista tyhjä rivi alareunasta", @@ -1779,13 +1899,13 @@ "removeLineBreaksPixelWidth": "Poista rivinvaihdot tekstityksistä, jotka mahtuvat yhdelle riville (pikselileveys)", "fixUppercaseIInsideLowercaseWords": "Korjaa ison 'i'-kirjaimen pienissä sanoissa (OCR-virhe)", "fixDoubleApostrophes": "Korjaa kaksoisapostrofit ('') yksittäisiksi lainausmerkeiksi (\")", + "fixMisreadQuotes": "Korjaa lainausmerkeiksi väärin luetut heittomerkit (OCR, englanti)", "addPeriods": "Lisää piste rivien jälkeen, joissa seuraava rivi alkaa isolla kirjaimella", "startWithUppercaseLetterAfterParagraph": "Aloita isolla kirjaimella kappaleen jälkeen", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Aloita isolla kirjaimella pisteen jälkeen kappaleen sisällä", "startWithUppercaseLetterAfterColon": "Aloita isolla kirjaimella kaksoispisteen/puolipisteen jälkeen", "fixLowercaseIToUppercaseI": "Korjaa yksinään oleva pieni 'i' isoksi 'I':ksi (englanti)", "fixCommonOcrErrors": "Korjaa yleiset OCR-virheet (käyttämällä OCR-korvausluetteloa)", - "commonOcrErrorsFixed": "Yleiset OCR-virheet korjattu (käytetty OcrReplaceList-tiedosto): {0}", "removeSpaceBetweenNumber": "Poista välilyönnit numeroiden välistä", "breakDialogsOnOneLine": "Jaa vuoropuhelut yhdelle riville", "removeDialogFirstInNonDialogs": "Poista alkuviiva ensimmäiseltä riviltä muissa kuin vuoropuheluissa", @@ -1802,18 +1922,17 @@ "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Foo
bar! -> Foo bar!", "fixDoubleApostrophesExample": "''Sisältää kaksinkertaisia yksinkertaisia lainausmerkkejä'' -> \"Sisältää yksinkertaisen kaksinkertaisen lainausmerkin\"", + "fixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "addPeriodsExample": "Hello world -> Hello world.", "startWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: foobar!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Hello there! how are you? -> Hello there! How are you?", "startWithUppercaseLetterAfterColonExample": "Speaker: hello world! -> Puhuja: Hei maailma!", "removeHyphensSingleLineExample": "- Foobar. -> Foobar.", "fix3PlusLinesExample": "Foo
bar
baz! -> Foo bar baz!", - "xMissingQuotesAdded": "Puuttuvat lainausmerkit lisätty: {0}", "fix3PlusLine": "Korjaa yli kahden rivin tekstitys", "fix3PlusLines": "Korjaa yli kahden rivin tekstitykset", "analysing": "Analysoidaan...", "nothingToFix": "Ei korjattavaa :)", - "fixesFoundX": "Löydettyjä korjauksia: {0}", "xFixesApplied": "Sovellettuja korjauksia: {0}", "xFixesYSelected": "{0} korjausta - {1} valittu", "nothingFixableBut": "Mitään ei voitu korjata automaattisesti. Tekstitys sisältää virheitä – katso lokista lisätietoja", @@ -1822,7 +1941,6 @@ "fixFirstLetterToUppercaseAfterParagraph": "Korjaa kappaleen ensimmäinen kirjain isoksi", "mergeShortLine": "Yhdistä lyhyt rivi (yksi lause)", "mergeShortLineAll": "Yhdistä lyhyt rivi (kaikki paitsi vuoropuhelut)", - "unbreakShortLinePixelWidth": "Poista lyhyen rivin katkos (pikselileveys)", "breakLongLine": "Katkaise pitkä rivi", "fixLongDisplayTime": "Korjaa pitkä näyttöaika", "fixInvalidItalicTag": "Korjaa virheellinen kursiivitagi", @@ -1845,7 +1963,6 @@ "fixUppercaseIInsideLowercaseWord": "Korjaa ison 'i'-kirjaimen pienessä sanassa", "fixMissingPeriodAtEndOfLine": "Lisää puuttuva piste rivin loppuun", "refreshFixes": "Päivitä käytettävissä olevat korjaukset", - "applyFixes": "Käytä valittuja korjauksia ja sulje", "autoBreak": "Automaattinen &br", "unbreak": "&Poista rivinvaihto", "fixDoubleDash": "Korjaa '--' -> '...'", @@ -1864,8 +1981,6 @@ "fixSpaceBetweenNumbersExample": "1 100 -> 1100", "fixDialogsOneLineExample": "Hei John! - Hei Ida! -> Hei John!
- Hei Ida!", "removeDialogFirstInNonDialogsExample": "- Kuinka voit? -> Kuinka voit?", - "selectDefault": "Valitse oletus", - "setDefault": "Aseta nykyiset korjaukset oletukseksi", "fixContinuationStyleX": "Korjaa jatkotyyli: {0}", "fixUnnecessaryLeadingDots": "Poista tarpeettomat alkupisteet", "fixCommonErrorsProfiles": "Korjaa yleisten virheiden profiilit", @@ -1873,7 +1988,6 @@ "searchRulesDotDotDot": "Etsi sääntöjä...", "goToApplyFixes": "Siirry korjausten soveltamiseen", "backToFixList": "Takaisin korjausluetteloon", - "applyFixesAndClose": "Sovella korjaukset ja sulje", "fixCommonOcrErrorsStep2": "Korjaa yleiset virheet, vaihe 2 (sovella korjauksia)", "fixCommonOcrErrorsStep2FixesFoundX": "Korjaa yleiset virheet, vaihe 2 – Löydetyt korjaukset: {0}", "action": "Toiminto", @@ -1886,18 +2000,11 @@ "adjustDurations": { "title": "Säädä kestoja", "adjustVia": "Säädä kautta", - "seconds": "Sekuntia", - "percent": "Prosenttia", "recalculate": "Laske uudelleen", "addSeconds": "Lisää sekunteja", - "setAsPercent": "Aseta prosenttiosuutena kestosta", "note": "Huomautus: Näyttöaika ei saa olla päällekkäin seuraavan tekstin alkamisaikojen kanssa", "fixed": "Kiinteä", - "milliseconds": "Millisekuntia", "extendOnly": "Vain pidennä", - "enforceDurationLimits": "Pakota vähimmäis- ja enimmäiskesto", - "checkShotChanges": "Älä pidennä ohi kuvausvaihtojen", - "batchCheckShotChanges": "Ota huomioon kuvausvaihdot (jos saatavilla)", "recalculateRequiresOcrNote": "Uudelleenlaskenta ei ole käytettävissä — yhdellä tai useammalla tekstityksellä ei ole OCR-tekstiä. Suorita ensin OCR." }, "applyDurationLimits": { @@ -1905,6 +2012,8 @@ "fixMinDurationMs": "Kiinteä vähimmäiskesto (ms)", "doNotGoPastShotChange": "Älä ylitä kuvanvaihtoa", "fixMaxDurationMs": "Kiinteä enimmäiskesto (ms)", + "fixMinDurationFrames": "Korjaa vähimmäiskesto (kehykset)", + "fixMaxDurationFrames": "Korjaa enimmäiskesto (kehykset)", "minimumDurationMilliseconds": "Vähimmäiskesto (millisekuntia):", "maximumDurationMilliseconds": "Enimmäiskesto (millisekuntia):", "maxDurationShouldBeHigherThanMinDuration": "Enimmäiskeston tulisi olla pidempi kuin vähimmäiskesto", @@ -1924,12 +2033,8 @@ }, "beautifyTimeCodes": { "title": "Siisti aikakoodit", - "beautifySettings": "Siistiasetukset", "snapToFrames": "Kiinnitä kehyksiin", - "frameGap": "Kehysväli", "minDuration": "Minimikesto (ms)", - "shotChangeThreshold": "Kuvausvaihdon kynnysarvo (ms)", - "shotChangeOffset": "Kuvausvaihdon siirtymä (kehykset)", "original": "Alkuperäinen", "beautified": "Kaunistettu", "subtitlesCount": "Tekstitykset", @@ -1958,10 +2063,76 @@ "timeCodesExtractFailed": "Aikakoodeja ei voitu lukea videosta", "timeCodesHint": "Kiinnitä cuet videon todellisiin kehysaikoihin sen sijaan, että oletettaisiin vakiokuvataajuus. Vaatii koko videon lukemisen kerran; tulos tallennetaan välimuistiin." }, + "improveTimeCodes": { + "title": "Paranna aikakoodeja (pakotettu kohdistus)", + "aligner": "Kohdistin", + "alignerHint": "Malli, joka kuuntelee kunkin rivin äänestä. Parhaat vaihtoehdot tekstityksen kielelle on lueteltu ensin.", + "maxShift": "Enimmäissiirto (sekuntia)", + "maxShiftHint": "Kuinka paljon tekstitys voi olla epätahdissa. Rivi, jonka alku siirtyisi tätä enemmän, jätetään ennalleen ja merkitään. Arvosta riippumatta yksittäistä riviä, joka haluaisi siirtyä yli puoli sekuntia enemmän kuin ympäröivät rivit, ei siirretä sokeasti: se seuraa naapureitaan, jos ne kaikki siirtyivät, ja muuten se tarjotaan valitsematta tarkistettavaksesi.", + "adjustStartTimes": "Säädä alkuaikoja", + "adjustEndTimes": "Säädä loppuaikoja", + "isolateSpeech": "Eristä puhe ensin (hidas)", + "isolateSpeechHint": "Poistaa musiikin ja äänitehosteet ennen kohdistusta, jolloin kohdistin kuulee vain dialogin. Auttaa riveissä, jotka puhutaan kovan musiikin tai toiminnan päälle, mutta kestää GPU:lla suunnilleen yhtä kauan kuin itse ääni - ja ilman sitä monta kertaa kauemmin.", + "isolatingSpeech": "Eristetään puhetta... (tämä kestää hetken)", + "isolateSpeechFailed": "Puhetta ei voitu eristää - kohdistettiin sen sijaan alkuperäiseen ääneen.", + "checkWithSpeechToText": "Tarkista puhe tekstiksi -toiminnolla", + "checkWithSpeechToTextHint": "Litteroi myös äänen ja tarkistaa jokaisen siirron sitä vasten, missä sanat todella kuultiin. Puheen vahvistamat suuret siirrot valitaan puolestasi, ja siirrot pois kohdasta, jossa rivi kuullaan, jätetään valitsematta tarkistettavaksesi. Näyttää myös, kuinka suuri osa kustakin rivistä kuultiin - pieni osuus tarkoittaa, että teksti poikkeaa sanotusta. Tekstitys, joka on enimmäissiirtoa enemmän epätahdissa - vakiosiirtymä, kuvataajuuden eroavuudesta johtuva ajelehtiminen tai hypyt leikattujen kohtausten kohdalla - synkronoidaan ensin kuultujen sanojen mukaan. Käyttää Crisp ASR Parakeetia, joka vie GPU:lla muutaman minuutin elokuvan mittaiselle videolle.", + "checkWithSpeechToTextNotAvailableX": "Puhe tekstiksi -tarkistus ei ole käytettävissä kielelle {0}", + "transcribingToCheck": "Litteroidaan kohdistuksen tarkistamiseksi...", + "speechToTextFailed": "Puhe tekstiksi epäonnistui - aikakoodeja ei tarkistettu sitä vasten.", + "speechToTextX": "Puhe tekstiksi: {0}", + "speechToTextConfirmedXDisputedY": "Puhe: {0} vahvistettu, {1} kiistetty", + "hardlyHeardX": "Puhe tekstiksi kuuli vain {0} % tekstityksen sanoista. Onko tekstitys puhutulla kielellä? Kohdistin ei pysty sijoittamaan käännöstä.", + "heard": "Kuultu", + "heardHint": "Kuinka suuren osan rivistä puhe tekstiksi kuuli. Pieni osuus tarkoittaa, että teksti poikkeaa sanotusta - juuri siellä kohdistin todennäköisimmin erehtyy.", + "statusConfirmedBySpeech": "Puheen vahvistama", + "statusDisputedBySpeech": "Kuultu entisellä paikallaan", + "statusMovedWithSync": "Siirretty synkronoinnin mukana", + "syncedFirstXY": "Synkronoitu ensin: {0} s alussa, {1} s lopussa", + "showSpeechOnly": "Näytä vain puhe", + "showSpeechOnlyHint": "Piirrä kohdistettu aaltomuoto äänestä, josta musiikki ja äänitehosteet on poistettu; alkuperäinen aaltomuoto pysyy ennallaan vertailua varten. Käytettävissä, kun puhe on eristetty - täällä tai pääikkunan aaltomuodon \"Näytä vain puhe\" -toiminnolla.", + "align": "Kohdista", + "original": "Alkuperäinen", + "aligned": "Kohdistettu", + "intro": "Valitse kohdistin ja paina \"Kohdista\" kuunnellaksesi jokaisen rivin äänestä ja tarkentaaksesi sen aikakoodeja.", + "extractingAudio": "Puretaan ääntä...", + "aligningBatchXOfY": "Kohdistetaan... erä {0}/{1}", + "extractAudioFailed": "Ääntä ei voitu purkaa ffmpegillä.", + "modelWillBeDownloaded": "{0} ladataan", + "summaryXRetimedYKeptZSkipped": "Uudelleenajoitettu: {0} · Säilytetty: {1} · Ei puhetta: {2}", + "meanShiftX": "Keskimääräinen siirto: {0} ms", + "toCheckX": "Tarkistettavia: {0}", + "largeMovesToCheckX": "{0} riviä siirtyisi yksinään pitkän matkan, ja ne jätetään valitsematta - kuuntele ne (F5 toistaa kohdistetun rivin, Shift+F5 alkuperäisen) ja valitse oikeat.", + "linesToCheckX": "{0} riviä jätetään valitsematta tarkistettaviksi - kuuntele ne (F5 toistaa kohdistetun rivin, Shift+F5 alkuperäisen) ja valitse oikeat.", + "changeXOfY": "Muutos {0}/{1}", + "previousChange": "Edellinen muutos", + "nextChange": "Seuraava muutos", + "startShift": "Alku", + "endShift": "Loppu", + "statusRetimed": "Uudelleenajoitettu", + "statusMovedWithNeighbours": "Siirretty naapuriensa mukana", + "statusLargeMoveUnconfirmed": "Suuri siirto - kuuntele, valitse käyttääksesi", + "statusUnchanged": "Jo paikallaan", + "statusNoSpeech": "Ei puhetta", + "statusShiftTooLarge": "Säilytetty - siirto liian suuri", + "statusFailed": "Säilytetty - kohdistin epäonnistui", + "statusAdjustedByHand": "Säädetty käsin", + "alignedWaveformHint": "Vedä riviä siirtääksesi sitä tai vedä sen reunoja muuttaaksesi sen alkua tai loppua.", + "playLine": "Toista rivi", + "undoAdjustment": "Kumoa säätö", + "playPause": "Toista / tauko", + "playAligned": "Kohdistettu", + "playAlignedHint": "Toista valittu rivi sen kohdistetuilla aikakoodeilla", + "apply": "Käytä", + "applyHint": "Poista rivin valinta säilyttääksesi sen alkuperäiset aikakoodit. Kaksoisnapsauta riviä toistaaksesi sen. Rivejä voi myös siirtää tai muuttaa niiden kokoa kohdistetussa aaltomuodossa." + }, "bridgeGaps": { - "title": "Yhdistä aukot", "bridgeGapsSmallerThan": "Yhdistä aukot, jotka ovat pienempiä kuin (ms)", "minGap": "Pienin aukko (ms)", + "bridgeGapsSmallerThanFrames": "Yhdistä aukot, jotka ovat pienempiä kuin (kehykset)", + "minGapFrames": "Vähimmäisaukko (kehykset)", + "calculateBridgeGapsSmallerThanDotDotDot": "Laske aukkojen yhdistämisraja kuvataajuudesta...", + "useXMsAsBridgeGapsSmallerThan": "Yhdistetäänkö aukot, jotka ovat pienempiä kuin \"{0}\" millisekuntia?", "numberOfSmallGapsBridgedX": "Täytettyjen pienten aukkojen määrä: {0}", "percentFoPrevious": "Edellisen aukon suuruus (%)", "gapChange": "Aukon muutos" @@ -1973,8 +2144,6 @@ "sortBy": { "title": "Lajittele tekstitykset", "sortOrder": "Lajittelujärjestys", - "sortByNumber": "Numero", - "sortByStartTime": "Aloitusaika", "sortByEndTime": "Lopetusaika" }, "batchConvert": { @@ -1997,6 +2166,7 @@ "addColor": "Lisää väri", "deleteLinesWithSpecificActorsOrStyles": "Poista rivit, joissa on tiettyjä näyttelijöitä tai tyylejä (erota useat pilkulla)", "useSourceStylesIfPossible": "Käytä lähdetyylejä, jos mahdollista", + "keepSourceEmbeddedFonts": "Säilytä lähteen upotetut fontit (alatunniste)", "editStyles": "Muokkaa tyylejä", "editProperties": "Muokkaa ominaisuuksia", "editAttachments": "Muokkaa liitteitä", @@ -2017,7 +2187,6 @@ "assaChangeStyleFromStyle": "Vaihda tyyli", "assaChangeStyleToStyle": "tyyliin", "assaChangeStyleImportStyle": "Tuo tyyli...", - "assaChangeStyleImportedX": "Tuotu: {0}", "assaChangeStyleTrimUnusedStyles": "Poista käyttämättömät tyylit", "assaChangeStylePropertiesTitle": "Muuta tyylin ominaisuuksia", "assaChangeStylePropertiesInfo": "Muuttaa valitut kentät tiedoston jokaisessa tyylissä koskematta itse tyyleihin.", @@ -2029,13 +2198,52 @@ "convertColorsToDialogReBreakLines": "Rivitä rivit uudelleen", "snapTimeCodesToFramesInfo": "Pyöristää jokaisen alku- ja loppuajan lähimpään kehykseen. Kuvataajuus luetaan videotiedostosta, jolla on sama nimi kuin tekstitystiedostolla, ellei kiinteää kuvataajuutta ole valittu.", "addFolderDotDotDot": "Lisää kansio...", + "addFolderRecursiveDotDotDot": "Lisää kansio alikansioineen...", "selectFolderToConvert": "Valitse kansio, jonka tiedostot muunnetaan", "includeSubfolders": "Sisällytä alikansiot kansiota lisättäessä", + "videoFilesWhenAddingFolder": "Videotiedostot (mkv, mp4, ts...) kansiota lisättäessä", + "videoFilesAsk": "Kysy", + "videoFilesInclude": "Lisää niiden tekstitysraidat", + "videoFilesSkip": "Ohita", + "folderContainsXVideoFiles": "Kansiossa on {0} videotiedostoa (mkv, mp4, ts...).\n\nLisätäänkö myös niiden upotetut tekstitysraidat vai vain tekstitystiedostot?", + "addVideoFiles": "Lisää videotiedostot", + "skipVideoFiles": "Vain tekstitystiedostot", + "doNotAskAgainVideoFiles": "Älä kysy uudelleen (muuta joukkomuunnoksen asetuksissa)", + "settingsSectionOutput": "Tuloste", + "settingsSectionAddingFiles": "Tiedostojen lisääminen", + "settingsSectionImageBasedSubtitles": "Kuvapohjaiset tekstitykset (OCR)", + "settingsSectionOther": "Muut", "keepSourceFileTimestamp": "Säilytä lähdetiedoston päiväys/aika tulostiedostoissa", - "scanningFolderX": "Selataan {0}..." + "preventSleepWhileConverting": "Estä tietokonetta siirtymästä lepotilaan muunnoksen aikana", + "scanningFolderX": "Selataan {0}...", + "transportStreamSettings": "Transport Stream -asetukset", + "transportStreamSettingsDotDotDot": "Transport Stream -asetukset...", + "transportStreamSettingsInfo": "Koskee Transport Stream -tiedostoista (.ts/.m2ts) purettuja tekstitysraitoja. Sijainti ja videon koko vaikuttavat vain DVB-kuvaraitoihin, jotka viedään kuvapohjaiseen muotoon.", + "transportStreamOverrideXPosition": "Ohita alkuperäinen X-sijainti", + "transportStreamOverrideYPosition": "Ohita alkuperäinen Y-sijainti", + "transportStreamOverrideVideoSize": "Ohita alkuperäinen videon koko", + "transportStreamBottomMargin": "Alamarginaali", + "transportStreamFileNameEnding": "Tiedostonimen loppu", + "transportStreamFileNameEndingInfo": "Lisätään tiedostopäätteen eteen jokaiselle puretulle raidalle. Jätä tyhjäksi käyttääksesi tavallista kielen jälkiliitettä.", + "transportStreamOnlyTeletext": "Vain teksti-TV", + "transportStreamGetSizeFromVideo": "Hae koko videosta...", + "twoLetterLanguageCodeUppercase": "Kaksikirjaiminen kielikoodi (isot kirjaimet)", + "threeLetterLanguageCodeUppercase": "Kolmikirjaiminen kielikoodi (isot kirjaimet)", + "formatContainsDotDotDot": "Muoto sisältää...", + "extensionIsDotDotDot": "Tiedostopääte on...", + "statusIsError": "Tila on virhe", + "forcedTracksOnly": "Vain pakotetut raidat", + "xConvertedYFailedInZ": "{0:#,###,##0} muunnettu, {1:#,###,##0} epäonnistui, aika {2}", + "xNotProcessed": "{0:#,###,##0} käsittelemättä", + "removeUnicodeControlCharactersTitle": "Poista Unicode-ohjausmerkit", + "removeUnicodeControlCharactersInfo": "Poistaa tekstistä näkymättömät Unicode-suunnanohjausmerkit (LRM, RLM, LRE, RLE, PDF, LRO ja RLO) ja korvaa sitovat välilyönnit tavallisilla välilyönneillä.", + "preset": "Esiasetus", + "savePresetDotDotDot": "Tallenna esiasetus...", + "deletePreset": "Poista esiasetus", + "presetName": "Esiasetuksen nimi", + "deletePresetX": "Poistetaanko esiasetus \"{0}\"?" }, "changeCasing": { - "title": "Muuta kirjainkokoa", "fixNames": "Korjaa nimet", "namesX": "Nimiä: {0:#,##0}", "hitsX": "Osumia: {0:#,##0}", @@ -2046,9 +2254,7 @@ "allUppercase": "Kaikki isot kirjaimet", "allLowercase": "Kaikki pienet kirjaimet" }, - "changeFormatting": { - "title": "Muuta muotoilua" - }, + "changeFormatting": {}, "convertActors": { "title": "Muunna näyttelijät", "convertActorFrom": "Muunna näyttelijä", @@ -2077,18 +2283,12 @@ "outputFormatAssa": "Advanced Sub Station Alpha (.ass)", "style1": "Tyyli 1", "style2": "Tyyli 2", - "outlineWidth": "Ääriviivan leveys", - "shadowWidth": "Varjon leveys", - "alignTop": "Yläreuna", - "alignBottom": "Alareuna", - "merge": "_Yhdistä", - "pleaseLoadTwoSubtitles": "Lataa kaksi tekstitystä" + "merge": "_Yhdistä" }, "splitSubtitle": { "title": "Jaa tekstitys", "numberOfEqualParts": "Yhtä suurten osien lukumäärä", "saveSplitParts": "_Tallenna jaetut osat", - "subtitleSplitIntoXParts": "Tekstitys jaettu {0} osaan.", "xPartsSavedInFormatYToFolder": "{0} osaa tallennettu muodossa {1} kansioon:" }, "splitBreakLongLines": { @@ -2114,13 +2314,14 @@ "onlyContinuationLines": "Vain jatkorivit" }, "mergeLinesWithSameText": { - "title": "Yhdistä rivit, joilla on sama teksti", "maxMsBetweenLines": "Rivien välinen enimmäisviive (millisekunteina)", - "includeIncrementingLines": "Sisällytä rivit, joilla on kasvava teksti" + "maxFramesBetweenLines": "Enimmäiskehykset rivien välillä", + "includeIncrementingLines": "Sisällytä rivit, joilla on kasvava teksti", + "includeRollUpCaptions": "Sisällytä roll-up-tekstitykset (vierivät)" }, "mergeLinesWithSameTimeCodes": { - "title": "Yhdistä rivit, joilla on sama aikakoodi", "maxMsDifference": "Suurin ero (millisekunteina)", + "maxFramesDifference": "Enimmäisero (kehykset)", "makeDialog": "Luo valintaikkunat" }, "netflixCheckAndFix": { @@ -2143,7 +2344,6 @@ "shotChanges": "Kuvien vaihdot", "startNumberSpellOut": "Alkukuvio kirjoitetaan auki", "textforHiUseBrackets": "Teksti HI:lle, käytä sulkeita", - "frameRate": "Kuvataajuus", "twoFrameGrap": "Kahden kehyksen väli", "whiteSpace": "Välilyönti", "childrensProgram": "Lastenohjelma", @@ -2181,7 +2381,6 @@ "italicsFixed": "Kiinteä kursivointi", "italicsNotAllowed": "Kursivointia ei sallita", "bridgeGapsXToYFrames": "3–{0} kehyksen väli => 2 kehyksen väli", - "startNumberSpellOutComment": "Kun numero aloittaa lauseen, se tulee aina kirjoittaa auki", "maximumXCharactersPerSecond": "Enintään {0} merkkiä sekunnissa" }, "imageBasedEdit": { @@ -2191,10 +2390,8 @@ "resizeImagesDotDotDot": "Muuta kuvien kokoa...", "adjustBrightnessDotDotDot": "Säädä kirkkautta...", "adjustAlphaDotDotDot": "Säädä alfa-arvoa...", - "centerHorizontally": "Keskitä vaakasuoraan", "cropImages": "Rajaa kuvat", "importTimeCodes": "Tuo aikakoodit...", - "setTextForSubtitle": "Aseta teksti tekstitykseen", "screenWidth": "Näytön leveys", "screenHeight": "Näytön korkeus", "alphaThresholdInfo": "Pikselit, joiden alfa-arvo on alle kynnysarvon, muuttuvat täysin läpinäkyviksi", @@ -2224,15 +2421,31 @@ "letterboxCustom": "Mukautettu palkin korkeus", "barHeightPx": "Palkin korkeus (px)", "titleSafePercent": "Turva-alue (%)", + "moveCaptions": "Siirrä tekstityksiä", + "moveCaptionsDotDotDot": "Siirrä tekstityksiä...", + "moveCaptionsTo": "Siirrä tekstitykset", + "moveCaptionsIntoBars": "Letterbox-palkkeihin (kuvan ulkopuolelle)", + "moveCaptionsIntoPicture": "Kuvan sisään (pois palkeista)", + "moveCaptionsOffset": "Etäisyys reunasta (px)", + "letterboxBarHeightXPxYOfZCaptionsWillMove": "Palkin korkeus: {0} px - {1}/{2} tekstitystä siirtyy", + "removeFadeInOut": "Poista häivytys sisään/ulos", + "removeFadeInOutXLinesRemoved": "{0} häivytysriviä yhdistetty riveihin, joihin ne kuuluvat", + "removeFadeInOutNothingFound": "Häivytysrivejä ei löytynyt", "positionSummary": "{0}×{1} - {2} tekstitystä - palkin korkeus: {3} px", "xInActivePicture": "{0} kuvassa", "xInTopBar": "{0} yläpalkissa", "xInBottomBar": "{0} alapalkissa", "noImageSubtitlesLoaded": "Kuvatekstityksiä ei ole ladattu", - "imageBasedFormatNotSupported": "Kuvapohjaista tekstitysmuotoa ei löytynyt/tueta." + "imageBasedFormatNotSupported": "Kuvapohjaista tekstitysmuotoa ei löytynyt/tueta.", + "frameRateDeclaredInFile": "Blu-ray sup -tiedostossa ilmoitettu kuvataajuus", + "frameRateDetectedFromTimeCodesX": "Blu-ray sup -aikakoodeista tunnistettu kuvataajuus (tiedosto ilmoittaa {0})", + "frameRateFromVideo": "Videon kuvataajuus", + "frameRateCurrent": "Nykyinen kuvataajuus", + "frameRateSetManually": "Käsin asetettu kuvataajuus", + "frameRateUsageInfo": "Blu-ray sup-, BDN XML-, DOST- ja FCP-viennit kirjoitetaan tällä kuvataajuudella. Se ei muuta mitään aikoja - käytä siihen \"Vaihda kuvataajuutta\".", + "useVideoFrameRateXInsteadOfY": "Videon kuvataajuus on {0}, mutta tekstitykselle on asetettu {1}.\n\nKäytetäänkö videon kuvataajuutta ({0})?" }, "removeTextForHearingImpaired": { - "title": "Poista teksti kuulovammaisille", "interjections": "Huudahdukset", "skipIfStartWith": "Ohita, jos alkaa", "removeTextBetween": "Poista teksti välistä", @@ -2251,7 +2464,6 @@ "and": "ja", "onlySeparateLines": "Vain erilliset rivit" }, - "pickAlignmentTitle": "Valitse tasaus", "removeUnicodeCharacters": { "title": "Poista/korvaa Unicode-merkit", "charactersFoundX": "Unicode-merkkejä löytyi: {0}", @@ -2261,13 +2473,13 @@ "pickFontNameInstalledFonts": "Asennetut fontit", "pickFontNameCollectedFonts": "Kerätyt fontit", "colorPickerTitle": "Valitse väri", + "colorPickerBrightness": "Kirkkaus", "filterLayersTitle": "Suodata näytettävät kerrokset", "filterLayersHideFromWaveform": "Piilota aaltomuodosta/spektrogrammista", "filterLayersHideFromSubtitleGrid": "Piilota tekstitysruudukosta", "filterLayersHideFromVideoPreview": "Piilota videon esikatselusta", "pickSubtitleFormat": "Valitse tekstitysmuoto", "pickSubtitleFormatImageBasedNoPreview": "Kuvapohjainen tekstitysmuoto.\nBittikartat luodaan muunnoksen aikana - ei tekstiesikatselua.", - "pickLayerTitle": "Aseta taso", "recentColors": "Viimeisimmät värit", "beautifyTimeCodesProfile": { "title": "Muokkaa aikakoodien kaunistusprofiilia", @@ -2275,7 +2487,11 @@ "presetDefault": "Oletus", "presetNetflix": "Netflix", "presetSdi": "SDI", - "general": "Yleistä", + "saveAsProfile": "Tallenna profiiliksi...", + "deleteProfile": "Poista profiili", + "profileName": "Profiilin nimi", + "overwriteProfileX": "Profiili nimeltä \"{0}\" on jo olemassa. Korvataanko se?", + "deleteProfileX": "Poistetaanko profiili \"{0}\"?", "gap": "Aukko", "gapSuffix": "kehystä (päivittää myös alla olevat nollasta poikkeavat aukkokentät)", "milliseconds": "ms", @@ -2312,9 +2528,7 @@ "columnMerge": "Yhdistä", "columnFirst": "Ensimmäinen rivi", "columnSecond": "Toinen rivi", - "columnMerged": "Yhdistetty", - "selectAll": "Valitse kaikki", - "inverseSelection": "Käänteinen valinta" + "columnMerged": "Yhdistetty" }, "fixCommonErrorsSettingsTitle": "Yleisten virheiden korjauksen asetukset" }, @@ -2359,59 +2573,51 @@ "correctWordsX": "Oikeat sanat: {0}", "namesX": "Nimet: {0}", "addedToDictionaryX": "Lisätty sanakirjaan: {0}", - "doNotShowThisAgain": "Älä näytä tätä viestiä uudelleen" + "doNotShowThisAgain": "Älä näytä tätä viestiä uudelleen", + "editUseAlwaysList": "Muokkaa \"Käytä aina\" -luetteloa...", + "useAlwaysListTitle": "Oikeinkirjoituksen tarkistus - \"Käytä aina\" -luettelo", + "useAlwaysListHeader": "\"Käytä aina\" -luettelo", + "useAlwaysListDescription": "Sanat, jotka oikeinkirjoituksen tarkistus korvaa automaattisesti, tallennettu toiminnoilla \"Vaihda kaikki\" ja \"Käytä aina\". Paria käytetään vain, kun sana on kirjoitettu väärin.", + "useAlwaysWord": "Väärin kirjoitettu sana", + "xPairs": "{0:#,##0} paria", + "xUnusedPairs": "{0:#,##0} ei koskaan käytetty", + "useAlwaysUnusedHint": "Ei koskaan käytetty - tämä sana on kirjoitettu oikein (tai se on nimi tai käyttäjän sana), joten oikeinkirjoituksen tarkistus ei koskaan merkitse sitä", + "removeUnused": "Poista käyttämättömät", + "useAlwaysEmpty": "Tälle kielelle ei ole vielä \"Käytä aina\" -pareja", + "useAlwaysEmptyHint": "Pareja lisätään, kun napsautat oikeinkirjoituksen tarkistuksessa \"Vaihda kaikki\" tai \"Käytä aina\".", + "useAlwaysNoMatch": "Mikään pari ei vastaa hakua", + "useAlwaysSameWord": "Korvaavan sanan on oltava eri kuin sana.", + "useAlwaysRememberOff": "\"Muista 'Käytä aina' -luettelo\" on pois päältä asetuksissa, joten oikeinkirjoituksen tarkistus ei käytä eikä tallenna tätä luetteloa." }, "video": { "burnIn": { "title": "Luo video, johon on poltettu tekstitys", - "infoAssaOff": "Huomautus: Advanced SubStation Alpha -tyylituki tuettu.", - "infoAssaOn": "Huomautus: Advanced SubStation Alpha -tyylit otetaan käyttöön :)", - "xGeneratedWithBurnedInSubsInX": "\"{0}\" luotu kiinteillä tekstityksillä {1}.", - "timeRemainingMinutes": "Jäljellä oleva aika: {0} minuuttia", - "timeRemainingOneMinute": "Jäljellä oleva aika: Yksi minuutti", - "timeRemainingSeconds": "Jäljellä oleva aika: {0} sekuntia", - "timeRemainingAFewSeconds": "Jäljellä oleva aika: Muutama sekunti", - "timeRemainingMinutesAndSeconds": "Jäljellä oleva aika: {0} minuuttia ja {1} sekuntia", - "timeRemainingOneMinuteAndSeconds": "Jäljellä oleva aika: Yksi minuutti ja {0} sekuntia", - "targetFileName": "Kohdetiedoston nimi: {0}", "targetFileSize": "Kohdetiedoston koko (vaatii 2-vaiheisen koodauksen)", "fileSizeMb": "Tiedoston koko megatavuina", "matchSourceVideoSize": "Käytä lähdevideon kokoa", - "passX": "Vaihe {0}", - "encoding": "Koodaus", "bitRate": "Bittinopeus", "totalBitRateX": "Kokonaisbittinopeus: {0}", "sampleRate": "Näytetaajuus", "audio": "Ääni", - "stereo": "Stereo", "preset": "Esiasetus", + "tune": "Viritys", "pixelFormat": "Pikselimuoto", "crf": "CRF", - "tuneFor": "Säädä", - "alignRight": "Kohdista oikealle", - "getStartPosition": "Hae aloituskohta", - "getEndPosition": "Hae loppukohta", "useSource": "Käytä lähdettä", - "useSourceFolder": "Käytä lähdekansiota", - "useSourceResolution": "Käytä lähteen tarkkuutta", - "outputSettings": "Tulostustiedosto/kansio...", "fontSizeFactor": "Fonttikoko", "boxType": "Laatikon tyyppi", - "fixRightToLeft": "Korjaa oikealta vasemmalle", - "cut": "Leikkaa", "fromTime": "Alkaen ajasta", "toTime": "Loppuaika", "audioEncoding": "Äänen koodaus", "outputProperties": "Tulostusominaisuudet...", "videoFileSize": "Videotiedoston koko", "oneBox": "Yksi ruutu", - "boxPerLine": "Ruutu riviä kohti", - "logoInfo": "Valitse PNG-kuva ja vedä se paikalleen videolle." + "logoInfo": "Valitse PNG-kuva ja vedä se paikalleen videolle.", + "noSubtitlesGenerateAnyway": "Poltettavia tekstitysrivejä ei ole.\n\nLuodaanko video ilman tekstityksiä?", + "noSubtitlesInXItemsGenerateAnyway": "{0} erän kohteessa ei ole poltettavia tekstitysrivejä.\n\nLuodaanko nämä videot ilman tekstityksiä?" }, "videoTransparent": { - "title": "Luo läpinäkyvä video tekstityksillä", - "infoAssaOff": "Huomautus: Tukee SubStation Alpha -tyylien edistyneitä ominaisuuksia.", - "infoAssaOn": "Huomautus: SubStation Alpha -tyylien edistyneitä ominaisuuksia käytetään :)" + "title": "Luo läpinäkyvä video tekstityksillä" }, "audioToText": { "title": "Puhe tekstiksi", @@ -2419,6 +2625,21 @@ "translateToEnglish": "Käännä englanniksi", "transcribing": "Transkriboi...", "transcribingXOfY": "Transkriboin {0} / {1}...", + "linesTranscribedXOfYFailedZ": "{0}/{1} riviä litteroitiin - {2} epäonnistui tai niissä ei ollut puhetta.\n\nEpäonnistuneet rivit säilyttävät nykyisen tekstinsä. Käytetäänkö litteroidut rivit vai yritetäänkö epäonnistuneita uudelleen (voit vaihtaa moottoria tai asetuksia ensin)?", + "linesTranscribedXOfYCancelled": "Litterointi peruutettiin {0}/{1} rivin jälkeen.\n\nKäytetäänkö litteroidut rivit? Muut rivit säilyttävät nykyisen tekstinsä.", + "noLinesTranscribed": "Yhtäkään {0} rivistä ei voitu litteroida.\nKatso lisätietoja työkalujen lokista.", + "applyTranscribedLines": "Käytä litteroidut", + "retryFailedLines": "Yritä epäonnistuneita uudelleen", + "isolateSpeech": "Eristä puhe (hidas)", + "isolateSpeechHint": "Poistaa musiikin ja äänitehosteet ennen litterointia. Vähemmän puuttuvia rivejä ja parempi ajoitus äänessä, jossa on kovaa musiikkia, mutta kestää GPU:lla suunnilleen yhtä kauan kuin itse ääni - ja ilman sitä monta kertaa kauemmin.", + "isolatingSpeech": "Eristetään puhetta...", + "isolateSpeechFailed": "Puhetta ei voitu eristää - litteroidaan sen sijaan alkuperäinen ääni.", + "detectSpeakers": "Tunnista puhujat", + "detectSpeakersHint": "Aloittaa jokaisen rivin puhujalla, esim. \"(speaker 0)\", käyttäen NVIDIAn Sortformer-diarisointia (enintään 8 puhujaa). Toimii parhaiten taustajärjestelmillä, jotka jakavat rivit puhujan vaihtuessa, kuten Parakeet ja Cohere.", + "detectSpeakersNeedsNewerCrispAsr": "\"Tunnista puhujat\" vaatii Crisp ASR v{0}:n tai uudemman, mutta asennettuna on v{1}.\n\nPäivitä Crisp ASR (rataspainike moottorin vieressä) tai poista \"Tunnista puhujat\" käytöstä.", + "xNeedsNewerCrispAsr": "{0} vaatii Crisp ASR v{1}:n tai uudemman, mutta asennettuna on v{2}.\n\nLadataanko ja asennetaanko päivitys nyt?", + "vad": "VAD", + "vadHint": "Puheaktiivisuuden tunnistus: vain puhe litteroidaan, ja se katkaistaan puhujan taukojen kohdalta.\nAuto: Silero, ja vain sitä tarvitseville moottoreille (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: aina päällä, kaikille Crisp ASR -moottoreille. FireRedVAD on tarkin, Whisper-VAD antaa vähiten ja siisteimmät katkaisut mutta on hitain.\nIndex-Echo käyttää aina Sileroa. Lisäasetusten --vad, --vad-model tai --chunk-seconds ovat etusijalla.", "inputLanguage": "Syöttökieli", "advancedWhisperSettings": "Whisperin lisäasetukset", "downloadingSpeechToTextEngine": "Lataa puheesta tekstiksi -moottoria", @@ -2432,7 +2653,6 @@ "selectModel": "Valitse malli", "addCustomModelDotDotDot": "Lisää mukautettu malli...", "customModelHelp": "Voit käyttää omaa mallia: valitse mallitiedosto (whisper.cpp ggml '.bin') tai mallikansio (faster-whisper-kansio, jossa on 'model.bin'). Se kopioidaan mallikansioon ja lisätään yllä olevaan luetteloon.", - "reDownloadX": "Lataa {0} uudelleen", "updateXTitle": "Päivitä {0}?", "updateXMessage": "{0}:n uudempi versio on saatavilla.{1}{1}Lataatko ja asennatko päivityksen nyt?", "downloadingSpeechToTextModel": "Lataan puheesta tekstiksi -mallia", @@ -2444,16 +2664,7 @@ "fixCasing": "Korjaa kirjainkoko", "addPeriods": "Lisää pisteet", "changeUnderlineToColor": "Vaihda alleviivaus väriksi", - "cueBuilding": "Tekstitysten muodostus (MLX Whisper)", - "cueRebuild": "Muodosta tekstitykset uudelleen sanojen aikaleimoista", - "cueMaxChars": "Merkkien enimmäismäärä tekstitystä kohden", - "cueMaxSeconds": "Sekuntien enimmäismäärä tekstitystä kohden", - "cueMaxCps": "Merkkien enimmäismäärä sekunnissa", - "vocabularyPrompt": "Sanastokehote (nimet, paikat, termit)", - "beamSize": "Beam-koko", - "beamSizeNote": "0 on nopein. 5 antaa parhaan tarkkuuden (kuten Faster Whisper) noin 20-30 % pidemmällä ajalla. Yli 5:n arvoista on harvoin hyötyä.", "viewToolsLogFile": "Näytä työkalujen lokitiedosto", - "downloadX": "Lataa {0}", "removeNonSpeechLines": "Poista ei-puherivit", "removeNonSpeechLinesHint": "Poista rivit, jotka kuvaavat vain ääntä, kuten \"[Musiikkia]\" tai \"(aallot lyövät)\"", "removeRepeatedLines": "Poista toistuvat rivit", @@ -2512,7 +2723,7 @@ "cloneVoicePerLinePreparing": "Otetaan kunkin rivin ääni videosta...", "cloneVoicePerLineNeedsVideo": "Kunkin rivin äänen kloonaaminen vaatii videon, johon tekstitys kuuluu. Avaa video ja yritä uudelleen.", "cloneVoicePerLineNoClips": "Videosta ei saatu ääntä, joten kloonattavaa ei ole. Tarkista, että videossa on ääniraita.", - "cloneVoicePerLineNeedsOriginalSubtitleX": "{0} voi kloonata rivin vain, kun se tietää, mitä videossa kyseisen rivin kohdalla sanotaan, mikä tulee alkuperäiskielisestä tekstityksestä. Alkuperäistä tekstitystä ei ole ladattu, joten jokaisen rivin puhuisi ensimmäinen tuotu ääni videon äänen sijaan.\n\nAvaa alkuperäinen tekstitys (Tiedosto > Avaa alkuperäinen...) käännöksen rinnalle ja luo uudelleen.", + "cloneVoicePerLineTranscribeClipsXYZ": "{0} voi kloonata rivin vain, kun se tietää, mitä videossa sanotaan kyseisen rivin kohdalla. Sitä ei tiedetä {1}/{2} rivin osalta - tieto tulee yleensä alkuperäiskielisestä tekstityksestä (Tiedosto > Avaa alkuperäinen...).\n\nLitteroidaanko nämä rivit videosta nyt puhe tekstiksi -toiminnolla?\n\nKyllä: valitse moottori ja videossa puhuttu kieli, niin referenssileikkeet litteroidaan ennen puheen luontia.\nEi: luo silti - nämä rivit puhutaan tavallisella äänellä videon äänen sijaan.", "voiceCloneConsentTitle": "Äänen kloonaus - ennen kuin aloitat", "voiceCloneConsentHeader": "Olet kloonaamassa ääntä", "voiceCloneConsentIntro": "Kloonaus kopioi todellisen ihmisen äänen. Siihen liittyy sääntöjä useimmissa maissa, ja EU:ssa lakisääteisiä velvoitteita, jotka koskevat sinua, eivät Subtitle Editiä. Lue tämä kerran.", @@ -2528,6 +2739,12 @@ "voiceCloneConsentDeclined": "Äänen kloonaus ei ole käytettävissä ennen kuin nämä ehdot hyväksytään.", "advancedTtsAudioProcessing": "Äänenkäsittely", "advancedTtsOutput": "Tuloste", + "advancedTtsVoiceCloning": "Äänen kloonaus", + "cleanCloneReferences": "Puhdista äänikloonauksen referenssit (Sidon)", + "cleanCloneReferencesDescription": "Poistaa musiikin, kohinan ja kaiun äänestä, josta ääni kloonataan: videosta otetuista leikkeistä ja äänten hallinnassa tuoduista tallenteista. Käyttää Sidon-puheenpalautusmallia audio.cpp:llä (940 Mt:n lataus). Kloonattu ääni ei enää kopioi taustaa, mutta hyvin hiljainen tai päällekkäinen puhe voi kuulostaa vaimealta.", + "cleaningCloneReferencesDotDotDot": "Puhdistetaan äänikloonauksen referenssejä...", + "downloadSidonTitle": "Ladataanko Sidon?", + "downloadSidonQuestionX": "Äänikloonauksen referenssien puhdistus vaatii Sidon-puheenpalautusmallin ({0}).\n\nLadataanko se nyt? Ilman sitä referenssejä käytetään sellaisenaan.", "rubberbandInstalled": "(asennettu)", "rubberbandNotFound": "(ei löydy FFmpegistä)", "generationFolder": "Luontikansio", @@ -2536,14 +2753,11 @@ "deleteTempFilesDescription": "Poistaa luontikansion, kun Teksti puheeksi -ikkuna suljetaan. Tallennetut ääni- ja videotiedostot säilytetään.", "piperSettings": "Piper-asetukset", "title": "Teksti puheeksi", - "textToSpeechEngine": "Teksti puheeksi -moottori", "reviewAudioSegments": "TTS - Tarkista äänisegmentit", "reviewAudioSegmentsHistory": "TTS - Tarkista äänihistoria", "stability": "Vakaus", "similarity": "Samankaltaisuus", "speakerBoost": "Puhujan äänen vahvistus", - "styleExaggeration": "Tyylin liioittelu", - "regenerateAudioSelectedLine": "Valitun rivin äänen uudelleenluonti", "generateSpeechFromText": "Luo puhe tekstistä", "testVoice": "Testaa ääni", "addAudioToVideoFile": "Lisää ääni videotiedostoon", @@ -2562,20 +2776,96 @@ "videoEncodingSettings": "TTS - Videon koodausasetukset", "elevenLabsSettings": "TTS - ElevenLabs-asetukset", "elevenLabsSettingsResetHint": "Palauta ElevenLabs-asetukset oletusarvoihin", + "provider": "Palveluntarjoaja", + "openAiCompatibleSettings": "TTS - OpenAI-yhteensopivat asetukset", + "customServerUrl": "Mukautetun palvelimen URL", + "customServerUrlHint": "OpenAI-yhteensopivan palvelimen täydellinen puhe-endpoint, jota käytetään, kun palveluntarjoaja on \"Custom\", esim. http://localhost:8880/v1/audio/speech", + "customModels": "Mukautetut mallit", + "customModelsHint": "Pilkuilla erotetut mallien nimet, joita tarjotaan, kun palveluntarjoaja on \"Custom\"", + "customVoices": "Mukautetut äänet", + "customVoicesHint": "Pilkuilla erotetut äänten nimet, joita käyttävät \"Custom\"-palveluntarjoaja ja OpenRouter-mallit, jotka eivät julkaise äänilistaa", + "instructions": "Ohjeet", + "instructionsHint": "Valinnainen puhetyyli, esim. \"Puhu rauhallisella, lämpimällä äänellä\". Lähetetään vain sitä tukeville malleille (ei tts-1/tts-1-hd)", + "openAiSpeedHint": "Puheen nopeus 0,25–4,0 (1,0 on normaali). Kaikki mallit eivät tue sitä", + "outputFormat": "Tulostemuoto", + "outputFormatHint": "Palvelimelta pyydetty äänimuoto. \"Auto\" pyytää MP3:a ja vaihtaa PCM:ään malleille, jotka palauttavat vain PCM:ää (esim. Gemini TTS)", "regenerateAudio": "Luo ääni uudelleen", "autoContinuePlaying": "Jatka toistoa automaattisesti", "addingAudioToVideoFileDotDotDot": "Lisätään ääntä videotiedostoon...", "preparingMergeDotDotDot": "Valmistellaan yhdistämistä...", "importVoiceDotDotDot": "Tuodaan ääni...", + "renameVoiceDotDotDot": "Nimeä ääni uudelleen...", + "renameVoiceTitle": "Nimeä ääni uudelleen", + "voiceXCouldNotBeRenamedX": "Ääntä '{0}' ei voitu nimetä uudelleen: {1}", + "deleteVoiceDotDotDot": "Poista ääni...", + "deleteVoiceTitle": "Poista ääni", + "deleteVoiceXQuestion": "Poistetaanko ääni '{0}'?\n\nReferenssitallenne ja sen tiedostot poistetaan levyltä.", + "voiceXCouldNotBeDeletedX": "Ääntä '{0}' ei voitu poistaa: {1}", "voiceImportSuccessTitle": "Ääni tuotu", "voiceXImported": "Ääni '{0}' tuotu onnistuneesti", "voiceCloneTranscriptTitle": "Syötä äänen transkriptio (vaaditaan äänen kloonaamiseen)", + "voiceManagerTitle": "TTS - Äänten hallinta", + "voiceManagerDotDotDot": "Äänten hallinta...", + "voiceManagerMenuItem": "TTS-äänten hallinta...", + "speakFromCurrentLineTitle": "Puhu nykyisestä rivistä alkaen", + "speakFromCurrentLineDotDotDot": "Puhu nykyisestä rivistä alkaen...", + "speakFromCurrentLineHint": "Lukee rivit ääneen peräkkäin nykyisestä rivistä alkaen. Lopeta painamalla Escape tai napsauttamalla toista riviä.", + "stopSpeaking": "Lopeta puhuminen", + "speakingLineX": "Puhutaan riviä {0}... (Escape lopettaa)", + "playWithSpeechTitle": "Toista puheen kanssa", + "playWithSpeechDotDotDot": "Toista puheen kanssa...", + "playWithSpeechHint": "Toistaa videon ja puhuu kunkin rivin, kun video saavuttaa sen. Keskeytä ja siirry tavalliseen tapaan; lopeta painamalla Escape.", + "lowerVideoVolumeWhileSpeaking": "Pienennä videon äänenvoimakkuutta puheen aikana", + "pauseVideoWhenSpeechRunsLate": "Keskeytä video, kun puhe ulottuu seuraavaan riviin", + "waitingForSpeechLineX": "Luodaan puhetta riville {0}... (Escape lopettaa)", + "voiceKindClone": "Kloonattu ääni", + "voiceKindPreset": "Sisäänrakennettu", + "voiceKindModel": "Äänimalli", + "voiceKindOnline": "Verkossa", + "transcript": "Litterointi", + "transcriptRequiredHint": "Pakollinen - moottori lukee tämän tallenteen litteroinnin (ref-text) kloonatessaan", + "transcriptOptionalHint": "Valinnainen - tarkka litterointi tallenteesta parantaa kloonausta", + "saveTranscript": "Tallenna litterointi", + "searchVoices": "Hae ääniä", + "loadingVoicesDotDotDot": "Ladataan ääniä...", + "noVoicesForEngine": "Ei ääniä - tuo tallenne tai lataa äänipaketti", + "noVoicesMatchFilter": "Mikään ääni ei vastaa hakua", + "copyVoiceTo": "Kopioi ääni kohteeseen", + "copyVoiceToDotDotDot": "Kopioi ääni moottoriin...", + "copyingVoiceXToYDotDotDot": "Kopioidaan ääntä '{0}' kohteeseen {1}...", + "voiceXCopiedToY": "Ääni '{0}' kopioitu kohteeseen {1}", + "voiceXCouldNotBeCopiedToY": "Ääntä '{0}' ei voitu kopioida kohteeseen {1} - katso lisätiedot lokista", + "voiceXAlreadyExistsInYContinue": "Ääni nimeltä '{0}' on jo olemassa kohteessa {1}.\n\nKopioidaanko silti?", + "openVoicesFolder": "Avaa äänikansio", + "downloadVoicePacksDotDotDot": "Lataa äänipaketteja...", + "downloadVoicePacksTitle": "TTS - Lataa äänipaketteja", + "voicePackIntro": "Äänipaketit ovat lyhyiden, puhtaiden tallenteiden ja niiden litterointien kokoelmia, valmiita kloonattaviksi. Jokainen paketti tuodaan valittuun moottoriin (jo olemassa olevat äänet ohitetaan) ja sisältää ATTRIBUTION.txt-tiedoston lisenssistä ja lähteistä.", + "voicePackDetailsXVoicesYSizeZLicense": "{0} ääntä · {1} · {2}", + "installToEngine": "Asenna moottoriin", + "downloadAndInstall": "Lataa ja asenna", + "selectAtLeastOneVoicePack": "Valitse vähintään yksi äänipaketti", + "downloadingXDotDotDot": "Ladataan {0}...", + "installingXDotDotDot": "Asennetaan {0}...", + "xVoicesInstalledYSkipped": "{0} ääntä asennettu ({1} oli jo olemassa)", "useSpeechToTextDotDotDot": "Käytä puheesta tekstiksi...", "advancedTtsSettings": "TTS:n lisäasetukset", "proAudioPostProcessing": "Pro-äänen jälkikäsittely", "proAudioPostProcessingDescription": "Soveltaa EQ-lämpöä, kohinaporttia, kompressiota, äänenvoimakkuuden normalisointia (-16 LUFS) ja häivytystä/häivytystä jokaiseen segmenttiin.", + "generatingSpeechSegmentXOfY": "Luodaan puhetta: segmentti {0}/{1}", + "adjustingSpeedSegmentXOfY": "Säädetään nopeutta: segmentti {0}/{1}", + "mergingAudioSegmentXOfY": "Yhdistetään ääntä: segmentti {0}/{1}", + "postProcessingSegmentXOfY": "Jälkikäsittely: segmentti {0}/{1}", "audioDucking": "Äänen vaimennus", "audioDuckingDescription": "Vähentää alkuperäisen videon äänenvoimakkuutta ja sekoittaa sen TTS-ääneen, jolloin alkuperäinen ääniraita on edelleen heikosti kuultavissa.", + "removeOriginalSpeech": "Poista alkuperäinen puhe (hidas)", + "removeOriginalSpeechDescription": "Säilyttää alkuperäisen videon musiikin ja äänitehosteet mutta poistaa sen puheen ja miksaa uuden puheen niiden päälle. Kestää GPU:lla suunnilleen yhtä kauan kuin itse video ja ilman sitä monta kertaa kauemmin. Kun äänen vaimennus on päällä, sen äänenvoimakkuus koskee musiikkia ja tehosteita. Koskee vain tilannetta, jossa puhe lisätään videotiedostoon.", + "removingOriginalSpeech": "Poistetaan alkuperäistä puhetta...", + "removeOriginalSpeechFailed": "Alkuperäistä puhetta ei voitu poistaa - puhe lisättiin videoon ilman poistoa.", + "speechRemovalModel": "Malli", + "speechRemovalModelDescription": "Paras laatu säilyttää eniten musiikista ja äänitehosteista. Nopea on noin kolme kertaa nopeampi, ja musiikista menetetään hieman enemmän.", + "speechRemovalBestQuality": "Paras laatu (Mel-Band RoFormer)", + "speechRemovalFast": "Nopea (HTDemucs)", + "videoTruncatedWarning": "Uuden videotiedoston kuva loppuu kohdassa {0}, mutta alkuperäinen video on {1} pitkä - kuva jähmettyy äänen jatkuessa.\n\nTiedosto säilytettiin. Katso ffmpegin tuloste tiedostosta error-log.txt Subtitle Editin datakansiossa.", "originalVolumePercent": "Alkuperäinen äänenvoimakkuus %", "vadSilenceCompression": "VAD-hiljaisuuden kompressio", "vadSilenceCompressionDescription": "Lyhentää sanojen välisiä taukoja ennen tempon muuttamista. Käyttää äänen aktiivisuuden tunnistusta (Voice Activity Detection) kompressoimaan vain hiljaisuuden aukkoja puhetta muuttamatta. Tämä on suositeltava ensimmäinen vaihe — se lyhentää kestoa ilman laadun heikkenemistä.", @@ -2644,7 +2934,6 @@ "subtitleMergedLinesAppliedPlural": "{0} rivien yhdistämistä otettu käyttöön teksti puheeksi -toiminnosta" }, "shotChanges": { - "titleGenerateOrImport": "Luo/tuo kuvanvaihtoja", "generateShotChanges": "Luo kuvanvaihtoja", "importShotChanges": "Tuo kuvanvaihtoja", "generateShotChangesWithFfmpeg": "Luo kuvausvaihtoja ffmpeg:llä", @@ -2654,7 +2943,9 @@ "timeCodeFormatColon": "Aikakoodimuoto:", "shotChangesList": "Kuvausvaihtojen luettelo", "shotChangesClearQuestion": "Haluatko varmasti poistaa kaikki kuvausvaihdot?", - "deleteSelectedShotChangeQuestion": "Haluatko varmasti poistaa valitun kuvausvaihdon?" + "deleteSelectedShotChangeQuestion": "Haluatko varmasti poistaa valitun kuvausvaihdon?", + "shotChanges": "Kuvanvaihdot", + "exportShotChanges": "Vie kuvanvaihdot" }, "chapters": { "title": "Luvut", @@ -2684,7 +2975,6 @@ "scaleTimesDescription": "Skaalaa jokaisen luvun aika kuvataajuudesta toiseen.", "fromFrameRate": "Mistä", "toFrameRate": "Mihin", - "apply": "Käytä", "writeToVideo": "Kirjoita videoon...", "writeToVideoTitle": "Kirjoita luvut videoon", "writeToVideoDescription": "Luvut kirjoitetaan videotiedoston kopioon. Mitään ei koodata uudelleen, joten tämä on nopeaa ja häviötöntä.", @@ -2694,7 +2984,6 @@ "writtenToX": "Luvut kirjoitettu kohteeseen {0}", "unableToWriteChapters": "Lukuja ei voitu kirjoittaa videotiedostoon.", "chaptersSavedToX": "Luvut tallennettu kohteeseen {0}", - "noVideoLoaded": "Videota ei ole ladattu", "emptyListCallToAction": "Ei vielä lukuja - lisää luku videon kohtaan tai tuo luvut videosta tai tiedostosta." }, "videoOcr": { @@ -2705,10 +2994,6 @@ "bottomHalf": "Alapuolisko", "fullFrame": "Koko kuva", "engine": "OCR-moottori", - "language": "Kieli", - "url": "URL", - "model": "Malli", - "apiKey": "API-avain", "scan": "Skannaa", "framesPerSecond": "Kuvia sekunnissa", "textBrightnessMinimum": "Tekstin vähimmäiskirkkaus (0=pois)", @@ -2723,10 +3008,10 @@ "runningOcrXY": "Suoritetaan OCR... {0}/{1}", "noLinesFoundTitle": "Tekstityksiä ei löytynyt", "noLinesFoundMessage": "Skannausalueelta ei löytynyt tekstiä - kokeile säätää skannausaluetta, moottoria tai vähimmäiskirkkautta.", + "ocrStoppedEarlyMessage": "OCR-moottori pysähtyi ennen kuin kaikki kehykset oli luettu, joten tähän mennessä löydetyt rivit säilytetään ja loput puuttuvat.{0}{0}{1}", "linesFoundX": "{0} riviä löytyi", "refiningTimingXY": "Hienosäädetään ajoitusta... {0}/{1}", "fixOcrErrors": "Korjaa OCR-virheet", - "dictionary": "Sanakirja", "editLineX": "Muokkaa riviä {0}", "downloadDictionaryHint": "Lataa oikolukusanakirja...", "framesPerSecondHint": "Kuinka monta kehystä sekunnissa skannataan. 5 riittää tavallisille tekstityksille; suurempi arvo nappaa hyvin lyhyet rivit ja tiivistää ryhmittelyä, mutta kuluttaa enemmän OCR-aikaa.", @@ -2743,7 +3028,58 @@ "testOcr": "Testaa nykyinen kuva", "testOcrRunning": "Testataan OCR:ää nykyisellä kuvalla...", "testOcrResultX": "Testitulos: {0}", - "testOcrNoTextFound": "Testi: skannausalueelta ei löytynyt tekstiä" + "testOcrNoTextFound": "Testi: skannausalueelta ei löytynyt tekstiä", + "engineSettings": "OCR-moottorin asetukset", + "engineBuiltIn": "Sisäänrakennettu käyttöjärjestelmään", + "engineExternalServer": "Ulkoinen palvelin (asennetaan ja hallitaan Subtitle Editin ulkopuolella)", + "engineCloudApi": "Pilvi-API (vaatii API-avaimen)", + "engineNothingToInstall": "Ei asennettavaa", + "engineModelsMissing": "Moottori asennettu, mallit puuttuvat", + "website": "Verkkosivusto" + }, + "backgroundMusic": { + "title": "Luo taustamusiikkia", + "generateBackgroundMusicDotDotDot": "Luo taustamusiikkia...", + "preset": "Esiasetus", + "prompt": "Kehote", + "tempoBpm": "Tempo (BPM)", + "generateSeconds": "Luo (sekuntia)", + "seed": "Siemen", + "randomSeed": "Satunnainen", + "outputLength": "Tulosteen pituus", + "outputLengthVideoX": "{0} (videon pituus - musiikki toistuu saumattomasti)", + "musicVolumePercent": "Musiikin äänenvoimakkuus (%)", + "removeExistingAudioTracks": "Poista olemassa olevat ääniraidat", + "originalAudioVolumePercent": "Alkuperäisen äänen voimakkuus (%)", + "saveAudioDotDotDot": "Tallenna ääni...", + "addToVideoDotDotDot": "Lisää videoon...", + "engineInfo": "ACE-Step 1.5 Turbo audio.cpp:n kautta (MIT-lisenssi) - toimii paikallisesti", + "presetCooking": "Ruoanlaitto / leivonta", + "presetTech": "Teknologia / laitearvostelu", + "presetForest": "Metsä / luonto", + "presetRelaxingPiano": "Rentouttava piano", + "presetLofiVlog": "Lo-fi-vlogi", + "presetCorporate": "Yritys / esittelyvideo", + "loadingModel": "Ladataan mallia...", + "composing": "Sävelletään...", + "generatingAudio": "Luodaan ääntä...", + "decodingAudio": "Puretaan ääntä...", + "creatingLoop": "Luodaan saumatonta silmukkaa...", + "resultLoopXYZ": "Silmukka: {0}, {1} BPM, sauman vastaavuus {2} %", + "resultNoLoopX": "Musiikki valmis: {0}", + "addingMusicToVideo": "Lisätään musiikkia videoon...", + "downloadModelTitle": "Ladataanko musiikkimalli?", + "downloadModelQuestionX": "Musiikin luonti vaatii ACE-Step 1.5 -mallin ({0}).\n\nLadataanko malli?", + "downloadingModel": "Ladataan ACE-Step 1.5 -mallia...", + "saveAudioTitle": "Tallenna taustamusiikki", + "audioFileSavedX": "Äänitiedosto tallennettu: {0}", + "unableToGenerateMusic": "Musiikin luonti epäonnistui", + "unableToAddMusicToVideo": "Musiikin lisääminen videoon epäonnistui", + "outputLengthTextToSpeech": "Seuraa luotua puhetta - musiikki toistuu saumattomasti ja hiljenee, kun joku puhuu", + "addBackgroundMusic": "Lisää taustamusiikki", + "addBackgroundMusicHint": "Luo musiikkia paikallisesti ACE-Step 1.5:llä ja miksaa se puheen alle - se hiljenee, kun joku puhuu", + "generatingBackgroundMusicDotDotDot": "Luodaan taustamusiikkia...", + "mixingBackgroundMusicDotDotDot": "Miksataan taustamusiikkia..." }, "goToVideoPosition": "Siirry videon kohtaan", "goToVideoPositionDotDotDot": "Siirry videon kohtaan...", @@ -2754,30 +3090,88 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "Toissijainen tekstitys videosoittimessa, avaa...", "openSecondarySubtitleOnVideoPlayer": "Toissijaiset tekstitykset (videosoittimessa)", "removeSecondarySubtitleOnVideoPlayer": "Toissijaiset tekstitykset videosoittimessa, poista", + "editSecondarySubtitleSettings": "Muokkaa toissijaisen tekstityksen asetuksia", + "editSecondarySubtitleSettingsDotDotDot": "Muokkaa toissijaisen tekstityksen asetuksia...", + "secondarySubtitleRememberSettings": "Muista nämä asetukset", + "secondarySubtitleDoNotShowAgain": "Älä näytä tätä ikkunaa uudelleen", + "secondarySubtitleJustifyLines": "Tasaa rivit", "openRecentVideo": "Avaa viimeaikainen video", "clearRecentVideos": "Tyhjennä viimeaikaiset videot", "cutVideoTitle": "Leikkaa video", "cutVideoDotDotDot": "Leikkaa video...", + "remuxVideoTitle": "Remuxaa video", + "remuxVideoDotDotDot": "Remuxaa video...", + "remuxVideoInputVideo": "Lähdevideo:", + "remuxVideoMultipleTracksRequiresMkv": "Useat ääni- tai tekstitysraidat vaativat MKV-säiliön. Tulostemuodoksi on vaihdettu automaattisesti .mkv.", + "remuxVideoOutputFormat": "Tulostemuoto:", + "remuxVideoOutputFile": "Tulostetiedosto:", + "remuxVideoRemuxing": "Remuxataan videota ja ääntä...", + "remuxVideoFinalizing": "Viimeistellään tulostetiedostoa (siirretään indeksi alkuun)...", + "remuxVideoCompleted": "Video remuxattiin onnistuneesti.", + "remuxVideoFailed": "Videon remuxaus epäonnistui.", + "remuxVideoPleaseSelectBoth": "Valitse sekä video- että äänitiedostot.", + "remuxVideoAssRequiresMkv": "ASS/SSA-tekstitykset vaativat MKV-säiliön, jotta kaikki muotoilut ja tyylit säilyvät.", + "remuxVideoSccRequiresMov": "Scenarist (.scc) -tekstitykset upotetaan CEA-608-tekstityksinä (closed captions), jotka vaativat MOV- tai MPG-säiliön. Tulostemuodoksi on vaihdettu automaattisesti .mov.", + "remuxVideoSccNotWithWebM": "Scenarist (.scc) -tekstitykset vaativat MOV-säiliön, johon .webm-tiedoston VP9/AV1-video ei sovi. Poista .scc-tiedosto tai muunna se toiseen tekstitysmuotoon.", + "remuxVideoMpgMaxTwoCaptionTracks": ".mpg-tiedostossa voi olla enintään kaksi closed caption -raitaa (CC1 ja CC3) - poista tekstitystiedostoja niin, että jäljelle jää yksi tai kaksi.", + "remuxVideoMccRequiresMpg": "MacCaption (.mcc) -tekstitykset upotetaan CEA-608/708-tekstityksinä MPEG-2-videoon, mikä vaatii MPG-säiliön. Tulostemuodoksi on vaihdettu automaattisesti .mpg.", + "remuxVideoMpgReencodeVideoX": ".mpg-tiedoston closed caption -tekstitykset vaativat MPEG-2-videon, ja video on {0}. Koodataanko video uudelleen MPEG-2-muotoon? Tämä kestää kauemmin ja heikentää laatua hieman.", + "remuxVideoFileHasNoAudioX": "Tiedostossa \"{0}\" ei ole ääniraitaa, joten sitä ei voi käyttää äänilähteenä.", + "remuxVideoAddingClosedCaptions": "Lisätään closed caption -tekstityksiä...", + "remuxVideoSelectAudioTrack": "Valitse ääniraita", + "remuxVideoSelectAudioTrackFor": "Valitse ääniraita kohteelle {0}", + "remuxVideoSelectAudioTrackPrompt": "Tiedosto '{0}' sisältää {1} ääniraitaa. Valitse remuxattava ääniraita:", + "remuxVideoVideoFile": "video", + "remuxVideoAudioFile": "ääni", + "remuxVideoAudioFiles": "Äänitiedostot:", + "remuxVideoSubtitleFiles": "Tekstitystiedostot (valinnainen, valittavat tekstitykset):", + "remuxVideoSelectAudioTrackDotDotDot": "Valitse ääniraita...", + "remuxVideoFilesX": "{0} tiedostoa", + "remuxVideoMixAudio": "Miksaa ääni yhdeksi raidaksi", + "remuxVideoVolumePercent": "Äänenvoimakkuus %:", + "remuxVideoVolumeX": "Äänenvoimakkuus {0} %", + "remuxVideoFastStart": "Optimoi verkkosuoratoistoa varten (siirrä indeksi alkuun - hitaampi)", "embedSubtitlesDotDotDot": "Lisää/poista upotetut tekstitykset...", "generateTimeCodes": "Luo aikakoodit", "checkeredImage": "Ruudullinen kuva", - "saveVideoAsTitle": "Tallenna video nimellä", "promptForFfmpegParamsAndGenerate": "Kysy ffmpeg-parametreja ja luo", "cutVideoCutSegments": "Leikkaa segmentit", "cutVideoMergeSegments": "Yhdistä segmentit", "cutVideoSplitSegments": "Tallenna segmentit erikseen", - "cutVideoType": "Leikkaustyyppi", - "mpvRenderAuto": "Automaattinen", - "mpvRenderNative": "Natiivi", - "mpvRenderOpenGl": "OpenGL", - "mpvRenderSoftware": "Ohjelmisto (hidas)", "cutVideoAlsoCutSubtitle": "Leikkaa myös tekstitys", "cutVideoSubtitleFileGeneratedX": "Tekstitystiedosto luotu: {0}", + "cutVideoTransition": "Siirtymä segmenttien välillä", + "cutVideoTransitionDurationSeconds": "Kesto (sekuntia)", + "cutVideoFadeInSeconds": "Häivytys mustasta alussa (sekuntia)", + "cutVideoFadeOutSeconds": "Häivytys mustaan lopussa (sekuntia)", + "cutVideoPreviewTransition": "Esikatsele siirtymää", + "cutVideoPreviewTransitionTitle": "Siirtymän esikatselu", + "cutVideoPreviewNeedsJoin": "Esikatseltavaa liitosta ei ole - lisää vähintään kaksi yhdistettävää segmenttiä tai segmentti, joka leikataan pois keskeltä.", + "cutVideoTransitionInfoX": "Jokainen siirtymä on päällekkäin yhdistämiensä osien kanssa, joten tuloste lyhenee {0} sekuntia liitosta kohden. Leikattu tekstitys ajoitetaan uudelleen vastaavasti.", + "cutVideoTransitionFade": "Häivytys", + "cutVideoTransitionFadeBlack": "Häivytys mustan kautta", + "cutVideoTransitionFadeWhite": "Häivytys valkoisen kautta", + "cutVideoTransitionFadeGrays": "Häivytys harmaan kautta", + "cutVideoTransitionDissolve": "Ristihäivytys", + "cutVideoTransitionWipeLeft": "Pyyhkäisy vasemmalle", + "cutVideoTransitionWipeRight": "Pyyhkäisy oikealle", + "cutVideoTransitionWipeUp": "Pyyhkäisy ylös", + "cutVideoTransitionWipeDown": "Pyyhkäisy alas", + "cutVideoTransitionSlideLeft": "Liuku vasemmalle", + "cutVideoTransitionSlideRight": "Liuku oikealle", + "cutVideoTransitionSlideUp": "Liuku ylös", + "cutVideoTransitionSlideDown": "Liuku alas", + "cutVideoTransitionSmoothLeft": "Pehmeä vasemmalle", + "cutVideoTransitionSmoothRight": "Pehmeä oikealle", + "cutVideoTransitionCircleOpen": "Ympyrä aukeaa", + "cutVideoTransitionCircleClose": "Ympyrä sulkeutuu", + "cutVideoTransitionRadial": "Säteittäinen", + "cutVideoTransitionPixelize": "Pikselöinti", + "cutVideoTransitionBlur": "Sumennus", "importCurrentSubtitle": "Tuo nykyiset tekstitykset", "addRemoveEmbeddedSubtitlesTitle": "Lisää/poista upotetut tekstitykset", "addRemoveEmbeddedSubtitlesMp4Title": "Lisää/poista upotetut tekstitykset (MP4)", "addCurrentSubtitle": "Lisää nykyiset tekstitykset", - "embeddedTrackColumnNew": "Uusi", "embeddedTrackNoSubtitlesFoundTitle": "Tekstityksiä ei löytynyt", "embeddedTrackNoSubtitlesFoundMessage": "Valittu tekstitystiedosto ei sisällä tekstityksiä.", "embeddedTrackNoTracksTitle": "Ei lisättyjä raitoja", @@ -2789,7 +3183,7 @@ "embeddedTrackGeneratingVideoXY": "Luodaan videota... {0}% {1}", "embeddedTrackGeneratingVideo": "Luodaan videota...", "mp4FilesFilter": "MP4-tiedostot", - "titleOrLanguage": "Otsikko/kieli", + "embeddedTracksPickVideoHint": "Valitse videotiedosto tai pudota se tähän nähdäksesi sen tekstitysraidat.", "viewMatroskaTrackX": "Näytä Matroska-raita - {0}", "resolutionSeparator": "x", "openFromUrlTitle": "Avaa videotiedosto URL-osoitteesta", @@ -2825,15 +3219,17 @@ "reEncodeGeneratingDone": "Luominen valmis", "reEncodeGeneratedFilesX": "Luodut tiedostot ({0}):", "reEncodeFfmpegParameters": "ffmpeg-parametrit", + "analyzingVideoX": "Analysoidaan videota... {0} % {1}", + "analyzingVideoXofY": "Analysoidaan videota {0}/{1}... {2} % {3}", + "backgroundImageFileNotSelected": "Taustakuvatiedostoa ei ole valittu", + "backgroundImageFileDoesNotExistX": "Taustakuvatiedostoa ei ole olemassa: {0}", "openFromUrlOpenOnline": "Avaa verkossa", "openFromUrlOpenOnlineDescription": "Suoratoista video suoraan. Nopein aloitus.", "openFromUrlOpenOnlineNote": "Puhe tekstiksi ja aaltomuotopiikit eivät ole käytettävissä tässä tilassa.", "openFromUrlDownloadAndOpen": "Lataa ja avaa", "openFromUrlDownloadAndOpenDescription": "Tallenna video paikallisesti ja avaa se sitten.", "openFromUrlDownloadAndOpenNote": "Vaaditaan puhe tekstiksi -toimintoon ja aaltomuotopiikkeihin.", - "openFromUrlMissing": "Anna ensin videon URL.", "openFromUrlDownloadingTitle": "Ladataan videota", - "openFromUrlSaveAs": "Tallenna video nimellä", "openFromUrlDownloadSubtitles": "Lataa myös tekstitykset", "pickOnlineSubtitleTitle": "Valitse ladattava tekstitys", "pickOnlineSubtitleFetching": "Ladataan tekstityksiä...", @@ -2843,7 +3239,6 @@ "talkerX": "Puhuja {0}", "baseModel": "Perusmalli", "turboModel": "Turbo-malli", - "ttsUpdateX": "Päivitä {0}", "ttsEngineNotInstalled": "{0} ei ole asennettu", "ttsEngineUpdateAvailable": "{0} - päivitys saatavilla", "ttsEngineTooOldUpdateRequired": "{0} on liian vanha - päivitys vaaditaan", @@ -2866,19 +3261,25 @@ "cloneVoiceTo": "Kloonaa ääni kohteeseen", "cloneVoiceNameTitle": "Uuden äänen nimi", "cloneVoiceExtractFailed": "Valitun rivin ääntä ei voitu purkaa.", + "lineXHasNoDuration": "Rivillä {0} ei ole kestoa (loppuaika ei ole alkuajan jälkeen), joten purettavaa ääntä ei ole.", + "audioClipsSkippedLinesX": "Näille riveille ei voitu purkaa ääntä, joten ne ohitettiin: {0}", "toggleShotChange": "Vaihda kuvanvaihtoa", "resetWaveformZoomAndSpeed": "Nollaa aaltomuodon zoomaus ja nopeus", "showOriginalSubtitle": "Näytä alkuperäinen tekstitys", + "timelineGroupTracksBy": "Ryhmittele tekstitysraidat", + "timelineShowThumbnails": "Näytä videon pikkukuvat", + "showSpeechOnly": "Näytä vain puhe (hidas luoda)", + "isolatingSpeechForWaveformX": "Eristetään puhetta aaltomuotoa varten... {0}", + "isolatingSpeechForWaveformFailed": "Puhetta ei voitu eristää aaltomuotoa varten - katso työkalujen loki", + "speechOnlyWaveformReady": "Aaltomuoto näyttää nyt vain puheen", "showOnlyWaveform": "Näytä vain aaltomuoto", "showOnlySpectrogram": "Näytä vain spektrogrammi", "showWaveformAndSpectrogram": "Näytä aaltomuoto ja spektrogrammi", - "spectrogramClassic": "Klassinen", "spectrogramClassicViridis": "Viridis", "spectrogramClassicPlasma": "Plasma", "spectrogramClassicInferno": "Inferno", "spectrogramClassicTurbo": "Turbo", "spectrogramNeon": "Neon", - "waveformDrawStyleClassic": "Klassinen", "waveformDrawStyleFancy": "Fancy", "setVideoPositionAndPauseAndSelectSubtitle": "Aseta videon sijainti, keskeytä ja valitse tekstitys", "setVideopositionAndPauseAndSelectSubtitleAndCenter": "Aseta videon sijainti, keskeytä, valitse tekstitys ja keskitä", @@ -2888,7 +3289,6 @@ }, "sync": { "visualSync": "Visuaalinen synkronointi", - "sync": "Synkronointi", "startScene": "Aloita kohtaus", "endScene": "Lopeta kohtaus", "playTwoSecondsAndBack": "Toista 2 sekuntia ja palaa takaisin", @@ -2904,19 +3304,18 @@ "adjustSelectedLinesAndForward": "Säädä valittuja rivejä ja eteenpäin", "toFrameRate": "Kuvataajuuteen asti", "fromFrameRate": "Kuvataajuudesta", + "videoXFrameRateY": "{0} - {1} fps", "adjustAllTimes": "Säädä kaikki ajat (näytä aikaisemmin/myöhemmin)", "showEarlier": "Näytä aikaisemmin", "showLater": "Näytä myöhemmin", - "changeFrameRate": "Muuta kuvataajuutta", "setSyncPoint": "Aseta synkronointipiste", "setSyncPointViaVideo": "Aseta synkronointipiste videon avulla...", "syncPointTimeCode": "Synkronointipisteen aikakoodi", "syncPoints": "Synkronointipisteet", "pointSync": "Pisteen synkronointi", "pointSyncViaOther": "Pisteen synkronointi toisen tekstityksen kautta", - "adjustmentX": "Säätö: {0}", - "totalAdjustmentX": "Kokonaiskorjaus: {0}", - "syncPointCandidateInfo": "Rivit, jotka alkavat yli {0} sekunnin hiljaisuuden jälkeen, on korostettu - ne ovat usein luotettavia synkronointipisteitä", + "syncPointCandidateAfterInfo": "Rivit, joita seuraa vähintään {0} sekuntia hiljaisuutta, on korostettu - ne ovat usein luotettavia synkronointipisteitä", + "gapAfter": "Väli jälkeen", "adjustAllShortcuts": "Pikanäppäimet:\r\n\r\n• Shift + Vasen/Oikea: Siirrä 10 ms\r\n• Ctrl + Vasen/Oikea: Siirrä 100 ms\r\n• Alt + Vasen/Oikea: Siirrä 500 ms", "adjustAllShortcutsFrames": "Pikanäppäimet:\r\n\r\n• Shift + Vasen/Oikea: Siirrä 1 kuva\r\n• Ctrl + Vasen/Oikea: Siirrä 10 kuvaa\r\n• Alt + Vasen/Oikea: Siirrä 1 sekunti", "offsetInSeconds": "Siirtymä sekunteina", @@ -2936,6 +3335,7 @@ "lineMerge": "Rivien yhdistäminen", "delayInSecondsBetweenRequests": "Viive sekunteina pyyntöjen välillä", "maxBytesPerRequest": "Enimmäistietomäärä pyyntöä kohti", + "keepMusicLinesUntranslated": "Älä käännä musiikkisymbolien sisällä olevia rivejä (♪ ... ♪)", "promptText": "Kehoteteksti", "resetPromptToDefault": "Palauta kehote oletusarvoon", "translateEachLineSeparately": "Käännä jokainen rivi erikseen", @@ -2949,11 +3349,10 @@ "readyToTranslate": "Valmis kääntämään", "translating": "Käännetään...", "translationComplete": "Käännös valmis", + "translateInPlaceNoOriginal": "Käännä paikallaan (älä luo alkuperäistä)", "translationCancelled": "Käännös peruutettu", "swapLanguages": "Vaihda lähde- ja kohdekieli keskenään", "xIsAlreadyDownloadedReDownload": "{0} on jo ladattu. Ladataanko uudelleen?", - "advancedDotDotDot": "Lisäasetukset...", - "advancedSettings": "Lisäasetukset", "advancedSettingsSubtitle": "Erä-, konteksti- ja näytteenottoasetukset llama.cpp-lisämoottorille", "context": "Konteksti", "synopsis": "Synopsis", @@ -2977,6 +3376,7 @@ "useOnlyExtraServerParametersHint": "Käynnistä llama-server yllä olevilla parametreilla Subtitle Editin oman viritysten sijaan - vain malli, isäntä ja portti asetetaan edelleen", "serverRunningAtX": "Palvelin käynnissä osoitteessa {0}", "customPromptHint": "Mukautetut ohjeet ({0} = lähdekieli, {1} = kohdekieli); tyhjä = sisäänrakennettu kehote", + "editTranslationHint": "Napsauta valitun rivin käännöstä muokataksesi sitä (Enter tallentaa, Escape peruuttaa)", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp vaatii llama-server-moottorin ja käännösmallin lataamisen. Ladataanko nyt?", "llamaCppDownloadEnginePrompt": "llama.cpp vaatii llama-server-moottorin lataamisen. Ladataanko nyt?", "llamaCppDownloadModelPrompt": "llama.cpp vaatii valitun käännösmallin lataamisen. Ladataanko nyt?" @@ -3014,8 +3414,14 @@ "checkForUpdatesChannelStableAndBeta": "Vakaat ja beta-versiot", "assaAutoSetResolution": "ASSA: aseta resoluutio (PlayResX/PlayResY) videosta, kun video avataan", "assaAutoSetResolutionPrompt": "ASSA: kysy ennen resoluution muuttamista videon mukaiseksi (muuten skaalaa automaattisesti)", + "videoControls": "Videon ohjaimet", + "videoControlsEdit": "Muokkaa videon ohjaimia...", + "videoControlsPositionText": "Sijainti-/kestoteksti", + "videoControlsVideoFileName": "Videotiedoston nimi", + "videoControlsPlayerName": "Videosoittimen nimi", "mergeKeepEndTime": "Yhdistä rivit: säilytä loppuaika (salli päällekkäisyys seuraavan tekstityksen kanssa)", "mergeKeepEndTimeOnlyAssa": "Yhdistä rivit: säilytä loppuaika vain muodolle \"Advanced Sub Station Alpha\"", + "mergeAutoBreak": "Rivien yhdistäminen: automaattinen rivinvaihto yhdistettyyn tekstiin (pois päältä säilyttää rivien omat rivinvaihdot)", "defaultSaveLocation": "Oletustallennuspaikka", "defaultSaveLocationSourceFileFolder": "Tekstitys-/videotiedoston kansio", "defaultSaveLocationLastUsedFolder": "Viimeksi käytetty kansio", @@ -3023,6 +3429,7 @@ "defaultSaveLocationSubtitleFileFolder": "Tekstitystiedoston kansio", "defaultSaveLocationCustomFolder": "Mukautettu kansio", "subtitleGridFormattingHideTags": "Piilota tunnisteet", + "subtitleGridFormattingShowFormattingKeepTags": "Näytä muotoilu, säilytä ei-visuaaliset tunnisteet", "musicSymbolsToReplace": "Korvattavat musiikkisymbolit (pilkuilla erotettuina)", "musicSymbol": "Musiikkisymboli", "colorWordsPerMinute": "Väritä sanaa/min, jos liian suuri", @@ -3033,7 +3440,6 @@ "dialogStyleDashBothLinesWithSpace": "Viiva molemmilla riveillä välilyönnillä", "dialogStyleDashBothLinesWithoutSpace": "Viiva molemmilla riveillä ilman välilyöntiä", "continuationStyle": "Jatkomuoto", - "continuationStyleNone": "Ei mitään", "continuationStyleNoneTrailingDots": "Ei mitään, pisteet taukoille (vain lopussa)", "continuationStyleNoneLeadingTrailingDots": "Ei mitään, pisteet taukoille", "continuationStyleNoneTrailingEllipsis": "Ei mitään, ellipsis taukoja varten (vain lopussa)", @@ -3044,7 +3450,6 @@ "continuationStyleLeadingTrailingEllipsis": "Ellipsis", "continuationStyleLeadingTrailingDash": "Dash", "continuationStyleLeadingTrailingDashDots": "Dash, but dots for pauses", - "continuationStyleCustom": "Mukautettu", "cpsLineLengthStyle": "Cps/rivin pituus", "cpsLineLengthStyleCalcAll": "Laske kaikki merkit", "cpsLineLengthStyleCalcNoSpaceCpsOnly": "Laske kaikki paitsi välilyönnit, vain cps", @@ -3057,27 +3462,11 @@ "cpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly": "Ei välilyöntejä tai välimerkkejä, vain CPS", "cpsLineLengthStyleCalcIgnoreArabicDiacritics": "Ohita arabialaiset diakriittiset merkit", "cpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "Ohita arabialaiset diakriittiset merkit, ei välilyöntejä", - "timeCodeModeHhMmSsMs": "HH:MM:SS:MS", - "timeCodeModeHhMmSsFf": "HH:MM:SS:FF", - "splitBehaviorPrevious": "Lisää väli jakopisteen vasemmalle puolelle (fokus oikealla)", - "splitBehaviorHalf": "Lisää väli jakopisteen keskelle (fokus vasemmalla)", - "splitBehaviorNext": "Lisää väli jakopisteen oikealle puolelle (fokus vasemmalla)", - "subtitleListActionNothing": "Ei mitään", - "subtitleListActionVideoGoToPositionAndPause": "Siirry videon kohtaan ja keskeytä", - "subtitleListActionVideoGoToPositionAndPlay": "Siirry videon kohtaan ja toista", "subtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "Siirry videon kohtaan, toista nykyinen ja keskeytä", - "subtitleListActionEditText": "Siirry tekstin muokkausruutuun", "subtitleListActionVideoGoToPositionMinus1SecAndPause": "Siirry videon kohtaan - 1 s ja keskeytä", "subtitleListActionVideoGoToPositionMinusHalfSecAndPause": "Siirry videon kohtaan - 0,5 s ja keskeytä", "subtitleListActionVideoGoToPositionMinus1SecAndPlay": "Siirry videon kohtaan - 1 s ja toista", - "subtitleListActionEditTextAndPause": "Siirry tekstin muokkauskenttään ja keskeytä videon kohdalla", - "autoBackupEveryMinute": "Joka minuutti", - "autoBackupEveryXthMinute": "Joka {0} minuutti", - "profiles": "Profiilit", - "autoBackupDeleteAfterXMonths": "Poista automaattiset varmuuskopiot {0} kuukauden kuluttua", "searchSettingsDotDotDot": "Etsi asetuksia...", - "syntaxColoring": "Syntaksin väritys", - "waveformSpectrogram": "Aaltomuoto/spektrogrammi", "network": "Verkko", "fileTypeAssociations": "Tiedostotyyppien yhdistelmät", "textBoxColorTags": "Väritunnisteet (HTML/ASSA) tekstikentässä", @@ -3110,10 +3499,9 @@ "darkThemeForegroundColor": "Tumman teeman etualaväri", "darkThemeBackgroundColor": "Tumman teeman taustaväri", "showGridLines": "Näytä ruudukon viivat", - "resetSettings": "Palauta asetukset?", - "resetSettingsDetail": "Tämä palauttaa kaikki asetukset oletusarvoihinsa.\n\nJatka?", "showHorizontalLineAboveToolbar": "Näytä vaakaviiva työkalurivin yläpuolella", "bookmarkColor": "Kirjanmerkin väri", + "spellCheckHighlightColor": "Oikeinkirjoituksen tarkistuksen korostusväri", "singleLineMaxLength": "Yhden rivin enimmäispituus", "optimalCharsPerSec": "Optimaalinen merkkimäärä sekunnissa", "maxCharsPerSec": "Merkkien enimmäismäärä sekunnissa", @@ -3125,13 +3513,21 @@ "unbreakSubtitlesShortThan": "Yhdistä alle", "newEmptyDefaultMs": "Uuden tekstityksen oletuskesto (ms)", "timeCodeUpDownStepMs": "Ajan ylös/alas-askel (ms)", + "moveSelectedLinesStepMs": "Valittujen rivien siirron pikanäppäimen askel (ms)", + "moveStartEndStepMs": "Alun/lopun siirron pikanäppäimen askel (ms)", + "moveLinesShortenNeighbor": "Rivien siirto: lyhennä edellistä/seuraavaa riviä päällekkäisyyden sijaan", "promptBeforeDelete": "Kysy ennen poistamista", "rememberPositionAndSize": "Muista ikkunan sijainti ja koko", + "titleBarFullFileName": "Näytä koko tiedostopolku otsikkorivillä", + "showRecentFiles": "Näytä viimeisimmät tiedostot (uudelleenavaamista varten)", "openLastFileOnStart": "Avaa viimeisin tiedosto käynnistyksen yhteydessä", "autoSave": "Automaattinen tallennus (tallenna avoin tiedosto muokattaessa)", "autoBackupOn": "Automaattinen varmuuskopiointi", "autoBackupIntervalMinutes": "Automaattisen varmuuskopioinnin väli (minuutteina)", "autoBackupDeleteAfterDays": "Automaattisen varmuuskopion säilytysaika (päivinä)", + "settingsBackupOn": "Varmuuskopioi asetukset automaattisesti", + "settingsBackupIntervalDays": "Asetusten varmuuskopiointiväli (päivää, 0 = joka käynnistys)", + "settingsBackupMaxCount": "Säilytettävät asetusten varmuuskopiot", "autoConvertToUtf8": "Muunna koodaus automaattisesti UTF-8:ksi avattaessa", "autoTrimWhiteSpace": "Poista välilyönnit automaattisesti", "defaultEncoding": "Oletuskoodaus", @@ -3145,23 +3541,14 @@ "colorGapTooShort": "Väri, jos väli on liian lyhyt", "errorBackgroundColor": "Virheen taustaväri", "waveformDrawGridLines": "Piirrä ruudukon viivat", - "waveformCenterVideoPosition": "Keskitä videon sijainti", + "waveformUseSkiaRenderer": "Käytä kokeellista nopeaa piirtäjää", "waveformCenterVideoPositionAlsoWhenPaused": "Keskitä videon sijainti myös tauon aikana", + "waveformSelectCurrentSubtitleWhilePaused": "Valitse nykyinen tekstitys myös tauon aikana", + "waveformRememberZoom": "Muista zoomaus (vaaka- ja pystysuunta)", "waveformShowToolbar": "Näytä työkalurivi", "waveformShowToolbarEdit": "Muokkaa työkaluriviä...", "waveformShowToolbarEditLabel": "Työkalurivin kohteet", "waveformSpectrogramCombinedWaveformHeight": "Aaltomuoto/spektrogrammi yhdistettynä, aaltomuodon korkeus %", - "showWaveformToolbarPlay": "Työkalurivi: näytä toistopainike", - "showWaveformToolbarRepeat": "Työkalurivi: näytä toistopainike", - "showWaveformToolbarRemoveBlankLines": "Työkalurivi: näytä poista tyhjät rivit -painike", - "showWaveformToolbarNew": "Työkalurivi: näytä uusi tekstitys -painike", - "showWaveformToolbarSetStart": "Työkalurivi: näytä aseta alku -painike", - "showWaveformToolbarSetEnd": "Työkalurivi: näytä lopun asettamispainike", - "showWaveformToolbarStartAndOffsetTheRest": "Työkalurivi: näytä alun asettaminen ja lopun siirtäminen -painike", - "showWaveformToolbarHorizontalZoom": "Työkalurivi: näytä vaakasuuntaisen zoomauksen liukusäädin", - "showWaveformToolbarVerticalZoom": "Työkalurivi: näytä pystysuuntaisen zoomauksen liukusäädin", - "showWaveformToolbarVideoPositionSlider": "Työkalurivi: näytä videon sijainnin liukusäädin", - "showWaveformToolbarPlaybackSpeed": "Työkalurivi: näytä toistonopeus", "waveformFocusTextboxAfterInsertNew": "Siirrä kohdistus tekstikenttään lisäyksen jälkeen", "waveformInvertMouseWheel": "Käännä hiiren rullatoiminto", "waveformMouseWheelSetsVideoPosition": "Hiiren rulla asettaa videon sijainnin", @@ -3179,19 +3566,17 @@ "waveformSelectedColor": "Aaltomuodon valitun osan väri", "downloadFfmpeg": "Lataa ffmpeg", "proxyAddress": "Proxy-osoite", - "username": "Käyttäjätunnus", "password": "Salasana", "defaultFormat": "Oletusmuoto", "defaultSaveAsFormat": "Oletusmuoto \"Tallenna nimellä\"", "favoriteSubtitleFormats": "Suosikkitekstitysmuodot", "favoriteLanguages": "Suosikkikielet", "webVttUseXTimestampMap": "WebVTT: käytä X-TIMESTAMP-MAP-arvoa (siirrä aikakoodeja ladattaessa)", - "showStopButton": "Näytä pysäytyspainike", - "showFullscreenButton": "Näytä koko näytön painike", "autoOpenVideoFile": "Avaa videotiedosto automaattisesti, kun avaat tekstityksen", "downloadMpv": "Lataa mpv", "downloadVlc": "Lataa VLC", "allowSingleLetterShortcutsInTextbox": "Salli yksikirjaimiset pikanäppäimet tekstikentässä", + "allowTextNavigationShortcutsInTextbox": "Salli pikanäppäimet tekstissä liikkumisen näppäimillä (Ctrl+Vasen/Oikea, Home/End) tekstikentässä", "spellCheckEnglishTreatInApostropheAsIng": "Oikeinkirjoituksen tarkistus: käsittele 'in''-päätteiset sanat 'ing'-muotoisina (vain englanti)", "goToLineNumberSetsVideoPosition": "Siirry rivinumeroon asettaa myös videon sijainnin", "adjustAllTimesRememberLineSelectionChoice": "Säädä kaikki ajat, muista rivivalinta", @@ -3201,6 +3586,7 @@ "showAssaLayer": "Näytä ASSA-kerrosruutu", "waveformCursorColor": "Aaltomuodon osoittimen/pään väri", "waveformShotChangeColor": "Aaltomuodon kuvanvaihtoväri", + "waveformGridColor": "Aaltomuodon ruudukon väri", "waveformParagraphLeftColor": "Aaltomuodon vasemman reunan väri", "waveformParagraphRightColor": "Aaltomuodon oikean reunan väri", "waveformFancyHighColor": "Aaltomuodon korostusväri", @@ -3228,23 +3614,26 @@ "resetSyntaxColoring": "Nollaa syntaksin väritys", "resetWaveform": "Nollaa aaltomuoto", "resetRules": "Nollaa säännöt", - "useFrameMode": "Käytä kehystilaa (hh.mm.ss.ff)", + "timeCodeMode": "Aikakooditila", + "timeCodeModeTime": "Aika (hh:mm:ss,zzz)", + "timeCodeModeFrames": "Kehykset (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "Kehysnumerot", + "frameModeSnapToVideoFrames": "Tallenna ajat videokehyksiin (ei kehyksiin sekunnin sisällä)", "textBoxLimitNewLines": "Rajoita rivien määrää tekstityskentässä", - "mpvVideoOutput": "Videolähtö (mpv)", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - Ohjelmistorenderöinti (hidas)", + "mpvMetalRendering": "libmpv - Metal (kokeellinen, vaatii uudelleenkäynnistyksen)", "mpvWidRendering": "libmpv - Natiivi Window ID -renderöinti (nopeampi Windowsissa/Linuxissa)", "waveFormsAndSpectrogramFoldersContainsX": "Kansiot \"Waveforms\" ja \"spectrogram\" sisältävät {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "Poistetaanko kansiot \"Waveforms\" ja \"Spectrogram\"?", "waveformGenerateSpectrogram": "Luo spektrogrammi", "waveformAutoGenerate": "Luo aaltomuoto automaattisesti videota avattaessa", "waveformSpectrogramMode": "Spektrogrammitila", - "waveformCenterOnSingleClick": "Keskitä yhdellä napsautuksella", - "waveformSingleClickSelectsSubtitle": "Valitse tekstitys yhdellä napsautuksella", "waveformRightClickSelectsSubtitle": "Valitse tekstitys oikealla napsautuksella", - "waveformPauseOnSingleClick": "Keskeytä yhdellä napsautuksella", "waveformDrawStyle": "Aaltomuodon piirtotyyli", "vlcWidRendering": "libVLC - Natiivin ikkunan tunnuksen renderointi", + "ffmpegSoftwareRendering": "FFmpeg", + "downloadFfmpegLibs": "Lataa FFmpeg-kirjastot (FFmpeg-videosoitinta varten)", "subtitleGridEnterKeyAction": "Tekstitysruudukon Enter-näppäimen toiminto", "subtitleSingleClickAction": "Tekstitysruudukon yksittäisen napsautuksen toiminto", "subtitleDoubleClickAction": "Tekstitysruudukon kaksoisnapsautustoiminto", @@ -3268,23 +3657,24 @@ "saveAsBehaviorUseVideoFileName": "Käytä videotiedoston nimeä", "saveAsBehaviorUseSubtitleFileName": "Käytä tekstitystiedoston nimeä", "saveAsAppendLanguageCodeTwoLetter": "Kaksikirjaiminen", - "saveAsAppendLanguageCodeThreeLetter": "Kolmikirjaiminen", "saveAsAppendLanguageCodeLanguageName": "Kielinimi", "splitOddLineActionWeightTop": "Painota yläosaa", "splitOddLineActionWeightBottom": "Painota alaosaa", "splitOddLinesAction": "Parittomien rivien jakotoiminto", "ocrUseWordSplitList": "OCR: käytä sananjakolistaa", "ocrGuessUnknownWords": "OCR: yritä arvata tuntemattomat sanat", + "spellCheckRememberUseAlwaysList": "Oikeinkirjoituksen tarkistus: muista \"Käytä aina\" -luettelo", + "fixShortDisplayTimesAllowMoveStartTime": "Korjaa yleiset virheet: lyhyiden näyttöaikojen korjaus voi siirtää alkuaikaa", "speechToTextSelectedLinesPromptFirstTimeOnly": "Puhe tekstiksi: valitut rivit, kysy kieltä/moottoria vain ensimmäisellä kerralla", "multipleReplaceShowDotDotDotButtons": "Useita korvauksia: näytä kontekstivalikon painikkeet", "gridFocusTextboxAfterInsertNew": "Ruudukko: siirrä kohdistus tekstikenttään uuden tekstityksen lisäämisen jälkeen", + "undoRedoGoToChangedLine": "Kumoa/tee uudelleen: siirry muutettuun riviin (ja videon kohtaan)", "textToSpeechPromptSkipNoiseLines": "Teksti puheeksi: kysy ääni-/musiikkirivien ohittamisesta", "textToSpeechPromptDetectSpeakers": "Teksti puheeksi: kysy puhujien nimien tunnistamisesta tekstistä", "useFocusedButtonBackgroundColor": "Käytä kohdistetun painikkeen taustaväriä", "focusedButtonBackgroundColor": "Valitun painikkeen taustaväri", "forceCrLfOnSave": "Pakota CR+LF tallennettaessa (tekstitystiedostot)", - "showWaveformToolbarPlayNext": "Työkalurivi: näytä seuraava-painike", - "showWaveformToolbarPlaySelection": "Työkalurivi: näytä toista valinta -painike", + "linuxClipboardUseExternalTool": "Kopioi teksti xclip/wl-copy-työkalulla (säilyttää aksenttimerkit)", "showFormatLimitWarning": "Varoita tallennettaessa, kun rivit ylittävät muodon rajat (esim. SCC 32 merkkiä/rivi)", "textBoxButtonShowAutoBreak": "Tekstiruutu: näytä automaattinen rivinvaihto -painike", "textBoxButtonShowUnbreak": "Tekstiruutu: näytä poista rivinvaihto -painike", @@ -3296,12 +3686,18 @@ "waveformDoubleClickAction": "Aaltomuodon kaksoisnapsautustoiminto (yksittäisen napsautuksen jälkeen)", "allSettings": "Kaikki asetukset", "uiScale": "Käyttöliittymän mittakaava (%)", + "fontScale": "Fontin skaalaus (%)", + "textSelectionOpacity": "Tekstivalinnan peittävyys (%)", "waveformToolbarItems": "Aaltomuodon työkalurivin kohteet", "matchIconColorToDarkTheme": "Sovita kuvakkeen väri tumman teeman etualaväriin", "subtitlePreviewProperties": "Tekstityksen esikatseluominaisuudet", "usePositionFromSubtitleFile": "Käytä sijaintia tekstitystiedostosta (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "Marginaali on osa tekstitysaluetta", "textJustify": "Tasaa rivit", + "deinterlace": "Lomituksen poisto videosta", + "deinterlaceOff": "Pois", + "deinterlaceAuto": "Automaattinen (vain lomitetut kehykset)", + "deinterlaceAlways": "Aina", "pixelWidthInfo": "Vihreät viivat = enimmäisleveysraja | Punainen alue = teksti ylittää rajan", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3311,130 +3707,104 @@ "waveformSaveAsCustomTheme": "Tallenna mukautettuna teemana...", "waveformLoadThemeDotDotDot": "Lataa teema...", "waveformExportThemeDotDotDot": "Vie teema...", + "waveformSaveCustomThemeTitle": "Tallenna mukautettu teema", + "waveformThemeFileType": "Subtitle Editin aaltomuototeema", + "waveformThemeHighContrast": "Suuri kontrasti", + "waveformThemeOceanBlue": "Merensininen", + "waveformThemeWarmSunset": "Lämmin auringonlasku", + "waveformThemeForest": "Metsä", + "waveformThemeMidnightPurple": "Keskiyön violetti", + "waveformThemeRetroAmber": "Retro-meripihka", + "waveformThemeIce": "Jää", "minGapFrames": "Vähimmäisaukko (kehystä)", "waveformSnapToFrames": "Kiinnitä kehyksiin", "fixCommonErrorsSkipStep1": "Korjaa yleiset virheet: ohita vaihe 1 (valitse korjaukset)", "showPluginsMenu": "Näytä Lisäosat-valikko", "fullscreenHideControls": "Piilota videon ohjaimet koko näytön tilassa", + "showSecondarySubtitleDialog": "Näytä tyyli-ikkuna toissijaista tekstitystiedostoa avattaessa", + "rememberSecondarySubtitleFile": "Muista toissijainen tekstitystiedosto", "showToolsLogFile": "Näytä työkalujen lokitiedosto", "writeToolsLog": "Kirjoita työkalujen loki", "waveformExtractAudioFormat": "Poimi äänimuoto", "waveformExtractAudioSampleRate": "Poimi äänen näytteenottotaajuus", "waveformExtractAudioSampleRateOriginal": "Alkuperäinen (säilytä lähde)", "waveformExtractAudioBitRate": "Poimi äänen bittinopeus (MP3/M4A)", + "ffmpegUseCenterChannelOnly": "Käytä vain etukeskikanavaa 5.1-äänelle (FFmpeg)", "subtitleGridCenterSelectedRow": "Tekstitysruudukko, keskitä edellistä/seuraavaa riviä valittaessa", "waveformSetVideoPositionOnMoveStartEnd": "Aseta videon sijainti siirrettäessä alkua/loppua", - "saveAsAppendLanguageCodeThreeLetterBibliographic": "Kolmikirjaiminen (ISO 639-2/B)", "textToSpeechPromptMergeContinuationLines": "Puhe tekstiksi: kysy jatkorivien yhdistämistä" }, "shortcuts": { "generalUnbreakNoSpaceCjk": "Poista rivinvaihto ilman välilyöntiä (CJK)", - "title": "Pikakuvakkeet", + "generalToggleBreak": "Vaihda rivinvaihto päälle/pois", "searchShortcuts": "Hae pikakuvakkeita...", - "filter": "Suodata", - "categoryGeneral": "Yleistä", "categorySubtitleGridAndTextBox": "Alatekstiluettelonäkymä ja tekstikenttä", "categorySubtitleGrid": "Alatekstiluettelonäkymä", - "categoryWaveform": "Aaltomuoto", "categoryTextBox": "Tekstikenttä", "categoryFile": "Tiedosto", "categoryVideo": "Video", "categorySync": "Synkronointi", - "categoryTranslate": "Käännä", - "categorySearch": "Haku", - "categoryTools": "Työkalut", "categoryAi": "Tekoäly", + "categoryCustom": "Mukautettu", + "editCustomShortcut": "Muokkaa mukautettua pikanäppäintä", + "customShortcutTextBoxKeyHint": "Käytä tässä näppäintä yhdessä Ctrl/Alt-näppäimen kanssa - pelkällä näppäimellä ei enää voisi kirjoittaa tekstikenttään.", + "customShortcutNumberX": "Mukautettu pikanäppäin #{0}", + "customShortcutNumberXY": "Mukautettu pikanäppäin #{0}: {1}", + "customShortcutStep": "Vaihe", + "customShortcutSteps": "Vaiheet", + "customShortcutStepRunCommand": "Suorita komento", + "customShortcutStepInsertText": "Lisää teksti", + "customShortcutStepReplace": "Etsi ja korvaa", + "customShortcutInsertAtCursor": "Kohdistimen kohdalle", + "customShortcutInsertAtStart": "Tekstin alkuun", + "customShortcutInsertAtEnd": "Tekstin loppuun", + "customShortcutSummaryRunCommandX": "Suorita: {0}", + "customShortcutSummaryInsertXY": "Lisää \"{0}\" ({1})", + "customShortcutSummaryReplaceXY": "Korvaa \"{0}\" tekstillä \"{1}\"", + "customShortcutSummaryReplaceRegexXY": "Korvaa säännöllinen lauseke \"{0}\" tekstillä \"{1}\"", + "customShortcutPickCommand": "Valitse suoritettava komento.", + "customShortcutEnterText": "Syötä lisättävä teksti.", + "customShortcutEnterFind": "Syötä etsittävä teksti.", + "customShortcutInvalidRegexX": "Virheellinen säännöllinen lauseke: {0}", + "customShortcutStepsHint": "Vaiheet suoritetaan ylhäältä alas. Tekstivaiheet koskevat valittuja rivejä; ikkunan avaavat komennot jatkuvat, kun ikkuna suljetaan.", "activeIn": "Aktiivinen kohteessa", "activeInEverywhere": "Kaikkialla", - "generalSetupLikeSe4": "Määritä kuten Subtitle Edit 4 (teema, pikanäppäimet, korvaussäännöt)", - "generalMergeSelectedLines": "Yhdistä valitut rivit", - "generalMergeWithPrevious": "Yhdistä edelliseen", - "generalMergeWithNext": "Yhdistä seuraavaan", - "generalMergeWithPreviousAndUnbreak": "Yhdistä edelliseen ja poista rivinvaihto", - "generalMergeWithNextAndUnbreak": "Yhdistä seuraavaan ja poista rivinvaihto", - "generalMergeWithPreviousAndAutoBreak": "Yhdistä edelliseen ja tee automaattinen rivinvaihto", - "generalMergeWithNextAndAutoBreak": "Yhdistä seuraavaan ja tee automaattinen rivinvaihto", - "generalMergeSelectedLinesAndAutoBreak": "Yhdistä valitut rivit ja katkaise automaattisesti", "generalMergeSelectedLinesAndUnbreak": "Yhdistä valitut rivit ja poista katkaisut", "generalMergeSelectedLinesAndUnbreakCjk": "Yhdistä valitut rivit ja poista katkaisut CJK", - "generalMergeSelectedLinesOnlyFirstText": "Yhdistä valitut rivit vain ensimmäinen teksti", "generalMergeSelectedLinesBilingual": "Yhdistä valitut rivit kaksikielisenä", - "generalMergeWithPreviousBilingual": "Yhdistä edelliseen kaksikieliseen", - "generalMergeWithNextBilingual": "Yhdistä seuraavaan kaksikieliseen", - "generalMergeOriginalAndTranslation": "Yhdistä alkuperäinen ja käännös", "generalToggleTranslationMode": "Vaihda käännöstilaa", - "generalSwitchOriginalAndTranslation": "Vaihda alkuperäinen ja käännös", - "generalSwitchOriginalAndTranslationTextBoxes": "Vaihda alkuperäisen ja käännöksen tekstikentät", "generalToggleTranslationAndOriginalInPreviews": "Vaihda käännöksen ja alkuperäisen välillä video-/ääniesikatselussa", "generalChooseLayout": "Valitse asettelu", - "generalLayoutChooseX": "Asettelu {0}", - "generalPlayFirstSelected": "Toista ensimmäinen valittu", - "generalGoToFirstSelectedLine": "Siirry ensimmäiseen valittuun riviin", - "generalGoToNextEmptyLine": "Siirry seuraavaan tyhjään riviin", "generalGoToNextSubtitle": "Siirry seuraavaan tekstitykseen", "generalGoToNextSubtitlePlayTranslate": "Siirry seuraavaan tekstitykseen (toista käännös)", "generalGoToNextSubtitleCursorAtEnd": "Siirry seuraavaan tekstitykseen (kohdistin lopussa)", "generalGoToPrevSubtitle": "Siirry edelliseen tekstitykseen", "generalGoToPrevSubtitlePlayTranslate": "Siirry edelliseen tekstitykseen (toista käännös)", - "generalGoToStartOfCurrentSubtitle": "Siirry nykyisen tekstityksen alkuun", - "generalGoToEndOfCurrentSubtitle": "Siirry nykyisen tekstityksen loppuun", - "generalGoToPreviousSubtitleAndFocusVideo": "Siirry edelliseen tekstitykseen ja keskitä video", - "generalGoToNextSubtitleAndFocusVideo": "Siirry seuraavaan tekstitykseen ja keskitä video", - "generalGoToPrevSubtitleAndPlay": "Siirry edelliseen tekstitykseen ja toista", - "generalGoToNextSubtitleAndPlay": "Siirry seuraavaan tekstitykseen ja toista", - "generalGoToPreviousSubtitleAndFocusWaveform": "Siirry edelliseen tekstitykseen ja kohdista aaltomuoto", - "generalGoToNextSubtitleAndFocusWaveform": "Siirry seuraavaan tekstitykseen ja kohdista aaltomuoto", - "generalGoToLineNumber": "Siirry rivinumeroon", "generalGoToFirstLine": "Siirry ensimmäiselle riville", "generalGoToLastLine": "Siirry viimeiselle riville", "alsoSetVideoPosition": "Aseta myös videon sijainti", "generalGoToVideoPosition": "Siirry videon kohtaan", "generalToggleItalic": "Vaihda kursivointi", "generalToggleBold": "Vaihda lihavointi", - "generalToggleBookmarks": "Vaihda kirjanmerkit", - "generalFocusTextBox": "Siirrä kohdistus tekstikenttään", - "generalToggleBookmarksWithText": "Vaihda kirjanmerkkejä tekstillä", - "generalEditBookmarks": "Muokkaa kirjanmerkkejä", - "fileNew": "Uusi", "generalToggleUnderline": "Alleviivaus päälle/pois", + "generalToggleBox": "Vaihda laatikko päälle/pois (EBU STL)", "fileOpen": "Avaa", "fileOpenKeepVideo": "Avaa (säilytä video)", "fileSave": "Tallenna", "fileSaveAs": "Tallenna nimellä", - "fileSaveAll": "Tallenna kaikki", "fileSaveOriginal": "Tallenna alkuperäinen", - "fileSaveOriginalAs": "Tallenna alkuperäinen nimellä", - "fileOpenOriginalSubtitle": "Avaa alkuperäinen tekstitys", - "fileCloseOriginalSubtitle": "Sulje alkuperäinen tekstitys", - "fileTranslatedSubtitle": "Käännetty tekstitys", "fileCompare": "Vertaa", "fileStatistics": "Tilastot", "fileImportPlainText": "Tuo pelkkää tekstiä", - "fileImportBluRaySupForOcr": "Tuo Blu-ray SUP OCR:ää varten", - "fileImportBluRaySupForEdit": "Tuo Blu-ray SUP muokkausta varten", - "fileImportTimeCodes": "Tuo aikakoodit", "fileExportEbuStl": "Vie EBU STL", "fileExportPac": "Vie PAC", - "fileExportEdlClipName": "Vie EDL-leikkeen nimi", - "fileExportPlainText": "Vie pelkkä teksti", - "fileExportCustomTextFormat1": "Vie mukautettu tekstimuoto 1", - "fileExportCustomTextFormat2": "Vie mukautettu tekstimuoto 2", - "fileExportCustomTextFormat3": "Vie mukautettu tekstimuoto 3", "fileExit": "Poistu", "openSeDataFolder": "Avaa Subtitle Edit -kansio", - "editFind": "Etsi", - "editFindNext": "Etsi seuraava", "editFindPrevious": "Etsi edellinen", - "editReplace": "Korvaa", - "editMultipleReplace": "Korvaa useita", - "editModifySelection": "Muokkaa valintaa", - "listSelectAll": "Valitse kaikki", - "listSelectFirst": "Valitse ensimmäinen", - "listSelectLast": "Valitse viimeinen", "listInverseSelection": "Käännä valinta", "listDeleteSelection": "Poista valinta", + "deleteSelectionEverywhere": "Poista valinta (kaikkialla)", "rippleDeleteSelection": "Poista valinta aaltoilevasti", - "settings": "Asetukset", "assigned": "Määritetty", "unassigned": "Määrittämätön", "pressedKeyX": "Painettu näppäin: {0}", @@ -3442,6 +3812,7 @@ "detectKey": "Tunnista näppäin", "control": "Control", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Shift", "controlMac": "⌃", @@ -3452,11 +3823,14 @@ "resetShortcutsDetail": "Haluatko nollata kaikki pikanäppäimet oletusarvoihin?", "togglePlayPause": "Vaihda toisto/tauko", "toggleLockTimeCodes": "Vaihda aikakoodien lukitus", + "toggleTimeCodeMode": "Vaihda aikakooditilaa (aika/kehykset/kehysnumerot)", + "toggleScreenPrivacy": "Vaihda näytön yksityisyystilaa (piilota tiedostonimet, sitten myös tekstit)", + "screenPrivacyFileNamesHidden": "Näytön yksityisyys: tiedostonimet piilotettu", + "screenPrivacyFileNamesAndTextsHidden": "Näytön yksityisyys: tiedostonimet ja tekstit piilotettu", + "screenPrivacyOff": "Näytön yksityisyys: pois", "duplicateSelectedLines": "Kopioi valitut rivit", "sourceView": "Lähdekoodinäkymä", - "showAlignmentPicker": "Kohdistus", "addOrEditBookmark": "Lisää tai muokkaa kirjanmerkkiä", - "listBookmarks": "Luettelo kirjanmerkeistä", "toggleBookmark": "Vaihda kirjanmerkki (valitut rivit, ei tekstiä)", "toggleForcedSelectedLines": "Pakotettu päälle/pois (valitut rivit)", "goToNextBookmark": "Siirry seuraavaan kirjanmerkkiin", @@ -3467,7 +3841,6 @@ "waveformSetStartAndSetEndOfPreviousMinusGap": "Aseta edellisen välin alku ja loppu miinusväli", "waveformSetEndAndStartOfNextAfterGap": "Aseta seuraavan välin loppu ja alku plusväli", "waveformSetEndAndStartOfNextAfterGapAndGoToNext": "Aseta seuraavan plus-aukon loppu ja alku ja siirry seuraavaan", - "fetchFirstWordFromNextSubtitle": "Hae seuraavan tekstityksen ensimmäinen sana", "moveLastWordToNextSubtitle": "Siirrä viimeinen sana seuraavaan tekstitykseen", "breakAtFirstSpaceFromCursor": "Katkaise ensimmäisestä välilyönnistä kohdistimen kohdalta", "breakAtFirstSpaceFromCursorAndGoToNext": "Katkaise ensimmäisestä välilyönnistä kohdistimen kohdalta ja siirry seuraavaan", @@ -3479,7 +3852,6 @@ "videoGoToPreviousTimeCode": "Siirry edelliseen aikakoodiin", "videoGoToNextTimeCode": "Siirry seuraavaan aikakoodiin", "goToNextLineAndSetVideoPosition": "Siirry seuraavaan tekstitykseen ja aseta videon sijainti", - "textBoxDeleteSelectionNoClipboard": "Tekstiruutu: Poista valinta (ei leikepöytää)", "textBoxDeleteForward": "Tekstikenttä: Poista valinta tai seuraava merkki (eteenpäin poisto)", "textBoxCut": "Tekstiruutu: Leikkaa", "textBoxCut2": "Tekstiruutu: Leikkaa (vaihtoehto)", @@ -3498,6 +3870,7 @@ "listViewColumnTextUp": "Sarake, teksti ylös", "listViewColumnTextDown": "Sarake, teksti alas", "autoTranslateSelectedLines": "Käännä valitut rivit automaattisesti...", + "autoTranslateSelectedLinesNoPrompt": "Käännä valitut rivit automaattisesti (ei kyselyä, käytä viimeisintä moottoria/kieliä)", "setAssaResolution": "Aseta ASSA-tarkkuus (PlayResX/PlayResY)", "setShortcutForX": "Aseta pikanäppäin kohteelle \"{0}\"", "commandFileNewKeepVideo": "Uusi (säilytä video)", @@ -3505,27 +3878,20 @@ "fileCloseOriginal": "Sulje alkuperäinen", "fileCloseTranslation": "Sulje käännös", "restoreAutoBackup": "Palauta automaattinen varmuuskopio", - "openContainingFolder": "Avaa sisältävä kansio", "importTimeCodes": "Tuo aikakoodit", "importSubtitleWithManuallyChosenEncoding": "Tuo tekstitys manuaalisesti valitulla koodauksella", "exportBluRaySup": "Vie Blu-ray SUP", "exportCustomTextFormat": "Vie mukautettu tekstimuoto", "exportPlainText": "Vie pelkkä teksti", - "showHistory": "Näytä historia", "toggleRightToLeft": "Vaihda oikealta vasemmalle", "modifySelection": "Muokkaa valintaa", "adjustDurations": "Säädä kestoja", "applyDurationLimits": "Käytä kestoja koskevia rajoituksia", "batchConvert": "Joukkokonvertoi", - "bridgeGaps": "Yhdistä aukot", "applyMinGap": "Käytä vähimmäisaukkoa", - "fixCommonErrors": "Korjaa yleiset virheet", "makeEmptyTranslationFromCurrentSubtitle": "Luo tyhjä käännös nykyisestä tekstityksestä", - "mergeLinesWithSameText": "Yhdistä rivit, joissa on sama teksti", - "mergeLinesWithSameTimeCodes": "Yhdistä rivit, joissa on samat aikakoodit", "splitBreakLongLines": "Jaa/tasapainota pitkät rivit", "mergeShortLines": "Yhdistä lyhyet rivit", - "removeTextForHearingImpaired": "Poista teksti kuulovammaisille", "joinSubtitles": "Yhdistä tekstitykset", "splitSubtitle": "Jaa tekstitys", "spellCheck": "Oikeinkirjoituksen tarkistus", @@ -3547,7 +3913,6 @@ "adjustAllTimes": "Säädä kaikkia aikoja", "visualSync": "Visuaalinen synkronointi", "translateViaCopyPaste": "Käännä kopioimalla ja liittämällä", - "shortcuts": "Pikanäppäimet", "wordLists": "Sanaluettelot", "chooseUiLanguage": "Valitse käyttöliittymän kieli", "chooseRuleProfile": "Valitse sääntöprofiili", @@ -3558,6 +3923,7 @@ "textBoxItalic": "Tekstiruutu kursivoitu", "textBoxBold": "Tekstikenttä: lihavointi", "textBoxUnderline": "Tekstikenttä: alleviivaus", + "textBoxBox": "Tekstikenttä: laatikko (EBU STL)", "resetWaveformZoomAndSpeed": "Nollaa aaltomuodon zoomaus ja toistonopeus (toistonopeus)", "togglePlaybackSpeed": "Vaihda toistonopeutta (toistonopeus)", "playbackSpeedSlower": "Toistonopeus hitaampi (toistonopeus)", @@ -3567,22 +3933,28 @@ "seekSilence": "Etsi hiljaisuus", "waveformGuessStart": "Arvaa alkuaika aaltomuodosta", "waveformGuessEnd": "Arvaa loppuaika aaltomuodosta", + "waveformGuessStartAndEnd": "Arvaa alku- ja loppuaika aaltomuodosta", "setVideoPositionCurrentSubtitleStart": "Aseta videon sijainti nykyisen rivin alkuun", "goToSubtitlePositionAndPause": "Siirry tekstityksen kohtaan ja tauota", "setVideoPositionCurrentSubtitleEnd": "Aseta videon sijainti nykyisen rivin loppuun", "toggleAudioTracks": "Vaihda ääniraitoja", - "listErrors": "Luettele virheet", "goToNextError": "Siirry seuraavaan virheeseen", "goToPreviousError": "Siirry edelliseen virheeseen", "addNameToNameList": "Lisää nimi nimiluetteloon", "findDoubleWords": "Etsi kaksoissanat", "findDoubleLines": "Etsi kaksoisrivit", "colorX": "Väri {0}", - "removeColor": "Poista väri", "surroundWith": "Ympäröi...", "surroundWithXY": "Ympäröi {0}/{1}:llä", - "repeatLine": "Toista rivi", "surroundWithNumberX": "Ympäröi merkinnällä #{0}", + "surroundWithBehavior": "Toiminta", + "surroundWithBehaviorToggle": "Vaihda (lisää tai poista, jos olemassa)", + "surroundWithBehaviorAdd": "Lisää (joka kerta)", + "surroundWithBehaviorRemove": "Poista (kaikki)", + "surroundWithBehaviorRemoveOnce": "Poista (yksi kerrallaan)", + "surroundWithWorksOn": "Kohdistuu", + "surroundWithScopeSelectionOrText": "Valintaan, muuten koko tekstiin", + "surroundWithScopeEachLine": "Jokaiseen riviin", "searchVia": "Hae palvelulla", "searchViaX": "Hae palvelulla {0}", "searchViaNumberX": "Hae palvelulla #{0}", @@ -3607,6 +3979,11 @@ "copySubtitlePathToClipboard": "Kopioi tekstityksen polku leikepöydälle", "copySubtitleOriginalPathToClipboard": "Kopioi alkuperäisen tekstityksen polku leikepöydälle", "focusTextBox": "Kohdista tekstikenttä", + "focusSubtitleListView": "Kohdista tekstitysluettelonäkymään", + "focusWaveform": "Kohdista aaltomuotoon", + "focusOriginalTextBox": "Kohdista alkuperäisen tekstikenttään", + "textBoxGoToStart": "Tekstikenttä, siirry alkuun", + "textBoxGoToEnd": "Tekstikenttä, siirry loppuun", "sortByNumber": "Lajittele numeron mukaan", "sortByStartTime": "Lajittele \"Näytä\"-ajan mukaan", "sortByEndTime": "Lajittele \"Piilota\"-ajan mukaan", @@ -3631,7 +4008,6 @@ "assaStyles": "ASSA Tyylit", "assaProperties": "ASSA Ominaisuudet", "assaAttachments": "ASSA Liitteet", - "assaVideoColorPicker": "ASSA-videon värivalitsin", "recalculateDurationSelectedLines": "Laske kesto uudelleen (valitut rivit)", "toggleWaveformAndSpectrogramHeight": "Vaihda aaltomuodon/spektrogrammin jaetun korkeuden näkymää", "toggleSpectrogramStyle": "Vaihda spektrogrammin tyyliä", @@ -3643,6 +4019,7 @@ "moveFirstWordFromNextLineUpCurrentSubtitle": "Siirrä seuraavan rivin ensimmäinen sana ylös (nykyinen tekstitys)", "moveTextFromCursorToNextAndGoToNext": "Siirrä kohdistimen jälkeinen teksti seuraavaan tekstitykseen ja siirry seuraavaan", "moveTextFromCursorToNextAndGoToNextAndPlay": "Siirrä kohdistimen jälkeinen teksti seuraavaan tekstitykseen, siirry seuraavaan ja toista", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "Siirrä kohdistimen jälkeinen teksti seuraavaan tekstitykseen, siirry seuraavaan, toista se ja pysäytä sen lopussa", "toggleFocusGridAndWaveform": "Vaihda kohdistus tekstitysruudukon ja aaltomuodon/spektrogrammin välillä", "mergeContinuationLines": "Yhdistä jatkorivit", "snapAllTimesToFrames": "Kiinnitä kaikki ajat kehyksiin", @@ -3658,9 +4035,9 @@ "selectionToSentenceCase": "Tekstikenttä: Valinta lausekirjoitusasuun", "selectionToggleCasing": "Tekstikenttä: Vaihda kirjainkokoa (ISOT -> pienet -> Otsikkotyyli)", "googleIt": "Hae Googlesta (valittu teksti)", - "setActorXY": "Aseta näyttelijä {0}: {1}", + "setActorX": "Aseta näyttelijä: {0}", "setNewActor": "Aseta uusi näyttelijä...", - "setActorSlotXTitle": "Näyttelijäpaikka {0}", + "setStyleX": "Aseta tyyli: {0}", "toggleDialogDashes": "Vaihda dialogiviivat", "mergeWithLineBeforeAsDialog": "Yhdistä edelliseen riviin dialogina", "mergeWithLineAfterAsDialog": "Yhdistä seuraavaan riviin dialogina", @@ -3671,13 +4048,27 @@ "moveStartOneFrameBackKeepGapPrev": "Siirrä alkua yksi kehys taaksepäin (säilytä aukko edelliseen, jos lähellä)", "moveStartOneFrameForwardKeepGapPrev": "Siirrä alkua yksi kehys eteenpäin (säilytä aukko edelliseen, jos lähellä)", "moveEndOneFrameBackKeepGapNext": "Siirrä loppua yksi kehys taaksepäin (säilytä aukko seuraavaan, jos lähellä)", - "moveEndOneFrameForwardKeepGapNext": "Siirrä loppua yksi kehys eteenpäin (säilytä aukko seuraavaan, jos lähellä)" + "moveEndOneFrameForwardKeepGapNext": "Siirrä loppua yksi kehys eteenpäin (säilytä aukko seuraavaan, jos lähellä)", + "moveStartXMsBack": "Siirrä alkua X ms taaksepäin (X asetetaan asetuksissa, myös visuaalisessa synkronoinnissa)", + "moveStartXMsForward": "Siirrä alkua X ms eteenpäin (X asetetaan asetuksissa, myös visuaalisessa synkronoinnissa)", + "moveEndXMsBack": "Siirrä loppua X ms taaksepäin (X asetetaan asetuksissa, myös visuaalisessa synkronoinnissa)", + "moveEndXMsForward": "Siirrä loppua X ms eteenpäin (X asetetaan asetuksissa, myös visuaalisessa synkronoinnissa)", + "moveSelectedLinesXMsBack": "Siirrä valittuja rivejä X ms taaksepäin (X asetetaan asetuksissa)", + "moveSelectedLinesXMsForward": "Siirrä valittuja rivejä X ms eteenpäin (X asetetaan asetuksissa)", + "moveSelectedLinesAndForwardXMsBack": "Siirrä valittuja ja kaikkia seuraavia rivejä X ms taaksepäin (X asetetaan asetuksissa)", + "moveSelectedLinesAndForwardXMsForward": "Siirrä valittuja ja kaikkia seuraavia rivejä X ms eteenpäin (X asetetaan asetuksissa)", + "moveAllLinesXMsBack": "Siirrä kaikkia rivejä X ms taaksepäin (X asetetaan asetuksissa)", + "moveAllLinesXMsForward": "Siirrä kaikkia rivejä X ms eteenpäin (X asetetaan asetuksissa)", + "moveSelectedLinesCustomMsBack": "Siirrä valittuja rivejä, mukautetut millisekunnit ({0:#,###,##0}) taaksepäin, {1}", + "moveSelectedLinesCustomMsForward": "Siirrä valittuja rivejä, mukautetut millisekunnit ({0:#,###,##0}) eteenpäin, {1}", + "moveSelectedLinesAndForwardCustomMsBack": "Siirrä valittuja ja kaikkia seuraavia rivejä, mukautetut millisekunnit ({0:#,###,##0}) taaksepäin, {1}", + "moveSelectedLinesAndForwardCustomMsForward": "Siirrä valittuja ja kaikkia seuraavia rivejä, mukautetut millisekunnit ({0:#,###,##0}) eteenpäin, {1}", + "moveAllLinesCustomMsBack": "Siirrä kaikkia rivejä, mukautetut millisekunnit ({0:#,###,##0}) taaksepäin, {1}", + "moveAllLinesCustomMsForward": "Siirrä kaikkia rivejä, mukautetut millisekunnit ({0:#,###,##0}) eteenpäin, {1}" }, "wordLists": { "title": "Sanaluettelot", "addName": "Lisää nimi", - "addWord": "Lisää sana", - "addPair": "Lisää pari", "nameAndIgnoreList": "Nimi-/ohituslista", "userWords": "Käyttäjän sanaluettelo", "ocrFixList": "OCR-korjauslista", @@ -3730,6 +4121,8 @@ "nOcrDatabase": "nOCR-tietokanta", "drawMode": "Piirtotila:", "addNewCharcter": "Lisää uusi merkki", + "addNOcrCharacterTitle": "Lisää nOCR-merkki riville {0}, merkki {1}/{2}, tietokanta \"{3}\"", + "addBinaryOcrCharacterTitle": "Lisää binääri-OCR-merkki riville {0}, merkki {1}/{2}, tietokanta \"{3}\"", "lineIndexX": "Rivi {0}", "inspectNOcrAdditions": "Tarkista uudet nOCR-lisäykset", "ocrSelectedLines": "OCR-valitut rivit", @@ -3777,6 +4170,8 @@ "binaryImageCompareInspectImageMatches": "\"Binäärikuvien vertailu\" - Tarkista kuvan vastaavuudet", "saveBlankTextTitle": "Tallenna tyhjä teksti?", "saveBlankTextPrompt": "Tallenna tyhjä teksti kuvalle?", + "drawnLinesDoNotMatchTitle": "Viivat eivät vastaa kuvaa", + "drawnLinesDoNotMatchPrompt": "Osa piirretyistä viivoista ei vastaa kuvaa (vihreiden viivojen on oltava merkin päällä, punaisten sen ulkopuolella), joten tätä merkkiä ei tunnisteta.\n\nTallennetaanko silti?", "yesAndNeverAskAgain": "Kyllä, älä kysy enää", "importTextFromSubtitleDotDotDot": "Tuo teksti tekstityksestä...", "importTextFromSubtitleOverwritePrompt": "Joissakin riveissä on jo OCR-tekstiä. Korvataanko olemassa oleva teksti?", @@ -3803,7 +4198,6 @@ "vobSubColorsTitle": "VobSub/DVD-värit", "vobSubColorsHeader": "Mukauta neljää VobSub-väriä", "vobSubColorsDescription": "VobSub/DVD-tekstitykset käyttävät neljää indeksoitua väriä: tausta, kuvio, korostus 1 ja korostus 2. Valitse kukin väri alta ohittaaksesi upotetun paletin - hyödyllistä, kun alkuperäiset värit antavat huonon OCR-kontrastin.", - "vobSubColorBackground": "Tausta", "vobSubColorPattern": "Kuvio", "vobSubColorEmphasis1": "Korostus 1", "vobSubColorEmphasis2": "Korostus 2", @@ -3837,9 +4231,26 @@ "crispEmbedSettingsTitle": "CrispEmbed-asetukset", "crispEmbedDescription": "Paikallinen OCR-moottori usealla mallitaustaohjelmalla - lataa moottori ja mallit täältä.", "trainNOcrDatabase": "Kouluta nOCR-tietokanta...", + "optimizeNOcrDatabase": "Optimoi nOCR-tietokanta...", + "optimizeNOcrDatabaseQuestionXY": "Poistetaanko nOCR-tietokannasta \"{0}\" viivat, jotka eivät erota merkkejä samankaltaisista merkeistä?\n\nTämä pienentää tietokantaa ja nopeuttaa OCR:ää, yleensä vähemmillä virheillä. Kestää enintään minuutin.\n\nVarmuuskopio tallennetaan nimellä \"{1}\".", + "optimizingNOcrDatabaseXY": "Optimoidaan nOCR-tietokantaa... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "nOCR-tietokanta \"{0}\" optimoitu: {1:#,##0} -> {2:#,##0} viivaa.", "startTraining": "Aloita koulutus", "abortTraining": "Keskeytä koulutus", "trainingOptions": "Koulutusasetukset", + "trainNOcrSubtitle": "Piirtää merkit asennetuilla fonteilla ja opettaa nOCR:lle niiden muodot. Valitse tekstityksissäsi käytetyt fontit.", + "xFontsSelected": "{0:#,##0} valittu", + "subtitleFonts": "Tekstityksen fontit", + "emptyDatabase": "Tyhjä tietokanta", + "startFromDatabase": "Aloita kohteesta", + "startFromDatabaseHint": "Lisää opetetut merkit olemassa olevan tietokannan kopioon (suositeltu) tai aloita tyhjästä", + "fontSizes": "Fonttikoot", + "fontSizesHint": "Piirrettävät fonttikoot pikseleinä pilkuilla erotettuina, esim. \"30, 40\"", + "numberOfLineSegmentsHint": "Tarkistettavat viivat merkkiä kohden - useampi on tiukempi mutta hitaampi", + "enterDatabaseName": "Anna tietokannalle nimi", + "trainingFontXSizeYCharacterZ": "Opetetaan \"{0}\" koossa {1} px: {2}", + "xLearned": "{0:#,##0} opittu", + "xSkipped": "{0:#,##0} ohitettu", "charactersToTrain": "Koulutettavat merkit", "letterCombinationsToTrain": "Kirjainyhdistelmät, jotka saattavat jakautua yhdeksi kuvaksi", "importCharactersFromSubtitleFile": "Tuo merkit tekstitystiedostosta...", @@ -3866,6 +4277,8 @@ "drawZoomOut": "Loitonna (Ctrl+-)", "drawResetView": "Nollaa näkymä (Ctrl+0)", "drawToggleGrid": "Vaihda ruudukko (Ctrl+G)", + "drawTogglePreview": "Esikatselu päälle/pois (F9)", + "drawPreviewFailed": "Esikatselu epäonnistui - tarvitaan ffmpeg libass-tuella (subtitles-suodatin)", "drawCopyToClipboard": "Kopioi leikepöydälle (Ctrl+C)", "drawShapes": "Muodot", "drawSelectedPoint": "Valittu piste", @@ -3873,16 +4286,86 @@ "drawSelectedLayer": "Valittu taso", "drawToolX": "Työkalu: {0}", "drawHelpText": "Napsauta lisätäksesi pisteitä • Enter/F8 sulkeaaksesi muodon • Siirrä Shift+vedä • Zoomaa Ctrl+vieritys", + "drawMoveToLayer": "Siirrä kerrokseen", + "drawFlipHorizontal": "Peilaa vaakasuunnassa", + "drawFlipVertical": "Peilaa pystysuunnassa", + "drawHideShape": "Piilota muoto", + "drawShowShape": "Näytä muoto", + "drawHideLayer": "Piilota kerros", + "drawShowLayer": "Näytä kerros", + "drawDeleteLayer": "Poista kerros", + "drawDeletePoint": "Poista piste", + "drawCancelDrawing": "Peruuta piirtäminen", + "drawLayerX": "Kerros {0}", + "drawImportSvg": "Tuo SVG-kuva...", + "drawRotateClockwise": "Kierrä 90° myötäpäivään", + "drawConvertToCurve": "Muunna segmentti käyräksi", + "drawBackground": "Tausta", + "drawPosition": "Sijainti", + "drawZoom": "Zoomaus", + "drawShapeTool": "Muototyökalu", + "drawColorPickerTool": "Poimi väri muodosta tai taustasta", + "drawShapeLibrary": "Muotokirjasto", + "drawShapeLibraryHint": "Vedä piirtoalueella sijoittaaksesi muodon tai napsauta oletuskokoa varten. Shift säilyttää mittasuhteet.", + "drawAddToLibrary": "Lisää muotokirjastoon...", + "drawRemoveFromLibrary": "Poista muotokirjastosta", + "drawShapeName": "Muodon nimi", + "drawCategorySpeechBubbles": "Puhekuplat", + "drawCategoryArrows": "Nuolet", + "drawCategoryBasicShapes": "Perusmuodot", + "drawCategorySymbols": "Symbolit", + "drawCategoryMyShapes": "Omat muodot", + "drawShapeSpeechBubble": "Puhekupla", + "drawShapeSpeechBubbleRight": "Puhekupla, häntä oikealla", + "drawShapeSpeechBubbleUp": "Puhekupla, häntä ylhäällä", + "drawShapeOvalBubble": "Soikea puhekupla", + "drawShapeBoxBubble": "Laatikkopuhekupla", + "drawShapeThoughtBubble": "Ajatuskupla", + "drawShapeShoutBubble": "Huutokupla", + "drawShapeCaptionBox": "Tekstilaatikko", + "drawShapeArrow": "Nuoli", + "drawShapeDoubleArrow": "Kaksoisnuoli", + "drawShapeChevron": "Kulmanuoli", + "drawShapeCurvedArrow": "Kaareva nuoli", + "drawShapeRoundedRectangle": "Pyöristetty suorakulmio", + "drawShapeTriangle": "Kolmio", + "drawShapeDiamond": "Vinoneliö", + "drawShapePentagon": "Viisikulmio", + "drawShapeHexagon": "Kuusikulmio", + "drawShapeOctagon": "Kahdeksankulmio", + "drawShapeStar": "Tähti", + "drawShapeRing": "Rengas", + "drawShapePlus": "Plus", + "drawShapeBanner": "Banneri", + "drawShapeHeart": "Sydän", + "drawShapeCheck": "Valintamerkki", + "drawShapeMusicNote": "Nuotti", + "drawShapeMusicNotes": "Nuotit", + "drawShapeLightning": "Salama", + "drawShapeCloud": "Pilvi", + "drawShapeMoon": "Kuu", + "drawShapeBadge": "Merkki", + "drawSize": "Koko", + "drawLayer": "Kerros", + "drawBackgroundVideoFrame": "Videokehys (nykyinen kohta)", + "drawBackgroundVideoFrameAt": "Videokehys kohdassa...", + "drawBackgroundImage": "Kuvatiedosto...", + "drawBackgroundNone": "Ei taustaa", + "drawBackgroundStretch": "Venytä kuva piirtoalueen kokoiseksi", + "drawBackgroundOpacity": "Taustan peittävyys", + "drawBackgroundVideoFrameFailed": "Videokehystä ei saatu kohdasta {0}.", + "drawImages": "Kuvat", + "drawConvertToLine": "Muunna segmentti suoraksi", + "drawConvertShapeToCurves": "Muunna kaikki suorat käyriksi", + "drawConvertShapeToLines": "Muunna kaikki käyrät suoriksi", + "drawRotateCounterClockwise": "Kierrä 90° vastapäivään", + "drawSvgImages": "SVG-kuvat", + "drawSvgNoShapes": "SVG-tiedostosta ei löytynyt täytettyjä muotoja tai viivoja.", "progressBarTitle": "ASSA-etenemispalkki", "progressBarSettings": "Etenemispalkki", - "progressBarPosition": "Sijainti", - "progressBarBottom": "Alareuna", - "progressBarTop": "Yläreuna", "mouseOverColor": "Väri hiiren osoittaessa", "clickedColor": "Väri napsautettaessa", "progressBarForeColor": "Etualaväri", - "progressBarBackColor": "Taustaväri", - "progressBarStyle": "Tyyli", "progressBarSquareCorners": "Suorakulmaiset kulmat", "progressBarRoundedCorners": "Pyöristetyt kulmat", "progressBarChapters": "Luvut", @@ -3891,8 +4374,6 @@ "progressBarXAdjustment": "X-säätö", "progressBarYAdjustment": "Y-säätö", "progressBarTextAlignment": "Tekstin kohdistus", - "progressBarTakePosFromVideo": "Ota sijainti videosta", - "progressBarPreview": "Esikatselu", "fontCollectorTitle": "Fonttien kerääjä", "fontCollectorUsedIn": "Käytetty kohteessa", "fontCollectorFontFiles": "Fonttitiedosto(t)", @@ -3939,9 +4420,7 @@ "resolutionResamplerVideoDiffers": "Tekstityksen resoluutio ({0}x{1}) eroaa videon resoluutiosta ({2}x{3}).\nMuutetaanko tekstitys videon mukaiseksi?", "resolutionResamplerAskOnVideoOpen": "Kysy, kun avataan video, jolla on eri resoluutio", "backgroundBoxGenerator": "Luo taustaruutu", - "backgroundBoxPadding": "Täyttö", "backgroundBoxFillWidth": "Täyttöleveys", - "backgroundBoxBoxColor": "Ruudun väri", "backgroundBoxRadius": "Säde", "backgroundBoxCircle": "Ympyrä", "backgroundBoxSpikes": "Piikit", @@ -3953,12 +4432,9 @@ "backgroundBoxTornPaperDouble": "Repeytynyt paperi (ylä- ja alaosa)", "backgroundBoxStarburst": "Tähtisuihku", "backgroundBoxScroll": "Rulla / Pergamentti", - "stylesTitle": "Advanced Sub Station Alpha -tyylit", "stylesInFile": "Tiedostossa olevat tyylit", "stylesSaved": "Tallennetut tyylit", - "category": "Luokka", "allCategories": "[Kaikki]", - "defaultCategory": "Oletus", "newCategory": "Uusi luokka...", "renameCategory": "Nimeä luokka uudelleen...", "deleteCategory": "Poista luokka", @@ -3978,13 +4454,26 @@ "graphics": "Grafiikka", "copyToStorageStyles": "Kopioi tallennustyyliin", "copyToFileStyles": "Kopioi tiedostotyyliin", + "styleXAlreadyExistsInStorage": "Tyyli nimeltä \"{0}\" on jo olemassa tallennetuissa tyyleissä.\n\nKorvataanko se vai säilytetäänkö molemmat (kopio saa uuden nimen)?", + "styleXAlreadyExistsInFile": "Tyyli nimeltä \"{0}\" on jo olemassa tiedostossa.\n\nKorvataanko se vai säilytetäänkö molemmat (kopio saa uuden nimen)?", + "styleNameCannotBeEmpty": "Tyylin nimi ei voi olla tyhjä.", + "styleNameXIsUsedMoreThanOnce": "Tyylin nimeä \"{0}\" käyttää useampi kuin yksi tyyli tiedostossa.", + "overwrite": "Korvaa", + "keepBoth": "Säilytä molemmat", + "doThisForAllConflictingStyles": "Tee näin kaikille ristiriitaisille tyyleille", "setStyleAsDefault": "Aseta tyyli oletukseksi", "takeUsagesFromDotDotDot": "Ota käyttöpaikat kohdasta...", "replaceStyleWithDotDotDot": "Korvaa tyyli tyylillä...", "noAttachmentsFound": "Valitusta ASSA-tiedostosta ei löytynyt liitteitä.", "deleteStyleQuestion": "Poista tyyli?", "deleteStylesQuestion": "Poista tyylit?", + "deleteXStylesQuestion": "Haluatko poistaa {0} tyyliä?", + "deleteXStylesFromStorageQuestion": "Haluatko poistaa {0} tyyliä tallennetuista tyyleistä?", + "deleteStyleXFromStorageQuestion": "Haluatko poistaa tyylin \"{0}\" tallennetuista tyyleistä?", + "deleteStyleXFromFileQuestion": "Haluatko poistaa tyylin \"{0}\" nykyisestä tiedostosta?", "openStyleImportFile": "Avaa tekstitystiedosto, josta tuodaan tyylit", + "styleImportFiles": "Tyylitiedostot (.ass, .sty, Subtitle Edit 4 -kategoriat .template)", + "ssaStyleImportFiles": "Tyylitiedostot (.ssa, .ass, .sty)", "primary": "Ensisijainen", "secondary": "Toissijainen", "applyOverrideTags": "Käytä ohitustunnisteita", @@ -3999,7 +4488,6 @@ "spaceIncrease": "Lisää välilyöntiä", "popIn": "Ponnahda sisään", "spinIn": "Pyöräytä sisään", - "playCurrent": "Toista nykyinen", "setPosition": "Aseta sijainti", "rotation": "Kierto", "scaleX": "Skaalaus X", @@ -4043,10 +4531,8 @@ "advancedEffectOldMovieDescription": "Simuloi vanhaa 35 mm:n filmiprojektoria, jossa on kohinaa, vinjetointia ja naarmuja", "advancedEffectNeonBurst": "Neonpurske", "advancedEffectNeonBurstDescription": "Energiset 'Shorts'-tyyliset tekstitykset, joissa on neonhehkua ja sisään zoomaava 'pop'-animaatio", - "advancedEffectSettings": "Asetukset", "advancedEffectSnowFlakeCount": "Lumihiutaleiden määrä", "advancedEffectStarfieldStarCount": "Tähtien määrä", - "advancedEffectStarfieldSpeed": "Nopeus", "advancedEffectGlitch": "Häiriö", "advancedEffectGlitchDescription": "Digitaalinen häiriö, jossa on kromaattista aberraatiota, valkoisia välähdyksiä ja vääristymiä", "advancedEffectBounceIn": "Pomppiminen sisään", @@ -4055,8 +4541,6 @@ "advancedEffectFirefliesDescription": "Lämpimät, hohtavat kelta-meripihkaiset pisteet, jotka leijuvat orgaanisesti näytön poikki sykkivällä hohtolla", "advancedEffectMatrix": "Matrix", "advancedEffectMatrixDescription": "Putoavat vihreät hahmopylväät, joiden tekstitys muodostuu kirjain kirjaimelta sateesta", - "advancedEffectAudioBars": "Äänipalkit (aaltomuoto)", - "advancedEffectAudioBarsDescription": "Animoidut taajuuskorjainpalkit, joita ohjaa äänen aaltomuoto — palkit vierivät vasemmalle aaltomuodon mukaisesti ja sykkivät äänen tahdissa", "advancedEffectAudioPulse": "Äänitekstin syke", "advancedEffectAudioPulseDescription": "Tekstitysteksti hehkuu ja sykkii äänenvoimakkuuden mukaan — hiljaisissa kohdissa teksti näkyy normaalisti, äänekkäissä kohdissa tekstiin lisätään värillinen hohde ja se suurenee hieman", "advancedEffectConfetti": "Konfettisuihku", @@ -4070,7 +4554,6 @@ "advancedEffectFancyKaraokeGlow": "Aktiivisen sanan hehku", "advancedEffectFancyKaraokeActiveColor": "Aktiivinen väri", "advancedEffectFancyKaraokeInactiveColor": "Ei-aktiivinen väri", - "advancedEffectFancyKaraokeInactiveOpacity": "Ei-aktiivinen läpikuultavuus (0-255)", "advancedEffectWordSpacingPixels": "Välistys (pikseliä)", "advancedEffectSlowZoomOut": "Hidas loitontuminen", "advancedEffectSlowZoomOutDescription": "Teksti alkaa hieman suurempana ja kutistuu tasaisesti normaaliin kokoon tekstityksen keston aikana", @@ -4086,7 +4569,6 @@ "advancedEffectSlideInLeftDescription": "Teksti liukuu sisään näytön vasemmalta reunalta, pysähtyy ja poistuu sitten takaisin vasemmalle", "advancedEffectSlideInRight": "Liuku sisään oikealta", "advancedEffectSlideInRightDescription": "Teksti liukuu näytön oikealta reunan ulkopuolelta, pysähtyy ja poistuu sitten takaisin oikealle", - "advancedEffectFadeInOut": "Häivyttyy sisään/ulos", "advancedEffectFadeInOutDescription": "Teksti häivyttyy näkyviin kunkin tekstityksen alussa ja häivyttyy pois näkyvistä kunkin tekstityksen lopussa", "advancedEffectWordFlip3D": "Sanan 3D-käännös", "advancedEffectWordFlip3DDescription": "Jokainen sana taittuu esiin 3D-käännöksellä ja joustavalla ponnahduksella, kun se puhutaan — moderni Shorts-tekstitystyyli", @@ -4118,7 +4600,6 @@ "noPluginsInstalled": "Ei asennettuja lisäosia", "getPluginsOnline": "Hae lisäosia verkosta...", "getPluginsTitle": "Hae lisäosia", - "enabled": "Käytössä", "disabled": "Ei käytössä", "notSupportedOnThisOs": "Ei tuettu tässä käyttöjärjestelmässä", "removePluginXConfirm": "Poistetaanko lisäosa '{0}'? Tämä poistaa lisäosan kansion:{1}", @@ -4135,17 +4616,19 @@ "downloadingXPercent": "Ladataan {0} %...", "pluginXInstalled": "'{0}' asennettu.", "couldNotInstallPluginX": "Kohdetta '{0}' ei voitu asentaa: {1}", - "notInstalled": "Ei asennettu", "install": "Asenna", "reinstall": "Asenna uudelleen", - "update": "Päivitä", "installedX": "Asennettu ({0})", "updateAvailableXToY": "Päivitys saatavilla ({0} → {1})", "applyPluginToWhichLinesX": "Käytä '{0}' kohteeseen:", "applyToSelectedLinesX": "Valitut rivit ({0})", "applyToAllLinesX": "Kaikki rivit ({0})", "updateAllXAvailable": "Päivitä kaikki ({0})", - "updatingXOfY": "Päivitetään {0}/{1}..." + "updatingXOfY": "Päivitetään {0}/{1}...", + "doNotAskAgain": "Älä kysy uudelleen (muuta kohdassa Hallitse lisäosia)", + "applyPluginsTo": "Käytä lisäosia kohteeseen", + "askEachTime": "Kysy joka kerta", + "allLines": "Kaikki rivit" }, "errorList": { "title": "Luettele virheet", diff --git a/src/ui/Assets/Languages/French.json b/src/ui/Assets/Languages/French.json index a4ef86757db..18e92d75aff 100644 --- a/src/ui/Assets/Languages/French.json +++ b/src/ui/Assets/Languages/French.json @@ -1,21 +1,68 @@ { "title": "Subtitle Edit", - "version": "v5.3.0-bêta16", - "translatedBy": "Need74 . (29.sept.2026)", + "version": "v5.3.0", + "translatedBy": "Need74 . (11.oct.2026)", "cultureName": "fr-FR", "general": { + "prompt": "Invite", + "temperature": "Température", + "preset": "Préréglage", + "output": "Sortie", + "outputFormat": "Format de sortie", + "other": "Autre", + "timeCodeFormat": "Format de l'horodatage", + "topBottomMargin": "Marges haut/bas", + "theme": "Thème", + "brightness": "Luminosité", + "chooseColor": "Choisir la couleur", + "lineX": "Ligne {0}", + "playLine": "Ligne de lecture", + "maxLineLength": "Longueur de lignes max.", + "maxCharsPerSec": "Car./sec max.", + "maxNumberOfLines": "Nbr max. de lignes", + "subtitles": "Sous-titres", + "shotChanges": "Changements de plan", + "chapters": "Chapitres", + "blankLines": "Lignes vides", + "editWholeText": "Éditer tout le texte", + "noTextInClipboard": "Aucun texte dans le presse-papiers", + "noSubtitlesFoundTitle": "Aucun sous-titre trouvé", + "replacedXOccurrences": "Remplacement de {0} occurrences", + "invalidRegularExpressionX": "Expression régulière invalide : {0}", + "discardChangesTitle": "Abandonner les modifications ?", + "downloadingXDotDotDot": "Téléchargement de {0}…", + "importTimeCodesDotDotDot": "Importer les horodatages…", + "nextChange": "Prochain changement", + "previousChange": "Changement précédent", + "changeXOfY": "Modification {0} sur {1}", + "tooLong": "Trop longtemps", + "tooShort": "Trop court", + "overlapping": "Chevauchement", + "detail": "Détail", + "fixOcrErrors": "Corriger les erreurs OCR", + "runningOcrXY": "OCR en cours… {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp nécessite le téléchargement du moteur llama-server. Télécharger maintenant ?", "abort": "Abandonner", "actor": "Acteur", "actors": "Acteurs", "setActorDotDotDot": "Définir l'acteur…", "actorPickerTitle": "Définir l'acteur", "actorPickerFilterHint": "Tapez pour filtrer ou saisissez le nom d'un nouvel acteur", - "ignoreNumbering": "Ignorer la numérotation", - "ignoreNumberingHint": "Les lignes qui ne diffèrent que par leur numéro ne sont pas considérées comme différentes", - "actorPickerKeysHint": "Appuyez sur un chiffre ou sur \"Entrée\" pour définir l'acteur.\r\nAlt+Haut/Bas modifie l'ordre, \"Suppr\" supprime l'acteur.", - "actorPickerNewActorX": "Nouvel acteur \"{0}", + "actorPickerNewActorX": "Nouvel acteur \"{0}\"", "actorPickerLinesSelectedX": "Lignes sélectionnées : {0}", + "setStyleDotDotDot": "Définir le style…", + "stylePickerTitle": "Définir le style", + "stylePickerFilterHint": "Tapez pour filtrer ou tapez un nouveau nom de style", + "stylePickerKeysHint": "Appuyez sur un chiffre (1-9, 0) pour définir le style sur toutes les lignes sélectionnées.", + "stylePickerNewStyleX": "Nouveau style \"{0}\"", + "stylePickerNewStyleInfo": "Appuyez sur \"Entrée\" pour ajouter ce style avec les paramètres par défaut et définissez-le sur les lignes sélectionnées.\r\nUtilisez \"Gérer les styles…\" pour modifier ultérieurement sa police, ses couleurs et sa position.", + "stylePickerCurrentStyleX": "Style actuel : {0}", + "stylePickerLinesUsingStyleX": "Lignes utilisant ce style : {0}", + "stylePickerMarginsXYZ": "Gauche {0}, droite {1}, verticale {2}", + "stylePickerSetStyle": "_Définir le style", + "stylePickerManageStyles": "Gérer les styles…", + "stylePickerManageStylesHint": "Fermer cette fenêtre et ouvrir le gestionnaire de styles pour modifier les polices, les couleurs, la position et plus encore.", "add": "Ajouter", "addDotDotDot": "Ajouter…", "addToNamesListCaseSensitive": "Ajouter à la liste des noms (sensible à la casse)", @@ -245,7 +292,7 @@ "fixRightToLeft": "Corriger droite-vers-gauche « RTL »", "fixRightToLeftViaUnicodeTags": "Corriger « RTL » via les balises unicode", "fixedValue": "Valeur fixe", - "focusSelectedLine": "Focaliser sur le ligne désignée (défiler dans la vue de la grille) ", + "focusSelectedLine": "Focaliser sur le ligne désignée (défiler dans la vue de la grille)", "font": "Police", "fontColor": "Couleur de police", "fontHeight": "Hauteur de police", @@ -434,6 +481,7 @@ "percent": "Pourcentage", "pickLayer": "Définir la couche", "pickOllamaModel": "Choisir le modèle Ollama", + "pickModel": "Choisir le modèle", "llamaCppUseRemoteServer": "Utiliser un serveur externe (URL)", "llamaCppEngineSettings": "Paramètres du moteur llama.cpp", "llamaCppEngineSettingsSubtitle": "Serveur local llama.cpp", @@ -510,6 +558,7 @@ "reset": "Réinitialiser", "resizePanels": "Redimensionner les panneaux", "resolution": "Résolution", + "retry": "Réessayer", "reverseRightToLeftStartEnd": "Inverser début/fin RTL (lignes sélectionnées)", "right": "Droite", "rightToLeft": "De droite à gauche", @@ -526,7 +575,7 @@ "saveTranslationAsTitle": "Enregistrer la traduction sous", "saveVideoAsVideoTitle": "Enregistrer la vidéo sous", "savedChangesToX": "\"{0}\" enregistrée", - "savedChangesToXAndY": "\"{0}\" et \"{1}\" enregistrées ", + "savedChangesToXAndY": "\"{0}\" et \"{1}\" enregistrées", "savingDotDotDot": "Sauvegarde…", "script": "Script", "search": "Recherche", @@ -571,6 +620,8 @@ "shadowColor": "Couleur d'ombre", "shadowWidth": "Largeur d'ombre", "shiftLineBy": "Décaler la ligne de", + "shotIn": "Tourné dans", + "shotOut": "Tiré", "shortcut": "Raccourci", "shortcuts": "Raccourcis", "show": "Afficher", @@ -582,9 +633,13 @@ "showStartColumn": "Afficher la colonne « Début »", "showHideColumn": "Afficher la colonne « Masquer »", "showHistory": "Afficher l'historique", + "clearHistory": "Effacer l'historique", + "removeFromHistory": "Supprimer de l'historique", "showLayerColumn": "Afficher la colonne « Couche »", "showPreview": "Afficher l'aperçu", "showShotChangesList": "Afficher la liste des changement de plan", + "showShotInColumn": "Afficher la colonne \"Tourné dans\"", + "showShotOutColumn": "Afficher la colonne \"Tiré\"", "showStyleColumn": "Afficher la colonne « Style »", "showTeletext": "Afficher la colonne « Télétexte » en mode liste", "showTimeCodes": "Afficher l'horodatage", @@ -594,7 +649,7 @@ "singleMode": "Mode simple", "textTotalLength": "Texte - longueur totale", "textSingleLineMaxLength": "Texte - longueur maximale sur une seule ligne", - "size": "Redimensionner", + "size": "Taille", "sizeX": "Redimensionner : {0}%", "skip": "Ignorer", "skipAll": "Ignorer tout", @@ -641,12 +696,14 @@ "styleExaggeration": "Exagération du style", "styles": "Styles", "subtitleFile": "Fichier sous-titre", + "subtitleFileChangedOutsideX": "Le fichier \"{0}\" a été modifié en dehors de la modification des sous-titres.\r\n\r\nLe recharger et perdre vos modifications ?", "subtitleFileName": "Nom du fichier sous-titre", "subtitleFileSaved": "Fichier sous-titre sauvegardé", "subtitleFileSavedToX": "Fichier sous-titre sauvegardé vers {0}", "subtitleFiles": "Fichiers sous-titre", "subtitleFormats": "Formats de sous-titres", "subtitleLoadedX": "Sous-titres chargés : {0}", + "subtitleReloadedChangedOutsideX": "Sous-titre rechargé (modifié en dehors de la modification des sous-titres) : {0}", "suffix": "Suffixe", "suggestions": "Suggestions", "sync": "Synchro.", @@ -730,10 +787,23 @@ "videoCustom3ForwardX": "Vidéo, avance personnalisée de ({0:#,###,##0}) ms, 3", "videoCustom4BackX": "Vidéo, recul personnalisée de ({0:#,###,##0}) ms, 4", "videoCustom4ForwardX": "Vidéo, avance personnalisée de ({0:#,###,##0}) ms, 4", + "videoCustom1BackAndPauseX": "Vidéo, recul personnalisée de ({0:#,###,##0}) ms et en pause, 1", + "videoCustom1ForwardAndPauseX": "Vidéo, avance personnalisée de ({0:#,###,##0}) ms et en pause, 1", + "videoCustom2BackAndPauseX": "Vidéo, recul personnalisée de ({0:#,###,##0}) ms et en pause, 2", + "videoCustom2ForwardAndPauseX": "Vidéo, avance personnalisée de ({0:#,###,##0}) ms et en pause, 2", + "videoCustom3BackAndPauseX": "Vidéo, recul personnalisée de ({0:#,###,##0}) ms et en pause, 3", + "videoCustom3ForwardAndPauseX": "Vidéo, avance personnalisée de ({0:#,###,##0}) ms et en pause, 3", + "videoCustom4BackAndPauseX": "Vidéo, recul personnalisée de ({0:#,###,##0}) ms et en pause, 4", + "videoCustom4ForwardAndPauseX": "Vidéo, avance personnalisée de ({0:#,###,##0}) ms et en pause, 4", "videoExtension": "Extension du fichier vidéo", "videoFile": "Fichier vidéo", "videoFileGenerated": "Fichier vidéo généré", "videoFileGeneratedX": "Fichier vidéo généré : \"{0}\"", + "videoFilesGenerated": "Fichiers vidéo générés", + "xVideosGenerated": "{0} vidéos générées", + "xOfYVideosGenerated": "{0} vidéos sur {1} générées", + "savedInX": "Enregistré dans {0}", + "savedInXFolders": "Enregistré dans {0} dossiers", "videoFiles": "Fichiers vidéo", "videoAndAudioFiles": "Fichiers vidéo et audio", "videoOffset": "Décalage vidéo", @@ -860,6 +930,7 @@ "multipleReplace": "Remplacements _multiples…", "fillSelectedLinesWithClipboard": "Remplir les lignes sélectionnées avec le texte du presse-papiers", "goToLineNumber": "_Aller à la ligne N°…", + "commandPalette": "_Palette de commandes…", "rightToLeftMode": "Mode de dro_ite à gauche (RTL)", "modifySelectionDotDotDot": "Modifier la _sélection…", "tools": "_Outils", @@ -1052,6 +1123,9 @@ "charactersPerSecond": "Car./sec : {0}", "chooseColumn": "Choisir une colonne", "columnPaste": "Coller en colonnes", + "commandPaletteTitle": "Palette de commandes", + "commandPaletteSearchPlaceholder": "Tapez pour rechercher des commandes…", + "commandPaletteNoCommandsFound": "Aucune commande correspondante", "createdEmptyTranslation": "Créer une traduction vide à partir du sous-titre actuel", "deleteText": "Supprimer le texte", "deleteTextAndShiftCellsUp": "Supprimer le texte et décaler les cellules vers le haut", @@ -1097,6 +1171,7 @@ "overwriteExistingCells": "Écraser les cellules existantes", "overwriteOrShiftCellsDown": "Écraser/décaler les cellules vers le bas", "parsingMatroskaFile": "Analyse du fichier Matroska…", + "readingDvdSubtitles": "Lecture des sous-titres d'un DVD…", "pasteFromClipboardDotDotDot": "Coller depuis le presse-papiers", "redoPerformed": "Rétablissement effectué", "redoPerformedXActionLeft": "Rétablissement effectué (actions restantes : {0})", @@ -1136,12 +1211,14 @@ "trimmedXLines": "{0} lignes de sous-titre supprimées", "pastedXLinesOverSelectedLines": "Collé {0} ligne(s) sur les lignes sélectionnées", "pastedXOfYLinesOverSelectedLines": "Collé {0} de {1} ligne(s) sur les lignes sélectionnées : le reste ne correspondait pas à la sélection", + "insertedXLinesFromClipboard": "{0} ligne(s) insérée(s) à partir du presse-papiers", "openOriginalDifferentNumberOfSubtitlesXY": "Le fichier de sous-titres d'origine ne contient pas le même nombre de sous-titres que le fichier de sous-titres actuel.\n\n• Sous-titres d'origine : {0}\n• Sous-titres actuels : {1}", "originalTextReadOnly": "Texte original (lecture seule)", "originalTextEditMode": "Texte original (mode édition)", "originalIsReadOnlyNotSaved": "Le sous-titre original est une référence en lecture seule et n'a pas été enregistré", "originalIsEmptyNotSaved": "Le sous-titre original ne contient aucun texte et n'a pas été enregistré", "originalIsReadOnlyReference": "Le sous-titre original est ouvert en tant que référence en lecture seule", + "closeTranslationQuestionXY": "Fermer la traduction \"{0}\" ?\r\n\r\nLe sous-titre original \"{1}\" devient le sous-titre que vous modifiez. Le fichier de traduction lui-même n'est pas modifié.", "allowEditOfOriginalSubtitle": "Autoriser la modification du sous-titre original", "showAllOriginalLinesX": "Afficher toutes les lignes originales ({0} n'ont pas de correspondance ici)", "showAllOriginalLinesHint": "Les lignes sans correspondance sont affichées comme des lignes supplémentaires, afin que vous puissiez voir ce qui manque à la traduction.", @@ -1176,6 +1253,7 @@ "fileExportedInFormatXToY": "Fichier exporté au format {0} vers {1}", "fileExportedInFormatXToFileY": "Fichier exporté au format \"{0}\" vers le fichier \"{1}\"", "fixedXLines": "{0} lignes corrigées", + "toolXChangedYLines": "{0} : {1} lignes modifiées", "transcriptionCompletedWithXLines": "Transcription terminée avec {0} lignes", "openSubtitleFileX": "Ouvrir le fichier de sous-titre \"{0}\" ?", "replacedXOccurrences": "{0} occurrences remplacées", @@ -1266,6 +1344,21 @@ "formattingDotDotDot": "Mise en forme…", "imageBasedSubtitleForEditDotDotDot": "Sous-titre basé sur une image pour l'édition…", "imageBasedSubtitleForOcrDotDotDot": "Sous-titre basé sur une image pour l'OCR…", + "dvdSubtitlesDotDotDot": "Sous-titres d'un DVD (IFO/VOB)…", + "titleImportDvd": "Importer des sous-titres à partir d'un DVD", + "dvdIfoFile": "Fichier IFO", + "dvdVobFiles": "Fichiers VOB", + "dvdVideoStandard": "Norme vidéo", + "dvdStartRipping": "Commencer à déchirer", + "dvdRippingAborted": "Extraction interrompue", + "dvdOpenIfoFile": "Ouvrir le fichier DVD IFO", + "dvdAddVobFiles": "Ajouter des fichiers VOB", + "dvdIfoFiles": "Fichiers DVD IFO", + "dvdVobFileType": "Fichiers DVD VOB", + "dvdDropHint": "Ouvrez un fichier IFO (VIDEO_TS\\VTS_01_0.IFO) ou ajoutez des fichiers VOB - ou déposez-les ici", + "dvdNotAnIfoFileX": "{0} n'est pas un fichier DVD IFO", + "dvdMenuIfoNoTitleSetsX": "Aucun ensemble de titres (VTS_xx_0.IFO) trouvé à côté de {0}", + "dvdEncryptedXOfY": "{0} des {1} paquets de sous-titres sont toujours cryptés en CSS : ces fichiers VOB ont été copiés sans déchiffrement, de sorte que certaines images de sous-titres seront tronquées.\r\nDécryptez d'abord le DVD avec un outil d'extraction de DVD pour un résultat propre.\r\nContinuer quand même ?", "splitTextAt": "Scinder le texte à", "blankLines": "Lignes vides", "oneLineIsOneSubtitle": "Une ligne correspond à un sous-titre", @@ -1290,7 +1383,8 @@ "forcedAlignerIsolatingSpeech": "Isoler le discours… {0}", "forcedAlignerIsolatingSpeechFailed": "Impossible d'isoler le discours - les heures de fin ont été définies à partir de l'heure de lecture.", "forcedAlignerModel": "Modèle d'alignement", - "forcedAlignerDownloadEngine": "Télécharger / mettre à jour le moteur…" + "forcedAlignerDownloadEngine": "Télécharger / mettre à jour le moteur…", + "forcedAlignerEstimatedXOfY": "{0} lignes sur {1} n'ont pas pu être alignées et ont été placées en fonction de l'heure de lecture ; leurs horodatages ne sont qu'une estimation.\r\nLe script est probablement plus long que ce qui est dit dans la vidéo." }, "export": { "exportImagesProfiles": "Exporter les profils d'images", @@ -1528,16 +1622,64 @@ "compareNumberDifference": "Différence de nombre", "ignoreWhitespace": "Ignorer les espaces blancs", "ignoreWhitespaceHint": "Les lignes qui diffèrent uniquement par les espaces, les tabulations ou les sauts de ligne ne sont pas considérées comme différentes.", - "ignoreNumbering": "Ignorer la numérotation", - "ignoreNumberingHint": "Les lignes qui diffèrent uniquement par leur numéro ne sont pas considérées comme différentes", "ignoreFormatting": "Ignorer la mise en forme", "ignoreFormattingHint": "Les lignes qui diffèrent uniquement par les balises de formatage, comme ou {\\an8}, ne sont pas considérées comme différentes", "showOnlyDifferencesInText": "Afficher uniquement les différences dans le texte", + "ignoreNumbering": "Ignorer la numérotation", + "ignoreNumberingHint": "Les lignes qui diffèrent uniquement par leur numéro ne sont pas considérées comme différentes", + "ignoreTimeDifferenceMs": "Tolérance de temps (ms)", + "ignoreTimeDifferenceMsHint": "Les heures de début et de fin qui diffèrent de ce nombre de millisecondes ou moins ne sont pas considérées comme différentes.", + "compareDifferences": "Différences", + "compareTextDifferences": "Différences de texte", + "compareCurrent": "Actuel", + "compareReference": "Référence", + "compareEditable": "Éditable", + "compareEditableHint": "Les modifications apportées ici reviennent au sous-titre lorsque vous cliquez sur Appliquer", + "compareReadOnly": "Lecture seule", + "compareTakeFromReference": "Prendre le texte et le timing de la référence", + "compareInsertFromReference": "Insérer cette ligne dans le sous-titre actuel", + "compareDeleteFromCurrent": "Supprimer cette ligne du sous-titre actuel", + "compareTakeText": "Prendre du texte", + "compareTakeTiming": "Prendre le temps", + "compareEditLine": "Éditer la ligne", + "compareEditHint": "\"Ctrl+Entrée\" pour enregistrer, \"Échap\" pour annuler", + "compareEdited": "Édité", + "compareOnePendingChange": "1 modification en attente", + "compareXPendingChanges": "{0} modifications en attente", + "compareDiscardXChanges": "Supprimer les {0} modifications apportées dans \"Compare\" ?", + "compareXChangesApplied": "Comparer : {0} modification(s) appliquée(s)", + "compareChangeTextX": "#{0} texte depuis la référence", + "compareChangeTimingX": "#{0} synchronisation depuis la référence", + "compareChangeTextAndTimingX": "#{0} texte et synchronisation depuis la référence", + "compareChangeEditedX": "#{0} éditié", + "compareChangeInsertedX": "#{0} inséré", + "compareChangeDeletedX": "#{0} supprimé", + "compareSyncPoint": "Point de synchro", + "compareSyncPointHint": "Point de synchro : ces deux lignes sont toujours affichées par paire, et les lignes au-dessus et en dessous sont alignées individuellement", + "compareSyncPickCurrent": "Point de synchro : utiliser cette ligne actuelle", + "compareSyncPickReference": "Point de synchro : utiliser cette ligne de référence", + "compareSyncRemove": "Supprimer le point de synchro", + "compareClearXSyncPoints": "Effacer les points de synchro ({0})", + "compareSyncCurrentPickedX": "N° {0} actuel choisi comme point de synchronisation : sélectionner la ligne de référence correspondante et cliquer sur \"Synchroniser\".", + "compareSyncReferencePickedX": "Référence n° {0} choisie comme point de synchronisation : sélectionner la ligne actuelle correspondante et cliquer sur Synchroniser.", + "compareSyncWithCurrentX": "Synchroniser avec le numéro actuel {0}", + "compareSyncWithReferenceX": "Synchroniser avec la référence #{0}", + "compareSyncApply": "Synchro", + "compareSyncPointSetXY": "Ensemble de points de synchro : le numéro {0} actuel et le numéro de référence {1} sont désormais affichés sous forme de paire.", + "compareSyncAlreadyPairedXY": "Le numéro {0} actuel et le numéro de référence {1} sont déjà affichés par paire avec le même début – rien à synchroniser", + "compareSyncPointShiftedXYZW": "Ensemble de points de synchronisation : #{0}-#{1} actuel décalé de {2} pour commencer par la référence #{3}", + "compareChangeSyncShiftXYZ": "#{0}-#{1} décalé de {2} (point de synchronisation)", + "compareTimingDeltaHint": "Combien de temps plus tard (+) ou plus tôt (−), commence et se termine la référence par rapport à la ligne actuelle", "loadXFromFile": "Charger \"{0}\" depuis un fichier", + "compareLoadSavedFile": "Charger le fichier enregistré", "saveCompareHtmlTitle": "Enregistrer le fichier HTML de comparaison", "pickMatroskaTrackX": "Choisir la piste Matroska - {0}", "pickTransportStreamTrackX": "Choisir la piste du flux de transport - {0}", + "chapters": "Chapitres", + "dvdVobFilesMissingX": "Fichiers VOB manquants ({0} % trouvés)", "pickMp4TrackX": "Choisir la piste MP4 - {0}", + "pickMxfTrackX": "Choisir une piste MXF – {0}", + "pickMpegTrackX": "Choisir une piste MPEG – {0}", "rosettaProperties": "Propriétés IMSC Rosetta du texte temporisé", "rosettaFontSize": "Taille de police (hauteur de ligne)", "propertyTimeBase": "Base de temps", @@ -1612,7 +1754,8 @@ "findWhat": "Rechercher quoi", "descriptionOptional": "Description (facultative)", "invalidRegularExpressionX": "Expression régulière invalide : {0}", - "regularExpressionTooSlowX": "L'expression régulière a abandonné après {0} secondes ; la règle est ignorée, essayez un motif plus simple" + "regularExpressionTooSlowX": "L'expression régulière a abandonné après {0} secondes ; la règle est ignorée, essayez un motif plus simple", + "moveToCategory": "Passer à la catégorie" }, "find": { "searchTextWatermark": "Texte de recherche…", @@ -1692,7 +1835,22 @@ "mismatchWarning": "Ne ressemble pas à l'original - peut appartenir à une autre ligne", "engineError": "Impossible de joindre le moteur d'IA : {0}", "playCurrentLineHint": "Lire la ligne sélectionnée dans le lecteur vidéo et mettre en pause à la fin (ou double-cliquer sur une ligne)", - "editAfterHint": "Cliquer sur le texte de la ligne sélectionnée pour modifier le correctif avant de l'appliquer (\"Entrée\" fait les sauvegardes, \"Échapp\" les annules)" + "editAfterHint": "Cliquer sur le texte de la ligne sélectionnée pour modifier le correctif avant de l'appliquer (\"Entrée\" fait les sauvegardes, \"Échap\" les annules)", + "template": "Modèle", + "templatePlaceholder": "Choisiir un modèle pour remplacer l'invite", + "templateStandard": "Relecture standard", + "templateSpeechToText": "Nettoyage de la reconnaissance vocale (STT)", + "templateMachineTranslation": "Correction de la traduction automatique", + "templateSdh": "SDH / malentendant", + "referenceContext": "Contexte de référence", + "referenceContextInfo": "Facultatif.\r\nNoms, personnages, glossaire, synopsis ou notes de style - le modèle considère cela comme l'autorité pour les noms et les termes.\r\nEnvoyé avec chaque lot.", + "referenceContextPlaceholder": "Noms : Kaito, tante Mei, Dr Hollis\r\nTermes : Shinkansen, noyau de distorsion\r\nSynopsis : Kaito se rend à Tokyo pour retrouver son père disparu.", + "generateContext": "Générer avec l'IA", + "generateContextHint": "Laisser le moteur d'IA sélectionné lire les sous-titres et les projets de noms, les termes et un synopsis - vérifier le résultat avant utilisation", + "generatingContextPartXOfY": "Lecture de la partie {0} de {1}…", + "generatingContextSynopsis": "Rédaction du synopsis…", + "replaceContextQuestion": "Remplacer le contexte de référence actuel ?", + "noContextGenerated": "Le moteur d'IA n'a renvoyé aucune information de référence utilisable." }, "aiAssistant": { "title": "Assistant IA", @@ -1738,6 +1896,7 @@ "removeLineBreaksPixelWidth": "Afficher les sous-titres tenant sur une seule ligne (largeur en pixels)", "fixUppercaseIInsideLowercaseWords": "Corriger les 'i' majuscule à l'intérieur des mots minuscules (erreur OCR)", "fixDoubleApostrophes": "Corriger les doubles apostrophes (' ') en apostrophes guillemet simple (\")", + "fixMisreadQuotes": "Correction des apostrophes mal lues sous forme de guillemets doubles (OCR, anglais)", "addPeriods": "Ajouter un point après les lignes où la ligne suivante commence par une majuscule", "startWithUppercaseLetterAfterParagraph": "Commencer par une majuscule après un paragraphe", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Commencer par une majuscule après le point à l'intérieur d'un paragraphe.", @@ -1760,6 +1919,7 @@ "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Foo
bar ! -> Foo bar !", "fixDoubleApostrophesExample": "''Contient des guillemets-simples doubles'' -> \"Contient des guillemets-doubles simples\"", + "fixMisreadQuotesExample": "\"Bonjour' -> \"Bonjour\"", "addPeriodsExample": "Bonjour le monde -> Bonjour le monde.", "startWithUppercaseLetterAfterParagraphExample": "p1 : Foobar ! || p2 : foobar ! -> p1 : Foobar ! || p2 : Foobar !", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Bonjour ! comment allez-vous ? -> Bonjour ! Comment allez-vous ?", @@ -1849,6 +2009,8 @@ "fixMinDurationMs": "Fixer la durée minimale (ms)", "doNotGoPastShotChange": "Ne pas dépasser le changement de plan", "fixMaxDurationMs": "Fixer la durée maximale (ms)", + "fixMinDurationFrames": "Fixer la durée minimale (images)", + "fixMaxDurationFrames": "Fixer la durée maximale (images)", "minimumDurationMilliseconds": "Durée minimale (ms) :", "maximumDurationMilliseconds": "Durée maximale (ms) :", "maxDurationShouldBeHigherThanMinDuration": "La durée maximale doit être supérieure à la durée minimale", @@ -1910,6 +2072,20 @@ "isolateSpeechHint": "Supprime la musique et les effets sonores avant l'alignement, de sorte que l'aligneur n'entend que le dialogue.\r\nAide pour les lignes prononcées sur une musique forte ou une action, mais prend environ autant de temps que l'audio lui-même avec un GPU - et plusieurs fois plus longtemps sans un.", "isolatingSpeech": "Discours isolant… (cela prend du temps)", "isolateSpeechFailed": "Impossible d'isoler le discours - aligné à la place sur l'audio d'origine.", + "checkWithSpeechToText": "Vérifiez avec la synthèse vocale", + "checkWithSpeechToTextHint": "Transcrit également l'audio et vérifie chaque mouvement par rapport à l'endroit où les mots ont été réellement entendus.\r\nLes grands mouvements confirmés par le discours sont cochés pour vous, et les mouvements éloignés de l'endroit où une ligne est entendue sont laissés décochés pour que vous puissiez les vérifier.\r\nIndique également la part de chaque ligne qui a été entendue : une part faible signifie que le texte diffère de ce qui est dit.\r\nUn sous-titre qui est plus désynchronisé que le décalage maximum (un décalage constant, une dérive due à une inadéquation de fréquence d'images ou des sauts là où les scènes ont été coupées) est d'abord synchronisé par les mots entendus.\r\nUtilise Crisp ASR Parakeet, qui prend quelques minutes pour un long métrage avec GPU.", + "checkWithSpeechToTextNotAvailableX": "La vérification de la synthèse vocale n'est pas disponible pour {0}", + "transcribingToCheck": "Transcrire pour vérifier l'alignement…", + "speechToTextFailed": "La reconnaissance vocale a échoué : les horodatages n'ont pas été vérifiés.", + "speechToTextX": "Reconnaissance vocale : {0}", + "speechToTextConfirmedXDisputedY": "Discours : {0} confirmé, {1} contesté", + "hardlyHeardX": "La synthèse vocale n'a entendu que {0} % des mots du sous-titre.\r\nLe sous-titre est-il dans la langue parlée ?\r\nL'aligneur ne peut pas effectuer de translation.", + "heard": "Entendu", + "heardHint": "Quelle proportion de reconnaissance vocale a été entendue.\r\nUne part faible signifie que le texte diffère de ce qui est dit - là où l'aligneur est le plus susceptible de se tromper.", + "statusConfirmedBySpeech": "Confirmé par discours", + "statusDisputedBySpeech": "J'ai entendu où c'était", + "statusMovedWithSync": "Déplacé avec la synchronisation", + "syncedFirstXY": "Synchronisé en premier : {0} s au début, {1} s à la fin", "showSpeechOnly": "Afficher uniquement le discours", "showSpeechOnlyHint": "Dessinez la forme d'onde alignée à partir de l'audio en supprimant la musique et les effets sonores ;\r\nla forme d'onde originale reste telle quelle, à titre de comparaison.\r\nDisponible une fois la parole isolée - ici, ou avec \"Afficher la parole uniquement\" dans la forme d'onde de la fenêtre principale.", "align": "Aligner", @@ -1924,6 +2100,7 @@ "meanShiftX": "Décalage moyen : {0} ms", "toCheckX": "Pour vérifier : {0}", "largeMovesToCheckX": "{0} ligne(s) se déplaceraient très loin d'elles-mêmes et ne seraient pas cochées - jouez Original / Aligné et cochez celles qui sont correctes.", + "linesToCheckX": "{0} lignes sont non cochées pour vérification - écoutez-les (F5 lit la ligne alignée, Maj+F5 l'original) et cochez celles qui sont correctes.", "changeXOfY": "Modifier {0} sur {1}", "previousChange": "Changement précédent", "nextChange": "Prochain changement", @@ -1936,10 +2113,12 @@ "statusNoSpeech": "Pas de discours", "statusShiftTooLarge": "Conservé - décalage trop important", "statusFailed": "Conservé - l'aligneur a échoué", + "statusAdjustedByHand": "Ajusté à la main", + "alignedWaveformHint": "Faites glisser une ligne pour la déplacer ou faites glisser ses bords pour modifier son début ou sa fin.", + "playLine": "Ligne de lecture", + "undoAdjustment": "Annuler l'ajustement", "playPause": "Lecture/pause", - "playOriginal": "Original", "playAligned": "Aligné", - "playOriginalHint": "Jouer la ligne sélectionnée avec ses horodatages d'origine", "playAlignedHint": "Jouer la ligne sélectionnée avec ses horodatages alignés", "apply": "Appliquer", "applyHint": "Décocher une ligne pour conserver ses horodatages d'origine.\r\nDouble-cliquer sur une ligne pour la lire." @@ -2022,6 +2201,7 @@ "addColor": "Ajouter de la couleur", "deleteLinesWithSpecificActorsOrStyles": "Supprimer les lignes avec des acteurs ou des styles spécifiques (séparer les multiples par une virgule)", "useSourceStylesIfPossible": "Utiliser les styles source si possible", + "keepSourceEmbeddedFonts": "Conserver les polices sources intégrées (pied de page)", "editStyles": "Éditer les styles", "editProperties": "Éditer les propriétés", "editAttachments": "Éditer les pièces jointes", @@ -2056,6 +2236,18 @@ "addFolderRecursiveDotDotDot": "Ajouter un dossier récursif…", "selectFolderToConvert": "Sélectionner le dossier contenant les fichiers à convertir", "includeSubfolders": "Inclure les sous-dossiers lors de l'ajout d'un dossier", + "videoFilesWhenAddingFolder": "Fichiers vidéo (mkv, mp4, ts…) lors de l'ajout d'un dossier", + "videoFilesAsk": "Demander", + "videoFilesInclude": "Ajouter leurs pistes de sous-titres", + "videoFilesSkip": "Sauter", + "folderContainsXVideoFiles": "Le dossier contient {0} fichier(s) vidéo (mkv, mp4, ts…).\r\n\r\nAjouter également leurs pistes de sous-titres intégrées, ou uniquement les fichiers de sous-titres ?", + "addVideoFiles": "Ajouter des fichiers vidéo", + "skipVideoFiles": "Fichiers de sous-titres uniquement", + "doNotAskAgainVideoFiles": "Ne plus demander (modification des paramètres de conversion par lots)", + "settingsSectionOutput": "Sortir", + "settingsSectionAddingFiles": "Ajout de fichiers", + "settingsSectionImageBasedSubtitles": "Sous-titres basés sur des images (OCR)", + "settingsSectionOther": "Autre", "keepSourceFileTimestamp": "Conserver la date/heure du fichier source sur les fichiers de sortie", "preventSleepWhileConverting": "Empêcher l'ordinateur de dormir pendant la conversion", "scanningFolderX": "Analyse de {0}…", @@ -2071,7 +2263,20 @@ "transportStreamOnlyTeletext": "Uniquement le télétexte", "transportStreamGetSizeFromVideo": "Obtenez la taille de la vidéo…", "twoLetterLanguageCodeUppercase": "Code de langue à deux lettres (majuscules)", - "threeLetterLanguageCodeUppercase": "Code de langue à trois lettres (majuscules)" + "threeLetterLanguageCodeUppercase": "Code de langue à trois lettres (majuscules)", + "formatContainsDotDotDot": "Le format contient…", + "extensionIsDotDotDot": "La prolongation est…", + "statusIsError": "Le statut est en erreur", + "forcedTracksOnly": "Pistes forcées uniquement", + "xConvertedYFailedInZ": "{0:#,###,##0} conversion, {1:#,###,##0} a échoué dans {2}", + "xNotProcessed": "{0:#,###,##0} non traité", + "removeUnicodeControlCharactersTitle": "Supprimer les caractères de contrôle Unicode", + "removeUnicodeControlCharactersInfo": "Supprime les caractères de contrôle de direction Unicode invisibles (LRM, RLM, LRE, RLE, PDF, LRO et RLO) du texte et remplace les espaces insécables par des espaces normaux.", + "preset": "Préréglage", + "savePresetDotDotDot": "Enregistrer le préréglage…", + "deletePreset": "Supprimer le préréglage", + "presetName": "Nom du préréglage", + "deletePresetX": "Supprimer le préréglage \"{0}\" ?" }, "changeCasing": { "fixNames": "Corriger les noms", @@ -2156,11 +2361,13 @@ }, "mergeLinesWithSameText": { "maxMsBetweenLines": "Écart max. (ms) entre les lignes", + "maxFramesBetweenLines": "Nombre maximum d'images entre les lignes", "includeIncrementingLines": "Inclure les lignes avec un texte incrémentiel", "includeRollUpCaptions": "Inclure des sous-titres déroulants (défileants)" }, "mergeLinesWithSameTimeCodes": { "maxMsDifference": "Différence max. (ms)", + "maxFramesDifference": "Différence maximale (images)", "makeDialog": "Créer des dialogues" }, "netflixCheckAndFix": { @@ -2275,7 +2482,14 @@ "xInTopBar": "{0} dans la barre supérieure", "xInBottomBar": "{0} dans la barre inférieure", "noImageSubtitlesLoaded": "Aucun sous-titre d'image chargé", - "imageBasedFormatNotSupported": "Format de sous-titre basé sur une image introuvable/pris en charge." + "imageBasedFormatNotSupported": "Format de sous-titre basé sur une image introuvable/pris en charge.", + "frameRateDeclaredInFile": "Fréquence d'images déclarée dans le fichier Blu-ray sup", + "frameRateDetectedFromTimeCodesX": "Fréquence d'images détectée à partir des codes temporels Blu-ray sup (le fichier déclare {0})", + "frameRateFromVideo": "Fréquence d'images de la vidéo", + "frameRateCurrent": "Fréquence d'images actuelle", + "frameRateSetManually": "Fréquence d'images réglée manuellement", + "frameRateUsageInfo": "Les exportations Blu-ray sup, BDN XML, DOST et FCP sont écrites à cette fréquence d'images. Cela ne change pas à chaque fois - utilisez \"Modifier la fréquence d'images\" pour cela.", + "useVideoFrameRateXInsteadOfY": "La fréquence d'images de la vidéo est {0}, mais le sous-titre est défini sur {1}.\r\n\r\nUtiliser la fréquence d'images de la vidéo ({0}) ?" }, "removeTextForHearingImpaired": { "interjections": "Interjections", @@ -2285,7 +2499,7 @@ "curlyBrackets": "Accolades", "parentheses": "Parenthèses", "and": "et", - "onlySeparateLines": "Les lignes scindées uniquement ", + "onlySeparateLines": "Les lignes scindées uniquement", "removeTextBeforeColon": "Supprimer le texte avant les deux-points", "onlyIfTextIsUppercase": "Uniquement si le texte est en majuscules", "onlyOnSeparateLine": "Sur une ligne séparée uniquement", @@ -2305,6 +2519,7 @@ "pickFontNameInstalledFonts": "Polices installées", "pickFontNameCollectedFonts": "Polices collectées", "colorPickerTitle": "Choisir la couleur de police", + "colorPickerBrightness": "Luminosité", "filterLayersTitle": "Filtrer les calques à afficher", "filterLayersHideFromWaveform": "Masquer le calque de la forme d'onde/du spectrogramme", "filterLayersHideFromSubtitleGrid": "Masquer le calque de la grille des sous-titres", @@ -2355,7 +2570,21 @@ "correctWordsX": "Mots corrects : {0}", "namesX": "Noms : {0}", "addedToDictionaryX": "Ajoutés au dictionnaire : {0}", - "doNotShowThisAgain": "Ne plus afficher ce message" + "doNotShowThisAgain": "Ne plus afficher ce message", + "editUseAlwaysList": "Modifier la liste \"Toujours utiliser\"…", + "useAlwaysListTitle": "Vérification orthographique : liste \"Toujours utiliser\"", + "useAlwaysListHeader": "Liste \"Toujours utiliser\"", + "useAlwaysListDescription": "La vérification orthographique des mots est automatiquement remplacée, enregistrée par \"Tout modifier\" et \"Toujours utiliser\". Une paire n'est utilisée que lorsque le mot est mal orthographié.", + "useAlwaysWord": "Mot mal orthographié", + "xPairs": "{0:#,##0} paires", + "xUnusedPairs": "{0:#,##0} jamais utilisé", + "useAlwaysUnusedHint": "Jamais utilisé : ce mot est correctement orthographié (ou est un nom ou un mot utilisateur), donc la vérification orthographique ne le signale jamais", + "removeUnused": "Supprimer les inutilisés", + "useAlwaysEmpty": "Aucune paire \"Toujours utiliser\" pour cette langue pour l'instant", + "useAlwaysEmptyHint": "Les paires sont ajoutées lorsque vous cliquez sur \"Tout modifier\" ou \"Toujours utiliser\" dans la vérification orthographique.", + "useAlwaysNoMatch": "Aucune paire ne correspond à la recherche", + "useAlwaysSameWord": "Le remplacement doit être différent du mot.", + "useAlwaysRememberOff": "\"N'oubliez pas\", la liste \"Toujours utiliser\" est désactivé dans les paramètres, la vérification orthographique n'utilise pas cette liste ni ne l'enregistre." }, "video": { "burnIn": { @@ -2393,13 +2622,21 @@ "translateToEnglish": "Traduction en anglais", "transcribing": "Transcription…", "transcribingXOfY": "Transcription de {0} sur {1}…", + "linesTranscribedXOfYFailedZ": "{0} lignes sur {1} ont été transcrites ; {2} ont échoué ou n'avaient pas de parole.\r\n\r\nLes lignes échouées conservent leur texte actuel. Appliquer les lignes transcrites ou réessayer celles qui ont échoué (vous pouvez d'abord modifier le moteur ou les paramètres) ?", + "linesTranscribedXOfYCancelled": "La transcription a été annulée après {0} lignes sur {1}.\r\n\r\nAppliquer les lignes transcrites ? Les autres lignes conservent leur texte actuel.", + "noLinesTranscribed": "Aucune des lignes {0} n'a pu être transcrite.\r\nVeuillez consulter le journal des outils pour plus de détails.", + "applyTranscribedLines": "Appliquer la transcription", + "retryFailedLines": "La nouvelle tentative a échoué", "isolateSpeech": "Isoler la parole (lent)", "isolateSpeechHint": "Supprimer la musique et les effets sonores avant la transcription.\r\nDonne moins de lignes manquées et un meilleur timing sur l'audio avec de la musique forte, mais prend environ aussi longtemps que l'audio lui-même avec un GPU - et bien plus longtemps sans.", "isolatingSpeech": "Discours isolant…", "isolateSpeechFailed": "Impossible d'isoler le discours - transcrire l'audio original à la place.", "detectSpeakers": "Détecter les haut-parleurs", "detectSpeakersHint": "Commencer chaque ligne avec le haut-parleur, comme \"(haut-parleur 0)\", en utilisant la diarisation Sortformer de NVIDIA (jusqu'à 8 haut-parleurs).\r\nFonctionne mieux avec les backends qui divisent les lignes là où le haut-parleur change, comme Parakeet et Cohere.", - "detectSpeakersNeedsNewerCrispAsr": "\"Détecter les haut-parleurs\" nécessite Crisp ASR v{0} ou une version plus récente, mais v{1} est installé.\r\nMettez à jour Crisp ASR (le bouton d'engrenage à côté du moteur) ou désactivez « Détecter les haut-parleurs ».", + "detectSpeakersNeedsNewerCrispAsr": "\"Détecter les haut-parleurs\" nécessite Crisp ASR v{0} ou une version plus récente, mais v{1} est installé.\r\nMettez à jour Crisp ASR (le bouton d'engrenage à côté du moteur) ou désactivez \"Détecter les haut-parleurs\".", + "xNeedsNewerCrispAsr": "{0} a besoin de Crisp ASR v{1} ou plus récent, mais v{2} est installé.\r\n\r\nTélécharger et installer la mise à jour maintenant ?", + "vad": "VAD", + "vadHint": "Détection de l'activité vocale : seule la parole est retranscrite, coupée là où l'orateur fait une pause.\r\nAuto : Silero, et uniquement pour les moteurs qui en ont besoin (Cohere, Mega, Index-Echo).\r\nSilero, FireRedVAD, WebRTC : toujours activé, pour chaque moteur Crisp ASR. FireRedVAD est le plus précis.\r\nIndex-Echo utilise toujours Silero. --vad, --vad-model ou --chunk-seconds dans les paramètres avancés sont prioritaires.", "inputLanguage": "Langue d’entrée", "advancedWhisperSettings": "Paramètres Whisper avancés", "downloadingSpeechToTextEngine": "Téléchargement du moteur de reconnaissance vocale", @@ -2450,7 +2687,7 @@ "qualityReportAll": "Tous", "qualityReportIssue": "Problème", "qualityReportDetail": "Détail", - "qualityReportTip": "Les lignes sont répertoriées avec leurs numéros dans le nouveau sous-titre.\r\nUtiliser « Corriger les erreurs courantes » ou les paramètres de post-traitement pour corriger plus automatiquement, ou essayer un autre modèle/moteur si de nombreuses lignes sont affectées.", + "qualityReportTip": "Les lignes sont répertoriées avec leurs numéros dans le nouveau sous-titre.\r\nUtiliser \"Corriger les erreurs courantes\" ou les paramètres de post-traitement pour corriger plus automatiquement, ou essayer un autre modèle/moteur si de nombreuses lignes sont affectées.", "qualityReportDoNotShowAgain": "Ne plus afficher ce rapport", "engineSettings": "Paramètres du moteur parole vers texte", "engineSettingsSubtitle": "Moteur parole vers texte", @@ -2488,12 +2725,14 @@ "customServerUrl": "URL du serveur personnalisé", "customServerUrlHint": "Point de terminaison de parole complète d'un serveur compatible OpenAI, utilisé lorsque le fournisseur est \"Personnalisé\", par ex.\r\nhttp://localhost:8880/v1/audio/speech", "customModels": "Modèles personnalisés", - "customModelsHint": "Noms de modèles séparés par des virgules proposés lorsque le fournisseur est « Personnalisé »", + "customModelsHint": "Noms de modèles séparés par des virgules proposés lorsque le fournisseur est \"Personnalisé\"", "customVoices": "Voix personnalisées", "customVoicesHint": "Noms de voix séparés par des virgules, utilisés par le fournisseur « Personnalisé » et par les modèles OpenRouter qui ne publient aucune liste de voix", "instructions": "Instructions", "instructionsHint": "Style de parole facultatif, par ex.\r\n\"Parlez d'une voix calme et chaleureuse\".\r\nEnvoyé uniquement aux modèles qui le prennent en charge (pas tts-1/tts-1-hd)", "openAiSpeedHint": "Vitesse de parole de 0,25 à 4,0 (1,0 est normal).\r\nTous les modèles ne le prennent pas en charge", + "outputFormat": "Format de sortie", + "outputFormatHint": "Format audio demandé au serveur. \"Auto\" demande MP3 et passe en PCM pour les modèles qui ne renvoient que PCM (par exemple Gemini TTS)", "regenerateAudio": "Régénérer l'audio", "autoContinuePlaying": "Reprise automatique de la lecture", "playLine": "Ligne de jeu", @@ -2521,6 +2760,17 @@ "voiceManagerTitle": "TTS - Gestionnaire vocal", "voiceManagerDotDotDot": "Gestionnaire de voix…", "voiceManagerMenuItem": "Gestionnaire vocal TTS…", + "speakFromCurrentLineTitle": "Parler depuis la ligne actuelle", + "speakFromCurrentLineDotDotDot": "Parler depuis la ligne actuelle…", + "speakFromCurrentLineHint": "Lit les lignes à voix haute les unes après les autres, en commençant par la ligne actuelle. Appuyez sur \"Échap\" ou cliquez sur une autre ligne pour arrêter.", + "stopSpeaking": "Arrête de parler", + "speakingLineX": "Ligne parlante {0}… (\"Échap\" pour arrêter)", + "playWithSpeechTitle": "Jouer avec la parole", + "playWithSpeechDotDotDot": "Jouez avec la parole…", + "playWithSpeechHint": "Lit la vidéo et prononce chaque ligne lorsque la vidéo l'atteint. Faites une pause et cherchez comme d'habitude ; appuyez sur \"Échap\" pour arrêter.", + "lowerVideoVolumeWhileSpeaking": "Baisser le volume vidéo pendant que vous parlez", + "pauseVideoWhenSpeechRunsLate": "Mettre la vidéo en pause lorsque la parole passe à la ligne suivante", + "waitingForSpeechLineX": "Génération de la parole pour la ligne {0}… (\"Échap\" pour arrêter)", "voiceKindClone": "Voix clonée", "voiceKindPreset": "Intégré", "voiceKindModel": "Modèle de voix", @@ -2585,14 +2835,29 @@ "advancedTtsSettings": "Paramètres TTS avancés", "advancedTtsAudioProcessing": "Traitement audio", "advancedTtsOutput": "Sortir", + "advancedTtsVoiceCloning": "Clonage vocal", + "cleanCloneReferences": "Nettoyage des références de \"clone vocal\" (Sidon)", + "cleanCloneReferencesDescription": "Supprime la musique, le bruit et la réverbération de l'audio à partir duquel une voix est clonée : clips extraits de la vidéo et enregistrements importés dans le gestionnaire de voix. Utilise le modèle de restauration vocale Sidon sur audio.cpp (téléchargement de 940 Mo). La voix clonée ne copie plus l'arrière-plan, mais une parole très faible ou qui se chevauche peut paraître étouffée.", + "cleaningCloneReferencesDotDotDot": "Nettoyage des références de \"clone vocal\"…", + "downloadSidonTitle": "Télécharger Sidon ?", + "downloadSidonQuestionX": "Le nettoyage des références de clone vocal nécessite le modèle de restauration vocale Sidon ({0}).\r\n\r\nLe télécharger maintenant ? Sans cela, les références sont utilisées telles quelles.", "proAudioPostProcessing": "Post-traitement audio professionnel", "proAudioPostProcessingDescription": "Applique une égalisation chaleureuse, un noise gate, une compression, une normalisation du volume (-16 LUFS) et un fondu en entrée/sortie à chaque segment.", + "generatingSpeechSegmentXOfY": "Génération de parole : segment {0} sur {1}", + "adjustingSpeedSegmentXOfY": "Réglage de la vitesse : segment {0} sur {1}", + "mergingAudioSegmentXOfY": "Fusion audio : segment {0} sur {1}", + "postProcessingSegmentXOfY": "Post-traitement : segment {0} sur {1}", "audioDucking": "Atténuation du volume audio", "audioDuckingDescription": "Réduit le volume audio d'origine de la vidéo et le mélange avec l'audio TTS, de sorte que la bande-son originale reste légèrement audible.", "removeOriginalSpeech": "Supprimer le discours original (lent)", "removeOriginalSpeechDescription": "Conserve la musique et les effets sonores de la vidéo originale mais supprime son discours et mélange le nouveau discours par-dessus.\r\nCela prend environ autant de temps que la vidéo elle-même avec un GPU, et bien plus longtemps sans GPU.\r\nAvec l'atténuation audio activée, son volume s'applique à la musique et aux effets.\r\nS'applique uniquement lorsque le discours est ajouté au fichier vidéo.", "removingOriginalSpeech": "Suppression du discours original…", "removeOriginalSpeechFailed": "Impossible de supprimer le discours d'origine : le discours a été ajouté à la vidéo sans celui-ci.", + "speechRemovalModel": "Modèle", + "speechRemovalModelDescription": "La meilleure qualité permet de conserver le maximum de musique et d'effets sonores.\r\nRapide est environ trois fois plus rapide, avec un peu plus de musique perdue.", + "speechRemovalBestQuality": "Meilleure qualité (Mel-Band RoFormer)", + "speechRemovalFast": "Rapide (HTDemucs)", + "videoTruncatedWarning": "L'image du nouveau fichier vidéo s'arrête après {0}, mais la vidéo d'origine est longue de {1} : l'image se fige pendant que le son continue.\r\n\r\nLe dossier a été conservé. Voir error-log.txt dans le dossier de données Subtitle Edit pour la sortie ffmpeg.", "originalVolumePercent": "Volume original %", "vadSilenceCompression": "Compression des silences VAD", "vadSilenceCompressionDescription": "Réduit les pauses entre les mots avant les changements de rythme. Utilise la détection d'activité vocale pour compresser uniquement les silences, sans altérer la parole. C'est la première étape recommandée : elle réduit la durée sans perte de qualité.", @@ -2608,14 +2873,14 @@ "generationFolder": "Dossier de génération", "generationFolderDescription": "Dossier pour les clips audio générés lors d'une exécution en cours.\r\nLaisser vide pour utiliser le dossier temporaire du système.\r\nChaque exécution obtient son propre sous-dossier.", "deleteTempFiles": "Supprimer les clips générés à la fermeture", - "deleteTempFilesDescription": "Supprime le dossier de génération de l'exécution lorsque la fenêtre « Synthèse vocale » se ferme.\r\nLes fichiers audio et vidéo enregistrés ne sont pas affectés.\r\nDésactiver cette option pour conserver les clips individuels.", + "deleteTempFilesDescription": "Supprime le dossier de génération de l'exécution lorsque la fenêtre \"Synthèse vocale\" se ferme.\r\nLes fichiers audio et vidéo enregistrés ne sont pas affectés.\r\nDésactiver cette option pour conserver les clips individuels.", "edgeTtsRate": "Débit de synthèse vocale Edge-TTS", "edgeTtsRateDescription": "Débit de parole par défaut pour Edge-TTS, (p. ex. \"+50%\", \"-30%\" ou \"+0%\").", "edgeTtsPitch": "Hauteur de la voix Edge-TTS", "edgeTtsPitchDescription": "Réglage de la hauteur de la voix par défaut pour Edge-TTS, (p. ex. \"+10Hz\", \"-5Hz\" ou \"+0Hz\").", "edgeTtsVolume": "Volume de la synthèse vocale Edge-TTS", "edgeTtsVolumeDescription": "Réglage du volume de la synthèse vocale par défaut pour Edge-TTS, (p. ex. \"+20%\", \"-10%\" ou \"+0%\").", - "downloadPiperPrompt": "\"La synthèse vocale » nécessite Piper.\r\n\r\nTélécharger et utiliser Piper ?", + "downloadPiperPrompt": "\"La synthèse vocale\" nécessite Piper.\r\n\r\nTélécharger et utiliser Piper ?", "omniVoiceTtsSettings": "Paramètres OmniVoice TTS", "reDownloadOmniVoiceTts": "Retélécharger OmniVoice TTS", "selectTheBuildToDownload": "\r\nSélectionner la version à télécharger :", @@ -2655,7 +2920,7 @@ "skipNoiseLinesFoundX": "{0} lignes contiennent uniquement des sons ou de la musique ; les lignes cochées restent silencieuses", "skipNoiseLinesColumnSkip": "Sauter", "detectSpeakersPromptTitle": "Noms des intervenants trouvés dans le texte ?", - "detectSpeakersPromptMessage": "Certaines lignes commencent par le nom d'un locuteur, comme « MIKE : » ou « [NARRATEUR] ».\r\n\r\n\r\nDéplacé dans le champ des acteurs, chaque locuteur peut obtenir sa propre voix via « Configurer la distribution\", et le nom n'est pas lu à haute voix.\r\n\r\n\r\nRevoir les noms maintenant ?\r\n(seule la génération vocale est affectée - le sous-titre lui-même n'est pas modifié)", + "detectSpeakersPromptMessage": "Certaines lignes commencent par le nom d'un locuteur, comme « MIKE : » ou « [NARRATEUR] ».\r\n\r\n\r\nDéplacé dans le champ des acteurs, chaque locuteur peut obtenir sa propre voix via \"Configurer la distribution\", et le nom n'est pas lu à haute voix.\r\n\r\n\r\nRevoir les noms maintenant ?\r\n(seule la génération vocale est affectée - le sous-titre lui-même n'est pas modifié)", "detectSpeakersTitle": "Noms des intervenants dans le texte", "detectSpeakersFoundX": "{0} tags de locuteurs trouvés ({1} locuteurs) : les noms cochés deviennent des acteurs et ne sont pas lus à haute voix", "detectSpeakersColumnUse": "Utiliser", @@ -2675,7 +2940,9 @@ "timeCodeFormatColon": "Format de l'horodatage :", "shotChangesList": "Liste des modifications de plan", "shotChangesClearQuestion": "Êtes-vous sûr de vouloir effacer tous les changements de plan ?", - "deleteSelectedShotChangeQuestion": "Êtes-vous sûr de vouloir supprimer le changement de plan sélectionné ?" + "deleteSelectedShotChangeQuestion": "Êtes-vous sûr de vouloir supprimer le changement de plan sélectionné ?", + "shotChanges": "Changements de plan", + "exportShotChanges": "Exporter les modifications de prise de vue" }, "chapters": { "title": "Chapitres", @@ -2738,6 +3005,7 @@ "runningOcrXY": "Exécution de l'OCR… {0}/{1}", "noLinesFoundTitle": "Aucun sous-titre trouvé", "noLinesFoundMessage": "Aucun texte n'a été trouvé dans la zone d'analyse ; essayer d'ajuster la zone d'analyse, le moteur ou la luminosité minimale.", + "ocrStoppedEarlyMessage": "Le moteur OCR s'est arrêté avant que toutes les images aient été lues. Les lignes trouvées jusqu'à présent sont donc conservées et le reste est manquant.{0}{0}{1}", "linesFoundX": "{0} lignes trouvées", "refiningTimingXY": "Affiner le timing… {0}/{1}", "fixOcrErrors": "Corriger les erreurs OCR", @@ -2840,6 +3108,13 @@ "remuxVideoFailed": "Échec du remuxage de la vidéo.", "remuxVideoPleaseSelectBoth": "Veuillez sélectionner les fichiers vidéo et audio.", "remuxVideoAssRequiresMkv": "Les sous-titres ASS/SSA nécessitent le conteneur MKV pour conserver tous les formats et styles.", + "remuxVideoSccRequiresMov": "Les sous-titres \"Scenarist\" (.scc) sont intégrés sous forme de sous-titres codés CEA-608, qui nécessitent le conteneur MOV ou MPG. Le format de sortie a été automatiquement basculé vers .mov.", + "remuxVideoSccNotWithWebM": "Les sous-titres codés \"Scenarist\" (.scc) nécessitent le conteneur MOV, qui ne peut pas contenir la vidéo VP9/AV1 d'un fichier .webm. Supprimez le fichier .scc ou convertissez-le dans un autre format de sous-titres.", + "remuxVideoMpgMaxTwoCaptionTracks": "Un fichier .mpg contient au plus deux pistes de sous-titres (CC1 et CC3) - supprimez les fichiers de sous-titres pour qu'il en reste une ou deux.", + "remuxVideoMccRequiresMpg": "Les sous-titres \"MacCaption\" (.mcc) sont intégrés sous forme de sous-titres CEA-608/708 dans la vidéo MPEG-2, ce qui nécessite le conteneur MPG", + "remuxVideoMpgReencodeVideoX": "Les sous-titres codés dans un fichier .mpg nécessitent une vidéo MPEG-2 et la vidéo est {0}. Ré-encoder la vidéo en MPEG-2 ? Cela prend plus de temps et diminue un peu la qualité.", + "remuxVideoFileHasNoAudioX": "\"{0}\" n'a pas de piste audio, il ne peut donc pas être utilisé comme source audio.", + "remuxVideoAddingClosedCaptions": "Ajout de sous-titres codés…", "remuxVideoSelectAudioTrack": "Sélectionnez la piste audio", "remuxVideoSelectAudioTrackFor": "Sélectionnez la piste audio pour {0}", "remuxVideoSelectAudioTrackPrompt": "Le fichier '{0}' contient {1} pistes audio.\r\nVeuillez sélectionner la piste audio à remuxer :", @@ -2852,6 +3127,7 @@ "remuxVideoMixAudio": "Mélanger l'audio sur une seule piste", "remuxVideoVolumePercent": "Volume %:", "remuxVideoVolumeX": "Volume {0} %", + "remuxVideoFastStart": "Optimiser pour le streaming Web (déplacer l'index vers l'avant - plus lent)", "embedSubtitlesDotDotDot": "Ajouter/retirer des sous-titres embarqués et générer une vidéo…", "generateTimeCodes": "Générer les horodatages", "checkeredImage": "Image à damier", @@ -2925,7 +3201,7 @@ "ttsDownloadEngineTitle": "TTS - Télécharger le moteur", "indexTts25LicenseTitle": "IndexTTS 2.5 - licence du modèle", "indexTts25LicenseHeader": "Le modèle IndexTTS 2.5 dispose de sa propre licence", - "indexTts25LicenseIntro": "Le moteur audio.cpp est sous licence Apache-2.0, mais les poids du modèle IndexTTS 2.5 sont concédés sous licence par bilibili selon des conditions qui ne sont pas « open source ». Veuillez prendre connaissance des points principaux avant de procéder au téléchargement.", + "indexTts25LicenseIntro": "Le moteur audio.cpp est sous licence Apache-2.0, mais les poids du modèle IndexTTS 2.5 sont concédés sous licence par bilibili selon des conditions qui ne sont pas « Open source ». Veuillez prendre connaissance des points principaux avant de procéder au téléchargement.", "indexTts25LicenseReadFullText": "Lire le texte intégral de la licence", "indexTts25LicenseModelPage": "Page du modèle", "indexTts25LicenseAcceptCheckBox": "J'ai lu et j'accepte le contrat de licence d'utilisation du modèle bilibili", @@ -2951,6 +3227,10 @@ "reEncodeGeneratingDone": "Génération terminée", "reEncodeGeneratedFilesX": "Fichiers générés ({0}) :", "reEncodeFfmpegParameters": "Paramètres ffmpeg", + "analyzingVideoX": "Analyse de la vidéo… {0}% {1}", + "analyzingVideoXofY": "Analyse de la vidéo {0}/{1}… {2} % {3}", + "backgroundImageFileNotSelected": "Fichier image d'arrière-plan non sélectionné", + "backgroundImageFileDoesNotExistX": "Le fichier d'image d'arrière-plan n'existe pas : {0}", "voices": "Voix", "presets": "Préréglages", "talkerX": "Locuteur {0}", @@ -3031,7 +3311,8 @@ "syncPoints": "Points de synchronisation", "pointSync": "Synchronisation des points", "pointSyncViaOther": "Synchronisation des points via un autre sous-titre", - "syncPointCandidateInfo": "Les lignes commençant après {0}+ secondes de silence sont mises en surbrillance : elles constituent souvent des points de synchronisation fiables.", + "syncPointCandidateAfterInfo": "Les lignes suivies de {0}+ secondes de silence sont mises en surbrillance : elles constituent souvent des points de synchronisation fiables", + "gapAfter": "Écart après", "adjustAllShortcuts": "Raccourcis clavier :\r\n\r\n• Maj + Gauche/Droite : Déplacement de 10 ms\r\n• Ctrl + Gauche/Droite : Déplacement de 100 ms\r\n• Alt + Gauche/Droite : Déplacement de 500 ms", "adjustAllShortcutsFrames": "Raccourcis clavier :\r\n\r\n• Maj + Gauche/Droite : Déplacer d'une image\r\n• Ctrl + Gauche/Droite : Déplacer de 10 images\r\n• Alt + Gauche/Droite : Déplacer d'une seconde", "offsetInSeconds": "Décalage en secondes", @@ -3092,7 +3373,7 @@ "useOnlyExtraServerParametersHint": "Démarrez llama-server avec les paramètres ci-dessus au lieu du réglage propre de Subtitle Edit - seuls le modèle, l'hôte et le port resterons définis", "serverRunningAtX": "Serveur exécuté sur {0}", "customPromptHint": "Instructions personnalisées ({0} = langue source, {1} = langue cible) ; vide = invite intégrée", - "editTranslationHint": "Cliquer sur la traduction de la ligne sélectionnée pour la modifier (\"Entrée\" fait les sauvegardes, \"Échapp\" les annules)", + "editTranslationHint": "Cliquer sur la traduction de la ligne sélectionnée pour la modifier (\"Entrée\" fait les sauvegardes, \"Échap\" les annules)", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp nécessite le téléchargement du moteur llama-server et d'un modèle de traduction. Télécharger maintenant ?", "llamaCppDownloadEnginePrompt": "llama.cpp nécessite le téléchargement du moteur llama-server. Télécharger maintenant ?", "llamaCppDownloadModelPrompt": "llama.cpp nécessite le téléchargement du modèle de traduction sélectionné. Télécharger maintenant ?" @@ -3189,9 +3470,12 @@ "newEmptyDefaultMs": "Durée par défaut des nouveaux sous-titres (ms)", "timeCodeUpDownStepMs": "Incrément de modification de l'horodatage (ms)", "moveSelectedLinesStepMs": "Déplacer le raccourci des lignes sélectionnées (ms)", + "moveStartEndStepMs": "Déplacer l'étape de raccourci de début/fin (ms)", "moveLinesShortenNeighbor": "Déplacer les lignes : raccourcir la ligne précédente/suivante au lieu de la superposer", "promptBeforeDelete": "Demander confirmation avant suppression", "rememberPositionAndSize": "Mémoriser la position et la taille de la fenêtre", + "titleBarFullFileName": "Afficher le chemin complet du fichier dans la barre de titre", + "showRecentFiles": "Afficher les fichiers récents (pour la réouverture)", "openLastFileOnStart": "Ouvrir le dernier fichier récent au démarrage", "autoSave": "Enregistrement automatique (sauvegarder le fichier ouvert pendant l'édition)", "autoBackupOn": "Sauvegarde automatique activée", @@ -3218,6 +3502,8 @@ "waveformDrawGridLines": "Dessiner les lignes de la grille", "waveformUseSkiaRenderer": "Utiliser un moteur de rendu rapide expérimental", "waveformCenterVideoPositionAlsoWhenPaused": "Centrer la vidéo également en pause", + "waveformSelectCurrentSubtitleWhilePaused": "Sélectionnez également le sous-titre actuel en pause", + "waveformRememberZoom": "N'oubliez pas le zoom (horizontal et vertical)", "waveformShowToolbar": "Afficher la barre d'outils", "waveformShowToolbarEdit": "Éditer la barre d'outils…", "waveformShowToolbarEditLabel": "Éléments de la barre d'outils", @@ -3283,6 +3569,7 @@ "adjustAllTimesRememberLineSelectionChoice": "Ajuster tous les horodatages en mémorisant le choix de sélection de ligne", "mergeKeepEndTime": "Fusionner les lignes : conserver l'heure de fin (autoriser le chevauchement avec le sous-titre suivant)", "mergeKeepEndTimeOnlyAssa": "Fusionner les lignes : conserver l'heure de fin uniquement pour « Advanced Sub Station Alpha »", + "mergeAutoBreak": "Fusionner les lignes : texte fusionné avec saut automatique (désactivé pour conserver les propres sauts de ligne des lignes)", "filesAndLogs": "Fichiers et journaux", "showErrorLogFile": "Afficher le fichier journal des erreurs", "showToolsLogFile": "Afficher le fichier journal des outils", @@ -3291,6 +3578,7 @@ "showAssaLayer": "Afficher la boîte de dialogue des calques ASSA", "waveformCursorColor": "Couleur de la tête du curseur de lecture, de la forme d'onde", "waveformShotChangeColor": "Couleur de changement de prise de vue de la forme d'onde", + "waveformGridColor": "Couleur de la grille de forme d'onde", "waveformParagraphLeftColor": "Couleur de la bordure gauche de la forme d'onde", "waveformParagraphRightColor": "Couleur de la bordure droite de la forme d'onde", "waveformFancyHighColor": "Couleur haute de la forme d'onde fantaisie", @@ -3318,10 +3606,15 @@ "resetSyntaxColoring": "Réinitialiser la coloration syntaxique", "resetWaveform": "Réinitialiser la forme d'onde", "resetRules": "Réinitialiser les règles", - "useFrameMode": "Utiliser le mode image (hh.mm.ss.ff)", + "timeCodeMode": "Mode code temporel", + "timeCodeModeTime": "Heure (hh:mm:ss,zzz)", + "timeCodeModeFrames": "Cadres (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "Numéros de cadre", + "frameModeSnapToVideoFrames": "Enregistrer les temps sur les images de la vidéo (et non sur les images de chaque seconde)", "textBoxLimitNewLines": "Limiter le nombre de lignes dans la zone de texte du sous-titre", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - Rendu logiciel (lent)", + "mpvMetalRendering": "libmpv - Metal (expérimental, doit être redémarré)", "mpvWidRendering": "libmpv - Rendu par ID de fenêtre natif", "waveFormsAndSpectrogramFoldersContainsX": "Les dossiers « Waveforms » et « Spectrogram » contiennent {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "Supprimer les fichiers « Waveforms » et « Spectrogram » ?", @@ -3395,6 +3688,7 @@ "useFocusedButtonBackgroundColor": "Utiliser la couleur d'arrière-plan du bouton actif", "focusedButtonBackgroundColor": "Couleur d'arrière-plan du bouton actif", "forceCrLfOnSave": "Forcer CR+LF à la sauvegarde (fichiers de sous-titre texte)", + "linuxClipboardUseExternalTool": "Copier le texte via xclip/wl-copy (conserve les caractères accentués)", "showFormatLimitWarning": "Avertir lors de l'enregistrement lorsque les lignes dépassent les limites du format (par exemple SCC 32 caractères/ligne)", "textBoxButtonShowAutoBreak": "Zone de texte : afficher le bouton « Césure automatique »", "textBoxButtonShowUnbreak": "Zone de texte : afficher le bouton « Retour au texte »", @@ -3407,12 +3701,17 @@ "allSettings": "Tous les paramètres", "uiScale": "Échelle de l’interface utilisateur (%)", "fontScale": "Échelle de police (%)", + "textSelectionOpacity": "Opacité de la sélection du texte (%)", "waveformToolbarItems": "Éléments de la barre d’outils « Forme d'onde »", "matchIconColorToDarkTheme": "Adapter la couleur des icônes à la couleur de premier plan du thème sombre", "subtitlePreviewProperties": "Propriétés de l’aperçu des sous-titres", "usePositionFromSubtitleFile": "Utiliser la position du fichier de sous-titres (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "La marge fait partie de la zone de sous-titres", "textJustify": "Justifier les lignes", + "deinterlace": "Vidéo désentrelacée", + "deinterlaceOff": "Désactivé", + "deinterlaceAuto": "Auto (images entrelacées uniquement)", + "deinterlaceAlways": "Toujours", "pixelWidthInfo": "Lignes vertes = limite de largeur maximale | Zone rouge = texte dépassant la limite", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3441,11 +3740,34 @@ "categoryVideo": "Vidéo", "categorySync": "Synchronisation", "categoryAi": "IA", + "categoryCustom": "Personnalisé", + "editCustomShortcut": "Modifier le raccourci personnalisé", + "customShortcutTextBoxKeyHint": "Utilisez une touche avec Ctrl/Alt ici - une touche simple ne serait plus saisie dans la zone de texte.", + "customShortcutNumberX": "Raccourci personnalisé n° {0}", + "customShortcutNumberXY": "Raccourci personnalisé n° {0} : {1}", + "customShortcutStep": "Étape", + "customShortcutSteps": "Étapes", + "customShortcutStepRunCommand": "Exécuter la commande", + "customShortcutStepInsertText": "Insérer du texte", + "customShortcutStepReplace": "Rechercher et remplacer", + "customShortcutInsertAtCursor": "Au curseur", + "customShortcutInsertAtStart": "Au début du texte", + "customShortcutInsertAtEnd": "À la fin du texte", + "customShortcutSummaryRunCommandX": "Exécuter : {0}", + "customShortcutSummaryInsertXY": "Insérer \"{0}\" ({1})", + "customShortcutSummaryReplaceXY": "Remplacer \"{0}\" par \"{1}\"", + "customShortcutSummaryReplaceRegexXY": "Remplacer l'expression régulière \"{0}\" par \"{1}\"", + "customShortcutPickCommand": "Veuillez sélectionner une commande à exécuter.", + "customShortcutEnterText": "Veuillez saisir le texte à insérer.", + "customShortcutEnterFind": "Veuillez saisir le texte pour trouver.", + "customShortcutInvalidRegexX": "Expression régulière non valide : {0}", + "customShortcutStepsHint": "Les marches vont de haut en bas. Les étapes de texte fonctionnent sur les lignes sélectionnées ; les commandes qui ouvrent une fenêtre continuent après sa fermeture.", "activeIn": "Actif dans", "activeInEverywhere": "Partout", "generalMergeSelectedLinesAndUnbreak": "Fusionner les lignes sélectionnées et rétablir la ligne", "generalMergeSelectedLinesAndUnbreakCjk": "Fusionner les lignes sélectionnées et supprimer le saut de ligne sans espace (CJK)", "generalUnbreakNoSpaceCjk": "Supprimer le saut de ligne sans espace(CJK)", + "generalToggleBreak": "Basculer pause/déconnexion", "generalMergeSelectedLinesBilingual": "Fusionner les lignes sélectionnées bilingues", "generalToggleTranslationMode": "Activer/désactiver le mode traduction", "generalToggleTranslationAndOriginalInPreviews": "Basculer la traduction et l'original dans l'aperçu vidéo/audio", @@ -3467,6 +3789,7 @@ "fileOpenKeepVideo": "Ouvrir (conserver la vidéo)", "fileSave": "Enregistrer", "fileSaveAs": "Enregistrer sous", + "fileSaveOriginal": "Enregistrer l'original", "fileCompare": "Comparer", "fileStatistics": "Statistiques", "fileImportPlainText": "Importer le texte brut", @@ -3487,6 +3810,7 @@ "detectKey": "Détecter la touche", "control": "Ctrl", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Maj", "controlMac": "⌃", @@ -3497,6 +3821,11 @@ "resetShortcutsDetail": "Voulez-vous réinitialiser tous les raccourcis à leurs valeurs par défaut ?", "togglePlayPause": "Lecture/pause", "toggleLockTimeCodes": "Verrouiller/déverrouiller les horodatages", + "toggleTimeCodeMode": "Basculer le mode time code (heure/images/numéros d'images)", + "toggleScreenPrivacy": "Activer/désactiver la confidentialité de l'écran (masquer les noms de fichiers, puis également les textes)", + "screenPrivacyFileNamesHidden": "Confidentialité de l'écran : noms de fichiers masqués", + "screenPrivacyFileNamesAndTextsHidden": "Confidentialité de l'écran : noms de fichiers et textes masqués", + "screenPrivacyOff": "Confidentialité de l'écran : désactivée", "duplicateSelectedLines": "Dupliquer les lignes sélectionnées", "sourceView": "Afficher l'icône « Vue source »", "addOrEditBookmark": "Ajouter ou modifier un signet", @@ -3545,6 +3874,7 @@ "listViewColumnTextUp": "Colonne, remonter le texte", "listViewColumnTextDown": "Colonne, descendre le texte", "autoTranslateSelectedLines": "Traduction automatique des lignes sélectionnées…", + "autoTranslateSelectedLinesNoPrompt": "Traduire automatiquement les lignes sélectionnées (pas d'invite, utiliser le dernier moteur/langues)", "setAssaResolution": "Définir la résolution ASSA (PlayResX/PlayResY)", "setShortcutForX": "Raccourci pour \"{0}\"", "commandFileNewKeepVideo": "Nouveau (conserver la vidéo)", @@ -3625,6 +3955,14 @@ "surroundWith": "Entourer avec…", "surroundWithXY": "Entourer avec {0}/{1}", "surroundWithNumberX": "Entourer de #{0}", + "surroundWithBehavior": "Comportement", + "surroundWithBehaviorToggle": "Basculer (ajouter ou supprimer si présent)", + "surroundWithBehaviorAdd": "Ajouter (à chaque fois)", + "surroundWithBehaviorRemove": "Supprimer (tout)", + "surroundWithBehaviorRemoveOnce": "Supprimer (un à chaque fois)", + "surroundWithWorksOn": "Fonctionne sur", + "surroundWithScopeSelectionOrText": "Sélection, sinon texte entier", + "surroundWithScopeEachLine": "Chaque ligne", "searchVia": "Rechercher via", "searchViaX": "Rechercher via {0}", "searchViaNumberX": "Rechercher via #{0}", @@ -3652,6 +3990,11 @@ "copySubtitlePathToClipboard": "Copier le chemin du sous-titre dans le presse-papiers", "copySubtitleOriginalPathToClipboard": "Copier le chemin du sous-titre original dans le presse-papiers", "focusTextBox": "Zone de texte de sélection", + "focusSubtitleListView": "Vue de la liste des sous-titres Focus", + "focusWaveform": "Forme d'onde de mise au point", + "focusOriginalTextBox": "Focus sur la zone de texte d'origine", + "textBoxGoToStart": "Zone de texte, aller au début", + "textBoxGoToEnd": "Zone de texte, aller à la fin", "sortByNumber": "Trier par numéro", "sortByStartTime": "Heure de départ", "sortByEndTime": "Heure de fin", @@ -3691,6 +4034,7 @@ "googleIt": "Recherche Google (texte sélectionné)", "setActorX": "Définir l'acteur : {0}", "setNewActor": "Définir un nouvel acteur…", + "setStyleX": "Définir le style : {0}", "toggleDialogDashes": "Basculer les tirets de dialogue", "mergeWithLineBeforeAsDialog": "Joindre à la ligne précédente comme dialogue", "mergeWithLineAfterAsDialog": "Joindre à la ligne suivante comme dialogue", @@ -3702,6 +4046,10 @@ "moveStartOneFrameForwardKeepGapPrev": "Avancer le début d'une image (garder l'écart au précédent s'il est proche)", "moveEndOneFrameBackKeepGapNext": "Reculer la fin d'une image (garder l'écart au suivant s'il est proche)", "moveEndOneFrameForwardKeepGapNext": "Avancer la fin d'une image (garder l'écart au suivant s'il est proche)", + "moveStartXMsBack": "Reculer le début de X ms (X défini dans Paramètres, également dans Visual Sync)", + "moveStartXMsForward": "Avancer le début de X ms (X défini dans Paramètres, également dans Visual Sync)", + "moveEndXMsBack": "Reculer la fin de X ms (X défini dans Paramètres, également dans Visual Sync)", + "moveEndXMsForward": "Avancer la fin de X ms (X défini dans Paramètres, également dans Visual Sync)", "moveSelectedLinesXMsBack": "Déplacer les lignes sélectionnées de X ms en arrière (X défini dans Paramètres)", "moveSelectedLinesXMsForward": "Avancer les lignes sélectionnées de X ms (X défini dans Paramètres)", "moveSelectedLinesAndForwardXMsBack": "Déplacer les lignes sélectionnées et toutes les X ms suivantes en arrière (X défini dans Paramètres)", @@ -3807,7 +4155,7 @@ "drawMode": "Mode de dessin :", "addNewCharcter": "Ajouter un nouveau caractère", "addNOcrCharacterTitle": "Ajouter le caractère nOCR pour la ligne {0}, le caractère {1} de {2} en utilisant la base de données \"{3}", - "addBinaryOcrCharacterTitle": "Ajouter un caractère OCR binaire pour la ligne {0}, le caractère {1} de {2} à l'aide de la base de données \"{3}", + "addBinaryOcrCharacterTitle": "Ajouter un caractère OCR binaire pour la ligne {0}, le caractère {1} de {2} à l'aide de la base de données \"{3}\"", "lineIndexX": "Ligne {0}", "inspectNOcrAdditions": "Inspecter les nouveaux ajouts nOCR", "ocrSelectedLines": "Lignes sélectionnées OCR", @@ -3856,6 +4204,8 @@ "binaryImageCompareInspectImageMatches": "Comparaison d'images binaires - Inspection des correspondances d'images", "saveBlankTextTitle": "Enregistrer le texte vide ?", "saveBlankTextPrompt": "Enregistrer le texte vide pour l'image ?", + "drawnLinesDoNotMatchTitle": "Les lignes ne correspondent pas à l'image", + "drawnLinesDoNotMatchPrompt": "Certaines des lignes tracées ne correspondent pas à l'image (les lignes vertes doivent être sur le caractère, les lignes rouges doivent être en dehors), ce caractère ne sera donc pas reconnu.\r\n\r\nEnregistrer quand même ?", "yesAndNeverAskAgain": "Oui, et ne plus jamais poser la question", "importTextFromSubtitleDotDotDot": "Importer le texte du sous-titre", "importTextFromSubtitleOverwritePrompt": "Certaines lignes contiennent déjà du texte OCR. Voulez-vous écraser le texte existant ?", @@ -3914,9 +4264,26 @@ "crispEmbedSettingsTitle": "Paramètres CrispEmbed", "crispEmbedDescription": "Moteur OCR local avec plusieurs backends de modèles - téléchargez le moteur et les modèles ici.", "trainNOcrDatabase": "Entraîner la base de données nOCR…", + "optimizeNOcrDatabase": "Optimiser la base de données nOCR…", + "optimizeNOcrDatabaseQuestionXY": "Supprimer les lignes qui ne distinguent pas les caractères des caractères similaires dans la base de données nOCR « {0} » ?\r\nCela rend la base de données plus petite et l'OCR plus rapide, généralement avec moins d'erreurs.\r\nCela prend jusqu'à une minute.\r\nUne sauvegarde est enregistrée sous \"{1}\".", + "optimizingNOcrDatabaseXY": "Optimisation de la base de données nOCR… {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "Base de données nOCR \"{0}\" optimisée : {1:#,##0} -> {2:#,##0} lignes.", "startTraining": "Lancer l'entraînement", "abortTraining": "Arrêter l'entraînement", "trainingOptions": "Options d'entraînement", + "trainNOcrSubtitle": "Restitue les caractères dans les polices installées et apprend à nOCR leurs formes.\r\nChoisissez les polices utilisées par vos sous-titres.", + "xFontsSelected": "{0:#,##0} sélectionné", + "subtitleFonts": "Polices des sous-titres", + "emptyDatabase": "Base de données vide", + "startFromDatabase": "Partir de", + "startFromDatabaseHint": "Ajouter les caractères entraînés à une copie d'une base de données existante (recommandé) ou partir d'une base vide", + "fontSizes": "Tailles de police", + "fontSizesHint": "Tailles de police en pixels pour le rendu, séparées par des virgules, par ex. \"30, 40\"", + "numberOfLineSegmentsHint": "Lignes vérifiées par caractère - plus il y en a, plus c'est strict mais lent", + "enterDatabaseName": "Saisissez un nom pour la base de données", + "trainingFontXSizeYCharacterZ": "Entraînement de \"{0}\" à {1} px : {2}", + "xLearned": "{0:#,##0} appris", + "xSkipped": "{0:#,##0} ignorés", "charactersToTrain": "Caractères à entraîner", "letterCombinationsToTrain": "Combinaisons de lettres pouvant être scindées en une seule image", "importCharactersFromSubtitleFile": "Importer des caractères depuis un fichier de sous-titres…", @@ -3943,13 +4310,90 @@ "drawZoomOut": "Zoom arrière (Ctrl+-)", "drawResetView": "Réinitialiser la vue (Ctrl+0)", "drawToggleGrid": "Afficher/Masquer la grille (Ctrl+G)", + "drawTogglePreview": "Afficher/Masquer l'aperçu (F9)", + "drawPreviewFailed": "Échec de l'aperçu - ffmpeg avec libass (filtre subtitles) est requis", "drawCopyToClipboard": "Copier dans le presse-papiers (Ctrl+C)", "drawShapes": "Formes", "drawSelectedPoint": "Point sélectionné", "drawSelectedShape": "Forme sélectionnée", "drawSelectedLayer": "Calque sélectionné", "drawToolX": "Outil : {0}", - "drawHelpText": "Cliquer pour ajouter des points • Entrée/F8 pour fermer la forme • Maj+Glisser pour se déplacer • Ctrl+Molette pour zoomer", + "drawHelpText": "Cliquer pour ajouter des points • F8/Entrée pour fermer la forme • Maj+Glisser pour se déplacer • Ctrl+Molette pour zoomer", + "drawMoveToLayer": "Déplacer vers le calque", + "drawFlipHorizontal": "Retourner horizontalement", + "drawFlipVertical": "Retourner verticalement", + "drawHideShape": "Masquer la forme", + "drawShowShape": "Afficher la forme", + "drawHideLayer": "Masquer le calque", + "drawShowLayer": "Afficher le calque", + "drawDeleteLayer": "Supprimer le calque", + "drawDeletePoint": "Supprimer le point", + "drawCancelDrawing": "Annuler le dessin", + "drawLayerX": "Calque {0}", + "drawImportSvg": "Importer une image SVG…", + "drawRotateClockwise": "Rotation de 90° dans le sens horaire", + "drawConvertToCurve": "Convertir le segment en courbe", + "drawBackground": "Arrière-plan", + "drawPosition": "Position", + "drawZoom": "Zoom", + "drawShapeTool": "Outil forme", + "drawColorPickerTool": "Prélever une couleur sur une forme ou l'arrière-plan", + "drawShapeLibrary": "Bibliothèque de formes", + "drawShapeLibraryHint": "Faites glisser sur le canevas pour placer une forme, ou cliquez pour la taille par défaut. Maj conserve ses proportions.", + "drawAddToLibrary": "Ajouter à la bibliothèque de formes…", + "drawRemoveFromLibrary": "Retirer de la bibliothèque de formes", + "drawShapeName": "Nom de la forme", + "drawCategorySpeechBubbles": "Bulles de dialogue", + "drawCategoryArrows": "Flèches", + "drawCategoryBasicShapes": "Formes de base", + "drawCategorySymbols": "Symboles", + "drawCategoryMyShapes": "Mes formes", + "drawShapeSpeechBubble": "Bulle de dialogue", + "drawShapeSpeechBubbleRight": "Bulle de dialogue, pointe à droite", + "drawShapeSpeechBubbleUp": "Bulle de dialogue, pointe vers le haut", + "drawShapeOvalBubble": "Bulle de dialogue ovale", + "drawShapeBoxBubble": "Bulle de dialogue rectangulaire", + "drawShapeThoughtBubble": "Bulle de pensée", + "drawShapeShoutBubble": "Bulle de cri", + "drawShapeCaptionBox": "Cartouche", + "drawShapeArrow": "Flèche", + "drawShapeDoubleArrow": "Double flèche", + "drawShapeChevron": "Chevron", + "drawShapeCurvedArrow": "Flèche courbe", + "drawShapeRoundedRectangle": "Rectangle arrondi", + "drawShapeTriangle": "Triangle", + "drawShapeDiamond": "Losange", + "drawShapePentagon": "Pentagone", + "drawShapeHexagon": "Hexagone", + "drawShapeOctagon": "Octogone", + "drawShapeStar": "Étoile", + "drawShapeRing": "Anneau", + "drawShapePlus": "Plus", + "drawShapeBanner": "Bannière", + "drawShapeHeart": "Cœur", + "drawShapeCheck": "Coche", + "drawShapeMusicNote": "Note de musique", + "drawShapeMusicNotes": "Notes de musique", + "drawShapeLightning": "Éclair", + "drawShapeCloud": "Nuage", + "drawShapeMoon": "Lune", + "drawShapeBadge": "Badge", + "drawSize": "Taille", + "drawLayer": "Calque", + "drawBackgroundVideoFrame": "Image vidéo (position actuelle)", + "drawBackgroundVideoFrameAt": "Image vidéo à…", + "drawBackgroundImage": "Fichier image…", + "drawBackgroundNone": "Aucun arrière-plan", + "drawBackgroundStretch": "Étirer l'image au canevas", + "drawBackgroundOpacity": "Opacité de l'arrière-plan", + "drawBackgroundVideoFrameFailed": "Impossible d'obtenir une image vidéo à {0}.", + "drawImages": "Images", + "drawConvertToLine": "Convertir le segment en ligne", + "drawConvertShapeToCurves": "Convertir toutes les lignes en courbes", + "drawConvertShapeToLines": "Convertir toutes les courbes en lignes", + "drawRotateCounterClockwise": "Rotation de 90° dans le sens antihoraire", + "drawSvgImages": "Images SVG", + "drawSvgNoShapes": "Aucune forme remplie ni aucun contour trouvé dans le fichier SVG.", "progressBarTitle": "Barre de progression ASSA", "progressBarSettings": "Barre de progression", "mouseOverColor": "Couleur au survol", @@ -4046,13 +4490,26 @@ "graphics": "Graphismes", "copyToStorageStyles": "Copier les styles de stockage", "copyToFileStyles": "Copier les styles de fichier", + "styleXAlreadyExistsInStorage": "Un style nommé \"{0}\" existe déjà dans le stockage.\r\n\r\nL'écraser ou conserver les deux (la copie reçoit un nouveau nom) ?", + "styleXAlreadyExistsInFile": "Un style nommé \"{0}\" existe déjà dans le fichier.\r\n\r\nL'écraser ou conserver les deux (la copie reçoit un nouveau nom) ?", + "styleNameCannotBeEmpty": "Un nom de style ne peut pas être vide.", + "styleNameXIsUsedMoreThanOnce": "Le nom de style « {0} » est utilisé par plusieurs styles dans le fichier.", + "overwrite": "Écraser", + "keepBoth": "Gardez les deux", + "doThisForAllConflictingStyles": "Faites ceci pour tous les styles contradictoires", "setStyleAsDefault": "Définir le style par défaut", "takeUsagesFromDotDotDot": "Récupérer les utilisations de…", "replaceStyleWithDotDotDot": "Remplacer le style avec…", "noAttachmentsFound": "Aucune pièce jointe trouvée dans le fichier ASSA sélectionné.", "deleteStyleQuestion": "Supprimer le style ?", "deleteStylesQuestion": "Supprimer les styles ?", + "deleteXStylesQuestion": "Voulez-vous supprimer {0} styles ?", + "deleteXStylesFromStorageQuestion": "Voulez-vous supprimer {0} styles du stockage ?", + "deleteStyleXFromStorageQuestion": "Voulez-vous supprimer le style « {0} » du stockage ?", + "deleteStyleXFromFileQuestion": "Voulez-vous supprimer le style « {0} » du fichier actuel ?", "openStyleImportFile": "Ouvrir le fichier de sous-titres pour importer les styles", + "styleImportFiles": "Fichiers de style (.ass, .sty, Subtitle Edit 4 catégories .template)", + "ssaStyleImportFiles": "Fichiers de styles (.ssa, .ass, .sty)", "primary": "Primaire", "secondary": "Secondaire", "applyOverrideTags": "Appliquer les balises de remplacement", diff --git a/src/ui/Assets/Languages/German.json b/src/ui/Assets/Languages/German.json index 7d0c93748fa..539dd114398 100644 --- a/src/ui/Assets/Languages/German.json +++ b/src/ui/Assets/Languages/German.json @@ -1,9 +1,46 @@ { "title": "Subtitle Edit", - "version": "v5.3.0-beta23", + "version": "v5.3.0", "translatedBy": "Übersetzt von Christoph Kitsche. Überarbeitet von Netspark, Stephan Lenhart und FunkyKnilch.", "cultureName": "de-DE", "general": { + "temperature": "Temperatur", + "preset": "Voreinstellung", + "output": "Ausgabe", + "outputFormat": "Ausgabeformat", + "other": "Sonstiges", + "timeCodeFormat": "Zeitstempelformat", + "topBottomMargin": "Oberer/unterer Rand", + "theme": "Design", + "brightness": "Helligkeit", + "chooseColor": "Farbe wählen", + "lineX": "Zeile {0}", + "playLine": "Zeile abspielen", + "maxLineLength": "Max. Zeilenlänge", + "maxCharsPerSec": "Max. Zeichen/Sek.", + "maxNumberOfLines": "Max. Zeilenanzahl", + "subtitles": "Untertitel", + "shotChanges": "Szenenwechsel", + "chapters": "Kapitel", + "interjections": "Interjektionen", + "blankLines": "Leere Zeilen", + "editWholeText": "Gesamten Text bearbeiten", + "noTextInClipboard": "Kein Text in der Zwischenablage", + "noSubtitlesFoundTitle": "Keine Untertitel gefunden", + "replacedXOccurrences": "{0} Ersetzungen vorgenommen", + "invalidRegularExpressionX": "Ungültiger regulärer Ausdruck: {0}", + "discardChangesTitle": "Änderungen verwerfen?", + "downloadingXDotDotDot": "{0} wird heruntergeladen...", + "importTimeCodesDotDotDot": "Zeitstempel importieren...", + "nextChange": "Nächste Änderung", + "previousChange": "Vorherige Änderung", + "changeXOfY": "Änderung {0} von {1}", + "tooLong": "Zu lang", + "tooShort": "Zu kurz", + "overlapping": "Überlappend", + "fixOcrErrors": "OCR-Fehler korrigieren", + "runningOcrXY": "OCR wird ausgeführt... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp erfordert das Herunterladen der llama-server-Engine. Jetzt herunterladen?", "abort": "Abbrechen", "actor": "Darsteller", "actors": "Darsteller", @@ -31,7 +68,7 @@ "addToUserDictionary": "Zum Benutzerwörterbuch hinzufügen", "addVideoFiles": "Videodateien hinzufügen...", "adjustAlpha": "Alpha (Transparenz) anpassen", - "adjustDisplayDuration": "Längen anpassen", + "adjustDisplayDuration": "Dauer anpassen", "adjustment": "Anpassung", "advancedSettings": "Erweiterte Einstellungen", "after": "Nachher", @@ -73,7 +110,7 @@ "background": "Hintergrund", "backgroundColor": "Hintergrundfarbe", "backward": "Rückwärts", - "batchMode": "Stapelverarbeitungsmodus", + "batchMode": "Stapelverarbeitung", "bdnXml": "BDN/xml", "bdnXml8Bit": "BDN/xml 8-bit", "before": "Vorher", @@ -116,7 +153,7 @@ "changeFrameRate": "Bildrate ändern", "changeOnce": "Einmal ändern", "changeSpeed": "Geschwindigkeit ändern", - "character": "Charakter", + "character": "Zeichen", "characters": "Zeichen", "charsPerSec": "Zeichen/Sek.", "chooseColorDotDotDot": "Farbe wählen...", @@ -203,7 +240,7 @@ "pleaseRestartSeToUseTheNewLibmpv": "Bitte starten Sie SE neu, um das neue libmpv zu verwenden.", "pickVobSubLanguageTitle": "VobSub-Sprache wählen - {0}", "duplicate": "Duplizieren", - "duration": "Länge", + "duration": "Dauer", "durationMinutes": "Dauer in Minuten", "edit": "Bearbeiten", "editDotDotDot": "Bearbeiten...", @@ -349,14 +386,15 @@ "mergeAfter": "Mit folgenden Text verbinden", "mergeBefore": "Mit vorherigen Text verbinden", "mergeLines": "Zeilen zusammenführen", - "mergeLinesWithSameText": "Zeilen mit gleichen Text verbinden", - "mergeLinesWithSameTimeCodes": "Zeilen mit gleichen Zeitstempel verbinden", + "mergeLinesWithSameText": "Zeilen mit gleichem Text verbinden", + "mergeLinesWithSameTimeCodes": "Zeilen mit gleichem Zeitstempel verbinden", "mergeSelected": "Ausgewählte Texte verbinden", "mergeSelectedAsDialog": "Ausgewählte Texte als Dialog verbinden", "mergeSelectedLines": "Ausgewählte Texte verbinden", "mergeSelectedLinesDialog": "Ausgewählte Texte als Dialog verbinden", "mergeWithLineAfterAndAutoBreak": "Mit nächster Zeile zusammenführen und automatisch umbrechen", "mergeWithLineAfterKeepBreaks": "Mit Zeile danach zusammenführen (Umbrüche beibehalten)", + "mergeWithLineAfterAndUnbreak": "Mit nächster Zeile verbinden und Zeilenumbruch entfernen", "mergeWithLineBeforeAndAutoBreak": "Mit vorherigem zusammenführen und automatisch umbrechen", "mergeWithLineBeforeKeepBreaks": "Mit Zeile davor zusammenführen (Umbrüche beibehalten)", "middleCenter": "Mitte-Zentriert", @@ -371,6 +409,8 @@ "moveAllShotChangeOneFrameForward": "Alle Szenenwechsel ein Frame vorwärts verschieben", "multiMode": "Multi-Modus", "moveDown": "Nach unten", + "increase": "Erhöhen", + "decrease": "Verringern", "moveUp": "Nach oben", "moveToTop": "Nach ganz oben verschieben", "moveToBottom": "Nach ganz unten verschieben", @@ -440,6 +480,7 @@ "percent": "Prozent", "pickLayer": "Ebene festlegen", "pickOllamaModel": "Ollama-Modell auswählen", + "pickModel": "Modell auswählen", "llamaCppUseRemoteServer": "Externen Server verwenden (URL)", "llamaCppEngineSettings": "llama.cpp-Engine-Einstellungen", "llamaCppEngineSettingsSubtitle": "Lokaler llama.cpp-Server-Build", @@ -516,6 +557,7 @@ "reset": "Zurücksetzen", "resizePanels": "Panelgröße ändern", "resolution": "Auflösung", + "retry": "Wiederholen", "reverseRightToLeftStartEnd": "RTL-Start/-Ende umkehren", "right": "Rechts", "rightToLeft": "Rechts nach links", @@ -577,22 +619,28 @@ "shadowColor": "Schattenfarbe", "shadowWidth": "Schattenbreite", "shiftLineBy": "Zeile verschieben um", + "shotIn": "Schnitt ein", + "shotOut": "Schnitt aus", "shortcut": "Tastenkombination", - "shortcuts": "Tastenkürzel", + "shortcuts": "Tastenkombinationen", "show": "Anzeigen", - "showActorColumn": "Spalte \"Schauspieler\" anzeigen", - "showCpsColumn": "Spalte \"Chars/sec\" anzeigen", + "showActorColumn": "Spalte \"Darsteller\" anzeigen", + "showCpsColumn": "Spalte \"Zeichen/Sekunde\" anzeigen", "showDurationColumn": "Spalte \"Dauer\" anzeigen", "showGapColumn": "Spalte \"Abstand\" anzeigen", "showForcedColumn": "Spalte \"Erzwungen\" anzeigen", "showStartColumn": "Spalte \"Start\" anzeigen", "showHideColumn": "Spalte \"Ausblenden\" anzeigen", "showHistory": "Verlauf (für Rückgängig) anzeigen", + "clearHistory": "Verlauf löschen", + "removeFromHistory": "Aus Verlauf entfernen", "showLayerColumn": "Spalte \"Ebene\" anzeigen", "showPreview": "Vorschau anzeigen", "showShotChangesList": "Liste der Shotänderungen anzeigen", + "showShotInColumn": "Spalte \"Schnitt ein\" anzeigen", + "showShotOutColumn": "Spalte \"Schnitt aus\" anzeigen", "showStyleColumn": "Spalte \"Stil\" anzeigen", - "showTeletext": "TT anzeigen", + "showTeletext": "Teletext-Spalte in Listenansicht anzeigen", "showTimeCodes": "Zeitstempel anzeigen", "showWpmColumn": "Spalte \"Wörter/Minute\" anzeigen", "showPixelWidthColumn": "Spalte \"Pixelbreite\" anzeigen", @@ -647,12 +695,14 @@ "styleExaggeration": "Stilübertreibung", "styles": "Stile", "subtitleFile": "Untertiteldatei", + "subtitleFileChangedOutsideX": "Die Datei \"{0}\" wurde außerhalb von Subtitle Edit geändert.\n\nNeu laden und Ihre Änderungen verwerfen?", "subtitleFileName": "Name der Untertiteldatei", "subtitleFileSaved": "Untertiteldatei gespeichert", "subtitleFileSavedToX": "Untertiteldatei in {0} gespeichert", "subtitleFiles": "Untertiteldateien", "subtitleFormats": "Untertitelformate", "subtitleLoadedX": "Untertitel {0} geladen", + "subtitleReloadedChangedOutsideX": "Untertitel neu geladen (außerhalb von Subtitle Edit geändert): {0}", "suffix": "Suffix", "suggestions": "Vorschläge", "sync": "Anpassen", @@ -698,6 +748,7 @@ "type": "Typ", "unbreak": "Umbruch entfernen", "unbreakLines": "Zeilenumbrüche entfernen", + "undelete": "Löschen rückgängig machen", "underline": "Unterstrichen", "undo": "Rückgängig", "unknown": "Unbekannt", @@ -716,7 +767,7 @@ "url": "URL", "usages": "Verwendungen", "use": "Verwenden", - "useAlways": "Immer anwenden", + "useAlways": "Immer verwenden", "useOnce": "Einmal verwenden", "useOutputFolder": "Ausgabeordner verwenden", "useSourceFolder": "Quellordner verwenden", @@ -735,10 +786,23 @@ "videoCustom3ForwardX": "Video, benutzerdefinierte Millisekunden ({0:#,###,##0}) vorwärts, 3", "videoCustom4BackX": "Video, benutzerdefinierte Millisekunden ({0:#,###,##0}) zurück, 4", "videoCustom4ForwardX": "Video, benutzerdefinierte Millisekunden ({0:#,###,##0}) vorwärts, 4", + "videoCustom1BackAndPauseX": "Video, benutzerdefinierte Millisekunden ({0:#,###,##0}) zurück und pausieren, 1", + "videoCustom1ForwardAndPauseX": "Video, benutzerdefinierte Millisekunden ({0:#,###,##0}) vorwärts und pausieren, 1", + "videoCustom2BackAndPauseX": "Video, benutzerdefinierte Millisekunden ({0:#,###,##0}) zurück und pausieren, 2", + "videoCustom2ForwardAndPauseX": "Video, benutzerdefinierte Millisekunden ({0:#,###,##0}) vorwärts und pausieren, 2", + "videoCustom3BackAndPauseX": "Video, benutzerdefinierte Millisekunden ({0:#,###,##0}) zurück und pausieren, 3", + "videoCustom3ForwardAndPauseX": "Video, benutzerdefinierte Millisekunden ({0:#,###,##0}) vorwärts und pausieren, 3", + "videoCustom4BackAndPauseX": "Video, benutzerdefinierte Millisekunden ({0:#,###,##0}) zurück und pausieren, 4", + "videoCustom4ForwardAndPauseX": "Video, benutzerdefinierte Millisekunden ({0:#,###,##0}) vorwärts und pausieren, 4", "videoExtension": "Videodateierweiterung", "videoFile": "Videodatei", "videoFileGenerated": "Videodatei erstellt", "videoFileGeneratedX": "Videodatei erzeugt: \"{0}\"", + "videoFilesGenerated": "Videodateien erzeugt", + "xVideosGenerated": "{0} Videos erzeugt", + "xOfYVideosGenerated": "{0} von {1} Videos erzeugt", + "savedInX": "Gespeichert in {0}", + "savedInXFolders": "In {0} Ordnern gespeichert", "videoFiles": "Videodateien", "videoAndAudioFiles": "Video- und Audiodateien", "videoOffset": "Video-Offset", @@ -762,7 +826,7 @@ "width": "Breite", "wordsPerMin": "Wörter/Min.", "pixelWidth": "Pixelbreite", - "wpm": "Wörter/Min", + "wpm": "Wörter/Min.", "xFiles": "{0:#,###,##0} Dateien", "xOfYFiles": "{0:#,###,##0} von {1:#,###,##0} Dateien", "xFilesConvertedInY": "{0:#,###,##0} Dateien konvertiert in {1}", @@ -796,7 +860,6 @@ "imageFiles": "Bilddateien", "openAiCompatibleSttEndpoint": "STT-Endpunkt-URL", "openAiCompatibleSttApiKey": "API-Schlüssel", - "openAiCompatibleSttModel": "Modell", "openAiCompatibleSttExtraHeaders": "Zusätzliche Header", "openAiCompatibleSttTimeout": "Zeitüberschreitung (Sekunden)", "openAiCompatibleSttLanguage": "Sprachhinweis", @@ -806,6 +869,9 @@ "dashScopeSttRegion": "Region", "dashScopeSttEnableWords": "Zeitstempel auf Wortebene", "dashScopeSttRegionKeyHint": "Hinweis: Alibaba Cloud Model Studio API-Schlüssel sind regionsgebunden - stellen Sie sicher, dass die ausgewählte Region der Region entspricht, in der der API-Schlüssel erstellt wurde (China vs. International).", + "googleCloudSttProjectId": "Projekt-ID (nur für Application Default Credentials)", + "googleCloudSttBucketName": "Storage-Bucket (leer = automatisch)", + "googleCloudSttDynamicBatching": "Dynamisches Batching (etwa 5x günstiger, keine Latenzgarantie)", "onlineSttApiKeyMissing": "Ein API-Schlüssel ist erforderlich. Bitte geben Sie Ihren API-Schlüssel ein und versuchen Sie es erneut.", "openAiCompatibleSttAutoTranscribeOnAudioSelection": "Neue Wellenform-Auswahl automatisch per Sprache-zu-Text transkribieren", "openAiCompatibleSttStream": "Antwort streamen", @@ -863,13 +929,15 @@ "multipleReplace": "Mehrfach ersetzen...", "fillSelectedLinesWithClipboard": "Ausgewählte Zeilen mit Text aus Zwischenablage füllen", "goToLineNumber": "Gehe zu Untertitel Nummer...", + "commandPalette": "Befehls_palette...", "rightToLeftMode": "Rechts-nach-links-Modus", "modifySelectionDotDotDot": "Auswahl bearbeiten...", "tools": "Werkzeuge", "adjustDurations": "_Längen anpassen...", "applyDurationLimits": "Längenbegrenzungen anwenden...", "batchConvert": "Stapelkonvertierung...", - "beautifyTimeCodes": "Zeitstempel optimieren...", + "beautifyTimeCodes": "Zeitstempel glätten...", + "improveTimeCodes": "Zeitstempel optimieren (Forced Alignment)...", "bridgeGaps": "Kurze Zeitabstände überbrücken...", "applyMinGap": "Minimale Anzeigezeit zwischen Untertitel...", "changeCasing": "Schreibweise ändern...", @@ -879,8 +947,8 @@ "checkAndFixNetflixErrors": "Netflix Qualitätsprüfung...", "listErrors": "Fehler auf_listen...", "makeEmptyTranslationFromCurrentSubtitle": "Neue leere Übersetzung aus aktuellen Untertitel erstellen", - "mergeLinesWithSameText": "Zeilen mit gleichen Text verbinden...", - "mergeLinesWithSameTimeCodes": "Zeilen mit gleichen Zeitstempel verbinden...", + "mergeLinesWithSameText": "Zeilen mit gleichem Text verbinden...", + "mergeLinesWithSameTimeCodes": "Zeilen mit gleichem Zeitstempel verbinden...", "splitBreakLongLines": "Lange Texte trennen...", "evenlyDistributeLines": "Zeilen gleichmäßig verteilen (nach CPS)", "mergeShortLines": "Kurze Texte verbinden...", @@ -975,7 +1043,7 @@ "removeTextForHiHint": "Text für Hörgeschädigte entfernen {0}", "visualSyncHint": "Visuelle Synchronisierung {0}", "pointSyncHint": "Punktsynchronisierung über anderen Untertitel {0}", - "beautifyTimeCodesHint": "Zeitstempel optimieren {0}", + "beautifyTimeCodesHint": "Zeitstempel glätten {0}", "burnInHint": "Untertitel in eine Videodatei einbrennen {0}", "autoTranslateHint": "Automatisch übersetzen {0}", "speechToTextHint": "Sprache-zu-Text {0}", @@ -1010,6 +1078,7 @@ "videoPositionTextBox": "Textfeld für Videoposition {0}", "toolbarLineBreakX": "Zeilenumbruch {0} (Rest der Symbolleiste wird in neuer Zeile fortgesetzt)", "initialText": "Ursprünglicher Text der ausgewählten Zeile", + "initialTextHint": "Der Text der ausgewählten Zeile, wie er beim Auswählen der Zeile war", "hideWaveformToolbar": "Symbolleiste ausblenden {0}", "resetZoomAndSpeed": "Zoom und Wiedergabegeschwindigkeit zurücksetzen {0}", "removeBlankLines": "Leere Zeilen entfernen {0}", @@ -1023,9 +1092,15 @@ "textPlayHint": "Aktuellen Untertitel abspielen und am Ende stoppen {0}", "textPauseHint": "Wiedergabe pausieren {0}", "textNextHint": "Nächsten Untertitel abspielen und am Ende stoppen {0}", - "moveSelectedLines": "Ausgewählte Zeilen verschieben (Zurück/Vorwärts Schaltflächen)", + "moveSelectedLines": "Ausgewählte Zeilen verschieben (Zurück/Vorwärts Schaltflächen)", "moveSelectedLinesAndFollowing": "Ausgewählte und nachfolgende Zeilen verschieben (Zurück/Vorwärts Schaltflächen)", "moveAllLines": "Alle Zeilen verschieben (Zurück/Vorwärts Schaltflächen)", + "moveSelectedLinesBackHint": "Ausgewählte Zeilen {0} ms zurück verschieben {1}", + "moveSelectedLinesForwardHint": "Ausgewählte Zeilen {0} ms vorwärts verschieben {1}", + "moveSelectedLinesAndFollowingBackHint": "Ausgewählte und alle nachfolgenden Zeilen {0} ms zurück verschieben {1}", + "moveSelectedLinesAndFollowingForwardHint": "Ausgewählte und alle nachfolgenden Zeilen {0} ms vorwärts verschieben {1}", + "moveAllLinesBackHint": "Alle Zeilen {0} ms zurück verschieben {1}", + "moveAllLinesForwardHint": "Alle Zeilen {0} ms vorwärts verschieben {1}", "guessStartNoLineSelected": "Start schätzen: keine Zeile ausgewählt", "guessStartTimeCodesLocked": "Start schätzen: Zeitstempel sind gesperrt", "guessStartNoWaveform": "Start schätzen: keine Wellenform", @@ -1047,12 +1122,15 @@ "charactersPerSecond": "Zeichen/Sek: {0}", "chooseColumn": "Spalte auswählen", "columnPaste": "Spalte einfügen", + "commandPaletteTitle": "Befehlsübersicht", + "commandPaletteSearchPlaceholder": "Tippen, um Befehle zu suchen...", + "commandPaletteNoCommandsFound": "Keine Befehle gefunden", "createdEmptyTranslation": "Leere Übersetzung des aktuellen Untertitels erstellt", "deleteText": "Text löschen", "deleteTextAndShiftCellsUp": "Text löschen und Zellen nach oben verschieben", "endTimeMustBeAfterStartTime": "Die Endzeit muss nach der Startzeit liegen.", "errorLoad7Zip": "Diese Datei scheint eine komprimierte 7-Zip-Datei zu sein.\nSubtitle Edit kann keine komprimierten Dateien öffnen.", - "errorLoadBinaryZeroes": "Diese Datei enthält nur Nullzeichen.\n\nFalls Sie diese Datei mit Subtitle Edit bearbeitet haben, dürfte eine Sicherung vorliegen unter Menüpunkt \"Datei -> Automatische Sicherung wiederherstellen...\"\t\t", + "errorLoadBinaryZeroes": "Diese Datei enthält nur Nullzeichen.\n\nFalls Sie diese Datei mit Subtitle Edit bearbeitet haben, dürfte eine Sicherung vorliegen unter Menüpunkt \"Datei -> Automatische Sicherung wiederherstellen...\"", "errorLoadGZip": "Diese Datei scheint eine komprimierte GZip-Datei zu sein.\nSubtitle Edit kann keine komprimierten Dateien öffnen.", "errorLoadLargeFile": "Diese Datei ist zu groß, um als Untertiteldatei geöffnet zu werden.", "errorLoadVideoFilePrompt": "Diese Datei scheint eine Videodatei zu sein:\n{0}\n\nSie können ein Video über \"Video -> Video öffnen\" oder durch Ziehen und Ablegen eines Videos auf den Videoplayer öffnen.\n\nMöchten Sie sie als Videodatei öffnen?", @@ -1085,11 +1163,14 @@ "numberOfLinesEvenlyDistributedX": "{0} Zeilen gleichmäßig verteilt", "oneLineCopiedFromOriginal": "Text vom Original einfügen", "oneLineCopiedToOriginal": "Eine Zeile in den Originaluntertitel kopiert", + "onlineOnlyVideo": "Nur online verfügbares Video", + "onlineOnlyVideoXSizeYDownloadAndOpen": "Die Videodatei \"{0}\" ({1}) ist nur online gespeichert, z. B. in Dropbox oder iCloud Drive, und muss heruntergeladen werden, bevor sie geöffnet werden kann.\n\nJetzt herunterladen und öffnen?", "oneLineMerged": "Eine Zeile zusammengeführt", "oneLineSwitched": "Eine Zeile gewechselt", "overwriteExistingCells": "Vorhandene Zellen überschreiben", "overwriteOrShiftCellsDown": "Zellen nach unten verschieben/überschreiben", "parsingMatroskaFile": "Untersuche Matroska Datei...", + "readingDvdSubtitles": "DVD-Untertitel werden gelesen...", "pasteFromClipboardDotDotDot": "Aus Zwischenablage einfügen...", "redoPerformed": "Wiederhergestellt", "redoPerformedXActionLeft": "Wiederhergestellt (verbleibende Aktionen: {0})", @@ -1129,12 +1210,14 @@ "trimmedXLines": "{0} Untertitelzeilen gekürzt", "pastedXLinesOverSelectedLines": "{0} Zeile(n) über die ausgewählten Zeilen eingefügt", "pastedXOfYLinesOverSelectedLines": "{0} von {1} Zeile(n) über die ausgewählten Zeilen eingefügt - der Rest passte nicht in die Auswahl", + "insertedXLinesFromClipboard": "{0} Zeile(n) aus der Zwischenablage eingefügt", "openOriginalDifferentNumberOfSubtitlesXY": "Die Original-Untertiteldatei hat nicht die gleiche Anzahl an Untertiteln wie die aktuelle Untertiteldatei.\n\n• Original-Untertitel: {0}\n• Aktuelle Untertitel: {1}", "originalTextReadOnly": "Originaltext (schreibgeschützt)", "originalTextEditMode": "Originaltext (Bearbeitungsmodus)", "originalIsReadOnlyNotSaved": "Der Originaluntertitel ist eine schreibgeschützte Referenz und wurde nicht gespeichert", "originalIsEmptyNotSaved": "Der Originaluntertitel enthält überhaupt keinen Text und wurde nicht gespeichert", "originalIsReadOnlyReference": "Der Originaluntertitel ist als schreibgeschützte Referenz geöffnet", + "closeTranslationQuestionXY": "Die Übersetzung \"{0}\" schließen?\n\nDer Originaluntertitel \"{1}\" wird zum Untertitel, den Sie bearbeiten. Die Übersetzungsdatei selbst wird nicht geändert.", "allowEditOfOriginalSubtitle": "Bearbeiten des Originaluntertitels erlauben", "showAllOriginalLinesX": "Alle Originalzeilen anzeigen ({0} ohne Entsprechung hier)", "showAllOriginalLinesHint": "Die Zeilen ohne Entsprechung werden als zusätzliche Zeilen angezeigt, damit Sie sehen, was der Übersetzung fehlt.", @@ -1169,6 +1252,7 @@ "fileExportedInFormatXToY": "Datei im Format {0} exportiert nach {1}", "fileExportedInFormatXToFileY": "Datei im Format \"{0}\" exportiert in Datei \"{1}\"", "fixedXLines": "{0} Zeilen korrigiert", + "toolXChangedYLines": "{0}: {1} Zeilen geändert", "transcriptionCompletedWithXLines": "Transkription abgeschlossen mit {0} Zeilen", "openSubtitleFileX": "Untertiteldatei \"{0}\" öffnen?", "replacedXOccurrences": "{0} Ersetzungen vorgenommen", @@ -1259,6 +1343,21 @@ "formattingDotDotDot": "Formatierung...", "imageBasedSubtitleForEditDotDotDot": "Bildbasierten Untertitel zum Bearbeiten...", "imageBasedSubtitleForOcrDotDotDot": "Bildbasierten Untertitel für OCR...", + "dvdSubtitlesDotDotDot": "Untertitel von DVD (IFO/VOB)...", + "titleImportDvd": "Untertitel von DVD importieren", + "dvdIfoFile": "IFO-Datei", + "dvdVobFiles": "VOB-Dateien", + "dvdVideoStandard": "Videostandard", + "dvdStartRipping": "Rippen starten", + "dvdRippingAborted": "Rippen abgebrochen", + "dvdOpenIfoFile": "DVD-IFO-Datei öffnen", + "dvdAddVobFiles": "VOB-Dateien hinzufügen", + "dvdIfoFiles": "DVD-IFO-Dateien", + "dvdVobFileType": "DVD-VOB-Dateien", + "dvdDropHint": "Öffnen Sie eine IFO-Datei (VIDEO_TS\\VTS_01_0.IFO) oder fügen Sie VOB-Dateien hinzu - oder ziehen Sie sie hierher", + "dvdNotAnIfoFileX": "{0} ist keine DVD-IFO-Datei", + "dvdMenuIfoNoTitleSetsX": "Keine Titelsets (VTS_xx_0.IFO) neben {0} gefunden", + "dvdEncryptedXOfY": "{0} der {1} Untertitelpakete sind noch CSS-verschlüsselt - diese VOB-Dateien wurden ohne Entschlüsselung kopiert, daher werden einige Untertitelbilder fehlerhaft sein.\n\nEntschlüsseln Sie die DVD zuerst mit einem DVD-Ripping-Tool, um ein sauberes Ergebnis zu erhalten.\n\nTrotzdem fortfahren?", "splitTextAt": "Text teilen bei", "blankLines": "Leerzeilen", "oneLineIsOneSubtitle": "Eine Zeile ist ein Untertitel", @@ -1278,8 +1377,13 @@ "forcedAlignerProgress": "Ausrichten... Fenster {0} von {1}, {2} von {3} Zeilen", "forcedAlignerSetupTitle": "Zeitstempel per Forced Aligner ausrichten", "forcedAlignerSetupIntro": "Ein Forced Aligner ordnet den bereits vorhandenen Untertiteltext dem Ton zu, ohne ihn zuvor zu transkribieren. Lange Videos werden in Abschnitten ausgerichtet, sodass jede Länge funktioniert.", + "forcedAlignerEndsFromSpeech": "Endzeiten aus isolierter Sprache setzen (langsam)", + "forcedAlignerEndsFromSpeechHint": "Ein Forced Aligner findet, wo eine Zeile beginnt, nicht wo sie endet, daher ergeben sich Endzeiten normalerweise aus der Lesezeit. Ist dies aktiviert, werden zuerst Musik und Soundeffekte aus dem Ton entfernt, und jede Zeile endet dort, wo ihre Sprache verstummt. Dauert mit einer GPU etwa so lange wie das Video selbst - und ohne GPU um ein Vielfaches länger.", + "forcedAlignerIsolatingSpeech": "Sprache wird isoliert... {0}", + "forcedAlignerIsolatingSpeechFailed": "Die Sprache konnte nicht isoliert werden - die Endzeiten wurden stattdessen aus der Lesezeit gesetzt.", "forcedAlignerModel": "Aligner-Modell", - "forcedAlignerDownloadEngine": "Engine herunterladen / aktualisieren..." + "forcedAlignerDownloadEngine": "Engine herunterladen / aktualisieren...", + "forcedAlignerEstimatedXOfY": "{0} von {1} Zeilen konnten nicht ausgerichtet werden und wurden nach Lesezeit platziert - ihre Zeitcodes sind nur geschätzt. Das Skript ist wahrscheinlich länger als das, was im Video gesprochen wird." }, "export": { "exportImagesProfiles": "Bildprofile exportieren", @@ -1328,6 +1432,18 @@ "imageBasedSubtitleSaved": "Bildbasierter Untertitel gespeichert", "fullFrameImage": "Vollbild-Bild", "fullFrameImageHint": "Jedes Bild in der Größe des Videobildes erzeugen, mit dem Untertitel an seiner Position", + "stereo3D": "3D", + "stereo3DHint": "Für 3D-Video: Untertitel einmal in jeder Augenhälfte des Bildes zeichnen", + "halfSideBySide": "Half Side-by-Side", + "halfTopBottom": "Half Top/Bottom", + "depth3D": "Tiefe", + "depth3DHint": "Wie weit der Untertitel aus dem Bildschirm heraustritt - positiv holt ihn näher, negativ schiebt ihn zurück", + "plane3D": "3D-Plane", + "plane3DHint": "Jedem Untertitel die Tiefe geben, die eine 3D-Blu-ray für ihn speichert, aus einer 3D-Plane-Datei (.ofs), erstellt mit BD3D2MK3D oder OFSExtractor. Tiefe wird verwendet, wo die 3D-Plane keine hat", + "openPlane3DTitle": "3D-Plane-Datei öffnen", + "unableToLoadPlane3DX": "3D-Plane konnte nicht geladen werden: {0}", + "plane3DXDepthYToZ": "{0} (Tiefe {1} bis {2})", + "plane3DXNoDepth": "{0} (keine Tiefenwerte)", "textEffect": "Texteffekt", "textEffectSettingsTitle": "Texteffekt-Einstellungen", "textEffectPreset": "Vorgabe", @@ -1432,7 +1548,22 @@ "restoreAutoBackupFile": "Auto-Sicherungsdatei wiederherstellen", "restoreXFromY": "Möchten Sie \"{0}\" von {1} wiederherstellen?", "deleteAllSubtitleBackups": "Möchten Sie alle Untertitel-Sicherungsdateien löschen?", - "deleteAll": "Alle löschen" + "deleteAll": "Alle löschen", + "subtitles": "Untertitel", + "settingsBackupInfo": "Settings.json wird beim Start von Subtitle Edit gesichert, höchstens einmal alle {0} Tag(e) und nur, wenn sich die Einstellungen geändert haben. Die neuesten {1} Sicherungen werden aufbewahrt.", + "settingsBackupInfoEveryStart": "Settings.json wird bei jedem Start von Subtitle Edit gesichert, wenn sich die Einstellungen geändert haben. Die neuesten {0} Sicherungen werden aufbewahrt.", + "settingsBackupOff": "Die automatische Sicherung der Einstellungen ist ausgeschaltet (Optionen → Einstellungen → Datei).", + "lastSettingsBackupX": "Letzte Sicherung: {0}", + "noSettingsBackupsYet": "Noch keine Sicherungen der Einstellungen", + "openSettingsBackupFolder": "Sicherungsordner der Einstellungen öffnen", + "backUpSettingsNow": "Jetzt sichern", + "settingsBackedUp": "Die aktuellen Einstellungen wurden gesichert.", + "restoreSettings": "Einstellungen wiederherstellen", + "restoreSettingsFromX": "Möchten Sie Ihre aktuellen Einstellungen durch die Sicherung vom {0} ersetzen?\n\nIhre aktuellen Einstellungen werden zuerst gesichert. Einige Änderungen werden erst nach einem Neustart von Subtitle Edit wirksam.", + "settingsRestored": "Die Einstellungen wurden wiederhergestellt. Bitte starten Sie Subtitle Edit neu, damit alle Änderungen wirksam werden.", + "settingsRestoreFailed": "Einstellungen konnten nicht wiederhergestellt werden: {0}", + "settingsBackupNotValid": "die Sicherung ist keine gültige Einstellungsdatei, daher wurden Ihre aktuellen Einstellungen beibehalten", + "deleteAllSettingsBackups": "Möchten Sie alle Sicherungsdateien der Einstellungen löschen?" }, "propertiesDCinema": { "title": "D-Cinema SMPTE-Eigenschaften", @@ -1446,22 +1577,16 @@ "editRate": "Bearbeitungsrate", "timeCodeRate": "Zeitstempelrate", "startTime": "Startzeit", - "font": "Schrift", "fontId": "Schrift-ID", "fontUri": "Schrift-URI", - "generate": "Erzeugen", - "fontColor": "Schriftfarbe", "chooseColor": "Farbe wählen", "fontEffect": "Schrifteffekt", "effectColor": "Effektfarbe", - "fontSize": "Schriftgröße", "topBottomMargin": "Oberer/unterer Rand", "fadeUpTime": "Einblendzeit", "fadeDownTime": "Ausblendzeit", - "frames": "Frames", "zPosition": "Z-Position", - "zPositionHelp": "Positive Zahlen rücken den Text weiter weg, negative Zahlen näher heran; bei Z-Position null ist es 2D", - "export": "Exportieren..." + "zPositionHelp": "Positive Zahlen rücken den Text weiter weg, negative Zahlen näher heran; bei Z-Position null ist es 2D" }, "webVtt": { "setStylesForSelectedLinesTitle": "WebVTT-Stile für ausgewählte Zeilen festlegen", @@ -1545,10 +1670,15 @@ "compareChangeSyncShiftXYZ": "#{0}–#{1} um {2} verschoben (Synchronisationspunkt)", "compareTimingDeltaHint": "Wie viel später (+) oder früher (−) die Referenz im Vergleich zur aktuellen Zeile beginnt und endet", "loadXFromFile": "Lade \"{0}\" aus der Datei", + "compareLoadSavedFile": "Gespeicherte Datei laden", "saveCompareHtmlTitle": "Vergleichs-HTML-Datei speichern", "pickMatroskaTrackX": "Matroska-Track auswählen - {0}", "pickTransportStreamTrackX": "Transportstream-Spur wählen - {0}", + "chapters": "Kapitel", + "dvdVobFilesMissingX": "VOB-Dateien fehlen ({0}% gefunden)", "pickMp4TrackX": "MP4-Spur wählen - {0}", + "pickMxfTrackX": "MXF-Spur auswählen - {0}", + "pickMpegTrackX": "MPEG-Spur auswählen - {0}", "rosettaProperties": "Timed Text Rosetta IMSC-Eigenschaften", "rosettaFontSize": "Schriftgröße (Zeilenhöhe)", "propertyTimeBase": "Zeitbasis", @@ -1558,7 +1688,6 @@ "propertyDefaultRegion": "Standardregion", "propertyStyleAttributeName": "Name des Stilattributs", "propertyTimeCodeFormat": "Zeitstempelformat", - "propertyFileExtension": "Dateierweiterung", "propertyTopOrigin": "Oberer Ursprung", "propertyTopExtent": "Obere Ausdehnung", "propertyBottomOrigin": "Unterer Ursprung", @@ -1624,7 +1753,8 @@ "findWhat": "Suchen nach", "descriptionOptional": "Beschreibung (optional)", "invalidRegularExpressionX": "Ungültiger regulärer Ausdruck: {0}", - "regularExpressionTooSlowX": "Der reguläre Ausdruck wurde nach {0} Sekunden abgebrochen - die Regel wird übersprungen, versuchen Sie ein einfacheres Muster" + "regularExpressionTooSlowX": "Der reguläre Ausdruck wurde nach {0} Sekunden abgebrochen - die Regel wird übersprungen, versuchen Sie ein einfacheres Muster", + "moveToCategory": "In Kategorie verschieben" }, "find": { "searchTextWatermark": "Text suchen...", @@ -1667,6 +1797,7 @@ "xLinesYSubtitles": "{0} Zeilen, {1} Untertitel", "xLinesYSubtitlesZErrors": "{0} Zeilen, {1} Untertitel, {2} Fehler", "couldNotParseAsX": "Konnte nicht als {0} gelesen werden", + "readAsXUseAsY": "Die Quelle konnte nicht als {1} gelesen werden, aber als {0}.\nDie Zeilen verwenden und weiterhin als {1} speichern?", "selectedXCharactersYLines": "Ausgewählt: {0} Zeichen in {1} Zeile(n)", "replacedXOccurrences": "{0} Ersetzungen vorgenommen", "invalidRegularExpression": "Ungültiger regulärer Ausdruck", @@ -1764,6 +1895,7 @@ "removeLineBreaksPixelWidth": "Zeilenumbrüche aus Untertiteln entfernen, die in eine Zeile passen (Pixelbreite)", "fixUppercaseIInsideLowercaseWords": "Großes 'i' in klein geschriebenen Wörtern (OCR Fehler) korrigieren", "fixDoubleApostrophes": "Doppelte Apostrophe ('' ) zu Anführungszeichen (\"\") korrigieren", + "fixMisreadQuotes": "Als doppelte Anführungszeichen falsch erkannte Apostrophe korrigieren (OCR, Englisch)", "addPeriods": "Punkt am Ende einfügen, wenn nächste Zeile mit Großbuchstaben beginnt.", "startWithUppercaseLetterAfterParagraph": "Mit Großbuchstaben nach einem Punkt beginnen", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Mit Großbuchstaben nach Punkten beginnen", @@ -1786,6 +1918,7 @@ "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Foo
bar! -> Foo bar!", "fixDoubleApostrophesExample": "''Hat doppelte einfache Anführungszeichen'' -> \"Hat einfaches doppeltes Anführungszeichen\"", + "fixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "addPeriodsExample": "Hallo Welt -> Hallo Welt.", "startWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: Foobar!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Hallo da! wie geht es dir? -> Hallo da! Wie geht es dir?", @@ -1812,7 +1945,7 @@ "fixInvalidItalicTag": "Ungültigen Kursiv Tag korrigieren", "fixShortDisplayTime": "Kurze Anzeigezeit korrigieren", "fixOverlappingDisplayTime": "Überlappende Anzeigezeit korrigieren", - "fixInvalidItalicTagsExample": "Mir egal. -> Mir egal.", + "fixInvalidItalicTagsExample": "Mir egal. -> Mir egal.", "removeUnneededSpacesExample": "Hey du , da drüben. -> Hey du, da drüben.", "removeUnneededPeriodsExample": "Hey du!. -> Hey du!", "fixMissingSpacesExample": "Hey.Du. -> Hey. Du.", @@ -1861,7 +1994,7 @@ "fixDialogsOnOneLine": "Dialoge auf einer Zeile korrigieren" }, "adjustDurations": { - "title": "Längen anpassen", + "title": "Dauer anpassen", "adjustVia": "Anpassen über", "recalculate": "Neuberechnen", "addSeconds": "Sekunden hinzufügen", @@ -1875,6 +2008,8 @@ "fixMinDurationMs": "Mindestdauer (ms) festlegen", "doNotGoPastShotChange": "Nicht über die Szenenwechsel verlängern", "fixMaxDurationMs": "Maximale Dauer (ms) festlegen", + "fixMinDurationFrames": "Minimale Dauer korrigieren (Frames)", + "fixMaxDurationFrames": "Maximale Dauer korrigieren (Frames)", "minimumDurationMilliseconds": "Mindestdauer (Millisekunden):", "maximumDurationMilliseconds": "Höchstdauer (Millisekunden):", "maxDurationShouldBeHigherThanMinDuration": "Die maximale Dauer sollte höher sein als die minimale Dauer", @@ -1893,7 +2028,7 @@ "changedGapFromXToYCommentZ": "Abstand geändert von {0} zu {1} {2}" }, "beautifyTimeCodes": { - "title": "Zeitstempel optimieren", + "title": "Zeitstempel glätten", "snapToFrames": "An Frames anpassen", "minDuration": "Min. Dauer (ms)", "original": "Original", @@ -1922,9 +2057,9 @@ "noTimeCodesLoaded": "Keine Zeitstempel geladen", "xTimeCodesLoaded": "{0} Zeitstempel geladen", "timeCodesExtractFailed": "Zeitstempel konnten nicht aus dem Video gelesen werden", - "timeCodesHint": "Cues an die echten Frame-Zeiten des Videos anpassen, statt eine konstante Bildrate anzunehmen. Erfordert einmaliges Lesen des gesamten Videos; das Ergebnis wird zwischengespeichert." + "timeCodesHint": "Richtet Untertitel an den tatsächlichen Frame-Zeiten des Videos aus, anstatt von einer konstanten Bildrate auszugehen. Erfordert ein einmaliges Einlesen des gesamten Videos; das Ergebnis wird zwischengespeichert." }, - "improveTimeCodes": { + "improveTimeCodes": { "title": "Zeitstempel optimieren (Forced Alignment)", "aligner": "Aligner", "alignerHint": "Das Modell, das jede Zeile in der Audiodatei analysiert. Die am besten passenden Optionen für die Sprache des Untertitels stehen an erster Stelle.", @@ -1988,7 +2123,7 @@ "applyHint": "Entfernen Sie das Häkchen einer Zeile, um ihre ursprünglichen Zeitstempel beizubehalten. Doppelklicken Sie auf eine Zeile, um sie abzuspielen. Zeilen können in der ausgerichteten Wellenform auch verschoben oder in der Größe angepasst werden." }, "beautifyTimeCodesProfile": { - "title": "Profil zur Zeitstempeloptimierung bearbeiten", + "title": "Profil zum glätten der Zeitstempel bearbeiten", "loadPreset": "Voreinstellung laden", "presetDefault": "Standard", "presetNetflix": "Netflix", @@ -1998,7 +2133,6 @@ "profileName": "Profilname", "overwriteProfileX": "Ein Profil mit dem Namen \"{0}\" existiert bereits. Überschreiben?", "deleteProfileX": "Profil \"{0}\" löschen?", - "general": "Allgemein", "gap": "Abstand", "gapSuffix": "Frames (aktualisiert auch die unten stehenden Abstandsfelder ungleich null)", "milliseconds": "ms", @@ -2029,6 +2163,10 @@ "bridgeGaps": { "bridgeGapsSmallerThan": "Abstände überbrücken kleiner als (ms)", "minGap": "Mindestabstand (ms)", + "bridgeGapsSmallerThanFrames": "Lücken überbrücken, die kleiner sind als (Frames)", + "minGapFrames": "Minimaler Abstand (Frames)", + "calculateBridgeGapsSmallerThanDotDotDot": "Grenze für Lückenüberbrückung aus einer Bildrate berechnen...", + "useXMsAsBridgeGapsSmallerThan": "Lücken überbrücken, die kleiner als \"{0}\" Millisekunden sind?", "numberOfSmallGapsBridgedX": "Zeitabstände überbrückt: {0}", "percentFoPrevious": "Abstand zum vorherigen (%)", "gapChange": "Abstandswechsel" @@ -2060,8 +2198,9 @@ "addUnderline": "Unterstreichung hinzufügen", "addAlignment": "Ausrichtung hinzufügen", "addColor": "Farbe hinzufügen", - "deleteLinesWithSpecificActorsOrStyles": "Zeilen mit Schauspielern oder Stilen löschen (mehrere durch Komma trennen)", - "useSourceStylesIfPossible": "Quellstile wenn möglich verwenden", + "deleteLinesWithSpecificActorsOrStyles": "Zeilen mit Darstellern oder Stilen löschen (mehrere durch Komma trennen)", + "useSourceStylesIfPossible": "Quell-Stile wenn möglich verwenden (der folgende Header wird dann nur für Nicht-ASSA-Eingaben verwendet)", + "keepSourceEmbeddedFonts": "Eingebettete Quell-Schriftarten beibehalten (Fußzeile)", "editStyles": "Stile bearbeiten", "editProperties": "Eigenschaften bearbeiten", "editAttachments": "Anhänge bearbeiten", @@ -2093,10 +2232,50 @@ "convertColorsToDialogReBreakLines": "Zeilen neu umbrechen", "snapTimeCodesToFramesInfo": "Rundet jede Start- und Endzeit auf den nächsten Frame. Die Bildrate wird aus einer Videodatei mit demselben Namen wie die Untertiteldatei gelesen, sofern keine feste Bildrate gewählt ist.", "addFolderDotDotDot": "Ordner hinzufügen...", + "addFolderRecursiveDotDotDot": "Ordner inkl. Unterordner hinzufügen...", "selectFolderToConvert": "Ordner mit zu konvertierenden Dateien wählen", "includeSubfolders": "Unterordner einbeziehen, wenn ein Ordner hinzugefügt wird", + "videoFilesWhenAddingFolder": "Videodateien (mkv, mp4, ts …) beim Hinzufügen eines Ordners", + "videoFilesAsk": "Fragen", + "videoFilesInclude": "Enthaltene Untertitelspuren hinzufügen", + "videoFilesSkip": "Überspringen", + "folderContainsXVideoFiles": "Der Ordner enthält {0} Videodatei(en) (mkv, mp4, ts …).\n\nSollen die eingebetteten Untertitelspuren ebenfalls hinzugefügt werden oder nur die Untertiteldateien?", + "addVideoFiles": "Videodateien hinzufügen", + "skipVideoFiles": "Nur Untertiteldateien", + "doNotAskAgainVideoFiles": "Nicht erneut fragen (in Stapelverarbeitungs-Einstellungen änderbar)", + "settingsSectionOutput": "Ausgabe", + "settingsSectionAddingFiles": "Dateien hinzufügen", + "settingsSectionImageBasedSubtitles": "Bildbasierte Untertitel (OCR)", + "settingsSectionOther": "Andere", "keepSourceFileTimestamp": "Datum/Uhrzeit der Quelldatei für Ausgabedateien beibehalten", - "scanningFolderX": "{0} wird durchsucht..." + "preventSleepWhileConverting": "Ruhezustand des Computers während der Konvertierung verhindern", + "scanningFolderX": "{0} wird durchsucht...", + "transportStreamSettings": "Transport-Stream-Einstellungen", + "transportStreamSettingsDotDotDot": "Transport-Stream-Einstellungen...", + "transportStreamSettingsInfo": "Gilt für Untertitelspuren, die aus Transport-Stream-Dateien (.ts/.m2ts) extrahiert wurden. Position und Videogröße wirken sich nur auf DVB-Bild-Spuren aus, die in ein bildbasiertes Format exportiert werden.", + "transportStreamOverrideXPosition": "Ursprüngliche X-Position überschreiben", + "transportStreamOverrideYPosition": "Ursprüngliche Y-Position überschreiben", + "transportStreamOverrideVideoSize": "Ursprüngliche Videoauflösung überschreiben", + "transportStreamBottomMargin": "Unterer Rand", + "transportStreamFileNameEnding": "Dateiendung (Suffix)", + "transportStreamFileNameEndingInfo": "Wird für jede extrahierte Spur vor der Dateiendung angefügt. Leer lassen, um das reguläre Sprach-Postfix zu verwenden.", + "transportStreamOnlyTeletext": "Nur Teletext", + "transportStreamGetSizeFromVideo": "Auflösung aus Video übernehmen...", + "twoLetterLanguageCodeUppercase": "2-Buchstaben-Sprachcode (Großbuchstaben)", + "threeLetterLanguageCodeUppercase": "3-Buchstaben-Sprachcode (Großbuchstaben)", + "formatContainsDotDotDot": "Format enthält...", + "extensionIsDotDotDot": "Dateiendung ist...", + "statusIsError": "Status ist fehlerhaft", + "forcedTracksOnly": "Nur erzwungene Spuren", + "xConvertedYFailedInZ": "{0:#,###,##0} konvertiert, {1:#,###,##0} fehlgeschlagen in {2}", + "xNotProcessed": "{0:#,###,##0} nicht verarbeitet", + "removeUnicodeControlCharactersTitle": "Unicode-Steuerzeichen entfernen", + "removeUnicodeControlCharactersInfo": "Entfernt unsichtbare Unicode-Steuerzeichen für die Schreibrichtung (LRM, RLM, LRE, RLE, PDF, LRO und RLO) aus dem Text und ersetzt geschützte Leerzeichen durch normale Leerzeichen.", + "preset": "Voreinstellung", + "savePresetDotDotDot": "Voreinstellung speichern...", + "deletePreset": "Voreinstellung löschen", + "presetName": "Name der Voreinstellung", + "deletePresetX": "Voreinstellung \"{0}\" löschen?" }, "changeCasing": { "fixNames": "Namenschreibweise korrigieren", @@ -2181,10 +2360,13 @@ }, "mergeLinesWithSameText": { "maxMsBetweenLines": "Max. Millisekunden zwischen Texten", - "includeIncrementingLines": "Zeilenerhöhung einschließen" + "maxFramesBetweenLines": "Max. Frames zwischen Zeilen", + "includeIncrementingLines": "Fortlaufenden Text einbeziehen", + "includeRollUpCaptions": "Scrollenden Text einbeziehen" }, "mergeLinesWithSameTimeCodes": { "maxMsDifference": "Max. Millisekunden Abstand", + "maxFramesDifference": "Max. Unterschied (Frames)", "makeDialog": "Dialog erstellen" }, "netflixCheckAndFix": { @@ -2284,12 +2466,29 @@ "letterboxCustom": "Benutzerdefinierte Balkenhöhe", "barHeightPx": "Balkenhöhe (px)", "titleSafePercent": "Title-safe (%)", + "moveCaptions": "Untertitel verschieben", + "moveCaptionsDotDotDot": "Untertitel verschieben...", + "moveCaptionsTo": "Untertitel verschieben", + "moveCaptionsIntoBars": "In die Letterbox-Balken (außerhalb des Bildes)", + "moveCaptionsIntoPicture": "In das Bild (aus den Balken heraus)", + "moveCaptionsOffset": "Abstand vom Rand (px)", + "letterboxBarHeightXPxYOfZCaptionsWillMove": "Balkenhöhe: {0} px - {1} von {2} Untertiteln werden verschoben", + "removeFadeInOut": "Ein-/Ausblenden entfernen", + "removeFadeInOutXLinesRemoved": "{0} Überblendungszeilen mit den zugehörigen Zeilen zusammengeführt", + "removeFadeInOutNothingFound": "Keine Ein-/Ausblendzeilen gefunden", "positionSummary": "{0}×{1} - {2} Untertitel - Balkenhöhe: {3} px", "xInActivePicture": "{0} im Bild", "xInTopBar": "{0} im oberen Balken", "xInBottomBar": "{0} im unteren Balken", "noImageSubtitlesLoaded": "Keine Bilduntertitel geladen", - "imageBasedFormatNotSupported": "Bildbasiertes Untertitelformat nicht gefunden/unterstützt." + "imageBasedFormatNotSupported": "Bildbasiertes Untertitelformat nicht gefunden/unterstützt.", + "frameRateDeclaredInFile": "In der Blu-ray-sup-Datei angegebene Bildrate", + "frameRateDetectedFromTimeCodesX": "Aus den Blu-ray-sup-Zeitcodes erkannte Bildrate (die Datei gibt {0} an)", + "frameRateFromVideo": "Bildrate des Videos", + "frameRateCurrent": "Aktuelle Bildrate", + "frameRateSetManually": "Bildrate manuell festgelegt", + "frameRateUsageInfo": "Blu-ray-sup-, BDN-XML-, DOST- und FCP-Exporte werden mit dieser Bildrate geschrieben. Zeiten werden dadurch nicht geändert - verwenden Sie dafür \"Bildrate ändern\".", + "useVideoFrameRateXInsteadOfY": "Die Bildrate des Videos ist {0}, der Untertitel ist aber auf {1} eingestellt.\n\nDie Bildrate des Videos ({0}) verwenden?" }, "removeTextForHearingImpaired": { "interjections": "Interjektionen", @@ -2319,6 +2518,7 @@ "pickFontNameInstalledFonts": "Installierte Schriftarten", "pickFontNameCollectedFonts": "Gesammelte Schriftarten", "colorPickerTitle": "Farbe wählen", + "colorPickerBrightness": "Helligkeit", "filterLayersTitle": "Ebenen für Anzeige filtern", "filterLayersHideFromWaveform": "Von Wellenform/Spektrogramm ausblenden", "filterLayersHideFromSubtitleGrid": "Von Untertiteltabelle ausblenden", @@ -2326,7 +2526,7 @@ "pickSubtitleFormat": "Untertitelformat wählen", "pickSubtitleFormatImageBasedNoPreview": "Bildbasiertes Untertitelformat.\nBitmaps werden bei der Konvertierung erzeugt - keine Textvorschau.", "recentColors": "Zuletzt verwendete Farben", - "fixCommonErrorsSettingsTitle": "" + "fixCommonErrorsSettingsTitle": "Einstellungen für \"Häufige Fehler beheben\"" }, "spellCheck": { "spellCheck": "Rechtschreibprüfung", @@ -2369,7 +2569,21 @@ "correctWordsX": "Korrekte Wörter: {0}", "namesX": "Namen: {0}", "addedToDictionaryX": "Zum Wörterbuch hinzugefügt: {0}", - "doNotShowThisAgain": "Diese Meldung nicht mehr anzeigen" + "doNotShowThisAgain": "Diese Meldung nicht mehr anzeigen", + "editUseAlwaysList": "\"Immer verwenden\"-Liste bearbeiten...", + "useAlwaysListTitle": "Rechtschreibprüfung - \"Immer verwenden\"-Liste", + "useAlwaysListHeader": "\"Immer verwenden\"-Liste", + "useAlwaysListDescription": "Automatische Ersetzungen der Rechtschreibprüfung (gespeichert durch \"Alle ändern\" und \"Immer verwenden\"). Ein Paar wird nur angewendet, wenn das Wort falsch geschrieben ist.", + "useAlwaysWord": "Falsch geschriebenes Wort", + "xPairs": "{0:#,##0} Paare", + "xUnusedPairs": "{0:#,##0} Nie verwendet", + "useAlwaysUnusedHint": "Nie verwendet – Dieses Wort ist korrekt geschrieben (oder ist ein Name bzw. ein Benutzerwort), daher wird es von der Rechtschreibprüfung nie beanstandet.", + "removeUnused": "Ungenutzte Einträge löschen", + "useAlwaysEmpty": "Noch keine \"Immer verwenden\"-Paare für diese Sprache vorhanden", + "useAlwaysEmptyHint": "Paare werden hinzugefügt, wenn Sie in der Rechtschreibprüfung auf \"Alle ändern\" oder \"Immer verwenden\" klicken.", + "useAlwaysNoMatch": "Keine passenden Ersetzungspaare", + "useAlwaysSameWord": "Die Ersetzung muss sich vom ursprünglichen Wort unterscheiden.", + "useAlwaysRememberOff": "\"Liste 'Immer verwenden' merken\" ist in den Einstellungen deaktiviert, daher wird diese Liste von der Rechtschreibprüfung weder verwendet noch gespeichert." }, "video": { "burnIn": { @@ -2382,6 +2596,7 @@ "sampleRate": "Abtastrate", "audio": "Audio", "preset": "Voreinstellung", + "tune": "Tune", "pixelFormat": "Pixelformat", "crf": "CRF", "useSource": "Quelle verwenden", @@ -2393,7 +2608,9 @@ "outputProperties": "Ausgabeeigenschaften...", "videoFileSize": "Größe der Videodatei", "oneBox": "Eine Box", - "logoInfo": "Wählen Sie ein PNG-Bild und ziehen Sie es, um es auf dem Video zu positionieren." + "logoInfo": "Wählen Sie ein PNG-Bild und ziehen Sie es, um es auf dem Video zu positionieren.", + "noSubtitlesGenerateAnyway": "Es gibt keine Untertitelzeilen zum Einbrennen.\n\nDas Video ohne Untertitel erzeugen?", + "noSubtitlesInXItemsGenerateAnyway": "{0} Stapelelement(e) haben keine Untertitelzeilen zum Einbrennen.\n\nDiese Videos ohne Untertitel erzeugen?" }, "videoTransparent": { "title": "Transparentes Video mit Untertiteln erzeugen ..." @@ -2404,6 +2621,21 @@ "translateToEnglish": "Ins Englische übersetzen", "transcribing": "Transkribieren...", "transcribingXOfY": "Transkribiere Audio zu Text - Datei {0} von {1}...", + "linesTranscribedXOfYFailedZ": "{0} von {1} Zeilen wurden transkribiert - {2} sind fehlgeschlagen oder enthielten keine Sprache.\n\nFehlgeschlagene Zeilen behalten ihren aktuellen Text. Die transkribierten Zeilen übernehmen oder die fehlgeschlagenen erneut versuchen (Sie können vorher Engine oder Einstellungen ändern)?", + "linesTranscribedXOfYCancelled": "Die Transkription wurde nach {0} von {1} Zeilen abgebrochen.\n\nDie transkribierten Zeilen übernehmen? Die übrigen Zeilen behalten ihren aktuellen Text.", + "noLinesTranscribed": "Keine der {0} Zeilen konnte transkribiert werden.\nBitte prüfen Sie das Werkzeugprotokoll für Details.", + "applyTranscribedLines": "Transkribierte übernehmen", + "retryFailedLines": "Fehlgeschlagene wiederholen", + "isolateSpeech": "Sprache isolieren (langsam)", + "isolateSpeechHint": "Entfernt Musik und Soundeffekte vor dem Transkribieren. Ergibt weniger verpasste Zeilen und besseres Timing bei Ton mit lauter Musik, dauert aber mit einer GPU etwa so lange wie der Ton selbst - und ohne GPU um ein Vielfaches länger.", + "isolatingSpeech": "Sprache wird isoliert...", + "isolateSpeechFailed": "Die Sprache konnte nicht isoliert werden - stattdessen wird der Originalton transkribiert.", + "detectSpeakers": "Sprecher erkennen", + "detectSpeakersHint": "Beginnt jede Zeile mit dem Sprecher, z. B. \"(speaker 0)\", mithilfe der Sortformer-Diarisierung von NVIDIA (bis zu 8 Sprecher). Funktioniert am besten mit Backends, die Zeilen beim Sprecherwechsel trennen, wie Parakeet und Cohere.", + "detectSpeakersNeedsNewerCrispAsr": "\"Sprecher erkennen\" benötigt Crisp ASR v{0} oder neuer, installiert ist aber v{1}.\n\nAktualisieren Sie Crisp ASR (Zahnrad-Schaltfläche neben der Engine) oder deaktivieren Sie \"Sprecher erkennen\".", + "xNeedsNewerCrispAsr": "{0} benötigt Crisp ASR v{1} oder neuer, installiert ist aber v{2}.\n\nDas Update jetzt herunterladen und installieren?", + "vad": "VAD", + "vadHint": "Sprachaktivitätserkennung: Nur die Sprache wird transkribiert, geschnitten dort, wo der Sprecher pausiert.\nAuto: Silero, und nur für die Engines, die es benötigen (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: immer aktiv, für jede Crisp-ASR-Engine. FireRedVAD ist am genauesten, Whisper-VAD liefert die wenigsten und saubersten Schnitte, ist aber am langsamsten.\nIndex-Echo verwendet immer Silero. --vad, --vad-model oder --chunk-seconds in den erweiterten Einstellungen haben Vorrang.", "inputLanguage": "Eingabesprache", "advancedWhisperSettings": "Erweiterte Whisper-Einstellungen", "downloadingSpeechToTextEngine": "Sprache-zu-Text-Engine wird heruntergeladen", @@ -2487,6 +2719,19 @@ "videoEncodingSettings": "TTS – Videokodierungseinstellungen", "elevenLabsSettings": "TTS – ElevenLabs-Einstellungen", "elevenLabsSettingsResetHint": "ElevenLabs-Einstellungen auf Standardwerte zurücksetzen", + "provider": "Anbieter", + "openAiCompatibleSettings": "TTS - OpenAI-kompatible Einstellungen", + "customServerUrl": "Benutzerdefinierte Server-URL", + "customServerUrlHint": "Vollständiger Sprach-Endpunkt eines OpenAI-kompatiblen Servers, verwendet wenn der Anbieter \"Custom\" ist, z. B. http://localhost:8880/v1/audio/speech", + "customModels": "Benutzerdefinierte Modelle", + "customModelsHint": "Kommagetrennte Modellnamen, die angeboten werden, wenn der Anbieter \"Custom\" ist", + "customVoices": "Benutzerdefinierte Stimmen", + "customVoicesHint": "Kommagetrennte Stimmennamen, verwendet vom Anbieter \"Custom\" und von OpenRouter-Modellen, die keine Stimmenliste veröffentlichen", + "instructions": "Anweisungen", + "instructionsHint": "Optionaler Sprechstil, z. B. \"Sprich mit ruhiger, warmer Stimme\". Wird nur an Modelle gesendet, die dies unterstützen (nicht tts-1/tts-1-hd)", + "openAiSpeedHint": "Sprechgeschwindigkeit von 0.25 bis 4.0 (1.0 ist normal). Nicht jedes Modell unterstützt dies", + "outputFormat": "Ausgabeformat", + "outputFormatHint": "Vom Server angefordertes Audioformat. \"Auto\" fordert MP3 an und wechselt zu PCM bei Modellen, die nur PCM liefern (z. B. Gemini TTS)", "regenerateAudio": "Audio neu generieren", "autoContinuePlaying": "Automatisches Weiterspielen", "playLine": "Zeile abspielen", @@ -2495,6 +2740,13 @@ "addingAudioToVideoFileDotDotDot": "Audio wird zur Videodatei hinzugefügt...", "preparingMergeDotDotDot": "Zusammenführung wird vorbereitet...", "importVoiceDotDotDot": "Stimme importieren...", + "renameVoiceDotDotDot": "Stimme umbenennen...", + "renameVoiceTitle": "Stimme umbenennen", + "voiceXCouldNotBeRenamedX": "Stimme '{0}' konnte nicht umbenannt werden: {1}", + "deleteVoiceDotDotDot": "Stimme löschen...", + "deleteVoiceTitle": "Stimme löschen", + "deleteVoiceXQuestion": "Stimme '{0}' löschen?\n\nDie Referenzaufnahme und ihre Dateien werden von der Festplatte entfernt.", + "voiceXCouldNotBeDeletedX": "Stimme '{0}' konnte nicht gelöscht werden: {1}", "voiceImportSuccessTitle": "Stimme importiert", "voiceXImported": "Stimme \"{0}\" erfolgreich importiert", "voiceXCouldNotBeImported": "Stimme '{0}' konnte nicht importiert werden - siehe Protokoll für Details", @@ -2504,6 +2756,49 @@ "dropAudioFileHereToImportVoice": "Audiodatei hier ablegen, um Stimme zu importieren", "dropAudioFileHereHint": ".wav oder .mp3", "voiceCloneTranscriptTitle": "Transkript des Audios eingeben (für Stimmklonen erforderlich)", + "voiceManagerTitle": "TTS - Stimmenverwaltung", + "voiceManagerDotDotDot": "Stimmenverwaltung...", + "voiceManagerMenuItem": "TTS-Stimmenverwaltung...", + "speakFromCurrentLineTitle": "Ab aktueller Zeile vorlesen", + "speakFromCurrentLineDotDotDot": "Ab aktueller Zeile vorlesen...", + "speakFromCurrentLineHint": "Liest die Zeilen nacheinander vor, beginnend bei der aktuellen Zeile. Drücken Sie Esc oder klicken Sie auf eine andere Zeile, um anzuhalten.", + "stopSpeaking": "Vorlesen beenden", + "speakingLineX": "Zeile {0} wird vorgelesen... (Esc zum Beenden)", + "playWithSpeechTitle": "Mit Sprachausgabe abspielen", + "playWithSpeechDotDotDot": "Mit Sprachausgabe abspielen...", + "playWithSpeechHint": "Spielt das Video ab und spricht jede Zeile, wenn das Video sie erreicht. Pausieren und springen Sie wie gewohnt; drücken Sie Esc zum Beenden.", + "lowerVideoVolumeWhileSpeaking": "Videolautstärke während der Sprachausgabe absenken", + "pauseVideoWhenSpeechRunsLate": "Video pausieren, wenn die Sprache in die nächste Zeile hineinläuft", + "waitingForSpeechLineX": "Sprache für Zeile {0} wird erzeugt... (Esc zum Beenden)", + "voiceKindClone": "Geklonte Stimme", + "voiceKindPreset": "Integriert", + "voiceKindModel": "Stimmenmodell", + "voiceKindOnline": "Online", + "transcript": "Transkript", + "transcriptRequiredHint": "Erforderlich - die Engine liest dieses Transkript der Aufnahme (ref-text) beim Klonen", + "transcriptOptionalHint": "Optional - ein genaues Transkript der Aufnahme verbessert das Klonen", + "saveTranscript": "Transkript speichern", + "searchVoices": "Stimmen suchen", + "loadingVoicesDotDotDot": "Stimmen werden geladen...", + "noVoicesForEngine": "Keine Stimmen - importieren Sie eine Aufnahme oder laden Sie ein Stimmenpaket herunter", + "noVoicesMatchFilter": "Keine Stimmen entsprechen der Suche", + "copyVoiceTo": "Stimme kopieren nach", + "copyVoiceToDotDotDot": "Stimme in Engine kopieren...", + "copyingVoiceXToYDotDotDot": "Stimme '{0}' wird nach {1} kopiert...", + "voiceXCopiedToY": "Stimme '{0}' nach {1} kopiert", + "voiceXCouldNotBeCopiedToY": "Stimme '{0}' konnte nicht nach {1} kopiert werden - siehe Protokoll für Details", + "voiceXAlreadyExistsInYContinue": "Eine Stimme namens '{0}' existiert bereits in {1}.\n\nTrotzdem kopieren?", + "openVoicesFolder": "Stimmenordner öffnen", + "downloadVoicePacksDotDotDot": "Stimmenpakete herunterladen...", + "downloadVoicePacksTitle": "TTS - Stimmenpakete herunterladen", + "voicePackIntro": "Stimmenpakete sind Sammlungen kurzer, sauberer Aufnahmen mit Transkripten, bereit zum Klonen. Jedes Paket wird in die gewählte Engine importiert (bereits vorhandene Stimmen werden übersprungen) und enthält eine ATTRIBUTION.txt mit Lizenz und Quellen.", + "voicePackDetailsXVoicesYSizeZLicense": "{0} Stimmen · {1} · {2}", + "installToEngine": "In Engine installieren", + "downloadAndInstall": "Herunterladen und installieren", + "selectAtLeastOneVoicePack": "Wählen Sie mindestens ein Stimmenpaket aus", + "downloadingXDotDotDot": "{0} wird heruntergeladen...", + "installingXDotDotDot": "{0} wird installiert...", + "xVoicesInstalledYSkipped": "{0} Stimmen installiert ({1} bereits vorhanden)", "useSpeechToTextDotDotDot": "Sprache-zu-Text verwenden...", "autoCastMenuItem": "Stimmen im Video finden und klonen...", "autoCastSpeakersTitle": "Im Video gefundene Stimmen", @@ -2522,7 +2817,7 @@ "cloneVoicePerLinePreparing": "Die Stimme jeder Zeile wird aus dem Video übernommen...", "cloneVoicePerLineNeedsVideo": "Zum Klonen der Stimme jeder Zeile wird das Video benötigt, zu dem der Untertitel gehört. Öffnen Sie das Video und versuchen Sie es erneut.", "cloneVoicePerLineNoClips": "Es konnte kein Audio aus dem Video übernommen werden, es gibt also nichts zum Klonen. Prüfen Sie, ob das Video eine Tonspur hat.", - "cloneVoicePerLineNeedsOriginalSubtitleX": "{0} kann eine Zeile nur klonen, wenn bekannt ist, was im Video an dieser Zeile gesagt wird - das kommt aus dem Untertitel in der Originalsprache. Es ist kein Originaluntertitel geladen, daher würde jede Zeile von der ersten importierten Stimme statt von der Stimme im Video gesprochen.\n\nÖffnen Sie den Originaluntertitel (Datei > Original öffnen...) neben der Übersetzung und erzeugen Sie ihn dann erneut.", + "cloneVoicePerLineTranscribeClipsXYZ": "{0} kann eine Zeile nur klonen, wenn bekannt ist, was im Video an dieser Zeile gesagt wird. Das ist für {1} von {2} Zeilen nicht bekannt - normalerweise stammt es aus dem Untertitel in der Originalsprache (Datei > Original öffnen...).\n\nDiese Zeilen jetzt mit Sprache-zu-Text aus dem Video transkribieren?\n\nJa: Wählen Sie die Engine und die im Video gesprochene Sprache, und die Referenzclips werden transkribiert, bevor die Sprache erzeugt wird.\nNein: Trotzdem erzeugen - diese Zeilen werden von einer gewöhnlichen Stimme statt der Stimme im Video gesprochen.", "voiceCloneConsentTitle": "Stimmklonen - bevor Sie beginnen", "voiceCloneConsentHeader": "Sie sind dabei, eine Stimme zu klonen", "voiceCloneConsentIntro": "Beim Klonen wird die Stimme einer realen Person kopiert. Das ist vielerorts mit Regeln verbunden und in der EU mit rechtlichen Pflichten, die Sie treffen, nicht Subtitle Edit. Bitte lesen Sie dies einmal durch.", @@ -2539,10 +2834,29 @@ "advancedTtsSettings": "Erweiterte TTS-Einstellungen", "advancedTtsAudioProcessing": "Audiobearbeitung", "advancedTtsOutput": "Ausgabe", + "advancedTtsVoiceCloning": "Stimmenklonen", + "cleanCloneReferences": "Referenzen für Stimmenklonen bereinigen (Sidon)", + "cleanCloneReferencesDescription": "Entfernt Musik, Rauschen und Hall aus dem Ton, von dem eine Stimme geklont wird: aus dem Video entnommene Clips und in der Stimmenverwaltung importierte Aufnahmen. Verwendet das Sidon-Sprachrestaurierungsmodell über audio.cpp (940 MB Download). Die geklonte Stimme übernimmt den Hintergrund nicht mehr, aber sehr leise oder überlappende Sprache kann dumpf klingen.", + "cleaningCloneReferencesDotDotDot": "Referenzen für Stimmenklonen werden bereinigt...", + "downloadSidonTitle": "Sidon herunterladen?", + "downloadSidonQuestionX": "Zum Bereinigen der Referenzen für Stimmenklonen wird das Sidon-Sprachrestaurierungsmodell ({0}) benötigt.\n\nJetzt herunterladen? Ohne es werden die Referenzen unverändert verwendet.", "proAudioPostProcessing": "Pro-Audio-Nachbearbeitung", "proAudioPostProcessingDescription": "Wendet EQ-Wärme, Noise Gate, Kompression, Lautheitsnormalisierung (-16 LUFS) und Ein-/Ausblenden auf jedes Segment an.", + "generatingSpeechSegmentXOfY": "Sprache wird erzeugt: Segment {0} von {1}", + "adjustingSpeedSegmentXOfY": "Geschwindigkeit wird angepasst: Segment {0} von {1}", + "mergingAudioSegmentXOfY": "Audio wird zusammengeführt: Segment {0} von {1}", + "postProcessingSegmentXOfY": "Nachbearbeitung: Segment {0} von {1}", "audioDucking": "Audio-Ducking", "audioDuckingDescription": "Reduziert die Lautstärke des Original-Videoaudios und mischt es mit dem TTS-Audio, sodass die Original-Tonspur noch leise hörbar ist.", + "removeOriginalSpeech": "Originalsprache entfernen (langsam)", + "removeOriginalSpeechDescription": "Behält Musik und Soundeffekte des Originalvideos, entfernt aber die Sprache und mischt die neue Sprache darüber. Dauert mit einer GPU etwa so lange wie das Video selbst und ohne GPU um ein Vielfaches länger. Bei aktiviertem Audio-Ducking gilt dessen Lautstärke für Musik und Effekte. Gilt nur, wenn die Sprache zur Videodatei hinzugefügt wird.", + "removingOriginalSpeech": "Originalsprache wird entfernt...", + "removeOriginalSpeechFailed": "Die Originalsprache konnte nicht entfernt werden - die Sprache wurde ohne diese Entfernung zum Video hinzugefügt.", + "speechRemovalModel": "Modell", + "speechRemovalModelDescription": "Beste Qualität erhält am meisten von Musik und Soundeffekten. Schnell ist etwa dreimal so schnell, wobei etwas mehr Musik verloren geht.", + "speechRemovalBestQuality": "Beste Qualität (Mel-Band RoFormer)", + "speechRemovalFast": "Schnell (HTDemucs)", + "videoTruncatedWarning": "Das Bild in der neuen Videodatei endet nach {0}, das Originalvideo ist aber {1} lang - das Bild friert ein, während der Ton weiterläuft.\n\nDie Datei wurde behalten. Siehe error-log.txt im Subtitle Edit-Datenordner für die ffmpeg-Ausgabe.", "originalVolumePercent": "Originallautstärke %", "vadSilenceCompression": "VAD-Stille-Kompression", "vadSilenceCompressionDescription": "Verkürzt Pausen zwischen Wörtern vor der Tempoänderung. Verwendet Voice Activity Detection, um nur Stillelücken zu komprimieren, während die Sprache unberührt bleibt. Dies ist der bevorzugte erste Schritt – er reduziert die Dauer ohne jeglichen Qualitätsverlust.", @@ -2625,7 +2939,9 @@ "timeCodeFormatColon": "Timecode-Format:", "shotChangesList": "Liste der Szenenwechsel", "shotChangesClearQuestion": "Sind Sie sicher, dass Sie alle Szenenwechsel löschen möchten?", - "deleteSelectedShotChangeQuestion": "Sind Sie sicher, dass Sie den ausgewählten Szenenwechsel löschen möchten?" + "deleteSelectedShotChangeQuestion": "Sind Sie sicher, dass Sie den ausgewählten Szenenwechsel löschen möchten?", + "shotChanges": "Szenenwechsel", + "exportShotChanges": "Szenenwechsel exportieren" }, "chapters": { "title": "Kapitel", @@ -2655,7 +2971,6 @@ "scaleTimesDescription": "Jede Kapitelzeit von einer Bildrate auf eine andere skalieren.", "fromFrameRate": "Von", "toFrameRate": "Bis", - "apply": "Anwenden", "writeToVideo": "In Video schreiben...", "writeToVideoTitle": "Kapitel in Video schreiben", "writeToVideoDescription": "Die Kapitel werden in eine Kopie der Videodatei geschrieben. Es wird nichts neu kodiert, daher geht dies schnell und verlustfrei.", @@ -2665,7 +2980,6 @@ "writtenToX": "Kapitel geschrieben nach {0}", "unableToWriteChapters": "Kapitel konnten nicht in die Videodatei geschrieben werden.", "chaptersSavedToX": "Kapitel gespeichert unter {0}", - "noVideoLoaded": "Kein Video geladen", "emptyListCallToAction": "Noch keine Kapitel - fügen Sie eines an der Videoposition hinzu oder importieren Sie sie aus einem Video oder einer Datei." }, "videoOcr": { @@ -2690,10 +3004,10 @@ "runningOcrXY": "OCR läuft... {0}/{1}", "noLinesFoundTitle": "Keine Untertitel gefunden", "noLinesFoundMessage": "Im Scanbereich wurde kein Text gefunden - passen Sie Scanbereich, Engine oder minimale Helligkeit an.", + "ocrStoppedEarlyMessage": "Die OCR-Engine hat angehalten, bevor alle Frames gelesen wurden, daher werden die bisher gefundenen Zeilen behalten und der Rest fehlt.{0}{0}{1}", "linesFoundX": "{0} Zeilen gefunden", "refiningTimingXY": "Timing wird verfeinert... {0}/{1}", "fixOcrErrors": "OCR-Fehler korrigieren", - "dictionary": "Wörterbuch", "editLineX": "Zeile {0} bearbeiten", "downloadDictionaryHint": "Ein Rechtschreibwörterbuch herunterladen...", "framesPerSecondHint": "Wie viele Frames pro Sekunde durchsucht werden. 5 deckt normale Untertitel ab; höhere Werte erfassen sehr kurze Zeilen und verbessern die Gruppierung, kosten aber mehr OCR-Zeit.", @@ -2710,7 +3024,58 @@ "testOcr": "Aktuellen Frame testen", "testOcrRunning": "Teste OCR auf aktuellem Frame...", "testOcrResultX": "Testergebnis: {0}", - "testOcrNoTextFound": "Test: kein Text im Scanbereich gefunden" + "testOcrNoTextFound": "Test: kein Text im Scanbereich gefunden", + "engineSettings": "OCR-Engine-Einstellungen", + "engineBuiltIn": "Im Betriebssystem integriert", + "engineExternalServer": "Externer Server (außerhalb von Subtitle Edit installiert und verwaltet)", + "engineCloudApi": "Cloud-API (erfordert einen API-Schlüssel)", + "engineNothingToInstall": "Nichts zu installieren", + "engineModelsMissing": "Engine installiert, Modelle fehlen", + "website": "Webseite" + }, + "backgroundMusic": { + "title": "Hintergrundmusik generieren", + "generateBackgroundMusicDotDotDot": "Hintergrundmusik generieren...", + "preset": "Voreinstellung", + "prompt": "Prompt", + "tempoBpm": "Tempo (BPM)", + "generateSeconds": "Generiere (Sekunden)", + "seed": "Seed", + "randomSeed": "Zufall", + "outputLength": "Ausgabelänge", + "outputLengthVideoX": "{0} (Videolänge – die Musik wird nahtlos wiederholt)", + "musicVolumePercent": "Musiklautstärke (%)", + "removeExistingAudioTracks": "Vorhandene Tonspuren entfernen", + "originalAudioVolumePercent": "Original-Lautstärke (%)", + "saveAudioDotDotDot": "Audio speichern...", + "addToVideoDotDotDot": "Zum Video hinzufügen...", + "engineInfo": "ACE-Step 1.5 Turbo über audio.cpp (MIT-Lizenz) - läuft lokal", + "presetCooking": "Kochen / Backen", + "presetTech": "Technik / Gadget-Review", + "presetForest": "Wald / Natur", + "presetRelaxingPiano": "Relaxing Piano", + "presetLofiVlog": "Lo-Fi Vlog", + "presetCorporate": "Imagevideo / Tutorial", + "loadingModel": "Lade Modell...", + "composing": "Wird erstellt...", + "generatingAudio": "Audio wird generiert...", + "decodingAudio": "Audio wird dekodiert...", + "creatingLoop": "Nahtloser Loop wird erstellt...", + "resultLoopXYZ": "Loop: {0} bei {1} BPM, Naht-Übereinstimmung {2}%", + "resultNoLoopX": "Musik bereit: {0}", + "addingMusicToVideo": "Musik wird zum Video hinzugefügt...", + "downloadModelTitle": "Musik-Modell herunterladen?", + "downloadModelQuestionX": "Für die Musikgenerierung wird das Modell \"ACE-Step 1.5\" ({0}) benötigt.\n\nModell jetzt herunterladen?", + "downloadingModel": "Modell \"ACE-Step 1.5\" wird heruntergeladen...", + "saveAudioTitle": "Speichere Hintergrundmusik", + "audioFileSavedX": "Audiodatei gespeichert: {0}", + "unableToGenerateMusic": "Musik konnte nicht generiert werden", + "unableToAddMusicToVideo": "Musik konnte nicht zum Video hinzugefügt werden", + "outputLengthTextToSpeech": "Folgt der generierten Sprache – die Musik wird nahtlos wiederholt und automatisch abgesenkt, wenn gesprochen wird.", + "addBackgroundMusic": "Hintergrundmusik hinzufügen", + "addBackgroundMusicHint": "Generiert Musik lokal mit ACE-Step 1.5 und mischt sie unter die Sprache – automatische Lautstärkeabsenkung bei Sprache.", + "generatingBackgroundMusicDotDotDot": "Hintergrundmusik wird generiert...", + "mixingBackgroundMusicDotDotDot": "Hintergrundmusik wird gemischt..." }, "goToVideoPosition": "Zur Videoposition gehen", "goToVideoPositionDotDotDot": "Zur Videoposition gehen...", @@ -2721,10 +3086,47 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "Sekundären Untertitel auf Videoplayer, öffnen...", "openSecondarySubtitleOnVideoPlayer": "Sekundärer Untertitel (auf Videoplayer)", "removeSecondarySubtitleOnVideoPlayer": "Sekundären Untertitel auf Videoplayer entfernen", + "editSecondarySubtitleSettings": "Einstellungen für zweiten Untertitel bearbeiten", + "editSecondarySubtitleSettingsDotDotDot": "Einstellungen für zweiten Untertitel bearbeiten...", + "secondarySubtitleRememberSettings": "Diese Einstellungen merken", + "secondarySubtitleDoNotShowAgain": "Diesen Dialog nicht mehr anzeigen", + "secondarySubtitleJustifyLines": "Zeilen ausrichten", "openRecentVideo": "Zuletzt verwendetes Video öffnen", "clearRecentVideos": "Zuletzt verwendete Videos leeren", "cutVideoTitle": "Video schneiden", "cutVideoDotDotDot": "Video schneiden...", + "remuxVideoTitle": "Video remuxen", + "remuxVideoDotDotDot": "Video remuxen...", + "remuxVideoInputVideo": "Eingabevideo:", + "remuxVideoMultipleTracksRequiresMkv": "Mehrere Audio- oder Untertitelspuren erfordern den MKV-Container. Das Ausgabeformat wurde automatisch auf .mkv umgestellt.", + "remuxVideoOutputFormat": "Ausgabeformat:", + "remuxVideoOutputFile": "Ausgabedatei:", + "remuxVideoRemuxing": "Video und Audio werden remuxt...", + "remuxVideoFinalizing": "Ausgabedatei wird abgeschlossen (Index wird an den Anfang verschoben)...", + "remuxVideoCompleted": "Video erfolgreich remuxt.", + "remuxVideoFailed": "Video konnte nicht remuxt werden.", + "remuxVideoPleaseSelectBoth": "Bitte wählen Sie sowohl Video- als auch Audiodateien aus.", + "remuxVideoAssRequiresMkv": "ASS/SSA-Untertitel erfordern den MKV-Container, um alle Formatierungen und Stile zu erhalten.", + "remuxVideoSccRequiresMov": "Scenarist-Untertitel (.scc) werden als CEA-608-Closed-Captions eingebettet, die den MOV- oder MPG-Container erfordern. Das Ausgabeformat wurde automatisch auf .mov umgestellt.", + "remuxVideoSccNotWithWebM": "Scenarist-Closed-Captions (.scc) benötigen den MOV-Container, der das VP9/AV1-Video einer .webm-Datei nicht aufnehmen kann. Entfernen Sie die .scc-Datei oder konvertieren Sie sie in ein anderes Untertitelformat.", + "remuxVideoMpgMaxTwoCaptionTracks": "Eine .mpg-Datei enthält höchstens zwei Closed-Caption-Spuren (CC1 und CC3) - entfernen Sie Untertiteldateien, sodass eine oder zwei übrig bleiben.", + "remuxVideoMccRequiresMpg": "MacCaption-Untertitel (.mcc) werden als CEA-608/708-Closed-Captions im MPEG-2-Video eingebettet, was den MPG-Container erfordert. Das Ausgabeformat wurde automatisch auf .mpg umgestellt.", + "remuxVideoMpgReencodeVideoX": "Closed Captions in einer .mpg-Datei benötigen MPEG-2-Video, und das Video ist {0}. Das Video in MPEG-2 neu kodieren? Dies dauert länger und verringert die Qualität ein wenig.", + "remuxVideoFileHasNoAudioX": "\"{0}\" hat keine Audiospur und kann daher nicht als Audioquelle verwendet werden.", + "remuxVideoAddingClosedCaptions": "Closed Captions werden hinzugefügt...", + "remuxVideoSelectAudioTrack": "Audiospur auswählen", + "remuxVideoSelectAudioTrackFor": "Audiospur für {0} auswählen", + "remuxVideoSelectAudioTrackPrompt": "Die Datei '{0}' enthält {1} Audiospuren. Bitte wählen Sie die zu remuxende Audiospur aus:", + "remuxVideoVideoFile": "Video", + "remuxVideoAudioFile": "Audio", + "remuxVideoAudioFiles": "Audiodateien:", + "remuxVideoSubtitleFiles": "Untertiteldateien (optional, Soft-Untertitel):", + "remuxVideoSelectAudioTrackDotDotDot": "Audiospur auswählen...", + "remuxVideoFilesX": "{0} Dateien", + "remuxVideoMixAudio": "Audio in eine Spur mischen", + "remuxVideoVolumePercent": "Lautstärke %:", + "remuxVideoVolumeX": "Lautstärke {0}%", + "remuxVideoFastStart": "Für Web-Streaming optimieren (Index nach vorne verschieben - langsamer)", "embedSubtitlesDotDotDot": "Eingebettete Untertitel hinzufügen/entfernen...", "generateTimeCodes": "Zeitstempel erzeugen", "checkeredImage": "Schachbrett-Bild", @@ -2734,6 +3136,34 @@ "cutVideoSplitSegments": "Segmente einzeln speichern", "cutVideoAlsoCutSubtitle": "Untertitel ebenfalls schneiden", "cutVideoSubtitleFileGeneratedX": "Untertiteldatei erzeugt: {0}", + "cutVideoTransition": "Übergang zwischen Segmenten", + "cutVideoTransitionDurationSeconds": "Dauer (Sekunden)", + "cutVideoFadeInSeconds": "Aus Schwarz einblenden am Anfang (Sekunden)", + "cutVideoFadeOutSeconds": "Zu Schwarz ausblenden am Ende (Sekunden)", + "cutVideoPreviewTransition": "Übergang in der Vorschau", + "cutVideoPreviewTransitionTitle": "Übergangsvorschau", + "cutVideoPreviewNeedsJoin": "Es gibt keine Verbindungsstelle für die Vorschau - fügen Sie mindestens zwei Segmente zum Zusammenführen hinzu oder ein Segment, das aus der Mitte herausgeschnitten wird.", + "cutVideoTransitionInfoX": "Jeder Übergang überlappt die Teile, die er verbindet, daher wird die Ausgabe pro Verbindungsstelle {0} Sekunden kürzer. Ein geschnittener Untertitel wird entsprechend neu getimt.", + "cutVideoTransitionFade": "Überblenden", + "cutVideoTransitionFadeBlack": "Über Schwarz blenden", + "cutVideoTransitionFadeWhite": "Über Weiß blenden", + "cutVideoTransitionFadeGrays": "Über Grau blenden", + "cutVideoTransitionDissolve": "Auflösen", + "cutVideoTransitionWipeLeft": "Wischen nach links", + "cutVideoTransitionWipeRight": "Wischen nach rechts", + "cutVideoTransitionWipeUp": "Wischen nach oben", + "cutVideoTransitionWipeDown": "Wischen nach unten", + "cutVideoTransitionSlideLeft": "Schieben nach links", + "cutVideoTransitionSlideRight": "Schieben nach rechts", + "cutVideoTransitionSlideUp": "Schieben nach oben", + "cutVideoTransitionSlideDown": "Schieben nach unten", + "cutVideoTransitionSmoothLeft": "Weich nach links", + "cutVideoTransitionSmoothRight": "Weich nach rechts", + "cutVideoTransitionCircleOpen": "Kreis öffnen", + "cutVideoTransitionCircleClose": "Kreis schließen", + "cutVideoTransitionRadial": "Radial", + "cutVideoTransitionPixelize": "Verpixeln", + "cutVideoTransitionBlur": "Unschärfe", "importCurrentSubtitle": "Aktuellen Untertitel importieren", "addRemoveEmbeddedSubtitlesTitle": "Eingebettete Untertitel hinzufügen/entfernen", "addRemoveEmbeddedSubtitlesMp4Title": "Eingebettete Untertitel hinzufügen/entfernen (MP4)", @@ -2749,6 +3179,7 @@ "embeddedTrackGeneratingVideoXY": "Video wird erzeugt... {0}% {1}", "embeddedTrackGeneratingVideo": "Video wird erzeugt...", "mp4FilesFilter": "MP4-Dateien", + "embeddedTracksPickVideoHint": "Wählen Sie eine Videodatei oder ziehen Sie eine hierher, um ihre Untertitelspuren anzuzeigen.", "viewMatroskaTrackX": "Matroska-Spur anzeigen - {0}", "resolutionSeparator": "x", "openFromUrlTitle": "Videodatei von URL öffnen", @@ -2795,12 +3226,15 @@ "reEncodeGeneratingDone": "Erzeugung abgeschlossen", "reEncodeGeneratedFilesX": "Erzeugte Dateien ({0}):", "reEncodeFfmpegParameters": "ffmpeg-Parameter", + "analyzingVideoX": "Video wird analysiert... {0}% {1}", + "analyzingVideoXofY": "Video {0}/{1} wird analysiert... {2}% {3}", + "backgroundImageFileNotSelected": "Keine Hintergrundbilddatei ausgewählt", + "backgroundImageFileDoesNotExistX": "Hintergrundbilddatei existiert nicht: {0}", "voices": "Stimmen", "presets": "Vorgaben", "talkerX": "Sprecher {0}", "baseModel": "Basismodell", "turboModel": "Turbo-Modell", - "ttsUpdateX": "{0} aktualisieren", "ttsEngineNotInstalled": "{0} nicht installiert", "ttsEngineUpdateAvailable": "{0} - Update verfügbar", "ttsEngineTooOldUpdateRequired": "{0} zu alt - Update erforderlich", @@ -2815,7 +3249,7 @@ "speechToTextSelectedLinesDotDotDot": "Sprache-zu-Text für ausgewählte Zeilen...", "speechToTextNewSelectionDotDotDot": "Sprache-zu-Text für neue Auswahl...", "seekSilence": "Stille suchen", - "minSilenceDurationSeconds": "Mindestlänge der Stille (Sekunden)", + "minSilenceDurationSeconds": "Mindestdauer der Stille (Sekunden)", "maxSilenceVolume": "Max. Stille-Lautstärke (0,0 - 1,0):", "guessTimeCodesDotDotDot": "Zeitstempel ermitteln...", "seekSilenceDotDotDot": "Stille suchen...", @@ -2823,10 +3257,17 @@ "cloneVoiceTo": "Stimme klonen nach", "cloneVoiceNameTitle": "Name der neuen Stimme", "cloneVoiceExtractFailed": "Für die ausgewählte Zeile konnte kein Audio extrahiert werden.", + "lineXHasNoDuration": "Zeile {0} hat keine Dauer (die Endzeit liegt nicht nach der Startzeit), daher gibt es keinen Ton zum Extrahieren.", + "audioClipsSkippedLinesX": "Für diese Zeilen konnte kein Ton extrahiert werden, daher wurden sie übersprungen: {0}", "toggleShotChange": "Szenenwechsel umschalten", "resetWaveformZoomAndSpeed": "Wellenform-Zoom und -Geschwindigkeit zurücksetzen", "showOriginalSubtitle": "Original-Untertitel anzeigen", "timelineGroupTracksBy": "Untertitelspuren gruppieren nach", + "timelineShowThumbnails": "Video-Miniaturansichten anzeigen", + "showSpeechOnly": "Nur Sprache anzeigen (langsam zu erzeugen)", + "isolatingSpeechForWaveformX": "Sprache für die Wellenform wird isoliert... {0}", + "isolatingSpeechForWaveformFailed": "Die Sprache für die Wellenform konnte nicht isoliert werden - siehe Werkzeugprotokoll", + "speechOnlyWaveformReady": "Die Wellenform zeigt jetzt nur Sprache", "showOnlyWaveform": "Nur Wellenform anzeigen", "showOnlySpectrogram": "Nur Spektrogramm anzeigen", "showWaveformAndSpectrogram": "Wellenform und Spektrogramm anzeigen", @@ -2859,6 +3300,7 @@ "adjustSelectedLinesAndForward": "Ausgewählte Zeile(n) und weiter", "toFrameRate": "zu Bildrate", "fromFrameRate": "von Bildrate", + "videoXFrameRateY": "{0} - {1} fps", "adjustAllTimes": "Alle Zeiten anpassen (früher/später anzeigen)", "showEarlier": "Früher anzeigen", "showLater": "Später anzeigen", @@ -2866,12 +3308,11 @@ "setSyncPointViaVideo": "Synchronisationspunkt über Video setzen...", "syncPointTimeCode": "Zeitstempel des Synchronisationspunkts", "syncPoints": "Synchronisierungspunkte", - "pointSync": "Punkt-Synchronisation...", - "syncPointCandidateAfterInfo": "Lines followed by {0}+ seconds of silence are highlighted - they often make reliable sync points", + "pointSync": "Punkt-Synchronisation", + "syncPointCandidateAfterInfo": "Zeilen mit anschließender Stille von {0}+ Sekunden sind hervorgehoben – sie dienen oft als verlässliche Synchronisationspunkte.", "pointSyncViaOther": "Punkt-Synchronisation über anderen Untertitel", "gapAfter": "Pause danach", - "syncPointCandidateInfo": "Zeilen, auf die mindestens {0}+ Sekunden Stille folgt, werden hervorgehoben – diese eignen sich oft als zuverlässige Synchronisationspunkte.", - "adjustAllShortcuts": "Tastenkürzel:\n\n• Umschalt + Links/Rechts: 10 ms verschieben\n• Strg + Links/Rechts: 100 ms verschieben\n• Alt + Links/Rechts: 500 ms verschieben", + "adjustAllShortcuts": "Tastenkombination:\n\n• Umschalt + Links/Rechts: 10 ms verschieben\n• Strg + Links/Rechts: 100 ms verschieben\n• Alt + Links/Rechts: 500 ms verschieben", "adjustAllShortcutsFrames": "Tastenkombinationen:\n\n• Umschalt + Links/Rechts: 1 Frame verschieben\n• Strg + Links/Rechts: 10 Frames verschieben\n• Alt + Links/Rechts: 1 Sekunde verschieben", "offsetInSeconds": "Versatz in Sekunden", "speedFactor": "Geschwindigkeitsfaktor", @@ -2890,6 +3331,7 @@ "lineMerge": "Zeilen zusammenführen", "delayInSecondsBetweenRequests": "Verzögerung in Sekunden zwischen Anfragen", "maxBytesPerRequest": "Max. Bytes pro Anfrage", + "keepMusicLinesUntranslated": "Zeilen in Musiksymbolen (♪ ... ♪) nicht übersetzen", "promptText": "Prompt-Text", "resetPromptToDefault": "Prompt auf Standard zurücksetzen", "translateEachLineSeparately": "Jede Zeile separat übersetzen", @@ -2903,11 +3345,10 @@ "readyToTranslate": "Bereit zum Übersetzen", "translating": "Übersetzen...", "translationComplete": "Übersetzung abgeschlossen", + "translateInPlaceNoOriginal": "Direkt übersetzen (kein Original erstellen)", "translationCancelled": "Übersetzung abgebrochen", "swapLanguages": "Quell- und Zielsprache tauschen", "xIsAlreadyDownloadedReDownload": "{0} ist bereits heruntergeladen. Erneut herunterladen?", - "advancedDotDotDot": "Erweitert...", - "advancedSettings": "Erweiterte Einstellungen", "advancedSettingsSubtitle": "Batch-, Kontext- und Sampling-Optionen für die erweiterte llama.cpp-Engine", "context": "Kontext", "synopsis": "Inhaltsangabe", @@ -2931,6 +3372,7 @@ "useOnlyExtraServerParametersHint": "llama-server mit den obigen Parametern statt mit der eigenen Abstimmung von Subtitle Edit starten - nur Modell, Host und Port werden weiterhin gesetzt", "serverRunningAtX": "Server läuft auf {0}", "customPromptHint": "Eigene Anweisungen ({0} = Quellsprache, {1} = Zielsprache); leer = integrierter Prompt", + "editTranslationHint": "Klicken Sie auf die Übersetzung der ausgewählten Zeile, um sie zu bearbeiten (Enter speichert, Esc bricht ab)", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp erfordert das Herunterladen der llama-server-Engine und eines Übersetzungsmodells. Jetzt herunterladen?", "llamaCppDownloadEnginePrompt": "llama.cpp erfordert das Herunterladen der llama-server-Engine. Jetzt herunterladen?", "llamaCppDownloadModelPrompt": "llama.cpp erfordert das Herunterladen des ausgewählten Übersetzungsmodells. Jetzt herunterladen?" @@ -3026,8 +3468,8 @@ "useDoNotBreakAfterList": "Liste \"Nicht umbrechen nach\" verwenden", "newEmptyDefaultMs": "Standarddauer neuer Untertitel (ms)", "timeCodeUpDownStepMs": "Schrittweite für Zeit hoch/runter (ms)", - "moveSelectedLinesStepMs": "Schrittweite für Tastenkürzel \"Ausgewählte Zeilen verschieben\" (ms)", - "moveStartEndStepMs": "Schrittweite für Tastenkürzel \"Start/Ende verschieben\" (ms)", + "moveSelectedLinesStepMs": "Schrittweite für Tastenkombination \"Ausgewählte Zeilen verschieben\" (ms)", + "moveStartEndStepMs": "Schrittweite für Tastenkombination \"Start/Ende verschieben\" (ms)", "moveLinesShortenNeighbor": "Zeilen verschieben: Vorherige/Nächste Zeile kürzen anstatt zu überlappen", "promptBeforeDelete": "Vor dem Löschen fragen", "rememberPositionAndSize": "Fensterposition und Größe speichern", @@ -3113,8 +3555,6 @@ "videoControlsPositionText": "Anzeige Position/Dauer", "videoControlsVideoFileName": "Video-Dateiname", "videoControlsPlayerName": "Videoplayer-Name", - "showStopButton": "Stopp Knopf anzeigen", - "showFullscreenButton": "Vollbild Knopf anzeigen", "fullscreenHideControls": "Bedienelemente bei Vollbild ausblenden", "showSecondarySubtitleDialog": "Stil-Dialog beim Öffnen einer zweiten Untertiteldatei anzeigen", "rememberSecondarySubtitleFile": "Zweite Untertiteldatei merken", @@ -3122,7 +3562,7 @@ "downloadMpv": "mpv herunterladen", "downloadVlc": "VLC herunterladen", "allowSingleLetterShortcutsInTextbox": "Einzelbuchstaben-Hotkeys im Textfeld erlauben", - "allowTextNavigationShortcutsInTextbox": "Tastenkürzel auf Textnavigations-Tasten (Strg+Links/Rechts, Pos1/Ende) im Textfeld zulassen", + "allowTextNavigationShortcutsInTextbox": "Tastenkombination auf Textnavigations-Tasten (Strg+Links/Rechts, Pos1/Ende) im Textfeld zulassen", "spellCheckEnglishTreatInApostropheAsIng": "Rechtschreibprüfung: Wortendung \"in\" als \"ing\" behandeln (nur Englisch)", "goToLineNumberSetsVideoPosition": "Gehe-zu-Zeile legt auch die Videoposition fest", "adjustAllTimesRememberLineSelectionChoice": "Alle Zeiten anpassen, Auswahl der Zeilen merken", @@ -3169,10 +3609,11 @@ "timeCodeModeTime": "Zeit (hh:mm:ss,zzz)", "timeCodeModeFrames": "Frames (hh:mm:ss:ff)", "timeCodeModeFrameNumbers": "Frame-Nummern", - "useFrameMode": "Bild-Modus verwenden (hh.mm.ss.ff)", + "frameModeSnapToVideoFrames": "Zeiten auf Videoframes speichern (nicht Frames innerhalb jeder Sekunde)", "textBoxLimitNewLines": "Anzahl der Zeilen im Textfeld begrenzen", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv – Software-Rendering (langsam)", + "mpvMetalRendering": "libmpv - Metal (experimentell, Neustart erforderlich)", "mpvWidRendering": "libmpv – Natives Fenster-ID-Rendering", "waveFormsAndSpectrogramFoldersContainsX": "Die Wellenform und Spektrogramm-Ordner enthalten {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "\"Wellenform\"- und \"Spektrogramm\"-Dateien löschen?", @@ -3187,7 +3628,7 @@ "waveformExtractAudioBitRate": "Audio-Bitrate bei Extraktion (MP3/M4A)", "ffmpegUseCenterChannelOnly": "Nur Center-Kanal für 5.1-Audio verwenden (FFmpeg)", "vlcWidRendering": "libVLC - Rendering über native Fenster-ID", - "ffmpegSoftwareRendering": "FFmpeg", + "ffmpegSoftwareRendering": "FFmpeg", "downloadFfmpegLibs": "FFmpeg-Bibliotheken herunterladen (für den FFmpeg-Videoplayer)", "subtitleGridEnterKeyAction": "Aktion bei Enter im Untertitelraster", "subtitleSingleClickAction": "Einfachklick-Aktion im Untertitelraster", @@ -3246,6 +3687,7 @@ "useFocusedButtonBackgroundColor": "Hintergrundfarbe für fokussierte Schaltflächen verwenden", "focusedButtonBackgroundColor": "Hintergrundfarbe für fokussierte Schaltflächen", "forceCrLfOnSave": "CR+LF beim Speichern erzwingen (Textuntertitel)", + "linuxClipboardUseExternalTool": "Text über xclip/wl-copy kopieren (behält Akzentzeichen)", "showFormatLimitWarning": "Beim Speichern vor Überschreitung der Formatgrenzen warnen (z. B. SCC 32 Zeichen/Zeile)", "textBoxButtonShowAutoBreak": "Textfeld: Schaltfläche für automatischen Zeilenumbruch anzeigen", "textBoxButtonShowUnbreak": "Textfeld: Schaltfläche für Zeilenumbruch entfernen anzeigen", @@ -3257,7 +3699,7 @@ "waveformDoubleClickAction": "Wellenform Doppelklick-Aktion (nach Einfachklick)", "allSettings": "Alle Einstellungen", "uiScale": "UI-Skalierung (%)", - "fontScale": "Schrift skalieren (%)", + "fontScale": "Schrift-Skalierung (%)", "textSelectionOpacity": "Transparenz der Textauswahl (%)", "waveformToolbarItems": "Wellenform-Symbolleisten-Elemente", "matchIconColorToDarkTheme": "Symbolfarbe an Vordergrundfarbe des dunklen Designs anpassen", @@ -3279,7 +3721,14 @@ "waveformLoadThemeDotDotDot": "Thema laden...", "waveformExportThemeDotDotDot": "Thema exportieren...", "waveformSaveCustomThemeTitle": "Benutzerdefiniertes Thema speichern", - "waveformThemeHighContrast": "Hoher Kontrast" + "waveformThemeFileType": "Subtitle Edit-Wellenform-Design", + "waveformThemeHighContrast": "Hoher Kontrast", + "waveformThemeOceanBlue": "Ozeanblau", + "waveformThemeWarmSunset": "Warmer Sonnenuntergang", + "waveformThemeForest": "Wald", + "waveformThemeMidnightPurple": "Mitternachtslila", + "waveformThemeRetroAmber": "Retro-Bernstein", + "waveformThemeIce": "Eis" }, "shortcuts": { "searchShortcuts": "Tastenkombinationen durchsuchen...", @@ -3290,11 +3739,34 @@ "categoryVideo": "Video", "categorySync": "Synchronisation", "categoryAi": "KI", + "categoryCustom": "Benutzerdefiniert", + "editCustomShortcut": "Benutzerdefinierte Tastenkombination bearbeiten", + "customShortcutTextBoxKeyHint": "Verwenden Sie hier eine Taste mit Strg/Alt - eine einfache Taste würde im Textfeld nicht mehr tippen.", + "customShortcutNumberX": "Benutzerdefinierte Tastenkombination #{0}", + "customShortcutNumberXY": "Benutzerdefinierte Tastenkombination #{0}: {1}", + "customShortcutStep": "Schritt", + "customShortcutSteps": "Schritte", + "customShortcutStepRunCommand": "Befehl ausführen", + "customShortcutStepInsertText": "Text einfügen", + "customShortcutStepReplace": "Suchen und ersetzen", + "customShortcutInsertAtCursor": "An Cursorposition", + "customShortcutInsertAtStart": "Am Textanfang", + "customShortcutInsertAtEnd": "Am Textende", + "customShortcutSummaryRunCommandX": "Ausführen: {0}", + "customShortcutSummaryInsertXY": "\"{0}\" einfügen ({1})", + "customShortcutSummaryReplaceXY": "\"{0}\" durch \"{1}\" ersetzen", + "customShortcutSummaryReplaceRegexXY": "Regex \"{0}\" durch \"{1}\" ersetzen", + "customShortcutPickCommand": "Bitte wählen Sie einen auszuführenden Befehl aus.", + "customShortcutEnterText": "Bitte geben Sie den einzufügenden Text ein.", + "customShortcutEnterFind": "Bitte geben Sie den zu suchenden Text ein.", + "customShortcutInvalidRegexX": "Ungültiger regulärer Ausdruck: {0}", + "customShortcutStepsHint": "Schritte werden von oben nach unten ausgeführt. Textschritte wirken auf die ausgewählten Zeilen; Befehle, die ein Fenster öffnen, werden nach dessen Schließen fortgesetzt.", "activeIn": "Aktiv in", "activeInEverywhere": "Überall", "generalMergeSelectedLinesAndUnbreak": "Ausgewählte Zeilen zusammenführen und aufheben", "generalMergeSelectedLinesAndUnbreakCjk": "Ausgewählte Zeilen zusammenführen und ohne Leerzeichen aufheben (CJK)", "generalUnbreakNoSpaceCjk": "Ohne Leerzeichen aufheben (CJK)", + "generalToggleBreak": "Zeilenumbruch umschalten (umbrechen/verbinden)", "generalMergeSelectedLinesBilingual": "Ausgewählte Zeilen zweisprachig zusammenführen", "generalToggleTranslationMode": "Wechsel zum Übersetzungsmodus", "generalToggleTranslationAndOriginalInPreviews": "Übersetzung und Original in Video-/Audiovorschau umschalten", @@ -3311,10 +3783,12 @@ "generalToggleItalic": "Kursiv umschalten", "generalToggleBold": "Fett umschalten", "generalToggleUnderline": "Unterstreichung umschalten", + "generalToggleBox": "Box umschalten (EBU STL)", "fileOpen": "Öffnen", "fileOpenKeepVideo": "Öffnen (Video behalten)", "fileSave": "Speichern", "fileSaveAs": "Speichern unter", + "fileSaveOriginal": "Original speichern", "fileCompare": "Vergleichen", "fileStatistics": "Statistik", "fileImportPlainText": "Nur-Text importieren", @@ -3326,7 +3800,8 @@ "fillSelectedLinesWithClipboard": "Ausgewählte Zeilen mit Text aus Zwischenablage füllen", "listInverseSelection": "Auswahl umkehren", "listDeleteSelection": "Auswahl löschen", - "rippleDeleteSelection": "Ripple-Löschen der Auswahl", + "deleteSelectionEverywhere": "Auswahl löschen (überall)", + "rippleDeleteSelection": "Auswahl löschen und aufrücken", "assigned": "Zugewiesen", "unassigned": "Nicht zugewiesen", "pressedKeyX": "Gedrückte Taste: {0}", @@ -3334,6 +3809,7 @@ "detectKey": "Taste erkennen", "control": "Steuerung", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Shift", "controlMac": "⌃", @@ -3344,6 +3820,11 @@ "resetShortcutsDetail": "Möchten Sie alle Tastenkombinationen auf die Standardwerte zurücksetzen?", "togglePlayPause": "Abspielen/Pause", "toggleLockTimeCodes": "Sperrzeitcodes umschalten", + "toggleTimeCodeMode": "Zeitcode-Modus umschalten (Zeit/Frames/Frame-Nummern)", + "toggleScreenPrivacy": "Bildschirm-Privatsphäre umschalten (Dateinamen ausblenden, dann auch Texte)", + "screenPrivacyFileNamesHidden": "Bildschirm-Privatsphäre: Dateinamen ausgeblendet", + "screenPrivacyFileNamesAndTextsHidden": "Bildschirm-Privatsphäre: Dateinamen und Texte ausgeblendet", + "screenPrivacyOff": "Bildschirm-Privatsphäre: aus", "duplicateSelectedLines": "Zeile duplizieren", "sourceView": "Quelltext anzeigen", "addOrEditBookmark": "Lesezeichen hinzufügen oder bearbeiten", @@ -3362,6 +3843,7 @@ "moveFirstWordFromNextLineUpCurrentSubtitle": "Erstes Wort von der nächsten Zeile nach oben verschieben (aktueller Untertitel)", "moveTextFromCursorToNextAndGoToNext": "Text nach Cursorposition in nächsten Untertitel verschieben und zum nächsten gehen", "moveTextFromCursorToNextAndGoToNextAndPlay": "Text nach Cursorposition in nächsten Untertitel verschieben, zum nächsten gehen und abspielen", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "Text nach Cursorposition in nächsten Untertitel verschieben, zum nächsten gehen, abspielen und an seinem Ende pausieren", "breakAtFirstSpaceFromCursor": "Am ersten Leerzeichen ab Cursorposition umbrechen", "breakAtFirstSpaceFromCursorAndGoToNext": "Am ersten Leerzeichen ab Cursorposition umbrechen und zur nächsten gehen", "toggleFocusGridAndWaveform": "Fokus zwischen Raster und Wellenform/Spektrogramm umschalten", @@ -3391,6 +3873,7 @@ "listViewColumnTextUp": "Spalte, Text nach oben", "listViewColumnTextDown": "Spalte, Text nach unten", "autoTranslateSelectedLines": "Ausgewählte Zeilen automatisch übersetzen...", + "autoTranslateSelectedLinesNoPrompt": "Ausgewählte Zeilen automatisch übersetzen (ohne Nachfrage, letzte Engine/Sprachen verwenden)", "setAssaResolution": "ASSA-Auflösung setzen (PlayResX/PlayResY)", "setShortcutForX": "Tastenkombination für \"{0}\" festlegen", "commandFileNewKeepVideo": "Öffnen (Video behalten)", @@ -3405,7 +3888,7 @@ "exportPlainText": "Nur-Text exportieren", "toggleRightToLeft": "Rechts-nach-links umschalten", "modifySelection": "Auswahl ändern", - "adjustDurations": "Längen anpassen", + "adjustDurations": "Dauer anpassen", "applyDurationLimits": "Dauergrenzen anwenden", "batchConvert": "Stapelkonvertierung", "applyMinGap": "Minimale Anzeigezeit zwischen Untertitel", @@ -3445,6 +3928,7 @@ "textBoxItalic": "Textfeld kursiv", "textBoxBold": "Textfeld fett", "textBoxUnderline": "Textfeld unterstrichen", + "textBoxBox": "Textfeld-Box (EBU STL)", "resetWaveformZoomAndSpeed": "Wiedergabegeschwindigkeit und Wellenform-Zoom zurücksetzen", "togglePlaybackSpeed": "Wiedergabegeschwindigkeit umschalten", "playbackSpeedSlower": "Wiedergabegeschwindigkeit langsamer (Abspielrate)", @@ -3456,6 +3940,7 @@ "seekSilenceForward": "Stille vorwärts suchen", "waveformGuessStart": "Startzeit aus Wellenform schätzen", "waveformGuessEnd": "Endzeit aus Wellenform schätzen", + "waveformGuessStartAndEnd": "Start- und Endzeit aus Wellenform schätzen", "setVideoPositionCurrentSubtitleStart": "Videoposition auf den Beginn des aktuellen Untertitels setzen", "goToSubtitlePositionAndPause": "Zur Untertitelposition gehen und pausieren", "setVideoPositionCurrentSubtitleEnd": "Videoposition zwischen Start/Ende des aktuellen Untertitels umschalten", @@ -3469,6 +3954,14 @@ "surroundWith": "Umgeben mit...", "surroundWithXY": "Umschließen mit {0}/{1}", "surroundWithNumberX": "Umschließen mit #{0}", + "surroundWithBehavior": "Verhalten", + "surroundWithBehaviorToggle": "Umschalten (hinzufügen oder entfernen, falls vorhanden)", + "surroundWithBehaviorAdd": "Hinzufügen (jedes Mal)", + "surroundWithBehaviorRemove": "Entfernen (alle)", + "surroundWithBehaviorRemoveOnce": "Entfernen (jeweils eins)", + "surroundWithWorksOn": "Wirkt auf", + "surroundWithScopeSelectionOrText": "Auswahl, sonst ganzer Text", + "surroundWithScopeEachLine": "Jede Zeile", "searchVia": "Suchen über", "searchViaX": "Suchen über {0}", "searchViaNumberX": "Suchen über #{0}", @@ -3496,6 +3989,11 @@ "copySubtitlePathToClipboard": "Untertitelpfad in Zwischenablage kopieren", "copySubtitleOriginalPathToClipboard": "Untertitelpfad des Originals in Zwischenablage kopieren", "focusTextBox": "Textfeld fokussieren", + "focusSubtitleListView": "Untertitelliste fokussieren", + "focusWaveform": "Wellenform fokussieren", + "focusOriginalTextBox": "Original-Textfeld fokussieren", + "textBoxGoToStart": "Textfeld, zum Anfang gehen", + "textBoxGoToEnd": "Textfeld, zum Ende gehen", "sortByNumber": "Nach Nummer sortieren", "sortByStartTime": "Nach \"Einblenden\"-Zeit sortieren", "sortByEndTime": "Nach \"Ausblenden\"-Zeit sortieren", @@ -3533,9 +4031,9 @@ "selectionToSentenceCase": "Textfeld: Auswahl in Satzschreibweise", "selectionToggleCasing": "Textfeld: Schreibweise umschalten (GROSS -> klein -> Titelschreibweise)", "googleIt": "Google es (ausgewählter Text)", - "setActorXY": "Darsteller {0} setzen: {1}", + "setActorX": "Darsteller festlegen: {0}", "setNewActor": "Neuen Darsteller setzen...", - "setActorSlotXTitle": "Darsteller-Slot {0}", + "setStyleX": "Stil festlegen: {0}", "toggleDialogDashes": "Dialog-Bindestriche umschalten", "mergeWithLineBeforeAsDialog": "Mit Zeile davor als Dialog zusammenführen", "mergeWithLineAfterAsDialog": "Mit Zeile danach als Dialog zusammenführen", @@ -3546,7 +4044,23 @@ "moveStartOneFrameBackKeepGapPrev": "Start ein Frame zurück verschieben (Abstand zum vorherigen beibehalten, falls nah)", "moveStartOneFrameForwardKeepGapPrev": "Start ein Frame vorwärts verschieben (Abstand zum vorherigen beibehalten, falls nah)", "moveEndOneFrameBackKeepGapNext": "Ende ein Frame zurück verschieben (Abstand zum nächsten beibehalten, falls nah)", - "moveEndOneFrameForwardKeepGapNext": "Ende ein Frame vorwärts verschieben (Abstand zum nächsten beibehalten, falls nah)" + "moveEndOneFrameForwardKeepGapNext": "Ende ein Frame vorwärts verschieben (Abstand zum nächsten beibehalten, falls nah)", + "moveStartXMsBack": "Start X ms zurück verschieben (X in Einstellungen festgelegt, auch in Visueller Anpassung)", + "moveStartXMsForward": "Start X ms vorwärts verschieben (X in Einstellungen festgelegt, auch in Visueller Anpassung)", + "moveEndXMsBack": "Ende X ms zurück verschieben (X in Einstellungen festgelegt, auch in Visueller Anpassung)", + "moveEndXMsForward": "Ende X ms vorwärts verschieben (X in Einstellungen festgelegt, auch in Visueller Anpassung)", + "moveSelectedLinesXMsBack": "Ausgewählte Zeilen X ms zurück verschieben (X in Einstellungen festgelegt)", + "moveSelectedLinesXMsForward": "Ausgewählte Zeilen X ms vorwärts verschieben (X in Einstellungen festgelegt)", + "moveSelectedLinesAndForwardXMsBack": "Ausgewählte und alle nachfolgenden Zeilen X ms zurück verschieben (X in Einstellungen festgelegt)", + "moveSelectedLinesAndForwardXMsForward": "Ausgewählte und alle nachfolgenden Zeilen X ms vorwärts verschieben (X in Einstellungen festgelegt)", + "moveAllLinesXMsBack": "Alle Zeilen X ms zurück verschieben (X in Einstellungen festgelegt)", + "moveAllLinesXMsForward": "Alle Zeilen X ms vorwärts verschieben (X in Einstellungen festgelegt)", + "moveSelectedLinesCustomMsBack": "Ausgewählte Zeilen verschieben, benutzerdefinierte Millisekunden ({0:#,###,##0}) zurück, {1}", + "moveSelectedLinesCustomMsForward": "Ausgewählte Zeilen verschieben, benutzerdefinierte Millisekunden ({0:#,###,##0}) vorwärts, {1}", + "moveSelectedLinesAndForwardCustomMsBack": "Ausgewählte und alle nachfolgenden Zeilen verschieben, benutzerdefinierte Millisekunden ({0:#,###,##0}) zurück, {1}", + "moveSelectedLinesAndForwardCustomMsForward": "Ausgewählte und alle nachfolgenden Zeilen verschieben, benutzerdefinierte Millisekunden ({0:#,###,##0}) vorwärts, {1}", + "moveAllLinesCustomMsBack": "Alle Zeilen verschieben, benutzerdefinierte Millisekunden ({0:#,###,##0}) zurück, {1}", + "moveAllLinesCustomMsForward": "Alle Zeilen verschieben, benutzerdefinierte Millisekunden ({0:#,###,##0}) vorwärts, {1}" }, "wordLists": { "title": "Wortlisten", @@ -3591,7 +4105,11 @@ "applyToSelectedLinesX": "Ausgewählte Zeilen ({0})", "applyToAllLinesX": "Alle Zeilen ({0})", "updateAllXAvailable": "Alle aktualisieren ({0})", - "updatingXOfY": "Aktualisiere {0}/{1}..." + "updatingXOfY": "Aktualisiere {0}/{1}...", + "doNotAskAgain": "Nicht mehr nachfragen (in \"Plugins verwalten\" änderbar)", + "applyPluginsTo": "Plugins anwenden auf", + "askEachTime": "Jedes Mal nachfragen", + "allLines": "Alle Zeilen" }, "help": { "aboutSubtitleEdit": "Über Subtitle Edit", @@ -3635,6 +4153,8 @@ "nOcrDatabase": "nOCR-Datenbank", "drawMode": "Zeichenmodus:", "addNewCharcter": "Neues Zeichen hinzufügen", + "addNOcrCharacterTitle": "nOCR-Zeichen für Zeile {0} hinzufügen, Zeichen {1} von {2}, mit Datenbank \"{3}\"", + "addBinaryOcrCharacterTitle": "Binary-OCR-Zeichen für Zeile {0} hinzufügen, Zeichen {1} von {2}, mit Datenbank \"{3}\"", "lineIndexX": "Zeile {0}", "inspectNOcrAdditions": "nOCR-Ergänzungen prüfen", "ocrSelectedLines": "OCR auf ausgewählte Zeilen", @@ -3743,9 +4263,26 @@ "crispEmbedSettingsTitle": "CrispEmbed-Einstellungen", "crispEmbedDescription": "Lokale OCR-Engine mit mehreren Modell-Backends - laden Sie die Engine und die Modelle hier herunter.", "trainNOcrDatabase": "nOCR-Datenbank trainieren...", + "optimizeNOcrDatabase": "nOCR-Datenbank optimieren...", + "optimizeNOcrDatabaseQuestionXY": "Die Linien entfernen, die Zeichen nicht von ähnlichen Zeichen in der nOCR-Datenbank \"{0}\" unterscheiden?\n\nDadurch wird die Datenbank kleiner und die OCR schneller, meist mit weniger Fehlern. Dauert bis zu einer Minute.\n\nEine Sicherung wird als \"{1}\" gespeichert.", + "optimizingNOcrDatabaseXY": "nOCR-Datenbank wird optimiert... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "nOCR-Datenbank \"{0}\" optimiert: {1:#,##0} -> {2:#,##0} Linien.", "startTraining": "Training starten", "abortTraining": "Training abbrechen", "trainingOptions": "Trainingsoptionen", + "trainNOcrSubtitle": "Rendert Zeichen in installierten Schriftarten und bringt nOCR ihre Formen bei. Wählen Sie die Schriftarten, die Ihre Untertitel verwenden.", + "xFontsSelected": "{0:#,##0} ausgewählt", + "subtitleFonts": "Untertitel-Schriftarten", + "emptyDatabase": "Leere Datenbank", + "startFromDatabase": "Ausgehend von", + "startFromDatabaseHint": "Die trainierten Zeichen zu einer Kopie einer vorhandenen Datenbank hinzufügen (empfohlen) oder mit einer leeren beginnen", + "fontSizes": "Schriftgrößen", + "fontSizesHint": "Schriftgrößen in Pixeln zum Rendern, durch Kommas getrennt, z. B. \"30, 40\"", + "numberOfLineSegmentsHint": "Geprüfte Linien pro Zeichen - mehr ist strenger, aber langsamer", + "enterDatabaseName": "Geben Sie einen Namen für die Datenbank ein", + "trainingFontXSizeYCharacterZ": "Training \"{0}\" mit {1} px: {2}", + "xLearned": "{0:#,##0} gelernt", + "xSkipped": "{0:#,##0} übersprungen", "charactersToTrain": "Zu trainierende Zeichen", "letterCombinationsToTrain": "Buchstabenkombinationen, die zu einem Bild zusammengefasst sein könnten", "importCharactersFromSubtitleFile": "Zeichen aus Untertiteldatei importieren...", @@ -3772,6 +4309,8 @@ "drawZoomOut": "Herauszoomen (Strg+-)", "drawResetView": "Ansicht zurücksetzen (Strg+0)", "drawToggleGrid": "Raster umschalten (Strg+G)", + "drawTogglePreview": "Vorschau umschalten (F9)", + "drawPreviewFailed": "Vorschau fehlgeschlagen - ffmpeg mit libass (subtitles-Filter) ist erforderlich", "drawCopyToClipboard": "In Zwischenablage kopieren (Strg+C)", "drawShapes": "Formen", "drawSelectedPoint": "Ausgewählter Punkt", @@ -3779,6 +4318,81 @@ "drawSelectedLayer": "Ausgewählte Ebene", "drawToolX": "Werkzeug: {0}", "drawHelpText": "Klicken, um Punkte hinzuzufügen • Eingabe/F8 zum Schließen der Form • Umschalt+Ziehen zum Schwenken • Strg+Scrollen zum Zoomen", + "drawMoveToLayer": "In Ebene verschieben", + "drawFlipHorizontal": "Horizontal spiegeln", + "drawFlipVertical": "Vertikal spiegeln", + "drawHideShape": "Form ausblenden", + "drawShowShape": "Form einblenden", + "drawHideLayer": "Ebene ausblenden", + "drawShowLayer": "Ebene einblenden", + "drawDeleteLayer": "Ebene löschen", + "drawDeletePoint": "Punkt löschen", + "drawCancelDrawing": "Zeichnen abbrechen", + "drawLayerX": "Ebene {0}", + "drawImportSvg": "SVG-Bild importieren...", + "drawRotateClockwise": "Um 90° im Uhrzeigersinn drehen", + "drawConvertToCurve": "Segment in Kurve umwandeln", + "drawBackground": "Hintergrund", + "drawPosition": "Position", + "drawZoom": "Zoom", + "drawShapeTool": "Formwerkzeug", + "drawColorPickerTool": "Farbe von einer Form oder dem Hintergrund aufnehmen", + "drawShapeLibrary": "Formenbibliothek", + "drawShapeLibraryHint": "Ziehen Sie auf der Zeichenfläche, um eine Form zu platzieren, oder klicken Sie für die Standardgröße. Umschalt behält die Proportionen bei.", + "drawAddToLibrary": "Zur Formenbibliothek hinzufügen...", + "drawRemoveFromLibrary": "Aus Formenbibliothek entfernen", + "drawShapeName": "Formname", + "drawCategorySpeechBubbles": "Sprechblasen", + "drawCategoryArrows": "Pfeile", + "drawCategoryBasicShapes": "Grundformen", + "drawCategorySymbols": "Symbole", + "drawCategoryMyShapes": "Meine Formen", + "drawShapeSpeechBubble": "Sprechblase", + "drawShapeSpeechBubbleRight": "Sprechblase, Spitze rechts", + "drawShapeSpeechBubbleUp": "Sprechblase, Spitze oben", + "drawShapeOvalBubble": "Ovale Sprechblase", + "drawShapeBoxBubble": "Rechteckige Sprechblase", + "drawShapeThoughtBubble": "Gedankenblase", + "drawShapeShoutBubble": "Schreiblase", + "drawShapeCaptionBox": "Textkasten", + "drawShapeArrow": "Pfeil", + "drawShapeDoubleArrow": "Doppelpfeil", + "drawShapeChevron": "Winkelpfeil", + "drawShapeCurvedArrow": "Gebogener Pfeil", + "drawShapeRoundedRectangle": "Abgerundetes Rechteck", + "drawShapeTriangle": "Dreieck", + "drawShapeDiamond": "Raute", + "drawShapePentagon": "Fünfeck", + "drawShapeHexagon": "Sechseck", + "drawShapeOctagon": "Achteck", + "drawShapeStar": "Stern", + "drawShapeRing": "Ring", + "drawShapePlus": "Plus", + "drawShapeBanner": "Banner", + "drawShapeHeart": "Herz", + "drawShapeCheck": "Häkchen", + "drawShapeMusicNote": "Musiknote", + "drawShapeMusicNotes": "Musiknoten", + "drawShapeLightning": "Blitz", + "drawShapeCloud": "Wolke", + "drawShapeMoon": "Mond", + "drawShapeBadge": "Abzeichen", + "drawSize": "Größe", + "drawLayer": "Ebene", + "drawBackgroundVideoFrame": "Videoframe (aktuelle Position)", + "drawBackgroundVideoFrameAt": "Videoframe bei...", + "drawBackgroundImage": "Bilddatei...", + "drawBackgroundNone": "Kein Hintergrund", + "drawBackgroundStretch": "Bild auf Zeichenfläche strecken", + "drawBackgroundOpacity": "Hintergrund-Deckkraft", + "drawBackgroundVideoFrameFailed": "Konnte keinen Videoframe bei {0} abrufen.", + "drawImages": "Bilder", + "drawConvertToLine": "Segment in Linie umwandeln", + "drawConvertShapeToCurves": "Alle Linien in Kurven umwandeln", + "drawConvertShapeToLines": "Alle Kurven in Linien umwandeln", + "drawRotateCounterClockwise": "Um 90° gegen den Uhrzeigersinn drehen", + "drawSvgImages": "SVG-Bilder", + "drawSvgNoShapes": "Keine gefüllten Formen oder Konturen in der SVG-Datei gefunden.", "progressBarTitle": "ASSA-Fortschrittsbalken", "progressBarSettings": "Fortschrittsbalken", "mouseOverColor": "Farbe bei Mauszeiger darüber", @@ -3863,7 +4477,7 @@ "attachmentsTitleX": "Anhänge – {0}", "smartWrappingTopWide": "0: Smart Wrapping (obere Zeile breiter)", "endOfLineWrapping": "1: Zeilenende-Wortumbruch, nur \\N bricht", - "noWrapping": "2: Kein Zeilenumbruch, sowohl \\n als auch \\N bricht\t\t", + "noWrapping": "2: Kein Zeilenumbruch, sowohl \\n als auch \\N bricht", "smartWrappingBottomWide": "3: Smart Wrapping (untere Zeile breiter)", "fontsAndGraphics": "Schriftarten und Bilder", "wrapStyle": "Umbruchstil", @@ -3875,13 +4489,26 @@ "graphics": "Grafiken", "copyToStorageStyles": "In Speicherstile kopieren", "copyToFileStyles": "In Dateistile kopieren", + "styleXAlreadyExistsInStorage": "Ein Stil namens \"{0}\" existiert bereits im Speicher.\n\nÜberschreiben oder beide behalten (die Kopie erhält einen neuen Namen)?", + "styleXAlreadyExistsInFile": "Ein Stil namens \"{0}\" existiert bereits in der Datei.\n\nÜberschreiben oder beide behalten (die Kopie erhält einen neuen Namen)?", + "styleNameCannotBeEmpty": "Ein Stilname darf nicht leer sein.", + "styleNameXIsUsedMoreThanOnce": "Der Stilname \"{0}\" wird in der Datei von mehr als einem Stil verwendet.", + "overwrite": "Überschreiben", + "keepBoth": "Beide behalten", + "doThisForAllConflictingStyles": "Für alle Stile mit Konflikt so verfahren", "setStyleAsDefault": "Als Standard einstellen", "takeUsagesFromDotDotDot": "Übernehme Verwendungen von...", "replaceStyleWithDotDotDot": "Stil ersetzen durch...", "noAttachmentsFound": "Keine Anhänge in ausgewählter ASSA-Datei gefunden.", "deleteStyleQuestion": "Stil löschen?", "deleteStylesQuestion": "Stile löschen?", + "deleteXStylesQuestion": "Möchten Sie {0} Stile löschen?", + "deleteXStylesFromStorageQuestion": "Möchten Sie {0} Stile aus dem Speicher löschen?", + "deleteStyleXFromStorageQuestion": "Möchten Sie den Stil \"{0}\" aus dem Speicher löschen?", + "deleteStyleXFromFileQuestion": "Möchten Sie den Stil \"{0}\" aus der aktuellen Datei löschen?", "openStyleImportFile": "Untertiteldatei, aus der Stile importiert werden sollen öffnen", + "styleImportFiles": "Stildateien (.ass, .sty, Subtitle Edit 4-Kategorien .template)", + "ssaStyleImportFiles": "Stildateien (.ssa, .ass, .sty)", "primary": "Primär", "secondary": "Sekundär", "applyOverrideTags": "Override-Tags anwenden", diff --git a/src/ui/Assets/Languages/Greek.json b/src/ui/Assets/Languages/Greek.json index e1ada4e4093..06077ab7f66 100644 --- a/src/ui/Assets/Languages/Greek.json +++ b/src/ui/Assets/Languages/Greek.json @@ -1,12 +1,71 @@ { "title": "Subtitle Edit", - "version": "v5.2.0-rc7", + "version": "v5.3.0", "translatedBy": "Claude (Anthropic)", "cultureName": "el-GR", "general": { + "prompt": "Προτροπή", + "temperature": "Θερμοκρασία", + "preset": "Προεπιλογή", + "output": "Έξοδος", + "outputFormat": "Μορφή εξόδου", + "other": "Άλλα", + "timeCodeFormat": "Μορφή χρονικού κώδικα", + "topBottomMargin": "Πάνω/κάτω περιθώριο", + "theme": "Θέμα", + "brightness": "Φωτεινότητα", + "chooseColor": "Επιλογή χρώματος", + "lineX": "Γραμμή {0}", + "playLine": "Αναπαραγωγή γραμμής", + "maxLineLength": "Μέγιστο μήκος γραμμής", + "maxCharsPerSec": "Μέγ. χαρ./δευτ.", + "maxNumberOfLines": "Μέγιστος αριθμός γραμμών", + "subtitles": "Υπότιτλοι", + "shotChanges": "Αλλαγές πλάνου", + "chapters": "Κεφάλαια", + "audio": "Ήχος", + "interjections": "Επιφωνήματα", + "blankLines": "Κενές γραμμές", + "editWholeText": "Επεξεργασία ολόκληρου κειμένου", + "noTextInClipboard": "Δεν υπάρχει κείμενο στο πρόχειρο", + "noSubtitlesFoundTitle": "Δεν βρέθηκαν υπότιτλοι", + "replacedXOccurrences": "Αντικαταστάθηκαν {0} εμφανίσεις", + "invalidRegularExpressionX": "Μη έγκυρη κανονική έκφραση: {0}", + "discardChangesTitle": "Απόρριψη αλλαγών;", + "downloadingXDotDotDot": "Λήψη {0}...", + "importTimeCodesDotDotDot": "Εισαγωγή χρονικών κωδίκων...", + "original": "Αρχικό", + "nextChange": "Επόμενη αλλαγή", + "previousChange": "Προηγούμενη αλλαγή", + "changeXOfY": "Αλλαγή {0} από {1}", + "tooLong": "Πολύ μεγάλη", + "tooShort": "Πολύ σύντομη", + "overlapping": "Επικάλυψη", + "detail": "Λεπτομέρεια", + "fixOcrErrors": "Διόρθωση σφαλμάτων OCR", + "runningOcrXY": "Εκτέλεση OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "Το llama.cpp απαιτεί τη λήψη της μηχανής llama-server. Λήψη τώρα;", "abort": "Ματαίωση", "actor": "Ηθοποιός", "actors": "Ηθοποιοί", + "setActorDotDotDot": "Ορισμός ηθοποιού...", + "actorPickerTitle": "Ορισμός ηθοποιού", + "actorPickerFilterHint": "Πληκτρολογήστε για φιλτράρισμα ή πληκτρολογήστε νέο όνομα ηθοποιού", + "actorPickerKeysHint": "Πατήστε έναν αριθμό ή Enter για να ορίσετε τον ηθοποιό. Το Alt+Πάνω/Κάτω αλλάζει τη σειρά, το Delete αφαιρεί τον ηθοποιό.", + "actorPickerNewActorX": "Νέος ηθοποιός \"{0}\"", + "actorPickerLinesSelectedX": "Επιλεγμένες γραμμές: {0}", + "setStyleDotDotDot": "Ορισμός στυλ...", + "stylePickerTitle": "Ορισμός στυλ", + "stylePickerFilterHint": "Πληκτρολογήστε για φιλτράρισμα ή πληκτρολογήστε νέο όνομα στυλ", + "stylePickerKeysHint": "Πατήστε έναν αριθμό (1-9, 0) για να ορίσετε το στυλ σε όλες τις επιλεγμένες γραμμές.", + "stylePickerNewStyleX": "Νέο στυλ \"{0}\"", + "stylePickerNewStyleInfo": "Πατήστε Enter για να προσθέσετε αυτό το στυλ με προεπιλεγμένες ρυθμίσεις και να το ορίσετε στις επιλεγμένες γραμμές. Χρησιμοποιήστε τη \"Διαχείριση στυλ...\" για να αλλάξετε αργότερα τη γραμματοσειρά, τα χρώματα και τη θέση του.", + "stylePickerCurrentStyleX": "Τρέχον στυλ: {0}", + "stylePickerLinesUsingStyleX": "Γραμμές που χρησιμοποιούν αυτό το στυλ: {0}", + "stylePickerMarginsXYZ": "Αριστερά {0}, δεξιά {1}, κατακόρυφα {2}", + "stylePickerSetStyle": "Ορισμός στυλ", + "stylePickerManageStyles": "Διαχείριση στυλ...", + "stylePickerManageStylesHint": "Κλείσιμο αυτού του παραθύρου και άνοιγμα της διαχείρισης στυλ για επεξεργασία γραμματοσειρών, χρωμάτων, θέσης και άλλων", "add": "Προσθήκη", "addDotDotDot": "Προσθήκη...", "addToNamesListCaseSensitive": "Προσθήκη στη λίστα ονομάτων (διάκριση πεζών-κεφαλαίων)", @@ -15,7 +74,6 @@ "adjustAlpha": "Προσαρμογή άλφα (διαφάνεια)", "adjustDisplayDuration": "Προσαρμογή διάρκειας εμφάνισης", "adjustment": "Προσαρμογή", - "advanced": "Για προχωρημένους", "advancedSettings": "Ρυθμίσεις για προχωρημένους", "after": "Μετά", "alignment": "Στοίχιση", @@ -60,7 +118,6 @@ "bdnXml": "BDN/xml", "bdnXml8Bit": "BDN/xml 8-bit", "before": "Πριν", - "beforeX": "Πριν από \"{0}\"", "beginning": "Αρχή", "bluRaySup": "Blu-ray (sup)", "bold": "Έντονα", @@ -72,7 +129,6 @@ "bookmarkEdit": "Επεξεργασία σελιδοδείκτη", "bookmarkEditForSelectedLinesX": "Επεξεργασία σελιδοδείκτη για {0} επιλεγμένες γραμμές", "bookmarksList": "Λίστα σελιδοδεικτών", - "borderColor": "Χρώμα περιγράμματος", "borderStyle": "Στυλ περιγράμματος", "bottomCenter": "Κάτω-Κέντρο", "bottomLeft": "Κάτω-Αριστερά", @@ -99,7 +155,6 @@ "changeCasing": "Αλλαγή πεζών-κεφαλαίων", "changeFormatting": "Αλλαγή μορφοποίησης", "changeFrameRate": "Αλλαγή ρυθμού καρέ", - "changeLanguageFilter": "Αλλαγή φίλτρου γλώσσας...", "changeOnce": "Αλλαγή μία φορά", "changeSpeed": "Αλλαγή ταχύτητας", "character": "Χαρακτήρας", @@ -141,7 +196,6 @@ "conversionCancelledByUser": "Η μετατροπή ακυρώθηκε από τον χρήστη", "convert": "Μετατροπή", "converted": "Μετατράπηκε", - "convertingDotDotDot": "Μετατροπή...", "convertingXofYDotDoDot": "Μετατροπή {0:#,###,##0}/{1:#,###,##0}...", "copy": "Αντιγραφή", "copyImageToClipboard": "Αντιγραφή εικόνας στο πρόχειρο", @@ -152,7 +206,6 @@ "couldNotOpenFileXErrorY": "Αδυναμία ανοίγματος του αρχείου \"{0}\". Σφάλμα: {1}", "count": "Πλήθος", "cps": "Χαρ./δευτ.", - "currentSubtitle": "Τρέχων υπότιτλος", "cudaRuntime": "Χρόνος εκτέλεσης CUDA", "currentVideoPosition": "Τρέχουσα θέση βίντεο", "custom": "Προσαρμοσμένο", @@ -212,7 +265,6 @@ "expand": "Ανάπτυξη", "export": "Εξαγωγή", "exportDotDotDot": "Εξαγωγή...", - "exportToX": "Εξαγωγή σε {0}", "extendAfter": "Επέκταση/σμίκρυνση έως την επόμενη γραμμή", "extendBefore": "Επέκταση/σμίκρυνση έως την προηγούμενη γραμμή", "extendSelectedLinesToNextShotChangeOrNextSubtitle": "Επέκταση επιλεγμένων γραμμών έως την επόμενη αλλαγή πλάνου (ή τον επόμενο υπότιτλο)", @@ -229,7 +281,6 @@ "fileExtension": "Επέκταση αρχείου", "fileName": "Όνομα αρχείου", "fileNameX": "Όνομα αρχείου: {0}", - "fileNameXAndSize": "Όνομα αρχείου: {0} ({1})", "fileSaved": "Το αρχείο αποθηκεύτηκε", "fileSavedToX": "Το αρχείο αποθηκεύτηκε στο {0}", "fileXAlreadyExists": "Το αρχείο \"{0}\" υπάρχει ήδη.", @@ -239,8 +290,6 @@ "find": "Εύρεση", "findNext": "Εύρεση επόμενου", "findTextX": "Εύρεση κειμένου - {0}", - "fiveHundredMilliseconds": "500 χιλιοστά του δευτερολέπτου", - "fiveSeconds": "Πέντε δευτερόλεπτα", "fix": "Διόρθωση", "fixCommonErrors": "Διόρθωση συνηθισμένων σφαλμάτων", "fixRightToLeft": "Διόρθωση δεξιά-προς-αριστερά", @@ -264,14 +313,12 @@ "foundXInLineYZ": "Βρέθηκε \"{0}\" στη γραμμή {1}, θέση {2}", "foundXMatches": "Βρέθηκαν {0} αποτελέσματα", "frameRate": "Ρυθμός καρέ", - "frameRateX": "Ρυθμός καρέ: {0:0.0###}", "frames": "Καρέ", "from": "Από", "fromCurrentVideoPosition": "από την τρέχουσα θέση βίντεο", "fullScreen": "Πλήρης οθόνη", "gap": "Κενό", "general": "Γενικά", - "generalText": "Γενικά", "generate": "Δημιουργία", "generateImportShotChanges": "Δημιουργία/εισαγωγή αλλαγών πλάνου", "generating": "Δημιουργία...", @@ -289,12 +336,8 @@ "help": "Βοήθεια", "hex": "Hex", "hide": "Απόκρυψη", - "hidePreview": "Απόκρυψη προεπισκόπησης", "history": "Ιστορικό", "horizontal": "Οριζόντια", - "hourMinutesSecondsDecimalSeparatorMilliseconds": "Ώρα:λεπ:δευτ{0}ms", - "hourMinutesSecondsFrames": "Ώρα:λεπ:δευτ:καρέ", - "ip": "IP", "id": "ID", "image": "Εικόνα", "imageSaved": "Η εικόνα αποθηκεύτηκε", @@ -355,6 +398,7 @@ "mergeSelectedLinesDialog": "Συγχώνευση επιλεγμένων γραμμών ως διάλογο", "mergeWithLineAfterAndAutoBreak": "Συγχώνευση με την επόμενη γραμμή και αυτόματη αλλαγή γραμμής", "mergeWithLineAfterKeepBreaks": "Συγχώνευση με την επόμενη γραμμή (διατήρηση αλλαγών γραμμής)", + "mergeWithLineAfterAndUnbreak": "Συγχώνευση με την επόμενη γραμμή και αφαίρεση αλλαγής γραμμής", "mergeWithLineBeforeAndAutoBreak": "Συγχώνευση με την προηγούμενη γραμμή και αυτόματη αλλαγή γραμμής", "mergeWithLineBeforeKeepBreaks": "Συγχώνευση με την προηγούμενη γραμμή (διατήρηση αλλαγών γραμμής)", "middleCenter": "Μέση-Κέντρο", @@ -369,13 +413,13 @@ "moveAllShotChangeOneFrameForward": "Μετακίνηση όλων των αλλαγών πλάνου ένα καρέ εμπρός", "multiMode": "Πολλαπλή λειτουργία", "moveDown": "Μετακίνηση κάτω", + "increase": "Αύξηση", + "decrease": "Μείωση", "moveUp": "Μετακίνηση πάνω", "moveToTop": "Μετακίνηση στην κορυφή", "moveToBottom": "Μετακίνηση στο τέλος", "multipleReplace": "Πολλαπλή αντικατάσταση", - "mute": "Σίγαση", "name": "Όνομα", - "negative": "Αρνητικό", "new": "Νέο", "newDotDotDot": "Νέο...", "newProfile": "Νέο προφίλ", @@ -405,20 +449,15 @@ "offsetY": "Μετατόπιση Y", "ok": "OK", "oneFile": "Ένα αρχείο", - "oneHundredMilliseconds": "100 χιλιοστά του δευτερολέπτου", - "oneSecond": "Ένα δευτερόλεπτο", "oneSecondBack": "Ένα δευτερόλεπτο πίσω", "oneSecondForward": "Ένα δευτερόλεπτο εμπρός", - "onlineVideoFeatureNotAvailable": "Η λειτουργία δεν είναι διαθέσιμη για διαδικτυακό βίντεο", "openContainingFolder": "Άνοιγμα φακέλου περιεχομένου", "openDictionaryFolder": "Άνοιγμα φακέλου λεξικών", "openFile": "Άνοιγμα αρχείου", "openImageBasedSubtitle": "Άνοιγμα υπότιτλου βασισμένου σε εικόνα", "openImageFile": "Άνοιγμα αρχείου εικόνας", - "openOriginalSubtitleFile": "Άνοιγμα αρχικού αρχείου υπότιτλων...", "openOriginalSubtitleFileTitle": "Άνοιγμα αρχικού αρχείου υπότιτλων", "openOutputFolder": "Άνοιγμα φακέλου εξόδου", - "openSubtitle": "Άνοιγμα υπότιτλου...", "openSubtitleFileTitle": "Άνοιγμα αρχείου υπότιτλων", "openSubtitles": "Άνοιγμα υπότιτλων...", "openVideoFile": "Άνοιγμα αρχείου βίντεο...", @@ -433,11 +472,6 @@ "outlineWidth": "Πλάτος περιγράμματος", "outputFolder": "Φάκελος εξόδου", "outputProperties": "Ιδιότητες εξόδου", - "overlap": "Επικάλυψη", - "overlapNextX": "Επικάλυψη επόμενου ({0:#;##0.###})", - "overlapPreviousLineX": "Επικάλυψη προηγούμενης γραμμής ({0:#;##0.###})", - "overlapStartAndEnd": "Επικάλυψη αρχής και τέλους", - "overlapX": "Επικάλυψη ({0:#;##0.###})", "overwriteExistingFiles": "Αντικατάσταση υπαρχόντων αρχείων", "overwriteFilesInFolderX": "Αντικατάσταση αρχείων στον φάκελο: \"{0}\"", "overwriteQuestion": "Αντικατάσταση;", @@ -450,6 +484,7 @@ "percent": "Ποσοστό", "pickLayer": "Ορισμός επιπέδου", "pickOllamaModel": "Επιλογή μοντέλου Ollama", + "pickModel": "Επιλογή μοντέλου", "llamaCppUseRemoteServer": "Χρήση εξωτερικού διακομιστή (URL)", "llamaCppEngineSettings": "Ρυθμίσεις μηχανής llama.cpp", "llamaCppEngineSettingsSubtitle": "Τοπική έκδοση διακομιστή llama.cpp", @@ -501,7 +536,6 @@ "refresh": "Ανανέωση", "region": "Περιοχή", "regularExpression": "Κανονική έκφραση", - "regularExpressionIsNotValid": "Η κανονική έκφραση δεν είναι έγκυρη!", "relativeToCurrentVideoPosition": "Σχετικά με την τρέχουσα θέση βίντεο", "remove": "Αφαίρεση", "removeAlignment": "Αφαίρεση στοίχισης", @@ -527,7 +561,7 @@ "reset": "Επαναφορά", "resizePanels": "Αλλαγή μεγέθους πινάκων", "resolution": "Ανάλυση", - "resolutionX": "Ανάλυση: {0}", + "retry": "Επανάληψη", "reverseRightToLeftStartEnd": "Αντιστροφή αρχής/τέλους RTL", "right": "Δεξιά", "rightToLeft": "Δεξιά προς αριστερά", @@ -567,8 +601,6 @@ "selectedlinesX": "Επιλεγμένες γραμμές: {0}", "sensitivity": "Ευαισθησία", "separator": "Διαχωριστικό", - "sessionKey": "Κλειδί συνεδρίας", - "sessionKeyGenerate": "Δημιουργία νέου κλειδιού", "setEnd": "Ορισμός τέλους", "setEndAndGoToNext": "Ορισμός τέλους και μετάβαση στο επόμενο", "setEndAddNewAndGoToNew": "Ορισμός τέλους, προσθήκη νέου και μετάβαση στο νέο", @@ -591,8 +623,9 @@ "shadowColor": "Χρώμα σκιάς", "shadowWidth": "Πλάτος σκιάς", "shiftLineBy": "Μετατόπιση γραμμής κατά", + "shotIn": "Είσοδος πλάνου", + "shotOut": "Έξοδος πλάνου", "shortcut": "Συντόμευση", - "shortcutX": "Συντόμευση: {0}", "shortcuts": "Συντομεύσεις", "show": "Εμφάνιση", "showActorColumn": "Εμφάνιση στήλης \"Ηθοποιός\"", @@ -603,17 +636,19 @@ "showStartColumn": "Εμφάνιση στήλης \"Έναρξη\"", "showHideColumn": "Εμφάνιση στήλης \"Απόκρυψη\"", "showHistory": "Εμφάνιση ιστορικού", + "clearHistory": "Εκκαθάριση ιστορικού", + "removeFromHistory": "Αφαίρεση από το ιστορικό", "showLayerColumn": "Εμφάνιση στήλης \"Επίπεδο\"", "showPreview": "Εμφάνιση προεπισκόπησης", "showShotChangesList": "Εμφάνιση λίστας αλλαγών πλάνου", + "showShotInColumn": "Εμφάνιση στήλης \"Είσοδος πλάνου\"", + "showShotOutColumn": "Εμφάνιση στήλης \"Έξοδος πλάνου\"", "showStyleColumn": "Εμφάνιση στήλης \"Στυλ\"", "showTeletext": "Εμφάνιση στήλης teletext στην προβολή λίστας", "showTimeCodes": "Εμφάνιση χρονικών κωδίκων", "showWpmColumn": "Εμφάνιση στήλης \"Λέξεις/λεπτό\"", "showPixelWidthColumn": "Εμφάνιση στήλης \"Πλάτος σε pixel\"", "shrink": "Σμίκρυνση", - "singleBox": "Ενιαίο πλαίσιο", - "singleLineLengths": "Μήκος μίας γραμμής:", "singleMode": "Απλή λειτουργία", "textTotalLength": "Κείμενο - συνολικό μήκος", "textSingleLineMaxLength": "Κείμενο - μέγιστο μήκος μίας γραμμής", @@ -662,16 +697,16 @@ "strikeout": "Διακριτή διαγραφή", "style": "Στυλ", "styleExaggeration": "Υπερβολή στυλ", - "styleLanguage": "Στυλ / Γλώσσα", "styles": "Στυλ", "subtitleFile": "Αρχείο υπότιτλων", + "subtitleFileChangedOutsideX": "Το αρχείο \"{0}\" άλλαξε εκτός του Subtitle Edit.\n\nΝα επαναφορτωθεί με απώλεια των αλλαγών σας;", "subtitleFileName": "Όνομα αρχείου υπότιτλων", "subtitleFileSaved": "Το αρχείο υπότιτλων αποθηκεύτηκε", "subtitleFileSavedToX": "Το αρχείο υπότιτλων αποθηκεύτηκε στο {0}", "subtitleFiles": "Αρχεία υπότιτλων", "subtitleFormats": "Μορφές υπότιτλων", "subtitleLoadedX": "Υπότιτλος φορτώθηκε: {0}", - "subtitleXOfY": "Υπότιτλος {0} από {1}", + "subtitleReloadedChangedOutsideX": "Ο υπότιτλος επαναφορτώθηκε (άλλαξε εκτός του Subtitle Edit): {0}", "suffix": "Επίθημα", "suggestions": "Προτάσεις", "sync": "Συγχρονισμός", @@ -683,7 +718,6 @@ "teletextColor": "Χρώμα teletext", "teletextLine": "Γραμμή teletext", "tenHours": "10 ώρες", - "tenMilliseconds": "10 χιλιοστά του δευτερολέπτου", "text": "Κείμενο", "textColor": "Χρώμα κειμένου", "textFiles": "Αρχεία κειμένου", @@ -710,9 +744,6 @@ "topRight": "Πάνω-Δεξιά", "top": "Πάνω", "totalAdjustmentX": "Συνολική προσαρμογή: {0}", - "totalFramesX": "Συνολικά καρέ: {0:#;##0.##}", - "totalLengthX": "Συνολικό μήκος: {0}", - "totalLengthXSplitLine": "Συνολικό μήκος: {0} (διαιρέστε τη γραμμή!)", "translate": "Μετάφραση", "translatePercentX": "Μετάφραση: {0}%", "translateRow": "Μετάφραση σειράς", @@ -721,6 +752,7 @@ "type": "Τύπος", "unbreak": "Αναίρεση αλλαγής γραμμής", "unbreakLines": "Αναίρεση αλλαγών γραμμής", + "undelete": "Αναίρεση διαγραφής", "underline": "Υπογράμμιση", "undo": "Αναίρεση", "unknown": "Άγνωστο", @@ -740,13 +772,11 @@ "usages": "Χρήσεις", "use": "Χρήση", "useAlways": "Χρήση πάντα", - "useLargerFontForThisWindow": "Χρήση μεγαλύτερης γραμματοσειράς για αυτό το παράθυρο", "useOnce": "Χρήση μία φορά", "useOutputFolder": "Χρήση φακέλου εξόδου", "useSourceFolder": "Χρήση φακέλου πηγής", "useSourceResolution": "Χρήση ανάλυσης πηγής", "userName": "Όνομα χρήστη", - "userNameAlreadyInUse": "Το όνομα χρήστη χρησιμοποιείται ήδη", "vertical": "Κατακόρυφα", "video100MsBack": "Βίντεο, 100 χιλιοστά του δευτερολέπτου πίσω", "video100MsForward": "Βίντεο, 100 χιλιοστά του δευτερολέπτου εμπρός", @@ -760,14 +790,25 @@ "videoCustom3ForwardX": "Βίντεο, προσαρμοσμένα χιλιοστά ({0:#,###,##0}) εμπρός, 3", "videoCustom4BackX": "Βίντεο, προσαρμοσμένα χιλιοστά ({0:#,###,##0}) πίσω, 4", "videoCustom4ForwardX": "Βίντεο, προσαρμοσμένα χιλιοστά ({0:#,###,##0}) εμπρός, 4", - "videoEncodingX": "Κωδικοποίηση βίντεο: {0}", + "videoCustom1BackAndPauseX": "Βίντεο, προσαρμοσμένα χιλιοστά δευτερολέπτου ({0:#,###,##0}) πίσω και παύση, 1", + "videoCustom1ForwardAndPauseX": "Βίντεο, προσαρμοσμένα χιλιοστά δευτερολέπτου ({0:#,###,##0}) εμπρός και παύση, 1", + "videoCustom2BackAndPauseX": "Βίντεο, προσαρμοσμένα χιλιοστά δευτερολέπτου ({0:#,###,##0}) πίσω και παύση, 2", + "videoCustom2ForwardAndPauseX": "Βίντεο, προσαρμοσμένα χιλιοστά δευτερολέπτου ({0:#,###,##0}) εμπρός και παύση, 2", + "videoCustom3BackAndPauseX": "Βίντεο, προσαρμοσμένα χιλιοστά δευτερολέπτου ({0:#,###,##0}) πίσω και παύση, 3", + "videoCustom3ForwardAndPauseX": "Βίντεο, προσαρμοσμένα χιλιοστά δευτερολέπτου ({0:#,###,##0}) εμπρός και παύση, 3", + "videoCustom4BackAndPauseX": "Βίντεο, προσαρμοσμένα χιλιοστά δευτερολέπτου ({0:#,###,##0}) πίσω και παύση, 4", + "videoCustom4ForwardAndPauseX": "Βίντεο, προσαρμοσμένα χιλιοστά δευτερολέπτου ({0:#,###,##0}) εμπρός και παύση, 4", "videoExtension": "Επέκταση αρχείου βίντεο", "videoFile": "Αρχείο βίντεο", "videoFileGenerated": "Το αρχείο βίντεο δημιουργήθηκε", "videoFileGeneratedX": "Δημιουργήθηκε αρχείο βίντεο: \"{0}\"", + "videoFilesGenerated": "Τα αρχεία βίντεο δημιουργήθηκαν", + "xVideosGenerated": "Δημιουργήθηκαν {0} βίντεο", + "xOfYVideosGenerated": "Δημιουργήθηκαν {0} από {1} βίντεο", + "savedInX": "Αποθηκεύτηκε στο {0}", + "savedInXFolders": "Αποθηκεύτηκε σε {0} φακέλους", "videoFiles": "Αρχεία βίντεο", "videoAndAudioFiles": "Αρχεία βίντεο και ήχου", - "videoInformation": "Πληροφορίες βίντεο", "videoOffset": "Μετατόπιση βίντεο", "videoOneFrameBack": "Βίντεο, ένα καρέ πίσω", "videoOneFrameForward": "Βίντεο, ένα καρέ εμπρός", @@ -778,7 +819,6 @@ "videoPlayer": "Πρόγραμμα αναπαραγωγής βίντεο", "videoPosition": "Θέση βίντεο", "videoResolution": "Ανάλυση βίντεο", - "viewX": "Προβολή {0}", "visible": "Ορατό", "voice": "Φωνή", "volume": "Ένταση", @@ -787,9 +827,7 @@ "waveformCenterOnVideoPosition": "Κεντράρισμα κυματομορφής στη θέση βίντεο", "waveformPasteFromClipboard": "Επικόλληση από το πρόχειρο", "waveformSpectrogram": "Κυματομορφή/φασματογράφημα", - "webServiceUrl": "URL υπηρεσίας web", "width": "Πλάτος", - "windowPositionAndSize": "Θέση και μέγεθος παραθύρου", "wordsPerMin": "Λέξεις/λεπτό", "pixelWidth": "Πλάτος σε pixel", "wpm": "Λέξεις/λεπτό", @@ -803,8 +841,6 @@ "noBookmarksFound": "Δεν βρέθηκαν άλλοι σελιδοδείκτες", "xRequiresAnApiKey": "Το {0} απαιτεί κλειδί API", "xRequiresAValidUrl": "Το {0} απαιτεί έγκυρο URL (π.χ. \"http://...\" ή \"https://...\")", - "xSeconds": "{0:0.0##} δευτερόλεπτα", - "xSubtitles": "{0:#,###,##0} υπότιτλοι", "yes": "Ναι", "zeroBytes": "0 byte", "copyToClipboard": "Αντιγραφή στο πρόχειρο", @@ -826,10 +862,8 @@ "playbackSpeed": "Ταχύτητα αναπαραγωγής", "hoursMinutesSecondsMilliseconds": "ΩΩ:ΛΛ:ΔΔ.FFF", "imageFiles": "Αρχεία εικόνας", - "openAiCompatibleStt": "STT συμβατό με OpenAI", "openAiCompatibleSttEndpoint": "URL τελικού σημείου STT", "openAiCompatibleSttApiKey": "Κλειδί API", - "openAiCompatibleSttModel": "Μοντέλο", "openAiCompatibleSttExtraHeaders": "Πρόσθετες κεφαλίδες", "openAiCompatibleSttTimeout": "Χρονικό όριο (δευτερόλεπτα)", "openAiCompatibleSttLanguage": "Υπόδειξη γλώσσας", @@ -839,6 +873,9 @@ "dashScopeSttRegion": "Περιοχή", "dashScopeSttEnableWords": "Χρονικές σημάνσεις σε επίπεδο λέξης", "dashScopeSttRegionKeyHint": "Σημείωση: Τα κλειδιά API του Alibaba Cloud Model Studio είναι συγκεκριμένα ανά περιοχή - βεβαιωθείτε ότι η επιλεγμένη περιοχή ταιριάζει με την περιοχή όπου δημιουργήθηκε το κλειδί API (Κίνα έναντι Διεθνούς).", + "googleCloudSttProjectId": "Αναγνωριστικό έργου (μόνο για Application Default Credentials)", + "googleCloudSttBucketName": "Κάδος αποθήκευσης (κενό = αυτόματα)", + "googleCloudSttDynamicBatching": "Δυναμική ομαδοποίηση (περίπου 5x φθηνότερη, χωρίς εγγύηση καθυστέρησης)", "onlineSttApiKeyMissing": "Απαιτείται κλειδί API. Παρακαλώ εισαγάγετε το κλειδί API σας και δοκιμάστε ξανά.", "openAiCompatibleSttAutoTranscribeOnAudioSelection": "Αυτόματη μεταγραφή νέας επιλογής κυματομορφής μέσω ομιλίας-σε-κείμενο", "openAiCompatibleSttStream": "Ροή απόκρισης", @@ -848,11 +885,9 @@ "configurationRequired": "Απαιτείται διαμόρφωση", "transcriptionError": "Σφάλμα μεταγραφής", "transcriptionComplete": "Η μεταγραφή ολοκληρώθηκε", - "transcribingWithOpenAi": "Μεταγραφή με υπηρεσία OpenAI...", "processingResponse": "Επεξεργασία απόκρισης...", "unauthorizedApiKey": "Μη εξουσιοδοτημένο: Μη έγκυρο κλειδί API ή ανεπαρκή δικαιώματα.", "requestTimeout": "Λήξη χρονικού ορίου αιτήματος: Ο διακομιστής άργησε πολύ να αποκριθεί.", - "noSegmentsReturned": "Δεν επιστράφηκαν τμήματα από την υπηρεσία μεταγραφής.", "openAiCompatibleSttUrlMissing": "Απαιτείται URL τελικού σημείου STT συμβατού με OpenAI. Παρακαλώ εισαγάγετε ένα URL και δοκιμάστε ξανά.", "openAiCompatibleSttUrlNotResponding": "Το τελικό σημείο STT συμβατό με OpenAI δεν αποκρίθηκε:\n{0}\n\nΠαρακαλώ επαληθεύστε το URL και ότι ο διακομιστής εκτελείται.", "transcriptionFailed": "Η μεταγραφή απέτυχε", @@ -898,14 +933,15 @@ "multipleReplace": "Πολλαπλή αντικατάσταση...", "fillSelectedLinesWithClipboard": "Συμπλήρωση επιλεγμένων γραμμών με κείμενο προχείρου", "goToLineNumber": "Μετάβαση σε αριθμό γραμμής...", + "commandPalette": "Παλέτα εντολών...", "rightToLeftMode": "Λειτουργία δεξιά-προς-αριστερά", "modifySelectionDotDotDot": "Τροποποίηση επιλογής...", "tools": "Εργαλεία", - "toolsSelectedLines": "Εργαλεία (επιλεγμένες γραμμές)", "adjustDurations": "Προσαρμογή διαρκειών...", "applyDurationLimits": "Εφαρμογή ορίων διάρκειας...", "batchConvert": "Μαζική μετατροπή...", "beautifyTimeCodes": "Καλλωπισμός χρονικών κωδίκων...", + "improveTimeCodes": "Βελτίωση χρονικών κωδίκων (εξαναγκασμένη ευθυγράμμιση)...", "bridgeGaps": "Γεφύρωση κενών...", "applyMinGap": "Εφαρμογή ελάχιστου κενού μεταξύ υπότιτλων...", "changeCasing": "Αλλαγή πεζών-κεφαλαίων...", @@ -1044,6 +1080,9 @@ "selectCurrentLineWhilePlayingHint": "Επιλογή τρέχοντος υπότιτλου κατά την αναπαραγωγή {0}", "videoPosition": "Θέση βίντεο {0}", "videoPositionTextBox": "Πλαίσιο κειμένου θέσης βίντεο {0}", + "toolbarLineBreakX": "Αλλαγή γραμμής {0} (η υπόλοιπη γραμμή εργαλείων συνεχίζει σε νέα σειρά)", + "initialText": "Αρχικό κείμενο επιλεγμένης γραμμής", + "initialTextHint": "Το κείμενο της επιλεγμένης γραμμής όπως ήταν όταν επιλέχθηκε η γραμμή", "hideWaveformToolbar": "Απόκρυψη γραμμής εργαλείων {0}", "resetZoomAndSpeed": "Επαναφορά εστίασης και ταχύτητας αναπαραγωγής {0}", "removeBlankLines": "Αφαίρεση κενών γραμμών {0}", @@ -1057,6 +1096,15 @@ "textPlayHint": "Αναπαραγωγή τρέχοντος υπότιτλου και διακοπή στο τέλος {0}", "textPauseHint": "Παύση αναπαραγωγής {0}", "textNextHint": "Αναπαραγωγή επόμενου υπότιτλου και διακοπή στο τέλος {0}", + "moveSelectedLines": "Μετακίνηση επιλεγμένων γραμμών (κουμπιά πίσω/εμπρός)", + "moveSelectedLinesAndFollowing": "Μετακίνηση επιλεγμένων γραμμών και όλων των επόμενων (κουμπιά πίσω/εμπρός)", + "moveAllLines": "Μετακίνηση όλων των γραμμών (κουμπιά πίσω/εμπρός)", + "moveSelectedLinesBackHint": "Μετακίνηση επιλεγμένων γραμμών {0} ms πίσω {1}", + "moveSelectedLinesForwardHint": "Μετακίνηση επιλεγμένων γραμμών {0} ms εμπρός {1}", + "moveSelectedLinesAndFollowingBackHint": "Μετακίνηση επιλεγμένων γραμμών και όλων των επόμενων {0} ms πίσω {1}", + "moveSelectedLinesAndFollowingForwardHint": "Μετακίνηση επιλεγμένων γραμμών και όλων των επόμενων {0} ms εμπρός {1}", + "moveAllLinesBackHint": "Μετακίνηση όλων των γραμμών {0} ms πίσω {1}", + "moveAllLinesForwardHint": "Μετακίνηση όλων των γραμμών {0} ms εμπρός {1}", "guessStartNoLineSelected": "Εκτίμηση αρχής: δεν έχει επιλεγεί γραμμή", "guessStartTimeCodesLocked": "Εκτίμηση αρχής: οι χρονικοί κώδικες είναι κλειδωμένοι", "guessStartNoWaveform": "Εκτίμηση αρχής: δεν υπάρχει κυματομορφή", @@ -1078,12 +1126,15 @@ "charactersPerSecond": "Χαρ./δευτερόλεπτο: {0}", "chooseColumn": "Επιλογή στήλης", "columnPaste": "Επικόλληση στήλης", + "commandPaletteTitle": "Παλέτα εντολών", + "commandPaletteSearchPlaceholder": "Πληκτρολογήστε για αναζήτηση εντολών...", + "commandPaletteNoCommandsFound": "Δεν βρέθηκαν αντίστοιχες εντολές", "createdEmptyTranslation": "Δημιουργήθηκε κενή μετάφραση από τον τρέχοντα υπότιτλο", "deleteText": "Διαγραφή κειμένου", "deleteTextAndShiftCellsUp": "Διαγραφή κειμένου και μετατόπιση κελιών πάνω", "endTimeMustBeAfterStartTime": "Ο χρόνος τέλους πρέπει να είναι μετά τον χρόνο έναρξης.", "errorLoad7Zip": "Αυτό το αρχείο φαίνεται να είναι συμπιεσμένο αρχείο 7-Zip.\n\nΤο Subtitle Edit δεν μπορεί να ανοίξει συμπιεσμένα αρχεία.", - "errorLoadBinaryZeroes": "Λυπούμαστε, αυτό το αρχείο περιέχει μόνο δυαδικά μηδενικά!\n\nΑν έχετε επεξεργαστεί αυτό το αρχείο με το Subtitle Edit, μπορεί να βρείτε αντίγραφο ασφαλείας μέσω του μενού Αρχείο -> Επαναφορά αυτόματου αντιγράφου ασφαλείας...", + "errorLoadBinaryZeroes": "Λυπούμαστε, αυτό το αρχείο περιέχει μόνο δυαδικά μηδενικά!\n\nΑν έχετε επεξεργαστεί αυτό το αρχείο με το Subtitle Edit, μπορεί να βρείτε αντίγραφο ασφαλείας μέσω του μενού Αρχείο -> Επαναφορά αυτόματου αντιγράφου ασφαλείας...", "errorLoadGZip": "Αυτό το αρχείο φαίνεται να είναι συμπιεσμένο αρχείο GZip.\n\nΤο Subtitle Edit δεν μπορεί να ανοίξει συμπιεσμένα αρχεία.", "errorLoadLargeFile": "Αυτό το αρχείο είναι πολύ μεγάλο για να ανοίξει ως αρχείο υπότιτλων.", "errorLoadVideoFilePrompt": "Αυτό το αρχείο φαίνεται να είναι αρχείο βίντεο:\n{0}\n\nΜπορείτε να ανοίξετε ένα βίντεο μέσω του \"Βίντεο -> Άνοιγμα βίντεο\" ή σύροντας και αφήνοντας ένα βίντεο στο πρόγραμμα αναπαραγωγής βίντεο.\n\nΘέλετε να το ανοίξετε ως αρχείο βίντεο;", @@ -1116,18 +1167,20 @@ "numberOfLinesEvenlyDistributedX": "Κατανεμήθηκαν ομοιόμορφα {0} γραμμές", "oneLineCopiedFromOriginal": "Μία γραμμή αντιγράφηκε από τον αρχικό υπότιτλο", "oneLineCopiedToOriginal": "Μία γραμμή αντιγράφηκε στον αρχικό υπότιτλο", + "onlineOnlyVideo": "Βίντεο μόνο στο διαδίκτυο", + "onlineOnlyVideoXSizeYDownloadAndOpen": "Το αρχείο βίντεο \"{0}\" ({1}) είναι αποθηκευμένο μόνο στο διαδίκτυο, για παράδειγμα στο Dropbox ή στο iCloud Drive, και πρέπει να ληφθεί πριν ανοιχτεί.\n\nΝα γίνει λήψη και άνοιγμα τώρα;", "oneLineMerged": "Μία γραμμή συγχωνεύτηκε", "oneLineSwitched": "Μία γραμμή εναλλάχθηκε", "overwriteExistingCells": "Αντικατάσταση υπαρχόντων κελιών", "overwriteOrShiftCellsDown": "Αντικατάσταση/μετατόπιση κελιών κάτω", "parsingMatroskaFile": "Ανάλυση αρχείου Matroska...", + "readingDvdSubtitles": "Ανάγνωση υπότιτλων DVD...", "pasteFromClipboardDotDotDot": "Επικόλληση από το πρόχειρο...", "redoPerformed": "Έγινε ακύρωση αναίρεσης", "redoPerformedXActionLeft": "Έγινε ακύρωση αναίρεσης (ενέργειες που απομένουν: {0})", "removedUnicodeControlCharactersX": "Αφαιρέθηκαν χαρακτήρες ελέγχου Unicode από {0} γραμμές", "removedXBlankLines": "Αφαιρέθηκαν {0} κενές γραμμές", "replacedXWithYCountZ": "Αντικαταστάθηκε το \"{0}\" με \"{1}\" ({2} εμφανίσεις)", - "replacedXWithYInLineZ": "Αντικαταστάθηκε το \"{0}\" με \"{1}\" στη γραμμή {2}", "reversedStartAndEndingsForRightToLeftX": "Αντιστράφηκαν αρχές και τέλη για δεξιά-προς-αριστερά σε {0} γραμμές", "ruleProfileIsX": "Το προφίλ κανόνων είναι τώρα \"{0}\"", "saveLanguageFile": "Αποθήκευση αρχείου γλώσσας", @@ -1135,7 +1188,6 @@ "shiftTextCellsDown": "Μετατόπιση κελιών κειμένου κάτω", "singleLineLength": "Μήκος γραμμής: ", "speedIsNowX": "Η ταχύτητα είναι τώρα \"{0}\"", - "spellCheckResult": "Ο ορθογραφικός έλεγχος ολοκληρώθηκε. \n\n• Λέξεις που άλλαξαν: {0}\n• Λέξεις που παραλείφθηκαν: {1}", "subtitleGridFormattingX": "Μορφοποίηση πλέγματος: {0}", "subtitleImportedFromMatroskaFile": "Υπότιτλος εισήχθη από αρχείο Matroska", "textDown": "Κείμενο κάτω", @@ -1162,13 +1214,14 @@ "trimmedXLines": "Περικόπηκαν {0} γραμμές υπότιτλων", "pastedXLinesOverSelectedLines": "Επικολλήθηκαν {0} γραμμή(ές) πάνω στις επιλεγμένες γραμμές", "pastedXOfYLinesOverSelectedLines": "Επικολλήθηκαν {0} από {1} γραμμή(ές) πάνω στις επιλεγμένες γραμμές - οι υπόλοιπες δεν χώρεσαν στην επιλογή", + "insertedXLinesFromClipboard": "Εισήχθησαν {0} γραμμή(ές) από το πρόχειρο", "openOriginalDifferentNumberOfSubtitlesXY": "Το αρχικό αρχείο υπότιτλων δεν έχει τον ίδιο αριθμό υπότιτλων με το τρέχον αρχείο υπότιτλων.\n\n• Αρχικοί υπότιτλοι: {0}\n• Τρέχοντες υπότιτλοι: {1}", - "importXMatchingOriginalLines": "Εισαγωγή {0} αρχικών υπότιτλων που ταιριάζουν;", "originalTextReadOnly": "Αρχικό κείμενο (μόνο για ανάγνωση)", "originalTextEditMode": "Αρχικό κείμενο (λειτουργία επεξεργασίας)", "originalIsReadOnlyNotSaved": "Ο αρχικός υπότιτλος είναι αναφορά μόνο για ανάγνωση και δεν αποθηκεύτηκε", "originalIsEmptyNotSaved": "Ο αρχικός υπότιτλος δεν έχει καθόλου κείμενο και δεν αποθηκεύτηκε", "originalIsReadOnlyReference": "Ο αρχικός υπότιτλος είναι ανοιχτός ως αναφορά μόνο για ανάγνωση", + "closeTranslationQuestionXY": "Κλείσιμο της μετάφρασης \"{0}\";\n\nΟ αρχικός υπότιτλος \"{1}\" γίνεται ο υπότιτλος που επεξεργάζεστε. Το ίδιο το αρχείο μετάφρασης δεν αλλάζει.", "allowEditOfOriginalSubtitle": "Να επιτρέπεται η επεξεργασία του αρχικού υπότιτλου", "showAllOriginalLinesX": "Εμφάνιση όλων των αρχικών γραμμών ({0} δεν έχουν αντιστοιχία εδώ)", "showAllOriginalLinesHint": "Οι γραμμές χωρίς αντιστοιχία εμφανίζονται ως επιπλέον σειρές, ώστε να βλέπετε τι λείπει από τη μετάφραση.", @@ -1203,6 +1256,7 @@ "fileExportedInFormatXToY": "Το αρχείο εξήχθη σε μορφή {0} στο {1}", "fileExportedInFormatXToFileY": "Το αρχείο εξήχθη σε μορφή \"{0}\" στο αρχείο \"{1}\"", "fixedXLines": "Διορθώθηκαν {0} γραμμές", + "toolXChangedYLines": "{0}: άλλαξαν {1} γραμμές", "transcriptionCompletedWithXLines": "Η μεταγραφή ολοκληρώθηκε με {0} γραμμές", "openSubtitleFileX": "Άνοιγμα αρχείου υπότιτλων \"{0}\";", "replacedXOccurrences": "Αντικαταστάθηκαν {0} εμφανίσεις", @@ -1234,13 +1288,9 @@ "file": { "ebuSaveOptions": { "title": "Επιλογές αποθήκευσης EBU", - "generalSubtitleInformation": "Γενικές πληροφορίες υπότιτλων", "codePageNumber": "Αριθμός κωδικοσελίδας", "diskFormatCode": "Κωδικός μορφής δίσκου", "displayStandardCode": "Κωδικός προτύπου εμφάνισης", - "colorRequiresTeletext": "Τα χρώματα απαιτούν teletext!", - "alignmentRequiresTeletext": "Η στοίχιση απαιτεί teletext!", - "teletextCharsShouldBe38": "Το 'Μέγ.# χαρακτήρων ανά σειρά' για teletext πρέπει να είναι 38!", "characterCodeTable": "Πίνακας χαρακτήρων", "languageCode": "Κωδικός γλώσσας", "originalProgramTitle": "Αρχικός τίτλος προγράμματος", @@ -1257,7 +1307,6 @@ "maxNumberOfDisplayableRows": "Μέγ.# σειρών", "diskSequenceNumber": "Αριθμός σειράς δίσκου", "totalNumberOfDisks": "Συνολικός αριθμός δίσκων", - "import": "Εισαγωγή...", "textAndTimingInformation": "Πληροφορίες κειμένου και χρονισμού", "justificationCode": "Κωδικός στοίχισης", "verticalPosition": "Κατακόρυφη θέση", @@ -1274,11 +1323,6 @@ "errors": "Σφάλματα", "errorsX": "Σφάλματα: {0}", "maxLengthError": "Η γραμμή {0} υπερβαίνει το μέγιστο μήκος ({1}) κατά {2}: {3}", - "textUnchangedPresentation": "Αμετάβλητη παρουσίαση", - "textLeftJustifiedText": "Αριστερά στοιχισμένο κείμενο", - "textCenteredText": "Κεντραρισμένο κείμενο", - "textRightJustifiedText": "Δεξιά στοιχισμένο κείμενο", - "useBoxForOneNewLine": "Επιλέξτε 'Χρήση πλαισίου γύρω από το κείμενο' για μόνο μία νέα γραμμή", "maxLengthErrorTeletextColored": "Γραμμή {0}-{1}: 36 (όχι {2}) πρέπει να είναι οι μέγιστοι χαρακτήρες για έγχρωμο κείμενο διπλού ύψους", "maxLengthErrorTeletextWhite": "Γραμμή {0}-{1}: 37 (όχι {2}) πρέπει να είναι οι μέγιστοι χαρακτήρες για λευκό κείμενο διπλού ύψους", "maxLengthErrorTeletextSingleHeight": "Γραμμή {0}: 38 (όχι {1}) πρέπει να είναι οι μέγιστοι χαρακτήρες για λευκό κείμενο μονού ύψους", @@ -1303,22 +1347,29 @@ "formattingDotDotDot": "Μορφοποίηση...", "imageBasedSubtitleForEditDotDotDot": "Υπότιτλος βασισμένος σε εικόνα για επεξεργασία...", "imageBasedSubtitleForOcrDotDotDot": "Υπότιτλος βασισμένος σε εικόνα για OCR...", + "dvdSubtitlesDotDotDot": "Υπότιτλοι από DVD (IFO/VOB)...", + "titleImportDvd": "Εισαγωγή υπότιτλων από DVD", + "dvdIfoFile": "Αρχείο IFO", + "dvdVobFiles": "Αρχεία VOB", + "dvdVideoStandard": "Πρότυπο βίντεο", + "dvdStartRipping": "Έναρξη εξαγωγής", + "dvdRippingAborted": "Η εξαγωγή ματαιώθηκε", + "dvdOpenIfoFile": "Άνοιγμα αρχείου DVD IFO", + "dvdAddVobFiles": "Προσθήκη αρχείων VOB", + "dvdIfoFiles": "Αρχεία DVD IFO", + "dvdVobFileType": "Αρχεία DVD VOB", + "dvdDropHint": "Ανοίξτε ένα αρχείο IFO (VIDEO_TS\\VTS_01_0.IFO) ή προσθέστε αρχεία VOB - ή αποθέστε τα εδώ", + "dvdNotAnIfoFileX": "Το {0} δεν είναι αρχείο DVD IFO", + "dvdMenuIfoNoTitleSetsX": "Δεν βρέθηκαν σύνολα τίτλων (VTS_xx_0.IFO) δίπλα στο {0}", + "dvdEncryptedXOfY": "{0} από τα {1} πακέτα υπότιτλων είναι ακόμη κρυπτογραφημένα με CSS - αυτά τα αρχεία VOB αντιγράφηκαν χωρίς αποκρυπτογράφηση, οπότε ορισμένες εικόνες υπότιτλων θα είναι αλλοιωμένες.\n\nΑποκρυπτογραφήστε πρώτα το DVD με ένα εργαλείο εξαγωγής DVD για καθαρό αποτέλεσμα.\n\nΣυνέχεια παρ' όλα αυτά;", "splitTextAt": "Διαίρεση κειμένου σε", "blankLines": "Κενές γραμμές", "oneLineIsOneSubtitle": "Μία γραμμή είναι ένας υπότιτλος", "twoLinesAreOneSubtitle": "Δύο γραμμές είναι ένας υπότιτλος", "importFilesDotDotDot": "Εισαγωγή αρχείων...", "multipleFiles": "Εισαγωγή από πολλαπλά αρχεία κειμένου (ένα αρχείο είναι ένας υπότιτλος)", - "importOptions": "Επιλογές εισαγωγής", - "autoSplitText": "Αυτόματη διαίρεση κειμένου", - "lineMode": "Λειτουργία γραμμών", "maxLineLength": "Μέγιστο μήκος γραμμής", - "maxLinesPerSubtitle": "Μέγιστες γραμμές ανά υπότιτλο", - "minGapBetweenSubtitles": "Ελάχιστο κενό μεταξύ υπότιτλων", "mergeShortLines": "Συγχώνευση σύντομων γραμμών", - "removeLinesWithoutLetters": "Αφαίρεση γραμμών χωρίς γράμματα", - "splitAtEndCharsSetting": "Διαίρεση σε χαρακτήρες τέλους", - "takeTimeFromCurrentFile": "Λήψη χρόνου από το τρέχον αρχείο", "fixed": "Σταθερή", "numberOfSubtitlesX": "Αριθμός υπότιτλων: {0}", "numberOfSubtitlesXForcedY": "Αριθμός υπότιτλων: {0} ({1} εξαναγκασμένοι)", @@ -1330,14 +1381,18 @@ "forcedAlignerProgress": "Ευθυγράμμιση... παράθυρο {0} από {1}, {2} από {3} γραμμές", "forcedAlignerSetupTitle": "Ευθυγράμμιση χρονικών κωδίκων μέσω forced aligner", "forcedAlignerSetupIntro": "Ένας forced aligner αντιστοιχίζει το κείμενο υπότιτλων που ήδη έχετε με τον ήχο, χωρίς να το μεταγράψει πρώτα. Τα μεγάλα βίντεο ευθυγραμμίζονται σε τμήματα, οπότε οποιαδήποτε διάρκεια λειτουργεί.", + "forcedAlignerEndsFromSpeech": "Ορισμός χρόνων λήξης από απομονωμένη ομιλία (αργό)", + "forcedAlignerEndsFromSpeechHint": "Ένας εξαναγκασμένος ευθυγραμμιστής βρίσκει πού αρχίζει μια γραμμή, όχι πού τελειώνει, οπότε οι χρόνοι λήξης προέρχονται κανονικά από τον χρόνο ανάγνωσης. Με αυτή την επιλογή ενεργή, η μουσική και τα ηχητικά εφέ αφαιρούνται πρώτα από τον ήχο και κάθε γραμμή τελειώνει εκεί όπου σιωπά η ομιλία της. Διαρκεί περίπου όσο το ίδιο το βίντεο με GPU - και πολλές φορές περισσότερο χωρίς.", + "forcedAlignerIsolatingSpeech": "Απομόνωση ομιλίας... {0}", + "forcedAlignerIsolatingSpeechFailed": "Δεν ήταν δυνατή η απομόνωση της ομιλίας - οι χρόνοι λήξης ορίστηκαν από τον χρόνο ανάγνωσης.", "forcedAlignerModel": "Μοντέλο ευθυγράμμισης", - "forcedAlignerDownloadEngine": "Λήψη / ενημέρωση μηχανής..." + "forcedAlignerDownloadEngine": "Λήψη / ενημέρωση μηχανής...", + "forcedAlignerEstimatedXOfY": "{0} από {1} γραμμές δεν ήταν δυνατό να ευθυγραμμιστούν και τοποθετήθηκαν βάσει χρόνου ανάγνωσης - οι χρονικοί κώδικές τους είναι μόνο εκτιμώμενοι. Το σενάριο είναι πιθανώς μεγαλύτερο από όσα λέγονται στο βίντεο." }, "export": { "exportImagesProfiles": "Προφίλ εξαγωγής εικόνων", "leftRightMargin": "Αριστερό/δεξί περιθώριο", "topBottomMargin": "Πάνω/κάτω περιθώριο", - "titleExportBluRaySup": "Εξαγωγή Blu-ray (sup)", "lineSpacingPercent": "Διάστιχο %", "paddingLeftRight": "Εσωτερικό περιθώριο αριστερά/δεξιά", "paddingTopBottom": "Εσωτερικό περιθώριο πάνω/κάτω", @@ -1378,10 +1433,21 @@ "titleExportDCinemaInteropPng": "D-Cinema interop/png", "titleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", "imageBasedSubtitleSaved": "Ο υπότιτλος βασισμένος σε εικόνα αποθηκεύτηκε", - "titleExportBdnXml": "Εξαγωγή BDN/xml", "titleExportWebVttThumbnails": "Εξαγωγή WebVTT (μικρογραφίες)", "fullFrameImage": "Εικόνα πλήρους καρέ", "fullFrameImageHint": "Κάθε εικόνα να έχει το μέγεθος του καρέ βίντεο, με τον υπότιτλο στη θέση του", + "stereo3D": "3D", + "stereo3DHint": "Για βίντεο 3D: σχεδίαση του υπότιτλου μία φορά σε κάθε μισό του καρέ (ένα για κάθε μάτι)", + "halfSideBySide": "Μισό δίπλα-δίπλα", + "halfTopBottom": "Μισό πάνω/κάτω", + "depth3D": "Βάθος", + "depth3DHint": "Πόσο εξέχει ο υπότιτλος από την οθόνη - θετική τιμή τον φέρνει πιο κοντά, αρνητική τον σπρώχνει πίσω", + "plane3D": "3D-Plane", + "plane3DHint": "Δίνει σε κάθε υπότιτλο το βάθος που αποθηκεύει γι' αυτόν ένα 3D Blu-ray, από αρχείο 3D-Plane (.ofs) που δημιουργήθηκε με BD3D2MK3D ή OFSExtractor. Το Βάθος χρησιμοποιείται όπου το 3D-Plane δεν έχει τιμή", + "openPlane3DTitle": "Άνοιγμα αρχείου 3D-Plane", + "unableToLoadPlane3DX": "Αδυναμία φόρτωσης 3D-Plane: {0}", + "plane3DXDepthYToZ": "{0} (βάθος {1} έως {2})", + "plane3DXNoDepth": "{0} (χωρίς τιμές βάθους)", "textEffect": "Εφέ κειμένου", "textEffectSettingsTitle": "Ρυθμίσεις εφέ κειμένου", "textEffectPreset": "Προεπιλογή", @@ -1413,13 +1479,10 @@ "statistics": { "title": "Στατιστικά", "titleWithFileName": "Στατιστικά - {0}", - "generalStatistics": "Γενικά στατιστικά", - "mostUsed": "Πιο συχνά χρησιμοποιούμενα...", "mostUsedLines": "Πιο συχνά χρησιμοποιούμενες γραμμές", "mostUsedWords": "Πιο συχνά χρησιμοποιούμενες λέξεις", "nothingFound": "Δεν βρέθηκε τίποτα", "numberOfLinesX": "Αριθμός γραμμών υπότιτλων: {0:#,##0}", - "numberOfFilesX": "Αριθμός αρχείων υπότιτλων: {0:#,##0}", "lengthInFormatXinCharactersY": "Αριθμός χαρακτήρων ως {0}: {1:#,###,##0}", "numberOfCharactersInTextOnly": "Αριθμός χαρακτήρων μόνο σε κείμενο: {0:#,###,##0}", "totalDuration": "Συνολική διάρκεια όλων των υπότιτλων: {0:#,##0}", @@ -1460,7 +1523,6 @@ "gapMaximum": "Κενό - μέγιστο: {0:#,##0} ms", "gapAverage": "Κενό - μέσος όρος: {0:#,##0.##} ms", "gapExceedingMinimum": "Κενό - κάτω από το ελάχιστο ({0:#,##0} ms): {1} ({2:0.00}%)", - "export": "Εξαγωγή...", "subtitles": "Υπότιτλοι", "words": "Λέξεις", "totalDurationShort": "Συνολική διάρκεια", @@ -1490,7 +1552,22 @@ "restoreAutoBackupFile": "Επαναφορά αρχείου αυτόματου αντιγράφου ασφαλείας", "restoreXFromY": "Θέλετε να επαναφέρετε το \"{0}\" από {1};", "deleteAllSubtitleBackups": "Θέλετε να διαγράψετε όλα τα αρχεία αντιγράφων ασφαλείας υπότιτλων;", - "deleteAll": "Διαγραφή όλων" + "deleteAll": "Διαγραφή όλων", + "subtitles": "Υπότιτλοι", + "settingsBackupInfo": "Δημιουργείται αντίγραφο ασφαλείας του Settings.json κατά την εκκίνηση του Subtitle Edit, το πολύ μία φορά κάθε {0} ημέρα(ες) και μόνο αν οι ρυθμίσεις έχουν αλλάξει. Διατηρούνται τα {1} νεότερα αντίγραφα.", + "settingsBackupInfoEveryStart": "Δημιουργείται αντίγραφο ασφαλείας του Settings.json σε κάθε εκκίνηση του Subtitle Edit, αν οι ρυθμίσεις έχουν αλλάξει. Διατηρούνται τα {0} νεότερα αντίγραφα.", + "settingsBackupOff": "Το αυτόματο αντίγραφο ασφαλείας ρυθμίσεων είναι απενεργοποιημένο (Επιλογές → Ρυθμίσεις → Αρχείο).", + "lastSettingsBackupX": "Τελευταίο αντίγραφο ασφαλείας: {0}", + "noSettingsBackupsYet": "Δεν υπάρχουν ακόμη αντίγραφα ασφαλείας ρυθμίσεων", + "openSettingsBackupFolder": "Άνοιγμα φακέλου αντιγράφων ασφαλείας ρυθμίσεων", + "backUpSettingsNow": "Δημιουργία αντιγράφου τώρα", + "settingsBackedUp": "Δημιουργήθηκε αντίγραφο ασφαλείας των τρεχουσών ρυθμίσεων.", + "restoreSettings": "Επαναφορά ρυθμίσεων", + "restoreSettingsFromX": "Θέλετε να αντικαταστήσετε τις τρέχουσες ρυθμίσεις σας με το αντίγραφο ασφαλείας από {0};\n\nΘα δημιουργηθεί πρώτα αντίγραφο ασφαλείας των τρεχουσών ρυθμίσεων. Ορισμένες αλλαγές ισχύουν μόνο μετά από επανεκκίνηση του Subtitle Edit.", + "settingsRestored": "Οι ρυθμίσεις επαναφέρθηκαν. Επανεκκινήστε το Subtitle Edit για να εφαρμοστούν όλες οι αλλαγές.", + "settingsRestoreFailed": "Αδυναμία επαναφοράς ρυθμίσεων: {0}", + "settingsBackupNotValid": "το αντίγραφο ασφαλείας δεν είναι έγκυρο αρχείο ρυθμίσεων, οπότε διατηρήθηκαν οι τρέχουσες ρυθμίσεις σας", + "deleteAllSettingsBackups": "Θέλετε να διαγράψετε όλα τα αρχεία αντιγράφων ασφαλείας ρυθμίσεων;" }, "propertiesDCinema": { "title": "Ιδιότητες D-Cinema SMPTE", @@ -1504,22 +1581,16 @@ "editRate": "Ρυθμός επεξεργασίας", "timeCodeRate": "Ρυθμός χρονικού κώδικα", "startTime": "Χρόνος έναρξης", - "font": "Γραμματοσειρά", "fontId": "ID γραμματοσειράς", "fontUri": "URI γραμματοσειράς", - "generate": "Δημιουργία", - "fontColor": "Χρώμα γραμματοσειράς", "chooseColor": "Επιλογή χρώματος", "fontEffect": "Εφέ γραμματοσειράς", "effectColor": "Χρώμα εφέ", - "fontSize": "Μέγεθος γραμματοσειράς", "topBottomMargin": "Πάνω/κάτω περιθώριο", "fadeUpTime": "Χρόνος εμφάνισης (fade up)", "fadeDownTime": "Χρόνος απόσβεσης (fade down)", - "frames": "Καρέ", "zPosition": "Θέση Z", - "zPositionHelp": "Οι θετικοί αριθμοί απομακρύνουν το κείμενο, οι αρνητικοί το πλησιάζουν· αν η θέση Z είναι μηδέν, τότε είναι 2D", - "export": "Εξαγωγή..." + "zPositionHelp": "Οι θετικοί αριθμοί απομακρύνουν το κείμενο, οι αρνητικοί το πλησιάζουν· αν η θέση Z είναι μηδέν, τότε είναι 2D" }, "webVtt": { "setStylesForSelectedLinesTitle": "Ορισμός στυλ WebVTT για τις επιλεγμένες γραμμές", @@ -1552,20 +1623,66 @@ "compareOnlyInOneFile": "Μόνο σε ένα αρχείο", "compareTextOrTimeDifference": "Διαφορά κειμένου/χρόνου", "compareNumberDifference": "Διαφορά αριθμού", - "ignoreLineBreaks": "Παράβλεψη αλλαγών γραμμής", "ignoreWhitespace": "Παράβλεψη κενών διαστημάτων", "ignoreWhitespaceHint": "Οι γραμμές που διαφέρουν μόνο σε κενά, στηλοθέτες ή αλλαγές γραμμής δεν θεωρούνται διαφορετικές", "ignoreFormatting": "Παράβλεψη μορφοποίησης", - "onlyLookForDifferencesInText": "Αναζήτηση διαφορών μόνο στο κείμενο", - "cannotCompareWithImageBasedSubtitles": "Δεν είναι δυνατή η σύγκριση με υπότιτλους βασισμένους σε εικόνα", - "statisticsTitle": "Στατιστικά", "ignoreFormattingHint": "Οι γραμμές που διαφέρουν μόνο σε ετικέτες μορφοποίησης, όπως ή {\\an8}, δεν θεωρούνται διαφορετικές", "showOnlyDifferencesInText": "Μόνο διαφορές στο κείμενο", + "ignoreNumbering": "Παράβλεψη αρίθμησης", + "ignoreNumberingHint": "Οι γραμμές που διαφέρουν μόνο στον αριθμό τους δεν θεωρούνται διαφορετικές", + "ignoreTimeDifferenceMs": "Χρονική ανοχή (ms)", + "ignoreTimeDifferenceMsHint": "Χρόνοι έναρξης και λήξης που διαφέρουν κατά τόσα χιλιοστά δευτερολέπτου ή λιγότερο δεν θεωρούνται διαφορετικοί", + "compareDifferences": "Διαφορές", + "compareTextDifferences": "Διαφορές κειμένου", + "compareCurrent": "Τρέχον", + "compareReference": "Αναφορά", + "compareEditable": "Επεξεργάσιμο", + "compareEditableHint": "Οι αλλαγές που γίνονται εδώ επιστρέφουν στον υπότιτλο όταν πατήσετε Εφαρμογή", + "compareReadOnly": "Μόνο για ανάγνωση", + "compareTakeFromReference": "Λήψη κειμένου και χρονισμού από την αναφορά", + "compareInsertFromReference": "Εισαγωγή αυτής της γραμμής στον τρέχοντα υπότιτλο", + "compareDeleteFromCurrent": "Διαγραφή αυτής της γραμμής από τον τρέχοντα υπότιτλο", + "compareTakeText": "Λήψη κειμένου", + "compareTakeTiming": "Λήψη χρονισμού", + "compareEditLine": "Επεξεργασία γραμμής", + "compareEditHint": "Ctrl+Enter για αποθήκευση, Esc για ακύρωση", + "compareEdited": "Επεξεργασμένο", + "compareOnePendingChange": "1 εκκρεμής αλλαγή", + "compareXPendingChanges": "{0} εκκρεμείς αλλαγές", + "compareDiscardXChanges": "Απόρριψη των {0} αλλαγών που έγιναν στη Σύγκριση;", + "compareXChangesApplied": "Σύγκριση: εφαρμόστηκαν {0} αλλαγή(ές)", + "compareChangeTextX": "#{0} κείμενο από την αναφορά", + "compareChangeTimingX": "#{0} χρονισμός από την αναφορά", + "compareChangeTextAndTimingX": "#{0} κείμενο και χρονισμός από την αναφορά", + "compareChangeEditedX": "#{0} επεξεργάστηκε", + "compareChangeInsertedX": "#{0} εισήχθη", + "compareChangeDeletedX": "#{0} διαγράφηκε", + "compareSyncPoint": "Σημείο συγχρονισμού", + "compareSyncPointHint": "Σημείο συγχρονισμού - αυτές οι δύο γραμμές εμφανίζονται πάντα ως ζεύγος, και οι γραμμές από πάνω και από κάτω ευθυγραμμίζονται ξεχωριστά", + "compareSyncPickCurrent": "Σημείο συγχρονισμού: χρήση αυτής της τρέχουσας γραμμής", + "compareSyncPickReference": "Σημείο συγχρονισμού: χρήση αυτής της γραμμής αναφοράς", + "compareSyncRemove": "Αφαίρεση σημείου συγχρονισμού", + "compareClearXSyncPoints": "Εκκαθάριση σημείων συγχρονισμού ({0})", + "compareSyncCurrentPickedX": "Η τρέχουσα #{0} επιλέχθηκε ως σημείο συγχρονισμού - επιλέξτε την αντίστοιχη γραμμή αναφοράς και πατήστε Συγχρονισμός", + "compareSyncReferencePickedX": "Η αναφορά #{0} επιλέχθηκε ως σημείο συγχρονισμού - επιλέξτε την αντίστοιχη τρέχουσα γραμμή και πατήστε Συγχρονισμός", + "compareSyncWithCurrentX": "Συγχρονισμός με την τρέχουσα #{0}", + "compareSyncWithReferenceX": "Συγχρονισμός με την αναφορά #{0}", + "compareSyncApply": "Συγχρονισμός", + "compareSyncPointSetXY": "Ορίστηκε σημείο συγχρονισμού: η τρέχουσα #{0} και η αναφορά #{1} εμφανίζονται τώρα ως ζεύγος", + "compareSyncAlreadyPairedXY": "Η τρέχουσα #{0} και η αναφορά #{1} εμφανίζονται ήδη ως ζεύγος με την ίδια έναρξη - τίποτα για συγχρονισμό", + "compareSyncPointShiftedXYZW": "Ορίστηκε σημείο συγχρονισμού: οι τρέχουσες #{0}-#{1} μετατοπίστηκαν {2} ώστε να αρχίζουν με την αναφορά #{3}", + "compareChangeSyncShiftXYZ": "#{0}-#{1} μετατοπίστηκαν {2} (σημείο συγχρονισμού)", + "compareTimingDeltaHint": "Πόσο αργότερα (+) ή νωρίτερα (−) αρχίζει και τελειώνει η αναφορά σε σχέση με την τρέχουσα γραμμή", "loadXFromFile": "Φόρτωση \"{0}\" από αρχείο", + "compareLoadSavedFile": "Φόρτωση αποθηκευμένου αρχείου", "saveCompareHtmlTitle": "Αποθήκευση αρχείου HTML σύγκρισης", "pickMatroskaTrackX": "Επιλογή κομματιού Matroska - {0}", "pickTransportStreamTrackX": "Επιλογή κομματιού transport stream - {0}", + "chapters": "Κεφάλαια", + "dvdVobFilesMissingX": "Λείπουν αρχεία VOB (βρέθηκε το {0}%)", "pickMp4TrackX": "Επιλογή κομματιού MP4 - {0}", + "pickMxfTrackX": "Επιλογή κομματιού MXF - {0}", + "pickMpegTrackX": "Επιλογή κομματιού MPEG - {0}", "rosettaProperties": "Ιδιότητες Timed Text Rosetta IMSC", "rosettaFontSize": "Μέγεθος γραμματοσειράς (ύψος σειράς)", "propertyTimeBase": "Χρονική βάση", @@ -1575,7 +1692,6 @@ "propertyDefaultRegion": "Προεπιλεγμένη περιοχή", "propertyStyleAttributeName": "Όνομα χαρακτηριστικού στυλ", "propertyTimeCodeFormat": "Μορφή χρονικού κώδικα", - "propertyFileExtension": "Επέκταση αρχείου", "propertyTopOrigin": "Πάνω αφετηρία", "propertyTopExtent": "Πάνω έκταση", "propertyBottomOrigin": "Κάτω αφετηρία", @@ -1625,7 +1741,6 @@ "selectionIntersect": "Τομή με την επιλογή" }, "multipleReplace": { - "title": "Πολλαπλή αντικατάσταση", "editRule": "Επεξεργασία κανόνα", "newRule": "Νέος κανόνας", "editCategory": "Επεξεργασία κατηγορίας", @@ -1642,24 +1757,23 @@ "findWhat": "Εύρεση του", "descriptionOptional": "Περιγραφή (προαιρετικά)", "invalidRegularExpressionX": "Μη έγκυρη κανονική έκφραση: {0}", - "regularExpressionTooSlowX": "Η κανονική έκφραση εγκατέλειψε μετά από {0} δευτερόλεπτα - ο κανόνας παραλείπεται, δοκιμάστε απλούστερο μοτίβο" + "regularExpressionTooSlowX": "Η κανονική έκφραση εγκατέλειψε μετά από {0} δευτερόλεπτα - ο κανόνας παραλείπεται, δοκιμάστε απλούστερο μοτίβο", + "moveToCategory": "Μετακίνηση σε κατηγορία" }, "find": { "searchTextWatermark": "Αναζήτηση κειμένου...", "wholeWord": "Ολόκληρη λέξη", - "caseSensitive": "Διάκριση πεζών-κεφαλαίων", - "caseInsensitive": "Χωρίς διάκριση πεζών-κεφαλαίων", "findPrevious": "Εύρεση προηγούμενου", "findNext": "Εύρεση επόμενου", "replaceAndFindNext": "Αντικατάσταση και εύρεση επόμενου", "replaceAll": "Αντικατάσταση όλων", - "replaceTitle": "Αντικατάσταση", - "replaceWith": "Αντικατάσταση με", "replaceTextWatermark": "Αντικατάσταση με...", "replaceIn": "Αντικατάσταση/αναζήτηση σε", "replaceInTextAndOriginal": "Κείμενο και αρχικό κείμενο", "replaceInTextOnly": "Μόνο κείμενο", - "replaceInOriginalOnly": "Μόνο αρχικό κείμενο" + "replaceInOriginalOnly": "Μόνο αρχικό κείμενο", + "replacedOneOccurrence": "Αντικαταστάθηκε μία εμφάνιση", + "replacedXOccurrences": "Αντικαταστάθηκαν {0} εμφανίσεις" }, "regularExpressionContextMenu": { "wordBoundary": "Όριο λέξης (\\b)", @@ -1687,6 +1801,7 @@ "xLinesYSubtitles": "{0} γραμμές, {1} υπότιτλοι", "xLinesYSubtitlesZErrors": "{0} γραμμές, {1} υπότιτλοι, {2} σφάλμα(τα)", "couldNotParseAsX": "Αδυναμία ανάλυσης ως {0}", + "readAsXUseAsY": "Η πηγή δεν ήταν δυνατό να διαβαστεί ως {1}, αλλά μπορούσε να διαβαστεί ως {0}.\nΧρήση των γραμμών και συνέχιση αποθήκευσης ως {1};", "selectedXCharactersYLines": "Επιλέχθηκαν: {0} χαρακτήρες σε {1} γραμμή(ές)", "replacedXOccurrences": "Αντικαταστάθηκαν {0} εμφανίσεις", "invalidRegularExpression": "Μη έγκυρη κανονική έκφραση", @@ -1701,7 +1816,6 @@ "aiReview": { "title": "Επισκόπηση με AI", "review": "Επισκόπηση", - "stop": "Διακοπή", "editPrompt": "Επεξεργασία προτροπής...", "editPromptTitle": "Επεξεργασία προτροπής επισκόπησης", "promptInfo": "Οδηγίες που αποστέλλονται στο μοντέλο - το {language} αντικαθίσταται με τη γλώσσα του υπότιτλου.", @@ -1712,7 +1826,6 @@ "reviewingLineXOfY": "Επισκόπηση γραμμής {0} από {1}...", "reviewDone": "Η επισκόπηση ολοκληρώθηκε - {0} προτάσεις σε {1} γραμμές", "noIssuesFound": "Δεν βρέθηκαν προβλήματα", - "categoryAll": "Όλα", "categorySpelling": "Ορθογραφία", "categoryGrammar": "Γραμματική", "categoryPunctuation": "Στίξη", @@ -1724,8 +1837,23 @@ "largeChangeWarning": "Μεγάλη αλλαγή - μοιάζει με ξαναγράψιμο, ελέγξτε προσεκτικά", "mismatchWarning": "Δεν μοιάζει με το πρωτότυπο - μπορεί να ανήκει σε άλλη γραμμή", "engineError": "Δεν ήταν δυνατή η επικοινωνία με τη μηχανή AI: {0}", - "setupHint": "Παρακαλώ επιλέξτε πρώτα μηχανή και μοντέλο στο Εργαλεία -> Επισκόπηση με AI.", - "playCurrentLineHint": "Αναπαραγωγή της επιλεγμένης γραμμής στο πρόγραμμα αναπαραγωγής και παύση στο τέλος της (ή διπλό κλικ σε μια γραμμή)" + "playCurrentLineHint": "Αναπαραγωγή της επιλεγμένης γραμμής στο πρόγραμμα αναπαραγωγής και παύση στο τέλος της (ή διπλό κλικ σε μια γραμμή)", + "editAfterHint": "Κάντε κλικ στο κείμενο της επιλεγμένης σειράς για να επεξεργαστείτε τη διόρθωση πριν την εφαρμόσετε (Enter για αποθήκευση, Escape για ακύρωση)", + "template": "Πρότυπο", + "templatePlaceholder": "Επιλέξτε ένα πρότυπο για αντικατάσταση της προτροπής", + "templateStandard": "Τυπική διόρθωση κειμένου", + "templateSpeechToText": "Καθαρισμός ομιλίας σε κείμενο", + "templateMachineTranslation": "Διόρθωση αυτόματης μετάφρασης", + "templateSdh": "SDH / άτομα με προβλήματα ακοής", + "referenceContext": "Πλαίσιο αναφοράς", + "referenceContextInfo": "Προαιρετικό. Ονόματα, χαρακτήρες, γλωσσάρι, σύνοψη ή σημειώσεις ύφους - το μοντέλο το θεωρεί αυθεντία για ονόματα και όρους. Αποστέλλεται με κάθε παρτίδα.", + "referenceContextPlaceholder": "Ονόματα: Kaito, θεία Mei, Dr. Hollis\nΌροι: Shinkansen, πυρήνας warp\nΣύνοψη: Ο Kaito ταξιδεύει στο Τόκιο για να βρει τον αγνοούμενο πατέρα του.", + "generateContext": "Δημιουργία με AI", + "generateContextHint": "Αφήστε την επιλεγμένη μηχανή AI να διαβάσει τον υπότιτλο και να συντάξει ονόματα, όρους και σύνοψη - ελέγξτε το αποτέλεσμα πριν τη χρήση", + "generatingContextPartXOfY": "Ανάγνωση μέρους {0} από {1}...", + "generatingContextSynopsis": "Σύνταξη σύνοψης...", + "replaceContextQuestion": "Αντικατάσταση του τρέχοντος πλαισίου αναφοράς;", + "noContextGenerated": "Η μηχανή AI δεν επέστρεψε αξιοποιήσιμες πληροφορίες αναφοράς." }, "aiAssistant": { "title": "Βοηθός AI", @@ -1743,22 +1871,14 @@ "showReasoning": "Εμφάνιση συλλογισμού του μοντέλου" }, "fixCommonErrors": { - "title": "Διόρθωση συνηθισμένων σφαλμάτων", - "step1": "Βήμα 1/2 - Επιλέξτε ποια σφάλματα να διορθωθούν", - "whatToFix": "Τι να διορθωθεί", - "example": "Παράδειγμα", - "selectAll": "Επιλογή όλων", - "inverseSelection": "Αντιστροφή επιλογής", "back": "< &Πίσω", "next": "&Επόμενο >", - "step2": "Βήμα 2/2 - Επαλήθευση διορθώσεων", "fixes": "Διορθώσεις", "ruleDetailsDotDotDot": "Λεπτομέρειες κανόνα...", "showOnlyThisRule": "Εμφάνιση μόνο των διορθώσεων αυτού του κανόνα", "appliedRulesForLineX": "Εφαρμοσμένοι κανόνες για τη γραμμή {0}", "ruleX": "Κανόνας: {0}", "log": "Καταγραφή", - "function": "Λειτουργία", "removedEmptyLine": "Αφαίρεση κενής γραμμής", "removedEmptyLineAtTop": "Αφαίρεση κενής γραμμής στην αρχή", "removedEmptyLineAtBottom": "Αφαίρεση κενής γραμμής στο τέλος", @@ -1779,13 +1899,13 @@ "removeLineBreaksPixelWidth": "Αναίρεση αλλαγής γραμμής σε υπότιτλους που χωρούν σε μία γραμμή (πλάτος σε pixel)", "fixUppercaseIInsideLowercaseWords": "Διόρθωση κεφαλαίου 'i' μέσα σε πεζές λέξεις (σφάλμα OCR)", "fixDoubleApostrophes": "Διόρθωση διπλών αποστρόφων ('') σε ένα εισαγωγικό (\")", + "fixMisreadQuotes": "Διόρθωση αποστρόφων που διαβάστηκαν λάθος ως διπλά εισαγωγικά (OCR, Αγγλικά)", "addPeriods": "Προσθήκη τελείας μετά από γραμμές όπου η επόμενη γραμμή ξεκινά με κεφαλαίο γράμμα", "startWithUppercaseLetterAfterParagraph": "Έναρξη με κεφαλαίο γράμμα μετά από παράγραφο", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Έναρξη με κεφαλαίο γράμμα μετά από τελεία μέσα σε παράγραφο", "startWithUppercaseLetterAfterColon": "Έναρξη με κεφαλαίο γράμμα μετά από άνω-κάτω τελεία/άνω τελεία", "fixLowercaseIToUppercaseI": "Διόρθωση μόνου πεζού 'i' σε 'I' (Αγγλικά)", "fixCommonOcrErrors": "Διόρθωση συνηθισμένων σφαλμάτων OCR (με χρήση λίστας αντικατάστασης OCR)", - "commonOcrErrorsFixed": "Διορθώθηκαν συνηθισμένα σφάλματα OCR (χρησιμοποιήθηκε αρχείο OcrReplaceList): {0}", "removeSpaceBetweenNumber": "Αφαίρεση κενού μεταξύ αριθμών", "breakDialogsOnOneLine": "Διαίρεση διαλόγων σε μία γραμμή", "removeDialogFirstInNonDialogs": "Αφαίρεση αρχικής παύλας στην πρώτη γραμμή για μη διαλόγους", @@ -1802,18 +1922,17 @@ "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Foo
bar! -> Foo bar!", "fixDoubleApostrophesExample": "''Has double single quotes'' -> \"Has single double quote\"", + "fixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "addPeriodsExample": "Hello world -> Hello world.", "startWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: Foobar!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Hello there! how are you? -> Hello there! How are you?", "startWithUppercaseLetterAfterColonExample": "Speaker: hello world! -> Speaker: Hello world!", "removeHyphensSingleLineExample": "- Foobar. -> Foobar.", "fix3PlusLinesExample": "Foo
bar
baz! -> Foo bar baz!", - "xMissingQuotesAdded": "Εισαγωγικά που προστέθηκαν: {0}", "fix3PlusLine": "Διόρθωση υπότιτλου με περισσότερες από δύο γραμμές", "fix3PlusLines": "Διόρθωση υπότιτλων με περισσότερες από δύο γραμμές", "analysing": "Ανάλυση...", "nothingToFix": "Τίποτα για διόρθωση :)", - "fixesFoundX": "Διορθώσεις που βρέθηκαν: {0}", "xFixesApplied": "Διορθώσεις που εφαρμόστηκαν: {0}", "xFixesYSelected": "{0} διορθώσεις - {1} επιλεγμένες", "nothingFixableBut": "Τίποτα δεν μπόρεσε να διορθωθεί αυτόματα. Ο υπότιτλος περιέχει σφάλματα - δείτε την καταγραφή για λεπτομέρειες", @@ -1822,7 +1941,6 @@ "fixFirstLetterToUppercaseAfterParagraph": "Διόρθωση πρώτου γράμματος σε κεφαλαίο μετά από παράγραφο", "mergeShortLine": "Συγχώνευση σύντομης γραμμής (μία πρόταση)", "mergeShortLineAll": "Συγχώνευση σύντομης γραμμής (όλα εκτός διαλόγων)", - "unbreakShortLinePixelWidth": "Αναίρεση αλλαγής γραμμής σύντομης γραμμής (πλάτος σε pixel)", "breakLongLine": "Αλλαγή γραμμής μεγάλης γραμμής", "fixLongDisplayTime": "Διόρθωση μεγάλου χρόνου εμφάνισης", "fixInvalidItalicTag": "Διόρθωση μη έγκυρης ετικέτας πλάγιας γραφής", @@ -1845,7 +1963,6 @@ "fixUppercaseIInsideLowercaseWord": "Διόρθωση κεφαλαίου 'i' μέσα σε πεζή λέξη", "fixMissingPeriodAtEndOfLine": "Προσθήκη τελείας που λείπει στο τέλος της γραμμής", "refreshFixes": "Ανανέωση διαθέσιμων διορθώσεων", - "applyFixes": "Εφαρμογή επιλεγμένων διορθώσεων και κλείσιμο", "autoBreak": "Αυτόματη &αλλαγή", "unbreak": "&Αναίρεση αλλαγής", "fixDoubleDash": "Διόρθωση '--' -> '...'", @@ -1864,8 +1981,6 @@ "fixSpaceBetweenNumbersExample": "1 100 -> 1100", "fixDialogsOneLineExample": "Hi John! - Hi Ida! -> Hi John!
- Hi Ida!", "removeDialogFirstInNonDialogsExample": "- How are you? -> How are you?", - "selectDefault": "Επιλογή προεπιλογής", - "setDefault": "Ορισμός τρεχουσών διορθώσεων ως προεπιλογή", "fixContinuationStyleX": "Διόρθωση στυλ συνέχειας: {0}", "fixUnnecessaryLeadingDots": "Αφαίρεση περιττών αρχικών τελειών", "fixCommonErrorsProfiles": "Προφίλ διόρθωσης συνηθισμένων σφαλμάτων", @@ -1873,7 +1988,6 @@ "searchRulesDotDotDot": "Αναζήτηση κανόνων...", "goToApplyFixes": "Μετάβαση στην εφαρμογή διορθώσεων", "backToFixList": "Πίσω στη λίστα διορθώσεων", - "applyFixesAndClose": "Εφαρμογή διορθώσεων και κλείσιμο", "fixCommonOcrErrorsStep2": "Διόρθωση συνηθισμένων σφαλμάτων, βήμα 2 (εφαρμογή διορθώσεων)", "fixCommonOcrErrorsStep2FixesFoundX": "Διόρθωση συνηθισμένων σφαλμάτων, βήμα 2 - Διορθώσεις που βρέθηκαν: {0}", "action": "Ενέργεια", @@ -1886,18 +2000,11 @@ "adjustDurations": { "title": "Προσαρμογή διαρκειών", "adjustVia": "Προσαρμογή μέσω", - "seconds": "Δευτερόλεπτα", - "percent": "Ποσοστό", "recalculate": "Επανυπολογισμός", "addSeconds": "Προσθήκη δευτερολέπτων", - "setAsPercent": "Ορισμός ως ποσοστό της διάρκειας", "note": "Σημείωση: Ο χρόνος εμφάνισης δεν θα επικαλύπτει τον χρόνο έναρξης του επόμενου κειμένου", "fixed": "Σταθερή", - "milliseconds": "Χιλιοστά του δευτερολέπτου", "extendOnly": "Μόνο επέκταση", - "enforceDurationLimits": "Επιβολή ελάχιστης και μέγιστης διάρκειας", - "checkShotChanges": "Χωρίς επέκταση πέρα από αλλαγές πλάνου", - "batchCheckShotChanges": "Σεβασμός αλλαγών πλάνου (αν είναι διαθέσιμες)", "recalculateRequiresOcrNote": "Ο επανυπολογισμός δεν είναι διαθέσιμος — ένας ή περισσότεροι υπότιτλοι δεν έχουν κείμενο OCR. Εκτελέστε πρώτα OCR." }, "applyDurationLimits": { @@ -1905,6 +2012,8 @@ "fixMinDurationMs": "Διόρθωση ελάχιστης διάρκειας (ms)", "doNotGoPastShotChange": "Χωρίς υπέρβαση αλλαγής πλάνου", "fixMaxDurationMs": "Διόρθωση μέγιστης διάρκειας (ms)", + "fixMinDurationFrames": "Διόρθωση ελάχιστης διάρκειας (καρέ)", + "fixMaxDurationFrames": "Διόρθωση μέγιστης διάρκειας (καρέ)", "minimumDurationMilliseconds": "Ελάχιστη διάρκεια (χιλιοστά δευτερολέπτου):", "maximumDurationMilliseconds": "Μέγιστη διάρκεια (χιλιοστά δευτερολέπτου):", "maxDurationShouldBeHigherThanMinDuration": "Η μέγιστη διάρκεια πρέπει να είναι μεγαλύτερη από την ελάχιστη διάρκεια", @@ -1924,12 +2033,8 @@ }, "beautifyTimeCodes": { "title": "Καλλωπισμός χρονικών κωδίκων", - "beautifySettings": "Ρυθμίσεις καλλωπισμού", "snapToFrames": "Προσκόλληση σε καρέ", - "frameGap": "Κενό καρέ", "minDuration": "Ελάχιστη διάρκεια (ms)", - "shotChangeThreshold": "Κατώφλι αλλαγής πλάνου (ms)", - "shotChangeOffset": "Μετατόπιση αλλαγής πλάνου (καρέ)", "original": "Αρχικό", "beautified": "Καλλωπισμένο", "subtitlesCount": "Υπότιτλοι", @@ -1958,13 +2063,80 @@ "timeCodesExtractFailed": "Αδυναμία ανάγνωσης χρονικών κωδίκων από το βίντεο", "timeCodesHint": "Προσκόλληση των σημείων στους πραγματικούς χρόνους καρέ του βίντεο αντί για υπόθεση σταθερού ρυθμού καρέ. Απαιτεί ανάγνωση ολόκληρου του βίντεο μία φορά· το αποτέλεσμα αποθηκεύεται στη μνήμη cache." }, + "improveTimeCodes": { + "title": "Βελτίωση χρονικών κωδίκων (εξαναγκασμένη ευθυγράμμιση)", + "aligner": "Ευθυγραμμιστής", + "alignerHint": "Το μοντέλο που αναζητά κάθε γραμμή στον ήχο. Οι καλύτερες επιλογές για τη γλώσσα του υπότιτλου εμφανίζονται πρώτες.", + "maxShift": "Μέγιστη μετατόπιση (δευτερόλεπτα)", + "maxShiftHint": "Πόσο εκτός συγχρονισμού μπορεί να είναι ο υπότιτλος. Μια γραμμή της οποίας η έναρξη θα μετακινούνταν περισσότερο παραμένει ως έχει και επισημαίνεται. Όποια κι αν είναι η τιμή, μια μεμονωμένη γραμμή που θέλει να μετακινηθεί πάνω από μισό δευτερόλεπτο περισσότερο από τις γύρω γραμμές δεν μετακινείται στα τυφλά: ακολουθεί τις γειτονικές της όταν έχουν μετακινηθεί όλες, διαφορετικά προτείνεται χωρίς σημάδι ελέγχου για να την ελέγξετε.", + "adjustStartTimes": "Προσαρμογή χρόνων έναρξης", + "adjustEndTimes": "Προσαρμογή χρόνων λήξης", + "isolateSpeech": "Απομόνωση ομιλίας πρώτα (αργό)", + "isolateSpeechHint": "Αφαιρεί τη μουσική και τα ηχητικά εφέ πριν από την ευθυγράμμιση, ώστε ο ευθυγραμμιστής να ακούει μόνο τον διάλογο. Βοηθά σε γραμμές που λέγονται πάνω από δυνατή μουσική ή δράση, αλλά διαρκεί περίπου όσο ο ίδιος ο ήχος με GPU - και πολλές φορές περισσότερο χωρίς.", + "isolatingSpeech": "Απομόνωση ομιλίας... (αυτό διαρκεί λίγο)", + "isolateSpeechFailed": "Δεν ήταν δυνατή η απομόνωση της ομιλίας - η ευθυγράμμιση έγινε με τον αρχικό ήχο.", + "checkWithSpeechToText": "Έλεγχος με ομιλία σε κείμενο", + "checkWithSpeechToTextHint": "Μεταγράφει επίσης τον ήχο και ελέγχει κάθε μετακίνηση σε σχέση με το πού ακούστηκαν πραγματικά οι λέξεις. Οι μεγάλες μετακινήσεις που επιβεβαιώνει η ομιλία επιλέγονται αυτόματα, ενώ οι μετακινήσεις μακριά από το σημείο όπου ακούγεται μια γραμμή μένουν αποεπιλεγμένες για να τις ελέγξετε. Δείχνει επίσης πόσο από κάθε γραμμή ακούστηκε - ένα χαμηλό ποσοστό σημαίνει ότι το κείμενο διαφέρει από αυτό που λέγεται. Ένας υπότιτλος που είναι πιο εκτός συγχρονισμού από τη μέγιστη μετατόπιση - σταθερή μετατόπιση, ολίσθηση από αναντιστοιχία ρυθμού καρέ ή άλματα όπου κόπηκαν σκηνές - συγχρονίζεται πρώτα με βάση τις λέξεις που ακούστηκαν. Χρησιμοποιεί το Crisp ASR Parakeet, που χρειάζεται λίγα λεπτά για μια ταινία μεγάλου μήκους με GPU.", + "checkWithSpeechToTextNotAvailableX": "Ο έλεγχος με ομιλία σε κείμενο δεν είναι διαθέσιμος για {0}", + "transcribingToCheck": "Μεταγραφή για έλεγχο της ευθυγράμμισης...", + "speechToTextFailed": "Η ομιλία σε κείμενο απέτυχε - οι χρονικοί κώδικες δεν ελέγχθηκαν.", + "speechToTextX": "Ομιλία σε κείμενο: {0}", + "speechToTextConfirmedXDisputedY": "Ομιλία: {0} επιβεβαιωμένες, {1} αμφισβητούμενες", + "hardlyHeardX": "Η ομιλία σε κείμενο άκουσε μόνο το {0}% των λέξεων του υπότιτλου. Είναι ο υπότιτλος στη γλώσσα που ομιλείται; Ο ευθυγραμμιστής δεν μπορεί να τοποθετήσει μια μετάφραση.", + "heard": "Ακούστηκε", + "heardHint": "Πόσο από τη γραμμή άκουσε η ομιλία σε κείμενο. Ένα χαμηλό ποσοστό σημαίνει ότι το κείμενο διαφέρει από αυτό που λέγεται - εκεί όπου ο ευθυγραμμιστής είναι πιο πιθανό να κάνει λάθος.", + "statusConfirmedBySpeech": "Επιβεβαιώθηκε από την ομιλία", + "statusDisputedBySpeech": "Ακούστηκε εκεί που ήταν", + "statusMovedWithSync": "Μετακινήθηκε με τον συγχρονισμό", + "syncedFirstXY": "Πρώτα συγχρονισμός: {0} s στην αρχή, {1} s στο τέλος", + "showSpeechOnly": "Εμφάνιση μόνο ομιλίας", + "showSpeechOnlyHint": "Σχεδίαση της ευθυγραμμισμένης κυματομορφής από τον ήχο χωρίς μουσική και ηχητικά εφέ· η αρχική κυματομορφή παραμένει ως έχει, για σύγκριση. Διαθέσιμο αφού απομονωθεί η ομιλία - εδώ ή με το \"Εμφάνιση μόνο ομιλίας\" στην κυματομορφή του κύριου παραθύρου.", + "align": "Ευθυγράμμιση", + "original": "Αρχικό", + "aligned": "Ευθυγραμμισμένο", + "intro": "Επιλέξτε έναν ευθυγραμμιστή και πατήστε \"Ευθυγράμμιση\" για να αναζητηθεί κάθε γραμμή στον ήχο και να βελτιωθούν οι χρονικοί κώδικές της.", + "extractingAudio": "Εξαγωγή ήχου...", + "aligningBatchXOfY": "Ευθυγράμμιση... παρτίδα {0} από {1}", + "extractAudioFailed": "Δεν ήταν δυνατή η εξαγωγή του ήχου με το ffmpeg.", + "modelWillBeDownloaded": "Θα γίνει λήψη του {0}", + "summaryXRetimedYKeptZSkipped": "Επαναχρονίστηκαν: {0} · Διατηρήθηκαν: {1} · Χωρίς ομιλία: {2}", + "meanShiftX": "Μέση μετατόπιση: {0} ms", + "toCheckX": "Για έλεγχο: {0}", + "largeMovesToCheckX": "{0} γραμμή(ές) θα μετακινούνταν πολύ μόνες τους και έμειναν αποεπιλεγμένες - ακούστε τες (το F5 αναπαράγει την ευθυγραμμισμένη γραμμή, το Shift+F5 την αρχική) και επιλέξτε όσες είναι σωστές.", + "linesToCheckX": "{0} γραμμή(ές) έμειναν αποεπιλεγμένες για έλεγχο - ακούστε τες (το F5 αναπαράγει την ευθυγραμμισμένη γραμμή, το Shift+F5 την αρχική) και επιλέξτε όσες είναι σωστές.", + "changeXOfY": "Αλλαγή {0} από {1}", + "previousChange": "Προηγούμενη αλλαγή", + "nextChange": "Επόμενη αλλαγή", + "startShift": "Έναρξη", + "endShift": "Λήξη", + "statusRetimed": "Επαναχρονίστηκε", + "statusMovedWithNeighbours": "Μετακινήθηκε μαζί με τις γειτονικές", + "statusLargeMoveUnconfirmed": "Μεγάλη μετακίνηση - ακούστε, επιλέξτε για εφαρμογή", + "statusUnchanged": "Ήδη στη θέση του", + "statusNoSpeech": "Χωρίς ομιλία", + "statusShiftTooLarge": "Διατηρήθηκε - πολύ μεγάλη μετατόπιση", + "statusFailed": "Διατηρήθηκε - ο ευθυγραμμιστής απέτυχε", + "statusAdjustedByHand": "Προσαρμόστηκε χειροκίνητα", + "alignedWaveformHint": "Σύρετε μια γραμμή για να τη μετακινήσετε ή σύρετε τα άκρα της για να αλλάξετε την έναρξη ή τη λήξη της.", + "playLine": "Αναπαραγωγή γραμμής", + "undoAdjustment": "Αναίρεση προσαρμογής", + "playPause": "Αναπαραγωγή / παύση", + "playAligned": "Ευθυγραμμισμένο", + "playAlignedHint": "Αναπαραγωγή της επιλεγμένης γραμμής με τους ευθυγραμμισμένους χρονικούς κώδικές της", + "apply": "Εφαρμογή", + "applyHint": "Αποεπιλέξτε μια γραμμή για να διατηρήσει τους αρχικούς χρονικούς κώδικές της. Κάντε διπλό κλικ σε μια γραμμή για αναπαραγωγή. Οι γραμμές μπορούν επίσης να μετακινηθούν ή να αλλάξουν μέγεθος στην ευθυγραμμισμένη κυματομορφή." + }, "beautifyTimeCodesProfile": { "title": "Επεξεργασία προφίλ καλλωπισμού χρονικών κωδίκων", "loadPreset": "Φόρτωση προεπιλογής", "presetDefault": "Προεπιλογή", "presetNetflix": "Netflix", "presetSdi": "SDI", - "general": "Γενικά", + "saveAsProfile": "Αποθήκευση ως προφίλ...", + "deleteProfile": "Διαγραφή προφίλ", + "profileName": "Όνομα προφίλ", + "overwriteProfileX": "Υπάρχει ήδη προφίλ με όνομα \"{0}\". Αντικατάσταση;", + "deleteProfileX": "Διαγραφή προφίλ \"{0}\";", "gap": "Κενό", "gapSuffix": "καρέ (ενημερώνει επίσης τα μη μηδενικά πεδία κενού παρακάτω)", "milliseconds": "ms", @@ -1993,9 +2165,12 @@ "hintChaining": "Πώς να αντιμετωπίζονται υπότιτλοι που σχεδόν αγγίζονται — επέκταση μαζί ή απώθηση, ανάλογα με το αν υπάρχει αλλαγή πλάνου ενδιάμεσα." }, "bridgeGaps": { - "title": "Γεφύρωση κενών", "bridgeGapsSmallerThan": "Γεφύρωση κενών μικρότερων από (ms)", "minGap": "Ελάχιστο κενό (ms)", + "bridgeGapsSmallerThanFrames": "Γεφύρωση κενών μικρότερων από (καρέ)", + "minGapFrames": "Ελάχιστο κενό (καρέ)", + "calculateBridgeGapsSmallerThanDotDotDot": "Υπολογισμός ορίου γεφύρωσης κενών από ρυθμό καρέ...", + "useXMsAsBridgeGapsSmallerThan": "Γεφύρωση κενών μικρότερων από \"{0}\" χιλιοστά δευτερολέπτου;", "numberOfSmallGapsBridgedX": "Αριθμός μικρών κενών που γεφυρώθηκαν: {0}", "percentFoPrevious": "Κενό για το προηγούμενο (%)", "gapChange": "Αλλαγή κενού" @@ -2007,8 +2182,6 @@ "sortBy": { "title": "Ταξινόμηση υπότιτλων", "sortOrder": "Σειρά ταξινόμησης", - "sortByNumber": "Αριθμός", - "sortByStartTime": "Χρόνος έναρξης", "sortByEndTime": "Χρόνος τέλους" }, "batchConvert": { @@ -2031,6 +2204,7 @@ "addColor": "Προσθήκη χρώματος", "deleteLinesWithSpecificActorsOrStyles": "Διαγραφή γραμμών με ηθοποιούς ή στυλ (διαχωρίστε πολλαπλά με κόμμα)", "useSourceStylesIfPossible": "Χρήση στυλ πηγής αν είναι δυνατόν", + "keepSourceEmbeddedFonts": "Διατήρηση ενσωματωμένων γραμματοσειρών της πηγής (υποσέλιδο)", "editStyles": "Επεξεργασία στυλ", "editProperties": "Επεξεργασία ιδιοτήτων", "editAttachments": "Επεξεργασία συνημμένων", @@ -2051,7 +2225,6 @@ "assaChangeStyleFromStyle": "Αλλαγή στυλ από", "assaChangeStyleToStyle": "σε", "assaChangeStyleImportStyle": "Εισαγωγή στυλ...", - "assaChangeStyleImportedX": "Εισήχθη: {0}", "assaChangeStyleTrimUnusedStyles": "Περικοπή αχρησιμοποίητων στυλ", "assaChangeStylePropertiesTitle": "Αλλαγή ιδιοτήτων στυλ", "assaChangeStylePropertiesInfo": "Αλλάζει τα επιλεγμένα πεδία σε κάθε στυλ του αρχείου, χωρίς να επηρεάζει τα ίδια τα στυλ.", @@ -2063,13 +2236,52 @@ "convertColorsToDialogReBreakLines": "Επαναδιαχωρισμός γραμμών", "snapTimeCodesToFramesInfo": "Στρογγυλοποιεί κάθε χρόνο έναρξης και λήξης στο πλησιέστερο καρέ. Ο ρυθμός καρέ διαβάζεται από αρχείο βίντεο με το ίδιο όνομα με το αρχείο υπότιτλων, εκτός αν επιλεγεί σταθερός ρυθμός καρέ.", "addFolderDotDotDot": "Προσθήκη φακέλου...", + "addFolderRecursiveDotDotDot": "Προσθήκη φακέλου αναδρομικά...", "selectFolderToConvert": "Επιλογή φακέλου με αρχεία προς μετατροπή", "includeSubfolders": "Συμπερίληψη υποφακέλων κατά την προσθήκη φακέλου", + "videoFilesWhenAddingFolder": "Αρχεία βίντεο (mkv, mp4, ts...) κατά την προσθήκη φακέλου", + "videoFilesAsk": "Ερώτηση", + "videoFilesInclude": "Προσθήκη των κομματιών υπότιτλων τους", + "videoFilesSkip": "Παράλειψη", + "folderContainsXVideoFiles": "Ο φάκελος περιέχει {0} αρχείο(α) βίντεο (mkv, mp4, ts...).\n\nΝα προστεθούν και τα ενσωματωμένα κομμάτια υπότιτλών τους ή μόνο τα αρχεία υπότιτλων;", + "addVideoFiles": "Προσθήκη αρχείων βίντεο", + "skipVideoFiles": "Μόνο αρχεία υπότιτλων", + "doNotAskAgainVideoFiles": "Να μην ερωτηθώ ξανά (αλλαγή στις Ρυθμίσεις μαζικής μετατροπής)", + "settingsSectionOutput": "Έξοδος", + "settingsSectionAddingFiles": "Προσθήκη αρχείων", + "settingsSectionImageBasedSubtitles": "Υπότιτλοι βασισμένοι σε εικόνα (OCR)", + "settingsSectionOther": "Άλλα", "keepSourceFileTimestamp": "Διατήρηση ημερομηνίας/ώρας αρχείου πηγής στα αρχεία εξόδου", - "scanningFolderX": "Σάρωση {0}..." + "preventSleepWhileConverting": "Αποτροπή αναστολής λειτουργίας του υπολογιστή κατά τη μετατροπή", + "scanningFolderX": "Σάρωση {0}...", + "transportStreamSettings": "Ρυθμίσεις Transport Stream", + "transportStreamSettingsDotDotDot": "Ρυθμίσεις Transport Stream...", + "transportStreamSettingsInfo": "Ισχύει για κομμάτια υπότιτλων που εξάγονται από αρχεία Transport Stream (.ts/.m2ts). Η θέση και το μέγεθος βίντεο επηρεάζουν μόνο κομμάτια εικόνας DVB που εξάγονται σε μορφή βασισμένη σε εικόνα.", + "transportStreamOverrideXPosition": "Παράκαμψη αρχικής θέσης X", + "transportStreamOverrideYPosition": "Παράκαμψη αρχικής θέσης Y", + "transportStreamOverrideVideoSize": "Παράκαμψη αρχικού μεγέθους βίντεο", + "transportStreamBottomMargin": "Κάτω περιθώριο", + "transportStreamFileNameEnding": "Κατάληξη ονόματος αρχείου", + "transportStreamFileNameEndingInfo": "Προστίθεται πριν από την επέκταση για κάθε κομμάτι που εξάγεται. Αφήστε κενό για χρήση του κανονικού επιθήματος γλώσσας.", + "transportStreamOnlyTeletext": "Μόνο teletext", + "transportStreamGetSizeFromVideo": "Λήψη μεγέθους από βίντεο...", + "twoLetterLanguageCodeUppercase": "Διγράμματος κωδικός γλώσσας (κεφαλαία)", + "threeLetterLanguageCodeUppercase": "Τριγράμματος κωδικός γλώσσας (κεφαλαία)", + "formatContainsDotDotDot": "Η μορφή περιέχει...", + "extensionIsDotDotDot": "Η επέκταση είναι...", + "statusIsError": "Η κατάσταση είναι σφάλμα", + "forcedTracksOnly": "Μόνο εξαναγκασμένα κομμάτια", + "xConvertedYFailedInZ": "{0:#,###,##0} μετατράπηκαν, {1:#,###,##0} απέτυχαν σε {2}", + "xNotProcessed": "{0:#,###,##0} δεν επεξεργάστηκαν", + "removeUnicodeControlCharactersTitle": "Αφαίρεση χαρακτήρων ελέγχου Unicode", + "removeUnicodeControlCharactersInfo": "Αφαιρεί από το κείμενο τους αόρατους χαρακτήρες ελέγχου κατεύθυνσης Unicode (LRM, RLM, LRE, RLE, PDF, LRO και RLO) και αντικαθιστά τα αδιάσπαστα κενά με κανονικά κενά.", + "preset": "Προεπιλογή", + "savePresetDotDotDot": "Αποθήκευση προεπιλογής...", + "deletePreset": "Διαγραφή προεπιλογής", + "presetName": "Όνομα προεπιλογής", + "deletePresetX": "Διαγραφή προεπιλογής \"{0}\";" }, "changeCasing": { - "title": "Αλλαγή πεζών-κεφαλαίων", "fixNames": "Διόρθωση ονομάτων", "namesX": "Ονόματα: {0:#,##0}", "hitsX": "Ευρέσεις: {0:#,##0}", @@ -2080,9 +2292,7 @@ "allUppercase": "Όλα κεφαλαία", "allLowercase": "Όλα πεζά" }, - "changeFormatting": { - "title": "Αλλαγή μορφοποίησης" - }, + "changeFormatting": {}, "convertActors": { "title": "Μετατροπή ηθοποιών", "convertActorFrom": "Μετατροπή ηθοποιού από", @@ -2111,18 +2321,12 @@ "outputFormatAssa": "Advanced Sub Station Alpha (.ass)", "style1": "Στυλ 1", "style2": "Στυλ 2", - "outlineWidth": "Πλάτος περιγράμματος", - "shadowWidth": "Πλάτος σκιάς", - "alignTop": "Πάνω", - "alignBottom": "Κάτω", - "merge": "Συγχώνευση", - "pleaseLoadTwoSubtitles": "Παρακαλώ φορτώστε δύο υπότιτλους" + "merge": "Συγχώνευση" }, "splitSubtitle": { "title": "Διαίρεση υπότιτλου", "numberOfEqualParts": "Αριθμός ίσων τμημάτων", "saveSplitParts": "Αποθήκευση διαιρεμένων τμημάτων", - "subtitleSplitIntoXParts": "Ο υπότιτλος διαιρέθηκε σε {0} τμήματα.", "xPartsSavedInFormatYToFolder": "{0} τμήματα αποθηκεύτηκαν σε μορφή {1} στον φάκελο:" }, "splitBreakLongLines": { @@ -2156,18 +2360,17 @@ "columnMerge": "Συγχώνευση", "columnFirst": "Πρώτη γραμμή", "columnSecond": "Δεύτερη γραμμή", - "columnMerged": "Συγχωνευμένο", - "selectAll": "Επιλογή όλων", - "inverseSelection": "Αντιστροφή επιλογής" + "columnMerged": "Συγχωνευμένο" }, "mergeLinesWithSameText": { - "title": "Συγχώνευση γραμμών με ίδιο κείμενο", "maxMsBetweenLines": "Μέγιστα χιλιοστά μεταξύ γραμμών", - "includeIncrementingLines": "Συμπερίληψη γραμμών με αυξανόμενο κείμενο" + "maxFramesBetweenLines": "Μέγιστα καρέ μεταξύ γραμμών", + "includeIncrementingLines": "Συμπερίληψη γραμμών με αυξανόμενο κείμενο", + "includeRollUpCaptions": "Συμπερίληψη κυλιόμενων λεζάντων (roll-up)" }, "mergeLinesWithSameTimeCodes": { - "title": "Συγχώνευση γραμμών με ίδιους χρονικούς κώδικες", "maxMsDifference": "Μέγιστη διαφορά (χιλιοστά)", + "maxFramesDifference": "Μέγιστη διαφορά (καρέ)", "makeDialog": "Δημιουργία διαλόγων" }, "netflixCheckAndFix": { @@ -2190,7 +2393,6 @@ "shotChanges": "Αλλαγές πλάνου", "startNumberSpellOut": "Ολογράφως αριθμός στην αρχή", "textforHiUseBrackets": "Κείμενο για HI, χρήση αγκυλών", - "frameRate": "Ρυθμός καρέ", "twoFrameGrap": "Κενό δύο καρέ", "whiteSpace": "Κενό διάστημα", "childrensProgram": "Παιδικό πρόγραμμα", @@ -2228,7 +2430,6 @@ "italicsFixed": "Διορθώθηκαν πλάγια", "italicsNotAllowed": "Τα πλάγια δεν επιτρέπονται", "bridgeGapsXToYFrames": "Κενό 3-{0} καρέ => κενό 2 καρέ", - "startNumberSpellOutComment": "Όταν ένας αριθμός ξεκινά μια πρόταση, πρέπει πάντα να γράφεται ολογράφως", "maximumXCharactersPerSecond": "Μέγιστο {0} χαρακτήρες ανά δευτερόλεπτο" }, "imageBasedEdit": { @@ -2237,10 +2438,8 @@ "resizeImagesDotDotDot": "Αλλαγή μεγέθους εικόνων...", "adjustBrightnessDotDotDot": "Προσαρμογή φωτεινότητας...", "adjustAlphaDotDotDot": "Προσαρμογή άλφα...", - "centerHorizontally": "Οριζόντιο κεντράρισμα", "cropImages": "Περικοπή εικόνων", "importTimeCodes": "Εισαγωγή χρονικών κωδίκων...", - "setTextForSubtitle": "Ορισμός κειμένου για υπότιτλο", "setText": "Ορισμός κειμένου", "screenWidth": "Πλάτος οθόνης", "screenHeight": "Ύψος οθόνης", @@ -2271,15 +2470,31 @@ "letterboxCustom": "Προσαρμοσμένο ύψος μπάρας", "barHeightPx": "Ύψος μπάρας (px)", "titleSafePercent": "Ασφαλής περιοχή τίτλου (%)", + "moveCaptions": "Μετακίνηση λεζάντων", + "moveCaptionsDotDotDot": "Μετακίνηση λεζάντων...", + "moveCaptionsTo": "Μετακίνηση λεζάντων", + "moveCaptionsIntoBars": "Μέσα στις μαύρες λωρίδες letterbox (εκτός εικόνας)", + "moveCaptionsIntoPicture": "Μέσα στην εικόνα (έξω από τις λωρίδες)", + "moveCaptionsOffset": "Απόσταση από την άκρη (px)", + "letterboxBarHeightXPxYOfZCaptionsWillMove": "Ύψος λωρίδας: {0} px - θα μετακινηθούν {1} από {2} λεζάντες", + "removeFadeInOut": "Αφαίρεση ξεθωριάσματος εισόδου/εξόδου", + "removeFadeInOutXLinesRemoved": "{0} γραμμές ξεθωριάσματος συγχωνεύτηκαν με τις γραμμές στις οποίες ανήκουν", + "removeFadeInOutNothingFound": "Δεν βρέθηκαν γραμμές ξεθωριάσματος εισόδου/εξόδου", "positionSummary": "{0}×{1} - {2} υπότιτλοι - ύψος μπάρας: {3} px", "xInActivePicture": "{0} στην εικόνα", "xInTopBar": "{0} στην πάνω μπάρα", "xInBottomBar": "{0} στην κάτω μπάρα", "noImageSubtitlesLoaded": "Δεν έχουν φορτωθεί υπότιτλοι εικόνας", - "imageBasedFormatNotSupported": "Η μορφή υπότιτλων βασισμένων σε εικόνα δεν βρέθηκε/δεν υποστηρίζεται." + "imageBasedFormatNotSupported": "Η μορφή υπότιτλων βασισμένων σε εικόνα δεν βρέθηκε/δεν υποστηρίζεται.", + "frameRateDeclaredInFile": "Ρυθμός καρέ που δηλώνεται στο αρχείο Blu-ray sup", + "frameRateDetectedFromTimeCodesX": "Ρυθμός καρέ που εντοπίστηκε από τους χρονικούς κώδικες του Blu-ray sup (το αρχείο δηλώνει {0})", + "frameRateFromVideo": "Ρυθμός καρέ του βίντεο", + "frameRateCurrent": "Τρέχων ρυθμός καρέ", + "frameRateSetManually": "Ρυθμός καρέ ορισμένος χειροκίνητα", + "frameRateUsageInfo": "Οι εξαγωγές Blu-ray sup, BDN XML, DOST και FCP γράφονται με αυτόν τον ρυθμό καρέ. Δεν αλλάζει κανέναν χρόνο - χρησιμοποιήστε την \"Αλλαγή ρυθμού καρέ\" γι' αυτό.", + "useVideoFrameRateXInsteadOfY": "Ο ρυθμός καρέ του βίντεο είναι {0}, αλλά ο υπότιτλος είναι ορισμένος σε {1}.\n\nΧρήση του ρυθμού καρέ του βίντεο ({0});" }, "removeTextForHearingImpaired": { - "title": "Αφαίρεση κειμένου για άτομα με προβλήματα ακοής", "interjections": "Επιφωνήματα", "skipIfStartWith": "Παράλειψη αν ξεκινά με", "removeTextBetween": "Αφαίρεση κειμένου μεταξύ", @@ -2298,7 +2513,6 @@ "removeInterjections": "Αφαίρεση επιφωνημάτων", "linesFoundX": "Γραμμές που βρέθηκαν: {0}" }, - "pickAlignmentTitle": "Επιλογή στοίχισης", "removeUnicodeCharacters": { "title": "Αφαίρεση/αντικατάσταση χαρακτήρων Unicode", "charactersFoundX": "Χαρακτήρες Unicode που βρέθηκαν: {0}", @@ -2308,13 +2522,13 @@ "pickFontNameInstalledFonts": "Εγκατεστημένες γραμματοσειρές", "pickFontNameCollectedFonts": "Συλλεγμένες γραμματοσειρές", "colorPickerTitle": "Επιλογή χρώματος", + "colorPickerBrightness": "Φωτεινότητα", "filterLayersTitle": "Φιλτράρισμα επιπέδων για εμφάνιση", "filterLayersHideFromWaveform": "Απόκρυψη από κυματομορφή/φασματογράφημα", "filterLayersHideFromSubtitleGrid": "Απόκρυψη από το πλέγμα υπότιτλων", "filterLayersHideFromVideoPreview": "Απόκρυψη από την προεπισκόπηση βίντεο", "pickSubtitleFormat": "Επιλογή μορφής υπότιτλων", "pickSubtitleFormatImageBasedNoPreview": "Μορφή υπότιτλων βασισμένη σε εικόνα.\nΤα bitmap δημιουργούνται κατά τη μετατροπή - χωρίς προεπισκόπηση κειμένου.", - "pickLayerTitle": "Ορισμός επιπέδου", "recentColors": "Πρόσφατα χρώματα", "fixCommonErrorsSettingsTitle": "Ρυθμίσεις διόρθωσης κοινών σφαλμάτων" }, @@ -2359,59 +2573,51 @@ "correctWordsX": "Σωστές λέξεις: {0}", "namesX": "Ονόματα: {0}", "addedToDictionaryX": "Προστέθηκαν στο λεξικό: {0}", - "doNotShowThisAgain": "Να μην εμφανιστεί ξανά αυτό το μήνυμα" + "doNotShowThisAgain": "Να μην εμφανιστεί ξανά αυτό το μήνυμα", + "editUseAlwaysList": "Επεξεργασία λίστας \"Χρήση πάντα\"...", + "useAlwaysListTitle": "Ορθογραφικός έλεγχος - λίστα \"Χρήση πάντα\"", + "useAlwaysListHeader": "Λίστα \"Χρήση πάντα\"", + "useAlwaysListDescription": "Λέξεις που ο ορθογραφικός έλεγχος αντικαθιστά αυτόματα, αποθηκευμένες μέσω \"Αλλαγή όλων\" και \"Χρήση πάντα\". Ένα ζεύγος χρησιμοποιείται μόνο όταν η λέξη είναι ανορθόγραφη.", + "useAlwaysWord": "Ανορθόγραφη λέξη", + "xPairs": "{0:#,##0} ζεύγη", + "xUnusedPairs": "{0:#,##0} δεν χρησιμοποιήθηκαν ποτέ", + "useAlwaysUnusedHint": "Δεν χρησιμοποιήθηκε ποτέ - αυτή η λέξη είναι σωστά γραμμένη (ή είναι όνομα ή λέξη χρήστη), οπότε ο ορθογραφικός έλεγχος δεν την επισημαίνει ποτέ", + "removeUnused": "Αφαίρεση αχρησιμοποίητων", + "useAlwaysEmpty": "Δεν υπάρχουν ακόμη ζεύγη \"Χρήση πάντα\" για αυτή τη γλώσσα", + "useAlwaysEmptyHint": "Τα ζεύγη προστίθενται όταν πατάτε \"Αλλαγή όλων\" ή \"Χρήση πάντα\" στον ορθογραφικό έλεγχο.", + "useAlwaysNoMatch": "Κανένα ζεύγος δεν ταιριάζει με την αναζήτηση", + "useAlwaysSameWord": "Η αντικατάσταση πρέπει να διαφέρει από τη λέξη.", + "useAlwaysRememberOff": "Η επιλογή \"Απομνημόνευση λίστας 'Χρήση πάντα'\" είναι απενεργοποιημένη στις Ρυθμίσεις, οπότε ο ορθογραφικός έλεγχος δεν χρησιμοποιεί ούτε αποθηκεύει αυτή τη λίστα." }, "video": { "burnIn": { "title": "Δημιουργία βίντεο με ενσωματωμένους υπότιτλους", - "infoAssaOff": "Σημείωση: Υποστηρίζεται μορφοποίηση Advanced SubStation Alpha.", - "infoAssaOn": "Σημείωση: Θα χρησιμοποιηθεί μορφοποίηση Advanced SubStation Alpha :)", - "xGeneratedWithBurnedInSubsInX": "Το \"{0}\" δημιουργήθηκε με ενσωματωμένους υπότιτλους σε {1}.", - "timeRemainingMinutes": "Χρόνος που απομένει: {0} λεπτά", - "timeRemainingOneMinute": "Χρόνος που απομένει: Ένα λεπτό", - "timeRemainingSeconds": "Χρόνος που απομένει: {0} δευτερόλεπτα", - "timeRemainingAFewSeconds": "Χρόνος που απομένει: Λίγα δευτερόλεπτα", - "timeRemainingMinutesAndSeconds": "Χρόνος που απομένει: {0} λεπτά και {1} δευτερόλεπτα", - "timeRemainingOneMinuteAndSeconds": "Χρόνος που απομένει: Ένα λεπτό και {0} δευτερόλεπτα", - "targetFileName": "Όνομα αρχείου προορισμού: {0}", "targetFileSize": "Μέγεθος αρχείου προορισμού (απαιτεί κωδικοποίηση 2 περασμάτων)", "fileSizeMb": "Μέγεθος αρχείου σε MB", "matchSourceVideoSize": "Αντιστοίχιση μεγέθους βίντεο πηγής", - "passX": "Πέρασμα {0}", - "encoding": "Κωδικοποίηση", "bitRate": "Ρυθμός bit", "totalBitRateX": "Συνολικός ρυθμός bit: {0}", "sampleRate": "Ρυθμός δειγματοληψίας", "audio": "Ήχος", - "stereo": "Στέρεο", "preset": "Προεπιλογή", + "tune": "Βελτιστοποίηση (tune)", "pixelFormat": "Μορφή pixel", "crf": "CRF", - "tuneFor": "Συντονισμός για", - "alignRight": "Στοίχιση δεξιά", - "getStartPosition": "Λήψη θέσης έναρξης", - "getEndPosition": "Λήψη θέσης τέλους", "useSource": "Χρήση πηγής", - "useSourceFolder": "Χρήση φακέλου πηγής", - "useSourceResolution": "Χρήση ανάλυσης πηγής", - "outputSettings": "Αρχείο/φάκελος εξόδου...", "fontSizeFactor": "Συντελεστής μεγέθους γραμματοσειράς", "boxType": "Τύπος πλαισίου", - "fixRightToLeft": "Διόρθωση δεξιά-προς-αριστερά", - "cut": "Αποκοπή", "fromTime": "Από χρόνο", "toTime": "Έως χρόνο", "audioEncoding": "Κωδικοποίηση ήχου", "outputProperties": "Ιδιότητες εξόδου...", "videoFileSize": "Μέγεθος αρχείου βίντεο", "oneBox": "Ένα πλαίσιο", - "boxPerLine": "Πλαίσιο ανά γραμμή", - "logoInfo": "Επιλέξτε μια εικόνα PNG και σύρετέ την για να την τοποθετήσετε στο βίντεο." + "logoInfo": "Επιλέξτε μια εικόνα PNG και σύρετέ την για να την τοποθετήσετε στο βίντεο.", + "noSubtitlesGenerateAnyway": "Δεν υπάρχουν γραμμές υπότιτλων για ενσωμάτωση.\n\nΔημιουργία του βίντεο χωρίς υπότιτλους;", + "noSubtitlesInXItemsGenerateAnyway": "{0} στοιχείο(α) της παρτίδας δεν έχουν γραμμές υπότιτλων για ενσωμάτωση.\n\nΔημιουργία αυτών των βίντεο χωρίς υπότιτλους;" }, "videoTransparent": { - "title": "Δημιουργία διαφανούς βίντεο με υπότιτλους", - "infoAssaOff": "Σημείωση: Υποστηρίζεται μορφοποίηση Advanced SubStation Alpha.", - "infoAssaOn": "Σημείωση: Θα χρησιμοποιηθεί μορφοποίηση Advanced SubStation Alpha :)" + "title": "Δημιουργία διαφανούς βίντεο με υπότιτλους" }, "audioToText": { "title": "Ομιλία σε κείμενο", @@ -2419,6 +2625,21 @@ "translateToEnglish": "Μετάφραση στα Αγγλικά", "transcribing": "Μεταγραφή...", "transcribingXOfY": "Μεταγραφή {0} από {1}...", + "linesTranscribedXOfYFailedZ": "Μεταγράφηκαν {0} από {1} γραμμές - {2} απέτυχαν ή δεν είχαν ομιλία.\n\nΟι γραμμές που απέτυχαν διατηρούν το τρέχον κείμενό τους. Εφαρμογή των μεταγραμμένων γραμμών ή νέα προσπάθεια για όσες απέτυχαν (μπορείτε πρώτα να αλλάξετε μηχανή ή ρυθμίσεις);", + "linesTranscribedXOfYCancelled": "Η μεταγραφή ακυρώθηκε μετά από {0} από {1} γραμμές.\n\nΕφαρμογή των μεταγραμμένων γραμμών; Οι υπόλοιπες γραμμές διατηρούν το τρέχον κείμενό τους.", + "noLinesTranscribed": "Καμία από τις {0} γραμμές δεν ήταν δυνατό να μεταγραφεί.\nΕλέγξτε το αρχείο καταγραφής εργαλείων για λεπτομέρειες.", + "applyTranscribedLines": "Εφαρμογή μεταγραμμένων", + "retryFailedLines": "Επανάληψη αποτυχημένων", + "isolateSpeech": "Απομόνωση ομιλίας (αργό)", + "isolateSpeechHint": "Αφαιρεί τη μουσική και τα ηχητικά εφέ πριν από τη μεταγραφή. Δίνει λιγότερες χαμένες γραμμές και καλύτερο χρονισμό σε ήχο με δυνατή μουσική, αλλά διαρκεί περίπου όσο ο ίδιος ο ήχος με GPU - και πολλές φορές περισσότερο χωρίς.", + "isolatingSpeech": "Απομόνωση ομιλίας...", + "isolateSpeechFailed": "Δεν ήταν δυνατή η απομόνωση της ομιλίας - γίνεται μεταγραφή του αρχικού ήχου.", + "detectSpeakers": "Εντοπισμός ομιλητών", + "detectSpeakersHint": "Ξεκινά κάθε γραμμή με τον ομιλητή, π.χ. \"(speaker 0)\", χρησιμοποιώντας τη διάκριση ομιλητών Sortformer της NVIDIA (έως 8 ομιλητές). Λειτουργεί καλύτερα με μηχανές που διαιρούν τις γραμμές όπου αλλάζει ο ομιλητής, όπως Parakeet και Cohere.", + "detectSpeakersNeedsNewerCrispAsr": "Ο \"Εντοπισμός ομιλητών\" απαιτεί Crisp ASR v{0} ή νεότερο, αλλά είναι εγκατεστημένο το v{1}.\n\nΕνημερώστε το Crisp ASR (το κουμπί με το γρανάζι δίπλα στη μηχανή) ή απενεργοποιήστε τον \"Εντοπισμό ομιλητών\".", + "xNeedsNewerCrispAsr": "Το {0} απαιτεί Crisp ASR v{1} ή νεότερο, αλλά είναι εγκατεστημένο το v{2}.\n\nΛήψη και εγκατάσταση της ενημέρωσης τώρα;", + "vad": "VAD", + "vadHint": "Ανίχνευση φωνητικής δραστηριότητας: μεταγράφεται μόνο η ομιλία, κομμένη εκεί όπου κάνει παύση ο ομιλητής.\nAuto: Silero, και μόνο για τις μηχανές που το χρειάζονται (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: πάντα ενεργό, για κάθε μηχανή Crisp ASR. Το FireRedVAD είναι το πιο ακριβές, το Whisper-VAD δίνει τα λιγότερα και καθαρότερα κοψίματα αλλά είναι το πιο αργό.\nΤο Index-Echo χρησιμοποιεί πάντα Silero. Τα --vad, --vad-model ή --chunk-seconds στις ρυθμίσεις για προχωρημένους έχουν προτεραιότητα.", "inputLanguage": "Γλώσσα εισόδου", "advancedWhisperSettings": "Προηγμένες παράμετροι ομιλίας-σε-κείμενο", "downloadingSpeechToTextEngine": "Λήψη μηχανής ομιλίας-σε-κείμενο", @@ -2433,8 +2654,6 @@ "addCustomModelDotDotDot": "Προσθήκη προσαρμοσμένου μοντέλου...", "customModelHelp": "Μπορείτε να χρησιμοποιήσετε το δικό σας μοντέλο: επιλέξτε το αρχείο μοντέλου (whisper.cpp ggml '.bin') ή τον φάκελο μοντέλου (φάκελος faster-whisper με 'model.bin' μέσα). Αντιγράφεται στον φάκελο μοντέλων και προστίθεται στην παραπάνω λίστα.", "viewToolsLogFile": "Προβολή αρχείου καταγραφής εργαλείων", - "reDownloadX": "Νέα λήψη {0}", - "downloadX": "Λήψη {0}", "updateXTitle": "Ενημέρωση {0};", "updateXMessage": "Μια νεότερη έκδοση του {0} είναι διαθέσιμη.{1}{1}Λήψη και εγκατάσταση της ενημέρωσης τώρα;", "downloadingSpeechToTextModel": "Λήψη μοντέλου ομιλίας-σε-κείμενο", @@ -2446,14 +2665,6 @@ "fixCasing": "Διόρθωση πεζών-κεφαλαίων", "addPeriods": "Προσθήκη τελειών", "changeUnderlineToColor": "Αλλαγή υπογράμμισης σε χρώμα", - "cueBuilding": "Δημιουργία υπότιτλων (MLX Whisper)", - "cueRebuild": "Αναδημιουργία υπότιτλων από χρονικές σημάνσεις λέξεων", - "cueMaxChars": "Μέγιστοι χαρακτήρες ανά υπότιτλο", - "cueMaxSeconds": "Μέγιστα δευτερόλεπτα ανά υπότιτλο", - "cueMaxCps": "Μέγιστοι χαρακτήρες ανά δευτερόλεπτο", - "vocabularyPrompt": "Προτροπή λεξιλογίου (ονόματα, τοποθεσίες, όροι)", - "beamSize": "Μέγεθος beam", - "beamSizeNote": "Το 0 αποκωδικοποιεί ταχύτερα. Το 5 δίνει την καλύτερη ακρίβεια (όπως το Faster Whisper) με περίπου 20-30% περισσότερο χρόνο. Τιμές πάνω από 5 σπάνια βοηθούν.", "removeNonSpeechLines": "Αφαίρεση γραμμών χωρίς ομιλία", "removeNonSpeechLinesHint": "Απόρριψη γραμμών που περιγράφουν μόνο ήχο, όπως \"[Μουσική]\" ή \"(κύματα που σκάνε)\"", "removeRepeatedLines": "Αφαίρεση επαναλαμβανόμενων γραμμών", @@ -2489,14 +2700,11 @@ }, "textToSpeech": { "title": "Κείμενο σε ομιλία", - "textToSpeechEngine": "Μηχανή κειμένου σε ομιλία", "reviewAudioSegments": "TTS - Επισκόπηση τμημάτων ήχου", "reviewAudioSegmentsHistory": "TTS - Επισκόπηση ιστορικού ήχου", "stability": "Σταθερότητα", "similarity": "Ομοιότητα", "speakerBoost": "Ενίσχυση ομιλητή", - "styleExaggeration": "Υπερβολή στυλ", - "regenerateAudioSelectedLine": "Αναδημιουργία ήχου για την επιλεγμένη γραμμή", "generateSpeechFromText": "Δημιουργία ομιλίας από κείμενο", "testVoice": "Δοκιμή φωνής", "addAudioToVideoFile": "Προσθήκη ήχου σε αρχείο βίντεο", @@ -2515,6 +2723,19 @@ "videoEncodingSettings": "TTS - Ρυθμίσεις κωδικοποίησης βίντεο", "elevenLabsSettings": "TTS - Ρυθμίσεις ElevenLabs", "elevenLabsSettingsResetHint": "Επαναφορά ρυθμίσεων ElevenLabs στις προεπιλεγμένες τιμές", + "provider": "Πάροχος", + "openAiCompatibleSettings": "TTS - Ρυθμίσεις συμβατές με OpenAI", + "customServerUrl": "Προσαρμοσμένο URL διακομιστή", + "customServerUrlHint": "Πλήρες endpoint ομιλίας ενός διακομιστή συμβατού με OpenAI, χρησιμοποιείται όταν ο πάροχος είναι \"Custom\", π.χ. http://localhost:8880/v1/audio/speech", + "customModels": "Προσαρμοσμένα μοντέλα", + "customModelsHint": "Ονόματα μοντέλων χωρισμένα με κόμμα που προσφέρονται όταν ο πάροχος είναι \"Custom\"", + "customVoices": "Προσαρμοσμένες φωνές", + "customVoicesHint": "Ονόματα φωνών χωρισμένα με κόμμα, χρησιμοποιούνται από τον πάροχο \"Custom\" και από μοντέλα OpenRouter που δεν δημοσιεύουν λίστα φωνών", + "instructions": "Οδηγίες", + "instructionsHint": "Προαιρετικό ύφος ομιλίας, π.χ. \"Μίλα με ήρεμη, ζεστή φωνή\". Αποστέλλεται μόνο σε μοντέλα που το υποστηρίζουν (όχι tts-1/tts-1-hd)", + "openAiSpeedHint": "Ταχύτητα ομιλίας από 0.25 έως 4.0 (1.0 είναι η κανονική). Δεν την υποστηρίζουν όλα τα μοντέλα", + "outputFormat": "Μορφή εξόδου", + "outputFormatHint": "Μορφή ήχου που ζητείται από τον διακομιστή. Το \"Auto\" ζητά MP3 και αλλάζει σε PCM για μοντέλα που επιστρέφουν μόνο PCM (π.χ. Gemini TTS)", "regenerateAudio": "Αναδημιουργία ήχου", "autoContinuePlaying": "Αυτόματη συνέχεια αναπαραγωγής", "playLine": "Αναπαραγωγή γραμμής", @@ -2523,6 +2744,13 @@ "addingAudioToVideoFileDotDotDot": "Προσθήκη ήχου σε αρχείο βίντεο...", "preparingMergeDotDotDot": "Προετοιμασία συγχώνευσης...", "importVoiceDotDotDot": "Εισαγωγή φωνής...", + "renameVoiceDotDotDot": "Μετονομασία φωνής...", + "renameVoiceTitle": "Μετονομασία φωνής", + "voiceXCouldNotBeRenamedX": "Η φωνή '{0}' δεν ήταν δυνατό να μετονομαστεί: {1}", + "deleteVoiceDotDotDot": "Διαγραφή φωνής...", + "deleteVoiceTitle": "Διαγραφή φωνής", + "deleteVoiceXQuestion": "Διαγραφή της φωνής '{0}';\n\nΗ ηχογράφηση αναφοράς και τα αρχεία της αφαιρούνται από τον δίσκο.", + "voiceXCouldNotBeDeletedX": "Η φωνή '{0}' δεν ήταν δυνατό να διαγραφεί: {1}", "voiceImportSuccessTitle": "Η φωνή εισήχθη", "voiceXImported": "Η φωνή '{0}' εισήχθη επιτυχώς", "voiceXCouldNotBeImported": "Η φωνή '{0}' δεν ήταν δυνατό να εισαχθεί - δείτε το αρχείο καταγραφής για λεπτομέρειες", @@ -2532,6 +2760,49 @@ "dropAudioFileHereToImportVoice": "Αφήστε αρχείο ήχου εδώ για εισαγωγή φωνής", "dropAudioFileHereHint": ".wav ή .mp3", "voiceCloneTranscriptTitle": "Εισαγάγετε τη μεταγραφή του ήχου (απαιτείται για κλωνοποίηση φωνής)", + "voiceManagerTitle": "TTS - Διαχείριση φωνών", + "voiceManagerDotDotDot": "Διαχείριση φωνών...", + "voiceManagerMenuItem": "Διαχείριση φωνών TTS...", + "speakFromCurrentLineTitle": "Εκφώνηση από την τρέχουσα γραμμή", + "speakFromCurrentLineDotDotDot": "Εκφώνηση από την τρέχουσα γραμμή...", + "speakFromCurrentLineHint": "Διαβάζει δυνατά τις γραμμές τη μία μετά την άλλη, ξεκινώντας από την τρέχουσα γραμμή. Πατήστε Escape ή κάντε κλικ σε άλλη γραμμή για διακοπή.", + "stopSpeaking": "Διακοπή εκφώνησης", + "speakingLineX": "Εκφώνηση γραμμής {0}... (Escape για διακοπή)", + "playWithSpeechTitle": "Αναπαραγωγή με ομιλία", + "playWithSpeechDotDotDot": "Αναπαραγωγή με ομιλία...", + "playWithSpeechHint": "Αναπαράγει το βίντεο και εκφωνεί κάθε γραμμή όταν το βίντεο φτάνει σε αυτήν. Παύση και αναζήτηση ως συνήθως· πατήστε Escape για διακοπή.", + "lowerVideoVolumeWhileSpeaking": "Μείωση έντασης βίντεο κατά την εκφώνηση", + "pauseVideoWhenSpeechRunsLate": "Παύση βίντεο όταν η ομιλία επεκτείνεται στην επόμενη γραμμή", + "waitingForSpeechLineX": "Δημιουργία ομιλίας για τη γραμμή {0}... (Escape για διακοπή)", + "voiceKindClone": "Κλωνοποιημένη φωνή", + "voiceKindPreset": "Ενσωματωμένη", + "voiceKindModel": "Μοντέλο φωνής", + "voiceKindOnline": "Διαδικτυακή", + "transcript": "Απομαγνητοφώνηση", + "transcriptRequiredHint": "Απαιτείται - η μηχανή διαβάζει αυτή την απομαγνητοφώνηση της ηχογράφησης (ref-text) κατά την κλωνοποίηση", + "transcriptOptionalHint": "Προαιρετικό - μια ακριβής απομαγνητοφώνηση της ηχογράφησης βελτιώνει την κλωνοποίηση", + "saveTranscript": "Αποθήκευση απομαγνητοφώνησης", + "searchVoices": "Αναζήτηση φωνών", + "loadingVoicesDotDotDot": "Φόρτωση φωνών...", + "noVoicesForEngine": "Δεν υπάρχουν φωνές - εισαγάγετε μια ηχογράφηση ή κατεβάστε ένα πακέτο φωνών", + "noVoicesMatchFilter": "Καμία φωνή δεν ταιριάζει με την αναζήτηση", + "copyVoiceTo": "Αντιγραφή φωνής σε", + "copyVoiceToDotDotDot": "Αντιγραφή φωνής σε μηχανή...", + "copyingVoiceXToYDotDotDot": "Αντιγραφή φωνής '{0}' σε {1}...", + "voiceXCopiedToY": "Η φωνή '{0}' αντιγράφηκε σε {1}", + "voiceXCouldNotBeCopiedToY": "Η φωνή '{0}' δεν ήταν δυνατό να αντιγραφεί σε {1} - δείτε το αρχείο καταγραφής για λεπτομέρειες", + "voiceXAlreadyExistsInYContinue": "Υπάρχει ήδη φωνή με όνομα '{0}' στο {1}.\n\nΑντιγραφή παρ' όλα αυτά;", + "openVoicesFolder": "Άνοιγμα φακέλου φωνών", + "downloadVoicePacksDotDotDot": "Λήψη πακέτων φωνών...", + "downloadVoicePacksTitle": "TTS - Λήψη πακέτων φωνών", + "voicePackIntro": "Τα πακέτα φωνών είναι σύνολα σύντομων, καθαρών ηχογραφήσεων με απομαγνητοφωνήσεις, έτοιμα για κλωνοποίηση. Κάθε πακέτο εισάγεται στην επιλεγμένη μηχανή (οι φωνές που υπάρχουν ήδη παραλείπονται) και περιλαμβάνει ένα ATTRIBUTION.txt με την άδεια χρήσης και τις πηγές του.", + "voicePackDetailsXVoicesYSizeZLicense": "{0} φωνές · {1} · {2}", + "installToEngine": "Εγκατάσταση στη μηχανή", + "downloadAndInstall": "Λήψη και εγκατάσταση", + "selectAtLeastOneVoicePack": "Επιλέξτε τουλάχιστον ένα πακέτο φωνών", + "downloadingXDotDotDot": "Λήψη {0}...", + "installingXDotDotDot": "Εγκατάσταση {0}...", + "xVoicesInstalledYSkipped": "Εγκαταστάθηκαν {0} φωνές ({1} υπήρχαν ήδη)", "useSpeechToTextDotDotDot": "Χρήση ομιλίας-σε-κείμενο...", "autoCastMenuItem": "Εύρεση φωνών στο βίντεο και κλωνοποίηση...", "autoCastSpeakersTitle": "Φωνές που βρέθηκαν στο βίντεο", @@ -2550,7 +2821,7 @@ "cloneVoicePerLinePreparing": "Λήψη της φωνής κάθε γραμμής από το βίντεο...", "cloneVoicePerLineNeedsVideo": "Η κλωνοποίηση της φωνής κάθε γραμμής απαιτεί το βίντεο στο οποίο ανήκει ο υπότιτλος. Ανοίξτε το βίντεο και δοκιμάστε ξανά.", "cloneVoicePerLineNoClips": "Δεν ήταν δυνατή η λήψη ήχου από το βίντεο, οπότε δεν υπάρχει τίποτα για κλωνοποίηση. Ελέγξτε ότι το βίντεο έχει κομμάτι ήχου.", - "cloneVoicePerLineNeedsOriginalSubtitleX": "Το {0} μπορεί να κλωνοποιήσει μια γραμμή μόνο όταν γνωρίζει τι λέγεται στο βίντεο σε εκείνη τη γραμμή, κάτι που προέρχεται από τον υπότιτλο της αρχικής γλώσσας. Δεν έχει φορτωθεί αρχικός υπότιτλος, οπότε κάθε γραμμή θα εκφωνούνταν από την πρώτη εισαγόμενη φωνή αντί για τη φωνή του βίντεο.\n\nΑνοίξτε τον αρχικό υπότιτλο (Αρχείο > Άνοιγμα αρχικού...) δίπλα στη μετάφραση και δημιουργήστε ξανά.", + "cloneVoicePerLineTranscribeClipsXYZ": "Το {0} μπορεί να κλωνοποιήσει μια γραμμή μόνο όταν γνωρίζει τι λέγεται στο βίντεο σε εκείνη τη γραμμή. Αυτό δεν είναι γνωστό για {1} από {2} γραμμές - κανονικά προέρχεται από τον υπότιτλο της αρχικής γλώσσας (Αρχείο > Άνοιγμα αρχικού...).\n\nΜεταγραφή αυτών των γραμμών από το βίντεο με ομιλία σε κείμενο τώρα;\n\nΝαι: επιλέξτε τη μηχανή και τη γλώσσα που ομιλείται στο βίντεο, και τα αποσπάσματα αναφοράς μεταγράφονται πριν δημιουργηθεί η ομιλία.\nΌχι: δημιουργία παρ' όλα αυτά - αυτές οι γραμμές εκφωνούνται από μια συνηθισμένη φωνή αντί για τη φωνή του βίντεο.", "voiceCloneConsentTitle": "Κλωνοποίηση φωνής - πριν ξεκινήσετε", "voiceCloneConsentHeader": "Πρόκειται να κλωνοποιήσετε μια φωνή", "voiceCloneConsentIntro": "Η κλωνοποίηση αντιγράφει τη φωνή ενός πραγματικού ανθρώπου. Αυτό συνοδεύεται από κανόνες στις περισσότερες χώρες, και στην ΕΕ από νομικές υποχρεώσεις που βαρύνουν εσάς και όχι το Subtitle Edit. Διαβάστε το αυτό μία φορά.", @@ -2567,10 +2838,29 @@ "advancedTtsSettings": "Προηγμένες ρυθμίσεις TTS", "advancedTtsAudioProcessing": "Επεξεργασία ήχου", "advancedTtsOutput": "Έξοδος", + "advancedTtsVoiceCloning": "Κλωνοποίηση φωνής", + "cleanCloneReferences": "Καθαρισμός αναφορών κλωνοποίησης φωνής (Sidon)", + "cleanCloneReferencesDescription": "Αφαιρεί μουσική, θόρυβο και αντήχηση από τον ήχο από τον οποίο κλωνοποιείται μια φωνή: αποσπάσματα από το βίντεο και ηχογραφήσεις που εισήχθησαν στη διαχείριση φωνών. Χρησιμοποιεί το μοντέλο αποκατάστασης ομιλίας Sidon στο audio.cpp (λήψη 940 MB). Η κλωνοποιημένη φωνή δεν αντιγράφει πλέον το φόντο, αλλά πολύ σιγανή ή επικαλυπτόμενη ομιλία μπορεί να ακούγεται πνιχτή.", + "cleaningCloneReferencesDotDotDot": "Καθαρισμός αναφορών κλωνοποίησης φωνής...", + "downloadSidonTitle": "Λήψη Sidon;", + "downloadSidonQuestionX": "Ο καθαρισμός αναφορών κλωνοποίησης φωνής απαιτεί το μοντέλο αποκατάστασης ομιλίας Sidon ({0}).\n\nΛήψη τώρα; Χωρίς αυτό οι αναφορές χρησιμοποιούνται ως έχουν.", "proAudioPostProcessing": "Επαγγελματική μετεπεξεργασία ήχου", "proAudioPostProcessingDescription": "Εφαρμόζει ζεστασιά EQ, πύλη θορύβου, συμπίεση, κανονικοποίηση έντασης (-16 LUFS) και ξεθώριασμα εισόδου/εξόδου σε κάθε τμήμα.", + "generatingSpeechSegmentXOfY": "Δημιουργία ομιλίας: τμήμα {0} από {1}", + "adjustingSpeedSegmentXOfY": "Προσαρμογή ταχύτητας: τμήμα {0} από {1}", + "mergingAudioSegmentXOfY": "Συγχώνευση ήχου: τμήμα {0} από {1}", + "postProcessingSegmentXOfY": "Μεταεπεξεργασία: τμήμα {0} από {1}", "audioDucking": "Audio ducking", "audioDuckingDescription": "Μειώνει την ένταση του αρχικού ήχου του βίντεο και τον αναμειγνύει με τον ήχο TTS, ώστε το αρχικό ηχητικό υπόβαθρο να ακούγεται ακόμα αχνά.", + "removeOriginalSpeech": "Αφαίρεση αρχικής ομιλίας (αργό)", + "removeOriginalSpeechDescription": "Διατηρεί τη μουσική και τα ηχητικά εφέ του αρχικού βίντεο αλλά αφαιρεί την ομιλία του, και αναμειγνύει τη νέα ομιλία από πάνω. Διαρκεί περίπου όσο το ίδιο το βίντεο με GPU και πολλές φορές περισσότερο χωρίς. Με ενεργή τη μείωση έντασης ήχου (ducking), η ένταση εφαρμόζεται στη μουσική και τα εφέ. Ισχύει μόνο όταν η ομιλία προστίθεται στο αρχείο βίντεο.", + "removingOriginalSpeech": "Αφαίρεση αρχικής ομιλίας...", + "removeOriginalSpeechFailed": "Δεν ήταν δυνατή η αφαίρεση της αρχικής ομιλίας - η ομιλία προστέθηκε στο βίντεο χωρίς αυτή.", + "speechRemovalModel": "Μοντέλο", + "speechRemovalModelDescription": "Η Καλύτερη ποιότητα διατηρεί το μεγαλύτερο μέρος της μουσικής και των ηχητικών εφέ. Η Γρήγορη είναι περίπου τρεις φορές ταχύτερη, με λίγη περισσότερη απώλεια μουσικής.", + "speechRemovalBestQuality": "Καλύτερη ποιότητα (Mel-Band RoFormer)", + "speechRemovalFast": "Γρήγορη (HTDemucs)", + "videoTruncatedWarning": "Η εικόνα στο νέο αρχείο βίντεο σταματά μετά από {0}, αλλά το αρχικό βίντεο έχει διάρκεια {1} - η εικόνα θα παγώσει ενώ ο ήχος συνεχίζει.\n\nΤο αρχείο διατηρήθηκε. Δείτε το error-log.txt στον φάκελο δεδομένων του Subtitle Edit για την έξοδο του ffmpeg.", "originalVolumePercent": "Αρχική ένταση %", "vadSilenceCompression": "Συμπίεση σιωπής VAD", "vadSilenceCompressionDescription": "Συντομεύει τις παύσεις μεταξύ λέξεων πριν από την αλλαγή ρυθμού. Χρησιμοποιεί ανίχνευση φωνητικής δραστηριότητας για να συμπιέσει μόνο τα κενά σιωπής, αφήνοντας την ομιλία ανέπαφη. Αυτό είναι το προτιμώμενο πρώτο βήμα — μειώνει τη διάρκεια χωρίς καμία απώλεια ποιότητας.", @@ -2644,7 +2934,6 @@ "subtitleMergedLinesAppliedPlural": "Εφαρμόστηκαν {0} συγχωνεύσεις γραμμών από κείμενο σε ομιλία" }, "shotChanges": { - "titleGenerateOrImport": "Δημιουργία/εισαγωγή αλλαγών πλάνου", "generateShotChanges": "Δημιουργία αλλαγών πλάνου", "importShotChanges": "Εισαγωγή αλλαγών πλάνου", "generateShotChangesWithFfmpeg": "Δημιουργία αλλαγών πλάνου με ffmpeg", @@ -2654,7 +2943,9 @@ "timeCodeFormatColon": "Μορφή χρονικού κώδικα:", "shotChangesList": "Λίστα αλλαγών πλάνου", "shotChangesClearQuestion": "Είστε σίγουροι ότι θέλετε να εκκαθαρίσετε όλες τις αλλαγές πλάνου;", - "deleteSelectedShotChangeQuestion": "Είστε σίγουροι ότι θέλετε να διαγράψετε την επιλεγμένη αλλαγή πλάνου;" + "deleteSelectedShotChangeQuestion": "Είστε σίγουροι ότι θέλετε να διαγράψετε την επιλεγμένη αλλαγή πλάνου;", + "shotChanges": "Αλλαγές πλάνου", + "exportShotChanges": "Εξαγωγή αλλαγών πλάνου" }, "chapters": { "title": "Κεφάλαια", @@ -2684,7 +2975,6 @@ "scaleTimesDescription": "Κλιμάκωση κάθε χρόνου κεφαλαίου από έναν ρυθμό καρέ σε άλλον.", "fromFrameRate": "Από", "toFrameRate": "Σε", - "apply": "Εφαρμογή", "writeToVideo": "Εγγραφή στο βίντεο...", "writeToVideoTitle": "Εγγραφή κεφαλαίων στο βίντεο", "writeToVideoDescription": "Τα κεφάλαια γράφονται σε αντίγραφο του αρχείου βίντεο. Τίποτα δεν επανακωδικοποιείται, οπότε αυτό είναι γρήγορο και χωρίς απώλειες.", @@ -2694,7 +2984,6 @@ "writtenToX": "Τα κεφάλαια γράφτηκαν στο {0}", "unableToWriteChapters": "Αδυναμία εγγραφής κεφαλαίων στο αρχείο βίντεο.", "chaptersSavedToX": "Τα κεφάλαια αποθηκεύτηκαν στο {0}", - "noVideoLoaded": "Δεν έχει φορτωθεί βίντεο", "emptyListCallToAction": "Δεν υπάρχουν ακόμα κεφάλαια - προσθέστε ένα στη θέση βίντεο ή εισαγάγετέ τα από βίντεο ή αρχείο." }, "videoOcr": { @@ -2705,10 +2994,6 @@ "bottomHalf": "Κάτω μισό", "fullFrame": "Πλήρες καρέ", "engine": "Μηχανή OCR", - "language": "Γλώσσα", - "url": "URL", - "model": "Μοντέλο", - "apiKey": "Κλειδί API", "scan": "Σάρωση", "framesPerSecond": "Καρέ ανά δευτερόλεπτο", "textBrightnessMinimum": "Ελάχιστη φωτεινότητα κειμένου (0=ανενεργό)", @@ -2723,10 +3008,10 @@ "runningOcrXY": "Εκτέλεση OCR... {0}/{1}", "noLinesFoundTitle": "Δεν βρέθηκαν υπότιτλοι", "noLinesFoundMessage": "Δεν βρέθηκε κείμενο στην περιοχή σάρωσης - δοκιμάστε να προσαρμόσετε την περιοχή σάρωσης, τη μηχανή ή την ελάχιστη φωτεινότητα.", + "ocrStoppedEarlyMessage": "Η μηχανή OCR σταμάτησε πριν διαβαστούν όλα τα καρέ, οπότε διατηρούνται οι γραμμές που βρέθηκαν μέχρι τώρα και οι υπόλοιπες λείπουν.{0}{0}{1}", "linesFoundX": "Βρέθηκαν {0} γραμμές", "refiningTimingXY": "Βελτίωση χρονισμού... {0}/{1}", "fixOcrErrors": "Διόρθωση σφαλμάτων OCR", - "dictionary": "Λεξικό", "editLineX": "Επεξεργασία γραμμής {0}", "downloadDictionaryHint": "Λήψη λεξικού ορθογραφικού ελέγχου...", "framesPerSecondHint": "Πόσα καρέ ανά δευτερόλεπτο σαρώνονται. Το 5 καλύπτει τους κανονικούς υπότιτλους· υψηλότερη τιμή πιάνει πολύ σύντομες γραμμές και βελτιώνει την ομαδοποίηση, αλλά κοστίζει περισσότερο χρόνο OCR.", @@ -2743,7 +3028,58 @@ "testOcr": "Δοκιμή τρέχοντος καρέ", "testOcrRunning": "Δοκιμή OCR στο τρέχον καρέ...", "testOcrResultX": "Αποτέλεσμα δοκιμής: {0}", - "testOcrNoTextFound": "Δοκιμή: δεν βρέθηκε κείμενο στην περιοχή σάρωσης" + "testOcrNoTextFound": "Δοκιμή: δεν βρέθηκε κείμενο στην περιοχή σάρωσης", + "engineSettings": "Ρυθμίσεις μηχανής OCR", + "engineBuiltIn": "Ενσωματωμένη στο λειτουργικό σύστημα", + "engineExternalServer": "Εξωτερικός διακομιστής (εγκαθίσταται και διαχειρίζεται εκτός του Subtitle Edit)", + "engineCloudApi": "Cloud API (απαιτεί κλειδί API)", + "engineNothingToInstall": "Τίποτα για εγκατάσταση", + "engineModelsMissing": "Η μηχανή είναι εγκατεστημένη, λείπουν μοντέλα", + "website": "Ιστότοπος" + }, + "backgroundMusic": { + "title": "Δημιουργία μουσικής υπόκρουσης", + "generateBackgroundMusicDotDotDot": "Δημιουργία μουσικής υπόκρουσης...", + "preset": "Προεπιλογή", + "prompt": "Προτροπή", + "tempoBpm": "Τέμπο (BPM)", + "generateSeconds": "Δημιουργία (δευτερόλεπτα)", + "seed": "Seed", + "randomSeed": "Τυχαίο", + "outputLength": "Διάρκεια εξόδου", + "outputLengthVideoX": "{0} (διάρκεια βίντεο - η μουσική επαναλαμβάνεται χωρίς διακοπή)", + "musicVolumePercent": "Ένταση μουσικής (%)", + "removeExistingAudioTracks": "Αφαίρεση υπαρχόντων κομματιών ήχου", + "originalAudioVolumePercent": "Ένταση αρχικού ήχου (%)", + "saveAudioDotDotDot": "Αποθήκευση ήχου...", + "addToVideoDotDotDot": "Προσθήκη στο βίντεο...", + "engineInfo": "ACE-Step 1.5 Turbo μέσω audio.cpp (άδεια MIT) - εκτελείται τοπικά", + "presetCooking": "Μαγειρική / ζαχαροπλαστική", + "presetTech": "Τεχνολογία / κριτική συσκευών", + "presetForest": "Δάσος / φύση", + "presetRelaxingPiano": "Χαλαρωτικό πιάνο", + "presetLofiVlog": "Lo-fi vlog", + "presetCorporate": "Εταιρικό / επεξηγηματικό", + "loadingModel": "Φόρτωση μοντέλου...", + "composing": "Σύνθεση...", + "generatingAudio": "Δημιουργία ήχου...", + "decodingAudio": "Αποκωδικοποίηση ήχου...", + "creatingLoop": "Δημιουργία απρόσκοπτου βρόχου...", + "resultLoopXYZ": "Βρόχος: {0} στα {1} BPM, ταίριασμα ραφής {2}%", + "resultNoLoopX": "Η μουσική είναι έτοιμη: {0}", + "addingMusicToVideo": "Προσθήκη μουσικής στο βίντεο...", + "downloadModelTitle": "Λήψη μοντέλου μουσικής;", + "downloadModelQuestionX": "Η δημιουργία μουσικής απαιτεί το μοντέλο ACE-Step 1.5 ({0}).\n\nΛήψη μοντέλου;", + "downloadingModel": "Λήψη μοντέλου ACE-Step 1.5...", + "saveAudioTitle": "Αποθήκευση μουσικής υπόκρουσης", + "audioFileSavedX": "Το αρχείο ήχου αποθηκεύτηκε: {0}", + "unableToGenerateMusic": "Αδυναμία δημιουργίας μουσικής", + "unableToAddMusicToVideo": "Αδυναμία προσθήκης μουσικής στο βίντεο", + "outputLengthTextToSpeech": "Ακολουθεί την ομιλία που δημιουργήθηκε - η μουσική επαναλαμβάνεται χωρίς διακοπή και χαμηλώνει όταν μιλά κάποιος", + "addBackgroundMusic": "Προσθήκη μουσικής υπόκρουσης", + "addBackgroundMusicHint": "Τοπική δημιουργία μουσικής με το ACE-Step 1.5 και ανάμειξή της κάτω από την ομιλία - χαμηλώνει όταν μιλά κάποιος", + "generatingBackgroundMusicDotDotDot": "Δημιουργία μουσικής υπόκρουσης...", + "mixingBackgroundMusicDotDotDot": "Ανάμειξη μουσικής υπόκρουσης..." }, "goToVideoPosition": "Μετάβαση σε θέση βίντεο", "goToVideoPositionDotDotDot": "Μετάβαση σε θέση βίντεο...", @@ -2754,30 +3090,88 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "Δευτερεύων υπότιτλος στο πρόγραμμα αναπαραγωγής, άνοιγμα...", "openSecondarySubtitleOnVideoPlayer": "Δευτερεύων υπότιτλος (στο πρόγραμμα αναπαραγωγής)", "removeSecondarySubtitleOnVideoPlayer": "Δευτερεύων υπότιτλος στο πρόγραμμα αναπαραγωγής, αφαίρεση", + "editSecondarySubtitleSettings": "Επεξεργασία ρυθμίσεων δευτερεύοντος υπότιτλου", + "editSecondarySubtitleSettingsDotDotDot": "Επεξεργασία ρυθμίσεων δευτερεύοντος υπότιτλου...", + "secondarySubtitleRememberSettings": "Απομνημόνευση αυτών των ρυθμίσεων", + "secondarySubtitleDoNotShowAgain": "Να μην εμφανιστεί ξανά αυτό το παράθυρο διαλόγου", + "secondarySubtitleJustifyLines": "Πλήρης στοίχιση γραμμών", "openRecentVideo": "Άνοιγμα πρόσφατου βίντεο", "clearRecentVideos": "Εκκαθάριση πρόσφατων βίντεο", "cutVideoTitle": "Αποκοπή βίντεο", "cutVideoDotDotDot": "Αποκοπή βίντεο...", + "remuxVideoTitle": "Επαναπολυπλεξία (remux) βίντεο", + "remuxVideoDotDotDot": "Επαναπολυπλεξία (remux) βίντεο...", + "remuxVideoInputVideo": "Βίντεο εισόδου:", + "remuxVideoMultipleTracksRequiresMkv": "Πολλαπλά κομμάτια ήχου ή υπότιτλων απαιτούν το container MKV. Η μορφή εξόδου άλλαξε αυτόματα σε .mkv.", + "remuxVideoOutputFormat": "Μορφή εξόδου:", + "remuxVideoOutputFile": "Αρχείο εξόδου:", + "remuxVideoRemuxing": "Επαναπολυπλεξία βίντεο και ήχου...", + "remuxVideoFinalizing": "Ολοκλήρωση αρχείου εξόδου (μετακίνηση ευρετηρίου στην αρχή)...", + "remuxVideoCompleted": "Η επαναπολυπλεξία του βίντεο ολοκληρώθηκε με επιτυχία.", + "remuxVideoFailed": "Η επαναπολυπλεξία του βίντεο απέτυχε.", + "remuxVideoPleaseSelectBoth": "Επιλέξτε αρχεία βίντεο και ήχου.", + "remuxVideoAssRequiresMkv": "Οι υπότιτλοι ASS/SSA απαιτούν το container MKV για να διατηρηθούν όλη η μορφοποίηση και τα στυλ.", + "remuxVideoSccRequiresMov": "Οι υπότιτλοι Scenarist (.scc) ενσωματώνονται ως κλειστοί υπότιτλοι CEA-608, που απαιτούν το container MOV ή MPG. Η μορφή εξόδου άλλαξε αυτόματα σε .mov.", + "remuxVideoSccNotWithWebM": "Οι κλειστοί υπότιτλοι Scenarist (.scc) χρειάζονται το container MOV, που δεν μπορεί να περιέχει το βίντεο VP9/AV1 ενός αρχείου .webm. Αφαιρέστε το αρχείο .scc ή μετατρέψτε το σε άλλη μορφή υπότιτλων.", + "remuxVideoMpgMaxTwoCaptionTracks": "Ένα αρχείο .mpg περιέχει το πολύ δύο κομμάτια κλειστών υπότιτλων (CC1 και CC3) - αφαιρέστε αρχεία υπότιτλων ώστε να μείνουν ένα ή δύο.", + "remuxVideoMccRequiresMpg": "Οι υπότιτλοι MacCaption (.mcc) ενσωματώνονται ως κλειστοί υπότιτλοι CEA-608/708 στο βίντεο MPEG-2, που απαιτεί το container MPG. Η μορφή εξόδου άλλαξε αυτόματα σε .mpg.", + "remuxVideoMpgReencodeVideoX": "Οι κλειστοί υπότιτλοι σε αρχείο .mpg χρειάζονται βίντεο MPEG-2, και το βίντεο είναι {0}. Επανακωδικοποίηση του βίντεο σε MPEG-2; Αυτό διαρκεί περισσότερο και μειώνει λίγο την ποιότητα.", + "remuxVideoFileHasNoAudioX": "Το \"{0}\" δεν έχει κομμάτι ήχου, οπότε δεν μπορεί να χρησιμοποιηθεί ως πηγή ήχου.", + "remuxVideoAddingClosedCaptions": "Προσθήκη κλειστών υπότιτλων...", + "remuxVideoSelectAudioTrack": "Επιλογή κομματιού ήχου", + "remuxVideoSelectAudioTrackFor": "Επιλογή κομματιού ήχου για {0}", + "remuxVideoSelectAudioTrackPrompt": "Το αρχείο '{0}' περιέχει {1} κομμάτια ήχου. Επιλέξτε το κομμάτι ήχου για επαναπολυπλεξία:", + "remuxVideoVideoFile": "βίντεο", + "remuxVideoAudioFile": "ήχος", + "remuxVideoAudioFiles": "Αρχεία ήχου:", + "remuxVideoSubtitleFiles": "Αρχεία υπότιτλων (προαιρετικά, soft υπότιτλοι):", + "remuxVideoSelectAudioTrackDotDotDot": "Επιλογή κομματιού ήχου...", + "remuxVideoFilesX": "{0} αρχεία", + "remuxVideoMixAudio": "Ανάμειξη ήχου σε ένα κομμάτι", + "remuxVideoVolumePercent": "Ένταση %:", + "remuxVideoVolumeX": "Ένταση {0}%", + "remuxVideoFastStart": "Βελτιστοποίηση για ροή μέσω διαδικτύου (μετακίνηση ευρετηρίου στην αρχή - πιο αργό)", "embedSubtitlesDotDotDot": "Προσθήκη/αφαίρεση ενσωματωμένων υπότιτλων...", "generateTimeCodes": "Δημιουργία χρονικών κωδίκων", "checkeredImage": "Καρό εικόνα", - "saveVideoAsTitle": "Αποθήκευση βίντεο ως", "promptForFfmpegParamsAndGenerate": "Ερώτηση για παραμέτρους ffmpeg και δημιουργία", "cutVideoCutSegments": "Αποκοπή τμημάτων", "cutVideoMergeSegments": "Συγχώνευση τμημάτων", "cutVideoSplitSegments": "Αποθήκευση τμημάτων ξεχωριστά", - "cutVideoType": "Τύπος αποκοπής", - "mpvRenderAuto": "Αυτόματο", - "mpvRenderNative": "Εγγενές", - "mpvRenderOpenGl": "OpenGL", - "mpvRenderSoftware": "Λογισμικό (αργό)", "cutVideoAlsoCutSubtitle": "Αποκοπή και του υπότιτλου", "cutVideoSubtitleFileGeneratedX": "Δημιουργήθηκε αρχείο υπότιτλων: {0}", + "cutVideoTransition": "Μετάβαση μεταξύ τμημάτων", + "cutVideoTransitionDurationSeconds": "Διάρκεια (δευτερόλεπτα)", + "cutVideoFadeInSeconds": "Ξεθώριασμα από μαύρο στην αρχή (δευτερόλεπτα)", + "cutVideoFadeOutSeconds": "Ξεθώριασμα σε μαύρο στο τέλος (δευτερόλεπτα)", + "cutVideoPreviewTransition": "Προεπισκόπηση μετάβασης", + "cutVideoPreviewTransitionTitle": "Προεπισκόπηση μετάβασης", + "cutVideoPreviewNeedsJoin": "Δεν υπάρχει ένωση για προεπισκόπηση - προσθέστε τουλάχιστον δύο τμήματα για συγχώνευση ή ένα τμήμα για αποκοπή από τη μέση.", + "cutVideoTransitionInfoX": "Κάθε μετάβαση επικαλύπτει τα μέρη που ενώνει, οπότε η έξοδος γίνεται {0} δευτερόλεπτα μικρότερη ανά ένωση. Ένας υπότιτλος που αποκόπτεται επαναχρονίζεται ανάλογα.", + "cutVideoTransitionFade": "Ξεθώριασμα", + "cutVideoTransitionFadeBlack": "Ξεθώριασμα μέσω μαύρου", + "cutVideoTransitionFadeWhite": "Ξεθώριασμα μέσω λευκού", + "cutVideoTransitionFadeGrays": "Ξεθώριασμα μέσω γκρι", + "cutVideoTransitionDissolve": "Διάλυση", + "cutVideoTransitionWipeLeft": "Σάρωση αριστερά", + "cutVideoTransitionWipeRight": "Σάρωση δεξιά", + "cutVideoTransitionWipeUp": "Σάρωση πάνω", + "cutVideoTransitionWipeDown": "Σάρωση κάτω", + "cutVideoTransitionSlideLeft": "Ολίσθηση αριστερά", + "cutVideoTransitionSlideRight": "Ολίσθηση δεξιά", + "cutVideoTransitionSlideUp": "Ολίσθηση πάνω", + "cutVideoTransitionSlideDown": "Ολίσθηση κάτω", + "cutVideoTransitionSmoothLeft": "Ομαλά αριστερά", + "cutVideoTransitionSmoothRight": "Ομαλά δεξιά", + "cutVideoTransitionCircleOpen": "Άνοιγμα κύκλου", + "cutVideoTransitionCircleClose": "Κλείσιμο κύκλου", + "cutVideoTransitionRadial": "Ακτινική", + "cutVideoTransitionPixelize": "Εικονοστοιχειοποίηση", + "cutVideoTransitionBlur": "Θόλωμα", "importCurrentSubtitle": "Εισαγωγή τρέχοντος υπότιτλου", "addRemoveEmbeddedSubtitlesTitle": "Προσθήκη/αφαίρεση ενσωματωμένων υπότιτλων", "addRemoveEmbeddedSubtitlesMp4Title": "Προσθήκη/αφαίρεση ενσωματωμένων υπότιτλων (MP4)", "addCurrentSubtitle": "Προσθήκη τρέχοντος υπότιτλου", - "embeddedTrackColumnNew": "Νέο", "embeddedTrackNoSubtitlesFoundTitle": "Δεν βρέθηκαν υπότιτλοι", "embeddedTrackNoSubtitlesFoundMessage": "Το επιλεγμένο αρχείο υπότιτλων δεν περιέχει υπότιτλους.", "embeddedTrackNoTracksTitle": "Δεν προστέθηκαν κομμάτια", @@ -2789,7 +3183,7 @@ "embeddedTrackGeneratingVideoXY": "Δημιουργία βίντεο... {0}% {1}", "embeddedTrackGeneratingVideo": "Δημιουργία βίντεο...", "mp4FilesFilter": "Αρχεία MP4", - "titleOrLanguage": "Τίτλος/γλώσσα", + "embeddedTracksPickVideoHint": "Επιλέξτε ένα αρχείο βίντεο ή αποθέστε το εδώ για να δείτε τα κομμάτια υπότιτλών του.", "viewMatroskaTrackX": "Προβολή κομματιού Matroska - {0}", "resolutionSeparator": "x", "openFromUrlTitle": "Άνοιγμα αρχείου βίντεο από URL", @@ -2799,9 +3193,7 @@ "openFromUrlDownloadAndOpen": "Λήψη και άνοιγμα", "openFromUrlDownloadAndOpenDescription": "Αποθήκευση του βίντεο τοπικά και άνοιγμά του.", "openFromUrlDownloadAndOpenNote": "Απαιτείται για ομιλία-σε-κείμενο και κορυφές κυματομορφής.", - "openFromUrlMissing": "Παρακαλώ εισαγάγετε πρώτα ένα URL βίντεο.", "openFromUrlDownloadingTitle": "Λήψη βίντεο", - "openFromUrlSaveAs": "Αποθήκευση βίντεο ως", "openFromUrlDownloadSubtitles": "Λήψη και υπότιτλων", "openFromUrlDownloadVideo": "Λήψη βίντεο", "openFromUrlIncludeAutoGeneratedSubtitles": "Συμπερίληψη αυτόματα δημιουργημένων υπότιτλων (αρχική γλώσσα)", @@ -2838,12 +3230,15 @@ "reEncodeGeneratingDone": "Η δημιουργία ολοκληρώθηκε", "reEncodeGeneratedFilesX": "Δημιουργημένα αρχεία ({0}):", "reEncodeFfmpegParameters": "Παράμετροι ffmpeg", + "analyzingVideoX": "Ανάλυση βίντεο... {0}% {1}", + "analyzingVideoXofY": "Ανάλυση βίντεο {0}/{1}... {2}% {3}", + "backgroundImageFileNotSelected": "Δεν επιλέχθηκε αρχείο εικόνας φόντου", + "backgroundImageFileDoesNotExistX": "Το αρχείο εικόνας φόντου δεν υπάρχει: {0}", "voices": "Φωνές", "presets": "Προεπιλογές", "talkerX": "Ομιλητής {0}", "baseModel": "Βασικό μοντέλο", "turboModel": "Μοντέλο turbo", - "ttsUpdateX": "Ενημέρωση {0}", "ttsEngineNotInstalled": "Το {0} δεν είναι εγκατεστημένο", "ttsEngineUpdateAvailable": "{0} - διαθέσιμη ενημέρωση", "ttsEngineTooOldUpdateRequired": "{0} πολύ παλιό - απαιτείται ενημέρωση", @@ -2866,19 +3261,25 @@ "cloneVoiceTo": "Κλωνοποίηση φωνής σε", "cloneVoiceNameTitle": "Όνομα νέας φωνής", "cloneVoiceExtractFailed": "Αδυναμία εξαγωγής ήχου για την επιλεγμένη γραμμή.", + "lineXHasNoDuration": "Η γραμμή {0} δεν έχει διάρκεια (ο χρόνος λήξης δεν είναι μετά τον χρόνο έναρξης), οπότε δεν υπάρχει ήχος για εξαγωγή.", + "audioClipsSkippedLinesX": "Δεν ήταν δυνατή η εξαγωγή ήχου για αυτές τις γραμμές, οπότε παραλείφθηκαν: {0}", "toggleShotChange": "Εναλλαγή αλλαγής πλάνου", "resetWaveformZoomAndSpeed": "Επαναφορά εστίασης και ταχύτητας κυματομορφής", "showOriginalSubtitle": "Εμφάνιση αρχικού υπότιτλου", + "timelineGroupTracksBy": "Ομαδοποίηση κομματιών υπότιτλων κατά", + "timelineShowThumbnails": "Εμφάνιση μικρογραφιών βίντεο", + "showSpeechOnly": "Εμφάνιση μόνο ομιλίας (αργή δημιουργία)", + "isolatingSpeechForWaveformX": "Απομόνωση ομιλίας για την κυματομορφή... {0}", + "isolatingSpeechForWaveformFailed": "Δεν ήταν δυνατή η απομόνωση της ομιλίας για την κυματομορφή - δείτε το αρχείο καταγραφής εργαλείων", + "speechOnlyWaveformReady": "Η κυματομορφή εμφανίζει τώρα μόνο ομιλία", "showOnlyWaveform": "Εμφάνιση μόνο κυματομορφής", "showOnlySpectrogram": "Εμφάνιση μόνο φασματογραφήματος", "showWaveformAndSpectrogram": "Εμφάνιση κυματομορφής και φασματογραφήματος", - "spectrogramClassic": "Κλασικό", "spectrogramClassicViridis": "Viridis", "spectrogramClassicPlasma": "Plasma", "spectrogramClassicInferno": "Inferno", "spectrogramClassicTurbo": "Turbo", "spectrogramNeon": "Νέον", - "waveformDrawStyleClassic": "Κλασικό", "waveformDrawStyleFancy": "Φαντεζί", "setVideoPositionAndPauseAndSelectSubtitle": "Ορισμός θέσης βίντεο, παύση και επιλογή υπότιτλου", "setVideopositionAndPauseAndSelectSubtitleAndCenter": "Ορισμός θέσης βίντεο, παύση, επιλογή υπότιτλου και κεντράρισμα", @@ -2888,7 +3289,6 @@ }, "sync": { "visualSync": "Οπτικός συγχρονισμός", - "sync": "Συγχρονισμός", "startScene": "Σκηνή έναρξης", "endScene": "Σκηνή τέλους", "playTwoSecondsAndBack": "Αναπαραγωγή 2 δευτ. και πίσω", @@ -2904,19 +3304,18 @@ "adjustSelectedLinesAndForward": "Προσαρμογή επιλεγμένων γραμμών και εξής", "toFrameRate": "Σε ρυθμό καρέ", "fromFrameRate": "Από ρυθμό καρέ", + "videoXFrameRateY": "{0} - {1} fps", "adjustAllTimes": "Προσαρμογή όλων των χρόνων (εμφάνιση νωρίτερα/αργότερα)", "showEarlier": "Εμφάνιση νωρίτερα", "showLater": "Εμφάνιση αργότερα", - "changeFrameRate": "Αλλαγή ρυθμού καρέ", "setSyncPoint": "Ορισμός σημείου συγχρονισμού", "setSyncPointViaVideo": "Ορισμός σημείου συγχρονισμού μέσω βίντεο...", "syncPointTimeCode": "Χρονικός κώδικας σημείου συγχρονισμού", "syncPoints": "Σημεία συγχρονισμού", "pointSync": "Συγχρονισμός σημείων", "pointSyncViaOther": "Συγχρονισμός σημείων μέσω άλλου υπότιτλου", - "adjustmentX": "Προσαρμογή: {0}", - "totalAdjustmentX": "Συνολική προσαρμογή: {0}", - "syncPointCandidateInfo": "Οι γραμμές που ξεκινούν μετά από {0}+ δευτερόλεπτα σιωπής επισημαίνονται - συχνά αποτελούν αξιόπιστα σημεία συγχρονισμού", + "syncPointCandidateAfterInfo": "Οι γραμμές που ακολουθούνται από σιωπή {0}+ δευτερολέπτων επισημαίνονται - συχνά αποτελούν αξιόπιστα σημεία συγχρονισμού", + "gapAfter": "Κενό μετά", "adjustAllShortcuts": "Συντομεύσεις πληκτρολογίου:\r\n\r\n• Shift + Αριστερά/Δεξιά: Μετακίνηση 10 ms\r\n• Ctrl + Αριστερά/Δεξιά: Μετακίνηση 100 ms\r\n• Alt + Αριστερά/Δεξιά: Μετακίνηση 500 ms", "adjustAllShortcutsFrames": "Συντομεύσεις πληκτρολογίου:\r\n\r\n• Shift + Αριστερά/Δεξιά: Μετακίνηση 1 καρέ\r\n• Ctrl + Αριστερά/Δεξιά: Μετακίνηση 10 καρέ\r\n• Alt + Αριστερά/Δεξιά: Μετακίνηση 1 δευτερόλεπτο", "offsetInSeconds": "Μετατόπιση σε δευτερόλεπτα", @@ -2936,6 +3335,7 @@ "lineMerge": "Συγχώνευση γραμμών", "delayInSecondsBetweenRequests": "Καθυστέρηση σε δευτερόλεπτα μεταξύ αιτημάτων", "maxBytesPerRequest": "Μέγιστα byte ανά αίτημα", + "keepMusicLinesUntranslated": "Να μη μεταφράζονται γραμμές μέσα σε σύμβολα μουσικής (♪ ... ♪)", "promptText": "Κείμενο προτροπής", "resetPromptToDefault": "Επαναφορά προτροπής στην προεπιλογή", "translateEachLineSeparately": "Μετάφραση κάθε γραμμής ξεχωριστά", @@ -2949,11 +3349,10 @@ "readyToTranslate": "Έτοιμο για μετάφραση", "translating": "Μετάφραση...", "translationComplete": "Η μετάφραση ολοκληρώθηκε", + "translateInPlaceNoOriginal": "Μετάφραση επί τόπου (χωρίς δημιουργία αρχικού)", "translationCancelled": "Η μετάφραση ακυρώθηκε", "swapLanguages": "Εναλλαγή γλωσσών πηγής και προορισμού", "xIsAlreadyDownloadedReDownload": "Το {0} έχει ήδη ληφθεί. Νέα λήψη;", - "advancedDotDotDot": "Για προχωρημένους...", - "advancedSettings": "Ρυθμίσεις για προχωρημένους", "advancedSettingsSubtitle": "Επιλογές παρτίδας, συμφραζομένων και δειγματοληψίας για την προηγμένη μηχανή llama.cpp", "context": "Συμφραζόμενα", "synopsis": "Σύνοψη", @@ -2977,6 +3376,7 @@ "useOnlyExtraServerParametersHint": "Εκκίνηση του llama-server με τις παραπάνω παραμέτρους αντί για τη ρύθμιση του ίδιου του Subtitle Edit - ορίζονται μόνο το μοντέλο, ο κεντρικός υπολογιστής και η θύρα", "serverRunningAtX": "Ο διακομιστής εκτελείται στο {0}", "customPromptHint": "Προσαρμοσμένες οδηγίες ({0} = γλώσσα πηγής, {1} = γλώσσα προορισμού)· κενό = ενσωματωμένη προτροπή", + "editTranslationHint": "Κάντε κλικ στη μετάφραση της επιλεγμένης σειράς για να την επεξεργαστείτε (Enter για αποθήκευση, Escape για ακύρωση)", "llamaCppDownloadEngineAndModelPrompt": "Το llama.cpp απαιτεί τη λήψη της μηχανής llama-server και ενός μοντέλου μετάφρασης. Λήψη τώρα;", "llamaCppDownloadEnginePrompt": "Το llama.cpp απαιτεί τη λήψη της μηχανής llama-server. Λήψη τώρα;", "llamaCppDownloadModelPrompt": "Το llama.cpp απαιτεί τη λήψη του επιλεγμένου μοντέλου μετάφρασης. Λήψη τώρα;" @@ -2989,7 +3389,6 @@ "dialogStyleDashBothLinesWithSpace": "Παύλα και στις δύο γραμμές με κενό", "dialogStyleDashBothLinesWithoutSpace": "Παύλα και στις δύο γραμμές χωρίς κενό", "continuationStyle": "Στυλ συνέχειας", - "continuationStyleNone": "Κανένα", "continuationStyleNoneTrailingDots": "Κανένα, τελείες για παύσεις (μόνο στο τέλος)", "continuationStyleNoneLeadingTrailingDots": "Κανένα, τελείες για παύσεις", "continuationStyleNoneTrailingEllipsis": "Κανένα, αποσιωπητικά για παύσεις (μόνο στο τέλος)", @@ -3000,7 +3399,6 @@ "continuationStyleLeadingTrailingEllipsis": "Αποσιωπητικά", "continuationStyleLeadingTrailingDash": "Παύλα", "continuationStyleLeadingTrailingDashDots": "Παύλα, αλλά τελείες για παύσεις", - "continuationStyleCustom": "Προσαρμοσμένο", "cpsLineLengthStyle": "Cps/μήκος γραμμής", "cpsLineLengthStyleCalcAll": "Καταμέτρηση όλων των χαρακτήρων", "cpsLineLengthStyleCalcNoSpaceCpsOnly": "Καταμέτρηση όλων εκτός κενών, μόνο cps", @@ -3013,14 +3411,6 @@ "cpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly": "Χωρίς κενά ή σημεία στίξης, μόνο CPS", "cpsLineLengthStyleCalcIgnoreArabicDiacritics": "Παράβλεψη αραβικών διακριτικών", "cpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "Παράβλεψη αραβικών διακριτικών, χωρίς κενά", - "timeCodeModeHhMmSsMs": "HH:MM:SS:MS", - "timeCodeModeHhMmSsFf": "HH:MM:SS:FF", - "splitBehaviorPrevious": "Προσθήκη κενού αριστερά του σημείου διαίρεσης (εστίαση δεξιά)", - "splitBehaviorHalf": "Προσθήκη κενού στο κέντρο του σημείου διαίρεσης (εστίαση αριστερά)", - "splitBehaviorNext": "Προσθήκη κενού δεξιά του σημείου διαίρεσης (εστίαση αριστερά)", - "subtitleListActionNothing": "Τίποτα", - "subtitleListActionVideoGoToPositionAndPause": "Μετάβαση στη θέση βίντεο και παύση", - "subtitleListActionVideoGoToPositionAndPlay": "Μετάβαση στη θέση βίντεο και αναπαραγωγή", "subtitleGridCenterText": "Κεντράρισμα κειμένου στο πλέγμα υπότιτλων", "minGapCalculateDotDotDot": "Υπολογισμός ελάχιστου κενού από ρυθμό καρέ...", "minGapCalculateTitle": "Ελάχ. κενό μεταξύ υπότιτλων σε ms", @@ -3052,8 +3442,14 @@ "checkForUpdatesChannelStableAndBeta": "Σταθερές και beta εκδόσεις", "assaAutoSetResolution": "ASSA: ορισμός ανάλυσης (PlayResX/PlayResY) από το βίντεο όταν ανοίγει βίντεο", "assaAutoSetResolutionPrompt": "ASSA: ερώτηση πριν από την αλλαγή της ανάλυσης ώστε να ταιριάζει με το βίντεο (αλλιώς αυτόματη αναδειγματοληψία)", + "videoControls": "Στοιχεία ελέγχου βίντεο", + "videoControlsEdit": "Επεξεργασία στοιχείων ελέγχου βίντεο...", + "videoControlsPositionText": "Κείμενο θέσης / διάρκειας", + "videoControlsVideoFileName": "Όνομα αρχείου βίντεο", + "videoControlsPlayerName": "Όνομα προγράμματος αναπαραγωγής βίντεο", "mergeKeepEndTime": "Συγχώνευση γραμμών: διατήρηση χρόνου τέλους (να επιτρέπεται επικάλυψη με τον επόμενο υπότιτλο)", "mergeKeepEndTimeOnlyAssa": "Συγχώνευση γραμμών: διατήρηση χρόνου τέλους μόνο για \"Advanced Sub Station Alpha\"", + "mergeAutoBreak": "Συγχώνευση γραμμών: αυτόματη αλλαγή γραμμής στο συγχωνευμένο κείμενο (απενεργοποιημένο διατηρεί τις αλλαγές γραμμής των γραμμών)", "defaultSaveLocation": "Προεπιλεγμένη θέση αποθήκευσης", "defaultSaveLocationSourceFileFolder": "Φάκελος αρχείου υπότιτλων/βίντεο", "defaultSaveLocationLastUsedFolder": "Τελευταίος φάκελος που χρησιμοποιήθηκε", @@ -3061,18 +3457,10 @@ "defaultSaveLocationSubtitleFileFolder": "Φάκελος αρχείου υπότιτλων", "defaultSaveLocationCustomFolder": "Προσαρμοσμένος φάκελος", "subtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "Μετάβαση στη θέση βίντεο, αναπαραγωγή τρέχοντος και παύση", - "subtitleListActionEditText": "Μετάβαση στο πλαίσιο επεξεργασίας κειμένου", "subtitleListActionVideoGoToPositionMinus1SecAndPause": "Μετάβαση στη θέση βίντεο - 1 δευτ. και παύση", "subtitleListActionVideoGoToPositionMinusHalfSecAndPause": "Μετάβαση στη θέση βίντεο - 0,5 δευτ. και παύση", "subtitleListActionVideoGoToPositionMinus1SecAndPlay": "Μετάβαση στη θέση βίντεο - 1 δευτ. και αναπαραγωγή", - "subtitleListActionEditTextAndPause": "Μετάβαση στο πλαίσιο επεξεργασίας κειμένου και παύση στη θέση βίντεο", - "autoBackupEveryMinute": "Κάθε λεπτό", - "autoBackupEveryXthMinute": "Κάθε {0} λεπτά", - "profiles": "Προφίλ", - "autoBackupDeleteAfterXMonths": "Διαγραφή αυτόματων αντιγράφων ασφαλείας μετά από {0} μήνες", "searchSettingsDotDotDot": "Αναζήτηση ρυθμίσεων...", - "syntaxColoring": "Χρωματισμός σύνταξης", - "waveformSpectrogram": "Κυματομορφή/φασματογράφημα", "network": "Δίκτυο", "fileTypeAssociations": "Συσχετίσεις τύπων αρχείων", "textBoxColorTags": "Χρωματισμός ετικετών (HTML/ASSA) στο πλαίσιο κειμένου υπότιτλου", @@ -3105,10 +3493,9 @@ "darkThemeForegroundColor": "Χρώμα προσκηνίου σκούρου θέματος", "darkThemeBackgroundColor": "Χρώμα φόντου σκούρου θέματος", "showGridLines": "Εμφάνιση γραμμών πλέγματος", - "resetSettings": "Επαναφορά ρυθμίσεων;", - "resetSettingsDetail": "Αυτό θα επαναφέρει όλες τις ρυθμίσεις στις προεπιλεγμένες τιμές τους.\n\nΣυνέχεια;", "showHorizontalLineAboveToolbar": "Εμφάνιση οριζόντιας γραμμής πάνω από τη γραμμή εργαλείων", "bookmarkColor": "Χρώμα σελιδοδείκτη", + "spellCheckHighlightColor": "Χρώμα επισήμανσης ορθογραφικού ελέγχου", "singleLineMaxLength": "Μέγιστο μήκος μίας γραμμής", "optimalCharsPerSec": "Βέλτιστοι χαρ./δευτ.", "maxCharsPerSec": "Μέγ. χαρ./δευτ.", @@ -3121,13 +3508,21 @@ "unbreakSubtitlesShortThan": "Αναίρεση αλλαγής γραμμής σε υπότιτλους μικρότερους από", "newEmptyDefaultMs": "Προεπιλεγμένη διάρκεια νέου υπότιτλου (ms)", "timeCodeUpDownStepMs": "Βήμα αύξησης/μείωσης χρόνου (ms)", + "moveSelectedLinesStepMs": "Βήμα συντόμευσης μετακίνησης επιλεγμένων γραμμών (ms)", + "moveStartEndStepMs": "Βήμα συντόμευσης μετακίνησης έναρξης/λήξης (ms)", + "moveLinesShortenNeighbor": "Μετακίνηση γραμμών: συντόμευση της προηγούμενης/επόμενης γραμμής αντί για επικάλυψη", "promptBeforeDelete": "Ερώτηση πριν από τη διαγραφή", "rememberPositionAndSize": "Απομνημόνευση θέσης και μεγέθους παραθύρου", + "titleBarFullFileName": "Εμφάνιση πλήρους διαδρομής αρχείου στη γραμμή τίτλου", + "showRecentFiles": "Εμφάνιση πρόσφατων αρχείων (για νέο άνοιγμα)", "openLastFileOnStart": "Άνοιγμα τελευταίου πρόσφατου αρχείου κατά την εκκίνηση", "autoSave": "Αυτόματη αποθήκευση (αποθήκευση του ανοιχτού αρχείου κατά την επεξεργασία)", "autoBackupOn": "Αυτόματο αντίγραφο ασφαλείας", "autoBackupIntervalMinutes": "Διάστημα αυτόματων αντιγράφων ασφαλείας (λεπτά)", "autoBackupDeleteAfterDays": "Διατήρηση αυτόματων αντιγράφων ασφαλείας (ημέρες)", + "settingsBackupOn": "Αυτόματο αντίγραφο ασφαλείας ρυθμίσεων", + "settingsBackupIntervalDays": "Διάστημα αντιγράφων ασφαλείας ρυθμίσεων (ημέρες, 0 = σε κάθε εκκίνηση)", + "settingsBackupMaxCount": "Αντίγραφα ασφαλείας ρυθμίσεων προς διατήρηση", "autoConvertToUtf8": "Αυτόματη μετατροπή κωδικοποίησης σε UTF-8 κατά το άνοιγμα", "autoTrimWhiteSpace": "Αυτόματη περικοπή κενών διαστημάτων", "defaultEncoding": "Προεπιλεγμένη κωδικοποίηση", @@ -3143,23 +3538,14 @@ "colorGapTooShort": "Χρωματισμός αν το κενό είναι πολύ σύντομο", "errorBackgroundColor": "Χρώμα φόντου σφάλματος", "waveformDrawGridLines": "Σχεδίαση γραμμών πλέγματος", - "waveformCenterVideoPosition": "Κεντράρισμα θέσης βίντεο", + "waveformUseSkiaRenderer": "Χρήση πειραματικής γρήγορης απόδοσης", "waveformCenterVideoPositionAlsoWhenPaused": "Κεντράρισμα θέσης βίντεο και σε παύση", + "waveformSelectCurrentSubtitleWhilePaused": "Επιλογή τρέχοντος υπότιτλου και κατά την παύση", + "waveformRememberZoom": "Απομνημόνευση ζουμ (οριζόντιου και κατακόρυφου)", "waveformShowToolbar": "Εμφάνιση γραμμής εργαλείων", "waveformShowToolbarEdit": "Επεξεργασία γραμμής εργαλείων...", "waveformShowToolbarEditLabel": "Στοιχεία γραμμής εργαλείων", "waveformSpectrogramCombinedWaveformHeight": "Συνδυασμός κυματομορφής/φασματογραφήματος, ύψος κυματομορφής %", - "showWaveformToolbarPlay": "Γραμμή εργαλείων: εμφάνιση κουμπιού αναπαραγωγής", - "showWaveformToolbarRepeat": "Γραμμή εργαλείων: εμφάνιση κουμπιού επανάληψης", - "showWaveformToolbarRemoveBlankLines": "Γραμμή εργαλείων: εμφάνιση κουμπιού αφαίρεσης κενών γραμμών", - "showWaveformToolbarNew": "Γραμμή εργαλείων: εμφάνιση κουμπιού νέου υπότιτλου", - "showWaveformToolbarSetStart": "Γραμμή εργαλείων: εμφάνιση κουμπιού ορισμού αρχής", - "showWaveformToolbarSetEnd": "Γραμμή εργαλείων: εμφάνιση κουμπιού ορισμού τέλους", - "showWaveformToolbarStartAndOffsetTheRest": "Γραμμή εργαλείων: εμφάνιση κουμπιού ορισμού αρχής και μετατόπισης των υπολοίπων", - "showWaveformToolbarHorizontalZoom": "Γραμμή εργαλείων: εμφάνιση ρυθμιστικού οριζόντιας εστίασης", - "showWaveformToolbarVerticalZoom": "Γραμμή εργαλείων: εμφάνιση ρυθμιστικού κατακόρυφης εστίασης", - "showWaveformToolbarVideoPositionSlider": "Γραμμή εργαλείων: εμφάνιση ρυθμιστικού θέσης βίντεο", - "showWaveformToolbarPlaybackSpeed": "Γραμμή εργαλείων: εμφάνιση ταχύτητας αναπαραγωγής", "waveformFocusTextboxAfterInsertNew": "Εστίαση στο πλαίσιο κειμένου μετά την εισαγωγή", "waveformInvertMouseWheel": "Αντιστροφή τροχού ποντικιού", "waveformMouseWheelSetsVideoPosition": "Ο τροχός ποντικιού ορίζει τη θέση βίντεο", @@ -3180,20 +3566,20 @@ "fixCommonErrorsSkipStep1": "Διόρθωση συνηθισμένων σφαλμάτων: παράλειψη βήματος 1 (επιλογή διορθώσεων)", "showPluginsMenu": "Εμφάνιση μενού προσθέτων", "proxyAddress": "Διεύθυνση διαμεσολαβητή", - "username": "Όνομα χρήστη", "password": "Κωδικός πρόσβασης", "defaultFormat": "Προεπιλεγμένη μορφή", "defaultSaveAsFormat": "Προεπιλεγμένη μορφή \"Αποθήκευση ως\"", "favoriteSubtitleFormats": "Αγαπημένες μορφές υπότιτλων", "favoriteLanguages": "Αγαπημένες γλώσσες", "webVttUseXTimestampMap": "WebVTT: χρήση X-TIMESTAMP-MAP (μετατόπιση χρονικών κωδίκων κατά τη φόρτωση)", - "showStopButton": "Εμφάνιση κουμπιού διακοπής", - "showFullscreenButton": "Εμφάνιση κουμπιού πλήρους οθόνης", "fullscreenHideControls": "Απόκρυψη στοιχείων ελέγχου βίντεο σε πλήρη οθόνη", + "showSecondarySubtitleDialog": "Εμφάνιση παραθύρου στυλ κατά το άνοιγμα δευτερεύοντος αρχείου υπότιτλων", + "rememberSecondarySubtitleFile": "Απομνημόνευση δευτερεύοντος αρχείου υπότιτλων", "autoOpenVideoFile": "Αυτόματο άνοιγμα αρχείου βίντεο κατά το άνοιγμα υπότιτλου", "downloadMpv": "Λήψη mpv", "downloadVlc": "Λήψη VLC", "allowSingleLetterShortcutsInTextbox": "Να επιτρέπονται συντομεύσεις ενός γράμματος στο πλαίσιο κειμένου", + "allowTextNavigationShortcutsInTextbox": "Να επιτρέπονται συντομεύσεις σε πλήκτρα πλοήγησης κειμένου (Ctrl+Αριστερά/Δεξιά, Home/End) στο πλαίσιο κειμένου", "spellCheckEnglishTreatInApostropheAsIng": "Ορθογραφικός έλεγχος: Αντιμετώπιση λέξεων που τελειώνουν σε 'in'' ως 'ing' (μόνο Αγγλικά)", "goToLineNumberSetsVideoPosition": "Η μετάβαση σε αριθμό γραμμής ορίζει και τη θέση βίντεο", "adjustAllTimesRememberLineSelectionChoice": "Προσαρμογή όλων των χρόνων, απομνημόνευση επιλογής γραμμών", @@ -3205,6 +3591,7 @@ "showAssaLayer": "Εμφάνιση πλαισίου επιπέδου ASSA", "waveformCursorColor": "Χρώμα δρομέα/κεφαλής κυματομορφής", "waveformShotChangeColor": "Χρώμα αλλαγής πλάνου κυματομορφής", + "waveformGridColor": "Χρώμα πλέγματος κυματομορφής", "waveformParagraphLeftColor": "Χρώμα αριστερού περιγράμματος κυματομορφής", "waveformParagraphRightColor": "Χρώμα δεξιού περιγράμματος κυματομορφής", "waveformFancyHighColor": "Χρώμα υψηλών φαντεζί κυματομορφής", @@ -3232,27 +3619,31 @@ "resetSyntaxColoring": "Επαναφορά χρωματισμού σύνταξης", "resetWaveform": "Επαναφορά κυματομορφής", "resetRules": "Επαναφορά κανόνων", - "useFrameMode": "Χρήση λειτουργίας καρέ (hh.mm.ss.ff)", + "timeCodeMode": "Λειτουργία χρονικού κώδικα", + "timeCodeModeTime": "Χρόνος (hh:mm:ss,zzz)", + "timeCodeModeFrames": "Καρέ (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "Αριθμοί καρέ", + "frameModeSnapToVideoFrames": "Αποθήκευση χρόνων στα καρέ του βίντεο (όχι σε καρέ μέσα σε κάθε δευτερόλεπτο)", "textBoxLimitNewLines": "Περιορισμός αριθμού γραμμών στο πλαίσιο κειμένου υπότιτλου", - "mpvVideoOutput": "Έξοδος βίντεο (mpv)", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - Απόδοση λογισμικού (αργή)", + "mpvMetalRendering": "libmpv - Metal (πειραματικό, απαιτεί επανεκκίνηση)", "mpvWidRendering": "libmpv - Εγγενής απόδοση Window ID", "waveFormsAndSpectrogramFoldersContainsX": "Οι φάκελοι \"Waveforms\" και \"spectrogram\" περιέχουν {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "Διαγραφή αρχείων \"Waveforms\" και \"Spectrogram\";", "waveformGenerateSpectrogram": "Δημιουργία φασματογραφήματος", "waveformAutoGenerate": "Αυτόματη δημιουργία κυματομορφής κατά το άνοιγμα βίντεο", "waveformSpectrogramMode": "Λειτουργία φασματογραφήματος", - "waveformCenterOnSingleClick": "Κεντράρισμα με μονό κλικ", - "waveformSingleClickSelectsSubtitle": "Επιλογή υπότιτλου με μονό κλικ", "waveformRightClickSelectsSubtitle": "Επιλογή υπότιτλου με δεξί κλικ", - "waveformPauseOnSingleClick": "Παύση με μονό κλικ", "waveformDrawStyle": "Στυλ σχεδίασης κυματομορφής", "waveformExtractAudioFormat": "Μορφή εξαγωγής ήχου", "waveformExtractAudioSampleRate": "Ρυθμός δειγματοληψίας εξαγωγής ήχου", "waveformExtractAudioSampleRateOriginal": "Αρχικός (διατήρηση πηγής)", "waveformExtractAudioBitRate": "Ρυθμός bit εξαγωγής ήχου (MP3/M4A)", + "ffmpegUseCenterChannelOnly": "Χρήση μόνο του μπροστινού κεντρικού καναλιού για ήχο 5.1 (FFmpeg)", "vlcWidRendering": "libVLC - Εγγενής απόδοση Window ID", + "ffmpegSoftwareRendering": "FFmpeg", + "downloadFfmpegLibs": "Λήψη βιβλιοθηκών FFmpeg (για το πρόγραμμα αναπαραγωγής βίντεο FFmpeg)", "subtitleGridEnterKeyAction": "Ενέργεια πλήκτρου Enter στο πλέγμα υπότιτλων", "subtitleSingleClickAction": "Ενέργεια μονού κλικ στο πλέγμα υπότιτλων", "subtitleDoubleClickAction": "Ενέργεια διπλού κλικ στο πλέγμα υπότιτλων", @@ -3270,6 +3661,7 @@ "subtitleGridFormattingShowFormatting": "Εμφάνιση μορφοποίησης", "subtitleGridFormattingShowTags": "Εμφάνιση ετικετών", "subtitleGridFormattingHideTags": "Απόκρυψη ετικετών", + "subtitleGridFormattingShowFormattingKeepTags": "Εμφάνιση μορφοποίησης, διατήρηση μη οπτικών ετικετών", "waveformParagraphBackgroundColor": "Χρώμα φόντου υπότιτλου κυματομορφής", "waveformParagraphSelectedBackgroundColor": "Χρώμα φόντου επιλεγμένου υπότιτλου κυματομορφής", "waveformAllowOverlap": "Να επιτρέπεται η επικάλυψη (κατά τη μετακίνηση/αλλαγή μεγέθους)", @@ -3279,17 +3671,18 @@ "saveAsBehaviorUseVideoFileName": "Χρήση ονόματος αρχείου βίντεο", "saveAsBehaviorUseSubtitleFileName": "Χρήση ονόματος αρχείου υπότιτλου", "saveAsAppendLanguageCodeTwoLetter": "Δύο γραμμάτων", - "saveAsAppendLanguageCodeThreeLetter": "Τριών γραμμάτων (ISO 639-2/T)", - "saveAsAppendLanguageCodeThreeLetterBibliographic": "Τριών γραμμάτων (ISO 639-2/B)", "saveAsAppendLanguageCodeLanguageName": "Όνομα γλώσσας", "splitOddLineActionWeightTop": "Βάρος πάνω", "splitOddLineActionWeightBottom": "Βάρος κάτω", "splitOddLinesAction": "Ενέργεια διαίρεσης μονών γραμμών", "ocrUseWordSplitList": "OCR: χρήση λίστας διαίρεσης λέξεων", "ocrGuessUnknownWords": "OCR: προσπάθεια εκτίμησης άγνωστων λέξεων", + "spellCheckRememberUseAlwaysList": "Ορθογραφικός έλεγχος: απομνημόνευση λίστας \"Χρήση πάντα\"", + "fixShortDisplayTimesAllowMoveStartTime": "Διόρθωση συνηθισμένων σφαλμάτων: η διόρθωση σύντομων χρόνων εμφάνισης μπορεί να μετακινήσει τον χρόνο έναρξης", "speechToTextSelectedLinesPromptFirstTimeOnly": "Ομιλία σε κείμενο: επιλεγμένες γραμμές, ερώτηση για γλώσσα/μηχανή μόνο την πρώτη φορά", "multipleReplaceShowDotDotDotButtons": "Πολλαπλή αντικατάσταση: εμφάνιση κουμπιών μενού περιβάλλοντος", "gridFocusTextboxAfterInsertNew": "Πλέγμα: εστίαση στο πλαίσιο κειμένου μετά την εισαγωγή νέου υπότιτλου", + "undoRedoGoToChangedLine": "Αναίρεση/ακύρωση αναίρεσης: μετάβαση στη γραμμή που άλλαξε (και στη θέση βίντεο)", "musicSymbol": "Μουσικό σύμβολο", "musicSymbolsToReplace": "Μουσικά σύμβολα προς αντικατάσταση (χωρισμένα με κόμμα)", "textToSpeechPromptMergeContinuationLines": "Κείμενο σε ομιλία: ερώτηση για συγχώνευση γραμμών συνέχειας", @@ -3298,8 +3691,7 @@ "useFocusedButtonBackgroundColor": "Χρήση χρώματος φόντου εστιασμένου κουμπιού", "focusedButtonBackgroundColor": "Χρώμα φόντου εστιασμένου κουμπιού", "forceCrLfOnSave": "Επιβολή CR+LF κατά την αποθήκευση (αρχεία υπότιτλων κειμένου)", - "showWaveformToolbarPlayNext": "Γραμμή εργαλείων: εμφάνιση κουμπιού αναπαραγωγής επόμενου", - "showWaveformToolbarPlaySelection": "Γραμμή εργαλείων: εμφάνιση κουμπιού αναπαραγωγής επιλογής", + "linuxClipboardUseExternalTool": "Αντιγραφή κειμένου μέσω xclip/wl-copy (διατηρεί τους τονισμένους χαρακτήρες)", "showFormatLimitWarning": "Προειδοποίηση κατά την αποθήκευση όταν οι γραμμές υπερβαίνουν τα όρια της μορφής (π.χ. SCC 32 χαρ./γραμμή)", "textBoxButtonShowAutoBreak": "Πλαίσιο κειμένου: εμφάνιση κουμπιού αυτόματης αλλαγής γραμμής", "textBoxButtonShowUnbreak": "Πλαίσιο κειμένου: εμφάνιση κουμπιού αναίρεσης αλλαγής γραμμής", @@ -3311,12 +3703,18 @@ "waveformDoubleClickAction": "Ενέργεια διπλού κλικ στην κυματομορφή (μετά την ενέργεια μονού κλικ)", "allSettings": "Όλες οι ρυθμίσεις", "uiScale": "Κλίμακα διεπαφής (%)", + "fontScale": "Κλίμακα γραμματοσειράς (%)", + "textSelectionOpacity": "Αδιαφάνεια επιλογής κειμένου (%)", "waveformToolbarItems": "Στοιχεία γραμμής εργαλείων κυματομορφής", "matchIconColorToDarkTheme": "Αντιστοίχιση χρώματος εικονιδίων με το χρώμα προσκηνίου σκούρου θέματος", "subtitlePreviewProperties": "Ιδιότητες προεπισκόπησης υπότιτλων", "usePositionFromSubtitleFile": "Χρήση θέσης από το αρχείο υπότιτλων (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "Το περιθώριο αποτελεί μέρος της περιοχής υπότιτλων", "textJustify": "Πλήρης στοίχιση γραμμών", + "deinterlace": "Αποπλεγματοποίηση βίντεο (deinterlace)", + "deinterlaceOff": "Ανενεργό", + "deinterlaceAuto": "Αυτόματο (μόνο πεπλεγμένα καρέ)", + "deinterlaceAlways": "Πάντα", "pixelWidthInfo": "Πράσινες γραμμές = όριο μέγιστου πλάτους | Κόκκινη περιοχή = το κείμενο υπερβαίνει το όριο", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3325,117 +3723,89 @@ "waveformColorTheme": "Χρωματικό θέμα:", "waveformSaveAsCustomTheme": "Αποθήκευση ως προσαρμοσμένο θέμα...", "waveformLoadThemeDotDotDot": "Φόρτωση θέματος...", - "waveformExportThemeDotDotDot": "Εξαγωγή θέματος..." + "waveformExportThemeDotDotDot": "Εξαγωγή θέματος...", + "waveformSaveCustomThemeTitle": "Αποθήκευση προσαρμοσμένου θέματος", + "waveformThemeFileType": "Θέμα κυματομορφής Subtitle Edit", + "waveformThemeHighContrast": "Υψηλή αντίθεση", + "waveformThemeOceanBlue": "Μπλε ωκεανού", + "waveformThemeWarmSunset": "Ζεστό ηλιοβασίλεμα", + "waveformThemeForest": "Δάσος", + "waveformThemeMidnightPurple": "Μεσονύχτιο μωβ", + "waveformThemeRetroAmber": "Ρετρό κεχριμπαρί", + "waveformThemeIce": "Πάγος" }, "shortcuts": { - "title": "Συντομεύσεις", "searchShortcuts": "Αναζήτηση συντομεύσεων...", - "filter": "Φίλτρο", - "categoryGeneral": "Γενικά", "categorySubtitleGridAndTextBox": "Προβολή λίστας υπότιτλων και πλαίσιο κειμένου", "categorySubtitleGrid": "Προβολή λίστας υπότιτλων", - "categoryWaveform": "Κυματομορφή", "categoryTextBox": "Πλαίσιο κειμένου", "categoryFile": "Αρχείο", "categoryVideo": "Βίντεο", "categorySync": "Συγχρονισμός", - "categoryTranslate": "Μετάφραση", - "categorySearch": "Αναζήτηση", - "categoryTools": "Εργαλεία", "categoryAi": "AI", + "categoryCustom": "Προσαρμοσμένο", + "editCustomShortcut": "Επεξεργασία προσαρμοσμένης συντόμευσης", + "customShortcutTextBoxKeyHint": "Χρησιμοποιήστε εδώ ένα πλήκτρο με Ctrl/Alt - ένα απλό πλήκτρο δεν θα πληκτρολογούσε πλέον στο πλαίσιο κειμένου.", + "customShortcutNumberX": "Προσαρμοσμένη συντόμευση #{0}", + "customShortcutNumberXY": "Προσαρμοσμένη συντόμευση #{0}: {1}", + "customShortcutStep": "Βήμα", + "customShortcutSteps": "Βήματα", + "customShortcutStepRunCommand": "Εκτέλεση εντολής", + "customShortcutStepInsertText": "Εισαγωγή κειμένου", + "customShortcutStepReplace": "Εύρεση και αντικατάσταση", + "customShortcutInsertAtCursor": "Στη θέση του δρομέα", + "customShortcutInsertAtStart": "Στην αρχή του κειμένου", + "customShortcutInsertAtEnd": "Στο τέλος του κειμένου", + "customShortcutSummaryRunCommandX": "Εκτέλεση: {0}", + "customShortcutSummaryInsertXY": "Εισαγωγή \"{0}\" ({1})", + "customShortcutSummaryReplaceXY": "Αντικατάσταση \"{0}\" με \"{1}\"", + "customShortcutSummaryReplaceRegexXY": "Αντικατάσταση κανονικής έκφρασης \"{0}\" με \"{1}\"", + "customShortcutPickCommand": "Επιλέξτε μια εντολή για εκτέλεση.", + "customShortcutEnterText": "Εισαγάγετε το κείμενο προς εισαγωγή.", + "customShortcutEnterFind": "Εισαγάγετε το κείμενο προς εύρεση.", + "customShortcutInvalidRegexX": "Μη έγκυρη κανονική έκφραση: {0}", + "customShortcutStepsHint": "Τα βήματα εκτελούνται από πάνω προς τα κάτω. Τα βήματα κειμένου εφαρμόζονται στις επιλεγμένες γραμμές· οι εντολές που ανοίγουν παράθυρο συνεχίζουν αφού αυτό κλείσει.", "activeIn": "Ενεργό σε", "activeInEverywhere": "Παντού", - "generalSetupLikeSe4": "Ρύθμιση όπως το Subtitle Edit 4 (θέμα, συντομεύσεις, κανόνες αντικατάστασης)", - "generalMergeSelectedLines": "Συγχώνευση επιλεγμένων γραμμών", - "generalMergeWithPrevious": "Συγχώνευση με το προηγούμενο", - "generalMergeWithNext": "Συγχώνευση με το επόμενο", - "generalMergeWithPreviousAndUnbreak": "Συγχώνευση με το προηγούμενο και αναίρεση αλλαγής γραμμής", - "generalMergeWithNextAndUnbreak": "Συγχώνευση με το επόμενο και αναίρεση αλλαγής γραμμής", - "generalMergeWithPreviousAndAutoBreak": "Συγχώνευση με το προηγούμενο και αυτόματη αλλαγή γραμμής", - "generalMergeWithNextAndAutoBreak": "Συγχώνευση με το επόμενο και αυτόματη αλλαγή γραμμής", - "generalMergeSelectedLinesAndAutoBreak": "Συγχώνευση επιλεγμένων γραμμών και αυτόματη αλλαγή γραμμής", "generalMergeSelectedLinesAndUnbreak": "Συγχώνευση επιλεγμένων γραμμών και αναίρεση αλλαγής γραμμής", "generalMergeSelectedLinesAndUnbreakCjk": "Συγχώνευση επιλεγμένων γραμμών και αναίρεση αλλαγής χωρίς κενό (CJK)", "generalUnbreakNoSpaceCjk": "Αναίρεση αλλαγής γραμμής χωρίς κενό (CJK)", - "generalMergeSelectedLinesOnlyFirstText": "Συγχώνευση επιλεγμένων γραμμών, μόνο το πρώτο κείμενο", + "generalToggleBreak": "Εναλλαγή αλλαγής γραμμής/αφαίρεσης αλλαγής γραμμής", "generalMergeSelectedLinesBilingual": "Συγχώνευση επιλεγμένων γραμμών δίγλωσσα", - "generalMergeWithPreviousBilingual": "Συγχώνευση με το προηγούμενο δίγλωσσα", - "generalMergeWithNextBilingual": "Συγχώνευση με το επόμενο δίγλωσσα", - "generalMergeOriginalAndTranslation": "Συγχώνευση αρχικού και μετάφρασης", "generalToggleTranslationMode": "Εναλλαγή λειτουργίας μετάφρασης", - "generalSwitchOriginalAndTranslation": "Εναλλαγή αρχικού και μετάφρασης", - "generalSwitchOriginalAndTranslationTextBoxes": "Εναλλαγή πλαισίων κειμένου αρχικού και μετάφρασης", "generalToggleTranslationAndOriginalInPreviews": "Εναλλαγή μετάφρασης και πρωτοτύπου στην προεπισκόπηση βίντεο/ήχου", "generalChooseLayout": "Επιλογή διάταξης", - "generalLayoutChooseX": "Διάταξη {0}", - "generalPlayFirstSelected": "Αναπαραγωγή πρώτου επιλεγμένου", - "generalGoToFirstSelectedLine": "Μετάβαση στην πρώτη επιλεγμένη γραμμή", - "generalGoToNextEmptyLine": "Μετάβαση στην επόμενη κενή γραμμή", "generalGoToNextSubtitle": "Μετάβαση στον επόμενο υπότιτλο", "generalGoToNextSubtitlePlayTranslate": "Μετάβαση στον επόμενο υπότιτλο (αναπαραγωγή μετάφρασης)", "generalGoToNextSubtitleCursorAtEnd": "Μετάβαση στον επόμενο υπότιτλο (δρομέας στο τέλος)", "generalGoToPrevSubtitle": "Μετάβαση στον προηγούμενο υπότιτλο", "generalGoToPrevSubtitlePlayTranslate": "Μετάβαση στον προηγούμενο υπότιτλο (αναπαραγωγή μετάφρασης)", - "generalGoToStartOfCurrentSubtitle": "Μετάβαση στην αρχή του τρέχοντος υπότιτλου", - "generalGoToEndOfCurrentSubtitle": "Μετάβαση στο τέλος του τρέχοντος υπότιτλου", - "generalGoToPreviousSubtitleAndFocusVideo": "Μετάβαση στον προηγούμενο υπότιτλο και εστίαση στο βίντεο", - "generalGoToNextSubtitleAndFocusVideo": "Μετάβαση στον επόμενο υπότιτλο και εστίαση στο βίντεο", - "generalGoToPrevSubtitleAndPlay": "Μετάβαση στον προηγούμενο υπότιτλο και αναπαραγωγή", - "generalGoToNextSubtitleAndPlay": "Μετάβαση στον επόμενο υπότιτλο και αναπαραγωγή", - "generalGoToPreviousSubtitleAndFocusWaveform": "Μετάβαση στον προηγούμενο υπότιτλο και εστίαση στην κυματομορφή", - "generalGoToNextSubtitleAndFocusWaveform": "Μετάβαση στον επόμενο υπότιτλο και εστίαση στην κυματομορφή", - "generalGoToLineNumber": "Μετάβαση σε αριθμό γραμμής", "generalGoToFirstLine": "Μετάβαση στην πρώτη γραμμή", "generalGoToLastLine": "Μετάβαση στην τελευταία γραμμή", "alsoSetVideoPosition": "Ορισμός και της θέσης βίντεο", "generalGoToVideoPosition": "Μετάβαση σε θέση βίντεο", "generalToggleItalic": "Εναλλαγή πλάγιων", "generalToggleBold": "Εναλλαγή έντονων", - "generalToggleBookmarks": "Εναλλαγή σελιδοδεικτών", - "generalFocusTextBox": "Εστίαση στο πλαίσιο κειμένου", - "generalToggleBookmarksWithText": "Εναλλαγή σελιδοδεικτών με κείμενο", - "generalEditBookmarks": "Επεξεργασία σελιδοδεικτών", - "fileNew": "Νέο", "generalToggleUnderline": "Εναλλαγή υπογράμμισης", + "generalToggleBox": "Εναλλαγή πλαισίου (EBU STL)", "fileOpen": "Άνοιγμα", "fileOpenKeepVideo": "Άνοιγμα (διατήρηση βίντεο)", "fileSave": "Αποθήκευση", "fileSaveAs": "Αποθήκευση ως", - "fileSaveAll": "Αποθήκευση όλων", "fileSaveOriginal": "Αποθήκευση αρχικού", - "fileSaveOriginalAs": "Αποθήκευση αρχικού ως", - "fileOpenOriginalSubtitle": "Άνοιγμα αρχικού υπότιτλου", - "fileCloseOriginalSubtitle": "Κλείσιμο αρχικού υπότιτλου", - "fileTranslatedSubtitle": "Μεταφρασμένος υπότιτλος", "fileCompare": "Σύγκριση", "fileStatistics": "Στατιστικά", "fileImportPlainText": "Εισαγωγή απλού κειμένου", - "fileImportBluRaySupForOcr": "Εισαγωγή Blu-ray SUP για OCR", - "fileImportBluRaySupForEdit": "Εισαγωγή Blu-ray SUP για επεξεργασία", - "fileImportTimeCodes": "Εισαγωγή χρονικών κωδίκων", "fileExportEbuStl": "Εξαγωγή EBU STL", "fileExportPac": "Εξαγωγή PAC", - "fileExportEdlClipName": "Εξαγωγή ονόματος κλιπ EDL", - "fileExportPlainText": "Εξαγωγή απλού κειμένου", - "fileExportCustomTextFormat1": "Εξαγωγή προσαρμοσμένης μορφής κειμένου 1", - "fileExportCustomTextFormat2": "Εξαγωγή προσαρμοσμένης μορφής κειμένου 2", - "fileExportCustomTextFormat3": "Εξαγωγή προσαρμοσμένης μορφής κειμένου 3", "fileExit": "Έξοδος", "openSeDataFolder": "Άνοιγμα φακέλου Subtitle Edit", - "editFind": "Εύρεση", - "editFindNext": "Εύρεση επόμενου", "editFindPrevious": "Εύρεση προηγούμενου", - "editReplace": "Αντικατάσταση", - "editMultipleReplace": "Πολλαπλή αντικατάσταση", "fillSelectedLinesWithClipboard": "Συμπλήρωση επιλεγμένων γραμμών με κείμενο προχείρου", - "editModifySelection": "Τροποποίηση επιλογής", - "listSelectAll": "Επιλογή όλων", - "listSelectFirst": "Επιλογή πρώτου", - "listSelectLast": "Επιλογή τελευταίου", "listInverseSelection": "Αντιστροφή επιλογής", "listDeleteSelection": "Διαγραφή επιλογής", + "deleteSelectionEverywhere": "Διαγραφή επιλογής (παντού)", "rippleDeleteSelection": "Διαγραφή επιλογής με μετατόπιση (ripple)", - "settings": "Ρυθμίσεις", "assigned": "Ανατεθειμένες", "unassigned": "Μη ανατεθειμένες", "pressedKeyX": "Πατημένο πλήκτρο: {0}", @@ -3443,6 +3813,7 @@ "detectKey": "Ανίχνευση πλήκτρου", "control": "Control", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Shift", "controlMac": "⌃", @@ -3453,11 +3824,14 @@ "resetShortcutsDetail": "Θέλετε να επαναφέρετε όλες τις συντομεύσεις στις προεπιλεγμένες τιμές;", "togglePlayPause": "Εναλλαγή αναπαραγωγής/παύσης", "toggleLockTimeCodes": "Εναλλαγή κλειδώματος χρονικών κωδίκων", + "toggleTimeCodeMode": "Εναλλαγή λειτουργίας χρονικού κώδικα (χρόνος/καρέ/αριθμοί καρέ)", + "toggleScreenPrivacy": "Εναλλαγή ιδιωτικότητας οθόνης (απόκρυψη ονομάτων αρχείων, έπειτα και κειμένων)", + "screenPrivacyFileNamesHidden": "Ιδιωτικότητα οθόνης: κρυμμένα ονόματα αρχείων", + "screenPrivacyFileNamesAndTextsHidden": "Ιδιωτικότητα οθόνης: κρυμμένα ονόματα αρχείων και κείμενα", + "screenPrivacyOff": "Ιδιωτικότητα οθόνης: ανενεργή", "duplicateSelectedLines": "Δημιουργία διπλότυπων επιλεγμένων γραμμών", "sourceView": "Προβολή πηγής", - "showAlignmentPicker": "Στοίχιση", "addOrEditBookmark": "Προσθήκη ή επεξεργασία σελιδοδείκτη", - "listBookmarks": "Λίστα σελιδοδεικτών", "toggleBookmark": "Εναλλαγή σελιδοδείκτη (επιλεγμένες γραμμές, χωρίς κείμενο)", "toggleForcedSelectedLines": "Εναλλαγή εξαναγκασμού (επιλεγμένες γραμμές)", "goToNextBookmark": "Μετάβαση στον επόμενο σελιδοδείκτη", @@ -3468,12 +3842,12 @@ "waveformSetStartAndSetEndOfPreviousMinusGap": "Ορισμός αρχής και ορισμός τέλους προηγούμενου μείον κενό", "waveformSetEndAndStartOfNextAfterGap": "Ορισμός τέλους και αρχής επόμενου συν κενό", "waveformSetEndAndStartOfNextAfterGapAndGoToNext": "Ορισμός τέλους και αρχής επόμενου συν κενό και μετάβαση στο επόμενο", - "fetchFirstWordFromNextSubtitle": "Λήψη πρώτης λέξης από τον επόμενο υπότιτλο", "moveLastWordToNextSubtitle": "Μετακίνηση τελευταίας λέξης στον επόμενο υπότιτλο", "moveLastWordFromFirstLineDownCurrentSubtitle": "Μετακίνηση τελευταίας λέξης πρώτης γραμμής κάτω (τρέχων υπότιτλος)", "moveFirstWordFromNextLineUpCurrentSubtitle": "Μετακίνηση πρώτης λέξης επόμενης γραμμής πάνω (τρέχων υπότιτλος)", "moveTextFromCursorToNextAndGoToNext": "Μετακίνηση κειμένου μετά τον δρομέα στον επόμενο υπότιτλο και μετάβαση στο επόμενο", "moveTextFromCursorToNextAndGoToNextAndPlay": "Μετακίνηση κειμένου μετά τον δρομέα στον επόμενο υπότιτλο, μετάβαση και αναπαραγωγή", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "Μετακίνηση κειμένου μετά τη θέση του δρομέα στον επόμενο υπότιτλο, μετάβαση στον επόμενο, αναπαραγωγή του και παύση στο τέλος του", "breakAtFirstSpaceFromCursor": "Αλλαγή γραμμής στο πρώτο κενό από τη θέση του δρομέα", "breakAtFirstSpaceFromCursorAndGoToNext": "Αλλαγή γραμμής στο πρώτο κενό από τη θέση του δρομέα και μετάβαση στο επόμενο", "toggleFocusGridAndWaveform": "Εναλλαγή εστίασης μεταξύ πλέγματος υπότιτλων και κυματομορφής/φασματογραφήματος", @@ -3485,7 +3859,6 @@ "videoGoToPreviousTimeCode": "Μετάβαση στον προηγούμενο χρονικό κώδικα", "videoGoToNextTimeCode": "Μετάβαση στον επόμενο χρονικό κώδικα", "goToNextLineAndSetVideoPosition": "Μετάβαση στον επόμενο υπότιτλο και ορισμός θέσης βίντεο", - "textBoxDeleteSelectionNoClipboard": "Πλαίσιο κειμένου: Διαγραφή επιλογής (χωρίς πρόχειρο)", "textBoxDeleteForward": "Πλαίσιο κειμένου: Διαγραφή επιλογής ή επόμενου χαρακτήρα (διαγραφή προς τα εμπρός)", "textBoxCut": "Πλαίσιο κειμένου: Αποκοπή", "textBoxCut2": "Πλαίσιο κειμένου: Αποκοπή (εναλλακτικά)", @@ -3504,6 +3877,7 @@ "listViewColumnTextUp": "Στήλη, κείμενο πάνω", "listViewColumnTextDown": "Στήλη, κείμενο κάτω", "autoTranslateSelectedLines": "Αυτόματη μετάφραση επιλεγμένων γραμμών...", + "autoTranslateSelectedLinesNoPrompt": "Αυτόματη μετάφραση επιλεγμένων γραμμών (χωρίς ερώτηση, χρήση τελευταίας μηχανής/γλωσσών)", "setAssaResolution": "Ορισμός ανάλυσης ASSA (PlayResX/PlayResY)", "setShortcutForX": "Ορισμός συντόμευσης για \"{0}\"", "commandFileNewKeepVideo": "Νέο (διατήρηση βίντεο)", @@ -3511,29 +3885,22 @@ "fileCloseOriginal": "Κλείσιμο αρχικού", "fileCloseTranslation": "Κλείσιμο μετάφρασης", "restoreAutoBackup": "Επαναφορά αυτόματου αντιγράφου ασφαλείας", - "openContainingFolder": "Άνοιγμα φακέλου περιεχομένου", "importTimeCodes": "Εισαγωγή χρονικών κωδίκων", "importSubtitleWithManuallyChosenEncoding": "Εισαγωγή υπότιτλου με χειροκίνητα επιλεγμένη κωδικοποίηση", "exportBluRaySup": "Εξαγωγή Blu-ray SUP", "exportCustomTextFormat": "Εξαγωγή προσαρμοσμένης μορφής κειμένου", "exportPlainText": "Εξαγωγή απλού κειμένου", - "showHistory": "Εμφάνιση ιστορικού", "toggleRightToLeft": "Εναλλαγή δεξιά-προς-αριστερά", "modifySelection": "Τροποποίηση επιλογής", "adjustDurations": "Προσαρμογή διαρκειών", "applyDurationLimits": "Εφαρμογή ορίων διάρκειας", "batchConvert": "Μαζική μετατροπή", - "bridgeGaps": "Γεφύρωση κενών", "applyMinGap": "Εφαρμογή ελάχιστου κενού", - "fixCommonErrors": "Διόρθωση συνηθισμένων σφαλμάτων", "makeEmptyTranslationFromCurrentSubtitle": "Δημιουργία κενής μετάφρασης από τον τρέχοντα υπότιτλο", - "mergeLinesWithSameText": "Συγχώνευση γραμμών με ίδιο κείμενο", - "mergeLinesWithSameTimeCodes": "Συγχώνευση γραμμών με ίδιους χρονικούς κώδικες", "splitBreakLongLines": "Διαίρεση/εξισορρόπηση μεγάλων γραμμών", "mergeShortLines": "Συγχώνευση σύντομων γραμμών", "mergeContinuationLines": "Συγχώνευση γραμμών συνέχειας", "snapAllTimesToFrames": "Προσκόλληση όλων των χρόνων σε καρέ", - "removeTextForHearingImpaired": "Αφαίρεση κειμένου για άτομα με προβλήματα ακοής", "joinSubtitles": "Ένωση υπότιτλων", "splitSubtitle": "Διαίρεση υπότιτλου", "spellCheck": "Ορθογραφικός έλεγχος", @@ -3555,7 +3922,6 @@ "adjustAllTimes": "Προσαρμογή όλων των χρόνων", "visualSync": "Οπτικός συγχρονισμός", "translateViaCopyPaste": "Μετάφραση μέσω αντιγραφής-επικόλλησης", - "shortcuts": "Συντομεύσεις", "wordLists": "Λίστες λέξεων", "chooseUiLanguage": "Επιλογή γλώσσας διεπαφής", "chooseRuleProfile": "Επιλογή προφίλ κανόνων", @@ -3566,6 +3932,7 @@ "textBoxItalic": "Πλαίσιο κειμένου πλάγια", "textBoxBold": "Έντονα στο πλαίσιο κειμένου", "textBoxUnderline": "Υπογράμμιση στο πλαίσιο κειμένου", + "textBoxBox": "Πλαίσιο κειμένου, πλαίσιο (EBU STL)", "resetWaveformZoomAndSpeed": "Επαναφορά εστίασης κυματομορφής και ταχύτητας αναπαραγωγής", "togglePlaybackSpeed": "Εναλλαγή ταχύτητας αναπαραγωγής", "playbackSpeedSlower": "Πιο αργή ταχύτητα αναπαραγωγής", @@ -3577,22 +3944,28 @@ "seekSilenceForward": "Αναζήτηση σιωπής εμπρός", "waveformGuessStart": "Εκτίμηση χρόνου αρχής από την κυματομορφή", "waveformGuessEnd": "Εκτίμηση χρόνου τέλους από την κυματομορφή", + "waveformGuessStartAndEnd": "Εκτίμηση χρόνου έναρξης και λήξης από την κυματομορφή", "setVideoPositionCurrentSubtitleStart": "Ορισμός θέσης βίντεο στην αρχή της τρέχουσας γραμμής", "goToSubtitlePositionAndPause": "Μετάβαση στη θέση υπότιτλου και παύση", "setVideoPositionCurrentSubtitleEnd": "Ορισμός θέσης βίντεο στο τέλος της τρέχουσας γραμμής", "toggleAudioTracks": "Εναλλαγή κομματιών ήχου", - "listErrors": "Λίστα σφαλμάτων", "goToNextError": "Μετάβαση στο επόμενο σφάλμα", "goToPreviousError": "Μετάβαση στο προηγούμενο σφάλμα", "addNameToNameList": "Προσθήκη ονόματος στη λίστα ονομάτων", "findDoubleWords": "Εύρεση διπλών λέξεων", "findDoubleLines": "Εύρεση διπλών γραμμών", "colorX": "Χρώμα {0}", - "removeColor": "Αφαίρεση χρώματος", "surroundWith": "Περικύκλωση με...", "surroundWithXY": "Περικύκλωση με {0}/{1}", - "repeatLine": "Επανάληψη γραμμής", "surroundWithNumberX": "Περιτύλιξη με #{0}", + "surroundWithBehavior": "Συμπεριφορά", + "surroundWithBehaviorToggle": "Εναλλαγή (προσθήκη ή αφαίρεση αν υπάρχει)", + "surroundWithBehaviorAdd": "Προσθήκη (κάθε φορά)", + "surroundWithBehaviorRemove": "Αφαίρεση (όλων)", + "surroundWithBehaviorRemoveOnce": "Αφαίρεση (ενός κάθε φορά)", + "surroundWithWorksOn": "Εφαρμόζεται σε", + "surroundWithScopeSelectionOrText": "Επιλογή, αλλιώς ολόκληρο το κείμενο", + "surroundWithScopeEachLine": "Κάθε γραμμή", "searchVia": "Αναζήτηση μέσω", "searchViaX": "Αναζήτηση μέσω {0}", "searchViaNumberX": "Αναζήτηση μέσω #{0}", @@ -3620,6 +3993,11 @@ "copySubtitlePathToClipboard": "Αντιγραφή διαδρομής υπότιτλου στο πρόχειρο", "copySubtitleOriginalPathToClipboard": "Αντιγραφή διαδρομής αρχικού υπότιτλου στο πρόχειρο", "focusTextBox": "Εστίαση στο πλαίσιο κειμένου", + "focusSubtitleListView": "Εστίαση στην προβολή λίστας υπότιτλων", + "focusWaveform": "Εστίαση στην κυματομορφή", + "focusOriginalTextBox": "Εστίαση στο πλαίσιο αρχικού κειμένου", + "textBoxGoToStart": "Πλαίσιο κειμένου, μετάβαση στην αρχή", + "textBoxGoToEnd": "Πλαίσιο κειμένου, μετάβαση στο τέλος", "sortByNumber": "Ταξινόμηση κατά αριθμό", "sortByStartTime": "Ταξινόμηση κατά χρόνο \"Εμφάνισης\"", "sortByEndTime": "Ταξινόμηση κατά χρόνο \"Απόκρυψης\"", @@ -3644,7 +4022,6 @@ "assaStyles": "Στυλ ASSA", "assaProperties": "Ιδιότητες ASSA", "assaAttachments": "Συνημμένα ASSA", - "assaVideoColorPicker": "ASSA Επιλογέας χρώματος βίντεο", "recalculateDurationSelectedLines": "Επανυπολογισμός διάρκειας (επιλεγμένες γραμμές)", "setDurationMaxCpsSelectedLines": "Ορισμός διάρκειας στο μέγιστο CPS (επιλεγμένες γραμμές)", "toggleWaveformAndSpectrogramHeight": "Εναλλαγή διαιρεμένου ύψους κυματομορφής/φασματογραφήματος", @@ -3658,9 +4035,9 @@ "selectionToSentenceCase": "Πλαίσιο κειμένου: Επιλογή σε Μορφή πρότασης", "selectionToggleCasing": "Πλαίσιο κειμένου: Εναλλαγή πεζών/κεφαλαίων (ΚΕΦΑΛΑΙΑ -> πεζά -> Τίτλος)", "googleIt": "Αναζήτηση στο Google (επιλεγμένο κείμενο)", - "setActorXY": "Ορισμός ηθοποιού {0}: {1}", + "setActorX": "Ορισμός ηθοποιού: {0}", "setNewActor": "Ορισμός νέου ηθοποιού...", - "setActorSlotXTitle": "Θέση ηθοποιού {0}", + "setStyleX": "Ορισμός στυλ: {0}", "toggleDialogDashes": "Εναλλαγή παυλών διαλόγου", "mergeWithLineBeforeAsDialog": "Συγχώνευση με την προηγούμενη γραμμή ως διάλογο", "mergeWithLineAfterAsDialog": "Συγχώνευση με την επόμενη γραμμή ως διάλογο", @@ -3671,13 +4048,27 @@ "moveStartOneFrameBackKeepGapPrev": "Μετακίνηση αρχής ένα καρέ πίσω (διατήρηση κενού με το προηγούμενο αν είναι κοντά)", "moveStartOneFrameForwardKeepGapPrev": "Μετακίνηση αρχής ένα καρέ εμπρός (διατήρηση κενού με το προηγούμενο αν είναι κοντά)", "moveEndOneFrameBackKeepGapNext": "Μετακίνηση τέλους ένα καρέ πίσω (διατήρηση κενού με το επόμενο αν είναι κοντά)", - "moveEndOneFrameForwardKeepGapNext": "Μετακίνηση τέλους ένα καρέ εμπρός (διατήρηση κενού με το επόμενο αν είναι κοντά)" + "moveEndOneFrameForwardKeepGapNext": "Μετακίνηση τέλους ένα καρέ εμπρός (διατήρηση κενού με το επόμενο αν είναι κοντά)", + "moveStartXMsBack": "Μετακίνηση έναρξης X ms πίσω (το X ορίζεται στις Ρυθμίσεις, επίσης στον Οπτικό συγχρονισμό)", + "moveStartXMsForward": "Μετακίνηση έναρξης X ms εμπρός (το X ορίζεται στις Ρυθμίσεις, επίσης στον Οπτικό συγχρονισμό)", + "moveEndXMsBack": "Μετακίνηση λήξης X ms πίσω (το X ορίζεται στις Ρυθμίσεις, επίσης στον Οπτικό συγχρονισμό)", + "moveEndXMsForward": "Μετακίνηση λήξης X ms εμπρός (το X ορίζεται στις Ρυθμίσεις, επίσης στον Οπτικό συγχρονισμό)", + "moveSelectedLinesXMsBack": "Μετακίνηση επιλεγμένων γραμμών X ms πίσω (το X ορίζεται στις Ρυθμίσεις)", + "moveSelectedLinesXMsForward": "Μετακίνηση επιλεγμένων γραμμών X ms εμπρός (το X ορίζεται στις Ρυθμίσεις)", + "moveSelectedLinesAndForwardXMsBack": "Μετακίνηση επιλεγμένων γραμμών και όλων των επόμενων X ms πίσω (το X ορίζεται στις Ρυθμίσεις)", + "moveSelectedLinesAndForwardXMsForward": "Μετακίνηση επιλεγμένων γραμμών και όλων των επόμενων X ms εμπρός (το X ορίζεται στις Ρυθμίσεις)", + "moveAllLinesXMsBack": "Μετακίνηση όλων των γραμμών X ms πίσω (το X ορίζεται στις Ρυθμίσεις)", + "moveAllLinesXMsForward": "Μετακίνηση όλων των γραμμών X ms εμπρός (το X ορίζεται στις Ρυθμίσεις)", + "moveSelectedLinesCustomMsBack": "Μετακίνηση επιλεγμένων γραμμών, προσαρμοσμένα χιλιοστά δευτερολέπτου ({0:#,###,##0}) πίσω, {1}", + "moveSelectedLinesCustomMsForward": "Μετακίνηση επιλεγμένων γραμμών, προσαρμοσμένα χιλιοστά δευτερολέπτου ({0:#,###,##0}) εμπρός, {1}", + "moveSelectedLinesAndForwardCustomMsBack": "Μετακίνηση επιλεγμένων γραμμών και όλων των επόμενων, προσαρμοσμένα χιλιοστά δευτερολέπτου ({0:#,###,##0}) πίσω, {1}", + "moveSelectedLinesAndForwardCustomMsForward": "Μετακίνηση επιλεγμένων γραμμών και όλων των επόμενων, προσαρμοσμένα χιλιοστά δευτερολέπτου ({0:#,###,##0}) εμπρός, {1}", + "moveAllLinesCustomMsBack": "Μετακίνηση όλων των γραμμών, προσαρμοσμένα χιλιοστά δευτερολέπτου ({0:#,###,##0}) πίσω, {1}", + "moveAllLinesCustomMsForward": "Μετακίνηση όλων των γραμμών, προσαρμοσμένα χιλιοστά δευτερολέπτου ({0:#,###,##0}) εμπρός, {1}" }, "wordLists": { "title": "Λίστες λέξεων", "addName": "Προσθήκη ονόματος", - "addWord": "Προσθήκη λέξης", - "addPair": "Προσθήκη ζεύγους", "nameAndIgnoreList": "Λίστα ονομάτων/παράβλεψης", "userWords": "Λίστα λέξεων χρήστη", "ocrFixList": "Λίστα διορθώσεων OCR", @@ -3694,7 +4085,6 @@ "noPluginsInstalled": "Δεν υπάρχουν εγκατεστημένα πρόσθετα", "getPluginsOnline": "Λήψη προσθέτων online...", "getPluginsTitle": "Λήψη προσθέτων", - "enabled": "Ενεργό", "disabled": "Ανενεργό", "notSupportedOnThisOs": "Δεν υποστηρίζεται σε αυτό το λειτουργικό σύστημα", "removePluginXConfirm": "Αφαίρεση προσθέτου '{0}'; Αυτό διαγράφει τον φάκελο του προσθέτου:{1}", @@ -3711,17 +4101,19 @@ "downloadingXPercent": "Λήψη {0}%...", "pluginXInstalled": "Το '{0}' εγκαταστάθηκε.", "couldNotInstallPluginX": "Αδυναμία εγκατάστασης του '{0}': {1}", - "notInstalled": "Μη εγκατεστημένο", "install": "Εγκατάσταση", "reinstall": "Επανεγκατάσταση", - "update": "Ενημέρωση", "installedX": "Εγκατεστημένο ({0})", "updateAvailableXToY": "Διαθέσιμη ενημέρωση ({0} → {1})", "applyPluginToWhichLinesX": "Εφαρμογή του '{0}' σε:", "applyToSelectedLinesX": "Επιλεγμένες γραμμές ({0})", "applyToAllLinesX": "Όλες οι γραμμές ({0})", "updateAllXAvailable": "Ενημέρωση όλων ({0})", - "updatingXOfY": "Ενημέρωση {0}/{1}..." + "updatingXOfY": "Ενημέρωση {0}/{1}...", + "doNotAskAgain": "Να μην ερωτηθώ ξανά (αλλαγή στη Διαχείριση προσθέτων)", + "applyPluginsTo": "Εφαρμογή προσθέτων σε", + "askEachTime": "Ερώτηση κάθε φορά", + "allLines": "Όλες οι γραμμές" }, "help": { "aboutSubtitleEdit": "Σχετικά με το Subtitle Edit", @@ -3765,6 +4157,8 @@ "nOcrDatabase": "Βάση δεδομένων nOCR", "drawMode": "Λειτουργία σχεδίασης:", "addNewCharcter": "Προσθήκη νέου χαρακτήρα", + "addNOcrCharacterTitle": "Προσθήκη χαρακτήρα nOCR για τη γραμμή {0}, χαρακτήρας {1} από {2} με χρήση της βάσης δεδομένων \"{3}\"", + "addBinaryOcrCharacterTitle": "Προσθήκη χαρακτήρα binary OCR για τη γραμμή {0}, χαρακτήρας {1} από {2} με χρήση της βάσης δεδομένων \"{3}\"", "lineIndexX": "Γραμμή {0}", "inspectNOcrAdditions": "Επιθεώρηση νέων προσθηκών nOCR", "ocrSelectedLines": "OCR επιλεγμένων γραμμών", @@ -3813,6 +4207,8 @@ "binaryImageCompareInspectImageMatches": "\"Δυαδική σύγκριση εικόνας\" - Επιθεώρηση αντιστοιχίσεων εικόνας", "saveBlankTextTitle": "Αποθήκευση κενού κειμένου;", "saveBlankTextPrompt": "Αποθήκευση κενού κειμένου για την εικόνα;", + "drawnLinesDoNotMatchTitle": "Οι γραμμές δεν ταιριάζουν με την εικόνα", + "drawnLinesDoNotMatchPrompt": "Ορισμένες από τις σχεδιασμένες γραμμές δεν ταιριάζουν με την εικόνα (οι πράσινες γραμμές πρέπει να βρίσκονται πάνω στον χαρακτήρα, οι κόκκινες εκτός του), οπότε αυτός ο χαρακτήρας δεν θα αναγνωρίζεται.\n\nΑποθήκευση παρ' όλα αυτά;", "yesAndNeverAskAgain": "Ναι και να μην ερωτηθώ ξανά", "importTextFromSubtitleDotDotDot": "Εισαγωγή κειμένου από υπότιτλο...", "importTextFromSubtitleOverwritePrompt": "Ορισμένες γραμμές έχουν ήδη κείμενο OCR. Αντικατάσταση υπάρχοντος κειμένου;", @@ -3838,7 +4234,6 @@ "vobSubColorsTitle": "Χρώματα VobSub/DVD", "vobSubColorsHeader": "Προσαρμογή των τεσσάρων χρωμάτων VobSub", "vobSubColorsDescription": "Οι υπότιτλοι VobSub/DVD χρησιμοποιούν τέσσερα χρώματα ευρετηρίου: φόντο, μοτίβο, έμφαση 1 και έμφαση 2. Επιλέξτε κάθε χρώμα παρακάτω για να παρακάμψετε την ενσωματωμένη παλέτα - χρήσιμο όταν τα αρχικά χρώματα δίνουν κακή αντίθεση OCR.", - "vobSubColorBackground": "Φόντο", "vobSubColorPattern": "Μοτίβο", "vobSubColorEmphasis1": "Έμφαση 1", "vobSubColorEmphasis2": "Έμφαση 2", @@ -3872,9 +4267,26 @@ "crispEmbedSettingsTitle": "Ρυθμίσεις CrispEmbed", "crispEmbedDescription": "Τοπική μηχανή OCR με πολλαπλά υποστηρικτικά μοντέλα - κάντε λήψη της μηχανής και των μοντέλων εδώ.", "trainNOcrDatabase": "Εκπαίδευση βάσης δεδομένων nOCR...", + "optimizeNOcrDatabase": "Βελτιστοποίηση βάσης δεδομένων nOCR...", + "optimizeNOcrDatabaseQuestionXY": "Αφαίρεση των γραμμών που δεν ξεχωρίζουν χαρακτήρες από παρόμοιους χαρακτήρες στη βάση δεδομένων nOCR \"{0}\";\n\nΑυτό κάνει τη βάση δεδομένων μικρότερη και το OCR ταχύτερο, συνήθως με λιγότερα σφάλματα. Διαρκεί έως ένα λεπτό.\n\nΈνα αντίγραφο ασφαλείας αποθηκεύεται ως \"{1}\".", + "optimizingNOcrDatabaseXY": "Βελτιστοποίηση βάσης δεδομένων nOCR... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "Η βάση δεδομένων nOCR \"{0}\" βελτιστοποιήθηκε: {1:#,##0} -> {2:#,##0} γραμμές.", "startTraining": "Έναρξη εκπαίδευσης", "abortTraining": "Ματαίωση εκπαίδευσης", "trainingOptions": "Επιλογές εκπαίδευσης", + "trainNOcrSubtitle": "Αποδίδει χαρακτήρες με εγκατεστημένες γραμματοσειρές και διδάσκει στο nOCR τα σχήματά τους. Επιλέξτε τις γραμματοσειρές που χρησιμοποιούν οι υπότιτλοί σας.", + "xFontsSelected": "{0:#,##0} επιλεγμένες", + "subtitleFonts": "Γραμματοσειρές υπότιτλων", + "emptyDatabase": "Κενή βάση δεδομένων", + "startFromDatabase": "Έναρξη από", + "startFromDatabaseHint": "Προσθήκη των εκπαιδευμένων χαρακτήρων σε αντίγραφο μιας υπάρχουσας βάσης δεδομένων (συνιστάται) ή έναρξη από κενή", + "fontSizes": "Μεγέθη γραμματοσειράς", + "fontSizesHint": "Μεγέθη γραμματοσειράς σε pixel για απόδοση, χωρισμένα με κόμμα, π.χ. \"30, 40\"", + "numberOfLineSegmentsHint": "Γραμμές που ελέγχονται ανά χαρακτήρα - περισσότερες είναι αυστηρότερες αλλά πιο αργές", + "enterDatabaseName": "Εισαγάγετε όνομα για τη βάση δεδομένων", + "trainingFontXSizeYCharacterZ": "Εκπαίδευση \"{0}\" στα {1} px: {2}", + "xLearned": "{0:#,##0} μαθεύτηκαν", + "xSkipped": "{0:#,##0} παραλείφθηκαν", "charactersToTrain": "Χαρακτήρες προς εκπαίδευση", "letterCombinationsToTrain": "Συνδυασμοί γραμμάτων που μπορεί να χωριστούν σε μία εικόνα", "importCharactersFromSubtitleFile": "Εισαγωγή χαρακτήρων από αρχείο υπότιτλων...", @@ -3901,6 +4313,8 @@ "drawZoomOut": "Σμίκρυνση (Ctrl+-)", "drawResetView": "Επαναφορά προβολής (Ctrl+0)", "drawToggleGrid": "Εναλλαγή πλέγματος (Ctrl+G)", + "drawTogglePreview": "Εναλλαγή προεπισκόπησης (F9)", + "drawPreviewFailed": "Η προεπισκόπηση απέτυχε - απαιτείται ffmpeg με libass (φίλτρο subtitles)", "drawCopyToClipboard": "Αντιγραφή στο πρόχειρο (Ctrl+C)", "drawShapes": "Σχήματα", "drawSelectedPoint": "Επιλεγμένο σημείο", @@ -3908,16 +4322,86 @@ "drawSelectedLayer": "Επιλεγμένο επίπεδο", "drawToolX": "Εργαλείο: {0}", "drawHelpText": "Κλικ για προσθήκη σημείων • Enter/F8 για κλείσιμο σχήματος • Shift+Σύρσιμο για μετατόπιση • Ctrl+Τροχός για εστίαση", + "drawMoveToLayer": "Μετακίνηση σε επίπεδο", + "drawFlipHorizontal": "Οριζόντια αναστροφή", + "drawFlipVertical": "Κατακόρυφη αναστροφή", + "drawHideShape": "Απόκρυψη σχήματος", + "drawShowShape": "Εμφάνιση σχήματος", + "drawHideLayer": "Απόκρυψη επιπέδου", + "drawShowLayer": "Εμφάνιση επιπέδου", + "drawDeleteLayer": "Διαγραφή επιπέδου", + "drawDeletePoint": "Διαγραφή σημείου", + "drawCancelDrawing": "Ακύρωση σχεδίασης", + "drawLayerX": "Επίπεδο {0}", + "drawImportSvg": "Εισαγωγή εικόνας SVG...", + "drawRotateClockwise": "Περιστροφή 90° δεξιόστροφα", + "drawConvertToCurve": "Μετατροπή τμήματος σε καμπύλη", + "drawBackground": "Φόντο", + "drawPosition": "Θέση", + "drawZoom": "Ζουμ", + "drawShapeTool": "Εργαλείο σχήματος", + "drawColorPickerTool": "Επιλογή χρώματος από σχήμα ή από το φόντο", + "drawShapeLibrary": "Βιβλιοθήκη σχημάτων", + "drawShapeLibraryHint": "Σύρετε στον καμβά για να τοποθετήσετε ένα σχήμα ή κάντε κλικ για το προεπιλεγμένο μέγεθος. Το Shift διατηρεί τις αναλογίες του.", + "drawAddToLibrary": "Προσθήκη στη βιβλιοθήκη σχημάτων...", + "drawRemoveFromLibrary": "Αφαίρεση από τη βιβλιοθήκη σχημάτων", + "drawShapeName": "Όνομα σχήματος", + "drawCategorySpeechBubbles": "Συννεφάκια ομιλίας", + "drawCategoryArrows": "Βέλη", + "drawCategoryBasicShapes": "Βασικά σχήματα", + "drawCategorySymbols": "Σύμβολα", + "drawCategoryMyShapes": "Τα σχήματά μου", + "drawShapeSpeechBubble": "Συννεφάκι ομιλίας", + "drawShapeSpeechBubbleRight": "Συννεφάκι ομιλίας, ουρά δεξιά", + "drawShapeSpeechBubbleUp": "Συννεφάκι ομιλίας, ουρά πάνω", + "drawShapeOvalBubble": "Οβάλ συννεφάκι ομιλίας", + "drawShapeBoxBubble": "Ορθογώνιο συννεφάκι ομιλίας", + "drawShapeThoughtBubble": "Συννεφάκι σκέψης", + "drawShapeShoutBubble": "Συννεφάκι φωνής", + "drawShapeCaptionBox": "Πλαίσιο λεζάντας", + "drawShapeArrow": "Βέλος", + "drawShapeDoubleArrow": "Διπλό βέλος", + "drawShapeChevron": "Σιρίτι (chevron)", + "drawShapeCurvedArrow": "Καμπύλο βέλος", + "drawShapeRoundedRectangle": "Στρογγυλεμένο ορθογώνιο", + "drawShapeTriangle": "Τρίγωνο", + "drawShapeDiamond": "Ρόμβος", + "drawShapePentagon": "Πεντάγωνο", + "drawShapeHexagon": "Εξάγωνο", + "drawShapeOctagon": "Οκτάγωνο", + "drawShapeStar": "Αστέρι", + "drawShapeRing": "Δακτύλιος", + "drawShapePlus": "Συν", + "drawShapeBanner": "Λάβαρο", + "drawShapeHeart": "Καρδιά", + "drawShapeCheck": "Σημάδι ελέγχου", + "drawShapeMusicNote": "Μουσική νότα", + "drawShapeMusicNotes": "Μουσικές νότες", + "drawShapeLightning": "Κεραυνός", + "drawShapeCloud": "Σύννεφο", + "drawShapeMoon": "Φεγγάρι", + "drawShapeBadge": "Σήμα", + "drawSize": "Μέγεθος", + "drawLayer": "Επίπεδο", + "drawBackgroundVideoFrame": "Καρέ βίντεο (τρέχουσα θέση)", + "drawBackgroundVideoFrameAt": "Καρέ βίντεο στο...", + "drawBackgroundImage": "Αρχείο εικόνας...", + "drawBackgroundNone": "Χωρίς φόντο", + "drawBackgroundStretch": "Τέντωμα εικόνας στον καμβά", + "drawBackgroundOpacity": "Αδιαφάνεια φόντου", + "drawBackgroundVideoFrameFailed": "Δεν ήταν δυνατή η λήψη καρέ βίντεο στο {0}.", + "drawImages": "Εικόνες", + "drawConvertToLine": "Μετατροπή τμήματος σε ευθεία", + "drawConvertShapeToCurves": "Μετατροπή όλων των ευθειών σε καμπύλες", + "drawConvertShapeToLines": "Μετατροπή όλων των καμπυλών σε ευθείες", + "drawRotateCounterClockwise": "Περιστροφή 90° αριστερόστροφα", + "drawSvgImages": "Εικόνες SVG", + "drawSvgNoShapes": "Δεν βρέθηκαν γεμισμένα σχήματα ή πινελιές στο αρχείο SVG.", "progressBarTitle": "Γραμμή προόδου ASSA", "progressBarSettings": "Γραμμή προόδου", - "progressBarPosition": "Θέση", - "progressBarBottom": "Κάτω", - "progressBarTop": "Πάνω", "mouseOverColor": "Χρώμα κατά την αιώρηση ποντικιού", "clickedColor": "Χρώμα μετά από κλικ", "progressBarForeColor": "Χρώμα προσκηνίου", - "progressBarBackColor": "Χρώμα φόντου", - "progressBarStyle": "Στυλ", "progressBarSquareCorners": "Τετράγωνες γωνίες", "progressBarRoundedCorners": "Στρογγυλεμένες γωνίες", "progressBarChapters": "Κεφάλαια", @@ -3926,8 +4410,6 @@ "progressBarXAdjustment": "Προσαρμογή X", "progressBarYAdjustment": "Προσαρμογή Y", "progressBarTextAlignment": "Στοίχιση κειμένου", - "progressBarTakePosFromVideo": "Λήψη θέσης από το βίντεο", - "progressBarPreview": "Προεπισκόπηση", "fontCollectorTitle": "Συλλέκτης γραμματοσειρών", "fontCollectorUsedIn": "Χρησιμοποιείται σε", "fontCollectorFontFiles": "Αρχείο(α) γραμματοσειράς", @@ -3974,9 +4456,7 @@ "resolutionResamplerVideoDiffers": "Η ανάλυση του υπότιτλου ({0}x{1}) διαφέρει από την ανάλυση του βίντεο ({2}x{3}).\nΝα αλλάξει ο υπότιτλος ώστε να ταιριάζει με το βίντεο;", "resolutionResamplerAskOnVideoOpen": "Ερώτηση όταν ανοίγει βίντεο με διαφορετική ανάλυση", "backgroundBoxGenerator": "Δημιουργία πλαισίου φόντου", - "backgroundBoxPadding": "Εσωτερικό περιθώριο", "backgroundBoxFillWidth": "Πλήρωση πλάτους", - "backgroundBoxBoxColor": "Χρώμα πλαισίου", "backgroundBoxRadius": "Ακτίνα", "backgroundBoxCircle": "Κύκλος", "backgroundBoxSpikes": "Ακίδες", @@ -3988,12 +4468,9 @@ "backgroundBoxTornPaperDouble": "Σχισμένο χαρτί (πάνω και κάτω)", "backgroundBoxStarburst": "Έκρηξη αστεριού", "backgroundBoxScroll": "Πάπυρος / Περγαμηνή", - "stylesTitle": "Στυλ Advanced Sub Station Alpha", "stylesInFile": "Στυλ στο αρχείο", "stylesSaved": "Αποθηκευμένα στυλ", - "category": "Κατηγορία", "allCategories": "[Όλες]", - "defaultCategory": "Προεπιλογή", "newCategory": "Νέα κατηγορία...", "renameCategory": "Μετονομασία κατηγορίας...", "deleteCategory": "Διαγραφή κατηγορίας", @@ -4016,13 +4493,26 @@ "graphics": "Γραφικά", "copyToStorageStyles": "Αντιγραφή στα αποθηκευμένα στυλ", "copyToFileStyles": "Αντιγραφή στα στυλ αρχείου", + "styleXAlreadyExistsInStorage": "Υπάρχει ήδη στυλ με όνομα \"{0}\" στην αποθήκευση.\n\nΑντικατάσταση ή διατήρηση και των δύο (το αντίγραφο παίρνει νέο όνομα);", + "styleXAlreadyExistsInFile": "Υπάρχει ήδη στυλ με όνομα \"{0}\" στο αρχείο.\n\nΑντικατάσταση ή διατήρηση και των δύο (το αντίγραφο παίρνει νέο όνομα);", + "styleNameCannotBeEmpty": "Το όνομα στυλ δεν μπορεί να είναι κενό.", + "styleNameXIsUsedMoreThanOnce": "Το όνομα στυλ \"{0}\" χρησιμοποιείται από περισσότερα από ένα στυλ στο αρχείο.", + "overwrite": "Αντικατάσταση", + "keepBoth": "Διατήρηση και των δύο", + "doThisForAllConflictingStyles": "Να γίνει αυτό για όλα τα αντικρουόμενα στυλ", "setStyleAsDefault": "Ορισμός στυλ ως προεπιλογή", "takeUsagesFromDotDotDot": "Λήψη χρήσεων από...", "replaceStyleWithDotDotDot": "Αντικατάσταση στυλ με...", "noAttachmentsFound": "Δεν βρέθηκαν συνημμένα στο επιλεγμένο αρχείο ASSA.", "deleteStyleQuestion": "Διαγραφή στυλ;", "deleteStylesQuestion": "Διαγραφή στυλ;", + "deleteXStylesQuestion": "Θέλετε να διαγράψετε {0} στυλ;", + "deleteXStylesFromStorageQuestion": "Θέλετε να διαγράψετε {0} στυλ από την αποθήκευση;", + "deleteStyleXFromStorageQuestion": "Θέλετε να διαγράψετε το στυλ \"{0}\" από την αποθήκευση;", + "deleteStyleXFromFileQuestion": "Θέλετε να διαγράψετε το στυλ \"{0}\" από το τρέχον αρχείο;", "openStyleImportFile": "Άνοιγμα αρχείου υπότιτλων για εισαγωγή στυλ", + "styleImportFiles": "Αρχεία στυλ (.ass, .sty, κατηγορίες Subtitle Edit 4 .template)", + "ssaStyleImportFiles": "Αρχεία στυλ (.ssa, .ass, .sty)", "primary": "Πρωτεύον", "secondary": "Δευτερεύον", "applyOverrideTags": "Εφαρμογή ετικετών παράκαμψης", @@ -4037,7 +4527,6 @@ "spaceIncrease": "Αύξηση διαστήματος", "popIn": "Αναδυόμενη είσοδος", "spinIn": "Περιστρεφόμενη είσοδος", - "playCurrent": "Αναπαραγωγή τρέχοντος", "setPosition": "Ορισμός θέσης", "rotation": "Περιστροφή", "scaleX": "Κλίμακα X", @@ -4081,10 +4570,8 @@ "advancedEffectOldMovieDescription": "Προσομοιώνει έναν παλιό προβολέα φιλμ 35mm με θόρυβο, βινιέτα και γρατζουνιές", "advancedEffectNeonBurst": "Έκρηξη νέον", "advancedEffectNeonBurstDescription": "Υψηλής ενέργειας λεζάντες στυλ 'Shorts' με λάμψη νέον και κινούμενη είσοδο με κλιμάκωση", - "advancedEffectSettings": "Ρυθμίσεις", "advancedEffectSnowFlakeCount": "Πλήθος νιφάδων", "advancedEffectStarfieldStarCount": "Πλήθος αστεριών", - "advancedEffectStarfieldSpeed": "Ταχύτητα", "advancedEffectGlitch": "Glitch", "advancedEffectGlitchDescription": "Ψηφιακό glitch με χρωματική εκτροπή, λευκές αναλαμπές και επικαλύψεις παραμόρφωσης", "advancedEffectBounceIn": "Αναπήδηση εισόδου", @@ -4093,8 +4580,6 @@ "advancedEffectFirefliesDescription": "Ζεστές φωτεινές κιτρινο-κεχριμπαρένιες κουκκίδες που κινούνται οργανικά στην οθόνη με παλλόμενη λάμψη", "advancedEffectMatrix": "Matrix", "advancedEffectMatrixDescription": "Πέφτουσες πράσινες στήλες χαρακτήρων με το κείμενο του υπότιτλου να χτίζεται γράμμα-γράμμα από τη βροχή", - "advancedEffectAudioBars": "Μπάρες ήχου (κυματομορφή)", - "advancedEffectAudioBarsDescription": "Κινούμενες μπάρες ισοσταθμιστή που οδηγούνται από την κυματομορφή ήχου — οι μπάρες κυλούν αριστερά ως κυματομορφή και πάλλονται με τον ήχο", "advancedEffectAudioPulse": "Παλμός κειμένου με ήχο", "advancedEffectAudioPulseDescription": "Το κείμενο του υπότιτλου λάμπει και πάλλεται με την ένταση του ήχου — τα ήσυχα τμήματα εμφανίζουν κανονικό κείμενο, οι δυνατές κορυφές προσθέτουν χρωματιστό φωτοστέφανο και ελαφριά μεγέθυνση", "advancedEffectConfetti": "Έκρηξη κομφετί", @@ -4108,7 +4593,6 @@ "advancedEffectFancyKaraokeGlow": "Λάμψη ενεργής λέξης", "advancedEffectFancyKaraokeActiveColor": "Ενεργό χρώμα", "advancedEffectFancyKaraokeInactiveColor": "Ανενεργό χρώμα", - "advancedEffectFancyKaraokeInactiveOpacity": "Αδιαφάνεια ανενεργών (0-255)", "advancedEffectWordSpacingPixels": "Διάστημα (pixel)", "advancedEffectSlowZoomOut": "Αργή σμίκρυνση", "advancedEffectSlowZoomOutDescription": "Το κείμενο ξεκινά ελαφρώς μεγαλύτερο και συρρικνώνεται απαλά στο κανονικό μέγεθος κατά τη διάρκεια του υπότιτλου", @@ -4124,7 +4608,6 @@ "advancedEffectSlideInLeftDescription": "Το κείμενο ολισθαίνει από εκτός οθόνης αριστερά, παραμένει και μετά εξέρχεται πίσω προς τα αριστερά", "advancedEffectSlideInRight": "Ολίσθηση από δεξιά", "advancedEffectSlideInRightDescription": "Το κείμενο ολισθαίνει από εκτός οθόνης δεξιά, παραμένει και μετά εξέρχεται πίσω προς τα δεξιά", - "advancedEffectFadeInOut": "Ξεθώριασμα εισόδου/εξόδου", "advancedEffectFadeInOutDescription": "Το κείμενο εμφανίζεται βαθμιαία στην αρχή και εξαφανίζεται βαθμιαία στο τέλος κάθε υπότιτλου", "advancedEffectWordFlip3D": "Αναστροφή λέξης 3D", "advancedEffectWordFlip3DDescription": "Κάθε λέξη διπλώνει με αναστροφή 3D και ελαστικό τίναγμα καθώς εκφωνείται — σύγχρονο στυλ λεζάντας 'Shorts'", diff --git a/src/ui/Assets/Languages/Hebrew.json b/src/ui/Assets/Languages/Hebrew.json index 34c267138a3..04c4cffdddc 100644 --- a/src/ui/Assets/Languages/Hebrew.json +++ b/src/ui/Assets/Languages/Hebrew.json @@ -1,9 +1,50 @@ { "title": "עברית", - "version": "v5.2.0-rc7", + "version": "v5.3.0", "translatedBy": "Antigravity & cdtauman", "cultureName": "he-IL", "general": { + "prompt": "הנחיה", + "temperature": "טמפרטורה", + "preset": "פרופיל הגדרות", + "output": "פלט", + "outputFormat": "פורמט פלט", + "other": "אחר", + "timeCodeFormat": "פורמט קוד זמן", + "topBottomMargin": "שוליים עליונים/תחתונים", + "theme": "ערכת נושא", + "brightness": "בהירות", + "chooseColor": "בחר צבע", + "lineX": "שורה {0}", + "playLine": "נגן שורה", + "maxLineLength": "אורך שורה מקסימלי", + "maxCharsPerSec": "קצב תווים מקסימלי לשנייה", + "maxNumberOfLines": "מספר שורות מקסימלי", + "subtitles": "כתוביות", + "shotChanges": "מעברי שוט", + "chapters": "פרקים", + "audio": "שמע", + "interjections": "מילות קריאה", + "blankLines": "שורות ריקות", + "editWholeText": "ערוך את כל הטקסט", + "noTextInClipboard": "אין טקסט בלוח הגזירים", + "noSubtitlesFoundTitle": "לא נמצאו כתוביות", + "replacedXOccurrences": "הוחלפו {0} מופעים", + "invalidRegularExpressionX": "ביטוי רגולרי לא חוקי: {0}", + "discardChangesTitle": "לבטל את השינויים?", + "downloadingXDotDotDot": "מוריד את {0}...", + "importTimeCodesDotDotDot": "ייבוא קודי זמן...", + "original": "מקור", + "nextChange": "השינוי הבא", + "previousChange": "השינוי הקודם", + "changeXOfY": "שינוי {0} מתוך {1}", + "tooLong": "ארוך מדי", + "tooShort": "קצר מדי", + "overlapping": "חופף", + "detail": "פרטים", + "fixOcrErrors": "תקן שגיאות OCR", + "runningOcrXY": "מריץ OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp דורש הורדה של מנוע llama-server. להוריד כעת?", "assistedMove": "העברה מונחית", "assistedMoveChooseMove": "לחץ על אפשרות או הקש על מספרה כדי להעביר מילים", "assistedMoveDotDotDot": "העברה מונחית...", @@ -71,6 +112,24 @@ "abort": "הפסק", "actor": "שחקן", "actors": "שחקנים", + "setActorDotDotDot": "קבע שחקן...", + "actorPickerTitle": "קבע שחקן", + "actorPickerFilterHint": "הקלד כדי לסנן, או הקלד שם של שחקן חדש", + "actorPickerKeysHint": "הקש על מספר או על Enter כדי לקבוע את השחקן. Alt+למעלה/למטה משנה את הסדר, Delete מסיר את השחקן.", + "actorPickerNewActorX": "שחקן חדש \"{0}\"", + "actorPickerLinesSelectedX": "שורות שנבחרו: {0}", + "setStyleDotDotDot": "קבע סגנון...", + "stylePickerTitle": "קבע סגנון", + "stylePickerFilterHint": "הקלד כדי לסנן, או הקלד שם של סגנון חדש", + "stylePickerKeysHint": "הקש על מספר (1-9, 0) כדי לקבוע את הסגנון לכל השורות שנבחרו.", + "stylePickerNewStyleX": "סגנון חדש \"{0}\"", + "stylePickerNewStyleInfo": "הקש Enter כדי להוסיף סגנון זה עם הגדרות ברירת מחדל ולקבוע אותו לשורות שנבחרו. השתמש ב-\"נהל סגנונות...\" כדי לשנות מאוחר יותר את הגופן, הצבעים והמיקום שלו.", + "stylePickerCurrentStyleX": "סגנון נוכחי: {0}", + "stylePickerLinesUsingStyleX": "שורות המשתמשות בסגנון זה: {0}", + "stylePickerMarginsXYZ": "שמאל {0}, ימין {1}, אנכי {2}", + "stylePickerSetStyle": "_קבע סגנון", + "stylePickerManageStyles": "נהל סגנונות...", + "stylePickerManageStylesHint": "סגור חלון זה ופתח את מנהל הסגנונות כדי לערוך גופנים, צבעים, מיקום ועוד", "add": "הוסף", "addDotDotDot": "הוסף...", "addToNamesListCaseSensitive": "הוסף לרשימת השמות (רגיש לאותיות רישיות)", @@ -79,7 +138,6 @@ "adjustAlpha": "התאמת אלפא (שקיפות)", "adjustDisplayDuration": "התאמת משך תצוגה", "adjustment": "התאמה", - "advanced": "מתקדם", "advancedSettings": "הגדרות מתקדמות", "after": "אחרי", "alignment": "יישור", @@ -115,7 +173,6 @@ "batchMode": "מצב אצווה", "bdnXml": "BDN/xml", "before": "לפני", - "beforeX": "לפני \"{0}\"", "beginning": "התחלה", "bluRaySup": "Blu-ray (sup)", "bold": "מודגש", @@ -127,7 +184,6 @@ "bookmarkEdit": "ערוך סימנייה", "bookmarkEditForSelectedLinesX": "ערוך סימנייה עבור {0} שורות שנבחרו", "bookmarksList": "רשימת סימניות", - "borderColor": "צבע גבול", "borderStyle": "סגנון גבול", "bottomCenter": "למטה-מרכז", "bottomLeft": "למטה-שמאל", @@ -150,7 +206,6 @@ "changeCasing": "שנה סוג אותיות", "changeFormatting": "שנה עיצוב", "changeFrameRate": "שנה קצב פריימים", - "changeLanguageFilter": "שנה מסנן שפה...", "changeOnce": "שנה פעם אחת", "changeSpeed": "שנה מהירות", "character": "תו", @@ -172,7 +227,6 @@ "conversionCancelledByUser": "ההמרה בוטלה על ידי המשתמש", "convert": "המר", "converted": "הומר", - "convertingDotDotDot": "ממיר...", "convertingXofYDotDoDot": "ממיר {0:#,###,##0}/{1:#,###,##0}...", "copy": "העתק", "copyImageToClipboard": "העתק תמונה ללוח גזירים", @@ -180,7 +234,6 @@ "couldNotSaveFileXErrorY": "לא ניתן לשמור את הקובץ \"{0}\". שגיאה: {1}", "count": "ספירה", "cps": "תווים לשנייה", - "currentSubtitle": "כתובית נוכחית", "currentVideoPosition": "מיקום וידאו נוכחי", "cut": "גזור", "dark": "כהה", @@ -225,7 +278,6 @@ "expand": "הרחב", "export": "ייצוא", "exportDotDotDot": "ייצוא...", - "exportToX": "ייצוא אל {0}", "extendAfter": "הארך/קצר לשורה שאחרי", "extendBefore": "הארך/קצר לשורה שלפני", "extendSelectedLinesToNextShotChangeOrNextSubtitle": "הארך שורות שנבחרו לשינוי השוט הבא (או לכתובית הבאה)", @@ -241,7 +293,6 @@ "fileExtension": "סיומת קובץ", "fileName": "שם קובץ", "fileNameX": "שם קובץ: {0}", - "fileNameXAndSize": "שם קובץ: {0} ({1})", "fileSaved": "הקובץ נשמר", "fileSavedToX": "הקובץ נשמר ב-{0}", "fileXAlreadyExists": "הקובץ \"{0}\" כבר קיים.", @@ -251,8 +302,6 @@ "find": "חפש", "findNext": "חפש את הבא", "findTextX": "חפש טקסט - {0}", - "fiveHundredMilliseconds": "500 מילישניות", - "fiveSeconds": "חמש שניות", "fix": "תיקון", "fixCommonErrors": "תיקון שגיאות נפוצות", "fixRightToLeft": "תיקון מימין לשמאל", @@ -276,14 +325,12 @@ "foundXInLineYZ": "נמצא \"{0}\" בשורה {1}, מיקום {2}", "foundXMatches": "נמצאו {0} התאמות", "frameRate": "קצב פריימים", - "frameRateX": "קצב פריימים: {0:0.0###}", "frames": "פריימים", "from": "מ-", "fromCurrentVideoPosition": "ממיקום הוידאו הנוכחי", "fullScreen": "מסך מלא", "gap": "מרווח", "general": "כללי", - "generalText": "כללי", "generate": "צור", "generateImportShotChanges": "ייצור/ייבוא מעברי שוט", "generating": "יוצר...", @@ -300,12 +347,8 @@ "help": "עזרה", "hex": "Hex", "hide": "הסתר", - "hidePreview": "הסתר תצוגה מקדימה", "history": "היסטוריה", "horizontal": "אופקי", - "hourMinutesSecondsDecimalSeparatorMilliseconds": "שעה:דקה:שנייה{0}מילישנייה", - "hourMinutesSecondsFrames": "שעה:דקה:שנייה:פריימים", - "ip": "IP", "id": "מזהה", "image": "תמונה", "imageSaved": "התמונה נשמרה", @@ -364,6 +407,7 @@ "mergeSelectedLinesDialog": "מזג שורות שנבחרו כדו-שיח", "mergeWithLineAfterAndAutoBreak": "מזג עם השורה שאחרי ופצל אוטומטית", "mergeWithLineAfterKeepBreaks": "מזג עם השורה שאחרי (שמור על מעברי שורה)", + "mergeWithLineAfterAndUnbreak": "מזג עם השורה הבאה ובטל מעברי שורה", "mergeWithLineBeforeAndAutoBreak": "מזג עם השורה שלפני ופצל אוטומטית", "mergeWithLineBeforeKeepBreaks": "מזג עם השורה שלפני (שמור על מעברי שורה)", "middleCenter": "מרכז-מרכז", @@ -378,11 +422,11 @@ "moveAllShotChangeOneFrameForward": "הזז את כל שינויי השוט פריים אחד קדימה", "multiMode": "מצב מרובה", "moveDown": "הזז למטה", + "increase": "הגדל", + "decrease": "הקטן", "moveUp": "הזז למעלה", "multipleReplace": "החלפה מרובה", - "mute": "השתק", "name": "שם", - "negative": "שלילי", "new": "חדש", "newDotDotDot": "חדש...", "newProfile": "פרופיל חדש", @@ -410,20 +454,15 @@ "offsetY": "היסט Y", "ok": "אי_שור", "oneFile": "קובץ אחד", - "oneHundredMilliseconds": "100 מילישניות", - "oneSecond": "שנייה אחת", "oneSecondBack": "שנייה אחת אחורה", "oneSecondForward": "שנייה אחת קדימה", - "onlineVideoFeatureNotAvailable": "התכונה אינה זמינה עבור וידאו מקוון", "openContainingFolder": "פתח תיקייה מכילה", "openDictionaryFolder": "פתח תיקיית מילונים", "openFile": "פתח קובץ", "openImageBasedSubtitle": "פתח כתוביות מבוססות תמונה", "openImageFile": "פתח קובץ תמונה", - "openOriginalSubtitleFile": "פתח קובץ כתוביות מקורי...", "openOriginalSubtitleFileTitle": "פתח קובץ כתוביות מקורי", "openOutputFolder": "פתח תיקיית פלט", - "openSubtitle": "פתח כתוביות...", "openSubtitleFileTitle": "פתח קובץ כתוביות", "openSubtitles": "פתח כתוביות...", "openVideoFile": "פתח קובץ וידאו...", @@ -436,11 +475,6 @@ "outlineWidth": "רוחב קו מתאר", "outputFolder": "תיקיית פלט", "outputProperties": "מאפייני פלט", - "overlap": "חפיפה", - "overlapNextX": "חפיפה עם הבא ({0:#;##0.###})", - "overlapPreviousLineX": "חפיפה עם שורה קודמת ({0:#;##0.###})", - "overlapStartAndEnd": "חפיפת התחלה וסיום", - "overlapX": "חפיפה ({0:#;##0.###})", "overwriteExistingFiles": "דרוס קבצים קיימים", "overwriteFilesInFolderX": "דרוס קבצים בתיקייה: \"{0}\"", "overwriteQuestion": "לדרוס?", @@ -453,6 +487,7 @@ "percent": "אחוז", "pickLayer": "בחר שכבה", "pickOllamaModel": "בחר מודל Ollama", + "pickModel": "בחר מודל", "llamaCppUseRemoteServer": "השתמש בשרת חיצוני (URL)", "pickOutputFolder": "בחר תיקיית פלט", "pickResolutionFromCurrentVideo": "בחר רזולוציה מהוידאו הנוכחי", @@ -496,7 +531,6 @@ "refresh": "רענן", "region": "אזור", "regularExpression": "ביטוי רגולרי", - "regularExpressionIsNotValid": "הביטוי הרגולרי אינו חוקי!", "relativeToCurrentVideoPosition": "יחסית למיקום הוידאו הנוכחי", "remove": "הסר", "removeAlignment": "הסר יישור", @@ -521,7 +555,7 @@ "reset": "איפוס", "resizePanels": "שנה גודל חלוניות", "resolution": "רזולוציה", - "resolutionX": "רזולוציה: {0}", + "retry": "נסה שוב", "reverseRightToLeftStartEnd": "הפוך התחלה/סיום מימין לשמאל", "right": "ימין", "rightToLeft": "מימין לשמאל", @@ -559,8 +593,6 @@ "selectedlinesX": "שורות שנבחרו: {0}", "sensitivity": "רגישות", "separator": "מפריד", - "sessionKey": "מפתח הפעלה", - "sessionKeyGenerate": "צור מפתח חדש", "setEnd": "קבע סיום", "setEndAndGoToNext": "קבע סיום ועבור לבא", "setEndAddNewAndGoToNew": "קבע סיום, הוסף כתובית חדשה ועבור אליה", @@ -579,8 +611,9 @@ "shadowColor": "צבע צל", "shadowWidth": "רוחב צל", "shiftLineBy": "הסט שורה ב-", + "shotIn": "כניסת שוט", + "shotOut": "יציאת שוט", "shortcut": "קיצור דרך", - "shortcutX": "קיצור דרך: {0}", "shortcuts": "קיצורי דרך", "show": "הצג", "showActorColumn": "הצג עמודת \"שחקן\"", @@ -591,17 +624,19 @@ "showStartColumn": "הצג עמודת \"התחלה\"", "showHideColumn": "הצג עמודת \"הסתר\"", "showHistory": "הצג היסטוריה", + "clearHistory": "נקה היסטוריה", + "removeFromHistory": "הסר מההיסטוריה", "showLayerColumn": "הצג עמודת \"שכבה\"", "showPreview": "הצג תצוגה מקדימה", "showShotChangesList": "הצג רשימת מעברי שוט", + "showShotInColumn": "הצג עמודת \"כניסת שוט\"", + "showShotOutColumn": "הצג עמודת \"יציאת שוט\"", "showStyleColumn": "הצג עמודת \"סגנון\"", "showTeletext": "הצג עמודת טלטקסט בתצוגת רשימה", "showTimeCodes": "הצג קודי זמן", "showWpmColumn": "הצג עמודת \"מילים לדקה\"", "showPixelWidthColumn": "הצג עמודת \"רוחב פיקסלים\"", "shrink": "כווץ", - "singleBox": "תיבה בודדת", - "singleLineLengths": "אורך שורה בודדת:", "singleMode": "מצב יחיד", "textTotalLength": "טקסט - אורך כולל", "textSingleLineMaxLength": "טקסט - אורך מקסימלי לשורה בודדת", @@ -648,16 +683,16 @@ "strikeout": "קו חוצה", "style": "סגנון", "styleExaggeration": "הגזמת סגנון", - "styleLanguage": "סגנון / שפה", "styles": "סגנונות", "subtitleFile": "קובץ כתוביות", + "subtitleFileChangedOutsideX": "הקובץ \"{0}\" שונה מחוץ ל-Subtitle Edit.\n\nלטעון אותו מחדש ולאבד את השינויים שלך?", "subtitleFileName": "שם קובץ כתוביות", "subtitleFileSaved": "קובץ הכתוביות נשמר", "subtitleFileSavedToX": "קובץ הכתוביות נשמר ב-{0}", "subtitleFiles": "קובצי כתוביות", "subtitleFormats": "תבניות כתוביות", "subtitleLoadedX": "נטענה כתובית: {0}", - "subtitleXOfY": "כתובית {0} מתוך {1}", + "subtitleReloadedChangedOutsideX": "הכתובית נטענה מחדש (שונתה מחוץ ל-Subtitle Edit): {0}", "suffix": "סיומת", "suggestions": "הצעות", "sync": "סנכרון", @@ -669,7 +704,6 @@ "teletextColor": "צבע טלטקסט", "teletextLine": "שורת טלטקסט", "tenHours": "10 שעות", - "tenMilliseconds": "10 מילישניות", "text": "טקסט", "textColor": "צבע טקסט", "textFiles": "קובצי טקסט", @@ -695,9 +729,6 @@ "topLeft": "למעלה-שמאל", "topRight": "למעלה-ימין", "totalAdjustmentX": "התאמה כוללת: {0}", - "totalFramesX": "סה\"כ פריימים: {0:#;##0.##}", - "totalLengthX": "אורך כולל: {0}", - "totalLengthXSplitLine": "אורך כולל: {0} (פצל שורה!)", "translate": "תרגם", "translatePercentX": "מתרגם: {0}%", "translateRow": "תרגם שורה", @@ -706,6 +737,7 @@ "type": "סוג", "unbreak": "בטל מעברי שורה", "unbreakLines": "בטל מעברי שורות", + "undelete": "בטל מחיקה", "underline": "קו תחתון", "undo": "בטל", "unknown": "לא ידוע", @@ -725,13 +757,11 @@ "usages": "שימושים", "use": "השתמש", "useAlways": "השתמש תמיד", - "useLargerFontForThisWindow": "השתמש בגופן גדול יותר עבור חלון זה", "useOnce": "השתמש פעם אחת", "useOutputFolder": "השתמש בתיקיית פלט", "useSourceFolder": "השתמש בתיקיית מקור", "useSourceResolution": "השתמש ברזולוציית מקור", "userName": "שם משתמש", - "userNameAlreadyInUse": "שם המשתמש כבר נמצא בשימוש", "vertical": "אנכי", "video100MsBack": "וידאו, 100 מילישניות אחורה", "video100MsForward": "וידאו, 100 מילישניות קדימה", @@ -745,14 +775,25 @@ "videoCustom3ForwardX": "וידאו, מילישניות מותאמות אישית ({0:#,###,##0}) קדימה, 3", "videoCustom4BackX": "וידאו, מילישניות מותאמות אישית ({0:#,###,##0}) אחורה, 4", "videoCustom4ForwardX": "וידאו, מילישניות מותאמות אישית ({0:#,###,##0}) קדימה, 4", - "videoEncodingX": "קידוד וידאו: {0}", + "videoCustom1BackAndPauseX": "וידאו, אלפיות שנייה מותאמות אישית ({0:#,###,##0}) אחורה והשהה, 1", + "videoCustom1ForwardAndPauseX": "וידאו, אלפיות שנייה מותאמות אישית ({0:#,###,##0}) קדימה והשהה, 1", + "videoCustom2BackAndPauseX": "וידאו, אלפיות שנייה מותאמות אישית ({0:#,###,##0}) אחורה והשהה, 2", + "videoCustom2ForwardAndPauseX": "וידאו, אלפיות שנייה מותאמות אישית ({0:#,###,##0}) קדימה והשהה, 2", + "videoCustom3BackAndPauseX": "וידאו, אלפיות שנייה מותאמות אישית ({0:#,###,##0}) אחורה והשהה, 3", + "videoCustom3ForwardAndPauseX": "וידאו, אלפיות שנייה מותאמות אישית ({0:#,###,##0}) קדימה והשהה, 3", + "videoCustom4BackAndPauseX": "וידאו, אלפיות שנייה מותאמות אישית ({0:#,###,##0}) אחורה והשהה, 4", + "videoCustom4ForwardAndPauseX": "וידאו, אלפיות שנייה מותאמות אישית ({0:#,###,##0}) קדימה והשהה, 4", "videoExtension": "סיומת קובץ וידאו", "videoFile": "קובץ וידאו", "videoFileGenerated": "קובץ הוידאו נוצר", "videoFileGeneratedX": "קובץ וידאו נוצר: \"{0}\"", + "videoFilesGenerated": "קובצי וידאו נוצרו", + "xVideosGenerated": "{0} סרטוני וידאו נוצרו", + "xOfYVideosGenerated": "{0} מתוך {1} סרטוני וידאו נוצרו", + "savedInX": "נשמר ב-{0}", + "savedInXFolders": "נשמר ב-{0} תיקיות", "videoFiles": "קובצי וידאו", "videoAndAudioFiles": "קובצי וידאו ושמע", - "videoInformation": "מידע על הוידאו", "videoOffset": "היסט וידאו", "videoOneFrameBack": "וידאו, פריים אחד אחורה", "videoOneFrameForward": "וידאו, פריים אחד קדימה", @@ -763,7 +804,6 @@ "videoPlayer": "נגן וידאו", "videoPosition": "מיקום וידאו", "videoResolution": "רזולוציית וידאו", - "viewX": "הצג את {0}", "visible": "גלוי", "voice": "קול", "volume": "עוצמת שמע", @@ -772,9 +812,7 @@ "waveformCenterOnVideoPosition": "מרכז את גל השמע במיקום הוידאו", "waveformPasteFromClipboard": "הדבק מלוח הגזירים", "waveformSpectrogram": "גל שמע/ספקטרוגרמה", - "webServiceUrl": "כתובת URL של שירות רשת", "width": "רוחב", - "windowPositionAndSize": "מיקום וגודל החלון", "wordsPerMin": "מילים לדקה", "pixelWidth": "רוחב פיקסלים", "wpm": "מילים לדקה", @@ -784,8 +822,6 @@ "xNotFound": "\"{0}\" לא נמצא", "xRequiresAnApiKey": "{0} דורש מפתח API", "xRequiresAValidUrl": "{0} דורש כתובת URL חוקית (למשל \"http://...\" או \"https://...\")", - "xSeconds": "{0:0.0##} שניות", - "xSubtitles": "{0:#,###,##0} כתוביות", "yes": "כן", "zeroBytes": "0 בתים", "copyToClipboard": "העתק ללוח הגזירים", @@ -807,10 +843,8 @@ "playbackSpeed": "מהירות ניגון", "hoursMinutesSecondsMilliseconds": "HH:MM:SS.FFF", "imageFiles": "קובצי תמונה", - "openAiCompatibleStt": "STT תואם OpenAI", "openAiCompatibleSttEndpoint": "כתובת קצה של שירות STT", "openAiCompatibleSttApiKey": "מפתח API", - "openAiCompatibleSttModel": "מודל", "openAiCompatibleSttExtraHeaders": "כותרות נוספות", "openAiCompatibleSttTimeout": "זמן קצוב בשניות (Timeout)", "openAiCompatibleSttLanguage": "רמז שפה", @@ -820,16 +854,17 @@ "dashScopeSttRegion": "אזור", "dashScopeSttEnableWords": "חותמות זמן ברמת המילה", "dashScopeSttRegionKeyHint": "שים לב: מפתחות API של Alibaba Cloud Model Studio הם תלויי אזור - ודא שהאזור שנבחר תואם לאזור שבו נוצר מפתח ה-API (סין לעומת בינלאומי).", + "googleCloudSttProjectId": "מזהה פרויקט (רק עבור Application Default Credentials)", + "googleCloudSttBucketName": "דלי אחסון (ריק = אוטומטי)", + "googleCloudSttDynamicBatching": "אצווה דינמית (זול פי 5 בערך, ללא הבטחת זמן תגובה)", "onlineSttApiKeyMissing": "נדרש מפתח API. נא להזין את מפתח ה-API ולנסות שוב.", "openAiCompatibleSttAutoTranscribeOnAudioSelection": "תמלל אוטומטית בחירת גל שמע חדשה באמצעות דיבור לטקסט", "configurationRequired": "נדרשת תצורה", "transcriptionError": "שגיאת תמלול", "transcriptionComplete": "התמלול הושלם", - "transcribingWithOpenAi": "מתמלל באמצעות שירות OpenAI...", "processingResponse": "מעבד תגובה...", "unauthorizedApiKey": "לא מורשה: מפתח API לא חוקי או הרשאות לא מספיקות.", "requestTimeout": "פג זמן הבקשה: השרת לקח זמן רב מדי כדי להגיב.", - "noSegmentsReturned": "לא הוחזרו מקטעים משירות התמלול.", "openAiCompatibleSttUrlMissing": "כתובת קצה של שירות STT תואם OpenAI נדרשת. נא להזין כתובת URL ולנסות שוב.", "openAiCompatibleSttUrlNotResponding": "כתובת הקצה של שירות ה-STT התואם ל-OpenAI לא הגיבה:\n{0}\n\nנא לוודא שכתובת ה-URL נכונה ושהשרת פעיל.", "transcriptionFailed": "התמלול נכשל", @@ -898,10 +933,10 @@ "multipleReplace": "החלפה _מרובה...", "fillSelectedLinesWithClipboard": "מלא שורות שנבחרו בטקסט מלוח הגזירים", "goToLineNumber": "_עבור לשורה מספר...", + "commandPalette": "_לוח פקודות...", "rightToLeftMode": "מצב מ_ימין לשמאל", "modifySelectionDotDotDot": "שנה ב_חירה...", "tools": "_כלים", - "toolsSelectedLines": "כ_לים (שורות שנבחרו)", "adjustDurations": "_התאם משך...", "applyDurationLimits": "החל מגבלות מ_שך...", "batchConvert": "המרת א_צווה...", @@ -990,6 +1025,7 @@ "toggleSelectSubtitleWhilePlayingCurrentlyOn": "הפעלת/השבתת בחירת כתובית בזמן ניגון (כרגע: פעיל)", "toggleSelectSubtitleWhilePlayingCurrentlyOff": "הפעלת/השבתת בחירת כתובית בזמן ניגון (כרגע: כבוי)", "beautifyTimeCodes": "ייפוי קודי זמן...", + "improveTimeCodes": "שפר קודי זמן (יישור כפוי)...", "evenlyDistributeLines": "פזר שורות באופן שווה (לפי תווים לשנייה)", "mergeContinuationLines": "מזג שורות המשך...", "snapAllTimesToFrames": "הצמד את כל הזמנים לפריימים", @@ -1044,6 +1080,9 @@ "selectCurrentLineWhilePlayingHint": "בחר כתובית נוכחית בזמן ניגון {0}", "videoPosition": "מיקום וידאו {0}", "videoPositionTextBox": "תיבת טקסט של מיקום הוידאו {0}", + "toolbarLineBreakX": "מעבר שורה {0} (שאר סרגל הכלים ממשיך בשורה חדשה)", + "initialText": "הטקסט ההתחלתי של השורה שנבחרה", + "initialTextHint": "הטקסט של השורה שנבחרה כפי שהיה בעת בחירת השורה", "hideWaveformToolbar": "הסתר סרגל כלים {0}", "resetZoomAndSpeed": "אפס זום ומהירות ניגון {0}", "removeBlankLines": "הסר שורות ריקות {0}", @@ -1057,6 +1096,15 @@ "textPlayHint": "נגן את הכתובית הנוכחית ועצור בסופה {0}", "textPauseHint": "השהה ניגון {0}", "textNextHint": "נגן את הכתובית הבאה ועצור בסופה {0}", + "moveSelectedLines": "הזז שורות שנבחרו (לחצני אחורה/קדימה)", + "moveSelectedLinesAndFollowing": "הזז שורות שנבחרו וכל השורות שאחריהן (לחצני אחורה/קדימה)", + "moveAllLines": "הזז את כל השורות (לחצני אחורה/קדימה)", + "moveSelectedLinesBackHint": "הזז שורות שנבחרו {0} ms אחורה {1}", + "moveSelectedLinesForwardHint": "הזז שורות שנבחרו {0} ms קדימה {1}", + "moveSelectedLinesAndFollowingBackHint": "הזז שורות שנבחרו וכל השורות שאחריהן {0} ms אחורה {1}", + "moveSelectedLinesAndFollowingForwardHint": "הזז שורות שנבחרו וכל השורות שאחריהן {0} ms קדימה {1}", + "moveAllLinesBackHint": "הזז את כל השורות {0} ms אחורה {1}", + "moveAllLinesForwardHint": "הזז את כל השורות {0} ms קדימה {1}", "guessStartNoLineSelected": "ניחוש התחלה: לא נבחרה שורה", "guessStartTimeCodesLocked": "ניחוש התחלה: קודי הזמן נעולים", "guessStartNoWaveform": "ניחוש התחלה: אין גל שמע", @@ -1078,6 +1126,9 @@ "charactersPerSecond": "תווים לשנייה: {0}", "chooseColumn": "בחר עמודה", "columnPaste": "הדבקת עמודה", + "commandPaletteTitle": "לוח פקודות", + "commandPaletteSearchPlaceholder": "הקלד כדי לחפש פקודות...", + "commandPaletteNoCommandsFound": "אין פקודות תואמות", "createdEmptyTranslation": "נוצר תרגום ריק מהכתובית הנוכחית", "deleteText": "מחק טקסט", "deleteTextAndShiftCellsUp": "מחק טקסט והסט תאים למעלה", @@ -1115,18 +1166,20 @@ "noTextInClipboard": "אין טקסט בלוח הגזירים", "oneLineCopiedFromOriginal": "שורה אחת הועתקה מהכתוביות המקוריות", "oneLineCopiedToOriginal": "שורה אחת הועתקה לכתובית המקורית", + "onlineOnlyVideo": "וידאו מקוון בלבד", + "onlineOnlyVideoXSizeYDownloadAndOpen": "קובץ הווידאו \"{0}\" ({1}) מאוחסן באופן מקוון בלבד, למשל ב-Dropbox או ב-iCloud Drive, ויש להוריד אותו לפני שניתן לפתוח אותו.\n\nלהוריד ולפתוח אותו כעת?", "oneLineMerged": "שורה אחת מוזגה", "oneLineSwitched": "שורה אחת הוחלפה", "overwriteExistingCells": "דרוס תאים קיימים", "overwriteOrShiftCellsDown": "דרוס/הסט תאים למטה", "parsingMatroskaFile": "מנתח קובץ Matroska...", + "readingDvdSubtitles": "קורא כתוביות DVD...", "pasteFromClipboardDotDotDot": "הדבק מלוח הגזירים...", "redoPerformed": "בוצעה פעולה חוזרת (Redo)", "redoPerformedXActionLeft": "בוצעה פעולה חוזרת (פעולות שנותרו: {0})", "removedUnicodeControlCharactersX": "הוסרו תווי בקרה של יוניקוד מ-{0} שורות", "removedXBlankLines": "הוסרו {0} שורות ריקות", "replacedXWithYCountZ": "הוחלף \"{0}\" ב-\"{1}\" ({2} מופעים)", - "replacedXWithYInLineZ": "הוחלף \"{0}\" ב-\"{1}\" בשורה {2}", "reversedStartAndEndingsForRightToLeftX": "הופכת התחלה וסיום עבור מימין לשמאל ב-{0} שורות", "ruleProfileIsX": "פרופיל הכללים כעת הוא \"{0}\"", "saveLanguageFile": "שמור קובץ שפה", @@ -1134,7 +1187,6 @@ "shiftTextCellsDown": "הסט תאי טקסט למטה", "singleLineLength": "אורך שורה: ", "speedIsNowX": "המהירות כעת היא \"{0}\"", - "spellCheckResult": "בדיקת האיות הושלמה. \n\n• מילים ששונו: {0}\n• מילים שדולגו: {1}", "subtitleGridFormattingX": "עיצוב טבלה: {0}", "subtitleImportedFromMatroskaFile": "כתובית יובאה מקובץ Matroska", "textDown": "טקסט למטה", @@ -1161,13 +1213,14 @@ "trimmedXLines": "נחתכו {0} שורות כתוביות", "pastedXLinesOverSelectedLines": "{0} שורות הודבקו על השורות שנבחרו", "pastedXOfYLinesOverSelectedLines": "{0} מתוך {1} שורות הודבקו על השורות שנבחרו - השאר לא נכנסו לבחירה", + "insertedXLinesFromClipboard": "הוכנסו {0} שורות מלוח הגזירים", "openOriginalDifferentNumberOfSubtitlesXY": "קובץ הכתוביות המקורי אינו מכיל את אותו מספר כתוביות כמו קובץ הכתוביות הנוכחי.\n\n• כתוביות מקוריות: {0}\n• כתוביות נוכחיות: {1}", - "importXMatchingOriginalLines": "האם לייבא {0} כתוביות מקוריות תואמות?", "originalTextReadOnly": "טקסט מקורי (קריאה בלבד)", "originalTextEditMode": "טקסט מקורי (מצב עריכה)", "originalIsReadOnlyNotSaved": "הכתובית המקורית היא מקור לקריאה בלבד ולא נשמרה", "originalIsEmptyNotSaved": "לכתובית המקורית אין טקסט כלל והיא לא נשמרה", "originalIsReadOnlyReference": "הכתובית המקורית פתוחה כמקור לקריאה בלבד", + "closeTranslationQuestionXY": "לסגור את התרגום \"{0}\"?\n\nהכתובית המקורית \"{1}\" תהפוך לכתובית שאתה עורך. קובץ התרגום עצמו אינו משתנה.", "allowEditOfOriginalSubtitle": "אפשר עריכה של הכתובית המקורית", "showAllOriginalLinesX": "הצג את כל השורות המקוריות (ל-{0} אין התאמה כאן)", "showAllOriginalLinesHint": "השורות ללא התאמה מוצגות כשורות נוספות, כך שניתן לראות מה חסר בתרגום.", @@ -1189,6 +1242,7 @@ "fileExportedInFormatXToY": "הקובץ יוצא בפורמט {0} אל {1}", "fileExportedInFormatXToFileY": "הקובץ יוצא בפורמט \"{0}\" לקובץ \"{1}\"", "fixedXLines": "תוקנו {0} שורות", + "toolXChangedYLines": "{0}: {1} שורות שונו", "transcriptionCompletedWithXLines": "התמלול הושלם עם {0} שורות", "openSubtitleFileX": "לפתוח את קובץ הכתוביות \"{0}\"?", "replacedXOccurrences": "הוחלפו {0} מופעים", @@ -1234,13 +1288,9 @@ "file": { "ebuSaveOptions": { "title": "אפשרויות שמירה של EBU", - "generalSubtitleInformation": "מידע כתוביות כללי", "codePageNumber": "מספר דף קוד", "diskFormatCode": "קוד פורמט דיסק", "displayStandardCode": "קוד תקן תצוגה", - "colorRequiresTeletext": "צבעים דורשים טלטקסט!", - "alignmentRequiresTeletext": "יישור דורש טלטקסט!", - "teletextCharsShouldBe38": "'מספר תווים מקסימלי לשורה' עבור טלטקסט צריך להיות 38!", "characterCodeTable": "טבלת תווים", "languageCode": "קוד שפה", "originalProgramTitle": "שם תוכנית מקורי", @@ -1257,7 +1307,6 @@ "maxNumberOfDisplayableRows": "מקסימום שורות", "diskSequenceNumber": "מספר סידורי של הדיסק", "totalNumberOfDisks": "סה\"כ מספר דיסקים", - "import": "ייבוא...", "textAndTimingInformation": "מידע טקסט ותזמון", "justificationCode": "קוד יישור", "verticalPosition": "מיקום אנכי", @@ -1274,11 +1323,6 @@ "errors": "שגיאות", "errorsX": "שגיאות: {0}", "maxLengthError": "שורה {0} חורגת מהאורך המקסימלי ({1}) ב-{2}: {3}", - "textUnchangedPresentation": "תצוגה ללא שינוי", - "textLeftJustifiedText": "טקסט מיושר לשמאל", - "textCenteredText": "טקסט ממורכז", - "textRightJustifiedText": "טקסט מיושר לימין", - "useBoxForOneNewLine": "סמן 'השתמש בתיבה סביב הטקסט' עבור שורה חדשה אחת בלבד", "maxLengthErrorTeletextColored": "שורה {0}-{1}: 36 (ולא {2}) הוא מספר התווים המקסימלי לטקסט צבעוני בגובה כפול", "maxLengthErrorTeletextWhite": "שורה {0}-{1}: 37 (ולא {2}) הוא מספר התווים המקסימלי לטקסט לבן בגובה כפול", "maxLengthErrorTeletextSingleHeight": "שורה {0}: 38 (ולא {1}) הוא מספר התווים המקסימלי לטקסט לבן בגובה יחיד", @@ -1303,22 +1347,29 @@ "formattingDotDotDot": "עיצוב...", "imageBasedSubtitleForEditDotDotDot": "כתוביות מבוססות תמונה לעריכה...", "imageBasedSubtitleForOcrDotDotDot": "כתוביות מבוססות תמונה ל-OCR...", + "dvdSubtitlesDotDotDot": "כתוביות מ-DVD (IFO/VOB)...", + "titleImportDvd": "ייבוא כתוביות מ-DVD", + "dvdIfoFile": "קובץ IFO", + "dvdVobFiles": "קובצי VOB", + "dvdVideoStandard": "תקן וידאו", + "dvdStartRipping": "התחל חילוץ", + "dvdRippingAborted": "החילוץ בוטל", + "dvdOpenIfoFile": "פתח קובץ DVD IFO", + "dvdAddVobFiles": "הוסף קובצי VOB", + "dvdIfoFiles": "קובצי DVD IFO", + "dvdVobFileType": "קובצי DVD VOB", + "dvdDropHint": "פתח קובץ IFO (VIDEO_TS\\VTS_01_0.IFO) או הוסף קובצי VOB - או גרור אותם לכאן", + "dvdNotAnIfoFileX": "{0} אינו קובץ DVD IFO", + "dvdMenuIfoNoTitleSetsX": "לא נמצאו ערכות כותרים (VTS_xx_0.IFO) לצד {0}", + "dvdEncryptedXOfY": "{0} מתוך {1} מנות הכתוביות עדיין מוצפנות ב-CSS - קובצי VOB אלה הועתקו ללא פענוח, ולכן חלק מתמונות הכתוביות יהיו משובשות.\n\nפענח תחילה את ה-DVD בעזרת כלי לחילוץ DVD לקבלת תוצאה נקייה.\n\nלהמשיך בכל זאת?", "splitTextAt": "פצל טקסט ב-", "blankLines": "שורות ריקות", "oneLineIsOneSubtitle": "שורה אחת היא כתובית אחת", "twoLinesAreOneSubtitle": "שתי שורות הן כתובית אחת", "importFilesDotDotDot": "ייבוא קבצים...", "multipleFiles": "ייבוא מקובצי טקסט מרובים (קובץ אחד הוא כתובית אחת)", - "importOptions": "אפשרויות ייבוא", - "autoSplitText": "פיצול טקסט אוטומטי", - "lineMode": "מצב שורות", "maxLineLength": "אורך שורה מקסימלי", - "maxLinesPerSubtitle": "מקסימום שורות לכתובית", - "minGapBetweenSubtitles": "מרווח מינימלי בין כתוביות", "mergeShortLines": "מזג שורות קצרות", - "removeLinesWithoutLetters": "הסר שורות ללא אותיות", - "splitAtEndCharsSetting": "פצל בתווי סיום", - "takeTimeFromCurrentFile": "קח זמן מהקובץ הנוכחי", "fixed": "קבוע", "numberOfSubtitlesX": "מספר כתוביות: {0}", "numberOfSubtitlesXForcedY": "מספר כתוביות: {0} ({1} כפויות)", @@ -1330,14 +1381,18 @@ "forcedAlignerProgress": "מיישר... חלון {0} מתוך {1}, {2} מתוך {3} שורות", "forcedAlignerSetupTitle": "סנכרן קודי זמן באמצעות יישור כפוי", "forcedAlignerSetupIntro": "יישור כפוי מתאים את טקסט הכתוביות שכבר יש לך אל השמע, ללא תמלול מוקדם. סרטונים ארוכים מיושרים במקטעים, כך שכל אורך מתאפשר.", + "forcedAlignerEndsFromSpeech": "קבע זמני סיום מדיבור מבודד (איטי)", + "forcedAlignerEndsFromSpeechHint": "יישור כפוי מוצא היכן שורה מתחילה, לא היכן היא מסתיימת, ולכן זמני הסיום נקבעים בדרך כלל לפי זמן הקריאה. כאשר אפשרות זו מופעלת, המוזיקה ואפקטי הקול מוסרים תחילה מהשמע וכל שורה מסתיימת היכן שהדיבור שלה משתתק. לוקח בערך כאורך הווידאו עצמו עם GPU - ופי כמה יותר בלעדיו.", + "forcedAlignerIsolatingSpeech": "מבודד דיבור... {0}", + "forcedAlignerIsolatingSpeechFailed": "לא ניתן היה לבודד את הדיבור - זמני הסיום נקבעו במקום זאת לפי זמן הקריאה.", "forcedAlignerModel": "מודל היישור", - "forcedAlignerDownloadEngine": "הורדה / עדכון מנוע..." + "forcedAlignerDownloadEngine": "הורדה / עדכון מנוע...", + "forcedAlignerEstimatedXOfY": "{0} מתוך {1} שורות לא ניתן היה ליישר והן מוקמו לפי זמן הקריאה - קודי הזמן שלהן משוערים בלבד. התסריט כנראה ארוך יותר ממה שנאמר בווידאו." }, "export": { "exportImagesProfiles": "פרופילי ייצוא תמונות", "leftRightMargin": "שוליים שמאל/ימין", "topBottomMargin": "שוליים עליונים/תחתונים", - "titleExportBluRaySup": "ייצוא Blu-ray (sup)", "lineSpacingPercent": "מרווח שורות %", "paddingLeftRight": "מרווח פנימי שמאל/ימין", "paddingTopBottom": "מרווח פנימי למעלה/למטה", @@ -1378,10 +1433,21 @@ "titleExportDCinemaInteropPng": "D-Cinema interop/png", "titleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", "imageBasedSubtitleSaved": "כתוביות מבוססות תמונה נשמרו", - "titleExportBdnXml": "ייצוא BDN/xml", "titleExportWebVttThumbnails": "ייצוא WebVTT (תמונות ממוזערות)", "fullFrameImage": "תמונה בגודל פריים מלא", "fullFrameImageHint": "הפוך כל תמונה לגודל פריים הוידאו, עם הכתובית במקומה", + "stereo3D": "3D", + "stereo3DHint": "עבור וידאו תלת-ממדי: צייר את הכתובית פעם אחת בכל חצי של הפריים, אחד לכל עין", + "halfSideBySide": "חצי זה לצד זה", + "halfTopBottom": "חצי למעלה/למטה", + "depth3D": "עומק", + "depth3DHint": "כמה הכתובית בולטת מחוץ למסך - ערך חיובי מקרב אותה, ערך שלילי מרחיק אותה לאחור", + "plane3D": "3D-Plane", + "plane3DHint": "תן לכל כתובית את העומק ש-Blu-ray תלת-ממדי שומר עבורה, מקובץ 3D-Plane (.ofs) שנוצר על ידי BD3D2MK3D או OFSExtractor. העומק משמש היכן שאין ל-3D-Plane ערך", + "openPlane3DTitle": "פתח קובץ 3D-Plane", + "unableToLoadPlane3DX": "לא ניתן לטעון 3D-Plane: {0}", + "plane3DXDepthYToZ": "{0} (עומק {1} עד {2})", + "plane3DXNoDepth": "{0} (ללא ערכי עומק)", "textEffect": "אפקט טקסט", "textEffectSettingsTitle": "הגדרות אפקט טקסט", "textEffectPreset": "ערכה מוגדרת מראש", @@ -1413,13 +1479,10 @@ "statistics": { "title": "סטטיסטיקה", "titleWithFileName": "סטטיסטיקה - {0}", - "generalStatistics": "סטטיסטיקה כללית", - "mostUsed": "הנפוץ ביותר...", "mostUsedLines": "השורות הנפוצות ביותר", "mostUsedWords": "המילים הנפוצות ביותר", "nothingFound": "לא נמצא דבר", "numberOfLinesX": "מספר שורות כתוביות: {0:#,##0}", - "numberOfFilesX": "מספר קובצי כתוביות: {0:#,##0}", "lengthInFormatXinCharactersY": "מספר תווים בפורמט {0}: {1:#,###,##0}", "numberOfCharactersInTextOnly": "מספר תווים בטקסט בלבד: {0:#,###,##0}", "totalDuration": "משך כולל של כל הכתוביות: {0:#,##0}", @@ -1460,7 +1523,6 @@ "gapMaximum": "מרווח - מקסימום: {0:#,##0} מילישניות", "gapAverage": "מרווח - ממוצע: {0:#,##0.##} מילישניות", "gapExceedingMinimum": "מרווח - מתחת למינימום ({0:#,##0} מילישניות): {1} ({2:0.00}%)", - "export": "ייצוא...", "subtitles": "כתוביות", "words": "מילים", "totalDurationShort": "משך כולל", @@ -1490,7 +1552,22 @@ "restoreAutoBackupFile": "שחזר קובץ גיבוי אוטומטי", "restoreXFromY": "האם ברצונך לשחזר את \"{0}\" מ-{1}?", "deleteAllSubtitleBackups": "האם ברצונך למחוק את כל קובצי הגיבוי של הכתוביות?", - "deleteAll": "מחק הכל" + "deleteAll": "מחק הכל", + "subtitles": "כתוביות", + "settingsBackupInfo": "Settings.json מגובה כאשר Subtitle Edit מופעל, לכל היותר פעם אחת בכל {0} ימים ורק אם ההגדרות השתנו. {1} הגיבויים החדשים ביותר נשמרים.", + "settingsBackupInfoEveryStart": "Settings.json מגובה בכל פעם ש-Subtitle Edit מופעל, אם ההגדרות השתנו. {0} הגיבויים החדשים ביותר נשמרים.", + "settingsBackupOff": "הגיבוי האוטומטי של ההגדרות כבוי (אפשרויות → הגדרות → קובץ).", + "lastSettingsBackupX": "גיבוי אחרון: {0}", + "noSettingsBackupsYet": "אין עדיין גיבויי הגדרות", + "openSettingsBackupFolder": "פתח תיקיית גיבוי הגדרות", + "backUpSettingsNow": "גבה כעת", + "settingsBackedUp": "ההגדרות הנוכחיות גובו.", + "restoreSettings": "שחזר הגדרות", + "restoreSettingsFromX": "האם ברצונך להחליף את ההגדרות הנוכחיות שלך בגיבוי מ-{0}?\n\nההגדרות הנוכחיות שלך יגובו תחילה. חלק מהשינויים ייכנסו לתוקף רק לאחר הפעלה מחדש של Subtitle Edit.", + "settingsRestored": "ההגדרות שוחזרו. הפעל מחדש את Subtitle Edit כדי שכל השינויים ייכנסו לתוקף.", + "settingsRestoreFailed": "לא ניתן לשחזר את ההגדרות: {0}", + "settingsBackupNotValid": "הגיבוי אינו קובץ הגדרות תקין, ולכן ההגדרות הנוכחיות שלך נשמרו", + "deleteAllSettingsBackups": "האם ברצונך למחוק את כל קובצי גיבוי ההגדרות?" }, "propertiesDCinema": { "title": "מאפייני D-Cinema SMPTE", @@ -1504,22 +1581,16 @@ "editRate": "קצב עריכה", "timeCodeRate": "קצב קוד זמן", "startTime": "זמן התחלה", - "font": "גופן", "fontId": "מזהה גופן", "fontUri": "נתיב גופן (URI)", - "generate": "צור", - "fontColor": "צבע גופן", "chooseColor": "בחר צבע", "fontEffect": "אפקט גופן", "effectColor": "צבע אפקט", - "fontSize": "גודל גופן", "topBottomMargin": "שוליים עליונים/תחתונים", "fadeUpTime": "זמן הופעה (Fade up)", "fadeDownTime": "זמן היעלמות (Fade down)", - "frames": "פריימים", "zPosition": "מיקום Z", - "zPositionHelp": "מספרים חיוביים מרחיקים את הטקסט, מספרים שליליים מקרבים אותו, ואם מיקום ה-Z הוא אפס אז זה דו-ממד", - "export": "ייצוא..." + "zPositionHelp": "מספרים חיוביים מרחיקים את הטקסט, מספרים שליליים מקרבים אותו, ואם מיקום ה-Z הוא אפס אז זה דו-ממד" }, "webVtt": { "setStylesForSelectedLinesTitle": "קבע סגנונות WebVTT לשורות שנבחרו", @@ -1552,20 +1623,66 @@ "compareOnlyInOneFile": "רק בקובץ אחד", "compareTextOrTimeDifference": "הבדל טקסט/זמן", "compareNumberDifference": "הבדל מספר", - "ignoreLineBreaks": "התעלם ממעברי שורה", "ignoreWhitespace": "התעלם מרווחים", "ignoreWhitespaceHint": "שורות הנבדלות רק ברווחים, טאבים או מעברי שורה אינן נחשבות שונות", "ignoreFormatting": "התעלם מעיצוב", - "onlyLookForDifferencesInText": "חפש הבדלים בטקסט בלבד", - "cannotCompareWithImageBasedSubtitles": "לא ניתן להשוות עם כתוביות מבוססות תמונה", - "statisticsTitle": "סטטיסטיקה", "ignoreFormattingHint": "שורות הנבדלות רק בתגי עיצוב, כמו או {\\an8}, אינן נחשבות שונות", "showOnlyDifferencesInText": "הבדלים בטקסט בלבד", + "ignoreNumbering": "התעלם ממספור", + "ignoreNumberingHint": "שורות השונות רק במספר שלהן אינן נחשבות שונות", + "ignoreTimeDifferenceMs": "סבילות זמן (ms)", + "ignoreTimeDifferenceMsHint": "זמני התחלה וסיום השונים במספר זה של אלפיות שנייה או פחות אינם נחשבים שונים", + "compareDifferences": "הבדלים", + "compareTextDifferences": "הבדלי טקסט", + "compareCurrent": "נוכחי", + "compareReference": "הפניה", + "compareEditable": "ניתן לעריכה", + "compareEditableHint": "שינויים שנעשים כאן חוזרים לכתובית כאשר לוחצים על החל", + "compareReadOnly": "לקריאה בלבד", + "compareTakeFromReference": "קח טקסט ותזמון מההפניה", + "compareInsertFromReference": "הכנס שורה זו לכתובית הנוכחית", + "compareDeleteFromCurrent": "מחק שורה זו מהכתובית הנוכחית", + "compareTakeText": "קח טקסט", + "compareTakeTiming": "קח תזמון", + "compareEditLine": "ערוך שורה", + "compareEditHint": "Ctrl+Enter לשמירה, Esc לביטול", + "compareEdited": "נערך", + "compareOnePendingChange": "שינוי ממתין אחד", + "compareXPendingChanges": "{0} שינויים ממתינים", + "compareDiscardXChanges": "לבטל את {0} השינויים שנעשו בהשוואה?", + "compareXChangesApplied": "השוואה: {0} שינויים הוחלו", + "compareChangeTextX": "#{0} טקסט מההפניה", + "compareChangeTimingX": "#{0} תזמון מההפניה", + "compareChangeTextAndTimingX": "#{0} טקסט ותזמון מההפניה", + "compareChangeEditedX": "#{0} נערך", + "compareChangeInsertedX": "#{0} הוכנס", + "compareChangeDeletedX": "#{0} נמחק", + "compareSyncPoint": "נקודת סנכרון", + "compareSyncPointHint": "נקודת סנכרון - שתי שורות אלה מוצגות תמיד כזוג, והשורות שמעליהן ומתחתיהן מיושרות בנפרד", + "compareSyncPickCurrent": "נקודת סנכרון: השתמש בשורה נוכחית זו", + "compareSyncPickReference": "נקודת סנכרון: השתמש בשורת הפניה זו", + "compareSyncRemove": "הסר נקודת סנכרון", + "compareClearXSyncPoints": "נקה נקודות סנכרון ({0})", + "compareSyncCurrentPickedX": "השורה הנוכחית #{0} נבחרה כנקודת סנכרון - בחר את שורת ההפניה התואמת ולחץ על סנכרון", + "compareSyncReferencePickedX": "שורת ההפניה #{0} נבחרה כנקודת סנכרון - בחר את השורה הנוכחית התואמת ולחץ על סנכרון", + "compareSyncWithCurrentX": "סנכרן עם השורה הנוכחית #{0}", + "compareSyncWithReferenceX": "סנכרן עם שורת ההפניה #{0}", + "compareSyncApply": "סנכרון", + "compareSyncPointSetXY": "נקודת סנכרון נקבעה: השורה הנוכחית #{0} ושורת ההפניה #{1} מוצגות כעת כזוג", + "compareSyncAlreadyPairedXY": "השורה הנוכחית #{0} ושורת ההפניה #{1} כבר מוצגות כזוג עם אותה התחלה - אין מה לסנכרן", + "compareSyncPointShiftedXYZW": "נקודת סנכרון נקבעה: השורות הנוכחיות #{0}-#{1} הוזזו {2} כדי להתחיל עם שורת ההפניה #{3}", + "compareChangeSyncShiftXYZ": "#{0}-#{1} הוזזו {2} (נקודת סנכרון)", + "compareTimingDeltaHint": "בכמה מאוחר יותר (+) או מוקדם יותר (−) שורת ההפניה מתחילה ומסתיימת לעומת השורה הנוכחית", "loadXFromFile": "טען \"{0}\" מקובץ", + "compareLoadSavedFile": "טען קובץ שמור", "saveCompareHtmlTitle": "שמור קובץ השוואה בפורמט HTML", "pickMatroskaTrackX": "בחר ערוץ Matroska - {0}", "pickTransportStreamTrackX": "בחר רצועת transport stream - {0}", + "chapters": "פרקים", + "dvdVobFilesMissingX": "חסרים קובצי VOB (נמצאו {0}%)", "pickMp4TrackX": "בחר רצועת MP4 - {0}", + "pickMxfTrackX": "בחר רצועת MXF - {0}", + "pickMpegTrackX": "בחר רצועת MPEG - {0}", "rosettaProperties": "מאפייני Timed Text Rosetta IMSC", "rosettaFontSize": "גודל גופן (גובה שורה)", "propertyTimeBase": "בסיס זמן", @@ -1575,7 +1692,6 @@ "propertyDefaultRegion": "אזור ברירת מחדל", "propertyStyleAttributeName": "שם מאפיין הסגנון", "propertyTimeCodeFormat": "פורמט קוד זמן", - "propertyFileExtension": "סיומת קובץ", "propertyTopOrigin": "מקור עליון", "propertyTopExtent": "היקף עליון", "propertyBottomOrigin": "מקור תחתון", @@ -1625,7 +1741,6 @@ "selectionIntersect": "הצלב עם הבחירה" }, "multipleReplace": { - "title": "החלפה מרובה", "editRule": "ערוך כלל", "newRule": "כלל חדש", "editCategory": "ערוך קטגוריה", @@ -1642,24 +1757,23 @@ "findWhat": "חפש את", "descriptionOptional": "תיאור (אופציונלי)", "invalidRegularExpressionX": "ביטוי רגולרי לא חוקי: {0}", - "regularExpressionTooSlowX": "הביטוי הרגולרי ויתר לאחר {0} שניות - הכלל דולג, נסה תבנית פשוטה יותר" + "regularExpressionTooSlowX": "הביטוי הרגולרי ויתר לאחר {0} שניות - הכלל דולג, נסה תבנית פשוטה יותר", + "moveToCategory": "העבר לקטגוריה" }, "find": { "searchTextWatermark": "טקסט לחיפוש...", "wholeWord": "מילה שלמה", - "caseSensitive": "רגיש לאותיות רישיות", - "caseInsensitive": "לא רגיש לאותיות רישיות", "findPrevious": "חפש את ה_קודם", "findNext": "חפש את ה_בא", "replaceAndFindNext": "ה_חלף וחפש את הבא", "replaceAll": "החלף ה_כל", - "replaceTitle": "החלפה", - "replaceWith": "החלף ב-", "replaceTextWatermark": "החלף ב-...", "replaceIn": "החלף/חפש ב-", "replaceInTextAndOriginal": "טקסט וטקסט מקורי", "replaceInTextOnly": "טקסט בלבד", - "replaceInOriginalOnly": "טקסט מקורי בלבד" + "replaceInOriginalOnly": "טקסט מקורי בלבד", + "replacedOneOccurrence": "הוחלף מופע אחד", + "replacedXOccurrences": "הוחלפו {0} מופעים" }, "regularExpressionContextMenu": { "wordBoundary": "גבול מילה (\\b)", @@ -1687,6 +1801,7 @@ "xLinesYSubtitles": "{0} שורות, {1} כתוביות", "xLinesYSubtitlesZErrors": "{0} שורות, {1} כתוביות, {2} שגיאות", "couldNotParseAsX": "לא ניתן לפענח כ-{0}", + "readAsXUseAsY": "לא ניתן היה לקרוא את המקור כ-{1}, אך ניתן היה לקרוא אותו כ-{0}.\nלהשתמש בשורות ולהמשיך לשמור כ-{1}?", "selectedXCharactersYLines": "נבחרו: {0} תווים ב-{1} שורות", "replacedXOccurrences": "הוחלפו {0} מופעים", "invalidRegularExpression": "ביטוי רגולרי לא חוקי", @@ -1701,7 +1816,6 @@ "aiReview": { "title": "סקירת AI", "review": "סקור", - "stop": "עצור", "editPrompt": "ערוך הנחיה...", "editPromptTitle": "ערוך הנחיית סקירה", "promptInfo": "הנחיות שנשלחות למודל - {language} מוחלף בשפת הכתוביות.", @@ -1712,7 +1826,6 @@ "reviewingLineXOfY": "סוקר שורה {0} מתוך {1}...", "reviewDone": "הסקירה הושלמה - {0} הצעות ב-{1} שורות", "noIssuesFound": "לא נמצאו בעיות", - "categoryAll": "הכל", "categorySpelling": "איות", "categoryGrammar": "דקדוק", "categoryPunctuation": "פיסוק", @@ -1724,8 +1837,23 @@ "largeChangeWarning": "שינוי גדול - נראה כמו שכתוב מחדש, בדוק בקפידה", "mismatchWarning": "אינו דומה למקור - ייתכן ששייך לשורה אחרת", "engineError": "לא ניתן היה להתחבר למנוע ה-AI: {0}", - "setupHint": "נא לבחור תחילה מנוע ומודל בכלים -> סקירת AI.", - "playCurrentLineHint": "נגן את השורה שנבחרה בנגן הוידאו ועצור בסופה (אפשר גם ללחוץ לחיצה כפולה על שורה)" + "playCurrentLineHint": "נגן את השורה שנבחרה בנגן הוידאו ועצור בסופה (אפשר גם ללחוץ לחיצה כפולה על שורה)", + "editAfterHint": "לחץ על הטקסט של השורה שנבחרה כדי לערוך את התיקון לפני החלתו (Enter שומר, Escape מבטל)", + "template": "תבנית", + "templatePlaceholder": "בחר תבנית כדי להחליף את ההנחיה", + "templateStandard": "הגהה רגילה", + "templateSpeechToText": "ניקוי דיבור לטקסט", + "templateMachineTranslation": "תיקון תרגום מכונה", + "templateSdh": "SDH / כבדי שמיעה", + "referenceContext": "הקשר מקור", + "referenceContextInfo": "אופציונלי. שמות, דמויות, מילון מונחים, תקציר או הערות סגנון - המודל מתייחס לכך כמקור הסמכות לשמות ולמונחים. נשלח עם כל אצווה.", + "referenceContextPlaceholder": "שמות: קאיטו, דודה מיי, ד\"ר הוליס\nמונחים: שינקנסן, ליבת עיוות\nתקציר: קאיטו נוסע לטוקיו כדי למצוא את אביו הנעדר.", + "generateContext": "צור באמצעות AI", + "generateContextHint": "תן למנוע ה-AI שנבחר לקרוא את הכתובית ולנסח שמות, מונחים ותקציר - בדוק את התוצאה לפני השימוש", + "generatingContextPartXOfY": "קורא חלק {0} מתוך {1}...", + "generatingContextSynopsis": "כותב תקציר...", + "replaceContextQuestion": "להחליף את הקשר המקור הנוכחי?", + "noContextGenerated": "מנוע ה-AI לא החזיר מידע מקור שמיש." }, "aiAssistant": { "title": "עוזר AI", @@ -1743,22 +1871,14 @@ "showReasoning": "הצג את הנמקת המודל" }, "fixCommonErrors": { - "title": "תיקון שגיאות נפוצות", - "step1": "שלב 1 מתוך 2 - בחירת שגיאות לתיקון", - "whatToFix": "מה לתקן", - "example": "דוגמה", - "selectAll": "בחר הכל", - "inverseSelection": "הפוך בחירה", "back": "< ה_קודם", "next": "ה_בא >", - "step2": "שלב 2 מתוך 2 - אימות תיקונים", "fixes": "תיקונים", "ruleDetailsDotDotDot": "פרטי הכלל...", "showOnlyThisRule": "הצג רק תיקונים מכלל זה", "appliedRulesForLineX": "כללים שהוחלו על שורה {0}", "ruleX": "כלל: {0}", "log": "יומן", - "function": "פונקציה", "removedEmptyLine": "הסר שורה ריקה", "removedEmptyLineAtTop": "הסר שורה ריקה למעלה", "removedEmptyLineAtBottom": "הסר שורה ריקה למטה", @@ -1779,13 +1899,13 @@ "removeLineBreaksPixelWidth": "בטל פיצול כתוביות שיכולות להיכנס בשורה אחת (רוחב פיקסלים)", "fixUppercaseIInsideLowercaseWords": "תקן אות 'i' רישית בתוך מילים באותיות קטנות (שגיאת OCR)", "fixDoubleApostrophes": "תקן תווי גרש כפולים ('') למירכאות בודדות (\")", + "fixMisreadQuotes": "תקן גרשיים שנקראו בטעות כמירכאות כפולות (OCR, אנגלית)", "addPeriods": "הוסף נקודה בסוף שורות אם השורה הבאה מתחילה באות רישית", "startWithUppercaseLetterAfterParagraph": "התחל באות רישית לאחר פסקה", "startWithUppercaseLetterAfterPeriodInsideParagraph": "התחל באות רישית לאחר נקודה בתוך פסקה", "startWithUppercaseLetterAfterColon": "התחל באות רישית לאחר נקודתיים/נקודה ופסיק", "fixLowercaseIToUppercaseI": "תקן אות 'i' קטנה מבודדת ל-'I' רישית (אנגלית)", "fixCommonOcrErrors": "תקן שגיאות OCR נפוצות (באמצעות רשימת החלפת OCR)", - "commonOcrErrorsFixed": "שגיאות OCR נפוצות שתוקנו (שימוש ברשימת החלפת OCR): {0}", "removeSpaceBetweenNumber": "הסר רווחים בין מספרים", "breakDialogsOnOneLine": "פצל דו-שיח בשורה אחת", "removeDialogFirstInNonDialogs": "הסר מקף התחלה בשורה ראשונה של טקסטים שאינם דו-שיח", @@ -1802,18 +1922,17 @@ "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Foo
bar! -> Foo bar!", "fixDoubleApostrophesExample": "''Has double single quotes'' -> \"Has single double quote\"", + "fixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "addPeriodsExample": "Hello world -> Hello world.", "startWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: Foobar!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Hello there! how are you? -> Hello there! How are you?", "startWithUppercaseLetterAfterColonExample": "Speaker: hello world! -> Speaker: Hello world!", "removeHyphensSingleLineExample": "- Foobar. -> Foobar.", "fix3PlusLinesExample": "Foo
bar
baz! -> Foo bar baz!", - "xMissingQuotesAdded": "מירכאות חסרות שהתווספו: {0}", "fix3PlusLine": "תקן כתובית עם יותר משתי שורות", "fix3PlusLines": "תקן כתוביות עם יותר משתי שורות", "analysing": "מנתח...", "nothingToFix": "אין מה לתקן :)", - "fixesFoundX": "תיקונים שנמצאו: {0}", "xFixesApplied": "תיקונים שהוחלו: {0}", "xFixesYSelected": "{0} תיקונים - {1} נבחרו", "nothingFixableBut": "לא ניתן היה לתקן דבר באופן אוטומטי. הכתובית מכילה שגיאות - ראה יומן לפרטים", @@ -1822,7 +1941,6 @@ "fixFirstLetterToUppercaseAfterParagraph": "הפוך אות ראשונה לרישית לאחר פסקה", "mergeShortLine": "מזג שורה קצרות (משפט בודד)", "mergeShortLineAll": "מזג שורות קצרות (הכל מלבד דו-שיח)", - "unbreakShortLinePixelWidth": "בטל פיצול שורה קצרה (רוחב פיקסלים)", "breakLongLine": "פצל שורה ארוכה", "fixLongDisplayTime": "תקן זמן הצגה ארוך מדי", "fixInvalidItalicTag": "תקן תג נטייה (italic) לא תקין", @@ -1845,7 +1963,6 @@ "fixUppercaseIInsideLowercaseWord": "תקן אות 'i' רישית בתוך מילה באותיות קטנות", "fixMissingPeriodAtEndOfLine": "הוסף נקודה חסרה בסוף שורה", "refreshFixes": "רענן תיקונים זמינים", - "applyFixes": "החל תיקונים שנבחרו וסגור", "autoBreak": "פיצול &אוטומטי", "unbreak": "&בטל פיצול", "fixDoubleDash": "תקן '--' ל-'...'", @@ -1864,8 +1981,6 @@ "fixSpaceBetweenNumbersExample": "1 100 -> 1100", "fixDialogsOneLineExample": "Hi John! - Hi Ida! -> Hi John!
- Hi Ida!", "removeDialogFirstInNonDialogsExample": "- How are you? -> How are you?", - "selectDefault": "בחר ברירת מחדל", - "setDefault": "קבע את התיקונים הנוכחיים כברירת מחדל", "fixContinuationStyleX": "תקן סגנון המשכיות: {0}", "fixUnnecessaryLeadingDots": "הסר נקודות מובילות מיותרות", "fixCommonErrorsProfiles": "פרופילי תיקון שגיאות נפוצות", @@ -1873,7 +1988,6 @@ "searchRulesDotDotDot": "חפש כללים...", "goToApplyFixes": "עבור להחלת תיקונים", "backToFixList": "חזרה לרשימת התיקונים", - "applyFixesAndClose": "החל תיקונים וסגור", "fixCommonOcrErrorsStep2": "תיקון שגיאות נפוצות, שלב 2 (החלת תיקונים)", "fixCommonOcrErrorsStep2FixesFoundX": "תיקון שגיאות נפוצות, שלב 2 - תיקונים שנמצאו: {0}", "action": "פעולה", @@ -1886,18 +2000,11 @@ "adjustDurations": { "title": "התאם משכים", "adjustVia": "התאם באמצעות", - "seconds": "שניות", - "percent": "אחוז", "recalculate": "חשב מחדש", "addSeconds": "הוסף שניות", - "setAsPercent": "קבע כאחוז מהמשך", "note": "הערה: זמן התצוגה לא יחפוף את זמן ההתחלה של הטקסט הבא", "fixed": "קבוע", - "milliseconds": "מילישניות", "extendOnly": "הארך בלבד", - "enforceDurationLimits": "אכוף משך מינימלי ומקסימלי", - "checkShotChanges": "אל תאריך מעבר למעברי שוט", - "batchCheckShotChanges": "כבד מעברי שוט (אם זמינים)", "recalculateRequiresOcrNote": "חישוב מחדש אינו זמין — לאחת או יותר מהכתוביות אין טקסט OCR. הרץ OCR תחילה." }, "applyDurationLimits": { @@ -1905,6 +2012,8 @@ "fixMinDurationMs": "תקן משך מינימלי (מילישניות)", "doNotGoPastShotChange": "אל תעבור מעבר שוט", "fixMaxDurationMs": "תקן משך מקסימלי (מילישניות)", + "fixMinDurationFrames": "תקן משך מינימלי (פריימים)", + "fixMaxDurationFrames": "תקן משך מקסימלי (פריימים)", "minimumDurationMilliseconds": "משך מינימלי (מילישניות):", "maximumDurationMilliseconds": "משך מקסימלי (מילישניות):", "maxDurationShouldBeHigherThanMinDuration": "המשך המקסימלי חייב להיות גבוה מהמשך המינימלי", @@ -1924,12 +2033,8 @@ }, "beautifyTimeCodes": { "title": "ייפוי קודי זמן", - "beautifySettings": "הגדרות ייפוי", "snapToFrames": "הצמד לפריימים", - "frameGap": "מרווח פריימים", "minDuration": "משך מינימלי (מילישניות)", - "shotChangeThreshold": "סף מעבר שוט (מילישניות)", - "shotChangeOffset": "היסט מעבר שוט (פריימים)", "original": "מקור", "beautified": "מיופה", "subtitlesCount": "כתוביות", @@ -1958,10 +2063,76 @@ "timeCodesExtractFailed": "לא ניתן היה לקרוא קודי זמן מהוידאו", "timeCodesHint": "הצמד קודי זמן לזמני הפריימים האמיתיים של הוידאו במקום להניח קצב פריימים קבוע. נדרשת קריאה של הוידאו כולו פעם אחת; התוצאה נשמרת במטמון." }, + "improveTimeCodes": { + "title": "שפר קודי זמן (יישור כפוי)", + "aligner": "מיישר", + "alignerHint": "המודל שמאזין לכל שורה בשמע. האפשרויות הטובות ביותר לשפת הכתובית מופיעות ראשונות.", + "maxShift": "הזזה מקסימלית (שניות)", + "maxShiftHint": "עד כמה הכתובית עשויה להיות לא מסונכרנת. שורה שההתחלה שלה הייתה זזה יותר מכך נשארת כפי שהיא ומסומנת. בכל ערך שהוא, שורה בודדת שרוצה לזוז יותר מחצי שנייה מעבר לשורות שסביבה אינה מוזזת באופן עיוור: היא עוקבת אחר שכנותיה כאשר כולן זזו, ואחרת מוצעת ללא סימון כדי שתבדוק אותה.", + "adjustStartTimes": "התאם זמני התחלה", + "adjustEndTimes": "התאם זמני סיום", + "isolateSpeech": "בודד דיבור תחילה (איטי)", + "isolateSpeechHint": "מסיר מוזיקה ואפקטי קול לפני היישור, כך שהמיישר שומע רק את הדיאלוג. עוזר בשורות הנאמרות על רקע מוזיקה רועשת או אקשן, אך לוקח בערך כאורך השמע עצמו עם GPU - ופי כמה יותר בלעדיו.", + "isolatingSpeech": "מבודד דיבור... (זה לוקח זמן)", + "isolateSpeechFailed": "לא ניתן היה לבודד את הדיבור - היישור בוצע מול השמע המקורי במקום זאת.", + "checkWithSpeechToText": "בדוק באמצעות דיבור לטקסט", + "checkWithSpeechToTextHint": "מתמלל גם את השמע, ובודק כל הזזה מול המקום שבו המילים נשמעו בפועל. הזזות גדולות שהדיבור מאשר מסומנות עבורך, והזזות הרחק מהמקום שבו שורה נשמעת נשארות ללא סימון כדי שתבדוק אותן. מציג גם כמה מכל שורה נשמע - שיעור נמוך פירושו שהטקסט שונה ממה שנאמר. כתובית שאינה מסונכרנת יותר מההזזה המקסימלית - היסט קבוע, סחיפה עקב אי-התאמה בקצב פריימים, או קפיצות במקומות שבהם סצנות נחתכו - מסונכרנת תחילה לפי המילים שנשמעו. משתמש ב-Crisp ASR Parakeet, שלוקח כמה דקות לסרט באורך מלא עם GPU.", + "checkWithSpeechToTextNotAvailableX": "בדיקת דיבור לטקסט אינה זמינה עבור {0}", + "transcribingToCheck": "מתמלל כדי לבדוק את היישור...", + "speechToTextFailed": "דיבור לטקסט נכשל - קודי הזמן לא נבדקו מולו.", + "speechToTextX": "דיבור לטקסט: {0}", + "speechToTextConfirmedXDisputedY": "דיבור: {0} אושרו, {1} שנויים במחלוקת", + "hardlyHeardX": "דיבור לטקסט שמע רק {0}% ממילות הכתובית. האם הכתובית בשפה המדוברת? המיישר אינו יכול למקם תרגום.", + "heard": "נשמע", + "heardHint": "כמה מהשורה שמע דיבור לטקסט. שיעור נמוך פירושו שהטקסט שונה ממה שנאמר - שם המיישר צפוי לטעות יותר מכל.", + "statusConfirmedBySpeech": "אושר על ידי הדיבור", + "statusDisputedBySpeech": "נשמע במקום שבו היה", + "statusMovedWithSync": "הוזז עם הסנכרון", + "syncedFirstXY": "סונכרן תחילה: {0} שנ' בהתחלה, {1} שנ' בסוף", + "showSpeechOnly": "הצג דיבור בלבד", + "showSpeechOnlyHint": "צייר את גל השמע המיושר מהשמע ללא מוזיקה ואפקטי קול; גל השמע המקורי נשאר כפי שהוא, לצורך השוואה. זמין לאחר שהדיבור בודד - כאן, או באמצעות \"הצג דיבור בלבד\" בגל השמע של החלון הראשי.", + "align": "יישר", + "original": "מקור", + "aligned": "מיושר", + "intro": "בחר מיישר ולחץ על \"יישר\" כדי להאזין לכל שורה בשמע ולהדק את קודי הזמן שלה.", + "extractingAudio": "מחלץ שמע...", + "aligningBatchXOfY": "מיישר... אצווה {0} מתוך {1}", + "extractAudioFailed": "לא ניתן היה לחלץ את השמע באמצעות ffmpeg.", + "modelWillBeDownloaded": "תתבצע הורדה של {0}", + "summaryXRetimedYKeptZSkipped": "תוזמנו מחדש: {0} · נשמרו: {1} · ללא דיבור: {2}", + "meanShiftX": "הזזה ממוצעת: {0} ms", + "toCheckX": "לבדיקה: {0}", + "largeMovesToCheckX": "{0} שורות היו זזות מרחק רב בעצמן ונשארו ללא סימון - האזן להן (F5 מנגן את השורה המיושרת, Shift+F5 את המקורית) וסמן את אלה שנכונות.", + "linesToCheckX": "{0} שורות נשארו ללא סימון לבדיקה - האזן להן (F5 מנגן את השורה המיושרת, Shift+F5 את המקורית) וסמן את אלה שנכונות.", + "changeXOfY": "שינוי {0} מתוך {1}", + "previousChange": "השינוי הקודם", + "nextChange": "השינוי הבא", + "startShift": "התחלה", + "endShift": "סיום", + "statusRetimed": "תוזמן מחדש", + "statusMovedWithNeighbours": "הוזז עם שכנותיה", + "statusLargeMoveUnconfirmed": "הזזה גדולה - האזן, סמן כדי להחיל", + "statusUnchanged": "כבר במקום", + "statusNoSpeech": "ללא דיבור", + "statusShiftTooLarge": "נשמר - הזזה גדולה מדי", + "statusFailed": "נשמר - המיישר נכשל", + "statusAdjustedByHand": "הותאם ידנית", + "alignedWaveformHint": "גרור שורה כדי להזיז אותה, או גרור את קצוותיה כדי לשנות את ההתחלה או הסיום שלה.", + "playLine": "נגן שורה", + "undoAdjustment": "בטל התאמה", + "playPause": "נגן / השהה", + "playAligned": "מיושר", + "playAlignedHint": "נגן את השורה שנבחרה עם קודי הזמן המיושרים שלה", + "apply": "החל", + "applyHint": "בטל את סימון השורה כדי לשמור את קודי הזמן המקוריים שלה. לחץ לחיצה כפולה על שורה כדי לנגן אותה. ניתן גם להזיז שורות או לשנות את גודלן בגל השמע המיושר." + }, "bridgeGaps": { - "title": "גישור מרווחים", "bridgeGapsSmallerThan": "גשר על מרווחים קטנים מ- (מילישניות)", "minGap": "מרווח מינימלי (מילישניות)", + "bridgeGapsSmallerThanFrames": "גשר על מרווחים קטנים מ- (פריימים)", + "minGapFrames": "מרווח מינימלי (פריימים)", + "calculateBridgeGapsSmallerThanDotDotDot": "חשב את מגבלת גישור המרווחים מקצב פריימים...", + "useXMsAsBridgeGapsSmallerThan": "לגשר על מרווחים קטנים מ-\"{0}\" אלפיות שנייה?", "numberOfSmallGapsBridgedX": "מספר מרווחים קטנים שגושרו: {0}", "percentFoPrevious": "מרווח לקודם (%)", "gapChange": "שינוי מרווח" @@ -1973,8 +2144,6 @@ "sortBy": { "title": "מיין כתוביות", "sortOrder": "סדר מיון", - "sortByNumber": "מספר", - "sortByStartTime": "זמן התחלה", "sortByEndTime": "זמן סיום" }, "batchConvert": { @@ -1997,6 +2166,7 @@ "addColor": "הוסף צבע", "deleteLinesWithSpecificActorsOrStyles": "מחק שורות עם שחקנים או סגנונות מסוימים (הפרד בתו פסיק)", "useSourceStylesIfPossible": "השתמש בסגנונות מקור במידת האפשר", + "keepSourceEmbeddedFonts": "שמור גופנים מוטמעים מהמקור (כותרת תחתונה)", "editStyles": "ערוך סגנונות", "editProperties": "ערוך מאפיינים", "editAttachments": "ערוך קבצים מצורפים", @@ -2017,7 +2187,6 @@ "assaChangeStyleFromStyle": "שנה סגנון מ-", "assaChangeStyleToStyle": "אל", "assaChangeStyleImportStyle": "ייבוא סגנון...", - "assaChangeStyleImportedX": "יובא: {0}", "assaChangeStyleTrimUnusedStyles": "נקה סגנונות שאינם בשימוש", "assaChangeStylePropertiesTitle": "שנה מאפייני סגנון", "assaChangeStylePropertiesInfo": "משנה את השדות שנבחרו בכל סגנון בקובץ, מבלי לגעת בסגנונות עצמם.", @@ -2029,13 +2198,52 @@ "convertColorsToDialogReBreakLines": "פצל שורות מחדש", "snapTimeCodesToFramesInfo": "מעגל כל זמן התחלה וסיום לפריים הקרוב ביותר. קצב הפריימים נקרא מקובץ וידאו בעל שם זהה לקובץ הכתוביות, אלא אם נבחר קצב פריימים קבוע.", "addFolderDotDotDot": "הוסף תיקייה...", + "addFolderRecursiveDotDotDot": "הוסף תיקייה באופן רקורסיבי...", "selectFolderToConvert": "בחר תיקייה עם הקבצים להמרה", "includeSubfolders": "כלול תיקיות משנה בעת הוספת תיקייה", + "videoFilesWhenAddingFolder": "קובצי וידאו (mkv, mp4, ts...) בעת הוספת תיקייה", + "videoFilesAsk": "שאל", + "videoFilesInclude": "הוסף את רצועות הכתוביות שלהם", + "videoFilesSkip": "דלג", + "folderContainsXVideoFiles": "התיקייה מכילה {0} קובצי וידאו (mkv, mp4, ts...).\n\nלהוסיף גם את רצועות הכתוביות המוטמעות שלהם, או רק את קובצי הכתוביות?", + "addVideoFiles": "הוסף קובצי וידאו", + "skipVideoFiles": "קובצי כתוביות בלבד", + "doNotAskAgainVideoFiles": "אל תשאל שוב (ניתן לשנות בהגדרות המרת אצווה)", + "settingsSectionOutput": "פלט", + "settingsSectionAddingFiles": "הוספת קבצים", + "settingsSectionImageBasedSubtitles": "כתוביות מבוססות תמונה (OCR)", + "settingsSectionOther": "אחר", "keepSourceFileTimestamp": "שמור את תאריך/שעת קובץ המקור בקובצי הפלט", - "scanningFolderX": "סורק את {0}..." + "preventSleepWhileConverting": "מנע מהמחשב להיכנס למצב שינה בזמן ההמרה", + "scanningFolderX": "סורק את {0}...", + "transportStreamSettings": "הגדרות Transport Stream", + "transportStreamSettingsDotDotDot": "הגדרות Transport Stream...", + "transportStreamSettingsInfo": "חל על רצועות כתוביות שחולצו מקובצי Transport Stream (.ts/.m2ts). מיקום וגודל וידאו משפיעים רק על רצועות תמונה של DVB המיוצאות לפורמט מבוסס תמונה.", + "transportStreamOverrideXPosition": "עקוף את מיקום X המקורי", + "transportStreamOverrideYPosition": "עקוף את מיקום Y המקורי", + "transportStreamOverrideVideoSize": "עקוף את גודל הווידאו המקורי", + "transportStreamBottomMargin": "שוליים תחתונים", + "transportStreamFileNameEnding": "סיומת שם הקובץ", + "transportStreamFileNameEndingInfo": "מתווסף לפני הסיומת עבור כל רצועה שחולצה. השאר ריק כדי להשתמש בסיומת השפה הרגילה.", + "transportStreamOnlyTeletext": "טלטקסט בלבד", + "transportStreamGetSizeFromVideo": "קבל גודל מהווידאו...", + "twoLetterLanguageCodeUppercase": "קוד שפה בן שתי אותיות (אותיות רישיות)", + "threeLetterLanguageCodeUppercase": "קוד שפה בן שלוש אותיות (אותיות רישיות)", + "formatContainsDotDotDot": "הפורמט מכיל...", + "extensionIsDotDotDot": "הסיומת היא...", + "statusIsError": "המצב הוא שגיאה", + "forcedTracksOnly": "רצועות כפויות בלבד", + "xConvertedYFailedInZ": "{0:#,###,##0} הומרו, {1:#,###,##0} נכשלו תוך {2}", + "xNotProcessed": "{0:#,###,##0} לא עובדו", + "removeUnicodeControlCharactersTitle": "הסר תווי בקרה של Unicode", + "removeUnicodeControlCharactersInfo": "מסיר מהטקסט את תווי בקרת הכיוון הבלתי נראים של Unicode (LRM, RLM, LRE, RLE, PDF, LRO ו-RLO), ומחליף רווחים בלתי שבירים ברווחים רגילים.", + "preset": "ערכה מוגדרת מראש", + "savePresetDotDotDot": "שמור ערכה...", + "deletePreset": "מחק ערכה", + "presetName": "שם הערכה", + "deletePresetX": "למחוק את הערכה \"{0}\"?" }, "changeCasing": { - "title": "שנה סוג אותיות", "fixNames": "תקן שמות", "namesX": "שמות: {0:#,##0}", "hitsX": "התאמות: {0:#,##0}", @@ -2046,9 +2254,7 @@ "allUppercase": "הכל אותיות רישיות", "allLowercase": "הכל אותיות קטנות" }, - "changeFormatting": { - "title": "שנה עיצוב" - }, + "changeFormatting": {}, "convertActors": { "title": "המר שחקנים", "convertActorFrom": "המר שחקן מ-", @@ -2077,18 +2283,12 @@ "outputFormatAssa": "Advanced Sub Station Alpha (.ass)", "style1": "סגנון 1", "style2": "סגנון 2", - "outlineWidth": "רוחב קו מתאר", - "shadowWidth": "רוחב צל", - "alignTop": "למעלה", - "alignBottom": "למעלה", - "merge": "_מזג", - "pleaseLoadTwoSubtitles": "נא לטעון שתי כתוביות" + "merge": "_מזג" }, "splitSubtitle": { "title": "פצל כתובית", "numberOfEqualParts": "מספר חלקים שווים", "saveSplitParts": "_שמור חלקים מפוצלים", - "subtitleSplitIntoXParts": "הכתובית פוצלה ל-{0} חלקים.", "xPartsSavedInFormatYToFolder": "{0} חלקים נשמרו בפורמט {1} לתיקייה:" }, "splitBreakLongLines": { @@ -2114,13 +2314,14 @@ "onlyContinuationLines": "רק שורות המשך" }, "mergeLinesWithSameText": { - "title": "מזג שורות עם טקסט זהה", "maxMsBetweenLines": "מקסימום מילישניות בין שורות", - "includeIncrementingLines": "כלול שורות עם טקסט עולה" + "maxFramesBetweenLines": "מקסימום פריימים בין שורות", + "includeIncrementingLines": "כלול שורות עם טקסט עולה", + "includeRollUpCaptions": "כלול כתוביות גלילה (roll-up)" }, "mergeLinesWithSameTimeCodes": { - "title": "מזג שורות עם קודי זמן זהים", "maxMsDifference": "הפרש מקסימלי (מילישניות)", + "maxFramesDifference": "הפרש מקסימלי (פריימים)", "makeDialog": "צור דו-שיח" }, "netflixCheckAndFix": { @@ -2143,7 +2344,6 @@ "shotChanges": "מעברי שוט", "startNumberSpellOut": "כתוב מילים למספר שמתחיל משפט", "textforHiUseBrackets": "טקסט לכבדי שמיעה, השתמש בסוגריים", - "frameRate": "קצב פריימים", "twoFrameGrap": "מרווח של שני פריימים", "whiteSpace": "רווחים לבנים", "childrensProgram": "תוכנית ילדים", @@ -2181,7 +2381,6 @@ "italicsFixed": "כתב נטוי תוקן", "italicsNotAllowed": "כתב נטוי אינו מותר", "bridgeGapsXToYFrames": "מרווח של 3 עד {0} פריימים => מרווח של 2 פריימים", - "startNumberSpellOutComment": "כאשר מספר מתחיל משפט, יש לכתוב אותו תמיד כמילה", "maximumXCharactersPerSecond": "מקסימום {0} תווים לשנייה" }, "imageBasedEdit": { @@ -2191,10 +2390,8 @@ "resizeImagesDotDotDot": "שנה גודל תמונות...", "adjustBrightnessDotDotDot": "התאם בהירות...", "adjustAlphaDotDotDot": "התאם אלפא...", - "centerHorizontally": "מרכז אופקית", "cropImages": "חתוך תמונות", "importTimeCodes": "ייבוא קודי זמן...", - "setTextForSubtitle": "קבע טקסט עבור כתובית", "screenWidth": "רוחב מסך", "screenHeight": "גובה מסך", "alphaThresholdInfo": "פיקסלים עם אלפא מתחת לסף יהפכו לשקופים לחלוטין", @@ -2224,15 +2421,31 @@ "letterboxCustom": "גובה פס מותאם אישית", "barHeightPx": "גובה פס (px)", "titleSafePercent": "אזור בטוח לכותרות (%)", + "moveCaptions": "הזז כתוביות", + "moveCaptionsDotDotDot": "הזז כתוביות...", + "moveCaptionsTo": "הזז כתוביות", + "moveCaptionsIntoBars": "לתוך פסי ה-letterbox (מחוץ לתמונה)", + "moveCaptionsIntoPicture": "בתוך התמונה (מחוץ לפסים)", + "moveCaptionsOffset": "היסט מהקצה (px)", + "letterboxBarHeightXPxYOfZCaptionsWillMove": "גובה הפס: {0} px - {1} מתוך {2} כתוביות יוזזו", + "removeFadeInOut": "הסר עמעום כניסה/יציאה", + "removeFadeInOutXLinesRemoved": "{0} שורות עמעום מוזגו לתוך השורות שאליהן הן שייכות", + "removeFadeInOutNothingFound": "לא נמצאו שורות עמעום כניסה/יציאה", "positionSummary": "{0}×{1} - {2} כתוביות - גובה פס: {3} px", "xInActivePicture": "{0} בתמונה", "xInTopBar": "{0} בפס העליון", "xInBottomBar": "{0} בפס התחתון", "noImageSubtitlesLoaded": "לא נטענו כתוביות מבוססות תמונה", - "imageBasedFormatNotSupported": "פורמט כתוביות מבוסס תמונה לא נמצא/אינו נתמך." + "imageBasedFormatNotSupported": "פורמט כתוביות מבוסס תמונה לא נמצא/אינו נתמך.", + "frameRateDeclaredInFile": "קצב הפריימים המוצהר בקובץ ה-Blu-ray sup", + "frameRateDetectedFromTimeCodesX": "קצב פריימים שזוהה מקודי הזמן של ה-Blu-ray sup (הקובץ מצהיר על {0})", + "frameRateFromVideo": "קצב הפריימים של הווידאו", + "frameRateCurrent": "קצב פריימים נוכחי", + "frameRateSetManually": "קצב פריימים שנקבע ידנית", + "frameRateUsageInfo": "ייצוא Blu-ray sup, BDN XML, DOST ו-FCP נכתב בקצב פריימים זה. הוא אינו משנה זמנים כלשהם - השתמש ב-\"שנה קצב פריימים\" לשם כך.", + "useVideoFrameRateXInsteadOfY": "קצב הפריימים של הווידאו הוא {0}, אך הכתובית מוגדרת ל-{1}.\n\nלהשתמש בקצב הפריימים של הווידאו ({0})?" }, "removeTextForHearingImpaired": { - "title": "הסר טקסט לכבדי שמיעה", "interjections": "מילות קריאה", "skipIfStartWith": "דלג אם מתחיל ב-", "removeTextBetween": "הסר טקסט שבין", @@ -2251,7 +2464,6 @@ "removeInterjections": "הסר מילות קריאה", "linesFoundX": "שורות שנמצאו: {0}" }, - "pickAlignmentTitle": "בחר יישור", "removeUnicodeCharacters": { "title": "הסר/החלף תווי יוניקוד", "charactersFoundX": "תווי יוניקוד שנמצאו: {0}", @@ -2261,13 +2473,13 @@ "pickFontNameInstalledFonts": "גופנים מותקנים", "pickFontNameCollectedFonts": "גופנים שנאספו", "colorPickerTitle": "בחר צבע", + "colorPickerBrightness": "בהירות", "filterLayersTitle": "סנן שכבות לתצוגה", "filterLayersHideFromWaveform": "הסתר מגל שמע/ספקטרוגרמה", "filterLayersHideFromSubtitleGrid": "הסתר מטבלת הכתוביות", "filterLayersHideFromVideoPreview": "הסתר מתצוגה מקדימה של הוידאו", "pickSubtitleFormat": "בחר פורמט כתוביות", "pickSubtitleFormatImageBasedNoPreview": "פורמט כתוביות מבוסס תמונה.\nהתמונות נוצרות במהלך ההמרה - אין תצוגה מקדימה של טקסט.", - "pickLayerTitle": "קבע שכבה", "recentColors": "צבעים אחרונים", "beautifyTimeCodesProfile": { "title": "ערוך פרופיל ייפוי קודי זמן", @@ -2275,7 +2487,11 @@ "presetDefault": "ברירת מחדל", "presetNetflix": "Netflix", "presetSdi": "SDI", - "general": "כללי", + "saveAsProfile": "שמור כפרופיל...", + "deleteProfile": "מחק פרופיל", + "profileName": "שם פרופיל", + "overwriteProfileX": "פרופיל בשם \"{0}\" כבר קיים. לדרוס אותו?", + "deleteProfileX": "למחוק את הפרופיל \"{0}\"?", "gap": "מרווח", "gapSuffix": "פריימים (מעדכן גם את שדות המרווח שאינם אפס שלהלן)", "milliseconds": "מילישניות", @@ -2312,9 +2528,7 @@ "columnMerge": "מזג", "columnFirst": "שורה ראשונה", "columnSecond": "שורה שנייה", - "columnMerged": "ממוזג", - "selectAll": "בחר הכל", - "inverseSelection": "הפוך בחירה" + "columnMerged": "ממוזג" }, "fixCommonErrorsSettingsTitle": "הגדרות תיקון שגיאות נפוצות" }, @@ -2359,59 +2573,51 @@ "correctWordsX": "מילים נכונות: {0}", "namesX": "שמות: {0}", "addedToDictionaryX": "נוספו למילון: {0}", - "doNotShowThisAgain": "אל תציג הודעה זו שוב" + "doNotShowThisAgain": "אל תציג הודעה זו שוב", + "editUseAlwaysList": "ערוך רשימת \"השתמש תמיד\"...", + "useAlwaysListTitle": "בדיקת איות - רשימת \"השתמש תמיד\"", + "useAlwaysListHeader": "רשימת \"השתמש תמיד\"", + "useAlwaysListDescription": "מילים שבדיקת האיות מחליפה אוטומטית, שנשמרו באמצעות \"שנה הכל\" ו-\"השתמש תמיד\". צמד משמש רק כאשר המילה מאויתת שגוי.", + "useAlwaysWord": "מילה שגויה", + "xPairs": "{0:#,##0} צמדים", + "xUnusedPairs": "{0:#,##0} מעולם לא שומשו", + "useAlwaysUnusedHint": "מעולם לא שומש - מילה זו מאויתת נכון (או שהיא שם או מילת משתמש), ולכן בדיקת האיות לעולם אינה מסמנת אותה", + "removeUnused": "הסר שאינם בשימוש", + "useAlwaysEmpty": "אין עדיין צמדי \"השתמש תמיד\" לשפה זו", + "useAlwaysEmptyHint": "צמדים נוספים כאשר לוחצים על \"שנה הכל\" או \"השתמש תמיד\" בבדיקת האיות.", + "useAlwaysNoMatch": "אין צמדים התואמים לחיפוש", + "useAlwaysSameWord": "ההחלפה חייבת להיות שונה מהמילה.", + "useAlwaysRememberOff": "\"זכור רשימת 'השתמש תמיד'\" כבוי בהגדרות, ולכן בדיקת האיות אינה משתמשת ברשימה זו ואינה שומרת אותה." }, "video": { "burnIn": { "title": "צור וידאו עם כתוביות מובנות (Burn-in)", - "infoAssaOff": "הערה: ישנה תמיכה בעיצוב Advanced SubStation Alpha.", - "infoAssaOn": "הערה: ייעשה שימוש בעיצוב Advanced SubStation Alpha :)", - "xGeneratedWithBurnedInSubsInX": "\"{0}\" נוצר עם כתוביות מובנות תוך {1}.", - "timeRemainingMinutes": "הזמן הנותר: {0} דקות", - "timeRemainingOneMinute": "הזמן הנותר: דקה אחת", - "timeRemainingSeconds": "הזמן הנותר: {0} שניות", - "timeRemainingAFewSeconds": "הזמן הנותר: שניות בודדות", - "timeRemainingMinutesAndSeconds": "הזמן הנותר: {0} דקות ו-{1} שניות", - "timeRemainingOneMinuteAndSeconds": "הזמן הנותר: דקה אחת ו-{0} שניות", - "targetFileName": "שם קובץ היעד: {0}", "targetFileSize": "גודל קובץ יעד (דורש קידוד בשני מעברים)", "fileSizeMb": "גודל קובץ ב-MB", "matchSourceVideoSize": "התאם לגודל וידאו המקור", - "passX": "מעבר {0}", - "encoding": "קידוד", "bitRate": "קצב נתונים", "totalBitRateX": "קצב נתונים כולל: {0}", "sampleRate": "קצב דגימה", "audio": "שמע", - "stereo": "סטריאו", "preset": "פרופיל הגדרות", + "tune": "כוונון (Tune)", "pixelFormat": "פורמט פיקסלים", "crf": "CRF", - "tuneFor": "כוונן עבור", - "alignRight": "יישר לימין", - "getStartPosition": "קבל מיקום התחלה", - "getEndPosition": "קבל מיקום סיום", "useSource": "השתמש במקור", - "useSourceFolder": "השתמש בתיקיית מקור", - "useSourceResolution": "השתמש ברזולוציית מקור", - "outputSettings": "קובץ/תיקיית פלט...", "fontSizeFactor": "מקדם גודל גופן", "boxType": "סוג תיבה", - "fixRightToLeft": "תקן מימין לשמאל", - "cut": "חתוך", "fromTime": "מזמן", "toTime": "עד זמן", "audioEncoding": "קידוד שמע", "outputProperties": "מאפייני פלט...", "videoFileSize": "גודל קובץ וידאו", "oneBox": "תיבה אחת", - "boxPerLine": "תיבה לכל שורה", - "logoInfo": "בחר תמונת PNG וגרור אותה כדי למקם אותה על גבי הוידאו." + "logoInfo": "בחר תמונת PNG וגרור אותה כדי למקם אותה על גבי הוידאו.", + "noSubtitlesGenerateAnyway": "אין שורות כתוביות לצריבה.\n\nליצור את הווידאו ללא כתוביות?", + "noSubtitlesInXItemsGenerateAnyway": "ל-{0} פריטי אצווה אין שורות כתוביות לצריבה.\n\nליצור את סרטוני הווידאו האלה ללא כתוביות?" }, "videoTransparent": { - "title": "צור וידאו שקוף עם כתוביות", - "infoAssaOff": "הערה: ישנה תמיכה בעיצוב Advanced SubStation Alpha.", - "infoAssaOn": "הערה: ייעשה שימוש בעיצוב Advanced SubStation Alpha :)" + "title": "צור וידאו שקוף עם כתוביות" }, "audioToText": { "title": "דיבור לטקסט", @@ -2419,6 +2625,21 @@ "translateToEnglish": "תרגם לאנגלית", "transcribing": "מתמלל...", "transcribingXOfY": "מתמלל {0} מתוך {1}...", + "linesTranscribedXOfYFailedZ": "{0} מתוך {1} שורות תומללו - {2} נכשלו או שלא היה בהן דיבור.\n\nשורות שנכשלו שומרות על הטקסט הנוכחי שלהן. להחיל את השורות שתומללו, או לנסות שוב את אלה שנכשלו (ניתן לשנות קודם את המנוע או ההגדרות)?", + "linesTranscribedXOfYCancelled": "התמלול בוטל לאחר {0} מתוך {1} שורות.\n\nלהחיל את השורות שתומללו? שאר השורות שומרות על הטקסט הנוכחי שלהן.", + "noLinesTranscribed": "לא ניתן היה לתמלל אף אחת מ-{0} השורות.\nבדוק את יומן הכלים לפרטים.", + "applyTranscribedLines": "החל את שתומללו", + "retryFailedLines": "נסה שוב את שנכשלו", + "isolateSpeech": "בודד דיבור (איטי)", + "isolateSpeechHint": "מסיר מוזיקה ואפקטי קול לפני התמלול. מביא לפחות שורות שהוחמצו ולתזמון טוב יותר בשמע עם מוזיקה רועשת, אך לוקח בערך כאורך השמע עצמו עם GPU - ופי כמה יותר בלעדיו.", + "isolatingSpeech": "מבודד דיבור...", + "isolateSpeechFailed": "לא ניתן היה לבודד את הדיבור - מתמלל את השמע המקורי במקום זאת.", + "detectSpeakers": "זהה דוברים", + "detectSpeakersHint": "מתחיל כל שורה עם הדובר, כמו \"(speaker 0)\", באמצעות דיאריזציית Sortformer של NVIDIA (עד 8 דוברים). עובד הכי טוב עם מנועים שמפצלים שורות היכן שהדובר מתחלף, כמו Parakeet ו-Cohere.", + "detectSpeakersNeedsNewerCrispAsr": "\"זהה דוברים\" דורש Crisp ASR v{0} ומעלה, אך מותקנת גרסה v{1}.\n\nעדכן את Crisp ASR (לחצן גלגל השיניים ליד המנוע) או כבה את \"זהה דוברים\".", + "xNeedsNewerCrispAsr": "{0} דורש Crisp ASR v{1} ומעלה, אך מותקנת גרסה v{2}.\n\nלהוריד ולהתקין את העדכון כעת?", + "vad": "VAD", + "vadHint": "זיהוי פעילות קולית: רק הדיבור מתומלל, וחותכים היכן שהדובר עוצר.\nאוטומטי: Silero, ורק עבור המנועים שזקוקים לכך (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: תמיד פעיל, לכל מנוע Crisp ASR. FireRedVAD הוא המדויק ביותר, Whisper-VAD נותן את החיתוכים המעטים והנקיים ביותר אך הוא האיטי ביותר.\nIndex-Echo תמיד משתמש ב-Silero. ‏--vad, --vad-model או --chunk-seconds בהגדרות המתקדמות גוברים.", "inputLanguage": "שפת קלט", "advancedWhisperSettings": "הגדרות Whisper מתקדמות", "downloadingSpeechToTextEngine": "מוריד מנוע דיבור לטקסט", @@ -2433,8 +2654,6 @@ "addCustomModelDotDotDot": "הוסף מודל מותאם אישית...", "customModelHelp": "ניתן להשתמש במודל משלך: בחר את קובץ המודל (whisper.cpp ggml '.bin') או את תיקיית המודל (תיקיית faster-whisper עם 'model.bin' בתוכה). הוא יועתק לתיקיית המודלים ויתווסף לרשימה למעלה.", "viewToolsLogFile": "הצג קובץ יומן כלים", - "reDownloadX": "הורד מחדש את {0}", - "downloadX": "הורד את {0}", "updateXTitle": "לעדכן את {0}?", "updateXMessage": "גרסה חדשה יותר של {0} זמינה.{1}{1}להוריד ולהתקין את העדכון כעת?", "downloadingSpeechToTextModel": "מוריד מודל דיבור לטקסט", @@ -2446,14 +2665,6 @@ "fixCasing": "תקן אותיות רישיות/קטנות", "addPeriods": "הוסף נקודות", "changeUnderlineToColor": "שנה קו תחתון לצבע", - "cueBuilding": "בניית כתוביות (MLX Whisper)", - "cueRebuild": "בנה מחדש כתוביות מחותמות זמן של מילים", - "cueMaxChars": "מקסימום תווים לכתובית", - "cueMaxSeconds": "מקסימום שניות לכתובית", - "cueMaxCps": "מקסימום תווים לשנייה", - "vocabularyPrompt": "הנחיית אוצר מילים (שמות, מקומות, מונחים)", - "beamSize": "גודל Beam", - "beamSizeNote": "0 מפענח הכי מהר. 5 נותן את הדיוק הטוב ביותר (כמו Faster Whisper) בתוספת זמן של כ-20-30%. ערכים מעל 5 כמעט ולא עוזרים.", "removeNonSpeechLines": "הסר שורות שאינן דיבור", "removeNonSpeechLinesHint": "השמט שורות שרק מתארות צליל, כמו \"[מוזיקה]\" או \"(גלים מתנפצים)\"", "removeRepeatedLines": "הסר שורות חוזרות", @@ -2512,7 +2723,7 @@ "cloneVoicePerLinePreparing": "לוקח את הקול של כל שורה מהוידאו...", "cloneVoicePerLineNeedsVideo": "שכפול הקול של כל שורה דורש את הוידאו שאליו שייכת הכתובית. פתח את הוידאו ונסה שוב.", "cloneVoicePerLineNoClips": "לא ניתן היה לקחת שמע מהוידאו, ולכן אין ממה לשכפל. ודא שלוידאו יש רצועת שמע.", - "cloneVoicePerLineNeedsOriginalSubtitleX": "{0} יכול לשכפל שורה רק כאשר הוא יודע מה נאמר בוידאו באותה שורה, מידע שמגיע מהכתובית בשפת המקור. לא נטענה כתובית מקורית, ולכן כל שורה תיאמר בקול המיובא הראשון במקום בקול שבוידאו.\n\nפתח את הכתובית המקורית (קובץ > פתח מקור...) לצד התרגום, ואז צור שוב.", + "cloneVoicePerLineTranscribeClipsXYZ": "{0} יכול לשכפל שורה רק כאשר ידוע מה נאמר בווידאו באותה שורה. הדבר אינו ידוע עבור {1} מתוך {2} שורות - בדרך כלל המידע מגיע מכתוביות בשפת המקור (קובץ > פתח מקור...).\n\nלתמלל שורות אלה מהווידאו באמצעות דיבור לטקסט כעת?\n\nכן: בחר את המנוע ואת השפה המדוברת בווידאו, וקטעי ההפניה יתומללו לפני יצירת הדיבור.\nלא: צור בכל זאת - שורות אלה יוקראו בקול רגיל במקום הקול שבווידאו.", "voiceCloneConsentTitle": "שכפול קול - לפני שמתחילים", "voiceCloneConsentHeader": "אתה עומד לשכפל קול", "voiceCloneConsentIntro": "שכפול מעתיק את קולו של אדם אמיתי. הדבר כרוך בכללים ברוב המקומות, ובאיחוד האירופי גם בחובות משפטיות החלות עליך, ולא על Subtitle Edit. נא לקרוא זאת פעם אחת.", @@ -2528,6 +2739,12 @@ "voiceCloneConsentDeclined": "שכפול קול אינו זמין עד לאישור תנאים אלה.", "advancedTtsAudioProcessing": "עיבוד שמע", "advancedTtsOutput": "פלט", + "advancedTtsVoiceCloning": "שכפול קול", + "cleanCloneReferences": "נקה הפניות לשכפול קול (Sidon)", + "cleanCloneReferencesDescription": "מסיר מוזיקה, רעש והדהוד מהשמע שממנו משוכפל קול: קטעים שנלקחו מהווידאו והקלטות שיובאו במנהל הקולות. משתמש במודל שחזור הדיבור Sidon ב-audio.cpp (הורדה של 940 MB). הקול המשוכפל כבר לא מעתיק את הרקע, אך דיבור שקט מאוד או חופף עלול לצאת עמום.", + "cleaningCloneReferencesDotDotDot": "מנקה הפניות לשכפול קול...", + "downloadSidonTitle": "להוריד את Sidon?", + "downloadSidonQuestionX": "ניקוי הפניות לשכפול קול דורש את מודל שחזור הדיבור Sidon ({0}).\n\nלהוריד אותו כעת? בלעדיו ההפניות ישמשו כפי שהן.", "rubberbandInstalled": "(מותקן)", "rubberbandNotFound": "(לא נמצא ב-FFmpeg)", "generationFolder": "תיקיית יצירה", @@ -2536,14 +2753,11 @@ "deleteTempFilesDescription": "מוחק את תיקיית היצירה כאשר חלון טקסט לדיבור נסגר. קובצי שמע ווידאו שנשמרו נשארים.", "piperSettings": "הגדרות Piper", "title": "טקסט לדיבור", - "textToSpeechEngine": "מנוע טקסט לדיבור", "reviewAudioSegments": "TTS - סקור מקטעי שמע", "reviewAudioSegmentsHistory": "TTS - סקור היסטוריית שמע", "stability": "יציבות", "similarity": "דמיון", "speakerBoost": "הגברת דובר", - "styleExaggeration": "הגזמת סגנון", - "regenerateAudioSelectedLine": "ייצר מחדש שמע עבור השורה שנבחרה", "generateSpeechFromText": "ייצר דיבור מטקסט", "testVoice": "בדוק קול", "addAudioToVideoFile": "הוסף שמע לקובץ וידאו", @@ -2562,22 +2776,98 @@ "videoEncodingSettings": "TTS - הגדרות קידוד וידאו", "elevenLabsSettings": "TTS - הגדרות ElevenLabs", "elevenLabsSettingsResetHint": "אפס את הגדרות ElevenLabs לערכי ברירת המחדל", + "provider": "ספק", + "openAiCompatibleSettings": "TTS - הגדרות תואמות OpenAI", + "customServerUrl": "כתובת URL של שרת מותאם אישית", + "customServerUrlHint": "נקודת הקצה המלאה לדיבור של שרת תואם OpenAI, בשימוש כאשר הספק הוא \"מותאם אישית\", לדוגמה http://localhost:8880/v1/audio/speech", + "customModels": "מודלים מותאמים אישית", + "customModelsHint": "שמות מודלים מופרדים בפסיקים המוצעים כאשר הספק הוא \"מותאם אישית\"", + "customVoices": "קולות מותאמים אישית", + "customVoicesHint": "שמות קולות מופרדים בפסיקים, בשימוש הספק \"מותאם אישית\" ומודלי OpenRouter שאינם מפרסמים רשימת קולות", + "instructions": "הוראות", + "instructionsHint": "סגנון דיבור אופציונלי, לדוגמה \"דבר בקול רגוע וחם\". נשלח רק למודלים שתומכים בכך (לא tts-1/tts-1-hd)", + "openAiSpeedHint": "מהירות דיבור מ-0.25 עד 4.0 (1.0 רגיל). לא כל מודל תומך בכך", + "outputFormat": "פורמט פלט", + "outputFormatHint": "פורמט השמע המבוקש מהשרת. \"אוטומטי\" מבקש MP3 ועובר ל-PCM עבור מודלים שמחזירים רק PCM (לדוגמה Gemini TTS)", "regenerateAudio": "ייצר שמע מחדש", "autoContinuePlaying": "המשך ניגון אוטומטית", "addingAudioToVideoFileDotDotDot": "מוסיף שמע לקובץ הוידאו...", "preparingMergeDotDotDot": "מכין מיזוג...", "importVoiceDotDotDot": "ייבוא קול...", + "renameVoiceDotDotDot": "שנה שם קול...", + "renameVoiceTitle": "שנה שם קול", + "voiceXCouldNotBeRenamedX": "לא ניתן היה לשנות את שם הקול '{0}': {1}", + "deleteVoiceDotDotDot": "מחק קול...", + "deleteVoiceTitle": "מחק קול", + "deleteVoiceXQuestion": "למחוק את הקול '{0}'?\n\nהקלטת ההפניה והקבצים שלה יוסרו מהדיסק.", + "voiceXCouldNotBeDeletedX": "לא ניתן היה למחוק את הקול '{0}': {1}", "voiceImportSuccessTitle": "הקול יובא בהצלחה", "voiceXImported": "הקול '{0}' יובא בהצלחה", "dropAudioFileHereToImportVoice": "גרור קובץ שמע לכאן כדי לייבא קול", "dropAudioFileHereHint": ".wav או .mp3", "voiceCloneTranscriptTitle": "הזן את תמלול השמע (נדרש לשכפול קול)", + "voiceManagerTitle": "TTS - מנהל קולות", + "voiceManagerDotDotDot": "מנהל קולות...", + "voiceManagerMenuItem": "מנהל קולות TTS...", + "speakFromCurrentLineTitle": "הקרא מהשורה הנוכחית", + "speakFromCurrentLineDotDotDot": "הקרא מהשורה הנוכחית...", + "speakFromCurrentLineHint": "מקריא את השורות בקול אחת אחרי השנייה, החל מהשורה הנוכחית. הקש Escape או לחץ על שורה אחרת כדי לעצור.", + "stopSpeaking": "הפסק להקריא", + "speakingLineX": "מקריא שורה {0}... (Escape לעצירה)", + "playWithSpeechTitle": "נגן עם דיבור", + "playWithSpeechDotDotDot": "נגן עם דיבור...", + "playWithSpeechHint": "מנגן את הווידאו ומקריא כל שורה כאשר הווידאו מגיע אליה. השהה ודלג כרגיל; הקש Escape כדי לעצור.", + "lowerVideoVolumeWhileSpeaking": "הנמך את עוצמת הווידאו בזמן ההקראה", + "pauseVideoWhenSpeechRunsLate": "השהה את הווידאו כאשר הדיבור גולש לשורה הבאה", + "waitingForSpeechLineX": "יוצר דיבור עבור שורה {0}... (Escape לעצירה)", + "voiceKindClone": "קול משוכפל", + "voiceKindPreset": "מובנה", + "voiceKindModel": "מודל קול", + "voiceKindOnline": "מקוון", + "transcript": "תמליל", + "transcriptRequiredHint": "נדרש - המנוע קורא תמליל זה של ההקלטה (ref-text) בעת השכפול", + "transcriptOptionalHint": "אופציונלי - תמליל מדויק של ההקלטה משפר את השכפול", + "saveTranscript": "שמור תמליל", + "searchVoices": "חפש קולות", + "loadingVoicesDotDotDot": "טוען קולות...", + "noVoicesForEngine": "אין קולות - ייבא הקלטה או הורד חבילת קולות", + "noVoicesMatchFilter": "אין קולות התואמים לחיפוש", + "copyVoiceTo": "העתק קול אל", + "copyVoiceToDotDotDot": "העתק קול למנוע...", + "copyingVoiceXToYDotDotDot": "מעתיק את הקול '{0}' אל {1}...", + "voiceXCopiedToY": "הקול '{0}' הועתק אל {1}", + "voiceXCouldNotBeCopiedToY": "לא ניתן היה להעתיק את הקול '{0}' אל {1} - ראה את היומן לפרטים", + "voiceXAlreadyExistsInYContinue": "קול בשם '{0}' כבר קיים ב-{1}.\n\nלהעתיק בכל זאת?", + "openVoicesFolder": "פתח תיקיית קולות", + "downloadVoicePacksDotDotDot": "הורד חבילות קולות...", + "downloadVoicePacksTitle": "TTS - הורדת חבילות קולות", + "voicePackIntro": "חבילות קולות הן ערכות של הקלטות קצרות ונקיות עם תמלילים, מוכנות לשכפול. כל חבילה מיובאת למנוע שנבחר (קולות שכבר קיימים מדולגים) וכוללת קובץ ATTRIBUTION.txt עם הרישיון והמקורות שלה.", + "voicePackDetailsXVoicesYSizeZLicense": "{0} קולות · {1} · {2}", + "installToEngine": "התקן במנוע", + "downloadAndInstall": "הורד והתקן", + "selectAtLeastOneVoicePack": "בחר לפחות חבילת קולות אחת", + "downloadingXDotDotDot": "מוריד את {0}...", + "installingXDotDotDot": "מתקין את {0}...", + "xVoicesInstalledYSkipped": "{0} קולות הותקנו ({1} כבר קיימים)", "useSpeechToTextDotDotDot": "השתמש בדיבור לטקסט...", "advancedTtsSettings": "הגדרות TTS מתקדמות", "proAudioPostProcessing": "עיבוד שמע מקצועי משלים", "proAudioPostProcessingDescription": "מחיל חמימות EQ, שער רעשים (noise gate), דחיסה, נרמול עוצמה (-16 LUFS), ועמעום כניסה/יציאה על כל מקטע.", + "generatingSpeechSegmentXOfY": "יוצר דיבור: מקטע {0} מתוך {1}", + "adjustingSpeedSegmentXOfY": "מתאים מהירות: מקטע {0} מתוך {1}", + "mergingAudioSegmentXOfY": "ממזג שמע: מקטע {0} מתוך {1}", + "postProcessingSegmentXOfY": "עיבוד לאחר: מקטע {0} מתוך {1}", "audioDucking": "עמעום שמע ברקע", "audioDuckingDescription": "מפחית את עוצמת השמע של הוידאו המקורי ומערבב אותו עם שמע ה-TTS, כך שעדיין ניתן לשמוע את פס הקול המקורי ברקע בעמימות.", + "removeOriginalSpeech": "הסר את הדיבור המקורי (איטי)", + "removeOriginalSpeechDescription": "שומר את המוזיקה ואפקטי הקול של הווידאו המקורי אך מסיר את הדיבור שלו, ומערבב את הדיבור החדש מעליהם. לוקח בערך כאורך הווידאו עצמו עם GPU, ופי כמה יותר בלעדיו. כאשר עמעום שמע ברקע פעיל, העוצמה שלו חלה על המוזיקה והאפקטים. חל רק כאשר הדיבור מתווסף לקובץ הווידאו.", + "removingOriginalSpeech": "מסיר את הדיבור המקורי...", + "removeOriginalSpeechFailed": "לא ניתן היה להסיר את הדיבור המקורי - הדיבור נוסף לווידאו בלי להסירו.", + "speechRemovalModel": "מודל", + "speechRemovalModelDescription": "האיכות הטובה ביותר שומרת את מירב המוזיקה ואפקטי הקול. מהיר הוא בערך פי שלושה מהיר יותר, עם מעט יותר אובדן של המוזיקה.", + "speechRemovalBestQuality": "האיכות הטובה ביותר (Mel-Band RoFormer)", + "speechRemovalFast": "מהיר (HTDemucs)", + "videoTruncatedWarning": "התמונה בקובץ הווידאו החדש נעצרת לאחר {0}, אך אורך הווידאו המקורי הוא {1} - התמונה תקפא בזמן שהקול ממשיך.\n\nהקובץ נשמר. ראה את error-log.txt בתיקיית הנתונים של Subtitle Edit לפלט של ffmpeg.", "originalVolumePercent": "עוצמת שמע מקורית %", "vadSilenceCompression": "דחיסת שתיקות VAD", "vadSilenceCompressionDescription": "מקצר הפסקות בין מילים לפני שינוי קצב. משתמש בזיהוי פעילות קולית (VAD) כדי לדחוס רק רגעי שתיקה תוך שמירה על הדיבור ללא שינוי. זהו השלב המועדף - הוא מקצר את המשך ללא אובדן איכות.", @@ -2644,7 +2934,6 @@ "subtitleMergedLinesAppliedPlural": "{0} מיזוגי שורות הוחלו מטקסט לדיבור" }, "shotChanges": { - "titleGenerateOrImport": "ייצור/ייבוא מעברי שוט", "generateShotChanges": "צור מעברי שוט", "importShotChanges": "ייבא מעברי שוט", "generateShotChangesWithFfmpeg": "צור מעברי שוט עם FFmpeg", @@ -2654,7 +2943,9 @@ "timeCodeFormatColon": "פורמט קוד זמן:", "shotChangesList": "רשימת מעברי שוט", "shotChangesClearQuestion": "האם אתה בטוח שברצונך לנקות את כל שינויי השוט?", - "deleteSelectedShotChangeQuestion": "האם אתה בטוח שברצונך למחוק את שינוי השוט שנבחר?" + "deleteSelectedShotChangeQuestion": "האם אתה בטוח שברצונך למחוק את שינוי השוט שנבחר?", + "shotChanges": "מעברי שוט", + "exportShotChanges": "ייצוא מעברי שוט" }, "chapters": { "title": "פרקים", @@ -2684,7 +2975,6 @@ "scaleTimesDescription": "המר את זמני כל הפרקים מקצב פריימים אחד לאחר.", "fromFrameRate": "מ-", "toFrameRate": "אל", - "apply": "החל", "writeToVideo": "כתוב לוידאו...", "writeToVideoTitle": "כתוב פרקים לוידאו", "writeToVideoDescription": "הפרקים נכתבים לתוך עותק של קובץ הוידאו. דבר אינו מקודד מחדש, ולכן הפעולה מהירה וללא אובדן איכות.", @@ -2694,7 +2984,6 @@ "writtenToX": "הפרקים נכתבו אל {0}", "unableToWriteChapters": "לא ניתן לכתוב פרקים לקובץ הוידאו.", "chaptersSavedToX": "הפרקים נשמרו אל {0}", - "noVideoLoaded": "לא נטען וידאו", "emptyListCallToAction": "אין עדיין פרקים - הוסף אחד במיקום הוידאו, או ייבא אותם מוידאו או מקובץ." }, "videoOcr": { @@ -2705,10 +2994,6 @@ "bottomHalf": "חצי תחתון", "fullFrame": "פריים מלא", "engine": "מנוע OCR", - "language": "שפה", - "url": "URL", - "model": "מודל", - "apiKey": "מפתח API", "scan": "סרוק", "framesPerSecond": "פריימים לשנייה", "textBrightnessMinimum": "בהירות טקסט מינימלית (0=כבוי)", @@ -2723,10 +3008,10 @@ "runningOcrXY": "מריץ OCR... {0}/{1}", "noLinesFoundTitle": "לא נמצאו כתוביות", "noLinesFoundMessage": "לא נמצא טקסט באזור הסריקה - נסה להתאים את אזור הסריקה, המנוע או סף הבהירות המינימלי.", + "ocrStoppedEarlyMessage": "מנוע ה-OCR נעצר לפני שכל הפריימים נקראו, ולכן השורות שנמצאו עד כה נשמרו והשאר חסרות.{0}{0}{1}", "linesFoundX": "נמצאו {0} שורות", "refiningTimingXY": "מדייק תזמון... {0}/{1}", "fixOcrErrors": "תקן שגיאות OCR", - "dictionary": "מילון", "editLineX": "ערוך שורה {0}", "downloadDictionaryHint": "הורד מילון לבדיקת איות...", "framesPerSecondHint": "כמה פריימים בשנייה נסרקים. 5 מספיק לכתוביות רגילות; ערך גבוה יותר קולט שורות קצרות מאוד ומהדק את הקיבוץ, אך עולה בזמן OCR רב יותר.", @@ -2743,7 +3028,58 @@ "testOcr": "בדוק פריים נוכחי", "testOcrRunning": "בודק OCR על הפריים הנוכחי...", "testOcrResultX": "תוצאת בדיקה: {0}", - "testOcrNoTextFound": "בדיקה: לא נמצא טקסט באזור הסריקה" + "testOcrNoTextFound": "בדיקה: לא נמצא טקסט באזור הסריקה", + "engineSettings": "הגדרות מנוע OCR", + "engineBuiltIn": "מובנה במערכת ההפעלה", + "engineExternalServer": "שרת חיצוני (מותקן ומנוהל מחוץ ל-Subtitle Edit)", + "engineCloudApi": "API בענן (דורש מפתח API)", + "engineNothingToInstall": "אין מה להתקין", + "engineModelsMissing": "המנוע מותקן, חסרים מודלים", + "website": "אתר אינטרנט" + }, + "backgroundMusic": { + "title": "צור מוזיקת רקע", + "generateBackgroundMusicDotDotDot": "צור מוזיקת רקע...", + "preset": "ערכה מוגדרת מראש", + "prompt": "הנחיה", + "tempoBpm": "טמפו (BPM)", + "generateSeconds": "צור (שניות)", + "seed": "זרע (Seed)", + "randomSeed": "אקראי", + "outputLength": "אורך הפלט", + "outputLengthVideoX": "{0} (אורך הווידאו - המוזיקה חוזרת בלולאה חלקה)", + "musicVolumePercent": "עוצמת המוזיקה (%)", + "removeExistingAudioTracks": "הסר רצועות שמע קיימות", + "originalAudioVolumePercent": "עוצמת השמע המקורי (%)", + "saveAudioDotDotDot": "שמור שמע...", + "addToVideoDotDotDot": "הוסף לווידאו...", + "engineInfo": "ACE-Step 1.5 Turbo באמצעות audio.cpp (רישיון MIT) - פועל באופן מקומי", + "presetCooking": "בישול / אפייה", + "presetTech": "טכנולוגיה / סקירת גאדג'טים", + "presetForest": "יער / טבע", + "presetRelaxingPiano": "פסנתר מרגיע", + "presetLofiVlog": "ולוג Lo-fi", + "presetCorporate": "תאגידי / סרטון הסבר", + "loadingModel": "טוען מודל...", + "composing": "מלחין...", + "generatingAudio": "יוצר שמע...", + "decodingAudio": "מפענח שמע...", + "creatingLoop": "יוצר לולאה חלקה...", + "resultLoopXYZ": "לולאה: {0} ב-{1} BPM, התאמת חיבור {2}%", + "resultNoLoopX": "המוזיקה מוכנה: {0}", + "addingMusicToVideo": "מוסיף מוזיקה לווידאו...", + "downloadModelTitle": "להוריד מודל מוזיקה?", + "downloadModelQuestionX": "יצירת מוזיקה דורשת את המודל ACE-Step 1.5 ({0}).\n\nלהוריד את המודל?", + "downloadingModel": "מוריד את המודל ACE-Step 1.5...", + "saveAudioTitle": "שמור מוזיקת רקע", + "audioFileSavedX": "קובץ השמע נשמר: {0}", + "unableToGenerateMusic": "לא ניתן ליצור מוזיקה", + "unableToAddMusicToVideo": "לא ניתן להוסיף מוזיקה לווידאו", + "outputLengthTextToSpeech": "עוקב אחר הדיבור שנוצר - המוזיקה חוזרת בלולאה חלקה ונחלשת בזמן שמישהו מדבר", + "addBackgroundMusic": "הוסף מוזיקת רקע", + "addBackgroundMusicHint": "צור מוזיקה באופן מקומי עם ACE-Step 1.5 ומקם אותה מתחת לדיבור - היא נחלשת בזמן שמישהו מדבר", + "generatingBackgroundMusicDotDotDot": "יוצר מוזיקת רקע...", + "mixingBackgroundMusicDotDotDot": "מערבב מוזיקת רקע..." }, "goToVideoPosition": "עבור למיקום וידאו", "goToVideoPositionDotDotDot": "עבור למיקום בוידאו...", @@ -2754,29 +3090,87 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "כתוביות משניות בנגן הוידאו, פתח...", "openSecondarySubtitleOnVideoPlayer": "כתוביות משניות (בנגן הוידאו)", "removeSecondarySubtitleOnVideoPlayer": "כתוביות משניות בנגן הוידאו, הסר", + "editSecondarySubtitleSettings": "ערוך הגדרות כתוביות משניות", + "editSecondarySubtitleSettingsDotDotDot": "ערוך הגדרות כתוביות משניות...", + "secondarySubtitleRememberSettings": "זכור הגדרות אלה", + "secondarySubtitleDoNotShowAgain": "אל תציג חלון זה שוב", + "secondarySubtitleJustifyLines": "יישר שורות לשני הצדדים", "openRecentVideo": "פתח וידאו אחרון", "clearRecentVideos": "נקה וידאו אחרונים", "cutVideoTitle": "חיתוך וידאו", "cutVideoDotDotDot": "חיתוך וידאו...", + "remuxVideoTitle": "Remux וידאו", + "remuxVideoDotDotDot": "Remux וידאו...", + "remuxVideoInputVideo": "וידאו קלט:", + "remuxVideoMultipleTracksRequiresMkv": "מספר רצועות שמע או כתוביות דורשות את מכל MKV. פורמט הפלט הוחלף אוטומטית ל-.mkv.", + "remuxVideoOutputFormat": "פורמט פלט:", + "remuxVideoOutputFile": "קובץ פלט:", + "remuxVideoRemuxing": "מבצע Remux לווידאו ולשמע...", + "remuxVideoFinalizing": "מסיים את קובץ הפלט (מעביר את האינדקס להתחלה)...", + "remuxVideoCompleted": "ה-Remux של הווידאו הסתיים בהצלחה.", + "remuxVideoFailed": "ה-Remux של הווידאו נכשל.", + "remuxVideoPleaseSelectBoth": "נא לבחור גם קובץ וידאו וגם קובץ שמע.", + "remuxVideoAssRequiresMkv": "כתוביות ASS/SSA דורשות את מכל MKV כדי לשמר את כל העיצוב והסגנונות.", + "remuxVideoSccRequiresMov": "כתוביות Scenarist (.scc) מוטמעות ככתוביות סגורות CEA-608, הדורשות את מכל MOV או MPG. פורמט הפלט הוחלף אוטומטית ל-.mov.", + "remuxVideoSccNotWithWebM": "כתוביות סגורות Scenarist (.scc) דורשות את מכל MOV, שאינו יכול להכיל את וידאו ה-VP9/AV1 של קובץ .webm. הסר את קובץ ה-.scc או המר אותו לפורמט כתוביות אחר.", + "remuxVideoMpgMaxTwoCaptionTracks": "קובץ .mpg מכיל לכל היותר שתי רצועות כתוביות סגורות (CC1 ו-CC3) - הסר קובצי כתוביות כך שיישארו אחד או שניים.", + "remuxVideoMccRequiresMpg": "כתוביות MacCaption (.mcc) מוטמעות ככתוביות סגורות CEA-608/708 בווידאו MPEG-2, הדורש את מכל MPG. פורמט הפלט הוחלף אוטומטית ל-.mpg.", + "remuxVideoMpgReencodeVideoX": "כתוביות סגורות בקובץ .mpg דורשות וידאו MPEG-2, והווידאו הוא {0}. לקודד מחדש את הווידאו ל-MPEG-2? הפעולה לוקחת זמן רב יותר ומורידה מעט את האיכות.", + "remuxVideoFileHasNoAudioX": "ל-\"{0}\" אין רצועת שמע, ולכן לא ניתן להשתמש בו כמקור שמע.", + "remuxVideoAddingClosedCaptions": "מוסיף כתוביות סגורות...", + "remuxVideoSelectAudioTrack": "בחר רצועת שמע", + "remuxVideoSelectAudioTrackFor": "בחר רצועת שמע עבור {0}", + "remuxVideoSelectAudioTrackPrompt": "הקובץ '{0}' מכיל {1} רצועות שמע. נא לבחור את רצועת השמע ל-Remux:", + "remuxVideoVideoFile": "וידאו", + "remuxVideoAudioFile": "שמע", + "remuxVideoAudioFiles": "קובצי שמע:", + "remuxVideoSubtitleFiles": "קובצי כתוביות (אופציונלי, כתוביות רכות):", + "remuxVideoSelectAudioTrackDotDotDot": "בחר רצועת שמע...", + "remuxVideoFilesX": "{0} קבצים", + "remuxVideoMixAudio": "ערבב את השמע לרצועה אחת", + "remuxVideoVolumePercent": "עוצמה %:", + "remuxVideoVolumeX": "עוצמה {0}%", + "remuxVideoFastStart": "בצע אופטימיזציה להזרמה ברשת (העבר אינדקס להתחלה - איטי יותר)", "embedSubtitlesDotDotDot": "הוסף/הסר כתוביות מובנות...", "generateTimeCodes": "צור קודי זמן", "checkeredImage": "תמונה משובצת", - "saveVideoAsTitle": "שמור וידאו בשם", "promptForFfmpegParamsAndGenerate": "בקש פרמטרי FFmpeg וייצר", "cutVideoCutSegments": "חתוך מקטעים", "cutVideoMergeSegments": "מזג מקטעים", "cutVideoSplitSegments": "שמור כל מקטע בנפרד", - "cutVideoType": "סוג חיתוך", - "mpvRenderAuto": "אוטומטי", - "mpvRenderNative": "מקומי (Native)", - "mpvRenderOpenGl": "OpenGL", - "mpvRenderSoftware": "תוכנה (איטי)", "cutVideoAlsoCutSubtitle": "חתוך גם את הכתובית", "cutVideoSubtitleFileGeneratedX": "נוצר קובץ כתוביות: {0}", + "cutVideoTransition": "מעבר בין מקטעים", + "cutVideoTransitionDurationSeconds": "משך (שניות)", + "cutVideoFadeInSeconds": "עמעום משחור בהתחלה (שניות)", + "cutVideoFadeOutSeconds": "עמעום לשחור בסוף (שניות)", + "cutVideoPreviewTransition": "תצוגה מקדימה של המעבר", + "cutVideoPreviewTransitionTitle": "תצוגה מקדימה של מעבר", + "cutVideoPreviewNeedsJoin": "אין חיבור לתצוגה מקדימה - הוסף לפחות שני מקטעים למיזוג, או מקטע לחיתוך מהאמצע.", + "cutVideoTransitionInfoX": "כל מעבר חופף לחלקים שהוא מחבר, ולכן הפלט מתקצר ב-{0} שניות לכל חיבור. כתובית חתוכה מתוזמנת מחדש בהתאם.", + "cutVideoTransitionFade": "עמעום", + "cutVideoTransitionFadeBlack": "עמעום דרך שחור", + "cutVideoTransitionFadeWhite": "עמעום דרך לבן", + "cutVideoTransitionFadeGrays": "עמעום דרך אפור", + "cutVideoTransitionDissolve": "התמוססות", + "cutVideoTransitionWipeLeft": "מחיקה שמאלה", + "cutVideoTransitionWipeRight": "מחיקה ימינה", + "cutVideoTransitionWipeUp": "מחיקה למעלה", + "cutVideoTransitionWipeDown": "מחיקה למטה", + "cutVideoTransitionSlideLeft": "החלקה שמאלה", + "cutVideoTransitionSlideRight": "החלקה ימינה", + "cutVideoTransitionSlideUp": "החלקה למעלה", + "cutVideoTransitionSlideDown": "החלקה למטה", + "cutVideoTransitionSmoothLeft": "מעבר רך שמאלה", + "cutVideoTransitionSmoothRight": "מעבר רך ימינה", + "cutVideoTransitionCircleOpen": "פתיחת עיגול", + "cutVideoTransitionCircleClose": "סגירת עיגול", + "cutVideoTransitionRadial": "רדיאלי", + "cutVideoTransitionPixelize": "פיקסול", + "cutVideoTransitionBlur": "טשטוש", "importCurrentSubtitle": "ייבא כתובית נוכחית", "addRemoveEmbeddedSubtitlesTitle": "הוסף/הסר כתוביות מובנות", "addCurrentSubtitle": "הוסף כתובית נוכחית", - "titleOrLanguage": "כותרת/שפה", "viewMatroskaTrackX": "הצג ערוץ Matroska - {0}", "resolutionSeparator": "x", "openFromUrlTitle": "פתח קובץ וידאו מכתובת URL", @@ -2786,9 +3180,7 @@ "openFromUrlDownloadAndOpen": "הורד ופתח", "openFromUrlDownloadAndOpenDescription": "שמור את הוידאו באופן מקומי, ואז פתח אותו.", "openFromUrlDownloadAndOpenNote": "נדרש עבור דיבור לטקסט ונקודות גל שמע.", - "openFromUrlMissing": "Please enter a video URL first.", "openFromUrlDownloadingTitle": "מוריד וידאו", - "openFromUrlSaveAs": "שמור וידאו בשם", "openFromUrlDownloadSubtitles": "הורד גם כתוביות", "openFromUrlDownloadVideo": "הורד וידאו", "openFromUrlIncludeAutoGeneratedSubtitles": "כלול כתוביות שנוצרו אוטומטית (שפת המקור)", @@ -2825,8 +3217,11 @@ "reEncodeGeneratingDone": "הייצור הושלם", "reEncodeGeneratedFilesX": "קבצים שנוצרו ({0}):", "reEncodeFfmpegParameters": "פרמטרי FFmpeg", + "analyzingVideoX": "מנתח וידאו... {0}% {1}", + "analyzingVideoXofY": "מנתח וידאו {0}/{1}... {2}% {3}", + "backgroundImageFileNotSelected": "לא נבחר קובץ תמונת רקע", + "backgroundImageFileDoesNotExistX": "קובץ תמונת הרקע אינו קיים: {0}", "addRemoveEmbeddedSubtitlesMp4Title": "הוסף/הסר כתוביות מובנות (MP4)", - "embeddedTrackColumnNew": "חדש", "embeddedTrackNoSubtitlesFoundTitle": "לא נמצאו כתוביות", "embeddedTrackNoSubtitlesFoundMessage": "קובץ הכתוביות שנבחר אינו מכיל כתוביות.", "embeddedTrackNoTracksTitle": "לא נוספו רצועות", @@ -2838,12 +3233,12 @@ "embeddedTrackGeneratingVideoXY": "יוצר וידאו... {0}% {1}", "embeddedTrackGeneratingVideo": "יוצר וידאו...", "mp4FilesFilter": "קובצי MP4", + "embeddedTracksPickVideoHint": "בחר קובץ וידאו, או גרור אחד לכאן, כדי לראות את רצועות הכתוביות שלו.", "voices": "קולות", "presets": "ערכות מוגדרות מראש", "talkerX": "דובר {0}", "baseModel": "מודל בסיס", "turboModel": "מודל טורבו", - "ttsUpdateX": "עדכן את {0}", "ttsEngineNotInstalled": "{0} אינו מותקן", "ttsEngineUpdateAvailable": "{0} - קיים עדכון", "ttsEngineTooOldUpdateRequired": "{0} ישן מדי - נדרש עדכון", @@ -2866,19 +3261,25 @@ "cloneVoiceTo": "שכפל קול אל", "cloneVoiceNameTitle": "שם הקול החדש", "cloneVoiceExtractFailed": "לא ניתן היה לחלץ שמע עבור השורה שנבחרה.", + "lineXHasNoDuration": "לשורה {0} אין משך (זמן הסיום אינו אחרי זמן ההתחלה), ולכן אין שמע לחלץ.", + "audioClipsSkippedLinesX": "לא ניתן היה לחלץ שמע עבור שורות אלה, ולכן הן דולגו: {0}", "toggleShotChange": "החלף מעבר שוט", "resetWaveformZoomAndSpeed": "אפס זום ומהירות של גל השמע", "showOriginalSubtitle": "הצג כתובית מקורית", + "timelineGroupTracksBy": "קבץ רצועות כתוביות לפי", + "timelineShowThumbnails": "הצג תמונות ממוזערות של הווידאו", + "showSpeechOnly": "הצג דיבור בלבד (יצירה איטית)", + "isolatingSpeechForWaveformX": "מבודד דיבור עבור גל השמע... {0}", + "isolatingSpeechForWaveformFailed": "לא ניתן היה לבודד את הדיבור עבור גל השמע - ראה את יומן הכלים", + "speechOnlyWaveformReady": "גל השמע מציג כעת דיבור בלבד", "showOnlyWaveform": "הצג רק גל שמע", "showOnlySpectrogram": "הצג רק ספקטרוגרמה", "showWaveformAndSpectrogram": "הצג גל שמע וספקטרוגרמה", - "spectrogramClassic": "קלאסי", "spectrogramClassicViridis": "Viridis", "spectrogramClassicPlasma": "Plasma", "spectrogramClassicInferno": "Inferno", "spectrogramClassicTurbo": "Turbo", "spectrogramNeon": "ניאון", - "waveformDrawStyleClassic": "קלאסי", "waveformDrawStyleFancy": "Fancy", "setVideoPositionAndPauseAndSelectSubtitle": "קבע מיקום וידאו, השהה ובחר כתובית", "setVideopositionAndPauseAndSelectSubtitleAndCenter": "קבע מיקום וידאו, השהה, בחר כתובית ומרכז", @@ -2888,7 +3289,6 @@ }, "sync": { "visualSync": "סנכרון חזותי", - "sync": "סנכרון", "startScene": "סצנת התחלה", "endScene": "סצנת סיום", "playTwoSecondsAndBack": "נגן 2 שניות וחזור", @@ -2904,19 +3304,18 @@ "adjustSelectedLinesAndForward": "התאם שורות שנבחרו והלאה", "toFrameRate": "לקצב פריימים", "fromFrameRate": "מקצב פריימים", + "videoXFrameRateY": "{0} - {1} fps", "adjustAllTimes": "התאם את כל הזמנים (הצג מוקדם/מאוחר יותר)", "showEarlier": "הצג מוקדם יותר", "showLater": "הצג מאוחר יותר", - "changeFrameRate": "שנה קצב פריימים", "setSyncPoint": "קבע נקודת סנכרון", "setSyncPointViaVideo": "קבע נקודת סנכרון באמצעות הוידאו...", "syncPointTimeCode": "קוד זמן של נקודת הסנכרון", "syncPoints": "נקודות סנכרון", "pointSync": "סנכרון נקודתי", "pointSyncViaOther": "סנכרון נקודתי באמצעות כתובית אחרת", - "adjustmentX": "התאמה: {0}", - "totalAdjustmentX": "התאמה כוללת: {0}", - "syncPointCandidateInfo": "שורות המתחילות לאחר {0}+ שניות של שתיקה מודגשות - לרוב הן נקודות סנכרון אמינות", + "syncPointCandidateAfterInfo": "שורות שאחריהן {0}+ שניות של שקט מודגשות - לרוב הן נקודות סנכרון אמינות", + "gapAfter": "מרווח אחרי", "adjustAllShortcuts": "קיצורי מקשים:\r\n\r\n• Shift + חץ שמאלה/ימינה: הזזה ב-10 מילישניות\r\n• Ctrl + חץ שמאלה/ימינה: הזזה ב-100 מילישניות\r\n• Alt + חץ שמאלה/ימינה: הזזה ב-500 מילישניות", "adjustAllShortcutsFrames": "קיצורי מקלדת:\r\n\r\n• Shift + שמאלה/ימינה: הזז פריים אחד\r\n• Ctrl + שמאלה/ימינה: הזז 10 פריימים\r\n• Alt + שמאלה/ימינה: הזז שנייה אחת", "offsetInSeconds": "היסט בשניות", @@ -2936,6 +3335,7 @@ "lineMerge": "מיזוג שורות", "delayInSecondsBetweenRequests": "השהיה בשניות בין בקשות", "maxBytesPerRequest": "מקסימום בייטים לבקשה", + "keepMusicLinesUntranslated": "אל תתרגם שורות בתוך סמלי מוזיקה (♪ ... ♪)", "promptText": "הנחיית טקסט", "resetPromptToDefault": "אפס את ההנחיה לברירת המחדל", "translateEachLineSeparately": "תרגם כל שורה בנפרד", @@ -2949,11 +3349,10 @@ "readyToTranslate": "מוכן לתרגום", "translating": "מתרגם...", "translationComplete": "התרגום הושלם", + "translateInPlaceNoOriginal": "תרגם במקום (אל תיצור מקור)", "translationCancelled": "התרגום בוטל", "swapLanguages": "החלף שפות מקור ויעד", "xIsAlreadyDownloadedReDownload": "{0} כבר הורד. האם להוריד מחדש?", - "advancedDotDotDot": "מתקדם...", - "advancedSettings": "הגדרות מתקדמות", "advancedSettingsSubtitle": "אפשרויות אצווה, הקשר ודגימה עבור מנוע llama.cpp המתקדם", "context": "הקשר", "synopsis": "תקציר", @@ -2977,6 +3376,7 @@ "useOnlyExtraServerParametersHint": "הפעל את llama-server עם הפרמטרים שלמעלה במקום הכוונון של Subtitle Edit - רק המודל, המארח והפורט עדיין נקבעים", "serverRunningAtX": "השרת פועל בכתובת {0}", "customPromptHint": "הוראות מותאמות אישית ({0} = שפת המקור, {1} = שפת היעד); ריק = הנחיה מובנית", + "editTranslationHint": "לחץ על התרגום של השורה שנבחרה כדי לערוך אותו (Enter שומר, Escape מבטל)", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp דורש הורדה של מנוע llama-server ושל מודל תרגום. להוריד כעת?", "llamaCppDownloadEnginePrompt": "llama.cpp דורש הורדה של מנוע llama-server. להוריד כעת?", "llamaCppDownloadModelPrompt": "llama.cpp דורש הורדה של מודל התרגום שנבחר. להוריד כעת?" @@ -3014,8 +3414,14 @@ "checkForUpdatesChannelStableAndBeta": "גרסאות יציבות וגרסאות בטא", "assaAutoSetResolution": "ASSA: קבע רזולוציה (PlayResX/PlayResY) מהוידאו כאשר נפתח וידאו", "assaAutoSetResolutionPrompt": "ASSA: שאל לפני שינוי הרזולוציה להתאמה לוידאו (אחרת המר אוטומטית)", + "videoControls": "פקדי וידאו", + "videoControlsEdit": "ערוך פקדי וידאו...", + "videoControlsPositionText": "טקסט מיקום / משך", + "videoControlsVideoFileName": "שם קובץ הווידאו", + "videoControlsPlayerName": "שם נגן הווידאו", "mergeKeepEndTime": "מיזוג שורות: שמור על זמן הסיום (אפשר חפיפה עם הכתובית הבאה)", "mergeKeepEndTimeOnlyAssa": "מיזוג שורות: שמור על זמן הסיום רק עבור \"Advanced Sub Station Alpha\"", + "mergeAutoBreak": "מיזוג שורות: פצל אוטומטית את הטקסט הממוזג (כבוי שומר את מעברי השורה המקוריים)", "defaultSaveLocation": "מיקום שמירה ברירת מחדל", "defaultSaveLocationSourceFileFolder": "תיקיית קובץ הכתוביות/הוידאו", "defaultSaveLocationLastUsedFolder": "התיקייה האחרונה שהייתה בשימוש", @@ -3023,6 +3429,7 @@ "defaultSaveLocationSubtitleFileFolder": "תיקיית קובץ הכתוביות", "defaultSaveLocationCustomFolder": "תיקייה מותאמת אישית", "subtitleGridFormattingHideTags": "הסתר תגים", + "subtitleGridFormattingShowFormattingKeepTags": "הצג עיצוב, שמור תגיות שאינן חזותיות", "musicSymbolsToReplace": "סמלי מוזיקה להחלפה (מופרדים בפסיק)", "musicSymbol": "סמל מוזיקלי", "colorWordsPerMinute": "צבע מילים/דקה אם גבוה מדי", @@ -3033,7 +3440,6 @@ "dialogStyleDashBothLinesWithSpace": "מקף בשתי השורות עם רווח", "dialogStyleDashBothLinesWithoutSpace": "מקף בשתי השורות ללא רווח", "continuationStyle": "סגנון המשך שורה", - "continuationStyleNone": "ללא", "continuationStyleNoneTrailingDots": "ללא, נקודות להפסקות (בסוף בלבד)", "continuationStyleNoneLeadingTrailingDots": "ללא, נקודות להפסקות", "continuationStyleNoneTrailingEllipsis": "ללא, שלוש נקודות (...) להפסקות (בסוף בלבד)", @@ -3044,7 +3450,6 @@ "continuationStyleLeadingTrailingEllipsis": "שלוש נקודות (...)", "continuationStyleLeadingTrailingDash": "מקף", "continuationStyleLeadingTrailingDashDots": "מקף, אך נקודות להפסקות", - "continuationStyleCustom": "מותאם אישית", "cpsLineLengthStyle": "קצב תווים לשנייה/אורך שורה", "cpsLineLengthStyleCalcAll": "ספור את כל התווים", "cpsLineLengthStyleCalcNoSpaceCpsOnly": "ספור הכל למעט רווחים, תווים לשנייה בלבד", @@ -3057,27 +3462,11 @@ "cpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly": "ללא רווחים או סימני פיסוק, CPS בלבד", "cpsLineLengthStyleCalcIgnoreArabicDiacritics": "התעלם מסימני ניקוד ערביים", "cpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "התעלם מסימני ניקוד ערביים, ללא רווח", - "timeCodeModeHhMmSsMs": "שעות:דקות:שניות:מילישניות", - "timeCodeModeHhMmSsFf": "שעות:דקות:שניות:פריימים", - "splitBehaviorPrevious": "הוסף מרווח משמאל לנקודת הפיצול (מיקוד ימין)", - "splitBehaviorHalf": "הוסף מרווח במרכז נקודת הפיצול (מיקוד שמאל)", - "splitBehaviorNext": "הוסף מרווח מימין לנקודת הפיצול (מיקוד שמאל)", - "subtitleListActionNothing": "אל תעשה כלום", - "subtitleListActionVideoGoToPositionAndPause": "עבור למיקום הוידאו והשהה", - "subtitleListActionVideoGoToPositionAndPlay": "עבור למיקום הוידאו ונגן", "subtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "עבור למיקום הוידאו, נגן את הכתובית הנוכחית והשהה", - "subtitleListActionEditText": "עבור לתיבת עריכת הטקסט", "subtitleListActionVideoGoToPositionMinus1SecAndPause": "עבור למיקום הוידאו פחות שנייה אחת והשהה", "subtitleListActionVideoGoToPositionMinusHalfSecAndPause": "עבור למיקום הוידאו פחות חצי שנייה והשהה", "subtitleListActionVideoGoToPositionMinus1SecAndPlay": "עבור למיקום הוידאו פחות שנייה אחת ונגן", - "subtitleListActionEditTextAndPause": "עבור לתיבת עריכת הטקסט, והשהה במיקום הוידאו", - "autoBackupEveryMinute": "כל דקה", - "autoBackupEveryXthMinute": "כל {0} דקות", - "profiles": "פרופילים", - "autoBackupDeleteAfterXMonths": "מחק גיבויים אוטומטיים לאחר {0} חודשים", "searchSettingsDotDotDot": "חפש בהגדרות...", - "syntaxColoring": "צביעת תחביר", - "waveformSpectrogram": "גל שמע/ספקטרוגרמה", "network": "רשת", "fileTypeAssociations": "שיוך סוגי קבצים", "textBoxColorTags": "תגיות צבע (HTML/ASSA) בתיבת הטקסט של הכתובית", @@ -3110,10 +3499,9 @@ "darkThemeForegroundColor": "צבע גופן בערכת נושא כהה", "darkThemeBackgroundColor": "צבע רקע בערכת נושא כהה", "showGridLines": "הצג קווי רשת בטבלה", - "resetSettings": "לאפס את ההגדרות?", - "resetSettingsDetail": "פעולה זו תאפס את כל ההגדרות לערכי ברירת המחדל שלהן.\n\nהאם להמשיך?", "showHorizontalLineAboveToolbar": "הצג קו אופקי מעל סרגל הכלים", "bookmarkColor": "צבע סימנייה", + "spellCheckHighlightColor": "צבע הדגשה של בדיקת איות", "singleLineMaxLength": "אורך מקסימלי לשורה בודדת", "optimalCharsPerSec": "קצב תווים אופטימלי לשנייה", "maxCharsPerSec": "קצב תווים מקסימלי לשנייה", @@ -3125,13 +3513,21 @@ "unbreakSubtitlesShortThan": "בטל שבירת שורות בכתוביות קצרות מ-", "newEmptyDefaultMs": "משך ברירת מחדל לכתובית חדשה (מילישניות)", "timeCodeUpDownStepMs": "צעד הגדלה/הקטנה של זמן (ms)", + "moveSelectedLinesStepMs": "צעד קיצור הדרך להזזת שורות שנבחרו (ms)", + "moveStartEndStepMs": "צעד קיצור הדרך להזזת התחלה/סיום (ms)", + "moveLinesShortenNeighbor": "הזזת שורות: קצר את השורה הקודמת/הבאה במקום לחפוף לה", "promptBeforeDelete": "שאל לפני מחיקה", "rememberPositionAndSize": "זכור את מיקום וגודל החלון", + "titleBarFullFileName": "הצג נתיב קובץ מלא בשורת הכותרת", + "showRecentFiles": "הצג קבצים אחרונים (לפתיחה מחדש)", "openLastFileOnStart": "פתח את הקובץ האחרון שהיה בשימוש בעת ההפעלה", "autoSave": "שמירה אוטומטית (שמור את הקובץ הפתוח בזמן עריכה)", "autoBackupOn": "גיבוי אוטומטי", "autoBackupIntervalMinutes": "תדירות גיבוי אוטומטי (בדקות)", "autoBackupDeleteAfterDays": "משך שמירת גיבוי אוטומטי (בימים)", + "settingsBackupOn": "גיבוי אוטומטי של הגדרות", + "settingsBackupIntervalDays": "מרווח גיבוי הגדרות (ימים, 0 = בכל הפעלה)", + "settingsBackupMaxCount": "גיבויי הגדרות לשמירה", "autoConvertToUtf8": "המר אוטומטית לקידוד UTF-8 בעת פתיחה", "autoTrimWhiteSpace": "הסר אוטומטית רווחים מיותרים", "defaultEncoding": "קידוד ברירת מחדל", @@ -3145,23 +3541,14 @@ "colorGapTooShort": "צבע אם המרווח קצר מדי", "errorBackgroundColor": "צבע רקע של שגיאה", "waveformDrawGridLines": "צייר קווי רשת בגל השמע", - "waveformCenterVideoPosition": "מרכז את מיקום הוידאו", + "waveformUseSkiaRenderer": "השתמש במעבד תצוגה מהיר ניסיוני", "waveformCenterVideoPositionAlsoWhenPaused": "מרכז את מיקום הוידאו גם בזמן השהיה", + "waveformSelectCurrentSubtitleWhilePaused": "בחר את הכתובית הנוכחית גם בזמן השהיה", + "waveformRememberZoom": "זכור זום (אופקי ואנכי)", "waveformShowToolbar": "הצג סרגל כלים", "waveformShowToolbarEdit": "ערוך סרגל כלים...", "waveformShowToolbarEditLabel": "פריטי סרגל כלים", "waveformSpectrogramCombinedWaveformHeight": "גובה גל השמע בשילוב גל שמע/ספקטרוגרמה %", - "showWaveformToolbarPlay": "סרגל כלים: הצג כפתור ניגון", - "showWaveformToolbarRepeat": "סרגל כלים: הצג כפתור חזרה", - "showWaveformToolbarRemoveBlankLines": "סרגל כלים: הצג כפתור הסרת שורות ריקות", - "showWaveformToolbarNew": "סרגל כלים: הצג כפתור כתובית חדשה", - "showWaveformToolbarSetStart": "סרגל כלים: הצג כפתור קביעת התחלה", - "showWaveformToolbarSetEnd": "סרגל כלים: הצג כפתור קביעת סיום", - "showWaveformToolbarStartAndOffsetTheRest": "סרגל כלים: הצג כפתור קביעת התחלה והזזת השאר", - "showWaveformToolbarHorizontalZoom": "סרגל כלים: הצג זום אופקי", - "showWaveformToolbarVerticalZoom": "סרגל כלים: הצג זום אנכי", - "showWaveformToolbarVideoPositionSlider": "סרגל כלים: הצג מחוון מיקום וידאו", - "showWaveformToolbarPlaybackSpeed": "סרגל כלים: הצג מהירות ניגון", "waveformFocusTextboxAfterInsertNew": "התמקד בתיבת הטקסט לאחר הוספת כתובית", "waveformInvertMouseWheel": "הפוך את כיוון גלגלת העכבר", "waveformMouseWheelSetsVideoPosition": "גלגלת העכבר קובעת מיקום וידאו", @@ -3179,20 +3566,20 @@ "waveformSelectedColor": "צבע של כתובית נבחרת בגל שמע", "downloadFfmpeg": "הורד את FFmpeg", "proxyAddress": "כתובת שרת מתווך (Proxy)", - "username": "שם משתמש", "password": "סיסמה", "defaultFormat": "פורמט ברירת מחדל", "defaultSaveAsFormat": "פורמט ברירת מחדל ל-\"שמירה בשם\"", "favoriteSubtitleFormats": "פורמטי כתוביות מועדפים", "favoriteLanguages": "שפות מועדפות", "webVttUseXTimestampMap": "WebVTT: השתמש ב-X-TIMESTAMP-MAP (הסט קודי זמן בטעינה)", - "showStopButton": "הצג כפתור עצירה", - "showFullscreenButton": "הצג כפתור מסך מלא", "fullscreenHideControls": "הסתר פקדי וידאו במסך מלא", + "showSecondarySubtitleDialog": "הצג חלון סגנון בעת פתיחת קובץ כתוביות משני", + "rememberSecondarySubtitleFile": "זכור קובץ כתוביות משני", "autoOpenVideoFile": "פתח אוטומטית קובץ וידאו בעת פתיחת כתובית", "downloadMpv": "הורד את mpv", "downloadVlc": "הורד את VLC", "allowSingleLetterShortcutsInTextbox": "אפשר קיצורי מקשים של אות בודדת בתיבת הטקסט", + "allowTextNavigationShortcutsInTextbox": "אפשר קיצורי דרך על מקשי ניווט בטקסט (Ctrl+שמאלה/ימינה, Home/End) בתיבת הטקסט", "spellCheckEnglishTreatInApostropheAsIng": "בדיקת איות: התייחס למילים המסתיימות ב-'in'' כאל 'ing' (אנגלית בלבד)", "goToLineNumberSetsVideoPosition": "מעבר למספר שורה קובע גם את מיקום הוידאו", "adjustAllTimesRememberLineSelectionChoice": "התאמת כל הזמנים, זכור את הבחירה לגבי שורות", @@ -3204,6 +3591,7 @@ "showAssaLayer": "הצג תיבת שכבות ASSA", "waveformCursorColor": "צבע סמן/ראש גל שמע", "waveformShotChangeColor": "צבע מעברי שוט בגל שמע", + "waveformGridColor": "צבע רשת גל השמע", "waveformParagraphLeftColor": "צבע גבול שמאלי בגל שמע", "waveformParagraphRightColor": "צבע גבול ימני בגל שמע", "waveformFancyHighColor": "צבע הדגשה מעוצב בגל שמע", @@ -3231,23 +3619,26 @@ "resetSyntaxColoring": "אפס צביעת תחביר", "resetWaveform": "אפס גל שמע", "resetRules": "אפס כללים", - "useFrameMode": "השתמש במצב פריימים (hh.mm.ss.ff)", + "timeCodeMode": "מצב קוד זמן", + "timeCodeModeTime": "זמן (hh:mm:ss,zzz)", + "timeCodeModeFrames": "פריימים (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "מספרי פריימים", + "frameModeSnapToVideoFrames": "שמור זמנים על פריימי וידאו (לא פריימים בתוך כל שנייה)", "textBoxLimitNewLines": "הגבל את מספר השורות בתיבת הטקסט של הכתובית", - "mpvVideoOutput": "פלט וידאו (mpv)", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - עיבוד תוכנתי (איטי)", + "mpvMetalRendering": "libmpv - Metal (ניסיוני, דורש הפעלה מחדש)", "mpvWidRendering": "libmpv - עיבוד חלון מקומי (מהיר יותר ב-Windows/Linux)", "waveFormsAndSpectrogramFoldersContainsX": "תיקיות \"גל שמע\" ו-\"ספקטרוגרמה\" מכילות {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "האם למחוק את קובצי \"גל שמע\" ו-\"ספקטרוגרמה\"?", "waveformGenerateSpectrogram": "צור ספקטרוגרמה", "waveformAutoGenerate": "צור גל שמע אוטומטית בעת פתיחת וידאו", "waveformSpectrogramMode": "מצב ספקטרוגרמה", - "waveformCenterOnSingleClick": "מרכז בלחיצה בודדת", - "waveformSingleClickSelectsSubtitle": "בחר כתובית בלחיצה בודדת", "waveformRightClickSelectsSubtitle": "בחר כתובית בלחיצה ימנית", - "waveformPauseOnSingleClick": "השהה בלחיצה בודדת", "waveformDrawStyle": "סגנון ציור גל שמע", "vlcWidRendering": "libVLC - עיבוד חלון מקומי", + "ffmpegSoftwareRendering": "FFmpeg", + "downloadFfmpegLibs": "הורד ספריות FFmpeg (עבור נגן הווידאו FFmpeg)", "subtitleGridEnterKeyAction": "פעולת מקש Enter בטבלת הכתוביות", "subtitleSingleClickAction": "פעולת לחיצה בודדת בטבלת הכתוביות", "subtitleDoubleClickAction": "פעולת לחיצה כפולה בטבלת הכתוביות", @@ -3272,24 +3663,24 @@ "saveAsBehaviorUseVideoFileName": "השתמש בשם קובץ וידאו", "saveAsBehaviorUseSubtitleFileName": "השתמש בשם קובץ כתובית", "saveAsAppendLanguageCodeTwoLetter": "שתי אותיות", - "saveAsAppendLanguageCodeThreeLetter": "שלוש אותיות (ISO 639-2/T)", - "saveAsAppendLanguageCodeThreeLetterBibliographic": "שלוש אותיות (ISO 639-2/B)", "saveAsAppendLanguageCodeLanguageName": "שם השפה", "splitOddLineActionWeightTop": "העדף את השורה העליונה", "splitOddLineActionWeightBottom": "העדף את השורה התחתונה", "splitOddLinesAction": "פעולה לפיצול שורות לא זוגיות", "ocrUseWordSplitList": "OCR: השתמש ברשימת פיצול מילים", "ocrGuessUnknownWords": "OCR: נסה לנחש מילים לא מוכרות", + "spellCheckRememberUseAlwaysList": "בדיקת איות: זכור רשימת \"השתמש תמיד\"", + "fixShortDisplayTimesAllowMoveStartTime": "תיקון שגיאות נפוצות: תיקון זמני תצוגה קצרים רשאי להזיז את זמן ההתחלה", "speechToTextSelectedLinesPromptFirstTimeOnly": "דיבור לטקסט: שורות שנבחרו, שאל לגבי שפה/מנוע בפעם הראשונה בלבד", "multipleReplaceShowDotDotDotButtons": "החלפה מרובה: הצג כפתורים תלויי הקשר", "gridFocusTextboxAfterInsertNew": "טבלה: התמקד בתיבת הטקסט לאחר הוספת כתובית חדשה", + "undoRedoGoToChangedLine": "בטל/בצע שוב: עבור לשורה שהשתנתה (ולמיקום הווידאו)", "textToSpeechPromptSkipNoiseLines": "טקסט לדיבור: הצע לדלג על שורות צליל/מוזיקה", "textToSpeechPromptDetectSpeakers": "טקסט לדיבור: הצע לזהות שמות דוברים בטקסט", "useFocusedButtonBackgroundColor": "השתמש בצבע רקע לכפתור ממוקד", "focusedButtonBackgroundColor": "צבע רקע לכפתור ממוקד", "forceCrLfOnSave": "אלץ סיומת שורה CR+LF בעת שמירה (קובצי כתוביות טקסט)", - "showWaveformToolbarPlayNext": "סרגל כלים: הצג כפתור נגן את הבא", - "showWaveformToolbarPlaySelection": "סרגל כלים: הצג כפתור נגן את הבחירה", + "linuxClipboardUseExternalTool": "העתק טקסט באמצעות xclip/wl-copy (שומר תווים עם סימני הטעמה)", "showFormatLimitWarning": "הזהר בעת שמירה כאשר שורות חורגות ממגבלות הפורמט (למשל SCC 32 תווים לשורה)", "textBoxButtonShowAutoBreak": "תיבת טקסט: הצג כפתור פיצול שורות אוטומטי", "textBoxButtonShowUnbreak": "תיבת טקסט: הצג כפתור ביטול פיצול שורות", @@ -3301,12 +3692,18 @@ "waveformDoubleClickAction": "פעולת לחיצה כפולה בגל שמע (לאחר לחיצה בודדת)", "allSettings": "כל ההגדרות", "uiScale": "קנה מידה של ממשק המשתמש (%)", + "fontScale": "קנה מידה של גופן (%)", + "textSelectionOpacity": "אטימות בחירת טקסט (%)", "waveformToolbarItems": "פריטי סרגל הכלים של גל שמע", "matchIconColorToDarkTheme": "התאם צבע סמל לצבע הגופן של ערכת נושא כהה", "subtitlePreviewProperties": "מאפייני תצוגה מקדימה של כתובית", "usePositionFromSubtitleFile": "השתמש במיקום מקובץ הכתוביות (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "השוליים הם חלק מאזור הכתוביות", "textJustify": "יישר שורות לשני הצדדים", + "deinterlace": "בטל שזירה (Deinterlace) בווידאו", + "deinterlaceOff": "כבוי", + "deinterlaceAuto": "אוטומטי (פריימים שזורים בלבד)", + "deinterlaceAlways": "תמיד", "pixelWidthInfo": "קווים ירוקים = גבול רוחב מקסימלי | אזור אדום = הטקסט חורג מהגבול", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3316,6 +3713,15 @@ "waveformSaveAsCustomTheme": "שמור כערכת נושא מותאמת אישית...", "waveformLoadThemeDotDotDot": "טען ערכת נושא...", "waveformExportThemeDotDotDot": "ייצא ערכת נושא...", + "waveformSaveCustomThemeTitle": "שמור ערכת נושא מותאמת אישית", + "waveformThemeFileType": "ערכת נושא לגל שמע של Subtitle Edit", + "waveformThemeHighContrast": "ניגודיות גבוהה", + "waveformThemeOceanBlue": "כחול אוקיינוס", + "waveformThemeWarmSunset": "שקיעה חמימה", + "waveformThemeForest": "יער", + "waveformThemeMidnightPurple": "סגול חצות", + "waveformThemeRetroAmber": "ענבר רטרו", + "waveformThemeIce": "קרח", "minGapFrames": "מרווח מינימלי (פריימים)", "waveformSnapToFrames": "הצמד לפריימים", "fixCommonErrorsSkipStep1": "תיקון שגיאות נפוצות: דלג על שלב 1 (בחירת תיקונים)", @@ -3324,118 +3730,82 @@ "waveformExtractAudioSampleRate": "קצב דגימה לחילוץ שמע", "waveformExtractAudioSampleRateOriginal": "מקורי (שמור על המקור)", "waveformExtractAudioBitRate": "קצב סיביות לחילוץ שמע (MP3/M4A)", + "ffmpegUseCenterChannelOnly": "השתמש רק בערוץ המרכזי הקדמי עבור שמע 5.1 (FFmpeg)", "waveformSetVideoPositionOnMoveStartEnd": "קבע מיקום וידאו בעת הזזת התחלה/סיום", "textToSpeechPromptMergeContinuationLines": "טקסט לדיבור: בקש למזג שורות המשך" }, "shortcuts": { "generalUnbreakNoSpaceCjk": "בטל מעבר שורה ללא רווח (CJK)", - "title": "קיצורי דרך", + "generalToggleBreak": "החלף פיצול/ביטול פיצול", "searchShortcuts": "חפש קיצורי דרך...", - "filter": "מסנן", - "categoryGeneral": "כללי", "categorySubtitleGridAndTextBox": "טבלת כתוביות ותיבת טקסט", "categorySubtitleGrid": "טבלת כתוביות", - "categoryWaveform": "גל שמע", "categoryTextBox": "תיבת טקסט", "categoryFile": "קובץ", "categoryVideo": "וידאו", "categorySync": "סנכרון", - "categoryTranslate": "תרגום", - "categorySearch": "חיפוש", - "categoryTools": "כלים", "categoryAi": "AI", + "categoryCustom": "מותאם אישית", + "editCustomShortcut": "ערוך קיצור דרך מותאם אישית", + "customShortcutTextBoxKeyHint": "השתמש כאן במקש עם Ctrl/Alt - מקש רגיל כבר לא יקליד בתיבת הטקסט.", + "customShortcutNumberX": "קיצור דרך מותאם אישית #{0}", + "customShortcutNumberXY": "קיצור דרך מותאם אישית #{0}: {1}", + "customShortcutStep": "שלב", + "customShortcutSteps": "שלבים", + "customShortcutStepRunCommand": "הפעל פקודה", + "customShortcutStepInsertText": "הכנס טקסט", + "customShortcutStepReplace": "חפש והחלף", + "customShortcutInsertAtCursor": "במיקום הסמן", + "customShortcutInsertAtStart": "בתחילת הטקסט", + "customShortcutInsertAtEnd": "בסוף הטקסט", + "customShortcutSummaryRunCommandX": "הפעל: {0}", + "customShortcutSummaryInsertXY": "הכנס \"{0}\" ({1})", + "customShortcutSummaryReplaceXY": "החלף את \"{0}\" ב-\"{1}\"", + "customShortcutSummaryReplaceRegexXY": "החלף ביטוי רגולרי \"{0}\" ב-\"{1}\"", + "customShortcutPickCommand": "נא לבחור פקודה להפעלה.", + "customShortcutEnterText": "נא להזין את הטקסט להכנסה.", + "customShortcutEnterFind": "נא להזין את הטקסט לחיפוש.", + "customShortcutInvalidRegexX": "ביטוי רגולרי לא חוקי: {0}", + "customShortcutStepsHint": "השלבים מופעלים מלמעלה למטה. שלבי טקסט פועלים על השורות שנבחרו; פקודות שפותחות חלון ממשיכות לאחר שהוא נסגר.", "activeIn": "פעיל ב-", "activeInEverywhere": "בכל מקום", - "generalSetupLikeSe4": "הגדר כמו Subtitle Edit 4 (ערכת נושא, קיצורי דרך, כללי החלפה)", - "generalMergeSelectedLines": "מזג שורות שנבחרו", - "generalMergeWithPrevious": "מזג עם הקודם", - "generalMergeWithNext": "מזג עם הבא", - "generalMergeWithPreviousAndUnbreak": "מזג עם הקודם ובטל פיצול", - "generalMergeWithNextAndUnbreak": "מזג עם הבא ובטל פיצול", - "generalMergeWithPreviousAndAutoBreak": "מזג עם הקודם ופצל אוטומטית", - "generalMergeWithNextAndAutoBreak": "מזג עם הבא ופצל אוטומטית", - "generalMergeSelectedLinesAndAutoBreak": "מזג שורות שנבחרו ופצל אוטומטית", "generalMergeSelectedLinesAndUnbreak": "מזג שורות שנבחרו ובטל פיצול", "generalMergeSelectedLinesAndUnbreakCjk": "מזג שורות שנבחרו ובטל פיצול (לשפות אסייתיות)", - "generalMergeSelectedLinesOnlyFirstText": "מזג שורות שנבחרו (טקסט ראשון בלבד)", "generalMergeSelectedLinesBilingual": "מזג שורות שנבחרו כדו-לשוני", - "generalMergeWithPreviousBilingual": "מזג עם הקודם כדו-לשוני", - "generalMergeWithNextBilingual": "מזג עם הבא כדו-לשוני", - "generalMergeOriginalAndTranslation": "מזג מקור ותרגום", "generalToggleTranslationMode": "החלף מצב תרגום", - "generalSwitchOriginalAndTranslation": "החלף בין מקור לתרגום", - "generalSwitchOriginalAndTranslationTextBoxes": "החלף בין תיבות טקסט של מקור ותרגום", "generalToggleTranslationAndOriginalInPreviews": "החלף בין תרגום למקור בתצוגה המקדימה של וידאו/שמע", "generalChooseLayout": "בחר פריסת ממשק", - "generalLayoutChooseX": "פריסה {0}", - "generalPlayFirstSelected": "נגן את הכתובית הראשונה שנבחרה", - "generalGoToFirstSelectedLine": "עבור לשורה הראשונה שנבחרה", - "generalGoToNextEmptyLine": "עבור לשורה הריקה הבאה", "generalGoToNextSubtitle": "עבור לכתובית הבאה", "generalGoToNextSubtitlePlayTranslate": "עבור לכתובית הבאה (נגן תרגום)", "generalGoToNextSubtitleCursorAtEnd": "עבור לכתובית הבאה (סמן בסוף)", "generalGoToPrevSubtitle": "עבור לכתובית הקודמת", "generalGoToPrevSubtitlePlayTranslate": "עבור לכתובית הקודמת (נגן תרגום)", - "generalGoToStartOfCurrentSubtitle": "עבור לתחילת הכתובית הנוכחית", - "generalGoToEndOfCurrentSubtitle": "עבור לסוף הכתובית הנוכחית", - "generalGoToPreviousSubtitleAndFocusVideo": "עבור לכתובית הקודמת והתמקד בוידאו", - "generalGoToNextSubtitleAndFocusVideo": "עבור לכתובית הבאה והתמקד בוידאו", - "generalGoToPrevSubtitleAndPlay": "עבור לכתובית הקודמת ונגן", - "generalGoToNextSubtitleAndPlay": "עבור לכתובית הבאה ונגן", - "generalGoToPreviousSubtitleAndFocusWaveform": "עבור לכתובית הקודמת והתמקד בגל שמע", - "generalGoToNextSubtitleAndFocusWaveform": "עבור לכתובית הבאה והתמקד בגל שמע", - "generalGoToLineNumber": "עבור למספר שורה", "generalGoToFirstLine": "עבור לשורה הראשונה", "generalGoToLastLine": "עבור לשורה האחרונה", "alsoSetVideoPosition": "קבע גם את מיקום הוידאו", "generalGoToVideoPosition": "עבור למיקום וידאו", "generalToggleItalic": "החלף כתב נטוי", "generalToggleBold": "החלף כתב מודגש", - "generalToggleBookmarks": "החלף סימניות", - "generalFocusTextBox": "התמקד בתיבת הטקסט", - "generalToggleBookmarksWithText": "החלף סימניות עם טקסט", - "generalEditBookmarks": "ערוך סימניות", - "fileNew": "חדש", "generalToggleUnderline": "החלף מצב קו תחתון", + "generalToggleBox": "החלף תיבה (EBU STL)", "fileOpen": "פתח", "fileOpenKeepVideo": "פתח (שמור וידאו)", "fileSave": "שמור", "fileSaveAs": "שמור בשם", - "fileSaveAll": "שמור הכל", "fileSaveOriginal": "שמור מקור", - "fileSaveOriginalAs": "שמור מקור בשם", - "fileOpenOriginalSubtitle": "פתח כתובית מקורית", - "fileCloseOriginalSubtitle": "סגור כתובית מקורית", - "fileTranslatedSubtitle": "כתובית מתורגמת", "fileCompare": "השוואה", "fileStatistics": "סטטיסטיקה", "fileImportPlainText": "ייבא טקסט פשוט", - "fileImportBluRaySupForOcr": "ייבא Blu-ray SUP עבור OCR", - "fileImportBluRaySupForEdit": "ייבא Blu-ray SUP עבור עריכה", - "fileImportTimeCodes": "ייבא קודי זמן", "fileExportEbuStl": "ייצא EBU STL", "fileExportPac": "ייצא PAC", - "fileExportEdlClipName": "ייצא שם קליפ EDL", - "fileExportPlainText": "ייצא טקסט פשוט", - "fileExportCustomTextFormat1": "ייצא פורמט טקסט מותאם אישית 1", - "fileExportCustomTextFormat2": "ייצא פורמט טקסט מותאם אישית 2", - "fileExportCustomTextFormat3": "ייצא פורמט טקסט מותאם אישית 3", "fileExit": "יציאה", "openSeDataFolder": "פתח את תיקיית Subtitle Edit", - "editFind": "חפש", - "editFindNext": "חפש את הבא", "editFindPrevious": "חפש את הקודם", - "editReplace": "החלף", - "editMultipleReplace": "החלפה מרובה", "fillSelectedLinesWithClipboard": "מלא שורות שנבחרו בטקסט מלוח הגזירים", - "editModifySelection": "שנה בחירה", - "listSelectAll": "בחר הכל", - "listSelectFirst": "בחר ראשון", - "listSelectLast": "בחר אחרון", "listInverseSelection": "הפוך בחירה", "listDeleteSelection": "מחק בחירה", + "deleteSelectionEverywhere": "מחק בחירה (בכל מקום)", "rippleDeleteSelection": "מחיקת Ripple", - "settings": "הגדרות", "assigned": "מוקצה", "unassigned": "לא מוקצה", "pressedKeyX": "מקש שנלחץ: {0}", @@ -3443,6 +3813,7 @@ "detectKey": "זהה מקש", "control": "Ctrl", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Shift", "controlMac": "⌃", @@ -3453,11 +3824,14 @@ "resetShortcutsDetail": "האם ברצונך לאפס את כל קיצורי הדרך לערכי ברירת המחדל?", "togglePlayPause": "נגן/השהה", "toggleLockTimeCodes": "נעילת קודי זמן", + "toggleTimeCodeMode": "החלף מצב קוד זמן (זמן/פריימים/מספרי פריימים)", + "toggleScreenPrivacy": "החלף פרטיות מסך (הסתר שמות קבצים, ולאחר מכן גם טקסטים)", + "screenPrivacyFileNamesHidden": "פרטיות מסך: שמות קבצים מוסתרים", + "screenPrivacyFileNamesAndTextsHidden": "פרטיות מסך: שמות קבצים וטקסטים מוסתרים", + "screenPrivacyOff": "פרטיות מסך: כבויה", "duplicateSelectedLines": "שכפל שורות שנבחרו", "sourceView": "תצוגת קוד מקור", - "showAlignmentPicker": "יישור", "addOrEditBookmark": "הוסף או ערוך סימנייה", - "listBookmarks": "רשימת סימניות", "toggleBookmark": "החלף סימנייה (שורות נבחרות, ללא טקסט)", "toggleForcedSelectedLines": "החלף מצב כפוי (שורות שנבחרו)", "goToNextBookmark": "עבור לסימנייה הבאה", @@ -3468,12 +3842,12 @@ "waveformSetStartAndSetEndOfPreviousMinusGap": "קבע התחלה וקבע סוף של הקודם פחות מרווח", "waveformSetEndAndStartOfNextAfterGap": "קבע סוף והתחלה של הבא פלוס מרווח", "waveformSetEndAndStartOfNextAfterGapAndGoToNext": "קבע סוף והתחלה של הבא פלוס מרווח ועבור לבא", - "fetchFirstWordFromNextSubtitle": "משוך מילה ראשונה מהכתובית הבאה", "moveLastWordToNextSubtitle": "העבר מילה אחרונה לכתובית הבאה", "moveLastWordFromFirstLineDownCurrentSubtitle": "הורד מילה אחרונה מהשורה הראשונה (כתובית נוכחית)", "moveFirstWordFromNextLineUpCurrentSubtitle": "העלה מילה ראשונה מהשורה הבאה (כתובית נוכחית)", "moveTextFromCursorToNextAndGoToNext": "העבר את הטקסט שאחרי מיקום הסמן לכתובית הבאה ועבור אליה", "moveTextFromCursorToNextAndGoToNextAndPlay": "העבר את הטקסט שאחרי מיקום הסמן לכתובית הבאה, עבור אליה ונגן", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "העבר את הטקסט שאחרי מיקום הסמן לכתובית הבאה, עבור לבאה, נגן אותה והשהה בסופה", "breakAtFirstSpaceFromCursor": "פצל ברווח הראשון ממיקום הסמן", "breakAtFirstSpaceFromCursorAndGoToNext": "פצל ברווח הראשון ממיקום הסמן ועבור לבא", "toggleFocusGridAndWaveform": "העבר מיקוד בין טבלת כתוביות לגל שמע/ספקטרוגרמה", @@ -3485,7 +3859,6 @@ "videoGoToPreviousTimeCode": "עבור לקוד הזמן הקודם", "videoGoToNextTimeCode": "עבור לקוד הזמן הבא", "goToNextLineAndSetVideoPosition": "עבור לכתובית הבאה וקבע מיקום וידאו", - "textBoxDeleteSelectionNoClipboard": "תיבת טקסט: מחק בחירה (ללא לוח)", "textBoxDeleteForward": "תיבת טקסט: מחק בחירה או את התו הבא (מחיקה קדימה)", "textBoxCut": "תיבת טקסט: גזור", "textBoxCut2": "תיבת טקסט: גזור (חלופי)", @@ -3504,6 +3877,7 @@ "listViewColumnTextUp": "עמודה, טקסט למעלה", "listViewColumnTextDown": "עמודה, טקסט למטה", "autoTranslateSelectedLines": "תרגום אוטומטי של שורות שנבחרו...", + "autoTranslateSelectedLinesNoPrompt": "תרגם אוטומטית שורות שנבחרו (ללא שאלה, השתמש במנוע/בשפות האחרונים)", "setAssaResolution": "קבע רזולוציית ASSA (PlayResX/PlayResY)", "setShortcutForX": "קבע קיצור דרך עבור \"{0}\"", "commandFileNewKeepVideo": "חדש (שמור וידאו)", @@ -3511,27 +3885,20 @@ "fileCloseOriginal": "סגור מקור", "fileCloseTranslation": "סגור תרגום", "restoreAutoBackup": "שחזר מגיבוי אוטומטי", - "openContainingFolder": "פתח תיקייה מכילה", "importTimeCodes": "ייבא קודי זמן", "importSubtitleWithManuallyChosenEncoding": "ייבא כתובית עם קידוד לבחירה ידנית", "exportBluRaySup": "ייצא Blu-ray SUP", "exportCustomTextFormat": "ייצא פורמט טקסט מותאם אישית", "exportPlainText": "ייצא טקסט פשוט", - "showHistory": "הצג היסטוריה", "toggleRightToLeft": "החלף כיווניות מימין לשמאל", "modifySelection": "שנה בחירה", "adjustDurations": "התאם משכי זמן", "applyDurationLimits": "החל מגבלות משך זמן", "batchConvert": "המרת אצווה", - "bridgeGaps": "גשר על מרווחים", "applyMinGap": "החל מרווח מינימלי", - "fixCommonErrors": "תיקון שגיאות נפוצות", "makeEmptyTranslationFromCurrentSubtitle": "צור תרגום ריק מכתובית נוכחית", - "mergeLinesWithSameText": "מזג שורות עם טקסט זהה", - "mergeLinesWithSameTimeCodes": "מזג שורות עם קודי זמן זהים", "splitBreakLongLines": "פצל/אזן שורות ארוכות", "mergeShortLines": "מזג שורות קצרות", - "removeTextForHearingImpaired": "הסר טקסט לכבדי שמיעה", "joinSubtitles": "חבר כתוביות", "splitSubtitle": "פצל כתובית", "spellCheck": "בדיקת איות", @@ -3553,7 +3920,6 @@ "adjustAllTimes": "התאם את כל הזמנים", "visualSync": "סנכרון חזותי", "translateViaCopyPaste": "תרגם באמצעות העתק-הדבק", - "shortcuts": "קיצורי דרך", "wordLists": "רשימות מילים", "chooseUiLanguage": "בחר שפת ממשק", "chooseRuleProfile": "בחר פרופיל כללים", @@ -3564,6 +3930,7 @@ "textBoxItalic": "תיבת טקסט, כתב נטוי", "textBoxBold": "תיבת טקסט הדגשה", "textBoxUnderline": "תיבת טקסט קו תחתון", + "textBoxBox": "תיבת טקסט: תיבה (EBU STL)", "resetWaveformZoomAndSpeed": "אפס זום גל שמע ומהירות ניגון", "togglePlaybackSpeed": "החלף מהירות ניגון", "playbackSpeedSlower": "מהירות ניגון איטית יותר", @@ -3573,22 +3940,28 @@ "seekSilence": "חפש שקט", "waveformGuessStart": "נחש את זמן ההתחלה מגל השמע", "waveformGuessEnd": "נחש את זמן הסיום מגל השמע", + "waveformGuessStartAndEnd": "נחש זמן התחלה וסיום מגל השמע", "setVideoPositionCurrentSubtitleStart": "קבע מיקום וידאו לתחילת השורה הנוכחית", "goToSubtitlePositionAndPause": "עבור למיקום הכתובית והשהה", "setVideoPositionCurrentSubtitleEnd": "קבע מיקום וידאו לסוף השורה הנוכחית", "toggleAudioTracks": "החלף רצועות שמע", - "listErrors": "הצג שגיאות", "goToNextError": "עבור לשגיאה הבאה", "goToPreviousError": "עבור לשגיאה הקודמת", "addNameToNameList": "הוסף שם לרשימת השמות", "findDoubleWords": "מצא מילים כפולות", "findDoubleLines": "מצא שורות כפולות", "colorX": "צבע {0}", - "removeColor": "הסר צבע", "surroundWith": "הקף ב...", "surroundWithXY": "הקף ב- {0}/{1}", - "repeatLine": "חזור על השורה", "surroundWithNumberX": "הקף ב-#{0}", + "surroundWithBehavior": "התנהגות", + "surroundWithBehaviorToggle": "החלף (הוסף, או הסר אם קיים)", + "surroundWithBehaviorAdd": "הוסף (בכל פעם)", + "surroundWithBehaviorRemove": "הסר (הכל)", + "surroundWithBehaviorRemoveOnce": "הסר (אחד בכל פעם)", + "surroundWithWorksOn": "פועל על", + "surroundWithScopeSelectionOrText": "הבחירה, אחרת כל הטקסט", + "surroundWithScopeEachLine": "כל שורה", "searchVia": "חפש באמצעות", "searchViaX": "חפש באמצעות {0}", "searchViaNumberX": "חפש באמצעות #{0}", @@ -3613,6 +3986,11 @@ "copySubtitlePathToClipboard": "העתק נתיב כתובית ללוח הגזירים", "copySubtitleOriginalPathToClipboard": "העתק נתיב כתובית מקורית ללוח הגזירים", "focusTextBox": "התמקד בתיבת הטקסט", + "focusSubtitleListView": "התמקד ברשימת הכתוביות", + "focusWaveform": "התמקד בגל השמע", + "focusOriginalTextBox": "התמקד בתיבת הטקסט המקורי", + "textBoxGoToStart": "תיבת טקסט, עבור להתחלה", + "textBoxGoToEnd": "תיבת טקסט, עבור לסוף", "sortByStartTime": "מיין לפי זמן התחלה", "sortByEndTime": "מיין לפי זמן סיום", "sortByDuration": "מיין לפי משך", @@ -3635,7 +4013,6 @@ "assaStyles": "סגנונות ASSA", "assaProperties": "מאפייני ASSA", "assaAttachments": "קבצים מצורפים ASSA", - "assaVideoColorPicker": "דוגם צבע וידאו ASSA", "recalculateDurationSelectedLines": "חשב מחדש משך זמן (שורות נבחרות)", "toggleWaveformAndSpectrogramHeight": "שנה יחס גובה בין גל שמע לספקטרוגרמה", "toggleSpectrogramStyle": "החלף סגנון ספקטרוגרמה", @@ -3658,9 +4035,9 @@ "selectionToSentenceCase": "תיבת טקסט: הבחירה לאות רישית בתחילת משפט", "selectionToggleCasing": "תיבת טקסט: החלף סוג אותיות (רישיות -> קטנות -> אות רישית בכל מילה)", "googleIt": "חפש בגוגל (טקסט שנבחר)", - "setActorXY": "קבע שחקן {0}: {1}", + "setActorX": "קבע שחקן: {0}", "setNewActor": "קבע שחקן חדש...", - "setActorSlotXTitle": "משבצת שחקן {0}", + "setStyleX": "קבע סגנון: {0}", "toggleDialogDashes": "החלף מקפי דו-שיח", "mergeWithLineBeforeAsDialog": "מזג עם השורה שלפני כדו-שיח", "mergeWithLineAfterAsDialog": "מזג עם השורה שאחרי כדו-שיח", @@ -3671,13 +4048,27 @@ "moveStartOneFrameBackKeepGapPrev": "הזז את ההתחלה פריים אחד אחורה (שמור על המרווח לקודמת אם קרובה)", "moveStartOneFrameForwardKeepGapPrev": "הזז את ההתחלה פריים אחד קדימה (שמור על המרווח לקודמת אם קרובה)", "moveEndOneFrameBackKeepGapNext": "הזז את הסיום פריים אחד אחורה (שמור על המרווח לבאה אם קרובה)", - "moveEndOneFrameForwardKeepGapNext": "הזז את הסיום פריים אחד קדימה (שמור על המרווח לבאה אם קרובה)" + "moveEndOneFrameForwardKeepGapNext": "הזז את הסיום פריים אחד קדימה (שמור על המרווח לבאה אם קרובה)", + "moveStartXMsBack": "הזז התחלה X ms אחורה (X נקבע בהגדרות, גם בסנכרון חזותי)", + "moveStartXMsForward": "הזז התחלה X ms קדימה (X נקבע בהגדרות, גם בסנכרון חזותי)", + "moveEndXMsBack": "הזז סיום X ms אחורה (X נקבע בהגדרות, גם בסנכרון חזותי)", + "moveEndXMsForward": "הזז סיום X ms קדימה (X נקבע בהגדרות, גם בסנכרון חזותי)", + "moveSelectedLinesXMsBack": "הזז שורות שנבחרו X ms אחורה (X נקבע בהגדרות)", + "moveSelectedLinesXMsForward": "הזז שורות שנבחרו X ms קדימה (X נקבע בהגדרות)", + "moveSelectedLinesAndForwardXMsBack": "הזז שורות שנבחרו וכל השורות שאחריהן X ms אחורה (X נקבע בהגדרות)", + "moveSelectedLinesAndForwardXMsForward": "הזז שורות שנבחרו וכל השורות שאחריהן X ms קדימה (X נקבע בהגדרות)", + "moveAllLinesXMsBack": "הזז את כל השורות X ms אחורה (X נקבע בהגדרות)", + "moveAllLinesXMsForward": "הזז את כל השורות X ms קדימה (X נקבע בהגדרות)", + "moveSelectedLinesCustomMsBack": "הזז שורות שנבחרו, אלפיות שנייה מותאמות אישית ({0:#,###,##0}) אחורה, {1}", + "moveSelectedLinesCustomMsForward": "הזז שורות שנבחרו, אלפיות שנייה מותאמות אישית ({0:#,###,##0}) קדימה, {1}", + "moveSelectedLinesAndForwardCustomMsBack": "הזז שורות שנבחרו וכל השורות שאחריהן, אלפיות שנייה מותאמות אישית ({0:#,###,##0}) אחורה, {1}", + "moveSelectedLinesAndForwardCustomMsForward": "הזז שורות שנבחרו וכל השורות שאחריהן, אלפיות שנייה מותאמות אישית ({0:#,###,##0}) קדימה, {1}", + "moveAllLinesCustomMsBack": "הזז את כל השורות, אלפיות שנייה מותאמות אישית ({0:#,###,##0}) אחורה, {1}", + "moveAllLinesCustomMsForward": "הזז את כל השורות, אלפיות שנייה מותאמות אישית ({0:#,###,##0}) קדימה, {1}" }, "wordLists": { "title": "רשימות מילים", "addName": "הוסף שם", - "addWord": "הוסף מילה", - "addPair": "הוסף זוג", "nameAndIgnoreList": "רשימת שמות/התעלמות", "userWords": "רשימת מילים של המשתמש", "ocrFixList": "רשימת תיקוני OCR", @@ -3694,7 +4085,6 @@ "noPluginsInstalled": "לא מותקנים תוספים", "getPluginsOnline": "הורד תוספים מהאינטרנט...", "getPluginsTitle": "הורדת תוספים", - "enabled": "מופעל", "disabled": "מושבת", "notSupportedOnThisOs": "לא נתמך במערכת הפעלה זו", "removePluginXConfirm": "האם להסיר את התוסף '{0}'? פעולה זו תמחוק את תיקיית התוסף:{1}", @@ -3711,17 +4101,19 @@ "downloadingXPercent": "מוריד {0}%...", "pluginXInstalled": "'{0}' הותקן בהצלחה.", "couldNotInstallPluginX": "לא ניתן להתקין את '{0}': {1}", - "notInstalled": "לא מותקן", "install": "התקן", "reinstall": "התקן מחדש", - "update": "עדכן", "installedX": "מותקן ({0})", "updateAvailableXToY": "עדכון זמין ({0} ← {1})", "applyPluginToWhichLinesX": "החל את '{0}' על:", "applyToSelectedLinesX": "שורות שנבחרו ({0})", "applyToAllLinesX": "כל השורות ({0})", "updateAllXAvailable": "עדכן הכל ({0})", - "updatingXOfY": "מעדכן {0}/{1}..." + "updatingXOfY": "מעדכן {0}/{1}...", + "doNotAskAgain": "אל תשאל שוב (ניתן לשנות בניהול תוספים)", + "applyPluginsTo": "החל תוספים על", + "askEachTime": "שאל בכל פעם", + "allLines": "כל השורות" }, "help": { "aboutSubtitleEdit": "אודות Subtitle Edit", @@ -3765,6 +4157,8 @@ "nOcrDatabase": "מסד נתונים nOCR", "drawMode": "מצב ציור:", "addNewCharcter": "הוסף תו חדש", + "addNOcrCharacterTitle": "הוסף תו nOCR עבור שורה {0}, תו {1} מתוך {2} באמצעות מסד הנתונים \"{3}\"", + "addBinaryOcrCharacterTitle": "הוסף תו OCR בינארי עבור שורה {0}, תו {1} מתוך {2} באמצעות מסד הנתונים \"{3}\"", "lineIndexX": "שורה {0}", "inspectNOcrAdditions": "בחן תוספות nOCR חדשות", "ocrSelectedLines": "בצע OCR לשורות שנבחרו", @@ -3813,6 +4207,8 @@ "binaryImageCompareInspectImageMatches": "\"השוואת תמונה בינארית\" - בחן התאמות תמונה", "saveBlankTextTitle": "לשמור טקסט ריק?", "saveBlankTextPrompt": "האם לשמור טקסט ריק עבור התמונה?", + "drawnLinesDoNotMatchTitle": "הקווים אינם תואמים לתמונה", + "drawnLinesDoNotMatchPrompt": "חלק מהקווים שצוירו אינם תואמים לתמונה (קווים ירוקים חייבים להיות על התו, קווים אדומים חייבים להיות מחוצה לו), ולכן תו זה לא יזוהה.\n\nלשמור בכל זאת?", "yesAndNeverAskAgain": "כן ואל תשאל שוב לעולם", "importTextFromSubtitleDotDotDot": "ייבא טקסט מכתובית...", "importTextFromSubtitleOverwritePrompt": "לחלק מהשורות כבר יש טקסט OCR. האם לדרוס טקסט קיים?", @@ -3838,7 +4234,6 @@ "vobSubColorsTitle": "צבעי VobSub/DVD", "vobSubColorsHeader": "התאם אישית את ארבעת צבעי ה-VobSub", "vobSubColorsDescription": "כתוביות VobSub/DVD משתמשות בארבעה צבעים מיועדים: רקע, דפוס (pattern), הדגשה 1 והדגשה 2. בחר כל צבע למטה כדי לדרוס את פלטת הצבעים המובנית - שימושי כאשר הצבעים המקוריים נותנים ניגודיות נמוכה ב-OCR.", - "vobSubColorBackground": "רקע", "vobSubColorPattern": "דפוס", "vobSubColorEmphasis1": "הדגשה 1", "vobSubColorEmphasis2": "הדגשה 2", @@ -3872,9 +4267,26 @@ "crispEmbedSettingsTitle": "הגדרות CrispEmbed", "crispEmbedDescription": "מנוע OCR מקומי עם מספר מודלים - הורד כאן את המנוע ואת המודלים.", "trainNOcrDatabase": "אמן מסד נתונים nOCR...", + "optimizeNOcrDatabase": "בצע אופטימיזציה למסד נתונים nOCR...", + "optimizeNOcrDatabaseQuestionXY": "להסיר את הקווים שאינם מבדילים בין תווים לתווים דומים במסד הנתונים nOCR \"{0}\"?\n\nפעולה זו מקטינה את מסד הנתונים ומאיצה את ה-OCR, בדרך כלל עם פחות שגיאות. לוקח עד דקה.\n\nגיבוי נשמר בשם \"{1}\".", + "optimizingNOcrDatabaseXY": "מבצע אופטימיזציה למסד נתונים nOCR... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "בוצעה אופטימיזציה למסד הנתונים nOCR \"{0}\": {1:#,##0} -> {2:#,##0} קווים.", "startTraining": "התחל אימון", "abortTraining": "בטל אימון", "trainingOptions": "אפשרויות אימון", + "trainNOcrSubtitle": "מעבד תווים בגופנים המותקנים ומלמד את nOCR את הצורות שלהם. בחר את הגופנים שבהם משתמשות הכתוביות שלך.", + "xFontsSelected": "{0:#,##0} נבחרו", + "subtitleFonts": "גופני כתוביות", + "emptyDatabase": "מסד נתונים ריק", + "startFromDatabase": "התחל מ", + "startFromDatabaseHint": "הוסף את התווים שאומנו לעותק של מסד נתונים קיים (מומלץ) או התחל ממסד נתונים ריק", + "fontSizes": "גדלי גופן", + "fontSizesHint": "גדלי גופן בפיקסלים לעיבוד, מופרדים בפסיקים, לדוגמה \"30, 40\"", + "numberOfLineSegmentsHint": "קווים הנבדקים לכל תו - יותר פירושו מחמיר יותר אך איטי יותר", + "enterDatabaseName": "הזן שם למסד הנתונים", + "trainingFontXSizeYCharacterZ": "מאמן את \"{0}\" בגודל {1} px: {2}", + "xLearned": "{0:#,##0} נלמדו", + "xSkipped": "{0:#,##0} דולגו", "charactersToTrain": "תווים לאימון", "letterCombinationsToTrain": "צירופי אותיות שעשויים להתפצל לתמונה אחת", "importCharactersFromSubtitleFile": "ייבא תווים מקובץ כתוביות...", @@ -3901,6 +4313,8 @@ "drawZoomOut": "הקטן זום (Ctrl+-)", "drawResetView": "אפס תצוגה (Ctrl+0)", "drawToggleGrid": "הצג/הסתר רשת (Ctrl+G)", + "drawTogglePreview": "החלף תצוגה מקדימה (F9)", + "drawPreviewFailed": "התצוגה המקדימה נכשלה - נדרש ffmpeg עם libass (מסנן subtitles)", "drawCopyToClipboard": "העתק ללוח הגזירים (Ctrl+C)", "drawShapes": "צורות", "drawSelectedPoint": "נקודה נבחרת", @@ -3908,16 +4322,86 @@ "drawSelectedLayer": "שכבה נבחרת", "drawToolX": "כלי: {0}", "drawHelpText": "לחץ להוספת נקודות • Enter/F8 לסגירת צורה • Shift+גרור להזזת תצוגה • Ctrl+גלגלת לזום", + "drawMoveToLayer": "העבר לשכבה", + "drawFlipHorizontal": "הפוך אופקית", + "drawFlipVertical": "הפוך אנכית", + "drawHideShape": "הסתר צורה", + "drawShowShape": "הצג צורה", + "drawHideLayer": "הסתר שכבה", + "drawShowLayer": "הצג שכבה", + "drawDeleteLayer": "מחק שכבה", + "drawDeletePoint": "מחק נקודה", + "drawCancelDrawing": "בטל ציור", + "drawLayerX": "שכבה {0}", + "drawImportSvg": "ייבוא תמונת SVG...", + "drawRotateClockwise": "סובב 90° בכיוון השעון", + "drawConvertToCurve": "המר מקטע לעקומה", + "drawBackground": "רקע", + "drawPosition": "מיקום", + "drawZoom": "זום", + "drawShapeTool": "כלי צורות", + "drawColorPickerTool": "בחר צבע מצורה או מהרקע", + "drawShapeLibrary": "ספריית צורות", + "drawShapeLibraryHint": "גרור על משטח הציור כדי למקם צורה, או לחץ לגודל ברירת המחדל. Shift שומר על הפרופורציות שלה.", + "drawAddToLibrary": "הוסף לספריית הצורות...", + "drawRemoveFromLibrary": "הסר מספריית הצורות", + "drawShapeName": "שם הצורה", + "drawCategorySpeechBubbles": "בועות דיבור", + "drawCategoryArrows": "חצים", + "drawCategoryBasicShapes": "צורות בסיסיות", + "drawCategorySymbols": "סמלים", + "drawCategoryMyShapes": "הצורות שלי", + "drawShapeSpeechBubble": "בועת דיבור", + "drawShapeSpeechBubbleRight": "בועת דיבור, זנב ימינה", + "drawShapeSpeechBubbleUp": "בועת דיבור, זנב למעלה", + "drawShapeOvalBubble": "בועת דיבור אליפטית", + "drawShapeBoxBubble": "בועת דיבור מלבנית", + "drawShapeThoughtBubble": "בועת מחשבה", + "drawShapeShoutBubble": "בועת צעקה", + "drawShapeCaptionBox": "תיבת כיתוב", + "drawShapeArrow": "חץ", + "drawShapeDoubleArrow": "חץ כפול", + "drawShapeChevron": "שברון", + "drawShapeCurvedArrow": "חץ מעוקל", + "drawShapeRoundedRectangle": "מלבן מעוגל", + "drawShapeTriangle": "משולש", + "drawShapeDiamond": "מעוין", + "drawShapePentagon": "מחומש", + "drawShapeHexagon": "משושה", + "drawShapeOctagon": "מתומן", + "drawShapeStar": "כוכב", + "drawShapeRing": "טבעת", + "drawShapePlus": "פלוס", + "drawShapeBanner": "כרזה", + "drawShapeHeart": "לב", + "drawShapeCheck": "סימן וי", + "drawShapeMusicNote": "תו מוזיקלי", + "drawShapeMusicNotes": "תווים מוזיקליים", + "drawShapeLightning": "ברק", + "drawShapeCloud": "ענן", + "drawShapeMoon": "ירח", + "drawShapeBadge": "תג", + "drawSize": "גודל", + "drawLayer": "שכבה", + "drawBackgroundVideoFrame": "פריים וידאו (מיקום נוכחי)", + "drawBackgroundVideoFrameAt": "פריים וידאו במיקום...", + "drawBackgroundImage": "קובץ תמונה...", + "drawBackgroundNone": "ללא רקע", + "drawBackgroundStretch": "מתח את התמונה למשטח הציור", + "drawBackgroundOpacity": "אטימות הרקע", + "drawBackgroundVideoFrameFailed": "לא ניתן היה לקבל פריים וידאו ב-{0}.", + "drawImages": "תמונות", + "drawConvertToLine": "המר מקטע לקו", + "drawConvertShapeToCurves": "המר את כל הקווים לעקומות", + "drawConvertShapeToLines": "המר את כל העקומות לקווים", + "drawRotateCounterClockwise": "סובב 90° נגד כיוון השעון", + "drawSvgImages": "תמונות SVG", + "drawSvgNoShapes": "לא נמצאו צורות מלאות או קווי מתאר בקובץ ה-SVG.", "progressBarTitle": "מחוון התקדמות ASSA", "progressBarSettings": "מחוון התקדמות", - "progressBarPosition": "מיקום", - "progressBarBottom": "למטה", - "progressBarTop": "למעלה", "mouseOverColor": "צבע במעבר עכבר", "clickedColor": "צבע בלחיצה", "progressBarForeColor": "צבע גופן", - "progressBarBackColor": "צבע רקע", - "progressBarStyle": "סגנון", "progressBarSquareCorners": "פינות ישרות", "progressBarRoundedCorners": "פינות מעוגלות", "progressBarChapters": "פרקים", @@ -3926,8 +4410,6 @@ "progressBarXAdjustment": "התאמת ציר X", "progressBarYAdjustment": "התאמת ציר Y", "progressBarTextAlignment": "יישור טקסט", - "progressBarTakePosFromVideo": "קבל מיקום מהוידאו", - "progressBarPreview": "תצוגה מקדימה", "fontCollectorTitle": "אוסף גופנים", "fontCollectorUsedIn": "בשימוש ב-", "fontCollectorFontFiles": "קובצי גופן", @@ -3974,9 +4456,7 @@ "resolutionResamplerVideoDiffers": "רזולוציית הכתוביות ({0}x{1}) שונה מרזולוציית הוידאו ({2}x{3}).\nלשנות את הכתובית כך שתתאים לוידאו?", "resolutionResamplerAskOnVideoOpen": "שאל כאשר נפתח וידאו ברזולוציה שונה", "backgroundBoxGenerator": "מחולל תיבת רקע", - "backgroundBoxPadding": "ריפוד (Padding)", "backgroundBoxFillWidth": "מלא רוחב", - "backgroundBoxBoxColor": "צבע תיבה", "backgroundBoxRadius": "רדיוס", "backgroundBoxCircle": "עיגול", "backgroundBoxSpikes": "קוצים", @@ -3988,12 +4468,9 @@ "backgroundBoxTornPaperDouble": "נייר קרוע (למעלה ולמטה)", "backgroundBoxStarburst": "התפרצות כוכב", "backgroundBoxScroll": "מגילה / קלף", - "stylesTitle": "סגנונות Advanced Sub Station Alpha", "stylesInFile": "סגנונות בקובץ", "stylesSaved": "הסגנונות נשמרו", - "category": "קטגוריה", "allCategories": "[הכל]", - "defaultCategory": "ברירת מחדל", "newCategory": "קטגוריה חדשה...", "renameCategory": "שנה שם קטגוריה...", "deleteCategory": "מחק קטגוריה", @@ -4013,13 +4490,26 @@ "graphics": "גרפיקה", "copyToStorageStyles": "העתק לסגנונות השמורים במערכת", "copyToFileStyles": "העתק לסגנונות הקובץ", + "styleXAlreadyExistsInStorage": "סגנון בשם \"{0}\" כבר קיים בסגנונות השמורים.\n\nלדרוס אותו, או לשמור את שניהם (העותק יקבל שם חדש)?", + "styleXAlreadyExistsInFile": "סגנון בשם \"{0}\" כבר קיים בקובץ.\n\nלדרוס אותו, או לשמור את שניהם (העותק יקבל שם חדש)?", + "styleNameCannotBeEmpty": "שם סגנון אינו יכול להיות ריק.", + "styleNameXIsUsedMoreThanOnce": "שם הסגנון \"{0}\" משמש יותר מסגנון אחד בקובץ.", + "overwrite": "דרוס", + "keepBoth": "שמור את שניהם", + "doThisForAllConflictingStyles": "בצע זאת עבור כל הסגנונות המתנגשים", "setStyleAsDefault": "קבע סגנון כברירת מחדל", "takeUsagesFromDotDotDot": "קח שימושים מ...", "replaceStyleWithDotDotDot": "החלף סגנון ב...", "noAttachmentsFound": "לא נמצאו קבצים מצורפים בקובץ ה-ASSA הנבחר.", "deleteStyleQuestion": "למחוק סגנון?", "deleteStylesQuestion": "למחוק סגנונות?", + "deleteXStylesQuestion": "האם ברצונך למחוק {0} סגנונות?", + "deleteXStylesFromStorageQuestion": "האם ברצונך למחוק {0} סגנונות מהסגנונות השמורים?", + "deleteStyleXFromStorageQuestion": "האם ברצונך למחוק את הסגנון \"{0}\" מהסגנונות השמורים?", + "deleteStyleXFromFileQuestion": "האם ברצונך למחוק את הסגנון \"{0}\" מהקובץ הנוכחי?", "openStyleImportFile": "פתח קובץ כתוביות לייבוא סגנונות ממנו", + "styleImportFiles": "קובצי סגנון (.ass, .sty, קטגוריות .template של Subtitle Edit 4)", + "ssaStyleImportFiles": "קובצי סגנון (.ssa, .ass, .sty)", "primary": "ראשי", "secondary": "משני", "applyOverrideTags": "החל תגיות דריסה", @@ -4034,7 +4524,6 @@ "spaceIncrease": "הגדל מרווח", "popIn": "כניסה בקפיצה (Pop in)", "spinIn": "כניסה בסיבוב", - "playCurrent": "נגן נוכחי", "setPosition": "קבע מיקום", "rotation": "סיבוב", "scaleX": "קנה מידה X", @@ -4078,10 +4567,8 @@ "advancedEffectOldMovieDescription": "מדמה מקרן סרטים ישן של 35 מ\"מ עם רעש, אפקט פינות כהות ושריטות", "advancedEffectNeonBurst": "מתפרץ ניאון", "advancedEffectNeonBurstDescription": "כתוביות בסגנון 'Shorts' עתיר אנרגיה עם זוהר ניאון ואנימציית קפיצה בכניסה", - "advancedEffectSettings": "הגדרות", "advancedEffectSnowFlakeCount": "כמות פתיתי שלג", "advancedEffectStarfieldStarCount": "כמות כוכבים", - "advancedEffectStarfieldSpeed": "מהירות", "advancedEffectGlitch": "תקלה (Glitch)", "advancedEffectGlitchDescription": "תקלה דיגיטלית עם עיוות צבעוני, הבזקים לבנים ושכבות של עיוות", "advancedEffectBounceIn": "כניסה בקפיצה", @@ -4090,8 +4577,6 @@ "advancedEffectFirefliesDescription": "נקודות זהובות-ענבריות זוהרות וחמימות הנסחפות באופן אורגני על פני המסך עם זוהר פועם", "advancedEffectMatrix": "מטריקס", "advancedEffectMatrixDescription": "עמודות תווים ירוקים נופלות כאשר טקסט הכתובית נבנה אות אחר אות מתוך הגשם", - "advancedEffectAudioBars": "עמודות שמע (גל שמע)", - "advancedEffectAudioBarsDescription": "עמודות אקולייזר מונפשות המונעות על ידי גל השמע — העמודות נגללות שמאלה כגל שמע ופועמות עם השמע", "advancedEffectAudioPulse": "פעימת טקסט לפי שמע", "advancedEffectAudioPulseDescription": "טקסט הכתובית זוהר ופועם בהתאם לעוצמת השמע — קטעים שקטים מציגים טקסט רגיל, ושיאי עוצמה מוסיפים הילה צבעונית והגדלה קלה", "advancedEffectConfetti": "התפרצות קונפטי", @@ -4105,7 +4590,6 @@ "advancedEffectFancyKaraokeGlow": "זוהר מילה פעילה", "advancedEffectFancyKaraokeActiveColor": "צבע פעיל", "advancedEffectFancyKaraokeInactiveColor": "צבע לא פעיל", - "advancedEffectFancyKaraokeInactiveOpacity": "אטימות לא פעילה (0-255)", "advancedEffectWordSpacingPixels": "מרווח (פיקסלים)", "advancedEffectSlowZoomOut": "זום-אאוט איטי", "advancedEffectSlowZoomOutDescription": "הטקסט מתחיל מעט גדול יותר ומתכווץ בעדינות לגודלו הרגיל לאורך משך הכתובית", @@ -4121,7 +4605,6 @@ "advancedEffectSlideInLeftDescription": "הטקסט מחליק פנימה מחוץ למסך משמאל, נעצר, ואז יוצא חזרה שמאלה", "advancedEffectSlideInRight": "החלקה מימין", "advancedEffectSlideInRightDescription": "הטקסט מחליק פנימה מחוץ למסך מימין, נעצר, ואז יוצא חזרה ימינה", - "advancedEffectFadeInOut": "עמעום כניסה/יציאה", "advancedEffectFadeInOutDescription": "הטקסט מתעמעם בכניסה בתחילה ומתעמעם ביציאה בסוף כל כתובית", "advancedEffectWordFlip3D": "היפוך מילים תלת-ממדי", "advancedEffectWordFlip3DDescription": "כל מילה מתקפלת פנימה בהיפוך תלת-ממדי וקפיצה אלסטית בזמן אמירתה — סגנון כתוביות 'Shorts' מודרני", diff --git a/src/ui/Assets/Languages/Hungarian.json b/src/ui/Assets/Languages/Hungarian.json index a6ffac75667..8c1793c81da 100644 --- a/src/ui/Assets/Languages/Hungarian.json +++ b/src/ui/Assets/Languages/Hungarian.json @@ -1,9 +1,50 @@ { "title": "Subtitle Edit", - "version": "v5.3.0-beta11", + "version": "v5.3.0", "translatedBy": "Zityi's Translator Te@m", "cultureName": "hu-HU", "general": { + "prompt": "Utasítás", + "temperature": "Hőmérséklet", + "preset": "Előbeállítás", + "output": "Kimenet", + "outputFormat": "Kimeneti formátum", + "other": "Egyéb", + "timeCodeFormat": "Időkód formátum", + "topBottomMargin": "Felső/alsó margó", + "theme": "Téma", + "brightness": "Fényerő", + "chooseColor": "Szín kiválasztása", + "lineX": "{0}. sor", + "playLine": "Sor lejátszása", + "maxLineLength": "Max. sorhossz", + "maxCharsPerSec": "Max. karakter/mp", + "maxNumberOfLines": "Max. sorszám", + "subtitles": "Feliratok", + "shotChanges": "Vágásváltások", + "chapters": "Fejezetek", + "audio": "Hang", + "interjections": "Indulattszavak", + "blankLines": "Üres sorok", + "editWholeText": "Teljes szöveg szerkesztése", + "noTextInClipboard": "Nincs szöveg a vágólapon", + "noSubtitlesFoundTitle": "Nincsenek feliratok", + "replacedXOccurrences": "{0} előfordulás lecserélve", + "invalidRegularExpressionX": "Érvénytelen reguláris kifejezés: {0}", + "discardChangesTitle": "Elveti a módosításokat?", + "downloadingXDotDotDot": "{0} letöltése...", + "importTimeCodesDotDotDot": "Időkódok importálása...", + "original": "Eredeti", + "nextChange": "Következő módosítás", + "previousChange": "Előző módosítás", + "changeXOfY": "Módosítás: {0} / {1}", + "tooLong": "Túl hosszú", + "tooShort": "Túl rövid", + "overlapping": "Átfedő", + "detail": "Részlet", + "fixOcrErrors": "OCR hibák javítása", + "runningOcrXY": "OCR futtatása... {0}/{1}", + "llamaCppDownloadEnginePrompt": "A llama.cpp használatához le kell tölteni a llama-server motort. Letölti most?", "abort": "Megszakítás", "actor": "Szereplő", "actors": "Szereplők", @@ -13,6 +54,18 @@ "actorPickerKeysHint": "Nyomjon meg egy számot vagy az Enter-t a beszélő beállításához. Az Alt+Fel/Le módosítja a sorrendet, a Delete eltávolítja a beszélőt.", "actorPickerNewActorX": "Új beszélő \"{0}\"", "actorPickerLinesSelectedX": "Kijelölt sorok: {0}", + "setStyleDotDotDot": "Stílus beállítása...", + "stylePickerTitle": "Stílus beállítása", + "stylePickerFilterHint": "Gépeljen a szűréshez, vagy írjon be egy új stílusnevet", + "stylePickerKeysHint": "Nyomjon meg egy számot (1-9, 0) a stílus beállításához az összes kijelölt sorra.", + "stylePickerNewStyleX": "Új stílus: \"{0}\"", + "stylePickerNewStyleInfo": "Nyomja meg az Enter billentyűt a stílus alapértelmezett beállításokkal történő hozzáadásához és a kijelölt sorokra való beállításához. A betűtípust, a színeket és a pozíciót később a \"Stílusok kezelése...\" menüpontban módosíthatja.", + "stylePickerCurrentStyleX": "Jelenlegi stílus: {0}", + "stylePickerLinesUsingStyleX": "Ezt a stílust használó sorok: {0}", + "stylePickerMarginsXYZ": "Bal {0}, jobb {1}, függőleges {2}", + "stylePickerSetStyle": "Stílus _beállítása", + "stylePickerManageStyles": "Stílusok kezelése...", + "stylePickerManageStylesHint": "Az ablak bezárása és a stíluskezelő megnyitása a betűtípusok, színek, pozíció és egyebek szerkesztéséhez", "add": "Hozzáadás", "addDotDotDot": "Hozzáadás...", "addToNamesListCaseSensitive": "Hozzáadás a nevek listájához (kis- és nagybetűérzékeny)", @@ -345,6 +398,7 @@ "mergeSelectedLinesDialog": "Kijelölt sorok egyesítése párbeszédként", "mergeWithLineAfterAndAutoBreak": "Egyesítés a következő sorral és automatikus tördelés", "mergeWithLineAfterKeepBreaks": "Egyesítés a következő sorral (törések megtartásával)", + "mergeWithLineAfterAndUnbreak": "Egyesítés a következő sorral és összekapcsolás", "mergeWithLineBeforeAndAutoBreak": "Egyesítés az előző sorral és automatikus tördelés", "mergeWithLineBeforeKeepBreaks": "Egyesítés az előző sorral (törések megtartásával)", "middleCenter": "Középre igazítva", @@ -430,6 +484,7 @@ "percent": "Százalék", "pickLayer": "Réteg beállítása", "pickOllamaModel": "Ollama modell kiválasztása", + "pickModel": "Modell kiválasztása", "llamaCppUseRemoteServer": "Külső szerver használata (URL)", "llamaCppEngineSettings": "llama.cpp motor beállításai", "llamaCppEngineSettingsSubtitle": "Helyi llama.cpp szerver build", @@ -506,6 +561,7 @@ "reset": "Visszaállítás", "resizePanels": "Panelek átméretezése", "resolution": "Felbontás", + "retry": "Újra", "reverseRightToLeftStartEnd": "RTL kezdet/vég megfordítása", "right": "Jobbra", "rightToLeft": "Jobbról balra", @@ -567,6 +623,8 @@ "shadowColor": "Árnyék színe", "shadowWidth": "Árnyék szélessége", "shiftLineBy": "Sor eltolása ennyivel", + "shotIn": "Vágás be", + "shotOut": "Vágás ki", "shortcut": "Gyorsbillentyű", "shortcuts": "Gyorsbillentyűk", "show": "Megjelenítés", @@ -578,9 +636,13 @@ "showStartColumn": "\"Kezdet\" oszlop megjelenítése", "showHideColumn": "\"Elrejtés\" oszlop megjelenítése", "showHistory": "Előzmények megjelenítése", + "clearHistory": "Előzmények törlése", + "removeFromHistory": "Eltávolítás az előzményekből", "showLayerColumn": "\"Réteg\" oszlop megjelenítése", "showPreview": "Előnézet megjelenítése", "showShotChangesList": "Vágásváltások listájának megjelenítése", + "showShotInColumn": "\"Vágás be\" oszlop megjelenítése", + "showShotOutColumn": "\"Vágás ki\" oszlop megjelenítése", "showStyleColumn": "\"Stílus\" oszlop megjelenítése", "showTeletext": "Teletext oszlop megjelenítése a listanézetben", "showTimeCodes": "Időkódok megjelenítése", @@ -637,12 +699,14 @@ "styleExaggeration": "Stílus eltúlzása", "styles": "Stílusok", "subtitleFile": "Feliratfájl", + "subtitleFileChangedOutsideX": "A(z) \"{0}\" fájl a Subtitle Editen kívül módosult.\n\nÚjratölti, és elveti a módosításait?", "subtitleFileName": "Feliratfájl neve", "subtitleFileSaved": "Feliratfájl elmentve", "subtitleFileSavedToX": "Feliratfájl elmentve ide: {0}", "subtitleFiles": "Feliratfájlok", "subtitleFormats": "Feliratformátumok", "subtitleLoadedX": "Felirat betöltve: {0}", + "subtitleReloadedChangedOutsideX": "Felirat újratöltve (a Subtitle Editen kívül módosult): {0}", "suffix": "Utótag", "suggestions": "Javaslatok", "sync": "Szinkron", @@ -726,10 +790,23 @@ "videoCustom3ForwardX": "Videó, egyéni ezredmásodperccel ({0:#,###,##0}) előre, 3", "videoCustom4BackX": "Videó, egyéni ezredmásodperccel ({0:#,###,##0}) vissza, 4", "videoCustom4ForwardX": "Videó, egyéni ezredmásodperccel ({0:#,###,##0}) előre, 4", + "videoCustom1BackAndPauseX": "Videó, egyéni ezredmásodperc ({0:#,###,##0}) vissza és szünet, 1", + "videoCustom1ForwardAndPauseX": "Videó, egyéni ezredmásodperc ({0:#,###,##0}) előre és szünet, 1", + "videoCustom2BackAndPauseX": "Videó, egyéni ezredmásodperc ({0:#,###,##0}) vissza és szünet, 2", + "videoCustom2ForwardAndPauseX": "Videó, egyéni ezredmásodperc ({0:#,###,##0}) előre és szünet, 2", + "videoCustom3BackAndPauseX": "Videó, egyéni ezredmásodperc ({0:#,###,##0}) vissza és szünet, 3", + "videoCustom3ForwardAndPauseX": "Videó, egyéni ezredmásodperc ({0:#,###,##0}) előre és szünet, 3", + "videoCustom4BackAndPauseX": "Videó, egyéni ezredmásodperc ({0:#,###,##0}) vissza és szünet, 4", + "videoCustom4ForwardAndPauseX": "Videó, egyéni ezredmásodperc ({0:#,###,##0}) előre és szünet, 4", "videoExtension": "Videófájl kiterjesztése", "videoFile": "Videófájl", "videoFileGenerated": "Videófájl létrehozva", "videoFileGeneratedX": "Videófájl generálva: \"{0}\"", + "videoFilesGenerated": "Videófájlok elkészültek", + "xVideosGenerated": "{0} videó elkészült", + "xOfYVideosGenerated": "{0} / {1} videó elkészült", + "savedInX": "Mentve ide: {0}", + "savedInXFolders": "Mentve {0} mappába", "videoFiles": "Videófájlok", "videoAndAudioFiles": "Videó- és hangfájlok", "videoOffset": "Videóeltolás", @@ -856,6 +933,7 @@ "multipleReplace": "_Több elem cseréje...", "fillSelectedLinesWithClipboard": "Kijelölt sorok kitöltése a vágólap szövegével", "goToLineNumber": "_Ugrás sorszámra...", + "commandPalette": "_Parancspaletta...", "rightToLeftMode": "_Jobbról balra mód", "modifySelectionDotDotDot": "Kijelölés _módosítása...", "tools": "_Eszközök", @@ -1048,12 +1126,15 @@ "charactersPerSecond": "Karakter/másodperc: {0}", "chooseColumn": "Oszlop kiválasztása", "columnPaste": "Oszlop beillesztése", + "commandPaletteTitle": "Parancspaletta", + "commandPaletteSearchPlaceholder": "Gépeljen a parancsok kereséséhez...", + "commandPaletteNoCommandsFound": "Nincs egyező parancs", "createdEmptyTranslation": "Üres fordítás létrehozva az aktuális feliratból", "deleteText": "Szöveg törlése", "deleteTextAndShiftCellsUp": "Szöveg törlése és a cellák eltolása felfelé", "endTimeMustBeAfterStartTime": "A befejezési időnek a kezdési idő után kell lennie.", "errorLoad7Zip": "Ez a fájl tömörített 7-Zip fájlnak tűnik.\n\nA Subtitle Edit nem tud megnyitni tömörített fájlokat.", - "errorLoadBinaryZeroes": "Sajnos ez a fájl csak bináris nullákat tartalmaz!\n\nHa a fájlt a Subtitle Edit programmal szerkesztette, előfordulhat, hogy talál biztonsági mentést a Fájl -> Automatikus mentés visszaállítása... menüpontban.", + "errorLoadBinaryZeroes": "Sajnos ez a fájl csak bináris nullákat tartalmaz!\n\nHa a fájlt a Subtitle Edit programmal szerkesztette, előfordulhat, hogy talál biztonsági mentést a Fájl -> Automatikus mentés visszaállítása... menüpontban.", "errorLoadGZip": "Ez a fájl tömörített GZip fájlnak tűnik.\n\nA Subtitle Edit nem tud megnyitni tömörített fájlokat.", "errorLoadLargeFile": "Ez a fájl túl nagy ahhoz, hogy feliratfájlként megnyitható legyen.", "errorLoadVideoFilePrompt": "Ez a fájl videófájlnak tűnik:\n{0}\n\nVideót a \"Videó -> Videó megnyitása\" menüponton keresztül vagy a videónak a videólejátszóra történő ráhúzásával nyithat meg.\n\nSzeretné megnyitni videófájlként?", @@ -1093,6 +1174,7 @@ "overwriteExistingCells": "Meglévő cellák felülírása", "overwriteOrShiftCellsDown": "Felülírás/cellák eltolása lefelé", "parsingMatroskaFile": "Matroska fájl feldolgozása...", + "readingDvdSubtitles": "DVD-feliratok olvasása...", "pasteFromClipboardDotDotDot": "Beillesztés a vágólapról...", "redoPerformed": "Művelet újból végrehajtva", "redoPerformedXActionLeft": "Művelet újból végrehajtva (hátralévő műveletek: {0})", @@ -1132,12 +1214,14 @@ "trimmedXLines": "{0} feliratsor megvágva", "pastedXLinesOverSelectedLines": "Beillesztve {0} sor a kijelölt sorokra", "pastedXOfYLinesOverSelectedLines": "{0}/{1} sor beillesztve a kiválasztott sorok fölé - a többi nem fért el a kijelölésben", + "insertedXLinesFromClipboard": "{0} sor beillesztve a vágólapról", "openOriginalDifferentNumberOfSubtitlesXY": "Az eredeti feliratfájl nem tartalmaz ugyanannyi feliratot, mint az aktuális feliratfájl.\n\n• Eredeti feliratok száma: {0}\n• Aktuális feliratok száma: {1}", "originalTextReadOnly": "Eredeti szöveg (csak olvasható)", "originalTextEditMode": "Eredeti szöveg (szerkesztési mód)", "originalIsReadOnlyNotSaved": "Az eredeti felirat csak olvasható hivatkozás, és nem lett elmentve", "originalIsEmptyNotSaved": "Az eredeti felirat egyáltalán nem tartalmaz szöveget, és nem lett elmentve", "originalIsReadOnlyReference": "Az eredeti felirat csak olvasható hivatkozásként van nyitva", + "closeTranslationQuestionXY": "Bezárja a(z) \"{0}\" fordítást?\n\nAz eredeti \"{1}\" felirat lesz a szerkesztett felirat. Magát a fordítási fájlt ez nem módosítja.", "allowEditOfOriginalSubtitle": "Eredeti felirat szerkesztésének engedélyezése", "showAllOriginalLinesX": "Minden eredeti sor megjelenítése (itt {0} nem egyezik)", "showAllOriginalLinesHint": "Az egyezés nélküli sorok extra sorokként jelennek meg, így láthatja, mi hiányzik a fordításból.", @@ -1172,6 +1256,7 @@ "fileExportedInFormatXToY": "Fájl exportálva {0} formátumban ide: {1}", "fileExportedInFormatXToFileY": "Fájl exportálva \"{0}\" formátumban a(z) \"{1}\" fájlba", "fixedXLines": "{0} sor javítva", + "toolXChangedYLines": "{0}: {1} sor módosítva", "transcriptionCompletedWithXLines": "Frissítés befejeződött {0} sorral", "openSubtitleFileX": "Megnyitja a(z) \"{0}\" feliratfájlt?", "replacedXOccurrences": "{0} előfordulás lecserélve", @@ -1262,6 +1347,21 @@ "formattingDotDotDot": "Formázás...", "imageBasedSubtitleForEditDotDotDot": "Képalapú felirat szerkesztéshez...", "imageBasedSubtitleForOcrDotDotDot": "Képalapú felirat OCR-hez...", + "dvdSubtitlesDotDotDot": "Feliratok DVD-ről (IFO/VOB)...", + "titleImportDvd": "Feliratok importálása DVD-ről", + "dvdIfoFile": "IFO-fájl", + "dvdVobFiles": "VOB-fájlok", + "dvdVideoStandard": "Videószabvány", + "dvdStartRipping": "Kinyerés indítása", + "dvdRippingAborted": "Kinyerés megszakítva", + "dvdOpenIfoFile": "DVD IFO-fájl megnyitása", + "dvdAddVobFiles": "VOB-fájlok hozzáadása", + "dvdIfoFiles": "DVD IFO-fájlok", + "dvdVobFileType": "DVD VOB-fájlok", + "dvdDropHint": "Nyisson meg egy IFO-fájlt (VIDEO_TS\\VTS_01_0.IFO), vagy adjon hozzá VOB-fájlokat - vagy húzza ide őket", + "dvdNotAnIfoFileX": "A(z) {0} nem DVD IFO-fájl", + "dvdMenuIfoNoTitleSetsX": "Nem található címkészlet (VTS_xx_0.IFO) a(z) {0} mellett", + "dvdEncryptedXOfY": "A(z) {1} feliratcsomagból {0} még mindig CSS-titkosított - ezeket a VOB-fájlokat visszafejtés nélkül másolták, így egyes feliratképek torzak lesznek.\n\nA tiszta eredményért először fejtse vissza a DVD-t egy DVD-kinyerő eszközzel.\n\nMégis folytatja?", "splitTextAt": "Szöveg felosztása itt:", "blankLines": "Üres sorok", "oneLineIsOneSubtitle": "Egy sor egy felirat", @@ -1286,7 +1386,8 @@ "forcedAlignerIsolatingSpeech": "Beszéd elkülönítése... {0}", "forcedAlignerIsolatingSpeechFailed": "Nem sikerült elkülöníteni a beszédet - a záró időpontok az olvasási idő alapján lettek beállítva.", "forcedAlignerModel": "Igazító modell", - "forcedAlignerDownloadEngine": "Motor letöltése / frissítése..." + "forcedAlignerDownloadEngine": "Motor letöltése / frissítése...", + "forcedAlignerEstimatedXOfY": "{1} sorból {0} nem igazítható, ezért olvasási idő alapján lettek elhelyezve - az időkódjaik csak becsültek. A szöveg valószínűleg hosszabb annál, ami a videóban elhangzik." }, "export": { "exportImagesProfiles": "Képprofilok exportálása", @@ -1488,7 +1589,7 @@ "topBottomMargin": "Felső/alsó margó", "fadeUpTime": "Áttűnés ideje felfelé", "fadeDownTime": "Áttűnés ideje lefelé", - "Pozíció": "Z-pozíció", + "zPosition": "Z-pozíció", "zPositionHelp": "A pozitív számok távolítják, a negatív számok közelebb hozzák a szöveget; ha a z-pozíció nulla, akkor 2D-s" }, "webVtt": { @@ -1527,11 +1628,61 @@ "ignoreFormatting": "Formázás figyelmen kívül hagyása", "ignoreFormattingHint": "A csak formázási címkékben, mint az vagy az {\\an8}, eltérő sorok nem számítanak eltérőnek", "showOnlyDifferencesInText": "Csak szövegbeli eltérések", + "ignoreNumbering": "Számozás figyelmen kívül hagyása", + "ignoreNumberingHint": "A csak a sorszámukban eltérő sorok nem számítanak eltérőnek", + "ignoreTimeDifferenceMs": "Időtűrés (ezredmp)", + "ignoreTimeDifferenceMsHint": "Az ennyi ezredmásodperccel vagy kevesebbel eltérő kezdő- és záróidők nem számítanak eltérőnek", + "compareDifferences": "Eltérések", + "compareTextDifferences": "Szöveges eltérések", + "compareCurrent": "Jelenlegi", + "compareReference": "Referencia", + "compareEditable": "Szerkeszthető", + "compareEditableHint": "Az itt végzett módosítások az Alkalmazás gombra kattintva kerülnek vissza a feliratba", + "compareReadOnly": "Csak olvasható", + "compareTakeFromReference": "Szöveg és időzítés átvétele a referenciából", + "compareInsertFromReference": "Sor beszúrása a jelenlegi feliratba", + "compareDeleteFromCurrent": "Sor törlése a jelenlegi feliratból", + "compareTakeText": "Szöveg átvétele", + "compareTakeTiming": "Időzítés átvétele", + "compareEditLine": "Sor szerkesztése", + "compareEditHint": "Ctrl+Enter a mentéshez, Esc a megszakításhoz", + "compareEdited": "Szerkesztve", + "compareOnePendingChange": "1 függőben lévő módosítás", + "compareXPendingChanges": "{0} függőben lévő módosítás", + "compareDiscardXChanges": "Elveti az Összehasonlításban végzett {0} módosítást?", + "compareXChangesApplied": "Összehasonlítás: {0} módosítás alkalmazva", + "compareChangeTextX": "#{0} szöveg a referenciából", + "compareChangeTimingX": "#{0} időzítés a referenciából", + "compareChangeTextAndTimingX": "#{0} szöveg és időzítés a referenciából", + "compareChangeEditedX": "#{0} szerkesztve", + "compareChangeInsertedX": "#{0} beszúrva", + "compareChangeDeletedX": "#{0} törölve", + "compareSyncPoint": "Szinkronizálási pont", + "compareSyncPointHint": "Szinkronizálási pont - ez a két sor mindig párként jelenik meg, a felette és alatta lévő sorok pedig külön kerülnek egymás mellé", + "compareSyncPickCurrent": "Szinkronizálási pont: ennek a jelenlegi sornak a használata", + "compareSyncPickReference": "Szinkronizálási pont: ennek a referenciasornak a használata", + "compareSyncRemove": "Szinkronizálási pont eltávolítása", + "compareClearXSyncPoints": "Szinkronizálási pontok törlése ({0})", + "compareSyncCurrentPickedX": "A jelenlegi #{0} kiválasztva szinkronizálási pontként - jelölje ki a megfelelő referenciasort, és kattintson a Szinkron gombra", + "compareSyncReferencePickedX": "A referencia #{0} kiválasztva szinkronizálási pontként - jelölje ki a megfelelő jelenlegi sort, és kattintson a Szinkron gombra", + "compareSyncWithCurrentX": "Szinkron a jelenlegi #{0} sorral", + "compareSyncWithReferenceX": "Szinkron a referencia #{0} sorral", + "compareSyncApply": "Szinkron", + "compareSyncPointSetXY": "Szinkronizálási pont beállítva: a jelenlegi #{0} és a referencia #{1} mostantól párként jelenik meg", + "compareSyncAlreadyPairedXY": "A jelenlegi #{0} és a referencia #{1} már párként jelenik meg azonos kezdettel - nincs mit szinkronizálni", + "compareSyncPointShiftedXYZW": "Szinkronizálási pont beállítva: a jelenlegi #{0}-#{1} eltolva {2} értékkel, hogy a referencia #{3} sorral kezdődjön", + "compareChangeSyncShiftXYZ": "#{0}-#{1} eltolva {2} értékkel (szinkronizálási pont)", + "compareTimingDeltaHint": "Mennyivel később (+) vagy korábban (−) kezdődik és végződik a referencia a jelenlegi sorhoz képest", "loadXFromFile": "\"{0}\" betöltése fájlból", + "compareLoadSavedFile": "Mentett fájl betöltése", "saveCompareHtmlTitle": "Összehasonlítás HTML-fájl mentése", "pickMatroskaTrackX": "Matroska sáv kiválasztása - {0}", "pickTransportStreamTrackX": "Átviteli adatfolyam sávjának kiválasztása - {0}", + "chapters": "Fejezetek", + "dvdVobFilesMissingX": "Hiányzó VOB-fájlok ({0}% található)", "pickMp4TrackX": "MP4 sáv kiválasztása - {0}", + "pickMxfTrackX": "MXF-sáv kiválasztása - {0}", + "pickMpegTrackX": "MPEG-sáv kiválasztása - {0}", "rosettaProperties": "Timed Text Rosetta IMSC tulajdonságok", "rosettaFontSize": "Betűméret (sormagasság)", "propertyTimeBase": "Időalap", @@ -1606,7 +1757,8 @@ "findWhat": "Keresendő", "descriptionOptional": "Leírás (opcionális)", "invalidRegularExpressionX": "Érvénytelen reguláris kifejezés: {0}", - "regularExpressionTooSlowX": "A reguláris kifejezés leállt {0} másodperc után - a szabály átugrásra került, próbáljon meg egy egyszerűbb mintát" + "regularExpressionTooSlowX": "A reguláris kifejezés leállt {0} másodperc után - a szabály átugrásra került, próbáljon meg egy egyszerűbb mintát", + "moveToCategory": "Áthelyezés kategóriába" }, "find": { "searchTextWatermark": "Szöveg keresése...", @@ -1619,7 +1771,9 @@ "replaceIn": "Csere/keresés ebben:", "replaceInTextAndOriginal": "Szöveg és eredeti szöveg", "replaceInTextOnly": "Csak szöveg", - "replaceInOriginalOnly": "Csak eredeti szöveg" + "replaceInOriginalOnly": "Csak eredeti szöveg", + "replacedOneOccurrence": "Egy előfordulás lecserélve", + "replacedXOccurrences": "{0} előfordulás lecserélve" }, "regularExpressionContextMenu": { "wordBoundary": "Szóhatár (\\b)", @@ -1647,6 +1801,7 @@ "xLinesYSubtitles": "{0} sor, {1} felirat", "xLinesYSubtitlesZErrors": "{0} sor, {1} felirat, {2} hiba", "couldNotParseAsX": "Nem sikerült feldolgozni {0}-ként", + "readAsXUseAsY": "A forrás nem olvasható be {1} formátumként, de {0} formátumként igen.\nHasználja a sorokat, és továbbra is {1} formátumban ment?", "selectedXCharactersYLines": "Kijelölve: {0} karakter {1} sorban", "replacedXOccurrences": "Kicserélve {0} előfordulás", "invalidRegularExpression": "Érvénytelen reguláris kifejezés", @@ -1683,7 +1838,22 @@ "mismatchWarning": "Nem hasonlít az eredetire - lehet, hogy egy másik sorhoz tartozik", "engineError": "A MI-motor nem érhető el: {0}", "playCurrentLineHint": "A kijelölt sor lejátszása a videólejátszóban és szüneteltetés a végén (a sorra való dupla kattintás is)", - "editAfterHint": "Kattintson a kijelölt sor szövegére a javítás szerkesztéséhez az alkalmazás előtt (Enter: mentés, Escape: mégse)" + "editAfterHint": "Kattintson a kijelölt sor szövegére a javítás szerkesztéséhez az alkalmazás előtt (Enter: mentés, Escape: mégse)", + "template": "Sablon", + "templatePlaceholder": "Válasszon sablont a prompt lecseréléséhez", + "templateStandard": "Általános lektorálás", + "templateSpeechToText": "Beszédfelismerés utáni tisztítás", + "templateMachineTranslation": "Gépi fordítás javítása", + "templateSdh": "SDH / nagyothallók", + "referenceContext": "Referencia-környezet", + "referenceContextInfo": "Opcionális. Nevek, szereplők, szójegyzék, szinopszis vagy stílusjegyzetek - a modell ezt tekinti mérvadónak a nevek és kifejezések tekintetében. Minden köteggel elküldésre kerül.", + "referenceContextPlaceholder": "Nevek: Kaito, Mei néni, Dr. Hollis\nKifejezések: Shinkansen, warpmag\nSzinopszis: Kaito Tokióba utazik, hogy megtalálja eltűnt apját.", + "generateContext": "Generálás MI-vel", + "generateContextHint": "A kiválasztott MI-motor elolvassa a feliratot, és vázlatot készít a nevekről, kifejezésekről és egy szinopszisról - használat előtt ellenőrizze az eredményt", + "generatingContextPartXOfY": "{0}. rész olvasása ({1} közül)...", + "generatingContextSynopsis": "Szinopszis írása...", + "replaceContextQuestion": "Lecseréli a jelenlegi referencia-környezetet?", + "noContextGenerated": "Az MI-motor nem adott vissza használható referencia-információt." }, "aiAssistant": { "title": "MI asszisztens", @@ -1729,6 +1899,7 @@ "removeLineBreaksPixelWidth": "Egy sorba beleférő feliratok összekapcsolása (képpontszélesség)", "fixUppercaseIInsideLowercaseWords": "Kisbetűs szavakban lévő nagy 'I' betűk javítása (OCR hiba)", "fixDoubleApostrophes": "Dupla aposztróf karakterek ('') javítása egyetlen idézőjellé (\")", + "fixMisreadQuotes": "Idézőjelként félreolvasott aposztrófok javítása (OCR, angol)", "addPeriods": "Pont hozzáadása a sorok után, ha a következő sor nagybetűvel kezdődik", "startWithUppercaseLetterAfterParagraph": "Nagybetűvel kezdődjön a bekezdés után", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Nagybetűvel kezdődjön a bekezdésen belüli pont után", @@ -1751,6 +1922,7 @@ "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Foo
bar! -> Foo bar!", "fixDoubleApostrophesExample": "''Két egymás utáni szimpla idézőjelet tartalmaz'' -> \"Egy darab dupla idézőjelet tartalmaz\"", + "fixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "addPeriodsExample": "Hello world -> Hello world.", "startWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: Foobar!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Helló! hogy vagy?  -> Helló! Hogy vagy?", @@ -1840,6 +2012,8 @@ "fixMinDurationMs": "Minimális időtartam javítása (ezredmp)", "doNotGoPastShotChange": "Ne menjen túl a vágásváltáson", "fixMaxDurationMs": "Maximális időtartam javítása (ezredmp)", + "fixMinDurationFrames": "Minimális időtartam javítása (képkocka)", + "fixMaxDurationFrames": "Maximális időtartam javítása (képkocka)", "minimumDurationMilliseconds": "Minimális időtartam (milliszekundum):", "maximumDurationMilliseconds": "Maximális időtartam (milliszekundum):", "maxDurationShouldBeHigherThanMinDuration": "A maximális időtartamnak nagyobbnak kell lennie a minimális időtartamnál", @@ -1901,6 +2075,20 @@ "isolateSpeechHint": "Eltávolítja a zenét és a hangeffekteket az igazítás előtt, így az igazító csak a párbeszédet hallja. Segít a hangos zene vagy akció alatt elhangzó soroknál, de GPU-val körülbelül annyi ideig tart, mint maga a hanganyag – GPU nélkül pedig sokszorosáig.", "isolatingSpeech": "Beszéd elkülönítése... (ez eltart egy ideig)", "isolateSpeechFailed": "Nem sikerült elkülöníteni a beszédet - ehelyett az eredeti hanganyaghoz lett igazítva.", + "checkWithSpeechToText": "Ellenőrzés beszédfelismeréssel", + "checkWithSpeechToTextHint": "A hangot is átírja, és minden áthelyezést összevet azzal, ahol a szavak ténylegesen elhangzottak. A beszéd által megerősített nagy áthelyezések automatikusan be lesznek jelölve, a sor elhangzási helyétől eltávolodó áthelyezések pedig jelöletlenek maradnak ellenőrzésre. Azt is megmutatja, hogy az egyes sorok mekkora része hallható - az alacsony arány azt jelenti, hogy a szöveg eltér attól, ami elhangzik. Az a felirat, amely a maximális eltolásnál jobban elcsúszott - állandó eltolás, képkockasebesség-eltérésből adódó csúszás vagy jelenetvágások miatti ugrások -, először a hallott szavak alapján lesz szinkronizálva. A Crisp ASR Parakeetet használja, amely GPU-val egy nagyjátékfilmnél néhány percet vesz igénybe.", + "checkWithSpeechToTextNotAvailableX": "A beszédfelismeréses ellenőrzés nem érhető el ehhez: {0}", + "transcribingToCheck": "Átírás az igazítás ellenőrzéséhez...", + "speechToTextFailed": "A beszédfelismerés sikertelen - az időkódok nem lettek ellenőrizve.", + "speechToTextX": "Beszédfelismerés: {0}", + "speechToTextConfirmedXDisputedY": "Beszéd: {0} megerősítve, {1} vitatott", + "hardlyHeardX": "A beszédfelismerés a felirat szavainak csak {0}%-át hallotta. A felirat azon a nyelven van, amelyen beszélnek? Az igazító nem tud fordítást elhelyezni.", + "heard": "Hallott", + "heardHint": "A sor mekkora részét hallotta a beszédfelismerés. Az alacsony arány azt jelenti, hogy a szöveg eltér attól, ami elhangzik - itt tévedhet a legnagyobb valószínűséggel az igazító.", + "statusConfirmedBySpeech": "Beszéd által megerősítve", + "statusDisputedBySpeech": "Az eredeti helyén hallható", + "statusMovedWithSync": "A szinkronnal együtt áthelyezve", + "syncedFirstXY": "Először szinkronizálva: {0} mp az elején, {1} mp a végén", "showSpeechOnly": "Csak beszéd megjelenítése", "showSpeechOnlyHint": "Az igazított hullámforma kirajzolása a zene és hangeffektek nélkül megtisztított hanganyagból; az eredeti hullámforma változatlan marad az összehasonlításhoz. Akkor érhető el, ha a beszéd már el lett különítve – itt, vagy a főablak hullámformáján a \"Csak beszéd megjelenítése\" opcióval.", "align": "Igazítás", @@ -1915,6 +2103,7 @@ "meanShiftX": "Átlagos eltolás: {0} ms", "toCheckX": "Ellenőrizendő: {0}", "largeMovesToCheckX": "{0} sor magában nagy utat tenne meg, ezért nincsenek bejelölve – játssza le az Eredeti / Igazított opciót, és jelölje be a megfelelőket.", + "linesToCheckX": "{0} sor jelöletlen maradt ellenőrzésre - hallgassa meg őket (F5 lejátssza az igazított sort, Shift+F5 az eredetit), és jelölje be a helyeseket.", "changeXOfY": "Módosítás: {0} / {1}", "previousChange": "Előző módosítás", "nextChange": "Következő módosítás", @@ -1927,10 +2116,12 @@ "statusNoSpeech": "Nincs beszéd", "statusShiftTooLarge": "Megtartva - az eltolás túl nagy", "statusFailed": "Megtartva - az igazító meghiúsult", + "statusAdjustedByHand": "Kézzel módosítva", + "alignedWaveformHint": "Húzzon egy sort az áthelyezéséhez, vagy húzza a széleit a kezdete vagy vége módosításához.", + "playLine": "Sor lejátszása", + "undoAdjustment": "Módosítás visszavonása", "playPause": "Lejátszás / szünet", - "playOriginal": "Eredeti", "playAligned": "Igazítva", - "playOriginalHint": "A kijelölt sor lejátszása az eredeti időkódokkal", "playAlignedHint": "A kijelölt sor lejátszása az igazított időkódokkal", "apply": "Alkalmaz", "applyHint": "Törölje a pipát a sor mellől az eredeti időkódok megtartásához. Dupla kattintással lejátszhatja a sort." @@ -1941,6 +2132,11 @@ "presetDefault": "Alapértelmezett", "presetNetflix": "Netflix", "presetSdi": "SDI", + "saveAsProfile": "Mentés profilként...", + "deleteProfile": "Profil törlése", + "profileName": "Profil neve", + "overwriteProfileX": "Már létezik \"{0}\" nevű profil. Felülírja?", + "deleteProfileX": "Törli a(z) \"{0}\" profilt?", "gap": "Köz", "gapSuffix": "frames (also updates non-zero gap fields below)", "milliseconds": "ms", @@ -2008,6 +2204,7 @@ "addColor": "Szín hozzáadása", "deleteLinesWithSpecificActorsOrStyles": "Sorok törlése szereplők vagy stílusok szerint (többet vesszővel válasszon el)", "useSourceStylesIfPossible": "Forrásstílusok használata, ha lehetséges", + "keepSourceEmbeddedFonts": "Forrás beágyazott betűtípusainak megtartása (lábléc)", "editStyles": "Stílusok szerkesztése", "editProperties": "Tulajdonságok szerkesztése", "editAttachments": "Mellékletek szerkesztése", @@ -2042,7 +2239,20 @@ "addFolderRecursiveDotDotDot": "Mappa hozzáadása rekurzívan...", "selectFolderToConvert": "Mappa kiválasztása a konvertálandó fájlokkal", "includeSubfolders": "Tartalmazza az almappákat a mappa hozzáadásakor", + "videoFilesWhenAddingFolder": "Videófájlok (mkv, mp4, ts...) mappa hozzáadásakor", + "videoFilesAsk": "Rákérdezés", + "videoFilesInclude": "Feliratsávjaik hozzáadása", + "videoFilesSkip": "Kihagyás", + "folderContainsXVideoFiles": "A mappa {0} videófájlt tartalmaz (mkv, mp4, ts...).\n\nA beágyazott feliratsávjaikat is hozzáadja, vagy csak a feliratfájlokat?", + "addVideoFiles": "Videófájlok hozzáadása", + "skipVideoFiles": "Csak feliratfájlok", + "doNotAskAgainVideoFiles": "Ne kérdezze újra (módosítható a Csoportos átalakítás beállításaiban)", + "settingsSectionOutput": "Kimenet", + "settingsSectionAddingFiles": "Fájlok hozzáadása", + "settingsSectionImageBasedSubtitles": "Képalapú feliratok (OCR)", + "settingsSectionOther": "Egyéb", "keepSourceFileTimestamp": "Forrásfájl dátumának/idejének megőrzése a kimeneti fájlokon", + "preventSleepWhileConverting": "A számítógép alvó állapotának megakadályozása átalakítás közben", "scanningFolderX": "{0} beolvasása...", "transportStreamSettings": "Transport Stream beállítások", "transportStreamSettingsDotDotDot": "Transport Stream beállítások...", @@ -2056,7 +2266,20 @@ "transportStreamOnlyTeletext": "Csak teletext", "transportStreamGetSizeFromVideo": "Méret átvétele a videóból...", "twoLetterLanguageCodeUppercase": "Kétbetűs nyelvkód (NAGYBETŰS)", - "threeLetterLanguageCodeUppercase": "Hárombetűs nyelvkód (NAGYBETŰS)" + "threeLetterLanguageCodeUppercase": "Hárombetűs nyelvkód (NAGYBETŰS)", + "formatContainsDotDotDot": "A formátum tartalmazza...", + "extensionIsDotDotDot": "A kiterjesztés...", + "statusIsError": "Az állapot hiba", + "forcedTracksOnly": "Csak kényszerített sávok", + "xConvertedYFailedInZ": "{0:#,###,##0} átalakítva, {1:#,###,##0} sikertelen, időtartam: {2}", + "xNotProcessed": "{0:#,###,##0} nincs feldolgozva", + "removeUnicodeControlCharactersTitle": "Unicode vezérlőkarakterek eltávolítása", + "removeUnicodeControlCharactersInfo": "Eltávolítja a láthatatlan Unicode irányvezérlő karaktereket (LRM, RLM, LRE, RLE, PDF, LRO és RLO) a szövegből, és a nem törhető szóközöket normál szóközökre cseréli.", + "preset": "Előbeállítás", + "savePresetDotDotDot": "Előbeállítás mentése...", + "deletePreset": "Előbeállítás törlése", + "presetName": "Előbeállítás neve", + "deletePresetX": "Törli a(z) \"{0}\" előbeállítást?" }, "changeCasing": { "fixNames": "Nevek javítása", @@ -2141,11 +2364,13 @@ }, "mergeLinesWithSameText": { "maxMsBetweenLines": "Max. ezredmásodperc a sorok között", + "maxFramesBetweenLines": "Max. képkocka a sorok között", "includeIncrementingLines": "Növekvő szöveget tartalmazó sorok bevétele", "includeRollUpCaptions": "Gördülő feliratok bevétele" }, "mergeLinesWithSameTimeCodes": { "maxMsDifference": "Max. eltérés (ezredmásodperc)", + "maxFramesDifference": "Max. eltérés (képkocka)", "makeDialog": "Párbeszédek készítése" }, "netflixCheckAndFix": { @@ -2204,7 +2429,7 @@ "maximumDuration": "Maximális időtartam: felirateseményenként 7 másodperc", "italicsFixed": "Javított dőlt betűs formázás", "italicsNotAllowed": "A dőlt betűs formázás nem megengedett", - "bridgeGapsXToYFrames": "3-{0} képkockaköz => 2 képkockaköz ", + "bridgeGapsXToYFrames": "3-{0} képkockaköz => 2 képkockaköz", "maximumXCharactersPerSecond": "Maximum {0} karakter másodpercenként" }, "imageBasedEdit": { @@ -2260,7 +2485,14 @@ "xInTopBar": "{0} a felső sávban", "xInBottomBar": "{0} az alsó sávban", "noImageSubtitlesLoaded": "Nincsenek képfeliratok betöltve", - "imageBasedFormatNotSupported": "Kép alapú feliratformátum nem található/nem támogatott." + "imageBasedFormatNotSupported": "Kép alapú feliratformátum nem található/nem támogatott.", + "frameRateDeclaredInFile": "A Blu-ray sup fájlban megadott képkockasebesség", + "frameRateDetectedFromTimeCodesX": "A Blu-ray sup időkódjaiból észlelt képkockasebesség (a fájlban megadott: {0})", + "frameRateFromVideo": "A videó képkockasebessége", + "frameRateCurrent": "Jelenlegi képkockasebesség", + "frameRateSetManually": "Kézzel beállított képkockasebesség", + "frameRateUsageInfo": "A Blu-ray sup, BDN XML, DOST és FCP exportok ezzel a képkockasebességgel készülnek. Az időket nem módosítja - ehhez használja a \"Képkockasebesség módosítása\" funkciót.", + "useVideoFrameRateXInsteadOfY": "A videó képkockasebessége {0}, de a felirat {1} értékre van állítva.\n\nHasználja a videó képkockasebességét ({0})?" }, "removeTextForHearingImpaired": { "interjections": "Indulattszavak", @@ -2290,6 +2522,7 @@ "pickFontNameInstalledFonts": "Telepített betűkészletek", "pickFontNameCollectedFonts": "Összegyűjtött betűkészletek", "colorPickerTitle": "Szín kiválasztása", + "colorPickerBrightness": "Fényerő", "filterLayersTitle": "Rétegek szűrése a megjelenítéshez", "filterLayersHideFromWaveform": "Elrejtés a hullámformáról/spektrogramról", "filterLayersHideFromSubtitleGrid": "Elrejtés a feliratrácsból", @@ -2340,7 +2573,21 @@ "correctWordsX": "Helyes szavak: {0}", "namesX": "Nevek: {0}", "addedToDictionaryX": "Hozzáadva a szótárhoz: {0}", - "doNotShowThisAgain": "Ne mutassa ezt az üzenetet többé" + "doNotShowThisAgain": "Ne mutassa ezt az üzenetet többé", + "editUseAlwaysList": "\"Mindig használja\" lista szerkesztése...", + "useAlwaysListTitle": "Helyesírás-ellenőrzés - \"Mindig használja\" lista", + "useAlwaysListHeader": "\"Mindig használja\" lista", + "useAlwaysListDescription": "A helyesírás-ellenőrző által automatikusan cserélt szavak, amelyeket az \"Összes módosítása\" és a \"Mindig ezt használja\" ment el. Egy pár csak akkor kerül felhasználásra, ha a szó hibásan van írva.", + "useAlwaysWord": "Hibásan írt szó", + "xPairs": "{0:#,##0} pár", + "xUnusedPairs": "{0:#,##0} soha nem használt", + "useAlwaysUnusedHint": "Soha nem használt - ez a szó helyesen van írva (vagy név, illetve felhasználói szó), így a helyesírás-ellenőrző sosem jelöli meg", + "removeUnused": "Nem használtak eltávolítása", + "useAlwaysEmpty": "Ehhez a nyelvhez még nincsenek \"Mindig használja\" párok", + "useAlwaysEmptyHint": "A párok akkor kerülnek hozzáadásra, amikor a helyesírás-ellenőrzésben az \"Összes módosítása\" vagy a \"Mindig ezt használja\" gombra kattint.", + "useAlwaysNoMatch": "Nincs a keresésnek megfelelő pár", + "useAlwaysSameWord": "A cserének különböznie kell a szótól.", + "useAlwaysRememberOff": "A \"'Mindig használja' lista megjegyzése\" ki van kapcsolva a Beállításokban, így a helyesírás-ellenőrző nem használja és nem menti ezt a listát." }, "video": { "burnIn": { @@ -2378,10 +2625,21 @@ "translateToEnglish": "Fordítás angolra", "transcribing": "Átírás...", "transcribingXOfY": "{0} / {1} átírása...", + "linesTranscribedXOfYFailedZ": "{1} sorból {0} átírva - {2} sikertelen volt, vagy nem tartalmazott beszédet.\n\nA sikertelen sorok megtartják jelenlegi szövegüket. Alkalmazza az átírt sorokat, vagy próbálja újra a sikerteleneket (előtte módosíthatja a motort vagy a beállításokat)?", + "linesTranscribedXOfYCancelled": "Az átírás megszakítva {1} sorból {0} után.\n\nAlkalmazza az átírt sorokat? A többi sor megtartja jelenlegi szövegét.", + "noLinesTranscribed": "A(z) {0} sor egyike sem volt átírható.\nA részletekért nézze meg az eszközök naplóját.", + "applyTranscribedLines": "Átírtak alkalmazása", + "retryFailedLines": "Sikertelenek újra", "isolateSpeech": "Beszéd elkülönítése (lassú)", "isolateSpeechHint": "Eltávolítja a zenét és a hangeffekteket az átírás előtt. Kevesebb kihagyott sort és jobb időzítést eredményez a hangos zenét tartalmazó hanganyagoknál, de GPU-val körülbelül annyi ideig tart, mint maga a hanganyag - GPU nélkül pedig sokszorosáig.", "isolatingSpeech": "Beszéd elkülönítése...", "isolateSpeechFailed": "Nem sikerült elkülöníteni a beszédet - ehelyett az eredeti hanganyag kerül átírásra.", + "detectSpeakers": "Beszélők felismerése", + "detectSpeakersHint": "Minden sort a beszélővel kezd, például \"(speaker 0)\", az NVIDIA Sortformer beszélő-szétválasztásával (legfeljebb 8 beszélő). Azokkal a háttérrendszerekkel működik a legjobban, amelyek beszélőváltásnál bontják a sorokat, például Parakeet és Cohere.", + "detectSpeakersNeedsNewerCrispAsr": "A \"Beszélők felismerése\" funkcióhoz Crisp ASR v{0} vagy újabb szükséges, de v{1} van telepítve.\n\nFrissítse a Crisp ASR-t (a motor melletti fogaskerék gomb), vagy kapcsolja ki a \"Beszélők felismerése\" funkciót.", + "xNeedsNewerCrispAsr": "A(z) {0} motorhoz Crisp ASR v{1} vagy újabb szükséges, de v{2} van telepítve.\n\nLetölti és telepíti most a frissítést?", + "vad": "VAD", + "vadHint": "Hangaktivitás-érzékelés: csak a beszéd kerül átírásra, a beszélő szüneteinél vágva.\nAuto: Silero, és csak az ezt igénylő motorokhoz (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: mindig bekapcsolva, minden Crisp ASR motorhoz. A FireRedVAD a legpontosabb, a Whisper-VAD adja a legkevesebb, legtisztább vágást, de a leglassabb.\nAz Index-Echo mindig a Silerót használja. A speciális beállításokban megadott --vad, --vad-model vagy --chunk-seconds elsőbbséget élvez.", "inputLanguage": "Bemeneti nyelv", "advancedWhisperSettings": "Speciális beszédfelismerési paraméterek", "downloadingSpeechToTextEngine": "Beszédfelismerő motor letöltése", @@ -2465,6 +2723,19 @@ "videoEncodingSettings": "TTS - Videokódolási beállítások", "elevenLabsSettings": "TTS - ElevenLabs beállítások", "elevenLabsSettingsResetHint": "ElevenLabs beállítások visszaállítása az alapértelmezett értékekre", + "provider": "Szolgáltató", + "openAiCompatibleSettings": "TTS - OpenAI-kompatibilis beállítások", + "customServerUrl": "Egyéni szerver URL", + "customServerUrlHint": "Egy OpenAI-kompatibilis szerver teljes beszéd-végpontja, amelyet akkor használ, ha a szolgáltató \"Custom\", pl. http://localhost:8880/v1/audio/speech", + "customModels": "Egyéni modellek", + "customModelsHint": "Vesszővel elválasztott modellnevek, amelyek akkor jelennek meg, ha a szolgáltató \"Custom\"", + "customVoices": "Egyéni hangok", + "customVoicesHint": "Vesszővel elválasztott hangnevek, amelyeket a \"Custom\" szolgáltató és a hanglistát nem közzétevő OpenRouter modellek használnak", + "instructions": "Utasítások", + "instructionsHint": "Opcionális beszédstílus, pl. \"Beszélj nyugodt, meleg hangon\". Csak az ezt támogató modelleknek kerül elküldésre (a tts-1/tts-1-hd nem)", + "openAiSpeedHint": "Beszédsebesség 0,25 és 4,0 között (1,0 a normál). Nem minden modell támogatja", + "outputFormat": "Kimeneti formátum", + "outputFormatHint": "A szervertől kért hangformátum. Az \"Auto\" MP3-at kér, és PCM-re vált azoknál a modelleknél, amelyek csak PCM-et adnak vissza (pl. Gemini TTS)", "regenerateAudio": "Hang újragenerálása", "autoContinuePlaying": "Automatikus lejátszás folytatása", "playLine": "Sor lejátszása", @@ -2492,6 +2763,17 @@ "voiceManagerTitle": "TTS - Hangkezelő", "voiceManagerDotDotDot": "Hangkezelő...", "voiceManagerMenuItem": "TTS hangkezelő...", + "speakFromCurrentLineTitle": "Felolvasás az aktuális sortól", + "speakFromCurrentLineDotDotDot": "Felolvasás az aktuális sortól...", + "speakFromCurrentLineHint": "Egymás után felolvassa a sorokat, az aktuális sortól kezdve. A leállításhoz nyomja meg az Escape billentyűt, vagy kattintson egy másik sorra.", + "stopSpeaking": "Felolvasás leállítása", + "speakingLineX": "{0}. sor felolvasása... (Escape a leállításhoz)", + "playWithSpeechTitle": "Lejátszás felolvasással", + "playWithSpeechDotDotDot": "Lejátszás felolvasással...", + "playWithSpeechHint": "Lejátssza a videót, és felolvas minden sort, amikor a videó odaér. A szüneteltetés és a tekerés a szokásos módon működik; a leállításhoz nyomja meg az Escape billentyűt.", + "lowerVideoVolumeWhileSpeaking": "Videó hangerejének csökkentése felolvasás közben", + "pauseVideoWhenSpeechRunsLate": "Videó szüneteltetése, ha a felolvasás átnyúlik a következő sorba", + "waitingForSpeechLineX": "Beszéd generálása a(z) {0}. sorhoz... (Escape a leállításhoz)", "voiceKindClone": "Klónozott hang", "voiceKindPreset": "Beépített", "voiceKindModel": "Hangmodell", @@ -2539,7 +2821,7 @@ "cloneVoicePerLinePreparing": "Minden sor hangjának átvétele a videóból...", "cloneVoicePerLineNeedsVideo": "Minden sor hangjának klónozásához szükség van a videóra, amelyhez a felirat tartozik. Nyissa meg a videót, és próbálja újra.", "cloneVoicePerLineNoClips": "Nem sikerült hangot kinyerni a videóból, így nincs miből klónozni. Ellenőrizze, hogy a videó rendelkezik-e hangsávval.", - "cloneVoicePerLineNeedsOriginalSubtitleX": "A(z) {0} csak akkor tud egy sort klónozni, ha tudja, mi hangzik el a videóban az adott sornál, ez pedig az eredeti nyelvű feliratból származik. Mivel nincs betöltve eredeti felirat, a rendszer minden sort az első importált hangon szólaltatna meg a videóban hallható hang helyett.\n\nNyissa meg az eredeti feliratot (Fájl > Eredeti megnyitása...) a fordítás mellett, majd próbálja meg újra a generálást.", + "cloneVoicePerLineTranscribeClipsXYZ": "A(z) {0} csak akkor tud egy sort klónozni, ha tudja, mi hangzik el a videóban annál a sornál. Ez {2} sorból {1} esetében nem ismert - általában az eredeti nyelvű feliratból származik (Fájl > Eredeti megnyitása...).\n\nÁtírja most ezeket a sorokat a videóból beszédfelismeréssel?\n\nIgen: válassza ki a motort és a videóban beszélt nyelvet, és a referencia-klipek átírása a beszéd generálása előtt megtörténik.\nNem: generálás mindenképp - ezeket a sorokat egy általános hang mondja el a videóban hallható hang helyett.", "voiceCloneConsentTitle": "Hangklónozás - mielőtt elkezdené", "voiceCloneConsentHeader": "Ön egy hang klónozására készül", "voiceCloneConsentIntro": "A klónozás egy valós személy hangját másolja. Ez legtöbb helyen szabályokkal jár, az EU-ban pedig olyan jogi kötelezettségekkel, amelyek Önre hárulnak, nem a Subtitle Edit-re. Kérjük, olvassa el ezt egyszer.", @@ -2556,14 +2838,29 @@ "advancedTtsSettings": "Speciális TTS beállítások", "advancedTtsAudioProcessing": "Hangfeldolgozás", "advancedTtsOutput": "Kimenet", + "advancedTtsVoiceCloning": "Hangklónozás", + "cleanCloneReferences": "Hangklón-referenciák tisztítása (Sidon)", + "cleanCloneReferencesDescription": "Eltávolítja a zenét, zajt és visszhangot abból a hangból, amelyből a hangot klónozza: a videóból vett klipekből és a hangkezelőben importált felvételekből. A Sidon beszéd-helyreállító modellt használja az audio.cpp-n (940 MB letöltés). A klónozott hang többé nem másolja a hátteret, de a nagyon halk vagy egymásra beszélő hangok tompán szólhatnak.", + "cleaningCloneReferencesDotDotDot": "Hangklón-referenciák tisztítása...", + "downloadSidonTitle": "Letölti a Sidont?", + "downloadSidonQuestionX": "A hangklón-referenciák tisztításához a Sidon beszéd-helyreállító modell szükséges ({0}).\n\nLetölti most? Nélküle a referenciák változatlanul kerülnek felhasználásra.", "proAudioPostProcessing": "Profi hang-utófeldolgozás", "proAudioPostProcessingDescription": "EQ-t, zajkaput, kompressziót, hangerő-normalizálást (-16 LUFS) és egy rövid be-/kifakulást ad minden kliphez.", + "generatingSpeechSegmentXOfY": "Beszéd generálása: {0}. szegmens ({1} közül)", + "adjustingSpeedSegmentXOfY": "Sebesség módosítása: {0}. szegmens ({1} közül)", + "mergingAudioSegmentXOfY": "Hang egyesítése: {0}. szegmens ({1} közül)", + "postProcessingSegmentXOfY": "Utófeldolgozás: {0}. szegmens ({1} közül)", "audioDucking": "Hang háttérhalkítás", "audioDuckingDescription": "Lehalkítja az eredeti videóhangot, és rámixeli a beszédet, így az eredeti sáv halkan hallható marad. Csak akkor érvényes, ha a beszéd a videófájlhoz van hozzáadva.", "removeOriginalSpeech": "Eredeti beszéd eltávolítása (lassú)", "removeOriginalSpeechDescription": "Megtartja az eredeti videó zenéjét és hangeffektjeit, de eltávolítja annak beszédhangját, és arra keveri rá az új beszédet. GPU-val körülbelül annyi ideig tart, mint maga a videó, GPU nélkül pedig sokszorosáig. Bekapcsolt audio ducking esetén annak hangerőbeállítása a zenére és effektekre vonatkozik. Csak akkor érvényesül, ha a beszéd hozzáadásra kerül a videófájlhoz.", "removingOriginalSpeech": "Eredeti beszéd eltávolítása...", "removeOriginalSpeechFailed": "Nem sikerült eltávolítani az eredeti beszédet - a beszéd az eredeti beszéd eltávolítása nélkül került a videóhoz.", + "speechRemovalModel": "Modell", + "speechRemovalModelDescription": "A legjobb minőség őrzi meg leginkább a zenét és a hangeffekteket. A gyors körülbelül háromszor gyorsabb, de a zenéből kicsit több vész el.", + "speechRemovalBestQuality": "Legjobb minőség (Mel-Band RoFormer)", + "speechRemovalFast": "Gyors (HTDemucs)", + "videoTruncatedWarning": "Az új videófájlban a kép {0} után megáll, de az eredeti videó {1} hosszú - a kép kimerevedik, miközben a hang folytatódik.\n\nA fájl megmaradt. Az ffmpeg kimenetét a Subtitle Edit adatmappájában lévő error-log.txt fájlban találja.", "originalVolumePercent": "Eredeti hangerő %", "vadSilenceCompression": "VAD csend-kompresszió", "vadSilenceCompressionDescription": "Leredukálja a szavak közötti szüneteket a beszéd gyorsítása helyett, így a klip minőségromlás nélkül illeszkedik.", @@ -2646,7 +2943,9 @@ "timeCodeFormatColon": "Időkód formátuma:", "shotChangesList": "Vágásváltások listája", "shotChangesClearQuestion": "Biztosan törölni szeretné az összes vágásváltást?", - "deleteSelectedShotChangeQuestion": "Biztosan törölni szeretné a kijelölt vágásváltást?" + "deleteSelectedShotChangeQuestion": "Biztosan törölni szeretné a kijelölt vágásváltást?", + "shotChanges": "Vágásváltások", + "exportShotChanges": "Vágásváltások exportálása" }, "chapters": { "title": "Fejezetek", @@ -2709,6 +3008,7 @@ "runningOcrXY": "OCR futtatása... {0}/{1}", "noLinesFoundTitle": "Nem találhatók feliratok", "noLinesFoundMessage": "Nem található szöveg a beolvasási területen - próbálja meg módosítani a beolvasási területet, a motort vagy a minimális fényerőt.", + "ocrStoppedEarlyMessage": "Az OCR-motor leállt, mielőtt minden képkockát beolvasott volna, így az eddig talált sorok megmaradnak, a többi hiányzik.{0}{0}{1}", "linesFoundX": "{0} sor található", "refiningTimingXY": "Időzítés finomítása... {0}/{1}", "fixOcrErrors": "OCR hibák javítása", @@ -2790,8 +3090,11 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "Második feliratfájl megnyitása...", "openSecondarySubtitleOnVideoPlayer": "Második feliratfájl (a videólejátszón)", "removeSecondarySubtitleOnVideoPlayer": "Második feliratfájl eltávolítása", + "editSecondarySubtitleSettings": "Második felirat beállításainak szerkesztése", + "editSecondarySubtitleSettingsDotDotDot": "Második felirat beállításainak szerkesztése...", "secondarySubtitleRememberSettings": "Megjegyzendők ezek a beállítások", "secondarySubtitleDoNotShowAgain": "Ne jelenítse meg újra ezt a párbeszédablakot", + "secondarySubtitleJustifyLines": "Sorok sorkizárása", "openRecentVideo": "Legutóbbi videó megnyitása", "clearRecentVideos": "Legutóbbi videók törlése", "cutVideoTitle": "Videó vágása", @@ -2803,10 +3106,18 @@ "remuxVideoOutputFormat": "Kimeneti formátum:", "remuxVideoOutputFile": "Kimeneti fájl:", "remuxVideoRemuxing": "Videó és hang újracsomagolása...", + "remuxVideoFinalizing": "Kimeneti fájl véglegesítése (index áthelyezése az elejére)...", "remuxVideoCompleted": "A videó újracsomagolása sikeresen megtörtént.", "remuxVideoFailed": "Nem sikerült a videó újracsomagolása.", "remuxVideoPleaseSelectBoth": "Kérjük, válassza ki a videó- és a hangfájlt is.", "remuxVideoAssRequiresMkv": "Az ASS/SSA feliratokhoz MKV konténer szükséges az összes formázás és stílus megőrzéséhez.", + "remuxVideoSccRequiresMov": "A Scenarist (.scc) feliratok CEA-608 zárt feliratként kerülnek beágyazásra, amihez MOV vagy MPG konténer szükséges. A kimeneti formátum automatikusan .mov-ra váltott.", + "remuxVideoSccNotWithWebM": "A Scenarist (.scc) zárt feliratokhoz MOV konténer szükséges, amely nem tudja tárolni egy .webm fájl VP9/AV1 videóját. Távolítsa el az .scc fájlt, vagy alakítsa át más feliratformátumra.", + "remuxVideoMpgMaxTwoCaptionTracks": "Egy .mpg fájl legfeljebb két zárt feliratsávot tartalmazhat (CC1 és CC3) - távolítson el feliratfájlokat, hogy egy vagy kettő maradjon.", + "remuxVideoMccRequiresMpg": "A MacCaption (.mcc) feliratok CEA-608/708 zárt feliratként kerülnek beágyazásra az MPEG-2 videóba, amihez MPG konténer szükséges. A kimeneti formátum automatikusan .mpg-re váltott.", + "remuxVideoMpgReencodeVideoX": "Az .mpg fájlban lévő zárt feliratokhoz MPEG-2 videó szükséges, a videó pedig {0}. Újrakódolja a videót MPEG-2 formátumra? Ez tovább tart, és kissé rontja a minőséget.", + "remuxVideoFileHasNoAudioX": "A(z) \"{0}\" nem tartalmaz hangsávot, így nem használható hangforrásként.", + "remuxVideoAddingClosedCaptions": "Zárt feliratok hozzáadása...", "remuxVideoSelectAudioTrack": "Hangsáv kiválasztása", "remuxVideoSelectAudioTrackFor": "Hangsáv kiválasztása ehhez: {0}", "remuxVideoSelectAudioTrackPrompt": "A(z) '{0}' fájl {1} hangsávot tartalmaz. Kérjük, válassza ki az újracsomagolandó hangsávot:", @@ -2819,6 +3130,7 @@ "remuxVideoMixAudio": "Hangsávok keverése egyetlen sávvá", "remuxVideoVolumePercent": "Hangerő %:", "remuxVideoVolumeX": "Hangerő {0}%", + "remuxVideoFastStart": "Optimalizálás webes streameléshez (index áthelyezése az elejére - lassabb)", "embedSubtitlesDotDotDot": "Beágyazott feliratok hozzáadása/eltávolítása...", "generateTimeCodes": "Időkódok generálása", "checkeredImage": "Sakktábla minta", @@ -2828,6 +3140,34 @@ "cutVideoSplitSegments": "Szegmensek mentése külön-külön", "cutVideoAlsoCutSubtitle": "Felirat vágása is", "cutVideoSubtitleFileGeneratedX": "Generált feliratfájl: {0}", + "cutVideoTransition": "Átmenet a szegmensek között", + "cutVideoTransitionDurationSeconds": "Időtartam (másodperc)", + "cutVideoFadeInSeconds": "Áttűnés feketéből az elején (másodperc)", + "cutVideoFadeOutSeconds": "Áttűnés feketébe a végén (másodperc)", + "cutVideoPreviewTransition": "Átmenet előnézete", + "cutVideoPreviewTransitionTitle": "Átmenet előnézete", + "cutVideoPreviewNeedsJoin": "Nincs megtekinthető illesztés - adjon hozzá legalább két egyesítendő szegmenst, vagy egy, a közepéből kivágandó szegmenst.", + "cutVideoTransitionInfoX": "Minden átmenet átfedi az általa összekapcsolt részeket, így a kimenet illesztésenként {0} másodperccel rövidebb lesz. A vágott felirat időzítése ennek megfelelően módosul.", + "cutVideoTransitionFade": "Áttűnés", + "cutVideoTransitionFadeBlack": "Áttűnés feketén keresztül", + "cutVideoTransitionFadeWhite": "Áttűnés fehéren keresztül", + "cutVideoTransitionFadeGrays": "Áttűnés szürkén keresztül", + "cutVideoTransitionDissolve": "Átoldás", + "cutVideoTransitionWipeLeft": "Söprés balra", + "cutVideoTransitionWipeRight": "Söprés jobbra", + "cutVideoTransitionWipeUp": "Söprés felfelé", + "cutVideoTransitionWipeDown": "Söprés lefelé", + "cutVideoTransitionSlideLeft": "Csúsztatás balra", + "cutVideoTransitionSlideRight": "Csúsztatás jobbra", + "cutVideoTransitionSlideUp": "Csúsztatás felfelé", + "cutVideoTransitionSlideDown": "Csúsztatás lefelé", + "cutVideoTransitionSmoothLeft": "Lágy balra", + "cutVideoTransitionSmoothRight": "Lágy jobbra", + "cutVideoTransitionCircleOpen": "Kör nyitás", + "cutVideoTransitionCircleClose": "Kör zárás", + "cutVideoTransitionRadial": "Sugaras", + "cutVideoTransitionPixelize": "Pixelesítés", + "cutVideoTransitionBlur": "Elmosás", "importCurrentSubtitle": "Aktuális felirat importálása", "addRemoveEmbeddedSubtitlesTitle": "Beágyazott feliratok hozzáadása/eltávolítása", "addRemoveEmbeddedSubtitlesMp4Title": "Beágyazott feliratok hozzáadása/eltávolítása (MP4)", @@ -2890,6 +3230,10 @@ "reEncodeGeneratingDone": "Generálás kész", "reEncodeGeneratedFilesX": "Generált fájlok ({0}):", "reEncodeFfmpegParameters": "ffmpeg parameters", + "analyzingVideoX": "Videó elemzése... {0}% {1}", + "analyzingVideoXofY": "Videó elemzése {0}/{1}... {2}% {3}", + "backgroundImageFileNotSelected": "Nincs kiválasztva háttérképfájl", + "backgroundImageFileDoesNotExistX": "A háttérképfájl nem létezik: {0}", "voices": "Hangok", "presets": "Előbeállítások", "talkerX": "Beszélő {0}", @@ -2917,6 +3261,8 @@ "cloneVoiceTo": "Hang klónozása ide:", "cloneVoiceNameTitle": "Új hang neve", "cloneVoiceExtractFailed": "Nem sikerült a hang kinyerése a kiválasztott sorhoz.", + "lineXHasNoDuration": "A(z) {0}. sornak nincs időtartama (a záróidő nem a kezdőidő után van), így nincs kinyerhető hang.", + "audioClipsSkippedLinesX": "Ezekhez a sorokhoz nem sikerült hangot kinyerni, ezért ki lettek hagyva: {0}", "toggleShotChange": "Vágásváltás ki-/bekapcsolása", "resetWaveformZoomAndSpeed": "Hullámforma nagyítás és sebesség visszaállítása", "showOriginalSubtitle": "Eredeti felirat megjelenítése", @@ -2958,6 +3304,7 @@ "adjustSelectedLinesAndForward": "Kijelölt sorok és a következők igazítása", "toFrameRate": "Képkockasebességre", "fromFrameRate": "Képkockasebességből", + "videoXFrameRateY": "{0} - {1} fps", "adjustAllTimes": "Minden időpont beállítása (korábbi/későbbi megjelenítés)", "showEarlier": "Korábbi megjelenítés", "showLater": "Későbbi megjelenítés", @@ -2967,7 +3314,8 @@ "syncPoints": "Szinkronizálási pontok", "pointSync": "Pontszinkron", "pointSyncViaOther": "Pontszinkron másik felirat alapján", - "syncPointCandidateInfo": "A {0}+ másodperces csend után kezdődő sorok ki vannak emelve - gyakran megbízható szinkronizálási pontokat alkotnak", + "syncPointCandidateAfterInfo": "Ki vannak emelve azok a sorok, amelyeket {0}+ másodperc csend követ - ezek gyakran megbízható szinkronizálási pontok", + "gapAfter": "Köz utána", "adjustAllShortcuts": "Billentyűparancsok:\n\n• Shift + Balra/Jobbra: Mozgatás 10 ezredmásodperccel\n• Ctrl + Balra/Jobbra: Mozgatás 100 ezredmásodperccel\n• Alt + Balra/Jobbra: Mozgatás 500 ezredmásodperccel", "adjustAllShortcutsFrames": "Billentyűparancsok:\n\n• Shift + Balra/Jobbra: Lépés 1 képkockát\n• Ctrl + Balra/Jobbra: Lépés 10 képkockát\n• Alt + Balra/Jobbra: Lépés 1 másodpercet", "offsetInSeconds": "Eltolás másodpercben", @@ -2987,6 +3335,7 @@ "lineMerge": "Soregyesítés", "delayInSecondsBetweenRequests": "Kérések közötti késleltetés másodpercben", "maxBytesPerRequest": "Max. bájt kérésenként", + "keepMusicLinesUntranslated": "Zenei szimbólumok közötti sorok (♪ ... ♪) fordításának kihagyása", "promptText": "Parancsszöveg", "resetPromptToDefault": "Prompt visszaállítása az alapértelmezettre", "translateEachLineSeparately": "Minden sor fordítása külön-külön", @@ -3124,9 +3473,12 @@ "newEmptyDefaultMs": "Új felirat alapértelmezett időtartama (ezredmp)", "timeCodeUpDownStepMs": "Idő növelésének/csökkentésének léptéke (ms)", "moveSelectedLinesStepMs": "Kijelölt sorok mozgatása billentyűparancs lépésköz (ezredmp)", + "moveStartEndStepMs": "Kezdet/vég mozgatása gyorsbillentyű lépésköze (ezredmp)", "moveLinesShortenNeighbor": "Sorok mozgatása: az előző/következő sor rövidítése az átfedés helyett", "promptBeforeDelete": "Rákérdezés törlés előtt", "rememberPositionAndSize": "Ablakpozíció és -méret megjegyzése", + "titleBarFullFileName": "Teljes fájlútvonal megjelenítése a címsorban", + "showRecentFiles": "Legutóbbi fájlok megjelenítése (újbóli megnyitáshoz)", "openLastFileOnStart": "A legutóbbi fájl megnyitása indításkor", "autoSave": "Automatikus mentés (a megnyitott fájl mentése szerkesztés közben)", "autoBackupOn": "Automatikus mentés", @@ -3153,6 +3505,8 @@ "waveformDrawGridLines": "Rácsvonalak rajzolása", "waveformUseSkiaRenderer": "Kísérleti gyors renderelő használata", "waveformCenterVideoPositionAlsoWhenPaused": "Videó pozíciójának középre igazítása szüneteltetés közben is", + "waveformSelectCurrentSubtitleWhilePaused": "Aktuális felirat kijelölése szüneteltetés közben is", + "waveformRememberZoom": "Nagyítás megjegyzése (vízszintes és függőleges)", "waveformShowToolbar": "Eszköztár megjelenítése", "waveformShowToolbarEdit": "Eszköztár szerkesztése...", "waveformShowToolbarEditLabel": "Eszköztár elemei", @@ -3200,8 +3554,11 @@ "webVttUseXTimestampMap": "WebVTT: X-TIMESTAMP-MAP használata (időkódok eltolása betöltéskor)", "assaAutoSetResolution": "ASSA: felbontás beállítása (PlayResX/PlayResY) a videóból, amikor egy videó megnyitásra kerül", "assaAutoSetResolutionPrompt": "ASSA: rákérdezés a felbontás megváltoztatása előtt a videónak megfelelően (ellenkező esetben automatikus újramintavételezés)", - "showStopButton": "Leállítás gomb megjelenítése", - "showFullscreenButton": "Teljes képernyő gomb megjelenítése", + "videoControls": "Videóvezérlők", + "videoControlsEdit": "Videóvezérlők szerkesztése...", + "videoControlsPositionText": "Pozíció / időtartam szöveg", + "videoControlsVideoFileName": "Videófájl neve", + "videoControlsPlayerName": "Videólejátszó neve", "fullscreenHideControls": "Videóvezérlők elrejtése teljes képernyőn", "showSecondarySubtitleDialog": "Stílus párbeszédablak megjelenítése második feliratfájl megnyitásakor", "rememberSecondarySubtitleFile": "Második feliratfájl megjegyzése", @@ -3215,6 +3572,7 @@ "adjustAllTimesRememberLineSelectionChoice": "Minden idő igazítása, sorválasztási döntés megjegyzése", "mergeKeepEndTime": "Sorok egyesítése: befejezési idő megtartása (átfedés engedélyezése a következő felirattal)", "mergeKeepEndTimeOnlyAssa": "Sorok egyesítése: befejezési idő megtartása csak az \"Advanced Sub Station Alpha\" esetében", + "mergeAutoBreak": "Sorok egyesítése: az egyesített szöveg automatikus tördelése (kikapcsolva a sorok saját sortörései megmaradnak)", "filesAndLogs": "Fájlok és naplók", "showErrorLogFile": "Hibanapló-fájl megjelenítése", "showToolsLogFile": "Eszközök naplófájljának megtekintése", @@ -3223,6 +3581,7 @@ "showAssaLayer": "ASSA rétegdoboz megjelenítése", "waveformCursorColor": "Hullámforma kurzor/fej színe", "waveformShotChangeColor": "Hullámforma vágásváltás színe", + "waveformGridColor": "Hullámforma rácsának színe", "waveformParagraphLeftColor": "Hullámforma bal oldali szegély színe", "waveformParagraphRightColor": "Hullámforma jobb oldali szegély színe", "waveformFancyHighColor": "Hullámforma különleges élénk szín", @@ -3250,10 +3609,15 @@ "resetSyntaxColoring": "Szintaxis-kiemelés alaphelyzetbe állítása", "resetWaveform": "Hullámforma alaphelyzetbe állítása", "resetRules": "Szabályok alaphelyzetbe állítása", - "useFrameMode": "Képkocka mód használata (óó.pp.mp.kk)", + "timeCodeMode": "Időkód mód", + "timeCodeModeTime": "Idő (hh:mm:ss,zzz)", + "timeCodeModeFrames": "Képkockák (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "Képkockaszámok", + "frameModeSnapToVideoFrames": "Idők tárolása videó-képkockákon (nem másodpercen belüli képkockákon)", "textBoxLimitNewLines": "Sorok számának korlátozása a felirat szövegdobozában", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - Software rendering (slow)", + "mpvMetalRendering": "libmpv - Metal (kísérleti, újraindítást igényel)", "mpvWidRendering": "libmpv - Native Window ID rendering", "waveFormsAndSpectrogramFoldersContainsX": "A \"Waveforms\" és \"Spectrogram\" mappák tartalma: {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "Törli a \"Waveforms\" és \"Spectrogram\" fájlokat?", @@ -3327,6 +3691,7 @@ "useFocusedButtonBackgroundColor": "Aktív gomb háttérszínének használata", "focusedButtonBackgroundColor": "Aktív gomb háttérszíne", "forceCrLfOnSave": "CR+LF kényszerítése mentéskor (szöveges feliratfájlok)", + "linuxClipboardUseExternalTool": "Szöveg másolása xclip/wl-copy segítségével (megtartja az ékezetes karaktereket)", "showFormatLimitWarning": "Figyelmeztetés mentéskor, ha a sorok túllépik a formátum korlátait (pl. SCC 32 karakter/sor)", "textBoxButtonShowAutoBreak": "Szövegdoboz: automatikus tördelés gomb megjelenítése", "textBoxButtonShowUnbreak": "Szövegdoboz: összekapcsolás gomb megjelenítése", @@ -3339,12 +3704,17 @@ "allSettings": "Összes beállítás", "uiScale": "Felület méretezése (%)", "fontScale": "Betűkészlet skálázása (%)", + "textSelectionOpacity": "Szövegkijelölés átlátszatlansága (%)", "waveformToolbarItems": "Hullámforma eszköztár elemei", "matchIconColorToDarkTheme": "Ikon színének igazítása a sötét téma előtérszínéhez", "subtitlePreviewProperties": "Felirat-előnézet tulajdonságai", "usePositionFromSubtitleFile": "Pozíció használata a feliratfájlból (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "A margó a feliratterület része", "textJustify": "Sorok sorkizárása", + "deinterlace": "Videó váltottsorosság-mentesítése", + "deinterlaceOff": "Ki", + "deinterlaceAuto": "Auto (csak váltottsoros képkockák)", + "deinterlaceAlways": "Mindig", "pixelWidthInfo": "Zöld vonalak = max. szélesség korlát | Piros terület = a szöveg túllépi a korlátot", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3373,11 +3743,34 @@ "categoryVideo": "Videó", "categorySync": "Szinkronizálás", "categoryAi": "MI", + "categoryCustom": "Egyéni", + "editCustomShortcut": "Egyéni gyorsbillentyű szerkesztése", + "customShortcutTextBoxKeyHint": "Itt Ctrl/Alt billentyűvel kombinált billentyűt használjon - egy sima billentyű többé nem gépelne a szövegmezőbe.", + "customShortcutNumberX": "#{0} egyéni gyorsbillentyű", + "customShortcutNumberXY": "#{0} egyéni gyorsbillentyű: {1}", + "customShortcutStep": "Lépés", + "customShortcutSteps": "Lépések", + "customShortcutStepRunCommand": "Parancs futtatása", + "customShortcutStepInsertText": "Szöveg beszúrása", + "customShortcutStepReplace": "Keresés és csere", + "customShortcutInsertAtCursor": "A kurzornál", + "customShortcutInsertAtStart": "A szöveg elején", + "customShortcutInsertAtEnd": "A szöveg végén", + "customShortcutSummaryRunCommandX": "Futtatás: {0}", + "customShortcutSummaryInsertXY": "\"{0}\" beszúrása ({1})", + "customShortcutSummaryReplaceXY": "\"{0}\" cseréje erre: \"{1}\"", + "customShortcutSummaryReplaceRegexXY": "\"{0}\" reguláris kifejezés cseréje erre: \"{1}\"", + "customShortcutPickCommand": "Válassza ki a futtatandó parancsot.", + "customShortcutEnterText": "Adja meg a beszúrandó szöveget.", + "customShortcutEnterFind": "Adja meg a keresendő szöveget.", + "customShortcutInvalidRegexX": "Érvénytelen reguláris kifejezés: {0}", + "customShortcutStepsHint": "A lépések fentről lefelé futnak. A szöveges lépések a kijelölt sorokon működnek; az ablakot megnyitó parancsok után a futás az ablak bezárásakor folytatódik.", "activeIn": "Aktív itt:", "activeInEverywhere": "Mindenhol", "generalMergeSelectedLinesAndUnbreak": "Kijelölt sorok egyesítése és összekapcsolás", "generalMergeSelectedLinesAndUnbreakCjk": "A kijelölt sorok összevonása és a tördelés feloldása szóköz nélkül (CJK)", "generalUnbreakNoSpaceCjk": "Megszakítás megszüntetése szóköz nélkül (CJK)", + "generalToggleBreak": "Tördelés/összekapcsolás váltása", "generalMergeSelectedLinesBilingual": "Kijelölt sorok egyesítése kétnyelvűként", "generalToggleTranslationMode": "Fordítási mód ki-/bekapcsolása", "generalToggleTranslationAndOriginalInPreviews": "Fordítás és eredeti átváltása a videó/hang előnézetben", @@ -3399,6 +3792,7 @@ "fileOpenKeepVideo": "Megnyitás (videó megtartása)", "fileSave": "Mentés", "fileSaveAs": "Mentés másként", + "fileSaveOriginal": "Eredeti mentése", "fileCompare": "Összehasonlítás", "fileStatistics": "Statisztika", "fileImportPlainText": "Formázatlan szöveg importálása", @@ -3419,6 +3813,7 @@ "detectKey": "Billentyű észlelése", "control": "Control", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Shift", "controlMac": "⌃", @@ -3429,6 +3824,11 @@ "resetShortcutsDetail": "Biztosan vissza szeretné állítani az összes billentyűparancsot az alapértelmezett értékekre?", "togglePlayPause": "Lejátszás/szünet ki-/bekapcsolása", "toggleLockTimeCodes": "Időkódok zárolásának ki-/bekapcsolása", + "toggleTimeCodeMode": "Időkód mód váltása (idő/képkockák/képkockaszámok)", + "toggleScreenPrivacy": "Képernyő-adatvédelem váltása (fájlnevek elrejtése, majd a szövegeké is)", + "screenPrivacyFileNamesHidden": "Képernyő-adatvédelem: fájlnevek elrejtve", + "screenPrivacyFileNamesAndTextsHidden": "Képernyő-adatvédelem: fájlnevek és szövegek elrejtve", + "screenPrivacyOff": "Képernyő-adatvédelem: ki", "duplicateSelectedLines": "Kijelölt sorok megkettőzése", "sourceView": "Forrásnézet", "addOrEditBookmark": "Könyvjelző hozzáadása vagy szerkesztése", @@ -3477,6 +3877,7 @@ "listViewColumnTextUp": "Oszlop, szöveg fel", "listViewColumnTextDown": "Oszlop, szöveg le", "autoTranslateSelectedLines": "Kijelölt sorok automatikus fordítása...", + "autoTranslateSelectedLinesNoPrompt": "Kijelölt sorok automatikus fordítása (rákérdezés nélkül, utolsó motor/nyelvek használatával)", "setAssaResolution": "ASSA felbontás beállítása (PlayResX/PlayResY)", "setShortcutForX": "Billentyűparancs beállítása ehhez: \"{0}\"", "commandFileNewKeepVideo": "Új (videó megtartása)", @@ -3557,6 +3958,14 @@ "surroundWith": "Körülvétel ezzel...", "surroundWithXY": "Körülvétel ezzel: {0}/{1}", "surroundWithNumberX": "Körülvétel ezzel: #{0}", + "surroundWithBehavior": "Viselkedés", + "surroundWithBehaviorToggle": "Váltás (hozzáadás, vagy eltávolítás, ha már van)", + "surroundWithBehaviorAdd": "Hozzáadás (minden alkalommal)", + "surroundWithBehaviorRemove": "Eltávolítás (összes)", + "surroundWithBehaviorRemoveOnce": "Eltávolítás (alkalmanként egy)", + "surroundWithWorksOn": "Hatókör", + "surroundWithScopeSelectionOrText": "Kijelölés, egyébként a teljes szöveg", + "surroundWithScopeEachLine": "Minden sor", "searchVia": "Keresés ezen keresztül:", "searchViaX": "Keresés ezen keresztül: {0}", "searchViaNumberX": "Keresés ezen keresztül: #{0}", @@ -3584,6 +3993,11 @@ "copySubtitlePathToClipboard": "Felirat útvonalának másolása a vágólapra", "copySubtitleOriginalPathToClipboard": "Eredeti felirat útvonalának másolása a vágólapra", "focusTextBox": "Fókusz a szövegdobozra", + "focusSubtitleListView": "Fókusz a feliratlista nézetre", + "focusWaveform": "Fókusz a hullámformára", + "focusOriginalTextBox": "Fókusz az eredeti szövegmezőre", + "textBoxGoToStart": "Szövegmező, ugrás az elejére", + "textBoxGoToEnd": "Szövegmező, ugrás a végére", "sortByNumber": "Rendezés sorszám szerint", "sortByStartTime": "Rendezés \"Megjelenítés\" ideje szerint", "sortByEndTime": "Rendezés \"Elrejtés\" ideje szerint", @@ -3623,6 +4037,7 @@ "googleIt": "Keresés a Google-on (kijelölt szöveg)", "setActorX": "Beszélő beállítása: {0}", "setNewActor": "Új szereplő beállítása...", + "setStyleX": "Stílus beállítása: {0}", "toggleDialogDashes": "Párbeszéd-gondolatjelek ki-/bekapcsolása", "mergeWithLineBeforeAsDialog": "Egyesítés az előző sorral párbeszédként", "mergeWithLineAfterAsDialog": "Egyesítés a következő sorral párbeszédként", @@ -3634,6 +4049,10 @@ "moveStartOneFrameForwardKeepGapPrev": "Kezdőpont eltolása egy képkockával előrefelé (távolság megtartása az előzőtől, ha közel van)", "moveEndOneFrameBackKeepGapNext": "Végpont eltolása egy képkockával visszafelé (távolság megtartása a következőtől, ha közel van)", "moveEndOneFrameForwardKeepGapNext": "Végpont eltolása egy képkockával előrefelé (távolság megtartása a következőtől, ha közel van)", + "moveStartXMsBack": "Kezdőpont mozgatása X ezredmásodperccel vissza (X a Beállításokban adható meg, a Vizuális szinkronizálásban is)", + "moveStartXMsForward": "Kezdőpont mozgatása X ezredmásodperccel előre (X a Beállításokban adható meg, a Vizuális szinkronizálásban is)", + "moveEndXMsBack": "Végpont mozgatása X ezredmásodperccel vissza (X a Beállításokban adható meg, a Vizuális szinkronizálásban is)", + "moveEndXMsForward": "Végpont mozgatása X ezredmásodperccel előre (X a Beállításokban adható meg, a Vizuális szinkronizálásban is)", "moveSelectedLinesXMsBack": "Kijelölt sorok mozgatása X ezredmásodperccel vissza (X beállítva a Beállításokban)", "moveSelectedLinesXMsForward": "Kijelölt sorok mozgatása X ezredmásodperccel előre (X beállítva a Beállításokban)", "moveSelectedLinesAndForwardXMsBack": "Kijelölt sorok és az összes azt követő mozgatása X ezredmásodperccel vissza (X beállítva a Beállításokban)", @@ -3788,6 +4207,8 @@ "binaryImageCompareInspectImageMatches": "\"Bináris képösszehasonlító\" - Képegyezések vizsgálata", "saveBlankTextTitle": "Menti az üres szöveget?", "saveBlankTextPrompt": "Menti az üres szöveget a képhez?", + "drawnLinesDoNotMatchTitle": "A vonalak nem egyeznek a képpel", + "drawnLinesDoNotMatchPrompt": "Néhány rajzolt vonal nem egyezik a képpel (a zöld vonalaknak a karakteren, a pirosaknak azon kívül kell lenniük), így ez a karakter nem lesz felismerve.\n\nMégis menti?", "yesAndNeverAskAgain": "Igen, és ne kérdezze meg többé", "importTextFromSubtitleDotDotDot": "Szöveg importálása feliratból...", "importTextFromSubtitleOverwritePrompt": "Néhány sor már tartalmaz OCR szöveget. Felülírja a meglévő szöveget?", @@ -3846,9 +4267,26 @@ "crispEmbedSettingsTitle": "CrispEmbed beállításai", "crispEmbedDescription": "Helyi OCR motor több modell háttérrel - töltse le a motort és a modelleket itt.", "trainNOcrDatabase": "nOCR adatbázis betanítása...", + "optimizeNOcrDatabase": "nOCR adatbázis optimalizálása...", + "optimizeNOcrDatabaseQuestionXY": "Eltávolítja azokat a vonalakat a(z) \"{0}\" nOCR adatbázisból, amelyek nem különböztetik meg a karaktereket a hasonló karakterektől?\n\nEz kisebbé teszi az adatbázist és gyorsabbá az OCR-t, általában kevesebb hibával. Legfeljebb egy percig tart.\n\nA biztonsági mentés neve: \"{1}\".", + "optimizingNOcrDatabaseXY": "nOCR adatbázis optimalizálása... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "A(z) \"{0}\" nOCR adatbázis optimalizálva: {1:#,##0} -> {2:#,##0} vonal.", "startTraining": "Betanítás indítása", "abortTraining": "Betanítás megszakítása", "trainingOptions": "Betanítási lehetőségek", + "trainNOcrSubtitle": "Karaktereket jelenít meg a telepített betűtípusokkal, és megtanítja az nOCR-nek az alakjukat. Válassza ki a feliratai által használt betűtípusokat.", + "xFontsSelected": "{0:#,##0} kijelölve", + "subtitleFonts": "Felirat betűtípusai", + "emptyDatabase": "Üres adatbázis", + "startFromDatabase": "Kiindulás", + "startFromDatabaseHint": "A betanított karakterek hozzáadása egy meglévő adatbázis másolatához (ajánlott), vagy kezdés egy üres adatbázisból", + "fontSizes": "Betűméretek", + "fontSizesHint": "Megjelenítési betűméretek képpontban, vesszővel elválasztva, pl. \"30, 40\"", + "numberOfLineSegmentsHint": "Karakterenként ellenőrzött vonalak - több szigorúbb, de lassabb", + "enterDatabaseName": "Adja meg az adatbázis nevét", + "trainingFontXSizeYCharacterZ": "\"{0}\" betanítása {1} px méretben: {2}", + "xLearned": "{0:#,##0} betanítva", + "xSkipped": "{0:#,##0} kihagyva", "charactersToTrain": "Betanítandó karakterek", "letterCombinationsToTrain": "Betűkombinációk, amelyek egy képpé válhatnak", "importCharactersFromSubtitleFile": "Karakterek importálása feliratfájlból...", @@ -3875,6 +4313,8 @@ "drawZoomOut": "Kicsinyítés (Ctrl+-)", "drawResetView": "Nézet visszaállítása (Ctrl+0)", "drawToggleGrid": "Rács ki-/bekapcsolása (Ctrl+G)", + "drawTogglePreview": "Előnézet be/ki (F9)", + "drawPreviewFailed": "Az előnézet sikertelen - libass-t tartalmazó ffmpeg szükséges (subtitles szűrő)", "drawCopyToClipboard": "Másolás a vágólapra (Ctrl+C)", "drawShapes": "Alakzatok", "drawSelectedPoint": "Kijelölt pont", @@ -3882,6 +4322,81 @@ "drawSelectedLayer": "Kijelölt réteg", "drawToolX": "Eszköz: {0}", "drawHelpText": "Kattintson pontok hozzáadásához • Enter/F8 az alakzat lezárásához • Shift+Húzás a mozgatáshoz • Ctrl+Görgetés a nagyításhoz", + "drawMoveToLayer": "Áthelyezés rétegre", + "drawFlipHorizontal": "Vízszintes tükrözés", + "drawFlipVertical": "Függőleges tükrözés", + "drawHideShape": "Alakzat elrejtése", + "drawShowShape": "Alakzat megjelenítése", + "drawHideLayer": "Réteg elrejtése", + "drawShowLayer": "Réteg megjelenítése", + "drawDeleteLayer": "Réteg törlése", + "drawDeletePoint": "Pont törlése", + "drawCancelDrawing": "Rajzolás megszakítása", + "drawLayerX": "{0}. réteg", + "drawImportSvg": "SVG-kép importálása...", + "drawRotateClockwise": "Forgatás 90°-kal az óramutató járásával megegyezően", + "drawConvertToCurve": "Szakasz átalakítása görbévé", + "drawBackground": "Háttér", + "drawPosition": "Pozíció", + "drawZoom": "Nagyítás", + "drawShapeTool": "Alakzat eszköz", + "drawColorPickerTool": "Szín kiválasztása egy alakzatról vagy a háttérről", + "drawShapeLibrary": "Alakzattár", + "drawShapeLibraryHint": "Húzzon a vásznon egy alakzat elhelyezéséhez, vagy kattintson az alapértelmezett mérethez. A Shift megtartja az arányokat.", + "drawAddToLibrary": "Hozzáadás az alakzattárhoz...", + "drawRemoveFromLibrary": "Eltávolítás az alakzattárból", + "drawShapeName": "Alakzat neve", + "drawCategorySpeechBubbles": "Szövegbuborékok", + "drawCategoryArrows": "Nyilak", + "drawCategoryBasicShapes": "Alapalakzatok", + "drawCategorySymbols": "Szimbólumok", + "drawCategoryMyShapes": "Saját alakzatok", + "drawShapeSpeechBubble": "Szövegbuborék", + "drawShapeSpeechBubbleRight": "Szövegbuborék, nyúlvány jobbra", + "drawShapeSpeechBubbleUp": "Szövegbuborék, nyúlvány felfelé", + "drawShapeOvalBubble": "Ovális szövegbuborék", + "drawShapeBoxBubble": "Szögletes szövegbuborék", + "drawShapeThoughtBubble": "Gondolatbuborék", + "drawShapeShoutBubble": "Kiáltásbuborék", + "drawShapeCaptionBox": "Képaláírás-doboz", + "drawShapeArrow": "Nyíl", + "drawShapeDoubleArrow": "Kettős nyíl", + "drawShapeChevron": "Csúcsos nyíl", + "drawShapeCurvedArrow": "Ívelt nyíl", + "drawShapeRoundedRectangle": "Lekerekített téglalap", + "drawShapeTriangle": "Háromszög", + "drawShapeDiamond": "Rombusz", + "drawShapePentagon": "Ötszög", + "drawShapeHexagon": "Hatszög", + "drawShapeOctagon": "Nyolcszög", + "drawShapeStar": "Csillag", + "drawShapeRing": "Gyűrű", + "drawShapePlus": "Plusz", + "drawShapeBanner": "Szalag", + "drawShapeHeart": "Szív", + "drawShapeCheck": "Pipa", + "drawShapeMusicNote": "Hangjegy", + "drawShapeMusicNotes": "Hangjegyek", + "drawShapeLightning": "Villám", + "drawShapeCloud": "Felhő", + "drawShapeMoon": "Hold", + "drawShapeBadge": "Jelvény", + "drawSize": "Méret", + "drawLayer": "Réteg", + "drawBackgroundVideoFrame": "Videó-képkocka (aktuális pozíció)", + "drawBackgroundVideoFrameAt": "Videó-képkocka itt...", + "drawBackgroundImage": "Képfájl...", + "drawBackgroundNone": "Nincs háttér", + "drawBackgroundStretch": "Kép nyújtása a vászonra", + "drawBackgroundOpacity": "Háttér átlátszatlansága", + "drawBackgroundVideoFrameFailed": "Nem sikerült videó-képkockát lekérni itt: {0}.", + "drawImages": "Képek", + "drawConvertToLine": "Szakasz átalakítása egyenessé", + "drawConvertShapeToCurves": "Minden egyenes átalakítása görbévé", + "drawConvertShapeToLines": "Minden görbe átalakítása egyenessé", + "drawRotateCounterClockwise": "Forgatás 90°-kal az óramutató járásával ellentétesen", + "drawSvgImages": "SVG-képek", + "drawSvgNoShapes": "Az SVG-fájlban nem található kitöltött alakzat vagy körvonal.", "progressBarTitle": "ASSA folyamatjelző sáv", "progressBarSettings": "Folyamatjelző sáv", "mouseOverColor": "Egér-rámutatás színe", @@ -3978,13 +4493,26 @@ "graphics": "Grafikák", "copyToStorageStyles": "Másolás a tároló stílusaiba", "copyToFileStyles": "Másolás a fájl stílusaiba", + "styleXAlreadyExistsInStorage": "Már létezik \"{0}\" nevű stílus a tárolóban.\n\nFelülírja, vagy megtartja mindkettőt (a másolat új nevet kap)?", + "styleXAlreadyExistsInFile": "Már létezik \"{0}\" nevű stílus a fájlban.\n\nFelülírja, vagy megtartja mindkettőt (a másolat új nevet kap)?", + "styleNameCannotBeEmpty": "A stílusnév nem lehet üres.", + "styleNameXIsUsedMoreThanOnce": "A(z) \"{0}\" stílusnevet több stílus is használja a fájlban.", + "overwrite": "Felülírás", + "keepBoth": "Mindkettő megtartása", + "doThisForAllConflictingStyles": "Ugyanez minden ütköző stílusnál", "setStyleAsDefault": "Stílus beállítása alapértelmezettként", "takeUsagesFromDotDotDot": "Használat átvétele innen...", "replaceStyleWithDotDotDot": "Stílus cseréje a következőre...", "noAttachmentsFound": "Nem találhatók mellékletek a kiválasztott ASSA fájlban.", "deleteStyleQuestion": "Törli a stílust?", "deleteStylesQuestion": "Törli a stílusokat?", + "deleteXStylesQuestion": "Biztosan törölni szeretne {0} stílust?", + "deleteXStylesFromStorageQuestion": "Biztosan törölni szeretne {0} stílust a tárolóból?", + "deleteStyleXFromStorageQuestion": "Biztosan törölni szeretné a(z) \"{0}\" stílust a tárolóból?", + "deleteStyleXFromFileQuestion": "Biztosan törölni szeretné a(z) \"{0}\" stílust az aktuális fájlból?", "openStyleImportFile": "Nyissa meg a feliratfájlt a stílusok importálásához", + "styleImportFiles": "Stílusfájlok (.ass, .sty, Subtitle Edit 4 kategóriák .template)", + "ssaStyleImportFiles": "Stílusfájlok (.ssa, .ass, .sty)", "primary": "Elsődleges", "secondary": "Másodlagos", "applyOverrideTags": "Felülbíráló címkék alkalmazása", diff --git a/src/ui/Assets/Languages/Indonesian.json b/src/ui/Assets/Languages/Indonesian.json index 2d6102cdacd..87195e3383e 100644 --- a/src/ui/Assets/Languages/Indonesian.json +++ b/src/ui/Assets/Languages/Indonesian.json @@ -1,12 +1,67 @@ { "title": "Subtitle Edit", - "version": "v5.2.0-rc7", + "version": "v5.3.0", "translatedBy": "Claude (Anthropic)", "cultureName": "id-ID", "general": { + "preset": "Prasetel", + "output": "Keluaran", + "outputFormat": "Format keluaran", + "other": "Lainnya", + "timeCodeFormat": "Format kode waktu", + "topBottomMargin": "Margin atas/bawah", + "theme": "Tema", + "brightness": "Kecerahan", + "chooseColor": "Pilih warna", + "lineX": "Baris {0}", + "playLine": "Putar baris", + "maxLineLength": "Panjang baris maks", + "maxCharsPerSec": "Maks karakter/dtk", + "maxNumberOfLines": "Jumlah baris maks", + "subtitles": "Subtitel", + "shotChanges": "Perubahan shot", + "chapters": "Bab", + "interjections": "Interjeksi", + "blankLines": "Baris kosong", + "editWholeText": "Edit seluruh teks", + "noTextInClipboard": "Tidak ada teks di papan klip", + "noSubtitlesFoundTitle": "Tidak ada subtitel ditemukan", + "replacedXOccurrences": "{0} kemunculan diganti", + "invalidRegularExpressionX": "Ekspresi reguler tidak valid: {0}", + "discardChangesTitle": "Buang perubahan?", + "downloadingXDotDotDot": "Mengunduh {0}...", + "importTimeCodesDotDotDot": "Impor kode waktu...", + "original": "Asli", + "nextChange": "Perubahan berikutnya", + "previousChange": "Perubahan sebelumnya", + "changeXOfY": "Perubahan {0} dari {1}", + "tooLong": "Terlalu panjang", + "tooShort": "Terlalu pendek", + "overlapping": "Tumpang tindih", + "fixOcrErrors": "Perbaiki kesalahan OCR", + "runningOcrXY": "Menjalankan OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp memerlukan mesin llama-server untuk diunduh. Unduh sekarang?", "abort": "Batalkan", "actor": "Aktor", "actors": "Aktor", + "setActorDotDotDot": "Atur aktor...", + "actorPickerTitle": "Atur aktor", + "actorPickerFilterHint": "Ketik untuk memfilter, atau ketik nama aktor baru", + "actorPickerKeysHint": "Tekan angka atau Enter untuk mengatur aktor. Alt+Atas/Bawah mengubah urutan, Delete menghapus aktor.", + "actorPickerNewActorX": "Aktor baru \"{0}\"", + "actorPickerLinesSelectedX": "Baris terpilih: {0}", + "setStyleDotDotDot": "Atur gaya...", + "stylePickerTitle": "Atur gaya", + "stylePickerFilterHint": "Ketik untuk memfilter, atau ketik nama gaya baru", + "stylePickerKeysHint": "Tekan angka (1-9, 0) untuk mengatur gaya pada semua baris terpilih.", + "stylePickerNewStyleX": "Gaya baru \"{0}\"", + "stylePickerNewStyleInfo": "Tekan Enter untuk menambahkan gaya ini dengan pengaturan baku dan menerapkannya pada baris terpilih. Gunakan \"Kelola gaya...\" untuk mengubah fon, warna, dan posisinya nanti.", + "stylePickerCurrentStyleX": "Gaya saat ini: {0}", + "stylePickerLinesUsingStyleX": "Baris yang memakai gaya ini: {0}", + "stylePickerMarginsXYZ": "Kiri {0}, kanan {1}, vertikal {2}", + "stylePickerSetStyle": "_Atur gaya", + "stylePickerManageStyles": "Kelola gaya...", + "stylePickerManageStylesHint": "Tutup jendela ini dan buka pengelola gaya untuk mengedit fon, warna, posisi, dan lainnya", "add": "Tambah", "addDotDotDot": "Tambah...", "addToNamesListCaseSensitive": "Tambahkan ke daftar nama (peka huruf besar/kecil)", @@ -15,7 +70,6 @@ "adjustAlpha": "Sesuaikan alfa (transparansi)", "adjustDisplayDuration": "Sesuaikan durasi tampil", "adjustment": "Penyesuaian", - "advanced": "Lanjutan", "advancedSettings": "Pengaturan lanjutan", "after": "Sesudah", "alignment": "Perataan", @@ -60,7 +114,6 @@ "bdnXml": "BDN/xml", "bdnXml8Bit": "BDN/xml 8-bit", "before": "Sebelum", - "beforeX": "Sebelum \"{0}\"", "beginning": "Awal", "bluRaySup": "Blu-ray (sup)", "bold": "Tebal", @@ -72,7 +125,6 @@ "bookmarkEdit": "Edit markah", "bookmarkEditForSelectedLinesX": "Edit markah untuk {0} baris terpilih", "bookmarksList": "Daftar markah", - "borderColor": "Warna garis tepi", "borderStyle": "Gaya garis tepi", "bottomCenter": "Bawah-Tengah", "bottomLeft": "Bawah-Kiri", @@ -99,7 +151,6 @@ "changeCasing": "Ubah kapitalisasi", "changeFormatting": "Ubah pemformatan", "changeFrameRate": "Ubah laju bingkai", - "changeLanguageFilter": "Ubah filter bahasa...", "changeOnce": "Ubah sekali", "changeSpeed": "Ubah kecepatan", "character": "Karakter", @@ -141,7 +192,6 @@ "conversionCancelledByUser": "Konversi dibatalkan oleh pengguna", "convert": "Konversi", "converted": "Terkonversi", - "convertingDotDotDot": "Mengonversi...", "convertingXofYDotDoDot": "Mengonversi {0:#,###,##0}/{1:#,###,##0}...", "copy": "Salin", "copyImageToClipboard": "Salin gambar ke papan klip", @@ -152,7 +202,6 @@ "couldNotOpenFileXErrorY": "Tidak dapat membuka file \"{0}\". Kesalahan: {1}", "count": "Jumlah", "cps": "Karakter/dtk", - "currentSubtitle": "Subtitel saat ini", "cudaRuntime": "Runtime CUDA", "currentVideoPosition": "Posisi video saat ini", "custom": "Kustom", @@ -212,7 +261,6 @@ "expand": "Bentangkan", "export": "Ekspor", "exportDotDotDot": "Ekspor...", - "exportToX": "Ekspor ke {0}", "extendAfter": "Perpanjang/perpendek ke baris sesudahnya", "extendBefore": "Perpanjang/perpendek ke baris sebelumnya", "extendSelectedLinesToNextShotChangeOrNextSubtitle": "Perpanjang baris terpilih ke perubahan shot berikutnya (atau subtitel berikutnya)", @@ -229,7 +277,6 @@ "fileExtension": "Ekstensi file", "fileName": "Nama file", "fileNameX": "Nama file: {0}", - "fileNameXAndSize": "Nama file: {0} ({1})", "fileSaved": "File disimpan", "fileSavedToX": "File disimpan ke {0}", "fileXAlreadyExists": "File \"{0}\" sudah ada.", @@ -239,8 +286,6 @@ "find": "Cari", "findNext": "Cari berikutnya", "findTextX": "Cari teks - {0}", - "fiveHundredMilliseconds": "500 milidetik", - "fiveSeconds": "Lima detik", "fix": "Perbaiki", "fixCommonErrors": "Perbaiki kesalahan umum", "fixRightToLeft": "Perbaiki kanan-ke-kiri", @@ -264,14 +309,12 @@ "foundXInLineYZ": "Ditemukan \"{0}\" di baris {1}, posisi {2}", "foundXMatches": "Ditemukan {0} kecocokan", "frameRate": "Laju bingkai", - "frameRateX": "Laju bingkai: {0:0.0###}", "frames": "Bingkai", "from": "Dari", "fromCurrentVideoPosition": "dari posisi video saat ini", "fullScreen": "Layar penuh", "gap": "Jeda", "general": "Umum", - "generalText": "Umum", "generate": "Buat", "generateImportShotChanges": "Buat/impor perubahan shot", "generating": "Membuat...", @@ -289,12 +332,8 @@ "help": "Bantuan", "hex": "Heks", "hide": "Sembunyikan", - "hidePreview": "Sembunyikan pratinjau", "history": "Riwayat", "horizontal": "Horizontal", - "hourMinutesSecondsDecimalSeparatorMilliseconds": "Jam:mnt:dtk{0}md", - "hourMinutesSecondsFrames": "Jam:mnt:dtk:bingkai", - "ip": "IP", "id": "ID", "image": "Gambar", "imageSaved": "Gambar disimpan", @@ -355,6 +394,7 @@ "mergeSelectedLinesDialog": "Gabungkan baris terpilih sebagai dialog", "mergeWithLineAfterAndAutoBreak": "Gabungkan dengan baris sesudahnya dan pisah baris otomatis", "mergeWithLineAfterKeepBreaks": "Gabungkan dengan baris sesudahnya (pertahankan pemisah baris)", + "mergeWithLineAfterAndUnbreak": "Gabungkan dengan baris sesudahnya dan satukan baris", "mergeWithLineBeforeAndAutoBreak": "Gabungkan dengan baris sebelumnya dan pisah baris otomatis", "mergeWithLineBeforeKeepBreaks": "Gabungkan dengan baris sebelumnya (pertahankan pemisah baris)", "middleCenter": "Tengah-Tengah", @@ -369,13 +409,13 @@ "moveAllShotChangeOneFrameForward": "Geser semua perubahan shot satu bingkai maju", "multiMode": "Mode multi", "moveDown": "Pindah ke bawah", + "increase": "Tambah", + "decrease": "Kurangi", "moveUp": "Pindah ke atas", "moveToTop": "Pindahkan ke atas", "moveToBottom": "Pindahkan ke bawah", "multipleReplace": "Penggantian ganda", - "mute": "Bisukan", "name": "Nama", - "negative": "Negatif", "new": "Baru", "newDotDotDot": "Baru...", "newProfile": "Profil baru", @@ -405,20 +445,15 @@ "offsetY": "Offset Y", "ok": "_OK", "oneFile": "Satu file", - "oneHundredMilliseconds": "100 milidetik", - "oneSecond": "Satu detik", "oneSecondBack": "Satu detik mundur", "oneSecondForward": "Satu detik maju", - "onlineVideoFeatureNotAvailable": "Fitur tidak tersedia untuk video daring", "openContainingFolder": "Buka folder berisi file", "openDictionaryFolder": "Buka folder kamus", "openFile": "Buka file", "openImageBasedSubtitle": "Buka subtitel berbasis gambar", "openImageFile": "Buka file gambar", - "openOriginalSubtitleFile": "Buka file subtitel asli...", "openOriginalSubtitleFileTitle": "Buka file subtitel asli", "openOutputFolder": "Buka folder keluaran", - "openSubtitle": "Buka subtitel...", "openSubtitleFileTitle": "Buka file subtitel", "openSubtitles": "Buka subtitel...", "openVideoFile": "Buka file video...", @@ -433,11 +468,6 @@ "outlineWidth": "Lebar garis luar", "outputFolder": "Folder keluaran", "outputProperties": "Properti keluaran", - "overlap": "Tumpang tindih", - "overlapNextX": "Tumpang tindih berikutnya ({0:#;##0.###})", - "overlapPreviousLineX": "Tumpang tindih baris sebelumnya ({0:#;##0.###})", - "overlapStartAndEnd": "Tumpang tindih awal dan akhir", - "overlapX": "Tumpang tindih ({0:#;##0.###})", "overwriteExistingFiles": "Timpa file yang ada", "overwriteFilesInFolderX": "Timpa file di folder: \"{0}\"", "overwriteQuestion": "Timpa?", @@ -450,6 +480,7 @@ "percent": "Persen", "pickLayer": "Atur lapisan", "pickOllamaModel": "Pilih model Ollama", + "pickModel": "Pilih model", "llamaCppUseRemoteServer": "Gunakan server eksternal (URL)", "llamaCppEngineSettings": "Pengaturan mesin llama.cpp", "llamaCppEngineSettingsSubtitle": "Build server llama.cpp lokal", @@ -501,7 +532,6 @@ "refresh": "Segarkan", "region": "Wilayah", "regularExpression": "Ekspresi reguler", - "regularExpressionIsNotValid": "Ekspresi reguler tidak valid!", "relativeToCurrentVideoPosition": "Relatif terhadap posisi video saat ini", "remove": "Hapus", "removeAlignment": "Hapus perataan", @@ -527,7 +557,7 @@ "reset": "Atur ulang", "resizePanels": "Ubah ukuran panel", "resolution": "Resolusi", - "resolutionX": "Resolusi: {0}", + "retry": "Coba lagi", "reverseRightToLeftStartEnd": "Balikkan awal/akhir RTL", "right": "Kanan", "rightToLeft": "Kanan ke kiri", @@ -567,8 +597,6 @@ "selectedlinesX": "Baris terpilih: {0}", "sensitivity": "Sensitivitas", "separator": "Pemisah", - "sessionKey": "Kunci sesi", - "sessionKeyGenerate": "Buat kunci baru", "setEnd": "Atur akhir", "setEndAndGoToNext": "Atur akhir lalu ke berikutnya", "setEndAddNewAndGoToNew": "Atur akhir, tambah baru, dan pindah ke yang baru", @@ -591,8 +619,9 @@ "shadowColor": "Warna bayangan", "shadowWidth": "Lebar bayangan", "shiftLineBy": "Geser baris sebesar", + "shotIn": "Shot masuk", + "shotOut": "Shot keluar", "shortcut": "Pintasan", - "shortcutX": "Pintasan: {0}", "shortcuts": "Pintasan", "show": "Tampilkan", "showActorColumn": "Tampilkan kolom \"Aktor\"", @@ -603,17 +632,19 @@ "showStartColumn": "Tampilkan kolom \"Mulai\"", "showHideColumn": "Tampilkan kolom \"Selesai\"", "showHistory": "Tampilkan riwayat", + "clearHistory": "Bersihkan riwayat", + "removeFromHistory": "Hapus dari riwayat", "showLayerColumn": "Tampilkan kolom \"Lapisan\"", "showPreview": "Tampilkan pratinjau", "showShotChangesList": "Tampilkan daftar perubahan shot", + "showShotInColumn": "Tampilkan kolom \"Shot masuk\"", + "showShotOutColumn": "Tampilkan kolom \"Shot keluar\"", "showStyleColumn": "Tampilkan kolom \"Gaya\"", "showTeletext": "Tampilkan kolom teletext di tampilan daftar", "showTimeCodes": "Tampilkan kode waktu", "showWpmColumn": "Tampilkan kolom \"Kata/mnt\"", "showPixelWidthColumn": "Tampilkan kolom \"Lebar piksel\"", "shrink": "Kecilkan", - "singleBox": "Kotak tunggal", - "singleLineLengths": "Panjang satu baris:", "singleMode": "Mode tunggal", "textTotalLength": "Teks - panjang total", "textSingleLineMaxLength": "Teks - panjang maks satu baris", @@ -662,16 +693,16 @@ "strikeout": "Coret", "style": "Gaya", "styleExaggeration": "Penekanan gaya", - "styleLanguage": "Gaya / Bahasa", "styles": "Gaya", "subtitleFile": "File subtitel", + "subtitleFileChangedOutsideX": "File \"{0}\" telah diubah di luar Subtitle Edit.\n\nMuat ulang dan buang perubahan Anda?", "subtitleFileName": "Nama file subtitel", "subtitleFileSaved": "File subtitel disimpan", "subtitleFileSavedToX": "File subtitel disimpan ke {0}", "subtitleFiles": "File subtitel", "subtitleFormats": "Format subtitel", "subtitleLoadedX": "Subtitel dimuat: {0}", - "subtitleXOfY": "Subtitel {0} dari {1}", + "subtitleReloadedChangedOutsideX": "Subtitel dimuat ulang (diubah di luar Subtitle Edit): {0}", "suffix": "Akhiran", "suggestions": "Saran", "sync": "Sinkron", @@ -683,7 +714,6 @@ "teletextColor": "Warna teletext", "teletextLine": "Baris teletext", "tenHours": "10 jam", - "tenMilliseconds": "10 milidetik", "text": "Teks", "textColor": "Warna teks", "textFiles": "File teks", @@ -710,9 +740,6 @@ "topRight": "Atas-Kanan", "top": "Atas", "totalAdjustmentX": "Total penyesuaian: {0}", - "totalFramesX": "Total bingkai: {0:#;##0.##}", - "totalLengthX": "Panjang total: {0}", - "totalLengthXSplitLine": "Panjang total: {0} (pisah baris!)", "translate": "Terjemahkan", "translatePercentX": "Menerjemahkan: {0}%", "translateRow": "Terjemahkan baris", @@ -721,6 +748,7 @@ "type": "Jenis", "unbreak": "Satukan baris teks", "unbreakLines": "Satukan baris", + "undelete": "Batalkan hapus", "underline": "Garis bawah", "undo": "Urungkan", "unknown": "Tidak diketahui", @@ -740,13 +768,11 @@ "usages": "Penggunaan", "use": "Gunakan", "useAlways": "Selalu gunakan", - "useLargerFontForThisWindow": "Gunakan fon lebih besar untuk jendela ini", "useOnce": "Gunakan sekali", "useOutputFolder": "Gunakan folder keluaran", "useSourceFolder": "Gunakan folder sumber", "useSourceResolution": "Gunakan resolusi sumber", "userName": "Nama pengguna", - "userNameAlreadyInUse": "Nama pengguna sudah dipakai", "vertical": "Vertikal", "video100MsBack": "Video, 100 milidetik mundur", "video100MsForward": "Video, 100 milidetik maju", @@ -760,14 +786,25 @@ "videoCustom3ForwardX": "Video, milidetik kustom ({0:#,###,##0}) maju, 3", "videoCustom4BackX": "Video, milidetik kustom ({0:#,###,##0}) mundur, 4", "videoCustom4ForwardX": "Video, milidetik kustom ({0:#,###,##0}) maju, 4", - "videoEncodingX": "Pengodean video: {0}", + "videoCustom1BackAndPauseX": "Video, milidetik kustom ({0:#,###,##0}) mundur dan jeda, 1", + "videoCustom1ForwardAndPauseX": "Video, milidetik kustom ({0:#,###,##0}) maju dan jeda, 1", + "videoCustom2BackAndPauseX": "Video, milidetik kustom ({0:#,###,##0}) mundur dan jeda, 2", + "videoCustom2ForwardAndPauseX": "Video, milidetik kustom ({0:#,###,##0}) maju dan jeda, 2", + "videoCustom3BackAndPauseX": "Video, milidetik kustom ({0:#,###,##0}) mundur dan jeda, 3", + "videoCustom3ForwardAndPauseX": "Video, milidetik kustom ({0:#,###,##0}) maju dan jeda, 3", + "videoCustom4BackAndPauseX": "Video, milidetik kustom ({0:#,###,##0}) mundur dan jeda, 4", + "videoCustom4ForwardAndPauseX": "Video, milidetik kustom ({0:#,###,##0}) maju dan jeda, 4", "videoExtension": "Ekstensi file video", "videoFile": "File video", "videoFileGenerated": "File video dibuat", "videoFileGeneratedX": "File video dibuat: \"{0}\"", + "videoFilesGenerated": "File video dibuat", + "xVideosGenerated": "{0} video dibuat", + "xOfYVideosGenerated": "{0} dari {1} video dibuat", + "savedInX": "Disimpan di {0}", + "savedInXFolders": "Disimpan di {0} folder", "videoFiles": "File video", "videoAndAudioFiles": "File video dan audio", - "videoInformation": "Info video", "videoOffset": "Offset video", "videoOneFrameBack": "Video, satu bingkai mundur", "videoOneFrameForward": "Video, satu bingkai maju", @@ -778,7 +815,6 @@ "videoPlayer": "Pemutar video", "videoPosition": "Posisi video", "videoResolution": "Resolusi video", - "viewX": "Tampilan {0}", "visible": "Terlihat", "voice": "Suara", "volume": "Volume", @@ -787,9 +823,7 @@ "waveformCenterOnVideoPosition": "Pusatkan bentuk gelombang pada posisi video", "waveformPasteFromClipboard": "Tempel dari papan klip", "waveformSpectrogram": "Bentuk gelombang/spektogram", - "webServiceUrl": "URL layanan web", "width": "Lebar", - "windowPositionAndSize": "Posisi dan ukuran jendela", "wordsPerMin": "Kata/mnt", "pixelWidth": "Lebar piksel", "wpm": "Kata/mnt", @@ -803,8 +837,6 @@ "noBookmarksFound": "Tidak ada markah lagi yang ditemukan", "xRequiresAnApiKey": "{0} memerlukan kunci API", "xRequiresAValidUrl": "{0} memerlukan URL yang valid (mis. \"http://...\" atau \"https://...\")", - "xSeconds": "{0:0.0##} detik", - "xSubtitles": "{0:#,###,##0} subtitel", "yes": "Ya", "zeroBytes": "0 bita", "copyToClipboard": "Salin ke papan klip", @@ -826,10 +858,8 @@ "playbackSpeed": "Kecepatan pemutaran", "hoursMinutesSecondsMilliseconds": "HH:MM:SS.FFF", "imageFiles": "File gambar", - "openAiCompatibleStt": "STT Kompatibel OpenAI", "openAiCompatibleSttEndpoint": "URL Endpoint STT", "openAiCompatibleSttApiKey": "Kunci API", - "openAiCompatibleSttModel": "Model", "openAiCompatibleSttExtraHeaders": "Header Tambahan", "openAiCompatibleSttTimeout": "Batas waktu (detik)", "openAiCompatibleSttLanguage": "Petunjuk Bahasa", @@ -839,6 +869,9 @@ "dashScopeSttRegion": "Wilayah", "dashScopeSttEnableWords": "Stempel waktu tingkat kata", "dashScopeSttRegionKeyHint": "Catatan: Kunci API Alibaba Cloud Model Studio bersifat spesifik wilayah - pastikan wilayah yang dipilih cocok dengan wilayah tempat kunci API dibuat (Tiongkok vs. Internasional).", + "googleCloudSttProjectId": "ID proyek (hanya untuk Application Default Credentials)", + "googleCloudSttBucketName": "Bucket penyimpanan (kosong = otomatis)", + "googleCloudSttDynamicBatching": "Batching dinamis (sekitar 5x lebih murah, tanpa jaminan latensi)", "onlineSttApiKeyMissing": "Kunci API diperlukan. Silakan masukkan kunci API Anda dan coba lagi.", "openAiCompatibleSttAutoTranscribeOnAudioSelection": "Transkripsi otomatis seleksi bentuk gelombang baru melalui ucapan-ke-teks", "openAiCompatibleSttStream": "Streaming respons", @@ -848,11 +881,9 @@ "configurationRequired": "Konfigurasi Diperlukan", "transcriptionError": "Kesalahan Transkripsi", "transcriptionComplete": "Transkripsi selesai", - "transcribingWithOpenAi": "Mentranskripsi dengan Layanan OpenAI...", "processingResponse": "Memproses respons...", "unauthorizedApiKey": "Tidak sah: Kunci API tidak valid atau izin tidak mencukupi.", "requestTimeout": "Batas waktu permintaan: Server terlalu lama merespons.", - "noSegmentsReturned": "Tidak ada segmen yang dikembalikan dari layanan transkripsi.", "openAiCompatibleSttUrlMissing": "URL endpoint STT Kompatibel OpenAI diperlukan. Silakan masukkan URL dan coba lagi.", "openAiCompatibleSttUrlNotResponding": "Endpoint STT Kompatibel OpenAI tidak merespons:\n{0}\n\nSilakan periksa URL dan pastikan server berjalan.", "transcriptionFailed": "Transkripsi gagal", @@ -898,14 +929,15 @@ "multipleReplace": "Penggantian gan_da...", "fillSelectedLinesWithClipboard": "Isi baris terpilih dengan teks papan klip", "goToLineNumber": "_Pergi ke nomor baris...", + "commandPalette": "_Palet perintah...", "rightToLeftMode": "Mode kanan-ke-k_iri", "modifySelectionDotDotDot": "Ubah _seleksi...", "tools": "Ala_t", - "toolsSelectedLines": "Ala_t (baris terpilih)", "adjustDurations": "Sesu_aikan durasi...", "applyDurationLimits": "Terapkan batas _durasi...", "batchConvert": "Konversi _batch...", "beautifyTimeCodes": "Percantik kode waktu...", + "improveTimeCodes": "Perbaiki kode waktu (forced alignment)...", "bridgeGaps": "Jembatani _jeda...", "applyMinGap": "Terapkan jeda min. antar subtitel...", "changeCasing": "Ubah _kapitalisasi...", @@ -1044,6 +1076,9 @@ "selectCurrentLineWhilePlayingHint": "Pilih subtitel saat ini selama pemutaran {0}", "videoPosition": "Posisi video {0}", "videoPositionTextBox": "Kotak teks posisi video {0}", + "toolbarLineBreakX": "Pemisah baris {0} (sisa bilah alat berlanjut di baris baru)", + "initialText": "Teks awal baris terpilih", + "initialTextHint": "Teks baris terpilih seperti saat baris tersebut dipilih", "hideWaveformToolbar": "Sembunyikan bilah alat {0}", "resetZoomAndSpeed": "Atur ulang zoom & kecepatan pemutaran {0}", "removeBlankLines": "Hapus baris kosong {0}", @@ -1057,6 +1092,15 @@ "textPlayHint": "Putar subtitel saat ini dan berhenti di akhir {0}", "textPauseHint": "Jeda pemutaran {0}", "textNextHint": "Putar subtitel berikutnya dan berhenti di akhir {0}", + "moveSelectedLines": "Geser baris terpilih (tombol mundur/maju)", + "moveSelectedLinesAndFollowing": "Geser baris terpilih dan semua berikutnya (tombol mundur/maju)", + "moveAllLines": "Geser semua baris (tombol mundur/maju)", + "moveSelectedLinesBackHint": "Geser baris terpilih {0} ms mundur {1}", + "moveSelectedLinesForwardHint": "Geser baris terpilih {0} ms maju {1}", + "moveSelectedLinesAndFollowingBackHint": "Geser baris terpilih dan semua berikutnya {0} ms mundur {1}", + "moveSelectedLinesAndFollowingForwardHint": "Geser baris terpilih dan semua berikutnya {0} ms maju {1}", + "moveAllLinesBackHint": "Geser semua baris {0} ms mundur {1}", + "moveAllLinesForwardHint": "Geser semua baris {0} ms maju {1}", "guessStartNoLineSelected": "Tebak awal: tidak ada baris terpilih", "guessStartTimeCodesLocked": "Tebak awal: kode waktu terkunci", "guessStartNoWaveform": "Tebak awal: tidak ada bentuk gelombang", @@ -1078,12 +1122,15 @@ "charactersPerSecond": "Karakter/detik: {0}", "chooseColumn": "Pilih kolom", "columnPaste": "Tempel kolom", + "commandPaletteTitle": "Palet perintah", + "commandPaletteSearchPlaceholder": "Ketik untuk mencari perintah...", + "commandPaletteNoCommandsFound": "Tidak ada perintah yang cocok", "createdEmptyTranslation": "Terjemahan kosong dibuat dari subtitel saat ini", "deleteText": "Hapus teks", "deleteTextAndShiftCellsUp": "Hapus teks dan geser sel ke atas", "endTimeMustBeAfterStartTime": "Waktu selesai harus setelah waktu mulai.", "errorLoad7Zip": "File ini tampaknya file terkompresi 7-Zip.\n\nSubtitle Edit tidak dapat membuka file terkompresi.", - "errorLoadBinaryZeroes": "Maaf, file ini hanya berisi nol biner!\n\nJika Anda pernah mengedit file ini dengan Subtitle Edit, Anda mungkin dapat menemukan cadangan melalui menu File -> Pulihkan cadangan otomatis...", + "errorLoadBinaryZeroes": "Maaf, file ini hanya berisi nol biner!\n\nJika Anda pernah mengedit file ini dengan Subtitle Edit, Anda mungkin dapat menemukan cadangan melalui menu File -> Pulihkan cadangan otomatis...", "errorLoadGZip": "File ini tampaknya file terkompresi GZip.\n\nSubtitle Edit tidak dapat membuka file terkompresi.", "errorLoadLargeFile": "File ini terlalu besar untuk dibuka sebagai file subtitel.", "errorLoadVideoFilePrompt": "File ini tampaknya file video:\n{0}\n\nAnda dapat membuka video melalui \"Video -> Buka video\" atau dengan menyeret dan menjatuhkan video ke pemutar video.\n\nApakah Anda ingin membukanya sebagai file video?", @@ -1116,18 +1163,20 @@ "numberOfLinesEvenlyDistributedX": "{0} baris didistribusikan secara merata", "oneLineCopiedFromOriginal": "Satu baris disalin dari subtitel asli", "oneLineCopiedToOriginal": "Satu baris disalin ke subtitel asli", + "onlineOnlyVideo": "Video khusus daring", + "onlineOnlyVideoXSizeYDownloadAndOpen": "File video \"{0}\" ({1}) hanya tersimpan secara daring, misalnya di Dropbox atau iCloud Drive, dan harus diunduh sebelum dapat dibuka.\n\nUnduh dan buka sekarang?", "oneLineMerged": "Satu baris digabungkan", "oneLineSwitched": "Satu baris ditukar", "overwriteExistingCells": "Timpa sel yang ada", "overwriteOrShiftCellsDown": "Timpa/geser sel ke bawah", "parsingMatroskaFile": "Mengurai file Matroska...", + "readingDvdSubtitles": "Membaca subtitel DVD...", "pasteFromClipboardDotDotDot": "Tempel dari papan klip...", "redoPerformed": "Ulangi dilakukan", "redoPerformedXActionLeft": "Ulangi dilakukan (aksi tersisa: {0})", "removedUnicodeControlCharactersX": "Karakter kontrol Unicode dihapus dari {0} baris", "removedXBlankLines": "{0} baris kosong dihapus", "replacedXWithYCountZ": "\"{0}\" diganti dengan \"{1}\" ({2} kemunculan)", - "replacedXWithYInLineZ": "\"{0}\" diganti dengan \"{1}\" di baris {2}", "reversedStartAndEndingsForRightToLeftX": "Awal dan akhir dibalik untuk kanan-ke-kiri di {0} baris", "ruleProfileIsX": "Profil aturan sekarang \"{0}\"", "saveLanguageFile": "Simpan file bahasa", @@ -1135,7 +1184,6 @@ "shiftTextCellsDown": "Geser sel teks ke bawah", "singleLineLength": "Panjang baris: ", "speedIsNowX": "Kecepatan sekarang \"{0}\"", - "spellCheckResult": "Pemeriksaan ejaan selesai. \n\n• Kata diubah: {0}\n• Kata dilewati: {1}", "subtitleGridFormattingX": "Pemformatan kisi: {0}", "subtitleImportedFromMatroskaFile": "Subtitel diimpor dari file Matroska", "textDown": "Teks ke bawah", @@ -1162,13 +1210,14 @@ "trimmedXLines": "{0} baris subtitel dipangkas", "pastedXLinesOverSelectedLines": "{0} baris ditempel menimpa baris terpilih", "pastedXOfYLinesOverSelectedLines": "{0} dari {1} baris ditempel menimpa baris terpilih - sisanya tidak muat pada seleksi", + "insertedXLinesFromClipboard": "{0} baris disisipkan dari papan klip", "openOriginalDifferentNumberOfSubtitlesXY": "File subtitel asli tidak memiliki jumlah subtitel yang sama dengan file subtitel saat ini.\n\n• Subtitel asli: {0}\n• Subtitel saat ini: {1}", - "importXMatchingOriginalLines": "Impor {0} subtitel asli yang cocok?", "originalTextReadOnly": "Teks asli (hanya-baca)", "originalTextEditMode": "Teks asli (mode edit)", "originalIsReadOnlyNotSaved": "Subtitel asli adalah referensi hanya-baca dan tidak disimpan", "originalIsEmptyNotSaved": "Subtitel asli tidak memiliki teks sama sekali dan tidak disimpan", "originalIsReadOnlyReference": "Subtitel asli dibuka sebagai referensi hanya-baca", + "closeTranslationQuestionXY": "Tutup terjemahan \"{0}\"?\n\nSubtitel asli \"{1}\" menjadi subtitel yang Anda edit. File terjemahan itu sendiri tidak diubah.", "allowEditOfOriginalSubtitle": "Izinkan edit subtitel asli", "showAllOriginalLinesX": "Tampilkan semua baris asli ({0} tidak punya pasangan di sini)", "showAllOriginalLinesHint": "Baris tanpa pasangan ditampilkan sebagai baris tambahan, sehingga Anda dapat melihat apa yang kurang pada terjemahan.", @@ -1203,6 +1252,7 @@ "fileExportedInFormatXToY": "File diekspor dalam format {0} ke {1}", "fileExportedInFormatXToFileY": "File diekspor dalam format \"{0}\" ke file \"{1}\"", "fixedXLines": "{0} baris diperbaiki", + "toolXChangedYLines": "{0}: {1} baris diubah", "transcriptionCompletedWithXLines": "Transkripsi selesai dengan {0} baris", "openSubtitleFileX": "Buka file subtitel \"{0}\"?", "replacedXOccurrences": "{0} kemunculan diganti", @@ -1234,13 +1284,9 @@ "file": { "ebuSaveOptions": { "title": "Opsi penyimpanan EBU", - "generalSubtitleInformation": "Informasi umum subtitel", "codePageNumber": "Nomor halaman kode", "diskFormatCode": "Kode format disk", "displayStandardCode": "Kode standar tampilan", - "colorRequiresTeletext": "Warna memerlukan teleteks!", - "alignmentRequiresTeletext": "Perataan memerlukan teleteks!", - "teletextCharsShouldBe38": "'Maks# karakter per baris' untuk teleteks harus 38!", "characterCodeTable": "Tabel karakter", "languageCode": "Kode bahasa", "originalProgramTitle": "Judul program asli", @@ -1257,7 +1303,6 @@ "maxNumberOfDisplayableRows": "Maks# baris", "diskSequenceNumber": "Nomor urut disk", "totalNumberOfDisks": "Jumlah total disk", - "import": "Impor...", "textAndTimingInformation": "Informasi teks dan pewaktuan", "justificationCode": "Kode perataan", "verticalPosition": "Posisi vertikal", @@ -1274,11 +1319,6 @@ "errors": "Kesalahan", "errorsX": "Kesalahan: {0}", "maxLengthError": "Baris {0} melebihi panjang maks ({1}) sebanyak {2}: {3}", - "textUnchangedPresentation": "Presentasi tidak berubah", - "textLeftJustifiedText": "Teks rata kiri", - "textCenteredText": "Teks rata tengah", - "textRightJustifiedText": "Teks rata kanan", - "useBoxForOneNewLine": "Centang 'Gunakan kotak di sekitar teks' untuk hanya satu baris baru", "maxLengthErrorTeletextColored": "Baris {0}-{1}: 36 (bukan {2}) seharusnya jumlah karakter maksimum untuk teks berwarna tinggi ganda", "maxLengthErrorTeletextWhite": "Baris {0}-{1}: 37 (bukan {2}) seharusnya jumlah karakter maksimum untuk teks putih tinggi ganda", "maxLengthErrorTeletextSingleHeight": "Baris {0}: 38 (bukan {1}) seharusnya jumlah karakter maksimum untuk teks putih tinggi tunggal", @@ -1303,22 +1343,29 @@ "formattingDotDotDot": "Pemformatan...", "imageBasedSubtitleForEditDotDotDot": "Subtitel berbasis gambar untuk diedit...", "imageBasedSubtitleForOcrDotDotDot": "Subtitel berbasis gambar untuk OCR...", + "dvdSubtitlesDotDotDot": "Subtitel dari DVD (IFO/VOB)...", + "titleImportDvd": "Impor subtitel dari DVD", + "dvdIfoFile": "File IFO", + "dvdVobFiles": "File VOB", + "dvdVideoStandard": "Standar video", + "dvdStartRipping": "Mulai ripping", + "dvdRippingAborted": "Ripping dibatalkan", + "dvdOpenIfoFile": "Buka file IFO DVD", + "dvdAddVobFiles": "Tambah file VOB", + "dvdIfoFiles": "File IFO DVD", + "dvdVobFileType": "File VOB DVD", + "dvdDropHint": "Buka file IFO (VIDEO_TS\\VTS_01_0.IFO) atau tambahkan file VOB - atau letakkan di sini", + "dvdNotAnIfoFileX": "{0} bukan file IFO DVD", + "dvdMenuIfoNoTitleSetsX": "Tidak ada title set (VTS_xx_0.IFO) yang ditemukan di samping {0}", + "dvdEncryptedXOfY": "{0} dari {1} paket subtitel masih terenkripsi CSS - file VOB ini disalin tanpa dekripsi, sehingga sebagian gambar subtitel akan rusak.\n\nDekripsi DVD dengan alat ripping DVD terlebih dahulu untuk hasil yang bersih.\n\nTetap lanjutkan?", "splitTextAt": "Pisahkan teks pada", "blankLines": "Baris kosong", "oneLineIsOneSubtitle": "Satu baris adalah satu subtitel", "twoLinesAreOneSubtitle": "Dua baris adalah satu subtitel", "importFilesDotDotDot": "Impor file...", "multipleFiles": "Impor dari beberapa file teks (satu file adalah satu subtitel)", - "importOptions": "Opsi impor", - "autoSplitText": "Pisah teks otomatis", - "lineMode": "Mode baris", "maxLineLength": "Panjang baris maks", - "maxLinesPerSubtitle": "Maks baris per subtitel", - "minGapBetweenSubtitles": "Jeda min antar subtitel", "mergeShortLines": "Gabungkan baris pendek", - "removeLinesWithoutLetters": "Hapus baris tanpa huruf", - "splitAtEndCharsSetting": "Pisah pada karakter akhir", - "takeTimeFromCurrentFile": "Ambil waktu dari file saat ini", "fixed": "Tetap", "numberOfSubtitlesX": "Jumlah subtitel: {0}", "numberOfSubtitlesXForcedY": "Jumlah subtitel: {0} ({1} dipaksa)", @@ -1330,14 +1377,18 @@ "forcedAlignerProgress": "Menjajarkan... jendela {0} dari {1}, {2} dari {3} baris", "forcedAlignerSetupTitle": "Jajarkan kode waktu via forced aligner", "forcedAlignerSetupIntro": "Forced aligner mencocokkan teks subtitel yang sudah Anda miliki dengan audio, tanpa mentranskripsinya terlebih dahulu. Video panjang dijajarkan per potongan, jadi panjang berapa pun dapat diproses.", + "forcedAlignerEndsFromSpeech": "Atur waktu akhir dari ucapan terisolasi (lambat)", + "forcedAlignerEndsFromSpeechHint": "Forced aligner menemukan di mana baris dimulai, bukan di mana ia berakhir, sehingga waktu akhir biasanya berasal dari waktu baca. Jika opsi ini aktif, musik dan efek suara dihapus dari audio terlebih dahulu dan setiap baris berakhir saat ucapannya hening. Memakan waktu kira-kira sepanjang video itu sendiri dengan GPU - dan berkali-kali lebih lama tanpa GPU.", + "forcedAlignerIsolatingSpeech": "Mengisolasi ucapan... {0}", + "forcedAlignerIsolatingSpeechFailed": "Tidak dapat mengisolasi ucapan - waktu akhir diatur dari waktu baca sebagai gantinya.", "forcedAlignerModel": "Model aligner", - "forcedAlignerDownloadEngine": "Unduh / perbarui mesin..." + "forcedAlignerDownloadEngine": "Unduh / perbarui mesin...", + "forcedAlignerEstimatedXOfY": "{0} dari {1} baris tidak dapat diselaraskan dan ditempatkan berdasarkan waktu baca - kode waktunya hanya perkiraan. Naskah kemungkinan lebih panjang dari yang diucapkan dalam video." }, "export": { "exportImagesProfiles": "Profil ekspor gambar", "leftRightMargin": "Margin kiri/kanan", "topBottomMargin": "Margin atas/bawah", - "titleExportBluRaySup": "Ekspor Blu-ray (sup)", "lineSpacingPercent": "Spasi baris %", "paddingLeftRight": "Padding kiri/kanan", "paddingTopBottom": "Padding atas/bawah", @@ -1378,10 +1429,21 @@ "titleExportDCinemaInteropPng": "D-Cinema interop/png", "titleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", "imageBasedSubtitleSaved": "Subtitel berbasis gambar disimpan", - "titleExportBdnXml": "Ekspor BDN/xml", "titleExportWebVttThumbnails": "Ekspor WebVTT (gambar mini)", "fullFrameImage": "Gambar bingkai penuh", "fullFrameImageHint": "Buat setiap gambar seukuran bingkai video, dengan subtitel pada posisinya", + "stereo3D": "3D", + "stereo3DHint": "Untuk video 3D: gambar subtitel sekali di setiap separuh bingkai untuk masing-masing mata", + "halfSideBySide": "Half side-by-side", + "halfTopBottom": "Half top/bottom", + "depth3D": "Kedalaman", + "depth3DHint": "Seberapa jauh subtitel menonjol keluar layar - positif mendekatkannya, negatif menjauhkannya", + "plane3D": "3D-Plane", + "plane3DHint": "Beri setiap subtitel kedalaman yang disimpan oleh Blu-ray 3D untuknya, dari file 3D-Plane (.ofs) yang dibuat oleh BD3D2MK3D atau OFSExtractor. Kedalaman digunakan bila 3D-Plane tidak memilikinya", + "openPlane3DTitle": "Buka file 3D-Plane", + "unableToLoadPlane3DX": "Tidak dapat memuat 3D-Plane: {0}", + "plane3DXDepthYToZ": "{0} (kedalaman {1} hingga {2})", + "plane3DXNoDepth": "{0} (tanpa nilai kedalaman)", "textEffect": "Efek teks", "textEffectSettingsTitle": "Pengaturan efek teks", "textEffectPreset": "Prasetel", @@ -1413,13 +1475,10 @@ "statistics": { "title": "Statistik", "titleWithFileName": "Statistik - {0}", - "generalStatistics": "Statistik umum", - "mostUsed": "Paling sering digunakan...", "mostUsedLines": "Baris paling sering digunakan", "mostUsedWords": "Kata paling sering digunakan", "nothingFound": "Tidak ada yang ditemukan", "numberOfLinesX": "Jumlah baris subtitel: {0:#,##0}", - "numberOfFilesX": "Jumlah file subtitel: {0:#,##0}", "lengthInFormatXinCharactersY": "Jumlah karakter sebagai {0}: {1:#,###,##0}", "numberOfCharactersInTextOnly": "Jumlah karakter hanya dalam teks: {0:#,###,##0}", "totalDuration": "Durasi total semua subtitel: {0:#,##0}", @@ -1460,7 +1519,6 @@ "gapMaximum": "Jeda - maksimum: {0:#,##0} ms", "gapAverage": "Jeda - rata-rata: {0:#,##0.##} ms", "gapExceedingMinimum": "Jeda - di bawah minimum ({0:#,##0} ms): {1} ({2:0.00}%)", - "export": "Ekspor...", "subtitles": "Subtitel", "words": "Kata", "totalDurationShort": "Durasi total", @@ -1490,7 +1548,22 @@ "restoreAutoBackupFile": "Pulihkan file cadangan otomatis", "restoreXFromY": "Apakah Anda ingin memulihkan \"{0}\" dari {1}?", "deleteAllSubtitleBackups": "Apakah Anda ingin menghapus semua file cadangan subtitel?", - "deleteAll": "Hapus semua" + "deleteAll": "Hapus semua", + "subtitles": "Subtitel", + "settingsBackupInfo": "Settings.json dicadangkan saat Subtitle Edit dimulai, paling banyak sekali setiap {0} hari dan hanya jika pengaturan telah berubah. {1} cadangan terbaru disimpan.", + "settingsBackupInfoEveryStart": "Settings.json dicadangkan setiap kali Subtitle Edit dimulai, jika pengaturan telah berubah. {0} cadangan terbaru disimpan.", + "settingsBackupOff": "Pencadangan pengaturan otomatis dinonaktifkan (Opsi → Pengaturan → File).", + "lastSettingsBackupX": "Cadangan terakhir: {0}", + "noSettingsBackupsYet": "Belum ada cadangan pengaturan", + "openSettingsBackupFolder": "Buka folder cadangan pengaturan", + "backUpSettingsNow": "Cadangkan sekarang", + "settingsBackedUp": "Pengaturan saat ini telah dicadangkan.", + "restoreSettings": "Pulihkan pengaturan", + "restoreSettingsFromX": "Apakah Anda ingin mengganti pengaturan saat ini dengan cadangan dari {0}?\n\nPengaturan Anda saat ini akan dicadangkan terlebih dahulu. Beberapa perubahan baru berlaku setelah Subtitle Edit dimulai ulang.", + "settingsRestored": "Pengaturan telah dipulihkan. Silakan mulai ulang Subtitle Edit agar semua perubahan berlaku.", + "settingsRestoreFailed": "Tidak dapat memulihkan pengaturan: {0}", + "settingsBackupNotValid": "cadangan bukan file pengaturan yang valid, sehingga pengaturan Anda saat ini dipertahankan", + "deleteAllSettingsBackups": "Apakah Anda ingin menghapus semua file cadangan pengaturan?" }, "propertiesDCinema": { "title": "Properti D-Cinema SMPTE", @@ -1504,22 +1577,16 @@ "editRate": "Laju edit", "timeCodeRate": "Laju kode waktu", "startTime": "Waktu mulai", - "font": "Fon", "fontId": "ID fon", "fontUri": "URI fon", - "generate": "Buat", - "fontColor": "Warna fon", "chooseColor": "Pilih warna", "fontEffect": "Efek fon", "effectColor": "Warna efek", - "fontSize": "Ukuran fon", "topBottomMargin": "Margin atas/bawah", "fadeUpTime": "Waktu pudar masuk", "fadeDownTime": "Waktu pudar keluar", - "frames": "Bingkai", "zPosition": "Posisi Z", - "zPositionHelp": "Angka positif menjauhkan teks, angka negatif mendekatkan teks; jika posisi Z nol maka 2D", - "export": "Ekspor..." + "zPositionHelp": "Angka positif menjauhkan teks, angka negatif mendekatkan teks; jika posisi Z nol maka 2D" }, "webVtt": { "setStylesForSelectedLinesTitle": "Atur gaya WebVTT untuk baris terpilih", @@ -1552,20 +1619,66 @@ "compareOnlyInOneFile": "Hanya di satu file", "compareTextOrTimeDifference": "Perbedaan teks/waktu", "compareNumberDifference": "Perbedaan nomor", - "ignoreLineBreaks": "Abaikan pemisah baris", "ignoreWhitespace": "Abaikan spasi kosong", "ignoreWhitespaceHint": "Baris yang hanya berbeda pada spasi, tab, atau pemisah baris tidak dihitung berbeda", "ignoreFormatting": "Abaikan pemformatan", - "onlyLookForDifferencesInText": "Hanya cari perbedaan dalam teks", - "cannotCompareWithImageBasedSubtitles": "Tidak dapat membandingkan dengan subtitel berbasis gambar", - "statisticsTitle": "Statistik", "ignoreFormattingHint": "Baris yang hanya berbeda pada tag pemformatan, seperti atau {\\an8}, tidak dihitung berbeda", "showOnlyDifferencesInText": "Hanya perbedaan dalam teks", + "ignoreNumbering": "Abaikan penomoran", + "ignoreNumberingHint": "Baris yang hanya berbeda nomornya tidak dihitung sebagai berbeda", + "ignoreTimeDifferenceMs": "Toleransi waktu (ms)", + "ignoreTimeDifferenceMsHint": "Waktu mulai dan akhir yang berbeda sebanyak milidetik ini atau kurang tidak dihitung sebagai berbeda", + "compareDifferences": "Perbedaan", + "compareTextDifferences": "Perbedaan teks", + "compareCurrent": "Saat ini", + "compareReference": "Referensi", + "compareEditable": "Dapat diedit", + "compareEditableHint": "Perubahan yang dibuat di sini dikembalikan ke subtitel saat Anda mengklik Terapkan", + "compareReadOnly": "Hanya-baca", + "compareTakeFromReference": "Ambil teks dan waktu dari referensi", + "compareInsertFromReference": "Sisipkan baris ini ke subtitel saat ini", + "compareDeleteFromCurrent": "Hapus baris ini dari subtitel saat ini", + "compareTakeText": "Ambil teks", + "compareTakeTiming": "Ambil waktu", + "compareEditLine": "Edit baris", + "compareEditHint": "Ctrl+Enter untuk menyimpan, Esc untuk membatalkan", + "compareEdited": "Diedit", + "compareOnePendingChange": "1 perubahan tertunda", + "compareXPendingChanges": "{0} perubahan tertunda", + "compareDiscardXChanges": "Buang {0} perubahan yang dibuat di Bandingkan?", + "compareXChangesApplied": "Bandingkan: {0} perubahan diterapkan", + "compareChangeTextX": "#{0} teks dari referensi", + "compareChangeTimingX": "#{0} waktu dari referensi", + "compareChangeTextAndTimingX": "#{0} teks dan waktu dari referensi", + "compareChangeEditedX": "#{0} diedit", + "compareChangeInsertedX": "#{0} disisipkan", + "compareChangeDeletedX": "#{0} dihapus", + "compareSyncPoint": "Titik sinkron", + "compareSyncPointHint": "Titik sinkron - kedua baris ini selalu ditampilkan sebagai pasangan, dan baris di atas dan di bawahnya diselaraskan secara terpisah", + "compareSyncPickCurrent": "Titik sinkron: gunakan baris saat ini", + "compareSyncPickReference": "Titik sinkron: gunakan baris referensi ini", + "compareSyncRemove": "Hapus titik sinkron", + "compareClearXSyncPoints": "Bersihkan titik sinkron ({0})", + "compareSyncCurrentPickedX": "Baris saat ini #{0} dipilih sebagai titik sinkron - pilih baris referensi yang cocok lalu klik Sinkron", + "compareSyncReferencePickedX": "Referensi #{0} dipilih sebagai titik sinkron - pilih baris saat ini yang cocok lalu klik Sinkron", + "compareSyncWithCurrentX": "Sinkronkan dengan baris saat ini #{0}", + "compareSyncWithReferenceX": "Sinkronkan dengan referensi #{0}", + "compareSyncApply": "Sinkron", + "compareSyncPointSetXY": "Titik sinkron diatur: baris saat ini #{0} dan referensi #{1} kini ditampilkan sebagai pasangan", + "compareSyncAlreadyPairedXY": "Baris saat ini #{0} dan referensi #{1} sudah ditampilkan sebagai pasangan dengan awal yang sama - tidak ada yang perlu disinkronkan", + "compareSyncPointShiftedXYZW": "Titik sinkron diatur: baris saat ini #{0}-#{1} digeser {2} agar dimulai bersama referensi #{3}", + "compareChangeSyncShiftXYZ": "#{0}-#{1} digeser {2} (titik sinkron)", + "compareTimingDeltaHint": "Seberapa lebih lambat (+) atau lebih awal (−) referensi dimulai dan berakhir dibandingkan baris saat ini", "loadXFromFile": "Muat \"{0}\" dari file", + "compareLoadSavedFile": "Muat file yang disimpan", "saveCompareHtmlTitle": "Simpan file HTML perbandingan", "pickMatroskaTrackX": "Pilih trek Matroska - {0}", "pickTransportStreamTrackX": "Pilih trek transport stream - {0}", + "chapters": "Bab", + "dvdVobFilesMissingX": "File VOB hilang ({0}% ditemukan)", "pickMp4TrackX": "Pilih trek MP4 - {0}", + "pickMxfTrackX": "Pilih trek MXF - {0}", + "pickMpegTrackX": "Pilih trek MPEG - {0}", "rosettaProperties": "Properti Timed Text Rosetta IMSC", "rosettaFontSize": "Ukuran fon (tinggi baris)", "propertyTimeBase": "Basis waktu", @@ -1575,7 +1688,6 @@ "propertyDefaultRegion": "Region baku", "propertyStyleAttributeName": "Nama atribut gaya", "propertyTimeCodeFormat": "Format kode waktu", - "propertyFileExtension": "Ekstensi file", "propertyTopOrigin": "Origin atas", "propertyTopExtent": "Extent atas", "propertyBottomOrigin": "Origin bawah", @@ -1625,7 +1737,6 @@ "selectionIntersect": "Iriskan dengan seleksi" }, "multipleReplace": { - "title": "Penggantian ganda", "editRule": "Edit aturan", "newRule": "Aturan baru", "editCategory": "Edit kategori", @@ -1642,24 +1753,23 @@ "findWhat": "Cari apa", "descriptionOptional": "Deskripsi (opsional)", "invalidRegularExpressionX": "Ekspresi reguler tidak valid: {0}", - "regularExpressionTooSlowX": "Ekspresi reguler menyerah setelah {0} detik - aturan dilewati, coba pola yang lebih sederhana" + "regularExpressionTooSlowX": "Ekspresi reguler menyerah setelah {0} detik - aturan dilewati, coba pola yang lebih sederhana", + "moveToCategory": "Pindahkan ke kategori" }, "find": { "searchTextWatermark": "Cari teks...", "wholeWord": "Kata utuh", - "caseSensitive": "Peka huruf besar/kecil", - "caseInsensitive": "Tidak peka huruf besar/kecil", "findPrevious": "Cari se_belumnya", "findNext": "_Cari berikutnya", "replaceAndFindNext": "_Ganti & cari berikutnya", "replaceAll": "Ganti semu_a", - "replaceTitle": "Ganti", - "replaceWith": "Ganti dengan", "replaceTextWatermark": "Ganti dengan...", "replaceIn": "Ganti/cari di", "replaceInTextAndOriginal": "Teks dan teks asli", "replaceInTextOnly": "Teks saja", - "replaceInOriginalOnly": "Teks asli saja" + "replaceInOriginalOnly": "Teks asli saja", + "replacedOneOccurrence": "Satu kemunculan diganti", + "replacedXOccurrences": "{0} kemunculan diganti" }, "regularExpressionContextMenu": { "wordBoundary": "Batas kata (\\b)", @@ -1687,6 +1797,7 @@ "xLinesYSubtitles": "{0} baris, {1} subtitel", "xLinesYSubtitlesZErrors": "{0} baris, {1} subtitel, {2} kesalahan", "couldNotParseAsX": "Tidak dapat diurai sebagai {0}", + "readAsXUseAsY": "Sumber tidak dapat dibaca sebagai {1}, tetapi dapat dibaca sebagai {0}.\nGunakan baris-barisnya dan tetap simpan sebagai {1}?", "selectedXCharactersYLines": "Terpilih: {0} karakter dalam {1} baris", "replacedXOccurrences": "{0} kemunculan diganti", "invalidRegularExpression": "Ekspresi reguler tidak valid", @@ -1701,7 +1812,6 @@ "aiReview": { "title": "Tinjauan AI", "review": "Tinjau", - "stop": "Berhenti", "editPrompt": "Edit prompt...", "editPromptTitle": "Edit prompt tinjauan", "promptInfo": "Instruksi yang dikirim ke model - {language} diganti dengan bahasa subtitel.", @@ -1712,7 +1822,6 @@ "reviewingLineXOfY": "Meninjau baris {0} dari {1}...", "reviewDone": "Tinjauan selesai - {0} saran dalam {1} baris", "noIssuesFound": "Tidak ada masalah ditemukan", - "categoryAll": "Semua", "categorySpelling": "Ejaan", "categoryGrammar": "Tata bahasa", "categoryPunctuation": "Tanda baca", @@ -1724,8 +1833,23 @@ "largeChangeWarning": "Perubahan besar - tampak seperti penulisan ulang, tinjau dengan cermat", "mismatchWarning": "Tidak menyerupai aslinya - mungkin milik baris lain", "engineError": "Mesin AI tidak dapat dijangkau: {0}", - "setupHint": "Silakan pilih mesin dan model di Alat -> Tinjauan AI terlebih dahulu.", - "playCurrentLineHint": "Putar baris terpilih di pemutar video dan jeda di akhirnya (juga klik ganda sebuah baris)" + "playCurrentLineHint": "Putar baris terpilih di pemutar video dan jeda di akhirnya (juga klik ganda sebuah baris)", + "editAfterHint": "Klik teks baris terpilih untuk mengedit perbaikan sebelum menerapkannya (Enter menyimpan, Escape membatalkan)", + "template": "Templat", + "templatePlaceholder": "Pilih templat untuk mengganti prompt", + "templateStandard": "Proofreading standar", + "templateSpeechToText": "Pembersihan hasil ucapan ke teks", + "templateMachineTranslation": "Perbaikan terjemahan mesin", + "templateSdh": "SDH / tunarungu", + "referenceContext": "Konteks referensi", + "referenceContextInfo": "Opsional. Nama, karakter, glosarium, sinopsis, atau catatan gaya - model menganggap ini sebagai acuan utama untuk nama dan istilah. Dikirim bersama setiap batch.", + "referenceContextPlaceholder": "Nama: Kaito, Bibi Mei, Dr. Hollis\nIstilah: Shinkansen, inti warp\nSinopsis: Kaito pergi ke Tokyo untuk mencari ayahnya yang hilang.", + "generateContext": "Buat dengan AI", + "generateContextHint": "Biarkan mesin AI terpilih membaca subtitel dan menyusun draf nama, istilah, dan sinopsis - periksa hasilnya sebelum digunakan", + "generatingContextPartXOfY": "Membaca bagian {0} dari {1}...", + "generatingContextSynopsis": "Menulis sinopsis...", + "replaceContextQuestion": "Ganti konteks referensi saat ini?", + "noContextGenerated": "Mesin AI tidak mengembalikan informasi referensi yang dapat digunakan." }, "aiAssistant": { "title": "Asisten AI", @@ -1743,22 +1867,14 @@ "showReasoning": "Tampilkan penalaran model" }, "fixCommonErrors": { - "title": "Perbaiki kesalahan umum", - "step1": "Langkah 1/2 - Pilih kesalahan yang akan diperbaiki", - "whatToFix": "Apa yang diperbaiki", - "example": "Contoh", - "selectAll": "Pilih semua", - "inverseSelection": "Balikkan seleksi", "back": "< &Kembali", "next": "&Berikutnya >", - "step2": "Langkah 2/2 - Verifikasi perbaikan", "fixes": "Perbaikan", "ruleDetailsDotDotDot": "Detail aturan...", "showOnlyThisRule": "Tampilkan hanya perbaikan dari aturan ini", "appliedRulesForLineX": "Aturan yang diterapkan untuk baris {0}", "ruleX": "Aturan: {0}", "log": "Log", - "function": "Fungsi", "removedEmptyLine": "Hapus baris kosong", "removedEmptyLineAtTop": "Hapus baris kosong di atas", "removedEmptyLineAtBottom": "Hapus baris kosong di bawah", @@ -1779,13 +1895,13 @@ "removeLineBreaksPixelWidth": "Satukan subtitel yang muat dalam satu baris (lebar piksel)", "fixUppercaseIInsideLowercaseWords": "Perbaiki huruf 'i' besar di dalam kata huruf kecil (kesalahan OCR)", "fixDoubleApostrophes": "Perbaiki karakter apostrof ganda ('') menjadi tanda kutip tunggal (\")", + "fixMisreadQuotes": "Perbaiki apostrof yang salah terbaca sebagai tanda kutip ganda (OCR, Inggris)", "addPeriods": "Tambahkan titik setelah baris ketika baris berikutnya diawali huruf besar", "startWithUppercaseLetterAfterParagraph": "Awali dengan huruf besar setelah paragraf", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Awali dengan huruf besar setelah titik di dalam paragraf", "startWithUppercaseLetterAfterColon": "Awali dengan huruf besar setelah titik dua/titik koma", "fixLowercaseIToUppercaseI": "Perbaiki 'i' kecil tunggal menjadi 'I' (Inggris)", "fixCommonOcrErrors": "Perbaiki kesalahan OCR umum (menggunakan daftar penggantian OCR)", - "commonOcrErrorsFixed": "Kesalahan OCR umum diperbaiki (file OcrReplaceList digunakan): {0}", "removeSpaceBetweenNumber": "Hapus spasi di antara angka", "breakDialogsOnOneLine": "Pisahkan dialog dalam satu baris", "removeDialogFirstInNonDialogs": "Hapus tanda hubung awal di baris pertama untuk non-dialog", @@ -1802,18 +1918,17 @@ "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Foo
bar! -> Foo bar!", "fixDoubleApostrophesExample": "''Punya kutip tunggal ganda'' -> \"Punya kutip ganda tunggal\"", + "fixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "addPeriodsExample": "Halo dunia -> Halo dunia.", "startWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: Foobar!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Halo! apa kabar? -> Halo! Apa kabar?", "startWithUppercaseLetterAfterColonExample": "Pembicara: halo dunia! -> Pembicara: Halo dunia!", "removeHyphensSingleLineExample": "- Foobar. -> Foobar.", "fix3PlusLinesExample": "Foo
bar
baz! -> Foo bar baz!", - "xMissingQuotesAdded": "Tanda kutip yang hilang ditambahkan: {0}", "fix3PlusLine": "Perbaiki subtitel dengan lebih dari dua baris", "fix3PlusLines": "Perbaiki subtitel dengan lebih dari dua baris", "analysing": "Menganalisis...", "nothingToFix": "Tidak ada yang perlu diperbaiki :)", - "fixesFoundX": "Perbaikan ditemukan: {0}", "xFixesApplied": "Perbaikan diterapkan: {0}", "xFixesYSelected": "{0} perbaikan - {1} terpilih", "nothingFixableBut": "Tidak ada yang dapat diperbaiki secara otomatis. Subtitel mengandung kesalahan - lihat log untuk detail", @@ -1822,7 +1937,6 @@ "fixFirstLetterToUppercaseAfterParagraph": "Perbaiki huruf pertama menjadi huruf besar setelah paragraf", "mergeShortLine": "Gabungkan baris pendek (satu kalimat)", "mergeShortLineAll": "Gabungkan baris pendek (semua kecuali dialog)", - "unbreakShortLinePixelWidth": "Satukan baris pendek (lebar piksel)", "breakLongLine": "Pisahkan baris panjang", "fixLongDisplayTime": "Perbaiki waktu tampil yang panjang", "fixInvalidItalicTag": "Perbaiki tag miring tidak valid", @@ -1845,7 +1959,6 @@ "fixUppercaseIInsideLowercaseWord": "Perbaiki huruf 'i' besar di dalam kata huruf kecil", "fixMissingPeriodAtEndOfLine": "Tambahkan titik yang hilang di akhir baris", "refreshFixes": "Segarkan perbaikan yang tersedia", - "applyFixes": "Terapkan perbaikan terpilih & tutup", "autoBreak": "&Pisah otomatis", "unbreak": "Sat&ukan", "fixDoubleDash": "Perbaiki '--' -> '...'", @@ -1864,8 +1977,6 @@ "fixSpaceBetweenNumbersExample": "1 100 -> 1100", "fixDialogsOneLineExample": "Hai John! - Hai Ida! -> Hai John!
- Hai Ida!", "removeDialogFirstInNonDialogsExample": "- Apa kabar? -> Apa kabar?", - "selectDefault": "Pilih default", - "setDefault": "Jadikan perbaikan saat ini sebagai default", "fixContinuationStyleX": "Perbaiki gaya lanjutan: {0}", "fixUnnecessaryLeadingDots": "Hapus titik awal yang tidak perlu", "fixCommonErrorsProfiles": "Profil perbaikan kesalahan umum", @@ -1873,7 +1984,6 @@ "searchRulesDotDotDot": "Cari aturan...", "goToApplyFixes": "Lanjut ke penerapan perbaikan", "backToFixList": "Kembali ke daftar perbaikan", - "applyFixesAndClose": "Terapkan perbaikan & tutup", "fixCommonOcrErrorsStep2": "Perbaiki kesalahan umum, langkah 2 (terapkan perbaikan)", "fixCommonOcrErrorsStep2FixesFoundX": "Perbaiki kesalahan umum, langkah 2 - Perbaikan ditemukan: {0}", "action": "Aksi", @@ -1886,18 +1996,11 @@ "adjustDurations": { "title": "Sesuaikan durasi", "adjustVia": "Sesuaikan via", - "seconds": "Detik", - "percent": "Persen", "recalculate": "Hitung ulang", "addSeconds": "Tambahkan detik", - "setAsPercent": "Atur sebagai persen dari durasi", "note": "Catatan: Waktu tampil tidak akan tumpang tindih dengan waktu mulai teks berikutnya", "fixed": "Tetap", - "milliseconds": "Milidetik", "extendOnly": "Hanya perpanjang", - "enforceDurationLimits": "Terapkan durasi minimum dan maksimum", - "checkShotChanges": "Jangan perpanjang melewati perubahan shot", - "batchCheckShotChanges": "Hormati perubahan shot (jika tersedia)", "recalculateRequiresOcrNote": "Hitung ulang tidak tersedia — satu atau lebih subtitel tidak memiliki teks OCR. Jalankan OCR terlebih dahulu." }, "applyDurationLimits": { @@ -1905,6 +2008,8 @@ "fixMinDurationMs": "Perbaiki durasi minimum (ms)", "doNotGoPastShotChange": "Jangan lewati perubahan shot", "fixMaxDurationMs": "Perbaiki durasi maksimum (ms)", + "fixMinDurationFrames": "Perbaiki durasi minimum (bingkai)", + "fixMaxDurationFrames": "Perbaiki durasi maksimum (bingkai)", "minimumDurationMilliseconds": "Durasi minimum (milidetik):", "maximumDurationMilliseconds": "Durasi maksimum (milidetik):", "maxDurationShouldBeHigherThanMinDuration": "Durasi maksimum harus lebih tinggi daripada durasi minimum", @@ -1924,12 +2029,8 @@ }, "beautifyTimeCodes": { "title": "Percantik kode waktu", - "beautifySettings": "Pengaturan Percantik", "snapToFrames": "Jajarkan ke Bingkai", - "frameGap": "Jeda Bingkai", "minDuration": "Durasi Min (ms)", - "shotChangeThreshold": "Ambang Perubahan Shot (ms)", - "shotChangeOffset": "Offset Perubahan Shot (bingkai)", "original": "Asli", "beautified": "Dipercantik", "subtitlesCount": "Subtitel", @@ -1958,13 +2059,80 @@ "timeCodesExtractFailed": "Tidak dapat membaca kode waktu dari video", "timeCodesHint": "Jajarkan cue ke waktu bingkai sebenarnya dari video alih-alih mengasumsikan laju bingkai konstan. Memerlukan pembacaan seluruh video sekali; hasilnya disimpan di singgahan." }, + "improveTimeCodes": { + "title": "Perbaiki kode waktu (forced alignment)", + "aligner": "Aligner", + "alignerHint": "Model yang mendengarkan setiap baris dalam audio. Pilihan terbaik untuk bahasa subtitel dicantumkan lebih dulu.", + "maxShift": "Pergeseran maks. (detik)", + "maxShiftHint": "Seberapa jauh subtitel mungkin tidak sinkron. Baris yang awalnya akan bergeser lebih jauh dibiarkan apa adanya dan ditandai. Berapa pun nilainya, satu baris yang ingin bergeser lebih dari setengah detik lebih jauh daripada baris di sekitarnya tidak digeser begitu saja: baris itu mengikuti tetangganya jika semuanya bergeser, dan jika tidak, ditawarkan tanpa centang agar Anda periksa.", + "adjustStartTimes": "Sesuaikan waktu mulai", + "adjustEndTimes": "Sesuaikan waktu akhir", + "isolateSpeech": "Isolasi ucapan terlebih dahulu (lambat)", + "isolateSpeechHint": "Menghapus musik dan efek suara sebelum penyelarasan, sehingga aligner hanya mendengar dialog. Membantu pada baris yang diucapkan di atas musik keras atau adegan aksi, tetapi memakan waktu kira-kira sepanjang audio itu sendiri dengan GPU - dan berkali-kali lebih lama tanpa GPU.", + "isolatingSpeech": "Mengisolasi ucapan... (ini memakan waktu)", + "isolateSpeechFailed": "Tidak dapat mengisolasi ucapan - diselaraskan dengan audio asli sebagai gantinya.", + "checkWithSpeechToText": "Periksa dengan ucapan ke teks", + "checkWithSpeechToTextHint": "Juga mentranskripsikan audio, dan memeriksa setiap pergeseran terhadap posisi kata-kata benar-benar terdengar. Pergeseran besar yang dikonfirmasi ucapan dicentang untuk Anda, dan pergeseran yang menjauh dari posisi baris terdengar dibiarkan tanpa centang agar Anda periksa. Juga menampilkan seberapa banyak dari setiap baris yang terdengar - porsi rendah berarti teks berbeda dari yang diucapkan. Subtitel yang tidak sinkron lebih jauh dari pergeseran maks. - offset konstan, pergeseran bertahap akibat laju bingkai yang tidak cocok, atau lompatan di tempat adegan dipotong - disinkronkan terlebih dahulu berdasarkan kata-kata yang terdengar. Menggunakan Crisp ASR Parakeet, yang memakan beberapa menit untuk film panjang dengan GPU.", + "checkWithSpeechToTextNotAvailableX": "Pemeriksaan ucapan ke teks tidak tersedia untuk {0}", + "transcribingToCheck": "Mentranskripsikan untuk memeriksa penyelarasan...", + "speechToTextFailed": "Ucapan ke teks gagal - kode waktu tidak diperiksa terhadapnya.", + "speechToTextX": "Ucapan ke teks: {0}", + "speechToTextConfirmedXDisputedY": "Ucapan: {0} dikonfirmasi, {1} dipersoalkan", + "hardlyHeardX": "Ucapan ke teks hanya mendengar {0}% kata dalam subtitel. Apakah subtitel dalam bahasa yang diucapkan? Aligner tidak dapat menempatkan terjemahan.", + "heard": "Terdengar", + "heardHint": "Seberapa banyak dari baris yang terdengar oleh ucapan ke teks. Porsi rendah berarti teks berbeda dari yang diucapkan - di situlah aligner paling mungkin salah.", + "statusConfirmedBySpeech": "Dikonfirmasi oleh ucapan", + "statusDisputedBySpeech": "Terdengar di posisi semula", + "statusMovedWithSync": "Digeser bersama sinkronisasi", + "syncedFirstXY": "Disinkronkan terlebih dahulu: {0} d di awal, {1} d di akhir", + "showSpeechOnly": "Tampilkan ucapan saja", + "showSpeechOnlyHint": "Gambar bentuk gelombang hasil penyelarasan dari audio dengan musik dan efek suara dihapus; bentuk gelombang asli tetap apa adanya, sebagai pembanding. Tersedia setelah ucapan diisolasi - di sini, atau dengan \"Tampilkan ucapan saja\" pada bentuk gelombang di jendela utama.", + "align": "Selaraskan", + "original": "Asli", + "aligned": "Diselaraskan", + "intro": "Pilih aligner dan tekan \"Selaraskan\" untuk mendengarkan setiap baris dalam audio dan merapatkan kode waktunya.", + "extractingAudio": "Mengekstrak audio...", + "aligningBatchXOfY": "Menyelaraskan... batch {0} dari {1}", + "extractAudioFailed": "Tidak dapat mengekstrak audio dengan ffmpeg.", + "modelWillBeDownloaded": "{0} akan diunduh", + "summaryXRetimedYKeptZSkipped": "Diatur ulang: {0} · Dipertahankan: {1} · Tanpa ucapan: {2}", + "meanShiftX": "Pergeseran rata-rata: {0} ms", + "toCheckX": "Perlu diperiksa: {0}", + "largeMovesToCheckX": "{0} baris akan bergeser jauh dengan sendirinya dan dibiarkan tanpa centang - dengarkan baris tersebut (F5 memutar baris hasil penyelarasan, Shift+F5 yang asli) dan centang yang benar.", + "linesToCheckX": "{0} baris dibiarkan tanpa centang untuk diperiksa - dengarkan baris tersebut (F5 memutar baris hasil penyelarasan, Shift+F5 yang asli) dan centang yang benar.", + "changeXOfY": "Perubahan {0} dari {1}", + "previousChange": "Perubahan sebelumnya", + "nextChange": "Perubahan berikutnya", + "startShift": "Mulai", + "endShift": "Akhir", + "statusRetimed": "Diatur ulang", + "statusMovedWithNeighbours": "Digeser bersama tetangganya", + "statusLargeMoveUnconfirmed": "Pergeseran besar - dengarkan, centang untuk menerapkan", + "statusUnchanged": "Sudah di tempatnya", + "statusNoSpeech": "Tanpa ucapan", + "statusShiftTooLarge": "Dipertahankan - pergeseran terlalu besar", + "statusFailed": "Dipertahankan - aligner gagal", + "statusAdjustedByHand": "Disesuaikan manual", + "alignedWaveformHint": "Seret baris untuk menggesernya, atau seret tepinya untuk mengubah awal atau akhirnya.", + "playLine": "Putar baris", + "undoAdjustment": "Urungkan penyesuaian", + "playPause": "Putar / jeda", + "playAligned": "Diselaraskan", + "playAlignedHint": "Putar baris terpilih dengan kode waktu hasil penyelarasan", + "apply": "Terapkan", + "applyHint": "Hapus centang baris untuk mempertahankan kode waktu aslinya. Klik ganda baris untuk memutarnya. Baris juga dapat digeser atau diubah ukurannya di bentuk gelombang hasil penyelarasan." + }, "beautifyTimeCodesProfile": { "title": "Edit profil percantik kode waktu", "loadPreset": "Muat prasetel", "presetDefault": "Default", "presetNetflix": "Netflix", "presetSdi": "SDI", - "general": "Umum", + "saveAsProfile": "Simpan sebagai profil...", + "deleteProfile": "Hapus profil", + "profileName": "Nama profil", + "overwriteProfileX": "Profil bernama \"{0}\" sudah ada. Timpa?", + "deleteProfileX": "Hapus profil \"{0}\"?", "gap": "Jeda", "gapSuffix": "bingkai (juga memperbarui kolom jeda non-nol di bawah)", "milliseconds": "ms", @@ -1993,9 +2161,12 @@ "hintChaining": "Cara menangani subtitel yang hampir bersentuhan — perpanjang bersama, atau dorong terpisah, tergantung apakah ada perubahan shot di antaranya." }, "bridgeGaps": { - "title": "Jembatani jeda", "bridgeGapsSmallerThan": "Jembatani jeda lebih kecil dari (ms)", "minGap": "Jeda minimum (ms)", + "bridgeGapsSmallerThanFrames": "Jembatani jeda lebih kecil dari (bingkai)", + "minGapFrames": "Jeda minimum (bingkai)", + "calculateBridgeGapsSmallerThanDotDotDot": "Hitung batas jembatan jeda dari laju bingkai...", + "useXMsAsBridgeGapsSmallerThan": "Jembatani jeda lebih kecil dari \"{0}\" milidetik?", "numberOfSmallGapsBridgedX": "Jumlah jeda kecil yang dijembatani: {0}", "percentFoPrevious": "Jeda untuk sebelumnya (%)", "gapChange": "Perubahan jeda" @@ -2007,8 +2178,6 @@ "sortBy": { "title": "Urutkan subtitel", "sortOrder": "Urutan", - "sortByNumber": "Nomor", - "sortByStartTime": "Waktu mulai", "sortByEndTime": "Waktu selesai" }, "batchConvert": { @@ -2031,6 +2200,7 @@ "addColor": "Tambahkan warna", "deleteLinesWithSpecificActorsOrStyles": "Hapus baris dengan aktor atau gaya (pisahkan dengan koma)", "useSourceStylesIfPossible": "Gunakan gaya sumber jika memungkinkan", + "keepSourceEmbeddedFonts": "Pertahankan fon tertanam sumber (footer)", "editStyles": "Edit gaya", "editProperties": "Edit properti", "editAttachments": "Edit lampiran", @@ -2051,7 +2221,6 @@ "assaChangeStyleFromStyle": "Ubah gaya dari", "assaChangeStyleToStyle": "menjadi", "assaChangeStyleImportStyle": "Impor gaya...", - "assaChangeStyleImportedX": "Diimpor: {0}", "assaChangeStyleTrimUnusedStyles": "Pangkas gaya yang tidak terpakai", "assaChangeStylePropertiesTitle": "Ubah properti gaya", "assaChangeStylePropertiesInfo": "Mengubah bidang yang dipilih pada setiap gaya di file, tanpa mengubah gaya itu sendiri.", @@ -2063,13 +2232,52 @@ "convertColorsToDialogReBreakLines": "Pisah ulang baris", "snapTimeCodesToFramesInfo": "Membulatkan setiap waktu mulai dan selesai ke bingkai terdekat. Laju bingkai dibaca dari file video dengan nama sama seperti file subtitel, kecuali laju bingkai tetap dipilih.", "addFolderDotDotDot": "Tambah folder...", + "addFolderRecursiveDotDotDot": "Tambah folder secara rekursif...", "selectFolderToConvert": "Pilih folder berisi file untuk dikonversi", "includeSubfolders": "Sertakan subfolder saat menambahkan folder", + "videoFilesWhenAddingFolder": "File video (mkv, mp4, ts...) saat menambahkan folder", + "videoFilesAsk": "Tanyakan", + "videoFilesInclude": "Tambahkan trek subtitelnya", + "videoFilesSkip": "Lewati", + "folderContainsXVideoFiles": "Folder berisi {0} file video (mkv, mp4, ts...).\n\nTambahkan juga trek subtitel tertanamnya, atau hanya file subtitel?", + "addVideoFiles": "Tambah file video", + "skipVideoFiles": "Hanya file subtitel", + "doNotAskAgainVideoFiles": "Jangan tanya lagi (ubah di pengaturan Konversi batch)", + "settingsSectionOutput": "Keluaran", + "settingsSectionAddingFiles": "Menambahkan file", + "settingsSectionImageBasedSubtitles": "Subtitel berbasis gambar (OCR)", + "settingsSectionOther": "Lainnya", "keepSourceFileTimestamp": "Pertahankan tanggal/waktu file sumber pada file keluaran", - "scanningFolderX": "Memindai {0}..." + "preventSleepWhileConverting": "Cegah komputer tidur saat mengonversi", + "scanningFolderX": "Memindai {0}...", + "transportStreamSettings": "Pengaturan Transport Stream", + "transportStreamSettingsDotDotDot": "Pengaturan Transport Stream...", + "transportStreamSettingsInfo": "Berlaku untuk trek subtitel yang diekstrak dari file Transport Stream (.ts/.m2ts). Posisi dan ukuran video hanya memengaruhi trek gambar DVB yang diekspor ke format berbasis gambar.", + "transportStreamOverrideXPosition": "Timpa posisi X asli", + "transportStreamOverrideYPosition": "Timpa posisi Y asli", + "transportStreamOverrideVideoSize": "Timpa ukuran video asli", + "transportStreamBottomMargin": "Margin bawah", + "transportStreamFileNameEnding": "Akhiran nama file", + "transportStreamFileNameEndingInfo": "Ditambahkan sebelum ekstensi untuk setiap trek yang diekstrak. Biarkan kosong untuk menggunakan akhiran bahasa biasa.", + "transportStreamOnlyTeletext": "Hanya teleteks", + "transportStreamGetSizeFromVideo": "Ambil ukuran dari video...", + "twoLetterLanguageCodeUppercase": "Kode bahasa dua huruf (huruf besar)", + "threeLetterLanguageCodeUppercase": "Kode bahasa tiga huruf (huruf besar)", + "formatContainsDotDotDot": "Format mengandung...", + "extensionIsDotDotDot": "Ekstensi adalah...", + "statusIsError": "Status adalah kesalahan", + "forcedTracksOnly": "Hanya trek paksa", + "xConvertedYFailedInZ": "{0:#,###,##0} dikonversi, {1:#,###,##0} gagal dalam {2}", + "xNotProcessed": "{0:#,###,##0} tidak diproses", + "removeUnicodeControlCharactersTitle": "Hapus karakter kontrol Unicode", + "removeUnicodeControlCharactersInfo": "Menghapus karakter kontrol arah Unicode yang tidak terlihat (LRM, RLM, LRE, RLE, PDF, LRO, dan RLO) dari teks, dan mengganti spasi tak terputus dengan spasi biasa.", + "preset": "Prasetel", + "savePresetDotDotDot": "Simpan prasetel...", + "deletePreset": "Hapus prasetel", + "presetName": "Nama prasetel", + "deletePresetX": "Hapus prasetel \"{0}\"?" }, "changeCasing": { - "title": "Ubah kapitalisasi", "fixNames": "Perbaiki nama", "namesX": "Nama: {0:#,##0}", "hitsX": "Kecocokan: {0:#,##0}", @@ -2080,9 +2288,7 @@ "allUppercase": "Semua huruf besar", "allLowercase": "Semua huruf kecil" }, - "changeFormatting": { - "title": "Ubah pemformatan" - }, + "changeFormatting": {}, "convertActors": { "title": "Konversi aktor", "convertActorFrom": "Konversi aktor dari", @@ -2111,18 +2317,12 @@ "outputFormatAssa": "Advanced Sub Station Alpha (.ass)", "style1": "Gaya 1", "style2": "Gaya 2", - "outlineWidth": "Lebar garis luar", - "shadowWidth": "Lebar bayangan", - "alignTop": "Atas", - "alignBottom": "Bawah", - "merge": "_Gabungkan", - "pleaseLoadTwoSubtitles": "Silakan muat dua subtitel" + "merge": "_Gabungkan" }, "splitSubtitle": { "title": "Pisah subtitel", "numberOfEqualParts": "Jumlah bagian yang sama", "saveSplitParts": "_Simpan bagian yang dipisah", - "subtitleSplitIntoXParts": "Subtitel dipisah menjadi {0} bagian.", "xPartsSavedInFormatYToFolder": "{0} bagian disimpan dalam format {1} ke folder:" }, "splitBreakLongLines": { @@ -2156,18 +2356,17 @@ "columnMerge": "Gabungkan", "columnFirst": "Baris pertama", "columnSecond": "Baris kedua", - "columnMerged": "Digabungkan", - "selectAll": "Pilih semua", - "inverseSelection": "Balikkan seleksi" + "columnMerged": "Digabungkan" }, "mergeLinesWithSameText": { - "title": "Gabungkan baris dengan teks yang sama", "maxMsBetweenLines": "Milidetik maks antar baris", - "includeIncrementingLines": "Sertakan baris dengan teks bertambah" + "maxFramesBetweenLines": "Maks. bingkai antar baris", + "includeIncrementingLines": "Sertakan baris dengan teks bertambah", + "includeRollUpCaptions": "Sertakan teks roll-up (bergulir)" }, "mergeLinesWithSameTimeCodes": { - "title": "Gabungkan baris dengan kode waktu yang sama", "maxMsDifference": "Perbedaan maks (milidetik)", + "maxFramesDifference": "Selisih maks. (bingkai)", "makeDialog": "Jadikan dialog" }, "netflixCheckAndFix": { @@ -2190,7 +2389,6 @@ "shotChanges": "Perubahan shot", "startNumberSpellOut": "Tulis lengkap angka di awal", "textforHiUseBrackets": "Teks untuk HI, gunakan tanda kurung siku", - "frameRate": "Laju bingkai", "twoFrameGrap": "Jeda dua bingkai", "whiteSpace": "Spasi kosong", "childrensProgram": "Program anak-anak", @@ -2228,7 +2426,6 @@ "italicsFixed": "Miring diperbaiki", "italicsNotAllowed": "Miring tidak diizinkan", "bridgeGapsXToYFrames": "Jeda 3-{0} bingkai => jeda 2 bingkai", - "startNumberSpellOutComment": "Ketika angka mengawali kalimat, angka harus selalu ditulis lengkap", "maximumXCharactersPerSecond": "Maksimum {0} karakter per detik" }, "imageBasedEdit": { @@ -2237,10 +2434,8 @@ "resizeImagesDotDotDot": "Ubah ukuran gambar...", "adjustBrightnessDotDotDot": "Sesuaikan kecerahan...", "adjustAlphaDotDotDot": "Sesuaikan alfa...", - "centerHorizontally": "Ratakan tengah horizontal", "cropImages": "Pangkas gambar", "importTimeCodes": "Impor kode waktu...", - "setTextForSubtitle": "Atur teks untuk subtitel", "setText": "Atur teks", "screenWidth": "Lebar layar", "screenHeight": "Tinggi layar", @@ -2271,15 +2466,31 @@ "letterboxCustom": "Tinggi bilah kustom", "barHeightPx": "Tinggi bilah (px)", "titleSafePercent": "Area aman judul (%)", + "moveCaptions": "Geser teks", + "moveCaptionsDotDotDot": "Geser teks...", + "moveCaptionsTo": "Geser teks", + "moveCaptionsIntoBars": "Ke dalam bilah letterbox (di luar gambar)", + "moveCaptionsIntoPicture": "Di dalam gambar (keluar dari bilah)", + "moveCaptionsOffset": "Jarak dari tepi (px)", + "letterboxBarHeightXPxYOfZCaptionsWillMove": "Tinggi bilah: {0} px - {1} dari {2} teks akan digeser", + "removeFadeInOut": "Hapus pudar masuk/keluar", + "removeFadeInOutXLinesRemoved": "{0} baris pudar digabungkan ke baris induknya", + "removeFadeInOutNothingFound": "Tidak ditemukan baris pudar masuk/keluar", "positionSummary": "{0}×{1} - {2} subtitel - tinggi bilah: {3} px", "xInActivePicture": "{0} di gambar", "xInTopBar": "{0} di bilah atas", "xInBottomBar": "{0} di bilah bawah", "noImageSubtitlesLoaded": "Tidak ada subtitel gambar yang dimuat", - "imageBasedFormatNotSupported": "Format subtitel berbasis gambar tidak ditemukan/didukung." + "imageBasedFormatNotSupported": "Format subtitel berbasis gambar tidak ditemukan/didukung.", + "frameRateDeclaredInFile": "Laju bingkai yang dinyatakan dalam file sup Blu-ray", + "frameRateDetectedFromTimeCodesX": "Laju bingkai terdeteksi dari kode waktu sup Blu-ray (file menyatakan {0})", + "frameRateFromVideo": "Laju bingkai video", + "frameRateCurrent": "Laju bingkai saat ini", + "frameRateSetManually": "Laju bingkai diatur manual", + "frameRateUsageInfo": "Ekspor Blu-ray sup, BDN XML, DOST, dan FCP ditulis dengan laju bingkai ini. Ini tidak mengubah waktu apa pun - gunakan \"Ubah laju bingkai\" untuk itu.", + "useVideoFrameRateXInsteadOfY": "Laju bingkai video adalah {0}, tetapi subtitel diatur ke {1}.\n\nGunakan laju bingkai video ({0})?" }, "removeTextForHearingImpaired": { - "title": "Hapus teks untuk tunarungu", "interjections": "Interjeksi", "skipIfStartWith": "Lewati jika diawali dengan", "removeTextBetween": "Hapus teks di antara", @@ -2298,7 +2509,6 @@ "removeInterjections": "Hapus interjeksi", "linesFoundX": "Baris ditemukan: {0}" }, - "pickAlignmentTitle": "Pilih perataan", "removeUnicodeCharacters": { "title": "Hapus/ganti karakter Unicode", "charactersFoundX": "Karakter Unicode ditemukan: {0}", @@ -2308,13 +2518,13 @@ "pickFontNameInstalledFonts": "Fon terpasang", "pickFontNameCollectedFonts": "Fon terkumpul", "colorPickerTitle": "Pilih warna", + "colorPickerBrightness": "Kecerahan", "filterLayersTitle": "Filter lapisan untuk ditampilkan", "filterLayersHideFromWaveform": "Sembunyikan dari bentuk gelombang/spektogram", "filterLayersHideFromSubtitleGrid": "Sembunyikan dari kisi subtitel", "filterLayersHideFromVideoPreview": "Sembunyikan dari pratinjau video", "pickSubtitleFormat": "Pilih format subtitel", "pickSubtitleFormatImageBasedNoPreview": "Format subtitel berbasis gambar.\nBitmap dibuat selama konversi - tidak ada pratinjau teks.", - "pickLayerTitle": "Atur lapisan", "recentColors": "Warna terbaru", "fixCommonErrorsSettingsTitle": "Pengaturan perbaikan kesalahan umum" }, @@ -2359,59 +2569,51 @@ "correctWordsX": "Kata benar: {0}", "namesX": "Nama: {0}", "addedToDictionaryX": "Ditambahkan ke kamus: {0}", - "doNotShowThisAgain": "Jangan tampilkan pesan ini lagi" + "doNotShowThisAgain": "Jangan tampilkan pesan ini lagi", + "editUseAlwaysList": "Edit daftar \"Selalu gunakan\"...", + "useAlwaysListTitle": "Periksa ejaan - daftar \"Selalu gunakan\"", + "useAlwaysListHeader": "Daftar \"Selalu gunakan\"", + "useAlwaysListDescription": "Kata-kata yang diganti otomatis oleh pemeriksa ejaan, disimpan oleh \"Ubah semua\" dan \"Selalu gunakan\". Pasangan hanya digunakan bila kata tersebut salah eja.", + "useAlwaysWord": "Kata salah eja", + "xPairs": "{0:#,##0} pasangan", + "xUnusedPairs": "{0:#,##0} tidak pernah digunakan", + "useAlwaysUnusedHint": "Tidak pernah digunakan - kata ini dieja dengan benar (atau merupakan nama atau kata pengguna), sehingga pemeriksa ejaan tidak pernah menandainya", + "removeUnused": "Hapus yang tidak digunakan", + "useAlwaysEmpty": "Belum ada pasangan \"Selalu gunakan\" untuk bahasa ini", + "useAlwaysEmptyHint": "Pasangan ditambahkan saat Anda mengklik \"Ubah semua\" atau \"Selalu gunakan\" di pemeriksa ejaan.", + "useAlwaysNoMatch": "Tidak ada pasangan yang cocok dengan pencarian", + "useAlwaysSameWord": "Pengganti harus berbeda dari kata tersebut.", + "useAlwaysRememberOff": "\"Ingat daftar 'Selalu gunakan'\" dinonaktifkan di Pengaturan, sehingga pemeriksa ejaan tidak menggunakan atau menyimpan daftar ini." }, "video": { "burnIn": { "title": "Buat video dengan subtitel terbakar", - "infoAssaOff": "Catatan: Gaya Advanced SubStation Alpha didukung.", - "infoAssaOn": "Catatan: Gaya Advanced SubStation Alpha akan digunakan :)", - "xGeneratedWithBurnedInSubsInX": "\"{0}\" dibuat dengan subtitel terbakar dalam {1}.", - "timeRemainingMinutes": "Waktu tersisa: {0} menit", - "timeRemainingOneMinute": "Waktu tersisa: Satu menit", - "timeRemainingSeconds": "Waktu tersisa: {0} detik", - "timeRemainingAFewSeconds": "Waktu tersisa: Beberapa detik", - "timeRemainingMinutesAndSeconds": "Waktu tersisa: {0} menit dan {1} detik", - "timeRemainingOneMinuteAndSeconds": "Waktu tersisa: Satu menit dan {0} detik", - "targetFileName": "Nama file tujuan: {0}", "targetFileSize": "Ukuran file tujuan (memerlukan pengodean 2 lintasan)", "fileSizeMb": "Ukuran file dalam MB", "matchSourceVideoSize": "Samakan dengan ukuran video sumber", - "passX": "Lintasan {0}", - "encoding": "Pengodean", "bitRate": "Laju bit", "totalBitRateX": "Total laju bit: {0}", "sampleRate": "Laju sampel", "audio": "Audio", - "stereo": "Stereo", "preset": "Prasetel", + "tune": "Tune", "pixelFormat": "Format piksel", "crf": "CRF", - "tuneFor": "Setel untuk", - "alignRight": "Rata kanan", - "getStartPosition": "Ambil posisi awal", - "getEndPosition": "Ambil posisi akhir", "useSource": "Gunakan sumber", - "useSourceFolder": "Gunakan folder sumber", - "useSourceResolution": "Gunakan resolusi sumber", - "outputSettings": "File/folder keluaran...", "fontSizeFactor": "Faktor ukuran fon", "boxType": "Jenis kotak", - "fixRightToLeft": "Perbaiki kanan-ke-kiri", - "cut": "Potong", "fromTime": "Dari waktu", "toTime": "Sampai waktu", "audioEncoding": "Pengodean audio", "outputProperties": "Properti keluaran...", "videoFileSize": "Ukuran file video", "oneBox": "Satu kotak", - "boxPerLine": "Kotak per baris", - "logoInfo": "Pilih gambar PNG dan seret untuk memosisikannya di video." + "logoInfo": "Pilih gambar PNG dan seret untuk memosisikannya di video.", + "noSubtitlesGenerateAnyway": "Tidak ada baris subtitel untuk dibakar.\n\nBuat video tanpa subtitel?", + "noSubtitlesInXItemsGenerateAnyway": "{0} item batch tidak memiliki baris subtitel untuk dibakar.\n\nBuat video tersebut tanpa subtitel?" }, "videoTransparent": { - "title": "Buat video transparan dengan subtitel", - "infoAssaOff": "Catatan: Gaya Advanced SubStation Alpha didukung.", - "infoAssaOn": "Catatan: Gaya Advanced SubStation Alpha akan digunakan :)" + "title": "Buat video transparan dengan subtitel" }, "audioToText": { "title": "Ucapan ke teks", @@ -2419,6 +2621,21 @@ "translateToEnglish": "Terjemahkan ke bahasa Inggris", "transcribing": "Mentranskripsi...", "transcribingXOfY": "Mentranskripsi {0} dari {1}...", + "linesTranscribedXOfYFailedZ": "{0} dari {1} baris telah ditranskripsikan - {2} gagal atau tidak berisi ucapan.\n\nBaris yang gagal mempertahankan teksnya saat ini. Terapkan baris yang ditranskripsikan, atau coba lagi yang gagal (Anda dapat mengubah mesin atau pengaturan terlebih dahulu)?", + "linesTranscribedXOfYCancelled": "Transkripsi dibatalkan setelah {0} dari {1} baris.\n\nTerapkan baris yang ditranskripsikan? Baris lainnya mempertahankan teksnya saat ini.", + "noLinesTranscribed": "Tidak satu pun dari {0} baris dapat ditranskripsikan.\nSilakan periksa log alat untuk detailnya.", + "applyTranscribedLines": "Terapkan yang ditranskripsikan", + "retryFailedLines": "Coba lagi yang gagal", + "isolateSpeech": "Isolasi ucapan (lambat)", + "isolateSpeechHint": "Menghapus musik dan efek suara sebelum transkripsi. Menghasilkan lebih sedikit baris yang terlewat dan pewaktuan yang lebih baik pada audio dengan musik keras, tetapi memakan waktu kira-kira sepanjang audio itu sendiri dengan GPU - dan berkali-kali lebih lama tanpa GPU.", + "isolatingSpeech": "Mengisolasi ucapan...", + "isolateSpeechFailed": "Tidak dapat mengisolasi ucapan - mentranskripsikan audio asli sebagai gantinya.", + "detectSpeakers": "Deteksi pembicara", + "detectSpeakersHint": "Memulai setiap baris dengan pembicara, seperti \"(speaker 0)\", menggunakan diarisasi Sortformer dari NVIDIA (hingga 8 pembicara). Paling baik dengan backend yang memisah baris saat pembicara berganti, seperti Parakeet dan Cohere.", + "detectSpeakersNeedsNewerCrispAsr": "\"Deteksi pembicara\" memerlukan Crisp ASR v{0} atau yang lebih baru, tetapi yang terpasang v{1}.\n\nPerbarui Crisp ASR (tombol roda gigi di samping mesin) atau nonaktifkan \"Deteksi pembicara\".", + "xNeedsNewerCrispAsr": "{0} memerlukan Crisp ASR v{1} atau yang lebih baru, tetapi yang terpasang v{2}.\n\nUnduh dan pasang pembaruan sekarang?", + "vad": "VAD", + "vadHint": "Deteksi aktivitas suara: hanya ucapan yang ditranskripsikan, dipotong saat pembicara berhenti sejenak.\nOtomatis: Silero, dan hanya untuk mesin yang memerlukannya (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: selalu aktif, untuk setiap mesin Crisp ASR. FireRedVAD paling akurat, Whisper-VAD memberi potongan paling sedikit dan paling bersih tetapi paling lambat.\nIndex-Echo selalu menggunakan Silero. --vad, --vad-model, atau --chunk-seconds di pengaturan lanjutan lebih diutamakan.", "inputLanguage": "Bahasa masukan", "advancedWhisperSettings": "Parameter ucapan-ke-teks lanjutan", "downloadingSpeechToTextEngine": "Mengunduh mesin ucapan-ke-teks", @@ -2433,8 +2650,6 @@ "addCustomModelDotDotDot": "Tambahkan model kustom...", "customModelHelp": "Anda dapat menggunakan model sendiri: pilih file model (whisper.cpp ggml '.bin') atau folder model (folder faster-whisper dengan 'model.bin' di dalamnya). Model disalin ke folder model dan ditambahkan ke daftar di atas.", "viewToolsLogFile": "Lihat file log alat", - "reDownloadX": "Unduh ulang {0}", - "downloadX": "Unduh {0}", "updateXTitle": "Perbarui {0}?", "updateXMessage": "Versi lebih baru dari {0} tersedia.{1}{1}Unduh dan pasang pembaruan sekarang?", "downloadingSpeechToTextModel": "Mengunduh model ucapan-ke-teks", @@ -2446,14 +2661,6 @@ "fixCasing": "Perbaiki kapitalisasi", "addPeriods": "Tambahkan titik", "changeUnderlineToColor": "Ubah garis bawah menjadi warna", - "cueBuilding": "Pembentukan cue (MLX Whisper)", - "cueRebuild": "Bentuk ulang cue dari stempel waktu kata", - "cueMaxChars": "Karakter maks per cue", - "cueMaxSeconds": "Detik maks per cue", - "cueMaxCps": "Karakter maks per detik", - "vocabularyPrompt": "Prompt kosakata (nama, tempat, istilah)", - "beamSize": "Ukuran beam", - "beamSizeNote": "0 memecahkan kode tercepat. 5 memberikan akurasi terbaik (seperti Faster Whisper) dengan waktu sekitar 20-30% lebih lama. Nilai di atas 5 jarang membantu.", "removeNonSpeechLines": "Hapus baris non-ucapan", "removeNonSpeechLinesHint": "Buang baris yang hanya menggambarkan suara, seperti \"[Musik]\" atau \"(deburan ombak)\"", "removeRepeatedLines": "Hapus baris berulang", @@ -2489,14 +2696,11 @@ }, "textToSpeech": { "title": "Teks ke ucapan", - "textToSpeechEngine": "Mesin teks ke ucapan", "reviewAudioSegments": "TTS - Tinjau segmen audio", "reviewAudioSegmentsHistory": "TTS - Tinjau riwayat audio", "stability": "Stabilitas", "similarity": "Kemiripan", "speakerBoost": "Penguatan pembicara", - "styleExaggeration": "Penekanan gaya", - "regenerateAudioSelectedLine": "Buat ulang audio untuk baris terpilih", "generateSpeechFromText": "Buat ucapan dari teks", "testVoice": "Uji suara", "addAudioToVideoFile": "Tambahkan audio ke file video", @@ -2515,6 +2719,19 @@ "videoEncodingSettings": "TTS - Pengaturan pengodean video", "elevenLabsSettings": "TTS - Pengaturan ElevenLabs", "elevenLabsSettingsResetHint": "Atur ulang pengaturan ElevenLabs ke nilai default", + "provider": "Penyedia", + "openAiCompatibleSettings": "TTS - Pengaturan kompatibel OpenAI", + "customServerUrl": "URL server kustom", + "customServerUrlHint": "Endpoint ucapan lengkap dari server kompatibel OpenAI, digunakan saat penyedia adalah \"Custom\", mis. http://localhost:8880/v1/audio/speech", + "customModels": "Model kustom", + "customModelsHint": "Nama model dipisahkan koma yang ditawarkan saat penyedia adalah \"Custom\"", + "customVoices": "Suara kustom", + "customVoicesHint": "Nama suara dipisahkan koma, digunakan oleh penyedia \"Custom\" dan oleh model OpenRouter yang tidak menerbitkan daftar suara", + "instructions": "Instruksi", + "instructionsHint": "Gaya bicara opsional, mis. \"Berbicaralah dengan suara tenang dan hangat\". Hanya dikirim ke model yang mendukungnya (bukan tts-1/tts-1-hd)", + "openAiSpeedHint": "Kecepatan ucapan dari 0.25 hingga 4.0 (1.0 normal). Tidak semua model mendukungnya", + "outputFormat": "Format keluaran", + "outputFormatHint": "Format audio yang diminta dari server. \"Auto\" meminta MP3 dan beralih ke PCM untuk model yang hanya mengembalikan PCM (mis. Gemini TTS)", "regenerateAudio": "Buat ulang audio", "autoContinuePlaying": "Lanjut putar otomatis", "playLine": "Putar baris", @@ -2523,6 +2740,13 @@ "addingAudioToVideoFileDotDotDot": "Menambahkan audio ke file video...", "preparingMergeDotDotDot": "Menyiapkan penggabungan...", "importVoiceDotDotDot": "Impor suara...", + "renameVoiceDotDotDot": "Ganti nama suara...", + "renameVoiceTitle": "Ganti nama suara", + "voiceXCouldNotBeRenamedX": "Suara '{0}' tidak dapat diganti namanya: {1}", + "deleteVoiceDotDotDot": "Hapus suara...", + "deleteVoiceTitle": "Hapus suara", + "deleteVoiceXQuestion": "Hapus suara '{0}'?\n\nRekaman referensi dan file-filenya dihapus dari disk.", + "voiceXCouldNotBeDeletedX": "Suara '{0}' tidak dapat dihapus: {1}", "voiceImportSuccessTitle": "Suara diimpor", "voiceXImported": "Suara '{0}' berhasil diimpor", "voiceXCouldNotBeImported": "Suara '{0}' tidak dapat diimpor - lihat log untuk detailnya", @@ -2532,6 +2756,49 @@ "dropAudioFileHereToImportVoice": "Jatuhkan file audio di sini untuk mengimpor suara", "dropAudioFileHereHint": ".wav atau .mp3", "voiceCloneTranscriptTitle": "Masukkan transkrip audio (diperlukan untuk kloning suara)", + "voiceManagerTitle": "TTS - Pengelola suara", + "voiceManagerDotDotDot": "Pengelola suara...", + "voiceManagerMenuItem": "Pengelola suara TTS...", + "speakFromCurrentLineTitle": "Ucapkan dari baris saat ini", + "speakFromCurrentLineDotDotDot": "Ucapkan dari baris saat ini...", + "speakFromCurrentLineHint": "Membacakan baris satu per satu dengan keras, mulai dari baris saat ini. Tekan Escape atau klik baris lain untuk berhenti.", + "stopSpeaking": "Berhenti berbicara", + "speakingLineX": "Mengucapkan baris {0}... (Escape untuk berhenti)", + "playWithSpeechTitle": "Putar dengan ucapan", + "playWithSpeechDotDotDot": "Putar dengan ucapan...", + "playWithSpeechHint": "Memutar video dan mengucapkan setiap baris saat video mencapainya. Jeda dan cari posisi seperti biasa; tekan Escape untuk berhenti.", + "lowerVideoVolumeWhileSpeaking": "Turunkan volume video saat berbicara", + "pauseVideoWhenSpeechRunsLate": "Jeda video saat ucapan melewati baris berikutnya", + "waitingForSpeechLineX": "Membuat ucapan untuk baris {0}... (Escape untuk berhenti)", + "voiceKindClone": "Suara kloning", + "voiceKindPreset": "Bawaan", + "voiceKindModel": "Model suara", + "voiceKindOnline": "Daring", + "transcript": "Transkrip", + "transcriptRequiredHint": "Wajib - mesin membaca transkrip rekaman ini (ref-text) saat mengkloning", + "transcriptOptionalHint": "Opsional - transkrip rekaman yang akurat meningkatkan hasil kloning", + "saveTranscript": "Simpan transkrip", + "searchVoices": "Cari suara", + "loadingVoicesDotDotDot": "Memuat suara...", + "noVoicesForEngine": "Tidak ada suara - impor rekaman atau unduh paket suara", + "noVoicesMatchFilter": "Tidak ada suara yang cocok dengan pencarian", + "copyVoiceTo": "Salin suara ke", + "copyVoiceToDotDotDot": "Salin suara ke mesin...", + "copyingVoiceXToYDotDotDot": "Menyalin suara '{0}' ke {1}...", + "voiceXCopiedToY": "Suara '{0}' disalin ke {1}", + "voiceXCouldNotBeCopiedToY": "Suara '{0}' tidak dapat disalin ke {1} - lihat log untuk detailnya", + "voiceXAlreadyExistsInYContinue": "Suara bernama '{0}' sudah ada di {1}.\n\nTetap salin?", + "openVoicesFolder": "Buka folder suara", + "downloadVoicePacksDotDotDot": "Unduh paket suara...", + "downloadVoicePacksTitle": "TTS - Unduh paket suara", + "voicePackIntro": "Paket suara adalah kumpulan rekaman pendek yang bersih beserta transkripnya, siap untuk dikloning. Setiap paket diimpor ke mesin yang dipilih (suara yang sudah ada dilewati) dan menyertakan ATTRIBUTION.txt dengan lisensi dan sumbernya.", + "voicePackDetailsXVoicesYSizeZLicense": "{0} suara · {1} · {2}", + "installToEngine": "Pasang ke mesin", + "downloadAndInstall": "Unduh dan pasang", + "selectAtLeastOneVoicePack": "Pilih setidaknya satu paket suara", + "downloadingXDotDotDot": "Mengunduh {0}...", + "installingXDotDotDot": "Memasang {0}...", + "xVoicesInstalledYSkipped": "{0} suara dipasang ({1} sudah ada)", "useSpeechToTextDotDotDot": "Gunakan ucapan-ke-teks...", "autoCastMenuItem": "Temukan suara dalam video dan kloning...", "autoCastSpeakersTitle": "Suara yang ditemukan dalam video", @@ -2550,7 +2817,7 @@ "cloneVoicePerLinePreparing": "Mengambil suara setiap baris dari video...", "cloneVoicePerLineNeedsVideo": "Mengkloning suara setiap baris memerlukan video milik subtitel ini. Buka videonya lalu coba lagi.", "cloneVoicePerLineNoClips": "Tidak ada audio yang dapat diambil dari video, jadi tidak ada yang bisa dikloning. Periksa apakah video memiliki trek audio.", - "cloneVoicePerLineNeedsOriginalSubtitleX": "{0} hanya dapat mengkloning sebuah baris bila mengetahui apa yang diucapkan dalam video pada baris itu, yang berasal dari subtitel bahasa asli. Tidak ada subtitel asli yang dimuat, jadi setiap baris akan diucapkan oleh suara pertama yang diimpor alih-alih suara dalam video.\n\nBuka subtitel asli (File > Buka asli...) bersama terjemahannya, lalu buat lagi.", + "cloneVoicePerLineTranscribeClipsXYZ": "{0} hanya dapat mengkloning baris bila diketahui apa yang diucapkan dalam video pada baris tersebut. Hal itu tidak diketahui untuk {1} dari {2} baris - biasanya berasal dari subtitel bahasa asli (File > Buka asli...).\n\nTranskripsikan baris tersebut dari video dengan ucapan ke teks sekarang?\n\nYa: pilih mesin dan bahasa yang diucapkan dalam video, dan klip referensi ditranskripsikan sebelum ucapan dibuat.\nTidak: tetap buat - baris tersebut diucapkan oleh suara biasa, bukan suara dalam video.", "voiceCloneConsentTitle": "Kloning suara - sebelum Anda mulai", "voiceCloneConsentHeader": "Anda akan mengkloning sebuah suara", "voiceCloneConsentIntro": "Kloning menyalin suara orang sungguhan. Hal itu tunduk pada aturan di sebagian besar wilayah, dan di UE disertai kewajiban hukum yang menjadi tanggung jawab Anda, bukan Subtitle Edit. Silakan baca ini sekali.", @@ -2567,10 +2834,29 @@ "advancedTtsSettings": "Pengaturan TTS lanjutan", "advancedTtsAudioProcessing": "Pemrosesan audio", "advancedTtsOutput": "Keluaran", + "advancedTtsVoiceCloning": "Kloning suara", + "cleanCloneReferences": "Bersihkan referensi kloning suara (Sidon)", + "cleanCloneReferencesDescription": "Menghapus musik, derau, dan gema dari audio sumber kloning suara: klip yang diambil dari video dan rekaman yang diimpor di pengelola suara. Menggunakan model pemulihan ucapan Sidon pada audio.cpp (unduhan 940 MB). Suara kloning tidak lagi meniru latar belakang, tetapi ucapan yang sangat pelan atau bertumpang tindih bisa terdengar teredam.", + "cleaningCloneReferencesDotDotDot": "Membersihkan referensi kloning suara...", + "downloadSidonTitle": "Unduh Sidon?", + "downloadSidonQuestionX": "Membersihkan referensi kloning suara memerlukan model pemulihan ucapan Sidon ({0}).\n\nUnduh sekarang? Tanpa model ini, referensi digunakan apa adanya.", "proAudioPostProcessing": "Pascapemrosesan audio pro", "proAudioPostProcessingDescription": "Menerapkan kehangatan EQ, gerbang derau, kompresi, normalisasi kenyaringan (-16 LUFS), dan pudar masuk/keluar pada setiap segmen.", + "generatingSpeechSegmentXOfY": "Membuat ucapan: segmen {0} dari {1}", + "adjustingSpeedSegmentXOfY": "Menyesuaikan kecepatan: segmen {0} dari {1}", + "mergingAudioSegmentXOfY": "Menggabungkan audio: segmen {0} dari {1}", + "postProcessingSegmentXOfY": "Pascaproses: segmen {0} dari {1}", "audioDucking": "Ducking audio", "audioDuckingDescription": "Mengurangi volume audio video asli dan mencampurnya dengan audio TTS, sehingga jalur suara asli masih terdengar samar.", + "removeOriginalSpeech": "Hapus ucapan asli (lambat)", + "removeOriginalSpeechDescription": "Mempertahankan musik dan efek suara dari video asli tetapi menghapus ucapannya, lalu mencampur ucapan baru di atasnya. Memakan waktu kira-kira sepanjang video itu sendiri dengan GPU, dan berkali-kali lebih lama tanpa GPU. Jika ducking audio aktif, volumenya berlaku untuk musik dan efek. Hanya berlaku saat ucapan ditambahkan ke file video.", + "removingOriginalSpeech": "Menghapus ucapan asli...", + "removeOriginalSpeechFailed": "Tidak dapat menghapus ucapan asli - ucapan ditambahkan ke video tanpa penghapusan.", + "speechRemovalModel": "Model", + "speechRemovalModelDescription": "Kualitas terbaik mempertahankan musik dan efek suara paling banyak. Cepat kira-kira tiga kali lebih cepat, dengan sedikit lebih banyak musik yang hilang.", + "speechRemovalBestQuality": "Kualitas terbaik (Mel-Band RoFormer)", + "speechRemovalFast": "Cepat (HTDemucs)", + "videoTruncatedWarning": "Gambar dalam file video baru berhenti setelah {0}, tetapi video asli berdurasi {1} - gambar akan membeku sementara suara terus berlanjut.\n\nFile tetap disimpan. Lihat error-log.txt di folder data Subtitle Edit untuk keluaran ffmpeg.", "originalVolumePercent": "Volume asli %", "vadSilenceCompression": "Kompresi keheningan VAD", "vadSilenceCompressionDescription": "Mempersingkat jeda antar kata sebelum mengubah tempo. Menggunakan Voice Activity Detection untuk memampatkan hanya jeda keheningan sambil menjaga ucapan tetap utuh. Ini langkah pertama yang disarankan — mengurangi durasi tanpa kehilangan kualitas.", @@ -2644,7 +2930,6 @@ "subtitleMergedLinesAppliedPlural": "{0} penggabungan baris diterapkan dari teks ke ucapan" }, "shotChanges": { - "titleGenerateOrImport": "Buat/impor perubahan shot", "generateShotChanges": "Buat perubahan shot", "importShotChanges": "Impor perubahan shot", "generateShotChangesWithFfmpeg": "Buat perubahan shot dengan ffmpeg", @@ -2654,7 +2939,9 @@ "timeCodeFormatColon": "Format kode waktu:", "shotChangesList": "Daftar perubahan shot", "shotChangesClearQuestion": "Apakah Anda yakin ingin membersihkan semua perubahan shot?", - "deleteSelectedShotChangeQuestion": "Apakah Anda yakin ingin menghapus perubahan shot terpilih?" + "deleteSelectedShotChangeQuestion": "Apakah Anda yakin ingin menghapus perubahan shot terpilih?", + "shotChanges": "Perubahan shot", + "exportShotChanges": "Ekspor perubahan shot" }, "chapters": { "title": "Bab", @@ -2684,7 +2971,6 @@ "scaleTimesDescription": "Skalakan setiap waktu bab dari satu laju bingkai ke laju bingkai lain.", "fromFrameRate": "Dari", "toFrameRate": "Ke", - "apply": "Terapkan", "writeToVideo": "Tulis ke video...", "writeToVideoTitle": "Tulis bab ke video", "writeToVideoDescription": "Bab ditulis ke dalam salinan file video. Tidak ada yang dienkode ulang, jadi ini cepat dan tanpa kehilangan kualitas.", @@ -2694,7 +2980,6 @@ "writtenToX": "Bab ditulis ke {0}", "unableToWriteChapters": "Tidak dapat menulis bab ke file video.", "chaptersSavedToX": "Bab disimpan ke {0}", - "noVideoLoaded": "Tidak ada video dimuat", "emptyListCallToAction": "Belum ada bab - tambahkan satu pada posisi video, atau impor dari video atau file." }, "videoOcr": { @@ -2705,10 +2990,6 @@ "bottomHalf": "Setengah bawah", "fullFrame": "Bingkai penuh", "engine": "Mesin OCR", - "language": "Bahasa", - "url": "URL", - "model": "Model", - "apiKey": "Kunci API", "scan": "Pindai", "framesPerSecond": "Bingkai per detik", "textBrightnessMinimum": "Kecerahan teks minimum (0=mati)", @@ -2723,10 +3004,10 @@ "runningOcrXY": "Menjalankan OCR... {0}/{1}", "noLinesFoundTitle": "Tidak ada subtitel ditemukan", "noLinesFoundMessage": "Tidak ada teks ditemukan di area pindai - coba sesuaikan area pindai, mesin, atau kecerahan minimum.", + "ocrStoppedEarlyMessage": "Mesin OCR berhenti sebelum semua bingkai dibaca, sehingga baris yang ditemukan sejauh ini dipertahankan dan sisanya hilang.{0}{0}{1}", "linesFoundX": "{0} baris ditemukan", "refiningTimingXY": "Menyempurnakan pewaktuan... {0}/{1}", "fixOcrErrors": "Perbaiki kesalahan OCR", - "dictionary": "Kamus", "editLineX": "Edit baris {0}", "downloadDictionaryHint": "Unduh kamus periksa ejaan...", "framesPerSecondHint": "Berapa bingkai per detik yang dipindai. 5 mencukupi untuk subtitel biasa; nilai lebih tinggi menangkap baris yang sangat singkat dan mempererat pengelompokan, tetapi memakan lebih banyak waktu OCR.", @@ -2743,7 +3024,58 @@ "testOcr": "Uji bingkai saat ini", "testOcrRunning": "Menguji OCR pada bingkai saat ini...", "testOcrResultX": "Hasil uji: {0}", - "testOcrNoTextFound": "Uji: tidak ada teks ditemukan di area pindai" + "testOcrNoTextFound": "Uji: tidak ada teks ditemukan di area pindai", + "engineSettings": "Pengaturan mesin OCR", + "engineBuiltIn": "Bawaan sistem operasi", + "engineExternalServer": "Server eksternal (dipasang dan dikelola di luar Subtitle Edit)", + "engineCloudApi": "API cloud (memerlukan kunci API)", + "engineNothingToInstall": "Tidak ada yang perlu dipasang", + "engineModelsMissing": "Mesin terpasang, model belum ada", + "website": "Situs web" + }, + "backgroundMusic": { + "title": "Buat musik latar", + "generateBackgroundMusicDotDotDot": "Buat musik latar...", + "preset": "Prasetel", + "prompt": "Prompt", + "tempoBpm": "Tempo (BPM)", + "generateSeconds": "Buat (detik)", + "seed": "Seed", + "randomSeed": "Acak", + "outputLength": "Panjang keluaran", + "outputLengthVideoX": "{0} (panjang video - musik berulang tanpa jeda)", + "musicVolumePercent": "Volume musik (%)", + "removeExistingAudioTracks": "Hapus trek audio yang ada", + "originalAudioVolumePercent": "Volume audio asli (%)", + "saveAudioDotDotDot": "Simpan audio...", + "addToVideoDotDotDot": "Tambahkan ke video...", + "engineInfo": "ACE-Step 1.5 Turbo via audio.cpp (lisensi MIT) - berjalan secara lokal", + "presetCooking": "Memasak / membuat kue", + "presetTech": "Ulasan teknologi / gawai", + "presetForest": "Hutan / alam", + "presetRelaxingPiano": "Piano santai", + "presetLofiVlog": "Vlog lo-fi", + "presetCorporate": "Korporat / video penjelasan", + "loadingModel": "Memuat model...", + "composing": "Mengomposisi...", + "generatingAudio": "Membuat audio...", + "decodingAudio": "Mendekode audio...", + "creatingLoop": "Membuat pengulangan tanpa jeda...", + "resultLoopXYZ": "Pengulangan: {0} pada {1} BPM, kecocokan sambungan {2}%", + "resultNoLoopX": "Musik siap: {0}", + "addingMusicToVideo": "Menambahkan musik ke video...", + "downloadModelTitle": "Unduh model musik?", + "downloadModelQuestionX": "Membuat musik memerlukan model ACE-Step 1.5 ({0}).\n\nUnduh model?", + "downloadingModel": "Mengunduh model ACE-Step 1.5...", + "saveAudioTitle": "Simpan musik latar", + "audioFileSavedX": "File audio disimpan: {0}", + "unableToGenerateMusic": "Tidak dapat membuat musik", + "unableToAddMusicToVideo": "Tidak dapat menambahkan musik ke video", + "outputLengthTextToSpeech": "Mengikuti ucapan yang dibuat - musik berulang tanpa jeda dan meredup saat seseorang berbicara", + "addBackgroundMusic": "Tambah musik latar", + "addBackgroundMusicHint": "Buat musik secara lokal dengan ACE-Step 1.5 dan campur di bawah ucapan - musik meredup saat seseorang berbicara", + "generatingBackgroundMusicDotDotDot": "Membuat musik latar...", + "mixingBackgroundMusicDotDotDot": "Mencampur musik latar..." }, "goToVideoPosition": "Pergi ke posisi video", "goToVideoPositionDotDotDot": "Pergi ke posisi video...", @@ -2754,30 +3086,88 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "Subtitel sekunder di pemutar video, buka...", "openSecondarySubtitleOnVideoPlayer": "Subtitel sekunder (di pemutar video)", "removeSecondarySubtitleOnVideoPlayer": "Subtitel sekunder di pemutar video, hapus", + "editSecondarySubtitleSettings": "Edit pengaturan subtitel kedua", + "editSecondarySubtitleSettingsDotDotDot": "Edit pengaturan subtitel kedua...", + "secondarySubtitleRememberSettings": "Ingat pengaturan ini", + "secondarySubtitleDoNotShowAgain": "Jangan tampilkan dialog ini lagi", + "secondarySubtitleJustifyLines": "Ratakan baris", "openRecentVideo": "Buka video terbaru", "clearRecentVideos": "Bersihkan video terbaru", "cutVideoTitle": "Potong video", "cutVideoDotDotDot": "Potong video...", + "remuxVideoTitle": "Remux video", + "remuxVideoDotDotDot": "Remux video...", + "remuxVideoInputVideo": "Video masukan:", + "remuxVideoMultipleTracksRequiresMkv": "Beberapa trek audio atau subtitel memerlukan kontainer MKV. Format keluaran telah otomatis diubah ke .mkv.", + "remuxVideoOutputFormat": "Format keluaran:", + "remuxVideoOutputFile": "File keluaran:", + "remuxVideoRemuxing": "Me-remux video dan audio...", + "remuxVideoFinalizing": "Menyelesaikan file keluaran (memindahkan indeks ke awal)...", + "remuxVideoCompleted": "Video berhasil di-remux.", + "remuxVideoFailed": "Gagal me-remux video.", + "remuxVideoPleaseSelectBoth": "Silakan pilih file video dan audio.", + "remuxVideoAssRequiresMkv": "Subtitel ASS/SSA memerlukan kontainer MKV untuk mempertahankan semua pemformatan dan gaya.", + "remuxVideoSccRequiresMov": "Subtitel Scenarist (.scc) disematkan sebagai closed caption CEA-608, yang memerlukan kontainer MOV atau MPG. Format keluaran telah otomatis diubah ke .mov.", + "remuxVideoSccNotWithWebM": "Closed caption Scenarist (.scc) memerlukan kontainer MOV, yang tidak dapat menampung video VP9/AV1 dari file .webm. Hapus file .scc atau konversikan ke format subtitel lain.", + "remuxVideoMpgMaxTwoCaptionTracks": "File .mpg menampung paling banyak dua trek closed caption (CC1 dan CC3) - hapus file subtitel sehingga tersisa satu atau dua.", + "remuxVideoMccRequiresMpg": "Subtitel MacCaption (.mcc) disematkan sebagai closed caption CEA-608/708 dalam video MPEG-2, yang memerlukan kontainer MPG. Format keluaran telah otomatis diubah ke .mpg.", + "remuxVideoMpgReencodeVideoX": "Closed caption dalam file .mpg memerlukan video MPEG-2, sedangkan videonya {0}. Enkode ulang video ke MPEG-2? Ini memakan waktu lebih lama dan sedikit menurunkan kualitas.", + "remuxVideoFileHasNoAudioX": "\"{0}\" tidak memiliki trek audio, sehingga tidak dapat digunakan sebagai sumber audio.", + "remuxVideoAddingClosedCaptions": "Menambahkan closed caption...", + "remuxVideoSelectAudioTrack": "Pilih trek audio", + "remuxVideoSelectAudioTrackFor": "Pilih trek audio untuk {0}", + "remuxVideoSelectAudioTrackPrompt": "File '{0}' berisi {1} trek audio. Silakan pilih trek audio untuk di-remux:", + "remuxVideoVideoFile": "video", + "remuxVideoAudioFile": "audio", + "remuxVideoAudioFiles": "File audio:", + "remuxVideoSubtitleFiles": "File subtitel (opsional, soft subtitle):", + "remuxVideoSelectAudioTrackDotDotDot": "Pilih trek audio...", + "remuxVideoFilesX": "{0} file", + "remuxVideoMixAudio": "Campur audio ke dalam satu trek", + "remuxVideoVolumePercent": "Volume %:", + "remuxVideoVolumeX": "Volume {0}%", + "remuxVideoFastStart": "Optimalkan untuk streaming web (pindahkan indeks ke depan - lebih lambat)", "embedSubtitlesDotDotDot": "Tambah/hapus subtitel tersemat...", "generateTimeCodes": "Buat kode waktu", "checkeredImage": "Gambar kotak-kotak", - "saveVideoAsTitle": "Simpan video sebagai", "promptForFfmpegParamsAndGenerate": "Tanyakan parameter ffmpeg lalu buat", "cutVideoCutSegments": "Potong segmen", "cutVideoMergeSegments": "Gabungkan segmen", "cutVideoSplitSegments": "Simpan segmen satu per satu", - "cutVideoType": "Jenis potong", - "mpvRenderAuto": "Otomatis", - "mpvRenderNative": "Asli", - "mpvRenderOpenGl": "OpenGL", - "mpvRenderSoftware": "Perangkat lunak (lambat)", "cutVideoAlsoCutSubtitle": "Potong juga subtitel", "cutVideoSubtitleFileGeneratedX": "File subtitel dibuat: {0}", + "cutVideoTransition": "Transisi antar segmen", + "cutVideoTransitionDurationSeconds": "Durasi (detik)", + "cutVideoFadeInSeconds": "Pudar dari hitam di awal (detik)", + "cutVideoFadeOutSeconds": "Pudar ke hitam di akhir (detik)", + "cutVideoPreviewTransition": "Pratinjau transisi", + "cutVideoPreviewTransitionTitle": "Pratinjau transisi", + "cutVideoPreviewNeedsJoin": "Tidak ada sambungan untuk dipratinjau - tambahkan setidaknya dua segmen untuk digabung, atau satu segmen untuk dipotong dari bagian tengah.", + "cutVideoTransitionInfoX": "Setiap transisi menumpuk bagian yang disambungkannya, sehingga keluaran menjadi {0} detik lebih pendek per sambungan. Subtitel yang dipotong diatur ulang waktunya agar sesuai.", + "cutVideoTransitionFade": "Pudar", + "cutVideoTransitionFadeBlack": "Pudar melalui hitam", + "cutVideoTransitionFadeWhite": "Pudar melalui putih", + "cutVideoTransitionFadeGrays": "Pudar melalui abu-abu", + "cutVideoTransitionDissolve": "Larut", + "cutVideoTransitionWipeLeft": "Sapu ke kiri", + "cutVideoTransitionWipeRight": "Sapu ke kanan", + "cutVideoTransitionWipeUp": "Sapu ke atas", + "cutVideoTransitionWipeDown": "Sapu ke bawah", + "cutVideoTransitionSlideLeft": "Geser ke kiri", + "cutVideoTransitionSlideRight": "Geser ke kanan", + "cutVideoTransitionSlideUp": "Geser ke atas", + "cutVideoTransitionSlideDown": "Geser ke bawah", + "cutVideoTransitionSmoothLeft": "Halus ke kiri", + "cutVideoTransitionSmoothRight": "Halus ke kanan", + "cutVideoTransitionCircleOpen": "Lingkaran membuka", + "cutVideoTransitionCircleClose": "Lingkaran menutup", + "cutVideoTransitionRadial": "Radial", + "cutVideoTransitionPixelize": "Pikselisasi", + "cutVideoTransitionBlur": "Buram", "importCurrentSubtitle": "Impor subtitel saat ini", "addRemoveEmbeddedSubtitlesTitle": "Tambah/hapus subtitel tersemat", "addRemoveEmbeddedSubtitlesMp4Title": "Tambah/hapus subtitel tersemat (MP4)", "addCurrentSubtitle": "Tambahkan subtitel saat ini", - "embeddedTrackColumnNew": "Baru", "embeddedTrackNoSubtitlesFoundTitle": "Tidak ada subtitel ditemukan", "embeddedTrackNoSubtitlesFoundMessage": "File subtitel terpilih tidak berisi subtitel apa pun.", "embeddedTrackNoTracksTitle": "Tidak ada trek ditambahkan", @@ -2789,7 +3179,7 @@ "embeddedTrackGeneratingVideoXY": "Membuat video... {0}% {1}", "embeddedTrackGeneratingVideo": "Membuat video...", "mp4FilesFilter": "File MP4", - "titleOrLanguage": "Judul/bahasa", + "embeddedTracksPickVideoHint": "Pilih file video, atau letakkan di sini, untuk melihat trek subtitelnya.", "viewMatroskaTrackX": "Lihat trek Matroska - {0}", "resolutionSeparator": "x", "openFromUrlTitle": "Buka file video dari URL", @@ -2799,9 +3189,7 @@ "openFromUrlDownloadAndOpen": "Unduh dan buka", "openFromUrlDownloadAndOpenDescription": "Simpan video secara lokal, lalu buka.", "openFromUrlDownloadAndOpenNote": "Diperlukan untuk ucapan-ke-teks dan puncak bentuk gelombang.", - "openFromUrlMissing": "Silakan masukkan URL video terlebih dahulu.", "openFromUrlDownloadingTitle": "Mengunduh video", - "openFromUrlSaveAs": "Simpan video sebagai", "openFromUrlDownloadSubtitles": "Unduh juga subtitel", "openFromUrlDownloadVideo": "Unduh video", "openFromUrlIncludeAutoGeneratedSubtitles": "Sertakan subtitel yang dibuat otomatis (bahasa asli)", @@ -2838,12 +3226,15 @@ "reEncodeGeneratingDone": "Pembuatan selesai", "reEncodeGeneratedFilesX": "File yang dibuat ({0}):", "reEncodeFfmpegParameters": "Parameter ffmpeg", + "analyzingVideoX": "Menganalisis video... {0}% {1}", + "analyzingVideoXofY": "Menganalisis video {0}/{1}... {2}% {3}", + "backgroundImageFileNotSelected": "File gambar latar belakang belum dipilih", + "backgroundImageFileDoesNotExistX": "File gambar latar belakang tidak ada: {0}", "voices": "Suara", "presets": "Prasetel", "talkerX": "Pembicara {0}", "baseModel": "Model dasar", "turboModel": "Model turbo", - "ttsUpdateX": "Perbarui {0}", "ttsEngineNotInstalled": "{0} tidak terpasang", "ttsEngineUpdateAvailable": "{0} - pembaruan tersedia", "ttsEngineTooOldUpdateRequired": "{0} terlalu lama - perlu pembaruan", @@ -2866,19 +3257,25 @@ "cloneVoiceTo": "Kloning suara ke", "cloneVoiceNameTitle": "Nama suara baru", "cloneVoiceExtractFailed": "Tidak dapat mengekstrak audio untuk baris terpilih.", + "lineXHasNoDuration": "Baris {0} tidak memiliki durasi (waktu akhir tidak setelah waktu mulai), sehingga tidak ada audio untuk diekstrak.", + "audioClipsSkippedLinesX": "Tidak ada audio yang dapat diekstrak untuk baris berikut, sehingga dilewati: {0}", "toggleShotChange": "Alihkan perubahan shot", "resetWaveformZoomAndSpeed": "Atur ulang zoom & kecepatan bentuk gelombang", "showOriginalSubtitle": "Tampilkan subtitel asli", + "timelineGroupTracksBy": "Kelompokkan trek subtitel berdasarkan", + "timelineShowThumbnails": "Tampilkan gambar mini video", + "showSpeechOnly": "Tampilkan ucapan saja (lambat dibuat)", + "isolatingSpeechForWaveformX": "Mengisolasi ucapan untuk bentuk gelombang... {0}", + "isolatingSpeechForWaveformFailed": "Tidak dapat mengisolasi ucapan untuk bentuk gelombang - lihat log alat", + "speechOnlyWaveformReady": "Bentuk gelombang sekarang hanya menampilkan ucapan", "showOnlyWaveform": "Tampilkan hanya bentuk gelombang", "showOnlySpectrogram": "Tampilkan hanya spektogram", "showWaveformAndSpectrogram": "Tampilkan bentuk gelombang dan spektogram", - "spectrogramClassic": "Klasik", "spectrogramClassicViridis": "Viridis", "spectrogramClassicPlasma": "Plasma", "spectrogramClassicInferno": "Inferno", "spectrogramClassicTurbo": "Turbo", "spectrogramNeon": "Neon", - "waveformDrawStyleClassic": "Klasik", "waveformDrawStyleFancy": "Mewah", "setVideoPositionAndPauseAndSelectSubtitle": "Atur posisi video, jeda, dan pilih subtitel", "setVideopositionAndPauseAndSelectSubtitleAndCenter": "Atur posisi video, jeda, pilih subtitel, dan pusatkan", @@ -2888,7 +3285,6 @@ }, "sync": { "visualSync": "Sinkronisasi Visual", - "sync": "Sinkron", "startScene": "Adegan awal", "endScene": "Adegan akhir", "playTwoSecondsAndBack": "Putar 2 dtk & kembali", @@ -2904,19 +3300,18 @@ "adjustSelectedLinesAndForward": "Sesuaikan baris terpilih dan seterusnya", "toFrameRate": "Ke laju bingkai", "fromFrameRate": "Dari laju bingkai", + "videoXFrameRateY": "{0} - {1} fps", "adjustAllTimes": "Sesuaikan semua waktu (tampilkan lebih awal/akhir)", "showEarlier": "Tampilkan lebih awal", "showLater": "Tampilkan lebih akhir", - "changeFrameRate": "Ubah laju bingkai", "setSyncPoint": "Atur titik sinkron", "setSyncPointViaVideo": "Atur titik sinkronisasi via video...", "syncPointTimeCode": "Kode waktu titik sinkronisasi", "syncPoints": "Titik sinkron", "pointSync": "Sinkronisasi titik", "pointSyncViaOther": "Sinkronisasi titik via subtitel lain", - "adjustmentX": "Penyesuaian: {0}", - "totalAdjustmentX": "Total penyesuaian: {0}", - "syncPointCandidateInfo": "Baris yang dimulai setelah keheningan {0}+ detik disorot - baris seperti itu sering menjadi titik sinkronisasi yang andal", + "syncPointCandidateAfterInfo": "Baris yang diikuti oleh {0}+ detik keheningan disorot - baris tersebut sering menjadi titik sinkron yang andal", + "gapAfter": "Jeda sesudah", "adjustAllShortcuts": "Pintasan keyboard:\r\n\r\n• Shift + Kiri/Kanan: Geser 10 ms\r\n• Ctrl + Kiri/Kanan: Geser 100 ms\r\n• Alt + Kiri/Kanan: Geser 500 ms", "adjustAllShortcutsFrames": "Pintasan keyboard:\r\n\r\n• Shift + Kiri/Kanan: Geser 1 bingkai\r\n• Ctrl + Kiri/Kanan: Geser 10 bingkai\r\n• Alt + Kiri/Kanan: Geser 1 detik", "offsetInSeconds": "Offset dalam detik", @@ -2936,6 +3331,7 @@ "lineMerge": "Penggabungan baris", "delayInSecondsBetweenRequests": "Jeda dalam detik antar permintaan", "maxBytesPerRequest": "Byte maks per permintaan", + "keepMusicLinesUntranslated": "Jangan terjemahkan baris dalam simbol musik (♪ ... ♪)", "promptText": "Teks prompt", "resetPromptToDefault": "Atur ulang prompt ke baku", "translateEachLineSeparately": "Terjemahkan setiap baris secara terpisah", @@ -2949,11 +3345,10 @@ "readyToTranslate": "Siap menerjemahkan", "translating": "Menerjemahkan...", "translationComplete": "Terjemahan selesai", + "translateInPlaceNoOriginal": "Terjemahkan langsung (jangan buat asli)", "translationCancelled": "Terjemahan dibatalkan", "swapLanguages": "Tukar bahasa sumber dan tujuan", "xIsAlreadyDownloadedReDownload": "{0} sudah diunduh. Unduh ulang?", - "advancedDotDotDot": "Lanjutan...", - "advancedSettings": "Pengaturan lanjutan", "advancedSettingsSubtitle": "Opsi batch, konteks, dan sampling untuk mesin llama.cpp lanjutan", "context": "Konteks", "synopsis": "Sinopsis", @@ -2977,6 +3372,7 @@ "useOnlyExtraServerParametersHint": "Mulai llama-server dengan parameter di atas alih-alih penyetelan bawaan Subtitle Edit - hanya model, host, dan port yang tetap diatur", "serverRunningAtX": "Server berjalan di {0}", "customPromptHint": "Instruksi kustom ({0} = bahasa sumber, {1} = bahasa tujuan); kosong = prompt bawaan", + "editTranslationHint": "Klik terjemahan baris terpilih untuk mengeditnya (Enter menyimpan, Escape membatalkan)", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp memerlukan mesin llama-server dan model terjemahan untuk diunduh. Unduh sekarang?", "llamaCppDownloadEnginePrompt": "llama.cpp memerlukan mesin llama-server untuk diunduh. Unduh sekarang?", "llamaCppDownloadModelPrompt": "llama.cpp memerlukan model terjemahan terpilih untuk diunduh. Unduh sekarang?" @@ -2989,7 +3385,6 @@ "dialogStyleDashBothLinesWithSpace": "Tanda hubung kedua baris dengan spasi", "dialogStyleDashBothLinesWithoutSpace": "Tanda hubung kedua baris tanpa spasi", "continuationStyle": "Gaya lanjutan", - "continuationStyleNone": "Tidak ada", "continuationStyleNoneTrailingDots": "Tidak ada, titik untuk jeda (hanya di akhir)", "continuationStyleNoneLeadingTrailingDots": "Tidak ada, titik untuk jeda", "continuationStyleNoneTrailingEllipsis": "Tidak ada, elipsis untuk jeda (hanya di akhir)", @@ -3000,7 +3395,6 @@ "continuationStyleLeadingTrailingEllipsis": "Elipsis", "continuationStyleLeadingTrailingDash": "Tanda hubung", "continuationStyleLeadingTrailingDashDots": "Tanda hubung, tetapi titik untuk jeda", - "continuationStyleCustom": "Kustom", "cpsLineLengthStyle": "Cps/panjang baris", "cpsLineLengthStyleCalcAll": "Hitung semua karakter", "cpsLineLengthStyleCalcNoSpaceCpsOnly": "Hitung semua kecuali spasi, hanya cps", @@ -3013,14 +3407,6 @@ "cpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly": "Tanpa spasi atau tanda baca, hanya CPS", "cpsLineLengthStyleCalcIgnoreArabicDiacritics": "Abaikan diakritik Arab", "cpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "Abaikan diakritik Arab, tanpa spasi", - "timeCodeModeHhMmSsMs": "HH:MM:SS:MS", - "timeCodeModeHhMmSsFf": "HH:MM:SS:FF", - "splitBehaviorPrevious": "Tambahkan jeda di kiri titik pisah (fokus kanan)", - "splitBehaviorHalf": "Tambahkan jeda di tengah titik pisah (fokus kiri)", - "splitBehaviorNext": "Tambahkan jeda di kanan titik pisah (fokus kiri)", - "subtitleListActionNothing": "Tidak ada", - "subtitleListActionVideoGoToPositionAndPause": "Pergi ke posisi video dan jeda", - "subtitleListActionVideoGoToPositionAndPlay": "Pergi ke posisi video dan putar", "subtitleGridCenterText": "Tengahkan teks di kisi subtitel", "minGapCalculateDotDotDot": "Hitung jeda minimum dari laju bingkai...", "minGapCalculateTitle": "Jeda min. antar subtitel dalam md", @@ -3052,8 +3438,14 @@ "checkForUpdatesChannelStableAndBeta": "Versi stabil dan beta", "assaAutoSetResolution": "ASSA: atur resolusi (PlayResX/PlayResY) dari video saat video dibuka", "assaAutoSetResolutionPrompt": "ASSA: tanyakan sebelum mengubah resolusi agar cocok dengan video (jika tidak, ubah skala otomatis)", + "videoControls": "Kontrol video", + "videoControlsEdit": "Edit kontrol video...", + "videoControlsPositionText": "Teks posisi / durasi", + "videoControlsVideoFileName": "Nama file video", + "videoControlsPlayerName": "Nama pemutar video", "mergeKeepEndTime": "Gabungkan baris: pertahankan waktu selesai (izinkan tumpang tindih dengan subtitel berikutnya)", "mergeKeepEndTimeOnlyAssa": "Gabungkan baris: pertahankan waktu selesai hanya untuk \"Advanced Sub Station Alpha\"", + "mergeAutoBreak": "Gabungkan baris: pisah otomatis teks gabungan (nonaktif mempertahankan pemisah baris asli)", "defaultSaveLocation": "Lokasi simpan baku", "defaultSaveLocationSourceFileFolder": "Folder file subtitel/video", "defaultSaveLocationLastUsedFolder": "Folder yang terakhir digunakan", @@ -3061,18 +3453,10 @@ "defaultSaveLocationSubtitleFileFolder": "Folder file subtitel", "defaultSaveLocationCustomFolder": "Folder kustom", "subtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "Pergi ke posisi video, putar saat ini, dan jeda", - "subtitleListActionEditText": "Pergi ke kotak edit teks", "subtitleListActionVideoGoToPositionMinus1SecAndPause": "Pergi ke posisi video - 1 dtk dan jeda", "subtitleListActionVideoGoToPositionMinusHalfSecAndPause": "Pergi ke posisi video - 0,5 dtk dan jeda", "subtitleListActionVideoGoToPositionMinus1SecAndPlay": "Pergi ke posisi video - 1 dtk dan putar", - "subtitleListActionEditTextAndPause": "Pergi ke kotak edit teks, dan jeda pada posisi video", - "autoBackupEveryMinute": "Setiap menit", - "autoBackupEveryXthMinute": "Setiap {0} menit", - "profiles": "Profil", - "autoBackupDeleteAfterXMonths": "Hapus cadangan otomatis setelah {0} bulan", "searchSettingsDotDotDot": "Cari pengaturan...", - "syntaxColoring": "Pewarnaan sintaks", - "waveformSpectrogram": "Bentuk gelombang/spektogram", "network": "Jaringan", "fileTypeAssociations": "Asosiasi jenis file", "textBoxColorTags": "Warnai tag (HTML/ASSA) di kotak teks subtitel", @@ -3105,10 +3489,9 @@ "darkThemeForegroundColor": "Warna latar depan tema gelap", "darkThemeBackgroundColor": "Warna latar belakang tema gelap", "showGridLines": "Tampilkan garis kisi", - "resetSettings": "Atur ulang pengaturan?", - "resetSettingsDetail": "Ini akan mengatur ulang semua pengaturan ke nilai default.\n\nLanjutkan?", "showHorizontalLineAboveToolbar": "Tampilkan garis horizontal di atas bilah alat", "bookmarkColor": "Warna markah", + "spellCheckHighlightColor": "Warna sorotan periksa ejaan", "singleLineMaxLength": "Panjang maks satu baris", "optimalCharsPerSec": "Karakter/dtk optimal", "maxCharsPerSec": "Maks karakter/dtk", @@ -3121,13 +3504,21 @@ "unbreakSubtitlesShortThan": "Satukan subtitel lebih pendek dari", "newEmptyDefaultMs": "Durasi default subtitel baru (ms)", "timeCodeUpDownStepMs": "Kenaikan waktu naik/turun (ms)", + "moveSelectedLinesStepMs": "Langkah pintasan geser baris terpilih (ms)", + "moveStartEndStepMs": "Langkah pintasan geser awal/akhir (ms)", + "moveLinesShortenNeighbor": "Geser baris: perpendek baris sebelumnya/berikutnya alih-alih menumpanginya", "promptBeforeDelete": "Konfirmasi sebelum menghapus", "rememberPositionAndSize": "Ingat posisi dan ukuran jendela", + "titleBarFullFileName": "Tampilkan jalur file lengkap di bilah judul", + "showRecentFiles": "Tampilkan file terbaru (untuk dibuka ulang)", "openLastFileOnStart": "Buka file terbaru terakhir saat mulai", "autoSave": "Simpan otomatis (simpan file terbuka saat mengedit)", "autoBackupOn": "Cadangan otomatis", "autoBackupIntervalMinutes": "Interval cadangan otomatis (menit)", "autoBackupDeleteAfterDays": "Retensi cadangan otomatis (hari)", + "settingsBackupOn": "Cadangkan pengaturan otomatis", + "settingsBackupIntervalDays": "Interval pencadangan pengaturan (hari, 0 = setiap mulai)", + "settingsBackupMaxCount": "Jumlah cadangan pengaturan yang disimpan", "autoConvertToUtf8": "Konversi otomatis pengodean ke UTF-8 saat membuka", "autoTrimWhiteSpace": "Pangkas otomatis spasi kosong", "defaultEncoding": "Pengodean default", @@ -3143,23 +3534,14 @@ "colorGapTooShort": "Warnai jika jeda terlalu pendek", "errorBackgroundColor": "Warna latar belakang kesalahan", "waveformDrawGridLines": "Gambar garis kisi", - "waveformCenterVideoPosition": "Pusatkan posisi video", + "waveformUseSkiaRenderer": "Gunakan perender cepat eksperimental", "waveformCenterVideoPositionAlsoWhenPaused": "Pusatkan posisi video juga saat dijeda", + "waveformSelectCurrentSubtitleWhilePaused": "Pilih subtitel saat ini juga saat dijeda", + "waveformRememberZoom": "Ingat zoom (horizontal dan vertikal)", "waveformShowToolbar": "Tampilkan bilah alat", "waveformShowToolbarEdit": "Edit bilah alat...", "waveformShowToolbarEditLabel": "Item bilah alat", "waveformSpectrogramCombinedWaveformHeight": "Bentuk gelombang/spektogram gabungan, tinggi bentuk gelombang %", - "showWaveformToolbarPlay": "Bilah alat: tampilkan tombol putar", - "showWaveformToolbarRepeat": "Bilah alat: tampilkan tombol ulang", - "showWaveformToolbarRemoveBlankLines": "Bilah alat: tampilkan tombol hapus baris kosong", - "showWaveformToolbarNew": "Bilah alat: tampilkan tombol subtitel baru", - "showWaveformToolbarSetStart": "Bilah alat: tampilkan tombol atur awal", - "showWaveformToolbarSetEnd": "Bilah alat: tampilkan tombol atur akhir", - "showWaveformToolbarStartAndOffsetTheRest": "Bilah alat: tampilkan tombol atur awal dan geser sisanya", - "showWaveformToolbarHorizontalZoom": "Bilah alat: tampilkan penggeser zoom horizontal", - "showWaveformToolbarVerticalZoom": "Bilah alat: tampilkan penggeser zoom vertikal", - "showWaveformToolbarVideoPositionSlider": "Bilah alat: tampilkan penggeser posisi video", - "showWaveformToolbarPlaybackSpeed": "Bilah alat: tampilkan kecepatan pemutaran", "waveformFocusTextboxAfterInsertNew": "Fokuskan kotak teks setelah menyisipkan", "waveformInvertMouseWheel": "Balikkan roda tetikus", "waveformMouseWheelSetsVideoPosition": "Roda tetikus mengatur posisi video", @@ -3180,20 +3562,20 @@ "fixCommonErrorsSkipStep1": "Perbaiki kesalahan umum: lewati langkah 1 (pilih perbaikan)", "showPluginsMenu": "Tampilkan menu Plugin", "proxyAddress": "Alamat proksi", - "username": "Nama pengguna", "password": "Kata sandi", "defaultFormat": "Format default", "defaultSaveAsFormat": "Format default \"Simpan sebagai\"", "favoriteSubtitleFormats": "Format subtitel favorit", "favoriteLanguages": "Bahasa favorit", "webVttUseXTimestampMap": "WebVTT: gunakan X-TIMESTAMP-MAP (offset kode waktu saat memuat)", - "showStopButton": "Tampilkan tombol berhenti", - "showFullscreenButton": "Tampilkan tombol layar penuh", "fullscreenHideControls": "Sembunyikan kontrol video di layar penuh", + "showSecondarySubtitleDialog": "Tampilkan dialog gaya saat membuka file subtitel kedua", + "rememberSecondarySubtitleFile": "Ingat file subtitel kedua", "autoOpenVideoFile": "Buka file video otomatis saat membuka subtitel", "downloadMpv": "Unduh mpv", "downloadVlc": "Unduh VLC", "allowSingleLetterShortcutsInTextbox": "Izinkan pintasan satu huruf di kotak teks", + "allowTextNavigationShortcutsInTextbox": "Izinkan pintasan pada tombol navigasi teks (Ctrl+Kiri/Kanan, Home/End) di kotak teks", "spellCheckEnglishTreatInApostropheAsIng": "Periksa ejaan: Perlakukan kata berakhiran 'in'' sebagai 'ing' (hanya Inggris)", "goToLineNumberSetsVideoPosition": "Pergi-ke-nomor-baris juga mengatur posisi video", "adjustAllTimesRememberLineSelectionChoice": "Sesuaikan semua waktu, ingat pilihan seleksi baris", @@ -3205,6 +3587,7 @@ "showAssaLayer": "Tampilkan kotak lapisan ASSA", "waveformCursorColor": "Warna kursor/kepala bentuk gelombang", "waveformShotChangeColor": "Warna perubahan shot bentuk gelombang", + "waveformGridColor": "Warna kisi bentuk gelombang", "waveformParagraphLeftColor": "Warna batas kiri bentuk gelombang", "waveformParagraphRightColor": "Warna batas kanan bentuk gelombang", "waveformFancyHighColor": "Warna tinggi mewah bentuk gelombang", @@ -3232,27 +3615,31 @@ "resetSyntaxColoring": "Atur ulang pewarnaan sintaks", "resetWaveform": "Atur ulang bentuk gelombang", "resetRules": "Atur ulang aturan", - "useFrameMode": "Gunakan mode bingkai (hh.mm.ss.ff)", + "timeCodeMode": "Mode kode waktu", + "timeCodeModeTime": "Waktu (hh:mm:ss,zzz)", + "timeCodeModeFrames": "Bingkai (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "Nomor bingkai", + "frameModeSnapToVideoFrames": "Simpan waktu pada bingkai video (bukan bingkai dalam setiap detik)", "textBoxLimitNewLines": "Batasi jumlah baris di kotak teks subtitel", - "mpvVideoOutput": "Keluaran video (mpv)", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - Rendering perangkat lunak (lambat)", + "mpvMetalRendering": "libmpv - Metal (eksperimental, perlu mulai ulang)", "mpvWidRendering": "libmpv - Rendering ID Jendela asli", "waveFormsAndSpectrogramFoldersContainsX": "Folder \"Waveforms\" dan \"spectrogram\" berisi {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "Hapus file \"Waveforms\" dan \"Spectrogram\"?", "waveformGenerateSpectrogram": "Buat spektogram", "waveformAutoGenerate": "Buat bentuk gelombang otomatis saat membuka video", "waveformSpectrogramMode": "Mode spektogram", - "waveformCenterOnSingleClick": "Pusatkan saat klik tunggal", - "waveformSingleClickSelectsSubtitle": "Pilih subtitel saat klik tunggal", "waveformRightClickSelectsSubtitle": "Pilih subtitel saat klik kanan", - "waveformPauseOnSingleClick": "Jeda saat klik tunggal", "waveformDrawStyle": "Gaya gambar bentuk gelombang", "waveformExtractAudioFormat": "Format ekstrak audio", "waveformExtractAudioSampleRate": "Laju sampel ekstrak audio", "waveformExtractAudioSampleRateOriginal": "Asli (pertahankan sumber)", "waveformExtractAudioBitRate": "Laju bit ekstrak audio (MP3/M4A)", + "ffmpegUseCenterChannelOnly": "Gunakan hanya kanal tengah depan untuk audio 5.1 (FFmpeg)", "vlcWidRendering": "libVLC - Rendering ID Jendela asli", + "ffmpegSoftwareRendering": "FFmpeg", + "downloadFfmpegLibs": "Unduh pustaka FFmpeg (untuk pemutar video FFmpeg)", "subtitleGridEnterKeyAction": "Aksi tombol Enter di kisi subtitel", "subtitleSingleClickAction": "Aksi klik tunggal di kisi subtitel", "subtitleDoubleClickAction": "Aksi klik ganda di kisi subtitel", @@ -3270,6 +3657,7 @@ "subtitleGridFormattingShowFormatting": "Tampilkan pemformatan", "subtitleGridFormattingShowTags": "Tampilkan tag", "subtitleGridFormattingHideTags": "Sembunyikan tag", + "subtitleGridFormattingShowFormattingKeepTags": "Tampilkan pemformatan, pertahankan tag non-visual", "waveformParagraphBackgroundColor": "Warna latar belakang subtitel bentuk gelombang", "waveformParagraphSelectedBackgroundColor": "Warna latar belakang subtitel terpilih bentuk gelombang", "waveformAllowOverlap": "Izinkan tumpang tindih (saat memindah/mengubah ukuran)", @@ -3279,17 +3667,18 @@ "saveAsBehaviorUseVideoFileName": "Gunakan nama file video", "saveAsBehaviorUseSubtitleFileName": "Gunakan nama file subtitel", "saveAsAppendLanguageCodeTwoLetter": "Dua huruf", - "saveAsAppendLanguageCodeThreeLetter": "Tiga huruf (ISO 639-2/T)", - "saveAsAppendLanguageCodeThreeLetterBibliographic": "Tiga huruf (ISO 639-2/B)", "saveAsAppendLanguageCodeLanguageName": "Nama bahasa", "splitOddLineActionWeightTop": "Beratkan atas", "splitOddLineActionWeightBottom": "Beratkan bawah", "splitOddLinesAction": "Aksi pisah baris ganjil", "ocrUseWordSplitList": "OCR: gunakan daftar pemisahan kata", "ocrGuessUnknownWords": "OCR: coba tebak kata yang tidak dikenal", + "spellCheckRememberUseAlwaysList": "Periksa ejaan: ingat daftar \"Selalu gunakan\"", + "fixShortDisplayTimesAllowMoveStartTime": "Perbaiki kesalahan umum: perbaikan waktu tampil pendek boleh menggeser waktu mulai", "speechToTextSelectedLinesPromptFirstTimeOnly": "Ucapan ke teks: baris terpilih, tanyakan bahasa/mesin hanya pertama kali", "multipleReplaceShowDotDotDotButtons": "Penggantian ganda: tampilkan tombol menu konteks", "gridFocusTextboxAfterInsertNew": "Kisi: fokuskan kotak teks setelah menyisipkan subtitel baru", + "undoRedoGoToChangedLine": "Urungkan/ulangi: pergi ke baris yang diubah (dan posisi video)", "musicSymbol": "Simbol musik", "musicSymbolsToReplace": "Simbol musik untuk diganti (dipisahkan koma)", "textToSpeechPromptMergeContinuationLines": "Teks ke ucapan: tanyakan untuk menggabungkan baris lanjutan", @@ -3298,8 +3687,7 @@ "useFocusedButtonBackgroundColor": "Gunakan warna latar belakang tombol terfokus", "focusedButtonBackgroundColor": "Warna latar belakang tombol terfokus", "forceCrLfOnSave": "Paksa CR+LF saat menyimpan (file subtitel teks)", - "showWaveformToolbarPlayNext": "Bilah alat: tampilkan tombol putar berikutnya", - "showWaveformToolbarPlaySelection": "Bilah alat: tampilkan tombol putar seleksi", + "linuxClipboardUseExternalTool": "Salin teks via xclip/wl-copy (mempertahankan karakter beraksen)", "showFormatLimitWarning": "Peringatkan saat menyimpan bila baris melebihi batas format (mis. SCC 32 karakter/baris)", "textBoxButtonShowAutoBreak": "Kotak teks: tampilkan tombol pisah otomatis", "textBoxButtonShowUnbreak": "Kotak teks: tampilkan tombol satukan", @@ -3311,12 +3699,18 @@ "waveformDoubleClickAction": "Aksi klik ganda bentuk gelombang (setelah aksi klik tunggal)", "allSettings": "Semua pengaturan", "uiScale": "Skala UI (%)", + "fontScale": "Skala fon (%)", + "textSelectionOpacity": "Opasitas seleksi teks (%)", "waveformToolbarItems": "Item bilah alat bentuk gelombang", "matchIconColorToDarkTheme": "Samakan warna ikon dengan warna latar depan tema gelap", "subtitlePreviewProperties": "Properti pratinjau subtitel", "usePositionFromSubtitleFile": "Gunakan posisi dari file subtitel (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "Margin adalah bagian dari area subtitel", "textJustify": "Ratakan baris", + "deinterlace": "Deinterlace video", + "deinterlaceOff": "Nonaktif", + "deinterlaceAuto": "Otomatis (hanya bingkai interlaced)", + "deinterlaceAlways": "Selalu", "pixelWidthInfo": "Garis hijau = batas lebar maks | Area merah = teks melebihi batas", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3325,117 +3719,89 @@ "waveformColorTheme": "Tema warna:", "waveformSaveAsCustomTheme": "Simpan sebagai tema kustom...", "waveformLoadThemeDotDotDot": "Muat tema...", - "waveformExportThemeDotDotDot": "Ekspor tema..." + "waveformExportThemeDotDotDot": "Ekspor tema...", + "waveformSaveCustomThemeTitle": "Simpan tema kustom", + "waveformThemeFileType": "Tema bentuk gelombang Subtitle Edit", + "waveformThemeHighContrast": "Kontras Tinggi", + "waveformThemeOceanBlue": "Biru Samudra", + "waveformThemeWarmSunset": "Senja Hangat", + "waveformThemeForest": "Hutan", + "waveformThemeMidnightPurple": "Ungu Tengah Malam", + "waveformThemeRetroAmber": "Amber Retro", + "waveformThemeIce": "Es" }, "shortcuts": { - "title": "Pintasan", "searchShortcuts": "Cari pintasan...", - "filter": "Filter", - "categoryGeneral": "Umum", "categorySubtitleGridAndTextBox": "Tampilan daftar subtitel & kotak teks", "categorySubtitleGrid": "Tampilan daftar subtitel", - "categoryWaveform": "Bentuk gelombang", "categoryTextBox": "Kotak teks", "categoryFile": "File", "categoryVideo": "Video", "categorySync": "Sinkronisasi", - "categoryTranslate": "Terjemahkan", - "categorySearch": "Pencarian", - "categoryTools": "Alat", "categoryAi": "AI", + "categoryCustom": "Kustom", + "editCustomShortcut": "Edit pintasan kustom", + "customShortcutTextBoxKeyHint": "Gunakan tombol dengan Ctrl/Alt di sini - tombol biasa tidak akan lagi mengetik di kotak teks.", + "customShortcutNumberX": "Pintasan kustom #{0}", + "customShortcutNumberXY": "Pintasan kustom #{0}: {1}", + "customShortcutStep": "Langkah", + "customShortcutSteps": "Langkah-langkah", + "customShortcutStepRunCommand": "Jalankan perintah", + "customShortcutStepInsertText": "Sisipkan teks", + "customShortcutStepReplace": "Cari dan ganti", + "customShortcutInsertAtCursor": "Di kursor", + "customShortcutInsertAtStart": "Di awal teks", + "customShortcutInsertAtEnd": "Di akhir teks", + "customShortcutSummaryRunCommandX": "Jalankan: {0}", + "customShortcutSummaryInsertXY": "Sisipkan \"{0}\" ({1})", + "customShortcutSummaryReplaceXY": "Ganti \"{0}\" dengan \"{1}\"", + "customShortcutSummaryReplaceRegexXY": "Ganti regex \"{0}\" dengan \"{1}\"", + "customShortcutPickCommand": "Silakan pilih perintah untuk dijalankan.", + "customShortcutEnterText": "Silakan masukkan teks untuk disisipkan.", + "customShortcutEnterFind": "Silakan masukkan teks yang dicari.", + "customShortcutInvalidRegexX": "Ekspresi reguler tidak valid: {0}", + "customShortcutStepsHint": "Langkah dijalankan dari atas ke bawah. Langkah teks bekerja pada baris terpilih; perintah yang membuka jendela berlanjut setelah jendela ditutup.", "activeIn": "Aktif di", "activeInEverywhere": "Di mana saja", - "generalSetupLikeSe4": "Atur seperti Subtitle Edit 4 (tema, pintasan, aturan penggantian)", - "generalMergeSelectedLines": "Gabungkan baris terpilih", - "generalMergeWithPrevious": "Gabungkan dengan sebelumnya", - "generalMergeWithNext": "Gabungkan dengan berikutnya", - "generalMergeWithPreviousAndUnbreak": "Gabungkan dengan sebelumnya dan satukan", - "generalMergeWithNextAndUnbreak": "Gabungkan dengan berikutnya dan satukan", - "generalMergeWithPreviousAndAutoBreak": "Gabungkan dengan sebelumnya dan pisah otomatis", - "generalMergeWithNextAndAutoBreak": "Gabungkan dengan berikutnya dan pisah otomatis", - "generalMergeSelectedLinesAndAutoBreak": "Gabungkan baris terpilih dan pisah otomatis", "generalMergeSelectedLinesAndUnbreak": "Gabungkan baris terpilih dan satukan", "generalMergeSelectedLinesAndUnbreakCjk": "Gabungkan baris terpilih dan satukan tanpa spasi (CJK)", "generalUnbreakNoSpaceCjk": "Satukan tanpa spasi (CJK)", - "generalMergeSelectedLinesOnlyFirstText": "Gabungkan baris terpilih hanya teks pertama", + "generalToggleBreak": "Alihkan pisah/satukan baris", "generalMergeSelectedLinesBilingual": "Gabungkan baris terpilih dwibahasa", - "generalMergeWithPreviousBilingual": "Gabungkan dengan sebelumnya dwibahasa", - "generalMergeWithNextBilingual": "Gabungkan dengan berikutnya dwibahasa", - "generalMergeOriginalAndTranslation": "Gabungkan asli dan terjemahan", "generalToggleTranslationMode": "Alihkan mode terjemahan", - "generalSwitchOriginalAndTranslation": "Tukar asli dan terjemahan", - "generalSwitchOriginalAndTranslationTextBoxes": "Tukar kotak teks asli dan terjemahan", "generalToggleTranslationAndOriginalInPreviews": "Alihkan terjemahan dan asli pada pratinjau video/audio", "generalChooseLayout": "Pilih tata letak", - "generalLayoutChooseX": "Tata letak {0}", - "generalPlayFirstSelected": "Putar yang pertama terpilih", - "generalGoToFirstSelectedLine": "Pergi ke baris terpilih pertama", - "generalGoToNextEmptyLine": "Pergi ke baris kosong berikutnya", "generalGoToNextSubtitle": "Pergi ke subtitel berikutnya", "generalGoToNextSubtitlePlayTranslate": "Pergi ke subtitel berikutnya (putar terjemahan)", "generalGoToNextSubtitleCursorAtEnd": "Pergi ke subtitel berikutnya (kursor di akhir)", "generalGoToPrevSubtitle": "Pergi ke subtitel sebelumnya", "generalGoToPrevSubtitlePlayTranslate": "Pergi ke subtitel sebelumnya (putar terjemahan)", - "generalGoToStartOfCurrentSubtitle": "Pergi ke awal subtitel saat ini", - "generalGoToEndOfCurrentSubtitle": "Pergi ke akhir subtitel saat ini", - "generalGoToPreviousSubtitleAndFocusVideo": "Pergi ke subtitel sebelumnya dan fokuskan video", - "generalGoToNextSubtitleAndFocusVideo": "Pergi ke subtitel berikutnya dan fokuskan video", - "generalGoToPrevSubtitleAndPlay": "Pergi ke subtitel sebelumnya dan putar", - "generalGoToNextSubtitleAndPlay": "Pergi ke subtitel berikutnya dan putar", - "generalGoToPreviousSubtitleAndFocusWaveform": "Pergi ke subtitel sebelumnya dan fokuskan bentuk gelombang", - "generalGoToNextSubtitleAndFocusWaveform": "Pergi ke subtitel berikutnya dan fokuskan bentuk gelombang", - "generalGoToLineNumber": "Pergi ke nomor baris", "generalGoToFirstLine": "Pergi ke baris pertama", "generalGoToLastLine": "Pergi ke baris terakhir", "alsoSetVideoPosition": "Atur juga posisi video", "generalGoToVideoPosition": "Pergi ke posisi video", "generalToggleItalic": "Alihkan miring", "generalToggleBold": "Alihkan tebal", - "generalToggleBookmarks": "Alihkan markah", - "generalFocusTextBox": "Fokuskan kotak teks", - "generalToggleBookmarksWithText": "Alihkan markah dengan teks", - "generalEditBookmarks": "Edit markah", - "fileNew": "Baru", "generalToggleUnderline": "Alihkan garis bawah", + "generalToggleBox": "Alihkan kotak (EBU STL)", "fileOpen": "Buka", "fileOpenKeepVideo": "Buka (pertahankan video)", "fileSave": "Simpan", "fileSaveAs": "Simpan sebagai", - "fileSaveAll": "Simpan semua", "fileSaveOriginal": "Simpan asli", - "fileSaveOriginalAs": "Simpan asli sebagai", - "fileOpenOriginalSubtitle": "Buka subtitel asli", - "fileCloseOriginalSubtitle": "Tutup subtitel asli", - "fileTranslatedSubtitle": "Subtitel terjemahan", "fileCompare": "Bandingkan", "fileStatistics": "Statistik", "fileImportPlainText": "Impor teks polos", - "fileImportBluRaySupForOcr": "Impor Blu-ray SUP untuk OCR", - "fileImportBluRaySupForEdit": "Impor Blu-ray SUP untuk diedit", - "fileImportTimeCodes": "Impor kode waktu", "fileExportEbuStl": "Ekspor EBU STL", "fileExportPac": "Ekspor PAC", - "fileExportEdlClipName": "Ekspor nama klip EDL", - "fileExportPlainText": "Ekspor teks polos", - "fileExportCustomTextFormat1": "Ekspor format teks kustom 1", - "fileExportCustomTextFormat2": "Ekspor format teks kustom 2", - "fileExportCustomTextFormat3": "Ekspor format teks kustom 3", "fileExit": "Keluar", "openSeDataFolder": "Buka folder Subtitle Edit", - "editFind": "Cari", - "editFindNext": "Cari berikutnya", "editFindPrevious": "Cari sebelumnya", - "editReplace": "Ganti", - "editMultipleReplace": "Penggantian ganda", "fillSelectedLinesWithClipboard": "Isi baris terpilih dengan teks papan klip", - "editModifySelection": "Ubah seleksi", - "listSelectAll": "Pilih semua", - "listSelectFirst": "Pilih pertama", - "listSelectLast": "Pilih terakhir", "listInverseSelection": "Balikkan seleksi", "listDeleteSelection": "Hapus seleksi", + "deleteSelectionEverywhere": "Hapus seleksi (di mana saja)", "rippleDeleteSelection": "Hapus seleksi secara ripple", - "settings": "Pengaturan", "assigned": "Ditetapkan", "unassigned": "Belum ditetapkan", "pressedKeyX": "Tombol ditekan: {0}", @@ -3443,6 +3809,7 @@ "detectKey": "Deteksi tombol", "control": "Control", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Shift", "controlMac": "⌃", @@ -3453,11 +3820,14 @@ "resetShortcutsDetail": "Apakah Anda ingin mengatur ulang semua pintasan ke nilai default?", "togglePlayPause": "Alihkan putar/jeda", "toggleLockTimeCodes": "Alihkan kunci kode waktu", + "toggleTimeCodeMode": "Alihkan mode kode waktu (waktu/bingkai/nomor bingkai)", + "toggleScreenPrivacy": "Alihkan privasi layar (sembunyikan nama file, lalu juga teks)", + "screenPrivacyFileNamesHidden": "Privasi layar: nama file disembunyikan", + "screenPrivacyFileNamesAndTextsHidden": "Privasi layar: nama file dan teks disembunyikan", + "screenPrivacyOff": "Privasi layar: nonaktif", "duplicateSelectedLines": "Duplikat baris terpilih", "sourceView": "Tampilan sumber", - "showAlignmentPicker": "Perataan", "addOrEditBookmark": "Tambah atau edit markah", - "listBookmarks": "Daftar markah", "toggleBookmark": "Alihkan markah (baris terpilih, tanpa teks)", "toggleForcedSelectedLines": "Alihkan paksa (baris terpilih)", "goToNextBookmark": "Pergi ke markah berikutnya", @@ -3468,12 +3838,12 @@ "waveformSetStartAndSetEndOfPreviousMinusGap": "Atur awal dan atur akhir sebelumnya dikurangi jeda", "waveformSetEndAndStartOfNextAfterGap": "Atur akhir dan awal berikutnya ditambah jeda", "waveformSetEndAndStartOfNextAfterGapAndGoToNext": "Atur akhir dan awal berikutnya ditambah jeda, lalu ke berikutnya", - "fetchFirstWordFromNextSubtitle": "Ambil kata pertama dari subtitel berikutnya", "moveLastWordToNextSubtitle": "Pindahkan kata terakhir ke subtitel berikutnya", "moveLastWordFromFirstLineDownCurrentSubtitle": "Pindahkan kata terakhir baris pertama ke bawah (subtitel saat ini)", "moveFirstWordFromNextLineUpCurrentSubtitle": "Pindahkan kata pertama baris berikutnya ke atas (subtitel saat ini)", "moveTextFromCursorToNextAndGoToNext": "Pindahkan teks setelah posisi kursor ke subtitel berikutnya lalu ke berikutnya", "moveTextFromCursorToNextAndGoToNextAndPlay": "Pindahkan teks setelah posisi kursor ke subtitel berikutnya, ke berikutnya dan putar", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "Pindahkan teks setelah posisi kursor ke subtitel berikutnya, pergi ke berikutnya, putar dan jeda di akhirnya", "breakAtFirstSpaceFromCursor": "Pisah pada spasi pertama dari posisi kursor", "breakAtFirstSpaceFromCursorAndGoToNext": "Pisah pada spasi pertama dari posisi kursor dan pergi ke berikutnya", "toggleFocusGridAndWaveform": "Alihkan fokus antara kisi subtitel dan bentuk gelombang/spektogram", @@ -3485,7 +3855,6 @@ "videoGoToPreviousTimeCode": "Pergi ke kode waktu sebelumnya", "videoGoToNextTimeCode": "Pergi ke kode waktu berikutnya", "goToNextLineAndSetVideoPosition": "Pergi ke subtitel berikutnya dan atur posisi video", - "textBoxDeleteSelectionNoClipboard": "Kotak teks: Hapus seleksi (tanpa papan klip)", "textBoxDeleteForward": "Kotak teks: Hapus seleksi atau karakter berikutnya (hapus maju)", "textBoxCut": "Kotak teks: Potong", "textBoxCut2": "Kotak teks: Potong (alternatif)", @@ -3504,6 +3873,7 @@ "listViewColumnTextUp": "Kolom, teks ke atas", "listViewColumnTextDown": "Kolom, teks ke bawah", "autoTranslateSelectedLines": "Terjemahkan otomatis baris terpilih...", + "autoTranslateSelectedLinesNoPrompt": "Terjemahan otomatis baris terpilih (tanpa konfirmasi, gunakan mesin/bahasa terakhir)", "setAssaResolution": "Atur resolusi ASSA (PlayResX/PlayResY)", "setShortcutForX": "Atur pintasan untuk \"{0}\"", "commandFileNewKeepVideo": "Baru (pertahankan video)", @@ -3511,29 +3881,22 @@ "fileCloseOriginal": "Tutup asli", "fileCloseTranslation": "Tutup terjemahan", "restoreAutoBackup": "Pulihkan cadangan otomatis", - "openContainingFolder": "Buka folder berisi file", "importTimeCodes": "Impor kode waktu", "importSubtitleWithManuallyChosenEncoding": "Impor subtitel dengan pengodean yang dipilih manual", "exportBluRaySup": "Ekspor Blu-ray SUP", "exportCustomTextFormat": "Ekspor format teks kustom", "exportPlainText": "Ekspor teks polos", - "showHistory": "Tampilkan riwayat", "toggleRightToLeft": "Alihkan kanan-ke-kiri", "modifySelection": "Ubah seleksi", "adjustDurations": "Sesuaikan durasi", "applyDurationLimits": "Terapkan batas durasi", "batchConvert": "Konversi batch", - "bridgeGaps": "Jembatani jeda", "applyMinGap": "Terapkan jeda min", - "fixCommonErrors": "Perbaiki kesalahan umum", "makeEmptyTranslationFromCurrentSubtitle": "Buat terjemahan kosong dari subtitel saat ini", - "mergeLinesWithSameText": "Gabungkan baris dengan teks yang sama", - "mergeLinesWithSameTimeCodes": "Gabungkan baris dengan kode waktu yang sama", "splitBreakLongLines": "Pisah/seimbangkan baris panjang", "mergeShortLines": "Gabungkan baris pendek", "mergeContinuationLines": "Gabungkan baris lanjutan", "snapAllTimesToFrames": "Jajarkan semua waktu ke bingkai", - "removeTextForHearingImpaired": "Hapus teks untuk tunarungu", "joinSubtitles": "Satukan subtitel", "splitSubtitle": "Pisah subtitel", "spellCheck": "Periksa ejaan", @@ -3555,7 +3918,6 @@ "adjustAllTimes": "Sesuaikan semua waktu", "visualSync": "Sinkronisasi visual", "translateViaCopyPaste": "Terjemahkan via salin-tempel", - "shortcuts": "Pintasan", "wordLists": "Daftar kata", "chooseUiLanguage": "Pilih bahasa UI", "chooseRuleProfile": "Pilih profil aturan", @@ -3566,6 +3928,7 @@ "textBoxItalic": "Kotak teks miring", "textBoxBold": "Kotak teks tebal", "textBoxUnderline": "Kotak teks garis bawah", + "textBoxBox": "Kotak teks kotak (EBU STL)", "resetWaveformZoomAndSpeed": "Atur ulang zoom bentuk gelombang dan kecepatan pemutaran (laju putar)", "togglePlaybackSpeed": "Alihkan kecepatan pemutaran (laju putar)", "playbackSpeedSlower": "Kecepatan pemutaran lebih lambat (laju putar)", @@ -3577,22 +3940,28 @@ "seekSilenceForward": "Cari keheningan maju", "waveformGuessStart": "Tebak waktu mulai dari bentuk gelombang", "waveformGuessEnd": "Tebak waktu selesai dari bentuk gelombang", + "waveformGuessStartAndEnd": "Tebak waktu mulai dan akhir dari bentuk gelombang", "setVideoPositionCurrentSubtitleStart": "Atur posisi video ke awal baris saat ini", "goToSubtitlePositionAndPause": "Pergi ke posisi subtitel dan jeda", "setVideoPositionCurrentSubtitleEnd": "Atur posisi video ke akhir baris saat ini", "toggleAudioTracks": "Alihkan trek audio", - "listErrors": "Daftar kesalahan", "goToNextError": "Pergi ke kesalahan berikutnya", "goToPreviousError": "Pergi ke kesalahan sebelumnya", "addNameToNameList": "Tambahkan nama ke daftar nama", "findDoubleWords": "Cari kata ganda", "findDoubleLines": "Cari baris ganda", "colorX": "Warna {0}", - "removeColor": "Hapus warna", "surroundWith": "Kelilingi dengan...", "surroundWithXY": "Kelilingi dengan {0}/{1}", - "repeatLine": "Ulangi baris", "surroundWithNumberX": "Kelilingi dengan #{0}", + "surroundWithBehavior": "Perilaku", + "surroundWithBehaviorToggle": "Alihkan (tambah, atau hapus jika ada)", + "surroundWithBehaviorAdd": "Tambah (setiap kali)", + "surroundWithBehaviorRemove": "Hapus (semua)", + "surroundWithBehaviorRemoveOnce": "Hapus (satu setiap kali)", + "surroundWithWorksOn": "Bekerja pada", + "surroundWithScopeSelectionOrText": "Seleksi, jika tidak seluruh teks", + "surroundWithScopeEachLine": "Setiap baris", "searchVia": "Cari via", "searchViaX": "Cari via {0}", "searchViaNumberX": "Cari via #{0}", @@ -3620,6 +3989,11 @@ "copySubtitlePathToClipboard": "Salin jalur subtitel ke papan klip", "copySubtitleOriginalPathToClipboard": "Salin jalur subtitel asli ke papan klip", "focusTextBox": "Fokuskan kotak teks", + "focusSubtitleListView": "Fokuskan tampilan daftar subtitel", + "focusWaveform": "Fokuskan bentuk gelombang", + "focusOriginalTextBox": "Fokuskan kotak teks asli", + "textBoxGoToStart": "Kotak teks, pergi ke awal", + "textBoxGoToEnd": "Kotak teks, pergi ke akhir", "sortByNumber": "Urutkan berdasarkan nomor", "sortByStartTime": "Urutkan berdasarkan waktu \"Tampil\"", "sortByEndTime": "Urutkan berdasarkan waktu \"Selesai\"", @@ -3644,7 +4018,6 @@ "assaStyles": "ASSA Gaya", "assaProperties": "ASSA Properti", "assaAttachments": "ASSA Lampiran", - "assaVideoColorPicker": "ASSA Pemilih warna video", "recalculateDurationSelectedLines": "Hitung ulang durasi (baris terpilih)", "setDurationMaxCpsSelectedLines": "Atur durasi ke CPS maks (baris terpilih)", "toggleWaveformAndSpectrogramHeight": "Alihkan tinggi terbagi bentuk gelombang/spektogram", @@ -3658,9 +4031,9 @@ "selectionToSentenceCase": "Kotak teks: Seleksi ke Huruf kalimat", "selectionToggleCasing": "Kotak teks: Alihkan kapitalisasi (BESAR -> kecil -> Huruf Judul)", "googleIt": "Cari di Google (teks terpilih)", - "setActorXY": "Atur aktor {0}: {1}", + "setActorX": "Atur aktor: {0}", "setNewActor": "Atur aktor baru...", - "setActorSlotXTitle": "Slot aktor {0}", + "setStyleX": "Atur gaya: {0}", "toggleDialogDashes": "Alihkan tanda hubung dialog", "mergeWithLineBeforeAsDialog": "Gabungkan dengan baris sebelumnya sebagai dialog", "mergeWithLineAfterAsDialog": "Gabungkan dengan baris sesudahnya sebagai dialog", @@ -3671,13 +4044,27 @@ "moveStartOneFrameBackKeepGapPrev": "Geser awal satu bingkai mundur (pertahankan jeda ke sebelumnya jika dekat)", "moveStartOneFrameForwardKeepGapPrev": "Geser awal satu bingkai maju (pertahankan jeda ke sebelumnya jika dekat)", "moveEndOneFrameBackKeepGapNext": "Geser akhir satu bingkai mundur (pertahankan jeda ke berikutnya jika dekat)", - "moveEndOneFrameForwardKeepGapNext": "Geser akhir satu bingkai maju (pertahankan jeda ke berikutnya jika dekat)" + "moveEndOneFrameForwardKeepGapNext": "Geser akhir satu bingkai maju (pertahankan jeda ke berikutnya jika dekat)", + "moveStartXMsBack": "Geser awal X ms mundur (X diatur di Pengaturan, juga di Sinkronisasi Visual)", + "moveStartXMsForward": "Geser awal X ms maju (X diatur di Pengaturan, juga di Sinkronisasi Visual)", + "moveEndXMsBack": "Geser akhir X ms mundur (X diatur di Pengaturan, juga di Sinkronisasi Visual)", + "moveEndXMsForward": "Geser akhir X ms maju (X diatur di Pengaturan, juga di Sinkronisasi Visual)", + "moveSelectedLinesXMsBack": "Geser baris terpilih X ms mundur (X diatur di Pengaturan)", + "moveSelectedLinesXMsForward": "Geser baris terpilih X ms maju (X diatur di Pengaturan)", + "moveSelectedLinesAndForwardXMsBack": "Geser baris terpilih dan semua berikutnya X ms mundur (X diatur di Pengaturan)", + "moveSelectedLinesAndForwardXMsForward": "Geser baris terpilih dan semua berikutnya X ms maju (X diatur di Pengaturan)", + "moveAllLinesXMsBack": "Geser semua baris X ms mundur (X diatur di Pengaturan)", + "moveAllLinesXMsForward": "Geser semua baris X ms maju (X diatur di Pengaturan)", + "moveSelectedLinesCustomMsBack": "Geser baris terpilih, milidetik kustom ({0:#,###,##0}) mundur, {1}", + "moveSelectedLinesCustomMsForward": "Geser baris terpilih, milidetik kustom ({0:#,###,##0}) maju, {1}", + "moveSelectedLinesAndForwardCustomMsBack": "Geser baris terpilih dan semua berikutnya, milidetik kustom ({0:#,###,##0}) mundur, {1}", + "moveSelectedLinesAndForwardCustomMsForward": "Geser baris terpilih dan semua berikutnya, milidetik kustom ({0:#,###,##0}) maju, {1}", + "moveAllLinesCustomMsBack": "Geser semua baris, milidetik kustom ({0:#,###,##0}) mundur, {1}", + "moveAllLinesCustomMsForward": "Geser semua baris, milidetik kustom ({0:#,###,##0}) maju, {1}" }, "wordLists": { "title": "Daftar kata", "addName": "Tambah nama", - "addWord": "Tambah kata", - "addPair": "Tambah pasangan", "nameAndIgnoreList": "Daftar nama/abaikan", "userWords": "Daftar kata pengguna", "ocrFixList": "Daftar perbaikan OCR", @@ -3694,7 +4081,6 @@ "noPluginsInstalled": "Tidak ada plugin terpasang", "getPluginsOnline": "Dapatkan plugin daring...", "getPluginsTitle": "Dapatkan plugin", - "enabled": "Diaktifkan", "disabled": "Dinonaktifkan", "notSupportedOnThisOs": "Tidak didukung di sistem operasi ini", "removePluginXConfirm": "Hapus plugin '{0}'? Ini menghapus folder plugin:{1}", @@ -3711,17 +4097,19 @@ "downloadingXPercent": "Mengunduh {0}%...", "pluginXInstalled": "'{0}' terpasang.", "couldNotInstallPluginX": "Tidak dapat memasang '{0}': {1}", - "notInstalled": "Tidak terpasang", "install": "Pasang", "reinstall": "Pasang ulang", - "update": "Perbarui", "installedX": "Terpasang ({0})", "updateAvailableXToY": "Pembaruan tersedia ({0} → {1})", "applyPluginToWhichLinesX": "Terapkan '{0}' ke:", "applyToSelectedLinesX": "Baris terpilih ({0})", "applyToAllLinesX": "Semua baris ({0})", "updateAllXAvailable": "Perbarui semua ({0})", - "updatingXOfY": "Memperbarui {0}/{1}..." + "updatingXOfY": "Memperbarui {0}/{1}...", + "doNotAskAgain": "Jangan tanya lagi (ubah di Kelola plugin)", + "applyPluginsTo": "Terapkan plugin ke", + "askEachTime": "Tanyakan setiap kali", + "allLines": "Semua baris" }, "help": { "aboutSubtitleEdit": "Tentang Subtitle Edit", @@ -3765,6 +4153,8 @@ "nOcrDatabase": "Basis data nOCR", "drawMode": "Mode gambar:", "addNewCharcter": "Tambah karakter baru", + "addNOcrCharacterTitle": "Tambah karakter nOCR untuk baris {0}, karakter {1} dari {2} menggunakan basis data \"{3}\"", + "addBinaryOcrCharacterTitle": "Tambah karakter binary OCR untuk baris {0}, karakter {1} dari {2} menggunakan basis data \"{3}\"", "lineIndexX": "Baris {0}", "inspectNOcrAdditions": "Periksa penambahan nOCR baru", "ocrSelectedLines": "OCR baris terpilih", @@ -3813,6 +4203,8 @@ "binaryImageCompareInspectImageMatches": "\"Perbandingan gambar biner\" - Periksa kecocokan gambar", "saveBlankTextTitle": "Simpan teks kosong?", "saveBlankTextPrompt": "Simpan teks kosong untuk gambar?", + "drawnLinesDoNotMatchTitle": "Garis tidak cocok dengan gambar", + "drawnLinesDoNotMatchPrompt": "Beberapa garis yang digambar tidak cocok dengan gambar (garis hijau harus berada di karakter, garis merah harus di luarnya), sehingga karakter ini tidak akan dikenali.\n\nTetap simpan?", "yesAndNeverAskAgain": "Ya dan jangan tanya lagi", "importTextFromSubtitleDotDotDot": "Impor teks dari subtitel...", "importTextFromSubtitleOverwritePrompt": "Beberapa baris sudah memiliki teks OCR. Timpa teks yang ada?", @@ -3838,7 +4230,6 @@ "vobSubColorsTitle": "Warna VobSub/DVD", "vobSubColorsHeader": "Sesuaikan empat warna VobSub", "vobSubColorsDescription": "Subtitel VobSub/DVD menggunakan empat warna berindeks: latar belakang, pola, penekanan 1, dan penekanan 2. Pilih setiap warna di bawah untuk menimpa palet tersemat - berguna ketika warna asli memberikan kontras OCR yang buruk.", - "vobSubColorBackground": "Latar belakang", "vobSubColorPattern": "Pola", "vobSubColorEmphasis1": "Penekanan 1", "vobSubColorEmphasis2": "Penekanan 2", @@ -3872,9 +4263,26 @@ "crispEmbedSettingsTitle": "Pengaturan CrispEmbed", "crispEmbedDescription": "Mesin OCR lokal dengan beberapa backend model - unduh mesin dan modelnya di sini.", "trainNOcrDatabase": "Latih basis data nOCR...", + "optimizeNOcrDatabase": "Optimalkan basis data nOCR...", + "optimizeNOcrDatabaseQuestionXY": "Hapus garis yang tidak membedakan karakter dari karakter serupa di basis data nOCR \"{0}\"?\n\nIni membuat basis data lebih kecil dan OCR lebih cepat, biasanya dengan lebih sedikit kesalahan. Memakan waktu hingga satu menit.\n\nCadangan disimpan sebagai \"{1}\".", + "optimizingNOcrDatabaseXY": "Mengoptimalkan basis data nOCR... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "Basis data nOCR \"{0}\" dioptimalkan: {1:#,##0} -> {2:#,##0} garis.", "startTraining": "Mulai pelatihan", "abortTraining": "Batalkan pelatihan", "trainingOptions": "Opsi pelatihan", + "trainNOcrSubtitle": "Merender karakter dalam fon yang terpasang dan mengajari nOCR bentuknya. Pilih fon yang digunakan subtitel Anda.", + "xFontsSelected": "{0:#,##0} terpilih", + "subtitleFonts": "Fon subtitel", + "emptyDatabase": "Basis data kosong", + "startFromDatabase": "Mulai dari", + "startFromDatabaseHint": "Tambahkan karakter yang dilatih ke salinan basis data yang ada (disarankan) atau mulai dari basis data kosong", + "fontSizes": "Ukuran fon", + "fontSizesHint": "Ukuran fon dalam piksel untuk dirender, dipisahkan koma, mis. \"30, 40\"", + "numberOfLineSegmentsHint": "Garis yang diperiksa per karakter - lebih banyak lebih ketat tetapi lebih lambat", + "enterDatabaseName": "Masukkan nama untuk basis data", + "trainingFontXSizeYCharacterZ": "Melatih \"{0}\" pada {1} px: {2}", + "xLearned": "{0:#,##0} dipelajari", + "xSkipped": "{0:#,##0} dilewati", "charactersToTrain": "Karakter yang dilatih", "letterCombinationsToTrain": "Kombinasi huruf yang mungkin terpisah menjadi satu gambar", "importCharactersFromSubtitleFile": "Impor karakter dari file subtitel...", @@ -3901,6 +4309,8 @@ "drawZoomOut": "Zoom Keluar (Ctrl+-)", "drawResetView": "Atur Ulang Tampilan (Ctrl+0)", "drawToggleGrid": "Alihkan Kisi (Ctrl+G)", + "drawTogglePreview": "Alihkan pratinjau (F9)", + "drawPreviewFailed": "Pratinjau gagal - diperlukan ffmpeg dengan libass (filter subtitles)", "drawCopyToClipboard": "Salin ke Papan Klip (Ctrl+C)", "drawShapes": "Bentuk", "drawSelectedPoint": "Titik terpilih", @@ -3908,16 +4318,86 @@ "drawSelectedLayer": "Lapisan terpilih", "drawToolX": "Alat: {0}", "drawHelpText": "Klik untuk menambah titik • Enter/F8 untuk menutup bentuk • Shift+Seret untuk menggeser • Ctrl+Gulir untuk zoom", + "drawMoveToLayer": "Pindahkan ke lapisan", + "drawFlipHorizontal": "Balik horizontal", + "drawFlipVertical": "Balik vertikal", + "drawHideShape": "Sembunyikan bentuk", + "drawShowShape": "Tampilkan bentuk", + "drawHideLayer": "Sembunyikan lapisan", + "drawShowLayer": "Tampilkan lapisan", + "drawDeleteLayer": "Hapus lapisan", + "drawDeletePoint": "Hapus titik", + "drawCancelDrawing": "Batalkan menggambar", + "drawLayerX": "Lapisan {0}", + "drawImportSvg": "Impor gambar SVG...", + "drawRotateClockwise": "Putar 90° searah jarum jam", + "drawConvertToCurve": "Konversi segmen menjadi kurva", + "drawBackground": "Latar belakang", + "drawPosition": "Posisi", + "drawZoom": "Zoom", + "drawShapeTool": "Alat bentuk", + "drawColorPickerTool": "Ambil warna dari bentuk atau latar belakang", + "drawShapeLibrary": "Pustaka bentuk", + "drawShapeLibraryHint": "Seret di kanvas untuk menempatkan bentuk, atau klik untuk ukuran baku. Shift mempertahankan proporsinya.", + "drawAddToLibrary": "Tambahkan ke pustaka bentuk...", + "drawRemoveFromLibrary": "Hapus dari pustaka bentuk", + "drawShapeName": "Nama bentuk", + "drawCategorySpeechBubbles": "Balon ucapan", + "drawCategoryArrows": "Panah", + "drawCategoryBasicShapes": "Bentuk dasar", + "drawCategorySymbols": "Simbol", + "drawCategoryMyShapes": "Bentuk saya", + "drawShapeSpeechBubble": "Balon ucapan", + "drawShapeSpeechBubbleRight": "Balon ucapan, ekor ke kanan", + "drawShapeSpeechBubbleUp": "Balon ucapan, ekor ke atas", + "drawShapeOvalBubble": "Balon ucapan oval", + "drawShapeBoxBubble": "Balon ucapan kotak", + "drawShapeThoughtBubble": "Balon pikiran", + "drawShapeShoutBubble": "Balon teriakan", + "drawShapeCaptionBox": "Kotak keterangan", + "drawShapeArrow": "Panah", + "drawShapeDoubleArrow": "Panah ganda", + "drawShapeChevron": "Chevron", + "drawShapeCurvedArrow": "Panah melengkung", + "drawShapeRoundedRectangle": "Persegi panjang membulat", + "drawShapeTriangle": "Segitiga", + "drawShapeDiamond": "Belah ketupat", + "drawShapePentagon": "Segi lima", + "drawShapeHexagon": "Segi enam", + "drawShapeOctagon": "Segi delapan", + "drawShapeStar": "Bintang", + "drawShapeRing": "Cincin", + "drawShapePlus": "Plus", + "drawShapeBanner": "Spanduk", + "drawShapeHeart": "Hati", + "drawShapeCheck": "Tanda centang", + "drawShapeMusicNote": "Not musik", + "drawShapeMusicNotes": "Not-not musik", + "drawShapeLightning": "Petir", + "drawShapeCloud": "Awan", + "drawShapeMoon": "Bulan", + "drawShapeBadge": "Lencana", + "drawSize": "Ukuran", + "drawLayer": "Lapisan", + "drawBackgroundVideoFrame": "Bingkai video (posisi saat ini)", + "drawBackgroundVideoFrameAt": "Bingkai video pada...", + "drawBackgroundImage": "File gambar...", + "drawBackgroundNone": "Tanpa latar belakang", + "drawBackgroundStretch": "Rentangkan gambar ke kanvas", + "drawBackgroundOpacity": "Opasitas latar belakang", + "drawBackgroundVideoFrameFailed": "Tidak dapat mengambil bingkai video pada {0}.", + "drawImages": "Gambar", + "drawConvertToLine": "Konversi segmen menjadi garis", + "drawConvertShapeToCurves": "Konversi semua garis menjadi kurva", + "drawConvertShapeToLines": "Konversi semua kurva menjadi garis", + "drawRotateCounterClockwise": "Putar 90° berlawanan arah jarum jam", + "drawSvgImages": "Gambar SVG", + "drawSvgNoShapes": "Tidak ditemukan bentuk terisi atau goresan dalam file SVG.", "progressBarTitle": "Bilah progres ASSA", "progressBarSettings": "Bilah progres", - "progressBarPosition": "Posisi", - "progressBarBottom": "Bawah", - "progressBarTop": "Atas", "mouseOverColor": "Warna saat kursor di atas", "clickedColor": "Warna saat diklik", "progressBarForeColor": "Warna latar depan", - "progressBarBackColor": "Warna latar belakang", - "progressBarStyle": "Gaya", "progressBarSquareCorners": "Sudut persegi", "progressBarRoundedCorners": "Sudut membulat", "progressBarChapters": "Bab", @@ -3926,8 +4406,6 @@ "progressBarXAdjustment": "Penyesuaian X", "progressBarYAdjustment": "Penyesuaian Y", "progressBarTextAlignment": "Perataan teks", - "progressBarTakePosFromVideo": "Ambil posisi dari video", - "progressBarPreview": "Pratinjau", "fontCollectorTitle": "Pengumpul fon", "fontCollectorUsedIn": "Digunakan di", "fontCollectorFontFiles": "File fon", @@ -3974,9 +4452,7 @@ "resolutionResamplerVideoDiffers": "Resolusi subtitel ({0}x{1}) berbeda dari resolusi video ({2}x{3}).\nUbah subtitel agar cocok dengan video?", "resolutionResamplerAskOnVideoOpen": "Tanyakan saat video dengan resolusi berbeda dibuka", "backgroundBoxGenerator": "Buat kotak latar belakang", - "backgroundBoxPadding": "Padding", "backgroundBoxFillWidth": "Isi lebar", - "backgroundBoxBoxColor": "Warna kotak", "backgroundBoxRadius": "Radius", "backgroundBoxCircle": "Lingkaran", "backgroundBoxSpikes": "Duri", @@ -3988,12 +4464,9 @@ "backgroundBoxTornPaperDouble": "Kertas sobek (atas & bawah)", "backgroundBoxStarburst": "Ledakan bintang", "backgroundBoxScroll": "Gulungan / Perkamen", - "stylesTitle": "Gaya Advanced Sub Station Alpha", "stylesInFile": "Gaya dalam file", "stylesSaved": "Gaya disimpan", - "category": "Kategori", "allCategories": "[Semua]", - "defaultCategory": "Default", "newCategory": "Kategori baru...", "renameCategory": "Ganti nama kategori...", "deleteCategory": "Hapus kategori", @@ -4016,13 +4489,26 @@ "graphics": "Grafis", "copyToStorageStyles": "Salin ke gaya penyimpanan", "copyToFileStyles": "Salin ke gaya file", + "styleXAlreadyExistsInStorage": "Gaya bernama \"{0}\" sudah ada di penyimpanan.\n\nTimpa, atau pertahankan keduanya (salinan mendapat nama baru)?", + "styleXAlreadyExistsInFile": "Gaya bernama \"{0}\" sudah ada di file.\n\nTimpa, atau pertahankan keduanya (salinan mendapat nama baru)?", + "styleNameCannotBeEmpty": "Nama gaya tidak boleh kosong.", + "styleNameXIsUsedMoreThanOnce": "Nama gaya \"{0}\" digunakan oleh lebih dari satu gaya di file.", + "overwrite": "Timpa", + "keepBoth": "Pertahankan keduanya", + "doThisForAllConflictingStyles": "Lakukan ini untuk semua gaya yang bentrok", "setStyleAsDefault": "Jadikan gaya sebagai default", "takeUsagesFromDotDotDot": "Ambil penggunaan dari...", "replaceStyleWithDotDotDot": "Ganti gaya dengan...", "noAttachmentsFound": "Tidak ada lampiran ditemukan di file ASSA terpilih.", "deleteStyleQuestion": "Hapus gaya?", "deleteStylesQuestion": "Hapus gaya-gaya?", + "deleteXStylesQuestion": "Apakah Anda ingin menghapus {0} gaya?", + "deleteXStylesFromStorageQuestion": "Apakah Anda ingin menghapus {0} gaya dari penyimpanan?", + "deleteStyleXFromStorageQuestion": "Apakah Anda ingin menghapus gaya \"{0}\" dari penyimpanan?", + "deleteStyleXFromFileQuestion": "Apakah Anda ingin menghapus gaya \"{0}\" dari file saat ini?", "openStyleImportFile": "Buka file subtitel untuk mengimpor gaya", + "styleImportFiles": "File gaya (.ass, .sty, kategori Subtitle Edit 4 .template)", + "ssaStyleImportFiles": "File gaya (.ssa, .ass, .sty)", "primary": "Primer", "secondary": "Sekunder", "applyOverrideTags": "Terapkan tag override", @@ -4037,7 +4523,6 @@ "spaceIncrease": "Penambahan spasi", "popIn": "Muncul masuk", "spinIn": "Berputar masuk", - "playCurrent": "Putar saat ini", "setPosition": "Atur posisi", "rotation": "Rotasi", "scaleX": "Skala X", @@ -4081,10 +4566,8 @@ "advancedEffectOldMovieDescription": "Mensimulasikan proyektor film 35mm antik dengan derau, vinyet, dan goresan", "advancedEffectNeonBurst": "Ledakan neon", "advancedEffectNeonBurstDescription": "Takarir gaya 'Shorts' berenergi tinggi dengan kilau bloom neon dan animasi 'pop' skala masuk", - "advancedEffectSettings": "Pengaturan", "advancedEffectSnowFlakeCount": "Jumlah kepingan", "advancedEffectStarfieldStarCount": "Jumlah bintang", - "advancedEffectStarfieldSpeed": "Kecepatan", "advancedEffectGlitch": "Glitch", "advancedEffectGlitchDescription": "Glitch digital dengan aberasi kromatik, kilatan putih, dan lapisan distorsi", "advancedEffectBounceIn": "Pantulan masuk", @@ -4093,8 +4576,6 @@ "advancedEffectFirefliesDescription": "Titik kuning-amber bercahaya hangat melayang secara organik di layar dengan kilau berdenyut", "advancedEffectMatrix": "Matrix", "advancedEffectMatrixDescription": "Kolom karakter hijau berjatuhan dengan teks subtitel terbentuk huruf demi huruf dari hujan tersebut", - "advancedEffectAudioBars": "Bilah audio (bentuk gelombang)", - "advancedEffectAudioBarsDescription": "Bilah ekualiser beranimasi yang digerakkan bentuk gelombang audio — bilah bergulir ke kiri sebagai bentuk gelombang dan berdenyut mengikuti audio", "advancedEffectAudioPulse": "Denyut teks audio", "advancedEffectAudioPulseDescription": "Teks subtitel bercahaya dan berdenyut mengikuti volume audio — bagian hening menampilkan teks normal, puncak keras menambahkan halo berwarna dan sedikit pembesaran", "advancedEffectConfetti": "Ledakan konfeti", @@ -4108,7 +4589,6 @@ "advancedEffectFancyKaraokeGlow": "Kilau kata aktif", "advancedEffectFancyKaraokeActiveColor": "Warna aktif", "advancedEffectFancyKaraokeInactiveColor": "Warna tidak aktif", - "advancedEffectFancyKaraokeInactiveOpacity": "Keburaman tidak aktif (0-255)", "advancedEffectWordSpacingPixels": "Spasi (piksel)", "advancedEffectSlowZoomOut": "Zoom keluar lambat", "advancedEffectSlowZoomOutDescription": "Teks dimulai sedikit lebih besar dan perlahan mengecil ke ukuran normal selama durasi subtitel", @@ -4124,7 +4604,6 @@ "advancedEffectSlideInLeftDescription": "Teks masuk dari luar layar kiri, bertahan, lalu keluar kembali ke kiri", "advancedEffectSlideInRight": "Geser masuk dari kanan", "advancedEffectSlideInRightDescription": "Teks masuk dari luar layar kanan, bertahan, lalu keluar kembali ke kanan", - "advancedEffectFadeInOut": "Pudar masuk/keluar", "advancedEffectFadeInOutDescription": "Teks memudar masuk di awal dan memudar keluar di akhir setiap subtitel", "advancedEffectWordFlip3D": "Balik kata 3D", "advancedEffectWordFlip3DDescription": "Setiap kata muncul dengan balikan 3D dan pantulan elastis saat diucapkan — gaya teks 'Shorts' modern", diff --git a/src/ui/Assets/Languages/Italian.json b/src/ui/Assets/Languages/Italian.json index d0044324487..f40955c8b76 100644 --- a/src/ui/Assets/Languages/Italian.json +++ b/src/ui/Assets/Languages/Italian.json @@ -1,9 +1,47 @@ { "title": "SubtitleEdit", - "version": "v. 5.3.0-beta26", - "translatedBy": "v. 09.10.2026 di bovirus e GitGianluc", + "version": "v5.3.0", + "translatedBy": "v. 12.10.2026 di bovirus e GitGianluc", "cultureName": "it-IT", "general": { + "temperature": "Temperatura", + "preset": "Profilo", + "outputFormat": "Formato destinazione", + "other": "Altro", + "timeCodeFormat": "Formato time code", + "topBottomMargin": "Margine superiore/inferiore", + "theme": "Tema", + "brightness": "Luminosità", + "chooseColor": "Scegli colore", + "lineX": "Riga {0}", + "playLine": "Riproduci riga", + "maxLineLength": "Lunghezza massima riga", + "maxCharsPerSec": "Caratteri/sec massimi", + "maxNumberOfLines": "Numero massimo di righe", + "subtitles": "Sottotitoli", + "shotChanges": "Cambiamenti inquadratura", + "chapters": "Capitoli", + "interjections": "Interiezioni", + "blankLines": "Righe vuote", + "editWholeText": "Modifica intero testo", + "noTextInClipboard": "Nessun testo negli appunti", + "noSubtitlesFoundTitle": "Nessun sottotitolo trovato", + "replacedXOccurrences": "Sostituite {0} occorrenze", + "invalidRegularExpressionX": "Espressione regolare non valida: {0}", + "discardChangesTitle": "Vuoi eliminare le modifiche?", + "downloadingXDotDotDot": "Download di {0}...", + "importTimeCodesDotDotDot": "Importa codici temporali...", + "original": "Originale", + "nextChange": "Modifica successiva", + "previousChange": "Modifica precedente", + "changeXOfY": "Modifica {0} / {1}", + "tooLong": "Troppo lunga", + "tooShort": "Troppo corta", + "overlapping": "Sovrapposizione", + "detail": "Dettagli", + "fixOcrErrors": "Correggi errori OCR", + "runningOcrXY": "Esecuzione OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "Per usare llama.cpp è necessario scaricare il motore llama-server. Vuoi scaricarlo?", "abort": "Annulla", "actor": "Attore", "actors": "Attori", @@ -18,7 +56,7 @@ "stylePickerFilterHint": "Digita per filtrare o digita un nuovo nome stile", "stylePickerKeysHint": "Per impostare lo stile su tutte le linee selezionate premi un numero (1-9, 0).", "stylePickerNewStyleX": "Nuovo stile '{0}'", - "stylePickerNewStyleInfo": "Premi Invio per aggiungere questo stile con le impostazioni predefinite e impostarlo sulle linee selezionate. Per modificare in un secondo momento la font, i colori e la posizione usa \"Gestisci stili...\".", + "stylePickerNewStyleInfo": "Per aggiungere questo stile con le impostazioni predefinite e impostarlo sulle linee selezionate premi 'Invio'. Per modificare in un secondo momento la font, i colori e la posizione usa 'Gestisci stili...'.", "stylePickerCurrentStyleX": "Stile attuale: {0}", "stylePickerLinesUsingStyleX": "Righe che usano questo stile: {0}", "stylePickerMarginsXYZ": "Sinistra {0}, destra {1}, verticale {2}", @@ -78,7 +116,7 @@ "bdnXml8Bit": "BDN/xml 8-bit", "before": "Prima", "beginning": "Inizio", - "bluRaySup": "Blu-ray (superiore)", + "bluRaySup": "Blu-ray (sup)", "bold": "Grassetto", "bookmarkAdd": "Aggiungi segnalibro", "bookmarkAddForSelectedLinesX": "Aggiungi segnalibro per le {0} righe selezionate", @@ -595,6 +633,8 @@ "showStartColumn": "Visualizza colonna 'Inizio'.", "showHideColumn": "Visualizza colonna 'Nascondi'.", "showHistory": "Visualizza cronologia", + "clearHistory": "Cancella cronologia", + "removeFromHistory": "Rimuovi dalla cronologia", "showLayerColumn": "Visualizza colonna 'Livello'.", "showPreview": "Visualizza anteprima", "showShotChangesList": "Visualizza elenco modifiche alle riprese", @@ -890,6 +930,7 @@ "multipleReplace": "Sostituzione _multipla...", "fillSelectedLinesWithClipboard": "Riempi righe selezionate con testo degli appunti", "goToLineNumber": "_Vai alla riga numero...", + "commandPalette": "_Palette comandi...", "rightToLeftMode": "Modal_ità da Destra-a-Sinistra (DTS)", "modifySelectionDotDotDot": "Modifica _selezione...", "tools": "S_trumenti", @@ -1082,6 +1123,9 @@ "charactersPerSecond": "Caratteri/secondo: {0}", "chooseColumn": "Scegli colonna", "columnPaste": "Incolla colonna", + "commandPaletteTitle": "Palette comandi", + "commandPaletteSearchPlaceholder": "Digita per cercare i comandi...", + "commandPaletteNoCommandsFound": "Nessun comando corrispondente", "createdEmptyTranslation": "Creata traduzione vuota dal sottotitolo attuale", "deleteText": "Elimina testo", "deleteTextAndShiftCellsUp": "Elimina il testo e sposta le celle verso l'alto", @@ -1268,7 +1312,7 @@ "newLineRows": "Numero righe aggiunte da una nuova riga", "teletext": "Televideo", "useBox": "Usa casella intorno al testo", - "doubleHeight": "Per il testo usa doppia altezza ", + "doubleHeight": "Per il testo usa doppia altezza", "videoPreview": "Anteprima video", "previewFont": "Font personalizzata", "previewFontDefault": "(usa la font dell'anteprima video)", @@ -1339,7 +1383,8 @@ "forcedAlignerIsolatingSpeech": "Parlato isolato... {0}", "forcedAlignerIsolatingSpeechFailed": "Impossibile isolare il parlato: i punti finali sono stati invece impostati dal tempo di lettura.", "forcedAlignerModel": "Modello allineamento", - "forcedAlignerDownloadEngine": "Download/aggiornamento motore..." + "forcedAlignerDownloadEngine": "Download/aggiornamento motore...", + "forcedAlignerEstimatedXOfY": "Non è stato possibile allineare '{0}' righe su '{1}' che sono state posizionate in base al tempo di lettura: i relativi timecode sono solo stimati. Lo script è probabilmente più lungo di quanto detto nel video." }, "export": { "exportImagesProfiles": "Esporta profili immagini", @@ -1380,7 +1425,7 @@ "lineNumbers": "Numeri di riga", "showLineNumbers": "Visualizza numeri di riga", "addNewLineAfterLineNumber": "Dopo il numero di riga aggiungi una nuova riga", - "addNewLineAfterTimeCode": "Dopo il codice temporale aggiungi una nuova riga ", + "addNewLineAfterTimeCode": "Dopo il codice temporale aggiungi una nuova riga", "addNewLineAfterText": "Aggiungi una nuova riga dopo il testo", "addLineBetweenSubtitles": "Aggiungi una linea tra i sottotitoli", "titleExportDCinemaInteropPng": "Interoperabilità/png D-Cinema", @@ -1589,7 +1634,7 @@ "compareCurrent": "Attuale", "compareReference": "Riferimento", "compareEditable": "Modificabile", - "compareEditableHint": "Quando selezioni 'Applica' le modifiche apportate qui tornano al sottotitolo ", + "compareEditableHint": "Quando selezioni 'Applica' le modifiche apportate qui tornano al sottotitolo", "compareReadOnly": "Sola lettura", "compareTakeFromReference": "Prendi testo e tempi dal riferimento", "compareInsertFromReference": "Inserisci questa riga nel sottotitolo attuale", @@ -1853,14 +1898,14 @@ "fixDoubleApostrophes": "Sostituisci i doppi apici ('') con le doppie virgolette (\")", "fixMisreadQuotes": "Correggi gli apostrofi interpretati erroneamente come doppie virgolette (OCR, Inglese)", "addPeriods": "Aggiungi un punto dopo le righe dove la riga successiva inizia con la lettera maiuscola", - "startWithUppercaseLetterAfterParagraph": "Dopo un paragrafo inizia la riga con una lettera maiuscola ", + "startWithUppercaseLetterAfterParagraph": "Dopo un paragrafo inizia la riga con una lettera maiuscola", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Dopo un punto nel paragrafo inizia la riga con una lettera maiuscola", - "startWithUppercaseLetterAfterColon": "Dopo i due punti/punto e virgola inizia la riga con una lettera maiuscola ", + "startWithUppercaseLetterAfterColon": "Dopo i due punti/punto e virgola inizia la riga con una lettera maiuscola", "fixLowercaseIToUppercaseI": "Sostituisci la lettera minuscola 'i' da sola con 'I' (Inglese)", "fixCommonOcrErrors": "Correggi gli errori comuni OCR (usando elenco sostituzioni OCR)", "removeSpaceBetweenNumber": "Rimuovi spazio tra i numeri", "breakDialogsOnOneLine": "Dividi i dialoghi in una sola riga", - "removeDialogFirstInNonDialogs": "Per i non dialoghi rimuovi trattino iniziale nella prima riga ", + "removeDialogFirstInNonDialogs": "Per i non dialoghi rimuovi trattino iniziale nella prima riga", "normalizeStrings": "Normalizza stringhe", "fixTurkishAnsi": "Correggi lettere ANSI turco (Islandese) a Unicode", "fixDanishLetterI": "Correggi lettera danese 'i'", @@ -2443,7 +2488,7 @@ "frameRateFromVideo": "Frequenza fotogrammi video", "frameRateCurrent": "Frequenza fotogrammi attuale", "frameRateSetManually": "Frequenza fotogrammi impostata manualmente", - "frameRateUsageInfo": "Le esportazioni Blu-ray sup, BDN XML, DOST e FCP vengono scritte con questa frequenza fotogrammi.\r\nNon cambia nessuna volta: per questo usa \"Modifica frequenza fotogrammi\".", + "frameRateUsageInfo": "Le esportazioni Blu-ray sup, BDN XML, DOST e FCP vengono scritte con questa frequenza fotogrammi.\r\nNon cambia nessuna volta: per questo usa 'Modifica frequenza fotogrammi'.", "useVideoFrameRateXInsteadOfY": "La frequenza fotogrammi del video è {0}, ma i sottotitoli sono impostati su {1}.\r\nVuoi usare la frequenza fotogrammi del video ({0})?" }, "removeTextForHearingImpaired": { @@ -2687,7 +2732,7 @@ "instructionsHint": "Stile conversazione opzionale, ad es. 'Parla con voce calma e calda'. Inviato solo ai modelli che lo supportano (non tts-1/tts-1-hd)", "openAiSpeedHint": "Velocità parlato da 0,25 a 4,0 (1,0 è normale). Non tutti i modelli lo supportano.", "outputFormat": "Formato destinazione", - "outputFormatHint": "Formato audio richiesto dal server.\r\n\"Automatico\" richiede MP3 e passa a PCM per i modelli che restituiscono solo PCM (ad esempio Gemini TTS)", + "outputFormatHint": "Formato audio richiesto dal server.\r\n'Automatico' richiede MP3 e passa a PCM per i modelli che restituiscono solo PCM (ad esempio Gemini TTS)", "regenerateAudio": "Rigenera audio", "autoContinuePlaying": "Continua automaticamente la riproduzione", "playLine": "Riproduci riga", @@ -2709,7 +2754,7 @@ "importPiperVoiceTitle": "Apri modello vocale Piper (.onnx)", "piperVoiceConfigMissingTitle": "File configurazione mancante", "piperVoiceConfigMissingMessage": "Una voce Piper ha bisogno del suo file di configurazione accanto al file del modello: {0}", - "dropAudioFileHereToImportVoice": "Per importare la voce rilascia qui il file audio ", + "dropAudioFileHereToImportVoice": "Per importare la voce rilascia qui il file audio", "dropAudioFileHereHint": ".wav o .mp3", "voiceCloneTranscriptTitle": "Inserisci la trascrizione dell'audio (richiesto per la clonazione della voce)", "voiceManagerTitle": "TTS: gestione vocale", @@ -2808,6 +2853,10 @@ "removeOriginalSpeechDescription": "Mantieni la musica e gli effetti sonori del video originale ma rimuove il parlato e vi aggiunge il nuovo parlato. Impiega con una GPU circa lo stesso tempo del video stesso e molte volte di più senza GPU. Con l'audio ducking attivo, il suo volume si applica alla musica e agli effetti. Si applica solo quando il parlato viene aggiunto al file video.", "removingOriginalSpeech": "Rimozione parlato originale...", "removeOriginalSpeechFailed": "Impossibile rimuovere il parlato originale: il parlato è stato aggiunto al video senza di esso.", + "speechRemovalModel": "Modello", + "speechRemovalModelDescription": "'Migliore qualità' mantiene la maggior parte della musica e degli effetti sonori. 'Veloce' è circa tre volte più veloce, con un po' più di musica persa.", + "speechRemovalBestQuality": "Migliore qualità (Mel-Band RoFormer)", + "speechRemovalFast": "Veloce (HTDemucs)", "videoTruncatedWarning": "L'immagine nel nuovo file video si interrompe dopo '{0}', ma il video originale è lungo '{1}': l'immagine si bloccherà mentre l'audio continua.\r\nIl file è stato conservato.\r\nPer l'output di ffmpeg vedi 'error-log.txt' nella cartella dati di Subtitle Edit.", "originalVolumePercent": "% volume originale", "vadSilenceCompression": "Compressione silenzio VAD", @@ -3561,9 +3610,11 @@ "timeCodeModeTime": "Tempo (oo:mm:ss,zzz)", "timeCodeModeFrames": "Fotogrammi (hh:mm:ss:ff)", "timeCodeModeFrameNumbers": "Numeri fotogrammi", + "frameModeSnapToVideoFrames": "Memorizza i tempi sui fotogrammi del video (non sui fotogrammi di ogni secondo)", "textBoxLimitNewLines": "Limita il numero di righe nella casella testo sottotitoli", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - rendering software (lento)", + "mpvMetalRendering": "libmpv - Metal (sperimentale, necessita di riavvio)", "mpvWidRendering": "libmpv - rendering ID finestra nativa", "waveFormsAndSpectrogramFoldersContainsX": "Le cartelle 'Forme d'onda' e 'Spettrogramma' contengono {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "Vuoi eliminare i file 'Forme d'onda' e 'Spettrogramma'?", @@ -3580,8 +3631,8 @@ "vlcWidRendering": "libVLC - rendering ID finestra nativa", "ffmpegSoftwareRendering": "FFmpeg - Rendering software", "downloadFfmpegLibs": "Scarica le librerie FFmpeg (per il lettore video FFmpeg)", - "subtitleGridEnterKeyAction": "Griglia sottotitoli - azione tasto Invio ", - "subtitleSingleClickAction": "Griglia sottotitoli - azione singolo clic ", + "subtitleGridEnterKeyAction": "Griglia sottotitoli - azione tasto Invio", + "subtitleSingleClickAction": "Griglia sottotitoli - azione singolo clic", "subtitleDoubleClickAction": "Griglia sottotitoli - azione doppio clic", "subtitleGridCenterSelectedRow": "Griglia sottotitoli, centra quando si seleziona la riga precedente/successiva", "saveAsBehavior": "Comportamento 'Salva con nome'", @@ -3932,8 +3983,8 @@ "trimWhitespaceSelectedLines": "Taglia spazi vuoti (righe selezionate)", "waveformInsertNewSelection": "La forma d'onda inserisce una nuova selezione", "waveformNewSelectionPasteFromClipboard": "Incolla testo appunti forma d'onda nella nuova selezione", - "waveformHorizontalZoomInCommand": "Forma d'onda - zoom+ orizzontale ", - "waveformHorizontalZoomOutCommand": "Forma d'onda - zoom- orizzontale ", + "waveformHorizontalZoomInCommand": "Forma d'onda - zoom+ orizzontale", + "waveformHorizontalZoomOutCommand": "Forma d'onda - zoom- orizzontale", "waveformVerticalZoomInCommand": "Forma d'onda - zoom+ verticale", "waveformVerticalZoomOutCommand": "Forma d'onda - zoom- verticale", "copySubtitlePathToClipboard": "Copia percorso file sottotitoli negli appunti", @@ -4213,17 +4264,34 @@ "crispEmbedSettingsTitle": "Impostazioni CrispEmbed", "crispEmbedDescription": "Motore OCR locale con backend modelli multipli: scarica qui il motore e i modelli.", "trainNOcrDatabase": "Addestra database nOCR", + "optimizeNOcrDatabase": "Ottimizza database nOCR...", + "optimizeNOcrDatabaseQuestionXY": "Vuoi rimuovere le rrighe che non distinguono i caratteri da caratteri simili nel database nOCR '{0}'?\r\n\r\nCiò rende il database più piccolo e l'OCR più veloce, in genere con meno errori.\r\n\r\nRichiede fino a un minuto.\r\n\r\nVerrà creato un backup come '{1}'.", + "optimizingNOcrDatabaseXY": "Ottimizzazione database nOCR... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "Database nOCR '{0}' ottimizzato: {1:#,##0} -> {2:#,##0} righe.", "startTraining": "Inizia addestramento", "abortTraining": "Interrompi addestramento", "trainingOptions": "Opzioni addestramento", + "trainNOcrSubtitle": "Renderizza i caratteri dei font installati e insegna a nOCR le loro forme. Scegli i font usati dai sottotitoli.", + "xFontsSelected": "{0:#,##0} selezionato", + "subtitleFonts": "Font sottotitoli", + "emptyDatabase": "Database vuoto", + "startFromDatabase": "Inizia da", + "startFromDatabaseHint": "Aggiungi i caratteri addestrati a una copia di un database esistente (consigliato) o inizia da uno vuoto", + "fontSizes": "Dimensioni font", + "fontSizesHint": "Dimensioni font in pixel di cui eseguire il rendering, separati da virgole, ad es.\r\n'30, 40'", + "numberOfLineSegmentsHint": "Righe controllate per carattere: con valore più alto è più puntuale ma più lento", + "enterDatabaseName": "Inserisci un nome per il database", + "trainingFontXSizeYCharacterZ": "Apprendimento '{0}' a {1} px: {2}", + "xLearned": "{0:#,##0} appreso", + "xSkipped": "{0:#,##0} saltato", "charactersToTrain": "Caratteri da addestrare", - "letterCombinationsToTrain": "Combinazioni di lettere che potrebbero essere unite in una sola immagine", - "importCharactersFromSubtitleFile": "Importa caratteri da file sottotitoli...", - "numberOfLineSegments": "Numero segmenti di riga", - "alsoTrainBold": "Addestra anche grassetto", - "alsoTrainItalic": "Addestra anche corsivo", - "trainingXLearnedYSkipped": "Addestramento di '{0}' in corso - {1:#,##0} caratteri appresi, {2:#,##0} ignorati", - "trainingDoneXLearned": "Addestramento completato - {0:#,##0} caratteri appresi", + "letterCombinationsToTrain": "Combinazioni di lettere che potrebbero essere divise in un'unica immagine", + "importCharactersFromSubtitleFile": "Importa caratteri dal file sottotitoli...", + "numberOfLineSegments": "Numero segmenti riga", + "alsoTrainBold": "Addestra anche con il grassetto", + "alsoTrainItalic": "Addestra anche con il corsivo", + "trainingXLearnedYSkipped": "Addestramento '{0}' - {1:#,##0} caratteri appresi, {2:#,##0} saltati", + "trainingDoneXLearned": "Addestramento completato: {0:#,##0} caratteri appresi", "selectAtLeastOneFont": "Seleziona almeno un carattere" }, "assa": { @@ -4251,11 +4319,86 @@ "drawSelectedLayer": "Livello selezionato", "drawToolX": "Strumento: {0}", "drawHelpText": "Clic per aggiungere punti • Invio/F8 per chiudere la forma • Maiusc+trascina per eseguire la panoramica • Ctrl+scorri per ingrandire", + "drawMoveToLayer": "Passa al livello", + "drawFlipHorizontal": "Capovolgi orizzontalmente", + "drawFlipVertical": "Capovolgi verticalmente", + "drawHideShape": "Nascondi forma", + "drawShowShape": "Visualizza forma", + "drawHideLayer": "Nascondi livello", + "drawShowLayer": "Visualizza livello", + "drawDeleteLayer": "Elimina livello", + "drawDeletePoint": "Elimina punto", + "drawCancelDrawing": "Annulla disegno", + "drawLayerX": "Livello {0}", + "drawImportSvg": "Importa immagine SVG...", + "drawRotateClockwise": "Ruota di 90° in senso orario", + "drawConvertToCurve": "Converti segmento in curva", + "drawBackground": "Sfondo", + "drawPosition": "Posizione", + "drawZoom": "Zoom", + "drawShapeTool": "Strumento forma", + "drawColorPickerTool": "Scegli il colore da una forma o dallo sfondo", + "drawShapeLibrary": "Libreria forme", + "drawShapeLibraryHint": "Per posizionare una forma trascina sull'area di disegno o fai clic per ottenere la dimensione predefinita. 'Maiusc' mantiene le sue proporzioni.", + "drawAddToLibrary": "Aggiungi alla libreria forme...", + "drawRemoveFromLibrary": "Rimuovi dalla libreria forme", + "drawShapeName": "Nome forma", + "drawCategorySpeechBubbles": "Nuvoletta", + "drawCategoryArrows": "Frecce", + "drawCategoryBasicShapes": "Forme basilari", + "drawCategorySymbols": "Simboli", + "drawCategoryMyShapes": "Le mie forme", + "drawShapeSpeechBubble": "Nuvoletta", + "drawShapeSpeechBubbleRight": "Nuvoletta, coda a destra", + "drawShapeSpeechBubbleUp": "Nuvoletta, coda in su", + "drawShapeOvalBubble": "Nuvoletta ovale", + "drawShapeBoxBubble": "Nuvoletta quadrata", + "drawShapeThoughtBubble": "Nuvoletta pensiero", + "drawShapeShoutBubble": "Nuvoletta urlo", + "drawShapeCaptionBox": "Casella didascalia", + "drawShapeArrow": "Freccia", + "drawShapeDoubleArrow": "Doppia freccia", + "drawShapeChevron": "Freccia a V", + "drawShapeCurvedArrow": "Freccia curva", + "drawShapeRoundedRectangle": "Rettangolo arrotondato", + "drawShapeTriangle": "Triangolo", + "drawShapeDiamond": "Diamante", + "drawShapePentagon": "Pentagono", + "drawShapeHexagon": "Esagono", + "drawShapeOctagon": "Ottagono", + "drawShapeStar": "Stella", + "drawShapeRing": "Anello", + "drawShapePlus": "Più", + "drawShapeBanner": "Striscione", + "drawShapeHeart": "Cuore", + "drawShapeCheck": "Segno di spunta", + "drawShapeMusicNote": "Nota musicale", + "drawShapeMusicNotes": "Note musicali", + "drawShapeLightning": "Fulmine", + "drawShapeCloud": "Nuvola", + "drawShapeMoon": "Luna", + "drawShapeBadge": "Badge", + "drawSize": "Dimensione", + "drawLayer": "Strato", + "drawBackgroundVideoFrame": "Fotogramma video (posizione attuale)", + "drawBackgroundVideoFrameAt": "Fotogramma video a...", + "drawBackgroundImage": "File immagine...", + "drawBackgroundNone": "Nessuno sfondo", + "drawBackgroundStretch": "Allunga l'immagine alla tela", + "drawBackgroundOpacity": "Opacità sfondo", + "drawBackgroundVideoFrameFailed": "Impossibile ottenere un fotogramma video a {0}.", + "drawImages": "Immagini", + "drawConvertToLine": "Converti segmento in linea", + "drawConvertShapeToCurves": "Converti tutte le linee in curve", + "drawConvertShapeToLines": "Converti tutte le curve in linee", + "drawRotateCounterClockwise": "Ruota di 90° in senso antiorario", + "drawSvgImages": "Immagini SVG", + "drawSvgNoShapes": "Nessuna forma piena o tratto trovato nel file SVG.", "progressBarTitle": "Barra avanzamento ASSA", - "progressBarSettings": "Barra di avanzamento", + "progressBarSettings": "Barra avanzamento", "mouseOverColor": "Colore al passaggio del mouse", "clickedColor": "Colore elemento cliccato", - "progressBarForeColor": "Colore di primo piano", + "progressBarForeColor": "Colore primo piano", "progressBarSquareCorners": "Angoli squadrati", "progressBarRoundedCorners": "Angoli arrotondati", "progressBarChapters": "Capitoli", diff --git a/src/ui/Assets/Languages/Japanese.json b/src/ui/Assets/Languages/Japanese.json index 424ad6fb810..865fe89bc9f 100644 --- a/src/ui/Assets/Languages/Japanese.json +++ b/src/ui/Assets/Languages/Japanese.json @@ -1,9 +1,49 @@ { "title": "Subtitle Edit", - "version": "v5.3.0-beta26", - "translatedBy": "", + "version": "v5.3.0", + "translatedBy": "hisui3393", "cultureName": "jp-JP", "general": { + "prompt": "プロンプト", + "preset": "プリセット", + "output": "出力", + "outputFormat": "出力形式", + "other": "その他", + "timeCodeFormat": "タイムコード形式", + "topBottomMargin": "上下余白", + "theme": "テーマ", + "brightness": "明るさ", + "chooseColor": "色を選択", + "lineX": "行{0}", + "playLine": "行を再生", + "maxLineLength": "最大行長", + "maxCharsPerSec": "最大文字数/秒", + "maxNumberOfLines": "最大行数", + "subtitles": "字幕", + "shotChanges": "ショットチェンジ", + "chapters": "チャプター", + "audio": "音声", + "interjections": "感動詞", + "blankLines": "空行", + "editWholeText": "テキスト全体を編集", + "noTextInClipboard": "クリップボードにテキストがありません", + "noSubtitlesFoundTitle": "字幕が見つかりません", + "replacedXOccurrences": "{0}件を置換しました", + "invalidRegularExpressionX": "正規表現が無効です: {0}", + "discardChangesTitle": "変更を破棄しますか?", + "downloadingXDotDotDot": "{0} をダウンロード中...", + "importTimeCodesDotDotDot": "表示タイミングをインポート...", + "original": "元の状態", + "nextChange": "次の変更", + "previousChange": "前の変更", + "changeXOfY": "{1} 件中 {0} 件目の変更", + "tooLong": "長すぎる", + "tooShort": "短すぎる", + "overlapping": "重複している", + "detail": "詳細", + "fixOcrErrors": "OCRエラーを修正", + "runningOcrXY": "OCR処理中... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp を使用するには、llama-server エンジンのダウンロードが必要です。今すぐダウンロードしますか?", "abort": "中止", "actor": "声色", "actors": "声色", @@ -527,7 +567,7 @@ "rules": "ルール", "saveChangesMessage": "現在の字幕ファイルへの変更を保存しますか?", "saveChangesTitle": "変更を保存しますか?", - "saveChangesToX": " \"{0}\"への変更を保存しますか?", + "saveChangesToX": "\"{0}\"への変更を保存しますか?", "saveChangesToXOriginal": "別の字幕ファイル \"{0}\"への変更を保存しますか?", "saveDotDotDot": "保存...", "saveFileAsTitle": "ファイルに 名前を付けて保存", @@ -595,6 +635,8 @@ "showStartColumn": "\"スタート\"列を表示", "showHideColumn": "\"非表示\"列を表示", "showHistory": "履歴を表示", + "clearHistory": "履歴を消去", + "removeFromHistory": "履歴から削除", "showLayerColumn": "\"レイヤー\" 列を表示", "showPreview": "プレビューを表示", "showShotChangesList": "ショット変更リストを表示", @@ -663,7 +705,7 @@ "subtitleFiles": "字幕ファイル", "subtitleFormats": "字幕フォーマット", "subtitleLoadedX": "字幕が読み込まれました: {0}", - "subtitleReloadedChangedOutsideX": "外部で変更された字幕を再読み込みしました", + "subtitleReloadedChangedOutsideX": "外部で変更された字幕を再読み込みしました: {0}", "suffix": "接尾語", "suggestions": "候補", "sync": "同期", @@ -890,9 +932,10 @@ "multipleReplace": "_複数置換", "fillSelectedLinesWithClipboard": "選択行にクリップボードのテキストを入力", "goToLineNumber": "_行番号へ移動", + "commandPalette": "コマンドパレット...", "rightToLeftMode": "右から左モード", "modifySelectionDotDotDot": "選択範囲を変更", - "tools": " ツール", + "tools": "ツール", "adjustDurations": "_表示時間の調整", "applyDurationLimits": "表示時間の適用", "batchConvert": "_一括変換", @@ -1082,6 +1125,9 @@ "charactersPerSecond": "文字/秒: {0}", "chooseColumn": "列を選択", "columnPaste": "列を貼り付け", + "commandPaletteTitle": "コマンドパレット", + "commandPaletteSearchPlaceholder": "コマンドを検索...", + "commandPaletteNoCommandsFound": "一致するコマンドがありません", "createdEmptyTranslation": "現在の行と同じ空行の作成", "deleteText": "テキストを削除", "deleteTextAndShiftCellsUp": "テキストを削除してセルを上に移動", @@ -1339,7 +1385,8 @@ "forcedAlignerIsolatingSpeech": "音声を分離中... {0}", "forcedAlignerIsolatingSpeechFailed": "音声を分離できませんでした。代わりに読み上げ時間から終了時間を設定しました。", "forcedAlignerModel": "音声照合モデル", - "forcedAlignerDownloadEngine": "エンジンをダウンロード/更新..." + "forcedAlignerDownloadEngine": "エンジンをダウンロード/更新...", + "forcedAlignerEstimatedXOfY": "{0}行のうち{1}行は位置合わせができなかったため、読み上げ時間を基に配置しました。これらのタイムコードは推定値にすぎません。おそらく、台本のほうが動画内で実際に話されている内容より長くなっています。" }, "export": { "exportImagesProfiles": "画像書き出しプロファイル", @@ -2232,7 +2279,7 @@ "deletePreset": "プリセットを削除", "presetName": "プリセット名", "deletePresetX": "プリセット「{0}」を削除しますか?" - }, + }, "changeCasing": { "fixNames": "名前を修正", "namesX": "名前数: {0:#,##0}", @@ -2808,6 +2855,10 @@ "removeOriginalSpeechDescription": "元の動画の音楽や効果音を残したまま、話し声だけを除去し、新しい音声を重ねます。GPU使用時でも動画とほぼ同じ時間がかかり、GPUがない場合は何倍も時間がかかります。音量のダッキングを有効にすると、その音量は音楽や効果音にも適用されます。音声を動画ファイルに追加する場合のみ適用されます。", "removingOriginalSpeech": "元の音声を除去中...", "removeOriginalSpeechFailed": "元の音声を除去できませんでした。代わりに元の音声を残したまま動画に追加しました。", + "speechRemovalModel": "モデル", + "speechRemovalModelDescription": "「最高品質」は音楽や効果音をできるだけ多く残します。「高速」は処理が約3倍速くなりますが、音楽がやや多く失われます。", + "speechRemovalBestQuality": "最高品質(Mel-Band RoFormer)", + "speechRemovalFast": "高速(HTDemucs)", "videoTruncatedWarning": "新しい動画ファイルの映像は{0}で終了していますが、元の動画は{1}あります。このため、音声が続いている間も映像は静止します。\n\nファイルはそのまま残しています。ffmpegの出力については、Subtitle Editのデータフォルダーにあるerror-log.txtを確認してください。", "originalVolumePercent": "元音声の音量(%)", "vadSilenceCompression": "無音圧縮(VAD)", @@ -2894,7 +2945,7 @@ "deleteSelectedShotChangeQuestion": "選択したショット変更を削除しますか?", "shotChanges": "ショットチェンジ", "exportShotChanges": "ショットチェンジをエクスポート" - }, + }, "chapters": { "title": "チャプター", "chaptersDotDotDot": "チャプター...", @@ -3561,9 +3612,11 @@ "timeCodeModeTime": "時間(hh:mm:ss,zzz)", "timeCodeModeFrames": "フレーム(hh:mm:ss:ff)", "timeCodeModeFrameNumbers": "フレーム番号", + "frameModeSnapToVideoFrames": "時間を動画のフレームに合わせて保存(各秒内のフレームではなく)", "textBoxLimitNewLines": "テキストボックスの行数を制限します", "mpvOpenGl": "GPU (OpenGL):高速,滑らか", "mpvSoftwareRendering": "CPUのみ:互換性重視(低速)", + "mpvMetalRendering": "libmpv - Metal(試験的機能、再起動が必要)", "mpvWidRendering": "OS処理 (環境によっては非対応)", "waveFormsAndSpectrogramFoldersContainsX": "Waveformsフォルダとspectrogramフォルダに{0}が含まれています", "deleteWaveformAndSpectrogramFoldersQuestion": "WaveformsファイルとSpectrogramファイルを削除しますか?", @@ -4213,9 +4266,26 @@ "crispEmbedSettingsTitle": "CrispEmbedの設定", "crispEmbedDescription": "複数のモデルに対応したローカルOCRエンジン - ここからエンジンとモデルをダウンロードできます。", "trainNOcrDatabase": "nOCRデータベースを学習...", + "optimizeNOcrDatabase": "nOCRデータベースを最適化...", + "optimizeNOcrDatabaseQuestionXY": "nOCRデータベース「{0}」から、類似した文字と区別するための情報を持たない行を削除しますか?\n\nデータベースのサイズが小さくなり、OCRが高速化します。通常、認識エラーも減少します。処理には最大1分かかります。\n\nバックアップは「{1}」として保存されます。", + "optimizingNOcrDatabaseXY": "nOCRデータベースを最適化中... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "nOCRデータベース「{0}」を最適化しました:{1:#,##0}行 → {2:#,##0}行。", "startTraining": "学習開始", "abortTraining": "学習中止", "trainingOptions": "学習オプション", + "trainNOcrSubtitle": "インストール済みのフォントで文字を描画し、その形状をnOCRに学習させます。字幕に使用されているフォントを選択してください。", + "xFontsSelected": "{0:#,##0} 個選択", + "subtitleFonts": "字幕フォント", + "emptyDatabase": "空のデータベース", + "startFromDatabase": "開始元", + "startFromDatabaseHint": "既存のデータベースのコピーに学習した文字を追加する(推奨)か、空のデータベースから開始します", + "fontSizes": "フォントサイズ", + "fontSizesHint": "描画するフォントサイズをピクセル単位でカンマ区切りで指定します。例: \"30, 40\"", + "numberOfLineSegmentsHint": "文字ごとに確認する線分の数。多いほど判定が厳密になりますが、処理は遅くなります", + "enterDatabaseName": "データベース名を入力", + "trainingFontXSizeYCharacterZ": "「{0}」を {1} px で学習中: {2}", + "xLearned": "{0:#,##0} 個学習済み", + "xSkipped": "{0:#,##0} 個スキップ", "charactersToTrain": "学習する文字", "letterCombinationsToTrain": "1つの画像に分割される可能性のある文字の組み合わせ", "importCharactersFromSubtitleFile": "字幕ファイルから文字をインポート...", @@ -4251,6 +4321,81 @@ "drawSelectedLayer": "選択レイヤー", "drawToolX": "ツール: {0}", "drawHelpText": "クリックして点を追加 • Enter/F8で図形を閉じる • Shiftキーを押しながらドラッグでパン • Ctrlキーを押しながらスクロールでズーム", + "drawMoveToLayer": "レイヤーに移動", + "drawFlipHorizontal": "左右反転", + "drawFlipVertical": "上下反転", + "drawHideShape": "図形を非表示", + "drawShowShape": "図形を表示", + "drawHideLayer": "レイヤーを非表示", + "drawShowLayer": "レイヤーを表示", + "drawDeleteLayer": "レイヤーを削除", + "drawDeletePoint": "点を削除", + "drawCancelDrawing": "描画をキャンセル", + "drawLayerX": "レイヤー {0}", + "drawImportSvg": "SVG画像をインポート...", + "drawRotateClockwise": "時計回りに90°回転", + "drawConvertToCurve": "線分を曲線に変換", + "drawBackground": "背景", + "drawPosition": "位置", + "drawZoom": "ズーム", + "drawShapeTool": "図形ツール", + "drawColorPickerTool": "図形または背景から色を取得", + "drawShapeLibrary": "図形ライブラリ", + "drawShapeLibraryHint": "キャンバス上をドラッグして図形を配置します。クリックすると既定のサイズで配置されます。Shiftキーを押すと縦横比が維持されます。", + "drawAddToLibrary": "図形ライブラリに追加...", + "drawRemoveFromLibrary": "図形ライブラリから削除", + "drawShapeName": "図形名", + "drawCategorySpeechBubbles": "吹き出し", + "drawCategoryArrows": "矢印", + "drawCategoryBasicShapes": "基本図形", + "drawCategorySymbols": "記号", + "drawCategoryMyShapes": "マイ図形", + "drawShapeSpeechBubble": "吹き出し", + "drawShapeSpeechBubbleRight": "右向きのしっぽ付き吹き出し", + "drawShapeSpeechBubbleUp": "上向きのしっぽ付き吹き出し", + "drawShapeOvalBubble": "楕円形の吹き出し", + "drawShapeBoxBubble": "四角い吹き出し", + "drawShapeThoughtBubble": "思考の吹き出し", + "drawShapeShoutBubble": "叫びの吹き出し", + "drawShapeCaptionBox": "字幕枠", + "drawShapeArrow": "矢印", + "drawShapeDoubleArrow": "両矢印", + "drawShapeChevron": "山形", + "drawShapeCurvedArrow": "曲線矢印", + "drawShapeRoundedRectangle": "角丸長方形", + "drawShapeTriangle": "三角形", + "drawShapeDiamond": "ひし形", + "drawShapePentagon": "五角形", + "drawShapeHexagon": "六角形", + "drawShapeOctagon": "八角形", + "drawShapeStar": "星形", + "drawShapeRing": "リング", + "drawShapePlus": "プラス記号", + "drawShapeBanner": "バナー", + "drawShapeHeart": "ハート", + "drawShapeCheck": "チェックマーク", + "drawShapeMusicNote": "音符", + "drawShapeMusicNotes": "音符(複数)", + "drawShapeLightning": "稲妻", + "drawShapeCloud": "雲", + "drawShapeMoon": "月", + "drawShapeBadge": "バッジ", + "drawSize": "サイズ", + "drawLayer": "レイヤー", + "drawBackgroundVideoFrame": "動画フレーム(現在位置)", + "drawBackgroundVideoFrameAt": "動画フレームの位置を指定...", + "drawBackgroundImage": "画像ファイル...", + "drawBackgroundNone": "背景なし", + "drawBackgroundStretch": "画像をキャンバスに合わせて引き伸ばす", + "drawBackgroundOpacity": "背景の不透明度", + "drawBackgroundVideoFrameFailed": "{0} の位置から動画フレームを取得できませんでした。", + "drawImages": "画像", + "drawConvertToLine": "セグメントを直線に変換", + "drawConvertShapeToCurves": "すべての直線を曲線に変換", + "drawConvertShapeToLines": "すべての曲線を直線に変換", + "drawRotateCounterClockwise": "反時計回りに90°回転", + "drawSvgImages": "SVG画像", + "drawSvgNoShapes": "SVGファイルに塗りつぶされた図形や線が見つかりませんでした。", "progressBarTitle": "ASS進行状況バー", "progressBarSettings": "進行状況バー", "mouseOverColor": "マウスオーバー時の色", diff --git a/src/ui/Assets/Languages/Korean.json b/src/ui/Assets/Languages/Korean.json index e8a86869c05..e95d1c865ef 100644 --- a/src/ui/Assets/Languages/Korean.json +++ b/src/ui/Assets/Languages/Korean.json @@ -1,9 +1,50 @@ { "title": "Subtitle Edit", - "version": "v5.3.0-beta26", + "version": "v5.3.0", "translatedBy": "Hack茶ん, 12시27분(@12si27)", "cultureName": "ko-KR", "general": { + "prompt": "프롬프트", + "temperature": "온도 (Temperature)", + "preset": "사전 설정", + "output": "출력", + "outputFormat": "출력 형식", + "other": "기타", + "timeCodeFormat": "타임코드 형식", + "topBottomMargin": "상단/하단 여백", + "theme": "테마", + "brightness": "밝기", + "chooseColor": "색상 선택", + "lineX": "{0}번 줄", + "playLine": "줄 재생", + "maxLineLength": "최대 줄 길이", + "maxCharsPerSec": "초당 최대 문자 수", + "maxNumberOfLines": "최대 줄 수", + "subtitles": "자막", + "shotChanges": "장면 전환", + "chapters": "챕터", + "audio": "오디오", + "interjections": "감탄사", + "blankLines": "빈 줄", + "editWholeText": "전체 텍스트 편집", + "noTextInClipboard": "클립보드에 텍스트가 없음", + "noSubtitlesFoundTitle": "자막을 찾을 수 없음", + "replacedXOccurrences": "{0}개 항목이 교체되었습니다", + "invalidRegularExpressionX": "잘못된 정규 표현식: {0}", + "discardChangesTitle": "변경 사항을 취소하시겠습니까?", + "downloadingXDotDotDot": "{0} 다운로드 중...", + "importTimeCodesDotDotDot": "타임코드 가져오기...", + "original": "원본", + "nextChange": "다음 변경 사항", + "previousChange": "이전 변경 사항", + "changeXOfY": "변경 {0}/{1}", + "tooLong": "너무 긺", + "tooShort": "너무 짧음", + "overlapping": "겹침", + "detail": "상세 정보", + "fixOcrErrors": "OCR 오류 수정", + "runningOcrXY": "OCR 처리 중... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp를 사용하려면 llama-server 엔진을 다운로드해야 합니다. 지금 다운로드하시겠습니까?", "abort": "중단", "actor": "등장인물", "actors": "등장인물", @@ -96,8 +137,8 @@ "box": "상자", "boxColor": "상자 색상", "boxCornerRadius": "상자 모서리 반경", - "boxPadding": "상자 여백", - "boxPerLine": "한 줄에 한 칸씩", + "boxPadding": "상자 안쪽 여백", + "boxPerLine": "줄마다 상자 표시", "bridgeGaps": "간격 메우기", "bytes": "바이트", "cancel": "취소(_A)", @@ -134,17 +175,17 @@ "colorDotDotDot": "색상...", "colorGray": "회색", "colorGreen": "초록", - "colorHalfBlue": "반투명 파랑", - "colorHalfCyan": "반투명 청록", - "colorHalfGreen": "반투명 초록", - "colorHalfMagenta": "반투명 자홍", - "colorHalfRed": "반투명 빨강", - "colorHalfYellow": "반투명 노랑", + "colorHalfBlue": "파랑 (절반 밝기)", + "colorHalfCyan": "청록 (절반 밝기)", + "colorHalfGreen": "초록 (절반 밝기)", + "colorHalfMagenta": "자홍 (절반 밝기)", + "colorHalfRed": "빨강 (절반 밝기)", + "colorHalfYellow": "노랑 (절반 밝기)", "colorMagenta": "자홍", "colorRed": "빨강", "colorWhite": "하양", "colorYellow": "노랑", - "column": "칼럼", + "column": "열", "columns": "열", "columnsDotDotDot": "열...", "consoleLog": "콘솔 로그", @@ -184,7 +225,7 @@ "description": "설명", "dictionary": "사전", "diskSpace": "디스크 공간", - "doNoChange": "변경 금지", + "doNoChange": "변경 안 함", "done": "완료(_D)", "doubleWords": "중복 단어", "doubleLines": "중복 줄", @@ -254,7 +295,7 @@ "fixRightToLeft": "RTL 수정", "fixRightToLeftViaUnicodeTags": "유니코드 태그를 통해 RTL 수정", "fixedValue": "고정값", - "focusSelectedLine": "선택한 줄 강조 표시(목록에서 스크롤하여 표시)", + "focusSelectedLine": "선택한 줄로 이동 (목록에서 보이도록 스크롤)", "font": "글꼴", "fontColor": "글자 색상", "fontHeight": "글자 높이", @@ -262,7 +303,7 @@ "fontNameDotDotDot": "글꼴 이름...", "fontSize": "글자 크기", "fonts": "글꼴", - "footer": "하단", + "footer": "푸터", "forced": "강제됨", "foreground": "전경", "format": "형식", @@ -281,7 +322,7 @@ "generate": "생성", "generateImportShotChanges": "장면 전환 생성/가져오기", "generating": "생성 중...", - "generatingImageXofY": "{1:#,##0}의 이미지 {0:#,##0}을(를) 생성 중...", + "generatingImageXofY": "이미지 {1:#,##0}개 중 {0:#,##0}번째 생성 중...", "generatingAudioFile": "오디오 파일 생성 중...", "getAudioClips": "오디오 클립 받기", "goTo": "이동", @@ -295,7 +336,7 @@ "help": "도움말", "hex": "헥스", "hide": "숨김", - "history": "연혁", + "history": "기록", "horizontal": "가로", "id": "ID", "image": "이미지", @@ -342,7 +383,7 @@ "lockTimeCodes": "타임코드 고정", "logo": "로고", "lookUpX": "\"{0}\" 조회", - "margin": "여백", + "margin": "바깥 여백", "match": "일치", "maxCharactersPerSecond": "초당 최대 문자 수", "mediaInformation": "매체 정보", @@ -384,7 +425,7 @@ "newProfile": "새 프로필", "next": "다음", "newSubtitleStartKeyDownSetEndKeyUp": "자막 삽입: 키를 눌렀을 때 시작하고, 키를 뗐을 때 종료하도록 설정", - "setSubtitleStartAtVideoPositionSetEndAtKeyUpAndGoToNext": "비디오 시작 위치를 지정하고, 키를 뗐을 때 끝 위치를 지정하며 다음으로 이동", + "setSubtitleStartAtVideoPositionSetEndAtKeyUpAndGoToNext": "자막 시작을 현재 비디오 위치로 설정하고, 키를 놓으면 끝을 설정한 뒤 다음으로 이동", "no": "아니오", "noColor": "색상 없음", "noFilesToConvert": "변환할 파일이 없음", @@ -394,7 +435,7 @@ "noSymbolLines": "#줄", "noVideoLoaded": "불러온 비디오가 없습니다", "none": "없음", - "normalCasing": "일반 케이스", + "normalCasing": "일반 대소문자", "notAvailable": "해당 없음", "notInstalled": "설치되지 않음", "nothingSelected": "선택된 항목 없음", @@ -403,7 +444,7 @@ "ocrDotDotDot": "OCR...", "ocrPercentX": "OCR: {0}%", "offset": "오프셋", - "offsetTimeCodes": "오프셋 타임코드", + "offsetTimeCodes": "타임코드 오프셋 조정", "offsetX": "오프셋 X", "offsetY": "오프셋 Y", "ok": "확인(_O)", @@ -434,12 +475,12 @@ "overwriteExistingFiles": "기존 파일 덮어쓰기", "overwriteFilesInFolderX": "폴더 내 파일 덮어쓰기: \"{0}\"", "overwriteQuestion": "덮어쓰겠습니까?", - "padding": "여백", + "padding": "안쪽 여백", "parameters": "매개변수", "parsingXDotDotDot": "{0} 분석 중...", "paste": "붙여넣기", "pasteNewSelection": "선택 영역에 클립보드 텍스트 붙여넣기", - "pause": "중지", + "pause": "일시 중지", "percent": "퍼센트", "pickLayer": "레이어 설정", "pickOllamaModel": "Ollama 모델 선택", @@ -490,7 +531,7 @@ "recentFiles": "최근 파일", "recentlyUsedVideoOffsets": "최근 사용한 비디오 오프셋", "redo": "다시 실행", - "redownload": "재다운로드", + "redownload": "다시 다운로드...", "release": "릴리즈", "refresh": "새로 고침", "region": "지역", @@ -559,7 +600,7 @@ "selectedLines": "선택된 줄", "selectedlinesX": "선택된 줄: {0}", "sensitivity": "감도", - "separator": "구분선", + "separator": "구분자", "setEnd": "끝점 설정", "setEndAndGoToNext": "끝점 설정 후 다음으로 이동", "setEndAddNewAndGoToNew": "끝점 설정 후 새 줄 추가 및 이동", @@ -592,9 +633,11 @@ "showDurationColumn": "\"길이\" 열 표시", "showGapColumn": "\"간격\" 열 표시", "showForcedColumn": "\"강제 표시\" 열 표시", - "showStartColumn": "\"표시\" 열 표시", - "showHideColumn": "\"숨김\" 열 표시", - "showHistory": "이력 보기", + "showStartColumn": "\"시작\" 열 표시", + "showHideColumn": "\"끝\" 열 표시", + "showHistory": "기록 보기", + "clearHistory": "기록 비우기", + "removeFromHistory": "기록에서 지우기", "showLayerColumn": "\"레이어\" 열 표시", "showPreview": "미리 보기 표시", "showShotChangesList": "장면 전환 목록 표시", @@ -644,7 +687,7 @@ "splitLineAtVideoAndTextBoxPosition": "비디오와 입력칸 위치에서 줄 나누기", "splitLineAtVideoPosition": "비디오 위치에서 줄 나누기", "splitLineAtWaveformPosition": "파형 위치에서 줄 나누기", - "startFrom": "시작하기", + "startFrom": "시작 위치", "startTime": "시작 시간", "startingDotDotDot": "시작 중...", "status": "상태", @@ -653,7 +696,7 @@ "stop": "중지", "strikeout": "취소선", "style": "스타일", - "styleExaggeration": "과장된 스타일", + "styleExaggeration": "스타일 강조 정도", "styles": "스타일", "subtitleFile": "자막 파일", "subtitleFileChangedOutsideX": "파일 \"{0}\"이(가) Subtitle Edit 외부에서 변경되었습니다.\n\n현재 수정 내용을 버리고 다시 불러오시겠습니까?", @@ -679,21 +722,21 @@ "textColor": "텍스트 색상", "textFiles": "텍스트 파일", "textOrImage": "텍스트/이미지", - "threeLetterLanguageCode": "3자리 언어 코드", + "threeLetterLanguageCode": "알파벳 3자리 (ISO 639-2/T)", "threeLetterLanguageCodeBibliographic": "알파벳 3자리 (ISO 639-2/B)", "time": "시간", "timeCodes": "타임코드", "timing": "타이밍", "title": "타이틀", - "to": "을(를)", - "toggleCasing": "케이스 표시/숨기기", + "to": "대상", + "toggleCasing": "대소문자 전환", "toggleDirection": "방향 전환", "toggleForced": "강제 표시 설정", "markedXLinesAsForced": "{0}개 줄을 강제 표시로 지정함", "unmarkedXLinesAsForced": "{0}개 줄의 강제 표시를 해제함", "noForcedLinesFound": "강제 표시 줄을 찾을 수 없습니다", "saveForcedLinesAs": "강제 표시 줄 저장...", - "toggleShotChangesAtVideoPosition": "비디오 위치에서 장면 전환", + "toggleShotChangesAtVideoPosition": "현재 비디오 위치의 장면 전환 지점 추가/제거", "toolbar": "도구 모음", "tools": "도구", "topCenter": "중앙-상단", @@ -726,7 +769,7 @@ "updatedBy": "업데이트:", "upToDate": "최신 버전", "url": "URL", - "usages": "용도", + "usages": "사용 횟수", "use": "사용", "useAlways": "항상 사용", "useOnce": "한 번 사용", @@ -735,18 +778,18 @@ "useSourceResolution": "소스 해상도 사용", "userName": "사용자 이름", "vertical": "세로", - "video100MsBack": "비디오, 100밀리초 앞으로", - "video100MsForward": "비디오, 100밀리초 뒤로", - "video500MsBack": "비디오, 500밀리초 앞으로", - "video500MsForward": "비디오, 500밀리초 뒤로", - "videoCustom1BackX": "비디오, 사용자 정의 밀리초({0:#,###,##0}) 앞으로, 1", - "videoCustom1ForwardX": "비디오, 사용자 정의 밀리초({0:#,###,##0}) 뒤로, 1", - "videoCustom2BackX": "비디오, 사용자 정의 밀리초({0:#,###,##0}) 앞으로, 2", - "videoCustom2ForwardX": "비디오, 사용자 정의 밀리초({0:#,###,##0}) 뒤로, 2", - "videoCustom3BackX": "비디오, 사용자 정의 밀리초({0:#,###,##0}) 앞으로, 3", - "videoCustom3ForwardX": "비디오, 사용자 정의 밀리초({0:#,###,##0}) 뒤로, 3", - "videoCustom4BackX": "비디오, 사용자 정의 밀리초({0:#,###,##0}) 앞으로, 4", - "videoCustom4ForwardX": "비디오, 사용자 정의 밀리초({0:#,###,##0}) 뒤로, 4", + "video100MsBack": "비디오, 100밀리초 이전으로 이동", + "video100MsForward": "비디오, 100밀리초 이후로 이동", + "video500MsBack": "비디오, 500밀리초 이전으로 이동", + "video500MsForward": "비디오, 500밀리초 이후로 이동", + "videoCustom1BackX": "비디오, 사용자 정의 밀리초({0:#,###,##0}) 이전으로 이동, 1", + "videoCustom1ForwardX": "비디오, 사용자 정의 밀리초({0:#,###,##0}) 이후로 이동, 1", + "videoCustom2BackX": "비디오, 사용자 정의 밀리초({0:#,###,##0}) 이전으로 이동, 2", + "videoCustom2ForwardX": "비디오, 사용자 정의 밀리초({0:#,###,##0}) 이후로 이동, 2", + "videoCustom3BackX": "비디오, 사용자 정의 밀리초({0:#,###,##0}) 이전으로 이동, 3", + "videoCustom3ForwardX": "비디오, 사용자 정의 밀리초({0:#,###,##0}) 이후로 이동, 3", + "videoCustom4BackX": "비디오, 사용자 정의 밀리초({0:#,###,##0}) 이전으로 이동, 4", + "videoCustom4ForwardX": "비디오, 사용자 정의 밀리초({0:#,###,##0}) 이후로 이동, 4", "videoCustom1BackAndPauseX": "비디오, 사용자 정의 밀리초({0:#,###,##0}) 뒤로 이동 후 일시 정지, 1", "videoCustom1ForwardAndPauseX": "비디오, 사용자 정의 밀리초({0:#,###,##0}) 앞으로 이동 후 일시 정지, 1", "videoCustom2BackAndPauseX": "비디오, 사용자 정의 밀리초({0:#,###,##0}) 뒤로 이동 후 일시 정지, 2", @@ -767,12 +810,12 @@ "videoFiles": "비디오 파일", "videoAndAudioFiles": "비디오 및 오디오 파일", "videoOffset": "비디오 오프셋", - "videoOneFrameBack": "비디오, 1프레임 앞으로", - "videoOneFrameForward": "비디오, 1프레임 뒤로", + "videoOneFrameBack": "비디오, 1프레임 이전으로 이동", + "videoOneFrameForward": "비디오, 1프레임 이후로 이동", "videoOneFrameBackWithPlay": "비디오, 재생과 함께 한 프레임 뒤로", "videoOneFrameForwardWithPlay": "비디오, 재생과 함께 한 프레임 앞으로", - "videoOneSecondBack": "비디오, 1초 앞으로", - "videoOneSecondForward": "비디오, 1초 뒤로", + "videoOneSecondBack": "비디오, 1초 이전으로 이동", + "videoOneSecondForward": "비디오, 1초 이후로 이동", "videoPlayer": "비디오 플레이어", "videoPosition": "비디오 위치", "videoResolution": "비디오 해상도", @@ -783,19 +826,19 @@ "waveform": "파형", "waveformCenterOnVideoPosition": "비디오 위치에서 파형 중앙 정렬", "waveformPasteFromClipboard": "클립보드에서 붙여넣기", - "waveformSpectrogram": "파형/스펙트럼", + "waveformSpectrogram": "파형/스펙트로그램", "width": "너비", "wordsPerMin": "분당 단어 수", "pixelWidth": "픽셀 너비", "wpm": "분당 단어 수", "xFiles": "{0:#,###,##0} 파일", "xOfYFiles": "{0:#,###,##0} / {1:#,###,##0} 파일", - "xFilesConvertedInY": "{0:#,###,##0}개의 파일이 {1}에 변환", + "xFilesConvertedInY": "파일 {0:#,###,##0}개 변환 완료 (소요 시간: {1})", "xNoLinesUpdated": "{0}: 줄이 업데이트되지 않음", "xNotFound": "\"{0}\"을(를) 찾을 수 없음", "xOfYLinesUpdated": "{0}: {2} 중 {1} 줄이 업데이트됨", "xOfYLinesUpdatedAndZNeighborsAdjusted": "{0}: {2} 중 {1} 줄이 업데이트됨, {3} 개의 인접 줄이 조정됨", - "noBookmarksFound": "더 이상의 북마크를 찾을 수 없음", + "noBookmarksFound": "더 이상 즐겨찾기가 없습니다", "xRequiresAnApiKey": "{0}에는 API 키가 필요", "xRequiresAValidUrl": "{0}에 올바른 URL이 필요합니다(예: \"http://...\" 또는 \"https://...\")", "yes": "예", @@ -824,8 +867,6 @@ "openAiCompatibleSttExtraHeaders": "추가 헤더", "openAiCompatibleSttTimeout": "타임아웃 (초)", "openAiCompatibleSttLanguage": "언어 힌트", - "openAiCompatibleSttTemperature": "온도값 (Temp)", - "openAiCompatibleSttPrompt": "프롬프트", "openAiCompatibleSttModelRejectedHint": "서버가 모델 이름을 거부했습니다. 모든 OpenAI 호환 엔드포인트가 모델값을 사용하지는 않습니다 - 예를 들어 xAI의 https://api.x.ai/v1/stt는 'model' 매개변수를 사용하지 않습니다. 모델 필드를 비우고 다시 시도해 보세요.", "dashScopeSttRegion": "리전", "dashScopeSttEnableWords": "단어 레벨 타임스탬프", @@ -834,7 +875,7 @@ "googleCloudSttBucketName": "스토리지 버킷 (비워 두면 자동)", "googleCloudSttDynamicBatching": "동적 배치 처리 (비용 약 1/5, 지연 시간 보장 없음)", "onlineSttApiKeyMissing": "API 키가 필요합니다. API 키를 입력하고 다시 시도해주세요.", - "openAiCompatibleSttAutoTranscribeOnAudioSelection": "새 파형 선택을 음성 인식을 통해 텍스트 변환", + "openAiCompatibleSttAutoTranscribeOnAudioSelection": "새 파형 영역을 선택하면 음성을 자동으로 텍스트로 변환", "openAiCompatibleSttStream": "반환값 스트리밍하기", "openAiCompatibleSttStreamHint": "'stream=true'를 보내면 실시간 텍스트 델타(SSE)를 받을 수 있습니다. 'stream' 매개변수를 거부하는 서버(예: Groq)의 경우 비활성화하세요.", "openAiCompatibleSttAudioFormat": "오디오 업로드 형식", @@ -883,13 +924,14 @@ "edit": "편집(_E)", "undo": "실행 취소(_U)", "redo": "다시 실행(_D)", - "showHistory": "실행 취소 내역 표시(_S)...", + "showHistory": "실행 취소 기록 표시(_S)...", "find": "찾기(_F)...", "findNext": "다음 찾기(_N)", "replace": "바꾸기(_R)...", "multipleReplace": "일괄 바꾸기(_M)...", "fillSelectedLinesWithClipboard": "선택한 줄을 클립보드 텍스트로 채우기", "goToLineNumber": "줄 번호로 이동(_G)...", + "commandPalette": "명령 팔레트(_P)...", "rightToLeftMode": "RTL 모드(_I)", "modifySelectionDotDotDot": "선택 항목 수정(_S)...", "tools": "도구(_T)", @@ -913,7 +955,7 @@ "evenlyDistributeLines": "줄을 고르게 분배 (CPS 기준)", "mergeShortLines": "짧은 줄을 합치기...", "mergeContinuationLines": "이어지는 줄 병합...", - "snapAllTimesToFrames": "모든 타임을 프레임에 고정", + "snapAllTimesToFrames": "모든 시간을 프레임에 맞추기", "renumber": "번호 다시 매기기...", "removeTextForHearingImpaired": "청각 장애인용 텍스트 제거(_R)...", "removeUnicodeCharacters": "유니코드 문자 제거/교체(_U)...", @@ -927,7 +969,7 @@ "assaChangeResolution": "해상도 변경(_R)...", "assaGenerateBackground": "배경 상자 생성(_B)...", "assaApplyAdvancedEffects": "고급 효과 적용(_E)...", - "assaApplyCustomOverrideTags": "사용자 정의 태그 적용(_O)...", + "assaApplyCustomOverrideTags": "서식 재정의 태그 적용(_O)...", "assaSetPosition": "위치 설정(_S)...", "assaImageColorPicker": "이미지 색상 선택기(_I)...", "assaDraw": "그리기(_D)...", @@ -987,7 +1029,7 @@ "filterLayersForDisplayDotDotDot": "표시할 레이어 필터링...", "toggleSelectSubtitleWhilePlayingCurrentlyOn": "재생 중 자막 선택 전환 (현재: 켬)", "toggleSelectSubtitleWhilePlayingCurrentlyOff": "재생 중 자막 선택 전환 (현재: 끔)", - "selectSubtitleWhilePlaying": "재생 중 자막 선택 전환" + "selectSubtitleWhilePlaying": "재생 중 현재 자막 선택" }, "toolbar": { "newHint": "새 자막 파일 {0}", @@ -1082,12 +1124,15 @@ "charactersPerSecond": "문자/초: {0}", "chooseColumn": "열 선택", "columnPaste": "열 붙여넣기", + "commandPaletteTitle": "명령 팔레트", + "commandPaletteSearchPlaceholder": "명령을 검색하려면 입력하세요...", + "commandPaletteNoCommandsFound": "일치하는 명령이 없습니다", "createdEmptyTranslation": "현재 자막을 기반으로 빈 번역본 생성", "deleteText": "텍스트 삭제", "deleteTextAndShiftCellsUp": "텍스트를 삭제하고 셀을 위로 이동", "endTimeMustBeAfterStartTime": "끝 시간은 시작 시간 이후여야 합니다.", "errorLoad7Zip": "이 파일은 7-Zip으로 압축된 파일인 것 같습니다.\n\nSubtitle Edit은 압축 파일을 열 수 없습니다.", - "errorLoadBinaryZeroes": "죄송합니다. 이 파일에는 0으로만 채워져 있습니다!\n\nSubtitle Edit로 이 파일을 편집했다면, 메뉴 항목 [파일] > [자동 백업 복원]을 통해 백업 파일을 찾을 수 있을 것입니다.", + "errorLoadBinaryZeroes": "이 파일은 이진 값 0으로만 채워져 있습니다!\n\nSubtitle Edit로 이 파일을 편집했다면, 메뉴 항목 [파일] > [자동 백업 복원]을 통해 백업 파일을 찾을 수 있을 것입니다.", "errorLoadGZip": "이 파일은 GZip으로 압축된 파일인 것 같습니다.\n\nSubtitle Edit은 압축 파일을 열 수 없습니다.", "errorLoadLargeFile": "자막 파일로 열기에 너무 큰 파일입니다.", "errorLoadVideoFilePrompt": "해당 파일은 비디오 파일인 것 같습니다:\n{0}\n\n\"비디오 -> 비디오 열기\"를 통해 비디오를 열거나 비디오 플레이어에 비디오를 끌어다 놓아 비디오를 열 수 있습니다.\n\n비디오 파일로 여시겠습니까?", @@ -1116,7 +1161,6 @@ "loadingWaveInfoFromCache": "캐시에서 파형 정보를 불러오는 중...", "clickToGenerateWaveform": "클릭하여 파형 생성", "waveformFfmpegNotFoundClickToSetUp": "FFmpeg을 찾을 수 없습니다. 파형을 클릭하여 FFmpeg을 설정하고 파형을 생성하세요.", - "noTextInClipboard": "클립보드에 텍스트가 없음", "numberOfLinesEvenlyDistributedX": "{0}개의 줄이 고르게 분배됨", "oneLineCopiedFromOriginal": "원본 자막에서 한 줄을 복사함", "oneLineCopiedToOriginal": "원본 자막에 한 줄을 복사함", @@ -1131,10 +1175,10 @@ "pasteFromClipboardDotDotDot": "클립보드에서 붙여넣기...", "redoPerformed": "다시 실행됨", "redoPerformedXActionLeft": "다시 실행됨(남은 작업: {0})", - "removedUnicodeControlCharactersX": "{0}번 줄에서 유니코드 제어 문자를 제거", + "removedUnicodeControlCharactersX": "{0}줄에서 유니코드 제어 문자 제거", "removedXBlankLines": "{0}개의 빈 줄을 제거", - "replacedXWithYCountZ": "\"{0}\"을 \"{1}\"로 바꿈 ({2}번 시행)", - "reversedStartAndEndingsForRightToLeftX": "{0}번 줄 분량의 RTL 텍스트의 시작과 끝을 뒤바꾸기", + "replacedXWithYCountZ": "\"{0}\"을(를) \"{1}\"(으)로 바꿈 ({2}개 항목)", + "reversedStartAndEndingsForRightToLeftX": "{0}줄의 RTL 텍스트 시작과 끝 반전", "ruleProfileIsX": "규칙 프로필이 이제 \"{0}\"", "saveLanguageFile": "언어 파일 저장", "saveXFileAs": "{0} 파일을 다음 이름으로 저장", @@ -1165,8 +1209,8 @@ "youtubeDlOutdatedDownloadNow": "\"yt-dlp\"가 오래되어 온라인 비디오에서 작동하지 않을 수 있습니다.\n\n지금 최신 버전을 다운로드하시겠습니까?", "insertUnicodeSymbol": "유니코드 기호 삽입", "trimmedXLines": "{0}개 줄 자름", - "pastedXLinesOverSelectedLines": "선택된 {0}줄을 붙여넣었습니다", - "pastedXOfYLinesOverSelectedLines": "선택된 {1}줄 중 {0}줄을 붙여넣었습니다 - 나머지는 선택에 맞지 않았습니다", + "pastedXLinesOverSelectedLines": "선택한 줄에 {0}줄을 덮어 붙여넣었습니다", + "pastedXOfYLinesOverSelectedLines": "{1}줄 중 {0}줄을 선택한 줄에 덮어 붙여넣었습니다 - 나머지는 선택 영역을 벗어납니다", "insertedXLinesFromClipboard": "클립보드에서 {0}줄 삽입", "openOriginalDifferentNumberOfSubtitlesXY": "원본 자막 파일의 자막 개수가 현재 자막 파일의 자막 개수와 일치하지 않습니다.\n\n• 원본 자막: {0}\n• 현재 자막: {1}", "originalTextReadOnly": "원본 텍스트 (읽기 전용)", @@ -1187,7 +1231,7 @@ "allowEditHintMatchingOnlyX": "원본을 저장하면 표시된 줄만 저장되며, 나머지 {0}개는 사라집니다.", "videoOpenedChangeLayoutQuestion": "비디오 파일이 열렸습니다.\n\n비디오 패널이 표시되도록 레이아웃을 변경하시겠습니까?", "sortedByStartTime": "\"시작\" 시간순으로 정렬", - "sortedByEndTime": "\"끝\" 시간 순으로 정렬", + "sortedByEndTime": "\"끝\" 시간순으로 정렬", "sortedByNumber": "번호순으로 정렬", "sortedByDuration": "길이 순 정렬", "sortedByGap": "간격 순 정렬", @@ -1201,10 +1245,10 @@ "sortedByStyle": "스타일 순 정렬", "videoBrightnessSetTo": "밝기: {0}", "videoContrastSetTo": "대비: {0}", - "colorHint": "선택한 선에 색상 지정", + "colorHint": "선택한 줄에 색상 지정", "removeFormattingHint": "선택한 줄의 서식 제거", "assaResolutionResamplerDone": "ASSA 해상도가 변경되었습니다.", - "snappedXTimesToFrames": "{0} 타임 코드를 {1:0.###} fps의 프레임에 고정함", + "snappedXTimesToFrames": "타임코드 {0}개를 {1:0.###} fps 프레임에 맞춤", "languageFileSavedToX": "언어 파일이 {0}에 저장", "fileExportedInFormatXToY": "파일을 {0} 형식으로 {1} 에 내보냄", "fileExportedInFormatXToFileY": "파일이 \"{0}\" 형식으로 \"{1}\" 파일로 내보내짐", @@ -1212,13 +1256,12 @@ "toolXChangedYLines": "{0}: {1}줄 변경", "transcriptionCompletedWithXLines": "{0}개 줄의 텍스트 변환이 완료", "openSubtitleFileX": "자막 파일 \"{0}\"을(를) 여시겠습니까?", - "replacedXOccurrences": "{0}개 항목이 교체", "ffmpegDownloadedAndInstalledToX": "{0}에 ffmpeg 다운로드 및 설치 완료", "nothingToSave": "저장할 항목이 없음", "formatLimitWarningTitle": "형식 제한 초과", "formatLimitWarningXLinesExceedLimitsOfY": "{0}개의 자막이 \"{1}\" 형식의 제한을 초과했습니다:", "formatLimitWarningMaxXCharactersPerLine": "자막 줄당 최대 {0}자", - "formatLimitWarningMaxXLines": "자막 줄당 최대 {0}줄", + "formatLimitWarningMaxXLines": "자막 하나당 최대 {0}줄", "formatLimitWarningTextWillBeRewrapped": "저장하면 이 자막은 형식 제한에 맞게 줄이 다시 나뉘거나 잘립니다. 따라서 저장된 파일은 현재 표시 내용과 달라질 수 있습니다.", "formatLimitWarningLinesX": "자막 줄: {0}", "formatLimitWarningSaveAnyway": "그래도 저장", @@ -1243,7 +1286,7 @@ "title": "EBU 저장 옵션", "codePageNumber": "코드 페이지 번호", "diskFormatCode": "디스크 포맷 코드", - "displayStandardCode": "표준 코드 표시", + "displayStandardCode": "표시 표준 코드", "characterCodeTable": "문자표", "languageCode": "언어 코드", "originalProgramTitle": "원 프로그램 제목", @@ -1279,18 +1322,19 @@ "maxLengthErrorTeletextColored": "줄 {0}-{1}: 두 배 높이 색상 텍스트의 최대 문자 수는 36자여야 합니다(현재 {2}자)", "maxLengthErrorTeletextWhite": "줄 {0}-{1}: 두 배 높이 흰색 텍스트의 최대 문자 수는 37자여야 합니다(현재 {2}자)", "maxLengthErrorTeletextSingleHeight": "줄 {0}: 일반 높이 흰색 텍스트의 최대 문자 수는 38자여야 합니다(현재 {1}자)", - "discSequenceNumber": "디스크 시퀀스 번호" + "discSequenceNumber": "디스크 시퀀스 번호", + "programme": "프로그램", + "discAndDisplay": "디스크 및 표시" }, "import": { - "importTimeCodes": "타임코드 가져오기...", "plainTextDotDotDot": "일반 텍스트...", "titleImportPlainText": "일반 텍스트 가져오기", - "csvXlsxCustomColumnsDotDotDot": "사용자 정의 컬럼 CSV/XLSX...", - "titleImportCsvXlsxCustomColumns": "사용자 정의 컬럼 CSV/XLSX 불러오기", + "csvXlsxCustomColumnsDotDotDot": "사용자 정의 열이 있는 CSV/XLSX/ODS...", + "titleImportCsvXlsxCustomColumns": "사용자 정의 열이 있는 CSV/XLSX/ODS 가져오기", "detectedSeparatorX": "감지된 구분자: {0}", - "csvXlsxFilterTitle": "CSV/XLSX", - "separatorTab": "Tab", - "separatorSpace": "스페이스", + "csvXlsxFilterTitle": "CSV/XLSX/ODS", + "separatorTab": "탭", + "separatorSpace": "공백", "imagesForOcrDotDotDot": "OCR용 이미지...", "timeCodesDotDotDot": "타임코드...", "subtitleWithManuallyChosenEncodingDotDotDot": "인코딩을 선택하여 자막 가져오기(_S)...", @@ -1316,38 +1360,36 @@ "dvdMenuIfoNoTitleSetsX": "{0} 옆에 타이틀 세트(VTS_xx_0.IFO)가 없습니다", "dvdEncryptedXOfY": "{1}개의 자막 패킷 중 {0}개가 여전히 CSS로 암호화되어 있습니다. 이 VOB 파일들은 복호화 없이 복사되었기 때문에 일부 자막 이미지가 깨질 수 있습니다.\n\n깨끗한 결과를 위해 먼저 DVD 리핑 도구로 DVD를 복호화하세요.\n\n그래도 계속하시겠습니까?", "splitTextAt": "텍스트를 다음 위치에서 나누기", - "blankLines": "빈 줄", "oneLineIsOneSubtitle": "한 줄이 하나의 자막", "twoLinesAreOneSubtitle": "두 줄이 하나의 자막", "importFilesDotDotDot": "파일 가져오기...", "multipleFiles": "여러 텍스트 파일에서 가져오기(파일 하나당 자막 하나)", - "maxLineLength": "최대 줄 길이", "mergeShortLines": "짧은 줄 합치기", - "fixed": "수정됨", + "fixed": "고정", "numberOfSubtitlesX": "자막 수: {0}", "numberOfSubtitlesXForcedY": "자막 수: {0} (강제 표시: {1})", "gapMs": "간격(ms)", "useFixedDuration": "고정 시간 사용", "fixedDurationMs": "고정 시간(ms)", "alignViaSpeechToText": "음성 텍스트 변환을 통한 타임코드 정렬...", - "alignViaForcedAligner": "강제 정렬을 통한 타임 코드 정렬...", + "alignViaForcedAligner": "강제 정렬을 통한 타임코드 정렬...", "forcedAlignerProgress": "정렬 중... 윈도우 {0} / {1}, 줄 {2} / {3}", - "forcedAlignerSetupTitle": "강제 정렬을 통한 타임 코드 정렬", + "forcedAlignerSetupTitle": "강제 정렬을 통한 타임코드 정렬", "forcedAlignerSetupIntro": "강제 정렬은 음성을 텍스트로 변환하지 않고 기존 자막을 음성과 대조하여 타임코드를 맞춥니다. 긴 동영상도 여러 구간으로 나누어 처리할 수 있습니다.", "forcedAlignerEndsFromSpeech": "분리한 음성을 기준으로 종료 시간 설정 (느림)", "forcedAlignerEndsFromSpeechHint": "강제 정렬은 각 줄의 시작 위치만 찾으므로, 종료 시간은 보통 읽는 데 필요한 시간을 기준으로 정합니다. 이 옵션을 켜면 먼저 오디오에서 음악과 효과음을 제거하고, 각 줄의 음성이 끝나는 지점을 종료 시간으로 설정합니다. GPU를 사용해도 비디오 길이만큼 시간이 걸리며, GPU가 없으면 몇 배 더 오래 걸립니다.", "forcedAlignerIsolatingSpeech": "음성 분리 중... {0}", "forcedAlignerIsolatingSpeechFailed": "음성을 분리하지 못해 읽는 데 필요한 시간을 기준으로 종료 시간을 설정했습니다.", "forcedAlignerModel": "정렬기 모델", - "forcedAlignerDownloadEngine": "엔진 다운로드 / 업데이트..." + "forcedAlignerDownloadEngine": "엔진 다운로드 / 업데이트...", + "forcedAlignerEstimatedXOfY": "{1}줄 중 {0}줄을 정렬하지 못해 읽는 데 필요한 시간을 기준으로 배치했습니다. 해당 줄의 타임코드는 추정값입니다. 대본이 비디오에서 실제로 말한 내용보다 길 수 있습니다." }, "export": { "exportImagesProfiles": "이미지 프로필 내보내기", "leftRightMargin": "왼쪽/오른쪽 여백", - "topBottomMargin": "상단/하단 여백", "lineSpacingPercent": "줄 간격 %", - "paddingLeftRight": "왼쪽/오른쪽 패딩", - "paddingTopBottom": "상단/하단 패딩", + "paddingLeftRight": "왼쪽/오른쪽 안쪽 여백", + "paddingTopBottom": "상단/하단 안쪽 여백", "previewTitle": "미리 보기 - 현재 크기: {0}x{1}, 목표 크기: {2}x{3}, 확대/축소 비율: {4}%", "titleExportDvdSup": "DVD sup (MuxMan/Scenarist)", "titleExportVobSub": "VobSub(sub/idx)", @@ -1366,14 +1408,22 @@ "exportDvbTeletextSubtitleType": "자막 유형", "exportDvbTeletextSubtitleTypeNormal": "일반", "exportDvbTeletextSubtitleTypeHearingImpaired": "청각 장애인용", + "exportPacCodePage": "PAC 코드 페이지 선택", + "exportPacSecondaryCodePage": "보조 코드 페이지", "customTextFormatsDotDotDot": "사용자 정의 텍스트 형식(_C)...", "plainTextDotDotDot": "일반 텍스트(_P)...", + "dialogueListDotDotDot": "Excel 대사 목록 (.xlsx)...", + "titleExportDialogueList": "Excel 대사 목록 내보내기", + "dialogueListLineBreaksInCell": "셀 안의 줄 바꿈 유지 (해제하면 \" | \"로 줄 연결)", + "dialogueListHeaderRow": "머리글 행", + "dialogueListFramesFormat": "hh:mm:ss:ff (프레임)", + "dialogueListNoColumns": "열을 하나 이상 선택하세요.", + "dialogueListEnd": "끝", "customTextFormats": "사용자 정의 텍스트 형식", "titleExportCustomFormat": "사용자 정의 텍스트 형식으로 내보내기", "editCustomFormat": "사용자 정의 텍스트 서식 편집", "newCustomFormat": "새로운 사용자 정의 텍스트 형식", "deleteSelectedCustomTextFormatX": "선택한 사용자 정의 텍스트 형식 \"{0}\"을(를) 삭제하시겠습니까?", - "timeCodeFormat": "타임코드 형식", "newLineFormat": "새 줄 형식", "pleaseEnterNameForTheCustomFormat": "사용자 정의 형식의 이름을 입력", "titleExportPlainText": "일반 텍스트 내보내기", @@ -1385,6 +1435,8 @@ "addLineBetweenSubtitles": "자막 사이에 줄 추가", "titleExportDCinemaInteropPng": "D-Cinema interop/png", "titleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", + "titleExportDCinemaSmpte2014Mxf": "D-Cinema SMPTE 2014 (MXF)", + "titleExportDCinemaSmpte2014PngMxf": "D-Cinema SMPTE 2014/png (MXF)", "imageBasedSubtitleSaved": "이미지 기반 자막 저장됨", "fullFrameImage": "전체 프레임 이미지", "fullFrameImageHint": "각 이미지를 비디오 프레임 크기로 만들고, 자막을 해당 위치에 배치합니다", @@ -1402,7 +1454,6 @@ "plane3DXNoDepth": "{0} (깊이 정보 없음)", "textEffect": "텍스트 효과", "textEffectSettingsTitle": "텍스트 효과 설정", - "textEffectPreset": "사전 설정", "textEffectStrength": "강도", "textEffectLetterSpacing": "자간", "textEffectArcBend": "곡선", @@ -1435,7 +1486,7 @@ "mostUsedWords": "가장 많이 사용된 단어", "nothingFound": "찾을 수 없음", "numberOfLinesX": "자막 줄 수: {0:#,##0}", - "lengthInFormatXinCharactersY": "{0}자: {1:#,###,##0}", + "lengthInFormatXinCharactersY": "{0} 형식의 문자 수: {1:#,###,##0}", "numberOfCharactersInTextOnly": "텍스트의 문자 수만: {0:#,###,##0}", "totalDuration": "모든 자막의 총 길이: {0:#,##0}", "totalCharsPerSecond": "초당 총 문자 수: {0:0.0}", @@ -1475,7 +1526,6 @@ "gapMaximum": "간격 - 최대: {0:#,##0}ms", "gapAverage": "간격 - 평균: {0:#,##0.##}ms", "gapExceedingMinimum": "간격 - 최소치 미만({0:#,##0}ms): {1} ({2:0.00}%)", - "subtitles": "자막", "words": "단어", "totalDurationShort": "총 재생 시간", "timingAndPacing": "타이밍 및 표시 속도", @@ -1505,8 +1555,7 @@ "restoreXFromY": "{1}에서 \"{0}\"을(를) 복원하시겠습니까?", "deleteAllSubtitleBackups": "자막 백업 파일을 모두 삭제하시겠습니까?", "deleteAll": "모두 삭제", - "subtitles": "자막", - "settingsBackupInfo": "Subtitle Edit를 시작할 때 Settings.json을 백업합니다. 백업은 {0}일에 한 번까지만 수행하며, 최신 백업 {1}개를 보관합니다.", + "settingsBackupInfo": "설정이 변경된 경우 Subtitle Edit를 시작할 때 Settings.json을 백업합니다. 백업은 {0}일에 한 번까지만 수행하며, 최신 백업 {1}개를 보관합니다.", "settingsBackupInfoEveryStart": "설정이 변경된 경우 Subtitle Edit를 시작할 때마다 Settings.json을 백업합니다. 최근 백업 {0}개를 보관합니다.", "settingsBackupOff": "설정 자동 백업이 꺼져 있습니다 (옵션 → 설정 → 파일).", "lastSettingsBackupX": "마지막 백업: {0}", @@ -1530,28 +1579,32 @@ "reelNumber": "릴 번호", "issueDate": "발행일", "now": "지금", - "editRate": "비율 편집", + "editRate": "편집 레이트 (프레임 속도)", "timeCodeRate": "타임코드 속도", "startTime": "시작 시간", "fontId": "글꼴 ID", "fontUri": "글꼴 URI", - "chooseColor": "색상 선택", "fontEffect": "글꼴 효과", "effectColor": "효과 색상", - "topBottomMargin": "상단/하단 여백", "fadeUpTime": "페이드업 시간", "fadeDownTime": "페이드다운 시간", "zPosition": "Z-포지션", - "zPositionHelp": "양수는 텍스트를 멀리 이동시키고, 음수는 텍스트를 더 가깝게 이동시킵니다. z-포지션이 0이면 2D입니다." + "zPositionHelp": "양수는 텍스트를 멀리 이동시키고, 음수는 텍스트를 더 가깝게 이동시킵니다. z-포지션이 0이면 2D입니다.", + "fontFile": "글꼴 파일", + "chooseFontFile": "글꼴 파일 선택", + "fontFileMissing": "MXF 트랙 파일에 포함할 TrueType/OpenType 글꼴 파일을 선택하세요.", + "reelDuration": "릴 길이", + "reelDurationHint": "HH:MM:SS:FF - DCP 릴의 모든 구성 요소에 동일하게 적용할 영상 길이입니다. 비워 두면 마지막 자막까지로 설정합니다.", + "reelDurationInvalid": "릴 길이는 비워 두거나 HH:MM:SS:FF 형식으로 입력하세요." }, "webVtt": { "setStylesForSelectedLinesTitle": "선택된 줄에 대한 WebVTT 스타일 설정", - "voice": "음성", - "showVoiceColumn": "\"음성\" 열 표시", - "voices": "음성", - "newVoiceDotDotDot": "새 음성...", - "removeVoices": "음성 제거", - "voiceName": "음성 이름", + "voice": "화자", + "showVoiceColumn": "\"화자\" 열 표시", + "voices": "화자", + "newVoiceDotDotDot": "새 화자...", + "removeVoices": "화자 제거", + "voiceName": "화자 이름", "browserPreview": "브라우저 미리보기", "importStylesTitle": "WebVTT 스타일 가져오기", "exportStylesTitle": "WebVTT 스타일 내보내기", @@ -1575,7 +1628,7 @@ "compareOnlyInOneFile": "하나의 파일에서만", "compareTextOrTimeDifference": "텍스트/시간 차이", "compareNumberDifference": "번호 차이", - "ignoreWhitespace": "띄어쓰기 무시", + "ignoreWhitespace": "공백 문자 무시", "ignoreWhitespaceHint": "띄어쓰기, 탭 또는 줄바꿈만 다른 줄은 서로 다른 것으로 처리하지 않습니다", "ignoreFormatting": "서식 무시", "ignoreFormattingHint": "서식 태그( 또는 {\\an8} 등)만 다른 줄은 서로 다른 것으로 처리하지 않습니다", @@ -1627,10 +1680,9 @@ "compareTimingDeltaHint": "참조 자막의 시작 시간과 종료 시간이 현재 자막보다 얼마나 늦거나(+) 빠른지(−) 표시합니다", "loadXFromFile": "파일에서 \"{0}\"을(를) 불러오기", "compareLoadSavedFile": "저장된 파일 불러오기", - "saveCompareHtmlTitle": "HTML 파일 저장 및 비교", + "saveCompareHtmlTitle": "비교 결과 HTML 파일 저장", "pickMatroskaTrackX": "Matroska 트랙 선택 - {0}", "pickTransportStreamTrackX": "전송 스트림 트랙 선택 - {0}", - "chapters": "챕터", "dvdVobFilesMissingX": "VOB 파일 일부가 없습니다 ({0}% 확인됨)", "pickMp4TrackX": "MP4 트랙 선택 - {0}", "pickMxfTrackX": "MXF 트랙 선택 - {0}", @@ -1643,7 +1695,6 @@ "propertyDefaultStyle": "기본 스타일", "propertyDefaultRegion": "기본 영역", "propertyStyleAttributeName": "스타일 속성 이름", - "propertyTimeCodeFormat": "타임코드 형식", "propertyTopOrigin": "상단 원점", "propertyTopExtent": "상단 범위", "propertyBottomOrigin": "하단 원점", @@ -1675,7 +1726,6 @@ "bookmarked": "즐겨찾기에 추가됨", "forced": "강제됨", "bookmarkContains": "즐겨찾기에 포함된 내용", - "blankLines": "빈 줄", "hearingImpaired": "청각 장애인용 (SDH)", "hearingImpairedBrackets": "대괄호 [...]", "hearingImpairedCurlyBrackets": "중괄호 {...}", @@ -1685,12 +1735,12 @@ "hearingImpairedUppercaseLine": "대문자 줄", "hearingImpairedLineContains": "줄 포함", "hearingImpairedMusicSymbols": "음악 기호만 있는 줄", - "hearingImpairedInterjections": "감탄사", "hearingImpairedSettingsHint": "자세한 설정은 '도구' > '청각 장애인용 텍스트 제거'에서 확인", + "selection": "선택 영역", "selectionNew": "새 선택 항목", "selectionAdd": "선택 항목에 추가", "selectionSubtract": "선택 항목에서 제외", - "selectionIntersect": "선택 항목과 교차" + "selectionIntersect": "기존 선택과 겹치는 항목만 선택" }, "multipleReplace": { "editRule": "규칙 편집", @@ -1706,9 +1756,8 @@ "xLinesAffected": "{0:#,##0}줄이 영향을 받음", "deleteCategoryConfirm": "카테고리 '{0}'을(를) 삭제하시겠습니까?", "deleteRuleConfirm": "규칙 '{0}'을(를) 삭제하시겠습니까?", - "findWhat": "찾아보기", + "findWhat": "찾을 내용", "descriptionOptional": "설명(선택 사항)", - "invalidRegularExpressionX": "잘못된 정규 표현식: {0}", "regularExpressionTooSlowX": "정규 표현식 처리 시간이 {0}초를 초과했습니다 - 규칙이 건너뛰어졌습니다. 더 간단한 패턴을 시도해 보세요", "moveToCategory": "카테고리로 이동" }, @@ -1724,8 +1773,7 @@ "replaceInTextAndOriginal": "텍스트와 원본 텍스트", "replaceInTextOnly": "텍스트만", "replaceInOriginalOnly": "원본 텍스트만", - "replacedOneOccurrence": "항목 1개가 교체되었습니다", - "replacedXOccurrences": "{0}개 항목이 교체되었습니다" + "replacedOneOccurrence": "항목 1개가 교체되었습니다" }, "regularExpressionContextMenu": { "wordBoundary": "단어 경계 (\\b)", @@ -1748,7 +1796,6 @@ "pleaseSelectExactlyOneSubtitle": "정확히 하나의 자막을 선택해주세요." }, "sourceView": { - "discardChangesTitle": "변경 사항을 취소하시겠습니까?", "discardChanges": "소스 텍스트가 변경되었습니다.\n변경 사항을 취소하시겠습니까?", "xLinesYSubtitles": "{0} 줄, {1} 자막", "xLinesYSubtitlesZErrors": "{0} 줄, {1} 자막, {2} 오류", @@ -1782,9 +1829,7 @@ "categoryGrammar": "문법", "categoryPunctuation": "구두점", "categoryCasing": "대소문자 표기", - "categoryOther": "기타", - "xNeedACloserLook": "{0} 개의 줄에 더 자세한 검토 필요", - "lineX": "{0}번째 줄", + "xNeedACloserLook": "제안 {0}개에 추가 검토 필요", "linesXToY": "{0}-{1}번째 줄", "largeChangeWarning": "큰 변경 사항 - 다시 쓴 것일 수 있으므로 자세히 검토하세요.", "mismatchWarning": "원본과 유사하지 않음 - 다른 줄에 속할 수 있습니다", @@ -1846,7 +1891,7 @@ "fixCommas": "쉼표 수정", "fixMissingSpaces": "잘못된 띄어쓰기 수정", "breakLongLines": "긴 줄 나누기", - "removeLineBreaks": "짧은 텍스트의 줄바꿈 제거", + "removeLineBreaks": "한 문장으로 된 짧은 텍스트의 줄 바꿈 제거", "removeLineBreaksAll": "짧은 텍스트의 줄바꿈 제거 (대사를 제외한 전부)", "removeLineBreaksPixelWidth": "한 줄로 표시 가능한 텍스트의 줄바꿈 제거 (픽셀 너비 기준)", "fixUppercaseIInsideLowercaseWords": "소문자 단어 내의 대문자 ‘i’ 수정(OCR 오류)", @@ -1856,7 +1901,7 @@ "startWithUppercaseLetterAfterParagraph": "단락 뒤의 글자를 대문자로 시작", "startWithUppercaseLetterAfterPeriodInsideParagraph": "단락 내 마침표 뒤의 첫 글자를 대문자로 시작", "startWithUppercaseLetterAfterColon": "콜론/세미콜론 뒤에 대문자로 시작", - "fixLowercaseIToUppercaseI": "소문자 'i'를 'I'로 수정(영어)", + "fixLowercaseIToUppercaseI": "영어 대명사 i를 I로 수정 (축약형 포함)", "fixCommonOcrErrors": "일반적인 OCR 오류 수정(OCR 바꾸기 목록 사용)", "removeSpaceBetweenNumber": "숫자 사이의 띄어쓰기 제거", "breakDialogsOnOneLine": "한 줄에 대사 나누기", @@ -1909,18 +1954,18 @@ "fixLowercaseIToUppercaseIExample": "What do i care. → What do I care.", "startTimeLaterThanEndTime": "텍스트 번호 {0}: 시작 시간이 끝 시간보다 늦음: {4}{1} → {2} {3}", "unableToFixStartTimeLaterThanEndTime": "텍스트 번호 {0}을(를) 수정할 수 없음: 시작 시간이 끝 시간보다 늦음: {1}", - "xFixedToYZ": "{0}이 다음으로 고정됨: {1}{2}", + "xFixedToYZ": "{0}을(를) 다음으로 수정: {1}{2}", "unableToFixTextXY": "텍스트 번호 {0}을(를) 수정할 수 없음: {1}", - "unneededSpace": "불필요한 공간", + "unneededSpace": "불필요한 공백", "unneededPeriod": "불필요한 마침표", "fixMissingSpace": "잘못된 띄어쓰기 수정", "fixUppercaseIInsideLowercaseWord": "소문자 단어 속의 대문자 ‘i’ 수정", "fixMissingPeriodAtEndOfLine": "줄 끝에 누락된 마침표 추가", "refreshFixes": "사용 가능한 수정 사항 새로 고침", - "autoBreak": "자동 &br", + "autoBreak": "자동 줄 바꿈(&B)", "unbreak": "줄바꿈 해제(&U)", "fixDoubleDash": "'--' → '...'로 수정", - "fixDoubleGreaterThan": "제거 '>>'", + "fixDoubleGreaterThan": ">> 제거", "fixEllipsesStart": "앞에 있는 '...'을 제거", "fixMissingOpenBracket": "문장 내 누락된 [ 또는 ( 보정", "fixMusicNotation": "음악 기호(예: âTª)를 원하는 기호로 바꾸기", @@ -1933,12 +1978,12 @@ "fixSpaceBetweenNumbersExample": "1 100 → 1100", "fixDialogsOneLineExample": "Hi John! - Hi Ida! → Hi John!
- Hi Ida!", "removeDialogFirstInNonDialogsExample": "- How are you? → How are you?", - "fixContinuationStyleX": "연속 스타일 수정: {0}", + "fixContinuationStyleX": "이어짐 표기 방식 수정: {0}", "fixUnnecessaryLeadingDots": "불필요한 선행 점 제거", "fixCommonErrorsProfiles": "일반적인 오류 수정 프로필", "fixCommonOcrErrorsStep1": "일반적인 오류 수정, 1단계(수정 방법 선택)", "searchRulesDotDotDot": "규칙 찾기...", - "goToApplyFixes": "수정 사항을 적용하려면 이동", + "goToApplyFixes": "수정 적용 단계로 이동", "backToFixList": "수정 목록으로 돌아가기", "fixCommonOcrErrorsStep2": "일반적인 오류 수정, 2단계(수정 사항 적용)", "fixCommonOcrErrorsStep2FixesFoundX": "일반적인 오류 수정, 2단계 - 수정 사항: {0}", @@ -1955,8 +2000,8 @@ "recalculate": "다시 계산", "addSeconds": "초 추가", "note": "참고: 표시되는 시간은 다음 텍스트의 시작 시간과 겹치지 않음", - "fixed": "수정됨", - "extendOnly": "확장 전용", + "fixed": "고정 길이", + "extendOnly": "늘리기만", "recalculateRequiresOcrNote": "재계산이 불가합니다 - 하나 이상의 자막에 OCR 텍스트가 없습니다. 먼저 OCR을 실행하세요." }, "applyDurationLimits": { @@ -1987,21 +2032,17 @@ "title": "타임코드 다듬기", "snapToFrames": "프레임에 맞추기", "minDuration": "최소 길이 (ms)", - "original": "원본", "beautified": "다듬은 후", "subtitlesCount": "자막", "changedCount": "변경", "shotChangesCount": "장면 전환 수", - "changeXOfY": "변경 {0}/{1}", - "noChanges": "변경 사항 없음 - 모든 큐가 이미 대상에 위치합니다", + "noChanges": "변경 사항 없음 - 모든 자막의 시간이 이미 기준에 맞습니다", "snappedToShotChange": "장면 전환에 맞춤", "snappedToFrame": "프레임에 맞춤", - "minGapEnforced": "최소 간격 설정값", + "minGapEnforced": "최소 간격 적용", "minDurationEnforced": "최소 길이 적용", "maxDurationEnforced": "최대 길이 적용", "noReasonNote": "프로필 규칙에 따라 조정됨", - "previousChange": "이전 변경", - "nextChange": "다음 변경", "editProfile": "프로필 편집...", "batchSnapToShotChanges": "큐를 장면 전환에 스냅 (가능한 경우)", "batchFrameRateFromVideo": "자막 파일과 같은 이름의 비디오 파일에서 프레임 속도 사용", @@ -2044,7 +2085,6 @@ "showSpeechOnly": "음성만 표시", "showSpeechOnlyHint": "음악과 효과음을 제거한 오디오로 정렬 후 파형을 표시합니다. 비교할 수 있도록 원본 파형은 그대로 유지합니다. 여기에서 음성을 분리하거나 메인 창의 파형에서 \"음성만 표시\"를 실행한 후 사용할 수 있습니다.", "align": "정렬", - "original": "원본", "aligned": "정렬 후", "intro": "정렬 모델을 선택하고 \"정렬\"을 누르면 오디오에서 각 줄의 음성을 찾아 타임코드를 정밀하게 조정합니다.", "extractingAudio": "오디오 추출 중...", @@ -2054,11 +2094,8 @@ "summaryXRetimedYKeptZSkipped": "시간 조정: {0} · 유지: {1} · 음성 없음: {2}", "meanShiftX": "평균 이동 시간: {0}밀리초", "toCheckX": "확인 필요: {0}", - "largeMovesToCheckX": "주변 줄과 달리 크게 이동해야 하는 {0}개 줄은 체크를 해제했습니다. 원본과 정렬 후 결과를 재생해 보고 올바른 줄을 체크하세요.", + "largeMovesToCheckX": "주변 줄과 달리 크게 이동해야 하는 {0}개 줄은 체크를 해제했습니다. 원본과 정렬 후 결과를 재생해 보고(F5는 정렬 후 줄, Shift+F5는 원래 줄 재생) 올바른 줄을 체크하세요.", "linesToCheckX": "{0}줄은 확인이 필요하여 체크하지 않았습니다. 대사를 들어 보고(F5는 정렬 후 줄, Shift+F5는 원래 줄 재생) 올바른 줄을 체크하세요.", - "changeXOfY": "변경 사항 {0}/{1}", - "previousChange": "이전 변경 사항", - "nextChange": "다음 변경 사항", "startShift": "시작", "endShift": "종료", "statusRetimed": "시간 조정됨", @@ -2070,17 +2107,15 @@ "statusFailed": "유지됨 - 정렬 실패", "statusAdjustedByHand": "직접 조정됨", "alignedWaveformHint": "줄을 드래그하면 이동하고, 양 끝을 드래그하면 시작 시간이나 종료 시간을 변경합니다.", - "playLine": "줄 재생", "undoAdjustment": "조정 취소", "playPause": "재생 / 일시 정지", "playAligned": "정렬 후", "playAlignedHint": "선택한 줄을 정렬 후 타임코드로 재생", - "apply": "적용", - "applyHint": "줄의 체크를 해제하면 원래 타임코드를 유지합니다. 줄을 두 번 클릭하면 재생합니다." + "applyHint": "줄의 체크를 해제하면 원래 타임코드를 유지합니다. 두 번 클릭하면 재생합니다. 정렬된 파형에서 이동하거나 크기를 조정할 수 있습니다." }, "beautifyTimeCodesProfile": { "title": "타임코드 다듬기 프로필 편집", - "loadPreset": "프리셋 불러오기", + "loadPreset": "사전 설정 불러오기", "presetDefault": "기본", "presetNetflix": "Netflix", "presetSdi": "SDI", @@ -2101,8 +2136,8 @@ "outCueClosest": "아웃 큐가 가장 가까움", "treatAsConnected": "간격이 다음보다 짧으면 연결된 것으로 간주:", "chaining": "체이닝", - "inCueOnShot": "장면 전환 위의 인큐", - "outCueOnShot": "장면 전환 위의 아웃큐", + "inCueOnShot": "장면 전환 지점의 인큐", + "outCueOnShot": "장면 전환 지점의 아웃큐", "maxGap": "최대 간격:", "shotChangeBehavior": "사이에 장면 전환이 있을 경우:", "dontChain": "체이닝 안함", @@ -2124,7 +2159,7 @@ "calculateBridgeGapsSmallerThanDotDotDot": "프레임 레이트로 간격 메우기 기준 계산...", "useXMsAsBridgeGapsSmallerThan": "\"{0}\"밀리초보다 짧은 간격을 메우시겠습니까?", "numberOfSmallGapsBridgedX": "연결된 간격 수: {0}", - "percentFoPrevious": "이전 대비 간격(%)", + "percentFoPrevious": "이전 자막에 배분할 비율 (%)", "gapChange": "간격 바꾸기" }, "renumber": { @@ -2134,7 +2169,7 @@ "sortBy": { "title": "자막 정렬", "sortOrder": "정렬 순서", - "sortByEndTime": "숨김 시간" + "sortByEndTime": "끝 시간" }, "batchConvert": { "title": "일괄 변환", @@ -2144,8 +2179,8 @@ "outputFolderX": "결과물 폴더: {0}", "encodingXOverwriteY": "인코딩: {0}, 기존 파일 덮어쓰기: {1}", "targetFormatSettings": "대상 형식 설정", - "fileNameContainsDotDotDot": "파일 이름에 다음 내용이 포함되어 있습니다...", - "trackLanguageContainsDotDotDot": "트랙 언어에는 다음 내용이 포함됩니다...", + "fileNameContainsDotDotDot": "파일 이름에 포함된 문자열...", + "trackLanguageContainsDotDotDot": "트랙 언어에 포함된 문자열...", "batchConvertSettings": "일괄 변환 설정", "assaSource": "ASSA 소스", "addFormatting": "서식 적용", @@ -2155,19 +2190,19 @@ "addAlignment": "정렬 적용", "addColor": "색상 적용", "deleteLinesWithSpecificActorsOrStyles": "등장인물 또는 스타일이 포함된 줄을 삭제(여러 개는 쉼표로 구분)", - "useSourceStylesIfPossible": "가능하다면 소스 스타일을 사용", + "useSourceStylesIfPossible": "가능하다면 소스 스타일을 사용 (아래 헤더는 ASSA가 아닌 입력에만 사용)", "keepSourceEmbeddedFonts": "원본에 포함된 글꼴 유지 (푸터)", "editStyles": "스타일 편집", "editProperties": "속성 편집", "editAttachments": "첨부 파일 편집", "errorsExportedX": "내보낸 오류: {0}", - "slowFontSizeChange": "글자 크기 변경 속도가 느림", + "slowFontSizeChange": "글자 크기를 서서히 변경", "increaseFontKerning": "글자 간격 늘리기", "scrollUp": "위로 스크롤", "scrollDown": "아래로 스크롤", "rotateIn": "회전하여 넣기", "tiltBounce": "틸트 바운스", - "fontSizeBounceIn": "글자 크기 조정", + "fontSizeBounceIn": "글자 크기 바운스 인", "assaChangeResolutionOnlyAppliesToAssa": "Advanced Sub Station Alpha(ASSA) 자막에만 적용됨", "assaChangeStyleTitle": "스타일 변경", "assaEmbedFontsTitle": "글꼴 포함", @@ -2175,14 +2210,14 @@ "adjustImageColorsTitle": "이미지 밝기/알파/색상 조정", "adjustImageColorsInfo": "이미지 기반 자막을 이미지 기반 형식으로 변환할 때만 적용됩니다 (예: Blu-ray sup에서 Blu-ray sup으로)", "assaChangeStyleFromStyle": "다음 스타일에서 변경", - "assaChangeStyleToStyle": "을(를)", + "assaChangeStyleToStyle": "변경 후 스타일", "assaChangeStyleImportStyle": "스타일 불러오기...", "assaChangeStyleTrimUnusedStyles": "사용하지 않은 스타일 제거", "assaChangeStylePropertiesTitle": "스타일 속성 변경", "assaChangeStylePropertiesInfo": "파일의 모든 스타일에서 선택한 필드만 변경하고, 스타일 자체는 그대로 둡니다.", "assaChangeStylePropertiesSetSpacing": "자간 설정값", "assaChangeStylePropertiesSetAlignment": "정렬 설정값", - "convertColorsToDialogTitle": "색상을 다이얼로그로 변환", + "convertColorsToDialogTitle": "색상을 대사로 변환", "convertColorsToDialogRemoveColorTags": "색상 태그 제거", "convertColorsToDialogAddNewLines": "새 줄 추가", "convertColorsToDialogReBreakLines": "줄 바꿈 재설정", @@ -2199,10 +2234,8 @@ "addVideoFiles": "비디오 파일 추가", "skipVideoFiles": "자막 파일만 추가", "doNotAskAgainVideoFiles": "다시 묻지 않기 (일괄 변환 설정에서 변경 가능)", - "settingsSectionOutput": "출력", "settingsSectionAddingFiles": "파일 추가", "settingsSectionImageBasedSubtitles": "이미지 기반 자막(OCR)", - "settingsSectionOther": "기타", "keepSourceFileTimestamp": "출력 파일에 원본 파일의 날짜/시간 유지", "preventSleepWhileConverting": "변환 중 절전 모드 진입 방지", "scanningFolderX": "{0} 스캔 중...", @@ -2227,7 +2260,6 @@ "xNotProcessed": "{0:#,###,##0}개 미처리", "removeUnicodeControlCharactersTitle": "유니코드 제어 문자 제거", "removeUnicodeControlCharactersInfo": "텍스트에서 보이지 않는 유니코드 방향 제어 문자(LRM, RLM, LRE, RLE, PDF, LRO, RLO)를 제거하고, 줄 바꿈 없는 공백을 일반 공백으로 바꿉니다.", - "preset": "사전 설정", "savePresetDotDotDot": "사전 설정 저장...", "deletePreset": "사전 설정 삭제", "presetName": "사전 설정 이름", @@ -2268,7 +2300,6 @@ "loadFromCurrentText": "현재 텍스트에서 불러오기", "loadFromCurrentTranslation": "현재 번역에서 불러오기", "loadFromFile": "파일에서 불러오기...", - "outputFormat": "출력 포맷", "outputFormatSubRip": "SubRip (.srt)", "outputFormatAssa": "Advanced Sub Station Alpha (.ass)", "style1": "스타일 1", @@ -2277,29 +2308,30 @@ }, "splitSubtitle": { "title": "자막 분할", - "numberOfEqualParts": "동일한 부분의 수", + "numberOfEqualParts": "균등 분할 수", "saveSplitParts": "분할된 부분 저장(_S)", - "xPartsSavedInFormatYToFolder": "{0}개 부분이 {1} 형식으로 폴더에 저장됨:" + "xPartsSavedInFormatYToFolder": "{0}개 부분이 {1} 형식으로 폴더에 저장됨:", + "splitBy": "분할 기준" }, "splitBreakLongLines": { "title": "긴 줄 나누기/재조정", - "splitLongLines": "긴 줄 (여러 줄로)나누기", + "splitLongLines": "긴 줄 나누기 (여러 줄로)", "rebalanceLongLines": "긴 줄 재조정", "rebalanceOnlyLinesTooLong": "너무 긴 줄이 있는 자막만", "rebalanceOnlyLinesTooLongHint": "모든 줄이 이미 한 줄 최대 길이 내에 있는 경우 기존 줄 바꿈은 그대로 두십시오. 의도적으로 균형이 맞지 않는 자막은 편집 의도에 맞을 수 있습니다", "splitLongLine": "긴 줄 나누기", "rebalanceLongLine": "긴 줄 재조정", "splitIntoXLines": "{0}줄로 나누기: ‘{1}’ → '{2}...'", - "linesSplitX": "줄 바꿈: {0}", - "linesSplitXLinesRebalancedY": "줄 바꿈: {0}, 재조정된 줄: {1}", + "linesSplitX": "나눈 줄: {0}", + "linesSplitXLinesRebalancedY": "나눈 줄: {0}, 재조정한 줄: {1}", "unbreakLinesShorterThanHint": "이 길이보다 짧은 텍스트는 단일 줄에 유지되거나 병합됩니다. 단일 줄 최대 길이로 설정하여 한 줄에 맞는 모든 텍스트를 분할하지 않고 유지하세요." }, "mergeShortLines": { "title": "짧은 줄 합치기", - "highlightParts": "하이라이트 부분(가라오케)", + "highlightParts": "부분 강조 표시 (가라오케)", "mergedLineInfo": "{0}을(를) {1}에 합침 - {2}", "linesMergedX": "합쳐진 줄: {0}", - "maxCharacters": "문장당 최대 글자 수", + "maxCharacters": "자막 하나당 최대 문자 수", "maxMillisecondsBetweenLines": "줄 간 최대 밀리초", "onlyContinuationLines": "연속된 줄만" }, @@ -2308,7 +2340,7 @@ "candidatesFoundX": "감지된 이어지는 줄: {0}", "noCandidatesFound": "이어지는 줄을 찾을 수 없습니다", "maxMillisecondsBetweenLines": "줄 사이의 최대 간격 (ms)", - "maxCharacters": "줄당 최대 문자 수", + "maxCharacters": "자막 하나당 최대 문자 수", "columnMerge": "병합", "columnFirst": "첫 줄", "columnSecond": "두번째 줄", @@ -2317,7 +2349,7 @@ "mergeLinesWithSameText": { "maxMsBetweenLines": "줄 간 최대 밀리초", "maxFramesBetweenLines": "줄 사이 최대 간격 (프레임)", - "includeIncrementingLines": "숫자가 점점 늘어나는 텍스트가 포함된 줄을 포함", + "includeIncrementingLines": "텍스트가 점차 늘어나는 줄 포함", "includeRollUpCaptions": "롤업 (스크롤) 자막 포함" }, "mergeLinesWithSameTimeCodes": { @@ -2336,37 +2368,33 @@ "ellipsesNotThreeDots": "점 3개(...) 대신 말줄임표(…)를 사용", "onlyAllowedGlyphs": "허용된 문자만 사용 가능", "italics": "기울임", - "maxCharsSec": "초당 최대 문자 수", "maxDuration": "최대 길이", - "maxLineLength": "최대 줄 길이", - "minDuration": "최소 기간", - "maxNumberOfLines": "최대 줄 수", + "minDuration": "최소 길이", "oneToTenSpellOut": "1부터 10까지 글자로 쓰기", - "shotChanges": "장면 전환", - "startNumberSpellOut": "시작 번호 글자로 표기", + "startNumberSpellOut": "문장 첫머리의 숫자를 글자로 표기", "textforHiUseBrackets": "HI용 텍스트, 괄호를 사용", "twoFrameGrap": "두 프레임 간격", "whiteSpace": "띄어쓰기", "childrensProgram": "어린이 프로그램", "sdh": "SDH (청각 장애인용 자막)", - "glyphCheckReport": "{1}번 줄에서 잘못된 문자 {0}이(가) 발견", - "whiteSpaceCheckForXReport": "{1}번 줄에서 띄어쓰기 문제({0})이(가) 발견", + "glyphCheckReport": "{1}번째 열에서 잘못된 문자 {0} 발견", + "whiteSpaceCheckForXReport": "{1}번째 열에서 공백 문제({0}) 발견", "whiteSpaceBeforePunctuation": "구두점 앞 누락", "whiteSpaceLineEnding": "줄 끝", "whiteSpaceCheckConsecutive": "2+ 연속", "twoLinesMaximum": "최대 두 줄", "textCanFitOnOneLine": "텍스트가 한 줄에 들어갈 수 있음", - "singleVerticalLineLengthMax11": "세로선 하나 길이 > 11", - "singleHorizontalLineLengthMax13": "가로선 하나 길이 > 13", + "singleVerticalLineLengthMax11": "세로쓰기 한 줄 길이 > 11", + "singleHorizontalLineLengthMax13": "가로쓰기 한 줄 길이 > 13", "singleLineLengthExceedsX": "한 줄 길이 > {0}", - "numbersOneToTenSpellOut": "1부터 10까지의 숫자는 하나, 둘, 셋 등과 같이 하나씩 써야 함", + "numbersOneToTenSpellOut": "1부터 10까지는 숫자 대신 하나, 둘, 셋처럼 글자로 표기", "useSquareBracketsForHiAndSoundEffects": "화자 ID 또는 오디오 효과를 대괄호 [ ]로 묶음", "shotChangeInCueWithinXFramesAfterSnap": "인큐는 장면 전환 후 {0} 프레임 이내에 위치하며, 인큐를 장면 전환 지점에 맞춤", "shotChangeInCue1ToXFramesBeforeSnap": "인큐는 장면 전환 1-{0} 프레임 전이며, 인큐를 장면 전환 시점에 맞춤", "shotChangeInCueXToYFramesBeforePull": "인큐는 장면 전환 전 {0}-{1} 프레임 지점에 위치하며, 인큐를 장면 전환 전 0.5초({2} 프레임) 지점으로 조정", - "shotChangeOutCueWithinXFramesAfterChange": "아웃큐는 샷 전환 후 {0} 프레임 이내에 있음", - "shotChangeOutCueWithinXFramesOfChange": "아웃큐는 샷 전환 후 {0} 프레임 이내에 있음", - "shotChangeOutCueOnShotChange": "아웃큐는 샷 전환 시점에 있으며, 2프레임 간격을 지켜야 함", + "shotChangeOutCueWithinXFramesAfterChange": "아웃큐가 장면 전환 후 {0}프레임 이내에 있음", + "shotChangeOutCueWithinXFramesOfChange": "아웃큐가 장면 전환 전 {0}프레임 이내에 있음", + "shotChangeOutCueOnShotChange": "아웃큐가 장면 전환 지점에 있으므로 2프레임 간격을 유지해야 함", "dualSpeakersHyphenWithoutSpace": "두 화자: 띄어쓰기 없이 하이픈(-)을 사용", "dualSpeakersHyphenWithSpace": "두 화자: 하이픈과 띄어쓰기를 함께 사용", "dualSpeakersHyphenWithSpaceSecondOnly": "두 화자: 두 번째 화자만 표시하려면 하이픈(-)과 띄어쓰기를 사용", @@ -2391,15 +2419,13 @@ "adjustBrightnessDotDotDot": "밝기 조절...", "adjustAlphaDotDotDot": "투명도 조정...", "cropImages": "이미지 잘라내기", - "importTimeCodes": "타임코드 가져오기...", "setText": "텍스트 설정", "screenWidth": "화면 너비", "screenHeight": "화면 높이", - "alphaThresholdInfo": "투명도가 임계값 미만인 픽셀은 완전히 투명해짐", + "alphaThresholdInfo": "알파값이 임계값보다 낮은 픽셀을 완전히 투명하게 처리", "resetToDefaults": "기본값으로 초기화", "alphaAdjustmentInfo": "알파 조정: 알파 채널에 값을 더하거나 뺍니다.\n미리 보기가 자동으로 업데이트되며, 투명도를 시각화하기 위해 체크무늬 배경으로 표시됩니다.", "adjustBrightness": "밝기 조절", - "brightness": "명도", "contrast": "대비", "gamma": "감마", "brightnessAdjustmentInfo": "슬라이더를 조정하여 밝기, 대비 및 감마를 변경하세요.\n미리 보기가 자동으로 업데이트되어 처음 선택한 자막이 표시됩니다.", @@ -2413,7 +2439,7 @@ "topAlignLines": "위쪽 정렬", "bottomAlignLines": "아래쪽 정렬", "appendSubtitleDotDotDot": "자막 추가...", - "shiftTimeCodes": "시간 코드 이동", + "shiftTimeCodes": "타임코드 이동량", "sortByStartTime": "시작 시간순 정렬", "videoPreview": "비디오", "positionMap": "위치 맵", @@ -2447,8 +2473,7 @@ "useVideoFrameRateXInsteadOfY": "비디오의 프레임 속도는 {0}이지만 자막은 {1}(으)로 설정되어 있습니다.\n\n비디오의 프레임 속도({0})를 사용하시겠습니까?" }, "removeTextForHearingImpaired": { - "interjections": "감탄사", - "skipIfStartWith": "다음과 같으면 건너뛰기", + "skipIfStartWith": "다음으로 시작하면 건너뛰기", "removeTextBetween": "사이의 텍스트 삭제", "brackets": "대괄호", "curlyBrackets": "중괄호", @@ -2473,12 +2498,10 @@ "pickFontNameTitle": "글꼴 이름 선택", "pickFontNameInstalledFonts": "설치된 글꼴", "pickFontNameCollectedFonts": "수집된 글꼴", - "colorPickerTitle": "색상 선택", - "colorPickerBrightness": "밝기", "filterLayersTitle": "표시할 레이어 필터링", - "filterLayersHideFromWaveform": "파형/스펙트로그램 숨기기", - "filterLayersHideFromSubtitleGrid": "자막 목록 숨기기", - "filterLayersHideFromVideoPreview": "비디오 미리 보기 숨기기", + "filterLayersHideFromWaveform": "파형/스펙트로그램에서 숨기기", + "filterLayersHideFromSubtitleGrid": "자막 목록에서 숨기기", + "filterLayersHideFromVideoPreview": "비디오 미리 보기에서 숨기기", "pickSubtitleFormat": "자막 형식 선택", "pickSubtitleFormatImageBasedNoPreview": "이미지 기반의 자막 형식입니다.\n변환 과정에서 비트맵이 생성되며, 미리 보기 기능은 지원되지 않습니다.", "recentColors": "최근 사용한 색상", @@ -2500,8 +2523,8 @@ "wordNotFound": "단어를 찾을 수 없음", "loadSourceImage": "원본 이미지 보기...", "lineXofY": "맞춤법 검사기 - {1}줄 중 {0}번 줄", - "changeWordFromXToY": "'{0}‘을(를) ’{1}'(으)로 변경", - "changeAllWordsFromXToY": "모든 ‘{0}'을(를) ’{1}'(으)로 변경", + "changeWordFromXToY": "'{0}'을(를) '{1}'(으)로 변경", + "changeAllWordsFromXToY": "모든 '{0}'을(를) '{1}'(으)로 변경", "ignoreWordXOnce": "'{0}'이라는 단어를 한 번 무시", "ignoreWordXAlways": "'{0}'이라는 단어를 항상 무시", "wordXAddedToNamesList": "이름 목록에 '{0}'이(가) 추가됨", @@ -2515,7 +2538,6 @@ "pickLiveSpellCheckDictionary": "실시간 맞춤법 검사 사전 선택", "undoX": "실행 취소: {0}", "playCurrentLineHint": "비디오 플레이어에서 현재 줄을 재생하고 끝에서 일시 정지", - "editWholeText": "전체 텍스트 수정", "editWholeTextTitle": "맞춤법 검사 - 모든 텍스트 편집", "continueFromCurrentLine": "현재 줄에서부터 검사를 계속할까요?\n\n예 = 현재 줄부터 시작\n아니오 = 처음부터 시작", "continueFromTop": "자막의 끝까지 검사를 마쳤습니다.\n\n처음부터 시작할까요?", @@ -2544,29 +2566,30 @@ "video": { "burnIn": { "title": "자막이 삽입된 비디오 생성", - "targetFileSize": "대상 파일 크기(2단계 인코딩 필요)", + "targetFileSize": "목표 파일 크기 (인코더에 따라 2패스 사용)", "fileSizeMb": "파일 크기 (MB)", "matchSourceVideoSize": "원본 비디오 크기와 맞추기", "bitRate": "비트 전송률", "totalBitRateX": "총 비트 전송률: {0}", - "sampleRate": "샘플링 속도", - "audio": "오디오", - "preset": "사전 설정", + "sampleRate": "샘플레이트", "tune": "튜닝", "pixelFormat": "픽셀 형식", "crf": "CRF", "useSource": "소스 사용", - "fontSizeFactor": "글자 크기 요소", + "fontSizeFactor": "글자 크기 조정값", "boxType": "상자 유형", "fromTime": "시작 시간", "toTime": "종료 시간", "audioEncoding": "오디오 인코딩", "outputProperties": "결과물 속성...", "videoFileSize": "비디오 파일 크기", - "oneBox": "한 칸", + "oneBox": "하나의 상자", "logoInfo": "PNG 이미지를 선택하고 드래그하여 비디오 상의 원하는 위치에 배치하세요.", "noSubtitlesGenerateAnyway": "비디오에 넣을 자막이 없습니다.\n\n자막 없이 비디오를 생성하시겠습니까?", - "noSubtitlesInXItemsGenerateAnyway": "일괄 처리 항목 {0}개에 비디오에 넣을 자막이 없습니다.\n\n해당 비디오를 자막 없이 생성하시겠습니까?" + "noSubtitlesInXItemsGenerateAnyway": "일괄 처리 항목 {0}개에 비디오에 넣을 자막이 없습니다.\n\n해당 비디오를 자막 없이 생성하시겠습니까?", + "subtitleStyle": "자막 스타일", + "videoOutput": "비디오 출력", + "targetSize": "목표 파일 크기" }, "videoTransparent": { "title": "자막이 포함된 투명 비디오 생성" @@ -2591,9 +2614,9 @@ "detectSpeakersNeedsNewerCrispAsr": "\"화자 감지\"를 사용하려면 Crisp ASR v{0} 이상이 필요하지만, 현재 v{1}이 설치되어 있습니다.\n\n엔진 옆의 기어 버튼에서 Crisp ASR을 업데이트하거나 \"화자 감지\"를 끄세요.", "xNeedsNewerCrispAsr": "{0}에는 Crisp ASR v{1} 이상이 필요하지만 현재 v{2}이(가) 설치되어 있습니다.\n\n지금 업데이트를 다운로드하여 설치하시겠습니까?", "vad": "VAD", - "vadHint": "음성 활동 감지: 말하는 부분만 텍스트로 변환하고, 화자가 쉬는 지점에서 구간을 나눕니다.\n자동: Silero를 사용하며, 필요한 엔진(Cohere, Mega, Index-Echo)에만 적용합니다.\nSilero, FireRedVAD, WebRTC: 모든 Crisp ASR 엔진에 항상 적용합니다. FireRedVAD가 가장 정확합니다.\nIndex-Echo는 항상 Silero를 사용합니다. 고급 설정의 --vad, --vad-model, --chunk-seconds 옵션이 우선 적용됩니다.", + "vadHint": "음성 활동 감지: 말하는 부분만 텍스트로 변환하고, 화자가 쉬는 지점에서 구간을 나눕니다.\n자동: Silero를 사용하며, 필요한 엔진(Cohere, Mega, Index-Echo)에만 적용합니다.\nSilero, FireRedVAD, Whisper-VAD, WebRTC: 모든 Crisp ASR 엔진에 항상 적용합니다. FireRedVAD가 가장 정확하며, Whisper-VAD는 구간 분할이 가장 적고 깔끔하지만 가장 느립니다.\nIndex-Echo는 항상 Silero를 사용합니다. 고급 설정의 --vad, --vad-model, --chunk-seconds 옵션이 우선 적용됩니다.", "inputLanguage": "입력 언어", - "advancedWhisperSettings": "고급 Whisper 설정", + "advancedWhisperSettings": "고급 음성 텍스트 변환 매개변수", "downloadingSpeechToTextEngine": "STT 엔진 다운로드 중", "unpackingSpeechToTextEngine": "STT 엔진 압축 푸는 중", "enableVad": "VAD 활성화", @@ -2605,7 +2628,7 @@ "selectModel": "모델 선택", "addCustomModelDotDotDot": "사용자 정의 모델 추가...", "customModelHelp": "원하는 모델을 직접 사용할 수 있습니다: 모델 파일(whisper.cpp ggml '.bin') 또는 모델 폴더('model.bin'이 포함된 faster-whisper 폴더)를 선택하세요. 이 파일은 models 폴더로 복사되어 위 목록에 추가됩니다.", - "viewToolsLogFile": "Whisper 로그 파일 보기", + "viewToolsLogFile": "도구 로그 파일 보기", "updateXTitle": "{0}을(를) 업데이트하시겠습니까?", "updateXMessage": "{0}의 최신 버전을 사용할 수 있습니다.{1}{1}지금 업데이트를 다운로드하여 설치하시겠습니까?", "downloadingSpeechToTextModel": "STT 모델 다운로드 중", @@ -2617,7 +2640,7 @@ "fixCasing": "대/소문자 수정", "addPeriods": "마침표 추가", "changeUnderlineToColor": "밑줄 대신 색상으로 변경", - "removeNonSpeechLines": "대화가 아닌 자막 제거", + "removeNonSpeechLines": "음성 외 자막 제거", "removeNonSpeechLinesHint": "\"[음악]\"나 \"(파도 치는 소리)\"처럼 소리를 설명하는 자막을 제거합니다.", "removeRepeatedLines": "반복된 자막 제거", "removeRepeatedLinesHint": "이전 자막을 그대로 반복하는 자막을 제거합니다 (엔진 루프)", @@ -2628,20 +2651,16 @@ "qualityReportLinesChecked": "확인된 줄", "qualityReportIssuesFound": "발견된 문제", "qualityReportLinesRemoved": "제거된 줄", - "qualityReportTooShort": "너무 짧음", "qualityReportTooShortHint": "최소 표시 시간보다 짧거나 읽기 속도가 최대치를 초과함", - "qualityReportTooLong": "너무 긺", "qualityReportTooLongHint": "최대 표시 시간보다 길거나, 긴 시간 동안 단어가 거의 없음 (할루시네이션 가능성 높음)", - "qualityReportOverlap": "겹침", "qualityReportOverlapHint": "다음 자막이 시작된 후에 끝남", - "qualityReportNonSpeech": "대화가 아닌 자막", + "qualityReportNonSpeech": "음성 외 자막", "qualityReportNonSpeechHint": "\"[음악]\"처럼 소리나 음악 등을 설명하는 자막", "qualityReportRepeated": "반복됨", "qualityReportRepeatedHint": "이전 자막과 동일한 텍스트 (엔진 루프)", "qualityReportRemoved": "제거됨", "qualityReportAll": "모두", "qualityReportIssue": "문제", - "qualityReportDetail": "세부사항", "qualityReportTip": "자막 줄은 새 자막에서 번호와 함께 나열됩니다. 더 수정하려면 \"일반적인 오류 수정\" 또는 후처리 설정을 사용하시고, 많은 줄이 영향을 받는 경우 다른 모델/엔진을 시도해 보세요.", "qualityReportDoNotShowAgain": "이 보고서를 다시 표시하지 않기", "engineSettings": "STT 엔진 설정", @@ -2661,8 +2680,7 @@ "testVoice": "음성 테스트", "addAudioToVideoFile": "비디오 파일에 오디오 추가", "engineAndVoice": "엔진 및 음성", - "output": "출력", - "xLinesFromY": "{1}개 중 {0}줄", + "xLinesFromY": "{1}의 자막 {0}줄", "xLines": "{0}줄", "xVoices": "{0}개 음성", "reviewAudioSegmentsHint": "최종 믹스 전 각 줄을 확인하세요", @@ -2686,11 +2704,9 @@ "instructions": "지침", "instructionsHint": "선택 사항인 말하기 스타일입니다. 예: \"차분하고 따뜻한 목소리로 말하세요\". 이 기능을 지원하는 모델에만 전송됩니다 (tts-1/tts-1-hd 제외)", "openAiSpeedHint": "0.25~4.0 범위의 음성 속도입니다 (1.0은 보통 속도). 일부 모델은 지원하지 않습니다", - "outputFormat": "출력 형식", "outputFormatHint": "서버에 요청할 오디오 형식입니다. \"자동\"은 MP3를 요청하며, PCM만 반환하는 모델(예: Gemini TTS)에서는 PCM으로 전환합니다", "regenerateAudio": "오디오 다시 생성", "autoContinuePlaying": "자동 재생 계속", - "playLine": "줄 재생", "fitDurationToGeneratedAudio": "생성된 오디오에 맞게 길이 조정", "resetTiming": "타이밍 초기화", "addingAudioToVideoFileDotDotDot": "비디오 파일에 오디오를 추가하는 중...", @@ -2752,23 +2768,21 @@ "installToEngine": "엔진에 설치", "downloadAndInstall": "다운로드 및 설치", "selectAtLeastOneVoicePack": "하나 이상의 음성 팩을 선택하세요", - "downloadingXDotDotDot": "{0} 다운로드 중...", "installingXDotDotDot": "{0} 설치 중...", "xVoicesInstalledYSkipped": "음성 {0}개 설치됨 ({1}개 이미 존재)", "useSpeechToTextDotDotDot": "음성 텍스트 변환(STT) 사용...", "autoCastMenuItem": "비디오에서 음성을 찾아 복제...", "autoCastSpeakersTitle": "비디오에서 찾은 음성", - "autoCastSpeakersSubtitle": "각 화자를 이름으로 지정하세요 - 이름은 자막의 배우와 복제된 음성의 이름이 됩니다. 두 화자에게 같은 이름을 주면 하나의 음성으로 병합됩니다.", + "autoCastSpeakersSubtitle": "각 화자의 이름을 지정하세요 - 이름은 자막의 등장인물과 복제된 음성의 이름이 됩니다. 두 화자에게 같은 이름을 주면 하나의 음성으로 병합됩니다.", "autoCastFoundXSpeakersInYLines": "{0}명의 화자, {1}줄", "autoCastLines": "줄", - "autoCastAudio": "오디오", - "autoCastSays": "말함", + "autoCastSays": "대사", "autoCastNeedsVideo": "음성을 찾기 위해서는 비디오가 열려 있어야 합니다.", "autoCastNoSpeakersFound": "화자를 찾을 수 없습니다. 화자를 구분할 수 있는 음성-텍스트 엔진을 사용하여 생성되어야 합니다. (예: Crisp ASR MOSS Diarize)", "autoCastCloningX": "{0} 복제 중...", "autoCastDoneXVoices": "{0}개의 음성이 복제됨 - 더빙을 생성하려면 텍스트 음성 변환을 열어주세요", "autoCastNothingCloned": "음성을 복제할 수 없습니다 - 자세한 내용은 로그를 참조하세요.", - "autoCastReplaceSubtitleQuestion": "이 작업은 열려 있는 자막을 생성된 자막으로 교체합니다. 계속하시겠습니까?", + "autoCastReplaceSubtitleQuestion": "열려 있는 자막을 비디오의 음성 인식 결과로 바꿉니다. 계속하시겠습니까?", "cloneVoicePerLine": "비디오에서 복제 (각 줄의 음성)", "cloneVoicePerLinePreparing": "비디오에서 각 줄의 음성 가져오는 중...", "cloneVoicePerLineNeedsVideo": "각 줄의 음성을 복제하려면 자막이 속한 비디오를 열어야 합니다. 비디오를 열고 다시 시도하세요.", @@ -2789,7 +2803,6 @@ "voiceCloneConsentDeclined": "해당 사항에 동의해야 음성 복제를 사용할 수 있습니다.", "advancedTtsSettings": "고급 TTS 설정", "advancedTtsAudioProcessing": "오디오 처리", - "advancedTtsOutput": "출력", "advancedTtsVoiceCloning": "음성 복제", "cleanCloneReferences": "음성 복제용 참조 오디오 정리 (Sidon)", "cleanCloneReferencesDescription": "비디오에서 가져온 클립이나 음성 관리자에서 가져온 녹음 등 음성 복제에 사용하는 참조 오디오의 음악, 잡음, 잔향을 제거합니다. audio.cpp에서 Sidon 음성 복원 모델을 사용하며, 940 MB 다운로드가 필요합니다. 배경 소리까지 복제되는 것을 막지만, 아주 작은 목소리나 겹쳐 말하는 부분은 먹먹하게 들릴 수 있습니다.", @@ -2797,30 +2810,33 @@ "downloadSidonTitle": "Sidon을 다운로드하시겠습니까?", "downloadSidonQuestionX": "음성 복제용 참조 오디오를 정리하려면 Sidon 음성 복원 모델({0})이 필요합니다.\n\n지금 다운로드하시겠습니까? 다운로드하지 않으면 참조 오디오를 그대로 사용합니다.", "proAudioPostProcessing": "프로 오디오 후처리", - "proAudioPostProcessingDescription": "각 구간에 EQ 웜, 노이즈 게이트, 컴프레션, 라우드니스 정규화(-16 LUFS) 및 페이드 인/아웃을 적용합니다.", + "proAudioPostProcessingDescription": "각 클립에 EQ, 노이즈 게이트, 컴프레션, 라우드니스 정규화(-16 LUFS) 및 짧은 페이드 인/아웃을 적용합니다.", "generatingSpeechSegmentXOfY": "음성 생성 중: {1}개 구간 중 {0}번째", "adjustingSpeedSegmentXOfY": "속도 조정 중: {1}개 구간 중 {0}번째", "mergingAudioSegmentXOfY": "오디오 합치는 중: {1}개 구간 중 {0}번째", "postProcessingSegmentXOfY": "후처리 중: {1}개 구간 중 {0}번째", "audioDucking": "오디오 덕킹", - "audioDuckingDescription": "원본 비디오 오디오 음량을 줄이고 TTS 오디오와 섞어서 원본 사운드트랙이 희미하게 들리도록 합니다.", + "audioDuckingDescription": "원본 비디오 오디오 음량을 줄이고 TTS 오디오와 섞어서 원본 사운드트랙이 희미하게 들리도록 합니다. 음성을 비디오 파일에 추가할 때만 적용됩니다.", "removeOriginalSpeech": "원본 음성 제거 (느림)", - "removeOriginalSpeechDescription": "원본 비디오의 음악과 효과음은 유지하고 음성만 제거한 뒤, 새 음성을 합칩니다. GPU를 사용해도 비디오 길이만큼 시간이 걸리며, GPU가 없으면 몇 배 더 오래 걸립니다. 오디오 더킹을 켜면 더킹 볼륨 설정이 음악과 효과음에 적용됩니다. 음성을 비디오 파일에 추가할 때만 적용됩니다.", + "removeOriginalSpeechDescription": "원본 비디오의 음악과 효과음은 유지하고 음성만 제거한 뒤, 새 음성을 합칩니다. GPU를 사용해도 비디오 길이만큼 시간이 걸리며, GPU가 없으면 몇 배 더 오래 걸립니다. 오디오 덕킹을 켜면 덕킹 볼륨 설정이 음악과 효과음에 적용됩니다. 음성을 비디오 파일에 추가할 때만 적용됩니다.", "removingOriginalSpeech": "원본 음성 제거 중...", "removeOriginalSpeechFailed": "원본 음성을 제거하지 못해 제거 과정 없이 새 음성을 비디오에 추가했습니다.", + "speechRemovalModelDescription": "최고 품질은 음악과 효과음을 최대한 유지합니다. 빠름은 약 3배 빠르지만 음악이 조금 더 손실됩니다.", + "speechRemovalBestQuality": "최고 품질 (Mel-Band RoFormer)", + "speechRemovalFast": "빠름 (HTDemucs)", "videoTruncatedWarning": "원본 비디오의 길이는 {1}이지만, 새 비디오 파일의 영상은 {0} 이후로 멈춥니다. 소리는 계속 재생되지만 화면은 정지됩니다.\n\nFFmpeg 출력은 Subtitle Edit 데이터 폴더의 error-log.txt에서 확인하세요. 파일은 보존되어 있습니다.", "originalVolumePercent": "원본 음량 %", "vadSilenceCompression": "VAD 무음 압축", - "vadSilenceCompressionDescription": "템포를 변경하기 전에 단어 사이의 간격을 줄입니다. 음성 활동 감지(VAC)를 사용하여 음성은 그대로 두고 무음 구간만 압축합니다. 이는 음질 저하 없이 시간 간격을 줄여주기 때문에 가장 권장되는 첫 번째 단계입니다.", + "vadSilenceCompressionDescription": "음성 속도를 높이는 대신 단어 사이의 무음을 줄여 음질 저하 없이 클립 길이를 맞춥니다.", "maxSilenceMs": "최대 무음 시간 (ms)", - "highQualityTimeStretch": "고품질 오디오 늘리기 (WSOLA/rubberband)", - "highQualityTimeStretchDescription": "피치를 유지하면서 속도를 변경할 때 기본 atempo 필터 대신 러버밴드 알고리즘(WSOLA)을 사용합니다. 특히 빠른 속도에서 더욱 자연스러운 음성을 생성합니다. FFmpeg 빌드에 librubberband가 포함되어 있어야 하며, 사용할 수 없는 경우 자동으로 atempo로 대체됩니다.", + "highQualityTimeStretch": "고품질 오디오 시간 조절", + "highQualityTimeStretchDescription": "rubberband 알고리즘으로 음성 속도를 조절하여 기본 방식보다 자연스럽게 들립니다. FFmpeg에 librubberband가 없거나 실행에 실패하면 기본 방식을 사용합니다.", "rubberbandInstalled": "(설치됨)", "rubberbandNotFound": "(FFmpeg에서 찾을 수 없음)", - "silencePaddingMs": "무음 시간 (ms)", + "silencePaddingMs": "추가 무음 시간 (ms)", "silencePaddingMsDescription": "각 클립 끝에 짧은 무음을 넣습니다. 문장 사이에 숨 쉴 공간을 제공하는 데 유용합니다.", - "outputSampleRate": "출력 샘플링 속도(0=기본값)", - "outputSampleRateDescription": "모든 구간을 지정된 샘플링 속도(예: 44100, 48000)로 재샘플링합니다. 원래 속도를 유지하려면 0으로 설정하십시오.", + "outputSampleRate": "출력 샘플레이트 (0=원본 유지)", + "outputSampleRateDescription": "모든 구간을 지정된 샘플레이트(예: 44100, 48000)로 재샘플링합니다. 기존 샘플레이트를 유지하려면 0으로 설정하십시오.", "generationFolder": "생성 폴더", "generationFolderDescription": "실행 중에 생성된 오디오 클립의 폴더입니다. 시스템 임시 폴더를 사용하려면 비워 두십시오. 실행할 때마다 별도의 하위 폴더가 생성됩니다.", "deleteTempFiles": "닫을 때 생성된 클립 삭제", @@ -2847,24 +2863,24 @@ "voiceGender": "성별", "voiceAge": "나이", "voicePitch": "음높이", - "voiceAccent": "발음", + "voiceAccent": "억양", "voiceInstructionClonedVoiceNote": "음성 디자인은 \"기본\" 음성에만 영향을 미칩니다 - 복제된 음성은 자신의 특성을 유지합니다.", "actorVoicesTitle": "TTS - 배역", - "actorVoicesSubtitle": "각 등장인물이나 음성에 TTS 음성(및 선택적 음성 디자인 지침)을 할당합니다.", + "actorVoicesSubtitle": "각 등장인물이나 화자에 TTS 음성(및 선택적 음성 디자인 지침)을 할당합니다.", "actorVoicesAssignedXOfY": "{1}개 중 {0}개 할당됨", - "actorOrVoice": "등장인물 / 음성", + "actorOrVoice": "등장인물 / 화자", "applyDefaultToAll": "전체 기본값 적용", "clearAllAssignmentsConfirm": "모든 음성 할당을 삭제하시겠습니까?", "setupCast": "배역...", - "setupCastHint": "각 등장인물(ASSA) 또는 음성(WebVTT)에 TTS 음성을 할당합니다.", + "setupCastHint": "각 등장인물(ASSA) 또는 화자(WebVTT)에 TTS 음성을 할당합니다.", "actorVoicesRowSettingsTitle": "TTS - 음성 설정", "voiceSettingsForX": "\"{0}\"에 대한 음성 설정", "voiceInstructionFreeTextHint": "음성 톤을 형성하기 위해 엔진에서 사용하는 텍스트입니다.", "voiceDesign": "음성 디자인", - "noActorsFoundMessage": "배우를 찾을 수 없습니다. 먼저 자막 내에 등장인물 필드를 설정하세요.", - "noWebVttVoicesFoundMessage": "WebVTT 파일에 음성이 없습니다.", + "noActorsFoundMessage": "등장인물을 찾을 수 없습니다. 먼저 자막 줄에 등장인물 필드를 설정하세요.", + "noWebVttVoicesFoundMessage": "WebVTT 파일에 화자가 없습니다.", "mergeContinuationLinesPromptTitle": "이어지는 줄을 병합할까요?", - "mergeContinuationLinesPromptMessage": "일부 줄은 여러 자막에 걸쳐 분할된 단일 문장으로 나타납니다.\n\n생성 전에 이를 병합하면 TTS 엔진이 각 생각을 하나의 그룹으로 말하게 되어 일반적으로 더 자연스럽게 들립니다.\n\n지금 병합을 검토하고 적용하시겠습니까?", + "mergeContinuationLinesPromptMessage": "일부 문장이 여러 자막에 나뉘어 있는 것으로 보입니다.\n\n생성 전에 병합하면 TTS 엔진이 이어지는 문장을 한 호흡으로 읽게 되어 대체로 더 자연스럽게 들립니다.\n\n지금 병합을 검토하고 적용하시겠습니까?", "skipNoiseLinesPromptTitle": "소리 및 음악 줄을 건너뛸까요?", "skipNoiseLinesPromptMessage": "일부 줄에는 ♪ 또는 [문이 쾅 닫힘]처럼 소리나 음악만 들어 있습니다.\n\n음성 엔진은 이런 줄을 소리 내어 읽으려 하며, 종종 단어를 지어 냅니다.\n\n이 줄을 검토한 뒤 음성이 생성되지 않게 둘까요?", "skipNoiseLinesTitle": "소리나 음악만 있는 줄", @@ -2892,13 +2908,10 @@ "shotChangesList": "장면 전환 목록", "shotChangesClearQuestion": "모든 장면 전환을 삭제하시겠습니까?", "deleteSelectedShotChangeQuestion": "선택한 장면 전환 사항을 삭제하시겠습니까?", - "shotChanges": "장면 전환", "exportShotChanges": "장면 전환 내보내기" }, "chapters": { - "title": "챕터", "chaptersDotDotDot": "챕터...", - "chapters": "챕터", "selectedChapter": "선택한 챕터", "chapterTitle": "챕터 제목", "startTime": "시작 시간", @@ -2919,10 +2932,9 @@ "adjustTimes": "시간 조정", "shiftAllTimes": "모든 시간 이동", "shiftAllTimesDescription": "모든 챕터를 동일한 시간만큼 앞으로 또는 뒤로 이동합니다.", - "scaleTimes": "프레임 속도 변경", "scaleTimesDescription": "한 프레임 속도에서 다른 프레임 속도로 모든 챕터 시간을 조정합니다.", "fromFrameRate": "원본", - "toFrameRate": "을(를)", + "toFrameRate": "변경 후", "writeToVideo": "비디오에 기록하기...", "writeToVideoTitle": "챕터를 비디오에 기록하기", "writeToVideoDescription": "챕터는 비디오 파일의 복사본에 기록됩니다. 재인코딩되지 않으므로 빠르고 손실이 없습니다.", @@ -2953,13 +2965,10 @@ "startOcr": "OCR 시작", "extractingFramesX": "이미지 프레임 추출... {0}%", "analyzingFramesXY": "프레임 분석... {0}/{1}", - "runningOcrXY": "OCR 작업 중... {0}/{1}", - "noLinesFoundTitle": "자막을 찾을 수 없습니다", "noLinesFoundMessage": "스캔 영역에 텍스트가 없습니다 - 스캔 영역, 엔진, 또는 밝기 최소값을 조정해 보세요.", "ocrStoppedEarlyMessage": "OCR 엔진이 모든 프레임을 읽기 전에 중지되었습니다. 지금까지 찾은 줄은 유지되지만 나머지 줄은 누락됩니다.{0}{0}{1}", "linesFoundX": "{0}개의 줄을 찾았습니다", "refiningTimingXY": "타이밍 조정 중... {0}/{1}", - "fixOcrErrors": "OCR 오류 수정", "editLineX": "{0}번째 줄 편집", "downloadDictionaryHint": "맞춤법 검사 사전 다운로드...", "framesPerSecondHint": "초당 검사할 프레임 수입니다. 일반 자막은 5로 충분합니다. 값이 높으면 아주 짧은 줄도 포착하고 묶음을 더 정밀하게 하지만 OCR 시간이 더 걸립니다.", @@ -2988,8 +2997,6 @@ "backgroundMusic": { "title": "배경 음악 생성", "generateBackgroundMusicDotDotDot": "배경 음악 생성...", - "preset": "프리셋", - "prompt": "프롬프트", "tempoBpm": "템포 (BPM)", "generateSeconds": "생성 길이 (초)", "seed": "시드", @@ -3026,6 +3033,7 @@ "outputLengthTextToSpeech": "생성된 음성 길이에 맞춰 음악이 끊김 없이 반복되며, 말하는 동안에는 음악 볼륨이 줄어듭니다", "addBackgroundMusic": "배경 음악 추가", "addBackgroundMusicHint": "ACE-Step 1.5로 로컬에서 음악을 생성하여 음성에 배경 음악을 추가합니다. 말하는 동안에는 음악 볼륨이 줄어듭니다", + "music": "음악", "generatingBackgroundMusicDotDotDot": "배경 음악 생성 중...", "mixingBackgroundMusicDotDotDot": "배경 음악 합치는 중..." }, @@ -3116,22 +3124,25 @@ "cutVideoTransitionRadial": "방사형", "cutVideoTransitionPixelize": "픽셀화", "cutVideoTransitionBlur": "흐림", + "cutVideoSegments": "구간", + "cutVideoTransitions": "전환", + "cutVideoCutType": "잘라내기 방식", "importCurrentSubtitle": "현재 자막 가져오기", "addRemoveEmbeddedSubtitlesTitle": "내장 자막 추가/제거", "addRemoveEmbeddedSubtitlesMp4Title": "내장 자막 추가/제거 (MP4)", "addCurrentSubtitle": "현재 자막 추가", - "embeddedTrackNoSubtitlesFoundTitle": "자막을 찾을 수 없음", "embeddedTrackNoSubtitlesFoundMessage": "선택한 자막 파일에는 자막이 없습니다.", "embeddedTrackNoTracksTitle": "추가된 트랙 없음", "embeddedTrackNoTracksMessage": "하나 이상의 자막 트랙을 추가하거나 자막이 내장된 비디오를 로드하세요.", "embeddedTrackUnableToGenerateTitle": "비디오 생성 실패", "embeddedTrackUnableToGenerateMessage": "비디오가 생성되지 않았습니다: {0}{1} 매개변수: {2}", "embeddedTrackPreviewUnavailableTitle": "미리보기 사용 불가", - "embeddedTrackPreviewUnavailableMessage": "선택한 자막 스트림을 추출할 수 없습니다. ffmpeg가 SRT로 변환할 수 있는 텍스트 형식(예: 비트맵 기반 자막)이 아닐 수 있습니다.", + "embeddedTrackPreviewUnavailableMessage": "선택한 자막 스트림을 추출할 수 없습니다. 비트맵 기반 자막처럼 FFmpeg가 SRT로 변환할 수 없는 형식일 수 있습니다.", "embeddedTrackGeneratingVideoXY": "비디오 생성중... {0}% {1}", "embeddedTrackGeneratingVideo": "비디오 생성중...", "mp4FilesFilter": "MP4 파일", "embeddedTracksPickVideoHint": "비디오 파일을 선택하거나 여기에 끌어다 놓으면 자막 트랙을 볼 수 있습니다.", + "embeddedTracks": "트랙", "viewMatroskaTrackX": "Matroska 트랙 보기 - {0}", "resolutionSeparator": "x", "openFromUrlTitle": "URL에서 비디오 파일 열기", @@ -3145,6 +3156,10 @@ "openFromUrlDownloadSubtitles": "자막도 같이 다운로드", "openFromUrlDownloadVideo": "비디오 다운로드", "openFromUrlIncludeAutoGeneratedSubtitles": "자동 생성된 자막 포함 (원본 언어)", + "openFromUrlCookiesFromBrowser": "브라우저 쿠키", + "openFromUrlCookiesFromBrowserHint": "YouTube에 로그인한 브라우저의 쿠키를 전송합니다. YouTube에서 봇이 아닌지 확인을 요구할 때 필요합니다.", + "openFromUrlBotCheckHint": "YouTube에서 봇이 아닌지 확인을 요구합니다. 브라우저에서 YouTube에 로그인한 뒤, \"URL에서 비디오 파일 열기\" 창의 \"브라우저 쿠키\"에서 해당 브라우저를 선택하고 다시 시도하세요 (Firefox 권장). VPN을 끄는 것도 도움이 될 수 있습니다.", + "openFromUrlBotCheckHintWithBrowserX": "YouTube에서 계속 봇이 아닌지 확인을 요구합니다. {0}에서 YouTube에 로그인했는지 확인하세요. Windows의 Chrome과 Edge는 쿠키 읽기를 차단하는 경우가 많습니다. 먼저 브라우저를 닫거나 Firefox를 사용해 보세요.", "assaStyleWillBeUsed": "현재 ASSA 스타일을 사용합니다\n\n여기서 스타일을 설정하려면\n자막 형식을 변경하세요", "pickOnlineSubtitleTitle": "다운로드 할 자막을 선택", "outputSettingsTitle": "출력 설정", @@ -3161,12 +3176,12 @@ "indexTts25SettingsTitle": "IndexTTS 2.5 (audio.cpp) 설정", "indexTts25Emotion": "감정", "indexTts25EmotionStrength": "감정 강도", - "pickOnlineSubtitleFetching": "자막 다운로드 중....", + "pickOnlineSubtitleFetching": "자막 다운로드 중...", "pickOnlineSubtitleNoneFound": "해당 URL에서 자막을 찾을 수 없습니다.", "forcedAligner": "강제 정렬", "postProcessing": "후처리...", "toggleCurrentSubtitleWhilePlaying": "재생 중 현재 자막 표시/숨기기", - "toggleSubtitlesOnVideoPlayer": "비디오 플레이어에서 자막 토글", + "toggleSubtitlesOnVideoPlayer": "비디오 플레이어 자막 표시/숨기기", "subtitlesOnVideoPlayerOn": "비디오 플레이어에서 자막: 켜짐", "subtitlesOnVideoPlayerOff": "비디오 플레이어에서 자막: 꺼짐", "onlyMkvCanSupportEmbeddedSubtitleEditing": "내장 자막 편집에는 Matroska(.mkv, .webm) 파일만 지원됩니다.", @@ -3193,7 +3208,7 @@ "ttsEngineChatterboxCapable": "{0} (Chatterbox 사용 가능)" }, "waveform": { - "guessTimeCodes": "타임코드 추측", + "guessTimeCodes": "타임코드 추정", "guessTimeCodesScanBlockSize": "스캔 블록 크기(ms):", "guessTimeCodesScanBlockAverageMin": "스캔 블록 평균 최소값(최대값 대비 %):", "guessTimeCodesScanBlockAverageMax": "스캔 블록 평균 최대값(최대값 대비 %):", @@ -3203,7 +3218,7 @@ "seekSilence": "무음 탐색", "minSilenceDurationSeconds": "최소 무음 시간(초):", "maxSilenceVolume": "최대 무음 음량(0.0 - 1.0):", - "guessTimeCodesDotDotDot": "시간 코드 추측...", + "guessTimeCodesDotDotDot": "타임코드 추정...", "seekSilenceDotDotDot": "무음 탐색...", "extractAudioDotDotDot": "오디오 추출...", "cloneVoiceTo": "음성 복제 대상", @@ -3211,7 +3226,7 @@ "cloneVoiceExtractFailed": "선택된 줄의 오디오를 추출할 수 없습니다.", "lineXHasNoDuration": "{0}번째 줄은 길이가 없으므로 (종료 시간이 시작 시간보다 늦지 않음), 추출할 오디오가 없습니다.", "audioClipsSkippedLinesX": "다음 줄에서는 오디오를 추출할 수 없어 건너뛰었습니다: {0}", - "toggleShotChange": "장면 전환 토글", + "toggleShotChange": "장면 전환 지점 추가/제거", "resetWaveformZoomAndSpeed": "파형 확대/축소 및 속도 다시 설정", "showOriginalSubtitle": "원본 자막 표시", "timelineGroupTracksBy": "자막 트랙 그룹화 기준", @@ -3243,7 +3258,7 @@ "findText": "텍스트 찾기", "resolutionXDurationYFrameRateZ": "해상도: {0}, 재생 시간: {1}, 프레임 속도: {2}", "startSceneMustComeBeforeEndScene": "시작 장면은 끝 장면보다 먼저 나와야 함", - "goToSubPos": "하위 항목으로 이동", + "goToSubPos": "자막 위치로 이동", "speedInPercentage": "속도(%)", "fromDropFrameValue": "드롭 프레임 값에서", "toDropFrameValue": "드롭 프레임 값으로", @@ -3253,9 +3268,9 @@ "toFrameRate": "대상 프레임 속도", "fromFrameRate": "기존 프레임 속도", "videoXFrameRateY": "{0} - {1} fps", - "adjustAllTimes": "싱크 조정(빠르게/느리게)", - "showEarlier": "빠르게", - "showLater": "느리게", + "adjustAllTimes": "싱크 조정 (앞당기기/늦추기)", + "showEarlier": "앞당기기", + "showLater": "늦추기", "setSyncPoint": "동기화 지점 설정", "setSyncPointViaVideo": "비디오를 통해 동기화 지점 설정...", "syncPointTimeCode": "동기화 지점 타임코드", @@ -3267,8 +3282,8 @@ "adjustAllShortcuts": "키보드 단축키 :\n\n• Shift + ←/→: 0.01초 이동\n• Ctrl + ←/→: 0.1초 이동\n• Alt + ←/→: 0.5초 이동", "adjustAllShortcutsFrames": "키보드 단축키:\n\n• Shift + ←/→: 1 프레임 이동\n• Ctrl + ←/→: 10 프레임 이동\n• Alt + ←/→: 1초 이동", "offsetInSeconds": "초 단위 오프셋", - "speedFactor": "속도 요소", - "showEarlierLaterDotDotDot": "이전/다음 보기..." + "speedFactor": "속도 배율", + "showEarlierLaterDotDotDot": "표시 시간 앞당기기/늦추기..." }, "translate": { "translateViaCopyPaste": "복사/붙여넣기로 자동 번역", @@ -3278,7 +3293,6 @@ "blockCopyGetFromClipboard": "클립보드에서 텍스트 가져오기 (번역기/AI에서 가져온 텍스트)", "reCopyTextToClipboard": "텍스트를 클립보드에 다시 복사하기 (번역기/AI용)", "blockXOfY": "{1} 중 {0}번째 블록", - "noTextInClipboard": "클립보드에 텍스트가 없음", "textInClipboardIsSameAsSourceText": "클립보드에 있는 텍스트가 원본 텍스트와 동일합니다. 다시 시도해 주세요.", "lineMerge": "자막 합치기", "delayInSecondsBetweenRequests": "요청 간 지연 시간(초)", @@ -3312,7 +3326,6 @@ "keepLineBreaks": "줄 바꿈 유지", "samplingParameters": "샘플링 매개변수", "minusOneMeansDefault": "-1 = 모델/서버 기본값", - "temperature": "온도 (Temperature)", "topP": "Top-p", "topK": "Top-k", "repeatPenalty": "반복 출력 패널티", @@ -3323,10 +3336,9 @@ "useOnlyExtraServerParameters": "이 매개변수만 사용", "useOnlyExtraServerParametersHint": "Subtitle Edit의 자체 튜닝값 대신 위의 매개변수로 llama-server를 시작합니다. 모델, 호스트 및 포트는 Subtitle Edit에서 설정합니다", "serverRunningAtX": "서버가 {0}에서 실행 중", - "customPromptHint": "사용자 정의 인스트럭션 ({0} = 원본 언어, {1} = 대상 언어); 비워 두면 기본 프롬프트 사용", + "customPromptHint": "사용자 정의 지침 ({0} = 원본 언어, {1} = 대상 언어); 비워 두면 기본 프롬프트 사용", "editTranslationHint": "선택한 행의 번역을 클릭하여 편집하세요 (Enter로 저장, Esc로 취소)", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp를 사용하려면 llama-server 엔진과 번역 모델을 다운로드해야 합니다. 지금 다운로드하시겠습니까?", - "llamaCppDownloadEnginePrompt": "llama.cpp를 사용하려면 llama-server 엔진을 다운로드해야 합니다. 지금 다운로드하시겠습니까?", "llamaCppDownloadModelPrompt": "llama.cpp를 사용하려면 선택한 번역 모델을 다운로드해야 합니다. 지금 다운로드하시겠습니까?" }, "options": { @@ -3354,15 +3366,15 @@ "cpsLineLengthStyleCalcCjk": "CJK 1, Latin 0.5", "cpsLineLengthStyleCalcCjkNoSpace": "CJK 1, Latin 0.5, 띄어쓰기 0", "cpsLineLengthStyleCalcIncludeCompositionCharacters": "구성 문자 포함", - "cpsLineLengthStyleCalcIncludeCompositionCharactersNotSpace": "띄어쓰기 없이 구성 문자 포함", - "cpsLineLengthStyleCalcNoSpaceOrPunctuation": "띄어쓰기나 구두점 없음 ()[]-:;,.!?", - "cpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly": "띄어쓰기나 구두점 없이 CPS만", + "cpsLineLengthStyleCalcIncludeCompositionCharactersNotSpace": "공백을 제외하고 구성 문자 포함", + "cpsLineLengthStyleCalcNoSpaceOrPunctuation": "공백·구두점 제외 ()[]-:;,.!?", + "cpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly": "공백·구두점 제외 (CPS만)", "cpsLineLengthStyleCalcIgnoreArabicDiacritics": "아랍어 발음 기호 무시", - "cpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "띄어쓰기 없이 아랍어 발음 기호 무시", + "cpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "아랍어 발음 기호와 공백 제외", "searchSettingsDotDotDot": "설정 검색...", "network": "네트워크", "fileTypeAssociations": "파일 확장자 연결", - "textBoxColorTags": "자막 입력칸에 색상 태그(HTML/ASSA) 적용", + "textBoxColorTags": "자막 입력칸의 태그(HTML/ASSA)에 색상 표시", "textBoxLiveSpellCheck": "자막 입력칸에서 실시간 맞춤법 검사", "textBoxCenterText": "자막 입력칸 가운데 정렬", "textBoxFontBold": "자막 입력칸 글자 굵게", @@ -3378,17 +3390,16 @@ "subtitleGridLiveSpellCheck": "자막 목록에서 실시간 맞춤법 검사", "subtitleGridCenterText": "자막 목록 텍스트 가운데 정렬", "subtitleGridShowFormatting": "서식이 지정된 (HTML/ASSA) 텍스트를 자막 목록에 표시", - "showUpDownStartTime": "\"표시\"에 대한 위/아래 조절 기능 표시", - "showUpDownEndTime": "\"숨김\"에 대한 위/아래 조절 기능 표시", + "showUpDownStartTime": "\"시작\" 시간의 위/아래 조절 기능 표시", + "showUpDownEndTime": "\"끝\" 시간의 위/아래 조절 기능 표시", "showUpDownDuration": "\"길이\"에 대한 위/아래 조절 기능 표시", - "showUpDownLabels": "위/아래 조절 버튼에 레이블 표시(표시/숨김/길이)", + "showUpDownLabels": "위/아래 조절 버튼에 레이블 표시 (시작/끝/길이)", "showButtonHints": "버튼 힌트 표시", "gridCompactMode": "목록을 사용할 때, 간소화 모드 사용", "gridAlternatingRows": "목록에서 교차 행 색상 사용", "gridAlternatingRowColor": "교차 행 색상 (라이트)", "gridAlternatingRowColorDark": "교차 행 색상 (다크)", "uiFont": "UI 글꼴", - "theme": "테마", "iconTheme": "아이콘 테마", "darkThemeForegroundColor": "다크 테마 전경색", "darkThemeBackgroundColor": "다크 테마 배경색", @@ -3398,7 +3409,6 @@ "spellCheckHighlightColor": "맞춤법 검사 강조 색상", "singleLineMaxLength": "자막 줄당 최대 길이", "optimalCharsPerSec": "초당 최적 문자 수", - "maxCharsPerSec": "초당 최대 문자 수", "maxWordsPerMin": "분당 최대 단어 수", "minDurationMs": "최소 길이(ms)", "maxDurationMs": "최대 길이(ms)", @@ -3409,7 +3419,6 @@ "minGapCalculateFrames": "프레임 단위 최소 간격", "minGapCalculateXFramesAtYGivesZMs": "프레임 속도 {1}에서 {0}프레임은 {2}밀리초입니다.", "minGapCalculateUseXAsNewGap": "\"{0}\" 밀리초를 새 최소 간격으로 사용하시겠습니까?", - "maxLines": "최대 줄 수", "unbreakSubtitlesShortThan": "줄바꿈을 취소할 최대 글자 수", "autoBreakLineEndingEarly": "문장 끝에서 우선 줄바꿈 (.!?)", "autoBreakCommaBreakEarly": "쉼표에서 우선 줄바꿈", @@ -3433,22 +3442,22 @@ "autoBackupIntervalMinutes": "자동 백업 간격(분)", "autoBackupDeleteAfterDays": "자동 백업 보존 기간(일)", "settingsBackupOn": "설정 자동 백업", - "settingsBackupIntervalDays": "설정 백업 간격 (일)", + "settingsBackupIntervalDays": "설정 백업 간격 (일, 0=시작할 때마다)", "settingsBackupMaxCount": "보관할 설정 백업 수", "autoConvertToUtf8": "파일을 열 때, 인코딩을 UTF-8로 자동 변환", - "autoTrimWhiteSpace": "띄어쓰기 자동 수정", + "autoTrimWhiteSpace": "불필요한 공백 자동 정리", "removeBlankLinesWhenOpening": "자막을 열 때 빈 줄 제거", "defaultEncoding": "기본 인코딩", - "colorDurationTooShort": "너무 짧은 길이 표시", - "colorDurationTooLong": "너무 긴 길이 표시", - "colorTextTooLong": "너무 긴 텍스트 표시", - "colorTextTooWide": "너무 넓은 텍스트(픽셀) 표시", - "colorTextTooManyLines": "두 줄 이상인 텍스트 표시", + "colorDurationTooShort": "너무 짧은 길이에 색상 표시", + "colorDurationTooLong": "너무 긴 길이에 색상 표시", + "colorTextTooLong": "너무 긴 텍스트에 색상 표시", + "colorTextTooWide": "너무 넓은 텍스트에 색상 표시 (픽셀)", + "colorTextTooManyLines": "두 줄을 초과하는 텍스트에 색상 표시", "colorTextTooManyLinesX": "{0}줄을 넘으면 강조 표시", - "colorCharactersPerSecond": "초당 너무 많은 문자(CPS) 표시", - "colorWordsPerMinute": "분당 너무 많은 단어(WPM) 표시", - "colorOverlap": "겹치는 타임코드 표시", - "colorGapTooShort": "너무 짧은 간격 표시", + "colorCharactersPerSecond": "초당 문자 수(CPS)가 너무 많으면 색상 표시", + "colorWordsPerMinute": "분당 단어 수(WPM)가 너무 많으면 색상 표시", + "colorOverlap": "겹치는 타임코드에 색상 표시", + "colorGapTooShort": "너무 짧은 간격에 색상 표시", "errorBackgroundColor": "오류 표시 배경색", "waveformDrawGridLines": "격자선 그리기", "waveformUseSkiaRenderer": "실험적 고속 렌더러 사용", @@ -3499,7 +3508,7 @@ "defaultSaveAsFormat": "기본 \"다른 이름으로 저장\" 형식", "favoriteSubtitleFormats": "선호하는 자막 형식", "favoriteLanguages": "선호하는 언어", - "webVttUseXTimestampMap": "WebVTT: X-TIMESTAMP-MAP 사용 (로드 시 오프셋 시간 코드)", + "webVttUseXTimestampMap": "WebVTT: X-TIMESTAMP-MAP 사용 (불러올 때 타임코드 오프셋 적용)", "assaAutoSetResolution": "ASSA: 비디오를 열 때 비디오에서 해상도(PlayResX/PlayResY) 설정", "assaAutoSetResolutionPrompt": "ASSA: 비디오에 맞게 해상도를 변경하기 전에 확인 (해제시 자동으로 리샘플링)", "videoControls": "비디오 컨트롤", @@ -3523,8 +3532,8 @@ "mergeAutoBreak": "줄 합치기: 합친 텍스트 자동 줄 바꿈 (끄면 기존 줄 바꿈 유지)", "filesAndLogs": "파일 및 로그", "showErrorLogFile": "오류 로그 파일 표시", - "showToolsLogFile": "Whisper 로그 파일 표시", - "writeToolsLog": "툴 로그 작성", + "showToolsLogFile": "도구 로그 파일 표시", + "writeToolsLog": "도구 로그 기록", "showSettingsFile": "설정 파일 표시", "showAssaLayer": "ASSA 레이어 상자 표시", "waveformCursorColor": "파형 커서/헤드 색상", @@ -3532,7 +3541,7 @@ "waveformGridColor": "파형 격자 색상", "waveformParagraphLeftColor": "파형 왼쪽 테두리 색상", "waveformParagraphRightColor": "파형 오른쪽 테두리 색상", - "waveformFancyHighColor": "파형의 화려한 고채도", + "waveformFancyHighColor": "화려한 파형의 큰 진폭 색상", "waveformFocusOnMouseOver": "마우스를 올리면 초점 이동", "resetAllSettings": "모든 설정을 초기화", "resetShortcuts": "단축키 다시 설정", @@ -3551,9 +3560,9 @@ "addSpace": "띄어쓰기 추가", "processIfEndsWithComma": "문장이 쉼표로 끝나는 경우 처리", "removeComma": "쉼표 제거", - "editContinuationStyleCustom": "사용자 정의 연속 스타일 편집", + "editContinuationStyleCustom": "사용자 정의 이어짐 표기 방식 편집", "longGapThreshold": "긴 간격 임계값(ms)", - "afterLongGap": "긴 간격 끝에:", + "afterLongGap": "긴 간격 뒤에:", "resetSyntaxColoring": "구문 강조 표시 다시 설정", "resetWaveform": "파형 다시 설정", "resetRules": "규칙 다시 설정", @@ -3561,12 +3570,15 @@ "timeCodeModeTime": "시간 (hh:mm:ss,zzz)", "timeCodeModeFrames": "프레임 (hh:mm:ss:ff)", "timeCodeModeFrameNumbers": "프레임 번호", + "frameModeSnapToVideoFrames": "시간을 영상 프레임 기준으로 저장 (초별 프레임 기준 대신)", "textBoxLimitNewLines": "자막 입력칸 줄 수 제한", + "textBoxAutoWrapWhileTyping": "입력 중 자동 줄 바꿈", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - 소프트웨어 렌더링(느림)", - "mpvWidRendering": "libmpv - 기본 창 ID 렌더링", - "waveFormsAndSpectrogramFoldersContainsX": "\"파형\" 및 \"스펙트로그램\" 폴더에는 {0}이(가) 포함되어 있음", - "deleteWaveformAndSpectrogramFoldersQuestion": "\"파형\" 및 \"스펙트로그램\" 파일을 삭제하시겠습니까?", + "mpvMetalRendering": "libmpv - Metal (실험적, 재시작 필요)", + "mpvWidRendering": "libmpv - 네이티브 창 ID 렌더링", + "waveFormsAndSpectrogramFoldersContainsX": "\"Waveforms\" 및 \"Spectrograms\" 폴더에 {0}의 캐시 파일이 있음", + "deleteWaveformAndSpectrogramFoldersQuestion": "\"Waveforms\" 및 \"Spectrograms\" 폴더의 캐시 파일을 삭제하시겠습니까?", "waveformGenerateSpectrogram": "스펙트로그램 생성", "waveformAutoGenerate": "비디오를 열 때 파형 자동 생성", "waveformSpectrogramMode": "스펙트로그램 모드", @@ -3575,10 +3587,10 @@ "waveformExtractAudioFormat": "오디오 추출 형식", "waveformExtractAudioSampleRate": "오디오 추출 샘플레이트", "waveformExtractAudioSampleRateOriginal": "원본 (소스 유지)", - "waveformExtractAudioBitRate": "오디오 추출 비트레이트 (MP3/M4A)", + "waveformExtractAudioBitRate": "오디오 추출 비트 전송률 (MP3/M4A)", "ffmpegUseCenterChannelOnly": "5.1 오디오에서 전면 중앙 채널만 사용 (FFmpeg)", - "vlcWidRendering": "libVLC - 기본 창 ID 렌더링", - "ffmpegSoftwareRendering": "FFmpeg - 소프트웨어 렌더링", + "vlcWidRendering": "libVLC - 네이티브 창 ID 렌더링", + "ffmpegSoftwareRendering": "FFmpeg", "downloadFfmpegLibs": "FFmpeg 라이브러리 다운로드 (FFmpeg 비디오 플레이어용)", "subtitleGridEnterKeyAction": "자막 목록 엔터 키 동작", "subtitleSingleClickAction": "자막 목록 원클릭 동작", @@ -3594,7 +3606,7 @@ "saveAsAppendLanguageCode": "\"다른 이름으로 저장\" 시, 언어 코드 추가", "gridGoToSubtitleAndSetVideoPosition": "자막으로 이동하고 재생 위치 설정", "gridGoToNextLine": "다음 줄로 이동", - "gridGoToSubtitleOnlyWaveformOnly": "자막만 보기(파형만)", + "gridGoToSubtitleOnlyWaveformOnly": "자막 위치로 이동 (파형만)", "gridGoToSubtitleAndPause": "자막으로 이동하고 일시 중지", "gridGoToSubtitleAndPlay": "자막으로 이동하여 재생", "gridGoToSubtitleAndPauseAndFocusTextBox": "자막으로 이동하여 일시 중지하고 입력칸 포커스", @@ -3618,9 +3630,9 @@ "saveAsBehaviorUseSubtitleFileName": "자막 파일 이름 사용", "saveAsAppendLanguageCodeTwoLetter": "두 글자", "saveAsAppendLanguageCodeLanguageName": "언어 이름", - "splitOddLineActionWeightTop": "윗줄을 더 길게", - "splitOddLineActionWeightBottom": "아랫줄을 더 길게", - "splitOddLinesAction": "홀수 줄 분할 방식", + "splitOddLineActionWeightTop": "앞부분에 더 많은 줄", + "splitOddLineActionWeightBottom": "뒷부분에 더 많은 줄", + "splitOddLinesAction": "줄 수가 홀수일 때 분할 방식", "ocrUseWordSplitList": "OCR: 단어 분할 목록 사용", "ocrGuessUnknownWords": "OCR: 알 수 없는 단어 유추하기", "spellCheckRememberUseAlwaysList": "맞춤법 검사: \"항상 사용\" 목록 기억", @@ -3646,13 +3658,13 @@ "textBoxButtonShowRemoveFormatting": "입력칸: 서식 제거 버튼 표시", "textBoxButtonShowAiAssistant": "입력칸: AI 도우미 버튼 표시", "waveformSingleClickAction": "파형 원클릭 동작", - "waveformDoubleClickAction": "파형 더블클릭 동작(싱글클릭 동작 후)", + "waveformDoubleClickAction": "파형 더블클릭 동작 (원클릭 동작 후)", "allSettings": "모든 설정", "uiScale": "UI 배율(%)", "fontScale": "글꼴 배율 (%)", "textSelectionOpacity": "텍스트 선택 영역 불투명도 (%)", "waveformToolbarItems": "파형 도구 모음 항목", - "matchIconColorToDarkTheme": "다크 테마에 맞게 아이콘 색상 변경", + "matchIconColorToDarkTheme": "아이콘 색상을 다크 테마 전경색에 맞추기", "subtitlePreviewProperties": "자막 미리보기 속성", "usePositionFromSubtitleFile": "자막 파일(TTML/PAC/EBU STL)에서 위치 사용", "marginIsPartOfSubtitleArea": "여백을 자막 영역에 포함", @@ -3709,12 +3721,11 @@ "customShortcutPickCommand": "실행할 명령을 선택하세요.", "customShortcutEnterText": "삽입할 텍스트를 입력하세요.", "customShortcutEnterFind": "찾을 텍스트를 입력하세요.", - "customShortcutInvalidRegexX": "잘못된 정규식: {0}", "customShortcutStepsHint": "단계는 위에서 아래로 실행됩니다. 텍스트 작업은 선택한 줄에 적용됩니다. 창을 여는 명령은 해당 창을 닫은 후 다음 단계로 진행합니다.", "activeIn": "적용 위치", "activeInEverywhere": "어디에서나", "generalMergeSelectedLinesAndUnbreak": "선택한 줄을 합치고 줄바꿈 해제", - "generalMergeSelectedLinesAndUnbreakCjk": "선택한 줄을 합치고 줄바꿈 해제 (CJK)", + "generalMergeSelectedLinesAndUnbreakCjk": "선택한 줄을 합치고 공백 없이 줄 바꿈 제거 (CJK)", "generalUnbreakNoSpaceCjk": "공백 없이 줄바꿈 해제 (CJK)", "generalToggleBreak": "줄 바꿈 추가/제거", "generalMergeSelectedLinesBilingual": "선택한 줄을 이중 언어로 합치기", @@ -3745,13 +3756,13 @@ "fileExportEbuStl": "EBU STL 내보내기", "fileExportPac": "PAC 내보내기", "fileExit": "종료", - "openSeDataFolder": "Subtitle Edit 폴더 열기", + "openSeDataFolder": "Subtitle Edit 데이터 폴더 열기", "editFindPrevious": "이전 찾기", "fillSelectedLinesWithClipboard": "선택한 줄 클립보드 텍스트로 채우기", "listInverseSelection": "선택 반전", "listDeleteSelection": "선택 항목 삭제", "deleteSelectionEverywhere": "선택 영역 삭제 (모든 곳)", - "rippleDeleteSelection": "리플 선택 항목 삭제", + "rippleDeleteSelection": "선택 항목 리플 삭제", "assigned": "할당됨", "unassigned": "미지정", "pressedKeyX": "누른 키: {0}", @@ -3775,19 +3786,19 @@ "screenPrivacyFileNamesHidden": "화면 정보 숨기기: 파일 이름 숨김", "screenPrivacyFileNamesAndTextsHidden": "화면 정보 숨기기: 파일 이름과 텍스트 숨김", "screenPrivacyOff": "화면 정보 숨기기: 꺼짐", - "duplicateSelectedLines": "선택한 줄 복사", + "duplicateSelectedLines": "선택한 줄 복제", "sourceView": "소스 보기", "addOrEditBookmark": "즐겨찾기 추가/수정", - "toggleBookmark": "북마크 표시/숨기기(선택된 줄, 텍스트 없음)", + "toggleBookmark": "즐겨찾기 추가/해제 (선택한 줄, 메모 없음)", "toggleForcedSelectedLines": "강제 여부 전환 (선택한 줄)", "goToNextBookmark": "다음 즐겨찾기로 이동", - "clearBookmarks": "책갈피 지우기", + "clearBookmarks": "즐겨찾기 지우기", "goToNextEmptyLine": "다음 빈 줄로 이동", "toggleWaveformToolbar": "파형 도구 모음 표시/숨기기", - "toggleSubtitleGridFormatting": "자막 목록 서식 전환 (서식 표시/태그 표시/서식 없음)", - "waveformSetStartAndSetEndOfPreviousMinusGap": "이전 마이너스 간격의 시작과 끝을 설정", - "waveformSetEndAndStartOfNextAfterGap": "다음 플러스 간격의 끝과 시작을 설정", - "waveformSetEndAndStartOfNextAfterGapAndGoToNext": "다음 플러스 간격의 시작과 끝을 설정하고 다음으로 이동", + "toggleSubtitleGridFormatting": "자막 목록 서식 모드 전환", + "waveformSetStartAndSetEndOfPreviousMinusGap": "시작 설정 및 이전 줄 끝을 간격만큼 앞에 설정", + "waveformSetEndAndStartOfNextAfterGap": "끝 설정 및 다음 줄 시작을 간격만큼 뒤에 설정", + "waveformSetEndAndStartOfNextAfterGapAndGoToNext": "끝 설정 및 다음 줄 시작을 간격만큼 뒤에 설정한 후 다음 줄로 이동", "moveLastWordToNextSubtitle": "마지막 단어를 다음 자막으로 이동", "moveLastWordFromFirstLineDownCurrentSubtitle": "첫 번째 줄의 마지막 단어를 아래로 이동(현재 자막)", "moveFirstWordFromNextLineUpCurrentSubtitle": "다음 줄의 첫 단어(현재 자막)를 위로 이동", @@ -3797,7 +3808,7 @@ "breakAtFirstSpaceFromCursor": "커서 위치부터 첫 번째 공백에서 나누기", "breakAtFirstSpaceFromCursorAndGoToNext": "커서 위치부터 첫 번째 공백에서 나누고 다음으로 이동", "toggleFocusGridAndWaveform": "자막 목록과 파형/스펙트로그램 간에 포커스 전환", - "toggleFocusTextBoxAndWaveform": "입력칸과 파형/스펙트럼 간에 포커스 전환", + "toggleFocusTextBoxAndWaveform": "입력칸과 파형/스펙트로그램 사이에서 포커스 전환", "toggleFocusTextBoxAndGrid": "입력칸과 자막 목록 사이에서 포커스 전환", "goToPreviousLineAndSetVideoPosition": "이전 자막으로 이동하여 비디오 위치를 설정", "goToPreviousLineFromVideoPosition": "현재 비디오 위치에서 이전 자막으로 이동", @@ -3846,8 +3857,8 @@ "splitBreakLongLines": "긴 줄 나누기/다시 조정", "mergeShortLines": "짧은 줄 합치기", "mergeContinuationLines": "이어지는 줄 병합", - "snapAllTimesToFrames": "모든 타임을 프레임에 고정", - "joinSubtitles": "자막 추가", + "snapAllTimesToFrames": "모든 시간을 프레임에 맞추기", + "joinSubtitles": "자막 합치기", "splitSubtitle": "자막 분할", "spellCheck": "맞춤법 검사", "spellCheckGetDictionary": "맞춤법 검사 사전 가져오기", @@ -3886,8 +3897,8 @@ "switchOriginalAndTranslationSelectedLines": "원본과 번역본 전환(선택된 줄)", "mergeOriginalIntoTranslationSelectedLines": "원본과 번역본 합치기(선택된 줄)", "seekSilence": "무음 탐색", - "seekSilenceBack": "무음 앞 탐색", - "seekSilenceForward": "무음 뒤 탐색", + "seekSilenceBack": "이전 무음 탐색", + "seekSilenceForward": "다음 무음 탐색", "waveformGuessStart": "파형에서 시작 시간 추정", "waveformGuessEnd": "파형으로 종료 시간 추정", "waveformGuessStartAndEnd": "파형에서 시작 및 종료 시간 추정", @@ -3923,13 +3934,13 @@ "xShortcutsExportedToY": "{0} 단축키가 {1}(으)로 내보내짐", "importFromSe4": "SE 4에서 불러오기...", "importFromSe4Title": "Subtitle Edit 4 버전에서 단축키 불러오기", - "importFromSe4XImportedYSkipped": "{1}에서 가져온 바로가기 {0}개 ({2} 패스함 - SE 5 미대응)", + "importFromSe4XImportedYSkipped": "{1}에서 단축키 {0}개 가져옴 ({2}개 건너뜀 - 일치하는 SE 5 동작 없음)", "importImageSubtitleForEdit": "편집용 이미지 기반 자막 가져오기", "showPointSyncViaOther": "다른 자막을 통해 지점 동기화 표시", "showPointSync": "지점 동기화 표시", "showMediaInformation": "미디어 정보 표시", "chooseSubtitleFormat": "자막 형식 선택", - "trimWhitespaceSelectedLines": "띄어쓰기 제거 (선택한 줄)", + "trimWhitespaceSelectedLines": "불필요한 공백 정리 (선택한 줄)", "waveformInsertNewSelection": "파형 선택 영역에 새 자막 삽입", "waveformNewSelectionPasteFromClipboard": "파형 클립보드 텍스트를 새 선택 영역에 붙여넣기", "waveformHorizontalZoomInCommand": "가로 파형 확대", @@ -3945,8 +3956,8 @@ "textBoxGoToStart": "입력칸의 시작으로 이동", "textBoxGoToEnd": "입력칸의 끝으로 이동", "sortByNumber": "번호순으로 정렬", - "sortByStartTime": "\"표시\" 시간순으로 정렬", - "sortByEndTime": "\"숨기기\" 시간순으로 정렬", + "sortByStartTime": "\"시작\" 시간순으로 정렬", + "sortByEndTime": "\"끝\" 시간순으로 정렬", "sortByDuration": "길이 순 정렬", "sortByGap": "간격 순 정렬", "sortByText": "텍스트 순 정렬", @@ -3954,7 +3965,7 @@ "sortBySingleLineMaxLength": "텍스트 - 한 줄 최대 길이 순 정렬", "sortByCps": "초당 문자 수 순 정렬", "sortByWpm": "분당 단어 수 순 정렬", - "sortByNumberOfLines": "줄 갯수 순 정렬", + "sortByNumberOfLines": "줄 개수 순 정렬", "sortByActor": "등장인물 순 정렬", "sortByStyle": "스타일 순 정렬", "videoToggleBrightness": "비디오: 밝기 조절 (mpv 전용)", @@ -3962,6 +3973,8 @@ "duplicatesFound": "다음과 같은 중복 단축키 설정 발견:", "copyTextToClipboard": "텍스트를 클립보드에 복사 (선택한 줄)", "copyTextFromOriginalToClipboard": "원본 텍스트 복사 (선택한 줄)", + "copyPlainTextToClipboard": "일반 텍스트를 클립보드에 복사 (선택한 줄)", + "copyPlainTextFromOriginalToClipboard": "원본의 일반 텍스트를 클립보드에 복사 (선택한 줄)", "assaDraw": "ASSA 그리기", "assaGenerateProgressBar": "ASSA 진행률 표시줄 생성", "assaGenerateBackgroundBox": "ASSA 배경 상자 생성", @@ -3975,7 +3988,7 @@ "copyMsRelativeToCurrentSubtitleLineToClipboard": "현재 자막 줄을 기준으로 한 밀리초 수를 클립보드에 복사", "layoutZoomIn": "레이아웃 확대 (UI 크기 조정)", "layoutZoomOut": "레이아웃 축소 (UI 크기 조정)", - "goToPreviousBookmark": "이전 북마크로 가기", + "goToPreviousBookmark": "이전 즐겨찾기로 이동", "selectionToLower": "입력칸: 선택 항목을 소문자로", "selectionToUpper": "입력칸: 선택 항목을 대문자로", "selectionToSentenceCase": "입력칸: 선택 영역을 문장형으로 변환", @@ -3991,10 +4004,10 @@ "moveStartOneFrameForward": "시작을 한 프레임 앞으로 이동", "moveEndOneFrameBack": "끝을 한 프레임 뒤로 이동", "moveEndOneFrameForward": "끝을 한 프레임 앞으로 이동", - "moveStartOneFrameBackKeepGapPrev": "시작을 한 프레임 뒤로 이동 (이전 줄과의 간격 유지)", - "moveStartOneFrameForwardKeepGapPrev": "시작을 한 프레임 앞으로 이동 (이전 줄과의 간격 유지)", - "moveEndOneFrameBackKeepGapNext": "끝을 한 프레임 뒤로 이동 (다음 줄과의 간격 유지)", - "moveEndOneFrameForwardKeepGapNext": "끝을 한 프레임 앞으로 이동 (다음 줄과의 간격 유지)", + "moveStartOneFrameBackKeepGapPrev": "시작을 1프레임 이전으로 이동 (이전 줄이 가까우면 간격 유지)", + "moveStartOneFrameForwardKeepGapPrev": "시작을 1프레임 이후로 이동 (이전 줄이 가까우면 간격 유지)", + "moveEndOneFrameBackKeepGapNext": "끝을 1프레임 이전으로 이동 (다음 줄이 가까우면 간격 유지)", + "moveEndOneFrameForwardKeepGapNext": "끝을 1프레임 이후로 이동 (다음 줄이 가까우면 간격 유지)", "moveStartXMsBack": "시작 시간을 X ms 뒤로 이동 (X는 설정에서 지정, 화면 동기화에도 적용)", "moveStartXMsForward": "시작 시간을 X ms 앞으로 이동 (X는 설정에서 지정, 화면 동기화에도 적용)", "moveEndXMsBack": "종료 시간을 X ms 뒤로 이동 (X는 설정에서 지정, 화면 동기화에도 적용)", @@ -4019,7 +4032,7 @@ "userWords": "사용자 단어 목록", "ocrFixList": "OCR 수정 목록", "unableToAddItem": "항목을 추가할 수 없습니다. 이미 존재하는 항목일 가능성이 높습니다!", - "unableToRemoveItem": "아이템을 제거할 수 없습니다!" + "unableToRemoveItem": "항목을 제거할 수 없습니다!" }, "chooseLanguage": { "title": "UI 언어 선택" @@ -4059,7 +4072,13 @@ "doNotAskAgain": "다시 묻지 않음 (플러그인 관리에서 변경)", "applyPluginsTo": "플러그인을 적용할 대상", "askEachTime": "매번 묻기", - "allLines": "모든 줄" + "allLines": "모든 줄", + "runPlugin": "플러그인 실행", + "plugin": "플러그인", + "configurePlugin": "설정...", + "noBatchPluginsInstalled": "설치된 플러그인 중 일괄 변환을 지원하는 플러그인이 없습니다.", + "batchPluginInfo": "저장된 설정으로 각 파일에 플러그인을 실행하며, 플러그인 창은 표시하지 않습니다.", + "pluginXNotAvailable": "플러그인 '{0}'이(가) 설치되어 있지 않거나, 비활성화되어 있거나, 일괄 변환을 지원하지 않습니다." }, "help": { "aboutSubtitleEdit": "Subtitle Edit 소개", @@ -4068,7 +4087,10 @@ "checkForUpdatesUpToDate": "현재 최신 버전을 사용 중입니다.", "checkForUpdatesNewVersionAvailable": "새 버전 출시: {0}", "checkForUpdatesUnableToCheck": "업데이트를 확인할 수 없습니다.", - "checkForUpdatesDownloadNewVersion": "새 버전 다운로드" + "checkForUpdatesDownloadNewVersion": "새 버전 다운로드", + "checkForUpdatesInstallAndRestart": "설치 및 다시 시작", + "checkForUpdatesInstallFailed": "자동 업데이트에 실패했습니다. \"새 버전 다운로드\"를 이용하세요.", + "checkForUpdatesInstallsWhenClosed": "Subtitle Edit를 종료하면 업데이트가 설치됩니다." }, "ocr": { "linesToDraw": "그릴 선", @@ -4079,7 +4101,7 @@ "inspectLine": "자막 점검...", "ocrEngine": "OCR 엔진", "tesseractEngineMode": "엔진 모드", - "tesseractEngineModeLegacy": "기존 Tesseract만 (이탤릭체 감지 가능)", + "tesseractEngineModeLegacy": "기존 Tesseract만 (기울임 감지 가능)", "tesseractEngineModeNeural": "신경망 LSTM만", "tesseractEngineModeBoth": "Tesseract + LSTM", "tesseractEngineModeDefault": "기본, 사용 가능한 모드 기준", @@ -4089,13 +4111,12 @@ "numberOfPixelsIsSpace": "픽셀 수를 공백으로 처리", "inspectImageMatches": "이미지 일치 항목 확인", "resolutionXYAndTopmarginZ": "해상도 {0}x{1}, 상단 여백 {2}", - "runningOcrDotDotDotXY": "OCR 처리 중... {0}/{1}", "runningOcrDotDotDot": "OCR 처리 중...", "autoSubmitFirstCharacter": "첫 글자 자동 입력", "editNOcrDatabase": "nOCR 데이터베이스 편집", "zoomFactorX": "확대/축소 비율: {0}배", - "expandInfoX": "전체 항목 수: {0}", - "editNOcrDatabaseXWithYItems": "nOCR 데이터베이스 {0}을 {1:#,###,##0}개 항목으로 편집", + "expandInfoX": "확장 횟수: {0}", + "editNOcrDatabaseXWithYItems": "nOCR 데이터베이스 {0} 편집 (항목 {1:#,###,##0}개)", "newNOcrDatabase": "새 nOCR 데이터베이스", "newBinaryImageCompareDatabase": "새 바이너리 이미지 비교 데이터베이스", "renameNOcrDatabase": "nOCR 데이터베이스 이름 변경", @@ -4105,13 +4126,11 @@ "addNewCharcter": "새 문자 추가", "addNOcrCharacterTitle": "\"{3}\" 데이터베이스로 {0}번째 줄의 {2}개 문자 중 {1}번째 nOCR 문자 추가", "addBinaryOcrCharacterTitle": "\"{3}\" 데이터베이스로 {0}번째 줄의 {2}개 문자 중 {1}번째 이진 OCR 문자 추가", - "lineIndexX": "{0}번 줄", "inspectNOcrAdditions": "새 nOCR 항목 확인하기", - "ocrSelectedLines": "OCR 선택된 자막 줄", + "ocrSelectedLines": "선택한 자막 줄 OCR", "fillSelectedLinesWithClipboard": "선택한 줄을 클립보드 텍스트로 채우기", "showImage": "이미지 표시", - "fixOcrErrors": "OCR 오류 수정", - "promptForUknownWords": "모르는 단어에 대한 안내", + "promptForUknownWords": "알 수 없는 단어 확인", "tryToGuessUnknownWords": "모르는 단어 맞춰 보기", "autoBreakIfMoreThanXLines": "{0}줄보다 많으면 자동 줄 바꿈", "unknownWords": "모르는 단어", @@ -4121,15 +4140,14 @@ "ocrX": "OCR - {0}", "addBetterMatch": "더 적합한 항목 추가", "nOcrInspectImageMatches": "nOCR - 이미지 일치 여부 확인", - "addToOcrPair": "OCR 대체 짝에 추가", - "addNameToOcrReplaceList": "OCR 대체 목록에 이름 추가", + "addToOcrPair": "OCR 바꾸기 쌍에 추가", + "addNameToOcrReplaceList": "OCR 바꾸기 목록에 이름 추가", "wordToAdd": "추가할 단어", "nameToAdd": "추가할 이름", - "changeWordFromTo": "단어 변경 from/to", - "clearBackground": "투명한 배경", + "changeWordFromTo": "바꿀 단어 / 바꾼 후 단어", + "clearBackground": "배경 선 지우기", "clearForeground": "전경 지우기", - "nOcrDrawHelp": "그리기 팁\n────────────────────\n• 줄을 계속하려면 Ctrl을 누르세요.\n• Ctrl+z=실행 취소, Ctrl+y=다시 실행", - "editWholeText": "전체 텍스트 편집", + "nOcrDrawHelp": "그리기 팁\n────────────────────\n• 선을 이어 그리려면 Ctrl을 누르세요.\n• Ctrl+z=실행 취소, Ctrl+y=다시 실행", "editWordOnly": "단어만 편집", "imagePreProcessing": "이미지 전처리", "preProcessingTitle": "전처리", @@ -4138,11 +4156,11 @@ "removeBorders": "테두리 제거", "binarize": "이진화", "borderSize": "테두리 크기", - "captureTopAlign": "상단 정렬 캡처", + "captureTopAlign": "ASSA 정렬 자동 감지", "showOnlyForcedSubtitles": "강제 표시 자막만 보여주기", "ocrImage": "OCR 이미지", "oneColor": "단색(흰색)", - "darknessThreshold": "어둠의 임계점", + "darknessThreshold": "어두움 임계값", "editExportDotDotDot": "편집/내보내기(_E)...", "editBinaryOcrDatabase": "\"바이너리 이미지 비교\" 데이터베이스 편집", "binaryImageCompareDatabase": "\"바이너리 이미지 비교\" 데이터베이스", @@ -4174,7 +4192,6 @@ "htmlExportNoMatches": "필터와 일치하는 줄이 없습니다", "htmlExportImageBackground": "이미지 배경", "htmlExportCheckerboard": "체커보드", - "htmlExportTheme": "테마", "htmlExportGeneratedBySubtitleEdit": "Subtitle Edit로 생성됨", "vobSubColors": "VobSub/DVD 색상...", "vobSubColorsTitle": "VobSub/DVD 색상", @@ -4183,7 +4200,7 @@ "vobSubColorPattern": "패턴", "vobSubColorEmphasis1": "강조 1", "vobSubColorEmphasis2": "강조 2", - "vobSubColorsInvert": "배경 반전 / 강조 1", + "vobSubColorsInvert": "배경과 강조 1 색상 바꾸기", "vobSubIsolateColors": "OCR용 VobSub 색상 분리", "vobSubIsolateColorsHint": "OCR 전에 가장 많이 쓰인 색상(텍스트)만 남기고 윤곽선/안티앨리어싱 색상을 제거해 각 VobSub 이미지를 선명한 흑백 이미지로 다시 만듭니다. 회색 윤곽선이 글자와 섞여 인식이 어려운 VobSub/DVD 자막에서 인식률을 높일 수 있습니다.", "llamaCppOcrSettingsTitle": "llama.cpp OCR 설정", @@ -4202,10 +4219,9 @@ "fallbackOcrDatabase": "대체 OCR 데이터베이스", "showAllOllamaModels": "모든 모델 표시 (비전 미지원 모델 포함)", "ollamaModelLikelyWrong": "Ollama가 텍스트를 반환하지 않았습니다. 선택한 모델이 OCR / 비전을 지원하지 않을 수 있습니다.", - "llamaCppNotDownloaded": "llama.cpp 엔진/모델이 다운로드 되지 않았습니다 - 배치 변환 설정에서 받으세요", + "llamaCppNotDownloaded": "llama.cpp 엔진/모델이 다운로드되지 않았습니다 - 일괄 변환 설정에서 다운로드하세요", "llamaCppReturnedNoText": "llama.cpp 에서 텍스트가 반환되지 않았습니다 - 서버와 모델 설정을 확인하세요", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp를 사용하려면 llama-server 엔진과 선택한 OCR 모델을 다운로드해야 합니다. 지금 다운로드하시겠습니까?", - "llamaCppDownloadEnginePrompt": "llama.cpp를 사용하려면 llama-server 엔진을 다운로드해야 합니다. 지금 다운로드하시겠습니까?", "llamaCppDownloadModelPrompt": "llama.cpp를 사용하려면 선택한 OCR 모델을 다운로드해야 합니다. 지금 다운로드하시겠습니까?", "crispEmbedNotDownloaded": "CrispEmbed 엔진/모델이 다운로드되지 않았습니다 - 일괄 변환 설정에서 다운로드하세요", "crispEmbedReturnedNoText": "CrispEmbed가 텍스트를 반환하지 않았습니다 - 모델을 확인하세요", @@ -4213,18 +4229,39 @@ "crispEmbedSettingsTitle": "CrispEmbed 설정", "crispEmbedDescription": "여러 모델 백엔드를 지원하는 로컬 OCR 엔진 - 여기에서 엔진과 모델을 다운로드하세요.", "trainNOcrDatabase": "nOCR 데이터베이스 훈련...", + "optimizeNOcrDatabase": "nOCR 데이터베이스 최적화...", + "optimizeNOcrDatabaseQuestionXY": "nOCR 데이터베이스 \"{0}\"에서 비슷한 문자를 구별하는 데 도움이 되지 않는 선을 제거하시겠습니까?\n\n데이터베이스 크기가 줄고 OCR이 빨라지며, 대체로 오류도 줄어듭니다. 최대 1분 정도 걸립니다.\n\n백업은 \"{1}\"에 저장됩니다.", + "optimizingNOcrDatabaseXY": "nOCR 데이터베이스 최적화 중... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "nOCR 데이터베이스 \"{0}\" 최적화 완료: 선 {1:#,##0}개 -> {2:#,##0}개.", "startTraining": "훈련 시작", "abortTraining": "훈련 중단", "trainingOptions": "훈련 설정", + "trainNOcrSubtitle": "설치된 글꼴로 문자를 그려 nOCR이 문자 모양을 학습하도록 합니다. 자막에 사용된 글꼴을 선택하세요.", + "xFontsSelected": "{0:#,##0}개 선택됨", + "subtitleFonts": "자막 글꼴", + "emptyDatabase": "빈 데이터베이스", + "startFromDatabase": "기준 데이터베이스", + "startFromDatabaseHint": "기존 데이터베이스의 복사본에 훈련한 문자를 추가하거나(권장), 빈 데이터베이스에서 시작합니다", + "fontSizes": "글자 크기", + "fontSizesHint": "문자를 그릴 크기(픽셀)를 쉼표로 구분하여 입력하세요. 예: \"30, 40\"", + "numberOfLineSegmentsHint": "문자당 검사할 선 수 - 많을수록 판별이 엄격해지지만 느려집니다", + "enterDatabaseName": "데이터베이스 이름을 입력하세요", + "trainingFontXSizeYCharacterZ": "\"{0}\" 훈련 중, {1} px: {2}", + "xLearned": "{0:#,##0}개 학습됨", + "xSkipped": "{0:#,##0}개 건너뜀", "charactersToTrain": "훈련시킬 문자", - "letterCombinationsToTrain": "하나의 이미지로 분할될 수 있는 글자 조합", + "letterCombinationsToTrain": "하나의 이미지로 처리될 수 있는 글자 조합", "importCharactersFromSubtitleFile": "자막 파일에서 문자 가져오기...", - "numberOfLineSegments": "줄 세그먼트 수", - "alsoTrainBold": "볼드체도 훈련", - "alsoTrainItalic": "이탤릭체도 훈련", + "numberOfLineSegments": "선분 수", + "alsoTrainBold": "굵게도 훈련", + "alsoTrainItalic": "기울임도 훈련", "trainingXLearnedYSkipped": "\"{0}\" 훈련 - {1:#,##0} 문자 학습됨, {2:#,##0} 건너뜀", "trainingDoneXLearned": "훈련 완료 - {0:#,##0} 문자 학습됨", - "selectAtLeastOneFont": "하나 이상의 글꼴을 선택해 주세요" + "selectAtLeastOneFont": "하나 이상의 글꼴을 선택해 주세요", + "nOcrZoomIn": "확대", + "nOcrZoomOut": "축소", + "nOcrLineAlgorithm": "알고리즘", + "nOcrLineAlgorithmHint": "자동 그리기로 전경/배경 선을 생성할 때 사용할 알고리즘" }, "assa": { "assaDraw": "ASSA 그리기", @@ -4234,7 +4271,7 @@ "drawBezierTool": "베지어 곡선(F5)", "drawRectangleTool": "직사각형(F6)", "drawCircleTool": "동그라미(F7)", - "drawCloseShape": "닫힌 도형(F8/Enter)", + "drawCloseShape": "도형 닫기 (F8/Enter)", "drawDeleteShape": "도형 삭제(Del)", "drawChangeLayer": "레이어 변경", "drawClearAll": "모두 지우기(Ctrl+N)", @@ -4250,25 +4287,182 @@ "drawSelectedShape": "선택한 도형", "drawSelectedLayer": "선택한 레이어", "drawToolX": "도구: {0}", - "drawHelpText": "클릭하여 점을 추가 • Enter/F8 키를 눌러 도형을 닫음 • Shift 키를 누른 채 드래그하여 이동 • Ctrl 키를 누른 채 스크롤하여 확대/축소", + "drawHelpText": "클릭하여 점 추가 • 우클릭하여 옵션 표시 • 선택 도구: 핸들을 드래그하여 크기 조절/회전 (Shift = 비율 유지/15° 단위 회전) • Enter/F8로 도형 닫기 • Shift+드래그 또는 마우스 가운데 버튼으로 화면 이동 • Ctrl+스크롤로 확대/축소", + "drawMoveToLayer": "레이어로 이동", + "drawFlipHorizontal": "수평 뒤집기", + "drawFlipVertical": "수직 뒤집기", + "drawHideShape": "도형 숨기기", + "drawShowShape": "도형 표시", + "drawHideLayer": "레이어 숨기기", + "drawShowLayer": "레이어 표시", + "drawDeleteLayer": "레이어 삭제", + "drawDeletePoint": "점 삭제", + "drawCancelDrawing": "그리기 취소", + "drawLayerX": "레이어 {0}", + "drawImportSvg": "SVG 이미지 가져오기...", + "drawRotateClockwise": "시계 방향으로 90° 회전", + "drawConvertToCurve": "선분을 곡선으로 변환", + "drawZoom": "확대/축소", + "drawShapeTool": "도형 도구", + "drawColorPickerTool": "도형이나 배경에서 색상 선택", + "drawShapeLibrary": "도형 라이브러리", + "drawShapeLibraryHint": "캔버스에서 드래그하여 도형을 배치하거나, 클릭하여 기본 크기로 배치하세요. Shift 키를 누르면 비율이 유지됩니다.", + "drawAddToLibrary": "도형 라이브러리에 추가...", + "drawRemoveFromLibrary": "도형 라이브러리에서 제거", + "drawShapeName": "도형 이름", + "drawCategorySpeechBubbles": "말풍선", + "drawCategoryArrows": "화살표", + "drawCategoryBasicShapes": "기본 도형", + "drawCategorySymbols": "기호", + "drawCategoryClipArt": "클립 아트", + "drawClipArtRedHeart": "빨간 하트", + "drawClipArtAngerMark": "분노 표시", + "drawClipArtSweatDrop": "땀방울", + "drawClipArtSparkles": "반짝임", + "drawClipArtBlush": "홍조", + "drawClipArtSurpriseLines": "놀람 표시", + "drawClipArtBamBurst": "쾅! 효과", + "drawClipArtZzz": "잠자는 표시 (Zzz)", + "drawClipArtSun": "태양", + "drawClipArtFlame": "불꽃", + "drawClipArtLightBulb": "전구", + "drawClipArtLightningBolt": "번개", + "drawClipArtColoredMusicNotes": "알록달록한 음표", + "drawClipArtPhone": "전화기", + "drawClipArtQuestionMark": "물음표", + "drawClipArtExclamationMark": "느낌표", + "drawClipArtGreenCheck": "초록색 체크 표시", + "drawClipArtRedCross": "빨간 X 표시", + "drawClipArtThumbsUp": "엄지 척", + "drawClipArtGoldStar": "금색 별", + "drawClipArtBrokenHeart": "깨진 하트", + "drawClipArtGhost": "유령", + "drawClipArtSkull": "해골", + "drawClipArtSnowflake": "눈송이", + "drawClipArtMoonAndStars": "달과 별", + "drawClipArtRainCloud": "비구름", + "drawClipArtBomb": "폭탄", + "drawClipArtGift": "선물", + "drawClipArtCrown": "왕관", + "drawClipArtClock": "시계", + "drawClipArtClapperboard": "슬레이트", + "drawClipArtMicrophone": "마이크", + "drawClipArtWarningSign": "경고 표지", + "drawClipArtNoEntry": "진입 금지", + "drawClipArtPopcorn": "팝콘", + "drawClipArtCoffeeCup": "커피잔", + "drawClipArtRainbow": "무지개", + "drawClipArtTrophy": "트로피", + "drawClipArtRocket": "로켓", + "drawClipArtBalloon": "풍선", + "drawClipArtCamera": "카메라", + "drawClipArtPartyPopper": "축하 폭죽", + "drawCategoryMyShapes": "내 도형", + "drawShapeSpeechBubble": "말풍선", + "drawShapeSpeechBubbleRight": "말풍선 (오른쪽 꼬리)", + "drawShapeSpeechBubbleUp": "말풍선 (위쪽 꼬리)", + "drawShapeOvalBubble": "타원형 말풍선", + "drawShapeBoxBubble": "상자형 말풍선", + "drawShapeThoughtBubble": "생각 말풍선", + "drawShapeShoutBubble": "외침 말풍선", + "drawShapeCaptionBox": "자막 상자", + "drawShapeSpeechBubbleSide": "말풍선 (왼쪽 꼬리)", + "drawShapeRoundBubble": "원형 말풍선", + "drawShapePillBubble": "캡슐형 말풍선", + "drawShapeScreamBubble": "비명 말풍선", + "drawShapeArrow": "화살표", + "drawShapeDoubleArrow": "양방향 화살표", + "drawShapeChevron": "갈매기형", + "drawShapeCurvedArrow": "곡선 화살표", + "drawShapeRepeatArrow": "반복 화살표", + "drawShapeUTurnArrow": "유턴 화살표", + "drawShapeRoundedRectangle": "둥근 모서리 직사각형", + "drawShapeTriangle": "삼각형", + "drawShapeDiamond": "마름모", + "drawShapePentagon": "오각형", + "drawShapeHexagon": "육각형", + "drawShapeOctagon": "팔각형", + "drawShapeStar": "별", + "drawShapeRing": "고리", + "drawShapePlus": "더하기 기호", + "drawShapeBanner": "배너", + "drawShapeHalfCircle": "반원", + "drawShapeTeardrop": "물방울", + "drawShapeHeart": "하트", + "drawShapeCheck": "체크 표시", + "drawShapeMusicNote": "음표", + "drawShapeMusicNotes": "여러 음표", + "drawShapeLightning": "번개", + "drawShapeCloud": "구름", + "drawShapeMoon": "달", + "drawShapeBadge": "배지", + "drawShapeSpeaker": "스피커", + "drawShapeCross": "X 표시", + "drawShapeSmiley": "웃는 얼굴", + "drawShapeSadSmiley": "슬픈 얼굴", + "drawBackgroundVideoFrame": "비디오 프레임 (현재 위치)", + "drawBackgroundVideoFrameAt": "지정한 시간의 비디오 프레임...", + "drawBackgroundImage": "이미지 파일...", + "drawBackgroundNone": "배경 없음", + "drawBackgroundStretch": "이미지를 캔버스 크기로 늘리기", + "drawBackgroundOpacity": "배경 불투명도", + "drawBackgroundVideoFrameFailed": "{0} 위치의 비디오 프레임을 가져오지 못했습니다.", + "drawConvertToLine": "선분을 직선으로 변환", + "drawConvertShapeToCurves": "모든 직선을 곡선으로 변환", + "drawConvertShapeToLines": "모든 곡선을 직선으로 변환", + "drawRotateCounterClockwise": "시계 반대 방향으로 90° 회전", + "drawSvgImages": "SVG 이미지", + "drawSvgNoShapes": "SVG 파일에서 채워진 도형이나 선을 찾을 수 없습니다.", + "drawTextTool": "텍스트 도구", + "drawDefaultText": "텍스트", + "drawShrinkToFit": "상자에 맞춰 축소", + "drawTextBox": "텍스트 상자", + "drawDiscardChanges": "그리기가 변경되었습니다.\n변경 사항을 버리시겠습니까?", + "drawColorPickerToolName": "색상 선택기", + "drawOpenDrawing": "ASSA 그리기 열기", + "drawSaveDrawing": "ASSA 그리기 저장", + "drawDrawingFiles": "ASSA 그리기 파일", + "drawAssFiles": "ASS 파일", + "drawPositionXY": "위치: {0}, {1}", + "drawXShapes": "도형 {0}개", + "drawXPoints": "점 {0}개", + "drawShapeXDraw": "도형 {0} (그리기)", + "drawShapeXErase": "도형 {0} (지우기)", "progressBarTitle": "ASSA 진행 표시줄", "progressBarSettings": "진행 표시줄", "mouseOverColor": "마우스 오버 색상", "clickedColor": "클릭한 색상", "progressBarForeColor": "전경색", - "progressBarSquareCorners": "뾰족한 모서리", + "progressBarSquareCorners": "직각 모서리", "progressBarRoundedCorners": "둥근 모서리", - "progressBarChapters": "목차", - "progressBarSplitterWidth": "스플리터 폭", - "progressBarSplitterHeight": "스플리터 높이", + "progressBarSplitterWidth": "챕터 구분선 너비", + "progressBarSplitterHeight": "챕터 구분선 높이", "progressBarXAdjustment": "X축 조정", "progressBarYAdjustment": "Y축 조정", "progressBarTextAlignment": "텍스트 정렬", + "progressBarStyleCutCorners": "모서리 잘림", + "progressBarStyleArrow": "화살표", + "progressBarStyleSlanted": "기울어진 모양", + "progressBarStyleSegments": "분할 막대", + "progressBarStyleRoundedSegments": "둥근 분할 막대", + "progressBarStyleDots": "점", + "progressBarStyleDiamonds": "마름모", + "progressBarStyleChevrons": "갈매기형", + "progressBarStyleStripes": "줄무늬", + "progressBarStyleWave": "웨이브", + "progressBarStyleZigzag": "지그재그", + "progressBarStyleTapered": "한쪽 끝이 좁은 모양", + "progressBarStyleRuler": "눈금자", + "progressBarStyleDoubleLine": "이중 선", + "progressBarStyleEqualizer": "이퀄라이저", + "progressBarStyleStars": "별", + "progressBarPlayhead": "재생 위치 표시", + "progressBarEdgeMargin": "가장자리 여백", + "progressBarSplitter": "챕터 구분선", "fontCollectorTitle": "글꼴 수집기", "fontCollectorUsedIn": "사용된 곳", "fontCollectorFontFiles": "글꼴 파일", "fontCollectorStyleX": "스타일: {0}", - "fontCollectorInlineLineX": "{0}번 줄", "fontCollectorFound": "찾음", "fontCollectorNotFound": "찾을 수 없음", "fontCollectorEmbedded": "내장됨", @@ -4287,15 +4481,15 @@ "fontCollectorAndXMoreFonts": "... 외 {0}개", "fontCollectorNoFontsToEmbed": "새로 포함할 글꼴이 없습니다. 필요한 글꼴이 이미 포함되어 있거나 글꼴 파일을 찾지 못했습니다.", "fontCollectorXFontFilesEmbedded": "글꼴 파일 {0}개를 자막에 포함했습니다.", - "fontCollectorTrimFonts": "사용된 문자만 포함 (폰트 자르기)", - "trimFontsDotDotDot": "사용된 문자로 폰트 자르기...", - "trimFontsPromptX": "{0}개의 포함된 폰트를 현재 사용 중인 문자만 포함하도록 자르시겠습니까?\n\n나중에 자막에 추가된 텍스트는 누락된 문자를 표시할 수 있으므로 마지막 단계로 자르세요.", - "trimFontsNoFontsToTrim": "자르기 위한 포함된 폰트가 없습니다.", - "trimFontsXFontsTrimmedSavedYZ": "{0}개의 폰트가 잘렸으며, {1}를 저장합니다.\n\n{2}", + "fontCollectorTrimFonts": "사용된 문자만 포함 (글꼴 정리)", + "trimFontsDotDotDot": "글꼴에서 사용된 문자만 남기기...", + "trimFontsPromptX": "포함된 글꼴 {0}개에서 현재 사용 중인 문자만 남기시겠습니까?\n\n나중에 추가한 글자가 표시되지 않을 수 있으므로 마지막 단계에서 글꼴을 정리하세요.", + "trimFontsNoFontsToTrim": "정리할 글꼴이 포함되어 있지 않습니다.", + "trimFontsXFontsTrimmedSavedYZ": "글꼴 {0}개를 정리하여 {1}의 용량을 줄였습니다.\n\n{2}", "trimFontsTotalSavingX": "총 절감: {0}", - "trimFontsReasonNotTrueType": "TrueType 폰트만 자를 수 있습니다", - "trimFontsReasonFontCollection": "폰트 컬렉션은 지원되지 않습니다", - "trimFontsReasonCouldNotParse": "폰트를 읽을 수 없습니다", + "trimFontsReasonNotTrueType": "TrueType 글꼴에서만 사용하지 않는 문자를 제거할 수 있습니다", + "trimFontsReasonFontCollection": "글꼴 컬렉션은 지원되지 않습니다", + "trimFontsReasonCouldNotParse": "글꼴을 읽을 수 없습니다", "trimFontsReasonNoSavings": "크기 감소 없음", "resolutionResamplerTitle": "해상도 변경", "resolutionResamplerSourceRes": "원본 해상도", @@ -4303,7 +4497,7 @@ "resolutionResamplerChangeMargins": "여백 변경", "resolutionResamplerChangeFontSize": "글자 크기 변경", "resolutionResamplerChangePositions": "위치 변경", - "resolutionResamplerChangeDrawing": "도면 변경", + "resolutionResamplerChangeDrawing": "그리기 도형 크기 변경", "resolutionResamplerFromVideo": "비디오에서...", "resolutionResamplerSourceAndTargetEqual": "원본 해상도와 목표 해상도가 동일하므로 별도의 조치가 필요하지 않습니다.", "resolutionResamplerNothingSelected": "변경할 옵션을 하나 이상 선택해 주세요.", @@ -4318,12 +4512,30 @@ "backgroundBoxWave": "웨이브", "backgroundBoxHexagon": "육각형", "backgroundBoxTornPaper": "찢어진 종이", - "backgroundBoxCloud": "클라우드", + "backgroundBoxCloud": "구름", "backgroundBoxTornPaperDouble": "찢어진 종이(상단 및 하단)", "backgroundBoxStarburst": "스타버스트", - "backgroundBoxScroll": "스크롤", + "backgroundBoxScroll": "두루마리·양피지", + "backgroundBoxPill": "캡슐형", + "backgroundBoxCutCorners": "모서리 잘림", + "backgroundBoxSlanted": "기울어진 모양", + "backgroundBoxTicket": "티켓", + "backgroundBoxSpeechBubble": "말풍선", + "backgroundBoxRibbon": "리본", + "backgroundBoxBrushStroke": "붓 자국", + "backgroundBoxCornerBrackets": "모서리 괄호", + "backgroundBoxUnderline": "밑줄 막대", + "backgroundBoxFrame": "테두리", + "backgroundBoxArrowTag": "화살표 태그", + "backgroundBoxSideBar": "측면 막대", "stylesInFile": "파일 내 스타일", "stylesSaved": "저장된 스타일", + "stylesSummary": "파일 내 스타일 {0}개 · 저장된 스타일 {1}개", + "stylesTransform": "변형", + "stylesEditing": "편집", + "stylesPreviewSampleTextHint": "예제 텍스트 - \\N으로 줄 바꿈", + "stylesScale": "크기 비율 (%)", + "stylesPreviewChecker": "체크무늬 배경", "allCategories": "[전체]", "newCategory": "새 카테고리...", "renameCategory": "카테고리 이름 변경...", @@ -4333,12 +4545,12 @@ "stylesTitleX": "스타일 - {0}", "propertiesTitleX": "속성 - {0}", "attachmentsTitleX": "첨부 파일 - {0}", - "smartWrappingTopWide": "0: 스마트 래핑(상단 확장)", + "smartWrappingTopWide": "0: 스마트 줄 바꿈 (윗줄을 더 길게)", "endOfLineWrapping": "1: 줄 끝 단어 줄 바꿈, \\N만 줄 바꿈", "noWrapping": "2: 줄 바꿈 없음, \\N과 \\n 모두 줄 바꿈", - "smartWrappingBottomWide": "3: 스마트 래핑(하단 확장)", + "smartWrappingBottomWide": "3: 스마트 줄 바꿈 (아랫줄을 더 길게)", "fontsAndGraphics": "글꼴 및 그래픽", - "wrapStyle": "래핑 스타일", + "wrapStyle": "줄 바꿈 방식", "borderAndShadowScaling": "외곽선 및 그림자 크기 조정", "collisions": "충돌", "playDepth": "재생 깊이", @@ -4355,9 +4567,11 @@ "keepBoth": "둘 다 유지", "doThisForAllConflictingStyles": "충돌하는 모든 스타일에 이 동작 적용", "setStyleAsDefault": "이 스타일을 기본값으로 설정", - "takeUsagesFromDotDotDot": "사용법 가져오기...", + "takeUsagesFromDotDotDot": "다른 스타일의 적용 대상 가져오기...", "replaceStyleWithDotDotDot": "스타일을 다음으로 바꾸기...", "noAttachmentsFound": "선택한 ASSA 파일에서 첨부 파일을 찾을 수 없습니다.", + "attachmentsDropHint": "글꼴이나 이미지 파일을 여기에 끌어다 놓으면 첨부됩니다", + "attachmentsSummary": "글꼴 {0}개 · 이미지 {1}개 · {2}", "deleteStyleQuestion": "스타일을 삭제하시겠습니까?", "deleteStylesQuestion": "스타일을 삭제하시겠습니까?", "deleteXStylesQuestion": "스타일 {0}개를 삭제하시겠습니까?", @@ -4373,23 +4587,42 @@ "chooseOverrideTagToAdd": "추가할 재정의 태그를 선택", "fontSizeChange": "글자 크기 변경", "moveTextFromLeftToRight": "텍스트를 왼쪽에서 오른쪽으로 이동", - "colorFromWhiteToRed": "흰색에서 빨간색까지의 색상", + "colorFromWhiteToRed": "흰색에서 빨간색으로 색상 변경", "rotateXSlow": "X축 회전(천천히)", "rotateX": "X축 회전", "rotateY": "Y축 회전", "rotateTilt": "회전/기울이기", - "spaceIncrease": "공간 확대", + "spaceIncrease": "자간 늘리기", "popIn": "팝 인", "spinIn": "스핀 인", "setPosition": "위치 설정", "rotation": "회전", + "setPositionTopLeft": "왼쪽 위", + "setPositionTopCenter": "가운데 위", + "setPositionTopRight": "오른쪽 위", + "setPositionMiddleLeft": "왼쪽 가운데", + "setPositionMiddleRight": "오른쪽 가운데", + "setPositionBottomLeft": "왼쪽 아래", + "setPositionBottomCenter": "가운데 아래", + "setPositionBottomRight": "오른쪽 아래", + "setPositionCustom": "사용자 정의", + "setPositionReset": "자막 줄의 위치로 초기화", + "setPositionResetRotation": "회전 초기화", + "setPositionGuides": "안내선", + "setPositionSafeArea": "안전 영역", + "setPositionCenterLines": "중심선", + "setPositionSnapToGuides": "안내선에 맞추기", + "setPositionNudgeHint": "방향키로 1픽셀씩 이동, Shift와 함께 누르면 10픽셀씩 이동", "scaleX": "가로 배율", "scaleY": "세로 배율", "spacing": "자간", "angle": "각도", "imageColorPicker": "이미지 색상 선택기", "copyColorAsHextoClipboard": "HEX 색상값으로 클립보드에 복사", - "generatingBackgroundBoxXOfY": "{1}의 배경 상자 {0}을(를) 생성 중...", + "imageColorPickerHint": "비디오 프레임을 클릭하여 색상을 선택하세요", + "copyColorAsAssaToClipboard": "ASSA 색상값(&HBBGGRR&)으로 클립보드에 복사", + "copyColorAsAssaTagToClipboard": "색상값을 ASSA \\c 태그로 클립보드에 복사", + "generatingBackgroundBoxXOfY": "배경 상자 {1}개 중 {0}번째 생성 중...", "applyAdvancedEffectTitle": "고급 효과 적용", "chooseEffect": "효과 선택", "advancedEffectTypewriter": "타자기", @@ -4401,7 +4634,7 @@ "advancedEffectKaraoke": "가라오케", "advancedEffectKaraokeDescription": "각 문자를 순서대로 강조 표시하여 노래방 가사처럼 왼쪽에서 오른쪽으로 텍스트를 출력", "advancedEffectFancyKaraoke": "가라오케 - 액티브 워드 팝", - "advancedEffectFancyKaraokeDescription": "미리 지정된 강조 단어(\\u1 밑줄 또는 강조 색상)를 사용하여 자막에 적용 — 사용하지 않는 단어는 흐리게 표시하고, 사용 중인 단어에는 팝 글로우 애니메이션을 적용", + "advancedEffectFancyKaraokeDescription": "미리 지정된 강조 단어(\\u1 밑줄 또는 강조 색상)를 사용하여 자막에 효과 적용 — 강조되지 않은 단어는 흐리게 하고, 강조 단어에는 팝·발광 애니메이션 적용", "advancedEffectScrambleReveal": "스크램블 공개", "advancedEffectScrambleRevealDescription": "뒤섞인 문자들이 왼쪽에서 오른쪽으로 해독되어 실제 텍스트로 출력", "advancedEffectRainbowPulse": "레인보우 펄스", @@ -4423,7 +4656,7 @@ "advancedEffectOldMovie": "고전 영화 효과(배경)", "advancedEffectOldMovieDescription": "노이즈, 비네팅, 스크래치 등 빈티지 35mm 필름 프로젝터의 느낌을 재현", "advancedEffectNeonBurst": "네온 버스트", - "advancedEffectNeonBurstDescription": "네온 블룸 효과와 확대/축소 가능한 '팝' 애니메이션이 적용된 고에너지 '숏츠' 스타일 캡션", + "advancedEffectNeonBurstDescription": "네온 발광 효과와 글자가 크게 나타났다가 원래 크기로 줄어드는 팝 애니메이션을 적용한 역동적인 쇼츠 스타일 자막", "advancedEffectSnowFlakeCount": "입자 수", "advancedEffectStarfieldStarCount": "별 개수", "advancedEffectGlitch": "글리치", @@ -4453,11 +4686,11 @@ "advancedEffectSlowZoomIn": "천천히 확대", "advancedEffectSlowZoomInDescription": "보통 크기로 시작하여 자막이 재생되는 동안 서서히 커짐.", "advancedEffectFadeIn": "전환 - 페이드 인", - "advancedEffectFadeInDescription": "화면이 검은색으로 시작하다가 한 줄씩 서서히 페이드인", + "advancedEffectFadeInDescription": "각 자막 구간에서 검은 화면이 서서히 걷히며 영상이 나타남", "advancedEffectFadeOut": "전환 - 페이드 아웃", - "advancedEffectFadeOutDescription": "화면이 검은색으로 변하며 한 줄씩 서서히 페이드 아웃", + "advancedEffectFadeOutDescription": "각 자막 구간의 끝에서 화면이 서서히 검게 변함", "advancedEffectTvClose": "화면 전환 - TV 화면 닫기", - "advancedEffectTvCloseDescription": "상단과 하단에서 검은색 막대가 안쪽으로 뻗어 나오고, 가운데 부분은 흰색으로 점차 희미해지고(상단 검정/가운데 흰색/하단 검정) 어두워짐", + "advancedEffectTvCloseDescription": "상단과 하단에서 검은색 막대가 안쪽으로 커지면서 가운데 부분은 흰색으로 변합니다 (상단 검정/가운데 흰색/하단 검정). 후반부는 완전히 검은 화면이 됩니다.", "advancedEffectSlideInLeft": "왼쪽에서 슬라이드 인", "advancedEffectSlideInLeftDescription": "화면 왼쪽 밖에서 들어와 잠시 멈춘 후 왼쪽으로 사라짐", "advancedEffectSlideInRight": "오른쪽에서 슬라이드 인", @@ -4470,7 +4703,35 @@ "advancedEffectLowerThird": "하단 배너", "advancedEffectLowerThirdDescription": "강조 막대가 슬라이드되어 나타나는 왼쪽 아래의 이름 및 역할 배너 — 인터뷰/다큐멘터리 스타일 (첫 번째 줄은 이름, 다음 줄부터는 역할)", "advancedEffectLowerThirdAccentColor": "강조 색상", - "overrideTagsHistory": "태그 기록 재정의" + "advancedEffectCategoryWords": "단어 및 가라오케", + "advancedEffectCategoryInOut": "등장 및 퇴장", + "advancedEffectCategoryTextFx": "텍스트 효과", + "advancedEffectCategoryScenes": "장면", + "advancedEffectCategoryTitles": "타이틀 및 크레딧", + "advancedEffectSearchWatermark": "효과 검색...", + "advancedEffectNoMatches": "검색어와 일치하는 효과가 없습니다", + "advancedEffectCustomize": "사용자 정의", + "advancedEffectNoSettings": "이 효과는 별도 설정 없이 그대로 적용됩니다.", + "advancedEffectAmount": "개수", + "advancedEffectPreviewNoVideo": "예제 미리 보기 - 비디오를 열면 실제 렌더링 결과를 볼 수 있습니다", + "advancedEffectHighlightBox": "강조 상자", + "advancedEffectHighlightBoxDescription": "대사에 맞춰 색상 상자가 단어마다 이동하는 CapCut 스타일 자막", + "advancedEffectSingleWordPop": "한 단어씩 팝", + "advancedEffectSingleWordPopDescription": "말하는 순서에 맞춰 큰 단어가 하나씩 튀어나오는 쇼츠 스타일 자막", + "advancedEffectBoldCaptions": "굵은 자막", + "advancedEffectBoldCaptionsDescription": "두꺼운 외곽선이 있는 굵은 자막 - 현재 말하는 단어가 강조 색상으로 빛나며 커짐", + "advancedEffectHighlightColor": "강조 색상", + "advancedEffectUpperCase": "대문자", + "advancedEffectTextSizePercent": "텍스트 크기 (%)", + "advancedEffectSmoothFill": "부드러운 색상 채우기", + "advancedEffectSmoothFillDescription": "대사에 맞춰 각 단어가 강조 색상으로 부드럽게 채워짐", + "advancedEffectBlurInWords": "흐림에서 선명하게 등장", + "advancedEffectBlurInWordsDescription": "말하는 순서에 맞춰 단어가 하나씩 나타남 - 흐릿한 상태에서 선명해지며 제자리에 올라옴", + "advancedEffectRollingCaptions": "롤링 자막", + "advancedEffectRollingCaptionsDescription": "실시간 채팅이나 텔레프롬프터처럼 각 자막 줄이 위로 올라오며 이전 줄을 밀어 올림", + "advancedEffectFillColor": "채우기 색상", + "advancedEffectRise": "기준선에서 위로 솟아오르기", + "overrideTagsHistory": "서식 재정의 태그 기록" }, "about": { "title": "Subtitle Edit 정보", @@ -4492,11 +4753,8 @@ "all": "모두", "tooManyLines": "줄이 너무 많음", "charactersPerSecond": "읽기 속도", - "durationTooShort": "너무 짧음", - "durationTooLong": "너무 긺", "lineTooLong": "줄이 너무 긺", "lineTooWide": "줄이 너무 넓음", - "overlap": "겹침", "gapTooShort": "간격이 너무 짧음", "tooManyLinesHint": "최대 줄 수를 초과하는 줄", "charactersPerSecondHint": "초당 문자 수가 최대치를 초과함", @@ -4512,7 +4770,6 @@ "detailOverlapToNext": "다음 자막과 겹침: {0} ms", "detailGapToPrevious": "이전 자막까지: {0} < {1} ms", "detailGapToNext": "다음 자막까지: {0} < {1} ms", - "detail": "상세 정보", "tip": "자막 줄을 두 번 클릭하거나 엔터 키를 눌러 해당 위치로 이동합니다. 실행되는 검사 항목과 그 제한은 설정 > 일반에서 지정됩니다.", "exportAsText": "텍스트 파일 (.txt)...", "exportAsExcel": "Excel 파일 (.xlsx)...", diff --git a/src/ui/Assets/Languages/Macedonian.json b/src/ui/Assets/Languages/Macedonian.json index 00cdeb20e8f..40a250fbbe9 100644 --- a/src/ui/Assets/Languages/Macedonian.json +++ b/src/ui/Assets/Languages/Macedonian.json @@ -1,9 +1,50 @@ { "title": "Уредување на титлови", - "version": "v5.2.0-rc7", + "version": "v5.3.0", "translatedBy": "Кирил Жежоски", "cultureName": "mk-MK", "general": { + "prompt": "Подсетник", + "temperature": "Температура", + "preset": "Профил", + "output": "Излез", + "outputFormat": "Излезен формат", + "other": "Друго", + "timeCodeFormat": "Формат на временски код", + "topBottomMargin": "Горна/долна маргина", + "theme": "Тема", + "brightness": "Осветленост", + "chooseColor": "Избери боја", + "lineX": "Линија {0}", + "playLine": "Пушти линија", + "maxLineLength": "Максимум должина на линија", + "maxCharsPerSec": "Максимум знаци/сек", + "maxNumberOfLines": "Максимален број на линии", + "subtitles": "Титлови", + "shotChanges": "Промени на сцени", + "chapters": "Поглавја", + "audio": "Аудио", + "interjections": "Интерјекци", + "blankLines": "Празни линии", + "editWholeText": "Уреди цел текст", + "noTextInClipboard": "Нема текст во привремената меморија", + "noSubtitlesFoundTitle": "Не се пронајдени титлови", + "replacedXOccurrences": "Заменети {0} појавувања", + "invalidRegularExpressionX": "Невалиден регуларен израз: {0}", + "discardChangesTitle": "Да се отфрлат промените?", + "downloadingXDotDotDot": "Преземање {0}...", + "importTimeCodesDotDotDot": "Увези временски кодови...", + "original": "Оригинал", + "nextChange": "Следна промена", + "previousChange": "Претходна промена", + "changeXOfY": "Промена {0} од {1}", + "tooLong": "Предолго", + "tooShort": "Прекратко", + "overlapping": "Преклопување", + "detail": "Детал", + "fixOcrErrors": "Поправи OCR грешки", + "runningOcrXY": "Извршувам OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp бара да се преземе llama-server моторот. Да преземам сега?", "assistedMove": "Помогнато поместување", "assistedMoveChooseMove": "Кликни на опција или притисни го нејзиниот број за да поместиш зборови", "assistedMoveDotDotDot": "Помогнато поместување...", @@ -71,6 +112,24 @@ "abort": "Прекини", "actor": "Актер", "actors": "Актери", + "setActorDotDotDot": "Постави актер...", + "actorPickerTitle": "Постави актер", + "actorPickerFilterHint": "Пишувај за да филтрираш или внеси име на нов актер", + "actorPickerKeysHint": "Притисни број или Enter за да го поставиш актерот. Alt+Up/Down го менува редоследот, Delete го отстранува актерот.", + "actorPickerNewActorX": "Нов актер „{0}“", + "actorPickerLinesSelectedX": "Избрани линии: {0}", + "setStyleDotDotDot": "Постави стил...", + "stylePickerTitle": "Постави стил", + "stylePickerFilterHint": "Пишувај за да филтрираш или внеси име на нов стил", + "stylePickerKeysHint": "Притисни број (1-9, 0) за да го поставиш стилот на сите избрани линии.", + "stylePickerNewStyleX": "Нов стил „{0}“", + "stylePickerNewStyleInfo": "Притисни Enter за да го додадеш овој стил со стандардни поставки и да го поставиш на избраните линии. Користи „Управувај со стилови...“ за подоцна да ги смениш фонтот, боите и позицијата.", + "stylePickerCurrentStyleX": "Тековен стил: {0}", + "stylePickerLinesUsingStyleX": "Линии што го користат овој стил: {0}", + "stylePickerMarginsXYZ": "Лево {0}, десно {1}, вертикално {2}", + "stylePickerSetStyle": "_Постави стил", + "stylePickerManageStyles": "Управувај со стилови...", + "stylePickerManageStylesHint": "Затвори го овој прозорец и отвори го управувачот со стилови за да ги уредиш фонтовите, боите, позицијата и друго", "add": "Додај", "addDotDotDot": "Додај...", "addToNamesListCaseSensitive": "Додај во листата со имена (чувствително на големина)", @@ -79,7 +138,6 @@ "adjustAlpha": "Прилагоди алфа (прозирност)", "adjustDisplayDuration": "Прилагоди време за прикажување", "adjustment": "Прилагодување", - "advanced": "Напредно", "advancedSettings": "Напредни поставки", "after": "По", "alignment": "Порамнување", @@ -115,7 +173,6 @@ "batchMode": "Пакетен режим", "bdnXml": "BDN/xml", "before": "Пред", - "beforeX": "Пред „{0}“", "beginning": "Почеток", "bluRaySup": "Blu-ray (sup)", "bold": "Задебелено", @@ -127,7 +184,6 @@ "bookmarkEdit": "Уреди обележувач", "bookmarkEditForSelectedLinesX": "Уреди обележувач за {0} избрани линии", "bookmarksList": "Листа со обележувачи", - "borderColor": "Боја на граница", "borderStyle": "Стил на граница", "bottomCenter": "Дно‑центар", "bottomLeft": "Дно‑лево", @@ -150,7 +206,6 @@ "changeCasing": "Смени големина на букви", "changeFormatting": "Смени форматирање", "changeFrameRate": "Смени брзина на кадри", - "changeLanguageFilter": "Смени филтер за јазик...", "changeOnce": "Смени еднаш", "changeSpeed": "Смени брзина", "character": "Знак", @@ -172,7 +227,6 @@ "conversionCancelledByUser": "Конверзијата е прекината од корисникот", "convert": "Конвертирај", "converted": "Конвертирано", - "convertingDotDotDot": "Конвертирање...", "convertingXofYDotDoDot": "Конвертирање {0:#,###,##0}/{1:#,###,##0}...", "copy": "Копирај", "copyImageToClipboard": "Копирај слика во таблата со исечоци", @@ -180,7 +234,6 @@ "couldNotSaveFileXErrorY": "Не можеше да се зачува датотеката „{0}“. Грешка: {1}", "count": "Број", "cps": "Знаци/сек", - "currentSubtitle": "Тековен титл", "currentVideoPosition": "Тековна позиција на видео", "cut": "Исечи", "dark": "Темно", @@ -225,7 +278,6 @@ "expand": "Прошири", "export": "Извези", "exportDotDotDot": "Извези...", - "exportToX": "Извези во {0}", "extendAfter": "Продолжи/скъси до линија после", "extendBefore": "Продолжи/скъси до линија пред", "extendSelectedLinesToNextShotChangeOrNextSubtitle": "Продолжи избрани линии до следна промена на сцена (или следен титл)", @@ -241,7 +293,6 @@ "fileExtension": "Наставка на датотека", "fileName": "Име на датотека", "fileNameX": "Име на датотека: {0}", - "fileNameXAndSize": "Име на датотека: {0} ({1})", "fileSaved": "Датотеката е зачувана", "fileSavedToX": "Датотеката е зачувана во {0}", "fileXAlreadyExists": "Датотеката „{0}“ веќе постои.", @@ -251,8 +302,6 @@ "find": "Најди", "findNext": "Најди следна", "findTextX": "Најди текст - {0}", - "fiveHundredMilliseconds": "500 милисекунди", - "fiveSeconds": "Пет секунди", "fix": "Поправи", "fixCommonErrors": "Поправи чести грешки", "fixRightToLeft": "Поправи оддесно‑на‑лево", @@ -276,14 +325,12 @@ "foundXInLineYZ": "Пронајдено „{0}“ во линија {1}, позиција {2}", "foundXMatches": "Пронајдено {0} резултати", "frameRate": "Брзина на кадри", - "frameRateX": "Брзина на кадри: {0:0.0###}", "frames": "Кадри", "from": "Од", "fromCurrentVideoPosition": "од тековната позиција во видеото", "fullScreen": "Цел екран", "gap": "Празнина", "general": "Општо", - "generalText": "Општо", "generate": "Генерирај", "generateImportShotChanges": "Генерирај/импортирај промени на сцени", "generating": "Генерирање...", @@ -300,12 +347,8 @@ "help": "Помош", "hex": "Хекс", "hide": "Скриј", - "hidePreview": "Скриј преглед", "history": "Историја", "horizontal": "Хоризонтално", - "hourMinutesSecondsDecimalSeparatorMilliseconds": "Час:мин:сек{0}мс", - "hourMinutesSecondsFrames": "Час:мин:сек:кадри", - "ip": "IP", "id": "ID", "image": "Слика", "imageSaved": "Сликата е зачувана", @@ -363,6 +406,7 @@ "mergeSelectedLinesDialog": "Спој избрани линии како дијалог", "mergeWithLineAfterAndAutoBreak": "Спој со линија после и автоматски раздели", "mergeWithLineAfterKeepBreaks": "Спој со линија после (задржи разделувања)", + "mergeWithLineAfterAndUnbreak": "Спој со линија после и обратно дели", "mergeWithLineBeforeAndAutoBreak": "Спој со линија пред и автоматски раздели", "mergeWithLineBeforeKeepBreaks": "Спој со линија пред (задржи разделувања)", "middleCenter": "Средина‑центар", @@ -377,11 +421,11 @@ "moveAllShotChangeOneFrameForward": "Помести сите промени на сцена за еден кадар напред", "multiMode": "Мулти режим", "moveDown": "Помести надолу", + "increase": "Зголеми", + "decrease": "Намали", "moveUp": "Помести нагоре", "multipleReplace": "Множествена замена", - "mute": "Заглуши", "name": "Име", - "negative": "Негативно", "new": "Ново", "newDotDotDot": "Ново...", "newProfile": "Нов профил", @@ -408,20 +452,15 @@ "offsetY": "Отстап Y", "ok": "_ОК", "oneFile": "Една датотека", - "oneHundredMilliseconds": "100 милисекунди", - "oneSecond": "Една секунда", "oneSecondBack": "Една секунда назад", "oneSecondForward": "Една секунда напред", - "onlineVideoFeatureNotAvailable": "Функцијата не е достапна за онлајн видео", "openContainingFolder": "Отвори содржна папка", "openDictionaryFolder": "Отвори папка со речници", "openFile": "Отвори датотека", "openImageBasedSubtitle": "Отвори титл базиран на слика", "openImageFile": "Отвори датотека со слика", - "openOriginalSubtitleFile": "Отвори оригинална датотека со титл...", "openOriginalSubtitleFileTitle": "Отвори оригинална датотека со титл", "openOutputFolder": "Отвори папка за излезни датотеки", - "openSubtitle": "Отвори титл...", "openSubtitleFileTitle": "Отвори датотека со титл", "openSubtitles": "Отвори титлови...", "openVideoFile": "Отвори видеодатотека...", @@ -434,11 +473,6 @@ "outlineWidth": "Ширина на контура", "outputFolder": "Излезна папка", "outputProperties": "Својства на излезот", - "overlap": "Преклопување", - "overlapNextX": "Преклопи следно ({0:#;##0.###})", - "overlapPreviousLineX": "Преклопи претходна линија ({0:#;##0.###})", - "overlapStartAndEnd": "Преклопи почеток и крај", - "overlapX": "Преклопи ({0:#;##0.###})", "overwriteExistingFiles": "Презапиши постоечки датотеки", "overwriteFilesInFolderX": "Презапиши датотеки во папка: „{0}“", "overwriteQuestion": "Презапиши?", @@ -451,6 +485,7 @@ "percent": "Процент", "pickLayer": "Постави слој", "pickOllamaModel": "Избери модел за Ollama", + "pickModel": "Избери модел", "llamaCppUseRemoteServer": "Користи надворешен сервер (URL)", "pickOutputFolder": "Избери излезна папка", "pickResolutionFromCurrentVideo": "Избери резолуција од тековното видео", @@ -490,7 +525,6 @@ "refresh": "Освежи", "region": "Регион", "regularExpression": "Регуларен израз", - "regularExpressionIsNotValid": "Регуларниот израз не е валиден!", "relativeToCurrentVideoPosition": "Во однос на тековната позиција на видеото", "remove": "Отстрани", "removeAlignment": "Отстрани порамнување", @@ -515,7 +549,7 @@ "reset": "Ресетирај", "resizePanels": "Промени големина на панелите", "resolution": "Резолуција", - "resolutionX": "Резолуција: {0}", + "retry": "Обиди се повторно", "reverseRightToLeftStartEnd": "Преврти RTL почеток/крај", "right": "Десно", "rightToLeft": "Оддесно‑на‑лево", @@ -553,8 +587,6 @@ "selectedlinesX": "Избрани линии: {0}", "sensitivity": "Сензитивност", "separator": "Сепаратор", - "sessionKey": "Клуч за сесија", - "sessionKeyGenerate": "Генерирај нов клуч", "setEnd": "Постави крај", "setEndAndGoToNext": "Постави крај и оди следно", "setEndAddNewAndGoToNew": "Постави крај, додај нова и оди на новата", @@ -573,8 +605,9 @@ "shadowColor": "Боја на сенка", "shadowWidth": "Ширина на сенка", "shiftLineBy": "Помести линија за", + "shotIn": "Почеток на кадар", + "shotOut": "Крај на кадар", "shortcut": "Кратенка", - "shortcutX": "Кратенка: {0}", "shortcuts": "Кратенки", "show": "Прикажи", "showActorColumn": "Прикажи колона „Актер“", @@ -585,17 +618,19 @@ "showStartColumn": "Прикажи колона „Старт“", "showHideColumn": "Прикажи колона „Скриј“", "showHistory": "Прикажи историја", + "clearHistory": "Исчисти историја", + "removeFromHistory": "Отстрани од историјата", "showLayerColumn": "Прикажи колона „Слој“", "showPreview": "Прикажи преглед", "showShotChangesList": "Прикажи листа со промени на сцени", + "showShotInColumn": "Прикажи колона „Почеток на кадар“", + "showShotOutColumn": "Прикажи колона „Крај на кадар“", "showStyleColumn": "Прикажи колона „Стил“", "showTeletext": "Прикажи колона за телетекст во листата", "showTimeCodes": "Прикажи временски кодови", "showWpmColumn": "Прикажи колона „Збори/мин“", "showPixelWidthColumn": "Прикажи колона „Ширина во пиксели“", "shrink": "Смали", - "singleBox": "Една кутија", - "singleLineLengths": "Должина на една линија:", "singleMode": "Единечен режим", "textTotalLength": "Текст - вкупна должина", "textSingleLineMaxLength": "Текст - максимална должина на една линија", @@ -642,16 +677,16 @@ "strikeout": "Прешкртано", "style": "Стил", "styleExaggeration": "Експериментален стил", - "styleLanguage": "Стил / Јазик", "styles": "Стилови", "subtitleFile": "Датотека со титлови", + "subtitleFileChangedOutsideX": "Датотеката „{0}“ е променета надвор од Subtitle Edit.\n\nДа се вчита повторно и да се изгубат твоите промени?", "subtitleFileName": "Име на датотека со титлови", "subtitleFileSaved": "Датотеката со титлови е зачувана", "subtitleFileSavedToX": "Датотеката со титлови е зачувана во {0}", "subtitleFiles": "Датотеки со титлови", "subtitleFormats": "Формати за титлови", "subtitleLoadedX": "Титлот е вчитан: {0}", - "subtitleXOfY": "Титл {0} од {1}", + "subtitleReloadedChangedOutsideX": "Титлот е повторно вчитан (променет надвор од Subtitle Edit): {0}", "suffix": "Суфикс", "suggestions": "Сугестија", "sync": "Синхронизација", @@ -663,7 +698,6 @@ "teletextColor": "Боја на телетекст", "teletextLine": "Линија на телетекст", "tenHours": "10 часа", - "tenMilliseconds": "10 милисекунди", "text": "Текст", "textColor": "Боја на текст", "textFiles": "Текстуални датотеки", @@ -688,9 +722,6 @@ "topLeft": "Горен‑лево", "topRight": "Горен‑десно", "totalAdjustmentX": "Вкупно прилагодување: {0}", - "totalFramesX": "Вкупно кадри: {0:#;##0.##}", - "totalLengthX": "Вкупна должина: {0}", - "totalLengthXSplitLine": "Вкупна должина: {0} (раздели линија!)", "translate": "Преведи", "translatePercentX": "Преведување: {0}%", "translateRow": "Преведи ред", @@ -699,6 +730,7 @@ "type": "Тип", "unbreak": "Обратно дели текст", "unbreakLines": "Обратно дели линии", + "undelete": "Врати избришано", "underline": "Подвлечено", "undo": "Врати", "unknown": "Непознато", @@ -715,13 +747,11 @@ "usages": "Употреба", "use": "Користи", "useAlways": "Користи секогаш", - "useLargerFontForThisWindow": "Користи поголем фонт за ова прозорец", "useOnce": "Користи еднаш", "useOutputFolder": "Користи излезна папка", "useSourceFolder": "Користи изворна папка", "useSourceResolution": "Користи изворна резолуција", "userName": "Корисничко име", - "userNameAlreadyInUse": "Корисничкото име веќе е во употреба", "vertical": "Вертикално", "video100MsBack": "Видео, 100 милисекунди назад", "video100MsForward": "Видео, 100 милисекунди напред", @@ -735,14 +765,25 @@ "videoCustom3ForwardX": "Видео, прилагодени милисекунди ({0:#,###,##0}) напред, 3", "videoCustom4BackX": "Видео, прилагодени милисекунди ({0:#,###,##0}) назад, 4", "videoCustom4ForwardX": "Видео, прилагодени милисекунди ({0:#,###,##0}) напред, 4", - "videoEncodingX": "Видео кодирање: {0}", + "videoCustom1BackAndPauseX": "Видео, прилагодени милисекунди ({0:#,###,##0}) назад и пауза, 1", + "videoCustom1ForwardAndPauseX": "Видео, прилагодени милисекунди ({0:#,###,##0}) напред и пауза, 1", + "videoCustom2BackAndPauseX": "Видео, прилагодени милисекунди ({0:#,###,##0}) назад и пауза, 2", + "videoCustom2ForwardAndPauseX": "Видео, прилагодени милисекунди ({0:#,###,##0}) напред и пауза, 2", + "videoCustom3BackAndPauseX": "Видео, прилагодени милисекунди ({0:#,###,##0}) назад и пауза, 3", + "videoCustom3ForwardAndPauseX": "Видео, прилагодени милисекунди ({0:#,###,##0}) напред и пауза, 3", + "videoCustom4BackAndPauseX": "Видео, прилагодени милисекунди ({0:#,###,##0}) назад и пауза, 4", + "videoCustom4ForwardAndPauseX": "Видео, прилагодени милисекунди ({0:#,###,##0}) напред и пауза, 4", "videoExtension": "Наставка за видео датотека", "videoFile": "Видеодатотека", "videoFileGenerated": "Видео датотеката е генерирана", "videoFileGeneratedX": "Генерирана видеодатотека: „{0}“", + "videoFilesGenerated": "Видео датотеките се генерирани", + "xVideosGenerated": "Генерирани видеа: {0}", + "xOfYVideosGenerated": "Генерирани {0} од {1} видеа", + "savedInX": "Зачувано во {0}", + "savedInXFolders": "Зачувано во {0} папки", "videoFiles": "Видеодатотеки", "videoAndAudioFiles": "Видео и аудио датотеки", - "videoInformation": "Видео информации", "videoOffset": "Одбег на видео", "videoOneFrameBack": "Видео, еден кадар назад", "videoOneFrameForward": "Видео, еден кадар напред", @@ -753,7 +794,6 @@ "videoPlayer": "Видеоплеер", "videoPosition": "Позиција на видео", "videoResolution": "Резолуција на видео", - "viewX": "Преглед {0}", "visible": "Видливо", "voice": "Глас", "volume": "Гласност", @@ -762,15 +802,12 @@ "waveformCenterOnVideoPosition": "Волуменска форма центрирана на позицијата во видеото", "waveformPasteFromClipboard": "Залепи од таблата со исечоци", "waveformSpectrogram": "Волуменска форма/спектрограма", - "webServiceUrl": "URL на веб сервис", "width": "Ширина", - "openAiCompatibleStt": "OpenAI компатибилен STT", "xOfYFiles": "{0:#,###,##0} од {1:#,###,##0} датотеки", "zeroBytes": "0 бајти", "copiedToClipboard": "Копирано во таблата со исечоци", "openAiCompatibleSttEndpoint": "STT крајна точка URL", "openAiCompatibleSttApiKey": "API клуч", - "openAiCompatibleSttModel": "Модел", "openAiCompatibleSttExtraHeaders": "Дополнителни заглавија", "openAiCompatibleSttTimeout": "Времетраење (секунди)", "openAiCompatibleSttLanguage": "Јазичен подсетник", @@ -780,18 +817,18 @@ "dashScopeSttRegion": "Регион", "dashScopeSttEnableWords": "Временски ознаки на ниво на збор", "dashScopeSttRegionKeyHint": "Забелешка: API клучевите на Alibaba Cloud Model Studio се специфични за регион - осигурајте се дека избраниот регион одговара на регионот каде што е создаден API клучот (Кина наспроти Меѓународен).", + "googleCloudSttProjectId": "ID на проект (само за Application Default Credentials)", + "googleCloudSttBucketName": "Storage bucket (празно = автоматски)", + "googleCloudSttDynamicBatching": "Динамичко групирање (околу 5x поевтино, без гаранција за доцнење)", "onlineSttApiKeyMissing": "Потребен е API клуч. Внесете го вашиот API клуч и обидете се повторно.", "configurationRequired": "Потребна е конфигурација", "transcriptionError": "Грешка при транскрипција", "transcriptionComplete": "Транскрипцијата е завршена", - "transcribingWithOpenAi": "Транскрибирање со OpenAI сервис...", "unauthorizedApiKey": "Неавторизирано: Неважечки API клуч или недоволни дозволи.", "requestTimeout": "Времетраење на барање: Серверот преволно време одговори.", - "noSegmentsReturned": "Не се вратени сегменти од сервисот за транскрипција.", "openAiCompatibleSttAutoTranscribeOnAudioSelection": "Автоматски транскрибирај при избирање на аудио", "processingResponse": "Обработка на одговор...", "transcriptionFailed": "Транскрипцијата не успеа", - "windowPositionAndSize": "Позиција и големина на прозорецот", "wordsPerMin": "Збори/мин", "pixelWidth": "Ширина во пиксели", "wpm": "Збори/мин", @@ -800,8 +837,6 @@ "xNotFound": "„{0}“ не е пронајдено", "xRequiresAnApiKey": "{0} бара API клуч", "xRequiresAValidUrl": "{0} бара валиден URL (на пр. \"http://...\" или \"https://...\")", - "xSeconds": "{0:0.0##} секунди", - "xSubtitles": "{0:#,###,##0} титлови", "yes": "Да", "copyToClipboard": "Копирај во таблата со исечоци", "playCurrent": "Пушти тековно", @@ -897,10 +932,10 @@ "replace": "_Замени...", "multipleReplace": "_Множествена замена...", "goToLineNumber": "_Оди на број на линија...", + "commandPalette": "Палета со _команди...", "rightToLeftMode": "Р_ежим оддесно‑на‑лево", "modifySelectionDotDotDot": "Измени _избор...", "tools": "_Алатки", - "toolsSelectedLines": "_Алатки (избрани линии)", "adjustDurations": "_Прилагоди времетраења...", "applyDurationLimits": "Примени ограничувања за _времетраење...", "batchConvert": "_Пакетно конвертирање...", @@ -990,6 +1025,7 @@ "toggleSelectSubtitleWhilePlayingCurrentlyOff": "Вклучи избор на титл за време на репродукција (тековно: исклучено)", "fillSelectedLinesWithClipboard": "Пополни избрани линии со текст од таблата со исечоци", "beautifyTimeCodes": "Улепши временски кодови...", + "improveTimeCodes": "Подобри временски кодови (присилно порамнување)...", "evenlyDistributeLines": "Рамномерно распредели линии (по знаци/сек)", "mergeContinuationLines": "Спој линии за продолжување...", "snapAllTimesToFrames": "Приклучи ги сите времиња на кадри", @@ -1044,6 +1080,9 @@ "selectCurrentLineWhilePlayingHint": "Избери тековната титра при репродукција {0}", "videoPosition": "Видео позиција {0}", "videoPositionTextBox": "Поле за текст со позиција во видеото {0}", + "toolbarLineBreakX": "Прекин на ред {0} (остатокот од лентата со алатки продолжува во нов ред)", + "initialText": "Почетен текст на избраната линија", + "initialTextHint": "Текстот на избраната линија каков што беше кога линијата беше избрана", "hideWaveformToolbar": "Скриј лентата со алатки {0}", "resetZoomAndSpeed": "Ресетирај зум и брзина на репродукција {0}", "removeBlankLines": "Отстрани празни линии {0}", @@ -1057,6 +1096,15 @@ "textPlayHint": "Пушти тековен титл и запри на крајот {0}", "textPauseHint": "Паузирај репродукција {0}", "textNextHint": "Пушти следен титл и запри на крајот {0}", + "moveSelectedLines": "Помести избрани линии (копчиња назад/напред)", + "moveSelectedLinesAndFollowing": "Помести избрани линии и сите следни (копчиња назад/напред)", + "moveAllLines": "Помести ги сите линии (копчиња назад/напред)", + "moveSelectedLinesBackHint": "Помести избрани линии {0} ms назад {1}", + "moveSelectedLinesForwardHint": "Помести избрани линии {0} ms напред {1}", + "moveSelectedLinesAndFollowingBackHint": "Помести избрани линии и сите следни {0} ms назад {1}", + "moveSelectedLinesAndFollowingForwardHint": "Помести избрани линии и сите следни {0} ms напред {1}", + "moveAllLinesBackHint": "Помести ги сите линии {0} ms назад {1}", + "moveAllLinesForwardHint": "Помести ги сите линии {0} ms напред {1}", "guessStartNoLineSelected": "Погоди почеток: нема избрана линија", "guessStartTimeCodesLocked": "Погоди почеток: временските кодови се заклучени", "guessStartNoWaveform": "Погоди почеток: нема форма на бран", @@ -1078,6 +1126,9 @@ "charactersPerSecond": "Знаци/секунда: {0}", "chooseColumn": "Избери колона", "columnPaste": "Колона вметнување", + "commandPaletteTitle": "Палета со команди", + "commandPaletteSearchPlaceholder": "Пишувај за да бараш команди...", + "commandPaletteNoCommandsFound": "Нема соодветни команди", "createdEmptyTranslation": "Создаден празен превод од тековната титра", "deleteText": "Избриши текст", "deleteTextAndShiftCellsUp": "Избриши текст и помести ќелии нагоре", @@ -1115,18 +1166,20 @@ "noTextInClipboard": "Нема текст во привремената меморија", "oneLineCopiedFromOriginal": "Една линија копирана од оригиналната титра", "oneLineCopiedToOriginal": "Една линија е копирана во оригиналниот титл", + "onlineOnlyVideo": "Видео достапно само онлајн", + "onlineOnlyVideoXSizeYDownloadAndOpen": "Видео датотеката „{0}“ ({1}) е зачувана само онлајн, на пример во Dropbox или iCloud Drive, и мора да се преземе пред да може да се отвори.\n\nДа се преземе и отвори сега?", "oneLineMerged": "Една линија споена", "oneLineSwitched": "Една линија заменета", "overwriteExistingCells": "Презапиши постоечки ќелии", "overwriteOrShiftCellsDown": "Презапиши/помести ќелии надолу", "parsingMatroskaFile": "Парсирам Matroska датотека...", + "readingDvdSubtitles": "Читање DVD титлови...", "pasteFromClipboardDotDotDot": "Залепи од привремена меморија...", "redoPerformed": "Повторно действие извршено", "redoPerformedXActionLeft": "Повторно действие извршено (остани {0} акции)", "removedUnicodeControlCharactersX": "Отстранети Unicode контролни знаци од {0} линии", "removedXBlankLines": "Отстранети {0} празни линии", "replacedXWithYCountZ": "Заменет \"{0}\" со \"{1}\" ({2} појави)", - "replacedXWithYInLineZ": "Заменет \"{0}\" со \"{1}\" во линија {2}", "reversedStartAndEndingsForRightToLeftX": "Реверсирани старт и завршувања за десно-налево во {0} линии", "ruleProfileIsX": "Правилниот профил е сега \"{0}\"", "saveLanguageFile": "Зачувај датотека за јазик", @@ -1134,7 +1187,6 @@ "shiftTextCellsDown": "Помести текстуални ќелии надолу", "singleLineLength": "Должина на линија: ", "speedIsNowX": "Брзината е сега \"{0}\"", - "spellCheckResult": "Проверката на правопис заврши. \n\n• Променети зборови: {0}\n• Прескокнати зборови: {1}", "subtitleGridFormattingX": "Форматирање на табелата: {0}", "subtitleImportedFromMatroskaFile": "Титрата е увезена од Matroska датотека", "textDown": "Текст надолу", @@ -1160,13 +1212,14 @@ "trimmedXLines": "Скратени {0} титра линии", "pastedXLinesOverSelectedLines": "Залепени се {0} линија(и) врз избраните линии", "pastedXOfYLinesOverSelectedLines": "Залепени се {0} од {1} линија(и) врз избраните линии - остатокот не се собра во изборот", + "insertedXLinesFromClipboard": "Вметнати {0} линија(и) од таблата со исечоци", "openOriginalDifferentNumberOfSubtitlesXY": "Оригиналната датотека за титри нема ист број на титри како тековната датотека.\n\n• Оригинални титри: {0}\n• Тековни титри: {1}", - "importXMatchingOriginalLines": "Увези {0} согласни оригинални титри?", "originalTextReadOnly": "Оригинален текст (само за читање)", "originalTextEditMode": "Оригинален текст (режим на уредување)", "originalIsReadOnlyNotSaved": "Оригиналниот титл е референца само за читање и не беше зачуван", "originalIsEmptyNotSaved": "Оригиналниот титл воопшто нема текст и не беше зачуван", "originalIsReadOnlyReference": "Оригиналниот титл е отворен како референца само за читање", + "closeTranslationQuestionXY": "Да се затвори преводот „{0}“?\n\nОригиналниот титл „{1}“ станува титлот што го уредуваш. Самата датотека со превод не се менува.", "allowEditOfOriginalSubtitle": "Дозволи уредување на оригиналниот титл", "showAllOriginalLinesX": "Прикажи ги сите оригинални линии ({0} немаат совпаѓање тука)", "showAllOriginalLinesHint": "Линиите без совпаѓање се прикажани како дополнителни редови, за да видиш што недостига во преводот.", @@ -1188,6 +1241,7 @@ "fileExportedInFormatXToY": "Датотеката е извезена во формат {0} во {1}", "fileExportedInFormatXToFileY": "Датотеката е извезена во формат \"{0}\" во датотека \"{1}\"", "fixedXLines": "Поправени {0} линии", + "toolXChangedYLines": "{0}: променети {1} линии", "transcriptionCompletedWithXLines": "Транскрипцијата заврши со {0} линии", "openSubtitleFileX": "Отвори датотека за титра \"{0}\"?", "replacedXOccurrences": "Заменети {0} појави", @@ -1234,13 +1288,9 @@ "file": { "ebuSaveOptions": { "title": "EBU опции за зачувување", - "generalSubtitleInformation": "Општи информации за титри", "codePageNumber": "Број на кодна страница", "diskFormatCode": "Код за формат на диск", "displayStandardCode": "Код за стандард за приказ", - "colorRequiresTeletext": "Боите бараат телетекст!", - "alignmentRequiresTeletext": "Подесувањето бара телетекст!", - "teletextCharsShouldBe38": "'Максимален број знаци по ред' за телетекст треба да биде 38!", "characterCodeTable": "Табела со знаци", "languageCode": "Код за јазик", "originalProgramTitle": "Оригинален наслов на програм", @@ -1257,7 +1307,6 @@ "maxNumberOfDisplayableRows": "Максимален број редови", "diskSequenceNumber": "Секвенциски број на диск", "totalNumberOfDisks": "Вкупен број на дискови", - "import": "Увези...", "textAndTimingInformation": "Текст и информации за време", "justificationCode": "Код за порамнување", "verticalPosition": "Вертикална позиција", @@ -1274,11 +1323,6 @@ "errors": "Грешки", "errorsX": "Грешки: {0}", "maxLengthError": "Линија {0} го надминува максимумот ({1}) за {2}: {3}", - "textUnchangedPresentation": "Непроменета презентација", - "textLeftJustifiedText": "Текст лево порамнуван", - "textCenteredText": "Текст центриран", - "textRightJustifiedText": "Текст десно порамнуван", - "useBoxForOneNewLine": "Обележете 'Користи рамка околу текстот' за само еден нов ред", "maxLengthErrorTeletextColored": "Линија {0}-{1}: 36 (не {2}) треба да биде максимален број знаци за обоен текст со двојна висина", "maxLengthErrorTeletextWhite": "Линија {0}-{1}: 37 (не {2}) треба да биде максимален број знаци за бел текст со двојна висина", "maxLengthErrorTeletextSingleHeight": "Линија {0}: 38 (не {1}) треба да биде максимален број знаци за бел текст со единечна висина", @@ -1303,22 +1347,29 @@ "formattingDotDotDot": "Форматирање...", "imageBasedSubtitleForEditDotDotDot": "Титра базирана на слика за уредување...", "imageBasedSubtitleForOcrDotDotDot": "Титра базирана на слика за OCR...", + "dvdSubtitlesDotDotDot": "Титлови од DVD (IFO/VOB)...", + "titleImportDvd": "Увези титлови од DVD", + "dvdIfoFile": "IFO датотека", + "dvdVobFiles": "VOB датотеки", + "dvdVideoStandard": "Видео стандард", + "dvdStartRipping": "Започни извлекување", + "dvdRippingAborted": "Извлекувањето е прекинато", + "dvdOpenIfoFile": "Отвори DVD IFO датотека", + "dvdAddVobFiles": "Додај VOB датотеки", + "dvdIfoFiles": "DVD IFO датотеки", + "dvdVobFileType": "DVD VOB датотеки", + "dvdDropHint": "Отвори IFO датотека (VIDEO_TS\\VTS_01_0.IFO) или додај VOB датотеки - или повлечи ги тука", + "dvdNotAnIfoFileX": "{0} не е DVD IFO датотека", + "dvdMenuIfoNoTitleSetsX": "Не се пронајдени сетови на наслови (VTS_xx_0.IFO) покрај {0}", + "dvdEncryptedXOfY": "{0} од {1} пакети со титлови се сè уште CSS шифрирани - овие VOB датотеки се копирани без дешифрирање, па некои слики од титловите ќе бидат искривени.\n\nПрво дешифрирај го DVD-то со алатка за извлекување DVD за чист резултат.\n\nДа се продолжи сепак?", "splitTextAt": "Подели текст на", "blankLines": "Празни линии", "oneLineIsOneSubtitle": "Една линија е една титра", "twoLinesAreOneSubtitle": "Две линии се една титра", "importFilesDotDotDot": "Увези датотеки...", "multipleFiles": "Увези од повеќе текстуални датотеки (една датотека е една титра)", - "importOptions": "Опции за увоз", - "autoSplitText": "Автоматски подели текст", - "lineMode": "Режим на линија", "maxLineLength": "Максимална должина на линија", - "maxLinesPerSubtitle": "Максимум линии по титра", - "minGapBetweenSubtitles": "Минимален празен простор помеѓу титрите", "mergeShortLines": "Спои кратки линии", - "removeLinesWithoutLetters": "Отстрани линии без букви", - "splitAtEndCharsSetting": "Подели при крајни знаци", - "takeTimeFromCurrentFile": "Преземи време од тековната датотека", "fixed": "Фиксирано", "numberOfSubtitlesX": "Број на титри: {0}", "numberOfSubtitlesXForcedY": "Број на титлови: {0} ({1} присилни)", @@ -1330,14 +1381,18 @@ "forcedAlignerProgress": "Порамнување... прозорец {0} од {1}, {2} од {3} линии", "forcedAlignerSetupTitle": "Порамни временски кодови преку присилен порамнувач", "forcedAlignerSetupIntro": "Присилниот порамнувач го совпаѓа текстот на титлот што веќе го имаш со аудиото, без прво да го транскрибира. Долгите видеа се порамнуваат во делови, па секоја должина е возможна.", + "forcedAlignerEndsFromSpeech": "Постави крајни времиња од изолиран говор (бавно)", + "forcedAlignerEndsFromSpeechHint": "Присилниот порамнувач наоѓа каде линијата започнува, а не каде завршува, па крајните времиња обично доаѓаат од времето за читање. Со ова вклучено, музиката и звучните ефекти прво се отстрануваат од аудиото и секоја линија завршува каде што нејзиниот говор утихнува. Трае приближно колку и самото видео со GPU - и многукратно подолго без него.", + "forcedAlignerIsolatingSpeech": "Изолирање говор... {0}", + "forcedAlignerIsolatingSpeechFailed": "Говорот не можеше да се изолира - крајните времиња се поставени од времето за читање.", "forcedAlignerModel": "Модел за порамнување", - "forcedAlignerDownloadEngine": "Преземи / ажурирај мотор..." + "forcedAlignerDownloadEngine": "Преземи / ажурирај мотор...", + "forcedAlignerEstimatedXOfY": "{0} од {1} линии не можеа да се порамнат и се поставени според времето за читање - нивните временски кодови се само проценети. Скриптата веројатно е подолга од она што се зборува во видеото." }, "export": { "exportImagesProfiles": "Извези профили за слики", "leftRightMargin": "Лева/десна маргина", "topBottomMargin": "Горна/долна маргина", - "titleExportBluRaySup": "Извези Blu-ray (sup)", "lineSpacingPercent": "Растојание помеѓу редови %", "paddingLeftRight": "Падинг лево/десно", "paddingTopBottom": "Падинг горе/долу", @@ -1378,10 +1433,21 @@ "titleExportDCinemaInteropPng": "D-Cinema интероп/png", "titleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", "imageBasedSubtitleSaved": "Снимката-базиран титл е зачуван", - "titleExportBdnXml": "Извези BDN/xml", "titleExportWebVttThumbnails": "Извези WebVTT (слики)", "fullFrameImage": "Слика со цел кадар", "fullFrameImageHint": "Направи ја секоја слика со големина на видео кадарот, со титлот на своето место", + "stereo3D": "3D", + "stereo3DHint": "За 3D видео: нацртај го титлот еднаш во половината од кадарот за секое око", + "halfSideBySide": "Половина една до друга", + "halfTopBottom": "Половина горе/долу", + "depth3D": "Длабочина", + "depth3DHint": "Колку титлот излегува од екранот - позитивна вредност го приближува, негативна го оддалечува", + "plane3D": "3D-Plane", + "plane3DHint": "Дај му на секој титл длабочина што 3D Blu-ray ја чува за него, од 3D-Plane (.ofs) датотека направена со BD3D2MK3D или OFSExtractor. Длабочината се користи таму каде што 3D-Plane нема", + "openPlane3DTitle": "Отвори 3D-Plane датотека", + "unableToLoadPlane3DX": "Не може да се вчита 3D-Plane: {0}", + "plane3DXDepthYToZ": "{0} (длабочина од {1} до {2})", + "plane3DXNoDepth": "{0} (без вредности за длабочина)", "textEffect": "Текстуален ефект", "textEffectSettingsTitle": "Подесувања за текстуален ефект", "textEffectPreset": "Претходно поставено", @@ -1413,13 +1479,10 @@ "statistics": { "title": "Статистики", "titleWithFileName": "Статистики - {0}", - "generalStatistics": "Општи статистики", - "mostUsed": "Најкористени...", "mostUsedLines": "Најчесто користени линии", "mostUsedWords": "Најчесто користени зборови", "nothingFound": "Ништо не е пронајдено", "numberOfLinesX": "Број на титл линии: {0:#,##0}", - "numberOfFilesX": "Број на титл датотеки: {0:#,##0}", "lengthInFormatXinCharactersY": "Број на знаци како {0}: {1:#,###,##0}", "numberOfCharactersInTextOnly": "Број на знаци само во текст: {0:#,###,##0}", "totalDuration": "Вкупно траење на сите титли: {0:#,##0}", @@ -1460,7 +1523,6 @@ "gapMaximum": "Гап - максимум: {0:#,##0} мс", "gapAverage": "Гап - просек: {0:#,##0.##} мс", "gapExceedingMinimum": "Гап - под минимум ({0:#,##0} мс): {1} ({2:0.00}%)", - "export": "Извези...", "subtitles": "Титлови", "words": "Зборови", "totalDurationShort": "Вкупно времетраење", @@ -1490,7 +1552,22 @@ "restoreAutoBackupFile": "Врати датотека од автоматска резервна копија", "restoreXFromY": "Дали сакате да го вратите \"{0}\" од {1}?", "deleteAllSubtitleBackups": "Дали сакате да избришете сите резервни датотеки за титли?", - "deleteAll": "Избриши сè" + "deleteAll": "Избриши сè", + "subtitles": "Титлови", + "settingsBackupInfo": "Се прави резервна копија на Settings.json кога Subtitle Edit ќе се стартува, најмногу еднаш на секои {0} ден(а) и само ако подесувањата се променети. Се чуваат најновите {1} резервни копии.", + "settingsBackupInfoEveryStart": "Се прави резервна копија на Settings.json секогаш кога Subtitle Edit ќе се стартува, ако подесувањата се променети. Се чуваат најновите {0} резервни копии.", + "settingsBackupOff": "Автоматската резервна копија на подесувањата е исклучена (Опции → Подесувања → Датотека).", + "lastSettingsBackupX": "Последна резервна копија: {0}", + "noSettingsBackupsYet": "Сè уште нема резервни копии на подесувањата", + "openSettingsBackupFolder": "Отвори папка со резервни копии на подесувањата", + "backUpSettingsNow": "Направи резервна копија сега", + "settingsBackedUp": "Направена е резервна копија на тековните подесувања.", + "restoreSettings": "Врати подесувања", + "restoreSettingsFromX": "Дали сакаш да ги замениш тековните подесувања со резервната копија од {0}?\n\nПрво ќе се направи резервна копија на тековните подесувања. Некои промени стапуваат на сила дури по рестартирање на Subtitle Edit.", + "settingsRestored": "Подесувањата се вратени. Рестартирај го Subtitle Edit за сите промени да стапат на сила.", + "settingsRestoreFailed": "Подесувањата не можеа да се вратат: {0}", + "settingsBackupNotValid": "резервната копија не е валидна датотека со подесувања, па тековните подесувања се задржани", + "deleteAllSettingsBackups": "Дали сакаш да ги избришеш сите датотеки со резервни копии на подесувањата?" }, "propertiesDCinema": { "title": "Својства за D-Cinema SMPTE", @@ -1504,22 +1581,16 @@ "editRate": "Скорост на уредување", "timeCodeRate": "Скорост на временски код", "startTime": "Време на старт", - "font": "Фонт", "fontId": "ID на фонт", "fontUri": "URI на фонт", - "generate": "Генерирај", - "fontColor": "Боја на фонт", "chooseColor": "Избери боја", "fontEffect": "Ефект на фонт", "effectColor": "Боја на ефект", - "fontSize": "Големина на фонт", "topBottomMargin": "Горна/долна маргина", "fadeUpTime": "Време за појавување", "fadeDownTime": "Време за исчезнување", - "frames": "Фрејмови", "zPosition": "Z-позиција", - "zPositionHelp": "Позитивните броеви го оддалечуваат текстот, негативните го приближуваат; ако z-позицијата е нула, тогаш е 2D", - "export": "Извези..." + "zPositionHelp": "Позитивните броеви го оддалечуваат текстот, негативните го приближуваат; ако z-позицијата е нула, тогаш е 2D" }, "webVtt": { "setStylesForSelectedLinesTitle": "Постави WebVTT стилови за избраните линии", @@ -1552,20 +1623,66 @@ "compareOnlyInOneFile": "Само во една датотека", "compareTextOrTimeDifference": "Разлика во текст/време", "compareNumberDifference": "Разлика во број", - "ignoreLineBreaks": "Игнорирај преломи на линии", "ignoreWhitespace": "Игнорирај празни знаци", "ignoreWhitespaceHint": "Линиите што се разликуваат само по празни места, табулатори или прекини на ред не се сметаат за различни", "ignoreFormatting": "Игнорирај форматирање", - "onlyLookForDifferencesInText": "Само проверувај разлики во текстот", - "cannotCompareWithImageBasedSubtitles": "Не може да се споредуваат со титли базирани на слика", - "statisticsTitle": "Статистики", "ignoreFormattingHint": "Линиите што се разликуваат само по ознаки за форматирање, како или {\\an8}, не се сметаат за различни", "showOnlyDifferencesInText": "Само разлики во текстот", + "ignoreNumbering": "Игнорирај нумерирање", + "ignoreNumberingHint": "Линиите што се разликуваат само по својот број не се сметаат за различни", + "ignoreTimeDifferenceMs": "Временска толеранција (ms)", + "ignoreTimeDifferenceMsHint": "Почетните и крајните времиња што се разликуваат за толку милисекунди или помалку не се сметаат за различни", + "compareDifferences": "Разлики", + "compareTextDifferences": "Разлики во текстот", + "compareCurrent": "Тековен", + "compareReference": "Референтен", + "compareEditable": "Може да се уредува", + "compareEditableHint": "Промените направени тука се враќаат во титлот кога ќе кликнеш Примени", + "compareReadOnly": "Само за читање", + "compareTakeFromReference": "Земи текст и тајминг од референтниот", + "compareInsertFromReference": "Вметни ја оваа линија во тековниот титл", + "compareDeleteFromCurrent": "Избриши ја оваа линија од тековниот титл", + "compareTakeText": "Земи текст", + "compareTakeTiming": "Земи тајминг", + "compareEditLine": "Уреди линија", + "compareEditHint": "Ctrl+Enter за зачувување, Esc за откажување", + "compareEdited": "Уредено", + "compareOnePendingChange": "1 промена на чекање", + "compareXPendingChanges": "{0} промени на чекање", + "compareDiscardXChanges": "Да се отфрлат {0} промена(и) направени во Сравни?", + "compareXChangesApplied": "Сравни: применети {0} промена(и)", + "compareChangeTextX": "#{0} текст од референтниот", + "compareChangeTimingX": "#{0} тајминг од референтниот", + "compareChangeTextAndTimingX": "#{0} текст и тајминг од референтниот", + "compareChangeEditedX": "#{0} уредено", + "compareChangeInsertedX": "#{0} вметнато", + "compareChangeDeletedX": "#{0} избришано", + "compareSyncPoint": "Точка на синхронизација", + "compareSyncPointHint": "Точка на синхронизација - овие две линии секогаш се прикажуваат како пар, а линиите над и под се порамнуваат посебно", + "compareSyncPickCurrent": "Точка на синхронизација: користи ја оваа тековна линија", + "compareSyncPickReference": "Точка на синхронизација: користи ја оваа референтна линија", + "compareSyncRemove": "Отстрани точка на синхронизација", + "compareClearXSyncPoints": "Исчисти точки на синхронизација ({0})", + "compareSyncCurrentPickedX": "Тековна #{0} е избрана како точка на синхронизација - избери ја соодветната референтна линија и кликни Синхронизирај", + "compareSyncReferencePickedX": "Референтна #{0} е избрана како точка на синхронизација - избери ја соодветната тековна линија и кликни Синхронизирај", + "compareSyncWithCurrentX": "Синхронизирај со тековна #{0}", + "compareSyncWithReferenceX": "Синхронизирај со референтна #{0}", + "compareSyncApply": "Синхронизација", + "compareSyncPointSetXY": "Точката на синхронизација е поставена: тековна #{0} и референтна #{1} сега се прикажуваат како пар", + "compareSyncAlreadyPairedXY": "Тековна #{0} и референтна #{1} веќе се прикажуваат како пар со ист почеток - нема што да се синхронизира", + "compareSyncPointShiftedXYZW": "Точката на синхронизација е поставена: тековни #{0}-#{1} поместени {2} за да започнуваат со референтна #{3}", + "compareChangeSyncShiftXYZ": "#{0}-#{1} поместени {2} (точка на синхронизација)", + "compareTimingDeltaHint": "Колку подоцна (+) или порано (−) референтната линија започнува и завршува во однос на тековната линија", "loadXFromFile": "Вчитај \"{0}\" од датотека", + "compareLoadSavedFile": "Вчитај зачувана датотека", "saveCompareHtmlTitle": "Зачувај HTML за споредба", "pickMatroskaTrackX": "Избери Matroska патека - {0}", "pickTransportStreamTrackX": "Избери трака од транспортен стрим - {0}", + "chapters": "Поглавја", + "dvdVobFilesMissingX": "Недостасуваат VOB датотеки (пронајдени {0}%)", "pickMp4TrackX": "Избери MP4 трака - {0}", + "pickMxfTrackX": "Избери MXF патека - {0}", + "pickMpegTrackX": "Избери MPEG патека - {0}", "rosettaProperties": "Својства за Timed Text Rosetta IMSC", "rosettaFontSize": "Големина на фонт (висина на ред)", "propertyTimeBase": "Временска основа", @@ -1575,7 +1692,6 @@ "propertyDefaultRegion": "Стандарден регион", "propertyStyleAttributeName": "Име на атрибутот за стил", "propertyTimeCodeFormat": "Формат на временски код", - "propertyFileExtension": "Наставка на датотека", "propertyTopOrigin": "Горно потекло", "propertyTopExtent": "Горен опсег", "propertyBottomOrigin": "Долно потекло", @@ -1625,7 +1741,6 @@ "selectionIntersect": "Пресек со селекција" }, "multipleReplace": { - "title": "Повеќе заменувања", "editRule": "Уреди правило", "newRule": "Ново правило", "editCategory": "Уреди категорија", @@ -1642,24 +1757,23 @@ "findWhat": "Што да најдам", "descriptionOptional": "Опис (опционално)", "invalidRegularExpressionX": "Невалиден регуларен израз: {0}", - "regularExpressionTooSlowX": "Регуларниот израз откажа по {0} секунди - правилото е прескокнато, пробај поедноставен образец" + "regularExpressionTooSlowX": "Регуларниот израз откажа по {0} секунди - правилото е прескокнато, пробај поедноставен образец", + "moveToCategory": "Помести во категорија" }, "find": { "searchTextWatermark": "Пребарај текст...", "wholeWord": "Цела реч", - "caseSensitive": "Разликувај големи/мали букви", - "caseInsensitive": "Не разликувај големи/мали букви", "findPrevious": "Најди _претходно", "findNext": "_Најди следно", "replaceAndFindNext": "_Замени & најди следно", "replaceAll": "Замени _сите", - "replaceTitle": "Замени", - "replaceWith": "Замени со", "replaceTextWatermark": "Замени со...", "replaceIn": "Замени/пребарај во", "replaceInTextAndOriginal": "Текст и оригинален текст", "replaceInTextOnly": "Само текст", - "replaceInOriginalOnly": "Само оригинален текст" + "replaceInOriginalOnly": "Само оригинален текст", + "replacedOneOccurrence": "Заменето е едно појавување", + "replacedXOccurrences": "Заменети {0} појавувања" }, "regularExpressionContextMenu": { "wordBoundary": "Граница на збор (\\b)", @@ -1687,6 +1801,7 @@ "xLinesYSubtitles": "{0} линии, {1} титлови", "xLinesYSubtitlesZErrors": "{0} линии, {1} титлови, {2} грешка(и)", "couldNotParseAsX": "Не може да се парсира како {0}", + "readAsXUseAsY": "Изворот не можеше да се прочита како {1}, но можеше да се прочита како {0}.\nДа се користат линиите и да продолжи зачувувањето како {1}?", "selectedXCharactersYLines": "Избрано: {0} знаци во {1} линија(и)", "replacedXOccurrences": "Заменети се {0} појавување(а)", "invalidRegularExpression": "Невалиден регуларен израз", @@ -1701,7 +1816,6 @@ "aiReview": { "title": "AI преглед", "review": "Прегледај", - "stop": "Стоп", "editPrompt": "Уреди промпт...", "editPromptTitle": "Уреди промпт за преглед", "promptInfo": "Инструкции испратени до моделот - {language} се заменува со јазикот на титлот.", @@ -1712,7 +1826,6 @@ "reviewingLineXOfY": "Преглед на линија {0} од {1}...", "reviewDone": "Прегледот е завршен - {0} сугестии во {1} линии", "noIssuesFound": "Не се пронајдени проблеми", - "categoryAll": "Сите", "categorySpelling": "Правопис", "categoryGrammar": "Граматика", "categoryPunctuation": "Интерпункција", @@ -1724,8 +1837,23 @@ "largeChangeWarning": "Голема промена - изгледа како препишување, прегледајте внимателно", "mismatchWarning": "Не наликува на оригиналот - можеби припаѓа на друга линија", "engineError": "AI моторот не е достапен: {0}", - "setupHint": "Прво изберете мотор и модел во Алатки -> AI преглед.", - "playCurrentLineHint": "Пушти ја избраната линија во видео плеерот и паузирај на нејзиниот крај (може и со двоен клик на линија)" + "playCurrentLineHint": "Пушти ја избраната линија во видео плеерот и паузирај на нејзиниот крај (може и со двоен клик на линија)", + "editAfterHint": "Кликни на текстот на избраниот ред за да ја уредиш поправката пред да ја примениш (Enter зачувува, Escape откажува)", + "template": "Шаблон", + "templatePlaceholder": "Избери шаблон што ќе го замени промптот", + "templateStandard": "Стандардна лектура", + "templateSpeechToText": "Чистење по говор во текст", + "templateMachineTranslation": "Поправка на машински превод", + "templateSdh": "SDH / за лица со оштетен слух", + "referenceContext": "Референтен контекст", + "referenceContextInfo": "Опционално. Имиња, ликови, речник на поими, синопсис или стилски белешки - моделот го смета ова за меродавно за имиња и поими. Се испраќа со секоја серија.", + "referenceContextPlaceholder": "Имиња: Каито, тетка Меи, д-р Холис\nПоими: Шинкансен, warp јадро\nСинопсис: Каито патува во Токио за да го најде својот исчезнат татко.", + "generateContext": "Генерирај со AI", + "generateContextHint": "Дозволи избраниот AI мотор да го прочита титлот и да подготви имиња, поими и синопсис - провери го резултатот пред употреба", + "generatingContextPartXOfY": "Читање дел {0} од {1}...", + "generatingContextSynopsis": "Пишување синопсис...", + "replaceContextQuestion": "Да се замени тековниот референтен контекст?", + "noContextGenerated": "AI моторот не врати употреблива референтна информација." }, "aiAssistant": { "title": "AI помошник", @@ -1743,22 +1871,14 @@ "showReasoning": "Прикажи го расудувањето на моделот" }, "fixCommonErrors": { - "title": "Поправи чести грешки", - "step1": "Чекор 1/2 - Изберете кои грешки да се поправат", - "whatToFix": "Што да се поправи", - "example": "Пример", - "selectAll": "Избери сè", - "inverseSelection": "Инвертирај селекција", "back": "< &Назад", "next": "&Следно >", - "step2": "Чекор 2/2 - Потврди поправки", "fixes": "Поправки", "ruleDetailsDotDotDot": "Детали за правилото...", "showOnlyThisRule": "Прикажи само поправки од ова правило", "appliedRulesForLineX": "Применети правила за линијата {0}", "ruleX": "Правило: {0}", "log": "Лог", - "function": "Функција", "removedEmptyLine": "Отстрани празна линија", "removedEmptyLineAtTop": "Отстрани празна линија на почеток", "removedEmptyLineAtBottom": "Отстрани празна линија на крај", @@ -1779,13 +1899,13 @@ "removeLineBreaksPixelWidth": "Обединете титли кои можат да се сместат во една линија (по пиксел ширина)", "fixUppercaseIInsideLowercaseWords": "Поправи голем 'i' во мали зборови (OCR грешка)", "fixDoubleApostrophes": "Поправи два апострофа ('') во единичен наводник (\")", + "fixMisreadQuotes": "Поправи апострофи погрешно прочитани како двојни наводници (OCR, англиски)", "addPeriods": "Додај точка после линии каде следната започнува со голема буква", "startWithUppercaseLetterAfterParagraph": "Започни со голема буква после пасус", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Започни со голема буква после точка во пасус", "startWithUppercaseLetterAfterColon": "Започни со голема буква после двоеточие/точка-запирка", "fixLowercaseIToUppercaseI": "Поправи самостојно мало 'i' во 'I' (англиски)", "fixCommonOcrErrors": "Поправи честите OCR грешки (со листа за замена)", - "commonOcrErrorsFixed": "Чести OCR грешки поправени (употребена датотека OcrReplaceList): {0}", "removeSpaceBetweenNumber": "Отстрани празно место помеѓу броеви", "breakDialogsOnOneLine": "Раздели дијалози на една линија", "removeDialogFirstInNonDialogs": "Отстрани почетна цртичка во прва линија за не-дијалози", @@ -1802,18 +1922,17 @@ "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Foo
bar! -> Foo bar!", "fixDoubleApostrophesExample": "''Has double single quotes'' -> \"Has single double quote\"", + "fixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "addPeriodsExample": "Hello world -> Hello world.", "startWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: Foobar!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Hello there! how are you? -> Hello there! How are you?", "startWithUppercaseLetterAfterColonExample": "Speaker: hello world! -> Speaker: Hello world!", "removeHyphensSingleLineExample": "- Foobar. -> Foobar.", "fix3PlusLinesExample": "Foo
bar
baz! -> Foo bar baz!", - "xMissingQuotesAdded": "Недостасувачки наводници додадени: {0}", "fix3PlusLine": "Поправи титл со повеќе од две линии", "fix3PlusLines": "Поправи титли со повеќе од две линии", "analysing": "Анализирање...", "nothingToFix": "Нема што се поправува :)", - "fixesFoundX": "Пронајдени поправки: {0}", "xFixesApplied": "Применети поправки: {0}", "xFixesYSelected": "{0} поправки - {1} избрани", "nothingFixableBut": "Нешто не може автоматски да се поправи. Титлот содржи грешки - погледнете лог за детали", @@ -1822,7 +1941,6 @@ "fixFirstLetterToUppercaseAfterParagraph": "Поправи првата буква во голема после пасус", "mergeShortLine": "Спои кратка линија (една реченица)", "mergeShortLineAll": "Спои кратка линија (сите освен дијалози)", - "unbreakShortLinePixelWidth": "Обезбеди кратка линија (по пиксел ширина)", "breakLongLine": "Раздели долга линија", "fixLongDisplayTime": "Поправи долг период на приказ", "fixInvalidItalicTag": "Поправи невалидна италичка ознака", @@ -1845,7 +1963,6 @@ "fixUppercaseIInsideLowercaseWord": "Поправи големо 'i' во мали збор", "fixMissingPeriodAtEndOfLine": "Додај недостасувачка точка на крајот на линијата", "refreshFixes": "Освежи достапни поправки", - "applyFixes": "Примени избрани поправки & затвори", "autoBreak": "Авто &бр", "unbreak": "&Разбери", "fixDoubleDash": "Поправи '--' -> '...'", @@ -1864,8 +1981,6 @@ "fixSpaceBetweenNumbersExample": "1 100 -> 1100", "fixDialogsOneLineExample": "Hi John! - Hi Ida! -> Hi John!
- Hi Ida!", "removeDialogFirstInNonDialogsExample": "- How are you? -> How are you?", - "selectDefault": "Избери стандардно", - "setDefault": "Постави тековни поправки како стандард", "fixContinuationStyleX": "Поправи стил за продолжување: {0}", "fixUnnecessaryLeadingDots": "Отстрани непотребни почетни точки", "fixCommonErrorsProfiles": "Профили за поправка на честите грешки", @@ -1873,7 +1988,6 @@ "searchRulesDotDotDot": "Пребарај правила...", "goToApplyFixes": "Оди на примена на поправки", "backToFixList": "Назад кон листата со поправки", - "applyFixesAndClose": "Примени поправки & затвори", "fixCommonOcrErrorsStep2": "Поправи честите грешки, чекор 2 (примени поправки)", "fixCommonOcrErrorsStep2FixesFoundX": "Поправи честите грешки, чекор 2 - пронајдени поправки: {0}", "action": "Акција", @@ -1886,18 +2000,11 @@ "adjustDurations": { "title": "Прилагоди траења", "adjustVia": "Прилагоди преку", - "seconds": "Секунди", - "percent": "Процент", "recalculate": "Пресметај повторно", "addSeconds": "Додај секунди", - "setAsPercent": "Постави како процент од траењето", "note": "Забелешка: Временскиот приказ нема да се преклопи со стартот на следниот текст", "fixed": "Поправено", - "milliseconds": "Милисекунди", "extendOnly": "Само прошири", - "enforceDurationLimits": "Наложи минимум и максимум траење", - "checkShotChanges": "Не ги проширувај над промените на сцените", - "batchCheckShotChanges": "Почитувај промените на сцените (ако постојат)", "recalculateRequiresOcrNote": "Повторното пресметување не е достапно — еден или повеќе титлови немаат OCR текст. Прво извршете OCR." }, "applyDurationLimits": { @@ -1905,6 +2012,8 @@ "fixMinDurationMs": "Поправи минимум траење (ms)", "doNotGoPastShotChange": "Не преминувај преку промена на сцена", "fixMaxDurationMs": "Поправи максимум траење (ms)", + "fixMinDurationFrames": "Поправи минимално времетраење (кадри)", + "fixMaxDurationFrames": "Поправи максимално времетраење (кадри)", "minimumDurationMilliseconds": "Минимално времетраење (милисекунди):", "maximumDurationMilliseconds": "Максимално времетраење (милисекунди):", "maxDurationShouldBeHigherThanMinDuration": "Максимум траење треба да биде повисоко од минимум траење", @@ -1924,12 +2033,8 @@ }, "beautifyTimeCodes": { "title": "Улепши временски кодови", - "beautifySettings": "Поставки за улепшување", "snapToFrames": "Прилагоди на фрејмови", - "frameGap": "Празнина помеѓу фрејмови", "minDuration": "Минимум траење (ms)", - "shotChangeThreshold": "Праг за промена на сцена (ms)", - "shotChangeOffset": "Поместување на промена на сцена (фрејмови)", "original": "Оригинал", "beautified": "Улепшен", "subtitlesCount": "Титлови", @@ -1958,10 +2063,76 @@ "timeCodesExtractFailed": "Не може да се прочитаат временските кодови од видеото", "timeCodesHint": "Прилепи ги временските точки до вистинските времиња на кадрите во видеото, наместо да се претпоставува постојана брзина на кадри. Бара едно читање на целото видео; резултатот се кешира." }, + "improveTimeCodes": { + "title": "Подобри временски кодови (присилно порамнување)", + "aligner": "Порамнувач", + "alignerHint": "Моделот што ја слуша секоја линија во аудиото. Најдобрите избори за јазикот на титлот се наведени први.", + "maxShift": "Макс. поместување (секунди)", + "maxShiftHint": "Колку титлот може да биде несинхронизиран. Линија чиј почеток би се поместил подалеку останува како што е и се означува. Без оглед на вредноста, поединечна линија што сака да се помести повеќе од половина секунда подалеку од линиите околу неа не се поместува слепо: ги следи соседите кога сите тие се поместиле, а инаку се нуди нештиклирана за да ја провериш.", + "adjustStartTimes": "Прилагоди почетни времиња", + "adjustEndTimes": "Прилагоди крајни времиња", + "isolateSpeech": "Прво изолирај го говорот (бавно)", + "isolateSpeechHint": "Ги отстранува музиката и звучните ефекти пред порамнувањето, за порамнувачот да го слуша само дијалогот. Помага кај линии изговорени преку гласна музика или акција, но трае приближно колку и самото аудио со GPU - и многукратно подолго без него.", + "isolatingSpeech": "Изолирање говор... (ова трае некое време)", + "isolateSpeechFailed": "Говорот не можеше да се изолира - порамнето е според оригиналното аудио.", + "checkWithSpeechToText": "Провери со говор во текст", + "checkWithSpeechToTextHint": "Го транскрибира и аудиото и го проверува секое поместување според тоа каде зборовите навистина се слушнати. Големите поместувања што говорот ги потврдува се штиклираат за тебе, а поместувањата подалеку од местото каде што линијата се слуша остануваат нештиклирани за да ги провериш. Исто така покажува колку од секоја линија е слушнато - мал удел значи дека текстот се разликува од она што се зборува. Титл што е повеќе несинхронизиран од макс. поместување - константно отстапување, лизгање поради неусогласена брзина на кадри или скокови каде што биле исечени сцени - прво се синхронизира според слушнатите зборови. Користи Crisp ASR Parakeet, што трае неколку минути за долгометражен филм со GPU.", + "checkWithSpeechToTextNotAvailableX": "Проверката со говор во текст не е достапна за {0}", + "transcribingToCheck": "Транскрибирање за проверка на порамнувањето...", + "speechToTextFailed": "Говор во текст не успеа - временските кодови не се проверени според него.", + "speechToTextX": "Говор во текст: {0}", + "speechToTextConfirmedXDisputedY": "Говор: {0} потврдени, {1} оспорени", + "hardlyHeardX": "Говор во текст слушна само {0}% од зборовите на титлот. Дали титлот е на јазикот што се зборува? Порамнувачот не може да постави превод.", + "heard": "Слушнато", + "heardHint": "Колку од линијата слушнал говор во текст. Мал удел значи дека текстот се разликува од она што се зборува - таму порамнувачот најверојатно греши.", + "statusConfirmedBySpeech": "Потврдено од говорот", + "statusDisputedBySpeech": "Слушнато каде што беше", + "statusMovedWithSync": "Поместено со синхронизацијата", + "syncedFirstXY": "Прво синхронизирано: {0} s на почетокот, {1} s на крајот", + "showSpeechOnly": "Прикажи само говор", + "showSpeechOnlyHint": "Нацртај ја порамнетата форма на бран од аудиото без музика и звучни ефекти; оригиналната форма на бран останува каква што е, за споредба. Достапно откако говорот ќе се изолира - тука или со „Прикажи само говор“ во формата на бран во главниот прозорец.", + "align": "Порамни", + "original": "Оригинал", + "aligned": "Порамнето", + "intro": "Избери порамнувач и притисни „Порамни“ за да се слушне секоја линија во аудиото и да се затегнат нејзините временски кодови.", + "extractingAudio": "Извлекување аудио...", + "aligningBatchXOfY": "Порамнување... серија {0} од {1}", + "extractAudioFailed": "Аудиото не можеше да се извлече со ffmpeg.", + "modelWillBeDownloaded": "{0} ќе биде преземен", + "summaryXRetimedYKeptZSkipped": "Повторно тајмирани: {0} · Задржани: {1} · Без говор: {2}", + "meanShiftX": "Просечно поместување: {0} ms", + "toCheckX": "За проверка: {0}", + "largeMovesToCheckX": "{0} линија(и) би се поместиле многу сами по себе и се оставени нештиклирани - слушни ги (F5 ја пушта порамнетата линија, Shift+F5 оригиналната) и штиклирај ги оние што се точни.", + "linesToCheckX": "{0} линија(и) се оставени нештиклирани за проверка - слушни ги (F5 ја пушта порамнетата линија, Shift+F5 оригиналната) и штиклирај ги оние што се точни.", + "changeXOfY": "Промена {0} од {1}", + "previousChange": "Претходна промена", + "nextChange": "Следна промена", + "startShift": "Почеток", + "endShift": "Крај", + "statusRetimed": "Повторно тајмирано", + "statusMovedWithNeighbours": "Поместено со соседите", + "statusLargeMoveUnconfirmed": "Големо поместување - слушни, штиклирај за примена", + "statusUnchanged": "Веќе на место", + "statusNoSpeech": "Без говор", + "statusShiftTooLarge": "Задржано - премногу големо поместување", + "statusFailed": "Задржано - порамнувачот не успеа", + "statusAdjustedByHand": "Рачно прилагодено", + "alignedWaveformHint": "Повлечи линија за да ја поместиш или повлечи ги нејзините рабови за да го смениш почетокот или крајот.", + "playLine": "Пушти линија", + "undoAdjustment": "Врати прилагодување", + "playPause": "Пушти / пауза", + "playAligned": "Порамнето", + "playAlignedHint": "Пушти ја избраната линија со нејзините порамнети временски кодови", + "apply": "Примени", + "applyHint": "Отштиклирај линија за да ги задржиш нејзините оригинални временски кодови. Двоен клик на линија за да ја пуштиш. Линиите може и да се поместуваат или да им се менува големината во порамнетата форма на бран." + }, "bridgeGaps": { - "title": "Мост за празнини", "bridgeGapsSmallerThan": "Мост за празнини помали од (ms)", "minGap": "Минимум празнина (ms)", + "bridgeGapsSmallerThanFrames": "Пополни празнини помали од (кадри)", + "minGapFrames": "Минимална празнина (кадри)", + "calculateBridgeGapsSmallerThanDotDotDot": "Пресметај граница за пополнување празнини од брзина на кадри...", + "useXMsAsBridgeGapsSmallerThan": "Да се пополнат празнини помали од „{0}“ милисекунди?", "numberOfSmallGapsBridgedX": "Број на мостови за малите празнини: {0}", "percentFoPrevious": "Празнина за претходната (%)", "gapChange": "Промена на празнина" @@ -1973,8 +2144,6 @@ "sortBy": { "title": "Подреди титлите", "sortOrder": "Редослед на подредување", - "sortByNumber": "Број", - "sortByStartTime": "Време на старт", "sortByEndTime": "Време на крај" }, "batchConvert": { @@ -1997,6 +2166,7 @@ "addColor": "Додај боја", "deleteLinesWithSpecificActorsOrStyles": "Избриши линии со одредени актери или стилови (оддели со запирка)", "useSourceStylesIfPossible": "Користи стилови од изворот ако е можно", + "keepSourceEmbeddedFonts": "Задржи вградени фонтови од изворот (подножје)", "editStyles": "Уреди стилови", "editProperties": "Уреди својства", "editAttachments": "Уреди прилози", @@ -2017,7 +2187,6 @@ "assaChangeStyleFromStyle": "Смени стил од", "assaChangeStyleToStyle": "во", "assaChangeStyleImportStyle": "Увези стил...", - "assaChangeStyleImportedX": "Увезено: {0}", "assaChangeStyleTrimUnusedStyles": "Отсечи неупотребени стилови", "assaChangeStylePropertiesTitle": "Промени својства на стил", "assaChangeStylePropertiesInfo": "Ги менува избраните полиња во секој стил во датотеката, без да ги менува самите стилови.", @@ -2029,13 +2198,52 @@ "convertColorsToDialogReBreakLines": "Прекини ги линиите повторно", "snapTimeCodesToFramesInfo": "Го заокружува секое почетно и крајно време до најблискиот кадар. Брзината на кадри се чита од видео датотека со исто име како датотеката со титл, освен ако не е избрана фиксна брзина на кадри.", "addFolderDotDotDot": "Додај папка...", + "addFolderRecursiveDotDotDot": "Додај папка рекурзивно...", "selectFolderToConvert": "Избери папка со датотеки за конвертирање", "includeSubfolders": "Вклучи потпапки при додавање папка", + "videoFilesWhenAddingFolder": "Видео датотеки (mkv, mp4, ts...) при додавање папка", + "videoFilesAsk": "Прашај", + "videoFilesInclude": "Додај ги нивните патеки со титлови", + "videoFilesSkip": "Прескокни", + "folderContainsXVideoFiles": "Папката содржи {0} видео датотека(и) (mkv, mp4, ts...).\n\nДа се додадат и нивните вградени патеки со титлови или само датотеките со титлови?", + "addVideoFiles": "Додај видео датотеки", + "skipVideoFiles": "Само датотеки со титлови", + "doNotAskAgainVideoFiles": "Не прашувај повторно (смени во поставките за групно конвертирање)", + "settingsSectionOutput": "Излез", + "settingsSectionAddingFiles": "Додавање датотеки", + "settingsSectionImageBasedSubtitles": "Титлови базирани на слики (OCR)", + "settingsSectionOther": "Друго", "keepSourceFileTimestamp": "Задржи го датумот/времето на изворната датотека врз излезните датотеки", - "scanningFolderX": "Скенирање на {0}..." + "preventSleepWhileConverting": "Спречи компјутерот да заспие додека конвертира", + "scanningFolderX": "Скенирање на {0}...", + "transportStreamSettings": "Поставки за Transport Stream", + "transportStreamSettingsDotDotDot": "Поставки за Transport Stream...", + "transportStreamSettingsInfo": "Се применува на патеки со титлови извлечени од Transport Stream датотеки (.ts/.m2ts). Позицијата и големината на видеото влијаат само на DVB патеки со слики извезени во формат базиран на слики.", + "transportStreamOverrideXPosition": "Пребриши ја оригиналната X позиција", + "transportStreamOverrideYPosition": "Пребриши ја оригиналната Y позиција", + "transportStreamOverrideVideoSize": "Пребриши ја оригиналната големина на видеото", + "transportStreamBottomMargin": "Долна маргина", + "transportStreamFileNameEnding": "Завршеток на име на датотека", + "transportStreamFileNameEndingInfo": "Се додава пред екстензијата за секоја извлечена патека. Остави празно за да се користи вообичаениот постфикс за јазик.", + "transportStreamOnlyTeletext": "Само телетекст", + "transportStreamGetSizeFromVideo": "Земи големина од видеото...", + "twoLetterLanguageCodeUppercase": "Двобуквен код на јазик (големи букви)", + "threeLetterLanguageCodeUppercase": "Трибуквен код на јазик (големи букви)", + "formatContainsDotDotDot": "Форматот содржи...", + "extensionIsDotDotDot": "Екстензијата е...", + "statusIsError": "Статусот е грешка", + "forcedTracksOnly": "Само присилни патеки", + "xConvertedYFailedInZ": "{0:#,###,##0} конвертирани, {1:#,###,##0} неуспешни за {2}", + "xNotProcessed": "{0:#,###,##0} необработени", + "removeUnicodeControlCharactersTitle": "Отстрани Unicode контролни знаци", + "removeUnicodeControlCharactersInfo": "Ги отстранува невидливите Unicode контролни знаци за насока (LRM, RLM, LRE, RLE, PDF, LRO и RLO) од текстот и ги заменува непрекинливите празни места со обични празни места.", + "preset": "Предлошка", + "savePresetDotDotDot": "Зачувај предлошка...", + "deletePreset": "Избриши предлошка", + "presetName": "Име на предлошка", + "deletePresetX": "Да се избрише предлошката „{0}“?" }, "changeCasing": { - "title": "Смени регистар", "fixNames": "Поправи имиња", "namesX": "Имиња: {0:#,##0}", "hitsX": "Погодоци: {0:#,##0}", @@ -2046,9 +2254,7 @@ "allUppercase": "Сите големи букви", "allLowercase": "Сите мали букви" }, - "changeFormatting": { - "title": "Смени форматирање" - }, + "changeFormatting": {}, "convertActors": { "title": "Конвертирај актери", "convertActorFrom": "Конвертирај актера од", @@ -2077,18 +2283,12 @@ "outputFormatAssa": "Advanced Sub Station Alpha (.ass)", "style1": "Стил 1", "style2": "Стил 2", - "outlineWidth": "Ширина на контура", - "shadowWidth": "Ширина на сенка", - "alignTop": "Горе", - "alignBottom": "Долу", - "merge": "_Спој", - "pleaseLoadTwoSubtitles": "Ве молиме вчитајте два титла" + "merge": "_Спој" }, "splitSubtitle": { "title": "Раздели титл", "numberOfEqualParts": "Број на еднакви делови", "saveSplitParts": "_Зачувај разделени делови", - "subtitleSplitIntoXParts": "Титлот е разделен на {0} делови.", "xPartsSavedInFormatYToFolder": "{0} делови зачувани во формат {1} во папка:" }, "splitBreakLongLines": { @@ -2114,13 +2314,14 @@ "onlyContinuationLines": "Само линии за продолжување" }, "mergeLinesWithSameText": { - "title": "Спој линии со истиот текст", "maxMsBetweenLines": "Максимум милисекунди помеѓу линии", - "includeIncrementingLines": "Вклучи линии со растечки текст" + "maxFramesBetweenLines": "Макс. кадри помеѓу линиите", + "includeIncrementingLines": "Вклучи линии со растечки текст", + "includeRollUpCaptions": "Вклучи титлови што се тркалаат нагоре (лизгачки)" }, "mergeLinesWithSameTimeCodes": { - "title": "Спој линии со исти временски кодови", "maxMsDifference": "Максимална разлика (милисекунди)", + "maxFramesDifference": "Макс. разлика (кадри)", "makeDialog": "Направи дијалози" }, "netflixCheckAndFix": { @@ -2143,7 +2344,6 @@ "shotChanges": "Промени на сцените", "startNumberSpellOut": "Почетен број спелуван", "textforHiUseBrackets": "Текст за HI, користи загради", - "frameRate": "Брзина на кадарот", "twoFrameGrap": "Два кадарски празнина", "whiteSpace": "Бела празнина", "childrensProgram": "Детска програма", @@ -2181,7 +2381,6 @@ "italicsFixed": "Италици поправени", "italicsNotAllowed": "Италици не се дозволени", "bridgeGapsXToYFrames": "3-{0} кадри празнина => 2 кадри празнина", - "startNumberSpellOutComment": "Кога бројот започнува реченица, секогаш треба да се спелува", "maximumXCharactersPerSecond": "Максимум {0} карактери во секунда" }, "imageBasedEdit": { @@ -2191,10 +2390,8 @@ "resizeImagesDotDotDot": "Промени големина на слики...", "adjustBrightnessDotDotDot": "Прилагоди осветленост...", "adjustAlphaDotDotDot": "Прилагоди алфа...", - "centerHorizontally": "Центрирај хоризонтално", "cropImages": "Одсечи слики", "importTimeCodes": "Увези временски кодови...", - "setTextForSubtitle": "Постави текст за титула", "screenWidth": "Ширина на екран", "screenHeight": "Висина на екран", "alphaThresholdInfo": "Пиксели со алфа под прагот стануваат целосно транспарентни", @@ -2224,15 +2421,31 @@ "letterboxCustom": "Прилагодена висина на лента", "barHeightPx": "Висина на лента (px)", "titleSafePercent": "Безбедна зона за наслов (%)", + "moveCaptions": "Помести титлови", + "moveCaptionsDotDotDot": "Помести титлови...", + "moveCaptionsTo": "Помести титлови", + "moveCaptionsIntoBars": "Во letterbox лентите (надвор од сликата)", + "moveCaptionsIntoPicture": "Во сликата (надвор од лентите)", + "moveCaptionsOffset": "Отстапување од работ (px)", + "letterboxBarHeightXPxYOfZCaptionsWillMove": "Висина на лентата: {0} px - {1} од {2} титлови ќе се поместат", + "removeFadeInOut": "Отстрани затемнување внатре/надвор", + "removeFadeInOutXLinesRemoved": "{0} линии со затемнување споени во линиите на кои припаѓаат", + "removeFadeInOutNothingFound": "Не се пронајдени линии со затемнување внатре/надвор", "positionSummary": "{0}×{1} - {2} титлови - висина на лента: {3} px", "xInActivePicture": "{0} во сликата", "xInTopBar": "{0} во горната лента", "xInBottomBar": "{0} во долната лента", "noImageSubtitlesLoaded": "Нема вчитани титлови базирани на слики", - "imageBasedFormatNotSupported": "Форматот на титл базиран на слика не е пронајден/поддржан." + "imageBasedFormatNotSupported": "Форматот на титл базиран на слика не е пронајден/поддржан.", + "frameRateDeclaredInFile": "Брзина на кадри наведена во Blu-ray sup датотеката", + "frameRateDetectedFromTimeCodesX": "Брзина на кадри откриена од временските кодови на Blu-ray sup (датотеката наведува {0})", + "frameRateFromVideo": "Брзина на кадри на видеото", + "frameRateCurrent": "Тековна брзина на кадри", + "frameRateSetManually": "Рачно поставена брзина на кадри", + "frameRateUsageInfo": "Извозите во Blu-ray sup, BDN XML, DOST и FCP се запишуваат со оваа брзина на кадри. Не менува никакви времиња - за тоа користи „Смени брзина на кадри“.", + "useVideoFrameRateXInsteadOfY": "Брзината на кадри на видеото е {0}, но титлот е поставен на {1}.\n\nДа се користи брзината на кадри на видеото ({0})?" }, "removeTextForHearingImpaired": { - "title": "Отстрани текст за лица со оштетен слух", "interjections": "Интерјекци", "skipIfStartWith": "Прескокни ако започнува со", "removeTextBetween": "Отстрани текст меѓу", @@ -2251,7 +2464,6 @@ "removeInterjections": "Отстрани интерјекци", "linesFoundX": "Пронајдени линии: {0}" }, - "pickAlignmentTitle": "Избери порамнување", "removeUnicodeCharacters": { "title": "Отстрани/замени Unicode знаци", "charactersFoundX": "Пронајдени Unicode знаци: {0}", @@ -2261,13 +2473,13 @@ "pickFontNameInstalledFonts": "Инсталирани фонтови", "pickFontNameCollectedFonts": "Собрани фонтови", "colorPickerTitle": "Избери боја", + "colorPickerBrightness": "Осветленост", "filterLayersTitle": "Филтрирај слоеви за приказ", "filterLayersHideFromWaveform": "Скриј од форма на бран/спектрограма", "filterLayersHideFromSubtitleGrid": "Скриј од мрежата за титули", "filterLayersHideFromVideoPreview": "Скриј од преглед на видеото", "pickSubtitleFormat": "Избери формат за титула", "pickSubtitleFormatImageBasedNoPreview": "Формат на титл базиран на слики.\nБитмапите се генерираат при конвертирање - нема преглед на текст.", - "pickLayerTitle": "Постави слој", "recentColors": "Последни бои", "beautifyTimeCodesProfile": { "title": "Уреди профил за улепшување на временски кодови", @@ -2275,7 +2487,11 @@ "presetDefault": "Стандардно", "presetNetflix": "Netflix", "presetSdi": "SDI", - "general": "Општо", + "saveAsProfile": "Зачувај како профил...", + "deleteProfile": "Избриши профил", + "profileName": "Име на профил", + "overwriteProfileX": "Профил со име „{0}“ веќе постои. Да се презапише?", + "deleteProfileX": "Да се избрише профилот „{0}“?", "gap": "Празнина", "gapSuffix": "кадри (исто така ги ажурира полињата за празнина различни од нула подолу)", "milliseconds": "ms", @@ -2312,9 +2528,7 @@ "columnMerge": "Спој", "columnFirst": "Прва линија", "columnSecond": "Втора линија", - "columnMerged": "Споено", - "selectAll": "Избери сѐ", - "inverseSelection": "Инвертирај избор" + "columnMerged": "Споено" }, "fixCommonErrorsSettingsTitle": "Подесувања за поправка на чести грешки" }, @@ -2359,59 +2573,51 @@ "correctWordsX": "Точни зборови: {0}", "namesX": "Имиња: {0}", "addedToDictionaryX": "Додадени во речникот: {0}", - "doNotShowThisAgain": "Не ја прикажувај повторно оваа порака" + "doNotShowThisAgain": "Не ја прикажувај повторно оваа порака", + "editUseAlwaysList": "Уреди листа „Користи секогаш“...", + "useAlwaysListTitle": "Проверка на правопис - листа „Користи секогаш“", + "useAlwaysListHeader": "Листа „Користи секогаш“", + "useAlwaysListDescription": "Зборови што проверката на правопис ги заменува автоматски, зачувани со „Смени сѐ“ и „Користи секогаш“. Парот се користи само кога зборот е погрешно напишан.", + "useAlwaysWord": "Погрешно напишан збор", + "xPairs": "{0:#,##0} парови", + "xUnusedPairs": "{0:#,##0} никогаш користени", + "useAlwaysUnusedHint": "Никогаш користен - овој збор е правилно напишан (или е име или кориснички збор), па проверката на правопис никогаш не го означува", + "removeUnused": "Отстрани некористени", + "useAlwaysEmpty": "Сè уште нема парови „Користи секогаш“ за овој јазик", + "useAlwaysEmptyHint": "Паровите се додаваат кога ќе кликнеш „Смени сѐ“ или „Користи секогаш“ во проверката на правопис.", + "useAlwaysNoMatch": "Ниту еден пар не одговара на пребарувањето", + "useAlwaysSameWord": "Замената мора да се разликува од зборот.", + "useAlwaysRememberOff": "„Запомни ја листата 'Користи секогаш'“ е исклучено во Подесувања, па проверката на правопис не ја користи ниту ја зачувува оваа листа." }, "video": { "burnIn": { "title": "Создади видео со вграден титул", - "infoAssaOff": "Забелешка: Поддржано е напредно стилизирање за Advanced SubStation Alpha.", - "infoAssaOn": "Забелешка: Ќе се користи напредно стилизирање за Advanced SubStation Alpha :)", - "xGeneratedWithBurnedInSubsInX": "\"{0}\" генериран со вграден титул во {1}.", - "timeRemainingMinutes": "Преостанато време: {0} минути", - "timeRemainingOneMinute": "Преостанато време: Еден минут", - "timeRemainingSeconds": "Преостанато време: {0} секунди", - "timeRemainingAFewSeconds": "Преостанато време: Неколку секунди", - "timeRemainingMinutesAndSeconds": "Преостанато време: {0} минути и {1} секунди", - "timeRemainingOneMinuteAndSeconds": "Преостанато време: Еден минут и {0} секунди", - "targetFileName": "Име на целен фајл: {0}", "targetFileSize": "Големина на целен фајл (потребно е 2-степенно енкодирање)", "fileSizeMb": "Големина на фајлот во MB", "matchSourceVideoSize": "Совпадни со големината на изворното видео", - "passX": "Пас {0}", - "encoding": "Кодирање", "bitRate": "Битска брзина", "totalBitRateX": "Вкупна битска брзина: {0}", "sampleRate": "Фреквенција на примерок", "audio": "Аудио", - "stereo": "Стерео", "preset": "Профил", + "tune": "Tune", "pixelFormat": "Формат на пиксели", "crf": "CRF", - "tuneFor": "Прилагоди за", - "alignRight": "Подреди надесно", - "getStartPosition": "Земи почетна позиција", - "getEndPosition": "Земи крајна позиција", "useSource": "Користи извор", - "useSourceFolder": "Користи изворна папка", - "useSourceResolution": "Користи резолуција на изворот", - "outputSettings": "Излезен фајл/папка...", "fontSizeFactor": "Фактор на големина на фонт", "boxType": "Тип на кутия", - "fixRightToLeft": "Поправи десно-налево", - "cut": "Отсечи", "fromTime": "Од време", "toTime": "До време", "audioEncoding": "Кодирање на аудио", "outputProperties": "Својства на излезот...", "videoFileSize": "Големина на видео фајлот", "oneBox": "Една кутия", - "boxPerLine": "Кутия по линија", - "logoInfo": "Избери PNG слика и повлечи ја за да ја поставиш на видеото." + "logoInfo": "Избери PNG слика и повлечи ја за да ја поставиш на видеото.", + "noSubtitlesGenerateAnyway": "Нема линии со титлови за вградување.\n\nДа се генерира видеото без титлови?", + "noSubtitlesInXItemsGenerateAnyway": "{0} пакетни ставки немаат линии со титлови за вградување.\n\nДа се генерираат тие видеа без титлови?" }, "videoTransparent": { - "title": "Создади транспарентно видео со титули", - "infoAssaOff": "Забелешка: Поддржано е напредно стилизирање за Advanced SubStation Alpha.", - "infoAssaOn": "Забелешка: Ќе се користи напредно стилизирање за Advanced SubStation Alpha :)" + "title": "Создади транспарентно видео со титули" }, "audioToText": { "title": "Говор во текст", @@ -2419,6 +2625,21 @@ "translateToEnglish": "Преведи на англиски", "transcribing": "Транскрибирање...", "transcribingXOfY": "Транскрибирање {0} од {1}...", + "linesTranscribedXOfYFailedZ": "Транскрибирани се {0} од {1} линии - {2} не успеаја или немаа говор.\n\nНеуспешните линии го задржуваат тековниот текст. Да се применат транскрибираните линии или повторно да се обидат неуспешните (прво можеш да го смениш моторот или поставките)?", + "linesTranscribedXOfYCancelled": "Транскрипцијата е откажана по {0} од {1} линии.\n\nДа се применат транскрибираните линии? Другите линии го задржуваат тековниот текст.", + "noLinesTranscribed": "Ниту една од {0} линии не можеше да се транскрибира.\nПровери го дневникот за алатки за детали.", + "applyTranscribedLines": "Примени транскрибирани", + "retryFailedLines": "Повтори неуспешни", + "isolateSpeech": "Изолирај говор (бавно)", + "isolateSpeechHint": "Ги отстранува музиката и звучните ефекти пред транскрибирањето. Дава помалку пропуштени линии и подобар тајминг кај аудио со гласна музика, но трае приближно колку и самото аудио со GPU - и многукратно подолго без него.", + "isolatingSpeech": "Изолирање говор...", + "isolateSpeechFailed": "Говорот не можеше да се изолира - се транскрибира оригиналното аудио.", + "detectSpeakers": "Откриј говорници", + "detectSpeakersHint": "Ја започнува секоја линија со говорникот, како „(speaker 0)“, користејќи ја Sortformer диаризацијата на NVIDIA (до 8 говорници). Работи најдобро со позадини што ги делат линиите кога се менува говорникот, како Parakeet и Cohere.", + "detectSpeakersNeedsNewerCrispAsr": "„Откриј говорници“ бара Crisp ASR v{0} или понов, но инсталиран е v{1}.\n\nАжурирај го Crisp ASR (копчето со запченик до моторот) или исклучи „Откриј говорници“.", + "xNeedsNewerCrispAsr": "{0} бара Crisp ASR v{1} или понов, но инсталиран е v{2}.\n\nДа се преземе и инсталира ажурирањето сега?", + "vad": "VAD", + "vadHint": "Откривање гласовна активност: се транскрибира само говорот, сечен таму каде што говорникот паузира.\nАвтоматски: Silero, и само за моторите на кои им треба (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: секогаш вклучено, за секој Crisp ASR мотор. FireRedVAD е најпрецизен, Whisper-VAD дава најмалку и најчисти резови, но е најбавен.\nIndex-Echo секогаш користи Silero. --vad, --vad-model или --chunk-seconds во напредните поставки имаат предност.", "inputLanguage": "Влезен јазик", "advancedWhisperSettings": "Напредни поставки за Whisper", "downloadingSpeechToTextEngine": "Преземам енџин за говор-во-текст", @@ -2433,7 +2654,6 @@ "addCustomModelDotDotDot": "Додај сопствен модел...", "customModelHelp": "Можете да користите сопствен модел: изберете ја датотеката на моделот (whisper.cpp ggml '.bin') или папката на моделот (faster-whisper папка со 'model.bin' внатре). Се копира во папката со модели и се додава во листата погоре.", "viewToolsLogFile": "Погледни лог фајл на алатките", - "reDownloadX": "Повторно преземи {0}", "updateXTitle": "Ажурирање {0}?", "updateXMessage": "Нова верзија на {0} е достапна.{1}{1}Преземи и инсталирај го ажурирањето сега?", "downloadingSpeechToTextModel": "Преземам модел за говор-во-текст", @@ -2445,15 +2665,6 @@ "fixCasing": "Поправи големина на букви", "addPeriods": "Додај точки", "changeUnderlineToColor": "Смени подвлекување со боја", - "cueBuilding": "Градење титлови (MLX Whisper)", - "cueRebuild": "Повторно изгради титлови од временските ознаки на зборовите", - "cueMaxChars": "Максимум знаци по титл", - "cueMaxSeconds": "Максимум секунди по титл", - "cueMaxCps": "Максимум знаци во секунда", - "vocabularyPrompt": "Промпт со вокабулар (имиња, места, термини)", - "beamSize": "Големина на beam", - "beamSizeNote": "0 декодира најбрзо. 5 дава најдобра точност (како Faster Whisper) за околу 20-30% повеќе време. Вредности над 5 ретко помагаат.", - "downloadX": "Преземи {0}", "removeNonSpeechLines": "Отстрани линии без говор", "removeNonSpeechLinesHint": "Отфрли линии што опишуваат само звук, како „[Музика]“ или „(бранови удираат)“", "removeRepeatedLines": "Отстрани повторени линии", @@ -2512,7 +2723,7 @@ "cloneVoicePerLinePreparing": "Земање на гласот на секоја линија од видеото...", "cloneVoicePerLineNeedsVideo": "За клонирање на гласот на секоја линија потребно е видеото на кое припаѓа титлот. Отвори го видеото и пробај повторно.", "cloneVoicePerLineNoClips": "Не може да се земе аудио од видеото, па нема од што да се клонира. Провери дали видеото има аудио трака.", - "cloneVoicePerLineNeedsOriginalSubtitleX": "{0} може да клонира линија само кога знае што се кажува во видеото на таа линија, што доаѓа од титлот на оригиналниот јазик. Нема вчитан оригинален титл, па секоја линија би била изговорена од првиот увезен глас наместо од гласот во видеото.\n\nОтвори го оригиналниот титл (Датотека > Отвори оригинално...) покрај преводот, па генерирај повторно.", + "cloneVoicePerLineTranscribeClipsXYZ": "{0} може да клонира линија само кога знае што се зборува во видеото на таа линија. Тоа не е познато за {1} од {2} линии - обично доаѓа од титлот на оригиналниот јазик (Датотека > Отвори оригинал...).\n\nДа се транскрибираат тие линии од видеото со говор во текст сега?\n\nДа: избери го моторот и јазикот што се зборува во видеото, и референтните клипови се транскрибираат пред да се генерира говорот.\nНе: генерирај сепак - тие линии се изговараат со обичен глас наместо со гласот од видеото.", "voiceCloneConsentTitle": "Клонирање глас - пред да почнеш", "voiceCloneConsentHeader": "Ќе клонираш глас", "voiceCloneConsentIntro": "Клонирањето копира глас на вистинска личност. Тоа носи со себе правила во повеќето места, а во ЕУ и правни обврски што паѓаат на тебе, а не на Subtitle Edit. Прочитај го ова еднаш.", @@ -2528,6 +2739,12 @@ "voiceCloneConsentDeclined": "Клонирањето глас не е достапно додека не се прифатат овие услови.", "advancedTtsAudioProcessing": "Обработка на аудио", "advancedTtsOutput": "Излез", + "advancedTtsVoiceCloning": "Клонирање глас", + "cleanCloneReferences": "Исчисти референци за клонирање глас (Sidon)", + "cleanCloneReferencesDescription": "Ги отстранува музиката, шумот и одекот од аудиото од кое се клонира гласот: клипови земени од видеото и снимки увезени во управувачот со гласови. Го користи моделот за реставрација на говор Sidon на audio.cpp (преземање од 940 MB). Клонираниот глас повеќе не ја копира позадината, но многу тивок или преклопен говор може да звучи придушено.", + "cleaningCloneReferencesDotDotDot": "Чистење референци за клонирање глас...", + "downloadSidonTitle": "Да се преземе Sidon?", + "downloadSidonQuestionX": "За чистење на референците за клонирање глас е потребен моделот за реставрација на говор Sidon ({0}).\n\nДа се преземе сега? Без него референците се користат какви што се.", "rubberbandInstalled": "(инсталиран)", "rubberbandNotFound": "(не е пронајден во FFmpeg)", "generationFolder": "Папка за генерирање", @@ -2536,14 +2753,11 @@ "deleteTempFilesDescription": "Ја брише папката за генерирање кога се затвора прозорецот „Текст во говор“. Зачуваните аудио и видео датотеки се задржуваат.", "piperSettings": "Поставки за Piper", "title": "Текст во говор", - "textToSpeechEngine": "Енџин за текст-во-говор", "reviewAudioSegments": "ТТС - Преглед на аудио сегменти", "reviewAudioSegmentsHistory": "ТТС - Преглед на историја на аудио", "stability": "Стабилност", "similarity": "Сличност", "speakerBoost": "Зголемување на гласот", - "styleExaggeration": "Претерано стилизирање", - "regenerateAudioSelectedLine": "Регенерирај аудио за избраната линија", "generateSpeechFromText": "Создади говор од текст", "testVoice": "Тестирај глас", "addAudioToVideoFile": "Додај аудио во видео фајл", @@ -2562,20 +2776,96 @@ "videoEncodingSettings": "ТТС - Поставки за кодирање на видео", "elevenLabsSettings": "ТТС - Поставки за ElevenLabs", "elevenLabsSettingsResetHint": "Ресетирај поставки за ElevenLabs на стандардни вредности", + "provider": "Провајдер", + "openAiCompatibleSettings": "TTS - Поставки за OpenAI-компатибилен сервер", + "customServerUrl": "URL на прилагоден сервер", + "customServerUrlHint": "Целосна крајна точка за говор на OpenAI-компатибилен сервер, се користи кога провајдерот е „Custom“, на пр. http://localhost:8880/v1/audio/speech", + "customModels": "Прилагодени модели", + "customModelsHint": "Имиња на модели одделени со запирка, понудени кога провајдерот е „Custom“", + "customVoices": "Прилагодени гласови", + "customVoicesHint": "Имиња на гласови одделени со запирка, ги користи провајдерот „Custom“ и OpenRouter моделите што не објавуваат листа со гласови", + "instructions": "Инструкции", + "instructionsHint": "Опционален стил на зборување, на пр. „Зборувај со смирен, топол глас“. Се испраќа само до моделите што го поддржуваат (не tts-1/tts-1-hd)", + "openAiSpeedHint": "Брзина на говор од 0.25 до 4.0 (1.0 е нормално). Не ја поддржува секој модел", + "outputFormat": "Излезен формат", + "outputFormatHint": "Аудио формат побаран од серверот. „Автоматски“ бара MP3 и се префрла на PCM за моделите што враќаат само PCM (на пр. Gemini TTS)", "regenerateAudio": "Регенерирај аудио", "autoContinuePlaying": "Автоматски продолжи со репродукција", "addingAudioToVideoFileDotDotDot": "Додавање аудио во видео фајл...", "preparingMergeDotDotDot": "Подготовка за спојување...", "importVoiceDotDotDot": "Увези глас...", + "renameVoiceDotDotDot": "Преименувај глас...", + "renameVoiceTitle": "Преименувај глас", + "voiceXCouldNotBeRenamedX": "Гласот „{0}“ не можеше да се преименува: {1}", + "deleteVoiceDotDotDot": "Избриши глас...", + "deleteVoiceTitle": "Избриши глас", + "deleteVoiceXQuestion": "Да се избрише гласот „{0}“?\n\nРеферентната снимка и нејзините датотеки се отстрануваат од дискот.", + "voiceXCouldNotBeDeletedX": "Гласот „{0}“ не можеше да се избрише: {1}", "voiceImportSuccessTitle": "Гласот е увезен", "voiceXImported": "Гласот '{0}' е успешно увезен", "voiceCloneTranscriptTitle": "Внеси транскрипт на аудиото (потребно за клонирање на глас)", + "voiceManagerTitle": "TTS - Управувач со гласови", + "voiceManagerDotDotDot": "Управувач со гласови...", + "voiceManagerMenuItem": "TTS управувач со гласови...", + "speakFromCurrentLineTitle": "Зборувај од тековната линија", + "speakFromCurrentLineDotDotDot": "Зборувај од тековната линија...", + "speakFromCurrentLineHint": "Ги чита линиите на глас една по друга, почнувајќи од тековната линија. Притисни Escape или кликни на друга линија за да запре.", + "stopSpeaking": "Престани да зборуваш", + "speakingLineX": "Се зборува линија {0}... (Escape за запирање)", + "playWithSpeechTitle": "Пушти со говор", + "playWithSpeechDotDotDot": "Пушти со говор...", + "playWithSpeechHint": "Го пушта видеото и ја изговара секоја линија кога видеото ќе стигне до неа. Паузирај и барај како и обично; притисни Escape за запирање.", + "lowerVideoVolumeWhileSpeaking": "Намали ја јачината на видеото додека се зборува", + "pauseVideoWhenSpeechRunsLate": "Паузирај го видеото кога говорот ќе навлезе во следната линија", + "waitingForSpeechLineX": "Генерирање говор за линија {0}... (Escape за запирање)", + "voiceKindClone": "Клониран глас", + "voiceKindPreset": "Вграден", + "voiceKindModel": "Гласовен модел", + "voiceKindOnline": "Онлајн", + "transcript": "Транскрипт", + "transcriptRequiredHint": "Задолжително - моторот го чита овој транскрипт на снимката (ref-text) при клонирање", + "transcriptOptionalHint": "Опционално - точен транскрипт на снимката го подобрува клонирањето", + "saveTranscript": "Зачувај транскрипт", + "searchVoices": "Барај гласови", + "loadingVoicesDotDotDot": "Вчитување гласови...", + "noVoicesForEngine": "Нема гласови - увези снимка или преземи пакет со гласови", + "noVoicesMatchFilter": "Ниту еден глас не одговара на пребарувањето", + "copyVoiceTo": "Копирај глас во", + "copyVoiceToDotDotDot": "Копирај глас во мотор...", + "copyingVoiceXToYDotDotDot": "Копирање на гласот „{0}“ во {1}...", + "voiceXCopiedToY": "Гласот „{0}“ е копиран во {1}", + "voiceXCouldNotBeCopiedToY": "Гласот „{0}“ не можеше да се копира во {1} - види го дневникот за детали", + "voiceXAlreadyExistsInYContinue": "Глас со име „{0}“ веќе постои во {1}.\n\nДа се копира сепак?", + "openVoicesFolder": "Отвори папка со гласови", + "downloadVoicePacksDotDotDot": "Преземи пакети со гласови...", + "downloadVoicePacksTitle": "TTS - Преземи пакети со гласови", + "voicePackIntro": "Пакетите со гласови се збирки кратки, чисти снимки со транскрипти, подготвени за клонирање. Секој пакет се увезува во избраниот мотор (гласовите што веќе постојат се прескокнуваат) и содржи ATTRIBUTION.txt со неговата лиценца и извори.", + "voicePackDetailsXVoicesYSizeZLicense": "{0} гласови · {1} · {2}", + "installToEngine": "Инсталирај во мотор", + "downloadAndInstall": "Преземи и инсталирај", + "selectAtLeastOneVoicePack": "Избери барем еден пакет со гласови", + "downloadingXDotDotDot": "Преземање {0}...", + "installingXDotDotDot": "Инсталирање {0}...", + "xVoicesInstalledYSkipped": "Инсталирани {0} гласови ({1} веќе постоеја)", "useSpeechToTextDotDotDot": "Користи говор-во-текст...", "advancedTtsSettings": "Напредни поставки за TTS", "proAudioPostProcessing": "Професионално постпроцесирање на аудио", "proAudioPostProcessingDescription": "Примена на EQ топлина, шумска порта, компресија, нормализација на јачина (-16 LUFS) и fade in/out на секој сегмент.", + "generatingSpeechSegmentXOfY": "Генерирање говор: сегмент {0} од {1}", + "adjustingSpeedSegmentXOfY": "Прилагодување брзина: сегмент {0} од {1}", + "mergingAudioSegmentXOfY": "Спојување аудио: сегмент {0} од {1}", + "postProcessingSegmentXOfY": "Дополнителна обработка: сегмент {0} од {1}", "audioDucking": "Намалување на аудио", "audioDuckingDescription": "Намалува оригиналната звучна гласност на видеото и ја меша со TTS аудиото, така оригиналната звучна трака е сé уште слабовидна.", + "removeOriginalSpeech": "Отстрани оригинален говор (бавно)", + "removeOriginalSpeechDescription": "Ги задржува музиката и звучните ефекти од оригиналното видео, но го отстранува неговиот говор и го меша новиот говор преку тоа. Трае приближно колку и самото видео со GPU и многукратно подолго без него. Со вклучено намалување на аудио, неговата јачина се применува на музиката и ефектите. Се применува само кога говорот се додава во видео датотеката.", + "removingOriginalSpeech": "Отстранување на оригиналниот говор...", + "removeOriginalSpeechFailed": "Оригиналниот говор не можеше да се отстрани - говорот е додаден во видеото без тоа.", + "speechRemovalModel": "Модел", + "speechRemovalModelDescription": "Најдобар квалитет задржува најмногу од музиката и звучните ефекти. Брзо е околу три пати побрзо, со малку повеќе изгубена музика.", + "speechRemovalBestQuality": "Најдобар квалитет (Mel-Band RoFormer)", + "speechRemovalFast": "Брзо (HTDemucs)", + "videoTruncatedWarning": "Сликата во новата видео датотека престанува по {0}, но оригиналното видео трае {1} - сликата ќе замрзне додека звукот продолжува.\n\nДатотеката е задржана. Види error-log.txt во папката со податоци на Subtitle Edit за излезот од ffmpeg.", "originalVolumePercent": "Оригинална гласност %", "vadSilenceCompression": "VAD компресија на тишина", "vadSilenceCompressionDescription": "Скратува паузите меѓу зборовите пред менување на темпото. Користи Voice Activity Detection за компресирање само на тишината додека говора остава непроменет. Ова е првиот препорачуван чекор — ја намалува длителноста без губиток на квалитет.", @@ -2644,7 +2934,6 @@ "subtitleMergedLinesAppliedPlural": "Применети се {0} спојувања на линии од текст во говор" }, "shotChanges": { - "titleGenerateOrImport": "Создади/увези промени на кадри", "generateShotChanges": "Создади промени на кадри", "importShotChanges": "Увези промени на кадри", "generateShotChangesWithFfmpeg": "Создади промени на кадри со ffmpeg", @@ -2654,7 +2943,9 @@ "timeCodeFormatColon": "Формат на временски код:", "shotChangesList": "Листа со промени на кадри", "shotChangesClearQuestion": "Дали сте сигурни дека сакате да ги избришете сите промени на кадри?", - "deleteSelectedShotChangeQuestion": "Дали сте сигурни дека сакате да ја избришете избраната промена на кадар?" + "deleteSelectedShotChangeQuestion": "Дали сте сигурни дека сакате да ја избришете избраната промена на кадар?", + "shotChanges": "Промени на сцени", + "exportShotChanges": "Извези промени на сцени" }, "chapters": { "title": "Поглавја", @@ -2684,7 +2975,6 @@ "scaleTimesDescription": "Скалирај го времето на секое поглавје од една брзина на кадри во друга.", "fromFrameRate": "Од", "toFrameRate": "Во", - "apply": "Примени", "writeToVideo": "Запиши во видео...", "writeToVideoTitle": "Запиши поглавја во видео", "writeToVideoDescription": "Поглавјата се запишуваат во копија од видео датотеката. Ништо не се рекодира, па ова е брзо и без загуба на квалитет.", @@ -2694,7 +2984,6 @@ "writtenToX": "Поглавјата се запишани во {0}", "unableToWriteChapters": "Не може да се запишат поглавјата во видео датотеката.", "chaptersSavedToX": "Поглавјата се зачувани во {0}", - "noVideoLoaded": "Нема вчитано видео", "emptyListCallToAction": "Сè уште нема поглавја - додај едно на позицијата во видеото, или увези ги од видео или датотека." }, "videoOcr": { @@ -2705,10 +2994,6 @@ "bottomHalf": "Долна половина", "fullFrame": "Цел кадар", "engine": "OCR мотор", - "language": "Јазик", - "url": "URL", - "model": "Модел", - "apiKey": "API клуч", "scan": "Скенирај", "framesPerSecond": "Кадри во секунда", "textBrightnessMinimum": "Минимална светлина на текстот (0=исклучено)", @@ -2723,10 +3008,10 @@ "runningOcrXY": "Извршување OCR... {0}/{1}", "noLinesFoundTitle": "Не се пронајдени титлови", "noLinesFoundMessage": "Не е пронајден текст во областа за скенирање - обидете се да ја прилагодите областа за скенирање, моторот или минималната светлина.", + "ocrStoppedEarlyMessage": "OCR моторот запре пред да се прочитаат сите кадри, па досега пронајдените линии се задржани, а останатите недостасуваат.{0}{0}{1}", "linesFoundX": "Пронајдени се {0} линии", "refiningTimingXY": "Дотерување на времињата... {0}/{1}", "fixOcrErrors": "Поправи OCR грешки", - "dictionary": "Речник", "editLineX": "Уреди линија {0}", "downloadDictionaryHint": "Преземи речник за проверка на правопис...", "framesPerSecondHint": "Колку кадри во секунда се скенираат. 5 покрива нормални титлови; повисока вредност фаќа многу кратки линии и го подобрува групирањето, но чини повеќе OCR време.", @@ -2743,7 +3028,58 @@ "testOcr": "Тестирај тековен кадар", "testOcrRunning": "Тестирање OCR на тековниот кадар...", "testOcrResultX": "Резултат од тестот: {0}", - "testOcrNoTextFound": "Тест: не е пронајден текст во областа за скенирање" + "testOcrNoTextFound": "Тест: не е пронајден текст во областа за скенирање", + "engineSettings": "Поставки за OCR мотор", + "engineBuiltIn": "Вграден во оперативниот систем", + "engineExternalServer": "Надворешен сервер (инсталиран и управуван надвор од Subtitle Edit)", + "engineCloudApi": "Cloud API (бара API клуч)", + "engineNothingToInstall": "Нема ништо за инсталирање", + "engineModelsMissing": "Моторот е инсталиран, недостасуваат модели", + "website": "Веб-страница" + }, + "backgroundMusic": { + "title": "Генерирај музика во позадина", + "generateBackgroundMusicDotDotDot": "Генерирај музика во позадина...", + "preset": "Предлошка", + "prompt": "Промпт", + "tempoBpm": "Темпо (BPM)", + "generateSeconds": "Генерирај (секунди)", + "seed": "Seed", + "randomSeed": "Случајно", + "outputLength": "Должина на излезот", + "outputLengthVideoX": "{0} (должина на видеото - музиката се повторува непрекинато)", + "musicVolumePercent": "Јачина на музиката (%)", + "removeExistingAudioTracks": "Отстрани постоечки аудио патеки", + "originalAudioVolumePercent": "Јачина на оригиналното аудио (%)", + "saveAudioDotDotDot": "Зачувај аудио...", + "addToVideoDotDotDot": "Додај во видео...", + "engineInfo": "ACE-Step 1.5 Turbo преку audio.cpp (MIT лиценца) - работи локално", + "presetCooking": "Готвење / печење", + "presetTech": "Технологија / преглед на уреди", + "presetForest": "Шума / природа", + "presetRelaxingPiano": "Релаксирачко пијано", + "presetLofiVlog": "Lo-fi влог", + "presetCorporate": "Корпоративно / објаснувачко", + "loadingModel": "Вчитување модел...", + "composing": "Компонирање...", + "generatingAudio": "Генерирање аудио...", + "decodingAudio": "Декодирање аудио...", + "creatingLoop": "Креирање непрекинат циклус...", + "resultLoopXYZ": "Циклус: {0} на {1} BPM, совпаѓање на спојот {2}%", + "resultNoLoopX": "Музиката е подготвена: {0}", + "addingMusicToVideo": "Додавање музика во видеото...", + "downloadModelTitle": "Да се преземе музичкиот модел?", + "downloadModelQuestionX": "За генерирање музика е потребен моделот ACE-Step 1.5 ({0}).\n\nДа се преземе моделот?", + "downloadingModel": "Преземање на моделот ACE-Step 1.5...", + "saveAudioTitle": "Зачувај музика во позадина", + "audioFileSavedX": "Аудио датотеката е зачувана: {0}", + "unableToGenerateMusic": "Не може да се генерира музика", + "unableToAddMusicToVideo": "Не може да се додаде музика во видеото", + "outputLengthTextToSpeech": "Го следи генерираниот говор - музиката се повторува непрекинато и се стишува додека некој зборува", + "addBackgroundMusic": "Додај музика во позадина", + "addBackgroundMusicHint": "Генерирај музика локално со ACE-Step 1.5 и измешај ја под говорот - се стишува додека некој зборува", + "generatingBackgroundMusicDotDotDot": "Генерирање музика во позадина...", + "mixingBackgroundMusicDotDotDot": "Мешање музика во позадина..." }, "goToVideoPosition": "Оди до позиција во видеото", "goToVideoPositionDotDotDot": "Оди на позиција во видеото...", @@ -2754,29 +3090,87 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "Вторична титула на видео плеерот, отвори...", "openSecondarySubtitleOnVideoPlayer": "Вторична титула (на видео плеерот)", "removeSecondarySubtitleOnVideoPlayer": "Вторична титула на видео плеерот, отстрани", + "editSecondarySubtitleSettings": "Уреди поставки за вториот титл", + "editSecondarySubtitleSettingsDotDotDot": "Уреди поставки за вториот титл...", + "secondarySubtitleRememberSettings": "Запомни ги овие поставки", + "secondarySubtitleDoNotShowAgain": "Не го прикажувај овој дијалог повторно", + "secondarySubtitleJustifyLines": "Порамни линии обострано", "openRecentVideo": "Отвори скорешно видео", "clearRecentVideos": "Исчисти скорешни видеа", "cutVideoTitle": "Исечи видео", "cutVideoDotDotDot": "Исечи видео...", + "remuxVideoTitle": "Ремукс на видео", + "remuxVideoDotDotDot": "Ремукс на видео...", + "remuxVideoInputVideo": "Влезно видео:", + "remuxVideoMultipleTracksRequiresMkv": "Повеќе аудио патеки или патеки со титлови бараат MKV контејнер. Излезниот формат е автоматски префрлен на .mkv.", + "remuxVideoOutputFormat": "Излезен формат:", + "remuxVideoOutputFile": "Излезна датотека:", + "remuxVideoRemuxing": "Ремукс на видео и аудио...", + "remuxVideoFinalizing": "Финализирање на излезната датотека (поместување на индексот на почетокот)...", + "remuxVideoCompleted": "Видеото е успешно ремуксирано.", + "remuxVideoFailed": "Ремуксот на видеото не успеа.", + "remuxVideoPleaseSelectBoth": "Избери и видео и аудио датотеки.", + "remuxVideoAssRequiresMkv": "ASS/SSA титловите бараат MKV контејнер за да се зачуваат сето форматирање и стилови.", + "remuxVideoSccRequiresMov": "Scenarist (.scc) титловите се вградуваат како CEA-608 скриени титлови, кои бараат MOV или MPG контејнер. Излезниот формат е автоматски префрлен на .mov.", + "remuxVideoSccNotWithWebM": "Scenarist (.scc) скриените титлови бараат MOV контејнер, кој не може да го содржи VP9/AV1 видеото од .webm датотека. Отстрани ја .scc датотеката или конвертирај ја во друг формат на титл.", + "remuxVideoMpgMaxTwoCaptionTracks": ".mpg датотека содржи најмногу две патеки со скриени титлови (CC1 и CC3) - отстрани датотеки со титлови за да останат една или две.", + "remuxVideoMccRequiresMpg": "MacCaption (.mcc) титловите се вградуваат како CEA-608/708 скриени титлови во MPEG-2 видеото, што бара MPG контејнер. Излезниот формат е автоматски префрлен на .mpg.", + "remuxVideoMpgReencodeVideoX": "Скриените титлови во .mpg датотека бараат MPEG-2 видео, а видеото е {0}. Да се прекодира видеото во MPEG-2? Ова трае подолго и малку го намалува квалитетот.", + "remuxVideoFileHasNoAudioX": "„{0}“ нема аудио патека, па не може да се користи како аудио извор.", + "remuxVideoAddingClosedCaptions": "Додавање скриени титлови...", + "remuxVideoSelectAudioTrack": "Избери аудио патека", + "remuxVideoSelectAudioTrackFor": "Избери аудио патека за {0}", + "remuxVideoSelectAudioTrackPrompt": "Датотеката „{0}“ содржи {1} аудио патеки. Избери ја аудио патеката за ремукс:", + "remuxVideoVideoFile": "видео", + "remuxVideoAudioFile": "аудио", + "remuxVideoAudioFiles": "Аудио датотеки:", + "remuxVideoSubtitleFiles": "Датотеки со титлови (опционално, меки титлови):", + "remuxVideoSelectAudioTrackDotDotDot": "Избери аудио патека...", + "remuxVideoFilesX": "{0} датотеки", + "remuxVideoMixAudio": "Измешај го аудиото во една патека", + "remuxVideoVolumePercent": "Јачина %:", + "remuxVideoVolumeX": "Јачина {0}%", + "remuxVideoFastStart": "Оптимизирај за веб стриминг (помести го индексот напред - побавно)", "embedSubtitlesDotDotDot": "Додај/отстрани вградени титули...", "generateTimeCodes": "Создади временски кодови", "checkeredImage": "Текст слика со шаховина", - "saveVideoAsTitle": "Сними видео како", "promptForFfmpegParamsAndGenerate": "Побарај ffmpeg параметри и генерирај", "cutVideoCutSegments": "Исечи сегменти", "cutVideoMergeSegments": "Спој сегменти", "cutVideoSplitSegments": "Сними сегменти поединечно", - "cutVideoType": "Тип на исекување", - "mpvRenderAuto": "Автоматски", - "mpvRenderNative": "Нативен", - "mpvRenderOpenGl": "OpenGL", - "mpvRenderSoftware": "Софтвер (бавно)", "cutVideoAlsoCutSubtitle": "Исечи го и титлот", "cutVideoSubtitleFileGeneratedX": "Генерирана датотека со титл: {0}", + "cutVideoTransition": "Транзиција помеѓу сегментите", + "cutVideoTransitionDurationSeconds": "Времетраење (секунди)", + "cutVideoFadeInSeconds": "Појавување од црно на почетокот (секунди)", + "cutVideoFadeOutSeconds": "Затемнување во црно на крајот (секунди)", + "cutVideoPreviewTransition": "Преглед на транзиција", + "cutVideoPreviewTransitionTitle": "Преглед на транзиција", + "cutVideoPreviewNeedsJoin": "Нема спој за преглед - додај барем два сегменти за спојување или сегмент за исекување од средината.", + "cutVideoTransitionInfoX": "Секоја транзиција ги преклопува деловите што ги спојува, па излезот станува пократок за {0} секунди по спој. Исечен титл повторно се тајмира за да одговара.", + "cutVideoTransitionFade": "Затемнување", + "cutVideoTransitionFadeBlack": "Затемнување преку црно", + "cutVideoTransitionFadeWhite": "Затемнување преку бело", + "cutVideoTransitionFadeGrays": "Затемнување преку сиво", + "cutVideoTransitionDissolve": "Претопување", + "cutVideoTransitionWipeLeft": "Бришење лево", + "cutVideoTransitionWipeRight": "Бришење десно", + "cutVideoTransitionWipeUp": "Бришење нагоре", + "cutVideoTransitionWipeDown": "Бришење надолу", + "cutVideoTransitionSlideLeft": "Лизгање лево", + "cutVideoTransitionSlideRight": "Лизгање десно", + "cutVideoTransitionSlideUp": "Лизгање нагоре", + "cutVideoTransitionSlideDown": "Лизгање надолу", + "cutVideoTransitionSmoothLeft": "Мазно лево", + "cutVideoTransitionSmoothRight": "Мазно десно", + "cutVideoTransitionCircleOpen": "Отворање круг", + "cutVideoTransitionCircleClose": "Затворање круг", + "cutVideoTransitionRadial": "Радијално", + "cutVideoTransitionPixelize": "Пикселизирање", + "cutVideoTransitionBlur": "Заматување", "importCurrentSubtitle": "Увези тековна титула", "addRemoveEmbeddedSubtitlesTitle": "Додај/отстрани вградени титули", "addCurrentSubtitle": "Додај тековна титула", - "titleOrLanguage": "Наслов/јазик", "viewMatroskaTrackX": "Преглед на Matroska трака - {0}", "resolutionSeparator": "x", "openFromUrlTitle": "Отвори видео фајл од URL", @@ -2812,8 +3206,11 @@ "reEncodeGeneratingDone": "Генерирањето заврши", "reEncodeGeneratedFilesX": "Генерирани датотеки ({0}):", "reEncodeFfmpegParameters": "ffmpeg параметри", + "analyzingVideoX": "Анализирање видео... {0}% {1}", + "analyzingVideoXofY": "Анализирање видео {0}/{1}... {2}% {3}", + "backgroundImageFileNotSelected": "Не е избрана датотека со слика за позадина", + "backgroundImageFileDoesNotExistX": "Датотеката со слика за позадина не постои: {0}", "addRemoveEmbeddedSubtitlesMp4Title": "Додај/отстрани вградени титлови (MP4)", - "embeddedTrackColumnNew": "Ново", "embeddedTrackNoSubtitlesFoundTitle": "Не се пронајдени титлови", "embeddedTrackNoSubtitlesFoundMessage": "Избраната датотека со титл не содржи никакви титлови.", "embeddedTrackNoTracksTitle": "Не се додадени траки", @@ -2825,15 +3222,14 @@ "embeddedTrackGeneratingVideoXY": "Генерирање видео... {0}% {1}", "embeddedTrackGeneratingVideo": "Генерирање видео...", "mp4FilesFilter": "MP4 датотеки", + "embeddedTracksPickVideoHint": "Избери видео датотека или повлечи ја тука за да ги видиш нејзините патеки со титлови.", "openFromUrlOpenOnline": "Отвори онлајн", "openFromUrlOpenOnlineDescription": "Стримувај го видеото директно. Најбрз почеток.", "openFromUrlOpenOnlineNote": "Говор во текст и шилци на формата на бран не се достапни во овој режим.", "openFromUrlDownloadAndOpen": "Преземи и отвори", "openFromUrlDownloadAndOpenDescription": "Зачувај го видеото локално, потоа отвори го.", "openFromUrlDownloadAndOpenNote": "Потребно за говор во текст и шилци на формата на бран.", - "openFromUrlMissing": "Прво внесете URL на видео.", "openFromUrlDownloadingTitle": "Преземање видео", - "openFromUrlSaveAs": "Зачувај видео како", "openFromUrlDownloadSubtitles": "Преземи и титлови", "pickOnlineSubtitleTitle": "Избери титл за преземање", "pickOnlineSubtitleFetching": "Преземање титлови...", @@ -2843,7 +3239,6 @@ "talkerX": "Говорник {0}", "baseModel": "Основен модел", "turboModel": "Turbo модел", - "ttsUpdateX": "Ажурирај {0}", "ttsEngineNotInstalled": "{0} не е инсталиран", "ttsEngineUpdateAvailable": "{0} - достапно е ажурирање", "ttsEngineTooOldUpdateRequired": "{0} е престар - потребно е ажурирање", @@ -2866,19 +3261,25 @@ "cloneVoiceTo": "Клонирај глас во", "cloneVoiceNameTitle": "Име на новиот глас", "cloneVoiceExtractFailed": "Не може да се извлече аудио за избраната линија.", + "lineXHasNoDuration": "Линијата {0} нема времетраење (времето за крај не е по почетното време), па нема аудио за извлекување.", + "audioClipsSkippedLinesX": "Не можеше да се извлече аудио за овие линии, па тие се прескокнати: {0}", "toggleShotChange": "Смени промена на кадар", "resetWaveformZoomAndSpeed": "Ресетирај зум и брзина на форма на бран", "showOriginalSubtitle": "Прикажи оригинален титл", + "timelineGroupTracksBy": "Групирај патеки со титлови по", + "timelineShowThumbnails": "Прикажи сликички од видеото", + "showSpeechOnly": "Прикажи само говор (бавно генерирање)", + "isolatingSpeechForWaveformX": "Изолирање говор за формата на бран... {0}", + "isolatingSpeechForWaveformFailed": "Говорот не можеше да се изолира за формата на бран - види го дневникот за алатки", + "speechOnlyWaveformReady": "Формата на бран сега прикажува само говор", "showOnlyWaveform": "Прикажи само форма на бран", "showOnlySpectrogram": "Прикажи само спектрограма", "showWaveformAndSpectrogram": "Прикажи форма на бран и спектрограма", - "spectrogramClassic": "Класичен", "spectrogramClassicViridis": "Viridis", "spectrogramClassicPlasma": "Plasma", "spectrogramClassicInferno": "Inferno", "spectrogramClassicTurbo": "Turbo", "spectrogramNeon": "Neon", - "waveformDrawStyleClassic": "Класично", "waveformDrawStyleFancy": "Фантазно", "setVideoPositionAndPauseAndSelectSubtitle": "Постави позиција на видеото, пауза, и избери титула", "setVideopositionAndPauseAndSelectSubtitleAndCenter": "Постави позиција на видеото, пауза, избери титула и центрирај", @@ -2888,7 +3289,6 @@ }, "sync": { "visualSync": "Визуелна синхронизација", - "sync": "Синхронизација", "startScene": "Започни сцена", "endScene": "Заврши сцена", "playTwoSecondsAndBack": "Пушти 2 секунди и назад", @@ -2904,19 +3304,18 @@ "adjustSelectedLinesAndForward": "Прилагоди избрани линии и напред", "toFrameRate": "Во фрејмрејт", "fromFrameRate": "Од фрејмрејт", + "videoXFrameRateY": "{0} - {1} fps", "adjustAllTimes": "Прилагоди сите времена (прикажи порано/подоцна)", "showEarlier": "Прикажи порано", "showLater": "Прикажи подоцна", - "changeFrameRate": "Промени фрејмрејт", "setSyncPoint": "Постави точка за синхронизација", "setSyncPointViaVideo": "Постави точка за синхронизација преку видео...", "syncPointTimeCode": "Временски код на точката за синхронизација", "syncPoints": "Точки за синхронизација", "pointSync": "Точка синхронизација", "pointSyncViaOther": "Точка синхронизација преку друга титула", - "adjustmentX": "Прилагодување: {0}", - "totalAdjustmentX": "Вкупно прилагодување: {0}", - "syncPointCandidateInfo": "Линиите што почнуваат по {0}+ секунди тишина се означени - тие често се сигурни точки за синхронизација", + "syncPointCandidateAfterInfo": "Линиите по кои следат {0}+ секунди тишина се истакнати - тие често се сигурни точки на синхронизација", + "gapAfter": "Празнина после", "adjustAllShortcuts": "Кратенки на тастатура:\r\n\r\n• Shift + Left/Right: Премести 10 ms\r\n• Ctrl + Left/Right: Премести 100 ms\r\n• Alt + Left/Right: Премести 500 ms", "adjustAllShortcutsFrames": "Кратенки на тастатурата:\r\n\r\n• Shift + Лево/Десно: Помести 1 кадар\r\n• Ctrl + Лево/Десно: Помести 10 кадри\r\n• Alt + Лево/Десно: Помести 1 секунда", "offsetInSeconds": "Поместување во секунди", @@ -2936,6 +3335,7 @@ "lineMerge": "Спојување на линии", "delayInSecondsBetweenRequests": "Задршка во секунди меѓу барањата", "maxBytesPerRequest": "Максимален број бајти по барање", + "keepMusicLinesUntranslated": "Не преведувај линии во музички симболи (♪ ... ♪)", "promptText": "Текст за упит", "resetPromptToDefault": "Ресетирај го промптот на стандардно", "translateEachLineSeparately": "Преведи секоја линија поодделно", @@ -2949,11 +3349,10 @@ "readyToTranslate": "Подготвено за превод", "translating": "Преведување...", "translationComplete": "Преводот е завршен", + "translateInPlaceNoOriginal": "Преведи на место (не создавај оригинал)", "translationCancelled": "Преводот е откажан", "swapLanguages": "Замени изворен и целен јазик", "xIsAlreadyDownloadedReDownload": "{0} веќе е преземено. Да се преземе повторно?", - "advancedDotDotDot": "Напредно...", - "advancedSettings": "Напредни подесувања", "advancedSettingsSubtitle": "Опции за пакети, контекст и семплирање за напредниот llama.cpp мотор", "context": "Контекст", "synopsis": "Синопсис", @@ -2977,6 +3376,7 @@ "useOnlyExtraServerParametersHint": "Стартувај го llama-server со горните параметри наместо со сопственото дотерување на Subtitle Edit - сепак се поставуваат само моделот, хостот и портата", "serverRunningAtX": "Серверот работи на {0}", "customPromptHint": "Прилагодени инструкции ({0} = изворен јазик, {1} = целен јазик); празно = вграден промпт", + "editTranslationHint": "Кликни на преводот на избраниот ред за да го уредиш (Enter зачувува, Escape откажува)", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp бара да се преземат llama-server моторот и модел за преведување. Да преземам сега?", "llamaCppDownloadEnginePrompt": "llama.cpp бара да се преземе llama-server моторот. Да преземам сега?", "llamaCppDownloadModelPrompt": "llama.cpp бара да се преземе избраниот модел за преведување. Да преземам сега?" @@ -3014,8 +3414,14 @@ "checkForUpdatesChannelStableAndBeta": "Стабилни и бета верзии", "assaAutoSetResolution": "ASSA: постави резолуција (PlayResX/PlayResY) од видеото кога ќе се отвори видео", "assaAutoSetResolutionPrompt": "ASSA: прашај пред промена на резолуцијата за да одговара на видеото (инаку скалирај автоматски)", + "videoControls": "Видео контроли", + "videoControlsEdit": "Уреди видео контроли...", + "videoControlsPositionText": "Текст за позиција / времетраење", + "videoControlsVideoFileName": "Име на видео датотеката", + "videoControlsPlayerName": "Име на видеоплеерот", "mergeKeepEndTime": "Спој линии: задржи го крајното време (дозволи преклопување со следниот титл)", "mergeKeepEndTimeOnlyAssa": "Спој линии: задржи го крајното време само за „Advanced Sub Station Alpha“", + "mergeAutoBreak": "Спојување линии: автоматски дели го спојениот текст (исклучено ги задржува сопствените прекини на ред)", "defaultSaveLocation": "Стандардна локација за зачувување", "defaultSaveLocationSourceFileFolder": "Папка на датотеката со титл/видео", "defaultSaveLocationLastUsedFolder": "Последно користена папка", @@ -3023,6 +3429,7 @@ "defaultSaveLocationSubtitleFileFolder": "Папка на датотеката со титл", "defaultSaveLocationCustomFolder": "Прилагодена папка", "subtitleGridFormattingHideTags": "Скриј ознаки", + "subtitleGridFormattingShowFormattingKeepTags": "Прикажи форматирање, задржи невизуелни ознаки", "musicSymbolsToReplace": "Музички симболи за замена (одделени со запирка)", "musicSymbol": "Музички симбол", "colorWordsPerMinute": "Обои збори/мин ако е превисоко", @@ -3033,7 +3440,6 @@ "dialogStyleDashBothLinesWithSpace": "Трка двете линии со простор", "dialogStyleDashBothLinesWithoutSpace": "Трка двете линии без простор", "continuationStyle": "Стил на продолжување", - "continuationStyleNone": "Никако", "continuationStyleNoneTrailingDots": "Никако, точки за паузи (само задни)", "continuationStyleNoneLeadingTrailingDots": "Никако, точки за паузи", "continuationStyleNoneTrailingEllipsis": "Никако, троеточие за паузи (само задни)", @@ -3044,7 +3450,6 @@ "continuationStyleLeadingTrailingEllipsis": "Троеточие", "continuationStyleLeadingTrailingDash": "Трка", "continuationStyleLeadingTrailingDashDots": "Трка, но точки за паузи", - "continuationStyleCustom": "Прилагодено", "cpsLineLengthStyle": "Cps/должина на линија", "cpsLineLengthStyleCalcAll": "Броење на сите знаци", "cpsLineLengthStyleCalcNoSpaceCpsOnly": "Броење на сите освен простор, само cps", @@ -3057,27 +3462,11 @@ "cpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly": "Без простор или пунктуација, само CPS", "cpsLineLengthStyleCalcIgnoreArabicDiacritics": "Игнорирај арапски диакритички знаци", "cpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "Игнорирај арапски диакритички знаци, без простор", - "timeCodeModeHhMmSsMs": "HH:MM:SS:MS", - "timeCodeModeHhMmSsFf": "HH:MM:SS:FF", - "splitBehaviorPrevious": "Додај празнина лево од точката за поделба (фокус десно)", - "splitBehaviorHalf": "Додај празнина во центарот на точката за поделба (фокус лево)", - "splitBehaviorNext": "Додај празнина десно од точката за поделба (фокус лево)", - "subtitleListActionNothing": "Ништо", - "subtitleListActionVideoGoToPositionAndPause": "Оди на позицијата во видеото и паузирај", - "subtitleListActionVideoGoToPositionAndPlay": "Оди на позицијата во видеото и пушти", "subtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "Оди на позицијата во видеото, пушти тековното и паузирај", - "subtitleListActionEditText": "Оди до полето за уредување на текстот", "subtitleListActionVideoGoToPositionMinus1SecAndPause": "Оди на позицијата во видеото - 1 с и паузирај", "subtitleListActionVideoGoToPositionMinusHalfSecAndPause": "Оди на позицијата во видеото - 0,5 с и паузирај", "subtitleListActionVideoGoToPositionMinus1SecAndPlay": "Оди на позицијата во видеото - 1 с и пушти", - "subtitleListActionEditTextAndPause": "Оди до полето за уредување, па паузирај на позицијата во видеото", - "autoBackupEveryMinute": "Секој минут", - "autoBackupEveryXthMinute": "Секој {0} минут", - "profiles": "Профили", - "autoBackupDeleteAfterXMonths": "Избриши автоматските резерви по {0} месеци", "searchSettingsDotDotDot": "Пребарај поставки...", - "syntaxColoring": "Боја на синтакса", - "waveformSpectrogram": "Волнова форма/спектрограм", "network": "Мрежа", "fileTypeAssociations": "Поврзувања со типови датотеки", "textBoxColorTags": "Означувања за боја (HTML/ASSA) во полето за субтитри", @@ -3110,10 +3499,9 @@ "darkThemeForegroundColor": "Боја на преден план во темна тема", "darkThemeBackgroundColor": "Боја на позадина во темна тема", "showGridLines": "Прикажи линии во мрежата", - "resetSettings": "Ресетирање на поставките?", - "resetSettingsDetail": "Ова ќе ги ресетира сите поставки на нивните стандардни вредности.\n\nПродолжи?", "showHorizontalLineAboveToolbar": "Прикажи хоризонтална линија над алатникот", "bookmarkColor": "Боја на ознака", + "spellCheckHighlightColor": "Боја на истакнување при проверка на правопис", "singleLineMaxLength": "Максимална должина на една линија", "optimalCharsPerSec": "Оптимални знаци/сек", "maxCharsPerSec": "Максимум знаци/сек", @@ -3125,13 +3513,21 @@ "unbreakSubtitlesShortThan": "Одвој субтитри подолги од", "newEmptyDefaultMs": "Стандардно ново траење на субтитри (мс)", "timeCodeUpDownStepMs": "Чекор за време горе/долу (ms)", + "moveSelectedLinesStepMs": "Чекор на кратенката за поместување избрани линии (ms)", + "moveStartEndStepMs": "Чекор на кратенката за поместување почеток/крај (ms)", + "moveLinesShortenNeighbor": "Поместување линии: скрати ја претходната/следната линија наместо да се преклопи", "promptBeforeDelete": "Потврда пред бришење", "rememberPositionAndSize": "Запомни позиција и големина на прозорецот", + "titleBarFullFileName": "Прикажи целосна патека на датотеката во насловната лента", + "showRecentFiles": "Прикажи скорешни датотеки (за повторно отворање)", "openLastFileOnStart": "Отвори последната отворена датотека при старт", "autoSave": "Автоматско зачувување (зачувај ја отворената датотека при уредување)", "autoBackupOn": "Автоматско бекапирање", "autoBackupIntervalMinutes": "Интервал за автоматско бекапирање (минути)", "autoBackupDeleteAfterDays": "Задржување на автоматски резерви (денови)", + "settingsBackupOn": "Автоматска резервна копија на подесувањата", + "settingsBackupIntervalDays": "Интервал за резервна копија на подесувањата (денови, 0 = при секое стартување)", + "settingsBackupMaxCount": "Број на резервни копии на подесувањата за чување", "autoConvertToUtf8": "Автоматски конвертирај кодирање во UTF-8 при отварање", "autoTrimWhiteSpace": "Автоматски отстранувај празни места", "defaultEncoding": "Стандардно кодирање", @@ -3145,23 +3541,14 @@ "colorGapTooShort": "Обојување ако празниот простор е премногу краток", "errorBackgroundColor": "Боја на позадина за грешка", "waveformDrawGridLines": "Цртај линии на мрежата", - "waveformCenterVideoPosition": "Центрирај позицијата на видеото", + "waveformUseSkiaRenderer": "Користи експериментален брз рендерер", "waveformCenterVideoPositionAlsoWhenPaused": "Центрирај ја позицијата на видеото и додека е паузирано", + "waveformSelectCurrentSubtitleWhilePaused": "Избери го тековниот титл и кога е паузирано", + "waveformRememberZoom": "Запомни зумирање (хоризонтално и вертикално)", "waveformShowToolbar": "Прикажи алатник", "waveformShowToolbarEdit": "Уреди алатник...", "waveformShowToolbarEditLabel": "Ставки на лентата со алатки", "waveformSpectrogramCombinedWaveformHeight": "Волнова форма/спектрограм комбинирано, висина на волнова форма %", - "showWaveformToolbarPlay": "Алатник: прикажи копче за репродукција", - "showWaveformToolbarRepeat": "Алатник: прикажи копче за повторување", - "showWaveformToolbarRemoveBlankLines": "Алатник: прикажи копче за отстранување празни линии", - "showWaveformToolbarNew": "Алатник: прикажи копче за нов субтитр", - "showWaveformToolbarSetStart": "Алатник: прикажи копче за поставување почеток", - "showWaveformToolbarSetEnd": "Алатник: прикажи копче за поставување крај", - "showWaveformToolbarStartAndOffsetTheRest": "Алатник: прикажи копче за поставување почеток и поместување на останатото", - "showWaveformToolbarHorizontalZoom": "Алатник: прикажи лизгач за хоризонтален зум", - "showWaveformToolbarVerticalZoom": "Алатник: прикажи лизгач за вертикален зум", - "showWaveformToolbarVideoPositionSlider": "Алатник: прикажи лизгач за позиција на видеото", - "showWaveformToolbarPlaybackSpeed": "Алатник: прикажи брзина на репродукција", "waveformFocusTextboxAfterInsertNew": "Фокусирај полето за текст по внесување нов субтитр", "waveformInvertMouseWheel": "Инвертирај мишињевото колеџо", "waveformMouseWheelSetsVideoPosition": "Тркалцето на глувчето ја поставува позицијата на видеото", @@ -3179,19 +3566,17 @@ "waveformSelectedColor": "Боја за избрани делови од волната форма", "downloadFfmpeg": "Преземи ffmpeg", "proxyAddress": "Адреса на прокси", - "username": "Корисничко име", "password": "Лозинка", "defaultFormat": "Стандарден формат", "defaultSaveAsFormat": "Стандарден формат за \"Зачувај како\"", "favoriteSubtitleFormats": "Омилени формати за субтитри", "favoriteLanguages": "Омилени јазици", "webVttUseXTimestampMap": "WebVTT: користи X-TIMESTAMP-MAP (помести временски кодови при вчитување)", - "showStopButton": "Прикажи копче за стоп", - "showFullscreenButton": "Прикажи копче за цел екран", "autoOpenVideoFile": "Автоматски отвори видео датотека при отворање на субтитри", "downloadMpv": "Преземи mpv", "downloadVlc": "Преземи VLC", "allowSingleLetterShortcutsInTextbox": "Дозволи кратки пречки од една буква во полето за текст", + "allowTextNavigationShortcutsInTextbox": "Дозволи кратенки на копчињата за навигација низ текст (Ctrl+Left/Right, Home/End) во полето за текст", "spellCheckEnglishTreatInApostropheAsIng": "Проверка на правопис: Третирај зборови што завршуваат на 'in'' како 'ing' (само англиски)", "goToLineNumberSetsVideoPosition": "Оди до бројот на линија и постави позиција на видеото", "adjustAllTimesRememberLineSelectionChoice": "Прилагодете ги сите времиња, запомни изборот за линии", @@ -3202,6 +3587,7 @@ "showAssaLayer": "Прикажи слој за ASSA", "waveformCursorColor": "Боја на курсор/глава на волната форма", "waveformShotChangeColor": "Боја на промена на сцена во волната форма", + "waveformGridColor": "Боја на мрежата на формата на бран", "waveformParagraphLeftColor": "Боја на левата граница на параграфот во волната форма", "waveformParagraphRightColor": "Боја на десната граница на параграфот во волната форма", "waveformFancyHighColor": "Боја на висок дел во волната форма", @@ -3229,23 +3615,26 @@ "resetSyntaxColoring": "Ресетирај бојање на синтакса", "resetWaveform": "Ресетирај волната форма", "resetRules": "Ресетирај правила", - "useFrameMode": "Користи режим со кадри (hh.mm.ss.ff)", + "timeCodeMode": "Режим на временски код", + "timeCodeModeTime": "Време (hh:mm:ss,zzz)", + "timeCodeModeFrames": "Кадри (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "Броеви на кадри", + "frameModeSnapToVideoFrames": "Чувај ги времињата на видео кадри (не кадри во секоја секунда)", "textBoxLimitNewLines": "Ограничи бројот на линии во полето за субтитри", - "mpvVideoOutput": "Видео излез (mpv)", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - Софтверско рендерирање (бавно)", + "mpvMetalRendering": "libmpv - Metal (експериментално, бара рестартирање)", "mpvWidRendering": "libmpv - Приказ со Native Window ID (побрзо на Windows/Linux)", "waveFormsAndSpectrogramFoldersContainsX": "\"Waveforms\" и \"spectrogram\" папките содржат {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "Избриши датотеки од \"Waveforms\" и \"Spectrogram\"?", "waveformGenerateSpectrogram": "Генерирај спектрограма", "waveformAutoGenerate": "Автоматски генерирај форма на бран при отворање видео", "waveformSpectrogramMode": "Режим на спектрограма", - "waveformCenterOnSingleClick": "Центрирај со еднократен клик", - "waveformSingleClickSelectsSubtitle": "Избери субтитр со еднократен клик", "waveformRightClickSelectsSubtitle": "Избери субтитр со десен клик", - "waveformPauseOnSingleClick": "Паузирај со еднократен клик", "waveformDrawStyle": "Стил за цртање на волната форма", "vlcWidRendering": "libVLC - Приказ со Native Window ID", + "ffmpegSoftwareRendering": "FFmpeg", + "downloadFfmpegLibs": "Преземи FFmpeg библиотеки (за FFmpeg видеоплеерот)", "subtitleGridEnterKeyAction": "Акција за Enter копче во мрежата со субтитри", "subtitleSingleClickAction": "Акција за еднократен клик во мрежата со субтитри", "subtitleDoubleClickAction": "Акција за двоклик во мрежата со субтитри", @@ -3270,23 +3659,24 @@ "saveAsBehaviorUseVideoFileName": "Користи име на видео датотека", "saveAsBehaviorUseSubtitleFileName": "Користи име на датотека за субтитр", "saveAsAppendLanguageCodeTwoLetter": "Двојбуквено", - "saveAsAppendLanguageCodeThreeLetter": "Требуквено", "saveAsAppendLanguageCodeLanguageName": "Име на јазикот", "splitOddLineActionWeightTop": "Тежина горе", "splitOddLineActionWeightBottom": "Тежина долу", "splitOddLinesAction": "Акција за поделба на непарни линии", "ocrUseWordSplitList": "OCR: користи листа за поделба на зборови", "ocrGuessUnknownWords": "OCR: обиди се да погодиш непознати зборови", + "spellCheckRememberUseAlwaysList": "Проверка на правопис: запомни ја листата „Користи секогаш“", + "fixShortDisplayTimesAllowMoveStartTime": "Поправи чести грешки: поправката на кратки времиња за приказ може да го помести почетното време", "speechToTextSelectedLinesPromptFirstTimeOnly": "Говор-во-текст: избрани линии, прашај за јазик/мотор само прв пат", "multipleReplaceShowDotDotDotButtons": "Повеќекратна замена: прикажи копчиња за контекст мени", "gridFocusTextboxAfterInsertNew": "Мрежа: фокусирај поле за текст по внесување нов субтитр", + "undoRedoGoToChangedLine": "Врати/повтори: оди на променетата линија (и позицијата во видеото)", "textToSpeechPromptSkipNoiseLines": "Текст во говор: прашај за прескокнување линии со звук/музика", "textToSpeechPromptDetectSpeakers": "Текст во говор: прашај за откривање имиња на говорници во текстот", "useFocusedButtonBackgroundColor": "Користи боја на позадина за фокусирано копче", "focusedButtonBackgroundColor": "Боја на позадина за фокусирано копче", "forceCrLfOnSave": "Присилно CR+LF при зачувување (текстуални датотеки за субтитри)", - "showWaveformToolbarPlayNext": "Алатник: прикажи копче за репродукција на следното", - "showWaveformToolbarPlaySelection": "Алатник: прикажи копче за репродукција на изборот", + "linuxClipboardUseExternalTool": "Копирај текст преку xclip/wl-copy (ги задржува знаците со акценти)", "showFormatLimitWarning": "Предупреди при зачувување кога линиите ги надминуваат ограничувањата на форматот (на пр. SCC 32 знаци/линија)", "textBoxButtonShowAutoBreak": "Поле за текст: прикажи копче за автоматско преломување", "textBoxButtonShowUnbreak": "Поле за текст: прикажи копче за од-случување", @@ -3298,12 +3688,18 @@ "waveformDoubleClickAction": "Акција за двоклик во волната форма (по акција за еднократен клик)", "allSettings": "Сите поставки", "uiScale": "Големина на UI (%)", + "fontScale": "Скала на фонтот (%)", + "textSelectionOpacity": "Непрозирност на избраниот текст (%)", "waveformToolbarItems": "Предмети во алатникот за волната форма", "matchIconColorToDarkTheme": "Согласувај боја на икона со преден план на темната тема", "subtitlePreviewProperties": "Својства за преглед на субтитри", "usePositionFromSubtitleFile": "Користи позиција од датотеката со титл (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "Маргината е дел од областа на титлот", "textJustify": "Порамни ги линиите обострано", + "deinterlace": "Деинтерлејсирај видео", + "deinterlaceOff": "Исклучено", + "deinterlaceAuto": "Автоматски (само интерлејсирани кадри)", + "deinterlaceAlways": "Секогаш", "pixelWidthInfo": "Зелени линии = максимум ширина | Црвена област = текстот надминува ограничувањето", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3313,128 +3709,102 @@ "waveformSaveAsCustomTheme": "Зачувај како прилагодена тема...", "waveformLoadThemeDotDotDot": "Вчитај тема...", "waveformExportThemeDotDotDot": "Извези тема...", + "waveformSaveCustomThemeTitle": "Зачувај прилагодена тема", + "waveformThemeFileType": "Тема за форма на бран на Subtitle Edit", + "waveformThemeHighContrast": "Висок контраст", + "waveformThemeOceanBlue": "Океанско сино", + "waveformThemeWarmSunset": "Топол залез", + "waveformThemeForest": "Шума", + "waveformThemeMidnightPurple": "Полноќно виолетово", + "waveformThemeRetroAmber": "Ретро килибар", + "waveformThemeIce": "Мраз", "minGapFrames": "Најмала празнина (кадри)", "waveformSnapToFrames": "Приклучи на кадри", "fixCommonErrorsSkipStep1": "Поправи чести грешки: прескокни чекор 1 (избери поправки)", "showPluginsMenu": "Прикажи мени Приклучоци", "fullscreenHideControls": "Скриј контроли за видео во цел екран", + "showSecondarySubtitleDialog": "Прикажи дијалог за стил при отворање втора датотека со титл", + "rememberSecondarySubtitleFile": "Запомни ја втората датотека со титл", "writeToolsLog": "Запиши дневник за алатки", "waveformExtractAudioFormat": "Формат за извлекување аудио", "waveformExtractAudioSampleRate": "Брзина на семплирање за извлекување аудио", "waveformExtractAudioSampleRateOriginal": "Оригинал (задржи извор)", "waveformExtractAudioBitRate": "Битрата за извлекување аудио (MP3/M4A)", + "ffmpegUseCenterChannelOnly": "Користи само предниот централен канал за 5.1 аудио (FFmpeg)", "waveformSetVideoPositionOnMoveStartEnd": "Постави позиција на видео при поместување старт/крај", - "saveAsAppendLanguageCodeThreeLetterBibliographic": "Тричлен (ISO 639-2/B)", "textToSpeechPromptMergeContinuationLines": "Текст во говор: побарај спојување на линии за продолжување" }, "shortcuts": { "generalUnbreakNoSpaceCjk": "Отстрани прелом без празно место (CJK)", - "title": "Прекратници", + "generalToggleBreak": "Смени дели/обратно дели", "searchShortcuts": "Пребарај прекратници...", - "filter": "Филтер", - "categoryGeneral": "Општо", "categorySubtitleGridAndTextBox": "Преглед на листа со субтитри & поле за текст", "categorySubtitleGrid": "Преглед на листа со субтитри", - "categoryWaveform": "Волнова форма", "categoryTextBox": "Поле за текст", "categoryFile": "Датотека", "categoryVideo": "Видео", "categorySync": "Синхронизација", - "categoryTranslate": "Превод", - "categorySearch": "Пребарување", - "categoryTools": "Алатки", "categoryAi": "AI", + "categoryCustom": "Прилагодено", + "editCustomShortcut": "Уреди прилагодена кратенка", + "customShortcutTextBoxKeyHint": "Тука користи копче со Ctrl/Alt - обично копче повеќе нема да пишува во полето за текст.", + "customShortcutNumberX": "Прилагодена кратенка #{0}", + "customShortcutNumberXY": "Прилагодена кратенка #{0}: {1}", + "customShortcutStep": "Чекор", + "customShortcutSteps": "Чекори", + "customShortcutStepRunCommand": "Изврши команда", + "customShortcutStepInsertText": "Вметни текст", + "customShortcutStepReplace": "Најди и замени", + "customShortcutInsertAtCursor": "На курсорот", + "customShortcutInsertAtStart": "На почетокот на текстот", + "customShortcutInsertAtEnd": "На крајот на текстот", + "customShortcutSummaryRunCommandX": "Изврши: {0}", + "customShortcutSummaryInsertXY": "Вметни „{0}“ ({1})", + "customShortcutSummaryReplaceXY": "Замени „{0}“ со „{1}“", + "customShortcutSummaryReplaceRegexXY": "Замени regex „{0}“ со „{1}“", + "customShortcutPickCommand": "Избери команда за извршување.", + "customShortcutEnterText": "Внеси текст за вметнување.", + "customShortcutEnterFind": "Внеси текст за пребарување.", + "customShortcutInvalidRegexX": "Невалиден регуларен израз: {0}", + "customShortcutStepsHint": "Чекорите се извршуваат од горе надолу. Текстуалните чекори работат на избраните линии; командите што отвораат прозорец продолжуваат откако тој ќе се затвори.", "activeIn": "Активна во", "activeInEverywhere": "Насекаде", - "generalSetupLikeSe4": "Постави како Subtitle Edit 4 (тема, кратенки, правила за замена)", - "generalMergeSelectedLines": "Спој избрани линии", - "generalMergeWithPrevious": "Спој со претходната", - "generalMergeWithNext": "Спој со следната", - "generalMergeWithPreviousAndUnbreak": "Спој со претходната и отстрани прелом", - "generalMergeWithNextAndUnbreak": "Спој со следната и отстрани прелом", - "generalMergeWithPreviousAndAutoBreak": "Спој со претходната и автоматски прелом", - "generalMergeWithNextAndAutoBreak": "Спој со следната и автоматски прелом", - "generalMergeSelectedLinesAndAutoBreak": "Спој избрани линии и автоматски прелом", "generalMergeSelectedLinesAndUnbreak": "Спој избрани линии и отстрани прелом", "generalMergeSelectedLinesAndUnbreakCjk": "Спој избрани линии и отстрани прелом CJK", - "generalMergeSelectedLinesOnlyFirstText": "Спој избрани линии, само првиот текст", "generalMergeSelectedLinesBilingual": "Спој избрани линии двјојно", - "generalMergeWithPreviousBilingual": "Спој со претходната двјојно", - "generalMergeWithNextBilingual": "Спој со следната двјојно", - "generalMergeOriginalAndTranslation": "Спој оригинал и превод", "generalToggleTranslationMode": "Промени режим на превод", - "generalSwitchOriginalAndTranslation": "Смени оригинал и превод", - "generalSwitchOriginalAndTranslationTextBoxes": "Смени полетата за оригинал и превод", "generalToggleTranslationAndOriginalInPreviews": "Смени превод и оригинал во прегледот на видео/аудио", "generalChooseLayout": "Избери распоред", - "generalLayoutChooseX": "Распоред {0}", - "generalPlayFirstSelected": "Пушти првото избрано", - "generalGoToFirstSelectedLine": "Оди до првата избрана линија", - "generalGoToNextEmptyLine": "Оди до следната празна линија", "generalGoToNextSubtitle": "Оди до следниот субтитр", "generalGoToNextSubtitlePlayTranslate": "Оди до следниот субтитр (пушти превод)", "generalGoToNextSubtitleCursorAtEnd": "Оди до следниот субтитр (курсорот е на крај)", "generalGoToPrevSubtitle": "Оди до претходниот субтитр", "generalGoToPrevSubtitlePlayTranslate": "Оди до претходниот субтитр (пушти превод)", - "generalGoToStartOfCurrentSubtitle": "Оди до почетокот на тековниот субтитр", - "generalGoToEndOfCurrentSubtitle": "Оди до крајот на тековниот субтитр", - "generalGoToPreviousSubtitleAndFocusVideo": "Оди до претходниот субтитр и фокусирај видеото", - "generalGoToNextSubtitleAndFocusVideo": "Оди до следниот субтитр и фокусирај видеото", - "generalGoToPrevSubtitleAndPlay": "Оди до претходниот субтитр и пушти", - "generalGoToNextSubtitleAndPlay": "Оди до следниот субтитр и пушти", - "generalGoToPreviousSubtitleAndFocusWaveform": "Оди до претходниот субтитр и фокусирај волната форма", - "generalGoToNextSubtitleAndFocusWaveform": "Оди до следниот субтитр и фокусирај волната форма", - "generalGoToLineNumber": "Оди до бројот на линија", "generalGoToFirstLine": "Оди на првата линија", "generalGoToLastLine": "Оди на последната линија", "alsoSetVideoPosition": "Постави ја и позицијата во видеото", "generalGoToVideoPosition": "Оди до позиција на видеото", "generalToggleItalic": "Превклучи курзив", "generalToggleBold": "Превклучи задебелување", - "generalToggleBookmarks": "Превклучи ознаки", - "generalFocusTextBox": "Фокусирај поле за текст", - "generalToggleBookmarksWithText": "Превклучи ознаки со текст", - "generalEditBookmarks": "Уреди ознаки", - "fileNew": "Ново", "generalToggleUnderline": "Смени подвлечено", + "generalToggleBox": "Смени кутија (EBU STL)", "fileOpen": "Отвори", "fileOpenKeepVideo": "Отвори (запази видео)", "fileSave": "Зачувај", "fileSaveAs": "Зачувај како", - "fileSaveAll": "Зачувај сите", "fileSaveOriginal": "Зачувај оригинал", - "fileSaveOriginalAs": "Зачувај оригинал како", - "fileOpenOriginalSubtitle": "Отвори оригинален субтитр", - "fileCloseOriginalSubtitle": "Затвори оригинален субтитр", - "fileTranslatedSubtitle": "Преведен субтитр", "fileCompare": "Сравни", "fileStatistics": "Статистика", "fileImportPlainText": "Увези обичен текст", - "fileImportBluRaySupForOcr": "Увези Blu-ray SUP за OCR", - "fileImportBluRaySupForEdit": "Увези Blu-ray SUP за уредување", - "fileImportTimeCodes": "Увези врем. коди", "fileExportEbuStl": "Извези EBU STL", "fileExportPac": "Извези PAC", - "fileExportEdlClipName": "Извези име на EDL клип", - "fileExportPlainText": "Извези обичен текст", - "fileExportCustomTextFormat1": "Извези прилагоден текстуален формат 1", - "fileExportCustomTextFormat2": "Извези прилагоден текстуален формат 2", - "fileExportCustomTextFormat3": "Извези прилагоден текстуален формат 3", "fileExit": "Излез", "openSeDataFolder": "Отвори папка со податоци за Subtitle Edit", - "editFind": "Најди", - "editFindNext": "Најди следно", "editFindPrevious": "Најди претходно", - "editReplace": "Замени", - "editMultipleReplace": "Повеќекратна замена", - "editModifySelection": "Модифицирај избор", - "listSelectAll": "Избери ги сите", - "listSelectFirst": "Избери првата", - "listSelectLast": "Избери последната", "listInverseSelection": "Инвертирај избор", "listDeleteSelection": "Избриши избор", + "deleteSelectionEverywhere": "Избриши избор (насекаде)", "rippleDeleteSelection": "Рипл ефект при бришење на избор", - "settings": "Поставки", "assigned": "Доделено", "unassigned": "Недоделено", "pressedKeyX": "Притиснат клуч: {0}", @@ -3442,6 +3812,7 @@ "detectKey": "Откриј клуч", "control": "Ctrl", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Shift", "controlMac": "⌃", @@ -3452,11 +3823,14 @@ "resetShortcutsDetail": "Дали сакате да ги ресетирате сите пречки на стандардните вредности?", "togglePlayPause": "Пушти/паузирај", "toggleLockTimeCodes": "Заклучи врем. коди", + "toggleTimeCodeMode": "Смени режим на временски код (време/кадри/броеви на кадри)", + "toggleScreenPrivacy": "Смени приватност на екранот (скриј имиња на датотеки, потоа и текстови)", + "screenPrivacyFileNamesHidden": "Приватност на екранот: имињата на датотеките се скриени", + "screenPrivacyFileNamesAndTextsHidden": "Приватност на екранот: имињата на датотеките и текстовите се скриени", + "screenPrivacyOff": "Приватност на екранот: исклучено", "duplicateSelectedLines": "Дуплирај избрани линии", "sourceView": "Преглед на извор", - "showAlignmentPicker": "Позиционирање", "addOrEditBookmark": "Додај или уреди ознака", - "listBookmarks": "Листа со ознаки", "toggleBookmark": "Превклучи ознака (избрани линии, без текст)", "toggleForcedSelectedLines": "Смени присилно (избрани линии)", "goToNextBookmark": "Оди до следната ознака", @@ -3467,12 +3841,12 @@ "waveformSetStartAndSetEndOfPreviousMinusGap": "Постави почеток и крај на претходната - празнина", "waveformSetEndAndStartOfNextAfterGap": "Постави крај и почеток на следната + празнина", "waveformSetEndAndStartOfNextAfterGapAndGoToNext": "Постави крај и почеток на следната + празнина и оди до следната", - "fetchFirstWordFromNextSubtitle": "Земи прва реч од следниот субтитр", "moveLastWordToNextSubtitle": "Помести последна реч до следниот субтитр", "moveLastWordFromFirstLineDownCurrentSubtitle": "Помести последна реч од првата линија надолу (тековен субтитр)", "moveFirstWordFromNextLineUpCurrentSubtitle": "Помести прва реч од следната линија нагоре (тековен субтитр)", "moveTextFromCursorToNextAndGoToNext": "Помести го текстот по курсорот во следниот титл и оди на следниот", "moveTextFromCursorToNextAndGoToNextAndPlay": "Помести го текстот по курсорот во следниот титл, оди на следниот и пушти", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "Помести го текстот по курсорот во следниот титл, оди на следниот, пушти го и паузирај на неговиот крај", "breakAtFirstSpaceFromCursor": "Прекини на првото празно место од позицијата на курсорот", "breakAtFirstSpaceFromCursorAndGoToNext": "Прекини на првото празно место од позицијата на курсорот и оди на следна", "toggleFocusGridAndWaveform": "Превклучи фокус помеѓу мрежата со субтитри и волната форма/спектрограм", @@ -3484,7 +3858,6 @@ "videoGoToPreviousTimeCode": "Оди на претходен временски код", "videoGoToNextTimeCode": "Оди на следен временски код", "goToNextLineAndSetVideoPosition": "Оди до следниот субтитр и постави позиција на видеото", - "textBoxDeleteSelectionNoClipboard": "Поле за текст: Избриши избор (без таблата со исечоци)", "textBoxDeleteForward": "Поле за текст: Избриши го изборот или следниот знак (бришење нанапред)", "textBoxCut": "Поле за текст: Сечење", "textBoxCut2": "Поле за текст: Сечење (алтернативно)", @@ -3503,6 +3876,7 @@ "listViewColumnTextUp": "Колона, текст нагоре", "listViewColumnTextDown": "Колона, текст надолу", "autoTranslateSelectedLines": "Автоматски преведи избрани линии...", + "autoTranslateSelectedLinesNoPrompt": "Автоматски преведи избрани линии (без прашање, користи последен мотор/јазици)", "setAssaResolution": "Постави ASSA резолуција (PlayResX/PlayResY)", "setShortcutForX": "Постави пречка за \"{0}\"", "commandFileNewKeepVideo": "Ново (запази видео)", @@ -3510,27 +3884,20 @@ "fileCloseOriginal": "Затвори оригинал", "fileCloseTranslation": "Затвори превод", "restoreAutoBackup": "Врати автоматско бекапирање", - "openContainingFolder": "Отвори папка со датотека", "importTimeCodes": "Увези врем. коди", "importSubtitleWithManuallyChosenEncoding": "Увези субтитр со рачно избрано кодирање", "exportBluRaySup": "Извези Blu-ray SUP", "exportCustomTextFormat": "Извези прилагоден текстуален формат", "exportPlainText": "Извези обичен текст", - "showHistory": "Прикажи историја", "toggleRightToLeft": "Превклучи десно-налево", "modifySelection": "Модифицирај избор", "adjustDurations": "Прилагоди траења", "applyDurationLimits": "Примени граници на траење", "batchConvert": "Групно конвертирање", - "bridgeGaps": "Пополнувај празнини", "applyMinGap": "Примени минимум празнина", - "fixCommonErrors": "Поправи чести грешки", "makeEmptyTranslationFromCurrentSubtitle": "Создади празен превод од тековниот субтитр", - "mergeLinesWithSameText": "Спој линии со истиот текст", - "mergeLinesWithSameTimeCodes": "Спој линии со исти врем. кодови", "splitBreakLongLines": "Подели/израмни долги линии", "mergeShortLines": "Спој кратки линии", - "removeTextForHearingImpaired": "Отстрани текст за глуви", "joinSubtitles": "Спои субтитри", "splitSubtitle": "Подели субтитр", "spellCheck": "Провери правопис", @@ -3552,7 +3919,6 @@ "adjustAllTimes": "Прилагоди сите времиња", "visualSync": "Визуелна синхронизација", "translateViaCopyPaste": "Преведи со копирање‑вставување", - "shortcuts": "Прекратници", "wordLists": "Листи со зборови", "chooseUiLanguage": "Изберете јазик за UI", "chooseRuleProfile": "Изберете профил за правила", @@ -3563,6 +3929,7 @@ "textBoxItalic": "Поле за текст: курзив", "textBoxBold": "Поле за текст задебелено", "textBoxUnderline": "Поле за текст подвлечено", + "textBoxBox": "Кутија во полето за текст (EBU STL)", "resetWaveformZoomAndSpeed": "Ресетирај зум и брзина на репродукција на волната форма", "togglePlaybackSpeed": "Промени брзина на репродукција", "playbackSpeedSlower": "Брзина полека", @@ -3572,22 +3939,28 @@ "seekSilence": "Тргни до тишина", "waveformGuessStart": "Погоди почетно време од формата на бран", "waveformGuessEnd": "Погоди крајно време од формата на бран", + "waveformGuessStartAndEnd": "Погоди почетно и крајно време од формата на бран", "setVideoPositionCurrentSubtitleStart": "Постави позиција на видеото на почетокот на тековниот субтитр", "goToSubtitlePositionAndPause": "Оди на позицијата на титлот и паузирај", "setVideoPositionCurrentSubtitleEnd": "Постави позиција на видеото на крајот на тековниот субтитр", "toggleAudioTracks": "Превклучи аудио траки", - "listErrors": "Листа на грешки", "goToNextError": "Оди до следната грешка", "goToPreviousError": "Оди до претходната грешка", "addNameToNameList": "Додај име во листата со имиња", "findDoubleWords": "Најди дупли зборови", "findDoubleLines": "Најди дупли линии", "colorX": "Боја {0}", - "removeColor": "Отстрани боја", "surroundWith": "Овие со...", "surroundWithXY": "Овие со {0}/{1}", - "repeatLine": "Повтори линија", "surroundWithNumberX": "Опкружи со #{0}", + "surroundWithBehavior": "Однесување", + "surroundWithBehaviorToggle": "Смени (додај или отстрани ако постои)", + "surroundWithBehaviorAdd": "Додај (секој пат)", + "surroundWithBehaviorRemove": "Отстрани (сите)", + "surroundWithBehaviorRemoveOnce": "Отстрани (по една секој пат)", + "surroundWithWorksOn": "Работи на", + "surroundWithScopeSelectionOrText": "Избор, инаку целиот текст", + "surroundWithScopeEachLine": "Секоја линија", "searchVia": "Пребарај преку", "searchViaX": "Пребарај преку {0}", "searchViaNumberX": "Пребарај преку #{0}", @@ -3612,6 +3985,11 @@ "copySubtitlePathToClipboard": "Копирај патека до субтитрот во таблата со исечоци", "copySubtitleOriginalPathToClipboard": "Копирај патека до оригиналниот субтитр во таблата со исечоци", "focusTextBox": "Фокусирај поле за текст", + "focusSubtitleListView": "Фокусирај ја листата со титлови", + "focusWaveform": "Фокусирај ја формата на бран", + "focusOriginalTextBox": "Фокусирај го полето за оригинален текст", + "textBoxGoToStart": "Поле за текст, оди на почеток", + "textBoxGoToEnd": "Поле за текст, оди на крај", "sortByStartTime": "Сортирај по време за \"Прикажи\"", "sortByEndTime": "Сортирај по време за \"Скриј\"", "sortByDuration": "Подреди по времетраење", @@ -3634,7 +4012,6 @@ "assaStyles": "ASSA стилови", "assaProperties": "ASSA својства", "assaAttachments": "ASSA прилози", - "assaVideoColorPicker": "ASSA избирач на видео боја", "recalculateDurationSelectedLines": "Пресметај повторно траење (избрани линии)", "toggleWaveformAndSpectrogramHeight": "Превклучи поделено височина за волна форма/спектрограма", "toggleSpectrogramStyle": "Превклучи стил на спектрограм", @@ -3658,9 +4035,9 @@ "selectionToSentenceCase": "Поле за текст: Избраното во Реченична форма", "selectionToggleCasing": "Поле за текст: Смени големина на букви (ГОЛЕМИ -> мали -> Со Голема Почетна)", "googleIt": "Пребарај на Google (избран текст)", - "setActorXY": "Постави актер {0}: {1}", + "setActorX": "Постави актер: {0}", "setNewActor": "Постави нов актер...", - "setActorSlotXTitle": "Слот за актер {0}", + "setStyleX": "Постави стил: {0}", "toggleDialogDashes": "Смени црти за дијалог", "mergeWithLineBeforeAsDialog": "Спој со линија пред како дијалог", "mergeWithLineAfterAsDialog": "Спој со линија после како дијалог", @@ -3671,13 +4048,27 @@ "moveStartOneFrameBackKeepGapPrev": "Помести старт за еден кадар назад (задржи празнина до претходно ако е блиску)", "moveStartOneFrameForwardKeepGapPrev": "Помести старт за еден кадар напред (задржи празнина до претходно ако е блиску)", "moveEndOneFrameBackKeepGapNext": "Помести крај за еден кадар назад (задржи празнина до следно ако е блиску)", - "moveEndOneFrameForwardKeepGapNext": "Помести крај за еден кадар напред (задржи празнина до следно ако е блиску)" + "moveEndOneFrameForwardKeepGapNext": "Помести крај за еден кадар напред (задржи празнина до следно ако е блиску)", + "moveStartXMsBack": "Помести почеток X ms назад (X се поставува во Подесувања, исто и во Визуелна синхронизација)", + "moveStartXMsForward": "Помести почеток X ms напред (X се поставува во Подесувања, исто и во Визуелна синхронизација)", + "moveEndXMsBack": "Помести крај X ms назад (X се поставува во Подесувања, исто и во Визуелна синхронизација)", + "moveEndXMsForward": "Помести крај X ms напред (X се поставува во Подесувања, исто и во Визуелна синхронизација)", + "moveSelectedLinesXMsBack": "Помести избрани линии X ms назад (X се поставува во Подесувања)", + "moveSelectedLinesXMsForward": "Помести избрани линии X ms напред (X се поставува во Подесувања)", + "moveSelectedLinesAndForwardXMsBack": "Помести избрани линии и сите следни X ms назад (X се поставува во Подесувања)", + "moveSelectedLinesAndForwardXMsForward": "Помести избрани линии и сите следни X ms напред (X се поставува во Подесувања)", + "moveAllLinesXMsBack": "Помести ги сите линии X ms назад (X се поставува во Подесувања)", + "moveAllLinesXMsForward": "Помести ги сите линии X ms напред (X се поставува во Подесувања)", + "moveSelectedLinesCustomMsBack": "Помести избрани линии, прилагодени милисекунди ({0:#,###,##0}) назад, {1}", + "moveSelectedLinesCustomMsForward": "Помести избрани линии, прилагодени милисекунди ({0:#,###,##0}) напред, {1}", + "moveSelectedLinesAndForwardCustomMsBack": "Помести избрани линии и сите следни, прилагодени милисекунди ({0:#,###,##0}) назад, {1}", + "moveSelectedLinesAndForwardCustomMsForward": "Помести избрани линии и сите следни, прилагодени милисекунди ({0:#,###,##0}) напред, {1}", + "moveAllLinesCustomMsBack": "Помести ги сите линии, прилагодени милисекунди ({0:#,###,##0}) назад, {1}", + "moveAllLinesCustomMsForward": "Помести ги сите линии, прилагодени милисекунди ({0:#,###,##0}) напред, {1}" }, "wordLists": { "title": "Списоци со зборови", "addName": "Додади име", - "addWord": "Додади збор", - "addPair": "Додади пар", "nameAndIgnoreList": "Листа со имиња/игнорирања", "userWords": "Корисничка листа со зборови", "ocrFixList": "Листа за поправки на OCR", @@ -3730,6 +4121,8 @@ "nOcrDatabase": "nOCR база", "drawMode": "Режим на цртање:", "addNewCharcter": "Додади нов знак", + "addNOcrCharacterTitle": "Додај nOCR знак за линија {0}, знак {1} од {2} со базата „{3}“", + "addBinaryOcrCharacterTitle": "Додај бинарен OCR знак за линија {0}, знак {1} од {2} со базата „{3}“", "lineIndexX": "Линија {0}", "inspectNOcrAdditions": "Прегледај нови nOCR дополнувања", "ocrSelectedLines": "OCR избрани линии", @@ -3777,6 +4170,8 @@ "binaryImageCompareInspectImageMatches": "„Binary image compare“ - Прегледај совпаѓања на слика", "saveBlankTextTitle": "Да се зачува празен текст?", "saveBlankTextPrompt": "Да се зачува празен текст за сликата?", + "drawnLinesDoNotMatchTitle": "Линиите не одговараат на сликата", + "drawnLinesDoNotMatchPrompt": "Некои од нацртаните линии не одговараат на сликата (зелените линии мора да бидат на знакот, црвените линии мора да бидат надвор од него), па овој знак нема да биде препознаен.\n\nДа се зачува сепак?", "yesAndNeverAskAgain": "Да, и повеќе не прашувај", "importTextFromSubtitleDotDotDot": "Увези текст од титл...", "importTextFromSubtitleOverwritePrompt": "Некои линии веќе имаат OCR текст. Да ги заменам постоечките?", @@ -3803,7 +4198,6 @@ "vobSubColorsTitle": "VobSub/DVD бои", "vobSubColorsHeader": "Прилагоди ги четирите VobSub бои", "vobSubColorsDescription": "VobSub/DVD титловите користат четири индексирани бои: позадина, шаблон, нагласување 1 и нагласување 2. Изберете ја секоја боја подолу за да ја заобиколите вградената палета - корисно кога оригиналните бои даваат слаб OCR контраст.", - "vobSubColorBackground": "Позадина", "vobSubColorPattern": "Шаблон", "vobSubColorEmphasis1": "Нагласување 1", "vobSubColorEmphasis2": "Нагласување 2", @@ -3837,9 +4231,26 @@ "crispEmbedSettingsTitle": "Подесувања за CrispEmbed", "crispEmbedDescription": "Локален OCR мотор со повеќе модели во позадина - преземи ги моторот и моделите тука.", "trainNOcrDatabase": "Тренирај nOCR база...", + "optimizeNOcrDatabase": "Оптимизирај nOCR база...", + "optimizeNOcrDatabaseQuestionXY": "Да се отстранат линиите што не ги разликуваат знаците од слични знаци во nOCR базата „{0}“?\n\nОва ја прави базата помала и OCR побрз, обично со помалку грешки. Трае до една минута.\n\nРезервна копија се зачувува како „{1}“.", + "optimizingNOcrDatabaseXY": "Оптимизирање на nOCR базата... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "nOCR базата „{0}“ е оптимизирана: {1:#,##0} -> {2:#,##0} линии.", "startTraining": "Започни тренирање", "abortTraining": "Прекини тренирање", "trainingOptions": "Опции за тренирање", + "trainNOcrSubtitle": "Исцртува знаци во инсталираните фонтови и го учи nOCR на нивните форми. Избери ги фонтовите што ги користат твоите титлови.", + "xFontsSelected": "{0:#,##0} избрани", + "subtitleFonts": "Фонтови на титловите", + "emptyDatabase": "Празна база", + "startFromDatabase": "Започни од", + "startFromDatabaseHint": "Додај ги обучените знаци во копија од постоечка база (препорачано) или започни од празна", + "fontSizes": "Големини на фонт", + "fontSizesHint": "Големини на фонт во пиксели за исцртување, одделени со запирки, на пр. „30, 40“", + "numberOfLineSegmentsHint": "Линии што се проверуваат по знак - повеќе е построго, но побавно", + "enterDatabaseName": "Внеси име за базата", + "trainingFontXSizeYCharacterZ": "Обука на „{0}“ на {1} px: {2}", + "xLearned": "{0:#,##0} научени", + "xSkipped": "{0:#,##0} прескокнати", "charactersToTrain": "Знаци за тренирање", "letterCombinationsToTrain": "Комбинации букви што може да завршат во една слика", "importCharactersFromSubtitleFile": "Увези знаци од датотека со титл...", @@ -3866,6 +4277,8 @@ "drawZoomOut": "Зумирај оддалечи (Ctrl+-)", "drawResetView": "Ресетирај поглед (Ctrl+0)", "drawToggleGrid": "Вклучи/исклучи мрежа (Ctrl+G)", + "drawTogglePreview": "Смени преглед (F9)", + "drawPreviewFailed": "Прегледот не успеа - потребен е ffmpeg со libass (филтер subtitles)", "drawCopyToClipboard": "Копирај во таблата за исечоци (Ctrl+C)", "drawShapes": "Форми", "drawSelectedPoint": "Избран пункт", @@ -3873,16 +4286,86 @@ "drawSelectedLayer": "Избран слој", "drawToolX": "Алат: {0}", "drawHelpText": "Кликни за додавање точки • Enter/F8 за затворање на форма • Shift+влечи за поместување • Ctrl+скрол за зум", + "drawMoveToLayer": "Помести во слој", + "drawFlipHorizontal": "Преврти хоризонтално", + "drawFlipVertical": "Преврти вертикално", + "drawHideShape": "Скриј форма", + "drawShowShape": "Прикажи форма", + "drawHideLayer": "Скриј слој", + "drawShowLayer": "Прикажи слој", + "drawDeleteLayer": "Избриши слој", + "drawDeletePoint": "Избриши точка", + "drawCancelDrawing": "Откажи цртање", + "drawLayerX": "Слој {0}", + "drawImportSvg": "Увези SVG слика...", + "drawRotateClockwise": "Ротирај 90° во насока на стрелките на часовникот", + "drawConvertToCurve": "Конвертирај сегмент во крива", + "drawBackground": "Позадина", + "drawPosition": "Позиција", + "drawZoom": "Зумирање", + "drawShapeTool": "Алатка за форми", + "drawColorPickerTool": "Земи боја од форма или од позадината", + "drawShapeLibrary": "Библиотека со форми", + "drawShapeLibraryHint": "Повлечи на платното за да поставиш форма или кликни за стандардна големина. Shift ги задржува пропорциите.", + "drawAddToLibrary": "Додај во библиотеката со форми...", + "drawRemoveFromLibrary": "Отстрани од библиотеката со форми", + "drawShapeName": "Име на форма", + "drawCategorySpeechBubbles": "Балони за говор", + "drawCategoryArrows": "Стрелки", + "drawCategoryBasicShapes": "Основни форми", + "drawCategorySymbols": "Симболи", + "drawCategoryMyShapes": "Мои форми", + "drawShapeSpeechBubble": "Балон за говор", + "drawShapeSpeechBubbleRight": "Балон за говор, опашка десно", + "drawShapeSpeechBubbleUp": "Балон за говор, опашка горе", + "drawShapeOvalBubble": "Овален балон за говор", + "drawShapeBoxBubble": "Правоаголен балон за говор", + "drawShapeThoughtBubble": "Балон за мисла", + "drawShapeShoutBubble": "Балон за викање", + "drawShapeCaptionBox": "Кутија за натпис", + "drawShapeArrow": "Стрелка", + "drawShapeDoubleArrow": "Двојна стрелка", + "drawShapeChevron": "Шеврон", + "drawShapeCurvedArrow": "Закривена стрелка", + "drawShapeRoundedRectangle": "Заоблен правоаголник", + "drawShapeTriangle": "Триаголник", + "drawShapeDiamond": "Ромб", + "drawShapePentagon": "Петаголник", + "drawShapeHexagon": "Шестаголник", + "drawShapeOctagon": "Осумаголник", + "drawShapeStar": "Ѕвезда", + "drawShapeRing": "Прстен", + "drawShapePlus": "Плус", + "drawShapeBanner": "Банер", + "drawShapeHeart": "Срце", + "drawShapeCheck": "Штиклирање", + "drawShapeMusicNote": "Музичка нота", + "drawShapeMusicNotes": "Музички ноти", + "drawShapeLightning": "Молња", + "drawShapeCloud": "Облак", + "drawShapeMoon": "Месечина", + "drawShapeBadge": "Значка", + "drawSize": "Големина", + "drawLayer": "Слој", + "drawBackgroundVideoFrame": "Видео кадар (тековна позиција)", + "drawBackgroundVideoFrameAt": "Видео кадар на...", + "drawBackgroundImage": "Датотека со слика...", + "drawBackgroundNone": "Без позадина", + "drawBackgroundStretch": "Растегни ја сликата на платното", + "drawBackgroundOpacity": "Непрозирност на позадината", + "drawBackgroundVideoFrameFailed": "Не можеше да се земе видео кадар на {0}.", + "drawImages": "Слики", + "drawConvertToLine": "Конвертирај сегмент во линија", + "drawConvertShapeToCurves": "Конвертирај ги сите линии во криви", + "drawConvertShapeToLines": "Конвертирај ги сите криви во линии", + "drawRotateCounterClockwise": "Ротирај 90° спротивно од стрелките на часовникот", + "drawSvgImages": "SVG слики", + "drawSvgNoShapes": "Не се пронајдени пополнети форми или потези во SVG датотеката.", "progressBarTitle": "ASSA лента за напредок", "progressBarSettings": "Лента за напредок", - "progressBarPosition": "Позиција", - "progressBarBottom": "Дно", - "progressBarTop": "Врв", "mouseOverColor": "Боја при поминување со глувче", "clickedColor": "Боја при клик", "progressBarForeColor": "Боја на преднина", - "progressBarBackColor": "Боја на позадина", - "progressBarStyle": "Стил", "progressBarSquareCorners": "Квадратни агли", "progressBarRoundedCorners": "Заоблени агли", "progressBarChapters": "Поглавја", @@ -3891,8 +4374,6 @@ "progressBarXAdjustment": "X поправка", "progressBarYAdjustment": "Y поправка", "progressBarTextAlignment": "Порамнување на текст", - "progressBarTakePosFromVideo": "Примени позиција од видеото", - "progressBarPreview": "Преглед", "fontCollectorTitle": "Собирач на фонтови", "fontCollectorUsedIn": "Користен во", "fontCollectorFontFiles": "Датотека(и) со фонт", @@ -3939,9 +4420,7 @@ "resolutionResamplerVideoDiffers": "Резолуцијата на титлот ({0}x{1}) се разликува од резолуцијата на видеото ({2}x{3}).\nДа се промени титлот за да одговара на видеото?", "resolutionResamplerAskOnVideoOpen": "Прашај кога ќе се отвори видео со различна резолуција", "backgroundBoxGenerator": "Генерирај позадинско поле", - "backgroundBoxPadding": "Подлога", "backgroundBoxFillWidth": "Пополни ширина", - "backgroundBoxBoxColor": "Боја на поле", "backgroundBoxRadius": "Радиус", "backgroundBoxCircle": "Круг", "backgroundBoxSpikes": "Шипки", @@ -3953,12 +4432,9 @@ "backgroundBoxTornPaperDouble": "Разрезан хартија (горе и долу)", "backgroundBoxStarburst": "Звезден експлозија", "backgroundBoxScroll": "Свиткање / Папир", - "stylesTitle": "Напредни стилови за Sub Station Alpha", "stylesInFile": "Стилови во датотеката", "stylesSaved": "Стиловите се зачувани", - "category": "Категорија", "allCategories": "[Сите]", - "defaultCategory": "Стандардна", "newCategory": "Нова категорија...", "renameCategory": "Преименувај категорија...", "deleteCategory": "Избриши категорија", @@ -3978,13 +4454,26 @@ "graphics": "Графика", "copyToStorageStyles": "Копирај во складишните стилови", "copyToFileStyles": "Копирај во датотечните стилови", + "styleXAlreadyExistsInStorage": "Стил со име „{0}“ веќе постои во складиштето.\n\nДа се презапише или да се задржат двата (копијата добива ново име)?", + "styleXAlreadyExistsInFile": "Стил со име „{0}“ веќе постои во датотеката.\n\nДа се презапише или да се задржат двата (копијата добива ново име)?", + "styleNameCannotBeEmpty": "Името на стилот не може да биде празно.", + "styleNameXIsUsedMoreThanOnce": "Името на стилот „{0}“ го користат повеќе од еден стил во датотеката.", + "overwrite": "Презапиши", + "keepBoth": "Задржи ги двата", + "doThisForAllConflictingStyles": "Направи го ова за сите конфликтни стилови", "setStyleAsDefault": "Постави стил како стандард", "takeUsagesFromDotDotDot": "Применувања од...", "replaceStyleWithDotDotDot": "Замени стил со...", "noAttachmentsFound": "Не се пронајдени прилози во избраната ASSA датотека.", "deleteStyleQuestion": "Да се избрише стилот?", "deleteStylesQuestion": "Да се избришат стиловите?", + "deleteXStylesQuestion": "Дали сакаш да избришеш {0} стилови?", + "deleteXStylesFromStorageQuestion": "Дали сакаш да избришеш {0} стилови од складиштето?", + "deleteStyleXFromStorageQuestion": "Дали сакаш да го избришеш стилот „{0}“ од складиштето?", + "deleteStyleXFromFileQuestion": "Дали сакаш да го избришеш стилот „{0}“ од тековната датотека?", "openStyleImportFile": "Отвори титл датотека за увезување стилови", + "styleImportFiles": "Датотеки со стилови (.ass, .sty, Subtitle Edit 4 категории .template)", + "ssaStyleImportFiles": "Датотеки со стилови (.ssa, .ass, .sty)", "primary": "Главен", "secondary": "Секундарен", "applyOverrideTags": "Примени надворешни тагови", @@ -3999,7 +4488,6 @@ "spaceIncrease": "Зголемување на растојание", "popIn": "Поп влез", "spinIn": "Вртете се", - "playCurrent": "Пушти тековно", "setPosition": "Постави позиција", "rotation": "Ротација", "scaleX": "Скала X", @@ -4043,10 +4531,8 @@ "advancedEffectOldMovieDescription": "Симулира стар 35mm проектор со шум, винета и гребнатини", "advancedEffectNeonBurst": "Неон експлозија", "advancedEffectNeonBurstDescription": "Високоенергетски титри во стилот 'Shorts' со неон сјај и анимација за 'pop' скалирање", - "advancedEffectSettings": "Поставки", "advancedEffectSnowFlakeCount": "Број на снежни кристали", "advancedEffectStarfieldStarCount": "Број на ѕвезди", - "advancedEffectStarfieldSpeed": "Брзина", "advancedEffectGlitch": "Глитч", "advancedEffectGlitchDescription": "Дигитален глитч со хроматска аберација, бели светкави и дисторзиони слојеви", "advancedEffectBounceIn": "Отскок", @@ -4055,8 +4541,6 @@ "advancedEffectFirefliesDescription": "Топли жутокафени точки со сјај, кои плават органски низ екранот со пулсирачки светлина", "advancedEffectMatrix": "Матрикс", "advancedEffectMatrixDescription": "Падачки зелени колони со карактери, текстот се гради буква по буква од дождот", - "advancedEffectAudioBars": "Аудио ленти (форма на бран)", - "advancedEffectAudioBarsDescription": "Анимирани ленти на еквалайзер управувани со аудио брановата форма — лентите се лизгаат налево како бран и пулсираат со аудиото", "advancedEffectAudioPulse": "Аудио текст пулс", "advancedEffectAudioPulseDescription": "Текстот светли и пулсира со гласноста на аудиото — тихите делови се нормален текст, гласните пикови додаваат обоен ореол и малку зголемување", "advancedEffectConfetti": "Конфети експлозија", @@ -4070,7 +4554,6 @@ "advancedEffectFancyKaraokeGlow": "Сјај на активен збор", "advancedEffectFancyKaraokeActiveColor": "Активна боја", "advancedEffectFancyKaraokeInactiveColor": "Неактивна боја", - "advancedEffectFancyKaraokeInactiveOpacity": "Неактивна провидност (0-255)", "advancedEffectWordSpacingPixels": "Растојание (пиксели)", "advancedEffectSlowZoomOut": "Бавно оддалечување", "advancedEffectSlowZoomOutDescription": "Текстот почнува малку поголем и нежно се намалува до нормална големина за време на титлот", @@ -4086,7 +4569,6 @@ "advancedEffectSlideInLeftDescription": "Текстот се вметнува од лево надвор од екранот, задржува се, потоа излегува лево", "advancedEffectSlideInRight": "Слајд од десно", "advancedEffectSlideInRightDescription": "Текстот се вметнува од десно надвор од екранот, задржува се, потоа излегува десно", - "advancedEffectFadeInOut": "Fade in/out", "advancedEffectFadeInOutDescription": "Текстот се појавува во почетокот и исчезува на крајот на секој титл", "advancedEffectWordFlip3D": "3D превртување на зборови", "advancedEffectWordFlip3DDescription": "Секој збор се превиткува со 3D превртување и еластичен потскок додека се изговара — модерен стил на титлови за „Shorts“", @@ -4118,7 +4600,6 @@ "noPluginsInstalled": "Нема инсталирани приклучоци", "getPluginsOnline": "Земи приклучоци онлајн...", "getPluginsTitle": "Земи приклучоци", - "enabled": "Овозможено", "disabled": "Оневозможено", "notSupportedOnThisOs": "Не е поддржано на овој оперативен систем", "removePluginXConfirm": "Да се отстрани приклучокот „{0}“? Ова ја брише папката на приклучокот:{1}", @@ -4135,17 +4616,19 @@ "downloadingXPercent": "Преземање {0}%...", "pluginXInstalled": "„{0}“ инсталиран.", "couldNotInstallPluginX": "Не можеше да се инсталира „{0}“: {1}", - "notInstalled": "Не е инсталирано", "install": "Инсталирај", "reinstall": "Реинсталирај", - "update": "Ажурирај", "installedX": "Инсталирано ({0})", "updateAvailableXToY": "Достапно е ажурирање ({0} → {1})", "applyPluginToWhichLinesX": "Примени „{0}“ на:", "applyToSelectedLinesX": "Избрани линии ({0})", "applyToAllLinesX": "Сите линии ({0})", "updateAllXAvailable": "Ажурирај ги сите ({0})", - "updatingXOfY": "Ажурирање {0}/{1}..." + "updatingXOfY": "Ажурирање {0}/{1}...", + "doNotAskAgain": "Не прашувај повторно (смени во Управувај со приклучоци)", + "applyPluginsTo": "Примени приклучоци на", + "askEachTime": "Прашај секој пат", + "allLines": "Сите линии" }, "errorList": { "title": "Листај грешки", diff --git a/src/ui/Assets/Languages/Norwegian.json b/src/ui/Assets/Languages/Norwegian.json index eae594c586a..6ff0eb041c3 100644 --- a/src/ui/Assets/Languages/Norwegian.json +++ b/src/ui/Assets/Languages/Norwegian.json @@ -2,8 +2,48 @@ "Title": "Subtitle Edit", "TranslatedBy": "Gemini", "CultureName": "nb-NO", - "version": "v5.2.0-rc7", + "version": "v5.3.0", "General": { + "Prompt": "Ledetekst", + "Temperature": "Temperatur", + "Preset": "Forhåndsinnstilling", + "Output": "Utdata", + "OutputFormat": "Utdataformat", + "Other": "Annet", + "TimeCodeFormat": "Tidskodeformat", + "TopBottomMargin": "Topp/bunn marg", + "Theme": "Tema", + "Brightness": "Lysstyrke", + "ChooseColor": "Velg farge", + "LineX": "Linje {0}", + "PlayLine": "Spill av linje", + "MaxLineLength": "Maks linjelengde", + "MaxCharsPerSec": "Maks tegn/sek", + "MaxNumberOfLines": "Maks antall linjer", + "Subtitles": "Undertekster", + "ShotChanges": "Sceneskifter", + "Chapters": "Kapitler", + "Audio": "Lyd", + "Interjections": "Interjeksjoner", + "BlankLines": "Tomme linjer", + "EditWholeText": "Rediger hele teksten", + "NoTextInClipboard": "Ingen tekst på utklippstavlen", + "NoSubtitlesFoundTitle": "Ingen undertekster funnet", + "ReplacedXOccurrences": "Erstattet {0} forekomster", + "InvalidRegularExpressionX": "Ugyldig regulært uttrykk: {0}", + "DiscardChangesTitle": "Forkast endringer?", + "DownloadingXDotDotDot": "Laster ned {0}...", + "ImportTimeCodesDotDotDot": "Importer tidskoder...", + "NextChange": "Neste endring", + "PreviousChange": "Forrige endring", + "ChangeXOfY": "Endring {0} av {1}", + "TooLong": "For lang", + "TooShort": "For kort", + "Overlapping": "Overlappende", + "Detail": "Detalj", + "FixOcrErrors": "Fiks OCR-feil", + "RunningOcrXY": "Kjører OCR... {0}/{1}", + "LlamaCppDownloadEnginePrompt": "llama.cpp krever at llama-server-motoren lastes ned. Vil du laste ned nå?", "AssistedMove": "Assistert flytting", "AssistedMoveChooseMove": "Klikk et alternativ eller trykk nummeret for å flytte ord", "AssistedMoveDotDotDot": "Assistert flytting...", @@ -71,6 +111,24 @@ "Abort": "Avbryt", "Actor": "Skuespiller", "Actors": "Skuespillere", + "SetActorDotDotDot": "Angi skuespiller...", + "ActorPickerTitle": "Angi skuespiller", + "ActorPickerFilterHint": "Skriv for å filtrere, eller skriv navnet på en ny skuespiller", + "ActorPickerKeysHint": "Trykk et tall eller Enter for å angi skuespilleren. Alt+Opp/Ned endrer rekkefølgen, Delete fjerner skuespilleren.", + "ActorPickerNewActorX": "Ny skuespiller \"{0}\"", + "ActorPickerLinesSelectedX": "Valgte linjer: {0}", + "SetStyleDotDotDot": "Angi stil...", + "StylePickerTitle": "Angi stil", + "StylePickerFilterHint": "Skriv for å filtrere, eller skriv navnet på en ny stil", + "StylePickerKeysHint": "Trykk et tall (1-9, 0) for å angi stilen på alle valgte linjer.", + "StylePickerNewStyleX": "Ny stil \"{0}\"", + "StylePickerNewStyleInfo": "Trykk Enter for å legge til denne stilen med standardinnstillinger og angi den på de valgte linjene. Bruk \"Behandle stiler...\" for å endre skrift, farger og posisjon senere.", + "StylePickerCurrentStyleX": "Gjeldende stil: {0}", + "StylePickerLinesUsingStyleX": "Linjer som bruker denne stilen: {0}", + "StylePickerMarginsXYZ": "Venstre {0}, høyre {1}, vertikal {2}", + "StylePickerSetStyle": "_Angi stil", + "StylePickerManageStyles": "Behandle stiler...", + "StylePickerManageStylesHint": "Lukk dette vinduet og åpne stilbehandleren for å redigere skrifter, farger, posisjon og mer", "Add": "Legg til", "AddDotDotDot": "Legg til...", "AddToNamesListCaseSensitive": "Legg til i navneliste (skiller mellom store/små bokstaver)", @@ -79,7 +137,6 @@ "AdjustAlpha": "Juster alfa (gjennomsiktighet)", "AdjustDisplayDuration": "Juster visningsvarighet", "Adjustment": "Justering", - "Advanced": "Avansert", "AdvancedSettings": "Avanserte innstillinger", "After": "Etter", "Alignment": "Justering", @@ -115,7 +172,6 @@ "BatchMode": "Satsvis modus (batch)", "BdnXml": "BDN/xml", "Before": "Før", - "BeforeX": "Før \"{0}\"", "Beginning": "Begynnelse", "BluRaySup": "Blu-ray (sup)", "Bold": "Fet", @@ -127,7 +183,6 @@ "BookmarkEdit": "Rediger bokmerke", "BookmarkEditForSelectedLinesX": "Rediger bokmerke for {0} valgte linjer", "BookmarksList": "Vis bokmerker", - "BorderColor": "Kantfarge", "BorderStyle": "Kantstil", "BottomCenter": "Bunn-Senter", "BottomLeft": "Bunn-Venstre", @@ -152,7 +207,6 @@ "ChangeCasing": "Endre bokstavstørrelse", "ChangeFormatting": "Endre formatering", "ChangeFrameRate": "Endre bildefrekvens", - "ChangeLanguageFilter": "Endre språkfilter...", "ChangeOnce": "Endre én gang", "ChangeSpeed": "Endre hastighet", "Character": "Tegn", @@ -177,7 +231,6 @@ "ConversionCancelledByUser": "Konvertering avbrutt av bruker", "Convert": "Konverter", "Converted": "Konvertert", - "ConvertingDotDotDot": "Konverterer...", "ConvertingXofYDotDoDot": "Konverterer {0:#,###,##0}/{1:#,###,##0}...", "Copy": "Kopier", "CopyImageToClipboard": "Kopier bilde til utklippstavle", @@ -185,7 +238,6 @@ "CouldNotSaveFileXErrorY": "Kunne ikke lagre fil \"{0}\". Feil: {1}", "Count": "Antall", "Cps": "Tegn/sek", - "CurrentSubtitle": "Nåværende undertekst", "CurrentVideoPosition": "Nåværende videoposisjon", "Custom": "Egendefinert", "Cut": "Klipp ut", @@ -231,7 +283,6 @@ "Expand": "Utvid", "Export": "Eksporter", "ExportDotDotDot": "Eksporter...", - "ExportToX": "Eksporter til {0}", "ExtendAfter": "Utvid/forkort til linjen etter", "ExtendBefore": "Utvid/forkort til linjen før", "ExtendSelectedLinesToNextShotChangeOrNextSubtitle": "Utvid valgte linjer til neste sceneskifte (eller neste undertekst)", @@ -248,7 +299,6 @@ "FileExtension": "Filtype", "FileName": "Filnavn", "FileNameX": "Filnavn: {0}", - "FileNameXAndSize": "Filnavn: {0} ({1})", "FileSaved": "Fil lagret", "FileSavedToX": "Fil lagret i {0}", "FileXAlreadyExists": "Filen \"{0}\" finnes allerede.", @@ -258,8 +308,6 @@ "Find": "Finn", "FindNext": "Finn neste", "FindTextX": "Finn tekst - {0}", - "FiveHundredMilliseconds": "500 millisekunder", - "FiveSeconds": "Fem sekunder", "Fix": "Fiks", "FixCommonErrors": "Fiks vanlige feil", "FixRightToLeft": "Fiks høyre-til-venstre", @@ -283,14 +331,12 @@ "FoundXInLineYZ": "Fant \"{0}\" i linje {1}, posisjon {2}", "FoundXMatches": "Fant {0} treff", "FrameRate": "Bildefrekvens", - "FrameRateX": "Bildefrekvens: {0:0.0###}", "Frames": "Bilder (frames)", "From": "Fra", "FromCurrentVideoPosition": "fra nåværende videoposisjon", "FullScreen": "Fullskjerm", "Gap": "Mellomrom", "General": "Generelt", - "GeneralText": "Generell tekst", "Generate": "Generer", "GenerateImportShotChanges": "Generer/importer sceneskifter", "Generating": "Genererer...", @@ -308,12 +354,8 @@ "Help": "Hjelp", "Hex": "Hex", "Hide": "Skjul", - "HidePreview": "Skjul forhåndsvisning", "History": "Historikk", "Horizontal": "Horisontal", - "HourMinutesSecondsDecimalSeparatorMilliseconds": "Time:min:sek{0}ms", - "HourMinutesSecondsFrames": "Time:min:sek:bilder", - "Ip": "IP", "Id": "ID", "Image": "Bilde", "ImageSaved": "Bilde lagret", @@ -372,6 +414,7 @@ "MergeSelectedLinesDialog": "Slå sammen valgte linjer som dialog", "MergeWithLineAfterAndAutoBreak": "Slå sammen med linjen etter og automatisk linjedeling", "MergeWithLineAfterKeepBreaks": "Slå sammen med linjen etter (behold linjeskift)", + "MergeWithLineAfterAndUnbreak": "Slå sammen med neste linje og fjern linjedeling", "MergeWithLineBeforeAndAutoBreak": "Slå sammen med linjen før og automatisk linjedeling", "MergeWithLineBeforeKeepBreaks": "Slå sammen med linjen før (behold linjeskift)", "MiddleCenter": "Midt-Senter", @@ -386,11 +429,11 @@ "MoveAllShotChangeOneFrameForward": "Flytt alle sceneskifter ett bilde fremover", "MultiMode": "Multimodus", "MoveDown": "Flytt ned", + "Increase": "Øk", + "Decrease": "Reduser", "MoveUp": "Flytt opp", "MultipleReplace": "Søk og erstatt flere", - "Mute": "Stum", "Name": "Navn", - "Negative": "Negativ", "New": "Ny", "NewDotDotDot": "Ny...", "NewProfile": "Ny profil", @@ -418,20 +461,15 @@ "OffsetY": "Forskyvning Y", "Ok": "_OK", "OneFile": "Én fil", - "OneHundredMilliseconds": "100 millisekunder", - "OneSecond": "Ett sekund", "OneSecondBack": "Ett sekund bakover", "OneSecondForward": "Ett sekund fremover", - "OnlineVideoFeatureNotAvailable": "Funksjonen er ikke tilgjengelig for online video", "OpenContainingFolder": "Åpne inneholdende mappe", "OpenDictionaryFolder": "Åpne ordboksmappe", "OpenFile": "Åpne fil", "OpenImageBasedSubtitle": "Åpne bildebasert undertekst", "OpenImageFile": "Åpne bildefil", - "OpenOriginalSubtitleFile": "Åpne original undertekstfil...", "OpenOriginalSubtitleFileTitle": "Åpne original undertekstfil", "OpenOutputFolder": "Åpne utdatamappe", - "OpenSubtitle": "Åpne undertekst...", "OpenSubtitleFileTitle": "Åpne undertekstfil", "OpenSubtitles": "Åpne undertekster...", "OpenVideoFile": "Åpne videofil...", @@ -444,11 +482,6 @@ "OutlineWidth": "Omrissbredde", "OutputFolder": "Utdatamappe", "OutputProperties": "Utdataegenskaper", - "Overlap": "Overlapp", - "OverlapNextX": "Overlapp neste ({0:#;##0.###})", - "OverlapPreviousLineX": "Overlapp forrige linje ({0:#;##0.###})", - "OverlapStartAndEnd": "Overlapp start og slutt", - "OverlapX": "Overlapp ({0:#;##0.###})", "OverwriteExistingFiles": "Overskriv eksisterende filer", "OverwriteFilesInFolderX": "Overskriv filer i mappe: \"{0}\"", "OverwriteQuestion": "Overskrive?", @@ -461,6 +494,7 @@ "Percent": "Prosent", "PickLayer": "Velg lag", "PickOllamaModel": "Velg Ollama-modell", + "PickModel": "Velg modell", "LlamaCppUseRemoteServer": "Bruk ekstern server (URL)", "PickOutputFolder": "Velg utdatamappe", "PickResolutionFromCurrentVideo": "Hent oppløsning fra gjeldende video", @@ -504,7 +538,6 @@ "Refresh": "Oppdater", "Region": "Region", "RegularExpression": "Regulært uttrykk (Regex)", - "RegularExpressionIsNotValid": "Regulært uttrykk er ikke gyldig!", "RelativeToCurrentVideoPosition": "Relativt til gjeldende videoposisjon", "Remove": "Fjern", "RemoveAlignment": "Fjern justering", @@ -529,7 +562,7 @@ "Reset": "Tilbakestill", "ResizePanels": "Endre størrelse på paneler", "Resolution": "Oppløsning", - "ResolutionX": "Oppløsning: {0}", + "Retry": "Prøv igjen", "ReverseRightToLeftStartEnd": "Reverser høyre-til-venstre start/slutt", "Right": "Høyre", "RightToLeft": "Høyre til venstre", @@ -567,8 +600,6 @@ "SelectedlinesX": "Valgte linjer: {0}", "Sensitivity": "Følsomhet", "Separator": "Skilletegn", - "SessionKey": "Øktnøkkel", - "SessionKeyGenerate": "Generer ny nøkkel", "SetEnd": "Sett slutt", "SetEndAndGoToNext": "Sett slutt og gå til neste", "SetEndAddNewAndGoToNew": "Sett slutt, legg til ny og gå til ny", @@ -591,8 +622,9 @@ "ShadowColor": "Skyggefarge", "ShadowWidth": "Skyggebredde", "ShiftLineBy": "Forskyv linje med", + "ShotIn": "Skudd inn", + "ShotOut": "Skudd ut", "Shortcut": "Hurtigtast", - "ShortcutX": "Hurtigtast: {0}", "Shortcuts": "Hurtigtaster", "Show": "Vis", "ShowActorColumn": "Vis \"Skuespiller\"-kolonne", @@ -603,17 +635,19 @@ "ShowStartColumn": "Vis \"Start\"-kolonne", "ShowHideColumn": "Vis \"Skjul\"-kolonne", "ShowHistory": "Vis historikk", + "ClearHistory": "Tøm historikk", + "RemoveFromHistory": "Fjern fra historikk", "ShowLayerColumn": "Vis \"Lag\"-kolonne", "ShowPreview": "Vis forhåndsvisning", "ShowShotChangesList": "Vis liste over sceneskifter", + "ShowShotInColumn": "Vis kolonnen \"Skudd inn\"", + "ShowShotOutColumn": "Vis kolonnen \"Skudd ut\"", "ShowStyleColumn": "Vis \"Stil\"-kolonne", "ShowTeletext": "Vis tekst-TV-kolonne i listevisning", "ShowTimeCodes": "Vis tidskoder", "ShowWpmColumn": "Vis \"Ord/min\"-kolonne", "ShowPixelWidthColumn": "Vis \"Pikselbredde\"-kolonne", "Shrink": "Krymp", - "SingleBox": "Enkeltboks", - "SingleLineLengths": "Enkeltlinjelengde:", "SingleMode": "Enkeltmodus", "TextTotalLength": "Tekst - total lengde", "TextSingleLineMaxLength": "Tekst - maks enkeltlinjelengde", @@ -662,16 +696,16 @@ "Strikeout": "Gjennomstrek", "Style": "Stil", "StyleExaggeration": "Stiloverdrivelse", - "StyleLanguage": "Stil / Språk", "Styles": "Stiler", "SubtitleFile": "Undertekstfil", + "SubtitleFileChangedOutsideX": "Filen \"{0}\" ble endret utenfor Subtitle Edit.\n\nVil du laste den inn på nytt og miste endringene dine?", "SubtitleFileName": "Undertekstfilnavn", "SubtitleFileSaved": "Undertekstfil lagret", "SubtitleFileSavedToX": "Undertekstfil lagret i {0}", "SubtitleFiles": "Undertekstfiler", "SubtitleFormats": "Undertekstformater", "SubtitleLoadedX": "Undertekst lastet: {0}", - "SubtitleXOfY": "Undertekst {0} av {1}", + "SubtitleReloadedChangedOutsideX": "Undertekst lastet inn på nytt (endret utenfor Subtitle Edit): {0}", "Suffix": "Suffiks", "Suggestions": "Forslag", "Sync": "Synkronisering", @@ -683,7 +717,6 @@ "TeletextColor": "Tekst-TV-farge", "TeletextLine": "Tekst-TV-linje", "TenHours": "10 timer", - "TenMilliseconds": "10 millisekunder", "Text": "Tekst", "TextColor": "Tekstfarge", "TextFiles": "Tekstfiler", @@ -710,9 +743,6 @@ "TopRight": "Topp-Høyre", "Top": "Øverst", "TotalAdjustmentX": "Total justering: {0}", - "TotalFramesX": "Totalt antall bilder: {0:#;##0.##}", - "TotalLengthX": "Total lengde: {0}", - "TotalLengthXSplitLine": "Total lengde: {0} (delt linje!)", "Translate": "Oversett", "TranslatePercentX": "Oversetter: {0}%", "TranslateRow": "Oversett rad", @@ -721,6 +751,7 @@ "Type": "Type", "Unbreak": "Fjern linjedeling", "UnbreakLines": "Fjern linjedeling på linjer", + "Undelete": "Angre sletting", "Underline": "Understrek", "Undo": "Angre", "Unknown": "Ukjent", @@ -740,13 +771,11 @@ "Usages": "Bruk", "Use": "Bruk", "UseAlways": "Bruk alltid", - "UseLargerFontForThisWindow": "Bruk større skrift i dette vinduet", "UseOnce": "Bruk én gang", "UseOutputFolder": "Bruk utdatamappe", "UseSourceFolder": "Bruk kildemappe", "UseSourceResolution": "Bruk kildeoppløsning", "UserName": "Brukernavn", - "UserNameAlreadyInUse": "Brukernavn allerede i bruk", "Vertical": "Vertikal", "Video100MsBack": "Video, 100 millisekunder bakover", "Video100MsForward": "Video, 100 millisekunder fremover", @@ -760,14 +789,25 @@ "VideoCustom3ForwardX": "Video, egendefinerte millisekunder ({0:#,###,##0}) fremover, 3", "VideoCustom4BackX": "Video, egendefinerte millisekunder ({0:#,###,##0}) bakover, 4", "VideoCustom4ForwardX": "Video, egendefinerte millisekunder ({0:#,###,##0}) fremover, 4", - "VideoEncodingX": "Videokoding: {0}", + "VideoCustom1BackAndPauseX": "Video, egendefinerte millisekunder ({0:#,###,##0}) tilbake og pause, 1", + "VideoCustom1ForwardAndPauseX": "Video, egendefinerte millisekunder ({0:#,###,##0}) fremover og pause, 1", + "VideoCustom2BackAndPauseX": "Video, egendefinerte millisekunder ({0:#,###,##0}) tilbake og pause, 2", + "VideoCustom2ForwardAndPauseX": "Video, egendefinerte millisekunder ({0:#,###,##0}) fremover og pause, 2", + "VideoCustom3BackAndPauseX": "Video, egendefinerte millisekunder ({0:#,###,##0}) tilbake og pause, 3", + "VideoCustom3ForwardAndPauseX": "Video, egendefinerte millisekunder ({0:#,###,##0}) fremover og pause, 3", + "VideoCustom4BackAndPauseX": "Video, egendefinerte millisekunder ({0:#,###,##0}) tilbake og pause, 4", + "VideoCustom4ForwardAndPauseX": "Video, egendefinerte millisekunder ({0:#,###,##0}) fremover og pause, 4", "VideoExtension": "Videofiltype", "VideoFile": "Videofil", "VideoFileGenerated": "Videofil generert", "VideoFileGeneratedX": "Videofil generert: \"{0}\"", + "VideoFilesGenerated": "Videofiler generert", + "XVideosGenerated": "{0} videoer generert", + "XOfYVideosGenerated": "{0} av {1} videoer generert", + "SavedInX": "Lagret i {0}", + "SavedInXFolders": "Lagret i {0} mapper", "VideoFiles": "Videofiler", "VideoAndAudioFiles": "Video- og lydfiler", - "VideoInformation": "Videoinfo", "VideoOffset": "Videoforskyvning", "VideoOneFrameBack": "Video, ett bilde bakover", "VideoOneFrameForward": "Video, ett bilde fremover", @@ -778,7 +818,6 @@ "VideoPlayer": "Videospiller", "VideoPosition": "Videoposisjon", "VideoResolution": "Videooppløsning", - "ViewX": "Vis {0}", "Visible": "Synlig", "Voice": "Stemme", "Volume": "Volum", @@ -787,9 +826,7 @@ "WaveformCenterOnVideoPosition": "Sentrer bølgeform på videoposisjon", "WaveformPasteFromClipboard": "Lim inn fra utklippstavle", "WaveformSpectrogram": "Bølgeform/spektrogram", - "WebServiceUrl": "Nettadresse for webtjeneste", "Width": "Bredde", - "WindowPositionAndSize": "Vindusposisjon og -størrelse", "WordsPerMin": "Ord/min", "PixelWidth": "Pikselbredde", "Wpm": "Ord/min", @@ -803,8 +840,6 @@ "NoBookmarksFound": "Ingen flere bokmerker funnet", "XRequiresAnApiKey": "{0} krever en API-nøkkel", "XRequiresAValidUrl": "{0} krever en gyldig URL (f.eks. \"http://...\" eller \"https://...\")", - "XSeconds": "{0:0.0##} sekunder", - "XSubtitles": "{0:#,###,##0} undertekster", "Yes": "Ja", "ZeroBytes": "0 byte", "CopyToClipboard": "Kopier til utklippstavle", @@ -826,10 +861,8 @@ "PlaybackSpeed": "Avspillingshastighet", "HoursMinutesSecondsMilliseconds": "TT:MM:SS.FFF", "ImageFiles": "Bildefiler", - "OpenAiCompatibleStt": "OpenAI-kompatibel STT", "OpenAiCompatibleSttEndpoint": "STT-endepunkt-URL", "OpenAiCompatibleSttApiKey": "API-nøkkel", - "OpenAiCompatibleSttModel": "Modell", "OpenAiCompatibleSttExtraHeaders": "Ekstra hoder", "OpenAiCompatibleSttTimeout": "Tidsavbrudd (sekunder)", "OpenAiCompatibleSttLanguage": "Språkhint", @@ -839,6 +872,9 @@ "DashScopeSttRegion": "Region", "DashScopeSttEnableWords": "Tidsstempler på ordnivå", "DashScopeSttRegionKeyHint": "Merk: API-nøkler for Alibaba Cloud Model Studio er regionsspesifikke - sørg for at den valgte regionen samsvarer med regionen der API-nøkkelen ble opprettet (Kina vs. internasjonal).", + "GoogleCloudSttProjectId": "Prosjekt-ID (kun for Application Default Credentials)", + "GoogleCloudSttBucketName": "Lagringsbøtte (tom = automatisk)", + "GoogleCloudSttDynamicBatching": "Dynamisk satsvis behandling (ca. 5x billigere, ingen garanti for ventetid)", "OnlineSttApiKeyMissing": "En API-nøkkel er påkrevd. Skriv inn API-nøkkelen din og prøv igjen.", "OpenAiCompatibleSttAutoTranscribeOnAudioSelection": "Transkriber nytt bølgeformutvalg automatisk via tale-til-tekst", "OpenAiCompatibleSttStream": "Strøm svar", @@ -848,11 +884,9 @@ "ConfigurationRequired": "Konfigurasjon kreves", "TranscriptionError": "Transkripsjonsfeil", "TranscriptionComplete": "Transkripsjon fullført", - "TranscribingWithOpenAi": "Transkriberer med OpenAI-tjenesten...", "ProcessingResponse": "Behandler svar...", "UnauthorizedApiKey": "Uautorisert: Ugyldig API-nøkkel eller utilstrekkelige tillatelser.", "RequestTimeout": "Forespørsel tidsavbrutt: Serveren brukte for lang tid på å svare.", - "NoSegmentsReturned": "Ingen segmenter returnert fra transkripsjonstjenesten.", "OpenAiCompatibleSttUrlMissing": "URL for OpenAI-kompatibelt STT-endepunkt er påkrevd. Skriv inn en URL og prøv igjen.", "OpenAiCompatibleSttUrlNotResponding": "Det OpenAI-kompatible STT-endepunktet svarte ikke:\n{0}\n\nKontroller URL-en og at serveren kjører.", "TranscriptionFailed": "Transkripsjon mislyktes", @@ -868,6 +902,9 @@ "CharactersPerSecond": "Tegn/sekund: {0}", "ChooseColumn": "Velg kolonne", "ColumnPaste": "Lim inn i kolonne", + "CommandPaletteTitle": "Kommandopalett", + "CommandPaletteSearchPlaceholder": "Skriv for å søke etter kommandoer...", + "CommandPaletteNoCommandsFound": "Ingen samsvarende kommandoer", "CreatedEmptyTranslation": "Opprettet tom oversettelse fra gjeldende undertekst", "DeleteText": "Slett tekst", "DeleteTextAndShiftCellsUp": "Slett tekst og flytt celler opp", @@ -906,18 +943,20 @@ "NumberOfLinesEvenlyDistributedX": "Fordelte {0} linjer jevnt", "OneLineCopiedFromOriginal": "Én linje kopiert fra original undertekst", "OneLineCopiedToOriginal": "Én linje kopiert til original undertekst", + "OnlineOnlyVideo": "Video kun lagret på nett", + "OnlineOnlyVideoXSizeYDownloadAndOpen": "Videofilen \"{0}\" ({1}) er kun lagret på nett, for eksempel i Dropbox eller iCloud Drive, og må lastes ned før den kan åpnes.\n\nVil du laste den ned og åpne den nå?", "OneLineMerged": "Én linje slått sammen", "OneLineSwitched": "Én linje byttet", "OverwriteExistingCells": "Overskriv eksisterende celler", "OverwriteOrShiftCellsDown": "Overskriv/flytt celler ned", "ParsingMatroskaFile": "Analyserer Matroska-fil...", + "ReadingDvdSubtitles": "Leser DVD-undertekster...", "PasteFromClipboardDotDotDot": "Lim inn fra utklippstavle...", "RedoPerformed": "Gjør om utført", "RedoPerformedXActionLeft": "Gjør om utført (handlinger igjen: {0})", "RemovedUnicodeControlCharactersX": "Fjernet Unicode-kontrolltegn fra {0} linjer", "RemovedXBlankLines": "Fjernet {0} tomme linjer", "ReplacedXWithYCountZ": "Erstattet \"{0}\" med \"{1}\" ({2} forekomster)", - "ReplacedXWithYInLineZ": "Erstattet \"{0}\" med \"{1}\" i linje {2}", "ReversedStartAndEndingsForRightToLeftX": "Reverserte start og slutt for høyre-til-venstre i {0} linjer", "RuleProfileIsX": "Regelprofil er nå \"{0}\"", "SaveLanguageFile": "Lagre språkfil", @@ -925,7 +964,6 @@ "ShiftTextCellsDown": "Flytt tekstceller ned", "SingleLineLength": "Linjelengde: ", "SpeedIsNowX": "Hastighet er nå \"{0}\"", - "SpellCheckResult": "Stavekontroll fullført. \n\n• Endrede ord: {0}\n• Hoppet over ord: {1}", "SubtitleGridFormattingX": "Rutenettformatering: {0}", "SubtitleImportedFromMatroskaFile": "Undertekst importert fra Matroska-fil", "TextDown": "Tekst ned", @@ -952,13 +990,14 @@ "TrimmedXLines": "Trimmet {0} undertekstlinjer", "PastedXLinesOverSelectedLines": "Limte inn {0} linje(r) over de valgte linjene", "PastedXOfYLinesOverSelectedLines": "Limte inn {0} av {1} linje(r) over de valgte linjene - resten fikk ikke plass i utvalget", + "InsertedXLinesFromClipboard": "Satte inn {0} linje(r) fra utklippstavlen", "OpenOriginalDifferentNumberOfSubtitlesXY": "Den originale undertekstfilen har ikke samme antall undertekster som gjeldende undertekstfil.\n\n• Originale undertekster: {0}\n• Gjeldende undertekster: {1}", - "ImportXMatchingOriginalLines": "Importere {0} samsvarende originale undertekster?", "OriginalTextReadOnly": "Original tekst (skrivebeskyttet)", "OriginalTextEditMode": "Original tekst (redigeringsmodus)", "OriginalIsReadOnlyNotSaved": "Den originale underteksten er en skrivebeskyttet referanse og ble ikke lagret", "OriginalIsEmptyNotSaved": "Den originale underteksten har ingen tekst i det hele tatt og ble ikke lagret", "OriginalIsReadOnlyReference": "Den originale underteksten er åpnet som en skrivebeskyttet referanse", + "CloseTranslationQuestionXY": "Lukke oversettelsen \"{0}\"?\n\nDen originale underteksten \"{1}\" blir underteksten du redigerer. Selve oversettelsesfilen endres ikke.", "AllowEditOfOriginalSubtitle": "Tillat redigering av original undertekst", "ShowAllOriginalLinesX": "Vis alle originale linjer ({0} har ingen match her)", "ShowAllOriginalLinesHint": "Linjene uten match vises som ekstra rader, slik at du kan se hva oversettelsen mangler.", @@ -993,6 +1032,7 @@ "FileExportedInFormatXToY": "Fil eksportert i formatet {0} til {1}", "FileExportedInFormatXToFileY": "Fil eksportert i formatet \"{0}\" til fil \"{1}\"", "FixedXLines": "Fikset {0} linjer", + "ToolXChangedYLines": "{0}: {1} linjer endret", "TranscriptionCompletedWithXLines": "Transkripsjon fullført med {0} linjer", "OpenSubtitleFileX": "Åpne undertekstfilen \"{0}\"?", "ReplacedXOccurrences": "Erstattet {0} forekomster", @@ -1056,14 +1096,15 @@ "MultipleReplace": "_Søk og erstatt flere...", "FillSelectedLinesWithClipboard": "Fyll valgte linjer med utklippstavletekst", "GoToLineNumber": "_Gå til linjenummer...", + "CommandPalette": "Kommando_palett...", "RightToLeftMode": "Høyre-til-venstre-modus", "ModifySelectionDotDotDot": "Endre _utvalg...", "Tools": "_Verktøy", - "ToolsSelectedLines": "_Verktøy (valgte linjer)", "AdjustDurations": "_Juster varigheter...", "ApplyDurationLimits": "Bruk varighets_grenser...", "BatchConvert": "_Satsvis konvertering...", "BeautifyTimeCodes": "Forskjønn tidskoder...", + "ImproveTimeCodes": "Forbedre tidskoder (tvungen justering)...", "BridgeGaps": "Tett _hull...", "ApplyMinGap": "Bruk min. mellomrom mellom undertekster...", "ChangeCasing": "_Endre bokstavstørrelse...", @@ -1202,6 +1243,9 @@ "SelectCurrentLineWhilePlayingHint": "Velg gjeldende undertekst under avspilling {0}", "VideoPosition": "Videoposisjon {0}", "VideoPositionTextBox": "Tekstboks for videoposisjon {0}", + "ToolbarLineBreakX": "Linjeskift {0} (resten av verktøylinjen fortsetter på en ny rad)", + "InitialText": "Opprinnelig tekst for valgt linje", + "InitialTextHint": "Teksten i den valgte linjen slik den var da linjen ble valgt", "HideWaveformToolbar": "Skjul verktøylinje {0}", "ResetZoomAndSpeed": "Tilbakestill zoom og avspillingshastighet {0}", "RemoveBlankLines": "Fjern tomme linjer {0}", @@ -1215,6 +1259,15 @@ "TextPlayHint": "Spill av gjeldende undertekst og stopp ved slutten {0}", "TextPauseHint": "Pause avspilling {0}", "TextNextHint": "Spill av neste undertekst og stopp ved slutten {0}", + "MoveSelectedLines": "Flytt valgte linjer (tilbake/fremover-knapper)", + "MoveSelectedLinesAndFollowing": "Flytt valgte linjer og alle etterfølgende (tilbake/fremover-knapper)", + "MoveAllLines": "Flytt alle linjer (tilbake/fremover-knapper)", + "MoveSelectedLinesBackHint": "Flytt valgte linjer {0} ms tilbake {1}", + "MoveSelectedLinesForwardHint": "Flytt valgte linjer {0} ms fremover {1}", + "MoveSelectedLinesAndFollowingBackHint": "Flytt valgte linjer og alle etterfølgende {0} ms tilbake {1}", + "MoveSelectedLinesAndFollowingForwardHint": "Flytt valgte linjer og alle etterfølgende {0} ms fremover {1}", + "MoveAllLinesBackHint": "Flytt alle linjer {0} ms tilbake {1}", + "MoveAllLinesForwardHint": "Flytt alle linjer {0} ms fremover {1}", "GuessStartNoLineSelected": "Gjett start: ingen linje valgt", "GuessStartTimeCodesLocked": "Gjett start: tidskodene er låst", "GuessStartNoWaveform": "Gjett start: ingen bølgeform", @@ -1263,20 +1316,66 @@ "CompareOnlyInOneFile": "Kun i én fil", "CompareTextOrTimeDifference": "Tekst-/tidsforskjell", "CompareNumberDifference": "Nummerforskjell", - "IgnoreLineBreaks": "Ignorer linjeskift", "IgnoreWhitespace": "Ignorer mellomrom", "IgnoreWhitespaceHint": "Linjer som bare skiller seg i mellomrom, tabulatorer eller linjeskift regnes ikke som forskjellige", "IgnoreFormatting": "Ignorer formatering", - "OnlyLookForDifferencesInText": "Se kun etter forskjeller i tekst", - "CannotCompareWithImageBasedSubtitles": "Kan ikke sammenligne med bildebaserte undertekster", - "StatisticsTitle": "Statistikk", "IgnoreFormattingHint": "Linjer som bare skiller seg i formateringskoder, som eller {\\an8}, regnes ikke som forskjellige", "ShowOnlyDifferencesInText": "Kun forskjeller i tekst", + "IgnoreNumbering": "Ignorer nummerering", + "IgnoreNumberingHint": "Linjer som bare har forskjellig nummer, regnes ikke som forskjellige", + "IgnoreTimeDifferenceMs": "Tidstoleranse (ms)", + "IgnoreTimeDifferenceMsHint": "Start- og sluttider som avviker med så mange millisekunder eller mindre, regnes ikke som forskjellige", + "CompareDifferences": "Forskjeller", + "CompareTextDifferences": "Tekstforskjeller", + "CompareCurrent": "Gjeldende", + "CompareReference": "Referanse", + "CompareEditable": "Redigerbar", + "CompareEditableHint": "Endringer gjort her overføres til underteksten når du klikker Bruk", + "CompareReadOnly": "Skrivebeskyttet", + "CompareTakeFromReference": "Hent tekst og timing fra referansen", + "CompareInsertFromReference": "Sett inn denne linjen i gjeldende undertekst", + "CompareDeleteFromCurrent": "Slett denne linjen fra gjeldende undertekst", + "CompareTakeText": "Hent tekst", + "CompareTakeTiming": "Hent timing", + "CompareEditLine": "Rediger linje", + "CompareEditHint": "Ctrl+Enter for å lagre, Esc for å avbryte", + "CompareEdited": "Redigert", + "CompareOnePendingChange": "1 ventende endring", + "CompareXPendingChanges": "{0} ventende endringer", + "CompareDiscardXChanges": "Forkaste de {0} endring(ene) gjort i Sammenlign?", + "CompareXChangesApplied": "Sammenlign: {0} endring(er) brukt", + "CompareChangeTextX": "#{0} tekst fra referanse", + "CompareChangeTimingX": "#{0} timing fra referanse", + "CompareChangeTextAndTimingX": "#{0} tekst og timing fra referanse", + "CompareChangeEditedX": "#{0} redigert", + "CompareChangeInsertedX": "#{0} satt inn", + "CompareChangeDeletedX": "#{0} slettet", + "CompareSyncPoint": "Synkroniseringspunkt", + "CompareSyncPointHint": "Synkroniseringspunkt - disse to linjene vises alltid som et par, og linjene over og under justeres hver for seg", + "CompareSyncPickCurrent": "Synkroniseringspunkt: bruk denne gjeldende linjen", + "CompareSyncPickReference": "Synkroniseringspunkt: bruk denne referanselinjen", + "CompareSyncRemove": "Fjern synkroniseringspunkt", + "CompareClearXSyncPoints": "Fjern synkroniseringspunkter ({0})", + "CompareSyncCurrentPickedX": "Gjeldende #{0} valgt som synkroniseringspunkt - velg den tilsvarende referanselinjen og klikk Synkroniser", + "CompareSyncReferencePickedX": "Referanse #{0} valgt som synkroniseringspunkt - velg den tilsvarende gjeldende linjen og klikk Synkroniser", + "CompareSyncWithCurrentX": "Synkroniser med gjeldende #{0}", + "CompareSyncWithReferenceX": "Synkroniser med referanse #{0}", + "CompareSyncApply": "Synkronisering", + "CompareSyncPointSetXY": "Synkroniseringspunkt angitt: gjeldende #{0} og referanse #{1} vises nå som et par", + "CompareSyncAlreadyPairedXY": "Gjeldende #{0} og referanse #{1} vises allerede som et par med samme start - ingenting å synkronisere", + "CompareSyncPointShiftedXYZW": "Synkroniseringspunkt angitt: gjeldende #{0}-#{1} forskjøvet {2} for å starte med referanse #{3}", + "CompareChangeSyncShiftXYZ": "#{0}-#{1} forskjøvet {2} (synkroniseringspunkt)", + "CompareTimingDeltaHint": "Hvor mye senere (+) eller tidligere (−) referansen starter og slutter enn gjeldende linje", "LoadXFromFile": "Last inn \"{0}\" fra fil", + "CompareLoadSavedFile": "Last inn lagret fil", "SaveCompareHtmlTitle": "Lagre HTML-fil for sammenligning", "PickMatroskaTrackX": "Velg Matroska-spor - {0}", "PickTransportStreamTrackX": "Velg transportstrømspor - {0}", + "Chapters": "Kapitler", + "DvdVobFilesMissingX": "VOB-filer mangler ({0}% funnet)", "PickMp4TrackX": "Velg MP4-spor - {0}", + "PickMxfTrackX": "Velg MXF-spor - {0}", + "PickMpegTrackX": "Velg MPEG-spor - {0}", "RosettaProperties": "Timed Text Rosetta IMSC-egenskaper", "RosettaFontSize": "Skriftstørrelse (radhøyde)", "PropertyTimeBase": "Tidsbase", @@ -1286,7 +1385,6 @@ "PropertyDefaultRegion": "Standardregion", "PropertyStyleAttributeName": "Navn på stilattributt", "PropertyTimeCodeFormat": "Tidskodeformat", - "PropertyFileExtension": "Filtype", "PropertyTopOrigin": "Toppunkt", "PropertyTopExtent": "Topputstrekning", "PropertyBottomOrigin": "Bunnpunkt", @@ -1294,13 +1392,9 @@ "XProperties": "{0} egenskaper", "EbuSaveOptions": { "Title": "EBU-lagringsalternativer", - "GeneralSubtitleInformation": "Generell undertekstinformasjon", "CodePageNumber": "Kodesidenummer", "DiskFormatCode": "Diskformatkode", "DisplayStandardCode": "Visningsstandardkode", - "ColorRequiresTeletext": "Farger krever tekst-TV!", - "AlignmentRequiresTeletext": "Justering krever tekst-TV!", - "TeletextCharsShouldBe38": "'Maks antall tegn per rad' for tekst-TV bør være 38!", "CharacterCodeTable": "Tegntabell", "LanguageCode": "Språkkode", "OriginalProgramTitle": "Original programtittel", @@ -1317,7 +1411,6 @@ "MaxNumberOfDisplayableRows": "Maks antall rader", "DiskSequenceNumber": "Disksekvensnummer", "TotalNumberOfDisks": "Totalt antall disker", - "Import": "Importer...", "TextAndTimingInformation": "Tekst- og tidsinformasjon", "JustificationCode": "Justeringskode", "VerticalPosition": "Vertikal posisjon", @@ -1334,11 +1427,6 @@ "Errors": "Feil", "ErrorsX": "Feil: {0}", "MaxLengthError": "Linje {0} overskrider maks lengde ({1}) med {2}: {3}", - "TextUnchangedPresentation": "Uendret presentasjon", - "TextLeftJustifiedText": "Venstrejustert tekst", - "TextCenteredText": "Sentrert tekst", - "TextRightJustifiedText": "Høyrejustert tekst", - "UseBoxForOneNewLine": "Sjekk 'Bruk boks rundt teksten' kun for én ny linje", "MaxLengthErrorTeletextColored": "Linje {0}-{1}: 36 (ikke {2}) skal være maksimalt antall tegn for farget tekst med dobbel høyde", "MaxLengthErrorTeletextWhite": "Linje {0}-{1}: 37 (ikke {2}) skal være maksimalt antall tegn for hvit tekst med dobbel høyde", "MaxLengthErrorTeletextSingleHeight": "Linje {0}: 38 (ikke {1}) skal være maksimalt antall tegn for hvit tekst med enkel høyde", @@ -1363,22 +1451,29 @@ "FormattingDotDotDot": "Formatering...", "ImageBasedSubtitleForEditDotDotDot": "Bildebasert undertekst for redigering...", "ImageBasedSubtitleForOcrDotDotDot": "Bildebasert undertekst for OCR...", + "DvdSubtitlesDotDotDot": "Undertekster fra DVD (IFO/VOB)...", + "TitleImportDvd": "Importer undertekster fra DVD", + "DvdIfoFile": "IFO-fil", + "DvdVobFiles": "VOB-filer", + "DvdVideoStandard": "Videostandard", + "DvdStartRipping": "Start ripping", + "DvdRippingAborted": "Ripping avbrutt", + "DvdOpenIfoFile": "Åpne DVD IFO-fil", + "DvdAddVobFiles": "Legg til VOB-filer", + "DvdIfoFiles": "DVD IFO-filer", + "DvdVobFileType": "DVD VOB-filer", + "DvdDropHint": "Åpne en IFO-fil (VIDEO_TS\\VTS_01_0.IFO) eller legg til VOB-filer - eller slipp dem her", + "DvdNotAnIfoFileX": "{0} er ikke en DVD IFO-fil", + "DvdMenuIfoNoTitleSetsX": "Ingen tittelsett (VTS_xx_0.IFO) funnet ved siden av {0}", + "DvdEncryptedXOfY": "{0} av de {1} undertekstpakkene er fortsatt CSS-kryptert - disse VOB-filene ble kopiert uten dekryptering, så noen undertekstbilder vil bli forvrengt.\n\nDekrypter DVD-en med et DVD-rippeverktøy først for et rent resultat.\n\nVil du fortsette likevel?", "SplitTextAt": "Del tekst ved", "BlankLines": "Tomme linjer", "OneLineIsOneSubtitle": "Én linje er én undertekst", "TwoLinesAreOneSubtitle": "To linjer er én undertekst", "ImportFilesDotDotDot": "Importer filer...", "MultipleFiles": "Importer fra flere tekstfiler (én fil er én undertekst)", - "ImportOptions": "Importeringsalternativer", - "AutoSplitText": "Del opp tekst automatisk", - "LineMode": "Linjemodus", "MaxLineLength": "Maks linjelengde", - "MaxLinesPerSubtitle": "Maks linjer per undertekst", - "MinGapBetweenSubtitles": "Min. mellomrom mellom undertekster", "MergeShortLines": "Slå sammen korte linjer", - "RemoveLinesWithoutLetters": "Fjern linjer uten bokstaver", - "SplitAtEndCharsSetting": "Del ved sluttegn", - "TakeTimeFromCurrentFile": "Hent tid fra gjeldende fil", "Fixed": "Fast", "NumberOfSubtitlesX": "Antall undertekster: {0}", "NumberOfSubtitlesXForcedY": "Antall undertekster: {0} ({1} tvungne)", @@ -1390,14 +1485,18 @@ "ForcedAlignerProgress": "Justerer... vindu {0} av {1}, {2} av {3} linjer", "ForcedAlignerSetupTitle": "Juster tidskoder via tvungen justering", "ForcedAlignerSetupIntro": "En tvungen justerer sammenligner undertekstteksten du allerede har med lyden, uten å transkribere den først. Lange videoer justeres i deler, så enhver lengde fungerer.", + "ForcedAlignerEndsFromSpeech": "Angi sluttider fra isolert tale (tregt)", + "ForcedAlignerEndsFromSpeechHint": "Tvungen justering finner hvor en linje starter, ikke hvor den slutter, så sluttider kommer vanligvis fra lesetid. Med dette på fjernes musikk og lydeffekter fra lyden først, og hver linje slutter der talen blir stille. Tar omtrent like lang tid som selve videoen med GPU - og mange ganger lenger uten.", + "ForcedAlignerIsolatingSpeech": "Isolerer tale... {0}", + "ForcedAlignerIsolatingSpeechFailed": "Kunne ikke isolere talen - sluttider ble i stedet angitt fra lesetid.", "ForcedAlignerModel": "Justeringsmodell", - "ForcedAlignerDownloadEngine": "Last ned / oppdater motor..." + "ForcedAlignerDownloadEngine": "Last ned / oppdater motor...", + "ForcedAlignerEstimatedXOfY": "{0} av {1} linjer kunne ikke justeres og ble plassert etter lesetid - tidskodene deres er bare anslått. Manuset er sannsynligvis lengre enn det som sies i videoen." }, "Export": { "ExportImagesProfiles": "Eksporter bildeprofiler", "LeftRightMargin": "Venstre/høyre marg", "TopBottomMargin": "Topp/bunn marg", - "TitleExportBluRaySup": "Eksporter Blu-ray (sup)", "LineSpacingPercent": "Linjeavstand %", "PaddingLeftRight": "Utfylling venstre/høyre", "PaddingTopBottom": "Utfylling topp/bunn", @@ -1438,10 +1537,21 @@ "TitleExportDCinemaInteropPng": "D-Cinema interop/png", "TitleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", "ImageBasedSubtitleSaved": "Bildebasert undertekst lagret", - "TitleExportBdnXml": "Eksporter BDN/xml", "TitleExportWebVttThumbnails": "Eksporter WebVTT (miniatyrbilder)", "FullFrameImage": "Bilde i full bildestørrelse", "FullFrameImageHint": "Gjør hvert bilde like stort som videobildet, med underteksten på sin plass", + "Stereo3D": "3D", + "Stereo3DHint": "For 3D-video: tegn underteksten én gang i hver øyes halvdel av bildet", + "HalfSideBySide": "Halv side-ved-side", + "HalfTopBottom": "Halv topp/bunn", + "Depth3D": "Dybde", + "Depth3DHint": "Hvor langt underteksten stikker ut av skjermen - positiv bringer den nærmere, negativ skyver den bakover", + "Plane3D": "3D-Plane", + "Plane3DHint": "Gi hver undertekst dybden en 3D Blu-ray lagrer for den, fra en 3D-Plane-fil (.ofs) laget av BD3D2MK3D eller OFSExtractor. Dybde brukes der 3D-Plane ikke har noen", + "OpenPlane3DTitle": "Åpne 3D-Plane-fil", + "UnableToLoadPlane3DX": "Kan ikke laste 3D-Plane: {0}", + "Plane3DXDepthYToZ": "{0} (dybde {1} til {2})", + "Plane3DXNoDepth": "{0} (ingen dybdeverdier)", "TextEffect": "Teksteffekt", "TextEffectSettingsTitle": "Innstillinger for teksteffekt", "TextEffectPreset": "Forhåndsinnstilling", @@ -1473,13 +1583,10 @@ "Statistics": { "Title": "Statistikk", "TitleWithFileName": "Statistikk - {0}", - "GeneralStatistics": "Generell statistikk", - "MostUsed": "Mest brukt...", "MostUsedLines": "Mest brukte linjer", "MostUsedWords": "Mest brukte ord", "NothingFound": "Ingenting funnet", "NumberOfLinesX": "Antall undertekstlinjer: {0:#,##0}", - "NumberOfFilesX": "Antall undertekstfiler: {0:#,##0}", "LengthInFormatXinCharactersY": "Antall tegn som {0}: {1:#,###,##0}", "NumberOfCharactersInTextOnly": "Antall tegn kun i tekst: {0:#,###,##0}", "TotalDuration": "Total varighet av alle undertekster: {0:#,##0}", @@ -1520,7 +1627,6 @@ "GapMaximum": "Mellomrom - maksimum: {0:#,##0} ms", "GapAverage": "Mellomrom - gjennomsnitt: {0:#,##0.##} ms", "GapExceedingMinimum": "Mellomrom - under minimum ({0:#,##0} ms): {1} ({2:0.00}%)", - "Export": "Eksporter...", "Subtitles": "Undertekster", "Words": "Ord", "TotalDurationShort": "Total varighet", @@ -1550,7 +1656,22 @@ "RestoreAutoBackupFile": "Gjenopprett auto-sikkerhetskopifil", "RestoreXFromY": "Vil du gjenopprette \"{0}\" fra {1}?", "DeleteAllSubtitleBackups": "Vil du slette alle sikkerhetskopifiler for undertekster?", - "DeleteAll": "Slett alle" + "DeleteAll": "Slett alle", + "Subtitles": "Undertekster", + "SettingsBackupInfo": "Settings.json sikkerhetskopieres når Subtitle Edit starter, høyst én gang hver {0}. dag og bare hvis innstillingene er endret. De {1} nyeste sikkerhetskopiene beholdes.", + "SettingsBackupInfoEveryStart": "Settings.json sikkerhetskopieres hver gang Subtitle Edit starter, hvis innstillingene er endret. De {0} nyeste sikkerhetskopiene beholdes.", + "SettingsBackupOff": "Automatisk sikkerhetskopi av innstillinger er slått av (Alternativer → Innstillinger → Fil).", + "LastSettingsBackupX": "Siste sikkerhetskopi: {0}", + "NoSettingsBackupsYet": "Ingen sikkerhetskopier av innstillinger ennå", + "OpenSettingsBackupFolder": "Åpne mappe for sikkerhetskopi av innstillinger", + "BackUpSettingsNow": "Sikkerhetskopier nå", + "SettingsBackedUp": "Gjeldende innstillinger ble sikkerhetskopiert.", + "RestoreSettings": "Gjenopprett innstillinger", + "RestoreSettingsFromX": "Vil du erstatte gjeldende innstillinger med sikkerhetskopien fra {0}?\n\nGjeldende innstillinger sikkerhetskopieres først. Noen endringer trer først i kraft etter at Subtitle Edit er startet på nytt.", + "SettingsRestored": "Innstillingene ble gjenopprettet. Start Subtitle Edit på nytt for at alle endringer skal tre i kraft.", + "SettingsRestoreFailed": "Kunne ikke gjenopprette innstillinger: {0}", + "SettingsBackupNotValid": "sikkerhetskopien er ikke en gyldig innstillingsfil, så gjeldende innstillinger ble beholdt", + "DeleteAllSettingsBackups": "Vil du slette alle sikkerhetskopifiler for innstillinger?" }, "PropertiesDCinema": { "Title": "D-Cinema SMPTE egenskaper", @@ -1564,22 +1685,16 @@ "EditRate": "Redigeringsrate", "TimeCodeRate": "Tidskoderate", "StartTime": "Starttid", - "Font": "Skrift", "FontId": "Skrift-ID", "FontUri": "Skrift-URI", - "Generate": "Generer", - "FontColor": "Skriftfarge", "ChooseColor": "Velg farge", "FontEffect": "Skrifteffekt", "EffectColor": "Effektfarge", - "FontSize": "Skriftstørrelse", "TopBottomMargin": "Topp/bunn marg", "FadeUpTime": "Inntoningstid", "FadeDownTime": "Uttoningstid", - "Frames": "Bilder", "ZPosition": "Z-posisjon", - "ZPositionHelp": "Positive tall flytter teksten bort, negative tall flytter teksten nærmere; hvis z-posisjonen er null, er den 2D", - "Export": "Eksporter..." + "ZPositionHelp": "Positive tall flytter teksten bort, negative tall flytter teksten nærmere; hvis z-posisjonen er null, er den 2D" } }, "Edit": { @@ -1642,7 +1757,6 @@ "SelectionIntersect": "Kryss med utvalg" }, "MultipleReplace": { - "Title": "Søk og erstatt flere", "EditRule": "Rediger regel", "NewRule": "Ny regel", "EditCategory": "Rediger kategori", @@ -1659,24 +1773,23 @@ "FindWhat": "Finn hva", "DescriptionOptional": "Beskrivelse (valgfritt)", "InvalidRegularExpressionX": "Ugyldig regulært uttrykk: {0}", - "RegularExpressionTooSlowX": "Det regulære uttrykket ga opp etter {0} sekunder - regelen hoppes over, prøv et enklere mønster" + "RegularExpressionTooSlowX": "Det regulære uttrykket ga opp etter {0} sekunder - regelen hoppes over, prøv et enklere mønster", + "MoveToCategory": "Flytt til kategori" }, "Find": { "SearchTextWatermark": "Søk tekst...", "WholeWord": "Hele ord", - "CaseSensitive": "Skiller mellom store/små bokstaver", - "CaseInsensitive": "Skiller ikke mellom store/små bokstaver", "FindPrevious": "Finn f_orrige", "FindNext": "_Finn neste", "ReplaceAndFindNext": "_Erstatt og finn neste", "ReplaceAll": "Erstatt _alle", - "ReplaceTitle": "Erstatt", - "ReplaceWith": "Erstatt med", "ReplaceTextWatermark": "Erstatt med...", "ReplaceIn": "Erstatt/søk i", "ReplaceInTextAndOriginal": "Tekst og originaltekst", "ReplaceInTextOnly": "Kun tekst", - "ReplaceInOriginalOnly": "Kun originaltekst" + "ReplaceInOriginalOnly": "Kun originaltekst", + "ReplacedOneOccurrence": "Erstattet én forekomst", + "ReplacedXOccurrences": "Erstattet {0} forekomster" }, "NoSubtitleSelected": "Ingen undertekst valgt", "PleaseSelectExactlyOneSubtitle": "Velg nøyaktig én undertekst." @@ -1687,6 +1800,7 @@ "XLinesYSubtitles": "{0} linjer, {1} undertekster", "XLinesYSubtitlesZErrors": "{0} linjer, {1} undertekster, {2} feil", "CouldNotParseAsX": "Kunne ikke tolke som {0}", + "ReadAsXUseAsY": "Kilden kunne ikke leses som {1}, men den kunne leses som {0}.\nVil du bruke linjene og fortsette å lagre som {1}?", "SelectedXCharactersYLines": "Valgt: {0} tegn i {1} linje(r)", "ReplacedXOccurrences": "Erstattet {0} forekomst(er)", "InvalidRegularExpression": "Ugyldig regulært uttrykk", @@ -1701,7 +1815,6 @@ "AiReview": { "Title": "AI-gjennomgang", "Review": "Gjennomgå", - "Stop": "Stopp", "EditPrompt": "Rediger ledetekst...", "EditPromptTitle": "Rediger ledetekst for gjennomgang", "PromptInfo": "Instruksjoner som sendes til modellen - {language} erstattes med undertekstens språk.", @@ -1712,7 +1825,6 @@ "ReviewingLineXOfY": "Gjennomgår linje {0} av {1}...", "ReviewDone": "Gjennomgang ferdig - {0} forslag i {1} linjer", "NoIssuesFound": "Ingen problemer funnet", - "CategoryAll": "Alle", "CategorySpelling": "Staving", "CategoryGrammar": "Grammatikk", "CategoryPunctuation": "Tegnsetting", @@ -1724,8 +1836,23 @@ "LargeChangeWarning": "Stor endring - ser ut som en omskriving, gå nøye gjennom", "MismatchWarning": "Ligner ikke på originalen - kan tilhøre en annen linje", "EngineError": "Kunne ikke nå AI-motoren: {0}", - "SetupHint": "Velg først en motor og en modell i Verktøy -> AI-gjennomgang.", - "PlayCurrentLineHint": "Spill av den valgte linjen i videospilleren og pause ved slutten (dobbeltklikk også på en linje)" + "PlayCurrentLineHint": "Spill av den valgte linjen i videospilleren og pause ved slutten (dobbeltklikk også på en linje)", + "EditAfterHint": "Klikk på teksten i den valgte raden for å redigere rettelsen før den brukes (Enter lagrer, Escape avbryter)", + "Template": "Mal", + "TemplatePlaceholder": "Velg en mal for å erstatte ledeteksten", + "TemplateStandard": "Standard korrekturlesing", + "TemplateSpeechToText": "Opprydding etter tale til tekst", + "TemplateMachineTranslation": "Retting av maskinoversettelse", + "TemplateSdh": "SDH / hørselshemmede", + "ReferenceContext": "Referansekontekst", + "ReferenceContextInfo": "Valgfritt. Navn, karakterer, ordliste, synopsis eller stilnotater - modellen behandler dette som fasit for navn og begreper. Sendes med hver bunke.", + "ReferenceContextPlaceholder": "Navn: Kaito, tante Mei, Dr. Hollis\nBegreper: Shinkansen, warpkjerne\nSynopsis: Kaito reiser til Tokyo for å finne sin savnede far.", + "GenerateContext": "Generer med AI", + "GenerateContextHint": "La den valgte AI-motoren lese underteksten og lage utkast til navn, begreper og en synopsis - kontroller resultatet før bruk", + "GeneratingContextPartXOfY": "Leser del {0} av {1}...", + "GeneratingContextSynopsis": "Skriver synopsis...", + "ReplaceContextQuestion": "Erstatte gjeldende referansekontekst?", + "NoContextGenerated": "AI-motoren returnerte ingen brukbar referanseinformasjon." }, "AiAssistant": { "Title": "AI-assistent", @@ -1742,7 +1869,6 @@ "Hint": "AI-assistent for denne linjen", "ShowReasoning": "Vis modellens resonnement" }, - "PickAlignmentTitle": "Velg justering", "RemoveUnicodeCharacters": { "Title": "Fjern/erstatt Unicode-tegn", "CharactersFoundX": "Unicode-tegn funnet: {0}", @@ -1752,31 +1878,23 @@ "PickFontNameInstalledFonts": "Installerte skrifter", "PickFontNameCollectedFonts": "Innsamlede skrifter", "ColorPickerTitle": "Velg farge", + "ColorPickerBrightness": "Lysstyrke", "FilterLayersTitle": "Filtrer lag for visning", "FilterLayersHideFromWaveform": "Skjul fra bølgeform/spektrogram", "FilterLayersHideFromSubtitleGrid": "Skjul fra undertekstrutenett", "FilterLayersHideFromVideoPreview": "Skjul fra videoforhåndsvisning", "PickSubtitleFormat": "Velg undertekstformat", "PickSubtitleFormatImageBasedNoPreview": "Bildebasert undertekstformat.\nBitmap-bilder genereres under konvertering - ingen tekstforhåndsvisning.", - "PickLayerTitle": "Velg lag", "RecentColors": "Nylige farger", "FixCommonErrors": { - "Title": "Fiks vanlige feil", - "Step1": "Trinn 1/2 - Velg hvilke feil som skal fikses", - "WhatToFix": "Hva som skal fikses", - "Example": "Eksempel", - "SelectAll": "Velg alle", - "InverseSelection": "Inverter utvalg", "Back": "< Til_bake", "Next": "_Neste >", - "Step2": "Trinn 2/2 - Bekreft rettelser", "Fixes": "Rettelser", "RuleDetailsDotDotDot": "Regeldetaljer...", "ShowOnlyThisRule": "Vis kun rettelser fra denne regelen", "AppliedRulesForLineX": "Anvendt(e) regel(er) for linje {0}", "RuleX": "Regel: {0}", "Log": "Logg", - "Function": "Funksjon", "RemovedEmptyLine": "Fjern tom linje", "RemovedEmptyLineAtTop": "Fjern tom linje øverst", "RemovedEmptyLineAtBottom": "Fjern tom linje nederst", @@ -1797,13 +1915,13 @@ "RemoveLineBreaksPixelWidth": "Fjern linjedeling for undertekster som får plass på én linje (pikselbredde)", "FixUppercaseIInsideLowercaseWords": "Fiks stor 'i' inni ord med små bokstaver (OCR-feil)", "FixDoubleApostrophes": "Fiks doble apostrof-tegn ('') til et enkelt anførselstegn (\")", + "FixMisreadQuotes": "Rett apostrofer feillest som doble anførselstegn (OCR, engelsk)", "AddPeriods": "Legg til punktum etter linjer der neste linje starter med stor bokstav", "StartWithUppercaseLetterAfterParagraph": "Start med stor bokstav etter avsnitt", "StartWithUppercaseLetterAfterPeriodInsideParagraph": "Start med stor bokstav etter punktum inni avsnitt", "StartWithUppercaseLetterAfterColon": "Start med stor bokstav etter kolon/semikolon", "FixLowercaseIToUppercaseI": "Fiks enslig liten 'i' til 'I' (Engelsk)", "FixCommonOcrErrors": "Fiks vanlige OCR-feil (bruker OCR-erstattningsliste)", - "CommonOcrErrorsFixed": "Vanlige OCR-feil fikset (OcrReplaceList-fil brukt): {0}", "RemoveSpaceBetweenNumber": "Fjern mellomrom mellom tall", "BreakDialogsOnOneLine": "Del dialoger på én linje", "RemoveDialogFirstInNonDialogs": "Fjern startstrek i første linje for ikke-dialoger", @@ -1820,18 +1938,17 @@ "FixCommasExample": ",, -> ,", "RemoveLineBreaksExample": "Foo
bar!\r\n-> Foo bar!", "FixDoubleApostrophesExample": "''Har doble enkle anførselstegn'' -> \"Har enkelt doble anførselstegn", + "FixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "AddPeriodsExample": "Hei verden -> Hei verden.", "StartWithUppercaseLetterAfterParagraphExample": "p1: Foobar! ||p2: foobar!-> p1: Foobar!||p2: Foobar!", "StartWithUppercaseLetterAfterPeriodInsideParagraphExample": "Hei der!\r\nhvordan har du det? \r\n-> Hei der!\r\nHvordan har du det?", "StartWithUppercaseLetterAfterColonExample": "Foredragsholder: hei verden!\r\n-> Speaker: Hei verden!", "RemoveHyphensSingleLineExample": "- Foobar.\r\n-> Foobar.", "Fix3PlusLinesExample": "Foo
bar
baz!\r\n-> Foo bar baz!", - "XMissingQuotesAdded": "Manglende anførselstegn lagt til: {0}", "Fix3PlusLine": "Fiks undertekst med mer enn to linjer", "Fix3PlusLines": "Fiks undertekster med mer enn to linjer", "Analysing": "Analyserer...", "NothingToFix": "Ingenting å fikse :)", - "FixesFoundX": "Rettelser funnet: {0}", "XFixesApplied": "Rettelser anvendt: {0}", "XFixesYSelected": "{0} rettelser - {1} valgt", "NothingFixableBut": "Ingenting kunne fikses automatisk. Underteksten inneholder feil - se loggen for detaljer", @@ -1840,7 +1957,6 @@ "FixFirstLetterToUppercaseAfterParagraph": "Fiks første bokstav til stor bokstav etter avsnitt", "MergeShortLine": "Slå sammen kort linje (enkel setning)", "MergeShortLineAll": "Slå sammen kort linje (alle unntatt dialoger)", - "UnbreakShortLinePixelWidth": "Fjern linjedeling for kort linje (pikselbredde)", "BreakLongLine": "Del lang linje", "FixLongDisplayTime": "Fiks lang visningstid", "FixInvalidItalicTag": "Fiks ugyldig kursiv-kode", @@ -1863,7 +1979,6 @@ "FixUppercaseIInsideLowercaseWord": "Fiks stor 'i' inni ord med små bokstaver", "FixMissingPeriodAtEndOfLine": "Legg til manglende punktum på slutten av linjen", "RefreshFixes": "Oppdater tilgjengelige rettelser", - "ApplyFixes": "Bruk valgte rettelser og lukk", "AutoBreak": "Auto &bryt", "Unbreak": "&Fjern linjedeling", "FixDoubleDash": "Fiks '--' -> '...'", @@ -1882,8 +1997,6 @@ "FixSpaceBetweenNumbersExample": "1 100 -> 1100", "FixDialogsOneLineExample": "Hei John! - Hei Ida! -> Hei John!
- Hei Ida!", "RemoveDialogFirstInNonDialogsExample": "- Hvordan har du det? -> Hvordan har du det?", - "SelectDefault": "Velg standard", - "SetDefault": "Sett nåværende rettelser som standard", "FixContinuationStyleX": "Fiks fortsettelsesstil: {0}", "FixUnnecessaryLeadingDots": "Fjern unødvendige ledende punktum", "FixCommonErrorsProfiles": "Profiler for fiks vanlige feil", @@ -1891,7 +2004,6 @@ "SearchRulesDotDotDot": "Søk etter regler...", "GoToApplyFixes": "Gå til bruk rettelser", "BackToFixList": "Tilbake til rettelsesliste", - "ApplyFixesAndClose": "Bruk rettelser og lukk", "FixCommonOcrErrorsStep2": "Fiks vanlige feil, trinn 2 (bruk rettelser)", "FixCommonOcrErrorsStep2FixesFoundX": "Fiks vanlige feil, trinn 2 - Rettelser funnet: {0}", "Action": "Handling", @@ -1904,18 +2016,11 @@ "AdjustDurations": { "Title": "Juster varigheter", "AdjustVia": "Juster via", - "Seconds": "Sekunder", - "Percent": "Prosent", "Recalculate": "Beregn på nytt", "AddSeconds": "Legg til sekunder", - "SetAsPercent": "Sett som prosent av varighet", "Note": "Merk: Visningstid vil ikke overlappe starttid for neste tekst", "Fixed": "Fast", - "Milliseconds": "Millisekunder", "ExtendOnly": "Bare utvid", - "EnforceDurationLimits": "Håndhev minimum- og maksimumsvarighet", - "CheckShotChanges": "Ikke utvid forbi sceneskifter", - "BatchCheckShotChanges": "Respekter sceneskifter (hvis tilgjengelig)", "RecalculateRequiresOcrNote": "Beregn på nytt er utilgjengelig — én eller flere undertekster har ingen OCR-tekst. Kjør OCR først." }, "ApplyDurationLimits": { @@ -1923,6 +2028,8 @@ "FixMinDurationMs": "Fiks minimumsvarighet (ms)", "DoNotGoPastShotChange": "Ikke gå forbi sceneskifte", "FixMaxDurationMs": "Fiks maksimumsvarighet (ms)", + "FixMinDurationFrames": "Rett minimum varighet (bilder)", + "FixMaxDurationFrames": "Rett maksimum varighet (bilder)", "MinimumDurationMilliseconds": "Minimum varighet (millisekunder):", "MaximumDurationMilliseconds": "Maksimum varighet (millisekunder):", "MaxDurationShouldBeHigherThanMinDuration": "Maksimumsvarighet bør være høyere enn minimumsvarighet", @@ -1942,12 +2049,8 @@ }, "BeautifyTimeCodes": { "Title": "Forskjønn tidskoder", - "BeautifySettings": "Forskjønn-innstillinger", "SnapToFrames": "Fest til bilder", - "FrameGap": "Bildemellomrom", "MinDuration": "Min. varighet (ms)", - "ShotChangeThreshold": "Sceneskifteterskel (ms)", - "ShotChangeOffset": "Sceneskifteforskyvning (bilder)", "Original": "Original", "Beautified": "Forskjønnet", "SubtitlesCount": "Undertekster", @@ -1976,13 +2079,80 @@ "TimeCodesExtractFailed": "Kunne ikke lese tidskoder fra videoen", "TimeCodesHint": "Fest cue-punkter til videoens faktiske bildetider i stedet for å anta en konstant bildefrekvens. Krever at hele videoen leses én gang; resultatet mellomlagres." }, + "ImproveTimeCodes": { + "Title": "Forbedre tidskoder (tvungen justering)", + "Aligner": "Justerer", + "AlignerHint": "Modellen som lytter etter hver linje i lyden. De beste valgene for undertekstens språk står først.", + "MaxShift": "Maks forskyvning (sekunder)", + "MaxShiftHint": "Hvor langt underteksten kan være ute av synk. En linje hvis start ville flyttet seg lenger, blir stående og flagges. Uansett verdi blir en enkelt linje som vil flytte seg mer enn et halvt sekund lenger enn linjene rundt den, ikke flyttet blindt: den følger naboene når alle flyttet seg, og tilbys ellers uten avkrysning slik at du kan kontrollere den.", + "AdjustStartTimes": "Juster starttider", + "AdjustEndTimes": "Juster sluttider", + "IsolateSpeech": "Isoler tale først (tregt)", + "IsolateSpeechHint": "Fjerner musikk og lydeffekter før justering, slik at justereren bare hører dialogen. Hjelper på linjer som sies over høy musikk eller action, men tar omtrent like lang tid som selve lyden med GPU - og mange ganger lenger uten.", + "IsolatingSpeech": "Isolerer tale... (dette tar en stund)", + "IsolateSpeechFailed": "Kunne ikke isolere talen - justerte mot den originale lyden i stedet.", + "CheckWithSpeechToText": "Kontroller med tale til tekst", + "CheckWithSpeechToTextHint": "Transkriberer også lyden og kontrollerer hver flytting mot hvor ordene faktisk ble hørt. Store flyttinger som talen bekrefter, krysses av for deg, og flyttinger bort fra der en linje høres, står uten avkrysning slik at du kan kontrollere dem. Viser også hvor mye av hver linje som ble hørt - en lav andel betyr at teksten avviker fra det som sies. En undertekst som er mer ute av synk enn maks forskyvning - en konstant forskyvning, en glidning fra feil bildefrekvens, eller hopp der scener ble klippet - synkroniseres først etter de hørte ordene. Bruker Crisp ASR Parakeet, som tar noen minutter for en spillefilm med GPU.", + "CheckWithSpeechToTextNotAvailableX": "Kontroll med tale til tekst er ikke tilgjengelig for {0}", + "TranscribingToCheck": "Transkriberer for å kontrollere justeringen...", + "SpeechToTextFailed": "Tale til tekst mislyktes - tidskodene ble ikke kontrollert mot den.", + "SpeechToTextX": "Tale til tekst: {0}", + "SpeechToTextConfirmedXDisputedY": "Tale: {0} bekreftet, {1} omstridt", + "HardlyHeardX": "Tale til tekst hørte bare {0}% av undertekstens ord. Er underteksten på språket som snakkes? Justereren kan ikke plassere en oversettelse.", + "Heard": "Hørt", + "HeardHint": "Hvor mye av linjen tale til tekst hørte. En lav andel betyr at teksten avviker fra det som sies - der justereren mest sannsynlig tar feil.", + "StatusConfirmedBySpeech": "Bekreftet av tale", + "StatusDisputedBySpeech": "Hørt der den var", + "StatusMovedWithSync": "Flyttet med synkroniseringen", + "SyncedFirstXY": "Synkronisert først: {0} s ved starten, {1} s ved slutten", + "ShowSpeechOnly": "Vis kun tale", + "ShowSpeechOnlyHint": "Tegn den justerte bølgeformen fra lyden med musikk og lydeffekter fjernet; den originale bølgeformen forblir som den er, for sammenligning. Tilgjengelig når talen er isolert - her, eller med \"Vis kun tale\" i hovedvinduets bølgeform.", + "Align": "Juster", + "Original": "Original", + "Aligned": "Justert", + "Intro": "Velg en justerer og trykk \"Juster\" for å lytte etter hver linje i lyden og stramme inn tidskodene.", + "ExtractingAudio": "Trekker ut lyd...", + "AligningBatchXOfY": "Justerer... bunke {0} av {1}", + "ExtractAudioFailed": "Kunne ikke trekke ut lyden med ffmpeg.", + "ModelWillBeDownloaded": "{0} vil bli lastet ned", + "SummaryXRetimedYKeptZSkipped": "Ny timing: {0} · Beholdt: {1} · Ingen tale: {2}", + "MeanShiftX": "Gjennomsnittlig forskyvning: {0} ms", + "ToCheckX": "Til kontroll: {0}", + "LargeMovesToCheckX": "{0} linje(r) ville flyttet seg langt på egen hånd og står uten avkrysning - lytt til dem (F5 spiller den justerte linjen, Shift+F5 originalen) og kryss av de som er riktige.", + "LinesToCheckX": "{0} linje(r) står uten avkrysning for kontroll - lytt til dem (F5 spiller den justerte linjen, Shift+F5 originalen) og kryss av de som er riktige.", + "ChangeXOfY": "Endring {0} av {1}", + "PreviousChange": "Forrige endring", + "NextChange": "Neste endring", + "StartShift": "Start", + "EndShift": "Slutt", + "StatusRetimed": "Ny timing", + "StatusMovedWithNeighbours": "Flyttet med naboene", + "StatusLargeMoveUnconfirmed": "Stor flytting - lytt, kryss av for å bruke", + "StatusUnchanged": "Allerede på plass", + "StatusNoSpeech": "Ingen tale", + "StatusShiftTooLarge": "Beholdt - for stor forskyvning", + "StatusFailed": "Beholdt - justereren mislyktes", + "StatusAdjustedByHand": "Justert manuelt", + "AlignedWaveformHint": "Dra en linje for å flytte den, eller dra kantene for å endre start eller slutt.", + "PlayLine": "Spill av linje", + "UndoAdjustment": "Angre justering", + "PlayPause": "Spill av / pause", + "PlayAligned": "Justert", + "PlayAlignedHint": "Spill av den valgte linjen med de justerte tidskodene", + "Apply": "Bruk", + "ApplyHint": "Fjern avkrysningen for en linje for å beholde de originale tidskodene. Dobbeltklikk en linje for å spille den av. Linjer kan også flyttes eller endres i størrelse i den justerte bølgeformen." + }, "BeautifyTimeCodesProfile": { "Title": "Rediger profil for forskjønning av tidskoder", "LoadPreset": "Last inn forhåndsinnstilling", "PresetDefault": "Standard", "PresetNetflix": "Netflix", "PresetSdi": "SDI", - "General": "Generelt", + "SaveAsProfile": "Lagre som profil...", + "DeleteProfile": "Slett profil", + "ProfileName": "Profilnavn", + "OverwriteProfileX": "En profil med navnet \"{0}\" finnes allerede. Vil du overskrive den?", + "DeleteProfileX": "Slette profilen \"{0}\"?", "Gap": "Mellomrom", "GapSuffix": "bilder (oppdaterer også feltene for mellomrom forskjellig fra null nedenfor)", "Milliseconds": "ms", @@ -2011,9 +2181,12 @@ "HintChaining": "Hvordan undertekster som nesten berører hverandre håndteres — utvid dem sammen, eller skyv dem fra hverandre, avhengig av om et sceneskifte ligger imellom." }, "BridgeGaps": { - "Title": "Tett hull", "BridgeGapsSmallerThan": "Tett hull mindre enn (ms)", "MinGap": "Minimum mellomrom (ms)", + "BridgeGapsSmallerThanFrames": "Fyll mellomrom mindre enn (bilder)", + "MinGapFrames": "Minste mellomrom (bilder)", + "CalculateBridgeGapsSmallerThanDotDotDot": "Beregn grense for mellomrom fra en bildefrekvens...", + "UseXMsAsBridgeGapsSmallerThan": "Fylle mellomrom mindre enn \"{0}\" millisekunder?", "NumberOfSmallGapsBridgedX": "Antall små hull tettet: {0}", "PercentFoPrevious": "Mellomrom for forrige (%)", "GapChange": "Mellomromsendring" @@ -2025,8 +2198,6 @@ "SortBy": { "Title": "Sorter undertekster", "SortOrder": "Sorteringsrekkefølge", - "SortByNumber": "Tall", - "SortByStartTime": "Starttid", "SortByEndTime": "Sluttid" }, "BatchConvert": { @@ -2049,6 +2220,7 @@ "AddColor": "Legg til farge", "DeleteLinesWithSpecificActorsOrStyles": "Slett linjer med skuespillere eller stiler (separer flere med komma)", "UseSourceStylesIfPossible": "Bruk kildestiler hvis mulig", + "KeepSourceEmbeddedFonts": "Behold innebygde skrifter fra kilden (bunntekst)", "EditStyles": "Rediger stiler", "EditProperties": "Rediger egenskaper", "EditAttachments": "Rediger vedlegg", @@ -2069,7 +2241,6 @@ "AssaChangeStyleFromStyle": "Endre stil fra", "AssaChangeStyleToStyle": "til", "AssaChangeStyleImportStyle": "Importer stil...", - "AssaChangeStyleImportedX": "Importert: {0}", "AssaChangeStyleTrimUnusedStyles": "Trim ubrukte stiler", "AssaChangeStylePropertiesTitle": "Endre stilegenskaper", "AssaChangeStylePropertiesInfo": "Endrer de valgte feltene i hver stil i filen, uten å røre stilene selv.", @@ -2081,13 +2252,52 @@ "ConvertColorsToDialogReBreakLines": "Del linjer på nytt", "SnapTimeCodesToFramesInfo": "Runder hver start- og sluttid til nærmeste bilde. Bildefrekvensen leses fra en videofil med samme navn som undertekstfilen, med mindre en fast bildefrekvens er valgt.", "AddFolderDotDotDot": "Legg til mappe...", + "AddFolderRecursiveDotDotDot": "Legg til mappe rekursivt...", "SelectFolderToConvert": "Velg mappe med filer som skal konverteres", "IncludeSubfolders": "Ta med undermapper når en mappe legges til", + "VideoFilesWhenAddingFolder": "Videofiler (mkv, mp4, ts...) når en mappe legges til", + "VideoFilesAsk": "Spør", + "VideoFilesInclude": "Legg til undertekstsporene deres", + "VideoFilesSkip": "Hopp over", + "FolderContainsXVideoFiles": "Mappen inneholder {0} videofil(er) (mkv, mp4, ts...).\n\nVil du også legge til de innebygde undertekstsporene, eller bare undertekstfilene?", + "AddVideoFiles": "Legg til videofiler", + "SkipVideoFiles": "Kun undertekstfiler", + "DoNotAskAgainVideoFiles": "Ikke spør igjen (endre i innstillingene for Satsvis konvertering)", + "SettingsSectionOutput": "Utdata", + "SettingsSectionAddingFiles": "Legge til filer", + "SettingsSectionImageBasedSubtitles": "Bildebaserte undertekster (OCR)", + "SettingsSectionOther": "Annet", "KeepSourceFileTimestamp": "Behold kildefilens dato/tid på utdatafilene", - "ScanningFolderX": "Skanner {0}..." + "PreventSleepWhileConverting": "Hindre at datamaskinen går i dvale under konvertering", + "ScanningFolderX": "Skanner {0}...", + "TransportStreamSettings": "Transport Stream-innstillinger", + "TransportStreamSettingsDotDotDot": "Transport Stream-innstillinger...", + "TransportStreamSettingsInfo": "Gjelder undertekstspor trukket ut fra Transport Stream-filer (.ts/.m2ts). Posisjon og videostørrelse påvirker bare DVB-bildespor som eksporteres til et bildebasert format.", + "TransportStreamOverrideXPosition": "Overstyr original X-posisjon", + "TransportStreamOverrideYPosition": "Overstyr original Y-posisjon", + "TransportStreamOverrideVideoSize": "Overstyr original videostørrelse", + "TransportStreamBottomMargin": "Bunnmarg", + "TransportStreamFileNameEnding": "Filnavnendelse", + "TransportStreamFileNameEndingInfo": "Legges til foran filtypen for hvert uttrukket spor. La stå tomt for å bruke vanlig språksuffiks.", + "TransportStreamOnlyTeletext": "Kun tekst-TV", + "TransportStreamGetSizeFromVideo": "Hent størrelse fra video...", + "TwoLetterLanguageCodeUppercase": "Språkkode med to bokstaver (store bokstaver)", + "ThreeLetterLanguageCodeUppercase": "Språkkode med tre bokstaver (store bokstaver)", + "FormatContainsDotDotDot": "Format inneholder...", + "ExtensionIsDotDotDot": "Filtype er...", + "StatusIsError": "Status er feil", + "ForcedTracksOnly": "Kun tvungne spor", + "XConvertedYFailedInZ": "{0:#,###,##0} konvertert, {1:#,###,##0} mislyktes på {2}", + "XNotProcessed": "{0:#,###,##0} ikke behandlet", + "RemoveUnicodeControlCharactersTitle": "Fjern Unicode-kontrolltegn", + "RemoveUnicodeControlCharactersInfo": "Fjerner de usynlige Unicode-retningskontrolltegnene (LRM, RLM, LRE, RLE, PDF, LRO og RLO) fra teksten, og erstatter hardt mellomrom med vanlig mellomrom.", + "Preset": "Forhåndsinnstilling", + "SavePresetDotDotDot": "Lagre forhåndsinnstilling...", + "DeletePreset": "Slett forhåndsinnstilling", + "PresetName": "Navn på forhåndsinnstilling", + "DeletePresetX": "Slette forhåndsinnstillingen \"{0}\"?" }, "ChangeCasing": { - "Title": "Endre bokstavstørrelse", "FixNames": "Fiks navn", "NamesX": "Navn: {0:#,##0}", "HitsX": "Treff: {0:#,##0}", @@ -2098,9 +2308,7 @@ "AllUppercase": "Bare store bokstaver", "AllLowercase": "Bare små bokstaver" }, - "ChangeFormatting": { - "Title": "Endre formatering" - }, + "ChangeFormatting": {}, "ConvertActors": { "Title": "Konverter skuespillere", "ConvertActorFrom": "Konverter skuespiller fra", @@ -2129,18 +2337,12 @@ "OutputFormatAssa": "Advanced Sub Station Alpha (.ass)", "Style1": "Stil 1", "Style2": "Stil 2", - "OutlineWidth": "Omrissbredde", - "ShadowWidth": "Skyggebredde", - "AlignTop": "Øverst", - "AlignBottom": "Nederst", - "Merge": "_Slå sammen", - "PleaseLoadTwoSubtitles": "Last inn to undertekster" + "Merge": "_Slå sammen" }, "SplitSubtitle": { "Title": "Del opp undertekst", "NumberOfEqualParts": "Antall like deler", "SaveSplitParts": "_Lagre oppdelte deler", - "SubtitleSplitIntoXParts": "Undertekst delt i {0} deler.", "XPartsSavedInFormatYToFolder": "{0} deler lagret i formatet {1} i mappen:" }, "SplitBreakLongLines": { @@ -2174,18 +2376,17 @@ "ColumnMerge": "Slå sammen", "ColumnFirst": "Første linje", "ColumnSecond": "Andre linje", - "ColumnMerged": "Sammenslått", - "SelectAll": "Velg alle", - "InverseSelection": "Omvendt utvalg" + "ColumnMerged": "Sammenslått" }, "MergeLinesWithSameText": { - "Title": "Slå sammen linjer med samme tekst", "MaxMsBetweenLines": "Maks millisekunder mellom linjer", - "IncludeIncrementingLines": "Inkluder linjer med økende tekst" + "MaxFramesBetweenLines": "Maks bilder mellom linjer", + "IncludeIncrementingLines": "Inkluder linjer med økende tekst", + "IncludeRollUpCaptions": "Inkluder rulletekst (roll-up)" }, "MergeLinesWithSameTimeCodes": { - "Title": "Slå sammen linjer med samme tidskoder", "MaxMsDifference": "Maks forskjell (millisekunder)", + "MaxFramesDifference": "Maks forskjell (bilder)", "MakeDialog": "Lag dialoger" }, "NetflixCheckAndFix": { @@ -2208,7 +2409,6 @@ "ShotChanges": "Skudskifter", "StartNumberSpellOut": "Startnummer staves ut", "TextforHiUseBrackets": "Tekst for HI, bruk parenteser", - "FrameRate": "Bildefrekvens", "TwoFrameGrap": "Mellomrom med to frames", "WhiteSpace": "Hvit plass", "ChildrensProgram": "Barneprogram", @@ -2246,7 +2446,6 @@ "ItalicsFixed": "Fast kursiv", "ItalicsNotAllowed": "Kursiv ikke tillatt", "BridgeGapsXToYFrames": "3-{0} rammer mellomrom => 2 rammer gap", - "StartNumberSpellOutComment": "Når et tall begynner en setning, skal det alltid staves", "MaximumXCharactersPerSecond": "Maksimalt {0} tegn per sekund" }, "ImageBasedEdit": { @@ -2256,10 +2455,8 @@ "ResizeImagesDotDotDot": "Endre størrelse på bilder...", "AdjustBrightnessDotDotDot": "Juster lysstyrke...", "AdjustAlphaDotDotDot": "Juster alfa...", - "CenterHorizontally": "Midtstill horisontalt", "CropImages": "Beskjær bilder", "ImportTimeCodes": "Importer tidskoder...", - "SetTextForSubtitle": "Sett tekst for undertekst", "ScreenWidth": "Skjermbredde", "ScreenHeight": "Skjermhøyde", "AlphaThresholdInfo": "Piksler med alfa under terskelen blir helt gjennomsiktige", @@ -2289,15 +2486,31 @@ "LetterboxCustom": "Egendefinert bjelkehøyde", "BarHeightPx": "Bjelkehøyde (px)", "TitleSafePercent": "Tittelsikker sone (%)", + "MoveCaptions": "Flytt undertekster", + "MoveCaptionsDotDotDot": "Flytt undertekster...", + "MoveCaptionsTo": "Flytt undertekster", + "MoveCaptionsIntoBars": "Inn i letterbox-feltene (utenfor bildet)", + "MoveCaptionsIntoPicture": "Inn i bildet (ut av feltene)", + "MoveCaptionsOffset": "Avstand fra kant (px)", + "LetterboxBarHeightXPxYOfZCaptionsWillMove": "Felthøyde: {0} px - {1} av {2} undertekster flyttes", + "RemoveFadeInOut": "Fjern inn-/uttoning", + "RemoveFadeInOutXLinesRemoved": "{0} toningslinjer slått sammen med linjene de hører til", + "RemoveFadeInOutNothingFound": "Ingen inn-/uttoningslinjer funnet", "PositionSummary": "{0}×{1} - {2} undertekster - bjelkehøyde: {3} px", "XInActivePicture": "{0} i bildet", "XInTopBar": "{0} i øvre bjelke", "XInBottomBar": "{0} i nedre bjelke", "NoImageSubtitlesLoaded": "Ingen bildeundertekster lastet", - "ImageBasedFormatNotSupported": "Bildebasert undertekstformat ble ikke funnet/støttes ikke." + "ImageBasedFormatNotSupported": "Bildebasert undertekstformat ble ikke funnet/støttes ikke.", + "FrameRateDeclaredInFile": "Bildefrekvens angitt i Blu-ray sup-filen", + "FrameRateDetectedFromTimeCodesX": "Bildefrekvens oppdaget fra tidskodene i Blu-ray sup (filen angir {0})", + "FrameRateFromVideo": "Videoens bildefrekvens", + "FrameRateCurrent": "Gjeldende bildefrekvens", + "FrameRateSetManually": "Bildefrekvens angitt manuelt", + "FrameRateUsageInfo": "Eksport til Blu-ray sup, BDN XML, DOST og FCP skrives med denne bildefrekvensen. Den endrer ingen tider - bruk \"Endre bildefrekvens\" for det.", + "UseVideoFrameRateXInsteadOfY": "Videoens bildefrekvens er {0}, men underteksten er satt til {1}.\n\nVil du bruke videoens bildefrekvens ({0})?" }, "RemoveTextForHearingImpaired": { - "Title": "Fjern tekst for hørselshemmede", "Interjections": "Interjeksjoner", "SkipIfStartWith": "Hopp over hvis starter med", "RemoveTextBetween": "Fjern tekst mellom", @@ -2359,7 +2572,21 @@ "CorrectWordsX": "Korrekte ord: {0}", "NamesX": "Navn: {0}", "AddedToDictionaryX": "Lagt til i ordbok: {0}", - "DoNotShowThisAgain": "Ikke vis denne meldingen igjen" + "DoNotShowThisAgain": "Ikke vis denne meldingen igjen", + "EditUseAlwaysList": "Rediger \"Bruk alltid\"-listen...", + "UseAlwaysListTitle": "Stavekontroll - \"Bruk alltid\"-listen", + "UseAlwaysListHeader": "\"Bruk alltid\"-listen", + "UseAlwaysListDescription": "Ord som stavekontrollen erstatter automatisk, lagret med \"Endre alle\" og \"Bruk alltid\". Et par brukes bare når ordet er feilstavet.", + "UseAlwaysWord": "Feilstavet ord", + "XPairs": "{0:#,##0} par", + "XUnusedPairs": "{0:#,##0} aldri brukt", + "UseAlwaysUnusedHint": "Aldri brukt - dette ordet er stavet riktig (eller er et navn eller brukerord), så stavekontrollen markerer det aldri", + "RemoveUnused": "Fjern ubrukte", + "UseAlwaysEmpty": "Ingen \"Bruk alltid\"-par for dette språket ennå", + "UseAlwaysEmptyHint": "Par legges til når du klikker \"Endre alle\" eller \"Bruk alltid\" i stavekontrollen.", + "UseAlwaysNoMatch": "Ingen par samsvarer med søket", + "UseAlwaysSameWord": "Erstatningen må være forskjellig fra ordet.", + "UseAlwaysRememberOff": "\"Husk 'Bruk alltid'-listen\" er slått av i Innstillinger, så stavekontrollen verken bruker eller lagrer denne listen." }, "Video": { "Chapters": { @@ -2390,7 +2617,6 @@ "ScaleTimesDescription": "Skaler hver kapitteltid fra én bildefrekvens til en annen.", "FromFrameRate": "Fra", "ToFrameRate": "Til", - "Apply": "Bruk", "WriteToVideo": "Skriv til video...", "WriteToVideoTitle": "Skriv kapitler til video", "WriteToVideoDescription": "Kapitlene skrives inn i en kopi av videofilen. Ingenting kodes om, så dette går raskt og uten kvalitetstap.", @@ -2400,7 +2626,6 @@ "WrittenToX": "Kapitler skrevet til {0}", "UnableToWriteChapters": "Kunne ikke skrive kapitler til videofilen.", "ChaptersSavedToX": "Kapitler lagret i {0}", - "NoVideoLoaded": "Ingen video lastet", "EmptyListCallToAction": "Ingen kapitler ennå - legg til ett ved videoposisjonen, eller importer dem fra en video eller fil." }, "GoToVideoPosition": "Gå til videoposisjon", @@ -2412,30 +2637,88 @@ "OpenSecondarySubtitleOnVideoPlayerDotDotDot": "Sekundær undertekst på videospiller, åpne...", "OpenSecondarySubtitleOnVideoPlayer": "Sekundær undertekst (på videospiller)", "RemoveSecondarySubtitleOnVideoPlayer": "Sekundær undertekst på videospiller, fjern", + "EditSecondarySubtitleSettings": "Rediger innstillinger for andre undertekst", + "EditSecondarySubtitleSettingsDotDotDot": "Rediger innstillinger for andre undertekst...", + "SecondarySubtitleRememberSettings": "Husk disse innstillingene", + "SecondarySubtitleDoNotShowAgain": "Ikke vis denne dialogen igjen", + "SecondarySubtitleJustifyLines": "Juster linjer", "OpenRecentVideo": "Åpne nylig video", "ClearRecentVideos": "Tøm nylige videoer", "CutVideoTitle": "Klipp video", "CutVideoDotDotDot": "Klipp video...", + "RemuxVideoTitle": "Remux video", + "RemuxVideoDotDotDot": "Remux video...", + "RemuxVideoInputVideo": "Inndatavideo:", + "RemuxVideoMultipleTracksRequiresMkv": "Flere lyd- eller undertekstspor krever MKV-containeren. Utdataformatet er automatisk endret til .mkv.", + "RemuxVideoOutputFormat": "Utdataformat:", + "RemuxVideoOutputFile": "Utdatafil:", + "RemuxVideoRemuxing": "Remuxer video og lyd...", + "RemuxVideoFinalizing": "Fullfører utdatafilen (flytter indeksen til starten)...", + "RemuxVideoCompleted": "Videoen ble remuxet.", + "RemuxVideoFailed": "Kunne ikke remuxe videoen.", + "RemuxVideoPleaseSelectBoth": "Velg både video- og lydfiler.", + "RemuxVideoAssRequiresMkv": "ASS/SSA-undertekster krever MKV-containeren for å bevare all formatering og alle stiler.", + "RemuxVideoSccRequiresMov": "Scenarist-undertekster (.scc) bygges inn som CEA-608-teksting (closed captions), som krever MOV- eller MPG-containeren. Utdataformatet er automatisk endret til .mov.", + "RemuxVideoSccNotWithWebM": "Scenarist-teksting (.scc) krever MOV-containeren, som ikke kan inneholde VP9/AV1-videoen i en .webm-fil. Fjern .scc-filen eller konverter den til et annet undertekstformat.", + "RemuxVideoMpgMaxTwoCaptionTracks": "En .mpg-fil kan inneholde høyst to tekstingsspor (CC1 og CC3) - fjern undertekstfiler slik at én eller to gjenstår.", + "RemuxVideoMccRequiresMpg": "MacCaption-undertekster (.mcc) bygges inn som CEA-608/708-teksting i MPEG-2-videoen, som krever MPG-containeren. Utdataformatet er automatisk endret til .mpg.", + "RemuxVideoMpgReencodeVideoX": "Teksting i en .mpg-fil krever MPEG-2-video, og videoen er {0}. Vil du omkode videoen til MPEG-2? Dette tar lengre tid og senker kvaliteten litt.", + "RemuxVideoFileHasNoAudioX": "\"{0}\" har ikke noe lydspor, så den kan ikke brukes som lydkilde.", + "RemuxVideoAddingClosedCaptions": "Legger til teksting (closed captions)...", + "RemuxVideoSelectAudioTrack": "Velg lydspor", + "RemuxVideoSelectAudioTrackFor": "Velg lydspor for {0}", + "RemuxVideoSelectAudioTrackPrompt": "Filen '{0}' inneholder {1} lydspor. Velg lydsporet som skal remuxes:", + "RemuxVideoVideoFile": "video", + "RemuxVideoAudioFile": "lyd", + "RemuxVideoAudioFiles": "Lydfiler:", + "RemuxVideoSubtitleFiles": "Undertekstfiler (valgfritt, myke undertekster):", + "RemuxVideoSelectAudioTrackDotDotDot": "Velg lydspor...", + "RemuxVideoFilesX": "{0} filer", + "RemuxVideoMixAudio": "Miks lyd til ett spor", + "RemuxVideoVolumePercent": "Volum %:", + "RemuxVideoVolumeX": "Volum {0}%", + "RemuxVideoFastStart": "Optimaliser for strømming på nett (flytt indeksen til starten - tregere)", "EmbedSubtitlesDotDotDot": "Legg til/fjern innebygde undertekster...", "GenerateTimeCodes": "Generer tidskoder", "CheckeredImage": "Rutete bilde", - "SaveVideoAsTitle": "Lagre video som", "PromptForFfmpegParamsAndGenerate": "Spør om ffmpeg-parametere og generer", "CutVideoCutSegments": "Klipp segmenter", "CutVideoMergeSegments": "Slå sammen segmenter", "CutVideoSplitSegments": "Lagre segmenter individuelt", - "CutVideoType": "Klipptype", - "MpvRenderAuto": "Auto", - "MpvRenderNative": "Native", - "MpvRenderOpenGl": "OpenGL", - "MpvRenderSoftware": "Programvare (treg)", "CutVideoAlsoCutSubtitle": "Klipp også underteksten", "CutVideoSubtitleFileGeneratedX": "Undertekstfil generert: {0}", + "CutVideoTransition": "Overgang mellom segmenter", + "CutVideoTransitionDurationSeconds": "Varighet (sekunder)", + "CutVideoFadeInSeconds": "Ton inn fra svart ved start (sekunder)", + "CutVideoFadeOutSeconds": "Ton ut til svart ved slutt (sekunder)", + "CutVideoPreviewTransition": "Forhåndsvis overgang", + "CutVideoPreviewTransitionTitle": "Forhåndsvisning av overgang", + "CutVideoPreviewNeedsJoin": "Det finnes ingen skjøt å forhåndsvise - legg til minst to segmenter som skal slås sammen, eller et segment som skal klippes ut av midten.", + "CutVideoTransitionInfoX": "Hver overgang overlapper delene den skjøter, så utdataene blir {0} sekunder kortere per skjøt. En klippet undertekst får ny timing for å passe.", + "CutVideoTransitionFade": "Toning", + "CutVideoTransitionFadeBlack": "Toning via svart", + "CutVideoTransitionFadeWhite": "Toning via hvitt", + "CutVideoTransitionFadeGrays": "Toning via grått", + "CutVideoTransitionDissolve": "Overtoning", + "CutVideoTransitionWipeLeft": "Visk mot venstre", + "CutVideoTransitionWipeRight": "Visk mot høyre", + "CutVideoTransitionWipeUp": "Visk opp", + "CutVideoTransitionWipeDown": "Visk ned", + "CutVideoTransitionSlideLeft": "Skyv mot venstre", + "CutVideoTransitionSlideRight": "Skyv mot høyre", + "CutVideoTransitionSlideUp": "Skyv opp", + "CutVideoTransitionSlideDown": "Skyv ned", + "CutVideoTransitionSmoothLeft": "Myk mot venstre", + "CutVideoTransitionSmoothRight": "Myk mot høyre", + "CutVideoTransitionCircleOpen": "Sirkel åpne", + "CutVideoTransitionCircleClose": "Sirkel lukke", + "CutVideoTransitionRadial": "Radial", + "CutVideoTransitionPixelize": "Pikseler", + "CutVideoTransitionBlur": "Uskarphet", "ImportCurrentSubtitle": "Importer gjeldende undertekst", "AddRemoveEmbeddedSubtitlesTitle": "Legg til/fjern innebygde undertekster", "AddRemoveEmbeddedSubtitlesMp4Title": "Legg til/fjern innebygde undertekster (MP4)", "AddCurrentSubtitle": "Legg til gjeldende undertekst", - "EmbeddedTrackColumnNew": "Ny", "EmbeddedTrackNoSubtitlesFoundTitle": "Ingen undertekster funnet", "EmbeddedTrackNoSubtitlesFoundMessage": "Den valgte undertekstfilen inneholder ingen undertekster.", "EmbeddedTrackNoTracksTitle": "Ingen spor lagt til", @@ -2447,7 +2730,7 @@ "EmbeddedTrackGeneratingVideoXY": "Genererer video... {0}% {1}", "EmbeddedTrackGeneratingVideo": "Genererer video...", "Mp4FilesFilter": "MP4-filer", - "TitleOrLanguage": "Tittel/språk", + "EmbeddedTracksPickVideoHint": "Velg en videofil, eller slipp en her, for å se undertekstsporene.", "ViewMatroskaTrackX": "Vis Matroska-spor - {0}", "ResolutionSeparator": "x", "OpenFromUrlTitle": "Åpne videofil fra nettadresse", @@ -2457,9 +2740,7 @@ "OpenFromUrlDownloadAndOpen": "Last ned og åpne", "OpenFromUrlDownloadAndOpenDescription": "Lagre videoen lokalt, og åpne den deretter.", "OpenFromUrlDownloadAndOpenNote": "Kreves for tale-til-tekst og bølgeformtopper.", - "OpenFromUrlMissing": "Skriv inn en video-URL først.", "OpenFromUrlDownloadingTitle": "Laster ned video", - "OpenFromUrlSaveAs": "Lagre video som", "OpenFromUrlDownloadSubtitles": "Last også ned undertekster", "OpenFromUrlDownloadVideo": "Last ned video", "OpenFromUrlIncludeAutoGeneratedSubtitles": "Ta med automatisk genererte undertekster (originalspråk)", @@ -2496,56 +2777,38 @@ "ReEncodeGeneratingDone": "Generering ferdig", "ReEncodeGeneratedFilesX": "Genererte filer ({0}):", "ReEncodeFfmpegParameters": "ffmpeg parametere", + "AnalyzingVideoX": "Analyserer video... {0}% {1}", + "AnalyzingVideoXofY": "Analyserer video {0}/{1}... {2}% {3}", + "BackgroundImageFileNotSelected": "Bakgrunnsbildefil er ikke valgt", + "BackgroundImageFileDoesNotExistX": "Bakgrunnsbildefilen finnes ikke: {0}", "BurnIn": { "Title": "Generer video med innbrente undertekster", - "InfoAssaOff": "Merk: Advanced SubStation Alpha-stiler støttes.", - "InfoAssaOn": "Merk: Advanced SubStation Alpha-stiler vil bli brukt :)", - "XGeneratedWithBurnedInSubsInX": "\"{0}\" generert med innbrent undertekst på {1}.", - "TimeRemainingMinutes": "Gjenstående tid: {0} minutter", - "TimeRemainingOneMinute": "Gjenstående tid: Ett minutt", - "TimeRemainingSeconds": "Gjenstående tid: {0} sekunder", - "TimeRemainingAFewSeconds": "Gjenstående tid: Noen få sekunder", - "TimeRemainingMinutesAndSeconds": "Gjenstående tid: {0} minutter og {1} sekunder", - "TimeRemainingOneMinuteAndSeconds": "Gjenstående tid: Ett minutt og {0} sekunder", - "TargetFileName": "Målfilnavn: {0}", "TargetFileSize": "Målfilstørrelse (krever 2-pass-koding)", "FileSizeMb": "Filstørrelse i MB", "MatchSourceVideoSize": "Match størrelsen på kildevideoen", - "PassX": "Pass {0}", - "Encoding": "Koding", "BitRate": "Bitrate", "TotalBitRateX": "Total bitrate: {0}", "SampleRate": "Samplingsfrekvens", "Audio": "Lyd", - "Stereo": "Stereo", "Preset": "Forhåndsinnstilling", + "Tune": "Tune", "PixelFormat": "Pikselformat", "Crf": "CRF", - "TuneFor": "Optimaliser for", - "AlignRight": "Høyrejuster", - "GetStartPosition": "Hent startposisjon", - "GetEndPosition": "Hent sluttposisjon", "UseSource": "Bruk kilde", - "UseSourceFolder": "Bruk kildemappe", - "UseSourceResolution": "Bruk kildeoppløsning", - "OutputSettings": "Utdatafil/mappe...", "FontSizeFactor": "Skriftstørrelsesfaktor", "BoxType": "Bokstype", - "FixRightToLeft": "Fiks høyre-til-venstre", - "Cut": "Klipp", "FromTime": "Fra tid", "ToTime": "Til tid", "AudioEncoding": "Lydkoding", "OutputProperties": "Utdataegenskaper...", "VideoFileSize": "Videofilstørrelse", "OneBox": "Én boks", - "BoxPerLine": "Boks per linje", - "LogoInfo": "Velg et PNG-bilde og dra det for å plassere det på videoen." + "LogoInfo": "Velg et PNG-bilde og dra det for å plassere det på videoen.", + "NoSubtitlesGenerateAnyway": "Det finnes ingen undertekstlinjer å brenne inn.\n\nVil du generere videoen uten undertekster?", + "NoSubtitlesInXItemsGenerateAnyway": "{0} element(er) i satsen har ingen undertekstlinjer å brenne inn.\n\nVil du generere disse videoene uten undertekster?" }, "VideoTransparent": { - "Title": "Generer gjennomsiktig video med undertekster", - "InfoAssaOff": "Merk: Advanced SubStation Alpha-stiler støttes.", - "InfoAssaOn": "Merk: Advanced SubStation Alpha-stiler vil bli brukt :)" + "Title": "Generer gjennomsiktig video med undertekster" }, "AudioToText": { "Title": "Tale til tekst", @@ -2553,6 +2816,21 @@ "TranslateToEnglish": "Oversett til engelsk", "Transcribing": "Transkriberer...", "TranscribingXOfY": "Transkriberer {0} av {1}...", + "LinesTranscribedXOfYFailedZ": "{0} av {1} linjer ble transkribert - {2} mislyktes eller hadde ingen tale.\n\nMislykkede linjer beholder gjeldende tekst. Vil du bruke de transkriberte linjene, eller prøve de mislykkede på nytt (du kan endre motor eller innstillinger først)?", + "LinesTranscribedXOfYCancelled": "Transkripsjonen ble avbrutt etter {0} av {1} linjer.\n\nVil du bruke de transkriberte linjene? De andre linjene beholder gjeldende tekst.", + "NoLinesTranscribed": "Ingen av de {0} linjene kunne transkriberes.\nSe verktøyloggen for detaljer.", + "ApplyTranscribedLines": "Bruk transkriberte", + "RetryFailedLines": "Prøv mislykkede på nytt", + "IsolateSpeech": "Isoler tale (tregt)", + "IsolateSpeechHint": "Fjerner musikk og lydeffekter før transkribering. Gir færre tapte linjer og bedre timing på lyd med høy musikk, men tar omtrent like lang tid som selve lyden med GPU - og mange ganger lenger uten.", + "IsolatingSpeech": "Isolerer tale...", + "IsolateSpeechFailed": "Kunne ikke isolere talen - transkriberer den originale lyden i stedet.", + "DetectSpeakers": "Gjenkjenn talere", + "DetectSpeakersHint": "Starter hver linje med taleren, som \"(speaker 0)\", ved hjelp av NVIDIAs Sortformer-diarisering (opptil 8 talere). Fungerer best med motorer som deler linjer der taleren skifter, som Parakeet og Cohere.", + "DetectSpeakersNeedsNewerCrispAsr": "\"Gjenkjenn talere\" krever Crisp ASR v{0} eller nyere, men v{1} er installert.\n\nOppdater Crisp ASR (tannhjulknappen ved siden av motoren) eller slå av \"Gjenkjenn talere\".", + "XNeedsNewerCrispAsr": "{0} krever Crisp ASR v{1} eller nyere, men v{2} er installert.\n\nVil du laste ned og installere oppdateringen nå?", + "Vad": "VAD", + "VadHint": "Stemmeaktivitetsgjenkjenning: bare talen transkriberes, delt opp der taleren tar pause.\nAuto: Silero, og bare for motorene som trenger det (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: alltid på, for alle Crisp ASR-motorer. FireRedVAD er mest nøyaktig, Whisper-VAD gir færrest og reneste kutt, men er tregest.\nIndex-Echo bruker alltid Silero. --vad, --vad-model eller --chunk-seconds i de avanserte innstillingene har forrang.", "InputLanguage": "Inndataspråk", "AdvancedWhisperSettings": "Avanserte Whisper-innstillinger", "DownloadingSpeechToTextEngine": "Laster ned tale-til-tekst-motor", @@ -2567,8 +2845,6 @@ "AddCustomModelDotDotDot": "Legg til egendefinert modell...", "CustomModelHelp": "Du kan bruke din egen modell: velg modellfilen (whisper.cpp ggml '.bin') eller modellmappen (faster-whisper-mappe med en 'model.bin' inni). Den kopieres til modellmappen og legges til i listen over.", "ViewToolsLogFile": "Vis Whisper-loggfil", - "ReDownloadX": "Last ned {0} på nytt", - "DownloadX": "Last ned {0}", "UpdateXTitle": "Oppdatere {0}?", "UpdateXMessage": "En nyere versjon av {0} er tilgjengelig.{1}{1}Vil du laste ned og installere oppdateringen nå?", "DownloadingSpeechToTextModel": "Laster ned tale-til-tekst-modell", @@ -2638,7 +2914,7 @@ "CloneVoicePerLinePreparing": "Henter stemmen i hver linje fra videoen...", "CloneVoicePerLineNeedsVideo": "Kloning av stemmen i hver linje krever videoen underteksten hører til. Åpne videoen og prøv igjen.", "CloneVoicePerLineNoClips": "Ingen lyd kunne hentes fra videoen, så det er ingenting å klone fra. Kontroller at videoen har et lydspor.", - "CloneVoicePerLineNeedsOriginalSubtitleX": "{0} kan bare klone en linje når den vet hva som sies i videoen ved den linjen, og det kommer fra underteksten på originalspråket. Ingen original undertekst er lastet, så hver linje ville blitt lest av den første importerte stemmen i stedet for stemmen i videoen.\n\nÅpne den originale underteksten (Fil > Åpne original...) ved siden av oversettelsen, og generer på nytt.", + "CloneVoicePerLineTranscribeClipsXYZ": "{0} kan bare klone en linje når den vet hva som sies i videoen ved den linjen. Det er ikke kjent for {1} av {2} linjer - det kommer vanligvis fra underteksten på originalspråket (Fil > Åpne original...).\n\nVil du transkribere disse linjene fra videoen med tale til tekst nå?\n\nJa: velg motoren og språket som snakkes i videoen, så transkriberes referanseklippene før talen genereres.\nNei: generer likevel - disse linjene leses av en vanlig stemme i stedet for stemmen i videoen.", "VoiceCloneConsentTitle": "Stemmekloning - før du starter", "VoiceCloneConsentHeader": "Du er i ferd med å klone en stemme", "VoiceCloneConsentIntro": "Kloning kopierer en virkelig persons stemme. Det følger regler med det de fleste steder, og i EU juridiske plikter som faller på deg, ikke på Subtitle Edit. Les dette én gang.", @@ -2654,6 +2930,12 @@ "VoiceCloneConsentDeclined": "Stemmekloning er ikke tilgjengelig før disse vilkårene er godtatt.", "AdvancedTtsAudioProcessing": "Lydbehandling", "AdvancedTtsOutput": "Utdata", + "AdvancedTtsVoiceCloning": "Stemmekloning", + "CleanCloneReferences": "Rens referanser for stemmekloning (Sidon)", + "CleanCloneReferencesDescription": "Fjerner musikk, støy og etterklang fra lyden en stemme klones fra: klipp hentet fra videoen og opptak importert i stemmebehandlingen. Bruker Sidon-modellen for talegjenoppretting på audio.cpp (940 MB nedlasting). Den klonede stemmen kopierer ikke lenger bakgrunnen, men svært stille eller overlappende tale kan bli dempet.", + "CleaningCloneReferencesDotDotDot": "Renser referanser for stemmekloning...", + "DownloadSidonTitle": "Laste ned Sidon?", + "DownloadSidonQuestionX": "Rensing av referanser for stemmekloning krever Sidon-modellen for talegjenoppretting ({0}).\n\nVil du laste den ned nå? Uten den brukes referansene som de er.", "RubberbandInstalled": "(installert)", "RubberbandNotFound": "(ikke funnet i FFmpeg)", "GenerationFolder": "Genereringsmappe", @@ -2662,14 +2944,11 @@ "DeleteTempFilesDescription": "Sletter genereringsmappen når Tekst til tale-vinduet lukkes. Lagrede lyd- og videofiler beholdes.", "PiperSettings": "Piper-innstillinger", "Title": "Tekst til tale", - "TextToSpeechEngine": "Tekst til tale-motor", "ReviewAudioSegments": "TTS - Gjennomgå lydsegmenter", "ReviewAudioSegmentsHistory": "TTS - Gjennomgå lydhistorikk", "Stability": "Stabilitet", "Similarity": "Likhet", "SpeakerBoost": "Talerforsterkning", - "StyleExaggeration": "Stiloverdrivelse", - "RegenerateAudioSelectedLine": "Regenerer lyd for valgt linje", "GenerateSpeechFromText": "Generer tale fra tekst", "TestVoice": "Test stemme", "AddAudioToVideoFile": "Legg lyd til videofil", @@ -2688,22 +2967,98 @@ "VideoEncodingSettings": "TTS - Videokodingsinnstillinger", "ElevenLabsSettings": "TTS - ElevenLabs-innstillinger", "ElevenLabsSettingsResetHint": "Tilbakestill ElevenLabs-innstillinger til standardverdier", + "Provider": "Leverandør", + "OpenAiCompatibleSettings": "TTS - OpenAI-kompatible innstillinger", + "CustomServerUrl": "Egendefinert server-URL", + "CustomServerUrlHint": "Fullstendig tale-endepunkt for en OpenAI-kompatibel server, brukt når leverandøren er \"Egendefinert\", f.eks. http://localhost:8880/v1/audio/speech", + "CustomModels": "Egendefinerte modeller", + "CustomModelsHint": "Kommaseparerte modellnavn som tilbys når leverandøren er \"Egendefinert\"", + "CustomVoices": "Egendefinerte stemmer", + "CustomVoicesHint": "Kommaseparerte stemmenavn, brukt av leverandøren \"Egendefinert\" og av OpenRouter-modeller som ikke publiserer en stemmeliste", + "Instructions": "Instruksjoner", + "InstructionsHint": "Valgfri talestil, f.eks. \"Snakk med en rolig, varm stemme\". Sendes bare til modeller som støtter det (ikke tts-1/tts-1-hd)", + "OpenAiSpeedHint": "Talehastighet fra 0,25 til 4,0 (1,0 er normal). Ikke alle modeller støtter det", + "OutputFormat": "Utdataformat", + "OutputFormatHint": "Lydformat som bes om fra serveren. \"Auto\" ber om MP3 og bytter til PCM for modeller som bare returnerer PCM (f.eks. Gemini TTS)", "RegenerateAudio": "Regenerer lyd", "AutoContinuePlaying": "Auto-fortsett avspilling", "AddingAudioToVideoFileDotDotDot": "Legger lyd til videofil...", "PreparingMergeDotDotDot": "Forbereder sammenslåing...", "ImportVoiceDotDotDot": "Importer stemme...", + "RenameVoiceDotDotDot": "Gi stemme nytt navn...", + "RenameVoiceTitle": "Gi stemme nytt navn", + "VoiceXCouldNotBeRenamedX": "Stemmen '{0}' kunne ikke få nytt navn: {1}", + "DeleteVoiceDotDotDot": "Slett stemme...", + "DeleteVoiceTitle": "Slett stemme", + "DeleteVoiceXQuestion": "Slette stemmen '{0}'?\n\nReferanseopptaket og filene tilhørende det fjernes fra disken.", + "VoiceXCouldNotBeDeletedX": "Stemmen '{0}' kunne ikke slettes: {1}", "VoiceImportSuccessTitle": "Stemme importert", "VoiceXImported": "Stemme '{0}' ble importert vellykket", "DropAudioFileHereToImportVoice": "Slipp lydfil her for å importere stemme", "DropAudioFileHereHint": ".wav eller .mp3", "VoiceCloneTranscriptTitle": "Skriv inn transkripsjon av lyden (kreves for stemmekloning)", + "VoiceManagerTitle": "TTS - Stemmebehandling", + "VoiceManagerDotDotDot": "Stemmebehandling...", + "VoiceManagerMenuItem": "TTS-stemmebehandling...", + "SpeakFromCurrentLineTitle": "Les opp fra gjeldende linje", + "SpeakFromCurrentLineDotDotDot": "Les opp fra gjeldende linje...", + "SpeakFromCurrentLineHint": "Leser linjene høyt én etter én, fra gjeldende linje. Trykk Escape eller klikk på en annen linje for å stoppe.", + "StopSpeaking": "Stopp opplesing", + "SpeakingLineX": "Leser opp linje {0}... (Escape for å stoppe)", + "PlayWithSpeechTitle": "Spill av med tale", + "PlayWithSpeechDotDotDot": "Spill av med tale...", + "PlayWithSpeechHint": "Spiller av videoen og leser opp hver linje når videoen når den. Pause og søk som vanlig; trykk Escape for å stoppe.", + "LowerVideoVolumeWhileSpeaking": "Senk videovolumet under opplesing", + "PauseVideoWhenSpeechRunsLate": "Sett videoen på pause når talen går over i neste linje", + "WaitingForSpeechLineX": "Genererer tale for linje {0}... (Escape for å stoppe)", + "VoiceKindClone": "Klonet stemme", + "VoiceKindPreset": "Innebygd", + "VoiceKindModel": "Stemmemodell", + "VoiceKindOnline": "På nett", + "Transcript": "Transkripsjon", + "TranscriptRequiredHint": "Påkrevd - motoren leser denne transkripsjonen av opptaket (ref-text) ved kloning", + "TranscriptOptionalHint": "Valgfritt - en nøyaktig transkripsjon av opptaket forbedrer kloningen", + "SaveTranscript": "Lagre transkripsjon", + "SearchVoices": "Søk etter stemmer", + "LoadingVoicesDotDotDot": "Laster stemmer...", + "NoVoicesForEngine": "Ingen stemmer - importer et opptak eller last ned en stemmepakke", + "NoVoicesMatchFilter": "Ingen stemmer samsvarer med søket", + "CopyVoiceTo": "Kopier stemme til", + "CopyVoiceToDotDotDot": "Kopier stemme til motor...", + "CopyingVoiceXToYDotDotDot": "Kopierer stemmen '{0}' til {1}...", + "VoiceXCopiedToY": "Stemmen '{0}' kopiert til {1}", + "VoiceXCouldNotBeCopiedToY": "Stemmen '{0}' kunne ikke kopieres til {1} - se loggen for detaljer", + "VoiceXAlreadyExistsInYContinue": "En stemme med navnet '{0}' finnes allerede i {1}.\n\nVil du kopiere likevel?", + "OpenVoicesFolder": "Åpne stemmemappe", + "DownloadVoicePacksDotDotDot": "Last ned stemmepakker...", + "DownloadVoicePacksTitle": "TTS - Last ned stemmepakker", + "VoicePackIntro": "Stemmepakker er sett med korte, rene opptak med transkripsjoner, klare til kloning. Hver pakke importeres til den valgte motoren (stemmer som allerede finnes, hoppes over) og inneholder en ATTRIBUTION.txt med lisens og kilder.", + "VoicePackDetailsXVoicesYSizeZLicense": "{0} stemmer · {1} · {2}", + "InstallToEngine": "Installer til motor", + "DownloadAndInstall": "Last ned og installer", + "SelectAtLeastOneVoicePack": "Velg minst én stemmepakke", + "DownloadingXDotDotDot": "Laster ned {0}...", + "InstallingXDotDotDot": "Installerer {0}...", + "XVoicesInstalledYSkipped": "{0} stemmer installert ({1} fantes allerede)", "UseSpeechToTextDotDotDot": "Bruk tale-til-tekst...", "AdvancedTtsSettings": "Avanserte TTS-innstillinger", "ProAudioPostProcessing": "Pro lydetterbehandling", "ProAudioPostProcessingDescription": "Anvender EQ-varme, støyport, kompresjon, loudness-normalisering (-16 LUFS) og inntoning/uttoning på hvert segment.", + "GeneratingSpeechSegmentXOfY": "Genererer tale: segment {0} av {1}", + "AdjustingSpeedSegmentXOfY": "Justerer hastighet: segment {0} av {1}", + "MergingAudioSegmentXOfY": "Slår sammen lyd: segment {0} av {1}", + "PostProcessingSegmentXOfY": "Etterbehandling: segment {0} av {1}", "AudioDucking": "Lyd-ducking", "AudioDuckingDescription": "Reduserer det originale videolydvolumet og mikser det med TTS-lyden, slik at det originale lydsporet fortsatt høres svakt.", + "RemoveOriginalSpeech": "Fjern original tale (tregt)", + "RemoveOriginalSpeechDescription": "Beholder musikken og lydeffektene i den originale videoen, men fjerner talen, og mikser den nye talen over dette. Tar omtrent like lang tid som selve videoen med GPU, og mange ganger lenger uten. Med lyddemping på gjelder volumet musikken og effektene. Gjelder bare når talen legges til videofilen.", + "RemovingOriginalSpeech": "Fjerner original tale...", + "RemoveOriginalSpeechFailed": "Kunne ikke fjerne den originale talen - talen ble lagt til videoen uten dette.", + "SpeechRemovalModel": "Modell", + "SpeechRemovalModelDescription": "Beste kvalitet beholder mest av musikken og lydeffektene. Rask er omtrent tre ganger raskere, med litt mer av musikken tapt.", + "SpeechRemovalBestQuality": "Beste kvalitet (Mel-Band RoFormer)", + "SpeechRemovalFast": "Rask (HTDemucs)", + "VideoTruncatedWarning": "Bildet i den nye videofilen stopper etter {0}, men den originale videoen er {1} lang - bildet fryser mens lyden fortsetter.\n\nFilen ble beholdt. Se error-log.txt i datamappen til Subtitle Edit for utdata fra ffmpeg.", "OriginalVolumePercent": "Originalt volum %", "VadSilenceCompression": "VAD stillhetskomprimering", "VadSilenceCompressionDescription": "Forkorter pauser mellom ord før tempoet endres. Bruker stemmeaktivitetsdeteksjon for å komprimere bare stillhetshull mens talen forblir uberørt. Dette er det foretrukne første trinnet — det reduserer varigheten uten tap av kvalitet.", @@ -2770,7 +3125,6 @@ "SubtitleMergedLinesAppliedPlural": "Brukte {0} linjesammenslåinger fra tekst til tale" }, "ShotChanges": { - "TitleGenerateOrImport": "Generer/importer sceneskifter", "GenerateShotChanges": "Generer sceneskifter", "ImportShotChanges": "Importer sceneskifter", "GenerateShotChangesWithFfmpeg": "Generer sceneskifter med ffmpeg", @@ -2780,7 +3134,9 @@ "TimeCodeFormatColon": "Tidskodeformat:", "ShotChangesList": "Sceneskifteliste", "ShotChangesClearQuestion": "Er du sikker på at du vil tømme alle sceneskifter?", - "DeleteSelectedShotChangeQuestion": "Er du sikker på at du vil slette det valgte sceneskiftet?" + "DeleteSelectedShotChangeQuestion": "Er du sikker på at du vil slette det valgte sceneskiftet?", + "ShotChanges": "Sceneskifter", + "ExportShotChanges": "Eksporter sceneskifter" }, "VideoOcr": { "Title": "OCR av innbrent undertekst", @@ -2790,10 +3146,6 @@ "BottomHalf": "Nederste halvdel", "FullFrame": "Hele bildet", "Engine": "OCR-motor", - "Language": "Språk", - "Url": "URL", - "Model": "Modell", - "ApiKey": "API-nøkkel", "Scan": "Skann", "FramesPerSecond": "Bilder per sekund", "TextBrightnessMinimum": "Minimum tekstlysstyrke (0=av)", @@ -2808,10 +3160,10 @@ "RunningOcrXY": "Kjører OCR... {0}/{1}", "NoLinesFoundTitle": "Ingen undertekster funnet", "NoLinesFoundMessage": "Ingen tekst ble funnet i skanneområdet - prøv å justere skanneområdet, motoren eller minimum lysstyrke.", + "OcrStoppedEarlyMessage": "OCR-motoren stoppet før alle bilder var lest, så linjene som er funnet så langt beholdes, og resten mangler.{0}{0}{1}", "LinesFoundX": "{0} linjer funnet", "RefiningTimingXY": "Finjusterer timing... {0}/{1}", "FixOcrErrors": "Fiks OCR-feil", - "Dictionary": "Ordbok", "EditLineX": "Rediger linje {0}", "DownloadDictionaryHint": "Last ned en stavekontrollordbok...", "FramesPerSecondHint": "Hvor mange bilder per sekund som skannes. 5 dekker vanlige undertekster; høyere fanger opp svært korte linjer og strammer grupperingen, men koster mer OCR-tid.", @@ -2828,14 +3180,64 @@ "TestOcr": "Test gjeldende bilde", "TestOcrRunning": "Tester OCR på gjeldende bilde...", "TestOcrResultX": "Testresultat: {0}", - "TestOcrNoTextFound": "Test: ingen tekst funnet i skanneområdet" + "TestOcrNoTextFound": "Test: ingen tekst funnet i skanneområdet", + "EngineSettings": "Innstillinger for OCR-motor", + "EngineBuiltIn": "Innebygd i operativsystemet", + "EngineExternalServer": "Ekstern server (installeres og administreres utenfor Subtitle Edit)", + "EngineCloudApi": "Sky-API (krever en API-nøkkel)", + "EngineNothingToInstall": "Ingenting å installere", + "EngineModelsMissing": "Motor installert, modeller mangler", + "Website": "Nettsted" + }, + "BackgroundMusic": { + "Title": "Generer bakgrunnsmusikk", + "GenerateBackgroundMusicDotDotDot": "Generer bakgrunnsmusikk...", + "Preset": "Forhåndsinnstilling", + "Prompt": "Ledetekst", + "TempoBpm": "Tempo (BPM)", + "GenerateSeconds": "Generer (sekunder)", + "Seed": "Frø", + "RandomSeed": "Tilfeldig", + "OutputLength": "Utdatalengde", + "OutputLengthVideoX": "{0} (videolengde - musikken går i sømløs sløyfe)", + "MusicVolumePercent": "Musikkvolum (%)", + "RemoveExistingAudioTracks": "Fjern eksisterende lydspor", + "OriginalAudioVolumePercent": "Originalt lydvolum (%)", + "SaveAudioDotDotDot": "Lagre lyd...", + "AddToVideoDotDotDot": "Legg til video...", + "EngineInfo": "ACE-Step 1.5 Turbo via audio.cpp (MIT-lisens) - kjører lokalt", + "PresetCooking": "Matlaging / baking", + "PresetTech": "Teknologi / dingsanmeldelse", + "PresetForest": "Skog / natur", + "PresetRelaxingPiano": "Avslappende piano", + "PresetLofiVlog": "Lo-fi-vlogg", + "PresetCorporate": "Bedrift / forklaringsvideo", + "LoadingModel": "Laster modell...", + "Composing": "Komponerer...", + "GeneratingAudio": "Genererer lyd...", + "DecodingAudio": "Dekoder lyd...", + "CreatingLoop": "Lager sømløs sløyfe...", + "ResultLoopXYZ": "Sløyfe: {0} på {1} BPM, sømsamsvar {2}%", + "ResultNoLoopX": "Musikk klar: {0}", + "AddingMusicToVideo": "Legger til musikk i video...", + "DownloadModelTitle": "Laste ned musikkmodell?", + "DownloadModelQuestionX": "Generering av musikk krever ACE-Step 1.5-modellen ({0}).\n\nVil du laste ned modellen?", + "DownloadingModel": "Laster ned ACE-Step 1.5-modellen...", + "SaveAudioTitle": "Lagre bakgrunnsmusikk", + "AudioFileSavedX": "Lydfil lagret: {0}", + "UnableToGenerateMusic": "Kan ikke generere musikk", + "UnableToAddMusicToVideo": "Kan ikke legge til musikk i video", + "OutputLengthTextToSpeech": "Følger den genererte talen - musikken går i sømløs sløyfe og dempes mens noen snakker", + "AddBackgroundMusic": "Legg til bakgrunnsmusikk", + "AddBackgroundMusicHint": "Generer musikk lokalt med ACE-Step 1.5 og miks den under talen - den dempes mens noen snakker", + "GeneratingBackgroundMusicDotDotDot": "Genererer bakgrunnsmusikk...", + "MixingBackgroundMusicDotDotDot": "Mikser bakgrunnsmusikk..." }, "Voices": "Stemmer", "Presets": "Forhåndsinnstillinger", "TalkerX": "Taler {0}", "BaseModel": "Basismodell", "TurboModel": "Turbomodell", - "TtsUpdateX": "Oppdater {0}", "TtsEngineNotInstalled": "{0} er ikke installert", "TtsEngineUpdateAvailable": "{0} - oppdatering tilgjengelig", "TtsEngineTooOldUpdateRequired": "{0} er for gammel - oppdatering kreves", @@ -2858,19 +3260,25 @@ "CloneVoiceTo": "Klon stemme til", "CloneVoiceNameTitle": "Navn på ny stemme", "CloneVoiceExtractFailed": "Kunne ikke trekke ut lyd for den valgte linjen.", + "LineXHasNoDuration": "Linje {0} har ingen varighet (sluttiden er ikke etter starttiden), så det finnes ingen lyd å trekke ut.", + "AudioClipsSkippedLinesX": "Ingen lyd kunne trekkes ut for disse linjene, så de ble hoppet over: {0}", "ToggleShotChange": "Veksle sceneskifte", "ResetWaveformZoomAndSpeed": "Tilbakestill bølgeform-zoom og hastighet", "ShowOriginalSubtitle": "Vis original undertekst", + "TimelineGroupTracksBy": "Grupper undertekstspor etter", + "TimelineShowThumbnails": "Vis miniatyrbilder fra video", + "ShowSpeechOnly": "Vis kun tale (tregt å generere)", + "IsolatingSpeechForWaveformX": "Isolerer tale for bølgeformen... {0}", + "IsolatingSpeechForWaveformFailed": "Kunne ikke isolere talen for bølgeformen - se verktøyloggen", + "SpeechOnlyWaveformReady": "Bølgeformen viser nå bare tale", "ShowOnlyWaveform": "Vis kun bølgeform", "ShowOnlySpectrogram": "Vis kun spektrogram", "ShowWaveformAndSpectrogram": "Vis bølgeform og spektrogram", - "SpectrogramClassic": "Klassisk", "SpectrogramClassicViridis": "Viridis", "SpectrogramClassicPlasma": "Plasma", "SpectrogramClassicInferno": "Inferno", "SpectrogramClassicTurbo": "Turbo", "SpectrogramNeon": "Neon", - "WaveformDrawStyleClassic": "Klassisk", "WaveformDrawStyleFancy": "Fancy", "SetVideoPositionAndPauseAndSelectSubtitle": "Sett videoposisjon, pause, og velg undertekst", "SetVideopositionAndPauseAndSelectSubtitleAndCenter": "Sett videoposisjon, pause, velg undertekst, og sentrer", @@ -2880,7 +3288,6 @@ }, "Sync": { "VisualSync": "Visuell synkronisering", - "Sync": "Synkronisering", "StartScene": "Startscene", "EndScene": "Sluttscene", "PlayTwoSecondsAndBack": "Spill 2 sek og tilbake", @@ -2896,19 +3303,18 @@ "AdjustSelectedLinesAndForward": "Juster valgte linjer og fremover", "ToFrameRate": "Til bildefrekvens", "FromFrameRate": "Fra bildefrekvens", + "VideoXFrameRateY": "{0} - {1} fps", "AdjustAllTimes": "Juster alle tider (vis tidligere/senere)", "ShowEarlier": "Vis tidligere", "ShowLater": "Vis senere", - "ChangeFrameRate": "Endre bildefrekvens", "SetSyncPoint": "Sett synkroniseringspunkt", "SetSyncPointViaVideo": "Sett synkroniseringspunkt via video...", "SyncPointTimeCode": "Tidskode for synkroniseringspunkt", "SyncPoints": "Synkroniseringspunkter", "PointSync": "Punktsynkronisering", "PointSyncViaOther": "Punktsynkronisering via annen undertekst", - "AdjustmentX": "Justering: {0}", - "TotalAdjustmentX": "Total justering: {0}", - "SyncPointCandidateInfo": "Linjer som starter etter {0}+ sekunder med stillhet er uthevet - de gir ofte pålitelige synkroniseringspunkter", + "SyncPointCandidateAfterInfo": "Linjer som etterfølges av {0}+ sekunder med stillhet er uthevet - de gir ofte pålitelige synkroniseringspunkter", + "GapAfter": "Mellomrom etter", "AdjustAllShortcuts": "Hurtigtaster:\r\n\r\n• Shift + Venstre/Høyre: Flytt 10 ms\r\n• Ctrl + Venstre/Høyre: Flytt 100 ms\r\n• Alt + Venstre/Høyre: Flytt 500 ms", "AdjustAllShortcutsFrames": "Hurtigtaster:\r\n\r\n• Shift + Venstre/Høyre: Flytt 1 bilde\r\n• Ctrl + Venstre/Høyre: Flytt 10 bilder\r\n• Alt + Venstre/Høyre: Flytt 1 sekund", "OffsetInSeconds": "Forskyvning i sekunder", @@ -2928,6 +3334,7 @@ "LineMerge": "Linjesammenslåing", "DelayInSecondsBetweenRequests": "Forsinkelse i sekunder mellom forespørsler", "MaxBytesPerRequest": "Maks bytes per forespørsel", + "KeepMusicLinesUntranslated": "Ikke oversett linjer i musikksymboler (♪ ... ♪)", "PromptText": "Ledetekst (prompt)", "ResetPromptToDefault": "Tilbakestill ledetekst til standard", "TranslateEachLineSeparately": "Oversett hver linje separat", @@ -2941,11 +3348,10 @@ "ReadyToTranslate": "Klar til å oversette", "Translating": "Oversetter...", "TranslationComplete": "Oversettelse fullført", + "TranslateInPlaceNoOriginal": "Oversett på stedet (ikke opprett original)", "TranslationCancelled": "Oversettelse avbrutt", "SwapLanguages": "Bytt kilde- og målspråk", "XIsAlreadyDownloadedReDownload": "{0} er allerede lastet ned. Laste ned på nytt?", - "AdvancedDotDotDot": "Avansert...", - "AdvancedSettings": "Avanserte innstillinger", "AdvancedSettingsSubtitle": "Alternativer for batch, kontekst og sampling for den avanserte llama.cpp-motoren", "Context": "Kontekst", "Synopsis": "Synopsis", @@ -2969,6 +3375,7 @@ "UseOnlyExtraServerParametersHint": "Start llama-server med parameterne over i stedet for Subtitle Edits egen tilpasning - kun modell, vert og port angis fortsatt", "ServerRunningAtX": "Server kjører på {0}", "CustomPromptHint": "Egendefinerte instruksjoner ({0} = kildespråk, {1} = målspråk); tom = innebygd ledetekst", + "EditTranslationHint": "Klikk på oversettelsen i den valgte raden for å redigere den (Enter lagrer, Escape avbryter)", "LlamaCppDownloadEngineAndModelPrompt": "llama.cpp krever at llama-server-motoren og en oversettelsesmodell lastes ned. Vil du laste ned nå?", "LlamaCppDownloadEnginePrompt": "llama.cpp krever at llama-server-motoren lastes ned. Vil du laste ned nå?", "LlamaCppDownloadModelPrompt": "llama.cpp krever at den valgte oversettelsesmodellen lastes ned. Vil du laste ned nå?" @@ -2995,14 +3402,6 @@ "WaveformSnapToShotChangeSameShotEndMaxSeconds": "Fest til nærmeste sceneskifte: maks sluttavstand når start og slutt deler samme klipp (sekunder)", "WaveformGuessStartOffsetMs": "Gjett starttid fra bølgeform: legg starten tidligere med (ms)", "WaveformGuessEndOffsetMs": "Gjett sluttid fra bølgeform: legg slutten senere med (ms)", - "ShowToolbarMultipleReplace": "Vis ikon for søk og erstatt flere", - "ShowToolbarPointSync": "Vis ikon for punktsynkronisering", - "ShowToolbarAutoTranslate": "Vis ikon for auto-oversett", - "ShowToolbarSpeechToText": "Vis ikon for tale til tekst", - "ShowToolbarStyleManager": "Vis ikon for stilbehandler (ASSA/SSA/WebVTT)", - "ShowToolbarProperties": "Vis ikon for egenskaper (ASSA/SSA)", - "ShowToolbarAttachments": "Vis ikon for vedlegg (ASSA/SSA)", - "ShowToolbarAssaDraw": "Vis ikon for ASSA-tegning (ASSA)", "ProxyDomain": "Domene", "ProxyUseSystemCredentials": "Bruk systemets legitimasjon", "ProxyBypassList": "Omgå proxy for", @@ -3014,8 +3413,14 @@ "CheckForUpdatesChannelStableAndBeta": "Stabile og beta-versjoner", "AssaAutoSetResolution": "ASSA: sett oppløsning (PlayResX/PlayResY) fra videoen når en video åpnes", "AssaAutoSetResolutionPrompt": "ASSA: spør før oppløsningen endres til å passe videoen (ellers resamples den automatisk)", + "VideoControls": "Videokontroller", + "VideoControlsEdit": "Rediger videokontroller...", + "VideoControlsPositionText": "Posisjon-/varighetstekst", + "VideoControlsVideoFileName": "Videofilnavn", + "VideoControlsPlayerName": "Navn på videospiller", "MergeKeepEndTime": "Slå sammen linjer: behold sluttid (tillat overlapp med neste undertekst)", "MergeKeepEndTimeOnlyAssa": "Slå sammen linjer: behold sluttid kun for \"Advanced Sub Station Alpha\"", + "MergeAutoBreak": "Slå sammen linjer: automatisk linjedeling av sammenslått tekst (av beholder linjenes egne linjeskift)", "DefaultSaveLocation": "Standard lagringssted", "DefaultSaveLocationSourceFileFolder": "Mappen til undertekst-/videofilen", "DefaultSaveLocationLastUsedFolder": "Sist brukte mappe", @@ -3023,6 +3428,7 @@ "DefaultSaveLocationSubtitleFileFolder": "Undertekstfilens mappe", "DefaultSaveLocationCustomFolder": "Egendefinert mappe", "SubtitleGridFormattingHideTags": "Skjul koder", + "SubtitleGridFormattingShowFormattingKeepTags": "Vis formatering, behold ikke-visuelle koder", "MusicSymbolsToReplace": "Musikksymboler som skal erstattes (atskilt med komma)", "MusicSymbol": "Musikksymbol", "ColorWordsPerMinute": "Fargelegg ord/min hvis for høyt", @@ -3033,7 +3439,6 @@ "DialogStyleDashBothLinesWithSpace": "Bindestrek begge linjer med mellomrom", "DialogStyleDashBothLinesWithoutSpace": "Bindestrek begge linjer uten mellomrom", "ContinuationStyle": "Fortsettelsesstil", - "ContinuationStyleNone": "Ingen", "ContinuationStyleNoneTrailingDots": "Ingen, punktum for pauser (bare etterfølgende)", "ContinuationStyleNoneLeadingTrailingDots": "Ingen, punktum for pauser", "ContinuationStyleNoneTrailingEllipsis": "Ingen, ellipse for pauser (bare etterfølgende)", @@ -3044,7 +3449,6 @@ "ContinuationStyleLeadingTrailingEllipsis": "Ellipse", "ContinuationStyleLeadingTrailingDash": "Bindestrek", "ContinuationStyleLeadingTrailingDashDots": "Bindestrek, men punktum for pauser", - "ContinuationStyleCustom": "Egendefinert", "CpsLineLengthStyle": "Tegn/sek / linjelengde", "CpsLineLengthStyleCalcAll": "Tell alle tegn", "CpsLineLengthStyleCalcNoSpaceCpsOnly": "Tell alle unntatt mellomrom, kun for tegn/sek", @@ -3057,27 +3461,11 @@ "CpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly": "Ingen mellomrom eller tegnsetting, kun for tegn/sek", "CpsLineLengthStyleCalcIgnoreArabicDiacritics": "Ignorer arabiske diakritiske tegn", "CpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "Ignorer arabiske diakritiske tegn, ingen mellomrom", - "TimeCodeModeHhMmSsMs": "TT:MM:SS:MS", - "TimeCodeModeHhMmSsFf": "TT:MM:SS:FF", - "SplitBehaviorPrevious": "Legg til mellomrom til venstre for delingspunktet (fokus høyre)", - "SplitBehaviorHalf": "Legg til mellomrom i midten av delingspunktet (fokus venstre)", - "SplitBehaviorNext": "Legg til mellomrom til høyre for delingspunktet (fokus venstre)", - "SubtitleListActionNothing": "Ingenting", - "SubtitleListActionVideoGoToPositionAndPause": "Gå til videoposisjon og sett på pause", - "SubtitleListActionVideoGoToPositionAndPlay": "Gå til videoposisjon og spill av", "SubtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "Gå til videoposisjon, spill gjeldende og sett på pause", - "SubtitleListActionEditText": "Gå til rediger tekstboks", "SubtitleListActionVideoGoToPositionMinus1SecAndPause": "Gå til videoposisjon - 1 s og sett på pause", "SubtitleListActionVideoGoToPositionMinusHalfSecAndPause": "Gå til videoposisjon - 0,5 s og sett på pause", "SubtitleListActionVideoGoToPositionMinus1SecAndPlay": "Gå til videoposisjon - 1 s og spill av", - "SubtitleListActionEditTextAndPause": "Gå til rediger tekstboks, og sett på pause ved videoposisjon", - "AutoBackupEveryMinute": "Hvert minutt", - "AutoBackupEveryXthMinute": "Hvert {0}. minutt", - "Profiles": "Profiler", - "AutoBackupDeleteAfterXMonths": "Slett auto-sikkerhetskopier etter {0} måneder", "SearchSettingsDotDotDot": "Søk etter innstillinger...", - "SyntaxColoring": "Syntaksfarging", - "WaveformSpectrogram": "Bølgeform/spektrogram", "Network": "Nettverk", "FileTypeAssociations": "Filtypetilknytninger", "TextBoxColorTags": "Fargekoder (HTML/ASSA) i undertekst-tekstboks", @@ -3110,10 +3498,9 @@ "DarkThemeForegroundColor": "Mørkt tema forgrunnsfarge", "DarkThemeBackgroundColor": "Mørkt tema bakgrunnsfarge", "ShowGridLines": "Vis rutenettlinjer", - "ResetSettings": "Tilbakestill innstillinger?", - "ResetSettingsDetail": "Dette vil tilbakestille alle innstillinger til standardverdiene.\n\nFortsette?", "ShowHorizontalLineAboveToolbar": "Vis horisontal linje over verktøylinjen", "BookmarkColor": "Bokmerkefarge", + "SpellCheckHighlightColor": "Uthevingsfarge for stavekontroll", "SingleLineMaxLength": "Enkeltlinje maks lengde", "OptimalCharsPerSec": "Optimalt tegn/sek", "MaxCharsPerSec": "Maks tegn/sek", @@ -3126,13 +3513,21 @@ "UnbreakSubtitlesShortThan": "Fjern linjedeling på undertekster kortere enn", "NewEmptyDefaultMs": "Standard varighet for ny undertekst (ms)", "TimeCodeUpDownStepMs": "Tid opp/ned-steg (ms)", + "MoveSelectedLinesStepMs": "Steg for hurtigtast for flytting av valgte linjer (ms)", + "MoveStartEndStepMs": "Steg for hurtigtast for flytting av start/slutt (ms)", + "MoveLinesShortenNeighbor": "Flytt linjer: forkort forrige/neste linje i stedet for å overlappe den", "PromptBeforeDelete": "Spør før sletting", "RememberPositionAndSize": "Husk vindusposisjon og -størrelse", + "TitleBarFullFileName": "Vis full filbane i tittellinjen", + "ShowRecentFiles": "Vis nylige filer (for gjenåpning)", "OpenLastFileOnStart": "Åpne siste siste fil ved start", "AutoSave": "Autolagring (lagre den åpne filen mens du redigerer)", "AutoBackupOn": "Auto-sikkerhetskopi", "AutoBackupIntervalMinutes": "Intervall for auto-sikkerhetskopi (minutter)", "AutoBackupDeleteAfterDays": "Behold auto-sikkerhetskopi i (dager)", + "SettingsBackupOn": "Automatisk sikkerhetskopi av innstillinger", + "SettingsBackupIntervalDays": "Intervall for sikkerhetskopi av innstillinger (dager, 0 = hver oppstart)", + "SettingsBackupMaxCount": "Antall sikkerhetskopier av innstillinger som beholdes", "AutoConvertToUtf8": "Auto-konverter til UTF-8 ved åpning", "AutoTrimWhiteSpace": "Auto-trim mellomrom", "DefaultEncoding": "Standard koding", @@ -3146,23 +3541,14 @@ "ColorGapTooShort": "Farg hvis mellomrommet er for kort", "ErrorBackgroundColor": "Feil bakgrunnsfarge", "WaveformDrawGridLines": "Tegn rutenettlinjer", - "WaveformCenterVideoPosition": "Sentrer videoposisjon", + "WaveformUseSkiaRenderer": "Bruk eksperimentell rask gjengivelse", "WaveformCenterVideoPositionAlsoWhenPaused": "Sentrer videoposisjon også når pauset", + "WaveformSelectCurrentSubtitleWhilePaused": "Velg gjeldende undertekst også under pause", + "WaveformRememberZoom": "Husk zoom (horisontal og vertikal)", "WaveformShowToolbar": "Vis verktøylinje", "WaveformShowToolbarEdit": "Rediger verktøylinje...", "WaveformShowToolbarEditLabel": "Verktøylinjeelementer", "WaveformSpectrogramCombinedWaveformHeight": "Bølgeform/spektrogram kombinert, bølgeform høyde %", - "ShowWaveformToolbarPlay": "Verktøylinje: vis spill-knapp", - "ShowWaveformToolbarRepeat": "Verktøylinje: vis gjenta-knapp", - "ShowWaveformToolbarRemoveBlankLines": "Verktøylinje: vis knapp for fjern tomme linjer", - "ShowWaveformToolbarNew": "Verktøylinje: vis knapp for ny undertekst", - "ShowWaveformToolbarSetStart": "Verktøylinje: vis knapp for sett start", - "ShowWaveformToolbarSetEnd": "Verktøylinje: vis knapp for sett slutt", - "ShowWaveformToolbarStartAndOffsetTheRest": "Verktøylinje: vis knapp for sett start og forskyv resten", - "ShowWaveformToolbarHorizontalZoom": "Verktøylinje: vis horisontal zoom-glidebryter", - "ShowWaveformToolbarVerticalZoom": "Verktøylinje: vis vertikal zoom-glidebryter", - "ShowWaveformToolbarVideoPositionSlider": "Verktøylinje: vis videoposisjons-glidebryter", - "ShowWaveformToolbarPlaybackSpeed": "Verktøylinje: vis avspillingshastighet", "WaveformFocusTextboxAfterInsertNew": "Fokus tekstboks etter innsetting", "WaveformInvertMouseWheel": "Inverter musehjul", "WaveformMouseWheelSetsVideoPosition": "Musehjul setter videoposisjon", @@ -3181,27 +3567,8 @@ "WaveformSelectedColor": "Bølgeform valgt farge", "DownloadFfmpeg": "Last ned ffmpeg", "FixCommonErrorsSkipStep1": "Rett vanlige feil: hopp over trinn 1 (velg rettelser)", - "ShowToolbarNew": "Vis ny-ikon", - "ShowToolbarOpen": "Vis åpne-ikon", - "ShowToolbarVideoFileOpen": "Vis videofil åpne-ikon", - "ShowToolbarSave": "Vis lagre-ikon", - "ShowToolbarSaveAs": "Vis lagre som-ikon", - "ShowToolbarFind": "Vis finn-ikon", - "ShowToolbarReplace": "Vis erstatt-ikon", - "ShowToolbarSpellCheck": "Vis stavekontroll-ikon", - "ShowToolbarFixCommonErrors": "Vis fiks vanlige feil-ikon", - "ShowToolbarRemoveTextForHi": "Vis ikon for fjern tekst for hørselshemmede", - "ShowToolbarVisualSync": "Vis ikon for visuell synkronisering", - "ShowToolbarBeautifyTimeCodes": "Vis ikon for forskjønn tidskoder", - "ShowToolbarBurnIn": "Vis ikon for innbrenning", - "ShowToolbarSettings": "Vis innstillinger-ikon", - "ShowToolbarLayout": "Vis oppsett-ikon", - "ShowToolbarHelp": "Vis hjelp-ikon", - "ShowToolbarEncoding": "Vis koding", - "ShowToolbarFrameRate": "Vis bildefrekvens", "ShowPluginsMenu": "Vis Plugins-menyen", "ProxyAddress": "Proxy-adresse", - "Username": "Brukernavn", "Password": "Passord", "DefaultFormat": "Standard format", "DefaultSaveAsFormat": "Standard \"Lagre som\"-format", @@ -3209,10 +3576,13 @@ "FavoriteLanguages": "Favorittspråk", "WebVttUseXTimestampMap": "WebVTT: bruk X-TIMESTAMP-MAP (forskyv tidskoder ved innlasting)", "FullscreenHideControls": "Skjul videokontroller i fullskjerm", + "ShowSecondarySubtitleDialog": "Vis stildialog ved åpning av en andre undertekstfil", + "RememberSecondarySubtitleFile": "Husk andre undertekstfil", "AutoOpenVideoFile": "Åpne videofil automatisk når undertekst åpnes", "DownloadMpv": "Last ned mpv", "DownloadVlc": "Last ned VLC", "AllowSingleLetterShortcutsInTextbox": "Tillat snarveier med én bokstav i tekstboksen", + "AllowTextNavigationShortcutsInTextbox": "Tillat hurtigtaster på tekstnavigeringstaster (Ctrl+Venstre/Høyre, Home/End) i tekstboksen", "SpellCheckEnglishTreatInApostropheAsIng": "Stavekontroll: Behandle ord som slutter på 'in'' som 'ing' (kun engelsk)", "GoToLineNumberSetsVideoPosition": "Gå-til-linjenummer setter også videoposisjon", "AdjustAllTimesRememberLineSelectionChoice": "Juster alle tider, husk valg av linjeutvalg", @@ -3224,6 +3594,7 @@ "ShowAssaLayer": "Vis ASSA lag-boks", "WaveformCursorColor": "Bølgeform markør/hodefarge", "WaveformShotChangeColor": "Bølgebilde endrer farge", + "WaveformGridColor": "Rutenettfarge for bølgeform", "WaveformParagraphLeftColor": "Bølgeform venstre kantfarge", "WaveformParagraphRightColor": "Bølgeform høyre kantfarge", "WaveformFancyHighColor": "Bølgeform fancy høy farge", @@ -3251,27 +3622,31 @@ "ResetSyntaxColoring": "Tilbakestill syntaksfarging", "ResetWaveform": "Tilbakestill bølgeform", "ResetRules": "Tilbakestill regler", - "UseFrameMode": "Bruk bildemodus (tt.mm.ss.bb)", + "TimeCodeMode": "Tidskodemodus", + "TimeCodeModeTime": "Tid (hh:mm:ss,zzz)", + "TimeCodeModeFrames": "Bilder (hh:mm:ss:ff)", + "TimeCodeModeFrameNumbers": "Bildenumre", + "FrameModeSnapToVideoFrames": "Lagre tider på videobilder (ikke bilder innenfor hvert sekund)", "TextBoxLimitNewLines": "Begrens antall linjer i undertekst-tekstboks", - "MpvVideoOutput": "Videoutgang (mpv)", "MpvOpenGl": "libmpv - OpenGL", "MpvSoftwareRendering": "libmpv - Programvare-rendering (treg)", + "MpvMetalRendering": "libmpv - Metal (eksperimentell, krever omstart)", "MpvWidRendering": "libmpv - Native Window ID-rendering (raskere på Windows/Linux)", "WaveFormsAndSpectrogramFoldersContainsX": "\"Waveforms\" og \"spectrogram\"-mapper inneholder {0}", "DeleteWaveformAndSpectrogramFoldersQuestion": "Slett \"Waveforms\" og \"Spectrogram\"-filer?", "WaveformGenerateSpectrogram": "Generer spektrogram", "WaveformAutoGenerate": "Generer bølgeform automatisk når en video åpnes", "WaveformSpectrogramMode": "Spektrogrammodus", - "WaveformCenterOnSingleClick": "Sentrer ved enkeltklikk", - "WaveformSingleClickSelectsSubtitle": "Velg undertekst ved enkeltklikk", "WaveformRightClickSelectsSubtitle": "Velg undertekst ved høyreklikk", - "WaveformPauseOnSingleClick": "Pause ved enkeltklikk", "WaveformDrawStyle": "Bølgeform tegnestil", "WaveformExtractAudioFormat": "Format for uttrukket lyd", "WaveformExtractAudioSampleRate": "Samplingsfrekvens for uttrukket lyd", "WaveformExtractAudioSampleRateOriginal": "Original (behold kilde)", "WaveformExtractAudioBitRate": "Bitrate for uttrukket lyd (MP3/M4A)", + "FfmpegUseCenterChannelOnly": "Bruk kun senterkanal foran for 5.1-lyd (FFmpeg)", "VlcWidRendering": "libVLC - Native Window ID-rendering", + "FfmpegSoftwareRendering": "FFmpeg", + "DownloadFfmpegLibs": "Last ned FFmpeg-biblioteker (for FFmpeg-videospilleren)", "SubtitleGridEnterKeyAction": "Undertekstrutenett Enter-tast handling", "SubtitleSingleClickAction": "Undertekstrutenett enkeltklikk-handling", "SubtitleDoubleClickAction": "Undertekstrutenett dobbeltklikk-handling", @@ -3297,25 +3672,25 @@ "SaveAsBehaviorUseVideoFileName": "Bruk videofilnavn", "SaveAsBehaviorUseSubtitleFileName": "Bruk undertekstfilnavn", "SaveAsAppendLanguageCodeTwoLetter": "To bokstaver", - "SaveAsAppendLanguageCodeThreeLetter": "Tre bokstaver", - "SaveAsAppendLanguageCodeThreeLetterBibliographic": "Tre bokstaver (ISO 639-2/B)", "SaveAsAppendLanguageCodeLanguageName": "Språknavn", "SplitOddLineActionWeightTop": "Vekt topp", "SplitOddLineActionWeightBottom": "Vekt bunn", "SplitOddLinesAction": "Del opp oddetall-linjer handling", "OcrUseWordSplitList": "OCR: bruk ord-oppdelingsliste", "OcrGuessUnknownWords": "OCR: prøv å gjette ukjente ord", + "SpellCheckRememberUseAlwaysList": "Stavekontroll: husk \"Bruk alltid\"-listen", + "FixShortDisplayTimesAllowMoveStartTime": "Fiks vanlige feil: retting av korte visningstider kan flytte starttid", "SpeechToTextSelectedLinesPromptFirstTimeOnly": "Tale til tekst: valgte linjer, spør kun om språk/motor første gang", "MultipleReplaceShowDotDotDotButtons": "Søk og erstatt flere: vis kontekstmenyknapper", "GridFocusTextboxAfterInsertNew": "Rutenett: fokus tekstboks etter innsetting av ny undertekst", + "UndoRedoGoToChangedLine": "Angre/gjør om: gå til endret linje (og videoposisjon)", "TextToSpeechPromptMergeContinuationLines": "Tekst til tale: spør om å slå sammen fortsettelseslinjer", "TextToSpeechPromptSkipNoiseLines": "Tekst til tale: spør om å hoppe over lyd-/musikklinjer", "TextToSpeechPromptDetectSpeakers": "Tekst til tale: spør om å finne talernavn i teksten", "UseFocusedButtonBackgroundColor": "Bruk fokusert knapp bakgrunnsfarge", "FocusedButtonBackgroundColor": "Fokusert knapp bakgrunnsfarge", "ForceCrLfOnSave": "Tving CR+LF ved lagring (tekstbaserte undertekstfiler)", - "ShowWaveformToolbarPlayNext": "Verktøylinje: vis spill neste knapp", - "ShowWaveformToolbarPlaySelection": "Verktøylinje: vis spill av utvalg knapp", + "LinuxClipboardUseExternalTool": "Kopier tekst via xclip/wl-copy (beholder aksenttegn)", "ShowFormatLimitWarning": "Advar ved lagring når linjer overskrider formatets grenser (f.eks. SCC 32 tegn/linje)", "TextBoxButtonShowAutoBreak": "Tekstboks: vis knapp for automatisk linjedeling", "TextBoxButtonShowUnbreak": "Tekstboks: vis knapp for fjern linjedeling", @@ -3327,12 +3702,18 @@ "WaveformDoubleClickAction": "Bølgeform dobbeltklikk-handling (etter enkeltklikk-handling)", "AllSettings": "Alle innstillinger", "UiScale": "UI-skalering (%)", + "FontScale": "Skriftskalering (%)", + "TextSelectionOpacity": "Gjennomsiktighet for tekstmarkering (%)", "WaveformToolbarItems": "Bølgeform verktøylinjeelementer", "MatchIconColorToDarkTheme": "Samsvar ikonfarge med mørkt tema forgrunnsfarge", "SubtitlePreviewProperties": "Egenskaper for forhåndsvisning av undertekst", "UsePositionFromSubtitleFile": "Bruk posisjon fra undertekstfilen (TTML/PAC/EBU STL)", "MarginIsPartOfSubtitleArea": "Margen er en del av undertekstområdet", "TextJustify": "Blokkjuster linjer", + "Deinterlace": "Fjern linjefletting i video", + "DeinterlaceOff": "Av", + "DeinterlaceAuto": "Auto (kun linjeflettede bilder)", + "DeinterlaceAlways": "Alltid", "PixelWidthInfo": "Grønne linjer = maks-breddegrense | \r\nRødt område = tekst overskrider grensen", "SpellCheckEngineHunSpelll": "Hunspell", "SpellCheckEngineMsWord": "MS Word", @@ -3341,117 +3722,89 @@ "WaveformColorTheme": "Fargetema:", "WaveformSaveAsCustomTheme": "Lagre som tilpasset tema...", "WaveformLoadThemeDotDotDot": "Last inn tema...", - "WaveformExportThemeDotDotDot": "Eksporter tema..." + "WaveformExportThemeDotDotDot": "Eksporter tema...", + "WaveformSaveCustomThemeTitle": "Lagre egendefinert tema", + "WaveformThemeFileType": "Subtitle Edit bølgeformtema", + "WaveformThemeHighContrast": "Høy kontrast", + "WaveformThemeOceanBlue": "Havblå", + "WaveformThemeWarmSunset": "Varm solnedgang", + "WaveformThemeForest": "Skog", + "WaveformThemeMidnightPurple": "Midnattslilla", + "WaveformThemeRetroAmber": "Retro rav", + "WaveformThemeIce": "Is" }, "Shortcuts": { "GeneralUnbreakNoSpaceCjk": "Fjern linjedeling uten mellomrom (CJK)", - "Title": "Hurtigtaster", + "GeneralToggleBreak": "Veksle linjedeling/fjern linjedeling", "SearchShortcuts": "Søk etter hurtigtaster...", - "Filter": "Filter", - "CategoryGeneral": "Generelt", "CategorySubtitleGridAndTextBox": "Undertekstrutenett og tekstboks", "CategorySubtitleGrid": "Undertekstrutenett", - "CategoryWaveform": "Bølgeform", "CategoryTextBox": "Tekstboks", "CategoryFile": "Fil", "CategoryVideo": "Video", "CategorySync": "Synkronisering", - "CategoryTranslate": "Oversett", - "CategorySearch": "Søk", - "CategoryTools": "Verktøy", "CategoryAi": "AI", + "CategoryCustom": "Egendefinert", + "EditCustomShortcut": "Rediger egendefinert hurtigtast", + "CustomShortcutTextBoxKeyHint": "Bruk en tast med Ctrl/Alt her - en vanlig tast ville ikke lenger skrive i tekstboksen.", + "CustomShortcutNumberX": "Egendefinert hurtigtast #{0}", + "CustomShortcutNumberXY": "Egendefinert hurtigtast #{0}: {1}", + "CustomShortcutStep": "Trinn", + "CustomShortcutSteps": "Trinn", + "CustomShortcutStepRunCommand": "Kjør kommando", + "CustomShortcutStepInsertText": "Sett inn tekst", + "CustomShortcutStepReplace": "Finn og erstatt", + "CustomShortcutInsertAtCursor": "Ved markøren", + "CustomShortcutInsertAtStart": "Ved starten av teksten", + "CustomShortcutInsertAtEnd": "Ved slutten av teksten", + "CustomShortcutSummaryRunCommandX": "Kjør: {0}", + "CustomShortcutSummaryInsertXY": "Sett inn \"{0}\" ({1})", + "CustomShortcutSummaryReplaceXY": "Erstatt \"{0}\" med \"{1}\"", + "CustomShortcutSummaryReplaceRegexXY": "Erstatt regex \"{0}\" med \"{1}\"", + "CustomShortcutPickCommand": "Velg en kommando som skal kjøres.", + "CustomShortcutEnterText": "Skriv inn teksten som skal settes inn.", + "CustomShortcutEnterFind": "Skriv inn teksten som skal finnes.", + "CustomShortcutInvalidRegexX": "Ugyldig regulært uttrykk: {0}", + "CustomShortcutStepsHint": "Trinnene kjøres ovenfra og ned. Teksttrinn virker på de valgte linjene; kommandoer som åpner et vindu, fortsetter etter at det lukkes.", "ActiveIn": "Aktiv i", "ActiveInEverywhere": "Overalt", - "GeneralSetupLikeSe4": "Sett opp som Subtitle Edit 4 (tema, hurtigtaster, erstatningsregler)", - "GeneralMergeSelectedLines": "Slå sammen valgte linjer", - "GeneralMergeWithPrevious": "Slå sammen med forrige", - "GeneralMergeWithNext": "Slå sammen med neste", - "GeneralMergeWithPreviousAndUnbreak": "Slå sammen med forrige og fjern linjedeling", - "GeneralMergeWithNextAndUnbreak": "Slå sammen med neste og fjern linjedeling", - "GeneralMergeWithPreviousAndAutoBreak": "Slå sammen med forrige og automatisk linjedeling", - "GeneralMergeWithNextAndAutoBreak": "Slå sammen med neste og automatisk linjedeling", - "GeneralMergeSelectedLinesAndAutoBreak": "Slå sammen valgte linjer og automatisk linjedeling", "GeneralMergeSelectedLinesAndUnbreak": "Slå sammen valgte linjer og fjern linjedeling", "GeneralMergeSelectedLinesAndUnbreakCjk": "Slå sammen valgte linjer og fjern linjedeling CJK", - "GeneralMergeSelectedLinesOnlyFirstText": "Slå sammen valgte linjer kun første tekst", "GeneralMergeSelectedLinesBilingual": "Slå sammen valgte linjer tospråklig", - "GeneralMergeWithPreviousBilingual": "Slå sammen med forrige tospråklig", - "GeneralMergeWithNextBilingual": "Slå sammen med neste tospråklig", - "GeneralMergeOriginalAndTranslation": "Slå sammen original og oversettelse", "GeneralToggleTranslationMode": "Veksle oversettelsesmodus", - "GeneralSwitchOriginalAndTranslation": "Bytt original og oversettelse", - "GeneralSwitchOriginalAndTranslationTextBoxes": "Bytt tekstbokser for original og oversettelse", "GeneralToggleTranslationAndOriginalInPreviews": "Veksle mellom oversettelse og original i video-/lydforhåndsvisning", "GeneralChooseLayout": "Velg oppsett", - "GeneralLayoutChooseX": "Oppsett {0}", - "GeneralPlayFirstSelected": "Spill av første valgte", - "GeneralGoToFirstSelectedLine": "Gå til første valgte linje", - "GeneralGoToNextEmptyLine": "Gå til neste tomme linje", "GeneralGoToNextSubtitle": "Gå til neste undertekst", "GeneralGoToNextSubtitlePlayTranslate": "Gå til neste undertekst (spill av oversett)", "GeneralGoToNextSubtitleCursorAtEnd": "Gå til neste undertekst (markør til slutt)", "GeneralGoToPrevSubtitle": "Gå til forrige undertekst", "GeneralGoToPrevSubtitlePlayTranslate": "Gå til forrige undertekst (spill av oversett)", - "GeneralGoToStartOfCurrentSubtitle": "Gå til start av gjeldende undertekst", - "GeneralGoToEndOfCurrentSubtitle": "Gå til slutt av gjeldende undertekst", - "GeneralGoToPreviousSubtitleAndFocusVideo": "Gå til forrige undertekst og fokuser på video", - "GeneralGoToNextSubtitleAndFocusVideo": "Gå til neste undertekst og fokuser på video", - "GeneralGoToPrevSubtitleAndPlay": "Gå til forrige undertekst og spill av", - "GeneralGoToNextSubtitleAndPlay": "Gå til neste undertekst og spill av", - "GeneralGoToPreviousSubtitleAndFocusWaveform": "Gå til forrige undertekst og fokuser på bølgeform", - "GeneralGoToNextSubtitleAndFocusWaveform": "Gå til neste undertekst og fokuser på bølgeform", - "GeneralGoToLineNumber": "Gå til linjenummer", "GeneralGoToFirstLine": "Gå til første linje", "GeneralGoToLastLine": "Gå til siste linje", "AlsoSetVideoPosition": "Sett også videoposisjon", "GeneralGoToVideoPosition": "Gå til videoposisjon", "GeneralToggleItalic": "Veksle kursiv", "GeneralToggleBold": "Veksle fet skrift", - "GeneralToggleBookmarks": "Veksle bokmerker", - "GeneralFocusTextBox": "Fokus tekstboks", - "GeneralToggleBookmarksWithText": "Veksle bokmerker med tekst", - "GeneralEditBookmarks": "Rediger bokmerker", - "FileNew": "Ny", "GeneralToggleUnderline": "Veksle understreking", + "GeneralToggleBox": "Veksle boks (EBU STL)", "FileOpen": "Åpne", "FileOpenKeepVideo": "Åpne (behold video)", "FileSave": "Lagre", "FileSaveAs": "Lagre som", - "FileSaveAll": "Lagre alle", "FileSaveOriginal": "Lagre original", - "FileSaveOriginalAs": "Lagre original som", - "FileOpenOriginalSubtitle": "Åpne original undertekst", - "FileCloseOriginalSubtitle": "Lukk original undertekst", - "FileTranslatedSubtitle": "Oversatt undertekst", "FileCompare": "Sammenlign", "FileStatistics": "Statistikk", "FileImportPlainText": "Importer klartekst", - "FileImportBluRaySupForOcr": "Importer Blu-ray SUP for OCR", - "FileImportBluRaySupForEdit": "Importer Blu-ray SUP for redigering", - "FileImportTimeCodes": "Importer tidskoder", "FileExportEbuStl": "Eksporter EBU STL", "FileExportPac": "Eksporter PAC", - "FileExportEdlClipName": "Eksporter EDL klipnavn", - "FileExportPlainText": "Eksporter klartekst", - "FileExportCustomTextFormat1": "Eksporter egendefinert tekstformat 1", - "FileExportCustomTextFormat2": "Eksporter egendefinert tekstformat 2", - "FileExportCustomTextFormat3": "Eksporter egendefinert tekstformat 3", "FileExit": "Avslutt", "OpenSeDataFolder": "Åpne Subtitle Edit-mappe", - "EditFind": "Finn", - "EditFindNext": "Finn neste", "EditFindPrevious": "Finn forrige", - "EditReplace": "Erstatt", - "EditMultipleReplace": "Søk og erstatt flere", "FillSelectedLinesWithClipboard": "Fyll valgte linjer med utklippstavletekst", - "EditModifySelection": "Endre utvalg", - "ListSelectAll": "Velg alle", - "ListSelectFirst": "Velg første", - "ListSelectLast": "Velg siste", "ListInverseSelection": "Inverter utvalg", "ListDeleteSelection": "Slett utvalg", + "DeleteSelectionEverywhere": "Slett utvalg (overalt)", "RippleDeleteSelection": "Krusning-slett utvalg", - "Settings": "Innstillinger", "Assigned": "Tilordnet", "Unassigned": "Ikke tilordnet", "PressedKeyX": "Trykket tast: {0}", @@ -3459,6 +3812,7 @@ "DetectKey": "Gjenkjenn tast", "Control": "Control", "Alt": "Alt", + "AltGr": "AltGr", "Win": "Win", "Shift": "Shift", "ControlMac": "⌃", @@ -3469,11 +3823,14 @@ "ResetShortcutsDetail": "Vil du tilbakestille alle hurtigtaster til standardverdier?", "TogglePlayPause": "Veksle spill/pause", "ToggleLockTimeCodes": "Veksle lås tidskoder", + "ToggleTimeCodeMode": "Veksle tidskodemodus (tid/bilder/bildenumre)", + "ToggleScreenPrivacy": "Veksle skjermpersonvern (skjul filnavn, deretter også tekster)", + "ScreenPrivacyFileNamesHidden": "Skjermpersonvern: filnavn skjult", + "ScreenPrivacyFileNamesAndTextsHidden": "Skjermpersonvern: filnavn og tekster skjult", + "ScreenPrivacyOff": "Skjermpersonvern: av", "DuplicateSelectedLines": "Dupliser valgte linjer", "SourceView": "Kildevisning", - "ShowAlignmentPicker": "Justering", "AddOrEditBookmark": "Legg til eller rediger bokmerke", - "ListBookmarks": "Vis bokmerker", "ToggleBookmark": "Veksle bokmerke (valgte linjer, ingen tekst)", "ToggleForcedSelectedLines": "Veksle tvunget (valgte linjer)", "GoToNextBookmark": "Gå til neste bokmerke", @@ -3484,12 +3841,12 @@ "WaveformSetStartAndSetEndOfPreviousMinusGap": "Sett start og sett slutt for forrige minus mellomrom", "WaveformSetEndAndStartOfNextAfterGap": "Sett slutt og start for neste pluss mellomrom", "WaveformSetEndAndStartOfNextAfterGapAndGoToNext": "Sett slutt og start for neste pluss mellomrom og gå til neste", - "FetchFirstWordFromNextSubtitle": "Hent første ord fra neste undertekst", "MoveLastWordToNextSubtitle": "Flytt siste ord til neste undertekst", "MoveLastWordFromFirstLineDownCurrentSubtitle": "Flytt siste ord fra første linje ned (gjeldende undertekst)", "MoveFirstWordFromNextLineUpCurrentSubtitle": "Flytt første ord fra neste linje opp (gjeldende undertekst)", "MoveTextFromCursorToNextAndGoToNext": "Flytt tekst etter markørposisjonen til neste undertekst og gå til neste", "MoveTextFromCursorToNextAndGoToNextAndPlay": "Flytt tekst etter markørposisjonen til neste undertekst, gå til neste og spill av", + "MoveTextFromCursorToNextAndGoToNextAndPlayAndPause": "Flytt tekst etter markørposisjonen til neste undertekst, gå til neste, spill den av og sett på pause ved slutten", "BreakAtFirstSpaceFromCursor": "Del ved første mellomrom fra markørposisjonen", "BreakAtFirstSpaceFromCursorAndGoToNext": "Del ved første mellomrom fra markørposisjonen og gå til neste", "ToggleFocusGridAndWaveform": "Veksle fokus mellom undertekstrutenett og bølgeform/spektrogram", @@ -3501,7 +3858,6 @@ "VideoGoToPreviousTimeCode": "Gå til forrige tidskode", "VideoGoToNextTimeCode": "Gå til neste tidskode", "GoToNextLineAndSetVideoPosition": "Gå til neste undertekst og sett videoposisjon", - "TextBoxDeleteSelectionNoClipboard": "Tekstboks: Slett utvalg (ingen utklippstavle)", "TextBoxDeleteForward": "Tekstboks: Slett utvalg eller neste tegn (slett forover)", "TextBoxCut": "Tekstboks: Klipp ut", "TextBoxCut2": "Tekstboks: Klipp ut (alternativ)", @@ -3520,6 +3876,7 @@ "ListViewColumnTextUp": "Kolonne, tekst opp", "ListViewColumnTextDown": "Kolonne, tekst ned", "AutoTranslateSelectedLines": "Auto-oversett valgte linjer...", + "AutoTranslateSelectedLinesNoPrompt": "Auto-oversett valgte linjer (uten spørsmål, bruk siste motor/språk)", "SetAssaResolution": "Sett ASSA-oppløsning (PlayResX/PlayResY)", "SetShortcutForX": "Angi hurtigtast for \"{0}\"", "CommandFileNewKeepVideo": "Ny (behold video)", @@ -3527,29 +3884,22 @@ "FileCloseOriginal": "Lukk original", "FileCloseTranslation": "Lukk oversettelse", "RestoreAutoBackup": "Gjenopprett auto-sikkerhetskopi", - "OpenContainingFolder": "Åpne inneholdende mappe", "ImportTimeCodes": "Importer tidskoder", "ImportSubtitleWithManuallyChosenEncoding": "Importer undertekst med manuelt valgt koding", "ExportBluRaySup": "Eksporter Blu-ray SUP", "ExportCustomTextFormat": "Eksporter egendefinert tekstformat", "ExportPlainText": "Eksporter klartekst", - "ShowHistory": "Vis historikk", "ToggleRightToLeft": "Veksle høyre-til-venstre", "ModifySelection": "Endre utvalg", "AdjustDurations": "Juster varigheter", "ApplyDurationLimits": "Bruk varighetsgrenser", "BatchConvert": "Satsvis konvertering", - "BridgeGaps": "Tett hull", "ApplyMinGap": "Bruk min. mellomrom", - "FixCommonErrors": "Fiks vanlige feil", "MakeEmptyTranslationFromCurrentSubtitle": "Lag tom oversettelse fra gjeldende undertekst", - "MergeLinesWithSameText": "Slå sammen linjer med samme tekst", - "MergeLinesWithSameTimeCodes": "Slå sammen linjer med samme tidskoder", "SplitBreakLongLines": "Del opp / balanser lange linjer", "MergeShortLines": "Slå sammen korte linjer", "MergeContinuationLines": "Slå sammen fortsettelseslinjer", "SnapAllTimesToFrames": "Fest alle tider til bilder", - "RemoveTextForHearingImpaired": "Fjern tekst for hørselshemmede", "JoinSubtitles": "Slå sammen undertekster", "SplitSubtitle": "Del opp undertekst", "SpellCheck": "Stavekontroll", @@ -3571,7 +3921,6 @@ "AdjustAllTimes": "Juster alle tider", "VisualSync": "Visuell synkronisering", "TranslateViaCopyPaste": "Oversett via kopier-lim inn", - "Shortcuts": "Hurtigtaster", "WordLists": "Ordlister", "ChooseUiLanguage": "Velg språk for grensesnitt", "ChooseRuleProfile": "Velg regelprofil", @@ -3582,6 +3931,7 @@ "TextBoxItalic": "Tekstboks kursiv", "TextBoxBold": "Tekstboks fet", "TextBoxUnderline": "Tekstboks understreking", + "TextBoxBox": "Tekstboks boks (EBU STL)", "ResetWaveformZoomAndSpeed": "Tilbakestill bølgeform zoom og avspillingshastighet", "TogglePlaybackSpeed": "Veksle avspillingshastighet", "PlaybackSpeedSlower": "Avspillingshastighet saktere", @@ -3593,22 +3943,28 @@ "SeekSilenceForward": "Søk stillhet forover", "WaveformGuessStart": "Gjett starttid fra bølgeform", "WaveformGuessEnd": "Gjett sluttid fra bølgeform", + "WaveformGuessStartAndEnd": "Gjett start- og sluttid fra bølgeform", "SetVideoPositionCurrentSubtitleStart": "Sett videoposisjon til gjeldende linjestart", "GoToSubtitlePositionAndPause": "Gå til undertekstposisjon og pause", "SetVideoPositionCurrentSubtitleEnd": "Sett videoposisjon til gjeldende linjeslutt", "ToggleAudioTracks": "Veksle lydspor", - "ListErrors": "Vis feil", "GoToNextError": "Gå til neste feil", "GoToPreviousError": "Gå til forrige feil", "AddNameToNameList": "Legg til navn i navneliste", "FindDoubleWords": "Finn doble ord", "FindDoubleLines": "Finn doble linjer", "ColorX": "Farge {0}", - "RemoveColor": "Fjern farge", "SurroundWith": "Omgi med...", "SurroundWithXY": "Omgi med {0}/{1}", - "RepeatLine": "Gjenta linje", "SurroundWithNumberX": "Omslutt med #{0}", + "SurroundWithBehavior": "Virkemåte", + "SurroundWithBehaviorToggle": "Veksle (legg til, eller fjern hvis til stede)", + "SurroundWithBehaviorAdd": "Legg til (hver gang)", + "SurroundWithBehaviorRemove": "Fjern (alle)", + "SurroundWithBehaviorRemoveOnce": "Fjern (én hver gang)", + "SurroundWithWorksOn": "Virker på", + "SurroundWithScopeSelectionOrText": "Utvalg, ellers hele teksten", + "SurroundWithScopeEachLine": "Hver linje", "SearchVia": "Søk via", "SearchViaX": "Søk via {0}", "SearchViaNumberX": "Søk via #{0}", @@ -3636,6 +3992,11 @@ "CopySubtitlePathToClipboard": "Kopier undertekststi til utklippstavle", "CopySubtitleOriginalPathToClipboard": "Kopier undertekststi for original til utklippstavle", "FocusTextBox": "Fokus tekstboks", + "FocusSubtitleListView": "Fokus på undertekstlisten", + "FocusWaveform": "Fokus på bølgeform", + "FocusOriginalTextBox": "Fokus på original tekstboks", + "TextBoxGoToStart": "Tekstboks, gå til start", + "TextBoxGoToEnd": "Tekstboks, gå til slutt", "SortByNumber": "Sorter etter nummer", "SortByStartTime": "Sorter etter \"Vis\"-tid", "SortByEndTime": "Sorter etter \"Skjul\"-tid", @@ -3660,7 +4021,6 @@ "AssaStyles": "ASSA Stiler", "AssaProperties": "ASSA Egenskaper", "AssaAttachments": "ASSA Vedlegg", - "AssaVideoColorPicker": "ASSA Videofargevelger", "RecalculateDurationSelectedLines": "Beregn varighet på nytt (valgte linjer)", "SetDurationMaxCpsSelectedLines": "Sett varighet til maks. CPS (valgte linjer)", "ToggleWaveformAndSpectrogramHeight": "Veksle delt høyde for bølgeform/spektrogram", @@ -3676,7 +4036,7 @@ "GoogleIt": "Google det (valgt tekst)", "SetActorX": "Sett skuespiller: {0}", "SetNewActor": "Sett ny skuespiller...", - "SetActorSlotXTitle": "Skuespillerplass {0}", + "SetStyleX": "Angi stil: {0}", "ToggleDialogDashes": "Veksle dialogtankestreker", "MergeWithLineBeforeAsDialog": "Slå sammen med linjen før som dialog", "MergeWithLineAfterAsDialog": "Slå sammen med linjen etter som dialog", @@ -3687,13 +4047,27 @@ "MoveStartOneFrameBackKeepGapPrev": "Flytt start ett bilde bakover (behold mellomrom til forrige hvis nær)", "MoveStartOneFrameForwardKeepGapPrev": "Flytt start ett bilde forover (behold mellomrom til forrige hvis nær)", "MoveEndOneFrameBackKeepGapNext": "Flytt slutt ett bilde bakover (behold mellomrom til neste hvis nær)", - "MoveEndOneFrameForwardKeepGapNext": "Flytt slutt ett bilde forover (behold mellomrom til neste hvis nær)" + "MoveEndOneFrameForwardKeepGapNext": "Flytt slutt ett bilde forover (behold mellomrom til neste hvis nær)", + "MoveStartXMsBack": "Flytt start X ms tilbake (X angis i Innstillinger, også i Visuell synkronisering)", + "MoveStartXMsForward": "Flytt start X ms fremover (X angis i Innstillinger, også i Visuell synkronisering)", + "MoveEndXMsBack": "Flytt slutt X ms tilbake (X angis i Innstillinger, også i Visuell synkronisering)", + "MoveEndXMsForward": "Flytt slutt X ms fremover (X angis i Innstillinger, også i Visuell synkronisering)", + "MoveSelectedLinesXMsBack": "Flytt valgte linjer X ms tilbake (X angis i Innstillinger)", + "MoveSelectedLinesXMsForward": "Flytt valgte linjer X ms fremover (X angis i Innstillinger)", + "MoveSelectedLinesAndForwardXMsBack": "Flytt valgte linjer og alle etterfølgende X ms tilbake (X angis i Innstillinger)", + "MoveSelectedLinesAndForwardXMsForward": "Flytt valgte linjer og alle etterfølgende X ms fremover (X angis i Innstillinger)", + "MoveAllLinesXMsBack": "Flytt alle linjer X ms tilbake (X angis i Innstillinger)", + "MoveAllLinesXMsForward": "Flytt alle linjer X ms fremover (X angis i Innstillinger)", + "MoveSelectedLinesCustomMsBack": "Flytt valgte linjer, egendefinerte millisekunder ({0:#,###,##0}) tilbake, {1}", + "MoveSelectedLinesCustomMsForward": "Flytt valgte linjer, egendefinerte millisekunder ({0:#,###,##0}) fremover, {1}", + "MoveSelectedLinesAndForwardCustomMsBack": "Flytt valgte linjer og alle etterfølgende, egendefinerte millisekunder ({0:#,###,##0}) tilbake, {1}", + "MoveSelectedLinesAndForwardCustomMsForward": "Flytt valgte linjer og alle etterfølgende, egendefinerte millisekunder ({0:#,###,##0}) fremover, {1}", + "MoveAllLinesCustomMsBack": "Flytt alle linjer, egendefinerte millisekunder ({0:#,###,##0}) tilbake, {1}", + "MoveAllLinesCustomMsForward": "Flytt alle linjer, egendefinerte millisekunder ({0:#,###,##0}) fremover, {1}" }, "WordLists": { "Title": "Ordlister", "AddName": "Legg til navn", - "AddWord": "Legg til ord", - "AddPair": "Legg til par", "NameAndIgnoreList": "Navn/ignoreringsliste", "UserWords": "Brukerordliste", "OcrFixList": "OCR fikseliste", @@ -3710,7 +4084,6 @@ "NoPluginsInstalled": "Ingen plugins installert", "GetPluginsOnline": "Hent plugins på nett...", "GetPluginsTitle": "Hent plugins", - "Enabled": "Aktivert", "Disabled": "Deaktivert", "NotSupportedOnThisOs": "Støttes ikke på dette operativsystemet", "RemovePluginXConfirm": "Fjerne plugin '{0}'? Dette sletter plugin-mappen:{1}", @@ -3727,17 +4100,19 @@ "DownloadingXPercent": "Laster ned {0}%...", "PluginXInstalled": "'{0}' installert.", "CouldNotInstallPluginX": "Kunne ikke installere '{0}': {1}", - "NotInstalled": "Ikke installert", "Install": "Installer", "Reinstall": "Installer på nytt", - "Update": "Oppdater", "InstalledX": "Installert ({0})", "UpdateAvailableXToY": "Oppdatering tilgjengelig ({0} → {1})", "ApplyPluginToWhichLinesX": "Bruk '{0}' på:", "ApplyToSelectedLinesX": "Valgte linjer ({0})", "ApplyToAllLinesX": "Alle linjer ({0})", "UpdateAllXAvailable": "Oppdater alle ({0})", - "UpdatingXOfY": "Oppdaterer {0}/{1}..." + "UpdatingXOfY": "Oppdaterer {0}/{1}...", + "DoNotAskAgain": "Ikke spør igjen (endre i Administrer plugins)", + "ApplyPluginsTo": "Bruk plugins på", + "AskEachTime": "Spør hver gang", + "AllLines": "Alle linjer" }, "Help": { "AboutSubtitleEdit": "Om Subtitle Edit", @@ -3781,6 +4156,8 @@ "NOcrDatabase": "nOCR-database", "DrawMode": "Tegnemodus:", "AddNewCharcter": "Legg til nytt tegn", + "AddNOcrCharacterTitle": "Legg til nOCR-tegn for linje {0}, tegn {1} av {2} med databasen \"{3}\"", + "AddBinaryOcrCharacterTitle": "Legg til binært OCR-tegn for linje {0}, tegn {1} av {2} med databasen \"{3}\"", "LineIndexX": "Linje {0}", "InspectNOcrAdditions": "Inspiser nye nOCR-tillegg", "OcrSelectedLines": "OCR valgte linjer", @@ -3829,6 +4206,8 @@ "BinaryImageCompareInspectImageMatches": "\"Binær bildesammenligning\" - Inspiser bildetreff", "SaveBlankTextTitle": "Vil du lagre tom tekst?", "SaveBlankTextPrompt": "Lagre tom tekst for bildet?", + "DrawnLinesDoNotMatchTitle": "Linjene samsvarer ikke med bildet", + "DrawnLinesDoNotMatchPrompt": "Noen av de tegnede linjene samsvarer ikke med bildet (grønne linjer må ligge på tegnet, røde linjer må ligge utenfor), så dette tegnet vil ikke bli gjenkjent.\n\nVil du lagre likevel?", "YesAndNeverAskAgain": "Ja, og aldri spør igjen", "ImportTextFromSubtitleDotDotDot": "Importer tekst fra undertekst...", "ImportTextFromSubtitleOverwritePrompt": "Noen linjer har allerede OCR-tekst.\r\nVil du overskrive eksisterende tekst?", @@ -3854,7 +4233,6 @@ "VobSubColorsTitle": "VobSub/DVD-farger", "VobSubColorsHeader": "Tilpass de fire VobSub-fargene", "VobSubColorsDescription": "VobSub/DVD-undertekster bruker fire indekserte farger: bakgrunn, mønster, utheving 1 og utheving 2. Velg hver farge nedenfor for å overstyre den innebygde paletten – nyttig når originalfargene gir dårlig OCR-kontrast.", - "VobSubColorBackground": "Bakgrunn", "VobSubColorPattern": "Mønster", "VobSubColorEmphasis1": "Utheving 1", "VobSubColorEmphasis2": "Utheving 2", @@ -3888,9 +4266,26 @@ "CrispEmbedSettingsTitle": "CrispEmbed-innstillinger", "CrispEmbedDescription": "Lokal OCR-motor med flere modellbakstykker - last ned motoren og modellene her.", "TrainNOcrDatabase": "Tren nOCR-database...", + "OptimizeNOcrDatabase": "Optimaliser nOCR-database...", + "OptimizeNOcrDatabaseQuestionXY": "Fjerne linjene som ikke skiller tegn fra lignende tegn i nOCR-databasen \"{0}\"?\n\nDette gjør databasen mindre og OCR raskere, vanligvis med færre feil. Tar opptil ett minutt.\n\nEn sikkerhetskopi lagres som \"{1}\".", + "OptimizingNOcrDatabaseXY": "Optimaliserer nOCR-database... {0}/{1}", + "NOcrDatabaseOptimizedXYZ": "nOCR-databasen \"{0}\" er optimalisert: {1:#,##0} -> {2:#,##0} linjer.", "StartTraining": "Start trening", "AbortTraining": "Avbryt trening", "TrainingOptions": "Treningsalternativer", + "TrainNOcrSubtitle": "Tegner tegn i installerte skrifter og lærer nOCR formene deres. Velg skriftene undertekstene dine bruker.", + "XFontsSelected": "{0:#,##0} valgt", + "SubtitleFonts": "Undertekstskrifter", + "EmptyDatabase": "Tom database", + "StartFromDatabase": "Start fra", + "StartFromDatabaseHint": "Legg de trente tegnene til en kopi av en eksisterende database (anbefalt) eller start fra en tom", + "FontSizes": "Skriftstørrelser", + "FontSizesHint": "Skriftstørrelser i piksler å tegne med, adskilt med komma, f.eks. \"30, 40\"", + "NumberOfLineSegmentsHint": "Linjer som kontrolleres per tegn - flere er strengere, men tregere", + "EnterDatabaseName": "Skriv inn et navn på databasen", + "TrainingFontXSizeYCharacterZ": "Trener \"{0}\" med {1} px: {2}", + "XLearned": "{0:#,##0} lært", + "XSkipped": "{0:#,##0} hoppet over", "CharactersToTrain": "Tegn som skal trenes", "LetterCombinationsToTrain": "Bokstavkombinasjoner som kan bli delt til ett bilde", "ImportCharactersFromSubtitleFile": "Importer tegn fra undertekstfil...", @@ -3916,7 +4311,9 @@ "DrawZoomIn": "Zoom inn (Ctrl++)", "DrawZoomOut": "Zoom ut (Ctrl+-)", "DrawResetView": "Tilbakestill visning (Ctrl+0)", - "DrawToggleGrid": "Veksle rutenett (Ctrl+G)", + "DrawToggleGrid": "Veksle rutenett (Ctrl+')", + "DrawTogglePreview": "Veksle forhåndsvisning (F9)", + "DrawPreviewFailed": "Forhåndsvisning mislyktes - ffmpeg med libass (subtitles-filter) kreves", "DrawCopyToClipboard": "Kopier til utklippstavle (Ctrl+C)", "DrawShapes": "Former", "DrawSelectedPoint": "Valgt punkt", @@ -3924,16 +4321,86 @@ "DrawSelectedLayer": "Valgt lag", "DrawToolX": "Verktøy: {0}", "DrawHelpText": "Klikk for å legge til punkter • Enter/F8 for å lukke form • Shift+Dra for å panorere • Ctrl+Rull for å zoome", + "DrawMoveToLayer": "Flytt til lag", + "DrawFlipHorizontal": "Vend horisontalt", + "DrawFlipVertical": "Vend vertikalt", + "DrawHideShape": "Skjul figur", + "DrawShowShape": "Vis figur", + "DrawHideLayer": "Skjul lag", + "DrawShowLayer": "Vis lag", + "DrawDeleteLayer": "Slett lag", + "DrawDeletePoint": "Slett punkt", + "DrawCancelDrawing": "Avbryt tegning", + "DrawLayerX": "Lag {0}", + "DrawImportSvg": "Importer SVG-bilde...", + "DrawRotateClockwise": "Roter 90° med klokken", + "DrawConvertToCurve": "Konverter segment til kurve", + "DrawBackground": "Bakgrunn", + "DrawPosition": "Posisjon", + "DrawZoom": "Zoom", + "DrawShapeTool": "Figurverktøy", + "DrawColorPickerTool": "Hent farge fra en figur eller bakgrunnen", + "DrawShapeLibrary": "Figurbibliotek", + "DrawShapeLibraryHint": "Dra på lerretet for å plassere en figur, eller klikk for standardstørrelse. Shift beholder proporsjonene.", + "DrawAddToLibrary": "Legg til i figurbiblioteket...", + "DrawRemoveFromLibrary": "Fjern fra figurbiblioteket", + "DrawShapeName": "Figurnavn", + "DrawCategorySpeechBubbles": "Snakkebobler", + "DrawCategoryArrows": "Piler", + "DrawCategoryBasicShapes": "Grunnleggende figurer", + "DrawCategorySymbols": "Symboler", + "DrawCategoryMyShapes": "Mine figurer", + "DrawShapeSpeechBubble": "Snakkeboble", + "DrawShapeSpeechBubbleRight": "Snakkeboble, hale mot høyre", + "DrawShapeSpeechBubbleUp": "Snakkeboble, hale opp", + "DrawShapeOvalBubble": "Oval snakkeboble", + "DrawShapeBoxBubble": "Firkantet snakkeboble", + "DrawShapeThoughtBubble": "Tankeboble", + "DrawShapeShoutBubble": "Ropeboble", + "DrawShapeCaptionBox": "Tekstboks", + "DrawShapeArrow": "Pil", + "DrawShapeDoubleArrow": "Dobbeltpil", + "DrawShapeChevron": "Vinkel", + "DrawShapeCurvedArrow": "Buet pil", + "DrawShapeRoundedRectangle": "Avrundet rektangel", + "DrawShapeTriangle": "Trekant", + "DrawShapeDiamond": "Rute", + "DrawShapePentagon": "Femkant", + "DrawShapeHexagon": "Sekskant", + "DrawShapeOctagon": "Åttekant", + "DrawShapeStar": "Stjerne", + "DrawShapeRing": "Ring", + "DrawShapePlus": "Pluss", + "DrawShapeBanner": "Banner", + "DrawShapeHeart": "Hjerte", + "DrawShapeCheck": "Hake", + "DrawShapeMusicNote": "Musikknote", + "DrawShapeMusicNotes": "Musikknoter", + "DrawShapeLightning": "Lyn", + "DrawShapeCloud": "Sky", + "DrawShapeMoon": "Måne", + "DrawShapeBadge": "Merke", + "DrawSize": "Størrelse", + "DrawLayer": "Lag", + "DrawBackgroundVideoFrame": "Videobilde (gjeldende posisjon)", + "DrawBackgroundVideoFrameAt": "Videobilde ved...", + "DrawBackgroundImage": "Bildefil...", + "DrawBackgroundNone": "Ingen bakgrunn", + "DrawBackgroundStretch": "Strekk bildet til lerretet", + "DrawBackgroundOpacity": "Bakgrunnens dekkevne", + "DrawBackgroundVideoFrameFailed": "Kunne ikke hente et videobilde ved {0}.", + "DrawImages": "Bilder", + "DrawConvertToLine": "Konverter segment til linje", + "DrawConvertShapeToCurves": "Konverter alle linjer til kurver", + "DrawConvertShapeToLines": "Konverter alle kurver til linjer", + "DrawRotateCounterClockwise": "Roter 90° mot klokken", + "DrawSvgImages": "SVG-bilder", + "DrawSvgNoShapes": "Fant ingen fylte figurer eller streker i SVG-filen.", "ProgressBarTitle": "ASSA fremdriftslinje", "ProgressBarSettings": "Fremdriftslinje", - "ProgressBarPosition": "Posisjon", - "ProgressBarBottom": "Bunn", - "ProgressBarTop": "Topp", "MouseOverColor": "Farge ved musepeker over", "ClickedColor": "Farge ved klikk", "ProgressBarForeColor": "Forgrunnsfarge", - "ProgressBarBackColor": "Bakgrunnsfarge", - "ProgressBarStyle": "Stil", "ProgressBarSquareCorners": "Firkantede hjørner", "ProgressBarRoundedCorners": "Avrundede hjørner", "ProgressBarChapters": "Kapitler", @@ -3942,8 +4409,6 @@ "ProgressBarXAdjustment": "X-justering", "ProgressBarYAdjustment": "Y-justering", "ProgressBarTextAlignment": "Tekstjustering", - "ProgressBarTakePosFromVideo": "Hent posisjon fra video", - "ProgressBarPreview": "Forhåndsvisning", "FontCollectorTitle": "Skriftsamler", "FontCollectorUsedIn": "Brukt i", "FontCollectorFontFiles": "Skriftfil(er)", @@ -3990,9 +4455,7 @@ "ResolutionResamplerVideoDiffers": "Undertekstens oppløsning ({0}x{1}) er forskjellig fra videoens oppløsning ({2}x{3}).\nVil du endre underteksten til å passe videoen?", "ResolutionResamplerAskOnVideoOpen": "Spør når en video med en annen oppløsning åpnes", "BackgroundBoxGenerator": "Generer bakgrunnsboks", - "BackgroundBoxPadding": "Utfylling", "BackgroundBoxFillWidth": "Fyll bredde", - "BackgroundBoxBoxColor": "Boksfarge", "BackgroundBoxRadius": "Radius", "BackgroundBoxCircle": "Sirkel", "BackgroundBoxSpikes": "Pigger", @@ -4004,12 +4467,9 @@ "BackgroundBoxTornPaperDouble": "Revet papir (topp & bunn)", "BackgroundBoxStarburst": "Stjerneburst", "BackgroundBoxScroll": "Skriftrull / Pergament", - "StylesTitle": "Advanced Sub Station Alpha-stiler", "StylesInFile": "Stiler i fil", "StylesSaved": "Stiler lagret", - "Category": "Kategori", "AllCategories": "[Alle]", - "DefaultCategory": "Standard", "NewCategory": "Ny kategori...", "RenameCategory": "Gi kategori nytt navn...", "DeleteCategory": "Slett kategori", @@ -4032,13 +4492,26 @@ "Graphics": "Grafikk", "CopyToStorageStyles": "Kopier til lagringsstiler", "CopyToFileStyles": "Kopier til filstiler", + "StyleXAlreadyExistsInStorage": "En stil med navnet \"{0}\" finnes allerede i lagringen.\n\nVil du overskrive den, eller beholde begge (kopien får et nytt navn)?", + "StyleXAlreadyExistsInFile": "En stil med navnet \"{0}\" finnes allerede i filen.\n\nVil du overskrive den, eller beholde begge (kopien får et nytt navn)?", + "StyleNameCannotBeEmpty": "Et stilnavn kan ikke være tomt.", + "StyleNameXIsUsedMoreThanOnce": "Stilnavnet \"{0}\" brukes av mer enn én stil i filen.", + "Overwrite": "Overskriv", + "KeepBoth": "Behold begge", + "DoThisForAllConflictingStyles": "Gjør dette for alle stiler i konflikt", "SetStyleAsDefault": "Sett stil som standard", "TakeUsagesFromDotDotDot": "Hent bruk fra...", "ReplaceStyleWithDotDotDot": "Erstatt stil med...", "NoAttachmentsFound": "Ingen vedlegg funnet i den valgte ASSA-filen.", "DeleteStyleQuestion": "Slett stil?", "DeleteStylesQuestion": "Slett stiler?", + "DeleteXStylesQuestion": "Vil du slette {0} stiler?", + "DeleteXStylesFromStorageQuestion": "Vil du slette {0} stiler fra lagringen?", + "DeleteStyleXFromStorageQuestion": "Vil du slette stilen \"{0}\" fra lagringen?", + "DeleteStyleXFromFileQuestion": "Vil du slette stilen \"{0}\" fra gjeldende fil?", "OpenStyleImportFile": "Åpne undertekstfil å importere stiler fra", + "StyleImportFiles": "Stilfiler (.ass, .sty, Subtitle Edit 4-kategorier .template)", + "SsaStyleImportFiles": "Stilfiler (.ssa, .ass, .sty)", "Primary": "Primær", "Secondary": "Sekundær", "ApplyOverrideTags": "Bruk overstyringskoder", @@ -4053,7 +4526,6 @@ "SpaceIncrease": "Mellomromsøkning", "PopIn": "Pop inn", "SpinIn": "Spinn inn", - "PlayCurrent": "Spill gjeldende", "SetPosition": "Angi posisjon", "Rotation": "Rotasjon", "ScaleX": "Skala X", @@ -4097,10 +4569,8 @@ "AdvancedEffectOldMovieDescription": "Simulerer en vintage 35mm filmprojektor med støy, vignett og riper", "AdvancedEffectNeonBurst": "Neon-utbrudd", "AdvancedEffectNeonBurstDescription": "Høyenergi 'Shorts'-stiltekster med neon-glød og skaler-inn 'pop'-animasjon", - "AdvancedEffectSettings": "Innstillinger", "AdvancedEffectSnowFlakeCount": "Antall fnugg", "AdvancedEffectStarfieldStarCount": "Antall stjerner", - "AdvancedEffectStarfieldSpeed": "Hastighet", "AdvancedEffectGlitch": "Glitch", "AdvancedEffectGlitchDescription": "Digital glitch med kromatisk avvik, hvite blink og forvrengningsoverlegg", "AdvancedEffectBounceIn": "Sprett inn", @@ -4109,8 +4579,6 @@ "AdvancedEffectFirefliesDescription": "Varme glødende gul-ravfargede prikker driver organisk over skjermen med pulserende glød", "AdvancedEffectMatrix": "Matrix", "AdvancedEffectMatrixDescription": "Fallende grønne tegnsøyler hvor underteksten bygges opp bokstav for bokstav fra regnet", - "AdvancedEffectAudioBars": "Lydstolper (bølgeform)", - "AdvancedEffectAudioBarsDescription": "Animerte equalizer-stolper drevet av lydbølgeformen — stolper ruller mot venstre som en bølgeform og pulserer med lyden", "AdvancedEffectAudioPulse": "Lydtekst-puls", "AdvancedEffectAudioPulseDescription": "Underteksten gløder og pulserer med lydvolumet — stille partier viser normal tekst, høye topper legger til en farget glorie og en liten oppskalering", "AdvancedEffectConfetti": "Konfetti-utbrudd", @@ -4124,7 +4592,6 @@ "AdvancedEffectFancyKaraokeGlow": "Aktivt ord-glød", "AdvancedEffectFancyKaraokeActiveColor": "Aktiv farge", "AdvancedEffectFancyKaraokeInactiveColor": "Inaktiv farge", - "AdvancedEffectFancyKaraokeInactiveOpacity": "Inaktiv ugjennomsiktighet (0-255)", "AdvancedEffectWordSpacingPixels": "Avstand (piksler)", "AdvancedEffectSlowZoomOut": "Sakte zoom-ut", "AdvancedEffectSlowZoomOutDescription": "Teksten starter litt større og krymper forsiktig til normal størrelse over undertekstens varighet", @@ -4140,7 +4607,6 @@ "AdvancedEffectSlideInLeftDescription": "Teksten glir inn fra utenfor skjermen til venstre, holdes, og går deretter tilbake til venstre", "AdvancedEffectSlideInRight": "Gli inn fra høyre", "AdvancedEffectSlideInRightDescription": "Teksten glir inn fra utenfor skjermen til høyre, holdes, og går deretter tilbake til høyre", - "AdvancedEffectFadeInOut": "Inntoning/uttoning", "AdvancedEffectFadeInOutDescription": "Teksten tones inn i begynnelsen og tones ut på slutten av hver undertekst", "AdvancedEffectWordFlip3D": "Ordvending 3D", "AdvancedEffectWordFlip3DDescription": "Hvert ord felles inn med en 3D-vending og et elastisk sprett når det sies — moderne 'Shorts'-undertekststil", diff --git a/src/ui/Assets/Languages/Persian.json b/src/ui/Assets/Languages/Persian.json index a25d3c52fb2..132824dff0e 100644 --- a/src/ui/Assets/Languages/Persian.json +++ b/src/ui/Assets/Languages/Persian.json @@ -1,12 +1,71 @@ { "title": "Subtitle Edit", - "version": "v5.2.0-rc7", + "version": "v5.3.0", "translatedBy": "رامتین جوکار", "cultureName": "fa-IR", "general": { + "prompt": "پرامپت", + "temperature": "دما", + "preset": "پیش‌تنظیم", + "output": "خروجی", + "outputFormat": "قالب خروجی", + "other": "سایر", + "timeCodeFormat": "فرمت کد زمانی", + "topBottomMargin": "حاشیه بالا/پایین", + "theme": "پوسته", + "brightness": "روشنایی", + "chooseColor": "انتخاب رنگ", + "lineX": "خط {0}", + "playLine": "پخش خط", + "maxLineLength": "حداکثر طول خط", + "maxCharsPerSec": "حداکثر نویسه در ثانیه", + "maxNumberOfLines": "حداکثر تعداد خطوط", + "subtitles": "زیرنویس‌ها", + "shotChanges": "تغییرات پلان", + "chapters": "فصل‌ها", + "audio": "صدا", + "interjections": "اصوات نواخت‌ها و میان‌افکندها", + "blankLines": "خطوط خالی", + "editWholeText": "ویرایش کل متن", + "noTextInClipboard": "متنی در حافظه موقت وجود ندارد", + "noSubtitlesFoundTitle": "هیچ زیرنویسی یافت نشد", + "replacedXOccurrences": "{0} مورد جایگزین شد", + "invalidRegularExpressionX": "عبارت باقاعده نامعتبر: {0}", + "discardChangesTitle": "تغییرات نادیده گرفته شوند؟", + "downloadingXDotDotDot": "در حال دانلود {0}...", + "importTimeCodesDotDotDot": "وارد کردن کدهای زمانی...", + "original": "اصلی", + "nextChange": "تغییر بعدی", + "previousChange": "تغییر قبلی", + "changeXOfY": "تغییر {0} از {1}", + "tooLong": "مدت زمان نمایش خیلی طولانی است", + "tooShort": "مدت زمان نمایش خیلی کوتاه است", + "overlapping": "هم‌پوشانی", + "detail": "جزئیات", + "fixOcrErrors": "اصلاح خطاهای OCR", + "runningOcrXY": "در حال اجرای OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp به موتور llama-server نیاز دارد که دانلود شود. اکنون دانلود شود؟", "abort": "لغو", "actor": "بازیگر/گوینده", "actors": "بازیگران/گویندگان", + "setActorDotDotDot": "تنظیم بازیگر/گوینده...", + "actorPickerTitle": "تنظیم بازیگر/گوینده", + "actorPickerFilterHint": "برای فیلتر کردن تایپ کنید، یا نام بازیگر جدیدی را وارد کنید", + "actorPickerKeysHint": "برای تنظیم بازیگر، یک عدد یا Enter را فشار دهید. Alt+بالا/پایین ترتیب را تغییر می‌دهد و Delete بازیگر را حذف می‌کند.", + "actorPickerNewActorX": "بازیگر جدید \"{0}\"", + "actorPickerLinesSelectedX": "خطوط انتخاب‌شده: {0}", + "setStyleDotDotDot": "تنظیم استایل...", + "stylePickerTitle": "تنظیم استایل", + "stylePickerFilterHint": "برای فیلتر کردن تایپ کنید، یا نام استایل جدیدی را وارد کنید", + "stylePickerKeysHint": "برای تنظیم استایل روی همه خطوط انتخاب‌شده، یک عدد (۱-۹، ۰) را فشار دهید.", + "stylePickerNewStyleX": "استایل جدید \"{0}\"", + "stylePickerNewStyleInfo": "Enter را فشار دهید تا این استایل با تنظیمات پیش‌فرض اضافه شده و روی خطوط انتخاب‌شده تنظیم شود. برای تغییر فونت، رنگ‌ها و موقعیت آن در آینده از \"مدیریت استایل‌ها...\" استفاده کنید.", + "stylePickerCurrentStyleX": "استایل فعلی: {0}", + "stylePickerLinesUsingStyleX": "خطوطی که از این استایل استفاده می‌کنند: {0}", + "stylePickerMarginsXYZ": "چپ {0}، راست {1}، عمودی {2}", + "stylePickerSetStyle": "تنظیم استایل", + "stylePickerManageStyles": "مدیریت استایل‌ها...", + "stylePickerManageStylesHint": "این پنجره را ببندید و مدیر استایل‌ها را برای ویرایش فونت‌ها، رنگ‌ها، موقعیت و موارد دیگر باز کنید", "add": "افزودن", "addDotDotDot": "افزودن...", "addToNamesListCaseSensitive": "افزودن به لیست نام‌ها (حساس به حروف کوچک و بزرگ)", @@ -339,6 +398,7 @@ "mergeSelectedLinesDialog": "ادغام خطوط انتخاب‌شده به عنوان مکالمه", "mergeWithLineAfterAndAutoBreak": "ادغام با خط بعد و شکستن خودکار خط", "mergeWithLineAfterKeepBreaks": "ادغام با خط بعد (حفظ شکستگی‌ها)", + "mergeWithLineAfterAndUnbreak": "ادغام با خط بعد و حذف شکستگی", "mergeWithLineBeforeAndAutoBreak": "ادغام با خط قبل و شکستن خودکار خط", "mergeWithLineBeforeKeepBreaks": "ادغام با خط قبل (حفظ شکستگی‌ها)", "middleCenter": "وسط-وسط", @@ -353,6 +413,8 @@ "moveAllShotChangeOneFrameForward": "انتقال تمام تغییرات پلان به اندازه یک فریم به جلو", "multiMode": "حالت چندگانه", "moveDown": "حرکت به پایین", + "increase": "افزایش", + "decrease": "کاهش", "moveUp": "حرکت به بالا", "moveToTop": "انتقال به بالا", "moveToBottom": "انتقال به پایین", @@ -422,6 +484,7 @@ "percent": "درصد", "pickLayer": "تنظیم لایه", "pickOllamaModel": "انتخاب مدل Ollama", + "pickModel": "انتخاب مدل", "llamaCppUseRemoteServer": "استفاده از سرور خارجی (URL)", "llamaCppEngineSettings": "تنظیمات موتور llama.cpp", "llamaCppEngineSettingsSubtitle": "ساخت سرور محلی llama.cpp", @@ -498,6 +561,7 @@ "reset": "بازنشانی", "resizePanels": "تغییر اندازه پنل‌ها", "resolution": "رزولوشن", + "retry": "تلاش مجدد", "reverseRightToLeftStartEnd": "معکوس کردن شروع/پایان راست‌به‌چپ", "right": "راست", "rightToLeft": "راست به چپ", @@ -559,6 +623,8 @@ "shadowColor": "رنگ سایه", "shadowWidth": "عرض سایه", "shiftLineBy": "جابجایی خط به میزان", + "shotIn": "ورود پلان", + "shotOut": "خروج پلان", "shortcut": "میانبر", "shortcuts": "کلیدهای میانبر", "show": "نمایش", @@ -570,9 +636,13 @@ "showStartColumn": "نمایش ستون \"زمان شروع\"", "showHideColumn": "نمایش ستون \"زمان پایان\"", "showHistory": "نمایش تاریخچه", + "clearHistory": "پاک کردن تاریخچه", + "removeFromHistory": "حذف از تاریخچه", "showLayerColumn": "نمایش ستون \"لایه\"", "showPreview": "نمایش پیش‌نمایش", "showShotChangesList": "نمایش لیست تغییرات پلان", + "showShotInColumn": "نمایش ستون \"ورود پلان\"", + "showShotOutColumn": "نمایش ستون \"خروج پلان\"", "showStyleColumn": "نمایش ستون \"استایل\"", "showTeletext": "نمایش تله‌تکست", "showTimeCodes": "نمایش کدهای زمانی", @@ -629,12 +699,14 @@ "styleExaggeration": "اغراق استایل", "styles": "استایل‌ها", "subtitleFile": "فایل زیرنویس", + "subtitleFileChangedOutsideX": "فایل \"{0}\" خارج از Subtitle Edit تغییر کرده است.\n\nآن را دوباره بارگذاری کنید و تغییرات خود را از دست بدهید؟", "subtitleFileName": "نام فایل زیرنویس", "subtitleFileSaved": "فایل زیرنویس ذخیره شد", "subtitleFileSavedToX": "فایل زیرنویس در {0} ذخیره شد", "subtitleFiles": "فایل‌های زیرنویس", "subtitleFormats": "فرمت‌های زیرنویس", "subtitleLoadedX": "زیرنویس بارگذاری شد: {0}", + "subtitleReloadedChangedOutsideX": "زیرنویس دوباره بارگذاری شد (خارج از Subtitle Edit تغییر کرده بود): {0}", "suffix": "پسوند", "suggestions": "پیشنهادات", "sync": "همگام‌سازی", @@ -680,6 +752,7 @@ "type": "نوع", "unbreak": "پیوستن مجدد متن (حذف شکستگی)", "unbreakLines": "پیوستن مجدد خطوط", + "undelete": "بازگردانی حذف", "underline": "خط زیر متن", "undo": "لغو عملکرد", "unknown": "ناشناخته", @@ -717,10 +790,23 @@ "videoCustom3ForwardX": "ویدئو، میلی‌ثانیه سفارشی ({0:#,###,##0}) به جلو، ۳", "videoCustom4BackX": "ویدئو، میلی‌ثانیه سفارشی ({0:#,###,##0}) به عقب، ۴", "videoCustom4ForwardX": "ویدئو، میلی‌ثانیه سفارشی ({0:#,###,##0}) به جلو، ۴", + "videoCustom1BackAndPauseX": "ویدئو، میلی‌ثانیه سفارشی ({0:#,###,##0}) به عقب و توقف موقت، ۱", + "videoCustom1ForwardAndPauseX": "ویدئو، میلی‌ثانیه سفارشی ({0:#,###,##0}) به جلو و توقف موقت، ۱", + "videoCustom2BackAndPauseX": "ویدئو، میلی‌ثانیه سفارشی ({0:#,###,##0}) به عقب و توقف موقت، ۲", + "videoCustom2ForwardAndPauseX": "ویدئو، میلی‌ثانیه سفارشی ({0:#,###,##0}) به جلو و توقف موقت، ۲", + "videoCustom3BackAndPauseX": "ویدئو، میلی‌ثانیه سفارشی ({0:#,###,##0}) به عقب و توقف موقت، ۳", + "videoCustom3ForwardAndPauseX": "ویدئو، میلی‌ثانیه سفارشی ({0:#,###,##0}) به جلو و توقف موقت، ۳", + "videoCustom4BackAndPauseX": "ویدئو، میلی‌ثانیه سفارشی ({0:#,###,##0}) به عقب و توقف موقت، ۴", + "videoCustom4ForwardAndPauseX": "ویدئو، میلی‌ثانیه سفارشی ({0:#,###,##0}) به جلو و توقف موقت، ۴", "videoExtension": "پسوند فایل ویدئویی", "videoFile": "فایل ویدئویی", "videoFileGenerated": "فایل ویدیویی ایجاد شد", "videoFileGeneratedX": "فایل ویدئویی تولید شد: \"{0}\"", + "videoFilesGenerated": "فایل‌های ویدئویی تولید شدند", + "xVideosGenerated": "{0} ویدئو تولید شد", + "xOfYVideosGenerated": "{0} از {1} ویدئو تولید شد", + "savedInX": "ذخیره شد در {0}", + "savedInXFolders": "ذخیره شد در {0} پوشه", "videoFiles": "فایل‌های ویدئویی", "videoAndAudioFiles": "فایل‌های ویدئویی و صوتی", "videoOffset": "انحراف ویدئو", @@ -778,7 +864,6 @@ "imageFiles": "فایل‌های تصویری", "openAiCompatibleSttEndpoint": "آدرس Endpoint برای STT", "openAiCompatibleSttApiKey": "کلید API", - "openAiCompatibleSttModel": "مدل", "openAiCompatibleSttExtraHeaders": "هدرهای اضافی", "openAiCompatibleSttTimeout": "زمان انتظار ابطال (ثانیه)", "openAiCompatibleSttLanguage": "راهنمای زبان", @@ -788,6 +873,9 @@ "dashScopeSttRegion": "منطقه", "dashScopeSttEnableWords": "برچسب زمانی در سطح کلمات", "dashScopeSttRegionKeyHint": "نکته: کلیدهای API بخش Alibaba Cloud Model Studio وابسته به منطقه هستند - مطمئن شوید منطقه انتخاب‌شده با منطقه‌ای که کلید در آن ساخته شده مطابقت دارد (چین در مقابل بین‌المللی).", + "googleCloudSttProjectId": "شناسه پروژه (فقط برای Application Default Credentials)", + "googleCloudSttBucketName": "باکت ذخیره‌سازی (خالی = خودکار)", + "googleCloudSttDynamicBatching": "دسته‌بندی پویا (حدود ۵ برابر ارزان‌تر، بدون تضمین تأخیر)", "onlineSttApiKeyMissing": "کلید API الزامی است. لطفاً کلید خود را وارد کرده و دوباره تلاش کنید.", "openAiCompatibleSttAutoTranscribeOnAudioSelection": "پیاده‌سازی خودکار متن برای بخش انتخاب‌شده در شکل موج از طریق گفتار به متن", "openAiCompatibleSttStream": "پاسخ به صورت استریم (جریانی)", @@ -800,7 +888,6 @@ "processingResponse": "در حال پردازش پاسخ...", "unauthorizedApiKey": "عدم دسترسی: کلید API نامعتبر است یا مجوزهای کافی وجود ندارد.", "requestTimeout": "پایان زمان درخواست: پاسخ‌دهی سرور خیلی طول کشید.", - "noSegmentsReturned": "هیچ بخشی از سرویس پیاده‌سازی متن دریافت نشد.", "openAiCompatibleSttUrlMissing": "آدرس Endpoint تبدیل گفتار به متن سازگار با OpenAI الزامی است. لطفاً یک آدرس وارد کرده و دوباره تلاش کنید.", "openAiCompatibleSttUrlNotResponding": "آدرس Endpoint تبدیل گفتار به متن پاسخگو نیست:\n{0}\n\nلطفاً صحت آدرس و روشن بودن سرور را بررسی کنید.", "transcriptionFailed": "پیاده‌سازی متن با شکست مواجه شد", @@ -846,6 +933,7 @@ "multipleReplace": "جایگزینی چندگانه...", "fillSelectedLinesWithClipboard": "پر کردن خطوط انتخاب‌شده با متن حافظه موقت", "goToLineNumber": "برو به خط شماره...", + "commandPalette": "پالت فرمان...", "rightToLeftMode": "حالت راست‌به‌چپ", "modifySelectionDotDotDot": "اصلاح خطوط انتخاب‌شده...", "tools": "ابزارها", @@ -853,6 +941,7 @@ "applyDurationLimits": "اعمال محدودیت‌های مدت زمان...", "batchConvert": "تبدیل دسته‌ای (گروهی)...", "beautifyTimeCodes": "زیباسازی کدهای زمانی...", + "improveTimeCodes": "بهبود کدهای زمانی (هم‌ترازی اجباری)...", "bridgeGaps": "پر کردن فاصله‌ها...", "applyMinGap": "اعمال حداقل فاصله بین زیرنویس‌ها...", "changeCasing": "تغییر حالت حروف...", @@ -991,6 +1080,9 @@ "selectCurrentLineWhilePlayingHint": "انتخاب زیرنویس فعلی در زمان پخش {0}", "videoPosition": "موقعیت ویدئو {0}", "videoPositionTextBox": "کادر متنی موقعیت ویدیو {0}", + "toolbarLineBreakX": "شکست خط {0} (بقیه نوار ابزار در ردیف جدید ادامه می‌یابد)", + "initialText": "متن اولیه خط انتخاب‌شده", + "initialTextHint": "متن خط انتخاب‌شده همان‌طور که هنگام انتخاب خط بود", "hideWaveformToolbar": "پنهان کردن نوار ابزار {0}", "resetZoomAndSpeed": "بازنشانی بزرگنمایی و سرعت پخش {0}", "removeBlankLines": "حذف خطوط خالی {0}", @@ -1004,6 +1096,15 @@ "textPlayHint": "پخش زیرنویس فعلی و توقف در پایان {0}", "textPauseHint": "توقف موقت پخش {0}", "textNextHint": "پخش زیرنویس بعدی و توقف در پایان {0}", + "moveSelectedLines": "جابجایی خطوط انتخاب‌شده (دکمه‌های عقب/جلو)", + "moveSelectedLinesAndFollowing": "جابجایی خطوط انتخاب‌شده و همه خطوط بعدی (دکمه‌های عقب/جلو)", + "moveAllLines": "جابجایی همه خطوط (دکمه‌های عقب/جلو)", + "moveSelectedLinesBackHint": "جابجایی خطوط انتخاب‌شده {0} میلی‌ثانیه به عقب {1}", + "moveSelectedLinesForwardHint": "جابجایی خطوط انتخاب‌شده {0} میلی‌ثانیه به جلو {1}", + "moveSelectedLinesAndFollowingBackHint": "جابجایی خطوط انتخاب‌شده و همه خطوط بعدی {0} میلی‌ثانیه به عقب {1}", + "moveSelectedLinesAndFollowingForwardHint": "جابجایی خطوط انتخاب‌شده و همه خطوط بعدی {0} میلی‌ثانیه به جلو {1}", + "moveAllLinesBackHint": "جابجایی همه خطوط {0} میلی‌ثانیه به عقب {1}", + "moveAllLinesForwardHint": "جابجایی همه خطوط {0} میلی‌ثانیه به جلو {1}", "guessStartNoLineSelected": "حدس شروع: هیچ خطی انتخاب نشده است", "guessStartTimeCodesLocked": "حدس شروع: کدهای زمانی قفل هستند", "guessStartNoWaveform": "حدس شروع: شکل موجی وجود ندارد", @@ -1025,6 +1126,9 @@ "charactersPerSecond": "کاراکتر/ثانیه: {0}", "chooseColumn": "انتخاب ستون", "columnPaste": "چسباندن ستونی", + "commandPaletteTitle": "پالت فرمان", + "commandPaletteSearchPlaceholder": "برای جستجوی فرمان‌ها تایپ کنید...", + "commandPaletteNoCommandsFound": "هیچ فرمان منطبقی یافت نشد", "createdEmptyTranslation": "ترجمه خالی از زیرنویس فعلی ایجاد شد", "deleteText": "حذف متن", "deleteTextAndShiftCellsUp": "حذف متن و انتقال سلول‌ها به بالا", @@ -1063,11 +1167,14 @@ "numberOfLinesEvenlyDistributedX": "تعداد {0} خط به صورت یکنواخت توزیع شدند", "oneLineCopiedFromOriginal": "یک خط از زیرنویس اصلی کپی شد", "oneLineCopiedToOriginal": "یک خط در زیرنویس اصلی کپی شد", + "onlineOnlyVideo": "ویدئوی فقط آنلاین", + "onlineOnlyVideoXSizeYDownloadAndOpen": "فایل ویدئویی \"{0}\" ({1}) فقط به‌صورت آنلاین ذخیره شده است، برای مثال در Dropbox یا iCloud Drive، و باید پیش از باز شدن دانلود شود.\n\nاکنون دانلود و باز شود؟", "oneLineMerged": "یک خط ادغام شد", "oneLineSwitched": "جای یک خط تعویض شد", "overwriteExistingCells": "جایگزینی سلول‌های موجود", "overwriteOrShiftCellsDown": "جایگزینی/انتقال سلول‌ها به پایین", "parsingMatroskaFile": "در حال تجزیه فایل ماتروشکا (MKV)...", + "readingDvdSubtitles": "در حال خواندن زیرنویس‌های DVD...", "pasteFromClipboardDotDotDot": "چسباندن از حافظه موقت...", "redoPerformed": "عملکرد مجدداً انجام شد (Redo)", "redoPerformedXActionLeft": "عملکرد مجدداً انجام شد (تعداد کارهای باقی‌مانده: {0})", @@ -1107,12 +1214,14 @@ "trimmedXLines": "تعداد {0} خط زیرنویس کوتاه شدند", "pastedXLinesOverSelectedLines": "{0} خط روی خطوط انتخاب‌شده جای‌گذاری شد", "pastedXOfYLinesOverSelectedLines": "{0} خط از {1} خط روی خطوط انتخاب‌شده جای‌گذاری شد - بقیه با محدوده انتخاب‌شده مطابقت نداشتند", + "insertedXLinesFromClipboard": "{0} خط از کلیپ‌بورد درج شد", "openOriginalDifferentNumberOfSubtitlesXY": "تعداد خطوط فایل زیرنویس اصلی با فایل زیرنویس فعلی یکسان نیست.\n\n• زیرنویس‌های اصلی: {0}\n• زیرنویس‌های فعلی: {1}", "originalTextReadOnly": "متن اصلی (فقط خواندنی)", "originalTextEditMode": "متن اصلی (حالت ویرایش)", "originalIsReadOnlyNotSaved": "زیرنویس اصلی فقط به‌صورت مرجع و خواندنی است و ذخیره نشد", "originalIsEmptyNotSaved": "زیرنویس اصلی هیچ متنی ندارد و ذخیره نشد", "originalIsReadOnlyReference": "زیرنویس اصلی به‌عنوان مرجع فقط‌خواندنی باز شده است", + "closeTranslationQuestionXY": "ترجمه \"{0}\" بسته شود؟\n\nزیرنویس اصلی \"{1}\" به زیرنویسی که ویرایش می‌کنید تبدیل می‌شود. خود فایل ترجمه تغییر نمی‌کند.", "allowEditOfOriginalSubtitle": "اجازه ویرایش زیرنویس اصلی", "showAllOriginalLinesX": "نمایش همه خطوط اصلی ({0} مورد در اینجا تطابق ندارند)", "showAllOriginalLinesHint": "خطوطی که تطابق ندارند به‌صورت ردیف‌های اضافی نمایش داده می‌شوند تا بتوانید مواردی را که در ترجمه وجود ندارند مشاهده کنید.", @@ -1147,6 +1256,7 @@ "fileExportedInFormatXToY": "فایل در فرمت {0} به مسیر {1} خروجی گرفته شد", "fileExportedInFormatXToFileY": "فایل در فرمت \"{0}\" در فایل \"{1}\" ذخیره شد", "fixedXLines": "تعداد {0} خط اصلاح شد", + "toolXChangedYLines": "{0}: {1} خط تغییر کرد", "transcriptionCompletedWithXLines": "پیاده‌سازی متن با {0} خط کامل شد", "openSubtitleFileX": "فایل زیرنویس \"{0}\" باز شود؟", "replacedXOccurrences": "تعداد {0} مورد جایگزین شد", @@ -1237,6 +1347,21 @@ "formattingDotDotDot": "فرمت‌دهی...", "imageBasedSubtitleForEditDotDotDot": "زیرنویس مبتنی بر تصویر برای ویرایش...", "imageBasedSubtitleForOcrDotDotDot": "زیرنویس مبتنی بر تصویر برای OCR...", + "dvdSubtitlesDotDotDot": "زیرنویس‌ها از DVD (IFO/VOB)...", + "titleImportDvd": "وارد کردن زیرنویس‌ها از DVD", + "dvdIfoFile": "فایل IFO", + "dvdVobFiles": "فایل‌های VOB", + "dvdVideoStandard": "استاندارد ویدئو", + "dvdStartRipping": "شروع استخراج", + "dvdRippingAborted": "استخراج لغو شد", + "dvdOpenIfoFile": "باز کردن فایل IFO دی‌وی‌دی", + "dvdAddVobFiles": "افزودن فایل‌های VOB", + "dvdIfoFiles": "فایل‌های IFO دی‌وی‌دی", + "dvdVobFileType": "فایل‌های VOB دی‌وی‌دی", + "dvdDropHint": "یک فایل IFO (VIDEO_TS\\VTS_01_0.IFO) باز کنید یا فایل‌های VOB را اضافه کنید - یا آن‌ها را اینجا رها کنید", + "dvdNotAnIfoFileX": "{0} یک فایل IFO دی‌وی‌دی نیست", + "dvdMenuIfoNoTitleSetsX": "هیچ مجموعه عنوانی (VTS_xx_0.IFO) در کنار {0} یافت نشد", + "dvdEncryptedXOfY": "{0} از {1} بسته زیرنویس هنوز با CSS رمزگذاری شده‌اند - این فایل‌های VOB بدون رمزگشایی کپی شده‌اند، بنابراین برخی از تصاویر زیرنویس مخدوش خواهند بود.\n\nبرای نتیجه‌ای تمیز، ابتدا DVD را با یک ابزار استخراج DVD رمزگشایی کنید.\n\nبه هر حال ادامه داده شود؟", "splitTextAt": "تقسیم متن در", "blankLines": "خطوط خالی", "oneLineIsOneSubtitle": "هر خط، یک زیرنویس است", @@ -1256,8 +1381,13 @@ "forcedAlignerProgress": "در حال همگام‌سازی... پنجره {0} از {1}، {2} از {3} خط", "forcedAlignerSetupTitle": "همگام‌سازی کدهای زمانی از طریق هم‌ترازکننده اجباری", "forcedAlignerSetupIntro": "هم‌ترازکننده اجباری، متن زیرنویسی را که از قبل دارید با صدای فایل مطابقت می‌دهد، بدون اینکه ابتدا آن را رونویسی کند. ویدیوهای طولانی به بخش‌های کوچک‌تر تقسیم و همگام‌سازی می‌شوند؛ بنابراین طول ویدیو محدودیتی ایجاد نمی‌کند.", + "forcedAlignerEndsFromSpeech": "تنظیم زمان‌های پایان از گفتار جداشده (کند)", + "forcedAlignerEndsFromSpeechHint": "هم‌ترازکننده اجباری محل شروع یک خط را پیدا می‌کند، نه محل پایان آن را؛ بنابراین زمان‌های پایان معمولاً از زمان خواندن به دست می‌آیند. با فعال بودن این گزینه، ابتدا موسیقی و جلوه‌های صوتی از صدا حذف می‌شوند و هر خط در جایی که گفتارش ساکت می‌شود پایان می‌یابد. با GPU تقریباً به اندازه خود ویدئو طول می‌کشد - و بدون آن چندین برابر بیشتر.", + "forcedAlignerIsolatingSpeech": "در حال جداسازی گفتار... {0}", + "forcedAlignerIsolatingSpeechFailed": "جداسازی گفتار ممکن نشد - زمان‌های پایان به‌جای آن از زمان خواندن تنظیم شدند.", "forcedAlignerModel": "مدل هم‌ترازکننده", - "forcedAlignerDownloadEngine": "دانلود / به‌روزرسانی موتور..." + "forcedAlignerDownloadEngine": "دانلود / به‌روزرسانی موتور...", + "forcedAlignerEstimatedXOfY": "{0} از {1} خط هم‌تراز نشدند و بر اساس زمان خواندن قرار گرفتند - کدهای زمانی آن‌ها فقط تخمینی است. احتمالاً متن از آنچه در ویدئو گفته می‌شود طولانی‌تر است." }, "export": { "exportImagesProfiles": "پروفایل‌های خروجی تصویر", @@ -1306,6 +1436,18 @@ "imageBasedSubtitleSaved": "زیرنویس مبتنی بر تصویر ذخیره شد", "fullFrameImage": "تصویر تمام‌فریم", "fullFrameImageHint": "هر تصویر را به اندازه فریم ویدیو ایجاد کن و زیرنویس را در محل خود قرار بده", + "stereo3D": "3D", + "stereo3DHint": "برای ویدئوی سه‌بعدی: زیرنویس یک بار در هر نیمه مربوط به هر چشم در فریم ترسیم شود", + "halfSideBySide": "نیم کنار‌به‌کنار", + "halfTopBottom": "نیم بالا/پایین", + "depth3D": "عمق", + "depth3DHint": "میزان بیرون‌زدگی زیرنویس از صفحه - مقدار مثبت آن را نزدیک‌تر می‌کند و منفی آن را به عقب می‌برد", + "plane3D": "3D-Plane", + "plane3DHint": "به هر زیرنویس عمقی را بدهید که Blu-ray سه‌بعدی برای آن ذخیره می‌کند، از یک فایل 3D-Plane (.ofs) ساخته‌شده با BD3D2MK3D یا OFSExtractor. در جایی که 3D-Plane مقداری ندارد، از عمق استفاده می‌شود", + "openPlane3DTitle": "باز کردن فایل 3D-Plane", + "unableToLoadPlane3DX": "بارگذاری 3D-Plane ممکن نیست: {0}", + "plane3DXDepthYToZ": "{0} (عمق {1} تا {2})", + "plane3DXNoDepth": "{0} (بدون مقادیر عمق)", "textEffect": "افکت متن", "textEffectSettingsTitle": "تنظیمات افکت متن", "textEffectPreset": "پیش‌تنظیم", @@ -1410,7 +1552,22 @@ "restoreAutoBackupFile": "بازیابی فایل پشتیبان خودکار", "restoreXFromY": "آیا می‌خواهید «{0}» را از {1} بازیابی کنید؟", "deleteAllSubtitleBackups": "آیا می‌خواهید تمام فایل‌های پشتیبان زیرنویس را حذف کنید؟", - "deleteAll": "حذف همه" + "deleteAll": "حذف همه", + "subtitles": "زیرنویس‌ها", + "settingsBackupInfo": "از Settings.json هنگام شروع Subtitle Edit نسخه پشتیبان گرفته می‌شود، حداکثر یک بار در هر {0} روز و فقط در صورتی که تنظیمات تغییر کرده باشند. {1} نسخه پشتیبان جدیدتر نگه داشته می‌شوند.", + "settingsBackupInfoEveryStart": "از Settings.json هر بار که Subtitle Edit شروع می‌شود نسخه پشتیبان گرفته می‌شود، در صورتی که تنظیمات تغییر کرده باشند. {0} نسخه پشتیبان جدیدتر نگه داشته می‌شوند.", + "settingsBackupOff": "پشتیبان‌گیری خودکار از تنظیمات خاموش است (گزینه‌ها ← تنظیمات ← فایل).", + "lastSettingsBackupX": "آخرین نسخه پشتیبان: {0}", + "noSettingsBackupsYet": "هنوز نسخه پشتیبانی از تنظیمات وجود ندارد", + "openSettingsBackupFolder": "باز کردن پوشه پشتیبان تنظیمات", + "backUpSettingsNow": "پشتیبان‌گیری اکنون", + "settingsBackedUp": "از تنظیمات فعلی نسخه پشتیبان گرفته شد.", + "restoreSettings": "بازیابی تنظیمات", + "restoreSettingsFromX": "آیا می‌خواهید تنظیمات فعلی خود را با نسخه پشتیبان مربوط به {0} جایگزین کنید؟\n\nابتدا از تنظیمات فعلی شما نسخه پشتیبان گرفته می‌شود. برخی تغییرات فقط پس از راه‌اندازی مجدد Subtitle Edit اعمال می‌شوند.", + "settingsRestored": "تنظیمات بازیابی شدند. لطفاً برای اعمال همه تغییرات، Subtitle Edit را مجدداً راه‌اندازی کنید.", + "settingsRestoreFailed": "بازیابی تنظیمات ممکن نشد: {0}", + "settingsBackupNotValid": "نسخه پشتیبان یک فایل تنظیمات معتبر نیست، بنابراین تنظیمات فعلی شما حفظ شد", + "deleteAllSettingsBackups": "آیا می‌خواهید همه فایل‌های پشتیبان تنظیمات را حذف کنید؟" }, "propertiesDCinema": { "title": "ویژگی‌های D-Cinema SMPTE", @@ -1424,22 +1581,16 @@ "editRate": "نرخ ویرایش", "timeCodeRate": "نرخ کد زمانی", "startTime": "زمان شروع", - "font": "فونت", "fontId": "شناسه فونت", "fontUri": "آدرس (URI) فونت", - "generate": "تولید", - "fontColor": "رنگ فونت", "chooseColor": "انتخاب رنگ", "fontEffect": "جلوه (افکت) فونت", "effectColor": "رنگ جلوه", - "fontSize": "اندازه فونت", "topBottomMargin": "حاشیه بالا/پایین", "fadeUpTime": "مدت زمان ظاهر شدن تدریجی", "fadeDownTime": "مدت زمان محو شدن تدریجی", - "frames": "فریم‌ها", "zPosition": "موقعیت Z", - "zPositionHelp": "اعداد مثبت متن را دورتر و اعداد منفی آن را نزدیک‌تر می‌برند؛ اگر موقعیت Z صفر باشد، حالت دوبعدی است", - "export": "خروجی گرفتن..." + "zPositionHelp": "اعداد مثبت متن را دورتر و اعداد منفی آن را نزدیک‌تر می‌برند؛ اگر موقعیت Z صفر باشد، حالت دوبعدی است" }, "webVtt": { "setStylesForSelectedLinesTitle": "تنظیم سبک‌های WebVTT برای خطوط انتخاب‌شده", @@ -1477,11 +1628,61 @@ "ignoreFormatting": "نادیده گرفتن قالب‌بندی", "ignoreFormattingHint": "خطوطی که فقط در برچسب‌های قالب‌بندی مانند یا {\\an8} تفاوت دارند، متفاوت به شمار نمی‌آیند", "showOnlyDifferencesInText": "فقط تفاوت‌های متن", + "ignoreNumbering": "نادیده گرفتن شماره‌گذاری", + "ignoreNumberingHint": "خطوطی که فقط در شماره‌شان متفاوت‌اند، متفاوت به حساب نمی‌آیند", + "ignoreTimeDifferenceMs": "تلورانس زمانی (میلی‌ثانیه)", + "ignoreTimeDifferenceMsHint": "زمان‌های شروع و پایانی که به این تعداد میلی‌ثانیه یا کمتر تفاوت دارند، متفاوت به حساب نمی‌آیند", + "compareDifferences": "تفاوت‌ها", + "compareTextDifferences": "تفاوت‌های متنی", + "compareCurrent": "فعلی", + "compareReference": "مرجع", + "compareEditable": "قابل ویرایش", + "compareEditableHint": "تغییراتی که اینجا انجام می‌شوند، با کلیک روی اعمال به زیرنویس بازمی‌گردند", + "compareReadOnly": "فقط‌خواندنی", + "compareTakeFromReference": "گرفتن متن و زمان‌بندی از مرجع", + "compareInsertFromReference": "درج این خط در زیرنویس فعلی", + "compareDeleteFromCurrent": "حذف این خط از زیرنویس فعلی", + "compareTakeText": "گرفتن متن", + "compareTakeTiming": "گرفتن زمان‌بندی", + "compareEditLine": "ویرایش خط", + "compareEditHint": "Ctrl+Enter برای ذخیره، Esc برای لغو", + "compareEdited": "ویرایش‌شده", + "compareOnePendingChange": "۱ تغییر در انتظار", + "compareXPendingChanges": "{0} تغییر در انتظار", + "compareDiscardXChanges": "{0} تغییر انجام‌شده در مقایسه نادیده گرفته شود؟", + "compareXChangesApplied": "مقایسه: {0} تغییر اعمال شد", + "compareChangeTextX": "#{0} متن از مرجع", + "compareChangeTimingX": "#{0} زمان‌بندی از مرجع", + "compareChangeTextAndTimingX": "#{0} متن و زمان‌بندی از مرجع", + "compareChangeEditedX": "#{0} ویرایش شد", + "compareChangeInsertedX": "#{0} درج شد", + "compareChangeDeletedX": "#{0} حذف شد", + "compareSyncPoint": "نقطه همگام‌سازی", + "compareSyncPointHint": "نقطه همگام‌سازی - این دو خط همیشه به‌صورت یک جفت نمایش داده می‌شوند و خطوط بالا و پایین به‌طور جداگانه هم‌تراز می‌شوند", + "compareSyncPickCurrent": "نقطه همگام‌سازی: استفاده از این خط فعلی", + "compareSyncPickReference": "نقطه همگام‌سازی: استفاده از این خط مرجع", + "compareSyncRemove": "حذف نقطه همگام‌سازی", + "compareClearXSyncPoints": "پاک کردن نقاط همگام‌سازی ({0})", + "compareSyncCurrentPickedX": "خط فعلی #{0} به‌عنوان نقطه همگام‌سازی انتخاب شد - خط مرجع منطبق را انتخاب کرده و روی همگام‌سازی کلیک کنید", + "compareSyncReferencePickedX": "خط مرجع #{0} به‌عنوان نقطه همگام‌سازی انتخاب شد - خط فعلی منطبق را انتخاب کرده و روی همگام‌سازی کلیک کنید", + "compareSyncWithCurrentX": "همگام‌سازی با خط فعلی #{0}", + "compareSyncWithReferenceX": "همگام‌سازی با خط مرجع #{0}", + "compareSyncApply": "همگام‌سازی", + "compareSyncPointSetXY": "نقطه همگام‌سازی تنظیم شد: خط فعلی #{0} و خط مرجع #{1} اکنون به‌صورت یک جفت نمایش داده می‌شوند", + "compareSyncAlreadyPairedXY": "خط فعلی #{0} و خط مرجع #{1} از قبل با شروع یکسان به‌صورت یک جفت نمایش داده می‌شوند - چیزی برای همگام‌سازی وجود ندارد", + "compareSyncPointShiftedXYZW": "نقطه همگام‌سازی تنظیم شد: خطوط فعلی #{0}-#{1} به اندازه {2} جابجا شدند تا با خط مرجع #{3} شروع شوند", + "compareChangeSyncShiftXYZ": "#{0}-#{1} به اندازه {2} جابجا شد (نقطه همگام‌سازی)", + "compareTimingDeltaHint": "اینکه شروع و پایان مرجع چقدر دیرتر (+) یا زودتر (−) از خط فعلی است", "loadXFromFile": "بارگذاری «{0}» از فایل", + "compareLoadSavedFile": "بارگذاری فایل ذخیره‌شده", "saveCompareHtmlTitle": "ذخیره فایل HTML مقایسه", "pickMatroskaTrackX": "انتخاب ترک Matroska - {0}", "pickTransportStreamTrackX": "انتخاب ترک جریان انتقال - {0}", + "chapters": "فصل‌ها", + "dvdVobFilesMissingX": "فایل‌های VOB ناقص هستند ({0}٪ یافت شد)", "pickMp4TrackX": "انتخاب ترک MP4 - {0}", + "pickMxfTrackX": "انتخاب ترک MXF - {0}", + "pickMpegTrackX": "انتخاب ترک MPEG - {0}", "rosettaProperties": "ویژگی‌های Timed Text Rosetta IMSC", "rosettaFontSize": "اندازه فونت (ارتفاع ردیف)", "propertyTimeBase": "مبنای زمانی", @@ -1491,7 +1692,6 @@ "propertyDefaultRegion": "ناحیه پیش‌فرض", "propertyStyleAttributeName": "نام ویژگی سبک", "propertyTimeCodeFormat": "فرمت کد زمانی", - "propertyFileExtension": "پسوند فایل", "propertyTopOrigin": "مبدأ بالا", "propertyTopExtent": "گستره بالا", "propertyBottomOrigin": "مبدأ پایین", @@ -1557,24 +1757,23 @@ "findWhat": "عبارت مورد جستجو", "descriptionOptional": "توضیحات (اختیاری)", "invalidRegularExpressionX": "عبارت باقاعده نامعتبر: {0}", - "regularExpressionTooSlowX": "عبارت باقاعده پس از {0} ثانیه متوقف شد؛ قانون نادیده گرفته می‌شود. الگوی ساده‌تری را امتحان کنید" + "regularExpressionTooSlowX": "عبارت باقاعده پس از {0} ثانیه متوقف شد؛ قانون نادیده گرفته می‌شود. الگوی ساده‌تری را امتحان کنید", + "moveToCategory": "انتقال به دسته‌بندی" }, "find": { "searchTextWatermark": "جستجوی متن...", "wholeWord": "کل کلمه", - "caseSensitive": "حساس به حروف بزرگ و کوچک", - "caseInsensitive": "غیرحساس به حروف بزرگ و کوچک", "findPrevious": "یافتن قبلی", "findNext": "یافتن بعدی", "replaceAndFindNext": "جایگزینی و یافتن بعدی", "replaceAll": "جایگزینی همه", - "replaceTitle": "جایگزینی", - "replaceWith": "جایگزینی با", "replaceTextWatermark": "جایگزینی با...", "replaceIn": "جایگزینی/جستجو در", "replaceInTextAndOriginal": "متن و متن اصلی", "replaceInTextOnly": "فقط متن", - "replaceInOriginalOnly": "فقط متن اصلی" + "replaceInOriginalOnly": "فقط متن اصلی", + "replacedOneOccurrence": "یک مورد جایگزین شد", + "replacedXOccurrences": "{0} مورد جایگزین شد" }, "regularExpressionContextMenu": { "wordBoundary": "مرز کلمه (\\b)", @@ -1602,6 +1801,7 @@ "xLinesYSubtitles": "{0} خط، {1} زیرنویس", "xLinesYSubtitlesZErrors": "{0} خط، {1} زیرنویس، {2} خطا", "couldNotParseAsX": "تجزیه به‌عنوان {0} ممکن نبود", + "readAsXUseAsY": "منبع را نمی‌توان به‌صورت {1} خواند، اما می‌توان آن را به‌صورت {0} خواند.\nاز این خطوط استفاده شود و ذخیره‌سازی به‌صورت {1} ادامه یابد؟", "selectedXCharactersYLines": "انتخاب‌شده: {0} کاراکتر در {1} خط", "replacedXOccurrences": "تعداد {0} مورد جایگزین شد", "invalidRegularExpression": "عبارت با قاعده نامعتبر", @@ -1637,7 +1837,23 @@ "largeChangeWarning": "تغییر بزرگ - به نظر می‌رسد متن بازنویسی شده است؛ با دقت بررسی کنید", "mismatchWarning": "شباهتی به متن اصلی ندارد - ممکن است متعلق به خط دیگری باشد", "engineError": "دسترسی به موتور هوش مصنوعی امکان‌پذیر نبود: {0}", - "playCurrentLineHint": "خط انتخاب‌شده را در پخش‌کننده ویدیو پخش کنید و در انتهای آن مکث کنید (همچنین می‌توانید روی یک خط دوبار کلیک کنید)" + "playCurrentLineHint": "خط انتخاب‌شده را در پخش‌کننده ویدیو پخش کنید و در انتهای آن مکث کنید (همچنین می‌توانید روی یک خط دوبار کلیک کنید)", + "editAfterHint": "برای ویرایش اصلاحیه پیش از اعمال، روی متن ردیف انتخاب‌شده کلیک کنید (Enter ذخیره می‌کند، Escape لغو می‌کند)", + "template": "الگو", + "templatePlaceholder": "یک الگو برای جایگزینی پرامپت انتخاب کنید", + "templateStandard": "ویرایش و بازخوانی استاندارد", + "templateSpeechToText": "پاک‌سازی تبدیل گفتار به متن", + "templateMachineTranslation": "اصلاح ترجمه ماشینی", + "templateSdh": "SDH / ناشنوایان", + "referenceContext": "زمینه مرجع", + "referenceContextInfo": "اختیاری. نام‌ها، شخصیت‌ها، واژه‌نامه، خلاصه یا نکات سبک نگارش - مدل این را به‌عنوان مرجع معتبر برای نام‌ها و اصطلاحات در نظر می‌گیرد. همراه با هر دسته ارسال می‌شود.", + "referenceContextPlaceholder": "نام‌ها: کایتو، خاله مِی، دکتر هالیس\nاصطلاحات: شینکانسن، هسته وارپ\nخلاصه: کایتو برای یافتن پدر گمشده‌اش به توکیو سفر می‌کند.", + "generateContext": "تولید با هوش مصنوعی", + "generateContextHint": "اجازه دهید موتور هوش مصنوعی انتخاب‌شده زیرنویس را بخواند و پیش‌نویسی از نام‌ها، اصطلاحات و خلاصه تهیه کند - پیش از استفاده نتیجه را بررسی کنید", + "generatingContextPartXOfY": "در حال خواندن بخش {0} از {1}...", + "generatingContextSynopsis": "در حال نوشتن خلاصه...", + "replaceContextQuestion": "زمینه مرجع فعلی جایگزین شود؟", + "noContextGenerated": "موتور هوش مصنوعی هیچ اطلاعات مرجع قابل استفاده‌ای برنگرداند." }, "aiAssistant": { "title": "دستیار هوش مصنوعی", @@ -1683,6 +1899,7 @@ "removeLineBreaksPixelWidth": "تبدیل زیرنویس‌های قابل نمایش در یک خط به یک خط (بر اساس عرض پیکسلی)", "fixUppercaseIInsideLowercaseWords": "اصلاح «i» بزرگ در میان کلمات با حروف کوچک (خطای OCR)", "fixDoubleApostrophes": "تبدیل دو نویسه نقل‌قول تکی ('') به یک نقل‌قول (\")", + "fixMisreadQuotes": "اصلاح آپاستروف‌هایی که به‌اشتباه نقل‌قول دوتایی خوانده شده‌اند (OCR، انگلیسی)", "addPeriods": "افزودن نقطه در انتهای خطوطی که خط بعدی با حرف بزرگ شروع می‌شود", "startWithUppercaseLetterAfterParagraph": "شروع با حرف بزرگ پس از پاراگراف", "startWithUppercaseLetterAfterPeriodInsideParagraph": "شروع با حرف بزرگ پس از نقطه درون پاراگراف", @@ -1705,6 +1922,7 @@ "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Foo
bar! -> Foo bar!", "fixDoubleApostrophesExample": "''Has double single quotes'' -> \"Has single double quote\"", + "fixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "addPeriodsExample": "Hello world -> Hello world.", "startWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: Foobar!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Hello there! how are you? -> Hello there! How are you?", @@ -1784,7 +2002,6 @@ "adjustVia": "تنظیم از طریق", "recalculate": "محاسبه مجدد", "addSeconds": "افزودن ثانیه", - "setAsPercent": "تنظیم به عنوان درصدی از مدت زمان", "note": "نکته: زمان نمایش با زمان شروع متن بعدی تداخل نخواهد داشت", "fixed": "ثابت", "extendOnly": "فقط افزایش طول", @@ -1795,6 +2012,8 @@ "fixMinDurationMs": "اصلاح حداقل مدت‌زمان (میلی‌ثانیه)", "doNotGoPastShotChange": "از تغییر نما عبور نکن", "fixMaxDurationMs": "اصلاح حداکثر مدت‌زمان (میلی‌ثانیه)", + "fixMinDurationFrames": "اصلاح حداقل مدت زمان (فریم)", + "fixMaxDurationFrames": "اصلاح حداکثر مدت زمان (فریم)", "minimumDurationMilliseconds": "حداقل مدت‌زمان (میلی‌ثانیه):", "maximumDurationMilliseconds": "حداکثر مدت‌زمان (میلی‌ثانیه):", "maxDurationShouldBeHigherThanMinDuration": "حداکثر مدت‌زمان باید بیشتر از حداقل مدت‌زمان باشد", @@ -1844,13 +2063,80 @@ "timeCodesExtractFailed": "خواندن کدهای زمانی از ویدیو امکان‌پذیر نبود", "timeCodesHint": "زیرنویس‌ها را با زمان واقعی فریم‌های ویدیو هم‌تراز می‌کند، به‌جای اینکه نرخ فریم ثابت فرض شود. برای این کار باید کل ویدیو یک بار خوانده شود؛ نتیجه ذخیره و از آن استفاده می‌شود." }, + "improveTimeCodes": { + "title": "بهبود کدهای زمانی (هم‌ترازی اجباری)", + "aligner": "هم‌ترازکننده", + "alignerHint": "مدلی که به هر خط در صدا گوش می‌دهد. بهترین گزینه‌ها برای زبان زیرنویس در ابتدا فهرست شده‌اند.", + "maxShift": "حداکثر جابجایی (ثانیه)", + "maxShiftHint": "میزانی که زیرنویس ممکن است ناهمگام باشد. خطی که شروعش بیش از این جابجا شود، همان‌طور که هست باقی می‌ماند و علامت‌گذاری می‌شود. صرف‌نظر از این مقدار، خطی که بخواهد بیش از نیم ثانیه بیشتر از خطوط اطرافش جابجا شود، کورکورانه جابجا نمی‌شود: اگر همه خطوط مجاورش جابجا شده باشند از آن‌ها پیروی می‌کند، و در غیر این صورت بدون تیک برای بررسی شما ارائه می‌شود.", + "adjustStartTimes": "تنظیم زمان‌های شروع", + "adjustEndTimes": "تنظیم زمان‌های پایان", + "isolateSpeech": "ابتدا جداسازی گفتار (کند)", + "isolateSpeechHint": "پیش از هم‌ترازی، موسیقی و جلوه‌های صوتی را حذف می‌کند تا هم‌ترازکننده فقط دیالوگ را بشنود. برای خطوطی که روی موسیقی بلند یا صحنه‌های اکشن گفته می‌شوند مفید است، اما با GPU تقریباً به اندازه خود صدا طول می‌کشد - و بدون آن چندین برابر بیشتر.", + "isolatingSpeech": "در حال جداسازی گفتار... (این کار مدتی طول می‌کشد)", + "isolateSpeechFailed": "جداسازی گفتار ممکن نشد - به‌جای آن با صدای اصلی هم‌تراز شد.", + "checkWithSpeechToText": "بررسی با تبدیل گفتار به متن", + "checkWithSpeechToTextHint": "صدا را نیز رونویسی می‌کند و هر جابجایی را با محلی که کلمات واقعاً شنیده شده‌اند مقایسه می‌کند. جابجایی‌های بزرگی که گفتار تأیید می‌کند برای شما تیک می‌خورند، و جابجایی‌هایی که از محل شنیده شدن خط دور می‌شوند بدون تیک باقی می‌مانند تا آن‌ها را بررسی کنید. همچنین نشان می‌دهد چه مقدار از هر خط شنیده شده است - سهم کم یعنی متن با آنچه گفته می‌شود متفاوت است. زیرنویسی که بیش از حداکثر جابجایی ناهمگام باشد - یک اختلاف ثابت، رانش ناشی از عدم تطابق نرخ فریم، یا پرش در جاهایی که صحنه‌ها بریده شده‌اند - ابتدا بر اساس کلمات شنیده‌شده همگام‌سازی می‌شود. از Crisp ASR Parakeet استفاده می‌کند که برای یک فیلم بلند با GPU چند دقیقه طول می‌کشد.", + "checkWithSpeechToTextNotAvailableX": "بررسی با تبدیل گفتار به متن برای {0} در دسترس نیست", + "transcribingToCheck": "در حال رونویسی برای بررسی هم‌ترازی...", + "speechToTextFailed": "تبدیل گفتار به متن ناموفق بود - کدهای زمانی با آن بررسی نشدند.", + "speechToTextX": "تبدیل گفتار به متن: {0}", + "speechToTextConfirmedXDisputedY": "گفتار: {0} تأییدشده، {1} مورد اختلاف", + "hardlyHeardX": "تبدیل گفتار به متن فقط {0}٪ از کلمات زیرنویس را شنید. آیا زیرنویس به زبانی است که صحبت می‌شود؟ هم‌ترازکننده نمی‌تواند یک ترجمه را جای‌گذاری کند.", + "heard": "شنیده‌شده", + "heardHint": "اینکه تبدیل گفتار به متن چه مقدار از خط را شنیده است. سهم کم یعنی متن با آنچه گفته می‌شود متفاوت است - جایی که احتمال اشتباه هم‌ترازکننده بیشتر است.", + "statusConfirmedBySpeech": "تأییدشده توسط گفتار", + "statusDisputedBySpeech": "در محل قبلی شنیده شد", + "statusMovedWithSync": "همراه با همگام‌سازی جابجا شد", + "syncedFirstXY": "ابتدا همگام‌سازی شد: {0} ثانیه در ابتدا، {1} ثانیه در انتها", + "showSpeechOnly": "نمایش فقط گفتار", + "showSpeechOnlyHint": "شکل موج هم‌ترازشده را از صدایی که موسیقی و جلوه‌های صوتی آن حذف شده ترسیم کنید؛ شکل موج اصلی برای مقایسه همان‌طور باقی می‌ماند. پس از جداسازی گفتار در دسترس است - اینجا، یا با \"نمایش فقط گفتار\" در شکل موج پنجره اصلی.", + "align": "هم‌ترازی", + "original": "اصلی", + "aligned": "هم‌ترازشده", + "intro": "یک هم‌ترازکننده انتخاب کنید و \"هم‌ترازی\" را فشار دهید تا هر خط در صدا شنیده شده و کدهای زمانی آن دقیق‌تر شوند.", + "extractingAudio": "در حال استخراج صدا...", + "aligningBatchXOfY": "در حال هم‌ترازی... دسته {0} از {1}", + "extractAudioFailed": "استخراج صدا با ffmpeg ممکن نشد.", + "modelWillBeDownloaded": "{0} دانلود خواهد شد", + "summaryXRetimedYKeptZSkipped": "زمان‌بندی مجدد: {0} · حفظ‌شده: {1} · بدون گفتار: {2}", + "meanShiftX": "میانگین جابجایی: {0} میلی‌ثانیه", + "toCheckX": "برای بررسی: {0}", + "largeMovesToCheckX": "{0} خط به‌تنهایی جابجایی زیادی خواهند داشت و بدون تیک باقی مانده‌اند - به آن‌ها گوش دهید (F5 خط هم‌ترازشده و Shift+F5 خط اصلی را پخش می‌کند) و مواردی را که درست هستند تیک بزنید.", + "linesToCheckX": "{0} خط برای بررسی بدون تیک باقی مانده‌اند - به آن‌ها گوش دهید (F5 خط هم‌ترازشده و Shift+F5 خط اصلی را پخش می‌کند) و مواردی را که درست هستند تیک بزنید.", + "changeXOfY": "تغییر {0} از {1}", + "previousChange": "تغییر قبلی", + "nextChange": "تغییر بعدی", + "startShift": "شروع", + "endShift": "پایان", + "statusRetimed": "زمان‌بندی مجدد شد", + "statusMovedWithNeighbours": "همراه با خطوط مجاور جابجا شد", + "statusLargeMoveUnconfirmed": "جابجایی بزرگ - گوش دهید، برای اعمال تیک بزنید", + "statusUnchanged": "از قبل در جای خود", + "statusNoSpeech": "بدون گفتار", + "statusShiftTooLarge": "حفظ شد - جابجایی بیش از حد بزرگ", + "statusFailed": "حفظ شد - هم‌ترازکننده ناموفق بود", + "statusAdjustedByHand": "تنظیم دستی", + "alignedWaveformHint": "برای جابجایی یک خط آن را بکشید، یا لبه‌های آن را برای تغییر شروع یا پایان بکشید.", + "playLine": "پخش خط", + "undoAdjustment": "لغو تنظیم", + "playPause": "پخش / توقف موقت", + "playAligned": "هم‌ترازشده", + "playAlignedHint": "پخش خط انتخاب‌شده با کدهای زمانی هم‌ترازشده آن", + "apply": "اعمال", + "applyHint": "تیک یک خط را بردارید تا کدهای زمانی اصلی آن حفظ شود. برای پخش یک خط روی آن دوبار کلیک کنید. خطوط را می‌توان در شکل موج هم‌ترازشده نیز جابجا یا تغییر اندازه داد." + }, "beautifyTimeCodesProfile": { "title": "ویرایش پروفایل زیباسازی کدهای زمانی", "loadPreset": "بارگذاری پیش‌تنظیم", "presetDefault": "پیش‌فرض", "presetNetflix": "نتفلیکس", "presetSdi": "SDI", - "general": "عمومی", + "saveAsProfile": "ذخیره به‌عنوان پروفایل...", + "deleteProfile": "حذف پروفایل", + "profileName": "نام پروفایل", + "overwriteProfileX": "پروفایلی با نام \"{0}\" از قبل وجود دارد. بازنویسی شود؟", + "deleteProfileX": "پروفایل \"{0}\" حذف شود؟", "gap": "فاصله", "gapSuffix": "فریم (همچنین فیلدهای فاصله غیرصفر زیر را بروز می‌کند)", "milliseconds": "میلی‌ثانیه", @@ -1881,6 +2167,10 @@ "bridgeGaps": { "bridgeGapsSmallerThan": "پل زدن فاصله‌های کمتر از (میلی‌ثانیه)", "minGap": "حداقل فاصله (میلی‌ثانیه)", + "bridgeGapsSmallerThanFrames": "پل زدن فاصله‌های کمتر از (فریم)", + "minGapFrames": "حداقل فاصله (فریم)", + "calculateBridgeGapsSmallerThanDotDotDot": "محاسبه حد پل زدن فاصله از روی نرخ فریم...", + "useXMsAsBridgeGapsSmallerThan": "پل زدن فاصله‌های کمتر از \"{0}\" میلی‌ثانیه؟", "numberOfSmallGapsBridgedX": "تعداد فاصله‌های کوچک پل‌زده‌شده: {0}", "percentFoPrevious": "فاصله برای قبلی (%)", "gapChange": "تغییر فاصله" @@ -1914,6 +2204,7 @@ "addColor": "افزودن رنگ", "deleteLinesWithSpecificActorsOrStyles": "حذف خطوط دارای بازیگران یا سبک‌های مشخص (چند مورد را با ویرگول جدا کنید)", "useSourceStylesIfPossible": "در صورت امکان از سبک‌های منبع استفاده کن", + "keepSourceEmbeddedFonts": "حفظ فونت‌های جاسازی‌شده منبع (پانویس)", "editStyles": "ویرایش سبک‌ها", "editProperties": "ویرایش ویژگی‌ها", "editAttachments": "ویرایش پیوست‌ها", @@ -1945,13 +2236,52 @@ "convertColorsToDialogReBreakLines": "شکستن مجدد خطوط", "snapTimeCodesToFramesInfo": "زمان شروع و پایان هر زیرنویس را به نزدیک‌ترین فریم گرد می‌کند. نرخ فریم از فایل ویدیویی هم‌نام با فایل زیرنویس خوانده می‌شود، مگر اینکه نرخ فریم ثابت انتخاب شده باشد.", "addFolderDotDotDot": "افزودن پوشه...", + "addFolderRecursiveDotDotDot": "افزودن پوشه به‌صورت بازگشتی...", "selectFolderToConvert": "انتخاب پوشه حاوی فایل‌ها برای تبدیل", "includeSubfolders": "هنگام افزودن پوشه، زیرپوشه‌ها را نیز شامل کن", + "videoFilesWhenAddingFolder": "فایل‌های ویدئویی (mkv، mp4، ts...) هنگام افزودن پوشه", + "videoFilesAsk": "پرسیدن", + "videoFilesInclude": "افزودن ترک‌های زیرنویس آن‌ها", + "videoFilesSkip": "رد کردن", + "folderContainsXVideoFiles": "این پوشه شامل {0} فایل ویدئویی (mkv، mp4، ts...) است.\n\nترک‌های زیرنویس جاسازی‌شده آن‌ها نیز اضافه شوند، یا فقط فایل‌های زیرنویس؟", + "addVideoFiles": "افزودن فایل‌های ویدئویی", + "skipVideoFiles": "فقط فایل‌های زیرنویس", + "doNotAskAgainVideoFiles": "دوباره نپرس (قابل تغییر در تنظیمات تبدیل دسته‌ای)", + "settingsSectionOutput": "خروجی", + "settingsSectionAddingFiles": "افزودن فایل‌ها", + "settingsSectionImageBasedSubtitles": "زیرنویس‌های مبتنی بر تصویر (OCR)", + "settingsSectionOther": "سایر", "keepSourceFileTimestamp": "تاریخ/زمان فایل منبع را در فایل‌های خروجی حفظ کن", - "scanningFolderX": "در حال بررسی {0}..." + "preventSleepWhileConverting": "جلوگیری از به خواب رفتن رایانه هنگام تبدیل", + "scanningFolderX": "در حال بررسی {0}...", + "transportStreamSettings": "تنظیمات Transport Stream", + "transportStreamSettingsDotDotDot": "تنظیمات Transport Stream...", + "transportStreamSettingsInfo": "روی ترک‌های زیرنویس استخراج‌شده از فایل‌های Transport Stream (.ts/.m2ts) اعمال می‌شود. موقعیت و اندازه ویدئو فقط روی ترک‌های تصویری DVB که به یک قالب مبتنی بر تصویر صادر می‌شوند تأثیر دارند.", + "transportStreamOverrideXPosition": "جایگزینی موقعیت X اصلی", + "transportStreamOverrideYPosition": "جایگزینی موقعیت Y اصلی", + "transportStreamOverrideVideoSize": "جایگزینی اندازه ویدئوی اصلی", + "transportStreamBottomMargin": "حاشیه پایین", + "transportStreamFileNameEnding": "پایان نام فایل", + "transportStreamFileNameEndingInfo": "برای هر ترک استخراج‌شده پیش از پسوند اضافه می‌شود. برای استفاده از پسوند زبان معمول، خالی بگذارید.", + "transportStreamOnlyTeletext": "فقط تله‌تکست", + "transportStreamGetSizeFromVideo": "دریافت اندازه از ویدئو...", + "twoLetterLanguageCodeUppercase": "کد زبان دوحرفی (حروف بزرگ)", + "threeLetterLanguageCodeUppercase": "کد زبان سه‌حرفی (حروف بزرگ)", + "formatContainsDotDotDot": "قالب شامل...", + "extensionIsDotDotDot": "پسوند برابر با...", + "statusIsError": "وضعیت خطا است", + "forcedTracksOnly": "فقط ترک‌های اجباری", + "xConvertedYFailedInZ": "{0:#,###,##0} تبدیل شد، {1:#,###,##0} ناموفق در {2}", + "xNotProcessed": "{0:#,###,##0} پردازش نشد", + "removeUnicodeControlCharactersTitle": "حذف کاراکترهای کنترلی یونیکد", + "removeUnicodeControlCharactersInfo": "کاراکترهای نامرئی کنترل جهت یونیکد (LRM، RLM، LRE، RLE، PDF، LRO و RLO) را از متن حذف می‌کند و فاصله‌های بدون شکست را با فاصله‌های معمولی جایگزین می‌کند.", + "preset": "پیش‌تنظیم", + "savePresetDotDotDot": "ذخیره پیش‌تنظیم...", + "deletePreset": "حذف پیش‌تنظیم", + "presetName": "نام پیش‌تنظیم", + "deletePresetX": "پیش‌تنظیم \"{0}\" حذف شود؟" }, "changeCasing": { - "title": "تغییر وضعیت حروف (بزرگی/کوچکی)", "fixNames": "اصلاح نام‌ها", "namesX": "نام‌ها: {0:#,##0}", "hitsX": "موارد یافت‌شده: {0:#,##0}", @@ -2034,10 +2364,13 @@ }, "mergeLinesWithSameText": { "maxMsBetweenLines": "حداکثر میلی‌ثانیه بین خطوط", - "includeIncrementingLines": "شامل شدن خطوط با متن افزایشی" + "maxFramesBetweenLines": "حداکثر فریم بین خطوط", + "includeIncrementingLines": "شامل شدن خطوط با متن افزایشی", + "includeRollUpCaptions": "شامل زیرنویس‌های رول‌آپ (پیمایشی)" }, "mergeLinesWithSameTimeCodes": { "maxMsDifference": "حداکثر تفاوت (میلی‌ثانیه)", + "maxFramesDifference": "حداکثر تفاوت (فریم)", "makeDialog": "تبدیل به دیالوگ" }, "netflixCheckAndFix": { @@ -2060,7 +2393,6 @@ "shotChanges": "تغییرات نما", "startNumberSpellOut": "حروف‌نویسی عدد در شروع خط", "textforHiUseBrackets": "متن مخصوص کم‌شنوایان (HI)، استفاده از کروشه", - "frameRate": "نرخ فریم", "twoFrameGrap": "فاصله دو فریم", "whiteSpace": "فضای خالی", "childrensProgram": "برنامه کودک", @@ -2098,7 +2430,6 @@ "italicsFixed": "ایتالیک اصلاح شد", "italicsNotAllowed": "ایتالیک مجاز نیست", "bridgeGapsXToYFrames": "فاصله 3 تا {0} فریم => تبدیل به فاصله 2 فریم", - "startNumberSpellOutComment": "هنگامی که یک جمله با عدد شروع می‌شود، عدد باید همیشه به صورت حروفی نوشته شود", "maximumXCharactersPerSecond": "حداکثر {0} کاراکتر در ثانیه" }, "imageBasedEdit": { @@ -2107,10 +2438,8 @@ "resizeImagesDotDotDot": "تغییر اندازه تصاویر...", "adjustBrightnessDotDotDot": "تنظیم روشنایی...", "adjustAlphaDotDotDot": "تنظیم کانال آلفا (شفافیت)...", - "centerHorizontally": "وسط‌چین کردن افقی", "cropImages": "برش تصاویر (Crop)", "importTimeCodes": "وارد کردن کدهای زمانی...", - "setTextForSubtitle": "تنظیم متن برای زیرنویس", "setText": "تنظیم متن", "screenWidth": "عرض صفحه", "screenHeight": "ارتفاع صفحه", @@ -2141,12 +2470,29 @@ "letterboxCustom": "ارتفاع نوار سفارشی", "barHeightPx": "ارتفاع نوار (پیکسل)", "titleSafePercent": "محدوده امن عنوان (%)", + "moveCaptions": "جابجایی زیرنویس‌ها", + "moveCaptionsDotDotDot": "جابجایی زیرنویس‌ها...", + "moveCaptionsTo": "جابجایی زیرنویس‌ها", + "moveCaptionsIntoBars": "به داخل نوارهای لترباکس (خارج از تصویر)", + "moveCaptionsIntoPicture": "به داخل تصویر (خارج از نوارها)", + "moveCaptionsOffset": "فاصله از لبه (px)", + "letterboxBarHeightXPxYOfZCaptionsWillMove": "ارتفاع نوار: {0} px - {1} از {2} زیرنویس جابجا خواهند شد", + "removeFadeInOut": "حذف ظهور/محو شدن تدریجی", + "removeFadeInOutXLinesRemoved": "{0} خط محو شدن با خطوطی که به آن‌ها تعلق دارند ادغام شد", + "removeFadeInOutNothingFound": "هیچ خط ظهور/محو شدن تدریجی یافت نشد", "positionSummary": "{0}×{1} - {2} زیرنویس - ارتفاع نوار: {3} پیکسل", "xInActivePicture": "{0} در تصویر اصلی", "xInTopBar": "{0} در نوار بالا", "xInBottomBar": "{0} در نوار پایین", "noImageSubtitlesLoaded": "هیچ زیرنویس تصویری بارگذاری نشده است", - "imageBasedFormatNotSupported": "فرمت زیرنویس مبتنی بر تصویر یافت نشد/پشتیبانی نمی‌شود." + "imageBasedFormatNotSupported": "فرمت زیرنویس مبتنی بر تصویر یافت نشد/پشتیبانی نمی‌شود.", + "frameRateDeclaredInFile": "نرخ فریم اعلام‌شده در فایل sup بلوری", + "frameRateDetectedFromTimeCodesX": "نرخ فریم تشخیص داده‌شده از کدهای زمانی sup بلوری (فایل {0} را اعلام می‌کند)", + "frameRateFromVideo": "نرخ فریم ویدئو", + "frameRateCurrent": "نرخ فریم فعلی", + "frameRateSetManually": "نرخ فریم تنظیم‌شده به‌صورت دستی", + "frameRateUsageInfo": "خروجی‌های Blu-ray sup، BDN XML، DOST و FCP با این نرخ فریم نوشته می‌شوند. این گزینه هیچ زمانی را تغییر نمی‌دهد - برای آن از \"تغییر نرخ فریم\" استفاده کنید.", + "useVideoFrameRateXInsteadOfY": "نرخ فریم ویدئو {0} است، اما زیرنویس روی {1} تنظیم شده است.\n\nاز نرخ فریم ویدئو ({0}) استفاده شود؟" }, "removeTextForHearingImpaired": { "interjections": "اصوات نواخت‌ها و میان‌افکندها", @@ -2176,6 +2522,7 @@ "pickFontNameInstalledFonts": "فونت های نصب شده", "pickFontNameCollectedFonts": "فونت‌های جمع‌آوری‌شده", "colorPickerTitle": "انتخاب رنگ", + "colorPickerBrightness": "روشنایی", "filterLayersTitle": "فیلتر کردن لایه‌ها برای نمایش", "filterLayersHideFromWaveform": "پنهان کردن از شکل موج/اسپکتروگرام", "filterLayersHideFromSubtitleGrid": "پنهان کردن از جدول زیرنویس", @@ -2226,7 +2573,21 @@ "correctWordsX": "کلمات صحیح: {0}", "namesX": "نام‌ها: {0}", "addedToDictionaryX": "اضافه شده به دیکشنری: {0}", - "doNotShowThisAgain": "این پیام دوباره نشان داده نشود" + "doNotShowThisAgain": "این پیام دوباره نشان داده نشود", + "editUseAlwaysList": "ویرایش فهرست \"همیشه استفاده شود\"...", + "useAlwaysListTitle": "بررسی املایی - فهرست \"همیشه استفاده شود\"", + "useAlwaysListHeader": "فهرست \"همیشه استفاده شود\"", + "useAlwaysListDescription": "کلماتی که بررسی املایی به‌طور خودکار جایگزین می‌کند و با \"تغییر همه\" و \"همیشه استفاده شود\" ذخیره شده‌اند. یک جفت فقط زمانی استفاده می‌شود که کلمه غلط املایی داشته باشد.", + "useAlwaysWord": "کلمه غلط املایی", + "xPairs": "{0:#,##0} جفت", + "xUnusedPairs": "{0:#,##0} هرگز استفاده نشده", + "useAlwaysUnusedHint": "هرگز استفاده نشده - این کلمه درست نوشته شده است (یا یک نام یا کلمه کاربر است)، بنابراین بررسی املایی هرگز آن را علامت‌گذاری نمی‌کند", + "removeUnused": "حذف موارد استفاده‌نشده", + "useAlwaysEmpty": "هنوز هیچ جفت \"همیشه استفاده شود\" برای این زبان وجود ندارد", + "useAlwaysEmptyHint": "جفت‌ها زمانی اضافه می‌شوند که در بررسی املایی روی \"تغییر همه\" یا \"همیشه استفاده شود\" کلیک کنید.", + "useAlwaysNoMatch": "هیچ جفتی با جستجو مطابقت ندارد", + "useAlwaysSameWord": "جایگزین باید با کلمه متفاوت باشد.", + "useAlwaysRememberOff": "\"به‌خاطر سپردن فهرست 'همیشه استفاده شود'\" در تنظیمات خاموش است، بنابراین بررسی املایی از این فهرست استفاده نمی‌کند و آن را ذخیره نمی‌کند." }, "video": { "burnIn": { @@ -2239,6 +2600,7 @@ "sampleRate": "نرخ نمونه‌برداری", "audio": "صدا", "preset": "پیش‌تنظیم", + "tune": "تنظیم دقیق (Tune)", "pixelFormat": "فرمت پیکسل", "crf": "CRF", "useSource": "استفاده از منبع", @@ -2250,7 +2612,9 @@ "outputProperties": "ویژگی‌های خروجی...", "videoFileSize": "حجم فایل ویدیو", "oneBox": "یک کادر", - "logoInfo": "یک تصویر PNG انتخاب کنید و آن را برای تعیین موقعیت روی ویدیو بکشید (Drag)." + "logoInfo": "یک تصویر PNG انتخاب کنید و آن را برای تعیین موقعیت روی ویدیو بکشید (Drag).", + "noSubtitlesGenerateAnyway": "هیچ خط زیرنویسی برای چسباندن وجود ندارد.\n\nویدئو بدون زیرنویس تولید شود؟", + "noSubtitlesInXItemsGenerateAnyway": "{0} مورد دسته‌ای هیچ خط زیرنویسی برای چسباندن ندارند.\n\nآن ویدئوها بدون زیرنویس تولید شوند؟" }, "videoTransparent": { "title": "تولید ویدیوی شفاف همراه با زیرنویس" @@ -2261,6 +2625,21 @@ "translateToEnglish": "ترجمه به انگلیسی", "transcribing": "در حال پیاده‌سازی متن...", "transcribingXOfY": "در حال پیاده‌سازی {0} از {1}...", + "linesTranscribedXOfYFailedZ": "{0} از {1} خط رونویسی شدند - {2} مورد ناموفق بودند یا گفتاری نداشتند.\n\nخطوط ناموفق متن فعلی خود را حفظ می‌کنند. خطوط رونویسی‌شده اعمال شوند، یا خطوط ناموفق دوباره امتحان شوند (می‌توانید ابتدا موتور یا تنظیمات را تغییر دهید)؟", + "linesTranscribedXOfYCancelled": "رونویسی پس از {0} از {1} خط لغو شد.\n\nخطوط رونویسی‌شده اعمال شوند؟ سایر خطوط متن فعلی خود را حفظ می‌کنند.", + "noLinesTranscribed": "هیچ‌یک از {0} خط رونویسی نشد.\nلطفاً برای جزئیات، فایل گزارش ابزارها را بررسی کنید.", + "applyTranscribedLines": "اعمال رونویسی‌شده‌ها", + "retryFailedLines": "تلاش مجدد ناموفق‌ها", + "isolateSpeech": "جداسازی گفتار (کند)", + "isolateSpeechHint": "پیش از رونویسی، موسیقی و جلوه‌های صوتی را حذف می‌کند. خطوط از دست رفته کمتر و زمان‌بندی بهتری در صداهای دارای موسیقی بلند به دست می‌دهد، اما با GPU تقریباً به اندازه خود صدا طول می‌کشد - و بدون آن چندین برابر بیشتر.", + "isolatingSpeech": "در حال جداسازی گفتار...", + "isolateSpeechFailed": "جداسازی گفتار ممکن نشد - به‌جای آن صدای اصلی رونویسی می‌شود.", + "detectSpeakers": "تشخیص گویندگان", + "detectSpeakersHint": "هر خط را با نام گوینده شروع می‌کند، مانند \"(speaker 0)\"، با استفاده از تفکیک گوینده Sortformer انویدیا (تا ۸ گوینده). با موتورهایی که خطوط را در محل تغییر گوینده تقسیم می‌کنند، مانند Parakeet و Cohere، بهترین عملکرد را دارد.", + "detectSpeakersNeedsNewerCrispAsr": "\"تشخیص گویندگان\" به Crisp ASR نسخه v{0} یا جدیدتر نیاز دارد، اما v{1} نصب شده است.\n\nCrisp ASR را به‌روزرسانی کنید (دکمه چرخ‌دنده کنار موتور) یا \"تشخیص گویندگان\" را خاموش کنید.", + "xNeedsNewerCrispAsr": "{0} به Crisp ASR نسخه v{1} یا جدیدتر نیاز دارد، اما v{2} نصب شده است.\n\nبه‌روزرسانی اکنون دانلود و نصب شود؟", + "vad": "VAD", + "vadHint": "تشخیص فعالیت صوتی: فقط گفتار رونویسی می‌شود و در جاهایی که گوینده مکث می‌کند بریده می‌شود.\nخودکار: Silero، و فقط برای موتورهایی که به آن نیاز دارند (Cohere، Mega، Index-Echo).\nSilero، FireRedVAD، Whisper-VAD، WebRTC: همیشه فعال، برای همه موتورهای Crisp ASR. FireRedVAD دقیق‌ترین است، Whisper-VAD کمترین و تمیزترین برش‌ها را می‌دهد اما کندترین است.\nIndex-Echo همیشه از Silero استفاده می‌کند. --vad، --vad-model یا --chunk-seconds در تنظیمات پیشرفته اولویت دارند.", "inputLanguage": "زبان ورودی", "advancedWhisperSettings": "پارامترهای پیشرفته گفتار به متن", "downloadingSpeechToTextEngine": "در حال دانلود موتور گفتار به متن", @@ -2344,6 +2723,19 @@ "videoEncodingSettings": "TTS - تنظیمات رمزگذاری ویدیو", "elevenLabsSettings": "TTS - تنظیمات ElevenLabs", "elevenLabsSettingsResetHint": "بازنشانی تنظیمات ElevenLabs به مقادیر پیش‌فرض", + "provider": "ارائه‌دهنده", + "openAiCompatibleSettings": "TTS - تنظیمات سازگار با OpenAI", + "customServerUrl": "URL سرور سفارشی", + "customServerUrlHint": "نقطه پایانی کامل گفتار یک سرور سازگار با OpenAI، که وقتی ارائه‌دهنده \"سفارشی\" است استفاده می‌شود، مثلاً http://localhost:8880/v1/audio/speech", + "customModels": "مدل‌های سفارشی", + "customModelsHint": "نام مدل‌ها با جداکننده کاما که وقتی ارائه‌دهنده \"سفارشی\" است ارائه می‌شوند", + "customVoices": "صداهای سفارشی", + "customVoicesHint": "نام صداها با جداکننده کاما، که توسط ارائه‌دهنده \"سفارشی\" و مدل‌های OpenRouter که فهرست صدا منتشر نمی‌کنند استفاده می‌شوند", + "instructions": "دستورالعمل‌ها", + "instructionsHint": "سبک گفتار اختیاری، مثلاً \"با صدایی آرام و گرم صحبت کن\". فقط به مدل‌هایی ارسال می‌شود که از آن پشتیبانی می‌کنند (نه tts-1/tts-1-hd)", + "openAiSpeedHint": "سرعت گفتار از 0.25 تا 4.0 (1.0 معمولی است). همه مدل‌ها از آن پشتیبانی نمی‌کنند", + "outputFormat": "قالب خروجی", + "outputFormatHint": "قالب صوتی درخواستی از سرور. \"خودکار\" MP3 درخواست می‌کند و برای مدل‌هایی که فقط PCM برمی‌گردانند (مثلاً Gemini TTS) به PCM تغییر می‌کند", "regenerateAudio": "تولید مجدد صدا", "autoContinuePlaying": "ادامه پخش خودکار", "playLine": "پخش خط", @@ -2352,6 +2744,13 @@ "addingAudioToVideoFileDotDotDot": "در حال افزودن صدا به فایل ویدیو...", "preparingMergeDotDotDot": "در حال آماده‌سازی ادغام...", "importVoiceDotDotDot": "وارد کردن صدا...", + "renameVoiceDotDotDot": "تغییر نام صدا...", + "renameVoiceTitle": "تغییر نام صدا", + "voiceXCouldNotBeRenamedX": "تغییر نام صدای '{0}' ممکن نشد: {1}", + "deleteVoiceDotDotDot": "حذف صدا...", + "deleteVoiceTitle": "حذف صدا", + "deleteVoiceXQuestion": "صدای '{0}' حذف شود؟\n\nفایل ضبط مرجع و فایل‌های آن از دیسک حذف می‌شوند.", + "voiceXCouldNotBeDeletedX": "حذف صدای '{0}' ممکن نشد: {1}", "voiceImportSuccessTitle": "صدا وارد شد", "voiceXImported": "صدا «{0}» با موفقیت وارد شد", "voiceXCouldNotBeImported": "صدا «{0}» قابل وارد کردن نبود - برای جزئیات گزارش را ببینید", @@ -2361,6 +2760,49 @@ "dropAudioFileHereToImportVoice": "برای وارد کردن صدا، فایل صوتی را اینجا رها کنید", "dropAudioFileHereHint": ".wav یا .mp3", "voiceCloneTranscriptTitle": "متن رونویسی فایل صوتی را وارد کنید (برای شبیه‌سازی صدا الزامی است)", + "voiceManagerTitle": "TTS - مدیر صداها", + "voiceManagerDotDotDot": "مدیر صداها...", + "voiceManagerMenuItem": "مدیر صداهای TTS...", + "speakFromCurrentLineTitle": "خواندن از خط فعلی", + "speakFromCurrentLineDotDotDot": "خواندن از خط فعلی...", + "speakFromCurrentLineHint": "خطوط را یکی پس از دیگری با صدای بلند می‌خواند و از خط فعلی شروع می‌کند. برای توقف، Escape را فشار دهید یا روی خط دیگری کلیک کنید.", + "stopSpeaking": "توقف خواندن", + "speakingLineX": "در حال خواندن خط {0}... (Escape برای توقف)", + "playWithSpeechTitle": "پخش همراه با گفتار", + "playWithSpeechDotDotDot": "پخش همراه با گفتار...", + "playWithSpeechHint": "ویدئو را پخش می‌کند و هر خط را وقتی ویدئو به آن می‌رسد می‌خواند. مانند همیشه توقف موقت و جستجو کنید؛ برای توقف Escape را فشار دهید.", + "lowerVideoVolumeWhileSpeaking": "کاهش صدای ویدئو هنگام خواندن", + "pauseVideoWhenSpeechRunsLate": "توقف موقت ویدئو وقتی گفتار به خط بعدی می‌رسد", + "waitingForSpeechLineX": "در حال تولید گفتار برای خط {0}... (Escape برای توقف)", + "voiceKindClone": "صدای شبیه‌سازی‌شده", + "voiceKindPreset": "داخلی", + "voiceKindModel": "مدل صدا", + "voiceKindOnline": "آنلاین", + "transcript": "متن پیاده‌شده", + "transcriptRequiredHint": "الزامی - موتور هنگام شبیه‌سازی این متن پیاده‌شده از فایل ضبط (ref-text) را می‌خواند", + "transcriptOptionalHint": "اختیاری - متن پیاده‌شده دقیق از فایل ضبط، شبیه‌سازی را بهبود می‌دهد", + "saveTranscript": "ذخیره متن پیاده‌شده", + "searchVoices": "جستجوی صداها", + "loadingVoicesDotDotDot": "در حال بارگذاری صداها...", + "noVoicesForEngine": "هیچ صدایی وجود ندارد - یک فایل ضبط وارد کنید یا یک بسته صدا دانلود کنید", + "noVoicesMatchFilter": "هیچ صدایی با جستجو مطابقت ندارد", + "copyVoiceTo": "کپی صدا به", + "copyVoiceToDotDotDot": "کپی صدا به موتور...", + "copyingVoiceXToYDotDotDot": "در حال کپی صدای '{0}' به {1}...", + "voiceXCopiedToY": "صدای '{0}' به {1} کپی شد", + "voiceXCouldNotBeCopiedToY": "کپی صدای '{0}' به {1} ممکن نشد - برای جزئیات گزارش را ببینید", + "voiceXAlreadyExistsInYContinue": "صدایی با نام '{0}' از قبل در {1} وجود دارد.\n\nبه هر حال کپی شود؟", + "openVoicesFolder": "باز کردن پوشه صداها", + "downloadVoicePacksDotDotDot": "دانلود بسته‌های صدا...", + "downloadVoicePacksTitle": "TTS - دانلود بسته‌های صدا", + "voicePackIntro": "بسته‌های صدا مجموعه‌هایی از فایل‌های ضبط کوتاه و تمیز همراه با متن پیاده‌شده هستند که آماده شبیه‌سازی‌اند. هر بسته در موتور انتخاب‌شده وارد می‌شود (صداهایی که از قبل وجود دارند رد می‌شوند) و شامل یک فایل ATTRIBUTION.txt با مجوز و منابع آن است.", + "voicePackDetailsXVoicesYSizeZLicense": "{0} صدا · {1} · {2}", + "installToEngine": "نصب در موتور", + "downloadAndInstall": "دانلود و نصب", + "selectAtLeastOneVoicePack": "حداقل یک بسته صدا انتخاب کنید", + "downloadingXDotDotDot": "در حال دانلود {0}...", + "installingXDotDotDot": "در حال نصب {0}...", + "xVoicesInstalledYSkipped": "{0} صدا نصب شد ({1} مورد از قبل وجود داشت)", "useSpeechToTextDotDotDot": "استفاده از تبدیل گفتار به متن...", "autoCastMenuItem": "یافتن صداها در ویدیو و شبیه‌سازی...", "autoCastSpeakersTitle": "صداهای یافت‌شده در ویدیو", @@ -2379,7 +2821,7 @@ "cloneVoicePerLinePreparing": "در حال استخراج صدای هر خط از ویدیو...", "cloneVoicePerLineNeedsVideo": "برای شبیه‌سازی صدای هر خط، ویدیویی که زیرنویس به آن تعلق دارد لازم است. ویدیو را باز کنید و دوباره امتحان کنید.", "cloneVoicePerLineNoClips": "هیچ صدایی از ویدیو قابل استخراج نبود، بنابراین چیزی برای شبیه‌سازی وجود ندارد. بررسی کنید که ویدیو دارای ترک صوتی باشد.", - "cloneVoicePerLineNeedsOriginalSubtitleX": "{0} تنها زمانی می‌تواند یک خط را شبیه‌سازی کند که بداند در ویدئو در آن خط چه گفته می‌شود، و این اطلاعات از زیرنویس زبان اصلی به دست می‌آید. هیچ زیرنویس اصلی بارگذاری نشده است، بنابراین همه خطوط به‌جای صدای موجود در ویدئو با نخستین صدای وارد‌شده خوانده می‌شوند.\n\nزیرنویس اصلی را در کنار ترجمه باز کنید (فایل > باز کردن فایل اصلی...) و سپس دوباره تولید کنید.", + "cloneVoicePerLineTranscribeClipsXYZ": "{0} فقط زمانی می‌تواند یک خط را شبیه‌سازی کند که بداند در آن خط چه چیزی در ویدئو گفته می‌شود. این موضوع برای {1} از {2} خط مشخص نیست - معمولاً از زیرنویس زبان اصلی به دست می‌آید (فایل > باز کردن نسخه اصلی...).\n\nاکنون آن خطوط از ویدئو با تبدیل گفتار به متن رونویسی شوند؟\n\nبله: موتور و زبان گفته‌شده در ویدئو را انتخاب کنید تا کلیپ‌های مرجع پیش از تولید گفتار رونویسی شوند.\nخیر: به هر حال تولید شود - آن خطوط به‌جای صدای موجود در ویدئو با یک صدای معمولی خوانده می‌شوند.", "voiceCloneConsentTitle": "شبیه‌سازی صدا - پیش از شروع", "voiceCloneConsentHeader": "شما در آستانه شبیه‌سازی یک صدا هستید", "voiceCloneConsentIntro": "شبیه‌سازی صدا، صدای یک فرد واقعی را کپی می‌کند. این کار در بیشتر کشورها مشمول قوانین خاصی است و در اتحادیه اروپا تعهدات قانونی آن بر عهده شماست، نه Subtitle Edit. لطفاً این متن را یک بار مطالعه کنید.", @@ -2396,10 +2838,29 @@ "advancedTtsSettings": "تنظیمات پیشرفته TTS", "advancedTtsAudioProcessing": "پردازش صدا", "advancedTtsOutput": "خروجی", + "advancedTtsVoiceCloning": "شبیه‌سازی صدا", + "cleanCloneReferences": "پاک‌سازی مراجع شبیه‌سازی صدا (Sidon)", + "cleanCloneReferencesDescription": "موسیقی، نویز و پژواک را از صدایی که صدا از آن شبیه‌سازی می‌شود حذف می‌کند: کلیپ‌های گرفته‌شده از ویدئو و فایل‌های ضبط واردشده در مدیر صداها. از مدل بازسازی گفتار Sidon روی audio.cpp استفاده می‌کند (دانلود ۹۴۰ مگابایت). صدای شبیه‌سازی‌شده دیگر پس‌زمینه را کپی نمی‌کند، اما گفتار بسیار آرام یا هم‌پوشان ممکن است گرفته شنیده شود.", + "cleaningCloneReferencesDotDotDot": "در حال پاک‌سازی مراجع شبیه‌سازی صدا...", + "downloadSidonTitle": "Sidon دانلود شود؟", + "downloadSidonQuestionX": "پاک‌سازی مراجع شبیه‌سازی صدا به مدل بازسازی گفتار Sidon ({0}) نیاز دارد.\n\nاکنون دانلود شود؟ بدون آن، مراجع همان‌طور که هستند استفاده می‌شوند.", "proAudioPostProcessing": "پس‌پردازش حرفه‌ای صدا", "proAudioPostProcessingDescription": "گرمای اکولایزر، دروازه نویز، فشرده‌سازی، نرمال‌سازی بلندی صدا (۱۶- LUFS) و محو شدن تدریجی ابتدا/انتها را روی هر بخش اعمال می‌کند.", + "generatingSpeechSegmentXOfY": "در حال تولید گفتار: بخش {0} از {1}", + "adjustingSpeedSegmentXOfY": "در حال تنظیم سرعت: بخش {0} از {1}", + "mergingAudioSegmentXOfY": "در حال ادغام صدا: بخش {0} از {1}", + "postProcessingSegmentXOfY": "پس‌پردازش: بخش {0} از {1}", "audioDucking": "کاهش خودکار صدای پس‌زمینه", "audioDuckingDescription": "صدای ویدیوی اصلی را کاهش داده و آن را با صدای TTS میکس می‌کند تا موسیقی یا صدای اصلی همچنان به‌صورت ضعیف قابل شنیدن باشد.", + "removeOriginalSpeech": "حذف گفتار اصلی (کند)", + "removeOriginalSpeechDescription": "موسیقی و جلوه‌های صوتی ویدئوی اصلی را نگه می‌دارد اما گفتار آن را حذف می‌کند و گفتار جدید را روی آن میکس می‌کند. با GPU تقریباً به اندازه خود ویدئو طول می‌کشد و بدون آن چندین برابر بیشتر. با فعال بودن کاهش خودکار صدای پس‌زمینه، میزان صدای آن روی موسیقی و جلوه‌ها اعمال می‌شود. فقط زمانی اعمال می‌شود که گفتار به فایل ویدئو اضافه شود.", + "removingOriginalSpeech": "در حال حذف گفتار اصلی...", + "removeOriginalSpeechFailed": "حذف گفتار اصلی ممکن نشد - گفتار بدون آن به ویدئو اضافه شد.", + "speechRemovalModel": "مدل", + "speechRemovalModelDescription": "بهترین کیفیت بیشترین مقدار موسیقی و جلوه‌های صوتی را حفظ می‌کند. سریع حدود سه برابر سریع‌تر است، با کمی از دست رفتن بیشتر موسیقی.", + "speechRemovalBestQuality": "بهترین کیفیت (Mel-Band RoFormer)", + "speechRemovalFast": "سریع (HTDemucs)", + "videoTruncatedWarning": "تصویر در فایل ویدئویی جدید پس از {0} متوقف می‌شود، اما ویدئوی اصلی {1} طول دارد - تصویر ثابت می‌ماند در حالی که صدا ادامه دارد.\n\nفایل حفظ شد. برای خروجی ffmpeg، فایل error-log.txt را در پوشه داده‌های Subtitle Edit ببینید.", "originalVolumePercent": "درصد صدای اصلی", "vadSilenceCompression": "فشرده‌سازی سکوت با VAD", "vadSilenceCompressionDescription": "پیش از تغییر سرعت، مکث‌های بین کلمات را کوتاه می‌کند. با استفاده از تشخیص فعالیت صوتی، فقط فاصله‌های سکوت را فشرده می‌کند و گفتار را دست‌نخورده نگه می‌دارد. این روش اولین مرحله پیشنهادی است - مدت‌زمان را بدون افت کیفیت کاهش می‌دهد.", @@ -2482,7 +2943,9 @@ "timeCodeFormatColon": "فرمت کد زمانی:", "shotChangesList": "لیست تغییرات نما", "shotChangesClearQuestion": "آیا مطمئن هستید که می‌خواهید تمام تغییرات نما را پاک کنید؟", - "deleteSelectedShotChangeQuestion": "آیا مطمئن هستید که می‌خواهید تغییر نمای انتخاب‌شده را حذف کنید؟" + "deleteSelectedShotChangeQuestion": "آیا مطمئن هستید که می‌خواهید تغییر نمای انتخاب‌شده را حذف کنید؟", + "shotChanges": "تغییرات پلان", + "exportShotChanges": "صدور تغییرات پلان" }, "chapters": { "title": "فصل‌ها", @@ -2512,7 +2975,6 @@ "scaleTimesDescription": "زمان تمام فصل‌ها را از یک نرخ فریم به نرخ فریم دیگری تبدیل می‌کند.", "fromFrameRate": "از", "toFrameRate": "به", - "apply": "اعمال", "writeToVideo": "نوشتن در ویدیو...", "writeToVideoTitle": "نوشتن فصل‌ها در ویدیو", "writeToVideoDescription": "فصل‌ها در یک نسخه کپی از فایل ویدیو نوشته می‌شوند. هیچ رمزگذاری مجددی انجام نمی‌شود، بنابراین این فرایند سریع و بدون افت کیفیت است.", @@ -2522,7 +2984,6 @@ "writtenToX": "فصل‌ها در {0} نوشته شدند", "unableToWriteChapters": "امکان نوشتن فصل‌ها در فایل ویدیو وجود ندارد.", "chaptersSavedToX": "فصل‌ها در {0} ذخیره شدند", - "noVideoLoaded": "هیچ ویدیویی بارگذاری نشده است", "emptyListCallToAction": "هنوز فصلی وجود ندارد - یک فصل در موقعیت فعلی ویدیو اضافه کنید یا فصل‌ها را از یک ویدیو یا فایل وارد کنید." }, "videoOcr": { @@ -2547,10 +3008,10 @@ "runningOcrXY": "در حال اجرای OCR... {0}/{1}", "noLinesFoundTitle": "هیچ زیرنویسی یافت نشد", "noLinesFoundMessage": "هیچ متنی در ناحیه اسکن یافت نشد - تنظیم ناحیه اسکن، موتور یا حداقل روشنایی را تغییر دهید.", + "ocrStoppedEarlyMessage": "موتور OCR پیش از خواندن همه فریم‌ها متوقف شد، بنابراین خطوطی که تاکنون یافت شده‌اند حفظ می‌شوند و بقیه موجود نیستند.{0}{0}{1}", "linesFoundX": "{0} خط یافت شد", "refiningTimingXY": "در حال بهینه‌سازی زمان‌بندی... {0}/{1}", "fixOcrErrors": "اصلاح خطاهای OCR", - "dictionary": "فرهنگ لغت", "editLineX": "ویرایش خط {0}", "downloadDictionaryHint": "دانلود فرهنگ لغت بررسی املا...", "framesPerSecondHint": "تعداد فریم‌هایی که در هر ثانیه بررسی می‌شوند. مقدار ۵ برای زیرنویس‌های معمولی مناسب است؛ مقادیر بالاتر خطوط بسیار کوتاه را بهتر تشخیص می‌دهند و گروه‌بندی را دقیق‌تر می‌کنند، اما زمان OCR بیشتری می‌گیرند.", @@ -2567,7 +3028,58 @@ "testOcr": "آزمایش فریم فعلی", "testOcrRunning": "در حال آزمایش OCR روی فریم فعلی...", "testOcrResultX": "نتیجه آزمایش: {0}", - "testOcrNoTextFound": "آزمایش: هیچ متنی در ناحیه اسکن یافت نشد" + "testOcrNoTextFound": "آزمایش: هیچ متنی در ناحیه اسکن یافت نشد", + "engineSettings": "تنظیمات موتور OCR", + "engineBuiltIn": "داخلی سیستم‌عامل", + "engineExternalServer": "سرور خارجی (نصب و مدیریت‌شده خارج از Subtitle Edit)", + "engineCloudApi": "API ابری (نیازمند کلید API)", + "engineNothingToInstall": "چیزی برای نصب وجود ندارد", + "engineModelsMissing": "موتور نصب شده، مدل‌ها موجود نیستند", + "website": "وب‌سایت" + }, + "backgroundMusic": { + "title": "تولید موسیقی پس‌زمینه", + "generateBackgroundMusicDotDotDot": "تولید موسیقی پس‌زمینه...", + "preset": "پیش‌تنظیم", + "prompt": "پرامپت", + "tempoBpm": "تمپو (BPM)", + "generateSeconds": "تولید (ثانیه)", + "seed": "Seed", + "randomSeed": "تصادفی", + "outputLength": "طول خروجی", + "outputLengthVideoX": "{0} (طول ویدئو - موسیقی به‌صورت یکپارچه تکرار می‌شود)", + "musicVolumePercent": "میزان صدای موسیقی (%)", + "removeExistingAudioTracks": "حذف ترک‌های صوتی موجود", + "originalAudioVolumePercent": "میزان صدای اصلی (%)", + "saveAudioDotDotDot": "ذخیره صدا...", + "addToVideoDotDotDot": "افزودن به ویدئو...", + "engineInfo": "ACE-Step 1.5 Turbo از طریق audio.cpp (مجوز MIT) - به‌صورت محلی اجرا می‌شود", + "presetCooking": "آشپزی / شیرینی‌پزی", + "presetTech": "فناوری / بررسی گجت", + "presetForest": "جنگل / طبیعت", + "presetRelaxingPiano": "پیانوی آرامش‌بخش", + "presetLofiVlog": "ولاگ Lo-fi", + "presetCorporate": "سازمانی / توضیحی", + "loadingModel": "در حال بارگذاری مدل...", + "composing": "در حال آهنگ‌سازی...", + "generatingAudio": "در حال تولید صدا...", + "decodingAudio": "در حال رمزگشایی صدا...", + "creatingLoop": "در حال ساخت حلقه یکپارچه...", + "resultLoopXYZ": "حلقه: {0} با {1} BPM، تطابق محل اتصال {2}٪", + "resultNoLoopX": "موسیقی آماده است: {0}", + "addingMusicToVideo": "در حال افزودن موسیقی به ویدئو...", + "downloadModelTitle": "مدل موسیقی دانلود شود؟", + "downloadModelQuestionX": "تولید موسیقی به مدل ACE-Step 1.5 ({0}) نیاز دارد.\n\nمدل دانلود شود؟", + "downloadingModel": "در حال دانلود مدل ACE-Step 1.5...", + "saveAudioTitle": "ذخیره موسیقی پس‌زمینه", + "audioFileSavedX": "فایل صوتی ذخیره شد: {0}", + "unableToGenerateMusic": "تولید موسیقی ممکن نیست", + "unableToAddMusicToVideo": "افزودن موسیقی به ویدئو ممکن نیست", + "outputLengthTextToSpeech": "از گفتار تولیدشده پیروی می‌کند - موسیقی به‌صورت یکپارچه تکرار می‌شود و هنگام صحبت کسی صدایش کم می‌شود", + "addBackgroundMusic": "افزودن موسیقی پس‌زمینه", + "addBackgroundMusicHint": "موسیقی را به‌صورت محلی با ACE-Step 1.5 تولید کرده و زیر گفتار میکس کنید - هنگام صحبت کسی صدایش کم می‌شود", + "generatingBackgroundMusicDotDotDot": "در حال تولید موسیقی پس‌زمینه...", + "mixingBackgroundMusicDotDotDot": "در حال میکس موسیقی پس‌زمینه..." }, "goToVideoPosition": "رفتن به موقعیت ویدیو", "goToVideoPositionDotDotDot": "رفتن به موقعیت ویدیو...", @@ -2578,10 +3090,47 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "باز کردن زیرنویس دوم در پخش‌کننده ویدیو...", "openSecondarySubtitleOnVideoPlayer": "زیرنویس دوم (در پخش‌کننده ویدیو)", "removeSecondarySubtitleOnVideoPlayer": "حذف زیرنویس دوم از پخش‌کننده ویدیو", + "editSecondarySubtitleSettings": "ویرایش تنظیمات زیرنویس دوم", + "editSecondarySubtitleSettingsDotDotDot": "ویرایش تنظیمات زیرنویس دوم...", + "secondarySubtitleRememberSettings": "به‌خاطر سپردن این تنظیمات", + "secondarySubtitleDoNotShowAgain": "این پنجره دیگر نمایش داده نشود", + "secondarySubtitleJustifyLines": "تراز دوطرفه خطوط", "openRecentVideo": "باز کردن ویدئوی اخیر", "clearRecentVideos": "پاک کردن ویدئوهای اخیر", "cutVideoTitle": "برش ویدیو", "cutVideoDotDotDot": "برش ویدیو...", + "remuxVideoTitle": "ریماکس ویدئو", + "remuxVideoDotDotDot": "ریماکس ویدئو...", + "remuxVideoInputVideo": "ویدئوی ورودی:", + "remuxVideoMultipleTracksRequiresMkv": "چند ترک صوتی یا زیرنویس به کانتینر MKV نیاز دارند. قالب خروجی به‌طور خودکار به .mkv تغییر یافت.", + "remuxVideoOutputFormat": "قالب خروجی:", + "remuxVideoOutputFile": "فایل خروجی:", + "remuxVideoRemuxing": "در حال ریماکس ویدئو و صدا...", + "remuxVideoFinalizing": "در حال نهایی‌سازی فایل خروجی (انتقال ایندکس به ابتدا)...", + "remuxVideoCompleted": "ویدئو با موفقیت ریماکس شد.", + "remuxVideoFailed": "ریماکس ویدئو ناموفق بود.", + "remuxVideoPleaseSelectBoth": "لطفاً هر دو فایل ویدئو و صدا را انتخاب کنید.", + "remuxVideoAssRequiresMkv": "زیرنویس‌های ASS/SSA برای حفظ همه قالب‌بندی‌ها و استایل‌ها به کانتینر MKV نیاز دارند.", + "remuxVideoSccRequiresMov": "زیرنویس‌های Scenarist (.scc) به‌صورت زیرنویس بسته CEA-608 جاسازی می‌شوند که به کانتینر MOV یا MPG نیاز دارند. قالب خروجی به‌طور خودکار به .mov تغییر یافت.", + "remuxVideoSccNotWithWebM": "زیرنویس‌های بسته Scenarist (.scc) به کانتینر MOV نیاز دارند که نمی‌تواند ویدئوی VP9/AV1 یک فایل .webm را نگه دارد. فایل .scc را حذف کنید یا آن را به قالب زیرنویس دیگری تبدیل کنید.", + "remuxVideoMpgMaxTwoCaptionTracks": "یک فایل .mpg حداکثر دو ترک زیرنویس بسته (CC1 و CC3) نگه می‌دارد - فایل‌های زیرنویس را حذف کنید تا یک یا دو مورد باقی بماند.", + "remuxVideoMccRequiresMpg": "زیرنویس‌های MacCaption (.mcc) به‌صورت زیرنویس بسته CEA-608/708 در ویدئوی MPEG-2 جاسازی می‌شوند که به کانتینر MPG نیاز دارد. قالب خروجی به‌طور خودکار به .mpg تغییر یافت.", + "remuxVideoMpgReencodeVideoX": "زیرنویس‌های بسته در یک فایل .mpg به ویدئوی MPEG-2 نیاز دارند، و ویدئو {0} است. ویدئو مجدداً به MPEG-2 رمزگذاری شود؟ این کار زمان بیشتری می‌برد و کیفیت را کمی کاهش می‌دهد.", + "remuxVideoFileHasNoAudioX": "\"{0}\" ترک صوتی ندارد، بنابراین نمی‌توان از آن به‌عنوان منبع صدا استفاده کرد.", + "remuxVideoAddingClosedCaptions": "در حال افزودن زیرنویس‌های بسته...", + "remuxVideoSelectAudioTrack": "انتخاب ترک صوتی", + "remuxVideoSelectAudioTrackFor": "انتخاب ترک صوتی برای {0}", + "remuxVideoSelectAudioTrackPrompt": "فایل '{0}' شامل {1} ترک صوتی است. لطفاً ترک صوتی را برای ریماکس انتخاب کنید:", + "remuxVideoVideoFile": "ویدئو", + "remuxVideoAudioFile": "صدا", + "remuxVideoAudioFiles": "فایل‌های صوتی:", + "remuxVideoSubtitleFiles": "فایل‌های زیرنویس (اختیاری، زیرنویس نرم):", + "remuxVideoSelectAudioTrackDotDotDot": "انتخاب ترک صوتی...", + "remuxVideoFilesX": "{0} فایل", + "remuxVideoMixAudio": "میکس صدا در یک ترک", + "remuxVideoVolumePercent": "میزان صدا %:", + "remuxVideoVolumeX": "میزان صدا {0}%", + "remuxVideoFastStart": "بهینه‌سازی برای پخش آنلاین وب (انتقال ایندکس به ابتدا - کندتر)", "embedSubtitlesDotDotDot": "افزودن/حذف زیرنویس‌های تعبیه‌شده...", "generateTimeCodes": "تولید کدهای زمانی", "checkeredImage": "تصویر شطرنجی", @@ -2591,6 +3140,34 @@ "cutVideoSplitSegments": "ذخیره جداگانه بخش‌ها", "cutVideoAlsoCutSubtitle": "برش زیرنویس نیز", "cutVideoSubtitleFileGeneratedX": "فایل زیرنویس ایجاد شد: {0}", + "cutVideoTransition": "انتقال بین بخش‌ها", + "cutVideoTransitionDurationSeconds": "مدت زمان (ثانیه)", + "cutVideoFadeInSeconds": "ظهور تدریجی از سیاه در ابتدا (ثانیه)", + "cutVideoFadeOutSeconds": "محو شدن به سیاه در انتها (ثانیه)", + "cutVideoPreviewTransition": "پیش‌نمایش انتقال", + "cutVideoPreviewTransitionTitle": "پیش‌نمایش انتقال", + "cutVideoPreviewNeedsJoin": "هیچ اتصالی برای پیش‌نمایش وجود ندارد - حداقل دو بخش برای ادغام، یا یک بخش برای برش از وسط اضافه کنید.", + "cutVideoTransitionInfoX": "هر انتقال با بخش‌هایی که به هم وصل می‌کند هم‌پوشانی دارد، بنابراین خروجی به ازای هر اتصال {0} ثانیه کوتاه‌تر می‌شود. زیرنویس برش‌خورده برای تطابق زمان‌بندی مجدد می‌شود.", + "cutVideoTransitionFade": "محو شدن", + "cutVideoTransitionFadeBlack": "محو شدن از طریق سیاه", + "cutVideoTransitionFadeWhite": "محو شدن از طریق سفید", + "cutVideoTransitionFadeGrays": "محو شدن از طریق خاکستری", + "cutVideoTransitionDissolve": "حل شدن", + "cutVideoTransitionWipeLeft": "پاک شدن به چپ", + "cutVideoTransitionWipeRight": "پاک شدن به راست", + "cutVideoTransitionWipeUp": "پاک شدن به بالا", + "cutVideoTransitionWipeDown": "پاک شدن به پایین", + "cutVideoTransitionSlideLeft": "لغزش به چپ", + "cutVideoTransitionSlideRight": "لغزش به راست", + "cutVideoTransitionSlideUp": "لغزش به بالا", + "cutVideoTransitionSlideDown": "لغزش به پایین", + "cutVideoTransitionSmoothLeft": "نرم به چپ", + "cutVideoTransitionSmoothRight": "نرم به راست", + "cutVideoTransitionCircleOpen": "باز شدن دایره‌ای", + "cutVideoTransitionCircleClose": "بسته شدن دایره‌ای", + "cutVideoTransitionRadial": "شعاعی", + "cutVideoTransitionPixelize": "پیکسلی", + "cutVideoTransitionBlur": "تاری", "importCurrentSubtitle": "وارد کردن زیرنویس فعلی", "addRemoveEmbeddedSubtitlesTitle": "افزودن/حذف زیرنویس‌های تعبیه‌شده", "addRemoveEmbeddedSubtitlesMp4Title": "افزودن/حذف زیرنویس‌های تعبیه‌شده (MP4)", @@ -2606,6 +3183,7 @@ "embeddedTrackGeneratingVideoXY": "در حال تولید ویدیو... {0}% {1}", "embeddedTrackGeneratingVideo": "در حال تولید ویدیو...", "mp4FilesFilter": "فایل‌های MP4", + "embeddedTracksPickVideoHint": "برای دیدن ترک‌های زیرنویس یک فایل ویدئویی، آن را انتخاب کنید یا اینجا رها کنید.", "viewMatroskaTrackX": "مشاهده ترک Matroska - {0}", "resolutionSeparator": "x", "openFromUrlTitle": "باز کردن فایل ویدیو از URL", @@ -2652,12 +3230,15 @@ "reEncodeGeneratingDone": "تولید به پایان رسید", "reEncodeGeneratedFilesX": "فایل‌های تولیدشده ({0}):", "reEncodeFfmpegParameters": "پارامترهای ffmpeg", + "analyzingVideoX": "در حال تحلیل ویدئو... {0}% {1}", + "analyzingVideoXofY": "در حال تحلیل ویدئو {0}/{1}... {2}% {3}", + "backgroundImageFileNotSelected": "فایل تصویر پس‌زمینه انتخاب نشده است", + "backgroundImageFileDoesNotExistX": "فایل تصویر پس‌زمینه وجود ندارد: {0}", "voices": "صداها", "presets": "پیش‌تنظیم‌ها", "talkerX": "گوینده {0}", "baseModel": "مدل پایه", "turboModel": "مدل توربو", - "ttsUpdateX": "به‌روزرسانی {0}", "ttsEngineNotInstalled": "{0} نصب نشده است", "ttsEngineUpdateAvailable": "{0} - به‌روزرسانی موجود است", "ttsEngineTooOldUpdateRequired": "{0} بیش‌ازحد قدیمی است - به‌روزرسانی لازم است", @@ -2680,9 +3261,17 @@ "cloneVoiceTo": "کلون کردن صدا به", "cloneVoiceNameTitle": "نام صدای جدید", "cloneVoiceExtractFailed": "امکان استخراج صدا برای خط انتخاب‌شده وجود ندارد.", + "lineXHasNoDuration": "خط {0} مدت زمان ندارد (زمان پایان بعد از زمان شروع نیست)، بنابراین صدایی برای استخراج وجود ندارد.", + "audioClipsSkippedLinesX": "هیچ صدایی برای این خطوط استخراج نشد، بنابراین رد شدند: {0}", "toggleShotChange": "فعال/غیرفعال کردن تغییر نما", "resetWaveformZoomAndSpeed": "بازنشانی بزرگ‌نمایی و سرعت موج صدا", "showOriginalSubtitle": "نمایش زیرنویس اصلی", + "timelineGroupTracksBy": "گروه‌بندی ترک‌های زیرنویس بر اساس", + "timelineShowThumbnails": "نمایش تصاویر بندانگشتی ویدئو", + "showSpeechOnly": "نمایش فقط گفتار (تولید کند)", + "isolatingSpeechForWaveformX": "در حال جداسازی گفتار برای شکل موج... {0}", + "isolatingSpeechForWaveformFailed": "جداسازی گفتار برای شکل موج ممکن نشد - فایل گزارش ابزارها را ببینید", + "speechOnlyWaveformReady": "شکل موج اکنون فقط گفتار را نشان می‌دهد", "showOnlyWaveform": "فقط نمایش موج صدا", "showOnlySpectrogram": "فقط نمایش طیف‌نگار", "showWaveformAndSpectrogram": "نمایش موج صدا و طیف‌نگار", @@ -2715,6 +3304,7 @@ "adjustSelectedLinesAndForward": "تنظیم خطوط انتخاب‌شده و به بعد", "toFrameRate": "به نرخ فریم", "fromFrameRate": "از نرخ فریم", + "videoXFrameRateY": "{0} - {1} fps", "adjustAllTimes": "تنظیم همه زمان‌ها (جلو/عقب بردن زیرنویس)", "showEarlier": "نمایش زودتر (عقب بردن زمان)", "showLater": "نمایش دیرتر (جلو بردن زمان)", @@ -2724,9 +3314,8 @@ "syncPoints": "نقاط همگام‌سازی", "pointSync": "همگام‌سازی نقطه‌ای", "pointSyncViaOther": "همگام‌سازی نقطه‌ای از طریق زیرنویس دیگر", - "adjustmentX": "تعدیل: {0}", - "totalAdjustmentX": "تعدیل کل: {0}", - "syncPointCandidateInfo": "خطوطی که پس از {0} ثانیه یا بیشتر سکوت آغاز می‌شوند برجسته شده‌اند - این خطوط اغلب نقاط همگام‌سازی قابل اعتمادی هستند", + "syncPointCandidateAfterInfo": "خطوطی که پس از آن‌ها {0}+ ثانیه سکوت وجود دارد هایلایت شده‌اند - این خطوط اغلب نقاط همگام‌سازی قابل اعتمادی هستند", + "gapAfter": "فاصله بعد", "adjustAllShortcuts": "میانبرهای کیبورد:\r\n\r\n• Shift + چپ/راست: جابجایی ۱۰ میلی‌ثانیه\r\n• Ctrl + چپ/راست: جابجایی ۱۰۰ میلی‌ثانیه\r\n• Alt + چپ/راست: جابجایی ۵۰۰ میلی‌ثانیه", "adjustAllShortcutsFrames": "میانبرهای کیبورد:\r\n\r\n• Shift + چپ/راست: جابجایی ۱ فریم\r\n• Ctrl + چپ/راست: جابجایی ۱۰ فریم\r\n• Alt + چپ/راست: جابجایی ۱ ثانیه", "offsetInSeconds": "آفست به ثانیه", @@ -2746,6 +3335,7 @@ "lineMerge": "ادغام خطوط", "delayInSecondsBetweenRequests": "تاخیر به ثانیه بین درخواست‌ها", "maxBytesPerRequest": "حداکثر بایت در هر درخواست", + "keepMusicLinesUntranslated": "خطوط داخل نمادهای موسیقی (♪ ... ♪) ترجمه نشوند", "promptText": "متن پرامپت", "resetPromptToDefault": "بازنشانی پرامپت به حالت پیش‌فرض", "translateEachLineSeparately": "ترجمه هر خط به‌صورت جداگانه", @@ -2759,11 +3349,10 @@ "readyToTranslate": "آماده ترجمه", "translating": "در حال ترجمه...", "translationComplete": "ترجمه کامل شد", + "translateInPlaceNoOriginal": "ترجمه در محل (بدون ایجاد نسخه اصلی)", "translationCancelled": "ترجمه لغو شد", "swapLanguages": "جابه‌جایی زبان مبدأ و مقصد", "xIsAlreadyDownloadedReDownload": "{0} قبلاً دانلود شده است. دوباره دانلود شود؟", - "advancedDotDotDot": "پیشرفته...", - "advancedSettings": "تنظیمات پیشرفته", "advancedSettingsSubtitle": "گزینه‌های دسته‌ای، زمینه و نمونه‌برداری برای موتور پیشرفته llama.cpp", "context": "زمینه", "synopsis": "خلاصه", @@ -2787,6 +3376,7 @@ "useOnlyExtraServerParametersHint": "llama-server را با پارامترهای بالا اجرا می‌کند و تنظیمات اختصاصی Subtitle Edit را نادیده می‌گیرد - فقط مدل، میزبان و پورت همچنان تنظیم می‌شوند", "serverRunningAtX": "سرور در {0} در حال اجرا است", "customPromptHint": "دستورالعمل‌های سفارشی ({0} = زبان مبدأ، {1} = زبان مقصد)؛ خالی = پرامپت داخلی", + "editTranslationHint": "برای ویرایش ترجمه ردیف انتخاب‌شده، روی آن کلیک کنید (Enter ذخیره می‌کند، Escape لغو می‌کند)", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp به موتور llama-server و یک مدل ترجمه نیاز دارد که دانلود شوند. اکنون دانلود شوند؟", "llamaCppDownloadEnginePrompt": "llama.cpp به موتور llama-server نیاز دارد که دانلود شود. اکنون دانلود شود؟", "llamaCppDownloadModelPrompt": "llama.cpp به مدل ترجمه انتخاب‌شده نیاز دارد که دانلود شود. اکنون دانلود شود؟" @@ -2857,6 +3447,7 @@ "showGridLines": "نمایش خطوط جدول", "showHorizontalLineAboveToolbar": "نمایش خط افقی بالای نوار ابزار", "bookmarkColor": "رنگ نشانک", + "spellCheckHighlightColor": "رنگ هایلایت بررسی املایی", "singleLineMaxLength": "حداکثر طول یک خط", "optimalCharsPerSec": "تعداد بهینه نویسه در ثانیه", "maxCharsPerSec": "حداکثر نویسه در ثانیه", @@ -2881,13 +3472,21 @@ "useDoNotBreakAfterList": "استفاده از فهرست «پس از این موارد نشکن»", "newEmptyDefaultMs": "مدت پیش‌فرض زیرنویس جدید (میلی‌ثانیه)", "timeCodeUpDownStepMs": "مقدار تغییر زمان با بالا/پایین (میلی‌ثانیه)", + "moveSelectedLinesStepMs": "گام میانبر جابجایی خطوط انتخاب‌شده (میلی‌ثانیه)", + "moveStartEndStepMs": "گام میانبر جابجایی شروع/پایان (میلی‌ثانیه)", + "moveLinesShortenNeighbor": "جابجایی خطوط: کوتاه کردن خط قبلی/بعدی به‌جای هم‌پوشانی با آن", "promptBeforeDelete": "پرسش پیش از حذف", "rememberPositionAndSize": "به‌خاطر سپردن موقعیت و اندازه پنجره", + "titleBarFullFileName": "نمایش مسیر کامل فایل در نوار عنوان", + "showRecentFiles": "نمایش فایل‌های اخیر (برای باز کردن مجدد)", "openLastFileOnStart": "باز کردن آخرین فایل اخیر هنگام شروع", "autoSave": "ذخیره خودکار (ذخیره فایل باز هنگام ویرایش)", "autoBackupOn": "پشتیبان‌گیری خودکار", "autoBackupIntervalMinutes": "فاصله پشتیبان‌گیری خودکار (دقیقه)", "autoBackupDeleteAfterDays": "نگهداری پشتیبان خودکار (روز)", + "settingsBackupOn": "پشتیبان‌گیری خودکار از تنظیمات", + "settingsBackupIntervalDays": "فاصله پشتیبان‌گیری از تنظیمات (روز، ۰ = هر بار شروع)", + "settingsBackupMaxCount": "تعداد نسخه‌های پشتیبان تنظیمات برای نگهداری", "autoConvertToUtf8": "تبدیل خودکار رمزگذاری به UTF-8 هنگام باز کردن", "autoTrimWhiteSpace": "حذف خودکار فاصله‌های اضافی", "removeBlankLinesWhenOpening": "حذف خطوط خالی هنگام باز کردن زیرنویس", @@ -2904,7 +3503,10 @@ "colorGapTooShort": "رنگی کردن اگر فاصله خیلی کوتاه باشد", "errorBackgroundColor": "رنگ پس‌زمینه خطا", "waveformDrawGridLines": "رسم خطوط شبکه", + "waveformUseSkiaRenderer": "استفاده از رندرکننده سریع آزمایشی", "waveformCenterVideoPositionAlsoWhenPaused": "مرکز کردن موقعیت ویدیو حتی هنگام توقف", + "waveformSelectCurrentSubtitleWhilePaused": "انتخاب زیرنویس فعلی حتی هنگام توقف موقت", + "waveformRememberZoom": "به‌خاطر سپردن بزرگ‌نمایی (افقی و عمودی)", "waveformShowToolbar": "نمایش نوار ابزار", "waveformShowToolbarEdit": "ویرایش نوار ابزار...", "waveformShowToolbarEditLabel": "موارد نوار ابزار", @@ -2952,18 +3554,25 @@ "webVttUseXTimestampMap": "WebVTT: استفاده از X-TIMESTAMP-MAP (جابجایی کدهای زمانی هنگام بارگذاری)", "assaAutoSetResolution": "ASSA: تنظیم رزولوشن (PlayResX/PlayResY) بر اساس ویدئو هنگام باز شدن ویدئو", "assaAutoSetResolutionPrompt": "ASSA: پیش از تغییر رزولوشن برای تطبیق با ویدئو پرسیده شود (در غیر این صورت به‌صورت خودکار بازنمونه‌برداری می‌شود)", - "showStopButton": "نمایش دکمه توقف", - "showFullscreenButton": "نمایش دکمه تمام‌صفحه", + "videoControls": "کنترل‌های ویدئو", + "videoControlsEdit": "ویرایش کنترل‌های ویدئو...", + "videoControlsPositionText": "متن موقعیت / مدت زمان", + "videoControlsVideoFileName": "نام فایل ویدئو", + "videoControlsPlayerName": "نام پخش‌کننده ویدئو", "fullscreenHideControls": "پنهان کردن کنترل‌های ویدیو در حالت تمام‌صفحه", + "showSecondarySubtitleDialog": "نمایش پنجره استایل هنگام باز کردن فایل زیرنویس دوم", + "rememberSecondarySubtitleFile": "به‌خاطر سپردن فایل زیرنویس دوم", "autoOpenVideoFile": "باز کردن خودکار فایل ویدیو هنگام باز کردن زیرنویس", "downloadMpv": "دانلود mpv", "downloadVlc": "دانلود VLC", "allowSingleLetterShortcutsInTextbox": "اجازه میانبرهای تک‌حرفی در کادر متن", + "allowTextNavigationShortcutsInTextbox": "اجازه میانبر روی کلیدهای پیمایش متن (Ctrl+چپ/راست، Home/End) در جعبه متن", "spellCheckEnglishTreatInApostropheAsIng": "غلط‌یابی: در انگلیسی، کلمات پایان‌یافته به 'in'' را مانند 'ing' در نظر بگیر", "goToLineNumberSetsVideoPosition": "رفتن به شماره خط، موقعیت ویدیو را نیز تنظیم کند", "adjustAllTimesRememberLineSelectionChoice": "تنظیم همه زمان‌ها، به‌خاطر سپردن انتخاب خط", "mergeKeepEndTime": "ادغام خطوط: حفظ زمان پایان (اجازه هم‌پوشانی با زیرنویس بعدی)", "mergeKeepEndTimeOnlyAssa": "ادغام خطوط: حفظ زمان پایان فقط برای «Advanced Sub Station Alpha»", + "mergeAutoBreak": "ادغام خطوط: شکست خودکار متن ادغام‌شده (خاموش، شکست‌های خط خود خطوط را حفظ می‌کند)", "filesAndLogs": "فایل‌ها و گزارش‌ها", "showErrorLogFile": "نمایش فایل گزارش خطا", "showToolsLogFile": "نمایش فایل گزارش ابزارها", @@ -2972,6 +3581,7 @@ "showAssaLayer": "نمایش کادر لایه ASSA", "waveformCursorColor": "رنگ مکان‌نما/سر موج‌نما", "waveformShotChangeColor": "رنگ تغییر نما در موج‌نما", + "waveformGridColor": "رنگ شبکه شکل موج", "waveformParagraphLeftColor": "رنگ حاشیه چپ موج‌نما", "waveformParagraphRightColor": "رنگ حاشیه راست موج‌نما", "waveformFancyHighColor": "رنگ بخش بالای فانتزی موج‌نما", @@ -2999,10 +3609,15 @@ "resetSyntaxColoring": "بازنشانی رنگ‌بندی نحوی", "resetWaveform": "بازنشانی موج‌نما", "resetRules": "بازنشانی قوانین", - "useFrameMode": "استفاده از حالت فریم (hh.mm.ss.ff)", + "timeCodeMode": "حالت کد زمانی", + "timeCodeModeTime": "زمان (hh:mm:ss,zzz)", + "timeCodeModeFrames": "فریم‌ها (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "شماره فریم‌ها", + "frameModeSnapToVideoFrames": "ذخیره زمان‌ها روی فریم‌های ویدئو (نه فریم‌های درون هر ثانیه)", "textBoxLimitNewLines": "محدود کردن تعداد خطوط در کادر متن زیرنویس", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - رندر نرم‌افزاری (کند)", + "mpvMetalRendering": "libmpv - Metal (آزمایشی، نیازمند راه‌اندازی مجدد)", "mpvWidRendering": "libmpv - رندر با شناسه بومی پنجره", "waveFormsAndSpectrogramFoldersContainsX": "پوشه‌های «Waveforms» و «spectrogram» شامل {0} هستند", "deleteWaveformAndSpectrogramFoldersQuestion": "فایل‌های «Waveforms» و «Spectrogram» حذف شوند؟", @@ -3015,7 +3630,10 @@ "waveformExtractAudioSampleRate": "نرخ نمونه‌برداری صدای استخراج‌شده", "waveformExtractAudioSampleRateOriginal": "اصلی (حفظ منبع)", "waveformExtractAudioBitRate": "نرخ بیت صدای استخراج‌شده (MP3/M4A)", + "ffmpegUseCenterChannelOnly": "استفاده فقط از کانال مرکزی جلو برای صدای 5.1 (FFmpeg)", "vlcWidRendering": "libVLC - رندر با شناسه بومی پنجره", + "ffmpegSoftwareRendering": "FFmpeg", + "downloadFfmpegLibs": "دانلود کتابخانه‌های FFmpeg (برای پخش‌کننده ویدئوی FFmpeg)", "subtitleGridEnterKeyAction": "عملکرد کلید Enter در جدول زیرنویس", "subtitleSingleClickAction": "عملکرد تک‌کلیک در جدول زیرنویس", "subtitleDoubleClickAction": "عملکرد دوبارکلیک در جدول زیرنویس", @@ -3043,6 +3661,7 @@ "subtitleGridFormattingShowFormatting": "نمایش قالب‌بندی", "subtitleGridFormattingShowTags": "نمایش تگ‌ها", "subtitleGridFormattingHideTags": "پنهان کردن تگ‌ها", + "subtitleGridFormattingShowFormattingKeepTags": "نمایش قالب‌بندی، حفظ تگ‌های غیربصری", "waveformParagraphBackgroundColor": "رنگ پس‌زمینه زیرنویس در موج‌نما", "waveformParagraphSelectedBackgroundColor": "رنگ پس‌زمینه زیرنویس انتخاب‌شده در موج‌نما", "waveformAllowOverlap": "اجازه هم‌پوشانی (هنگام جابه‌جایی/تغییر اندازه)", @@ -3058,9 +3677,12 @@ "splitOddLinesAction": "عملکرد تقسیم خطوط فرد", "ocrUseWordSplitList": "OCR: استفاده از فهرست تقسیم کلمات", "ocrGuessUnknownWords": "OCR: تلاش برای حدس زدن کلمات ناشناخته", + "spellCheckRememberUseAlwaysList": "بررسی املایی: به‌خاطر سپردن فهرست \"همیشه استفاده شود\"", + "fixShortDisplayTimesAllowMoveStartTime": "اصلاح خطاهای رایج: اصلاح زمان‌های نمایش کوتاه ممکن است زمان شروع را جابجا کند", "speechToTextSelectedLinesPromptFirstTimeOnly": "گفتار به متن: خطوط انتخاب‌شده، پرسش زبان/موتور فقط بار اول", "multipleReplaceShowDotDotDotButtons": "جایگزینی چندگانه: نمایش دکمه‌های منوی زمینه", "gridFocusTextboxAfterInsertNew": "جدول: تمرکز روی کادر متن پس از درج زیرنویس جدید", + "undoRedoGoToChangedLine": "لغو/انجام مجدد: رفتن به خط تغییرکرده (و موقعیت ویدئو)", "musicSymbol": "نماد موسیقی", "musicSymbolsToReplace": "نمادهای موسیقی برای جایگزینی (جداشده با ویرگول)", "textToSpeechPromptMergeContinuationLines": "تبدیل متن به گفتار: پرسش برای ادغام خطوط ادامه", @@ -3069,6 +3691,7 @@ "useFocusedButtonBackgroundColor": "استفاده از رنگ پس‌زمینه دکمه دارای تمرکز", "focusedButtonBackgroundColor": "رنگ پس‌زمینه دکمه دارای تمرکز", "forceCrLfOnSave": "اجبار CR+LF هنگام ذخیره (فایل‌های متنی زیرنویس)", + "linuxClipboardUseExternalTool": "کپی متن از طریق xclip/wl-copy (حفظ کاراکترهای دارای اعراب)", "showFormatLimitWarning": "هشدار هنگام ذخیره اگر خطوط از محدودیت قالب عبور کنند (مثلاً ۳۲ نویسه/خط در SCC)", "textBoxButtonShowAutoBreak": "کادر متن: نمایش دکمه شکستن خودکار", "textBoxButtonShowUnbreak": "کادر متن: نمایش دکمه یک‌خطی کردن", @@ -3080,12 +3703,18 @@ "waveformDoubleClickAction": "عملکرد دوبارکلیک موج‌نما (پس از عملکرد تک‌کلیک)", "allSettings": "همه تنظیمات", "uiScale": "مقیاس رابط کاربری (%)", + "fontScale": "مقیاس فونت (%)", + "textSelectionOpacity": "شفافیت انتخاب متن (%)", "waveformToolbarItems": "موارد نوار ابزار موج‌نما", "matchIconColorToDarkTheme": "هماهنگ کردن رنگ آیکون با رنگ پیش‌زمینه تم تیره", "subtitlePreviewProperties": "ویژگی‌های پیش‌نمایش زیرنویس", "usePositionFromSubtitleFile": "استفاده از موقعیت موجود در فایل زیرنویس (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "حاشیه بخشی از محدوده زیرنویس است", "textJustify": "تراز دوطرفه خطوط", + "deinterlace": "حذف درهم‌بافتگی ویدئو (Deinterlace)", + "deinterlaceOff": "خاموش", + "deinterlaceAuto": "خودکار (فقط فریم‌های درهم‌بافته)", + "deinterlaceAlways": "همیشه", "pixelWidthInfo": "خطوط سبز = حداکثر عرض مجاز | ناحیه قرمز = متن از حد مجاز بیشتر است", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3094,7 +3723,16 @@ "waveformColorTheme": "تم رنگی:", "waveformSaveAsCustomTheme": "ذخیره به‌عنوان تم سفارشی...", "waveformLoadThemeDotDotDot": "بارگذاری تم...", - "waveformExportThemeDotDotDot": "خروجی گرفتن از تم..." + "waveformExportThemeDotDotDot": "خروجی گرفتن از تم...", + "waveformSaveCustomThemeTitle": "ذخیره پوسته سفارشی", + "waveformThemeFileType": "پوسته شکل موج Subtitle Edit", + "waveformThemeHighContrast": "کنتراست بالا", + "waveformThemeOceanBlue": "آبی اقیانوسی", + "waveformThemeWarmSunset": "غروب گرم", + "waveformThemeForest": "جنگل", + "waveformThemeMidnightPurple": "بنفش نیمه‌شب", + "waveformThemeRetroAmber": "کهربایی رترو", + "waveformThemeIce": "یخ" }, "shortcuts": { "searchShortcuts": "جستجوی میانبرها...", @@ -3105,11 +3743,34 @@ "categoryVideo": "ویدئو", "categorySync": "همگام‌سازی", "categoryAi": "هوش مصنوعی", + "categoryCustom": "سفارشی", + "editCustomShortcut": "ویرایش میانبر سفارشی", + "customShortcutTextBoxKeyHint": "اینجا از کلیدی همراه با Ctrl/Alt استفاده کنید - یک کلید ساده دیگر در جعبه متن تایپ نمی‌کند.", + "customShortcutNumberX": "میانبر سفارشی #{0}", + "customShortcutNumberXY": "میانبر سفارشی #{0}: {1}", + "customShortcutStep": "مرحله", + "customShortcutSteps": "مراحل", + "customShortcutStepRunCommand": "اجرای فرمان", + "customShortcutStepInsertText": "درج متن", + "customShortcutStepReplace": "جستجو و جایگزینی", + "customShortcutInsertAtCursor": "در محل مکان‌نما", + "customShortcutInsertAtStart": "در ابتدای متن", + "customShortcutInsertAtEnd": "در انتهای متن", + "customShortcutSummaryRunCommandX": "اجرا: {0}", + "customShortcutSummaryInsertXY": "درج \"{0}\" ({1})", + "customShortcutSummaryReplaceXY": "جایگزینی \"{0}\" با \"{1}\"", + "customShortcutSummaryReplaceRegexXY": "جایگزینی عبارت باقاعده \"{0}\" با \"{1}\"", + "customShortcutPickCommand": "لطفاً یک فرمان برای اجرا انتخاب کنید.", + "customShortcutEnterText": "لطفاً متن مورد نظر برای درج را وارد کنید.", + "customShortcutEnterFind": "لطفاً متن مورد نظر برای جستجو را وارد کنید.", + "customShortcutInvalidRegexX": "عبارت باقاعده نامعتبر: {0}", + "customShortcutStepsHint": "مراحل از بالا به پایین اجرا می‌شوند. مراحل متنی روی خطوط انتخاب‌شده کار می‌کنند؛ فرمان‌هایی که پنجره‌ای باز می‌کنند پس از بسته شدن آن ادامه می‌یابند.", "activeIn": "فعال در", "activeInEverywhere": "همه‌جا", "generalMergeSelectedLinesAndUnbreak": "ادغام خطوط انتخاب‌شده و یک‌خطی کردن", "generalMergeSelectedLinesAndUnbreakCjk": "ادغام خطوط انتخاب‌شده و یک‌خطی کردن بدون فاصله (CJK)", "generalUnbreakNoSpaceCjk": "یک‌خطی کردن بدون فاصله (CJK)", + "generalToggleBreak": "تغییر وضعیت شکست/حذف شکستگی", "generalMergeSelectedLinesBilingual": "ادغام خطوط انتخاب‌شده به‌صورت دوزبانه", "generalToggleTranslationMode": "تغییر حالت ترجمه", "generalToggleTranslationAndOriginalInPreviews": "تغییر بین ترجمه و متن اصلی در پیش‌نمایش ویدئو/صدا", @@ -3126,10 +3787,12 @@ "generalToggleItalic": "تغییر حالت ایتالیک", "generalToggleBold": "تغییر حالت پررنگ", "generalToggleUnderline": "تغییر حالت زیرخط", + "generalToggleBox": "تغییر وضعیت کادر (EBU STL)", "fileOpen": "باز کردن", "fileOpenKeepVideo": "باز کردن (با حفظ ویدئو)", "fileSave": "ذخیره", "fileSaveAs": "ذخیره به‌عنوان", + "fileSaveOriginal": "ذخیره نسخه اصلی", "fileCompare": "مقایسه", "fileStatistics": "آمار", "fileImportPlainText": "وارد کردن متن ساده", @@ -3141,6 +3804,7 @@ "fillSelectedLinesWithClipboard": "پر کردن خطوط انتخاب‌شده با متن کلیپ‌بورد", "listInverseSelection": "معکوس کردن انتخاب", "listDeleteSelection": "حذف انتخاب", + "deleteSelectionEverywhere": "حذف انتخاب (همه‌جا)", "rippleDeleteSelection": "حذف انتخاب و جابه‌جایی موارد بعدی", "assigned": "اختصاص‌یافته", "unassigned": "اختصاص‌نیافته", @@ -3149,6 +3813,7 @@ "detectKey": "تشخیص کلید", "control": "Ctrl", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Shift", "controlMac": "⌃", @@ -3159,6 +3824,11 @@ "resetShortcutsDetail": "آیا می‌خواهید همه میانبرها به مقادیر پیش‌فرض بازنشانی شوند؟", "togglePlayPause": "تغییر بین پخش و مکث", "toggleLockTimeCodes": "قفل/باز کردن قفل کدهای زمانی", + "toggleTimeCodeMode": "تغییر حالت کد زمانی (زمان/فریم‌ها/شماره فریم‌ها)", + "toggleScreenPrivacy": "تغییر وضعیت حریم خصوصی صفحه (پنهان کردن نام فایل‌ها، سپس متن‌ها نیز)", + "screenPrivacyFileNamesHidden": "حریم خصوصی صفحه: نام فایل‌ها پنهان است", + "screenPrivacyFileNamesAndTextsHidden": "حریم خصوصی صفحه: نام فایل‌ها و متن‌ها پنهان است", + "screenPrivacyOff": "حریم خصوصی صفحه: خاموش", "duplicateSelectedLines": "تکثیر خطوط انتخاب‌شده", "sourceView": "نمایش منبع", "addOrEditBookmark": "افزودن یا ویرایش نشانک", @@ -3177,6 +3847,7 @@ "moveFirstWordFromNextLineUpCurrentSubtitle": "انتقال اولین کلمه از خط بعدی به خط بالا (زیرنویس فعلی)", "moveTextFromCursorToNextAndGoToNext": "انتقال متن بعد از مکان‌نما به زیرنویس بعدی و رفتن به آن", "moveTextFromCursorToNextAndGoToNextAndPlay": "انتقال متن بعد از مکان‌نما به زیرنویس بعدی، رفتن به آن و پخش", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "انتقال متن بعد از مکان‌نما به زیرنویس بعدی، رفتن به بعدی، پخش آن و توقف موقت در انتهای آن", "breakAtFirstSpaceFromCursor": "شکستن خط در نخستین فاصله از موقعیت مکان‌نما", "breakAtFirstSpaceFromCursorAndGoToNext": "شکستن خط در نخستین فاصله از موقعیت مکان‌نما و رفتن به بعدی", "toggleFocusGridAndWaveform": "تغییر فوکوس بین فهرست زیرنویس و شکل موج/طیف‌نگار", @@ -3206,6 +3877,7 @@ "listViewColumnTextUp": "ستون: انتقال متن به بالا", "listViewColumnTextDown": "ستون: انتقال متن به پایین", "autoTranslateSelectedLines": "ترجمه خودکار خطوط انتخاب‌شده...", + "autoTranslateSelectedLinesNoPrompt": "ترجمه خودکار خطوط انتخاب‌شده (بدون پرسش، استفاده از آخرین موتور/زبان‌ها)", "setAssaResolution": "تنظیم وضوح ASSA (PlayResX/PlayResY)", "setShortcutForX": "تنظیم میانبر برای «{0}»", "commandFileNewKeepVideo": "جدید (با حفظ ویدئو)", @@ -3260,6 +3932,7 @@ "textBoxItalic": "کادر متن: ایتالیک", "textBoxBold": "کادر متن: پررنگ", "textBoxUnderline": "کادر متن: زیرخط", + "textBoxBox": "کادر جعبه متن (EBU STL)", "resetWaveformZoomAndSpeed": "بازنشانی بزرگ‌نمایی شکل موج و سرعت پخش", "togglePlaybackSpeed": "تغییر سرعت پخش", "playbackSpeedSlower": "کاهش سرعت پخش", @@ -3271,6 +3944,7 @@ "seekSilenceForward": "یافتن سکوت به جلو", "waveformGuessStart": "حدس زمان شروع از روی شکل موج", "waveformGuessEnd": "حدس زمان پایان از روی شکل موج", + "waveformGuessStartAndEnd": "حدس زمان شروع و پایان از شکل موج", "setVideoPositionCurrentSubtitleStart": "تنظیم موقعیت ویدئو روی شروع خط فعلی", "goToSubtitlePositionAndPause": "رفتن به موقعیت زیرنویس و مکث", "setVideoPositionCurrentSubtitleEnd": "تنظیم موقعیت ویدئو روی پایان خط فعلی", @@ -3284,6 +3958,14 @@ "surroundWith": "احاطه کردن با...", "surroundWithXY": "احاطه کردن با {0}/{1}", "surroundWithNumberX": "احاطه کردن با #{0}", + "surroundWithBehavior": "رفتار", + "surroundWithBehaviorToggle": "تغییر وضعیت (افزودن، یا حذف در صورت وجود)", + "surroundWithBehaviorAdd": "افزودن (هر بار)", + "surroundWithBehaviorRemove": "حذف (همه)", + "surroundWithBehaviorRemoveOnce": "حذف (هر بار یکی)", + "surroundWithWorksOn": "اعمال روی", + "surroundWithScopeSelectionOrText": "انتخاب، در غیر این صورت کل متن", + "surroundWithScopeEachLine": "هر خط", "searchVia": "جستجو از طریق", "searchViaX": "جستجو از طریق {0}", "searchViaNumberX": "جستجو از طریق #{0}", @@ -3311,6 +3993,11 @@ "copySubtitlePathToClipboard": "کپی مسیر زیرنویس در کلیپ‌بورد", "copySubtitleOriginalPathToClipboard": "کپی مسیر نسخه اصلی زیرنویس در کلیپ‌بورد", "focusTextBox": "قرار دادن فوکوس روی کادر متن", + "focusSubtitleListView": "تمرکز روی نمای فهرست زیرنویس", + "focusWaveform": "تمرکز روی شکل موج", + "focusOriginalTextBox": "تمرکز روی جعبه متن اصلی", + "textBoxGoToStart": "جعبه متن، رفتن به ابتدا", + "textBoxGoToEnd": "جعبه متن، رفتن به انتها", "sortByNumber": "مرتب‌سازی بر اساس شماره", "sortByStartTime": "مرتب‌سازی بر اساس زمان «نمایش»", "sortByEndTime": "مرتب‌سازی بر اساس زمان «مخفی شدن»", @@ -3348,9 +4035,9 @@ "selectionToSentenceCase": "کادر متن: تبدیل انتخاب به حالت جمله", "selectionToggleCasing": "کادر متن: تغییر حالت حروف (بزرگ → کوچک → عنوان)", "googleIt": "جستجو در گوگل (متن انتخاب‌شده)", - "setActorXY": "تنظیم گوینده {0}: {1}", + "setActorX": "تنظیم بازیگر: {0}", "setNewActor": "تنظیم گوینده جدید...", - "setActorSlotXTitle": "جایگاه گوینده {0}", + "setStyleX": "تنظیم استایل: {0}", "toggleDialogDashes": "تغییر وضعیت خط تیره دیالوگ", "mergeWithLineBeforeAsDialog": "ادغام با خط قبل به‌عنوان دیالوگ", "mergeWithLineAfterAsDialog": "ادغام با خط بعد به‌عنوان دیالوگ", @@ -3361,7 +4048,23 @@ "moveStartOneFrameBackKeepGapPrev": "انتقال شروع یک فریم به عقب (حفظ فاصله با قبلی در صورت کم بودن)", "moveStartOneFrameForwardKeepGapPrev": "انتقال شروع یک فریم به جلو (حفظ فاصله با قبلی در صورت کم بودن)", "moveEndOneFrameBackKeepGapNext": "انتقال پایان یک فریم به عقب (حفظ فاصله با بعدی در صورت کم بودن)", - "moveEndOneFrameForwardKeepGapNext": "انتقال پایان یک فریم به جلو (حفظ فاصله با بعدی در صورت کم بودن)" + "moveEndOneFrameForwardKeepGapNext": "انتقال پایان یک فریم به جلو (حفظ فاصله با بعدی در صورت کم بودن)", + "moveStartXMsBack": "جابجایی شروع X میلی‌ثانیه به عقب (X در تنظیمات تعیین می‌شود، همچنین در همگام‌سازی بصری)", + "moveStartXMsForward": "جابجایی شروع X میلی‌ثانیه به جلو (X در تنظیمات تعیین می‌شود، همچنین در همگام‌سازی بصری)", + "moveEndXMsBack": "جابجایی پایان X میلی‌ثانیه به عقب (X در تنظیمات تعیین می‌شود، همچنین در همگام‌سازی بصری)", + "moveEndXMsForward": "جابجایی پایان X میلی‌ثانیه به جلو (X در تنظیمات تعیین می‌شود، همچنین در همگام‌سازی بصری)", + "moveSelectedLinesXMsBack": "جابجایی خطوط انتخاب‌شده X میلی‌ثانیه به عقب (X در تنظیمات تعیین می‌شود)", + "moveSelectedLinesXMsForward": "جابجایی خطوط انتخاب‌شده X میلی‌ثانیه به جلو (X در تنظیمات تعیین می‌شود)", + "moveSelectedLinesAndForwardXMsBack": "جابجایی خطوط انتخاب‌شده و همه خطوط بعدی X میلی‌ثانیه به عقب (X در تنظیمات تعیین می‌شود)", + "moveSelectedLinesAndForwardXMsForward": "جابجایی خطوط انتخاب‌شده و همه خطوط بعدی X میلی‌ثانیه به جلو (X در تنظیمات تعیین می‌شود)", + "moveAllLinesXMsBack": "جابجایی همه خطوط X میلی‌ثانیه به عقب (X در تنظیمات تعیین می‌شود)", + "moveAllLinesXMsForward": "جابجایی همه خطوط X میلی‌ثانیه به جلو (X در تنظیمات تعیین می‌شود)", + "moveSelectedLinesCustomMsBack": "جابجایی خطوط انتخاب‌شده، میلی‌ثانیه سفارشی ({0:#,###,##0}) به عقب، {1}", + "moveSelectedLinesCustomMsForward": "جابجایی خطوط انتخاب‌شده، میلی‌ثانیه سفارشی ({0:#,###,##0}) به جلو، {1}", + "moveSelectedLinesAndForwardCustomMsBack": "جابجایی خطوط انتخاب‌شده و همه خطوط بعدی، میلی‌ثانیه سفارشی ({0:#,###,##0}) به عقب، {1}", + "moveSelectedLinesAndForwardCustomMsForward": "جابجایی خطوط انتخاب‌شده و همه خطوط بعدی، میلی‌ثانیه سفارشی ({0:#,###,##0}) به جلو، {1}", + "moveAllLinesCustomMsBack": "جابجایی همه خطوط، میلی‌ثانیه سفارشی ({0:#,###,##0}) به عقب، {1}", + "moveAllLinesCustomMsForward": "جابجایی همه خطوط، میلی‌ثانیه سفارشی ({0:#,###,##0}) به جلو، {1}" }, "wordLists": { "title": "لیست کلمات", @@ -3406,7 +4109,11 @@ "applyToSelectedLinesX": "خطوط انتخاب‌شده ({0})", "applyToAllLinesX": "تمام خطوط ({0})", "updateAllXAvailable": "بروزرسانی همه موارد موجود ({0})", - "updatingXOfY": "در حال بروزرسانی {0} از {1}..." + "updatingXOfY": "در حال بروزرسانی {0} از {1}...", + "doNotAskAgain": "دوباره نپرس (قابل تغییر در مدیریت پلاگین‌ها)", + "applyPluginsTo": "اعمال پلاگین‌ها روی", + "askEachTime": "هر بار پرسیده شود", + "allLines": "همه خطوط" }, "help": { "aboutSubtitleEdit": "درباره Subtitle Edit", @@ -3450,6 +4157,8 @@ "nOcrDatabase": "پایگاه داده nOCR", "drawMode": "حالت رسم:", "addNewCharcter": "افزودن نویسهٔ جدید", + "addNOcrCharacterTitle": "افزودن کاراکتر nOCR برای خط {0}، کاراکتر {1} از {2} با استفاده از پایگاه داده \"{3}\"", + "addBinaryOcrCharacterTitle": "افزودن کاراکتر OCR باینری برای خط {0}، کاراکتر {1} از {2} با استفاده از پایگاه داده \"{3}\"", "lineIndexX": "خط {0}", "inspectNOcrAdditions": "بررسی موارد جدید nOCR", "ocrSelectedLines": "OCR روی خطوط انتخاب‌شده", @@ -3498,6 +4207,8 @@ "binaryImageCompareInspectImageMatches": "«مقایسهٔ تصاویر دودویی» - بررسی تطبیق‌های تصویر", "saveBlankTextTitle": "متن خالی ذخیره شود؟", "saveBlankTextPrompt": "متن خالی برای تصویر ذخیره شود؟", + "drawnLinesDoNotMatchTitle": "خطوط با تصویر مطابقت ندارند", + "drawnLinesDoNotMatchPrompt": "برخی از خطوط ترسیم‌شده با تصویر مطابقت ندارند (خطوط سبز باید روی کاراکتر و خطوط قرمز باید خارج از آن باشند)، بنابراین این کاراکتر تشخیص داده نخواهد شد.\n\nبه هر حال ذخیره شود؟", "yesAndNeverAskAgain": "بله و دیگر نپرس", "importTextFromSubtitleDotDotDot": "وارد کردن متن از زیرنویس...", "importTextFromSubtitleOverwritePrompt": "برخی خطوط از قبل متن OCR دارند. متن موجود بازنویسی شود؟", @@ -3556,9 +4267,26 @@ "crispEmbedSettingsTitle": "تنظیمات CrispEmbed", "crispEmbedDescription": "موتور OCR محلی با چندین مدل پشتیبان - موتور و مدل‌ها را از اینجا دانلود کنید.", "trainNOcrDatabase": "آموزش پایگاه داده nOCR...", + "optimizeNOcrDatabase": "بهینه‌سازی پایگاه داده nOCR...", + "optimizeNOcrDatabaseQuestionXY": "خطوطی که کاراکترها را از کاراکترهای مشابه در پایگاه داده nOCR \"{0}\" متمایز نمی‌کنند حذف شوند؟\n\nاین کار پایگاه داده را کوچک‌تر و OCR را سریع‌تر می‌کند، معمولاً با خطای کمتر. تا یک دقیقه طول می‌کشد.\n\nیک نسخه پشتیبان با نام \"{1}\" ذخیره می‌شود.", + "optimizingNOcrDatabaseXY": "در حال بهینه‌سازی پایگاه داده nOCR... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "پایگاه داده nOCR \"{0}\" بهینه شد: {1:#,##0} -> {2:#,##0} خط.", "startTraining": "شروع آموزش", "abortTraining": "لغو آموزش", "trainingOptions": "گزینه‌های آموزش", + "trainNOcrSubtitle": "کاراکترها را با فونت‌های نصب‌شده رندر می‌کند و شکل آن‌ها را به nOCR آموزش می‌دهد. فونت‌هایی را که زیرنویس‌های شما استفاده می‌کنند انتخاب کنید.", + "xFontsSelected": "{0:#,##0} انتخاب‌شده", + "subtitleFonts": "فونت‌های زیرنویس", + "emptyDatabase": "پایگاه داده خالی", + "startFromDatabase": "شروع از", + "startFromDatabaseHint": "کاراکترهای آموزش‌دیده را به یک کپی از پایگاه داده موجود اضافه کنید (توصیه می‌شود) یا از یک پایگاه داده خالی شروع کنید", + "fontSizes": "اندازه‌های فونت", + "fontSizesHint": "اندازه‌های فونت به پیکسل برای رندر، جداشده با کاما، مثلاً \"30, 40\"", + "numberOfLineSegmentsHint": "خطوط بررسی‌شده برای هر کاراکتر - تعداد بیشتر سخت‌گیرانه‌تر اما کندتر است", + "enterDatabaseName": "یک نام برای پایگاه داده وارد کنید", + "trainingFontXSizeYCharacterZ": "در حال آموزش \"{0}\" در {1} px: {2}", + "xLearned": "{0:#,##0} آموخته شد", + "xSkipped": "{0:#,##0} رد شد", "charactersToTrain": "نویسه‌های مورد آموزش", "letterCombinationsToTrain": "ترکیب‌های حروفی که ممکن است در یک تصویر به هم متصل شوند", "importCharactersFromSubtitleFile": "وارد کردن نویسه‌ها از فایل زیرنویس...", @@ -3585,6 +4313,8 @@ "drawZoomOut": "کوچک‌نمایی (Ctrl+-)", "drawResetView": "بازنشانی نما (Ctrl+0)", "drawToggleGrid": "نمایش/عدم نمایش شبکه (Ctrl+G)", + "drawTogglePreview": "تغییر وضعیت پیش‌نمایش (F9)", + "drawPreviewFailed": "پیش‌نمایش ناموفق بود - ffmpeg همراه با libass (فیلتر subtitles) لازم است", "drawCopyToClipboard": "کپی در کلیپ‌بورد (Ctrl+C)", "drawShapes": "اشکال", "drawSelectedPoint": "نقطه انتخاب‌شده", @@ -3592,6 +4322,81 @@ "drawSelectedLayer": "لایه انتخاب‌شده", "drawToolX": "ابزار: {0}", "drawHelpText": "برای افزودن نقاط کلیک کنید • Enter/F8 برای بستن شکل • Shift+کشیدن برای جابه‌جایی نما • Ctrl+اسکرول برای بزرگ‌نمایی", + "drawMoveToLayer": "انتقال به لایه", + "drawFlipHorizontal": "قرینه افقی", + "drawFlipVertical": "قرینه عمودی", + "drawHideShape": "پنهان کردن شکل", + "drawShowShape": "نمایش شکل", + "drawHideLayer": "پنهان کردن لایه", + "drawShowLayer": "نمایش لایه", + "drawDeleteLayer": "حذف لایه", + "drawDeletePoint": "حذف نقطه", + "drawCancelDrawing": "لغو ترسیم", + "drawLayerX": "لایه {0}", + "drawImportSvg": "وارد کردن تصویر SVG...", + "drawRotateClockwise": "چرخش ۹۰° در جهت عقربه‌های ساعت", + "drawConvertToCurve": "تبدیل بخش به منحنی", + "drawBackground": "پس‌زمینه", + "drawPosition": "موقعیت", + "drawZoom": "بزرگ‌نمایی", + "drawShapeTool": "ابزار شکل", + "drawColorPickerTool": "برداشتن رنگ از یک شکل یا پس‌زمینه", + "drawShapeLibrary": "کتابخانه شکل‌ها", + "drawShapeLibraryHint": "برای قرار دادن یک شکل روی بوم بکشید، یا برای اندازه پیش‌فرض کلیک کنید. Shift تناسب آن را حفظ می‌کند.", + "drawAddToLibrary": "افزودن به کتابخانه شکل‌ها...", + "drawRemoveFromLibrary": "حذف از کتابخانه شکل‌ها", + "drawShapeName": "نام شکل", + "drawCategorySpeechBubbles": "حباب‌های گفتگو", + "drawCategoryArrows": "پیکان‌ها", + "drawCategoryBasicShapes": "شکل‌های پایه", + "drawCategorySymbols": "نمادها", + "drawCategoryMyShapes": "شکل‌های من", + "drawShapeSpeechBubble": "حباب گفتگو", + "drawShapeSpeechBubbleRight": "حباب گفتگو، دنباله به راست", + "drawShapeSpeechBubbleUp": "حباب گفتگو، دنباله به بالا", + "drawShapeOvalBubble": "حباب گفتگوی بیضی", + "drawShapeBoxBubble": "حباب گفتگوی جعبه‌ای", + "drawShapeThoughtBubble": "حباب فکر", + "drawShapeShoutBubble": "حباب فریاد", + "drawShapeCaptionBox": "کادر عنوان", + "drawShapeArrow": "پیکان", + "drawShapeDoubleArrow": "پیکان دوطرفه", + "drawShapeChevron": "شورون", + "drawShapeCurvedArrow": "پیکان منحنی", + "drawShapeRoundedRectangle": "مستطیل گوشه‌گرد", + "drawShapeTriangle": "مثلث", + "drawShapeDiamond": "لوزی", + "drawShapePentagon": "پنج‌ضلعی", + "drawShapeHexagon": "شش‌ضلعی", + "drawShapeOctagon": "هشت‌ضلعی", + "drawShapeStar": "ستاره", + "drawShapeRing": "حلقه", + "drawShapePlus": "به‌علاوه", + "drawShapeBanner": "بنر", + "drawShapeHeart": "قلب", + "drawShapeCheck": "علامت تیک", + "drawShapeMusicNote": "نت موسیقی", + "drawShapeMusicNotes": "نت‌های موسیقی", + "drawShapeLightning": "صاعقه", + "drawShapeCloud": "ابر", + "drawShapeMoon": "ماه", + "drawShapeBadge": "نشان", + "drawSize": "اندازه", + "drawLayer": "لایه", + "drawBackgroundVideoFrame": "فریم ویدئو (موقعیت فعلی)", + "drawBackgroundVideoFrameAt": "فریم ویدئو در...", + "drawBackgroundImage": "فایل تصویر...", + "drawBackgroundNone": "بدون پس‌زمینه", + "drawBackgroundStretch": "کشیدن تصویر به اندازه بوم", + "drawBackgroundOpacity": "شفافیت پس‌زمینه", + "drawBackgroundVideoFrameFailed": "دریافت فریم ویدئو در {0} ممکن نشد.", + "drawImages": "تصاویر", + "drawConvertToLine": "تبدیل بخش به خط", + "drawConvertShapeToCurves": "تبدیل همه خطوط به منحنی", + "drawConvertShapeToLines": "تبدیل همه منحنی‌ها به خط", + "drawRotateCounterClockwise": "چرخش ۹۰° خلاف جهت عقربه‌های ساعت", + "drawSvgImages": "تصاویر SVG", + "drawSvgNoShapes": "هیچ شکل توپُر یا خط‌کشی در فایل SVG یافت نشد.", "progressBarTitle": "نوار پیشرفت ASSA", "progressBarSettings": "نوار پیشرفت", "mouseOverColor": "رنگ هنگام قرار گرفتن ماوس", @@ -3688,13 +4493,26 @@ "graphics": "گرافیک", "copyToStorageStyles": "کپی در سبک‌های ذخیره‌شده", "copyToFileStyles": "کپی در سبک‌های فایل", + "styleXAlreadyExistsInStorage": "استایلی با نام \"{0}\" از قبل در فضای ذخیره‌سازی وجود دارد.\n\nبازنویسی شود، یا هر دو حفظ شوند (کپی نام جدیدی می‌گیرد)؟", + "styleXAlreadyExistsInFile": "استایلی با نام \"{0}\" از قبل در فایل وجود دارد.\n\nبازنویسی شود، یا هر دو حفظ شوند (کپی نام جدیدی می‌گیرد)؟", + "styleNameCannotBeEmpty": "نام استایل نمی‌تواند خالی باشد.", + "styleNameXIsUsedMoreThanOnce": "نام استایل \"{0}\" توسط بیش از یک استایل در فایل استفاده شده است.", + "overwrite": "بازنویسی", + "keepBoth": "حفظ هر دو", + "doThisForAllConflictingStyles": "انجام این کار برای همه استایل‌های متعارض", "setStyleAsDefault": "تنظیم سبک به‌عنوان پیش‌فرض", "takeUsagesFromDotDotDot": "گرفتن موارد استفاده از...", "replaceStyleWithDotDotDot": "جایگزینی سبک با...", "noAttachmentsFound": "هیچ پیوستی در فایل ASSA انتخاب‌شده یافت نشد.", "deleteStyleQuestion": "سبک حذف شود؟", "deleteStylesQuestion": "سبک‌ها حذف شوند؟", + "deleteXStylesQuestion": "آیا می‌خواهید {0} استایل را حذف کنید؟", + "deleteXStylesFromStorageQuestion": "آیا می‌خواهید {0} استایل را از فضای ذخیره‌سازی حذف کنید؟", + "deleteStyleXFromStorageQuestion": "آیا می‌خواهید استایل \"{0}\" را از فضای ذخیره‌سازی حذف کنید؟", + "deleteStyleXFromFileQuestion": "آیا می‌خواهید استایل \"{0}\" را از فایل فعلی حذف کنید؟", "openStyleImportFile": "باز کردن فایل زیرنویس برای وارد کردن سبک‌ها", + "styleImportFiles": "فایل‌های استایل (.ass، .sty، دسته‌بندی‌های Subtitle Edit 4 .template)", + "ssaStyleImportFiles": "فایل‌های استایل (.ssa، .ass، .sty)", "primary": "اصلی", "secondary": "ثانویه", "applyOverrideTags": "اعمال تگ‌های بازنویسی", diff --git a/src/ui/Assets/Languages/Polish.json b/src/ui/Assets/Languages/Polish.json index 68781e38caa..ed8e88852b8 100644 --- a/src/ui/Assets/Languages/Polish.json +++ b/src/ui/Assets/Languages/Polish.json @@ -1,9 +1,49 @@ { "title": "Subtitle Edit", - "version": "v5.3.0-beta25", - "translatedBy": "Adam Malich (ostatnia aktualizacja: 8.10.2026)", + "version": "v5.3.0", + "translatedBy": "Adam Malich (ostatnia aktualizacja: 14.10.2026)", "cultureName": "pl-PL", "general": { + "prompt": "Instrukcja", + "temperature": "Temperatura", + "preset": "Ustawienie wstępne", + "output": "Wyjście", + "outputFormat": "Format wyjściowy", + "other": "Inne", + "timeCodeFormat": "Format kodu czasowego", + "topBottomMargin": "Margines górny/dolny", + "theme": "Motyw", + "brightness": "Jasność", + "chooseColor": "Wybierz kolor", + "lineX": "Linia {0}", + "playLine": "Odtwarzaj linię", + "maxLineLength": "Maksymalna długość linii", + "maxCharsPerSec": "Maksymalnie znaków na sekundę", + "maxNumberOfLines": "Maksymalna liczba linii", + "subtitles": "Napisy", + "shotChanges": "Zmiany ujęcia", + "chapters": "Rozdziały", + "interjections": "Wykrzykniki", + "blankLines": "Puste linie", + "editWholeText": "Edytuj cały tekst", + "noTextInClipboard": "Brak tekstu w schowku", + "noSubtitlesFoundTitle": "Nie znaleziono napisów", + "replacedXOccurrences": "Zastąpiono {0} wystąpień", + "invalidRegularExpressionX": "Nieprawidłowe wyrażenie regularne: {0}", + "discardChangesTitle": "Odrzucić zmiany?", + "downloadingXDotDotDot": "Pobieranie {0}...", + "importTimeCodesDotDotDot": "Importuj kody czasowe...", + "original": "Oryginał", + "nextChange": "Następna zmiana", + "previousChange": "Poprzednia zmiana", + "changeXOfY": "Zmiana {0} z {1}", + "tooLong": "Za długi", + "tooShort": "Za krótki", + "overlapping": "Nakładanie się", + "detail": "Szczegóły", + "fixOcrErrors": "Napraw błędy OCR", + "runningOcrXY": "Uruchamianie OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "Aby uruchomić plik llama.cpp, konieczne jest pobranie silnika llama-server. Pobrać teraz?", "abort": "Przerwij", "actor": "Aktor", "actors": "Aktorzy", @@ -18,7 +58,7 @@ "stylePickerFilterHint": "Wpisz tekst, aby zastosować filtr, lub wpisz nazwę nowego stylu", "stylePickerKeysHint": "Naciśnij cyfrę (1–9, 0), aby ustawić styl dla wszystkich zaznaczonych linii.", "stylePickerNewStyleX": "Nowy styl \"{0}\"", - "stylePickerNewStyleInfo": "Naciśnij klawisz Enter, aby dodać ten styl z ustawieniami domyślnymi i zastosować go do zaznaczonych linii. Użyj \"Zarządzaj stylami...\" aby później zmienić jego czcionkę, kolory i położenie.", + "stylePickerNewStyleInfo": "Naciśnij klawisz Enter, aby dodać ten styl z ustawieniami domyślnymi i zastosować go do zaznaczonych linii. Aby później zmienić jego czcionkę, kolory i położenie, użyj \"Zarządzaj stylami...\".", "stylePickerCurrentStyleX": "Bieżący styl: {0}", "stylePickerLinesUsingStyleX": "Linie wykorzystujące ten styl: {0}", "stylePickerMarginsXYZ": "Lewo {0}, prawo {1}, pionowo {2}", @@ -175,11 +215,11 @@ "delete": "Usuń", "deleteAtPosition": "Usuń napisy w pozycji wideo", "deleteCurrentLine": "Usuń bieżącą linię", - "deleteFirstLines": "Usuń pierwsze linie ", - "deleteLastLines": "Usuń ostatnie linie ", + "deleteFirstLines": "Usuń pierwsze linie", + "deleteLastLines": "Usuń ostatnie linie", "deleteLineXPrompt": "Usunąć linię numer {0}?", "deleteLines": "Usuń linie", - "deleteLinesContainingText": "Usuń linie zawierające tekst ", + "deleteLinesContainingText": "Usuń linie zawierające tekst", "deleteXLinesPrompt": "Usunąć {0} linii?", "description": "Opis", "dictionary": "Słownik", @@ -210,7 +250,7 @@ "editing": "Edytowanie", "effect": "Efekt", "enabled": "Aktywne", - "encoding": "Kodowanie ", + "encoding": "Kodowanie", "endTime": "Czas ukrycia", "engine": "Silnik", "enterProfileName": "Wstaw nazwę profilu", @@ -244,7 +284,7 @@ "fileSavedToX": "Plik zapisano w {0}", "fileXAlreadyExists": "Plik \"{0}\" już istnieje.", "fileXOfY": "Plik {0} z {1}", - "filter": "Filtruj ", + "filter": "Filtruj", "filterByLayer": "Filtruj według warstwy", "find": "Znajdź", "findNext": "Znajdź następny", @@ -265,13 +305,13 @@ "footer": "Stopka", "forced": "Wymuszone", "foreground": "Pierwszy plan", - "format": "Format ", + "format": "Format", "forward": "przewiń do przodu", "foundNoMatches": "Nie znaleziono żadnych dopasowań", "foundOneMatch": "Znaleziono jedno dopasowanie", "foundXInLineYZ": "Znaleziono \"{0}\" w linii {1}, pozycja {2}", "foundXMatches": "Znaleziono {0} dopasowań", - "frameRate": "Liczba klatek na sekundę ", + "frameRate": "Liczba klatek na sekundę", "frames": "Klatki", "from": "Z", "fromCurrentVideoPosition": "od bieżącej pozycji wideo", @@ -296,7 +336,7 @@ "hex": "Hex", "hide": "Ukryj", "history": "Historia", - "horizontal": "W poziomie ", + "horizontal": "W poziomie", "id": "ID", "image": "Obraz", "imageSaved": "Obraz zapisany", @@ -324,7 +364,7 @@ "italic": "Kursywa", "keepExistingTimeCodes": "Zachowaj istniejące kody czasowe (nie dodawaj przesunięcia wideo)", "keyFile": "Plik klucza", - "language": "Język ", + "language": "Język", "languagePostFix": "Postfiks językowy (mkv/mp4/automatyczne tłumaczenie)", "layer": "Warstwa", "layerFilterOn": "Filtr warstwowy włączony", @@ -402,7 +442,7 @@ "numberSymbol": "#", "ocrDotDotDot": "OCR...", "ocrPercentX": "OCR: {0}%", - "offset": "Przesunięcie ", + "offset": "Przesunięcie", "offsetTimeCodes": "Przesuń kody czasowe", "offsetX": "Przesunięcie X", "offsetY": "Przesunięcie Y", @@ -429,7 +469,7 @@ "outline": "Zarys", "outlineColor": "Kolor zarysu", "outlineWidth": "Szerokość zarysu", - "outputFolder": "Folder wyjściowy ", + "outputFolder": "Folder wyjściowy", "outputProperties": "Właściwości wyjścia", "overwriteExistingFiles": "Nadpisz istniejące pliki", "overwriteFilesInFolderX": "Nadpisz pliki w folderze: \"{0}\"", @@ -595,6 +635,8 @@ "showStartColumn": "Pokaż kolumnę \"Początek\"", "showHideColumn": "Pokaż kolumnę \"Ukryj\"", "showHistory": "Pokaż historię", + "clearHistory": "Wyczyść historię", + "removeFromHistory": "Usuń z historii", "showLayerColumn": "Pokaż kolumnę \"Warstwa\"", "showPreview": "Pokaż podgląd", "showShotChangesList": "Pokaż listę zmian ujęcia", @@ -656,19 +698,21 @@ "styleExaggeration": "Wzmacnianie stylu", "styles": "Style", "subtitleFile": "Plik napisów", + "subtitleFileChangedOutsideX": "Plik \"{0}\" został zmieniony poza programem Subtitle Edit.\n\nWczytać ponownie i utracić wprowadzone zmiany?", "subtitleFileName": "Nazwa pliku napisów", "subtitleFileSaved": "Plik z napisami zapisany", "subtitleFileSavedToX": "Plik z napisami zapisany w {0}", "subtitleFiles": "Pliki napisów", "subtitleFormats": "Formaty napisów", "subtitleLoadedX": "Wczytane napisy: {0}", + "subtitleReloadedChangedOutsideX": "Napisy wczytane ponownie (zmodyfikowane poza programem Subtitle Edit): {0}", "suffix": "Sufiks", "suggestions": "Sugestie", "sync": "Synchronizacja", "syntaxColoring": "Kolorowanie składni", "system": "Systemowy", - "targetEncoding": "Docelowe kodowanie ", - "targetFormat": "Docelowy format ", + "targetEncoding": "Docelowe kodowanie", + "targetFormat": "Docelowy format", "teletextAlignment": "Wyrównanie teletekstu", "teletextColor": "Kolor teletekstu", "teletextLine": "Linia teletekstu", @@ -732,7 +776,7 @@ "useSourceFolder": "Użyj folderu źródłowego", "useSourceResolution": "Użyj rozdzielczości źródłowej", "userName": "Nazwa użytkownika", - "vertical": "W pionie ", + "vertical": "W pionie", "video100MsBack": "Wideo, 100 milisekund do tyłu", "video100MsForward": "Wideo, 100 milisekund do przodu", "video500MsBack": "Wideo, 500 milisekund do tyłu", @@ -753,7 +797,7 @@ "videoCustom3ForwardAndPauseX": "Wideo, niestandardowe milisekundy ({0:#,###,##0}) przewiń do przodu i wstrzymaj, 3", "videoCustom4BackAndPauseX": "Wideo, niestandardowe milisekundy ({0:#,###,##0}) przewiń do tyłu i wstrzymaj, 4", "videoCustom4ForwardAndPauseX": "Wideo, niestandardowe milisekundy ({0:#,###,##0}) przewiń do przodu i wstrzymaj, 4", - "videoExtension": "Rozszerzenie pliku wideo ", + "videoExtension": "Rozszerzenie pliku wideo", "videoFile": "Plik wideo", "videoFileGenerated": "Wygenerowano plik wideo", "videoFileGeneratedX": "Wygenerowano plik wideo: \"{0}\"", @@ -782,7 +826,7 @@ "waveformCenterOnVideoPosition": "Środek przebiegu fali w pozycji wideo", "waveformPasteFromClipboard": "Wklej ze schowka", "waveformSpectrogram": "Przebieg fali/spektrogram", - "width": "Szerokość ", + "width": "Szerokość", "wordsPerMin": "Słów/min.", "pixelWidth": "Szerokość w pikselach", "wpm": "Słów/min.", @@ -888,6 +932,7 @@ "multipleReplace": "_Wielokrotne zastąpienie...", "fillSelectedLinesWithClipboard": "Wypełnij zaznaczone linie tekstem ze schowka", "goToLineNumber": "_Przejdź do numeru linii...", + "commandPalette": "Zestaw _poleceń...", "rightToLeftMode": "Tryb od prawej do _lewej (PDL)", "modifySelectionDotDotDot": "Modyfikuj _zaznaczenie...", "tools": "_Narzędzia", @@ -1080,12 +1125,15 @@ "charactersPerSecond": "Znaków/sekundę: {0}", "chooseColumn": "Wybierz kolumnę", "columnPaste": "Wklej kolumnę", + "commandPaletteTitle": "Zestaw poleceń", + "commandPaletteSearchPlaceholder": "Wpisz, aby wyszukać polecenia...", + "commandPaletteNoCommandsFound": "Brak pasujących poleceń", "createdEmptyTranslation": "Utworzono puste tłumaczenie z bieżącego napisu", "deleteText": "Usuń tekst", "deleteTextAndShiftCellsUp": "Usuń tekst i przesuń komórki w górę", "endTimeMustBeAfterStartTime": "Czas zakończenia musi być po czasie rozpoczęcia.", "errorLoad7Zip": "Ten plik wydaje się być skompresowanym plikiem 7-Zip.\n\nSubtitle Edit nie może otwierać plików skompresowanych.", - "errorLoadBinaryZeroes": "Przepraszamy, ten plik zawiera tylko zera binarne!\n\nJeśli edytowałeś ten plik za pomocą Subtitle Edit, możesz znaleźć kopię zapasową za pomocą pozycji menu Plik -> Przywróć automatyczną kopię zapasową...", + "errorLoadBinaryZeroes": "Przepraszamy, ten plik zawiera tylko zera binarne!\n\nJeśli edytowałeś ten plik za pomocą Subtitle Edit, możesz znaleźć kopię zapasową za pomocą pozycji menu Plik -> Przywróć automatyczną kopię zapasową...", "errorLoadGZip": "Wygląda na to, że ten plik jest skompresowanym plikiem GZip.\n\nSubtitle Edit nie potrafi otwierać plików skompresowanych.", "errorLoadLargeFile": "Ten plik jest zbyt duży, aby można go było otworzyć jako plik z napisami.", "errorLoadVideoFilePrompt": "Ten plik wydaje się być plikiem wideo:\n{0}\n\nMożesz otworzyć wideo za pomocą \"Wideo -> Otwórz wideo\" lub przeciągając i upuszczając film na odtwarzacz wideo.\n\nCzy chcesz otworzyć ten plik jako plik wideo?", @@ -1337,7 +1385,8 @@ "forcedAlignerIsolatingSpeech": "Izolowanie mowy... {0}", "forcedAlignerIsolatingSpeechFailed": "Nie udało się wyodrębnić mowy – zamiast tego czasy zakończenia ustalono na podstawie czasu odczytu.", "forcedAlignerModel": "Model wyrównywacza", - "forcedAlignerDownloadEngine": "Pobierz / Zaktualizuj silnik..." + "forcedAlignerDownloadEngine": "Pobierz / Zaktualizuj silnik...", + "forcedAlignerEstimatedXOfY": "Nie udało się wyrównać {0} z {1} linii, więc rozmieszczono je na podstawie czasu odczytu – ich kody czasowe są jedynie szacunkowe. Scenariusz jest prawdopodobnie dłuższy niż to, co zostało wypowiedziane w filmie." }, "export": { "exportImagesProfiles": "Eksportuj profile obrazów", @@ -2451,7 +2500,7 @@ "brackets": "Nawiasy kwadratowe '[' i ']'", "curlyBrackets": "Nawiasy klamrowe '{' i '}'", "parentheses": "Nawiasy okrągłe '(' i ')'", - "and": " i ", + "and": "i", "onlySeparateLines": "Tylko oddzielne linie", "removeTextBeforeColon": "Usuń tekst przed dwukropkiem", "onlyIfTextIsUppercase": "Tylko, jeśli tekst pisany WIELKIMI LITERAMI", @@ -2589,7 +2638,7 @@ "detectSpeakersNeedsNewerCrispAsr": "Funkcja \"Wykrywaj mówców\" wymaga systemu Crisp ASR w wersji {0} lub nowszej, a zainstalowana wersja to {1}.\n\nZaktualizuj Crisp ASR (przycisk z ikoną koła zębatego obok silnika) lub wyłącz opcję \"Wykrywaj mówców\".", "xNeedsNewerCrispAsr": "{0} wymaga Crisp ASR w wersji {1} lub nowszej, ale zainstalowana jest wersja {2}.\n\nPobrać i zainstalować aktualizację teraz?", "vad": "VAD", - "vadHint": "Wykrywanie aktywności głosowej: transkrybowana jest tylko mowa, z podziałem w miejscach, w których mówca robi pauzę.\nAuto: Silero – i tylko dla silników, które tego wymagają (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, WebRTC: zawsze aktywne, dla każdego silnika ASR Crisp. FireRedVAD jest najdokładniejszy.\nIndex-Echo zawsze korzysta z Silero. --vad, --vad-model lub --chunk-seconds w ustawieniach zaawansowanych mają pierwszeństwo.", + "vadHint": "Wykrywanie aktywności głosowej: transkrybowana jest tylko mowa, z podziałem w miejscach, w których mówca robi pauzę.\nAuto: Silero - i to tylko w przypadku silników, które tego wymagają (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: zawsze włączone dla każdego silnika Crisp ASR. FireRedVAD jest najdokładniejszy, natomiast Whisper-VAD wykonuje najmniej cięć i zapewnia ich największą czystość, ale działa najwolniej.\nIndex-Echo zawsze korzysta z Silero. --vad, --vad-model or --chunk-seconds w ustawieniach zaawansowanych mają pierwszeństwo.", "inputLanguage": "Język wejściowy", "advancedWhisperSettings": "Zaawansowane parametry funkcji zamiany mowy na tekst", "downloadingSpeechToTextEngine": "Pobieranie silnika zamiany mowy na tekst", @@ -2788,6 +2837,12 @@ "advancedTtsSettings": "Zaawansowane ustawienia TTS", "advancedTtsAudioProcessing": "Przetwarzanie audio", "advancedTtsOutput": "Wyjście", + "advancedTtsVoiceCloning": "Klonowanie głosu", + "cleanCloneReferences": "Czyste nagrania referencyjne do klonowania głosu (Sidon)", + "cleanCloneReferencesDescription": "Usuwa muzykę, szum i pogłos z materiału audio, na podstawie którego klonowany jest głos – zarówno z fragmentów pobranych z wideo, jak i z nagrań zaimportowanych w menedżerze głosów. Wykorzystuje model rekonstrukcji mowy Sidon w pliku audio.cpp (pobieranie: 940 MB). Sklonowany głos nie odtwarza już dźwięków z otoczenia, ale bardzo cicha lub nakładająca się mowa może brzmieć przytłumioną.", + "cleaningCloneReferencesDotDotDot": "Czyszczenie materiałów źródłowych do klonowania głosu...", + "downloadSidonTitle": "Pobrać Sidon?", + "downloadSidonQuestionX": "Czyszczenie materiałów źródłowych do klonowania głosu wymaga modelu rekonstrukcji mowy Sidon ({0}).\n\nPobrać teraz? Bez tego referencje są wykorzystywane w obecnej postaci.", "proAudioPostProcessing": "Profesjonalna obróbka dźwięku", "proAudioPostProcessingDescription": "Dodaje korekcję (EQ), bramkę szumów, kompresję, normalizację głośności (-16 LUFS) oraz krótkie wyciszanie/podgłaśnianie (fade in/out) do każdego klipu.", "generatingSpeechSegmentXOfY": "Generowanie mowy: segment {0} z {1}", @@ -2800,6 +2855,10 @@ "removeOriginalSpeechDescription": "Zachowuje muzykę i efekty dźwiękowe z oryginalnego filmu, ale usuwa ścieżkę mówioną i nakłada na to nową. Przy użyciu karty graficznej proces ten trwa mniej więcej tyle samo, co samo wideo, natomiast bez niej – wielokrotnie dłużej. Gdy włączona jest funkcja wyciszania tła (audio ducking), jej poziom głośności wpływa na muzykę i efekty dźwiękowe. Dotyczy tylko sytuacji, gdy mowa jest dodawana do pliku wideo.", "removingOriginalSpeech": "Usuwanie oryginalnej mowy...", "removeOriginalSpeechFailed": "Nie udało się usunąć oryginalnej mowy – mowa została dodana do wideo bez niej.", + "speechRemovalModel": "Model", + "speechRemovalModelDescription": "Najwyższa jakość pozwala zachować większość muzyki i efektów dźwiękowych. Tryb 'Szybki' jest około trzy razy szybszy, ale traci się przy tym nieco więcej szczegółów muzycznych.", + "speechRemovalBestQuality": "Najwyższa jakość (Mel-Band RoFormer)", + "speechRemovalFast": "Szybki (HTDemucs)", "videoTruncatedWarning": "Obraz w nowym pliku wideo zatrzymuje się po {0}, podczas gdy oryginalne nagranie trwa {1} – obraz się zawiesi, a dźwięk będzie nadal odtwarzany.\n\nPlik został zachowany. Informacje wyjściowe programu ffmpeg znajdują się w pliku error-log.txt w folderze danych aplikacji Subtitle Edit.", "originalVolumePercent": "Oryginalna głośność %", "vadSilenceCompression": "Kompresja ciszy VAD", @@ -3031,7 +3090,7 @@ "openSecondarySubtitleOnVideoPlayer": "Drugi plik z napisami (w odtwarzaczu wideo)", "removeSecondarySubtitleOnVideoPlayer": "Usuń drugi plik z napisami", "editSecondarySubtitleSettings": "Edytuj ustawienia drugich napisów", - "editSecondarySubtitleSettingsDotDotDot": "Edytuj ustawienia drugich napisów...", + "editSecondarySubtitleSettingsDotDotDot": "Edytuj ustawienia drugich napisów...", "secondarySubtitleRememberSettings": "Zapamiętaj te ustawienia", "secondarySubtitleDoNotShowAgain": "Nie pokazuj ponownie tego okna dialogowego", "secondarySubtitleJustifyLines": "Wyjustuj wiersze", @@ -3487,7 +3546,7 @@ "checkForUpdatesChannel": "Powiadamiaj o", "checkForUpdatesChannelStable": "Tylko wersjach stabilnych", "checkForUpdatesChannelStableAndBeta": "Wersjach stabilnych i beta", - "defaultFormat": "Domyślny format ", + "defaultFormat": "Domyślny format", "defaultSaveAsFormat": "Domyślny format \"Zapisz jako\"", "favoriteSubtitleFormats": "Ulubione formaty napisów", "favoriteLanguages": "Ulubione języki", @@ -3553,9 +3612,11 @@ "timeCodeModeTime": "Czas (hh:mm:ss,zzz)", "timeCodeModeFrames": "Klatki (hh:mm:ss:ff)", "timeCodeModeFrameNumbers": "Numery klatek", + "frameModeSnapToVideoFrames": "Zapisuj znaczniki czasu dla klatek wideo (a nie dla klatek w obrębie każdej sekundy)", "textBoxLimitNewLines": "Ogranicz liczbę linii w polu tekstowym napisów", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - renderowanie programowe (wolno)", + "mpvMetalRendering": "libmpv - Metal (eksperymentalne, wymaga ponownego uruchomienia)", "mpvWidRendering": "libmpv - renderowanie Native Window ID", "waveFormsAndSpectrogramFoldersContainsX": "Foldery \"Waveforms\" i \"Spectrogram\" zawierają {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "Usunąć pliki \"Waveforms\" i \"Spectrogram\"?", @@ -3649,6 +3710,10 @@ "usePositionFromSubtitleFile": "Użyj pozycji z pliku napisów (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "Margines jest częścią obszaru napisów", "textJustify": "Wyjustuj wiersze", + "deinterlace": "Usuń przeplot z wideo", + "deinterlaceOff": "Wył.", + "deinterlaceAuto": "Auto (tylko klatki z przeplotem)", + "deinterlaceAlways": "Zawsze", "pixelWidthInfo": "Zielone linie = maksymalny limit szerokości | Obszar czerwony = tekst przekracza limit", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -4065,8 +4130,8 @@ "startOcr": "_Rozpocznij OCR", "pauseOcr": "_Wstrzymaj OCR", "inspectLine": "Sprawdź linię...", - "ocrEngine": "Silnik OCR ", - "tesseractEngineMode": "Tryb silnika ", + "ocrEngine": "Silnik OCR", + "tesseractEngineMode": "Tryb silnika", "tesseractEngineModeLegacy": "Tylko oryginalny Tesseract (potrafi wykrywać kursywę)", "tesseractEngineModeNeural": "Tylko sieci neuronowe LSTM", "tesseractEngineModeBoth": "Tesseract + LSTM", @@ -4201,9 +4266,26 @@ "crispEmbedSettingsTitle": "Ustawienia CrispEmbed", "crispEmbedDescription": "Lokalny silnik OCR z obsługą wielu modeli – silnik i modele można pobrać tutaj.", "trainNOcrDatabase": "Trenowanie bazy danych nOCR...", + "optimizeNOcrDatabase": "Optymalizuj bazę danych nOCR...", + "optimizeNOcrDatabaseQuestionXY": "Czy usunąć linie, które nie pozwalają odróżnić znaków od podobnych znaków w bazie danych nOCR \"{0}\"?\n\nDzięki temu baza danych jest mniejsza, a proces OCR przebiega szybciej i zazwyczaj z mniejszą liczbą błędów. Zajmie to najwyżej minutę.\n\nKopia zapasowa jest zapisywana jako \"{1}\".", + "optimizingNOcrDatabaseXY": "Optymalizacja bazy danych nOCR... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "Baza danych nOCR \"{0}\" zoptymalizowana: {1:#,##0} -> {2:#,##0} linii.", "startTraining": "Rozpocznij trening", "abortTraining": "Przerwij trening", "trainingOptions": "Opcje treningowe", + "trainNOcrSubtitle": "Renderuje znaki przy użyciu zainstalowanych czcionek i uczy program nOCR ich kształtów. Wybierz czcionki używane w napisach.", + "xFontsSelected": "Wybrano {0:#,##0}", + "subtitleFonts": "Czcionki napisów", + "emptyDatabase": "Pusta baza danych", + "startFromDatabase": "Zacznij od", + "startFromDatabaseHint": "Dodaj wytrenowane znaki do kopii istniejącej bazy danych (zalecane) lub zacznij od pustej bazy", + "fontSizes": "Rozmiary czcionek", + "fontSizesHint": "Rozmiary czcionek w pikselach, w jakich mają być renderowane, oddzielone przecinkami, np. \"30, 40\"", + "numberOfLineSegmentsHint": "Liczba sprawdzanych linii na znak – wyższa wartość oznacza bardziej rygorystyczną, ale wolniejszą kontrolę", + "enterDatabaseName": "Wstaw nazwę bazy danych", + "trainingFontXSizeYCharacterZ": "Trening \"{0}\" przy {1} px: {2}", + "xLearned": "Nauczone {0:#,##0}", + "xSkipped": "Pominięte {0:#,##0}", "charactersToTrain": "Znaki do trenowania", "letterCombinationsToTrain": "Kombinacje liter, które można podzielić na jeden obraz", "importCharactersFromSubtitleFile": "Importuj znaki z pliku z napisami...", @@ -4230,13 +4312,90 @@ "drawZoomOut": "Pomniejsz (Ctrl+-)", "drawResetView": "Resetuj widok (Ctrl+0)", "drawToggleGrid": "Włącz/wyłącz siatkę (Ctrl+G)", + "drawTogglePreview": "Włącz/wyłącz podgląd (F9)", + "drawPreviewFailed": "Nie udało się wyświetlić podglądu – wymagany jest ffmpeg z libass (filtr napisów)", "drawCopyToClipboard": "Kopiuj do schowka (Ctrl+C)", "drawShapes": "Kształty", "drawSelectedPoint": "Wybrany punkt", "drawSelectedShape": "Wybrany kształt", "drawSelectedLayer": "Wybrana warstwa", "drawToolX": "Narzędzie: {0}", - "drawHelpText": "Kliknij, aby dodać punkty • Enter/F8, aby zamknąć kształt • Shift+Przeciągnij, aby przesunąć • Ctrl+Przewiń, aby powiększyć", + "drawHelpText": "Kliknij, aby dodać punkty • Prawy przycisk myszki, aby wyświetlić opcje • Wybierz narzędzie: przeciągnij uchwyty, aby zmienić skalę lub obrócić (Shift = zachowaj proporcje/15°) • Enter/F8, aby zamknąć kształt • Shift+przeciąganie lub środkowy przycisk myszy, aby przesuwać widok • Ctrl+przewijanie, aby powiększyć", + "drawMoveToLayer": "Przenieś do warstwy", + "drawFlipHorizontal": "Odwróć w poziomie", + "drawFlipVertical": "Odwróć w pionie", + "drawHideShape": "Ukryj kształt", + "drawShowShape": "Pokaż kształt", + "drawHideLayer": "Ukryj warstwę", + "drawShowLayer": "Pokaż warstwę", + "drawDeleteLayer": "Usuń warstwę", + "drawDeletePoint": "Usuń punkt", + "drawCancelDrawing": "Anuluj rysowanie", + "drawLayerX": "Warstwa {0}", + "drawImportSvg": "Importuj obraz SVG...", + "drawRotateClockwise": "Obróć o 90° zgodnie z ruchem wskazówek zegara", + "drawConvertToCurve": "Konwertuj segment na krzywą", + "drawBackground": "Tło", + "drawPosition": "Pozycja", + "drawZoom": "Powiększ", + "drawShapeTool": "Narzędzie do kształtów", + "drawColorPickerTool": "Wybierz kolor z kształtu lub tła", + "drawShapeLibrary": "Biblioteka kształtów", + "drawShapeLibraryHint": "Przeciągnij po obszarze roboczym, aby umieścić kształt, lub kliknij, aby uzyskać rozmiar domyślny. Klawisz Shift pozwala zachować proporcje.", + "drawAddToLibrary": "Dodaj do biblioteki kształtów...", + "drawRemoveFromLibrary": "Usuń z biblioteki kształtów", + "drawShapeName": "Nazwa kształtu", + "drawCategorySpeechBubbles": "Dymki", + "drawCategoryArrows": "Strzałki", + "drawCategoryBasicShapes": "Podstawowe kształty", + "drawCategorySymbols": "Symbole", + "drawCategoryMyShapes": "Moje kształty", + "drawShapeSpeechBubble": "Dymek", + "drawShapeSpeechBubbleRight": "Dymek, ogonek po prawej", + "drawShapeSpeechBubbleUp": "Dymek, ogonek skierowany w górę", + "drawShapeOvalBubble": "Owalny dymek", + "drawShapeBoxBubble": "Kwadratowy dymek", + "drawShapeThoughtBubble": "Dymek z myślą", + "drawShapeShoutBubble": "Dymek z okrzykiem", + "drawShapeCaptionBox": "Pole podpisu", + "drawShapeArrow": "Strzałka", + "drawShapeDoubleArrow": "Podwójna strzałka", + "drawShapeChevron": "Szewron", + "drawShapeCurvedArrow": "Zakrzywiona strzałka", + "drawShapeRoundedRectangle": "Zaokrąglony prostokąt", + "drawShapeTriangle": "Trójkąt", + "drawShapeDiamond": "Romb", + "drawShapePentagon": "Pięciokąt", + "drawShapeHexagon": "Sześciokąt", + "drawShapeOctagon": "Ośmiokąt", + "drawShapeStar": "Gwiazda", + "drawShapeRing": "Pierścień", + "drawShapePlus": "Plus", + "drawShapeBanner": "Baner", + "drawShapeHeart": "Serce", + "drawShapeCheck": "Znak zaznaczenia", + "drawShapeMusicNote": "Nuta", + "drawShapeMusicNotes": "Nuty", + "drawShapeLightning": "Błyskawica", + "drawShapeCloud": "Chmura", + "drawShapeMoon": "Księżyc", + "drawShapeBadge": "Odznaka", + "drawSize": "Rozmiar", + "drawLayer": "Warstwa", + "drawBackgroundVideoFrame": "Klatka wideo (bieżąca pozycja)", + "drawBackgroundVideoFrameAt": "Klatka wideo przy...", + "drawBackgroundImage": "Plik obrazu...", + "drawBackgroundNone": "Bez tła", + "drawBackgroundStretch": "Rozciągnij obraz do rozmiaru płótna", + "drawBackgroundOpacity": "Nieprzezroczystość tła", + "drawBackgroundVideoFrameFailed": "Nie udało się pobrać klatki wideo w {0}.", + "drawImages": "Obrazy", + "drawConvertToLine": "Konwertuj odcinek na linię", + "drawConvertShapeToCurves": "Konwertuj wszystkie linie na krzywe", + "drawConvertShapeToLines": "Konwertuj wszystkie krzywe na linie", + "drawRotateCounterClockwise": "Obróć o 90° w kierunku przeciwnym do ruchu wskazówek zegara", + "drawSvgImages": "Obrazy SVG", + "drawSvgNoShapes": "W pliku SVG nie znaleziono wypełnionych kształtów ani obrysów.", "progressBarTitle": "Pasek postępu ASSA", "progressBarSettings": "Pasek postępu", "mouseOverColor": "Kolor po najechaniu myszką", diff --git a/src/ui/Assets/Languages/Portuguese (Brazil).json b/src/ui/Assets/Languages/Portuguese (Brazil).json index 592ee80d946..fdb04bae8b8 100644 --- a/src/ui/Assets/Languages/Portuguese (Brazil).json +++ b/src/ui/Assets/Languages/Portuguese (Brazil).json @@ -1,9 +1,48 @@ { "title": "Subtitle Edit", - "version": "v5.3.0-beta19", + "version": "v5.3.0", "translatedBy": "igorruckert", "cultureName": "pt-BR", "general": { + "temperature": "Temperatura", + "preset": "Predefinição", + "output": "Saída", + "outputFormat": "Formato de saída", + "other": "Outro", + "timeCodeFormat": "Formato de código de tempo", + "topBottomMargin": "Margem superior/inferior", + "theme": "Tema", + "brightness": "Brilho", + "chooseColor": "Escolher cor", + "lineX": "Linha {0}", + "playLine": "Reproduzir linha", + "maxLineLength": "Comprimento máximo da linha", + "maxCharsPerSec": "Máximo de caracteres/s", + "maxNumberOfLines": "Número máximo de linhas", + "subtitles": "Legendas", + "shotChanges": "Mudanças de cena", + "chapters": "Capítulos", + "audio": "Áudio", + "interjections": "Interjeições", + "blankLines": "Linhas em branco", + "editWholeText": "Editar todo o texto", + "noTextInClipboard": "Nenhum texto na área de transferência", + "noSubtitlesFoundTitle": "Nenhuma legenda encontrada", + "replacedXOccurrences": "{0} ocorrências substituídas", + "invalidRegularExpressionX": "Expressão regular inválida: {0}", + "discardChangesTitle": "Descartar alterações?", + "downloadingXDotDotDot": "Baixando {0}...", + "importTimeCodesDotDotDot": "Importar códigos de tempo...", + "nextChange": "Próxima alteração", + "previousChange": "Alteração anterior", + "changeXOfY": "Mudança {0} de {1}", + "tooLong": "Muito longo", + "tooShort": "Muito curto", + "overlapping": "Sobreposição", + "detail": "Detalhe", + "fixOcrErrors": "Corrigir erros de OCR", + "runningOcrXY": "Executando OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp requer que o mecanismo do servidor llama seja baixado. Baixar agora?", "abort": "Cancelar", "actor": "Ator", "actors": "Atores", @@ -13,6 +52,18 @@ "actorPickerKeysHint": "Pressione um número ou Enter para definir o ator. Alt+Cima/Baixo altera a ordem, Delete remove o ator.", "actorPickerNewActorX": "Novo ator \"{0}", "actorPickerLinesSelectedX": "Linhas selecionadas: {0}", + "setStyleDotDotDot": "Definir estilo...", + "stylePickerTitle": "Definir estilo", + "stylePickerFilterHint": "Digite para filtrar ou digite um novo nome de estilo", + "stylePickerKeysHint": "Pressione um número (1-9, 0) para definir o estilo em todas as linhas selecionadas.", + "stylePickerNewStyleX": "Novo estilo \"{0}", + "stylePickerNewStyleInfo": "Pressione Enter para adicionar este estilo com configurações padrão e configurá-lo nas linhas selecionadas. Use \"Gerenciar estilos...\" para alterar sua fonte, cores e posição posteriormente.", + "stylePickerCurrentStyleX": "Estilo atual: {0}", + "stylePickerLinesUsingStyleX": "Linhas que usam este estilo: {0}", + "stylePickerMarginsXYZ": "Esquerda {0}, direita {1}, vertical {2}", + "stylePickerSetStyle": "Definir e_stilo", + "stylePickerManageStyles": "Gerenciar estilos...", + "stylePickerManageStylesHint": "Feche esta janela e abra o gerenciador de estilos para editar fontes, cores, posição e muito mais", "add": "Adicionar", "addDotDotDot": "Adicionar...", "addToNamesListCaseSensitive": "Adicionar à lista de nomes (diferencia maiúsculas de minúsculas)", @@ -431,6 +482,7 @@ "percent": "Porcentagem", "pickLayer": "Definir camada", "pickOllamaModel": "Escolher modelo Ollama", + "pickModel": "Escolha o modelo", "llamaCppUseRemoteServer": "Usar servidor externo (URL)", "llamaCppEngineSettings": "Configurações do mecanismo llama.cpp", "llamaCppEngineSettingsSubtitle": "Compilação do servidor local llama.cpp", @@ -507,6 +559,7 @@ "reset": "Redefinir", "resizePanels": "Redimensionar painéis", "resolution": "Resolução", + "retry": "Repetir", "reverseRightToLeftStartEnd": "Início/fim RTL reverso", "right": "Direita", "rightToLeft": "Direita para esquerda", @@ -568,6 +621,8 @@ "shadowColor": "Cor da sombra", "shadowWidth": "Largura da sombra", "shiftLineBy": "Deslocar linha em", + "shotIn": "Início da cena", + "shotOut": "Fim da cena", "shortcut": "Atalho", "shortcuts": "Atalhos", "show": "Mostrar", @@ -579,9 +634,13 @@ "showStartColumn": "Mostrar coluna \"Início\"", "showHideColumn": "Mostrar coluna \"Ocultar\"", "showHistory": "Mostrar histórico", + "clearHistory": "Limpar histórico", + "removeFromHistory": "Remover do histórico", "showLayerColumn": "Mostrar coluna \"Camada\"", "showPreview": "Mostrar prévia", "showShotChangesList": "Mostrar lista de mudanças de cena", + "showShotInColumn": "Mostrar coluna \"Início da cena\"", + "showShotOutColumn": "Mostrar coluna \"Fim da cena\"", "showStyleColumn": "Mostrar coluna \"Estilo\"", "showTeletext": "Mostrar TT", "showTimeCodes": "Mostrar códigos de tempo", @@ -638,12 +697,14 @@ "styleExaggeration": "Exagero de estilo", "styles": "Estilos", "subtitleFile": "Arquivo de legenda", + "subtitleFileChangedOutsideX": "O arquivo \"{0}\" foi alterado fora do Subtitle Edit.\r\n\r\nRecarregá-lo e perder suas alterações?", "subtitleFileName": "Nome do arquivo de legenda", "subtitleFileSaved": "Arquivo de legenda salvo", "subtitleFileSavedToX": "Arquivo de legenda salvo em {0}", "subtitleFiles": "Arquivos de legenda", "subtitleFormats": "Formatos de legenda", "subtitleLoadedX": "Legenda carregada: {0}", + "subtitleReloadedChangedOutsideX": "Legenda recarregada (alterada fora do Subtitle Edit): {0}", "suffix": "Sufixo:", "suggestions": "Sugestões", "sync": "Sincronizar", @@ -727,10 +788,23 @@ "videoCustom3ForwardX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) adiante, 3", "videoCustom4BackX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) atrás, 4", "videoCustom4ForwardX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) adiante, 4", + "videoCustom1BackAndPauseX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) atrás e pausar, 1", + "videoCustom1ForwardAndPauseX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) adiante e pausar, 1", + "videoCustom2BackAndPauseX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) atrás e pausar, 2", + "videoCustom2ForwardAndPauseX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) adiante e pausar, 2", + "videoCustom3BackAndPauseX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) atrás e pausar, 3", + "videoCustom3ForwardAndPauseX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) adiante e pausar, 3", + "videoCustom4BackAndPauseX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) atrás e pausar, 4", + "videoCustom4ForwardAndPauseX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) adiante e pausar, 4", "videoExtension": "Extensão do arquivo de vídeo", "videoFile": "Arquivo de vídeo", "videoFileGenerated": "Arquivo de vídeo gerado", "videoFileGeneratedX": "Arquivo de vídeo gerado: \"{0}\"", + "videoFilesGenerated": "Arquivos de vídeo gerados", + "xVideosGenerated": "{0} vídeos gerados", + "xOfYVideosGenerated": "{0} de {1} vídeos gerados", + "savedInX": "Salvo em {0}", + "savedInXFolders": "Salvo em {0} pastas", "videoFiles": "Arquivos de vídeo", "videoAndAudioFiles": "Arquivos de vídeo e áudio", "videoOffset": "Deslocamento de vídeo", @@ -857,6 +931,7 @@ "multipleReplace": "Substituição _múltipla...", "fillSelectedLinesWithClipboard": "Preencher linhas selecionadas com o texto da área de transferência", "goToLineNumber": "Ir para _linha número...", + "commandPalette": "_Paleta de comandos...", "rightToLeftMode": "Modo d_ireita-para-esquerda", "modifySelectionDotDotDot": "Modificar _seleção...", "tools": "_Ferramentas", @@ -1046,9 +1121,12 @@ "audioTrackIsNowX": "A faixa de áudio agora é \"{0}", "audioTrackX": "Faixa de áudio {0}", "autoBreakHint": "Quebra automática de linhas selecionadas", - "charactersPerSecond": "Caracteres/seg: {0:0.00}", + "charactersPerSecond": "Caracteres/seg: {0}", "chooseColumn": "Escolha a coluna", "columnPaste": "Antes de colar coluna", + "commandPaletteTitle": "Paleta de comandos", + "commandPaletteSearchPlaceholder": "Digite para pesquisar comandos...", + "commandPaletteNoCommandsFound": "Nenhum comando correspondente", "createdEmptyTranslation": "Criada uma tradução vazia da legenda atual", "deleteText": "Excluir texto", "deleteTextAndShiftCellsUp": "Excluir texto e mover células para cima", @@ -1122,7 +1200,7 @@ "videoAndWaveformPreviewTextX": "Prévia do vídeo/forma de onda: {0}", "xLinesCopiedFromOriginal": "{0} linhas copiadas da legenda original", "xLinesCopiedToOriginal": "{0} linhas copiadas para a legenda original", - "xLinesMerged": "Linhas combinadas", + "xLinesMerged": "{0} linhas mescladas", "xLinesSelectedOfY": "{0} linhas selecionadas de {1}", "xLinesSwitched": "{0} linhas trocadas", "xShotChangedLoaded": "{0} mudanças de cena carregadas", @@ -1134,12 +1212,14 @@ "trimmedXLines": "{0} linhas de legenda cortadas", "pastedXLinesOverSelectedLines": "Coladas {0} linha(s) sobre as linhas selecionadas", "pastedXOfYLinesOverSelectedLines": "Coladas {0} de {1} linha(s) sobre as linhas selecionadas - o restante não cabia na seleção", + "insertedXLinesFromClipboard": "Inseridas {0} linha(s) da área de transferência", "openOriginalDifferentNumberOfSubtitlesXY": "O arquivo de legenda original não possui o mesmo número de legendas que o arquivo de legenda atual.\r\n\r\n• Legendas originais: {0}\r\n• Legendas atuais: {1}", "originalTextReadOnly": "Texto original (somente leitura)", "originalTextEditMode": "Texto original (modo de edição)", "originalIsReadOnlyNotSaved": "A legenda original é uma referência somente leitura e não foi salva", "originalIsEmptyNotSaved": "A legenda original não tem texto algum e não foi salva", "originalIsReadOnlyReference": "A legenda original está aberta como referência somente leitura", + "closeTranslationQuestionXY": "Fechar a tradução \"{0}\"?\r\nA legenda original \"{1}\" se torna a legenda que você edita. O arquivo de tradução em si não é alterado.", "allowEditOfOriginalSubtitle": "Permitir edição da legenda original", "showAllOriginalLinesX": "Mostrar todas as linhas originais ({0} não possuem correspondências aqui)", "showAllOriginalLinesHint": "As linhas sem correspondência são mostradas como linhas extras, para que você possa ver o que está faltando na tradução.", @@ -1174,6 +1254,7 @@ "fileExportedInFormatXToY": "Arquivo exportado no formato {0} em {1}", "fileExportedInFormatXToFileY": "Arquivo exportado no formato \"{0}\" para o arquivo \"{1}\"", "fixedXLines": "{0} linhas corrigidas", + "toolXChangedYLines": "{0}: {1} linhas alteradas", "transcriptionCompletedWithXLines": "Transcrição concluída com {0} linhas", "openSubtitleFileX": "Abrir arquivo de legenda \"{0}\"?", "replacedXOccurrences": "Substituídas {0} ocorrências", @@ -1303,7 +1384,8 @@ "forcedAlignerIsolatingSpeech": "Isolando a fala... {0}", "forcedAlignerIsolatingSpeechFailed": "Não foi possível isolar a fala - os horários de término foram definidos a partir do horário de leitura.", "forcedAlignerModel": "Modelo de alinhador", - "forcedAlignerDownloadEngine": "Baixar/atualizar mecanismo..." + "forcedAlignerDownloadEngine": "Baixar/atualizar mecanismo...", + "forcedAlignerEstimatedXOfY": "{0} de {1} linhas não puderam ser alinhadas e foram posicionadas por tempo de leitura - seus códigos de tempo são apenas estimados. O roteiro provavelmente é mais longo do que o falado no vídeo." }, "export": { "exportImagesProfiles": "Exportar perfis de imagens", @@ -1544,13 +1626,61 @@ "ignoreFormatting": "Ignorar formatação", "ignoreFormattingHint": "Linhas que diferem apenas nas tags de formatação, como ou {\\an8}, não contam como diferentes", "showOnlyDifferencesInText": "Somente diferenças no texto", + "ignoreNumbering": "Ignorar numeração", + "ignoreNumberingHint": "Linhas que diferem apenas em seu número não contam como diferentes", + "ignoreTimeDifferenceMs": "Tolerância de tempo (ms)", + "ignoreTimeDifferenceMsHint": "Os horários de início e término que diferem em tantos milissegundos ou menos não contam como diferentes", + "compareDifferences": "Diferenças", + "compareTextDifferences": "Diferenças de texto", + "compareCurrent": "Atual", + "compareReference": "Referência", + "compareEditable": "Editável", + "compareEditableHint": "As alterações feitas aqui voltam para a legenda quando você clica em Aplicar", + "compareReadOnly": "Somente leitura", + "compareTakeFromReference": "Obter texto e tempo da referência", + "compareInsertFromReference": "Inserir esta linha na legenda atual", + "compareDeleteFromCurrent": "Excluir esta linha da legenda atual", + "compareTakeText": "Obter texto", + "compareTakeTiming": "Obter tempo", + "compareEditLine": "Editar linha", + "compareEditHint": "Ctrl+Enter para salvar, Esc para cancelar", + "compareEdited": "Editado", + "compareOnePendingChange": "1 alteração pendente", + "compareXPendingChanges": "{0} alterações pendentes", + "compareDiscardXChanges": "Descartar as {0} alterações feitas em Comparar?", + "compareXChangesApplied": "Comparar: {0} alterações aplicadas", + "compareChangeTextX": "#{0} texto da referência", + "compareChangeTimingX": "#{0} tempo a partir da referência", + "compareChangeTextAndTimingX": "#{0} texto e tempo da referência", + "compareChangeEditedX": "#{0} editado", + "compareChangeInsertedX": "#{0} inserido", + "compareChangeDeletedX": "#{0} excluído", + "compareSyncPoint": "Ponto de sincronia", + "compareSyncPointHint": "Ponto de sincronia - essas duas linhas são sempre mostradas como um par, e as linhas acima e abaixo são alinhadas sozinhas", + "compareSyncPickCurrent": "Ponto de sincronia: usar esta linha atual", + "compareSyncPickReference": "Ponto de sincronia: usar esta linha de referência", + "compareSyncRemove": "Remover ponto de sincronia", + "compareClearXSyncPoints": "Limpar pontos de sincronia ({0})", + "compareSyncCurrentPickedX": "Atual #{0} escolhido como ponto de sincronia - selecione a linha de referência correspondente e clique em Sincronizar", + "compareSyncReferencePickedX": "Referência #{0} escolhida como ponto de sincronia - selecione a linha atual correspondente e clique em Sincronizar", + "compareSyncWithCurrentX": "Sincronizar com atual #{0}", + "compareSyncWithReferenceX": "Sincronizar com referência #{0}", + "compareSyncApply": "Sincronizar", + "compareSyncPointSetXY": "Conjunto de pontos de sincronia: #{0} atual e #{1} de referência agora são mostrados como um par", + "compareSyncAlreadyPairedXY": "Atual #{0} e referência #{1} já são mostradas como um par com o mesmo início - nada para sincronizar", + "compareSyncPointShiftedXYZW": "Conjunto de pontos de sincronia: atual #{0}-#{1} deslocado {2} para começar com a referência #{3}", + "compareChangeSyncShiftXYZ": "#{0}-#{1} deslocado {2} (ponto de sincronia)", + "compareTimingDeltaHint": "Quanto mais tarde (+) ou antes (-) a referência começa e termina em relação à linha atual", "loadXFromFile": "Carregar \"{0}\" do arquivo", + "compareLoadSavedFile": "Carregar arquivo salvo", "saveCompareHtmlTitle": "Salvar arquivo HTML de comparação", "pickMatroskaTrackX": "Escolher a faixa Matroska - {0}", "pickTransportStreamTrackX": "Escolha a faixa do fluxo de transporte - {0}", "chapters": "Capítulos", "dvdVobFilesMissingX": "Arquivos VOB ausentes ({0}% encontrados)", - "pickMp4TrackX": "Escolha faixa MP4 - {0}", + "pickMp4TrackX": "Escolher faixa MP4 - {0}", + "pickMxfTrackX": "Escolher faixa MXF - {0}", + "pickMpegTrackX": "Escolher faixa MPEG - {0}", "rosettaProperties": "Propriedades do Rosetta IMSC de texto cronometrado", "rosettaFontSize": "Tamanho da fonte (altura da linha)", "propertyTimeBase": "Base de tempo", @@ -1625,7 +1755,8 @@ "findWhat": "Localizar o que", "descriptionOptional": "Descrição (opcional)", "invalidRegularExpressionX": "Expressão regular inválida: {0}", - "regularExpressionTooSlowX": "A expressão regular desistiu após {0} segundos - a regra foi ignorada, tente um padrão mais simples" + "regularExpressionTooSlowX": "A expressão regular desistiu após {0} segundos - a regra foi ignorada, tente um padrão mais simples", + "moveToCategory": "Mover para categoria" }, "find": { "searchTextWatermark": "Pesquisar texto...", @@ -1705,7 +1836,22 @@ "mismatchWarning": "Não se parece com o original – pode pertencer a uma linha diferente", "engineError": "Não foi possível acessar o mecanismo de IA: {0}", "playCurrentLineHint": "Reproduzir linha selecionada no player de vídeo e pausar no final (também dê duplo clique em uma linha)", - "editAfterHint": "Clique no texto da linha selecionada para editar a correção antes de aplicá-la (Enter salva, Esc cancela)" + "editAfterHint": "Clique no texto da linha selecionada para editar a correção antes de aplicá-la (Enter salva, Esc cancela)", + "template": "Modelo", + "templatePlaceholder": "Escolha um modelo para substituir o prompt", + "templateStandard": "Revisão padrão", + "templateSpeechToText": "Limpeza de fala para texto", + "templateMachineTranslation": "Correção de tradução automática", + "templateSdh": "DSS/deficientes auditivos", + "referenceContext": "Contexto de referência", + "referenceContextInfo": "Opcional. Nomes, personagens, glossário, sinopse ou notas de estilo – o modelo trata isso como autoridade para nomes e termos. Enviado com cada lote.", + "referenceContextPlaceholder": "Nomes: Kaito, Tia Mei, Dr. Hollis\r\nTermos: Shinkansen, warp core\r\nSinopse: Kaito viaja para Tóquio para encontrar seu pai desaparecido.", + "generateContext": "Gerar com IA", + "generateContextHint": "Deixe o mecanismo de IA selecionado ler o subtítulo e os nomes dos rascunhos, os termos e uma sinopse - verifique o resultado antes de usar", + "generatingContextPartXOfY": "Lendo parte {0} de {1}...", + "generatingContextSynopsis": "Escrevendo sinopse...", + "replaceContextQuestion": "Substituir o contexto de referência atual?", + "noContextGenerated": "O mecanismo de IA não retornou nenhuma informação de referência utilizável." }, "aiAssistant": { "title": "Assistente de IA", @@ -1751,6 +1897,7 @@ "removeLineBreaksPixelWidth": "Remover quebra de legendas que podem caber em uma linha (largura de pixel)", "fixUppercaseIInsideLowercaseWords": "Corrigir 'i' maiúsculo em palavras em minúsculo (erro de OCR)", "fixDoubleApostrophes": "Substituir apóstrofe dupla ('') por aspas (\")", + "fixMisreadQuotes": "Corrigir apóstrofos mal interpretados como aspas duplas (OCR, inglês)", "addPeriods": "Adicionar ponto depois de linhas quando a linha seguinte começar com maiúscula", "startWithUppercaseLetterAfterParagraph": "Iniciar parágrafo com maiúscula", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Iniciar com maiúscula depois de ponto dentro do parágrafo", @@ -1773,6 +1920,7 @@ "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Foo
bar! -> Foo bar!", "fixDoubleApostrophesExample": "''Has double single quotes'' -> \"Has single double quote\"", + "fixMisreadQuotesExample": "\"Olá' -> \"Olá\"", "addPeriodsExample": "Hello world -> Hello world.", "startWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: Foobar!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Hello there! how are you? -> Hello there! How are you?", @@ -1862,6 +2010,8 @@ "fixMinDurationMs": "Corrigir duração mínima (ms)", "doNotGoPastShotChange": "Não ultrapassar mudança de cena", "fixMaxDurationMs": "Corrigir duração máxima (ms)", + "fixMinDurationFrames": "Corrigir duração mínima (frames)", + "fixMaxDurationFrames": "Corrigir duração máxima (frames)", "minimumDurationMilliseconds": "Duração mínima (milissegundos):", "maximumDurationMilliseconds": "Duração máxima (milissegundos):", "maxDurationShouldBeHigherThanMinDuration": "A duração máxima deve ser superior à duração mínima", @@ -1923,6 +2073,20 @@ "isolateSpeechHint": "Remove música e efeitos sonoros antes do alinhamento, para que o alinhador ouça apenas o diálogo. Ajuda em falas com música ou ação alta, mas leva quase tanto tempo quanto o próprio áudio com uma GPU - e muitas vezes mais sem ela.", "isolatingSpeech": "Isolando a fala... (isso demora um pouco)", "isolateSpeechFailed": "Não foi possível isolar a fala. Em vez disso, alinhe-a com o áudio original.", + "checkWithSpeechToText": "Verificar com fala para texto", + "checkWithSpeechToTextHint": "Também transcreve o áudio e verifica cada movimento em relação ao local onde as palavras foram realmente ouvidas. Os movimentos grandes que a fala confirma são marcados para você, e os movimentos para longe de onde uma linha é ouvida são deixados desmarcados para você verificar. Também mostra o quanto de cada linha foi ouvida - uma participação baixa significa que o texto difere do que foi dito. Uma legenda que está mais fora de sincronia do que a mudança máxima - um deslocamento constante, um desvio de uma incompatibilidade de taxa de quadros ou saltos onde as cenas foram cortadas - é sincronizada primeiro pelas palavras ouvidas. Usa Crisp ASR Parakeet, que leva alguns minutos para um longa-metragem com GPU.", + "checkWithSpeechToTextNotAvailableX": "A verificação de fala para texto não está disponível para {0}", + "transcribingToCheck": "Transcrevendo para verificar o alinhamento...", + "speechToTextFailed": "Falha na conversão de fala em texto - os códigos de tempo não foram verificados.", + "speechToTextX": "Conversão de fala para texto: {0}", + "speechToTextConfirmedXDisputedY": "Discurso: {0} confirmado, {1} contestado", + "hardlyHeardX": "A conversão de fala em texto ouviu apenas {0}% das palavras da legenda. A legenda está no idioma falado? O alinhador não pode colocar uma translação.", + "heard": "Ouvido", + "heardHint": "Quanto da linha de fala para texto foi ouvida. Uma participação baixa significa que o texto difere do que é dito – onde o alinhador tem maior probabilidade de estar errado.", + "statusConfirmedBySpeech": "Confirmado pela fala", + "statusDisputedBySpeech": "Ouvido onde estava", + "statusMovedWithSync": "Movido com a sincronia", + "syncedFirstXY": "Sincronizado primeiro: {0} s no início, {1} s no final", "showSpeechOnly": "Mostrar apenas a fala", "showSpeechOnlyHint": "Desenhe a forma de onda alinhada do áudio com música e efeitos sonoros removidos; a forma de onda original permanece como está, para comparação. Disponível quando a fala for isolada - aqui, ou com \"Mostrar apenas a fala\" na forma de onda da janela principal.", "align": "Alinhar", @@ -1937,6 +2101,7 @@ "meanShiftX": "Mudança média: {0} ms", "toCheckX": "Para verificar: {0}", "largeMovesToCheckX": "{0} linha(s) se moveriam muito sozinhas e ficariam desmarcadas - toque Original / Alinhado e marque as que estão certas.", + "linesToCheckX": "{0} linha(s) ficam desmarcadas para verificação - ouça-as (F5 toca a linha alinhada, Shift+F5 a original) e marque as que estão certas.", "changeXOfY": "Alteração {0} de {1}", "previousChange": "Alteração anterior", "nextChange": "Próxima alteração", @@ -1949,10 +2114,12 @@ "statusNoSpeech": "Sem fala", "statusShiftTooLarge": "Mantido - deslocamento muito grande", "statusFailed": "Mantido - alinhador falhou", + "statusAdjustedByHand": "Ajustado manualmente", + "alignedWaveformHint": "Arraste uma linha para movê-la ou arraste suas bordas para alterar seu início ou fim.", + "playLine": "Reproduzir linha", + "undoAdjustment": "Desfazer ajuste", "playPause": "Reproduzir / pausar", - "playOriginal": "Original", "playAligned": "Alinhado", - "playOriginalHint": "Reproduzir linha selecionada com seus códigos de tempo originais", "playAlignedHint": "Reproduzir linha selecionada com seus códigos de tempo alinhados", "apply": "Aplicar", "applyHint": "Desmarque uma linha para manter seus códigos de tempo originais. Clique duas vezes em uma linha para reproduzi-la." @@ -2035,6 +2202,7 @@ "addColor": "Adicionar cor", "deleteLinesWithSpecificActorsOrStyles": "Excluir linhas", "useSourceStylesIfPossible": "Use estilos de origem, se possível", + "keepSourceEmbeddedFonts": "Manter fontes incorporadas de origem (rodapé)", "editStyles": "Editar estilos", "editProperties": "Editar propriedades", "editAttachments": "Editar anexos", @@ -2069,6 +2237,18 @@ "addFolderRecursiveDotDotDot": "Adicionar pasta recursiva...", "selectFolderToConvert": "Selecione a pasta com os arquivos para converter", "includeSubfolders": "Incluir subpastas ao adicionar uma pasta", + "videoFilesWhenAddingFolder": "Arquivos de vídeo (mkv, mp4, ts...) ao adicionar uma pasta", + "videoFilesAsk": "Perguntar", + "videoFilesInclude": "Adicionar suas faixas de legenda", + "videoFilesSkip": "Pular", + "folderContainsXVideoFiles": "A pasta contém {0} arquivo(s) de vídeo (mkv, mp4, ts...).\r\n\r\nAdicionar também as faixas de legendas incorporadas ou apenas os arquivos de legenda?", + "addVideoFiles": "Adicionar arquivos de vídeo", + "skipVideoFiles": "Apenas arquivos de legenda", + "doNotAskAgainVideoFiles": "Não perguntar novamente (altere nas configurações de conversão em lote)", + "settingsSectionOutput": "Saída", + "settingsSectionAddingFiles": "Adicionando arquivos", + "settingsSectionImageBasedSubtitles": "Legendas baseadas em imagens (OCR)", + "settingsSectionOther": "Outro", "keepSourceFileTimestamp": "Manter a data/hora do arquivo de origem nos arquivos de saída", "preventSleepWhileConverting": "Impedir suspender o computador durante a conversão", "scanningFolderX": "Verificando {0}...", @@ -2084,7 +2264,20 @@ "transportStreamOnlyTeletext": "Apenas teletexto", "transportStreamGetSizeFromVideo": "Obter tamanho do vídeo...", "twoLetterLanguageCodeUppercase": "Código de idioma de duas letras (maiúsculas)", - "threeLetterLanguageCodeUppercase": "Código de idioma de três letras (maiúsculas)" + "threeLetterLanguageCodeUppercase": "Código de idioma de três letras (maiúsculas)", + "formatContainsDotDotDot": "O formato contém...", + "extensionIsDotDotDot": "A extensão é...", + "statusIsError": "O status é erro", + "forcedTracksOnly": "Somente faixas forçadas", + "xConvertedYFailedInZ": "{0:#,###,##0} convertido, {1:#,###,##0} falhou em {2}", + "xNotProcessed": "{0:#,###,##0} não processado", + "removeUnicodeControlCharactersTitle": "Remover caracteres de controle Unicode", + "removeUnicodeControlCharactersInfo": "Remove os caracteres de controle de direção Unicode invisíveis (LRM, RLM, LRE, RLE, PDF, LRO e RLO) do texto e substitui espaços sem quebra por espaços normais.", + "preset": "Predefinição", + "savePresetDotDotDot": "Salvar predefinição...", + "deletePreset": "Excluir predefinição", + "presetName": "Nome da predefinição", + "deletePresetX": "Excluir predefinição \"{0}\"?" }, "changeCasing": { "fixNames": "Nome", @@ -2169,11 +2362,13 @@ }, "mergeLinesWithSameText": { "maxMsBetweenLines": "Máximo de milissegundos entre linhas", + "maxFramesBetweenLines": "Máximo de quadros entre linhas", "includeIncrementingLines": "Incluir linhas com texto incremental", "includeRollUpCaptions": "Incluir legendas acumuladas (rolagem)" }, "mergeLinesWithSameTimeCodes": { "maxMsDifference": "Diferença máxima (milissegundos)", + "maxFramesDifference": "Diferença máxima (quadros)", "makeDialog": "Criar diálogos" }, "netflixCheckAndFix": { @@ -2288,7 +2483,14 @@ "xInTopBar": "{0} na barra superior", "xInBottomBar": "{0} na barra inferior", "noImageSubtitlesLoaded": "Nenhuma legenda de imagem carregada", - "imageBasedFormatNotSupported": "Formato de legenda baseado em imagem não encontrado/suportado." + "imageBasedFormatNotSupported": "Formato de legenda baseado em imagem não encontrado/suportado.", + "frameRateDeclaredInFile": "Taxa de quadros declarada no arquivo sup do Blu-ray", + "frameRateDetectedFromTimeCodesX": "Taxa de quadros detectada nos códigos de tempo sup do Blu-ray (o arquivo declara {0})", + "frameRateFromVideo": "Taxa de quadros do vídeo", + "frameRateCurrent": "Taxa de quadros atual", + "frameRateSetManually": "Taxa de quadros definida manualmente", + "frameRateUsageInfo": "As exportações de Blu-ray sup, BDN XML, DOST e FCP são gravadas nesta taxa de quadros. Ele não muda em nenhum momento - use \"Alterar taxa de quadros\" para isso.", + "useVideoFrameRateXInsteadOfY": "A taxa de quadros do vídeo é {0}, mas a legenda está definida como {1}.\r\n\r\nUsar a taxa de quadros do vídeo ({0})?" }, "removeTextForHearingImpaired": { "interjections": "Interjeições", @@ -2318,6 +2520,7 @@ "pickFontNameInstalledFonts": "Fontes instaladas", "pickFontNameCollectedFonts": "Fontes coletadas", "colorPickerTitle": "Escolha a cor", + "colorPickerBrightness": "Brilho", "filterLayersTitle": "Filtrar camadas para exibição", "filterLayersHideFromWaveform": "Ocultar da forma de onda/espectrograma", "filterLayersHideFromSubtitleGrid": "Ocultar da grade de legendas", @@ -2368,7 +2571,21 @@ "correctWordsX": "Palavras corretas: {0}", "namesX": "Nomes: {0}", "addedToDictionaryX": "Adicionado ao dicionário: {0}", - "doNotShowThisAgain": "Não exibir novamente" + "doNotShowThisAgain": "Não exibir novamente", + "editUseAlwaysList": "Editar lista \"Usar sempre\"...", + "useAlwaysListTitle": "Verificação ortográfica - lista \"Usar sempre\"", + "useAlwaysListHeader": "Lista \"Usar sempre\"", + "useAlwaysListDescription": "A verificação ortográfica das palavras é substituída automaticamente, salva por \"Alterar tudo\" e \"Usar sempre\". Um par só é usado quando a palavra está escrita incorretamente.", + "useAlwaysWord": "Palavra com erro ortográfico", + "xPairs": "{0:#,##0} pares", + "xUnusedPairs": "{0:#,##0} nunca usado", + "useAlwaysUnusedHint": "Nunca usado - esta palavra está escrita corretamente (ou é um nome ou palavra de usuário), então a verificação ortográfica nunca a sinaliza", + "removeUnused": "Remover não usados", + "useAlwaysEmpty": "Ainda não há pares \"Usar sempre\" para este idioma", + "useAlwaysEmptyHint": "Os pares são adicionados quando você clica em \"Alterar tudo\" ou \"Usar sempre\" na verificação ortográfica.", + "useAlwaysNoMatch": "Nenhum par corresponde à pesquisa", + "useAlwaysSameWord": "A substituição deve ser diferente da palavra.", + "useAlwaysRememberOff": "\"Lembrar a lista 'Usar sempre'\" está desativado em Configurações, portanto, a verificação ortográfica não usa nem salva esta lista." }, "video": { "burnIn": { @@ -2406,6 +2623,11 @@ "translateToEnglish": "Traduzir para inglês", "transcribing": "Transcrevendo...", "transcribingXOfY": "Transcrevendo {0} de {1}...", + "linesTranscribedXOfYFailedZ": "{0} de {1} linhas foram transcritas - {2} falhou ou não há fala.\r\n\r\nAs linhas com falha mantêm o texto atual. Aplicar as linhas transcritas ou tentar novamente as que falharam (você pode alterar o mecanismo ou as configurações primeiro)?", + "linesTranscribedXOfYCancelled": "A transcrição foi cancelada após {0} de {1} linhas.\r\n\r\nAplicar as linhas transcritas? As demais linhas mantêm o texto atual.", + "noLinesTranscribed": "Nenhuma das {0} linhas pôde ser transcrita.\r\nPor favor, verifique o registro de ferramentas para obter detalhes.", + "applyTranscribedLines": "Aplicar transcritas", + "retryFailedLines": "Repetir com falhas", "isolateSpeech": "Isolar a fala (lento)", "isolateSpeechHint": "Remove música e efeitos sonoros antes de transcrever. Oferece menos linhas perdidas e melhor tempo de áudio com música alta, mas leva quase tanto tempo quanto o próprio áudio com uma GPU - e muitas vezes mais sem ela.", "isolatingSpeech": "Isolando a fala...", @@ -2413,6 +2635,9 @@ "detectSpeakers": "Detectar locutores", "detectSpeakersHint": "Inicia cada linha com o locutor, como \"(locutor 0)\", usando a diarização Sortformer da NVIDIA (até 8 locutores). Funciona melhor com backends que dividem linhas onde o locutor muda, como Parakeet e Cohere.", "detectSpeakersNeedsNewerCrispAsr": "\"Detectar locutores\" precisa do Crisp ASR v{0} ou mais recente, mas v{1} está instalado.\r\n\r\nAtualize o Crisp ASR (o botão de engrenagem próximo ao mecanismo) ou desative \"Detectar locutores\".", + "xNeedsNewerCrispAsr": "{0} precisa do Crisp ASR v{1} ou mais recente, mas v{2} está instalado.\r\n\r\nBaixar e instalar a atualização agora?", + "vad": "VAD", + "vadHint": "Detecção de atividade de voz: apenas a fala é transcrita, cortada onde o locutor faz uma pausa.\r\nAutomático: Silero, e somente para os motores que necessitam (Cohere, Mega, Index-Echo).\r\nSilero, FireRedVAD, Whisper-VAD, WebRTC: sempre ativado, para todos os mecanismos Crisp ASR. FireRedVAD é o mais preciso, Whisper-VAD oferece o menor número de cortes mais limpos, mas é o mais lento.\r\nIndex-Echo sempre usa Silero. --vad, --vad-model ou --chunk-seconds nas configurações avançadas têm precedência.", "inputLanguage": "Idioma de entrada", "advancedWhisperSettings": "Configurações avançadas do Whisper", "downloadingSpeechToTextEngine": "Baixando mecanismo de fala para texto", @@ -2507,6 +2732,8 @@ "instructions": "Instruções", "instructionsHint": "Estilo de fala opcional, por ex. “Fale com uma voz calma e calorosa”. Enviado apenas para modelos compatíveis (não tts-1/tts-1-hd)", "openAiSpeedHint": "Velocidade de fala de 0,25 a 4,0 (1,0 é normal). Nem todo modelo suporta isso", + "outputFormat": "Formato de saída", + "outputFormatHint": "Formato de áudio solicitado ao servidor. \"Automático\" pede MP3 e muda para PCM para modelos que retornam apenas PCM (por exemplo, Gemini TTS)", "regenerateAudio": "Regenerar áudio", "autoContinuePlaying": "Continuar reproduzindo automaticamente", "playLine": "Reproduzir linha", @@ -2534,6 +2761,17 @@ "voiceManagerTitle": "TTS - Gerenciador de voz", "voiceManagerDotDotDot": "Gerenciador de voz...", "voiceManagerMenuItem": "Gerenciador de voz TTS...", + "speakFromCurrentLineTitle": "Falar da linha atual", + "speakFromCurrentLineDotDotDot": "Falar da linha atual...", + "speakFromCurrentLineHint": "Lê as linhas em voz alta, uma após a outra, começando na linha atual. Pressione Esc ou clique em outra linha para parar.", + "stopSpeaking": "Parar de falar", + "speakingLineX": "Falando linha {0}... (Esc para parar)", + "playWithSpeechTitle": "Reproduzir com fala", + "playWithSpeechDotDotDot": "Reproduzir com fala...", + "playWithSpeechHint": "Reproduz o vídeo e fala cada linha quando o vídeo chega até ela. Faça uma pausa e busque como de costume; pressione Esc para parar.", + "lowerVideoVolumeWhileSpeaking": "Diminuir volume do vídeo durante fala", + "pauseVideoWhenSpeechRunsLate": "Pausar vídeo quando a fala passar para a próxima linha", + "waitingForSpeechLineX": "Gerando fala para a linha {0}... (Esc para parar)", "voiceKindClone": "Voz clonada", "voiceKindPreset": "Integrada", "voiceKindModel": "Modelo de voz", @@ -2598,14 +2836,29 @@ "advancedTtsSettings": "Configurações avançadas de TTS", "advancedTtsAudioProcessing": "Processamento de áudio", "advancedTtsOutput": "Saída", + "advancedTtsVoiceCloning": "Clonagem de voz", + "cleanCloneReferences": "Referências limpas de clones de voz (Sidon)", + "cleanCloneReferencesDescription": "Remove música, ruído e reverberação do áudio do qual uma voz é clonada: clipes retirados do vídeo e gravações importadas no gerenciador de voz. Usa o modelo de restauração de fala Sidon em audio.cpp (download de 940 MB). A voz clonada não copia mais o fundo, mas uma fala muito baixa ou sobreposta pode sair abafada.", + "cleaningCloneReferencesDotDotDot": "Limpando referências de clone de voz...", + "downloadSidonTitle": "Baixar Sídon?", + "downloadSidonQuestionX": "A limpeza de referências de clones de voz precisa do modelo de restauração de fala Sidon ({0}).\r\nBaixar agora? Sem ele, as referências são usadas como estão.", "proAudioPostProcessing": "Pós-processamento de áudio profissional", "proAudioPostProcessingDescription": "Aplica calor de equalização, gate de ruído, compressão, normalização de volume (-16 LUFS) e fade in/out a cada segmento.", + "generatingSpeechSegmentXOfY": "Gerando fala: segmento {0} de {1}", + "adjustingSpeedSegmentXOfY": "Ajustando velocidade: segmento {0} de {1}", + "mergingAudioSegmentXOfY": "Mesclando áudio: segmento {0} de {1}", + "postProcessingSegmentXOfY": "Pós-processamento: segmento {0} de {1}", "audioDucking": "Ducking de áudio", "audioDuckingDescription": "Reduz o volume do áudio do vídeo original e mistura-o com o áudio TTS, para que a faixa de áudio original ainda seja ligeiramente audível.", "removeOriginalSpeech": "Remover fala original (lento)", "removeOriginalSpeechDescription": "Mantém a música e os efeitos sonoros do vídeo original, mas remove a fala e mistura a nova fala sobre ela. Demora quase tanto quanto o próprio vídeo com uma GPU e muitas vezes mais sem ela. Com a redução de áudio ativada, seu volume se aplica à música e aos efeitos. Aplica-se apenas quando a fala é adicionada ao arquivo de vídeo.", "removingOriginalSpeech": "Removendo a fala original...", "removeOriginalSpeechFailed": "Não foi possível remover a fala original – a fala foi adicionada ao vídeo sem ele.", + "speechRemovalModel": "Modelo", + "speechRemovalModelDescription": "A melhor qualidade mantém a maior parte da música e dos efeitos sonoros. Rápido é cerca de três vezes mais rápido, com um pouco mais de música perdida.", + "speechRemovalBestQuality": "Melhor qualidade (Mel-Band RoFormer)", + "speechRemovalFast": "Rápido (HTDemucs)", + "videoTruncatedWarning": "A imagem no novo arquivo de vídeo para depois de {0}, mas o vídeo original tem {1} de comprimento - a imagem irá congelar enquanto o som continua.\r\n\r\nO arquivo foi mantido. Consulte error-log.txt na pasta de dados do Subtitle Edit para obter a saída do ffmpeg.", "originalVolumePercent": "% do volume original", "vadSilenceCompression": "Compressão de silêncio VAD", "vadSilenceCompressionDescription": "Encurta as pausas entre as palavras antes de alterar o andamento. Usa detecção de atividade de voz para compactar apenas as pausas de silêncio, mantendo a fala intacta. Este é o primeiro passo preferido – reduz a duração sem qualquer perda de qualidade.", @@ -2688,7 +2941,9 @@ "timeCodeFormatColon": "Formato do código de tempo:", "shotChangesList": "Lista de mudanças de cena", "shotChangesClearQuestion": "Tem certeza de que deseja limpar todas as mudanças de cena?", - "deleteSelectedShotChangeQuestion": "Tem certeza de que deseja excluir a mudança de cena selecionada?" + "deleteSelectedShotChangeQuestion": "Tem certeza de que deseja excluir a mudança de cena selecionada?", + "shotChanges": "Mudanças de cena", + "exportShotChanges": "Exportar mudanças de cena" }, "chapters": { "title": "Capítulos", @@ -2751,6 +3006,7 @@ "runningOcrXY": "Executando OCR... {0}/{1}", "noLinesFoundTitle": "Nenhuma legenda encontrada", "noLinesFoundMessage": "Nenhum texto foi encontrado - tente ajustar a área de análise, o mecanismo ou o brilho mínimo.", + "ocrStoppedEarlyMessage": "O mecanismo de OCR parou antes que todos os quadros fossem lidos, portanto as linhas encontradas até o momento são mantidas e o restante desaparece.{0}{0}{1}", "linesFoundX": "{0} linhas encontradas", "refiningTimingXY": "Refinando tempo... {0}/{1}", "fixOcrErrors": "Corrigir erros de OCR", @@ -2853,6 +3109,13 @@ "remuxVideoFailed": "Falha ao remuxar o vídeo.", "remuxVideoPleaseSelectBoth": "Selecione arquivos de vídeo e áudio.", "remuxVideoAssRequiresMkv": "As legendas ASS/SSA requerem o contêiner MKV para preservar toda a formatação e estilos.", + "remuxVideoSccRequiresMov": "As legendas dscenarist (.scc) são incorporadas como legendas ocultas CEA-608, que requerem o contêiner MOV ou MPG.\r\nO formato de saída foi automaticamente alterado para .mov.", + "remuxVideoSccNotWithWebM": "As legendas closed caption scenarist (.scc) precisam do contêiner MOV, que não pode conter o vídeo VP9/AV1 de um arquivo .webm.\r\nRemova o arquivo .scc ou converta-o para outro formato de legenda.", + "remuxVideoMpgMaxTwoCaptionTracks": "Um arquivo .mpg contém no máximo duas faixas de legenda oculta (CC1 e CC3) - remova os arquivos de legenda para que restem um ou dois.", + "remuxVideoMccRequiresMpg": "As legendas MacCaption (.mcc) são incorporadas como legendas ocultas CEA-608/708 no vídeo MPEG-2, o que requer o contêiner MPG.\r\nO formato de saída foi alterado automaticamente para .mpg.", + "remuxVideoMpgReencodeVideoX": "Closed captions em um arquivo .mpg precisam de vídeo MPEG-2 e o vídeo é {0}. Recodificar o vídeo para MPEG-2? Isso demora mais e diminui um pouco a qualidade.", + "remuxVideoFileHasNoAudioX": "\"{0}\" não possui faixa de áudio, portanto não pode ser usado como fonte de áudio.", + "remuxVideoAddingClosedCaptions": "Adicionando closed captions...", "remuxVideoSelectAudioTrack": "Selecione a faixa de áudio", "remuxVideoSelectAudioTrackFor": "Selecione a faixa de áudio para {0}", "remuxVideoSelectAudioTrackPrompt": "O arquivo '{0}' contém {1} faixas de áudio. Selecione a faixa de áudio para remuxar:", @@ -2865,6 +3128,7 @@ "remuxVideoMixAudio": "Mixar áudio em uma faixa", "remuxVideoVolumePercent": "% de volume:", "remuxVideoVolumeX": "% do volume {0}", + "remuxVideoFastStart": "Otimizar para streaming na web (mover o índice para frente - mais lento)", "embedSubtitlesDotDotDot": "Adicionar/remover legendas incorporadas...", "generateTimeCodes": "Gerar códigos de tempo", "checkeredImage": "Imagem quadriculada", @@ -2964,6 +3228,10 @@ "reEncodeGeneratingDone": "Geração concluída", "reEncodeGeneratedFilesX": "Arquivos gerados ({0}):", "reEncodeFfmpegParameters": "parâmetros ffmpeg", + "analyzingVideoX": "Analisando vídeo... {0}% {1}", + "analyzingVideoXofY": "Analisando vídeo {0}/{1}... {2}% {3}", + "backgroundImageFileNotSelected": "Arquivo de imagem de fundo não selecionado", + "backgroundImageFileDoesNotExistX": "O arquivo de imagem de fundo não existe: {0}", "voices": "Vozes", "presets": "Predefinições", "talkerX": "Locutor {0}", @@ -3044,7 +3312,8 @@ "syncPoints": "Pontos de sincronização", "pointSync": "Ponto de sincronização...", "pointSyncViaOther": "Pontos de sincronização via outra legenda", - "syncPointCandidateInfo": "As linhas que começam após {0}+ segundos de silêncio são destacadas. Elas geralmente formam pontos de sincronização confiáveis", + "syncPointCandidateAfterInfo": "Linhas seguidas por {0}+ segundos de silêncio são destacadas. Elas geralmente formam pontos de sincronização confiáveis", + "gapAfter": "Intervalo após", "adjustAllShortcuts": "Atalhos de teclado:\r\n\r\n• Shift + Esquerda/Direita: Mover 10 ms\r\n• Ctrl + Esquerda/Direita: Mover 100 ms\r\n• Alt + Esquerda/Direita: Mover 500 ms", "adjustAllShortcutsFrames": "Atalhos de teclado:\r\n\r\n• Shift + Esquerda/Direita: Move 1 quadro\r\n• Ctrl + Esquerda/Direita: Move 10 quadros\r\n• Alt + Esquerda/Direita: Mover 1 segundo", "offsetInSeconds": "Deslocamento em segundos", @@ -3190,7 +3459,7 @@ "minGapCalculateFrames": "Intervalo mínimo em quadros", "minGapCalculateXFramesAtYGivesZMs": "{0} quadros a uma taxa de quadros de {1} fornecem {2} milissegundos.", "minGapCalculateUseXAsNewGap": "Use \"{0}\" milissegundos como novo intervalo mínimo?", - "maxLines": "Colorir texto se tiver mais de {0} linhas", + "maxLines": "Número máximo de linhas", "unbreakSubtitlesShortThan": "Unir legendas menores que", "autoBreakLineEndingEarly": "Quebra automática antecipada para final de frase (.!?)", "autoBreakCommaBreakEarly": "Quebra automática antecipada para vírgula", @@ -3202,9 +3471,12 @@ "newEmptyDefaultMs": "Duração padrão da nova legenda (ms)", "timeCodeUpDownStepMs": "Incremento de tempo para cima/baixo (ms)", "moveSelectedLinesStepMs": "Etapa de atalho para mover linhas selecionadas (ms)", + "moveStartEndStepMs": "Mover passo de atalho de início/fim (ms)", "moveLinesShortenNeighbor": "Mover linhas: reduza a linha anterior/seguinte em vez de sobrepô-la", "promptBeforeDelete": "Avisar antes de excluir", "rememberPositionAndSize": "Lembrar tamanho e posição da janela principal", + "titleBarFullFileName": "Mostrar caminho completo do arquivo na barra de título", + "showRecentFiles": "Mostrar arquivos recentes (para reabrir)", "openLastFileOnStart": "Abrir último arquivo recente ao iniciar", "autoSave": "Salvar automático (salvar arquivo aberto ao editar)", "autoBackupOn": "Backup automático", @@ -3231,6 +3503,8 @@ "waveformDrawGridLines": "Desenhar linhas de grade", "waveformUseSkiaRenderer": "Use renderizador rápido experimental", "waveformCenterVideoPositionAlsoWhenPaused": "Centralizar a posição do vídeo também quando pausado", + "waveformSelectCurrentSubtitleWhilePaused": "Selecionar legenda atual também durante a pausa", + "waveformRememberZoom": "Lembrar do zoom (horizontal e vertical)", "waveformShowToolbar": "Mostrar barra de ferramentas", "waveformShowToolbarEdit": "Editar barra de ferramentas...", "waveformShowToolbarEditLabel": "Barra de ferramentas forma de onda/espectrograma", @@ -3296,6 +3570,7 @@ "adjustAllTimesRememberLineSelectionChoice": "Ajuste todos os tempos, lembrar da escolha de seleção de linha", "mergeKeepEndTime": "Mesclar linhas: manter o horário de término (permitir sobreposição com a próxima legenda)", "mergeKeepEndTimeOnlyAssa": "Mesclar linhas: manter o horário de término apenas para \"Advanced Sub Station Alpha\"", + "mergeAutoBreak": "Mesclar linhas: quebra automática de texto mesclado (desativado mantém as próprias quebras de linha das linhas)", "filesAndLogs": "Arquivos e registros", "showErrorLogFile": "Mostrar arquivo de registro de erros", "showToolsLogFile": "Mostrar arquivo de registro de ferramentas", @@ -3304,6 +3579,7 @@ "showAssaLayer": "Mostrar caixa de camada ASSA", "waveformCursorColor": "Cursor da forma de onda/cor da cabeça", "waveformShotChangeColor": "Cor da forma de onda na mudança de cena", + "waveformGridColor": "Cor da grade da forma de onda", "waveformParagraphLeftColor": "Cor da borda esquerda da forma de onda", "waveformParagraphRightColor": "Cor da borda direita da forma de onda", "waveformFancyHighColor": "Cor alta da forma de onda sofisticada", @@ -3331,10 +3607,15 @@ "resetSyntaxColoring": "Redefinir coloração de sintaxe", "resetWaveform": "Redefinir forma de onda", "resetRules": "Redefinir regras", - "useFrameMode": "Usar modo de quadro (hh.mm.ss.ff)", + "timeCodeMode": "Modo de código de tempo", + "timeCodeModeTime": "Hora (hh:mm:ss,zzz)", + "timeCodeModeFrames": "Quadros (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "Números de quadros", + "frameModeSnapToVideoFrames": "Armazenar tempos nos quadros do vídeo (não em quadros dentro de cada segundo)", "textBoxLimitNewLines": "Limitar o número de linhas na caixa de texto da legenda", "mpvOpenGl": "libmpv-OpenGL", "mpvSoftwareRendering": "libmpv - Renderização de software (lenta)", + "mpvMetalRendering": "libmpv - Metal (experimental, precisa ser reiniciado)", "mpvWidRendering": "libmpv - Renderização de ID de janela nativa", "waveFormsAndSpectrogramFoldersContainsX": "As pastas \"Waveforms\" e \"spectrogram\" contêm {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "Excluir arquivos \"Waveforms\" e \"Spectrogram\"?", @@ -3408,6 +3689,7 @@ "useFocusedButtonBackgroundColor": "Use a cor de fundo do botão em foco", "focusedButtonBackgroundColor": "Cor de fundo do botão em foco", "forceCrLfOnSave": "Forçar CR+LF ao salvar (arquivos de legenda de texto)", + "linuxClipboardUseExternalTool": "Copiar texto via xclip/wl-copy (mantém caracteres acentuados)", "showFormatLimitWarning": "Avisar ao salvar quando as linhas excederem os limites do formato (por exemplo, SCC 32 caracteres/linha)", "textBoxButtonShowAutoBreak": "Caixa de texto: mostrar botão de interrupção automática", "textBoxButtonShowUnbreak": "Caixa de texto: mostrar botão de desbloqueio", @@ -3420,12 +3702,17 @@ "allSettings": "Todas as configurações", "uiScale": "Escala da interface (%)", "fontScale": "Tamanho da fonte (%)", + "textSelectionOpacity": "Opacidade da seleção de texto (%)", "waveformToolbarItems": "Itens da barra de ferramentas da forma de onda", "matchIconColorToDarkTheme": "Combinar cor do ícone com a cor de primeiro plano do tema escuro", "subtitlePreviewProperties": "Propriedades de pré-visualização de legendas", "usePositionFromSubtitleFile": "Usar posição do arquivo de legenda (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "A margem faz parte da área de legenda", "textJustify": "Justificar linhas", + "deinterlace": "Desentrelaçar vídeo", + "deinterlaceOff": "Não", + "deinterlaceAuto": "Automático (somente quadros entrelaçados)", + "deinterlaceAlways": "Sempre", "pixelWidthInfo": "Linhas verdes = limite de largura máxima | Área vermelha = texto excede o limite", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "Microsoft Word", @@ -3454,11 +3741,34 @@ "categoryVideo": "Vídeo", "categorySync": "Sincronização", "categoryAi": "IA", + "categoryCustom": "Personalizado", + "editCustomShortcut": "Editar atalho personalizado", + "customShortcutTextBoxKeyHint": "Use uma tecla com Ctrl/Alt aqui - uma única tecla não digita mais na caixa de texto.", + "customShortcutNumberX": "Atalho personalizado #{0}", + "customShortcutNumberXY": "Atalho personalizado nº{0}: {1}", + "customShortcutStep": "Etapa", + "customShortcutSteps": "Etapas", + "customShortcutStepRunCommand": "Executar comando", + "customShortcutStepInsertText": "Inserir texto", + "customShortcutStepReplace": "Localizar e substituir", + "customShortcutInsertAtCursor": "No cursor", + "customShortcutInsertAtStart": "No início do texto", + "customShortcutInsertAtEnd": "No final do texto", + "customShortcutSummaryRunCommandX": "Executar: {0}", + "customShortcutSummaryInsertXY": "Inserir \"{0}\" ({1})", + "customShortcutSummaryReplaceXY": "Substituir \"{0}\" por \"{1}", + "customShortcutSummaryReplaceRegexXY": "Substituir expressão regular \"{0}\" por \"{1}", + "customShortcutPickCommand": "Selecione um comando para executar.", + "customShortcutEnterText": "Digite o texto para ser inserido.", + "customShortcutEnterFind": "Digite o texto para ser localizado.", + "customShortcutInvalidRegexX": "Expressão regular inválida: {0}", + "customShortcutStepsHint": "As etapas vão de cima para baixo. As etapas de texto funcionam nas linhas selecionadas; os comandos que abrem uma janela continuam após ela ser fechada.", "activeIn": "Ativo em", "activeInEverywhere": "Em todo lugar", "generalMergeSelectedLinesAndUnbreak": "Mesclar linhas selecionadas e desfazer a quebra", "generalMergeSelectedLinesAndUnbreakCjk": "Mesclar linhas selecionadas e desquebrar CJK", "generalUnbreakNoSpaceCjk": "Remover quebra sem espaço (CJK)", + "generalToggleBreak": "Alternar quebrar/unir", "generalMergeSelectedLinesBilingual": "Mesclar linhas selecionadas bilingue", "generalToggleTranslationMode": "Alternar modo de tradução", "generalToggleTranslationAndOriginalInPreviews": "Alternar tradução e original na visualização de vídeo/áudio", @@ -3480,6 +3790,7 @@ "fileOpenKeepVideo": "Abrir (manter vídeo)", "fileSave": "Salvar", "fileSaveAs": "Salvar como", + "fileSaveOriginal": "Salvar original", "fileCompare": "Comparar", "fileStatistics": "Estatísticas", "fileImportPlainText": "Importar texto simples", @@ -3500,6 +3811,7 @@ "detectKey": "Detectar tecla", "control": "Control", "alt": "Alt.", + "altGr": "AltGr", "win": "Win", "shift": "Shift", "controlMac": "⌃", @@ -3510,6 +3822,11 @@ "resetShortcutsDetail": "Deseja redefinir todos os atalhos para os valores padrão?", "togglePlayPause": "Alternar reproduzir/pausar", "toggleLockTimeCodes": "Alternar códigos de tempo de bloqueio", + "toggleTimeCodeMode": "Alternar modo de código de tempo (tempo/quadros/números de quadros)", + "toggleScreenPrivacy": "Alternar privacidade da tela (ocultar nomes de arquivos e também textos)", + "screenPrivacyFileNamesHidden": "Privacidade da tela: nomes de arquivos ocultos", + "screenPrivacyFileNamesAndTextsHidden": "Privacidade da tela: nomes de arquivos e textos ocultos", + "screenPrivacyOff": "Privacidade da tela: desativada", "duplicateSelectedLines": "Duplicar linhas selecionadas", "sourceView": "Visualização de origem", "addOrEditBookmark": "Adicionar ou editar marcador", @@ -3558,6 +3875,7 @@ "listViewColumnTextUp": "Coluna, texto para cima", "listViewColumnTextDown": "Coluna, texto para baixo", "autoTranslateSelectedLines": "Tradução automática das linhas selecionadas...", + "autoTranslateSelectedLinesNoPrompt": "Traduzir automaticamente as linhas selecionadas (sem aviso, use o último mecanismo/idiomas)", "setAssaResolution": "Definir resolução ASSA (PlayResX/PlayResY)", "setShortcutForX": "Definir atalho para \"{0}", "commandFileNewKeepVideo": "Novo (manter vídeo)", @@ -3638,6 +3956,14 @@ "surroundWith": "Cercar com...", "surroundWithXY": "Cercar com {0}/{1}", "surroundWithNumberX": "Cercar com #{0}", + "surroundWithBehavior": "Comportamento", + "surroundWithBehaviorToggle": "Alternar (adicionar ou remover, se presente)", + "surroundWithBehaviorAdd": "Adicionar (sempre)", + "surroundWithBehaviorRemove": "Remover (todos)", + "surroundWithBehaviorRemoveOnce": "Remover (um de cada vez)", + "surroundWithWorksOn": "Funciona em", + "surroundWithScopeSelectionOrText": "Seleção, caso contrário, texto inteiro", + "surroundWithScopeEachLine": "Cada linha", "searchVia": "Pesquisar pelo", "searchViaX": "Pesquisar pelo {0}", "searchViaNumberX": "Pesquisar pelo #{0}", @@ -3665,6 +3991,11 @@ "copySubtitlePathToClipboard": "Copie o caminho da legenda para a área de transferência", "copySubtitleOriginalPathToClipboard": "Copie o caminho da legenda do original para a área de transferência", "focusTextBox": "Focar caixa de texto", + "focusSubtitleListView": "Focar visualização da lista de legendas", + "focusWaveform": "Focar forma de onda", + "focusOriginalTextBox": "Focar caixa de texto original", + "textBoxGoToStart": "Caixa de texto, ir para início", + "textBoxGoToEnd": "Caixa de texto, ir para final", "sortByNumber": "Classificar por número", "sortByStartTime": "Classificar por tempo de \"Mostrar\"", "sortByEndTime": "Classificar por tempo de \"Ocultar\"", @@ -3704,6 +4035,7 @@ "googleIt": "Pesquisar no Google (texto selecionado)", "setActorX": "Definir ator: {0}", "setNewActor": "Definir novo ator...", + "setStyleX": "Definir estilo: {0}", "toggleDialogDashes": "Alternar traços de diálogo", "mergeWithLineBeforeAsDialog": "Mesclar com linha anterior como diálogo", "mergeWithLineAfterAsDialog": "Mesclar com linha após a caixa de diálogo", @@ -3715,6 +4047,10 @@ "moveStartOneFrameForwardKeepGapPrev": "Mover início um quadro para frente (manter pausa em relação ao anterior se estiver próximo)", "moveEndOneFrameBackKeepGapNext": "Mover final um quadro para trás (manter pausa para o próximo se estiver próximo)", "moveEndOneFrameForwardKeepGapNext": "Mover final um quadro para frente (manter pausa para o próximo se estiver próximo)", + "moveStartXMsBack": "Mover início X ms para trás (X definido em Configurações, também no Visual Sync)", + "moveStartXMsForward": "Mover início X ms para frente (X definido em Configurações, também no Visual Sync)", + "moveEndXMsBack": "Mover final X ms para trás (X definido em Configurações, também no Visual Sync)", + "moveEndXMsForward": "Mover final X ms para frente (X definido em Configurações, também no Visual Sync)", "moveSelectedLinesXMsBack": "Mover as linhas selecionadas X ms para trás (X definido em Configurações)", "moveSelectedLinesXMsForward": "Mover as linhas selecionadas X ms para frente (X definido em Configurações)", "moveSelectedLinesAndForwardXMsBack": "Mover as linhas selecionadas e todos os X ms seguintes para trás (X definido em Configurações)", @@ -3869,6 +4205,8 @@ "binaryImageCompareInspectImageMatches": "\"Comparação de imagens binárias\" - inspecionar correspondências de imagens", "saveBlankTextTitle": "Salvar texto em branco?", "saveBlankTextPrompt": "Salvar texto em branco para imagem?", + "drawnLinesDoNotMatchTitle": "As linhas não correspondem à imagem", + "drawnLinesDoNotMatchPrompt": "Algumas das linhas desenhadas não correspondem à imagem (as linhas verdes devem estar no caractere, as linhas vermelhas devem estar fora dele), portanto este caractere não será reconhecido.\r\n\r\nSalvar mesmo assim?", "yesAndNeverAskAgain": "Sim e não perguntar novamente", "importTextFromSubtitleDotDotDot": "Importar texto da legenda...", "importTextFromSubtitleOverwritePrompt": "Algumas linhas já possuem texto OCR. Substituir o texto existente?", @@ -3927,9 +4265,26 @@ "crispEmbedSettingsTitle": "Configurações do CrispEmbed", "crispEmbedDescription": "Mecanismo de OCR local com backends de vários modelos - baixe o mecanismo e os modelos aqui.", "trainNOcrDatabase": "Banco de dados de treino nOCR...", + "optimizeNOcrDatabase": "Otimizar banco de dados nOCR...", + "optimizeNOcrDatabaseQuestionXY": "Remover as linhas que não diferenciam caracteres de caracteres semelhantes no banco de dados nOCR \"{0}\"?\r\n\r\nIsso torna o banco de dados menor e o OCR mais rápido, geralmente com menos erros. Leva até um minuto.\r\n\r\nUm backup é salvo como \"{1}\".", + "optimizingNOcrDatabaseXY": "Otimizando banco de dados nOCR... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "Banco de dados nOCR \"{0}\" otimizado: {1:#,##0} -> {2:#,##0} linhas.", "startTraining": "Iniciar treinamento", "abortTraining": "Parar treinamento", "trainingOptions": "Opções de treinamento", + "trainNOcrSubtitle": "Renderiza caracteres em fontes instaladas e ensina suas formas ao nOCR. Escolha as fontes que suas legendas usam.", + "xFontsSelected": "{0:#,##0} selecionado", + "subtitleFonts": "Fontes de legenda", + "emptyDatabase": "Esvaziar banco de dados", + "startFromDatabase": "Começar de", + "startFromDatabaseHint": "Adicione os caracteres treinados a uma cópia de um banco de dados existente (recomendado) ou comece a partir de um banco de dados vazio", + "fontSizes": "Tamanhos de fonte", + "fontSizesHint": "Tamanhos de fonte em pixels para renderização, separados por vírgulas, por exemplo. \"30, 40\"", + "numberOfLineSegmentsHint": "Linhas verificadas por caractere - mais é mais rigoroso, mas mais lento", + "enterDatabaseName": "Insira um nome para o banco de dados", + "trainingFontXSizeYCharacterZ": "Treinando \"{0}\" em {1} px: {2}", + "xLearned": "{0:#,##0} aprendido", + "xSkipped": "{0:#,##0} ignorado", "charactersToTrain": "Caracteres para treinar", "letterCombinationsToTrain": "Combinações de letras que podem ser divididas em uma imagem", "importCharactersFromSubtitleFile": "Importar caracteres do arquivo de legenda...", @@ -3956,6 +4311,8 @@ "drawZoomOut": "Diminuir zoom (Ctrl+-)", "drawResetView": "Redefinir visualização (Ctrl+0)", "drawToggleGrid": "Alternar grade (Ctrl+G)", + "drawTogglePreview": "Alternar pré-visualização (F9)", + "drawPreviewFailed": "Falha na pré-visualização - ffmpeg com libass (filtro de legendas) é necessário", "drawCopyToClipboard": "Copiar para a área de transferência (Ctrl+C)", "drawShapes": "Formas", "drawSelectedPoint": "Ponto selecionado", @@ -3963,6 +4320,81 @@ "drawSelectedLayer": "Camada selecionada", "drawToolX": "Ferramenta: {0}", "drawHelpText": "Clique para adicionar pontos • Enter/F8 para fechar a forma • Shift+Arrastar para deslocar • Ctrl+Scroll para ampliar", + "drawMoveToLayer": "Mover para camada", + "drawFlipHorizontal": "Virar horizontalmente", + "drawFlipVertical": "Virar verticalmente", + "drawHideShape": "Ocultar forma", + "drawShowShape": "Mostrar forma", + "drawHideLayer": "Ocultar camada", + "drawShowLayer": "Mostrar camada", + "drawDeleteLayer": "Excluir camada", + "drawDeletePoint": "Excluir ponto", + "drawCancelDrawing": "Cancelar desenho", + "drawLayerX": "Camada {0}", + "drawImportSvg": "Importar imagem SVG...", + "drawRotateClockwise": "Girar 90° no sentido horário", + "drawConvertToCurve": "Converter segmento em curva", + "drawBackground": "Fundo", + "drawPosition": "Posição", + "drawZoom": "Zoom", + "drawShapeTool": "Ferramenta de forma", + "drawColorPickerTool": "Escolha a cor de uma forma ou do fundo", + "drawShapeLibrary": "Biblioteca de formas", + "drawShapeLibraryHint": "Arraste na tela para colocar uma forma ou clique para obter o tamanho padrão. Shift mantém suas proporções.", + "drawAddToLibrary": "Adicionar à biblioteca de formas...", + "drawRemoveFromLibrary": "Remover da biblioteca de formas", + "drawShapeName": "Nome da forma", + "drawCategorySpeechBubbles": "Bolhas de fala", + "drawCategoryArrows": "Setas", + "drawCategoryBasicShapes": "Formas básicas", + "drawCategorySymbols": "Símbolos", + "drawCategoryMyShapes": "Minhas formas", + "drawShapeSpeechBubble": "Bolha de fala", + "drawShapeSpeechBubbleRight": "Balão de fala, rabicho na direita", + "drawShapeSpeechBubbleUp": "Bolha de fala, rabicho para cima", + "drawShapeOvalBubble": "Bolha de fala oval", + "drawShapeBoxBubble": "Bolha de fala de caixa", + "drawShapeThoughtBubble": "Balão de pensamento", + "drawShapeShoutBubble": "Bolha de grito", + "drawShapeCaptionBox": "Caixa de legenda", + "drawShapeArrow": "Seta", + "drawShapeDoubleArrow": "Seta dupla", + "drawShapeChevron": "Chevron", + "drawShapeCurvedArrow": "Seta curvada", + "drawShapeRoundedRectangle": "Retângulo arredondado", + "drawShapeTriangle": "Triângulo", + "drawShapeDiamond": "Diamante", + "drawShapePentagon": "Pentágono", + "drawShapeHexagon": "Hexágono", + "drawShapeOctagon": "Octógono", + "drawShapeStar": "Estrela", + "drawShapeRing": "Anel", + "drawShapePlus": "+", + "drawShapeBanner": "Banner", + "drawShapeHeart": "Coração", + "drawShapeCheck": "Marca de verificação", + "drawShapeMusicNote": "Nota musical", + "drawShapeMusicNotes": "Notas musicais", + "drawShapeLightning": "Raio", + "drawShapeCloud": "Nuvem", + "drawShapeMoon": "Lua", + "drawShapeBadge": "Selo", + "drawSize": "Tamanho", + "drawLayer": "Camada", + "drawBackgroundVideoFrame": "Quadro de vídeo (posição atual)", + "drawBackgroundVideoFrameAt": "Quadro de vídeo em...", + "drawBackgroundImage": "Arquivo de imagem...", + "drawBackgroundNone": "Sem fundo", + "drawBackgroundStretch": "Esticar imagem para tela", + "drawBackgroundOpacity": "Opacidade de fundo", + "drawBackgroundVideoFrameFailed": "Não foi possível obter um quadro de vídeo em {0}.", + "drawImages": "Imagens", + "drawConvertToLine": "Converter segmento em linha", + "drawConvertShapeToCurves": "Converter todas as linhas em curvas", + "drawConvertShapeToLines": "Converter todas as curvas em linhas", + "drawRotateCounterClockwise": "Girar 90° no sentido anti-horário", + "drawSvgImages": "Imagens SVG", + "drawSvgNoShapes": "Nenhuma forma preenchida ou traçado encontrado no arquivo SVG.", "progressBarTitle": "Barra de progresso ASSA", "progressBarSettings": "Barra de progresso", "mouseOverColor": "Cor ao passar o mouse", @@ -4059,13 +4491,26 @@ "graphics": "Gráficos", "copyToStorageStyles": "Copiar para estilos de armazenamento", "copyToFileStyles": "Copiar para estilos de arquivo", + "styleXAlreadyExistsInStorage": "Um estilo chamado \"{0}\" já existe no armazenamento.\r\n\r\nSubstituí-lo ou manter ambos (a cópia ganha um novo nome)?", + "styleXAlreadyExistsInFile": "Um estilo chamado \"{0}\" já existe no arquivo.\r\n\r\nSubstituí-lo ou manter ambos (a cópia ganha um novo nome)?", + "styleNameCannotBeEmpty": "Um nome de estilo não pode estar vazio.", + "styleNameXIsUsedMoreThanOnce": "O nome do estilo \"{0}\" é usado por mais de um estilo no arquivo.", + "overwrite": "Substituir", + "keepBoth": "Manter ambos", + "doThisForAllConflictingStyles": "Fazer para todos os estilos com conflito", "setStyleAsDefault": "Definir estilo como padrão", "takeUsagesFromDotDotDot": "Faça uso de ...", "replaceStyleWithDotDotDot": "Substituir estilo por...", "noAttachmentsFound": "Nenhum anexo encontrado no arquivo ASSA selecionado.", "deleteStyleQuestion": "Excluir estilo?", "deleteStylesQuestion": "Excluir estilos?", + "deleteXStylesQuestion": "Deseja excluir {0} estilos?", + "deleteXStylesFromStorageQuestion": "Deseja excluir {0} estilos do armazenamento?", + "deleteStyleXFromStorageQuestion": "Deseja excluir o estilo \"{0}\" do armazenamento?", + "deleteStyleXFromFileQuestion": "Deseja excluir o estilo \"{0}\" do arquivo atual?", "openStyleImportFile": "Abra o arquivo de legenda para importar estilos de", + "styleImportFiles": "Arquivos de estilo (.ass, .sty, .template de categorias do Subtitle Edit 4)", + "ssaStyleImportFiles": "Arquivos de estilo (.ssa, .ass, .sty)", "primary": "Primário", "secondary": "Secundário", "applyOverrideTags": "Aplicar tags de substituição", diff --git a/src/ui/Assets/Languages/Portuguese.json b/src/ui/Assets/Languages/Portuguese.json index 2e5482566af..ba2113a1ffd 100644 --- a/src/ui/Assets/Languages/Portuguese.json +++ b/src/ui/Assets/Languages/Portuguese.json @@ -1,9 +1,48 @@ { "title": "Subtitle Edit", - "version": "v5.2.0-rc7", + "version": "v5.3.0", "translatedBy": "Hugo Carvalho (hugok79) e Filipe Mota (BlackSpirits)\nE-mail: hugokarvalho@hotmail.com / blackspirits@gmail.com\nAntigo tradutor: Marco Barbosa (moob)", "cultureName": "pt-PT", "general": { + "temperature": "Temperatura", + "preset": "Predefinição", + "output": "Saída", + "outputFormat": "Formato de saída", + "other": "Outras", + "timeCodeFormat": "Formato do tempo", + "topBottomMargin": "Margem superior/inferior", + "theme": "Tema", + "brightness": "Brilho", + "chooseColor": "Escolher cor", + "lineX": "Linha {0}", + "playLine": "Reproduzir linha", + "maxLineLength": "Comprimento máximo da linha", + "maxCharsPerSec": "Máximo de caracteres/s", + "maxNumberOfLines": "Número máximo de linhas", + "subtitles": "Legendas", + "shotChanges": "Mudanças de cena", + "chapters": "Capítulos", + "audio": "Áudio", + "interjections": "Interjeições", + "blankLines": "Linhas em branco", + "editWholeText": "Editar todo o texto", + "noTextInClipboard": "Nenhum texto na área de transferência", + "noSubtitlesFoundTitle": "Nenhuma legenda encontrada", + "replacedXOccurrences": "Substituídas {0} ocorrências", + "invalidRegularExpressionX": "Expressão regular inválida: {0}", + "discardChangesTitle": "Descartar alterações?", + "downloadingXDotDotDot": "A transferir {0}...", + "importTimeCodesDotDotDot": "Importar códigos de tempo...", + "nextChange": "Alteração seguinte", + "previousChange": "Alteração anterior", + "changeXOfY": "Mudança {0} de {1}", + "tooLong": "Demasiado longa", + "tooShort": "Demasiado curta", + "overlapping": "Sobreposta", + "detail": "Detalhe", + "fixOcrErrors": "Corrigir erros de OCR", + "runningOcrXY": "A executar OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "O llama.cpp requer a transferência do motor llama-server. Transferir agora?", "assistedMove": "Mover assistido", "assistedMoveChooseMove": "Clique numa opção ou prima o respetivo número para mover palavras", "assistedMoveDotDotDot": "Mover assistido...", @@ -71,6 +110,24 @@ "abort": "Cancelar", "actor": "Ator", "actors": "Atores", + "setActorDotDotDot": "Definir ator...", + "actorPickerTitle": "Definir ator", + "actorPickerFilterHint": "Escreva para filtrar ou escreva o nome de um novo ator", + "actorPickerKeysHint": "Prima um número ou Enter para definir o ator. Alt+Cima/Baixo altera a ordem, Delete remove o ator.", + "actorPickerNewActorX": "Novo ator \"{0}\"", + "actorPickerLinesSelectedX": "Linhas selecionadas: {0}", + "setStyleDotDotDot": "Definir estilo...", + "stylePickerTitle": "Definir estilo", + "stylePickerFilterHint": "Escreva para filtrar ou escreva o nome de um novo estilo", + "stylePickerKeysHint": "Prima um número (1-9, 0) para definir o estilo em todas as linhas selecionadas.", + "stylePickerNewStyleX": "Novo estilo \"{0}\"", + "stylePickerNewStyleInfo": "Prima Enter para adicionar este estilo com as definições predefinidas e aplicá-lo às linhas selecionadas. Utilize \"Gerir estilos...\" para alterar mais tarde o tipo de letra, as cores e a posição.", + "stylePickerCurrentStyleX": "Estilo atual: {0}", + "stylePickerLinesUsingStyleX": "Linhas que utilizam este estilo: {0}", + "stylePickerMarginsXYZ": "Esquerda {0}, direita {1}, vertical {2}", + "stylePickerSetStyle": "_Definir estilo", + "stylePickerManageStyles": "Gerir estilos...", + "stylePickerManageStylesHint": "Fechar esta janela e abrir o gestor de estilos para editar tipos de letra, cores, posição e mais", "add": "Adicionar", "addDotDotDot": "Adicionar...", "addToNamesListCaseSensitive": "Adicionar à lista de nomes (diferencia maiúsculas de minúsculas)", @@ -79,7 +136,6 @@ "adjustAlpha": "Ajustar alfa (transparência)", "adjustDisplayDuration": "Ajustar a duração da visualização", "adjustment": "Ajuste", - "advanced": "Avançadas", "advancedSettings": "Definições avançadas", "after": "Depois", "alignment": "Alinhamento", @@ -115,7 +171,6 @@ "batchMode": "Modo múltiplos ficheiros", "bdnXml": "BDN/xml", "before": "Antes", - "beforeX": "Antes de \"{0}\"", "beginning": "Início", "bluRaySup": "Blu-ray (sup)", "bold": "Negrito", @@ -127,7 +182,6 @@ "bookmarkEdit": "Editar marcador...", "bookmarkEditForSelectedLinesX": "Editar marcador para {0} linhas selecionadas", "bookmarksList": "Listar marcadores", - "borderColor": "Cor do contorno", "borderStyle": "Estilo do contorno", "bottomCenter": "Inferior-centro", "bottomLeft": "Inferior-esquerdo", @@ -152,7 +206,6 @@ "changeCasing": "Inverter maiúsculas/minúsculas", "changeFormatting": "Alterar formatação", "changeFrameRate": "Alterar a taxa de fotogramas", - "changeLanguageFilter": "Alterar o filtro de idioma...", "changeOnce": "Alterar uma vez", "changeSpeed": "Alterar velocidade", "character": "Caráter", @@ -177,7 +230,6 @@ "conversionCancelledByUser": "Conversão cancelada pelo utilizador", "convert": "Converter", "converted": "Convertido", - "convertingDotDotDot": "A converter...", "convertingXofYDotDoDot": "A converter {0:#,###,##0}/{1:#,###,##0}...", "copy": "Copiar", "copyImageToClipboard": "Copiar imagem para a área de transferência", @@ -185,7 +237,6 @@ "couldNotSaveFileXErrorY": "Não foi possível guardar o ficheiro \"{0}\". Erro: {1}", "count": "Contagem", "cps": "Caracteres/seg", - "currentSubtitle": "Legenda atual", "currentVideoPosition": "Posição de vídeo atual", "custom": "Personalizado", "cut": "Cortar", @@ -231,7 +282,6 @@ "expand": "Expandir", "export": "Exportar", "exportDotDotDot": "Exportar...", - "exportToX": "Exportar para {0}", "extendAfter": "Estender/encurtar para a linha depois", "extendBefore": "Estender/encurtar a linha antes", "extendSelectedLinesToNextShotChangeOrNextSubtitle": "Prolongar linhas selecionadas até à mudança de cena seguinte (ou linha seguinte)", @@ -248,7 +298,6 @@ "fileExtension": "Extensão do ficheiro", "fileName": "Nome do ficheiro", "fileNameX": "Nome do ficheiro: {0}", - "fileNameXAndSize": "Nome do ficheiro: {0} ({1})", "fileSaved": "Ficheiro guardado", "fileSavedToX": "Ficheiro guardado em {0}", "fileXAlreadyExists": "O ficheiro \"{0}\" já existe.", @@ -258,8 +307,6 @@ "find": "Localizar", "findNext": "Localizar seguinte", "findTextX": "Localizar texto - {0}", - "fiveHundredMilliseconds": "500 milissegundos", - "fiveSeconds": "Cinco segundos", "fix": "Corrigir", "fixCommonErrors": "Corrigir erros comuns", "fixRightToLeft": "Corrigir da direita para a esquerda", @@ -283,14 +330,12 @@ "foundXInLineYZ": "Foi encontrado \"{0}\" na linha {1}, posição {2}", "foundXMatches": "Foram encontradas {0} correspondências", "frameRate": "Taxa de fotogramas", - "frameRateX": "Fotogramas por segundo: {0:0.0###}", "frames": "Fotogramas", "from": "De", "fromCurrentVideoPosition": "da posição atual do vídeo", "fullScreen": "Ecrã inteiro", "gap": "Intervalo", "general": "Geral", - "generalText": "Geral", "generate": "Gerar", "generateImportShotChanges": "Gerar/importar mudanças de cena", "generating": "A gerar...", @@ -308,12 +353,8 @@ "help": "Ajuda", "hex": "Hex", "hide": "Ocultar", - "hidePreview": "Ocultar pré-visualização", "history": "Histórico", "horizontal": "Horizontal", - "hourMinutesSecondsDecimalSeparatorMilliseconds": "Hora:min:seg{0}ms", - "hourMinutesSecondsFrames": "Hora:min:seg:fotogramas", - "ip": "IP", "id": "ID", "image": "Imagem", "imageSaved": "Imagem guardada", @@ -372,6 +413,7 @@ "mergeSelectedLinesDialog": "Combinar as linhas selecionadas como diálogo", "mergeWithLineAfterAndAutoBreak": "Combinar com a linha seguinte e quebrar automaticamente", "mergeWithLineAfterKeepBreaks": "Combinar com a linha seguinte (manter quebras)", + "mergeWithLineAfterAndUnbreak": "Combinar com a linha seguinte e eliminar quebras", "mergeWithLineBeforeAndAutoBreak": "Combinar com a linha anterior e quebrar automaticamente", "mergeWithLineBeforeKeepBreaks": "Combinar com a linha anterior (manter quebras)", "middleCenter": "Centro-meio", @@ -386,11 +428,11 @@ "moveAllShotChangeOneFrameForward": "Mover todas as mudanças de cena um fotograma para a frente", "multiMode": "Modo múltiplo", "moveDown": "Mover para baixo", + "increase": "Aumentar", + "decrease": "Diminuir", "moveUp": "Mover para cima", "multipleReplace": "Múltipla substituição", - "mute": "Mudo", "name": "Nome", - "negative": "Negativo", "new": "Novo", "newDotDotDot": "Novo...", "newProfile": "Novo perfil", @@ -418,20 +460,15 @@ "offsetY": "Desvio Y", "ok": "_OK", "oneFile": "Um ficheiro", - "oneHundredMilliseconds": "100 milissegundos", - "oneSecond": "Um segundo", "oneSecondBack": "Atrasar 1 segundo", "oneSecondForward": "Adiantar 1 segundo", - "onlineVideoFeatureNotAvailable": "Funcionalidade não disponível para vídeo online", "openContainingFolder": "Abrir pasta", "openDictionaryFolder": "Abrir pasta do dicionário", "openFile": "Abrir ficheiro", "openImageBasedSubtitle": "Abrir legenda baseada em imagem", "openImageFile": "Abrir ficheiro de imagem", - "openOriginalSubtitleFile": "Abrir legenda original...", "openOriginalSubtitleFileTitle": "Abrir ficheiro de legenda original", "openOutputFolder": "Abrir pasta de saída", - "openSubtitle": "Abrir legenda...", "openSubtitleFileTitle": "Abrir ficheiro de legenda", "openSubtitles": "Abrir legendas...", "openVideoFile": "Abrir ficheiro de vídeo...", @@ -444,11 +481,6 @@ "outlineWidth": "Largura do contorno", "outputFolder": "Pasta de saída", "outputProperties": "Propriedades de saída", - "overlap": "Sobrepor", - "overlapNextX": "Sobrepor a seguinte ({0:#;##0.###})", - "overlapPreviousLineX": "Sobrepor linha anterior ({0:#;##0.###})", - "overlapStartAndEnd": "Sobrepor início e fim", - "overlapX": "Sobrepor ({0:#;##0.###})", "overwriteExistingFiles": "Substituir ficheiros existentes", "overwriteFilesInFolderX": "Substituir ficheiros na pasta: \"{0}\"", "overwriteQuestion": "Substituir?", @@ -461,6 +493,7 @@ "percent": "Percentagem", "pickLayer": "Definir camada", "pickOllamaModel": "Escolher modelo Ollama", + "pickModel": "Escolher modelo", "llamaCppUseRemoteServer": "Utilizar servidor externo (URL)", "pickOutputFolder": "Escolher pasta de saída", "pickResolutionFromCurrentVideo": "Escolher resolução do vídeo atual", @@ -504,7 +537,6 @@ "refresh": "Atualizar", "region": "Região", "regularExpression": "Expressão regular", - "regularExpressionIsNotValid": "Expressão regular não válida!", "relativeToCurrentVideoPosition": "Em relação à posição do vídeo atual", "remove": "Remover", "removeAlignment": "Remover alinhamento", @@ -529,7 +561,7 @@ "reset": "Repor", "resizePanels": "Redimensionar painéis", "resolution": "Resolução", - "resolutionX": "Resolução: {0}", + "retry": "Tentar novamente", "reverseRightToLeftStartEnd": "Inverter RTL início/fim", "right": "Direita", "rightToLeft": "Direita para a esquerda", @@ -567,8 +599,6 @@ "selectedlinesX": "Linhas selecionadas: {0}", "sensitivity": "Sensibilidade", "separator": "Separador", - "sessionKey": "Nome de sessão", - "sessionKeyGenerate": "Gerar nova chave", "setEnd": "Definir fim", "setEndAndGoToNext": "Definir fim e ir para o seguinte", "setEndAddNewAndGoToNew": "Definir fim, adicionar nova e ir para a nova", @@ -591,8 +621,9 @@ "shadowColor": "Cor da sombra", "shadowWidth": "Largura da sombra", "shiftLineBy": "Deslocar linha em", + "shotIn": "Entrada de cena", + "shotOut": "Saída de cena", "shortcut": "Atalho", - "shortcutX": "Atalho: {0}", "shortcuts": "Atalhos", "show": "Mostrar", "showActorColumn": "Mostrar coluna \"Ator\"", @@ -603,17 +634,19 @@ "showStartColumn": "Mostrar coluna \"Início\"", "showHideColumn": "Mostrar coluna \"Ocultar\"", "showHistory": "Mostrar histórico", + "clearHistory": "Limpar histórico", + "removeFromHistory": "Remover do histórico", "showLayerColumn": "Mostrar coluna \"Camada\"", "showPreview": "Mostrar pré-visualização", "showShotChangesList": "Mostrar lista de mudanças de cena", + "showShotInColumn": "Mostrar coluna \"Entrada de cena\"", + "showShotOutColumn": "Mostrar coluna \"Saída de cena\"", "showStyleColumn": "Mostrar coluna \"Estilo\"", "showTeletext": "Mostrar coluna de teletexto na lista", "showTimeCodes": "Mostrar tempos", "showWpmColumn": "Mostrar coluna \"Palavras/min\"", "showPixelWidthColumn": "Mostrar coluna \"Largura do pixel\"", "shrink": "Encolher", - "singleBox": "Caixa única", - "singleLineLengths": "Comprimento da linha:", "singleMode": "Modo único", "textTotalLength": "Texto - comprimento total", "textSingleLineMaxLength": "Texto - comprimento máximo de uma linha", @@ -662,16 +695,16 @@ "strikeout": "Rasurado", "style": "Estilo", "styleExaggeration": "Exagero de estilo", - "styleLanguage": "Estilo / Idioma", "styles": "Estilos", "subtitleFile": "Ficheiro de legenda", + "subtitleFileChangedOutsideX": "O ficheiro \"{0}\" foi alterado fora do Subtitle Edit.\n\nRecarregá-lo e perder as suas alterações?", "subtitleFileName": "Nome do ficheiro de legenda", "subtitleFileSaved": "Ficheiro de legenda guardado", "subtitleFileSavedToX": "Ficheiro de legenda guardado em {0}", "subtitleFiles": "Ficheiros de legendas", "subtitleFormats": "Formatos de legendas", "subtitleLoadedX": "Legenda carregada: {0}", - "subtitleXOfY": "Legenda {0} de {1}", + "subtitleReloadedChangedOutsideX": "Legenda recarregada (alterada fora do Subtitle Edit): {0}", "suffix": "Sufixo", "suggestions": "Sugestões", "sync": "Sincronizar", @@ -683,7 +716,6 @@ "teletextColor": "Cor do teletexto", "teletextLine": "Linha de teletexto", "tenHours": "10 horas", - "tenMilliseconds": "10 milissegundos", "text": "Texto", "textColor": "Cor do texto", "textFiles": "Ficheiros de texto", @@ -710,9 +742,6 @@ "topRight": "Superior-direito", "top": "Superior", "totalAdjustmentX": "Total de ajustes: {0}", - "totalFramesX": "Total de fotogramas: {0:#;##0.##}", - "totalLengthX": "Comprimento total: {0}", - "totalLengthXSplitLine": "Comprimento total: {0} (dividir linha!)", "translate": "Traduzir", "translatePercentX": "A traduzir: {0}%", "translateRow": "Traduzir linha", @@ -721,6 +750,7 @@ "type": "Tipo", "unbreak": "Eliminar quebra de linha", "unbreakLines": "Eliminar quebras de linha", + "undelete": "Recuperar eliminadas", "underline": "Sublinhado", "undo": "Anular", "unknown": "Desconhecido", @@ -740,13 +770,11 @@ "usages": "Utilizações", "use": "Utilizar", "useAlways": "Utilizar sempre", - "useLargerFontForThisWindow": "Utilizar um tipo de letra maior para esta janela", "useOnce": "Utilizar uma vez", "useOutputFolder": "Utilizar pasta de saída", "useSourceFolder": "Utilizar pasta de origem", "useSourceResolution": "Utilizar resolução original", "userName": "Utilizador", - "userNameAlreadyInUse": "Utilizador em utilização", "vertical": "Vertical", "video100MsBack": "Vídeo, há 100 milissegundos", "video100MsForward": "Vídeo, 100 milissegundos à frente", @@ -760,14 +788,25 @@ "videoCustom3ForwardX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) à frente, 3", "videoCustom4BackX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) atrás, 4", "videoCustom4ForwardX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) à frente, 4", - "videoEncodingX": "Codificação de vídeo: {0}", + "videoCustom1BackAndPauseX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) atrás e pausar, 1", + "videoCustom1ForwardAndPauseX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) à frente e pausar, 1", + "videoCustom2BackAndPauseX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) atrás e pausar, 2", + "videoCustom2ForwardAndPauseX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) à frente e pausar, 2", + "videoCustom3BackAndPauseX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) atrás e pausar, 3", + "videoCustom3ForwardAndPauseX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) à frente e pausar, 3", + "videoCustom4BackAndPauseX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) atrás e pausar, 4", + "videoCustom4ForwardAndPauseX": "Vídeo, milissegundos personalizados ({0:#,###,##0}) à frente e pausar, 4", "videoExtension": "Extensão de ficheiro de vídeo", "videoFile": "Ficheiro de vídeo", "videoFileGenerated": "Ficheiro de vídeo gerado", "videoFileGeneratedX": "Ficheiro de vídeo gerado: \"{0}\"", + "videoFilesGenerated": "Ficheiros de vídeo gerados", + "xVideosGenerated": "{0} vídeos gerados", + "xOfYVideosGenerated": "{0} de {1} vídeos gerados", + "savedInX": "Guardado em {0}", + "savedInXFolders": "Guardado em {0} pastas", "videoFiles": "Ficheiros de vídeo", "videoAndAudioFiles": "Ficheiros de vídeo e áudio", - "videoInformation": "Informações do vídeo", "videoOffset": "Desvio do vídeo", "videoOneFrameBack": "Vídeo, um fotograma atrás", "videoOneFrameForward": "Vídeo, um fotograma à frente", @@ -778,7 +817,6 @@ "videoPlayer": "Reprodutor de vídeo", "videoPosition": "Posição do vídeo", "videoResolution": "Resolução de vídeo", - "viewX": "Ver {0}", "visible": "Visível", "voice": "Voz", "volume": "Volume", @@ -787,9 +825,7 @@ "waveformCenterOnVideoPosition": "Forma de onda ao centro na posição do vídeo", "waveformPasteFromClipboard": "Colar da área de transferência", "waveformSpectrogram": "Forma de onda/espectrograma", - "webServiceUrl": "URL do serviço web", "width": "Largura", - "windowPositionAndSize": "Posição e tamanho da janela", "wordsPerMin": "Palavras/min", "pixelWidth": "Largura do pixel", "wpm": "Palavras/min", @@ -803,8 +839,6 @@ "noBookmarksFound": "Não foram encontrados mais marcadores", "xRequiresAnApiKey": "{0} requer uma chave API.", "xRequiresAValidUrl": "{0} requer um URL válido (por ex. \"http://...\" ou \"https://...\")", - "xSeconds": "{0:0.0##} segundos", - "xSubtitles": "{0:#,###,##0} legendas", "yes": "Sim", "zeroBytes": "0 bytes", "copyToClipboard": "Copiar", @@ -826,10 +860,8 @@ "playbackSpeed": "Velocidade de reprodução", "hoursMinutesSecondsMilliseconds": "HH:MM:SS.FFF", "imageFiles": "Ficheiros de imagens", - "openAiCompatibleStt": "STT compatível com OpenAI", "openAiCompatibleSttEndpoint": "URL do endpoint STT", "openAiCompatibleSttApiKey": "Chave API", - "openAiCompatibleSttModel": "Modelo", "openAiCompatibleSttExtraHeaders": "Cabeçalhos adicionais", "openAiCompatibleSttTimeout": "Tempo limite (segundos)", "openAiCompatibleSttLanguage": "Sugestão de idioma", @@ -839,6 +871,9 @@ "dashScopeSttRegion": "Região", "dashScopeSttEnableWords": "Marcas de tempo ao nível da palavra", "dashScopeSttRegionKeyHint": "Nota: as chaves API do Alibaba Cloud Model Studio são específicas de cada região - certifique-se de que a região selecionada corresponde à região onde a chave API foi criada (China vs. Internacional).", + "googleCloudSttProjectId": "ID do projeto (apenas para Application Default Credentials)", + "googleCloudSttBucketName": "Bucket de armazenamento (vazio = automático)", + "googleCloudSttDynamicBatching": "Agrupamento dinâmico (cerca de 5x mais barato, sem garantia de latência)", "onlineSttApiKeyMissing": "É necessária uma chave API. Introduza a sua chave API e tente novamente.", "openAiCompatibleSttAutoTranscribeOnAudioSelection": "Transcrever automaticamente na seleção de áudio", "openAiCompatibleSttStream": "Fluxo de resposta", @@ -848,11 +883,9 @@ "configurationRequired": "Configuração necessária", "transcriptionError": "Erro de transcrição", "transcriptionComplete": "Transcrição concluída", - "transcribingWithOpenAi": "A transcrever com o serviço compatível com OpenAI...", "processingResponse": "A processar resposta...", "unauthorizedApiKey": "Não autorizado: chave API inválida ou permissões insuficientes.", "requestTimeout": "Tempo limite do pedido: o servidor demorou demasiado tempo a responder.", - "noSegmentsReturned": "Nenhum segmento devolvido pelo serviço de transcrição.", "openAiCompatibleSttUrlMissing": "O URL do endpoint STT compatível com OpenAI é obrigatório. Introduza um URL e tente novamente.", "openAiCompatibleSttUrlNotResponding": "O endpoint STT compatível com OpenAI não respondeu:\n{0}\n\nVerifique o URL e se o servidor está em execução.", "transcriptionFailed": "Falha na transcrição", @@ -898,14 +931,15 @@ "multipleReplace": "_Substituição múltipla", "fillSelectedLinesWithClipboard": "Preencher linhas selecionadas com o texto da área de transferência", "goToLineNumber": "_Ir para o número da linha...", + "commandPalette": "_Paleta de comandos...", "rightToLeftMode": "Modo da direita para a esquerda", "modifySelectionDotDotDot": "Modificar _seleção...", "tools": "_Ferramentas", - "toolsSelectedLines": "_Ferramentas (linhas selecionadas)", "adjustDurations": "_Ajustar durações...", "applyDurationLimits": "Aplicar limites de duração às linhas selecionadas...", "batchConvert": "_Conversão em lote...", "beautifyTimeCodes": "Otimizar tempos...", + "improveTimeCodes": "Melhorar tempos (alinhamento forçado)...", "bridgeGaps": "Unir _intervalos...", "applyMinGap": "Aplicar intervalo mínimo entre as legendas...", "changeCasing": "_Alterar maiúsculas/minúsculas...", @@ -1044,6 +1078,9 @@ "selectCurrentLineWhilePlayingHint": "Selecionar a legenda atual durante a reprodução {0}", "videoPosition": "Posição do vídeo {0}", "videoPositionTextBox": "Caixa de texto da posição do vídeo {0}", + "toolbarLineBreakX": "Quebra de linha {0} (o resto da barra de ferramentas continua numa nova linha)", + "initialText": "Texto inicial da linha selecionada", + "initialTextHint": "O texto da linha selecionada tal como estava quando a linha foi selecionada", "hideWaveformToolbar": "Ocultar barra de ferramentas {0}", "resetZoomAndSpeed": "Repor zoom e velocidade de reprodução {0}", "removeBlankLines": "Remover linhas em branco {0}", @@ -1057,6 +1094,15 @@ "textPlayHint": "Reproduzir a legenda atual e parar no fim {0}", "textPauseHint": "Pausar a reprodução {0}", "textNextHint": "Reproduzir a legenda seguinte e parar no fim {0}", + "moveSelectedLines": "Mover linhas selecionadas (botões atrás/à frente)", + "moveSelectedLinesAndFollowing": "Mover linhas selecionadas e todas as seguintes (botões atrás/à frente)", + "moveAllLines": "Mover todas as linhas (botões atrás/à frente)", + "moveSelectedLinesBackHint": "Mover linhas selecionadas {0} ms para trás {1}", + "moveSelectedLinesForwardHint": "Mover linhas selecionadas {0} ms para a frente {1}", + "moveSelectedLinesAndFollowingBackHint": "Mover linhas selecionadas e todas as seguintes {0} ms para trás {1}", + "moveSelectedLinesAndFollowingForwardHint": "Mover linhas selecionadas e todas as seguintes {0} ms para a frente {1}", + "moveAllLinesBackHint": "Mover todas as linhas {0} ms para trás {1}", + "moveAllLinesForwardHint": "Mover todas as linhas {0} ms para a frente {1}", "guessStartNoLineSelected": "Adivinhar início: nenhuma linha selecionada", "guessStartTimeCodesLocked": "Adivinhar início: os tempos estão bloqueados", "guessStartNoWaveform": "Adivinhar início: sem forma de onda", @@ -1078,6 +1124,9 @@ "charactersPerSecond": "Caracteres/segundo: {0}", "chooseColumn": "Escolher coluna", "columnPaste": "Colar coluna", + "commandPaletteTitle": "Paleta de comandos", + "commandPaletteSearchPlaceholder": "Escreva para pesquisar comandos...", + "commandPaletteNoCommandsFound": "Nenhum comando correspondente", "createdEmptyTranslation": "Criada uma tradução vazia da legenda atual", "deleteText": "Eliminar texto", "deleteTextAndShiftCellsUp": "Eliminar texto e deslocar células para cima", @@ -1115,18 +1164,20 @@ "noTextInClipboard": "Nenhum texto na área de transferência", "oneLineCopiedFromOriginal": "Uma linha copiada da legenda original", "oneLineCopiedToOriginal": "Uma linha copiada para a legenda original", + "onlineOnlyVideo": "Vídeo apenas online", + "onlineOnlyVideoXSizeYDownloadAndOpen": "O ficheiro de vídeo \"{0}\" ({1}) está armazenado apenas online, por exemplo no Dropbox ou no iCloud Drive, e tem de ser transferido antes de poder ser aberto.\n\nTransferir e abrir agora?", "oneLineMerged": "Uma linha combinada", "oneLineSwitched": "Uma linha trocada", "overwriteExistingCells": "Substituir células existentes", "overwriteOrShiftCellsDown": "Substituir/deslocar células para baixo", "parsingMatroskaFile": "A analisar o ficheiro Matroska (.mkv), aguarde...", + "readingDvdSubtitles": "A ler legendas do DVD...", "pasteFromClipboardDotDotDot": "Colar da área de transferência", "redoPerformed": "Refazer aplicado", "redoPerformedXActionLeft": "Refazer realizado (ações restantes: {0})", "removedUnicodeControlCharactersX": "Caracteres de controlo Unicode removidos de {0} linhas", "removedXBlankLines": "Removidas {0} linhas em branco", "replacedXWithYCountZ": "\"{0}\" substituído por \"{1}\" ({2} ocorrências)", - "replacedXWithYInLineZ": "\"{0}\" substituído por \"{1}\" na linha {2}", "reversedStartAndEndingsForRightToLeftX": "Inícios e fins invertidos da direita para a esquerda em {0} linhas", "ruleProfileIsX": "O perfil da regra agora é \"{0}\"", "saveLanguageFile": "Guardar ficheiro de idioma", @@ -1134,7 +1185,6 @@ "shiftTextCellsDown": "Deslocar células de texto para baixo", "singleLineLength": "Comprimento da linha:", "speedIsNowX": "A velocidade agora é \"{0}\"", - "spellCheckResult": "Verificação ortográfica concluída. \n\n• Palavras alteradas: {0}\n• Palavras ignoradas: {1}", "subtitleGridFormattingX": "Formatação da grelha: {0}", "subtitleImportedFromMatroskaFile": "Legenda importada do ficheiro Matroska (.mkv)", "textDown": "Texto para baixo", @@ -1161,13 +1211,14 @@ "trimmedXLines": "{0} linhas de legenda cortadas", "pastedXLinesOverSelectedLines": "{0} linha(s) colada(s) sobre as linhas selecionadas", "pastedXOfYLinesOverSelectedLines": "{0} de {1} linha(s) colada(s) sobre as linhas selecionadas - as restantes não couberam na seleção", + "insertedXLinesFromClipboard": "Inserida(s) {0} linha(s) da área de transferência", "openOriginalDifferentNumberOfSubtitlesXY": "O ficheiro de legenda original não tem o mesmo número de legendas que o ficheiro de legenda atual.\n\n• Legendas originais: {0}\n• Legendas atuais: {1}", - "importXMatchingOriginalLines": "Importar {0} legendas originais correspondentes?", "originalTextReadOnly": "Texto original (apenas leitura)", "originalTextEditMode": "Texto original (modo de edição)", "originalIsReadOnlyNotSaved": "A legenda original é uma referência apenas de leitura e não foi guardada", "originalIsEmptyNotSaved": "A legenda original não tem qualquer texto e não foi guardada", "originalIsReadOnlyReference": "A legenda original está aberta como referência apenas de leitura", + "closeTranslationQuestionXY": "Fechar a tradução \"{0}\"?\n\nA legenda original \"{1}\" passa a ser a legenda que edita. O ficheiro de tradução em si não é alterado.", "allowEditOfOriginalSubtitle": "Permitir a edição da legenda original", "showAllOriginalLinesX": "Mostrar todas as linhas originais ({0} não têm correspondência aqui)", "showAllOriginalLinesHint": "As linhas sem correspondência são mostradas como linhas extra, para que possa ver o que falta na tradução.", @@ -1202,6 +1253,7 @@ "fileExportedInFormatXToY": "Ficheiro exportado no formato {0} em {1}", "fileExportedInFormatXToFileY": "Ficheiro exportado no formato \"{0}\" para o ficheiro \"{1}\"", "fixedXLines": "{0} linhas corrigidas", + "toolXChangedYLines": "{0}: {1} linhas alteradas", "transcriptionCompletedWithXLines": "Transcrição concluída com {0} linhas", "openSubtitleFileX": "Abrir ficheiro de legenda \"{0}\"?", "replacedXOccurrences": "Substituídas {0} ocorrências", @@ -1234,13 +1286,9 @@ "file": { "ebuSaveOptions": { "title": "Opções para guardar EBU", - "generalSubtitleInformation": "Informação geral da legenda", "codePageNumber": "Número de código da página", "diskFormatCode": "Código do formato do disco", "displayStandardCode": "Mostrar código da norma", - "colorRequiresTeletext": "Cores necessárias para teletexto!", - "alignmentRequiresTeletext": "Alinhamento requer teletexto!", - "teletextCharsShouldBe38": "Máximo de caracteres por linha para teletexto deve ser 38!", "characterCodeTable": "Tabela de caracteres", "languageCode": "Código do idioma", "originalProgramTitle": "Título original do programa", @@ -1257,7 +1305,6 @@ "maxNumberOfDisplayableRows": "Máx. de linhas", "diskSequenceNumber": "Número de sequência do disco", "totalNumberOfDisks": "Número total de discos", - "import": "Importar...", "textAndTimingInformation": "Informação de tempo e texto", "justificationCode": "Código de justificação", "verticalPosition": "Posição vertical", @@ -1274,11 +1321,6 @@ "errors": "Erros", "errorsX": "Erros: {0}", "maxLengthError": "Linha {0} excede ao comprimento máximo ({1}) em {2}: {3}", - "textUnchangedPresentation": "Apresentação original", - "textLeftJustifiedText": "Alinhado à esquerda", - "textCenteredText": "Centrado", - "textRightJustifiedText": "Alinhado à direita", - "useBoxForOneNewLine": "Marcar \"Utilizar caixa à volta do texto\" apenas numa linha nova", "maxLengthErrorTeletextColored": "Linha {0}-{1}: 36 (e não {2}) deve ser o número máximo de caracteres para texto colorido de altura dupla", "maxLengthErrorTeletextWhite": "Linha {0}-{1}: 37 (e não {2}) deve ser o número máximo de caracteres para texto branco de altura dupla", "maxLengthErrorTeletextSingleHeight": "Linha {0}: 38 (e não {1}) deve ser o número máximo de caracteres para texto branco de altura simples", @@ -1303,22 +1345,29 @@ "formattingDotDotDot": "Formatação...", "imageBasedSubtitleForEditDotDotDot": "Legenda baseada em imagem para edição...", "imageBasedSubtitleForOcrDotDotDot": "Legenda baseada em imagem para OCR...", + "dvdSubtitlesDotDotDot": "Legendas de DVD (IFO/VOB)...", + "titleImportDvd": "Importar legendas de DVD", + "dvdIfoFile": "Ficheiro IFO", + "dvdVobFiles": "Ficheiros VOB", + "dvdVideoStandard": "Norma de vídeo", + "dvdStartRipping": "Iniciar extração", + "dvdRippingAborted": "Extração cancelada", + "dvdOpenIfoFile": "Abrir ficheiro IFO de DVD", + "dvdAddVobFiles": "Adicionar ficheiros VOB", + "dvdIfoFiles": "Ficheiros IFO de DVD", + "dvdVobFileType": "Ficheiros VOB de DVD", + "dvdDropHint": "Abra um ficheiro IFO (VIDEO_TS\\VTS_01_0.IFO) ou adicione ficheiros VOB - ou largue-os aqui", + "dvdNotAnIfoFileX": "{0} não é um ficheiro IFO de DVD", + "dvdMenuIfoNoTitleSetsX": "Nenhum conjunto de títulos (VTS_xx_0.IFO) encontrado junto de {0}", + "dvdEncryptedXOfY": "{0} dos {1} pacotes de legendas ainda estão encriptados com CSS - estes ficheiros VOB foram copiados sem desencriptação, pelo que algumas imagens de legendas ficarão corrompidas.\n\nDesencripte primeiro o DVD com uma ferramenta de extração de DVD para obter um resultado limpo.\n\nContinuar mesmo assim?", "splitTextAt": "Dividir texto em", "blankLines": "Linhas em branco", "oneLineIsOneSubtitle": "Uma linha é uma legenda", "twoLinesAreOneSubtitle": "Duas linhas numa", "importFilesDotDotDot": "Importar ficheiros...", "multipleFiles": "Importe de vários ficheiros de texto (um ficheiro é uma legenda)", - "importOptions": "Opções de importação", - "autoSplitText": "Auto-dividir texto", - "lineMode": "Modo de linha", "maxLineLength": "Comprimento máximo da linha", - "maxLinesPerSubtitle": "Máximo de linhas por legenda", - "minGapBetweenSubtitles": "Espaço entre linhas (milissegundos)", "mergeShortLines": "Combinar as linhas curtas", - "removeLinesWithoutLetters": "Remover linhas sem letras", - "splitAtEndCharsSetting": "Dividir nos últimos caracteres", - "takeTimeFromCurrentFile": "Tirar tempo do ficheiro atual", "fixed": "Corrigido", "numberOfSubtitlesX": "Número de legendas: {0}", "numberOfSubtitlesXForcedY": "Número de legendas: {0} ({1} forçadas)", @@ -1330,14 +1379,18 @@ "forcedAlignerProgress": "A alinhar... janela {0} de {1}, {2} de {3} linhas", "forcedAlignerSetupTitle": "Alinhar tempos com alinhador forçado", "forcedAlignerSetupIntro": "Um alinhador forçado faz corresponder o texto da legenda que já tem ao áudio, sem o transcrever primeiro. Os vídeos longos são alinhados por blocos, pelo que qualquer duração funciona.", + "forcedAlignerEndsFromSpeech": "Definir tempos finais a partir da fala isolada (lento)", + "forcedAlignerEndsFromSpeechHint": "Um alinhador forçado encontra onde uma linha começa, não onde termina, por isso os tempos finais vêm normalmente do tempo de leitura. Com esta opção ativa, a música e os efeitos sonoros são primeiro removidos do áudio e cada linha termina onde a fala fica em silêncio. Demora cerca do mesmo tempo que o próprio vídeo com uma GPU - e muitas vezes mais sem uma.", + "forcedAlignerIsolatingSpeech": "A isolar a fala... {0}", + "forcedAlignerIsolatingSpeechFailed": "Não foi possível isolar a fala - os tempos finais foram definidos a partir do tempo de leitura.", "forcedAlignerModel": "Modelo do alinhador", - "forcedAlignerDownloadEngine": "Transferir / atualizar motor..." + "forcedAlignerDownloadEngine": "Transferir / atualizar motor...", + "forcedAlignerEstimatedXOfY": "{0} de {1} linhas não puderam ser alinhadas e foram colocadas pelo tempo de leitura - os seus tempos são apenas estimados. O script é provavelmente mais longo do que o que é falado no vídeo." }, "export": { "exportImagesProfiles": "Exportar perfis de imagens", "leftRightMargin": "Margem esq./dir.", "topBottomMargin": "Margem superior/inferior", - "titleExportBluRaySup": "Exportar Blu-ray (sup)", "lineSpacingPercent": "Espaçamento entre linhas %", "paddingLeftRight": "Preenchimento esquerdo/direito", "paddingTopBottom": "Preenchimento superior/inferior", @@ -1378,10 +1431,21 @@ "titleExportDCinemaInteropPng": "Interoperabilidade D-Cinema/png", "titleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", "imageBasedSubtitleSaved": "Legenda baseada em imagem guardada", - "titleExportBdnXml": "Exportar BDN/xml", "titleExportWebVttThumbnails": "Exportar WebVTT (miniaturas)", "fullFrameImage": "Imagem de fotograma completo", "fullFrameImageHint": "Criar cada imagem com o tamanho do fotograma do vídeo, com a legenda no seu lugar", + "stereo3D": "3D", + "stereo3DHint": "Para vídeo 3D: desenhar a legenda uma vez em cada metade da imagem (uma por olho)", + "halfSideBySide": "Meio lado a lado", + "halfTopBottom": "Meio cima/baixo", + "depth3D": "Profundidade", + "depth3DHint": "Quanto a legenda sobressai do ecrã - positivo aproxima-a, negativo afasta-a", + "plane3D": "Plano 3D", + "plane3DHint": "Dar a cada legenda a profundidade que um Blu-ray 3D guarda para ela, a partir de um ficheiro de plano 3D (.ofs) criado pelo BD3D2MK3D ou OFSExtractor. A profundidade é utilizada onde o plano 3D não tem nenhuma", + "openPlane3DTitle": "Abrir ficheiro de plano 3D", + "unableToLoadPlane3DX": "Não foi possível carregar o plano 3D: {0}", + "plane3DXDepthYToZ": "{0} (profundidade {1} a {2})", + "plane3DXNoDepth": "{0} (sem valores de profundidade)", "textEffect": "Efeito de texto", "textEffectSettingsTitle": "Definições do efeito de texto", "textEffectPreset": "Predefinição", @@ -1413,13 +1477,10 @@ "statistics": { "title": "Estatísticas", "titleWithFileName": "Estatísticas - {0}", - "generalStatistics": "Estatísticas gerais", - "mostUsed": "Mais utilizado...", "mostUsedLines": "Linhas mais usadas", "mostUsedWords": "Palavras mais usadas", "nothingFound": "Nenhuma encontrada", "numberOfLinesX": "Número de linhas da legenda: {0:#,##0}", - "numberOfFilesX": "Número de ficheiros de legenda: {0:#,##0}", "lengthInFormatXinCharactersY": "Número de caracteres como {0}: {1:#,###,##0}", "numberOfCharactersInTextOnly": "Número de caracteres apenas no texto: {0:#,###,##0}", "totalDuration": "Duração total de todas as legendas: {0:#,##0}", @@ -1460,7 +1521,6 @@ "gapMaximum": "Intervalo - máximo: {0:#,##0} ms", "gapAverage": "Intervalo - médio: {0:#,##0.##} ms", "gapExceedingMinimum": "Intervalo - abaixo do mínimo ({0:#,##0} ms): {1} ({2:0.00}%)", - "export": "Exportar...", "subtitles": "Legendas", "words": "Palavras", "totalDurationShort": "Duração total", @@ -1490,7 +1550,22 @@ "restoreAutoBackupFile": "Restaurar ficheiro de cópia de segurança automática", "restoreXFromY": "Pretende restaurar \"{0}\" de {1}?", "deleteAllSubtitleBackups": "Pretende eliminar todos os ficheiros de cópias de segurança de legendas?", - "deleteAll": "Eliminar tudo" + "deleteAll": "Eliminar tudo", + "subtitles": "Legendas", + "settingsBackupInfo": "É feita uma cópia de segurança do Settings.json quando o Subtitle Edit inicia, no máximo uma vez a cada {0} dia(s) e apenas se as definições tiverem sido alteradas. São mantidas as {1} cópias de segurança mais recentes.", + "settingsBackupInfoEveryStart": "É feita uma cópia de segurança do Settings.json sempre que o Subtitle Edit inicia, se as definições tiverem sido alteradas. São mantidas as {0} cópias de segurança mais recentes.", + "settingsBackupOff": "A cópia de segurança automática das definições está desativada (Opções → Definições → Ficheiro).", + "lastSettingsBackupX": "Última cópia de segurança: {0}", + "noSettingsBackupsYet": "Ainda não há cópias de segurança das definições", + "openSettingsBackupFolder": "Abrir pasta de cópias de segurança das definições", + "backUpSettingsNow": "Fazer cópia de segurança agora", + "settingsBackedUp": "Foi feita uma cópia de segurança das definições atuais.", + "restoreSettings": "Restaurar definições", + "restoreSettingsFromX": "Pretende substituir as definições atuais pela cópia de segurança de {0}?\n\nSerá feita primeiro uma cópia de segurança das definições atuais. Algumas alterações só têm efeito após reiniciar o Subtitle Edit.", + "settingsRestored": "As definições foram restauradas. Reinicie o Subtitle Edit para que todas as alterações tenham efeito.", + "settingsRestoreFailed": "Não foi possível restaurar as definições: {0}", + "settingsBackupNotValid": "a cópia de segurança não é um ficheiro de definições válido, pelo que as definições atuais foram mantidas", + "deleteAllSettingsBackups": "Pretende eliminar todos os ficheiros de cópia de segurança das definições?" }, "propertiesDCinema": { "title": "Propriedades D-Cinema SMPTE", @@ -1504,22 +1579,16 @@ "editRate": "Editar taxa", "timeCodeRate": "Taxa de velocidade dos tempos", "startTime": "Tempo inicial", - "font": "Tipo de letra", "fontId": "ID", "fontUri": "URI", - "generate": "Gerar", - "fontColor": "Cor do tipo de letra", "chooseColor": "Escolher cor", "fontEffect": "Efeito", "effectColor": "Cor do efeito", - "fontSize": "Tamanho", "topBottomMargin": "Margem superior/inferior", "fadeUpTime": "Desvanecer o tempo ascendente", "fadeDownTime": "Desvanecer o tempo descendente", - "frames": "Fotogramas", "zPosition": "Posição Z", - "zPositionHelp": "Números positivos afastam o texto, números negativos aproximam-no; se a posição Z for zero, é 2D", - "export": "Exportar..." + "zPositionHelp": "Números positivos afastam o texto, números negativos aproximam-no; se a posição Z for zero, é 2D" }, "webVtt": { "setStylesForSelectedLinesTitle": "Definir estilos WebVTT para as linhas selecionadas", @@ -1552,20 +1621,66 @@ "compareOnlyInOneFile": "Apenas num ficheiro", "compareTextOrTimeDifference": "Diferença de texto/tempo", "compareNumberDifference": "Diferença de número", - "ignoreLineBreaks": "Ignorar quebra de linha", "ignoreWhitespace": "Ignorar espaço em branco", "ignoreWhitespaceHint": "As linhas que diferem apenas em espaços, tabulações ou quebras de linha não contam como diferentes", "ignoreFormatting": "Ignorar formatação", - "onlyLookForDifferencesInText": "Procurar apenas as diferenças no texto", - "cannotCompareWithImageBasedSubtitles": "Não é possível comparar legendas baseadas em imagens", - "statisticsTitle": "Estatísticas", "ignoreFormattingHint": "As linhas que diferem apenas em etiquetas de formatação, como ou {\\an8}, não contam como diferentes", "showOnlyDifferencesInText": "Apenas diferenças no texto", + "ignoreNumbering": "Ignorar numeração", + "ignoreNumberingHint": "Linhas que diferem apenas no número não contam como diferentes", + "ignoreTimeDifferenceMs": "Tolerância de tempo (ms)", + "ignoreTimeDifferenceMsHint": "Tempos iniciais e finais que diferem este número de milissegundos ou menos não contam como diferentes", + "compareDifferences": "Diferenças", + "compareTextDifferences": "Diferenças de texto", + "compareCurrent": "Atual", + "compareReference": "Referência", + "compareEditable": "Editável", + "compareEditableHint": "As alterações feitas aqui são aplicadas à legenda quando clicar em Aplicar", + "compareReadOnly": "Só de leitura", + "compareTakeFromReference": "Usar texto e tempos da referência", + "compareInsertFromReference": "Inserir esta linha na legenda atual", + "compareDeleteFromCurrent": "Eliminar esta linha da legenda atual", + "compareTakeText": "Usar texto", + "compareTakeTiming": "Usar tempos", + "compareEditLine": "Editar linha", + "compareEditHint": "Ctrl+Enter para guardar, Esc para cancelar", + "compareEdited": "Editada", + "compareOnePendingChange": "1 alteração pendente", + "compareXPendingChanges": "{0} alterações pendentes", + "compareDiscardXChanges": "Descartar a(s) {0} alteração(ões) feita(s) em Comparar?", + "compareXChangesApplied": "Comparar: {0} alteração(ões) aplicada(s)", + "compareChangeTextX": "#{0} texto da referência", + "compareChangeTimingX": "#{0} tempos da referência", + "compareChangeTextAndTimingX": "#{0} texto e tempos da referência", + "compareChangeEditedX": "#{0} editada", + "compareChangeInsertedX": "#{0} inserida", + "compareChangeDeletedX": "#{0} eliminada", + "compareSyncPoint": "Ponto de sincronização", + "compareSyncPointHint": "Ponto de sincronização - estas duas linhas são sempre mostradas como um par e as linhas acima e abaixo são alinhadas separadamente", + "compareSyncPickCurrent": "Ponto de sincronização: usar esta linha atual", + "compareSyncPickReference": "Ponto de sincronização: usar esta linha de referência", + "compareSyncRemove": "Remover ponto de sincronização", + "compareClearXSyncPoints": "Limpar pontos de sincronização ({0})", + "compareSyncCurrentPickedX": "Atual #{0} escolhida como ponto de sincronização - selecione a linha de referência correspondente e clique em Sincronizar", + "compareSyncReferencePickedX": "Referência #{0} escolhida como ponto de sincronização - selecione a linha atual correspondente e clique em Sincronizar", + "compareSyncWithCurrentX": "Sincronizar com a atual #{0}", + "compareSyncWithReferenceX": "Sincronizar com a referência #{0}", + "compareSyncApply": "Sincronizar", + "compareSyncPointSetXY": "Ponto de sincronização definido: atual #{0} e referência #{1} são agora mostradas como um par", + "compareSyncAlreadyPairedXY": "Atual #{0} e referência #{1} já são mostradas como um par com o mesmo início - nada a sincronizar", + "compareSyncPointShiftedXYZW": "Ponto de sincronização definido: atual #{0}-#{1} deslocadas {2} para começar com a referência #{3}", + "compareChangeSyncShiftXYZ": "#{0}-#{1} deslocadas {2} (ponto de sincronização)", + "compareTimingDeltaHint": "Quanto mais tarde (+) ou mais cedo (−) a referência começa e termina em relação à linha atual", "loadXFromFile": "Carregar \"{0}\" do ficheiro", + "compareLoadSavedFile": "Carregar ficheiro guardado", "saveCompareHtmlTitle": "Guardar ficheiro HTML de comparação", "pickMatroskaTrackX": "Escolher a faixa Matroska - {0}", "pickTransportStreamTrackX": "Escolher faixa do fluxo de transporte - {0}", + "chapters": "Capítulos", + "dvdVobFilesMissingX": "Ficheiros VOB em falta ({0}% encontrados)", "pickMp4TrackX": "Escolher faixa MP4 - {0}", + "pickMxfTrackX": "Escolher faixa MXF - {0}", + "pickMpegTrackX": "Escolher faixa MPEG - {0}", "rosettaProperties": "Propriedades do Rosetta IMSC de texto cronometrado", "rosettaFontSize": "Tamanho do tipo de letra (altura da linha)", "propertyTimeBase": "Base de tempo", @@ -1575,7 +1690,6 @@ "propertyDefaultRegion": "Região predefinida", "propertyStyleAttributeName": "Nome do atributo de estilo", "propertyTimeCodeFormat": "Formato do tempo", - "propertyFileExtension": "Extensão do ficheiro", "propertyTopOrigin": "Origem superior", "propertyTopExtent": "Extensão superior", "propertyBottomOrigin": "Origem inferior", @@ -1625,7 +1739,6 @@ "selectionIntersect": "Cruzar com seleção" }, "multipleReplace": { - "title": "Múltipla substituição", "editRule": "Editar regra", "newRule": "Nova regra", "editCategory": "Editar categoria", @@ -1642,24 +1755,23 @@ "findWhat": "Localizar:", "descriptionOptional": "Descrição (opcional)", "invalidRegularExpressionX": "Expressão regular inválida: {0}", - "regularExpressionTooSlowX": "A expressão regular desistiu ao fim de {0} segundos - a regra é ignorada, experimente um padrão mais simples" + "regularExpressionTooSlowX": "A expressão regular desistiu ao fim de {0} segundos - a regra é ignorada, experimente um padrão mais simples", + "moveToCategory": "Mover para categoria" }, "find": { "searchTextWatermark": "Pesquisar texto...", "wholeWord": "Palavra completa", - "caseSensitive": "_Diferenciar maiúsculas/minúsculas", - "caseInsensitive": "Não diferenciar maiúsculas de minúsculas", "findPrevious": "Localizar _anterior", "findNext": "Localizar _seguinte", "replaceAndFindNext": "_Substituir e localizar próximo", "replaceAll": "Substituir _tudo", - "replaceTitle": "Substituir", - "replaceWith": "Substituir por:", "replaceTextWatermark": "Substituir por...", "replaceIn": "Substituir/procurar em", "replaceInTextAndOriginal": "Texto e texto original", "replaceInTextOnly": "Apenas texto", - "replaceInOriginalOnly": "Apenas texto original" + "replaceInOriginalOnly": "Apenas texto original", + "replacedOneOccurrence": "Substituída uma ocorrência", + "replacedXOccurrences": "Substituídas {0} ocorrências" }, "regularExpressionContextMenu": { "wordBoundary": "Limite de palavra (\\b)", @@ -1687,6 +1799,7 @@ "xLinesYSubtitles": "{0} linhas, {1} legendas", "xLinesYSubtitlesZErrors": "{0} linhas, {1} legendas, {2} erro(s)", "couldNotParseAsX": "Não foi possível processar como {0}", + "readAsXUseAsY": "Não foi possível ler a origem como {1}, mas foi possível lê-la como {0}.\nUsar as linhas e continuar a guardar como {1}?", "selectedXCharactersYLines": "Selecionado: {0} caracteres em {1} linha(s)", "replacedXOccurrences": "{0} ocorrência(s) substituída(s)", "invalidRegularExpression": "Expressão regular inválida", @@ -1701,7 +1814,6 @@ "aiReview": { "title": "Revisão por IA", "review": "Rever", - "stop": "Parar", "editPrompt": "Editar prompt...", "editPromptTitle": "Editar prompt de revisão", "promptInfo": "Instruções enviadas ao modelo - {language} é substituído pelo idioma da legenda.", @@ -1712,7 +1824,6 @@ "reviewingLineXOfY": "A rever a linha {0} de {1}...", "reviewDone": "Revisão concluída - {0} sugestões em {1} linhas", "noIssuesFound": "Nenhum problema encontrado", - "categoryAll": "Todas", "categorySpelling": "Ortografia", "categoryGrammar": "Gramática", "categoryPunctuation": "Pontuação", @@ -1724,8 +1835,23 @@ "largeChangeWarning": "Alteração grande - parece uma reescrita, reveja com atenção", "mismatchWarning": "Não se assemelha ao original - pode pertencer a outra linha", "engineError": "Não foi possível contactar o motor de IA: {0}", - "setupHint": "Escolha primeiro um motor e um modelo em Ferramentas -> Revisão por IA.", - "playCurrentLineHint": "Reproduzir a linha selecionada no leitor de vídeo e pausar no seu fim (também pode fazer duplo clique numa linha)" + "playCurrentLineHint": "Reproduzir a linha selecionada no leitor de vídeo e pausar no seu fim (também pode fazer duplo clique numa linha)", + "editAfterHint": "Clique no texto da linha selecionada para editar a correção antes de a aplicar (Enter guarda, Escape cancela)", + "template": "Modelo", + "templatePlaceholder": "Escolha um modelo para substituir o prompt", + "templateStandard": "Revisão padrão", + "templateSpeechToText": "Limpeza de fala para texto", + "templateMachineTranslation": "Correção de tradução automática", + "templateSdh": "SDH / deficientes auditivos", + "referenceContext": "Contexto de referência", + "referenceContextInfo": "Opcional. Nomes, personagens, glossário, sinopse ou notas de estilo - o modelo trata isto como a autoridade para nomes e termos. Enviado com cada lote.", + "referenceContextPlaceholder": "Nomes: Kaito, Tia Mei, Dr. Hollis\nTermos: Shinkansen, núcleo de dobra\nSinopse: Kaito viaja até Tóquio para encontrar o pai desaparecido.", + "generateContext": "Gerar com IA", + "generateContextHint": "Deixar o motor de IA selecionado ler a legenda e esboçar nomes, termos e uma sinopse - verifique o resultado antes de usar", + "generatingContextPartXOfY": "A ler a parte {0} de {1}...", + "generatingContextSynopsis": "A escrever a sinopse...", + "replaceContextQuestion": "Substituir o contexto de referência atual?", + "noContextGenerated": "O motor de IA não devolveu informação de referência utilizável." }, "aiAssistant": { "title": "Assistente de IA", @@ -1743,22 +1869,14 @@ "showReasoning": "Mostrar o raciocínio do modelo" }, "fixCommonErrors": { - "title": "Corrigir erros frequentes", - "step1": "Passo 1/2 - selecionar os erros a corrigir", - "whatToFix": "O que corrigir", - "example": "Exemplo", - "selectAll": "Selec. tudo", - "inverseSelection": "Inverter seleção", "back": "< &Anterior", "next": "&Próximo >", - "step2": "Fase 2/2 - Verificar correções", "fixes": "Correções", "ruleDetailsDotDotDot": "Detalhes da regra...", "showOnlyThisRule": "Mostrar apenas as correções desta regra", "appliedRulesForLineX": "Regra(s) aplicada(s) à linha {0}", "ruleX": "Regra: {0}", "log": "Registo", - "function": "Função", "removedEmptyLine": "Remover linha em branco", "removedEmptyLineAtTop": "Remover linha inicial em branco", "removedEmptyLineAtBottom": "Remover linha final em branco", @@ -1779,13 +1897,13 @@ "removeLineBreaksPixelWidth": "Combinar legendas que cabem numa linha (largura de pixel)", "fixUppercaseIInsideLowercaseWords": "Corrigir 'i' maiúscula em palavras em minúsculo (erro de OCR)", "fixDoubleApostrophes": "Substituir apóstrofe dupla ('') por aspas (\")", + "fixMisreadQuotes": "Corrigir apóstrofos mal lidos como aspas duplas (OCR, inglês)", "addPeriods": "Adicionar ponto final quando a linha seguinte começar com maiúscula", "startWithUppercaseLetterAfterParagraph": "Iniciar parágrafo com maiúscula", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Iniciar com maiúscula depois de ponto final dentro do parágrafo", "startWithUppercaseLetterAfterColon": "Iniciar com maiúscula depois de \":\" ou \";\"", "fixLowercaseIToUppercaseI": "Corrigir 'i' minúscula sozinha por 'I' maiúscula (Inglês)", "fixCommonOcrErrors": "Corrigir erros frequentes de OCR (usando lista de substituição OCR)", - "commonOcrErrorsFixed": "Erros frequentes de OCR corrigidos (ficheiro OcrReplaceList utilizado): {0}", "removeSpaceBetweenNumber": "Remover espaços entre números", "breakDialogsOnOneLine": "Dividir diálogos numa linha", "removeDialogFirstInNonDialogs": "Remover o travessão inicial na primeira linha para não diálogos", @@ -1802,18 +1920,17 @@ "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Foo
bar! -> Foo bar!", "fixDoubleApostrophesExample": "''Has double single quotes'' -> \"Has single double quote\"", + "fixMisreadQuotesExample": "\"Olá' -> \"Olá\"", "addPeriodsExample": "Hello world -> Hello world.", "startWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: Foobar!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Hello there! how are you? -> Hello there! How are you?", "startWithUppercaseLetterAfterColonExample": "Speaker: hello world! -> Speaker: Hello world!", "removeHyphensSingleLineExample": "- Foobar. -> Foobar.", "fix3PlusLinesExample": "Foo
bar
baz! -> Foo bar baz!", - "xMissingQuotesAdded": "Aspas em falta adicionadas: {0}", "fix3PlusLine": "Corrigir Linhas com mais de duas linhas", "fix3PlusLines": "Corrigir Linhas com mais de duas linhas", "analysing": "A analisar...", "nothingToFix": "Nada para corrigir :)", - "fixesFoundX": "Correções encontradas: {0}", "xFixesApplied": "Correções aplicadas: {0}", "xFixesYSelected": "{0} correções - {1} selecionadas", "nothingFixableBut": "Não pôde ser corrigido automaticamente. A legenda contém erros - veja o registo para mais detalhes", @@ -1822,7 +1939,6 @@ "fixFirstLetterToUppercaseAfterParagraph": "Corrigir primeira letra do parágrafo para maiúscula", "mergeShortLine": "Eliminar quebra de linha em linha curta (uma frase)", "mergeShortLineAll": "Eliminar quebra de linha em linha curta (exceto diálogos)", - "unbreakShortLinePixelWidth": "Combinar linha curta (largura de pixel)", "breakLongLine": "Dividir linha longa", "fixLongDisplayTime": "Corrigir duração longa", "fixInvalidItalicTag": "Corrigir etiqueta itálica inválida", @@ -1845,7 +1961,6 @@ "fixUppercaseIInsideLowercaseWord": "Corrigir letra maiúscula 'i' numa palavra minúscula", "fixMissingPeriodAtEndOfLine": "Adicionar ponto final em falta no final da linha", "refreshFixes": "Atualizar correções disponíveis", - "applyFixes": "Aplicar correções selecionadas", "autoBreak": "Ajuste &auto", "unbreak": "&Combinar", "fixDoubleDash": "Corrigir '--' -> '...'", @@ -1864,8 +1979,6 @@ "fixSpaceBetweenNumbersExample": "1 100 -> 1100", "fixDialogsOneLineExample": "Olá João! - Olá Olga! -> Olá João!
- Olá Olga!", "removeDialogFirstInNonDialogsExample": "- Como estás? -> Como estás?", - "selectDefault": "Predefinição", - "setDefault": "Definir as correções atuais como predefinição", "fixContinuationStyleX": "Corrigir estilo de continuação: {0}", "fixUnnecessaryLeadingDots": "Remover reticências iniciais desnecessárias", "fixCommonErrorsProfiles": "Corrigir perfis de erros comuns", @@ -1873,7 +1986,6 @@ "searchRulesDotDotDot": "Pesquisar regras...", "goToApplyFixes": "Avançar para aplicar correções", "backToFixList": "Voltar à lista de correções", - "applyFixesAndClose": "Aplicar correções e fechar", "fixCommonOcrErrorsStep2": "Corrigir erros comuns, passo 2 (aplicar correções)", "fixCommonOcrErrorsStep2FixesFoundX": "Corrigir erros comuns, passo 2 – correções encontradas: {0}", "action": "Ação", @@ -1886,18 +1998,11 @@ "adjustDurations": { "title": "Ajustar duração", "adjustVia": "Ajustar por", - "seconds": "Segundos", - "percent": "Percentagem", "recalculate": "Recalcular", "addSeconds": "Adicionar segundos", - "setAsPercent": "Definir a percentagem de duração", "note": "Nota: a duração não pode sobrepor o tempo de início do texto seguinte", "fixed": "Corrigido", - "milliseconds": "Milissegundos", "extendOnly": "Apenas prolongar", - "enforceDurationLimits": "Aplicar duração mínima e máxima", - "checkShotChanges": "Não prolongar para além das mudanças de cena", - "batchCheckShotChanges": "Respeitar as mudanças de cena (se disponível)", "recalculateRequiresOcrNote": "Recalcular não está disponível — uma ou mais legendas não têm texto OCR. Execute primeiro o OCR." }, "applyDurationLimits": { @@ -1905,6 +2010,8 @@ "fixMinDurationMs": "Corrigir duração mínima (ms)", "doNotGoPastShotChange": "Não ultrapassar mudança de cena", "fixMaxDurationMs": "Corrigir duração máxima (ms)", + "fixMinDurationFrames": "Corrigir duração mínima (fotogramas)", + "fixMaxDurationFrames": "Corrigir duração máxima (fotogramas)", "minimumDurationMilliseconds": "Duração mínima (milissegundos):", "maximumDurationMilliseconds": "Duração máxima (milissegundos):", "maxDurationShouldBeHigherThanMinDuration": "A duração máxima deve ser superior à duração mínima", @@ -1924,12 +2031,8 @@ }, "beautifyTimeCodes": { "title": "Otimizar tempos", - "beautifySettings": "Definições de otimização", "snapToFrames": "fotogramas", - "frameGap": "Espaço entre fotogramas", "minDuration": "Duração mínima (ms)", - "shotChangeThreshold": "Limite de mudança da cena (ms)", - "shotChangeOffset": "Deslocamento de mudança de cena (fotogramas)", "original": "Copiar texto do original para o atual", "beautified": "Otimizado", "subtitlesCount": "Legendas", @@ -1958,13 +2061,80 @@ "timeCodesExtractFailed": "Não foi possível ler os tempos do vídeo", "timeCodesHint": "Encaixa as deixas nos tempos reais dos fotogramas do vídeo em vez de assumir uma taxa de fotogramas constante. Requer a leitura de todo o vídeo uma vez; o resultado fica em cache." }, + "improveTimeCodes": { + "title": "Melhorar tempos (alinhamento forçado)", + "aligner": "Alinhador", + "alignerHint": "O modelo que procura cada linha no áudio. As melhores opções para o idioma da legenda são listadas primeiro.", + "maxShift": "Deslocamento máximo (segundos)", + "maxShiftHint": "Quão dessincronizada a legenda pode estar. Uma linha cujo início se moveria mais do que isso fica como está e é assinalada. Seja qual for o valor, uma linha isolada que queira mover-se mais de meio segundo além das linhas à sua volta não é movida às cegas: segue as vizinhas quando todas se moveram e, caso contrário, é apresentada desmarcada para que a verifique.", + "adjustStartTimes": "Ajustar tempos iniciais", + "adjustEndTimes": "Ajustar tempos finais", + "isolateSpeech": "Isolar primeiro a fala (lento)", + "isolateSpeechHint": "Remove a música e os efeitos sonoros antes de alinhar, para que o alinhador ouça apenas o diálogo. Ajuda em linhas faladas sobre música alta ou ação, mas demora cerca do mesmo tempo que o próprio áudio com uma GPU - e muitas vezes mais sem uma.", + "isolatingSpeech": "A isolar a fala... (isto demora algum tempo)", + "isolateSpeechFailed": "Não foi possível isolar a fala - foi alinhado com o áudio original.", + "checkWithSpeechToText": "Verificar com fala para texto", + "checkWithSpeechToTextHint": "Transcreve também o áudio e verifica cada deslocação face ao local onde as palavras foram realmente ouvidas. Deslocações grandes confirmadas pela fala são marcadas automaticamente, e deslocações para longe do local onde uma linha é ouvida ficam desmarcadas para que as verifique. Mostra também quanto de cada linha foi ouvido - uma percentagem baixa significa que o texto difere do que é dito. Uma legenda mais dessincronizada do que o deslocamento máximo - um desvio constante, uma deriva por diferença de taxa de fotogramas, ou saltos onde foram cortadas cenas - é primeiro sincronizada pelas palavras ouvidas. Utiliza o Crisp ASR Parakeet, que demora alguns minutos para uma longa-metragem com uma GPU.", + "checkWithSpeechToTextNotAvailableX": "A verificação com fala para texto não está disponível para {0}", + "transcribingToCheck": "A transcrever para verificar o alinhamento...", + "speechToTextFailed": "A fala para texto falhou - os tempos não foram verificados.", + "speechToTextX": "Fala para texto: {0}", + "speechToTextConfirmedXDisputedY": "Fala: {0} confirmadas, {1} contestadas", + "hardlyHeardX": "A fala para texto ouviu apenas {0}% das palavras da legenda. A legenda está no idioma falado? O alinhador não consegue posicionar uma tradução.", + "heard": "Ouvido", + "heardHint": "Quanto da linha a fala para texto ouviu. Uma percentagem baixa significa que o texto difere do que é dito - onde é mais provável que o alinhador erre.", + "statusConfirmedBySpeech": "Confirmada pela fala", + "statusDisputedBySpeech": "Ouvida onde estava", + "statusMovedWithSync": "Movida com a sincronização", + "syncedFirstXY": "Sincronizado primeiro: {0} s no início, {1} s no fim", + "showSpeechOnly": "Mostrar apenas a fala", + "showSpeechOnlyHint": "Desenhar a forma de onda alinhada a partir do áudio sem música e efeitos sonoros; a forma de onda original fica como está, para comparação. Disponível depois de a fala ter sido isolada - aqui, ou com \"Mostrar apenas a fala\" na forma de onda da janela principal.", + "align": "Alinhar", + "original": "Original", + "aligned": "Alinhado", + "intro": "Escolha um alinhador e prima \"Alinhar\" para procurar cada linha no áudio e ajustar os seus tempos.", + "extractingAudio": "A extrair o áudio...", + "aligningBatchXOfY": "A alinhar... lote {0} de {1}", + "extractAudioFailed": "Não foi possível extrair o áudio com o ffmpeg.", + "modelWillBeDownloaded": "{0} será transferido", + "summaryXRetimedYKeptZSkipped": "Reajustadas: {0} · Mantidas: {1} · Sem fala: {2}", + "meanShiftX": "Deslocamento médio: {0} ms", + "toCheckX": "A verificar: {0}", + "largeMovesToCheckX": "{0} linha(s) mover-se-iam muito sozinhas e ficam desmarcadas - ouça-as (F5 reproduz a linha alinhada, Shift+F5 a original) e marque as que estão certas.", + "linesToCheckX": "{0} linha(s) ficam desmarcadas para verificação - ouça-as (F5 reproduz a linha alinhada, Shift+F5 a original) e marque as que estão certas.", + "changeXOfY": "Alteração {0} de {1}", + "previousChange": "Alteração anterior", + "nextChange": "Alteração seguinte", + "startShift": "Início", + "endShift": "Fim", + "statusRetimed": "Reajustada", + "statusMovedWithNeighbours": "Movida com as vizinhas", + "statusLargeMoveUnconfirmed": "Deslocação grande - ouça e marque para aplicar", + "statusUnchanged": "Já está no lugar", + "statusNoSpeech": "Sem fala", + "statusShiftTooLarge": "Mantida - deslocamento demasiado grande", + "statusFailed": "Mantida - o alinhador falhou", + "statusAdjustedByHand": "Ajustada manualmente", + "alignedWaveformHint": "Arraste uma linha para a mover, ou arraste as suas extremidades para alterar o início ou o fim.", + "playLine": "Reproduzir linha", + "undoAdjustment": "Anular ajuste", + "playPause": "Reproduzir / pausar", + "playAligned": "Alinhada", + "playAlignedHint": "Reproduzir a linha selecionada com os seus tempos alinhados", + "apply": "Aplicar", + "applyHint": "Desmarque uma linha para manter os seus tempos originais. Faça duplo clique numa linha para a reproduzir. As linhas também podem ser movidas ou redimensionadas na forma de onda alinhada." + }, "beautifyTimeCodesProfile": { "title": "Editar perfil de otimização de códigos de tempo", "loadPreset": "Carregar predefinição", "presetDefault": "Predefinido", "presetNetflix": "Netflix", "presetSdi": "SDI", - "general": "Geral", + "saveAsProfile": "Guardar como perfil...", + "deleteProfile": "Eliminar perfil", + "profileName": "Nome do perfil", + "overwriteProfileX": "Já existe um perfil com o nome \"{0}\". Substituí-lo?", + "deleteProfileX": "Eliminar o perfil \"{0}\"?", "gap": "Intervalo", "gapSuffix": "fotogramas (também atualiza campos de pausa diferente de zero abaixo)", "milliseconds": "ms", @@ -1993,9 +2163,12 @@ "hintChaining": "Como lidar com legendas que quase se tocam – estenda-as juntas ou afaste-as, dependendo se uma mudança de cena ocorre no meio." }, "bridgeGaps": { - "title": "Unir intervalos", "bridgeGapsSmallerThan": "fotogramas", "minGap": "Pausa mínima (ms)", + "bridgeGapsSmallerThanFrames": "Unir intervalos menores que (fotogramas)", + "minGapFrames": "Intervalo mínimo (fotogramas)", + "calculateBridgeGapsSmallerThanDotDotDot": "Calcular o limite de união de intervalos a partir de uma taxa de fotogramas...", + "useXMsAsBridgeGapsSmallerThan": "Unir intervalos menores que \"{0}\" milissegundos?", "numberOfSmallGapsBridgedX": "Número de pequenos intervalos unidos: {0}", "percentFoPrevious": "Pausa para anterior (%)", "gapChange": "Mudança de pausa" @@ -2007,8 +2180,6 @@ "sortBy": { "title": "Classificar legendas", "sortOrder": "Ordem de classificação", - "sortByNumber": "Número", - "sortByStartTime": "Hora de início", "sortByEndTime": "Tempo final" }, "batchConvert": { @@ -2031,6 +2202,7 @@ "addColor": "Adicionar cor", "deleteLinesWithSpecificActorsOrStyles": "Eliminar linhas", "useSourceStylesIfPossible": "Utilizar estilos de origem, se possível", + "keepSourceEmbeddedFonts": "Manter tipos de letra incorporados da origem (rodapé)", "editStyles": "Editar estilos", "editProperties": "Editar propriedades", "editAttachments": "Editar anexos", @@ -2051,7 +2223,6 @@ "assaChangeStyleFromStyle": "Alterar estilo de", "assaChangeStyleToStyle": "para", "assaChangeStyleImportStyle": "Importar estilo...", - "assaChangeStyleImportedX": "Importado: {0}", "assaChangeStyleTrimUnusedStyles": "Cortar estilos não utilizados", "assaChangeStylePropertiesTitle": "Alterar propriedades do estilo", "assaChangeStylePropertiesInfo": "Altera os campos escolhidos em todos os estilos do ficheiro, sem mexer nos próprios estilos.", @@ -2063,13 +2234,52 @@ "convertColorsToDialogReBreakLines": "Requebrar as linhas", "snapTimeCodesToFramesInfo": "Arredonda todos os tempos de início e fim para o fotograma mais próximo. A taxa de fotogramas é lida a partir de um ficheiro de vídeo com o mesmo nome do ficheiro de legenda, a menos que seja escolhida uma taxa de fotogramas fixa.", "addFolderDotDotDot": "Adicionar pasta...", + "addFolderRecursiveDotDotDot": "Adicionar pasta com subpastas...", "selectFolderToConvert": "Selecionar a pasta com os ficheiros a converter", "includeSubfolders": "Incluir subpastas ao adicionar uma pasta", + "videoFilesWhenAddingFolder": "Ficheiros de vídeo (mkv, mp4, ts...) ao adicionar uma pasta", + "videoFilesAsk": "Perguntar", + "videoFilesInclude": "Adicionar as suas faixas de legendas", + "videoFilesSkip": "Ignorar", + "folderContainsXVideoFiles": "A pasta contém {0} ficheiro(s) de vídeo (mkv, mp4, ts...).\n\nAdicionar também as faixas de legendas incorporadas, ou apenas os ficheiros de legendas?", + "addVideoFiles": "Adicionar ficheiros de vídeo", + "skipVideoFiles": "Apenas ficheiros de legendas", + "doNotAskAgainVideoFiles": "Não perguntar novamente (alterar nas definições de Converter múltiplos ficheiros)", + "settingsSectionOutput": "Saída", + "settingsSectionAddingFiles": "Adicionar ficheiros", + "settingsSectionImageBasedSubtitles": "Legendas baseadas em imagens (OCR)", + "settingsSectionOther": "Outros", "keepSourceFileTimestamp": "Manter a data/hora do ficheiro de origem nos ficheiros de saída", - "scanningFolderX": "A analisar {0}..." + "preventSleepWhileConverting": "Impedir que o computador entre em suspensão durante a conversão", + "scanningFolderX": "A analisar {0}...", + "transportStreamSettings": "Definições de Transport Stream", + "transportStreamSettingsDotDotDot": "Definições de Transport Stream...", + "transportStreamSettingsInfo": "Aplica-se às faixas de legendas extraídas de ficheiros Transport Stream (.ts/.m2ts). A posição e o tamanho do vídeo só afetam faixas de imagem DVB exportadas para um formato baseado em imagens.", + "transportStreamOverrideXPosition": "Substituir a posição X original", + "transportStreamOverrideYPosition": "Substituir a posição Y original", + "transportStreamOverrideVideoSize": "Substituir o tamanho de vídeo original", + "transportStreamBottomMargin": "Margem inferior", + "transportStreamFileNameEnding": "Final do nome do ficheiro", + "transportStreamFileNameEndingInfo": "Adicionado antes da extensão para cada faixa extraída. Deixe vazio para usar o sufixo de idioma normal.", + "transportStreamOnlyTeletext": "Apenas teletexto", + "transportStreamGetSizeFromVideo": "Obter tamanho do vídeo...", + "twoLetterLanguageCodeUppercase": "Código de idioma de duas letras (maiúsculas)", + "threeLetterLanguageCodeUppercase": "Código de idioma de três letras (maiúsculas)", + "formatContainsDotDotDot": "O formato contém...", + "extensionIsDotDotDot": "A extensão é...", + "statusIsError": "O estado é erro", + "forcedTracksOnly": "Apenas faixas forçadas", + "xConvertedYFailedInZ": "{0:#,###,##0} convertidos, {1:#,###,##0} falharam em {2}", + "xNotProcessed": "{0:#,###,##0} não processados", + "removeUnicodeControlCharactersTitle": "Remover caracteres de controlo Unicode", + "removeUnicodeControlCharactersInfo": "Remove do texto os caracteres invisíveis de controlo de direção Unicode (LRM, RLM, LRE, RLE, PDF, LRO e RLO) e substitui os espaços não separáveis por espaços normais.", + "preset": "Predefinição", + "savePresetDotDotDot": "Guardar predefinição...", + "deletePreset": "Eliminar predefinição", + "presetName": "Nome da predefinição", + "deletePresetX": "Eliminar a predefinição \"{0}\"?" }, "changeCasing": { - "title": "Inverter maiúsculas/minúsculas", "fixNames": "Nome", "namesX": "Nomes: {0:#,##0}", "hitsX": "Ocorrências: {0:#,##0}", @@ -2080,9 +2290,7 @@ "allUppercase": "TODAS MAIÚSCULAS", "allLowercase": "todas minúsculas" }, - "changeFormatting": { - "title": "Alterar formatação" - }, + "changeFormatting": {}, "convertActors": { "title": "Converter atores", "convertActorFrom": "Converter ator de", @@ -2111,18 +2319,12 @@ "outputFormatAssa": "Advanced Sub Station Alpha (.ass)", "style1": "Estilo 1", "style2": "Estilo 2", - "outlineWidth": "Largura do contorno", - "shadowWidth": "Largura da sombra", - "alignTop": "Superior", - "alignBottom": "Inferior", - "merge": "_Combinar", - "pleaseLoadTwoSubtitles": "carregue duas legendas" + "merge": "_Combinar" }, "splitSubtitle": { "title": "Dividir legenda", "numberOfEqualParts": "Número de partes iguais", "saveSplitParts": "_Guardar partes divididas", - "subtitleSplitIntoXParts": "Legenda dividida em {0} partes.", "xPartsSavedInFormatYToFolder": "{0} partes guardadas no formato {1} na pasta:" }, "splitBreakLongLines": { @@ -2156,18 +2358,17 @@ "columnMerge": "Combinar", "columnFirst": "Primeira linha", "columnSecond": "Segunda linha", - "columnMerged": "Combinado", - "selectAll": "Selecionar tudo", - "inverseSelection": "Inverter seleção" + "columnMerged": "Combinado" }, "mergeLinesWithSameText": { - "title": "Combinar as linhas com o mesmo texto", "maxMsBetweenLines": "Máximo de milissegundos entre linhas", - "includeIncrementingLines": "Incluir linhas com texto incremental" + "maxFramesBetweenLines": "Máximo de fotogramas entre linhas", + "includeIncrementingLines": "Incluir linhas com texto incremental", + "includeRollUpCaptions": "Incluir legendas roll-up (em deslocamento)" }, "mergeLinesWithSameTimeCodes": { - "title": "Combinar linhas com os mesmos tempos", "maxMsDifference": "Diferença máxima (milissegundos)", + "maxFramesDifference": "Diferença máxima (fotogramas)", "makeDialog": "Fazer diálogos" }, "netflixCheckAndFix": { @@ -2190,7 +2391,6 @@ "shotChanges": "Mudanças de cena", "startNumberSpellOut": "Número inicial falado", "textforHiUseBrackets": "Texto para deficientes auditivos, utilizar parênteses retos", - "frameRate": "Taxa de fotogramas", "twoFrameGrap": "Pausa de dois fotogramas", "whiteSpace": "Espaço em branco", "childrensProgram": "Programa infantil", @@ -2228,7 +2428,6 @@ "italicsFixed": "Itálicos corrigidos", "italicsNotAllowed": "Itálico não permitido", "bridgeGapsXToYFrames": "3-{0} pausa de fotogramas => pausa de 2 fotogramas", - "startNumberSpellOutComment": "Quando um número inicia uma frase, deve ser sempre escrito por extenso", "maximumXCharactersPerSecond": "Máximo de {0} caracteres por segundo" }, "imageBasedEdit": { @@ -2238,10 +2437,8 @@ "resizeImagesDotDotDot": "Redimensionar imagens...", "adjustBrightnessDotDotDot": "Alterar brilho...", "adjustAlphaDotDotDot": "Alterar alpha...", - "centerHorizontally": "Centrar horizontalmente", "cropImages": "Cortar imagens", "importTimeCodes": "Importar códigos de tempo...", - "setTextForSubtitle": "Definir texto para legenda", "screenWidth": "Largura do ecrã", "screenHeight": "Altura do ecrã", "alphaThresholdInfo": "Pixels com alfa abaixo do limite tornam-se totalmente transparentes", @@ -2271,15 +2468,31 @@ "letterboxCustom": "Altura de barra personalizada", "barHeightPx": "Altura da barra (px)", "titleSafePercent": "Área segura de título (%)", + "moveCaptions": "Mover legendas", + "moveCaptionsDotDotDot": "Mover legendas...", + "moveCaptionsTo": "Mover legendas", + "moveCaptionsIntoBars": "Para as barras de letterbox (fora da imagem)", + "moveCaptionsIntoPicture": "Para dentro da imagem (fora das barras)", + "moveCaptionsOffset": "Distância da margem (px)", + "letterboxBarHeightXPxYOfZCaptionsWillMove": "Altura da barra: {0} px - {1} de {2} legendas serão movidas", + "removeFadeInOut": "Remover fade in/out", + "removeFadeInOutXLinesRemoved": "{0} linhas de fade combinadas com as linhas a que pertencem", + "removeFadeInOutNothingFound": "Nenhuma linha de fade in/out encontrada", "positionSummary": "{0}×{1} - {2} legendas - altura da barra: {3} px", "xInActivePicture": "{0} na imagem", "xInTopBar": "{0} na barra superior", "xInBottomBar": "{0} na barra inferior", "noImageSubtitlesLoaded": "Nenhuma legenda de imagem carregada", - "imageBasedFormatNotSupported": "Formato de legenda baseado em imagens não encontrado/não suportado." + "imageBasedFormatNotSupported": "Formato de legenda baseado em imagens não encontrado/não suportado.", + "frameRateDeclaredInFile": "Taxa de fotogramas declarada no ficheiro Blu-ray sup", + "frameRateDetectedFromTimeCodesX": "Taxa de fotogramas detetada a partir dos tempos do Blu-ray sup (o ficheiro declara {0})", + "frameRateFromVideo": "Taxa de fotogramas do vídeo", + "frameRateCurrent": "Taxa de fotogramas atual", + "frameRateSetManually": "Taxa de fotogramas definida manualmente", + "frameRateUsageInfo": "As exportações Blu-ray sup, BDN XML, DOST e FCP são escritas com esta taxa de fotogramas. Não altera nenhum tempo - utilize \"Alterar a taxa de fotogramas\" para isso.", + "useVideoFrameRateXInsteadOfY": "A taxa de fotogramas do vídeo é {0}, mas a legenda está definida para {1}.\n\nUsar a taxa de fotogramas do vídeo ({0})?" }, "removeTextForHearingImpaired": { - "title": "Remover texto para deficientes auditivos", "interjections": "Interjeições", "skipIfStartWith": "Ignorar se começar por", "removeTextBetween": "Remover texto entre", @@ -2298,7 +2511,6 @@ "removeInterjections": "Remover interjeições", "linesFoundX": "Linhas encontradas: {0}" }, - "pickAlignmentTitle": "Ferramentas", "removeUnicodeCharacters": { "title": "Remover/substituir caracteres Unicode", "charactersFoundX": "Caracteres Unicode encontrados: {0}", @@ -2308,13 +2520,13 @@ "pickFontNameInstalledFonts": "Tipos de letra instalados", "pickFontNameCollectedFonts": "Tipos de letra recolhidos", "colorPickerTitle": "Escolher cor", + "colorPickerBrightness": "Brilho", "filterLayersTitle": "Filtrar camadas para visualização", "filterLayersHideFromWaveform": "Ocultar da forma de onda/espectrograma", "filterLayersHideFromSubtitleGrid": "Ocultar da grelha de legendas", "filterLayersHideFromVideoPreview": "Ocultar da visualização do vídeo", "pickSubtitleFormat": "Escolher formato da legenda", "pickSubtitleFormatImageBasedNoPreview": "Formato de legenda baseado em imagem.\nOs bitmaps são gerados durante a conversão - sem pré-visualização de texto.", - "pickLayerTitle": "Definir camada", "recentColors": "Cores recentes", "fixCommonErrorsSettingsTitle": "Definições de correção de erros comuns" }, @@ -2359,59 +2571,51 @@ "correctWordsX": "Palavras corretas: {0}", "namesX": "Nomes: {0}", "addedToDictionaryX": "Adicionadas ao dicionário: {0}", - "doNotShowThisAgain": "Não mostrar esta mensagem novamente" + "doNotShowThisAgain": "Não mostrar esta mensagem novamente", + "editUseAlwaysList": "Editar lista \"Utilizar sempre\"...", + "useAlwaysListTitle": "Verificação ortográfica - lista \"Utilizar sempre\"", + "useAlwaysListHeader": "Lista \"Utilizar sempre\"", + "useAlwaysListDescription": "Palavras que a verificação ortográfica substitui automaticamente, guardadas por \"Alterar tudo\" e \"Utilizar sempre\". Um par só é usado quando a palavra está mal escrita.", + "useAlwaysWord": "Palavra mal escrita", + "xPairs": "{0:#,##0} pares", + "xUnusedPairs": "{0:#,##0} nunca usados", + "useAlwaysUnusedHint": "Nunca usado - esta palavra está escrita corretamente (ou é um nome ou palavra do utilizador), por isso a verificação ortográfica nunca a assinala", + "removeUnused": "Remover não usados", + "useAlwaysEmpty": "Ainda não há pares \"Utilizar sempre\" para este idioma", + "useAlwaysEmptyHint": "Os pares são adicionados quando clica em \"Alterar tudo\" ou \"Utilizar sempre\" na verificação ortográfica.", + "useAlwaysNoMatch": "Nenhum par corresponde à pesquisa", + "useAlwaysSameWord": "A substituição tem de ser diferente da palavra.", + "useAlwaysRememberOff": "\"Lembrar lista 'Utilizar sempre'\" está desativado nas Definições, por isso a verificação ortográfica não usa nem guarda esta lista." }, "video": { "burnIn": { "title": "Gerar vídeo com legendas fixas", - "infoAssaOff": "Nota: suporta o estilo de Advanced Sub Station Alpha.", - "infoAssaOn": "Nota: será utilizado o estilo de Advanced Sub Station Alpha :)", - "xGeneratedWithBurnedInSubsInX": "\"{0}\" gerado com legenda embutida em {1}.", - "timeRemainingMinutes": "Tempo restante: {0} minutos", - "timeRemainingOneMinute": "Tempo restante: Um minuto", - "timeRemainingSeconds": "Tempo restante: {0} segundos", - "timeRemainingAFewSeconds": "Tempo restante: Alguns segundos", - "timeRemainingMinutesAndSeconds": "Tempo restante: {0} minutos e {1} segundos", - "timeRemainingOneMinuteAndSeconds": "Tempo restante: Um minuto e {0} segundos", - "targetFileName": "Nome do ficheiro de destino: {0}", "targetFileSize": "Tamanho do ficheiro de destino (requer codificação de 2 passagens)", "fileSizeMb": "Tamanho do ficheiro em MB", "matchSourceVideoSize": "Corresponder ao tamanho do vídeo original", - "passX": "Passagem {0}", - "encoding": "Codificação", "bitRate": "Taxa de bits", "totalBitRateX": "Taxa de bits total: {0}", "sampleRate": "Taxa de amostra", "audio": "Áudio", - "stereo": "Estéreo", "preset": "Predefinição", + "tune": "Tune", "pixelFormat": "Formato de pixéis", "crf": "CRF", - "tuneFor": "Sintonizar para", - "alignRight": "Alinhar à direita", - "getStartPosition": "Posição inicial", - "getEndPosition": "Posição final", "useSource": "Utilizar original", - "useSourceFolder": "Utilizar pasta de origem", - "useSourceResolution": "Utilizar resolução original", - "outputSettings": "Ficheiro/pasta de saída...", "fontSizeFactor": "Fator de tamanho do tipo de letra", "boxType": "Tipo de caixa", - "fixRightToLeft": "Corrigir da direita para a esquerda", - "cut": "Cortar", "fromTime": "Do tempo", "toTime": "Até tempo", "audioEncoding": "Codificação do áudio", "outputProperties": "Propriedades de saída...", "videoFileSize": "Tamanho do ficheiro de vídeo", "oneBox": "Uma caixa", - "boxPerLine": "Caixa por linha", - "logoInfo": "Escolher uma imagem PNG e arraste-a para a posicionar no vídeo." + "logoInfo": "Escolher uma imagem PNG e arraste-a para a posicionar no vídeo.", + "noSubtitlesGenerateAnyway": "Não há linhas de legenda para incorporar.\n\nGerar o vídeo sem legendas?", + "noSubtitlesInXItemsGenerateAnyway": "{0} item(ns) do lote não têm linhas de legenda para incorporar.\n\nGerar esses vídeos sem legendas?" }, "videoTransparent": { - "title": "Abrir segunda legenda...", - "infoAssaOff": "Nota: suporta o estilo de Advanced Sub Station Alpha.", - "infoAssaOn": "Nota: será utilizado o estilo de Advanced Sub Station Alpha :)" + "title": "Abrir segunda legenda..." }, "audioToText": { "title": "Fala para texto", @@ -2419,6 +2623,21 @@ "translateToEnglish": "Traduzir para Inglês", "transcribing": "A transcrever áudio para texto...", "transcribingXOfY": "A transcrever {0} de {1}...", + "linesTranscribedXOfYFailedZ": "{0} de {1} linhas foram transcritas - {2} falharam ou não tinham fala.\n\nAs linhas que falharam mantêm o texto atual. Aplicar as linhas transcritas ou tentar novamente as que falharam (pode alterar primeiro o motor ou as definições)?", + "linesTranscribedXOfYCancelled": "A transcrição foi cancelada após {0} de {1} linhas.\n\nAplicar as linhas transcritas? As outras linhas mantêm o texto atual.", + "noLinesTranscribed": "Nenhuma das {0} linhas pôde ser transcrita.\nConsulte o registo das ferramentas para mais detalhes.", + "applyTranscribedLines": "Aplicar transcritas", + "retryFailedLines": "Repetir falhadas", + "isolateSpeech": "Isolar a fala (lento)", + "isolateSpeechHint": "Remove a música e os efeitos sonoros antes de transcrever. Resulta em menos linhas perdidas e melhores tempos em áudio com música alta, mas demora cerca do mesmo tempo que o próprio áudio com uma GPU - e muitas vezes mais sem uma.", + "isolatingSpeech": "A isolar a fala...", + "isolateSpeechFailed": "Não foi possível isolar a fala - a transcrever o áudio original.", + "detectSpeakers": "Detetar falantes", + "detectSpeakersHint": "Inicia cada linha com o falante, como \"(speaker 0)\", usando a diarização Sortformer da NVIDIA (até 8 falantes). Funciona melhor com motores que dividem as linhas quando o falante muda, como Parakeet e Cohere.", + "detectSpeakersNeedsNewerCrispAsr": "\"Detetar falantes\" requer o Crisp ASR v{0} ou mais recente, mas está instalada a v{1}.\n\nAtualize o Crisp ASR (o botão de engrenagem junto ao motor) ou desative \"Detetar falantes\".", + "xNeedsNewerCrispAsr": "{0} requer o Crisp ASR v{1} ou mais recente, mas está instalada a v{2}.\n\nTransferir e instalar a atualização agora?", + "vad": "VAD", + "vadHint": "Deteção de atividade de voz: apenas a fala é transcrita, cortada onde o falante faz pausas.\nAutomático: Silero, e apenas para os motores que precisam (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: sempre ativo, para todos os motores Crisp ASR. O FireRedVAD é o mais preciso, o Whisper-VAD dá menos cortes e mais limpos, mas é o mais lento.\nO Index-Echo usa sempre o Silero. --vad, --vad-model ou --chunk-seconds nas definições avançadas têm prioridade.", "inputLanguage": "Idioma de entrada", "advancedWhisperSettings": "Definições avançadas do Whisper", "downloadingSpeechToTextEngine": "A descarregar motor de fala para texto", @@ -2433,8 +2652,6 @@ "addCustomModelDotDotDot": "Adicionar modelo personalizado...", "customModelHelp": "Pode utilizar o seu próprio modelo: escolha o ficheiro do modelo ('.bin' ggml do whisper.cpp) ou a pasta do modelo (pasta faster-whisper com um 'model.bin' no interior). É copiado para a pasta de modelos e adicionado à lista acima.", "viewToolsLogFile": "Ver ficheiro de registo do Whisper", - "reDownloadX": "Descarregar novamente {0}", - "downloadX": "Transferir o {0}", "updateXTitle": "Atualizar {0}?", "updateXMessage": "Está disponível uma versão mais recente de {0}.{1}{1}Transferir e instalar a atualização agora?", "downloadingSpeechToTextModel": "Descarregar modelo de fala para texto", @@ -2446,14 +2663,6 @@ "fixCasing": "Corrigir maiúsculas/minúsculas", "addPeriods": "Adicionar pontos", "changeUnderlineToColor": "Alterar sublinhado para cor", - "cueBuilding": "Construção de cues (MLX Whisper)", - "cueRebuild": "Reconstruir cues a partir das marcas de tempo das palavras", - "cueMaxChars": "Máximo de caracteres por cue", - "cueMaxSeconds": "Máximo de segundos por cue", - "cueMaxCps": "Máximo de caracteres por segundo", - "vocabularyPrompt": "Prompt de vocabulário (nomes, lugares, termos)", - "beamSize": "Beam size", - "beamSizeNote": "0 descodifica mais rápido. 5 dá a melhor precisão (como o Faster Whisper) com cerca de 20-30% mais tempo. Valores acima de 5 raramente ajudam.", "removeNonSpeechLines": "Remover linhas sem fala", "removeNonSpeechLinesHint": "Eliminar as linhas que apenas descrevem sons, como \"[Música]\" ou \"(ondas a rebentar)\"", "removeRepeatedLines": "Remover linhas repetidas", @@ -2512,7 +2721,7 @@ "cloneVoicePerLinePreparing": "A obter a voz de cada linha a partir do vídeo...", "cloneVoicePerLineNeedsVideo": "Para clonar a voz de cada linha é necessário o vídeo a que a legenda pertence. Abra o vídeo e tente novamente.", "cloneVoicePerLineNoClips": "Não foi possível obter áudio do vídeo, pelo que não há nada a partir do qual clonar. Verifique se o vídeo tem uma faixa de áudio.", - "cloneVoicePerLineNeedsOriginalSubtitleX": "O {0} só consegue clonar uma linha quando sabe o que é dito no vídeo nessa linha, o que vem da legenda no idioma original. Não está carregada nenhuma legenda original, pelo que todas as linhas seriam ditas pela primeira voz importada em vez da voz do vídeo.\n\nAbra a legenda original (Ficheiro > Abrir original...) ao lado da tradução e gere novamente.", + "cloneVoicePerLineTranscribeClipsXYZ": "{0} só consegue clonar uma linha quando sabe o que é dito no vídeo nessa linha. Isso não é conhecido para {1} de {2} linhas - normalmente vem da legenda no idioma original (Ficheiro > Abrir original...).\n\nTranscrever agora essas linhas a partir do vídeo com fala para texto?\n\nSim: escolha o motor e o idioma falado no vídeo, e os excertos de referência são transcritos antes de a fala ser gerada.\nNão: gerar mesmo assim - essas linhas são faladas por uma voz comum em vez da voz do vídeo.", "voiceCloneConsentTitle": "Clonagem de voz - antes de começar", "voiceCloneConsentHeader": "Está prestes a clonar uma voz", "voiceCloneConsentIntro": "A clonagem copia a voz de uma pessoa real. Isso implica regras na maioria dos locais e, na UE, deveres legais que recaem sobre si e não sobre o Subtitle Edit. Leia isto uma vez.", @@ -2528,6 +2737,12 @@ "voiceCloneConsentDeclined": "A clonagem de voz não está disponível enquanto estes termos não forem aceites.", "advancedTtsAudioProcessing": "Processamento de áudio", "advancedTtsOutput": "Saída", + "advancedTtsVoiceCloning": "Clonagem de voz", + "cleanCloneReferences": "Limpar referências de clonagem de voz (Sidon)", + "cleanCloneReferencesDescription": "Remove música, ruído e reverberação do áudio a partir do qual uma voz é clonada: excertos retirados do vídeo e gravações importadas no gestor de vozes. Utiliza o modelo de restauro de fala Sidon no audio.cpp (transferência de 940 MB). A voz clonada deixa de copiar o fundo, mas a fala muito baixa ou sobreposta pode ficar abafada.", + "cleaningCloneReferencesDotDotDot": "A limpar as referências de clonagem de voz...", + "downloadSidonTitle": "Transferir Sidon?", + "downloadSidonQuestionX": "A limpeza das referências de clonagem de voz requer o modelo de restauro de fala Sidon ({0}).\n\nTransferi-lo agora? Sem ele, as referências são usadas tal como estão.", "rubberbandInstalled": "(instalado)", "rubberbandNotFound": "(não encontrado no FFmpeg)", "generationFolder": "Pasta de geração", @@ -2536,14 +2751,11 @@ "deleteTempFilesDescription": "Elimina a pasta de geração quando a janela Texto para fala é fechada. Os ficheiros de áudio e de vídeo guardados são mantidos.", "piperSettings": "Definições do Piper", "title": "Texto para voz", - "textToSpeechEngine": "Motor de conversão de texto em fala", "reviewAudioSegments": "TTS - Analisar segmentos de áudio", "reviewAudioSegmentsHistory": "TTS - Rever histórico de áudio", "stability": "Estabilidade", "similarity": "Semelhança", "speakerBoost": "Aumento do alto-falante", - "styleExaggeration": "Exagero de estilo", - "regenerateAudioSelectedLine": "Regenerar", "generateSpeechFromText": "Gerar voz a partir de texto", "testVoice": "Teste de voz", "addAudioToVideoFile": "Adicionar áudio ao ficheiro de vídeo (novo ficheiro)", @@ -2562,22 +2774,98 @@ "videoEncodingSettings": "TTS - Definições de codificação de vídeo", "elevenLabsSettings": "TTS - Definições do ElevenLabs", "elevenLabsSettingsResetHint": "Repor as definições do ElevenLabs para os valores predefinidos", + "provider": "Fornecedor", + "openAiCompatibleSettings": "TTS - Definições compatíveis com OpenAI", + "customServerUrl": "URL de servidor personalizado", + "customServerUrlHint": "Endpoint de fala completo de um servidor compatível com OpenAI, usado quando o fornecedor é \"Custom\", por ex. http://localhost:8880/v1/audio/speech", + "customModels": "Modelos personalizados", + "customModelsHint": "Nomes de modelos separados por vírgulas, oferecidos quando o fornecedor é \"Custom\"", + "customVoices": "Vozes personalizadas", + "customVoicesHint": "Nomes de vozes separados por vírgulas, usados pelo fornecedor \"Custom\" e pelos modelos OpenRouter que não publicam lista de vozes", + "instructions": "Instruções", + "instructionsHint": "Estilo de fala opcional, por ex. \"Fala com uma voz calma e calorosa\". Enviado apenas para modelos que o suportam (não tts-1/tts-1-hd)", + "openAiSpeedHint": "Velocidade da fala de 0.25 a 4.0 (1.0 é normal). Nem todos os modelos a suportam", + "outputFormat": "Formato de saída", + "outputFormatHint": "Formato de áudio pedido ao servidor. \"Auto\" pede MP3 e muda para PCM em modelos que só devolvem PCM (por ex. Gemini TTS)", "regenerateAudio": "Regenerar áudio", "autoContinuePlaying": "Continuar automaticamente", "addingAudioToVideoFileDotDotDot": "A adicionar áudio ao ficheiro de vídeo...", "preparingMergeDotDotDot": "A preparar combinação...", "importVoiceDotDotDot": "Importar voz...", + "renameVoiceDotDotDot": "Mudar o nome da voz...", + "renameVoiceTitle": "Mudar o nome da voz", + "voiceXCouldNotBeRenamedX": "Não foi possível mudar o nome da voz '{0}': {1}", + "deleteVoiceDotDotDot": "Eliminar voz...", + "deleteVoiceTitle": "Eliminar voz", + "deleteVoiceXQuestion": "Eliminar a voz '{0}'?\n\nA gravação de referência e os respetivos ficheiros são removidos do disco.", + "voiceXCouldNotBeDeletedX": "Não foi possível eliminar a voz '{0}': {1}", "voiceImportSuccessTitle": "Voz importada", "voiceXImported": "Voz '{0}' importada com sucesso", "dropAudioFileHereToImportVoice": "Largue o ficheiro de áudio aqui para importar a voz", "dropAudioFileHereHint": ".wav ou .mp3", "voiceCloneTranscriptTitle": "Introduza a transcrição do áudio (obrigatório para clonagem de voz)", + "voiceManagerTitle": "TTS - Gestor de vozes", + "voiceManagerDotDotDot": "Gestor de vozes...", + "voiceManagerMenuItem": "Gestor de vozes TTS...", + "speakFromCurrentLineTitle": "Falar a partir da linha atual", + "speakFromCurrentLineDotDotDot": "Falar a partir da linha atual...", + "speakFromCurrentLineHint": "Lê as linhas em voz alta, uma após outra, começando na linha atual. Prima Escape ou clique noutra linha para parar.", + "stopSpeaking": "Parar de falar", + "speakingLineX": "A falar a linha {0}... (Escape para parar)", + "playWithSpeechTitle": "Reproduzir com fala", + "playWithSpeechDotDotDot": "Reproduzir com fala...", + "playWithSpeechHint": "Reproduz o vídeo e fala cada linha quando o vídeo a alcança. Pause e procure como habitualmente; prima Escape para parar.", + "lowerVideoVolumeWhileSpeaking": "Baixar o volume do vídeo durante a fala", + "pauseVideoWhenSpeechRunsLate": "Pausar o vídeo quando a fala invade a linha seguinte", + "waitingForSpeechLineX": "A gerar a fala da linha {0}... (Escape para parar)", + "voiceKindClone": "Voz clonada", + "voiceKindPreset": "Incorporada", + "voiceKindModel": "Modelo de voz", + "voiceKindOnline": "Online", + "transcript": "Transcrição", + "transcriptRequiredHint": "Obrigatório - o motor lê esta transcrição da gravação (ref-text) ao clonar", + "transcriptOptionalHint": "Opcional - uma transcrição precisa da gravação melhora a clonagem", + "saveTranscript": "Guardar transcrição", + "searchVoices": "Pesquisar vozes", + "loadingVoicesDotDotDot": "A carregar vozes...", + "noVoicesForEngine": "Sem vozes - importe uma gravação ou transfira um pacote de vozes", + "noVoicesMatchFilter": "Nenhuma voz corresponde à pesquisa", + "copyVoiceTo": "Copiar voz para", + "copyVoiceToDotDotDot": "Copiar voz para motor...", + "copyingVoiceXToYDotDotDot": "A copiar a voz '{0}' para {1}...", + "voiceXCopiedToY": "Voz '{0}' copiada para {1}", + "voiceXCouldNotBeCopiedToY": "Não foi possível copiar a voz '{0}' para {1} - consulte o registo para mais detalhes", + "voiceXAlreadyExistsInYContinue": "Já existe uma voz com o nome '{0}' em {1}.\n\nCopiar mesmo assim?", + "openVoicesFolder": "Abrir pasta de vozes", + "downloadVoicePacksDotDotDot": "Transferir pacotes de vozes...", + "downloadVoicePacksTitle": "TTS - Transferir pacotes de vozes", + "voicePackIntro": "Os pacotes de vozes são conjuntos de gravações curtas e limpas com transcrições, prontas para clonar. Cada pacote é importado para o motor escolhido (as vozes já existentes são ignoradas) e inclui um ATTRIBUTION.txt com a respetiva licença e fontes.", + "voicePackDetailsXVoicesYSizeZLicense": "{0} vozes · {1} · {2}", + "installToEngine": "Instalar no motor", + "downloadAndInstall": "Transferir e instalar", + "selectAtLeastOneVoicePack": "Selecione pelo menos um pacote de vozes", + "downloadingXDotDotDot": "A transferir {0}...", + "installingXDotDotDot": "A instalar {0}...", + "xVoicesInstalledYSkipped": "{0} vozes instaladas ({1} já existentes)", "useSpeechToTextDotDotDot": "Utilizar fala para texto...", "advancedTtsSettings": "Definições avançadas de TTS", "proAudioPostProcessing": "Pós-processamento de áudio profissional", "proAudioPostProcessingDescription": "Aplica calor de equalização, gate de ruído, compressão, normalização de volume (-16 LUFS) e fade in/out a cada segmento.", + "generatingSpeechSegmentXOfY": "A gerar a fala: segmento {0} de {1}", + "adjustingSpeedSegmentXOfY": "A ajustar a velocidade: segmento {0} de {1}", + "mergingAudioSegmentXOfY": "A combinar o áudio: segmento {0} de {1}", + "postProcessingSegmentXOfY": "Pós-processamento: segmento {0} de {1}", "audioDucking": "Ducking de áudio", "audioDuckingDescription": "Reduz o volume do áudio do vídeo original e mistura-o com o áudio TTS, para que a faixa de áudio original ainda seja ligeiramente audível.", + "removeOriginalSpeech": "Remover a fala original (lento)", + "removeOriginalSpeechDescription": "Mantém a música e os efeitos sonoros do vídeo original, mas remove a sua fala e mistura a nova fala por cima. Demora cerca do mesmo tempo que o próprio vídeo com uma GPU, e muitas vezes mais sem uma. Com o ducking de áudio ativo, o seu volume aplica-se à música e aos efeitos. Só se aplica quando a fala é adicionada ao ficheiro de vídeo.", + "removingOriginalSpeech": "A remover a fala original...", + "removeOriginalSpeechFailed": "Não foi possível remover a fala original - a fala foi adicionada ao vídeo sem essa remoção.", + "speechRemovalModel": "Modelo", + "speechRemovalModelDescription": "A melhor qualidade preserva o máximo da música e dos efeitos sonoros. O rápido é cerca de três vezes mais rápido, perdendo um pouco mais da música.", + "speechRemovalBestQuality": "Melhor qualidade (Mel-Band RoFormer)", + "speechRemovalFast": "Rápido (HTDemucs)", + "videoTruncatedWarning": "A imagem no novo ficheiro de vídeo para após {0}, mas o vídeo original tem {1} de duração - a imagem ficará congelada enquanto o som continua.\n\nO ficheiro foi mantido. Consulte error-log.txt na pasta de dados do Subtitle Edit para ver a saída do ffmpeg.", "originalVolumePercent": "% do volume original", "vadSilenceCompression": "Compressão de silêncio VAD", "vadSilenceCompressionDescription": "Encurta as pausas entre as palavras antes de alterar o andamento. Utiliza deteção de atividade de voz para comprimir apenas as pausas de silêncio, mantendo a fala intacta. Este é o primeiro passo preferido – reduz a duração sem qualquer perda de qualidade.", @@ -2644,7 +2932,6 @@ "subtitleMergedLinesAppliedPlural": "Aplicadas {0} junções de linhas da conversão de texto em fala" }, "shotChanges": { - "titleGenerateOrImport": "Gerar/importar mudanças de cena", "generateShotChanges": "Gerar mudanças de cena", "importShotChanges": "Importar mudanças de cena", "generateShotChangesWithFfmpeg": "Gerar mudanças de cena com o FFmpeg", @@ -2654,7 +2941,9 @@ "timeCodeFormatColon": "Formato do código de tempo:", "shotChangesList": "Lista de mudanças de cena", "shotChangesClearQuestion": "Tem a certeza de que pretende limpar todas as mudanças de cena?", - "deleteSelectedShotChangeQuestion": "Tem a certeza de que pretende eliminar a mudança de cena selecionada?" + "deleteSelectedShotChangeQuestion": "Tem a certeza de que pretende eliminar a mudança de cena selecionada?", + "shotChanges": "Mudanças de cena", + "exportShotChanges": "Exportar mudanças de cena" }, "chapters": { "title": "Capítulos", @@ -2684,7 +2973,6 @@ "scaleTimesDescription": "Ajustar a escala do tempo de cada capítulo de uma taxa de fotogramas para outra.", "fromFrameRate": "De", "toFrameRate": "Para", - "apply": "Aplicar", "writeToVideo": "Escrever no vídeo...", "writeToVideoTitle": "Escrever os capítulos no vídeo", "writeToVideoDescription": "Os capítulos são escritos numa cópia do ficheiro de vídeo. Nada é recodificado, pelo que é rápido e sem perdas.", @@ -2694,7 +2982,6 @@ "writtenToX": "Capítulos escritos em {0}", "unableToWriteChapters": "Não foi possível escrever os capítulos no ficheiro de vídeo.", "chaptersSavedToX": "Capítulos guardados em {0}", - "noVideoLoaded": "Nenhum vídeo carregado", "emptyListCallToAction": "Ainda não há capítulos - adicione um na posição do vídeo, ou importe-os de um vídeo ou ficheiro." }, "videoOcr": { @@ -2705,10 +2992,6 @@ "bottomHalf": "Metade inferior", "fullFrame": "Fotograma completo", "engine": "Motor de OCR", - "language": "Idioma", - "url": "URL", - "model": "Modelo", - "apiKey": "Chave API", "scan": "Analisar", "framesPerSecond": "Fotogramas por segundo", "textBrightnessMinimum": "Brilho mínimo do texto (0=desativado)", @@ -2723,10 +3006,10 @@ "runningOcrXY": "A executar OCR... {0}/{1}", "noLinesFoundTitle": "Nenhuma legenda encontrada", "noLinesFoundMessage": "Não foi encontrado texto na área de análise - experimente ajustar a área de análise, o motor ou o brilho mínimo.", + "ocrStoppedEarlyMessage": "O motor de OCR parou antes de todos os fotogramas serem lidos, por isso as linhas encontradas até agora são mantidas e as restantes estão em falta.{0}{0}{1}", "linesFoundX": "{0} linhas encontradas", "refiningTimingXY": "A afinar os tempos... {0}/{1}", "fixOcrErrors": "Corrigir erros de OCR", - "dictionary": "Dicionário", "editLineX": "Editar linha {0}", "downloadDictionaryHint": "Transferir um dicionário de verificação ortográfica...", "framesPerSecondHint": "Quantos fotogramas por segundo são analisados. 5 cobre legendas normais; valores mais altos apanham linhas muito curtas e melhoram o agrupamento, mas custam mais tempo de OCR.", @@ -2743,7 +3026,58 @@ "testOcr": "Testar fotograma atual", "testOcrRunning": "A testar OCR no fotograma atual...", "testOcrResultX": "Resultado do teste: {0}", - "testOcrNoTextFound": "Teste: nenhum texto encontrado na área de análise" + "testOcrNoTextFound": "Teste: nenhum texto encontrado na área de análise", + "engineSettings": "Definições do motor de OCR", + "engineBuiltIn": "Incorporado no sistema operativo", + "engineExternalServer": "Servidor externo (instalado e gerido fora do Subtitle Edit)", + "engineCloudApi": "API na nuvem (requer uma chave de API)", + "engineNothingToInstall": "Nada a instalar", + "engineModelsMissing": "Motor instalado, modelos em falta", + "website": "Website" + }, + "backgroundMusic": { + "title": "Gerar música de fundo", + "generateBackgroundMusicDotDotDot": "Gerar música de fundo...", + "preset": "Predefinição", + "prompt": "Prompt", + "tempoBpm": "Andamento (BPM)", + "generateSeconds": "Gerar (segundos)", + "seed": "Semente", + "randomSeed": "Aleatória", + "outputLength": "Duração da saída", + "outputLengthVideoX": "{0} (duração do vídeo - a música repete-se sem cortes)", + "musicVolumePercent": "Volume da música (%)", + "removeExistingAudioTracks": "Remover faixas de áudio existentes", + "originalAudioVolumePercent": "Volume do áudio original (%)", + "saveAudioDotDotDot": "Guardar áudio...", + "addToVideoDotDotDot": "Adicionar ao vídeo...", + "engineInfo": "ACE-Step 1.5 Turbo via audio.cpp (licença MIT) - executado localmente", + "presetCooking": "Culinária / pastelaria", + "presetTech": "Tecnologia / análise de gadgets", + "presetForest": "Floresta / natureza", + "presetRelaxingPiano": "Piano relaxante", + "presetLofiVlog": "Vlog lo-fi", + "presetCorporate": "Empresarial / explicativo", + "loadingModel": "A carregar o modelo...", + "composing": "A compor...", + "generatingAudio": "A gerar o áudio...", + "decodingAudio": "A descodificar o áudio...", + "creatingLoop": "A criar repetição sem cortes...", + "resultLoopXYZ": "Repetição: {0} a {1} BPM, correspondência da junção {2}%", + "resultNoLoopX": "Música pronta: {0}", + "addingMusicToVideo": "A adicionar música ao vídeo...", + "downloadModelTitle": "Transferir modelo de música?", + "downloadModelQuestionX": "A geração de música requer o modelo ACE-Step 1.5 ({0}).\n\nTransferir o modelo?", + "downloadingModel": "A transferir o modelo ACE-Step 1.5...", + "saveAudioTitle": "Guardar música de fundo", + "audioFileSavedX": "Ficheiro de áudio guardado: {0}", + "unableToGenerateMusic": "Não foi possível gerar a música", + "unableToAddMusicToVideo": "Não foi possível adicionar a música ao vídeo", + "outputLengthTextToSpeech": "Segue a fala gerada - a música repete-se sem cortes e baixa enquanto alguém fala", + "addBackgroundMusic": "Adicionar música de fundo", + "addBackgroundMusicHint": "Gerar música localmente com o ACE-Step 1.5 e misturá-la por baixo da fala - baixa enquanto alguém fala", + "generatingBackgroundMusicDotDotDot": "A gerar música de fundo...", + "mixingBackgroundMusicDotDotDot": "A misturar música de fundo..." }, "goToVideoPosition": "Posição vídeo:", "goToVideoPositionDotDotDot": "Ir para a posição do vídeo...", @@ -2754,30 +3088,88 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "Abrir legenda secundária no leitor de vídeo...", "openSecondarySubtitleOnVideoPlayer": "Legenda secundária (no leitor de vídeo)", "removeSecondarySubtitleOnVideoPlayer": "Remover legenda secundária do leitor de vídeo", + "editSecondarySubtitleSettings": "Editar definições da legenda secundária", + "editSecondarySubtitleSettingsDotDotDot": "Editar definições da legenda secundária...", + "secondarySubtitleRememberSettings": "Lembrar estas definições", + "secondarySubtitleDoNotShowAgain": "Não mostrar esta caixa de diálogo novamente", + "secondarySubtitleJustifyLines": "Justificar as linhas", "openRecentVideo": "Abrir vídeo recente", "clearRecentVideos": "Limpar vídeos recentes", "cutVideoTitle": "Cortar vídeo", "cutVideoDotDotDot": "Cortar vídeo...", + "remuxVideoTitle": "Remultiplexar vídeo", + "remuxVideoDotDotDot": "Remultiplexar vídeo...", + "remuxVideoInputVideo": "Vídeo de entrada:", + "remuxVideoMultipleTracksRequiresMkv": "Várias faixas de áudio ou de legendas requerem o contentor MKV. O formato de saída foi automaticamente alterado para .mkv.", + "remuxVideoOutputFormat": "Formato de saída:", + "remuxVideoOutputFile": "Ficheiro de saída:", + "remuxVideoRemuxing": "A remultiplexar vídeo e áudio...", + "remuxVideoFinalizing": "A finalizar o ficheiro de saída (a mover o índice para o início)...", + "remuxVideoCompleted": "Vídeo remultiplexado com êxito.", + "remuxVideoFailed": "Falha ao remultiplexar o vídeo.", + "remuxVideoPleaseSelectBoth": "Selecione os ficheiros de vídeo e de áudio.", + "remuxVideoAssRequiresMkv": "As legendas ASS/SSA requerem o contentor MKV para preservar toda a formatação e estilos.", + "remuxVideoSccRequiresMov": "As legendas Scenarist (.scc) são incorporadas como closed captions CEA-608, que requerem o contentor MOV ou MPG. O formato de saída foi automaticamente alterado para .mov.", + "remuxVideoSccNotWithWebM": "As closed captions Scenarist (.scc) precisam do contentor MOV, que não pode conter o vídeo VP9/AV1 de um ficheiro .webm. Remova o ficheiro .scc ou converta-o para outro formato de legenda.", + "remuxVideoMpgMaxTwoCaptionTracks": "Um ficheiro .mpg contém no máximo duas faixas de closed captions (CC1 e CC3) - remova ficheiros de legendas para que restem uma ou duas.", + "remuxVideoMccRequiresMpg": "As legendas MacCaption (.mcc) são incorporadas como closed captions CEA-608/708 no vídeo MPEG-2, o que requer o contentor MPG. O formato de saída foi automaticamente alterado para .mpg.", + "remuxVideoMpgReencodeVideoX": "As closed captions num ficheiro .mpg precisam de vídeo MPEG-2, e o vídeo é {0}. Recodificar o vídeo para MPEG-2? Isto demora mais e reduz um pouco a qualidade.", + "remuxVideoFileHasNoAudioX": "\"{0}\" não tem faixa de áudio, por isso não pode ser usado como fonte de áudio.", + "remuxVideoAddingClosedCaptions": "A adicionar closed captions...", + "remuxVideoSelectAudioTrack": "Selecionar faixa de áudio", + "remuxVideoSelectAudioTrackFor": "Selecionar faixa de áudio para {0}", + "remuxVideoSelectAudioTrackPrompt": "O ficheiro '{0}' contém {1} faixas de áudio. Selecione a faixa de áudio a remultiplexar:", + "remuxVideoVideoFile": "vídeo", + "remuxVideoAudioFile": "áudio", + "remuxVideoAudioFiles": "Ficheiros de áudio:", + "remuxVideoSubtitleFiles": "Ficheiros de legendas (opcional, legendas não incorporadas na imagem):", + "remuxVideoSelectAudioTrackDotDotDot": "Selecionar faixa de áudio...", + "remuxVideoFilesX": "{0} ficheiros", + "remuxVideoMixAudio": "Misturar o áudio numa só faixa", + "remuxVideoVolumePercent": "Volume %:", + "remuxVideoVolumeX": "Volume {0}%", + "remuxVideoFastStart": "Otimizar para streaming na web (mover o índice para o início - mais lento)", "embedSubtitlesDotDotDot": "Adicionar/remover legendas incorporadas...", "generateTimeCodes": "Gerar tempos", "checkeredImage": "Imagem axadrezada", - "saveVideoAsTitle": "Guardar vídeo como", "promptForFfmpegParamsAndGenerate": "Pedir parâmetros do FFmpeg e gerar", "cutVideoCutSegments": "Cortar segmentos", "cutVideoMergeSegments": "Unir segmentos", "cutVideoSplitSegments": "Guardar segmentos individualmente", - "cutVideoType": "Tipo de corte", - "mpvRenderAuto": "Auto", - "mpvRenderNative": "Nativo", - "mpvRenderOpenGl": "OpenGL", - "mpvRenderSoftware": "Software (lento)", "cutVideoAlsoCutSubtitle": "Cortar também a legenda", "cutVideoSubtitleFileGeneratedX": "Ficheiro de legenda gerado: {0}", + "cutVideoTransition": "Transição entre segmentos", + "cutVideoTransitionDurationSeconds": "Duração (segundos)", + "cutVideoFadeInSeconds": "Aparecer a partir do preto no início (segundos)", + "cutVideoFadeOutSeconds": "Desvanecer para preto no fim (segundos)", + "cutVideoPreviewTransition": "Pré-visualizar transição", + "cutVideoPreviewTransitionTitle": "Pré-visualização da transição", + "cutVideoPreviewNeedsJoin": "Não há nenhuma junção para pré-visualizar - adicione pelo menos dois segmentos para combinar, ou um segmento para cortar do meio.", + "cutVideoTransitionInfoX": "Cada transição sobrepõe as partes que junta, por isso a saída fica {0} segundos mais curta por junção. Uma legenda cortada é reajustada em conformidade.", + "cutVideoTransitionFade": "Desvanecer", + "cutVideoTransitionFadeBlack": "Desvanecer através do preto", + "cutVideoTransitionFadeWhite": "Desvanecer através do branco", + "cutVideoTransitionFadeGrays": "Desvanecer através do cinzento", + "cutVideoTransitionDissolve": "Dissolver", + "cutVideoTransitionWipeLeft": "Varrer para a esquerda", + "cutVideoTransitionWipeRight": "Varrer para a direita", + "cutVideoTransitionWipeUp": "Varrer para cima", + "cutVideoTransitionWipeDown": "Varrer para baixo", + "cutVideoTransitionSlideLeft": "Deslizar para a esquerda", + "cutVideoTransitionSlideRight": "Deslizar para a direita", + "cutVideoTransitionSlideUp": "Deslizar para cima", + "cutVideoTransitionSlideDown": "Deslizar para baixo", + "cutVideoTransitionSmoothLeft": "Suave para a esquerda", + "cutVideoTransitionSmoothRight": "Suave para a direita", + "cutVideoTransitionCircleOpen": "Círculo a abrir", + "cutVideoTransitionCircleClose": "Círculo a fechar", + "cutVideoTransitionRadial": "Radial", + "cutVideoTransitionPixelize": "Pixelizar", + "cutVideoTransitionBlur": "Desfocar", "importCurrentSubtitle": "Importar legenda atual", "addRemoveEmbeddedSubtitlesTitle": "Adicionar/remover legendas incorporadas", "addRemoveEmbeddedSubtitlesMp4Title": "Adicionar/remover legendas incorporadas (MP4)", "addCurrentSubtitle": "Adicionar legenda atual", - "embeddedTrackColumnNew": "Novo", "embeddedTrackNoSubtitlesFoundTitle": "Nenhuma legenda encontrada", "embeddedTrackNoSubtitlesFoundMessage": "O ficheiro selecionado não contém legendas.", "embeddedTrackNoTracksTitle": "Nenhuma faixa adicionada", @@ -2789,7 +3181,7 @@ "embeddedTrackGeneratingVideoXY": "A gerar vídeo... {0}% {1}", "embeddedTrackGeneratingVideo": "A gerar vídeo...", "mp4FilesFilter": "Ficheiros MP4", - "titleOrLanguage": "Título/idioma", + "embeddedTracksPickVideoHint": "Escolha um ficheiro de vídeo, ou largue-o aqui, para ver as suas faixas de legendas.", "viewMatroskaTrackX": "Ver faixa Matroska - {0}", "resolutionSeparator": "x", "openFromUrlTitle": "Abrir ficheiro de vídeo da URL", @@ -2799,9 +3191,7 @@ "openFromUrlDownloadAndOpen": "Descarregar e abrir", "openFromUrlDownloadAndOpenDescription": "Guardar o vídeo localmente e abri-lo.", "openFromUrlDownloadAndOpenNote": "Necessário para picos de fala para texto e forma de onda.", - "openFromUrlMissing": "Introduza primeiro o URL do vídeo.", "openFromUrlDownloadingTitle": "A descarregar vídeo", - "openFromUrlSaveAs": "Guardar vídeo como", "openFromUrlDownloadSubtitles": "Descarregar também as legendas", "openFromUrlDownloadVideo": "Transferir vídeo", "openFromUrlIncludeAutoGeneratedSubtitles": "Incluir legendas geradas automaticamente (idioma original)", @@ -2838,12 +3228,15 @@ "reEncodeGeneratingDone": "Geração concluída", "reEncodeGeneratedFilesX": "Ficheiros gerados ({0}):", "reEncodeFfmpegParameters": "Parâmetros do FFmpeg", + "analyzingVideoX": "A analisar o vídeo... {0}% {1}", + "analyzingVideoXofY": "A analisar o vídeo {0}/{1}... {2}% {3}", + "backgroundImageFileNotSelected": "Ficheiro de imagem de fundo não selecionado", + "backgroundImageFileDoesNotExistX": "O ficheiro de imagem de fundo não existe: {0}", "voices": "Vozes", "presets": "Predefinições", "talkerX": "Locutor {0}", "baseModel": "Modelo base", "turboModel": "Modelo turbo", - "ttsUpdateX": "Atualizar {0}", "ttsEngineNotInstalled": "{0} não instalado", "ttsEngineUpdateAvailable": "{0} - atualização disponível", "ttsEngineTooOldUpdateRequired": "{0} demasiado antigo - é necessário atualizar", @@ -2866,19 +3259,25 @@ "cloneVoiceTo": "Clonar voz para", "cloneVoiceNameTitle": "Nome da nova voz", "cloneVoiceExtractFailed": "Não foi possível extrair o áudio da linha selecionada.", + "lineXHasNoDuration": "A linha {0} não tem duração (o tempo final não é posterior ao tempo inicial), por isso não há áudio para extrair.", + "audioClipsSkippedLinesX": "Não foi possível extrair áudio para estas linhas, por isso foram ignoradas: {0}", "toggleShotChange": "Alternar a mudança de cena", "resetWaveformZoomAndSpeed": "Repor zoom e velocidade da forma de onda", "showOriginalSubtitle": "Mostrar a legenda original", + "timelineGroupTracksBy": "Agrupar faixas de legendas por", + "timelineShowThumbnails": "Mostrar miniaturas do vídeo", + "showSpeechOnly": "Mostrar apenas a fala (lento a gerar)", + "isolatingSpeechForWaveformX": "A isolar a fala para a forma de onda... {0}", + "isolatingSpeechForWaveformFailed": "Não foi possível isolar a fala para a forma de onda - consulte o registo das ferramentas", + "speechOnlyWaveformReady": "A forma de onda mostra agora apenas a fala", "showOnlyWaveform": "Mostrar apenas forma de onda", "showOnlySpectrogram": "Mostrar apenas espectrograma", "showWaveformAndSpectrogram": "Mostrar forma de onda e espectrograma", - "spectrogramClassic": "Clássico", "spectrogramClassicViridis": "Viridis", "spectrogramClassicPlasma": "Plasma", "spectrogramClassicInferno": "Inferno", "spectrogramClassicTurbo": "Turbo", "spectrogramNeon": "Néon", - "waveformDrawStyleClassic": "Clássico", "waveformDrawStyleFancy": "Sofisticado", "setVideoPositionAndPauseAndSelectSubtitle": "Definir posição do vídeo, pausar e selecionar legenda", "setVideopositionAndPauseAndSelectSubtitleAndCenter": "Definir posição do vídeo, pausar, selecionar legenda e centrar", @@ -2888,7 +3287,6 @@ }, "sync": { "visualSync": "Sincronia visual", - "sync": "Sincronizar", "startScene": "Cena inicial", "endScene": "Cena final", "playTwoSecondsAndBack": "Reproduzir 2 segundos e voltar", @@ -2904,19 +3302,18 @@ "adjustSelectedLinesAndForward": "Ajustar linhas selecionadas e avançar", "toFrameRate": "Para a taxa de fotogramas", "fromFrameRate": "Da taxa de fotogramas", + "videoXFrameRateY": "{0} - {1} fps", "adjustAllTimes": "Ajustar todos os tempos (mostrar antes/depois)...", "showEarlier": "Mostrar _antes", "showLater": "Mostrar _depois", - "changeFrameRate": "Alterar a taxa de fotogramas", "setSyncPoint": "Definir ponto de sincronia", "setSyncPointViaVideo": "Definir ponto de sincronização através do vídeo...", "syncPointTimeCode": "Tempo do ponto de sincronização", "syncPoints": "Pontos de sincronização", "pointSync": "Ponto de sincronia...", "pointSyncViaOther": "Pontos de sincronização via outra legenda", - "adjustmentX": "Ajuste: {0}", - "totalAdjustmentX": "Total de ajustes: {0}", - "syncPointCandidateInfo": "As linhas que começam após {0}+ segundos de silêncio são realçadas - costumam dar pontos de sincronização fiáveis", + "syncPointCandidateAfterInfo": "As linhas seguidas de {0}+ segundos de silêncio estão realçadas - costumam ser pontos de sincronização fiáveis", + "gapAfter": "Intervalo depois", "adjustAllShortcuts": "Atalhos de teclado:\n\n• Shift + Esquerda/Direita: Mover 10 ms\n• Ctrl + Esquerda/Direita: Mover 100 ms\n• Alt + Esquerda/Direita: Mover 500 ms", "adjustAllShortcutsFrames": "Atalhos de teclado:\r\n\r\n• Shift + Esquerda/Direita: Mover 1 fotograma\r\n• Ctrl + Esquerda/Direita: Mover 10 fotogramas\r\n• Alt + Esquerda/Direita: Mover 1 segundo", "offsetInSeconds": "Deslocamento em segundos", @@ -2936,6 +3333,7 @@ "lineMerge": "Unir linha", "delayInSecondsBetweenRequests": "Atraso em segundos entre pedidos", "maxBytesPerRequest": "Máximo de bytes por pedido", + "keepMusicLinesUntranslated": "Não traduzir linhas entre símbolos de música (♪ ... ♪)", "promptText": "Texto do pedido", "resetPromptToDefault": "Repor a instrução predefinida", "translateEachLineSeparately": "Traduzir cada linha separadamente", @@ -2949,11 +3347,10 @@ "readyToTranslate": "Pronto para traduzir", "translating": "A traduzir...", "translationComplete": "Tradução concluída", + "translateInPlaceNoOriginal": "Traduzir no local (não criar original)", "translationCancelled": "Tradução cancelada", "swapLanguages": "Trocar idiomas de origem e de destino", "xIsAlreadyDownloadedReDownload": "{0} já foi descarregado. Descarregar novamente?", - "advancedDotDotDot": "Avançado...", - "advancedSettings": "Definições avançadas", "advancedSettingsSubtitle": "Opções de lote, contexto e amostragem para o motor avançado llama.cpp", "context": "Contexto", "synopsis": "Sinopse", @@ -2977,6 +3374,7 @@ "useOnlyExtraServerParametersHint": "Iniciar o llama-server com os parâmetros acima em vez do ajuste próprio do Subtitle Edit - apenas o modelo, o anfitrião e a porta continuam a ser definidos", "serverRunningAtX": "Servidor em execução em {0}", "customPromptHint": "Instruções personalizadas ({0} = idioma de origem, {1} = idioma de destino); vazio = instrução integrada", + "editTranslationHint": "Clique na tradução da linha selecionada para a editar (Enter guarda, Escape cancela)", "llamaCppDownloadEngineAndModelPrompt": "O llama.cpp requer a transferência do motor llama-server e de um modelo de tradução. Transferir agora?", "llamaCppDownloadEnginePrompt": "O llama.cpp requer a transferência do motor llama-server. Transferir agora?", "llamaCppDownloadModelPrompt": "O llama.cpp requer a transferência do modelo de tradução selecionado. Transferir agora?" @@ -3014,8 +3412,14 @@ "checkForUpdatesChannelStableAndBeta": "Versões estáveis e beta", "assaAutoSetResolution": "ASSA: definir a resolução (PlayResX/PlayResY) a partir do vídeo quando um vídeo é aberto", "assaAutoSetResolutionPrompt": "ASSA: perguntar antes de alterar a resolução para corresponder ao vídeo (caso contrário, reamostrar automaticamente)", + "videoControls": "Controlos de vídeo", + "videoControlsEdit": "Editar controlos de vídeo...", + "videoControlsPositionText": "Texto de posição / duração", + "videoControlsVideoFileName": "Nome do ficheiro de vídeo", + "videoControlsPlayerName": "Nome do leitor de vídeo", "mergeKeepEndTime": "Combinar linhas: manter o tempo de fim (permitir sobreposição com a legenda seguinte)", "mergeKeepEndTimeOnlyAssa": "Combinar linhas: manter o tempo de fim apenas para \"Advanced Sub Station Alpha\"", + "mergeAutoBreak": "Combinar linhas: quebrar automaticamente o texto combinado (desativado mantém as quebras de linha originais)", "defaultSaveLocation": "Localização de gravação predefinida", "defaultSaveLocationSourceFileFolder": "Pasta do ficheiro de legenda/vídeo", "defaultSaveLocationLastUsedFolder": "Última pasta utilizada", @@ -3023,6 +3427,7 @@ "defaultSaveLocationSubtitleFileFolder": "Pasta do ficheiro de legenda", "defaultSaveLocationCustomFolder": "Pasta personalizada", "subtitleGridFormattingHideTags": "Ocultar etiquetas", + "subtitleGridFormattingShowFormattingKeepTags": "Mostrar formatação, manter etiquetas não visuais", "musicSymbolsToReplace": "Símbolos musicais a substituir (separados por vírgulas)", "musicSymbol": "Símbolo musical", "colorWordsPerMinute": "Colorir palavras/min se muito alto", @@ -3033,7 +3438,6 @@ "dialogStyleDashBothLinesWithSpace": "Travessão em ambas as linhas com espaço", "dialogStyleDashBothLinesWithoutSpace": "Travessão em ambas as linhas sem espaço", "continuationStyle": "Estilo de continuação", - "continuationStyleNone": "Nenhum", "continuationStyleNoneTrailingDots": "Nenhum, pontos para pausas (apenas para continuação)", "continuationStyleNoneLeadingTrailingDots": "Nenhum, pontos para pausas", "continuationStyleNoneTrailingEllipsis": "Nenhum, reticências para pausas (apenas para continuação)", @@ -3044,7 +3448,6 @@ "continuationStyleLeadingTrailingEllipsis": "Reticências", "continuationStyleLeadingTrailingDash": "Travessão", "continuationStyleLeadingTrailingDashDots": "Travessão, mas pontos para pausas", - "continuationStyleCustom": "Personalizado", "cpsLineLengthStyle": "Cps/comprimento da linha", "cpsLineLengthStyleCalcAll": "Contar todos os caracteres", "cpsLineLengthStyleCalcNoSpaceCpsOnly": "Contar tudo exceto espaços, apenas CPS", @@ -3057,27 +3460,11 @@ "cpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly": "Sem espaço ou pontuação, apenas CPS", "cpsLineLengthStyleCalcIgnoreArabicDiacritics": "Ignorar diacríticos árabes", "cpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "Ignore diacríticos árabes, sem espaço", - "timeCodeModeHhMmSsMs": "HH:MM:SS.MS (00:00:01.500)", - "timeCodeModeHhMmSsFf": "HH:MM:SS:FF", - "splitBehaviorPrevious": "Adicionar intervalo à esquerda do ponto de divisão (enfoque direito)", - "splitBehaviorHalf": "Adicionar intervalo no centro do ponto de divisão (enfoque esquerdo)", - "splitBehaviorNext": "Adicionar intervalo à direita do ponto de divisão (enfoque esquerdo)", - "subtitleListActionNothing": "Não fazer nada", - "subtitleListActionVideoGoToPositionAndPause": "Ir para posição do vídeo e pausar", - "subtitleListActionVideoGoToPositionAndPlay": "Ir para posição do vídeo e reproduzir", "subtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "Ir para posição do vídeo, reproduzir atual e pausar", - "subtitleListActionEditText": "Ir para a caixa de edição de texto", "subtitleListActionVideoGoToPositionMinus1SecAndPause": "Ir para posição do vídeo - 1 seg e pausar", "subtitleListActionVideoGoToPositionMinusHalfSecAndPause": "Ir para posição do vídeo - 0.5 seg e pausar", "subtitleListActionVideoGoToPositionMinus1SecAndPlay": "Ir para posição do vídeo - 1 seg e reproduzir", - "subtitleListActionEditTextAndPause": "Ir para a caixa de edição de texto e pausar na posição do vídeo", - "autoBackupEveryMinute": "A cada minuto", - "autoBackupEveryXthMinute": "A cada {0} minuto", - "profiles": "Perfis", - "autoBackupDeleteAfterXMonths": "{0} meses", "searchSettingsDotDotDot": "Pesquisar definições...", - "syntaxColoring": "Cor da sintaxe", - "waveformSpectrogram": "Forma de onda/espectrograma", "network": "Rede", "fileTypeAssociations": "Associações de tipos de ficheiro", "textBoxColorTags": "Fotograma de texto", @@ -3110,10 +3497,9 @@ "darkThemeForegroundColor": "Cor de primeiro plano do tema escuro", "darkThemeBackgroundColor": "Cor de fundo do tema escuro", "showGridLines": "Mostrar linhas na grelha", - "resetSettings": "Repor definições?", - "resetSettingsDetail": "Isto irá repor todas as definições para os seus valores predefinidos.\n\nContinuar?", "showHorizontalLineAboveToolbar": "Barra de ferramentas", "bookmarkColor": "Cor do marcador", + "spellCheckHighlightColor": "Cor de realce da verificação ortográfica", "singleLineMaxLength": "Comprimento máximo de linha única", "optimalCharsPerSec": "Caracteres/seg ideais", "maxCharsPerSec": "Máximo de caracteres/s", @@ -3126,13 +3512,21 @@ "unbreakSubtitlesShortThan": "Eliminar quebra em linha menor que...", "newEmptyDefaultMs": "Duração predefinida da nova legenda (ms)", "timeCodeUpDownStepMs": "Incremento de tempo para cima/baixo (ms)", + "moveSelectedLinesStepMs": "Passo do atalho para mover linhas selecionadas (ms)", + "moveStartEndStepMs": "Passo do atalho para mover início/fim (ms)", + "moveLinesShortenNeighbor": "Mover linhas: encurtar a linha anterior/seguinte em vez de a sobrepor", "promptBeforeDelete": "Avisar antes de eliminar", "rememberPositionAndSize": "Lembrar tamanho e posição da janela principal", + "titleBarFullFileName": "Mostrar o caminho completo do ficheiro na barra de título", + "showRecentFiles": "Mostrar ficheiros recentes (para reabrir)", "openLastFileOnStart": "Abrir último ficheiro recente ao iniciar", "autoSave": "Guardar automaticamente (guardar o ficheiro aberto durante a edição)", "autoBackupOn": "Cópia de segurança automática", "autoBackupIntervalMinutes": "Intervalo da cópia de segurança automática (minutos)", "autoBackupDeleteAfterDays": "Eliminar cópias de segurança automáticas após (dias)", + "settingsBackupOn": "Cópia de segurança automática das definições", + "settingsBackupIntervalDays": "Intervalo da cópia de segurança das definições (dias, 0 = cada início)", + "settingsBackupMaxCount": "Cópias de segurança das definições a manter", "autoConvertToUtf8": "Converter automaticamente para UTF-8 ao abrir", "autoTrimWhiteSpace": "Corte automático de espaços em branco", "defaultEncoding": "Codificação predefinida", @@ -3146,23 +3540,14 @@ "colorGapTooShort": "Cor se a pausa for muito curta", "errorBackgroundColor": "Cor de fundo de erro", "waveformDrawGridLines": "Desenhar linhas de grelha", - "waveformCenterVideoPosition": "Centrar posição do vídeo", + "waveformUseSkiaRenderer": "Usar renderizador rápido experimental", "waveformCenterVideoPositionAlsoWhenPaused": "Centrar a posição do vídeo também durante a pausa", + "waveformSelectCurrentSubtitleWhilePaused": "Selecionar a legenda atual também em pausa", + "waveformRememberZoom": "Lembrar zoom (horizontal e vertical)", "waveformShowToolbar": "Mostrar barra de ferramentas", "waveformShowToolbarEdit": "Editar barra de ferramentas...", "waveformShowToolbarEditLabel": "Itens da barra de ferramentas", "waveformSpectrogramCombinedWaveformHeight": "Forma de onda/espectrograma combinados, % de altura da forma de onda", - "showWaveformToolbarPlay": "Barra de ferramentas: mostrar botão de reprodução", - "showWaveformToolbarRepeat": "Barra de ferramentas: mostrar botão de repetição", - "showWaveformToolbarRemoveBlankLines": "Remover", - "showWaveformToolbarNew": "Barra de ferramentas: mostrar botão de nova legenda", - "showWaveformToolbarSetStart": "Barra de ferramentas: mostrar botão definir início", - "showWaveformToolbarSetEnd": "Barra de ferramentas: mostrar definição do fim", - "showWaveformToolbarStartAndOffsetTheRest": "Barra de ferramentas: mostrar botão definir início e botão de descanso", - "showWaveformToolbarHorizontalZoom": "Barra de ferramentas: mostrar controlo deslizante de zoom horizontal", - "showWaveformToolbarVerticalZoom": "Zoom vertical entrada", - "showWaveformToolbarVideoPositionSlider": "Barra de ferramentas: mostrar controlo deslizante da posição do vídeo", - "showWaveformToolbarPlaybackSpeed": "Barra de ferramentas: mostrar velocidade de reprodução", "waveformFocusTextboxAfterInsertNew": "Focar fotograma de texto", "waveformInvertMouseWheel": "Inverter a roda do rato", "waveformMouseWheelSetsVideoPosition": "A roda do rato define a posição do vídeo", @@ -3182,20 +3567,20 @@ "downloadFfmpeg": "Descarregar o FFmpeg", "showPluginsMenu": "Mostrar menu de plugins", "proxyAddress": "Endereço proxy", - "username": "Utilizador", "password": "Palavra-passe", "defaultFormat": "Formato predefinido", "defaultSaveAsFormat": "- Auto -", "favoriteSubtitleFormats": "Nota: os formatos favoritos serão mostrados primeiro ao selecionar um formato, o formato predefinido será sempre mostrado primeiro", "favoriteLanguages": "Idiomas favoritos", "webVttUseXTimestampMap": "WebVTT: utilizar X-TIMESTAMP-MAP (deslocar códigos de tempo ao carregar)", - "showStopButton": "Mostrar botão (Parar)", - "showFullscreenButton": "Ecrã inteiro", "fullscreenHideControls": "Ocultar controlos de vídeo em ecrã inteiro", + "showSecondarySubtitleDialog": "Mostrar caixa de diálogo de estilo ao abrir uma legenda secundária", + "rememberSecondarySubtitleFile": "Lembrar ficheiro de legenda secundária", "autoOpenVideoFile": "Abrir automaticamente o vídeo ao abrir a legenda", "downloadMpv": "O mpv lib foi transferido e está pronto a ser utilizado.", "downloadVlc": "Transferir VLC", "allowSingleLetterShortcutsInTextbox": "Permitir atalhos de uma letra na caixa de texto", + "allowTextNavigationShortcutsInTextbox": "Permitir atalhos em teclas de navegação de texto (Ctrl+Esquerda/Direita, Home/End) na caixa de texto", "spellCheckEnglishTreatInApostropheAsIng": "Verificação ortográfica: tratar palavras terminadas em 'in'' como 'ing' (apenas inglês)", "goToLineNumberSetsVideoPosition": "Ir para linha número também define a posição do vídeo", "adjustAllTimesRememberLineSelectionChoice": "Ajustar todos os tempos e lembrar a opção de seleção de linhas", @@ -3207,6 +3592,7 @@ "showAssaLayer": "Mostrar caixa de camada ASSA", "waveformCursorColor": "Cor do cursor", "waveformShotChangeColor": "Cor da forma de onda na mudança de cena", + "waveformGridColor": "Cor da grelha da forma de onda", "waveformParagraphLeftColor": "Cor da borda esquerda da forma de onda", "waveformParagraphRightColor": "Cor da borda direita da forma de onda", "waveformFancyHighColor": "Cor alta da forma de onda sofisticada", @@ -3234,27 +3620,31 @@ "resetSyntaxColoring": "Repor coloração de sintaxe", "resetWaveform": "Repor forma de onda", "resetRules": "Repor regras", - "useFrameMode": "Utilizar modo de fotograma (hh.mm.ss.ff)", + "timeCodeMode": "Modo de código de tempo", + "timeCodeModeTime": "Tempo (hh:mm:ss,zzz)", + "timeCodeModeFrames": "Fotogramas (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "Números de fotograma", + "frameModeSnapToVideoFrames": "Guardar tempos nos fotogramas do vídeo (não fotogramas dentro de cada segundo)", "textBoxLimitNewLines": "Limitar o número de linhas na caixa de texto da legenda", - "mpvVideoOutput": "Saída de vídeo (mpv)", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - Software (lento)", + "mpvMetalRendering": "libmpv - Metal (experimental, requer reinício)", "mpvWidRendering": "libmpv - ID de janela nativa", "waveFormsAndSpectrogramFoldersContainsX": "As pastas \"Waveforms\" e \"spectrogram\" contêm {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "Forma de onda/espectrograma", "waveformGenerateSpectrogram": "Gerar espectrograma", "waveformAutoGenerate": "Gerar automaticamente a forma de onda ao abrir um vídeo", "waveformSpectrogramMode": "Modo espectrograma", - "waveformCenterOnSingleClick": "Centrar com um único clique", - "waveformSingleClickSelectsSubtitle": "Apenas um clique para selecionar linhas", "waveformRightClickSelectsSubtitle": "Selecionar legenda clicando com o botão direito", - "waveformPauseOnSingleClick": "Pausar com um único clique", "waveformDrawStyle": "Estilo de desenho de forma de onda", "waveformExtractAudioFormat": "Formato de áudio a extrair", "waveformExtractAudioSampleRate": "Taxa de amostragem do áudio a extrair", "waveformExtractAudioSampleRateOriginal": "Original (manter origem)", "waveformExtractAudioBitRate": "Débito de áudio a extrair (MP3/M4A)", + "ffmpegUseCenterChannelOnly": "Usar apenas o canal central frontal para áudio 5.1 (FFmpeg)", "vlcWidRendering": "libVLC - ID de janela nativa", + "ffmpegSoftwareRendering": "FFmpeg", + "downloadFfmpegLibs": "Transferir bibliotecas FFmpeg (para o leitor de vídeo FFmpeg)", "subtitleGridEnterKeyAction": "Ação da tecla Enter na grelha de legendas", "subtitleSingleClickAction": "Ação do clique simples na grelha da legenda", "subtitleDoubleClickAction": "Ação do clique duplo na grelha da legenda", @@ -3280,25 +3670,25 @@ "saveAsBehaviorUseVideoFileName": "Utilizar nome do ficheiro de vídeo", "saveAsBehaviorUseSubtitleFileName": "Utilizar nome do ficheiro de legenda", "saveAsAppendLanguageCodeTwoLetter": "Duas letras", - "saveAsAppendLanguageCodeThreeLetter": "Três letras (ISO 639-2/T)", - "saveAsAppendLanguageCodeThreeLetterBibliographic": "Três letras (ISO 639-2/B)", "saveAsAppendLanguageCodeLanguageName": "Nome do idioma", "splitOddLineActionWeightTop": "Peso superior", "splitOddLineActionWeightBottom": "Peso inferior", "splitOddLinesAction": "Ação de dividir linhas ímpares", "ocrUseWordSplitList": "Utilizar lista de divisão de palavras (OCR + FCE)", "ocrGuessUnknownWords": "OCR: tentar adivinhar palavras desconhecidas", + "spellCheckRememberUseAlwaysList": "Verificação ortográfica: lembrar lista \"Utilizar sempre\"", + "fixShortDisplayTimesAllowMoveStartTime": "Corrigir erros comuns: a correção de tempos de exibição curtos pode mover o tempo inicial", "speechToTextSelectedLinesPromptFirstTimeOnly": "Fala para texto: linhas selecionadas, pedir idioma/motor apenas na primeira vez", "multipleReplaceShowDotDotDotButtons": "Substituição múltipla: mostra botões do menu de contexto", "gridFocusTextboxAfterInsertNew": "Grelha: focar caixa de texto após inserir nova legenda", + "undoRedoGoToChangedLine": "Anular/refazer: ir para a linha alterada (e posição do vídeo)", "textToSpeechPromptMergeContinuationLines": "Texto para fala: prompt para combinar linhas de continuação", "textToSpeechPromptSkipNoiseLines": "Texto para fala: perguntar se ignora as linhas de som/música", "textToSpeechPromptDetectSpeakers": "Texto para fala: perguntar se deteta nomes de intervenientes no texto", "useFocusedButtonBackgroundColor": "Utilizado", "focusedButtonBackgroundColor": "Cor de fundo do botão em foco", "forceCrLfOnSave": "Forçar CR+LF ao guardar (ficheiros de legenda de texto)", - "showWaveformToolbarPlayNext": "Barra de ferramentas: mostrar o próximo botão de reprodução", - "showWaveformToolbarPlaySelection": "Barra de ferramentas: mostra o botão de seleção de reprodução", + "linuxClipboardUseExternalTool": "Copiar texto através de xclip/wl-copy (mantém os caracteres acentuados)", "showFormatLimitWarning": "Avisar ao guardar quando as linhas excedem os limites do formato (por exemplo, SCC 32 caracteres/linha)", "textBoxButtonShowAutoBreak": "Caixa de texto: mostrar botão de interrupção automática", "textBoxButtonShowUnbreak": "Caixa de texto: mostrar botão de desbloqueio", @@ -3310,12 +3700,18 @@ "waveformDoubleClickAction": "Ação de clique duplo em forma de onda (após ação de clique único)", "allSettings": "Todas as definições", "uiScale": "Escala da interface (%)", + "fontScale": "Escala do tipo de letra (%)", + "textSelectionOpacity": "Opacidade da seleção de texto (%)", "waveformToolbarItems": "Itens da barra de ferramentas da forma de onda", "matchIconColorToDarkTheme": "Combinar cor do ícone com a cor de primeiro plano do tema escuro", "subtitlePreviewProperties": "Propriedades de pré-visualização de legendas", "usePositionFromSubtitleFile": "Utilizar a posição do ficheiro de legenda (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "A margem faz parte da área da legenda", "textJustify": "Justificar as linhas", + "deinterlace": "Desentrelaçar vídeo", + "deinterlaceOff": "Desativado", + "deinterlaceAuto": "Automático (apenas fotogramas entrelaçados)", + "deinterlaceAlways": "Sempre", "pixelWidthInfo": "Linhas verdes = limite de largura máxima | Área vermelha = texto excede o limite", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "Microsoft Word", @@ -3325,117 +3721,89 @@ "waveformSaveAsCustomTheme": "Guardar como tema personalizado...", "waveformLoadThemeDotDotDot": "Carregar tema...", "waveformExportThemeDotDotDot": "Exportar tema...", + "waveformSaveCustomThemeTitle": "Guardar tema personalizado", + "waveformThemeFileType": "Tema da forma de onda do Subtitle Edit", + "waveformThemeHighContrast": "Alto contraste", + "waveformThemeOceanBlue": "Azul oceano", + "waveformThemeWarmSunset": "Pôr do sol quente", + "waveformThemeForest": "Floresta", + "waveformThemeMidnightPurple": "Roxo meia-noite", + "waveformThemeRetroAmber": "Âmbar retro", + "waveformThemeIce": "Gelo", "fixCommonErrorsSkipStep1": "Corrigir erros comuns: saltar passo 1 (escolher correções)" }, "shortcuts": { "generalUnbreakNoSpaceCjk": "Desquebrar sem espaço (CJK)", - "title": "Atalhos", + "generalToggleBreak": "Alternar quebrar/eliminar quebra", "searchShortcuts": "Atalhos de pesquisa...", - "filter": "Filtro", - "categoryGeneral": "Geral", "categorySubtitleGridAndTextBox": "Visualização de lista de legendas e caixa de texto", "categorySubtitleGrid": "Visualização da lista de legendas", - "categoryWaveform": "Forma de onda", "categoryTextBox": "Caixa de texto", "categoryFile": "Ficheiro", "categoryVideo": "Vídeo", "categorySync": "Sincronização", - "categoryTranslate": "Traduzir", - "categorySearch": "Pesquisar", - "categoryTools": "Ferramentas", "categoryAi": "IA", + "categoryCustom": "Personalizado", + "editCustomShortcut": "Editar atalho personalizado", + "customShortcutTextBoxKeyHint": "Use aqui uma tecla com Ctrl/Alt - uma tecla simples deixaria de escrever na caixa de texto.", + "customShortcutNumberX": "Atalho personalizado #{0}", + "customShortcutNumberXY": "Atalho personalizado #{0}: {1}", + "customShortcutStep": "Passo", + "customShortcutSteps": "Passos", + "customShortcutStepRunCommand": "Executar comando", + "customShortcutStepInsertText": "Inserir texto", + "customShortcutStepReplace": "Localizar e substituir", + "customShortcutInsertAtCursor": "No cursor", + "customShortcutInsertAtStart": "No início do texto", + "customShortcutInsertAtEnd": "No fim do texto", + "customShortcutSummaryRunCommandX": "Executar: {0}", + "customShortcutSummaryInsertXY": "Inserir \"{0}\" ({1})", + "customShortcutSummaryReplaceXY": "Substituir \"{0}\" por \"{1}\"", + "customShortcutSummaryReplaceRegexXY": "Substituir regex \"{0}\" por \"{1}\"", + "customShortcutPickCommand": "Selecione um comando a executar.", + "customShortcutEnterText": "Introduza o texto a inserir.", + "customShortcutEnterFind": "Introduza o texto a localizar.", + "customShortcutInvalidRegexX": "Expressão regular inválida: {0}", + "customShortcutStepsHint": "Os passos são executados de cima para baixo. Os passos de texto atuam nas linhas selecionadas; os comandos que abrem uma janela continuam depois de esta fechar.", "activeIn": "Ativo em", "activeInEverywhere": "Em todo o lado", - "generalSetupLikeSe4": "Configurar como o Subtitle Edit 4 (tema, atalhos, regras de substituição)", - "generalMergeSelectedLines": "Combinar as linhas selecionadas", - "generalMergeWithPrevious": "Combinar com o anterior", - "generalMergeWithNext": "Combinar com o próximo", - "generalMergeWithPreviousAndUnbreak": "Combinar com a anterior e eliminar quebra de linha", - "generalMergeWithNextAndUnbreak": "Combinar com a próxima e eliminar quebra de linha", - "generalMergeWithPreviousAndAutoBreak": "Combinar com a anterior e quebrar linha automaticamente", - "generalMergeWithNextAndAutoBreak": "Combinar com a próxima e quebrar linha automaticamente", - "generalMergeSelectedLinesAndAutoBreak": "Combinar as linhas selecionadas e quebrar linha", "generalMergeSelectedLinesAndUnbreak": "Combinar as linhas selecionadas e remover quebra", "generalMergeSelectedLinesAndUnbreakCjk": "Combinar linhas selecionadas e desquebrar CJK", - "generalMergeSelectedLinesOnlyFirstText": "Combinar as linhas selecionadas apenas no primeiro texto", "generalMergeSelectedLinesBilingual": "Combinar as linhas selecionadas bilingue", - "generalMergeWithPreviousBilingual": "Combinar com bilingue anterior", - "generalMergeWithNextBilingual": "Combinar com bilingue seguinte", - "generalMergeOriginalAndTranslation": "Combinar o orginal com o traduzido", "generalToggleTranslationMode": "Alternar modo de tradução", - "generalSwitchOriginalAndTranslation": "Mudar entre o original e a tradução", - "generalSwitchOriginalAndTranslationTextBoxes": "Alternar caixas de texto originais e de tradução", "generalToggleTranslationAndOriginalInPreviews": "Alternar entre tradução e original na pré-visualização de vídeo/áudio", "generalChooseLayout": "Escolher esquema", - "generalLayoutChooseX": "Layout {0}", - "generalPlayFirstSelected": "Reproduzir primeiro selecionado", - "generalGoToFirstSelectedLine": "Ir para a primeira linha selecionada", - "generalGoToNextEmptyLine": "Ir para a próxima linha em branco", "generalGoToNextSubtitle": "Ir para linha seguinte", "generalGoToNextSubtitlePlayTranslate": "Ir para a legenda seguinte (reproduzir tradução)", "generalGoToNextSubtitleCursorAtEnd": "Ir para a legenda seguinte (cursor no final)", "generalGoToPrevSubtitle": "Ir para linha anterior", "generalGoToPrevSubtitlePlayTranslate": "Ir para a legenda anterior (reproduzir tradução)", - "generalGoToStartOfCurrentSubtitle": "Ir para o início da legenda atual", - "generalGoToEndOfCurrentSubtitle": "Ir para o final da legenda atual", - "generalGoToPreviousSubtitleAndFocusVideo": "Ir para a legenda anterior e focar o vídeo", - "generalGoToNextSubtitleAndFocusVideo": "Ir para a próxima legenda e focar o vídeo", - "generalGoToPrevSubtitleAndPlay": "Ir para a legenda anterior e reproduzir", - "generalGoToNextSubtitleAndPlay": "Ir para a legenda seguinte e reproduzir", - "generalGoToPreviousSubtitleAndFocusWaveform": "Ir para a legenda anterior e focar a forma de onda", - "generalGoToNextSubtitleAndFocusWaveform": "Ir para a legenda seguinte e focar a forma de onda", - "generalGoToLineNumber": "Ir para o número da linha", "generalGoToFirstLine": "Ir para a primeira linha", "generalGoToLastLine": "Ir para a última linha", "alsoSetVideoPosition": "Definir também a posição do vídeo", "generalGoToVideoPosition": "Ir para a posição do vídeo", "generalToggleItalic": "Alternar itálico", "generalToggleBold": "Alternar negrito", - "generalToggleBookmarks": "Alternar marcadores", - "generalFocusTextBox": "Caixa de texto em foco", - "generalToggleBookmarksWithText": "Alternar favoritos com texto", - "generalEditBookmarks": "Editar favoritos", - "fileNew": "Novo", "generalToggleUnderline": "Alternar sublinhado", + "generalToggleBox": "Alternar caixa (EBU STL)", "fileOpen": "Abrir", "fileOpenKeepVideo": "Abrir (manter vídeo)", "fileSave": "Guardar", "fileSaveAs": "Guardar como", - "fileSaveAll": "Guardar tudo", "fileSaveOriginal": "Guardar original", - "fileSaveOriginalAs": "Guardar original como", - "fileOpenOriginalSubtitle": "Abrir legenda original", - "fileCloseOriginalSubtitle": "Fechar legenda original", - "fileTranslatedSubtitle": "Legenda traduzida", "fileCompare": "Comparar", "fileStatistics": "Estatísticas", "fileImportPlainText": "Importar texto sem formatação", - "fileImportBluRaySupForOcr": "Importar Blu-ray SUP para OCR", - "fileImportBluRaySupForEdit": "Importar Blu-ray SUP para edição", - "fileImportTimeCodes": "Importar códigos de tempo", "fileExportEbuStl": "Exportar EBU STL", "fileExportPac": "Exportar PAC", - "fileExportEdlClipName": "Exportar nome do clipe EDL", - "fileExportPlainText": "Exportar texto simples", - "fileExportCustomTextFormat1": "Exportar formato de texto personalizado 1", - "fileExportCustomTextFormat2": "Exportar formato de texto personalizado 2", - "fileExportCustomTextFormat3": "Exportar formato de texto personalizado 3", "fileExit": "Sair", "openSeDataFolder": "Abrir pasta do Subtitle Edit", - "editFind": "Localizar", - "editFindNext": "Localizar próximo", "editFindPrevious": "Localizar anterior", - "editReplace": "Substituir", - "editMultipleReplace": "Múltipla substituição", "fillSelectedLinesWithClipboard": "Preencher linhas selecionadas com o texto da área de transferência", - "editModifySelection": "Modificar a seleção", - "listSelectAll": "Selecionar tudo", - "listSelectFirst": "Selecionar primeiro", - "listSelectLast": "Selecionar último", "listInverseSelection": "Inverter seleção", "listDeleteSelection": "Eliminar seleção", + "deleteSelectionEverywhere": "Eliminar seleção (em todo o lado)", "rippleDeleteSelection": "Eliminar seleção em cascata", - "settings": "Definições", "assigned": "Atribuído", "unassigned": "Não atribuído", "pressedKeyX": "Tecla pressionada: {0}", @@ -3443,6 +3811,7 @@ "detectKey": "Detetar tecla", "control": "Ctrl", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Shift", "controlMac": "⌃", @@ -3453,11 +3822,14 @@ "resetShortcutsDetail": "Pretende repor todos os atalhos para os valores predefinidos?", "togglePlayPause": "Alternar reproduzir/pausar", "toggleLockTimeCodes": "Alternar códigos de tempo de bloqueio", + "toggleTimeCodeMode": "Alternar modo de código de tempo (tempo/fotogramas/números de fotograma)", + "toggleScreenPrivacy": "Alternar privacidade do ecrã (ocultar nomes de ficheiros e depois também textos)", + "screenPrivacyFileNamesHidden": "Privacidade do ecrã: nomes de ficheiros ocultos", + "screenPrivacyFileNamesAndTextsHidden": "Privacidade do ecrã: nomes de ficheiros e textos ocultos", + "screenPrivacyOff": "Privacidade do ecrã: desativada", "duplicateSelectedLines": "Duplicar linhas selecionadas", "sourceView": "Visualização de origem", - "showAlignmentPicker": "Alinhamento", "addOrEditBookmark": "Adicionar ou editar marcador", - "listBookmarks": "Listar marcador", "toggleBookmark": "Alternar marcador (linhas selecionadas, sem texto)", "toggleForcedSelectedLines": "Alternar forçado (linhas selecionadas)", "goToNextBookmark": "Ir para o marcador seguinte", @@ -3468,12 +3840,12 @@ "waveformSetStartAndSetEndOfPreviousMinusGap": "Definir início e fim da pausa negativo anterior", "waveformSetEndAndStartOfNextAfterGap": "Definir o fim e o início da próxima pausa positiva", "waveformSetEndAndStartOfNextAfterGapAndGoToNext": "Definir o fim e o início da próxima, mais intervalo, e ir para a seguinte", - "fetchFirstWordFromNextSubtitle": "Obter a primeira palavra da próxima linha da legenda", "moveLastWordToNextSubtitle": "Mover a última palavra para a próxima linha da legenda", "moveLastWordFromFirstLineDownCurrentSubtitle": "Mover a primeira palavra da linha de baixo (linha atual)", "moveFirstWordFromNextLineUpCurrentSubtitle": "Mover a primeira palavra da linha de cima (linha atual)", "moveTextFromCursorToNextAndGoToNext": "Mover o texto após o cursor para a legenda seguinte e ir para a seguinte", "moveTextFromCursorToNextAndGoToNextAndPlay": "Mover o texto após o cursor para a legenda seguinte, ir para a seguinte e reproduzir", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "Mover o texto após a posição do cursor para a legenda seguinte, ir para a seguinte, reproduzi-la e pausar no fim", "breakAtFirstSpaceFromCursor": "Quebrar no primeiro espaço a partir da posição do cursor", "breakAtFirstSpaceFromCursorAndGoToNext": "Quebrar no primeiro espaço a partir da posição do cursor e ir para a seguinte", "toggleFocusGridAndWaveform": "Alternar foco entre grelha de legendas e forma de onda/espectrograma", @@ -3485,7 +3857,6 @@ "videoGoToPreviousTimeCode": "Ir para o código de tempo anterior", "videoGoToNextTimeCode": "Ir para o código de tempo seguinte", "goToNextLineAndSetVideoPosition": "Ir para a legenda seguinte e definir a posição do vídeo", - "textBoxDeleteSelectionNoClipboard": "Caixa de texto: Eliminar seleção (sem área de transferência)", "textBoxDeleteForward": "Caixa de texto: eliminar a seleção ou o caractere seguinte (eliminar para a frente)", "textBoxCut": "Caixa de texto: Recortar", "textBoxCut2": "Caixa de texto: Recortar (alternativa)", @@ -3504,6 +3875,7 @@ "listViewColumnTextUp": "Coluna, texto para cima", "listViewColumnTextDown": "Coluna, texto para baixo", "autoTranslateSelectedLines": "Traduzir automaticamente as linhas selecionadas...", + "autoTranslateSelectedLinesNoPrompt": "Traduzir automaticamente as linhas selecionadas (sem perguntar, usar último motor/idiomas)", "setAssaResolution": "Definir resolução ASSA (PlayResX/PlayResY)", "setShortcutForX": "Definir atalho para \"{0}\"", "commandFileNewKeepVideo": "Novo (manter vídeo)", @@ -3511,29 +3883,22 @@ "fileCloseOriginal": "Fechar original", "fileCloseTranslation": "Fechar tradução", "restoreAutoBackup": "Restaurar cópia de segurança automática", - "openContainingFolder": "Abrir pasta", "importTimeCodes": "Importar códigos de tempo", "importSubtitleWithManuallyChosenEncoding": "Importar legenda com codificação escolhida manualmente", "exportBluRaySup": "Blu-ray sup...", "exportCustomTextFormat": "Exportar formato de texto personalizado", "exportPlainText": "Texto sem formatação...", - "showHistory": "Mostrar histórico", "toggleRightToLeft": "Alternar da direita para a esquerda", "modifySelection": "Modificar a seleção", "adjustDurations": "Ajustar duração", "applyDurationLimits": "Aplicar limites de duração", "batchConvert": "Converter múltiplos ficheiros", - "bridgeGaps": "Unir intervalos", "applyMinGap": "Aplicar pausa mínima", - "fixCommonErrors": "Corrigir erros comuns", "makeEmptyTranslationFromCurrentSubtitle": "Criar uma tradução vazia da legenda atual", - "mergeLinesWithSameText": "Combinar as linhas com o mesmo texto", - "mergeLinesWithSameTimeCodes": "Combinar linhas com os mesmos tempos", "splitBreakLongLines": "Dividir/reequilibrar linhas longas", "mergeShortLines": "Combinar as linhas curtas", "mergeContinuationLines": "Combinar linhas de continuação", "snapAllTimesToFrames": "Ajustar todos os tempos aos fotogramas", - "removeTextForHearingImpaired": "Remover texto para deficientes auditivos", "joinSubtitles": "Juntar legendas", "splitSubtitle": "Dividir legenda", "spellCheck": "Verificação ortográfica", @@ -3555,7 +3920,6 @@ "adjustAllTimes": "Ajustar todos os tempos", "visualSync": "Sincronia visual", "translateViaCopyPaste": "Traduzir via copiar e colar", - "shortcuts": "Atalhos", "wordLists": "Listas de palavras", "chooseUiLanguage": "Escolher idioma da interface", "chooseRuleProfile": "Escolher perfil de regras", @@ -3566,6 +3930,7 @@ "textBoxItalic": "Caixa de texto em itálico", "textBoxBold": "Caixa de texto: negrito", "textBoxUnderline": "Caixa de texto: sublinhado", + "textBoxBox": "Caixa de texto, caixa (EBU STL)", "resetWaveformZoomAndSpeed": "Repor o zoom da forma de onda e a velocidade de reprodução (taxa de reprodução)", "togglePlaybackSpeed": "Alternar velocidade de reprodução (taxa de reprodução)", "playbackSpeedSlower": "Velocidade de reprodução mais lenta (taxa de reprodução)", @@ -3577,22 +3942,28 @@ "seekSilenceForward": "Localizar silêncio no áudio para a frente", "waveformGuessStart": "Adivinhar o tempo de início pela forma de onda", "waveformGuessEnd": "Adivinhar o tempo de fim pela forma de onda", + "waveformGuessStartAndEnd": "Adivinhar tempo inicial e final a partir da forma de onda", "setVideoPositionCurrentSubtitleStart": "Definir posição do vídeo para o início da linha atual", "goToSubtitlePositionAndPause": "Ir para a posição da legenda e pausar", "setVideoPositionCurrentSubtitleEnd": "Definir a posição do vídeo para o final da linha atual", "toggleAudioTracks": "Alternar faixas de áudio", - "listErrors": "Listar erros", "goToNextError": "Ir para o próximo erro", "goToPreviousError": "Ir para erro anterior", "addNameToNameList": "Adicionar nome à lista de nomes", "findDoubleWords": "Localizar palavras duplicadas", "findDoubleLines": "Localizar linhas repetidas", "colorX": "Cor {0}", - "removeColor": "Remover cor", "surroundWith": "Cercar com...", "surroundWithXY": "Cercar com {0}/{1}", - "repeatLine": "Repetir linha", "surroundWithNumberX": "Envolver com #{0}", + "surroundWithBehavior": "Comportamento", + "surroundWithBehaviorToggle": "Alternar (adicionar, ou remover se existir)", + "surroundWithBehaviorAdd": "Adicionar (sempre)", + "surroundWithBehaviorRemove": "Remover (todos)", + "surroundWithBehaviorRemoveOnce": "Remover (um de cada vez)", + "surroundWithWorksOn": "Atua em", + "surroundWithScopeSelectionOrText": "Seleção, senão todo o texto", + "surroundWithScopeEachLine": "Cada linha", "searchVia": "Pesquisar através de", "searchViaX": "Pesquisar através de {0}", "searchViaNumberX": "Pesquisar através de #{0}", @@ -3620,6 +3991,11 @@ "copySubtitlePathToClipboard": "Copiar caminho da legenda para a área de transferência", "copySubtitleOriginalPathToClipboard": "Copiar caminho da legenda original para a área de transferência", "focusTextBox": "Destacar o fotograma de texto", + "focusSubtitleListView": "Focar a lista de legendas", + "focusWaveform": "Focar a forma de onda", + "focusOriginalTextBox": "Focar a caixa de texto original", + "textBoxGoToStart": "Caixa de texto, ir para o início", + "textBoxGoToEnd": "Caixa de texto, ir para o fim", "sortByNumber": "Classificar por número", "sortByStartTime": "Classificar por tempo de \"Mostrar\"", "sortByEndTime": "Classificar por tempo de \"Ocultar\"", @@ -3644,7 +4020,6 @@ "assaStyles": "Estilos ASSA", "assaProperties": "Propriedades ASSA", "assaAttachments": "Anexos ASSA", - "assaVideoColorPicker": "Seletor de cores de vídeo ASSA", "recalculateDurationSelectedLines": "Recalcular a duração (linhas selecionadas)", "setDurationMaxCpsSelectedLines": "Definir duração para CPS máximo (linhas selecionadas)", "toggleWaveformAndSpectrogramHeight": "Alternar altura dividida entre forma de onda/espectrograma", @@ -3658,9 +4033,9 @@ "selectionToSentenceCase": "Caixa de texto: seleção para Letra de frase", "selectionToggleCasing": "Caixa de texto: alternar maiúsculas/minúsculas (MAIÚSCULAS -> minúsculas -> Iniciais Maiúsculas)", "googleIt": "Pesquisar no Google (texto selecionado)", - "setActorXY": "Definir ator {0}: {1}", + "setActorX": "Definir ator: {0}", "setNewActor": "Definir novo ator...", - "setActorSlotXTitle": "Slot do ator {0}", + "setStyleX": "Definir estilo: {0}", "toggleDialogDashes": "Alternar travessões", "mergeWithLineBeforeAsDialog": "Combinar com linha anterior como diálogo", "mergeWithLineAfterAsDialog": "Combinar com linha após a caixa de diálogo", @@ -3671,13 +4046,27 @@ "moveStartOneFrameBackKeepGapPrev": "Mover início um fotograma para trás (manter pausa em relação ao anterior se estiver próximo)", "moveStartOneFrameForwardKeepGapPrev": "Mover início um fotograma para frente (manter pausa em relação ao anterior se estiver próximo)", "moveEndOneFrameBackKeepGapNext": "Mover final um fotograma para trás (manter pausa para o próximo se estiver próximo)", - "moveEndOneFrameForwardKeepGapNext": "Mover final um fotograma para frente (manter pausa para o próximo se estiver próximo)" + "moveEndOneFrameForwardKeepGapNext": "Mover final um fotograma para frente (manter pausa para o próximo se estiver próximo)", + "moveStartXMsBack": "Mover início X ms para trás (X definido nas Definições, também na Sincronização visual)", + "moveStartXMsForward": "Mover início X ms para a frente (X definido nas Definições, também na Sincronização visual)", + "moveEndXMsBack": "Mover fim X ms para trás (X definido nas Definições, também na Sincronização visual)", + "moveEndXMsForward": "Mover fim X ms para a frente (X definido nas Definições, também na Sincronização visual)", + "moveSelectedLinesXMsBack": "Mover linhas selecionadas X ms para trás (X definido nas Definições)", + "moveSelectedLinesXMsForward": "Mover linhas selecionadas X ms para a frente (X definido nas Definições)", + "moveSelectedLinesAndForwardXMsBack": "Mover linhas selecionadas e todas as seguintes X ms para trás (X definido nas Definições)", + "moveSelectedLinesAndForwardXMsForward": "Mover linhas selecionadas e todas as seguintes X ms para a frente (X definido nas Definições)", + "moveAllLinesXMsBack": "Mover todas as linhas X ms para trás (X definido nas Definições)", + "moveAllLinesXMsForward": "Mover todas as linhas X ms para a frente (X definido nas Definições)", + "moveSelectedLinesCustomMsBack": "Mover linhas selecionadas, milissegundos personalizados ({0:#,###,##0}) atrás, {1}", + "moveSelectedLinesCustomMsForward": "Mover linhas selecionadas, milissegundos personalizados ({0:#,###,##0}) à frente, {1}", + "moveSelectedLinesAndForwardCustomMsBack": "Mover linhas selecionadas e todas as seguintes, milissegundos personalizados ({0:#,###,##0}) atrás, {1}", + "moveSelectedLinesAndForwardCustomMsForward": "Mover linhas selecionadas e todas as seguintes, milissegundos personalizados ({0:#,###,##0}) à frente, {1}", + "moveAllLinesCustomMsBack": "Mover todas as linhas, milissegundos personalizados ({0:#,###,##0}) atrás, {1}", + "moveAllLinesCustomMsForward": "Mover todas as linhas, milissegundos personalizados ({0:#,###,##0}) à frente, {1}" }, "wordLists": { "title": "Listas de palavras", "addName": "Adicionar nome", - "addWord": "Adicionar palavra", - "addPair": "Adicionar par", "nameAndIgnoreList": "Lista de nomes/ignorar", "userWords": "Lista de palavras do utilizador", "ocrFixList": "Lista de correções OCR", @@ -3694,7 +4083,6 @@ "noPluginsInstalled": "Nenhum plugin instalado", "getPluginsOnline": "Obter plugins online...", "getPluginsTitle": "Obter plugins", - "enabled": "Ativo", "disabled": "Desativado", "notSupportedOnThisOs": "Não suportado neste sistema operativo", "removePluginXConfirm": "Remover plugin '{0}'? Isto irá eliminar a pasta do plugin: {1}", @@ -3711,17 +4099,19 @@ "downloadingXPercent": "A descarregar {0}%...", "pluginXInstalled": "'{0}' instalado.", "couldNotInstallPluginX": "Não foi possível instalar '{0}': {1}", - "notInstalled": "Não instalado", "install": "Instalar", "reinstall": "Reinstalar", - "update": "Atualizar", "installedX": "({0}) instalado", "updateAvailableXToY": "Atualização disponível ({0} → {1})", "applyPluginToWhichLinesX": "Aplicar '{0}' a:", "applyToSelectedLinesX": "Linhas selecionadas ({0})", "applyToAllLinesX": "Todas as linhas ({0})", "updateAllXAvailable": "Atualizar todos ({0})", - "updatingXOfY": "A atualizar {0}/{1}..." + "updatingXOfY": "A atualizar {0}/{1}...", + "doNotAskAgain": "Não perguntar novamente (alterar em Gerir plugins)", + "applyPluginsTo": "Aplicar plugins a", + "askEachTime": "Perguntar sempre", + "allLines": "Todas as linhas" }, "help": { "aboutSubtitleEdit": "Acerca do Subtitle Edit", @@ -3765,6 +4155,8 @@ "nOcrDatabase": "Base de dados nOCR", "drawMode": "Modo de desenho:", "addNewCharcter": "Adicionar novo caráter", + "addNOcrCharacterTitle": "Adicionar caractere nOCR para a linha {0}, caractere {1} de {2}, usando a base de dados \"{3}\"", + "addBinaryOcrCharacterTitle": "Adicionar caractere OCR binário para a linha {0}, caractere {1} de {2}, usando a base de dados \"{3}\"", "lineIndexX": "Linha {0}", "inspectNOcrAdditions": "Inspecionar novas adições nOCR", "ocrSelectedLines": "Linhas selecionadas do OCR", @@ -3813,6 +4205,8 @@ "binaryImageCompareInspectImageMatches": "\"Comparação de imagens binárias\" - inspecionar correspondências de imagens", "saveBlankTextTitle": "Guardar texto em branco?", "saveBlankTextPrompt": "Guardar texto em branco para imagem?", + "drawnLinesDoNotMatchTitle": "As linhas não correspondem à imagem", + "drawnLinesDoNotMatchPrompt": "Algumas das linhas desenhadas não correspondem à imagem (as linhas verdes têm de estar sobre o caractere, as vermelhas fora dele), por isso este caractere não será reconhecido.\n\nGuardar mesmo assim?", "yesAndNeverAskAgain": "Sim e não perguntar novamente", "importTextFromSubtitleDotDotDot": "Importar texto da legenda...", "importTextFromSubtitleOverwritePrompt": "Algumas linhas já possuem texto OCR. Substituir o texto existente?", @@ -3838,7 +4232,6 @@ "vobSubColorsTitle": "Cores VobSub/DVD", "vobSubColorsHeader": "Personalizar as quatro cores do VobSub", "vobSubColorsDescription": "As legendas VobSub/DVD utilizam quatro cores indexadas: fundo, predefinição, ênfase 1 e ênfase 2. Escolha cada cor abaixo para substituir a paleta incorporada - útil quando as cores originais têm pouco contraste para OCR.", - "vobSubColorBackground": "Fundo", "vobSubColorPattern": "Predefinição", "vobSubColorEmphasis1": "Ênfase 1", "vobSubColorEmphasis2": "Ênfase 2", @@ -3872,9 +4265,26 @@ "crispEmbedSettingsTitle": "Definições do CrispEmbed", "crispEmbedDescription": "Motor de OCR local com vários motores de modelos - transfira aqui o motor e os modelos.", "trainNOcrDatabase": "Treinar a base de dados nOCR...", + "optimizeNOcrDatabase": "Otimizar base de dados nOCR...", + "optimizeNOcrDatabaseQuestionXY": "Remover as linhas que não distinguem caracteres de caracteres semelhantes na base de dados nOCR \"{0}\"?\n\nIsto torna a base de dados mais pequena e o OCR mais rápido, normalmente com menos erros. Demora até um minuto.\n\nÉ guardada uma cópia de segurança como \"{1}\".", + "optimizingNOcrDatabaseXY": "A otimizar a base de dados nOCR... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "Base de dados nOCR \"{0}\" otimizada: {1:#,##0} -> {2:#,##0} linhas.", "startTraining": "Iniciar treino", "abortTraining": "Interromper treino", "trainingOptions": "Opções de treino", + "trainNOcrSubtitle": "Desenha caracteres nos tipos de letra instalados e ensina ao nOCR as suas formas. Escolha os tipos de letra que as suas legendas utilizam.", + "xFontsSelected": "{0:#,##0} selecionados", + "subtitleFonts": "Tipos de letra das legendas", + "emptyDatabase": "Base de dados vazia", + "startFromDatabase": "Começar a partir de", + "startFromDatabaseHint": "Adicionar os caracteres treinados a uma cópia de uma base de dados existente (recomendado) ou começar a partir de uma vazia", + "fontSizes": "Tamanhos de letra", + "fontSizesHint": "Tamanhos de letra em píxeis a desenhar, separados por vírgulas, por ex. \"30, 40\"", + "numberOfLineSegmentsHint": "Linhas verificadas por caractere - mais é mais rigoroso, mas mais lento", + "enterDatabaseName": "Introduza um nome para a base de dados", + "trainingFontXSizeYCharacterZ": "A treinar \"{0}\" a {1} px: {2}", + "xLearned": "{0:#,##0} aprendidos", + "xSkipped": "{0:#,##0} ignorados", "charactersToTrain": "Caracteres a treinar", "letterCombinationsToTrain": "Combinações de letras que podem ser divididas numa imagem", "importCharactersFromSubtitleFile": "Importar caracteres de um ficheiro de legenda...", @@ -3901,6 +4311,8 @@ "drawZoomOut": "Diminuir zoom (Ctrl+-)", "drawResetView": "Repor vista (Ctrl+0)", "drawToggleGrid": "Alternar grelha (Ctrl+G)", + "drawTogglePreview": "Alternar pré-visualização (F9)", + "drawPreviewFailed": "A pré-visualização falhou - é necessário o ffmpeg com libass (filtro subtitles)", "drawCopyToClipboard": "Área de transferência", "drawShapes": "Formas", "drawSelectedPoint": "Ponto selecionado", @@ -3908,16 +4320,86 @@ "drawSelectedLayer": "Camada selecionada", "drawToolX": "Ferramenta: {0}", "drawHelpText": "Clique para adicionar pontos • Enter/F8 para fechar a forma • Shift+Arrastar para deslocar • Ctrl+Scroll para ampliar", + "drawMoveToLayer": "Mover para camada", + "drawFlipHorizontal": "Inverter horizontalmente", + "drawFlipVertical": "Inverter verticalmente", + "drawHideShape": "Ocultar forma", + "drawShowShape": "Mostrar forma", + "drawHideLayer": "Ocultar camada", + "drawShowLayer": "Mostrar camada", + "drawDeleteLayer": "Eliminar camada", + "drawDeletePoint": "Eliminar ponto", + "drawCancelDrawing": "Cancelar desenho", + "drawLayerX": "Camada {0}", + "drawImportSvg": "Importar imagem SVG...", + "drawRotateClockwise": "Rodar 90° no sentido horário", + "drawConvertToCurve": "Converter segmento em curva", + "drawBackground": "Fundo", + "drawPosition": "Posição", + "drawZoom": "Zoom", + "drawShapeTool": "Ferramenta de formas", + "drawColorPickerTool": "Escolher cor de uma forma ou do fundo", + "drawShapeLibrary": "Biblioteca de formas", + "drawShapeLibraryHint": "Arraste na tela para colocar uma forma, ou clique para o tamanho predefinido. Shift mantém as proporções.", + "drawAddToLibrary": "Adicionar à biblioteca de formas...", + "drawRemoveFromLibrary": "Remover da biblioteca de formas", + "drawShapeName": "Nome da forma", + "drawCategorySpeechBubbles": "Balões de fala", + "drawCategoryArrows": "Setas", + "drawCategoryBasicShapes": "Formas básicas", + "drawCategorySymbols": "Símbolos", + "drawCategoryMyShapes": "As minhas formas", + "drawShapeSpeechBubble": "Balão de fala", + "drawShapeSpeechBubbleRight": "Balão de fala, cauda à direita", + "drawShapeSpeechBubbleUp": "Balão de fala, cauda para cima", + "drawShapeOvalBubble": "Balão de fala oval", + "drawShapeBoxBubble": "Balão de fala retangular", + "drawShapeThoughtBubble": "Balão de pensamento", + "drawShapeShoutBubble": "Balão de grito", + "drawShapeCaptionBox": "Caixa de legenda", + "drawShapeArrow": "Seta", + "drawShapeDoubleArrow": "Seta dupla", + "drawShapeChevron": "Divisa", + "drawShapeCurvedArrow": "Seta curva", + "drawShapeRoundedRectangle": "Retângulo arredondado", + "drawShapeTriangle": "Triângulo", + "drawShapeDiamond": "Losango", + "drawShapePentagon": "Pentágono", + "drawShapeHexagon": "Hexágono", + "drawShapeOctagon": "Octógono", + "drawShapeStar": "Estrela", + "drawShapeRing": "Anel", + "drawShapePlus": "Mais", + "drawShapeBanner": "Faixa", + "drawShapeHeart": "Coração", + "drawShapeCheck": "Visto", + "drawShapeMusicNote": "Nota musical", + "drawShapeMusicNotes": "Notas musicais", + "drawShapeLightning": "Relâmpago", + "drawShapeCloud": "Nuvem", + "drawShapeMoon": "Lua", + "drawShapeBadge": "Distintivo", + "drawSize": "Tamanho", + "drawLayer": "Camada", + "drawBackgroundVideoFrame": "Fotograma do vídeo (posição atual)", + "drawBackgroundVideoFrameAt": "Fotograma do vídeo em...", + "drawBackgroundImage": "Ficheiro de imagem...", + "drawBackgroundNone": "Sem fundo", + "drawBackgroundStretch": "Esticar imagem para a tela", + "drawBackgroundOpacity": "Opacidade do fundo", + "drawBackgroundVideoFrameFailed": "Não foi possível obter um fotograma do vídeo em {0}.", + "drawImages": "Imagens", + "drawConvertToLine": "Converter segmento em linha", + "drawConvertShapeToCurves": "Converter todas as linhas em curvas", + "drawConvertShapeToLines": "Converter todas as curvas em linhas", + "drawRotateCounterClockwise": "Rodar 90° no sentido anti-horário", + "drawSvgImages": "Imagens SVG", + "drawSvgNoShapes": "Não foram encontradas formas preenchidas nem traços no ficheiro SVG.", "progressBarTitle": "Barra de progressão", "progressBarSettings": "Barra de progressão", - "progressBarPosition": "Posição", - "progressBarBottom": "Inferior", - "progressBarTop": "Superior", "mouseOverColor": "Cor ao passar o rato", "clickedColor": "Cor ao clicar", "progressBarForeColor": "Cor do primeiro plano", - "progressBarBackColor": "Cor de fundo", - "progressBarStyle": "Estilo", "progressBarSquareCorners": "Cantos quadrados", "progressBarRoundedCorners": "Cantos arredondados", "progressBarChapters": "Capítulos", @@ -3926,8 +4408,6 @@ "progressBarXAdjustment": "Ajuste X", "progressBarYAdjustment": "Ajuste Y", "progressBarTextAlignment": "Alinhamento do texto", - "progressBarTakePosFromVideo": "Assumir a posição do vídeo", - "progressBarPreview": "Pré-visualizar", "fontCollectorTitle": "Coletor de tipos de letra", "fontCollectorUsedIn": "Utilizado em", "fontCollectorFontFiles": "Ficheiro(s) de tipo de letra", @@ -3974,9 +4454,7 @@ "resolutionResamplerVideoDiffers": "A resolução da legenda ({0}x{1}) difere da resolução do vídeo ({2}x{3}).\nAlterar a legenda para corresponder ao vídeo?", "resolutionResamplerAskOnVideoOpen": "Perguntar quando for aberto um vídeo com uma resolução diferente", "backgroundBoxGenerator": "Gerar caixa de fundo", - "backgroundBoxPadding": "Preenchimento", "backgroundBoxFillWidth": "Largura de preenchimento", - "backgroundBoxBoxColor": "Cor da caixa", "backgroundBoxRadius": "Raio", "backgroundBoxCircle": "Círculo", "backgroundBoxSpikes": "Picos", @@ -3988,12 +4466,9 @@ "backgroundBoxTornPaperDouble": "Papel rasgado (superior e inferior)", "backgroundBoxStarburst": "Explosão estelar", "backgroundBoxScroll": "Rolagem / Pergaminho", - "stylesTitle": "Estilos de Advanced Sub Station Alpha", "stylesInFile": "Estilos em ficheiro", "stylesSaved": "Estilos guardados", - "category": "Categoria", "allCategories": "[Todas]", - "defaultCategory": "Predefinição", "newCategory": "Nova categoria...", "renameCategory": "Mudar o nome da categoria...", "deleteCategory": "Eliminar categoria", @@ -4013,13 +4488,26 @@ "graphics": "Gráficos", "copyToStorageStyles": "Copiar para estilos de armazenamento", "copyToFileStyles": "Copiar para estilos de ficheiro", + "styleXAlreadyExistsInStorage": "Já existe um estilo com o nome \"{0}\" no armazenamento.\n\nSubstituí-lo, ou manter ambos (a cópia recebe um novo nome)?", + "styleXAlreadyExistsInFile": "Já existe um estilo com o nome \"{0}\" no ficheiro.\n\nSubstituí-lo, ou manter ambos (a cópia recebe um novo nome)?", + "styleNameCannotBeEmpty": "O nome de um estilo não pode estar vazio.", + "styleNameXIsUsedMoreThanOnce": "O nome de estilo \"{0}\" é usado por mais do que um estilo no ficheiro.", + "overwrite": "Substituir", + "keepBoth": "Manter ambos", + "doThisForAllConflictingStyles": "Fazer isto para todos os estilos em conflito", "setStyleAsDefault": "Definir estilo como predefinição", "takeUsagesFromDotDotDot": "Faça utilização de ...", "replaceStyleWithDotDotDot": "Substituir estilo por...", "noAttachmentsFound": "Nenhum anexo encontrado no ficheiro ASSA selecionado.", "deleteStyleQuestion": "Eliminar estilo?", "deleteStylesQuestion": "Eliminar estilos?", + "deleteXStylesQuestion": "Pretende eliminar {0} estilos?", + "deleteXStylesFromStorageQuestion": "Pretende eliminar {0} estilos do armazenamento?", + "deleteStyleXFromStorageQuestion": "Pretende eliminar o estilo \"{0}\" do armazenamento?", + "deleteStyleXFromFileQuestion": "Pretende eliminar o estilo \"{0}\" do ficheiro atual?", "openStyleImportFile": "Abrir ficheiro de legendas do qual importar estilos", + "styleImportFiles": "Ficheiros de estilo (.ass, .sty, categorias do Subtitle Edit 4 .template)", + "ssaStyleImportFiles": "Ficheiros de estilo (.ssa, .ass, .sty)", "primary": "Primário", "secondary": "Segundário", "applyOverrideTags": "Aplicar etiquetas de substituição", @@ -4034,7 +4522,6 @@ "spaceIncrease": "Aumento de espaço", "popIn": "Entre", "spinIn": "Girar", - "playCurrent": "_Reproduzir atual", "setPosition": "Definir posição", "rotation": "Rotação", "scaleX": "Escala X", @@ -4078,10 +4565,8 @@ "advancedEffectOldMovieDescription": "Simula um projetor de filme vintage de 35 mm com ruído, vinheta e riscos", "advancedEffectNeonBurst": "Explosão de néon", "advancedEffectNeonBurstDescription": "Legendas estilo 'Shorts' de alta energia com brilho neon e animação 'pop' ampliada", - "advancedEffectSettings": "Definições", "advancedEffectSnowFlakeCount": "Contagem de flocos", "advancedEffectStarfieldStarCount": "Contagem de estrelas", - "advancedEffectStarfieldSpeed": "Velocidade", "advancedEffectGlitch": "Glitch", "advancedEffectGlitchDescription": "Glitch digital com aberração cromática, flashes brancos e sobreposições de distorção", "advancedEffectBounceIn": "Saltar para dentro", @@ -4090,8 +4575,6 @@ "advancedEffectFirefliesDescription": "Pontos amarelo-âmbar quentes e brilhantes a flutuar organicamente pelo ecrã com brilho pulsante", "advancedEffectMatrix": "Matriz", "advancedEffectMatrixDescription": "Colunas de caracteres verdes a cair, com o texto da legenda a formar-se letra a letra na chuva", - "advancedEffectAudioBars": "Barras de áudio (forma de onda)", - "advancedEffectAudioBarsDescription": "Barras animadas de equalizador movidas pela forma de onda do áudio — as barras deslocam-se para a esquerda como uma forma de onda e pulsam com o áudio", "advancedEffectAudioPulse": "Pulso de texto de áudio", "advancedEffectAudioPulseDescription": "O texto da legenda brilha e pulsa com o volume do áudio – secções silenciosas mostram texto normal, picos altos adicionam um halo colorido e um ligeiro aumento de escala", "advancedEffectConfetti": "Explosão de confete", @@ -4105,7 +4588,6 @@ "advancedEffectFancyKaraokeGlow": "Brilho da palavra ativa", "advancedEffectFancyKaraokeActiveColor": "Cor ativa", "advancedEffectFancyKaraokeInactiveColor": "Cor inativa", - "advancedEffectFancyKaraokeInactiveOpacity": "Opacidade inativa (0-255)", "advancedEffectWordSpacingPixels": "Espaçamento (pixels)", "advancedEffectSlowZoomOut": "Diminuição lenta do zoom", "advancedEffectSlowZoomOutDescription": "O texto começa um pouco maior e diminui suavemente para o tamanho normal ao longo da duração da legenda", @@ -4121,7 +4603,6 @@ "advancedEffectSlideInLeftDescription": "O texto desliza a partir de fora do ecrã pela esquerda, mantém-se e sai novamente para a esquerda", "advancedEffectSlideInRight": "Deslizar da direita", "advancedEffectSlideInRightDescription": "O texto desliza a partir de fora do ecrã pela direita, mantém-se e sai novamente para a direita", - "advancedEffectFadeInOut": "Fade in/out", "advancedEffectFadeInOutDescription": "O texto aparece gradualmente no início e desaparece no final de cada legenda", "advancedEffectWordFlip3D": "Rotação 3D das palavras", "advancedEffectWordFlip3DDescription": "Cada palavra entra com uma rotação 3D e um salto elástico à medida que é dita — estilo moderno de legendas \"Shorts\"", diff --git a/src/ui/Assets/Languages/Romanian.json b/src/ui/Assets/Languages/Romanian.json index daa21a1b66b..623f59f44d2 100644 --- a/src/ui/Assets/Languages/Romanian.json +++ b/src/ui/Assets/Languages/Romanian.json @@ -1,9 +1,47 @@ { "title": "Subtitle Edit", - "version": "v5.2.0-rc7", + "version": "v5.3.0", "translatedBy": "zildan v1 05.04.26", "cultureName": "ro-RO", "general": { + "temperature": "Temperatură", + "preset": "Presetat", + "output": "Ieșire", + "outputFormat": "Format de ieșire", + "other": "Altele", + "timeCodeFormat": "Formatul codului de timp", + "topBottomMargin": "Marja de sus/de jos", + "theme": "Temă", + "brightness": "Luminozitate", + "chooseColor": "Alege culoarea", + "lineX": "Linia {0}", + "playLine": "Redați linia", + "maxLineLength": "Lungime maximă a liniei", + "maxCharsPerSec": "Max caractere/sec", + "maxNumberOfLines": "Număr maxim de linii", + "subtitles": "Subtitrări", + "shotChanges": "Schimbări de plan", + "chapters": "Capitole", + "interjections": "Interjecții", + "blankLines": "Linii goale", + "editWholeText": "Editați textul întreg", + "noTextInClipboard": "Niciun text în clipboard", + "noSubtitlesFoundTitle": "Nu s-au găsit subtitrări", + "replacedXOccurrences": "S-au înlocuit {0} apariții", + "invalidRegularExpressionX": "Expresie regulată nevalidă: {0}", + "discardChangesTitle": "Renunțați la modificări?", + "downloadingXDotDotDot": "Se descarcă {0}...", + "importTimeCodesDotDotDot": "Importă coduri de timp...", + "nextChange": "Modificarea următoare", + "previousChange": "Modificarea anterioară", + "changeXOfY": "Modificarea {0} din {1}", + "tooLong": "Prea lungă", + "tooShort": "Prea scurtă", + "overlapping": "Se suprapune", + "detail": "Detaliu", + "fixOcrErrors": "Remediați erorile OCR", + "runningOcrXY": "Se execută OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp necesită descărcarea motorului llama-server. Descărcați acum?", "assistedMove": "Mutare asistată", "assistedMoveChooseMove": "Faceți clic pe o opțiune sau apăsați numărul acesteia pentru a muta cuvintele", "assistedMoveDotDotDot": "Mutare asistată...", @@ -71,6 +109,24 @@ "abort": "Renunță", "actor": "Actor", "actors": "Actori", + "SetActorDotDotDot": "Setați actorul...", + "ActorPickerTitle": "Setați actorul", + "ActorPickerFilterHint": "Tastați pentru a filtra sau tastați numele unui actor nou", + "ActorPickerKeysHint": "Apăsați un număr sau Enter pentru a seta actorul. Alt+Sus/Jos schimbă ordinea, Delete elimină actorul.", + "ActorPickerNewActorX": "Actor nou „{0}”", + "ActorPickerLinesSelectedX": "Linii selectate: {0}", + "SetStyleDotDotDot": "Setați stilul...", + "StylePickerTitle": "Setați stilul", + "StylePickerFilterHint": "Tastați pentru a filtra sau tastați numele unui stil nou", + "StylePickerKeysHint": "Apăsați un număr (1-9, 0) pentru a seta stilul pe toate liniile selectate.", + "StylePickerNewStyleX": "Stil nou „{0}”", + "StylePickerNewStyleInfo": "Apăsați Enter pentru a adăuga acest stil cu setările implicite și a-l seta pe liniile selectate. Folosiți „Gestionați stilurile...” pentru a-i schimba ulterior fontul, culorile și poziția.", + "StylePickerCurrentStyleX": "Stilul curent: {0}", + "StylePickerLinesUsingStyleX": "Linii care folosesc acest stil: {0}", + "StylePickerMarginsXYZ": "Stânga {0}, dreapta {1}, vertical {2}", + "StylePickerSetStyle": "_Setați stilul", + "StylePickerManageStyles": "Gestionați stilurile...", + "StylePickerManageStylesHint": "Închideți această fereastră și deschideți managerul de stiluri pentru a edita fonturi, culori, poziție și altele", "add": "Adăuga", "addDotDotDot": "Adăuga...", "addToNamesListCaseSensitive": "Adăugați la lista de nume (se face distincția între majuscule și minuscule)", @@ -79,7 +135,6 @@ "adjustAlpha": "Ajustați alfa (transparență)", "adjustDisplayDuration": "Reglați durata de afișare", "adjustment": "Ajustare", - "advanced": "Avansat", "advancedSettings": "Setări avansate", "after": "După", "alignment": "Aliniere", @@ -112,7 +167,6 @@ "batchMode": "Modul lot", "bdnXml": "BDN/xml", "before": "Înainte", - "beforeX": "Înainte de „{0}”", "beginning": "Început", "bluRaySup": "Blu-ray (sup)", "bold": "Îndrăzneţ", @@ -124,7 +178,6 @@ "bookmarkEdit": "Editați marcajul", "bookmarkEditForSelectedLinesX": "Editați marcajul pentru {0} linii selectate", "bookmarksList": "Listează marcaje", - "borderColor": "Culoarea chenarului", "borderStyle": "Stil de chenar", "bottomCenter": "Centru de jos", "bottomLeft": "Jos-Stânga", @@ -147,7 +200,6 @@ "changeCasing": "Schimbați carcasa", "changeFormatting": "Schimbați formatarea", "changeFrameRate": "Schimbați rata de cadre", - "changeLanguageFilter": "Schimbați filtrul de limbă...", "changeOnce": "Schimbați o dată", "changeSpeed": "Schimbați viteza", "character": "Caracter", @@ -169,7 +221,6 @@ "conversionCancelledByUser": "Conversie anulată de utilizator", "convert": "Convertit", "converted": "Convertit", - "convertingDotDotDot": "Se convertește...", "convertingXofYDotDoDot": "Se convertește {0:#,###,##0}/{1:#,###,##0}...", "copy": "Copie", "copyImageToClipboard": "Copiați imaginea în clipboard", @@ -177,7 +228,6 @@ "couldNotSaveFileXErrorY": "Nu s-a putut salva fișierul „{0}”. Eroare: {1}", "count": "Conta", "cps": "Caractere/sec", - "currentSubtitle": "Subtitrare curentă", "currentVideoPosition": "Poziția video actuală", "cut": "Tăiați", "dark": "Întuneric", @@ -222,7 +272,6 @@ "expand": "Extinde", "export": "Export", "exportDotDotDot": "Export...", - "exportToX": "Exportați în {0}", "extendAfter": "Extinde/scurta la linie după", "extendBefore": "Extinde/scurta la linie înainte", "extendSelectedLinesToNextShotChangeOrNextSubtitle": "Extindeți liniile selectate până la următoarea modificare a imaginii (sau următoarea subtitrare)", @@ -237,7 +286,6 @@ "fileExtension": "Extensie de fișier", "fileName": "Nume de fișier", "fileNameX": "Nume fișier: {0}", - "fileNameXAndSize": "Nume fișier: {0} ({1})", "fileSaved": "Fișier salvat", "fileSavedToX": "Fișier salvat în {0}", "fileXAlreadyExists": "Fișierul „{0}” există deja.", @@ -247,8 +295,6 @@ "find": "Găsi", "findNext": "Găsiți următorul", "findTextX": "Găsiți text - {0}", - "fiveHundredMilliseconds": "500 de milisecunde", - "fiveSeconds": "Cinci secunde", "fix": "Fix", "fixCommonErrors": "Remediați erorile comune", "fixRightToLeft": "Remediați de la dreapta la stânga", @@ -272,13 +318,11 @@ "foundXInLineYZ": "S-a găsit „{0}” în rândul {1}, poziția {2}", "foundXMatches": "S-au găsit {0} potriviri", "frameRate": "Rata de cadre", - "frameRateX": "Frecvența cadrelor: {0:0.0###}", "frames": "Rame", "from": "Din", "fromCurrentVideoPosition": "din poziția video curentă", "gap": "Decalaj", "general": "General", - "generalText": "General", "generate": "Genera", "generateImportShotChanges": "Generați/importați modificări de fotografie", "generating": "Se generează...", @@ -295,12 +339,8 @@ "help": "Ajutor", "hex": "Hex", "hide": "Ascunde", - "hidePreview": "Ascunde previzualizarea", "history": "Istorie", "horizontal": "Orizontală", - "hourMinutesSecondsDecimalSeparatorMilliseconds": "Ora:min:sec{0}ms", - "hourMinutesSecondsFrames": "Ora:min:sec:cadre", - "ip": "IP", "id": "ID", "image": "Imagine", "imageSaved": "Imaginea salvată", @@ -357,6 +397,7 @@ "mergeSelectedLinesDialog": "Îmbina liniile selectate ca dialog", "mergeWithLineAfterAndAutoBreak": "Îmbinați cu linia după și auto-break", "mergeWithLineAfterKeepBreaks": "Îmbinați cu linia după (păstrați pauzele)", + "MergeWithLineAfterAndUnbreak": "Îmbinați cu linia de după și desfaceți", "mergeWithLineBeforeAndAutoBreak": "Îmbinați cu linia înainte și auto-break", "mergeWithLineBeforeKeepBreaks": "Îmbinați cu linia înainte (păstrați pauzele)", "middleCenter": "Centru-Mijloc", @@ -370,10 +411,11 @@ "moveAllShotChangeOneFrameBack": "Mutați toate modificările capturii cu un cadru înapoi", "moveAllShotChangeOneFrameForward": "Mutați toate modificările de fotografiere cu un cadru înainte", "moveDown": "Deplasați-vă în jos", + "Increase": "Creștere", + "Decrease": "Scădere", "moveUp": "Mișcă-te în sus", "multipleReplace": "Înlocuire multiplă", "name": "Nume", - "negative": "Negativ", "new": "Nou", "newDotDotDot": "Nou...", "newProfile": "Profil nou", @@ -401,20 +443,15 @@ "offsetY": "Offset Y", "ok": "_OK", "oneFile": "Un singur dosar", - "oneHundredMilliseconds": "100 de milisecunde", - "oneSecond": "O secundă", "oneSecondBack": "O secundă înapoi", "oneSecondForward": "O secundă", - "onlineVideoFeatureNotAvailable": "Funcția nu este disponibilă pentru videoclipurile online", "openContainingFolder": "Deschideți folderul care conține", "openDictionaryFolder": "Deschideți folderul dicționar", "openFile": "Deschideți fișierul", "openImageBasedSubtitle": "Deschideți subtitrarea bazată pe imagini", "openImageFile": "Deschideți fișierul imagine", - "openOriginalSubtitleFile": "Deschide fișierul de subtitrare original...", "openOriginalSubtitleFileTitle": "Deschideți fișierul de subtitrare original", "openOutputFolder": "Deschideți folderul de ieșire", - "openSubtitle": "Deschide subtitrarea...", "openSubtitleFileTitle": "Deschideți fișierul de subtitrare", "openSubtitles": "Deschideți subtitrări...", "openVideoFile": "Deschide fișierul video...", @@ -427,11 +464,6 @@ "outlineWidth": "Lățimea conturului", "outputFolder": "Dosarul de ieșire", "outputProperties": "Proprietăți de ieșire", - "overlap": "Suprapune", - "overlapNextX": "Se suprapune în continuare ({0:#;##0.###})", - "overlapPreviousLineX": "Se suprapune linia anterioară ({0:#;##0.###})", - "overlapStartAndEnd": "Se suprapun începutul și sfârșitul", - "overlapX": "Suprapunere ({0:#;##0.###})", "overwriteExistingFiles": "Suprascrie fișierele existente", "overwriteFilesInFolderX": "Suprascrierea fișierelor din dosarul: „{0}”", "overwriteQuestion": "Suprascrie?", @@ -444,6 +476,7 @@ "percent": "La sută", "pickLayer": "Setați stratul", "pickOllamaModel": "Alege modelul Ollama", + "PickModel": "Alegeți modelul", "llamaCppUseRemoteServer": "Utilizați server extern (URL)", "pickOutputFolder": "Alegeți folderul de ieșire", "pickResolutionFromCurrentVideo": "Alegeți rezoluția din videoclipul curent", @@ -483,7 +516,6 @@ "refresh": "Reîmprospăta", "region": "Regiune", "regularExpression": "Expresia regulată", - "regularExpressionIsNotValid": "Expresia regulată nu este validă!", "relativeToCurrentVideoPosition": "Raportat la poziția video curentă", "remove": "Elimina", "removeAlignment": "Eliminați alinierea", @@ -508,7 +540,7 @@ "reset": "Resetați", "resizePanels": "Redimensionați panourile", "resolution": "Rezoluţie", - "resolutionX": "Rezoluție: {0}", + "Retry": "Reîncercați", "reverseRightToLeftStartEnd": "Reverse RTL start/end", "right": "Corect", "rightToLeft": "De la dreapta la stânga", @@ -546,8 +578,6 @@ "selectedlinesX": "Liniile selectate: {0}", "sensitivity": "Sensibilitate", "separator": "Separator", - "sessionKey": "Cheia de sesiune", - "sessionKeyGenerate": "Generați o cheie nouă", "setEnd": "Setează sfârșitul", "setEndAndGoToNext": "Setați sfârșitul și treceți la următorul", "setEndAddNewAndGoToNew": "Setați sfârșitul, adăugați nou și treceți la nou", @@ -566,8 +596,9 @@ "shadowColor": "Culoarea umbrei", "shadowWidth": "Lățimea umbrei", "shiftLineBy": "Decalați linia cu", + "ShotIn": "Intrare plan", + "ShotOut": "Ieșire plan", "shortcut": "Comandă rapidă", - "shortcutX": "Comandă rapidă: {0}", "shortcuts": "Comenzi rapide", "show": "Spectacol", "showActorColumn": "Afișați coloana „Actor”.", @@ -578,17 +609,19 @@ "showStartColumn": "Afișați coloana „Start”.", "showHideColumn": "Afișați coloana „Ascunde”.", "showHistory": "Arată istoricul", + "ClearHistory": "Ștergeți istoricul", + "RemoveFromHistory": "Eliminați din istoric", "showLayerColumn": "Afișați coloana „Strat”.", "showPreview": "Afișează previzualizarea", "showShotChangesList": "Afișează lista cu modificări de fotografiere", + "ShowShotInColumn": "Afișați coloana „Intrare plan”", + "ShowShotOutColumn": "Afișați coloana „Ieșire plan”", "showStyleColumn": "Afișați coloana „Stil”.", "showTeletext": "Afișați coloana teletext în vizualizarea în listă", "showTimeCodes": "Afișați codurile de timp", "showWpmColumn": "Afișați coloana „Cuvinte/min”.", "showPixelWidthColumn": "Afișați coloana „Lățimea pixelilor”.", "shrink": "Se micsoreaza", - "singleBox": "Cutie unică", - "singleLineLengths": "Lungimea unei singure linii:", "singleMode": "Mod unic", "textTotalLength": "Text - lungime totală", "textSingleLineMaxLength": "Text - lungime maximă pe o singură linie", @@ -634,16 +667,16 @@ "strikeout": "Strikeout", "style": "Stil", "styleExaggeration": "Exagerarea stilului", - "styleLanguage": "Stil / Limbă", "styles": "Stiluri", "subtitleFile": "Fișier cu subtitrare", + "SubtitleFileChangedOutsideX": "Fișierul „{0}” a fost modificat în afara Subtitle Edit.\n\nÎl reîncărcați și pierdeți modificările?", "subtitleFileName": "Nume fișier de subtitrare", "subtitleFileSaved": "Fișierul de subtitrare a fost salvat", "subtitleFileSavedToX": "Fișierul cu subtitrare salvat în {0}", "subtitleFiles": "Fișiere de subtitrare", "subtitleFormats": "Formate de subtitrare", "subtitleLoadedX": "Subtitrare încărcată: {0}", - "subtitleXOfY": "Subtitrare {0} din {1}", + "SubtitleReloadedChangedOutsideX": "Subtitrare reîncărcată (modificată în afara Subtitle Edit): {0}", "suffix": "Sufix", "suggestions": "Sugestii", "sync": "Sincronizare", @@ -655,7 +688,6 @@ "teletextColor": "Culoare teletext", "teletextLine": "Linie teletext", "tenHours": "10 ore", - "tenMilliseconds": "10 milisecunde", "text": "Text", "textColor": "Culoarea textului", "textFiles": "Fișiere text", @@ -680,9 +712,6 @@ "topLeft": "Sus-Stânga", "topRight": "Sus-Dreapta", "totalAdjustmentX": "Ajustare totală: {0}", - "totalFramesX": "Total cadre: {0:#;##0.##}", - "totalLengthX": "Lungime totală: {0}", - "totalLengthXSplitLine": "Lungime totală: {0} (linie divizată!)", "translate": "Traduce", "translatePercentX": "Se traduce: {0}%", "translateRow": "Traduceți rândul", @@ -691,6 +720,7 @@ "type": "Tip", "unbreak": "Desfaceți textul", "unbreakLines": "Desfaceți liniile", + "Undelete": "Anulați ștergerea", "underline": "Subliniați", "undo": "Revenire", "unknown": "Necunoscut", @@ -707,13 +737,11 @@ "usages": "Utilizări", "use": "Utilizare", "useAlways": "Folosiți întotdeauna", - "useLargerFontForThisWindow": "Utilizați font mai mare pentru această fereastră", "useOnce": "Utilizați o dată", "useOutputFolder": "Folosiți folderul de ieșire", "useSourceFolder": "Utilizați folderul sursă", "useSourceResolution": "Utilizați rezoluția sursei", "userName": "Nume de utilizator", - "userNameAlreadyInUse": "Numele de utilizator este deja folosit", "vertical": "Vertical", "video100MsBack": "Video, cu 100 de milisecunde înapoi", "video100MsForward": "Video, 100 de milisecunde înainte", @@ -727,14 +755,25 @@ "videoCustom3ForwardX": "Video, milisecunde personalizate ({0:#,###,##0}) înainte, 3", "videoCustom4BackX": "Video, milisecunde personalizate ({0:#,###,##0}) înapoi, 4", "videoCustom4ForwardX": "Video, milisecunde personalizate ({0:#,###,##0}) înainte, 4", - "videoEncodingX": "Codificare video: {0}", + "VideoCustom1BackAndPauseX": "Video, milisecunde personalizate ({0:#,###,##0}) înapoi și pauză, 1", + "VideoCustom1ForwardAndPauseX": "Video, milisecunde personalizate ({0:#,###,##0}) înainte și pauză, 1", + "VideoCustom2BackAndPauseX": "Video, milisecunde personalizate ({0:#,###,##0}) înapoi și pauză, 2", + "VideoCustom2ForwardAndPauseX": "Video, milisecunde personalizate ({0:#,###,##0}) înainte și pauză, 2", + "VideoCustom3BackAndPauseX": "Video, milisecunde personalizate ({0:#,###,##0}) înapoi și pauză, 3", + "VideoCustom3ForwardAndPauseX": "Video, milisecunde personalizate ({0:#,###,##0}) înainte și pauză, 3", + "VideoCustom4BackAndPauseX": "Video, milisecunde personalizate ({0:#,###,##0}) înapoi și pauză, 4", + "VideoCustom4ForwardAndPauseX": "Video, milisecunde personalizate ({0:#,###,##0}) înainte și pauză, 4", "videoExtension": "Extensie fișier video", "videoFile": "Fișier video", "videoFileGenerated": "Fișierul video a fost generat", "videoFileGeneratedX": "Fișier video generat: „{0}”", + "VideoFilesGenerated": "Fișiere video generate", + "XVideosGenerated": "{0} videoclipuri generate", + "XOfYVideosGenerated": "{0} din {1} videoclipuri generate", + "SavedInX": "Salvat în {0}", + "SavedInXFolders": "Salvat în {0} foldere", "videoFiles": "Fișiere video", "videoAndAudioFiles": "Fișiere video și audio", - "videoInformation": "Informații video", "videoOffset": "Compensare video", "videoOneFrameBack": "Video, un cadru înapoi", "videoOneFrameForward": "Video, un cadru înainte", @@ -745,7 +784,6 @@ "videoPlayer": "Player video", "videoPosition": "Poziția video", "videoResolution": "Rezoluție video", - "viewX": "Vedeți {0}", "visible": "Vizibil", "voice": "Voce", "warning": "Avertizare", @@ -753,9 +791,7 @@ "waveformCenterOnVideoPosition": "Centrul formei de undă pe poziția video", "waveformPasteFromClipboard": "Lipiți din clipboard", "waveformSpectrogram": "Formă de undă/spectrogramă", - "webServiceUrl": "Adresa URL a serviciului web", "width": "Lăţime", - "windowPositionAndSize": "Poziția și dimensiunea ferestrei", "wordsPerMin": "Cuvinte/min", "pixelWidth": "Lățimea pixelilor", "wpm": "Cuvinte/min", @@ -765,8 +801,6 @@ "xNotFound": "„{0}” nu a fost găsit", "xRequiresAnApiKey": "{0} necesită o cheie API", "xRequiresAValidUrl": "{0} necesită un URL valid (de ex. \"http://...\" sau \"https://...\")", - "xSeconds": "{0:0.0##} secunde", - "xSubtitles": "{0:#,###,##0} subtitrări", "yes": "Da", "zeroBytes": "0 octeți", "copyToClipboard": "Copiați în clipboard", @@ -793,7 +827,6 @@ "installFolder": "Folderul de instalare", "lineHeight": "Înălțimea liniei", "multiMode": "Mod multiplu", - "mute": "Fără sunet", "playSelectedLinesAndFocusWaveform": "Redați liniile selectate și focalizați forma de undă", "playSelectedLinesWithLoopAndFocusWaveform": "Redați liniile selectate cu buclă și focalizați forma de undă", "redownload": "Descărcați din nou...", @@ -826,10 +859,8 @@ "playbackSpeed": "Viteza de redare", "hoursMinutesSecondsMilliseconds": "HH:MM:SS.FFF", "imageFiles": "Fișiere imagine", - "openAiCompatibleStt": "OpenAI Compatible STT", "openAiCompatibleSttEndpoint": "URL endpoint STT", "openAiCompatibleSttApiKey": "Cheie API", - "openAiCompatibleSttModel": "Model", "openAiCompatibleSttExtraHeaders": "Anteturi suplimentare", "openAiCompatibleSttTimeout": "Expirare (secunde)", "openAiCompatibleSttLanguage": "Sugestie de limbă", @@ -839,6 +870,9 @@ "dashScopeSttRegion": "Regiune", "dashScopeSttEnableWords": "Marcaje temporale la nivel de cuvânt", "dashScopeSttRegionKeyHint": "Notă: cheile API Alibaba Cloud Model Studio sunt specifice regiunii - asigurați-vă că regiunea selectată corespunde regiunii în care a fost creată cheia API (China vs. Internațional).", + "GoogleCloudSttProjectId": "ID proiect (doar pentru Application Default Credentials)", + "GoogleCloudSttBucketName": "Bucket de stocare (gol = automat)", + "GoogleCloudSttDynamicBatching": "Loturi dinamice (de circa 5x mai ieftin, fără garanție de latență)", "onlineSttApiKeyMissing": "Este necesară o cheie API. Introduceți cheia API și încercați din nou.", "openAiCompatibleSttAutoTranscribeOnAudioSelection": "Transcrieți automat noua selecție a formei de undă prin speech-to-text", "openAiCompatibleSttStream": "Răspuns în flux", @@ -848,11 +882,9 @@ "configurationRequired": "Configurare necesară", "transcriptionError": "Eroare de transcriere", "transcriptionComplete": "Transcriere finalizată", - "transcribingWithOpenAi": "Se transcrie cu serviciul OpenAI...", "processingResponse": "Se procesează răspunsul...", "unauthorizedApiKey": "Neautorizat: cheie API invalidă sau permisiuni insuficiente.", "requestTimeout": "Expirarea cererii: serverul a răspuns prea târziu.", - "noSegmentsReturned": "Niciun segment returnat de serviciul de transcriere.", "openAiCompatibleSttUrlMissing": "URL-ul endpoint-ului OpenAI Compatible STT este necesar. Vă rugăm să introduceți un URL și să încercați din nou.", "openAiCompatibleSttUrlNotResponding": "Endpoint-ul OpenAI Compatible STT nu a răspuns:\n{0}\n\nVă rugăm să verificați URL-ul și ca serverul să fie pornit.", "transcriptionFailed": "Transcrierea a eșuat", @@ -896,15 +928,15 @@ "replace": "_Înlocuire...", "multipleReplace": "_Înlocuiți mai multe...", "goToLineNumber": "_Mergeți la numărul rândului...", + "commandPalette": "_Paleta de comenzi...", "rightToLeftMode": "Mod de la dreapta la stânga", "modifySelectionDotDotDot": "Modificați _selectia...", "tools": "_Unelte", - "toolsSelectedLines": "_Instrumente (linii selectate)", "adjustDurations": "_Ajustați duratele...", "applyDurationLimits": "Aplicați _limite de durată...", "batchConvert": "_Conversie în lot...", "bridgeGaps": "Punturi _gaps...", - "applyMinGap": "Aplicați min. ", + "applyMinGap": "Aplicați min.", "changeCasing": "_Schimbați CASE...", "changeFormatting": "Schimbați formatarea...", "aiReview": "Revizuire AI...", @@ -987,6 +1019,7 @@ "closeTranslation": "Închideți _traducerea", "fillSelectedLinesWithClipboard": "Completați liniile selectate cu textul din clipboard", "beautifyTimeCodes": "Înfrumusețați codurile de timp...", + "improveTimeCodes": "Îmbunătățiți codurile de timp (aliniere forțată)...", "evenlyDistributeLines": "Distribuiți uniform liniile (după CPS)", "mergeContinuationLines": "Îmbinați liniile de continuare...", "snapAllTimesToFrames": "Fixați toate timpii la cadre", @@ -1044,6 +1077,9 @@ "selectCurrentLineWhilePlayingHint": "Selectați subtitrarea curentă în timp ce redați {0}", "videoPosition": "Poziția video {0}", "videoPositionTextBox": "Casetă de text pentru poziția video {0}", + "toolbarLineBreakX": "Întrerupere de rând {0} (restul barei de instrumente continuă pe un rând nou)", + "initialText": "Textul inițial al liniei selectate", + "initialTextHint": "Textul liniei selectate așa cum era în momentul în care linia a fost selectată", "hideWaveformToolbar": "Ascundeți bara de instrumente {0}", "resetZoomAndSpeed": "Resetați zoom-ul și viteza de redare {0}", "removeBlankLines": "Eliminați liniile goale {0}", @@ -1057,6 +1093,15 @@ "textPlayHint": "Redați subtitrarea curentă și opriți la sfârșit {0}", "textPauseHint": "Întrerupeți redarea {0}", "textNextHint": "Redați subtitrarea următoare și opriți la sfârșit {0}", + "moveSelectedLines": "Mutați liniile selectate (butoanele înapoi/înainte)", + "moveSelectedLinesAndFollowing": "Mutați liniile selectate și toate cele următoare (butoanele înapoi/înainte)", + "moveAllLines": "Mutați toate liniile (butoanele înapoi/înainte)", + "moveSelectedLinesBackHint": "Mutați liniile selectate cu {0} ms înapoi {1}", + "moveSelectedLinesForwardHint": "Mutați liniile selectate cu {0} ms înainte {1}", + "moveSelectedLinesAndFollowingBackHint": "Mutați liniile selectate și toate cele următoare cu {0} ms înapoi {1}", + "moveSelectedLinesAndFollowingForwardHint": "Mutați liniile selectate și toate cele următoare cu {0} ms înainte {1}", + "moveAllLinesBackHint": "Mutați toate liniile cu {0} ms înapoi {1}", + "moveAllLinesForwardHint": "Mutați toate liniile cu {0} ms înainte {1}", "guessStartNoLineSelected": "Ghicire început: nicio linie selectată", "guessStartTimeCodesLocked": "Ghicire început: codurile de timp sunt blocate", "guessStartNoWaveform": "Ghicire început: nicio formă de undă", @@ -1078,20 +1123,23 @@ "charactersPerSecond": "Caractere/secundă: {0}", "chooseColumn": "Alege coloana", "columnPaste": "Pastă de coloană", + "commandPaletteTitle": "Paleta de comenzi", + "commandPaletteSearchPlaceholder": "Tastați pentru a căuta comenzi...", + "commandPaletteNoCommandsFound": "Nicio comandă potrivită", "createdEmptyTranslation": "S-a creat o traducere goală din subtitrarea curentă", "deleteText": "Ștergeți textul", "deleteTextAndShiftCellsUp": "Ștergeți textul și mutați celulele în sus", "endTimeMustBeAfterStartTime": "Ora de încheiere trebuie să fie după ora de începere.", - "errorLoad7Zip": "Acest fișier pare a fi un fișier 7-Zip comprimat.\n\n", - "errorLoadBinaryZeroes": "Ne pare rău, acest fișier conține doar zerouri binare!\n\n", - "errorLoadGZip": "Acest fișier pare a fi un fișier GZip comprimat.\n\n", - "errorLoadJpg": "Acest fișier pare a fi un fișier imagine JPG.\n\n", - "errorLoadPng": "Acest fișier pare a fi un fișier imagine PNG.\n\n", - "errorLoadRar": "Acest fișier pare a fi un fișier 7-Zip comprimat.\n\n", + "errorLoad7Zip": "Acest fișier pare a fi un fișier 7-Zip comprimat.\n\nSubtitle Edit nu poate deschide fișiere comprimate.", + "errorLoadBinaryZeroes": "Ne pare rău, acest fișier conține doar zerouri binare!\n\nDacă ați editat acest fișier cu Subtitle Edit, este posibil să găsiți o copie de rezervă prin elementul de meniu Fișier -> Restabiliți backupul automat...", + "errorLoadGZip": "Acest fișier pare a fi un fișier GZip comprimat.\n\nSubtitle Edit nu poate deschide fișiere comprimate.", + "errorLoadJpg": "Acest fișier pare a fi un fișier imagine JPG.\n\nSubtitle Edit nu poate deschide fișiere imagine.", + "errorLoadPng": "Acest fișier pare a fi un fișier imagine PNG.\n\nSubtitle Edit nu poate deschide fișiere imagine.", + "errorLoadRar": "Acest fișier pare a fi un fișier RAR comprimat.\n\nSubtitle Edit nu poate deschide fișiere comprimate.", "errorLoadRawPgsPrompt": "Acest fișier pare să fie un flux PGS brut, fără anteturile „PG” Blu-ray SUP, deci nu conține marcaje de timp.\n\nAcest lucru se întâmplă de obicei când o pistă PGS Matroska este extrasă în mod „brut”. Pentru sincronizări corecte, extrageți din nou pista în modul normal (de ex. „mkvextract tracks” fără --raw) sau deschideți fișierul Matroska original direct în Subtitle Edit.\n\nDoriți să importați totuși imaginile subtitrării, cu sincronizări generate automat, care trebuie corectate manual?", - "errorLoadSrr": "Acest fișier pare să fie un fișier ReScene SRR.\n\n", - "errorLoadTorrent": "Acest fișier pare să fie un fișier BitTorrent.\n\n", - "errorLoadZip": "Acest fișier pare a fi un fișier ZIP comprimat.\n\n", + "errorLoadSrr": "Acest fișier pare să fie un fișier ReScene SRR.\n\nSubtitle Edit nu poate deschide fișiere SRR.", + "errorLoadTorrent": "Acest fișier pare să fie un fișier BitTorrent.\n\nSubtitle Edit nu poate deschide fișiere torrent.", + "errorLoadZip": "Acest fișier pare a fi un fișier ZIP comprimat.\n\nSubtitle Edit nu poate deschide fișiere comprimate.", "extractingWaveInfo": "Se extrag informații despre Wave...", "extractingShotChanges": "Se extrag modificările de fotografiere...", "failedToExtractWaveInfo": "Nu s-au extras informațiile despre Wave", @@ -1113,18 +1161,20 @@ "noTextInClipboard": "Niciun text în clipboard", "oneLineCopiedFromOriginal": "Un rând copiat din subtitrarea originală", "oneLineCopiedToOriginal": "O linie a fost copiată în subtitrarea originală", + "onlineOnlyVideo": "Videoclip disponibil doar online", + "onlineOnlyVideoXSizeYDownloadAndOpen": "Fișierul video „{0}” ({1}) este stocat doar online, de exemplu în Dropbox sau iCloud Drive, și trebuie descărcat înainte de a putea fi deschis.\n\nÎl descărcați și deschideți acum?", "oneLineMerged": "O linie fuzionată", "oneLineSwitched": "O linie comutată", "overwriteExistingCells": "Suprascrie celulele existente", "overwriteOrShiftCellsDown": "Suprascrie/deplasează celulele în jos", "parsingMatroskaFile": "Se analizează fișierul Matroska...", + "readingDvdSubtitles": "Se citesc subtitrările DVD...", "pasteFromClipboardDotDotDot": "Lipiți din clipboard...", "redoPerformed": "Redo executat", "redoPerformedXActionLeft": "Repetare efectuată (acțiuni rămase: {0})", "removedUnicodeControlCharactersX": "S-au eliminat caracterele de control Unicode din {0} linii", "removedXBlankLines": "S-au eliminat {0} linii goale", "replacedXWithYCountZ": "S-a înlocuit „{0}” cu „{1}” ({2} apariții)", - "replacedXWithYInLineZ": "S-a înlocuit „{0}” cu „{1}” în rândul {2}", "reversedStartAndEndingsForRightToLeftX": "Început și sfârșit inversat de la dreapta la stânga în {0} linii", "ruleProfileIsX": "Profilul regulii este acum „{0}”", "saveLanguageFile": "Salvați fișierul de limbă", @@ -1132,7 +1182,6 @@ "shiftTextCellsDown": "Deplasați celulele text în jos", "singleLineLength": "Lungimea liniei: ", "speedIsNowX": "Viteza este acum „{0}”", - "spellCheckResult": "Verificare ortografică finalizată. \n\n• Cuvinte modificate: {0}\n• Cuvinte omise: {1}", "subtitleGridFormattingX": "Formatare grilă: {0}", "subtitleImportedFromMatroskaFile": "Subtitrare importată din fișierul Matroska", "textDown": "Text în jos", @@ -1152,19 +1201,20 @@ "xLinesSwitched": "{0} linii schimbate", "xShotChangedLoaded": "S-au încărcat {0} modificări de fotografie", "youtubeDlDownloadedSuccessfully": "„yt-dlp” a fost descărcat cu succes.", - "youtubeDlNotInstalledDownloadNow": "„yt-dlp” nu este instalat și este necesar pentru redarea videoclipurilor online.\n\n", + "youtubeDlNotInstalledDownloadNow": "„yt-dlp” nu este instalat și este necesar pentru redarea videoclipurilor online.\n\nDescărcați acum?", "promptInsertSubtitleOverlap": "Liniile inserate se vor suprapune peste liniile existente.\n\nInserați oricum?", "insertUnicodeSymbol": "Introduceți simbolul Unicode", "trimmedXLines": "Au fost tăiate {0} linii de subtitrare", "pastedXLinesOverSelectedLines": "S-au lipit {0} linie(i) peste liniile selectate", "pastedXOfYLinesOverSelectedLines": "S-au lipit {0} din {1} linie(i) peste liniile selectate - restul nu a încăput în selecție", + "insertedXLinesFromClipboard": "S-au inserat {0} linii din clipboard", "openOriginalDifferentNumberOfSubtitlesXY": "Fișierul de subtitrare original nu are același număr de subtitrări ca fișierul de subtitrare curent.\n\n• Subtitrări originale: {0}\n• Subtitrări curente: {1}", - "importXMatchingOriginalLines": "Importați {0} subtitrări originale care se potrivesc?", "originalTextReadOnly": "Text original (doar citire)", "originalTextEditMode": "Text original (mod editare)", "originalIsReadOnlyNotSaved": "Subtitrarea originală este o referință doar pentru citire și nu a fost salvată", "originalIsEmptyNotSaved": "Subtitrarea originală nu conține niciun text și nu a fost salvată", "originalIsReadOnlyReference": "Subtitrarea originală este deschisă ca referință doar pentru citire", + "closeTranslationQuestionXY": "Închideți traducerea „{0}”?\n\nSubtitrarea originală „{1}” devine subtitrarea pe care o editați. Fișierul de traducere în sine nu este modificat.", "allowEditOfOriginalSubtitle": "Permiteți editarea subtitrării originale", "showAllOriginalLinesX": "Afișați toate liniile originale ({0} nu au corespondent aici)", "showAllOriginalLinesHint": "Liniile fără corespondent sunt afișate ca rânduri suplimentare, ca să vedeți ce lipsește din traducere.", @@ -1175,7 +1225,7 @@ "allowEditHintReadOnly": "Originalul este afișat doar pentru citire și nu este salvat niciodată, deci fișierul său nu se poate modifica.", "allowEditHintAllLines": "Întregul original este pe ecran, deci salvarea lui păstrează fiecare linie.", "allowEditHintMatchingOnlyX": "Salvarea originalului ar scrie doar liniile afișate - celelalte {0} s-ar pierde.", - "videoOpenedChangeLayoutQuestion": "Un fișier video a fost deschis.\n\n", + "videoOpenedChangeLayoutQuestion": "Un fișier video a fost deschis.\n\nDoriți să schimbați aspectul pentru a afișa panoul video?", "sortedByStartTime": "Sortate după ora „Afișează”.", "sortedByEndTime": "Sortate după ora „Ascunde”.", "videoContrastSetTo": "Contrast: {0}", @@ -1186,6 +1236,7 @@ "fileExportedInFormatXToY": "Fișier exportat în format {0} în {1}", "fileExportedInFormatXToFileY": "Fișier exportat în formatul „{0}” în fișierul „{1}”", "fixedXLines": "S-au rezolvat {0} linii", + "toolXChangedYLines": "{0}: {1} linii modificate", "transcriptionCompletedWithXLines": "Transcrierea finalizată cu {0} rânduri", "replacedXOccurrences": "S-au înlocuit {0} apariții", "ffmpegDownloadedAndInstalledToX": "ffmpeg descărcat și instalat pe {0}", @@ -1201,7 +1252,7 @@ "nothingToSaveOriginal": "Nimic de salvat (original)", "liveSpellCheckLanguageXLoaded": "Limba de verificare ortografică live {0} a fost încărcată", "downloadFfmpegTitle": "Descărcați FFmpeg?", - "downloadFfmpegQuestion": "FFmpeg este necesar pentru redarea videoclipurilor online și pentru unele funcții de editare video.\n\n", + "downloadFfmpegQuestion": "FFmpeg este necesar pentru redarea videoclipurilor online și pentru unele funcții de editare video.\n\nDescărcați FFmpeg acum?", "errorLoadLargeFile": "Acest fișier este prea mare pentru a fi deschis ca fișier de subtitrare.", "errorLoadVideoFilePrompt": "Acest fișier pare a fi un fișier video:\n{0}\n\nPuteți deschide un videoclip prin „Video -> Deschide video” sau trăgând și plasând un videoclip pe player-ul video.\n\nDoriți să îl deschideți ca fișier video?", "numberOfLinesEvenlyDistributedX": "S-au distribuit uniform {0} linii", @@ -1234,13 +1285,9 @@ "file": { "ebuSaveOptions": { "title": "Opțiuni de salvare EBU", - "generalSubtitleInformation": "Informații generale subtitrare", "codePageNumber": "Numărul paginii de cod", "diskFormatCode": "Cod format de disc", "displayStandardCode": "Afișează codul standard", - "colorRequiresTeletext": "Culorile necesită teletext!", - "alignmentRequiresTeletext": "Alinierea necesită teletext!", - "teletextCharsShouldBe38": "„Numărul maxim de caractere pe rând” pentru teletext ar trebui să fie 38!", "characterCodeTable": "Tabelul de caractere", "languageCode": "Cod de limbă", "originalProgramTitle": "Titlul original al programului", @@ -1257,7 +1304,6 @@ "maxNumberOfDisplayableRows": "Numărul maxim de rânduri", "diskSequenceNumber": "Numărul secvenței discului", "totalNumberOfDisks": "Numărul total de discuri", - "import": "Import...", "textAndTimingInformation": "Text și informații despre sincronizare", "justificationCode": "Cod de justificare", "verticalPosition": "Poziție verticală", @@ -1274,11 +1320,6 @@ "errors": "Erori", "errorsX": "Erori: {0}", "maxLengthError": "Linia {0} depășește lungimea maximă ({1}) cu {2}: {3}", - "textUnchangedPresentation": "Prezentare neschimbată", - "textLeftJustifiedText": "Text justificat stânga", - "textCenteredText": "Text centrat", - "textRightJustifiedText": "Text justificat dreapta", - "useBoxForOneNewLine": "Bifați „Utilizați caseta în jurul textului” pentru o singură linie nouă", "maxLengthErrorTeletextColored": "Linia {0}-{1}: 36 (nu {2}) ar trebui să fie numărul maxim de caractere pentru text colorat cu înălțime dublă", "maxLengthErrorTeletextWhite": "Linia {0}-{1}: 37 (nu {2}) ar trebui să fie numărul maxim de caractere pentru text alb cu înălțime dublă", "maxLengthErrorTeletextSingleHeight": "Linia {0}: 38 (nu {1}) ar trebui să fie numărul maxim de caractere pentru text alb cu înălțime simplă", @@ -1293,26 +1334,33 @@ "subtitleWithManuallyChosenEncodingDotDotDot": "_Subtitrare cu codificare aleasă manual...", "titleImportImages": "Importați imagini", "importFileLabel": "Alegeți imaginile de importat (coduri de timp în numele fișierelor acceptate)", - "importFilesInfo": "Utilizați nume de fișiere codificate în timp:\r\n", + "importFilesInfo": "Utilizați nume de fișiere codificate în timp:\nstart_HH_MM_SS_MMM__end_HH_MM_SS_MMM[_index].ext\n\nExemple:\n0_00_01_042__0_00_03_919_0001.png\n0_00_01_042__0_00_03_919.png\n\nReguli:\n• HH_MM_SS_MMM pentru ora de început și de sfârșit\n• Dublul caracter de subliniere separă începutul de sfârșit\n• Index opțional după ora de sfârșit", "formattingDotDotDot": "Se formatează...", "imageBasedSubtitleForEditDotDotDot": "Subtitrare bazată pe imagini pentru editare...", "imageBasedSubtitleForOcrDotDotDot": "Subtitrare pe bază de imagini pentru OCR...", + "dvdSubtitlesDotDotDot": "Subtitrări de pe DVD (IFO/VOB)...", + "titleImportDvd": "Importați subtitrări de pe DVD", + "dvdIfoFile": "Fișier IFO", + "dvdVobFiles": "Fișiere VOB", + "dvdVideoStandard": "Standard video", + "dvdStartRipping": "Începeți extragerea", + "dvdRippingAborted": "Extragere întreruptă", + "dvdOpenIfoFile": "Deschideți fișierul DVD IFO", + "dvdAddVobFiles": "Adăugați fișiere VOB", + "dvdIfoFiles": "Fișiere DVD IFO", + "dvdVobFileType": "Fișiere DVD VOB", + "dvdDropHint": "Deschideți un fișier IFO (VIDEO_TS\\VTS_01_0.IFO) sau adăugați fișiere VOB - ori trageți-le aici", + "dvdNotAnIfoFileX": "{0} nu este un fișier DVD IFO", + "dvdMenuIfoNoTitleSetsX": "Nu s-au găsit seturi de titluri (VTS_xx_0.IFO) lângă {0}", + "dvdEncryptedXOfY": "{0} din cele {1} pachete de subtitrare sunt încă criptate CSS - aceste fișiere VOB au fost copiate fără decriptare, așa că unele imagini de subtitrare vor fi deformate.\n\nPentru un rezultat curat, decriptați mai întâi DVD-ul cu un instrument de extragere DVD.\n\nContinuați totuși?", "splitTextAt": "Împărțiți textul la", "blankLines": "Linii goale", "oneLineIsOneSubtitle": "Un rând este o subtitrare", "twoLinesAreOneSubtitle": "Două rânduri sunt un subtitrare", "importFilesDotDotDot": "Importați fișiere...", "multipleFiles": "Importați din mai multe fișiere text (un fișier este un subtitrare)", - "importOptions": "Opțiuni de import", - "autoSplitText": "Divizarea automată a textului", - "lineMode": "Modul linie", "maxLineLength": "Lungimea maximă a liniei", - "maxLinesPerSubtitle": "Max rânduri per subtitrare", - "minGapBetweenSubtitles": "Distanța minimă între subtitrări", "mergeShortLines": "Îmbinați linii scurte", - "removeLinesWithoutLetters": "Eliminați liniile fără litere", - "splitAtEndCharsSetting": "Împărțiți la sfârșitul caracterelor", - "takeTimeFromCurrentFile": "Luați timp de la fișierul curent", "fixed": "Fix", "numberOfSubtitlesX": "Număr de subtitrări: {0}", "numberOfSubtitlesXForcedY": "Număr de subtitrări: {0} ({1} forțate)", @@ -1330,14 +1378,18 @@ "forcedAlignerProgress": "Se aliniază... fereastra {0} din {1}, {2} din {3} linii", "forcedAlignerSetupTitle": "Aliniați codurile de timp cu alinierea forțată", "forcedAlignerSetupIntro": "Un aliniator forțat potrivește textul subtitrării pe care îl aveți deja cu audio, fără a-l transcrie mai întâi. Videoclipurile lungi sunt aliniate pe segmente, deci orice lungime funcționează.", + "forcedAlignerEndsFromSpeech": "Setați timpii de sfârșit din vorbirea izolată (lent)", + "forcedAlignerEndsFromSpeechHint": "Un aliniator forțat găsește unde începe o linie, nu unde se termină, așa că timpii de sfârșit provin în mod normal din timpul de citire. Cu această opțiune activată, muzica și efectele sonore sunt mai întâi eliminate din audio, iar fiecare linie se termină acolo unde vorbirea se oprește. Durează cam cât videoclipul însuși cu un GPU - și de multe ori mai mult fără.", + "forcedAlignerIsolatingSpeech": "Se izolează vorbirea... {0}", + "forcedAlignerIsolatingSpeechFailed": "Vorbirea nu a putut fi izolată - timpii de sfârșit au fost setați în schimb din timpul de citire.", "forcedAlignerModel": "Model de aliniere", - "forcedAlignerDownloadEngine": "Descărcați / actualizați motorul..." + "forcedAlignerDownloadEngine": "Descărcați / actualizați motorul...", + "forcedAlignerEstimatedXOfY": "{0} din {1} linii nu au putut fi aliniate și au fost plasate după timpul de citire - codurile lor de timp sunt doar estimate. Probabil scriptul este mai lung decât ceea ce se vorbește în videoclip." }, "export": { "exportImagesProfiles": "Exportați profiluri de imagini", "leftRightMargin": "Marginea din stânga/dreapta", "topBottomMargin": "Marja de sus/de jos", - "titleExportBluRaySup": "Exportați Blu-ray (sup)", "lineSpacingPercent": "Spațiere între rânduri %", "paddingLeftRight": "Umplutură stânga/dreapta", "paddingTopBottom": "Captuseala sus/jos", @@ -1378,10 +1430,21 @@ "titleExportDCinemaInteropPng": "D-Cinema interop/png", "titleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", "imageBasedSubtitleSaved": "Subtitrare bazată pe imagine salvată", - "titleExportBdnXml": "Exportați BDN/xml", "titleExportWebVttThumbnails": "Export WebVTT (miniaturi)", "fullFrameImage": "Imagine pe cadru întreg", "fullFrameImageHint": "Faceți fiecare imagine de dimensiunea cadrului video, cu subtitrarea la locul ei", + "stereo3D": "3D", + "stereo3DHint": "Pentru video 3D: desenați subtitrarea o dată în jumătatea de cadru a fiecărui ochi", + "halfSideBySide": "Jumătate alăturat (side-by-side)", + "halfTopBottom": "Jumătate sus/jos", + "depth3D": "Adâncime", + "depth3DHint": "Cât de mult iese subtitrarea din ecran - valorile pozitive o aduc mai aproape, cele negative o împing înapoi", + "plane3D": "3D-Plane", + "plane3DHint": "Dați fiecărei subtitrări adâncimea pe care un Blu-ray 3D o stochează pentru ea, dintr-un fișier 3D-Plane (.ofs) creat de BD3D2MK3D sau OFSExtractor. Adâncimea este folosită acolo unde 3D-Plane nu are niciuna", + "openPlane3DTitle": "Deschideți fișierul 3D-Plane", + "unableToLoadPlane3DX": "Nu se poate încărca 3D-Plane: {0}", + "plane3DXDepthYToZ": "{0} (adâncime de la {1} la {2})", + "plane3DXNoDepth": "{0} (fără valori de adâncime)", "textEffect": "Efect de text", "textEffectSettingsTitle": "Setări pentru efectul de text", "textEffectPreset": "Presetare", @@ -1413,13 +1476,10 @@ "statistics": { "title": "Statistici", "titleWithFileName": "Statistici - {0}", - "generalStatistics": "Statistici generale", - "mostUsed": "Cel mai folosit...", "mostUsedLines": "Cele mai folosite linii", "mostUsedWords": "Cele mai folosite cuvinte", "nothingFound": "Nu s-a găsit nimic", "numberOfLinesX": "Numărul de linii de subtitrare: {0:#,##0}", - "numberOfFilesX": "Număr de fișiere de subtitrare: {0:#,##0}", "lengthInFormatXinCharactersY": "Numărul de caractere ca {0}: {1:#,###,##0}", "numberOfCharactersInTextOnly": "Numărul de caractere numai în text: {0:#,###,##0}", "totalDuration": "Durata totală a tuturor subtitrarilor: {0:#,##0}", @@ -1460,7 +1520,6 @@ "gapMaximum": "Interval - maxim: {0:#,##0} ms", "gapAverage": "Gap - medie: {0:#,##0.##} ms", "gapExceedingMinimum": "Interval - sub minim ({0:#,##0} ms): {1} ({2:0.00}%)", - "export": "Export...", "subtitles": "Subtitrări", "words": "Cuvinte", "totalDurationShort": "Durata totală", @@ -1490,6 +1549,21 @@ "restoreAutoBackupFile": "Restaurați fișierul de backup automat", "deleteAllSubtitleBackups": "Doriți să ștergeți toate fișierele de rezervă pentru subtitrare?", "deleteAll": "Ștergeți toate", + "subtitles": "Subtitrări", + "settingsBackupInfo": "Se face o copie de rezervă a Settings.json la pornirea Subtitle Edit, cel mult o dată la {0} zi(le) și doar dacă setările s-au schimbat. Se păstrează cele mai noi {1} copii de rezervă.", + "settingsBackupInfoEveryStart": "Se face o copie de rezervă a Settings.json la fiecare pornire a Subtitle Edit, dacă setările s-au schimbat. Se păstrează cele mai noi {0} copii de rezervă.", + "settingsBackupOff": "Backupul automat al setărilor este dezactivat (Opțiuni → Setări → Fișier).", + "lastSettingsBackupX": "Ultimul backup: {0}", + "noSettingsBackupsYet": "Încă nu există copii de rezervă ale setărilor", + "openSettingsBackupFolder": "Deschideți folderul cu copiile de rezervă ale setărilor", + "backUpSettingsNow": "Faceți backup acum", + "settingsBackedUp": "S-a făcut o copie de rezervă a setărilor curente.", + "restoreSettings": "Restaurați setările", + "restoreSettingsFromX": "Doriți să înlocuiți setările curente cu copia de rezervă din {0}?\n\nMai întâi se va face o copie de rezervă a setărilor curente. Unele modificări intră în vigoare doar după repornirea Subtitle Edit.", + "settingsRestored": "Setările au fost restaurate. Reporniți Subtitle Edit pentru ca toate modificările să intre în vigoare.", + "settingsRestoreFailed": "Setările nu au putut fi restaurate: {0}", + "settingsBackupNotValid": "copia de rezervă nu este un fișier de setări valid, așa că setările curente au fost păstrate", + "deleteAllSettingsBackups": "Doriți să ștergeți toate fișierele de backup ale setărilor?", "restoreXFromY": "Doriți să restabiliți „{0}” din {1}?" }, "propertiesDCinema": { @@ -1504,22 +1578,16 @@ "editRate": "Editați rata", "timeCodeRate": "Rata codului de timp", "startTime": "Ora de începere", - "font": "Font", "fontId": "ID font", "fontUri": "URI font", - "generate": "Genera", - "fontColor": "Culoarea fontului", "chooseColor": "Alege culoarea", "fontEffect": "Efect de font", "effectColor": "Efect de culoare", - "fontSize": "Dimensiunea fontului", "topBottomMargin": "Marja de sus/de jos", "fadeUpTime": "Se estompează timpul", "fadeDownTime": "Fade down time", - "frames": "Rame", "zPosition": "Poziția Z", - "zPositionHelp": "Numerele pozitive depărtează textul, numerele negative apropie textul; dacă poziția Z este zero, atunci este 2D", - "export": "Export..." + "zPositionHelp": "Numerele pozitive depărtează textul, numerele negative apropie textul; dacă poziția Z este zero, atunci este 2D" }, "webVtt": { "setStylesForSelectedLinesTitle": "Setați stilurile WebVTT pentru liniile selectate", @@ -1552,20 +1620,66 @@ "compareOnlyInOneFile": "Doar într-un singur fișier", "compareTextOrTimeDifference": "Diferență de text/timp", "compareNumberDifference": "Diferență de număr", - "ignoreLineBreaks": "Ignorați întreruperile de rând", "ignoreWhitespace": "Ignorați spațiile albe", "ignoreWhitespaceHint": "Liniile care diferă doar prin spații, taburi sau întreruperi de linie nu contează ca fiind diferite", "ignoreFormatting": "Ignorați formatarea", - "onlyLookForDifferencesInText": "Căutați doar diferențele în text", - "cannotCompareWithImageBasedSubtitles": "Nu se poate compara cu subtitrarile bazate pe imagini", - "statisticsTitle": "Statistici", "ignoreFormattingHint": "Liniile care diferă doar prin etichete de formatare, precum sau {\\an8}, nu contează ca fiind diferite", "showOnlyDifferencesInText": "Doar diferențe de text", + "ignoreNumbering": "Ignorați numerotarea", + "ignoreNumberingHint": "Liniile care diferă doar prin număr nu sunt considerate diferite", + "ignoreTimeDifferenceMs": "Toleranță de timp (ms)", + "ignoreTimeDifferenceMsHint": "Timpii de început și de sfârșit care diferă cu cel mult atâtea milisecunde nu sunt considerați diferiți", + "compareDifferences": "Diferențe", + "compareTextDifferences": "Diferențe de text", + "compareCurrent": "Curent", + "compareReference": "Referință", + "compareEditable": "Editabil", + "compareEditableHint": "Modificările făcute aici sunt aplicate subtitrării când faceți clic pe Aplicați", + "compareReadOnly": "Doar citire", + "compareTakeFromReference": "Preluați textul și sincronizarea din referință", + "compareInsertFromReference": "Inserați această linie în subtitrarea curentă", + "compareDeleteFromCurrent": "Ștergeți această linie din subtitrarea curentă", + "compareTakeText": "Preluați textul", + "compareTakeTiming": "Preluați sincronizarea", + "compareEditLine": "Editați linia", + "compareEditHint": "Ctrl+Enter pentru salvare, Esc pentru anulare", + "compareEdited": "Editat", + "compareOnePendingChange": "1 modificare în așteptare", + "compareXPendingChanges": "{0} modificări în așteptare", + "compareDiscardXChanges": "Renunțați la cele {0} modificări făcute în Comparare?", + "compareXChangesApplied": "Comparare: {0} modificări aplicate", + "compareChangeTextX": "#{0} text din referință", + "compareChangeTimingX": "#{0} sincronizare din referință", + "compareChangeTextAndTimingX": "#{0} text și sincronizare din referință", + "compareChangeEditedX": "#{0} editat", + "compareChangeInsertedX": "#{0} inserat", + "compareChangeDeletedX": "#{0} șters", + "compareSyncPoint": "Punct de sincronizare", + "compareSyncPointHint": "Punct de sincronizare - aceste două linii sunt afișate mereu ca pereche, iar liniile de deasupra și de dedesubt sunt aliniate separat", + "compareSyncPickCurrent": "Punct de sincronizare: folosiți această linie curentă", + "compareSyncPickReference": "Punct de sincronizare: folosiți această linie de referință", + "compareSyncRemove": "Eliminați punctul de sincronizare", + "compareClearXSyncPoints": "Ștergeți punctele de sincronizare ({0})", + "compareSyncCurrentPickedX": "Linia curentă #{0} aleasă ca punct de sincronizare - selectați linia de referință corespunzătoare și faceți clic pe Sincronizare", + "compareSyncReferencePickedX": "Linia de referință #{0} aleasă ca punct de sincronizare - selectați linia curentă corespunzătoare și faceți clic pe Sincronizare", + "compareSyncWithCurrentX": "Sincronizați cu linia curentă #{0}", + "compareSyncWithReferenceX": "Sincronizați cu linia de referință #{0}", + "compareSyncApply": "Sincronizare", + "compareSyncPointSetXY": "Punct de sincronizare setat: linia curentă #{0} și linia de referință #{1} sunt acum afișate ca pereche", + "compareSyncAlreadyPairedXY": "Linia curentă #{0} și linia de referință #{1} sunt deja afișate ca pereche cu același început - nimic de sincronizat", + "compareSyncPointShiftedXYZW": "Punct de sincronizare setat: liniile curente #{0}-#{1} au fost decalate cu {2} pentru a începe cu linia de referință #{3}", + "compareChangeSyncShiftXYZ": "#{0}-#{1} decalate cu {2} (punct de sincronizare)", + "compareTimingDeltaHint": "Cu cât mai târziu (+) sau mai devreme (−) începe și se termină referința față de linia curentă", "loadXFromFile": "Încărcați „{0}” din fișier", + "compareLoadSavedFile": "Încărcați fișierul salvat", "saveCompareHtmlTitle": "Salvați fișierul HTML de comparare", "pickMatroskaTrackX": "Alegeți piesa Matroska - {0}", "pickTransportStreamTrackX": "Alegeți pista din fluxul de transport - {0}", + "chapters": "Capitole", + "dvdVobFilesMissingX": "Fișiere VOB lipsă ({0}% găsite)", "pickMp4TrackX": "Alegeți pista MP4 - {0}", + "pickMxfTrackX": "Alegeți pista MXF - {0}", + "pickMpegTrackX": "Alegeți pista MPEG - {0}", "rosettaProperties": "Timed Text Rosetta IMSC proprietăți", "rosettaFontSize": "Dimensiunea fontului (înălțimea rândului)", "propertyTimeBase": "Bază de timp", @@ -1575,7 +1689,6 @@ "propertyDefaultRegion": "Regiune implicită", "propertyStyleAttributeName": "Numele atributului de stil", "propertyTimeCodeFormat": "Formatul codului de timp", - "propertyFileExtension": "Extensia fișierului", "propertyTopOrigin": "Origine sus", "propertyTopExtent": "Întindere sus", "propertyBottomOrigin": "Origine jos", @@ -1625,7 +1738,6 @@ "selectionIntersect": "Se intersectează cu selecția" }, "multipleReplace": { - "title": "Înlocuire multiplă", "editRule": "Editați regula", "newRule": "Regulă nouă", "editCategory": "Editați categoria", @@ -1642,24 +1754,23 @@ "findWhat": "Găsiți ce", "descriptionOptional": "Descriere (opțional)", "invalidRegularExpressionX": "Expresie regulată nevalidă: {0}", - "regularExpressionTooSlowX": "Expresia regulată a renunțat după {0} secunde - regula este omisă, încercați un tipar mai simplu" + "regularExpressionTooSlowX": "Expresia regulată a renunțat după {0} secunde - regula este omisă, încercați un tipar mai simplu", + "moveToCategory": "Mutați în categorie" }, "find": { "searchTextWatermark": "Căutați text...", "wholeWord": "Cuvântul întreg", - "caseSensitive": "Caz sensibil", - "caseInsensitive": "Nu ține seama de majuscule", "findPrevious": "Găsiți _anterior", "findNext": "_Găsiți următorul", "replaceAndFindNext": "_Înlocuiți și găsiți următorul", "replaceAll": "Înlocuiți _toate", - "replaceTitle": "Înlocui", - "replaceWith": "Înlocuiește cu", "replaceTextWatermark": "Inlocuieste cu...", "replaceIn": "Înlocuiți/căutați în", "replaceInTextAndOriginal": "Text și text original", "replaceInTextOnly": "Numai text", - "replaceInOriginalOnly": "Numai textul original" + "replaceInOriginalOnly": "Numai textul original", + "replacedOneOccurrence": "S-a înlocuit o apariție", + "replacedXOccurrences": "S-au înlocuit {0} apariții" }, "regularExpressionContextMenu": { "wordBoundary": "Limită de cuvânt (\\b)", @@ -1687,6 +1798,7 @@ "xLinesYSubtitles": "{0} linii, {1} subtitrări", "xLinesYSubtitlesZErrors": "{0} linii, {1} subtitrări, {2} eroare(ori)", "couldNotParseAsX": "Nu s-a putut interpreta ca {0}", + "readAsXUseAsY": "Sursa nu a putut fi citită ca {1}, dar a putut fi citită ca {0}.\nFolosiți liniile și continuați să salvați ca {1}?", "selectedXCharactersYLines": "Selectat: {0} caractere în {1} linie(i)", "replacedXOccurrences": "S-au înlocuit {0} apariție(ii)", "invalidRegularExpression": "Expresie regulată nevalidă", @@ -1701,7 +1813,6 @@ "aiReview": { "title": "Revizuire AI", "review": "Revizuiți", - "stop": "Stop", "editPrompt": "Editați promptul...", "editPromptTitle": "Editați promptul de revizuire", "promptInfo": "Instrucțiuni trimise modelului - {language} este înlocuit cu limba subtitrării.", @@ -1712,7 +1823,6 @@ "reviewingLineXOfY": "Se revizuiește linia {0} din {1}...", "reviewDone": "Revizuire finalizată - {0} sugestii în {1} linii", "noIssuesFound": "Nu s-au găsit probleme", - "categoryAll": "Toate", "categorySpelling": "Ortografie", "categoryGrammar": "Gramatică", "categoryPunctuation": "Punctuație", @@ -1724,8 +1834,23 @@ "largeChangeWarning": "Modificare mare - pare o rescriere, verificați cu atenție", "mismatchWarning": "Nu seamănă cu originalul - ar putea aparține altei linii", "engineError": "Motorul AI nu a putut fi contactat: {0}", - "setupHint": "Alegeți mai întâi un motor și un model în Unelte -> Revizuire AI.", - "playCurrentLineHint": "Redați linia selectată în playerul video și opriți la sfârșitul ei (sau faceți dublu clic pe o linie)" + "playCurrentLineHint": "Redați linia selectată în playerul video și opriți la sfârșitul ei (sau faceți dublu clic pe o linie)", + "editAfterHint": "Faceți clic pe textul rândului selectat pentru a edita corectura înainte de a o aplica (Enter salvează, Escape anulează)", + "template": "Șablon", + "templatePlaceholder": "Alegeți un șablon pentru a înlocui promptul", + "templateStandard": "Corectură standard", + "templateSpeechToText": "Curățare după transcriere (vorbire în text)", + "templateMachineTranslation": "Corectarea traducerii automate", + "templateSdh": "SDH / persoane cu deficiențe de auz", + "referenceContext": "Context de referință", + "referenceContextInfo": "Opțional. Nume, personaje, glosar, rezumat sau note de stil - modelul tratează acestea ca autoritate pentru nume și termeni. Trimis cu fiecare lot.", + "referenceContextPlaceholder": "Nume: Kaito, mătușa Mei, Dr. Hollis\nTermeni: Shinkansen, miez warp\nRezumat: Kaito călătorește la Tokyo pentru a-și găsi tatăl dispărut.", + "generateContext": "Generați cu AI", + "generateContextHint": "Lăsați motorul AI selectat să citească subtitrarea și să schițeze nume, termeni și un rezumat - verificați rezultatul înainte de utilizare", + "generatingContextPartXOfY": "Se citește partea {0} din {1}...", + "generatingContextSynopsis": "Se scrie rezumatul...", + "replaceContextQuestion": "Înlocuiți contextul de referință curent?", + "noContextGenerated": "Motorul AI nu a returnat nicio informație de referință utilizabilă." }, "aiAssistant": { "title": "Asistent AI", @@ -1743,22 +1868,14 @@ "showReasoning": "Afișați raționamentul modelului" }, "fixCommonErrors": { - "title": "Remediați erorile comune", - "step1": "Pasul 1/2 - Alegeți ce erori să remediați", - "whatToFix": "Ce să repare", - "example": "Exemplu", - "selectAll": "Selectați toate", - "inverseSelection": "Inversați selecția", "back": "< &Înapoi", "next": "&Următorul >", - "step2": "Pasul 2/2 - Verificați remedierea", "fixes": "Remedieri", "ruleDetailsDotDotDot": "Detalii despre regulă...", "showOnlyThisRule": "Afișați numai remedierile din această regulă", "appliedRulesForLineX": "Regula(ile) aplicată(e) pentru linia {0}", "ruleX": "Regulă: {0}", "log": "Jurnal", - "function": "Funcţie", "removedEmptyLine": "Eliminați linia goală", "removedEmptyLineAtTop": "Îndepărtați linia goală din partea de sus", "removedEmptyLineAtBottom": "Îndepărtați linia goală din partea de jos", @@ -1779,13 +1896,13 @@ "removeLineBreaksPixelWidth": "Desfaceți subtitrări care se pot încadra pe o singură linie (lățimea pixelilor)", "fixUppercaseIInsideLowercaseWords": "Remediați „i” majuscul în interiorul cuvintelor cu minuscule (eroare OCR)", "fixDoubleApostrophes": "Fixați caracterele cu apostrof dublu ('') la un singur ghilimele (\")", + "fixMisreadQuotes": "Remediați apostrofurile citite greșit ca ghilimele duble (OCR, engleză)", "addPeriods": "Adăugați punct după rânduri în care rândul următor începe cu literă mare", "startWithUppercaseLetterAfterParagraph": "Începeți cu litera mare după paragraf", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Începeți cu literă mare după punct în interiorul paragrafului", "startWithUppercaseLetterAfterColon": "Începeți cu majuscule după două puncte/punct virgulă", "fixLowercaseIToUppercaseI": "Remediați singur „i” minuscul la „I” (engleză)", "fixCommonOcrErrors": "Remediați erorile OCR obișnuite (folosind lista de înlocuire OCR)", - "commonOcrErrorsFixed": "Erori OCR obișnuite remediate (fișierul OcrReplaceList utilizat): {0}", "removeSpaceBetweenNumber": "Eliminați spațiul dintre numere", "breakDialogsOnOneLine": "Împărțiți dialogurile pe o singură linie", "removeDialogFirstInNonDialogs": "Eliminați liniuța de pornire din prima linie pentru non-dialoguri", @@ -1798,21 +1915,18 @@ "removeHyphensSingleLine": "Eliminați liniuțele de dialog în rânduri simple", "fixHyphensInDialogs": "Remediați liniuța în casetele de dialog prin stil: {0}", "addMissingQuotesExample": "\"Ce mai faci? -> \"Ce mai faci?\"", - "xMissingQuotesAdded": "Au adăugat ghilimele lipsă: {0}", "fix3PlusLine": "Remediați subtitrarea cu mai mult de două rânduri", "fix3PlusLines": "Remediați subtitrările cu mai mult de două rânduri", "analysing": "Se analizează...", "nothingToFix": "Nimic de reparat :)", - "fixesFoundX": "Remedieri găsite: {0}", "xFixesApplied": "Remedieri aplicate: {0}", "xFixesYSelected": "{0} remedieri - {1} selectate", - "nothingFixableBut": "Nimic nu a putut fi reparat automat. ", + "nothingFixableBut": "Nimic nu a putut fi reparat automat.", "xFixedBut": "S-au rezolvat {0} probleme, dar subtitrarea conține încă erori - consultați jurnalul pentru detalii", "xCouldBeFixedBut": "{0} probleme ar putea fi remediate, dar subtitrarea va conține în continuare erori - consultați jurnalul pentru detalii", "fixFirstLetterToUppercaseAfterParagraph": "Fixați prima literă la majuscule după paragraf", "mergeShortLine": "Îmbinați linia scurtă (o singură propoziție)", "mergeShortLineAll": "Îmbinați linia scurtă (toate cu excepția casetelor de dialog)", - "unbreakShortLinePixelWidth": "Desfaceți linia scurtă (lățimea pixelilor)", "breakLongLine": "Rupe linia lungă", "fixLongDisplayTime": "Remediați timpul de afișare lung", "fixInvalidItalicTag": "Remediați eticheta cursiv nevalidă", @@ -1820,11 +1934,11 @@ "fixOverlappingDisplayTime": "Remediați timpul de afișare suprapus", "fixShortGap": "Remediați decalajul scurt", "fixInvalidItalicTagsExample": "ce-mi pasă. -> ce-mi pasă.", - "removeUnneededSpacesExample": "Hei, tu ; ", - "removeUnneededPeriodsExample": "Hei, tu!. ", - "fixMissingSpacesExample": "Hei, tu. ", - "fixUppercaseIInsideLowercaseWordsExample": "Pământul este bine. ", - "fixLowercaseIToUppercaseIExample": "ce-mi pasă. ", + "removeUnneededSpacesExample": "Hei, tu ;", + "removeUnneededPeriodsExample": "Hei, tu!.", + "fixMissingSpacesExample": "Hei, tu.", + "fixUppercaseIInsideLowercaseWordsExample": "Pământul este bine.", + "fixLowercaseIToUppercaseIExample": "ce-mi pasă.", "startTimeLaterThanEndTime": "Numărul text {0}: ora de început este mai târziu decât ora de încheiere: {4}{1} -> {2} {3}", "unableToFixStartTimeLaterThanEndTime": "Nu se poate remedia numărul textului {0}: ora de începere este mai târziu decât ora de încheiere: {1}", "xFixedToYZ": "{0} fixat la: {1}{2}", @@ -1835,7 +1949,6 @@ "fixUppercaseIInsideLowercaseWord": "Remediați „i” majuscul în interiorul cuvântului cu minuscule", "fixMissingPeriodAtEndOfLine": "Adăugați un punct lipsă la sfârșitul rândului", "refreshFixes": "Actualizați corecțiile disponibile", - "applyFixes": "Aplicați corecțiile selectate și închideți", "autoBreak": "Auto &br", "unbreak": "&Unbreak", "fixDoubleDash": "Remediați „--” -> „...”", @@ -1843,19 +1956,17 @@ "fixEllipsesStart": "Eliminați primul „...”", "fixMissingOpenBracket": "Remediați lipsa [ sau ( în linie", "fixMusicNotation": "Înlocuiți simbolurile muzicale (de exemplu, âTª) cu simbolul preferat", - "fixDoubleDashExample": "'Woa-- um da!' ", - "fixDoubleGreaterThanExample": "'>> Robert: Sup dude!' ", + "fixDoubleDashExample": "'Woa-- um da!'", + "fixDoubleGreaterThanExample": "'>> Robert: Sup dude!'", "fixEllipsesStartExample": "'... și apoi noi' -> 'și apoi noi'", - "fixMissingOpenBracketExample": "Atentie! ", + "fixMissingOpenBracketExample": "Atentie!", "fixMusicNotationExample": "„âTª visele dulci sunt” -> „♫ visele dulci sunt”", "numberOfImportantLogMessages": "{0} mesaje de jurnal importante!", "fixedOkXY": "Remediat și OK - „{0}”: {1}", "fixOcrErrorExample": "Nu -> Nu", "fixSpaceBetweenNumbersExample": "1 100 -> 1100", "fixDialogsOneLineExample": "Salut John!
- Bună Ida!", - "removeDialogFirstInNonDialogsExample": "- Ce mai faci? ", - "selectDefault": "Selectați implicit", - "setDefault": "Setați corecțiile curente ca implicite", + "removeDialogFirstInNonDialogsExample": "- Ce mai faci?", "fixContinuationStyleX": "Remediați stilul de continuare: {0}", "fixUnnecessaryLeadingDots": "Eliminați punctele principale inutile", "fixCommonErrorsProfiles": "Remediați profilurile de erori comune", @@ -1863,7 +1974,6 @@ "searchRulesDotDotDot": "Reguli de căutare...", "goToApplyFixes": "Accesați aplicați remedieri", "backToFixList": "Înapoi la lista de remedieri", - "applyFixesAndClose": "Aplicați remedieri și închideți", "fixCommonOcrErrorsStep2": "Remediați erorile comune, pasul 2 (aplicați remedieri)", "fixCommonOcrErrorsStep2FixesFoundX": "Remediați erorile comune, pasul 2 - Remedieri găsite: {0}", "action": "Acţiune", @@ -1872,6 +1982,7 @@ "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Foo
bar! -> Foo bar!", "fixDoubleApostrophesExample": "''Has double single quotes'' -> \"Has single double quote\"", + "fixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "addPeriodsExample": "Hello world -> Hello world.", "startWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: Foobar!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Hello there! how are you? -> Hello there! How are you?", @@ -1886,18 +1997,11 @@ "adjustDurations": { "title": "Ajustați duratele", "adjustVia": "Reglați prin", - "seconds": "secunde", - "percent": "La sută", "recalculate": "Recalculați", "addSeconds": "Adăugați secunde", - "setAsPercent": "Setați ca procent din durată", "note": "Notă: ora de afișare nu se va suprapune cu ora de începere a textului următor", "fixed": "Fix", - "milliseconds": "Milisecunde", "extendOnly": "Extindeți numai", - "enforceDurationLimits": "Aplicați durata minimă și maximă", - "checkShotChanges": "Nu extindeți modificările din trecut", - "batchCheckShotChanges": "Respectați modificările de lovituri (dacă sunt disponibile)", "recalculateRequiresOcrNote": "Recalcularea nu este disponibilă — una sau mai multe subtitrări nu au text OCR. Rulați mai întâi OCR." }, "applyDurationLimits": { @@ -1905,6 +2009,8 @@ "fixMinDurationMs": "Fixați durata minimă (ms)", "doNotGoPastShotChange": "Nu treceți de schimbarea loviturii", "fixMaxDurationMs": "Fixați durata maximă (ms)", + "fixMinDurationFrames": "Fixați durata minimă (cadre)", + "fixMaxDurationFrames": "Fixați durata maximă (cadre)", "minimumDurationMilliseconds": "Durată minimă (milisecunde):", "maximumDurationMilliseconds": "Durată maximă (milisecunde):", "maxDurationShouldBeHigherThanMinDuration": "Durata maximă ar trebui să fie mai mare decât durata minimă", @@ -1924,12 +2030,8 @@ }, "beautifyTimeCodes": { "title": "Înfrumusețați codurile de timp", - "beautifySettings": "Setări înfrumusețați", "snapToFrames": "Snap la cadre", - "frameGap": "Gap de cadru", "minDuration": "Durata min. (ms)", - "shotChangeThreshold": "Pragul de modificare a tragerii (ms)", - "shotChangeOffset": "Shot Change Offset (cadre)", "original": "Original", "beautified": "Înfrumusețată", "subtitlesCount": "Subtitrări", @@ -1958,10 +2060,76 @@ "timeCodesExtractFailed": "Nu s-au putut citi codurile de timp din videoclip", "timeCodesHint": "Fixați cue-urile la timpii reali ai cadrelor din videoclip, în loc să presupuneți o rată de cadre constantă. Necesită citirea întregului videoclip o dată; rezultatul este păstrat în cache." }, + "improveTimeCodes": { + "title": "Îmbunătățiți codurile de timp (aliniere forțată)", + "aligner": "Aliniator", + "alignerHint": "Modelul care ascultă fiecare linie în audio. Cele mai bune opțiuni pentru limba subtitrării sunt listate primele.", + "maxShift": "Decalaj maxim (secunde)", + "maxShiftHint": "Cât de mult poate fi desincronizată subtitrarea. O linie al cărei început s-ar muta mai departe este lăsată așa cum este și marcată. Indiferent de valoare, o singură linie care ar vrea să se mute cu peste o jumătate de secundă mai mult decât liniile din jurul ei nu este mutată orbește: urmează vecinii atunci când toți s-au mutat, iar altfel este oferită nebifată pentru a o verifica.", + "adjustStartTimes": "Ajustați timpii de început", + "adjustEndTimes": "Ajustați timpii de sfârșit", + "isolateSpeech": "Izolați mai întâi vorbirea (lent)", + "isolateSpeechHint": "Elimină muzica și efectele sonore înainte de aliniere, astfel încât aliniatorul aude doar dialogul. Ajută la liniile rostite peste muzică sau acțiune puternică, dar durează cam cât audio-ul însuși cu un GPU - și de multe ori mai mult fără.", + "isolatingSpeech": "Se izolează vorbirea... (durează ceva timp)", + "isolateSpeechFailed": "Vorbirea nu a putut fi izolată - alinierea s-a făcut în schimb pe audio-ul original.", + "checkWithSpeechToText": "Verificați cu vorbire în text", + "checkWithSpeechToTextHint": "Transcrie și audio-ul și verifică fiecare mutare față de locul în care cuvintele au fost efectiv auzite. Mutările mari confirmate de vorbire sunt bifate automat, iar mutările care se îndepărtează de locul în care se aude o linie sunt lăsate nebifate pentru verificare. Arată și cât din fiecare linie a fost auzit - o proporție mică înseamnă că textul diferă de ceea ce se spune. O subtitrare desincronizată mai mult decât decalajul maxim - un decalaj constant, o deviere din cauza unei rate de cadre nepotrivite sau salturi acolo unde s-au tăiat scene - este mai întâi sincronizată după cuvintele auzite. Folosește Crisp ASR Parakeet, care durează câteva minute pentru un lungmetraj cu un GPU.", + "checkWithSpeechToTextNotAvailableX": "Verificarea cu vorbire în text nu este disponibilă pentru {0}", + "transcribingToCheck": "Se transcrie pentru verificarea alinierii...", + "speechToTextFailed": "Vorbirea în text a eșuat - codurile de timp nu au fost verificate.", + "speechToTextX": "Vorbire în text: {0}", + "speechToTextConfirmedXDisputedY": "Vorbire: {0} confirmate, {1} contestate", + "hardlyHeardX": "Vorbirea în text a auzit doar {0}% din cuvintele subtitrării. Este subtitrarea în limba vorbită? Aliniatorul nu poate plasa o traducere.", + "heard": "Auzit", + "heardHint": "Cât din linie a auzit vorbirea în text. O proporție mică înseamnă că textul diferă de ceea ce se spune - acolo unde aliniatorul greșește cel mai probabil.", + "statusConfirmedBySpeech": "Confirmat de vorbire", + "statusDisputedBySpeech": "Auzit unde era", + "statusMovedWithSync": "Mutat odată cu sincronizarea", + "syncedFirstXY": "Sincronizat mai întâi: {0} s la început, {1} s la sfârșit", + "showSpeechOnly": "Afișați doar vorbirea", + "showSpeechOnlyHint": "Desenați forma de undă aliniată din audio-ul fără muzică și efecte sonore; forma de undă originală rămâne neschimbată, pentru comparație. Disponibil după ce vorbirea a fost izolată - aici sau cu „Afișați doar vorbirea” în forma de undă din fereastra principală.", + "align": "Aliniați", + "original": "Original", + "aligned": "Aliniat", + "intro": "Alegeți un aliniator și apăsați „Aliniați” pentru a asculta fiecare linie în audio și a-i strânge codurile de timp.", + "extractingAudio": "Se extrage audio...", + "aligningBatchXOfY": "Se aliniază... lotul {0} din {1}", + "extractAudioFailed": "Audio-ul nu a putut fi extras cu ffmpeg.", + "modelWillBeDownloaded": "{0} va fi descărcat", + "summaryXRetimedYKeptZSkipped": "Resincronizate: {0} · Păstrate: {1} · Fără vorbire: {2}", + "meanShiftX": "Decalaj mediu: {0} ms", + "toCheckX": "De verificat: {0}", + "largeMovesToCheckX": "{0} linii s-ar muta mult de unele singure și sunt lăsate nebifate - ascultați-le (F5 redă linia aliniată, Shift+F5 originalul) și bifați-le pe cele corecte.", + "linesToCheckX": "{0} linii sunt lăsate nebifate pentru verificare - ascultați-le (F5 redă linia aliniată, Shift+F5 originalul) și bifați-le pe cele corecte.", + "changeXOfY": "Modificarea {0} din {1}", + "previousChange": "Modificarea anterioară", + "nextChange": "Modificarea următoare", + "startShift": "Început", + "endShift": "Sfârșit", + "statusRetimed": "Resincronizat", + "statusMovedWithNeighbours": "Mutat odată cu vecinii", + "statusLargeMoveUnconfirmed": "Mutare mare - ascultați, bifați pentru a aplica", + "statusUnchanged": "Deja la locul lui", + "statusNoSpeech": "Fără vorbire", + "statusShiftTooLarge": "Păstrat - decalaj prea mare", + "statusFailed": "Păstrat - aliniatorul a eșuat", + "statusAdjustedByHand": "Ajustat manual", + "alignedWaveformHint": "Trageți o linie pentru a o muta sau trageți-i marginile pentru a-i schimba începutul sau sfârșitul.", + "playLine": "Redați linia", + "undoAdjustment": "Anulați ajustarea", + "playPause": "Redare / pauză", + "playAligned": "Aliniat", + "playAlignedHint": "Redați linia selectată cu codurile de timp aliniate", + "apply": "Aplicați", + "applyHint": "Debifați o linie pentru a-i păstra codurile de timp originale. Faceți dublu clic pe o linie pentru a o reda. Liniile pot fi și mutate sau redimensionate în forma de undă aliniată." + }, "bridgeGaps": { - "title": "Goluri de pod", "bridgeGapsSmallerThan": "Goluri de punte mai mici de (ms)", "minGap": "Interval minim (ms)", + "bridgeGapsSmallerThanFrames": "Închideți intervalele mai mici de (cadre)", + "minGapFrames": "Interval minim (cadre)", + "calculateBridgeGapsSmallerThanDotDotDot": "Calculați limita de închidere a intervalelor dintr-o rată de cadre...", + "useXMsAsBridgeGapsSmallerThan": "Închideți intervalele mai mici de „{0}” milisecunde?", "numberOfSmallGapsBridgedX": "Numărul de goluri mici acoperite: {0}", "percentFoPrevious": "Diferența anterioară (%)", "gapChange": "Schimbarea decalajului" @@ -1973,8 +2141,6 @@ "sortBy": { "title": "Sortați subtitrări", "sortOrder": "Ordinea de sortare", - "sortByNumber": "Număr", - "sortByStartTime": "Ora de începere", "sortByEndTime": "Ora de sfârșit" }, "batchConvert": { @@ -1997,6 +2163,7 @@ "addColor": "Adăugați culoare", "deleteLinesWithSpecificActorsOrStyles": "Ștergeți liniile cu actori sau stiluri (separați multiplu prin virgulă)", "useSourceStylesIfPossible": "Folosiți stiluri sursă dacă este posibil", + "keepSourceEmbeddedFonts": "Păstrați fonturile încorporate din sursă (subsol)", "editStyles": "Editați stiluri", "editProperties": "Editați proprietăți", "editAttachments": "Editați atașamentele", @@ -2017,7 +2184,6 @@ "assaChangeStyleFromStyle": "Schimbați stilul de la", "assaChangeStyleToStyle": "la", "assaChangeStyleImportStyle": "Importați stilul...", - "assaChangeStyleImportedX": "Importat: {0}", "assaChangeStyleTrimUnusedStyles": "Eliminați stilurile nefolosite", "assaChangeStylePropertiesTitle": "Modificați proprietățile stilului", "assaChangeStylePropertiesInfo": "Modifică câmpurile alese în fiecare stil din fișier, fără a atinge stilurile în sine.", @@ -2029,13 +2195,52 @@ "convertColorsToDialogReBreakLines": "Reîmpărțiți liniile", "snapTimeCodesToFramesInfo": "Rotunjește fiecare timp de început și de sfârșit la cel mai apropiat cadru. Rata de cadre este citită dintr-un fișier video cu același nume ca fișierul de subtitrare, dacă nu este aleasă o rată de cadre fixă.", "addFolderDotDotDot": "Adăugați folder...", + "addFolderRecursiveDotDotDot": "Adăugați folderul recursiv...", "selectFolderToConvert": "Selectați folderul cu fișierele de convertit", "includeSubfolders": "Includeți subfolderele când adăugați un folder", + "videoFilesWhenAddingFolder": "Fișiere video (mkv, mp4, ts...) la adăugarea unui folder", + "videoFilesAsk": "Întrebați", + "videoFilesInclude": "Adăugați pistele lor de subtitrare", + "videoFilesSkip": "Omiteți", + "folderContainsXVideoFiles": "Folderul conține {0} fișier(e) video (mkv, mp4, ts...).\n\nAdăugați și pistele de subtitrare încorporate sau doar fișierele de subtitrare?", + "addVideoFiles": "Adăugați fișierele video", + "skipVideoFiles": "Doar fișierele de subtitrare", + "doNotAskAgainVideoFiles": "Nu mai întrebați (modificați în setările conversiei în lot)", + "settingsSectionOutput": "Ieșire", + "settingsSectionAddingFiles": "Adăugarea fișierelor", + "settingsSectionImageBasedSubtitles": "Subtitrări bazate pe imagini (OCR)", + "settingsSectionOther": "Altele", "keepSourceFileTimestamp": "Păstrați data/ora fișierului sursă pe fișierele de ieșire", - "scanningFolderX": "Se scanează {0}..." + "preventSleepWhileConverting": "Împiedicați intrarea computerului în repaus în timpul conversiei", + "scanningFolderX": "Se scanează {0}...", + "transportStreamSettings": "Setări Transport Stream", + "transportStreamSettingsDotDotDot": "Setări Transport Stream...", + "transportStreamSettingsInfo": "Se aplică pistelor de subtitrare extrase din fișiere Transport Stream (.ts/.m2ts). Poziția și dimensiunea video afectează doar pistele de imagine DVB exportate într-un format bazat pe imagini.", + "transportStreamOverrideXPosition": "Înlocuiți poziția X originală", + "transportStreamOverrideYPosition": "Înlocuiți poziția Y originală", + "transportStreamOverrideVideoSize": "Înlocuiți dimensiunea video originală", + "transportStreamBottomMargin": "Margine de jos", + "transportStreamFileNameEnding": "Terminația numelui de fișier", + "transportStreamFileNameEndingInfo": "Adăugată înaintea extensiei pentru fiecare pistă extrasă. Lăsați gol pentru a folosi sufixul obișnuit de limbă.", + "transportStreamOnlyTeletext": "Doar teletext", + "transportStreamGetSizeFromVideo": "Preluați dimensiunea din video...", + "twoLetterLanguageCodeUppercase": "Cod de limbă din două litere (majuscule)", + "threeLetterLanguageCodeUppercase": "Cod de limbă din trei litere (majuscule)", + "formatContainsDotDotDot": "Formatul conține...", + "extensionIsDotDotDot": "Extensia este...", + "statusIsError": "Starea este eroare", + "forcedTracksOnly": "Doar pistele forțate", + "xConvertedYFailedInZ": "{0:#,###,##0} convertite, {1:#,###,##0} eșuate în {2}", + "xNotProcessed": "{0:#,###,##0} neprocesate", + "removeUnicodeControlCharactersTitle": "Eliminați caracterele de control Unicode", + "removeUnicodeControlCharactersInfo": "Elimină din text caracterele invizibile Unicode de control al direcției (LRM, RLM, LRE, RLE, PDF, LRO și RLO) și înlocuiește spațiile neîntreruptibile cu spații normale.", + "preset": "Presetare", + "savePresetDotDotDot": "Salvați presetarea...", + "deletePreset": "Ștergeți presetarea", + "presetName": "Numele presetării", + "deletePresetX": "Ștergeți presetarea „{0}”?" }, "changeCasing": { - "title": "Schimbați carcasa", "fixNames": "Remediați numele", "namesX": "Nume: {0:#,##0}", "hitsX": "Potriviri: {0:#,##0}", @@ -2046,9 +2251,7 @@ "allUppercase": "Toate majuscule", "allLowercase": "Toate litere mici" }, - "changeFormatting": { - "title": "Schimbați formatarea" - }, + "changeFormatting": {}, "convertActors": { "title": "Convertiți actorii", "convertActorFrom": "Convertiți actorul din", @@ -2069,7 +2272,6 @@ "title": "Subtitrare împărțită", "numberOfEqualParts": "Număr de părți egale", "saveSplitParts": "_Salvați părțile divizate", - "subtitleSplitIntoXParts": "Subtitrare împărțită în {0} părți.", "xPartsSavedInFormatYToFolder": "{0} părți salvate în format {1} în dosar:" }, "splitBreakLongLines": { @@ -2095,13 +2297,14 @@ "onlyContinuationLines": "Doar linii de continuare" }, "mergeLinesWithSameText": { - "title": "Îmbina liniile cu același text", "maxMsBetweenLines": "Max milisecunde între linii", - "includeIncrementingLines": "Includeți linii cu text în creștere" + "maxFramesBetweenLines": "Număr maxim de cadre între linii", + "includeIncrementingLines": "Includeți linii cu text în creștere", + "includeRollUpCaptions": "Includeți subtitrările roll-up (derulante)" }, "mergeLinesWithSameTimeCodes": { - "title": "Îmbina liniile cu aceleași coduri de timp", "maxMsDifference": "Diferența maximă (milisecunde)", + "maxFramesDifference": "Diferență maximă (cadre)", "makeDialog": "Faceți dialoguri" }, "netflixCheckAndFix": { @@ -2124,7 +2327,6 @@ "shotChanges": "Modificări de fotografiere", "startNumberSpellOut": "Scrieți în litere numărul de la început", "textforHiUseBrackets": "Text pentru deficiențe de auz, folosiți paranteze", - "frameRate": "Rata de cadre", "twoFrameGrap": "Decalaj de două cadre", "whiteSpace": "Spațiu alb", "childrensProgram": "Program pentru copii", @@ -2162,7 +2364,6 @@ "italicsFixed": "Cursiv remediat", "italicsNotAllowed": "Cursivul nu este permis", "bridgeGapsXToYFrames": "decalaj de 3-{0} cadre => decalaj de 2 cadre", - "startNumberSpellOutComment": "Când un număr începe o propoziție, ar trebui întotdeauna scris în litere", "maximumXCharactersPerSecond": "Maximum {0} caractere pe secundă" }, "imageBasedEdit": { @@ -2172,23 +2373,21 @@ "resizeImagesDotDotDot": "Redimensionați imaginile...", "adjustBrightnessDotDotDot": "Reglați luminozitatea...", "adjustAlphaDotDotDot": "Ajustați alfa...", - "centerHorizontally": "Centrați pe orizontală", "cropImages": "Decupați imaginile", "importTimeCodes": "Importă coduri de timp...", - "setTextForSubtitle": "Setați textul pentru subtitrare", "screenWidth": "Lățimea ecranului", "screenHeight": "Înălțimea ecranului", "alphaThresholdInfo": "Pixelii cu alfa sub prag devin complet transparenți", "resetToDefaults": "Resetați la valorile implicite", - "alphaAdjustmentInfo": "Ajustare alfa: Adăugați/scădeți din canalul alfa.\n", + "alphaAdjustmentInfo": "Ajustare alfa: Adăugați/scădeți din canalul alfa.\nPrevizualizarea se actualizează automat și se afișează pe un fundal în carouri pentru a vizualiza transparența.", "adjustBrightness": "Reglați luminozitatea", "brightness": "Luminozitate", "contrast": "Contrast", "gamma": "Gamma", - "brightnessAdjustmentInfo": "Reglați glisoarele pentru a modifica luminozitatea, contrastul și gama.\n", + "brightnessAdjustmentInfo": "Reglați glisoarele pentru a modifica luminozitatea, contrastul și gama.\nPrevizualizarea se actualizează automat și afișează prima subtitrare selectată.", "resizeImages": "Redimensionați imaginile", "percentage": "Procent", - "resizeImagesInfo": "Introduceți procentul de redimensionare a imaginilor.\n", + "resizeImagesInfo": "Introduceți procentul de redimensionare a imaginilor.\nPrevizualizarea se actualizează automat.", "originalSizeXNewSizeY": "Original: {0} × {1} px\nNou: {2} × {3} px", "adjustColorDotDotDot": "Ajustați culoarea...", "adjustColor": "Ajustați culoarea", @@ -2205,15 +2404,31 @@ "letterboxCustom": "Înălțime personalizată a barei", "barHeightPx": "Înălțimea barei (px)", "titleSafePercent": "Zonă sigură pentru titlu (%)", + "moveCaptions": "Mutați subtitrările", + "moveCaptionsDotDotDot": "Mutați subtitrările...", + "moveCaptionsTo": "Mutați subtitrările", + "moveCaptionsIntoBars": "În benzile letterbox (în afara imaginii)", + "moveCaptionsIntoPicture": "În interiorul imaginii (în afara benzilor)", + "moveCaptionsOffset": "Distanța de la margine (px)", + "letterboxBarHeightXPxYOfZCaptionsWillMove": "Înălțimea benzii: {0} px - {1} din {2} subtitrări vor fi mutate", + "removeFadeInOut": "Eliminați fade in/out", + "removeFadeInOutXLinesRemoved": "{0} linii de fade îmbinate în liniile cărora le aparțin", + "removeFadeInOutNothingFound": "Nu s-au găsit linii de fade in/out", "positionSummary": "{0}×{1} - {2} subtitrări - înălțimea barei: {3} px", "xInActivePicture": "{0} în imagine", "xInTopBar": "{0} în bara de sus", "xInBottomBar": "{0} în bara de jos", "noImageSubtitlesLoaded": "Nu sunt încărcate subtitrări imagine", - "imageBasedFormatNotSupported": "Format de subtitrare bazat pe imagini negăsit/neacceptat." + "imageBasedFormatNotSupported": "Format de subtitrare bazat pe imagini negăsit/neacceptat.", + "frameRateDeclaredInFile": "Rata de cadre declarată în fișierul Blu-ray sup", + "frameRateDetectedFromTimeCodesX": "Rata de cadre detectată din codurile de timp Blu-ray sup (fișierul declară {0})", + "frameRateFromVideo": "Rata de cadre a videoclipului", + "frameRateCurrent": "Rata de cadre curentă", + "frameRateSetManually": "Rata de cadre setată manual", + "frameRateUsageInfo": "Exporturile Blu-ray sup, BDN XML, DOST și FCP sunt scrise la această rată de cadre. Nu modifică niciun timp - folosiți „Modificați rata de cadre” pentru asta.", + "useVideoFrameRateXInsteadOfY": "Rata de cadre a videoclipului este {0}, dar subtitrarea este setată la {1}.\n\nFolosiți rata de cadre a videoclipului ({0})?" }, "removeTextForHearingImpaired": { - "title": "Eliminați textul pentru persoanele cu deficiențe de auz", "interjections": "Interjecții", "skipIfStartWith": "Sariți dacă începeți cu", "removeTextBetween": "Eliminați textul dintre", @@ -2232,7 +2447,6 @@ "removeInterjections": "Eliminați interjecțiile", "linesFoundX": "Linii găsite: {0}" }, - "pickAlignmentTitle": "Alegeți alinierea", "removeUnicodeCharacters": { "title": "Eliminați/înlocuiți caracterele Unicode", "charactersFoundX": "Caractere Unicode găsite: {0}", @@ -2242,13 +2456,13 @@ "pickFontNameInstalledFonts": "Fonturi instalate", "pickFontNameCollectedFonts": "Fonturi colectate", "colorPickerTitle": "Alege culoarea", + "colorPickerBrightness": "Luminozitate", "filterLayersTitle": "Straturi de filtrare pentru afișare", "filterLayersHideFromWaveform": "Ascundeți din forma de undă/spectrogramă", "filterLayersHideFromSubtitleGrid": "Ascundeți din grila de subtitrare", "filterLayersHideFromVideoPreview": "Ascundeți din previzualizarea videoclipului", "pickSubtitleFormat": "Alegeți formatul de subtitrare", "pickSubtitleFormatImageBasedNoPreview": "Format de subtitrare bazat pe imagini.\nBitmap-urile sunt generate în timpul conversiei - fără previzualizare de text.", - "pickLayerTitle": "Setați stratul", "recentColors": "Culori recente", "beautifyTimeCodesProfile": { "title": "Editați profilul de înfrumusețare a codurilor de timp", @@ -2256,7 +2470,11 @@ "presetDefault": "Implicit", "presetNetflix": "Netflix", "presetSdi": "SDI", - "general": "General", + "saveAsProfile": "Salvați ca profil...", + "deleteProfile": "Ștergeți profilul", + "profileName": "Numele profilului", + "overwriteProfileX": "Există deja un profil numit „{0}”. Îl suprascrieți?", + "deleteProfileX": "Ștergeți profilul „{0}”?", "gap": "Decalaj", "gapSuffix": "cadre (actualizează și câmpurile de decalaj diferite de zero de mai jos)", "milliseconds": "ms", @@ -2296,12 +2514,7 @@ "outputFormatAssa": "Advanced Sub Station Alpha (.ass)", "style1": "Stilul 1", "style2": "Stilul 2", - "outlineWidth": "Lățimea conturului", - "shadowWidth": "Lățimea umbrei", - "alignTop": "Sus", - "alignBottom": "Jos", - "merge": "_Îmbină", - "pleaseLoadTwoSubtitles": "Vă rugăm să încărcați două subtitrări" + "merge": "_Îmbină" }, "mergeContinuationLines": { "title": "Îmbinați liniile de continuare", @@ -2312,9 +2525,7 @@ "columnMerge": "Îmbină", "columnFirst": "Prima linie", "columnSecond": "A doua linie", - "columnMerged": "Îmbinat", - "selectAll": "Selectați toate", - "inverseSelection": "Inversați selecția" + "columnMerged": "Îmbinat" }, "fixCommonErrorsSettingsTitle": "Setări pentru remedierea erorilor comune" }, @@ -2359,59 +2570,51 @@ "correctWordsX": "Cuvinte corecte: {0}", "namesX": "Nume: {0}", "addedToDictionaryX": "Adăugate în dicționar: {0}", - "doNotShowThisAgain": "Nu mai afișa acest mesaj" + "doNotShowThisAgain": "Nu mai afișa acest mesaj", + "editUseAlwaysList": "Editați lista „Folosiți întotdeauna”...", + "useAlwaysListTitle": "Verificare ortografică - lista „Folosiți întotdeauna”", + "useAlwaysListHeader": "Lista „Folosiți întotdeauna”", + "useAlwaysListDescription": "Cuvinte pe care verificarea ortografică le înlocuiește automat, salvate prin „Schimbați tot” și „Folosiți întotdeauna”. O pereche este folosită doar când cuvântul este scris greșit.", + "useAlwaysWord": "Cuvânt scris greșit", + "xPairs": "{0:#,##0} perechi", + "xUnusedPairs": "{0:#,##0} niciodată folosite", + "useAlwaysUnusedHint": "Niciodată folosit - acest cuvânt este scris corect (sau este un nume ori un cuvânt al utilizatorului), așa că verificarea ortografică nu îl semnalează niciodată", + "removeUnused": "Eliminați nefolosite", + "useAlwaysEmpty": "Încă nu există perechi „Folosiți întotdeauna” pentru această limbă", + "useAlwaysEmptyHint": "Perechile sunt adăugate când faceți clic pe „Schimbați tot” sau „Folosiți întotdeauna” în verificarea ortografică.", + "useAlwaysNoMatch": "Nicio pereche nu corespunde căutării", + "useAlwaysSameWord": "Înlocuirea trebuie să fie diferită de cuvânt.", + "useAlwaysRememberOff": "„Memorați lista «Folosiți întotdeauna»” este dezactivat în Setări, așa că verificarea ortografică nu folosește și nu salvează această listă." }, "video": { "burnIn": { "title": "Generați videoclipuri cu subtitrări arse", - "infoAssaOff": "Notă: este acceptat stilul Advanced SubStation Alpha.", - "infoAssaOn": "Notă: va fi folosit stilul avansat al SubStation Alpha :)", - "xGeneratedWithBurnedInSubsInX": "„{0}” generat cu subtitrare inscripționată în {1}.", - "timeRemainingMinutes": "Timp rămas: {0} minute", - "timeRemainingOneMinute": "Timp rămas: un minut", - "timeRemainingSeconds": "Timp rămas: {0} secunde", - "timeRemainingAFewSeconds": "Timp rămas: câteva secunde", - "timeRemainingMinutesAndSeconds": "Timp rămas: {0} minute și {1} secunde", - "timeRemainingOneMinuteAndSeconds": "Timp rămas: un minut și {0} secunde", - "targetFileName": "Nume fișier țintă: {0}", "targetFileSize": "Dimensiunea fișierului țintă (necesită codare cu 2 treceri)", "fileSizeMb": "Dimensiunea fișierului în MB", "matchSourceVideoSize": "Potriviți dimensiunea videoclipului sursă", - "passX": "Treceți {0}", - "encoding": "Codificare", "bitRate": "Rata de biți", "totalBitRateX": "Rată totală de biți: {0}", "sampleRate": "Rata de eșantionare", "audio": "Audio", - "stereo": "Stereo", "preset": "Presetat", + "tune": "Tune", "pixelFormat": "Format pixel", "crf": "CRF", - "tuneFor": "Acordați pentru", - "alignRight": "Aliniați dreapta", - "getStartPosition": "Obțineți poziția de pornire", - "getEndPosition": "Obțineți poziția finală", "useSource": "Utilizați sursa", - "useSourceFolder": "Utilizați folderul sursă", - "useSourceResolution": "Utilizați rezoluția sursei", - "outputSettings": "Fișier/dosar de ieșire...", "fontSizeFactor": "Factor de dimensiune a fontului", "boxType": "Tip cutie", - "fixRightToLeft": "Remediați de la dreapta la stânga", - "cut": "Tăiați", "fromTime": "Din timp", "toTime": "La timp", "audioEncoding": "Codificare audio", "outputProperties": "Proprietăți de ieșire...", "videoFileSize": "Dimensiunea fișierului video", "oneBox": "O cutie", - "boxPerLine": "Cutie pe linie", - "logoInfo": "Alegeți o imagine PNG și trageți-o pentru a o poziționa pe videoclip." + "logoInfo": "Alegeți o imagine PNG și trageți-o pentru a o poziționa pe videoclip.", + "noSubtitlesGenerateAnyway": "Nu există linii de subtitrare de inscripționat.\n\nGenerați videoclipul fără subtitrări?", + "noSubtitlesInXItemsGenerateAnyway": "{0} elemente din lot nu au linii de subtitrare de inscripționat.\n\nGenerați acele videoclipuri fără subtitrări?" }, "videoTransparent": { - "title": "Generați videoclipuri transparente cu subtitrări", - "infoAssaOff": "Notă: este acceptat stilul Advanced SubStation Alpha.", - "infoAssaOn": "Notă: va fi folosit stilul avansat al SubStation Alpha :)" + "title": "Generați videoclipuri transparente cu subtitrări" }, "audioToText": { "title": "Vorbire către text", @@ -2419,6 +2622,21 @@ "translateToEnglish": "Traduceți în engleză", "transcribing": "Se transcrie...", "transcribingXOfY": "Se transcrie {0} din {1}...", + "linesTranscribedXOfYFailedZ": "{0} din {1} linii au fost transcrise - {2} au eșuat sau nu au avut vorbire.\n\nLiniile eșuate își păstrează textul curent. Aplicați liniile transcrise sau reîncercați-le pe cele eșuate (puteți schimba mai întâi motorul sau setările)?", + "linesTranscribedXOfYCancelled": "Transcrierea a fost anulată după {0} din {1} linii.\n\nAplicați liniile transcrise? Celelalte linii își păstrează textul curent.", + "noLinesTranscribed": "Niciuna dintre cele {0} linii nu a putut fi transcrisă.\nVerificați jurnalul instrumentelor pentru detalii.", + "applyTranscribedLines": "Aplicați cele transcrise", + "retryFailedLines": "Reîncercați cele eșuate", + "isolateSpeech": "Izolați vorbirea (lent)", + "isolateSpeechHint": "Elimină muzica și efectele sonore înainte de transcriere. Duce la mai puține linii ratate și o sincronizare mai bună pe audio cu muzică puternică, dar durează cam cât audio-ul însuși cu un GPU - și de multe ori mai mult fără.", + "isolatingSpeech": "Se izolează vorbirea...", + "isolateSpeechFailed": "Vorbirea nu a putut fi izolată - se transcrie în schimb audio-ul original.", + "detectSpeakers": "Detectați vorbitorii", + "detectSpeakersHint": "Începe fiecare linie cu vorbitorul, de exemplu „(speaker 0)”, folosind diarizarea Sortformer de la NVIDIA (până la 8 vorbitori). Funcționează cel mai bine cu backend-urile care împart liniile acolo unde se schimbă vorbitorul, precum Parakeet și Cohere.", + "detectSpeakersNeedsNewerCrispAsr": "„Detectați vorbitorii” necesită Crisp ASR v{0} sau mai nou, dar este instalat v{1}.\n\nActualizați Crisp ASR (butonul roată de lângă motor) sau dezactivați „Detectați vorbitorii”.", + "xNeedsNewerCrispAsr": "{0} necesită Crisp ASR v{1} sau mai nou, dar este instalat v{2}.\n\nDescărcați și instalați actualizarea acum?", + "vad": "VAD", + "vadHint": "Detectarea activității vocale: se transcrie doar vorbirea, tăiată acolo unde vorbitorul face pauză.\nAuto: Silero, și doar pentru motoarele care au nevoie (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: mereu activ, pentru fiecare motor Crisp ASR. FireRedVAD este cel mai precis, Whisper-VAD dă cele mai puține și mai curate tăieturi, dar este cel mai lent.\nIndex-Echo folosește întotdeauna Silero. --vad, --vad-model sau --chunk-seconds din setările avansate au prioritate.", "inputLanguage": "Limba de intrare", "advancedWhisperSettings": "Setări avansate pentru șoaptă", "enableVad": "Activați VAD", @@ -2431,7 +2649,6 @@ "addCustomModelDotDotDot": "Adăugați model personalizat...", "customModelHelp": "Puteți folosi propriul model: alegeți fișierul modelului (whisper.cpp ggml '.bin') sau folderul modelului (folder faster-whisper cu un 'model.bin' înăuntru). Acesta este copiat în folderul de modele și adăugat în lista de mai sus.", "viewToolsLogFile": "Vizualizați fișierul jurnal Whisper", - "reDownloadX": "Descărcați din nou {0}", "downloadingSpeechToTextModel": "Se descarcă modelul de vorbire în text", "whisperPostProcessingTitle": "Post-procesare în șoaptă", "adjustTimings": "Ajustați timpul", @@ -2441,17 +2658,8 @@ "fixCasing": "Fixați carcasa", "addPeriods": "Adăugați puncte", "changeUnderlineToColor": "Schimbați sublinierea în culoare", - "cueBuilding": "Construire cue-uri (MLX Whisper)", - "cueRebuild": "Reconstruiți cue-urile din marcajele temporale ale cuvintelor", - "cueMaxChars": "Caractere maxime per cue", - "cueMaxSeconds": "Secunde maxime per cue", - "cueMaxCps": "Caractere maxime pe secundă", - "vocabularyPrompt": "Prompt de vocabular (nume, locuri, termeni)", - "beamSize": "Dimensiune beam", - "beamSizeNote": "0 decodează cel mai rapid. 5 oferă cea mai bună acuratețe (ca Faster Whisper) cu aproximativ 20-30% mai mult timp. Valorile peste 5 ajută rar.", "downloadingSpeechToTextEngine": "Se descarcă motorul de vorbire în text", "unpackingSpeechToTextEngine": "Se despachetează motorul de vorbire în text", - "downloadX": "Descărcați {0}", "updateXTitle": "Actualizați {0}?", "updateXMessage": "O versiune mai nouă a {0} este disponibilă.{1}{1}Descărcați și instalați actualizarea acum?", "removeNonSpeechLines": "Eliminați liniile fără vorbire", @@ -2512,7 +2720,7 @@ "cloneVoicePerLinePreparing": "Se preia vocea fiecărei linii din videoclip...", "cloneVoicePerLineNeedsVideo": "Clonarea vocii fiecărei linii necesită videoclipul căruia îi aparține subtitrarea. Deschideți videoclipul și încercați din nou.", "cloneVoicePerLineNoClips": "Nu s-a putut prelua audio din videoclip, deci nu există sursă de clonare. Verificați dacă videoclipul are o pistă audio.", - "cloneVoicePerLineNeedsOriginalSubtitleX": "{0} poate clona o linie doar când știe ce se spune în videoclip la acea linie, informație care provine din subtitrarea în limba originală. Nicio subtitrare originală nu este încărcată, deci fiecare linie ar fi rostită de prima voce importată, în locul vocii din videoclip.\n\nDeschideți subtitrarea originală (Fișier > Deschideți originalul...) alături de traducere, apoi generați din nou.", + "cloneVoicePerLineTranscribeClipsXYZ": "{0} poate clona o linie doar când știe ce se spune în videoclip la acea linie. Acest lucru nu se știe pentru {1} din {2} linii - în mod normal provine din subtitrarea în limba originală (Fișier > Deschideți originalul...).\n\nTranscrieți acum acele linii din videoclip cu vorbire în text?\n\nDa: alegeți motorul și limba vorbită în videoclip, iar clipurile de referință sunt transcrise înainte de generarea vorbirii.\nNu: generați oricum - acele linii sunt rostite de o voce obișnuită în loc de vocea din videoclip.", "voiceCloneConsentTitle": "Clonarea vocii - înainte de a începe", "voiceCloneConsentHeader": "Sunteți pe cale să clonați o voce", "voiceCloneConsentIntro": "Clonarea copiază vocea unei persoane reale. Acest lucru vine cu reguli în majoritatea locurilor, iar în UE cu obligații legale care vă revin dvs., nu programului Subtitle Edit. Citiți acest text o dată.", @@ -2528,6 +2736,12 @@ "voiceCloneConsentDeclined": "Clonarea vocii nu este disponibilă până când acești termeni nu sunt acceptați.", "advancedTtsAudioProcessing": "Procesare audio", "advancedTtsOutput": "Ieșire", + "advancedTtsVoiceCloning": "Clonarea vocii", + "cleanCloneReferences": "Curățați referințele pentru clonarea vocii (Sidon)", + "cleanCloneReferencesDescription": "Elimină muzica, zgomotul și reverberația din audio-ul din care se clonează o voce: clipuri preluate din videoclip și înregistrări importate în managerul de voci. Folosește modelul de restaurare a vorbirii Sidon pe audio.cpp (descărcare de 940 MB). Vocea clonată nu mai copiază fundalul, dar vorbirea foarte încetă sau suprapusă poate ieși înfundată.", + "cleaningCloneReferencesDotDotDot": "Se curăță referințele pentru clonarea vocii...", + "downloadSidonTitle": "Descărcați Sidon?", + "downloadSidonQuestionX": "Curățarea referințelor pentru clonarea vocii necesită modelul de restaurare a vorbirii Sidon ({0}).\n\nÎl descărcați acum? Fără el, referințele sunt folosite așa cum sunt.", "rubberbandInstalled": "(instalat)", "rubberbandNotFound": "(negăsit în FFmpeg)", "generationFolder": "Folder de generare", @@ -2536,14 +2750,11 @@ "deleteTempFilesDescription": "Șterge folderul de generare la închiderea ferestrei Text în vorbire. Fișierele audio și video salvate sunt păstrate.", "piperSettings": "Setări Piper", "title": "Text în vorbire", - "textToSpeechEngine": "Motor text în vorbire", "reviewAudioSegments": "TTS - Examinați segmentele audio", "reviewAudioSegmentsHistory": "TTS - Examinați istoricul audio", "stability": "Stabilitate", "similarity": "Similitudine", "speakerBoost": "Amplificare difuzor", - "styleExaggeration": "Exagerarea stilului", - "regenerateAudioSelectedLine": "Regenerează sunetul pentru linia selectată", "generateSpeechFromText": "Generați vorbire din text", "testVoice": "Testează vocea", "addAudioToVideoFile": "Adăugați audio la fișierul video", @@ -2562,37 +2773,113 @@ "videoEncodingSettings": "TTS - Setări de codare video", "elevenLabsSettings": "Setări TTS - ElevenLabs", "elevenLabsSettingsResetHint": "Resetați setările ElevenLabs la valorile implicite", + "provider": "Furnizor", + "openAiCompatibleSettings": "TTS - Setări compatibile OpenAI", + "customServerUrl": "URL server personalizat", + "customServerUrlHint": "Endpoint-ul complet de vorbire al unui server compatibil OpenAI, folosit când furnizorul este „Custom”, de ex. http://localhost:8880/v1/audio/speech", + "customModels": "Modele personalizate", + "customModelsHint": "Nume de modele separate prin virgulă, oferite când furnizorul este „Custom”", + "customVoices": "Voci personalizate", + "customVoicesHint": "Nume de voci separate prin virgulă, folosite de furnizorul „Custom” și de modelele OpenRouter care nu publică o listă de voci", + "instructions": "Instrucțiuni", + "instructionsHint": "Stil de vorbire opțional, de ex. „Vorbește cu o voce calmă și caldă”. Trimis doar modelelor care îl acceptă (nu tts-1/tts-1-hd)", + "openAiSpeedHint": "Viteza vorbirii de la 0.25 la 4.0 (1.0 este normal). Nu toate modelele o acceptă", + "outputFormat": "Format de ieșire", + "outputFormatHint": "Formatul audio cerut de la server. „Auto” cere MP3 și trece la PCM pentru modelele care returnează doar PCM (de ex. Gemini TTS)", "regenerateAudio": "Regenerează sunetul", "autoContinuePlaying": "Continuați automat jocul", "addingAudioToVideoFileDotDotDot": "Se adaugă sunet la fișierul video...", "preparingMergeDotDotDot": "Se pregătește îmbinarea...", "importVoiceDotDotDot": "Import voce...", + "renameVoiceDotDotDot": "Redenumiți vocea...", + "renameVoiceTitle": "Redenumiți vocea", + "voiceXCouldNotBeRenamedX": "Vocea „{0}” nu a putut fi redenumită: {1}", + "deleteVoiceDotDotDot": "Ștergeți vocea...", + "deleteVoiceTitle": "Ștergeți vocea", + "deleteVoiceXQuestion": "Ștergeți vocea „{0}”?\n\nÎnregistrarea de referință și fișierele ei sunt eliminate de pe disc.", + "voiceXCouldNotBeDeletedX": "Vocea „{0}” nu a putut fi ștearsă: {1}", "voiceImportSuccessTitle": "Voce importată", "voiceXImported": "Vocea „{0}” a fost importată cu succes", "advancedTtsSettings": "Setări avansate TTS", "proAudioPostProcessing": "Post-procesare audio profesională", "proAudioPostProcessingDescription": "Aplică căldura EQ, noise gate, compresie, normalizarea sonorității (-16 LUFS) și fade in/out pentru fiecare segment.", + "generatingSpeechSegmentXOfY": "Se generează vorbirea: segmentul {0} din {1}", + "adjustingSpeedSegmentXOfY": "Se ajustează viteza: segmentul {0} din {1}", + "mergingAudioSegmentXOfY": "Se îmbină audio: segmentul {0} din {1}", + "postProcessingSegmentXOfY": "Post-procesare: segmentul {0} din {1}", "audioDucking": "Ducking audio", "audioDuckingDescription": "Reduce volumul audio video original și îl amestecă cu sunetul TTS, astfel încât coloana sonoră originală este încă puțin audibilă.", + "removeOriginalSpeech": "Eliminați vorbirea originală (lent)", + "removeOriginalSpeechDescription": "Păstrează muzica și efectele sonore ale videoclipului original, dar îi elimină vorbirea și mixează noua vorbire peste acestea. Durează cam cât videoclipul însuși cu un GPU și de multe ori mai mult fără. Cu atenuarea audio (ducking) activată, volumul ei se aplică muzicii și efectelor. Se aplică doar când vorbirea este adăugată în fișierul video.", + "removingOriginalSpeech": "Se elimină vorbirea originală...", + "removeOriginalSpeechFailed": "Vorbirea originală nu a putut fi eliminată - vorbirea a fost adăugată în videoclip fără această eliminare.", + "speechRemovalModel": "Model", + "speechRemovalModelDescription": "Calitatea cea mai bună păstrează cel mai mult din muzică și efectele sonore. Rapid este de circa trei ori mai iute, cu ceva mai multă muzică pierdută.", + "speechRemovalBestQuality": "Calitate maximă (Mel-Band RoFormer)", + "speechRemovalFast": "Rapid (HTDemucs)", + "videoTruncatedWarning": "Imaginea din noul fișier video se oprește după {0}, dar videoclipul original durează {1} - imaginea va îngheța în timp ce sunetul continuă.\n\nFișierul a fost păstrat. Consultați error-log.txt din folderul de date Subtitle Edit pentru ieșirea ffmpeg.", "originalVolumePercent": "Volumul original %", "vadSilenceCompression": "Compresie silențioasă VAD", - "vadSilenceCompressionDescription": "Scurtează pauzele dintre cuvinte înainte de a schimba tempo-ul. ", + "vadSilenceCompressionDescription": "Scurtează pauzele dintre cuvinte înainte de a schimba tempo-ul.", "maxSilenceMs": "Tăcere maximă (ms)", "highQualityTimeStretch": "Extindere în timp de înaltă calitate (WSOLA/bandă de cauciuc)", - "highQualityTimeStretchDescription": "Folosește algoritmul de bandă de cauciuc (WSOLA) în loc de filtrul de atempo implicit pentru schimbările de viteză care păstrează înălțimea. ", + "highQualityTimeStretchDescription": "Folosește algoritmul de bandă de cauciuc (WSOLA) în loc de filtrul de atempo implicit pentru schimbările de viteză care păstrează înălțimea.", "silencePaddingMs": "Umplutură de tăcere (ms)", - "silencePaddingMsDescription": "Adaugă o scurtă tăcere la sfârșitul fiecărui segment. ", + "silencePaddingMsDescription": "Adaugă o scurtă tăcere la sfârșitul fiecărui segment.", "outputSampleRate": "Frecvența de eșantionare a ieșirii (0 = implicit)", - "outputSampleRateDescription": "Reeșantionează toate segmentele la rata de eșantionare specificată (de exemplu, 44100, 48000). ", + "outputSampleRateDescription": "Reeșantionează toate segmentele la rata de eșantionare specificată (de exemplu, 44100, 48000).", "edgeTtsRate": "Rata Edge-TTS", - "edgeTtsRateDescription": "Rata de vorbire pentru Edge-TTS, de ex. ", + "edgeTtsRateDescription": "Rata de vorbire pentru Edge-TTS, de ex.", "edgeTtsPitch": "Pasul Edge-TTS", - "edgeTtsPitchDescription": "Ajustarea pasului pentru Edge-TTS, de ex. ", + "edgeTtsPitchDescription": "Ajustarea pasului pentru Edge-TTS, de ex.", "edgeTtsVolume": "Volumul Edge-TTS", - "edgeTtsVolumeDescription": "Reglarea volumului pentru Edge-TTS, de ex. ", + "edgeTtsVolumeDescription": "Reglarea volumului pentru Edge-TTS, de ex.", "dropAudioFileHereToImportVoice": "Plasați fișierul audio aici pentru a importa vocea", "dropAudioFileHereHint": ".wav sau .mp3", "voiceCloneTranscriptTitle": "Introduceți transcrierea audio (necesar pentru clonarea vocii)", + "voiceManagerTitle": "TTS - Manager de voci", + "voiceManagerDotDotDot": "Manager de voci...", + "voiceManagerMenuItem": "Manager de voci TTS...", + "speakFromCurrentLineTitle": "Citiți de la linia curentă", + "speakFromCurrentLineDotDotDot": "Citiți de la linia curentă...", + "speakFromCurrentLineHint": "Citește liniile cu voce tare una după alta, începând cu linia curentă. Apăsați Escape sau faceți clic pe altă linie pentru a opri.", + "stopSpeaking": "Opriți citirea", + "speakingLineX": "Se citește linia {0}... (Escape pentru oprire)", + "playWithSpeechTitle": "Redare cu vorbire", + "playWithSpeechDotDotDot": "Redare cu vorbire...", + "playWithSpeechHint": "Redă videoclipul și rostește fiecare linie când videoclipul ajunge la ea. Puneți pauză și derulați ca de obicei; apăsați Escape pentru a opri.", + "lowerVideoVolumeWhileSpeaking": "Reduceți volumul videoclipului în timpul vorbirii", + "pauseVideoWhenSpeechRunsLate": "Puneți pauză videoclipului când vorbirea se suprapune cu linia următoare", + "waitingForSpeechLineX": "Se generează vorbirea pentru linia {0}... (Escape pentru oprire)", + "voiceKindClone": "Voce clonată", + "voiceKindPreset": "Integrată", + "voiceKindModel": "Model de voce", + "voiceKindOnline": "Online", + "transcript": "Transcriere", + "transcriptRequiredHint": "Obligatoriu - motorul citește această transcriere a înregistrării (ref-text) la clonare", + "transcriptOptionalHint": "Opțional - o transcriere exactă a înregistrării îmbunătățește clonarea", + "saveTranscript": "Salvați transcrierea", + "searchVoices": "Căutați voci", + "loadingVoicesDotDotDot": "Se încarcă vocile...", + "noVoicesForEngine": "Nicio voce - importați o înregistrare sau descărcați un pachet de voci", + "noVoicesMatchFilter": "Nicio voce nu corespunde căutării", + "copyVoiceTo": "Copiați vocea în", + "copyVoiceToDotDotDot": "Copiați vocea în motor...", + "copyingVoiceXToYDotDotDot": "Se copiază vocea „{0}” în {1}...", + "voiceXCopiedToY": "Vocea „{0}” a fost copiată în {1}", + "voiceXCouldNotBeCopiedToY": "Vocea „{0}” nu a putut fi copiată în {1} - consultați jurnalul pentru detalii", + "voiceXAlreadyExistsInYContinue": "O voce numită „{0}” există deja în {1}.\n\nO copiați totuși?", + "openVoicesFolder": "Deschideți folderul cu voci", + "downloadVoicePacksDotDotDot": "Descărcați pachete de voci...", + "downloadVoicePacksTitle": "TTS - Descărcați pachete de voci", + "voicePackIntro": "Pachetele de voci sunt seturi de înregistrări scurte și curate, cu transcrieri, gata pentru clonare. Fiecare pachet este importat în motorul ales (vocile deja existente sunt omise) și include un ATTRIBUTION.txt cu licența și sursele sale.", + "voicePackDetailsXVoicesYSizeZLicense": "{0} voci · {1} · {2}", + "installToEngine": "Instalați în motor", + "downloadAndInstall": "Descărcați și instalați", + "selectAtLeastOneVoicePack": "Selectați cel puțin un pachet de voci", + "downloadingXDotDotDot": "Se descarcă {0}...", + "installingXDotDotDot": "Se instalează {0}...", + "xVoicesInstalledYSkipped": "{0} voci instalate ({1} existau deja)", "useSpeechToTextDotDotDot": "Folosiți vorbire în text...", "downloadPiperPrompt": "„Text în vorbire” necesită Piper.\r\n\r\nDescărcați și folosiți Piper?", "omniVoiceTtsSettings": "Setări OmniVoice TTS", @@ -2644,7 +2931,6 @@ "subtitleMergedLinesAppliedPlural": "S-au aplicat {0} îmbinări de linii din text în vorbire" }, "shotChanges": { - "titleGenerateOrImport": "Generați/importați modificări de fotografie", "generateShotChanges": "Generați modificări de fotografiere", "importShotChanges": "Importă modificări de fotografiere", "generateShotChangesWithFfmpeg": "Generați modificări de fotografiere cu ffmpeg", @@ -2654,7 +2940,9 @@ "timeCodeFormatColon": "Format cod de timp:", "shotChangesList": "Lista cu modificări de fotografie", "shotChangesClearQuestion": "Sigur doriți să ștergeți toate modificările de fotografiere?", - "deleteSelectedShotChangeQuestion": "Sigur doriți să ștergeți modificarea fotografiei selectate?" + "deleteSelectedShotChangeQuestion": "Sigur doriți să ștergeți modificarea fotografiei selectate?", + "shotChanges": "Schimbări de plan", + "exportShotChanges": "Exportați schimbările de plan" }, "chapters": { "title": "Capitole", @@ -2684,7 +2972,6 @@ "scaleTimesDescription": "Scalați timpii fiecărui capitol de la o rată de cadre la alta.", "fromFrameRate": "De la", "toFrameRate": "La", - "apply": "Aplicați", "writeToVideo": "Scrieți în videoclip...", "writeToVideoTitle": "Scrieți capitolele în videoclip", "writeToVideoDescription": "Capitolele sunt scrise într-o copie a fișierului video. Nimic nu este recodificat, deci operația este rapidă și fără pierderi.", @@ -2694,7 +2981,6 @@ "writtenToX": "Capitole scrise în {0}", "unableToWriteChapters": "Capitolele nu au putut fi scrise în fișierul video.", "chaptersSavedToX": "Capitole salvate în {0}", - "noVideoLoaded": "Niciun videoclip încărcat", "emptyListCallToAction": "Încă niciun capitol - adăugați unul la poziția video sau importați-le dintr-un videoclip ori fișier." }, "videoOcr": { @@ -2705,10 +2991,6 @@ "bottomHalf": "Jumătatea de jos", "fullFrame": "Cadru complet", "engine": "Motor OCR", - "language": "Limbă", - "url": "URL", - "model": "Model", - "apiKey": "Cheie API", "scan": "Scanați", "framesPerSecond": "Cadre pe secundă", "textBrightnessMinimum": "Luminozitate minimă text (0=dezactivat)", @@ -2723,10 +3005,10 @@ "runningOcrXY": "Se rulează OCR... {0}/{1}", "noLinesFoundTitle": "Nu s-au găsit subtitrări", "noLinesFoundMessage": "Nu s-a găsit text în zona de scanare - încercați să ajustați zona de scanare, motorul sau luminozitatea minimă.", + "ocrStoppedEarlyMessage": "Motorul OCR s-a oprit înainte ca toate cadrele să fie citite, așa că liniile găsite până acum sunt păstrate, iar restul lipsesc.{0}{0}{1}", "linesFoundX": "{0} linii găsite", "refiningTimingXY": "Se rafinează sincronizarea... {0}/{1}", "fixOcrErrors": "Remediați erorile OCR", - "dictionary": "Dicționar", "editLineX": "Editați linia {0}", "downloadDictionaryHint": "Descărcați un dicționar de verificare ortografică...", "framesPerSecondHint": "Câte cadre pe secundă sunt scanate. 5 acoperă subtitrările normale; o valoare mai mare prinde liniile foarte scurte și strânge gruparea, dar costă mai mult timp de OCR.", @@ -2743,7 +3025,58 @@ "testOcr": "Testați cadrul curent", "testOcrRunning": "Se testează OCR pe cadrul curent...", "testOcrResultX": "Rezultat test: {0}", - "testOcrNoTextFound": "Test: nu s-a găsit text în zona de scanare" + "testOcrNoTextFound": "Test: nu s-a găsit text în zona de scanare", + "engineSettings": "Setări motor OCR", + "engineBuiltIn": "Integrat în sistemul de operare", + "engineExternalServer": "Server extern (instalat și gestionat în afara Subtitle Edit)", + "engineCloudApi": "API cloud (necesită o cheie API)", + "engineNothingToInstall": "Nimic de instalat", + "engineModelsMissing": "Motor instalat, modele lipsă", + "website": "Site web" + }, + "backgroundMusic": { + "title": "Generați muzică de fundal", + "generateBackgroundMusicDotDotDot": "Generați muzică de fundal...", + "preset": "Presetare", + "prompt": "Prompt", + "tempoBpm": "Tempo (BPM)", + "generateSeconds": "Generați (secunde)", + "seed": "Seed", + "randomSeed": "Aleatoriu", + "outputLength": "Lungimea ieșirii", + "outputLengthVideoX": "{0} (lungimea videoclipului - muzica se repetă fără întreruperi)", + "musicVolumePercent": "Volumul muzicii (%)", + "removeExistingAudioTracks": "Eliminați pistele audio existente", + "originalAudioVolumePercent": "Volumul audio original (%)", + "saveAudioDotDotDot": "Salvați audio...", + "addToVideoDotDotDot": "Adăugați în videoclip...", + "engineInfo": "ACE-Step 1.5 Turbo prin audio.cpp (licență MIT) - rulează local", + "presetCooking": "Gătit / copt", + "presetTech": "Tehnologie / recenzie gadgeturi", + "presetForest": "Pădure / natură", + "presetRelaxingPiano": "Pian relaxant", + "presetLofiVlog": "Vlog lo-fi", + "presetCorporate": "Corporate / explicativ", + "loadingModel": "Se încarcă modelul...", + "composing": "Se compune...", + "generatingAudio": "Se generează audio...", + "decodingAudio": "Se decodează audio...", + "creatingLoop": "Se creează bucla fără întreruperi...", + "resultLoopXYZ": "Buclă: {0} la {1} BPM, potrivire la îmbinare {2}%", + "resultNoLoopX": "Muzica este gata: {0}", + "addingMusicToVideo": "Se adaugă muzica în videoclip...", + "downloadModelTitle": "Descărcați modelul muzical?", + "downloadModelQuestionX": "Generarea muzicii necesită modelul ACE-Step 1.5 ({0}).\n\nDescărcați modelul?", + "downloadingModel": "Se descarcă modelul ACE-Step 1.5...", + "saveAudioTitle": "Salvați muzica de fundal", + "audioFileSavedX": "Fișier audio salvat: {0}", + "unableToGenerateMusic": "Nu se poate genera muzica", + "unableToAddMusicToVideo": "Nu se poate adăuga muzica în videoclip", + "outputLengthTextToSpeech": "Urmează vorbirea generată - muzica se repetă fără întreruperi și scade când vorbește cineva", + "addBackgroundMusic": "Adăugați muzică de fundal", + "addBackgroundMusicHint": "Generați muzică local cu ACE-Step 1.5 și mixați-o sub vorbire - scade când vorbește cineva", + "generatingBackgroundMusicDotDotDot": "Se generează muzica de fundal...", + "mixingBackgroundMusicDotDotDot": "Se mixează muzica de fundal..." }, "goToVideoPosition": "Mergeți la poziția video", "goToVideoPositionDotDotDot": "Mergeți la poziția video...", @@ -2754,34 +3087,91 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "Subtitrare secundară pe playerul video, deschide...", "openSecondarySubtitleOnVideoPlayer": "Subtitrare secundară (pe player video)", "removeSecondarySubtitleOnVideoPlayer": "Subtitrare secundară pe playerul video, eliminați", + "editSecondarySubtitleSettings": "Editați setările celei de-a doua subtitrări", + "editSecondarySubtitleSettingsDotDotDot": "Editați setările celei de-a doua subtitrări...", + "secondarySubtitleRememberSettings": "Memorați aceste setări", + "secondarySubtitleDoNotShowAgain": "Nu mai afișați acest dialog", + "secondarySubtitleJustifyLines": "Aliniați liniile la ambele margini", "openRecentVideo": "Deschideți un videoclip recent", "clearRecentVideos": "Ștergeți videoclipurile recente", "cutVideoTitle": "Tăiați videoclipul", "cutVideoDotDotDot": "Tăiați videoclipul...", + "remuxVideoTitle": "Remux video", + "remuxVideoDotDotDot": "Remux video...", + "remuxVideoInputVideo": "Videoclip de intrare:", + "remuxVideoMultipleTracksRequiresMkv": "Mai multe piste audio sau de subtitrare necesită containerul MKV. Formatul de ieșire a fost schimbat automat în .mkv.", + "remuxVideoOutputFormat": "Format de ieșire:", + "remuxVideoOutputFile": "Fișier de ieșire:", + "remuxVideoRemuxing": "Se face remux pentru video și audio...", + "remuxVideoFinalizing": "Se finalizează fișierul de ieșire (se mută indexul la început)...", + "remuxVideoCompleted": "Remux video realizat cu succes.", + "remuxVideoFailed": "Remux video eșuat.", + "remuxVideoPleaseSelectBoth": "Selectați atât fișierul video, cât și fișierele audio.", + "remuxVideoAssRequiresMkv": "Subtitrările ASS/SSA necesită containerul MKV pentru a păstra toată formatarea și stilurile.", + "remuxVideoSccRequiresMov": "Subtitrările Scenarist (.scc) sunt încorporate ca subtitrări închise CEA-608, care necesită containerul MOV sau MPG. Formatul de ieșire a fost schimbat automat în .mov.", + "remuxVideoSccNotWithWebM": "Subtitrările închise Scenarist (.scc) necesită containerul MOV, care nu poate conține video VP9/AV1 dintr-un fișier .webm. Eliminați fișierul .scc sau convertiți-l în alt format de subtitrare.", + "remuxVideoMpgMaxTwoCaptionTracks": "Un fișier .mpg conține cel mult două piste de subtitrări închise (CC1 și CC3) - eliminați fișiere de subtitrare astfel încât să rămână una sau două.", + "remuxVideoMccRequiresMpg": "Subtitrările MacCaption (.mcc) sunt încorporate ca subtitrări închise CEA-608/708 în video MPEG-2, care necesită containerul MPG. Formatul de ieșire a fost schimbat automat în .mpg.", + "remuxVideoMpgReencodeVideoX": "Subtitrările închise dintr-un fișier .mpg necesită video MPEG-2, iar videoclipul este {0}. Re-encodați videoclipul în MPEG-2? Durează mai mult și scade puțin calitatea.", + "remuxVideoFileHasNoAudioX": "„{0}” nu are pistă audio, deci nu poate fi folosit ca sursă audio.", + "remuxVideoAddingClosedCaptions": "Se adaugă subtitrările închise...", + "remuxVideoSelectAudioTrack": "Selectați pista audio", + "remuxVideoSelectAudioTrackFor": "Selectați pista audio pentru {0}", + "remuxVideoSelectAudioTrackPrompt": "Fișierul „{0}” conține {1} piste audio. Selectați pista audio pentru remux:", + "remuxVideoVideoFile": "video", + "remuxVideoAudioFile": "audio", + "remuxVideoAudioFiles": "Fișiere audio:", + "remuxVideoSubtitleFiles": "Fișiere de subtitrare (opțional, subtitrări soft):", + "remuxVideoSelectAudioTrackDotDotDot": "Selectați pista audio...", + "remuxVideoFilesX": "{0} fișiere", + "remuxVideoMixAudio": "Mixați audio într-o singură pistă", + "remuxVideoVolumePercent": "Volum %:", + "remuxVideoVolumeX": "Volum {0}%", + "remuxVideoFastStart": "Optimizați pentru streaming web (mută indexul la început - mai lent)", "embedSubtitlesDotDotDot": "Adăugați/eliminați subtitrări încorporate...", "generateTimeCodes": "Generați coduri de timp", "checkeredImage": "Imagine în carouri", - "saveVideoAsTitle": "Salvați videoclipul ca", "promptForFfmpegParamsAndGenerate": "Solicitați parametrii ffmpeg și generați", "cutVideoCutSegments": "Tăiați segmente", "cutVideoMergeSegments": "Îmbinați segmente", "cutVideoSplitSegments": "Salvați segmentele individual", - "cutVideoType": "Tip de tăiere", - "mpvRenderAuto": "Auto", - "mpvRenderNative": "Nativ", - "mpvRenderOpenGl": "OpenGL", - "mpvRenderSoftware": "Software (lent)", "cutVideoAlsoCutSubtitle": "Tăiați și subtitrarea", "cutVideoSubtitleFileGeneratedX": "Fișier de subtitrare generat: {0}", + "cutVideoTransition": "Tranziție între segmente", + "cutVideoTransitionDurationSeconds": "Durată (secunde)", + "cutVideoFadeInSeconds": "Apariție din negru la început (secunde)", + "cutVideoFadeOutSeconds": "Dispariție în negru la sfârșit (secunde)", + "cutVideoPreviewTransition": "Previzualizați tranziția", + "cutVideoPreviewTransitionTitle": "Previzualizarea tranziției", + "cutVideoPreviewNeedsJoin": "Nu există nicio îmbinare de previzualizat - adăugați cel puțin două segmente de îmbinat sau un segment de tăiat din mijloc.", + "cutVideoTransitionInfoX": "Fiecare tranziție suprapune părțile pe care le îmbină, așa că ieșirea devine cu {0} secunde mai scurtă la fiecare îmbinare. O subtitrare tăiată este resincronizată corespunzător.", + "cutVideoTransitionFade": "Estompare", + "cutVideoTransitionFadeBlack": "Estompare prin negru", + "cutVideoTransitionFadeWhite": "Estompare prin alb", + "cutVideoTransitionFadeGrays": "Estompare prin gri", + "cutVideoTransitionDissolve": "Dizolvare", + "cutVideoTransitionWipeLeft": "Ștergere spre stânga", + "cutVideoTransitionWipeRight": "Ștergere spre dreapta", + "cutVideoTransitionWipeUp": "Ștergere în sus", + "cutVideoTransitionWipeDown": "Ștergere în jos", + "cutVideoTransitionSlideLeft": "Glisare spre stânga", + "cutVideoTransitionSlideRight": "Glisare spre dreapta", + "cutVideoTransitionSlideUp": "Glisare în sus", + "cutVideoTransitionSlideDown": "Glisare în jos", + "cutVideoTransitionSmoothLeft": "Lin spre stânga", + "cutVideoTransitionSmoothRight": "Lin spre dreapta", + "cutVideoTransitionCircleOpen": "Cerc care se deschide", + "cutVideoTransitionCircleClose": "Cerc care se închide", + "cutVideoTransitionRadial": "Radial", + "cutVideoTransitionPixelize": "Pixelare", + "cutVideoTransitionBlur": "Estompare (blur)", "importCurrentSubtitle": "Importă subtitrarea curentă", "addRemoveEmbeddedSubtitlesTitle": "Adăugați/eliminați subtitrări încorporate", "addCurrentSubtitle": "Adăugați subtitrarea curentă", - "titleOrLanguage": "Titlu/limba", "viewMatroskaTrackX": "Vezi traseul Matroska - {0}", "resolutionSeparator": "x", "openFromUrlTitle": "Deschideți fișierul video de la URL", "addRemoveEmbeddedSubtitlesMp4Title": "Adăugați/eliminați subtitrări încorporate (MP4)", - "embeddedTrackColumnNew": "Nou", "embeddedTrackNoSubtitlesFoundTitle": "Nu s-au găsit subtitrări", "embeddedTrackNoSubtitlesFoundMessage": "Fișierul de subtitrare selectat nu conține nicio subtitrare.", "embeddedTrackNoTracksTitle": "Nu s-au adăugat piste", @@ -2793,15 +3183,14 @@ "embeddedTrackGeneratingVideoXY": "Se generează videoclipul... {0}% {1}", "embeddedTrackGeneratingVideo": "Se generează videoclipul...", "mp4FilesFilter": "Fișiere MP4", + "embeddedTracksPickVideoHint": "Alegeți un fișier video sau trageți-l aici pentru a-i vedea pistele de subtitrare.", "openFromUrlOpenOnline": "Deschideți online", "openFromUrlOpenOnlineDescription": "Redați videoclipul direct în flux. Pornire cea mai rapidă.", "openFromUrlOpenOnlineNote": "Vorbirea în text și vârfurile formei de undă nu sunt disponibile în acest mod.", "openFromUrlDownloadAndOpen": "Descărcați și deschideți", "openFromUrlDownloadAndOpenDescription": "Salvați videoclipul local, apoi deschideți-l.", "openFromUrlDownloadAndOpenNote": "Necesar pentru vorbire în text și vârfurile formei de undă.", - "openFromUrlMissing": "Vă rugăm să introduceți mai întâi un URL video.", "openFromUrlDownloadingTitle": "Se descarcă videoclipul", - "openFromUrlSaveAs": "Salvați videoclipul ca", "openFromUrlDownloadSubtitles": "Descărcați și subtitrările", "openFromUrlDownloadVideo": "Descărcați videoclipul", "openFromUrlIncludeAutoGeneratedSubtitles": "Includeți subtitrările generate automat (limba originală)", @@ -2838,12 +3227,15 @@ "reEncodeGeneratingDone": "Generare finalizată", "reEncodeGeneratedFilesX": "Fișiere generate ({0}):", "reEncodeFfmpegParameters": "parametri ffmpeg", + "analyzingVideoX": "Se analizează videoclipul... {0}% {1}", + "analyzingVideoXofY": "Se analizează videoclipul {0}/{1}... {2}% {3}", + "backgroundImageFileNotSelected": "Fișierul imagine de fundal nu este selectat", + "backgroundImageFileDoesNotExistX": "Fișierul imagine de fundal nu există: {0}", "voices": "Voci", "presets": "Presetări", "talkerX": "Vorbitorul {0}", "baseModel": "Model de bază", "turboModel": "Model turbo", - "ttsUpdateX": "Actualizați {0}", "ttsEngineNotInstalled": "{0} nu este instalat", "ttsEngineUpdateAvailable": "{0} - actualizare disponibilă", "ttsEngineTooOldUpdateRequired": "{0} prea vechi - este necesară actualizarea", @@ -2857,26 +3249,32 @@ "guessTimeCodesSplitLongSubtitlesAt": "Împărțiți subtitrări lungi la (ms):", "speechToTextSelectedLinesDotDotDot": "Vorbire în text liniile selectate...", "seekSilence": "Caută tăcerea", - "minSilenceDurationSeconds": "Min. ", - "maxSilenceVolume": "Max. ", + "minSilenceDurationSeconds": "Min.", + "maxSilenceVolume": "Max.", "guessTimeCodesDotDotDot": "Ghici coduri de timp...", "seekSilenceDotDotDot": "Caută tăcerea...", "cloneVoiceTo": "Clonați vocea în", "cloneVoiceNameTitle": "Numele noii voci", "cloneVoiceExtractFailed": "Nu s-a putut extrage audio pentru linia selectată.", + "lineXHasNoDuration": "Linia {0} nu are durată (timpul de sfârșit nu este după timpul de început), deci nu există audio de extras.", + "audioClipsSkippedLinesX": "Nu s-a putut extrage audio pentru aceste linii, așa că au fost omise: {0}", "toggleShotChange": "Comutați schimbarea loviturii", "resetWaveformZoomAndSpeed": "Resetați zoomul și viteza formei de undă", "showOriginalSubtitle": "Afișați subtitrarea originală", + "timelineGroupTracksBy": "Grupați pistele de subtitrare după", + "timelineShowThumbnails": "Afișați miniaturi video", + "showSpeechOnly": "Afișați doar vorbirea (generare lentă)", + "isolatingSpeechForWaveformX": "Se izolează vorbirea pentru forma de undă... {0}", + "isolatingSpeechForWaveformFailed": "Vorbirea nu a putut fi izolată pentru forma de undă - consultați jurnalul instrumentelor", + "speechOnlyWaveformReady": "Forma de undă afișează acum doar vorbirea", "showOnlyWaveform": "Afișați numai forma de undă", "showOnlySpectrogram": "Afișați numai spectrograma", "showWaveformAndSpectrogram": "Afișați forma de undă și spectrograma", - "spectrogramClassic": "Clasic", "spectrogramClassicViridis": "Viridis", "spectrogramClassicPlasma": "Plasma", "spectrogramClassicInferno": "Infern", "spectrogramClassicTurbo": "Turbo", "spectrogramNeon": "Neon", - "waveformDrawStyleClassic": "Clasic", "waveformDrawStyleFancy": "Fantezie", "setVideoPositionAndPauseAndSelectSubtitle": "Setați poziția videoclipului, întrerupeți și selectați subtitrarea", "setVideopositionAndPauseAndSelectSubtitleAndCenter": "Setați poziția videoclipului, întrerupeți, selectați subtitrarea și centrați", @@ -2888,7 +3286,6 @@ }, "sync": { "visualSync": "Sincronizare vizuală", - "sync": "Sincronizare", "startScene": "Scena de început", "endScene": "Scena finală", "playTwoSecondsAndBack": "Redați 2 secunde și înapoi", @@ -2904,24 +3301,23 @@ "adjustSelectedLinesAndForward": "Ajustați liniile selectate și înainte", "toFrameRate": "Pentru rata de cadre", "fromFrameRate": "Din rata de cadre", + "videoXFrameRateY": "{0} - {1} fps", "adjustAllTimes": "Ajustați toate orele (afișați mai devreme/mai târziu)", "showEarlier": "Arată mai devreme", "showLater": "Arată mai târziu", - "changeFrameRate": "Schimbați rata de cadre", "setSyncPoint": "Setați punctul de sincronizare", "setSyncPointViaVideo": "Setați punctul de sincronizare prin video...", "syncPointTimeCode": "Codul de timp al punctului de sincronizare", "syncPoints": "Puncte de sincronizare", "pointSync": "Sincronizare punct", "pointSyncViaOther": "Sincronizare punct prin altă subtitrare", - "adjustmentX": "Ajustare: {0}", - "syncPointCandidateInfo": "Liniile care încep după {0}+ secunde de liniște sunt evidențiate - ele fac adesea puncte de sincronizare de încredere", - "adjustAllShortcuts": "Comenzi rapide de la tastatură:\r\n\r\n", + "syncPointCandidateAfterInfo": "Liniile urmate de {0}+ secunde de liniște sunt evidențiate - adesea sunt puncte de sincronizare de încredere", + "gapAfter": "Interval după", + "adjustAllShortcuts": "Comenzi rapide de la tastatură:\n\n• Shift + Stânga/Dreapta: Mută cu 10 ms\n• Ctrl + Stânga/Dreapta: Mută cu 100 ms\n• Alt + Stânga/Dreapta: Mută cu 500 ms", "adjustAllShortcutsFrames": "Comenzi rapide de la tastatură:\r\n\r\n• Shift + Stânga/Dreapta: Mutați 1 cadru\r\n• Ctrl + Stânga/Dreapta: Mutați 10 cadre\r\n• Alt + Stânga/Dreapta: Mutați 1 secundă", "offsetInSeconds": "Offset în secunde", "speedFactor": "Factorul de viteză", - "showEarlierLaterDotDotDot": "Arată mai devreme/mai târziu...", - "totalAdjustmentX": "Ajustare totală: {0}" + "showEarlierLaterDotDotDot": "Arată mai devreme/mai târziu..." }, "translate": { "translateViaCopyPaste": "Traduceți automat prin copiere/lipire", @@ -2936,6 +3332,7 @@ "lineMerge": "Îmbinare linie", "delayInSecondsBetweenRequests": "Întârziere în secunde între solicitări", "maxBytesPerRequest": "Max bytes per solicitare", + "keepMusicLinesUntranslated": "Nu traduceți liniile între simboluri muzicale (♪ ... ♪)", "promptText": "Text prompt", "resetPromptToDefault": "Resetați promptul la valoarea implicită", "translateEachLineSeparately": "Traduceți fiecare linie separat", @@ -2949,11 +3346,10 @@ "readyToTranslate": "Gata de traducere", "translating": "Se traduce...", "translationComplete": "Traducere finalizată", + "translateInPlaceNoOriginal": "Traduceți pe loc (fără a crea original)", "translationCancelled": "Traducere anulată", "swapLanguages": "Interschimbați limbile sursă și țintă", "xIsAlreadyDownloadedReDownload": "{0} este deja descărcat. Descărcați din nou?", - "advancedDotDotDot": "Avansate...", - "advancedSettings": "Setări avansate", "advancedSettingsSubtitle": "Opțiuni de lot, context și eșantionare pentru motorul avansat llama.cpp", "context": "Context", "synopsis": "Sinopsis", @@ -2977,6 +3373,7 @@ "useOnlyExtraServerParametersHint": "Porniți llama-server cu parametrii de mai sus în locul reglajelor proprii ale Subtitle Edit - se setează în continuare doar modelul, gazda și portul", "serverRunningAtX": "Serverul rulează la {0}", "customPromptHint": "Instrucțiuni personalizate ({0} = limba sursă, {1} = limba țintă); gol = prompt încorporat", + "editTranslationHint": "Faceți clic pe traducerea rândului selectat pentru a o edita (Enter salvează, Escape anulează)", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp necesită descărcarea motorului llama-server și a unui model de traducere. Descărcați acum?", "llamaCppDownloadEnginePrompt": "llama.cpp necesită descărcarea motorului llama-server. Descărcați acum?", "llamaCppDownloadModelPrompt": "llama.cpp necesită descărcarea modelului de traducere selectat. Descărcați acum?" @@ -3014,8 +3411,14 @@ "checkForUpdatesChannelStableAndBeta": "Versiuni stabile și beta", "assaAutoSetResolution": "ASSA: setați rezoluția (PlayResX/PlayResY) din videoclip atunci când se deschide un videoclip", "assaAutoSetResolutionPrompt": "ASSA: întrebați înainte de a schimba rezoluția pentru a se potrivi cu videoclipul (altfel reeșantionați automat)", + "videoControls": "Comenzi video", + "videoControlsEdit": "Editați comenzile video...", + "videoControlsPositionText": "Text poziție / durată", + "videoControlsVideoFileName": "Numele fișierului video", + "videoControlsPlayerName": "Numele playerului video", "mergeKeepEndTime": "Îmbinarea liniilor: păstrați ora de sfârșit (permiteți suprapunerea cu subtitrarea următoare)", "mergeKeepEndTimeOnlyAssa": "Îmbinarea liniilor: păstrați ora de sfârșit numai pentru „Advanced Sub Station Alpha”", + "mergeAutoBreak": "Îmbinarea liniilor: auto-break pentru textul îmbinat (dezactivat păstrează întreruperile de rând proprii liniilor)", "defaultSaveLocation": "Locația implicită de salvare", "defaultSaveLocationSourceFileFolder": "Folderul fișierului de subtitrare/video", "defaultSaveLocationLastUsedFolder": "Ultimul folder utilizat", @@ -3023,6 +3426,7 @@ "defaultSaveLocationSubtitleFileFolder": "Folderul fișierului de subtitrare", "defaultSaveLocationCustomFolder": "Folder personalizat", "subtitleGridFormattingHideTags": "Ascundeți etichetele", + "subtitleGridFormattingShowFormattingKeepTags": "Afișați formatarea, păstrați etichetele non-vizuale", "musicSymbolsToReplace": "Simboluri muzicale de înlocuit (separate prin virgulă)", "musicSymbol": "Simbol muzical", "colorWordsPerMinute": "Colorați cuvinte/min dacă e prea mare", @@ -3033,7 +3437,6 @@ "dialogStyleDashBothLinesWithSpace": "Tranzați ambele linii cu spațiu", "dialogStyleDashBothLinesWithoutSpace": "Tranzați ambele linii fără spațiu", "continuationStyle": "Stilul de continuare", - "continuationStyleNone": "Nici unul", "continuationStyleNoneTrailingDots": "Niciuna, puncte pentru pauze (numai după)", "continuationStyleNoneLeadingTrailingDots": "Niciuna, puncte pentru pauze", "continuationStyleNoneTrailingEllipsis": "Niciuna, puncte de suspensie pentru pauze (numai după)", @@ -3044,7 +3447,6 @@ "continuationStyleLeadingTrailingEllipsis": "Elipsă", "continuationStyleLeadingTrailingDash": "Dash", "continuationStyleLeadingTrailingDashDots": "Linie, dar puncte pentru pauze", - "continuationStyleCustom": "Personalizat", "cpsLineLengthStyle": "Cps/lungimea liniei", "cpsLineLengthStyleCalcAll": "Numără toate caracterele", "cpsLineLengthStyleCalcNoSpaceCpsOnly": "Numărați toate, cu excepția spațiului, numai cps", @@ -3057,26 +3459,10 @@ "cpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly": "Fără spațiu sau semne de punctuație, numai CPS", "cpsLineLengthStyleCalcIgnoreArabicDiacritics": "Ignorați semnele diacritice arabe", "cpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "Ignorați semnele diacritice arabe, fără spațiu", - "timeCodeModeHhMmSsMs": "HH:MM:SS:MS", - "timeCodeModeHhMmSsFf": "HH:MM:SS:FF", - "splitBehaviorPrevious": "Adăugați un spațiu la stânga punctului de împărțire (focalizare la dreapta)", - "splitBehaviorHalf": "Adăugați un spațiu în centrul punctului de împărțire (focalizare la stânga)", - "splitBehaviorNext": "Adăugați un spațiu la dreapta punctului de împărțire (focalizare la stânga)", - "subtitleListActionNothing": "Nimic", - "subtitleListActionVideoGoToPositionAndPause": "Accesați poziția video și întrerupeți", - "subtitleListActionVideoGoToPositionAndPlay": "Mergeți la poziția video și redați", "subtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "Accesați poziția video, redați curentul și întrerupeți", - "subtitleListActionEditText": "Accesați caseta de text de editare", "subtitleListActionVideoGoToPositionMinus1SecAndPause": "Mergeți la poziția video - 1 s și faceți o pauză", "subtitleListActionVideoGoToPositionMinusHalfSecAndPause": "Mergeți la poziția video - 0,5 s și faceți o pauză", "subtitleListActionVideoGoToPositionMinus1SecAndPlay": "Mergeți la poziția video - 1 s și redați", - "subtitleListActionEditTextAndPause": "Accesați caseta de text de editare și întrerupeți la poziția videoclipului", - "autoBackupEveryMinute": "În fiecare minut", - "autoBackupEveryXthMinute": "La fiecare {0}minut", - "profiles": "Profiluri", - "autoBackupDeleteAfterXMonths": "Ștergeți copiile de rezervă automate după {0} luni", - "syntaxColoring": "Colorarea sintaxelor", - "waveformSpectrogram": "Formă de undă/spectrogramă", "network": "Reţea", "fileTypeAssociations": "Asocieri de tipuri de fișiere", "textBoxColorTags": "Etichete de culoare (HTML/ASSA) în caseta de text pentru subtitrare", @@ -3109,10 +3495,9 @@ "darkThemeForegroundColor": "Culoare în prim-plan a temei întunecate", "darkThemeBackgroundColor": "Culoare de fundal întunecată", "showGridLines": "Afișați liniile de grilă", - "resetSettings": "Resetați setările?", - "resetSettingsDetail": "Aceasta va reseta toate setările la valorile implicite.\n\n", "showHorizontalLineAboveToolbar": "Afișați linia orizontală deasupra barei de instrumente", "bookmarkColor": "Culoarea semnului de carte", + "spellCheckHighlightColor": "Culoarea de evidențiere a verificării ortografice", "singleLineMaxLength": "Lungimea maximă a unei singure linii", "optimalCharsPerSec": "Caractere optime/sec", "maxCharsPerSec": "Max caractere/sec", @@ -3124,11 +3509,19 @@ "unbreakSubtitlesShortThan": "Unbreak subtitrări mai scurte decât", "newEmptyDefaultMs": "Durata implicită a subtitrarilor noi (ms)", "timeCodeUpDownStepMs": "Increment sus/jos pentru timp (ms)", + "moveSelectedLinesStepMs": "Pasul comenzii rapide de mutare a liniilor selectate (ms)", + "moveStartEndStepMs": "Pasul comenzii rapide de mutare început/sfârșit (ms)", + "moveLinesShortenNeighbor": "Mutarea liniilor: scurtați linia anterioară/următoare în loc să o suprapuneți", "promptBeforeDelete": "Solicitați înainte de ștergere", "rememberPositionAndSize": "Amintiți-vă poziția și dimensiunea ferestrei", + "titleBarFullFileName": "Afișați calea completă a fișierului în bara de titlu", + "showRecentFiles": "Afișați fișierele recente (pentru redeschidere)", "autoBackupOn": "Backup automat", "autoBackupIntervalMinutes": "Interval de backup automat (minute)", "autoBackupDeleteAfterDays": "Reținerea backupului automat (zile)", + "settingsBackupOn": "Backup automat al setărilor", + "settingsBackupIntervalDays": "Intervalul de backup al setărilor (zile, 0 = la fiecare pornire)", + "settingsBackupMaxCount": "Copii de rezervă ale setărilor de păstrat", "autoConvertToUtf8": "Conversie automată în UTF-8 la deschidere", "autoTrimWhiteSpace": "Decuparea automată a spațiului alb", "defaultEncoding": "Codare implicită", @@ -3142,23 +3535,14 @@ "colorGapTooShort": "Colorează dacă decalajul este prea scurt", "errorBackgroundColor": "Eroare culoarea de fundal", "waveformDrawGridLines": "Desenați linii de grilă", - "waveformCenterVideoPosition": "Poziția video centrală", + "waveformUseSkiaRenderer": "Folosiți randarea rapidă experimentală", "waveformCenterVideoPositionAlsoWhenPaused": "Centrați poziția video și în timpul pauzei", + "waveformSelectCurrentSubtitleWhilePaused": "Selectați subtitrarea curentă și în timpul pauzei", + "waveformRememberZoom": "Memorați zoomul (orizontal și vertical)", "waveformShowToolbar": "Afișați bara de instrumente", "waveformShowToolbarEdit": "Editați bara de instrumente...", "waveformShowToolbarEditLabel": "Elemente ale barei de instrumente", "waveformSpectrogramCombinedWaveformHeight": "Forma de undă/spectrogramă combinată, înălțimea formei de undă %", - "showWaveformToolbarPlay": "Bara de instrumente: afișați butonul de redare", - "showWaveformToolbarRepeat": "Bara de instrumente: afișați butonul de repetare", - "showWaveformToolbarRemoveBlankLines": "Bara de instrumente: afișați butonul de eliminare a liniilor goale", - "showWaveformToolbarNew": "Bara de instrumente: afișați butonul de subtitrare nou", - "showWaveformToolbarSetStart": "Bara de instrumente: afișați butonul de pornire setați", - "showWaveformToolbarSetEnd": "Bara de instrumente: afișează butonul de terminare a setării", - "showWaveformToolbarStartAndOffsetTheRest": "Bara de instrumente: afișează start set și offset butonul de odihnă", - "showWaveformToolbarHorizontalZoom": "Bara de instrumente: afișați glisorul de zoom orizontal", - "showWaveformToolbarVerticalZoom": "Bara de instrumente: afișați glisorul de zoom vertical", - "showWaveformToolbarVideoPositionSlider": "Bara de instrumente: afișați glisorul de poziție video", - "showWaveformToolbarPlaybackSpeed": "Bara de instrumente: arată viteza de redare", "waveformFocusTextboxAfterInsertNew": "Focalizează caseta de text după inserare", "waveformInvertMouseWheel": "Întoarceți roata mouse-ului", "waveformMouseWheelSetsVideoPosition": "Rotița mouse-ului setează poziția video", @@ -3176,15 +3560,12 @@ "waveformSelectedColor": "Culoarea selectată a formei de undă", "downloadFfmpeg": "Descărcați ffmpeg", "proxyAddress": "Adresa proxy", - "username": "Nume de utilizator", "password": "Parolă", "defaultFormat": "Format implicit", "defaultSaveAsFormat": "Format implicit „Salvare ca”.", "favoriteSubtitleFormats": "Formatele de subtitrare preferate", "favoriteLanguages": "Limbi favorite", "webVttUseXTimestampMap": "WebVTT: utilizați X-TIMESTAMP-MAP (decalați codurile de timp la încărcare)", - "showStopButton": "Afișați butonul de oprire", - "showFullscreenButton": "Afișează butonul pe ecran complet", "autoOpenVideoFile": "Deschideți automat fișierul video când deschideți subtitrarea", "downloadMpv": "Descărcați mpv", "downloadVlc": "Descărcați VLC", @@ -3223,23 +3604,26 @@ "resetSyntaxColoring": "Resetați colorarea sintaxei", "resetWaveform": "Resetați forma de undă", "resetRules": "Resetați regulile", - "useFrameMode": "Utilizați modul cadru (hh.mm.ss.ff)", + "timeCodeMode": "Mod cod de timp", + "timeCodeModeTime": "Timp (hh:mm:ss,zzz)", + "timeCodeModeFrames": "Cadre (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "Numere de cadre", + "frameModeSnapToVideoFrames": "Stocați timpii pe cadrele video (nu pe cadre în cadrul fiecărei secunde)", "textBoxLimitNewLines": "Limitați numărul de rânduri în caseta de text subtitrare", - "mpvVideoOutput": "Ieșire video (mpv)", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - Redare software (lent)", + "mpvMetalRendering": "libmpv - Metal (experimental, necesită repornire)", "mpvWidRendering": "libmpv - Redare nativă a ID-ului ferestrei (mai rapidă pe Windows/Linux)", "waveFormsAndSpectrogramFoldersContainsX": "Dosarele „Forme de undă” și „spectrogramă” conțin {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "Ștergeți fișierele „Forme de undă” și „Spectrogramă”?", "waveformGenerateSpectrogram": "Generați spectrogramă", "waveformAutoGenerate": "Generați automat forma de undă la deschiderea unui videoclip", "waveformSpectrogramMode": "Modul spectrogramă", - "waveformCenterOnSingleClick": "Centrați pe un singur clic", - "waveformSingleClickSelectsSubtitle": "Selectați subtitrarea cu un singur clic", "waveformRightClickSelectsSubtitle": "Selectați subtitrarea cu clic dreapta", - "waveformPauseOnSingleClick": "Întrerupeți la un singur clic", "waveformDrawStyle": "Stilul de desen al formei de undă", "vlcWidRendering": "libVLC - Redare nativă a ID-ului ferestrei", + "ffmpegSoftwareRendering": "FFmpeg", + "downloadFfmpegLibs": "Descărcați bibliotecile FFmpeg (pentru playerul video FFmpeg)", "subtitleGridEnterKeyAction": "Grilă de subtitrare Acțiunea tastei Enter", "subtitleSingleClickAction": "Acțiune cu un singur clic pentru grila de subtitrare", "subtitleDoubleClickAction": "Acțiune de dublu clic pe grila de subtitrare", @@ -3263,22 +3647,23 @@ "saveAsBehaviorUseVideoFileName": "Utilizați numele fișierului video", "saveAsBehaviorUseSubtitleFileName": "Utilizați numele fișierului de subtitrare", "saveAsAppendLanguageCodeTwoLetter": "Două litere", - "saveAsAppendLanguageCodeThreeLetter": "Trei litere", "saveAsAppendLanguageCodeLanguageName": "Numele limbii", "splitOddLineActionWeightTop": "Greutate de sus", "splitOddLineActionWeightBottom": "Greutate de jos", "splitOddLinesAction": "Acțiune de împărțire a liniilor impare", "ocrUseWordSplitList": "OCR: utilizați lista împărțită de cuvinte", "ocrGuessUnknownWords": "OCR: încercați să ghiciți cuvintele necunoscute", + "spellCheckRememberUseAlwaysList": "Verificare ortografică: memorați lista „Folosiți întotdeauna”", + "fixShortDisplayTimesAllowMoveStartTime": "Remediați erorile comune: remedierea timpilor de afișare scurți poate muta timpul de început", "multipleReplaceShowDotDotDotButtons": "Înlocuire multiplă: afișați butoanele meniului contextual", "gridFocusTextboxAfterInsertNew": "Grilă: focus caseta de text după inserarea unui nou subtitrare", + "undoRedoGoToChangedLine": "Anulare/refacere: mergeți la linia modificată (și la poziția video)", "textToSpeechPromptSkipNoiseLines": "Text în vorbire: întrebați dacă se omit liniile cu sunete/muzică", "textToSpeechPromptDetectSpeakers": "Text în vorbire: întrebați dacă se detectează numele vorbitorilor din text", "useFocusedButtonBackgroundColor": "Utilizați culoarea de fundal a butonului focalizat", "focusedButtonBackgroundColor": "Culoarea de fundal a butonului focalizat", "forceCrLfOnSave": "Forțați CR+LF la salvare (fișiere de subtitrare text)", - "showWaveformToolbarPlayNext": "Bara de instrumente: afișați butonul de redare următor", - "showWaveformToolbarPlaySelection": "Bara de instrumente: afișați butonul de selecție a redării", + "linuxClipboardUseExternalTool": "Copiați textul prin xclip/wl-copy (păstrează caracterele accentuate)", "showFormatLimitWarning": "Avertizați la salvare când liniile depășesc limitele formatului (de ex. SCC 32 caractere/linie)", "textBoxButtonShowAutoBreak": "Caseta text: afișați butonul de întrerupere automată", "textBoxButtonShowUnbreak": "Caseta de text: afișați butonul de întrerupere", @@ -3290,6 +3675,8 @@ "waveformDoubleClickAction": "Acțiune de dublu clic pe formă de undă (după acțiunea de un singur clic)", "allSettings": "Toate setările", "uiScale": "Scala UI (%)", + "fontScale": "Scara fontului (%)", + "textSelectionOpacity": "Opacitatea selecției de text (%)", "waveformToolbarItems": "Elemente din bara de instrumente Waveform", "matchIconColorToDarkTheme": "Potriviți culoarea pictogramei cu culoarea întunecată a primului plan a temei", "subtitlePreviewProperties": "Proprietăți de previzualizare a subtitrarilor", @@ -3301,22 +3688,30 @@ "fixCommonErrorsSkipStep1": "Remediați erorile comune: omiteți pasul 1 (alegeți remedierile)", "showPluginsMenu": "Afișați meniul Plugins", "fullscreenHideControls": "Ascundeți controalele video în ecran complet", + "showSecondarySubtitleDialog": "Afișați dialogul de stil la deschiderea unui al doilea fișier de subtitrare", + "rememberSecondarySubtitleFile": "Memorați al doilea fișier de subtitrare", "allowSingleLetterShortcutsInTextbox": "Permiteți comenzi rapide dintr-o singură literă în caseta de text", + "allowTextNavigationShortcutsInTextbox": "Permiteți comenzi rapide pe tastele de navigare în text (Ctrl+Stânga/Dreapta, Home/End) în caseta de text", "spellCheckEnglishTreatInApostropheAsIng": "Verificare ortografică: tratați cuvintele terminate în 'in'' ca 'ing' (doar engleză)", "writeToolsLog": "Scrieți jurnalul instrumentelor", "waveformShotChangeColor": "Culoarea schimbării fotografiei în forma de undă", + "waveformGridColor": "Culoarea grilei formei de undă", "waveformExtractAudioFormat": "Format de extragere audio", "waveformExtractAudioSampleRate": "Rata de eșantionare la extragerea audio", "waveformExtractAudioSampleRateOriginal": "Originală (păstrați sursa)", "waveformExtractAudioBitRate": "Rata de biți la extragerea audio (MP3/M4A)", + "ffmpegUseCenterChannelOnly": "Folosiți doar canalul central frontal pentru audio 5.1 (FFmpeg)", "subtitleGridCenterSelectedRow": "Grila de subtitrare, centrați la selectarea rândului anterior/următor", "waveformSetVideoPositionOnMoveStartEnd": "Setați poziția video la mutarea începutului/sfârșitului", - "saveAsAppendLanguageCodeThreeLetterBibliographic": "Trei litere (ISO 639-2/B)", "speechToTextSelectedLinesPromptFirstTimeOnly": "Vorbire în text: linii selectate, solicitați limba/motorul doar prima dată", "textToSpeechPromptMergeContinuationLines": "Text în vorbire: solicitați îmbinarea liniilor de continuare", "usePositionFromSubtitleFile": "Folosiți poziția din fișierul de subtitrare (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "Marginea face parte din zona subtitrării", "textJustify": "Aliniați liniile la ambele capete", + "deinterlace": "Deîntrețesere video", + "deinterlaceOff": "Dezactivat", + "deinterlaceAuto": "Auto (doar cadrele întrețesute)", + "deinterlaceAlways": "Întotdeauna", "pixelWidthInfo": "Liniile verzi = limita de lățime maximă | Zona roșie = textul depășește limita", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3325,116 +3720,88 @@ "waveformColorTheme": "Temă de culori:", "waveformSaveAsCustomTheme": "Salvați ca temă personalizată...", "waveformLoadThemeDotDotDot": "Încărcați tema...", - "waveformExportThemeDotDotDot": "Exportați tema..." + "waveformExportThemeDotDotDot": "Exportați tema...", + "waveformSaveCustomThemeTitle": "Salvați tema personalizată", + "waveformThemeFileType": "Temă de formă de undă Subtitle Edit", + "waveformThemeHighContrast": "Contrast ridicat", + "waveformThemeOceanBlue": "Albastru ocean", + "waveformThemeWarmSunset": "Apus cald", + "waveformThemeForest": "Pădure", + "waveformThemeMidnightPurple": "Mov de miezul nopții", + "waveformThemeRetroAmber": "Chihlimbar retro", + "waveformThemeIce": "Gheață" }, "shortcuts": { "generalUnbreakNoSpaceCjk": "Desfaceți fără spațiu (CJK)", - "title": "Comenzi rapide", + "generalToggleBreak": "Comutați întreruperea/desfacerea rândurilor", "searchShortcuts": "Căutați comenzi rapide...", - "filter": "Filtra", - "categoryGeneral": "General", "categorySubtitleGridAndTextBox": "Vizualizarea listei de subtitrări și caseta de text", "categorySubtitleGrid": "Vizualizare listă de subtitrări", - "categoryWaveform": "Formă de undă", "categoryTextBox": "Casetă de text", "categoryFile": "Fișier", "categoryVideo": "Video", "categorySync": "Sincronizare", - "categoryTranslate": "Traducere", - "categorySearch": "Căutare", - "categoryTools": "Unelte", "categoryAi": "AI", + "categoryCustom": "Personalizat", + "editCustomShortcut": "Editați comanda rapidă personalizată", + "customShortcutTextBoxKeyHint": "Folosiți aici o tastă cu Ctrl/Alt - o tastă simplă nu ar mai scrie în caseta de text.", + "customShortcutNumberX": "Comandă rapidă personalizată #{0}", + "customShortcutNumberXY": "Comandă rapidă personalizată #{0}: {1}", + "customShortcutStep": "Pas", + "customShortcutSteps": "Pași", + "customShortcutStepRunCommand": "Rulați comanda", + "customShortcutStepInsertText": "Inserați text", + "customShortcutStepReplace": "Căutați și înlocuiți", + "customShortcutInsertAtCursor": "La cursor", + "customShortcutInsertAtStart": "La începutul textului", + "customShortcutInsertAtEnd": "La sfârșitul textului", + "customShortcutSummaryRunCommandX": "Rulați: {0}", + "customShortcutSummaryInsertXY": "Inserați „{0}” ({1})", + "customShortcutSummaryReplaceXY": "Înlocuiți „{0}” cu „{1}”", + "customShortcutSummaryReplaceRegexXY": "Înlocuiți regex „{0}” cu „{1}”", + "customShortcutPickCommand": "Selectați o comandă de rulat.", + "customShortcutEnterText": "Introduceți textul de inserat.", + "customShortcutEnterFind": "Introduceți textul de căutat.", + "customShortcutInvalidRegexX": "Expresie regulată nevalidă: {0}", + "customShortcutStepsHint": "Pașii rulează de sus în jos. Pașii de text acționează asupra liniilor selectate; comenzile care deschid o fereastră continuă după ce aceasta se închide.", "activeIn": "Activ în", "activeInEverywhere": "Peste tot", - "generalSetupLikeSe4": "Configurați ca Subtitle Edit 4 (temă, comenzi rapide, reguli de înlocuire)", - "generalMergeSelectedLines": "Îmbina liniile selectate", - "generalMergeWithPrevious": "Îmbinați cu precedentul", - "generalMergeWithNext": "Îmbinați cu următorul", - "generalMergeWithPreviousAndUnbreak": "Îmbinați cu anterior și unbreak", - "generalMergeWithNextAndUnbreak": "Îmbină cu următorul și unbreak", - "generalMergeWithPreviousAndAutoBreak": "Îmbinați cu anterioară și auto-break", - "generalMergeWithNextAndAutoBreak": "Îmbinați cu următorul și auto-break", - "generalMergeSelectedLinesAndAutoBreak": "Îmbina liniile selectate și întrerupe automat", "generalMergeSelectedLinesAndUnbreak": "Îmbinați liniile selectate și dezactivați", "generalMergeSelectedLinesAndUnbreakCjk": "Îmbinați liniile selectate și dezactivați CJK", - "generalMergeSelectedLinesOnlyFirstText": "Îmbinați liniile selectate numai primul text", "generalMergeSelectedLinesBilingual": "Îmbinați liniile selectate bilingve", - "generalMergeWithPreviousBilingual": "Îmbinați cu bilingvul anterior", - "generalMergeWithNextBilingual": "Îmbinați cu următorul bilingv", - "generalMergeOriginalAndTranslation": "Îmbina originalul și traducerea", "generalToggleTranslationMode": "Comutați modul de traducere", - "generalSwitchOriginalAndTranslation": "Comutați originalul și traducerea", - "generalSwitchOriginalAndTranslationTextBoxes": "Comutați casetele de text original și de traducere", "generalToggleTranslationAndOriginalInPreviews": "Comutați traducerea și originalul în previzualizarea video/audio", "generalChooseLayout": "Alegeți aspectul", - "generalLayoutChooseX": "Aspect {0}", - "generalPlayFirstSelected": "Redați primul selectat", - "generalGoToFirstSelectedLine": "Accesați prima linie selectată", - "generalGoToNextEmptyLine": "Treceți la următoarea linie goală", "generalGoToNextSubtitle": "Treci la subtitrarea următoare", "generalGoToNextSubtitlePlayTranslate": "Accesați subtitrarea următoare (redați traducerea)", "generalGoToNextSubtitleCursorAtEnd": "Accesați subtitrarea următoare (cursor la sfârșit)", "generalGoToPrevSubtitle": "Accesați subtitrarea anterioară", "generalGoToPrevSubtitlePlayTranslate": "Accesați subtitrarea anterioară (redați traducerea)", - "generalGoToStartOfCurrentSubtitle": "Accesați începutul subtitrarii curente", - "generalGoToEndOfCurrentSubtitle": "Mergeți la sfârșitul subtitrarii curente", - "generalGoToPreviousSubtitleAndFocusVideo": "Accesați subtitrarea anterioară și focalizați videoclipul", - "generalGoToNextSubtitleAndFocusVideo": "Accesați subtitrarea următoare și focalizați videoclipul", - "generalGoToPrevSubtitleAndPlay": "Accesați subtitrarea anterioară și jucați", - "generalGoToNextSubtitleAndPlay": "Treci la următoarea subtitrare și joacă", - "generalGoToPreviousSubtitleAndFocusWaveform": "Accesați subtitrarea anterioară și focalizați forma de undă", - "generalGoToNextSubtitleAndFocusWaveform": "Accesați subtitrarea următoare și focalizați forma de undă", - "generalGoToLineNumber": "Accesați numărul rândului", "generalGoToFirstLine": "Mergeți la prima linie", "generalGoToLastLine": "Mergeți la ultima linie", "alsoSetVideoPosition": "Setați și poziția video", "generalGoToVideoPosition": "Mergeți la poziția video", "generalToggleItalic": "Comutați italic", "generalToggleBold": "Comută bold", - "generalToggleBookmarks": "Comutați marcajele", - "generalFocusTextBox": "Focus caseta de text", - "generalToggleBookmarksWithText": "Comutați marcajele cu text", - "generalEditBookmarks": "Editați marcajele", - "fileNew": "Nou", "generalToggleUnderline": "Comutați sublinierea", + "generalToggleBox": "Comutați caseta (EBU STL)", "fileOpen": "Deschide", "fileOpenKeepVideo": "Deschide (păstrează videoclipul)", "fileSave": "Salva", "fileSaveAs": "Salvați ca", - "fileSaveAll": "Salvează totul", "fileSaveOriginal": "Salvați originalul", - "fileSaveOriginalAs": "Salvați originalul ca", - "fileOpenOriginalSubtitle": "Deschideți subtitrarea originală", - "fileCloseOriginalSubtitle": "Închideți subtitrarea originală", - "fileTranslatedSubtitle": "Subtitrare tradusă", "fileCompare": "Comparaţie", "fileStatistics": "Statistici", "fileImportPlainText": "Importă text simplu", - "fileImportBluRaySupForOcr": "Importați Blu-ray SUP pentru OCR", - "fileImportBluRaySupForEdit": "Importați Blu-ray SUP pentru editare", - "fileImportTimeCodes": "Importă coduri de timp", "fileExportEbuStl": "Export EBU STL", "fileExportPac": "Export PAC", - "fileExportEdlClipName": "Exportați numele clipului EDL", - "fileExportPlainText": "Exportați text simplu", - "fileExportCustomTextFormat1": "Exportați formatul de text personalizat 1", - "fileExportCustomTextFormat2": "Exportați formatul de text personalizat 2", - "fileExportCustomTextFormat3": "Exportați formatul de text personalizat 3", "fileExit": "Ieșire", "openSeDataFolder": "Deschideți folderul Editare subtitrări", - "editFind": "Găsi", - "editFindNext": "Găsiți următorul", "editFindPrevious": "Găsiți anterior", - "editReplace": "Înlocui", - "editMultipleReplace": "Înlocuire multiplă", - "editModifySelection": "Modificați selecția", - "listSelectAll": "Selectați toate", - "listSelectFirst": "Selectați mai întâi", - "listSelectLast": "Selectați ultimul", "listInverseSelection": "Selecția inversă", "listDeleteSelection": "Ștergeți selecția", + "deleteSelectionEverywhere": "Ștergeți selecția (oriunde)", "rippleDeleteSelection": "Ripple șterge selecția", - "settings": "Setări", "assigned": "Alocat", "unassigned": "Nealocat", "pressedKeyX": "Tasta apăsată: {0}", @@ -3442,6 +3809,7 @@ "detectKey": "Detectează cheia", "control": "Controla", "alt": "Alt", + "altGr": "AltGr", "win": "Câştiga", "shift": "Schimbare", "controlMac": "⌃", @@ -3452,11 +3820,14 @@ "resetShortcutsDetail": "Doriți să resetați toate comenzile rapide la valorile implicite?", "togglePlayPause": "Comutați redarea/pauză", "toggleLockTimeCodes": "Comutați blocarea codurilor de timp", + "toggleTimeCodeMode": "Comutați modul cod de timp (timp/cadre/numere de cadre)", + "toggleScreenPrivacy": "Comutați confidențialitatea ecranului (ascundeți numele fișierelor, apoi și textele)", + "screenPrivacyFileNamesHidden": "Confidențialitatea ecranului: nume de fișiere ascunse", + "screenPrivacyFileNamesAndTextsHidden": "Confidențialitatea ecranului: nume de fișiere și texte ascunse", + "screenPrivacyOff": "Confidențialitatea ecranului: dezactivată", "duplicateSelectedLines": "Duplicați liniile selectate", "sourceView": "Vizualizare sursă", - "showAlignmentPicker": "Aliniere", "addOrEditBookmark": "Adăugați sau editați marcajul", - "listBookmarks": "Listează marcaje", "toggleBookmark": "Comutați marcajul (linii selectate, fără text)", "toggleForcedSelectedLines": "Comutați forțat (liniile selectate)", "goToNextBookmark": "Accesați următorul marcaj", @@ -3467,12 +3838,12 @@ "waveformSetStartAndSetEndOfPreviousMinusGap": "Setați începutul și sfârșitul intervalului minus anterior", "waveformSetEndAndStartOfNextAfterGap": "Setați sfârșitul și începutul următorului interval plus", "waveformSetEndAndStartOfNextAfterGapAndGoToNext": "Setați sfârșitul și începutul următorului interval plus și treceți la următorul", - "fetchFirstWordFromNextSubtitle": "Preluați primul cuvânt din subtitrarea următoare", "moveLastWordToNextSubtitle": "Mută ​​ultimul cuvânt la subtitrarea următoare", "moveLastWordFromFirstLineDownCurrentSubtitle": "Mută ​​ultimul cuvânt de pe primul rând în jos (subtitrare curentă)", "moveFirstWordFromNextLineUpCurrentSubtitle": "Mută ​​primul cuvânt din rândul următor (subtitrare curentă)", "moveTextFromCursorToNextAndGoToNext": "Mutați textul de după cursor la subtitrarea următoare și treceți la următoarea", "moveTextFromCursorToNextAndGoToNextAndPlay": "Mutați textul de după cursor la subtitrarea următoare, treceți la următoarea și redați", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "Mutați textul de după poziția cursorului în subtitrarea următoare, mergeți la următoarea, redați-o și puneți pauză la sfârșitul ei", "breakAtFirstSpaceFromCursor": "Întrerupeți la primul spațiu de la poziția cursorului", "breakAtFirstSpaceFromCursorAndGoToNext": "Întrerupeți la primul spațiu de la poziția cursorului și treceți la următoarea", "toggleFocusGridAndWaveform": "Comutați focalizarea între grila de subtitrare și forma de undă/spectrogramă", @@ -3484,7 +3855,6 @@ "videoGoToPreviousTimeCode": "Mergeți la codul de timp anterior", "videoGoToNextTimeCode": "Mergeți la codul de timp următor", "goToNextLineAndSetVideoPosition": "Treceți la următoarea subtitrare și setați poziția videoclipului", - "textBoxDeleteSelectionNoClipboard": "Casetă text: ștergeți selecția (fără clipboard)", "textBoxDeleteForward": "Casetă de text: Ștergeți selecția sau caracterul următor (ștergere înainte)", "textBoxCut": "Caseta de text: Tăiați", "textBoxCut2": "Caseta de text: Tăiați (alternativă)", @@ -3503,33 +3873,27 @@ "listViewColumnTextUp": "Coloană, text în sus", "listViewColumnTextDown": "Coloană, text în jos", "autoTranslateSelectedLines": "Traduceți automat liniile selectate...", + "autoTranslateSelectedLinesNoPrompt": "Traduceți automat liniile selectate (fără confirmare, folosind ultimul motor/ultimele limbi)", "setAssaResolution": "Setați rezoluția ASSA (PlayResX/PlayResY)", "setShortcutForX": "Setați comanda rapidă pentru „{0}”", "commandFileNewKeepVideo": "Nou (păstrați videoclipul)", "fileOpenOriginal": "Deschide originalul", "fileCloseOriginal": "Închide originalul", "restoreAutoBackup": "Restaurați backupul automat", - "openContainingFolder": "Deschideți folderul care conține", "importTimeCodes": "Importă coduri de timp", "importSubtitleWithManuallyChosenEncoding": "Importă subtitrare cu codificare aleasă manual", "exportBluRaySup": "Exportați Blu-ray SUP", "exportCustomTextFormat": "Exportați formatul de text personalizat", "exportPlainText": "Exportați text simplu", - "showHistory": "Arată istoricul", "toggleRightToLeft": "Comutați de la dreapta la stânga", "modifySelection": "Modificați selecția", "adjustDurations": "Ajustați duratele", "applyDurationLimits": "Aplicați limite de durată", "batchConvert": "Conversie în lot", - "bridgeGaps": "Goluri de pod", "applyMinGap": "Aplicați intervalul minim", - "fixCommonErrors": "Remediați erorile comune", "makeEmptyTranslationFromCurrentSubtitle": "Faceți o traducere goală din subtitrarea curentă", - "mergeLinesWithSameText": "Îmbina liniile cu același text", - "mergeLinesWithSameTimeCodes": "Îmbina liniile cu aceleași coduri de timp", "splitBreakLongLines": "Împărțiți/reechilibrați linii lungi", "mergeShortLines": "Îmbinați linii scurte", - "removeTextForHearingImpaired": "Eliminați textul pentru persoanele cu deficiențe de auz", "joinSubtitles": "Alăturați-vă subtitrarilor", "splitSubtitle": "Subtitrare împărțită", "spellCheck": "Verificare ortografică", @@ -3551,7 +3915,6 @@ "adjustAllTimes": "Reglați tot timpul", "visualSync": "Sincronizare vizuală", "translateViaCopyPaste": "Traduceți prin copy-paste", - "shortcuts": "Comenzi rapide", "wordLists": "Liste de cuvinte", "chooseUiLanguage": "Alegeți limba UI", "chooseRuleProfile": "Alegeți profilul de regulă", @@ -3562,6 +3925,7 @@ "textBoxItalic": "Caseta de text italic", "textBoxBold": "Casetă de text aldin", "textBoxUnderline": "Casetă de text subliniat", + "textBoxBox": "Caseta de text - casetă (EBU STL)", "resetWaveformZoomAndSpeed": "Resetați zoom-ul formei de undă și viteza de redare (rata de redare)", "togglePlaybackSpeed": "Comutați viteza de redare (rata de redare)", "playbackSpeedSlower": "Viteza de redare mai mică (rata de redare)", @@ -3571,22 +3935,28 @@ "seekSilence": "Caută tăcerea", "waveformGuessStart": "Ghiciți timpul de început din forma de undă", "waveformGuessEnd": "Ghiciți timpul de sfârșit din forma de undă", + "waveformGuessStartAndEnd": "Ghiciți timpii de început și de sfârșit din forma de undă", "setVideoPositionCurrentSubtitleStart": "Setați poziția video la începutul liniei curente", "goToSubtitlePositionAndPause": "Mergeți la poziția subtitrării și puneți pauză", "setVideoPositionCurrentSubtitleEnd": "Setați poziția video la capătul curent al liniei", "toggleAudioTracks": "Comutați melodiile audio", - "listErrors": "Enumeră erorile", "goToNextError": "GoTo următoarea eroare", "goToPreviousError": "Eroare anterioară GoTo", "addNameToNameList": "Adăugați nume la lista de nume", "findDoubleWords": "Găsiți cuvinte duble", "findDoubleLines": "Găsiți linii duble", "colorX": "Culoare {0}", - "removeColor": "Îndepărtați culoarea", "surroundWith": "Înconjurați cu...", "surroundWithXY": "Înconjurați cu {0}/{1}", - "repeatLine": "Repetați linia", "surroundWithNumberX": "Încadrați cu #{0}", + "surroundWithBehavior": "Comportament", + "surroundWithBehaviorToggle": "Comutare (adăugați sau eliminați dacă există)", + "surroundWithBehaviorAdd": "Adăugare (de fiecare dată)", + "surroundWithBehaviorRemove": "Eliminare (toate)", + "surroundWithBehaviorRemoveOnce": "Eliminare (câte una de fiecare dată)", + "surroundWithWorksOn": "Acționează asupra", + "surroundWithScopeSelectionOrText": "Selecției, altfel întregului text", + "surroundWithScopeEachLine": "Fiecărei linii", "searchVia": "Căutați prin", "searchViaX": "Căutați prin {0}", "searchViaNumberX": "Căutați prin #{0}", @@ -3611,6 +3981,11 @@ "copySubtitlePathToClipboard": "Copiați calea subtitrarilor în clipboard", "copySubtitleOriginalPathToClipboard": "Copiați calea de subtitrare a originalului în clipboard", "focusTextBox": "Focus caseta de text", + "focusSubtitleListView": "Focalizați lista de subtitrări", + "focusWaveform": "Focalizați forma de undă", + "focusOriginalTextBox": "Focalizați caseta de text originală", + "textBoxGoToStart": "Caseta de text, mergeți la început", + "textBoxGoToEnd": "Caseta de text, mergeți la sfârșit", "sortByStartTime": "Sortați după ora „Afișați”.", "sortByEndTime": "Sortați după ora „Ascunde”.", "sortByDuration": "Sortați după durată", @@ -3633,7 +4008,6 @@ "assaStyles": "Stiluri ASSA", "assaProperties": "Proprietăți ASSA", "assaAttachments": "Atasamente ASSA", - "assaVideoColorPicker": "Selector de culori ASSA Video", "recalculateDurationSelectedLines": "Recalculați durata (linii selectate)", "toggleWaveformAndSpectrogramHeight": "Comutați forma de undă/înălțimea împărțită a spectrogramei", "toggleSpectrogramStyle": "Comutați stilul spectrogramei", @@ -3658,9 +4032,9 @@ "selectionToSentenceCase": "Casetă de text: Selecția în Scriere de propoziție", "selectionToggleCasing": "Casetă de text: Comutați scrierea (MAJUSCULE -> minuscule -> Fiecare Cuvânt Cu Majusculă)", "googleIt": "Căutați pe Google (textul selectat)", - "setActorXY": "Setați actorul {0}: {1}", + "setActorX": "Setați actorul: {0}", "setNewActor": "Setați un nou actor...", - "setActorSlotXTitle": "Slot actor {0}", + "setStyleX": "Setați stilul: {0}", "toggleDialogDashes": "Comutați liniuțele de dialog", "mergeWithLineBeforeAsDialog": "Îmbinați cu linia dinainte ca dialog", "mergeWithLineAfterAsDialog": "Îmbinați cu linia de după ca dialog", @@ -3671,13 +4045,27 @@ "moveStartOneFrameBackKeepGapPrev": "Mutați începutul cu un cadru înapoi (păstrați decalajul față de precedentul dacă este aproape)", "moveStartOneFrameForwardKeepGapPrev": "Mutați începutul cu un cadru înainte (păstrați decalajul față de precedentul dacă este aproape)", "moveEndOneFrameBackKeepGapNext": "Mutați sfârșitul cu un cadru înapoi (păstrați decalajul față de următorul dacă este aproape)", - "moveEndOneFrameForwardKeepGapNext": "Mutați sfârșitul cu un cadru înainte (păstrați decalajul față de următorul dacă este aproape)" + "moveEndOneFrameForwardKeepGapNext": "Mutați sfârșitul cu un cadru înainte (păstrați decalajul față de următorul dacă este aproape)", + "moveStartXMsBack": "Mutați începutul cu X ms înapoi (X setat în Setări, și în Sincronizare vizuală)", + "moveStartXMsForward": "Mutați începutul cu X ms înainte (X setat în Setări, și în Sincronizare vizuală)", + "moveEndXMsBack": "Mutați sfârșitul cu X ms înapoi (X setat în Setări, și în Sincronizare vizuală)", + "moveEndXMsForward": "Mutați sfârșitul cu X ms înainte (X setat în Setări, și în Sincronizare vizuală)", + "moveSelectedLinesXMsBack": "Mutați liniile selectate cu X ms înapoi (X setat în Setări)", + "moveSelectedLinesXMsForward": "Mutați liniile selectate cu X ms înainte (X setat în Setări)", + "moveSelectedLinesAndForwardXMsBack": "Mutați liniile selectate și toate cele următoare cu X ms înapoi (X setat în Setări)", + "moveSelectedLinesAndForwardXMsForward": "Mutați liniile selectate și toate cele următoare cu X ms înainte (X setat în Setări)", + "moveAllLinesXMsBack": "Mutați toate liniile cu X ms înapoi (X setat în Setări)", + "moveAllLinesXMsForward": "Mutați toate liniile cu X ms înainte (X setat în Setări)", + "moveSelectedLinesCustomMsBack": "Mutați liniile selectate, milisecunde personalizate ({0:#,###,##0}) înapoi, {1}", + "moveSelectedLinesCustomMsForward": "Mutați liniile selectate, milisecunde personalizate ({0:#,###,##0}) înainte, {1}", + "moveSelectedLinesAndForwardCustomMsBack": "Mutați liniile selectate și toate cele următoare, milisecunde personalizate ({0:#,###,##0}) înapoi, {1}", + "moveSelectedLinesAndForwardCustomMsForward": "Mutați liniile selectate și toate cele următoare, milisecunde personalizate ({0:#,###,##0}) înainte, {1}", + "moveAllLinesCustomMsBack": "Mutați toate liniile, milisecunde personalizate ({0:#,###,##0}) înapoi, {1}", + "moveAllLinesCustomMsForward": "Mutați toate liniile, milisecunde personalizate ({0:#,###,##0}) înainte, {1}" }, "wordLists": { "title": "Liste de cuvinte", "addName": "Adăugați numele", - "addWord": "Adaugă cuvânt", - "addPair": "Adăugați pereche", "nameAndIgnoreList": "Listă de nume/ignore", "userWords": "Lista de cuvinte de utilizator", "ocrFixList": "Lista de corecții OCR", @@ -3730,6 +4118,8 @@ "nOcrDatabase": "baza de date nOCR", "drawMode": "Mod desen:", "addNewCharcter": "Adăugați un caracter nou", + "addNOcrCharacterTitle": "Adăugați caracter nOCR pentru linia {0}, caracterul {1} din {2} folosind baza de date „{3}”", + "addBinaryOcrCharacterTitle": "Adăugați caracter OCR binar pentru linia {0}, caracterul {1} din {2} folosind baza de date „{3}”", "lineIndexX": "Linia {0}", "inspectNOcrAdditions": "Inspectați noile adăugări nOCR", "ocrSelectedLines": "OCR linii selectate", @@ -3752,7 +4142,7 @@ "changeWordFromTo": "Schimbați cuvântul de la/la", "clearBackground": "Fundal clar", "clearForeground": "Prim-plan clar", - "nOcrDrawHelp": "Sfaturi pentru desen\r\n", + "nOcrDrawHelp": "Sfaturi pentru desen\n────────────────────\n• Țineți apăsat Ctrl pentru a continua linia\n• Ctrl+z=anulare, Ctrl+y=refacere", "editWholeText": "Editați textul întreg", "editWordOnly": "Editați numai cuvântul", "imagePreProcessing": "Preprocesarea imaginii", @@ -3778,6 +4168,8 @@ "fillSelectedLinesWithClipboard": "Completați liniile selectate cu textul din clipboard", "saveBlankTextTitle": "Salvați text gol?", "saveBlankTextPrompt": "Salvați text gol pentru imagine?", + "drawnLinesDoNotMatchTitle": "Liniile nu corespund imaginii", + "drawnLinesDoNotMatchPrompt": "Unele dintre liniile desenate nu corespund imaginii (liniile verzi trebuie să fie pe caracter, cele roșii în afara lui), așa că acest caracter nu va fi recunoscut.\n\nSalvați totuși?", "yesAndNeverAskAgain": "Da și nu mai întreba niciodată", "importTextFromSubtitleDotDotDot": "Importați text din subtitrare...", "importTextFromSubtitleOverwritePrompt": "Unele linii au deja text OCR. Suprascrieți textul existent?", @@ -3803,7 +4195,6 @@ "vobSubColorsTitle": "Culori VobSub/DVD", "vobSubColorsHeader": "Personalizați cele patru culori VobSub", "vobSubColorsDescription": "Subtitrările VobSub/DVD folosesc patru culori indexate: fundal, model, accent 1 și accent 2. Alegeți fiecare culoare de mai jos pentru a suprascrie paleta încorporată - util când culorile originale dau un contrast OCR slab.", - "vobSubColorBackground": "Fundal", "vobSubColorPattern": "Model", "vobSubColorEmphasis1": "Accent 1", "vobSubColorEmphasis2": "Accent 2", @@ -3837,9 +4228,26 @@ "crispEmbedSettingsTitle": "Setări CrispEmbed", "crispEmbedDescription": "Motor OCR local cu mai multe modele de bază - descărcați aici motorul și modelele.", "trainNOcrDatabase": "Antrenați baza de date nOCR...", + "optimizeNOcrDatabase": "Optimizați baza de date nOCR...", + "optimizeNOcrDatabaseQuestionXY": "Eliminați liniile care nu deosebesc caracterele de caracterele similare din baza de date nOCR „{0}”?\n\nAstfel baza de date devine mai mică și OCR-ul mai rapid, de obicei cu mai puține erori. Durează până la un minut.\n\nO copie de rezervă este salvată ca „{1}”.", + "optimizingNOcrDatabaseXY": "Se optimizează baza de date nOCR... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "Baza de date nOCR „{0}” optimizată: {1:#,##0} -> {2:#,##0} linii.", "startTraining": "Începeți antrenarea", "abortTraining": "Întrerupeți antrenarea", "trainingOptions": "Opțiuni de antrenare", + "trainNOcrSubtitle": "Randează caractere cu fonturile instalate și învață nOCR formele lor. Alegeți fonturile folosite de subtitrările dvs.", + "xFontsSelected": "{0:#,##0} selectate", + "subtitleFonts": "Fonturi de subtitrare", + "emptyDatabase": "Bază de date goală", + "startFromDatabase": "Porniți de la", + "startFromDatabaseHint": "Adăugați caracterele antrenate într-o copie a unei baze de date existente (recomandat) sau porniți de la una goală", + "fontSizes": "Dimensiuni de font", + "fontSizesHint": "Dimensiunile fontului în pixeli pentru randare, separate prin virgulă, de ex. „30, 40”", + "numberOfLineSegmentsHint": "Linii verificate per caracter - mai multe înseamnă mai strict, dar mai lent", + "enterDatabaseName": "Introduceți un nume pentru baza de date", + "trainingFontXSizeYCharacterZ": "Se antrenează „{0}” la {1} px: {2}", + "xLearned": "{0:#,##0} învățate", + "xSkipped": "{0:#,##0} omise", "charactersToTrain": "Caractere de antrenat", "letterCombinationsToTrain": "Combinații de litere care ar putea fi împărțite într-o singură imagine", "importCharactersFromSubtitleFile": "Importați caractere dintr-un fișier de subtitrare...", @@ -3866,6 +4274,8 @@ "drawZoomOut": "Micșorați (Ctrl+-)", "drawResetView": "Resetați vizualizarea (Ctrl+0)", "drawToggleGrid": "Comutați grila (Ctrl+G)", + "drawTogglePreview": "Comutați previzualizarea (F9)", + "drawPreviewFailed": "Previzualizarea a eșuat - este necesar ffmpeg cu libass (filtrul subtitles)", "drawCopyToClipboard": "Copiați în Clipboard (Ctrl+C)", "drawShapes": "Forme", "drawSelectedPoint": "Punctul selectat", @@ -3873,16 +4283,86 @@ "drawSelectedLayer": "Stratul selectat", "drawToolX": "Instrument: {0}", "drawHelpText": "Faceți clic pentru a adăuga puncte • Enter/F8 pentru a închide forma • Shift+Tras pentru a deplasa • Ctrl+Scroll pentru a mări", + "drawMoveToLayer": "Mutați pe stratul", + "drawFlipHorizontal": "Răsturnați orizontal", + "drawFlipVertical": "Răsturnați vertical", + "drawHideShape": "Ascundeți forma", + "drawShowShape": "Afișați forma", + "drawHideLayer": "Ascundeți stratul", + "drawShowLayer": "Afișați stratul", + "drawDeleteLayer": "Ștergeți stratul", + "drawDeletePoint": "Ștergeți punctul", + "drawCancelDrawing": "Anulați desenarea", + "drawLayerX": "Stratul {0}", + "drawImportSvg": "Importați imagine SVG...", + "drawRotateClockwise": "Rotiți 90° în sensul acelor de ceasornic", + "drawConvertToCurve": "Convertiți segmentul în curbă", + "drawBackground": "Fundal", + "drawPosition": "Poziţie", + "drawZoom": "Zoom", + "drawShapeTool": "Instrument formă", + "drawColorPickerTool": "Alegeți culoarea dintr-o formă sau din fundal", + "drawShapeLibrary": "Bibliotecă de forme", + "drawShapeLibraryHint": "Trageți pe pânză pentru a plasa o formă sau faceți clic pentru dimensiunea implicită. Shift păstrează proporțiile.", + "drawAddToLibrary": "Adăugați în biblioteca de forme...", + "drawRemoveFromLibrary": "Eliminați din biblioteca de forme", + "drawShapeName": "Numele formei", + "drawCategorySpeechBubbles": "Baloane de dialog", + "drawCategoryArrows": "Săgeți", + "drawCategoryBasicShapes": "Forme de bază", + "drawCategorySymbols": "Simboluri", + "drawCategoryMyShapes": "Formele mele", + "drawShapeSpeechBubble": "Balon de dialog", + "drawShapeSpeechBubbleRight": "Balon de dialog, coadă la dreapta", + "drawShapeSpeechBubbleUp": "Balon de dialog, coadă în sus", + "drawShapeOvalBubble": "Balon de dialog oval", + "drawShapeBoxBubble": "Balon de dialog dreptunghiular", + "drawShapeThoughtBubble": "Balon de gânduri", + "drawShapeShoutBubble": "Balon de strigăt", + "drawShapeCaptionBox": "Casetă de text", + "drawShapeArrow": "Săgeată", + "drawShapeDoubleArrow": "Săgeată dublă", + "drawShapeChevron": "Chevron", + "drawShapeCurvedArrow": "Săgeată curbată", + "drawShapeRoundedRectangle": "Dreptunghi rotunjit", + "drawShapeTriangle": "Triunghi", + "drawShapeDiamond": "Romb", + "drawShapePentagon": "Pentagon", + "drawShapeHexagon": "Hexagon", + "drawShapeOctagon": "Octogon", + "drawShapeStar": "Stea", + "drawShapeRing": "Inel", + "drawShapePlus": "Plus", + "drawShapeBanner": "Banner", + "drawShapeHeart": "Inimă", + "drawShapeCheck": "Bifă", + "drawShapeMusicNote": "Notă muzicală", + "drawShapeMusicNotes": "Note muzicale", + "drawShapeLightning": "Fulger", + "drawShapeCloud": "Nor", + "drawShapeMoon": "Lună", + "drawShapeBadge": "Insignă", + "drawSize": "Dimensiune", + "drawLayer": "Strat", + "drawBackgroundVideoFrame": "Cadru video (poziția curentă)", + "drawBackgroundVideoFrameAt": "Cadru video la...", + "drawBackgroundImage": "Fișier imagine...", + "drawBackgroundNone": "Fără fundal", + "drawBackgroundStretch": "Întindeți imaginea pe pânză", + "drawBackgroundOpacity": "Opacitatea fundalului", + "drawBackgroundVideoFrameFailed": "Nu s-a putut obține un cadru video la {0}.", + "drawImages": "Imagini", + "drawConvertToLine": "Convertiți segmentul în linie", + "drawConvertShapeToCurves": "Convertiți toate liniile în curbe", + "drawConvertShapeToLines": "Convertiți toate curbele în linii", + "drawRotateCounterClockwise": "Rotiți 90° în sens invers acelor de ceasornic", + "drawSvgImages": "Imagini SVG", + "drawSvgNoShapes": "Nu s-au găsit forme umplute sau contururi în fișierul SVG.", "progressBarTitle": "bara de progres ASSA", "progressBarSettings": "Bara de progres", - "progressBarPosition": "Poziţie", - "progressBarBottom": "Fund", - "progressBarTop": "Top", "mouseOverColor": "Culoare la trecerea mouse-ului", "clickedColor": "Culoare la clic", "progressBarForeColor": "Culoarea primului plan", - "progressBarBackColor": "Culoare de fundal", - "progressBarStyle": "Stil", "progressBarSquareCorners": "Colțuri pătrate", "progressBarRoundedCorners": "Colțuri rotunjite", "progressBarChapters": "Capitole", @@ -3891,8 +4371,6 @@ "progressBarXAdjustment": "Ajustare X", "progressBarYAdjustment": "Ajustare Y", "progressBarTextAlignment": "Alinierea textului", - "progressBarTakePosFromVideo": "Luați poziția din videoclip", - "progressBarPreview": "Previzualizare", "fontCollectorTitle": "Colector de fonturi", "fontCollectorUsedIn": "Folosit în", "fontCollectorFontFiles": "Fișier(e) de font", @@ -3939,9 +4417,7 @@ "resolutionResamplerVideoDiffers": "Rezoluția subtitrării ({0}x{1}) diferă de rezoluția videoclipului ({2}x{3}).\nModificați subtitrarea pentru a se potrivi cu videoclipul?", "resolutionResamplerAskOnVideoOpen": "Întrebați când se deschide un videoclip cu o rezoluție diferită", "backgroundBoxGenerator": "Generați caseta de fundal", - "backgroundBoxPadding": "Captuseala", "backgroundBoxFillWidth": "Lățimea umplerii", - "backgroundBoxBoxColor": "Culoarea casetei", "backgroundBoxRadius": "Rază", "backgroundBoxCircle": "Cerc", "backgroundBoxSpikes": "Spikes", @@ -3953,12 +4429,9 @@ "backgroundBoxTornPaperDouble": "Hârtie ruptă (sus și jos)", "backgroundBoxStarburst": "Starburst", "backgroundBoxScroll": "Pergament / Pergament", - "stylesTitle": "Stiluri avansate de substație Alpha", "stylesInFile": "Stiluri în fișier", "stylesSaved": "Stiluri salvate", - "category": "Categorie", "allCategories": "[Toate]", - "defaultCategory": "Implicit", "newCategory": "Categorie nouă...", "renameCategory": "Redenumiți categoria...", "deleteCategory": "Ștergeți categoria", @@ -3978,13 +4451,26 @@ "graphics": "Grafică", "copyToStorageStyles": "Copiați în stiluri de stocare", "copyToFileStyles": "Copiați în stiluri de fișiere", + "styleXAlreadyExistsInStorage": "Un stil numit „{0}” există deja în depozit.\n\nÎl suprascrieți sau le păstrați pe amândouă (copia primește un nume nou)?", + "styleXAlreadyExistsInFile": "Un stil numit „{0}” există deja în fișier.\n\nÎl suprascrieți sau le păstrați pe amândouă (copia primește un nume nou)?", + "styleNameCannotBeEmpty": "Numele stilului nu poate fi gol.", + "styleNameXIsUsedMoreThanOnce": "Numele de stil „{0}” este folosit de mai multe stiluri din fișier.", + "overwrite": "Suprascrieți", + "keepBoth": "Păstrați-le pe amândouă", + "doThisForAllConflictingStyles": "Faceți la fel pentru toate stilurile în conflict", "setStyleAsDefault": "Setați stilul ca implicit", "takeUsagesFromDotDotDot": "Luați utilizări de la...", "replaceStyleWithDotDotDot": "Înlocuiți stilul cu...", "noAttachmentsFound": "Nu s-au găsit atașamente în fișierul ASSA selectat.", "deleteStyleQuestion": "Ștergeți stilul?", "deleteStylesQuestion": "Ștergeți stilurile?", + "deleteXStylesQuestion": "Doriți să ștergeți {0} stiluri?", + "deleteXStylesFromStorageQuestion": "Doriți să ștergeți {0} stiluri din depozit?", + "deleteStyleXFromStorageQuestion": "Doriți să ștergeți stilul „{0}” din depozit?", + "deleteStyleXFromFileQuestion": "Doriți să ștergeți stilul „{0}” din fișierul curent?", "openStyleImportFile": "Deschideți fișierul de subtitrare din care să importați stiluri", + "styleImportFiles": "Fișiere de stil (.ass, .sty, categorii Subtitle Edit 4 .template)", + "ssaStyleImportFiles": "Fișiere de stil (.ssa, .ass, .sty)", "primary": "Primar", "secondary": "Secundar", "applyOverrideTags": "Aplicați etichete de înlocuire", @@ -3999,7 +4485,6 @@ "spaceIncrease": "Creșterea spațiului", "popIn": "Intră", "spinIn": "Învârtiți-vă", - "playCurrent": "Redați curent", "setPosition": "Setați poziția", "rotation": "Rotație", "scaleX": "Scalare X", @@ -4043,10 +4528,8 @@ "advancedEffectOldMovieDescription": "Simulează un proiector de film vintage de 35 mm cu zgomot, vignetă și zgârieturi", "advancedEffectNeonBurst": "Neon izbucni", "advancedEffectNeonBurstDescription": "Subtitrări în stil „Short” pline de energie, cu strălucire de neon și animație „pop” extinsă", - "advancedEffectSettings": "Setări", "advancedEffectSnowFlakeCount": "Număr de fulgi", "advancedEffectStarfieldStarCount": "Număr de stele", - "advancedEffectStarfieldSpeed": "Viteză", "advancedEffectGlitch": "Glitch", "advancedEffectGlitchDescription": "Defecțiune digitală cu aberații cromatice, fulgerări albe și suprapuneri de distorsiuni", "advancedEffectBounceIn": "Sări înăuntru", @@ -4055,8 +4538,6 @@ "advancedEffectFirefliesDescription": "Puncte calde strălucitoare galben-chihlimbar care plutesc organic pe ecran cu strălucire pulsatorie", "advancedEffectMatrix": "Matrice", "advancedEffectMatrixDescription": "Coloane de caractere verzi care se încadrează cu text subtitrat, construind literă cu literă din ploaie", - "advancedEffectAudioBars": "Bare audio (forma de undă)", - "advancedEffectAudioBarsDescription": "Bare de egalizare animate conduse de forma de undă audio — barele defilează spre stânga ca formă de undă și pulsează cu sunetul", "advancedEffectAudioPulse": "Puls de text audio", "advancedEffectAudioPulseDescription": "Textul subtitrării strălucește și bate cu volumul audio - secțiunile silențioase arată text normal, vârfurile puternice adaugă un halou colorat și o ușoară mărire", "advancedEffectConfetti": "Confetti au izbucnit", @@ -4070,7 +4551,6 @@ "advancedEffectFancyKaraokeGlow": "Cuvânt activ strălucire", "advancedEffectFancyKaraokeActiveColor": "Culoare activă", "advancedEffectFancyKaraokeInactiveColor": "Culoare inactivă", - "advancedEffectFancyKaraokeInactiveOpacity": "Opacitate inactivă (0-255)", "advancedEffectWordSpacingPixels": "Spațiere (pixeli)", "advancedEffectSlowZoomOut": "Mişcare lentă", "advancedEffectSlowZoomOutDescription": "Textul începe puțin mai mare și se micșorează ușor la dimensiunea normală pe durata subtitrarilor", @@ -4081,12 +4561,11 @@ "advancedEffectFadeOut": "Tranziție - fade-out", "advancedEffectFadeOutDescription": "Un efect de dispariție pe linie în care ecranul se termină negru.", "advancedEffectTvClose": "Tranziție - TV aproape", - "advancedEffectTvCloseDescription": "Barele negre cresc spre interior de sus și de jos, în timp ce mijlocul devine alb (sus negru / mijloc alb / jos negru). ", + "advancedEffectTvCloseDescription": "Barele negre cresc spre interior de sus și de jos, în timp ce mijlocul devine alb (sus negru / mijloc alb / jos negru).", "advancedEffectSlideInLeft": "Glisați de la stânga", "advancedEffectSlideInLeftDescription": "Textul glisează din stânga în afara ecranului, se menține, apoi iese înapoi la stânga", "advancedEffectSlideInRight": "Glisați din dreapta", "advancedEffectSlideInRightDescription": "Textul alunecă din afara ecranului la dreapta, ține, apoi iese înapoi la dreapta", - "advancedEffectFadeInOut": "Fade in/out", "advancedEffectFadeInOutDescription": "Textul apare la început și dispare la sfârșitul fiecărui subtitrare", "advancedEffectWordFlip3D": "Rotire 3D a cuvintelor", "advancedEffectWordFlip3DDescription": "Fiecare cuvânt apare cu o rotire 3D și un salt elastic pe măsură ce este rostit — stil modern de subtitrare „Shorts”", @@ -4118,7 +4597,6 @@ "noPluginsInstalled": "Niciun plugin instalat", "getPluginsOnline": "Obțineți pluginuri online...", "getPluginsTitle": "Obțineți pluginuri", - "enabled": "Activat", "disabled": "Dezactivat", "notSupportedOnThisOs": "Neacceptat pe acest sistem de operare", "removePluginXConfirm": "Eliminați pluginul „{0}”? Aceasta șterge folderul pluginului:{1}", @@ -4135,17 +4613,19 @@ "downloadingXPercent": "Se descarcă {0}%...", "pluginXInstalled": "„{0}” instalat.", "couldNotInstallPluginX": "Nu s-a putut instala „{0}”: {1}", - "notInstalled": "Neinstalat", "install": "Instalați", "reinstall": "Reinstalați", - "update": "Actualizați", "installedX": "Instalat ({0})", "updateAvailableXToY": "Actualizare disponibilă ({0} → {1})", "applyPluginToWhichLinesX": "Aplicați „{0}” la:", "applyToSelectedLinesX": "Linii selectate ({0})", "applyToAllLinesX": "Toate liniile ({0})", "updateAllXAvailable": "Actualizați toate ({0})", - "updatingXOfY": "Se actualizează {0}/{1}..." + "updatingXOfY": "Se actualizează {0}/{1}...", + "doNotAskAgain": "Nu mai întrebați (modificați în Gestionați pluginurile)", + "applyPluginsTo": "Aplicați pluginurile pe", + "askEachTime": "Întrebați de fiecare dată", + "allLines": "Toate liniile" }, "errorList": { "title": "Listați erorile", diff --git a/src/ui/Assets/Languages/Russian.json b/src/ui/Assets/Languages/Russian.json index 4806c6849ae..bac4989c0b3 100644 --- a/src/ui/Assets/Languages/Russian.json +++ b/src/ui/Assets/Languages/Russian.json @@ -1,20 +1,38 @@ { "title": "Subtitle Edit", - "version": "v5.2.0-rc7", + "version": "v5.3.0", "translatedBy": "", "cultureName": "ru-RU", "general": { "abort": "Отмена", "actor": "Актер", "actors": "Актеры", + "setActorDotDotDot": "Задать актера...", + "actorPickerTitle": "Задать актера", + "actorPickerFilterHint": "Начните вводить для фильтрации или введите имя нового актера", + "actorPickerKeysHint": "Нажмите цифру или Enter, чтобы назначить актера. Alt+Вверх/Вниз меняет порядок, Delete удаляет актера.", + "actorPickerNewActorX": "Новый актер \"{0}\"", + "actorPickerLinesSelectedX": "Выбрано строк: {0}", + "setStyleDotDotDot": "Задать стиль...", + "stylePickerTitle": "Задать стиль", + "stylePickerFilterHint": "Начните вводить для фильтрации или введите имя нового стиля", + "stylePickerKeysHint": "Нажмите цифру (1-9, 0), чтобы назначить стиль всем выбранным строкам.", + "stylePickerNewStyleX": "Новый стиль \"{0}\"", + "stylePickerNewStyleInfo": "Нажмите Enter, чтобы добавить этот стиль с настройками по умолчанию и назначить его выбранным строкам. Шрифт, цвета и положение можно изменить позже через \"Управление стилями...\".", + "stylePickerCurrentStyleX": "Текущий стиль: {0}", + "stylePickerLinesUsingStyleX": "Строк с этим стилем: {0}", + "stylePickerMarginsXYZ": "Слева {0}, справа {1}, по вертикали {2}", + "stylePickerSetStyle": "_Задать стиль", + "stylePickerManageStyles": "Управление стилями...", + "stylePickerManageStylesHint": "Закрыть это окно и открыть управление стилями, чтобы изменить шрифты, цвета, положение и другое", "add": "Добавить", - "addDotDotDot": "Добавлять...", + "addDotDotDot": "Добавить...", "addToNamesListCaseSensitive": "Добавить в список имен (с учетом регистра)", "addToUserDictionary": "Добавить в пользовательский словарь", "addVideoFiles": "Добавить видеофайлы...", "adjustAlpha": "Настроить альфа-канал (прозрачность)", - "adjustDisplayDuration": "Настроить Длительность отображения", - "adjustment": "Корректирование", + "adjustDisplayDuration": "Настроить длительность показа", + "adjustment": "Корректировка", "advancedSettings": "Расширенные настройки", "after": "После", "alignment": "Выравнивание", @@ -24,30 +42,30 @@ "allFiles": "Все файлы", "alphaAdjustment": "Альфа-коррекция", "alphaThreshold": "Альфа-порог", - "apiKey": "API key", + "apiKey": "API-ключ", "formality": "Формальность", - "apiSecret": "Secret", + "apiSecret": "Секретный ключ", "appearance": "Оформление", "append": "Добавить", "apply": "Применить", "applyTo": "Применить к", - "ascending": "Восходящий", + "ascending": "По возрастанию", "assistedMove": "Ассистированное перемещение", "assistedMoveChooseMove": "Выберите нужный вариант или нажмите на его номер, чтобы переместить слова", "assistedMoveDotDotDot": "Ассистированное перемещение...", "assistedMoveNoSuggestions": "Нет подсказок для перемещения — предложение не переходит в предыдущий/следующий субтитр", - "assistedSplitNoSuggestions": "Для этой линии нет предложений по разделению", + "assistedSplitNoSuggestions": "Для этой строки нет вариантов разделения", "assistedSplit": "Ассистированное разделение", "assistedSplitChooseSplitPoint": "Выберите нужный вариант или нажмите на его номер, чтобы разделить строку", "assistedSplitDotDotDot": "Ассистированное разделение...", - "descending": "Нисходящий", - "attachDotDotDot": "Прикреплять...", + "descending": "По убыванию", + "attachDotDotDot": "Прикрепить...", "audioFileSaved": "Аудиофайл сохранен", "audioFiles": "Аудиофайлы", "audioVisualizer": "Аудиовизуализатор", "auto": "Авто", "autoBreak": "Автоматический перенос текста", - "autoBalanceLines": "Строки автоматической балансировки", + "autoBalanceLines": "Автобалансировка строк", "autoContinue": "Автоматическое продолжение", "autoTranslate": "Автоматический перевод", "autodetect": "Автоматическое определение", @@ -71,29 +89,29 @@ "bookmarkEditForSelectedLinesX": "Изменить закладку для {0} выбранных строк", "bookmarksList": "Список закладок", "borderStyle": "Стиль границы", - "bottomCenter": "Нижний центр", - "bottomLeft": "Нижний левый угол", - "bottomRight": "Нижний правый угол", - "bottom": "Нижний", - "box": "Коробка", - "boxColor": "Цвет коробки", - "boxCornerRadius": "Радиус скругления углов коробки", - "boxPadding": "Отступы коробки", - "boxPerLine": "Коробка на строку", - "bridgeGaps": "Пробелы в мостах", - "bytes": "байты", + "bottomCenter": "Снизу по центру", + "bottomLeft": "Снизу слева", + "bottomRight": "Снизу справа", + "bottom": "Снизу", + "box": "Подложка", + "boxColor": "Цвет подложки", + "boxCornerRadius": "Радиус скругления подложки", + "boxPadding": "Отступы подложки", + "boxPerLine": "Подложка для каждой строки", + "bridgeGaps": "Заполнить промежутки", + "bytes": "байт", "cancel": "Отмена", "cancelled": "Отменено", - "caseInsensitive": "Регистр не имеет значения", + "caseInsensitive": "Без учета регистра", "caseSensitive": "С учетом регистра", - "casing": "Корпус", + "casing": "Регистр", "category": "Категория", "center": "Центр", - "centerHorizontally": "Центрируй по горизонтали", - "centerVertically": "Центрируй по вертикали", + "centerHorizontally": "Центрировать по горизонтали", + "centerVertically": "Центрировать по вертикали", "change": "Изменить", "changeAll": "Изменить все", - "changeCasing": "Изменить корпус", + "changeCasing": "Изменить регистр", "changeFormatting": "Изменить форматирование", "changeFrameRate": "Изменить частоту кадров", "changeOnce": "Изменить один раз", @@ -105,10 +123,10 @@ "chooseImageFiles": "Выбрать файлы изображений", "class": "Класс", "classic": "Классический", - "clear": "Прозрачный", + "clear": "Очистить", "close": "Закрыть", "codec": "Кодек", - "collapse": "Крах", + "collapse": "Свернуть", "color": "Цвет", "colorBlack": "Черный", "colorBlue": "Синий", @@ -116,25 +134,25 @@ "colorDotDotDot": "Цвет...", "colorGray": "Серый", "colorGreen": "Зеленый", - "colorHalfBlue": "Полусиний", - "colorHalfCyan": "Полуголубой", - "colorHalfGreen": "Половина зелёного", - "colorHalfMagenta": "Полупурпурный", - "colorHalfRed": "Половина красная", - "colorHalfYellow": "Половина жёлтого", + "colorHalfBlue": "Темно-синий", + "colorHalfCyan": "Темно-голубой", + "colorHalfGreen": "Темно-зеленый", + "colorHalfMagenta": "Темно-пурпурный", + "colorHalfRed": "Темно-красный", + "colorHalfYellow": "Темно-желтый", "colorMagenta": "Пурпурный", "colorRed": "Красный", "colorWhite": "Белый", "colorYellow": "Желтый", "column": "Столбец", - "columns": "Колонки", - "columnsDotDotDot": "Колонки...", + "columns": "Столбцы", + "columnsDotDotDot": "Столбцы...", "consoleLog": "Журнал консоли", - "contentAlignment": "Выравнить контент", + "contentAlignment": "Выравнивание содержимого", "continueFindTitle": "Продолжить поиск?", "searchItemNotFoundContinueFromTop": "Поисковый запрос не найден.\nХотите начать поиск с начала документа и выполнить его еще раз?", "searchItemNotFoundContinueFromBottom": "Поисковый запрос не найден.\nХотите начать поиск с конца документа и выполнить его еще раз?", - "conversionCancelledByUser": "Конверсия отменена пользователем", + "conversionCancelledByUser": "Преобразование отменено пользователем", "convert": "Преобразовать", "converted": "Преобразовано", "convertingXofYDotDoDot": "Преобразование {0:#,###,##0}/{1:#,###,##0}...", @@ -145,9 +163,9 @@ "copyTextToClipboard": "Скопировать текст в буфер обмена", "couldNotSaveFileXErrorY": "Не удалось сохранить файл \"{0}\". Ошибка: {1}", "couldNotOpenFileXErrorY": "Не удалось открыть файл \"{0}\". Ошибка: {1}", - "count": "Считать", + "count": "Количество", "cps": "Символов/сек", - "cudaRuntime": "среда выполнения CUDA", + "cudaRuntime": "Среда выполнения CUDA", "currentVideoPosition": "Текущее положение видео", "custom": "Пользовательский", "cut": "Вырезать", @@ -155,7 +173,7 @@ "dateAndTime": "Дата и время", "default": "По умолчанию", "delete": "Удалить", - "deleteAtPosition": "Удалить субтитры в месте расположения видео", + "deleteAtPosition": "Удалить субтитр в текущей позиции видео", "deleteCurrentLine": "Удалить текущую строку", "deleteFirstLines": "Удалить первые строки", "deleteLastLines": "Удалить последние строки", @@ -168,8 +186,8 @@ "diskSpace": "Дисковое пространство", "doNoChange": "Не менять", "done": "Готово", - "doubleWords": "Двойные слова", - "doubleLines": "Двойные линии", + "doubleWords": "Повторяющиеся слова", + "doubleLines": "Повторяющиеся строки", "download": "Скачать", "downloadX": "Скачать {0}", "downloadingX": "Загрузка {0}", @@ -184,7 +202,7 @@ "downloadCompleteButCouldNotDeleteFile": "Загрузка завершена, но удалить существующий файл не удалось.", "pleaseRestartSeToUseTheNewLibmpv": "Пожалуйста, перезапустите SE, чтобы использовать новую версию libmpv.", "pickVobSubLanguageTitle": "Выберите язык VobSub - {0}", - "duplicate": "Дубликат", + "duplicate": "Дублировать", "duration": "Дл-сть", "durationMinutes": "Длительность в минутах", "edit": "Редактировать", @@ -192,32 +210,32 @@ "editing": "Редактирование", "effect": "Эффект", "enabled": "Включено", - "encoding": "Кодирование", + "encoding": "Кодировка", "endTime": "Время конца", "engine": "Движок", "enterProfileName": "Введите имя профиля", "error": "Ошибка", - "start": "Начинать", + "start": "Начало", "vobSub": "VobSub", "outputFileCannotBeTheInputFile": "Выходной файл не может совпадать с входным файлом.", "errorX": "Ошибка; {0}", "example": "Пример", "exampleX": "Пример: {0}", - "expand": "Расширять", + "expand": "Развернуть", "export": "Экспорт", "exportDotDotDot": "Экспорт...", "extendAfter": "Удлинить/сократить до строки после", "extendBefore": "Удлинить/сократить до строки перед", - "extendSelectedLinesToNextShotChangeOrNextSubtitle": "Продлить выбранные строки до следующей смены кадра (или до следующего субтитра)", - "extendSelectedLinesToPreviousShotChange": "Расширить выбранные строки до предыдущего изменения кадра (или предыдущего субтитра)", - "extendSelectedToNext": "Перенести выбранное на следующее", - "extendSelectedToPrevious": "Продолжить выделение до предыдущего", + "extendSelectedLinesToNextShotChangeOrNextSubtitle": "Продлить выбранные строки до следующей смены плана (или до следующего субтитра)", + "extendSelectedLinesToPreviousShotChange": "Продлить выбранные строки до предыдущей смены плана (или до предыдущего субтитра)", + "extendSelectedToNext": "Продлить выбранные до следующей", + "extendSelectedToPrevious": "Продлить выбранные до предыдущей", "extendPreviousEndToSelectedStart": "Продлить конец предыдущей строки до начала выбранной строки", "extendNextStartToSelectedEnd": "Продлить начало следующей строки до конца выделенной строки", "extractingAudioClips": "Извлечение аудиоклипов...", "exitFullScreen": "Выйти из полноэкранного режима", - "fade": "Тускнеть", - "fetchFirstWordFromNextSubtitle": "Извлечь первое слово из следующего субтитра", + "fade": "Затухание", + "fetchFirstWordFromNextSubtitle": "Забрать первое слово из следующего субтитра", "fileAlreadyExists": "Файл уже существует", "fileExtension": "Расширение файла", "fileName": "Имя файла", @@ -229,53 +247,53 @@ "filter": "Фильтр", "filterByLayer": "Фильтр по слою", "find": "Найти", - "findNext": "Найти следующий", + "findNext": "Найти далее", "findTextX": "Найти текст - {0}", "fix": "Исправить", - "fixCommonErrors": "Исправление распространенных ошибок", + "fixCommonErrors": "Исправить типичные ошибки", "fixRightToLeft": "Исправить направление справа налево", - "fixRightToLeftViaUnicodeTags": "Исправление RTL с помощью тегов Unicode", + "fixRightToLeftViaUnicodeTags": "Исправить RTL с помощью тегов Unicode", "fixedValue": "Фиксированное значение", - "focusSelectedLine": "Выделить выбранную строку (прокрутить до нужного места в сетке)", + "focusSelectedLine": "Показать выбранную строку (прокрутить таблицу к ней)", "font": "Шрифт", "fontColor": "Цвет шрифта", - "fontHeight": "высота шрифта", + "fontHeight": "Высота шрифта", "fontName": "Название шрифта", "fontNameDotDotDot": "Название шрифта...", "fontSize": "Размер шрифта", "fonts": "Шрифты", "footer": "Нижний колонтитул", - "forced": "Принужденный", + "forced": "Принудительные", "foreground": "Передний план", "format": "Формат", "forward": "Вперед", "foundNoMatches": "Совпадений не найдено", - "foundOneMatch": "Найден один совпадение", + "foundOneMatch": "Найдено одно совпадение", "foundXInLineYZ": "Найдено \"{0}\" в строке {1}, позиция {2}", "foundXMatches": "Найдено {0} совпадений", "frameRate": "Частота кадров", - "frames": "Рамки", + "frames": "Кадры", "from": "От", - "fromCurrentVideoPosition": "из текущего положения видео", - "fullScreen": "Полноэкранный", - "gap": "Зазор", - "general": "Общий", + "fromCurrentVideoPosition": "с текущей позиции видео", + "fullScreen": "Полный экран", + "gap": "Промежуток", + "general": "Общие", "generate": "Сгенерировать", - "generateImportShotChanges": "Создание/импорт изменений кадра", + "generateImportShotChanges": "Создать/импортировать смены планов", "generating": "Генерация...", "generatingImageXofY": "Создание изображения {0:#,##0} из {1:#,##0}...", "generatingAudioFile": "Создание аудиофайла...", "getAudioClips": "Получить аудиоклипы", "goTo": "Перейти к", "goToLineNumber": "Перейти к номеру строки", - "goToNextShotChange": "Перейти к следующей смене кадра", - "goToPreviousShotChange": "Перейти к предыдущей смене кадра", - "googleIt": "Google it ", + "goToNextShotChange": "Перейти к следующей смене плана", + "goToPreviousShotChange": "Перейти к предыдущей смене плана", + "googleIt": "Найти в Google ", "group": "Группа", "header": "Заголовок", "height": "Высота", "help": "Помощь", - "hex": "Шестиугольник", + "hex": "HEX", "hide": "Конец", "history": "История", "horizontal": "Горизонтально", @@ -288,89 +306,92 @@ "imagesWithTimeCode": "Изображения с временным кодом", "import": "Импорт", "importDotDotDot": "Импорт...", - "include": "Включать", + "include": "Включить", "information": "Информация", "insertAfter": "Вставить после", - "insertAtPositionAndFocusTextBox": "Вставить субтитр в позицию видео и сосредоточить текстовое поле", - "insertAtPositionNoFocusTextBox": "Вставить субтитр в позицию видео (без фокусировки на текстовом поле)", + "insertAtPositionAndFocusTextBox": "Вставить субтитр в позицию видео и перейти к тексту", + "insertAtPositionNoFocusTextBox": "Вставить субтитр в позицию видео (без перехода к тексту)", "insertBefore": "Вставить перед", "insertLine": "Вставить строку", "insertNewSelection": "Вставить новый выбор", "insertSubtitleAfterCurrentLine": "Вставить субтитры после текущей строки...", - "insertSubtitleFileAtVideoPositionDotDotDot": "Вставить файл субтитров в нужное место на видео...", + "insertSubtitleFileAtVideoPositionDotDotDot": "Вставить файл субтитров в позицию видео...", "invalidSize": "Неверный размер", "inspectAdditions": "Проверить дополнения...", - "installFolder": "Установка", + "installFolder": "Папка установки", "invertSelection": "Инвертировать выделение", "isDefault": "По умолчанию", "italic": "Курсив", - "keepExistingTimeCodes": "Сохраниь существующие временные коды (без смещения видео)", - "keyFile": "Ключевой файл", + "keepExistingTimeCodes": "Сохранить существующие временные коды (без смещения видео)", + "keyFile": "Файл ключа", "language": "Язык", - "languagePostFix": "Языковой постфикс (mkv/mp4)", + "languagePostFix": "Языковой постфикс (mkv/mp4/автоперевод)", "layer": "Слой", - "layerFilterOn": "Включить фильтр слоя", + "layerFilterOn": "Фильтр по слою включен", "left": "Левый", "light": "Светлая", "lineHeight": "Высота строки", - "lineNumber": "Линия#", + "lineNumber": "№", "lineXColumnY": "Строка {0}, столбец {1}", - "lines": "Линии", + "lines": "Строки", "linesAddedX": "Добавлено строк: {0}", "linesChangedX": "Изменено строк: {0}", - "linesDeletedX": "Удаленные строки: {0}", + "linesDeletedX": "Удалено строк: {0}", "listErrors": "Список ошибок", "loadDefaults": "Загрузить значения по умолчанию", - "lockTimeCodes": "Коды времени блокировки", + "lockTimeCodes": "Заблокировать временные коды", "logo": "Логотип", - "lookUpX": "Найдите \"{0}\"", - "margin": "Допуск", - "match": "Соответствовать", + "lookUpX": "Найти \"{0}\"", + "margin": "Отступ", + "match": "Совпадение", "maxCharactersPerSecond": "Максимальное количество символов в секунду", - "mediaInformation": "Информация для СМИ", - "mergeAfter": "Объединить с последующей строкой", + "mediaInformation": "Информация о медиафайле", + "mergeAfter": "Объединить со следующей строкой", "mergeBefore": "Объединить с предыдущей строкой", - "mergeLines": "Линии слияния", + "mergeLines": "Объединить строки", "mergeLinesWithSameText": "Объединить строки с одинаковым текстом", "mergeLinesWithSameTimeCodes": "Объединить строки с одинаковыми временными кодами", "mergeSelected": "Объединить выбранные", - "mergeSelectedAsDialog": "Объединение выбрано в качестве диалогового окна", + "mergeSelectedAsDialog": "Объединить выбранные как диалог", "mergeSelectedLines": "Объединить выбранные строки", - "mergeSelectedLinesDialog": "Объединить выбранные строки в диалоговое окно", - "mergeWithLineAfterAndAutoBreak": "Объединить с последующей строкой и автоматическим переносом", - "mergeWithLineAfterKeepBreaks": "Объединить с последующей строкой (сохранить разрывы)", - "mergeWithLineBeforeAndAutoBreak": "Объединить с предыдущей строкой и автоматически разорвать", - "mergeWithLineBeforeKeepBreaks": "Объединить с предыдущей строкой (сохранить разрывы)", - "middleCenter": "Середина-центр", - "middleLeft": "Средне-левый", - "middleRight": "Средне-правый", + "mergeSelectedLinesDialog": "Объединить выбранные строки как диалог", + "mergeWithLineAfterAndAutoBreak": "Объединить со следующей строкой и расставить переносы автоматически", + "mergeWithLineAfterKeepBreaks": "Объединить со следующей строкой (сохранить переносы)", + "mergeWithLineAfterAndUnbreak": "Объединить со следующей строкой и убрать переносы", + "mergeWithLineBeforeAndAutoBreak": "Объединить с предыдущей строкой и расставить переносы автоматически", + "mergeWithLineBeforeKeepBreaks": "Объединить с предыдущей строкой (сохранить переносы)", + "middleCenter": "По центру", + "middleLeft": "По центру слева", + "middleRight": "По центру справа", "milliseconds": "Миллисекунды", "model": "Модель", "models": "Модели", - "more": "Более", + "more": "Еще", "moreInfo": "Дополнительная информация", - "moveAllShotChangeOneFrameBack": "Переместить все смены кадров на один кадр назад", - "moveAllShotChangeOneFrameForward": "Переместить все смены кадров на один кадр вперед", - "multiMode": "Многорежимный", - "moveDown": "Спустить ниже", - "moveUp": "Поднять выше", - "moveToTop": "Перейти наверх", - "moveToBottom": "Перейти вниз", + "moveAllShotChangeOneFrameBack": "Сдвинуть все смены планов на один кадр назад", + "moveAllShotChangeOneFrameForward": "Сдвинуть все смены планов на один кадр вперед", + "multiMode": "Множественный режим", + "moveDown": "Переместить вниз", + "increase": "Увеличить", + "decrease": "Уменьшить", + "moveUp": "Переместить вверх", + "moveToTop": "Переместить в начало", + "moveToBottom": "Переместить в конец", "multipleReplace": "Множественная замена", "name": "Имя", "new": "Новый", "newDotDotDot": "Новый...", "newProfile": "Новый профиль", "next": "Следующий", - "newSubtitleStartKeyDownSetEndKeyUp": "Вставить субтитр: Начать при нажатии клавиши, завершить при отпускании клавиши", - "setSubtitleStartAtVideoPositionSetEndAtKeyUpAndGoToNext": "Установить начало позиции видео, установить конец при отпускании клавиши и перейти к следующему", + "newSubtitleStartKeyDownSetEndKeyUp": "Вставить субтитр: начало при нажатии клавиши, конец при отпускании", + "setSubtitleStartAtVideoPositionSetEndAtKeyUpAndGoToNext": "Начало в позиции видео, конец при отпускании клавиши, затем перейти к следующему", "no": "Нет", "noColor": "Без цвета", "noFilesToConvert": "Нет файлов для конвертации", "noLanguageCode": "Нет языкового кода", "noSubtitleLoaded": "Субтитры не загружены", "noSubtitlesFound": "Субтитры не найдены!", - "noSymbolLines": "#Строки", + "noSymbolLines": "Строк", "noVideoLoaded": "Видео не загружено", "none": "Нет", "normalCasing": "Нормальный регистр", @@ -381,21 +402,21 @@ "numberSymbol": "#", "ocrDotDotDot": "ОКР...", "ocrPercentX": "OCR: {0}%", - "offset": "Компенсировать", - "offsetTimeCodes": "Смещение временных кодов", + "offset": "Смещение", + "offsetTimeCodes": "Сместить временные коды", "offsetX": "Смещение X", "offsetY": "Смещение Y", "ok": "_OK", "oneFile": "Один файл", "oneSecondBack": "Одна секунда назад", "oneSecondForward": "Одна секунда вперед", - "openContainingFolder": "Открыть содержащую папку", + "openContainingFolder": "Открыть папку с файлом", "openDictionaryFolder": "Открыть папку словарей", "openFile": "Открыть файл", - "openImageBasedSubtitle": "Открытые субтитры на основе изображений", + "openImageBasedSubtitle": "Открыть субтитры-изображения", "openImageFile": "Открыть файл изображения", - "openOriginalSubtitleFileTitle": "Открытьоригинальный файл субтитров", - "openOutputFolder": "Открытьпапку с выходными файлами", + "openOriginalSubtitleFileTitle": "Открыть оригинальный файл субтитров", + "openOutputFolder": "Открыть папку с результатами", "openSubtitleFileTitle": "Открыть файл субтитров", "openSubtitles": "Открыть субтитры...", "openVideoFile": "Открыть видеофайл...", @@ -409,11 +430,11 @@ "outlineColor": "Цвет контура", "outlineWidth": "Ширина контура", "outputFolder": "Выходная папка", - "outputProperties": "Выходные свойства", + "outputProperties": "Параметры вывода", "overwriteExistingFiles": "Перезаписать существующие файлы", "overwriteFilesInFolderX": "Перезаписать файлы в папке: \"{0}\"", "overwriteQuestion": "Перезаписать?", - "padding": "Набивка", + "padding": "Отступы", "parameters": "Параметры", "parsingXDotDotDot": "Разбор {0}...", "paste": "Вставить", @@ -422,10 +443,11 @@ "percent": "Процент", "pickLayer": "Установить слой", "pickOllamaModel": "Выбрать модель Ollama", + "pickModel": "Выбрать модель", "llamaCppUseRemoteServer": "Использовать внешний сервер (URL)", "llamaCppEngineSettings": "Настройки движка llama.cpp", "llamaCppEngineSettingsSubtitle": "Локальная сборка сервера llama.cpp", - "startServer": "Запуск сервера", + "startServer": "Запустить сервер", "stopServer": "Остановить сервер", "pickOutputFolder": "Выбрать выходную папку", "pleaseSelectOutputFolder": "Пожалуйста, выберите папку для сохранения результатов", @@ -437,22 +459,22 @@ "play": "Воспроизвести", "playFromStartOfVideo": "Воспроизвести с начала видео", "playFromJustBeforeText": "Воспроизвести с момента непосредственно перед текстом", - "playNext": "Воспроизвести далее", - "playNextAndStop": "Воспроизвести далее (и остановить)", - "playNextAndLoop": "Воспроизвести далее (и зациклить)", - "playPrevious": "Воспроизвести предыдущую", - "playPreviousAndStop": "Воспроизвести предыдущую версию (и остановить)", - "playPreviousAndLoop": "Воспроизвести предыдущую запись (и зациклить)", - "playSelectedLines": "Воспроизвести выбранные линии", + "playNext": "Воспроизвести следующий", + "playNextAndStop": "Воспроизвести следующий (и остановить)", + "playNextAndLoop": "Воспроизвести следующий (в цикле)", + "playPrevious": "Воспроизвести предыдущий", + "playPreviousAndStop": "Воспроизвести предыдущий (и остановить)", + "playPreviousAndLoop": "Воспроизвести предыдущий (в цикле)", + "playSelectedLines": "Воспроизвести выбранные строки", "playSelectedLinesWithLoop": "Воспроизвести выбранные строки в цикле", - "playSelectedLinesAndFocusWaveform": "Воспроизвести выбранные строки и сфокусировать осциллограмму", - "playSelectedLinesWithLoopAndFocusWaveform": "Воспроизвести выбранные строки с зацикливанием и фокусировкой волновой формы", + "playSelectedLinesAndFocusWaveform": "Воспроизвести выбранные строки и перейти к осциллограмме", + "playSelectedLinesWithLoopAndFocusWaveform": "Воспроизвести выбранные строки в цикле и перейти к осциллограмме", "pleaseEnterAValidValueForX": "Пожалуйста, введите допустимое значение для \"{0}\"", "pleaseWait": "Пожалуйста, подождите...", "position": "Позиция", "positionX": "Позиция: {0}", "postProcessing": "Постобработка", - "poweredBy": "Питаться от", + "poweredBy": "На базе", "prefix": "Префикс", "preview": "Предварительный просмотр", "previewAlignmentInListView": "Предварительный просмотр выравнивания в режиме списка", @@ -463,12 +485,12 @@ "profiles": "Профили", "property": "Свойство", "question": "Вопрос", - "reDownloadX": "Перезагрузить {0}", + "reDownloadX": "Скачать заново {0}", "reason": "Причина", "recentFiles": "Недавние файлы", "recentlyUsedVideoOffsets": "Недавно использованные смещения видео", "redo": "Повторить", - "redownload": "Перезагрузить...", + "redownload": "Скачать заново...", "release": "Релиз", "refresh": "Обновить", "region": "Область", @@ -491,15 +513,16 @@ "removeTextForHearingImpaired": "Удалить текст для слабослышащих", "removeUnderline": "Удалить подчеркивание", "rename": "Переименовать", - "replace": "Замена", + "replace": "Заменить", "replaceLine": "Заменить строку", "replaceWith": "Заменить на", "requiresRestart": "Требуется перезапуск", "reset": "Сбросить", "resizePanels": "Изменить размер панелей", "resolution": "Разрешение", - "reverseRightToLeftStartEnd": "Начало/конец в обратном порядке RTL", - "right": "Верно", + "retry": "Повторить", + "reverseRightToLeftStartEnd": "Поменять местами начало/конец RTL", + "right": "Справа", "rightToLeft": "Справа налево", "rules": "Правила", "saveChangesMessage": "Вы хотите сохранить изменения в текущем файле субтитров?", @@ -524,123 +547,131 @@ "seconds": "Секунды", "selectAll": "Выбрать все", "selectFilesToConvert": "Выбрать файлы для конвертации", - "selectForcedLines": "Форсированный выбор строк", - "selectNone": "Выбрать ничего", - "selectNonForcedLines": "Не Форсированный выбор строк", + "selectForcedLines": "Выбрать принудительные строки", + "selectNone": "Снять выделение", + "selectNonForcedLines": "Выбрать непринудительные строки", "selectSaveFolder": "Выбрать папку для сохранения", "selectSubtitle": "Выбрать субтитры", "selectedAFolderToSaveTo": "Выбрана папка для сохранения", - "selectionToLowercase": "Выделение в нижний регистр", - "selectionToSentenceCase": "Дело о выборе при вынесении приговора", - "selectionToUppercase": "Выделение в верхний регистр", + "selectionToLowercase": "Выделенное: в нижний регистр", + "selectionToSentenceCase": "Выделенное: как в предложении", + "selectionToUppercase": "Выделенное: В ВЕРХНИЙ РЕГИСТР", "selectedLines": "Выбранные строки", "selectedlinesX": "Выбранные строки: {0}", "sensitivity": "Чувствительность", - "separator": "Сепаратор", - "setEnd": "Конец набора", + "separator": "Разделитель", + "setEnd": "Установить конец", "setEndAndGoToNext": "Установить конец и перейти к следующему", "setEndAddNewAndGoToNew": "Установить конец, добавить новый и перейти к новому", - "setEndAddNewAndGoToNewNoFocusTextBox": "Установить конец, добавить новый и перейти к созданию (текстовое поле без фокуса)", - "setEndAndOffsetTheRest": "Установить конец и сместить остальную часть", + "setEndAddNewAndGoToNewNoFocusTextBox": "Установить конец, добавить новый и перейти к нему (без перехода к тексту)", + "setEndAndOffsetTheRest": "Установить конец и сместить остальные", "setFontDotDotDot": "Установить шрифт...", - "setInCueToClosestShotChangeLeftGreenZone": "Установить метку для ближайшего изменения кадра (привязка к левой зеленой зоне)", - "setInCueToClosestShotChangeRightGreenZone": "Установить метку для ближайшего изменения кадра (привязка к правой зеленой зоне)", - "setOutCueToClosestShotChangeLeftGreenZone": "Установить метку для ближайшего изменения кадра (привязка к левой зеленой зоне)", - "setOutCueToClosestShotChangeRightGreenZone": "Установить метку для ближайшего изменения кадра (привязка к правой зеленой зоне)", + "setInCueToClosestShotChangeLeftGreenZone": "Установить начало по ближайшей смене плана (привязка к левой зеленой зоне)", + "setInCueToClosestShotChangeRightGreenZone": "Установить начало по ближайшей смене плана (привязка к правой зеленой зоне)", + "setOutCueToClosestShotChangeLeftGreenZone": "Установить конец по ближайшей смене плана (привязка к левой зеленой зоне)", + "setOutCueToClosestShotChangeRightGreenZone": "Установить конец по ближайшей смене плана (привязка к правой зеленой зоне)", "setStart": "Установить начало", - "setStartAndGoToNext": "Начальная точка и перейти к следующему шагу", - "setStartAndKeepDuration": "Установить начальную и продолжительность сохранения", - "setStartAndOffsetTheRest": "Установить начальную точку и сместить остальную часть", + "setStartAndGoToNext": "Установить начало и перейти к следующему", + "setStartAndKeepDuration": "Установить начало, сохранив длительность", + "setStartAndOffsetTheRest": "Установить начало и сместить остальные", "setUpLikeSubtitleEdit4": "Настроить как в Subtitle Edit 4 (тема, сочетания клавиш, правила замены)", "imageBackgroundColorDotDotDot": "Цвет фона изображения...", "setVideoOffset": "Установить смещение видео", "settings": "Настройки", "shadow": "Тень", "shadowColor": "Цвет тени", - "shadowWidth": "ширина тени", + "shadowWidth": "Ширина тени", "shiftLineBy": "Сдвинуть строку на", - "shortcut": "Быстрый доступ", - "shortcuts": "Ярлыки", + "shotIn": "Начало плана", + "shotOut": "Конец плана", + "shortcut": "Сочетание клавиш", + "shortcuts": "Сочетания клавиш", "show": "Начало", "showActorColumn": "Показать столбец \"Актер\"", "showCpsColumn": "Показать столбец \"Символы/сек\"", "showDurationColumn": "Показать столбец \"Длительность\"", - "showGapColumn": "Показать столбец \"Пробел\"", - "showForcedColumn": "Показать столбец «Принудительное»", + "showGapColumn": "Показать столбец \"Промежуток\"", + "showForcedColumn": "Показать столбец \"Принудительные\"", "showStartColumn": "Показать столбец \"Начало\"", "showHideColumn": "Показать столбец \"Конец\"", "showHistory": "Показать историю", + "clearHistory": "Очистить историю", + "removeFromHistory": "Удалить из истории", "showLayerColumn": "Показать столбец \"Слой\"", "showPreview": "Показать предварительный просмотр", - "showShotChangesList": "Показать список изменений в снимках", + "showShotChangesList": "Показать список смен планов", + "showShotInColumn": "Показать столбец \"Начало плана\"", + "showShotOutColumn": "Показать столбец \"Конец плана\"", "showStyleColumn": "Показать столбец \"Стиль\"", - "showTeletext": "Показать TT", + "showTeletext": "Показать столбец телетекста в списке", "showTimeCodes": "Показать временные коды", - "showWpmColumn": "Показать столбец \"Слова/мин\"", - "showPixelWidthColumn": "Показать столбец \"Ширина пикселя\"", - "shrink": "Сокращать", - "singleMode": "Однорежимный", + "showWpmColumn": "Показать столбец \"Слов/мин\"", + "showPixelWidthColumn": "Показать столбец \"Ширина в пикселях\"", + "shrink": "Сжать", + "singleMode": "Одиночный режим", "textTotalLength": "Текст - общая длина", "textSingleLineMaxLength": "Текст - максимальная длина одной строки", "size": "Размер", "sizeX": "Размер: {0}", - "skip": "Пропускать", + "skip": "Пропустить", "skipAll": "Пропустить все", "skipOnce": "Пропустить один раз", "smart": "Умный", - "snapSelectedLinesEndToPreviousShotChange": "Привязать выбранные строки к предыдущему изменению кадра", - "snapSelectedLinesStartToNextShotChange": "Переход от выбранных линий к следующему кадру", - "snapSelectedLinesToNearestShotChange": "Привязать начало/конец выбранных линий к ближайшей точке смены кадра", + "snapSelectedLinesEndToPreviousShotChange": "Привязать конец выбранных строк к предыдущей смене плана", + "snapSelectedLinesStartToNextShotChange": "Привязать начало выбранных строк к следующей смене плана", + "snapSelectedLinesToNearestShotChange": "Привязать начало/конец выбранных строк к ближайшей смене плана", "solidColor": "Однотонный цвет", - "sourceViewX": "Исходный код - {0}", - "spacing": "Расстояние", - "speechToTextSelectedLines": "Выбрана функция преобразования речи в текст (см. Параметры - Настройки)", - "speechToTextSelectedLinesPromptAlways": "Преобразование речи в текст для выбранных строк (с постоянным запросом выбора движка/языка)", - "speechToTextSelectedLinesPromptFirstTime": "Преобразование речи в текст (только для первого раза с использованием подсказок движка/языка)", + "sourceViewX": "Исходный текст - {0}", + "spacing": "Интервал", + "speechToTextSelectedLines": "Распознать речь для выбранных строк (см. Параметры - Настройки)", + "speechToTextSelectedLinesPromptAlways": "Распознать речь для выбранных строк (всегда спрашивать движок/язык)", + "speechToTextSelectedLinesPromptFirstTime": "Распознать речь для выбранных строк (спрашивать движок/язык только в первый раз)", "speed": "Скорость", - "balanceWithNextSubtitle": "Баланс со следующим субтитром", - "balanceWithPreviousSubtitle": "Сбалансированность с предыдущим субтитром", - "fetchLastWordFromPreviousSubtitle": "Извлечь последнее слово из предыдущего субтитра", - "fetchRestOfSentenceFromNextSubtitle": "Дополните предложение, перейдя к следующему субтитру", - "fetchUnfinishedSentenceFromPreviousSubtitle": "Извлечь незаконченное предложение из предыдущего субтитра", - "moveFirstWordToPreviousSubtitle": "Переместить первое слово на предыдущий подзаголовок", - "moveRestOfSentenceToPreviousSubtitle": "Переместите оставшуюся часть предложения к предыдущему подзаголовку", - "moveUnfinishedSentenceToNextSubtitle": "Переместите незаконченное предложение к следующему субтитру", + "balanceWithNextSubtitle": "Сбалансировать со следующим субтитром", + "balanceWithPreviousSubtitle": "Сбалансировать с предыдущим субтитром", + "fetchLastWordFromPreviousSubtitle": "Забрать последнее слово из предыдущего субтитра", + "fetchRestOfSentenceFromNextSubtitle": "Забрать окончание предложения из следующего субтитра", + "fetchUnfinishedSentenceFromPreviousSubtitle": "Забрать незаконченное предложение из предыдущего субтитра", + "moveFirstWordToPreviousSubtitle": "Перенести первое слово в предыдущий субтитр", + "moveRestOfSentenceToPreviousSubtitle": "Перенести окончание предложения в предыдущий субтитр", + "moveUnfinishedSentenceToNextSubtitle": "Перенести незаконченное предложение в следующий субтитр", "splitAtComma": "Разделить по запятой", - "splitAtDialogDash": "Разделение по диалоговому тире", - "splitAtLineBreak": "Разделение по разрыву строки", - "splitAtSentenceEnd": "Разделение в конце предложения", + "splitAtDialogDash": "Разделить по тире диалога", + "splitAtLineBreak": "Разделить по переносу строки", + "splitAtSentenceEnd": "Разделить по концу предложения", "splitAtTextBoxCursorPosition": "Разделить в позиции текстового курсора", "splitLine": "Разделить строку", - "splitNearMiddle": "Разделить по центру", + "splitNearMiddle": "Разделить по пробелу ближе к середине", "splitLineAtTextBoxCursorPosition": "Разделить строку на позиции курсора", - "splitLineAtVideoAndTextBoxPosition": "Разделить строку по позиции видео и текстового блока", + "splitLineAtVideoAndTextBoxPosition": "Разделить строку по позиции видео и курсора", "splitLineAtVideoPosition": "Разделить строку на позиции видео", - "splitLineAtWaveformPosition": "Разделить линию на начале формы сигнала", + "splitLineAtWaveformPosition": "Разделить строку по позиции указателя на осциллограмме", "startFrom": "Начать с", "startTime": "Время начала", "startingDotDotDot": "Начало...", "status": "Статус", "stereo": "Стерео", "spreadsheetFiles": "Файлы электронных таблиц", - "stop": "Останавливаться", - "strikeout": "Страйкаут", + "stop": "Остановить", + "strikeout": "Зачеркнутый", "style": "Стиль", - "styleExaggeration": "Преувеличение стиля", + "styleExaggeration": "Выразительность стиля", "styles": "Стили", - "subtitleFile": "файл субтитров", - "subtitleFileName": "Название файла субтитров", + "subtitleFile": "Файл субтитров", + "subtitleFileChangedOutsideX": "Файл \"{0}\" был изменен вне Subtitle Edit.\n\nПерезагрузить его? Несохраненные изменения будут потеряны.", + "subtitleFileName": "Имя файла субтитров", "subtitleFileSaved": "Файл субтитров сохранен", "subtitleFileSavedToX": "Файл субтитров сохранен в {0}", - "subtitleFiles": "файлы субтитров", + "subtitleFiles": "Файлы субтитров", "subtitleFormats": "Форматы субтитров", "subtitleLoadedX": "Субтитры загружены: {0}", + "subtitleReloadedChangedOutsideX": "Субтитры перезагружены (изменены вне Subtitle Edit): {0}", "suffix": "Суффикс", "suggestions": "Предложения", "sync": "Синхронизация", "syntaxColoring": "Подсветка синтаксиса", "system": "Система", - "targetEncoding": "Целевое кодирование", + "targetEncoding": "Целевая кодировка", "targetFormat": "Целевой формат", "teletextAlignment": "Выравнивание телетекста", "teletextColor": "Цвет телетекста", @@ -650,124 +681,140 @@ "textColor": "Цвет текста", "textFiles": "Текстовые файлы", "textOrImage": "Текст/изображение", - "threeLetterLanguageCode": "Трехбуквенный языковой код", + "threeLetterLanguageCode": "Трехбуквенный (ISO 639-2/T)", "threeLetterLanguageCodeBibliographic": "Трехбуквенный (ISO 639-2/B)", "time": "Время", "timeCodes": "Временные коды", - "timing": "Время", + "timing": "Тайминг", "title": "Заголовок", "to": "К", - "toggleCasing": "Корпус переключателя", + "toggleCasing": "Переключить регистр", "toggleDirection": "Переключить направление", "toggleForced": "Переключить принудительное", - "markedXLinesAsForced": "Строка(и) {0} помечена(ы) как принудительно выполненная(ые)", - "unmarkedXLinesAsForced": "Неотмеченные {0} строки как принудительно", + "markedXLinesAsForced": "Помечено как принудительные, строк: {0}", + "unmarkedXLinesAsForced": "Снята пометка \"принудительные\", строк: {0}", "noForcedLinesFound": "Принудительные строки не обнаружены", - "saveForcedLinesAs": "Сохранить принудительно заданные строки как...", - "toggleShotChangesAtVideoPosition": "Переключение режимов съемки в видеорежиме", + "saveForcedLinesAs": "Сохранить принудительные строки как...", + "toggleShotChangesAtVideoPosition": "Добавить/удалить смену плана в позиции видео", "toolbar": "Панель инструментов", "tools": "Инструменты", - "topCenter": "Верхний центр", - "topLeft": "Вверху слева", - "topRight": "Вверху справа", - "top": "Вершина", + "topCenter": "Сверху по центру", + "topLeft": "Сверху слева", + "topRight": "Сверху справа", + "top": "Сверху", "totalAdjustmentX": "Общая корректировка: {0}", - "translate": "Перевод", + "translate": "Перевести", "translatePercentX": "Перевод: {0}%", "translateRow": "Перевести строку", "translation": "Перевод", "twoLetterLanguageCode": "Двухбуквенный языковой код", "type": "Тип", - "unbreak": "Неразрывный текст", - "unbreakLines": "Неразрывные строки", - "underline": "Подчеркнуть", + "unbreak": "Убрать переносы", + "unbreakLines": "Убрать переносы строк", + "undelete": "Восстановить удаленное", + "underline": "Подчеркнутый", "undo": "Отменить", + "uninstall": "Удалить", + "uninstalled": "Удалено", "unknown": "Неизвестный", "unknownNoInstallRecord": "Неизвестно (нет записи об установке)", "unknownSubtitleFormat": "Неизвестный формат субтитров", "unpacking7ZipArchiveDotDotDot": "Распаковка архива 7-zip...", "unpackingX": "Распаковка {0}", "untitled": "Без названия", - "update": "Обновлять", + "update": "Обновить", "updateAndClose": "Обновить и закрыть", "updateAvailable": "Доступно обновление", - "updateDetails": "Обновить подробности", + "updateDetails": "Сведения об обновлении", "updateX": "Обновление {0}", "updatedBy": "Обновлено пользователем", - "upToDate": "Актуальный", + "upToDate": "Актуальная версия", "url": "URL", - "usages": "Варианты использования", + "usages": "Использование", "use": "Использовать", "useAlways": "Всегда использовать", "useOnce": "Использовать один раз", "useOutputFolder": "Использовать выходную папку", "useSourceFolder": "Использовать исходную папку", - "useSourceResolution": "Использовать разрешение исходного кода", + "useSourceResolution": "Использовать исходное разрешение", "userName": "Имя пользователя", "vertical": "Вертикально", "video100MsBack": "Видео, 100 миллисекунд назад", "video100MsForward": "Видео, 100 миллисекунд вперед", "video500MsBack": "Видео, 500 миллисекунд назад", "video500MsForward": "Видео, 500 миллисекунд вперед", - "videoCustom1BackX": "Видео, пользовательские миллисекунды ({0:#,###,##0}) назад, 1", - "videoCustom1ForwardX": "Видео, пользовательские миллисекунды ({0:#,###,##0}) вперед, 1", - "videoCustom2BackX": "Видео, пользовательские миллисекунды ({0:#,###,##0}) назад, 2", - "videoCustom2ForwardX": "Видео, пользовательские миллисекунды ({0:#,###,##0}) вперед, 2", - "videoCustom3BackX": "Видео, пользовательские миллисекунды ({0:#,###,##0}) назад, 3", - "videoCustom3ForwardX": "Видео, пользовательские миллисекунды ({0:#,###,##0}) вперед, 3", - "videoCustom4BackX": "Видео, пользовательские миллисекунды ({0:#,###,##0}) назад, 4", - "videoCustom4ForwardX": "Видео, пользовательские миллисекунды ({0:#,###,##0}) вперед, 4", + "videoCustom1BackX": "Видео, заданное время ({0:#,###,##0} мс) назад, 1", + "videoCustom1ForwardX": "Видео, заданное время ({0:#,###,##0} мс) вперед, 1", + "videoCustom2BackX": "Видео, заданное время ({0:#,###,##0} мс) назад, 2", + "videoCustom2ForwardX": "Видео, заданное время ({0:#,###,##0} мс) вперед, 2", + "videoCustom3BackX": "Видео, заданное время ({0:#,###,##0} мс) назад, 3", + "videoCustom3ForwardX": "Видео, заданное время ({0:#,###,##0} мс) вперед, 3", + "videoCustom4BackX": "Видео, заданное время ({0:#,###,##0} мс) назад, 4", + "videoCustom4ForwardX": "Видео, заданное время ({0:#,###,##0} мс) вперед, 4", + "videoCustom1BackAndPauseX": "Видео, заданное время ({0:#,###,##0} мс) назад и пауза, 1", + "videoCustom1ForwardAndPauseX": "Видео, заданное время ({0:#,###,##0} мс) вперед и пауза, 1", + "videoCustom2BackAndPauseX": "Видео, заданное время ({0:#,###,##0} мс) назад и пауза, 2", + "videoCustom2ForwardAndPauseX": "Видео, заданное время ({0:#,###,##0} мс) вперед и пауза, 2", + "videoCustom3BackAndPauseX": "Видео, заданное время ({0:#,###,##0} мс) назад и пауза, 3", + "videoCustom3ForwardAndPauseX": "Видео, заданное время ({0:#,###,##0} мс) вперед и пауза, 3", + "videoCustom4BackAndPauseX": "Видео, заданное время ({0:#,###,##0} мс) назад и пауза, 4", + "videoCustom4ForwardAndPauseX": "Видео, заданное время ({0:#,###,##0} мс) вперед и пауза, 4", "videoExtension": "Расширение видеофайла", "videoFile": "Видеофайл", - "videoFileGenerated": "Видеофайл сгенерирован", - "videoFileGeneratedX": "Видеофайл сгенерирован: \"{0}\"", + "videoFileGenerated": "Видеофайл создан", + "videoFileGeneratedX": "Видеофайл создан: \"{0}\"", + "videoFilesGenerated": "Видеофайлы созданы", + "xVideosGenerated": "Создано видео: {0}", + "xOfYVideosGenerated": "Создано видео: {0} из {1}", + "savedInX": "Сохранено в {0}", + "savedInXFolders": "Сохранено в папках: {0}", "videoFiles": "Видеофайлы", "videoAndAudioFiles": "Видео- и аудиофайлы", "videoOffset": "Смещение видео", - "videoOneFrameBack": "Видео, один кадр назад", + "videoOneFrameBack": "Видео, на один кадр назад", "videoOneFrameForward": "Видео, на один кадр вперед", - "videoOneFrameBackWithPlay": "Видео, один кадр назад, воспроизведение продолжается", - "videoOneFrameForwardWithPlay": "Видео, прокрутка на один кадр вперед с воспроизведением", - "videoOneSecondBack": "Видео, секунда назад", + "videoOneFrameBackWithPlay": "Видео, на один кадр назад с воспроизведением", + "videoOneFrameForwardWithPlay": "Видео, на один кадр вперед с воспроизведением", + "videoOneSecondBack": "Видео, на одну секунду назад", "videoOneSecondForward": "Видео, на одну секунду вперед", "videoPlayer": "Видеоплеер", "videoPosition": "Позиция видео", "videoResolution": "Разрешение видео", "visible": "Видимый", "voice": "Голос", - "volume": "Объем", + "volume": "Громкость", "warning": "Предупреждение", - "waveform": "Форма волны", - "waveformCenterOnVideoPosition": "Центр волновой формы на видеоизображении", + "waveform": "Осциллограмма", + "waveformCenterOnVideoPosition": "Центрировать осциллограмму по позиции видео", "waveformPasteFromClipboard": "Вставить из буфера обмена", - "waveformSpectrogram": "Форма волны/спектрограмма", + "waveformSpectrogram": "Осциллограмма/спектрограмма", "width": "Ширина", - "wordsPerMin": "Слова/мин", - "pixelWidth": "ширина в пикселях", - "wpm": "Слова/мин", - "xFiles": "{0:#,###,##0} файлов", + "wordsPerMin": "Слов/мин", + "pixelWidth": "Ширина в пикселях", + "wpm": "Слов/мин", + "xFiles": "Файлов: {0:#,###,##0}", "xOfYFiles": "{0:#,###,##0} из {1:#,###,##0} файлов", - "xFilesConvertedInY": "{0:#,###,##0} файлов, преобразованных в {1}", - "xNoLinesUpdated": "{0}: строка(ы) не обновлена", + "xFilesConvertedInY": "Преобразовано файлов: {0:#,###,##0} за {1}", + "xNoLinesUpdated": "{0}: строки не изменены", "xNotFound": "\"{0}\" не найден", - "xOfYLinesUpdated": "{0}: {1} из {2} строк обновлено", - "xOfYLinesUpdatedAndZNeighborsAdjusted": "{0}: {1} из {2} строк обновлены, {3} соседи скорректированы", + "xOfYLinesUpdated": "{0}: обновлено строк: {1} из {2}", + "xOfYLinesUpdatedAndZNeighborsAdjusted": "{0}: обновлено строк: {1} из {2}, скорректировано соседних: {3}", "noBookmarksFound": "Больше закладок не найдено", "xRequiresAnApiKey": "Для {0} требуется ключ API", - "xRequiresAValidUrl": "{0} требует действит. URL (напр \"http://...\" или \"https://...\")", + "xRequiresAValidUrl": "{0} требует корректный URL (например, \"http://...\" или \"https://...\")", "yes": "Да", "zeroBytes": "0 байт", "copyToClipboard": "Скопировать в буфер обмена", "copiedToClipboard": "Скопировано в буфер обмена", - "playCurrent": "Воспроизвести текущую", - "leftMargin": "Левое поле", - "rightMargin": "Правое поле", + "playCurrent": "Воспроизвести текущий", + "leftMargin": "Отступ слева", + "rightMargin": "Отступ справа", "installed": "Установлено", - "advancedDotDotDot": "Подробнее...", + "advancedDotDotDot": "Дополнительно...", "chooseAlignment": "Выбрать выравнивание", "maxWidthPixels": "Максимальная ширина (в пикселях)", "sampleText": "Пример текста", - "boxWidthPixels": "Ширина блока (в пикселях)", + "boxWidthPixels": "Ширина подложки (в пикселях)", "fadeInOut": "Плавное нарастание/затухание", "alpha": "Альфа", "pickResolution": "Выбрать разрешение", @@ -778,170 +825,213 @@ "imageFiles": "Файлы изображений", "openAiCompatibleSttEndpoint": "URL конечной точки STT", "openAiCompatibleSttApiKey": "Ключ API", - "openAiCompatibleSttModel": "Модель", "openAiCompatibleSttExtraHeaders": "Дополнительные заголовки", "openAiCompatibleSttTimeout": "Тайм-аут (секунды)", "openAiCompatibleSttLanguage": "Подсказка по языку", - "openAiCompatibleSttTemperature": "Температура", - "openAiCompatibleSttPrompt": "Быстрый", "openAiCompatibleSttModelRejectedHint": "Сервер отклонил имя модели. Не каждая совместимая с OpenAI конечная точка принимает модель — например, в xAI https://api.x.ai/v1/stt вообще нет параметра 'model'. Попробуйте очистить поле Model.", - "dashScopeSttRegion": "Область", + "dashScopeSttRegion": "Регион", "dashScopeSttEnableWords": "Временные метки на уровне слов", "dashScopeSttRegionKeyHint": "Примечание: API-ключи Alibaba Cloud Model Studio привязаны к региону — убедитесь, что выбранный регион совпадает с регионом, где был создан API-ключ (Китай или международный регион).", + "googleCloudSttProjectId": "ID проекта (только для Application Default Credentials)", + "googleCloudSttBucketName": "Бакет хранилища (пусто = автоматически)", + "googleCloudSttDynamicBatching": "Динамическая пакетная обработка (примерно в 5 раз дешевле, без гарантии времени ответа)", "onlineSttApiKeyMissing": "Для доступа к API требуется ключ. Пожалуйста, введите свой ключ API и повторите попытку.", - "openAiCompatibleSttAutoTranscribeOnAudioSelection": "Автоматическая транскрипция выбранной новой формы волны с помощью преобразования речи в текст", + "openAiCompatibleSttAutoTranscribeOnAudioSelection": "Автоматически распознавать речь в новом выделении на осциллограмме", "openAiCompatibleSttStream": "Потоковый ответ", - "openAiCompatibleSttStreamHint": "Отправить 'stream=true', чтобы получать текстовые изменения (SSE). Отключить для серверов, которые отклоняют параметр 'stream' (например, Groq).", + "openAiCompatibleSttStreamHint": "Отправлять 'stream=true', чтобы получать текст по мере распознавания (SSE). Отключите для серверов, которые не принимают параметр 'stream' (например, Groq).", "openAiCompatibleSttAudioFormat": "Формат загрузки аудио", - "openAiCompatibleSttAudioFormatHint": "Аудиоформат отправлен на сервер STT. OpenAI ограничивает загрузки до 25 МБ, поэтому для длинных видео рекомендуется использовать MP3/M4A/WebM (Opus). WAV — без потерь, но примерно в 5 раз больше по размеру.", + "openAiCompatibleSttAudioFormatHint": "Формат аудио, отправляемого на сервер STT. OpenAI ограничивает загрузку 25 МБ, поэтому для длинных видео рекомендуются MP3/M4A/WebM (Opus). WAV — без потерь, но примерно в 5 раз больше.", "configurationRequired": "Требуется настройка", "transcriptionError": "Ошибка транскрипции", "transcriptionComplete": "Транскрипция завершена", "processingResponse": "Обработка ответа...", - "unauthorizedApiKey": "Несанкционированный доступ: Недействительный ключ API или недостаточные права доступа.", + "unauthorizedApiKey": "Нет доступа: неверный ключ API или недостаточно прав.", "requestTimeout": "Истекло время ожидания запроса: сервер слишком долго отвечал.", - "openAiCompatibleSttUrlMissing": "Требуется URL-адрес конечной точки STT, совместимый с OpenAI. Пожалуйста, введите URL-адрес и повторите попытку.", + "openAiCompatibleSttUrlMissing": "Требуется URL конечной точки STT, совместимой с OpenAI. Введите URL и повторите попытку.", "openAiCompatibleSttUrlNotResponding": "Конечная точка STT, совместимая с OpenAI, не ответила:\n{0}\n\nПожалуйста, проверьте URL-адрес и убедитесь, что сервер запущен.", "transcriptionFailed": "Транскрипция не удалась", "transcriptionProgressServerFormat": "Сервер: {0}", "transcriptionProgressModelFormat": "Модель: {0}", "transcriptionProgressReceivedSegmentsFormat": "Полученные сегменты ({0})", - "transcriptionProgressModelAuto": "(авто)" + "transcriptionProgressModelAuto": "(авто)", + "prompt": "Промпт", + "temperature": "Температура", + "preset": "Предустановка", + "output": "Вывод", + "outputFormat": "Выходной формат", + "other": "Другое", + "timeCodeFormat": "Формат временного кода", + "topBottomMargin": "Отступ сверху/снизу", + "theme": "Тема", + "brightness": "Яркость", + "chooseColor": "Выбрать цвет", + "lineX": "Строка {0}", + "playLine": "Воспроизвести строку", + "maxLineLength": "Максимальная длина строки", + "maxCharsPerSec": "Максимальное количество символов в секунду", + "maxNumberOfLines": "Максимальное количество строк", + "subtitles": "Субтитры", + "shotChanges": "Смены планов", + "chapters": "Главы", + "audio": "Аудио", + "interjections": "Междометия", + "blankLines": "Пустые строки", + "editWholeText": "Отредактировать весь текст", + "noTextInClipboard": "В буфере обмена нет текста", + "noSubtitlesFoundTitle": "Субтитры не найдены", + "replacedXOccurrences": "Заменено вхождений: {0}", + "invalidRegularExpressionX": "Недопустимое регулярное выражение: {0}", + "discardChangesTitle": "Отменить изменения?", + "downloadingXDotDotDot": "Скачивание {0}...", + "importTimeCodesDotDotDot": "Импорт временных кодов...", + "original": "Оригинал", + "nextChange": "Следующее изменение", + "previousChange": "Предыдущее изменение", + "changeXOfY": "Изменение {0} из {1}", + "tooLong": "Слишком длинные", + "tooShort": "Слишком короткие", + "overlapping": "Перекрывающиеся", + "detail": "Подробности", + "fixOcrErrors": "Исправить ошибки OCR", + "runningOcrXY": "Выполняется OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "Для llama.cpp нужно скачать движок llama-server. Скачать сейчас?" }, "main": { "menu": { "file": "_Файл", "new": "_Новый", - "newKeepVideo": "Новое (сохранить видео)", - "newWindow": "Новое окно", + "newKeepVideo": "Новый (сохранить _видео)", + "newWindow": "Новое _окно", "windowTitle": "Окно", - "windowMinimize": "Свести к минимуму", - "windowZoom": "Зум", + "windowMinimize": "Свернуть", + "windowZoom": "Развернуть", "closeWindow": "Закрыть окно", "open": "_Открыть...", "openKeepVideo": "Открыть (_сохранить видео)...", "openOriginal": "Открыть ори_гинал...", "editOriginalSubtitle": "Отредактировать оригинальный субтитр", - "closeOriginal": "Закрыть оригинал", + "closeOriginal": "_Закрыть оригинал", "closeTranslation": "Закрыть _перевод", "reopen": "_Открыть заново...", - "clearRecentFiles": "Очистить последние файлы", - "restoreAutoBackup": "Восстановить авто-резервную копию...", + "clearRecentFiles": "_Очистить список недавних файлов", + "restoreAutoBackup": "Восстановить из _автосохранения...", "save": "_Сохранить", - "saveAs": "Сохранить как...", - "openContainingFolder": "Открыть содержащую папку", + "saveAs": "Сохранить _как...", + "openContainingFolder": "Открыть папку с _файлом", "compare": "Срав_нить...", "statistics": "Стат_истика...", "import": "_Импорт", - "export": "Экспорт", - "exit": "Выход", + "export": "_Экспорт", + "exit": "В_ыход", "edit": "_Правка", "undo": "_Отменить", "redo": "По_вторить", "showHistory": "_Показать историю для отмены...", "find": "_Найти...", - "findNext": "Найти _следующий", - "replace": "_Замена...", + "findNext": "Найти _далее", + "replace": "_Заменить...", "multipleReplace": "_Множественная замена...", "fillSelectedLinesWithClipboard": "Заполнить выделенные строки текстом из буфера обмена", - "goToLineNumber": "Перейти к номеру строки...", + "goToLineNumber": "_Перейти к строке...", + "commandPalette": "_Палитра команд...", "rightToLeftMode": "Р_ежим справа налево", - "modifySelectionDotDotDot": "Изменить _выбор...", + "modifySelectionDotDotDot": "Изменить _выделение...", "tools": "_Инструменты", - "adjustDurations": "_Отрегулировать Длительность...", - "applyDurationLimits": "Применить ограничения по продолжительности...", + "adjustDurations": "_Настроить длительность...", + "applyDurationLimits": "Применить ограничения _длительности...", "batchConvert": "_Пакетное преобразование...", - "beautifyTimeCodes": "Украсить тайм-коды...", - "bridgeGaps": "Преодолеть пробелы...", + "beautifyTimeCodes": "Облагородить тайм-коды...", + "improveTimeCodes": "Улучшить тайм-коды (принудительное выравнивание)...", + "bridgeGaps": "Заполнить _промежутки...", "applyMinGap": "Установить миним. промежуток между субтитрами...", "changeCasing": "_Изменить регистр...", "changeFormatting": "Изменить форматирование...", - "aiReview": "Обзор ИИ...", - "fixCommonErrors": "_Исправление распространенных ошибок...", + "aiReview": "Проверка с помощью ИИ...", + "fixCommonErrors": "_Исправить типичные ошибки...", "checkAndFixNetflixErrors": "Проверить и исправить ошибки Netfli_x...", - "listErrors": "Ошибки списка L...", - "makeEmptyTranslationFromCurrentSubtitle": "Создать пустой перевод из текущего субтитра", + "listErrors": "С_писок ошибок...", + "makeEmptyTranslationFromCurrentSubtitle": "Создать новый _пустой перевод из текущих субтитров", "mergeLinesWithSameText": "_Объединить строки с одинаковым текстом...", - "mergeLinesWithSameTimeCodes": "Объединение строк с одинаковыми временами...", - "splitBreakLongLines": "Разделение/перебалансировка длинных линий...", + "mergeLinesWithSameTimeCodes": "Объединить строки с одинаковыми тайм-кодами...", + "splitBreakLongLines": "Разделить/перебалансировать длинные строки...", "evenlyDistributeLines": "Равномерно распределить строки (по CPS)", - "mergeShortLines": "Объединить короткие очереди...", + "mergeShortLines": "Объединить короткие строки...", "mergeContinuationLines": "Объединить строки продолжения...", - "snapAllTimesToFrames": "Привязать все время к кадрам", + "snapAllTimesToFrames": "Привязать все тайм-коды к кадрам", "renumber": "Перенумеровать...", "removeTextForHearingImpaired": "_Удалить текст для слабослышащих...", - "removeUnicodeCharacters": "Удалить/заменить символы Юникода...", + "removeUnicodeCharacters": "Удалить/заменить символы _Unicode...", "convertActors": "Преобразовать актёров...", - "joinSubtitles": "_Объединить субтитры...", - "splitSubtitle": "_Разделить субтитры...", - "mergeTwoSubtitles": "Объединить два субтитра...", + "joinSubtitles": "_Объединить файлы субтитров...", + "splitSubtitle": "_Разделить файл субтитров...", + "mergeTwoSubtitles": "Объединить два файла субтитров...", "assaTools": "_Инструменты ASSA", "ssaTools": "_Инструменты SSA", - "assaProgressBar": "Создать индикатор выполнения...", - "assaChangeResolution": "Изменить разрешение...", - "assaGenerateBackground": "Создать фоновые блоки...", - "assaApplyAdvancedEffects": "Применить расширенные эффекты...", + "assaProgressBar": "Создать _индикатор прогресса...", + "assaChangeResolution": "Изменить _разрешение...", + "assaGenerateBackground": "Создать фоновые _подложки...", + "assaApplyAdvancedEffects": "Применить расширенные _эффекты...", "assaApplyCustomOverrideTags": "Применить теги _override...", - "assaSetPosition": "Установить позицию...", - "assaImageColorPicker": "_Палец выбора цвета изображения...", + "assaSetPosition": "_Задать позицию...", + "assaImageColorPicker": "_Пипетка цвета с изображения...", "assaDraw": "_Рисовать...", "assaStyles": "С_тили...", - "assaProperties": "Х_арактеристики...", + "assaProperties": "Сво_йства...", "assaAttachments": "_Вложения...", - "assaFontCollector": "_Коллекционер шрифтов...", + "assaFontCollector": "_Сборщик шрифтов...", "spellCheckTitle": "_Орфография", "spellCheck": "_Проверка орфографии...", - "findDoubleWords": "Найти удвоенные слова...", - "findDoubleLines": "Найти двойные линии...", - "addNameToNamesList": "Добавить имя в список имен...", + "findDoubleWords": "_Найти повторяющиеся слова...", + "findDoubleLines": "_Найти повторяющиеся строки...", + "addNameToNamesList": "_Добавить имя в список имен...", "getDictionaries": "_Получить словари...", "video": "_Видео", "openVideo": "_Открыть видео...", "openVideoFromUrl": "Открыть видео по адресу _URL...", "closeVideoFile": "_Закрыть видеофайл", "audioTracks": "_Аудиодорожки", - "speechToText": "_Преобразование речи в текст...", - "textToSpeech": "_Преобразование текста в речь...", - "videoOcr": "Встроенные субтитры, созданные с помощью OCR...", + "speechToText": "_Распознавание речи...", + "textToSpeech": "_Синтез речи...", + "videoOcr": "OCR вшитых субтит_ров...", "setVideoOffset": "Установить смещение видео...", "updateVideoOffsetX": "Обновить смещение видео от {0}...", "smpteTiming": "Синхронизация по SMPTE (нецелочисленная частота кадров)", - "waveformToolbar": "Панель формы сигнала", - "generateBurnIn": "Создать видео с встроенными субтитрами...", + "waveformToolbar": "Панель инструментов осциллограммы", + "generateBurnIn": "Создать видео со _вшитыми субтитрами...", "generateTransparent": "_Создать прозрачное видео с субтитрами...", - "generateImportShotChanges": "Сгенерировать/импортировать изменения s_hot...", - "listShotChanges": "Список изменений s_hot...", - "undockVideoControls": "Отсоединить элементы управления видео", - "dockVideoControls": "_Управление видео на док-станции", + "generateImportShotChanges": "Создать/импортировать смены _планов...", + "listShotChanges": "Список смен _планов...", + "undockVideoControls": "_Открепить управление видео", + "dockVideoControls": "_Закрепить управление видео", "synchronization": "С_инхронизация", - "adjustAllTimes": "_Настроить все параметры времени...", + "adjustAllTimes": "_Сдвинуть все тайм-коды...", "showSelectedLinesEarlierLater": "Показать выбранные строки раньше/позже...", "changeFrameRate": "Изменить частоту кадров...", "changeSpeed": "Изменить скорость...", "visualSync": "_Визуальная синхронизация...", "options": "_Параметры", "settings": "_Настройки...", - "shortcuts": "К_лавиши...", + "shortcuts": "Сочетания _клавиш...", "wordLists": "_Списки слов...", - "chooseLanguage": "_Язык пользовательского интерфейса...", + "chooseLanguage": "_Язык интерфейса...", "translate": "Пе_ревод", - "autoTranslate": "_Авто-перевод...", - "translateViaCopyPaste": "Авто-перевод с помощью копирования и вставки...", - "helpTitle": "_Помощь", - "help": "_Помощь...", + "autoTranslate": "_Автоперевод...", + "translateViaCopyPaste": "Автоперевод через _копирование-вставку...", + "helpTitle": "_Справка", + "help": "_Справка...", "about": "_О программе...", - "checkForUpdates": "_Проверка наличия обновлений...", - "fixRightToLeftViaUnicodeControlCharacters": "Исправление RTL управляющими Unicode", - "removeUnicodeControlCharacters": "Удалить управляющие Unicode (выбр. строки)", - "reverseRightToLeftStartEnd": "Обратное начало/конец RTL (выбр. строки)", + "checkForUpdates": "_Проверить обновления...", + "fixRightToLeftViaUnicodeControlCharacters": "Исправить RTL управляющими символами Unicode (выбр. строки)", + "removeUnicodeControlCharacters": "Удалить управляющие символы Unicode (выбр. строки)", + "reverseRightToLeftStartEnd": "Поменять местами начало/конец RTL (выбр. строки)", "pointSync": "_Точечная синхронизация...", "pointSyncViaOther": "Точечная синхронизация через _другие субтитры...", - "sortSubtitles": "_Сортировка субтитров...", + "sortSubtitles": "_Сортировать субтитры...", "setLayer": "Установить слой...", - "filterLayersForDisplayDotDotDot": "Фильтры для отображения...", - "toggleSelectSubtitleWhilePlayingCurrentlyOn": "Переключить субтитры при воспроизведении (включено)", - "toggleSelectSubtitleWhilePlayingCurrentlyOff": "Отключить/включить выбор субтитров во время воспроизведения (в данный момент: выключено)", - "selectSubtitleWhilePlaying": "Выбрать субтитры во время воспроизведения" + "filterLayersForDisplayDotDotDot": "Фильтр отображаемых слоев...", + "toggleSelectSubtitleWhilePlayingCurrentlyOn": "Выбирать субтитр при воспроизведении (сейчас: вкл.)", + "toggleSelectSubtitleWhilePlayingCurrentlyOff": "Выбирать субтитр при воспроизведении (сейчас: выкл.)", + "selectSubtitleWhilePlaying": "Выбирать текущий субтитр при воспроизведении" }, "toolbar": { "newHint": "Создать новый файл субтитров {0}", @@ -953,34 +1043,34 @@ "replaceHint": "Найти и заменить текст {0}", "multipleReplaceHint": "Множественная замена {0}", "spellCheckHint": "Проверить субтитры на наличие орфографических ошибок {0}", - "fixCommonErrorsHint": "Исправление распространённых ошибок субтитров {0}", + "fixCommonErrorsHint": "Исправить типичные ошибки в субтитрах {0}", "removeTextForHiHint": "Удалить текст для слабослышащих {0}", "visualSyncHint": "Визуальная синхронизация {0}", "pointSyncHint": "Точечная синхронизация через другой субтитр {0}", - "beautifyTimeCodesHint": "Украсить временные коды {0}", - "burnInHint": "Встроить субтитры в видеофайл {0}", + "beautifyTimeCodesHint": "Облагородить тайм-коды {0}", + "burnInHint": "Вшить субтитры в видеофайл {0}", "autoTranslateHint": "Автоматический перевод {0}", "speechToTextHint": "Преобразование речи в текст {0}", "settingsHint": "Настройка параметров и предпочтений программы {0}", "layoutHint": "Изменить расположение панели инструментов и панелей {0}", "helpHint": "Открыть справочный сайт {0}", - "autoBreakHint": "Автоматический разрыв длинных строк {0}", + "autoBreakHint": "Автоматически расставить переносы в длинных строках {0}", "unbreakHint": "Объединить многострочные субтитры в одну строку {0}", - "assaStylesHint": "Расширенные стили Sub Station Alpha", + "assaStylesHint": "Стили Advanced Sub Station Alpha", "assaPropertiesHint": "Свойства Advanced Sub Station Alpha", - "assaAttachmentsHint": "Расширенные вложения Sub Station Alpha", - "assaDrawHint": "Продвинутый Sub Station Alpha рисует фигуры", - "ssaStylesHint": "Альфа-стили подстанции", + "assaAttachmentsHint": "Вложения Advanced Sub Station Alpha", + "assaDrawHint": "Рисование фигур Advanced Sub Station Alpha", + "ssaStylesHint": "Стили Sub Station Alpha", "webVttStylesHint": "Менеджер стилей WebVTT", - "ssaPropertiesHint": "Свойства подстанции Альфа", - "ssaAttachmentsHint": "Приспособления подстанции Альфа", + "ssaPropertiesHint": "Свойства Sub Station Alpha", + "ssaAttachmentsHint": "Вложения Sub Station Alpha", "getFrameRateFromVideoFileHint": "Получить частоту кадров из видеофайла" }, "waveform": { "playPauseHint": "Воспроизвести / Пауза {0}", - "playNextHint": "Воспроизвести далее {0}", - "playSelectionHint": "Выбор игры {0}", - "setStartAndOffsetTheRestHint": "Установить начало текущего субтитра и сместить остальных {0}", + "playNextHint": "Воспроизвести следующий {0}", + "playSelectionHint": "Воспроизвести выделенное {0}", + "setStartAndOffsetTheRestHint": "Установить начало текущего субтитра и сместить остальные {0}", "setStartHint": "Установить начало текущего субтитра {0}", "setEndHint": "Установить конец текущего субтитра {0}", "newHint": "Вставить новый субтитр в позицию видео {0}", @@ -990,135 +1080,154 @@ "selectCurrentLineWhilePlayingHint": "Выбирать текущий субтитр во время воспроизведения {0}", "videoPosition": "Позиция видео {0}", "videoPositionTextBox": "Текстовое поле «Позиция видео» {0}", + "toolbarLineBreakX": "Разрыв {0} (дальше панель инструментов продолжается с нового ряда)", + "initialText": "Исходный текст выбранной строки", + "initialTextHint": "Текст выбранной строки в том виде, в каком он был в момент выбора", "hideWaveformToolbar": "Скрыть панель инструментов {0}", "resetZoomAndSpeed": "Сбросить масштаб и скорость воспроизведения {0}", "removeBlankLines": "Удалить пустые строки {0}", "playSelectedRepeatHint": "Воспроизвести выбранные субтитры в режиме повтора {0}", "seekBackHint": "Перемотать видео назад {0}", "seekForwardHint": "Перемотать видео вперед {0}", - "seekAmountHint": "Искомая сумма {0}", - "seekVideo": "Найти видео (<< >>)", + "seekAmountHint": "Шаг перемотки {0}", + "seekVideo": "Перемотка видео (<< >>)", "configureToolbarItems": "Настройка элементов панели инструментов...", - "textPreviousHint": "Воспроизвести предыдущие субтитры и остановить в конце {0}", - "textPlayHint": "Воспроизвести текущие субтитры и остановить в конце {0}", + "textPreviousHint": "Воспроизвести предыдущий субтитр и остановиться в конце {0}", + "textPlayHint": "Воспроизвести текущий субтитр и остановиться в конце {0}", "textPauseHint": "Приостановить воспроизведение {0}", - "textNextHint": "Воспроизвести следующие субтитры и остановить в конце {0}", - "guessStartNoLineSelected": "Предполагаемое начало: строка не выбрана", - "guessStartTimeCodesLocked": "Предполагаемое начало: временные коды заблокированы", - "guessStartNoWaveform": "Предполагаемое начало: отсутствует осциллограмма", - "guessStartNoRoomBeforePreviousLineX": "Предполагаемое начало: строка {0} не имеет места перед предыдущей строкой", - "guessStartLineXAlreadyAtBoundary": "Предполагаемое начало: строка {0} уже начинается там, где начинается речь", - "guessStartNoSilenceFoundNearLineX": "Предполагаемое начало: в строке {0} не обнаружено тишины", - "guessStartMovedLineXByYMs": "Предполагаемое начало: строка {0} начало перемещено {1} мс", - "guessEndNoLineSelected": "Предполагаемый конец: строка не выбрана", - "guessEndTimeCodesLocked": "Предполагаемый финал: временные коды заблокированы", - "guessEndNoWaveform": "Предполагаемый конец: нет осциллограммы", - "guessEndNoRoomBeforeNextLineX": "Предполагаемый конец: в строке {0} нет места перед следующей строкой", - "guessEndLineXAlreadyAtBoundary": "Предполагаемый конец: строка {0} уже заканчивается там, где заканчивается речь", - "guessEndNoSilenceFoundNearLineX": "Предполагаемый конец: в районе строки {0} не обнаружено тишины", - "guessEndMovedLineXByYMs": "Предполагаемый конец: строка {0} конец перемещена на {1} мс" + "textNextHint": "Воспроизвести следующий субтитр и остановиться в конце {0}", + "moveSelectedLines": "Сдвигать выбранные строки (кнопки назад/вперед)", + "moveSelectedLinesAndFollowing": "Сдвигать выбранные и все последующие строки (кнопки назад/вперед)", + "moveAllLines": "Сдвигать все строки (кнопки назад/вперед)", + "moveSelectedLinesBackHint": "Сдвинуть выбранные строки на {0} мс назад {1}", + "moveSelectedLinesForwardHint": "Сдвинуть выбранные строки на {0} мс вперед {1}", + "moveSelectedLinesAndFollowingBackHint": "Сдвинуть выбранные и все последующие строки на {0} мс назад {1}", + "moveSelectedLinesAndFollowingForwardHint": "Сдвинуть выбранные и все последующие строки на {0} мс вперед {1}", + "moveAllLinesBackHint": "Сдвинуть все строки на {0} мс назад {1}", + "moveAllLinesForwardHint": "Сдвинуть все строки на {0} мс вперед {1}", + "guessStartNoLineSelected": "Подбор начала: строка не выбрана", + "guessStartTimeCodesLocked": "Подбор начала: временные коды заблокированы", + "guessStartNoWaveform": "Подбор начала: нет осциллограммы", + "guessStartNoRoomBeforePreviousLineX": "Подбор начала: у строки {0} нет места перед предыдущей строкой", + "guessStartLineXAlreadyAtBoundary": "Подбор начала: строка {0} уже начинается там, где начинается речь", + "guessStartNoSilenceFoundNearLineX": "Подбор начала: рядом со строкой {0} не найдено тишины", + "guessStartMovedLineXByYMs": "Подбор начала: начало строки {0} сдвинуто на {1} мс", + "guessEndNoLineSelected": "Подбор конца: строка не выбрана", + "guessEndTimeCodesLocked": "Подбор конца: временные коды заблокированы", + "guessEndNoWaveform": "Подбор конца: нет осциллограммы", + "guessEndNoRoomBeforeNextLineX": "Подбор конца: у строки {0} нет места перед следующей строкой", + "guessEndLineXAlreadyAtBoundary": "Подбор конца: строка {0} уже заканчивается там, где заканчивается речь", + "guessEndNoSilenceFoundNearLineX": "Подбор конца: рядом со строкой {0} не найдено тишины", + "guessEndMovedLineXByYMs": "Подбор конца: конец строки {0} сдвинут на {1} мс" }, "audioTrackIsNowX": "Аудиодорожка теперь \"{0}\"", "audioTrackX": "Аудиодорожка {0}", - "autoBreakHint": "Авто разрыв выбранных строк", + "autoBreakHint": "Расставить переносы в выбранных строках", "charactersPerSecond": "Символов/секунду: {0}", "chooseColumn": "Выбрать столбец", - "columnPaste": "Вставка колонки", + "columnPaste": "Вставка в столбец", + "commandPaletteTitle": "Палитра команд", + "commandPaletteSearchPlaceholder": "Начните вводить для поиска команд...", + "commandPaletteNoCommandsFound": "Подходящих команд нет", "createdEmptyTranslation": "Создан пустой перевод на основе текущих субтитров", "deleteText": "Удалить текст", "deleteTextAndShiftCellsUp": "Удалить текст и сдвинуть ячейки вверх", - "endTimeMustBeAfterStartTime": "Окончание должно произойти после начала.", + "endTimeMustBeAfterStartTime": "Время конца должно быть позже времени начала.", "errorLoad7Zip": "Похоже, этот файл представляет собой сжатый архив 7-Zip.\n\nПрограмма Subtitle Edit не может открыть сжатые файлы.", - "errorLoadBinaryZeroes": "Извините, этот файл содержит только двоичные нули!\n\nЕсли редактировали этот файл с помощью программы Subtitle Edit, вы можете найти резервную копию через пункт меню \"Файл\" > \"Восстановить авторезервную копию...\"...", + "errorLoadBinaryZeroes": "Извините, этот файл содержит только двоичные нули!\n\nЕсли вы редактировали этот файл в Subtitle Edit, резервную копию можно найти через меню \"Файл\" -> \"Восстановить из автосохранения...\"", "errorLoadGZip": "Похоже, этот файл представляет собой сжатый GZip-архив.\n\nПрограмма Subtitle Edit не может открыть сжатые файлы.", "errorLoadLargeFile": "Этот файл слишком большой, чтобы открыть его как файл субтитров.", "errorLoadVideoFilePrompt": "Похоже, это видеофайл:\n{0}\n\nВы можете открыть видео через \"Видео -> Открыть видео\" или перетащив видео на видеоплеер.\n\nВы хотите открыть его как видеофайл?", - "errorLoadJpg": "Похоже, это файл изображения в формате JPG.\n\nРедактирование субтитров не может открыть файлы изображений.", - "errorLoadPng": "Похоже, этот файл представляет собой изображение в формате PNG.\n\nРедактирование субтитров не может открыть файлы изображений.", + "errorLoadJpg": "Похоже, это файл изображения в формате JPG.\n\nSubtitle Edit не может открыть файлы изображений.", + "errorLoadPng": "Похоже, это файл изображения в формате PNG.\n\nSubtitle Edit не может открыть файлы изображений.", "errorLoadRar": "Похоже, этот файл представляет собой сжатый архив 7-Zip.\n\nПрограмма Subtitle Edit не может открыть сжатые файлы.", "errorLoadRawPgsPrompt": "Этот файл, по всей видимости, представляет собой необработанный поток PGS без заголовков Blu-ray SUP \"PG\", поэтому он не содержит временных меток.\n\nОбычно это происходит, когда дорожка Matroska PGS извлекается в \"сыром\" режиме. Для корректного отображения временных меток повторно извлеките дорожку в обычном режиме (например, \"mkvextract tracks\" без --raw) или откройте исходный файл Matroska непосредственно в Subtitle Edit.\n\nВы хотите импортировать изображения субтитров в любом случае, с автоматически сгенерированными временными метками, которые необходимо будет исправлять вручную?", "errorLoadSrr": "Похоже, это файл ReScene SRR.\n\nПрограмма Subtitle Edit не может открыть файлы SRR.", - "errorLoadTorrent": "Похоже, это файл BitTorrent.\n\nРедактирование субтитров не может открыть торрент-файлы.", + "errorLoadTorrent": "Похоже, это файл BitTorrent.\n\nSubtitle Edit не может открыть торрент-файлы.", "errorLoadZip": "Похоже, этот файл представляет собой сжатый ZIP-архив.\n\nПрограмма Subtitle Edit не может открыть сжатые файлы.", - "extractingWaveInfo": "Извлечение информации о волнах...", - "extractingShotChanges": "Извлечение информации о смене кадров...", - "failedToExtractWaveInfo": "Не удалось извлечь информацию о волне.", - "fixedRightToLeftUsingUnicodeControlCharactersX": "Исправлено написание справа налево с использованием управляющих символов Unicode в строках {0}", + "extractingWaveInfo": "Извлечение данных осциллограммы...", + "extractingShotChanges": "Извлечение смен планов...", + "failedToExtractWaveInfo": "Не удалось извлечь данные осциллограммы.", + "fixedRightToLeftUsingUnicodeControlCharactersX": "Исправлено направление справа налево с помощью управляющих символов Unicode, строк: {0}", "generatingSpectrogramDotDotDot": "Создание спектрограммы...", - "generatingWaveformDotDotDot": "Генерация волновой формы...", + "generatingWaveformDotDotDot": "Создание осциллограммы...", "insertEmptyTextAndShiftCellsDown": "Вставить пустой текст и сдвинуть ячейки вниз", "insertTextFromSubtitleDotDotDot": "Вставить текст из субтитров...", "copyTextFromOriginalToCurrent": "Скопировать текст из оригинала в текущий субтитр", - "insertedXTextsFromSubtitleY": "Вставлены {0} текстов из файла субтитров \"{1}\"", - "italicHint": "Выделенные строки/текст курсивом", - "joinedSubtitleLoaded": "Субтитры загружены", + "insertedXTextsFromSubtitleY": "Вставлено текстов из файла субтитров \"{1}\": {0}", + "italicHint": "Сделать курсивом выбранные строки/текст", + "joinedSubtitleLoaded": "Объединенные субтитры загружены", "lineXTextAndTimingChanged": "Строка {0}: Текст и время изменены", "lineXTextChangedFromYToZ": "Строка {0}: Текст изменен с \"{1}\" на \"{2}\"", "lineXTimingChanged": "Строка {0}: Время изменено", - "loadingWaveInfoFromCache": "Загрузка информации о волнах из кэша...", + "loadingWaveInfoFromCache": "Загрузка данных осциллограммы из кэша...", "clickToGenerateWaveform": "Нажать, чтобы сгенерировать осциллограмму", "waveformFfmpegNotFoundClickToSetUp": "FFmpeg не найден — щелкните по осциллограмме, чтобы настроить FFmpeg и сгенерировать осциллограмму", - "noTextInClipboard": "В буфере обмена нет текста", - "numberOfLinesEvenlyDistributedX": "Равномерно распределенные {0} строки", + "numberOfLinesEvenlyDistributedX": "Равномерно распределено строк: {0}", "oneLineCopiedFromOriginal": "Одна строка скопирована из оригинальных субтитров", "oneLineCopiedToOriginal": "Одна строка скопирована в оригинальный субтитр", + "onlineOnlyVideo": "Видео только в облаке", + "onlineOnlyVideoXSizeYDownloadAndOpen": "Видеофайл \"{0}\" ({1}) хранится только в облаке (например, в Dropbox или iCloud Drive), и перед открытием его нужно скачать.\n\nСкачать и открыть его сейчас?", "oneLineMerged": "Одна строка объединена", - "oneLineSwitched": "Одна линия переключилась", + "oneLineSwitched": "Одна строка поменяна местами", "overwriteExistingCells": "Перезаписать существующие ячейки", "overwriteOrShiftCellsDown": "Перезаписать/сдвинуть ячейки вниз", "parsingMatroskaFile": "Анализ файла Matroska...", + "readingDvdSubtitles": "Чтение субтитров DVD...", "pasteFromClipboardDotDotDot": "Вставить из буфера обмена...", "redoPerformed": "Повтор выполнен", "redoPerformedXActionLeft": "Повтор выполнен (осталось действий: {0})", - "removedUnicodeControlCharactersX": "Удалены управляющие символы Юникода из строк {0}", - "removedXBlankLines": "Удалены {0} пустые строки", + "removedUnicodeControlCharactersX": "Удалены управляющие символы Unicode, строк: {0}", + "removedXBlankLines": "Удалено пустых строк: {0}", "replacedXWithYCountZ": "Заменено \"{0}\" на \"{1}\" ({2} вхождений)", - "reversedStartAndEndingsForRightToLeftX": "Перевернутые начало и конец для чтения справа налево в {0} строках", + "reversedStartAndEndingsForRightToLeftX": "Начало и конец переставлены для RTL, строк: {0}", "ruleProfileIsX": "Профиль правил теперь \"{0}\"", - "saveLanguageFile": "Сохранение языкового файла", + "saveLanguageFile": "Сохранить языковой файл", "saveXFileAs": "Сохранить файл {0} как", "shiftTextCellsDown": "Сдвинуть текстовые ячейки вниз", "singleLineLength": "Длина строки: ", - "speedIsNowX": "Скорость теперь равна \"{0}\"", - "subtitleGridFormattingX": "Форматирование сетки: {0}", + "speedIsNowX": "Скорость: \"{0}\"", + "subtitleGridFormattingX": "Форматирование таблицы: {0}", "subtitleImportedFromMatroskaFile": "Субтитры импортированы из файла Matroska", "textDown": "Текст вниз", "textOnly": "Только текст", "textUp": "Текст вверх", "timeCodesOnly": "Только временные коды", - "xPropertiesDotDotDot": "{0} свойств...", + "xPropertiesDotDotDot": "Свойства {0}...", "totalCharacters": "Всего символов: {0}", - "unbreakHint": "Не разрывать выделенные строки", + "unbreakHint": "Убрать переносы в выбранных строках", "undoPerformed": "Отмена выполнена", "undoPerformedXActionLeft": "Отмена выполнена (осталось действий: {0})", "videoAndWaveformPreviewTextX": "Предварительный просмотр видео/волновой формы: {0}", - "xLinesCopiedFromOriginal": "{0} строк, скопированных из оригинального субтитра", - "xLinesCopiedToOriginal": "{0} строк скопировано в исходный субтитр", + "xLinesCopiedFromOriginal": "Скопировано строк из оригинальных субтитров: {0}", + "xLinesCopiedToOriginal": "Скопировано строк в оригинальные субтитры: {0}", "xLinesMerged": "Объединено строк: {0}", - "xLinesSelectedOfY": "{0} строк выбрано из {1}", - "xLinesSwitched": "{0} строк переключены", - "xShotChangedLoaded": "{0} изменения кадра загружены", + "xLinesSelectedOfY": "Выбрано строк: {0} из {1}", + "xLinesSwitched": "Поменяно местами строк: {0}", + "xShotChangedLoaded": "Загружено смен планов: {0}", "youtubeDlDownloadedSuccessfully": "Пакет \"yt-dlp\" успешно загружен.", "youtubeDlNotInstalledDownloadNow": "Пакет \"yt-dlp\" не установлен, а он необходим для воспроизведения онлайн-видео.\n\nСкачать сейчас?", "promptInsertSubtitleOverlap": "Вставленные строки будут перекрывать существующие строки.\n\nВставить всё равно?", "youtubeDlOutdatedDownloadNow": "\"yt-dlp\" устарел и может не работать с онлайн-видео.\n\nСкачать текущую версию?", "insertUnicodeSymbol": "Вставить символ Юникода", - "trimmedXLines": "Урезаны {0} строки субтитров", - "pastedXLinesOverSelectedLines": "Вставлено {0} строк поверх выделенных строк", + "trimmedXLines": "Обрезано строк субтитров: {0}", + "pastedXLinesOverSelectedLines": "Вставлено поверх выделенных строк: {0}", "pastedXOfYLinesOverSelectedLines": "Вставлено {0} из {1} строк поверх выделенных строк — остальные не поместились в выделение", - "openOriginalDifferentNumberOfSubtitlesXY": "Исходный файл субтитров содержит меньше субтитров, чем текущий файл субтитров.\n\n• Исходные субтитры: {0}\n• Текущие субтитры: {1}", + "insertedXLinesFromClipboard": "Вставлено строк из буфера обмена: {0}", + "openOriginalDifferentNumberOfSubtitlesXY": "Количество субтитров в оригинальном файле не совпадает с текущим файлом субтитров.\n\n• Оригинальные субтитры: {0}\n• Текущие субтитры: {1}", "originalTextReadOnly": "Оригинальный текст (только для чтения)", "originalTextEditMode": "Оригинальный текст (режим редактирования)", - "originalIsReadOnlyNotSaved": "Оригинальный подзаголовок является ссылкой только для чтения и не был сохранен", + "originalIsReadOnlyNotSaved": "Оригинальные субтитры открыты только для чтения и не были сохранены", "originalIsEmptyNotSaved": "В оригинальном субтитре нет текста, и он не был сохранён", - "originalIsReadOnlyReference": "Оригинальный подзаголовок доступен только для чтения", + "originalIsReadOnlyReference": "Оригинальные субтитры открыты только для чтения", + "closeTranslationQuestionXY": "Закрыть перевод \"{0}\"?\n\nРедактируемыми станут исходные субтитры \"{1}\". Сам файл перевода не изменится.", "allowEditOfOriginalSubtitle": "Разрешить редактирование оригинального субтитра", - "showAllOriginalLinesX": "Показать все исходные строки ({0} не имеют здесь совпадений)", + "showAllOriginalLinesX": "Показать все строки оригинала ({0} без пары здесь)", "showAllOriginalLinesHint": "Строки, для которых не найдено совпадение, отображаются в виде дополнительных строк, чтобы вы могли увидеть, чего не хватает в переводе.", - "showAllOriginalLinesNote": "Временные коды нельзя изменить, пока отображаются эти строки", - "showMatchingOriginalLinesX": "Показать только {0} соответствующие исходные строки", - "showMatchingOriginalLinesHint": "Остальные {0} исходные строки нигде не показаны.", - "showMatchingOriginalLinesNote": "Они остаются в файле, если вы не сохраните оригинал", + "showAllOriginalLinesNote": "Введите текст в дополнительную строку, чтобы добавить ее в свои субтитры", + "showMatchingOriginalLinesX": "Показать только совпадающие строки оригинала ({0})", + "showMatchingOriginalLinesHint": "Остальные строки оригинала ({0}) нигде не показываются.", + "showMatchingOriginalLinesNote": "Они остаются в файле, если только вы не сохраните оригинал", "allowEditHintReadOnly": "Оригинал отображается только для чтения и никогда не сохраняется, поэтому изменить его невозможно.", "allowEditHintAllLines": "На экране отображается весь оригинал, поэтому при сохранении сохраняются все строки.", "allowEditHintMatchingOnlyX": "Сохранение оригинала запишет только показанные строки — остальные {0} будут потеряны.", @@ -1127,7 +1236,7 @@ "sortedByEndTime": "Отсортировано по времени \"Конец\"", "sortedByNumber": "Отсортировано по номеру", "sortedByDuration": "Отсортировано по продолжительности", - "sortedByGap": "Отсортировано по отсутствию", + "sortedByGap": "Отсортировано по промежутку", "sortedByText": "Отсортировано по тексту", "sortedByTextTotalLength": "Отсортировано по общей длине текста", "sortedBySingleLineMaxLength": "Отсортировано по максимальной длине одной строки", @@ -1140,46 +1249,46 @@ "videoContrastSetTo": "Контраст: {0}", "colorHint": "Раскрасить выбранные строки", "removeFormattingHint": "Удалить форматирование из выделенных строк", - "assaResolutionResamplerDone": "Резолюция ASSA изменена.", - "snappedXTimesToFrames": "Временные коды {0} привязаны к кадрам со скоростью {1:0.###} кадров в секунду", + "assaResolutionResamplerDone": "Разрешение ASSA изменено.", + "snappedXTimesToFrames": "Привязано к кадрам ({1:0.###} кадр/с) временных кодов: {0}", "languageFileSavedToX": "Языковой файл сохранен в {0}", "fileExportedInFormatXToY": "Файл экспортирован в формате {0} в {1}", "fileExportedInFormatXToFileY": "Файл экспортирован в формате \"{0}\" в файл \"{1}\"", - "fixedXLines": "Исправлено {0} строк", - "transcriptionCompletedWithXLines": "Транскрипция завершена, осталось {0} строк", + "fixedXLines": "Исправлено строк: {0}", + "toolXChangedYLines": "{0}: изменено строк: {1}", + "transcriptionCompletedWithXLines": "Распознавание завершено, строк: {0}", "openSubtitleFileX": "Открыть файл субтитров \"{0}\"?", - "replacedXOccurrences": "Заменено {0} вхождений", "ffmpegDownloadedAndInstalledToX": "ffmpeg загружен и установлен в {0}", "nothingToSave": "Сохранить нечего", "formatLimitWarningTitle": "Превышен лимит формата", "formatLimitWarningXLinesExceedLimitsOfY": "{0} субтитров превышают ограничения формата \"{1}\":", "formatLimitWarningMaxXCharactersPerLine": "Максимальное количество символов в строке: {0}", - "formatLimitWarningMaxXLines": "Максимальное количество строк в субтитрах: {0}", - "formatLimitWarningTextWillBeRewrapped": "При сохранении эти субтитлы будут перенесены на другой экран или обрезаны, чтобы соответствовать размеру файла, поэтому файл не будет соответствовать тому, что показано здесь.", + "formatLimitWarningMaxXLines": "Максимум строк в субтитре: {0}", + "formatLimitWarningTextWillBeRewrapped": "При сохранении эти субтитры будут перенесены по-другому или обрезаны, поэтому файл не будет совпадать с тем, что показано здесь.", "formatLimitWarningLinesX": "Строки: {0}", - "formatLimitWarningSaveAnyway": "Сохраните в любом случае", + "formatLimitWarningSaveAnyway": "Все равно сохранить", "formatLimitWarningDoNotShowAgain": "Больше не показывать это предупреждение", - "nothingToSaveOriginal": "Ничего не нужно сохранять (оригинал)", + "nothingToSaveOriginal": "Нечего сохранять (оригинал)", "liveSpellCheckLanguageXLoaded": "Язык проверки орфографии в реальном времени {0} загружен", "downloadFfmpegTitle": "Скачать FFmpeg?", "downloadFfmpegQuestion": "FFmpeg необходим для воспроизведения онлайн-видео и для некоторых функций видеомонтажа.\n\nСкачать FFmpeg прямо сейчас?", "ffmpegNotFoundInstallHint": "FFmpeg не найден.\n\nПожалуйста, установите FFmpeg (например, через ваш менеджер пакетов), чтобы он был доступен в переменной PATH, или укажите путь к FFmpeg в разделе «Параметры» -> «Настройки».", - "selectCurrentSubtitleWhilePlayingOn": "Выбрать текущие субтитры во время воспроизведения: ВКЛ", - "selectCurrentSubtitleWhilePlayingOff": "Выбрать текущие субтитры во время воспроизведения: ВЫКЛ", + "selectCurrentSubtitleWhilePlayingOn": "Выбирать текущий субтитр при воспроизведении: ВКЛ", + "selectCurrentSubtitleWhilePlayingOff": "Выбирать текущий субтитр при воспроизведении: ВЫКЛ", "setUpLikeSe4Question": "Это импортирует сочетания клавиш и правила замены Subtitle Edit 4, а также применит тему, панель инструментов и внешний вид осциллограммы Subtitle Edit 4.\n\nПродолжить?", - "setUpLikeSe4ImportedSettingsX": "Импортированные настройки из Subtitle Edit 4:\n{0}", + "setUpLikeSe4ImportedSettingsX": "Импортированы настройки из Subtitle Edit 4:\n{0}", "setUpLikeSe4NoSettingsXmlFound": "Файл Subtitle Edit 4 Settings.xml не найден — применены значения по умолчанию Subtitle Edit 4.", - "setUpLikeSe4ShortcutsAddedX": "Добавлены/обновлены ярлыки: {0}", + "setUpLikeSe4ShortcutsAddedX": "Добавлено/обновлено сочетаний клавиш: {0}", "setUpLikeSe4ShortcutsSkippedX": "Сочетания клавиш пропущены (совпадение не найдено): {0}", "setUpLikeSe4ReplaceRulesAddedXY": "Добавлены правила замены: {0} (в {1} новых категориях)", - "setUpLikeSe4ThemeSet": "Тема оформления, значки на панели инструментов и звуковая волна настроены в соответствии с дизайном Subtitle Edit 4." + "setUpLikeSe4ThemeSet": "Тема, значки панели инструментов и осциллограмма настроены в стиле Subtitle Edit 4." }, "file": { "ebuSaveOptions": { "title": "Параметры сохранения EBU", "codePageNumber": "Номер кодовой страницы", - "diskFormatCode": "код формата диска", - "displayStandardCode": "Отобразить стандартный код", + "diskFormatCode": "Код формата диска", + "displayStandardCode": "Код стандарта отображения", "characterCodeTable": "Таблица символов", "languageCode": "Языковой код", "originalProgramTitle": "Оригинальное название программы", @@ -1189,82 +1298,100 @@ "translatorsName": "Имя переводчика", "subtitleListReferenceCode": "Справочный код списка субтитров", "countryOfOrigin": "Страна происхождения", - "timeCodeStatus": "статус временного кода", + "timeCodeStatus": "Статус временного кода", "timeCodeStartOfProgramme": "Временной код: Начало программы", "revisionNumber": "Номер редакции", "maxNoOfDisplayableChars": "Максимальное количество символов в строке", "maxNumberOfDisplayableRows": "Максимальное количество строк", - "diskSequenceNumber": "порядковый номер диска", + "diskSequenceNumber": "Порядковый номер диска", "totalNumberOfDisks": "Общее количество дисков", "textAndTimingInformation": "Текстовая и временная информация", - "justificationCode": "Код обоснования", + "justificationCode": "Код выравнивания", "verticalPosition": "Вертикальное положение", "marginTop": "Верхнее поле (для выравнивания субтитров по верхнему краю)", "marginBottom": "Поле снизу (для выравнивания субтитров по нижнему краю)", - "newLineRows": "Количество строк, добавленных новой строкой", + "newLineRows": "Число строк, добавляемых переводом строки", "teletext": "Телетекст", - "useBox": "Использовать рамку вокруг текста", + "useBox": "Использовать подложку под текстом", "doubleHeight": "Использовать двойную высоту для текста", "videoPreview": "Предварительный просмотр видео", "previewFont": "Пользовательский шрифт", - "previewFontDefault": "(используйте шрифт предварительного просмотра видео)", - "previewFontSample": "Я знаю, что быстрая бурая лиса перепрыгивает через ленивую собаку - 0123456789", + "previewFontDefault": "(шрифт предпросмотра видео)", + "previewFontSample": "Съешь же еще этих мягких французских булок, да выпей чаю - 0123456789", "errors": "Ошибки", "errorsX": "Ошибки: {0}", "maxLengthError": "Строка {0} превышает максимальную длину ({1}) на {2}: {3}", - "maxLengthErrorTeletextColored": "Строка {0}-{1}: 36 (а не {2}) должно быть максимальным количеством символов для цветного текста двойной высоты", - "maxLengthErrorTeletextWhite": "Строка {0}-{1}: 37 (а не {2}) должна быть максимальным количеством символов для белого текста двойной высоты", - "maxLengthErrorTeletextSingleHeight": "Строка {0}: 38 (а не {1}) должно быть максимальным количеством символов для белого текста одинарной высоты", - "discSequenceNumber": "Порядковый номер диска" + "maxLengthErrorTeletextColored": "Строка {0}-{1}: для цветного текста двойной высоты максимум 36 символов (а не {2})", + "maxLengthErrorTeletextWhite": "Строка {0}-{1}: для белого текста двойной высоты максимум 37 символов (а не {2})", + "maxLengthErrorTeletextSingleHeight": "Строка {0}: для белого текста одинарной высоты максимум 38 символов (а не {1})", + "discSequenceNumber": "Порядковый номер диска", + "programme": "Программа", + "discAndDisplay": "Диск и дисплей" }, "import": { - "importTimeCodes": "Импорт временных кодов...", "plainTextDotDotDot": "Простой текст...", "titleImportPlainText": "Импорт простого текста", - "csvXlsxCustomColumnsDotDotDot": "CSV/XLSX с пользовательскими столбцами...", - "titleImportCsvXlsxCustomColumns": "Импорт CSV/XLSX с пользовательскими столбцами", + "csvXlsxCustomColumnsDotDotDot": "CSV/XLSX/ODS с пользовательскими столбцами...", + "titleImportCsvXlsxCustomColumns": "Импорт CSV/XLSX/ODS с пользовательскими столбцами", "detectedSeparatorX": "Обнаружен разделитель: {0}", "csvXlsxFilterTitle": "CSV/XLSX", - "separatorTab": "Вкладка", - "separatorSpace": "Космос", - "imagesForOcrDotDotDot": "Изображения для распознавания текста...", + "separatorTab": "Табуляция", + "separatorSpace": "Пробел", + "imagesForOcrDotDotDot": "Изображения для OCR...", "timeCodesDotDotDot": "Временные коды...", - "subtitleWithManuallyChosenEncodingDotDotDot": "Субтитры с кодировкой, выбранной вручную...", + "subtitleWithManuallyChosenEncodingDotDotDot": "_Субтитры с выбором кодировки вручную...", "titleImportImages": "Импорт изображений", "importFileLabel": "Выбрать изображения для импорта (поддерживаются временные коды в именах файлов)", - "importFilesInfo": "Используйте имена файлов с временной кодировкой:\nstart_HH_MM_SS_MMM__end_HH_MM_SS_MMM[_index].ext\n\nПримеры:\n0_00_01_042__0_00_03_919_0001.png\n0_00_01_042__0_00_03_919.png\n\nПравила:\n• HH_MM_SS_MMM для времени начала и окончания.\n• Двойное подчеркивание разделяет начало и конец.\n• Необязательный индекс после времени окончания", + "importFilesInfo": "Используйте имена файлов с временными кодами:\nstart_HH_MM_SS_MMM__end_HH_MM_SS_MMM[_index].ext\n\nПримеры:\n0_00_01_042__0_00_03_919_0001.png\n0_00_01_042__0_00_03_919.png\n\nПравила:\n• HH_MM_SS_MMM для времени начала и конца\n• Двойное подчеркивание разделяет начало и конец\n• Необязательный индекс после времени конца", "formattingDotDotDot": "Форматирование...", - "imageBasedSubtitleForEditDotDotDot": "Субтитры на основе изображений для редактирования...", - "imageBasedSubtitleForOcrDotDotDot": "Субтитры на основе изображений для распознавания текста...", - "splitTextAt": "Разделить текст на", - "blankLines": "Пустые строки", - "oneLineIsOneSubtitle": "Одна строка — это один подзаголовок", - "twoLinesAreOneSubtitle": "Две строки — это один подзаголовок", + "imageBasedSubtitleForEditDotDotDot": "Субтитры-изображения для редактирования...", + "imageBasedSubtitleForOcrDotDotDot": "Субтитры-изображения для OCR...", + "dvdSubtitlesDotDotDot": "Субтитры с DVD (IFO/VOB)...", + "titleImportDvd": "Импорт субтитров с DVD", + "dvdIfoFile": "Файл IFO", + "dvdVobFiles": "Файлы VOB", + "dvdVideoStandard": "Стандарт видео", + "dvdStartRipping": "Начать извлечение", + "dvdRippingAborted": "Извлечение прервано", + "dvdOpenIfoFile": "Открыть файл DVD IFO", + "dvdAddVobFiles": "Добавить файлы VOB", + "dvdIfoFiles": "Файлы DVD IFO", + "dvdVobFileType": "Файлы DVD VOB", + "dvdDropHint": "Откройте файл IFO (VIDEO_TS\\VTS_01_0.IFO) или добавьте файлы VOB - либо перетащите их сюда", + "dvdNotAnIfoFileX": "{0} не является файлом DVD IFO", + "dvdMenuIfoNoTitleSetsX": "Рядом с {0} не найдены наборы разделов (VTS_xx_0.IFO)", + "dvdEncryptedXOfY": "{0} из {1} пакетов субтитров все еще зашифрованы CSS - эти файлы VOB были скопированы без расшифровки, поэтому некоторые изображения субтитров будут искажены.\n\nДля чистого результата сначала расшифруйте DVD программой для копирования DVD.\n\nВсе равно продолжить?", + "splitTextAt": "Разделять текст по", + "oneLineIsOneSubtitle": "Одна строка — один субтитр", + "twoLinesAreOneSubtitle": "Две строки — один субтитр", "importFilesDotDotDot": "Импорт файлов...", "multipleFiles": "Импорт из нескольких текстовых файлов (один файл — это один субтитр)", - "maxLineLength": "Максимальная длина линии", - "mergeShortLines": "Объединение коротких линий", - "fixed": "Зафиксированный", + "mergeShortLines": "Объединять короткие строки", + "fixed": "Фиксированная", "numberOfSubtitlesX": "Количество субтитров: {0}", - "numberOfSubtitlesXForcedY": "Количество субтитров: {0} ({1} принудительно)", - "gapMs": "Разрыв (мс)", - "useFixedDuration": "Использовать фиксированную Длительность", + "numberOfSubtitlesXForcedY": "Количество субтитров: {0} (принудительных: {1})", + "gapMs": "Промежуток (мс)", + "useFixedDuration": "Использовать фиксированную длительность", "fixedDurationMs": "Фиксированная длительность (мс)", - "alignViaSpeechToText": "Выравнивание временных кодов с помощью функции \"Преобразование речи в текст\"...", - "alignViaForcedAligner": "Выравнивание временных кодов с помощью принудительного выравнивателя...", + "alignViaSpeechToText": "Выровнять временные коды с помощью распознавания речи...", + "alignViaForcedAligner": "Выровнять временные коды принудительным выравниванием...", "forcedAlignerProgress": "Выравнивание... окно {0} из {1}, {2} из {3} строк", - "forcedAlignerSetupTitle": "Выравнивание временных кодов с помощью принудительного выравнивания", + "forcedAlignerSetupTitle": "Принудительное выравнивание временных кодов", "forcedAlignerSetupIntro": "Функция принудительного выравнивания сопоставляет уже имеющийся текст субтитров с аудиодорожкой, не выполняя предварительную транскрипцию. Длинные видео выравниваются по фрагментам, поэтому подходит любая длина.", - "forcedAlignerModel": "Модель элайнера", - "forcedAlignerDownloadEngine": "Скачать/обновить движок..." + "forcedAlignerEndsFromSpeech": "Задать время окончания по выделенной речи (медленно)", + "forcedAlignerEndsFromSpeechHint": "Принудительное выравнивание находит, где строка начинается, но не где она заканчивается, поэтому время окончания обычно рассчитывается по времени чтения. Если включено, из аудио сначала удаляются музыка и звуковые эффекты, и каждая строка заканчивается там, где затихает речь. С GPU занимает примерно столько же времени, сколько длится видео, - а без него во много раз дольше.", + "forcedAlignerIsolatingSpeech": "Выделение речи... {0}", + "forcedAlignerIsolatingSpeechFailed": "Не удалось выделить речь - время окончания задано по времени чтения.", + "forcedAlignerModel": "Модель выравнивания", + "forcedAlignerDownloadEngine": "Скачать/обновить движок...", + "forcedAlignerEstimatedXOfY": "{0} из {1} строк не удалось выровнять, и они размещены по времени чтения - их тайм-коды лишь приблизительны. Вероятно, сценарий длиннее того, что произносится в видео." }, "export": { "exportImagesProfiles": "Экспорт профилей изображений", - "leftRightMargin": "Левое/правое поле", - "topBottomMargin": "Верхний/нижний край", + "leftRightMargin": "Отступ слева/справа", "lineSpacingPercent": "Межстрочный интервал %", - "paddingLeftRight": "Отступы слева/справа", - "paddingTopBottom": "Набивка сверху/снизу", + "paddingLeftRight": "Внутренние отступы слева/справа", + "paddingTopBottom": "Внутренние отступы сверху/снизу", "previewTitle": "Предварительный просмотр - текущий размер: {0}x{1}, целевой размер: {2}x{3}, масштаб: {4}%", "titleExportDvdSup": "DVD-саппорт (MuxMan/Scenarist)", "titleExportVobSub": "VobSub (sub/idx)", @@ -1272,26 +1399,34 @@ "titleExportDostPng": "DOST/png", "titleExportFcpImage": "Final Cut Pro + изображение", "titleExportWebVttThumbnails": "Экспорт WebVTT (миниатюры)", - "titleExportCavena890": "Экспорт Кавена 890", + "titleExportCavena890": "Экспорт Cavena 890", "exportCavenaTranslatedTitle": "Переведённое название", "exportCavenaOriginalTitle": "Оригинальное название", "exportCavenaTranslator": "Переводчик", "exportCavenaComment": "Комментарий", "exportCavenaStartOfProgramme": "Начало программы", "titleExportDvbTeletext": "Телетекст DVB (Manzanita)", - "exportDvbTeletextPageNumber": "номер страницы телетекста", + "exportDvbTeletextPageNumber": "Номер страницы телетекста", "exportDvbTeletextSubtitleType": "Тип субтитров", - "exportDvbTeletextSubtitleTypeNormal": "Нормальный", - "exportDvbTeletextSubtitleTypeHearingImpaired": "Нарушение слуха", - "customTextFormatsDotDotDot": "Пользовательские форматы текста...", - "plainTextDotDotDot": "Простой текст...", + "exportDvbTeletextSubtitleTypeNormal": "Обычные", + "exportDvbTeletextSubtitleTypeHearingImpaired": "Для слабослышащих", + "exportPacCodePage": "Выбор кодовой страницы PAC", + "exportPacSecondaryCodePage": "Вторичная кодовая страница", + "customTextFormatsDotDotDot": "_Пользовательские текстовые форматы...", + "plainTextDotDotDot": "_Простой текст...", + "dialogueListDotDotDot": "Монтажный лист диалогов Excel (.xlsx)...", + "titleExportDialogueList": "Экспорт монтажного листа диалогов в Excel", + "dialogueListLineBreaksInCell": "Сохранять переносы строк внутри ячейки (выкл.: соединять строки через \" | \")", + "dialogueListHeaderRow": "Строка заголовка", + "dialogueListFramesFormat": "чч:мм:сс:фф (кадры)", + "dialogueListNoColumns": "Выберите хотя бы один столбец.", + "dialogueListEnd": "Конец", "customTextFormats": "Пользовательские форматы текста", "titleExportCustomFormat": "Экспорт в пользовательский текстовый формат", "editCustomFormat": "Редактировать пользовательский формат текста", "newCustomFormat": "Новый пользовательский формат текста", "deleteSelectedCustomTextFormatX": "Удалить выбранный пользовательский текстовый формат \"{0}\"?", - "timeCodeFormat": "формат временного кода", - "newLineFormat": "Новый формат строки", + "newLineFormat": "Формат перевода строки", "pleaseEnterNameForTheCustomFormat": "Пожалуйста, введите название для пользовательского формата", "titleExportPlainText": "Экспорт простого текста", "lineNumbers": "Номера строк", @@ -1302,18 +1437,31 @@ "addLineBetweenSubtitles": "Добавить строку между субтитрами", "titleExportDCinemaInteropPng": "D-Cinema interop/png", "titleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", + "titleExportDCinemaSmpte2014Mxf": "D-Cinema SMPTE 2014 (MXF)", + "titleExportDCinemaSmpte2014PngMxf": "D-Cinema SMPTE 2014/png (MXF)", "imageBasedSubtitleSaved": "Сохранены субтитры на основе изображений", "fullFrameImage": "Полнокадровое изображение", - "fullFrameImageHint": "Сделайте каждое изображение размером с кадр видео, разместив на его месте субтитры", + "fullFrameImageHint": "Сделать каждое изображение размером с кадр видео, с субтитром на своем месте", + "stereo3D": "3D", + "stereo3DHint": "Для 3D-видео: рисовать субтитр по одному разу в половине кадра для каждого глаза", + "halfSideBySide": "Half side-by-side (горизонтальная стереопара)", + "halfTopBottom": "Half top/bottom (вертикальная стереопара)", + "depth3D": "Глубина", + "depth3DHint": "Насколько субтитр выступает из экрана - положительное значение приближает его, отрицательное отодвигает назад", + "plane3D": "3D-плоскость", + "plane3DHint": "Задать каждому субтитру глубину, которую хранит для него 3D Blu-ray, из файла 3D-Plane (.ofs), созданного BD3D2MK3D или OFSExtractor. Глубина используется там, где в 3D-Plane ее нет", + "openPlane3DTitle": "Открыть файл 3D-Plane", + "unableToLoadPlane3DX": "Не удалось загрузить 3D-Plane: {0}", + "plane3DXDepthYToZ": "{0} (глубина от {1} до {2})", + "plane3DXNoDepth": "{0} (нет значений глубины)", "textEffect": "Текстовый эффект", "textEffectSettingsTitle": "Настройки текстовых эффектов", - "textEffectPreset": "Предустановка", - "textEffectStrength": "Сила", - "textEffectLetterSpacing": "межбуквенный интервал", + "textEffectStrength": "Интенсивность", + "textEffectLetterSpacing": "Межбуквенный интервал", "textEffectArcBend": "Изгиб", "textEffectWave": "Волна", "textEffectSoftShadow": "Мягкая тень", - "textEffectGradientGold": "Градиент (золото)", + "textEffectGradientGold": "Градиент (золотой)", "textEffectDoubleOutline": "Двойной контур", "textEffectNeonGlow": "Неоновое свечение", "textEffectExtrude3D": "3D-экструзия", @@ -1324,14 +1472,14 @@ "textEffectAnaglyph3D": "3D-очки", "textEffectIce": "Лед", "textEffectEmboss": "Тиснение", - "textEffectHollow": "Полая (только контур)", + "textEffectHollow": "Полый (только контур)", "textEffectMarble": "Мрамор", - "textEffectWood": "Древесина", + "textEffectWood": "Дерево", "textEffectLava": "Лава", - "textEffectBrushedSteel": "матовая сталь", + "textEffectBrushedSteel": "Шлифованная сталь", "textEffectCandyCane": "Леденец-трость", "textEffectRainbow": "Радуга", - "textEffectPolkaDots": "в горошек" + "textEffectPolkaDots": "В горошек" }, "statistics": { "title": "Статистика", @@ -1342,12 +1490,12 @@ "numberOfLinesX": "Количество строк субтитров: {0:#,##0}", "lengthInFormatXinCharactersY": "Количество символов в формате {0}: {1:#,###,##0}", "numberOfCharactersInTextOnly": "Количество символов только в тексте: {0:#,###,##0}", - "totalDuration": "Общая Длительность всех субтитров: {0:#,##0}", + "totalDuration": "Общая длительность всех субтитров: {0:#,##0}", "totalCharsPerSecond": "Всего символов в секунду: {0:0.0} секунд", "totalWords": "Общее количество слов в субтитрах: {0:#,##0}", - "numberOfItalicTags": "Количество курсивных тегов: {0:#,##0}", - "numberOfBoldTags": "Количество выделенных тегов: {0:#,##0}", - "numberOfUnderlineTags": "Количество подчеркиваний: {0:#,##0}", + "numberOfItalicTags": "Количество тегов курсива: {0:#,##0}", + "numberOfBoldTags": "Количество тегов полужирного: {0:#,##0}", + "numberOfUnderlineTags": "Количество тегов подчеркивания: {0:#,##0}", "numberOfFontTags": "Количество тегов шрифта: {0:#,##0}", "numberOfAlignmentTags": "Количество тегов выравнивания: {0:#,##0}", "lineLengthMinimum": "Минимальная длина субтитров: {0}", @@ -1358,8 +1506,8 @@ "singleLineLengthMaximum": "Максимальная длина одной строки: {0}", "singleLineLengthAverage": "Средняя длина одной строки: {0:#.###}", "singleLineLengthExceedingMaximum": "Длина одной строки - превышение максимального значения ({0} символов): {1} ({2:0.00}%)", - "singleLineWidthMinimum": "Толщина строки - минимум: {0} пикселей", - "singleLineWidthMaximum": "Ширина строки - максимум: {0} пикселей", + "singleLineWidthMinimum": "Ширина одной строки - минимум: {0} пикселей", + "singleLineWidthMaximum": "Ширина одной строки - максимум: {0} пикселей", "singleLineWidthAverage": "Средняя ширина одной строки: {0:#.###} пикселей", "singleLineWidthExceedingMaximum": "Ширина одной строки - превышение максимального значения ({0} пикселей): {1} ({2:0.00}%)", "durationMinimum": "Длительность - минимум: {0:0.000} секунд", @@ -1376,26 +1524,25 @@ "wordsPerMinuteMaximum": "Слов/мин - максимум: {0:0.000}", "wordsPerMinuteAverage": "Слов/мин - среднее: {0:0.000}", "wordsPerMinuteExceedingMaximum": "Слов/мин - превышение максимального значения ({0} слов в минуту): {1} ({2:0.00}%)", - "gapMinimum": "Минимальный интервал: {0:#,##0} мс", - "gapMaximum": "Максимальный интервал: {0:#,##0} мс", - "gapAverage": "Разница - среднее значение: {0:#,##0.##} мс", - "gapExceedingMinimum": "Разрыв - ниже минимума ({0:#,##0} мс): {1} ({2:0.00}%)", - "subtitles": "Субтитры", + "gapMinimum": "Промежуток - минимум: {0:#,##0} мс", + "gapMaximum": "Промежуток - максимум: {0:#,##0} мс", + "gapAverage": "Промежуток - среднее: {0:#,##0.##} мс", + "gapExceedingMinimum": "Промежуток - ниже минимума ({0:#,##0} мс): {1} ({2:0.00}%)", "words": "Слова", "totalDurationShort": "Общая продолжительность", - "timingAndPacing": "Время и темп", + "timingAndPacing": "Тайминг и темп", "minimumAverageMaximum": "минимум - среднее - максимум", "checks": "Проверки", - "againstCurrentProfile": "по отношению к текущему профилю", - "subtitleLength": "Длительность субтитров", + "againstCurrentProfile": "по текущему профилю", + "subtitleLength": "Длина субтитров", "cpsAboveOptimalX": "Выше оптимального количества символов в секунду ({0:0.##})", "cpsAboveMaximumX": "Превышение максимального количества символов в секунду ({0:0.##})", - "wpmAboveMaximumX": "Превыше максимального количества слов в минуту ({0:0.##})", + "wpmAboveMaximumX": "Выше максимума слов в минуту ({0:0.##})", "durationBelowMinimumX": "Продолжительность ниже минимальной ({0:0.###} с)", "durationAboveMaximumX": "Продолжительность выше максимальной ({0:0.###} с)", "lineTooLongX": "Слишком длинная строка (> {0})", "lineTooWideX": "Слишком широкая строка (> {0} пикселей)", - "gapBelowMinimumX": "Разница ниже минимума ({0:#,##0} мс)" + "gapBelowMinimumX": "Промежуток ниже минимума ({0:#,##0} мс)" }, "manualChosenEncoding": { "title": "Импорт субтитров с вручную выбранной кодировкой", @@ -1403,16 +1550,30 @@ "codePage": "Кодовая страница" }, "restoreAutoBackup": { - "title": "Восстановить автоматическую резервную копию", - "xBackups": "{0} резервных копий", - "openAutoBackupFolder": "Открытьпапку автоматического резервного копирования", - "restoreAutoBackupFile": "Восстановить файл автоматической резервной копии", + "title": "Восстановить из автосохранения", + "xBackups": "Резервных копий: {0}", + "openAutoBackupFolder": "Открыть папку автосохранений", + "restoreAutoBackupFile": "Восстановить файл автосохранения", "restoreXFromY": "Вы хотите восстановить \"{0}\" из {1}?", "deleteAllSubtitleBackups": "Вы хотите удалить все резервные файлы субтитров?", - "deleteAll": "Удалить все" + "deleteAll": "Удалить все", + "settingsBackupInfo": "Резервная копия Settings.json создается при запуске Subtitle Edit, не чаще одного раза в {0} дн. и только если настройки изменились. Хранятся последние {1} резервных копий.", + "settingsBackupInfoEveryStart": "Резервная копия Settings.json создается при каждом запуске Subtitle Edit, если настройки изменились. Хранятся последние {0} резервных копий.", + "settingsBackupOff": "Автоматическое резервное копирование настроек отключено (Параметры → Настройки → Файл).", + "lastSettingsBackupX": "Последняя резервная копия: {0}", + "noSettingsBackupsYet": "Резервных копий настроек пока нет", + "openSettingsBackupFolder": "Открыть папку резервных копий настроек", + "backUpSettingsNow": "Создать копию сейчас", + "settingsBackedUp": "Резервная копия текущих настроек создана.", + "restoreSettings": "Восстановить настройки", + "restoreSettingsFromX": "Вы хотите заменить текущие настройки резервной копией от {0}?\n\nСначала будет создана резервная копия текущих настроек. Некоторые изменения вступят в силу только после перезапуска Subtitle Edit.", + "settingsRestored": "Настройки восстановлены. Перезапустите Subtitle Edit, чтобы все изменения вступили в силу.", + "settingsRestoreFailed": "Не удалось восстановить настройки: {0}", + "settingsBackupNotValid": "резервная копия не является корректным файлом настроек, поэтому текущие настройки сохранены", + "deleteAllSettingsBackups": "Вы хотите удалить все файлы резервных копий настроек?" }, "propertiesDCinema": { - "title": "D-Cinema SMPTE Properties", + "title": "Свойства D-Cinema SMPTE", "generateIdAuto": "Сгенерировать новый идентификатор при сохранении", "subtitleId": "Идентификатор субтитра", "generateId": "Сгенерировать ID", @@ -1420,124 +1581,168 @@ "reelNumber": "Номер катушки", "issueDate": "Дата выпуска", "now": "Сейчас", - "editRate": "Редактировать скорость", - "timeCodeRate": "скорость временного кода", + "editRate": "Частота кадров (Edit rate)", + "timeCodeRate": "Частота временного кода", "startTime": "Время начала", - "font": "Шрифт", "fontId": "Идентификатор шрифта", "fontUri": "URI шрифта", - "generate": "Сгенерировать", - "fontColor": "Цвет шрифта", - "chooseColor": "Выбрать цвет", "fontEffect": "Эффект шрифта", - "effectColor": "Эффектный цвет", - "fontSize": "Размер шрифта", - "topBottomMargin": "Верхний/нижний край", - "fadeUpTime": "Время затухания", - "fadeDownTime": "Затухание", - "frames": "Рамки", + "effectColor": "Цвет эффекта", + "fadeUpTime": "Время появления", + "fadeDownTime": "Время исчезания", "zPosition": "Z-положение", "zPositionHelp": "Положительные числа отдаляют текст, отрицательные — приближают; если z-позиция равна нулю, то это двумерный текст", - "export": "Экспорт..." + "fontFile": "Файл шрифта", + "chooseFontFile": "Выберите файл шрифта", + "fontFileMissing": "Выберите файл шрифта TrueType/OpenType для встраивания в MXF-файл дорожки.", + "reelDuration": "Длительность части (reel)", + "reelDurationHint": "ЧЧ:ММ:СС:КК — длительность изображения, которую должен иметь каждый ресурс части DCP. Пусто — до последнего субтитра.", + "reelDurationInvalid": "Длительность части должна быть пустой или в формате ЧЧ:ММ:СС:КК." }, "webVtt": { - "setStylesForSelectedLinesTitle": "Настройте стили WebVTT для выбранных строк", + "setStylesForSelectedLinesTitle": "Задать стили WebVTT для выбранных строк", "voice": "Голос", "showVoiceColumn": "Показать столбец «Голос»", "voices": "Голоса", "newVoiceDotDotDot": "Новый голос...", "removeVoices": "Удалить голоса", - "voiceName": "Голосовое имя", + "voiceName": "Имя голоса", "browserPreview": "Предварительный просмотр в браузере", "importStylesTitle": "Импорт стилей WebVTT", "exportStylesTitle": "Экспорт стилей WebVTT", - "openStyleFileTitle": "Открыть файл WebVTT, чтобы импортировать стили из", + "openStyleFileTitle": "Открыть файл WebVTT для импорта стилей", "noStylesToImport": "В выбранном файле не найдено ни одного стиля", "duplicateStyleNamesX": "Повторяющиеся названия стилей: {0}", - "cueSettings": "Настройки метки для выравнивания", - "cueSettingsHint": "Настройки метки задаются при выравнивании по линии, например, \"line:20%\" для выравнивания по верхнему центру", + "cueSettings": "Параметры cue для выравнивания", + "cueSettingsHint": "Параметры cue, которые записываются при выравнивании строки, например \"line:20%\" для положения сверху по центру", "useXTimeStamp": "Использовать значение заголовка X-TIMESTAMP-MAP", "mergeLines": "Объединить строки с одинаковым текстом при загрузке", "mergeStyleTags": "Объединить теги стилей" }, - "compare": "Сравнение субтиров", - "previousDifference": "Предыдущая разница", - "nextDifference": "Следующая разница", + "compare": "Сравнить", + "previousDifference": "Предыдущее различие", + "nextDifference": "Следующее различие", "subtitlesNotAlike": "Субтитры не имеют ничего общего", "xNumberOfDifference": "Количество различий: {0}", "xNumberOfDifferenceAndPercentChanged": "Количество различий: {0} ({1:0.##}% измененных слов)", "xNumberOfDifferenceAndPercentLettersChanged": "Количество отличий: {0} ({1:0.##}% измененных букв)", "showOnlyDifferences": "Только различия", "compareOnlyInOneFile": "Только в одном файле", - "compareTextOrTimeDifference": "Разница во времени/текст", - "compareNumberDifference": "Разница чисел", + "compareTextOrTimeDifference": "Различие текста/времени", + "compareNumberDifference": "Различие номеров", "ignoreWhitespace": "Игнорировать пробелы", "ignoreWhitespaceHint": "Строки, отличающиеся только пробелами, табуляцией или переносами строк, не считаются отличающимися", "ignoreFormatting": "Игнорировать форматирование", "ignoreFormattingHint": "Строки, отличающиеся только тегами форматирования, такими как или {\\an8}, не считаются отличающимися", "showOnlyDifferencesInText": "Различия только в тексте", + "ignoreNumbering": "Игнорировать нумерацию", + "ignoreNumberingHint": "Строки, отличающиеся только номером, не считаются разными", + "ignoreTimeDifferenceMs": "Допуск по времени (мс)", + "ignoreTimeDifferenceMsHint": "Время начала и окончания, отличающееся на это число миллисекунд или меньше, не считается разным", + "compareDifferences": "Различия", + "compareTextDifferences": "Различия текста", + "compareCurrent": "Текущий", + "compareReference": "Эталон", + "compareEditable": "Редактируемый", + "compareEditableHint": "Изменения, сделанные здесь, переносятся в субтитры при нажатии \"Применить\"", + "compareReadOnly": "Только чтение", + "compareTakeFromReference": "Взять текст и тайминг из эталона", + "compareInsertFromReference": "Вставить эту строку в текущие субтитры", + "compareDeleteFromCurrent": "Удалить эту строку из текущих субтитров", + "compareTakeText": "Взять текст", + "compareTakeTiming": "Взять тайминг", + "compareEditLine": "Редактировать строку", + "compareEditHint": "Ctrl+Enter - сохранить, Esc - отмена", + "compareEdited": "Изменено", + "compareOnePendingChange": "1 несохраненное изменение", + "compareXPendingChanges": "Несохраненных изменений: {0}", + "compareDiscardXChanges": "Отменить изменения ({0}), сделанные в сравнении?", + "compareXChangesApplied": "Сравнение: применено изменений: {0}", + "compareChangeTextX": "№{0} текст из эталона", + "compareChangeTimingX": "№{0} тайминг из эталона", + "compareChangeTextAndTimingX": "№{0} текст и тайминг из эталона", + "compareChangeEditedX": "№{0} изменена", + "compareChangeInsertedX": "№{0} вставлена", + "compareChangeDeletedX": "№{0} удалена", + "compareSyncPoint": "Точка синхронизации", + "compareSyncPointHint": "Точка синхронизации - эти две строки всегда показываются парой, а строки выше и ниже выравниваются отдельно", + "compareSyncPickCurrent": "Точка синхронизации: использовать эту текущую строку", + "compareSyncPickReference": "Точка синхронизации: использовать эту строку эталона", + "compareSyncRemove": "Удалить точку синхронизации", + "compareClearXSyncPoints": "Очистить точки синхронизации ({0})", + "compareSyncCurrentPickedX": "Текущая №{0} выбрана точкой синхронизации - выберите соответствующую строку эталона и нажмите \"Синхронизировать\"", + "compareSyncReferencePickedX": "Эталон №{0} выбран точкой синхронизации - выберите соответствующую текущую строку и нажмите \"Синхронизировать\"", + "compareSyncWithCurrentX": "Синхронизировать с текущей №{0}", + "compareSyncWithReferenceX": "Синхронизировать с эталоном №{0}", + "compareSyncApply": "Синхронизировать", + "compareSyncPointSetXY": "Точка синхронизации задана: текущая №{0} и эталон №{1} теперь показываются парой", + "compareSyncAlreadyPairedXY": "Текущая №{0} и эталон №{1} уже показываются парой с одинаковым началом - синхронизировать нечего", + "compareSyncPointShiftedXYZW": "Точка синхронизации задана: текущие №{0}-№{1} сдвинуты на {2}, чтобы начинаться с эталона №{3}", + "compareChangeSyncShiftXYZ": "№{0}-№{1} сдвинуты на {2} (точка синхронизации)", + "compareTimingDeltaHint": "Насколько позже (+) или раньше (−) эталон начинается и заканчивается по сравнению с текущей строкой", "loadXFromFile": "Загрузить \"{0}\" из файла", - "saveCompareHtmlTitle": "Сохранить и сравнить HTML-файл", - "pickMatroskaTrackX": "Выбрать трек \"Матроска\" - {0}", - "pickTransportStreamTrackX": "Выберите путь транспортного потока - {0}", - "pickMp4TrackX": "Выберите трек в формате MP4 - {0}", + "compareLoadSavedFile": "Загрузить сохраненный файл", + "saveCompareHtmlTitle": "Сохранить сравнение в HTML", + "pickMatroskaTrackX": "Выбрать дорожку Matroska - {0}", + "pickTransportStreamTrackX": "Выбрать дорожку транспортного потока - {0}", + "dvdVobFilesMissingX": "Отсутствуют файлы VOB (найдено {0}%)", + "pickMp4TrackX": "Выбрать дорожку MP4 - {0}", + "pickMxfTrackX": "Выберите дорожку MXF - {0}", + "pickMpegTrackX": "Выберите дорожку MPEG - {0}", "rosettaProperties": "Свойства Timed Text Rosetta IMSC", "rosettaFontSize": "Размер шрифта (высота строки)", "propertyTimeBase": "Временная база", - "propertyFrameRateMultiplier": "множитель частоты кадров", - "propertyDropMode": "режим сброса", + "propertyFrameRateMultiplier": "Множитель частоты кадров", + "propertyDropMode": "Режим drop frame", "propertyDefaultStyle": "Стиль по умолчанию", "propertyDefaultRegion": "Регион по умолчанию", "propertyStyleAttributeName": "Название атрибута стиля", - "propertyTimeCodeFormat": "формат временного кода", - "propertyFileExtension": "Расширение файла", - "propertyTopOrigin": "Основа происхождения", - "propertyTopExtent": "Верхняя граница", - "propertyBottomOrigin": "Происхождение дна", - "propertyBottomExtent": "Нижняя граница", - "xProperties": "{0} свойств" + "propertyTopOrigin": "Начало верхней области", + "propertyTopExtent": "Размер верхней области", + "propertyBottomOrigin": "Начало нижней области", + "propertyBottomExtent": "Размер нижней области", + "xProperties": "Свойства {0}" }, "edit": { "modifySelection": { "title": "Изменить выделение", "contains": "Содержит", "startsWith": "Начинается с", - "endsWith": "Заканчивается", + "endsWith": "Заканчивается на", "notContains": "Не содержит", - "allUppercase": "Все заглавные буквы", + "allUppercase": "Все прописные", "odd": "Нечётное число", "even": "Четное число", "durationLessThan": "Длительность в мс <", "durationGreaterThan": "Длительность в мс >", "cpsLessThan": "CPS <", "cpsGreaterThan": "CPS >", - "lengthLessThan": "Длина <", - "lengthGreaterThan": "Длина >", - "pixelLengthGreaterThan": "Длина пикселя >", - "gapLessThan": "Разница в мс <", - "gapGreaterThan": "Разница в миллисекундах >", + "lengthLessThan": "Макс. длина строки <", + "lengthGreaterThan": "Макс. длина строки >", + "pixelLengthGreaterThan": "Ширина в пикселях >", + "gapLessThan": "Промежуток в мс <", + "gapGreaterThan": "Промежуток в мс >", "exactlyOneLine": "Ровно одна строка", "exactlyTwoLines": "Ровно две строки", "moreThanTwoLines": "Более двух строк", "bookmarked": "Добавлено в закладки", - "forced": "Принужденный", + "forced": "Принудительные", "bookmarkContains": "Закладка содержит", - "blankLines": "Пустые строки", - "hearingImpaired": "Нарушение слуха (СДС)", - "hearingImpairedBrackets": "Скобки [...]", + "hearingImpaired": "Для слабослышащих (SDH)", + "hearingImpairedBrackets": "Квадратные скобки [...]", "hearingImpairedCurlyBrackets": "Фигурные скобки {...}", - "hearingImpairedParentheses": "Скобки (...)", + "hearingImpairedParentheses": "Круглые скобки (...)", "hearingImpairedCustom": "Пользовательский", "hearingImpairedTextBeforeColon": "Текст перед двоеточием", - "hearingImpairedUppercaseLine": "строка верхнего регистра", + "hearingImpairedUppercaseLine": "Строка прописными", "hearingImpairedLineContains": "Строка содержит", "hearingImpairedMusicSymbols": "Только музыкальные символы", - "hearingImpairedInterjections": "Междометия", - "hearingImpairedSettingsHint": "Подробную информацию можно найти в разделе Инструменты > Удалить текст для слабослышащих", - "selectionNew": "Новый выбор", - "selectionAdd": "Добавить в выбор", - "selectionSubtract": "Вычесть из выделенного", - "selectionIntersect": "Пересечение с выделенной областью" + "hearingImpairedSettingsHint": "Параметры берутся из Инструменты > Удалить текст для слабослышащих", + "selection": "Выделение", + "selectionNew": "Новое выделение", + "selectionAdd": "Добавить к выделению", + "selectionSubtract": "Вычесть из выделения", + "selectionIntersect": "Пересечение с выделением" }, "multipleReplace": { "editRule": "Редактировать правило", @@ -1545,42 +1750,43 @@ "editCategory": "Редактировать категорию", "newCategory": "Новая категория", "categoryName": "Название категории", - "exportReplaceRules": "Правила экспорта", - "importReplaceRules": "Правила импорта", + "exportReplaceRules": "Экспорт правил", + "importReplaceRules": "Импорт правил", "noCategoriesSelected": "Категории правил не выбраны", "appliedRules": "Примененные правила", "findRule": "Найти правило", - "xLinesAffected": "{0:#,##0} строк затронуто", + "xLinesAffected": "Затронуто строк: {0:#,##0}", "deleteCategoryConfirm": "Удалить категорию '{0}'?", "deleteRuleConfirm": "Удалить правило '{0}'?", - "findWhat": "Найти, что", + "findWhat": "Что искать", "descriptionOptional": "Описание (необязательно)", - "invalidRegularExpressionX": "Недопустимое регулярное выражение: {0}", - "regularExpressionTooSlowX": "Регулярное выражение завершило работу через {0} секунд — правило пропущено, попробуйте более простой шаблон" + "regularExpressionTooSlowX": "Регулярное выражение завершило работу через {0} секунд — правило пропущено, попробуйте более простой шаблон", + "moveToCategory": "Переместить в категорию" }, "find": { "searchTextWatermark": "Поиск текста...", - "wholeWord": "Целое слово", - "findPrevious": "Найти _предыдущий", + "wholeWord": "Слово целиком", + "findPrevious": "Найти _предыдущее", "findNext": "_Найти следующее", - "replaceAndFindNext": "Заменить и найти следующий", + "replaceAndFindNext": "_Заменить и найти далее", "replaceAll": "Заменить _все", "replaceTextWatermark": "Заменить на...", "replaceIn": "Заменить/поиск в", "replaceInTextAndOriginal": "Текст и оригинальный текст", "replaceInTextOnly": "Только текст", - "replaceInOriginalOnly": "Только оригинальный текст" + "replaceInOriginalOnly": "Только оригинальный текст", + "replacedOneOccurrence": "Заменено одно вхождение" }, "regularExpressionContextMenu": { "wordBoundary": "Граница слова (\\b)", - "nonWordBoundary": "Граница неслова (\\B)", + "nonWordBoundary": "Не граница слова (\\B)", "newLine": "Новая строка (\\r\\n)", "newLineShort": "Новая строка (\\n)", "anyDigit": "Любая цифра (\\d)", - "nonDigit": "Нецифровой (\\D)", + "nonDigit": "Не цифра (\\D)", "anyCharacter": "Любой символ (.)", - "anyWhitespace": "Любой пробел (\\s)", - "nonSpaceCharacter": "Непробелевой символ (\\S)", + "anyWhitespace": "Любой пробельный символ (\\s)", + "nonSpaceCharacter": "Не пробельный символ (\\S)", "zeroOrMore": "Ноль или более (*)", "oneOrMore": "Один или несколько (+)", "inCharacterGroup": "В группе символов ([test])", @@ -1592,61 +1798,75 @@ "pleaseSelectExactlyOneSubtitle": "Пожалуйста, выберите ровно один субтитр." }, "sourceView": { - "discardChangesTitle": "Отменить изменения?", "discardChanges": "Исходный текст изменен.\nОтменить изменения?", - "xLinesYSubtitles": "{0} строк, {1} субтитров", - "xLinesYSubtitlesZErrors": "{0} строк, {1} субтитров, {2} ошибок", + "xLinesYSubtitles": "Строк: {0}, субтитров: {1}", + "xLinesYSubtitlesZErrors": "Строк: {0}, субтитров: {1}, ошибок: {2}", "couldNotParseAsX": "Не удалось разобрать как {0}", - "selectedXCharactersYLines": "Выбрано: {0} символов в {1} строке(ах)", - "replacedXOccurrences": "Заменено {0} вхождений", + "readAsXUseAsY": "Исходный текст не удалось прочитать как {1}, но удалось прочитать как {0}.\nИспользовать строки и продолжить сохранять как {1}?", + "selectedXCharactersYLines": "Выбрано символов: {0}, строк: {1}", + "replacedXOccurrences": "Заменено вхождений: {0}", "invalidRegularExpression": "Недопустимое регулярное выражение", "regularExpressionTooSlowX": "Регулярное выражение перестало работать через {0} секунд — попробуйте более простой шаблон", - "moveLineUp": "Позиция переместится", - "moveLineDown": "Переместите линию вниз", - "duplicateLine": "Повторная строка", + "moveLineUp": "Переместить строку вверх", + "moveLineDown": "Переместить строку вниз", + "duplicateLine": "Дублировать строку", "deleteLine": "Удалить строку", "closeSearch": "Закрыть поиск" }, "tools": { "aiReview": { - "title": "Обзор ИИ", - "review": "Обзор", - "editPrompt": "Редактировать подсказку...", - "editPromptTitle": "Редактировать запрос на проверку", - "promptInfo": "Инструкции, отправленные модели: {language} заменяется языком субтитров.", - "protocolInfo": "Subtitle Edit добавляет к запросу строгий JSON-контракт: строки отправляются в виде пронумерованного JSON, и модель должна ответить корректным JSON, содержащим только измененные строки. Ответы, нарушающие контракт, повторяются, а затем пропускаются.", - "resetToDefault": "Сбросить до значений по умолчанию", - "applyXFixes": "Применить {0} исправлений", - "xSuggestionsYSelected": "{0} предложений - {1} выбрано", + "title": "Проверка с помощью ИИ", + "review": "Проверить", + "editPrompt": "Изменить промпт...", + "editPromptTitle": "Изменить промпт проверки", + "promptInfo": "Инструкции для модели: {language} заменяется языком субтитров.", + "protocolInfo": "Subtitle Edit добавляет к промпту строгий JSON-контракт: строки отправляются в виде пронумерованного JSON, и модель должна ответить корректным JSON, содержащим только измененные строки. Ответы, нарушающие контракт, запрашиваются повторно, а затем пропускаются.", + "resetToDefault": "Сбросить по умолчанию", + "applyXFixes": "Применить исправления: {0}", + "xSuggestionsYSelected": "Предложений: {0}, выбрано: {1}", "reviewingLineXOfY": "Проверка строки {0} из {1}...", "reviewDone": "Проверка завершена - {0} предложений в {1} строках", "noIssuesFound": "Проблем не обнаружено", - "categorySpelling": "Написание", + "categorySpelling": "Орфография", "categoryGrammar": "Грамматика", "categoryPunctuation": "Пунктуация", - "categoryCasing": "Корпус", - "categoryOther": "Другой", - "xNeedACloserLook": "{0} предложений требуют более внимательного рассмотрения", - "lineX": "Строка {0}", + "categoryCasing": "Регистр", + "xNeedACloserLook": "Требуют внимательной проверки: {0}", "linesXToY": "Строки {0}-{1}", "largeChangeWarning": "Значительные изменения — похоже на переписывание текста, внимательно проверьте", - "mismatchWarning": "Не похож на оригинал — может принадлежать к другой линейке", + "mismatchWarning": "Не похоже на оригинал — возможно, относится к другой строке", "engineError": "Не удалось связаться с движком ИИ: {0}", - "playCurrentLineHint": "Воспроизвести выбранную строку в видеоплеере и поставить на паузу в конце (также можно дважды щелкнуть по строке)" + "playCurrentLineHint": "Воспроизвести выбранную строку в видеоплеере и поставить на паузу в конце (также можно дважды щелкнуть по строке)", + "editAfterHint": "Щелкните текст выбранной строки, чтобы изменить исправление перед применением (Enter - сохранить, Escape - отмена)", + "template": "Шаблон", + "templatePlaceholder": "Выберите шаблон для замены промпта", + "templateStandard": "Стандартная вычитка", + "templateSpeechToText": "Очистка после распознавания речи", + "templateMachineTranslation": "Исправление машинного перевода", + "templateSdh": "SDH / для слабослышащих", + "referenceContext": "Справочный контекст", + "referenceContextInfo": "Необязательно. Имена, персонажи, глоссарий, синопсис или заметки о стиле - модель считает это главным источником для имен и терминов. Отправляется с каждым пакетом.", + "referenceContextPlaceholder": "Имена: Кайто, тетя Мэй, доктор Холлис\nТермины: Синкансэн, варп-ядро\nСинопсис: Кайто едет в Токио, чтобы найти пропавшего отца.", + "generateContext": "Создать с помощью ИИ", + "generateContextHint": "Выбранный движок ИИ прочитает субтитры и составит имена, термины и синопсис - проверьте результат перед использованием", + "generatingContextPartXOfY": "Чтение части {0} из {1}...", + "generatingContextSynopsis": "Составление синопсиса...", + "replaceContextQuestion": "Заменить текущий справочный контекст?", + "noContextGenerated": "Движок ИИ не вернул пригодной справочной информации." }, "aiAssistant": { "title": "ИИ-помощник", - "currentLine": "Текущая линия", + "currentLine": "Текущая строка", "contextLines": "Контекст (строки до и после)", - "fixErrors": "Исправление ошибок", - "fitReadingSpeed": "Подходящая скорость чтения", - "makeFormal": "Более формальный", - "makeInformal": "Более неформальный стиль", + "fixErrors": "Исправить ошибки", + "fitReadingSpeed": "Подогнать под скорость чтения", + "makeFormal": "Более официально", + "makeInformal": "Более разговорно", "askPlaceholder": "Спросить об этой строке или попросить внести изменения...", "ask": "Спросить", - "result": "Предположение", + "result": "Предложение", "apply": "Применить к строке", - "hint": "Искусственный интеллект-помощник для этой строки", + "hint": "ИИ-помощник для этой строки", "showReasoning": "Показать рассуждения модели" }, "fixCommonErrors": { @@ -1654,144 +1874,148 @@ "next": "&Далее >", "fixes": "Исправления", "removedEmptyLine": "Удалить пустую строку", - "ruleDetailsDotDotDot": "Подробности правил...", + "ruleDetailsDotDotDot": "Подробности правила...", "showOnlyThisRule": "Показать только исправления, внесенные этим правилом", - "appliedRulesForLineX": "Применено(ы) правило(ы) для строки {0}", + "appliedRulesForLineX": "Примененные правила для строки {0}", "ruleX": "Правило: {0}", "removedEmptyLineAtTop": "Удалить пустую строку вверху", "removedEmptyLineAtBottom": "Удалить пустую строку внизу", "removedEmptyLineInMiddle": "Удалить пустую строку посередине", "removedEmptyLinesUnusedLineBreaks": "Удалить пустые строки/неиспользуемые переносы строк", - "fixOverlappingDisplayTimes": "Исправлена ошибка, из-за которой время отображения накладывалось друг на друга", - "fixShortDisplayTimes": "Исправить короткое время отображения", - "fixLongDisplayTimes": "Исправлено длительное время отображения", - "fixShortGaps": "Устранить короткие зазоры", - "fixShortGap": "Устранить короткий зазор", + "fixOverlappingDisplayTimes": "Исправить перекрывающееся время показа", + "fixShortDisplayTimes": "Исправить слишком короткое время показа", + "fixLongDisplayTimes": "Исправить слишком долгое время показа", + "fixShortGaps": "Исправить короткие промежутки", + "fixShortGap": "Исправить короткий промежуток", "fixInvalidItalicTags": "Исправить некорректные теги курсива", "removeUnneededSpaces": "Удалить ненужные пробелы", "removeUnneededPeriods": "Удалить ненужные точки", "fixCommas": "Исправить запятые", "fixMissingSpaces": "Исправить пропущенные пробелы", - "breakLongLines": "Преодолеть длинные очереди", + "breakLongLines": "Разбить длинные строки", "removeLineBreaks": "Удалить переносы строк в коротких текстах, содержащих всего одно предложение", "removeLineBreaksAll": "Удалить переносы строк в коротких текстах (кроме диалогов)", - "removeLineBreaksPixelWidth": "Неразрывные субтитлы, которые помещаются в одну строку (ширина в пикселях)", - "fixUppercaseIInsideLowercaseWords": "Исправлена ошибка распознавания текста: заглавная буква \"i\" внутри строчных слов", - "fixDoubleApostrophes": "Заменить символы двойного апострофа ('') на одинарную кавычку (\")", + "removeLineBreaksPixelWidth": "Убрать переносы в субтитрах, которые помещаются в одну строку (ширина в пикселях)", + "fixUppercaseIInsideLowercaseWords": "Исправить заглавную 'I' внутри слов в нижнем регистре (ошибка OCR)", + "fixDoubleApostrophes": "Заменить двойной апостроф ('') на двойную кавычку (\")", + "fixMisreadQuotes": "Исправить апострофы, ошибочно распознанные как двойные кавычки (OCR, английский)", "addPeriods": "Добавлять точку после строк, где следующая строка начинается с заглавной буквы", "startWithUppercaseLetterAfterParagraph": "Начинать с заглавной буквы после абзаца", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Начинать с заглавной буквы после точки внутри абзаца", "startWithUppercaseLetterAfterColon": "Начинать с заглавной буквы после двоеточия/точки с запятой", - "fixLowercaseIToUppercaseI": "Исправить строчную букву 'i' на 'I' (английский)", - "fixCommonOcrErrors": "Исправление распространенных ошибок распознавания текста (с использованием списка замены OCR)", + "fixLowercaseIToUppercaseI": "Исправить одиночную строчную 'i' на 'I' (английский)", + "fixCommonOcrErrors": "Исправить типичные ошибки OCR (по списку замен OCR)", "removeSpaceBetweenNumber": "Удалить пробел между цифрами", - "breakDialogsOnOneLine": "Разделение диалоговых окон на одну строку", - "removeDialogFirstInNonDialogs": "Удалить тире в первой строке, если в тексте нет диалоговых окон", - "normalizeStrings": "Нормализация строк", - "fixTurkishAnsi": "Исправить турецкие буквы ANSI (исландские) в соответствии с кодировкой Unicode", + "breakDialogsOnOneLine": "Разбить диалоги, записанные в одну строку", + "removeDialogFirstInNonDialogs": "Удалить тире в начале первой строки, если это не диалог", + "normalizeStrings": "Нормализовать строки", + "fixTurkishAnsi": "Исправить турецкие буквы ANSI (исландская кодировка) на Unicode", "fixDanishLetterI": "Исправить датскую букву 'i'", "fixSpanishInvertedQuestionAndExclamationMarks": "Исправить испанские перевернутые вопросительные и восклицательные знаки", "addMissingQuote": "Добавить недостающую кавычку (\")", "addMissingQuotes": "Добавить недостающие кавычки (\")", - "removeHyphensSingleLine": "Удалить диалоговые тире в одинарной строке", - "fixHyphensInDialogs": "Исправить тире в диалоговых окнах с помощью стиля: {0}", - "addMissingQuotesExample": "\"Как дела?\" -> \"Как дела?\"", + "removeHyphensSingleLine": "Удалить тире диалога в однострочных субтитрах", + "fixHyphensInDialogs": "Исправить тире в диалогах по стилю: {0}", + "addMissingQuotesExample": "\"Как дела? -> \"Как дела?\"", "removedEmptyLinesUnusedLineBreaksExample": "Содержит только одну допустимую строку!
-> Содержит только одну допустимую строку!", "fixCommasExample": ",, -> ,", - "removeLineBreaksExample": "Фубар! -> Фубар!", + "removeLineBreaksExample": "Фу
бар! -> Фу бар!", "fixDoubleApostrophesExample": "''Имеет двойные одинарные кавычки'' -> \"Имеет одинарные двойные кавычки\"", + "fixMisreadQuotesExample": "\"Привет\" -> \"Привет\"", "addPeriodsExample": "Привет мир -> Привет мир.", - "startWithUppercaseLetterAfterParagraphExample": "p1: Фубар! || p2: Фубар! -> p1: Фубар! || p2: Фубар!", - "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Привет! Как вы? -> Привет! Как вы?", - "startWithUppercaseLetterAfterColonExample": "Диктор: Привет, мир! -> Диктор: Привет, мир!", + "startWithUppercaseLetterAfterParagraphExample": "p1: Фубар! || p2: фубар! -> p1: Фубар! || p2: Фубар!", + "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Привет! как дела? -> Привет! Как дела?", + "startWithUppercaseLetterAfterColonExample": "Диктор: привет, мир! -> Диктор: Привет, мир!", "removeHyphensSingleLineExample": "- Фубар. -> Фубар.", "fix3PlusLinesExample": "Фу
бар
баз! -> Фу бар баз!", "fix3PlusLine": "Исправить субтитры, содержащие более двух строк", "fix3PlusLines": "Исправить субтитры, содержащие более двух строк", "analysing": "Анализ...", "nothingToFix": "Ничего не нужно исправлять :)", - "log": "Бревно", + "log": "Журнал", "nothingFixableBut": "Ничего не удалось исправить автоматически. В субтитрах обнаружены ошибки — подробности см. в журнале", - "xFixedBut": "{0} проблем исправлено, но в субтитрах по-прежнему содержатся ошибки — подробности см. в журнале", - "xCouldBeFixedBut": "{0} проблем удалось исправить, но в субтитрах по-прежнему будут ошибки — подробности см. в журнале", + "xFixedBut": "Исправлено проблем: {0}, но в субтитрах все еще есть ошибки — подробности в журнале", + "xCouldBeFixedBut": "Можно исправить проблем: {0}, но в субтитрах все равно останутся ошибки — подробности в журнале", "numberOfImportantLogMessages": "{0} важных сообщений журнала!", "fixedOkXY": "Исправлено и ОК - '{0}': {1}", "xFixesApplied": "Применены исправления: {0}", - "xFixesYSelected": "{0} исправлений - {1} выбрано", - "fixFirstLetterToUppercaseAfterParagraph": "Исправить первую букву после абзаца, сделав её заглавной", + "xFixesYSelected": "Исправлений: {0}, выбрано: {1}", + "fixFirstLetterToUppercaseAfterParagraph": "Заглавная первая буква после абзаца", "mergeShortLine": "Объединить короткую строку (одно предложение)", "mergeShortLineAll": "Объединить короткие строки (все, кроме диалогов)", - "breakLongLine": "Разорвать длинную линию", - "fixLongDisplayTime": "Исправлено длительное время отображения", - "fixInvalidItalicTag": "Исправлена ошибка с некорректным курсивным тегом", - "fixShortDisplayTime": "Исправить короткое время отображения", - "fixOverlappingDisplayTime": "Исправлена ошибка, из-за которой время отображения перекрывалось", + "breakLongLine": "Разбить длинную строку", + "fixLongDisplayTime": "Исправить слишком долгое время показа", + "fixInvalidItalicTag": "Исправить некорректный тег курсива", + "fixShortDisplayTime": "Исправить слишком короткое время показа", + "fixOverlappingDisplayTime": "Исправить перекрывающееся время показа", "fixInvalidItalicTagsExample": "Какое мне дело? -> Какое мне дело?", "removeUnneededSpacesExample": "Эй ты ; там. -> Эй ты; там.", - "removeUnneededPeriodsExample": "Эй ты! -> Эй ты!", - "fixMissingSpacesExample": "Эй.Ты. -> Эй.Ты.", + "removeUnneededPeriodsExample": "Эй, ты!. -> Эй, ты!", + "fixMissingSpacesExample": "Эй.Ты. -> Эй. Ты.", "fixUppercaseIInsideLowercaseWordsExample": "Земля плоская. -> Земля плоская.", "fixLowercaseIToUppercaseIExample": "Какая мне разница? -> Какая мне разница?.", "startTimeLaterThanEndTime": "Текст номер {0}: Время начала позже времени окончания: {4}{1} -> {2} {3}", "unableToFixStartTimeLaterThanEndTime": "Не удалось исправить текст номер {0}: Время начала позже времени окончания: {1}", "xFixedToYZ": "{0} исправлено на: {1}{2}", "unableToFixTextXY": "Не удалось исправить текст номер {0}: {1}", - "unneededSpace": "Ненужное пространство", - "unneededPeriod": "Ненужный период", + "unneededSpace": "Лишний пробел", + "unneededPeriod": "Лишняя точка", "fixMissingSpace": "Исправить пропущенный пробел", "fixUppercaseIInsideLowercaseWord": "Исправить заглавную букву 'i' внутри слова, написанного строчными буквами", "fixMissingPeriodAtEndOfLine": "Добавить недостающую точку в конце строки", "refreshFixes": "Обновить доступные исправления", - "autoBreak": "Авто ибр", - "unbreak": "&Неразрыв", + "autoBreak": "Авто&перенос", + "unbreak": "&Убрать переносы", "fixDoubleDash": "Исправить '--' -> '...'", "fixDoubleGreaterThan": "Удалить '>>'", "fixEllipsesStart": "Удалить начальные многоточия (...)", "fixMissingOpenBracket": "Исправить отсутствующие [ или ( в строке", "fixMusicNotation": "Заменить музыкальные символы (например, âTª) на предпочитаемый символ", - "fixDoubleDashExample": "'Ого... ну да!' -> 'Ого... ну да!'", + "fixDoubleDashExample": "'Ого-- ну да!' -> 'Ого... ну да!'", "fixDoubleGreaterThanExample": "'>> Роберт: Привет, чувак!' -> 'Роберт: Привет, чувак!'", "fixEllipsesStartExample": "'...а потом мы' -> 'а потом мы'", - "fixMissingOpenBracketExample": "[лязг] Осторожно!' -> '[лязг] Осторожно!'", + "fixMissingOpenBracketExample": "'лязг] Осторожно!' -> '[лязг] Осторожно!'", "fixMusicNotationExample": "'âTª sweet dreams are' -> '♫ sweet dreams are'", - "fixOcrErrorExample": "Не надо -> Не", + "fixOcrErrorExample": "Пр0вет -> Привет", "fixSpaceBetweenNumbersExample": "1 100 -> 1100", "fixDialogsOneLineExample": "Привет, Джон! - Привет, Ида! -> Привет, Джон!
- Привет, Ида!", "removeDialogFirstInNonDialogsExample": "- Как дела? -> Как дела?", "fixContinuationStyleX": "Исправить стиль продолжения: {0}", "fixUnnecessaryLeadingDots": "Удалить ненужные начальные точки", - "fixCommonErrorsProfiles": "Исправление распространенных ошибок в профилях", - "fixCommonOcrErrorsStep1": "Устранение распространенных ошибок, шаг 1 (Выбрать способы исправления)", - "searchRulesDotDotDot": "Правила поиска...", + "fixCommonErrorsProfiles": "Профили исправления типичных ошибок", + "fixCommonOcrErrorsStep1": "Исправление типичных ошибок, шаг 1 (выбор исправлений)", + "searchRulesDotDotDot": "Поиск правил...", "goToApplyFixes": "Перейти к применению исправлений", "backToFixList": "Вернуться к списку исправлений", - "fixCommonOcrErrorsStep2": "Шаг 2: Устранение распространенных ошибок (применение исправлений)", - "fixCommonOcrErrorsStep2FixesFoundX": "Устранение распространенных ошибок, шаг 2 - Исправлено: {0}", + "fixCommonOcrErrorsStep2": "Исправление типичных ошибок, шаг 2 (применение исправлений)", + "fixCommonOcrErrorsStep2FixesFoundX": "Исправление типичных ошибок, шаг 2 - найдено исправлений: {0}", "action": "Действие", "applySelectedFixes": "Применить выбранные исправления", - "unbreakShortLine": "Неразрывная короткая линия", + "unbreakShortLine": "Убрать перенос в короткой строке", "fixText": "Исправить текст", "removeSpaceBetweenNumbers": "Удалить пробел между цифрами", "fixDialogsOnOneLine": "Исправить диалоги в одной строке" }, "adjustDurations": { - "title": "Отрегулировать Длительность", + "title": "Настроить длительность", "adjustVia": "Настроить через", "recalculate": "Пересчитать", "addSeconds": "Добавить секунды", - "note": "Примечание: Время отображения не будет совпадать со временем начала следующего текста", - "fixed": "Зафиксированный", - "extendOnly": "Продление только", + "note": "Примечание: время показа не будет заходить на начало следующего текста", + "fixed": "Фиксированная", + "extendOnly": "Только удлинять", "recalculateRequiresOcrNote": "Функция пересчета недоступна — один или несколько субтитров не содержат текста, распознанного с помощью OCR. Сначала выполните распознавание текста." }, "applyDurationLimits": { - "title": "Применить ограничения по продолжительности", - "fixMinDurationMs": "Установить минимальную Длительность (мс)", - "doNotGoPastShotChange": "Не переходь за линию смены кадра", - "fixMaxDurationMs": "Установить максимальную Длительность (мс)", + "title": "Применить ограничения длительности", + "fixMinDurationMs": "Исправлять минимальную длительность (мс)", + "doNotGoPastShotChange": "Не заходить за смену плана", + "fixMaxDurationMs": "Исправлять максимальную длительность (мс)", + "fixMinDurationFrames": "Исправить минимальную длительность (кадры)", + "fixMaxDurationFrames": "Исправить максимальную длительность (кадры)", "minimumDurationMilliseconds": "Минимальная длительность (миллисекунды):", - "maximumDurationMilliseconds": "Максимальная продолжительность (миллисекунды):", - "maxDurationShouldBeHigherThanMinDuration": "Максимальная Длительность должна быть больше минимальной продолжительности", + "maximumDurationMilliseconds": "Максимальная длительность (миллисекунды):", + "maxDurationShouldBeHigherThanMinDuration": "Максимальная длительность должна быть больше минимальной", "changedDurationFromXToYCommentZ": "Изменена длительность с {0} на {1} {2}", "onlyPartialFixed": "(только частичное исправление)", "unfixableX": "Неисправимо: {0}", @@ -1800,237 +2024,339 @@ "noChangesNeeded": "Изменения не требуются" }, "applyMinGaps": { - "title": "Свести к минимуму промежутки между субтитрами", + "title": "Применить минимальные промежутки между субтитрами", "numberOfGapsFixedX": "Количество примененных минимальных промежутков: {0}", "minFramesBetweenLines": "Минимальное количество кадров между строками", "minMsBetweenLines": "Минимальное количество миллисекунд между строками", "changedGapFromXToYCommentZ": "Изменен промежуток с {0} на {1} {2}" }, "beautifyTimeCodes": { - "title": "Украшать временные коды", - "snapToFrames": "Привязка к рамкам", - "minDuration": "Минимальная Длительность (мс)", - "original": "Оригинал", - "beautified": "Украшенный", + "title": "Облагородить тайм-коды", + "snapToFrames": "Привязка к кадрам", + "minDuration": "Мин. длительность (мс)", + "beautified": "Облагороженные", "subtitlesCount": "Субтитры", - "changedCount": "Измененный", - "shotChangesCount": "Смена кадров", - "changeXOfY": "Изменить {0} из {1}", - "noChanges": "Никаких изменений — каждая реплика уже попала в цель", - "snappedToShotChange": "привязка к смене кадра", - "snappedToFrame": "прикрепился к рамке", - "minGapEnforced": "минимальный зазор установлен", - "minDurationEnforced": "минимальная продолжительность принудительно", - "maxDurationEnforced": "максимальная установленная продолжительность", + "changedCount": "Изменено", + "shotChangesCount": "Смены планов", + "noChanges": "Изменений нет — все реплики уже на своих местах", + "snappedToShotChange": "привязано к смене плана", + "snappedToFrame": "привязано к кадру", + "minGapEnforced": "применен мин. промежуток", + "minDurationEnforced": "применена мин. длительность", + "maxDurationEnforced": "применена макс. длительность", "noReasonNote": "уточнено по правилам профиля", - "previousChange": "Предыдущее изменение", - "nextChange": "Следующая смена", "editProfile": "Редактировать профиль...", - "batchSnapToShotChanges": "Подсказки для смены ракурса (если имеются)", + "batchSnapToShotChanges": "Привязывать реплики к сменам планов (если есть)", "batchFrameRateFromVideo": "Использовать частоту кадров из видеофайла с тем же именем, что и файл субтитров", "batchFrameRateFixed": "Использовать фиксированную частоту кадров", - "batchInfo": "Смена кадров считывается из видеофайла с тем же именем, что и файл субтитров, если таковой найден.", - "useExactTimeCodes": "Используйте точные временные метки из видео", - "extractTimeCodes": "Извлечение временных кодов", + "batchInfo": "Смены планов считываются из видеофайла с тем же именем, что и файл субтитров, если он найден.", + "useExactTimeCodes": "Использовать точное время кадров из видео", + "extractTimeCodes": "Извлечь временные коды", "extractingTimeCodes": "Извлечение временных кодов...", "noTimeCodesLoaded": "Временные коды не загружены", - "xTimeCodesLoaded": "{0} временных кодов загружено", + "xTimeCodesLoaded": "Загружено временных кодов: {0}", "timeCodesExtractFailed": "Не удалось считать временные коды из видео", - "timeCodesHint": "Функция привязывает метки к реальному времени кадров видео, а не предполагает постоянную частоту кадров. Требуется однократное чтение всего видео; результат кэшируется." + "timeCodesHint": "Привязывать реплики к реальному времени кадров видео, а не к постоянной частоте кадров. Требуется однократно прочитать все видео; результат кэшируется." + }, + "improveTimeCodes": { + "title": "Улучшить тайм-коды (принудительное выравнивание)", + "aligner": "Выравниватель", + "alignerHint": "Модель, которая ищет каждую строку в аудио. Лучшие варианты для языка субтитров указаны первыми.", + "maxShift": "Макс. сдвиг (секунды)", + "maxShiftHint": "Насколько субтитры могут быть рассинхронизированы. Строка, начало которой сдвинулось бы дальше, остается как есть и помечается. При любом значении отдельная строка, которая хочет сдвинуться более чем на полсекунды дальше соседних строк, не сдвигается вслепую: она следует за соседями, если сдвинулись все они, а иначе предлагается неотмеченной для вашей проверки.", + "adjustStartTimes": "Корректировать время начала", + "adjustEndTimes": "Корректировать время окончания", + "isolateSpeech": "Сначала выделить речь (медленно)", + "isolateSpeechHint": "Удаляет музыку и звуковые эффекты перед выравниванием, чтобы выравниватель слышал только диалоги. Помогает для строк, произносимых на фоне громкой музыки или экшена, но с GPU занимает примерно столько же времени, сколько длится аудио, - а без него во много раз дольше.", + "isolatingSpeech": "Выделение речи... (это займет некоторое время)", + "isolateSpeechFailed": "Не удалось выделить речь - выравнивание выполнено по исходному аудио.", + "checkWithSpeechToText": "Проверить распознаванием речи", + "checkWithSpeechToTextHint": "Также распознает аудио и проверяет каждый сдвиг по тому, где слова действительно прозвучали. Большие сдвиги, подтвержденные речью, отмечаются автоматически, а сдвиги в сторону от места, где строка слышна, остаются неотмеченными для вашей проверки. Также показывает, какая часть каждой строки была услышана - низкая доля означает, что текст отличается от сказанного. Субтитры, рассинхронизированные сильнее максимального сдвига (постоянное смещение, дрейф из-за несовпадения частоты кадров или скачки там, где были вырезаны сцены), сначала синхронизируются по услышанным словам. Использует Crisp ASR Parakeet, что для полнометражного фильма с GPU занимает несколько минут.", + "checkWithSpeechToTextNotAvailableX": "Проверка распознаванием речи недоступна для {0}", + "transcribingToCheck": "Распознавание речи для проверки выравнивания...", + "speechToTextFailed": "Распознавание речи не удалось - тайм-коды не были проверены.", + "speechToTextX": "Распознавание речи: {0}", + "speechToTextConfirmedXDisputedY": "Речь: подтверждено {0}, спорных {1}", + "hardlyHeardX": "Распознавание речи услышало только {0}% слов субтитров. Субтитры на том же языке, на котором говорят? Выравниватель не может разместить перевод.", + "heard": "Услышано", + "heardHint": "Какая часть строки была услышана распознаванием речи. Низкая доля означает, что текст отличается от сказанного - именно там выравниватель чаще всего ошибается.", + "statusConfirmedBySpeech": "Подтверждено речью", + "statusDisputedBySpeech": "Услышано на прежнем месте", + "statusMovedWithSync": "Сдвинуто вместе с синхронизацией", + "syncedFirstXY": "Сначала синхронизировано: {0} с в начале, {1} с в конце", + "showSpeechOnly": "Показывать только речь", + "showSpeechOnlyHint": "Рисовать выровненную осциллограмму по аудио без музыки и звуковых эффектов; исходная осциллограмма остается как есть для сравнения. Доступно после выделения речи - здесь или через \"Показывать только речь\" на осциллограмме главного окна.", + "align": "Выровнять", + "aligned": "Выровнено", + "intro": "Выберите выравниватель и нажмите \"Выровнять\", чтобы найти каждую строку в аудио и уточнить ее тайм-коды.", + "extractingAudio": "Извлечение аудио...", + "aligningBatchXOfY": "Выравнивание... пакет {0} из {1}", + "extractAudioFailed": "Не удалось извлечь аудио с помощью ffmpeg.", + "modelWillBeDownloaded": "{0} будет загружена", + "summaryXRetimedYKeptZSkipped": "Перенастроено: {0} · Оставлено: {1} · Нет речи: {2}", + "meanShiftX": "Средний сдвиг: {0} мс", + "toCheckX": "Для проверки: {0}", + "largeMovesToCheckX": "Строк, которые сами по себе сдвинулись бы далеко и оставлены неотмеченными: {0} - прослушайте их (F5 воспроизводит выровненную строку, Shift+F5 - оригинал) и отметьте правильные.", + "linesToCheckX": "Строк, оставленных неотмеченными для проверки: {0} - прослушайте их (F5 воспроизводит выровненную строку, Shift+F5 - оригинал) и отметьте правильные.", + "startShift": "Начало", + "endShift": "Конец", + "statusRetimed": "Перенастроено", + "statusMovedWithNeighbours": "Сдвинуто вместе с соседями", + "statusLargeMoveUnconfirmed": "Большой сдвиг - прослушайте, отметьте для применения", + "statusUnchanged": "Уже на месте", + "statusNoSpeech": "Нет речи", + "statusShiftTooLarge": "Оставлено - слишком большой сдвиг", + "statusFailed": "Оставлено - ошибка выравнивания", + "statusAdjustedByHand": "Изменено вручную", + "alignedWaveformHint": "Перетащите строку, чтобы сдвинуть ее, или перетащите ее края, чтобы изменить начало или конец.", + "undoAdjustment": "Отменить корректировку", + "playPause": "Воспроизведение / пауза", + "playAligned": "Выровнено", + "playAlignedHint": "Воспроизвести выбранную строку с выровненными тайм-кодами", + "applyHint": "Снимите отметку со строки, чтобы сохранить ее исходные тайм-коды. Дважды щелкните строку, чтобы воспроизвести ее. Строки также можно сдвигать и изменять их размер на выровненной осциллограмме." }, "beautifyTimeCodesProfile": { - "title": "Редактировать, улучшать, временные коды, профиль", + "title": "Редактировать профиль облагораживания тайм-кодов", "loadPreset": "Загрузить предустановку", "presetDefault": "По умолчанию", "presetNetflix": "Netflix", "presetSdi": "SDI", - "general": "Общий", - "gap": "Зазор", - "gapSuffix": "рамки (также обновляет поля с ненулевым промежутком ниже)", + "saveAsProfile": "Сохранить как профиль...", + "deleteProfile": "Удалить профиль", + "profileName": "Имя профиля", + "overwriteProfileX": "Профиль с именем \"{0}\" уже существует. Перезаписать его?", + "deleteProfileX": "Удалить профиль \"{0}\"?", + "gap": "Промежуток", + "gapSuffix": "кадров (также обновляет ненулевые поля промежутков ниже)", "milliseconds": "мс", - "frames": "фреймы", + "frames": "кадров", "zones": "Зоны", "inCues": "In cues", "outCues": "Out cues", - "connectedSubtitles": "Связанные субтитлы", - "inCueClosest": "В очереди находится ближайший", - "outCueClosest": "Сигнал к выходу самый близкий", - "treatAsConnected": "Соединенными, если расстояние между ними меньше:", - "chaining": "Последовательное соединение", - "inCueOnShot": "В тиски при смене удара", - "outCueOnShot": "Выход из игры при смене удара", - "maxGap": "Максимальный зазор:", - "shotChangeBehavior": "Если между кадрами происходит смена ракурса:", - "dontChain": "Не связывать", - "extendCrossingShotChange": "Продолжить смену кадра", - "extendUntilShotChange": "Продлить до смены кадра", - "checkGeneral": "Применить также \"общие\" правила построения цепочек вызовов", + "connectedSubtitles": "Связанные субтитры", + "inCueClosest": "Ближе начало реплики", + "outCueClosest": "Ближе конец реплики", + "treatAsConnected": "Считать связанными, если промежуток меньше:", + "chaining": "Сцепление", + "inCueOnShot": "Начало на смене плана", + "outCueOnShot": "Конец на смене плана", + "maxGap": "Макс. промежуток:", + "shotChangeBehavior": "Если между ними есть смена плана:", + "dontChain": "Не сцеплять", + "extendCrossingShotChange": "Продлить через смену плана", + "extendUntilShotChange": "Продлить до смены плана", + "checkGeneral": "Применять также \"общие\" правила сцепления", "subtitlePreviewText": "Текст субтитров.", "resetWarning": "Это перезапишет все текущие настройки. Продолжить?", "hintGap": "Минимальный промежуток между субтитрами, выраженный в кадрах. Используется всеми полями «промежуток» ниже в качестве базового значения.", - "hintZones": "Пороги срабатывания (красный) и предупреждения (зеленый) в кадрах, измеренные относительно ближайшей смены кадра. Четыре значения слева направо: слева зеленый, слева красный, справа красный, справа зеленый.", - "hintConnected": "Когда два субтитра соединены (разрыв ниже порогового значения), разрыв от ближайшего фрагмента сохраняется.", - "hintChaining": "Как работать с субтитрами, которые почти соприкасаются — сближать их или раздвигать в зависимости от того, происходит ли смена кадра между ними." + "hintZones": "Пороги привязки (красный) и предупреждения (зеленый) в кадрах от ближайшей смены плана. Четыре значения слева направо: левый зеленый, левый красный, правый красный, правый зеленый.", + "hintConnected": "Когда два субтитра связаны (промежуток меньше порога), сохраняется промежуток от ближайшей реплики.", + "hintChaining": "Как обрабатывать почти соприкасающиеся субтитры — продлевать их друг к другу или раздвигать, в зависимости от того, есть ли между ними смена плана." }, "bridgeGaps": { - "bridgeGapsSmallerThan": "Зазоры между мостами меньше (мс)", - "minGap": "Минимальный интервал (мс)", - "numberOfSmallGapsBridgedX": "Количество преодоленных небольших зазоров: {0}", - "percentFoPrevious": "Разрыв по сравнению с предыдущими значениями (%)", - "gapChange": "Изменение разрыва" + "bridgeGapsSmallerThan": "Заполнять промежутки меньше (мс)", + "minGap": "Минимальный промежуток (мс)", + "bridgeGapsSmallerThanFrames": "Заполнять промежутки меньше (кадры)", + "minGapFrames": "Минимальный промежуток (кадры)", + "calculateBridgeGapsSmallerThanDotDotDot": "Рассчитать предел заполнения промежутков по частоте кадров...", + "useXMsAsBridgeGapsSmallerThan": "Заполнять промежутки меньше \"{0}\" миллисекунд?", + "numberOfSmallGapsBridgedX": "Заполнено коротких промежутков: {0}", + "percentFoPrevious": "Доля промежутка для предыдущего (%)", + "gapChange": "Изменение промежутка" }, "renumber": { "title": "Перенумеровать", - "startFromNumber": "Начать с числа:" + "startFromNumber": "Начать с номера:" }, "sortBy": { "title": "Сортировать субтитры", "sortOrder": "Порядок сортировки", - "sortByEndTime": "Конец времени" + "sortByEndTime": "Время конца" }, "batchConvert": { "title": "Пакетное преобразование", "oneActionsSelected": "Выбрано одно действие", - "xActionsSelected": "{0} выбранных действий", - "outputFolderSource": " Выходная папка: Исходная папка", - "outputFolderX": " Выходная папка: {0}", + "xActionsSelected": "Выбрано действий: {0}", + "outputFolderSource": " Папка результатов: исходная папка", + "outputFolderX": " Папка результатов: {0}", "encodingXOverwriteY": "Кодировка: {0}, перезапись существующих файлов: {1}", "targetFormatSettings": "Настройки целевого формата", "fileNameContainsDotDotDot": "Имя файла содержит...", - "trackLanguageContainsDotDotDot": "Язык трека включает в себя...", + "trackLanguageContainsDotDotDot": "Язык дорожки содержит...", "batchConvertSettings": "Настройки пакетного преобразования", "assaSource": "Источник ASSA", "addFormatting": "Добавить форматирование", "addItalic": "Добавить курсив", - "addBold": "Добавить жирный шрифт", + "addBold": "Добавить полужирный", "addUnderline": "Добавить подчеркивание", "addAlignment": "Добавить выравнивание", "addColor": "Добавить цвет", - "deleteLinesWithSpecificActorsOrStyles": "Удалить строки, содержащие имена акторов или стили (разделяйте несколько строк запятой)", - "useSourceStylesIfPossible": "По возможности Использовать исходные стили", + "deleteLinesWithSpecificActorsOrStyles": "Удалить строки с актерами или стилями (несколько — через запятую)", + "useSourceStylesIfPossible": "По возможности использовать исходные стили (заголовок ниже тогда используется только для не-ASSA файлов)", + "keepSourceEmbeddedFonts": "Сохранять встроенные шрифты источника (footer)", "editStyles": "Редактировать стили", "editProperties": "Редактировать свойства", "editAttachments": "Редактировать вложения", - "errorsExportedX": "Ошибок экспорта: {0}", + "errorsExportedX": "Ошибки экспорта: {0}", "slowFontSizeChange": "Медленное изменение размера шрифта", - "increaseFontKerning": "Увеличить межбуквенное расстояние шрифта", + "increaseFontKerning": "Увеличить кернинг шрифта", "scrollUp": "Прокрутить вверх", "scrollDown": "Прокрутить вниз", - "rotateIn": "Повернуть", - "tiltBounce": "Наклонный отскок", - "fontSizeBounceIn": "Изменение размера шрифта", + "rotateIn": "Появление с вращением", + "tiltBounce": "Наклон с отскоком", + "fontSizeBounceIn": "Появление с пульсацией размера шрифта", "assaChangeResolutionOnlyAppliesToAssa": "Применяется только к субтитрам Advanced Sub Station Alpha (ASSA)", "assaChangeStyleTitle": "Изменить стиль", "assaEmbedFontsTitle": "Встроить шрифты", - "assaEmbedFontsInfo": "Встраивает файлы шрифтов, используемые в субтитрах (стили и встроенные теги шрифтов), в раздел [Шрифты] выходного файла. Поиск шрифтов осуществляется в папке шрифтов редактора субтитров и в системных папках шрифтов; уже встроенные шрифты сохраняются. Применяется только в том случае, если целевой формат — Advanced Sub Station Alpha.", - "adjustImageColorsTitle": "Настройте яркость изображения/альфа-канал/цвет", - "adjustImageColorsInfo": "Применяется только при преобразовании субтитров, состоящих из изображений, в формат, также состоящий из изображений (например, субтитры Blu-ray в субтитры Blu-ray).", - "assaChangeStyleFromStyle": "Изменить стиль из", - "assaChangeStyleToStyle": "к", - "assaChangeStyleImportStyle": "Импортный стиль...", + "assaEmbedFontsInfo": "Встраивает файлы шрифтов, используемые в субтитрах (стили и встроенные теги шрифтов), в раздел [Fonts] выходного файла. Шрифты ищутся в папке шрифтов Subtitle Edit и в системных папках шрифтов; уже встроенные шрифты сохраняются. Применяется, только если целевой формат — Advanced Sub Station Alpha.", + "adjustImageColorsTitle": "Настроить яркость/альфа-канал/цвет изображения", + "adjustImageColorsInfo": "Применяется только при преобразовании субтитров-изображений в формат на основе изображений (например, Blu-ray sup в Blu-ray sup).", + "assaChangeStyleFromStyle": "Изменить стиль с", + "assaChangeStyleToStyle": "на", + "assaChangeStyleImportStyle": "Импорт стиля...", "assaChangeStyleTrimUnusedStyles": "Удалить неиспользуемые стили", "assaChangeStylePropertiesTitle": "Изменить свойства стиля", "assaChangeStylePropertiesInfo": "Изменяет выбранные поля во всех стилях файла, оставляя сами стили без изменений.", "assaChangeStylePropertiesSetSpacing": "Установить интервал", - "assaChangeStylePropertiesSetAlignment": "Установить выравнивание на", - "convertColorsToDialogTitle": "Преобразовать цвета в диалоговое окно", - "convertColorsToDialogRemoveColorTags": "Удалить цветовые метки", + "assaChangeStylePropertiesSetAlignment": "Установить выравнивание", + "convertColorsToDialogTitle": "Преобразовать цвета в диалог", + "convertColorsToDialogRemoveColorTags": "Удалить теги цвета", "convertColorsToDialogAddNewLines": "Добавить новые строки", - "convertColorsToDialogReBreakLines": "Повторный разрыв строки", + "convertColorsToDialogReBreakLines": "Заново расставить переносы", "snapTimeCodesToFramesInfo": "Округляет время начала и окончания до ближайшего кадра. Частота кадров считывается из видеофайла с тем же именем, что и файл субтитров, если не выбрана фиксированная частота кадров.", "addFolderDotDotDot": "Добавить папку...", - "selectFolderToConvert": "Выберите папку с файлами для конвертации", - "includeSubfolders": "При добавлении папки включайте подпапки", - "keepSourceFileTimestamp": "Сохраняйте дату и время исходного файла в выходных файлах", - "scanningFolderX": "Сканирование {0}..." + "addFolderRecursiveDotDotDot": "Добавить папку рекурсивно...", + "selectFolderToConvert": "Выбрать папку с файлами для преобразования", + "includeSubfolders": "Включать подпапки при добавлении папки", + "videoFilesWhenAddingFolder": "Видеофайлы (mkv, mp4, ts...) при добавлении папки", + "videoFilesAsk": "Спрашивать", + "videoFilesInclude": "Добавлять их дорожки субтитров", + "videoFilesSkip": "Пропускать", + "folderContainsXVideoFiles": "Папка содержит видеофайлы (mkv, mp4, ts...): {0}.\n\nДобавить также их встроенные дорожки субтитров или только файлы субтитров?", + "addVideoFiles": "Добавить видеофайлы", + "skipVideoFiles": "Только файлы субтитров", + "doNotAskAgainVideoFiles": "Больше не спрашивать (можно изменить в настройках пакетного преобразования)", + "settingsSectionAddingFiles": "Добавление файлов", + "settingsSectionImageBasedSubtitles": "Графические субтитры (OCR)", + "keepSourceFileTimestamp": "Сохранять дату/время исходного файла у выходных файлов", + "preventSleepWhileConverting": "Не давать компьютеру уходить в спящий режим во время преобразования", + "scanningFolderX": "Сканирование {0}...", + "transportStreamSettings": "Настройки Transport Stream", + "transportStreamSettingsDotDotDot": "Настройки Transport Stream...", + "transportStreamSettingsInfo": "Применяется к дорожкам субтитров, извлеченным из файлов Transport Stream (.ts/.m2ts). Положение и размер видео влияют только на графические дорожки DVB, экспортируемые в графический формат.", + "transportStreamOverrideXPosition": "Переопределить исходное положение X", + "transportStreamOverrideYPosition": "Переопределить исходное положение Y", + "transportStreamOverrideVideoSize": "Переопределить исходный размер видео", + "transportStreamBottomMargin": "Нижнее поле", + "transportStreamFileNameEnding": "Окончание имени файла", + "transportStreamFileNameEndingInfo": "Добавляется перед расширением для каждой извлеченной дорожки. Оставьте пустым, чтобы использовать обычный языковой суффикс.", + "transportStreamOnlyTeletext": "Только телетекст", + "transportStreamGetSizeFromVideo": "Взять размер из видео...", + "twoLetterLanguageCodeUppercase": "Двухбуквенный код языка (прописные)", + "threeLetterLanguageCodeUppercase": "Трехбуквенный код языка (прописные)", + "formatContainsDotDotDot": "Формат содержит...", + "extensionIsDotDotDot": "Расширение равно...", + "statusIsError": "Статус - ошибка", + "forcedTracksOnly": "Только принудительные дорожки", + "xConvertedYFailedInZ": "Преобразовано: {0:#,###,##0}, с ошибкой: {1:#,###,##0}, за {2}", + "xNotProcessed": "Не обработано: {0:#,###,##0}", + "removeUnicodeControlCharactersTitle": "Удалить управляющие символы Unicode", + "removeUnicodeControlCharactersInfo": "Удаляет из текста невидимые управляющие символы направления Unicode (LRM, RLM, LRE, RLE, PDF, LRO и RLO) и заменяет неразрывные пробелы обычными.", + "savePresetDotDotDot": "Сохранить предустановку...", + "deletePreset": "Удалить предустановку", + "presetName": "Имя предустановки", + "deletePresetX": "Удалить предустановку \"{0}\"?" }, "changeCasing": { "fixNames": "Исправить имена", "namesX": "Имена: {0:#,##0}", - "hitsX": "Количество попаданий: {0:#,##0}", + "hitsX": "Совпадений: {0:#,##0}", "extraNames": "Дополнительные имена", "enterExtraNamesHint": "Введите дополнительные имена для исправления, разделяя их запятой", - "onlyFixUppercaseLines": "Исправлять только строки, написанные заглавными буквами", + "onlyFixUppercaseLines": "Исправлять только строки, написанные прописными", "fixNamesOnly": "Исправить только имена", - "allUppercase": "Все заглавные буквы", - "allLowercase": "Все строчные буквы" + "allUppercase": "ВСЕ ПРОПИСНЫЕ", + "allLowercase": "все строчные" }, "changeFormatting": {}, "convertActors": { - "title": "Преобразовать актёров", - "convertActorFrom": "Преобразовать актора из", - "convertActorTo": "Преобразовать актора в", - "inlineActorViaX": "Встроенный актёр через {0}", + "title": "Преобразовать актеров", + "convertActorFrom": "Преобразовать актера из", + "convertActorTo": "Преобразовать актера в", + "inlineActorViaX": "Актер в тексте через {0}", "setColor": "Установить цвет", "onlyNames": "Только имена", - "numberOfConversionsX": "Количество конверсий: {0}" + "numberOfConversionsX": "Преобразований: {0}" }, "joinSubtitles": { - "title": "Объединить субтитры", + "title": "Объединить файлы субтитров", "keepTimeCodes": "Сохранить временные коды", "appendTimeCodes": "Добавить временные коды", "addMsAfterEachFile": "Добавить миллисекунды после каждого файла", "join": "_Объединить" }, "mergeTwoSubtitles": { - "title": "Объединить два субтитра", + "title": "Объединить два файла субтитров", "subtitle1": "Субтитры 1", "subtitle2": "Субтитры 2", - "loadFromCurrentText": "Загрузить из текущего (текста)", - "loadFromCurrentTranslation": "Нагрузка от текущего источника (перевод)", + "loadFromCurrentText": "Загрузить из текущих (текст)", + "loadFromCurrentTranslation": "Загрузить из текущих (перевод)", "loadFromFile": "Загрузить из файла...", - "outputFormat": "Формат вывода", "outputFormatSubRip": "SubRip (.srt)", "outputFormatAssa": "Усовершенствованная подстанция Альфа (.ass)", "style1": "Стиль 1", "style2": "Стиль 2", - "merge": "_Слияние" + "merge": "_Объединить" }, "splitSubtitle": { - "title": "Разделенные субтитры", + "title": "Разделить файл субтитров", "numberOfEqualParts": "Количество равных частей", "saveSplitParts": "_Сохранить разделённые части", - "xPartsSavedInFormatYToFolder": "{0} частей сохранены в формате {1} в папку:" + "xPartsSavedInFormatYToFolder": "Сохранено частей: {0}, формат {1}, папка:", + "splitBy": "Разделить по" }, "splitBreakLongLines": { - "title": "Разделение/перебалансировка длинных линий", - "splitLongLines": "Разделение длинных строк (на несколько строк)", - "rebalanceLongLines": "Перебалансировка длинных очередей", + "title": "Разделить/перебалансировать длинные строки", + "splitLongLines": "Разделять длинные строки (на несколько строк)", + "rebalanceLongLines": "Перебалансировать длинные строки", "rebalanceOnlyLinesTooLong": "Только субтитры со слишком длинной строкой", - "rebalanceOnlyLinesTooLongHint": "Не трогайте существующие переносы строк, если все строки уже укладываются в максимальную длину одной строки — намеренно несбалансированный субтитр может быть редакторски правильным", - "splitLongLine": "Разделенная длинная линия", - "rebalanceLongLine": "Перебалансировка длинной линии", + "rebalanceOnlyLinesTooLongHint": "Не трогать существующие переносы, если все строки уже укладываются в максимальную длину строки — намеренно несбалансированный субтитр может быть редакторски правильным", + "splitLongLine": "Разделить длинную строку", + "rebalanceLongLine": "Перебалансировать длинную строку", "splitIntoXLines": "Разделено на {0} строк: '{1}' → '{2}...'", - "linesSplitX": "Разделение строк: {0}", - "linesSplitXLinesRebalancedY": "Разделение строк: {0}, перебалансировка строк: {1}", - "unbreakLinesShorterThanHint": "Текст короче этого значения остаётся на одной строке (или объединяется с ней) — установите значение, равное максимальной длине текста в одной строке, чтобы весь текст, помещающийся на одной строке, оставался непрерывным" + "linesSplitX": "Разделено строк: {0}", + "linesSplitXLinesRebalancedY": "Разделено строк: {0}, перебалансировано: {1}", + "unbreakLinesShorterThanHint": "Текст короче этого значения остается на одной строке (или объединяется в одну) — задайте максимальную длину строки, чтобы любой текст, который помещается в одну строку, оставался без переноса" }, "mergeShortLines": { - "title": "Объединение коротких линий", - "highlightParts": "Лучшие моменты (караоке)", - "mergedLineInfo": "Объединена строка {0} в {1} - {2}", - "linesMergedX": "Строки объединены: {0}", - "maxCharacters": "Максимальное количество символов в одном абзаце", + "title": "Объединить короткие строки", + "highlightParts": "Подсвечивать части (караоке)", + "mergedLineInfo": "Строка {0} объединена с {1} - {2}", + "linesMergedX": "Объединено строк: {0}", + "maxCharacters": "Максимум символов в одном субтитре", "maxMillisecondsBetweenLines": "Максимальное количество миллисекунд между строками", "onlyContinuationLines": "Только строки продолжения" }, "mergeContinuationLines": { "title": "Объединить строки продолжения", - "candidatesFoundX": "Найдены кандидаты на продолжение: {0}", - "noCandidatesFound": "Кандидатов на продолжение не найдено", + "candidatesFoundX": "Найдено строк-продолжений: {0}", + "noCandidatesFound": "Строк-продолжений не найдено", "maxMillisecondsBetweenLines": "Максимальный промежуток между строками (мс)", - "maxCharacters": "Максимальное количество символов в абзаце", - "columnMerge": "Слияние", - "columnFirst": "Первая линия", + "maxCharacters": "Максимум символов в субтитре", + "columnMerge": "Объединить", + "columnFirst": "Первая строка", "columnSecond": "Вторая строка", "columnMerged": "Объединено" }, "mergeLinesWithSameText": { "maxMsBetweenLines": "Максимальное количество миллисекунд между строками", - "includeIncrementingLines": "Включить строки с текстом, увеличивающимся на единицу" + "maxFramesBetweenLines": "Макс. кадров между строками", + "includeIncrementingLines": "Включать строки с нарастающим текстом", + "includeRollUpCaptions": "Включая прокручиваемые (roll-up) субтитры" }, "mergeLinesWithSameTimeCodes": { "maxMsDifference": "Максимальная разница (миллисекунды)", + "maxFramesDifference": "Макс. разница (кадры)", "makeDialog": "Создавать диалоги" }, "netflixCheckAndFix": { @@ -2040,152 +2366,162 @@ "saveNetflixQualityReport": "Сохранить отчёт о качестве Netflix", "netflixReportSaved": "Отчет о качестве Netflix сохранен", "netFlixQualityReportSavedToX": "Отчет о качестве Netflix сохранен в:\n {0}", - "dialogHyphenSpace": "Диалог дефис пробел", + "dialogHyphenSpace": "Пробел после тире диалога", "ellipsesNotThreeDots": "Использовать многоточие (а не три точки)", - "onlyAllowedGlyphs": "Разрешены только глифы", + "onlyAllowedGlyphs": "Только разрешенные символы", "italics": "Курсив", - "maxCharsSec": "Максимальное количество символов в секунду", - "maxDuration": "Максимальная Длительность", - "maxLineLength": "Максимальная длина линии", - "minDuration": "Минимальная Длительность", - "maxNumberOfLines": "Максимальное количество строк", - "oneToTenSpellOut": "От одного до десяти, чтобы составить слово", - "shotChanges": "Смена кадров", - "startNumberSpellOut": "Начать с написания числа", - "textforHiUseBrackets": "Для обозначения \"Привет\" Использовать скобки", - "twoFrameGrap": "Два промежутка между кадрами", - "whiteSpace": "Свободное пространство", + "maxDuration": "Максимальная длительность", + "minDuration": "Минимальная длительность", + "oneToTenSpellOut": "Числа от одного до десяти словами", + "startNumberSpellOut": "Число в начале предложения словами", + "textforHiUseBrackets": "Текст для слабослышащих в скобках", + "twoFrameGrap": "Промежуток в два кадра", + "whiteSpace": "Пробелы", "childrensProgram": "Детская программа", - "sdh": "СДВ (глухота/слабослышание)", + "sdh": "SDH (для глухих и слабослышащих)", "glyphCheckReport": "В столбце {1} обнаружен недопустимый символ {0}", "whiteSpaceCheckForXReport": "Проблема с пробелами ({0}) обнаружена в столбце {1}.", "whiteSpaceBeforePunctuation": "отсутствует перед знаком препинания", "whiteSpaceLineEnding": "окончание строки", "whiteSpaceCheckConsecutive": "2+ последовательных", - "twoLinesMaximum": "максимум две строки", + "twoLinesMaximum": "Максимум две строки", "textCanFitOnOneLine": "Текст может поместиться в одну строку", - "singleVerticalLineLengthMax11": "Длина одной вертикальной линии > 11", - "singleHorizontalLineLengthMax13": "Длина одной горизонтальной линии > 13", + "singleVerticalLineLengthMax11": "Длина одной вертикальной строки > 11", + "singleHorizontalLineLengthMax13": "Длина одной горизонтальной строки > 13", "singleLineLengthExceedsX": "Длина одной строки > {0}", - "numbersOneToTenSpellOut": "Числа от 1 до 10 следует записывать: один, два, три и т.д", + "numbersOneToTenSpellOut": "Числа от 1 до 10 следует писать словами: один, два, три и т. д.", "useSquareBracketsForHiAndSoundEffects": "Использовать квадратные скобки [ ] для обозначения идентификаторов говорящих или звуковых эффектов", - "shotChangeInCueWithinXFramesAfterSnap": "Начальная сцена находится в пределах {0} кадров после смены кадра, привяжите начальную сцену к смене кадра", - "shotChangeInCue1ToXFramesBeforeSnap": "Начальная метка находится за 1-{0} кадров до смены кадра; привяжите начальную метку к смене кадра", - "shotChangeInCueXToYFramesBeforePull": "Начальная сцена находится за {0}-{1} кадров до смены кадра, переместите начальную сцену на полсекунды ({2} кадров) до смены кадра", - "shotChangeOutCueWithinXFramesAfterChange": "Сцена завершения находится в пределах {0} кадров после смены ракурса", - "shotChangeOutCueWithinXFramesOfChange": "Момент завершения находится в пределах {0} кадров от смены кадра", - "shotChangeOutCueOnShotChange": "Выход из игры происходит при смене броска, соблюдать двухкадровый промежуток", - "dualSpeakersHyphenWithoutSpace": "Для двух динамиков Использовать дефис без пробела", - "dualSpeakersHyphenWithSpace": "Для двух динамиков Использовать дефис и пробел", - "dualSpeakersHyphenWithSpaceSecondOnly": "Два говорящих: Использовать дефис с пробелом, чтобы обозначить только второго говорящего", - "dualSpeakersHyphenWithoutSpaceSecondOnly": "Два говорящих: Использовать дефис без пробела, чтобы обозначить только второго говорящего", - "minimumTwoFramesGapOverlapping": "Минимальный промежуток между кадрами (перекрытие) — два кадра", - "minimumTwoFramesGap": "Минимальный промежуток между кадрами — два", + "shotChangeInCueWithinXFramesAfterSnap": "Начало реплики в пределах {0} кадров после смены плана — привяжите начало к смене плана", + "shotChangeInCue1ToXFramesBeforeSnap": "Начало реплики за 1-{0} кадров до смены плана — привяжите начало к смене плана", + "shotChangeInCueXToYFramesBeforePull": "Начало реплики за {0}-{1} кадров до смены плана — сдвиньте начало на полсекунды ({2} кадров) до смены плана", + "shotChangeOutCueWithinXFramesAfterChange": "Конец реплики в пределах {0} кадров после смены плана", + "shotChangeOutCueWithinXFramesOfChange": "Конец реплики в пределах {0} кадров от смены плана", + "shotChangeOutCueOnShotChange": "Конец реплики на смене плана — соблюдайте промежуток в два кадра", + "dualSpeakersHyphenWithoutSpace": "Два говорящих: дефис без пробела", + "dualSpeakersHyphenWithSpace": "Два говорящих: дефис с пробелом", + "dualSpeakersHyphenWithSpaceSecondOnly": "Два говорящих: дефис с пробелом только перед вторым говорящим", + "dualSpeakersHyphenWithoutSpaceSecondOnly": "Два говорящих: дефис без пробела только перед вторым говорящим", + "minimumTwoFramesGapOverlapping": "Минимальный промежуток в два кадра (перекрытие)", + "minimumTwoFramesGap": "Минимальный промежуток в два кадра", "frameRateIsInvalidX": "Недопустимая частота кадров: '{0}'", - "frameRateIsInvalid": "Частота кадров недействительна", - "minimumDurationJapanese": "Минимальная Длительность: 0,5 секунды", + "frameRateIsInvalid": "Недопустимая частота кадров", + "minimumDurationJapanese": "Минимальная длительность: 0,5 секунды", "minimumDuration": "Минимальная длительность: 5/6 секунды (833 мс)", - "ellipsesUseSmartCharacter": "Использовать один символ \"умный\" (U+2026) вместо трех точек/периодов подряд", - "maximumDuration": "Максимальная Длительность: 7 секунд на одно событие субтитров", - "italicsFixed": "Фиксированный курсив", + "ellipsesUseSmartCharacter": "Использовать единый символ многоточия (U+2026) вместо трех точек подряд", + "maximumDuration": "Максимальная длительность: 7 секунд на один субтитр", + "italicsFixed": "Курсив исправлен", "italicsNotAllowed": "Курсив не допускается", - "bridgeGapsXToYFrames": "3-{0} кадровый промежуток => 2 кадровых промежутка", + "bridgeGapsXToYFrames": "Промежуток 3-{0} кадров => промежуток 2 кадра", "maximumXCharactersPerSecond": "Максимальное количество символов в секунду: {0}" }, "imageBasedEdit": { - "editImagedBaseSubtitle": "Редактировать субтитры на основе изображений", - "editImagedBaseSubtitleX": "Редактировать субтитры на основе изображений: {0}", + "editImagedBaseSubtitle": "Редактировать субтитры-изображения", + "editImagedBaseSubtitleX": "Редактировать субтитры-изображения: {0}", "resizeImagesDotDotDot": "Изменить размер изображений...", "adjustBrightnessDotDotDot": "Отрегулировать яркость...", "adjustAlphaDotDotDot": "Настроить альфа-канал...", - "cropImages": "Обрезанные изображения", - "importTimeCodes": "Импорт временных кодов...", + "cropImages": "Обрезать изображения", "setText": "Задать текст", - "screenWidth": "ширина экрана", - "screenHeight": "высота экрана", + "screenWidth": "Ширина экрана", + "screenHeight": "Высота экрана", "alphaThresholdInfo": "Пиксели с альфа-каналом ниже порогового значения становятся полностью прозрачными", - "resetToDefaults": "Сбросить до значений по умолчанию", + "resetToDefaults": "Сбросить по умолчанию", "alphaAdjustmentInfo": "Регулировка альфа-канала: добавление/вычитание из альфа-канала.\nПредварительный просмотр обновляется автоматически и отображается на клетчатом фоне для визуализации прозрачности.", "adjustBrightness": "Отрегулировать яркость", - "brightness": "Яркость", "contrast": "Контраст", "gamma": "Гамма", - "brightnessAdjustmentInfo": "Отрегулировать ползунки, чтобы изменить яркость, контрастность и гамму.\nПредварительный просмотр обновляется автоматически и отображает первый выбранный субтитр.", + "brightnessAdjustmentInfo": "Двигайте ползунки, чтобы изменить яркость, контрастность и гамму.\nПредпросмотр обновляется автоматически и показывает первый выбранный субтитр.", "resizeImages": "Изменить размер изображений", "percentage": "Процент", "resizeImagesInfo": "Введите процентное значение для изменения размера изображений.\nПредварительный просмотр обновляется автоматически.", "originalSizeXNewSizeY": "Оригинал: {0} × {1} пикселей\nНовый: {2} × {3} пикселей", "adjustColorDotDotDot": "Настроить цвет...", "adjustColor": "Настроить цвет", - "colorAdjustmentInfo": "Нажмите на цветовую палитру, чтобы выбрать цвет. Яркие пиксели субтитров смещаются в сторону выбранного оттенка; темные контуры и тени сохраняются.\nПредварительный просмотр показывает первый выбранный субтитр.", + "colorAdjustmentInfo": "Нажмите на образец цвета, чтобы выбрать цвет. Яркие пиксели субтитров смещаются к выбранному оттенку; темные контуры и тени сохраняются.\nПредпросмотр показывает первый выбранный субтитр.", "topAlignLines": "Выравнивание сверху", "bottomAlignLines": "Выравнивание снизу", "appendSubtitleDotDotDot": "Добавить субтитры...", - "shiftTimeCodes": "Временные коды смен", + "shiftTimeCodes": "Сдвинуть временные коды на", "sortByStartTime": "Сортировать по времени начала", "videoPreview": "Видео", "positionMap": "Карта позиций", "letterbox": "Letterbox", "letterboxOff": "Выключено (без черных полос)", - "letterboxCustom": "Пользовательская высота панели", + "letterboxCustom": "Своя высота полос", "barHeightPx": "Высота полосы (пикселей)", - "titleSafePercent": "Безопасный для заголовка (%)", - "positionSummary": "{0}×{1} - {2} субтитры - высота полосы: {3} px", - "xInActivePicture": "{0} на картинке", - "xInTopBar": "{0} в верхней панели", - "xInBottomBar": "{0} в нижней панели", - "noImageSubtitlesLoaded": "Субтитры к изображениям не загружены", - "imageBasedFormatNotSupported": "Формат субтитров на основе изображений не найден/не поддерживается." + "titleSafePercent": "Безопасная зона титров (%)", + "moveCaptions": "Переместить субтитры", + "moveCaptionsDotDotDot": "Переместить субтитры...", + "moveCaptionsTo": "Переместить субтитры", + "moveCaptionsIntoBars": "На черные полосы letterbox (за пределы изображения)", + "moveCaptionsIntoPicture": "Внутрь изображения (с полос)", + "moveCaptionsOffset": "Отступ от края (px)", + "letterboxBarHeightXPxYOfZCaptionsWillMove": "Высота полосы: {0} px - будет перемещено субтитров: {1} из {2}", + "removeFadeInOut": "Удалить появление/исчезновение", + "removeFadeInOutXLinesRemoved": "Строк появления/исчезновения, объединенных со своими строками: {0}", + "removeFadeInOutNothingFound": "Строки появления/исчезновения не найдены", + "positionSummary": "{0}×{1} - субтитров: {2} - высота полосы: {3} px", + "xInActivePicture": "{0} в кадре", + "xInTopBar": "{0} в верхней полосе", + "xInBottomBar": "{0} в нижней полосе", + "noImageSubtitlesLoaded": "Субтитры-изображения не загружены", + "imageBasedFormatNotSupported": "Формат субтитров-изображений не найден/не поддерживается.", + "frameRateDeclaredInFile": "Частота кадров, указанная в файле Blu-ray sup", + "frameRateDetectedFromTimeCodesX": "Частота кадров, определенная по тайм-кодам Blu-ray sup (в файле указано {0})", + "frameRateFromVideo": "Частота кадров видео", + "frameRateCurrent": "Текущая частота кадров", + "frameRateSetManually": "Частота кадров задана вручную", + "frameRateUsageInfo": "Экспорт в Blu-ray sup, BDN XML, DOST и FCP выполняется с этой частотой кадров. Время при этом не меняется - для этого используйте \"Изменить частоту кадров\".", + "useVideoFrameRateXInsteadOfY": "Частота кадров видео - {0}, а у субтитров задана {1}.\n\nИспользовать частоту кадров видео ({0})?" }, "removeTextForHearingImpaired": { - "interjections": "Междометия", - "skipIfStartWith": "Пропустить, если начинаете с", + "skipIfStartWith": "Пропускать, если начинается с", "removeTextBetween": "Удалить текст между", - "brackets": "Скобки", + "brackets": "Квадратные скобки", "curlyBrackets": "Фигурные скобки", - "parentheses": "Скобки", + "parentheses": "Круглые скобки", "and": "и", "onlySeparateLines": "Только отдельные строки", "removeTextBeforeColon": "Удалить текст перед двоеточием", - "onlyIfTextIsUppercase": "Только если текст написан заглавными буквами", + "onlyIfTextIsUppercase": "Только если текст прописными", "onlyOnSeparateLine": "Только на отдельной строке", - "ifLineIsUppercase": "Если строка написана заглавными буквами", - "keepUppercaseWords": "Сохранить эти слова (разделенные запятыми)", + "ifLineIsUppercase": "Если строка прописными", + "keepUppercaseWords": "Сохранять эти слова (через запятую)", "ifLineContains": "Если строка содержит", "ifLineOnlyContainsMusicSymbols": "Если строка содержит только музыкальные символы", "removeInterjections": "Удалить междометия", - "linesFoundX": "Найденные строки: {0}" + "linesFoundX": "Найдено строк: {0}" }, "removeUnicodeCharacters": { - "title": "Удаление/замена символов Юникода", + "title": "Удалить/заменить символы Unicode", "charactersFoundX": "Обнаружены символы Юникода: {0}", "noCharactersFound": "Символы Юникода не найдены" }, "pickFontNameTitle": "Выбрать название шрифта", "pickFontNameInstalledFonts": "Установленные шрифты", "pickFontNameCollectedFonts": "Собранные шрифты", - "colorPickerTitle": "Выбрать цвет", - "filterLayersTitle": "Фильтры для отображения", - "filterLayersHideFromWaveform": "Скрыть на графике волны/спектрограмме", - "filterLayersHideFromSubtitleGrid": "Скрыть из сетки субтитров", - "filterLayersHideFromVideoPreview": "Скрыть предварительный просмотр видео", + "filterLayersTitle": "Фильтр отображаемых слоев", + "filterLayersHideFromWaveform": "Скрыть на осциллограмме/спектрограмме", + "filterLayersHideFromSubtitleGrid": "Скрыть в таблице субтитров", + "filterLayersHideFromVideoPreview": "Скрыть в предпросмотре видео", "pickSubtitleFormat": "Выбрать формат субтитров", "pickSubtitleFormatImageBasedNoPreview": "Формат субтитров на основе изображений.\nРастровые изображения генерируются во время конвертации — предварительный просмотр текста отсутствует.", "recentColors": "Последние цвета", - "fixCommonErrorsSettingsTitle": "Исправление распространенных ошибок в настройках" + "fixCommonErrorsSettingsTitle": "Настройки исправления типичных ошибок" }, "spellCheck": { "spellCheck": "Орфография", "getDictionariesTitle": "Проверка орфографии - получить словари", "getDictionaryInstructions": "Выберите язык и нажмите \"Скачать\"", - "addNameToUserDictionary": "Добавить имя в словарь пользователей", + "uninstallDictionaryX": "Удалить словарь \"{0}\"?", + "addNameToUserDictionary": "Добавить имя в пользовательский словарь", "addNameToNamesList": "Добавить имя в список имен", "addNamesToNamesList": "Добавить имена в список имен", - "importXNames": "Импортировать имена {0}?", - "someNamesAreNotProperCase": "Некоторые имена начинаются не с заглавной буквы или все начинаются с заглавной. Всё равно импортировать?", - "enterOneNamePerLine": "На каждой строке указывать одно имя", + "importXNames": "Импортировать имен: {0}?", + "someNamesAreNotProperCase": "Некоторые имена начинаются не с заглавной буквы или написаны целиком прописными. Все равно импортировать?", + "enterOneNamePerLine": "Вводите по одному имени в строке", "noNamesAdded": "Имена не были добавлены (возможно, они уже существуют).", - "xOfYNamesImported": "{0} из {1} импортированных имен (остальные могут уже существовать).", + "xOfYNamesImported": "Импортировано имен: {0} из {1} (остальные, возможно, уже есть).", "noDictionariesFound": "Словари не найдены", "wordNotFound": "Слово не найдено", "loadSourceImage": "Также показать исходные изображения...", @@ -2197,66 +2533,98 @@ "wordXAddedToNamesList": "Слово '{0}' добавлено в список имен", "wordXAddedToUserDictionary": "Слово '{0}' добавлено в словарь пользователя", "useSuggestionX": "Использовать предложение '{0}'", - "useSuggestionXAlways": "Всегда Использовать предложение '{0}'", + "useSuggestionXAlways": "Всегда использовать предложение '{0}'", "addXToUserDictionary": "Добавить '{0}' в словарь пользователя", "ignoreAllX": "Игнорировать все '{0}'", "pickSpellCheckDictionaryDotDotDot": "Выбрать словарь для проверки орфографии...", "chooseSpellCheckDictionary": "Выбрать словарь для проверки орфографии", "pickLiveSpellCheckDictionary": "Выбрать словарь для проверки орфографии в режиме реального времени", "undoX": "Отменить: {0}", - "playCurrentLineHint": "Воспроизведите текущую строку в видеоплеере и поставьте на паузу в конце", - "editWholeText": "Отредактировать весь текст", + "playCurrentLineHint": "Воспроизвести текущую строку в видеоплеере и остановиться в конце", "editWholeTextTitle": "Проверка орфографии - Редактировать весь текст", "continueFromCurrentLine": "Продолжить проверку орфографии с текущей строки?\n\nДа = продолжить с текущей строки\nНет = начать с начала", - "continueFromTop": "Проверка орфографии достигла конца подзаголовка.\n\nПродолжить с начала?", + "continueFromTop": "Проверка орфографии дошла до конца субтитров.\n\nПродолжить с начала?", "spellCheckCompleted": "Проверка орфографии завершена", - "changedWordsX": "Измененные слова: {0}", - "skippedWordsX": "Пропущенные слова: {0}", - "correctWordsX": "Правильные слова: {0}", + "changedWordsX": "Исправлено слов: {0}", + "skippedWordsX": "Пропущено слов: {0}", + "correctWordsX": "Правильных слов: {0}", "namesX": "Имена: {0}", "addedToDictionaryX": "Добавлено в словарь: {0}", - "doNotShowThisAgain": "Больше не показывать это сообщение" + "doNotShowThisAgain": "Больше не показывать это сообщение", + "editUseAlwaysList": "Изменить список \"Всегда использовать\"...", + "useAlwaysListTitle": "Проверка орфографии - список \"Всегда использовать\"", + "useAlwaysListHeader": "Список \"Всегда использовать\"", + "useAlwaysListDescription": "Слова, которые проверка орфографии заменяет автоматически; сохраняются кнопками \"Изменить все\" и \"Всегда использовать\". Пара используется, только если слово написано с ошибкой.", + "useAlwaysWord": "Слово с ошибкой", + "xPairs": "Пар: {0:#,##0}", + "xUnusedPairs": "Ни разу не использовано: {0:#,##0}", + "useAlwaysUnusedHint": "Ни разу не использовано - это слово написано правильно (или является именем либо пользовательским словом), поэтому проверка орфографии никогда его не отмечает", + "removeUnused": "Удалить неиспользуемые", + "useAlwaysEmpty": "Для этого языка пока нет пар \"Всегда использовать\"", + "useAlwaysEmptyHint": "Пары добавляются при нажатии \"Изменить все\" или \"Всегда использовать\" в проверке орфографии.", + "useAlwaysNoMatch": "Нет пар, соответствующих поиску", + "useAlwaysSameWord": "Замена должна отличаться от слова.", + "useAlwaysRememberOff": "Параметр \"Запоминать список 'Всегда использовать'\" отключен в настройках, поэтому проверка орфографии не использует и не сохраняет этот список." }, "video": { "burnIn": { - "title": "Создать видео со встроенными субтитрами", - "targetFileSize": "Целевой размер файла (требуется двухэтапное кодирование)", + "title": "Создать видео со вшитыми субтитрами", + "targetFileSize": "Целевой размер файла (требуется двухпроходное кодирование)", "fileSizeMb": "Размер файла в МБ", - "matchSourceVideoSize": "Соответствие размеру исходного видео", + "matchSourceVideoSize": "Как у исходного видео", "bitRate": "Битрейт", "totalBitRateX": "Общий битрейт: {0}", "sampleRate": "Частота дискретизации", - "audio": "Аудио", - "preset": "Предустановка", + "tune": "Мелодия", "pixelFormat": "Пиксельный формат", "crf": "КРФ", - "useSource": "Использовать источник", - "fontSizeFactor": "фактор размера шрифта", - "boxType": "Тип коробки", - "fromTime": "С течением времени", - "toTime": "Вовремя", - "audioEncoding": "кодирование аудио", + "useSource": "Как в исходнике", + "fontSizeFactor": "Коэффициент размера шрифта", + "boxType": "Тип подложки", + "fromTime": "С момента", + "toTime": "До момента", + "audioEncoding": "Кодирование аудио", "outputProperties": "Свойства вывода...", "videoFileSize": "Размер видеофайла", - "oneBox": "Одна коробка", - "logoInfo": "Выбрать изображение в формате PNG и перетащите его, чтобы разместить на видео." + "oneBox": "Одна подложка", + "logoInfo": "Выберите изображение PNG и перетащите его, чтобы разместить на видео.", + "noSubtitlesGenerateAnyway": "Нет строк субтитров для вшивания.\n\nСоздать видео без субтитров?", + "noSubtitlesInXItemsGenerateAnyway": "Элементов пакета без строк субтитров для вшивания: {0}.\n\nСоздать эти видео без субтитров?", + "subtitleStyle": "Стиль субтитров", + "videoOutput": "Видеовыход", + "targetSize": "Целевой размер" }, "videoTransparent": { "title": "Создать прозрачное видео с субтитрами" }, "audioToText": { - "title": "Преобразование речи в текст", - "transcribe": "Расшифровка", + "title": "Распознавание речи", + "transcribe": "Распознать", "translateToEnglish": "Перевести на английский", - "transcribing": "Транскрибирование...", - "transcribingXOfY": "Транскрибирование {0} из {1}...", + "transcribing": "Распознавание...", + "transcribingXOfY": "Распознавание {0} из {1}...", + "linesTranscribedXOfYFailedZ": "Распознано строк: {0} из {1} - {2} с ошибкой или без речи.\n\nСтроки с ошибкой сохраняют текущий текст. Применить распознанные строки или повторить неудачные (можно сначала изменить движок или настройки)?", + "linesTranscribedXOfYCancelled": "Распознавание отменено после {0} из {1} строк.\n\nПрименить распознанные строки? Остальные строки сохранят текущий текст.", + "noLinesTranscribed": "Не удалось распознать ни одну из {0} строк.\nПодробности см. в журнале инструментов.", + "applyTranscribedLines": "Применить распознанное", + "retryFailedLines": "Повторить неудачные", + "isolateSpeech": "Выделить речь (медленно)", + "isolateSpeechHint": "Удаляет музыку и звуковые эффекты перед распознаванием. Дает меньше пропущенных строк и лучший тайминг для аудио с громкой музыкой, но с GPU занимает примерно столько же времени, сколько длится аудио, - а без него во много раз дольше.", + "isolatingSpeech": "Выделение речи...", + "isolateSpeechFailed": "Не удалось выделить речь - распознается исходное аудио.", + "detectSpeakers": "Определять говорящих", + "detectSpeakersHint": "Начинает каждую строку с говорящего, например \"(speaker 0)\", с помощью диаризации NVIDIA Sortformer (до 8 говорящих). Лучше всего работает с движками, которые разделяют строки при смене говорящего, например Parakeet и Cohere.", + "detectSpeakersNeedsNewerCrispAsr": "Для \"Определять говорящих\" нужен Crisp ASR v{0} или новее, но установлен v{1}.\n\nОбновите Crisp ASR (кнопка с шестеренкой рядом с движком) или отключите \"Определять говорящих\".", + "xNeedsNewerCrispAsr": "Для {0} нужен Crisp ASR v{1} или новее, но установлен v{2}.\n\nСкачать и установить обновление сейчас?", + "vad": "ВАД", + "vadHint": "Обнаружение голосовой активности: распознается только речь, разрезанная там, где говорящий делает паузу.\nАвто: Silero и только для движков, которым это нужно (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: всегда включено для каждого движка Crisp ASR. FireRedVAD - самый точный, Whisper-VAD дает меньше всего разрезов и самые чистые, но работает медленнее всех.\nIndex-Echo всегда использует Silero. --vad, --vad-model или --chunk-seconds в расширенных настройках имеют приоритет.", "inputLanguage": "Язык ввода", - "advancedWhisperSettings": "Расширенные настройки шепота", - "downloadingSpeechToTextEngine": "Загрузка движка преобразования речи в текст", - "unpackingSpeechToTextEngine": "Распаковка движка преобразования речи в текст", + "advancedWhisperSettings": "Дополнительные параметры распознавания речи", + "downloadingSpeechToTextEngine": "Загрузка движка распознавания речи", + "unpackingSpeechToTextEngine": "Распаковка движка распознавания речи", "enableVad": "Включить VAD", - "whisperXxlStandard": "Стандарт", - "whisperXxlStandardAsia": "Стандарт Азия", + "whisperXxlStandard": "Стандартный", + "whisperXxlStandardAsia": "Стандартный (Азия)", "whisperXxlSentence": "На уровне предложения", "whisperXxlSingleWords": "Отдельные слова", "whisperXxlHighlightWord": "Выделить слово", @@ -2266,225 +2634,295 @@ "viewToolsLogFile": "Просмотреть файл журнала инструментов", "updateXTitle": "Обновить {0}?", "updateXMessage": "Доступна более новая версия {0}.{1}{1}Скачать и установить обновление сейчас?", - "downloadingSpeechToTextModel": "Загрузка модели преобразования речи в текст", - "whisperPostProcessingTitle": "Постобработка шепота", - "adjustTimings": "Настроить время", - "mergeShortLines": "Объединение коротких линий", - "breakSplitLongLines": "Разбить/разделить длинные линии", - "fixShortDuration": "Исправлена короткая Длительность", - "fixCasing": "Исправить корпус", - "addPeriods": "Добавить точки", - "changeUnderlineToColor": "Изменить цвет подчеркивания", - "removeNonSpeechLines": "Удалите строки, не содержащие речи", - "removeNonSpeechLinesHint": "Удалите строки, описывающие только звук, например, \"[Музыка]\" или \"(волны разбиваются о берег)\"", - "removeRepeatedLines": "Удалите повторяющиеся строки", - "removeRepeatedLinesHint": "Удалите строки, повторяющие предыдущую строку слово в слово (циклы движка)", - "showQualityReport": "Показать отчет о качестве после транскрипции", - "qualityReportTitle": "Отчет о качестве транскрипции", - "qualityReportNoIssues": "Проблем не обнаружено — транскрипция выглядит хорошо.", - "qualityReportSummaryX": "В {1} строке(ах) обнаружено(ы) {0} проблем", - "qualityReportLinesChecked": "Проверены строки", - "qualityReportIssuesFound": "Выявленные проблемы", - "qualityReportLinesRemoved": "Строки удалены", - "qualityReportTooShort": "Слишком короткий", - "qualityReportTooShortHint": "Время отображения меньше минимального, или скорость чтения выше максимальной", - "qualityReportTooLong": "Слишком долго", + "downloadingSpeechToTextModel": "Загрузка модели распознавания речи", + "whisperPostProcessingTitle": "Постобработка Whisper", + "adjustTimings": "Скорректировать тайминг", + "mergeShortLines": "Объединять короткие строки", + "breakSplitLongLines": "Переносить/разделять длинные строки", + "fixShortDuration": "Исправлять короткую длительность", + "fixCasing": "Исправлять регистр", + "addPeriods": "Добавлять точки", + "changeUnderlineToColor": "Заменять подчеркивание цветом", + "removeNonSpeechLines": "Удалять строки без речи", + "removeNonSpeechLinesHint": "Удалять строки, которые только описывают звук, например \"[Музыка]\" или \"(шум волн)\"", + "removeRepeatedLines": "Удалять повторяющиеся строки", + "removeRepeatedLinesHint": "Удалять строки, которые дословно повторяют предыдущую (зацикливание движка)", + "showQualityReport": "Показывать отчет о качестве после распознавания", + "qualityReportTitle": "Отчет о качестве распознавания", + "qualityReportNoIssues": "Проблем не обнаружено — распознавание выглядит хорошо.", + "qualityReportSummaryX": "Найдено проблем: {0}, строк: {1}", + "qualityReportLinesChecked": "Проверено строк", + "qualityReportIssuesFound": "Найдено проблем", + "qualityReportLinesRemoved": "Удалено строк", + "qualityReportTooShortHint": "Короче минимального времени показа или скорость чтения выше максимальной", "qualityReportTooLongHint": "Превышение максимально допустимого времени отображения или очень мало слов в течение длительного времени (часто это галлюцинация)", - "qualityReportOverlap": "Перекрывающиеся", "qualityReportOverlapHint": "Заканчивается после начала следующей строки", - "qualityReportNonSpeech": "Неречь", + "qualityReportNonSpeech": "Не речь", "qualityReportNonSpeechHint": "Только описание звука или музыки, например, \"[Музыка]\"", - "qualityReportRepeated": "Повторный", - "qualityReportRepeatedHint": "Тот же текст, что и в предыдущей строке (цикл работы двигателя)", - "qualityReportRemoved": "Удаленный", + "qualityReportRepeated": "Повторы", + "qualityReportRepeatedHint": "Тот же текст, что и в предыдущей строке (зацикливание движка)", + "qualityReportRemoved": "Удаленные", "qualityReportAll": "Все", "qualityReportIssue": "Проблема", - "qualityReportDetail": "Деталь", - "qualityReportTip": "В новом подзаголовке строки указаны с указанием их номеров. Используйте функцию «Исправить распространенные ошибки» или настройки постобработки для автоматического исправления большего количества ошибок, или попробуйте другую модель/движок, если затронуто много строк.", + "qualityReportTip": "Строки указаны с номерами в новых субтитрах. Используйте \"Исправить типичные ошибки\" или настройки постобработки, чтобы исправить больше автоматически, или попробуйте другую модель/движок, если затронуто много строк.", "qualityReportDoNotShowAgain": "Больше не показывать этот отчет", "engineSettings": "Настройки движка распознавания речи", - "engineSettingsSubtitle": "Движок преобразования речи в текст", - "backendAndUpdateStatus": "Бэкенд и обновление статуса", - "addLanguageCodeToFileName": "Добавьте код языка в имя файла", - "addLanguageCodeToFileNameHint": "Сгенерированные субтитлы имеют имя \"video.en.srt\" вместо \"video.srt\"" + "engineSettingsSubtitle": "Движок распознавания речи", + "backendAndUpdateStatus": "Бэкенд и состояние обновлений", + "addLanguageCodeToFileName": "Добавлять код языка в имя файла", + "addLanguageCodeToFileNameHint": "Называть созданные субтитры \"video.en.srt\" вместо \"video.srt\"" }, "textToSpeech": { - "title": "Преобразование текста в речь", - "reviewAudioSegments": "TTS - Обзор аудиофрагментов", - "reviewAudioSegmentsHistory": "TTS - Обзор истории воспроизведения звука", + "title": "Синтез речи", + "reviewAudioSegments": "TTS - Проверка аудиофрагментов", + "reviewAudioSegmentsHistory": "TTS - История аудио", "stability": "Стабильность", "similarity": "Сходство", - "speakerBoost": "усиление динамиков", - "generateSpeechFromText": "Создание речи из текста", - "testVoice": "Тестовый голос", + "speakerBoost": "Усиление голоса (speaker boost)", + "generateSpeechFromText": "Синтезировать речь из текста", + "testVoice": "Проверить голос", "addAudioToVideoFile": "Добавить аудио в видеофайл", - "engineAndVoice": "Движок & озвучка", - "output": "Выход", + "engineAndVoice": "Движок и голос", "xLinesFromY": "{0} строк из {1}", - "xLines": "{0} строк", - "xVoices": "{0} голосов", - "reviewAudioSegmentsHint": "Проверить каждую строку перед миксом", + "xLines": "Строк: {0}", + "xVoices": "Голосов: {0}", + "reviewAudioSegmentsHint": "Проверить каждую строку перед финальным сведением", "addAudioToVideoFileHint": "Объединить результат в новый видеофайл", "xElapsedYLeft": "{0} прошло · ~{1} осталось", "xElapsed": "{0} прошло", "voiceSettings": "TTS - Настройки голоса", - "voiceSampleText": "Образец голосового текста", + "voiceSampleText": "Текст образца голоса", "refreshVoices": "Обновить голоса", "videoEncodingSettings": "TTS — Настройки кодирования видео", "elevenLabsSettings": "TTS - Настройки ElevenLabs", "elevenLabsSettingsResetHint": "Сбросить настройки ElevenLabs до значений по умолчанию", - "regenerateAudio": "Восстановить аудио", + "provider": "Провайдер", + "openAiCompatibleSettings": "TTS - Настройки OpenAI-совместимого сервера", + "customServerUrl": "URL собственного сервера", + "customServerUrlHint": "Полный адрес конечной точки речи OpenAI-совместимого сервера, используется, когда выбран провайдер \"Custom\", например http://localhost:8880/v1/audio/speech", + "customModels": "Свои модели", + "customModelsHint": "Имена моделей через запятую, предлагаемые, когда выбран провайдер \"Custom\"", + "customVoices": "Свои голоса", + "customVoicesHint": "Имена голосов через запятую, используемые провайдером \"Custom\" и моделями OpenRouter, не публикующими список голосов", + "instructions": "Инструкции", + "instructionsHint": "Необязательный стиль речи, например \"Говорите спокойным, теплым голосом\". Отправляется только моделям, которые это поддерживают (не tts-1/tts-1-hd)", + "openAiSpeedHint": "Скорость речи от 0.25 до 4.0 (1.0 - обычная). Поддерживается не всеми моделями", + "outputFormatHint": "Аудиоформат, запрашиваемый у сервера. \"Авто\" запрашивает MP3 и переключается на PCM для моделей, которые возвращают только PCM (например, Gemini TTS)", + "regenerateAudio": "Сгенерировать аудио заново", "autoContinuePlaying": "Автоматическое продолжение воспроизведения", - "playLine": "Игровая линия", - "fitDurationToGeneratedAudio": "Подберите длительность в соответствии с сгенерированным аудиофайлом", - "resetTiming": "Сброс времени", + "fitDurationToGeneratedAudio": "Подогнать длительность под созданное аудио", + "resetTiming": "Сбросить тайминг", "addingAudioToVideoFileDotDotDot": "Добавление аудио к видеофайлу...", - "preparingMergeDotDotDot": "Подготовка к слиянию...", + "preparingMergeDotDotDot": "Подготовка к объединению...", "importVoiceDotDotDot": "Импорт голоса...", - "voiceImportSuccessTitle": "Импортированный голос", + "renameVoiceDotDotDot": "Переименовать голос...", + "renameVoiceTitle": "Переименовать голос", + "voiceXCouldNotBeRenamedX": "Не удалось переименовать голос '{0}': {1}", + "deleteVoiceDotDotDot": "Удалить голос...", + "deleteVoiceTitle": "Удалить голос", + "deleteVoiceXQuestion": "Удалить голос '{0}'?\n\nЭталонная запись и ее файлы будут удалены с диска.", + "voiceXCouldNotBeDeletedX": "Не удалось удалить голос '{0}': {1}", + "voiceImportSuccessTitle": "Голос импортирован", "voiceXImported": "Голос '{0}' успешно импортирован", "voiceXCouldNotBeImported": "Не удалось импортировать голос '{0}' — подробности см. в журнале", - "importPiperVoiceTitle": "Голосовая модель Open Piper (.onnx)", + "importPiperVoiceTitle": "Открыть голосовую модель Piper (.onnx)", "piperVoiceConfigMissingTitle": "Отсутствует файл конфигурации", - "piperVoiceConfigMissingMessage": "Для Piper Voice файл конфигурации должен находиться рядом с файлом модели: {0}", - "dropAudioFileHereToImportVoice": "Перетащить аудиофайл сюда, чтобы импортировать голос", + "piperVoiceConfigMissingMessage": "Голосу Piper нужен файл конфигурации рядом с файлом модели: {0}", + "dropAudioFileHereToImportVoice": "Перетащите сюда аудиофайл, чтобы импортировать голос", "dropAudioFileHereHint": ".wav или .mp3", "voiceCloneTranscriptTitle": "Введите расшифровку аудиозаписи (необходимо для клонирования голоса)", - "useSpeechToTextDotDotDot": "Использовать преобразование речи в текст...", + "voiceManagerTitle": "TTS - Менеджер голосов", + "voiceManagerDotDotDot": "Менеджер голосов...", + "voiceManagerMenuItem": "Менеджер голосов TTS...", + "speakFromCurrentLineTitle": "Читать вслух с текущей строки", + "speakFromCurrentLineDotDotDot": "Читать вслух с текущей строки...", + "speakFromCurrentLineHint": "Читает строки вслух одну за другой, начиная с текущей. Нажмите Escape или щелкните другую строку, чтобы остановить.", + "stopSpeaking": "Остановить чтение", + "speakingLineX": "Чтение строки {0}... (Escape - остановить)", + "playWithSpeechTitle": "Воспроизвести с речью", + "playWithSpeechDotDotDot": "Воспроизвести с речью...", + "playWithSpeechHint": "Воспроизводит видео и произносит каждую строку, когда видео до нее доходит. Пауза и перемотка работают как обычно; нажмите Escape, чтобы остановить.", + "lowerVideoVolumeWhileSpeaking": "Уменьшать громкость видео во время речи", + "pauseVideoWhenSpeechRunsLate": "Ставить видео на паузу, если речь заходит на следующую строку", + "waitingForSpeechLineX": "Создание речи для строки {0}... (Escape - остановить)", + "voiceKindClone": "Клонированный голос", + "voiceKindPreset": "Встроенный", + "voiceKindModel": "Модель голоса", + "voiceKindOnline": "Онлайн", + "transcript": "Расшифровка", + "transcriptRequiredHint": "Обязательно - движок читает эту расшифровку записи (ref-text) при клонировании", + "transcriptOptionalHint": "Необязательно - точная расшифровка записи улучшает клонирование", + "saveTranscript": "Сохранить расшифровку", + "searchVoices": "Поиск голосов", + "loadingVoicesDotDotDot": "Загрузка голосов...", + "noVoicesForEngine": "Нет голосов - импортируйте запись или скачайте набор голосов", + "noVoicesMatchFilter": "Нет голосов, соответствующих поиску", + "copyVoiceTo": "Копировать голос в", + "copyVoiceToDotDotDot": "Копировать голос в движок...", + "copyingVoiceXToYDotDotDot": "Копирование голоса '{0}' в {1}...", + "voiceXCopiedToY": "Голос '{0}' скопирован в {1}", + "voiceXCouldNotBeCopiedToY": "Не удалось скопировать голос '{0}' в {1} - подробности см. в журнале", + "voiceXAlreadyExistsInYContinue": "Голос с именем '{0}' уже существует в {1}.\n\nВсе равно копировать?", + "openVoicesFolder": "Открыть папку голосов", + "downloadVoicePacksDotDotDot": "Скачать наборы голосов...", + "downloadVoicePacksTitle": "TTS - Скачать наборы голосов", + "voicePackIntro": "Наборы голосов - это коллекции коротких чистых записей с расшифровками, готовых для клонирования. Каждый набор импортируется в выбранный движок (уже имеющиеся голоса пропускаются) и содержит ATTRIBUTION.txt с лицензией и источниками.", + "voicePackDetailsXVoicesYSizeZLicense": "Голосов: {0} · {1} · {2}", + "installToEngine": "Установить в движок", + "downloadAndInstall": "Скачать и установить", + "selectAtLeastOneVoicePack": "Выберите хотя бы один набор голосов", + "installingXDotDotDot": "Установка {0}...", + "xVoicesInstalledYSkipped": "Установлено голосов: {0} (уже было: {1})", + "useSpeechToTextDotDotDot": "Распознать речь...", "autoCastMenuItem": "Найти голоса в видео и клонировать их...", "autoCastSpeakersTitle": "Голоса, звучащие в видео", - "autoCastSpeakersSubtitle": "Присвоить имя каждому говорящему — это имя станет именем актёра в субтитрах и именем клонированного голоса. Если дать двум говорящим одинаковое имя, их голоса объединятся в один.", - "autoCastFoundXSpeakersInYLines": "{0} динамиков в {1} строках", - "autoCastLines": "Линии", - "autoCastAudio": "Аудио", + "autoCastSpeakersSubtitle": "Задайте имя каждому говорящему — оно станет именем актера в субтитрах и именем клонированного голоса. Дайте двум говорящим одно имя, чтобы объединить их в один голос.", + "autoCastFoundXSpeakersInYLines": "Говорящих: {0}, строк: {1}", + "autoCastLines": "Строки", "autoCastSays": "Говорит", - "autoCastNeedsVideo": "Чтобы услышать эти голоса, необходимо иметь доступ к открытому видеоматериалу.", - "autoCastNoSpeakersFound": "Голоса говорящих не обнаружены. Транскрипция должна быть получена с помощью системы преобразования речи в текст, которая различает говорящих, например, Crisp ASR MOSS Diarize.", + "autoCastNeedsVideo": "Чтобы найти голоса, нужно открыть видео.", + "autoCastNoSpeakersFound": "Говорящие не найдены. Транскрипция должна быть получена движком распознавания речи, который различает говорящих, например Crisp ASR MOSS Diarize.", "autoCastCloningX": "Клонирование {0}...", - "autoCastDoneXVoices": "{0} голосов клонировано - откройте программу преобразования текста в речь для создания дубляжа", + "autoCastDoneXVoices": "Клонировано голосов: {0} — откройте синтез речи, чтобы создать дубляж", "autoCastNothingCloned": "Ни один из голосов не удалось клонировать — подробности см. в журнале.", "autoCastReplaceSubtitleQuestion": "Это заменит открытые субтитры на транскрипцию видео. Продолжить?", - "cloneVoicePerLine": "Клон из видео (озвучка каждой реплики)", - "cloneVoicePerLinePreparing": "Взяв за основу озвучку каждой реплики из видео...", - "cloneVoicePerLineNeedsVideo": "Для клонирования голоса каждой реплики необходимо, чтобы к видео относились соответствующие субтитры. Открыть видео и попробовать снова.", + "cloneVoicePerLine": "Клонировать из видео (голос каждой реплики)", + "cloneVoicePerLinePreparing": "Извлечение голоса каждой реплики из видео...", + "cloneVoicePerLineNeedsVideo": "Для клонирования голоса каждой реплики нужно видео, к которому относятся субтитры. Откройте видео и попробуйте снова.", "cloneVoicePerLineNoClips": "Из видео не удалось извлечь звук, поэтому клонировать его не с чего. Убедитесь, что в видео есть звуковая дорожка.", - "cloneVoicePerLineNeedsOriginalSubtitleX": "{0} может клонировать строку только в том случае, если знает, что говорится в видео на этой строке, а именно из субтитров на языке оригинала. Оригинальные субтитры не загружены, поэтому каждая строка будет произнесена первым импортированным голосом, а не голосом из видео.\n\nОткройте оригинальные субтитры (Файл > Открыть оригинал...) рядом с переводом, затем сгенерируйте их снова.", + "cloneVoicePerLineTranscribeClipsXYZ": "{0} может клонировать голос для строки, только если известно, что говорится в видео в этой строке. Это неизвестно для {1} из {2} строк - обычно это берется из субтитров на языке оригинала (Файл > Открыть оригинал...).\n\nРаспознать речь для этих строк из видео сейчас?\n\nДа: выберите движок и язык речи в видео, и эталонные фрагменты будут распознаны перед созданием речи.\nНет: все равно создать - эти строки будут произнесены обычным голосом вместо голоса из видео.", "voiceCloneConsentTitle": "Клонирование голоса — перед началом работы", "voiceCloneConsentHeader": "Вы собираетесь клонировать голос", - "voiceCloneConsentIntro": "Клонирование имитирует голос реального человека. В большинстве стран это влечет за собой определенные правила, а в ЕС юридические обязанности ложатся на вас, а не на службу редактирования субтитров. Пожалуйста, прочтите это.", - "voiceCloneConsentPointPermission": "Клонировать только тот голос, на использование которого у вас есть право — ваш собственный или голос, на использование которого говорящий дал разрешение. Голос является персональными данными и представляет собой право на защиту личности, поэтому клонирование без разрешения может быть незаконным.", - "voiceCloneConsentPointDisclose": "Если публикуете аудиозапись, имитирующую голос реального человека, вы должны указать, что она создана с помощью искусственного интеллекта. В ЕС это требуется в соответствии с Законом об искусственном интеллекте (Регламент (ЕС) 2024/1689, статья 50), который вступает в силу со 2 августа 2026 года.", - "voiceCloneConsentPointNoMarking": "Функция Subtitle Edit отключает голосовое оповещение об использовании ИИ, неслышимый водяной знак и подпись C2PA, позволяя использовать аудио в видео без изменений. Это означает, что ничто не укажет на то, что результат был сгенерирован ИИ.", + "voiceCloneConsentIntro": "Клонирование копирует голос реального человека. В большинстве стран для этого есть правила, а в ЕС — юридические обязанности, которые лежат на вас, а не на Subtitle Edit. Пожалуйста, прочтите это один раз.", + "voiceCloneConsentPointPermission": "Клонируйте только тот голос, который вы имеете право использовать — свой собственный или голос человека, давшего разрешение. Голос — это персональные данные и личное неимущественное право, поэтому клонирование без разрешения может быть незаконным.", + "voiceCloneConsentPointDisclose": "Если вы публикуете аудио, имитирующее реального человека, вы должны указать, что оно создано ИИ. В ЕС этого требует Закон об ИИ (Регламент (ЕС) 2024/1689, статья 50), который применяется со 2 августа 2026 года.", + "voiceCloneConsentPointNoMarking": "Subtitle Edit отключает голосовое предупреждение об ИИ, неслышимый водяной знак и подпись C2PA движка, чтобы аудио можно было использовать в видео без изменений. Это значит, что ничто не пометит результат как созданный ИИ за вас.", "voiceCloneConsentPointNoImpersonation": "Не используйте клонированный голос, чтобы выдать себя за другого человека, чтобы создать впечатление, будто человек говорит то, чего он никогда не говорил, а также для мошенничества, преследования или обмана.", "voiceCloneConsentPointLocal": "Эталонная запись хранится на этом компьютере. Клонирование выполняется локально, и аудиофайл не загружается в Subtitle Edit или куда-либо еще.", "voiceCloneConsentPointModelLicense": "Каждая модель речи также имеет собственную лицензию, которая может накладывать дополнительные ограничения на коммерческое использование.", "voiceCloneConsentReadMore": "О правилах прозрачности в соответствии с Законом ЕС об искусственном интеллекте", - "voiceCloneConsentCheckBox": "Я имею право клонировать этот голос, и я подтверждаю, что сгенерированный аудиофайл создан с помощью искусственного интеллекта", + "voiceCloneConsentCheckBox": "Я имею право клонировать этот голос и укажу, что созданное аудио сгенерировано ИИ", "voiceCloneConsentAccept": "Принять и продолжить", "voiceCloneConsentDeclined": "Функция клонирования голоса недоступна до принятия данных условий.", "advancedTtsSettings": "Расширенные настройки синтеза речи", "advancedTtsAudioProcessing": "Обработка звука", - "advancedTtsOutput": "Выход", + "advancedTtsVoiceCloning": "Клонирование голоса", + "cleanCloneReferences": "Очищать эталоны для клонирования голоса (Sidon)", + "cleanCloneReferencesDescription": "Удаляет музыку, шум и реверберацию из аудио, с которого клонируется голос: фрагментов из видео и записей, импортированных в менеджере голосов. Использует модель восстановления речи Sidon на audio.cpp (загрузка 940 МБ). Клонированный голос больше не копирует фон, но очень тихая или перекрывающаяся речь может звучать приглушенно.", + "cleaningCloneReferencesDotDotDot": "Очистка эталонов для клонирования голоса...", + "downloadSidonTitle": "Скачать Sidon?", + "downloadSidonQuestionX": "Для очистки эталонов для клонирования голоса нужна модель восстановления речи Sidon ({0}).\n\nСкачать ее сейчас? Без нее эталоны используются как есть.", "proAudioPostProcessing": "Профессиональная постобработка звука", "proAudioPostProcessingDescription": "Применяет к каждому сегменту эквалайзер, шумоподавление, компрессию, нормализацию громкости (-16 LUFS) и плавное нарастание/затухание.", - "audioDucking": "приглушение звука", - "audioDuckingDescription": "Уменьшает громкость исходного видеозвука и смешивает его со звуком синтезатора речи, поэтому оригинальная звуковая дорожка остается едва слышимой.", - "originalVolumePercent": "Исходный объем %", + "generatingSpeechSegmentXOfY": "Создание речи: сегмент {0} из {1}", + "adjustingSpeedSegmentXOfY": "Настройка скорости: сегмент {0} из {1}", + "mergingAudioSegmentXOfY": "Объединение аудио: сегмент {0} из {1}", + "postProcessingSegmentXOfY": "Постобработка: сегмент {0} из {1}", + "audioDucking": "Приглушение оригинала", + "audioDuckingDescription": "Приглушает исходный звук видео и накладывает поверх него речь, так что оригинальная дорожка остается едва слышной. Применяется, только когда речь добавляется в видеофайл.", + "removeOriginalSpeech": "Удалить оригинальную речь (медленно)", + "removeOriginalSpeechDescription": "Сохраняет музыку и звуковые эффекты исходного видео, но удаляет из него речь и накладывает поверх новую речь. С GPU занимает примерно столько же времени, сколько длится видео, а без него во много раз дольше. При включенном приглушении оригинала его громкость применяется к музыке и эффектам. Применяется, только когда речь добавляется в видеофайл.", + "removingOriginalSpeech": "Удаление оригинальной речи...", + "removeOriginalSpeechFailed": "Не удалось удалить оригинальную речь - речь добавлена в видео без этого.", + "speechRemovalModelDescription": "Лучшее качество сохраняет больше всего музыки и звуковых эффектов. Быстрый режим примерно в три раза быстрее, но теряется чуть больше музыки.", + "speechRemovalBestQuality": "Лучшее качество (Mel-Band RoFormer)", + "speechRemovalFast": "Быстро (HTDemucs)", + "videoTruncatedWarning": "Изображение в новом видеофайле обрывается через {0}, но длительность исходного видео - {1}: картинка застынет, а звук продолжится.\n\nФайл сохранен. Вывод ffmpeg см. в error-log.txt в папке данных Subtitle Edit.", + "originalVolumePercent": "Громкость оригинала, %", "vadSilenceCompression": "Сжатие тишины VAD", - "vadSilenceCompressionDescription": "Сокращает паузы между словами перед изменением темпа. Использует функцию обнаружения активности голоса для сжатия только пауз, не затрагивая речь. Это предпочтительный первый шаг — он сокращает Длительность без потери качества.", + "vadSilenceCompressionDescription": "Сокращает паузы между словами вместо ускорения речи, чтобы фрагмент поместился без потери качества.", "maxSilenceMs": "Максимальная тишина (мс)", - "highQualityTimeStretch": "Высококачественное растяжение во времени (WSOLA/резинка)", - "highQualityTimeStretchDescription": "Использует алгоритм \"резиновой ленты\" (WSOLA) вместо стандартного фильтра atempo для сохранения высоты тона при изменении скорости. Обеспечивает более естественное звучание речи, особенно при высоких коэффициентах скорости. Требует наличия библиотеки librubberband в вашей сборке FFmpeg — автоматически переключается на atempo, если она недоступна.", + "highQualityTimeStretch": "Высококачественное растяжение времени", + "highQualityTimeStretchDescription": "Ускоряет речь алгоритмом rubberband, который звучит естественнее стандартного. Нужна библиотека librubberband в FFmpeg; иначе используется стандартный алгоритм.", "rubberbandInstalled": "(установлено)", "rubberbandNotFound": "(не найдено в FFmpeg)", - "silencePaddingMs": "Заполнение пауз (мс)", - "silencePaddingMsDescription": "Добавляет короткую паузу в конце каждого сегмента. Полезно для создания пространства для передышки между предложениями.", - "outputSampleRate": "Частота дискретизации выходного сигнала (0 = значение по умолчанию)", - "outputSampleRateDescription": "Изменяет частоту дискретизации всех сегментов до заданного значения (например, 44100, 48000). Установите значение 0, чтобы сохранить исходную частоту.", - "generationFolder": "Папка генерирования", - "generationFolderDescription": "Папка для аудиоклипов, созданных во время выполнения программы. Оставить поле пустым, чтобы использовать системную временную папку. Для каждого запуска создается своя подпапка.", - "deleteTempFiles": "Удалять сгенерированные клипы при закрытии", - "deleteTempFilesDescription": "При закрытии окна преобразования текста в речь удаляет папку, в которой был создан файл запуска. Сохраненные аудио- и видеофайлы остаются без изменений. Отключить эту функцию, чтобы сохранить отдельные клипы.", - "edgeTtsRate": "Edge-TTS rate", - "edgeTtsRateDescription": "Скорость речи для Edge-TTS, например, \"+50%\", \"-30%\" или \"+0%\" по умолчанию.", - "edgeTtsPitch": "Edge-TTS pitch", - "edgeTtsPitchDescription": "Настройка высоты тона для Edge-TTS, например, \"+10 Гц\", \"-5 Гц\" или \"+0 Гц\" по умолчанию.", - "edgeTtsVolume": "Объем Edge-TTS", - "edgeTtsVolumeDescription": "Регулировка громкости для Edge-TTS, например, \"+20%\", \"-10%\" или \"+0%\" по умолчанию.", - "downloadPiperPrompt": "«Преобразование текста в речь» требует Piper.\n\nСкачать и использовать Piper?", + "silencePaddingMs": "Добавочная тишина (мс)", + "silencePaddingMsDescription": "Дополнительная тишина в конце каждого фрагмента, чтобы оставить паузу между предложениями.", + "outputSampleRate": "Частота дискретизации на выходе", + "outputSampleRateDescription": "Передискретизирует каждый фрагмент, например в 44100 или 48000. Укажите 0, чтобы сохранить исходную частоту.", + "generationFolder": "Папка для генерации", + "generationFolderDescription": "Куда записываются фрагменты во время генерации. Оставьте пустым для системной временной папки. Для каждого запуска создается своя подпапка.", + "deleteTempFiles": "Удалять созданные фрагменты при закрытии", + "deleteTempFilesDescription": "Удаляет папку генерации при закрытии окна синтеза речи. Сохраненные аудио- и видеофайлы остаются.", + "edgeTtsRate": "Скорость Edge-TTS", + "edgeTtsRateDescription": "Скорость речи, например \"+50%\" или \"-30%\". \"+0%\" — по умолчанию.", + "edgeTtsPitch": "Высота голоса Edge-TTS", + "edgeTtsPitchDescription": "Изменение высоты тона, например \"+10Hz\" или \"-5Hz\". \"+0Hz\" — по умолчанию.", + "edgeTtsVolume": "Громкость Edge-TTS", + "edgeTtsVolumeDescription": "Изменение громкости, например \"+20%\" или \"-10%\". \"+0%\" — по умолчанию.", + "downloadPiperPrompt": "Для синтеза речи нужен Piper.\n\nСкачать и использовать Piper?", "omniVoiceTtsSettings": "Настройки OmniVoice TTS", - "reDownloadOmniVoiceTts": "Перезагрузить OmniVoice TTS", + "reDownloadOmniVoiceTts": "Скачать заново OmniVoice TTS", "selectTheBuildToDownload": "\nВыберите сборку для загрузки:", "downloadTheLatestOmniVoiceTtsPrompt": "\nЗагрузить последнюю версию OmniVoice TTS прямо сейчас?", "vulkanRuntimeMayBeRequired": "Может потребоваться среда выполнения Vulkan", - "vulkanRuntimeNotDetectedMessage": "Для сборки Vulkan требуется среда выполнения Vulkan (vulkan-1.dll). Обычно он поставляется с текущими драйверами графического процессора, но не был обнаружен.\n\nУстановите его из:\n{0}\n\nВсе равно продолжить работу с Вулканом?", + "vulkanRuntimeNotDetectedMessage": "Сборке Vulkan нужна среда выполнения Vulkan (vulkan-1.dll). Обычно она поставляется с актуальными драйверами видеокарты, но не была обнаружена.\n\nУстановите ее отсюда:\n{0}\n\nВсе равно продолжить с Vulkan?", "qwen3TtsSettings": "Настройки синтеза речи Qwen3", "kokoroTtsSettings": "Настройки синтеза речи Kokoro", "chatterboxTtsSettings": "Настройки Chatterbox TTS", - "piperSettings": "Настройки Пайпера", - "voiceInstruction": "Голосовая инструкция", + "piperSettings": "Настройки Piper", + "voiceInstruction": "Дизайн голоса", "voiceInstructionHint": "По желанию - например, \"Говорите спокойным и дружелюбным тоном\"", "voiceGender": "Пол", "voiceAge": "Возраст", "voicePitch": "Тон", "voiceAccent": "Акцент", - "voiceInstructionClonedVoiceNote": "Изменение тембра голоса влияет только на \"стандартный\" голос — клонированный голос сохраняет свои собственные характеристики.", - "actorVoicesTitle": "TTS - Cast", - "actorVoicesSubtitle": "Назначить голос TTS (и дополнительную инструкцию по созданию голоса) каждому актеру или голосу.", - "actorVoicesAssignedXOfY": "{0} из {1} назначено", + "voiceInstructionClonedVoiceNote": "Дизайн голоса влияет только на голос \"По умолчанию\" — клонированный голос сохраняет свои характеристики.", + "actorVoicesTitle": "TTS - голоса актеров", + "actorVoicesSubtitle": "Назначьте голос TTS (и, при желании, инструкцию по дизайну голоса) каждому актеру или голосу.", + "actorVoicesAssignedXOfY": "Назначено: {0} из {1}", "actorOrVoice": "Актер / Голос", "applyDefaultToAll": "Применить по умолчанию ко всем", - "clearAllAssignmentsConfirm": "Сбросить все голосовые назначения?", - "setupCast": "Состав...", - "setupCastHint": "Назначить каждому актеру (ASSA) или голосу (WebVTT) синтезатор речи (TTS).", + "clearAllAssignmentsConfirm": "Сбросить все назначения голосов?", + "setupCast": "Голоса актеров...", + "setupCastHint": "Назначить голос TTS каждому актеру (ASSA) или голосу (WebVTT).", "actorVoicesRowSettingsTitle": "TTS - Настройки голоса", "voiceSettingsForX": "Настройки голоса для \"{0}\"", "voiceInstructionFreeTextHint": "Свободный текст, используемый движком для формирования тона голоса.", - "voiceDesign": "Голосовая инструкция", - "noActorsFoundMessage": "Актеры не найдены. Сначала установать поле Актер в строках субтитров.", + "voiceDesign": "Дизайн голоса", + "noActorsFoundMessage": "Актеры не найдены. Сначала заполните поле \"Актер\" в строках субтитров.", "noWebVttVoicesFoundMessage": "В файле WebVTT не обнаружено голосов .", "mergeContinuationLinesPromptTitle": "Объединить строки продолжения?", - "mergeContinuationLinesPromptMessage": "Некоторые строки представляют собой одно предложение, разделенное на несколько субтитров.\n\nИх объединение перед генерацией позволяет движку TTS произносить каждую мысль как одну группу дыхания, что обычно звучит более естественно.\n\nПросмотреть и применить слияния сейчас?", - "skipNoiseLinesPromptTitle": "Пропустить звуковые и музыкальные реплики?", + "mergeContinuationLinesPromptMessage": "Некоторые строки похожи на одно предложение, разбитое на несколько субтитров.\n\nЕсли объединить их перед генерацией, движок TTS произнесет каждую мысль на одном дыхании, что обычно звучит естественнее.\n\nПросмотреть и применить объединения сейчас?", + "skipNoiseLinesPromptTitle": "Пропустить строки со звуками и музыкой?", "skipNoiseLinesPromptMessage": "Некоторые строки содержат только звуки или музыку — например, ♪ или [хлопок двери].\n\nРечевые движки пытаются прочитать такие строки вслух и часто придумывают слова.\n\nПроверить эти строки и оставить их беззвучными?", "skipNoiseLinesTitle": "Строки, содержащие только звуки или музыку", "skipNoiseLinesFoundX": "{0} строк содержат только звуки или музыку - отмеченные строки остаются беззвучными", - "skipNoiseLinesColumnSkip": "Пропускать", - "detectSpeakersPromptTitle": "Имена выступающих найдены в тексте?", - "detectSpeakersPromptMessage": "Некоторые строки начинаются с имени говорящего — например, \"МАЙК:\" или \"[ЧИТАТЕЛЬ]\".\n\nВ поле \"Актер\" каждый говорящий может получить свой собственный голос через \"Настроить состав\", при этом имя не зачитывается вслух.\n\nПроверить имена сейчас? (это влияет только на генерацию речи — сами субтитры не изменяются)", - "detectSpeakersTitle": "Имена выступающих в тексте", - "detectSpeakersFoundX": "Обнаружено {0} тегов говорящих ({1} говорящих) - отмеченные имена становятся именами актеров и не зачитываются вслух", + "skipNoiseLinesColumnSkip": "Пропустить", + "detectSpeakersPromptTitle": "Найдены имена говорящих в тексте?", + "detectSpeakersPromptMessage": "Некоторые строки начинаются с имени говорящего — например, \"МАЙК:\" или \"[РАССКАЗЧИК]\".\n\nЕсли перенести их в поле \"Актер\", каждый говорящий сможет получить свой голос через \"Голоса актеров\", а имя не будет зачитываться вслух.\n\nПроверить имена сейчас? (влияет только на генерацию речи — сами субтитры не изменяются)", + "detectSpeakersTitle": "Имена говорящих в тексте", + "detectSpeakersFoundX": "Найдено меток говорящих: {0} (говорящих: {1}) - отмеченные имена станут актерами и не будут зачитываться вслух", "detectSpeakersColumnUse": "Использовать", "detectSpeakersSticky": "Строки без имени продолжают речь предыдущего говорящего", - "subtitleUpdatedFromReviewSingular": "Исправлена одна строка из обзора выступления", - "subtitleUpdatedFromReviewPlural": "Обновлено {0} строк из обзора речи", - "subtitleMergedLinesAppliedSingular": "Применено слияние текста и речи по одной строке", - "subtitleMergedLinesAppliedPlural": "Применено слияние строк {0} из текста в речь" + "subtitleUpdatedFromReviewSingular": "Обновлена одна строка по итогам проверки речи", + "subtitleUpdatedFromReviewPlural": "Обновлено строк по итогам проверки речи: {0}", + "subtitleMergedLinesAppliedSingular": "Применено одно объединение строк из синтеза речи", + "subtitleMergedLinesAppliedPlural": "Применено объединений строк из синтеза речи: {0}" }, "shotChanges": { - "generateShotChanges": "Сгенерировать изменения кадра", - "importShotChanges": "Импорт изменений в кадре", - "generateShotChangesWithFfmpeg": "Создание изменений в кадре с помощью ffmpeg", - "shotChangeTimeCode": "код времени смены кадра", - "openShotChangesFile": "файл изменений открытого кадра", - "importShotChangesFromFile": "Импорт изменений кадра из файла", + "generateShotChanges": "Создать смены планов", + "importShotChanges": "Импорт смен планов", + "generateShotChangesWithFfmpeg": "Создать смены планов с помощью ffmpeg", + "shotChangeTimeCode": "Временной код смены плана", + "openShotChangesFile": "Открыть файл смен планов", + "importShotChangesFromFile": "Импорт смен планов из файла", "timeCodeFormatColon": "Формат временного кода:", - "shotChangesList": "Список изменений в кадре", - "shotChangesClearQuestion": "Вы уверены, что хотите отменить все изменения в кадре?", - "deleteSelectedShotChangeQuestion": "Вы уверены, что хотите удалить выбранное изменение кадра?" + "shotChangesList": "Список смен планов", + "shotChangesClearQuestion": "Удалить все смены планов?", + "deleteSelectedShotChangeQuestion": "Удалить выбранную смену плана?", + "exportShotChanges": "Экспорт смен планов" }, "chapters": { - "title": "Главы", "chaptersDotDotDot": "Главы...", - "chapters": "Главы", - "selectedChapter": "Избранная глава", + "selectedChapter": "Выбранная глава", "chapterTitle": "Название главы", "startTime": "Время начала", "addChapter": "Добавить главу", "addChapterAtVideoPosition": "Добавить главу в позицию видео", "goToPreviousChapter": "Перейти к предыдущей главе", "goToNextChapter": "Перейти к следующей главе", - "toggleChapterAtVideoPosition": "Переключить главу в позиции видео", + "toggleChapterAtVideoPosition": "Добавить/удалить главу в позиции видео", "newChapterTitle": "Глава {0}", "deleteSelectedChapterQuestion": "Вы уверены, что хотите удалить выбранную главу?", "clearChaptersQuestion": "Вы уверены, что хотите удалить все главы?", @@ -2493,101 +2931,221 @@ "exportToFile": "Экспорт в файл...", "chapterFilesFilter": "Файлы глав", "noChaptersFoundInVideo": "В видеофайле не найдено ни одной главы.", - "xChaptersImported": "{0} глав импортировано", + "xChaptersImported": "Импортировано глав: {0}", "adjustTimes": "Скорректировать время", - "shiftAllTimes": "Смена всех времен", - "shiftAllTimesDescription": "Перемещать каждую главу вперед или назад на одинаковое расстояние.", - "scaleTimes": "Изменить частоту кадров", - "scaleTimesDescription": "Масштабируйте время каждой главы, изменяя частоту кадров от одного значения к другому.", + "shiftAllTimes": "Сдвинуть все главы", + "shiftAllTimesDescription": "Сдвинуть каждую главу вперед или назад на одну и ту же величину.", + "scaleTimesDescription": "Пересчитать время каждой главы из одной частоты кадров в другую.", "fromFrameRate": "От", "toFrameRate": "К", - "apply": "Применить", "writeToVideo": "Записать в видео...", - "writeToVideoTitle": "Записать главы для видео", + "writeToVideoTitle": "Записать главы в видео", "writeToVideoDescription": "Главы записываются в копию видеофайла. Ничего не перекодируется, поэтому процесс быстрый и без потерь качества.", "writeToVideoUnsupportedContainer": "Запись глав возможна только в файлы форматов MP4 и Matroska.", "outputFileName": "Имя выходного файла", - "writing": "Написание глав...", - "writtenToX": "Главы, написанные для {0}", + "writing": "Запись глав...", + "writtenToX": "Главы записаны в {0}", "unableToWriteChapters": "Не удалось записать главы в видеофайл.", "chaptersSavedToX": "Главы сохранены в {0}", - "noVideoLoaded": "Видео не загружено", - "emptyListCallToAction": "Глав пока нет — добавьте главу в нужное место для видео или импортировать их из видеофайла." + "emptyListCallToAction": "Глав пока нет — добавьте главу в позиции видео или импортируйте их из видео или файла." }, "videoOcr": { - "title": "Встроенные субтитры, полученные с помощью OCR", + "title": "OCR вшитых субтитров", "scanArea": "Область сканирования", - "scanAreaInfo": "Перетащить курсор по кадру видео, чтобы выделить область субтитров", + "scanAreaInfo": "Выделите мышью на кадре область, где находятся субтитры", "bottomThird": "Нижняя треть", "bottomHalf": "Нижняя половина", - "fullFrame": "Полнокадровый", + "fullFrame": "Весь кадр", "engine": "Движок OCR", "scan": "Сканировать", - "framesPerSecond": "Кадры в секунду", + "framesPerSecond": "Кадров в секунду", "textBrightnessMinimum": "Минимальная яркость текста (0 = выключено)", "postProcessing": "Постобработка", "textSimilarityPercent": "Объединить строки по сходству (%)", "maxGapMs": "Максимальный промежуток между строками (мс)", - "minDurationMs": "Минимальная продолжительность (мс)", + "minDurationMs": "Минимальная длительность (мс)", "addAssaPositionTag": "Добавить тег позиции ASSA (например, {\\an8})", "startOcr": "Запуск OCR", - "extractingFramesX": "Извлечение кадров изображения... {0}%", + "extractingFramesX": "Извлечение кадров... {0}%", "analyzingFramesXY": "Анализ кадров... {0}/{1}", - "runningOcrXY": "Выполняется распознавание текста... {0}/{1}", - "noLinesFoundTitle": "Субтитры не найдены", "noLinesFoundMessage": "В области сканирования текст не найден — попробуйте отрегулировать область сканирования, движок или минимальную яркость.", + "ocrStoppedEarlyMessage": "Движок OCR остановился до того, как были прочитаны все кадры, поэтому найденные строки сохранены, а остальные отсутствуют.{0}{0}{1}", "linesFoundX": "найдено {0} строк", "refiningTimingXY": "Уточнение времени... {0}/{1}", - "fixOcrErrors": "Исправление ошибок распознавания текста (OCR)", - "dictionary": "Словарь", "editLineX": "Редактировать строку {0}", - "downloadDictionaryHint": "Скачайте словарь для проверки орфографии...", + "downloadDictionaryHint": "Скачать словарь для проверки орфографии...", "framesPerSecondHint": "Сколько кадров в секунду сканируется. 5 подходит для обычных субтитров; более высокое значение позволяет распознавать очень короткие строки и более точно группировать их, но требует больше времени на распознавание текста.", "textBrightnessMinimumHint": "Пиксели темнее этого значения не считаются текстом субтитров: группировка кадров следует за светлым текстом, кадры без ярких пикселей пропускаются, и движок Paddle считывает кадры, в которых все более темные пиксели закрашены черным. Установите значение 0 для темного текста субтитров.", - "textSimilarityPercentHint": "Насколько схожими (в процентах) должны быть два последовательных результата распознавания текста, чтобы считаться одним и тем же подзаголовком и объединиться в одну строку.", - "maxGapHint": "Самая длинная пауза между двумя похожими результатами распознавания текста, которая всё же объединяет их в один субтитр, — это преодоление однокадровых мерцаний. Слишком большая пауза может привести к объединению строки, отображаемой дважды подряд.", + "textSimilarityPercentHint": "Насколько похожими (в процентах) должны быть два последовательных результата OCR, чтобы считаться одним субтитром и объединиться в одну строку.", + "maxGapHint": "Наибольшая пауза между двумя похожими результатами OCR, при которой они все еще объединяются в один субтитр — сглаживает мерцание в один кадр. Слишком большое значение может объединить строку, показанную дважды подряд.", "minDurationHint": "Строки на экране короче этого значения отбрасываются как ошибки распознавания текста (OCR).", "dictionaryHint": "Словарь проверки орфографии, используемый механизмом распознавания текста (OCR) и подсветкой слов: известные слова отображаются зеленым цветом, неизвестные — красным.", - "previewPosition": "Предварительный просмотр позиции", + "previewPosition": "Позиция предпросмотра", "unableToReadVideoTitle": "Не удается прочитать видео", "unableToReadVideoMessage": "Не удалось прочитать информацию о видео из: {0}", "abortOcrTitle": "Прервать распознавание текста?", - "abortOcrMessage": "Вы хотите прервать выполнение оптического распознавания символов?", + "abortOcrMessage": "Прервать выполняющееся распознавание?", "testOcr": "Проверить текущий кадр", "testOcrRunning": "Тестирование распознавания текста на текущем кадре...", "testOcrResultX": "Результат теста: {0}", - "testOcrNoTextFound": "Проверка: в области сканирования текст не найден" + "testOcrNoTextFound": "Проверка: в области сканирования текст не найден", + "engineSettings": "Настройки движка OCR", + "engineBuiltIn": "Встроен в операционную систему", + "engineExternalServer": "Внешний сервер (устанавливается и управляется вне Subtitle Edit)", + "engineCloudApi": "Облачный API (требуется ключ API)", + "engineNothingToInstall": "Ничего устанавливать не нужно", + "engineModelsMissing": "Движок установлен, модели отсутствуют", + "website": "Веб-сайт" }, - "goToVideoPosition": "Перейти к положению видео", - "goToVideoPositionDotDotDot": "Перейдите к положению видеокамеры...", + "backgroundMusic": { + "title": "Создать фоновую музыку", + "generateBackgroundMusicDotDotDot": "Создать фоновую музыку...", + "tempoBpm": "Темп (BPM)", + "generateSeconds": "Создать (секунды)", + "seed": "Семя", + "randomSeed": "Случайный", + "outputLength": "Длительность результата", + "outputLengthVideoX": "{0} (длительность видео - музыка бесшовно зацикливается)", + "musicVolumePercent": "Громкость музыки (%)", + "removeExistingAudioTracks": "Удалить существующие аудиодорожки", + "originalAudioVolumePercent": "Громкость исходного аудио (%)", + "saveAudioDotDotDot": "Сохранить аудио...", + "addToVideoDotDotDot": "Добавить в видео...", + "engineInfo": "ACE-Step 1.5 Turbo через audio.cpp (лицензия MIT) - работает локально", + "presetCooking": "Кулинария / выпечка", + "presetTech": "Обзор техники / гаджетов", + "presetForest": "Лес / природа", + "presetRelaxingPiano": "Расслабляющее фортепиано", + "presetLofiVlog": "Lo-fi влог", + "presetCorporate": "Корпоративное / объясняющее видео", + "loadingModel": "Загрузка модели...", + "composing": "Сочинение...", + "generatingAudio": "Создание аудио...", + "decodingAudio": "Декодирование аудио...", + "creatingLoop": "Создание бесшовной петли...", + "resultLoopXYZ": "Петля: {0} при {1} BPM, совпадение стыка {2}%", + "resultNoLoopX": "Музыка готова: {0}", + "addingMusicToVideo": "Добавление музыки в видео...", + "downloadModelTitle": "Скачать музыкальную модель?", + "downloadModelQuestionX": "Для создания музыки нужна модель ACE-Step 1.5 ({0}).\n\nСкачать модель?", + "downloadingModel": "Скачивание модели ACE-Step 1.5...", + "saveAudioTitle": "Сохранить фоновую музыку", + "audioFileSavedX": "Аудиофайл сохранен: {0}", + "unableToGenerateMusic": "Не удалось создать музыку", + "unableToAddMusicToVideo": "Не удалось добавить музыку в видео", + "outputLengthTextToSpeech": "По созданной речи - музыка бесшовно зацикливается и приглушается, когда кто-то говорит", + "addBackgroundMusic": "Добавить фоновую музыку", + "addBackgroundMusicHint": "Создать музыку локально с помощью ACE-Step 1.5 и подмешать ее под речь - она приглушается, когда кто-то говорит", + "music": "Музыка", + "generatingBackgroundMusicDotDotDot": "Создание фоновой музыки...", + "mixingBackgroundMusicDotDotDot": "Сведение фоновой музыки..." + }, + "goToVideoPosition": "Перейти к позиции видео", + "goToVideoPositionDotDotDot": "Перейти к позиции видео...", "generateBlankVideoDotDotDot": "Создать пустой видеофайл...", "generateBlankVideoTitle": "Создать пустой видеофайл", - "reEncodeVideoForBetterSubtitlingTitle": "Перекодировать видео для улучшения качества субтитров", - "reEncodeVideoForBetterSubtitlingDotDotDot": "Перекодировать видео для улучшения качества субтитров...", - "openSecondarySubtitleOnVideoPlayerDotDotDot": "Дополнительные субтитры на видеоплеере, открыть...", - "openSecondarySubtitleOnVideoPlayer": "Дополнительные субтитры (в видеоплеере)", - "removeSecondarySubtitleOnVideoPlayer": "Удалить дополнительные субтитры из видеоплеера", + "reEncodeVideoForBetterSubtitlingTitle": "Перекодировать видео для удобной работы с субтитрами", + "reEncodeVideoForBetterSubtitlingDotDotDot": "Перекодировать видео для удобной работы с субтитрами...", + "openSecondarySubtitleOnVideoPlayerDotDotDot": "Открыть второй файл субтитров...", + "openSecondarySubtitleOnVideoPlayer": "Второй файл субтитров (в видеоплеере)", + "removeSecondarySubtitleOnVideoPlayer": "Убрать второй файл субтитров", + "editSecondarySubtitleSettings": "Настройки вторых субтитров", + "editSecondarySubtitleSettingsDotDotDot": "Настройки вторых субтитров...", + "secondarySubtitleRememberSettings": "Запомнить эти настройки", + "secondarySubtitleDoNotShowAgain": "Больше не показывать это окно", + "secondarySubtitleJustifyLines": "Выравнивать строки по ширине", "openRecentVideo": "Открыть недавнее видео", - "clearRecentVideos": "Очистить последние видео", - "cutVideoTitle": "Вырезанное видео", - "cutVideoDotDotDot": "Обрезание видео...", - "embedSubtitlesDotDotDot": "Добавить/удалить встроенные субтитлы...", - "generateTimeCodes": "Генерация временных кодов", + "clearRecentVideos": "Очистить список недавних видео", + "cutVideoTitle": "Обрезка видео", + "cutVideoDotDotDot": "Обрезать видео...", + "remuxVideoTitle": "Перепаковать видео", + "remuxVideoDotDotDot": "Перепаковать видео...", + "remuxVideoInputVideo": "Входное видео:", + "remuxVideoMultipleTracksRequiresMkv": "Для нескольких аудиодорожек или дорожек субтитров нужен контейнер MKV. Выходной формат автоматически изменен на .mkv.", + "remuxVideoOutputFormat": "Выходной формат:", + "remuxVideoOutputFile": "Выходной файл:", + "remuxVideoRemuxing": "Перепаковка видео и аудио...", + "remuxVideoFinalizing": "Завершение выходного файла (перемещение индекса в начало)...", + "remuxVideoCompleted": "Видео успешно перепаковано.", + "remuxVideoFailed": "Не удалось перепаковать видео.", + "remuxVideoPleaseSelectBoth": "Выберите и видео-, и аудиофайлы.", + "remuxVideoAssRequiresMkv": "Для субтитров ASS/SSA нужен контейнер MKV, чтобы сохранить все форматирование и стили.", + "remuxVideoSccRequiresMov": "Субтитры Scenarist (.scc) встраиваются как скрытые субтитры CEA-608, для которых нужен контейнер MOV или MPG. Выходной формат автоматически изменен на .mov.", + "remuxVideoSccNotWithWebM": "Для скрытых субтитров Scenarist (.scc) нужен контейнер MOV, который не может содержать видео VP9/AV1 из файла .webm. Удалите файл .scc или преобразуйте его в другой формат субтитров.", + "remuxVideoMpgMaxTwoCaptionTracks": "Файл .mpg может содержать не более двух дорожек скрытых субтитров (CC1 и CC3) - удалите файлы субтитров, чтобы осталось один или два.", + "remuxVideoMccRequiresMpg": "Субтитры MacCaption (.mcc) встраиваются как скрытые субтитры CEA-608/708 в видео MPEG-2, для чего нужен контейнер MPG. Выходной формат автоматически изменен на .mpg.", + "remuxVideoMpgReencodeVideoX": "Для скрытых субтитров в файле .mpg нужно видео MPEG-2, а видео - {0}. Перекодировать видео в MPEG-2? Это займет больше времени и немного снизит качество.", + "remuxVideoFileHasNoAudioX": "В \"{0}\" нет аудиодорожки, поэтому его нельзя использовать как источник аудио.", + "remuxVideoAddingClosedCaptions": "Добавление скрытых субтитров...", + "remuxVideoSelectAudioTrack": "Выберите аудиодорожку", + "remuxVideoSelectAudioTrackFor": "Выберите аудиодорожку для {0}", + "remuxVideoSelectAudioTrackPrompt": "Файл '{0}' содержит аудиодорожек: {1}. Выберите аудиодорожку для перепаковки:", + "remuxVideoVideoFile": "видео", + "remuxVideoAudioFile": "аудио", + "remuxVideoAudioFiles": "Аудиофайлы:", + "remuxVideoSubtitleFiles": "Файлы субтитров (необязательно, отключаемые субтитры):", + "remuxVideoSelectAudioTrackDotDotDot": "Выбрать аудиодорожку...", + "remuxVideoFilesX": "Файлов: {0}", + "remuxVideoMixAudio": "Смешать аудио в одну дорожку", + "remuxVideoVolumePercent": "Громкость %:", + "remuxVideoVolumeX": "Громкость {0}%", + "remuxVideoFastStart": "Оптимизировать для потоковой передачи (перенести индекс в начало - медленнее)", + "embedSubtitlesDotDotDot": "Добавить/удалить встроенные субтитры...", + "syncAudioTrackDotDotDot": "Синхронизировать аудиодорожку...", + "syncAudioTrackTitle": "Синхронизация аудиодорожки", + "syncAudioTrackAudioTrack": "Аудиодорожка", + "syncAudioTrackOffset": "Смещение (мс)", + "syncAudioTrackHint": "Положительные значения сдвигают звук позже, отрицательные — раньше. Сохраняется копия видео, в которой сдвинута только эта дорожка — ничего не перекодируется.", + "syncAudioTrackPreviewNeedsMpv": "Для предпросмотра смещения в реальном времени нужен видеоплеер mpv (Параметры > Настройки > Видео) — к сохраненному видео смещение применится в любом случае.", + "syncAudioTrackNoAudio": "В видео нет аудиодорожки.", + "syncAudioTrackSaveVideoDotDotDot": "Сохранить видео...", + "syncAudioTrackSaving": "Сохранение видео...", + "generateTimeCodes": "Создать временные коды", "checkeredImage": "Клетчатое изображение", "promptForFfmpegParamsAndGenerate": "Запросить параметры ffmpeg и сгенерировать", "cutVideoCutSegments": "Вырезать сегменты", "cutVideoMergeSegments": "Объединить сегменты", "cutVideoSplitSegments": "Сохранить сегменты по отдельности", - "cutVideoAlsoCutSubtitle": "Также вырезаны субтитры", + "cutVideoAlsoCutSubtitle": "Также обрезать субтитры", "cutVideoSubtitleFileGeneratedX": "Сгенерирован файл субтитров: {0}", + "cutVideoTransition": "Переход между сегментами", + "cutVideoTransitionDurationSeconds": "Длительность (секунды)", + "cutVideoFadeInSeconds": "Появление из черного в начале (секунды)", + "cutVideoFadeOutSeconds": "Затемнение в черный в конце (секунды)", + "cutVideoPreviewTransition": "Просмотр перехода", + "cutVideoPreviewTransitionTitle": "Предпросмотр перехода", + "cutVideoPreviewNeedsJoin": "Нет стыка для просмотра - добавьте хотя бы два сегмента для объединения или сегмент, вырезаемый из середины.", + "cutVideoTransitionInfoX": "Каждый переход перекрывает соединяемые части, поэтому результат становится короче на {0} секунд на каждый стык. Тайминг обрезанных субтитров корректируется соответственно.", + "cutVideoTransitionFade": "Растворение", + "cutVideoTransitionFadeBlack": "Через черный", + "cutVideoTransitionFadeWhite": "Через белый", + "cutVideoTransitionFadeGrays": "Через серый", + "cutVideoTransitionDissolve": "Наплыв", + "cutVideoTransitionWipeLeft": "Шторка влево", + "cutVideoTransitionWipeRight": "Шторка вправо", + "cutVideoTransitionWipeUp": "Шторка вверх", + "cutVideoTransitionWipeDown": "Шторка вниз", + "cutVideoTransitionSlideLeft": "Сдвиг влево", + "cutVideoTransitionSlideRight": "Сдвиг вправо", + "cutVideoTransitionSlideUp": "Сдвиг вверх", + "cutVideoTransitionSlideDown": "Сдвиг вниз", + "cutVideoTransitionSmoothLeft": "Плавно влево", + "cutVideoTransitionSmoothRight": "Плавно вправо", + "cutVideoTransitionCircleOpen": "Раскрытие круга", + "cutVideoTransitionCircleClose": "Закрытие круга", + "cutVideoTransitionRadial": "Радиальный", + "cutVideoTransitionPixelize": "Пикселизация", + "cutVideoTransitionBlur": "Размытие", + "cutVideoSegments": "Сегменты", + "cutVideoTransitions": "Переходы", + "cutVideoCutType": "Тип обрезки", "importCurrentSubtitle": "Импортировать текущий субтитр", - "addRemoveEmbeddedSubtitlesTitle": "Добавить/удалить встроенные субтитлы", - "addRemoveEmbeddedSubtitlesMp4Title": "Добавить/удалить встроенные субтитлы (MP4)", + "addRemoveEmbeddedSubtitlesTitle": "Добавить/удалить встроенные субтитры", + "addRemoveEmbeddedSubtitlesMp4Title": "Добавить/удалить встроенные субтитры (MP4)", "addCurrentSubtitle": "Добавить текущий субтитр", - "embeddedTrackNoSubtitlesFoundTitle": "Субтитры не найдены", "embeddedTrackNoSubtitlesFoundMessage": "Выбранный файл субтитров не содержит субтитров.", - "embeddedTrackNoTracksTitle": "Треки не добавлены", - "embeddedTrackNoTracksMessage": "Добавьте одну или несколько дорожек субтитров или загрузать видео, которое уже имеет встроенные субтитры.", + "embeddedTrackNoTracksTitle": "Дорожки не добавлены", + "embeddedTrackNoTracksMessage": "Добавьте одну или несколько дорожек субтитров или загрузите видео, в котором уже есть встроенные субтитры.", "embeddedTrackUnableToGenerateTitle": "Не удалось сгенерировать видео", "embeddedTrackUnableToGenerateMessage": "Выходной видеофайл не создан: {0}{1}Параметры: {2}", "embeddedTrackPreviewUnavailableTitle": "Предварительный просмотр недоступен", @@ -2595,83 +3153,100 @@ "embeddedTrackGeneratingVideoXY": "Создание видео... {0}% {1}", "embeddedTrackGeneratingVideo": "Создание видео...", "mp4FilesFilter": "MP4-файлы", - "viewMatroskaTrackX": "Посмотреть трек Матроска - {0}", + "embeddedTracksPickVideoHint": "Выберите видеофайл или перетащите его сюда, чтобы увидеть его дорожки субтитров.", + "embeddedTracks": "Дорожки", + "viewMatroskaTrackX": "Просмотр дорожки Matroska - {0}", "resolutionSeparator": "х", "openFromUrlTitle": "Открыть видеофайл по URL-адресу", "openFromUrlOpenOnline": "Открыть онлайн", - "openFromUrlOpenOnlineDescription": "Смотреть видео напрямую. Самый быстрый запуск.", - "openFromUrlOpenOnlineNote": "В этом режиме преобразование речи в текст и анализ импульсных сигналов недоступны.", + "openFromUrlOpenOnlineDescription": "Воспроизводить видео напрямую. Самый быстрый запуск.", + "openFromUrlOpenOnlineNote": "Распознавание речи и пики на осциллограмме в этом режиме недоступны.", "openFromUrlDownloadAndOpen": "Скачать и открыть", "openFromUrlDownloadAndOpenDescription": "Сохранить видео локально, а затем открыть.", - "openFromUrlDownloadAndOpenNote": "Необходимо для преобразования речи в текст и обработки всплесков сигнала.", + "openFromUrlDownloadAndOpenNote": "Нужно для распознавания речи и пиков на осциллограмме.", "openFromUrlDownloadingTitle": "Загрузка видео", - "openFromUrlDownloadSubtitles": "Также можно скачать субтитлы", + "openFromUrlDownloadSubtitles": "Скачать субтитры", "openFromUrlDownloadVideo": "Скачать видео", - "openFromUrlIncludeAutoGeneratedSubtitles": "Добавить автоматически сгенерированные субтитлы (на языке оригинала)", + "openFromUrlIncludeAutoGeneratedSubtitles": "Включить автоматически созданные субтитры (язык оригинала)", + "openFromUrlCookiesFromBrowser": "Файлы cookie из браузера", + "openFromUrlCookiesFromBrowserHint": "Передавать cookie браузера, в котором вы вошли в YouTube — нужно, когда YouTube просит подтвердить, что вы не бот.", + "openFromUrlBotCheckHint": "YouTube хочет убедиться, что вы не бот. Войдите в YouTube в браузере, затем выберите этот браузер в поле «Файлы cookie из браузера» в окне «Открыть видеофайл по URL» и попробуйте снова (лучше всего работает Firefox). Также может помочь отключение VPN.", + "openFromUrlBotCheckHintWithBrowserX": "YouTube по-прежнему просит подтвердить, что вы не бот. Убедитесь, что вы вошли в YouTube в браузере {0}. Chrome и Edge в Windows часто блокируют чтение своих cookie — сначала закройте браузер или попробуйте Firefox.", "assaStyleWillBeUsed": "Будет использован текущий стиль ASSA.\n\nИзмените формат субтитров, если\nвы хотите установить здесь стили", "pickOnlineSubtitleTitle": "Выбрать субтитры для скачивания", "outputSettingsTitle": "Настройки вывода", - "ttsCrispAsrSettingsTitle": "{0} (Настройки CrispASR)", - "ttsDownloadEngineTitle": "TTS - движок загрузки", + "ttsCrispAsrSettingsTitle": "Настройки {0} (CrispASR)", + "ttsDownloadEngineTitle": "TTS - загрузка движка", "indexTts25LicenseTitle": "Лицензия на модель IndexTTS 2.5", "indexTts25LicenseHeader": "Модель IndexTTS 2.5 имеет собственную лицензию", - "indexTts25LicenseIntro": "Аудиодвижок audio.cpp использует Apache-2.0, но весовые коэффициенты модели IndexTTS 2.5 лицензированы bilibili на условиях, не являющихся открытым исходным кодом. Пожалуйста, ознакомьтесь с основными пунктами перед загрузкой.", - "indexTts25LicenseReadFullText": "Ознакомьтесь с полным текстом лицензии", + "indexTts25LicenseIntro": "Движок audio.cpp распространяется под Apache-2.0, но веса модели IndexTTS 2.5 лицензированы bilibili на условиях, которые не являются открытыми. Пожалуйста, прочтите основные пункты перед загрузкой.", + "indexTts25LicenseReadFullText": "Прочитать полный текст лицензии", "indexTts25LicenseModelPage": "Страница модели", "indexTts25LicenseAcceptCheckBox": "Я ознакомился и принимаю Лицензионное соглашение на использование модели bilibili", "indexTts25LicenseAcceptAndDownload": "Принять и скачать", "indexTts25LicenseDeclined": "Использовать IndexTTS 2.5 можно только после принятия лицензии на модель.", "indexTts25SettingsTitle": "Настройки IndexTTS 2.5 (audio.cpp)", - "indexTts25Emotion": "Эмоции", + "indexTts25Emotion": "Эмоция", "indexTts25EmotionStrength": "Сила эмоций", "pickOnlineSubtitleFetching": "Загрузка субтитров...", "pickOnlineSubtitleNoneFound": "Субтитры для этого URL-адреса не найдены.", "forcedAligner": "Принудительное выравнивание", "postProcessing": "Постобработка...", - "toggleCurrentSubtitleWhilePlaying": "Переключить текущие субтитры во время воспроизведения", + "toggleCurrentSubtitleWhilePlaying": "Вкл./выкл. выбор текущего субтитра при воспроизведении", "toggleSubtitlesOnVideoPlayer": "Включить/выключить субтитры в видеоплеере", "subtitlesOnVideoPlayerOn": "Субтитры в видеоплеере: включены", "subtitlesOnVideoPlayerOff": "Субтитры в видеоплеере: выключены", "onlyMkvCanSupportEmbeddedSubtitleEditing": "Для редактирования встроенных субтитров поддерживаются только файлы Matroska (.mkv, .webm).", - "reEncodeInfo": "Перекодирование может сделать субтитры более плавными:\n• Меньшее разрешение (высокое разрешение замедляет воспроизведение субтитров).\n• Перекодируйте видео в формат H.264 yuv420p, чтобы сделать его более совместимым.\n• Оптимизирован для быстрого поиска", + "reEncodeInfo": "Перекодирование может сделать работу с субтитрами удобнее:\n• Меньшее разрешение (высокое разрешение замедляет работу)\n• Перекодирование в H.264 + yuv420p повышает совместимость\n• Оптимизация для быстрой перемотки", "reEncodeGeneratingVideoX": "Создание видео... {0}% {1}", "reEncodeGeneratingVideoXofY": "Создание видео {0}/{1}... {2}% {3}", "reEncodeUnableToGenerateVideo": "Невозможно создать видео", "reEncodeOutputVideoFileNotGenerated": "Выходной видеофайл не создан: {0}\nПараметры: {1}", - "reEncodeGeneratingDone": "Генерация завершена", + "reEncodeGeneratingDone": "Создание завершено", "reEncodeGeneratedFilesX": "Сгенерированные файлы ({0}):", - "reEncodeFfmpegParameters": "параметры ffmpeg", + "reEncodeFfmpegParameters": "Параметры ffmpeg", + "analyzingVideoX": "Анализ видео... {0}% {1}", + "analyzingVideoXofY": "Анализ видео {0}/{1}... {2}% {3}", + "backgroundImageFileNotSelected": "Файл фонового изображения не выбран", + "backgroundImageFileDoesNotExistX": "Файл фонового изображения не существует: {0}", "voices": "Голоса", "presets": "Предустановки", "talkerX": "Говорящий {0}", "baseModel": "Базовая модель", "turboModel": "Турбо-модель", - "ttsUpdateX": "Обновление {0}", - "ttsEngineNotInstalled": "{0} не установлено", + "ttsEngineNotInstalled": "{0} не установлен", "ttsEngineUpdateAvailable": "{0} - доступно обновление", "ttsEngineTooOldUpdateRequired": "{0} слишком старый - требуется обновление", - "ttsEngineChatterboxCapable": "{0} (Способен к общению в чате)" + "ttsEngineChatterboxCapable": "{0} (поддерживает Chatterbox)" }, "waveform": { - "guessTimeCodes": "Угадывание временных кодов", + "guessTimeCodes": "Подобрать временные коды", "guessTimeCodesScanBlockSize": "Размер блока сканирования (мс):", - "guessTimeCodesScanBlockAverageMin": "Среднее значение по блокам сканирования (% от максимума):", - "guessTimeCodesScanBlockAverageMax": "Среднее максимальное значение блока сканирования (% от максимума):", - "guessTimeCodesSplitLongSubtitlesAt": "Разделение длинных субтитров на уровне (мс):", - "speechToTextSelectedLinesDotDotDot": "Преобразование речи в текст для выделенных строк...", - "speechToTextNewSelectionDotDotDot": "Преобразование речи в текст для нового выделения...", + "guessTimeCodesScanBlockAverageMin": "Мин. среднее значение блока сканирования (% от макс.):", + "guessTimeCodesScanBlockAverageMax": "Макс. среднее значение блока сканирования (% от макс.):", + "guessTimeCodesSplitLongSubtitlesAt": "Разделять длинные субтитры на (мс):", + "speechToTextSelectedLinesDotDotDot": "Распознать речь для выбранных строк...", + "speechToTextNewSelectionDotDotDot": "Распознать речь в новом выделении...", "seekSilence": "Искать тишину", - "minSilenceDurationSeconds": "Минимальная Длительность тишины (в секундах):", + "minSilenceDurationSeconds": "Мин. длительность тишины (секунды):", "maxSilenceVolume": "Максимальная громкость тишины (0,0 - 1,0):", - "guessTimeCodesDotDotDot": "Распознать временные коды...", + "guessTimeCodesDotDotDot": "Подобрать временные коды...", "seekSilenceDotDotDot": "Поиск тишины...", "extractAudioDotDotDot": "Извлечь аудио...", - "cloneVoiceTo": "Клонировать голос", + "cloneVoiceTo": "Клонировать голос в", "cloneVoiceNameTitle": "Имя нового голоса", "cloneVoiceExtractFailed": "Не удалось извлечь аудио для выбранной строки.", - "toggleShotChange": "Переключить смену кадра", - "resetWaveformZoomAndSpeed": "Сбросить масштабирование и скорость отображения осциллограммы", + "lineXHasNoDuration": "У строки {0} нет длительности (время окончания не позже времени начала), поэтому извлекать нечего.", + "audioClipsSkippedLinesX": "Для этих строк не удалось извлечь аудио, поэтому они пропущены: {0}", + "toggleShotChange": "Добавить/удалить смену плана", + "resetWaveformZoomAndSpeed": "Сбросить масштаб и скорость осциллограммы", "showOriginalSubtitle": "Показывать оригинальные субтитры", + "timelineGroupTracksBy": "Группировать дорожки субтитров по", + "timelineShowThumbnails": "Показывать миниатюры видео", + "showSpeechOnly": "Показывать только речь (медленное создание)", + "isolatingSpeechForWaveformX": "Выделение речи для осциллограммы... {0}", + "isolatingSpeechForWaveformFailed": "Не удалось выделить речь для осциллограммы - см. журнал инструментов", + "speechOnlyWaveformReady": "Осциллограмма теперь показывает только речь", "showOnlyWaveform": "Показать только осциллограмму", "showOnlySpectrogram": "Показать только спектрограмму", "showWaveformAndSpectrogram": "Отобразить осциллограмму и спектрограмму", @@ -2680,12 +3255,12 @@ "spectrogramClassicInferno": "Ад", "spectrogramClassicTurbo": "Турбо", "spectrogramNeon": "Неон", - "waveformDrawStyleFancy": "Изысканный", - "setVideoPositionAndPauseAndSelectSubtitle": "Установить положение видео, поставить на паузу и Выбрать субтитры", - "setVideopositionAndPauseAndSelectSubtitleAndCenter": "Установить позицию видео, поставить на паузу, выбрать субтитры и по центру", - "setVideoPositionAndPause": "Установить положение видео и поставить на паузу", - "setVideopositionAndPauseAndCenter": "Установить положение видео, поставить на паузу и по центру", - "setVideoposition": "Установить положение видео" + "waveformDrawStyleFancy": "Нарядный", + "setVideoPositionAndPauseAndSelectSubtitle": "Установить позицию видео, поставить на паузу и выбрать субтитр", + "setVideopositionAndPauseAndSelectSubtitleAndCenter": "Установить позицию видео, поставить на паузу, выбрать субтитр и центрировать", + "setVideoPositionAndPause": "Установить позицию видео и поставить на паузу", + "setVideopositionAndPauseAndCenter": "Установить позицию видео, поставить на паузу и центрировать", + "setVideoposition": "Установить позицию видео" }, "sync": { "visualSync": "Визуальная синхронизация", @@ -2695,396 +3270,444 @@ "findText": "Найти текст", "resolutionXDurationYFrameRateZ": "Разрешение: {0}, длительность: {1}, частота кадров: {2}", "startSceneMustComeBeforeEndScene": "Начальная сцена должна предшествовать конечной сцене", - "goToSubPos": "Перейти к суб-позиции", + "goToSubPos": "К позиции субтитра", "speedInPercentage": "Скорость в %", - "fromDropFrameValue": "Исходя из значения dropframe", - "toDropFrameValue": "Удаление значения кадра", + "fromDropFrameValue": "Из значения drop frame", + "toDropFrameValue": "В значение drop frame", "adjustAll": "Настроить все", "adjustSelectedLines": "Настроить выбранные строки", - "adjustSelectedLinesAndForward": "Настроить выбранные строки и впереди", - "toFrameRate": "Для частоты кадров", - "fromFrameRate": "По частоте кадров", - "adjustAllTimes": "Настроить все временные рамки (показать раньше/позже)", + "adjustSelectedLinesAndForward": "Настроить выбранные и последующие строки", + "toFrameRate": "В частоту кадров", + "fromFrameRate": "Из частоты кадров", + "videoXFrameRateY": "{0} - {1} кадр/с", + "adjustAllTimes": "Сдвинуть все тайм-коды (показывать раньше/позже)", "showEarlier": "Показать раньше", "showLater": "Показать позже", "setSyncPoint": "Установить точку синхронизации", "setSyncPointViaVideo": "Установить точку синхронизации через видео...", - "syncPointTimeCode": "Код синхронизации по времени", + "syncPointTimeCode": "Временной код точки синхронизации", "syncPoints": "Точки синхронизации", "pointSync": "Точечная синхронизация", "pointSyncViaOther": "Точечная синхронизация через другие субтитры", - "syncPointCandidateInfo": "Строки, начинающиеся после {0}+ секунд тишины, выделены — они часто являются надежными точками синхронизации", - "adjustAllShortcuts": "Сочетания клавиш:\n\n• Shift + Left/Right: Смещение на 10 мс.\n• Ctrl + Left/Right: Смещение на 100 мс.\n• Alt + Left/Right: Смещение на 500 мс", - "adjustAllShortcutsFrames": "Сочетания клавиш:\n\n• Shift + Left/Right: Смещение на 1 кадр.\n• Ctrl + Left/Right: Смещение на 10 кадров.\n• Alt + Left/Right: Смещение на 1 секунду", - "offsetInSeconds": "Смещение за секунды", - "speedFactor": "Фактор скорости", + "syncPointCandidateAfterInfo": "Выделены строки, за которыми следует {0}+ секунд тишины - они часто служат надежными точками синхронизации", + "gapAfter": "Промежуток после", + "adjustAllShortcuts": "Сочетания клавиш:\n\n• Shift + Влево/Вправо: сдвиг на 10 мс\n• Ctrl + Влево/Вправо: сдвиг на 100 мс\n• Alt + Влево/Вправо: сдвиг на 500 мс", + "adjustAllShortcutsFrames": "Сочетания клавиш:\n\n• Shift + Влево/Вправо: сдвиг на 1 кадр\n• Ctrl + Влево/Вправо: сдвиг на 10 кадров\n• Alt + Влево/Вправо: сдвиг на 1 секунду", + "offsetInSeconds": "Смещение в секундах", + "speedFactor": "Коэффициент скорости", "showEarlierLaterDotDotDot": "Показать раньше/позже..." }, "translate": { - "translateViaCopyPaste": "Авто-перевод с помощью копирования/вставки", + "translateViaCopyPaste": "Автоперевод через копирование/вставку", "maxBlockSize": "Максимальный размер блока", "lineSeparator": "Разделитель строки", - "blockCopyInfo": "Перейти в меню переводчика/ИИ, вставить текст (уже находящийся в буфере обмена), скопировать результат обратно в буфер обмена и нажмите кнопку ниже.", - "blockCopyGetFromClipboard": "Получение текста из буфера обмена (с помощью переводчика/ИИ)", - "reCopyTextToClipboard": "Скопировать текст в буфер обмена (для переводчика/ИИ)", + "blockCopyInfo": "Перейдите в переводчик/ИИ и вставьте текст (он уже в буфере обмена), скопируйте результат обратно в буфер обмена и нажмите кнопку ниже.", + "blockCopyGetFromClipboard": "Взять текст из буфера обмена (от переводчика/ИИ)", + "reCopyTextToClipboard": "Снова скопировать текст в буфер обмена (для переводчика/ИИ)", "blockXOfY": "Блок {0} из {1}", - "noTextInClipboard": "В буфере обмена нет текста", "textInClipboardIsSameAsSourceText": "Текст в буфере обмена совпадает с исходным текстом, пожалуйста, попробуйте еще раз.", "lineMerge": "Объединение строк", "delayInSecondsBetweenRequests": "Задержка в секундах между запросами", "maxBytesPerRequest": "Максимальное количество байтов на запрос", - "promptText": "Текст подсказки", - "resetPromptToDefault": "Сбросить приглашение к вводу командной строки до значений по умолчанию", + "keepMusicLinesUntranslated": "Не переводить строки в музыкальных символах (♪ ... ♪)", + "promptText": "Текст промпта", + "resetPromptToDefault": "Сбросить промпт по умолчанию", "translateEachLineSeparately": "Переводить каждую строку отдельно", "translationError": "Ошибка перевода", "translationFailedMessage": "Перевод {0} не удался.", "translationFailedHint": "Это может быть связано с проблемами в сети, недействительным ключом API или ограничениями на использование API.\nПожалуйста, проверьте ваше подключение и настройки API, а затем попробуйте снова.", "showTechnicalDetails": "Показать технические подробности", "hideTechnicalDetails": "Скрыть технические подробности", - "technicalDetails": "Технические характеристики", - "pleaseSelectATargetLanguage": "Пожалуйста, Выбрать целевой язык", + "technicalDetails": "Технические подробности", + "pleaseSelectATargetLanguage": "Выберите целевой язык", "readyToTranslate": "Готов к переводу", "translating": "Перевод...", "translationComplete": "Перевод завершен", + "translateInPlaceNoOriginal": "Перевести на месте (не создавать оригинал)", "translationCancelled": "Перевод отменен", "swapLanguages": "Поменять местами исходный и целевой языки", - "xIsAlreadyDownloadedReDownload": "{0} уже загружен. Повторная загрузка?", - "advancedDotDotDot": "Подробнее...", - "advancedSettings": "Расширенные настройки", - "advancedSettingsSubtitle": "Параметры пакетной обработки, контекста и выборки для расширенного механизма llama.cpp", - "context": "Context", + "xIsAlreadyDownloadedReDownload": "{0} уже скачан. Скачать заново?", + "advancedSettingsSubtitle": "Параметры пакетов, контекста и сэмплирования для расширенного движка llama.cpp", + "context": "Контекст", "synopsis": "Краткое содержание", "synopsisHint": "Дополнительное описание содержания (жанр, место действия, тон) — включается в каждый запрос", "glossary": "Глоссарий", - "glossaryHint": "Одна строка на строку: исходный термин = перевод", + "glossaryHint": "По одному в строке: исходный термин = перевод", "previousLinesAsContext": "Предыдущие строки как контекст", - "linesPerBatch": "Строки на партию", + "linesPerBatch": "Строк в пакете", "keepLineBreaks": "Сохранять переносы строк", - "samplingParameters": "Параметры выборки", - "minusOneMeansDefault": "-1 = модель/сервер по умолчанию", - "temperature": "Температура", + "samplingParameters": "Параметры сэмплирования", + "minusOneMeansDefault": "-1 = по умолчанию модели/сервера", "topP": "Топ-п", "topK": "Топ-к", - "repeatPenalty": "Повторное наказание", + "repeatPenalty": "Штраф за повторы", "maxTokensPerReply": "Максимальное количество токенов на ответ", "serverContextSizeTokens": "Размер контекста сервера (токены)", "extraServerParameters": "Дополнительные параметры сервера", - "extraServerParametersHint": "Дополнительные аргументы командной строки llama-server, например, \"-ngl 30 --no-mmap\", применяются при запуске локального сервера", - "useOnlyExtraServerParameters": "Используйте только эти параметры", - "useOnlyExtraServerParametersHint": "Запустить llama-server с указанными выше параметрами вместо настроек Subtitle Edit — по-прежнему будут заданы только модель, хост и порт", + "extraServerParametersHint": "Дополнительные аргументы командной строки llama-server, например \"-ngl 30 --no-mmap\" — применяются при запуске локального сервера", + "useOnlyExtraServerParameters": "Использовать только эти параметры", + "useOnlyExtraServerParametersHint": "Запускать llama-server с параметрами выше вместо собственных настроек Subtitle Edit — задаются только модель, хост и порт", "serverRunningAtX": "Сервер работает по адресу {0}", - "customPromptHint": "Пользовательские инструкции ({0} = исходный язык, {1} = целевой язык); пусто = встроенная подсказка", - "llamaCppDownloadEngineAndModelPrompt": "Для загрузки файла llama.cpp необходимо установить движок llama-server и модель перевода. Скачать сейчас?", - "llamaCppDownloadEnginePrompt": "Для загрузки файла llama.cpp необходимо установить движок llama-server. Скачать сейчас?", - "llamaCppDownloadModelPrompt": "Для загрузки файла llama.cpp необходимо предварительно загрузить выбранную модель перевода. Скачать сейчас?" + "customPromptHint": "Пользовательские инструкции ({0} = исходный язык, {1} = целевой язык); пусто = встроенный промпт", + "editTranslationHint": "Щелкните перевод выбранной строки, чтобы изменить его (Enter - сохранить, Escape - отмена)", + "llamaCppDownloadEngineAndModelPrompt": "Для llama.cpp нужно скачать движок llama-server и модель перевода. Скачать сейчас?", + "llamaCppDownloadModelPrompt": "Для llama.cpp нужно скачать выбранную модель перевода. Скачать сейчас?" }, "options": { "settings": { "dialogStyle": "Стиль диалога", - "dialogStyleDashSecondLineWithoutSpace": "Прочерк во второй строке без пробела", - "dialogStyleDashSecondLineWithSpace": "Прочерк второй строки пробелом", - "dialogStyleDashBothLinesWithSpace": "Прочерк обеих строк с пробелом", - "dialogStyleDashBothLinesWithoutSpace": "Прочерк обеих строк без пробелов", + "dialogStyleDashSecondLineWithoutSpace": "Тире во второй строке без пробела", + "dialogStyleDashSecondLineWithSpace": "Тире во второй строке с пробелом", + "dialogStyleDashBothLinesWithSpace": "Тире в обеих строках с пробелом", + "dialogStyleDashBothLinesWithoutSpace": "Тире в обеих строках без пробела", "continuationStyle": "Стиль продолжения", "continuationStyleNoneTrailingDots": "Нет, точки обозначают паузы (только в конце)", "continuationStyleNoneLeadingTrailingDots": "Нет, точки для обозначения пауз", "continuationStyleNoneTrailingEllipsis": "Нет, многоточие для пауз (только в конце предложения)", "continuationStyleNoneLeadingTrailingEllipsis": "Нет, многоточие для обозначения пауз", - "continuationStyleOnlyTrailingDots": "Точки (только в хвосте)", + "continuationStyleOnlyTrailingDots": "Точки (только в конце)", "continuationStyleLeadingTrailingDots": "Точки", "continuationStyleOnlyTrailingEllipsis": "Многоточие (только в конце)", - "continuationStyleLeadingTrailingEllipsis": "Эллипсис", + "continuationStyleLeadingTrailingEllipsis": "Многоточие", "continuationStyleLeadingTrailingDash": "Тире", "continuationStyleLeadingTrailingDashDots": "Тире, но точки для обозначения пауз", - "cpsLineLengthStyle": "Cps/длина линии", - "cpsLineLengthStyleCalcAll": "Посчитать все символы", - "cpsLineLengthStyleCalcNoSpaceCpsOnly": "Учесть все значения, кроме пробелов, только символы в секунду", - "cpsLineLengthStyleCalcNoSpace": "Учесть все, кроме пробела", - "cpsLineLengthStyleCalcCjk": "CJK 1, Латинский 0.5", - "cpsLineLengthStyleCalcCjkNoSpace": "CJK 1, латынь 0.5, пробел 0", - "cpsLineLengthStyleCalcIncludeCompositionCharacters": "Включить символы композиции", - "cpsLineLengthStyleCalcIncludeCompositionCharactersNotSpace": "Использовать символы композиции, а не пробелы", + "cpsLineLengthStyle": "CPS/длина строки", + "cpsLineLengthStyleCalcAll": "Считать все символы", + "cpsLineLengthStyleCalcNoSpaceCpsOnly": "Все, кроме пробелов, только для CPS", + "cpsLineLengthStyleCalcNoSpace": "Все, кроме пробелов", + "cpsLineLengthStyleCalcCjk": "CJK 1, латиница 0.5", + "cpsLineLengthStyleCalcCjkNoSpace": "CJK 1, латиница 0.5, пробел 0", + "cpsLineLengthStyleCalcIncludeCompositionCharacters": "Учитывать составные символы", + "cpsLineLengthStyleCalcIncludeCompositionCharactersNotSpace": "Учитывать составные символы, без пробелов", "cpsLineLengthStyleCalcNoSpaceOrPunctuation": "Без пробелов и знаков препинания ()[]-:;,.!?", "cpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly": "Без пробелов и знаков препинания, только CPS", "cpsLineLengthStyleCalcIgnoreArabicDiacritics": "Игнорировать арабские диакритические знаки", - "cpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "Игнорировать арабские диакритические, без пробела", + "cpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "Игнорировать арабские диакритические знаки, без пробелов", "searchSettingsDotDotDot": "Поиск настроек...", "network": "Сеть", "fileTypeAssociations": "Ассоциации типов файлов", "textBoxColorTags": "Цветовые теги (HTML/ASSA) в текстовом поле субтитра", - "textBoxLiveSpellCheck": "Проверка орфографии в текстовом поле субтитров в реальном времени", - "textBoxCenterText": "Выравнять текст по центру в текстовом поле субтитров", - "textBoxFontBold": "Жирный текст в поле для текста подзаголовка", + "textBoxLiveSpellCheck": "Проверка орфографии на лету в поле текста субтитра", + "textBoxCenterText": "Выравнивать текст по центру в поле текста субтитра", + "textBoxFontBold": "Полужирный текст в поле текста субтитра", "textBoxFontSize": "Размер шрифта в поле текста субтитров", - "subtitleTextBoxAndGridFontName": "Шрифт интерфейса в текстовом поле субтитров и сетке", - "subtitleGridFontSize": "Размер шрифта в сетке субтитров", - "subtitleGridTextSingleLine": "Отображать текст субтитров в виде одной строки в сетке", - "subtitleGridTextSingleLineSeparator": "Разделитель строк (например,
)", - "subtitleGridTextDisplay": "Текст субтитров помещается в сетку", - "subtitleGridTextDisplayClip": "Обрезка (одна строка)", - "subtitleGridTextDisplayWrap": "Обтяните тканью по размеру окна", - "subtitleGridTextDisplayEllipsis": "Одиночная строка с многоточием", - "subtitleGridLiveSpellCheck": "Проверка орфографии в режиме реального времени в сетке субтитров", - "subtitleGridCenterText": "Центрируйте текст в сетке субтитров", - "subtitleGridShowFormatting": "Отображение отформатированного (HTML/ASSA) текста в сетке субтитров", - "showUpDownStartTime": "Отобразить регулятор увеличения/уменьшения для функции \"Показать\"", - "showUpDownEndTime": "Показать регулятор вверх/вниз для кнопки \"Скрыть\"", - "showUpDownDuration": "Отобразить регулятор вверх/вниз для параметра \"Длительность\"", - "showUpDownLabels": "Отображение подписей к элементам управления вверх/вниз (Показать/Скрыть/Длительность)", - "showButtonHints": "Показать подсказки к кнопке", - "gridCompactMode": "Использовать компактный режим для сеток", - "gridAlternatingRows": "Использовать чередование цветов строк в сетке", - "gridAlternatingRowColor": "Чередование цветов строк (светлая тема)", - "gridAlternatingRowColorDark": "Чередование цветов строк (темная тема)", - "uiFont": "Шрифт пользовательского интерфейса", - "theme": "Тема", + "subtitleTextBoxAndGridFontName": "Шрифт интерфейса в поле текста и таблице субтитров", + "subtitleGridFontSize": "Размер шрифта в таблице субтитров", + "subtitleGridTextSingleLine": "Показывать текст субтитров в таблице одной строкой", + "subtitleGridTextSingleLineSeparator": "Разделитель строк в одной строке (например,
)", + "subtitleGridTextDisplay": "Размещение текста субтитров в таблице", + "subtitleGridTextDisplayClip": "Обрезать (одна строка)", + "subtitleGridTextDisplayWrap": "Переносить по ширине окна", + "subtitleGridTextDisplayEllipsis": "Одна строка с многоточием", + "subtitleGridLiveSpellCheck": "Проверка орфографии на лету в таблице субтитров", + "subtitleGridCenterText": "Центрировать текст в таблице субтитров", + "subtitleGridShowFormatting": "Показывать форматированный (HTML/ASSA) текст в таблице субтитров", + "showUpDownStartTime": "Показывать кнопки вверх/вниз для \"Начало\"", + "showUpDownEndTime": "Показывать кнопки вверх/вниз для \"Конец\"", + "showUpDownDuration": "Показывать кнопки вверх/вниз для \"Длительность\"", + "showUpDownLabels": "Показывать подписи у кнопок вверх/вниз (Начало/Конец/Длительность)", + "showButtonHints": "Показывать подсказки к кнопкам", + "gridCompactMode": "Компактный режим таблиц", + "gridAlternatingRows": "Чередовать цвета строк в таблице", + "gridAlternatingRowColor": "Цвет чередующихся строк (светлая тема)", + "gridAlternatingRowColorDark": "Цвет чередующихся строк (темная тема)", + "uiFont": "Шрифт интерфейса", "iconTheme": "Тема значков", - "darkThemeForegroundColor": "Темная тема, цвет переднего плана", - "darkThemeBackgroundColor": "Темный цвет фона", - "showGridLines": "Показать линии сетки", + "darkThemeForegroundColor": "Цвет текста темной темы", + "darkThemeBackgroundColor": "Цвет фона темной темы", + "showGridLines": "Показывать линии таблицы", "showHorizontalLineAboveToolbar": "Отобразить горизонтальную линию над панелью инструментов", "bookmarkColor": "Цвет закладки", + "spellCheckHighlightColor": "Цвет выделения при проверке орфографии", "singleLineMaxLength": "Максимальная длина одной строки", "optimalCharsPerSec": "Оптимальное количество символов в секунду", - "maxCharsPerSec": "Максимальное количество символов в секунду", "maxWordsPerMin": "Максимальное количество слов в минуту", "minDurationMs": "Минимальная длительность (мс)", "maxDurationMs": "Максимальная длительность (мс)", - "minGapMs": "Минимальный интервал (мс)", - "minGapFrames": "Мин. разрыв (кадры)", - "minGapCalculateDotDotDot": "Рассчитайте минимальный промежуток времени, исходя из частоты кадров...", + "minGapMs": "Минимальный промежуток (мс)", + "minGapFrames": "Мин. промежуток (кадры)", + "minGapCalculateDotDotDot": "Рассчитать минимальный промежуток по частоте кадров...", "minGapCalculateTitle": "Минимальный промежуток между субтитрами в миллисекундах", - "minGapCalculateFrames": "Минимальный зазор между рамками", + "minGapCalculateFrames": "Мин. промежуток в кадрах", "minGapCalculateXFramesAtYGivesZMs": "{0} кадров при частоте кадров {1} дают {2} миллисекунды.", "minGapCalculateUseXAsNewGap": "Использовать \"{0}\" миллисекунд в качестве нового минимального промежутка?", - "maxLines": "Максимальное количество строк", - "unbreakSubtitlesShortThan": "Неразрывные субтитры короче, чем", - "autoBreakLineEndingEarly": "Автоматический перенос строки в конец предложения (.!?)", - "autoBreakCommaBreakEarly": "Автоматический разрыв цепи для запятой", - "autoBreakDashEarly": "Предварительное автоматическое торможение для рывка (диалоги)", - "autoBreakUsePixelWidth": "Автоматический перенос по ширине пикселя", - "autoBreakPreferBottomHeavy": "Автобрейк предпочитает сильное давление в нижней части", - "autoBreakPreferBottomPercent": "Процент пробития нижней границы автопробоя", - "useDoNotBreakAfterList": "Используйте список того, что нельзя ломать после", + "unbreakSubtitlesShortThan": "Убирать переносы в субтитрах короче", + "autoBreakLineEndingEarly": "Переносить в первую очередь по концу предложения (.!?)", + "autoBreakCommaBreakEarly": "Переносить в первую очередь по запятой", + "autoBreakDashEarly": "Переносить в первую очередь по тире (диалоги)", + "autoBreakUsePixelWidth": "Переносить по ширине в пикселях", + "autoBreakPreferBottomHeavy": "Предпочитать более длинную нижнюю строку", + "autoBreakPreferBottomPercent": "Насколько длиннее нижняя строка, %", + "useDoNotBreakAfterList": "Не переносить строку после слов из списка", "newEmptyDefaultMs": "Длительность новых субтитров по умолчанию (мс)", "timeCodeUpDownStepMs": "Шаг увеличения/уменьшения времени (мс)", - "promptBeforeDelete": "Запрос перед удалением", + "moveSelectedLinesStepMs": "Шаг сочетания клавиш для сдвига выбранных строк (мс)", + "moveStartEndStepMs": "Шаг сочетания клавиш для сдвига начала/конца (мс)", + "moveLinesShortenNeighbor": "Сдвиг строк: укорачивать предыдущую/следующую строку вместо перекрытия", + "promptBeforeDelete": "Спрашивать перед удалением", "rememberPositionAndSize": "Запомнить положение и размер окна", - "openLastFileOnStart": "Открывать последний недавний файл при запуске", + "titleBarFullFileName": "Показывать полный путь к файлу в заголовке окна", + "showRecentFiles": "Показывать недавние файлы (для повторного открытия)", + "openLastFileOnStart": "Открывать последний файл при запуске", "autoSave": "Автосохранение (сохранение открытого файла во время редактирования)", "autoBackupOn": "Автоматическое резервное копирование", "autoBackupIntervalMinutes": "Интервал автоматического резервного копирования (минуты)", "autoBackupDeleteAfterDays": "Срок хранения автоматических резервных копий (дней)", - "autoConvertToUtf8": "Автоматическое преобразование кодировки в UTF-8 при открытии", - "autoTrimWhiteSpace": "Автоматическая обрезка пробелов", - "removeBlankLinesWhenOpening": "Удаление пустых строк при открытии субтитров", + "settingsBackupOn": "Автоматическое резервное копирование настроек", + "settingsBackupIntervalDays": "Интервал резервного копирования настроек (дни, 0 = при каждом запуске)", + "settingsBackupMaxCount": "Хранить резервных копий настроек", + "autoConvertToUtf8": "Автоматически преобразовывать кодировку в UTF-8 при открытии", + "autoTrimWhiteSpace": "Автоматически обрезать пробелы", + "removeBlankLinesWhenOpening": "Удалять пустые строки при открытии субтитров", "defaultEncoding": "Кодировка по умолчанию", - "colorDurationTooShort": "Длительность цветового звучания, если она слишком короткая", - "colorDurationTooLong": "Длительность цветового перехода слишком большая", - "colorTextTooLong": "Если текст слишком длинный, Использовать цветной текст", - "colorTextTooWide": "Если текст слишком широкий (в пикселях), его можно изменить на другой цвет", - "colorTextTooManyLines": "Если текст состоит более чем из 2 строк, Использовать цветной текст", - "colorTextTooManyLinesX": "Раскрасить текст, если строк больше {0}", - "colorCharactersPerSecond": "Цветные символы/мин. Если слишком много", - "colorWordsPerMinute": "Цветные слова/мин. Если слишком много", - "colorOverlap": "Перекрытие временных кодов цвета", - "colorGapTooShort": "Цвет, если зазор слишком короткий", - "errorBackgroundColor": "Ошибка цвета фона", - "waveformDrawGridLines": "Рисовать сетку строк", - "waveformCenterVideoPositionAlsoWhenPaused": "Центрирование видеоряда также во время паузы", + "colorDurationTooShort": "Подсвечивать слишком короткую длительность", + "colorDurationTooLong": "Подсвечивать слишком большую длительность", + "colorTextTooLong": "Подсвечивать слишком длинный текст", + "colorTextTooWide": "Подсвечивать слишком широкий текст (пиксели)", + "colorTextTooManyLines": "Подсвечивать текст длиннее 2 строк", + "colorTextTooManyLinesX": "Подсвечивать текст длиннее {0} строк", + "colorCharactersPerSecond": "Подсвечивать слишком высокую скорость (символов/сек)", + "colorWordsPerMinute": "Подсвечивать слишком высокую скорость (слов/мин)", + "colorOverlap": "Подсвечивать перекрытие временных кодов", + "colorGapTooShort": "Подсвечивать слишком короткий промежуток", + "errorBackgroundColor": "Цвет фона ошибки", + "waveformDrawGridLines": "Рисовать линии сетки", + "waveformUseSkiaRenderer": "Использовать экспериментальный быстрый рендерер", + "waveformCenterVideoPositionAlsoWhenPaused": "Центрировать позицию видео и во время паузы", + "waveformSelectCurrentSubtitleWhilePaused": "Выбирать текущий субтитр также во время паузы", + "waveformRememberZoom": "Запоминать масштаб (по горизонтали и вертикали)", "waveformShowToolbar": "Показать панель инструментов", "waveformShowToolbarEdit": "Редактировать панель инструментов...", - "waveformShowToolbarEditLabel": "Панель инструментов «Осциллограмма/спектрограмма»", + "waveformShowToolbarEditLabel": "Элементы панели инструментов", "waveformSpectrogramCombinedWaveformHeight": "Совмещенная осциллограмма/спектрограмма, высота осциллограммы в %", - "waveformFocusTextboxAfterInsertNew": "Фокус на текстовом поле после вставки", - "waveformInvertMouseWheel": "Перевернуть колесико мыши", - "waveformMouseWheelSetsVideoPosition": "Колесо мыши устанавливает положение видео", - "waveformMouseWheelVideoPositionStep": "Шаг позиционирования видео колесиком мыши", + "waveformFocusTextboxAfterInsertNew": "Переходить к полю текста после вставки", + "waveformInvertMouseWheel": "Инвертировать колесо мыши", + "waveformMouseWheelSetsVideoPosition": "Колесо мыши меняет позицию видео", + "waveformMouseWheelVideoPositionStep": "Шаг позиции видео для колеса мыши", "waveformMouseWheelStepOneFrame": "1 кадр", "waveformMouseWheelStepOneSecond": "1 секунда", "waveformMouseWheelStepMilliseconds": "{0} мс", - "waveformSnapToShotChanges": "Изменения привязки к кадру", - "waveformSnapToFrames": "Привязка к рамкам", + "waveformSnapToShotChanges": "Привязка к сменам планов (удерживайте Shift, чтобы отключить)", + "waveformSnapToFrames": "Привязка к кадрам", "waveformSnapToShotChangesPixels": "Расстояние привязки при перетаскивании (в пикселях)", - "waveformSnapToShotChangeStartMaxSeconds": "Изменение точки привязки к ближайшему кадру: максимальное начальное расстояние (в секундах)", - "waveformSnapToShotChangeEndMaxSeconds": "Изменение точки привязки к ближайшему броску: максимальное конечное расстояние (в секундах)", - "waveformSnapToShotChangeSameShotEndMaxSeconds": "Изменение параметра «Привязка к ближайшему кадру»: максимальное конечное расстояние, когда начало и конец кадра совпадают (в секундах)", - "waveformGuessStartOffsetMs": "Определить время начала по форме сигнала: увеличьте время начала на (мс) раньше", - "waveformGuessEndOffsetMs": "Определить время окончания по форме сигнала: расположите конец на более позднее время (мс)", - "waveformShotChangesAutoGenerate": "Изменения в кадре генерируются автоматически", - "waveformTextFontSize": "размер шрифта текста волновой формы", - "waveformTextFontBold": "Текст волнообразной формы, шрифт жирный", - "waveformTextColor": "Цвет текста волновой формы", - "waveformColor": "Цвет волновой формы", - "waveformBackgroundColor": "Цвет фона волнообразной формы", - "waveformSelectedColor": "Цвет выбранной волновой формы", + "waveformSnapToShotChangeStartMaxSeconds": "Привязка к ближайшей смене плана: макс. расстояние для начала (секунды)", + "waveformSnapToShotChangeEndMaxSeconds": "Привязка к ближайшей смене плана: макс. расстояние для конца (секунды)", + "waveformSnapToShotChangeSameShotEndMaxSeconds": "Привязка к ближайшей смене плана: макс. расстояние для конца, если начало и конец в одном плане (секунды)", + "waveformGuessStartOffsetMs": "Подбор начала по осциллограмме: ставить начало раньше на (мс)", + "waveformGuessEndOffsetMs": "Подбор конца по осциллограмме: ставить конец позже на (мс)", + "waveformShotChangesAutoGenerate": "Автоматически создавать смены планов", + "waveformTextFontSize": "Размер шрифта текста на осциллограмме", + "waveformTextFontBold": "Полужирный шрифт текста на осциллограмме", + "waveformTextColor": "Цвет текста на осциллограмме", + "waveformColor": "Цвет осциллограммы", + "waveformBackgroundColor": "Цвет фона осциллограммы", + "waveformSelectedColor": "Цвет выделения на осциллограмме", "downloadFfmpeg": "Скачать ffmpeg", - "fixCommonErrorsSkipStep1": "Исправить распространённые ошибки: пропусть шаг 1 (выбрать исправления)", + "fixCommonErrorsSkipStep1": "Исправление типичных ошибок: пропускать шаг 1 (выбор исправлений)", "showPluginsMenu": "Показать меню плагинов", "proxyAddress": "Адрес прокси", "password": "Пароль", "proxyDomain": "Домен", - "proxyUseSystemCredentials": "Используйте системные учетные данные", + "proxyUseSystemCredentials": "Использовать системные учетные данные", "proxyBypassList": "Обход прокси для", - "proxyBypassListHint": "Имена хостов, разделённые точкой с запятой, которые обеспечивают прямое соединение, например, \"internal.company.com;example.org\"", + "proxyBypassListHint": "Имена хостов через точку с запятой, к которым подключаться напрямую, например \"internal.company.com;example.org\"", "updates": "Обновления", "checkForUpdatesOnStartup": "Проверять наличие обновлений при запуске приложения", "checkForUpdatesChannel": "Уведомить о", "checkForUpdatesChannelStable": "Только стабильные версии", "checkForUpdatesChannelStableAndBeta": "Стабильные и бета-версии", "defaultFormat": "Формат по умолчанию", - "defaultSaveAsFormat": "Формат по умолчанию \"Сохранить как\"", + "defaultSaveAsFormat": "Формат по умолчанию для \"Сохранить как\"", "favoriteSubtitleFormats": "Избранные форматы субтитров", - "favoriteLanguages": "Любимые языки", - "webVttUseXTimestampMap": "WebVTT: используйте X-TIMESTAMP-MAP (смещение временных кодов при загрузке)", - "assaAutoSetResolution": "ASSA: устанавливает разрешение (PlayResX/PlayResY) из видеофайла при его открытии", - "assaAutoSetResolutionPrompt": "ASSA: перед изменением разрешения для соответствия видео (в противном случае произойдет автоматическое изменение разрешения) запросите подтверждение", - "showStopButton": "Показать кнопку \"Стоп\"", - "showFullscreenButton": "Показать кнопку полноэкранного режима", + "favoriteLanguages": "Избранные языки", + "webVttUseXTimestampMap": "WebVTT: использовать X-TIMESTAMP-MAP (смещать временные коды при загрузке)", + "assaAutoSetResolution": "ASSA: устанавливать разрешение (PlayResX/PlayResY) по видео при его открытии", + "assaAutoSetResolutionPrompt": "ASSA: спрашивать перед изменением разрешения под видео (иначе пересчитывать автоматически)", + "videoControls": "Элементы управления видео", + "videoControlsEdit": "Изменить элементы управления видео...", + "videoControlsPositionText": "Текст позиции / длительности", + "videoControlsVideoFileName": "Имя видеофайла", + "videoControlsPlayerName": "Название видеоплеера", + "videoControlsPreviousSubtitle": "Предыдущий субтитр", + "videoControlsNextSubtitle": "Следующий субтитр", "fullscreenHideControls": "Скрыть элементы управления видео в полноэкранном режиме", - "autoOpenVideoFile": "Автоматическое открытие видеофайла при открытии субтитров", + "showSecondarySubtitleDialog": "Показывать окно стиля при открытии второго файла субтитров", + "rememberSecondarySubtitleFile": "Запоминать второй файл субтитров", + "autoOpenVideoFile": "Автоматически открывать видеофайл при открытии субтитров", "downloadMpv": "Скачать mpv", "downloadVlc": "Скачать VLC", - "allowSingleLetterShortcutsInTextbox": "Разрешить использование однобуквенных сочетаний клавиш в текстовом поле", - "spellCheckEnglishTreatInApostropheAsIng": "Проверка орфографии: Слова, оканчивающиеся на 'in', обрабатываются как 'ing' (только на английском языке)", - "goToLineNumberSetsVideoPosition": "Параметр Go-to-line-number также задает положение видео", - "adjustAllTimesRememberLineSelectionChoice": "Настроить все параметры времени, запомнить выбор строки", - "mergeKeepEndTime": "Объединить строки: сохранить время окончания (допустить наложение со следующим субтитром)", - "mergeKeepEndTimeOnlyAssa": "Линии слияния: сохранять время окончания только для \"Усовершенствованной подстанции Альфа\"", + "allowSingleLetterShortcutsInTextbox": "Разрешить однобуквенные сочетания клавиш в поле текста", + "allowTextNavigationShortcutsInTextbox": "Разрешить сочетания клавиш на клавишах навигации по тексту (Ctrl+Left/Right, Home/End) в текстовом поле", + "spellCheckEnglishTreatInApostropheAsIng": "Проверка орфографии: считать слова на 'in'' как 'ing' (только английский)", + "goToLineNumberSetsVideoPosition": "Переход к строке также устанавливает позицию видео", + "adjustAllTimesRememberLineSelectionChoice": "Сдвиг всех тайм-кодов: запоминать выбор строк", + "mergeKeepEndTime": "Объединение строк: сохранять время конца (допускать перекрытие со следующим субтитром)", + "mergeKeepEndTimeOnlyAssa": "Объединение строк: сохранять время конца только для \"Advanced Sub Station Alpha\"", + "mergeAutoBreak": "Объединение строк: автоперенос объединенного текста (если выключено, сохраняются собственные переносы строк)", "filesAndLogs": "Файлы и журналы", "showErrorLogFile": "Показать файл журнала ошибок", "showToolsLogFile": "Показать файл журнала инструментов", - "writeToolsLog": "Запись в журнал инструментов", + "writeToolsLog": "Вести журнал инструментов", "showSettingsFile": "Показать файл настроек", - "showAssaLayer": "Показать блок слоя ASSA", - "waveformCursorColor": "Цвет курсора/головки в виде волны", - "waveformShotChangeColor": "Изменение цвета волнового изображения", - "waveformParagraphLeftColor": "Цвет левой границы волновой формы", - "waveformParagraphRightColor": "Цвет правой границы волновой формы", - "waveformFancyHighColor": "Волнообразная форма, необычный цвет", - "waveformFocusOnMouseOver": "При наведении курсора мыши", + "showAssaLayer": "Показывать поле слоя ASSA", + "waveformCursorColor": "Цвет курсора на осциллограмме", + "waveformShotChangeColor": "Цвет смены плана на осциллограмме", + "waveformGridColor": "Цвет сетки осциллограммы", + "waveformParagraphLeftColor": "Цвет левой границы субтитра на осциллограмме", + "waveformParagraphRightColor": "Цвет правой границы субтитра на осциллограмме", + "waveformFancyHighColor": "Цвет пиков осциллограммы (стиль \"Нарядный\")", + "waveformFocusOnMouseOver": "Фокус при наведении мыши", "resetAllSettings": "Сбросить все настройки", - "resetShortcuts": "Сбросить ярлыки", - "resetRecentFiles": "Сбросить список последних файлов", + "resetShortcuts": "Сбросить сочетания клавиш", + "resetRecentFiles": "Очистить список недавних файлов", "resetMultipleReplaceRules": "Сбросить правила множественной замены", "resetAppearance": "Сбросить внешний вид", - "resetAutoTranslate": "Сбросить автоматический перевод", - "resetWindowPositionAndSize": "Изменить положение и размер окна", + "resetAutoTranslate": "Сбросить настройки автоперевода", + "resetWindowPositionAndSize": "Сбросить положение и размер окна", "resetSettingsTitle": "Сбросить настройки", - "openRuleFile": "Открытьфайл правил", - "exportProfiles": "Экспортные профили", + "openRuleFile": "Открыть файл правил", + "exportProfiles": "Экспорт профилей", "saveRuleProfilesFile": "Сохранить файл профилей правил", - "ruleProfilesExportedX": "{0} профилей правил экспортировано", - "ruleProfilesImportedX": "{0} импортированных профилей правил", - "useSpecialStyleAfterLongGaps": "Использовать специальную укладку после длительных перерывов", - "addSpace": "Добавить пространство", + "ruleProfilesExportedX": "Экспортировано профилей правил: {0}", + "ruleProfilesImportedX": "Импортировано профилей правил: {0}", + "useSpecialStyleAfterLongGaps": "Использовать особый стиль после длинных пауз", + "addSpace": "Добавлять пробел", "processIfEndsWithComma": "Обрабатывать, если заканчивается запятой", "removeComma": "Удалить запятую", "editContinuationStyleCustom": "Редактировать пользовательский стиль продолжения", - "longGapThreshold": "Пороговое значение большой паузы (мс)", - "afterLongGap": "После долгого перерыва:", + "longGapThreshold": "Порог длинной паузы (мс)", + "afterLongGap": "После длинной паузы:", "resetSyntaxColoring": "Сбросить подсветку синтаксиса", - "resetWaveform": "Сбросить форму сигнала", + "resetWaveform": "Сбросить осциллограмму", "resetRules": "Сбросить правила", - "useFrameMode": "Использовать режим кадра (hh.mm.ss.ff)", + "timeCodeMode": "Режим тайм-кодов", + "timeCodeModeTime": "Время (hh:mm:ss,zzz)", + "timeCodeModeFrames": "Кадры (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "Номера кадров", + "frameModeSnapToVideoFrames": "Хранить время по кадрам видео (а не по кадрам внутри каждой секунды)", "textBoxLimitNewLines": "Ограничить количество строк в текстовом поле субтитров", + "textBoxAutoWrapWhileTyping": "Автоперенос при вводе", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv — Программная отрисовка (медленная)", - "mpvWidRendering": "libmpv — Собственный рендеринг идентификатора окна", + "mpvMetalRendering": "libmpv - Metal (экспериментально, требуется перезапуск)", + "mpvWidRendering": "libmpv - отрисовка в нативное окно (Window ID)", "waveFormsAndSpectrogramFoldersContainsX": "Папки \"Waveforms\" и \"spectrogram\" содержат {0}", - "deleteWaveformAndSpectrogramFoldersQuestion": "Удалить файлы \"Осциллограммы\" и \"Спектрограммы\"?", + "deleteWaveformAndSpectrogramFoldersQuestion": "Удалить файлы \"Waveforms\" и \"Spectrogram\"?", "waveformGenerateSpectrogram": "Сгенерировать спектрограмму", "waveformAutoGenerate": "Авто-создание осциллограммы при открытии видео", "waveformSpectrogramMode": "Режим спектрограммы", - "waveformRightClickSelectsSubtitle": "Выделить субтитры щелчком правой кнопки мыши", - "waveformDrawStyle": "Стиль отображения формы сигнала", - "waveformExtractAudioFormat": "Извлечь аудиоформат", - "waveformExtractAudioSampleRate": "Извлечь частоту дискретизации звука", - "waveformExtractAudioSampleRateOriginal": "Оригинал (сохранить источник)", - "waveformExtractAudioBitRate": "Извлечь битрейт аудио (MP3/M4A)", - "vlcWidRendering": "libVLC — собственный рендеринг идентификаторов окон", - "subtitleGridEnterKeyAction": "Сетка субтитров Действие клавиши Enter", - "subtitleSingleClickAction": "Действие \"один клик\" по сетке субтитров", - "subtitleDoubleClickAction": "Действие двойного щелчка по сетке субтитров", - "subtitleGridCenterSelectedRow": "Сетка субтитров, центрируйте при выборе предыдущей/следующей строки", - "saveAsBehavior": "Функция \"Сохранить как\"", + "waveformRightClickSelectsSubtitle": "Выбирать субтитр правым щелчком", + "waveformDrawStyle": "Стиль отрисовки осциллограммы", + "waveformExtractAudioFormat": "Формат извлекаемого аудио", + "waveformExtractAudioSampleRate": "Частота дискретизации извлекаемого аудио", + "waveformExtractAudioSampleRateOriginal": "Оригинальная (как в источнике)", + "waveformExtractAudioBitRate": "Битрейт извлекаемого аудио (MP3/M4A)", + "ffmpegUseCenterChannelOnly": "Использовать только передний центральный канал для аудио 5.1 (FFmpeg)", + "vlcWidRendering": "libVLC - отрисовка в нативное окно (Window ID)", + "ffmpegSoftwareRendering": "FFmpeg", + "downloadFfmpegLibs": "Скачать библиотеки FFmpeg (для видеоплеера FFmpeg)", + "subtitleGridEnterKeyAction": "Действие клавиши Enter в таблице субтитров", + "subtitleSingleClickAction": "Действие одинарного щелчка в таблице субтитров", + "subtitleDoubleClickAction": "Действие двойного щелчка в таблице субтитров", + "subtitleGridCenterSelectedRow": "Таблица субтитров: центрировать при выборе предыдущей/следующей строки", + "saveAsBehavior": "Поведение \"Сохранить как\"", "defaultSaveLocation": "Место сохранения по умолчанию", "defaultSaveLocationSourceFileFolder": "Папка с файлами субтитров/видео", "defaultSaveLocationLastUsedFolder": "Последняя использованная папка", "defaultSaveLocationVideoFileFolder": "Папка с видеофайлами", "defaultSaveLocationSubtitleFileFolder": "Папка с файлами субтитров", "defaultSaveLocationCustomFolder": "Пользовательская папка", - "saveAsAppendLanguageCode": "\"Сохранить как\" добавить код языка", - "gridGoToSubtitleAndSetVideoPosition": "Перейти к субтитрам и установить положение видео", + "saveAsAppendLanguageCode": "\"Сохранить как\": добавлять код языка", + "gridGoToSubtitleAndSetVideoPosition": "Перейти к субтитру и установить позицию видео", "gridGoToNextLine": "Перейти на следующую строку", - "gridGoToSubtitleOnlyWaveformOnly": "Перейти только к субтитрам (только сигнал)", - "gridGoToSubtitleAndPause": "Перейти к субтитрам и поставить на паузу", - "gridGoToSubtitleAndPlay": "Перейти к субтитрам и воспроизвести", - "gridGoToSubtitleAndPauseAndFocusTextBox": "Перейти к субтитрам, поставить на паузу и фокус текста", - "gridGoToSubtitleAndPlayAndFocusTextBox": "Перейти к субтитрам, воспроизвести и выделить текстовое поле", - "subtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "Перейти к месту воспроизведения видео, запустать воспроизведение и поставьте на паузу", - "subtitleListActionVideoGoToPositionMinus1SecAndPause": "Перейти к позиции видео - 1 с и поставьте на паузу", - "subtitleListActionVideoGoToPositionMinusHalfSecAndPause": "Перейти к точке воспроизведения видео - 0,5 с и поставьте на паузу", + "gridGoToSubtitleOnlyWaveformOnly": "Только перейти к субтитру (только осциллограмма)", + "gridGoToSubtitleAndPause": "Перейти к субтитру и поставить на паузу", + "gridGoToSubtitleAndPlay": "Перейти к субтитру и воспроизвести", + "gridGoToSubtitleAndPauseAndFocusTextBox": "Перейти к субтитру, поставить на паузу и перейти к тексту", + "gridGoToSubtitleAndPlayAndFocusTextBox": "Перейти к субтитру, воспроизвести и перейти к тексту", + "subtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "Перейти к позиции видео, воспроизвести текущий и поставить на паузу", + "subtitleListActionVideoGoToPositionMinus1SecAndPause": "Перейти к позиции видео - 1 с и поставить на паузу", + "subtitleListActionVideoGoToPositionMinusHalfSecAndPause": "Перейти к позиции видео - 0,5 с и поставить на паузу", "subtitleListActionVideoGoToPositionMinus1SecAndPlay": "Перейти к позиции видео - 1 с и воспроизвести", "subtitleGridFormattingNone": "Без форматирования", "subtitleGridFormattingShowFormatting": "Показать форматирование", "subtitleGridFormattingShowTags": "Показать теги", "subtitleGridFormattingHideTags": "Скрыть теги", - "waveformParagraphBackgroundColor": "Цвет фона субтитров волновой формы", - "waveformParagraphSelectedBackgroundColor": "Цвет фона выбранного субтитра в виде волновой формы", - "waveformAllowOverlap": "Допускается перекрытие (при перемещении/изменении размера)", - "waveformSetVideoPositionOnMoveStartEnd": "Настройка положения видео при перемещении начала/конца", + "subtitleGridFormattingShowFormattingKeepTags": "Показать форматирование, оставить невизуальные теги", + "waveformParagraphBackgroundColor": "Цвет фона субтитра на осциллограмме", + "waveformParagraphSelectedBackgroundColor": "Цвет фона выбранного субтитра на осциллограмме", + "waveformAllowOverlap": "Разрешить перекрытие (при перемещении/изменении размера)", + "waveformSetVideoPositionOnMoveStartEnd": "Устанавливать позицию видео при перемещении начала/конца", "saveAsBehaviorUseSubtitleVideoFilename": "Использовать имя файла субтитров/видео", "saveAsBehaviorUseVideoSubtitleFilename": "Использовать имя файла видео/субтитров", "saveAsBehaviorUseVideoFileName": "Использовать имя видеофайла", "saveAsBehaviorUseSubtitleFileName": "Использовать имя файла субтитров", "saveAsAppendLanguageCodeTwoLetter": "Двухбуквенный", "saveAsAppendLanguageCodeLanguageName": "Название языка", - "splitOddLineActionWeightTop": "Вес сверху", - "splitOddLineActionWeightBottom": "Вес снизу", - "splitOddLinesAction": "Разделение нечетных строк действия", - "ocrUseWordSplitList": "OCR: использовать список слов, разделенных на части", - "ocrGuessUnknownWords": "OCR: попытка угадать незнакомые слова", - "speechToTextSelectedLinesPromptFirstTimeOnly": "Преобразование речи в текст: выбранные строки, запрос на выбор языка/движка только при первом использовании", - "multipleReplaceShowDotDotDotButtons": "Множественная замена: отображение кнопок контекстного меню", - "gridFocusTextboxAfterInsertNew": "Сетка: фокус поля текста после вставки нового субтитра", + "splitOddLineActionWeightTop": "Больше сверху", + "splitOddLineActionWeightBottom": "Больше снизу", + "splitOddLinesAction": "Разделение нечетного числа строк", + "ocrUseWordSplitList": "OCR: использовать список разбиения слов", + "ocrGuessUnknownWords": "OCR: пытаться угадывать незнакомые слова", + "spellCheckRememberUseAlwaysList": "Проверка орфографии: запоминать список \"Всегда использовать\"", + "fixShortDisplayTimesAllowMoveStartTime": "Исправление типичных ошибок: исправление короткого времени показа может сдвигать время начала", + "speechToTextSelectedLinesPromptFirstTimeOnly": "Распознавание речи для выбранных строк: спрашивать язык/движок только в первый раз", + "multipleReplaceShowDotDotDotButtons": "Множественная замена: показывать кнопки контекстного меню", + "gridFocusTextboxAfterInsertNew": "Таблица: переходить к полю текста после вставки нового субтитра", + "undoRedoGoToChangedLine": "Отмена/повтор: переходить к измененной строке (и позиции видео)", "musicSymbol": "Музыкальный символ", "musicSymbolsToReplace": "Музыкальные символы для замены (разделенные запятой)", - "textToSpeechPromptMergeContinuationLines": "Преобразование текста в речь: подсказка для объединения строк продолжения", - "textToSpeechPromptSkipNoiseLines": "Преобразование текста в речь: подсказка для пропуска звуковых/музыкальных строк", - "textToSpeechPromptDetectSpeakers": "Преобразование текста в речь: подсказка для определения имен говорящих в тексте", - "useFocusedButtonBackgroundColor": "Использовать цвет фона для выделенной кнопки", + "textToSpeechPromptMergeContinuationLines": "Синтез речи: предлагать объединять строки-продолжения", + "textToSpeechPromptSkipNoiseLines": "Синтез речи: предлагать пропускать строки со звуками/музыкой", + "textToSpeechPromptDetectSpeakers": "Синтез речи: предлагать находить имена говорящих в тексте", + "useFocusedButtonBackgroundColor": "Использовать цвет фона для кнопки в фокусе", "focusedButtonBackgroundColor": "Цвет фона кнопки с фокусом", - "forceCrLfOnSave": "Принудительное использование символов CR+LF при сохранении (текстовых файлов субтитров)", - "showFormatLimitWarning": "Выдавать предупреждение при сохранении, если количество строк превышает ограничения формата (например, SCC 32 символа/строка)", - "textBoxButtonShowAutoBreak": "Текстовое поле: показать кнопку авторазрыва", - "textBoxButtonShowUnbreak": "Текстовое поле: показать кнопку \"Неразрывный\"", - "textBoxButtonShowItalic": "Текстовое поле: показать кнопку курсива", - "textBoxButtonShowColor": "Текстовое поле: показать кнопку выбора цвета", - "textBoxButtonShowRemoveFormatting": "Текстовое поле: показать кнопку удаления форматирования", - "textBoxButtonShowAiAssistant": "Текстовое поле: кнопка «Показать ИИ-помощника»", - "waveformSingleClickAction": "Действие \"одним щелчком\" при отображении волновой формы", - "waveformDoubleClickAction": "Действие двойного щелчка по волновой форме (после действия одинарного щелчка)", + "forceCrLfOnSave": "Всегда сохранять с CR+LF (текстовые файлы субтитров)", + "linuxClipboardUseExternalTool": "Копировать текст через xclip/wl-copy (сохраняет символы с диакритикой)", + "showFormatLimitWarning": "Предупреждать при сохранении, если строки превышают ограничения формата (например, SCC — 32 символа в строке)", + "textBoxButtonShowAutoBreak": "Поле текста: показывать кнопку автопереноса", + "textBoxButtonShowUnbreak": "Поле текста: показывать кнопку \"Убрать переносы\"", + "textBoxButtonShowItalic": "Поле текста: показывать кнопку курсива", + "textBoxButtonShowColor": "Поле текста: показывать кнопку цвета", + "textBoxButtonShowRemoveFormatting": "Поле текста: показывать кнопку удаления форматирования", + "textBoxButtonShowAiAssistant": "Поле текста: показывать кнопку ИИ-помощника", + "waveformSingleClickAction": "Действие одинарного щелчка на осциллограмме", + "waveformDoubleClickAction": "Действие двойного щелчка на осциллограмме (после действия одинарного щелчка)", "allSettings": "Все настройки", - "uiScale": "Масштаб пользовательского интерфейса (%)", - "waveformToolbarItems": "Элементы панели инструментов \"Форма волны\"", - "matchIconColorToDarkTheme": "Подобрать цвет значка в соответствии с цветом переднего плана темной темы", + "uiScale": "Масштаб интерфейса (%)", + "fontScale": "Масштаб шрифта (%)", + "textSelectionOpacity": "Непрозрачность выделения текста (%)", + "waveformToolbarItems": "Элементы панели инструментов осциллограммы", + "matchIconColorToDarkTheme": "Подбирать цвет значков под цвет текста темной темы", "subtitlePreviewProperties": "Свойства предварительного просмотра субтитров", "usePositionFromSubtitleFile": "Использовать позицию из файла субтитров (TTML/PAC/EBU STL)", - "marginIsPartOfSubtitleArea": "Поле является частью области субтитров", - "textJustify": "Выравнивание строк", + "marginIsPartOfSubtitleArea": "Отступ входит в область субтитров", + "textJustify": "Выравнивать строки", + "deinterlace": "Деинтерлейсинг видео", + "deinterlaceOff": "Выкл.", + "deinterlaceAuto": "Авто (только чересстрочные кадры)", + "deinterlaceAlways": "Всегда", "pixelWidthInfo": "Зелёные линии = предел максимальной ширины | Красная зона = текст превышает предел", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", - "spellCheckEngine": "Система проверки орфографии", - "waveformColorThemesDotDotDot": "Цветовые темы для волнообразных диаграмм...", - "waveformColorTheme": "Цветовая гамма:", + "spellCheckEngine": "Движок проверки орфографии", + "waveformColorThemesDotDotDot": "Цветовые темы осциллограммы...", + "waveformColorTheme": "Цветовая тема:", "waveformSaveAsCustomTheme": "Сохранить как пользовательскую тему...", "waveformLoadThemeDotDotDot": "Загрузить тему...", - "waveformExportThemeDotDotDot": "Экспорт темы..." + "waveformExportThemeDotDotDot": "Экспорт темы...", + "waveformSaveCustomThemeTitle": "Сохранить свою тему", + "waveformThemeFileType": "Тема осциллограммы Subtitle Edit", + "waveformThemeHighContrast": "Высокий контраст", + "waveformThemeOceanBlue": "Синий океан", + "waveformThemeWarmSunset": "Теплый закат", + "waveformThemeForest": "Лес", + "waveformThemeMidnightPurple": "Полуночный пурпур", + "waveformThemeRetroAmber": "Ретро-янтарь", + "waveformThemeIce": "Лед" }, "shortcuts": { - "searchShortcuts": "Поисковые ярлыки...", + "searchShortcuts": "Поиск сочетаний клавиш...", "categorySubtitleGridAndTextBox": "Список субтитров и текстовое поле", "categorySubtitleGrid": "Список субтитров", "categoryTextBox": "Текстовое поле", @@ -3092,89 +3715,121 @@ "categoryVideo": "Видео", "categorySync": "Синхронизация", "categoryAi": "ИИ", - "activeIn": "Активно участвует в", - "activeInEverywhere": "Повсюду", - "generalMergeSelectedLinesAndUnbreak": "Объединить выделенные строки и восстановить разрыв", - "generalMergeSelectedLinesAndUnbreakCjk": "Объединить выбранные строки и восстановить разрыв CJK", - "generalUnbreakNoSpaceCjk": "Неразрыв без пробела (CJK)", - "generalMergeSelectedLinesBilingual": "Объединение выбранных строк (двуязычное)", + "categoryCustom": "Пользовательские", + "editCustomShortcut": "Изменить пользовательское сочетание", + "customShortcutTextBoxKeyHint": "Используйте здесь клавишу с Ctrl/Alt - обычная клавиша перестанет вводить текст в текстовом поле.", + "customShortcutNumberX": "Пользовательское сочетание №{0}", + "customShortcutNumberXY": "Пользовательское сочетание №{0}: {1}", + "customShortcutStep": "Шаг", + "customShortcutSteps": "Шаги", + "customShortcutStepRunCommand": "Выполнить команду", + "customShortcutStepInsertText": "Вставить текст", + "customShortcutStepReplace": "Найти и заменить", + "customShortcutInsertAtCursor": "В позиции курсора", + "customShortcutInsertAtStart": "В начале текста", + "customShortcutInsertAtEnd": "В конце текста", + "customShortcutSummaryRunCommandX": "Выполнить: {0}", + "customShortcutSummaryInsertXY": "Вставить \"{0}\" ({1})", + "customShortcutSummaryReplaceXY": "Заменить \"{0}\" на \"{1}\"", + "customShortcutSummaryReplaceRegexXY": "Заменить регулярное выражение \"{0}\" на \"{1}\"", + "customShortcutPickCommand": "Выберите команду для выполнения.", + "customShortcutEnterText": "Введите текст для вставки.", + "customShortcutEnterFind": "Введите текст для поиска.", + "customShortcutStepsHint": "Шаги выполняются сверху вниз. Текстовые шаги работают с выбранными строками; команды, открывающие окно, продолжаются после его закрытия.", + "activeIn": "Действует в", + "activeInEverywhere": "Везде", + "generalMergeSelectedLinesAndUnbreak": "Объединить выбранные строки и убрать переносы", + "generalMergeSelectedLinesAndUnbreakCjk": "Объединить выбранные строки и убрать переносы без пробела (CJK)", + "generalUnbreakNoSpaceCjk": "Убрать переносы без пробела (CJK)", + "generalToggleBreak": "Переключить перенос/без переноса", + "generalMergeSelectedLinesBilingual": "Объединить выбранные строки (двуязычно)", "generalToggleTranslationMode": "Переключить режим перевода", - "generalToggleTranslationAndOriginalInPreviews": "Включить/выключить перевод и оригинал в предварительном просмотре видео/аудио", + "generalToggleTranslationAndOriginalInPreviews": "Переключить перевод/оригинал в предпросмотре видео/аудио", "generalChooseLayout": "Выбрать макет", "generalGoToNextSubtitle": "Перейти к следующему субтитру", - "generalGoToNextSubtitlePlayTranslate": "Перейти к следующим субтитрам (воспроизвести)", + "generalGoToNextSubtitlePlayTranslate": "Перейти к следующему субтитру (воспроизведение для перевода)", "generalGoToNextSubtitleCursorAtEnd": "Перейти к следующему субтитру (курсор в конце)", "generalGoToPrevSubtitle": "Перейти к предыдущему субтитру", - "generalGoToPrevSubtitlePlayTranslate": "Перейти к предыдущим субтитрам (воспроизвести)", + "generalGoToPrevSubtitlePlayTranslate": "Перейти к предыдущему субтитру (воспроизведение для перевода)", "generalGoToFirstLine": "Перейти к первой строке", "generalGoToLastLine": "Перейти к последней строке", - "alsoSetVideoPosition": "Также установите положение видео", - "generalGoToVideoPosition": "Перейти к положению видео", - "generalToggleItalic": "Переключить курсив", - "generalToggleBold": "Выделить жирным шрифтом", - "generalToggleUnderline": "Подчеркнуть", + "alsoSetVideoPosition": "Также установить позицию видео", + "generalGoToVideoPosition": "Перейти к позиции видео", + "generalToggleItalic": "Вкл./выкл. курсив", + "generalToggleBold": "Вкл./выкл. полужирный", + "generalToggleUnderline": "Вкл./выкл. подчеркивание", + "generalToggleBox": "Переключить рамку (EBU STL)", "fileOpen": "Открыть", "fileOpenKeepVideo": "Открыть (сохранить видео)", "fileSave": "Сохранить", "fileSaveAs": "Сохранить как", - "fileCompare": "Сравнение субтиров", + "fileSaveOriginal": "Сохранить оригинал", + "fileCompare": "Сравнить", "fileStatistics": "Статистика", "fileImportPlainText": "Импорт простого текста", "fileExportEbuStl": "Экспорт EBU STL", - "fileExportPac": "Экспорт ПАК", + "fileExportPac": "Экспорт PAC", "fileExit": "Выход", - "openSeDataFolder": "Открыть папку \"Редактировать субтитры\"", - "editFindPrevious": "Найти предыдущий", + "openSeDataFolder": "Открыть папку данных Subtitle Edit", + "editFindPrevious": "Найти предыдущее", "fillSelectedLinesWithClipboard": "Заполнить выделенные строки текстом из буфера обмена", - "listInverseSelection": "Обратный отбор", + "listInverseSelection": "Инвертировать выделение", "listDeleteSelection": "Удалить выделение", - "rippleDeleteSelection": "Удаление выделения методом пульсации", - "assigned": "Назначенный", + "deleteSelectionEverywhere": "Удалить выделение (везде)", + "rippleDeleteSelection": "Удалить выделение со сдвигом (ripple delete)", + "assigned": "Назначено", "unassigned": "Не назначено", "pressedKeyX": "Нажата клавиша: {0}", "pressAKey": "Нажмите клавишу", - "detectKey": "Обнаружить ключ", - "control": "Контроль", + "detectKey": "Определить клавишу", + "control": "Ctrl", "alt": "Альт", + "altGr": "АльтГр", "win": "Победить", "shift": "Сдвиг", "controlMac": "⌃", "altMac": "⌥", "winMac": "⌘", "shiftMac": "⇧", - "resetShortcuts": "Сбросить ярлыки", + "resetShortcuts": "Сбросить сочетания клавиш", "resetShortcutsDetail": "Вы хотите сбросить все сочетания клавиш до значений по умолчанию?", "togglePlayPause": "Переключить воспроизведение/паузу", - "toggleLockTimeCodes": "Переключить временные коды блокировки", + "toggleLockTimeCodes": "Вкл./выкл. блокировку временных кодов", + "toggleTimeCodeMode": "Переключить режим тайм-кодов (время/кадры/номера кадров)", + "toggleScreenPrivacy": "Переключить защиту экрана (скрыть имена файлов, затем и тексты)", + "screenPrivacyFileNamesHidden": "Защита экрана: имена файлов скрыты", + "screenPrivacyFileNamesAndTextsHidden": "Защита экрана: имена файлов и тексты скрыты", + "screenPrivacyOff": "Защита экрана: выкл.", "duplicateSelectedLines": "Дублировать выбранные строки", - "sourceView": "Исходный код", + "sourceView": "Исходный текст", "addOrEditBookmark": "Добавить или отредактировать закладку", - "toggleBookmark": "Переключить закладку (выделенные строки, без текста)", - "toggleForcedSelectedLines": "Переключить принудительное отображение (выбранных строк)", + "toggleBookmark": "Вкл./выкл. закладку (выделенные строки, без текста)", + "toggleForcedSelectedLines": "Вкл./выкл. принудительные (выделенные строки)", "goToNextBookmark": "Перейти к следующей закладке", "clearBookmarks": "Очистить закладки", "goToNextEmptyLine": "Перейти к следующей пустой строке", - "toggleWaveformToolbar": "Переключить панель инструментов отображения волны", - "toggleSubtitleGridFormatting": "Переключить форматирование сетки (показать форматирование/показать теги/без форматирования)", - "waveformSetStartAndSetEndOfPreviousMinusGap": "Установить начало и конец предыдущего минусового промежутка", - "waveformSetEndAndStartOfNextAfterGap": "Установить конец и начало следующего плюс пробел", - "waveformSetEndAndStartOfNextAfterGapAndGoToNext": "Установить начало и конец следующего шага, добавить промежуток и перейти к следующему шагу", + "toggleWaveformToolbar": "Показать/скрыть панель инструментов осциллограммы", + "toggleSubtitleGridFormatting": "Переключить форматирование таблицы (показать форматирование/показать теги/без форматирования/скрыть теги)", + "waveformSetStartAndSetEndOfPreviousMinusGap": "Установить начало и конец предыдущего минус промежуток", + "waveformSetEndAndStartOfNextAfterGap": "Установить конец и начало следующего плюс промежуток", + "waveformSetEndAndStartOfNextAfterGapAndGoToNext": "Установить конец и начало следующего плюс промежуток и перейти к следующему", "moveLastWordToNextSubtitle": "Переместить последнее слово в следующий субтитр", - "moveLastWordFromFirstLineDownCurrentSubtitle": "Переместите последнее слово из первой строки вниз (текущий субтитр)", - "moveFirstWordFromNextLineUpCurrentSubtitle": "Переместите первое слово из следующей строки (текущий субтитр)", - "moveTextFromCursorToNextAndGoToNext": "Переместите текст после позиции курсора к следующему субтитру и перейдите к следующему", - "moveTextFromCursorToNextAndGoToNextAndPlay": "Переместите текст после позиции курсора к следующему субтитру, перейдите к следующему и воспроизведите", - "breakAtFirstSpaceFromCursor": "Перерыв в первом пробеле от положения курсора", - "breakAtFirstSpaceFromCursorAndGoToNext": "Перейти к следующему шагу, отступив на первом пробеле от позиции курсора", - "toggleFocusGridAndWaveform": "Переключение фокуса между сеткой субтитров и осциллограммой/спектрограммой", - "toggleFocusTextBoxAndWaveform": "Переключать фокус между текстовым полем и осциллограммой/спектрограммой", - "toggleFocusTextBoxAndGrid": "Переключение фокуса между текстовым полем и сеткой субтитров", - "goToPreviousLineAndSetVideoPosition": "Перейти к предыдущим субтитрам и установить положение видео", - "goToPreviousLineFromVideoPosition": "Перейти к предыдущим субтитрам (с текущей позиции видео)", + "moveLastWordFromFirstLineDownCurrentSubtitle": "Перенести последнее слово первой строки вниз (текущий субтитр)", + "moveFirstWordFromNextLineUpCurrentSubtitle": "Перенести первое слово следующей строки вверх (текущий субтитр)", + "moveTextFromCursorToNextAndGoToNext": "Перенести текст после курсора в следующий субтитр и перейти к нему", + "moveTextFromCursorToNextAndGoToNextAndPlay": "Перенести текст после курсора в следующий субтитр, перейти к нему и воспроизвести", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "Перенести текст после курсора в следующий субтитр, перейти к нему, воспроизвести и остановиться в конце", + "breakAtFirstSpaceFromCursor": "Перенос строки по первому пробелу от курсора", + "breakAtFirstSpaceFromCursorAndGoToNext": "Перенос строки по первому пробелу от курсора и переход к следующему", + "toggleFocusGridAndWaveform": "Переключить фокус между таблицей субтитров и осциллограммой/спектрограммой", + "toggleFocusTextBoxAndWaveform": "Переключить фокус между полем текста и осциллограммой/спектрограммой", + "toggleFocusTextBoxAndGrid": "Переключить фокус между полем текста и таблицей субтитров", + "goToPreviousLineAndSetVideoPosition": "Перейти к предыдущему субтитру и установить позицию видео", + "goToPreviousLineFromVideoPosition": "Перейти к предыдущему субтитру (от текущей позиции видео)", "goToNextLineFromVideoPosition": "Перейти к следующему субтитру (от текущей позиции в видео)", "videoGoToPreviousTimeCode": "Перейти к предыдущему временному коду", - "videoGoToNextTimeCode": "Перейдите к следующему временному коду", - "goToNextLineAndSetVideoPosition": "Перейти к следующему субтитру и установить положение видео", + "videoGoToNextTimeCode": "Перейти к следующему временному коду", + "goToNextLineAndSetVideoPosition": "Перейти к следующему субтитру и установить позицию видео", "textBoxDeleteForward": "Текстовое поле: Удалить выделенный фрагмент или следующий символ (удаление вперед)", "textBoxCut": "Текстовое поле: Вырезать", "textBoxCut2": "Текстовое поле: Вырезать (альтернативный вариант)", @@ -3183,172 +3838,206 @@ "textBoxCopy": "Текстовое поле: Копировать", "textBoxCopy2": "Текстовое поле: Копировать (альтернативный вариант)", "textBoxSelectAll": "Текстовое поле: Выделить все", - "subtitleGridCut": "Сетка субтитров: Вырезать", - "subtitleGridCopy": "Сетка субтитров: Копировать", - "subtitleGridPaste": "Сетка субтитров: Вставить", + "subtitleGridCut": "Таблица субтитров: Вырезать", + "subtitleGridCopy": "Таблица субтитров: Копировать", + "subtitleGridPaste": "Таблица субтитров: Вставить", "listViewColumnDeleteText": "Столбец, удалить текст", "listViewColumnDeleteTextAndShiftUp": "Столбец, удалить текст и сдвинуть вверх", "listViewColumnInsertText": "Столбец, вставить текст", "listViewColumnPaste": "Столбец, вставить", "listViewColumnTextUp": "Столбец, текст вверх", "listViewColumnTextDown": "Столбец, текст вниз", - "autoTranslateSelectedLines": "Автоматический перевод выбранных строк...", + "autoTranslateSelectedLines": "Автоперевод выбранных строк...", + "autoTranslateSelectedLinesNoPrompt": "Автоперевод выбранных строк (без запроса, последний движок/языки)", "setAssaResolution": "Установить разрешение ASSA (PlayResX/PlayResY)", "setShortcutForX": "Установить сочетание клавиш для \"{0}\"", - "commandFileNewKeepVideo": "Новое (сохранить видео)", + "commandFileNewKeepVideo": "Новый (сохранить видео)", "fileOpenOriginal": "Открыть оригинал", "fileCloseOriginal": "Закрыть оригинал", - "fileCloseTranslation": "Близкий перевод", - "restoreAutoBackup": "Восстановить автоматическую резервную копию", + "fileCloseTranslation": "Закрыть перевод", + "restoreAutoBackup": "Восстановить из автосохранения", "importTimeCodes": "Импорт временных кодов", - "importSubtitleWithManuallyChosenEncoding": "Импорт субтитров с вручную выбранной кодировкой", + "importSubtitleWithManuallyChosenEncoding": "Импорт субтитров с выбором кодировки вручную", "exportBluRaySup": "Экспорт Blu-ray SUP", "exportCustomTextFormat": "Экспорт в пользовательский текстовый формат", "exportPlainText": "Экспорт простого текста", "toggleRightToLeft": "Переключить направление справа налево", "modifySelection": "Изменить выделение", - "adjustDurations": "Отрегулировать Длительность", - "applyDurationLimits": "Применить ограничения по продолжительности", + "adjustDurations": "Настроить длительность", + "applyDurationLimits": "Применить ограничения длительности", "batchConvert": "Пакетное преобразование", - "applyMinGap": "Применить минимальный зазор", - "makeEmptyTranslationFromCurrentSubtitle": "Выполнить пустой перевод из текущих субтитров", - "splitBreakLongLines": "Разделение/перебалансировка длинных линий", - "mergeShortLines": "Объединение коротких линий", + "applyMinGap": "Применить минимальный промежуток", + "makeEmptyTranslationFromCurrentSubtitle": "Создать пустой перевод из текущих субтитров", + "splitBreakLongLines": "Разделить/перебалансировать длинные строки", + "mergeShortLines": "Объединить короткие строки", "mergeContinuationLines": "Объединить строки продолжения", - "snapAllTimesToFrames": "Привязать все время к кадрам", - "joinSubtitles": "Объединить субтитры", - "splitSubtitle": "Разделенные субтитры", - "spellCheck": "Орфография", + "snapAllTimesToFrames": "Привязать все тайм-коды к кадрам", + "joinSubtitles": "Объединить файлы субтитров", + "splitSubtitle": "Разделить файл субтитров", + "spellCheck": "Проверка орфографии", "spellCheckGetDictionary": "Получить словарь для проверки орфографии", "openVideo": "Открыть видео", "openVideoFromUrl": "Открыть видео по URL-адресу", "closeVideo": "Закрыть видео", - "speechToText": "Преобразование речи в текст (Whisper)", - "textToSpeech": "Преобразование текста в речь", - "videoOcr": "Встроенные субтитры, полученные с помощью OCR", - "burnIn": "Создать видео со встроенными субтитрами", + "speechToText": "Распознавание речи (Whisper)", + "textToSpeech": "Синтез речи", + "videoOcr": "OCR вшитых субтитров", + "burnIn": "Создать видео со вшитыми субтитрами", "generateTransparent": "Создать прозрачное видео с субтитрами", - "undockVideoControls": "Отсоединить элементы управления видео", - "redockVideoControls": "Переподключить элементы управления видео", + "undockVideoControls": "Открепить управление видео", + "redockVideoControls": "Закрепить управление видео", "generateBlankVideo": "Создать пустой видеофайл", "reencodeVideo": "Перекодировать видео", - "cutVideo": "Вырезанное видео", - "cutVideoSelectedLines": "Вырезать видео (выделенные строки)", - "adjustAllTimes": "Изменить все время", + "cutVideo": "Обрезать видео", + "cutVideoSelectedLines": "Обрезать видео (выделенные строки)", + "adjustAllTimes": "Сдвинуть все тайм-коды", "visualSync": "Визуальная синхронизация", - "translateViaCopyPaste": "Перевод с помощью копирования и вставки", + "translateViaCopyPaste": "Перевод через копирование/вставку", "wordLists": "Списки слов", - "chooseUiLanguage": "Язык пользовательского интерфейса", + "chooseUiLanguage": "Язык интерфейса", "chooseRuleProfile": "Выбрать профиль правил", "videoFullScreen": "Видео в полноэкранном режиме", "copyTextFromOriginalSelectedLines": "Скопировать текст из оригинала (выделенные строки)", "copyTextToOriginalSelectedLines": "Скопировать текст в оригинал (выделенные строки)", - "textBoxRemoveAllFormatting": "Текстовое поле, удалить все форматирование", - "textBoxItalic": "Текстовое поле курсивом", - "textBoxBold": "Текстовое поле выделено жирным шрифтом", - "textBoxUnderline": "Подчеркнуть текстовое поле", - "resetWaveformZoomAndSpeed": "Сбросить масштабирование осциллограммы и скорость воспроизведения (частоту воспроизведения)", - "togglePlaybackSpeed": "Переключить скорость воспроизведения (частоту воспроизведения)", - "playbackSpeedSlower": "Скорость воспроизведения ниже (скорость воспроизведения)", - "playbackSpeedFaster": "Скорость воспроизведения выше (скорость воспроизведения)", + "textBoxRemoveAllFormatting": "Поле текста: удалить все форматирование", + "textBoxItalic": "Поле текста: курсив", + "textBoxBold": "Поле текста: полужирный", + "textBoxUnderline": "Поле текста: подчеркивание", + "textBoxBox": "Рамка в текстовом поле (EBU STL)", + "resetWaveformZoomAndSpeed": "Сбросить масштаб осциллограммы и скорость воспроизведения", + "togglePlaybackSpeed": "Переключить скорость воспроизведения", + "playbackSpeedSlower": "Медленнее воспроизведение", + "playbackSpeedFaster": "Быстрее воспроизведение", "switchOriginalAndTranslationSelectedLines": "Поменять местами оригинал и перевод (выбранные строки)", "mergeOriginalIntoTranslationSelectedLines": "Объединить оригинал и перевод (выбранные строки)", "seekSilence": "Искать тишину", - "seekSilenceBack": "Вернуть тишину", - "seekSilenceForward": "Поиск тишины вперед", - "waveformGuessStart": "Определите время начала по форме сигнала", - "waveformGuessEnd": "Определить время окончания по форме сигнала", + "seekSilenceBack": "Искать тишину назад", + "seekSilenceForward": "Искать тишину вперед", + "waveformGuessStart": "Подобрать время начала по осциллограмме", + "waveformGuessEnd": "Подобрать время конца по осциллограмме", + "waveformGuessStartAndEnd": "Определить время начала и окончания по осциллограмме", "setVideoPositionCurrentSubtitleStart": "Установить позицию видео на начало текущей строки", - "goToSubtitlePositionAndPause": "Перейдите в положение замены и поставьте на паузу", + "goToSubtitlePositionAndPause": "Перейти к позиции субтитра и поставить на паузу", "setVideoPositionCurrentSubtitleEnd": "Установить позицию видео на конец текущей строки", "toggleAudioTracks": "Переключить звуковые дорожки", - "goToNextError": "Ошибка перехода к следующему", + "goToNextError": "Перейти к следующей ошибке", "goToPreviousError": "Перейти к предыдущей ошибке", "addNameToNameList": "Добавить имя в список имен", - "findDoubleWords": "Найти удвоенные слова", - "findDoubleLines": "Найти двойные линии", + "findDoubleWords": "Найти повторяющиеся слова", + "findDoubleLines": "Найти повторяющиеся строки", "colorX": "Цвет {0}", - "surroundWith": "Окружить...", - "surroundWithXY": "Окружить {0}/{1}", - "surroundWithNumberX": "Окружите #{0}", + "surroundWith": "Обрамить...", + "surroundWithXY": "Обрамить {0}/{1}", + "surroundWithNumberX": "Обрамить #{0}", + "surroundWithBehavior": "Поведение", + "surroundWithBehaviorToggle": "Переключать (добавить или удалить, если есть)", + "surroundWithBehaviorAdd": "Добавлять (каждый раз)", + "surroundWithBehaviorRemove": "Удалять (все)", + "surroundWithBehaviorRemoveOnce": "Удалять (по одному за раз)", + "surroundWithWorksOn": "Применяется к", + "surroundWithScopeSelectionOrText": "Выделение, иначе весь текст", + "surroundWithScopeEachLine": "Каждая строка", "searchVia": "Поиск по", "searchViaX": "Поиск по {0}", "searchViaNumberX": "Поиск по #{0}", "searchViaUrlHint": "Искомый текст заменяет {0} в URL-адресе", - "moveVideoPositionMilliseconds": "Изменение положения видео в миллисекундах", - "importShortcutsTitle": "Импорт ярлыков", - "exportShortcutsTitle": "Ярлыки экспорта", - "xShortcutsImportedFromY": "{0} ярлыков, импортированных из {1}", - "xShortcutsExportedToY": "{0} ярлыков экспортированы в {1}", + "moveVideoPositionMilliseconds": "Сдвинуть позицию видео на миллисекунды", + "importShortcutsTitle": "Импорт сочетаний клавиш", + "exportShortcutsTitle": "Экспорт сочетаний клавиш", + "xShortcutsImportedFromY": "Импортировано сочетаний клавиш: {0} из {1}", + "xShortcutsExportedToY": "Экспортировано сочетаний клавиш: {0} в {1}", "importFromSe4": "Импорт из SE 4...", "importFromSe4Title": "Импорт сочетаний клавиш из Subtitle Edit 4", - "importFromSe4XImportedYSkipped": "{0} ярлыков, импортированных из {1} ({2} пропущено — нет соответствующего действия SE 5)", - "importImageSubtitleForEdit": "Импоровать субтитры на основе изображений для редактирования", - "showPointSyncViaOther": "Показать синхронизацию точек через другие субтитры", - "showPointSync": "Показать синхронизацию точек", - "showMediaInformation": "Показать медиаинформацию", + "importFromSe4XImportedYSkipped": "Импортировано сочетаний клавиш: {0} из {1} (пропущено: {2} — нет подходящего действия в SE 5)", + "importImageSubtitleForEdit": "Импорт субтитров-изображений для редактирования", + "showPointSyncViaOther": "Показать точечную синхронизацию через другие субтитры", + "showPointSync": "Показать точечную синхронизацию", + "showMediaInformation": "Показать информацию о медиафайле", "chooseSubtitleFormat": "Выбрать формат субтитров", "trimWhitespaceSelectedLines": "Удалить пробелы (выделенные строки)", - "waveformInsertNewSelection": "Вставка волновой формы, новый выделенный фрагмент", - "waveformNewSelectionPasteFromClipboard": "Вставьте текст из буфера обмена в новое выделение в формате Waveform", - "waveformHorizontalZoomInCommand": "Горизонтальное увеличение осциллограммы", - "waveformHorizontalZoomOutCommand": "Форма волны, горизонтальное уменьшение масштаба", - "waveformVerticalZoomInCommand": "Вертикальное масштабирование волновой формы", - "waveformVerticalZoomOutCommand": "Вертикальное уменьшение масштаба осциллограммы", + "waveformInsertNewSelection": "Осциллограмма: вставить новое выделение", + "waveformNewSelectionPasteFromClipboard": "Осциллограмма: вставить текст из буфера обмена в новое выделение", + "waveformHorizontalZoomInCommand": "Осциллограмма: увеличить по горизонтали", + "waveformHorizontalZoomOutCommand": "Осциллограмма: уменьшить по горизонтали", + "waveformVerticalZoomInCommand": "Осциллограмма: увеличить по вертикали", + "waveformVerticalZoomOutCommand": "Осциллограмма: уменьшить по вертикали", "copySubtitlePathToClipboard": "Скопировать путь к субтитрам в буфер обмена", "copySubtitleOriginalPathToClipboard": "Скопировать путь к оригиналу субтитров в буфер обмена", - "focusTextBox": "Фокус на текстовом поле", - "sortByNumber": "Сортировать по числу", + "focusTextBox": "Перейти к полю текста", + "focusSubtitleListView": "Фокус на список субтитров", + "focusWaveform": "Фокус на осциллограмму", + "focusOriginalTextBox": "Фокус на текстовое поле оригинала", + "textBoxGoToStart": "Текстовое поле: перейти в начало", + "textBoxGoToEnd": "Текстовое поле: перейти в конец", + "sortByNumber": "Сортировать по номеру", "sortByStartTime": "Сортировать по времени \"Начало\"", "sortByEndTime": "Сортировать по времени \"Конец\"", - "sortByDuration": "Сортировать по продолжительности", - "sortByGap": "Сортировать по пробелу", + "sortByDuration": "Сортировать по длительности", + "sortByGap": "Сортировать по промежутку", "sortByText": "Сортировать по тексту — в алфавитном порядке", - "sortByTextTotalLength": "Сортировать по тексту - общей длине", + "sortByTextTotalLength": "Сортировать по тексту — общая длина", "sortBySingleLineMaxLength": "Сортировка по тексту — максимальная длина строки", "sortByCps": "Сортировать по символам/сек", "sortByWpm": "Сортировать по количеству слов в минуту", "sortByNumberOfLines": "Сортировать по количеству строк", "sortByActor": "Сортировать по актеру", "sortByStyle": "Сортировать по стилю", - "videoToggleBrightness": "Видео: переключение яркости (только для MPV)", - "videoToggleContrast": "Видео: переключение контраста (только для mpv)", - "duplicatesFound": "Были обнаружены следующие повторяющиеся ярлыки:", + "videoToggleBrightness": "Видео: переключить яркость (только mpv)", + "videoToggleContrast": "Видео: переключить контраст (только mpv)", + "duplicatesFound": "Найдены повторяющиеся сочетания клавиш:", "copyTextToClipboard": "Скопировать текст в буфер обмена (выделенные строки)", "copyTextFromOriginalToClipboard": "Скопировать текст из оригинала в буфер обмена (выделенные строки)", - "assaDraw": "Розыгрыш ASSA", - "assaGenerateProgressBar": "ASSA Создать индикатор выполнения", - "assaGenerateBackgroundBox": "ASSA Создать фоновое поле", + "copyPlainTextToClipboard": "Скопировать обычный текст в буфер обмена (выделенные строки)", + "copyPlainTextFromOriginalToClipboard": "Скопировать обычный текст из оригинала в буфер обмена (выделенные строки)", + "assaDraw": "ASSA: рисование", + "assaGenerateProgressBar": "ASSA: создать индикатор прогресса", + "assaGenerateBackgroundBox": "ASSA: создать фоновую подложку", "assaStyles": "Стили ASSA", - "assaProperties": "ASSA Properties", + "assaProperties": "Свойства ASSA", "assaAttachments": "Вложения ASSA", - "recalculateDurationSelectedLines": "Пересчитать Длительность (выбранные строки)", - "setDurationMaxCpsSelectedLines": "Установить продолжительность на максимальное значение CPS (выбранные строки)", - "toggleWaveformAndSpectrogramHeight": "Переключить отображение высоты волновой формы/спектрограммы", + "recalculateDurationSelectedLines": "Пересчитать длительность (выбранные строки)", + "setDurationMaxCpsSelectedLines": "Установить длительность по макс. CPS (выбранные строки)", + "toggleWaveformAndSpectrogramHeight": "Переключить соотношение высоты осциллограммы/спектрограммы", "toggleSpectrogramStyle": "Переключить стиль спектрограммы", "copyMsRelativeToCurrentSubtitleLineToClipboard": "Скопировать миллисекунды относительно текущей строки субтитров в буфер обмена", - "layoutZoomIn": "Увеличение масштаба макета (масштабирование пользовательского интерфейса)", - "layoutZoomOut": "Уменьшение масштаба макета (масштабирование пользовательского интерфейса)", + "layoutZoomIn": "Увеличить масштаб интерфейса", + "layoutZoomOut": "Уменьшить масштаб интерфейса", "goToPreviousBookmark": "Перейти к предыдущей закладке", - "selectionToLower": "Текстовое поле: выбор в нижнем регистре", - "selectionToUpper": "Текстовое поле: выбор в верхнем регистре", - "selectionToSentenceCase": "Текстовое поле: Выделение текста с учетом регистра предложения", - "selectionToggleCasing": "Текстовое поле: Изменить регистр (верхний -> нижний -> регистр заголовка)", + "selectionToLower": "Поле текста: выделенное в нижний регистр", + "selectionToUpper": "Поле текста: выделенное в верхний регистр", + "selectionToSentenceCase": "Поле текста: выделенное — как в предложении", + "selectionToggleCasing": "Поле текста: переключить регистр (ВЕРХНИЙ -> нижний -> Как В Заголовке)", "googleIt": "Погуглить (выделенный текст)", - "setActorXY": "Набор акторов {0}: {1}", - "setNewActor": "Назначен новый актёр...", - "setActorSlotXTitle": "Слот актора {0}", - "toggleDialogDashes": "Переключить диалоговые тире", - "mergeWithLineBeforeAsDialog": "Объединить с предыдущей строкой в диалоговое окно", - "mergeWithLineAfterAsDialog": "Объединить с последующей строкой в виде диалога", + "setActorX": "Задать актера: {0}", + "setNewActor": "Задать нового актера...", + "setStyleX": "Задать стиль: {0}", + "toggleDialogDashes": "Вкл./выкл. тире диалога", + "mergeWithLineBeforeAsDialog": "Объединить с предыдущей строкой как диалог", + "mergeWithLineAfterAsDialog": "Объединить со следующей строкой как диалог", "moveStartOneFrameBack": "Переместить начало на один кадр назад", "moveStartOneFrameForward": "Переместить начало на один кадр вперед", "moveEndOneFrameBack": "Переместить конец на один кадр назад", "moveEndOneFrameForward": "Переместить конец на один кадр вперед", - "moveStartOneFrameBackKeepGapPrev": "Переместить начало на один кадр назад (сохранять разрыв до предыдущего, если оно близко)", - "moveStartOneFrameForwardKeepGapPrev": "Переместить начало на один кадр вперед (сохранять отставание от предыдущего, если оно близко)", - "moveEndOneFrameBackKeepGapNext": "Переместить конец на один кадр назад (оставлять пробел до следующего, если он близок)", - "moveEndOneFrameForwardKeepGapNext": "Переместить конец на один кадр вперед (оставлять промежуток до следующего, если он близок)" + "moveStartOneFrameBackKeepGapPrev": "Сдвинуть начало на один кадр назад (сохранять промежуток до предыдущего, если он близко)", + "moveStartOneFrameForwardKeepGapPrev": "Сдвинуть начало на один кадр вперед (сохранять промежуток до предыдущего, если он близко)", + "moveEndOneFrameBackKeepGapNext": "Сдвинуть конец на один кадр назад (сохранять промежуток до следующего, если он близко)", + "moveEndOneFrameForwardKeepGapNext": "Сдвинуть конец на один кадр вперед (сохранять промежуток до следующего, если он близко)", + "moveStartXMsBack": "Сдвинуть начало на X мс назад (X задается в настройках, также в визуальной синхронизации)", + "moveStartXMsForward": "Сдвинуть начало на X мс вперед (X задается в настройках, также в визуальной синхронизации)", + "moveEndXMsBack": "Сдвинуть конец на X мс назад (X задается в настройках, также в визуальной синхронизации)", + "moveEndXMsForward": "Сдвинуть конец на X мс вперед (X задается в настройках, также в визуальной синхронизации)", + "moveSelectedLinesXMsBack": "Сдвинуть выбранные строки на X мс назад (X задается в настройках)", + "moveSelectedLinesXMsForward": "Сдвинуть выбранные строки на X мс вперед (X задается в настройках)", + "moveSelectedLinesAndForwardXMsBack": "Сдвинуть выбранные и все последующие строки на X мс назад (X задается в настройках)", + "moveSelectedLinesAndForwardXMsForward": "Сдвинуть выбранные и все последующие строки на X мс вперед (X задается в настройках)", + "moveAllLinesXMsBack": "Сдвинуть все строки на X мс назад (X задается в настройках)", + "moveAllLinesXMsForward": "Сдвинуть все строки на X мс вперед (X задается в настройках)", + "moveSelectedLinesCustomMsBack": "Сдвинуть выбранные строки на заданное число миллисекунд ({0:#,###,##0}) назад, {1}", + "moveSelectedLinesCustomMsForward": "Сдвинуть выбранные строки на заданное число миллисекунд ({0:#,###,##0}) вперед, {1}", + "moveSelectedLinesAndForwardCustomMsBack": "Сдвинуть выбранные и все последующие строки на заданное число миллисекунд ({0:#,###,##0}) назад, {1}", + "moveSelectedLinesAndForwardCustomMsForward": "Сдвинуть выбранные и все последующие строки на заданное число миллисекунд ({0:#,###,##0}) вперед, {1}", + "moveAllLinesCustomMsBack": "Сдвинуть все строки на заданное число миллисекунд ({0:#,###,##0}) назад, {1}", + "moveAllLinesCustomMsForward": "Сдвинуть все строки на заданное число миллисекунд ({0:#,###,##0}) вперед, {1}" }, "wordLists": { "title": "Списки слов", @@ -3356,19 +4045,19 @@ "nameAndIgnoreList": "Список имен/игнорируемых", "userWords": "Список слов пользователя", "ocrFixList": "Список исправлений OCR", - "unableToAddItem": "Не удаётся добавить товар, вероятно, он уже существует!", - "unableToRemoveItem": "Не удалось удалить товар!" + "unableToAddItem": "Не удалось добавить элемент — вероятно, он уже есть!", + "unableToRemoveItem": "Не удалось удалить элемент!" }, "chooseLanguage": { - "title": "Язык пользовательского интерфейса" + "title": "Язык интерфейса" } }, "plugins": { - "title": "Плагины", + "title": "_Плагины", "managePlugins": "Управление плагинами...", "noPluginsInstalled": "Плагины не установлены", - "getPluginsOnline": "Скачать плагины онлайн...", - "getPluginsTitle": "Загрузка плагинов", + "getPluginsOnline": "Получить плагины онлайн...", + "getPluginsTitle": "Получить плагины", "disabled": "Отключено", "notSupportedOnThisOs": "В данной операционной системе не поддерживается", "removePluginXConfirm": "Удалить плагин '{0}'? Это удалит папку плагина:{1}", @@ -3377,10 +4066,10 @@ "pluginXFailed": "Плагин '{0}' не сработал.", "pluginXReportedError": "Плагин '{0}' сообщил об ошибке.", "pluginXDone": "{0} готово", - "pluginXReturnedUnparsableSubtitle": "Плагин '{0}' вернул подзаголовок, который не удалось обработать.", + "pluginXReturnedUnparsableSubtitle": "Плагин '{0}' вернул субтитры, которые не удалось разобрать.", "loadingPluginList": "Загрузка списка плагинов...", - "noPluginsAvailable": "Плагины отсутствуют.", - "xPluginsAvailable": "Доступно {0} плагинов.", + "noPluginsAvailable": "Нет доступных плагинов.", + "xPluginsAvailable": "Доступно плагинов: {0}.", "couldNotLoadPluginList": "Не удалось загрузить список плагинов: {0}", "downloadingXPercent": "Загрузка {0}%...", "pluginXInstalled": "'{0}' установлен.", @@ -3393,178 +4082,210 @@ "applyToSelectedLinesX": "Выбранные строки ({0})", "applyToAllLinesX": "Все строки ({0})", "updateAllXAvailable": "Обновить все ({0})", - "updatingXOfY": "Обновление {0}/{1}..." + "updatingXOfY": "Обновление {0}/{1}...", + "doNotAskAgain": "Больше не спрашивать (можно изменить в \"Управление плагинами\")", + "applyPluginsTo": "Применять плагины к", + "askEachTime": "Спрашивать каждый раз", + "allLines": "Все строки", + "runPlugin": "Запустить плагин", + "plugin": "Плагин", + "configurePlugin": "Настроить...", + "noBatchPluginsInstalled": "Ни один из установленных плагинов не поддерживает пакетное преобразование.", + "batchPluginInfo": "Плагин запускается для каждого файла без показа своего окна, с сохраненными настройками.", + "pluginXNotAvailable": "Плагин '{0}' не установлен, отключен или не поддерживает пакетное преобразование." }, "help": { "aboutSubtitleEdit": "О Subtitle Edit", - "checkForUpdates": "Проверка наличия обновлений", - "checkForUpdatesChecking": "Проверяет наличие обновлений...", + "checkForUpdates": "Проверить обновления", + "checkForUpdatesChecking": "Проверка обновлений...", "checkForUpdatesUpToDate": "Вы используете последнюю версию.", "checkForUpdatesNewVersionAvailable": "Доступна новая версия: {0}", "checkForUpdatesUnableToCheck": "Не удалось проверить наличие обновлений.", - "checkForUpdatesDownloadNewVersion": "Скачать новую версию" + "checkForUpdatesDownloadNewVersion": "Скачать новую версию", + "checkForUpdatesInstallAndRestart": "Установить и перезапустить", + "checkForUpdatesInstallFailed": "Не удалось выполнить автоматическое обновление — воспользуйтесь кнопкой «Скачать новую версию».", + "checkForUpdatesInstallsWhenClosed": "Обновление будет установлено при закрытии Subtitle Edit." }, "ocr": { - "linesToDraw": "Линии для проведения", + "linesToDraw": "Линии для рисования", "currentImage": "Текущее изображение", - "autoDrawAgain": "Автоматическая отрисовка снова", - "startOcr": "Запуск OCR", - "pauseOcr": "Пауза OCR", + "autoDrawAgain": "Нарисовать автоматически снова", + "startOcr": "_Запустить OCR", + "pauseOcr": "_Приостановить OCR", "inspectLine": "Проверка строки...", - "ocrEngine": "Движок оптического распознавания символов", + "ocrEngine": "Движок OCR", "tesseractEngineMode": "Режим движка", "tesseractEngineModeLegacy": "Только оригинальный Tesseract (может распознавать курсив)", - "tesseractEngineModeNeural": "Нейронные сети только с LSTM", + "tesseractEngineModeNeural": "Только нейросеть LSTM", "tesseractEngineModeBoth": "Тессеракт + LSTM", - "tesseractEngineModeDefault": "По умолчанию, исходя из доступных параметров", + "tesseractEngineModeDefault": "По умолчанию (в зависимости от доступного)", "database": "База данных", "maxWrongPixels": "Максимальное количество ошибочных пикселей", "maxErrorPct": "Максимальная ошибка %", - "numberOfPixelsIsSpace": "Количество пикселей — это пространство", + "numberOfPixelsIsSpace": "Пикселей для пробела", "inspectImageMatches": "Проверка соответствия изображений", - "resolutionXYAndTopmarginZ": "Разрешение {0}x{1}, верхнее поле {2}", - "runningOcrDotDotDotXY": "Выполняется распознавание текста... {0}/{1}", - "runningOcrDotDotDot": "Запуск OCR...", + "resolutionXYAndTopmarginZ": "Разрешение {0}x{1}, отступ сверху {2}", + "runningOcrDotDotDot": "Выполняется OCR...", "autoSubmitFirstCharacter": "Автоматическая отправка первого символа", "editNOcrDatabase": "Редактировать базу данных nOCR", "zoomFactorX": "Коэффициент масштабирования: {0}x", - "expandInfoX": "Количество развёрнутых элементов: {0}", - "editNOcrDatabaseXWithYItems": "Редактировать базу данных nOCR {0} с помощью элементов {1:#,###,##0}", + "expandInfoX": "Расширение: {0}", + "editNOcrDatabaseXWithYItems": "Редактировать базу nOCR {0} ({1:#,###,##0} элементов)", "newNOcrDatabase": "Новая база данных nOCR", - "newBinaryImageCompareDatabase": "Новая база данных для сравнения бинарных изображений", + "newBinaryImageCompareDatabase": "Новая база Binary Image Compare", "renameNOcrDatabase": "Переименовать базу данных nOCR", - "renameBinaryImageCompareDatabase": "Переименовать двоичный образ. Сравнить базу данных", + "renameBinaryImageCompareDatabase": "Переименовать базу Binary Image Compare", "nOcrDatabase": "база данных nOCR", "drawMode": "Режим рисования:", "addNewCharcter": "Добавить новый символ", - "lineIndexX": "Строка {0}", + "addNOcrCharacterTitle": "Добавить символ nOCR для строки {0}, символ {1} из {2}, база данных \"{3}\"", + "addBinaryOcrCharacterTitle": "Добавить символ Binary OCR для строки {0}, символ {1} из {2}, база данных \"{3}\"", "inspectNOcrAdditions": "Проверить новые добавления nOCR", - "ocrSelectedLines": "OCR выбранные строки", + "ocrSelectedLines": "OCR выбранных строк", "fillSelectedLinesWithClipboard": "Заполнить выделенные строки текстом из буфера обмена", "showImage": "Показать изображение", - "fixOcrErrors": "Исправление ошибок распознавания текста (OCR)", - "promptForUknownWords": "Запрос на ввод неизвестных слов", + "promptForUknownWords": "Спрашивать о неизвестных словах", "tryToGuessUnknownWords": "Попробовать угадать незнакомые слова", - "autoBreakIfMoreThanXLines": "Автоматический перенос строки, если строк больше {0}", + "autoBreakIfMoreThanXLines": "Автоперенос, если строк больше {0}", "unknownWords": "Неизвестные слова", "allFixes": "Все исправления", - "guessesUsed": "Использованы предположения", + "guessesUsed": "Использованные догадки", "ocr": "ОКР", "ocrX": "OCR - {0}", "addBetterMatch": "Добавить более подходящий вариант", "nOcrInspectImageMatches": "nOCR — Проверка совпадений изображений", - "addToOcrPair": "Добавить в OCR пары для замены", - "addNameToOcrReplaceList": "Добавить имя в список для замены при распознавании текста", - "wordToAdd": "Добавить слово", + "addToOcrPair": "Добавить в пары замен OCR", + "addNameToOcrReplaceList": "Добавить имя в список замен OCR", + "wordToAdd": "Слово для добавления", "nameToAdd": "Имя для добавления", "changeWordFromTo": "Изменить слово с/на", - "clearBackground": "Чистый фон", - "clearForeground": "Чистый передний план", - "nOcrDrawHelp": "Советы по рисованию\n─────────────────────\n• Удерживайте клавишу Ctrl, чтобы продолжить строку.\n• Ctrl z=отменить, Ctrl y=повторить", - "editWholeText": "Отредактировать весь текст", + "clearBackground": "Очистить фон", + "clearForeground": "Очистить передний план", + "nOcrDrawHelp": "Советы по рисованию\n────────────────────\n• Удерживайте Ctrl, чтобы продолжить линию\n• Ctrl+Z — отменить, Ctrl+Y — повторить", "editWordOnly": "Редактировать только слово", "imagePreProcessing": "Предварительная обработка изображений", "preProcessingTitle": "Предварительная обработка", - "cropTransparent": "Обрезка прозрачных цветов", - "inverseColors": "Инвертированные цвета", + "cropTransparent": "Обрезать прозрачные области", + "inverseColors": "Инвертировать цвета", "removeBorders": "Удалить границы", "binarize": "Бинаризация", "borderSize": "Размер границы", "captureTopAlign": "Автоматическое определение выравнивания ASSA", - "showOnlyForcedSubtitles": "Показать только принудительные субтитлы", - "ocrImage": "Изображение OCR", + "showOnlyForcedSubtitles": "Показывать только принудительные субтитры", + "ocrImage": "Изображение для OCR", "oneColor": "Один цвет (белый)", "darknessThreshold": "Порог темноты", - "editExportDotDotDot": "Редактировать/экспорт...", + "editExportDotDotDot": "_Редактировать/экспорт...", "editBinaryOcrDatabase": "Редактировать базу данных \"Сравнение бинарных изображений\"", "binaryImageCompareDatabase": "База данных \"Сравнение бинарных изображений\"", "removeXFromUnknownWordsList": "Удалить \"{0}\" из списка неизвестных слов", - "downloadingPaddleOcrEngineDotDotDot": "Загрузка движка распознавания текста Paddle OCR...", - "downloadingPaddleOcrModelsDotDotDot": "Загрузка моделей OCR от Paddle...", + "downloadingPaddleOcrEngineDotDotDot": "Загрузка движка Paddle OCR...", + "downloadingPaddleOcrModelsDotDotDot": "Загрузка моделей Paddle OCR...", "paddleOcr": "Paddle OCR", "binaryImageCompareInspectImageMatches": "\"Сравнение бинарных изображений\" — проверка совпадений изображений", "saveBlankTextTitle": "Сохранить пустой текст?", "saveBlankTextPrompt": "Сохранить пустой текст для изображения?", + "drawnLinesDoNotMatchTitle": "Линии не соответствуют изображению", + "drawnLinesDoNotMatchPrompt": "Некоторые нарисованные линии не соответствуют изображению (зеленые линии должны лежать на символе, красные - вне его), поэтому этот символ не будет распознан.\n\nВсе равно сохранить?", "yesAndNeverAskAgain": "Да, и больше никогда не спрашивать", "importTextFromSubtitleDotDotDot": "Импорт текста из субтитров...", - "importTextFromSubtitleOverwritePrompt": "В некоторых строках уже есть текст, распознанный с помощью OCR. Можно ли перезаписать существующий текст?", + "importTextFromSubtitleOverwritePrompt": "В некоторых строках уже есть текст OCR. Перезаписать существующий текст?", "importTextFromSubtitleNoMatchesFound": "В файле субтитров не найдено совпадающих строк.", - "importTextFromSubtitleXLinesImported": "Импортированный текст для {0} строк.", + "importTextFromSubtitleXLinesImported": "Текст импортирован для строк: {0}.", "exportTextAsSubtitleDotDotDot": "Экспорт текста в виде субтитров...", - "exportTextAsSubtitleNoText": "Нет текста, обработанного с помощью OCR, для экспорта. Сначала выполните распознавание текста с помощью OCR или импортируйте текст.", - "saveAllImagesWithHtmlIndexDotDotDot": "Сохраните все изображения с помощью HTML index...", + "exportTextAsSubtitleNoText": "Нет текста OCR для экспорта. Сначала выполните OCR или импортируйте текст.", + "saveAllImagesWithHtmlIndexDotDotDot": "Сохранить все изображения с HTML-индексом...", "saveAllImagesWithHtmlIndexPickFolder": "Выберите папку для изображений и HTML-индекса", - "saveAllImagesWithHtmlIndexSaved": "{0} изображений, сохраненных с HTML-индексом", + "saveAllImagesWithHtmlIndexSaved": "Сохранено изображений с HTML-индексом: {0}", "savingImagesDotDotDot": "Сохранение изображений...", - "htmlExportTitle": "изображения субтитров", - "htmlExportXImagesYWithoutText": "{0} изображений - {1} без текста", - "htmlExportSearch": "Поисковый текст", + "htmlExportTitle": "Изображения субтитров", + "htmlExportXImagesYWithoutText": "Изображений: {0}, без текста: {1}", + "htmlExportSearch": "Поиск по тексту", "htmlExportOnlyWithoutText": "Только строки без текста", "htmlExportNoText": "(без текста)", "htmlExportNoMatches": "Ни одна строка не соответствует фильтру", - "htmlExportImageBackground": "Фоновое изображение", + "htmlExportImageBackground": "Фон изображений", "htmlExportCheckerboard": "Шахматная доска", - "htmlExportTheme": "Тема", "htmlExportGeneratedBySubtitleEdit": "Создано программой Subtitle Edit", "vobSubColors": "Цвета VobSub/DVD...", "vobSubColorsTitle": "Цвета VobSub/DVD", "vobSubColorsHeader": "Настроить четыре цвета VobSub", - "vobSubColorsDescription": "В субтитрах VobSub/DVD используются четыре индексированных цвета: фон, узор, акцент 1 и акцент 2. Выбрать каждый цвет ниже, чтобы переопределить встроенную палитру — это полезно, когда исходные цвета дают плохой контраст при распознавании текста.", - "vobSubColorPattern": "Шаблон", + "vobSubColorsDescription": "В субтитрах VobSub/DVD используются четыре индексированных цвета: фон, основной (pattern), акцент 1 и акцент 2. Выберите каждый цвет ниже, чтобы заменить встроенную палитру — это полезно, когда исходные цвета дают плохой контраст для OCR.", + "vobSubColorPattern": "Основной (pattern)", "vobSubColorEmphasis1": "Акцент 1", "vobSubColorEmphasis2": "Акцент 2", - "vobSubColorsInvert": "Инвертировать фон / выделение 1", - "vobSubIsolateColors": "Изолировать цвета VobSub для распознавания текста", + "vobSubColorsInvert": "Поменять местами фон / акцент 1", + "vobSubIsolateColors": "Выделять цвета VobSub для OCR", "vobSubIsolateColorsHint": "Перед распознаванием текста (OCR) каждое изображение VobSub перестраивается в четкое черно-белое изображение, сохраняя наиболее часто встречающийся цвет (текст) и удаляя цвета контура/сглаживания. Это улучшает распознавание на дисках, где серые контуры сливают символы.", - "llamaCppOcrSettingsTitle": "Настройки OCR в файле llama.cpp", + "llamaCppOcrSettingsTitle": "Настройки OCR llama.cpp", "selectTesseractDictionary": "Выберите словарь Tesseract:", - "inspectBinaryOcrAdditionsTitle": "Проверка двоичных OCR-добавок", + "inspectBinaryOcrAdditionsTitle": "Проверка новых записей Binary OCR", "llamaCppOcr": "llama.cpp OCR", "llamaCppOcrDescription": "Для распознавания текста используется локальный сервер llama.cpp (мультимодальная модель).", - "llamaCppOcrPromptHint": "Используй {language} для вставки выбранного языка OCR.", - "llamaCppOcrPromptEmpty": "Подсказка не может быть пустой.", - "llamaCppOcrPromptMissingLanguagePlaceholder": "В подсказке должен содержаться заполнитель {language}.", + "llamaCppOcrPromptHint": "Используйте {language}, чтобы вставить выбранный язык OCR.", + "llamaCppOcrPromptEmpty": "Промпт не может быть пустым.", + "llamaCppOcrPromptMissingLanguagePlaceholder": "Промпт должен содержать заполнитель {language}.", "llamaCppOcrTimeoutMinutes": "Время ожидания запроса (в минутах)", - "nOcrBinaryOcrFallbackDatabase": "резервная база данных BinaryOCR", + "nOcrBinaryOcrFallbackDatabase": "Резервная база BinaryOCR", "nOcrBinaryOcrFallbackNone": "(нет)", - "binaryOcrNOcrFallbackDatabase": "резервная база данных nOCR", - "pickFallbackDatabase": "Выбрать резервную OCR базу данных", - "fallbackOcrDatabase": "Резервная OCR база данных", - "showAllOllamaModels": "Показать все модели (а не только визуальные)", - "ollamaModelLikelyWrong": "Ollama returned без текста - выбранная модель может не поддерживать OCR / vision", - "llamaCppNotDownloaded": "Файл llama.cpp engine/model не загружен — загрузка через настройки пакетного преобразования", - "llamaCppReturnedNoText": "Файл llama.cpp не вернул текст — проверьте сервер и модель", - "llamaCppDownloadEngineAndModelPrompt": "Для работы llama.cpp требуется загрузить движок llama-server и выбранную модель OCR. Скачать сейчас?", - "llamaCppDownloadEnginePrompt": "Для загрузки файла llama.cpp необходимо установить движок llama-server. Скачать сейчас?", - "llamaCppDownloadModelPrompt": "Для запуска llama.cpp необходимо загрузить выбранную модель OCR. Скачать сейчас?", - "crispEmbedNotDownloaded": "Модель/движок CrispEmbed не загружены — загрузка через настройки пакетного преобразования", + "binaryOcrNOcrFallbackDatabase": "Резервная база nOCR", + "pickFallbackDatabase": "Выбрать резервную базу OCR", + "fallbackOcrDatabase": "Резервная база OCR", + "showAllOllamaModels": "Показать все модели (не только с поддержкой изображений)", + "ollamaModelLikelyWrong": "Ollama не вернула текст — возможно, выбранная модель не поддерживает OCR/изображения", + "llamaCppNotDownloaded": "Движок/модель llama.cpp не скачаны — скачайте через настройки пакетного преобразования", + "llamaCppReturnedNoText": "llama.cpp не вернул текст — проверьте сервер и модель", + "llamaCppDownloadEngineAndModelPrompt": "Для llama.cpp нужно скачать движок llama-server и выбранную модель OCR. Скачать сейчас?", + "llamaCppDownloadModelPrompt": "Для llama.cpp нужно скачать выбранную модель OCR. Скачать сейчас?", + "crispEmbedNotDownloaded": "Движок/модель CrispEmbed не скачаны — скачайте через настройки пакетного преобразования", "crispEmbedReturnedNoText": "CrispEmbed не вернул текст — проверьте модель", - "appleVisionReturnedNoText": "Приложение Apple Vision не вернуло текст — проверьте язык", + "appleVisionReturnedNoText": "Apple Vision не вернул текст — проверьте язык", "crispEmbedSettingsTitle": "Настройки CrispEmbed", - "crispEmbedDescription": "Локальный механизм распознавания текста с поддержкой нескольких моделей — скачать механизм и модели можно здесь.", - "trainNOcrDatabase": "Обучение базы данных nOCR...", + "crispEmbedDescription": "Локальный движок OCR с несколькими моделями — скачайте движок и модели здесь.", + "trainNOcrDatabase": "Обучить базу nOCR...", + "optimizeNOcrDatabase": "Оптимизировать базу данных nOCR...", + "optimizeNOcrDatabaseQuestionXY": "Удалить из базы данных nOCR \"{0}\" линии, которые не помогают отличать символы от похожих?\n\nЭто уменьшает базу данных и ускоряет OCR, обычно с меньшим числом ошибок. Занимает до минуты.\n\nРезервная копия сохраняется как \"{1}\".", + "optimizingNOcrDatabaseXY": "Оптимизация базы данных nOCR... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "База данных nOCR \"{0}\" оптимизирована: {1:#,##0} -> {2:#,##0} линий.", "startTraining": "Начать обучение", - "abortTraining": "Прерывание тренировки", - "trainingOptions": "Варианты обучения", - "charactersToTrain": "Персонажи для обучения", - "letterCombinationsToTrain": "Буквенные сочетания, которые можно разделить на одно изображение", + "abortTraining": "Прервать обучение", + "trainingOptions": "Параметры обучения", + "trainNOcrSubtitle": "Отрисовывает символы установленными шрифтами и обучает nOCR их формам. Выберите шрифты, используемые в ваших субтитрах.", + "xFontsSelected": "Выбрано: {0:#,##0}", + "subtitleFonts": "Шрифты субтитров", + "emptyDatabase": "Пустая база данных", + "startFromDatabase": "Начать с", + "startFromDatabaseHint": "Добавить обученные символы в копию существующей базы данных (рекомендуется) или начать с пустой", + "fontSizes": "Размеры шрифта", + "fontSizesHint": "Размеры шрифта в пикселях для отрисовки, через запятую, например \"30, 40\"", + "numberOfLineSegmentsHint": "Число проверяемых линий на символ - больше значит строже, но медленнее", + "enterDatabaseName": "Введите имя базы данных", + "trainingFontXSizeYCharacterZ": "Обучение \"{0}\" при {1} px: {2}", + "xLearned": "Изучено: {0:#,##0}", + "xSkipped": "Пропущено: {0:#,##0}", + "charactersToTrain": "Символы для обучения", + "letterCombinationsToTrain": "Сочетания букв, которые могут слиться в одно изображение", "importCharactersFromSubtitleFile": "Импорт символов из файла субтитров...", "numberOfLineSegments": "Количество отрезков", - "alsoTrainBold": "Также поезд смелый", - "alsoTrainItalic": "Также курсив для поезда", - "trainingXLearnedYSkipped": "Обучение \"{0}\" - изучены символы {1:#,##0}, {2:#,##0} пропущено", - "trainingDoneXLearned": "Обучение завершено - изучены символы {0:#,##0}", - "selectAtLeastOneFont": "Пожалуйста, выберите хотя бы один шрифт" + "alsoTrainBold": "Обучать также полужирный", + "alsoTrainItalic": "Обучать также курсив", + "trainingXLearnedYSkipped": "Обучение \"{0}\" - изучено символов: {1:#,##0}, пропущено: {2:#,##0}", + "trainingDoneXLearned": "Обучение завершено - изучено символов: {0:#,##0}", + "selectAtLeastOneFont": "Пожалуйста, выберите хотя бы один шрифт", + "nOcrZoomIn": "Увеличить масштаб", + "nOcrZoomOut": "Уменьшить масштаб", + "nOcrLineAlgorithm": "Алгоритм", + "nOcrLineAlgorithmHint": "Алгоритм, которым автоматическое рисование строит линии переднего и заднего плана" }, "assa": { - "assaDraw": "Розыгрыш ASSA", + "assaDraw": "Рисование ASSA", "drawSelectTool": "Выбрать (переместить точки)", - "drawUseShapeForErase": "Используйте фигуру для удаления (клипа)", + "drawUseShapeForErase": "Использовать фигуру для стирания (iclip)", "drawLineTool": "Инструмент \"Линия\" (F4)", "drawBezierTool": "Кривая Безье (F5)", "drawRectangleTool": "Прямоугольник (F6)", "drawCircleTool": "Круг (F7)", - "drawCloseShape": "Форма закрытия (F8/Enter)", + "drawCloseShape": "Замкнуть фигуру (F8/Enter)", "drawDeleteShape": "Удалить фигуру (Del)", "drawChangeLayer": "Изменить слой", "drawClearAll": "Очистить все (Ctrl+N)", @@ -3572,73 +4293,298 @@ "drawZoomOut": "Уменьшить масштаб (Ctrl+-)", "drawResetView": "Сбросить вид (Ctrl+0)", "drawToggleGrid": "Переключить сетку (Ctrl+G)", + "drawTogglePreview": "Переключить предпросмотр (F9)", + "drawPreviewFailed": "Ошибка предпросмотра - требуется ffmpeg с libass (фильтр subtitles)", "drawCopyToClipboard": "Скопировать в буфер обмена (Ctrl+C)", - "drawShapes": "Формы", + "drawShapes": "Фигуры", "drawSelectedPoint": "Выбранная точка", - "drawSelectedShape": "Выбранная форма", + "drawSelectedShape": "Выбранная фигура", "drawSelectedLayer": "Выбранный слой", "drawToolX": "Инструмент: {0}", - "drawHelpText": "Нажмите, чтобы добавить точки • Нажмите Enter/F8, чтобы закрыть фигуру • Нажмите Shift+перетаскивание для панорамирования • Нажмите Ctrl+прокрутка для масштабирования", - "progressBarTitle": "индикатор выполнения ASSA", - "progressBarSettings": "Индикатор выполнения", + "drawHelpText": "Щелчок — добавить точку • Enter/F8 — замкнуть фигуру • Shift+перетаскивание — панорама • Ctrl+прокрутка — масштаб", + "drawMoveToLayer": "Переместить на слой", + "drawFlipHorizontal": "Отразить по горизонтали", + "drawFlipVertical": "Отразить по вертикали", + "drawHideShape": "Скрыть фигуру", + "drawShowShape": "Показать фигуру", + "drawHideLayer": "Скрыть слой", + "drawShowLayer": "Показать слой", + "drawDeleteLayer": "Удалить слой", + "drawDeletePoint": "Удалить точку", + "drawCancelDrawing": "Отменить рисование", + "drawLayerX": "Слой {0}", + "drawImportSvg": "Импортировать изображение SVG...", + "drawRotateClockwise": "Повернуть на 90° по часовой стрелке", + "drawConvertToCurve": "Преобразовать сегмент в кривую", + "drawZoom": "Масштаб", + "drawShapeTool": "Инструмент \"Фигура\"", + "drawColorPickerTool": "Взять цвет с фигуры или фона", + "drawShapeLibrary": "Библиотека фигур", + "drawShapeLibraryHint": "Перетащите по холсту, чтобы разместить фигуру, или щелкните для размера по умолчанию. Shift сохраняет пропорции.", + "drawAddToLibrary": "Добавить в библиотеку фигур...", + "drawRemoveFromLibrary": "Удалить из библиотеки фигур", + "drawShapeName": "Имя фигуры", + "drawCategorySpeechBubbles": "Речевые облачка", + "drawCategoryArrows": "Стрелки", + "drawCategoryBasicShapes": "Основные фигуры", + "drawCategorySymbols": "Символы", + "drawCategoryClipArt": "Клипарт", + "drawClipArtRedHeart": "Красное сердце", + "drawClipArtAngerMark": "Знак гнева", + "drawClipArtSweatDrop": "Капля пота", + "drawClipArtSparkles": "Блестки", + "drawClipArtBlush": "Румянец", + "drawClipArtSurpriseLines": "Линии удивления", + "drawClipArtBamBurst": "Взрыв «Бам!»", + "drawClipArtZzz": "Ззз", + "drawClipArtSun": "Солнце", + "drawClipArtFlame": "Пламя", + "drawClipArtLightBulb": "Лампочка", + "drawClipArtLightningBolt": "Молния", + "drawClipArtColoredMusicNotes": "Цветные музыкальные ноты", + "drawClipArtPhone": "Телефон", + "drawClipArtQuestionMark": "Знак вопроса", + "drawClipArtExclamationMark": "Восклицательный знак", + "drawClipArtGreenCheck": "Зелёная галочка", + "drawClipArtRedCross": "Красный крестик", + "drawClipArtThumbsUp": "Большой палец вверх", + "drawClipArtGoldStar": "Золотая звезда", + "drawClipArtBrokenHeart": "Разбитое сердце", + "drawClipArtGhost": "Призрак", + "drawClipArtSkull": "Череп", + "drawClipArtSnowflake": "Снежинка", + "drawClipArtMoonAndStars": "Луна и звёзды", + "drawClipArtRainCloud": "Дождевое облако", + "drawClipArtBomb": "Бомба", + "drawClipArtGift": "Подарок", + "drawClipArtCrown": "Корона", + "drawClipArtClock": "Часы", + "drawClipArtClapperboard": "Хлопушка", + "drawClipArtMicrophone": "Микрофон", + "drawClipArtWarningSign": "Предупреждающий знак", + "drawClipArtNoEntry": "Вход запрещен", + "drawClipArtPopcorn": "Попкорн", + "drawClipArtCoffeeCup": "Чашка кофе", + "drawClipArtRainbow": "Радуга", + "drawClipArtTrophy": "Трофей", + "drawClipArtRocket": "Ракета", + "drawClipArtBalloon": "Воздушный шар", + "drawClipArtCamera": "Камера", + "drawClipArtPartyPopper": "Праздничная хлопушка", + "drawClipArtPizzaSlice": "Кусочек пиццы", + "drawClipArtIceCream": "Мороженое", + "drawClipArtUmbrella": "Зонтик", + "drawClipArtCatFace": "Кошачья мордочка", + "drawClipArtKey": "Ключ", + "drawClipArtChristmasTree": "Рождественская елка", + "drawClipArtYouTube": "YouTube", + "drawClipArtInstagram": "Instagram", + "drawClipArtLinkedIn": "LinkedIn", + "drawClipArtFacebook": "Facebook", + "drawClipArtX": "X", + "drawClipArtTikTok": "TikTok", + "drawClipArtClosedCaptions": "Субтитры", + "drawClipArtSpeakerLabel": "Говорящий", + "drawClipArtTranslation": "Перевод", + "drawClipArtSignLanguage": "Язык жестов", + "drawClipArtAi": "ИИ", + "drawClipArtHeadphones": "Наушники", + "drawClipArtYummy": "Вкуснятина", + "drawClipArtDrooling": "Слюнки текут", + "drawClipArtDisgusted": "Отвращение", + "drawClipArtTooSpicy": "Слишком остро", + "drawClipArtChefsKiss": "Поцелуй шеф-повара", + "drawClipArtLoveIt": "Обожаю", + "drawClipArtStarRating": "{0} из 5 звезд", + "drawAnimation": "Анимация", + "drawAnimationIn": "Появление", + "drawAnimationOut": "Исчезновение", + "drawAnimationFade": "Затухание", + "drawAnimationPop": "Выскакивание", + "drawAnimationZoom": "Масштаб", + "drawAnimationSpin": "Вращение", + "drawAnimationFromLeft": "Слева", + "drawAnimationFromRight": "Справа", + "drawAnimationFromTop": "Сверху", + "drawAnimationFromBottom": "Снизу", + "drawAnimationToLeft": "Влево", + "drawAnimationToRight": "Вправо", + "drawAnimationToTop": "Вверх", + "drawAnimationToBottom": "Вниз", + "drawAnimationPlay": "Воспроизвести анимацию", + "drawAnimationStop": "Остановить анимацию", + "drawAnimationLayerHint": "Применяется ко всему слою (одной строке субтитров); группа движется как единое целое.", + "drawAnimationLoop": "Цикл", + "drawAnimationPulse": "Пульс", + "drawAnimationBlink": "Мигание", + "drawAnimationBounce": "Подпрыгивание", + "drawAnimationShake": "Тряска", + "drawAnimationSwing": "Покачивание", + "drawAnimationFlip": "Переворот", + "drawAnimationLoopBlocked": "Этот цикл вращается вокруг другой точки, чем эффект появления/исчезновения, поэтому он не применяется.", + "drawClipArtLoadingSpinner": "Индикатор загрузки", + "drawClipArtRec": "REC", + "drawClipArtRingingPhone": "Звонящий телефон", + "drawClipArtBeatingHeart": "Бьющееся сердце", + "drawClipArtBouncingArrow": "Прыгающая стрелка", + "drawClipArtRingingBell": "Звенящий колокольчик", + "drawClipArtPointingHand": "Указывающая рука", + "drawClipArtWiFi": "Wi-Fi", + "drawClipArtTwinklingStar": "Мерцающая звезда", + "drawClipArtAlarmClock": "Будильник", + "drawClipArtHourglass": "Песочные часы", + "drawClipArtIdea": "Идея", + "drawCategoryMyShapes": "Мои фигуры", + "drawShapeSpeechBubble": "Речевое облачко", + "drawShapeSpeechBubbleRight": "Речевое облачко, хвост вправо", + "drawShapeSpeechBubbleUp": "Речевое облачко, хвост вверх", + "drawShapeOvalBubble": "Овальное речевое облачко", + "drawShapeBoxBubble": "Прямоугольное речевое облачко", + "drawShapeThoughtBubble": "Облачко мыслей", + "drawShapeShoutBubble": "Облачко крика", + "drawShapeCaptionBox": "Плашка с подписью", + "drawShapeSpeechBubbleSide": "Речевое облачко, хвост влево", + "drawShapeRoundBubble": "Круглое облачко", + "drawShapePillBubble": "Облачко-капсула", + "drawShapeScreamBubble": "Облачко вопля", + "drawShapeArrow": "Стрелка", + "drawShapeDoubleArrow": "Двойная стрелка", + "drawShapeChevron": "Шеврон", + "drawShapeCurvedArrow": "Изогнутая стрелка", + "drawShapeRepeatArrow": "Стрелка повтора", + "drawShapeUTurnArrow": "Стрелка разворота", + "drawShapeRoundedRectangle": "Скругленный прямоугольник", + "drawShapeTriangle": "Треугольник", + "drawShapeDiamond": "Ромб", + "drawShapePentagon": "Пятиугольник", + "drawShapeHexagon": "Шестиугольник", + "drawShapeOctagon": "Восьмиугольник", + "drawShapeStar": "Звезда", + "drawShapeRing": "Кольцо", + "drawShapePlus": "Плюс", + "drawShapeBanner": "Баннер", + "drawShapeHalfCircle": "Полукруг", + "drawShapeTeardrop": "Капля", + "drawShapeHeart": "Сердце", + "drawShapeCheck": "Галочка", + "drawShapeMusicNote": "Нота", + "drawShapeMusicNotes": "Ноты", + "drawShapeLightning": "Молния", + "drawShapeCloud": "Облако", + "drawShapeMoon": "Луна", + "drawShapeBadge": "Значок", + "drawShapeSpeaker": "Динамик", + "drawShapeCross": "Крест", + "drawShapeSmiley": "Смайлик", + "drawShapeSadSmiley": "Грустный смайлик", + "drawBackgroundVideoFrame": "Кадр видео (текущая позиция)", + "drawBackgroundVideoFrameAt": "Кадр видео в позиции...", + "drawBackgroundImage": "Файл изображения...", + "drawBackgroundNone": "Без фона", + "drawBackgroundStretch": "Растянуть изображение на холст", + "drawBackgroundOpacity": "Непрозрачность фона", + "drawBackgroundVideoFrameFailed": "Не удалось получить кадр видео в позиции {0}.", + "drawConvertToLine": "Преобразовать сегмент в линию", + "drawConvertShapeToCurves": "Преобразовать все линии в кривые", + "drawConvertShapeToLines": "Преобразовать все кривые в линии", + "drawRotateCounterClockwise": "Повернуть на 90° против часовой стрелки", + "drawSvgImages": "Изображения SVG", + "drawSvgNoShapes": "В файле SVG не найдено залитых фигур или обводок.", + "drawTextTool": "Инструмент «Текст»", + "drawDefaultText": "Текст", + "drawShrinkToFit": "Уменьшить по размеру", + "drawTextBox": "Текстовое поле", + "drawDiscardChanges": "Рисунок был изменен.\nОтменить изменения?", + "drawColorPickerToolName": "Выбор цвета", + "drawOpenDrawing": "Открыть рисунок ASSA", + "drawSaveDrawing": "Сохранить рисунок ASSA", + "drawDrawingFiles": "Файлы рисунков ASSA", + "drawAssFiles": "Файлы ASS", + "drawPositionXY": "Позиция: {0}, {1}", + "drawXShapes": "Фигур: {0}", + "drawXPoints": "Точек: {0}", + "drawShapeXDraw": "Фигура {0} (рисование)", + "drawShapeXErase": "Фигура {0} (стирание)", + "drawGroup": "Группа (Ctrl+G)", + "drawUngroup": "Разгруппировать (Ctrl+Shift+G)", + "drawGroupX": "Группа {0}", + "progressBarTitle": "Индикатор прогресса ASSA", + "progressBarSettings": "Индикатор прогресса", "mouseOverColor": "Цвет при наведении мыши", - "clickedColor": "выбранный цвет", - "progressBarForeColor": "Цвет переднего плана", + "clickedColor": "Цвет при нажатии", + "progressBarForeColor": "Основной цвет", "progressBarSquareCorners": "Квадратные углы", "progressBarRoundedCorners": "Закругленные углы", - "progressBarChapters": "Главы", "progressBarSplitterWidth": "Ширина разделителя", "progressBarSplitterHeight": "Высота разделителя", - "progressBarXAdjustment": "регулировка X", - "progressBarYAdjustment": "регулировка Y", - "progressBarTextAlignment": "Выравнить текст", - "fontCollectorTitle": "коллекционер шрифтов", + "progressBarXAdjustment": "Сдвиг по X", + "progressBarYAdjustment": "Сдвиг по Y", + "progressBarTextAlignment": "Выравнивание текста", + "progressBarStyleCutCorners": "Срезанные углы", + "progressBarStyleArrow": "Стрелка", + "progressBarStyleSlanted": "Наклонный", + "progressBarStyleSegments": "Сегменты", + "progressBarStyleRoundedSegments": "Закругленные сегменты", + "progressBarStyleDots": "Точки", + "progressBarStyleDiamonds": "Ромбы", + "progressBarStyleChevrons": "Шевроны", + "progressBarStyleStripes": "Полосы", + "progressBarStyleWave": "Волна", + "progressBarStyleZigzag": "Зигзаг", + "progressBarStyleTapered": "Сужающийся", + "progressBarStyleRuler": "Линейка", + "progressBarStyleDoubleLine": "Двойная линия", + "progressBarStyleEqualizer": "Эквалайзер", + "progressBarStyleStars": "Звезды", + "progressBarPlayhead": "Указатель воспроизведения", + "progressBarEdgeMargin": "Отступ от края", + "progressBarSplitter": "Разделитель", + "fontCollectorTitle": "Сборщик шрифтов", "fontCollectorUsedIn": "Используется в", "fontCollectorFontFiles": "Файл(ы) шрифта", "fontCollectorStyleX": "Стиль: {0}", - "fontCollectorInlineLineX": "Строка {0}", - "fontCollectorFound": "Найденный", + "fontCollectorFound": "Найден", "fontCollectorNotFound": "Не найдено", - "fontCollectorEmbedded": "Встроенный", + "fontCollectorEmbedded": "Встроен", "fontCollectorScanning": "Сканирование установленных шрифтов...", - "fontCollectorXOfYFontsFound": "Найдено {0} из {1} шрифтов", + "fontCollectorXOfYFontsFound": "Найдено шрифтов: {0} из {1}", "fontCollectorCopyFontsToSeFontsFolder": "Скопировать в сборщик шрифтов", "fontCollectorImportFontDotDotDot": "Импорт шрифта...", "fontCollectorDeleteFontXPrompt": "Удалить файл шрифта \"{0}\"?", "fontCollectorCurrentSubtitle": "Текущий субтитр", - "fontCollectorOpenFontsFolder": "Откройте папку «Шрифты» в SE...", + "fontCollectorOpenFontsFolder": "Открыть папку шрифтов SE...", "attachments": "Вложения", "fontCollectorNoFontsToCopy": "Файлы шрифтов для копирования не найдены.", - "fontCollectorXFontFilesCopiedToY": "{0} файлов шрифтов скопировано в {1}", - "fontCollectorEmbedFontsDotDotDot": "Встраивание шрифтов в субтитры...", - "fontCollectorEmbedXFontsSizeYZPrompt": "Встроить {0} файлов шрифта в подзаголовок?\n\nОбщий размер шрифта: {1} - примерно {2} в виде текста в файле ASSA.\n\n{3}", - "fontCollectorAndXMoreFonts": "...и {0} ещё", + "fontCollectorXFontFilesCopiedToY": "Скопировано файлов шрифтов: {0} в {1}", + "fontCollectorEmbedFontsDotDotDot": "Встроить шрифты в субтитры...", + "fontCollectorEmbedXFontsSizeYZPrompt": "Встроить файлы шрифтов ({0}) в субтитры?\n\nОбщий размер шрифтов: {1} — около {2} в виде текста в файле ASSA.\n\n{3}", + "fontCollectorAndXMoreFonts": "...и еще {0}", "fontCollectorNoFontsToEmbed": "Нет новых шрифтов для встраивания — необходимые шрифты уже встроены или не найдены.", - "fontCollectorXFontFilesEmbedded": "{0} файлов шрифтов, встроенных в субтитры.", + "fontCollectorXFontFilesEmbedded": "Встроено файлов шрифтов в субтитры: {0}.", "fontCollectorTrimFonts": "Встраивать только используемые символы (обрезать шрифты)", "trimFontsDotDotDot": "Обрезать шрифт до используемых символов...", - "trimFontsPromptX": "Обрезать встроенный(е) шрифт(ы) {0} только до используемых в данный момент символов?\n\nТекст, добавленный в подзаголовок позже, может содержать недостающие символы, поэтому обрезку следует проводить на заключительном этапе.", - "trimFontsNoFontsToTrim": "Нет встроенных шрифтов, которые нужно было бы обрезать.", - "trimFontsXFontsTrimmedSavedYZ": "{0} шрифт(ы) обрезаны, сохранено {1}.\n\n{2}", - "trimFontsTotalSavingX": "Всего сохранено: {0}", - "trimFontsReasonNotTrueType": "Обрезать можно только шрифты TrueType", - "trimFontsReasonFontCollection": "Коллекции шрифтов не поддерживаются", - "trimFontsReasonCouldNotParse": "Шрифт не удалось прочитать", + "trimFontsPromptX": "Обрезать встроенные шрифты ({0}), оставив только используемые сейчас символы?\n\nВ тексте, добавленном в субтитры позже, могут не отображаться символы, поэтому обрезайте шрифты на последнем этапе.", + "trimFontsNoFontsToTrim": "Нет встроенных шрифтов для обрезки.", + "trimFontsXFontsTrimmedSavedYZ": "Обрезано шрифтов: {0}, сэкономлено {1}.\n\n{2}", + "trimFontsTotalSavingX": "Всего сэкономлено: {0}", + "trimFontsReasonNotTrueType": "обрезать можно только шрифты TrueType", + "trimFontsReasonFontCollection": "коллекции шрифтов не поддерживаются", + "trimFontsReasonCouldNotParse": "шрифт не удалось прочитать", "trimFontsReasonNoSavings": "без уменьшения размера", "resolutionResamplerTitle": "Изменить разрешение", "resolutionResamplerSourceRes": "Разрешение источника", "resolutionResamplerTargetRes": "Целевое разрешение", - "resolutionResamplerChangeMargins": "Изменить поля", + "resolutionResamplerChangeMargins": "Изменить отступы", "resolutionResamplerChangeFontSize": "Изменить размер шрифта", - "resolutionResamplerChangePositions": "Сменить позиции", + "resolutionResamplerChangePositions": "Изменить позиции", "resolutionResamplerChangeDrawing": "Изменить рисунок", "resolutionResamplerFromVideo": "Из видео...", - "resolutionResamplerSourceAndTargetEqual": "Разрешение исходного и целевого объектов одинаково — ничего делать не нужно.", - "resolutionResamplerNothingSelected": "Пожалуйста, Выбрать хотя бы один вариант для изменения.", + "resolutionResamplerSourceAndTargetEqual": "Исходное и целевое разрешения совпадают — делать нечего.", + "resolutionResamplerNothingSelected": "Выберите хотя бы один параметр для изменения.", "resolutionResamplerVideoDiffers": "Разрешение субтитров ({0}x{1}) отличается от разрешения видео ({2}x{3}).\nИзменить субтитры, чтобы они соответствовали видео?", - "resolutionResamplerAskOnVideoOpen": "Спросить, когда будет открыто видео с другим разрешением", - "backgroundBoxGenerator": "Создать фоновое поле", - "backgroundBoxFillWidth": "Ширина заполнения", + "resolutionResamplerAskOnVideoOpen": "Спрашивать при открытии видео с другим разрешением", + "backgroundBoxGenerator": "Создать фоновую подложку", + "backgroundBoxFillWidth": "Заполнить по ширине", "backgroundBoxRadius": "Радиус", "backgroundBoxCircle": "Круг", "backgroundBoxSpikes": "Шипы", @@ -3647,42 +4593,75 @@ "backgroundBoxHexagon": "Шестиугольник", "backgroundBoxTornPaper": "Рваная бумага", "backgroundBoxCloud": "Облако", - "backgroundBoxTornPaperDouble": "Порванная бумага (сверху и снизу)", - "backgroundBoxStarburst": "Звездный взрыв", + "backgroundBoxTornPaperDouble": "Рваная бумага (сверху и снизу)", + "backgroundBoxStarburst": "Звездная вспышка", "backgroundBoxScroll": "Свиток / Пергамент", + "backgroundBoxPill": "Капсула", + "backgroundBoxCutCorners": "Срезанные углы", + "backgroundBoxSlanted": "Наклонный", + "backgroundBoxTicket": "Билет", + "backgroundBoxSpeechBubble": "Речевое облачко", + "backgroundBoxRibbon": "Лента", + "backgroundBoxBrushStroke": "Мазок кисти", + "backgroundBoxCornerBrackets": "Угловые скобки", + "backgroundBoxUnderline": "Полоса подчеркивания", + "backgroundBoxFrame": "Рамка", + "backgroundBoxArrowTag": "Ярлык-стрелка", + "backgroundBoxSideBar": "Боковая панель", "stylesInFile": "Стили в файле", "stylesSaved": "Сохраненные стили", + "stylesSummary": "Стилей в файле: {0} · сохраненных: {1}", + "stylesTransform": "Трансформация", + "stylesEditing": "Редактирование", + "stylesPreviewSampleTextHint": "Пример текста — \\N для новой строки", + "stylesScale": "Масштаб %", + "stylesPreviewChecker": "Шахматка", "allCategories": "[Все]", "newCategory": "Новая категория...", "renameCategory": "Переименовать категорию...", "deleteCategory": "Удалить категорию", - "moveToCategoryDotDotDot": "Перейти в категорию...", + "moveToCategoryDotDotDot": "Переместить в категорию...", "deleteCategoryQuestion": "Удалить категорию \"{0}\"? Стили в ней будут перемещены в категорию по умолчанию.", "stylesTitleX": "Стили - {0}", "propertiesTitleX": "Свойства - {0}", "attachmentsTitleX": "Вложения - {0}", - "smartWrappingTopWide": "0: Умная упаковка (широкая верхняя часть)", - "endOfLineWrapping": "1: Перенос слов в конце строки, только символ\\N является переносом строки", - "noWrapping": "2: Без переноса строк, переносы символов\\N и\\n отсутствуют", - "smartWrappingBottomWide": "3: Умная упаковка (широкая нижняя часть)", + "smartWrappingTopWide": "0: Умный перенос (верхняя строка шире)", + "endOfLineWrapping": "1: Перенос слов в конце строки, разрыв только по \\N", + "noWrapping": "2: Без переноса, разрыв и по \\N, и по \\n", + "smartWrappingBottomWide": "3: Умный перенос (нижняя строка шире)", "fontsAndGraphics": "Шрифты и графика", - "wrapStyle": "стиль обертывания", + "wrapStyle": "Стиль переноса", "borderAndShadowScaling": "Масштабирование границ и теней", - "collisions": "Столкновения", - "playDepth": "Глубина игры", + "collisions": "Коллизии", + "playDepth": "Глубина цвета (PlayDepth)", "timer": "Таймер", - "originalScript": "Оригинальный сценарий", + "originalScript": "Автор оригинального скрипта", "graphics": "Графика", - "copyToStorageStyles": "Копирование в стили хранения", - "copyToFileStyles": "Скопировать в стили файла", + "copyToStorageStyles": "Копировать в сохраненные стили", + "copyToFileStyles": "Копировать в стили файла", + "styleXAlreadyExistsInStorage": "Стиль с именем \"{0}\" уже существует в сохраненных стилях.\n\nПерезаписать его или оставить оба (копия получит новое имя)?", + "styleXAlreadyExistsInFile": "Стиль с именем \"{0}\" уже существует в файле.\n\nПерезаписать его или оставить оба (копия получит новое имя)?", + "styleNameCannotBeEmpty": "Имя стиля не может быть пустым.", + "styleNameXIsUsedMoreThanOnce": "Имя стиля \"{0}\" используется в файле более чем одним стилем.", + "overwrite": "Перезаписать", + "keepBoth": "Оставить оба", + "doThisForAllConflictingStyles": "Сделать так для всех конфликтующих стилей", "setStyleAsDefault": "Установить стиль по умолчанию", - "takeUsagesFromDotDotDot": "Взять примеры использования из...", + "takeUsagesFromDotDotDot": "Перенести использование из...", "replaceStyleWithDotDotDot": "Заменить стиль на...", "noAttachmentsFound": "В выбранном файле ASSA вложения не найдены.", + "attachmentsDropHint": "Перетащите файлы шрифтов или изображений сюда, чтобы прикрепить их", + "attachmentsSummary": "Шрифтов: {0} · изображений: {1} · {2}", "deleteStyleQuestion": "Удалить стиль?", "deleteStylesQuestion": "Удалить стили?", - "openStyleImportFile": "Открытьфайл субтитров, чтобы импортировать стили из", - "primary": "Начальный", + "deleteXStylesQuestion": "Вы хотите удалить стили ({0})?", + "deleteXStylesFromStorageQuestion": "Вы хотите удалить стили ({0}) из сохраненных стилей?", + "deleteStyleXFromStorageQuestion": "Вы хотите удалить стиль \"{0}\" из сохраненных стилей?", + "deleteStyleXFromFileQuestion": "Вы хотите удалить стиль \"{0}\" из текущего файла?", + "openStyleImportFile": "Открыть файл субтитров для импорта стилей", + "styleImportFiles": "Файлы стилей (.ass, .sty, категории Subtitle Edit 4 .template)", + "ssaStyleImportFiles": "Файлы стилей (.ssa, .ass, .sty)", + "primary": "Основной", "secondary": "Вторичный", "applyOverrideTags": "Применить теги переопределения", "chooseOverrideTagToAdd": "Выбрать тег переопределения для добавления", @@ -3691,33 +4670,52 @@ "colorFromWhiteToRed": "Цвет от белого до красного", "rotateXSlow": "Повернуть по оси X (медленно)", "rotateX": "Повернуть по оси X", - "rotateY": "Повернуть Y", - "rotateTilt": "Поворот, наклон", - "spaceIncrease": "Увеличение пространства", - "popIn": "Заглянуть", - "spinIn": "Вращение", + "rotateY": "Повернуть по оси Y", + "rotateTilt": "Поворот с наклоном", + "spaceIncrease": "Увеличение интервала", + "popIn": "Выскакивание", + "spinIn": "Появление с вращением", "setPosition": "Установить позицию", "rotation": "Вращение", + "setPositionTopLeft": "Вверху слева", + "setPositionTopCenter": "Вверху по центру", + "setPositionTopRight": "Вверху справа", + "setPositionMiddleLeft": "Посередине слева", + "setPositionMiddleRight": "Посередине справа", + "setPositionBottomLeft": "Внизу слева", + "setPositionBottomCenter": "Внизу по центру", + "setPositionBottomRight": "Внизу справа", + "setPositionCustom": "Произвольно", + "setPositionReset": "Вернуть позицию строки", + "setPositionResetRotation": "Сбросить поворот", + "setPositionGuides": "Направляющие", + "setPositionSafeArea": "Безопасная зона", + "setPositionCenterLines": "Центральные линии", + "setPositionSnapToGuides": "Привязка к направляющим", + "setPositionNudgeHint": "Стрелки сдвигают на 1 пиксель, с Shift — на 10", "scaleX": "Масштаб X", "scaleY": "Масштаб Y", - "spacing": "Расстояние", + "spacing": "Интервал", "angle": "Угол", - "imageColorPicker": "палитра цветов изображения", + "imageColorPicker": "Пипетка цвета с изображения", "copyColorAsHextoClipboard": "Скопировать цвет в шестнадцатеричном формате в буфер обмена", - "generatingBackgroundBoxXOfY": "Создание фонового блока {0} из {1}...", + "imageColorPickerHint": "Щелкните по кадру, чтобы выбрать цвет", + "copyColorAsAssaToClipboard": "Скопировать цвет как ASSA (&HBBGGRR&) в буфер обмена", + "copyColorAsAssaTagToClipboard": "Скопировать цвет как тег ASSA \\c в буфер обмена", + "generatingBackgroundBoxXOfY": "Создание фоновой подложки {0} из {1}...", "applyAdvancedEffectTitle": "Применить расширенный эффект", "chooseEffect": "Выбрать эффект", "advancedEffectTypewriter": "Пишущая машинка", "advancedEffectTypewriterDescription": "Текст отображается по одному символу за раз на протяжении всего времени показа субтитров", "advancedEffectTypewriterWithHighlight": "Пишущая машинка с выделением текста", "advancedEffectTypewriterWithHighlightDescription": "Текст отображается по одному символу, при этом текущий символ подсвечивается", - "advancedEffectWordByWord": "Слово в слово", + "advancedEffectWordByWord": "Слово за словом", "advancedEffectWordByWordDescription": "Текст отображается по одному слову на протяжении всего времени показа субтитров", "advancedEffectKaraoke": "Караоке", "advancedEffectKaraokeDescription": "Подсвечивает каждый символ по порядку, отображая текст слева направо, как текст для караоке", - "advancedEffectFancyKaraoke": "Караоке - активный словесный поп", - "advancedEffectFancyKaraokeDescription": "Улучшает субтитры с предварительно отмеченным активным словом (с помощью подчеркивания или выделения цветом) — затемняет неактивные слова и применяет анимацию свечения к активному слову", - "advancedEffectScrambleReveal": "Раскрытие информации о скрежете", + "advancedEffectFancyKaraoke": "Караоке — выделение активного слова", + "advancedEffectFancyKaraokeDescription": "Улучшает субтитры с заранее отмеченным активным словом (подчеркиванием \\u1 или цветом выделения) — приглушает неактивные слова и добавляет к активному слову анимацию свечения", + "advancedEffectScrambleReveal": "Расшифровка", "advancedEffectScrambleRevealDescription": "Перемешанные символы расшифровываются в настоящий текст слева направо", "advancedEffectRainbowPulse": "Радужный пульс", "advancedEffectRainbowPulseDescription": "Каждый символ независимо друг от друга меняет цвета радуги", @@ -3725,7 +4723,7 @@ "advancedEffectWaveDescription": "Каждый символ пульсирует вверх и вниз, создавая эффект синусоиды", "advancedEffectWaveBlue": "Волна (синяя)", "advancedEffectWaveBlueDescription": "Каждый символ пульсирует волной, используя анимацию синего и голубого цветов", - "advancedEffectStarWarsScroll": "Прокрутка вёздных войн", + "advancedEffectStarWarsScroll": "Прокрутка в стиле \"Звездных войн\"", "advancedEffectStarWarsScrollDescription": "Текст прокручивается снизу вверх с эффектом перспективного наклона, как вступительные титры \"Звездных войн\"", "advancedEffectEndCreditsScroll": "Титры (прокрутка)", "advancedEffectEndCreditsScrollDescription": "Все строки субтитров прокручиваются снизу вверх в виде непрерывной ленты титров", @@ -3737,103 +4735,127 @@ "advancedEffectSnowDescription": "Непрерывный снегопад с учетом глубины резкости", "advancedEffectOldMovie": "Эффект старого фильма (фон)", "advancedEffectOldMovieDescription": "Имитирует винтажный 35-мм кинопроектор с шумом, виньетированием и царапинами", - "advancedEffectNeonBurst": "Неоновый взрыв", - "advancedEffectNeonBurstDescription": "Энергичные субтитры в стиле короткометражных фильмов с неоновым свечением и масштабируемой анимацией", - "advancedEffectSnowFlakeCount": "количество хлопьев", + "advancedEffectNeonBurst": "Неоновая вспышка", + "advancedEffectNeonBurstDescription": "Энергичные субтитры в стиле Shorts с неоновым свечением и анимацией \"выскакивания\"", + "advancedEffectSnowFlakeCount": "Количество снежинок", "advancedEffectStarfieldStarCount": "Количество звезд", - "advancedEffectGlitch": "Глюк", + "advancedEffectGlitch": "Глитч", "advancedEffectGlitchDescription": "Цифровой сбой с хроматической аберрацией, белыми вспышками и наложением искажений", - "advancedEffectBounceIn": "Отскочить", + "advancedEffectBounceIn": "Появление с отскоком", "advancedEffectBounceInDescription": "Каждый символ появляется с эластичной анимацией, расположенной слева направо со смещением", "advancedEffectFireflies": "Светлячки (на заднем плане)", "advancedEffectFirefliesDescription": "Теплые, светящиеся желто-янтарные точки органично перемещаются по экрану, пульсируя светом", "advancedEffectMatrix": "Матрица", - "advancedEffectMatrixDescription": "Падающие зеленые колонны символов с подзаголовком, буква за буквой формирующиеся из дождя", - "advancedEffectAudioPulse": "Аудиотекстовый пульс", + "advancedEffectMatrixDescription": "Падающие столбцы зеленых символов, из которых буква за буквой складывается текст субтитра", + "advancedEffectAudioPulse": "Пульсация текста под звук", "advancedEffectAudioPulseDescription": "Текст субтитров подсвечивается и пульсирует в зависимости от громкости звука — в тихих местах отображается обычный текст, в местах с высокой громкостью добавляется цветной ореол и небольшое увеличение масштаба", "advancedEffectConfetti": "Взрыв конфетти", "advancedEffectConfettiDescription": "Взрывной поток разноцветных вращающихся бумажных конфетти из угловых хлопушек и звездообразный взрыв в центре каждого субтитра", "advancedEffectHearts": "Сердца (дождь)", "advancedEffectHeartsDescription": "Нарисованные кривыми Безье сердечки трех форм мягко падают с верхней части экрана, перекатываясь и исчезая на протяжении каждого субтитра", - "advancedEffectWordSpacing": "межсловный интервал", - "advancedEffectWordSpacingDescription": "Увеличивает расстояние между словами с помощью тега\\fsp для улучшения читаемости", + "advancedEffectWordSpacing": "Межсловный интервал", + "advancedEffectWordSpacingDescription": "Увеличивает расстояние между словами с помощью тега \\fsp для лучшей читаемости", "advancedEffectKaraokeRightToLeft": "Справа налево", "advancedEffectFancyKaraokeAutoDetectActiveWord": "Автоматическое определение активного слова", - "advancedEffectFancyKaraokeGlow": "Активное свечение слова", + "advancedEffectFancyKaraokeGlow": "Свечение активного слова", "advancedEffectFancyKaraokeActiveColor": "Активный цвет", "advancedEffectFancyKaraokeInactiveColor": "Неактивный цвет", - "advancedEffectWordSpacingPixels": "Расстояние между элементами (в пикселях)", + "advancedEffectWordSpacingPixels": "Интервал (пиксели)", "advancedEffectSlowZoomOut": "Медленное отдаление", "advancedEffectSlowZoomOutDescription": "Текст изначально немного крупнее, а затем плавно уменьшается до нормального размера на протяжении всего времени показа субтитров", "advancedEffectSlowZoomIn": "Медленное приближение", "advancedEffectSlowZoomInDescription": "Текст начинается с обычного размера и постепенно увеличивается в течение всего времени показа субтитров", "advancedEffectFadeIn": "Переход - плавное появление", - "advancedEffectFadeInDescription": "Эффект построчного появления, при котором экран сначала становится черным, а затем появляется видео.", + "advancedEffectFadeInDescription": "Эффект появления для каждой строки: экран сначала черный, затем проявляется видео.", "advancedEffectFadeOut": "Переход - затухание", - "advancedEffectFadeOutDescription": "Эффект построчного затухания, при котором экран становится чёрным.", - "advancedEffectTvClose": "Переход - Завершение телепередачи", + "advancedEffectFadeOutDescription": "Эффект затухания для каждой строки: экран в конце становится черным.", + "advancedEffectTvClose": "Переход - выключение телевизора", "advancedEffectTvCloseDescription": "Черные полосы растут внутрь сверху и снизу, а середина плавно переходит в белый цвет (черный верх / белый середина / черный низ). Вторая половина — сплошной черный цвет.", - "advancedEffectSlideInLeft": "Проскользить слева", - "advancedEffectSlideInLeftDescription": "Текст появляется слева за пределами экрана, задерживается, а затем снова исчезает влево", - "advancedEffectSlideInRight": "Проскользить справа", - "advancedEffectSlideInRightDescription": "Текст появляется справа за пределами экрана, задерживается, а затем снова исчезает справа", + "advancedEffectSlideInLeft": "Выезд слева", + "advancedEffectSlideInLeftDescription": "Текст выезжает из-за левого края экрана, задерживается, а затем уходит обратно влево", + "advancedEffectSlideInRight": "Выезд справа", + "advancedEffectSlideInRightDescription": "Текст выезжает из-за правого края экрана, задерживается, а затем уходит обратно вправо", "advancedEffectFadeInOutDescription": "Текст плавно появляется в начале и плавно исчезает в конце каждого субтитра", "advancedEffectWordFlip3D": "Word flip 3D", - "advancedEffectWordFlip3DDescription": "Каждое слово эффектно складывается в 3D-формате, переворачиваясь и издавая упругие щелчки по мере произнесения — современный стиль подписи к короткометражным фильмам", - "advancedEffectCinematicTitle": "Кинематографическое название", - "advancedEffectCinematicTitleDescription": "Буквы плавно переходят от широкого к нормальному межбуквенному расстоянию, при этом изображение плавно размывается — классическое появление названия фильма", + "advancedEffectWordFlip3DDescription": "Каждое слово появляется с 3D-переворотом и упругим \"выскакиванием\" в момент произнесения — современный стиль субтитров Shorts", + "advancedEffectCinematicTitle": "Кинематографический титр", + "advancedEffectCinematicTitleDescription": "Межбуквенный интервал сужается от широкого к обычному, а размытие уходит — классическое появление названия фильма", "advancedEffectLowerThird": "Нижняя треть", - "advancedEffectLowerThirdDescription": "В левом нижнем углу расположен баннер с именем и должностью, дополненный выдвижной акцентной полосой — в стиле интервью/документального фильма (первая строка = имя, последующие строки = должность)", + "advancedEffectLowerThirdDescription": "Плашка с именем и должностью слева внизу с выезжающей акцентной полосой — в стиле интервью/документального кино (первая строка — имя, следующие — должность)", "advancedEffectLowerThirdAccentColor": "Акцентный цвет", - "overrideTagsHistory": "Переопределить историю тегов" + "advancedEffectCategoryWords": "Слова и караоке", + "advancedEffectCategoryInOut": "Вход и выход", + "advancedEffectCategoryTextFx": "Текстовые эффекты", + "advancedEffectCategoryScenes": "Сцены", + "advancedEffectCategoryTitles": "Заголовки и титры", + "advancedEffectSearchWatermark": "Поиск эффектов...", + "advancedEffectNoMatches": "Нет эффектов, соответствующих запросу", + "advancedEffectCustomize": "Настроить", + "advancedEffectNoSettings": "У этого эффекта нет настроек — он работает как есть.", + "advancedEffectAmount": "Сила", + "advancedEffectPreviewNoVideo": "Пример предпросмотра — откройте видео, чтобы увидеть реальную отрисовку", + "advancedEffectHighlightBox": "Подсветка рамкой", + "advancedEffectHighlightBoxDescription": "Цветной прямоугольник перескакивает от слова к слову по мере произнесения реплики — субтитры в стиле CapCut", + "advancedEffectSingleWordPop": "По одному слову", + "advancedEffectSingleWordPopDescription": "Показывает по одному крупному слову, которое выскакивает в момент произнесения — стиль субтитров коротких видео", + "advancedEffectBoldCaptions": "Жирные субтитры", + "advancedEffectBoldCaptionsDescription": "Жирные субтитры с толстым контуром — произносимое слово подсвечивается цветом и увеличивается", + "advancedEffectHighlightColor": "Цвет подсветки", + "advancedEffectUpperCase": "Заглавные буквы", + "advancedEffectTextSizePercent": "Размер текста (%)", + "advancedEffectSmoothFill": "Плавная заливка", + "advancedEffectSmoothFillDescription": "Цвет подсветки плавно заливает каждое слово в момент произнесения", + "advancedEffectBlurInWords": "Проявление слов из размытия", + "advancedEffectBlurInWordsDescription": "Слова появляются одно за другим по мере произнесения — каждое проявляется из размытия и поднимается на место", + "advancedEffectRollingCaptions": "Прокручиваемые субтитры", + "advancedEffectRollingCaptionsDescription": "Каждая строка въезжает снизу на место и выталкивает предыдущую строку вверх, как в чате или на телесуфлере", + "advancedEffectFillColor": "Цвет заливки", + "advancedEffectRise": "Подъем от базовой линии", + "overrideTagsHistory": "История тегов переопределения" }, "about": { "title": "О Subtitle Edit", - "translatedBy": "Переведено: jekovcar {0}", + "translatedBy": "Перевод: {0}", "licenseText": "Subtitle Edit — это свободное программное обеспечение, распространяемое под лицензией MIT.", - "descriptionText": "Subtitle Edit — это бесплатный и открытый редактор субтитров, доступный для Windows, macOS и Linux.\n Он поддерживает более 300 форматов субтитров, OCR, распознавание речи, AI-перевод и многое другое.\n\nСпасибо, что являетесь частью сообщества Subtitle Edit! :)", + "descriptionText": "Subtitle Edit — это бесплатный редактор субтитров с открытым исходным кодом для Windows, macOS и Linux.\nОн поддерживает более 300 форматов субтитров, OCR, распознавание речи, перевод с помощью ИИ и многое другое.\n\nСпасибо, что вы часть сообщества Subtitle Edit! :)", "issueTrackingAndSourceCode": "Система отслеживания ошибок и исходный код: ", "gitHub": "Github", "donate": "Пожертвовать: ", "payPal": "PayPal", - "gitHubSponsor": "Спонсор Github", + "gitHubSponsor": "Спонсор на GitHub", "or": " или " }, "errorList": { "title": "Список ошибок", - "summaryX": "{0} ошибок в {1} из {2} строк(и)", + "summaryX": "Ошибок: {0} в {1} из {2} строк", "noErrors": "Ошибок не обнаружено.", - "summaryFilesX": "{0} ошибок в {1} строках по {2} файлам", + "summaryFilesX": "Ошибок: {0} в {1} строках, файлов: {2}", "all": "Все", "tooManyLines": "Слишком много строк", "charactersPerSecond": "Скорость чтения", - "durationTooShort": "Слишком короткий", - "durationTooLong": "Слишком долго", "lineTooLong": "Слишком длинная строка", - "lineTooWide": "Линия слишком широкая", - "overlap": "Перекрывающиеся", - "gapTooShort": "Слишком короткий промежуток времени", + "lineTooWide": "Слишком широкая строка", + "gapTooShort": "Слишком короткий промежуток", "tooManyLinesHint": "Больше строк, чем максимально допустимое количество строк", "charactersPerSecondHint": "Символов в секунду сверх максимального значения", "durationTooShortHint": "Меньше минимального времени отображения", "durationTooLongHint": "Превышает максимально допустимое время отображения", "lineTooLongHint": "Строка содержит больше символов, чем максимально допустимая длина строки", - "lineTooWideHint": "Ширина линии (в пикселях) превышает максимальную ширину", + "lineTooWideHint": "Строка шире (в пикселях) максимальной ширины", "overlapHint": "Перекрывает предыдущую или следующую строку", - "gapTooShortHint": "Расстояние до предыдущей или следующей строки меньше минимального значения", + "gapTooShortHint": "Промежуток до предыдущей или следующей строки меньше минимального", "detailXGreaterThanY": "{0} > {1}", "detailXLessThanY": "{0} < {1}", - "detailOverlapFromPrevious": "из предыдущего: {0} мс", - "detailOverlapToNext": "до следующего: {0} мс", - "detailGapToPrevious": "к предыдущему: {0} < {1} мс", - "detailGapToNext": "до следующего: {0} < {1} мс", - "detail": "Деталь", + "detailOverlapFromPrevious": "с предыдущей: {0} мс", + "detailOverlapToNext": "со следующей: {0} мс", + "detailGapToPrevious": "до предыдущей: {0} < {1} мс", + "detailGapToNext": "до следующей: {0} < {1} мс", "tip": "Чтобы перейти к нужной строке, дважды щелкните по ней (или нажмите Enter). Какие проверки будут выполняться и какие будут установлены ограничения, задаются в разделе «Настройки» > «Общие».", "exportAsText": "Текстовый файл (.txt)...", "exportAsExcel": "Файл Excel (.xlsx)...", "exportAsHtml": "Веб-страница (.html)...", "exportFileX": "Файл: {0}", - "exportGeneratedX": "Сгенерировано: {0}", + "exportGeneratedX": "Создано: {0}", "exportMadeWithSubtitleEdit": "Создано с помощью Subtitle Edit" } } diff --git a/src/ui/Assets/Languages/Spanish.json b/src/ui/Assets/Languages/Spanish.json index c6d741b32e4..c0129d7f21a 100644 --- a/src/ui/Assets/Languages/Spanish.json +++ b/src/ui/Assets/Languages/Spanish.json @@ -2,8 +2,47 @@ "Title": "Subtitle Edit", "TranslatedBy": "Gemini", "CultureName": "es-ES", - "version": "v5.2.0-rc7", + "version": "v5.3.0", "General": { + "Prompt": "Indicación", + "Temperature": "Temperatura", + "Preset": "Ajuste", + "Output": "Salida", + "OutputFormat": "Formato de salida", + "Other": "Otros", + "TimeCodeFormat": "Formato del código de tiempo", + "TopBottomMargin": "Margen sup./inf.", + "Theme": "Tema", + "Brightness": "Brillo", + "ChooseColor": "Elegir color", + "LineX": "Línea {0}", + "PlayLine": "Reproducir línea", + "MaxLineLength": "Longitud máxima de línea", + "MaxCharsPerSec": "CPS máximos", + "MaxNumberOfLines": "Número máx. de líneas", + "Subtitles": "Subtítulos", + "ShotChanges": "Cambios de plano", + "Chapters": "Capítulos", + "Interjections": "Interjecciones", + "BlankLines": "Líneas en blanco", + "EditWholeText": "Editar todo el texto", + "NoTextInClipboard": "No hay texto en el portapapeles", + "NoSubtitlesFoundTitle": "No se encontraron subtítulos", + "ReplacedXOccurrences": "Se reemplazaron {0} coincidencias", + "InvalidRegularExpressionX": "Expresión regular no válida: {0}", + "DiscardChangesTitle": "¿Descartar los cambios?", + "DownloadingXDotDotDot": "Descargando {0}...", + "ImportTimeCodesDotDotDot": "Importar códigos de tiempo...", + "NextChange": "Cambio siguiente", + "PreviousChange": "Cambio anterior", + "ChangeXOfY": "Cambio {0} de {1}", + "TooLong": "Demasiado larga", + "TooShort": "Demasiado corta", + "Overlapping": "Superposición", + "Detail": "Detalle", + "FixOcrErrors": "Corregir errores de OCR", + "RunningOcrXY": "Ejecutando OCR... {0}/{1}", + "LlamaCppDownloadEnginePrompt": "llama.cpp necesita que se descargue el motor llama-server. ¿Descargar ahora?", "AssistedMove": "Movimiento asistido", "AssistedMoveChooseMove": "Haga clic en una opción o pulse su número para mover palabras", "AssistedMoveDotDotDot": "Movimiento asistido...", @@ -71,6 +110,24 @@ "Abort": "Abortar", "Actor": "Actor", "Actors": "Actores", + "SetActorDotDotDot": "Establecer actor...", + "ActorPickerTitle": "Establecer actor", + "ActorPickerFilterHint": "Escriba para filtrar o escriba un nuevo nombre de actor", + "ActorPickerKeysHint": "Pulse un número o Enter para establecer el actor. Alt+Arriba/Abajo cambia el orden, Supr elimina el actor.", + "ActorPickerNewActorX": "Nuevo actor \"{0}\"", + "ActorPickerLinesSelectedX": "Líneas seleccionadas: {0}", + "SetStyleDotDotDot": "Establecer estilo...", + "StylePickerTitle": "Establecer estilo", + "StylePickerFilterHint": "Escriba para filtrar o escriba un nuevo nombre de estilo", + "StylePickerKeysHint": "Pulse un número (1-9, 0) para establecer el estilo en todas las líneas seleccionadas.", + "StylePickerNewStyleX": "Nuevo estilo \"{0}\"", + "StylePickerNewStyleInfo": "Pulse Enter para añadir este estilo con los ajustes predeterminados y aplicarlo a las líneas seleccionadas. Use \"Administrar estilos...\" para cambiar su fuente, colores y posición más adelante.", + "StylePickerCurrentStyleX": "Estilo actual: {0}", + "StylePickerLinesUsingStyleX": "Líneas que usan este estilo: {0}", + "StylePickerMarginsXYZ": "Izquierdo {0}, derecho {1}, vertical {2}", + "StylePickerSetStyle": "_Establecer estilo", + "StylePickerManageStyles": "Administrar estilos...", + "StylePickerManageStylesHint": "Cerrar esta ventana y abrir el administrador de estilos para editar fuentes, colores, posición y más", "Add": "Añadir", "AddDotDotDot": "Añadir...", "AddToNamesListCaseSensitive": "Añadir a la lista de nombres (sensible a mayúsculas)", @@ -79,7 +136,6 @@ "AdjustAlpha": "Ajustar alfa (transparencia)", "AdjustDisplayDuration": "Ajustar duración de visualización", "Adjustment": "Ajuste", - "Advanced": "Avanzado", "AdvancedSettings": "Ajustes avanzados", "After": "Después", "Alignment": "Alineación", @@ -115,7 +171,6 @@ "BatchMode": "Modo por lotes", "BdnXml": "BDN/xml", "Before": "Antes", - "BeforeX": "Antes de \"{0}\"", "Beginning": "Principio", "BluRaySup": "Blu-ray (sup)", "Bold": "Negrita", @@ -127,7 +182,6 @@ "BookmarkEdit": "Editar marcador", "BookmarkEditForSelectedLinesX": "Editar marcador para {0} líneas seleccionadas", "BookmarksList": "Listar marcadores", - "BorderColor": "Color del borde", "BorderStyle": "Estilo del borde", "BottomCenter": "Abajo-Centro", "BottomLeft": "Abajo-Izquierda", @@ -152,7 +206,6 @@ "ChangeCasing": "Cambiar mayúsculas/minúsculas", "ChangeFormatting": "Cambiar formato", "ChangeFrameRate": "Cambiar tasa de fotogramas", - "ChangeLanguageFilter": "Cambiar filtro de idioma...", "ChangeOnce": "Cambiar una vez", "ChangeSpeed": "Cambiar velocidad", "Character": "Carácter", @@ -177,7 +230,6 @@ "ConversionCancelledByUser": "Conversión cancelada por el usuario", "Convert": "Convertir", "Converted": "Convertido", - "ConvertingDotDotDot": "Convirtiendo...", "ConvertingXofYDotDoDot": "Convirtiendo {0:#,###,##0}/{1:#,###,##0}...", "Copy": "Copiar", "CopyImageToClipboard": "Copiar imagen al portapapeles", @@ -185,7 +237,6 @@ "CouldNotSaveFileXErrorY": "No se pudo guardar el archivo \"{0}\". Error: {1}", "Count": "Cuenta", "Cps": "Car./seg", - "CurrentSubtitle": "Subtítulo actual", "CurrentVideoPosition": "Posición actual del vídeo", "Custom": "Personalizado", "Cut": "Cortar", @@ -231,7 +282,6 @@ "Expand": "Expandir", "Export": "Exportar", "ExportDotDotDot": "Exportar...", - "ExportToX": "Exportar a {0}", "ExtendAfter": "Extender/acortar a la línea posterior", "ExtendBefore": "Extender/acortar a la línea anterior", "ExtendSelectedLinesToNextShotChangeOrNextSubtitle": "Extender líneas seleccionadas al siguiente cambio de plano (o siguiente subtítulo)", @@ -248,7 +298,6 @@ "FileExtension": "Extensión de archivo", "FileName": "Nombre de archivo", "FileNameX": "Nombre de archivo: {0}", - "FileNameXAndSize": "Nombre de archivo: {0} ({1})", "FileSaved": "Archivo guardado", "FileSavedToX": "Archivo guardado en {0}", "FileXAlreadyExists": "El archivo \"{0}\" ya existe.", @@ -258,8 +307,6 @@ "Find": "Buscar", "FindNext": "Buscar siguiente", "FindTextX": "Buscar texto - {0}", - "FiveHundredMilliseconds": "500 milisegundos", - "FiveSeconds": "Cinco segundos", "Fix": "Corregir", "FixCommonErrors": "Corregir errores comunes", "FixRightToLeft": "Corregir derecha a izquierda", @@ -283,14 +330,12 @@ "FoundXInLineYZ": "Encontrado \"{0}\" en la línea {1}, posición {2}", "FoundXMatches": "Encontrado {0} coincidencias", "FrameRate": "Tasa de fotogramas", - "FrameRateX": "Tasa de fotogramas: {0:0.0###}", "Frames": "Fotogramas", "From": "Desde", "FromCurrentVideoPosition": "desde la posición actual del vídeo", "FullScreen": "Pantalla completa", "Gap": "Espacio", "General": "General", - "GeneralText": "General", "Generate": "Generar", "GenerateImportShotChanges": "Generar/importar cambios de plano", "Generating": "Generando...", @@ -308,12 +353,8 @@ "Help": "Ayuda", "Hex": "Hex", "Hide": "Ocultar", - "HidePreview": "Ocultar vista previa", "History": "Historial", "Horizontal": "Horizontal", - "HourMinutesSecondsDecimalSeparatorMilliseconds": "Hora:min:seg{0}ms", - "HourMinutesSecondsFrames": "Hora:min:seg:fotogramas", - "Ip": "IP", "Id": "ID", "Image": "Imagen", "ImageSaved": "Imagen guardada", @@ -372,6 +413,7 @@ "MergeSelectedLinesDialog": "Combinar líneas seleccionadas como diálogo", "MergeWithLineAfterAndAutoBreak": "Combinar con línea posterior y división automática", "MergeWithLineAfterKeepBreaks": "Combinar con línea posterior (mantener saltos)", + "MergeWithLineAfterAndUnbreak": "Combinar con línea posterior y unir", "MergeWithLineBeforeAndAutoBreak": "Combinar con línea anterior y división automática", "MergeWithLineBeforeKeepBreaks": "Combinar con línea anterior (mantener saltos)", "MiddleCenter": "Medio-Centro", @@ -386,11 +428,11 @@ "MoveAllShotChangeOneFrameForward": "Mover todos los cambios de plano un fotograma adelante", "MultiMode": "Modo múltiple", "MoveDown": "Bajar", + "Increase": "Aumentar", + "Decrease": "Disminuir", "MoveUp": "Subir", "MultipleReplace": "Reemplazo múltiple", - "Mute": "Silenciar", "Name": "Nombre", - "Negative": "Negativo", "New": "Nuevo", "NewDotDotDot": "Nuevo...", "NewProfile": "Nuevo perfil", @@ -418,20 +460,15 @@ "OffsetY": "Desfase Y", "Ok": "_Aceptar", "OneFile": "Un archivo", - "OneHundredMilliseconds": "100 milisegundos", - "OneSecond": "Un segundo", "OneSecondBack": "Un segundo atrás", "OneSecondForward": "Un segundo adelante", - "OnlineVideoFeatureNotAvailable": "Función no disponible para vídeo en línea", "OpenContainingFolder": "Abrir carpeta contenedora", "OpenDictionaryFolder": "Abrir carpeta de diccionarios", "OpenFile": "Abrir archivo", "OpenImageBasedSubtitle": "Abrir subtítulo basado en imágenes", "OpenImageFile": "Abrir archivo de imagen", - "OpenOriginalSubtitleFile": "Abrir archivo de subtítulo original...", "OpenOriginalSubtitleFileTitle": "Abrir archivo de subtítulo original", "OpenOutputFolder": "Abrir carpeta de salida", - "OpenSubtitle": "Abrir subtítulo...", "OpenSubtitleFileTitle": "Abrir archivo de subtítulos", "OpenSubtitles": "Abrir subtítulos...", "OpenVideoFile": "Abrir archivo de vídeo...", @@ -444,11 +481,6 @@ "OutlineWidth": "Ancho del contorno", "OutputFolder": "Carpeta de salida", "OutputProperties": "Propiedades de salida", - "Overlap": "Superposición", - "OverlapNextX": "Superp. siguiente ({0:#;##0.###})", - "OverlapPreviousLineX": "Superp. línea ant. ({0:#;##0.###})", - "OverlapStartAndEnd": "Superponer inicio y fin", - "OverlapX": "Superposición ({0:#;##0.###})", "OverwriteExistingFiles": "Sobrescribir archivos existentes", "OverwriteFilesInFolderX": "Sobrescribir archivos en la carpeta: \"{0}\"", "OverwriteQuestion": "¿Sobrescribir?", @@ -461,6 +493,7 @@ "Percent": "Porcentaje", "PickLayer": "Establecer capa", "PickOllamaModel": "Elegir modelo Ollama", + "PickModel": "Elegir modelo", "LlamaCppUseRemoteServer": "Usar servidor externo (URL)", "PickOutputFolder": "Elegir carpeta de salida", "PickResolutionFromCurrentVideo": "Elegir resolución del vídeo actual", @@ -504,7 +537,6 @@ "Refresh": "Actualizar", "Region": "Región", "RegularExpression": "Expresión regular", - "RegularExpressionIsNotValid": "¡La expresión regular no es válida!", "RelativeToCurrentVideoPosition": "Relativo a la posición actual del vídeo", "Remove": "Eliminar", "RemoveAlignment": "Eliminar alineación", @@ -529,7 +561,7 @@ "Reset": "Restablecer", "ResizePanels": "Redimensionar paneles", "Resolution": "Resolución", - "ResolutionX": "Resolución: {0}", + "Retry": "Reintentar", "ReverseRightToLeftStartEnd": "Invertir inicio/fin RTL", "Right": "Derecha", "RightToLeft": "Derecha a izquierda", @@ -567,8 +599,6 @@ "SelectedlinesX": "Líneas seleccionadas: {0}", "Sensitivity": "Sensibilidad", "Separator": "Separador", - "SessionKey": "Clave de sesión", - "SessionKeyGenerate": "Generar nueva clave", "SetEnd": "Establecer fin", "SetEndAndGoToNext": "Establecer fin e ir al siguiente", "SetEndAddNewAndGoToNew": "Establecer fin, añadir nuevo e ir al nuevo", @@ -591,8 +621,9 @@ "ShadowColor": "Color de sombra", "ShadowWidth": "Ancho de sombra", "ShiftLineBy": "Desplazar línea en", + "ShotIn": "Entrada de plano", + "ShotOut": "Salida de plano", "Shortcut": "Atajo", - "ShortcutX": "Atajo: {0}", "Shortcuts": "Atajos", "Show": "Mostrar", "ShowActorColumn": "Mostrar columna \"Actor\"", @@ -603,17 +634,19 @@ "ShowStartColumn": "Mostrar columna \"Inicio\"", "ShowHideColumn": "Mostrar columna \"Ocultar\"", "ShowHistory": "Mostrar historial", + "ClearHistory": "Limpiar historial", + "RemoveFromHistory": "Eliminar del historial", "ShowLayerColumn": "Mostrar columna \"Capa\"", "ShowPreview": "Mostrar vista previa", "ShowShotChangesList": "Mostrar lista de cambios de plano", + "ShowShotInColumn": "Mostrar columna \"Entrada de plano\"", + "ShowShotOutColumn": "Mostrar columna \"Salida de plano\"", "ShowStyleColumn": "Mostrar columna \"Estilo\"", "ShowTeletext": "Mostrar columna de teletexto en la vista de lista", "ShowTimeCodes": "Mostrar códigos de tiempo", "ShowWpmColumn": "Mostrar columna \"Pal./min\"", "ShowPixelWidthColumn": "Mostrar columna \"Ancho píxeles\"", "Shrink": "Encoger", - "SingleBox": "Caja única", - "SingleLineLengths": "Longitud de línea única:", "SingleMode": "Modo único", "TextTotalLength": "Texto - longitud total", "TextSingleLineMaxLength": "Texto - longitud máx. de línea única", @@ -662,16 +695,16 @@ "Strikeout": "Tachado", "Style": "Estilo", "StyleExaggeration": "Exageración de estilo", - "StyleLanguage": "Estilo / Idioma", "Styles": "Estilos", "SubtitleFile": "Archivo de subtítulos", + "SubtitleFileChangedOutsideX": "El archivo \"{0}\" se ha modificado fuera de Subtitle Edit.\n\n¿Recargarlo y perder sus cambios?", "SubtitleFileName": "Nombre del archivo de subtítulos", "SubtitleFileSaved": "Archivo de subtítulos guardado", "SubtitleFileSavedToX": "Archivo de subtítulos guardado en {0}", "SubtitleFiles": "Archivos de subtítulos", "SubtitleFormats": "Formatos de subtítulos", "SubtitleLoadedX": "Subtítulo cargado: {0}", - "SubtitleXOfY": "Subtítulo {0} de {1}", + "SubtitleReloadedChangedOutsideX": "Subtítulo recargado (modificado fuera de Subtitle Edit): {0}", "Suffix": "Sufijo", "Suggestions": "Sugerencias", "Sync": "Sincronizar", @@ -683,7 +716,6 @@ "TeletextColor": "Color de teletexto", "TeletextLine": "Línea de teletexto", "TenHours": "10 horas", - "TenMilliseconds": "10 milisegundos", "Text": "Texto", "TextColor": "Color de texto", "TextFiles": "Archivos de texto", @@ -710,9 +742,6 @@ "TopRight": "Arriba-Derecha", "Top": "Arriba", "TotalAdjustmentX": "Ajuste total: {0}", - "TotalFramesX": "Fotogramas totales: {0:#;##0.##}", - "TotalLengthX": "Longitud total: {0}", - "TotalLengthXSplitLine": "Longitud total: {0} (¡dividir línea!)", "Translate": "Traducir", "TranslatePercentX": "Traduciendo: {0}%", "TranslateRow": "Traducir fila", @@ -721,6 +750,7 @@ "Type": "Tipo", "Unbreak": "Unir texto", "UnbreakLines": "Unir líneas", + "Undelete": "Recuperar", "Underline": "Subrayado", "Undo": "Deshacer", "Unknown": "Desconocido", @@ -740,13 +770,11 @@ "Usages": "Usos", "Use": "Usar", "UseAlways": "Usar siempre", - "UseLargerFontForThisWindow": "Usar fuente más grande para esta ventana", "UseOnce": "Usar una vez", "UseOutputFolder": "Usar carpeta de salida", "UseSourceFolder": "Usar carpeta de origen", "UseSourceResolution": "Usar resolución de origen", "UserName": "Nombre de usuario", - "UserNameAlreadyInUse": "Nombre de usuario ya en uso", "Vertical": "Vertical", "Video100MsBack": "Vídeo, 100 ms atrás", "Video100MsForward": "Vídeo, 100 ms adelante", @@ -760,14 +788,25 @@ "VideoCustom3ForwardX": "Vídeo, milisegundos personalizados ({0:#,###,##0}) adelante, 3", "VideoCustom4BackX": "Vídeo, milisegundos personalizados ({0:#,###,##0}) atrás, 4", "VideoCustom4ForwardX": "Vídeo, milisegundos personalizados ({0:#,###,##0}) adelante, 4", - "VideoEncodingX": "Codificación de vídeo: {0}", + "VideoCustom1BackAndPauseX": "Vídeo, milisegundos personalizados ({0:#,###,##0}) atrás y pausa, 1", + "VideoCustom1ForwardAndPauseX": "Vídeo, milisegundos personalizados ({0:#,###,##0}) adelante y pausa, 1", + "VideoCustom2BackAndPauseX": "Vídeo, milisegundos personalizados ({0:#,###,##0}) atrás y pausa, 2", + "VideoCustom2ForwardAndPauseX": "Vídeo, milisegundos personalizados ({0:#,###,##0}) adelante y pausa, 2", + "VideoCustom3BackAndPauseX": "Vídeo, milisegundos personalizados ({0:#,###,##0}) atrás y pausa, 3", + "VideoCustom3ForwardAndPauseX": "Vídeo, milisegundos personalizados ({0:#,###,##0}) adelante y pausa, 3", + "VideoCustom4BackAndPauseX": "Vídeo, milisegundos personalizados ({0:#,###,##0}) atrás y pausa, 4", + "VideoCustom4ForwardAndPauseX": "Vídeo, milisegundos personalizados ({0:#,###,##0}) adelante y pausa, 4", "VideoExtension": "Extensión de archivo de vídeo", "VideoFile": "Archivo de vídeo", "VideoFileGenerated": "Archivo de vídeo generado", "VideoFileGeneratedX": "Archivo de vídeo generado: \"{0}\"", + "VideoFilesGenerated": "Archivos de vídeo generados", + "XVideosGenerated": "{0} vídeos generados", + "XOfYVideosGenerated": "{0} de {1} vídeos generados", + "SavedInX": "Guardado en {0}", + "SavedInXFolders": "Guardado en {0} carpetas", "VideoFiles": "Archivos de vídeo", "VideoAndAudioFiles": "Archivos de vídeo y audio", - "VideoInformation": "Info. vídeo", "VideoOffset": "Desfase de vídeo", "VideoOneFrameBack": "Vídeo, un fotograma atrás", "VideoOneFrameForward": "Vídeo, un fotograma adelante", @@ -778,7 +817,6 @@ "VideoPlayer": "Reproductor de vídeo", "VideoPosition": "Posición del vídeo", "VideoResolution": "Resolución del vídeo", - "ViewX": "Ver {0}", "Visible": "Visible", "Voice": "Voz", "Volume": "Volumen", @@ -787,9 +825,7 @@ "WaveformCenterOnVideoPosition": "Centrar forma de onda en posición del vídeo", "WaveformPasteFromClipboard": "Pegar desde el portapapeles", "WaveformSpectrogram": "Forma de onda/espectrograma", - "WebServiceUrl": "URL del servicio web", "Width": "Ancho", - "WindowPositionAndSize": "Posición y tamaño de la ventana", "WordsPerMin": "Pal./min", "PixelWidth": "Ancho píxeles", "Wpm": "Pal./min", @@ -803,8 +839,6 @@ "NoBookmarksFound": "No se encontraron más marcadores", "XRequiresAnApiKey": "{0} requiere una clave API", "XRequiresAValidUrl": "{0} requiere una URL válida (p. ej. \"http://...\" o \"https://...\")", - "XSeconds": "{0:0.0##} segundos", - "XSubtitles": "{0:#,###,##0} subtítulos", "Yes": "Sí", "ZeroBytes": "0 bytes", "CopyToClipboard": "Copiar al portapapeles", @@ -826,10 +860,8 @@ "PlaybackSpeed": "Velocidad de reproducción", "HoursMinutesSecondsMilliseconds": "HH:MM:SS.FFF", "ImageFiles": "Archivos de imagen", - "OpenAiCompatibleStt": "STT compatible con OpenAI", "OpenAiCompatibleSttEndpoint": "URL del punto de conexión STT", "OpenAiCompatibleSttApiKey": "Clave de API", - "OpenAiCompatibleSttModel": "Modelo", "OpenAiCompatibleSttExtraHeaders": "Encabezados adicionales", "OpenAiCompatibleSttTimeout": "Tiempo de espera (segundos)", "OpenAiCompatibleSttLanguage": "Sugerencia de idioma", @@ -839,6 +871,9 @@ "DashScopeSttRegion": "Región", "DashScopeSttEnableWords": "Marcas de tiempo por palabra", "DashScopeSttRegionKeyHint": "Nota: las claves API de Alibaba Cloud Model Studio son específicas de cada región: asegúrese de que la región seleccionada coincide con la región donde se creó la clave API (China o Internacional).", + "GoogleCloudSttProjectId": "ID de proyecto (solo para Application Default Credentials)", + "GoogleCloudSttBucketName": "Bucket de almacenamiento (vacío = auto)", + "GoogleCloudSttDynamicBatching": "Procesamiento por lotes dinámico (unas 5 veces más barato, sin garantía de latencia)", "OnlineSttApiKeyMissing": "Se requiere una clave API. Introduzca su clave API e inténtelo de nuevo.", "OpenAiCompatibleSttAutoTranscribeOnAudioSelection": "Transcribir automáticamente la nueva selección de forma de onda mediante voz a texto", "OpenAiCompatibleSttStream": "Transmitir respuesta", @@ -848,11 +883,9 @@ "ConfigurationRequired": "Configuración requerida", "TranscriptionError": "Error de transcripción", "TranscriptionComplete": "Transcripción completada", - "TranscribingWithOpenAi": "Transcribiendo con el servicio de OpenAI...", "ProcessingResponse": "Procesando respuesta...", "UnauthorizedApiKey": "No autorizado: clave de API no válida o permisos insuficientes.", "RequestTimeout": "Tiempo de espera agotado: el servidor tardó demasiado en responder.", - "NoSegmentsReturned": "El servicio de transcripción no devolvió ningún segmento.", "OpenAiCompatibleSttUrlMissing": "Se requiere la URL del punto de conexión STT compatible con OpenAI. Introduzca una URL e inténtelo de nuevo.", "OpenAiCompatibleSttUrlNotResponding": "El punto de conexión STT compatible con OpenAI no respondió:\n{0}\n\nVerifique la URL y que el servidor esté en ejecución.", "TranscriptionFailed": "La transcripción falló", @@ -868,6 +901,9 @@ "CharactersPerSecond": "Car./segundo: {0}", "ChooseColumn": "Elegir columna", "ColumnPaste": "Pegado de columna", + "CommandPaletteTitle": "Paleta de comandos", + "CommandPaletteSearchPlaceholder": "Escriba para buscar comandos...", + "CommandPaletteNoCommandsFound": "No hay comandos coincidentes", "CreatedEmptyTranslation": "Creada traducción vacía desde subtítulo actual", "DeleteText": "Eliminar texto", "DeleteTextAndShiftCellsUp": "Eliminar texto y desplazar celdas arriba", @@ -906,18 +942,20 @@ "NumberOfLinesEvenlyDistributedX": "Se distribuyeron {0} líneas uniformemente", "OneLineCopiedFromOriginal": "Una línea copiada del subtítulo original", "OneLineCopiedToOriginal": "Una línea copiada al subtítulo original", + "OnlineOnlyVideo": "Vídeo solo en línea", + "OnlineOnlyVideoXSizeYDownloadAndOpen": "El archivo de vídeo \"{0}\" ({1}) solo está almacenado en línea, por ejemplo en Dropbox o iCloud Drive, y debe descargarse antes de poder abrirlo.\n\n¿Descargarlo y abrirlo ahora?", "OneLineMerged": "Una línea combinada", "OneLineSwitched": "Una línea intercambiada", "OverwriteExistingCells": "Sobrescribir celdas existentes", "OverwriteOrShiftCellsDown": "Sobrescribir/desplazar celdas abajo", "ParsingMatroskaFile": "Analizando archivo Matroska...", + "ReadingDvdSubtitles": "Leyendo subtítulos del DVD...", "PasteFromClipboardDotDotDot": "Pegar desde el portapapeles...", "RedoPerformed": "Rehacer realizado", "RedoPerformedXActionLeft": "Rehacer realizado (acciones restantes: {0})", "RemovedUnicodeControlCharactersX": "Eliminados caracteres de control Unicode en {0} líneas", "RemovedXBlankLines": "Eliminadas {0} líneas en blanco", "ReplacedXWithYCountZ": "Reemplazado \"{0}\" con \"{1}\" ({2} ocurrencias)", - "ReplacedXWithYInLineZ": "Reemplazado \"{0}\" con \"{1}\" en la línea {2}", "ReversedStartAndEndingsForRightToLeftX": "Invertido inicio y fin para derecha a izquierda en {0} líneas", "RuleProfileIsX": "El perfil de reglas es ahora \"{0}\"", "SaveLanguageFile": "Guardar archivo de idioma", @@ -925,7 +963,6 @@ "ShiftTextCellsDown": "Desplazar celdas de texto abajo", "SingleLineLength": "Longitud de línea: ", "SpeedIsNowX": "La velocidad es ahora \"{0}\"", - "SpellCheckResult": "Corrección ortográfica completada. \n\n• Palabras cambiadas: {0}\n• Palabras omitidas: {1}", "SubtitleGridFormattingX": "Formato de la lista: {0}", "SubtitleImportedFromMatroskaFile": "Subtítulo importado desde archivo Matroska", "TextDown": "Texto abajo", @@ -952,13 +989,14 @@ "TrimmedXLines": "Recortadas {0} líneas de subtítulos", "PastedXLinesOverSelectedLines": "Se pegaron {0} línea(s) sobre las líneas seleccionadas", "PastedXOfYLinesOverSelectedLines": "Se pegaron {0} de {1} línea(s) sobre las líneas seleccionadas; el resto no cupo en la selección", + "InsertedXLinesFromClipboard": "Se insertaron {0} línea(s) desde el portapapeles", "OpenOriginalDifferentNumberOfSubtitlesXY": "El archivo original no tiene el mismo número de subtítulos que el actual.\n\n• Subtítulos originales: {0}\n• Subtítulos actuales: {1}", - "ImportXMatchingOriginalLines": "¿Importar {0} subtítulos originales coincidentes?", "OriginalTextReadOnly": "Texto original (solo lectura)", "OriginalTextEditMode": "Texto original (modo de edición)", "OriginalIsReadOnlyNotSaved": "El subtítulo original es una referencia de solo lectura y no se guardó", "OriginalIsEmptyNotSaved": "El subtítulo original no tiene ningún texto y no se guardó", "OriginalIsReadOnlyReference": "El subtítulo original está abierto como referencia de solo lectura", + "CloseTranslationQuestionXY": "¿Cerrar la traducción \"{0}\"?\n\nEl subtítulo original \"{1}\" pasa a ser el subtítulo que edita. El archivo de traducción en sí no se modifica.", "AllowEditOfOriginalSubtitle": "Permitir la edición del subtítulo original", "ShowAllOriginalLinesX": "Mostrar todas las líneas originales ({0} no tienen correspondencia aquí)", "ShowAllOriginalLinesHint": "Las líneas sin correspondencia se muestran como filas adicionales, para que pueda ver lo que falta en la traducción.", @@ -993,6 +1031,7 @@ "FileExportedInFormatXToY": "Archivo exportado en formato {0} a {1}", "FileExportedInFormatXToFileY": "Archivo exportado en formato \"{0}\" al archivo \"{1}\"", "FixedXLines": "Corregidas {0} líneas", + "ToolXChangedYLines": "{0}: {1} líneas cambiadas", "TranscriptionCompletedWithXLines": "Transcripción completada con {0} líneas", "OpenSubtitleFileX": "¿Abrir el archivo de subtítulos \"{0}\"?", "ReplacedXOccurrences": "Reemplazadas {0} ocurrencias", @@ -1056,14 +1095,15 @@ "MultipleReplace": "Reemplazo _múltiple...", "FillSelectedLinesWithClipboard": "Rellenar líneas seleccionadas con el texto del portapapeles", "GoToLineNumber": "_Ir al número de línea...", + "CommandPalette": "_Paleta de comandos...", "RightToLeftMode": "Modo d_erecha a izquierda", "ModifySelectionDotDotDot": "Modificar _selección...", "Tools": "_Herramientas", - "ToolsSelectedLines": "_Herramientas (líneas seleccionadas)", "AdjustDurations": "_Ajustar duraciones...", "ApplyDurationLimits": "Aplicar _límites de duración...", "BatchConvert": "Conversión por _lotes...", "BeautifyTimeCodes": "Embellecer códigos de tiempo...", + "ImproveTimeCodes": "Mejorar códigos de tiempo (alineación forzada)...", "BridgeGaps": "Unir _espacios...", "ApplyMinGap": "Aplicar espacio mín. entre subtítulos...", "ChangeCasing": "_Cambiar mayúsculas/minúsculas...", @@ -1202,6 +1242,9 @@ "SelectCurrentLineWhilePlayingHint": "Seleccionar subtítulo actual durante la reproducción {0}", "VideoPosition": "Posición del vídeo {0}", "VideoPositionTextBox": "Cuadro de texto de posición del vídeo {0}", + "ToolbarLineBreakX": "Salto de línea {0} (el resto de la barra de herramientas continúa en una nueva fila)", + "InitialText": "Texto inicial de la línea seleccionada", + "InitialTextHint": "El texto de la línea seleccionada tal como era cuando se seleccionó la línea", "HideWaveformToolbar": "Ocultar barra de herramientas {0}", "ResetZoomAndSpeed": "Restablecer zoom y velocidad de reproducción {0}", "RemoveBlankLines": "Eliminar líneas en blanco {0}", @@ -1215,6 +1258,15 @@ "TextPlayHint": "Reproducir el subtítulo actual y detenerse al final {0}", "TextPauseHint": "Pausar la reproducción {0}", "TextNextHint": "Reproducir el subtítulo siguiente y detenerse al final {0}", + "MoveSelectedLines": "Mover líneas seleccionadas (botones atrás/adelante)", + "MoveSelectedLinesAndFollowing": "Mover líneas seleccionadas y todas las siguientes (botones atrás/adelante)", + "MoveAllLines": "Mover todas las líneas (botones atrás/adelante)", + "MoveSelectedLinesBackHint": "Mover líneas seleccionadas {0} ms atrás {1}", + "MoveSelectedLinesForwardHint": "Mover líneas seleccionadas {0} ms adelante {1}", + "MoveSelectedLinesAndFollowingBackHint": "Mover líneas seleccionadas y todas las siguientes {0} ms atrás {1}", + "MoveSelectedLinesAndFollowingForwardHint": "Mover líneas seleccionadas y todas las siguientes {0} ms adelante {1}", + "MoveAllLinesBackHint": "Mover todas las líneas {0} ms atrás {1}", + "MoveAllLinesForwardHint": "Mover todas las líneas {0} ms adelante {1}", "GuessStartNoLineSelected": "Estimar inicio: ninguna línea seleccionada", "GuessStartTimeCodesLocked": "Estimar inicio: los códigos de tiempo están bloqueados", "GuessStartNoWaveform": "Estimar inicio: no hay forma de onda", @@ -1263,20 +1315,66 @@ "CompareOnlyInOneFile": "Solo en un archivo", "CompareTextOrTimeDifference": "Diferencia de texto/tiempo", "CompareNumberDifference": "Diferencia de número", - "IgnoreLineBreaks": "Ignorar saltos de línea", "IgnoreWhitespace": "Ignorar espacios en blanco", "IgnoreWhitespaceHint": "Las líneas que solo se diferencian en espacios, tabulaciones o saltos de línea no cuentan como distintas", "IgnoreFormatting": "Ignorar formato", - "OnlyLookForDifferencesInText": "Solo buscar diferencias en el texto", - "CannotCompareWithImageBasedSubtitles": "No se puede comparar con subtítulos basados en imágenes", - "StatisticsTitle": "Estadísticas", "IgnoreFormattingHint": "Las líneas que solo se diferencian en etiquetas de formato, como o {\\an8}, no cuentan como distintas", "ShowOnlyDifferencesInText": "Solo diferencias en texto", + "IgnoreNumbering": "Ignorar numeración", + "IgnoreNumberingHint": "Las líneas que solo difieren en su número no cuentan como diferentes", + "IgnoreTimeDifferenceMs": "Tolerancia de tiempo (ms)", + "IgnoreTimeDifferenceMsHint": "Los tiempos de inicio y fin que difieren en esta cantidad de milisegundos o menos no cuentan como diferentes", + "CompareDifferences": "Diferencias", + "CompareTextDifferences": "Diferencias de texto", + "CompareCurrent": "Actual", + "CompareReference": "Referencia", + "CompareEditable": "Editable", + "CompareEditableHint": "Los cambios hechos aquí vuelven al subtítulo al hacer clic en Aplicar", + "CompareReadOnly": "Solo lectura", + "CompareTakeFromReference": "Tomar texto y tiempos de la referencia", + "CompareInsertFromReference": "Insertar esta línea en el subtítulo actual", + "CompareDeleteFromCurrent": "Eliminar esta línea del subtítulo actual", + "CompareTakeText": "Tomar texto", + "CompareTakeTiming": "Tomar tiempos", + "CompareEditLine": "Editar línea", + "CompareEditHint": "Ctrl+Enter para guardar, Esc para cancelar", + "CompareEdited": "Editado", + "CompareOnePendingChange": "1 cambio pendiente", + "CompareXPendingChanges": "{0} cambios pendientes", + "CompareDiscardXChanges": "¿Descartar los {0} cambio(s) hechos en Comparar?", + "CompareXChangesApplied": "Comparar: {0} cambio(s) aplicado(s)", + "CompareChangeTextX": "#{0} texto de la referencia", + "CompareChangeTimingX": "#{0} tiempos de la referencia", + "CompareChangeTextAndTimingX": "#{0} texto y tiempos de la referencia", + "CompareChangeEditedX": "#{0} editado", + "CompareChangeInsertedX": "#{0} insertado", + "CompareChangeDeletedX": "#{0} eliminado", + "CompareSyncPoint": "Punto de sincronización", + "CompareSyncPointHint": "Punto de sincronización: estas dos líneas siempre se muestran como pareja, y las líneas de arriba y de abajo se alinean por separado", + "CompareSyncPickCurrent": "Punto de sincronización: usar esta línea actual", + "CompareSyncPickReference": "Punto de sincronización: usar esta línea de referencia", + "CompareSyncRemove": "Eliminar punto de sincronización", + "CompareClearXSyncPoints": "Borrar puntos de sincronización ({0})", + "CompareSyncCurrentPickedX": "Actual #{0} elegida como punto de sincronización: seleccione la línea de referencia correspondiente y haga clic en Sincronizar", + "CompareSyncReferencePickedX": "Referencia #{0} elegida como punto de sincronización: seleccione la línea actual correspondiente y haga clic en Sincronizar", + "CompareSyncWithCurrentX": "Sincronizar con actual #{0}", + "CompareSyncWithReferenceX": "Sincronizar con referencia #{0}", + "CompareSyncApply": "Sincronizar", + "CompareSyncPointSetXY": "Punto de sincronización establecido: actual #{0} y referencia #{1} se muestran ahora como pareja", + "CompareSyncAlreadyPairedXY": "Actual #{0} y referencia #{1} ya se muestran como pareja con el mismo inicio: nada que sincronizar", + "CompareSyncPointShiftedXYZW": "Punto de sincronización establecido: actual #{0}-#{1} desplazadas {2} para empezar con la referencia #{3}", + "CompareChangeSyncShiftXYZ": "#{0}-#{1} desplazadas {2} (punto de sincronización)", + "CompareTimingDeltaHint": "Cuánto más tarde (+) o antes (−) empieza y termina la referencia respecto a la línea actual", "LoadXFromFile": "Cargar \"{0}\" desde archivo", + "CompareLoadSavedFile": "Cargar archivo guardado", "SaveCompareHtmlTitle": "Guardar archivo HTML de comparación", "PickMatroskaTrackX": "Elegir pista Matroska - {0}", "PickTransportStreamTrackX": "Elegir pista de transport stream - {0}", + "Chapters": "Capítulos", + "DvdVobFilesMissingX": "Faltan archivos VOB ({0}% encontrados)", "PickMp4TrackX": "Elegir pista MP4 - {0}", + "PickMxfTrackX": "Elegir pista MXF - {0}", + "PickMpegTrackX": "Elegir pista MPEG - {0}", "RosettaProperties": "Propiedades Timed Text Rosetta IMSC", "RosettaFontSize": "Tamaño de fuente (altura de fila)", "PropertyTimeBase": "Base de tiempo", @@ -1286,7 +1384,6 @@ "PropertyDefaultRegion": "Región predeterminada", "PropertyStyleAttributeName": "Nombre del atributo de estilo", "PropertyTimeCodeFormat": "Formato del código de tiempo", - "PropertyFileExtension": "Extensión de archivo", "PropertyTopOrigin": "Origen superior", "PropertyTopExtent": "Extensión superior", "PropertyBottomOrigin": "Origen inferior", @@ -1294,13 +1391,9 @@ "XProperties": "Propiedades de {0}", "EbuSaveOptions": { "Title": "Opciones de guardado EBU", - "GeneralSubtitleInformation": "Información general de subtítulos", "CodePageNumber": "Número de página de códigos", "DiskFormatCode": "Código de formato de disco", "DisplayStandardCode": "Código estándar de visualización", - "ColorRequiresTeletext": "¡Los colores requieren teletexto!", - "AlignmentRequiresTeletext": "¡La alineación requiere teletexto!", - "TeletextCharsShouldBe38": "¡El máx. de caracteres por fila para teletexto debería ser 38!", "CharacterCodeTable": "Tabla de caracteres", "LanguageCode": "Código de idioma", "OriginalProgramTitle": "Título original del programa", @@ -1317,7 +1410,6 @@ "MaxNumberOfDisplayableRows": "Máx. número de filas", "DiskSequenceNumber": "Número de secuencia de disco", "TotalNumberOfDisks": "Número total de discos", - "Import": "Importar...", "TextAndTimingInformation": "Información de texto y tiempos", "JustificationCode": "Código de justificación", "VerticalPosition": "Posición vertical", @@ -1334,11 +1426,6 @@ "Errors": "Errores", "ErrorsX": "Errores: {0}", "MaxLengthError": "La línea {0} excede la longitud máx. ({1}) por {2}: {3}", - "TextUnchangedPresentation": "Presentación sin cambios", - "TextLeftJustifiedText": "Texto justificado a la izquierda", - "TextCenteredText": "Texto centrado", - "TextRightJustifiedText": "Texto justificado a la derecha", - "UseBoxForOneNewLine": "Usar caja para solo un salto de línea", "MaxLengthErrorTeletextColored": "Línea {0}-{1}: el máximo de caracteres para texto en color de doble altura debería ser 36 (no {2})", "MaxLengthErrorTeletextWhite": "Línea {0}-{1}: el máximo de caracteres para texto blanco de doble altura debería ser 37 (no {2})", "MaxLengthErrorTeletextSingleHeight": "Línea {0}: el máximo de caracteres para texto blanco de altura simple debería ser 38 (no {1})", @@ -1363,22 +1450,29 @@ "FormattingDotDotDot": "Formato...", "ImageBasedSubtitleForEditDotDotDot": "Subtítulo basado en imagen para editar...", "ImageBasedSubtitleForOcrDotDotDot": "Subtítulo basado en imagen para OCR...", + "DvdSubtitlesDotDotDot": "Subtítulos de DVD (IFO/VOB)...", + "TitleImportDvd": "Importar subtítulos de DVD", + "DvdIfoFile": "Archivo IFO", + "DvdVobFiles": "Archivos VOB", + "DvdVideoStandard": "Estándar de vídeo", + "DvdStartRipping": "Iniciar extracción", + "DvdRippingAborted": "Extracción cancelada", + "DvdOpenIfoFile": "Abrir archivo IFO de DVD", + "DvdAddVobFiles": "Añadir archivos VOB", + "DvdIfoFiles": "Archivos IFO de DVD", + "DvdVobFileType": "Archivos VOB de DVD", + "DvdDropHint": "Abra un archivo IFO (VIDEO_TS\\VTS_01_0.IFO) o añada archivos VOB, o suéltelos aquí", + "DvdNotAnIfoFileX": "{0} no es un archivo IFO de DVD", + "DvdMenuIfoNoTitleSetsX": "No se encontraron conjuntos de títulos (VTS_xx_0.IFO) junto a {0}", + "DvdEncryptedXOfY": "{0} de los {1} paquetes de subtítulos siguen cifrados con CSS: estos archivos VOB se copiaron sin descifrar, por lo que algunas imágenes de subtítulos aparecerán corruptas.\n\nDescifre primero el DVD con una herramienta de extracción de DVD para obtener un resultado limpio.\n\n¿Continuar de todos modos?", "SplitTextAt": "Dividir texto en", "BlankLines": "Líneas en blanco", "OneLineIsOneSubtitle": "Una línea es un subtítulo", "TwoLinesAreOneSubtitle": "Dos líneas son un subtítulo", "ImportFilesDotDotDot": "Importar archivos...", "MultipleFiles": "Importar de varios archivos de texto (un archivo = un subtítulo)", - "ImportOptions": "Opciones de importación", - "AutoSplitText": "Dividir texto automáticamente", - "LineMode": "Modo de línea", "MaxLineLength": "Longitud máx. de línea", - "MaxLinesPerSubtitle": "Máx. líneas por subtítulo", - "MinGapBetweenSubtitles": "Espacio mín. entre subtítulos", "MergeShortLines": "Combinar líneas cortas", - "RemoveLinesWithoutLetters": "Eliminar líneas sin letras", - "SplitAtEndCharsSetting": "Dividir en caracteres finales", - "TakeTimeFromCurrentFile": "Tomar tiempo del archivo actual", "Fixed": "Fijo", "NumberOfSubtitlesX": "Número de subtítulos: {0}", "NumberOfSubtitlesXForcedY": "Número de subtítulos: {0} ({1} forzados)", @@ -1390,14 +1484,18 @@ "ForcedAlignerProgress": "Alineando... ventana {0} de {1}, {2} de {3} líneas", "ForcedAlignerSetupTitle": "Alinear códigos de tiempo con alineador forzado", "ForcedAlignerSetupIntro": "Un alineador forzado hace coincidir con el audio el texto del subtítulo que ya tiene, sin transcribirlo antes. Los vídeos largos se alinean por fragmentos, así que sirve cualquier duración.", + "ForcedAlignerEndsFromSpeech": "Establecer tiempos finales a partir de la voz aislada (lento)", + "ForcedAlignerEndsFromSpeechHint": "Un alineador forzado encuentra dónde empieza una línea, no dónde termina, por lo que los tiempos finales normalmente se basan en el tiempo de lectura. Con esta opción activada, primero se eliminan la música y los efectos de sonido del audio y cada línea termina donde su voz se silencia. Tarda aproximadamente lo mismo que el propio vídeo con una GPU, y muchas veces más sin ella.", + "ForcedAlignerIsolatingSpeech": "Aislando la voz... {0}", + "ForcedAlignerIsolatingSpeechFailed": "No se pudo aislar la voz; los tiempos finales se establecieron a partir del tiempo de lectura.", "ForcedAlignerModel": "Modelo del alineador", - "ForcedAlignerDownloadEngine": "Descargar / actualizar motor..." + "ForcedAlignerDownloadEngine": "Descargar / actualizar motor...", + "ForcedAlignerEstimatedXOfY": "{0} de {1} líneas no se pudieron alinear y se colocaron según el tiempo de lectura; sus códigos de tiempo son solo estimados. Probablemente el guion es más largo que lo que se habla en el vídeo." }, "Export": { "ExportImagesProfiles": "Exportar perfiles de imágenes", "LeftRightMargin": "Margen izq./der.", "TopBottomMargin": "Margen sup./inf.", - "TitleExportBluRaySup": "Exportar Blu-ray (sup)", "LineSpacingPercent": "Espaciado de línea %", "PaddingLeftRight": "Relleno izq./der.", "PaddingTopBottom": "Relleno sup./inf.", @@ -1438,10 +1536,21 @@ "TitleExportDCinemaInteropPng": "D-Cinema interop/png", "TitleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", "ImageBasedSubtitleSaved": "Subtítulo basado en imágenes guardado", - "TitleExportBdnXml": "Exportar BDN/xml", "TitleExportWebVttThumbnails": "Exportar WebVTT (miniaturas)", "FullFrameImage": "Imagen de fotograma completo", "FullFrameImageHint": "Hacer que cada imagen tenga el tamaño del fotograma del vídeo, con el subtítulo en su sitio", + "Stereo3D": "3D", + "Stereo3DHint": "Para vídeo 3D: dibujar el subtítulo una vez en la mitad del fotograma de cada ojo", + "HalfSideBySide": "Medio lado a lado", + "HalfTopBottom": "Medio arriba/abajo", + "Depth3D": "Profundidad", + "Depth3DHint": "Cuánto sobresale el subtítulo de la pantalla: un valor positivo lo acerca, uno negativo lo aleja", + "Plane3D": "Plano 3D", + "Plane3DHint": "Dar a cada subtítulo la profundidad que un Blu-ray 3D almacena para él, a partir de un archivo de plano 3D (.ofs) creado por BD3D2MK3D u OFSExtractor. Se usa Profundidad donde el plano 3D no tiene ninguna", + "OpenPlane3DTitle": "Abrir archivo de plano 3D", + "UnableToLoadPlane3DX": "No se pudo cargar el plano 3D: {0}", + "Plane3DXDepthYToZ": "{0} (profundidad {1} a {2})", + "Plane3DXNoDepth": "{0} (sin valores de profundidad)", "TextEffect": "Efecto de texto", "TextEffectSettingsTitle": "Ajustes del efecto de texto", "TextEffectPreset": "Preajuste", @@ -1473,13 +1582,10 @@ "Statistics": { "Title": "Estadísticas", "TitleWithFileName": "Estadísticas - {0}", - "GeneralStatistics": "Estadísticas generales", - "MostUsed": "Más usado...", "MostUsedLines": "Líneas más usadas", "MostUsedWords": "Palabras más usadas", "NothingFound": "No se encontró nada", "NumberOfLinesX": "Número de líneas de subtítulos: {0:#,##0}", - "NumberOfFilesX": "Número de archivos de subtítulos: {0:#,##0}", "LengthInFormatXinCharactersY": "Número de caracteres como {0}: {1:#,###,##0}", "NumberOfCharactersInTextOnly": "Caracteres en solo texto: {0:#,###,##0}", "TotalDuration": "Duración total de todos los subtítulos: {0:#,##0}", @@ -1520,7 +1626,6 @@ "GapMaximum": "Espacio - máximo: {0:#,##0} ms", "GapAverage": "Espacio - medio: {0:#,##0.##} ms", "GapExceedingMinimum": "Espacio - bajo el mín. ({0:#,##0} ms): {1} ({2:0.00}%)", - "Export": "Exportar...", "Subtitles": "Subtítulos", "Words": "Palabras", "TotalDurationShort": "Duración total", @@ -1550,7 +1655,22 @@ "RestoreAutoBackupFile": "Restaurar archivo de copia de seguridad", "RestoreXFromY": "¿Desea restaurar \"{0}\" desde {1}?", "DeleteAllSubtitleBackups": "¿Desea eliminar todos los archivos de copia de seguridad?", - "DeleteAll": "Eliminar todo" + "DeleteAll": "Eliminar todo", + "Subtitles": "Subtítulos", + "SettingsBackupInfo": "Se hace una copia de seguridad de Settings.json cuando se inicia Subtitle Edit, como máximo una vez cada {0} día(s) y solo si los ajustes han cambiado. Se conservan las {1} copias más recientes.", + "SettingsBackupInfoEveryStart": "Se hace una copia de seguridad de Settings.json cada vez que se inicia Subtitle Edit, si los ajustes han cambiado. Se conservan las {0} copias más recientes.", + "SettingsBackupOff": "La copia de seguridad automática de los ajustes está desactivada (Opciones → Ajustes → Archivo).", + "LastSettingsBackupX": "Última copia de seguridad: {0}", + "NoSettingsBackupsYet": "Aún no hay copias de seguridad de los ajustes", + "OpenSettingsBackupFolder": "Abrir carpeta de copias de seguridad de ajustes", + "BackUpSettingsNow": "Hacer copia ahora", + "SettingsBackedUp": "Se hizo una copia de seguridad de los ajustes actuales.", + "RestoreSettings": "Restaurar ajustes", + "RestoreSettingsFromX": "¿Desea reemplazar sus ajustes actuales por la copia de seguridad del {0}?\n\nPrimero se hará una copia de seguridad de sus ajustes actuales. Algunos cambios solo surten efecto después de reiniciar Subtitle Edit.", + "SettingsRestored": "Se restauraron los ajustes. Reinicie Subtitle Edit para que todos los cambios surtan efecto.", + "SettingsRestoreFailed": "No se pudieron restaurar los ajustes: {0}", + "SettingsBackupNotValid": "la copia de seguridad no es un archivo de ajustes válido, por lo que se conservaron sus ajustes actuales", + "DeleteAllSettingsBackups": "¿Desea eliminar todos los archivos de copia de seguridad de ajustes?" }, "PropertiesDCinema": { "Title": "Propiedades D-Cinema SMPTE", @@ -1564,22 +1684,16 @@ "EditRate": "Tasa de edición", "TimeCodeRate": "Tasa de código de tiempo", "StartTime": "Tiempo de inicio", - "Font": "Fuente", "FontId": "ID de fuente", "FontUri": "URI de fuente", - "Generate": "Generar", - "FontColor": "Color de fuente", "ChooseColor": "Elegir color", "FontEffect": "Efecto de fuente", "EffectColor": "Color del efecto", - "FontSize": "Tamaño de fuente", "TopBottomMargin": "Margen sup./inf.", "FadeUpTime": "Tiempo de aparición", "FadeDownTime": "Tiempo de desaparición", - "Frames": "Fotogramas", "ZPosition": "Posición Z", - "ZPositionHelp": "Los números positivos alejan el texto, los negativos lo acercan; si la posición Z es cero, es 2D", - "Export": "Exportar..." + "ZPositionHelp": "Los números positivos alejan el texto, los negativos lo acercan; si la posición Z es cero, es 2D" } }, "Edit": { @@ -1642,7 +1756,6 @@ "SelectionIntersect": "Intersección con la selección" }, "MultipleReplace": { - "Title": "Reemplazo múltiple", "EditRule": "Editar regla", "NewRule": "Nueva regla", "EditCategory": "Editar categoría", @@ -1659,24 +1772,23 @@ "FindWhat": "Buscar", "DescriptionOptional": "Descripción (opcional)", "InvalidRegularExpressionX": "Expresión regular no válida: {0}", - "RegularExpressionTooSlowX": "La expresión regular se abandonó tras {0} segundos: se omite la regla, pruebe con un patrón más sencillo" + "RegularExpressionTooSlowX": "La expresión regular se abandonó tras {0} segundos: se omite la regla, pruebe con un patrón más sencillo", + "MoveToCategory": "Mover a categoría" }, "Find": { "SearchTextWatermark": "Buscar texto...", "WholeWord": "Palabra completa", - "CaseSensitive": "Sensible a mayúsculas", - "CaseInsensitive": "No sensible a mayúsculas", "FindPrevious": "Buscar _anterior", "FindNext": "_Buscar siguiente", "ReplaceAndFindNext": "_Reemplazar y buscar siguiente", "ReplaceAll": "Reemplazar _todo", - "ReplaceTitle": "Reemplazar", - "ReplaceWith": "Reemplazar con", "ReplaceTextWatermark": "Reemplazar con...", "ReplaceIn": "Reemplazar/buscar en", "ReplaceInTextAndOriginal": "Texto y texto original", "ReplaceInTextOnly": "Solo el texto", - "ReplaceInOriginalOnly": "Solo el texto original" + "ReplaceInOriginalOnly": "Solo el texto original", + "ReplacedOneOccurrence": "Se reemplazó una coincidencia", + "ReplacedXOccurrences": "Se reemplazaron {0} coincidencias" }, "NoSubtitleSelected": "No hay ningún subtítulo seleccionado", "PleaseSelectExactlyOneSubtitle": "Seleccione exactamente un subtítulo." @@ -1687,6 +1799,7 @@ "XLinesYSubtitles": "{0} líneas, {1} subtítulos", "XLinesYSubtitlesZErrors": "{0} líneas, {1} subtítulos, {2} error(es)", "CouldNotParseAsX": "No se pudo analizar como {0}", + "ReadAsXUseAsY": "El origen no se pudo leer como {1}, pero sí como {0}.\n¿Usar las líneas y seguir guardando como {1}?", "SelectedXCharactersYLines": "Seleccionado: {0} caracteres en {1} línea(s)", "ReplacedXOccurrences": "{0} coincidencia(s) reemplazada(s)", "InvalidRegularExpression": "Expresión regular no válida", @@ -1701,7 +1814,6 @@ "AiReview": { "Title": "Revisión con IA", "Review": "Revisar", - "Stop": "Parar", "EditPrompt": "Editar prompt...", "EditPromptTitle": "Editar prompt de revisión", "PromptInfo": "Instrucciones enviadas al modelo: {language} se sustituye por el idioma del subtítulo.", @@ -1712,7 +1824,6 @@ "ReviewingLineXOfY": "Revisando la línea {0} de {1}...", "ReviewDone": "Revisión finalizada - {0} sugerencias en {1} líneas", "NoIssuesFound": "No se encontraron problemas", - "CategoryAll": "Todas", "CategorySpelling": "Ortografía", "CategoryGrammar": "Gramática", "CategoryPunctuation": "Puntuación", @@ -1724,8 +1835,23 @@ "LargeChangeWarning": "Cambio grande - parece una reescritura, revise con atención", "MismatchWarning": "No se parece al original: puede pertenecer a otra línea", "EngineError": "No se pudo contactar con el motor de IA: {0}", - "SetupHint": "Elija primero un motor y un modelo en Herramientas -> Revisión con IA.", - "PlayCurrentLineHint": "Reproducir la línea seleccionada en el reproductor de vídeo y pausar al final (también con doble clic en una línea)" + "PlayCurrentLineHint": "Reproducir la línea seleccionada en el reproductor de vídeo y pausar al final (también con doble clic en una línea)", + "EditAfterHint": "Haga clic en el texto de la fila seleccionada para editar la corrección antes de aplicarla (Enter guarda, Escape cancela)", + "Template": "Plantilla", + "TemplatePlaceholder": "Elija una plantilla para reemplazar la indicación", + "TemplateStandard": "Revisión estándar", + "TemplateSpeechToText": "Limpieza de voz a texto", + "TemplateMachineTranslation": "Corrección de traducción automática", + "TemplateSdh": "SDH / deficientes auditivos", + "ReferenceContext": "Contexto de referencia", + "ReferenceContextInfo": "Opcional. Nombres, personajes, glosario, sinopsis o notas de estilo: el modelo lo trata como la autoridad para nombres y términos. Se envía con cada lote.", + "ReferenceContextPlaceholder": "Nombres: Kaito, tía Mei, Dr. Hollis\nTérminos: Shinkansen, núcleo de curvatura\nSinopsis: Kaito viaja a Tokio para encontrar a su padre desaparecido.", + "GenerateContext": "Generar con IA", + "GenerateContextHint": "Deje que el motor de IA seleccionado lea el subtítulo y redacte nombres, términos y una sinopsis; revise el resultado antes de usarlo", + "GeneratingContextPartXOfY": "Leyendo parte {0} de {1}...", + "GeneratingContextSynopsis": "Escribiendo sinopsis...", + "ReplaceContextQuestion": "¿Reemplazar el contexto de referencia actual?", + "NoContextGenerated": "El motor de IA no devolvió información de referencia utilizable." }, "AiAssistant": { "Title": "Asistente de IA", @@ -1742,7 +1868,6 @@ "Hint": "Asistente de IA para esta línea", "ShowReasoning": "Mostrar el razonamiento del modelo" }, - "PickAlignmentTitle": "Elegir alineación", "RemoveUnicodeCharacters": { "Title": "Eliminar/reemplazar caracteres Unicode", "CharactersFoundX": "Caracteres Unicode encontrados: {0}", @@ -1752,31 +1877,23 @@ "PickFontNameInstalledFonts": "Fuentes instaladas", "PickFontNameCollectedFonts": "Fuentes recopiladas", "ColorPickerTitle": "Elegir color", + "ColorPickerBrightness": "Brillo", "FilterLayersTitle": "Filtrar capas para visualización", "FilterLayersHideFromWaveform": "Ocultar de forma de onda/espectrograma", "FilterLayersHideFromSubtitleGrid": "Ocultar de la cuadrícula", "FilterLayersHideFromVideoPreview": "Ocultar de la vista previa de vídeo", "PickSubtitleFormat": "Elegir formato de subtítulo", "PickSubtitleFormatImageBasedNoPreview": "Formato de subtítulo basado en imagen.\nLos mapas de bits se generan durante la conversión: no hay vista previa del texto.", - "PickLayerTitle": "Establecer capa", "RecentColors": "Colores recientes", "FixCommonErrors": { - "Title": "Corregir errores comunes", - "Step1": "Paso 1/2 - Elegir qué errores corregir", - "WhatToFix": "Qué corregir", - "Example": "Ejemplo", - "SelectAll": "Seleccionar todo", - "InverseSelection": "Invertir selección", "Back": "< _Atrás", "Next": "_Siguiente >", - "Step2": "Paso 2/2 - Verificar correcciones", "Fixes": "Correcciones", "RuleDetailsDotDotDot": "Detalles de la regla...", "ShowOnlyThisRule": "Mostrar solo las correcciones de esta regla", "AppliedRulesForLineX": "Regla(s) aplicada(s) a la línea {0}", "RuleX": "Regla: {0}", "Log": "Registro", - "Function": "Función", "RemovedEmptyLine": "Eliminar línea vacía", "RemovedEmptyLineAtTop": "Eliminar línea vacía superior", "RemovedEmptyLineAtBottom": "Eliminar línea vacía inferior", @@ -1797,13 +1914,13 @@ "RemoveLineBreaksPixelWidth": "Unir subtítulos que caben en una línea (ancho píxeles)", "FixUppercaseIInsideLowercaseWords": "Corregir 'i' mayúscula dentro de palabras en minúscula (error OCR)", "FixDoubleApostrophes": "Corregir apóstrofes dobles ('') a comilla simple (\")", + "FixMisreadQuotes": "Corregir apóstrofos leídos como comillas dobles (OCR, inglés)", "AddPeriods": "Añadir punto tras líneas si la siguiente empieza en mayúscula", "StartWithUppercaseLetterAfterParagraph": "Empezar con mayúscula tras párrafo", "StartWithUppercaseLetterAfterPeriodInsideParagraph": "Empezar con mayúscula tras punto dentro del párrafo", "StartWithUppercaseLetterAfterColon": "Empezar con mayúscula tras dos puntos/punto y coma", "FixLowercaseIToUppercaseI": "Corregir 'i' minúscula sola a 'I' (Inglés)", "FixCommonOcrErrors": "Corregir errores de OCR comunes (usando lista de reemplazo)", - "CommonOcrErrorsFixed": "Errores OCR comunes corregidos: {0}", "RemoveSpaceBetweenNumber": "Eliminar espacio entre números", "BreakDialogsOnOneLine": "Dividir diálogos en una sola línea", "RemoveDialogFirstInNonDialogs": "Eliminar guion inicial en no-diálogos", @@ -1820,18 +1937,17 @@ "FixCommasExample": ",, -> ,", "RemoveLineBreaksExample": "Foo
bar! -> Foo bar!", "FixDoubleApostrophesExample": "''Has double single quotes'' -> \"Has single double quote\"", + "FixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "AddPeriodsExample": "Hello world -> Hello world.", "StartWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: Foobar!", "StartWithUppercaseLetterAfterPeriodInsideParagraphExample": "Hello there! how are you? -> Hello there! How are you?", "StartWithUppercaseLetterAfterColonExample": "Speaker: hello world! -> Speaker: Hello world!", "RemoveHyphensSingleLineExample": "- Foobar. -> Foobar.", "Fix3PlusLinesExample": "Foo
bar
baz! -> Foo bar baz!", - "XMissingQuotesAdded": "Comillas faltantes añadidas: {0}", "Fix3PlusLine": "Corregir subtítulo con más de dos líneas", "Fix3PlusLines": "Corregir subtítulos con más de dos líneas", "Analysing": "Analizando...", "NothingToFix": "Nada que corregir :)", - "FixesFoundX": "Correcciones encontradas: {0}", "XFixesApplied": "Correcciones aplicadas: {0}", "XFixesYSelected": "{0} correcciones - {1} seleccionadas", "NothingFixableBut": "Nada pudo corregirse automáticamente. El subtítulo tiene errores; ver registro.", @@ -1840,7 +1956,6 @@ "FixFirstLetterToUppercaseAfterParagraph": "Corregir primera letra a mayúscula tras párrafo", "MergeShortLine": "Combinar línea corta (una frase)", "MergeShortLineAll": "Combinar línea corta (todo menos diálogos)", - "UnbreakShortLinePixelWidth": "Unir línea corta (ancho píxeles)", "BreakLongLine": "Dividir línea larga", "FixLongDisplayTime": "Corregir tiempo largo", "FixInvalidItalicTag": "Corregir etiqueta cursiva inválida", @@ -1863,7 +1978,6 @@ "FixUppercaseIInsideLowercaseWord": "Corregir 'i' mayúscula en palabra en minúscula", "FixMissingPeriodAtEndOfLine": "Añadir punto faltante al final de línea", "RefreshFixes": "Actualizar correcciones disponibles", - "ApplyFixes": "Aplicar correcciones y cerrar", "AutoBreak": "Auto &div", "Unbreak": "&Unir", "FixDoubleDash": "Corregir '--' -> '...'", @@ -1882,8 +1996,6 @@ "FixSpaceBetweenNumbersExample": "1 100 -> 1100", "FixDialogsOneLineExample": "¡Hola Juan! - ¡Hola Ana! -> ¡Hola Juan!
- ¡Hola Ana!", "RemoveDialogFirstInNonDialogsExample": "- ¿Cómo estás? -> ¿Cómo estás?", - "SelectDefault": "Seleccionar predet.", - "SetDefault": "Establecer correcciones actuales como predet.", "FixContinuationStyleX": "Corregir estilo de continuación: {0}", "FixUnnecessaryLeadingDots": "Eliminar puntos iniciales innecesarios", "FixCommonErrorsProfiles": "Perfiles de corrección de errores", @@ -1891,7 +2003,6 @@ "SearchRulesDotDotDot": "Buscar reglas...", "GoToApplyFixes": "Ir a aplicar correcciones", "BackToFixList": "Volver a la lista", - "ApplyFixesAndClose": "Aplicar correcciones y cerrar", "FixCommonOcrErrorsStep2": "Corregir errores, paso 2 (aplicar)", "FixCommonOcrErrorsStep2FixesFoundX": "Corregir errores, paso 2 - Encontrados: {0}", "Action": "Acción", @@ -1904,18 +2015,11 @@ "AdjustDurations": { "Title": "Ajustar duraciones", "AdjustVia": "Ajustar vía", - "Seconds": "Segundos", - "Percent": "Porcentaje", "Recalculate": "Recalcular", "AddSeconds": "Añadir segundos", - "SetAsPercent": "Establecer como porcentaje de duración", "Note": "Nota: El tiempo final no se superpondrá al inicio del siguiente texto", "Fixed": "Fijo", - "Milliseconds": "Milisegundos", "ExtendOnly": "Solo extender", - "EnforceDurationLimits": "Aplicar límites de duración mínima y máxima", - "CheckShotChanges": "No extender más allá de los cambios de plano", - "BatchCheckShotChanges": "Respetar cambios de plano (si existen)", "RecalculateRequiresOcrNote": "Recalcular no está disponible — uno o más subtítulos no tienen texto OCR. Ejecute primero el OCR." }, "ApplyDurationLimits": { @@ -1923,6 +2027,8 @@ "FixMinDurationMs": "Corregir duración mínima (ms)", "DoNotGoPastShotChange": "No pasar del cambio de plano", "FixMaxDurationMs": "Corregir duración máxima (ms)", + "FixMinDurationFrames": "Corregir duración mínima (fotogramas)", + "FixMaxDurationFrames": "Corregir duración máxima (fotogramas)", "MinimumDurationMilliseconds": "Duración mínima (milisegundos):", "MaximumDurationMilliseconds": "Duración máxima (milisegundos):", "MaxDurationShouldBeHigherThanMinDuration": "La duración máxima debe ser mayor que la mínima", @@ -1942,12 +2048,8 @@ }, "BeautifyTimeCodes": { "Title": "Embellecer códigos de tiempo", - "BeautifySettings": "Ajustes de embellecimiento", "SnapToFrames": "Ajustar a fotogramas", - "FrameGap": "Espacio de fotogramas", "MinDuration": "Duración mín. (ms)", - "ShotChangeThreshold": "Umbral de cambio de plano (ms)", - "ShotChangeOffset": "Desfase de cambio de plano (fotogramas)", "Original": "Original", "Beautified": "Embellecido", "SubtitlesCount": "Subtítulos", @@ -1976,13 +2078,80 @@ "TimeCodesExtractFailed": "No se pudieron leer los códigos de tiempo del vídeo", "TimeCodesHint": "Ajusta las entradas/salidas a los tiempos reales de los fotogramas del vídeo en lugar de suponer una tasa de fotogramas constante. Requiere leer todo el vídeo una vez; el resultado se guarda en caché." }, + "ImproveTimeCodes": { + "Title": "Mejorar códigos de tiempo (alineación forzada)", + "Aligner": "Alineador", + "AlignerHint": "El modelo que escucha cada línea en el audio. Las mejores opciones para el idioma del subtítulo aparecen primero.", + "MaxShift": "Desplazamiento máximo (segundos)", + "MaxShiftHint": "Cuánto puede estar desincronizado el subtítulo. Una línea cuyo inicio se movería más se deja como está y se marca. Sea cual sea el valor, una línea que quiera moverse más de medio segundo más que las líneas que la rodean no se mueve a ciegas: sigue a sus vecinas si todas se movieron y, en caso contrario, se ofrece desmarcada para que la revise.", + "AdjustStartTimes": "Ajustar tiempos de inicio", + "AdjustEndTimes": "Ajustar tiempos de fin", + "IsolateSpeech": "Aislar la voz primero (lento)", + "IsolateSpeechHint": "Elimina la música y los efectos de sonido antes de alinear, para que el alineador solo oiga el diálogo. Ayuda en líneas dichas sobre música alta o acción, pero tarda aproximadamente lo mismo que el propio audio con una GPU, y muchas veces más sin ella.", + "IsolatingSpeech": "Aislando la voz... (esto tarda un poco)", + "IsolateSpeechFailed": "No se pudo aislar la voz: se alineó con el audio original en su lugar.", + "CheckWithSpeechToText": "Comprobar con voz a texto", + "CheckWithSpeechToTextHint": "Transcribe también el audio y comprueba cada movimiento con el lugar donde realmente se oyeron las palabras. Los movimientos grandes que confirma la voz se marcan automáticamente, y los que se alejan de donde se oye una línea se dejan desmarcados para que los revise. También muestra cuánto de cada línea se oyó: un porcentaje bajo significa que el texto difiere de lo que se dice. Un subtítulo más desincronizado que el desplazamiento máximo (un desfase constante, una deriva por una tasa de fotogramas distinta o saltos donde se cortaron escenas) se sincroniza primero con las palabras oídas. Usa Crisp ASR Parakeet, que tarda unos minutos para un largometraje con una GPU.", + "CheckWithSpeechToTextNotAvailableX": "La comprobación con voz a texto no está disponible para {0}", + "TranscribingToCheck": "Transcribiendo para comprobar la alineación...", + "SpeechToTextFailed": "La voz a texto falló: los códigos de tiempo no se comprobaron con ella.", + "SpeechToTextX": "Voz a texto: {0}", + "SpeechToTextConfirmedXDisputedY": "Voz: {0} confirmadas, {1} discutidas", + "HardlyHeardX": "La voz a texto solo oyó el {0}% de las palabras del subtítulo. ¿Está el subtítulo en el idioma hablado? El alineador no puede ubicar una traducción.", + "Heard": "Oído", + "HeardHint": "Cuánto de la línea oyó la voz a texto. Un porcentaje bajo significa que el texto difiere de lo que se dice, que es donde es más probable que el alineador se equivoque.", + "StatusConfirmedBySpeech": "Confirmado por la voz", + "StatusDisputedBySpeech": "Oído donde estaba", + "StatusMovedWithSync": "Movido con la sincronización", + "SyncedFirstXY": "Sincronizado primero: {0} s al inicio, {1} s al final", + "ShowSpeechOnly": "Mostrar solo voz", + "ShowSpeechOnlyHint": "Dibuja la forma de onda alineada a partir del audio sin música ni efectos de sonido; la forma de onda original queda como está, para comparar. Disponible una vez aislada la voz, aquí o con \"Mostrar solo voz\" en la forma de onda de la ventana principal.", + "Align": "Alinear", + "Original": "Original", + "Aligned": "Alineado", + "Intro": "Elija un alineador y pulse \"Alinear\" para escuchar cada línea en el audio y ajustar sus códigos de tiempo.", + "ExtractingAudio": "Extrayendo audio...", + "AligningBatchXOfY": "Alineando... lote {0} de {1}", + "ExtractAudioFailed": "No se pudo extraer el audio con ffmpeg.", + "ModelWillBeDownloaded": "Se descargará {0}", + "SummaryXRetimedYKeptZSkipped": "Reajustadas: {0} · Conservadas: {1} · Sin voz: {2}", + "MeanShiftX": "Desplazamiento medio: {0} ms", + "ToCheckX": "Por revisar: {0}", + "LargeMovesToCheckX": "{0} línea(s) se moverían mucho por sí solas y se dejan desmarcadas: escúchelas (F5 reproduce la línea alineada, Shift+F5 la original) y marque las correctas.", + "LinesToCheckX": "{0} línea(s) se dejan desmarcadas para revisar: escúchelas (F5 reproduce la línea alineada, Shift+F5 la original) y marque las correctas.", + "ChangeXOfY": "Cambio {0} de {1}", + "PreviousChange": "Cambio anterior", + "NextChange": "Cambio siguiente", + "StartShift": "Inicio", + "EndShift": "Fin", + "StatusRetimed": "Reajustado", + "StatusMovedWithNeighbours": "Movido con sus vecinas", + "StatusLargeMoveUnconfirmed": "Movimiento grande: escuche y marque para aplicar", + "StatusUnchanged": "Ya en su sitio", + "StatusNoSpeech": "Sin voz", + "StatusShiftTooLarge": "Conservado: desplazamiento demasiado grande", + "StatusFailed": "Conservado: el alineador falló", + "StatusAdjustedByHand": "Ajustado a mano", + "AlignedWaveformHint": "Arrastre una línea para moverla, o arrastre sus bordes para cambiar su inicio o fin.", + "PlayLine": "Reproducir línea", + "UndoAdjustment": "Deshacer ajuste", + "PlayPause": "Reproducir / pausar", + "PlayAligned": "Alineado", + "PlayAlignedHint": "Reproducir la línea seleccionada con sus códigos de tiempo alineados", + "Apply": "Aplicar", + "ApplyHint": "Desmarque una línea para conservar sus códigos de tiempo originales. Haga doble clic en una línea para reproducirla. Las líneas también se pueden mover o redimensionar en la forma de onda alineada." + }, "BeautifyTimeCodesProfile": { "Title": "Editar perfil de embellecimiento de códigos de tiempo", "LoadPreset": "Cargar preajuste", "PresetDefault": "Predeterminado", "PresetNetflix": "Netflix", "PresetSdi": "SDI", - "General": "General", + "SaveAsProfile": "Guardar como perfil...", + "DeleteProfile": "Eliminar perfil", + "ProfileName": "Nombre del perfil", + "OverwriteProfileX": "Ya existe un perfil llamado \"{0}\". ¿Sobrescribirlo?", + "DeleteProfileX": "¿Eliminar el perfil \"{0}\"?", "Gap": "Espacio", "GapSuffix": "fotogramas (también actualiza los campos de espacio distintos de cero de abajo)", "Milliseconds": "ms", @@ -2011,9 +2180,12 @@ "HintChaining": "Cómo tratar los subtítulos que casi se tocan: extenderlos juntos o separarlos, según si hay un cambio de plano en medio." }, "BridgeGaps": { - "Title": "Unir espacios", "BridgeGapsSmallerThan": "Unir espacios menores de (ms)", "MinGap": "Espacio mínimo (ms)", + "BridgeGapsSmallerThanFrames": "Unir espacios menores que (fotogramas)", + "MinGapFrames": "Espacio mínimo (fotogramas)", + "CalculateBridgeGapsSmallerThanDotDotDot": "Calcular límite de unión de espacios a partir de una tasa de fotogramas...", + "UseXMsAsBridgeGapsSmallerThan": "¿Unir espacios menores que \"{0}\" milisegundos?", "NumberOfSmallGapsBridgedX": "Número de espacios pequeños unidos: {0}", "PercentFoPrevious": "Espacio para el anterior (%)", "GapChange": "Cambio de espacio" @@ -2025,8 +2197,6 @@ "SortBy": { "Title": "Ordenar subtítulos", "SortOrder": "Orden", - "SortByNumber": "Número", - "SortByStartTime": "Tiempo de inicio", "SortByEndTime": "Tiempo de fin" }, "BatchConvert": { @@ -2049,6 +2219,7 @@ "AddColor": "Añadir color", "DeleteLinesWithSpecificActorsOrStyles": "Eliminar líneas con actores o estilos (separados por coma)", "UseSourceStylesIfPossible": "Usar estilos de origen si es posible", + "KeepSourceEmbeddedFonts": "Conservar fuentes incrustadas del origen (pie)", "EditStyles": "Editar estilos", "EditProperties": "Editar propiedades", "EditAttachments": "Editar adjuntos", @@ -2069,7 +2240,6 @@ "AssaChangeStyleFromStyle": "Cambiar estilo de", "AssaChangeStyleToStyle": "a", "AssaChangeStyleImportStyle": "Importar estilo...", - "AssaChangeStyleImportedX": "Importado: {0}", "AssaChangeStyleTrimUnusedStyles": "Eliminar estilos no usados", "AssaChangeStylePropertiesTitle": "Cambiar propiedades de los estilos", "AssaChangeStylePropertiesInfo": "Cambia los campos elegidos en todos los estilos del archivo, sin tocar los estilos en sí.", @@ -2081,13 +2251,52 @@ "ConvertColorsToDialogReBreakLines": "Volver a dividir las líneas", "SnapTimeCodesToFramesInfo": "Redondea cada tiempo de inicio y fin al fotograma más cercano. La tasa de fotogramas se lee de un archivo de vídeo con el mismo nombre que el archivo de subtítulos, salvo que se elija una tasa de fotogramas fija.", "AddFolderDotDotDot": "Añadir carpeta...", + "AddFolderRecursiveDotDotDot": "Añadir carpeta recursivamente...", "SelectFolderToConvert": "Seleccione la carpeta con los archivos que convertir", "IncludeSubfolders": "Incluir subcarpetas al añadir una carpeta", + "VideoFilesWhenAddingFolder": "Archivos de vídeo (mkv, mp4, ts...) al añadir una carpeta", + "VideoFilesAsk": "Preguntar", + "VideoFilesInclude": "Añadir sus pistas de subtítulos", + "VideoFilesSkip": "Omitir", + "FolderContainsXVideoFiles": "La carpeta contiene {0} archivo(s) de vídeo (mkv, mp4, ts...).\n\n¿Añadir también sus pistas de subtítulos incrustadas, o solo los archivos de subtítulos?", + "AddVideoFiles": "Añadir archivos de vídeo", + "SkipVideoFiles": "Solo archivos de subtítulos", + "DoNotAskAgainVideoFiles": "No volver a preguntar (cambiar en los ajustes de conversión por lotes)", + "SettingsSectionOutput": "Salida", + "SettingsSectionAddingFiles": "Añadir archivos", + "SettingsSectionImageBasedSubtitles": "Subtítulos basados en imágenes (OCR)", + "SettingsSectionOther": "Otros", "KeepSourceFileTimestamp": "Mantener la fecha/hora del archivo de origen en los archivos de salida", - "ScanningFolderX": "Analizando {0}..." + "PreventSleepWhileConverting": "Impedir que el equipo entre en suspensión durante la conversión", + "ScanningFolderX": "Analizando {0}...", + "TransportStreamSettings": "Ajustes de Transport Stream", + "TransportStreamSettingsDotDotDot": "Ajustes de Transport Stream...", + "TransportStreamSettingsInfo": "Se aplica a las pistas de subtítulos extraídas de archivos Transport Stream (.ts/.m2ts). La posición y el tamaño del vídeo solo afectan a las pistas de imagen DVB exportadas a un formato basado en imágenes.", + "TransportStreamOverrideXPosition": "Reemplazar posición X original", + "TransportStreamOverrideYPosition": "Reemplazar posición Y original", + "TransportStreamOverrideVideoSize": "Reemplazar tamaño de vídeo original", + "TransportStreamBottomMargin": "Margen inferior", + "TransportStreamFileNameEnding": "Final del nombre de archivo", + "TransportStreamFileNameEndingInfo": "Se añade antes de la extensión de cada pista extraída. Déjelo vacío para usar el postfijo de idioma habitual.", + "TransportStreamOnlyTeletext": "Solo teletexto", + "TransportStreamGetSizeFromVideo": "Obtener tamaño del vídeo...", + "TwoLetterLanguageCodeUppercase": "Código de idioma de dos letras (mayúsculas)", + "ThreeLetterLanguageCodeUppercase": "Código de idioma de tres letras (mayúsculas)", + "FormatContainsDotDotDot": "El formato contiene...", + "ExtensionIsDotDotDot": "La extensión es...", + "StatusIsError": "El estado es error", + "ForcedTracksOnly": "Solo pistas forzadas", + "XConvertedYFailedInZ": "{0:#,###,##0} convertidos, {1:#,###,##0} fallidos en {2}", + "XNotProcessed": "{0:#,###,##0} sin procesar", + "RemoveUnicodeControlCharactersTitle": "Eliminar caracteres de control Unicode", + "RemoveUnicodeControlCharactersInfo": "Elimina del texto los caracteres invisibles de control de dirección Unicode (LRM, RLM, LRE, RLE, PDF, LRO y RLO) y reemplaza los espacios de no separación por espacios normales.", + "Preset": "Preajuste", + "SavePresetDotDotDot": "Guardar preajuste...", + "DeletePreset": "Eliminar preajuste", + "PresetName": "Nombre del preajuste", + "DeletePresetX": "¿Eliminar el preajuste \"{0}\"?" }, "ChangeCasing": { - "Title": "Cambiar mayúsculas/minúsculas", "FixNames": "Corregir nombres", "NamesX": "Nombres: {0:#,##0}", "HitsX": "Coincidencias: {0:#,##0}", @@ -2098,9 +2307,7 @@ "AllUppercase": "Todo en mayúsculas", "AllLowercase": "Todo en minúsculas" }, - "ChangeFormatting": { - "Title": "Cambiar formato" - }, + "ChangeFormatting": {}, "ConvertActors": { "Title": "Convertir actores", "ConvertActorFrom": "Convertir actor de", @@ -2129,18 +2336,12 @@ "OutputFormatAssa": "Advanced Sub Station Alpha (.ass)", "Style1": "Estilo 1", "Style2": "Estilo 2", - "OutlineWidth": "Ancho del contorno", - "ShadowWidth": "Ancho de la sombra", - "AlignTop": "Arriba", - "AlignBottom": "Abajo", - "Merge": "_Combinar", - "PleaseLoadTwoSubtitles": "Cargue dos subtítulos" + "Merge": "_Combinar" }, "SplitSubtitle": { "Title": "Dividir subtítulo", "NumberOfEqualParts": "Número de partes iguales", "SaveSplitParts": "_Guardar partes divididas", - "SubtitleSplitIntoXParts": "Subtítulo dividido en {0} partes.", "XPartsSavedInFormatYToFolder": "{0} partes guardadas en formato {1} en la carpeta:" }, "SplitBreakLongLines": { @@ -2174,18 +2375,17 @@ "ColumnMerge": "Combinar", "ColumnFirst": "Primera línea", "ColumnSecond": "Segunda línea", - "ColumnMerged": "Combinada", - "SelectAll": "Seleccionar todo", - "InverseSelection": "Invertir selección" + "ColumnMerged": "Combinada" }, "MergeLinesWithSameText": { - "Title": "Combinar líneas con el mismo texto", "MaxMsBetweenLines": "Máximo de milisegundos entre líneas", - "IncludeIncrementingLines": "Incluir líneas con texto incremental" + "MaxFramesBetweenLines": "Máx. fotogramas entre líneas", + "IncludeIncrementingLines": "Incluir líneas con texto incremental", + "IncludeRollUpCaptions": "Incluir subtítulos roll-up (desplazables)" }, "MergeLinesWithSameTimeCodes": { - "Title": "Combinar líneas con mismos códigos de tiempo", "MaxMsDifference": "Diferencia máx. (milisegundos)", + "MaxFramesDifference": "Diferencia máxima (fotogramas)", "MakeDialog": "Crear diálogos" }, "NetflixCheckAndFix": { @@ -2208,7 +2408,6 @@ "ShotChanges": "Cambios de tiro", "StartNumberSpellOut": "Deletrear el número de inicio", "TextforHiUseBrackets": "Texto para HI, use corchetes", - "FrameRate": "Velocidad de fotogramas", "TwoFrameGrap": "Espacio de dos marcos", "WhiteSpace": "espacio en blanco", "ChildrensProgram": "Programa infantil", @@ -2246,7 +2445,6 @@ "ItalicsFixed": "Cursiva corregida", "ItalicsNotAllowed": "No se permite cursiva", "BridgeGapsXToYFrames": "Espacio de 3-{0} fotogramas => espacio de 2 fotogramas", - "StartNumberSpellOutComment": "Cuando un número inicia una frase, siempre debe escribirse con palabras", "MaximumXCharactersPerSecond": "Máximo {0} caracteres por segundo" }, "ImageBasedEdit": { @@ -2256,10 +2454,8 @@ "ResizeImagesDotDotDot": "Redimensionar imágenes...", "AdjustBrightnessDotDotDot": "Ajustar brillo...", "AdjustAlphaDotDotDot": "Ajustar alfa...", - "CenterHorizontally": "Centrar horizontalmente", "CropImages": "Recortar imágenes", "ImportTimeCodes": "Importar códigos de tiempo...", - "SetTextForSubtitle": "Establecer texto del subtítulo", "ScreenWidth": "Ancho de pantalla", "ScreenHeight": "Alto de pantalla", "AlphaThresholdInfo": "Los píxeles con alfa bajo el umbral serán totalmente transparentes", @@ -2289,15 +2485,31 @@ "LetterboxCustom": "Altura de banda personalizada", "BarHeightPx": "Altura de banda (px)", "TitleSafePercent": "Zona segura de títulos (%)", + "MoveCaptions": "Mover subtítulos", + "MoveCaptionsDotDotDot": "Mover subtítulos...", + "MoveCaptionsTo": "Mover subtítulos", + "MoveCaptionsIntoBars": "A las barras negras (fuera de la imagen)", + "MoveCaptionsIntoPicture": "Dentro de la imagen (fuera de las barras)", + "MoveCaptionsOffset": "Distancia desde el borde (px)", + "LetterboxBarHeightXPxYOfZCaptionsWillMove": "Altura de barra: {0} px - se moverán {1} de {2} subtítulos", + "RemoveFadeInOut": "Eliminar fundido de entrada/salida", + "RemoveFadeInOutXLinesRemoved": "{0} líneas de fundido combinadas con las líneas a las que pertenecen", + "RemoveFadeInOutNothingFound": "No se encontraron líneas de fundido de entrada/salida", "PositionSummary": "{0}×{1} - {2} subtítulos - altura de banda: {3} px", "XInActivePicture": "{0} en la imagen", "XInTopBar": "{0} en la banda superior", "XInBottomBar": "{0} en la banda inferior", "NoImageSubtitlesLoaded": "No hay subtítulos de imagen cargados", - "ImageBasedFormatNotSupported": "Formato de subtítulo basado en imagen no encontrado o no compatible." + "ImageBasedFormatNotSupported": "Formato de subtítulo basado en imagen no encontrado o no compatible.", + "FrameRateDeclaredInFile": "Tasa de fotogramas declarada en el archivo sup de Blu-ray", + "FrameRateDetectedFromTimeCodesX": "Tasa de fotogramas detectada a partir de los códigos de tiempo del sup de Blu-ray (el archivo declara {0})", + "FrameRateFromVideo": "Tasa de fotogramas del vídeo", + "FrameRateCurrent": "Tasa de fotogramas actual", + "FrameRateSetManually": "Tasa de fotogramas establecida manualmente", + "FrameRateUsageInfo": "Las exportaciones Blu-ray sup, BDN XML, DOST y FCP se escriben con esta tasa de fotogramas. No cambia ningún tiempo; use \"Cambiar tasa de fotogramas\" para ello.", + "UseVideoFrameRateXInsteadOfY": "La tasa de fotogramas del vídeo es {0}, pero el subtítulo está configurado a {1}.\n\n¿Usar la tasa de fotogramas del vídeo ({0})?" }, "RemoveTextForHearingImpaired": { - "Title": "Eliminar texto para deficientes auditivos", "Interjections": "Interjecciones", "SkipIfStartWith": "Omitir si empieza por", "RemoveTextBetween": "Eliminar texto entre", @@ -2359,7 +2571,21 @@ "CorrectWordsX": "Palabras correctas: {0}", "NamesX": "Nombres: {0}", "AddedToDictionaryX": "Añadidas al diccionario: {0}", - "DoNotShowThisAgain": "No volver a mostrar este mensaje" + "DoNotShowThisAgain": "No volver a mostrar este mensaje", + "EditUseAlwaysList": "Editar lista \"Usar siempre\"...", + "UseAlwaysListTitle": "Ortografía - Lista \"Usar siempre\"", + "UseAlwaysListHeader": "Lista \"Usar siempre\"", + "UseAlwaysListDescription": "Palabras que la corrección ortográfica reemplaza automáticamente, guardadas con \"Cambiar todo\" y \"Usar siempre\". Un par solo se usa cuando la palabra está mal escrita.", + "UseAlwaysWord": "Palabra mal escrita", + "XPairs": "{0:#,##0} pares", + "XUnusedPairs": "{0:#,##0} nunca usados", + "UseAlwaysUnusedHint": "Nunca usado: esta palabra está bien escrita (o es un nombre o palabra del usuario), así que la corrección ortográfica nunca la marca", + "RemoveUnused": "Eliminar no usados", + "UseAlwaysEmpty": "Aún no hay pares \"Usar siempre\" para este idioma", + "UseAlwaysEmptyHint": "Los pares se añaden al hacer clic en \"Cambiar todo\" o \"Usar siempre\" en la corrección ortográfica.", + "UseAlwaysNoMatch": "Ningún par coincide con la búsqueda", + "UseAlwaysSameWord": "El reemplazo debe ser distinto de la palabra.", + "UseAlwaysRememberOff": "\"Recordar lista 'Usar siempre'\" está desactivado en Ajustes, por lo que la corrección ortográfica no usa ni guarda esta lista." }, "Video": { "Chapters": { @@ -2390,7 +2616,6 @@ "ScaleTimesDescription": "Escala el tiempo de cada capítulo de una tasa de fotogramas a otra.", "FromFrameRate": "De", "ToFrameRate": "A", - "Apply": "Aplicar", "WriteToVideo": "Escribir en el vídeo...", "WriteToVideoTitle": "Escribir los capítulos en el vídeo", "WriteToVideoDescription": "Los capítulos se escriben en una copia del archivo de vídeo. No se recodifica nada, por lo que es rápido y sin pérdidas.", @@ -2400,7 +2625,6 @@ "WrittenToX": "Capítulos escritos en {0}", "UnableToWriteChapters": "No se pudieron escribir los capítulos en el archivo de vídeo.", "ChaptersSavedToX": "Capítulos guardados en {0}", - "NoVideoLoaded": "No hay ningún vídeo cargado", "EmptyListCallToAction": "Todavía no hay capítulos: añada uno en la posición del vídeo o impórtelos de un vídeo o un archivo." }, "GoToVideoPosition": "Ir a la posición del vídeo", @@ -2412,30 +2636,88 @@ "OpenSecondarySubtitleOnVideoPlayerDotDotDot": "Subtítulo secundario en reproductor, abrir...", "OpenSecondarySubtitleOnVideoPlayer": "Subtítulo secundario (en reproductor)", "RemoveSecondarySubtitleOnVideoPlayer": "Subtítulo secundario en reproductor, quitar", + "EditSecondarySubtitleSettings": "Editar ajustes del subtítulo secundario", + "EditSecondarySubtitleSettingsDotDotDot": "Editar ajustes del subtítulo secundario...", + "SecondarySubtitleRememberSettings": "Recordar estos ajustes", + "SecondarySubtitleDoNotShowAgain": "No volver a mostrar este diálogo", + "SecondarySubtitleJustifyLines": "Justificar líneas", "OpenRecentVideo": "Abrir vídeo reciente", "ClearRecentVideos": "Borrar los vídeos recientes", "CutVideoTitle": "Cortar vídeo", "CutVideoDotDotDot": "Cortar vídeo...", + "RemuxVideoTitle": "Remultiplexar vídeo", + "RemuxVideoDotDotDot": "Remultiplexar vídeo...", + "RemuxVideoInputVideo": "Vídeo de entrada:", + "RemuxVideoMultipleTracksRequiresMkv": "Varias pistas de audio o subtítulos requieren el contenedor MKV. El formato de salida se ha cambiado automáticamente a .mkv.", + "RemuxVideoOutputFormat": "Formato de salida:", + "RemuxVideoOutputFile": "Archivo de salida:", + "RemuxVideoRemuxing": "Remultiplexando vídeo y audio...", + "RemuxVideoFinalizing": "Finalizando archivo de salida (moviendo el índice al principio)...", + "RemuxVideoCompleted": "Vídeo remultiplexado correctamente.", + "RemuxVideoFailed": "Error al remultiplexar el vídeo.", + "RemuxVideoPleaseSelectBoth": "Seleccione los archivos de vídeo y de audio.", + "RemuxVideoAssRequiresMkv": "Los subtítulos ASS/SSA requieren el contenedor MKV para conservar todo el formato y los estilos.", + "RemuxVideoSccRequiresMov": "Los subtítulos Scenarist (.scc) se incrustan como subtítulos cerrados CEA-608, que requieren el contenedor MOV o MPG. El formato de salida se ha cambiado automáticamente a .mov.", + "RemuxVideoSccNotWithWebM": "Los subtítulos cerrados Scenarist (.scc) necesitan el contenedor MOV, que no puede contener el vídeo VP9/AV1 de un archivo .webm. Quite el archivo .scc o conviértalo a otro formato de subtítulo.", + "RemuxVideoMpgMaxTwoCaptionTracks": "Un archivo .mpg contiene como máximo dos pistas de subtítulos cerrados (CC1 y CC3): quite archivos de subtítulos para que queden uno o dos.", + "RemuxVideoMccRequiresMpg": "Los subtítulos MacCaption (.mcc) se incrustan como subtítulos cerrados CEA-608/708 en el vídeo MPEG-2, lo que requiere el contenedor MPG. El formato de salida se ha cambiado automáticamente a .mpg.", + "RemuxVideoMpgReencodeVideoX": "Los subtítulos cerrados en un archivo .mpg necesitan vídeo MPEG-2, y el vídeo es {0}. ¿Recodificar el vídeo a MPEG-2? Tarda más y reduce un poco la calidad.", + "RemuxVideoFileHasNoAudioX": "\"{0}\" no tiene pista de audio, por lo que no se puede usar como fuente de audio.", + "RemuxVideoAddingClosedCaptions": "Añadiendo subtítulos cerrados...", + "RemuxVideoSelectAudioTrack": "Seleccionar pista de audio", + "RemuxVideoSelectAudioTrackFor": "Seleccionar pista de audio para {0}", + "RemuxVideoSelectAudioTrackPrompt": "El archivo '{0}' contiene {1} pistas de audio. Seleccione la pista de audio que se va a remultiplexar:", + "RemuxVideoVideoFile": "vídeo", + "RemuxVideoAudioFile": "audio", + "RemuxVideoAudioFiles": "Archivos de audio:", + "RemuxVideoSubtitleFiles": "Archivos de subtítulos (opcional, subtítulos no incrustados):", + "RemuxVideoSelectAudioTrackDotDotDot": "Seleccionar pista de audio...", + "RemuxVideoFilesX": "{0} archivos", + "RemuxVideoMixAudio": "Mezclar el audio en una sola pista", + "RemuxVideoVolumePercent": "Volumen %:", + "RemuxVideoVolumeX": "Volumen {0}%", + "RemuxVideoFastStart": "Optimizar para streaming web (mover el índice al principio; más lento)", "EmbedSubtitlesDotDotDot": "Añadir/quitar subtítulos incrustados...", "GenerateTimeCodes": "Generar códigos de tiempo", "CheckeredImage": "Imagen ajedrezada", - "SaveVideoAsTitle": "Guardar vídeo como", "PromptForFfmpegParamsAndGenerate": "Pedir parámetros ffmpeg y generar", "CutVideoCutSegments": "Cortar segmentos", "CutVideoMergeSegments": "Combinar segmentos", "CutVideoSplitSegments": "Guardar segmentos individualmente", - "CutVideoType": "Tipo de corte", - "MpvRenderAuto": "Auto", - "MpvRenderNative": "Nativo", - "MpvRenderOpenGl": "OpenGL", - "MpvRenderSoftware": "Software (lento)", "CutVideoAlsoCutSubtitle": "Cortar también el subtítulo", "CutVideoSubtitleFileGeneratedX": "Archivo de subtítulos generado: {0}", + "CutVideoTransition": "Transición entre segmentos", + "CutVideoTransitionDurationSeconds": "Duración (segundos)", + "CutVideoFadeInSeconds": "Fundido desde negro al inicio (segundos)", + "CutVideoFadeOutSeconds": "Fundido a negro al final (segundos)", + "CutVideoPreviewTransition": "Previsualizar transición", + "CutVideoPreviewTransitionTitle": "Vista previa de la transición", + "CutVideoPreviewNeedsJoin": "No hay ninguna unión que previsualizar: añada al menos dos segmentos para combinar, o un segmento para cortar del medio.", + "CutVideoTransitionInfoX": "Cada transición superpone las partes que une, así que la salida es {0} segundos más corta por cada unión. Un subtítulo cortado se reajusta en consecuencia.", + "CutVideoTransitionFade": "Fundido", + "CutVideoTransitionFadeBlack": "Fundido a negro", + "CutVideoTransitionFadeWhite": "Fundido a blanco", + "CutVideoTransitionFadeGrays": "Fundido a gris", + "CutVideoTransitionDissolve": "Disolución", + "CutVideoTransitionWipeLeft": "Barrido a la izquierda", + "CutVideoTransitionWipeRight": "Barrido a la derecha", + "CutVideoTransitionWipeUp": "Barrido hacia arriba", + "CutVideoTransitionWipeDown": "Barrido hacia abajo", + "CutVideoTransitionSlideLeft": "Deslizar a la izquierda", + "CutVideoTransitionSlideRight": "Deslizar a la derecha", + "CutVideoTransitionSlideUp": "Deslizar hacia arriba", + "CutVideoTransitionSlideDown": "Deslizar hacia abajo", + "CutVideoTransitionSmoothLeft": "Suave a la izquierda", + "CutVideoTransitionSmoothRight": "Suave a la derecha", + "CutVideoTransitionCircleOpen": "Círculo que se abre", + "CutVideoTransitionCircleClose": "Círculo que se cierra", + "CutVideoTransitionRadial": "Radial", + "CutVideoTransitionPixelize": "Pixelar", + "CutVideoTransitionBlur": "Desenfoque", "ImportCurrentSubtitle": "Importar subtítulo actual", "AddRemoveEmbeddedSubtitlesTitle": "Añadir/quitar subtítulos incrustados", "AddRemoveEmbeddedSubtitlesMp4Title": "Añadir/quitar subtítulos incrustados (MP4)", "AddCurrentSubtitle": "Añadir subtítulo actual", - "EmbeddedTrackColumnNew": "Nuevo", "EmbeddedTrackNoSubtitlesFoundTitle": "No se encontraron subtítulos", "EmbeddedTrackNoSubtitlesFoundMessage": "El archivo de subtítulos seleccionado no contiene ningún subtítulo.", "EmbeddedTrackNoTracksTitle": "No se añadieron pistas", @@ -2447,7 +2729,7 @@ "EmbeddedTrackGeneratingVideoXY": "Generando vídeo... {0}% {1}", "EmbeddedTrackGeneratingVideo": "Generando vídeo...", "Mp4FilesFilter": "Archivos MP4", - "TitleOrLanguage": "Título/idioma", + "EmbeddedTracksPickVideoHint": "Elija un archivo de vídeo, o suéltelo aquí, para ver sus pistas de subtítulos.", "ViewMatroskaTrackX": "Ver pista Matroska - {0}", "ResolutionSeparator": "x", "OpenFromUrlTitle": "Abrir archivo de vídeo desde URL", @@ -2457,9 +2739,7 @@ "OpenFromUrlDownloadAndOpen": "Descargar y abrir", "OpenFromUrlDownloadAndOpenDescription": "Guardar el vídeo localmente y luego abrirlo.", "OpenFromUrlDownloadAndOpenNote": "Necesario para la voz a texto y los picos de la forma de onda.", - "OpenFromUrlMissing": "Introduzca primero una URL de vídeo.", "OpenFromUrlDownloadingTitle": "Descargando vídeo", - "OpenFromUrlSaveAs": "Guardar vídeo como", "OpenFromUrlDownloadSubtitles": "Descargar también los subtítulos", "OpenFromUrlDownloadVideo": "Descargar vídeo", "OpenFromUrlIncludeAutoGeneratedSubtitles": "Incluir los subtítulos generados automáticamente (idioma original)", @@ -2496,56 +2776,38 @@ "ReEncodeGeneratingDone": "Generación completada", "ReEncodeGeneratedFilesX": "Archivos generados ({0}):", "ReEncodeFfmpegParameters": "Parámetros de ffmpeg", + "AnalyzingVideoX": "Analizando vídeo... {0}% {1}", + "AnalyzingVideoXofY": "Analizando vídeo {0}/{1}... {2}% {3}", + "BackgroundImageFileNotSelected": "No se ha seleccionado un archivo de imagen de fondo", + "BackgroundImageFileDoesNotExistX": "El archivo de imagen de fondo no existe: {0}", "BurnIn": { "Title": "Generar vídeo con subtítulos incrustados", - "InfoAssaOff": "Nota: Estilos Advanced SubStation Alpha compatibles.", - "InfoAssaOn": "Nota: ¡Se usarán estilos Advanced SubStation Alpha! :)", - "XGeneratedWithBurnedInSubsInX": "\"{0}\" generado con subtítulos incrustados en {1}.", - "TimeRemainingMinutes": "Tiempo restante: {0} minutos", - "TimeRemainingOneMinute": "Tiempo restante: Un minuto", - "TimeRemainingSeconds": "Tiempo restante: {0} segundos", - "TimeRemainingAFewSeconds": "Tiempo restante: Unos segundos", - "TimeRemainingMinutesAndSeconds": "Tiempo restante: {0} minutos y {1} segundos", - "TimeRemainingOneMinuteAndSeconds": "Tiempo restante: Un minuto y {0} segundos", - "TargetFileName": "Nombre de archivo de destino: {0}", "TargetFileSize": "Tamaño de destino (requiere codificación de 2 pasos)", "FileSizeMb": "Tamaño en MB", "MatchSourceVideoSize": "Igualar el tamaño del vídeo de origen", - "PassX": "Paso {0}", - "Encoding": "Codificando", "BitRate": "Tasa de bits", "TotalBitRateX": "Tasa de bits total: {0}", "SampleRate": "Tasa de muestreo", "Audio": "Audio", - "Stereo": "Estéreo", "Preset": "Ajuste", + "Tune": "Ajuste (tune)", "PixelFormat": "Formato de píxel", "Crf": "CRF", - "TuneFor": "Optimizar para", - "AlignRight": "Alinear a la derecha", - "GetStartPosition": "Obtener posición inicial", - "GetEndPosition": "Obtener posición final", "UseSource": "Usar origen", - "UseSourceFolder": "Usar carpeta de origen", - "UseSourceResolution": "Usar resolución de origen", - "OutputSettings": "Archivo/carpeta de salida...", "FontSizeFactor": "Factor de tamaño de fuente", "BoxType": "Tipo de caja", - "FixRightToLeft": "Corregir derecha a izquierda", - "Cut": "Cortar", "FromTime": "Desde el tiempo", "ToTime": "Hasta el tiempo", "AudioEncoding": "Codificación de audio", "OutputProperties": "Propiedades de salida...", "VideoFileSize": "Tamaño de archivo de vídeo", "OneBox": "Una caja", - "BoxPerLine": "Caja por línea", - "LogoInfo": "Elija una imagen PNG y arrástrela para colocarla en el video." + "LogoInfo": "Elija una imagen PNG y arrástrela para colocarla en el video.", + "NoSubtitlesGenerateAnyway": "No hay líneas de subtítulo para incrustar.\n\n¿Generar el vídeo sin subtítulos?", + "NoSubtitlesInXItemsGenerateAnyway": "{0} elemento(s) del lote no tienen líneas de subtítulo para incrustar.\n\n¿Generar esos vídeos sin subtítulos?" }, "VideoTransparent": { - "Title": "Generar vídeo transparente con subtítulos", - "InfoAssaOff": "Nota: Estilos Advanced SubStation Alpha compatibles.", - "InfoAssaOn": "Nota: ¡Se usarán estilos Advanced SubStation Alpha! :)" + "Title": "Generar vídeo transparente con subtítulos" }, "AudioToText": { "Title": "Voz a texto", @@ -2553,6 +2815,21 @@ "TranslateToEnglish": "Traducir al inglés", "Transcribing": "Transcribiendo...", "TranscribingXOfY": "Transcribiendo {0} de {1}...", + "LinesTranscribedXOfYFailedZ": "Se transcribieron {0} de {1} líneas; {2} fallaron o no tenían voz.\n\nLas líneas fallidas conservan su texto actual. ¿Aplicar las líneas transcritas o reintentar las fallidas (puede cambiar antes el motor o los ajustes)?", + "LinesTranscribedXOfYCancelled": "La transcripción se canceló tras {0} de {1} líneas.\n\n¿Aplicar las líneas transcritas? Las demás líneas conservan su texto actual.", + "NoLinesTranscribed": "No se pudo transcribir ninguna de las {0} líneas.\nConsulte el registro de herramientas para más detalles.", + "ApplyTranscribedLines": "Aplicar transcritas", + "RetryFailedLines": "Reintentar fallidas", + "IsolateSpeech": "Aislar la voz (lento)", + "IsolateSpeechHint": "Elimina la música y los efectos de sonido antes de transcribir. Se pierden menos líneas y la sincronización es mejor en audio con música alta, pero tarda aproximadamente lo mismo que el propio audio con una GPU, y muchas veces más sin ella.", + "IsolatingSpeech": "Aislando la voz...", + "IsolateSpeechFailed": "No se pudo aislar la voz: se transcribe el audio original en su lugar.", + "DetectSpeakers": "Detectar hablantes", + "DetectSpeakersHint": "Empieza cada línea con el hablante, como \"(speaker 0)\", usando la diarización Sortformer de NVIDIA (hasta 8 hablantes). Funciona mejor con motores que dividen las líneas donde cambia el hablante, como Parakeet y Cohere.", + "DetectSpeakersNeedsNewerCrispAsr": "\"Detectar hablantes\" necesita Crisp ASR v{0} o posterior, pero está instalada la v{1}.\n\nActualice Crisp ASR (el botón de engranaje junto al motor) o desactive \"Detectar hablantes\".", + "XNeedsNewerCrispAsr": "{0} necesita Crisp ASR v{1} o posterior, pero está instalada la v{2}.\n\n¿Descargar e instalar la actualización ahora?", + "Vad": "VAD", + "VadHint": "Detección de actividad de voz: solo se transcribe el habla, cortada donde el hablante hace pausas.\nAuto: Silero, y solo para los motores que lo necesitan (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: siempre activos, para todos los motores Crisp ASR. FireRedVAD es el más preciso; Whisper-VAD da los cortes más escasos y limpios, pero es el más lento.\nIndex-Echo siempre usa Silero. --vad, --vad-model o --chunk-seconds en los ajustes avanzados tienen prioridad.", "InputLanguage": "Idioma de entrada", "AdvancedWhisperSettings": "Ajustes avanzados de Whisper", "DownloadingSpeechToTextEngine": "Descargando motor de voz a texto", @@ -2567,8 +2844,6 @@ "AddCustomModelDotDotDot": "Añadir modelo personalizado...", "CustomModelHelp": "Puede usar su propio modelo: elija el archivo del modelo (whisper.cpp ggml '.bin') o la carpeta del modelo (carpeta de faster-whisper con un 'model.bin' dentro). Se copia a la carpeta de modelos y se añade a la lista de arriba.", "ViewToolsLogFile": "Ver registro de Whisper", - "ReDownloadX": "Volver a descargar {0}", - "DownloadX": "Descargar {0}", "UpdateXTitle": "¿Actualizar {0}?", "UpdateXMessage": "Hay disponible una versión más reciente de {0}.{1}{1}¿Descargar e instalar la actualización ahora?", "DownloadingSpeechToTextModel": "Descargando modelo de voz a texto", @@ -2638,7 +2913,7 @@ "CloneVoicePerLinePreparing": "Tomando del vídeo la voz de cada línea...", "CloneVoicePerLineNeedsVideo": "Para clonar la voz de cada línea hace falta el vídeo al que pertenece el subtítulo. Abra el vídeo e inténtelo de nuevo.", "CloneVoicePerLineNoClips": "No se pudo tomar audio del vídeo, así que no hay nada de lo que clonar. Compruebe que el vídeo tiene pista de audio.", - "CloneVoicePerLineNeedsOriginalSubtitleX": "{0} solo puede clonar una línea cuando sabe qué se dice en el vídeo en esa línea, lo que proviene del subtítulo en el idioma original. No hay ningún subtítulo original cargado, así que todas las líneas las diría la primera voz importada en lugar de la voz del vídeo.\n\nAbra el subtítulo original (Archivo > Abrir original...) junto a la traducción y vuelva a generar.", + "CloneVoicePerLineTranscribeClipsXYZ": "{0} solo puede clonar una línea cuando sabe lo que se dice en el vídeo en esa línea. Eso no se sabe para {1} de {2} líneas; normalmente procede del subtítulo en el idioma original (Archivo > Abrir original...).\n\n¿Transcribir ahora esas líneas desde el vídeo con voz a texto?\n\nSí: elija el motor y el idioma hablado en el vídeo, y los clips de referencia se transcriben antes de generar la voz.\nNo: generar de todos modos; esas líneas las dice una voz normal en lugar de la voz del vídeo.", "VoiceCloneConsentTitle": "Clonación de voz: antes de empezar", "VoiceCloneConsentHeader": "Está a punto de clonar una voz", "VoiceCloneConsentIntro": "La clonación copia la voz de una persona real. Eso conlleva normas en la mayoría de los lugares y, en la UE, obligaciones legales que recaen en usted, no en Subtitle Edit. Léalo una vez, por favor.", @@ -2654,6 +2929,12 @@ "VoiceCloneConsentDeclined": "La clonación de voz no está disponible hasta que se acepten estos términos.", "AdvancedTtsAudioProcessing": "Procesamiento de audio", "AdvancedTtsOutput": "Salida", + "AdvancedTtsVoiceCloning": "Clonación de voz", + "CleanCloneReferences": "Limpiar referencias de clonación de voz (Sidon)", + "CleanCloneReferencesDescription": "Elimina música, ruido y reverberación del audio del que se clona una voz: clips tomados del vídeo y grabaciones importadas en el administrador de voces. Usa el modelo de restauración de voz Sidon en audio.cpp (descarga de 940 MB). La voz clonada ya no copia el fondo, pero el habla muy baja o superpuesta puede sonar apagada.", + "CleaningCloneReferencesDotDotDot": "Limpiando referencias de clonación de voz...", + "DownloadSidonTitle": "¿Descargar Sidon?", + "DownloadSidonQuestionX": "Limpiar las referencias de clonación de voz necesita el modelo de restauración de voz Sidon ({0}).\n\n¿Descargarlo ahora? Sin él, las referencias se usan tal cual.", "RubberbandInstalled": "(instalado)", "RubberbandNotFound": "(no se encontró en FFmpeg)", "GenerationFolder": "Carpeta de generación", @@ -2662,14 +2943,11 @@ "DeleteTempFilesDescription": "Elimina la carpeta de generación cuando se cierra la ventana Texto a voz. Los archivos de audio y vídeo guardados se conservan.", "PiperSettings": "Ajustes de Piper", "Title": "Texto a voz", - "TextToSpeechEngine": "Motor de texto a voz", "ReviewAudioSegments": "TTS - Revisar segmentos de audio", "ReviewAudioSegmentsHistory": "TTS - Revisar historial de audio", "Stability": "Estabilidad", "Similarity": "Similitud", "SpeakerBoost": "Refuerzo del orador", - "StyleExaggeration": "Exageración de estilo", - "RegenerateAudioSelectedLine": "Regenerar audio de línea seleccionada", "GenerateSpeechFromText": "Generar voz desde texto", "TestVoice": "Probar voz", "AddAudioToVideoFile": "Añadir audio al archivo de vídeo", @@ -2688,22 +2966,98 @@ "VideoEncodingSettings": "TTS - Ajustes de codificación de vídeo", "ElevenLabsSettings": "TTS - Ajustes de ElevenLabs", "ElevenLabsSettingsResetHint": "Restablecer ElevenLabs a valores predeterminados", + "Provider": "Proveedor", + "OpenAiCompatibleSettings": "TTS - Ajustes compatibles con OpenAI", + "CustomServerUrl": "URL de servidor personalizado", + "CustomServerUrlHint": "Endpoint de voz completo de un servidor compatible con OpenAI, usado cuando el proveedor es \"Personalizado\", p. ej. http://localhost:8880/v1/audio/speech", + "CustomModels": "Modelos personalizados", + "CustomModelsHint": "Nombres de modelos separados por comas que se ofrecen cuando el proveedor es \"Personalizado\"", + "CustomVoices": "Voces personalizadas", + "CustomVoicesHint": "Nombres de voces separados por comas, usados por el proveedor \"Personalizado\" y por los modelos de OpenRouter que no publican lista de voces", + "Instructions": "Instrucciones", + "InstructionsHint": "Estilo de habla opcional, p. ej. \"Habla con una voz tranquila y cálida\". Solo se envía a los modelos que lo admiten (no tts-1/tts-1-hd)", + "OpenAiSpeedHint": "Velocidad del habla de 0.25 a 4.0 (1.0 es normal). No todos los modelos la admiten", + "OutputFormat": "Formato de salida", + "OutputFormatHint": "Formato de audio solicitado al servidor. \"Auto\" pide MP3 y cambia a PCM para los modelos que solo devuelven PCM (p. ej. Gemini TTS)", "RegenerateAudio": "Regenerar audio", "AutoContinuePlaying": "Continuar reproducción automáticamente", "AddingAudioToVideoFileDotDotDot": "Añadiendo audio al archivo de vídeo...", "PreparingMergeDotDotDot": "Preparando combinación...", "ImportVoiceDotDotDot": "Importar voz...", + "RenameVoiceDotDotDot": "Renombrar voz...", + "RenameVoiceTitle": "Renombrar voz", + "VoiceXCouldNotBeRenamedX": "No se pudo renombrar la voz '{0}': {1}", + "DeleteVoiceDotDotDot": "Eliminar voz...", + "DeleteVoiceTitle": "Eliminar voz", + "DeleteVoiceXQuestion": "¿Eliminar la voz '{0}'?\n\nLa grabación de referencia y sus archivos se eliminan del disco.", + "VoiceXCouldNotBeDeletedX": "No se pudo eliminar la voz '{0}': {1}", "VoiceImportSuccessTitle": "Voz importada", "VoiceXImported": "Voz '{0}' importada con éxito", "DropAudioFileHereToImportVoice": "Suelte un archivo de audio aquí para importar una voz", "DropAudioFileHereHint": ".wav o .mp3", "VoiceCloneTranscriptTitle": "Introduzca la transcripción del audio (necesaria para la clonación de voz)", + "VoiceManagerTitle": "TTS - Administrador de voces", + "VoiceManagerDotDotDot": "Administrador de voces...", + "VoiceManagerMenuItem": "Administrador de voces TTS...", + "SpeakFromCurrentLineTitle": "Leer desde la línea actual", + "SpeakFromCurrentLineDotDotDot": "Leer desde la línea actual...", + "SpeakFromCurrentLineHint": "Lee las líneas en voz alta una tras otra, empezando por la línea actual. Pulse Escape o haga clic en otra línea para detener.", + "StopSpeaking": "Dejar de leer", + "SpeakingLineX": "Leyendo la línea {0}... (Escape para detener)", + "PlayWithSpeechTitle": "Reproducir con voz", + "PlayWithSpeechDotDotDot": "Reproducir con voz...", + "PlayWithSpeechHint": "Reproduce el vídeo y lee cada línea cuando el vídeo llega a ella. Pause y busque como siempre; pulse Escape para detener.", + "LowerVideoVolumeWhileSpeaking": "Bajar el volumen del vídeo mientras se lee", + "PauseVideoWhenSpeechRunsLate": "Pausar el vídeo cuando la voz invade la línea siguiente", + "WaitingForSpeechLineX": "Generando voz para la línea {0}... (Escape para detener)", + "VoiceKindClone": "Voz clonada", + "VoiceKindPreset": "Integrada", + "VoiceKindModel": "Modelo de voz", + "VoiceKindOnline": "En línea", + "Transcript": "Transcripción", + "TranscriptRequiredHint": "Obligatorio: el motor lee esta transcripción de la grabación (ref-text) al clonar", + "TranscriptOptionalHint": "Opcional: una transcripción precisa de la grabación mejora la clonación", + "SaveTranscript": "Guardar transcripción", + "SearchVoices": "Buscar voces", + "LoadingVoicesDotDotDot": "Cargando voces...", + "NoVoicesForEngine": "No hay voces: importe una grabación o descargue un paquete de voces", + "NoVoicesMatchFilter": "Ninguna voz coincide con la búsqueda", + "CopyVoiceTo": "Copiar voz a", + "CopyVoiceToDotDotDot": "Copiar voz a motor...", + "CopyingVoiceXToYDotDotDot": "Copiando la voz '{0}' a {1}...", + "VoiceXCopiedToY": "Voz '{0}' copiada a {1}", + "VoiceXCouldNotBeCopiedToY": "No se pudo copiar la voz '{0}' a {1}; consulte el registro para más detalles", + "VoiceXAlreadyExistsInYContinue": "Ya existe una voz llamada '{0}' en {1}.\n\n¿Copiar de todos modos?", + "OpenVoicesFolder": "Abrir carpeta de voces", + "DownloadVoicePacksDotDotDot": "Descargar paquetes de voces...", + "DownloadVoicePacksTitle": "TTS - Descargar paquetes de voces", + "VoicePackIntro": "Los paquetes de voces son conjuntos de grabaciones cortas y limpias con transcripciones, listas para clonar. Cada paquete se importa en el motor elegido (se omiten las voces ya presentes) e incluye un ATTRIBUTION.txt con su licencia y fuentes.", + "VoicePackDetailsXVoicesYSizeZLicense": "{0} voces · {1} · {2}", + "InstallToEngine": "Instalar en motor", + "DownloadAndInstall": "Descargar e instalar", + "SelectAtLeastOneVoicePack": "Seleccione al menos un paquete de voces", + "DownloadingXDotDotDot": "Descargando {0}...", + "InstallingXDotDotDot": "Instalando {0}...", + "XVoicesInstalledYSkipped": "{0} voces instaladas ({1} ya presentes)", "UseSpeechToTextDotDotDot": "Usar voz a texto...", "AdvancedTtsSettings": "Ajustes avanzados de TTS", "ProAudioPostProcessing": "Post-procesamiento de audio Pro", "ProAudioPostProcessingDescription": "Aplica EQ, puerta de ruido, compresión, normalización (-16 LUFS) y fundidos a cada segmento.", + "GeneratingSpeechSegmentXOfY": "Generando voz: segmento {0} de {1}", + "AdjustingSpeedSegmentXOfY": "Ajustando velocidad: segmento {0} de {1}", + "MergingAudioSegmentXOfY": "Combinando audio: segmento {0} de {1}", + "PostProcessingSegmentXOfY": "Posprocesando: segmento {0} de {1}", "AudioDucking": "Atenuación de audio (ducking)", "AudioDuckingDescription": "Reduce el volumen del vídeo original para mezclarlo con el TTS.", + "RemoveOriginalSpeech": "Eliminar la voz original (lento)", + "RemoveOriginalSpeechDescription": "Conserva la música y los efectos de sonido del vídeo original pero elimina su voz, y mezcla la nueva voz sobre ellos. Tarda aproximadamente lo mismo que el propio vídeo con una GPU, y muchas veces más sin ella. Con la atenuación de audio activada, su volumen se aplica a la música y los efectos. Solo se aplica cuando la voz se añade al archivo de vídeo.", + "RemovingOriginalSpeech": "Eliminando la voz original...", + "RemoveOriginalSpeechFailed": "No se pudo eliminar la voz original: la voz se añadió al vídeo sin hacerlo.", + "SpeechRemovalModel": "Modelo", + "SpeechRemovalModelDescription": "Mejor calidad conserva al máximo la música y los efectos de sonido. Rápido es unas tres veces más veloz, con algo más de pérdida de música.", + "SpeechRemovalBestQuality": "Mejor calidad (Mel-Band RoFormer)", + "SpeechRemovalFast": "Rápido (HTDemucs)", + "VideoTruncatedWarning": "La imagen del nuevo archivo de vídeo se detiene tras {0}, pero el vídeo original dura {1}: la imagen se congelará mientras el sonido continúa.\n\nSe conservó el archivo. Consulte error-log.txt en la carpeta de datos de Subtitle Edit para ver la salida de ffmpeg.", "OriginalVolumePercent": "Volumen original %", "VadSilenceCompression": "Compresión de silencios VAD", "VadSilenceCompressionDescription": "Acorta las pausas entre palabras mediante detección de voz. Reduce la duración sin pérdida de calidad.", @@ -2770,7 +3124,6 @@ "SubtitleMergedLinesAppliedPlural": "Se aplicaron {0} combinaciones de líneas desde texto a voz" }, "ShotChanges": { - "TitleGenerateOrImport": "Generar/importar cambios de plano", "GenerateShotChanges": "Generar cambios de plano", "ImportShotChanges": "Importar cambios de plano", "GenerateShotChangesWithFfmpeg": "Generar cambios de plano con ffmpeg", @@ -2780,7 +3133,9 @@ "TimeCodeFormatColon": "Formato de código de tiempo:", "ShotChangesList": "Lista de cambios de plano", "ShotChangesClearQuestion": "¿Seguro que desea borrar todos los cambios de plano?", - "DeleteSelectedShotChangeQuestion": "¿Seguro que desea eliminar el cambio de plano seleccionado?" + "DeleteSelectedShotChangeQuestion": "¿Seguro que desea eliminar el cambio de plano seleccionado?", + "ShotChanges": "Cambios de plano", + "ExportShotChanges": "Exportar cambios de plano" }, "VideoOcr": { "Title": "OCR de subtítulo incrustado", @@ -2790,10 +3145,6 @@ "BottomHalf": "Mitad inferior", "FullFrame": "Fotograma completo", "Engine": "Motor OCR", - "Language": "Idioma", - "Url": "URL", - "Model": "Modelo", - "ApiKey": "Clave API", "Scan": "Escanear", "FramesPerSecond": "Fotogramas por segundo", "TextBrightnessMinimum": "Brillo mínimo del texto (0=desactivado)", @@ -2808,10 +3159,10 @@ "RunningOcrXY": "Ejecutando OCR... {0}/{1}", "NoLinesFoundTitle": "No se encontraron subtítulos", "NoLinesFoundMessage": "No se encontró texto en el área de escaneo: pruebe a ajustar el área de escaneo, el motor o el brillo mínimo.", + "OcrStoppedEarlyMessage": "El motor OCR se detuvo antes de leer todos los fotogramas, por lo que se conservan las líneas encontradas hasta ahora y faltan las demás.{0}{0}{1}", "LinesFoundX": "{0} líneas encontradas", "RefiningTimingXY": "Afinando los tiempos... {0}/{1}", "FixOcrErrors": "Corregir errores de OCR", - "Dictionary": "Diccionario", "EditLineX": "Editar la línea {0}", "DownloadDictionaryHint": "Descargar un diccionario ortográfico...", "FramesPerSecondHint": "Cuántos fotogramas por segundo se analizan. 5 cubre los subtítulos normales; un valor mayor detecta líneas muy cortas y agrupa mejor, pero cuesta más tiempo de OCR.", @@ -2828,14 +3179,64 @@ "TestOcr": "Probar el fotograma actual", "TestOcrRunning": "Probando el OCR en el fotograma actual...", "TestOcrResultX": "Resultado de la prueba: {0}", - "TestOcrNoTextFound": "Prueba: no se encontró texto en el área de escaneo" + "TestOcrNoTextFound": "Prueba: no se encontró texto en el área de escaneo", + "EngineSettings": "Ajustes del motor OCR", + "EngineBuiltIn": "Integrado en el sistema operativo", + "EngineExternalServer": "Servidor externo (instalado y gestionado fuera de Subtitle Edit)", + "EngineCloudApi": "API en la nube (requiere una clave API)", + "EngineNothingToInstall": "Nada que instalar", + "EngineModelsMissing": "Motor instalado, faltan modelos", + "Website": "Sitio web" + }, + "BackgroundMusic": { + "Title": "Generar música de fondo", + "GenerateBackgroundMusicDotDotDot": "Generar música de fondo...", + "Preset": "Preajuste", + "Prompt": "Indicación", + "TempoBpm": "Tempo (BPM)", + "GenerateSeconds": "Generar (segundos)", + "Seed": "Semilla", + "RandomSeed": "Aleatoria", + "OutputLength": "Duración de salida", + "OutputLengthVideoX": "{0} (duración del vídeo; la música se repite sin cortes)", + "MusicVolumePercent": "Volumen de la música (%)", + "RemoveExistingAudioTracks": "Eliminar pistas de audio existentes", + "OriginalAudioVolumePercent": "Volumen del audio original (%)", + "SaveAudioDotDotDot": "Guardar audio...", + "AddToVideoDotDotDot": "Añadir al vídeo...", + "EngineInfo": "ACE-Step 1.5 Turbo mediante audio.cpp (licencia MIT): se ejecuta localmente", + "PresetCooking": "Cocina / repostería", + "PresetTech": "Tecnología / reseña de gadgets", + "PresetForest": "Bosque / naturaleza", + "PresetRelaxingPiano": "Piano relajante", + "PresetLofiVlog": "Vlog lo-fi", + "PresetCorporate": "Corporativo / explicativo", + "LoadingModel": "Cargando modelo...", + "Composing": "Componiendo...", + "GeneratingAudio": "Generando audio...", + "DecodingAudio": "Decodificando audio...", + "CreatingLoop": "Creando bucle sin cortes...", + "ResultLoopXYZ": "Bucle: {0} a {1} BPM, coincidencia de unión {2}%", + "ResultNoLoopX": "Música lista: {0}", + "AddingMusicToVideo": "Añadiendo música al vídeo...", + "DownloadModelTitle": "¿Descargar modelo de música?", + "DownloadModelQuestionX": "Generar música requiere el modelo ACE-Step 1.5 ({0}).\n\n¿Descargar el modelo?", + "DownloadingModel": "Descargando modelo ACE-Step 1.5...", + "SaveAudioTitle": "Guardar música de fondo", + "AudioFileSavedX": "Archivo de audio guardado: {0}", + "UnableToGenerateMusic": "No se pudo generar la música", + "UnableToAddMusicToVideo": "No se pudo añadir la música al vídeo", + "OutputLengthTextToSpeech": "Sigue la voz generada: la música se repite sin cortes y baja mientras alguien habla", + "AddBackgroundMusic": "Añadir música de fondo", + "AddBackgroundMusicHint": "Genera música localmente con ACE-Step 1.5 y la mezcla bajo la voz; baja mientras alguien habla", + "GeneratingBackgroundMusicDotDotDot": "Generando música de fondo...", + "MixingBackgroundMusicDotDotDot": "Mezclando música de fondo..." }, "Voices": "Voces", "Presets": "Preajustes", "TalkerX": "Hablante {0}", "BaseModel": "Modelo base", "TurboModel": "Modelo turbo", - "TtsUpdateX": "Actualizar {0}", "TtsEngineNotInstalled": "{0} no está instalado", "TtsEngineUpdateAvailable": "{0} - actualización disponible", "TtsEngineTooOldUpdateRequired": "{0} es demasiado antiguo: se requiere actualizar", @@ -2858,19 +3259,25 @@ "CloneVoiceTo": "Clonar voz en", "CloneVoiceNameTitle": "Nombre de la nueva voz", "CloneVoiceExtractFailed": "No se pudo extraer el audio de la línea seleccionada.", + "LineXHasNoDuration": "La línea {0} no tiene duración (el tiempo de fin no es posterior al de inicio), por lo que no hay audio que extraer.", + "AudioClipsSkippedLinesX": "No se pudo extraer audio para estas líneas, así que se omitieron: {0}", "ToggleShotChange": "Alternar cambio de plano", "ResetWaveformZoomAndSpeed": "Restablecer zoom y velocidad", "ShowOriginalSubtitle": "Mostrar el subtítulo original", + "TimelineGroupTracksBy": "Agrupar pistas de subtítulos por", + "TimelineShowThumbnails": "Mostrar miniaturas del vídeo", + "ShowSpeechOnly": "Mostrar solo voz (lento de generar)", + "IsolatingSpeechForWaveformX": "Aislando la voz para la forma de onda... {0}", + "IsolatingSpeechForWaveformFailed": "No se pudo aislar la voz para la forma de onda; consulte el registro de herramientas", + "SpeechOnlyWaveformReady": "La forma de onda ahora muestra solo la voz", "ShowOnlyWaveform": "Solo forma de onda", "ShowOnlySpectrogram": "Solo espectrograma", "ShowWaveformAndSpectrogram": "Forma de onda y espectrograma", - "SpectrogramClassic": "Clásico", "SpectrogramClassicViridis": "Viridis", "SpectrogramClassicPlasma": "Plasma", "SpectrogramClassicInferno": "Inferno", "SpectrogramClassicTurbo": "Turbo", "SpectrogramNeon": "Neón", - "WaveformDrawStyleClassic": "Clásico", "WaveformDrawStyleFancy": "Moderno", "SetVideoPositionAndPauseAndSelectSubtitle": "Pos. vídeo, pausar y seleccionar subtítulo", "SetVideopositionAndPauseAndSelectSubtitleAndCenter": "Pos. vídeo, pausar, seleccionar y centrar", @@ -2880,7 +3287,6 @@ }, "Sync": { "VisualSync": "Sincronización visual", - "Sync": "Sincronizar", "StartScene": "Escena inicial", "EndScene": "Escena final", "PlayTwoSecondsAndBack": "Reprod. 2s y atrás", @@ -2896,19 +3302,18 @@ "AdjustSelectedLinesAndForward": "Ajustar líneas sel. y adelante", "ToFrameRate": "A tasa fotogramas", "FromFrameRate": "Desde tasa fotogramas", + "VideoXFrameRateY": "{0} - {1} fps", "AdjustAllTimes": "Ajustar todos los tiempos (antes/después)", "ShowEarlier": "Mostrar antes", "ShowLater": "Mostrar después", - "ChangeFrameRate": "Cambiar tasa fotogramas", "SetSyncPoint": "Establecer punto sincro", "SetSyncPointViaVideo": "Establecer punto de sincronización con el vídeo...", "SyncPointTimeCode": "Código de tiempo del punto de sincronización", "SyncPoints": "Puntos sincro", "PointSync": "Sincronización puntos", "PointSyncViaOther": "Sincronización puntos vía otro subtítulo", - "AdjustmentX": "Ajuste: {0}", - "TotalAdjustmentX": "Ajuste total: {0}", - "SyncPointCandidateInfo": "Se resaltan las líneas que empiezan tras {0}+ segundos de silencio: suelen ser buenos puntos de sincronización", + "SyncPointCandidateAfterInfo": "Se resaltan las líneas seguidas de {0}+ segundos de silencio; suelen ser puntos de sincronización fiables", + "GapAfter": "Espacio después", "AdjustAllShortcuts": "Atajos de teclado:\r\n\r\n• Mayús + Izq/Der: Mover 10 ms\r\n• Ctrl + Izq/Der: Mover 100 ms\r\n• Alt + Izq/Der: Mover 500 ms", "AdjustAllShortcutsFrames": "Atajos de teclado:\r\n\r\n• Mayús + Izq/Der: Mover 1 fotograma\r\n• Ctrl + Izq/Der: Mover 10 fotogramas\r\n• Alt + Izq/Der: Mover 1 segundo", "OffsetInSeconds": "Desfase en segundos", @@ -2928,6 +3333,7 @@ "LineMerge": "Unir líneas", "DelayInSecondsBetweenRequests": "Retraso en segundos entre peticiones", "MaxBytesPerRequest": "Bytes máx. por petición", + "KeepMusicLinesUntranslated": "No traducir líneas entre símbolos musicales (♪ ... ♪)", "PromptText": "Texto del prompt", "ResetPromptToDefault": "Restablecer el prompt predeterminado", "TranslateEachLineSeparately": "Traduce cada línea por separado", @@ -2941,11 +3347,10 @@ "ReadyToTranslate": "Listo para traducir", "Translating": "Traduciendo...", "TranslationComplete": "Traducción completada", + "TranslateInPlaceNoOriginal": "Traducir en el sitio (no crear original)", "TranslationCancelled": "Traducción cancelada", "SwapLanguages": "Intercambiar idiomas de origen y destino", "XIsAlreadyDownloadedReDownload": "{0} ya está descargado. ¿Volver a descargar?", - "AdvancedDotDotDot": "Avanzado...", - "AdvancedSettings": "Ajustes avanzados", "AdvancedSettingsSubtitle": "Opciones de lote, contexto y muestreo para el motor avanzado llama.cpp", "Context": "Contexto", "Synopsis": "Sinopsis", @@ -2969,6 +3374,7 @@ "UseOnlyExtraServerParametersHint": "Inicia llama-server con los parámetros anteriores en lugar del ajuste propio de Subtitle Edit; solo se siguen estableciendo el modelo, el host y el puerto", "ServerRunningAtX": "Servidor en ejecución en {0}", "CustomPromptHint": "Instrucciones personalizadas ({0} = idioma de origen, {1} = idioma de destino); vacío = prompt integrado", + "EditTranslationHint": "Haga clic en la traducción de la fila seleccionada para editarla (Enter guarda, Escape cancela)", "LlamaCppDownloadEngineAndModelPrompt": "llama.cpp necesita que se descarguen el motor llama-server y un modelo de traducción. ¿Descargar ahora?", "LlamaCppDownloadEnginePrompt": "llama.cpp necesita que se descargue el motor llama-server. ¿Descargar ahora?", "LlamaCppDownloadModelPrompt": "llama.cpp necesita que se descargue el modelo de traducción seleccionado. ¿Descargar ahora?" @@ -2995,14 +3401,6 @@ "WaveformSnapToShotChangeSameShotEndMaxSeconds": "Ajustar al cambio de plano más cercano: distancia máx. del fin cuando el inicio y el fin comparten corte (segundos)", "WaveformGuessStartOffsetMs": "Estimar el tiempo de inicio desde la forma de onda: adelantar el inicio (ms)", "WaveformGuessEndOffsetMs": "Estimar el tiempo de fin desde la forma de onda: retrasar el fin (ms)", - "ShowToolbarMultipleReplace": "Mostrar el icono de reemplazo múltiple", - "ShowToolbarPointSync": "Mostrar el icono de sincronización por puntos", - "ShowToolbarAutoTranslate": "Mostrar el icono de traducción automática", - "ShowToolbarSpeechToText": "Mostrar el icono de voz a texto", - "ShowToolbarStyleManager": "Mostrar el icono del gestor de estilos (ASSA/SSA/WebVTT)", - "ShowToolbarProperties": "Mostrar el icono de propiedades (ASSA/SSA)", - "ShowToolbarAttachments": "Mostrar el icono de adjuntos (ASSA/SSA)", - "ShowToolbarAssaDraw": "Mostrar el icono de dibujo ASSA (ASSA)", "ProxyDomain": "Dominio", "ProxyUseSystemCredentials": "Usar las credenciales del sistema", "ProxyBypassList": "Omitir el proxy para", @@ -3014,8 +3412,14 @@ "CheckForUpdatesChannelStableAndBeta": "Versiones estables y beta", "AssaAutoSetResolution": "ASSA: establecer la resolución (PlayResX/PlayResY) desde el vídeo al abrir un vídeo", "AssaAutoSetResolutionPrompt": "ASSA: preguntar antes de cambiar la resolución para que coincida con el vídeo (si no, remuestrear automáticamente)", + "VideoControls": "Controles de vídeo", + "VideoControlsEdit": "Editar controles de vídeo...", + "VideoControlsPositionText": "Texto de posición / duración", + "VideoControlsVideoFileName": "Nombre del archivo de vídeo", + "VideoControlsPlayerName": "Nombre del reproductor de vídeo", "MergeKeepEndTime": "Fusionar líneas: mantener el tiempo de fin (permitir superposición con el subtítulo siguiente)", "MergeKeepEndTimeOnlyAssa": "Fusionar líneas: mantener el tiempo de fin solo para \"Advanced Sub Station Alpha\"", + "MergeAutoBreak": "Combinar líneas: división automática del texto combinado (desactivado conserva los saltos de línea propios)", "DefaultSaveLocation": "Ubicación de guardado predeterminada", "DefaultSaveLocationSourceFileFolder": "Carpeta del archivo de subtítulos/vídeo", "DefaultSaveLocationLastUsedFolder": "Última carpeta usada", @@ -3023,6 +3427,7 @@ "DefaultSaveLocationSubtitleFileFolder": "Carpeta del archivo de subtítulos", "DefaultSaveLocationCustomFolder": "Carpeta personalizada", "SubtitleGridFormattingHideTags": "Ocultar etiquetas", + "SubtitleGridFormattingShowFormattingKeepTags": "Mostrar formato, conservar etiquetas no visuales", "MusicSymbolsToReplace": "Símbolos musicales a reemplazar (separados por comas)", "MusicSymbol": "Símbolo musical", "ColorWordsPerMinute": "Colorear palabras/min si es muy alto", @@ -3033,7 +3438,6 @@ "DialogStyleDashBothLinesWithSpace": "Guiones ambas líneas con espacio", "DialogStyleDashBothLinesWithoutSpace": "Guiones ambas líneas sin espacio", "ContinuationStyle": "Estilo de continuación", - "ContinuationStyleNone": "Ninguno", "ContinuationStyleNoneTrailingDots": "Ninguno, puntos para pausas (solo al final)", "ContinuationStyleNoneLeadingTrailingDots": "Ninguno, puntos para pausas", "ContinuationStyleNoneTrailingEllipsis": "Ninguno, elipsis para pausas (solo al final)", @@ -3044,7 +3448,6 @@ "ContinuationStyleLeadingTrailingEllipsis": "Elipsis", "ContinuationStyleLeadingTrailingDash": "Guion", "ContinuationStyleLeadingTrailingDashDots": "Guion, pero puntos para pausas", - "ContinuationStyleCustom": "Personalizado", "CpsLineLengthStyle": "CPS/Longitud línea", "CpsLineLengthStyleCalcAll": "Contar todos los caracteres", "CpsLineLengthStyleCalcNoSpaceCpsOnly": "Contar todo menos espacios, solo CPS", @@ -3057,27 +3460,11 @@ "CpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly": "Sin espacios ni puntuación, solo CPS", "CpsLineLengthStyleCalcIgnoreArabicDiacritics": "Ignorar diacríticos árabes", "CpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "Ignorar diacríticos árabes, sin espacios", - "TimeCodeModeHhMmSsMs": "HH:MM:SS:MS", - "TimeCodeModeHhMmSsFf": "HH:MM:SS:FF", - "SplitBehaviorPrevious": "Hueco a la izq. de división (foco derecha)", - "SplitBehaviorHalf": "Hueco en centro de división (foco izquierda)", - "SplitBehaviorNext": "Hueco a la der. de división (foco izquierda)", - "SubtitleListActionNothing": "Nada", - "SubtitleListActionVideoGoToPositionAndPause": "Ir a pos. vídeo y pausar", - "SubtitleListActionVideoGoToPositionAndPlay": "Ir a pos. vídeo y reproducir", "SubtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "Ir a pos. vídeo, reprod. actual y pausar", - "SubtitleListActionEditText": "Ir a cuadro de edición", "SubtitleListActionVideoGoToPositionMinus1SecAndPause": "Ir a pos. vídeo - 1 s y pausar", "SubtitleListActionVideoGoToPositionMinusHalfSecAndPause": "Ir a pos. vídeo - 0.5 s y pausar", "SubtitleListActionVideoGoToPositionMinus1SecAndPlay": "Ir a pos. vídeo - 1 s y reproducir", - "SubtitleListActionEditTextAndPause": "Ir a cuadro edición y pausar en pos. vídeo", - "AutoBackupEveryMinute": "Cada minuto", - "AutoBackupEveryXthMinute": "Cada {0} minutos", - "Profiles": "Perfiles", - "AutoBackupDeleteAfterXMonths": "Eliminar copias tras {0} meses", "SearchSettingsDotDotDot": "Buscar ajustes...", - "SyntaxColoring": "Coloreado de sintaxis", - "WaveformSpectrogram": "Forma de onda/espectrograma", "Network": "Red", "FileTypeAssociations": "Asociaciones de archivo", "TextBoxColorTags": "Etiquetas color (HTML/ASSA) en cuadro de edición", @@ -3110,10 +3497,9 @@ "DarkThemeForegroundColor": "Color de frente (tema oscuro)", "DarkThemeBackgroundColor": "Color de fondo (tema oscuro)", "ShowGridLines": "Mostrar líneas de cuadrícula", - "ResetSettings": "¿Restablecer ajustes?", - "ResetSettingsDetail": "Se restablecerán todos los ajustes a sus valores por defecto.\n\n¿Continuar?", "ShowHorizontalLineAboveToolbar": "Línea horizontal sobre barra herramientas", "BookmarkColor": "Color de marcadores", + "SpellCheckHighlightColor": "Color de resaltado de la ortografía", "SingleLineMaxLength": "Longitud máx. línea única", "OptimalCharsPerSec": "CPS óptimos", "MaxCharsPerSec": "CPS máximos", @@ -3126,13 +3512,21 @@ "UnbreakSubtitlesShortThan": "Unir subtítulos más cortos que", "NewEmptyDefaultMs": "Duración predet. nuevo subtítulo (ms)", "TimeCodeUpDownStepMs": "Incremento de tiempo arriba/abajo (ms)", + "MoveSelectedLinesStepMs": "Paso del atajo para mover líneas seleccionadas (ms)", + "MoveStartEndStepMs": "Paso del atajo para mover inicio/fin (ms)", + "MoveLinesShortenNeighbor": "Mover líneas: acortar la línea anterior/siguiente en lugar de superponerla", "PromptBeforeDelete": "Preguntar antes de borrar", "RememberPositionAndSize": "Recordar posición y tamaño de ventana", + "TitleBarFullFileName": "Mostrar la ruta completa del archivo en la barra de título", + "ShowRecentFiles": "Mostrar archivos recientes (para reabrir)", "OpenLastFileOnStart": "Abrir el último archivo reciente al iniciar", "AutoSave": "Guardado automático (guardar el archivo abierto mientras se edita)", "AutoBackupOn": "Copia seguridad automática", "AutoBackupIntervalMinutes": "Intervalo copia seguridad (min)", "AutoBackupDeleteAfterDays": "Días de retención de copias", + "SettingsBackupOn": "Copia de seguridad automática de los ajustes", + "SettingsBackupIntervalDays": "Intervalo de copia de los ajustes (días, 0 = en cada inicio)", + "SettingsBackupMaxCount": "Copias de los ajustes a conservar", "AutoConvertToUtf8": "Auto-convertir a UTF-8 al abrir", "AutoTrimWhiteSpace": "Auto-recortar espacios", "DefaultEncoding": "Codificación predeterminada", @@ -3146,23 +3540,14 @@ "ColorGapTooShort": "Color si espacio es muy corto", "ErrorBackgroundColor": "Color fondo error", "WaveformDrawGridLines": "Dibujar líneas cuadrícula", - "WaveformCenterVideoPosition": "Centrar posición vídeo", + "WaveformUseSkiaRenderer": "Usar renderizador rápido experimental", "WaveformCenterVideoPositionAlsoWhenPaused": "Centrar la posición del vídeo también en pausa", + "WaveformSelectCurrentSubtitleWhilePaused": "Seleccionar el subtítulo actual también en pausa", + "WaveformRememberZoom": "Recordar zoom (horizontal y vertical)", "WaveformShowToolbar": "Mostrar barra de herramientas", "WaveformShowToolbarEdit": "Editar barra herramientas...", "WaveformShowToolbarEditLabel": "Elementos de la barra de herramientas", "WaveformSpectrogramCombinedWaveformHeight": "Onda/espectro combinado, altura onda %", - "ShowWaveformToolbarPlay": "Barra: botón reproducir", - "ShowWaveformToolbarRepeat": "Barra: botón repetir", - "ShowWaveformToolbarRemoveBlankLines": "Barra: botón quitar líneas blanco", - "ShowWaveformToolbarNew": "Barra: botón nuevo subtítulo", - "ShowWaveformToolbarSetStart": "Barra: botón fijar inicio", - "ShowWaveformToolbarSetEnd": "Barra: botón fijar fin", - "ShowWaveformToolbarStartAndOffsetTheRest": "Barra: botón fijar inicio y desfasar resto", - "ShowWaveformToolbarHorizontalZoom": "Barra: deslizador zoom horizontal", - "ShowWaveformToolbarVerticalZoom": "Barra: deslizador zoom vertical", - "ShowWaveformToolbarVideoPositionSlider": "Barra: deslizador posición vídeo", - "ShowWaveformToolbarPlaybackSpeed": "Barra: velocidad reproducción", "WaveformFocusTextboxAfterInsertNew": "Foco en cuadro texto tras insertar", "WaveformInvertMouseWheel": "Invertir rueda ratón", "WaveformMouseWheelSetsVideoPosition": "La rueda del ratón fija la posición del vídeo", @@ -3181,27 +3566,8 @@ "WaveformSelectedColor": "Color de onda seleccionada", "DownloadFfmpeg": "Descargar ffmpeg", "FixCommonErrorsSkipStep1": "Corregir errores comunes: omitir el paso 1 (elegir correcciones)", - "ShowToolbarNew": "Icono nuevo", - "ShowToolbarOpen": "Icono abrir", - "ShowToolbarVideoFileOpen": "Icono abrir vídeo", - "ShowToolbarSave": "Icono guardar", - "ShowToolbarSaveAs": "Icono guardar como", - "ShowToolbarFind": "Icono buscar", - "ShowToolbarReplace": "Icono reemplazar", - "ShowToolbarSpellCheck": "Icono ortografía", - "ShowToolbarFixCommonErrors": "Icono errores comunes", - "ShowToolbarRemoveTextForHi": "Mostrar icono de eliminar texto para sordos", - "ShowToolbarVisualSync": "Mostrar icono de sincronización visual", - "ShowToolbarBeautifyTimeCodes": "Mostrar icono de embellecer códigos de tiempo", - "ShowToolbarBurnIn": "Mostrar icono de incrustación", - "ShowToolbarSettings": "Icono ajustes", - "ShowToolbarLayout": "Icono diseño", - "ShowToolbarHelp": "Icono ayuda", - "ShowToolbarEncoding": "Mostrar codificación", - "ShowToolbarFrameRate": "Mostrar tasa fotogramas", "ShowPluginsMenu": "Mostrar el menú Plugins", "ProxyAddress": "Dirección proxy", - "Username": "Usuario", "Password": "Password", "DefaultFormat": "Formato predeterminado", "DefaultSaveAsFormat": "Formato predeterminado \"Guardar como\"", @@ -3209,10 +3575,13 @@ "FavoriteLanguages": "Idiomas favoritos", "WebVttUseXTimestampMap": "WebVTT: usar X-TIMESTAMP-MAP (desfasar códigos de tiempo al cargar)", "FullscreenHideControls": "Ocultar los controles de vídeo en pantalla completa", + "ShowSecondarySubtitleDialog": "Mostrar diálogo de estilo al abrir un archivo de subtítulo secundario", + "RememberSecondarySubtitleFile": "Recordar archivo de subtítulo secundario", "AutoOpenVideoFile": "Abrir vídeo al abrir subtítulos", "DownloadMpv": "Descargar mpv", "DownloadVlc": "Descargar VLC", "AllowSingleLetterShortcutsInTextbox": "Permitir atajos de una sola letra en el cuadro de texto", + "AllowTextNavigationShortcutsInTextbox": "Permitir atajos en teclas de navegación de texto (Ctrl+Izquierda/Derecha, Inicio/Fin) en el cuadro de texto", "SpellCheckEnglishTreatInApostropheAsIng": "Ortografía: tratar las palabras terminadas en 'in'' como 'ing' (solo inglés)", "GoToLineNumberSetsVideoPosition": "Ir a línea también mueve vídeo", "AdjustAllTimesRememberLineSelectionChoice": "Recordar elección selección líneas al ajustar tiempos", @@ -3224,6 +3593,7 @@ "ShowAssaLayer": "Mostrar cuadro capa ASSA", "WaveformCursorColor": "Color cursor/cabezal onda", "WaveformShotChangeColor": "Color de cambio de plano en la forma de onda", + "WaveformGridColor": "Color de la cuadrícula de la forma de onda", "WaveformParagraphLeftColor": "Color borde izquierdo onda", "WaveformParagraphRightColor": "Color borde derecho onda", "WaveformFancyHighColor": "Color onda moderno (alto)", @@ -3251,27 +3621,31 @@ "ResetSyntaxColoring": "Restablecer color sintaxis", "ResetWaveform": "Restablecer forma de onda", "ResetRules": "Restablecer reglas", - "UseFrameMode": "Usar modo fotogramas (hh.mm.ss.ff)", + "TimeCodeMode": "Modo de código de tiempo", + "TimeCodeModeTime": "Tiempo (hh:mm:ss,zzz)", + "TimeCodeModeFrames": "Fotogramas (hh:mm:ss:ff)", + "TimeCodeModeFrameNumbers": "Números de fotograma", + "FrameModeSnapToVideoFrames": "Guardar tiempos en fotogramas del vídeo (no fotogramas dentro de cada segundo)", "TextBoxLimitNewLines": "Limitar saltos línea en cuadro texto", - "MpvVideoOutput": "Salida vídeo (mpv)", "MpvOpenGl": "libmpv - OpenGL", "MpvSoftwareRendering": "libmpv - Software (lento)", + "MpvMetalRendering": "libmpv - Metal (experimental, requiere reiniciar)", "MpvWidRendering": "libmpv - Nativo Window ID (rápido en Win/Linux)", "WaveFormsAndSpectrogramFoldersContainsX": "Carpetas de onda/espectro contienen {0}", "DeleteWaveformAndSpectrogramFoldersQuestion": "¿Borrar archivos de onda y espectro?", "WaveformGenerateSpectrogram": "Generar espectrograma", "WaveformAutoGenerate": "Generar la forma de onda automáticamente al abrir un vídeo", "WaveformSpectrogramMode": "Modo espectrograma", - "WaveformCenterOnSingleClick": "Centrar con un clic", - "WaveformSingleClickSelectsSubtitle": "Clic selecciona subtítulo", "WaveformRightClickSelectsSubtitle": "Clic derecho selecciona subtítulo", - "WaveformPauseOnSingleClick": "Clic pausa reproducción", "WaveformDrawStyle": "Estilo dibujo onda", "WaveformExtractAudioFormat": "Formato de audio extraído", "WaveformExtractAudioSampleRate": "Frecuencia de muestreo del audio extraído", "WaveformExtractAudioSampleRateOriginal": "Original (mantener la fuente)", "WaveformExtractAudioBitRate": "Tasa de bits del audio extraído (MP3/M4A)", + "FfmpegUseCenterChannelOnly": "Usar solo el canal central frontal para audio 5.1 (FFmpeg)", "VlcWidRendering": "libVLC - Nativo Window ID", + "FfmpegSoftwareRendering": "FFmpeg", + "DownloadFfmpegLibs": "Descargar bibliotecas FFmpeg (para el reproductor de vídeo FFmpeg)", "SubtitleGridEnterKeyAction": "Acción tecla Enter en lista", "SubtitleSingleClickAction": "Acción un clic en lista", "SubtitleDoubleClickAction": "Acción doble clic en lista", @@ -3297,25 +3671,25 @@ "SaveAsBehaviorUseVideoFileName": "Usar nombre de vídeo", "SaveAsBehaviorUseSubtitleFileName": "Usar nombre de subtítulo", "SaveAsAppendLanguageCodeTwoLetter": "Dos letras", - "SaveAsAppendLanguageCodeThreeLetter": "Tres letras", - "SaveAsAppendLanguageCodeThreeLetterBibliographic": "Tres letras (ISO 639-2/B)", "SaveAsAppendLanguageCodeLanguageName": "Nombre del idioma", "SplitOddLineActionWeightTop": "Priorizar arriba", "SplitOddLineActionWeightBottom": "Priorizar abajo", "SplitOddLinesAction": "Acción dividir líneas impares", "OcrUseWordSplitList": "OCR: usar lista división palabras", "OcrGuessUnknownWords": "OCR: intentar adivinar palabras desconocidas", + "SpellCheckRememberUseAlwaysList": "Revisión ortográfica: recordar lista \"Usar siempre\"", + "FixShortDisplayTimesAllowMoveStartTime": "Corregir errores comunes: corregir tiempos cortos puede mover el tiempo de inicio", "SpeechToTextSelectedLinesPromptFirstTimeOnly": "Voz a texto: líneas seleccionadas, preguntar por idioma/motor solo la primera vez", "MultipleReplaceShowDotDotDotButtons": "Reemplazo múltiple: botones menú contexto", "GridFocusTextboxAfterInsertNew": "Lista: foco en cuadro texto tras insertar", + "UndoRedoGoToChangedLine": "Deshacer/rehacer: ir a la línea modificada (y a la posición del vídeo)", "TextToSpeechPromptMergeContinuationLines": "Texto a voz: preguntar para combinar líneas de continuación", "TextToSpeechPromptSkipNoiseLines": "Texto a voz: preguntar para omitir las líneas de sonido/música", "TextToSpeechPromptDetectSpeakers": "Texto a voz: preguntar para detectar nombres de hablantes en el texto", "UseFocusedButtonBackgroundColor": "Usar color fondo en botón enfocado", "FocusedButtonBackgroundColor": "Color fondo botón enfocado", "ForceCrLfOnSave": "Forzar CR+LF al guardar", - "ShowWaveformToolbarPlayNext": "Barra: botón reprod. siguiente", - "ShowWaveformToolbarPlaySelection": "Barra: botón reprod. selección", + "LinuxClipboardUseExternalTool": "Copiar texto mediante xclip/wl-copy (conserva los caracteres acentuados)", "ShowFormatLimitWarning": "Avisar al guardar cuando las líneas superen los límites del formato (p. ej. SCC 32 car./línea)", "TextBoxButtonShowAutoBreak": "C. texto: botón auto-división", "TextBoxButtonShowUnbreak": "C. texto: botón unir", @@ -3327,12 +3701,18 @@ "WaveformDoubleClickAction": "Acción doble clic en onda", "AllSettings": "Todos los ajustes", "UiScale": "Escala de la interfaz (%)", + "FontScale": "Escala de fuente (%)", + "TextSelectionOpacity": "Opacidad de la selección de texto (%)", "WaveformToolbarItems": "Elementos barra onda", "MatchIconColorToDarkTheme": "Iconos acordes al tema oscuro", "SubtitlePreviewProperties": "Propiedades vista previa", "UsePositionFromSubtitleFile": "Usar la posición del archivo de subtítulos (TTML/PAC/EBU STL)", "MarginIsPartOfSubtitleArea": "El margen forma parte del área del subtítulo", "TextJustify": "Justificar las líneas", + "Deinterlace": "Desentrelazar vídeo", + "DeinterlaceOff": "Desactivado", + "DeinterlaceAuto": "Auto (solo fotogramas entrelazados)", + "DeinterlaceAlways": "Siempre", "PixelWidthInfo": "Líneas verdes = límite de ancho máximo | \r\nÁrea roja = el texto excede el límite", "SpellCheckEngineHunSpelll": "Hunspell", "SpellCheckEngineMsWord": "MS Word", @@ -3341,117 +3721,89 @@ "WaveformColorTheme": "Tema de color:", "WaveformSaveAsCustomTheme": "Guardar como tema personalizado...", "WaveformLoadThemeDotDotDot": "Cargar tema...", - "WaveformExportThemeDotDotDot": "Exportar tema..." + "WaveformExportThemeDotDotDot": "Exportar tema...", + "WaveformSaveCustomThemeTitle": "Guardar tema personalizado", + "WaveformThemeFileType": "Tema de forma de onda de Subtitle Edit", + "WaveformThemeHighContrast": "Alto contraste", + "WaveformThemeOceanBlue": "Azul océano", + "WaveformThemeWarmSunset": "Atardecer cálido", + "WaveformThemeForest": "Bosque", + "WaveformThemeMidnightPurple": "Púrpura medianoche", + "WaveformThemeRetroAmber": "Ámbar retro", + "WaveformThemeIce": "Hielo" }, "Shortcuts": { "GeneralUnbreakNoSpaceCjk": "Unir sin espacio (CJK)", - "Title": "Atajos de teclado", + "GeneralToggleBreak": "Alternar dividir/unir", "SearchShortcuts": "Buscar atajos...", - "Filter": "Filtro", - "CategoryGeneral": "General", "CategorySubtitleGridAndTextBox": "Lista y cuadro texto", "CategorySubtitleGrid": "Lista subtítulos", - "CategoryWaveform": "Forma de onda", "CategoryTextBox": "Cuadro de texto", "CategoryFile": "Archivo", "CategoryVideo": "Vídeo", "CategorySync": "Sincronización", - "CategoryTranslate": "Traducir", - "CategorySearch": "Buscar", - "CategoryTools": "Herramientas", "CategoryAi": "IA", + "CategoryCustom": "Personalizado", + "EditCustomShortcut": "Editar atajo personalizado", + "CustomShortcutTextBoxKeyHint": "Use aquí una tecla con Ctrl/Alt: una tecla sola ya no escribiría en el cuadro de texto.", + "CustomShortcutNumberX": "Atajo personalizado n.º {0}", + "CustomShortcutNumberXY": "Atajo personalizado n.º {0}: {1}", + "CustomShortcutStep": "Paso", + "CustomShortcutSteps": "Pasos", + "CustomShortcutStepRunCommand": "Ejecutar comando", + "CustomShortcutStepInsertText": "Insertar texto", + "CustomShortcutStepReplace": "Buscar y reemplazar", + "CustomShortcutInsertAtCursor": "En el cursor", + "CustomShortcutInsertAtStart": "Al inicio del texto", + "CustomShortcutInsertAtEnd": "Al final del texto", + "CustomShortcutSummaryRunCommandX": "Ejecutar: {0}", + "CustomShortcutSummaryInsertXY": "Insertar \"{0}\" ({1})", + "CustomShortcutSummaryReplaceXY": "Reemplazar \"{0}\" por \"{1}\"", + "CustomShortcutSummaryReplaceRegexXY": "Reemplazar expresión regular \"{0}\" por \"{1}\"", + "CustomShortcutPickCommand": "Seleccione un comando para ejecutar.", + "CustomShortcutEnterText": "Introduzca el texto que desea insertar.", + "CustomShortcutEnterFind": "Introduzca el texto que desea buscar.", + "CustomShortcutInvalidRegexX": "Expresión regular no válida: {0}", + "CustomShortcutStepsHint": "Los pasos se ejecutan de arriba abajo. Los pasos de texto actúan sobre las líneas seleccionadas; los comandos que abren una ventana continúan cuando esta se cierra.", "ActiveIn": "Activo en", "ActiveInEverywhere": "En todas partes", - "GeneralSetupLikeSe4": "Configurar como Subtitle Edit 4 (tema, atajos, reglas de reemplazo)", - "GeneralMergeSelectedLines": "Combinar líneas seleccionadas", - "GeneralMergeWithPrevious": "Combinar con el anterior", - "GeneralMergeWithNext": "Combinar con el siguiente", - "GeneralMergeWithPreviousAndUnbreak": "Combinar con anterior y unir", - "GeneralMergeWithNextAndUnbreak": "Combinar con siguiente y unir", - "GeneralMergeWithPreviousAndAutoBreak": "Combinar con anterior y auto-dividir", - "GeneralMergeWithNextAndAutoBreak": "Combinar con siguiente y auto-dividir", - "GeneralMergeSelectedLinesAndAutoBreak": "Combinar seleccionados y auto-dividir", "GeneralMergeSelectedLinesAndUnbreak": "Combinar seleccionados y unir", "GeneralMergeSelectedLinesAndUnbreakCjk": "Combinar seleccionados y unir CJK", - "GeneralMergeSelectedLinesOnlyFirstText": "Combinar seleccionados (solo primer texto)", "GeneralMergeSelectedLinesBilingual": "Combinar seleccionados bilingüe", - "GeneralMergeWithPreviousBilingual": "Combinar con anterior bilingüe", - "GeneralMergeWithNextBilingual": "Combinar con siguiente bilingüe", - "GeneralMergeOriginalAndTranslation": "Combinar original y traducción", "GeneralToggleTranslationMode": "Alternar modo traducción", - "GeneralSwitchOriginalAndTranslation": "Intercambiar original y traducción", - "GeneralSwitchOriginalAndTranslationTextBoxes": "Intercambiar cuadros de texto original/trad.", "GeneralToggleTranslationAndOriginalInPreviews": "Alternar traducción y original en la vista previa de vídeo/audio", "GeneralChooseLayout": "Elegir diseño", - "GeneralLayoutChooseX": "Diseño {0}", - "GeneralPlayFirstSelected": "Reproducir primero seleccionado", - "GeneralGoToFirstSelectedLine": "Ir a primera línea seleccionada", - "GeneralGoToNextEmptyLine": "Ir a siguiente línea vacía", "GeneralGoToNextSubtitle": "Ir al siguiente subtítulo", "GeneralGoToNextSubtitlePlayTranslate": "Ir a sig. subtítulo (reprod. trad.)", "GeneralGoToNextSubtitleCursorAtEnd": "Ir a sig. subtítulo (cursor al final)", "GeneralGoToPrevSubtitle": "Ir al subtítulo anterior", "GeneralGoToPrevSubtitlePlayTranslate": "Ir a ant. subtítulo (reprod. trad.)", - "GeneralGoToStartOfCurrentSubtitle": "Ir al inicio del subtítulo actual", - "GeneralGoToEndOfCurrentSubtitle": "Ir al fin del subtítulo actual", - "GeneralGoToPreviousSubtitleAndFocusVideo": "Ir a ant. subtítulo y foco vídeo", - "GeneralGoToNextSubtitleAndFocusVideo": "Ir a sig. subtítulo y foco vídeo", - "GeneralGoToPrevSubtitleAndPlay": "Ir a ant. subtítulo y reproducir", - "GeneralGoToNextSubtitleAndPlay": "Ir a sig. subtítulo y reproducir", - "GeneralGoToPreviousSubtitleAndFocusWaveform": "Ir a ant. subtítulo y foco onda", - "GeneralGoToNextSubtitleAndFocusWaveform": "Ir a sig. subtítulo y foco onda", - "GeneralGoToLineNumber": "Ir al número de línea", "GeneralGoToFirstLine": "Ir a la primera línea", "GeneralGoToLastLine": "Ir a la última línea", "AlsoSetVideoPosition": "Establecer también la posición del vídeo", "GeneralGoToVideoPosition": "Ir a la posición del vídeo", "GeneralToggleItalic": "Alternar cursiva", "GeneralToggleBold": "Alternar negrita", - "GeneralToggleBookmarks": "Alternar marcadores", - "GeneralFocusTextBox": "Enfocar cuadro de texto", - "GeneralToggleBookmarksWithText": "Alternar marcadores con texto", - "GeneralEditBookmarks": "Editar marcadores", - "FileNew": "Nuevo", "GeneralToggleUnderline": "Alternar subrayado", + "GeneralToggleBox": "Alternar caja (EBU STL)", "FileOpen": "Abrir", "FileOpenKeepVideo": "Abrir (mantener vídeo)", "FileSave": "Guardar", "FileSaveAs": "Guardar como", - "FileSaveAll": "Guardar todo", "FileSaveOriginal": "Guardar original", - "FileSaveOriginalAs": "Guardar original como", - "FileOpenOriginalSubtitle": "Abrir subtítulo original", - "FileCloseOriginalSubtitle": "Cerrar subtítulo original", - "FileTranslatedSubtitle": "Subtítulo traducido", "FileCompare": "Comparar", "FileStatistics": "Estadísticas", "FileImportPlainText": "Importar texto plano", - "FileImportBluRaySupForOcr": "Importar Blu-ray SUP para OCR", - "FileImportBluRaySupForEdit": "Importar Blu-ray SUP para editar", - "FileImportTimeCodes": "Importar códigos de tiempo", "FileExportEbuStl": "Exportar EBU STL", "FileExportPac": "Exportar PAC", - "FileExportEdlClipName": "Exportar nombre clip EDL", - "FileExportPlainText": "Exportar texto plano", - "FileExportCustomTextFormat1": "Exportar formato personal. 1", - "FileExportCustomTextFormat2": "Exportar formato personal. 2", - "FileExportCustomTextFormat3": "Exportar formato personal. 3", "FileExit": "Salir", "OpenSeDataFolder": "Abrir carpeta Subtitle Edit", - "EditFind": "Buscar", - "EditFindNext": "Buscar siguiente", "EditFindPrevious": "Buscar anterior", - "EditReplace": "Reemplazar", - "EditMultipleReplace": "Reemplazo múltiple", "FillSelectedLinesWithClipboard": "Rellenar líneas seleccionadas con el texto del portapapeles", - "EditModifySelection": "Modificar selección", - "ListSelectAll": "Seleccionar todo", - "ListSelectFirst": "Seleccionar primero", - "ListSelectLast": "Seleccionar último", "ListInverseSelection": "Invertir selección", "ListDeleteSelection": "Eliminar selección", + "DeleteSelectionEverywhere": "Eliminar selección (en todas partes)", "RippleDeleteSelection": "Eliminar selección (efecto rizo)", - "Settings": "Ajustes", "Assigned": "Asignado", "Unassigned": "Sin asignar", "PressedKeyX": "Tecla pulsada: {0}", @@ -3459,6 +3811,7 @@ "DetectKey": "Detectar tecla", "Control": "Control", "Alt": "Alt", + "AltGr": "AltGr", "Win": "Win", "Shift": "Mayús", "ControlMac": "⌃", @@ -3469,11 +3822,14 @@ "ResetShortcutsDetail": "¿Desea restablecer todos los atajos a sus valores por defecto?", "TogglePlayPause": "Alternar reprod./pausa", "ToggleLockTimeCodes": "Alternar bloqueo tiempos", + "ToggleTimeCodeMode": "Alternar modo de código de tiempo (tiempo/fotogramas/números de fotograma)", + "ToggleScreenPrivacy": "Alternar privacidad de pantalla (ocultar nombres de archivo y luego también textos)", + "ScreenPrivacyFileNamesHidden": "Privacidad de pantalla: nombres de archivo ocultos", + "ScreenPrivacyFileNamesAndTextsHidden": "Privacidad de pantalla: nombres de archivo y textos ocultos", + "ScreenPrivacyOff": "Privacidad de pantalla: desactivada", "DuplicateSelectedLines": "Duplicar líneas seleccionadas", "SourceView": "Vista de origen", - "ShowAlignmentPicker": "Alineación", "AddOrEditBookmark": "Añadir o editar marcador", - "ListBookmarks": "Listar marcadores", "ToggleBookmark": "Alternar marcador (sin texto)", "ToggleForcedSelectedLines": "Alternar forzado (líneas seleccionadas)", "GoToNextBookmark": "Ir al siguiente marcador", @@ -3484,12 +3840,12 @@ "WaveformSetStartAndSetEndOfPreviousMinusGap": "Fijar inicio y fin del anterior menos espacio", "WaveformSetEndAndStartOfNextAfterGap": "Fijar fin e inicio del siguiente más espacio", "WaveformSetEndAndStartOfNextAfterGapAndGoToNext": "Fijar fin, inicio del sig. e ir al siguiente", - "FetchFirstWordFromNextSubtitle": "Traer primera palabra del siguiente", "MoveLastWordToNextSubtitle": "Mover última palabra al siguiente", "MoveLastWordFromFirstLineDownCurrentSubtitle": "Bajar última palabra de la primera línea", "MoveFirstWordFromNextLineUpCurrentSubtitle": "Subir primera palabra de la segunda línea", "MoveTextFromCursorToNextAndGoToNext": "Mover el texto tras el cursor al siguiente subtítulo e ir al siguiente", "MoveTextFromCursorToNextAndGoToNextAndPlay": "Mover el texto tras el cursor al siguiente subtítulo, ir al siguiente y reproducir", + "MoveTextFromCursorToNextAndGoToNextAndPlayAndPause": "Mover el texto tras la posición del cursor al siguiente subtítulo, ir al siguiente, reproducirlo y pausar al final", "BreakAtFirstSpaceFromCursor": "Dividir en el primer espacio desde la posición del cursor", "BreakAtFirstSpaceFromCursorAndGoToNext": "Dividir en el primer espacio desde la posición del cursor e ir a la siguiente", "ToggleFocusGridAndWaveform": "Cambiar foco entre lista y onda", @@ -3501,7 +3857,6 @@ "VideoGoToPreviousTimeCode": "Ir al código de tiempo anterior", "VideoGoToNextTimeCode": "Ir al siguiente código de tiempo", "GoToNextLineAndSetVideoPosition": "Ir a línea siguiente y mover vídeo", - "TextBoxDeleteSelectionNoClipboard": "Cuadro texto: Borrar sin copiar", "TextBoxDeleteForward": "Cuadro de texto: eliminar la selección o el carácter siguiente (supresión hacia delante)", "TextBoxCut": "Cuadro texto: Cortar", "TextBoxCut2": "Cuadro texto: Cortar (alt.)", @@ -3520,6 +3875,7 @@ "ListViewColumnTextUp": "Columna, texto arriba", "ListViewColumnTextDown": "Columna, texto abajo", "AutoTranslateSelectedLines": "Auto-traducir líneas seleccionadas...", + "AutoTranslateSelectedLinesNoPrompt": "Traducir automáticamente las líneas seleccionadas (sin preguntar, usar último motor/idiomas)", "SetAssaResolution": "Establecer resolución ASSA (PlayResX/PlayResY)", "SetShortcutForX": "Fijar atajo para \"{0}\"", "CommandFileNewKeepVideo": "Nuevo (mantener vídeo)", @@ -3527,29 +3883,22 @@ "FileCloseOriginal": "Cerrar original", "FileCloseTranslation": "Cerrar traducción", "RestoreAutoBackup": "Restaurar copia seguridad", - "OpenContainingFolder": "Abrir carpeta contenedora", "ImportTimeCodes": "Importar códigos tiempo", "ImportSubtitleWithManuallyChosenEncoding": "Importar subtítulo con codificación manual", "ExportBluRaySup": "Exportar Blu-ray SUP", "ExportCustomTextFormat": "Exportar formato personal.", "ExportPlainText": "Exportar texto plano", - "ShowHistory": "Mostrar historial", "ToggleRightToLeft": "Alternar derecha a izquierda", "ModifySelection": "Modificar selección", "AdjustDurations": "Ajustar duraciones", "ApplyDurationLimits": "Aplicar límites duración", "BatchConvert": "Conversión por lotes", - "BridgeGaps": "Unir espacios", "ApplyMinGap": "Aplicar espacio mín.", - "FixCommonErrors": "Corregir errores comunes", "MakeEmptyTranslationFromCurrentSubtitle": "Vaciar traducción desde subtítulo actual", - "MergeLinesWithSameText": "Combinar líneas con mismo texto", - "MergeLinesWithSameTimeCodes": "Combinar con mismos códigos tiempo", "SplitBreakLongLines": "Dividir/reequilibrar líneas largas", "MergeShortLines": "Combinar líneas cortas", "MergeContinuationLines": "Combinar líneas de continuación", "SnapAllTimesToFrames": "Ajustar todos los tiempos a fotogramas", - "RemoveTextForHearingImpaired": "Quitar texto defic. auditivos", "JoinSubtitles": "Unir subtítulos", "SplitSubtitle": "Dividir subtítulo", "SpellCheck": "Corrector ortográfico", @@ -3571,7 +3920,6 @@ "AdjustAllTimes": "Ajustar todos los tiempos", "VisualSync": "Sincronización visual", "TranslateViaCopyPaste": "Traducir vía copiar-pegar", - "Shortcuts": "Atajos de teclado", "WordLists": "Listas de palabras", "ChooseUiLanguage": "Elegir idioma interfaz", "ChooseRuleProfile": "Elegir perfil de reglas", @@ -3582,6 +3930,7 @@ "TextBoxItalic": "Cuadro texto: Cursiva", "TextBoxBold": "Cuadro de texto: negrita", "TextBoxUnderline": "Cuadro de texto: subrayado", + "TextBoxBox": "Caja del cuadro de texto (EBU STL)", "ResetWaveformZoomAndSpeed": "Restablecer zoom y velocidad onda", "TogglePlaybackSpeed": "Alternar velocidad reproducción", "PlaybackSpeedSlower": "Reproducción más lenta", @@ -3593,22 +3942,28 @@ "SeekSilenceForward": "Buscar silencio hacia delante", "WaveformGuessStart": "Estimar el tiempo de inicio desde la forma de onda", "WaveformGuessEnd": "Estimar el tiempo de fin desde la forma de onda", + "WaveformGuessStartAndEnd": "Estimar tiempos de inicio y fin a partir de la forma de onda", "SetVideoPositionCurrentSubtitleStart": "Ir al inicio de línea actual", "GoToSubtitlePositionAndPause": "Ir a la posición del subtítulo y pausar", "SetVideoPositionCurrentSubtitleEnd": "Ir al fin de línea actual", "ToggleAudioTracks": "Alternar pistas audio", - "ListErrors": "Listar errores", "GoToNextError": "Ir al siguiente error", "GoToPreviousError": "Ir al anterior error", "AddNameToNameList": "Añadir nombre a la lista", "FindDoubleWords": "Buscar palabras dobles", "FindDoubleLines": "Buscar líneas dobles", "ColorX": "Color {0}", - "RemoveColor": "Quitar color", "SurroundWith": "Rodear con...", "SurroundWithXY": "Rodear con {0}/{1}", - "RepeatLine": "Repetir línea", "SurroundWithNumberX": "Rodear con n.º {0}", + "SurroundWithBehavior": "Comportamiento", + "SurroundWithBehaviorToggle": "Alternar (añadir, o quitar si existe)", + "SurroundWithBehaviorAdd": "Añadir (cada vez)", + "SurroundWithBehaviorRemove": "Quitar (todos)", + "SurroundWithBehaviorRemoveOnce": "Quitar (uno cada vez)", + "SurroundWithWorksOn": "Actúa sobre", + "SurroundWithScopeSelectionOrText": "Selección, si no todo el texto", + "SurroundWithScopeEachLine": "Cada línea", "SearchVia": "Buscar con", "SearchViaX": "Buscar con {0}", "SearchViaNumberX": "Buscar con n.º {0}", @@ -3636,6 +3991,11 @@ "CopySubtitlePathToClipboard": "Copiar ruta subtítulo", "CopySubtitleOriginalPathToClipboard": "Copiar ruta subtítulo original", "FocusTextBox": "Enfocar cuadro texto", + "FocusSubtitleListView": "Enfocar la lista de subtítulos", + "FocusWaveform": "Enfocar la forma de onda", + "FocusOriginalTextBox": "Enfocar el cuadro de texto original", + "TextBoxGoToStart": "Cuadro de texto, ir al inicio", + "TextBoxGoToEnd": "Cuadro de texto, ir al final", "SortByNumber": "Ordenar por número", "SortByStartTime": "Ordenar por inicio", "SortByEndTime": "Ordenar por fin", @@ -3660,7 +4020,6 @@ "AssaStyles": "Estilos ASSA", "AssaProperties": "Propiedades ASSA", "AssaAttachments": "Adjuntos ASSA", - "AssaVideoColorPicker": "Selector color vídeo ASSA", "RecalculateDurationSelectedLines": "Recalcular duración (líneas sel.)", "SetDurationMaxCpsSelectedLines": "Establecer duración a CPS máx. (líneas seleccionadas)", "ToggleWaveformAndSpectrogramHeight": "Alternar altura onda/espectro", @@ -3676,7 +4035,7 @@ "GoogleIt": "Buscar en Google (texto seleccionado)", "SetActorX": "Establecer actor: {0}", "SetNewActor": "Establecer nuevo actor...", - "SetActorSlotXTitle": "Espacio de actor {0}", + "SetStyleX": "Establecer estilo: {0}", "ToggleDialogDashes": "Alternar guiones de diálogo", "MergeWithLineBeforeAsDialog": "Combinar con la línea anterior como diálogo", "MergeWithLineAfterAsDialog": "Combinar con la línea siguiente como diálogo", @@ -3687,13 +4046,27 @@ "MoveStartOneFrameBackKeepGapPrev": "Mover el inicio un fotograma atrás (mantener el espacio con el anterior si está cerca)", "MoveStartOneFrameForwardKeepGapPrev": "Mover el inicio un fotograma adelante (mantener el espacio con el anterior si está cerca)", "MoveEndOneFrameBackKeepGapNext": "Mover el fin un fotograma atrás (mantener el espacio con el siguiente si está cerca)", - "MoveEndOneFrameForwardKeepGapNext": "Mover el fin un fotograma adelante (mantener el espacio con el siguiente si está cerca)" + "MoveEndOneFrameForwardKeepGapNext": "Mover el fin un fotograma adelante (mantener el espacio con el siguiente si está cerca)", + "MoveStartXMsBack": "Mover inicio X ms atrás (X se define en Ajustes, también en Sincronización visual)", + "MoveStartXMsForward": "Mover inicio X ms adelante (X se define en Ajustes, también en Sincronización visual)", + "MoveEndXMsBack": "Mover fin X ms atrás (X se define en Ajustes, también en Sincronización visual)", + "MoveEndXMsForward": "Mover fin X ms adelante (X se define en Ajustes, también en Sincronización visual)", + "MoveSelectedLinesXMsBack": "Mover líneas seleccionadas X ms atrás (X se define en Ajustes)", + "MoveSelectedLinesXMsForward": "Mover líneas seleccionadas X ms adelante (X se define en Ajustes)", + "MoveSelectedLinesAndForwardXMsBack": "Mover líneas seleccionadas y todas las siguientes X ms atrás (X se define en Ajustes)", + "MoveSelectedLinesAndForwardXMsForward": "Mover líneas seleccionadas y todas las siguientes X ms adelante (X se define en Ajustes)", + "MoveAllLinesXMsBack": "Mover todas las líneas X ms atrás (X se define en Ajustes)", + "MoveAllLinesXMsForward": "Mover todas las líneas X ms adelante (X se define en Ajustes)", + "MoveSelectedLinesCustomMsBack": "Mover líneas seleccionadas, milisegundos personalizados ({0:#,###,##0}) atrás, {1}", + "MoveSelectedLinesCustomMsForward": "Mover líneas seleccionadas, milisegundos personalizados ({0:#,###,##0}) adelante, {1}", + "MoveSelectedLinesAndForwardCustomMsBack": "Mover líneas seleccionadas y todas las siguientes, milisegundos personalizados ({0:#,###,##0}) atrás, {1}", + "MoveSelectedLinesAndForwardCustomMsForward": "Mover líneas seleccionadas y todas las siguientes, milisegundos personalizados ({0:#,###,##0}) adelante, {1}", + "MoveAllLinesCustomMsBack": "Mover todas las líneas, milisegundos personalizados ({0:#,###,##0}) atrás, {1}", + "MoveAllLinesCustomMsForward": "Mover todas las líneas, milisegundos personalizados ({0:#,###,##0}) adelante, {1}" }, "WordLists": { "Title": "Listas de palabras", "AddName": "Añadir nombre", - "AddWord": "Añadir palabra", - "AddPair": "Añadir par", "NameAndIgnoreList": "Lista nombres/ignorar", "UserWords": "Lista palabras usuario", "OcrFixList": "Lista corrección OCR", @@ -3710,7 +4083,6 @@ "NoPluginsInstalled": "No hay plugins instalados", "GetPluginsOnline": "Obtener plugins en línea...", "GetPluginsTitle": "Obtener plugins", - "Enabled": "Activado", "Disabled": "Desactivado", "NotSupportedOnThisOs": "No compatible con este sistema operativo", "RemovePluginXConfirm": "¿Eliminar el plugin '{0}'? Esto borra la carpeta del plugin:{1}", @@ -3727,17 +4099,19 @@ "DownloadingXPercent": "Descargando {0}%...", "PluginXInstalled": "'{0}' instalado.", "CouldNotInstallPluginX": "No se pudo instalar '{0}': {1}", - "NotInstalled": "No instalado", "Install": "Instalar", "Reinstall": "Reinstalar", - "Update": "Actualizar", "InstalledX": "Instalado ({0})", "UpdateAvailableXToY": "Actualización disponible ({0} → {1})", "ApplyPluginToWhichLinesX": "Aplicar '{0}' a:", "ApplyToSelectedLinesX": "Líneas seleccionadas ({0})", "ApplyToAllLinesX": "Todas las líneas ({0})", "UpdateAllXAvailable": "Actualizar todo ({0})", - "UpdatingXOfY": "Actualizando {0}/{1}..." + "UpdatingXOfY": "Actualizando {0}/{1}...", + "DoNotAskAgain": "No volver a preguntar (se cambia en Administrar plugins)", + "ApplyPluginsTo": "Aplicar plugins a", + "AskEachTime": "Preguntar cada vez", + "AllLines": "Todas las líneas" }, "Help": { "AboutSubtitleEdit": "Acerca de Subtitle Edit", @@ -3781,6 +4155,8 @@ "NOcrDatabase": "Base de datos nOCR", "DrawMode": "Modo dibujo:", "AddNewCharcter": "Añadir nuevo carácter", + "AddNOcrCharacterTitle": "Añadir carácter nOCR para la línea {0}, carácter {1} de {2} usando la base de datos \"{3}\"", + "AddBinaryOcrCharacterTitle": "Añadir carácter OCR binario para la línea {0}, carácter {1} de {2} usando la base de datos \"{3}\"", "LineIndexX": "Línea {0}", "InspectNOcrAdditions": "Inspeccionar adiciones nOCR", "OcrSelectedLines": "OCR líneas seleccionadas", @@ -3829,6 +4205,8 @@ "BinaryImageCompareInspectImageMatches": "\"Binary image compare\" - Inspeccionar", "SaveBlankTextTitle": "¿Guardar texto en blanco?", "SaveBlankTextPrompt": "¿Guardar texto en blanco para la imagen?", + "DrawnLinesDoNotMatchTitle": "Las líneas no coinciden con la imagen", + "DrawnLinesDoNotMatchPrompt": "Algunas de las líneas dibujadas no coinciden con la imagen (las líneas verdes deben estar sobre el carácter y las rojas fuera de él), por lo que este carácter no se reconocerá.\n\n¿Guardar de todos modos?", "YesAndNeverAskAgain": "Sí y no volver a preguntar", "ImportTextFromSubtitleDotDotDot": "Importar texto desde subtítulo...", "ImportTextFromSubtitleOverwritePrompt": "Algunas líneas ya tienen texto de OCR. ¿Sobrescribir el texto existente?", @@ -3854,7 +4232,6 @@ "VobSubColorsTitle": "Colores VobSub/DVD", "VobSubColorsHeader": "Personalizar los cuatro colores de VobSub", "VobSubColorsDescription": "Los subtítulos VobSub/DVD usan cuatro colores indexados: fondo, patrón, énfasis 1 y énfasis 2. Elija cada color a continuación para anular la paleta incrustada: útil cuando los colores originales dan poco contraste para el OCR.", - "VobSubColorBackground": "Fondo", "VobSubColorPattern": "Patrón", "VobSubColorEmphasis1": "Énfasis 1", "VobSubColorEmphasis2": "Énfasis 2", @@ -3888,9 +4265,26 @@ "CrispEmbedSettingsTitle": "Ajustes de CrispEmbed", "CrispEmbedDescription": "Motor de OCR local con varios backends de modelo: descargue aquí el motor y los modelos.", "TrainNOcrDatabase": "Entrenar base de datos nOCR...", + "OptimizeNOcrDatabase": "Optimizar base de datos nOCR...", + "OptimizeNOcrDatabaseQuestionXY": "¿Eliminar las líneas que no distinguen los caracteres de otros similares en la base de datos nOCR \"{0}\"?\n\nEsto hace la base de datos más pequeña y el OCR más rápido, normalmente con menos errores. Tarda hasta un minuto.\n\nSe guarda una copia de seguridad como \"{1}\".", + "OptimizingNOcrDatabaseXY": "Optimizando base de datos nOCR... {0}/{1}", + "NOcrDatabaseOptimizedXYZ": "Base de datos nOCR \"{0}\" optimizada: {1:#,##0} -> {2:#,##0} líneas.", "StartTraining": "Iniciar el entrenamiento", "AbortTraining": "Cancelar el entrenamiento", "TrainingOptions": "Opciones de entrenamiento", + "TrainNOcrSubtitle": "Representa caracteres en las fuentes instaladas y enseña a nOCR sus formas. Elija las fuentes que usan sus subtítulos.", + "XFontsSelected": "{0:#,##0} seleccionadas", + "SubtitleFonts": "Fuentes de los subtítulos", + "EmptyDatabase": "Base de datos vacía", + "StartFromDatabase": "Empezar desde", + "StartFromDatabaseHint": "Añadir los caracteres entrenados a una copia de una base de datos existente (recomendado) o empezar desde una vacía", + "FontSizes": "Tamaños de fuente", + "FontSizesHint": "Tamaños de fuente en píxeles para representar, separados por comas, p. ej. \"30, 40\"", + "NumberOfLineSegmentsHint": "Líneas comprobadas por carácter: más es más estricto pero más lento", + "EnterDatabaseName": "Introduzca un nombre para la base de datos", + "TrainingFontXSizeYCharacterZ": "Entrenando \"{0}\" a {1} px: {2}", + "XLearned": "{0:#,##0} aprendidos", + "XSkipped": "{0:#,##0} omitidos", "CharactersToTrain": "Caracteres que entrenar", "LetterCombinationsToTrain": "Combinaciones de letras que podrían dividirse en una imagen", "ImportCharactersFromSubtitleFile": "Importar caracteres de un archivo de subtítulos...", @@ -3916,7 +4310,9 @@ "DrawZoomIn": "Zoom + (Ctrl++)", "DrawZoomOut": "Zoom - (Ctrl+-)", "DrawResetView": "Reset vista (Ctrl+0)", - "DrawToggleGrid": "Cuadrícula (Ctrl+G)", + "DrawToggleGrid": "Cuadrícula (Ctrl+')", + "DrawTogglePreview": "Alternar vista previa (F9)", + "DrawPreviewFailed": "La vista previa falló: se requiere ffmpeg con libass (filtro subtitles)", "DrawCopyToClipboard": "Copiar (Ctrl+C)", "DrawShapes": "Formas", "DrawSelectedPoint": "Punto seleccionado", @@ -3924,16 +4320,86 @@ "DrawSelectedLayer": "Capa seleccionada", "DrawToolX": "Herramienta: {0}", "DrawHelpText": "Clic para puntos • Enter/F8 cierra forma • Mayús+Arrastrar para desplazar • Ctrl+Rueda para zoom", + "DrawMoveToLayer": "Mover a capa", + "DrawFlipHorizontal": "Voltear horizontalmente", + "DrawFlipVertical": "Voltear verticalmente", + "DrawHideShape": "Ocultar forma", + "DrawShowShape": "Mostrar forma", + "DrawHideLayer": "Ocultar capa", + "DrawShowLayer": "Mostrar capa", + "DrawDeleteLayer": "Eliminar capa", + "DrawDeletePoint": "Eliminar punto", + "DrawCancelDrawing": "Cancelar dibujo", + "DrawLayerX": "Capa {0}", + "DrawImportSvg": "Importar imagen SVG...", + "DrawRotateClockwise": "Girar 90° en sentido horario", + "DrawConvertToCurve": "Convertir segmento en curva", + "DrawBackground": "Fondo", + "DrawPosition": "Posición", + "DrawZoom": "Zoom", + "DrawShapeTool": "Herramienta de forma", + "DrawColorPickerTool": "Tomar color de una forma o del fondo", + "DrawShapeLibrary": "Biblioteca de formas", + "DrawShapeLibraryHint": "Arrastre sobre el lienzo para colocar una forma, o haga clic para el tamaño predeterminado. Shift mantiene sus proporciones.", + "DrawAddToLibrary": "Añadir a la biblioteca de formas...", + "DrawRemoveFromLibrary": "Quitar de la biblioteca de formas", + "DrawShapeName": "Nombre de la forma", + "DrawCategorySpeechBubbles": "Bocadillos", + "DrawCategoryArrows": "Flechas", + "DrawCategoryBasicShapes": "Formas básicas", + "DrawCategorySymbols": "Símbolos", + "DrawCategoryMyShapes": "Mis formas", + "DrawShapeSpeechBubble": "Bocadillo", + "DrawShapeSpeechBubbleRight": "Bocadillo, cola a la derecha", + "DrawShapeSpeechBubbleUp": "Bocadillo, cola arriba", + "DrawShapeOvalBubble": "Bocadillo ovalado", + "DrawShapeBoxBubble": "Bocadillo rectangular", + "DrawShapeThoughtBubble": "Bocadillo de pensamiento", + "DrawShapeShoutBubble": "Bocadillo de grito", + "DrawShapeCaptionBox": "Cuadro de texto", + "DrawShapeArrow": "Flecha", + "DrawShapeDoubleArrow": "Flecha doble", + "DrawShapeChevron": "Chevrón", + "DrawShapeCurvedArrow": "Flecha curva", + "DrawShapeRoundedRectangle": "Rectángulo redondeado", + "DrawShapeTriangle": "Triángulo", + "DrawShapeDiamond": "Rombo", + "DrawShapePentagon": "Pentágono", + "DrawShapeHexagon": "Hexágono", + "DrawShapeOctagon": "Octágono", + "DrawShapeStar": "Estrella", + "DrawShapeRing": "Anillo", + "DrawShapePlus": "Más", + "DrawShapeBanner": "Pancarta", + "DrawShapeHeart": "Corazón", + "DrawShapeCheck": "Marca de verificación", + "DrawShapeMusicNote": "Nota musical", + "DrawShapeMusicNotes": "Notas musicales", + "DrawShapeLightning": "Rayo", + "DrawShapeCloud": "Nube", + "DrawShapeMoon": "Luna", + "DrawShapeBadge": "Insignia", + "DrawSize": "Tamaño", + "DrawLayer": "Capa", + "DrawBackgroundVideoFrame": "Fotograma del vídeo (posición actual)", + "DrawBackgroundVideoFrameAt": "Fotograma del vídeo en...", + "DrawBackgroundImage": "Archivo de imagen...", + "DrawBackgroundNone": "Sin fondo", + "DrawBackgroundStretch": "Estirar la imagen al lienzo", + "DrawBackgroundOpacity": "Opacidad del fondo", + "DrawBackgroundVideoFrameFailed": "No se pudo obtener un fotograma del vídeo en {0}.", + "DrawImages": "Imágenes", + "DrawConvertToLine": "Convertir segmento en línea", + "DrawConvertShapeToCurves": "Convertir todas las líneas en curvas", + "DrawConvertShapeToLines": "Convertir todas las curvas en líneas", + "DrawRotateCounterClockwise": "Girar 90° en sentido antihorario", + "DrawSvgImages": "Imágenes SVG", + "DrawSvgNoShapes": "No se encontraron formas rellenas ni trazos en el archivo SVG.", "ProgressBarTitle": "Barra de progreso ASSA", "ProgressBarSettings": "Barra de progreso", - "ProgressBarPosition": "Posición", - "ProgressBarBottom": "Abajo", - "ProgressBarTop": "Arriba", "MouseOverColor": "Color al pasar el ratón", "ClickedColor": "Color al hacer clic", "ProgressBarForeColor": "Color de frente", - "ProgressBarBackColor": "Color de fondo", - "ProgressBarStyle": "Estilo", "ProgressBarSquareCorners": "Esquinas cuadradas", "ProgressBarRoundedCorners": "Esquinas redondeadas", "ProgressBarChapters": "Capítulos", @@ -3942,8 +4408,6 @@ "ProgressBarXAdjustment": "Ajuste X", "ProgressBarYAdjustment": "Ajuste Y", "ProgressBarTextAlignment": "Alineación del texto", - "ProgressBarTakePosFromVideo": "Tomar posición del vídeo", - "ProgressBarPreview": "Vista previa", "FontCollectorTitle": "Recopilador de fuentes", "FontCollectorUsedIn": "Usada en", "FontCollectorFontFiles": "Archivo(s) de fuente", @@ -3990,9 +4454,7 @@ "ResolutionResamplerVideoDiffers": "La resolución del subtítulo ({0}x{1}) difiere de la resolución del vídeo ({2}x{3}).\n¿Cambiar el subtítulo para que coincida con el vídeo?", "ResolutionResamplerAskOnVideoOpen": "Preguntar cuando se abra un vídeo con una resolución distinta", "BackgroundBoxGenerator": "Generar caja de fondo", - "BackgroundBoxPadding": "Relleno", "BackgroundBoxFillWidth": "Llenar ancho", - "BackgroundBoxBoxColor": "Color caja", "BackgroundBoxRadius": "Radio", "BackgroundBoxCircle": "Círculo", "BackgroundBoxSpikes": "Puntas", @@ -4004,12 +4466,9 @@ "BackgroundBoxTornPaperDouble": "Papel rasgado (sup e inf)", "BackgroundBoxStarburst": "Explosión estelar", "BackgroundBoxScroll": "Pergamino", - "StylesTitle": "Estilos Advanced Sub Station Alpha", "StylesInFile": "Estilos en el archivo", "StylesSaved": "Estilos guardados", - "Category": "Categoría", "AllCategories": "[Todas]", - "DefaultCategory": "Predeterminada", "NewCategory": "Nueva categoría...", "RenameCategory": "Renombrar categoría...", "DeleteCategory": "Eliminar categoría", @@ -4032,13 +4491,26 @@ "Graphics": "Gráficos", "CopyToStorageStyles": "Copiar a estilos de almacén", "CopyToFileStyles": "Copiar a estilos de archivo", + "StyleXAlreadyExistsInStorage": "Ya existe un estilo llamado \"{0}\" en el almacén.\n\n¿Sobrescribirlo o conservar ambos (la copia recibe un nombre nuevo)?", + "StyleXAlreadyExistsInFile": "Ya existe un estilo llamado \"{0}\" en el archivo.\n\n¿Sobrescribirlo o conservar ambos (la copia recibe un nombre nuevo)?", + "StyleNameCannotBeEmpty": "El nombre de un estilo no puede estar vacío.", + "StyleNameXIsUsedMoreThanOnce": "El nombre de estilo \"{0}\" lo usa más de un estilo del archivo.", + "Overwrite": "Sobrescribir", + "KeepBoth": "Conservar ambos", + "DoThisForAllConflictingStyles": "Hacer esto para todos los estilos en conflicto", "SetStyleAsDefault": "Estilo por defecto", "TakeUsagesFromDotDotDot": "Tomar usos de...", "ReplaceStyleWithDotDotDot": "Reemplazar estilo por...", "NoAttachmentsFound": "No hay adjuntos en el archivo ASSA.", "DeleteStyleQuestion": "¿Borrar estilo?", "DeleteStylesQuestion": "¿Borrar estilos?", + "DeleteXStylesQuestion": "¿Desea eliminar {0} estilos?", + "DeleteXStylesFromStorageQuestion": "¿Desea eliminar {0} estilos del almacén?", + "DeleteStyleXFromStorageQuestion": "¿Desea eliminar el estilo \"{0}\" del almacén?", + "DeleteStyleXFromFileQuestion": "¿Desea eliminar el estilo \"{0}\" del archivo actual?", "OpenStyleImportFile": "Abrir archivo para importar estilos", + "StyleImportFiles": "Archivos de estilo (.ass, .sty, categorías .template de Subtitle Edit 4)", + "SsaStyleImportFiles": "Archivos de estilo (.ssa, .ass, .sty)", "Primary": "Primario", "Secondary": "Secundario", "ApplyOverrideTags": "Aplicar etiquetas anulación", @@ -4053,7 +4525,6 @@ "SpaceIncrease": "Aumento espacio", "PopIn": "Aparición (pop in)", "SpinIn": "Giro (spin in)", - "PlayCurrent": "Reprod. actual", "SetPosition": "Fijar posición", "Rotation": "Rotación", "ScaleX": "Escala X", @@ -4097,10 +4568,8 @@ "AdvancedEffectOldMovieDescription": "Simula proyector de 35mm con ruido y rayas", "AdvancedEffectNeonBurst": "Explosión neón", "AdvancedEffectNeonBurstDescription": "Subtítulos estilo 'Shorts' con brillo neón y escala", - "AdvancedEffectSettings": "Ajustes", "AdvancedEffectSnowFlakeCount": "Cantidad de copos", "AdvancedEffectStarfieldStarCount": "Cantidad de estrellas", - "AdvancedEffectStarfieldSpeed": "Velocidad", "AdvancedEffectGlitch": "Glitch", "AdvancedEffectGlitchDescription": "Fallo digital con aberración cromática y distorsión", "AdvancedEffectBounceIn": "Rebote", @@ -4109,8 +4578,6 @@ "AdvancedEffectFirefliesDescription": "Puntos ámbar brillantes que flotan orgánicamente", "AdvancedEffectMatrix": "Matrix", "AdvancedEffectMatrixDescription": "Columnas de caracteres verdes cayendo", - "AdvancedEffectAudioBars": "Barras de audio (onda)", - "AdvancedEffectAudioBarsDescription": "Ecualizador animado por el audio", "AdvancedEffectAudioPulse": "Pulso de texto por audio", "AdvancedEffectAudioPulseDescription": "El texto brilla y crece según el volumen del audio", "AdvancedEffectConfetti": "Explosión de confeti", @@ -4124,7 +4591,6 @@ "AdvancedEffectFancyKaraokeGlow": "Brillo palabra activa", "AdvancedEffectFancyKaraokeActiveColor": "Color activo", "AdvancedEffectFancyKaraokeInactiveColor": "Color inactivo", - "AdvancedEffectFancyKaraokeInactiveOpacity": "Opacidad inactiva (0-255)", "AdvancedEffectWordSpacingPixels": "Espaciado (píxeles)", "AdvancedEffectSlowZoomOut": "Zoom out lento", "AdvancedEffectSlowZoomOutDescription": "El texto encoge ligeramente durante el subtítulo", @@ -4140,7 +4606,6 @@ "AdvancedEffectSlideInLeftDescription": "Entra por la izquierda y sale por la izquierda", "AdvancedEffectSlideInRight": "Deslizar desde derecha", "AdvancedEffectSlideInRightDescription": "Entra por la derecha y sale por la derecha", - "AdvancedEffectFadeInOut": "Fundido entrada/salida", "AdvancedEffectFadeInOutDescription": "Texto aparece y desaparece suavemente", "AdvancedEffectWordFlip3D": "Giro de palabra 3D", "AdvancedEffectWordFlip3DDescription": "Cada palabra entra con un giro 3D y un rebote elástico al pronunciarse: estilo moderno de subtítulos de 'Shorts'", diff --git a/src/ui/Assets/Languages/Swedish.json b/src/ui/Assets/Languages/Swedish.json index 6cfcbfa5e38..4d8923d1e93 100644 --- a/src/ui/Assets/Languages/Swedish.json +++ b/src/ui/Assets/Languages/Swedish.json @@ -1,12 +1,69 @@ { "title": "Subtitle Edit", - "version": "v5.2.0-rc7", + "version": "v5.3.0", "translatedBy": "Claude (Opus 4.7)", "cultureName": "sv-SE", "general": { + "temperature": "Temperatur", + "preset": "Förinställning", + "output": "Utdata", + "outputFormat": "Utdataformat", + "other": "Övrigt", + "timeCodeFormat": "Tidskodsformat", + "topBottomMargin": "Topp/botten marginal", + "theme": "Tema", + "brightness": "Ljusstyrka", + "chooseColor": "Välj färg", + "lineX": "Rad {0}", + "playLine": "Spela rad", + "maxLineLength": "Max radlängd", + "maxCharsPerSec": "Max tecken/sek", + "maxNumberOfLines": "Max antal rader", + "subtitles": "Undertexter", + "shotChanges": "Scenbyten", + "chapters": "Kapitel", + "audio": "Ljud", + "interjections": "Interjektioner", + "blankLines": "Tomma rader", + "editWholeText": "Redigera hela texten", + "noTextInClipboard": "Ingen text i urklipp", + "noSubtitlesFoundTitle": "Inga undertexter hittades", + "replacedXOccurrences": "Ersatte {0} förekomster", + "invalidRegularExpressionX": "Ogiltigt reguljärt uttryck: {0}", + "discardChangesTitle": "Kasta ändringar?", + "downloadingXDotDotDot": "Laddar ner {0}...", + "importTimeCodesDotDotDot": "Importera tidskoder...", + "nextChange": "Nästa ändring", + "previousChange": "Föregående ändring", + "changeXOfY": "Ändring {0} av {1}", + "tooLong": "För lång", + "tooShort": "För kort", + "overlapping": "Överlapp", + "detail": "Detalj", + "fixOcrErrors": "Åtgärda OCR-fel", + "runningOcrXY": "Kör OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp kräver att llama-server-motorn laddas ner. Ladda ner nu?", "abort": "Avbryt", "actor": "Skådespelare", "actors": "Skådespelare", + "setActorDotDotDot": "Välj skådespelare...", + "actorPickerTitle": "Välj skådespelare", + "actorPickerFilterHint": "Skriv för att filtrera, eller skriv ett nytt skådespelarnamn", + "actorPickerKeysHint": "Tryck på en siffra eller Enter för att välja skådespelaren. Alt+Upp/Ned ändrar ordningen, Delete tar bort skådespelaren.", + "actorPickerNewActorX": "Ny skådespelare \"{0}\"", + "actorPickerLinesSelectedX": "Markerade rader: {0}", + "setStyleDotDotDot": "Välj stil...", + "stylePickerTitle": "Välj stil", + "stylePickerFilterHint": "Skriv för att filtrera, eller skriv ett nytt stilnamn", + "stylePickerKeysHint": "Tryck på en siffra (1-9, 0) för att välja stilen för alla markerade rader.", + "stylePickerNewStyleX": "Ny stil \"{0}\"", + "stylePickerNewStyleInfo": "Tryck på Enter för att lägga till den här stilen med standardinställningar och använda den på de markerade raderna. Använd \"Hantera stilar...\" för att ändra dess typsnitt, färger och position senare.", + "stylePickerCurrentStyleX": "Aktuell stil: {0}", + "stylePickerLinesUsingStyleX": "Rader som använder den här stilen: {0}", + "stylePickerMarginsXYZ": "Vänster {0}, höger {1}, vertikal {2}", + "stylePickerSetStyle": "_Välj stil", + "stylePickerManageStyles": "Hantera stilar...", + "stylePickerManageStylesHint": "Stäng det här fönstret och öppna stilhanteraren för att redigera typsnitt, färger, position med mera", "add": "Lägg till", "addDotDotDot": "Lägg till...", "addToNamesListCaseSensitive": "Lägg till i namnlista (skiftlägeskänslig)", @@ -15,7 +72,6 @@ "adjustAlpha": "Justera alfa (transparens)", "adjustDisplayDuration": "Justera visningslängd", "adjustment": "Justering", - "advanced": "Avancerat", "advancedSettings": "Avancerade inställningar", "after": "Efter", "alignment": "Justering", @@ -59,7 +115,6 @@ "bdnXml": "BDN/xml", "bdnXml8Bit": "BDN/xml 8-bitars", "before": "Före", - "beforeX": "Före \"{0}\"", "beginning": "Början", "bluRaySup": "Blu-ray (sup)", "bold": "Fet", @@ -71,7 +126,6 @@ "bookmarkEdit": "Redigera bokmärke", "bookmarkEditForSelectedLinesX": "Redigera bokmärke för {0} markerade rader", "bookmarksList": "Lista bokmärken", - "borderColor": "Kantfärg", "borderStyle": "Kantstil", "bottomCenter": "Botten-Mitten", "bottomLeft": "Botten-Vänster", @@ -98,7 +152,6 @@ "changeCasing": "Ändra skiftläge", "changeFormatting": "Ändra formatering", "changeFrameRate": "Ändra bildfrekvens", - "changeLanguageFilter": "Ändra språkfilter...", "changeOnce": "Ändra en gång", "changeSpeed": "Ändra hastighet", "character": "Tecken", @@ -140,7 +193,6 @@ "conversionCancelledByUser": "Konvertering avbruten av användaren", "convert": "Konvertera", "converted": "Konverterad", - "convertingDotDotDot": "Konverterar...", "convertingXofYDotDoDot": "Konverterar {0:#,###,##0}/{1:#,###,##0}...", "copy": "Kopiera", "copyImageToClipboard": "Kopiera bild till urklipp", @@ -151,7 +203,6 @@ "couldNotOpenFileXErrorY": "Kunde inte öppna filen \"{0}\". Fel: {1}", "count": "Antal", "cps": "Tecken/sek", - "currentSubtitle": "Aktuell undertext", "cudaRuntime": "CUDA-körmiljö", "currentVideoPosition": "Aktuell videoposition", "custom": "Beställnings", @@ -211,7 +262,6 @@ "expand": "Expandera", "export": "Exportera", "exportDotDotDot": "Exportera...", - "exportToX": "Exportera till {0}", "extendAfter": "Förläng/förkorta till nästa rad", "extendBefore": "Förläng/förkorta till föregående rad", "extendSelectedLinesToNextShotChangeOrNextSubtitle": "Förläng markerade rader till nästa scenbyte (eller nästa undertext)", @@ -228,7 +278,6 @@ "fileExtension": "Filändelse", "fileName": "Filnamn", "fileNameX": "Filnamn: {0}", - "fileNameXAndSize": "Filnamn: {0} ({1})", "fileSaved": "Filen sparad", "fileSavedToX": "Filen sparad till {0}", "fileXAlreadyExists": "Filen \"{0}\" finns redan.", @@ -238,8 +287,6 @@ "find": "Sök", "findNext": "Sök nästa", "findTextX": "Sök text - {0}", - "fiveHundredMilliseconds": "500 millisekunder", - "fiveSeconds": "Fem sekunder", "fix": "Åtgärda", "fixCommonErrors": "Åtgärda vanliga fel", "fixRightToLeft": "Åtgärda höger-till-vänster", @@ -263,14 +310,12 @@ "foundXInLineYZ": "Hittade \"{0}\" på rad {1}, position {2}", "foundXMatches": "Hittade {0} träffar", "frameRate": "Bildfrekvens", - "frameRateX": "Bildfrekvens: {0:0.0###}", "frames": "Bilder", "from": "Från", "fromCurrentVideoPosition": "från aktuell videoposition", "fullScreen": "Helskärm", "gap": "Mellanrum", "general": "Allmänt", - "generalText": "Allmänt", "generate": "Generera", "generateImportShotChanges": "Generera/importera scenbyten", "generating": "Genererar...", @@ -288,12 +333,8 @@ "help": "Hjälp", "hex": "Hex", "hide": "Dölj", - "hidePreview": "Dölj förhandsvisning", "history": "Historik", "horizontal": "Horisontell", - "hourMinutesSecondsDecimalSeparatorMilliseconds": "Tim:min:sek{0}ms", - "hourMinutesSecondsFrames": "Tim:min:sek:bilder", - "ip": "IP", "id": "ID", "image": "Bild", "imageSaved": "Bild sparad", @@ -354,6 +395,7 @@ "mergeSelectedLinesDialog": "Slå ihop markerade rader som dialog", "mergeWithLineAfterAndAutoBreak": "Slå ihop med nästa rad och bryt automatiskt", "mergeWithLineAfterKeepBreaks": "Slå ihop med nästa rad (behåll radbrytningar)", + "mergeWithLineAfterAndUnbreak": "Slå ihop med nästa rad och ta bort radbrytningar", "mergeWithLineBeforeAndAutoBreak": "Slå ihop med föregående rad och bryt automatiskt", "mergeWithLineBeforeKeepBreaks": "Slå ihop med föregående rad (behåll radbrytningar)", "middleCenter": "Mitten-Mitten", @@ -368,13 +410,13 @@ "moveAllShotChangeOneFrameForward": "Flytta alla scenbyten en bildruta framåt", "multiMode": "Multiläge", "moveDown": "Flytta ner", + "increase": "Öka", + "decrease": "Minska", "moveUp": "Flytta upp", "moveToTop": "Flytta överst", "moveToBottom": "Flytta nederst", "multipleReplace": "Multipel ersättning", - "mute": "Tysta", "name": "Namn", - "negative": "Negativ", "new": "Ny", "newDotDotDot": "Ny...", "newProfile": "Ny profil", @@ -404,20 +446,15 @@ "offsetY": "Förskjutning Y", "ok": "_OK", "oneFile": "En fil", - "oneHundredMilliseconds": "100 millisekunder", - "oneSecond": "En sekund", "oneSecondBack": "En sekund bakåt", "oneSecondForward": "En sekund framåt", - "onlineVideoFeatureNotAvailable": "Funktionen är inte tillgänglig för onlinevideo", "openContainingFolder": "Öppna innehållande mapp", "openDictionaryFolder": "Öppna ordboksmapp", "openFile": "Öppna fil", "openImageBasedSubtitle": "Öppna bildbaserad undertext", "openImageFile": "Öppna bildfil", - "openOriginalSubtitleFile": "Öppna originalundertextfil...", "openOriginalSubtitleFileTitle": "Öppna originalundertextfil", "openOutputFolder": "Öppna utmatningsmapp", - "openSubtitle": "Öppna undertext...", "openSubtitleFileTitle": "Öppna undertextfil", "openSubtitles": "Öppna undertexter...", "openVideoFile": "Öppna videofil...", @@ -432,11 +469,6 @@ "outlineWidth": "Konturbredd", "outputFolder": "Utmatningsmapp", "outputProperties": "Utmatningsegenskaper", - "overlap": "Överlapp", - "overlapNextX": "Överlapp nästa ({0:#;##0.###})", - "overlapPreviousLineX": "Överlapp föreg. rad ({0:#;##0.###})", - "overlapStartAndEnd": "Överlapp start och slut", - "overlapX": "Överlapp ({0:#;##0.###})", "overwriteExistingFiles": "Skriv över befintliga filer", "overwriteFilesInFolderX": "Skriv över filer i mapp: \"{0}\"", "overwriteQuestion": "Skriv över?", @@ -449,6 +481,7 @@ "percent": "Procent", "pickLayer": "Välj lager", "pickOllamaModel": "Välj Ollama-modell", + "pickModel": "Välj modell", "llamaCppUseRemoteServer": "Använd extern server (URL)", "llamaCppEngineSettings": "Inställningar för llama.cpp-motorn", "llamaCppEngineSettingsSubtitle": "Lokalt llama.cpp-serverbygge", @@ -496,7 +529,6 @@ "refresh": "Uppdatera", "region": "Region", "regularExpression": "Reguljärt uttryck", - "regularExpressionIsNotValid": "Reguljärt uttryck är ogiltigt!", "relativeToCurrentVideoPosition": "Relativt aktuell videoposition", "remove": "Ta bort", "removeAlignment": "Ta bort justering", @@ -521,7 +553,7 @@ "requiresRestart": "Kräver omstart", "reset": "Återställ", "resolution": "Upplösning", - "resolutionX": "Upplösning: {0}", + "retry": "Försök igen", "reverseRightToLeftStartEnd": "Vänd RTL start/slut", "right": "Höger", "rightToLeft": "Höger till vänster", @@ -561,8 +593,6 @@ "selectedlinesX": "Markerade rader: {0}", "sensitivity": "Känslighet", "separator": "Avgränsare", - "sessionKey": "Sessionsnyckel", - "sessionKeyGenerate": "Generera ny nyckel", "setEnd": "Sätt slut", "setEndAndGoToNext": "Sätt slut och gå till nästa", "setEndAndOffsetTheRest": "Sätt slut och förskjut resten", @@ -581,8 +611,9 @@ "shadowColor": "Skuggfärg", "shadowWidth": "Skuggbredd", "shiftLineBy": "Förskjut rad med", + "shotIn": "Scen in", + "shotOut": "Scen ut", "shortcut": "Kortkommando", - "shortcutX": "Kortkommando: {0}", "shortcuts": "Kortkommandon", "show": "Visa", "showActorColumn": "Visa kolumnen \"Skådespelare\"", @@ -593,17 +624,19 @@ "showStartColumn": "Visa kolumnen \"Start\"", "showHideColumn": "Visa kolumnen \"Dölj\"", "showHistory": "Visa historik", + "clearHistory": "Rensa historik", + "removeFromHistory": "Ta bort från historik", "showLayerColumn": "Visa kolumnen \"Lager\"", "showPreview": "Visa förhandsvisning", "showShotChangesList": "Visa lista över scenbyten", + "showShotInColumn": "Visa kolumnen \"Scen in\"", + "showShotOutColumn": "Visa kolumnen \"Scen ut\"", "showStyleColumn": "Visa kolumnen \"Stil\"", "showTeletext": "Visa text-tv-kolumnen i listvyn", "showTimeCodes": "Visa tidskoder", "showWpmColumn": "Visa kolumnen \"Ord/min\"", "showPixelWidthColumn": "Visa kolumnen \"Pixelbredd\"", "shrink": "Krymp", - "singleBox": "Enkel ruta", - "singleLineLengths": "Enkelradslängd:", "singleMode": "Enskilt läge", "textTotalLength": "Text - total längd", "textSingleLineMaxLength": "Text - max enkelradslängd", @@ -652,16 +685,16 @@ "strikeout": "Genomstruken", "style": "Stil", "styleExaggeration": "Stilöverdrift", - "styleLanguage": "Stil / Språk", "styles": "Stilar", "subtitleFile": "Undertextfil", + "subtitleFileChangedOutsideX": "Filen \"{0}\" har ändrats utanför Subtitle Edit.\n\nLäsa in den igen och förlora dina ändringar?", "subtitleFileName": "Undertextfilnamn", "subtitleFileSaved": "Undertextfil sparad", "subtitleFileSavedToX": "Undertextfil sparad till {0}", "subtitleFiles": "Undertextfiler", "subtitleFormats": "Undertextformat", "subtitleLoadedX": "Undertext inläst: {0}", - "subtitleXOfY": "Undertext {0} av {1}", + "subtitleReloadedChangedOutsideX": "Undertext inläst igen (ändrad utanför Subtitle Edit): {0}", "suffix": "Suffix", "suggestions": "Förslag", "sync": "Synk", @@ -673,7 +706,6 @@ "teletextColor": "Text-tv-färg", "teletextLine": "Text-tv-rad", "tenHours": "10 timmar", - "tenMilliseconds": "10 millisekunder", "text": "Text", "textColor": "Textfärg", "textFiles": "Textfiler", @@ -700,9 +732,6 @@ "topRight": "Topp-Höger", "top": "Överkant", "totalAdjustmentX": "Total justering: {0}", - "totalFramesX": "Totalt antal bilder: {0:#;##0.##}", - "totalLengthX": "Total längd: {0}", - "totalLengthXSplitLine": "Total längd: {0} (delad rad!)", "translate": "Översätt", "translatePercentX": "Översätter: {0}%", "translateRow": "Översätt rad", @@ -711,6 +740,7 @@ "type": "Typ", "unbreak": "Slå ihop text", "unbreakLines": "Slå ihop rader", + "undelete": "Ångra borttagning", "underline": "Understrykning", "undo": "Ångra", "unknown": "Okänt", @@ -730,13 +760,11 @@ "usages": "Användningar", "use": "Använd", "useAlways": "Använd alltid", - "useLargerFontForThisWindow": "Använd större typsnitt för detta fönster", "useOnce": "Använd en gång", "useOutputFolder": "Använd utmatningsmapp", "useSourceFolder": "Använd källmapp", "useSourceResolution": "Använd källupplösning", "userName": "Användarnamn", - "userNameAlreadyInUse": "Användarnamnet används redan", "vertical": "Vertikal", "video100MsBack": "Video, 100 millisekunder bakåt", "video100MsForward": "Video, 100 millisekunder framåt", @@ -746,13 +774,16 @@ "videoCustom1ForwardX": "Video, anpassade millisekunder ({0:#,###,##0}) framåt, 1", "videoCustom2BackX": "Video, anpassade millisekunder ({0:#,###,##0}) bakåt, 2", "videoCustom2ForwardX": "Video, anpassade millisekunder ({0:#,###,##0}) framåt, 2", - "videoEncodingX": "Videokodning: {0}", "videoExtension": "Videofilsändelse", "videoFile": "Videofil", "videoFileGenerated": "Videofil genererad", "videoFileGeneratedX": "Videofil genererad: \"{0}\"", + "videoFilesGenerated": "Videofiler genererade", + "xVideosGenerated": "{0} videor genererade", + "xOfYVideosGenerated": "{0} av {1} videor genererade", + "savedInX": "Sparad i {0}", + "savedInXFolders": "Sparad i {0} mappar", "videoFiles": "Videofiler", - "videoInformation": "Videoinfo", "videoOffset": "Videoförskjutning", "videoOneFrameBack": "Video, en bildruta bakåt", "videoOneFrameForward": "Video, en bildruta framåt", @@ -763,7 +794,6 @@ "videoPlayer": "Videospelare", "videoPosition": "Videoposition", "videoResolution": "Videoupplösning", - "viewX": "Visa {0}", "visible": "Synlig", "voice": "Röst", "volume": "Volym", @@ -771,9 +801,7 @@ "waveformCenterOnVideoPosition": "Centrera vågform på videoposition", "waveformPasteFromClipboard": "Klistra in från urklipp", "waveformSpectrogram": "Vågform/spektrogram", - "webServiceUrl": "Webbtjänst-URL", "width": "Bredd", - "windowPositionAndSize": "Fönsterposition och storlek", "wordsPerMin": "Ord/min", "pixelWidth": "Pixelbredd", "wpm": "Ord/min", @@ -787,8 +815,6 @@ "noBookmarksFound": "Inga fler bokmärken hittades", "xRequiresAnApiKey": "{0} kräver en API-nyckel", "xRequiresAValidUrl": "{0} kräver en giltig URL (t.ex. \"http://...\" eller \"https://...\")", - "xSeconds": "{0:0.0##} sekunder", - "xSubtitles": "{0:#,###,##0} undertexter", "yes": "Ja", "zeroBytes": "0 byte", "copyToClipboard": "Kopiera till urklipp", @@ -810,10 +836,8 @@ "playbackSpeed": "Uppspelningshastighet", "hoursMinutesSecondsMilliseconds": "HH:MM:SS.FFF", "imageFiles": "Bildfiler", - "openAiCompatibleStt": "OpenAI-kompatibel STT", "openAiCompatibleSttEndpoint": "STT Endpoint URL", "openAiCompatibleSttApiKey": "API-nyckel", - "openAiCompatibleSttModel": "Modell", "openAiCompatibleSttExtraHeaders": "Extra rubriker", "openAiCompatibleSttTimeout": "Timeout (sekunder)", "openAiCompatibleSttLanguage": "Språktips", @@ -828,11 +852,9 @@ "configurationRequired": "Konfiguration krävs", "transcriptionError": "Transkriptionsfel", "transcriptionComplete": "Transkriptionen är klar", - "transcribingWithOpenAi": "Transkriberar med OpenAI Service...", "processingResponse": "Bearbetar svar...", "unauthorizedApiKey": "Obehörig: Ogiltig API-nyckel eller otillräckliga behörigheter.", "requestTimeout": "Timeout för begäran: Servern tog för lång tid att svara.", - "noSegmentsReturned": "Inga segment returnerades från transkriptionstjänsten.", "openAiCompatibleSttUrlMissing": "OpenAI-kompatibel STT-slutpunkts-URL krävs.\r\nAnge en URL och försök igen.", "openAiCompatibleSttUrlNotResponding": "Den OpenAI-kompatibla STT-ändpunkten svarade inte:\r\n\r\n{0}\r\n\r\n\r\nVänligen verifiera URL:en och att servern är igång.", "transcriptionFailed": "Transkriptionen misslyckades", @@ -854,11 +876,22 @@ "videoCustom3ForwardX": "Video, anpassade millisekunder ({0:#,###,##0}) framåt, 3", "videoCustom4BackX": "Video, anpassade millisekunder ({0:#,###,##0}) bakåt, 4", "videoCustom4ForwardX": "Video, anpassade millisekunder ({0:#,###,##0}) framåt, 4", + "videoCustom1BackAndPauseX": "Video, anpassade millisekunder ({0:#,###,##0}) bakåt och pausa, 1", + "videoCustom1ForwardAndPauseX": "Video, anpassade millisekunder ({0:#,###,##0}) framåt och pausa, 1", + "videoCustom2BackAndPauseX": "Video, anpassade millisekunder ({0:#,###,##0}) bakåt och pausa, 2", + "videoCustom2ForwardAndPauseX": "Video, anpassade millisekunder ({0:#,###,##0}) framåt och pausa, 2", + "videoCustom3BackAndPauseX": "Video, anpassade millisekunder ({0:#,###,##0}) bakåt och pausa, 3", + "videoCustom3ForwardAndPauseX": "Video, anpassade millisekunder ({0:#,###,##0}) framåt och pausa, 3", + "videoCustom4BackAndPauseX": "Video, anpassade millisekunder ({0:#,###,##0}) bakåt och pausa, 4", + "videoCustom4ForwardAndPauseX": "Video, anpassade millisekunder ({0:#,###,##0}) framåt och pausa, 4", "videoAndAudioFiles": "Video- och ljudfiler", "waveform": "Vågform", "dashScopeSttRegion": "Region", "dashScopeSttEnableWords": "Tidsstämplar på ordnivå", "dashScopeSttRegionKeyHint": "Obs: API-nycklar för Alibaba Cloud Model Studio är regionsspecifika - se till att den valda regionen matchar den region där API-nyckeln skapades (Kina vs. Internationell).", + "googleCloudSttProjectId": "Projekt-ID (endast för Application Default Credentials)", + "googleCloudSttBucketName": "Lagringsbucket (tom = automatiskt)", + "googleCloudSttDynamicBatching": "Dynamisk batchbearbetning (cirka 5x billigare, ingen garanterad latens)", "onlineSttApiKeyMissing": "En API-nyckel krävs. Ange din API-nyckel och försök igen." }, "main": { @@ -868,12 +901,15 @@ "charactersPerSecond": "Tecken/sekund: {0}", "chooseColumn": "Välj kolumn", "columnPaste": "Klistra in kolumn", + "commandPaletteTitle": "Kommandopalett", + "commandPaletteSearchPlaceholder": "Skriv för att söka kommandon...", + "commandPaletteNoCommandsFound": "Inga matchande kommandon", "createdEmptyTranslation": "Skapade tom översättning från aktuell undertext", "deleteText": "Ta bort text", "deleteTextAndShiftCellsUp": "Ta bort text och flytta upp celler", "endTimeMustBeAfterStartTime": "Sluttid måste vara efter starttid.", "errorLoad7Zip": "Den här filen verkar vara en komprimerad 7-Zip-fil.\n\nSubtitle Edit kan inte öppna komprimerade filer.", - "errorLoadBinaryZeroes": "Tyvärr, denna fil innehåller endast binära nollor!\n\nOm du har redigerat denna fil med Subtitle Edit kan du kanske hitta en säkerhetskopia via menyalternativet Arkiv -> Återställ auto-säkerhetskopia...", + "errorLoadBinaryZeroes": "Tyvärr, denna fil innehåller endast binära nollor!\n\nOm du har redigerat denna fil med Subtitle Edit kan du kanske hitta en säkerhetskopia via menyalternativet Arkiv -> Återställ auto-säkerhetskopia...", "errorLoadGZip": "Den här filen verkar vara en komprimerad GZip-fil.\n\nSubtitle Edit kan inte öppna komprimerade filer.", "errorLoadLargeFile": "Den här filen är för stor för att öppna som undertextfil.", "errorLoadVideoFilePrompt": "Den här filen verkar vara en videofil:\n{0}\n\nDu kan öppna en video via \"Video -> Öppna video\" eller genom att dra och släppa en video på videospelaren.\n\nVill du öppna den som en videofil?", @@ -905,18 +941,20 @@ "numberOfLinesEvenlyDistributedX": "Fördelade {0} rader jämnt", "oneLineCopiedFromOriginal": "En rad kopierad från originalundertext", "oneLineCopiedToOriginal": "En rad kopierad till originalundertexten", + "onlineOnlyVideo": "Video som bara finns online", + "onlineOnlyVideoXSizeYDownloadAndOpen": "Videofilen \"{0}\" ({1}) finns bara lagrad online, till exempel i Dropbox eller iCloud Drive, och måste laddas ner innan den kan öppnas.\n\nLadda ner och öppna den nu?", "oneLineMerged": "En rad sammanslagen", "oneLineSwitched": "En rad växlad", "overwriteExistingCells": "Skriv över befintliga celler", "overwriteOrShiftCellsDown": "Skriv över/flytta ner celler", "parsingMatroskaFile": "Tolkar Matroska-fil...", + "readingDvdSubtitles": "Läser DVD-undertexter...", "pasteFromClipboardDotDotDot": "Klistra in från urklipp...", "redoPerformed": "Gör om utfört", "redoPerformedXActionLeft": "Gör om utfört (åtgärder kvar: {0})", "removedUnicodeControlCharactersX": "Tog bort Unicode-kontrolltecken från {0} rader", "removedXBlankLines": "Tog bort {0} tomma rader", "replacedXWithYCountZ": "Ersatte \"{0}\" med \"{1}\" ({2} förekomster)", - "replacedXWithYInLineZ": "Ersatte \"{0}\" med \"{1}\" på rad {2}", "reversedStartAndEndingsForRightToLeftX": "Vände start och slut för höger-till-vänster på {0} rader", "ruleProfileIsX": "Regelprofil är nu \"{0}\"", "saveLanguageFile": "Spara språkfil", @@ -924,7 +962,6 @@ "shiftTextCellsDown": "Flytta ner textceller", "singleLineLength": "Radlängd: ", "speedIsNowX": "Hastighet är nu \"{0}\"", - "spellCheckResult": "Rättstavning slutförd. \n\n• Ändrade ord: {0}\n• Överhoppade ord: {1}", "subtitleGridFormattingX": "Listformatering: {0}", "subtitleImportedFromMatroskaFile": "Undertext importerad från Matroska-fil", "textDown": "Text ner", @@ -951,13 +988,14 @@ "trimmedXLines": "Trimmade {0} undertextrader", "pastedXLinesOverSelectedLines": "Klistrade in {0} rad(er) över de markerade raderna", "pastedXOfYLinesOverSelectedLines": "Klistrade in {0} av {1} rad(er) över de markerade raderna - resten fick inte plats i markeringen", + "insertedXLinesFromClipboard": "Infogade {0} rad(er) från urklipp", "openOriginalDifferentNumberOfSubtitlesXY": "Originalundertextfilen har inte samma antal undertexter som den aktuella undertextfilen.\n\n• Originalundertexter: {0}\n• Aktuella undertexter: {1}", - "importXMatchingOriginalLines": "Importera {0} matchande originalundertexter?", "originalTextReadOnly": "Originaltext (skrivskyddad)", "originalTextEditMode": "Originaltext (redigeringsläge)", "originalIsReadOnlyNotSaved": "Originalundertexten är en skrivskyddad referens och sparades inte", "originalIsEmptyNotSaved": "Originalundertexten innehåller ingen text alls och sparades inte", "originalIsReadOnlyReference": "Originalundertexten är öppnad som en skrivskyddad referens", + "closeTranslationQuestionXY": "Stäng översättningen \"{0}\"?\n\nOriginalundertexten \"{1}\" blir den undertext du redigerar. Själva översättningsfilen ändras inte.", "allowEditOfOriginalSubtitle": "Tillåt redigering av originalundertexten", "showAllOriginalLinesX": "Visa alla originalrader ({0} har ingen motsvarighet här)", "showAllOriginalLinesHint": "Raderna utan motsvarighet visas som extra rader, så att du kan se vad översättningen saknar.", @@ -992,6 +1030,7 @@ "fileExportedInFormatXToY": "Fil exporterad i format {0} till {1}", "fileExportedInFormatXToFileY": "Fil exporterad i format \"{0}\" till fil \"{1}\"", "fixedXLines": "Åtgärdade {0} rader", + "toolXChangedYLines": "{0}: {1} rader ändrade", "transcriptionCompletedWithXLines": "Transkription slutförd med {0} rader", "openSubtitleFileX": "Öppna undertextfil \"{0}\"?", "replacedXOccurrences": "Ersatte {0} förekomster", @@ -1053,14 +1092,15 @@ "multipleReplace": "_Multipel ersättning...", "fillSelectedLinesWithClipboard": "Fyll markerade rader med urklippstext", "goToLineNumber": "_Gå till radnummer...", + "commandPalette": "Kommando_palett...", "rightToLeftMode": "Hö_ger-till-vänster-läge", "modifySelectionDotDotDot": "Ändra _markering...", "tools": "_Verktyg", - "toolsSelectedLines": "_Verktyg (markerade rader)", "adjustDurations": "_Justera varaktigheter...", "applyDurationLimits": "Tillämpa varaktighets_gränser...", "batchConvert": "_Batchkonvertera...", "beautifyTimeCodes": "Försköna tidskoder...", + "improveTimeCodes": "Förbättra tidskoder (forced alignment)...", "bridgeGaps": "Överbrygga _mellanrum...", "applyMinGap": "Tillämpa min. mellanrum mellan undertexter...", "changeCasing": "_Ändra skiftläge...", @@ -1201,6 +1241,9 @@ "selectCurrentLineWhilePlayingHint": "Välj aktuell undertext under uppspelning {0}", "videoPosition": "Videoposition {0}", "videoPositionTextBox": "Textruta för videoposition {0}", + "toolbarLineBreakX": "Radbrytning {0} (resten av verktygsfältet fortsätter på en ny rad)", + "initialText": "Ursprunglig text för markerad rad", + "initialTextHint": "Texten på den markerade raden som den var när raden markerades", "hideWaveformToolbar": "Dölj verktygsfält {0}", "resetZoomAndSpeed": "Återställ zoom & uppspelningshastighet {0}", "removeBlankLines": "Ta bort tomma rader {0}", @@ -1214,6 +1257,15 @@ "textPlayHint": "Spela upp aktuell undertext och stanna vid slutet {0}", "textPauseHint": "Pausa uppspelningen {0}", "textNextHint": "Spela upp nästa undertext och stanna vid slutet {0}", + "moveSelectedLines": "Flytta markerade rader (bakåt/framåt-knappar)", + "moveSelectedLinesAndFollowing": "Flytta markerade rader och alla efterföljande (bakåt/framåt-knappar)", + "moveAllLines": "Flytta alla rader (bakåt/framåt-knappar)", + "moveSelectedLinesBackHint": "Flytta markerade rader {0} ms bakåt {1}", + "moveSelectedLinesForwardHint": "Flytta markerade rader {0} ms framåt {1}", + "moveSelectedLinesAndFollowingBackHint": "Flytta markerade rader och alla efterföljande {0} ms bakåt {1}", + "moveSelectedLinesAndFollowingForwardHint": "Flytta markerade rader och alla efterföljande {0} ms framåt {1}", + "moveAllLinesBackHint": "Flytta alla rader {0} ms bakåt {1}", + "moveAllLinesForwardHint": "Flytta alla rader {0} ms framåt {1}", "guessStartNoLineSelected": "Gissa start: ingen rad markerad", "guessStartTimeCodesLocked": "Gissa start: tidskoderna är låsta", "guessStartNoWaveform": "Gissa start: ingen vågform", @@ -1260,20 +1312,66 @@ "xNumberOfDifferenceAndPercentChanged": "Antal skillnader: {0} ({1:0.##}% av ord ändrade)", "xNumberOfDifferenceAndPercentLettersChanged": "Antal skillnader: {0} ({1:0.##}% av bokstäver ändrade)", "showOnlyDifferences": "Endast skillnader", - "ignoreLineBreaks": "Ignorera radbrytningar", "ignoreWhitespace": "Ignorera blanksteg", "ignoreWhitespaceHint": "Rader som endast skiljer sig i mellanslag, tabbar eller radbrytningar räknas inte som olika", "ignoreFormatting": "Ignorera formatering", - "onlyLookForDifferencesInText": "Sök endast efter skillnader i text", - "cannotCompareWithImageBasedSubtitles": "Kan inte jämföra med bildbaserade undertexter", - "statisticsTitle": "Statistik", "ignoreFormattingHint": "Rader som endast skiljer sig i formateringstaggar, som eller {\\an8}, räknas inte som olika", "showOnlyDifferencesInText": "Endast skillnader i text", + "ignoreNumbering": "Ignorera numrering", + "ignoreNumberingHint": "Rader som endast skiljer sig i sitt nummer räknas inte som olika", + "ignoreTimeDifferenceMs": "Tidstolerans (ms)", + "ignoreTimeDifferenceMsHint": "Start- och sluttider som skiljer sig med så här många millisekunder eller mindre räknas inte som olika", + "compareDifferences": "Skillnader", + "compareTextDifferences": "Textskillnader", + "compareCurrent": "Aktuell", + "compareReference": "Referens", + "compareEditable": "Redigerbar", + "compareEditableHint": "Ändringar som görs här förs tillbaka till undertexten när du klickar på Tillämpa", + "compareReadOnly": "Skrivskyddad", + "compareTakeFromReference": "Hämta text och tider från referensen", + "compareInsertFromReference": "Infoga den här raden i den aktuella undertexten", + "compareDeleteFromCurrent": "Ta bort den här raden från den aktuella undertexten", + "compareTakeText": "Hämta text", + "compareTakeTiming": "Hämta tider", + "compareEditLine": "Redigera rad", + "compareEditHint": "Ctrl+Enter för att spara, Esc för att avbryta", + "compareEdited": "Redigerad", + "compareOnePendingChange": "1 väntande ändring", + "compareXPendingChanges": "{0} väntande ändringar", + "compareDiscardXChanges": "Förkasta de {0} ändring(ar) som gjorts i Jämför?", + "compareXChangesApplied": "Jämför: {0} ändring(ar) tillämpade", + "compareChangeTextX": "#{0} text från referensen", + "compareChangeTimingX": "#{0} tider från referensen", + "compareChangeTextAndTimingX": "#{0} text och tider från referensen", + "compareChangeEditedX": "#{0} redigerad", + "compareChangeInsertedX": "#{0} infogad", + "compareChangeDeletedX": "#{0} borttagen", + "compareSyncPoint": "Synkpunkt", + "compareSyncPointHint": "Synkpunkt - dessa två rader visas alltid som ett par, och raderna ovanför och nedanför justeras var för sig", + "compareSyncPickCurrent": "Synkpunkt: använd den här aktuella raden", + "compareSyncPickReference": "Synkpunkt: använd den här referensraden", + "compareSyncRemove": "Ta bort synkpunkt", + "compareClearXSyncPoints": "Rensa synkpunkter ({0})", + "compareSyncCurrentPickedX": "Aktuell #{0} vald som synkpunkt - markera den matchande referensraden och klicka på Synka", + "compareSyncReferencePickedX": "Referens #{0} vald som synkpunkt - markera den matchande aktuella raden och klicka på Synka", + "compareSyncWithCurrentX": "Synka med aktuell #{0}", + "compareSyncWithReferenceX": "Synka med referens #{0}", + "compareSyncApply": "Synk", + "compareSyncPointSetXY": "Synkpunkt satt: aktuell #{0} och referens #{1} visas nu som ett par", + "compareSyncAlreadyPairedXY": "Aktuell #{0} och referens #{1} visas redan som ett par med samma start - inget att synka", + "compareSyncPointShiftedXYZW": "Synkpunkt satt: aktuell #{0}-#{1} förskjuten {2} för att börja med referens #{3}", + "compareChangeSyncShiftXYZ": "#{0}-#{1} förskjuten {2} (synkpunkt)", + "compareTimingDeltaHint": "Hur mycket senare (+) eller tidigare (−) referensen börjar och slutar än den aktuella raden", "loadXFromFile": "Läs in \"{0}\" från fil", + "compareLoadSavedFile": "Läs in sparad fil", "saveCompareHtmlTitle": "Spara HTML-fil för jämförelse", "pickMatroskaTrackX": "Välj Matroska-spår - {0}", "pickTransportStreamTrackX": "Välj transportströmsspår - {0}", + "chapters": "Kapitel", + "dvdVobFilesMissingX": "VOB-filer saknas ({0}% hittades)", "pickMp4TrackX": "Välj MP4-spår - {0}", + "pickMxfTrackX": "Välj MXF-spår - {0}", + "pickMpegTrackX": "Välj MPEG-spår - {0}", "rosettaProperties": "Timed Text Rosetta IMSC-egenskaper", "rosettaFontSize": "Typsnittsstorlek (radhöjd)", "propertyTimeBase": "Tidsbas", @@ -1283,7 +1381,6 @@ "propertyDefaultRegion": "Standardregion", "propertyStyleAttributeName": "Namn på stilattribut", "propertyTimeCodeFormat": "Tidskodsformat", - "propertyFileExtension": "Filändelse", "propertyTopOrigin": "Övre origo", "propertyTopExtent": "Övre utsträckning", "propertyBottomOrigin": "Nedre origo", @@ -1291,13 +1388,9 @@ "xProperties": "{0} egenskaper", "ebuSaveOptions": { "title": "EBU-sparalternativ", - "generalSubtitleInformation": "Allmän undertextinformation", "codePageNumber": "Kodsidnummer", "diskFormatCode": "Diskformatkod", "displayStandardCode": "Visningsstandardkod", - "colorRequiresTeletext": "Färger kräver text-TV!", - "alignmentRequiresTeletext": "Justering kräver text-TV!", - "teletextCharsShouldBe38": "'Max# tecken per rad' för text-TV bör vara 38!", "characterCodeTable": "Teckentabell", "languageCode": "Språkkod", "originalProgramTitle": "Originalprogramtitel", @@ -1314,7 +1407,6 @@ "maxNumberOfDisplayableRows": "Max# rader", "diskSequenceNumber": "Disksekvensnummer", "totalNumberOfDisks": "Totalt antal diskar", - "import": "Importera...", "textAndTimingInformation": "Text- och tidsinformation", "justificationCode": "Justeringskod", "verticalPosition": "Vertikal position", @@ -1331,11 +1423,6 @@ "errors": "Fel", "errorsX": "Fel: {0}", "maxLengthError": "Rad {0} överstiger maxlängd ({1}) med {2}: {3}", - "textUnchangedPresentation": "Oförändrad presentation", - "textLeftJustifiedText": "Vänsterjusterad text", - "textCenteredText": "Centrerad text", - "textRightJustifiedText": "Högerjusterad text", - "useBoxForOneNewLine": "Markera 'Använd ruta runt text' för endast en ny rad", "maxLengthErrorTeletextColored": "Rad {0}-{1}: 36 (inte {2}) bör vara högsta antal tecken för färgad text med dubbel höjd", "maxLengthErrorTeletextWhite": "Rad {0}-{1}: 37 (inte {2}) bör vara högsta antal tecken för vit text med dubbel höjd", "maxLengthErrorTeletextSingleHeight": "Rad {0}: 38 (inte {1}) bör vara högsta antal tecken för vit text med enkel höjd", @@ -1360,22 +1447,29 @@ "formattingDotDotDot": "Formatering...", "imageBasedSubtitleForEditDotDotDot": "Bildbaserad undertext för redigering...", "imageBasedSubtitleForOcrDotDotDot": "Bildbaserad undertext för OCR...", + "dvdSubtitlesDotDotDot": "Undertexter från DVD (IFO/VOB)...", + "titleImportDvd": "Importera undertexter från DVD", + "dvdIfoFile": "IFO-fil", + "dvdVobFiles": "VOB-filer", + "dvdVideoStandard": "Videostandard", + "dvdStartRipping": "Starta rippning", + "dvdRippingAborted": "Rippning avbruten", + "dvdOpenIfoFile": "Öppna DVD IFO-fil", + "dvdAddVobFiles": "Lägg till VOB-filer", + "dvdIfoFiles": "DVD IFO-filer", + "dvdVobFileType": "DVD VOB-filer", + "dvdDropHint": "Öppna en IFO-fil (VIDEO_TS\\VTS_01_0.IFO) eller lägg till VOB-filer - eller släpp dem här", + "dvdNotAnIfoFileX": "{0} är inte en DVD IFO-fil", + "dvdMenuIfoNoTitleSetsX": "Inga titeluppsättningar (VTS_xx_0.IFO) hittades bredvid {0}", + "dvdEncryptedXOfY": "{0} av de {1} undertextpaketen är fortfarande CSS-krypterade - dessa VOB-filer kopierades utan dekryptering, så vissa undertextbilder kommer att bli förvrängda.\n\nDekryptera DVD:n med ett DVD-rippningsverktyg först för ett rent resultat.\n\nFortsätta ändå?", "splitTextAt": "Dela text vid", "blankLines": "Tomma rader", "oneLineIsOneSubtitle": "En rad är en undertext", "twoLinesAreOneSubtitle": "Två rader är en undertext", "importFilesDotDotDot": "Importera filer...", "multipleFiles": "Importera från flera textfiler (en fil är en undertext)", - "importOptions": "Importeringsalternativ", - "autoSplitText": "Dela text automatiskt", - "lineMode": "Radläge", "maxLineLength": "Max radlängd", - "maxLinesPerSubtitle": "Max antal rader per undertext", - "minGapBetweenSubtitles": "Min mellanrum mellan undertexter", "mergeShortLines": "Slå ihop korta rader", - "removeLinesWithoutLetters": "Ta bort rader utan bokstäver", - "splitAtEndCharsSetting": "Dela vid slutmarkeringar", - "takeTimeFromCurrentFile": "Ta tid från aktuell fil", "fixed": "Fast", "numberOfSubtitlesX": "Antal undertexter: {0}", "numberOfSubtitlesXForcedY": "Antal undertexter: {0} ({1} tvingade)", @@ -1387,14 +1481,18 @@ "forcedAlignerProgress": "Justerar... fönster {0} av {1}, {2} av {3} rader", "forcedAlignerSetupTitle": "Justera tidskoder via forced aligner", "forcedAlignerSetupIntro": "En forced aligner matchar undertexten du redan har mot ljudet, utan att först transkribera det. Långa videor justeras i delar, så alla längder fungerar.", + "forcedAlignerEndsFromSpeech": "Sätt sluttider från isolerat tal (långsamt)", + "forcedAlignerEndsFromSpeechHint": "En forced aligner hittar var en rad börjar, inte var den slutar, så sluttider kommer normalt från lästiden. Med detta påslaget tas musik och ljudeffekter först bort från ljudet och varje rad slutar där dess tal tystnar. Tar ungefär lika lång tid som själva videon med en GPU - och många gånger längre utan.", + "forcedAlignerIsolatingSpeech": "Isolerar tal... {0}", + "forcedAlignerIsolatingSpeechFailed": "Kunde inte isolera talet - sluttiderna sattes från lästiden i stället.", "forcedAlignerModel": "Justeringsmodell", - "forcedAlignerDownloadEngine": "Ladda ner/uppdatera motor..." + "forcedAlignerDownloadEngine": "Ladda ner/uppdatera motor...", + "forcedAlignerEstimatedXOfY": "{0} av {1} rader kunde inte justeras och placerades efter lästid - deras tidskoder är bara uppskattade. Manuset är troligen längre än det som sägs i videon." }, "export": { "exportImagesProfiles": "Exportera bildprofiler", "leftRightMargin": "Vänster/höger marginal", "topBottomMargin": "Topp/botten marginal", - "titleExportBluRaySup": "Exportera Blu-ray (sup)", "lineSpacingPercent": "Radavstånd %", "paddingLeftRight": "Utfyllnad vänster/höger", "paddingTopBottom": "Utfyllnad topp/botten", @@ -1435,10 +1533,21 @@ "titleExportDCinemaInteropPng": "D-Cinema interop/png", "titleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", "imageBasedSubtitleSaved": "Bildbaserad undertext sparad", - "titleExportBdnXml": "Exportera BDN/xml", "titleExportWebVttThumbnails": "Exportera WebVTT (miniatyrbilder)", "fullFrameImage": "Helbildsruta", "fullFrameImageHint": "Gör varje bild lika stor som videons bildruta, med undertexten på sin plats", + "stereo3D": "3D", + "stereo3DHint": "För 3D-video: rita undertexten en gång i varje ögas halva av bildrutan", + "halfSideBySide": "Halv sida vid sida", + "halfTopBottom": "Halv topp/botten", + "depth3D": "Djup", + "depth3DHint": "Hur långt undertexten sticker ut från skärmen - positivt för den närmare, negativt skjuter den bakåt", + "plane3D": "3D-Plane", + "plane3DHint": "Ge varje undertext det djup som en 3D Blu-ray lagrar för den, från en 3D-Plane-fil (.ofs) skapad av BD3D2MK3D eller OFSExtractor. Djup används där 3D-Plane saknar värde", + "openPlane3DTitle": "Öppna 3D-Plane-fil", + "unableToLoadPlane3DX": "Kunde inte läsa in 3D-Plane: {0}", + "plane3DXDepthYToZ": "{0} (djup {1} till {2})", + "plane3DXNoDepth": "{0} (inga djupvärden)", "textEffect": "Texteffekt", "textEffectSettingsTitle": "Inställningar för texteffekt", "textEffectPreset": "Förinställning", @@ -1470,13 +1579,10 @@ "statistics": { "title": "Statistik", "titleWithFileName": "Statistik - {0}", - "generalStatistics": "Allmän statistik", - "mostUsed": "Mest använda...", "mostUsedLines": "Mest använda rader", "mostUsedWords": "Mest använda ord", "nothingFound": "Inget hittades", "numberOfLinesX": "Antal undertextrader: {0:#,##0}", - "numberOfFilesX": "Antal undertextfiler: {0:#,##0}", "lengthInFormatXinCharactersY": "Antal tecken som {0}: {1:#,###,##0}", "numberOfCharactersInTextOnly": "Antal tecken endast i text: {0:#,###,##0}", "totalDuration": "Total varaktighet för alla undertexter: {0:#,##0}", @@ -1517,7 +1623,6 @@ "gapMaximum": "Mellanrum - maximum: {0:#,##0} ms", "gapAverage": "Mellanrum - genomsnitt: {0:#,##0.##} ms", "gapExceedingMinimum": "Mellanrum - under minimum ({0:#,##0} ms): {1} ({2:0.00}%)", - "export": "Exportera...", "subtitles": "Undertexter", "words": "Ord", "totalDurationShort": "Total varaktighet", @@ -1547,6 +1652,21 @@ "restoreXFromY": "Vill du återställa \"{0}\" från {1}?", "deleteAllSubtitleBackups": "Vill du ta bort alla säkerhetskopior av undertexter?", "deleteAll": "Ta bort alla", + "subtitles": "Undertexter", + "settingsBackupInfo": "Settings.json säkerhetskopieras när Subtitle Edit startar, högst en gång var {0}:e dag och endast om inställningarna har ändrats. De {1} senaste säkerhetskopiorna behålls.", + "settingsBackupInfoEveryStart": "Settings.json säkerhetskopieras varje gång Subtitle Edit startar, om inställningarna har ändrats. De {0} senaste säkerhetskopiorna behålls.", + "settingsBackupOff": "Automatisk säkerhetskopiering av inställningar är avstängd (Alternativ → Inställningar → Fil).", + "lastSettingsBackupX": "Senaste säkerhetskopia: {0}", + "noSettingsBackupsYet": "Inga säkerhetskopior av inställningar ännu", + "openSettingsBackupFolder": "Öppna mapp för säkerhetskopior av inställningar", + "backUpSettingsNow": "Säkerhetskopiera nu", + "settingsBackedUp": "Aktuella inställningar har säkerhetskopierats.", + "restoreSettings": "Återställ inställningar", + "restoreSettingsFromX": "Vill du ersätta dina aktuella inställningar med säkerhetskopian från {0}?\n\nDina aktuella inställningar säkerhetskopieras först. Vissa ändringar träder i kraft först efter omstart av Subtitle Edit.", + "settingsRestored": "Inställningarna har återställts. Starta om Subtitle Edit för att alla ändringar ska träda i kraft.", + "settingsRestoreFailed": "Kunde inte återställa inställningarna: {0}", + "settingsBackupNotValid": "säkerhetskopian är inte en giltig inställningsfil, så dina aktuella inställningar behölls", + "deleteAllSettingsBackups": "Vill du ta bort alla säkerhetskopior av inställningar?", "xBackups": "{0} säkerhetskopior" }, "propertiesDCinema": { @@ -1561,22 +1681,16 @@ "editRate": "Redigeringsfrekvens", "timeCodeRate": "Tidskodsfrekvens", "startTime": "Starttid", - "font": "Typsnitt", "fontId": "Typsnitts-ID", "fontUri": "Typsnitts-URI", - "generate": "Generera", - "fontColor": "Typsnittsfärg", "chooseColor": "Välj färg", "fontEffect": "Typsnittseffekt", "effectColor": "Effektfärg", - "fontSize": "Typsnittsstorlek", "topBottomMargin": "Topp/botten marginal", "fadeUpTime": "Tona upp-tid", "fadeDownTime": "Tona ner-tid", - "frames": "Bilder", "zPosition": "Z-position", - "zPositionHelp": "Positiva tal flyttar texten längre bort, negativa tal flyttar texten närmare; om z-positionen är noll är den 2D", - "export": "Exportera..." + "zPositionHelp": "Positiva tal flyttar texten längre bort, negativa tal flyttar texten närmare; om z-positionen är noll är den 2D" }, "compareOnlyInOneFile": "Endast i en fil", "compareTextOrTimeDifference": "Text-/tidsskillnad", @@ -1642,7 +1756,6 @@ "selectionIntersect": "Skär med markering" }, "multipleReplace": { - "title": "Multipel ersättning", "editRule": "Redigera regel", "newRule": "Ny regel", "editCategory": "Redigera kategori", @@ -1659,24 +1772,23 @@ "findWhat": "Sök efter", "descriptionOptional": "Beskrivning (valfritt)", "invalidRegularExpressionX": "Ogiltigt reguljärt uttryck: {0}", - "regularExpressionTooSlowX": "Det reguljära uttrycket gav upp efter {0} sekunder - regeln hoppas över, prova ett enklare mönster" + "regularExpressionTooSlowX": "Det reguljära uttrycket gav upp efter {0} sekunder - regeln hoppas över, prova ett enklare mönster", + "moveToCategory": "Flytta till kategori" }, "find": { "searchTextWatermark": "Söktext...", "wholeWord": "Helord", - "caseSensitive": "Skiftlägeskänslig", - "caseInsensitive": "Skiftlägesokänslig", "findPrevious": "Sök _föregående", "findNext": "Sök _nästa", "replaceAndFindNext": "_Ersätt & sök nästa", "replaceAll": "Ersätt _alla", - "replaceTitle": "Ersätt", - "replaceWith": "Ersätt med", "replaceTextWatermark": "Ersätt med...", "replaceIn": "Ersätt/sök i", "replaceInTextAndOriginal": "Text och originaltext", "replaceInTextOnly": "Endast text", - "replaceInOriginalOnly": "Endast originaltext" + "replaceInOriginalOnly": "Endast originaltext", + "replacedOneOccurrence": "Ersatte en förekomst", + "replacedXOccurrences": "Ersatte {0} förekomster" }, "noSubtitleSelected": "Ingen undertext markerad", "pleaseSelectExactlyOneSubtitle": "Markera exakt en undertext." @@ -1687,6 +1799,7 @@ "xLinesYSubtitles": "{0} rader, {1} undertexter", "xLinesYSubtitlesZErrors": "{0} rader, {1} undertexter, {2} fel", "couldNotParseAsX": "Kunde inte tolkas som {0}", + "readAsXUseAsY": "Källan kunde inte läsas som {1}, men den kunde läsas som {0}.\nAnvända raderna och fortsätta spara som {1}?", "selectedXCharactersYLines": "Markerat: {0} tecken på {1} rad(er)", "replacedXOccurrences": "Ersatte {0} förekomst(er)", "invalidRegularExpression": "Ogiltigt reguljärt uttryck", @@ -1698,7 +1811,6 @@ "closeSearch": "Stäng sökning" }, "tools": { - "pickAlignmentTitle": "Välj justering", "removeUnicodeCharacters": { "title": "Ta bort/ersätt Unicode-tecken", "charactersFoundX": "Unicode-tecken hittade: {0}", @@ -1708,30 +1820,22 @@ "pickFontNameInstalledFonts": "Installerade typsnitt", "pickFontNameCollectedFonts": "Insamlade typsnitt", "colorPickerTitle": "Välj färg", + "colorPickerBrightness": "Ljusstyrka", "filterLayersTitle": "Filtrera lager för visning", "filterLayersHideFromWaveform": "Dölj från vågform/spektrogram", "filterLayersHideFromSubtitleGrid": "Dölj från undertextlista", "filterLayersHideFromVideoPreview": "Dölj från videoförhandsvisning", "pickSubtitleFormat": "Välj undertextformat", - "pickLayerTitle": "Sätt lager", "recentColors": "Senaste färger", "fixCommonErrors": { - "title": "Åtgärda vanliga fel", - "step1": "Steg 1/2 - Välj vilka fel som ska åtgärdas", - "whatToFix": "Vad som ska åtgärdas", - "example": "Exempel", - "selectAll": "Markera alla", - "inverseSelection": "Invertera markering", "back": "< &Bakåt", "next": "&Nästa >", - "step2": "Steg 2/2 - Verifiera åtgärder", "fixes": "Åtgärder", "ruleDetailsDotDotDot": "Regeldetaljer...", "showOnlyThisRule": "Visa endast åtgärder från den här regeln", "appliedRulesForLineX": "Tillämpade regler för rad {0}", "ruleX": "Regel: {0}", "log": "Logg", - "function": "Funktion", "removedEmptyLine": "Ta bort tom rad", "removedEmptyLineAtTop": "Ta bort tom rad överst", "removedEmptyLineAtBottom": "Ta bort tom rad underst", @@ -1752,13 +1856,13 @@ "removeLineBreaksPixelWidth": "Slå ihop undertexter som får plats på en rad (pixelbredd)", "fixUppercaseIInsideLowercaseWords": "Åtgärda versalt 'i' inuti gemena ord (OCR-fel)", "fixDoubleApostrophes": "Åtgärda dubbla apostroftecken ('') till ett citationstecken (\")", + "fixMisreadQuotes": "Åtgärda apostrofer som feltolkats som dubbla citattecken (OCR, engelska)", "addPeriods": "Lägg till punkt efter rader där nästa rad börjar med versal bokstav", "startWithUppercaseLetterAfterParagraph": "Börja med versal bokstav efter stycke", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Börja med versal bokstav efter punkt inuti stycke", "startWithUppercaseLetterAfterColon": "Börja med versal bokstav efter kolon/semikolon", "fixLowercaseIToUppercaseI": "Åtgärda ensamt gement 'i' till 'I' (engelska)", "fixCommonOcrErrors": "Åtgärda vanliga OCR-fel (med OCR-ersättningslista)", - "commonOcrErrorsFixed": "Vanliga OCR-fel åtgärdade (OcrReplaceList-fil använd): {0}", "removeSpaceBetweenNumber": "Ta bort mellanslag mellan siffror", "breakDialogsOnOneLine": "Dela dialoger på en rad", "removeDialogFirstInNonDialogs": "Ta bort startbindestreck på första raden för icke-dialoger", @@ -1775,18 +1879,17 @@ "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Foo
bar! -> Foo bar!", "fixDoubleApostrophesExample": "''Har dubbla enkla citationstecken'' -> \"Har enkelt dubbelt citationstecken\"", + "fixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "addPeriodsExample": "Hej världen -> Hej världen.", "startWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: Foobar!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Hej där! hur mår du? -> Hej där! Hur mår du?", "startWithUppercaseLetterAfterColonExample": "Talare: hej världen! -> Talare: Hej världen!", "removeHyphensSingleLineExample": "- Foobar. -> Foobar.", "fix3PlusLinesExample": "Foo
bar
baz! -> Foo bar baz!", - "xMissingQuotesAdded": "Saknade citationstecken tillagda: {0}", "fix3PlusLine": "Åtgärda undertext med fler än två rader", "fix3PlusLines": "Åtgärda undertexter med fler än två rader", "analysing": "Analyserar...", "nothingToFix": "Inget att åtgärda :)", - "fixesFoundX": "Åtgärder hittade: {0}", "xFixesApplied": "Åtgärder tillämpade: {0}", "nothingFixableBut": "Inget kunde åtgärdas automatiskt. Undertexten innehåller fel - se logg för detaljer", "xFixedBut": "{0} problem åtgärdade men undertexten innehåller fortfarande fel - se logg för detaljer", @@ -1794,7 +1897,6 @@ "fixFirstLetterToUppercaseAfterParagraph": "Åtgärda första bokstaven till versal efter stycke", "mergeShortLine": "Slå ihop kort rad (enskild mening)", "mergeShortLineAll": "Slå ihop kort rad (alla utom dialoger)", - "unbreakShortLinePixelWidth": "Slå ihop kort rad (pixelbredd)", "breakLongLine": "Bryt lång rad", "fixLongDisplayTime": "Åtgärda lång visningstid", "fixInvalidItalicTag": "Åtgärda ogiltig kursivtagg", @@ -1817,7 +1919,6 @@ "fixUppercaseIInsideLowercaseWord": "Åtgärda versalt 'i' inuti gement ord", "fixMissingPeriodAtEndOfLine": "Lägg till saknad punkt i slutet av rad", "refreshFixes": "Uppdatera tillgängliga åtgärder", - "applyFixes": "Tillämpa valda åtgärder & stäng", "autoBreak": "Auto &br", "unbreak": "&Slå ihop", "fixDoubleDash": "Åtgärda '--' -> '...'", @@ -1836,8 +1937,6 @@ "fixSpaceBetweenNumbersExample": "1 100 -> 1100", "fixDialogsOneLineExample": "Hej John! - Hej Ida! -> Hej John!
- Hej Ida!", "removeDialogFirstInNonDialogsExample": "- Hur mår du? -> Hur mår du?", - "selectDefault": "Välj standard", - "setDefault": "Sätt aktuella åtgärder som standard", "fixContinuationStyleX": "Åtgärda fortsättningsstil: {0}", "fixUnnecessaryLeadingDots": "Ta bort onödiga inledande punkter", "fixCommonErrorsProfiles": "Profiler för åtgärda vanliga fel", @@ -1845,7 +1944,6 @@ "searchRulesDotDotDot": "Sök regler...", "goToApplyFixes": "Gå till tillämpa åtgärder", "backToFixList": "Tillbaka till åtgärdslista", - "applyFixesAndClose": "Tillämpa åtgärder & stäng", "fixCommonOcrErrorsStep2": "Åtgärda vanliga fel, steg 2 (tillämpa åtgärder)", "fixCommonOcrErrorsStep2FixesFoundX": "Åtgärda vanliga fel, steg 2 - Åtgärder hittade: {0}", "action": "Åtgärd", @@ -1859,18 +1957,11 @@ "adjustDurations": { "title": "Justera varaktigheter", "adjustVia": "Justera via", - "seconds": "Sekunder", - "percent": "Procent", "recalculate": "Räkna om", "addSeconds": "Lägg till sekunder", - "setAsPercent": "Sätt som procent av varaktighet", "note": "Obs: Visningstid kommer inte att överlappa nästa texts starttid", "fixed": "Fast", - "milliseconds": "Millisekunder", "extendOnly": "Endast förläng", - "enforceDurationLimits": "Tvinga minimi- och maximivaraktighet", - "checkShotChanges": "Förläng inte förbi scenbyten", - "batchCheckShotChanges": "Respektera scenbyten (om tillgängligt)", "recalculateRequiresOcrNote": "Omberäkning är inte tillgänglig — en eller flera undertexter saknar OCR-text. Kör OCR först." }, "applyDurationLimits": { @@ -1878,6 +1969,8 @@ "fixMinDurationMs": "Åtgärda minimivaraktighet (ms)", "doNotGoPastShotChange": "Gå inte förbi scenbyte", "fixMaxDurationMs": "Åtgärda maximivaraktighet (ms)", + "fixMinDurationFrames": "Åtgärda minsta varaktighet (bildrutor)", + "fixMaxDurationFrames": "Åtgärda största varaktighet (bildrutor)", "minimumDurationMilliseconds": "Minsta varaktighet (millisekunder):", "maximumDurationMilliseconds": "Största varaktighet (millisekunder):", "maxDurationShouldBeHigherThanMinDuration": "Maximivaraktighet bör vara högre än minimivaraktighet", @@ -1897,12 +1990,8 @@ }, "beautifyTimeCodes": { "title": "Försköna tidskoder", - "beautifySettings": "Förskönningsinställningar", "snapToFrames": "Fäst till bildrutor", - "frameGap": "Bildrutsmellanrum", "minDuration": "Min varaktighet (ms)", - "shotChangeThreshold": "Scenbyteströskel (ms)", - "shotChangeOffset": "Scenbytsförskjutning (bilder)", "original": "Original", "beautified": "Förskönad", "subtitlesCount": "Undertexter", @@ -1931,13 +2020,80 @@ "timeCodesExtractFailed": "Kunde inte läsa tidskoder från videon", "timeCodesHint": "Fäst start-/slutpunkter vid videons verkliga bildrutetider i stället för att anta en konstant bildfrekvens. Kräver att hela videon läses en gång; resultatet cachas." }, + "improveTimeCodes": { + "title": "Förbättra tidskoder (forced alignment)", + "aligner": "Aligner", + "alignerHint": "Modellen som lyssnar efter varje rad i ljudet. De bästa valen för undertextens språk listas först.", + "maxShift": "Max förskjutning (sekunder)", + "maxShiftHint": "Hur mycket undertexten får vara ur synk. En rad vars start skulle flyttas längre lämnas som den är och flaggas. Oavsett värde flyttas inte en enskild rad som vill flytta mer än en halv sekund längre än raderna runt den i blindo: den följer sina grannar om alla flyttades, och erbjuds annars avmarkerad så att du kan kontrollera den.", + "adjustStartTimes": "Justera starttider", + "adjustEndTimes": "Justera sluttider", + "isolateSpeech": "Isolera tal först (långsamt)", + "isolateSpeechHint": "Tar bort musik och ljudeffekter före justeringen, så att alignern bara hör dialogen. Hjälper för rader som sägs över hög musik eller action, men tar ungefär lika lång tid som själva ljudet med en GPU - och många gånger längre utan.", + "isolatingSpeech": "Isolerar tal... (detta tar en stund)", + "isolateSpeechFailed": "Kunde inte isolera talet - justerades mot originalljudet i stället.", + "checkWithSpeechToText": "Kontrollera med tal till text", + "checkWithSpeechToTextHint": "Transkriberar även ljudet och kontrollerar varje flytt mot var orden faktiskt hördes. Stora flyttar som talet bekräftar markeras åt dig, och flyttar bort från där en rad hörs lämnas avmarkerade så att du kan kontrollera dem. Visar också hur stor del av varje rad som hördes - en låg andel betyder att texten skiljer sig från det som sägs. En undertext som är mer ur synk än max förskjutning - en konstant förskjutning, en drift från felaktig bildfrekvens eller hopp där scener klippts bort - synkas först efter de hörda orden. Använder Crisp ASR Parakeet, vilket tar några minuter för en långfilm med en GPU.", + "checkWithSpeechToTextNotAvailableX": "Kontroll med tal till text är inte tillgänglig för {0}", + "transcribingToCheck": "Transkriberar för att kontrollera justeringen...", + "speechToTextFailed": "Tal till text misslyckades - tidskoderna kontrollerades inte mot det.", + "speechToTextX": "Tal till text: {0}", + "speechToTextConfirmedXDisputedY": "Tal: {0} bekräftade, {1} ifrågasatta", + "hardlyHeardX": "Tal till text hörde bara {0}% av undertextens ord. Är undertexten på det språk som talas? Alignern kan inte placera en översättning.", + "heard": "Hört", + "heardHint": "Hur stor del av raden som tal till text hörde. En låg andel betyder att texten skiljer sig från det som sägs - där alignern mest sannolikt har fel.", + "statusConfirmedBySpeech": "Bekräftad av tal", + "statusDisputedBySpeech": "Hördes där den var", + "statusMovedWithSync": "Flyttad med synkningen", + "syncedFirstXY": "Synkad först: {0} s i början, {1} s i slutet", + "showSpeechOnly": "Visa endast tal", + "showSpeechOnlyHint": "Rita den justerade vågformen från ljudet med musik och ljudeffekter borttagna; den ursprungliga vågformen förblir som den är, för jämförelse. Tillgängligt när talet har isolerats - här, eller med \"Visa endast tal\" i huvudfönstrets vågform.", + "align": "Justera", + "original": "Original", + "aligned": "Justerad", + "intro": "Välj en aligner och tryck på \"Justera\" för att lyssna efter varje rad i ljudet och skärpa dess tidskoder.", + "extractingAudio": "Extraherar ljud...", + "aligningBatchXOfY": "Justerar... batch {0} av {1}", + "extractAudioFailed": "Kunde inte extrahera ljudet med ffmpeg.", + "modelWillBeDownloaded": "{0} kommer att laddas ner", + "summaryXRetimedYKeptZSkipped": "Omtidsatta: {0} · Behållna: {1} · Inget tal: {2}", + "meanShiftX": "Genomsnittlig förskjutning: {0} ms", + "toCheckX": "Att kontrollera: {0}", + "largeMovesToCheckX": "{0} rad(er) skulle flyttas långt på egen hand och lämnas avmarkerade - lyssna på dem (F5 spelar den justerade raden, Shift+F5 originalet) och markera de som är rätt.", + "linesToCheckX": "{0} rad(er) lämnas avmarkerade för kontroll - lyssna på dem (F5 spelar den justerade raden, Shift+F5 originalet) och markera de som är rätt.", + "changeXOfY": "Ändring {0} av {1}", + "previousChange": "Föregående ändring", + "nextChange": "Nästa ändring", + "startShift": "Start", + "endShift": "Slut", + "statusRetimed": "Omtidsatt", + "statusMovedWithNeighbours": "Flyttad med sina grannar", + "statusLargeMoveUnconfirmed": "Stor flytt - lyssna, markera för att tillämpa", + "statusUnchanged": "Redan på plats", + "statusNoSpeech": "Inget tal", + "statusShiftTooLarge": "Behållen - för stor förskjutning", + "statusFailed": "Behållen - alignern misslyckades", + "statusAdjustedByHand": "Justerad manuellt", + "alignedWaveformHint": "Dra en rad för att flytta den, eller dra dess kanter för att ändra start eller slut.", + "playLine": "Spela rad", + "undoAdjustment": "Ångra justering", + "playPause": "Spela / pausa", + "playAligned": "Justerad", + "playAlignedHint": "Spela den markerade raden med dess justerade tidskoder", + "apply": "Tillämpa", + "applyHint": "Avmarkera en rad för att behålla dess ursprungliga tidskoder. Dubbelklicka på en rad för att spela den. Rader kan också flyttas eller ändras i storlek i den justerade vågformen." + }, "beautifyTimeCodesProfile": { "title": "Redigera profil för försköning av tidskoder", "loadPreset": "Läs in förinställning", "presetDefault": "Standard", "presetNetflix": "Netflix", "presetSdi": "SDI", - "general": "Allmänt", + "saveAsProfile": "Spara som profil...", + "deleteProfile": "Ta bort profil", + "profileName": "Profilnamn", + "overwriteProfileX": "En profil med namnet \"{0}\" finns redan. Skriva över den?", + "deleteProfileX": "Ta bort profilen \"{0}\"?", "gap": "Mellanrum", "gapSuffix": "bildrutor (uppdaterar även mellanrumsfälten skilda från noll nedan)", "milliseconds": "ms", @@ -1966,9 +2122,12 @@ "hintChaining": "Hur undertexter som nästan rör vid varandra hanteras — förläng dem tillsammans eller skjut isär dem, beroende på om ett scenbyte ligger emellan." }, "bridgeGaps": { - "title": "Överbrygga mellanrum", "bridgeGapsSmallerThan": "Överbrygga mellanrum mindre än (ms)", "minGap": "Minimimellanrum (ms)", + "bridgeGapsSmallerThanFrames": "Överbrygga mellanrum mindre än (bildrutor)", + "minGapFrames": "Minsta mellanrum (bildrutor)", + "calculateBridgeGapsSmallerThanDotDotDot": "Beräkna gräns för överbryggning av mellanrum från en bildfrekvens...", + "useXMsAsBridgeGapsSmallerThan": "Överbrygga mellanrum mindre än \"{0}\" millisekunder?", "numberOfSmallGapsBridgedX": "Antal små mellanrum överbryggade: {0}", "percentFoPrevious": "Mellanrum för föregående (%)", "gapChange": "Mellanrumsändring" @@ -1980,8 +2139,6 @@ "sortBy": { "title": "Sortera undertexter", "sortOrder": "Sorteringsordning", - "sortByNumber": "Nummer", - "sortByStartTime": "Starttid", "sortByEndTime": "Sluttid" }, "batchConvert": { @@ -2004,6 +2161,7 @@ "addColor": "Lägg till färg", "deleteLinesWithSpecificActorsOrStyles": "Ta bort rader med skådespelare eller stilar (separera flera med komma)", "useSourceStylesIfPossible": "Använd källstilar om möjligt", + "keepSourceEmbeddedFonts": "Behåll källans inbäddade typsnitt (sidfot)", "editStyles": "Redigera stilar", "editProperties": "Redigera egenskaper", "editAttachments": "Redigera bilagor", @@ -2024,7 +2182,6 @@ "assaChangeStyleFromStyle": "Ändra stil från", "assaChangeStyleToStyle": "till", "assaChangeStyleImportStyle": "Importera stil...", - "assaChangeStyleImportedX": "Importerad: {0}", "assaChangeStyleTrimUnusedStyles": "Trimma oanvända stilar", "assaChangeStylePropertiesTitle": "Ändra stilegenskaper", "assaChangeStylePropertiesInfo": "Ändrar de valda fälten i alla stilar i filen, utan att röra stilarna i övrigt.", @@ -2036,13 +2193,52 @@ "convertColorsToDialogReBreakLines": "Radbryt om", "snapTimeCodesToFramesInfo": "Avrundar varje start- och sluttid till närmaste bildruta. Bildfrekvensen läses från en videofil med samma namn som undertextfilen, om inte en fast bildfrekvens väljs.", "addFolderDotDotDot": "Lägg till mapp...", + "addFolderRecursiveDotDotDot": "Lägg till mapp rekursivt...", "selectFolderToConvert": "Välj mapp med filer att konvertera", "includeSubfolders": "Inkludera undermappar när en mapp läggs till", + "videoFilesWhenAddingFolder": "Videofiler (mkv, mp4, ts...) när en mapp läggs till", + "videoFilesAsk": "Fråga", + "videoFilesInclude": "Lägg till deras undertextspår", + "videoFilesSkip": "Hoppa över", + "folderContainsXVideoFiles": "Mappen innehåller {0} videofil(er) (mkv, mp4, ts...).\n\nLägga till deras inbäddade undertextspår också, eller bara undertextfilerna?", + "addVideoFiles": "Lägg till videofiler", + "skipVideoFiles": "Endast undertextfiler", + "doNotAskAgainVideoFiles": "Fråga inte igen (ändra i batchkonverteringsinställningarna)", + "settingsSectionOutput": "Utdata", + "settingsSectionAddingFiles": "Lägga till filer", + "settingsSectionImageBasedSubtitles": "Bildbaserade undertexter (OCR)", + "settingsSectionOther": "Övrigt", "keepSourceFileTimestamp": "Behåll källfilens datum/tid på utdatafilerna", - "scanningFolderX": "Söker igenom {0}..." + "preventSleepWhileConverting": "Förhindra att datorn går i viloläge under konvertering", + "scanningFolderX": "Söker igenom {0}...", + "transportStreamSettings": "Inställningar för Transport Stream", + "transportStreamSettingsDotDotDot": "Inställningar för Transport Stream...", + "transportStreamSettingsInfo": "Gäller undertextspår som extraheras från Transport Stream-filer (.ts/.m2ts). Position och videostorlek påverkar endast DVB-bildspår som exporteras till ett bildbaserat format.", + "transportStreamOverrideXPosition": "Åsidosätt ursprunglig X-position", + "transportStreamOverrideYPosition": "Åsidosätt ursprunglig Y-position", + "transportStreamOverrideVideoSize": "Åsidosätt ursprunglig videostorlek", + "transportStreamBottomMargin": "Nedre marginal", + "transportStreamFileNameEnding": "Filnamnsslut", + "transportStreamFileNameEndingInfo": "Läggs till före filändelsen för varje extraherat spår. Lämna tomt för att använda det vanliga språksuffixet.", + "transportStreamOnlyTeletext": "Endast text-tv", + "transportStreamGetSizeFromVideo": "Hämta storlek från video...", + "twoLetterLanguageCodeUppercase": "Språkkod med två bokstäver (versaler)", + "threeLetterLanguageCodeUppercase": "Språkkod med tre bokstäver (versaler)", + "formatContainsDotDotDot": "Format innehåller...", + "extensionIsDotDotDot": "Filändelse är...", + "statusIsError": "Status är fel", + "forcedTracksOnly": "Endast tvingade spår", + "xConvertedYFailedInZ": "{0:#,###,##0} konverterade, {1:#,###,##0} misslyckades på {2}", + "xNotProcessed": "{0:#,###,##0} ej bearbetade", + "removeUnicodeControlCharactersTitle": "Ta bort Unicode-styrtecken", + "removeUnicodeControlCharactersInfo": "Tar bort de osynliga Unicode-styrtecknen för textriktning (LRM, RLM, LRE, RLE, PDF, LRO och RLO) från texten, och ersätter hårda mellanslag med vanliga mellanslag.", + "preset": "Förinställning", + "savePresetDotDotDot": "Spara förinställning...", + "deletePreset": "Ta bort förinställning", + "presetName": "Namn på förinställning", + "deletePresetX": "Ta bort förinställningen \"{0}\"?" }, "changeCasing": { - "title": "Ändra skiftläge", "fixNames": "Åtgärda namn", "namesX": "Namn: {0:#,##0}", "hitsX": "Träffar: {0:#,##0}", @@ -2053,9 +2249,7 @@ "allUppercase": "Alla versaler", "allLowercase": "Alla gemener" }, - "changeFormatting": { - "title": "Ändra formatering" - }, + "changeFormatting": {}, "convertActors": { "title": "Konvertera skådespelare", "convertActorFrom": "Konvertera skådespelare från", @@ -2084,18 +2278,12 @@ "outputFormatAssa": "Advanced Sub Station Alpha (.ass)", "style1": "Stil 1", "style2": "Stil 2", - "outlineWidth": "Konturbredd", - "shadowWidth": "Skuggans bredd", - "alignTop": "Överst", - "alignBottom": "Botten", - "merge": "_Slå ihop", - "pleaseLoadTwoSubtitles": "Vänligen ladda två undertexter" + "merge": "_Slå ihop" }, "splitSubtitle": { "title": "Dela undertext", "numberOfEqualParts": "Antal lika delar", "saveSplitParts": "_Spara delade delar", - "subtitleSplitIntoXParts": "Undertext delad i {0} delar.", "xPartsSavedInFormatYToFolder": "{0} delar sparade i format {1} till mapp:" }, "splitBreakLongLines": { @@ -2129,18 +2317,17 @@ "columnMerge": "Slå samman", "columnFirst": "Första raden", "columnSecond": "Andra raden", - "columnMerged": "Sammanslagen", - "selectAll": "Markera alla", - "inverseSelection": "Omvänd markering" + "columnMerged": "Sammanslagen" }, "mergeLinesWithSameText": { - "title": "Slå ihop rader med samma text", "maxMsBetweenLines": "Max millisekunder mellan rader", - "includeIncrementingLines": "Inkludera rader med inkrementerande text" + "maxFramesBetweenLines": "Max bildrutor mellan rader", + "includeIncrementingLines": "Inkludera rader med inkrementerande text", + "includeRollUpCaptions": "Inkludera rullande (roll-up) undertexter" }, "mergeLinesWithSameTimeCodes": { - "title": "Slå ihop rader med samma tidskoder", "maxMsDifference": "Max skillnad (millisekunder)", + "maxFramesDifference": "Max skillnad (bildrutor)", "makeDialog": "Gör dialoger" }, "netflixCheckAndFix": { @@ -2163,7 +2350,6 @@ "shotChanges": "Scenbyten", "startNumberSpellOut": "Startnummer skriv ut", "textforHiUseBrackets": "Text för HI, använd hakparenteser", - "frameRate": "Bildfrekvens", "twoFrameGrap": "Tvåbildsmellanrum", "whiteSpace": "Blanksteg", "childrensProgram": "Barnprogram", @@ -2201,7 +2387,6 @@ "italicsFixed": "Åtgärdade kursiveringar", "italicsNotAllowed": "Kursiveringar inte tillåtna", "bridgeGapsXToYFrames": "3-{0} bilders mellanrum => 2 bilders mellanrum", - "startNumberSpellOutComment": "När en siffra inleder en mening ska den alltid skrivas ut", "maximumXCharactersPerSecond": "Maximalt {0} tecken per sekund" }, "imageBasedEdit": { @@ -2210,10 +2395,8 @@ "resizeImagesDotDotDot": "Ändra storlek på bilder...", "adjustBrightnessDotDotDot": "Justera ljusstyrka...", "adjustAlphaDotDotDot": "Justera alfa...", - "centerHorizontally": "Centrera horisontellt", "cropImages": "Beskär bilder", "importTimeCodes": "Importera tidskoder...", - "setTextForSubtitle": "Sätt text för undertext", "setText": "Sätt text", "screenWidth": "Skärmbredd", "screenHeight": "Skärmhöjd", @@ -2244,15 +2427,31 @@ "letterboxCustom": "Anpassad balkhöjd", "barHeightPx": "Balkhöjd (px)", "titleSafePercent": "Titelsäker yta (%)", + "moveCaptions": "Flytta undertexter", + "moveCaptionsDotDotDot": "Flytta undertexter...", + "moveCaptionsTo": "Flytta undertexter", + "moveCaptionsIntoBars": "In i letterbox-fälten (utanför bilden)", + "moveCaptionsIntoPicture": "Inuti bilden (ut ur fälten)", + "moveCaptionsOffset": "Avstånd från kanten (px)", + "letterboxBarHeightXPxYOfZCaptionsWillMove": "Fälthöjd: {0} px - {1} av {2} undertexter kommer att flyttas", + "removeFadeInOut": "Ta bort intoning/uttoning", + "removeFadeInOutXLinesRemoved": "{0} toningsrader sammanslagna med de rader de hör till", + "removeFadeInOutNothingFound": "Inga intonings-/uttoningsrader hittades", "positionSummary": "{0}×{1} - {2} undertexter - balkhöjd: {3} px", "xInActivePicture": "{0} i bilden", "xInTopBar": "{0} i övre balken", "xInBottomBar": "{0} i nedre balken", "noImageSubtitlesLoaded": "Inga bildbaserade undertexter inlästa", - "imageBasedFormatNotSupported": "Bildbaserat undertextformat hittades inte/stöds inte." + "imageBasedFormatNotSupported": "Bildbaserat undertextformat hittades inte/stöds inte.", + "frameRateDeclaredInFile": "Bildfrekvens angiven i Blu-ray sup-filen", + "frameRateDetectedFromTimeCodesX": "Bildfrekvens identifierad från Blu-ray sup-tidskoderna (filen anger {0})", + "frameRateFromVideo": "Videons bildfrekvens", + "frameRateCurrent": "Aktuell bildfrekvens", + "frameRateSetManually": "Bildfrekvens angiven manuellt", + "frameRateUsageInfo": "Export till Blu-ray sup, BDN XML, DOST och FCP skrivs med den här bildfrekvensen. Den ändrar inga tider - använd \"Ändra bildfrekvens\" för det.", + "useVideoFrameRateXInsteadOfY": "Videons bildfrekvens är {0}, men undertexten är inställd på {1}.\n\nAnvända videons bildfrekvens ({0})?" }, "removeTextForHearingImpaired": { - "title": "Ta bort text för hörselskadade", "interjections": "Interjektioner", "skipIfStartWith": "Hoppa över om börjar med", "removeTextBetween": "Ta bort text mellan", @@ -2274,7 +2473,6 @@ "aiReview": { "title": "AI-granskning", "review": "Granska", - "stop": "Stoppa", "editPrompt": "Redigera prompt...", "editPromptTitle": "Redigera granskningsprompt", "promptInfo": "Instruktioner som skickas till modellen - {language} ersätts med undertextens språk.", @@ -2285,7 +2483,6 @@ "reviewingLineXOfY": "Granskar rad {0} av {1}...", "reviewDone": "Granskning klar - {0} förslag i {1} rader", "noIssuesFound": "Inga problem hittades", - "categoryAll": "Alla", "categorySpelling": "Stavning", "categoryGrammar": "Grammatik", "categoryPunctuation": "Interpunktion", @@ -2297,8 +2494,23 @@ "largeChangeWarning": "Stor ändring - ser ut som en omskrivning, granska noga", "mismatchWarning": "Liknar inte originalet - kan höra till en annan rad", "engineError": "AI-motorn kunde inte nås: {0}", - "setupHint": "Välj först en motor och en modell i Verktyg -> AI-granskning.", - "playCurrentLineHint": "Spela upp den markerade raden i videospelaren och pausa vid dess slut (dubbelklicka också på en rad)" + "playCurrentLineHint": "Spela upp den markerade raden i videospelaren och pausa vid dess slut (dubbelklicka också på en rad)", + "editAfterHint": "Klicka på texten i den markerade raden för att redigera åtgärden innan den tillämpas (Enter sparar, Escape avbryter)", + "template": "Mall", + "templatePlaceholder": "Välj en mall för att ersätta prompten", + "templateStandard": "Standardkorrekturläsning", + "templateSpeechToText": "Uppstädning av tal till text", + "templateMachineTranslation": "Rättning av maskinöversättning", + "templateSdh": "SDH / hörselskadade", + "referenceContext": "Referenskontext", + "referenceContextInfo": "Valfritt. Namn, rollfigurer, ordlista, synopsis eller stilanteckningar - modellen behandlar detta som auktoritet för namn och termer. Skickas med varje batch.", + "referenceContextPlaceholder": "Namn: Kaito, moster Mei, dr Hollis\nTermer: Shinkansen, varpkärna\nSynopsis: Kaito reser till Tokyo för att hitta sin försvunna far.", + "generateContext": "Generera med AI", + "generateContextHint": "Låt den valda AI-motorn läsa undertexten och ta fram namn, termer och en synopsis - kontrollera resultatet före användning", + "generatingContextPartXOfY": "Läser del {0} av {1}...", + "generatingContextSynopsis": "Skriver synopsis...", + "replaceContextQuestion": "Ersätta den aktuella referenskontexten?", + "noContextGenerated": "AI-motorn returnerade ingen användbar referensinformation." }, "aiAssistant": { "title": "AI-assistent", @@ -2359,7 +2571,21 @@ "correctWordsX": "Korrekta ord: {0}", "namesX": "Namn: {0}", "addedToDictionaryX": "Tillagda i ordbok: {0}", - "doNotShowThisAgain": "Visa inte det här meddelandet igen" + "doNotShowThisAgain": "Visa inte det här meddelandet igen", + "editUseAlwaysList": "Redigera listan \"Använd alltid\"...", + "useAlwaysListTitle": "Rättstavning - listan \"Använd alltid\"", + "useAlwaysListHeader": "Listan \"Använd alltid\"", + "useAlwaysListDescription": "Ord som rättstavningen ersätter automatiskt, sparade av \"Ändra alla\" och \"Använd alltid\". Ett par används bara när ordet är felstavat.", + "useAlwaysWord": "Felstavat ord", + "xPairs": "{0:#,##0} par", + "xUnusedPairs": "{0:#,##0} aldrig använda", + "useAlwaysUnusedHint": "Aldrig använt - det här ordet är rättstavat (eller är ett namn eller ett användarord), så rättstavningen flaggar det aldrig", + "removeUnused": "Ta bort oanvända", + "useAlwaysEmpty": "Inga \"Använd alltid\"-par för det här språket ännu", + "useAlwaysEmptyHint": "Par läggs till när du klickar på \"Ändra alla\" eller \"Använd alltid\" i rättstavningen.", + "useAlwaysNoMatch": "Inga par matchar sökningen", + "useAlwaysSameWord": "Ersättningen måste skilja sig från ordet.", + "useAlwaysRememberOff": "\"Kom ihåg listan 'Använd alltid'\" är avstängt i Inställningar, så rättstavningen varken använder eller sparar den här listan." }, "video": { "chapters": { @@ -2390,7 +2616,6 @@ "scaleTimesDescription": "Skala om varje kapiteltid från en bildfrekvens till en annan.", "fromFrameRate": "Från", "toFrameRate": "Till", - "apply": "Tillämpa", "writeToVideo": "Skriv till video...", "writeToVideoTitle": "Skriv kapitel till video", "writeToVideoDescription": "Kapitlen skrivs in i en kopia av videofilen. Inget kodas om, så det går snabbt och utan kvalitetsförlust.", @@ -2400,7 +2625,6 @@ "writtenToX": "Kapitel skrivna till {0}", "unableToWriteChapters": "Det gick inte att skriva kapitel till videofilen.", "chaptersSavedToX": "Kapitel sparade till {0}", - "noVideoLoaded": "Ingen video inläst", "emptyListCallToAction": "Inga kapitel ännu - lägg till ett vid videopositionen, eller importera dem från en video eller fil." }, "goToVideoPosition": "Gå till videoposition", @@ -2412,30 +2636,88 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "Sekundär undertext på videospelare, öppna...", "openSecondarySubtitleOnVideoPlayer": "Sekundär undertext (på videospelare)", "removeSecondarySubtitleOnVideoPlayer": "Sekundär undertext på videospelare, ta bort", + "editSecondarySubtitleSettings": "Redigera inställningar för sekundär undertext", + "editSecondarySubtitleSettingsDotDotDot": "Redigera inställningar för sekundär undertext...", + "secondarySubtitleRememberSettings": "Kom ihåg dessa inställningar", + "secondarySubtitleDoNotShowAgain": "Visa inte den här dialogrutan igen", + "secondarySubtitleJustifyLines": "Justera rader", "openRecentVideo": "Öppna senaste video", "clearRecentVideos": "Rensa senaste videor", "cutVideoTitle": "Klipp video", "cutVideoDotDotDot": "Klipp video...", + "remuxVideoTitle": "Remuxa video", + "remuxVideoDotDotDot": "Remuxa video...", + "remuxVideoInputVideo": "Indatavideo:", + "remuxVideoMultipleTracksRequiresMkv": "Flera ljud- eller undertextspår kräver MKV-containern. Utdataformatet har automatiskt ändrats till .mkv.", + "remuxVideoOutputFormat": "Utdataformat:", + "remuxVideoOutputFile": "Utdatafil:", + "remuxVideoRemuxing": "Remuxar video och ljud...", + "remuxVideoFinalizing": "Slutför utdatafilen (flyttar index till början)...", + "remuxVideoCompleted": "Videon har remuxats.", + "remuxVideoFailed": "Kunde inte remuxa videon.", + "remuxVideoPleaseSelectBoth": "Välj både video- och ljudfiler.", + "remuxVideoAssRequiresMkv": "ASS/SSA-undertexter kräver MKV-containern för att bevara all formatering och alla stilar.", + "remuxVideoSccRequiresMov": "Scenarist-undertexter (.scc) bäddas in som CEA-608 closed captions, vilket kräver MOV- eller MPG-containern. Utdataformatet har automatiskt ändrats till .mov.", + "remuxVideoSccNotWithWebM": "Scenarist closed captions (.scc) kräver MOV-containern, som inte kan innehålla VP9/AV1-videon i en .webm-fil. Ta bort .scc-filen eller konvertera den till ett annat undertextformat.", + "remuxVideoMpgMaxTwoCaptionTracks": "En .mpg-fil rymmer högst två closed caption-spår (CC1 och CC3) - ta bort undertextfiler så att en eller två återstår.", + "remuxVideoMccRequiresMpg": "MacCaption-undertexter (.mcc) bäddas in som CEA-608/708 closed captions i MPEG-2-videon, vilket kräver MPG-containern. Utdataformatet har automatiskt ändrats till .mpg.", + "remuxVideoMpgReencodeVideoX": "Closed captions i en .mpg-fil kräver MPEG-2-video, och videon är {0}. Koda om videon till MPEG-2? Det tar längre tid och sänker kvaliteten något.", + "remuxVideoFileHasNoAudioX": "\"{0}\" har inget ljudspår, så den kan inte användas som ljudkälla.", + "remuxVideoAddingClosedCaptions": "Lägger till closed captions...", + "remuxVideoSelectAudioTrack": "Välj ljudspår", + "remuxVideoSelectAudioTrackFor": "Välj ljudspår för {0}", + "remuxVideoSelectAudioTrackPrompt": "Filen '{0}' innehåller {1} ljudspår. Välj det ljudspår som ska remuxas:", + "remuxVideoVideoFile": "video", + "remuxVideoAudioFile": "ljud", + "remuxVideoAudioFiles": "Ljudfiler:", + "remuxVideoSubtitleFiles": "Undertextfiler (valfritt, mjuka undertexter):", + "remuxVideoSelectAudioTrackDotDotDot": "Välj ljudspår...", + "remuxVideoFilesX": "{0} filer", + "remuxVideoMixAudio": "Mixa ljud till ett spår", + "remuxVideoVolumePercent": "Volym %:", + "remuxVideoVolumeX": "Volym {0}%", + "remuxVideoFastStart": "Optimera för webbströmning (flytta index till början - långsammare)", "embedSubtitlesDotDotDot": "Lägg till/ta bort inbäddade undertexter...", "generateTimeCodes": "Generera tidskoder", "checkeredImage": "Rutig bild", - "saveVideoAsTitle": "Spara video som", "promptForFfmpegParamsAndGenerate": "Fråga efter ffmpeg-parametrar och generera", "cutVideoCutSegments": "Klipp segment", "cutVideoMergeSegments": "Slå ihop segment", "cutVideoSplitSegments": "Spara segment individuellt", - "cutVideoType": "Klipptyp", - "mpvRenderAuto": "Auto", - "mpvRenderNative": "Inbyggd", - "mpvRenderOpenGl": "OpenGL", - "mpvRenderSoftware": "Programvara (långsam)", "cutVideoAlsoCutSubtitle": "Klipp även undertexten", "cutVideoSubtitleFileGeneratedX": "Undertextfil genererad: {0}", + "cutVideoTransition": "Övergång mellan segment", + "cutVideoTransitionDurationSeconds": "Varaktighet (sekunder)", + "cutVideoFadeInSeconds": "Tona in från svart i början (sekunder)", + "cutVideoFadeOutSeconds": "Tona ut till svart i slutet (sekunder)", + "cutVideoPreviewTransition": "Förhandsvisa övergång", + "cutVideoPreviewTransitionTitle": "Förhandsvisning av övergång", + "cutVideoPreviewNeedsJoin": "Det finns ingen skarv att förhandsvisa - lägg till minst två segment att slå ihop, eller ett segment att klippa ut ur mitten.", + "cutVideoTransitionInfoX": "Varje övergång överlappar de delar den sammanfogar, så utdata blir {0} sekunder kortare per skarv. En klippt undertext tidsätts om för att matcha.", + "cutVideoTransitionFade": "Toning", + "cutVideoTransitionFadeBlack": "Toning via svart", + "cutVideoTransitionFadeWhite": "Toning via vitt", + "cutVideoTransitionFadeGrays": "Toning via grått", + "cutVideoTransitionDissolve": "Övertoning", + "cutVideoTransitionWipeLeft": "Torka vänster", + "cutVideoTransitionWipeRight": "Torka höger", + "cutVideoTransitionWipeUp": "Torka uppåt", + "cutVideoTransitionWipeDown": "Torka nedåt", + "cutVideoTransitionSlideLeft": "Glid vänster", + "cutVideoTransitionSlideRight": "Glid höger", + "cutVideoTransitionSlideUp": "Glid uppåt", + "cutVideoTransitionSlideDown": "Glid nedåt", + "cutVideoTransitionSmoothLeft": "Mjukt vänster", + "cutVideoTransitionSmoothRight": "Mjukt höger", + "cutVideoTransitionCircleOpen": "Cirkel öppna", + "cutVideoTransitionCircleClose": "Cirkel stäng", + "cutVideoTransitionRadial": "Radiell", + "cutVideoTransitionPixelize": "Pixla", + "cutVideoTransitionBlur": "Oskärpa", "importCurrentSubtitle": "Importera aktuell undertext", "addRemoveEmbeddedSubtitlesTitle": "Lägg till/ta bort inbäddade undertexter", "addRemoveEmbeddedSubtitlesMp4Title": "Lägg till/ta bort inbäddade undertexter (MP4)", "addCurrentSubtitle": "Lägg till aktuell undertext", - "embeddedTrackColumnNew": "Ny", "embeddedTrackNoSubtitlesFoundTitle": "Inga undertexter hittades", "embeddedTrackNoSubtitlesFoundMessage": "Den valda undertextfilen innehåller inga undertexter.", "embeddedTrackNoTracksTitle": "Inga spår tillagda", @@ -2447,7 +2729,7 @@ "embeddedTrackGeneratingVideoXY": "Genererar video... {0}% {1}", "embeddedTrackGeneratingVideo": "Genererar video...", "mp4FilesFilter": "MP4-filer", - "titleOrLanguage": "Titel/språk", + "embeddedTracksPickVideoHint": "Välj en videofil, eller släpp en här, för att se dess undertextspår.", "viewMatroskaTrackX": "Visa Matroska-spår - {0}", "resolutionSeparator": "x", "openFromUrlTitle": "Öppna videofil från URL", @@ -2457,9 +2739,7 @@ "openFromUrlDownloadAndOpen": "Ladda ner och öppna", "openFromUrlDownloadAndOpenDescription": "Spara videon lokalt och öppna den sedan.", "openFromUrlDownloadAndOpenNote": "Krävs för tal-till-text och vågformsspikar.", - "openFromUrlMissing": "Ange först en videowebbadress.", "openFromUrlDownloadingTitle": "Laddar ner video", - "openFromUrlSaveAs": "Spara video som", "openFromUrlDownloadSubtitles": "Ladda också ner undertexter", "openFromUrlDownloadVideo": "Ladda ner video", "openFromUrlIncludeAutoGeneratedSubtitles": "Inkludera automatgenererade undertexter (originalspråk)", @@ -2496,56 +2776,38 @@ "reEncodeGeneratingDone": "Generering klar", "reEncodeGeneratedFilesX": "Genererade filer ({0}):", "reEncodeFfmpegParameters": "ffmpeg-parametrar", + "analyzingVideoX": "Analyserar video... {0}% {1}", + "analyzingVideoXofY": "Analyserar video {0}/{1}... {2}% {3}", + "backgroundImageFileNotSelected": "Ingen bakgrundsbildfil vald", + "backgroundImageFileDoesNotExistX": "Bakgrundsbildfilen finns inte: {0}", "burnIn": { "title": "Generera video med inbrända undertexter", - "infoAssaOff": "Obs: Advanced SubStation Alpha-stilning stöds.", - "infoAssaOn": "Obs: Advanced SubStation Alpha-stilning kommer att användas :)", - "xGeneratedWithBurnedInSubsInX": "\"{0}\" genererad med inbrända undertexter på {1}.", - "timeRemainingMinutes": "Återstående tid: {0} minuter", - "timeRemainingOneMinute": "Återstående tid: En minut", - "timeRemainingSeconds": "Återstående tid: {0} sekunder", - "timeRemainingAFewSeconds": "Återstående tid: Några sekunder", - "timeRemainingMinutesAndSeconds": "Återstående tid: {0} minuter och {1} sekunder", - "timeRemainingOneMinuteAndSeconds": "Återstående tid: En minut och {0} sekunder", - "targetFileName": "Målfilnamn: {0}", "targetFileSize": "Målfilstorlek (kräver 2-pass-kodning)", "fileSizeMb": "Filstorlek i MB", - "passX": "Pass {0}", - "encoding": "Kodning", "bitRate": "Bithastighet", "totalBitRateX": "Total bithastighet: {0}", "sampleRate": "Samplingsfrekvens", "audio": "Ljud", - "stereo": "Stereo", "preset": "Förinställning", + "tune": "Finjustering (tune)", "pixelFormat": "Pixelformat", "crf": "CRF", - "tuneFor": "Justera för", - "alignRight": "Justera höger", - "getStartPosition": "Hämta startposition", - "getEndPosition": "Hämta slutposition", "useSource": "Använd källa", - "useSourceFolder": "Använd källmapp", - "useSourceResolution": "Använd källupplösning", - "outputSettings": "Utmatningsfil/-mapp...", "fontSizeFactor": "Typsnittsstorleksfaktor", "boxType": "Ruttyp", - "fixRightToLeft": "Åtgärda höger-till-vänster", - "cut": "Klipp", "fromTime": "Från tid", "toTime": "Till tid", "audioEncoding": "Ljudkodning", "outputProperties": "Utmatningsegenskaper...", "videoFileSize": "Videofilstorlek", "oneBox": "En ruta", - "boxPerLine": "Ruta per rad", "logoInfo": "Välj en PNG-bild och dra den för att placera den på videon.", + "noSubtitlesGenerateAnyway": "Det finns inga undertextrader att bränna in.\n\nGenerera videon utan undertexter?", + "noSubtitlesInXItemsGenerateAnyway": "{0} batchobjekt saknar undertextrader att bränna in.\n\nGenerera de videorna utan undertexter?", "matchSourceVideoSize": "Matcha källvideons storlek" }, "videoTransparent": { - "title": "Generera transparent video med undertexter", - "infoAssaOff": "Obs: Advanced SubStation Alpha-stilning stöds.", - "infoAssaOn": "Obs: Advanced SubStation Alpha-stilning kommer att användas :)" + "title": "Generera transparent video med undertexter" }, "audioToText": { "title": "Tal till text", @@ -2553,6 +2815,21 @@ "translateToEnglish": "Översätt till engelska", "transcribing": "Transkriberar...", "transcribingXOfY": "Transkriberar {0} av {1}...", + "linesTranscribedXOfYFailedZ": "{0} av {1} rader transkriberades - {2} misslyckades eller innehöll inget tal.\n\nMisslyckade rader behåller sin nuvarande text. Tillämpa de transkriberade raderna, eller försök igen med de misslyckade (du kan ändra motor eller inställningar först)?", + "linesTranscribedXOfYCancelled": "Transkriberingen avbröts efter {0} av {1} rader.\n\nTillämpa de transkriberade raderna? Övriga rader behåller sin nuvarande text.", + "noLinesTranscribed": "Ingen av de {0} raderna kunde transkriberas.\nKontrollera verktygsloggen för detaljer.", + "applyTranscribedLines": "Tillämpa transkriberade", + "retryFailedLines": "Försök igen med misslyckade", + "isolateSpeech": "Isolera tal (långsamt)", + "isolateSpeechHint": "Tar bort musik och ljudeffekter före transkriberingen. Ger färre missade rader och bättre tider för ljud med hög musik, men tar ungefär lika lång tid som själva ljudet med en GPU - och många gånger längre utan.", + "isolatingSpeech": "Isolerar tal...", + "isolateSpeechFailed": "Kunde inte isolera talet - transkriberar originalljudet i stället.", + "detectSpeakers": "Identifiera talare", + "detectSpeakersHint": "Inleder varje rad med talaren, som \"(speaker 0)\", med NVIDIAs Sortformer-diarisering (upp till 8 talare). Fungerar bäst med motorer som delar rader där talaren byts, som Parakeet och Cohere.", + "detectSpeakersNeedsNewerCrispAsr": "\"Identifiera talare\" kräver Crisp ASR v{0} eller nyare, men v{1} är installerad.\n\nUppdatera Crisp ASR (kugghjulsknappen bredvid motorn) eller stäng av \"Identifiera talare\".", + "xNeedsNewerCrispAsr": "{0} kräver Crisp ASR v{1} eller nyare, men v{2} är installerad.\n\nLadda ner och installera uppdateringen nu?", + "vad": "VAD", + "vadHint": "Röstaktivitetsdetektering: endast talet transkriberas, uppdelat där talaren pausar.\nAuto: Silero, och endast för de motorer som behöver det (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: alltid på, för alla Crisp ASR-motorer. FireRedVAD är mest exakt, Whisper-VAD ger färst och renast uppdelningar men är långsammast.\nIndex-Echo använder alltid Silero. --vad, --vad-model eller --chunk-seconds i de avancerade inställningarna har företräde.", "inputLanguage": "Inmatningsspråk", "advancedWhisperSettings": "Avancerade Whisper-inställningar", "downloadingSpeechToTextEngine": "Laddar ner tal-till-text-motor", @@ -2565,8 +2842,6 @@ "whisperXxlHighlightWord": "Markera ord", "selectModel": "Välj modell", "viewToolsLogFile": "Visa Whisper-loggfil", - "reDownloadX": "Ladda ner {0} igen", - "downloadX": "Ladda ned {0}", "updateXTitle": "Uppdatera {0}?", "updateXMessage": "En nyare version av {0} är tillgänglig.{1}{1}Ladda ner och installera uppdateringen nu?", "downloadingSpeechToTextModel": "Laddar ner tal-till-text-modell", @@ -2610,27 +2885,16 @@ "backendAndUpdateStatus": "Backend och uppdateringsstatus", "addCustomModelDotDotDot": "Lägg till anpassad modell...", "customModelHelp": "Du kan använda din egen modell: välj modellfilen (whisper.cpp ggml '.bin') eller modellmappen (faster-whisper-mapp med en 'model.bin' inuti). Den kopieras till modellmappen och läggs till i listan ovan.", - "cueBuilding": "Cue-byggnad (MLX Whisper)", - "cueRebuild": "Bygg om cues från ordtidsstämplar", - "cueMaxChars": "Max tecken per cue", - "cueMaxSeconds": "Max sekunder per cue", - "cueMaxCps": "Max tecken per sekund", - "vocabularyPrompt": "Vokabulärprompt (namn, platser, termer)", - "beamSize": "Beam-storlek", - "beamSizeNote": "0 avkodar snabbast. 5 ger bäst noggrannhet (som Faster Whisper) med ungefär 20-30 % mer tid. Värden över 5 hjälper sällan.", "addLanguageCodeToFileName": "Lägg till språkkod i filnamnet", "addLanguageCodeToFileNameHint": "Namnge genererade undertexter som \"video.sv.srt\" i stället för \"video.srt\"" }, "textToSpeech": { "title": "Text till tal", - "textToSpeechEngine": "Text-till-tal-motor", "reviewAudioSegments": "TTS - Granska ljudsegment", "reviewAudioSegmentsHistory": "TTS - Granska ljudhistorik", "stability": "Stabilitet", "similarity": "Likhet", "speakerBoost": "Talarboost", - "styleExaggeration": "Stilöverdrift", - "regenerateAudioSelectedLine": "Återskapa ljud för markerad rad", "generateSpeechFromText": "Generera tal från text", "testVoice": "Testa röst", "addAudioToVideoFile": "Lägg till ljud i videofil", @@ -2640,6 +2904,19 @@ "videoEncodingSettings": "TTS - Videokodningsinställningar", "elevenLabsSettings": "TTS - ElevenLabs-inställningar", "elevenLabsSettingsResetHint": "Återställ ElevenLabs-inställningar till standardvärden", + "provider": "Leverantör", + "openAiCompatibleSettings": "TTS - OpenAI-kompatibla inställningar", + "customServerUrl": "Anpassad server-URL", + "customServerUrlHint": "Fullständig talslutpunkt för en OpenAI-kompatibel server, används när leverantören är \"Anpassad\", t.ex. http://localhost:8880/v1/audio/speech", + "customModels": "Anpassade modeller", + "customModelsHint": "Kommaseparerade modellnamn som erbjuds när leverantören är \"Anpassad\"", + "customVoices": "Anpassade röster", + "customVoicesHint": "Kommaseparerade röstnamn, används av leverantören \"Anpassad\" och av OpenRouter-modeller som inte publicerar någon röstlista", + "instructions": "Instruktioner", + "instructionsHint": "Valfri talstil, t.ex. \"Tala med lugn, varm röst\". Skickas endast till modeller som stöder det (inte tts-1/tts-1-hd)", + "openAiSpeedHint": "Talhastighet från 0.25 till 4.0 (1.0 är normal). Alla modeller stöder det inte", + "outputFormat": "Utdataformat", + "outputFormatHint": "Ljudformat som begärs från servern. \"Auto\" begär MP3 och byter till PCM för modeller som endast returnerar PCM (t.ex. Gemini TTS)", "regenerateAudio": "Återskapa ljud", "autoContinuePlaying": "Fortsätt automatiskt att spela", "playLine": "Spela upp rad", @@ -2648,6 +2925,13 @@ "addingAudioToVideoFileDotDotDot": "Lägger till ljud i videofil...", "preparingMergeDotDotDot": "Förbereder sammanslagning...", "importVoiceDotDotDot": "Importera röst...", + "renameVoiceDotDotDot": "Byt namn på röst...", + "renameVoiceTitle": "Byt namn på röst", + "voiceXCouldNotBeRenamedX": "Rösten '{0}' kunde inte byta namn: {1}", + "deleteVoiceDotDotDot": "Ta bort röst...", + "deleteVoiceTitle": "Ta bort röst", + "deleteVoiceXQuestion": "Ta bort rösten '{0}'?\n\nReferensinspelningen och dess filer tas bort från disken.", + "voiceXCouldNotBeDeletedX": "Rösten '{0}' kunde inte tas bort: {1}", "voiceImportSuccessTitle": "Röst importerad", "voiceXImported": "Rösten '{0}' importerades", "voiceXCouldNotBeImported": "Rösten '{0}' kunde inte importeras - se loggen för detaljer", @@ -2657,6 +2941,49 @@ "dropAudioFileHereToImportVoice": "Släpp ljudfil här för att importera röst", "dropAudioFileHereHint": ".wav eller .mp3", "voiceCloneTranscriptTitle": "Ange transkription av ljudet (krävs för röstkloning)", + "voiceManagerTitle": "TTS - Rösthanterare", + "voiceManagerDotDotDot": "Rösthanterare...", + "voiceManagerMenuItem": "TTS-rösthanterare...", + "speakFromCurrentLineTitle": "Läs upp från aktuell rad", + "speakFromCurrentLineDotDotDot": "Läs upp från aktuell rad...", + "speakFromCurrentLineHint": "Läser upp raderna en efter en, med början på den aktuella raden. Tryck på Escape eller klicka på en annan rad för att stoppa.", + "stopSpeaking": "Sluta läsa upp", + "speakingLineX": "Läser upp rad {0}... (Escape för att stoppa)", + "playWithSpeechTitle": "Spela med tal", + "playWithSpeechDotDotDot": "Spela med tal...", + "playWithSpeechHint": "Spelar videon och läser upp varje rad när videon når den. Pausa och sök som vanligt; tryck på Escape för att stoppa.", + "lowerVideoVolumeWhileSpeaking": "Sänk videovolymen under uppläsning", + "pauseVideoWhenSpeechRunsLate": "Pausa videon när talet når in i nästa rad", + "waitingForSpeechLineX": "Genererar tal för rad {0}... (Escape för att stoppa)", + "voiceKindClone": "Klonad röst", + "voiceKindPreset": "Inbyggd", + "voiceKindModel": "Röstmodell", + "voiceKindOnline": "Online", + "transcript": "Transkription", + "transcriptRequiredHint": "Krävs - motorn läser den här transkriptionen av inspelningen (ref-text) vid kloning", + "transcriptOptionalHint": "Valfritt - en korrekt transkription av inspelningen förbättrar kloningen", + "saveTranscript": "Spara transkription", + "searchVoices": "Sök röster", + "loadingVoicesDotDotDot": "Läser in röster...", + "noVoicesForEngine": "Inga röster - importera en inspelning eller ladda ner ett röstpaket", + "noVoicesMatchFilter": "Inga röster matchar sökningen", + "copyVoiceTo": "Kopiera röst till", + "copyVoiceToDotDotDot": "Kopiera röst till motor...", + "copyingVoiceXToYDotDotDot": "Kopierar rösten '{0}' till {1}...", + "voiceXCopiedToY": "Rösten '{0}' kopierad till {1}", + "voiceXCouldNotBeCopiedToY": "Rösten '{0}' kunde inte kopieras till {1} - se loggen för detaljer", + "voiceXAlreadyExistsInYContinue": "En röst med namnet '{0}' finns redan i {1}.\n\nKopiera ändå?", + "openVoicesFolder": "Öppna röstmapp", + "downloadVoicePacksDotDotDot": "Ladda ner röstpaket...", + "downloadVoicePacksTitle": "TTS - Ladda ner röstpaket", + "voicePackIntro": "Röstpaket är samlingar av korta, rena inspelningar med transkriptioner, redo att klona från. Varje paket importeras till den valda motorn (röster som redan finns hoppas över) och innehåller en ATTRIBUTION.txt med licens och källor.", + "voicePackDetailsXVoicesYSizeZLicense": "{0} röster · {1} · {2}", + "installToEngine": "Installera i motor", + "downloadAndInstall": "Ladda ner och installera", + "selectAtLeastOneVoicePack": "Välj minst ett röstpaket", + "downloadingXDotDotDot": "Laddar ner {0}...", + "installingXDotDotDot": "Installerar {0}...", + "xVoicesInstalledYSkipped": "{0} röster installerade ({1} fanns redan)", "useSpeechToTextDotDotDot": "Använd tal-till-text...", "autoCastMenuItem": "Hitta röster i videon och klona...", "autoCastSpeakersTitle": "Röster hittade i videon", @@ -2675,7 +3002,7 @@ "cloneVoicePerLinePreparing": "Hämtar varje rads röst från videon...", "cloneVoicePerLineNeedsVideo": "För att klona varje rads röst krävs videon som undertexten hör till. Öppna videon och försök igen.", "cloneVoicePerLineNoClips": "Inget ljud kunde hämtas från videon, så det finns inget att klona från. Kontrollera att videon har ett ljudspår.", - "cloneVoicePerLineNeedsOriginalSubtitleX": "{0} kan bara klona en rad när den vet vad som sägs i videon vid den raden, vilket kommer från undertexten på originalspråket. Ingen originalundertext är inläst, så varje rad skulle läsas av den första importerade rösten i stället för av rösten i videon.\n\nÖppna originalundertexten (Arkiv > Öppna original...) bredvid översättningen och generera sedan igen.", + "cloneVoicePerLineTranscribeClipsXYZ": "{0} kan bara klona en rad när den vet vad som sägs i videon vid den raden. Det är inte känt för {1} av {2} rader - det kommer normalt från undertexten på originalspråket (Arkiv > Öppna original...).\n\nTranskribera de raderna från videon med tal till text nu?\n\nJa: välj motorn och språket som talas i videon, så transkriberas referensklippen innan talet genereras.\nNej: generera ändå - de raderna läses upp av en vanlig röst i stället för rösten i videon.", "voiceCloneConsentTitle": "Röstkloning - innan du börjar", "voiceCloneConsentHeader": "Du är på väg att klona en röst", "voiceCloneConsentIntro": "Kloning kopierar en verklig persons röst. Det omfattas av regler på de flesta håll, och inom EU av rättsliga skyldigheter som vilar på dig, inte på Subtitle Edit. Läs igenom detta en gång.", @@ -2692,10 +3019,29 @@ "advancedTtsSettings": "Avancerade TTS-inställningar", "advancedTtsAudioProcessing": "Ljudbehandling", "advancedTtsOutput": "Utdata", + "advancedTtsVoiceCloning": "Röstkloning", + "cleanCloneReferences": "Rensa referenser för röstkloning (Sidon)", + "cleanCloneReferencesDescription": "Tar bort musik, brus och efterklang från ljudet som en röst klonas från: klipp tagna från videon och inspelningar importerade i rösthanteraren. Använder talrestaureringsmodellen Sidon på audio.cpp (940 MB nedladdning). Den klonade rösten kopierar inte längre bakgrunden, men mycket tyst eller överlappande tal kan bli dovt.", + "cleaningCloneReferencesDotDotDot": "Rensar referenser för röstkloning...", + "downloadSidonTitle": "Ladda ner Sidon?", + "downloadSidonQuestionX": "Rensning av referenser för röstkloning kräver talrestaureringsmodellen Sidon ({0}).\n\nLadda ner den nu? Utan den används referenserna som de är.", "proAudioPostProcessing": "Professionell ljudefterbearbetning", "proAudioPostProcessingDescription": "Tillämpar EQ-värme, brusgrind, kompression, ljudstyrkenormalisering (-16 LUFS) och in-/uttoning på varje segment.", + "generatingSpeechSegmentXOfY": "Genererar tal: segment {0} av {1}", + "adjustingSpeedSegmentXOfY": "Justerar hastighet: segment {0} av {1}", + "mergingAudioSegmentXOfY": "Slår ihop ljud: segment {0} av {1}", + "postProcessingSegmentXOfY": "Efterbearbetning: segment {0} av {1}", "audioDucking": "Ljuddämpning", "audioDuckingDescription": "Minskar volymen för det ursprungliga videoljudet och blandar det med TTS-ljudet, så att det ursprungliga ljudspåret fortfarande är svagt hörbart.", + "removeOriginalSpeech": "Ta bort originaltal (långsamt)", + "removeOriginalSpeechDescription": "Behåller musiken och ljudeffekterna i originalvideon men tar bort dess tal, och mixar det nya talet över det. Tar ungefär lika lång tid som själva videon med en GPU, och många gånger längre utan. Med ljuddämpning påslagen gäller dess volym musiken och effekterna. Gäller endast när talet läggs till i videofilen.", + "removingOriginalSpeech": "Tar bort originaltal...", + "removeOriginalSpeechFailed": "Kunde inte ta bort originaltalet - talet lades till i videon utan det.", + "speechRemovalModel": "Modell", + "speechRemovalModelDescription": "Bästa kvalitet behåller mest av musiken och ljudeffekterna. Snabb är ungefär tre gånger snabbare, med lite mer av musiken förlorad.", + "speechRemovalBestQuality": "Bästa kvalitet (Mel-Band RoFormer)", + "speechRemovalFast": "Snabb (HTDemucs)", + "videoTruncatedWarning": "Bilden i den nya videofilen slutar efter {0}, men originalvideon är {1} lång - bilden fryser medan ljudet fortsätter.\n\nFilen behölls. Se error-log.txt i Subtitle Edits datamapp för ffmpeg-utdata.", "originalVolumePercent": "Ursprunglig volym %", "vadSilenceCompression": "VAD-tystnadskompression", "vadSilenceCompressionDescription": "Förkortar pauser mellan ord innan tempo ändras. Använder Voice Activity Detection för att endast komprimera tystnadsmellanrum medan tal lämnas orört. Detta är det föredragna första steget — det minskar varaktighet utan kvalitetsförlust.", @@ -2778,7 +3124,6 @@ "subtitleMergedLinesAppliedPlural": "Tillämpade {0} radsammanslagningar från text till tal" }, "shotChanges": { - "titleGenerateOrImport": "Generera/importera scenbyten", "generateShotChanges": "Generera scenbyten", "importShotChanges": "Importera scenbyten", "generateShotChangesWithFfmpeg": "Generera scenbyten med ffmpeg", @@ -2788,7 +3133,9 @@ "timeCodeFormatColon": "Tidskodsformat:", "shotChangesList": "Lista över scenbyten", "shotChangesClearQuestion": "Är du säker på att du vill rensa alla scenbyten?", - "deleteSelectedShotChangeQuestion": "Är du säker på att du vill ta bort det markerade scenbytet?" + "deleteSelectedShotChangeQuestion": "Är du säker på att du vill ta bort det markerade scenbytet?", + "shotChanges": "Scenbyten", + "exportShotChanges": "Exportera scenbyten" }, "videoOcr": { "title": "OCR av inbränd undertext", @@ -2798,10 +3145,6 @@ "bottomHalf": "Nedre halva", "fullFrame": "Hela bilden", "engine": "OCR-motor", - "language": "Språk", - "url": "URL", - "model": "Modell", - "apiKey": "API-nyckel", "scan": "Skanna", "framesPerSecond": "Bildrutor per sekund", "textBrightnessMinimum": "Minsta textljusstyrka (0=av)", @@ -2816,10 +3159,10 @@ "runningOcrXY": "Kör OCR... {0}/{1}", "noLinesFoundTitle": "Inga undertexter hittades", "noLinesFoundMessage": "Ingen text hittades i skanningsområdet - försök justera skanningsområdet, motorn eller minsta ljusstyrka.", + "ocrStoppedEarlyMessage": "OCR-motorn stoppade innan alla bildrutor lästs, så de rader som hittats hittills behålls och resten saknas.{0}{0}{1}", "linesFoundX": "{0} rader hittades", "refiningTimingXY": "Finjusterar tider... {0}/{1}", "fixOcrErrors": "Åtgärda OCR-fel", - "dictionary": "Ordbok", "editLineX": "Redigera rad {0}", "downloadDictionaryHint": "Ladda ner en rättstavningsordbok...", "framesPerSecondHint": "Hur många bildrutor per sekund som avsöks. 5 räcker för normala undertexter; högre fångar mycket korta rader och ger tätare gruppering, men kostar mer OCR-tid.", @@ -2836,14 +3179,64 @@ "testOcr": "Testa nuvarande bildruta", "testOcrRunning": "Testar OCR på nuvarande bildruta...", "testOcrResultX": "Testresultat: {0}", - "testOcrNoTextFound": "Test: ingen text hittades i skanningsområdet" + "testOcrNoTextFound": "Test: ingen text hittades i skanningsområdet", + "engineSettings": "Inställningar för OCR-motor", + "engineBuiltIn": "Inbyggd i operativsystemet", + "engineExternalServer": "Extern server (installeras och hanteras utanför Subtitle Edit)", + "engineCloudApi": "Moln-API (kräver en API-nyckel)", + "engineNothingToInstall": "Inget att installera", + "engineModelsMissing": "Motor installerad, modeller saknas", + "website": "Webbplats" + }, + "backgroundMusic": { + "title": "Generera bakgrundsmusik", + "generateBackgroundMusicDotDotDot": "Generera bakgrundsmusik...", + "preset": "Förinställning", + "prompt": "Prompt", + "tempoBpm": "Tempo (BPM)", + "generateSeconds": "Generera (sekunder)", + "seed": "Seed", + "randomSeed": "Slumpmässig", + "outputLength": "Utdatalängd", + "outputLengthVideoX": "{0} (videolängd - musiken loopas sömlöst)", + "musicVolumePercent": "Musikvolym (%)", + "removeExistingAudioTracks": "Ta bort befintliga ljudspår", + "originalAudioVolumePercent": "Originalljudets volym (%)", + "saveAudioDotDotDot": "Spara ljud...", + "addToVideoDotDotDot": "Lägg till i video...", + "engineInfo": "ACE-Step 1.5 Turbo via audio.cpp (MIT-licens) - körs lokalt", + "presetCooking": "Matlagning / bakning", + "presetTech": "Teknik / prylrecension", + "presetForest": "Skog / natur", + "presetRelaxingPiano": "Avslappnande piano", + "presetLofiVlog": "Lo-fi-vlogg", + "presetCorporate": "Företag / förklaringsvideo", + "loadingModel": "Läser in modell...", + "composing": "Komponerar...", + "generatingAudio": "Genererar ljud...", + "decodingAudio": "Avkodar ljud...", + "creatingLoop": "Skapar sömlös loop...", + "resultLoopXYZ": "Loop: {0} vid {1} BPM, skarvmatchning {2}%", + "resultNoLoopX": "Musik klar: {0}", + "addingMusicToVideo": "Lägger till musik i video...", + "downloadModelTitle": "Ladda ner musikmodell?", + "downloadModelQuestionX": "Musikgenerering kräver modellen ACE-Step 1.5 ({0}).\n\nLadda ner modell?", + "downloadingModel": "Laddar ner modellen ACE-Step 1.5...", + "saveAudioTitle": "Spara bakgrundsmusik", + "audioFileSavedX": "Ljudfil sparad: {0}", + "unableToGenerateMusic": "Kunde inte generera musik", + "unableToAddMusicToVideo": "Kunde inte lägga till musik i video", + "outputLengthTextToSpeech": "Följer det genererade talet - musiken loopas sömlöst och sänks medan någon pratar", + "addBackgroundMusic": "Lägg till bakgrundsmusik", + "addBackgroundMusicHint": "Generera musik lokalt med ACE-Step 1.5 och mixa in den under talet - den sänks medan någon pratar", + "generatingBackgroundMusicDotDotDot": "Genererar bakgrundsmusik...", + "mixingBackgroundMusicDotDotDot": "Mixar bakgrundsmusik..." }, "voices": "Röster", "presets": "Förinställningar", "talkerX": "Talare {0}", "baseModel": "Basmodell", "turboModel": "Turbomodell", - "ttsUpdateX": "Uppdatera {0}", "ttsEngineNotInstalled": "{0} är inte installerad", "ttsEngineUpdateAvailable": "{0} - uppdatering tillgänglig", "ttsEngineTooOldUpdateRequired": "{0} för gammal - uppdatering krävs", @@ -2866,19 +3259,25 @@ "cloneVoiceTo": "Klona röst till", "cloneVoiceNameTitle": "Namn på ny röst", "cloneVoiceExtractFailed": "Kunde inte extrahera ljud för den markerade raden.", + "lineXHasNoDuration": "Rad {0} har ingen varaktighet (sluttiden är inte efter starttiden), så det finns inget ljud att extrahera.", + "audioClipsSkippedLinesX": "Inget ljud kunde extraheras för dessa rader, så de hoppades över: {0}", "toggleShotChange": "Växla scenbyte", "resetWaveformZoomAndSpeed": "Återställ vågformszoom & hastighet", "showOriginalSubtitle": "Visa originalundertext", + "timelineGroupTracksBy": "Gruppera undertextspår efter", + "timelineShowThumbnails": "Visa videominiatyrer", + "showSpeechOnly": "Visa endast tal (långsamt att generera)", + "isolatingSpeechForWaveformX": "Isolerar tal för vågformen... {0}", + "isolatingSpeechForWaveformFailed": "Kunde inte isolera talet för vågformen - se verktygsloggen", + "speechOnlyWaveformReady": "Vågformen visar nu endast tal", "showOnlyWaveform": "Visa endast vågform", "showOnlySpectrogram": "Visa endast spektrogram", "showWaveformAndSpectrogram": "Visa vågform och spektrogram", - "spectrogramClassic": "Klassisk", "spectrogramClassicViridis": "Viridis", "spectrogramClassicPlasma": "Plasma", "spectrogramClassicInferno": "Inferno", "spectrogramClassicTurbo": "Turbo", "spectrogramNeon": "Neon", - "waveformDrawStyleClassic": "Klassisk", "waveformDrawStyleFancy": "Snygg", "setVideoPositionAndPauseAndSelectSubtitle": "Sätt videoposition, pausa och välj undertext", "setVideopositionAndPauseAndSelectSubtitleAndCenter": "Sätt videoposition, pausa, välj undertext och centrera", @@ -2888,7 +3287,6 @@ }, "sync": { "visualSync": "Visuell synk", - "sync": "Synk", "startScene": "Startscen", "endScene": "Slutscen", "playTwoSecondsAndBack": "Spela 2 sek & tillbaka", @@ -2904,19 +3302,18 @@ "adjustSelectedLinesAndForward": "Justera markerade rader och framåt", "toFrameRate": "Till bildfrekvens", "fromFrameRate": "Från bildfrekvens", + "videoXFrameRateY": "{0} - {1} fps", "adjustAllTimes": "Justera alla tider (visa tidigare/senare)", "showEarlier": "Visa tidigare", "showLater": "Visa senare", - "changeFrameRate": "Ändra bildfrekvens", "setSyncPoint": "Sätt synkpunkt", "setSyncPointViaVideo": "Ange synkpunkt via video...", "syncPointTimeCode": "Synkpunktens tidskod", "syncPoints": "Synkpunkter", "pointSync": "Punktsynk", "pointSyncViaOther": "Punktsynk via annan undertext", - "adjustmentX": "Justering: {0}", - "totalAdjustmentX": "Total justering: {0}", - "syncPointCandidateInfo": "Rader som börjar efter {0}+ sekunders tystnad markeras - de blir ofta pålitliga synkpunkter", + "syncPointCandidateAfterInfo": "Rader som följs av {0}+ sekunders tystnad markeras - de är ofta pålitliga synkpunkter", + "gapAfter": "Mellanrum efter", "adjustAllShortcuts": "Tangentbordsgenvägar:\r\n\r\n• Skift + Vänster/Höger: Flytta 10 ms\r\n• Ctrl + Vänster/Höger: Flytta 100 ms\r\n• Alt + Vänster/Höger: Flytta 500 ms", "offsetInSeconds": "Förskjutning i sekunder", "speedFactor": "Hastighetsfaktor", @@ -2936,6 +3333,7 @@ "lineMerge": "Radsammanslagning", "delayInSecondsBetweenRequests": "Fördröjning i sekunder mellan förfrågningar", "maxBytesPerRequest": "Max byte per förfrågan", + "keepMusicLinesUntranslated": "Översätt inte rader inom musiksymboler (♪ ... ♪)", "promptText": "Prompttext", "resetPromptToDefault": "Återställ prompt till standard", "translateEachLineSeparately": "Översätt varje rad separat", @@ -2949,11 +3347,10 @@ "readyToTranslate": "Klar att översätta", "translating": "Översätter...", "translationComplete": "Översättning klar", + "translateInPlaceNoOriginal": "Översätt på plats (skapa inte original)", "translationCancelled": "Översättningen avbröts", "swapLanguages": "Byt käll- och målspråk", "xIsAlreadyDownloadedReDownload": "{0} har redan laddats ned.\r\nLadda ner igen?", - "advancedDotDotDot": "Avancerat...", - "advancedSettings": "Avancerade inställningar", "advancedSettingsSubtitle": "Batch-, kontext- och samplingsalternativ för den avancerade llama.cpp-motorn", "context": "Kontext", "synopsis": "Synopsis", @@ -2977,6 +3374,7 @@ "useOnlyExtraServerParametersHint": "Starta llama-server med parametrarna ovan i stället för Subtitle Edits egen inställning - endast modell, värd och port anges fortfarande", "serverRunningAtX": "Servern körs på {0}", "customPromptHint": "Egna instruktioner ({0} = källspråk, {1} = målspråk); tomt = inbyggd prompt", + "editTranslationHint": "Klicka på översättningen i den markerade raden för att redigera den (Enter sparar, Escape avbryter)", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp kräver att llama-server-motorn och en översättningsmodell laddas ner. Ladda ner nu?", "llamaCppDownloadEnginePrompt": "llama.cpp kräver att llama-server-motorn laddas ner. Ladda ner nu?", "llamaCppDownloadModelPrompt": "llama.cpp kräver att den valda översättningsmodellen laddas ner. Ladda ner nu?" @@ -2989,7 +3387,6 @@ "dialogStyleDashBothLinesWithSpace": "Bindestreck båda raderna med mellanslag", "dialogStyleDashBothLinesWithoutSpace": "Bindestreck båda raderna utan mellanslag", "continuationStyle": "Fortsättningsstil", - "continuationStyleNone": "Ingen", "continuationStyleNoneTrailingDots": "Ingen, punkter för pauser (endast efterföljande)", "continuationStyleNoneLeadingTrailingDots": "Ingen, punkter för pauser", "continuationStyleNoneTrailingEllipsis": "Ingen, ellips för pauser (endast efterföljande)", @@ -3000,7 +3397,6 @@ "continuationStyleLeadingTrailingEllipsis": "Ellips", "continuationStyleLeadingTrailingDash": "Bindestreck", "continuationStyleLeadingTrailingDashDots": "Bindestreck, men punkter för pauser", - "continuationStyleCustom": "Anpassad", "cpsLineLengthStyle": "Cps/radlängd", "cpsLineLengthStyleCalcAll": "Räkna alla tecken", "cpsLineLengthStyleCalcNoSpaceCpsOnly": "Räkna alla utom mellanslag, endast cps", @@ -3013,14 +3409,6 @@ "cpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly": "Inga mellanslag eller skiljetecken, endast CPS", "cpsLineLengthStyleCalcIgnoreArabicDiacritics": "Ignorera arabiska diakritiska tecken", "cpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "Ignorera arabiska diakritiska tecken, inga mellanslag", - "timeCodeModeHhMmSsMs": "HH:MM:SS:MS", - "timeCodeModeHhMmSsFf": "HH:MM:SS:FF", - "splitBehaviorPrevious": "Lägg till mellanrum till vänster om delningspunkt (fokus höger)", - "splitBehaviorHalf": "Lägg till mellanrum i mitten av delningspunkt (fokus vänster)", - "splitBehaviorNext": "Lägg till mellanrum till höger om delningspunkt (fokus vänster)", - "subtitleListActionNothing": "Inget", - "subtitleListActionVideoGoToPositionAndPause": "Gå till videoposition och pausa", - "subtitleListActionVideoGoToPositionAndPlay": "Gå till videoposition och spela", "subtitleGridCenterText": "Centrera text i undertextlistan", "minGapCalculateDotDotDot": "Beräkna minsta mellanrum utifrån en bildfrekvens...", "minGapCalculateTitle": "Minsta mellanrum mellan undertexter i ms", @@ -3052,8 +3440,14 @@ "checkForUpdatesChannelStableAndBeta": "Stabila och beta-versioner", "assaAutoSetResolution": "ASSA: ange upplösning (PlayResX/PlayResY) från videon när en video öppnas", "assaAutoSetResolutionPrompt": "ASSA: fråga innan upplösningen ändras för att matcha videon (annars skalas den om automatiskt)", + "videoControls": "Videokontroller", + "videoControlsEdit": "Redigera videokontroller...", + "videoControlsPositionText": "Position-/varaktighetstext", + "videoControlsVideoFileName": "Videofilnamn", + "videoControlsPlayerName": "Videospelarens namn", "mergeKeepEndTime": "Slå ihop rader: behåll sluttid (tillåt överlapp med nästa undertext)", "mergeKeepEndTimeOnlyAssa": "Slå ihop rader: behåll sluttid endast för \"Advanced Sub Station Alpha\"", + "mergeAutoBreak": "Slå ihop rader: bryt sammanslagen text automatiskt (av behåller radernas egna radbrytningar)", "defaultSaveLocation": "Standardplats för sparande", "defaultSaveLocationSourceFileFolder": "Undertext-/videofilens mapp", "defaultSaveLocationLastUsedFolder": "Senast använda mappen", @@ -3061,18 +3455,10 @@ "defaultSaveLocationSubtitleFileFolder": "Undertextfilens mapp", "defaultSaveLocationCustomFolder": "Egen mapp", "subtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "Gå till videoposition, spela aktuell och pausa", - "subtitleListActionEditText": "Gå till redigera textruta", "subtitleListActionVideoGoToPositionMinus1SecAndPause": "Gå till videoposition - 1 s och pausa", "subtitleListActionVideoGoToPositionMinusHalfSecAndPause": "Gå till videoposition - 0,5 s och pausa", "subtitleListActionVideoGoToPositionMinus1SecAndPlay": "Gå till videoposition - 1 s och spela", - "subtitleListActionEditTextAndPause": "Gå till redigera textruta och pausa vid videoposition", - "autoBackupEveryMinute": "Varje minut", - "autoBackupEveryXthMinute": "Varje {0}:e minut", - "profiles": "Profiler", - "autoBackupDeleteAfterXMonths": "Ta bort auto-säkerhetskopior efter {0} månader", "searchSettingsDotDotDot": "Sök efter inställningar...", - "syntaxColoring": "Syntaxfärgning", - "waveformSpectrogram": "Vågform/spektrogram", "network": "Nätverk", "fileTypeAssociations": "Filtypsassociationer", "textBoxColorTags": "Färgtaggar (HTML/ASSA) i undertextrutan", @@ -3100,10 +3486,9 @@ "darkThemeForegroundColor": "Mörkt temas förgrundsfärg", "darkThemeBackgroundColor": "Mörkt temas bakgrundsfärg", "showGridLines": "Visa rutnätslinjer", - "resetSettings": "Återställ inställningar?", - "resetSettingsDetail": "Detta återställer alla inställningar till deras standardvärden.\n\nFortsätt?", "showHorizontalLineAboveToolbar": "Visa horisontell linje ovanför verktygsfält", "bookmarkColor": "Bokmärkesfärg", + "spellCheckHighlightColor": "Markeringsfärg för rättstavning", "singleLineMaxLength": "Enkelradsmaxlängd", "optimalCharsPerSec": "Optimalt antal tecken/sek", "maxCharsPerSec": "Max tecken/sek", @@ -3116,13 +3501,21 @@ "unbreakSubtitlesShortThan": "Slå ihop undertexter kortare än", "newEmptyDefaultMs": "Standard varaktighet för ny undertext (ms)", "timeCodeUpDownStepMs": "Tid upp/ned-steg (ms)", + "moveSelectedLinesStepMs": "Steg för kortkommandot flytta markerade rader (ms)", + "moveStartEndStepMs": "Steg för kortkommandot flytta start/slut (ms)", + "moveLinesShortenNeighbor": "Flytta rader: förkorta föregående/nästa rad i stället för att överlappa den", "promptBeforeDelete": "Fråga före borttagning", "rememberPositionAndSize": "Kom ihåg fönsterposition och storlek", + "titleBarFullFileName": "Visa fullständig filsökväg i titelraden", + "showRecentFiles": "Visa senaste filer (för att öppna igen)", "openLastFileOnStart": "Öppna senast använda fil vid start", "autoSave": "Spara automatiskt (spara den öppna filen medan du redigerar)", "autoBackupOn": "Auto-säkerhetskopia", "autoBackupIntervalMinutes": "Auto-säkerhetskopieringsintervall (minuter)", "autoBackupDeleteAfterDays": "Auto-säkerhetskopia bevarandetid (dagar)", + "settingsBackupOn": "Säkerhetskopiera inställningar automatiskt", + "settingsBackupIntervalDays": "Intervall för säkerhetskopiering av inställningar (dagar, 0 = varje start)", + "settingsBackupMaxCount": "Antal säkerhetskopior av inställningar att behålla", "autoConvertToUtf8": "Auto-konvertera kodning till UTF-8 vid öppning", "autoTrimWhiteSpace": "Auto-trimma blanksteg", "defaultEncoding": "Standardkodning", @@ -3137,22 +3530,13 @@ "colorGapTooShort": "Färglägg om mellanrum är för kort", "errorBackgroundColor": "Felbakgrundsfärg", "waveformDrawGridLines": "Rita rutnätslinjer", - "waveformCenterVideoPosition": "Centrera videoposition", + "waveformUseSkiaRenderer": "Använd experimentell snabb renderare", "waveformCenterVideoPositionAlsoWhenPaused": "Centrera videoposition även vid paus", + "waveformSelectCurrentSubtitleWhilePaused": "Välj aktuell undertext även när pausad", + "waveformRememberZoom": "Kom ihåg zoom (horisontell och vertikal)", "waveformShowToolbar": "Visa verktygsfält", "waveformShowToolbarEdit": "Redigera verktygsfält...", "waveformSpectrogramCombinedWaveformHeight": "Vågform/spektrogram kombinerade, vågformshöjd %", - "showWaveformToolbarPlay": "Verktygsfält: visa spela-knapp", - "showWaveformToolbarRepeat": "Verktygsfält: visa upprepa-knapp", - "showWaveformToolbarRemoveBlankLines": "Verktygsfält: visa knapp för ta bort tomma rader", - "showWaveformToolbarNew": "Verktygsfält: visa knapp för ny undertext", - "showWaveformToolbarSetStart": "Verktygsfält: visa sätt start-knapp", - "showWaveformToolbarSetEnd": "Verktygsfält: visa sätt slut-knapp", - "showWaveformToolbarStartAndOffsetTheRest": "Verktygsfält: visa knapp för sätt start och förskjut resten", - "showWaveformToolbarHorizontalZoom": "Verktygsfält: visa horisontellt zoomreglage", - "showWaveformToolbarVerticalZoom": "Verktygsfält: visa vertikalt zoomreglage", - "showWaveformToolbarVideoPositionSlider": "Verktygsfält: visa videopositionsreglage", - "showWaveformToolbarPlaybackSpeed": "Verktygsfält: visa uppspelningshastighet", "waveformFocusTextboxAfterInsertNew": "Fokusera textruta efter infogning", "waveformInvertMouseWheel": "Invertera mushjul", "waveformSnapToShotChanges": "Fäst till scenbyten", @@ -3168,18 +3552,18 @@ "fixCommonErrorsSkipStep1": "Åtgärda vanliga fel: hoppa över steg 1 (välj åtgärder)", "showPluginsMenu": "Visa menyn Plugins", "proxyAddress": "Proxyadress", - "username": "Användarnamn", "password": "Lösenord", "defaultFormat": "Standardformat", "defaultSaveAsFormat": "Standard \"Spara som\"-format", "favoriteSubtitleFormats": "Favoritundertextformat", - "showStopButton": "Visa stoppknapp", - "showFullscreenButton": "Visa helskärmsknapp", "fullscreenHideControls": "Dölj videokontroller i helskärm", + "showSecondarySubtitleDialog": "Visa stildialog när en sekundär undertextfil öppnas", + "rememberSecondarySubtitleFile": "Kom ihåg sekundär undertextfil", "autoOpenVideoFile": "Öppna videofil automatiskt vid öppning av undertext", "downloadMpv": "Ladda ner mpv", "downloadVlc": "Ladda ner VLC", "allowSingleLetterShortcutsInTextbox": "Tillåt kortkommandon med enstaka bokstav i textruta", + "allowTextNavigationShortcutsInTextbox": "Tillåt kortkommandon på textnavigeringstangenter (Ctrl+Vänster/Höger, Home/End) i textrutan", "spellCheckEnglishTreatInApostropheAsIng": "Stavningskontroll: Behandla ord som slutar på 'in'' som 'ing' (endast på engelska)", "goToLineNumberSetsVideoPosition": "Gå-till-radnummer sätter också videoposition", "adjustAllTimesRememberLineSelectionChoice": "Justera alla tider, kom ihåg val av radmarkering", @@ -3191,6 +3575,7 @@ "showAssaLayer": "Visa ASSA-lagerruta", "waveformCursorColor": "Vågformskursorns/huvudets färg", "waveformShotChangeColor": "Vågformsscenbytets färg", + "waveformGridColor": "Rutnätsfärg för vågform", "waveformParagraphLeftColor": "Vågform vänsterkantsfärg", "waveformParagraphRightColor": "Vågform högerkantsfärg", "waveformFancyHighColor": "Vågform snygg hög färg", @@ -3218,26 +3603,30 @@ "resetSyntaxColoring": "Återställ syntaxfärgning", "resetWaveform": "Återställ vågform", "resetRules": "Återställ regler", - "useFrameMode": "Använd bildläge (hh.mm.ss.ff)", + "timeCodeMode": "Tidskodsläge", + "timeCodeModeTime": "Tid (hh:mm:ss,zzz)", + "timeCodeModeFrames": "Bildrutor (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "Bildrutenummer", + "frameModeSnapToVideoFrames": "Lagra tider på videobildrutor (inte bildrutor inom varje sekund)", "textBoxLimitNewLines": "Begränsa antal rader i undertextrutan", - "mpvVideoOutput": "Videoutmatning (mpv)", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - Programvarurendering (långsam)", + "mpvMetalRendering": "libmpv - Metal (experimentell, kräver omstart)", "mpvWidRendering": "libmpv - Inbyggd Window ID-rendering (snabbare på Windows/Linux)", "waveFormsAndSpectrogramFoldersContainsX": "Mapparna \"Vågformer\" och \"Spektrogram\" innehåller {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "Ta bort filer i \"Vågformer\" och \"Spektrogram\"?", "waveformGenerateSpectrogram": "Generera spektrogram", "waveformSpectrogramMode": "Spektrogramläge", - "waveformCenterOnSingleClick": "Centrera vid enkelklick", - "waveformSingleClickSelectsSubtitle": "Välj undertext vid enkelklick", "waveformRightClickSelectsSubtitle": "Välj undertext vid högerklick", - "waveformPauseOnSingleClick": "Pausa vid enkelklick", "waveformDrawStyle": "Vågformens ritstil", "waveformExtractAudioFormat": "Format för extraherat ljud", "waveformExtractAudioSampleRate": "Samplingsfrekvens för extraherat ljud", "waveformExtractAudioSampleRateOriginal": "Original (behåll källan)", "waveformExtractAudioBitRate": "Bithastighet för extraherat ljud (MP3/M4A)", + "ffmpegUseCenterChannelOnly": "Använd endast främre mittkanalen för 5.1-ljud (FFmpeg)", "vlcWidRendering": "libVLC - Inbyggd Window ID-rendering", + "ffmpegSoftwareRendering": "FFmpeg", + "downloadFfmpegLibs": "Ladda ner FFmpeg-bibliotek (för FFmpeg-videospelaren)", "subtitleGridEnterKeyAction": "Åtgärd för Enter-tangent i undertextlista", "subtitleSingleClickAction": "Åtgärd för enkelklick i undertextlista", "subtitleDoubleClickAction": "Åtgärd för dubbelklick i undertextlista", @@ -3254,6 +3643,7 @@ "subtitleGridFormattingShowFormatting": "Visa formatering", "subtitleGridFormattingShowTags": "Visa taggar", "subtitleGridFormattingHideTags": "Dölj taggar", + "subtitleGridFormattingShowFormattingKeepTags": "Visa formatering, behåll icke-visuella taggar", "waveformParagraphBackgroundColor": "Vågform undertextbakgrundsfärg", "waveformParagraphSelectedBackgroundColor": "Vågform markerad undertextbakgrundsfärg", "waveformAllowOverlap": "Tillåt överlapp (vid flytt/storleksändring)", @@ -3263,8 +3653,6 @@ "saveAsBehaviorUseVideoFileName": "Använd videofilnamn", "saveAsBehaviorUseSubtitleFileName": "Använd undertextfilnamn", "saveAsAppendLanguageCodeTwoLetter": "Två bokstäver", - "saveAsAppendLanguageCodeThreeLetter": "Tre bokstäver", - "saveAsAppendLanguageCodeThreeLetterBibliographic": "Tre bokstäver (ISO 639-2/B)", "saveAsAppendLanguageCodeLanguageName": "Språknamn", "splitOddLineActionWeightTop": "Vikt övre", "splitOddLineActionWeightBottom": "Vikt nedre", @@ -3273,6 +3661,7 @@ "speechToTextSelectedLinesPromptFirstTimeOnly": "Tal till text: markerade rader, fråga efter språk/motor endast första gången", "multipleReplaceShowDotDotDotButtons": "Multipel ersättning: visa snabbmenysknappar", "gridFocusTextboxAfterInsertNew": "Lista: fokusera textruta efter infogning av ny undertext", + "undoRedoGoToChangedLine": "Ångra/gör om: gå till ändrad rad (och videoposition)", "musicSymbol": "Musiksymbol", "musicSymbolsToReplace": "Musiksymboler att ersätta (separerade med komma)", "textToSpeechPromptMergeContinuationLines": "Text till tal: fråga om att slå samman fortsättningsrader", @@ -3281,8 +3670,7 @@ "useFocusedButtonBackgroundColor": "Använd bakgrundsfärg för fokuserad knapp", "focusedButtonBackgroundColor": "Bakgrundsfärg för fokuserad knapp", "forceCrLfOnSave": "Tvinga CR+LF vid sparande (textundertextfiler)", - "showWaveformToolbarPlayNext": "Verktygsfält: visa spela nästa-knapp", - "showWaveformToolbarPlaySelection": "Verktygsfält: visa spela markering-knapp", + "linuxClipboardUseExternalTool": "Kopiera text via xclip/wl-copy (behåller tecken med accenter)", "showFormatLimitWarning": "Varna vid sparande när rader överskrider formatets gränser (t.ex. SCC 32 tecken/rad)", "textBoxButtonShowAutoBreak": "Textruta: visa auto-bryt-knapp", "textBoxButtonShowUnbreak": "Textruta: visa slå ihop-knapp", @@ -3294,12 +3682,18 @@ "waveformDoubleClickAction": "Åtgärd för dubbelklick på vågform (efter enkelklicksåtgärd)", "allSettings": "Alla inställningar", "uiScale": "UI-skala (%)", + "fontScale": "Typsnittsskala (%)", + "textSelectionOpacity": "Opacitet för textmarkering (%)", "waveformToolbarItems": "Vågformens verktygsfältsobjekt", "matchIconColorToDarkTheme": "Matcha ikonfärg till mörkt temas förgrundsfärg", "subtitlePreviewProperties": "Egenskaper för undertextsförhandsvisning", "usePositionFromSubtitleFile": "Använd position från undertextfilen (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "Marginalen är en del av undertextområdet", "textJustify": "Justera rader", + "deinterlace": "Avflätning av video", + "deinterlaceOff": "Av", + "deinterlaceAuto": "Auto (endast flätade bildrutor)", + "deinterlaceAlways": "Alltid", "pixelWidthInfo": "Gröna linjer = max-bredd-gräns | Rött område = text överstiger gräns", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3309,6 +3703,15 @@ "waveformSaveAsCustomTheme": "Spara som anpassat tema...", "waveformLoadThemeDotDotDot": "Läs in tema...", "waveformExportThemeDotDotDot": "Exportera tema...", + "waveformSaveCustomThemeTitle": "Spara anpassat tema", + "waveformThemeFileType": "Subtitle Edit vågformstema", + "waveformThemeHighContrast": "Hög kontrast", + "waveformThemeOceanBlue": "Havsblå", + "waveformThemeWarmSunset": "Varm solnedgång", + "waveformThemeForest": "Skog", + "waveformThemeMidnightPurple": "Midnattslila", + "waveformThemeRetroAmber": "Retro bärnsten", + "waveformThemeIce": "Is", "subtitleGridTextSingleLineSeparator": "Enkelradsavgränsare (t.ex.
)", "subtitleGridTextDisplay": "Anpassning av undertext i rutnät", "subtitleGridTextDisplayClip": "Klipp (en rad)", @@ -3325,107 +3728,53 @@ "webVttUseXTimestampMap": "WebVTT: använd X-TIMESTAMP-MAP (förskjut tidskoder vid inläsning)", "waveformAutoGenerate": "Generera vågform automatiskt när en video öppnas", "gridGoToSubtitleAndPlayAndFocusTextBox": "Gå till undertext och spela och fokusera textruta", - "ocrGuessUnknownWords": "OCR: försök gissa okända ord" + "ocrGuessUnknownWords": "OCR: försök gissa okända ord", + "spellCheckRememberUseAlwaysList": "Rättstavning: kom ihåg listan \"Använd alltid\"", + "fixShortDisplayTimesAllowMoveStartTime": "Åtgärda vanliga fel: åtgärda korta visningstider får flytta starttid" }, "shortcuts": { - "title": "Kortkommandon", "searchShortcuts": "Sök kortkommandon...", - "filter": "Filter", - "categoryGeneral": "Allmänt", "categorySubtitleGridAndTextBox": "Undertextlistvy & textruta", "categorySubtitleGrid": "Undertextlistvy", - "categoryWaveform": "Vågform", - "generalSetupLikeSe4": "Ställ in som Subtitle Edit 4 (tema, genvägar, ersätt regler)", - "generalMergeSelectedLines": "Slå ihop markerade rader", - "generalMergeWithPrevious": "Slå ihop med föregående", - "generalMergeWithNext": "Slå ihop med nästa", - "generalMergeWithPreviousAndUnbreak": "Slå ihop med föregående och slå ihop", - "generalMergeWithNextAndUnbreak": "Slå ihop med nästa och slå ihop", - "generalMergeWithPreviousAndAutoBreak": "Slå ihop med föregående och bryt automatiskt", - "generalMergeWithNextAndAutoBreak": "Slå ihop med nästa och bryt automatiskt", - "generalMergeSelectedLinesAndAutoBreak": "Slå ihop markerade rader och bryt automatiskt", "generalMergeSelectedLinesAndUnbreak": "Slå ihop markerade rader och slå ihop", "generalMergeSelectedLinesAndUnbreakCjk": "Slå ihop markerade rader och slå ihop CJK", "generalUnbreakNoSpaceCjk": "Slå ihop utan mellanslag (CJK)", - "generalMergeSelectedLinesOnlyFirstText": "Slå ihop markerade rader endast första texten", + "generalToggleBreak": "Växla radbrytning/ta bort radbrytning", "generalMergeSelectedLinesBilingual": "Slå ihop markerade rader tvåspråkig", - "generalMergeWithPreviousBilingual": "Slå ihop med föregående tvåspråkig", - "generalMergeWithNextBilingual": "Slå ihop med nästa tvåspråkig", - "generalMergeOriginalAndTranslation": "Slå ihop original och översättning", "generalToggleTranslationMode": "Växla översättningsläge", - "generalSwitchOriginalAndTranslation": "Växla original och översättning", - "generalSwitchOriginalAndTranslationTextBoxes": "Växla original- och översättningstextrutor", "generalToggleTranslationAndOriginalInPreviews": "Växla mellan översättning och original i video-/ljudförhandsvisning", "generalChooseLayout": "Välj layout", - "generalLayoutChooseX": "Layout {0}", - "generalPlayFirstSelected": "Spela första markerad", - "generalGoToFirstSelectedLine": "Gå till första markerad rad", - "generalGoToNextEmptyLine": "Gå till nästa tomma rad", "generalGoToNextSubtitle": "Gå till nästa undertext", "generalGoToNextSubtitlePlayTranslate": "Gå till nästa undertext (spela översätt)", "generalGoToNextSubtitleCursorAtEnd": "Gå till nästa undertext (markör i slutet)", "generalGoToPrevSubtitle": "Gå till föregående undertext", "generalGoToPrevSubtitlePlayTranslate": "Gå till föregående undertext (spela översätt)", - "generalGoToStartOfCurrentSubtitle": "Gå till början av aktuell undertext", - "generalGoToEndOfCurrentSubtitle": "Gå till slutet av aktuell undertext", - "generalGoToPreviousSubtitleAndFocusVideo": "Gå till föregående undertext och fokusera video", - "generalGoToNextSubtitleAndFocusVideo": "Gå till nästa undertext och fokusera video", - "generalGoToPrevSubtitleAndPlay": "Gå till föregående undertext och spela", - "generalGoToNextSubtitleAndPlay": "Gå till nästa undertext och spela", - "generalGoToPreviousSubtitleAndFocusWaveform": "Gå till föregående undertext och fokusera vågform", - "generalGoToNextSubtitleAndFocusWaveform": "Gå till nästa undertext och fokusera vågform", - "generalGoToLineNumber": "Gå till radnummer", "generalGoToFirstLine": "Gå till första raden", "generalGoToLastLine": "Gå till sista raden", "alsoSetVideoPosition": "Ange även videoposition", "generalGoToVideoPosition": "Gå till videoposition", "generalToggleItalic": "Växla kursiv", "generalToggleBold": "Växla fet", - "generalToggleBookmarks": "Växla bokmärken", - "generalFocusTextBox": "Fokusera textruta", - "generalToggleBookmarksWithText": "Växla bokmärken med text", - "generalEditBookmarks": "Redigera bokmärken", - "fileNew": "Ny", "generalToggleUnderline": "Växla understrykning", + "generalToggleBox": "Växla ruta (EBU STL)", "fileOpen": "Öppna", "fileOpenKeepVideo": "Öppna (behåll video)", "fileSave": "Spara", "fileSaveAs": "Spara som", - "fileSaveAll": "Spara alla", "fileSaveOriginal": "Spara original", - "fileSaveOriginalAs": "Spara original som", - "fileOpenOriginalSubtitle": "Öppna originalundertext", - "fileCloseOriginalSubtitle": "Stäng originalundertext", - "fileTranslatedSubtitle": "Översatt undertext", "fileCompare": "Jämför", "fileStatistics": "Statistik", "fileImportPlainText": "Importera vanlig text", - "fileImportBluRaySupForOcr": "Importera Blu-ray SUP för OCR", - "fileImportBluRaySupForEdit": "Importera Blu-ray SUP för redigering", - "fileImportTimeCodes": "Importera tidskoder", "fileExportEbuStl": "Exportera EBU STL", "fileExportPac": "Exportera PAC", - "fileExportEdlClipName": "Exportera EDL-klippnamn", - "fileExportPlainText": "Exportera vanlig text", - "fileExportCustomTextFormat1": "Exportera anpassat textformat 1", - "fileExportCustomTextFormat2": "Exportera anpassat textformat 2", - "fileExportCustomTextFormat3": "Exportera anpassat textformat 3", "fileExit": "Avsluta", "openSeDataFolder": "Öppna Subtitle Edit-mapp", - "editFind": "Sök", - "editFindNext": "Sök nästa", "editFindPrevious": "Sök föregående", - "editReplace": "Ersätt", - "editMultipleReplace": "Multipel ersättning", "fillSelectedLinesWithClipboard": "Fyll markerade rader med urklippstext", - "editModifySelection": "Ändra markering", - "listSelectAll": "Markera alla", - "listSelectFirst": "Markera första", - "listSelectLast": "Markera sista", "listInverseSelection": "Invertera markering", "listDeleteSelection": "Ta bort markering", + "deleteSelectionEverywhere": "Ta bort markering (överallt)", "rippleDeleteSelection": "Ripple-ta bort markering", - "settings": "Inställningar", "assigned": "Tilldelad", "unassigned": "Otilldelad", "pressedKeyX": "Tryckt tangent: {0}", @@ -3433,6 +3782,7 @@ "detectKey": "Identifiera tangent", "control": "Ctrl", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Skift", "controlMac": "⌃", @@ -3443,11 +3793,14 @@ "resetShortcutsDetail": "Vill du återställa alla kortkommandon till standardvärden?", "togglePlayPause": "Växla spela/pausa", "toggleLockTimeCodes": "Växla lås tidskoder", + "toggleTimeCodeMode": "Växla tidskodsläge (tid/bildrutor/bildrutenummer)", + "toggleScreenPrivacy": "Växla skärmsekretess (dölj filnamn, sedan även texter)", + "screenPrivacyFileNamesHidden": "Skärmsekretess: filnamn dolda", + "screenPrivacyFileNamesAndTextsHidden": "Skärmsekretess: filnamn och texter dolda", + "screenPrivacyOff": "Skärmsekretess: av", "duplicateSelectedLines": "Duplicera markerade rader", "sourceView": "Källvy", - "showAlignmentPicker": "Justering", "addOrEditBookmark": "Lägg till eller redigera bokmärke", - "listBookmarks": "Lista bokmärken", "toggleBookmark": "Växla bokmärke (markerade rader, ingen text)", "toggleForcedSelectedLines": "Växla tvingad (markerade rader)", "goToNextBookmark": "Gå till nästa bokmärke", @@ -3458,7 +3811,6 @@ "waveformSetStartAndSetEndOfPreviousMinusGap": "Sätt start och sätt slut på föregående minus mellanrum", "waveformSetEndAndStartOfNextAfterGap": "Sätt slut och start på nästa plus mellanrum", "waveformSetEndAndStartOfNextAfterGapAndGoToNext": "Sätt slut och start på nästa plus mellanrum och gå till nästa", - "fetchFirstWordFromNextSubtitle": "Hämta första ordet från nästa undertext", "moveLastWordToNextSubtitle": "Flytta sista ordet till nästa undertext", "moveLastWordFromFirstLineDownCurrentSubtitle": "Flytta sista ordet från första raden ner (aktuell undertext)", "moveFirstWordFromNextLineUpCurrentSubtitle": "Flytta första ordet från nästa rad upp (aktuell undertext)", @@ -3471,7 +3823,6 @@ "goToPreviousLineFromVideoPosition": "Gå till föregående undertext (från aktuell videoposition)", "goToNextLineFromVideoPosition": "Gå till nästa undertext (från aktuell videoposition)", "goToNextLineAndSetVideoPosition": "Gå till nästa undertext och sätt videoposition", - "textBoxDeleteSelectionNoClipboard": "Textruta: Ta bort markering (inget urklipp)", "textBoxDeleteForward": "Textruta: Ta bort markering eller nästa tecken (framåtradering)", "textBoxCut": "Textruta: Klipp ut", "textBoxCut2": "Textruta: Klipp ut (alternativ)", @@ -3489,29 +3840,22 @@ "fileCloseOriginal": "Stäng original", "fileCloseTranslation": "Stäng översättning", "restoreAutoBackup": "Återställ auto-säkerhetskopia", - "openContainingFolder": "Öppna innehållande mapp", "importTimeCodes": "Importera tidskoder", "importSubtitleWithManuallyChosenEncoding": "Importera undertext med manuellt vald kodning", "exportBluRaySup": "Exportera Blu-ray SUP", "exportCustomTextFormat": "Exportera anpassat textformat", "exportPlainText": "Exportera vanlig text", - "showHistory": "Visa historik", "toggleRightToLeft": "Växla höger-till-vänster", "modifySelection": "Ändra markering", "adjustDurations": "Justera varaktigheter", "applyDurationLimits": "Tillämpa varaktighetsgränser", "batchConvert": "Batchkonvertera", - "bridgeGaps": "Överbrygga mellanrum", "applyMinGap": "Tillämpa min mellanrum", - "fixCommonErrors": "Åtgärda vanliga fel", "makeEmptyTranslationFromCurrentSubtitle": "Skapa tom översättning från aktuell undertext", - "mergeLinesWithSameText": "Slå ihop rader med samma text", - "mergeLinesWithSameTimeCodes": "Slå ihop rader med samma tidskoder", "splitBreakLongLines": "Dela/balansera om långa rader", "mergeShortLines": "Slå ihop korta rader", "mergeContinuationLines": "Slå samman fortsättningsrader", "snapAllTimesToFrames": "Fäst alla tider vid bildrutor", - "removeTextForHearingImpaired": "Ta bort text för hörselskadade", "joinSubtitles": "Sammanfoga undertexter", "splitSubtitle": "Dela undertext", "spellCheck": "Rättstavning", @@ -3532,7 +3876,6 @@ "adjustAllTimes": "Justera alla tider", "visualSync": "Visuell synk", "translateViaCopyPaste": "Översätt via kopiera-klistra in", - "shortcuts": "Kortkommandon", "wordLists": "Ordlistor", "chooseUiLanguage": "Välj UI-språk", "chooseRuleProfile": "Välj regelprofil", @@ -3543,6 +3886,7 @@ "textBoxItalic": "Textruta kursiv", "textBoxBold": "Textruta fet", "textBoxUnderline": "Textruta understruken", + "textBoxBox": "Textruta ruta (EBU STL)", "resetWaveformZoomAndSpeed": "Återställ vågformens zoom och uppspelningshastighet", "togglePlaybackSpeed": "Växla uppspelningshastighet", "playbackSpeedSlower": "Uppspelningshastighet långsammare", @@ -3554,22 +3898,28 @@ "seekSilenceForward": "Sök tystnad framåt", "waveformGuessStart": "Gissa starttid från vågform", "waveformGuessEnd": "Gissa sluttid från vågform", + "waveformGuessStartAndEnd": "Gissa start- och sluttid från vågform", "setVideoPositionCurrentSubtitleStart": "Sätt videoposition till aktuell rads start", "goToSubtitlePositionAndPause": "Gå till undertextens position och pausa", "setVideoPositionCurrentSubtitleEnd": "Sätt videoposition till aktuell rads slut", "toggleAudioTracks": "Växla ljudspår", - "listErrors": "Lista fel", "goToNextError": "Gå till nästa fel", "goToPreviousError": "Gå till föregående fel", "addNameToNameList": "Lägg till namn i namnlista", "findDoubleWords": "Hitta dubbla ord", "findDoubleLines": "Hitta dubbla rader", "colorX": "Färg {0}", - "removeColor": "Ta bort färg", "surroundWith": "Omge med...", "surroundWithXY": "Omge med {0}/{1}", - "repeatLine": "Upprepa rad", "surroundWithNumberX": "Omslut med #{0}", + "surroundWithBehavior": "Beteende", + "surroundWithBehaviorToggle": "Växla (lägg till, eller ta bort om det finns)", + "surroundWithBehaviorAdd": "Lägg till (varje gång)", + "surroundWithBehaviorRemove": "Ta bort (alla)", + "surroundWithBehaviorRemoveOnce": "Ta bort (en i taget)", + "surroundWithWorksOn": "Fungerar på", + "surroundWithScopeSelectionOrText": "Markering, annars hela texten", + "surroundWithScopeEachLine": "Varje rad", "searchVia": "Sök via", "searchViaX": "Sök via {0}", "searchViaNumberX": "Sök via #{0}", @@ -3596,6 +3946,11 @@ "copySubtitlePathToClipboard": "Kopiera undertextsökväg till urklipp", "copySubtitleOriginalPathToClipboard": "Kopiera undertextsökväg för original till urklipp", "focusTextBox": "Fokusera textruta", + "focusSubtitleListView": "Fokusera undertextlistvy", + "focusWaveform": "Fokusera vågform", + "focusOriginalTextBox": "Fokusera originaltextruta", + "textBoxGoToStart": "Textruta, gå till början", + "textBoxGoToEnd": "Textruta, gå till slutet", "sortByNumber": "Sortera efter nummer", "sortByStartTime": "Sortera efter \"Visa\"-tid", "sortByEndTime": "Sortera efter \"Dölj\"-tid", @@ -3620,7 +3975,6 @@ "assaStyles": "ASSA Stilar", "assaProperties": "ASSA Egenskaper", "assaAttachments": "ASSA Bilagor", - "assaVideoColorPicker": "ASSA Videofärgväljare", "recalculateDurationSelectedLines": "Räkna om varaktighet (markerade rader)", "setDurationMaxCpsSelectedLines": "Sätt varaktighet till max. CPS (markerade rader)", "toggleWaveformAndSpectrogramHeight": "Växla vågform/spektrogram delad höjd", @@ -3634,9 +3988,9 @@ "selectionToSentenceCase": "Textruta: Markering till Meningsskiftläge", "selectionToggleCasing": "Textruta: Växla skiftläge (VERSALER -> gemener -> Inledande Versaler)", "googleIt": "Googla det (markerad text)", - "setActorXY": "Sätt skådespelare {0}: {1}", + "setActorX": "Välj skådespelare: {0}", "setNewActor": "Sätt ny skådespelare...", - "setActorSlotXTitle": "Skådespelarplats {0}", + "setStyleX": "Välj stil: {0}", "toggleDialogDashes": "Växla dialogtankstreck", "mergeWithLineBeforeAsDialog": "Slå samman med raden före som dialog", "mergeWithLineAfterAsDialog": "Slå samman med raden efter som dialog", @@ -3648,18 +4002,54 @@ "moveStartOneFrameForwardKeepGapPrev": "Flytta start en bildruta framåt (behåll mellanrum till föregående om nära)", "moveEndOneFrameBackKeepGapNext": "Flytta slut en bildruta bakåt (behåll mellanrum till nästa om nära)", "moveEndOneFrameForwardKeepGapNext": "Flytta slut en bildruta framåt (behåll mellanrum till nästa om nära)", + "moveStartXMsBack": "Flytta start X ms bakåt (X anges i Inställningar, även i Visuell synk)", + "moveStartXMsForward": "Flytta start X ms framåt (X anges i Inställningar, även i Visuell synk)", + "moveEndXMsBack": "Flytta slut X ms bakåt (X anges i Inställningar, även i Visuell synk)", + "moveEndXMsForward": "Flytta slut X ms framåt (X anges i Inställningar, även i Visuell synk)", + "moveSelectedLinesXMsBack": "Flytta markerade rader X ms bakåt (X anges i Inställningar)", + "moveSelectedLinesXMsForward": "Flytta markerade rader X ms framåt (X anges i Inställningar)", + "moveSelectedLinesAndForwardXMsBack": "Flytta markerade rader och alla efterföljande X ms bakåt (X anges i Inställningar)", + "moveSelectedLinesAndForwardXMsForward": "Flytta markerade rader och alla efterföljande X ms framåt (X anges i Inställningar)", + "moveAllLinesXMsBack": "Flytta alla rader X ms bakåt (X anges i Inställningar)", + "moveAllLinesXMsForward": "Flytta alla rader X ms framåt (X anges i Inställningar)", + "moveSelectedLinesCustomMsBack": "Flytta markerade rader, anpassade millisekunder ({0:#,###,##0}) bakåt, {1}", + "moveSelectedLinesCustomMsForward": "Flytta markerade rader, anpassade millisekunder ({0:#,###,##0}) framåt, {1}", + "moveSelectedLinesAndForwardCustomMsBack": "Flytta markerade rader och alla efterföljande, anpassade millisekunder ({0:#,###,##0}) bakåt, {1}", + "moveSelectedLinesAndForwardCustomMsForward": "Flytta markerade rader och alla efterföljande, anpassade millisekunder ({0:#,###,##0}) framåt, {1}", + "moveAllLinesCustomMsBack": "Flytta alla rader, anpassade millisekunder ({0:#,###,##0}) bakåt, {1}", + "moveAllLinesCustomMsForward": "Flytta alla rader, anpassade millisekunder ({0:#,###,##0}) framåt, {1}", "categoryTextBox": "Textruta", "categoryFile": "Arkiv", "categoryVideo": "Video", "categorySync": "Synkronisering", - "categoryTranslate": "Översätt", - "categorySearch": "Sök", - "categoryTools": "Verktyg", "categoryAi": "AI", + "categoryCustom": "Anpassad", + "editCustomShortcut": "Redigera anpassat kortkommando", + "customShortcutTextBoxKeyHint": "Använd en tangent med Ctrl/Alt här - en vanlig tangent skulle inte längre skriva i textrutan.", + "customShortcutNumberX": "Anpassat kortkommando #{0}", + "customShortcutNumberXY": "Anpassat kortkommando #{0}: {1}", + "customShortcutStep": "Steg", + "customShortcutSteps": "Steg", + "customShortcutStepRunCommand": "Kör kommando", + "customShortcutStepInsertText": "Infoga text", + "customShortcutStepReplace": "Sök och ersätt", + "customShortcutInsertAtCursor": "Vid markören", + "customShortcutInsertAtStart": "I början av texten", + "customShortcutInsertAtEnd": "I slutet av texten", + "customShortcutSummaryRunCommandX": "Kör: {0}", + "customShortcutSummaryInsertXY": "Infoga \"{0}\" ({1})", + "customShortcutSummaryReplaceXY": "Ersätt \"{0}\" med \"{1}\"", + "customShortcutSummaryReplaceRegexXY": "Ersätt reguljärt uttryck \"{0}\" med \"{1}\"", + "customShortcutPickCommand": "Välj ett kommando att köra.", + "customShortcutEnterText": "Ange texten att infoga.", + "customShortcutEnterFind": "Ange texten att söka efter.", + "customShortcutInvalidRegexX": "Ogiltigt reguljärt uttryck: {0}", + "customShortcutStepsHint": "Stegen körs uppifrån och ned. Textsteg fungerar på de markerade raderna; kommandon som öppnar ett fönster fortsätter när det stängs.", "activeIn": "Aktiv i", "activeInEverywhere": "Överallt", "moveTextFromCursorToNextAndGoToNext": "Flytta text efter markörposition till nästa undertext och gå till nästa", "moveTextFromCursorToNextAndGoToNextAndPlay": "Flytta text efter markörposition till nästa undertext, gå till nästa och spela", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "Flytta text efter markörpositionen till nästa undertext, gå till nästa, spela den och pausa vid dess slut", "videoGoToPreviousTimeCode": "Gå till föregående tidskod", "videoGoToNextTimeCode": "Gå till nästa tidskod", "listViewColumnDeleteText": "Kolumn, ta bort text", @@ -3669,6 +4059,7 @@ "listViewColumnTextUp": "Kolumn, text upp", "listViewColumnTextDown": "Kolumn, text ner", "autoTranslateSelectedLines": "Översätt markerade rader automatiskt...", + "autoTranslateSelectedLinesNoPrompt": "Auto-översätt markerade rader (ingen fråga, använd senaste motor/språk)", "setAssaResolution": "Ställ in ASSA-upplösning (PlayResX/PlayResY)", "videoOcr": "OCR av inbränd undertext", "waveformInsertNewSelection": "Vågform infoga ny markering" @@ -3676,8 +4067,6 @@ "wordLists": { "title": "Ordlistor", "addName": "Lägg till namn", - "addWord": "Lägg till ord", - "addPair": "Lägg till par", "nameAndIgnoreList": "Namn-/ignorerlista", "userWords": "Användarordlista", "ocrFixList": "OCR-åtgärdslista", @@ -3694,7 +4083,6 @@ "noPluginsInstalled": "Inga plugins installerade", "getPluginsOnline": "Skaffa plugins online...", "getPluginsTitle": "Skaffa plugins", - "enabled": "Aktiverad", "disabled": "Inaktiverad", "notSupportedOnThisOs": "Stöds inte på detta operativsystem", "removePluginXConfirm": "Ta bort plugin '{0}'?\r\nDetta tar bort plugin-mappen:{1}", @@ -3711,17 +4099,19 @@ "downloadingXPercent": "Laddar ned {0} %...", "pluginXInstalled": "'{0}' installerad.", "couldNotInstallPluginX": "Kunde inte installera '{0}': {1}", - "notInstalled": "Ej installerad", "install": "Installera", "reinstall": "Installera om", - "update": "Uppdatera", "installedX": "Installerad ({0})", "updateAvailableXToY": "Uppdatering tillgänglig ({0} → {1})", "applyPluginToWhichLinesX": "Använd '{0}' på:", "applyToSelectedLinesX": "Markerade rader ({0})", "applyToAllLinesX": "Alla rader ({0})", "updateAllXAvailable": "Uppdatera alla ({0})", - "updatingXOfY": "Uppdaterar {0}/{1}..." + "updatingXOfY": "Uppdaterar {0}/{1}...", + "doNotAskAgain": "Fråga inte igen (ändra i Hantera plugins)", + "applyPluginsTo": "Tillämpa plugins på", + "askEachTime": "Fråga varje gång", + "allLines": "Alla rader" }, "help": { "aboutSubtitleEdit": "Om Subtitle Edit", @@ -3760,6 +4150,8 @@ "nOcrDatabase": "nOCR-databas", "drawMode": "Ritläge:", "addNewCharcter": "Lägg till nytt tecken", + "addNOcrCharacterTitle": "Lägg till nOCR-tecken för rad {0}, tecken {1} av {2} med databasen \"{3}\"", + "addBinaryOcrCharacterTitle": "Lägg till binärt OCR-tecken för rad {0}, tecken {1} av {2} med databasen \"{3}\"", "lineIndexX": "Rad {0}", "inspectNOcrAdditions": "Inspektera nya nOCR-tillägg", "ocrSelectedLines": "OCR markerade rader", @@ -3808,6 +4200,8 @@ "binaryImageCompareInspectImageMatches": "\"Binär bildjämförelse\" - Inspektera bildträffar", "saveBlankTextTitle": "Spara tom text?", "saveBlankTextPrompt": "Spara tom text för bild?", + "drawnLinesDoNotMatchTitle": "Linjerna matchar inte bilden", + "drawnLinesDoNotMatchPrompt": "Några av de ritade linjerna matchar inte bilden (gröna linjer måste ligga på tecknet, röda linjer måste ligga utanför det), så det här tecknet kommer inte att kännas igen.\n\nSpara ändå?", "yesAndNeverAskAgain": "Ja och fråga aldrig igen", "importTextFromSubtitleDotDotDot": "Importera text från undertext...", "importTextFromSubtitleOverwritePrompt": "Vissa rader har redan OCR-text. Skriva över befintlig text?", @@ -3833,7 +4227,6 @@ "vobSubColorsTitle": "VobSub/DVD-färger", "vobSubColorsHeader": "Anpassa de fyra VobSub-färgerna", "vobSubColorsDescription": "VobSub/DVD-undertexter använder fyra indexerade färger: bakgrund, mönster, betoning 1 och betoning 2. Välj varje färg nedan för att åsidosätta den inbäddade paletten - användbart när originalfärgerna ger dålig OCR-kontrast.", - "vobSubColorBackground": "Bakgrund", "vobSubColorPattern": "Mönster", "vobSubColorEmphasis1": "Betoning 1", "vobSubColorEmphasis2": "Betoning 2", @@ -3872,9 +4265,26 @@ "crispEmbedSettingsTitle": "CrispEmbed-inställningar", "crispEmbedDescription": "Lokal OCR-motor med flera modellbackender - ladda ner motorn och modellerna här.", "trainNOcrDatabase": "Träna nOCR-databas...", + "optimizeNOcrDatabase": "Optimera nOCR-databas...", + "optimizeNOcrDatabaseQuestionXY": "Ta bort linjerna som inte skiljer tecken från liknande tecken i nOCR-databasen \"{0}\"?\n\nDetta gör databasen mindre och OCR snabbare, oftast med färre fel. Tar upp till en minut.\n\nEn säkerhetskopia sparas som \"{1}\".", + "optimizingNOcrDatabaseXY": "Optimerar nOCR-databas... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "nOCR-databasen \"{0}\" optimerad: {1:#,##0} -> {2:#,##0} linjer.", "startTraining": "Starta träning", "abortTraining": "Avbryt träning", "trainingOptions": "Träningsalternativ", + "trainNOcrSubtitle": "Renderar tecken i installerade typsnitt och lär nOCR deras former. Välj de typsnitt som dina undertexter använder.", + "xFontsSelected": "{0:#,##0} valda", + "subtitleFonts": "Undertexttypsnitt", + "emptyDatabase": "Tom databas", + "startFromDatabase": "Börja från", + "startFromDatabaseHint": "Lägg till de tränade tecknen i en kopia av en befintlig databas (rekommenderas) eller börja från en tom", + "fontSizes": "Typsnittsstorlekar", + "fontSizesHint": "Typsnittsstorlekar i pixlar att rendera med, separerade med kommatecken, t.ex. \"30, 40\"", + "numberOfLineSegmentsHint": "Linjer som kontrolleras per tecken - fler är striktare men långsammare", + "enterDatabaseName": "Ange ett namn för databasen", + "trainingFontXSizeYCharacterZ": "Tränar \"{0}\" vid {1} px: {2}", + "xLearned": "{0:#,##0} inlärda", + "xSkipped": "{0:#,##0} överhoppade", "charactersToTrain": "Tecken att träna", "letterCombinationsToTrain": "Bokstavskombinationer som kan delas upp i en bild", "importCharactersFromSubtitleFile": "Importera tecken från undertextfil...", @@ -3901,6 +4311,8 @@ "drawZoomOut": "Zooma ut (Ctrl+-)", "drawResetView": "Återställ vy (Ctrl+0)", "drawToggleGrid": "Växla rutnät (Ctrl+G)", + "drawTogglePreview": "Växla förhandsvisning (F9)", + "drawPreviewFailed": "Förhandsvisningen misslyckades - ffmpeg med libass (subtitles-filter) krävs", "drawCopyToClipboard": "Kopiera till urklipp (Ctrl+C)", "drawShapes": "Former", "drawSelectedPoint": "Markerad punkt", @@ -3908,16 +4320,86 @@ "drawSelectedLayer": "Markerat lager", "drawToolX": "Verktyg: {0}", "drawHelpText": "Klicka för att lägga till punkter • Enter/F8 för att stänga form • Skift+Dra för att panorera • Ctrl+Skrolla för att zooma", + "drawMoveToLayer": "Flytta till lager", + "drawFlipHorizontal": "Vänd horisontellt", + "drawFlipVertical": "Vänd vertikalt", + "drawHideShape": "Dölj form", + "drawShowShape": "Visa form", + "drawHideLayer": "Dölj lager", + "drawShowLayer": "Visa lager", + "drawDeleteLayer": "Ta bort lager", + "drawDeletePoint": "Ta bort punkt", + "drawCancelDrawing": "Avbryt ritning", + "drawLayerX": "Lager {0}", + "drawImportSvg": "Importera SVG-bild...", + "drawRotateClockwise": "Rotera 90° medurs", + "drawConvertToCurve": "Konvertera segment till kurva", + "drawBackground": "Bakgrund", + "drawPosition": "Position", + "drawZoom": "Zooma", + "drawShapeTool": "Formverktyg", + "drawColorPickerTool": "Hämta färg från en form eller bakgrunden", + "drawShapeLibrary": "Formbibliotek", + "drawShapeLibraryHint": "Dra på ritytan för att placera en form, eller klicka för standardstorlek. Shift behåller proportionerna.", + "drawAddToLibrary": "Lägg till i formbiblioteket...", + "drawRemoveFromLibrary": "Ta bort från formbiblioteket", + "drawShapeName": "Formnamn", + "drawCategorySpeechBubbles": "Pratbubblor", + "drawCategoryArrows": "Pilar", + "drawCategoryBasicShapes": "Grundformer", + "drawCategorySymbols": "Symboler", + "drawCategoryMyShapes": "Mina former", + "drawShapeSpeechBubble": "Pratbubbla", + "drawShapeSpeechBubbleRight": "Pratbubbla, spets höger", + "drawShapeSpeechBubbleUp": "Pratbubbla, spets upp", + "drawShapeOvalBubble": "Oval pratbubbla", + "drawShapeBoxBubble": "Rektangulär pratbubbla", + "drawShapeThoughtBubble": "Tankebubbla", + "drawShapeShoutBubble": "Ropbubbla", + "drawShapeCaptionBox": "Textruta", + "drawShapeArrow": "Pil", + "drawShapeDoubleArrow": "Dubbelpil", + "drawShapeChevron": "Vinkelpil", + "drawShapeCurvedArrow": "Böjd pil", + "drawShapeRoundedRectangle": "Rundad rektangel", + "drawShapeTriangle": "Triangel", + "drawShapeDiamond": "Romb", + "drawShapePentagon": "Femhörning", + "drawShapeHexagon": "Sexhörning", + "drawShapeOctagon": "Åttahörning", + "drawShapeStar": "Stjärna", + "drawShapeRing": "Ring", + "drawShapePlus": "Plus", + "drawShapeBanner": "Banderoll", + "drawShapeHeart": "Hjärta", + "drawShapeCheck": "Bock", + "drawShapeMusicNote": "Musiknot", + "drawShapeMusicNotes": "Musiknoter", + "drawShapeLightning": "Blixt", + "drawShapeCloud": "Moln", + "drawShapeMoon": "Måne", + "drawShapeBadge": "Märke", + "drawSize": "Storlek", + "drawLayer": "Lager", + "drawBackgroundVideoFrame": "Videobildruta (aktuell position)", + "drawBackgroundVideoFrameAt": "Videobildruta vid...", + "drawBackgroundImage": "Bildfil...", + "drawBackgroundNone": "Ingen bakgrund", + "drawBackgroundStretch": "Sträck ut bilden till ritytan", + "drawBackgroundOpacity": "Bakgrundens opacitet", + "drawBackgroundVideoFrameFailed": "Kunde inte hämta en videobildruta vid {0}.", + "drawImages": "Bilder", + "drawConvertToLine": "Konvertera segment till linje", + "drawConvertShapeToCurves": "Konvertera alla linjer till kurvor", + "drawConvertShapeToLines": "Konvertera alla kurvor till linjer", + "drawRotateCounterClockwise": "Rotera 90° moturs", + "drawSvgImages": "SVG-bilder", + "drawSvgNoShapes": "Inga fyllda former eller streck hittades i SVG-filen.", "progressBarTitle": "ASSA-förloppsindikator", "progressBarSettings": "Förloppsindikator", - "progressBarPosition": "Position", - "progressBarBottom": "Botten", - "progressBarTop": "Topp", "mouseOverColor": "Färg vid muspekare över", "clickedColor": "Färg vid klick", "progressBarForeColor": "Förgrundsfärg", - "progressBarBackColor": "Bakgrundsfärg", - "progressBarStyle": "Stil", "progressBarSquareCorners": "Rätvinkliga hörn", "progressBarRoundedCorners": "Rundade hörn", "progressBarChapters": "Kapitel", @@ -3926,8 +4408,6 @@ "progressBarXAdjustment": "X-justering", "progressBarYAdjustment": "Y-justering", "progressBarTextAlignment": "Textjustering", - "progressBarTakePosFromVideo": "Ta position från video", - "progressBarPreview": "Förhandsvisning", "fontCollectorTitle": "Typsnittssamlare", "fontCollectorUsedIn": "Används i", "fontCollectorFontFiles": "Typsnittsfil(er)", @@ -3974,9 +4454,7 @@ "resolutionResamplerVideoDiffers": "Undertextens upplösning ({0}x{1}) skiljer sig från videons upplösning ({2}x{3}).\nVill du ändra undertexten så att den matchar videon?", "resolutionResamplerAskOnVideoOpen": "Fråga när en video med annan upplösning öppnas", "backgroundBoxGenerator": "Generera bakgrundsruta", - "backgroundBoxPadding": "Utfyllnad", "backgroundBoxFillWidth": "Fyll bredd", - "backgroundBoxBoxColor": "Rutfärg", "backgroundBoxRadius": "Radie", "backgroundBoxCircle": "Cirkel", "backgroundBoxSpikes": "Taggar", @@ -3988,7 +4466,6 @@ "backgroundBoxTornPaperDouble": "Sönderrivet papper (topp & botten)", "backgroundBoxStarburst": "Stjärnexplosion", "backgroundBoxScroll": "Bokrulle / Pergament", - "stylesTitle": "Advanced Sub Station Alpha-stilar", "stylesInFile": "Stilar i fil", "stylesSaved": "Stilar sparade", "stylesTitleX": "Stilar - {0}", @@ -4008,12 +4485,25 @@ "graphics": "Grafik", "copyToStorageStyles": "Kopiera till lagringsstilar", "copyToFileStyles": "Kopiera till filstilar", + "styleXAlreadyExistsInStorage": "En stil med namnet \"{0}\" finns redan i lagringen.\n\nSkriva över den, eller behålla båda (kopian får ett nytt namn)?", + "styleXAlreadyExistsInFile": "En stil med namnet \"{0}\" finns redan i filen.\n\nSkriva över den, eller behålla båda (kopian får ett nytt namn)?", + "styleNameCannotBeEmpty": "Ett stilnamn kan inte vara tomt.", + "styleNameXIsUsedMoreThanOnce": "Stilnamnet \"{0}\" används av mer än en stil i filen.", + "overwrite": "Skriv över", + "keepBoth": "Behåll båda", + "doThisForAllConflictingStyles": "Gör så för alla stilar i konflikt", "setStyleAsDefault": "Sätt stil som standard", "takeUsagesFromDotDotDot": "Ta användningar från...", "noAttachmentsFound": "Inga bilagor hittades i vald ASSA-fil.", "deleteStyleQuestion": "Ta bort stil?", "deleteStylesQuestion": "Ta bort stilar?", + "deleteXStylesQuestion": "Vill du ta bort {0} stilar?", + "deleteXStylesFromStorageQuestion": "Vill du ta bort {0} stilar från lagringen?", + "deleteStyleXFromStorageQuestion": "Vill du ta bort stilen \"{0}\" från lagringen?", + "deleteStyleXFromFileQuestion": "Vill du ta bort stilen \"{0}\" från den aktuella filen?", "openStyleImportFile": "Öppna undertextfil att importera stilar från", + "styleImportFiles": "Stilfiler (.ass, .sty, Subtitle Edit 4-kategorier .template)", + "ssaStyleImportFiles": "Stilfiler (.ssa, .ass, .sty)", "primary": "Primär", "secondary": "Sekundär", "applyOverrideTags": "Tillämpa överstyrningstaggar", @@ -4028,7 +4518,6 @@ "spaceIncrease": "Ökat mellanrum", "popIn": "Pop in", "spinIn": "Snurra in", - "playCurrent": "Spela aktuell", "setPosition": "Sätt position", "scaleX": "Skala X", "scaleY": "Skala Y", @@ -4071,10 +4560,8 @@ "advancedEffectOldMovieDescription": "Simulerar en vintage 35mm filmprojektor med brus, vinjett och repor", "advancedEffectNeonBurst": "Neonexplosion", "advancedEffectNeonBurstDescription": "Högenergetiska 'Shorts'-stiliserade undertexter med neonglödan och pop-animation med skala-in", - "advancedEffectSettings": "Inställningar", "advancedEffectSnowFlakeCount": "Antal flingor", "advancedEffectStarfieldStarCount": "Antal stjärnor", - "advancedEffectStarfieldSpeed": "Hastighet", "advancedEffectGlitch": "Glitch", "advancedEffectGlitchDescription": "Digital glitch med kromatisk aberration, vita blixtar och förvrängningsöverlägg", "advancedEffectBounceIn": "Studsa in", @@ -4083,8 +4570,6 @@ "advancedEffectFirefliesDescription": "Varma glödande gul-bärnstensfärgade prickar driver organiskt över skärmen med pulserande glöd", "advancedEffectMatrix": "Matrix", "advancedEffectMatrixDescription": "Fallande gröna teckenkolumner med undertexttext som byggs upp bokstav för bokstav från regnet", - "advancedEffectAudioBars": "Ljudstaplar (vågform)", - "advancedEffectAudioBarsDescription": "Animerade equalizer-staplar drivna av ljudvågformen — staplar rullar åt vänster som en vågform och pulserar med ljudet", "advancedEffectAudioPulse": "Ljudtextpuls", "advancedEffectAudioPulseDescription": "Undertexttext glöder och pulserar med ljudvolymen — tysta avsnitt visar normal text, höga toppar lägger till en färgad gloria och en lätt skala-upp", "advancedEffectConfetti": "Konfettiexplosion", @@ -4097,7 +4582,6 @@ "advancedEffectFancyKaraokeGlow": "Aktivt ord-glöd", "advancedEffectFancyKaraokeActiveColor": "Aktiv färg", "advancedEffectFancyKaraokeInactiveColor": "Inaktiv färg", - "advancedEffectFancyKaraokeInactiveOpacity": "Inaktiv opacitet (0-255)", "advancedEffectWordSpacingPixels": "Mellanrum (pixlar)", "advancedEffectSlowZoomOut": "Långsam zoom-ut", "advancedEffectSlowZoomOutDescription": "Texten börjar något större och krymper försiktigt till normal storlek under undertextens varaktighet", @@ -4113,7 +4597,6 @@ "advancedEffectSlideInLeftDescription": "Texten glider in från utanför skärmen åt vänster, hålls och avslutas tillbaka åt vänster", "advancedEffectSlideInRight": "Glid in från höger", "advancedEffectSlideInRightDescription": "Texten glider in från utanför skärmen åt höger, hålls och avslutas tillbaka åt höger", - "advancedEffectFadeInOut": "Tona in/ut", "advancedEffectFadeInOutDescription": "Texten tonar in vid starten och tonar ut vid slutet av varje undertext", "advancedEffectWordFlip3D": "3D-ordvändning", "advancedEffectWordFlip3DDescription": "Varje ord viks in med en 3D-vändning och elastisk pop när det uttalas — modern textningsstil för \"Shorts\"", @@ -4123,9 +4606,7 @@ "advancedEffectLowerThirdDescription": "Banderoll med namn och roll nere till vänster med en accentstapel som glider in — intervju-/dokumentärstil (första raden = namn, följande rader = roll)", "advancedEffectLowerThirdAccentColor": "Accentfärg", "overrideTagsHistory": "Historik för överstyrningstaggar", - "category": "Kategori", "allCategories": "[Alla]", - "defaultCategory": "Standard", "newCategory": "Ny kategori...", "renameCategory": "Byt namn på kategori...", "deleteCategory": "Ta bort kategori", diff --git a/src/ui/Assets/Languages/Thai.json b/src/ui/Assets/Languages/Thai.json index 0b568fda0e6..b8e2d7a19c1 100644 --- a/src/ui/Assets/Languages/Thai.json +++ b/src/ui/Assets/Languages/Thai.json @@ -1,12 +1,70 @@ { "title": "Subtitle Edit", - "version": "v5.2.0-rc7", + "version": "v5.3.0", "translatedBy": "Claude (Anthropic)", "cultureName": "th-TH", "general": { + "prompt": "พรอมต์", + "preset": "พรีเซ็ต", + "output": "ผลลัพธ์", + "outputFormat": "รูปแบบผลลัพธ์", + "other": "อื่นๆ", + "timeCodeFormat": "รูปแบบไทม์โค้ด", + "topBottomMargin": "ระยะขอบบน/ล่าง", + "theme": "ธีม", + "brightness": "ความสว่าง", + "chooseColor": "เลือกสี", + "lineX": "บรรทัด {0}", + "playLine": "เล่นบรรทัด", + "maxLineLength": "ความยาวบรรทัดสูงสุด", + "maxCharsPerSec": "อักขระ/วินาทีสูงสุด", + "maxNumberOfLines": "จำนวนบรรทัดสูงสุด", + "subtitles": "คำบรรยาย", + "shotChanges": "จุดเปลี่ยนฉาก", + "chapters": "บท", + "audio": "เสียง", + "interjections": "คำอุทาน", + "blankLines": "บรรทัดว่าง", + "editWholeText": "แก้ไขข้อความทั้งหมด", + "noTextInClipboard": "ไม่มีข้อความในคลิปบอร์ด", + "noSubtitlesFoundTitle": "ไม่พบคำบรรยาย", + "replacedXOccurrences": "แทนที่แล้ว {0} ตำแหน่ง", + "invalidRegularExpressionX": "นิพจน์ทั่วไปไม่ถูกต้อง: {0}", + "discardChangesTitle": "ละทิ้งการเปลี่ยนแปลง?", + "downloadingXDotDotDot": "กำลังดาวน์โหลด {0}...", + "importTimeCodesDotDotDot": "นำเข้ารหัสเวลา...", + "original": "ต้นฉบับ", + "nextChange": "การเปลี่ยนแปลงถัดไป", + "previousChange": "การเปลี่ยนแปลงก่อนหน้า", + "changeXOfY": "การเปลี่ยนแปลง {0} จาก {1}", + "tooLong": "ยาวเกินไป", + "tooShort": "สั้นเกินไป", + "overlapping": "ซ้อนทับกัน", + "detail": "รายละเอียด", + "fixOcrErrors": "แก้ไขข้อผิดพลาด OCR", + "runningOcrXY": "กำลังทำ OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp ต้องดาวน์โหลดเอนจิน llama-server ดาวน์โหลดตอนนี้หรือไม่?", "abort": "ยกเลิกกลางคัน", "actor": "นักแสดง", "actors": "นักแสดง", + "setActorDotDotDot": "กำหนดนักแสดง...", + "actorPickerTitle": "กำหนดนักแสดง", + "actorPickerFilterHint": "พิมพ์เพื่อกรอง หรือพิมพ์ชื่อนักแสดงใหม่", + "actorPickerKeysHint": "กดตัวเลขหรือ Enter เพื่อกำหนดนักแสดง Alt+Up/Down เปลี่ยนลำดับ Delete ลบนักแสดง", + "actorPickerNewActorX": "นักแสดงใหม่ \"{0}\"", + "actorPickerLinesSelectedX": "บรรทัดที่เลือก: {0}", + "setStyleDotDotDot": "กำหนดสไตล์...", + "stylePickerTitle": "กำหนดสไตล์", + "stylePickerFilterHint": "พิมพ์เพื่อกรอง หรือพิมพ์ชื่อสไตล์ใหม่", + "stylePickerKeysHint": "กดตัวเลข (1-9, 0) เพื่อกำหนดสไตล์ให้ทุกบรรทัดที่เลือก", + "stylePickerNewStyleX": "สไตล์ใหม่ \"{0}\"", + "stylePickerNewStyleInfo": "กด Enter เพื่อเพิ่มสไตล์นี้ด้วยการตั้งค่าเริ่มต้นและกำหนดให้บรรทัดที่เลือก ใช้ \"จัดการสไตล์...\" เพื่อเปลี่ยนฟอนต์ สี และตำแหน่งภายหลัง", + "stylePickerCurrentStyleX": "สไตล์ปัจจุบัน: {0}", + "stylePickerLinesUsingStyleX": "บรรทัดที่ใช้สไตล์นี้: {0}", + "stylePickerMarginsXYZ": "ซ้าย {0}, ขวา {1}, แนวตั้ง {2}", + "stylePickerSetStyle": "กำหนดสไตล์", + "stylePickerManageStyles": "จัดการสไตล์...", + "stylePickerManageStylesHint": "ปิดหน้าต่างนี้และเปิดตัวจัดการสไตล์เพื่อแก้ไขฟอนต์ สี ตำแหน่ง และอื่นๆ", "add": "เพิ่ม", "addDotDotDot": "เพิ่ม...", "addToNamesListCaseSensitive": "เพิ่มลงในรายชื่อ (ตรงตามตัวพิมพ์ใหญ่-เล็ก)", @@ -15,7 +73,6 @@ "adjustAlpha": "ปรับค่าอัลฟา (ความโปร่งใส)", "adjustDisplayDuration": "ปรับระยะเวลาแสดงผล", "adjustment": "การปรับ", - "advanced": "ขั้นสูง", "advancedSettings": "การตั้งค่าขั้นสูง", "after": "หลัง", "alignment": "การจัดตำแหน่ง", @@ -60,7 +117,6 @@ "bdnXml": "BDN/xml", "bdnXml8Bit": "BDN/xml 8 บิต", "before": "ก่อน", - "beforeX": "ก่อน \"{0}\"", "beginning": "จุดเริ่มต้น", "bluRaySup": "Blu-ray (sup)", "bold": "ตัวหนา", @@ -72,7 +128,6 @@ "bookmarkEdit": "แก้ไขบุ๊กมาร์ก", "bookmarkEditForSelectedLinesX": "แก้ไขบุ๊กมาร์กให้ {0} บรรทัดที่เลือก", "bookmarksList": "แสดงรายการบุ๊กมาร์ก", - "borderColor": "สีเส้นขอบ", "borderStyle": "รูปแบบเส้นขอบ", "bottomCenter": "ล่าง-กลาง", "bottomLeft": "ล่าง-ซ้าย", @@ -99,7 +154,6 @@ "changeCasing": "เปลี่ยนตัวพิมพ์ใหญ่-เล็ก", "changeFormatting": "เปลี่ยนการจัดรูปแบบ", "changeFrameRate": "เปลี่ยนอัตราเฟรม", - "changeLanguageFilter": "เปลี่ยนตัวกรองภาษา...", "changeOnce": "เปลี่ยนครั้งเดียว", "changeSpeed": "เปลี่ยนความเร็ว", "character": "อักขระ", @@ -141,7 +195,6 @@ "conversionCancelledByUser": "ผู้ใช้ยกเลิกการแปลง", "convert": "แปลง", "converted": "แปลงแล้ว", - "convertingDotDotDot": "กำลังแปลง...", "convertingXofYDotDoDot": "กำลังแปลง {0:#,###,##0}/{1:#,###,##0}...", "copy": "คัดลอก", "copyImageToClipboard": "คัดลอกภาพไปยังคลิปบอร์ด", @@ -152,7 +205,6 @@ "couldNotOpenFileXErrorY": "ไม่สามารถเปิดไฟล์ \"{0}\" ข้อผิดพลาด: {1}", "count": "จำนวน", "cps": "อักขระ/วินาที", - "currentSubtitle": "คำบรรยายปัจจุบัน", "cudaRuntime": "CUDA runtime", "currentVideoPosition": "ตำแหน่งวิดีโอปัจจุบัน", "custom": "กำหนดเอง", @@ -212,7 +264,6 @@ "expand": "ขยาย", "export": "ส่งออก", "exportDotDotDot": "ส่งออก...", - "exportToX": "ส่งออกเป็น {0}", "extendAfter": "ขยาย/หดถึงบรรทัดถัดไป", "extendBefore": "ขยาย/หดถึงบรรทัดก่อนหน้า", "extendSelectedLinesToNextShotChangeOrNextSubtitle": "ขยายบรรทัดที่เลือกถึงจุดเปลี่ยนฉากถัดไป (หรือคำบรรยายถัดไป)", @@ -229,7 +280,6 @@ "fileExtension": "นามสกุลไฟล์", "fileName": "ชื่อไฟล์", "fileNameX": "ชื่อไฟล์: {0}", - "fileNameXAndSize": "ชื่อไฟล์: {0} ({1})", "fileSaved": "บันทึกไฟล์แล้ว", "fileSavedToX": "บันทึกไฟล์ไปยัง {0} แล้ว", "fileXAlreadyExists": "มีไฟล์ \"{0}\" อยู่แล้ว", @@ -239,8 +289,6 @@ "find": "ค้นหา", "findNext": "ค้นหาถัดไป", "findTextX": "ค้นหาข้อความ - {0}", - "fiveHundredMilliseconds": "500 มิลลิวินาที", - "fiveSeconds": "ห้าวินาที", "fix": "แก้ไข", "fixCommonErrors": "แก้ไขข้อผิดพลาดทั่วไป", "fixRightToLeft": "แก้ไขข้อความขวาไปซ้าย", @@ -264,14 +312,12 @@ "foundXInLineYZ": "พบ \"{0}\" ในบรรทัด {1} ตำแหน่ง {2}", "foundXMatches": "พบ {0} รายการที่ตรงกัน", "frameRate": "อัตราเฟรม", - "frameRateX": "อัตราเฟรม: {0:0.0###}", "frames": "เฟรม", "from": "จาก", "fromCurrentVideoPosition": "จากตำแหน่งวิดีโอปัจจุบัน", "fullScreen": "เต็มหน้าจอ", "gap": "ช่องว่าง", "general": "ทั่วไป", - "generalText": "ทั่วไป", "generate": "สร้าง", "generateImportShotChanges": "สร้าง/นำเข้าจุดเปลี่ยนฉาก", "generating": "กำลังสร้าง...", @@ -289,12 +335,8 @@ "help": "ช่วยเหลือ", "hex": "เลขฐานสิบหก", "hide": "ซ่อน", - "hidePreview": "ซ่อนตัวอย่าง", "history": "ประวัติ", "horizontal": "แนวนอน", - "hourMinutesSecondsDecimalSeparatorMilliseconds": "ชม.:นาที:วินาที{0}มิลลิวินาที", - "hourMinutesSecondsFrames": "ชม.:นาที:วินาที:เฟรม", - "ip": "IP", "id": "ID", "image": "ภาพ", "imageSaved": "บันทึกภาพแล้ว", @@ -355,6 +397,7 @@ "mergeSelectedLinesDialog": "รวมบรรทัดที่เลือกเป็นบทสนทนา", "mergeWithLineAfterAndAutoBreak": "รวมกับบรรทัดถัดไปและตัดบรรทัดอัตโนมัติ", "mergeWithLineAfterKeepBreaks": "รวมกับบรรทัดถัดไป (คงการตัดบรรทัด)", + "mergeWithLineAfterAndUnbreak": "รวมกับบรรทัดถัดไปและรวมเป็นบรรทัดเดียว", "mergeWithLineBeforeAndAutoBreak": "รวมกับบรรทัดก่อนหน้าและตัดบรรทัดอัตโนมัติ", "mergeWithLineBeforeKeepBreaks": "รวมกับบรรทัดก่อนหน้า (คงการตัดบรรทัด)", "middleCenter": "กลาง-กลาง", @@ -369,13 +412,13 @@ "moveAllShotChangeOneFrameForward": "เลื่อนจุดเปลี่ยนฉากทั้งหมดไปข้างหน้าหนึ่งเฟรม", "multiMode": "โหมดหลายรายการ", "moveDown": "เลื่อนลง", + "increase": "เพิ่ม", + "decrease": "ลด", "moveUp": "เลื่อนขึ้น", "moveToTop": "ย้ายไปบนสุด", "moveToBottom": "ย้ายไปล่างสุด", "multipleReplace": "แทนที่หลายรายการ", - "mute": "ปิดเสียง", "name": "ชื่อ", - "negative": "ค่าลบ", "new": "ใหม่", "newDotDotDot": "ใหม่...", "newProfile": "โปรไฟล์ใหม่", @@ -405,20 +448,15 @@ "offsetY": "ออฟเซ็ต Y", "ok": "ตกลง", "oneFile": "ไฟล์เดียว", - "oneHundredMilliseconds": "100 มิลลิวินาที", - "oneSecond": "หนึ่งวินาที", "oneSecondBack": "ถอยหลังหนึ่งวินาที", "oneSecondForward": "เดินหน้าหนึ่งวินาที", - "onlineVideoFeatureNotAvailable": "ฟีเจอร์นี้ใช้ไม่ได้กับวิดีโอออนไลน์", "openContainingFolder": "เปิดโฟลเดอร์ที่เก็บไฟล์", "openDictionaryFolder": "เปิดโฟลเดอร์พจนานุกรม", "openFile": "เปิดไฟล์", "openImageBasedSubtitle": "เปิดคำบรรยายแบบภาพ", "openImageFile": "เปิดไฟล์ภาพ", - "openOriginalSubtitleFile": "เปิดไฟล์คำบรรยายต้นฉบับ...", "openOriginalSubtitleFileTitle": "เปิดไฟล์คำบรรยายต้นฉบับ", "openOutputFolder": "เปิดโฟลเดอร์ผลลัพธ์", - "openSubtitle": "เปิดคำบรรยาย...", "openSubtitleFileTitle": "เปิดไฟล์คำบรรยาย", "openSubtitles": "เปิดคำบรรยาย...", "openVideoFile": "เปิดไฟล์วิดีโอ...", @@ -433,11 +471,6 @@ "outlineWidth": "ความหนาเส้นขอบตัวอักษร", "outputFolder": "โฟลเดอร์ผลลัพธ์", "outputProperties": "คุณสมบัติผลลัพธ์", - "overlap": "การซ้อนทับ", - "overlapNextX": "ซ้อนทับบรรทัดถัดไป ({0:#;##0.###})", - "overlapPreviousLineX": "ซ้อนทับบรรทัดก่อนหน้า ({0:#;##0.###})", - "overlapStartAndEnd": "ซ้อนทับจุดเริ่มต้นและจุดสิ้นสุด", - "overlapX": "ซ้อนทับ ({0:#;##0.###})", "overwriteExistingFiles": "เขียนทับไฟล์ที่มีอยู่", "overwriteFilesInFolderX": "เขียนทับไฟล์ในโฟลเดอร์: \"{0}\"", "overwriteQuestion": "เขียนทับ?", @@ -450,6 +483,7 @@ "percent": "เปอร์เซ็นต์", "pickLayer": "กำหนดเลเยอร์", "pickOllamaModel": "เลือกโมเดล Ollama", + "pickModel": "เลือกโมเดล", "llamaCppUseRemoteServer": "ใช้เซิร์ฟเวอร์ภายนอก (URL)", "llamaCppEngineSettings": "การตั้งค่าเอนจิน llama.cpp", "llamaCppEngineSettingsSubtitle": "เซิร์ฟเวอร์ llama.cpp แบบโลคัล", @@ -501,7 +535,6 @@ "refresh": "รีเฟรช", "region": "ภูมิภาค", "regularExpression": "นิพจน์ปรกติ (regex)", - "regularExpressionIsNotValid": "นิพจน์ปรกติไม่ถูกต้อง!", "relativeToCurrentVideoPosition": "สัมพัทธ์กับตำแหน่งวิดีโอปัจจุบัน", "remove": "ลบออก", "removeAlignment": "ลบการจัดตำแหน่ง", @@ -527,7 +560,7 @@ "reset": "รีเซ็ต", "resizePanels": "ปรับขนาดแผง", "resolution": "ความละเอียด", - "resolutionX": "ความละเอียด: {0}", + "retry": "ลองอีกครั้ง", "reverseRightToLeftStartEnd": "สลับจุดเริ่มต้น/จุดสิ้นสุดแบบ RTL", "right": "ขวา", "rightToLeft": "ขวาไปซ้าย", @@ -567,8 +600,6 @@ "selectedlinesX": "บรรทัดที่เลือก: {0}", "sensitivity": "ความไว", "separator": "ตัวคั่น", - "sessionKey": "คีย์เซสชัน", - "sessionKeyGenerate": "สร้างคีย์ใหม่", "setEnd": "กำหนดจุดสิ้นสุด", "setEndAndGoToNext": "กำหนดจุดสิ้นสุดแล้วไปบรรทัดถัดไป", "setEndAddNewAndGoToNew": "กำหนดจุดสิ้นสุด เพิ่มบรรทัดใหม่ แล้วไปบรรทัดใหม่", @@ -591,8 +622,9 @@ "shadowColor": "สีเงา", "shadowWidth": "ความกว้างเงา", "shiftLineBy": "เลื่อนบรรทัดไป", + "shotIn": "ช็อตเข้า", + "shotOut": "ช็อตออก", "shortcut": "ปุ่มลัด", - "shortcutX": "ปุ่มลัด: {0}", "shortcuts": "ปุ่มลัด", "show": "แสดง", "showActorColumn": "แสดงคอลัมน์ \"นักแสดง\"", @@ -603,17 +635,19 @@ "showStartColumn": "แสดงคอลัมน์ \"เริ่ม\"", "showHideColumn": "แสดงคอลัมน์ \"สิ้นสุด\"", "showHistory": "แสดงประวัติ", + "clearHistory": "ล้างประวัติ", + "removeFromHistory": "ลบออกจากประวัติ", "showLayerColumn": "แสดงคอลัมน์ \"เลเยอร์\"", "showPreview": "แสดงตัวอย่าง", "showShotChangesList": "แสดงรายการจุดเปลี่ยนฉาก", + "showShotInColumn": "แสดงคอลัมน์ \"ช็อตเข้า\"", + "showShotOutColumn": "แสดงคอลัมน์ \"ช็อตออก\"", "showStyleColumn": "แสดงคอลัมน์ \"สไตล์\"", "showTeletext": "แสดงคอลัมน์เทเลเท็กซ์ในมุมมองรายการ", "showTimeCodes": "แสดงไทม์โค้ด", "showWpmColumn": "แสดงคอลัมน์ \"คำ/นาที\"", "showPixelWidthColumn": "แสดงคอลัมน์ \"ความกว้างพิกเซล\"", "shrink": "หด", - "singleBox": "กล่องเดียว", - "singleLineLengths": "ความยาวต่อบรรทัด:", "singleMode": "โหมดรายการเดียว", "textTotalLength": "ข้อความ - ความยาวรวม", "textSingleLineMaxLength": "ข้อความ - ความยาวสูงสุดต่อบรรทัด", @@ -662,16 +696,16 @@ "strikeout": "ขีดฆ่า", "style": "สไตล์", "styleExaggeration": "การเน้นสไตล์", - "styleLanguage": "สไตล์ / ภาษา", "styles": "สไตล์", "subtitleFile": "ไฟล์คำบรรยาย", + "subtitleFileChangedOutsideX": "ไฟล์ \"{0}\" ถูกเปลี่ยนแปลงภายนอก Subtitle Edit\n\nโหลดใหม่และละทิ้งการเปลี่ยนแปลงของคุณหรือไม่?", "subtitleFileName": "ชื่อไฟล์คำบรรยาย", "subtitleFileSaved": "บันทึกไฟล์คำบรรยายแล้ว", "subtitleFileSavedToX": "บันทึกไฟล์คำบรรยายไปที่ {0} แล้ว", "subtitleFiles": "ไฟล์คำบรรยาย", "subtitleFormats": "รูปแบบคำบรรยาย", "subtitleLoadedX": "โหลดคำบรรยายแล้ว: {0}", - "subtitleXOfY": "คำบรรยาย {0} จาก {1}", + "subtitleReloadedChangedOutsideX": "โหลดคำบรรยายใหม่แล้ว (ถูกเปลี่ยนแปลงภายนอก Subtitle Edit): {0}", "suffix": "คำต่อท้าย", "suggestions": "คำแนะนำ", "sync": "ซิงค์", @@ -683,7 +717,6 @@ "teletextColor": "สีเทเลเท็กซ์", "teletextLine": "บรรทัดเทเลเท็กซ์", "tenHours": "10 ชั่วโมง", - "tenMilliseconds": "10 มิลลิวินาที", "text": "ข้อความ", "textColor": "สีข้อความ", "textFiles": "ไฟล์ข้อความ", @@ -710,9 +743,6 @@ "topRight": "บน-ขวา", "top": "บน", "totalAdjustmentX": "การปรับทั้งหมด: {0}", - "totalFramesX": "จำนวนเฟรมทั้งหมด: {0:#;##0.##}", - "totalLengthX": "ความยาวรวม: {0}", - "totalLengthXSplitLine": "ความยาวรวม: {0} (แยกบรรทัด!)", "translate": "แปล", "translatePercentX": "กำลังแปล: {0}%", "translateRow": "แปลแถวนี้", @@ -721,6 +751,7 @@ "type": "ประเภท", "unbreak": "รวมข้อความเป็นบรรทัดเดียว", "unbreakLines": "รวมบรรทัด", + "undelete": "เลิกลบ", "underline": "ขีดเส้นใต้", "undo": "เลิกทำ", "unknown": "ไม่ทราบ", @@ -740,13 +771,11 @@ "usages": "การใช้งาน", "use": "ใช้", "useAlways": "ใช้เสมอ", - "useLargerFontForThisWindow": "ใช้ฟอนต์ขนาดใหญ่ขึ้นสำหรับหน้าต่างนี้", "useOnce": "ใช้ครั้งเดียว", "useOutputFolder": "ใช้โฟลเดอร์ผลลัพธ์", "useSourceFolder": "ใช้โฟลเดอร์ต้นทาง", "useSourceResolution": "ใช้ความละเอียดต้นฉบับ", "userName": "ชื่อผู้ใช้", - "userNameAlreadyInUse": "ชื่อผู้ใช้นี้ถูกใช้แล้ว", "vertical": "แนวตั้ง", "video100MsBack": "วิดีโอ ถอยหลัง 100 มิลลิวินาที", "video100MsForward": "วิดีโอ เดินหน้า 100 มิลลิวินาที", @@ -760,14 +789,25 @@ "videoCustom3ForwardX": "วิดีโอ เดินหน้าตามมิลลิวินาทีกำหนดเอง ({0:#,###,##0}), 3", "videoCustom4BackX": "วิดีโอ ถอยหลังตามมิลลิวินาทีกำหนดเอง ({0:#,###,##0}), 4", "videoCustom4ForwardX": "วิดีโอ เดินหน้าตามมิลลิวินาทีกำหนดเอง ({0:#,###,##0}), 4", - "videoEncodingX": "การเข้ารหัสวิดีโอ: {0}", + "videoCustom1BackAndPauseX": "วิดีโอ ถอยหลังตามมิลลิวินาทีที่กำหนดเอง ({0:#,###,##0}) และหยุดชั่วคราว 1", + "videoCustom1ForwardAndPauseX": "วิดีโอ เดินหน้าตามมิลลิวินาทีที่กำหนดเอง ({0:#,###,##0}) และหยุดชั่วคราว 1", + "videoCustom2BackAndPauseX": "วิดีโอ ถอยหลังตามมิลลิวินาทีที่กำหนดเอง ({0:#,###,##0}) และหยุดชั่วคราว 2", + "videoCustom2ForwardAndPauseX": "วิดีโอ เดินหน้าตามมิลลิวินาทีที่กำหนดเอง ({0:#,###,##0}) และหยุดชั่วคราว 2", + "videoCustom3BackAndPauseX": "วิดีโอ ถอยหลังตามมิลลิวินาทีที่กำหนดเอง ({0:#,###,##0}) และหยุดชั่วคราว 3", + "videoCustom3ForwardAndPauseX": "วิดีโอ เดินหน้าตามมิลลิวินาทีที่กำหนดเอง ({0:#,###,##0}) และหยุดชั่วคราว 3", + "videoCustom4BackAndPauseX": "วิดีโอ ถอยหลังตามมิลลิวินาทีที่กำหนดเอง ({0:#,###,##0}) และหยุดชั่วคราว 4", + "videoCustom4ForwardAndPauseX": "วิดีโอ เดินหน้าตามมิลลิวินาทีที่กำหนดเอง ({0:#,###,##0}) และหยุดชั่วคราว 4", "videoExtension": "นามสกุลไฟล์วิดีโอ", "videoFile": "ไฟล์วิดีโอ", "videoFileGenerated": "สร้างไฟล์วิดีโอแล้ว", "videoFileGeneratedX": "สร้างไฟล์วิดีโอแล้ว: \"{0}\"", + "videoFilesGenerated": "สร้างไฟล์วิดีโอแล้ว", + "xVideosGenerated": "สร้างวิดีโอแล้ว {0} ไฟล์", + "xOfYVideosGenerated": "สร้างวิดีโอแล้ว {0} จาก {1} ไฟล์", + "savedInX": "บันทึกไว้ใน {0}", + "savedInXFolders": "บันทึกไว้ใน {0} โฟลเดอร์", "videoFiles": "ไฟล์วิดีโอ", "videoAndAudioFiles": "ไฟล์วิดีโอและเสียง", - "videoInformation": "ข้อมูลวิดีโอ", "videoOffset": "ออฟเซ็ตวิดีโอ", "videoOneFrameBack": "วิดีโอ ถอยหลังหนึ่งเฟรม", "videoOneFrameForward": "วิดีโอ เดินหน้าหนึ่งเฟรม", @@ -778,7 +818,6 @@ "videoPlayer": "โปรแกรมเล่นวิดีโอ", "videoPosition": "ตำแหน่งวิดีโอ", "videoResolution": "ความละเอียดวิดีโอ", - "viewX": "มุมมอง {0}", "visible": "มองเห็นได้", "voice": "เสียงพูด", "volume": "ระดับเสียง", @@ -787,9 +826,7 @@ "waveformCenterOnVideoPosition": "จัดกึ่งกลางคลื่นเสียงตามตำแหน่งวิดีโอ", "waveformPasteFromClipboard": "วางจากคลิปบอร์ด", "waveformSpectrogram": "คลื่นเสียง/สเปกโตรแกรม", - "webServiceUrl": "URL ของเว็บเซอร์วิส", "width": "ความกว้าง", - "windowPositionAndSize": "ตำแหน่งและขนาดหน้าต่าง", "wordsPerMin": "คำ/นาที", "pixelWidth": "ความกว้างเป็นพิกเซล", "wpm": "คำ/นาที", @@ -803,8 +840,6 @@ "noBookmarksFound": "ไม่พบบุ๊กมาร์กเพิ่มเติม", "xRequiresAnApiKey": "{0} ต้องใช้คีย์ API", "xRequiresAValidUrl": "{0} ต้องใช้ URL ที่ถูกต้อง (เช่น \"http://...\" หรือ \"https://...\")", - "xSeconds": "{0:0.0##} วินาที", - "xSubtitles": "{0:#,###,##0} คำบรรยาย", "yes": "ใช่", "zeroBytes": "0 ไบต์", "copyToClipboard": "คัดลอกไปยังคลิปบอร์ด", @@ -826,10 +861,8 @@ "playbackSpeed": "ความเร็วการเล่น", "hoursMinutesSecondsMilliseconds": "HH:MM:SS.FFF", "imageFiles": "ไฟล์ภาพ", - "openAiCompatibleStt": "STT ที่เข้ากันได้กับ OpenAI", "openAiCompatibleSttEndpoint": "URL ปลายทาง STT", "openAiCompatibleSttApiKey": "คีย์ API", - "openAiCompatibleSttModel": "โมเดล", "openAiCompatibleSttExtraHeaders": "ส่วนหัวเพิ่มเติม", "openAiCompatibleSttTimeout": "หมดเวลา (วินาที)", "openAiCompatibleSttLanguage": "ภาษาที่คาดไว้", @@ -839,6 +872,9 @@ "dashScopeSttRegion": "ภูมิภาค", "dashScopeSttEnableWords": "ประทับเวลาระดับคำ", "dashScopeSttRegionKeyHint": "หมายเหตุ: คีย์ API ของ Alibaba Cloud Model Studio ผูกกับภูมิภาค - ตรวจสอบให้แน่ใจว่าภูมิภาคที่เลือกตรงกับภูมิภาคที่สร้างคีย์ API (จีน หรือ นานาชาติ)", + "googleCloudSttProjectId": "Project ID (เฉพาะ Application Default Credentials)", + "googleCloudSttBucketName": "Storage bucket (ว่าง = อัตโนมัติ)", + "googleCloudSttDynamicBatching": "Dynamic batching (ถูกกว่าประมาณ 5 เท่า ไม่รับประกันความหน่วง)", "onlineSttApiKeyMissing": "ต้องใช้คีย์ API กรุณาป้อนคีย์ API ของคุณแล้วลองอีกครั้ง", "openAiCompatibleSttAutoTranscribeOnAudioSelection": "ถอดเสียงส่วนที่เลือกใหม่บนคลื่นเสียงโดยอัตโนมัติผ่านการแปลงเสียงเป็นข้อความ", "openAiCompatibleSttStream": "สตรีมการตอบกลับ", @@ -848,11 +884,9 @@ "configurationRequired": "ต้องตั้งค่าก่อน", "transcriptionError": "ข้อผิดพลาดในการถอดเสียง", "transcriptionComplete": "ถอดเสียงเสร็จสมบูรณ์", - "transcribingWithOpenAi": "กำลังถอดเสียงด้วยบริการ OpenAI...", "processingResponse": "กำลังประมวลผลการตอบกลับ...", "unauthorizedApiKey": "ไม่ได้รับอนุญาต: คีย์ API ไม่ถูกต้องหรือสิทธิ์ไม่เพียงพอ", "requestTimeout": "คำขอหมดเวลา: เซิร์ฟเวอร์ใช้เวลาตอบกลับนานเกินไป", - "noSegmentsReturned": "บริการถอดเสียงไม่ส่งเซกเมนต์ใดกลับมา", "openAiCompatibleSttUrlMissing": "ต้องระบุ URL ปลายทางของ STT ที่เข้ากันได้กับ OpenAI กรุณาป้อน URL แล้วลองอีกครั้ง", "openAiCompatibleSttUrlNotResponding": "ปลายทาง STT ที่เข้ากันได้กับ OpenAI ไม่ตอบสนอง:\n{0}\n\nกรุณาตรวจสอบ URL และตรวจสอบว่าเซิร์ฟเวอร์กำลังทำงานอยู่", "transcriptionFailed": "การถอดเสียงล้มเหลว", @@ -898,14 +932,15 @@ "multipleReplace": "แทนที่หลายรายการ...", "fillSelectedLinesWithClipboard": "เติมบรรทัดที่เลือกด้วยข้อความจากคลิปบอร์ด", "goToLineNumber": "ไปยังบรรทัดที่...", + "commandPalette": "แผงคำสั่ง...", "rightToLeftMode": "โหมดขวาไปซ้าย", "modifySelectionDotDotDot": "ปรับเปลี่ยนการเลือก...", "tools": "เครื่องมือ", - "toolsSelectedLines": "เครื่องมือ (บรรทัดที่เลือก)", "adjustDurations": "ปรับระยะเวลา...", "applyDurationLimits": "ใช้ขีดจำกัดระยะเวลา...", "batchConvert": "แปลงเป็นชุด...", "beautifyTimeCodes": "จัดรหัสเวลาให้สวยงาม...", + "improveTimeCodes": "ปรับปรุงไทม์โค้ด (forced alignment)...", "bridgeGaps": "เชื่อมช่องว่าง...", "applyMinGap": "ใช้ช่องว่างขั้นต่ำระหว่างคำบรรยาย...", "changeCasing": "เปลี่ยนตัวพิมพ์ใหญ่-เล็ก...", @@ -1044,6 +1079,9 @@ "selectCurrentLineWhilePlayingHint": "เลือกคำบรรยายปัจจุบันขณะเล่น {0}", "videoPosition": "ตำแหน่งวิดีโอ {0}", "videoPositionTextBox": "กล่องข้อความตำแหน่งวิดีโอ {0}", + "toolbarLineBreakX": "ขึ้นบรรทัดใหม่ {0} (ส่วนที่เหลือของแถบเครื่องมือจะต่อในแถวใหม่)", + "initialText": "ข้อความเริ่มต้นของบรรทัดที่เลือก", + "initialTextHint": "ข้อความของบรรทัดที่เลือกตามที่เป็นอยู่ตอนที่เลือกบรรทัดนั้น", "hideWaveformToolbar": "ซ่อนแถบเครื่องมือ {0}", "resetZoomAndSpeed": "รีเซ็ตการซูมและความเร็วการเล่น {0}", "removeBlankLines": "ลบบรรทัดว่าง {0}", @@ -1057,6 +1095,15 @@ "textPlayHint": "เล่นคำบรรยายปัจจุบันและหยุดเมื่อจบ {0}", "textPauseHint": "หยุดการเล่นชั่วคราว {0}", "textNextHint": "เล่นคำบรรยายถัดไปและหยุดเมื่อจบ {0}", + "moveSelectedLines": "ย้ายบรรทัดที่เลือก (ปุ่มถอยหลัง/เดินหน้า)", + "moveSelectedLinesAndFollowing": "ย้ายบรรทัดที่เลือกและบรรทัดถัดไปทั้งหมด (ปุ่มถอยหลัง/เดินหน้า)", + "moveAllLines": "ย้ายทุกบรรทัด (ปุ่มถอยหลัง/เดินหน้า)", + "moveSelectedLinesBackHint": "ย้ายบรรทัดที่เลือกถอยหลัง {0} ms {1}", + "moveSelectedLinesForwardHint": "ย้ายบรรทัดที่เลือกเดินหน้า {0} ms {1}", + "moveSelectedLinesAndFollowingBackHint": "ย้ายบรรทัดที่เลือกและบรรทัดถัดไปทั้งหมดถอยหลัง {0} ms {1}", + "moveSelectedLinesAndFollowingForwardHint": "ย้ายบรรทัดที่เลือกและบรรทัดถัดไปทั้งหมดเดินหน้า {0} ms {1}", + "moveAllLinesBackHint": "ย้ายทุกบรรทัดถอยหลัง {0} ms {1}", + "moveAllLinesForwardHint": "ย้ายทุกบรรทัดเดินหน้า {0} ms {1}", "guessStartNoLineSelected": "เดาจุดเริ่มต้น: ไม่ได้เลือกบรรทัด", "guessStartTimeCodesLocked": "เดาจุดเริ่มต้น: ไทม์โค้ดถูกล็อกอยู่", "guessStartNoWaveform": "เดาจุดเริ่มต้น: ไม่มีคลื่นเสียง", @@ -1078,12 +1125,15 @@ "charactersPerSecond": "อักขระ/วินาที: {0}", "chooseColumn": "เลือกคอลัมน์", "columnPaste": "วางแบบคอลัมน์", + "commandPaletteTitle": "แผงคำสั่ง", + "commandPaletteSearchPlaceholder": "พิมพ์เพื่อค้นหาคำสั่ง...", + "commandPaletteNoCommandsFound": "ไม่พบคำสั่งที่ตรงกัน", "createdEmptyTranslation": "สร้างคำแปลว่างจากคำบรรยายปัจจุบันแล้ว", "deleteText": "ลบข้อความ", "deleteTextAndShiftCellsUp": "ลบข้อความและเลื่อนเซลล์ขึ้น", "endTimeMustBeAfterStartTime": "เวลาสิ้นสุดต้องอยู่หลังเวลาเริ่มต้น", "errorLoad7Zip": "ไฟล์นี้ดูเหมือนจะเป็นไฟล์บีบอัด 7-Zip\n\nSubtitle Edit ไม่สามารถเปิดไฟล์บีบอัดได้", - "errorLoadBinaryZeroes": "ขออภัย ไฟล์นี้มีแต่ศูนย์ไบนารีเท่านั้น!\n\nหากคุณเคยแก้ไขไฟล์นี้ด้วย Subtitle Edit คุณอาจหาข้อมูลสำรองได้จากเมนู ไฟล์ -> กู้คืนข้อมูลสำรองอัตโนมัติ...", + "errorLoadBinaryZeroes": "ขออภัย ไฟล์นี้มีแต่ศูนย์ไบนารีเท่านั้น!\n\nหากคุณเคยแก้ไขไฟล์นี้ด้วย Subtitle Edit คุณอาจหาข้อมูลสำรองได้จากเมนู ไฟล์ -> กู้คืนข้อมูลสำรองอัตโนมัติ...", "errorLoadGZip": "ไฟล์นี้ดูเหมือนจะเป็นไฟล์บีบอัด GZip\n\nSubtitle Edit ไม่สามารถเปิดไฟล์บีบอัดได้", "errorLoadLargeFile": "ไฟล์นี้ใหญ่เกินกว่าจะเปิดเป็นไฟล์คำบรรยายได้", "errorLoadVideoFilePrompt": "ไฟล์นี้ดูเหมือนจะเป็นไฟล์วิดีโอ:\n{0}\n\nคุณสามารถเปิดวิดีโอผ่าน \"วิดีโอ -> เปิดวิดีโอ\" หรือลากแล้ววางวิดีโอลงบนโปรแกรมเล่นวิดีโอ\n\nต้องการเปิดเป็นไฟล์วิดีโอหรือไม่?", @@ -1116,18 +1166,20 @@ "numberOfLinesEvenlyDistributedX": "กระจาย {0} บรรทัดอย่างสม่ำเสมอแล้ว", "oneLineCopiedFromOriginal": "คัดลอกหนึ่งบรรทัดจากคำบรรยายต้นฉบับแล้ว", "oneLineCopiedToOriginal": "คัดลอกหนึ่งบรรทัดไปยังคำบรรยายต้นฉบับแล้ว", + "onlineOnlyVideo": "วิดีโอที่อยู่บนออนไลน์เท่านั้น", + "onlineOnlyVideoXSizeYDownloadAndOpen": "ไฟล์วิดีโอ \"{0}\" ({1}) ถูกจัดเก็บไว้บนออนไลน์เท่านั้น เช่น ใน Dropbox หรือ iCloud Drive และต้องดาวน์โหลดก่อนจึงจะเปิดได้\n\nดาวน์โหลดและเปิดตอนนี้หรือไม่?", "oneLineMerged": "รวมหนึ่งบรรทัดแล้ว", "oneLineSwitched": "สลับหนึ่งบรรทัดแล้ว", "overwriteExistingCells": "เขียนทับเซลล์ที่มีอยู่", "overwriteOrShiftCellsDown": "เขียนทับ/เลื่อนเซลล์ลง", "parsingMatroskaFile": "กำลังแยกวิเคราะห์ไฟล์ Matroska...", + "readingDvdSubtitles": "กำลังอ่านคำบรรยาย DVD...", "pasteFromClipboardDotDotDot": "วางจากคลิปบอร์ด...", "redoPerformed": "ทำซ้ำแล้ว", "redoPerformedXActionLeft": "ทำซ้ำแล้ว (การกระทำที่เหลือ: {0})", "removedUnicodeControlCharactersX": "ลบอักขระควบคุม Unicode ออกจาก {0} บรรทัดแล้ว", "removedXBlankLines": "ลบบรรทัดว่าง {0} บรรทัดแล้ว", "replacedXWithYCountZ": "แทนที่ \"{0}\" ด้วย \"{1}\" แล้ว ({2} ตำแหน่ง)", - "replacedXWithYInLineZ": "แทนที่ \"{0}\" ด้วย \"{1}\" ในบรรทัด {2} แล้ว", "reversedStartAndEndingsForRightToLeftX": "กลับต้นและท้ายสำหรับข้อความขวาไปซ้ายใน {0} บรรทัดแล้ว", "ruleProfileIsX": "โปรไฟล์กฎตอนนี้คือ \"{0}\"", "saveLanguageFile": "บันทึกไฟล์ภาษา", @@ -1135,7 +1187,6 @@ "shiftTextCellsDown": "เลื่อนเซลล์ข้อความลง", "singleLineLength": "ความยาวบรรทัด: ", "speedIsNowX": "ความเร็วตอนนี้คือ \"{0}\"", - "spellCheckResult": "ตรวจสอบการสะกดเสร็จสมบูรณ์ \n\n• คำที่เปลี่ยน: {0}\n• คำที่ข้าม: {1}", "subtitleGridFormattingX": "การจัดรูปแบบตาราง: {0}", "subtitleImportedFromMatroskaFile": "นำเข้าคำบรรยายจากไฟล์ Matroska แล้ว", "textDown": "เลื่อนข้อความลง", @@ -1162,13 +1213,14 @@ "trimmedXLines": "ตัดช่องว่างในคำบรรยาย {0} บรรทัดแล้ว", "pastedXLinesOverSelectedLines": "วาง {0} บรรทัดทับบรรทัดที่เลือกแล้ว", "pastedXOfYLinesOverSelectedLines": "วาง {0} จาก {1} บรรทัดทับบรรทัดที่เลือกแล้ว - ส่วนที่เหลือไม่พอดีกับส่วนที่เลือก", + "insertedXLinesFromClipboard": "แทรก {0} บรรทัดจากคลิปบอร์ดแล้ว", "openOriginalDifferentNumberOfSubtitlesXY": "ไฟล์คำบรรยายต้นฉบับมีจำนวนคำบรรยายไม่เท่ากับไฟล์คำบรรยายปัจจุบัน\n\n• คำบรรยายต้นฉบับ: {0}\n• คำบรรยายปัจจุบัน: {1}", - "importXMatchingOriginalLines": "นำเข้าคำบรรยายต้นฉบับที่ตรงกัน {0} รายการหรือไม่?", "originalTextReadOnly": "ข้อความต้นฉบับ (อ่านอย่างเดียว)", "originalTextEditMode": "ข้อความต้นฉบับ (โหมดแก้ไข)", "originalIsReadOnlyNotSaved": "คำบรรยายต้นฉบับเป็นข้อมูลอ้างอิงแบบอ่านอย่างเดียวและไม่ได้ถูกบันทึก", "originalIsEmptyNotSaved": "คำบรรยายต้นฉบับไม่มีข้อความเลยและไม่ได้ถูกบันทึก", "originalIsReadOnlyReference": "คำบรรยายต้นฉบับเปิดอยู่เป็นข้อมูลอ้างอิงแบบอ่านอย่างเดียว", + "closeTranslationQuestionXY": "ปิดคำแปล \"{0}\" หรือไม่?\n\nคำบรรยายต้นฉบับ \"{1}\" จะกลายเป็นคำบรรยายที่คุณแก้ไข ตัวไฟล์คำแปลจะไม่ถูกเปลี่ยนแปลง", "allowEditOfOriginalSubtitle": "อนุญาตให้แก้ไขคำบรรยายต้นฉบับ", "showAllOriginalLinesX": "แสดงบรรทัดต้นฉบับทั้งหมด ({0} บรรทัดไม่มีคู่ที่ตรงกันที่นี่)", "showAllOriginalLinesHint": "บรรทัดที่ไม่มีคู่ที่ตรงกันจะแสดงเป็นแถวเพิ่มเติม เพื่อให้เห็นว่าคำแปลขาดอะไรไป", @@ -1203,6 +1255,7 @@ "fileExportedInFormatXToY": "ส่งออกไฟล์ในรูปแบบ {0} ไปที่ {1} แล้ว", "fileExportedInFormatXToFileY": "ส่งออกไฟล์ในรูปแบบ \"{0}\" ไปยังไฟล์ \"{1}\" แล้ว", "fixedXLines": "แก้ไข {0} บรรทัดแล้ว", + "toolXChangedYLines": "{0}: เปลี่ยนแปลง {1} บรรทัด", "transcriptionCompletedWithXLines": "ถอดเสียงเสร็จสมบูรณ์ ได้ {0} บรรทัด", "openSubtitleFileX": "เปิดไฟล์คำบรรยาย \"{0}\" หรือไม่?", "replacedXOccurrences": "แทนที่แล้ว {0} ตำแหน่ง", @@ -1234,13 +1287,9 @@ "file": { "ebuSaveOptions": { "title": "ตัวเลือกการบันทึก EBU", - "generalSubtitleInformation": "ข้อมูลคำบรรยายทั่วไป", "codePageNumber": "หมายเลขโค้ดเพจ", "diskFormatCode": "รหัสรูปแบบดิสก์", "displayStandardCode": "รหัสมาตรฐานการแสดงผล", - "colorRequiresTeletext": "สีต้องใช้เทเลเท็กซ์!", - "alignmentRequiresTeletext": "การจัดวางต้องใช้เทเลเท็กซ์!", - "teletextCharsShouldBe38": "'จำนวนอักขระสูงสุดต่อแถว' สำหรับเทเลเท็กซ์ควรเป็น 38!", "characterCodeTable": "ตารางอักขระ", "languageCode": "รหัสภาษา", "originalProgramTitle": "ชื่อรายการต้นฉบับ", @@ -1257,7 +1306,6 @@ "maxNumberOfDisplayableRows": "จำนวนแถวสูงสุด", "diskSequenceNumber": "หมายเลขลำดับดิสก์", "totalNumberOfDisks": "จำนวนดิสก์ทั้งหมด", - "import": "นำเข้า...", "textAndTimingInformation": "ข้อมูลข้อความและจังหวะเวลา", "justificationCode": "รหัสการจัดชิดขอบ", "verticalPosition": "ตำแหน่งแนวตั้ง", @@ -1274,11 +1322,6 @@ "errors": "ข้อผิดพลาด", "errorsX": "ข้อผิดพลาด: {0}", "maxLengthError": "บรรทัด {0} เกินความยาวสูงสุด ({1}) อยู่ {2}: {3}", - "textUnchangedPresentation": "การแสดงผลแบบไม่เปลี่ยนแปลง", - "textLeftJustifiedText": "ข้อความชิดซ้าย", - "textCenteredText": "ข้อความกึ่งกลาง", - "textRightJustifiedText": "ข้อความชิดขวา", - "useBoxForOneNewLine": "เลือก 'ใช้กล่องล้อมรอบข้อความ' สำหรับการขึ้นบรรทัดใหม่เพียงครั้งเดียว", "maxLengthErrorTeletextColored": "บรรทัด {0}-{1}: จำนวนอักขระสูงสุดสำหรับข้อความสีความสูงสองเท่าควรเป็น 36 (ไม่ใช่ {2})", "maxLengthErrorTeletextWhite": "บรรทัด {0}-{1}: จำนวนอักขระสูงสุดสำหรับข้อความสีขาวความสูงสองเท่าควรเป็น 37 (ไม่ใช่ {2})", "maxLengthErrorTeletextSingleHeight": "บรรทัด {0}: จำนวนอักขระสูงสุดสำหรับข้อความสีขาวความสูงปกติควรเป็น 38 (ไม่ใช่ {1})", @@ -1303,22 +1346,29 @@ "formattingDotDotDot": "การจัดรูปแบบ...", "imageBasedSubtitleForEditDotDotDot": "คำบรรยายแบบภาพสำหรับแก้ไข...", "imageBasedSubtitleForOcrDotDotDot": "คำบรรยายแบบภาพสำหรับ OCR...", + "dvdSubtitlesDotDotDot": "คำบรรยายจาก DVD (IFO/VOB)...", + "titleImportDvd": "นำเข้าคำบรรยายจาก DVD", + "dvdIfoFile": "ไฟล์ IFO", + "dvdVobFiles": "ไฟล์ VOB", + "dvdVideoStandard": "มาตรฐานวิดีโอ", + "dvdStartRipping": "เริ่มริป", + "dvdRippingAborted": "ยกเลิกการริปแล้ว", + "dvdOpenIfoFile": "เปิดไฟล์ DVD IFO", + "dvdAddVobFiles": "เพิ่มไฟล์ VOB", + "dvdIfoFiles": "ไฟล์ DVD IFO", + "dvdVobFileType": "ไฟล์ DVD VOB", + "dvdDropHint": "เปิดไฟล์ IFO (VIDEO_TS\\VTS_01_0.IFO) หรือเพิ่มไฟล์ VOB - หรือลากมาวางที่นี่", + "dvdNotAnIfoFileX": "{0} ไม่ใช่ไฟล์ DVD IFO", + "dvdMenuIfoNoTitleSetsX": "ไม่พบชุดไตเติล (VTS_xx_0.IFO) ข้าง {0}", + "dvdEncryptedXOfY": "แพ็กเก็ตคำบรรยาย {0} จาก {1} ยังคงเข้ารหัส CSS อยู่ - ไฟล์ VOB เหล่านี้ถูกคัดลอกมาโดยไม่ได้ถอดรหัส ภาพคำบรรยายบางภาพจึงจะผิดเพี้ยน\n\nถอดรหัส DVD ด้วยเครื่องมือริป DVD ก่อนเพื่อผลลัพธ์ที่สมบูรณ์\n\nดำเนินการต่อหรือไม่?", "splitTextAt": "แยกข้อความที่", "blankLines": "บรรทัดว่าง", "oneLineIsOneSubtitle": "หนึ่งบรรทัดคือหนึ่งซับไตเติล", "twoLinesAreOneSubtitle": "สองบรรทัดคือหนึ่งซับไตเติล", "importFilesDotDotDot": "นำเข้าไฟล์...", "multipleFiles": "นำเข้าจากไฟล์ข้อความหลายไฟล์ (หนึ่งไฟล์คือหนึ่งซับไตเติล)", - "importOptions": "ตัวเลือกการนำเข้า", - "autoSplitText": "แบ่งข้อความอัตโนมัติ", - "lineMode": "โหมดบรรทัด", "maxLineLength": "ความยาวบรรทัดสูงสุด", - "maxLinesPerSubtitle": "จำนวนบรรทัดสูงสุดต่อซับไตเติล", - "minGapBetweenSubtitles": "ช่องว่างต่ำสุดระหว่างซับไตเติล", "mergeShortLines": "รวมบรรทัดสั้น", - "removeLinesWithoutLetters": "ลบบรรทัดที่ไม่มีตัวอักษร", - "splitAtEndCharsSetting": "แบ่งที่อักขระท้ายประโยค", - "takeTimeFromCurrentFile": "ใช้เวลาจากไฟล์ปัจจุบัน", "fixed": "คงที่", "numberOfSubtitlesX": "จำนวนซับไตเติล: {0}", "numberOfSubtitlesXForcedY": "จำนวนคำบรรยาย: {0} (บังคับแสดง {1})", @@ -1330,14 +1380,18 @@ "forcedAlignerProgress": "กำลังจัดแนว... ช่วงที่ {0} จาก {1}, {2} จาก {3} บรรทัด", "forcedAlignerSetupTitle": "จัดตำแหน่งไทม์โค้ดผ่านตัวจัดแนวแบบบังคับ", "forcedAlignerSetupIntro": "ตัวจัดแนวแบบบังคับจะจับคู่ข้อความคำบรรยายที่คุณมีอยู่แล้วเข้ากับเสียง โดยไม่ต้องถอดเสียงก่อน วิดีโอยาวจะถูกจัดแนวเป็นช่วง ๆ จึงรองรับความยาวได้ทุกขนาด", + "forcedAlignerEndsFromSpeech": "กำหนดเวลาสิ้นสุดจากเสียงพูดที่แยกออกมา (ช้า)", + "forcedAlignerEndsFromSpeechHint": "Forced aligner จะหาตำแหน่งที่บรรทัดเริ่ม ไม่ใช่ตำแหน่งที่สิ้นสุด ดังนั้นเวลาสิ้นสุดปกติจะมาจากเวลาในการอ่าน เมื่อเปิดตัวเลือกนี้ ดนตรีและเสียงประกอบจะถูกลบออกจากเสียงก่อน และแต่ละบรรทัดจะสิ้นสุดตรงที่เสียงพูดเงียบลง ใช้เวลาประมาณเท่ากับความยาววิดีโอเมื่อมี GPU - และนานกว่านั้นหลายเท่าหากไม่มี", + "forcedAlignerIsolatingSpeech": "กำลังแยกเสียงพูด... {0}", + "forcedAlignerIsolatingSpeechFailed": "ไม่สามารถแยกเสียงพูดได้ - จึงกำหนดเวลาสิ้นสุดจากเวลาในการอ่านแทน", "forcedAlignerModel": "โมเดลตัวจัดแนว", - "forcedAlignerDownloadEngine": "ดาวน์โหลด / อัปเดตเอนจิน..." + "forcedAlignerDownloadEngine": "ดาวน์โหลด / อัปเดตเอนจิน...", + "forcedAlignerEstimatedXOfY": "{0} จาก {1} บรรทัดไม่สามารถจัดแนวได้และถูกวางตามเวลาในการอ่าน - ไทม์โค้ดของบรรทัดเหล่านี้เป็นเพียงค่าประมาณ สคริปต์อาจยาวกว่าสิ่งที่พูดในวิดีโอ" }, "export": { "exportImagesProfiles": "โปรไฟล์การส่งออกรูปภาพ", "leftRightMargin": "ระยะขอบซ้าย/ขวา", "topBottomMargin": "ระยะขอบบน/ล่าง", - "titleExportBluRaySup": "ส่งออก Blu-ray (sup)", "lineSpacingPercent": "ระยะห่างบรรทัด %", "paddingLeftRight": "ระยะเว้นซ้าย/ขวา", "paddingTopBottom": "ระยะเว้นบน/ล่าง", @@ -1378,10 +1432,21 @@ "titleExportDCinemaInteropPng": "D-Cinema interop/png", "titleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", "imageBasedSubtitleSaved": "บันทึกซับไตเติลแบบรูปภาพแล้ว", - "titleExportBdnXml": "ส่งออก BDN/xml", "titleExportWebVttThumbnails": "ส่งออก WebVTT (ภาพขนาดย่อ)", "fullFrameImage": "ภาพเต็มเฟรม", "fullFrameImageHint": "ทำให้แต่ละภาพมีขนาดเท่าเฟรมวิดีโอ โดยมีคำบรรยายอยู่ในตำแหน่งของมัน", + "stereo3D": "3D", + "stereo3DHint": "สำหรับวิดีโอ 3D: วาดคำบรรยายหนึ่งครั้งในแต่ละครึ่งของเฟรมสำหรับตาแต่ละข้าง", + "halfSideBySide": "Half side-by-side", + "halfTopBottom": "Half top/bottom", + "depth3D": "ความลึก", + "depth3DHint": "ระยะที่คำบรรยายลอยออกมาจากหน้าจอ - ค่าบวกทำให้ใกล้ขึ้น ค่าลบดันให้ถอยไป", + "plane3D": "3D-Plane", + "plane3DHint": "กำหนดความลึกที่ Blu-ray 3D เก็บไว้ให้กับคำบรรยายแต่ละรายการ จากไฟล์ 3D-Plane (.ofs) ที่สร้างโดย BD3D2MK3D หรือ OFSExtractor จะใช้ค่าความลึกในกรณีที่ 3D-Plane ไม่มีค่า", + "openPlane3DTitle": "เปิดไฟล์ 3D-Plane", + "unableToLoadPlane3DX": "ไม่สามารถโหลด 3D-Plane: {0}", + "plane3DXDepthYToZ": "{0} (ความลึก {1} ถึง {2})", + "plane3DXNoDepth": "{0} (ไม่มีค่าความลึก)", "textEffect": "เอฟเฟกต์ข้อความ", "textEffectSettingsTitle": "การตั้งค่าเอฟเฟกต์ข้อความ", "textEffectPreset": "พรีเซ็ต", @@ -1413,13 +1478,10 @@ "statistics": { "title": "สถิติ", "titleWithFileName": "สถิติ - {0}", - "generalStatistics": "สถิติทั่วไป", - "mostUsed": "ใช้บ่อยที่สุด...", "mostUsedLines": "บรรทัดที่ใช้บ่อยที่สุด", "mostUsedWords": "คำที่ใช้บ่อยที่สุด", "nothingFound": "ไม่พบสิ่งใด", "numberOfLinesX": "จำนวนบรรทัดซับไตเติล: {0:#,##0}", - "numberOfFilesX": "จำนวนไฟล์ซับไตเติล: {0:#,##0}", "lengthInFormatXinCharactersY": "จำนวนอักขระในรูปแบบ {0}: {1:#,###,##0}", "numberOfCharactersInTextOnly": "จำนวนอักขระเฉพาะในข้อความ: {0:#,###,##0}", "totalDuration": "ระยะเวลารวมของซับไตเติลทั้งหมด: {0:#,##0}", @@ -1460,7 +1522,6 @@ "gapMaximum": "ช่องว่าง - สูงสุด: {0:#,##0} มิลลิวินาที", "gapAverage": "ช่องว่าง - เฉลี่ย: {0:#,##0.##} มิลลิวินาที", "gapExceedingMinimum": "ช่องว่าง - ต่ำกว่าค่าต่ำสุด ({0:#,##0} มิลลิวินาที): {1} ({2:0.00}%)", - "export": "ส่งออก...", "subtitles": "คำบรรยาย", "words": "คำ", "totalDurationShort": "ระยะเวลารวม", @@ -1490,7 +1551,22 @@ "restoreAutoBackupFile": "กู้คืนไฟล์ข้อมูลสำรองอัตโนมัติ", "restoreXFromY": "คุณต้องการกู้คืน \"{0}\" จาก {1} หรือไม่?", "deleteAllSubtitleBackups": "คุณต้องการลบไฟล์สำรองซับไตเติลทั้งหมดหรือไม่?", - "deleteAll": "ลบทั้งหมด" + "deleteAll": "ลบทั้งหมด", + "subtitles": "คำบรรยาย", + "settingsBackupInfo": "Settings.json จะถูกสำรองข้อมูลเมื่อ Subtitle Edit เริ่มทำงาน อย่างมากทุกๆ {0} วัน และเฉพาะเมื่อการตั้งค่ามีการเปลี่ยนแปลง จะเก็บข้อมูลสำรองล่าสุดไว้ {1} รายการ", + "settingsBackupInfoEveryStart": "Settings.json จะถูกสำรองข้อมูลทุกครั้งที่ Subtitle Edit เริ่มทำงาน หากการตั้งค่ามีการเปลี่ยนแปลง จะเก็บข้อมูลสำรองล่าสุดไว้ {0} รายการ", + "settingsBackupOff": "การสำรองการตั้งค่าอัตโนมัติถูกปิดอยู่ (ตัวเลือก → การตั้งค่า → ไฟล์)", + "lastSettingsBackupX": "สำรองข้อมูลล่าสุด: {0}", + "noSettingsBackupsYet": "ยังไม่มีข้อมูลสำรองการตั้งค่า", + "openSettingsBackupFolder": "เปิดโฟลเดอร์สำรองการตั้งค่า", + "backUpSettingsNow": "สำรองข้อมูลตอนนี้", + "settingsBackedUp": "สำรองการตั้งค่าปัจจุบันแล้ว", + "restoreSettings": "กู้คืนการตั้งค่า", + "restoreSettingsFromX": "คุณต้องการแทนที่การตั้งค่าปัจจุบันด้วยข้อมูลสำรองจาก {0} หรือไม่?\n\nการตั้งค่าปัจจุบันของคุณจะถูกสำรองไว้ก่อน การเปลี่ยนแปลงบางอย่างจะมีผลหลังจากเริ่ม Subtitle Edit ใหม่เท่านั้น", + "settingsRestored": "กู้คืนการตั้งค่าแล้ว โปรดเริ่ม Subtitle Edit ใหม่เพื่อให้การเปลี่ยนแปลงทั้งหมดมีผล", + "settingsRestoreFailed": "ไม่สามารถกู้คืนการตั้งค่า: {0}", + "settingsBackupNotValid": "ข้อมูลสำรองไม่ใช่ไฟล์การตั้งค่าที่ถูกต้อง จึงคงการตั้งค่าปัจจุบันของคุณไว้", + "deleteAllSettingsBackups": "คุณต้องการลบไฟล์สำรองการตั้งค่าทั้งหมดหรือไม่?" }, "propertiesDCinema": { "title": "คุณสมบัติ D-Cinema SMPTE", @@ -1504,22 +1580,16 @@ "editRate": "อัตราการตัดต่อ", "timeCodeRate": "อัตราไทม์โค้ด", "startTime": "เวลาเริ่มต้น", - "font": "ฟอนต์", "fontId": "ID ฟอนต์", "fontUri": "URI ฟอนต์", - "generate": "สร้าง", - "fontColor": "สีฟอนต์", "chooseColor": "เลือกสี", "fontEffect": "เอฟเฟกต์ฟอนต์", "effectColor": "สีเอฟเฟกต์", - "fontSize": "ขนาดฟอนต์", "topBottomMargin": "ระยะขอบบน/ล่าง", "fadeUpTime": "เวลาเฟดเข้า", "fadeDownTime": "เวลาเฟดออก", - "frames": "เฟรม", "zPosition": "ตำแหน่งแกน Z", - "zPositionHelp": "ค่าบวกจะเลื่อนข้อความออกไปไกล ค่าลบจะเลื่อนข้อความเข้ามาใกล้ ถ้าตำแหน่งแกน Z เป็นศูนย์จะเป็นแบบ 2 มิติ", - "export": "ส่งออก..." + "zPositionHelp": "ค่าบวกจะเลื่อนข้อความออกไปไกล ค่าลบจะเลื่อนข้อความเข้ามาใกล้ ถ้าตำแหน่งแกน Z เป็นศูนย์จะเป็นแบบ 2 มิติ" }, "webVtt": { "setStylesForSelectedLinesTitle": "กำหนดสไตล์ WebVTT ให้บรรทัดที่เลือก", @@ -1552,20 +1622,66 @@ "compareOnlyInOneFile": "มีในไฟล์เดียวเท่านั้น", "compareTextOrTimeDifference": "ความแตกต่างของข้อความ/เวลา", "compareNumberDifference": "ความแตกต่างของหมายเลข", - "ignoreLineBreaks": "ไม่สนใจการขึ้นบรรทัดใหม่", "ignoreWhitespace": "ไม่สนใจช่องว่าง", "ignoreWhitespaceHint": "บรรทัดที่ต่างกันเพียงช่องว่าง แท็บ หรือการตัดบรรทัด จะไม่นับว่าต่างกัน", "ignoreFormatting": "ไม่สนใจการจัดรูปแบบ", - "onlyLookForDifferencesInText": "ค้นหาความแตกต่างเฉพาะในข้อความเท่านั้น", - "cannotCompareWithImageBasedSubtitles": "ไม่สามารถเปรียบเทียบกับซับไตเติลแบบรูปภาพได้", - "statisticsTitle": "สถิติ", "ignoreFormattingHint": "บรรทัดที่ต่างกันเพียงแท็กจัดรูปแบบ เช่น หรือ {\\an8} จะไม่นับว่าต่างกัน", "showOnlyDifferencesInText": "เฉพาะความแตกต่างในข้อความ", + "ignoreNumbering": "ละเว้นลำดับเลข", + "ignoreNumberingHint": "บรรทัดที่ต่างกันเฉพาะหมายเลขจะไม่นับว่าแตกต่าง", + "ignoreTimeDifferenceMs": "ค่าความคลาดเคลื่อนของเวลา (ms)", + "ignoreTimeDifferenceMsHint": "เวลาเริ่มต้นและสิ้นสุดที่ต่างกันไม่เกินจำนวนมิลลิวินาทีนี้จะไม่นับว่าแตกต่าง", + "compareDifferences": "ความแตกต่าง", + "compareTextDifferences": "ความแตกต่างของข้อความ", + "compareCurrent": "ปัจจุบัน", + "compareReference": "อ้างอิง", + "compareEditable": "แก้ไขได้", + "compareEditableHint": "การเปลี่ยนแปลงที่ทำที่นี่จะกลับไปยังคำบรรยายเมื่อคุณคลิก นำไปใช้", + "compareReadOnly": "อ่านอย่างเดียว", + "compareTakeFromReference": "ใช้ข้อความและเวลาจากไฟล์อ้างอิง", + "compareInsertFromReference": "แทรกบรรทัดนี้ลงในคำบรรยายปัจจุบัน", + "compareDeleteFromCurrent": "ลบบรรทัดนี้ออกจากคำบรรยายปัจจุบัน", + "compareTakeText": "ใช้ข้อความ", + "compareTakeTiming": "ใช้เวลา", + "compareEditLine": "แก้ไขบรรทัด", + "compareEditHint": "Ctrl+Enter เพื่อบันทึก, Esc เพื่อยกเลิก", + "compareEdited": "แก้ไขแล้ว", + "compareOnePendingChange": "การเปลี่ยนแปลงที่รอดำเนินการ 1 รายการ", + "compareXPendingChanges": "การเปลี่ยนแปลงที่รอดำเนินการ {0} รายการ", + "compareDiscardXChanges": "ละทิ้งการเปลี่ยนแปลง {0} รายการที่ทำในหน้าต่างเปรียบเทียบหรือไม่?", + "compareXChangesApplied": "เปรียบเทียบ: นำการเปลี่ยนแปลง {0} รายการไปใช้แล้ว", + "compareChangeTextX": "#{0} ข้อความจากไฟล์อ้างอิง", + "compareChangeTimingX": "#{0} เวลาจากไฟล์อ้างอิง", + "compareChangeTextAndTimingX": "#{0} ข้อความและเวลาจากไฟล์อ้างอิง", + "compareChangeEditedX": "#{0} แก้ไขแล้ว", + "compareChangeInsertedX": "#{0} แทรกแล้ว", + "compareChangeDeletedX": "#{0} ลบแล้ว", + "compareSyncPoint": "จุดซิงค์", + "compareSyncPointHint": "จุดซิงค์ - สองบรรทัดนี้จะแสดงเป็นคู่เสมอ และบรรทัดด้านบนและด้านล่างจะถูกจัดเรียงแยกกัน", + "compareSyncPickCurrent": "จุดซิงค์: ใช้บรรทัดปัจจุบันนี้", + "compareSyncPickReference": "จุดซิงค์: ใช้บรรทัดอ้างอิงนี้", + "compareSyncRemove": "ลบจุดซิงค์", + "compareClearXSyncPoints": "ล้างจุดซิงค์ ({0})", + "compareSyncCurrentPickedX": "เลือกบรรทัดปัจจุบัน #{0} เป็นจุดซิงค์แล้ว - เลือกบรรทัดอ้างอิงที่ตรงกันแล้วคลิก ซิงค์", + "compareSyncReferencePickedX": "เลือกบรรทัดอ้างอิง #{0} เป็นจุดซิงค์แล้ว - เลือกบรรทัดปัจจุบันที่ตรงกันแล้วคลิก ซิงค์", + "compareSyncWithCurrentX": "ซิงค์กับบรรทัดปัจจุบัน #{0}", + "compareSyncWithReferenceX": "ซิงค์กับบรรทัดอ้างอิง #{0}", + "compareSyncApply": "ซิงก์", + "compareSyncPointSetXY": "ตั้งจุดซิงค์แล้ว: บรรทัดปัจจุบัน #{0} และบรรทัดอ้างอิง #{1} แสดงเป็นคู่แล้ว", + "compareSyncAlreadyPairedXY": "บรรทัดปัจจุบัน #{0} และบรรทัดอ้างอิง #{1} แสดงเป็นคู่โดยมีเวลาเริ่มต้นเดียวกันอยู่แล้ว - ไม่มีอะไรต้องซิงค์", + "compareSyncPointShiftedXYZW": "ตั้งจุดซิงค์แล้ว: เลื่อนบรรทัดปัจจุบัน #{0}-#{1} ไป {2} ให้เริ่มพร้อมบรรทัดอ้างอิง #{3}", + "compareChangeSyncShiftXYZ": "#{0}-#{1} เลื่อน {2} (จุดซิงค์)", + "compareTimingDeltaHint": "ไฟล์อ้างอิงเริ่มและสิ้นสุดช้ากว่า (+) หรือเร็วกว่า (−) บรรทัดปัจจุบันเท่าใด", "loadXFromFile": "โหลด \"{0}\" จากไฟล์", + "compareLoadSavedFile": "โหลดไฟล์ที่บันทึกไว้", "saveCompareHtmlTitle": "บันทึกไฟล์ HTML เปรียบเทียบ", "pickMatroskaTrackX": "เลือกแทร็ก Matroska - {0}", "pickTransportStreamTrackX": "เลือกแทร็ก transport stream - {0}", + "chapters": "บท", + "dvdVobFilesMissingX": "ไฟล์ VOB ขาดหายไป (พบ {0}%)", "pickMp4TrackX": "เลือกแทร็ก MP4 - {0}", + "pickMxfTrackX": "เลือกแทร็ก MXF - {0}", + "pickMpegTrackX": "เลือกแทร็ก MPEG - {0}", "rosettaProperties": "คุณสมบัติ Timed Text Rosetta IMSC", "rosettaFontSize": "ขนาดฟอนต์ (ความสูงแถว)", "propertyTimeBase": "ฐานเวลา", @@ -1575,7 +1691,6 @@ "propertyDefaultRegion": "พื้นที่เริ่มต้น", "propertyStyleAttributeName": "ชื่อแอตทริบิวต์สไตล์", "propertyTimeCodeFormat": "รูปแบบไทม์โค้ด", - "propertyFileExtension": "นามสกุลไฟล์", "propertyTopOrigin": "จุดกำเนิดด้านบน", "propertyTopExtent": "ขอบเขตด้านบน", "propertyBottomOrigin": "จุดกำเนิดด้านล่าง", @@ -1625,7 +1740,6 @@ "selectionIntersect": "อินเตอร์เซกต์กับการเลือก" }, "multipleReplace": { - "title": "แทนที่หลายรายการ", "editRule": "แก้ไขกฎ", "newRule": "กฎใหม่", "editCategory": "แก้ไขหมวดหมู่", @@ -1642,24 +1756,23 @@ "findWhat": "ค้นหาอะไร", "descriptionOptional": "คำอธิบาย (ไม่บังคับ)", "invalidRegularExpressionX": "นิพจน์ทั่วไปไม่ถูกต้อง: {0}", - "regularExpressionTooSlowX": "นิพจน์ทั่วไปหยุดทำงานหลังจาก {0} วินาที - ข้ามกฎนี้ ลองใช้รูปแบบที่ง่ายกว่า" + "regularExpressionTooSlowX": "นิพจน์ทั่วไปหยุดทำงานหลังจาก {0} วินาที - ข้ามกฎนี้ ลองใช้รูปแบบที่ง่ายกว่า", + "moveToCategory": "ย้ายไปยังหมวดหมู่" }, "find": { "searchTextWatermark": "ค้นหาข้อความ...", "wholeWord": "ทั้งคำ", - "caseSensitive": "ตรงตามตัวพิมพ์ใหญ่-เล็ก", - "caseInsensitive": "ไม่สนใจตัวพิมพ์ใหญ่-เล็ก", "findPrevious": "ค้นหาก่อนหน้า", "findNext": "ค้นหาถัดไป", "replaceAndFindNext": "แทนที่และค้นหาถัดไป", "replaceAll": "แทนที่ทั้งหมด", - "replaceTitle": "แทนที่", - "replaceWith": "แทนที่ด้วย", "replaceTextWatermark": "แทนที่ด้วย...", "replaceIn": "แทนที่/ค้นหาใน", "replaceInTextAndOriginal": "ข้อความและข้อความต้นฉบับ", "replaceInTextOnly": "เฉพาะข้อความ", - "replaceInOriginalOnly": "เฉพาะข้อความต้นฉบับ" + "replaceInOriginalOnly": "เฉพาะข้อความต้นฉบับ", + "replacedOneOccurrence": "แทนที่แล้ว 1 ตำแหน่ง", + "replacedXOccurrences": "แทนที่แล้ว {0} ตำแหน่ง" }, "regularExpressionContextMenu": { "wordBoundary": "ขอบเขตคำ (\\b)", @@ -1687,6 +1800,7 @@ "xLinesYSubtitles": "{0} บรรทัด, {1} คำบรรยาย", "xLinesYSubtitlesZErrors": "{0} บรรทัด, {1} คำบรรยาย, ข้อผิดพลาด {2} รายการ", "couldNotParseAsX": "ไม่สามารถแปลงข้อมูลเป็น {0} ได้", + "readAsXUseAsY": "ไม่สามารถอ่านซอร์สเป็น {1} ได้ แต่สามารถอ่านเป็น {0} ได้\nใช้บรรทัดเหล่านี้และบันทึกเป็น {1} ต่อไปหรือไม่?", "selectedXCharactersYLines": "เลือกแล้ว: {0} อักขระใน {1} บรรทัด", "replacedXOccurrences": "แทนที่แล้ว {0} รายการ", "invalidRegularExpression": "นิพจน์ทั่วไปไม่ถูกต้อง", @@ -1701,7 +1815,6 @@ "aiReview": { "title": "รีวิวด้วย AI", "review": "รีวิว", - "stop": "หยุด", "editPrompt": "แก้ไขพรอมต์...", "editPromptTitle": "แก้ไขพรอมต์รีวิว", "promptInfo": "คำสั่งที่ส่งไปยังโมเดล - {language} จะถูกแทนที่ด้วยภาษาของซับไตเติล", @@ -1712,7 +1825,6 @@ "reviewingLineXOfY": "กำลังรีวิวบรรทัด {0} จาก {1}...", "reviewDone": "รีวิวเสร็จสิ้น - {0} ข้อเสนอแนะใน {1} บรรทัด", "noIssuesFound": "ไม่พบปัญหา", - "categoryAll": "ทั้งหมด", "categorySpelling": "การสะกดคำ", "categoryGrammar": "ไวยากรณ์", "categoryPunctuation": "เครื่องหมายวรรคตอน", @@ -1724,8 +1836,23 @@ "largeChangeWarning": "การเปลี่ยนแปลงขนาดใหญ่ - ดูเหมือนการเขียนใหม่ กรุณาตรวจสอบอย่างระมัดระวัง", "mismatchWarning": "ไม่คล้ายกับต้นฉบับ - อาจเป็นของบรรทัดอื่น", "engineError": "ไม่สามารถเชื่อมต่อกับเอนจิน AI ได้: {0}", - "setupHint": "กรุณาเลือกเอนจินและโมเดลใน เครื่องมือ -> รีวิวด้วย AI ก่อน", - "playCurrentLineHint": "เล่นบรรทัดที่เลือกในโปรแกรมเล่นวิดีโอและหยุดชั่วคราวเมื่อจบบรรทัด (ดับเบิลคลิกที่บรรทัดก็ได้)" + "playCurrentLineHint": "เล่นบรรทัดที่เลือกในโปรแกรมเล่นวิดีโอและหยุดชั่วคราวเมื่อจบบรรทัด (ดับเบิลคลิกที่บรรทัดก็ได้)", + "editAfterHint": "คลิกข้อความของแถวที่เลือกเพื่อแก้ไขการแก้ก่อนนำไปใช้ (Enter บันทึก, Escape ยกเลิก)", + "template": "เทมเพลต", + "templatePlaceholder": "เลือกเทมเพลตเพื่อแทนที่พรอมต์", + "templateStandard": "พิสูจน์อักษรมาตรฐาน", + "templateSpeechToText": "ทำความสะอาดผลแปลงเสียงเป็นข้อความ", + "templateMachineTranslation": "แก้ไขการแปลด้วยเครื่อง", + "templateSdh": "SDH / ผู้บกพร่องทางการได้ยิน", + "referenceContext": "บริบทอ้างอิง", + "referenceContextInfo": "ไม่บังคับ ชื่อ ตัวละคร อภิธานศัพท์ เรื่องย่อ หรือบันทึกสไตล์ - โมเดลจะถือว่าข้อมูลนี้เป็นหลักสำหรับชื่อและคำศัพท์ ส่งไปพร้อมทุกชุด", + "referenceContextPlaceholder": "ชื่อ: Kaito, Aunt Mei, Dr. Hollis\nคำศัพท์: Shinkansen, warp core\nเรื่องย่อ: Kaito เดินทางไปโตเกียวเพื่อตามหาพ่อที่หายตัวไป", + "generateContext": "สร้างด้วย AI", + "generateContextHint": "ให้เอนจิน AI ที่เลือกอ่านคำบรรยายและร่างชื่อ คำศัพท์ และเรื่องย่อ - ตรวจสอบผลลัพธ์ก่อนใช้งาน", + "generatingContextPartXOfY": "กำลังอ่านส่วนที่ {0} จาก {1}...", + "generatingContextSynopsis": "กำลังเขียนเรื่องย่อ...", + "replaceContextQuestion": "แทนที่บริบทอ้างอิงปัจจุบันหรือไม่?", + "noContextGenerated": "เอนจิน AI ไม่ได้ส่งคืนข้อมูลอ้างอิงที่ใช้ได้" }, "aiAssistant": { "title": "ผู้ช่วย AI", @@ -1743,22 +1870,14 @@ "showReasoning": "แสดงการให้เหตุผลของโมเดล" }, "fixCommonErrors": { - "title": "แก้ไขข้อผิดพลาดทั่วไป", - "step1": "ขั้นตอนที่ 1/2 - เลือกข้อผิดพลาดที่จะแก้ไข", - "whatToFix": "สิ่งที่จะแก้ไข", - "example": "ตัวอย่าง", - "selectAll": "เลือกทั้งหมด", - "inverseSelection": "สลับการเลือก", "back": "< ย้อนกลับ", "next": "ถัดไป >", - "step2": "ขั้นตอนที่ 2/2 - ตรวจสอบการแก้ไข", "fixes": "การแก้ไข", "ruleDetailsDotDotDot": "รายละเอียดกฎ...", "showOnlyThisRule": "แสดงเฉพาะการแก้ไขจากกฎนี้", "appliedRulesForLineX": "กฎที่ใช้กับบรรทัด {0}", "ruleX": "กฎ: {0}", "log": "บันทึกเหตุการณ์", - "function": "ฟังก์ชัน", "removedEmptyLine": "ลบบรรทัดว่าง", "removedEmptyLineAtTop": "ลบบรรทัดว่างด้านบน", "removedEmptyLineAtBottom": "ลบบรรทัดว่างด้านล่าง", @@ -1779,13 +1898,13 @@ "removeLineBreaksPixelWidth": "รวมซับไตเติลที่พอดีในบรรทัดเดียวได้ (ความกว้างพิกเซล)", "fixUppercaseIInsideLowercaseWords": "แก้ไข 'i' ตัวพิมพ์ใหญ่ในคำตัวพิมพ์เล็ก (ข้อผิดพลาด OCR)", "fixDoubleApostrophes": "แก้ไขอะพอสทรอฟีคู่ ('') เป็นอัญประกาศเดี่ยว (\")", + "fixMisreadQuotes": "แก้ไขอะพอสทรอฟีที่อ่านผิดเป็นอัญประกาศคู่ (OCR, ภาษาอังกฤษ)", "addPeriods": "เพิ่มจุดหลังบรรทัดเมื่อบรรทัดถัดไปขึ้นต้นด้วยตัวพิมพ์ใหญ่", "startWithUppercaseLetterAfterParagraph": "ขึ้นต้นด้วยตัวพิมพ์ใหญ่หลังย่อหน้า", "startWithUppercaseLetterAfterPeriodInsideParagraph": "ขึ้นต้นด้วยตัวพิมพ์ใหญ่หลังจุดภายในย่อหน้า", "startWithUppercaseLetterAfterColon": "ขึ้นต้นด้วยตัวพิมพ์ใหญ่หลังทวิภาค/อัฒภาค", "fixLowercaseIToUppercaseI": "แก้ไข 'i' ตัวพิมพ์เล็กที่อยู่โดดๆ เป็น 'I' (ภาษาอังกฤษ)", "fixCommonOcrErrors": "แก้ไขข้อผิดพลาด OCR ทั่วไป (ใช้รายการแทนที่ OCR)", - "commonOcrErrorsFixed": "แก้ไขข้อผิดพลาด OCR ทั่วไปแล้ว (ใช้ไฟล์ OcrReplaceList): {0}", "removeSpaceBetweenNumber": "ลบช่องว่างระหว่างตัวเลข", "breakDialogsOnOneLine": "แยกบทสนทนาที่อยู่ในบรรทัดเดียว", "removeDialogFirstInNonDialogs": "ลบขีดนำหน้าในบรรทัดแรกสำหรับข้อความที่ไม่ใช่บทสนทนา", @@ -1802,18 +1921,17 @@ "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Foo
bar! -> Foo bar!", "fixDoubleApostrophesExample": "''Has double single quotes'' -> \"Has single double quote\"", + "fixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "addPeriodsExample": "Hello world -> Hello world.", "startWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: Foobar!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Hello there! how are you? -> Hello there! How are you?", "startWithUppercaseLetterAfterColonExample": "Speaker: hello world! -> Speaker: Hello world!", "removeHyphensSingleLineExample": "- Foobar. -> Foobar.", "fix3PlusLinesExample": "Foo
bar
baz! -> Foo bar baz!", - "xMissingQuotesAdded": "เพิ่มอัญประกาศที่ขาดหายไปแล้ว: {0}", "fix3PlusLine": "แก้ไขซับไตเติลที่มีมากกว่าสองบรรทัด", "fix3PlusLines": "แก้ไขซับไตเติลที่มีมากกว่าสองบรรทัด", "analysing": "กำลังวิเคราะห์...", "nothingToFix": "ไม่มีอะไรต้องแก้ไข :)", - "fixesFoundX": "พบการแก้ไข: {0}", "xFixesApplied": "นำการแก้ไขไปใช้แล้ว: {0}", "xFixesYSelected": "{0} การแก้ไข - เลือกแล้ว {1}", "nothingFixableBut": "ไม่สามารถแก้ไขอะไรได้โดยอัตโนมัติ ซับไตเติลมีข้อผิดพลาด - ดูรายละเอียดในบันทึกเหตุการณ์", @@ -1822,7 +1940,6 @@ "fixFirstLetterToUppercaseAfterParagraph": "แก้ไขตัวอักษรแรกเป็นตัวพิมพ์ใหญ่หลังย่อหน้า", "mergeShortLine": "รวมบรรทัดสั้น (ประโยคเดียว)", "mergeShortLineAll": "รวมบรรทัดสั้น (ทั้งหมดยกเว้นบทสนทนา)", - "unbreakShortLinePixelWidth": "รวมบรรทัดสั้น (ความกว้างพิกเซล)", "breakLongLine": "แบ่งบรรทัดยาว", "fixLongDisplayTime": "แก้ไขเวลาแสดงผลที่ยาวเกินไป", "fixInvalidItalicTag": "แก้ไขแท็กตัวเอียงที่ไม่ถูกต้อง", @@ -1845,7 +1962,6 @@ "fixUppercaseIInsideLowercaseWord": "แก้ไข 'i' ตัวพิมพ์ใหญ่ในคำตัวพิมพ์เล็ก", "fixMissingPeriodAtEndOfLine": "เพิ่มจุดที่ขาดหายไปที่ท้ายบรรทัด", "refreshFixes": "รีเฟรชการแก้ไขที่มีอยู่", - "applyFixes": "นำการแก้ไขที่เลือกไปใช้และปิด", "autoBreak": "แบ่งบรรทัดอัตโนมัติ", "unbreak": "รวมบรรทัด", "fixDoubleDash": "แก้ไข '--' -> '...'", @@ -1864,8 +1980,6 @@ "fixSpaceBetweenNumbersExample": "1 100 -> 1100", "fixDialogsOneLineExample": "Hi John! - Hi Ida! -> Hi John!
- Hi Ida!", "removeDialogFirstInNonDialogsExample": "- How are you? -> How are you?", - "selectDefault": "เลือกค่าเริ่มต้น", - "setDefault": "ตั้งการแก้ไขปัจจุบันเป็นค่าเริ่มต้น", "fixContinuationStyleX": "แก้ไขสไตล์ความต่อเนื่อง: {0}", "fixUnnecessaryLeadingDots": "ลบจุดนำหน้าที่ไม่จำเป็น", "fixCommonErrorsProfiles": "โปรไฟล์การแก้ไขข้อผิดพลาดทั่วไป", @@ -1873,7 +1987,6 @@ "searchRulesDotDotDot": "ค้นหากฎ...", "goToApplyFixes": "ไปที่การนำการแก้ไขไปใช้", "backToFixList": "กลับไปยังรายการแก้ไข", - "applyFixesAndClose": "นำการแก้ไขไปใช้และปิด", "fixCommonOcrErrorsStep2": "แก้ไขข้อผิดพลาดทั่วไป ขั้นตอนที่ 2 (นำการแก้ไขไปใช้)", "fixCommonOcrErrorsStep2FixesFoundX": "แก้ไขข้อผิดพลาดทั่วไป ขั้นตอนที่ 2 - พบการแก้ไข: {0}", "action": "การกระทำ", @@ -1886,18 +1999,11 @@ "adjustDurations": { "title": "ปรับระยะเวลา", "adjustVia": "ปรับผ่าน", - "seconds": "วินาที", - "percent": "เปอร์เซ็นต์", "recalculate": "คำนวณใหม่", "addSeconds": "เพิ่มวินาที", - "setAsPercent": "ตั้งเป็นเปอร์เซ็นต์ของระยะเวลา", "note": "หมายเหตุ: เวลาแสดงผลจะไม่ซ้อนทับเวลาเริ่มต้นของข้อความถัดไป", "fixed": "คงที่", - "milliseconds": "มิลลิวินาที", "extendOnly": "ขยายเท่านั้น", - "enforceDurationLimits": "บังคับใช้ระยะเวลาต่ำสุดและสูงสุด", - "checkShotChanges": "ไม่ขยายเกินจุดเปลี่ยนฉาก", - "batchCheckShotChanges": "เคารพจุดเปลี่ยนฉาก (ถ้ามี)", "recalculateRequiresOcrNote": "ไม่สามารถคำนวณใหม่ได้ — ซับไตเติลบางรายการไม่มีข้อความ OCR กรุณาทำ OCR ก่อน" }, "applyDurationLimits": { @@ -1905,6 +2011,8 @@ "fixMinDurationMs": "แก้ไขระยะเวลาต่ำสุด (มิลลิวินาที)", "doNotGoPastShotChange": "ไม่เกินจุดเปลี่ยนฉาก", "fixMaxDurationMs": "แก้ไขระยะเวลาสูงสุด (มิลลิวินาที)", + "fixMinDurationFrames": "แก้ไขระยะเวลาต่ำสุด (เฟรม)", + "fixMaxDurationFrames": "แก้ไขระยะเวลาสูงสุด (เฟรม)", "minimumDurationMilliseconds": "ระยะเวลาต่ำสุด (มิลลิวินาที):", "maximumDurationMilliseconds": "ระยะเวลาสูงสุด (มิลลิวินาที):", "maxDurationShouldBeHigherThanMinDuration": "ระยะเวลาสูงสุดควรมากกว่าระยะเวลาต่ำสุด", @@ -1924,12 +2032,8 @@ }, "beautifyTimeCodes": { "title": "ปรับแต่งไทม์โค้ด", - "beautifySettings": "การตั้งค่าการปรับแต่ง", "snapToFrames": "จัดชิดเฟรม", - "frameGap": "ช่องว่างเฟรม", "minDuration": "ระยะเวลาต่ำสุด (มิลลิวินาที)", - "shotChangeThreshold": "เกณฑ์จุดเปลี่ยนฉาก (มิลลิวินาที)", - "shotChangeOffset": "ออฟเซตจุดเปลี่ยนฉาก (เฟรม)", "original": "ต้นฉบับ", "beautified": "ปรับแต่งแล้ว", "subtitlesCount": "ซับไตเติล", @@ -1958,13 +2062,80 @@ "timeCodesExtractFailed": "ไม่สามารถอ่านรหัสเวลาจากวิดีโอได้", "timeCodesHint": "ดึงคิวเข้าหาเวลาเฟรมจริงของวิดีโอ แทนการสมมติว่าอัตราเฟรมคงที่ ต้องอ่านวิดีโอทั้งไฟล์หนึ่งครั้ง ผลลัพธ์จะถูกแคชไว้" }, + "improveTimeCodes": { + "title": "ปรับปรุงไทม์โค้ด (forced alignment)", + "aligner": "ตัวจัดแนว", + "alignerHint": "โมเดลที่ฟังหาแต่ละบรรทัดในเสียง ตัวเลือกที่ดีที่สุดสำหรับภาษาของคำบรรยายจะแสดงไว้ก่อน", + "maxShift": "การเลื่อนสูงสุด (วินาที)", + "maxShiftHint": "คำบรรยายอาจคลาดเคลื่อนได้มากเพียงใด บรรทัดที่เวลาเริ่มต้นจะเลื่อนไปไกลกว่านี้จะถูกคงไว้ตามเดิมและถูกทำเครื่องหมาย ไม่ว่าค่าจะเป็นเท่าใด บรรทัดเดี่ยวที่ต้องการเลื่อนไกลกว่าบรรทัดรอบข้างเกินครึ่งวินาทีจะไม่ถูกเลื่อนโดยไม่ตรวจสอบ: จะเลื่อนตามบรรทัดข้างเคียงหากบรรทัดเหล่านั้นเลื่อนทั้งหมด มิฉะนั้นจะแสดงโดยไม่ได้ทำเครื่องหมายถูกให้คุณตรวจสอบ", + "adjustStartTimes": "ปรับเวลาเริ่มต้น", + "adjustEndTimes": "ปรับเวลาสิ้นสุด", + "isolateSpeech": "แยกเสียงพูดก่อน (ช้า)", + "isolateSpeechHint": "ลบดนตรีและเสียงประกอบออกก่อนจัดแนว เพื่อให้ตัวจัดแนวได้ยินเฉพาะบทพูด ช่วยในบรรทัดที่พูดทับดนตรีเสียงดังหรือฉากแอ็กชัน แต่ใช้เวลาประมาณเท่ากับความยาวเสียงเมื่อมี GPU - และนานกว่านั้นหลายเท่าหากไม่มี", + "isolatingSpeech": "กำลังแยกเสียงพูด... (ใช้เวลาสักครู่)", + "isolateSpeechFailed": "ไม่สามารถแยกเสียงพูดได้ - จึงจัดแนวกับเสียงต้นฉบับแทน", + "checkWithSpeechToText": "ตรวจสอบด้วยการแปลงเสียงเป็นข้อความ", + "checkWithSpeechToTextHint": "ถอดเสียงด้วย และตรวจสอบการเลื่อนทุกครั้งเทียบกับตำแหน่งที่ได้ยินคำจริง การเลื่อนขนาดใหญ่ที่เสียงพูดยืนยันจะถูกทำเครื่องหมายถูกให้ และการเลื่อนออกจากตำแหน่งที่ได้ยินบรรทัดจะไม่ถูกทำเครื่องหมายเพื่อให้คุณตรวจสอบ ยังแสดงด้วยว่าได้ยินแต่ละบรรทัดมากเพียงใด - สัดส่วนต่ำหมายความว่าข้อความต่างจากสิ่งที่พูด คำบรรยายที่คลาดเคลื่อนมากกว่าการเลื่อนสูงสุด - การเหลื่อมคงที่ การเลื่อนไหลจากอัตราเฟรมที่ไม่ตรงกัน หรือการกระโดดในจุดที่ตัดฉาก - จะถูกซิงค์ด้วยคำที่ได้ยินก่อน ใช้ Crisp ASR Parakeet ซึ่งใช้เวลาไม่กี่นาทีสำหรับภาพยนตร์เรื่องยาวเมื่อมี GPU", + "checkWithSpeechToTextNotAvailableX": "การตรวจสอบด้วยการแปลงเสียงเป็นข้อความไม่พร้อมใช้งานสำหรับ {0}", + "transcribingToCheck": "กำลังถอดเสียงเพื่อตรวจสอบการจัดแนว...", + "speechToTextFailed": "การแปลงเสียงเป็นข้อความล้มเหลว - ไทม์โค้ดไม่ได้ถูกตรวจสอบเทียบกับผลนั้น", + "speechToTextX": "แปลงเสียงเป็นข้อความ: {0}", + "speechToTextConfirmedXDisputedY": "เสียงพูด: ยืนยัน {0}, โต้แย้ง {1}", + "hardlyHeardX": "การแปลงเสียงเป็นข้อความได้ยินเพียง {0}% ของคำในคำบรรยาย คำบรรยายเป็นภาษาเดียวกับที่พูดหรือไม่? ตัวจัดแนวไม่สามารถวางคำแปลได้", + "heard": "ได้ยิน", + "heardHint": "การแปลงเสียงเป็นข้อความได้ยินบรรทัดนี้มากเพียงใด สัดส่วนต่ำหมายความว่าข้อความต่างจากสิ่งที่พูด - ซึ่งเป็นจุดที่ตัวจัดแนวมีแนวโน้มผิดพลาดมากที่สุด", + "statusConfirmedBySpeech": "ยืนยันโดยเสียงพูด", + "statusDisputedBySpeech": "ได้ยินที่ตำแหน่งเดิม", + "statusMovedWithSync": "เลื่อนตามการซิงค์", + "syncedFirstXY": "ซิงค์ก่อน: {0} วินาทีที่ช่วงต้น, {1} วินาทีที่ช่วงท้าย", + "showSpeechOnly": "แสดงเฉพาะเสียงพูด", + "showSpeechOnlyHint": "วาดรูปคลื่นเสียงที่จัดแนวแล้วจากเสียงที่ลบดนตรีและเสียงประกอบออก รูปคลื่นเสียงต้นฉบับยังคงเดิมเพื่อใช้เปรียบเทียบ ใช้ได้เมื่อแยกเสียงพูดแล้ว - ที่นี่ หรือด้วย \"แสดงเฉพาะเสียงพูด\" ในรูปคลื่นเสียงของหน้าต่างหลัก", + "align": "จัดแนว", + "original": "ต้นฉบับ", + "aligned": "จัดแนวแล้ว", + "intro": "เลือกตัวจัดแนวแล้วกด \"จัดแนว\" เพื่อฟังหาทุกบรรทัดในเสียงและปรับไทม์โค้ดให้แม่นยำขึ้น", + "extractingAudio": "กำลังแยกเสียง...", + "aligningBatchXOfY": "กำลังจัดแนว... ชุดที่ {0} จาก {1}", + "extractAudioFailed": "ไม่สามารถแยกเสียงด้วย ffmpeg ได้", + "modelWillBeDownloaded": "จะดาวน์โหลด {0}", + "summaryXRetimedYKeptZSkipped": "ปรับเวลาใหม่: {0} · คงไว้: {1} · ไม่มีเสียงพูด: {2}", + "meanShiftX": "การเลื่อนเฉลี่ย: {0} ms", + "toCheckX": "ต้องตรวจสอบ: {0}", + "largeMovesToCheckX": "{0} บรรทัดจะเลื่อนไปไกลเพียงลำพังและไม่ได้ทำเครื่องหมายถูก - ฟังบรรทัดเหล่านั้น (F5 เล่นบรรทัดที่จัดแนวแล้ว, Shift+F5 เล่นต้นฉบับ) และทำเครื่องหมายถูกบรรทัดที่ถูกต้อง", + "linesToCheckX": "{0} บรรทัดไม่ได้ทำเครื่องหมายถูกเพื่อให้ตรวจสอบ - ฟังบรรทัดเหล่านั้น (F5 เล่นบรรทัดที่จัดแนวแล้ว, Shift+F5 เล่นต้นฉบับ) และทำเครื่องหมายถูกบรรทัดที่ถูกต้อง", + "changeXOfY": "การเปลี่ยนแปลง {0} จาก {1}", + "previousChange": "การเปลี่ยนแปลงก่อนหน้า", + "nextChange": "การเปลี่ยนแปลงถัดไป", + "startShift": "เริ่มต้น", + "endShift": "สิ้นสุด", + "statusRetimed": "ปรับเวลาใหม่แล้ว", + "statusMovedWithNeighbours": "เลื่อนตามบรรทัดข้างเคียง", + "statusLargeMoveUnconfirmed": "เลื่อนมาก - ฟังแล้วทำเครื่องหมายถูกเพื่อนำไปใช้", + "statusUnchanged": "อยู่ในตำแหน่งแล้ว", + "statusNoSpeech": "ไม่มีเสียงพูด", + "statusShiftTooLarge": "คงไว้ - เลื่อนมากเกินไป", + "statusFailed": "คงไว้ - ตัวจัดแนวล้มเหลว", + "statusAdjustedByHand": "ปรับด้วยตนเอง", + "alignedWaveformHint": "ลากบรรทัดเพื่อย้าย หรือลากขอบเพื่อเปลี่ยนเวลาเริ่มต้นหรือสิ้นสุด", + "playLine": "เล่นบรรทัด", + "undoAdjustment": "เลิกทำการปรับ", + "playPause": "เล่น / หยุดชั่วคราว", + "playAligned": "จัดแนวแล้ว", + "playAlignedHint": "เล่นบรรทัดที่เลือกด้วยไทม์โค้ดที่จัดแนวแล้ว", + "apply": "นำไปใช้", + "applyHint": "ยกเลิกเครื่องหมายถูกที่บรรทัดเพื่อคงไทม์โค้ดเดิมไว้ ดับเบิลคลิกบรรทัดเพื่อเล่น สามารถย้ายหรือปรับขนาดบรรทัดในรูปคลื่นเสียงที่จัดแนวแล้วได้ด้วย" + }, "beautifyTimeCodesProfile": { "title": "แก้ไขโปรไฟล์การปรับแต่งไทม์โค้ด", "loadPreset": "โหลดพรีเซ็ต", "presetDefault": "ค่าเริ่มต้น", "presetNetflix": "Netflix", "presetSdi": "SDI", - "general": "ทั่วไป", + "saveAsProfile": "บันทึกเป็นโปรไฟล์...", + "deleteProfile": "ลบโปรไฟล์", + "profileName": "ชื่อโปรไฟล์", + "overwriteProfileX": "มีโปรไฟล์ชื่อ \"{0}\" อยู่แล้ว เขียนทับหรือไม่?", + "deleteProfileX": "ลบโปรไฟล์ \"{0}\" หรือไม่?", "gap": "ช่องว่าง", "gapSuffix": "เฟรม (จะอัปเดตช่องช่องว่างที่ไม่เป็นศูนย์ด้านล่างด้วย)", "milliseconds": "มิลลิวินาที", @@ -1993,9 +2164,12 @@ "hintChaining": "วิธีจัดการซับไตเติลที่เกือบชิดกัน — ขยายให้ติดกัน หรือดันออกจากกัน ขึ้นอยู่กับว่ามีจุดเปลี่ยนฉากอยู่ระหว่างกลางหรือไม่" }, "bridgeGaps": { - "title": "เชื่อมช่องว่าง", "bridgeGapsSmallerThan": "เชื่อมช่องว่างที่เล็กกว่า (มิลลิวินาที)", "minGap": "ช่องว่างต่ำสุด (มิลลิวินาที)", + "bridgeGapsSmallerThanFrames": "เชื่อมช่องว่างที่เล็กกว่า (เฟรม)", + "minGapFrames": "ช่องว่างต่ำสุด (เฟรม)", + "calculateBridgeGapsSmallerThanDotDotDot": "คำนวณขีดจำกัดการเชื่อมช่องว่างจากอัตราเฟรม...", + "useXMsAsBridgeGapsSmallerThan": "เชื่อมช่องว่างที่เล็กกว่า \"{0}\" มิลลิวินาทีหรือไม่?", "numberOfSmallGapsBridgedX": "จำนวนช่องว่างเล็กที่เชื่อมแล้ว: {0}", "percentFoPrevious": "ช่องว่างสำหรับรายการก่อนหน้า (%)", "gapChange": "การเปลี่ยนแปลงช่องว่าง" @@ -2007,8 +2181,6 @@ "sortBy": { "title": "เรียงลำดับซับไตเติล", "sortOrder": "ลำดับการเรียง", - "sortByNumber": "หมายเลข", - "sortByStartTime": "เวลาเริ่มต้น", "sortByEndTime": "เวลาสิ้นสุด" }, "batchConvert": { @@ -2031,6 +2203,7 @@ "addColor": "เพิ่มสี", "deleteLinesWithSpecificActorsOrStyles": "ลบบรรทัดที่มีนักแสดงหรือสไตล์ (คั่นหลายรายการด้วยจุลภาค)", "useSourceStylesIfPossible": "ใช้สไตล์ต้นทางหากเป็นไปได้", + "keepSourceEmbeddedFonts": "คงฟอนต์ที่ฝังในต้นฉบับ (ส่วนท้าย)", "editStyles": "แก้ไขสไตล์", "editProperties": "แก้ไขคุณสมบัติ", "editAttachments": "แก้ไขไฟล์แนบ", @@ -2051,7 +2224,6 @@ "assaChangeStyleFromStyle": "เปลี่ยนสไตล์จาก", "assaChangeStyleToStyle": "เป็น", "assaChangeStyleImportStyle": "นำเข้าสไตล์...", - "assaChangeStyleImportedX": "นำเข้าแล้ว: {0}", "assaChangeStyleTrimUnusedStyles": "ตัดสไตล์ที่ไม่ได้ใช้ออก", "assaChangeStylePropertiesTitle": "เปลี่ยนคุณสมบัติของสไตล์", "assaChangeStylePropertiesInfo": "เปลี่ยนเฉพาะฟิลด์ที่เลือกในทุกสไตล์ในไฟล์ โดยไม่แตะต้องตัวสไตล์เอง", @@ -2063,13 +2235,52 @@ "convertColorsToDialogReBreakLines": "ตัดบรรทัดใหม่", "snapTimeCodesToFramesInfo": "ปัดเวลาเริ่มต้นและสิ้นสุดทุกค่าให้ตรงเฟรมที่ใกล้ที่สุด อัตราเฟรมจะอ่านจากไฟล์วิดีโอที่ชื่อเดียวกับไฟล์คำบรรยาย เว้นแต่จะเลือกอัตราเฟรมคงที่", "addFolderDotDotDot": "เพิ่มโฟลเดอร์...", + "addFolderRecursiveDotDotDot": "เพิ่มโฟลเดอร์รวมโฟลเดอร์ย่อย...", "selectFolderToConvert": "เลือกโฟลเดอร์ที่มีไฟล์ที่ต้องการแปลง", "includeSubfolders": "รวมโฟลเดอร์ย่อยเมื่อเพิ่มโฟลเดอร์", + "videoFilesWhenAddingFolder": "ไฟล์วิดีโอ (mkv, mp4, ts...) เมื่อเพิ่มโฟลเดอร์", + "videoFilesAsk": "ถาม", + "videoFilesInclude": "เพิ่มแทร็กคำบรรยายของไฟล์เหล่านั้น", + "videoFilesSkip": "ข้าม", + "folderContainsXVideoFiles": "โฟลเดอร์มีไฟล์วิดีโอ {0} ไฟล์ (mkv, mp4, ts...)\n\nเพิ่มแทร็กคำบรรยายที่ฝังอยู่ด้วย หรือเฉพาะไฟล์คำบรรยาย?", + "addVideoFiles": "เพิ่มไฟล์วิดีโอ", + "skipVideoFiles": "เฉพาะไฟล์คำบรรยาย", + "doNotAskAgainVideoFiles": "ไม่ต้องถามอีก (เปลี่ยนได้ในการตั้งค่าแปลงเป็นชุด)", + "settingsSectionOutput": "ผลลัพธ์", + "settingsSectionAddingFiles": "การเพิ่มไฟล์", + "settingsSectionImageBasedSubtitles": "คำบรรยายแบบภาพ (OCR)", + "settingsSectionOther": "อื่นๆ", "keepSourceFileTimestamp": "คงวันที่/เวลาของไฟล์ต้นทางไว้ในไฟล์ผลลัพธ์", - "scanningFolderX": "กำลังสแกน {0}..." + "preventSleepWhileConverting": "ป้องกันไม่ให้คอมพิวเตอร์เข้าสู่โหมดสลีประหว่างการแปลง", + "scanningFolderX": "กำลังสแกน {0}...", + "transportStreamSettings": "การตั้งค่า Transport Stream", + "transportStreamSettingsDotDotDot": "การตั้งค่า Transport Stream...", + "transportStreamSettingsInfo": "ใช้กับแทร็กคำบรรยายที่แยกจากไฟล์ Transport Stream (.ts/.m2ts) ตำแหน่งและขนาดวิดีโอมีผลเฉพาะแทร็กภาพ DVB ที่ส่งออกเป็นรูปแบบแบบภาพเท่านั้น", + "transportStreamOverrideXPosition": "แทนที่ตำแหน่ง X เดิม", + "transportStreamOverrideYPosition": "แทนที่ตำแหน่ง Y เดิม", + "transportStreamOverrideVideoSize": "แทนที่ขนาดวิดีโอเดิม", + "transportStreamBottomMargin": "ระยะขอบล่าง", + "transportStreamFileNameEnding": "ส่วนท้ายชื่อไฟล์", + "transportStreamFileNameEndingInfo": "เพิ่มไว้หน้านามสกุลไฟล์สำหรับแต่ละแทร็กที่แยกออกมา เว้นว่างไว้เพื่อใช้รหัสภาษาต่อท้ายปกติ", + "transportStreamOnlyTeletext": "เฉพาะเทเลเท็กซ์", + "transportStreamGetSizeFromVideo": "รับขนาดจากวิดีโอ...", + "twoLetterLanguageCodeUppercase": "รหัสภาษาสองตัวอักษร (ตัวพิมพ์ใหญ่)", + "threeLetterLanguageCodeUppercase": "รหัสภาษาสามตัวอักษร (ตัวพิมพ์ใหญ่)", + "formatContainsDotDotDot": "รูปแบบมีคำว่า...", + "extensionIsDotDotDot": "นามสกุลไฟล์คือ...", + "statusIsError": "สถานะเป็นข้อผิดพลาด", + "forcedTracksOnly": "เฉพาะแทร็กบังคับแสดง", + "xConvertedYFailedInZ": "แปลงแล้ว {0:#,###,##0}, ล้มเหลว {1:#,###,##0} ในเวลา {2}", + "xNotProcessed": "ไม่ได้ประมวลผล {0:#,###,##0}", + "removeUnicodeControlCharactersTitle": "ลบอักขระควบคุม Unicode", + "removeUnicodeControlCharactersInfo": "ลบอักขระควบคุมทิศทาง Unicode ที่มองไม่เห็น (LRM, RLM, LRE, RLE, PDF, LRO และ RLO) ออกจากข้อความ และแทนที่ช่องว่างไม่ตัดบรรทัดด้วยช่องว่างปกติ", + "preset": "พรีเซ็ต", + "savePresetDotDotDot": "บันทึกพรีเซ็ต...", + "deletePreset": "ลบพรีเซ็ต", + "presetName": "ชื่อพรีเซ็ต", + "deletePresetX": "ลบพรีเซ็ต \"{0}\" หรือไม่?" }, "changeCasing": { - "title": "เปลี่ยนตัวพิมพ์", "fixNames": "แก้ไขชื่อ", "namesX": "ชื่อ: {0:#,##0}", "hitsX": "พบ: {0:#,##0}", @@ -2080,9 +2291,7 @@ "allUppercase": "ตัวพิมพ์ใหญ่ทั้งหมด", "allLowercase": "ตัวพิมพ์เล็กทั้งหมด" }, - "changeFormatting": { - "title": "เปลี่ยนการจัดรูปแบบ" - }, + "changeFormatting": {}, "convertActors": { "title": "แปลงนักแสดง", "convertActorFrom": "แปลงนักแสดงจาก", @@ -2111,18 +2320,12 @@ "outputFormatAssa": "Advanced Sub Station Alpha (.ass)", "style1": "สไตล์ 1", "style2": "สไตล์ 2", - "outlineWidth": "ความหนาเส้นขอบ", - "shadowWidth": "ความกว้างเงา", - "alignTop": "บน", - "alignBottom": "ล่าง", - "merge": "ผสาน", - "pleaseLoadTwoSubtitles": "โปรดโหลดคำบรรยายสองไฟล์" + "merge": "ผสาน" }, "splitSubtitle": { "title": "แยกคำบรรยาย", "numberOfEqualParts": "จำนวนส่วนที่เท่ากัน", "saveSplitParts": "บันทึกส่วนที่แยก", - "subtitleSplitIntoXParts": "แยกคำบรรยายเป็น {0} ส่วนแล้ว", "xPartsSavedInFormatYToFolder": "บันทึก {0} ส่วนในรูปแบบ {1} ไปยังโฟลเดอร์:" }, "splitBreakLongLines": { @@ -2156,18 +2359,17 @@ "columnMerge": "ผสาน", "columnFirst": "บรรทัดแรก", "columnSecond": "บรรทัดที่สอง", - "columnMerged": "ผสานแล้ว", - "selectAll": "เลือกทั้งหมด", - "inverseSelection": "สลับการเลือก" + "columnMerged": "ผสานแล้ว" }, "mergeLinesWithSameText": { - "title": "ผสานบรรทัดที่มีข้อความเหมือนกัน", "maxMsBetweenLines": "มิลลิวินาทีสูงสุดระหว่างบรรทัด", - "includeIncrementingLines": "รวมบรรทัดที่มีข้อความเพิ่มขึ้นทีละส่วน" + "maxFramesBetweenLines": "จำนวนเฟรมสูงสุดระหว่างบรรทัด", + "includeIncrementingLines": "รวมบรรทัดที่มีข้อความเพิ่มขึ้นทีละส่วน", + "includeRollUpCaptions": "รวมคำบรรยายแบบ roll-up (เลื่อน)" }, "mergeLinesWithSameTimeCodes": { - "title": "ผสานบรรทัดที่มีรหัสเวลาเหมือนกัน", "maxMsDifference": "ความต่างสูงสุด (มิลลิวินาที)", + "maxFramesDifference": "ความต่างสูงสุด (เฟรม)", "makeDialog": "ทำเป็นบทสนทนา" }, "netflixCheckAndFix": { @@ -2190,7 +2392,6 @@ "shotChanges": "จุดเปลี่ยนฉาก", "startNumberSpellOut": "เขียนตัวเลขต้นประโยคเป็นตัวหนังสือ", "textforHiUseBrackets": "ข้อความสำหรับผู้บกพร่องทางการได้ยิน ใช้วงเล็บเหลี่ยม", - "frameRate": "อัตราเฟรม", "twoFrameGrap": "ช่องว่างสองเฟรม", "whiteSpace": "ช่องว่าง", "childrensProgram": "รายการสำหรับเด็ก", @@ -2228,7 +2429,6 @@ "italicsFixed": "แก้ไขตัวเอียงแล้ว", "italicsNotAllowed": "ไม่อนุญาตให้ใช้ตัวเอียง", "bridgeGapsXToYFrames": "ช่องว่าง 3-{0} เฟรม => ช่องว่าง 2 เฟรม", - "startNumberSpellOutComment": "เมื่อตัวเลขขึ้นต้นประโยค ควรเขียนเป็นตัวหนังสือเสมอ", "maximumXCharactersPerSecond": "สูงสุด {0} อักขระต่อวินาที" }, "imageBasedEdit": { @@ -2237,10 +2437,8 @@ "resizeImagesDotDotDot": "ปรับขนาดรูปภาพ...", "adjustBrightnessDotDotDot": "ปรับความสว่าง...", "adjustAlphaDotDotDot": "ปรับค่าอัลฟา...", - "centerHorizontally": "จัดกึ่งกลางแนวนอน", "cropImages": "ตัดขอบรูปภาพ", "importTimeCodes": "นำเข้ารหัสเวลา...", - "setTextForSubtitle": "กำหนดข้อความให้คำบรรยาย", "setText": "กำหนดข้อความ", "screenWidth": "ความกว้างหน้าจอ", "screenHeight": "ความสูงหน้าจอ", @@ -2271,15 +2469,31 @@ "letterboxCustom": "ความสูงแถบกำหนดเอง", "barHeightPx": "ความสูงแถบ (พิกเซล)", "titleSafePercent": "พื้นที่ปลอดภัยของข้อความ (%)", + "moveCaptions": "ย้ายคำบรรยาย", + "moveCaptionsDotDotDot": "ย้ายคำบรรยาย...", + "moveCaptionsTo": "ย้ายคำบรรยาย", + "moveCaptionsIntoBars": "เข้าไปในแถบดำ letterbox (นอกภาพ)", + "moveCaptionsIntoPicture": "ภายในภาพ (ออกจากแถบดำ)", + "moveCaptionsOffset": "ระยะห่างจากขอบ (px)", + "letterboxBarHeightXPxYOfZCaptionsWillMove": "ความสูงแถบ: {0} px - คำบรรยาย {1} จาก {2} รายการจะถูกย้าย", + "removeFadeInOut": "ลบเฟดเข้า/ออก", + "removeFadeInOutXLinesRemoved": "รวมบรรทัดเฟด {0} บรรทัดเข้ากับบรรทัดที่เป็นเจ้าของแล้ว", + "removeFadeInOutNothingFound": "ไม่พบบรรทัดเฟดเข้า/ออก", "positionSummary": "{0}×{1} - {2} คำบรรยาย - ความสูงแถบ: {3} พิกเซล", "xInActivePicture": "{0} ในภาพ", "xInTopBar": "{0} ในแถบบน", "xInBottomBar": "{0} ในแถบล่าง", "noImageSubtitlesLoaded": "ไม่ได้โหลดคำบรรยายแบบรูปภาพ", - "imageBasedFormatNotSupported": "ไม่พบ/ไม่รองรับรูปแบบคำบรรยายแบบภาพ" + "imageBasedFormatNotSupported": "ไม่พบ/ไม่รองรับรูปแบบคำบรรยายแบบภาพ", + "frameRateDeclaredInFile": "อัตราเฟรมที่ระบุในไฟล์ Blu-ray sup", + "frameRateDetectedFromTimeCodesX": "อัตราเฟรมที่ตรวจพบจากไทม์โค้ดของ Blu-ray sup (ไฟล์ระบุไว้ {0})", + "frameRateFromVideo": "อัตราเฟรมของวิดีโอ", + "frameRateCurrent": "อัตราเฟรมปัจจุบัน", + "frameRateSetManually": "อัตราเฟรมที่กำหนดเอง", + "frameRateUsageInfo": "การส่งออก Blu-ray sup, BDN XML, DOST และ FCP จะเขียนด้วยอัตราเฟรมนี้ ไม่ได้เปลี่ยนเวลาใดๆ - ใช้ \"เปลี่ยนอัตราเฟรม\" สำหรับกรณีนั้น", + "useVideoFrameRateXInsteadOfY": "อัตราเฟรมของวิดีโอคือ {0} แต่คำบรรยายถูกตั้งไว้ที่ {1}\n\nใช้อัตราเฟรมของวิดีโอ ({0}) หรือไม่?" }, "removeTextForHearingImpaired": { - "title": "ลบข้อความสำหรับผู้บกพร่องทางการได้ยิน", "interjections": "คำอุทาน", "skipIfStartWith": "ข้ามหากขึ้นต้นด้วย", "removeTextBetween": "ลบข้อความระหว่าง", @@ -2298,7 +2512,6 @@ "removeInterjections": "ลบคำอุทาน", "linesFoundX": "พบบรรทัด: {0}" }, - "pickAlignmentTitle": "เลือกการจัดตำแหน่ง", "removeUnicodeCharacters": { "title": "ลบ/แทนที่อักขระ Unicode", "charactersFoundX": "พบอักขระ Unicode: {0}", @@ -2308,13 +2521,13 @@ "pickFontNameInstalledFonts": "ฟอนต์ที่ติดตั้งไว้", "pickFontNameCollectedFonts": "ฟอนต์ที่รวบรวมไว้", "colorPickerTitle": "เลือกสี", + "colorPickerBrightness": "ความสว่าง", "filterLayersTitle": "กรองเลเยอร์สำหรับการแสดงผล", "filterLayersHideFromWaveform": "ซ่อนจากรูปคลื่นเสียง/สเปกโตรแกรม", "filterLayersHideFromSubtitleGrid": "ซ่อนจากตารางคำบรรยาย", "filterLayersHideFromVideoPreview": "ซ่อนจากตัวอย่างวิดีโอ", "pickSubtitleFormat": "เลือกรูปแบบคำบรรยาย", "pickSubtitleFormatImageBasedNoPreview": "รูปแบบคำบรรยายแบบรูปภาพ\nบิตแมปจะถูกสร้างระหว่างการแปลง - ไม่มีตัวอย่างข้อความ", - "pickLayerTitle": "กำหนดเลเยอร์", "recentColors": "สีที่ใช้ล่าสุด", "fixCommonErrorsSettingsTitle": "การตั้งค่าการแก้ไขข้อผิดพลาดทั่วไป" }, @@ -2359,59 +2572,51 @@ "correctWordsX": "คำที่ถูกต้อง: {0}", "namesX": "ชื่อ: {0}", "addedToDictionaryX": "เพิ่มลงพจนานุกรม: {0}", - "doNotShowThisAgain": "ไม่ต้องแสดงข้อความนี้อีก" + "doNotShowThisAgain": "ไม่ต้องแสดงข้อความนี้อีก", + "editUseAlwaysList": "แก้ไขรายการ \"ใช้เสมอ\"...", + "useAlwaysListTitle": "ตรวจสอบการสะกด - รายการ \"ใช้เสมอ\"", + "useAlwaysListHeader": "รายการ \"ใช้เสมอ\"", + "useAlwaysListDescription": "คำที่ตัวตรวจสอบการสะกดแทนที่โดยอัตโนมัติ บันทึกโดย \"เปลี่ยนทั้งหมด\" และ \"ใช้เสมอ\" คู่คำจะถูกใช้เฉพาะเมื่อคำนั้นสะกดผิดเท่านั้น", + "useAlwaysWord": "คำที่สะกดผิด", + "xPairs": "{0:#,##0} คู่", + "xUnusedPairs": "ไม่เคยใช้ {0:#,##0} คู่", + "useAlwaysUnusedHint": "ไม่เคยใช้ - คำนี้สะกดถูกต้อง (หรือเป็นชื่อหรือคำของผู้ใช้) ตัวตรวจสอบการสะกดจึงไม่เคยทำเครื่องหมาย", + "removeUnused": "ลบที่ไม่ได้ใช้", + "useAlwaysEmpty": "ยังไม่มีคู่คำ \"ใช้เสมอ\" สำหรับภาษานี้", + "useAlwaysEmptyHint": "คู่คำจะถูกเพิ่มเมื่อคุณคลิก \"เปลี่ยนทั้งหมด\" หรือ \"ใช้เสมอ\" ในการตรวจสอบการสะกด", + "useAlwaysNoMatch": "ไม่มีคู่คำที่ตรงกับการค้นหา", + "useAlwaysSameWord": "คำที่ใช้แทนต้องแตกต่างจากคำเดิม", + "useAlwaysRememberOff": "\"จดจำรายการ 'ใช้เสมอ'\" ถูกปิดอยู่ในการตั้งค่า ตัวตรวจสอบการสะกดจึงไม่ใช้หรือบันทึกรายการนี้" }, "video": { "burnIn": { "title": "สร้างวิดีโอพร้อมคำบรรยายฝังถาวร", - "infoAssaOff": "หมายเหตุ: รองรับการจัดสไตล์ Advanced SubStation Alpha", - "infoAssaOn": "หมายเหตุ: จะใช้การจัดสไตล์ Advanced SubStation Alpha :)", - "xGeneratedWithBurnedInSubsInX": "สร้าง \"{0}\" พร้อมคำบรรยายฝังถาวรใน {1} แล้ว", - "timeRemainingMinutes": "เวลาที่เหลือ: {0} นาที", - "timeRemainingOneMinute": "เวลาที่เหลือ: หนึ่งนาที", - "timeRemainingSeconds": "เวลาที่เหลือ: {0} วินาที", - "timeRemainingAFewSeconds": "เวลาที่เหลือ: อีกไม่กี่วินาที", - "timeRemainingMinutesAndSeconds": "เวลาที่เหลือ: {0} นาที {1} วินาที", - "timeRemainingOneMinuteAndSeconds": "เวลาที่เหลือ: หนึ่งนาที {0} วินาที", - "targetFileName": "ชื่อไฟล์ปลายทาง: {0}", "targetFileSize": "ขนาดไฟล์เป้าหมาย (ต้องเข้ารหัสแบบ 2 รอบ)", "fileSizeMb": "ขนาดไฟล์เป็น MB", "matchSourceVideoSize": "ให้ตรงกับขนาดวิดีโอต้นฉบับ", - "passX": "รอบที่ {0}", - "encoding": "การเข้ารหัส", "bitRate": "อัตราบิต", "totalBitRateX": "อัตราบิตรวม: {0}", "sampleRate": "อัตราสุ่มตัวอย่าง", "audio": "เสียง", - "stereo": "สเตอริโอ", "preset": "พรีเซ็ต", + "tune": "Tune", "pixelFormat": "รูปแบบพิกเซล", "crf": "CRF", - "tuneFor": "ปรับจูนสำหรับ", - "alignRight": "จัดชิดขวา", - "getStartPosition": "รับตำแหน่งเริ่มต้น", - "getEndPosition": "รับตำแหน่งสิ้นสุด", "useSource": "ใช้ต้นฉบับ", - "useSourceFolder": "ใช้โฟลเดอร์ต้นฉบับ", - "useSourceResolution": "ใช้ความละเอียดต้นฉบับ", - "outputSettings": "ไฟล์/โฟลเดอร์ผลลัพธ์...", "fontSizeFactor": "ตัวคูณขนาดฟอนต์", "boxType": "ชนิดกล่อง", - "fixRightToLeft": "แก้ไขข้อความขวาไปซ้าย", - "cut": "ตัด", "fromTime": "จากเวลา", "toTime": "ถึงเวลา", "audioEncoding": "การเข้ารหัสเสียง", "outputProperties": "คุณสมบัติผลลัพธ์...", "videoFileSize": "ขนาดไฟล์วิดีโอ", "oneBox": "กล่องเดียว", - "boxPerLine": "กล่องต่อบรรทัด", - "logoInfo": "เลือกรูปภาพ PNG แล้วลากเพื่อจัดวางตำแหน่งบนวิดีโอ" + "logoInfo": "เลือกรูปภาพ PNG แล้วลากเพื่อจัดวางตำแหน่งบนวิดีโอ", + "noSubtitlesGenerateAnyway": "ไม่มีบรรทัดคำบรรยายที่จะฝัง\n\nสร้างวิดีโอโดยไม่มีคำบรรยายหรือไม่?", + "noSubtitlesInXItemsGenerateAnyway": "{0} รายการในชุดไม่มีบรรทัดคำบรรยายที่จะฝัง\n\nสร้างวิดีโอเหล่านั้นโดยไม่มีคำบรรยายหรือไม่?" }, "videoTransparent": { - "title": "สร้างวิดีโอโปร่งใสพร้อมคำบรรยาย", - "infoAssaOff": "หมายเหตุ: รองรับการจัดสไตล์ Advanced SubStation Alpha", - "infoAssaOn": "หมายเหตุ: จะใช้การจัดสไตล์ Advanced SubStation Alpha :)" + "title": "สร้างวิดีโอโปร่งใสพร้อมคำบรรยาย" }, "audioToText": { "title": "แปลงเสียงพูดเป็นข้อความ", @@ -2419,6 +2624,21 @@ "translateToEnglish": "แปลเป็นภาษาอังกฤษ", "transcribing": "กำลังถอดเสียง...", "transcribingXOfY": "กำลังถอดเสียง {0} จาก {1}...", + "linesTranscribedXOfYFailedZ": "ถอดเสียงแล้ว {0} จาก {1} บรรทัด - {2} บรรทัดล้มเหลวหรือไม่มีเสียงพูด\n\nบรรทัดที่ล้มเหลวจะคงข้อความปัจจุบันไว้ นำบรรทัดที่ถอดเสียงแล้วไปใช้ หรือลองบรรทัดที่ล้มเหลวอีกครั้ง (คุณสามารถเปลี่ยนเอนจินหรือการตั้งค่าก่อนได้)?", + "linesTranscribedXOfYCancelled": "การถอดเสียงถูกยกเลิกหลังจาก {0} จาก {1} บรรทัด\n\nนำบรรทัดที่ถอดเสียงแล้วไปใช้หรือไม่? บรรทัดอื่นจะคงข้อความปัจจุบันไว้", + "noLinesTranscribed": "ไม่สามารถถอดเสียงบรรทัดใดจาก {0} บรรทัดได้\nโปรดตรวจสอบบันทึกของเครื่องมือเพื่อดูรายละเอียด", + "applyTranscribedLines": "นำที่ถอดเสียงแล้วไปใช้", + "retryFailedLines": "ลองที่ล้มเหลวอีกครั้ง", + "isolateSpeech": "แยกเสียงพูด (ช้า)", + "isolateSpeechHint": "ลบดนตรีและเสียงประกอบออกก่อนถอดเสียง ทำให้พลาดบรรทัดน้อยลงและเวลาแม่นยำขึ้นในเสียงที่มีดนตรีดัง แต่ใช้เวลาประมาณเท่ากับความยาวเสียงเมื่อมี GPU - และนานกว่านั้นหลายเท่าหากไม่มี", + "isolatingSpeech": "กำลังแยกเสียงพูด...", + "isolateSpeechFailed": "ไม่สามารถแยกเสียงพูดได้ - จึงถอดเสียงจากเสียงต้นฉบับแทน", + "detectSpeakers": "ตรวจจับผู้พูด", + "detectSpeakersHint": "ขึ้นต้นแต่ละบรรทัดด้วยผู้พูด เช่น \"(speaker 0)\" โดยใช้ Sortformer diarization ของ NVIDIA (สูงสุด 8 ผู้พูด) ทำงานได้ดีที่สุดกับแบ็กเอนด์ที่แบ่งบรรทัดตรงที่ผู้พูดเปลี่ยน เช่น Parakeet และ Cohere", + "detectSpeakersNeedsNewerCrispAsr": "\"ตรวจจับผู้พูด\" ต้องใช้ Crisp ASR v{0} หรือใหม่กว่า แต่ติดตั้ง v{1} อยู่\n\nอัปเดต Crisp ASR (ปุ่มรูปเฟืองข้างเอนจิน) หรือปิด \"ตรวจจับผู้พูด\"", + "xNeedsNewerCrispAsr": "{0} ต้องใช้ Crisp ASR v{1} หรือใหม่กว่า แต่ติดตั้ง v{2} อยู่\n\nดาวน์โหลดและติดตั้งอัปเดตตอนนี้หรือไม่?", + "vad": "VAD", + "vadHint": "การตรวจจับเสียงพูด (Voice activity detection): ถอดเสียงเฉพาะเสียงพูด โดยตัดตรงที่ผู้พูดหยุด\nอัตโนมัติ: Silero และเฉพาะเอนจินที่ต้องใช้ (Cohere, Mega, Index-Echo)\nSilero, FireRedVAD, Whisper-VAD, WebRTC: เปิดเสมอสำหรับทุกเอนจิน Crisp ASR FireRedVAD แม่นยำที่สุด Whisper-VAD ให้การตัดน้อยที่สุดและสะอาดที่สุดแต่ช้าที่สุด\nIndex-Echo ใช้ Silero เสมอ --vad, --vad-model หรือ --chunk-seconds ในการตั้งค่าขั้นสูงมีลำดับความสำคัญสูงกว่า", "inputLanguage": "ภาษาต้นทาง", "advancedWhisperSettings": "พารามิเตอร์แปลงเสียงพูดเป็นข้อความขั้นสูง", "downloadingSpeechToTextEngine": "กำลังดาวน์โหลดเอนจินแปลงเสียงพูดเป็นข้อความ", @@ -2433,8 +2653,6 @@ "addCustomModelDotDotDot": "เพิ่มโมเดลกำหนดเอง...", "customModelHelp": "คุณสามารถใช้โมเดลของคุณเอง: เลือกไฟล์โมเดล (whisper.cpp ggml '.bin') หรือโฟลเดอร์โมเดล (โฟลเดอร์ faster-whisper ที่มี 'model.bin' อยู่ภายใน) โมเดลจะถูกคัดลอกไปยังโฟลเดอร์โมเดลและเพิ่มลงในรายการด้านบน", "viewToolsLogFile": "ดูไฟล์บันทึกของเครื่องมือ", - "reDownloadX": "ดาวน์โหลด {0} อีกครั้ง", - "downloadX": "ดาวน์โหลด {0}", "updateXTitle": "อัปเดต {0} หรือไม่?", "updateXMessage": "มี {0} เวอร์ชันใหม่กว่า{1}{1}ดาวน์โหลดและติดตั้งการอัปเดตตอนนี้หรือไม่?", "downloadingSpeechToTextModel": "กำลังดาวน์โหลดโมเดลแปลงเสียงพูดเป็นข้อความ", @@ -2446,14 +2664,6 @@ "fixCasing": "แก้ไขตัวพิมพ์", "addPeriods": "เพิ่มจุด", "changeUnderlineToColor": "เปลี่ยนขีดเส้นใต้เป็นสี", - "cueBuilding": "การสร้างคิว (MLX Whisper)", - "cueRebuild": "สร้างคิวใหม่จากเวลากำกับระดับคำ", - "cueMaxChars": "อักขระสูงสุดต่อคิว", - "cueMaxSeconds": "วินาทีสูงสุดต่อคิว", - "cueMaxCps": "อักขระสูงสุดต่อวินาที", - "vocabularyPrompt": "พรอมต์คำศัพท์ (ชื่อ สถานที่ คำเฉพาะ)", - "beamSize": "ขนาด beam", - "beamSizeNote": "0 ถอดรหัสเร็วที่สุด 5 ให้ความแม่นยำดีที่สุด (เหมือน Faster Whisper) โดยใช้เวลาเพิ่มขึ้นราว 20-30% ค่าที่มากกว่า 5 แทบไม่ช่วยอะไร", "removeNonSpeechLines": "ลบบรรทัดที่ไม่ใช่เสียงพูด", "removeNonSpeechLinesHint": "ตัดบรรทัดที่บรรยายเฉพาะเสียงประกอบออก เช่น \"[Music]\" หรือ \"(waves crashing)\"", "removeRepeatedLines": "ลบบรรทัดที่ซ้ำกัน", @@ -2489,14 +2699,11 @@ }, "textToSpeech": { "title": "แปลงข้อความเป็นเสียงพูด", - "textToSpeechEngine": "เอนจินแปลงข้อความเป็นเสียงพูด", "reviewAudioSegments": "TTS - ตรวจทานส่วนเสียง", "reviewAudioSegmentsHistory": "TTS - ตรวจทานประวัติเสียง", "stability": "ความเสถียร", "similarity": "ความคล้ายคลึง", "speakerBoost": "เพิ่มพลังเสียงผู้พูด", - "styleExaggeration": "การเน้นสไตล์", - "regenerateAudioSelectedLine": "สร้างเสียงใหม่สำหรับบรรทัดที่เลือก", "generateSpeechFromText": "สร้างเสียงพูดจากข้อความ", "testVoice": "ทดสอบเสียง", "addAudioToVideoFile": "เพิ่มเสียงลงไฟล์วิดีโอ", @@ -2515,6 +2722,19 @@ "videoEncodingSettings": "TTS - การตั้งค่าการเข้ารหัสวิดีโอ", "elevenLabsSettings": "TTS - การตั้งค่า ElevenLabs", "elevenLabsSettingsResetHint": "คืนค่าการตั้งค่า ElevenLabs เป็นค่าเริ่มต้น", + "provider": "ผู้ให้บริการ", + "openAiCompatibleSettings": "TTS - การตั้งค่าที่เข้ากันได้กับ OpenAI", + "customServerUrl": "URL เซิร์ฟเวอร์กำหนดเอง", + "customServerUrlHint": "ปลายทางเสียงพูดแบบเต็มของเซิร์ฟเวอร์ที่เข้ากันได้กับ OpenAI ใช้เมื่อผู้ให้บริการเป็น \"Custom\" เช่น http://localhost:8880/v1/audio/speech", + "customModels": "โมเดลกำหนดเอง", + "customModelsHint": "ชื่อโมเดลคั่นด้วยจุลภาคที่แสดงให้เลือกเมื่อผู้ให้บริการเป็น \"Custom\"", + "customVoices": "เสียงกำหนดเอง", + "customVoicesHint": "ชื่อเสียงคั่นด้วยจุลภาค ใช้โดยผู้ให้บริการ \"Custom\" และโดยโมเดล OpenRouter ที่ไม่ได้เผยแพร่รายการเสียง", + "instructions": "คำสั่ง", + "instructionsHint": "สไตล์การพูด (ไม่บังคับ) เช่น \"Speak in a calm, warm voice\" ส่งเฉพาะไปยังโมเดลที่รองรับ (ไม่ใช่ tts-1/tts-1-hd)", + "openAiSpeedHint": "ความเร็วเสียงพูดตั้งแต่ 0.25 ถึง 4.0 (1.0 คือปกติ) ไม่ใช่ทุกโมเดลที่รองรับ", + "outputFormat": "รูปแบบผลลัพธ์", + "outputFormatHint": "รูปแบบเสียงที่ขอจากเซิร์ฟเวอร์ \"Auto\" จะขอ MP3 และเปลี่ยนเป็น PCM สำหรับโมเดลที่ส่งคืนเฉพาะ PCM (เช่น Gemini TTS)", "regenerateAudio": "สร้างเสียงใหม่", "autoContinuePlaying": "เล่นต่ออัตโนมัติ", "playLine": "เล่นบรรทัด", @@ -2523,6 +2743,13 @@ "addingAudioToVideoFileDotDotDot": "กำลังเพิ่มเสียงลงไฟล์วิดีโอ...", "preparingMergeDotDotDot": "กำลังเตรียมการรวม...", "importVoiceDotDotDot": "นำเข้าเสียง...", + "renameVoiceDotDotDot": "เปลี่ยนชื่อเสียง...", + "renameVoiceTitle": "เปลี่ยนชื่อเสียง", + "voiceXCouldNotBeRenamedX": "ไม่สามารถเปลี่ยนชื่อเสียง '{0}': {1}", + "deleteVoiceDotDotDot": "ลบเสียง...", + "deleteVoiceTitle": "ลบเสียง", + "deleteVoiceXQuestion": "ลบเสียง '{0}' หรือไม่?\n\nไฟล์บันทึกเสียงอ้างอิงและไฟล์ที่เกี่ยวข้องจะถูกลบออกจากดิสก์", + "voiceXCouldNotBeDeletedX": "ไม่สามารถลบเสียง '{0}': {1}", "voiceImportSuccessTitle": "นำเข้าเสียงแล้ว", "voiceXImported": "นำเข้าเสียง '{0}' สำเร็จ", "voiceXCouldNotBeImported": "ไม่สามารถนำเข้าเสียง '{0}' ได้ - ดูรายละเอียดในบันทึก", @@ -2532,6 +2759,49 @@ "dropAudioFileHereToImportVoice": "วางไฟล์เสียงที่นี่เพื่อนำเข้าเสียง", "dropAudioFileHereHint": ".wav หรือ .mp3", "voiceCloneTranscriptTitle": "ป้อนบทถอดเสียงของไฟล์เสียง (จำเป็นสำหรับการโคลนเสียง)", + "voiceManagerTitle": "TTS - ตัวจัดการเสียง", + "voiceManagerDotDotDot": "ตัวจัดการเสียง...", + "voiceManagerMenuItem": "ตัวจัดการเสียง TTS...", + "speakFromCurrentLineTitle": "พูดจากบรรทัดปัจจุบัน", + "speakFromCurrentLineDotDotDot": "พูดจากบรรทัดปัจจุบัน...", + "speakFromCurrentLineHint": "อ่านบรรทัดออกเสียงทีละบรรทัด เริ่มจากบรรทัดปัจจุบัน กด Escape หรือคลิกบรรทัดอื่นเพื่อหยุด", + "stopSpeaking": "หยุดพูด", + "speakingLineX": "กำลังพูดบรรทัด {0}... (Escape เพื่อหยุด)", + "playWithSpeechTitle": "เล่นพร้อมเสียงพูด", + "playWithSpeechDotDotDot": "เล่นพร้อมเสียงพูด...", + "playWithSpeechHint": "เล่นวิดีโอและพูดแต่ละบรรทัดเมื่อวิดีโอไปถึงบรรทัดนั้น หยุดชั่วคราวและเลื่อนตำแหน่งได้ตามปกติ กด Escape เพื่อหยุด", + "lowerVideoVolumeWhileSpeaking": "ลดระดับเสียงวิดีโอขณะพูด", + "pauseVideoWhenSpeechRunsLate": "หยุดวิดีโอชั่วคราวเมื่อเสียงพูดล้ำเข้าไปในบรรทัดถัดไป", + "waitingForSpeechLineX": "กำลังสร้างเสียงพูดสำหรับบรรทัด {0}... (Escape เพื่อหยุด)", + "voiceKindClone": "เสียงที่โคลน", + "voiceKindPreset": "ในตัว", + "voiceKindModel": "โมเดลเสียง", + "voiceKindOnline": "ออนไลน์", + "transcript": "บทถอดเสียง", + "transcriptRequiredHint": "จำเป็น - เอนจินจะอ่านบทถอดเสียงของไฟล์บันทึกนี้ (ref-text) เมื่อโคลน", + "transcriptOptionalHint": "ไม่บังคับ - บทถอดเสียงที่แม่นยำของไฟล์บันทึกช่วยให้การโคลนดีขึ้น", + "saveTranscript": "บันทึกบทถอดเสียง", + "searchVoices": "ค้นหาเสียง", + "loadingVoicesDotDotDot": "กำลังโหลดเสียง...", + "noVoicesForEngine": "ไม่มีเสียง - นำเข้าไฟล์บันทึกเสียงหรือดาวน์โหลดชุดเสียง", + "noVoicesMatchFilter": "ไม่มีเสียงที่ตรงกับการค้นหา", + "copyVoiceTo": "คัดลอกเสียงไปยัง", + "copyVoiceToDotDotDot": "คัดลอกเสียงไปยังเอนจิน...", + "copyingVoiceXToYDotDotDot": "กำลังคัดลอกเสียง '{0}' ไปยัง {1}...", + "voiceXCopiedToY": "คัดลอกเสียง '{0}' ไปยัง {1} แล้ว", + "voiceXCouldNotBeCopiedToY": "ไม่สามารถคัดลอกเสียง '{0}' ไปยัง {1} - ดูรายละเอียดในบันทึก", + "voiceXAlreadyExistsInYContinue": "มีเสียงชื่อ '{0}' อยู่แล้วใน {1}\n\nคัดลอกต่อหรือไม่?", + "openVoicesFolder": "เปิดโฟลเดอร์เสียง", + "downloadVoicePacksDotDotDot": "ดาวน์โหลดชุดเสียง...", + "downloadVoicePacksTitle": "TTS - ดาวน์โหลดชุดเสียง", + "voicePackIntro": "ชุดเสียงคือชุดไฟล์บันทึกเสียงสั้นๆ ที่สะอาดพร้อมบทถอดเสียง พร้อมสำหรับการโคลน แต่ละชุดจะถูกนำเข้าไปยังเอนจินที่เลือก (เสียงที่มีอยู่แล้วจะถูกข้าม) และมีไฟล์ ATTRIBUTION.txt ระบุสัญญาอนุญาตและแหล่งที่มา", + "voicePackDetailsXVoicesYSizeZLicense": "{0} เสียง · {1} · {2}", + "installToEngine": "ติดตั้งไปยังเอนจิน", + "downloadAndInstall": "ดาวน์โหลดและติดตั้ง", + "selectAtLeastOneVoicePack": "เลือกชุดเสียงอย่างน้อยหนึ่งชุด", + "downloadingXDotDotDot": "กำลังดาวน์โหลด {0}...", + "installingXDotDotDot": "กำลังติดตั้ง {0}...", + "xVoicesInstalledYSkipped": "ติดตั้งแล้ว {0} เสียง ({1} มีอยู่แล้ว)", "useSpeechToTextDotDotDot": "ใช้แปลงเสียงพูดเป็นข้อความ...", "autoCastMenuItem": "ค้นหาเสียงในวิดีโอและโคลน...", "autoCastSpeakersTitle": "เสียงที่พบในวิดีโอ", @@ -2550,7 +2820,7 @@ "cloneVoicePerLinePreparing": "กำลังดึงเสียงของแต่ละบรรทัดจากวิดีโอ...", "cloneVoicePerLineNeedsVideo": "การโคลนเสียงของแต่ละบรรทัดต้องใช้วิดีโอที่คำบรรยายนี้สังกัดอยู่ กรุณาเปิดวิดีโอแล้วลองใหม่", "cloneVoicePerLineNoClips": "ไม่สามารถดึงเสียงจากวิดีโอได้ จึงไม่มีอะไรให้โคลน กรุณาตรวจสอบว่าวิดีโอมีแทร็กเสียง", - "cloneVoicePerLineNeedsOriginalSubtitleX": "{0} จะโคลนบรรทัดได้ก็ต่อเมื่อรู้ว่าในวิดีโอพูดอะไรที่บรรทัดนั้น ซึ่งมาจากคำบรรยายภาษาต้นฉบับ ขณะนี้ยังไม่ได้โหลดคำบรรยายต้นฉบับ ทุกบรรทัดจึงจะถูกพูดด้วยเสียงแรกที่นำเข้าแทนเสียงในวิดีโอ\n\nเปิดคำบรรยายต้นฉบับ (ไฟล์ > เปิดต้นฉบับ...) ควบคู่กับคำแปล แล้วสร้างใหม่อีกครั้ง", + "cloneVoicePerLineTranscribeClipsXYZ": "{0} จะโคลนบรรทัดได้ก็ต่อเมื่อรู้ว่าในวิดีโอพูดอะไรที่บรรทัดนั้น ข้อมูลนี้ไม่ทราบสำหรับ {1} จาก {2} บรรทัด - ปกติจะมาจากคำบรรยายภาษาต้นฉบับ (ไฟล์ > เปิดต้นฉบับ...)\n\nถอดเสียงบรรทัดเหล่านั้นจากวิดีโอด้วยการแปลงเสียงเป็นข้อความตอนนี้หรือไม่?\n\nใช่: เลือกเอนจินและภาษาที่พูดในวิดีโอ แล้วคลิปอ้างอิงจะถูกถอดเสียงก่อนสร้างเสียงพูด\nไม่: สร้างต่อไป - บรรทัดเหล่านั้นจะพูดด้วยเสียงทั่วไปแทนเสียงในวิดีโอ", "voiceCloneConsentTitle": "การโคลนเสียง - ก่อนเริ่มต้น", "voiceCloneConsentHeader": "คุณกำลังจะโคลนเสียง", "voiceCloneConsentIntro": "การโคลนคือการคัดลอกเสียงของบุคคลจริง ซึ่งมีข้อกำหนดในเกือบทุกประเทศ และในสหภาพยุโรปมีหน้าที่ตามกฎหมายที่ตกอยู่กับคุณ ไม่ใช่กับ Subtitle Edit กรุณาอ่านข้อความนี้สักครั้ง", @@ -2567,10 +2837,29 @@ "advancedTtsSettings": "การตั้งค่า TTS ขั้นสูง", "advancedTtsAudioProcessing": "การประมวลผลเสียง", "advancedTtsOutput": "ผลลัพธ์", + "advancedTtsVoiceCloning": "การโคลนเสียง", + "cleanCloneReferences": "ทำความสะอาดเสียงอ้างอิงสำหรับโคลน (Sidon)", + "cleanCloneReferencesDescription": "ลบดนตรี เสียงรบกวน และเสียงก้องออกจากเสียงที่ใช้โคลน: คลิปที่ตัดจากวิดีโอและไฟล์บันทึกเสียงที่นำเข้าในตัวจัดการเสียง ใช้โมเดลฟื้นฟูเสียงพูด Sidon บน audio.cpp (ดาวน์โหลด 940 MB) เสียงที่โคลนจะไม่คัดลอกเสียงพื้นหลังอีกต่อไป แต่เสียงพูดที่เบามากหรือพูดซ้อนกันอาจฟังอู้อี้", + "cleaningCloneReferencesDotDotDot": "กำลังทำความสะอาดเสียงอ้างอิงสำหรับโคลน...", + "downloadSidonTitle": "ดาวน์โหลด Sidon หรือไม่?", + "downloadSidonQuestionX": "การทำความสะอาดเสียงอ้างอิงสำหรับโคลนต้องใช้โมเดลฟื้นฟูเสียงพูด Sidon ({0})\n\nดาวน์โหลดตอนนี้หรือไม่? หากไม่มีโมเดลนี้ จะใช้เสียงอ้างอิงตามเดิม", "proAudioPostProcessing": "การประมวลผลเสียงระดับมืออาชีพ", "proAudioPostProcessingDescription": "ปรับใช้ EQ เพิ่มความอบอุ่น noise gate การบีบอัด การปรับความดังมาตรฐาน (-16 LUFS) และเสียงค่อยๆ ดัง/เบาลงกับแต่ละส่วน", + "generatingSpeechSegmentXOfY": "กำลังสร้างเสียงพูด: ส่วนที่ {0} จาก {1}", + "adjustingSpeedSegmentXOfY": "กำลังปรับความเร็ว: ส่วนที่ {0} จาก {1}", + "mergingAudioSegmentXOfY": "กำลังรวมเสียง: ส่วนที่ {0} จาก {1}", + "postProcessingSegmentXOfY": "กำลังประมวลผลภายหลัง: ส่วนที่ {0} จาก {1}", "audioDucking": "การลดเสียงพื้นหลัง (ducking)", "audioDuckingDescription": "ลดระดับเสียงต้นฉบับของวิดีโอแล้วผสมกับเสียง TTS ทำให้ยังได้ยินเสียงประกอบต้นฉบับแผ่วๆ", + "removeOriginalSpeech": "ลบเสียงพูดต้นฉบับ (ช้า)", + "removeOriginalSpeechDescription": "คงดนตรีและเสียงประกอบของวิดีโอต้นฉบับไว้แต่ลบเสียงพูดออก แล้วผสมเสียงพูดใหม่ทับลงไป ใช้เวลาประมาณเท่ากับความยาววิดีโอเมื่อมี GPU และนานกว่านั้นหลายเท่าหากไม่มี เมื่อเปิดการลดเสียงพื้นหลัง (ducking) ระดับเสียงจะมีผลกับดนตรีและเสียงประกอบ มีผลเฉพาะเมื่อเพิ่มเสียงพูดลงในไฟล์วิดีโอเท่านั้น", + "removingOriginalSpeech": "กำลังลบเสียงพูดต้นฉบับ...", + "removeOriginalSpeechFailed": "ไม่สามารถลบเสียงพูดต้นฉบับได้ - เสียงพูดใหม่ถูกเพิ่มลงในวิดีโอโดยไม่ได้ลบ", + "speechRemovalModel": "โมเดล", + "speechRemovalModelDescription": "คุณภาพดีที่สุดจะคงดนตรีและเสียงประกอบไว้ได้มากที่สุด แบบเร็วเร็วกว่าประมาณสามเท่า แต่สูญเสียดนตรีไปมากขึ้นเล็กน้อย", + "speechRemovalBestQuality": "คุณภาพดีที่สุด (Mel-Band RoFormer)", + "speechRemovalFast": "เร็ว (HTDemucs)", + "videoTruncatedWarning": "ภาพในไฟล์วิดีโอใหม่หยุดหลังจาก {0} แต่วิดีโอต้นฉบับยาว {1} - ภาพจะค้างขณะที่เสียงยังเล่นต่อ\n\nไฟล์ถูกเก็บไว้ ดู error-log.txt ในโฟลเดอร์ข้อมูลของ Subtitle Edit สำหรับผลลัพธ์ของ ffmpeg", "originalVolumePercent": "% ระดับเสียงต้นฉบับ", "vadSilenceCompression": "การบีบอัดช่วงเงียบด้วย VAD", "vadSilenceCompressionDescription": "ย่นช่วงหยุดระหว่างคำก่อนปรับความเร็ว ใช้ Voice Activity Detection เพื่อบีบอัดเฉพาะช่วงเงียบโดยไม่แตะต้องเสียงพูด นี่คือขั้นตอนแรกที่แนะนำ — ลดระยะเวลาโดยไม่สูญเสียคุณภาพใดๆ", @@ -2644,7 +2933,6 @@ "subtitleMergedLinesAppliedPlural": "ปรับใช้การผสาน {0} บรรทัดจากการแปลงข้อความเป็นเสียงพูด" }, "shotChanges": { - "titleGenerateOrImport": "สร้าง/นำเข้าจุดเปลี่ยนฉาก", "generateShotChanges": "สร้างจุดเปลี่ยนฉาก", "importShotChanges": "นำเข้าจุดเปลี่ยนฉาก", "generateShotChangesWithFfmpeg": "สร้างจุดเปลี่ยนฉากด้วย ffmpeg", @@ -2654,7 +2942,9 @@ "timeCodeFormatColon": "รูปแบบรหัสเวลา:", "shotChangesList": "รายการจุดเปลี่ยนฉาก", "shotChangesClearQuestion": "คุณแน่ใจหรือไม่ว่าต้องการล้างจุดเปลี่ยนฉากทั้งหมด?", - "deleteSelectedShotChangeQuestion": "คุณแน่ใจหรือไม่ว่าต้องการลบจุดเปลี่ยนฉากที่เลือก?" + "deleteSelectedShotChangeQuestion": "คุณแน่ใจหรือไม่ว่าต้องการลบจุดเปลี่ยนฉากที่เลือก?", + "shotChanges": "จุดเปลี่ยนฉาก", + "exportShotChanges": "ส่งออกจุดเปลี่ยนฉาก" }, "chapters": { "title": "บท", @@ -2684,7 +2974,6 @@ "scaleTimesDescription": "ปรับสเกลเวลาของทุกบทจากอัตราเฟรมหนึ่งไปยังอีกอัตราเฟรมหนึ่ง", "fromFrameRate": "จาก", "toFrameRate": "เป็น", - "apply": "นำไปใช้", "writeToVideo": "เขียนลงวิดีโอ...", "writeToVideoTitle": "เขียนบทลงในวิดีโอ", "writeToVideoDescription": "บทจะถูกเขียนลงในสำเนาของไฟล์วิดีโอ ไม่มีการเข้ารหัสใหม่ จึงรวดเร็วและไม่สูญเสียคุณภาพ", @@ -2694,7 +2983,6 @@ "writtenToX": "เขียนบทลงใน {0} แล้ว", "unableToWriteChapters": "ไม่สามารถเขียนบทลงในไฟล์วิดีโอได้", "chaptersSavedToX": "บันทึกบทลงใน {0} แล้ว", - "noVideoLoaded": "ยังไม่ได้โหลดวิดีโอ", "emptyListCallToAction": "ยังไม่มีบท - เพิ่มบทที่ตำแหน่งวิดีโอ หรือนำเข้าจากวิดีโอหรือไฟล์" }, "videoOcr": { @@ -2705,10 +2993,6 @@ "bottomHalf": "ครึ่งล่าง", "fullFrame": "เต็มเฟรม", "engine": "เอนจิน OCR", - "language": "ภาษา", - "url": "URL", - "model": "โมเดล", - "apiKey": "คีย์ API", "scan": "สแกน", "framesPerSecond": "เฟรมต่อวินาที", "textBrightnessMinimum": "ความสว่างข้อความขั้นต่ำ (0=ปิด)", @@ -2723,10 +3007,10 @@ "runningOcrXY": "กำลังรัน OCR... {0}/{1}", "noLinesFoundTitle": "ไม่พบคำบรรยาย", "noLinesFoundMessage": "ไม่พบข้อความในพื้นที่สแกน - ลองปรับพื้นที่สแกน เอนจิน หรือความสว่างขั้นต่ำ", + "ocrStoppedEarlyMessage": "เอนจิน OCR หยุดก่อนอ่านครบทุกเฟรม จึงเก็บบรรทัดที่พบจนถึงตอนนี้ไว้ และส่วนที่เหลือขาดหายไป{0}{0}{1}", "linesFoundX": "พบ {0} บรรทัด", "refiningTimingXY": "กำลังปรับจังหวะเวลาให้ละเอียด... {0}/{1}", "fixOcrErrors": "แก้ไขข้อผิดพลาด OCR", - "dictionary": "พจนานุกรม", "editLineX": "แก้ไขบรรทัด {0}", "downloadDictionaryHint": "ดาวน์โหลดพจนานุกรมตรวจสอบตัวสะกด...", "framesPerSecondHint": "จำนวนเฟรมต่อวินาทีที่จะสแกน ค่า 5 ครอบคลุมคำบรรยายทั่วไป ค่าที่สูงขึ้นจะจับบรรทัดสั้นมากได้และจัดกลุ่มแม่นยำขึ้น แต่ใช้เวลา OCR มากกว่า", @@ -2743,7 +3027,58 @@ "testOcr": "ทดสอบเฟรมปัจจุบัน", "testOcrRunning": "กำลังทดสอบ OCR บนเฟรมปัจจุบัน...", "testOcrResultX": "ผลการทดสอบ: {0}", - "testOcrNoTextFound": "ทดสอบ: ไม่พบข้อความในพื้นที่สแกน" + "testOcrNoTextFound": "ทดสอบ: ไม่พบข้อความในพื้นที่สแกน", + "engineSettings": "การตั้งค่าเอนจิน OCR", + "engineBuiltIn": "มีในระบบปฏิบัติการ", + "engineExternalServer": "เซิร์ฟเวอร์ภายนอก (ติดตั้งและจัดการภายนอก Subtitle Edit)", + "engineCloudApi": "Cloud API (ต้องใช้ API key)", + "engineNothingToInstall": "ไม่มีอะไรต้องติดตั้ง", + "engineModelsMissing": "ติดตั้งเอนจินแล้ว แต่ไม่มีโมเดล", + "website": "เว็บไซต์" + }, + "backgroundMusic": { + "title": "สร้างดนตรีพื้นหลัง", + "generateBackgroundMusicDotDotDot": "สร้างดนตรีพื้นหลัง...", + "preset": "พรีเซ็ต", + "prompt": "พรอมต์", + "tempoBpm": "จังหวะ (BPM)", + "generateSeconds": "สร้าง (วินาที)", + "seed": "Seed", + "randomSeed": "สุ่ม", + "outputLength": "ความยาวผลลัพธ์", + "outputLengthVideoX": "{0} (ความยาววิดีโอ - ดนตรีจะวนซ้ำอย่างต่อเนื่อง)", + "musicVolumePercent": "ระดับเสียงดนตรี (%)", + "removeExistingAudioTracks": "ลบแทร็กเสียงที่มีอยู่", + "originalAudioVolumePercent": "ระดับเสียงต้นฉบับ (%)", + "saveAudioDotDotDot": "บันทึกเสียง...", + "addToVideoDotDotDot": "เพิ่มลงในวิดีโอ...", + "engineInfo": "ACE-Step 1.5 Turbo ผ่าน audio.cpp (สัญญาอนุญาต MIT) - ทำงานภายในเครื่อง", + "presetCooking": "ทำอาหาร / อบขนม", + "presetTech": "เทคโนโลยี / รีวิวแกดเจ็ต", + "presetForest": "ป่า / ธรรมชาติ", + "presetRelaxingPiano": "เปียโนผ่อนคลาย", + "presetLofiVlog": "Lo-fi vlog", + "presetCorporate": "องค์กร / อธิบาย", + "loadingModel": "กำลังโหลดโมเดล...", + "composing": "กำลังแต่งเพลง...", + "generatingAudio": "กำลังสร้างเสียง...", + "decodingAudio": "กำลังถอดรหัสเสียง...", + "creatingLoop": "กำลังสร้างลูปต่อเนื่อง...", + "resultLoopXYZ": "ลูป: {0} ที่ {1} BPM, ความต่อเนื่องของรอยต่อ {2}%", + "resultNoLoopX": "ดนตรีพร้อมแล้ว: {0}", + "addingMusicToVideo": "กำลังเพิ่มดนตรีลงในวิดีโอ...", + "downloadModelTitle": "ดาวน์โหลดโมเดลดนตรีหรือไม่?", + "downloadModelQuestionX": "การสร้างดนตรีต้องใช้โมเดล ACE-Step 1.5 ({0})\n\nดาวน์โหลดโมเดลหรือไม่?", + "downloadingModel": "กำลังดาวน์โหลดโมเดล ACE-Step 1.5...", + "saveAudioTitle": "บันทึกดนตรีพื้นหลัง", + "audioFileSavedX": "บันทึกไฟล์เสียงแล้ว: {0}", + "unableToGenerateMusic": "ไม่สามารถสร้างดนตรีได้", + "unableToAddMusicToVideo": "ไม่สามารถเพิ่มดนตรีลงในวิดีโอได้", + "outputLengthTextToSpeech": "ตามเสียงพูดที่สร้างขึ้น - ดนตรีจะวนซ้ำอย่างต่อเนื่องและเบาลงขณะมีคนพูด", + "addBackgroundMusic": "เพิ่มดนตรีพื้นหลัง", + "addBackgroundMusicHint": "สร้างดนตรีภายในเครื่องด้วย ACE-Step 1.5 และผสมไว้ใต้เสียงพูด - ดนตรีจะเบาลงขณะมีคนพูด", + "generatingBackgroundMusicDotDotDot": "กำลังสร้างดนตรีพื้นหลัง...", + "mixingBackgroundMusicDotDotDot": "กำลังผสมดนตรีพื้นหลัง..." }, "goToVideoPosition": "ไปยังตำแหน่งวิดีโอ", "goToVideoPositionDotDotDot": "ไปที่ตำแหน่งวิดีโอ...", @@ -2754,30 +3089,88 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "คำบรรยายรองบนเครื่องเล่นวิดีโอ, เปิด...", "openSecondarySubtitleOnVideoPlayer": "คำบรรยายรอง (บนเครื่องเล่นวิดีโอ)", "removeSecondarySubtitleOnVideoPlayer": "คำบรรยายรองบนเครื่องเล่นวิดีโอ, ลบออก", + "editSecondarySubtitleSettings": "แก้ไขการตั้งค่าคำบรรยายรอง", + "editSecondarySubtitleSettingsDotDotDot": "แก้ไขการตั้งค่าคำบรรยายรอง...", + "secondarySubtitleRememberSettings": "จดจำการตั้งค่าเหล่านี้", + "secondarySubtitleDoNotShowAgain": "ไม่ต้องแสดงกล่องโต้ตอบนี้อีก", + "secondarySubtitleJustifyLines": "จัดบรรทัดชิดขอบเต็มแนว", "openRecentVideo": "เปิดวิดีโอล่าสุด", "clearRecentVideos": "ล้างรายการวิดีโอล่าสุด", "cutVideoTitle": "ตัดวิดีโอ", "cutVideoDotDotDot": "ตัดวิดีโอ...", + "remuxVideoTitle": "รีมักซ์วิดีโอ", + "remuxVideoDotDotDot": "รีมักซ์วิดีโอ...", + "remuxVideoInputVideo": "วิดีโอต้นทาง:", + "remuxVideoMultipleTracksRequiresMkv": "แทร็กเสียงหรือคำบรรยายหลายแทร็กต้องใช้คอนเทนเนอร์ MKV รูปแบบผลลัพธ์ถูกเปลี่ยนเป็น .mkv โดยอัตโนมัติ", + "remuxVideoOutputFormat": "รูปแบบผลลัพธ์:", + "remuxVideoOutputFile": "ไฟล์ผลลัพธ์:", + "remuxVideoRemuxing": "กำลังรีมักซ์วิดีโอและเสียง...", + "remuxVideoFinalizing": "กำลังจัดการไฟล์ผลลัพธ์ขั้นสุดท้าย (ย้ายดัชนีไปไว้ด้านหน้า)...", + "remuxVideoCompleted": "รีมักซ์วิดีโอสำเร็จ", + "remuxVideoFailed": "รีมักซ์วิดีโอไม่สำเร็จ", + "remuxVideoPleaseSelectBoth": "โปรดเลือกทั้งไฟล์วิดีโอและไฟล์เสียง", + "remuxVideoAssRequiresMkv": "คำบรรยาย ASS/SSA ต้องใช้คอนเทนเนอร์ MKV เพื่อรักษาการจัดรูปแบบและสไตล์ทั้งหมด", + "remuxVideoSccRequiresMov": "คำบรรยาย Scenarist (.scc) จะถูกฝังเป็นคำบรรยายปิด CEA-608 ซึ่งต้องใช้คอนเทนเนอร์ MOV หรือ MPG รูปแบบผลลัพธ์ถูกเปลี่ยนเป็น .mov โดยอัตโนมัติ", + "remuxVideoSccNotWithWebM": "คำบรรยายปิด Scenarist (.scc) ต้องใช้คอนเทนเนอร์ MOV ซึ่งไม่สามารถเก็บวิดีโอ VP9/AV1 ของไฟล์ .webm ได้ ลบไฟล์ .scc หรือแปลงเป็นรูปแบบคำบรรยายอื่น", + "remuxVideoMpgMaxTwoCaptionTracks": "ไฟล์ .mpg เก็บแทร็กคำบรรยายปิดได้สูงสุดสองแทร็ก (CC1 และ CC3) - ลบไฟล์คำบรรยายให้เหลือหนึ่งหรือสองไฟล์", + "remuxVideoMccRequiresMpg": "คำบรรยาย MacCaption (.mcc) จะถูกฝังเป็นคำบรรยายปิด CEA-608/708 ในวิดีโอ MPEG-2 ซึ่งต้องใช้คอนเทนเนอร์ MPG รูปแบบผลลัพธ์ถูกเปลี่ยนเป็น .mpg โดยอัตโนมัติ", + "remuxVideoMpgReencodeVideoX": "คำบรรยายปิดในไฟล์ .mpg ต้องใช้วิดีโอ MPEG-2 แต่วิดีโอเป็น {0} เข้ารหัสวิดีโอใหม่เป็น MPEG-2 หรือไม่? จะใช้เวลานานขึ้นและคุณภาพลดลงเล็กน้อย", + "remuxVideoFileHasNoAudioX": "\"{0}\" ไม่มีแทร็กเสียง จึงไม่สามารถใช้เป็นแหล่งเสียงได้", + "remuxVideoAddingClosedCaptions": "กำลังเพิ่มคำบรรยายปิด...", + "remuxVideoSelectAudioTrack": "เลือกแทร็กเสียง", + "remuxVideoSelectAudioTrackFor": "เลือกแทร็กเสียงสำหรับ {0}", + "remuxVideoSelectAudioTrackPrompt": "ไฟล์ '{0}' มีแทร็กเสียง {1} แทร็ก โปรดเลือกแทร็กเสียงที่จะรีมักซ์:", + "remuxVideoVideoFile": "วิดีโอ", + "remuxVideoAudioFile": "เสียง", + "remuxVideoAudioFiles": "ไฟล์เสียง:", + "remuxVideoSubtitleFiles": "ไฟล์คำบรรยาย (ไม่บังคับ, คำบรรยายแบบซอฟต์):", + "remuxVideoSelectAudioTrackDotDotDot": "เลือกแทร็กเสียง...", + "remuxVideoFilesX": "{0} ไฟล์", + "remuxVideoMixAudio": "ผสมเสียงเป็นแทร็กเดียว", + "remuxVideoVolumePercent": "ระดับเสียง %:", + "remuxVideoVolumeX": "ระดับเสียง {0}%", + "remuxVideoFastStart": "ปรับให้เหมาะกับการสตรีมบนเว็บ (ย้ายดัชนีไปไว้ด้านหน้า - ช้ากว่า)", "embedSubtitlesDotDotDot": "เพิ่ม/ลบคำบรรยายฝังในไฟล์...", "generateTimeCodes": "สร้างรหัสเวลา", "checkeredImage": "ภาพลายตาราง", - "saveVideoAsTitle": "บันทึกวิดีโอเป็น", "promptForFfmpegParamsAndGenerate": "ถามพารามิเตอร์ ffmpeg แล้วสร้าง", "cutVideoCutSegments": "ตัดส่วน", "cutVideoMergeSegments": "ผสานส่วน", "cutVideoSplitSegments": "บันทึกแต่ละส่วนแยกกัน", - "cutVideoType": "ชนิดการตัด", - "mpvRenderAuto": "อัตโนมัติ", - "mpvRenderNative": "เนทีฟ", - "mpvRenderOpenGl": "OpenGL", - "mpvRenderSoftware": "ซอฟต์แวร์ (ช้า)", "cutVideoAlsoCutSubtitle": "ตัดคำบรรยายด้วย", "cutVideoSubtitleFileGeneratedX": "สร้างไฟล์คำบรรยายแล้ว: {0}", + "cutVideoTransition": "ทรานซิชันระหว่างส่วน", + "cutVideoTransitionDurationSeconds": "ระยะเวลา (วินาที)", + "cutVideoFadeInSeconds": "เฟดจากสีดำตอนเริ่ม (วินาที)", + "cutVideoFadeOutSeconds": "เฟดเป็นสีดำตอนจบ (วินาที)", + "cutVideoPreviewTransition": "แสดงตัวอย่างทรานซิชัน", + "cutVideoPreviewTransitionTitle": "ตัวอย่างทรานซิชัน", + "cutVideoPreviewNeedsJoin": "ไม่มีรอยต่อให้แสดงตัวอย่าง - เพิ่มอย่างน้อยสองส่วนเพื่อรวม หรือหนึ่งส่วนเพื่อตัดออกจากตรงกลาง", + "cutVideoTransitionInfoX": "แต่ละทรานซิชันจะซ้อนทับส่วนที่เชื่อมต่อ ผลลัพธ์จึงสั้นลง {0} วินาทีต่อรอยต่อ คำบรรยายที่ตัดจะถูกปรับเวลาใหม่ให้ตรงกัน", + "cutVideoTransitionFade": "เฟด", + "cutVideoTransitionFadeBlack": "เฟดผ่านสีดำ", + "cutVideoTransitionFadeWhite": "เฟดผ่านสีขาว", + "cutVideoTransitionFadeGrays": "เฟดผ่านสีเทา", + "cutVideoTransitionDissolve": "ละลายภาพ", + "cutVideoTransitionWipeLeft": "กวาดไปทางซ้าย", + "cutVideoTransitionWipeRight": "กวาดไปทางขวา", + "cutVideoTransitionWipeUp": "กวาดขึ้น", + "cutVideoTransitionWipeDown": "กวาดลง", + "cutVideoTransitionSlideLeft": "เลื่อนไปทางซ้าย", + "cutVideoTransitionSlideRight": "เลื่อนไปทางขวา", + "cutVideoTransitionSlideUp": "เลื่อนขึ้น", + "cutVideoTransitionSlideDown": "เลื่อนลง", + "cutVideoTransitionSmoothLeft": "นุ่มนวลไปทางซ้าย", + "cutVideoTransitionSmoothRight": "นุ่มนวลไปทางขวา", + "cutVideoTransitionCircleOpen": "วงกลมเปิด", + "cutVideoTransitionCircleClose": "วงกลมปิด", + "cutVideoTransitionRadial": "แนวรัศมี", + "cutVideoTransitionPixelize": "แตกเป็นพิกเซล", + "cutVideoTransitionBlur": "เบลอ", "importCurrentSubtitle": "นำเข้าคำบรรยายปัจจุบัน", "addRemoveEmbeddedSubtitlesTitle": "เพิ่ม/ลบคำบรรยายฝังในไฟล์", "addRemoveEmbeddedSubtitlesMp4Title": "เพิ่ม/ลบคำบรรยายฝังในไฟล์ (MP4)", "addCurrentSubtitle": "เพิ่มคำบรรยายปัจจุบัน", - "embeddedTrackColumnNew": "ใหม่", "embeddedTrackNoSubtitlesFoundTitle": "ไม่พบคำบรรยาย", "embeddedTrackNoSubtitlesFoundMessage": "ไฟล์คำบรรยายที่เลือกไม่มีคำบรรยายใดๆ", "embeddedTrackNoTracksTitle": "ไม่ได้เพิ่มแทร็ก", @@ -2789,7 +3182,7 @@ "embeddedTrackGeneratingVideoXY": "กำลังสร้างวิดีโอ... {0}% {1}", "embeddedTrackGeneratingVideo": "กำลังสร้างวิดีโอ...", "mp4FilesFilter": "ไฟล์ MP4", - "titleOrLanguage": "ชื่อเรื่อง/ภาษา", + "embeddedTracksPickVideoHint": "เลือกไฟล์วิดีโอ หรือลากมาวางที่นี่ เพื่อดูแทร็กคำบรรยาย", "viewMatroskaTrackX": "ดูแทร็ก Matroska - {0}", "resolutionSeparator": "x", "openFromUrlTitle": "เปิดไฟล์วิดีโอจาก URL", @@ -2799,9 +3192,7 @@ "openFromUrlDownloadAndOpen": "ดาวน์โหลดแล้วเปิด", "openFromUrlDownloadAndOpenDescription": "บันทึกวิดีโอลงเครื่องแล้วจึงเปิด", "openFromUrlDownloadAndOpenNote": "จำเป็นสำหรับการแปลงเสียงพูดเป็นข้อความและกราฟรูปคลื่นเสียง", - "openFromUrlMissing": "โปรดป้อน URL วิดีโอก่อน", "openFromUrlDownloadingTitle": "กำลังดาวน์โหลดวิดีโอ", - "openFromUrlSaveAs": "บันทึกวิดีโอเป็น", "openFromUrlDownloadSubtitles": "ดาวน์โหลดคำบรรยายด้วย", "openFromUrlDownloadVideo": "ดาวน์โหลดวิดีโอ", "openFromUrlIncludeAutoGeneratedSubtitles": "รวมคำบรรยายที่สร้างอัตโนมัติ (ภาษาต้นฉบับ)", @@ -2838,12 +3229,15 @@ "reEncodeGeneratingDone": "สร้างเสร็จแล้ว", "reEncodeGeneratedFilesX": "ไฟล์ที่สร้างแล้ว ({0}):", "reEncodeFfmpegParameters": "พารามิเตอร์ ffmpeg", + "analyzingVideoX": "กำลังวิเคราะห์วิดีโอ... {0}% {1}", + "analyzingVideoXofY": "กำลังวิเคราะห์วิดีโอ {0}/{1}... {2}% {3}", + "backgroundImageFileNotSelected": "ยังไม่ได้เลือกไฟล์ภาพพื้นหลัง", + "backgroundImageFileDoesNotExistX": "ไม่มีไฟล์ภาพพื้นหลัง: {0}", "voices": "เสียง", "presets": "พรีเซ็ต", "talkerX": "ผู้พูด {0}", "baseModel": "โมเดลพื้นฐาน", "turboModel": "โมเดลเทอร์โบ", - "ttsUpdateX": "อัปเดต {0}", "ttsEngineNotInstalled": "ยังไม่ได้ติดตั้ง {0}", "ttsEngineUpdateAvailable": "{0} - มีอัปเดตใหม่", "ttsEngineTooOldUpdateRequired": "{0} เก่าเกินไป - ต้องอัปเดต", @@ -2866,19 +3260,25 @@ "cloneVoiceTo": "โคลนเสียงไปยัง", "cloneVoiceNameTitle": "ชื่อของเสียงใหม่", "cloneVoiceExtractFailed": "ไม่สามารถดึงเสียงสำหรับบรรทัดที่เลือกได้", + "lineXHasNoDuration": "บรรทัด {0} ไม่มีระยะเวลา (เวลาสิ้นสุดไม่ได้อยู่หลังเวลาเริ่มต้น) จึงไม่มีเสียงให้แยก", + "audioClipsSkippedLinesX": "ไม่สามารถแยกเสียงสำหรับบรรทัดเหล่านี้ได้ จึงข้ามไป: {0}", "toggleShotChange": "สลับจุดเปลี่ยนฉาก", "resetWaveformZoomAndSpeed": "รีเซ็ตการซูมและความเร็วของรูปคลื่นเสียง", "showOriginalSubtitle": "แสดงคำบรรยายต้นฉบับ", + "timelineGroupTracksBy": "จัดกลุ่มแทร็กคำบรรยายตาม", + "timelineShowThumbnails": "แสดงภาพขนาดย่อของวิดีโอ", + "showSpeechOnly": "แสดงเฉพาะเสียงพูด (สร้างช้า)", + "isolatingSpeechForWaveformX": "กำลังแยกเสียงพูดสำหรับรูปคลื่นเสียง... {0}", + "isolatingSpeechForWaveformFailed": "ไม่สามารถแยกเสียงพูดสำหรับรูปคลื่นเสียงได้ - ดูบันทึกของเครื่องมือ", + "speechOnlyWaveformReady": "รูปคลื่นเสียงแสดงเฉพาะเสียงพูดแล้ว", "showOnlyWaveform": "แสดงเฉพาะรูปคลื่นเสียง", "showOnlySpectrogram": "แสดงเฉพาะสเปกโตรแกรม", "showWaveformAndSpectrogram": "แสดงรูปคลื่นเสียงและสเปกโตรแกรม", - "spectrogramClassic": "คลาสสิก", "spectrogramClassicViridis": "Viridis", "spectrogramClassicPlasma": "Plasma", "spectrogramClassicInferno": "Inferno", "spectrogramClassicTurbo": "Turbo", "spectrogramNeon": "นีออน", - "waveformDrawStyleClassic": "คลาสสิก", "waveformDrawStyleFancy": "หรูหรา", "setVideoPositionAndPauseAndSelectSubtitle": "ตั้งตำแหน่งวิดีโอ หยุดชั่วคราว และเลือกคำบรรยาย", "setVideopositionAndPauseAndSelectSubtitleAndCenter": "ตั้งตำแหน่งวิดีโอ หยุดชั่วคราว เลือกคำบรรยาย และจัดกึ่งกลาง", @@ -2888,7 +3288,6 @@ }, "sync": { "visualSync": "ซิงก์แบบเห็นภาพ", - "sync": "ซิงก์", "startScene": "ฉากเริ่มต้น", "endScene": "ฉากจบ", "playTwoSecondsAndBack": "เล่น 2 วินาทีแล้วย้อนกลับ", @@ -2904,19 +3303,18 @@ "adjustSelectedLinesAndForward": "ปรับบรรทัดที่เลือกและถัดไปทั้งหมด", "toFrameRate": "เป็นอัตราเฟรม", "fromFrameRate": "จากอัตราเฟรม", + "videoXFrameRateY": "{0} - {1} fps", "adjustAllTimes": "ปรับเวลาทั้งหมด (แสดงเร็วขึ้น/ช้าลง)", "showEarlier": "แสดงเร็วขึ้น", "showLater": "แสดงช้าลง", - "changeFrameRate": "เปลี่ยนอัตราเฟรม", "setSyncPoint": "ตั้งจุดซิงก์", "setSyncPointViaVideo": "กำหนดจุดซิงค์ผ่านวิดีโอ...", "syncPointTimeCode": "ไทม์โค้ดของจุดซิงค์", "syncPoints": "จุดซิงก์", "pointSync": "ซิงก์แบบจุด", "pointSyncViaOther": "ซิงก์แบบจุดผ่านคำบรรยายอื่น", - "adjustmentX": "การปรับ: {0}", - "totalAdjustmentX": "การปรับทั้งหมด: {0}", - "syncPointCandidateInfo": "บรรทัดที่เริ่มหลังช่วงเงียบตั้งแต่ {0} วินาทีขึ้นไปจะถูกเน้นไว้ - มักใช้เป็นจุดซิงค์ที่เชื่อถือได้", + "syncPointCandidateAfterInfo": "บรรทัดที่ตามด้วยความเงียบ {0}+ วินาทีจะถูกเน้น - มักเป็นจุดซิงค์ที่เชื่อถือได้", + "gapAfter": "ช่องว่างหลัง", "adjustAllShortcuts": "แป้นพิมพ์ลัด:\r\n\r\n• Shift + ซ้าย/ขวา: เลื่อน 10 มิลลิวินาที\r\n• Ctrl + ซ้าย/ขวา: เลื่อน 100 มิลลิวินาที\r\n• Alt + ซ้าย/ขวา: เลื่อน 500 มิลลิวินาที", "adjustAllShortcutsFrames": "แป้นพิมพ์ลัด:\r\n\r\n• Shift + ซ้าย/ขวา: เลื่อน 1 เฟรม\r\n• Ctrl + ซ้าย/ขวา: เลื่อน 10 เฟรม\r\n• Alt + ซ้าย/ขวา: เลื่อน 1 วินาที", "offsetInSeconds": "ออฟเซ็ตเป็นวินาที", @@ -2936,6 +3334,7 @@ "lineMerge": "การรวมบรรทัด", "delayInSecondsBetweenRequests": "หน่วงเวลาเป็นวินาทีระหว่างคำขอ", "maxBytesPerRequest": "จำนวนไบต์สูงสุดต่อคำขอ", + "keepMusicLinesUntranslated": "ไม่แปลบรรทัดที่อยู่ในสัญลักษณ์ดนตรี (♪ ... ♪)", "promptText": "ข้อความพรอมต์", "resetPromptToDefault": "รีเซ็ตพรอมต์เป็นค่าเริ่มต้น", "translateEachLineSeparately": "แปลแต่ละบรรทัดแยกกัน", @@ -2949,11 +3348,10 @@ "readyToTranslate": "พร้อมแปล", "translating": "กำลังแปล...", "translationComplete": "แปลเสร็จสมบูรณ์", + "translateInPlaceNoOriginal": "แปลแทนที่ (ไม่สร้างต้นฉบับ)", "translationCancelled": "ยกเลิกการแปลแล้ว", "swapLanguages": "สลับภาษาต้นทางและปลายทาง", "xIsAlreadyDownloadedReDownload": "{0} ถูกดาวน์โหลดไว้แล้ว ดาวน์โหลดใหม่หรือไม่?", - "advancedDotDotDot": "ขั้นสูง...", - "advancedSettings": "การตั้งค่าขั้นสูง", "advancedSettingsSubtitle": "ตัวเลือกแบตช์ บริบท และการสุ่มตัวอย่างสำหรับเอนจิน llama.cpp ขั้นสูง", "context": "บริบท", "synopsis": "เรื่องย่อ", @@ -2977,6 +3375,7 @@ "useOnlyExtraServerParametersHint": "เริ่ม llama-server ด้วยพารามิเตอร์ข้างต้นแทนการปรับแต่งของ Subtitle Edit เอง - จะยังคงกำหนดเฉพาะโมเดล โฮสต์ และพอร์ตเท่านั้น", "serverRunningAtX": "เซิร์ฟเวอร์กำลังทำงานที่ {0}", "customPromptHint": "คำสั่งกำหนดเอง ({0} = ภาษาต้นทาง, {1} = ภาษาปลายทาง); เว้นว่าง = ใช้พรอมต์ในตัว", + "editTranslationHint": "คลิกคำแปลของแถวที่เลือกเพื่อแก้ไข (Enter บันทึก, Escape ยกเลิก)", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp ต้องดาวน์โหลดเอนจิน llama-server และโมเดลการแปล ดาวน์โหลดตอนนี้หรือไม่?", "llamaCppDownloadEnginePrompt": "llama.cpp ต้องดาวน์โหลดเอนจิน llama-server ดาวน์โหลดตอนนี้หรือไม่?", "llamaCppDownloadModelPrompt": "llama.cpp ต้องดาวน์โหลดโมเดลการแปลที่เลือก ดาวน์โหลดตอนนี้หรือไม่?" @@ -2989,7 +3388,6 @@ "dialogStyleDashBothLinesWithSpace": "ขีดหน้าทั้งสองบรรทัดพร้อมเว้นวรรค", "dialogStyleDashBothLinesWithoutSpace": "ขีดหน้าทั้งสองบรรทัดไม่เว้นวรรค", "continuationStyle": "รูปแบบความต่อเนื่อง", - "continuationStyleNone": "ไม่มี", "continuationStyleNoneTrailingDots": "ไม่มี, ใช้จุดสำหรับช่วงหยุด (ท้ายเท่านั้น)", "continuationStyleNoneLeadingTrailingDots": "ไม่มี, ใช้จุดสำหรับช่วงหยุด", "continuationStyleNoneTrailingEllipsis": "ไม่มี, ใช้จุดไข่ปลาสำหรับช่วงหยุด (ท้ายเท่านั้น)", @@ -3000,7 +3398,6 @@ "continuationStyleLeadingTrailingEllipsis": "จุดไข่ปลา", "continuationStyleLeadingTrailingDash": "ขีด", "continuationStyleLeadingTrailingDashDots": "ขีด แต่ใช้จุดสำหรับช่วงหยุด", - "continuationStyleCustom": "กำหนดเอง", "cpsLineLengthStyle": "CPS/ความยาวบรรทัด", "cpsLineLengthStyleCalcAll": "นับอักขระทั้งหมด", "cpsLineLengthStyleCalcNoSpaceCpsOnly": "นับทั้งหมดยกเว้นช่องว่าง, เฉพาะ CPS", @@ -3013,14 +3410,6 @@ "cpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly": "ไม่รวมช่องว่างหรือเครื่องหมายวรรคตอน, เฉพาะ CPS", "cpsLineLengthStyleCalcIgnoreArabicDiacritics": "ไม่นับเครื่องหมายกำกับเสียงอาหรับ", "cpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "ไม่นับเครื่องหมายกำกับเสียงอาหรับ, ไม่รวมช่องว่าง", - "timeCodeModeHhMmSsMs": "HH:MM:SS:MS", - "timeCodeModeHhMmSsFf": "HH:MM:SS:FF", - "splitBehaviorPrevious": "เพิ่มช่องว่างทางซ้ายของจุดแยก (โฟกัสด้านขวา)", - "splitBehaviorHalf": "เพิ่มช่องว่างตรงกลางจุดแยก (โฟกัสด้านซ้าย)", - "splitBehaviorNext": "เพิ่มช่องว่างทางขวาของจุดแยก (โฟกัสด้านซ้าย)", - "subtitleListActionNothing": "ไม่ทำอะไร", - "subtitleListActionVideoGoToPositionAndPause": "ไปยังตำแหน่งวิดีโอและหยุดชั่วคราว", - "subtitleListActionVideoGoToPositionAndPlay": "ไปยังตำแหน่งวิดีโอและเล่น", "subtitleGridCenterText": "จัดข้อความกึ่งกลางในตารางคำบรรยาย", "minGapCalculateDotDotDot": "คำนวณช่องว่างต่ำสุดจากอัตราเฟรม...", "minGapCalculateTitle": "ช่องว่างต่ำสุดระหว่างคำบรรยาย (มิลลิวินาที)", @@ -3052,8 +3441,14 @@ "checkForUpdatesChannelStableAndBeta": "เวอร์ชันเสถียรและเบต้า", "assaAutoSetResolution": "ASSA: กำหนดความละเอียด (PlayResX/PlayResY) จากวิดีโอเมื่อเปิดวิดีโอ", "assaAutoSetResolutionPrompt": "ASSA: ถามก่อนเปลี่ยนความละเอียดให้ตรงกับวิดีโอ (ไม่เช่นนั้นจะปรับสเกลอัตโนมัติ)", + "videoControls": "ตัวควบคุมวิดีโอ", + "videoControlsEdit": "แก้ไขตัวควบคุมวิดีโอ...", + "videoControlsPositionText": "ข้อความตำแหน่ง / ระยะเวลา", + "videoControlsVideoFileName": "ชื่อไฟล์วิดีโอ", + "videoControlsPlayerName": "ชื่อเครื่องเล่นวิดีโอ", "mergeKeepEndTime": "รวมบรรทัด: คงเวลาสิ้นสุดไว้ (ยอมให้ซ้อนทับกับคำบรรยายถัดไป)", "mergeKeepEndTimeOnlyAssa": "รวมบรรทัด: คงเวลาสิ้นสุดไว้เฉพาะ \"Advanced Sub Station Alpha\"", + "mergeAutoBreak": "รวมบรรทัด: ตัดบรรทัดอัตโนมัติสำหรับข้อความที่รวม (ปิด = คงการตัดบรรทัดเดิมไว้)", "defaultSaveLocation": "ตำแหน่งบันทึกเริ่มต้น", "defaultSaveLocationSourceFileFolder": "โฟลเดอร์ของไฟล์คำบรรยาย/วิดีโอ", "defaultSaveLocationLastUsedFolder": "โฟลเดอร์ที่ใช้ล่าสุด", @@ -3061,18 +3456,10 @@ "defaultSaveLocationSubtitleFileFolder": "โฟลเดอร์ของไฟล์คำบรรยาย", "defaultSaveLocationCustomFolder": "โฟลเดอร์ที่กำหนดเอง", "subtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "ไปยังตำแหน่งวิดีโอ เล่นบรรทัดปัจจุบัน แล้วหยุดชั่วคราว", - "subtitleListActionEditText": "ไปยังกล่องแก้ไขข้อความ", "subtitleListActionVideoGoToPositionMinus1SecAndPause": "ไปยังตำแหน่งวิดีโอ - 1 วินาทีและหยุดชั่วคราว", "subtitleListActionVideoGoToPositionMinusHalfSecAndPause": "ไปยังตำแหน่งวิดีโอ - 0.5 วินาทีและหยุดชั่วคราว", "subtitleListActionVideoGoToPositionMinus1SecAndPlay": "ไปยังตำแหน่งวิดีโอ - 1 วินาทีและเล่น", - "subtitleListActionEditTextAndPause": "ไปยังกล่องแก้ไขข้อความ และหยุดชั่วคราวที่ตำแหน่งวิดีโอ", - "autoBackupEveryMinute": "ทุกนาที", - "autoBackupEveryXthMinute": "ทุก {0} นาที", - "profiles": "โปรไฟล์", - "autoBackupDeleteAfterXMonths": "ลบข้อมูลสำรองอัตโนมัติหลังจาก {0} เดือน", "searchSettingsDotDotDot": "ค้นหาการตั้งค่า...", - "syntaxColoring": "การระบายสีไวยากรณ์", - "waveformSpectrogram": "รูปคลื่นเสียง/สเปกโตรแกรม", "network": "เครือข่าย", "fileTypeAssociations": "การเชื่อมโยงประเภทไฟล์", "textBoxColorTags": "แท็กสี (HTML/ASSA) ในกล่องข้อความคำบรรยาย", @@ -3105,10 +3492,9 @@ "darkThemeForegroundColor": "สีพื้นหน้าธีมมืด", "darkThemeBackgroundColor": "สีพื้นหลังธีมมืด", "showGridLines": "แสดงเส้นตาราง", - "resetSettings": "รีเซ็ตการตั้งค่า?", - "resetSettingsDetail": "การดำเนินการนี้จะรีเซ็ตการตั้งค่าทั้งหมดเป็นค่าเริ่มต้น\n\nดำเนินการต่อหรือไม่?", "showHorizontalLineAboveToolbar": "แสดงเส้นแนวนอนเหนือแถบเครื่องมือ", "bookmarkColor": "สีบุ๊กมาร์ก", + "spellCheckHighlightColor": "สีเน้นของการตรวจสอบการสะกด", "singleLineMaxLength": "ความยาวสูงสุดต่อบรรทัด", "optimalCharsPerSec": "อักขระ/วินาทีที่เหมาะสม", "maxCharsPerSec": "อักขระ/วินาทีสูงสุด", @@ -3121,13 +3507,21 @@ "unbreakSubtitlesShortThan": "ยกเลิกการตัดบรรทัดคำบรรยายที่สั้นกว่า", "newEmptyDefaultMs": "ระยะเวลาเริ่มต้นของคำบรรยายใหม่ (มิลลิวินาที)", "timeCodeUpDownStepMs": "ขั้นการเพิ่ม/ลดเวลา (มิลลิวินาที)", + "moveSelectedLinesStepMs": "ระยะก้าวของปุ่มลัดย้ายบรรทัดที่เลือก (ms)", + "moveStartEndStepMs": "ระยะก้าวของปุ่มลัดย้ายเวลาเริ่มต้น/สิ้นสุด (ms)", + "moveLinesShortenNeighbor": "ย้ายบรรทัด: ย่อบรรทัดก่อนหน้า/ถัดไปแทนการซ้อนทับ", "promptBeforeDelete": "ถามก่อนลบ", "rememberPositionAndSize": "จดจำตำแหน่งและขนาดหน้าต่าง", + "titleBarFullFileName": "แสดงพาธไฟล์แบบเต็มในแถบชื่อเรื่อง", + "showRecentFiles": "แสดงไฟล์ล่าสุด (สำหรับเปิดซ้ำ)", "openLastFileOnStart": "เปิดไฟล์ล่าสุดเมื่อเริ่มโปรแกรม", "autoSave": "บันทึกอัตโนมัติ (บันทึกไฟล์ที่เปิดอยู่ระหว่างแก้ไข)", "autoBackupOn": "สำรองข้อมูลอัตโนมัติ", "autoBackupIntervalMinutes": "ช่วงเวลาสำรองข้อมูลอัตโนมัติ (นาที)", "autoBackupDeleteAfterDays": "ระยะเวลาเก็บข้อมูลสำรองอัตโนมัติ (วัน)", + "settingsBackupOn": "สำรองการตั้งค่าอัตโนมัติ", + "settingsBackupIntervalDays": "ช่วงเวลาสำรองการตั้งค่า (วัน, 0 = ทุกครั้งที่เริ่ม)", + "settingsBackupMaxCount": "จำนวนข้อมูลสำรองการตั้งค่าที่จะเก็บ", "autoConvertToUtf8": "แปลงการเข้ารหัสเป็น UTF-8 อัตโนมัติเมื่อเปิด", "autoTrimWhiteSpace": "ตัดช่องว่างอัตโนมัติ", "defaultEncoding": "การเข้ารหัสเริ่มต้น", @@ -3143,23 +3537,14 @@ "colorGapTooShort": "ระบายสีหากช่องว่างสั้นเกินไป", "errorBackgroundColor": "สีพื้นหลังข้อผิดพลาด", "waveformDrawGridLines": "วาดเส้นตาราง", - "waveformCenterVideoPosition": "จัดตำแหน่งวิดีโอกึ่งกลาง", + "waveformUseSkiaRenderer": "ใช้ตัวเรนเดอร์แบบเร็ว (ทดลอง)", "waveformCenterVideoPositionAlsoWhenPaused": "จัดตำแหน่งวิดีโอกึ่งกลางแม้ขณะหยุดชั่วคราว", + "waveformSelectCurrentSubtitleWhilePaused": "เลือกคำบรรยายปัจจุบันขณะหยุดชั่วคราวด้วย", + "waveformRememberZoom": "จดจำการซูม (แนวนอนและแนวตั้ง)", "waveformShowToolbar": "แสดงแถบเครื่องมือ", "waveformShowToolbarEdit": "แก้ไขแถบเครื่องมือ...", "waveformShowToolbarEditLabel": "รายการในแถบเครื่องมือ", "waveformSpectrogramCombinedWaveformHeight": "รูปคลื่นเสียง/สเปกโตรแกรมรวมกัน, ความสูงรูปคลื่นเสียง %", - "showWaveformToolbarPlay": "แถบเครื่องมือ: แสดงปุ่มเล่น", - "showWaveformToolbarRepeat": "แถบเครื่องมือ: แสดงปุ่มเล่นซ้ำ", - "showWaveformToolbarRemoveBlankLines": "แถบเครื่องมือ: แสดงปุ่มลบบรรทัดว่าง", - "showWaveformToolbarNew": "แถบเครื่องมือ: แสดงปุ่มคำบรรยายใหม่", - "showWaveformToolbarSetStart": "แถบเครื่องมือ: แสดงปุ่มตั้งจุดเริ่มต้น", - "showWaveformToolbarSetEnd": "แถบเครื่องมือ: แสดงปุ่มตั้งจุดสิ้นสุด", - "showWaveformToolbarStartAndOffsetTheRest": "แถบเครื่องมือ: แสดงปุ่มตั้งจุดเริ่มต้นและเลื่อนส่วนที่เหลือ", - "showWaveformToolbarHorizontalZoom": "แถบเครื่องมือ: แสดงแถบเลื่อนซูมแนวนอน", - "showWaveformToolbarVerticalZoom": "แถบเครื่องมือ: แสดงแถบเลื่อนซูมแนวตั้ง", - "showWaveformToolbarVideoPositionSlider": "แถบเครื่องมือ: แสดงแถบเลื่อนตำแหน่งวิดีโอ", - "showWaveformToolbarPlaybackSpeed": "แถบเครื่องมือ: แสดงความเร็วการเล่น", "waveformFocusTextboxAfterInsertNew": "โฟกัสกล่องข้อความหลังแทรก", "waveformInvertMouseWheel": "กลับทิศทางล้อเมาส์", "waveformMouseWheelSetsVideoPosition": "ล้อเมาส์ตั้งตำแหน่งวิดีโอ", @@ -3180,20 +3565,20 @@ "fixCommonErrorsSkipStep1": "แก้ไขข้อผิดพลาดทั่วไป: ข้ามขั้นตอนที่ 1 (เลือกการแก้ไข)", "showPluginsMenu": "แสดงเมนูปลั๊กอิน", "proxyAddress": "ที่อยู่พร็อกซี", - "username": "ชื่อผู้ใช้", "password": "รหัสผ่าน", "defaultFormat": "รูปแบบเริ่มต้น", "defaultSaveAsFormat": "รูปแบบ \"บันทึกเป็น\" เริ่มต้น", "favoriteSubtitleFormats": "รูปแบบคำบรรยายโปรด", "favoriteLanguages": "ภาษาโปรด", "webVttUseXTimestampMap": "WebVTT: ใช้ X-TIMESTAMP-MAP (เลื่อนรหัสเวลาเมื่อโหลด)", - "showStopButton": "แสดงปุ่มหยุด", - "showFullscreenButton": "แสดงปุ่มเต็มหน้าจอ", "fullscreenHideControls": "ซ่อนแถบควบคุมวิดีโอในโหมดเต็มหน้าจอ", + "showSecondarySubtitleDialog": "แสดงกล่องโต้ตอบสไตล์เมื่อเปิดไฟล์คำบรรยายรอง", + "rememberSecondarySubtitleFile": "จดจำไฟล์คำบรรยายรอง", "autoOpenVideoFile": "เปิดไฟล์วิดีโออัตโนมัติเมื่อเปิดคำบรรยาย", "downloadMpv": "ดาวน์โหลด mpv", "downloadVlc": "ดาวน์โหลด VLC", "allowSingleLetterShortcutsInTextbox": "อนุญาตแป้นลัดตัวอักษรเดี่ยวในกล่องข้อความ", + "allowTextNavigationShortcutsInTextbox": "อนุญาตปุ่มลัดบนปุ่มนำทางข้อความ (Ctrl+Left/Right, Home/End) ในกล่องข้อความ", "spellCheckEnglishTreatInApostropheAsIng": "ตรวจการสะกด: ถือว่าคำที่ลงท้ายด้วย 'in'' เป็น 'ing' (ภาษาอังกฤษเท่านั้น)", "goToLineNumberSetsVideoPosition": "การไปยังหมายเลขบรรทัดตั้งตำแหน่งวิดีโอด้วย", "adjustAllTimesRememberLineSelectionChoice": "ปรับเวลาทั้งหมด จดจำตัวเลือกการเลือกบรรทัด", @@ -3205,6 +3590,7 @@ "showAssaLayer": "แสดงกล่องเลเยอร์ ASSA", "waveformCursorColor": "สีเคอร์เซอร์/หัวอ่านรูปคลื่นเสียง", "waveformShotChangeColor": "สีจุดเปลี่ยนฉากบนรูปคลื่นเสียง", + "waveformGridColor": "สีเส้นตารางของรูปคลื่นเสียง", "waveformParagraphLeftColor": "สีขอบซ้ายรูปคลื่นเสียง", "waveformParagraphRightColor": "สีขอบขวารูปคลื่นเสียง", "waveformFancyHighColor": "สีช่วงสูงแบบหรูหราของรูปคลื่นเสียง", @@ -3232,27 +3618,31 @@ "resetSyntaxColoring": "รีเซ็ตการระบายสีไวยากรณ์", "resetWaveform": "รีเซ็ตรูปคลื่นเสียง", "resetRules": "รีเซ็ตกฎ", - "useFrameMode": "ใช้โหมดเฟรม (hh.mm.ss.ff)", + "timeCodeMode": "โหมดไทม์โค้ด", + "timeCodeModeTime": "เวลา (hh:mm:ss,zzz)", + "timeCodeModeFrames": "เฟรม (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "หมายเลขเฟรม", + "frameModeSnapToVideoFrames": "เก็บเวลาตามเฟรมวิดีโอ (ไม่ใช่เฟรมภายในแต่ละวินาที)", "textBoxLimitNewLines": "จำกัดจำนวนบรรทัดในกล่องข้อความคำบรรยาย", - "mpvVideoOutput": "เอาต์พุตวิดีโอ (mpv)", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - การเรนเดอร์ด้วยซอฟต์แวร์ (ช้า)", + "mpvMetalRendering": "libmpv - Metal (ทดลอง, ต้องเริ่มใหม่)", "mpvWidRendering": "libmpv - การเรนเดอร์ Native Window ID", "waveFormsAndSpectrogramFoldersContainsX": "โฟลเดอร์ \"Waveforms\" และ \"spectrogram\" มีขนาด {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "ลบไฟล์ \"Waveforms\" และ \"Spectrogram\" หรือไม่?", "waveformGenerateSpectrogram": "สร้างสเปกโตรแกรม", "waveformAutoGenerate": "สร้างรูปคลื่นเสียงอัตโนมัติเมื่อเปิดวิดีโอ", "waveformSpectrogramMode": "โหมดสเปกโตรแกรม", - "waveformCenterOnSingleClick": "จัดกึ่งกลางเมื่อคลิกครั้งเดียว", - "waveformSingleClickSelectsSubtitle": "เลือกคำบรรยายเมื่อคลิกครั้งเดียว", "waveformRightClickSelectsSubtitle": "เลือกคำบรรยายเมื่อคลิกขวา", - "waveformPauseOnSingleClick": "หยุดชั่วคราวเมื่อคลิกครั้งเดียว", "waveformDrawStyle": "รูปแบบการวาดรูปคลื่นเสียง", "waveformExtractAudioFormat": "รูปแบบการแยกเสียง", "waveformExtractAudioSampleRate": "อัตราสุ่มตัวอย่างการแยกเสียง", "waveformExtractAudioSampleRateOriginal": "ต้นฉบับ (คงตามแหล่งที่มา)", "waveformExtractAudioBitRate": "บิตเรตการแยกเสียง (MP3/M4A)", + "ffmpegUseCenterChannelOnly": "ใช้เฉพาะช่องกลางด้านหน้าสำหรับเสียง 5.1 (FFmpeg)", "vlcWidRendering": "libVLC - การเรนเดอร์ Native Window ID", + "ffmpegSoftwareRendering": "FFmpeg", + "downloadFfmpegLibs": "ดาวน์โหลดไลบรารี FFmpeg (สำหรับเครื่องเล่นวิดีโอ FFmpeg)", "subtitleGridEnterKeyAction": "การกระทำเมื่อกด Enter ในตารางคำบรรยาย", "subtitleSingleClickAction": "การกระทำเมื่อคลิกครั้งเดียวในตารางคำบรรยาย", "subtitleDoubleClickAction": "การกระทำเมื่อดับเบิลคลิกในตารางคำบรรยาย", @@ -3270,6 +3660,7 @@ "subtitleGridFormattingShowFormatting": "แสดงการจัดรูปแบบ", "subtitleGridFormattingShowTags": "แสดงแท็ก", "subtitleGridFormattingHideTags": "ซ่อนแท็ก", + "subtitleGridFormattingShowFormattingKeepTags": "แสดงการจัดรูปแบบ คงแท็กที่ไม่ใช่การแสดงผลไว้", "waveformParagraphBackgroundColor": "สีพื้นหลังคำบรรยายบนรูปคลื่นเสียง", "waveformParagraphSelectedBackgroundColor": "สีพื้นหลังคำบรรยายที่เลือกบนรูปคลื่นเสียง", "waveformAllowOverlap": "อนุญาตการทับซ้อน (เมื่อย้าย/ปรับขนาด)", @@ -3279,17 +3670,18 @@ "saveAsBehaviorUseVideoFileName": "ใช้ชื่อไฟล์วิดีโอ", "saveAsBehaviorUseSubtitleFileName": "ใช้ชื่อไฟล์คำบรรยาย", "saveAsAppendLanguageCodeTwoLetter": "สองตัวอักษร", - "saveAsAppendLanguageCodeThreeLetter": "สามตัวอักษร (ISO 639-2/T)", - "saveAsAppendLanguageCodeThreeLetterBibliographic": "สามตัวอักษร (ISO 639-2/B)", "saveAsAppendLanguageCodeLanguageName": "ชื่อภาษา", "splitOddLineActionWeightTop": "ให้น้ำหนักด้านบน", "splitOddLineActionWeightBottom": "ให้น้ำหนักด้านล่าง", "splitOddLinesAction": "การกระทำเมื่อแยกบรรทัดคี่", "ocrUseWordSplitList": "OCR: ใช้รายการแยกคำ", "ocrGuessUnknownWords": "OCR: พยายามเดาคำที่ไม่รู้จัก", + "spellCheckRememberUseAlwaysList": "ตรวจสอบการสะกด: จดจำรายการ \"ใช้เสมอ\"", + "fixShortDisplayTimesAllowMoveStartTime": "แก้ไขข้อผิดพลาดทั่วไป: การแก้ไขเวลาแสดงผลที่สั้นอาจย้ายเวลาเริ่มต้น", "speechToTextSelectedLinesPromptFirstTimeOnly": "แปลงเสียงพูดเป็นข้อความ: บรรทัดที่เลือก, ถามภาษา/เอนจินเฉพาะครั้งแรก", "multipleReplaceShowDotDotDotButtons": "การแทนที่หลายรายการ: แสดงปุ่มเมนูบริบท", "gridFocusTextboxAfterInsertNew": "ตาราง: โฟกัสกล่องข้อความหลังแทรกคำบรรยายใหม่", + "undoRedoGoToChangedLine": "เลิกทำ/ทำซ้ำ: ไปยังบรรทัดที่เปลี่ยนแปลง (และตำแหน่งวิดีโอ)", "musicSymbol": "สัญลักษณ์ดนตรี", "musicSymbolsToReplace": "สัญลักษณ์ดนตรีที่จะแทนที่ (คั่นด้วยจุลภาค)", "textToSpeechPromptMergeContinuationLines": "แปลงข้อความเป็นเสียงพูด: ถามเพื่อรวมบรรทัดต่อเนื่อง", @@ -3298,8 +3690,7 @@ "useFocusedButtonBackgroundColor": "ใช้สีพื้นหลังปุ่มที่โฟกัส", "focusedButtonBackgroundColor": "สีพื้นหลังปุ่มที่โฟกัส", "forceCrLfOnSave": "บังคับใช้ CR+LF เมื่อบันทึก (ไฟล์คำบรรยายข้อความ)", - "showWaveformToolbarPlayNext": "แถบเครื่องมือ: แสดงปุ่มเล่นถัดไป", - "showWaveformToolbarPlaySelection": "แถบเครื่องมือ: แสดงปุ่มเล่นส่วนที่เลือก", + "linuxClipboardUseExternalTool": "คัดลอกข้อความผ่าน xclip/wl-copy (คงอักขระที่มีเครื่องหมายกำกับ)", "showFormatLimitWarning": "เตือนเมื่อบันทึกหากบรรทัดเกินข้อจำกัดของรูปแบบ (เช่น SCC 32 อักขระ/บรรทัด)", "textBoxButtonShowAutoBreak": "กล่องข้อความ: แสดงปุ่มตัดบรรทัดอัตโนมัติ", "textBoxButtonShowUnbreak": "กล่องข้อความ: แสดงปุ่มยกเลิกการตัดบรรทัด", @@ -3311,12 +3702,18 @@ "waveformDoubleClickAction": "การกระทำเมื่อดับเบิลคลิกบนรูปคลื่นเสียง (หลังการกระทำคลิกครั้งเดียว)", "allSettings": "การตั้งค่าทั้งหมด", "uiScale": "มาตราส่วน UI (%)", + "fontScale": "มาตราส่วนฟอนต์ (%)", + "textSelectionOpacity": "ความทึบของการเลือกข้อความ (%)", "waveformToolbarItems": "รายการแถบเครื่องมือรูปคลื่นเสียง", "matchIconColorToDarkTheme": "ปรับสีไอคอนให้เข้ากับสีพื้นหน้าธีมมืด", "subtitlePreviewProperties": "คุณสมบัติตัวอย่างคำบรรยาย", "usePositionFromSubtitleFile": "ใช้ตำแหน่งจากไฟล์คำบรรยาย (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "ระยะขอบเป็นส่วนหนึ่งของพื้นที่คำบรรยาย", "textJustify": "จัดบรรทัดชิดขอบเต็มแนว", + "deinterlace": "Deinterlace วิดีโอ", + "deinterlaceOff": "ปิด", + "deinterlaceAuto": "อัตโนมัติ (เฉพาะเฟรมแบบ interlaced)", + "deinterlaceAlways": "เสมอ", "pixelWidthInfo": "เส้นสีเขียว = ขีดจำกัดความกว้างสูงสุด | พื้นที่สีแดง = ข้อความเกินขีดจำกัด", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3325,117 +3722,89 @@ "waveformColorTheme": "ธีมสี:", "waveformSaveAsCustomTheme": "บันทึกเป็นธีมกำหนดเอง...", "waveformLoadThemeDotDotDot": "โหลดธีม...", - "waveformExportThemeDotDotDot": "ส่งออกธีม..." + "waveformExportThemeDotDotDot": "ส่งออกธีม...", + "waveformSaveCustomThemeTitle": "บันทึกธีมกำหนดเอง", + "waveformThemeFileType": "ธีมรูปคลื่นเสียงของ Subtitle Edit", + "waveformThemeHighContrast": "คอนทราสต์สูง", + "waveformThemeOceanBlue": "น้ำเงินมหาสมุทร", + "waveformThemeWarmSunset": "อาทิตย์ตกอบอุ่น", + "waveformThemeForest": "ป่าไม้", + "waveformThemeMidnightPurple": "ม่วงเที่ยงคืน", + "waveformThemeRetroAmber": "อำพันย้อนยุค", + "waveformThemeIce": "น้ำแข็ง" }, "shortcuts": { - "title": "แป้นลัด", "searchShortcuts": "ค้นหาแป้นลัด...", - "filter": "ตัวกรอง", - "categoryGeneral": "ทั่วไป", "categorySubtitleGridAndTextBox": "มุมมองรายการคำบรรยายและกล่องข้อความ", "categorySubtitleGrid": "มุมมองรายการคำบรรยาย", - "categoryWaveform": "รูปคลื่นเสียง", "categoryTextBox": "กล่องข้อความ", "categoryFile": "ไฟล์", "categoryVideo": "วิดีโอ", "categorySync": "การซิงก์", - "categoryTranslate": "แปล", - "categorySearch": "ค้นหา", - "categoryTools": "เครื่องมือ", "categoryAi": "AI", + "categoryCustom": "กำหนดเอง", + "editCustomShortcut": "แก้ไขปุ่มลัดกำหนดเอง", + "customShortcutTextBoxKeyHint": "ใช้ปุ่มร่วมกับ Ctrl/Alt ที่นี่ - ปุ่มเดี่ยวจะไม่สามารถพิมพ์ในกล่องข้อความได้อีก", + "customShortcutNumberX": "ปุ่มลัดกำหนดเอง #{0}", + "customShortcutNumberXY": "ปุ่มลัดกำหนดเอง #{0}: {1}", + "customShortcutStep": "ขั้นตอน", + "customShortcutSteps": "ขั้นตอน", + "customShortcutStepRunCommand": "เรียกใช้คำสั่ง", + "customShortcutStepInsertText": "แทรกข้อความ", + "customShortcutStepReplace": "ค้นหาและแทนที่", + "customShortcutInsertAtCursor": "ที่เคอร์เซอร์", + "customShortcutInsertAtStart": "ที่ต้นข้อความ", + "customShortcutInsertAtEnd": "ที่ท้ายข้อความ", + "customShortcutSummaryRunCommandX": "เรียกใช้: {0}", + "customShortcutSummaryInsertXY": "แทรก \"{0}\" ({1})", + "customShortcutSummaryReplaceXY": "แทนที่ \"{0}\" ด้วย \"{1}\"", + "customShortcutSummaryReplaceRegexXY": "แทนที่ regex \"{0}\" ด้วย \"{1}\"", + "customShortcutPickCommand": "โปรดเลือกคำสั่งที่จะเรียกใช้", + "customShortcutEnterText": "โปรดป้อนข้อความที่จะแทรก", + "customShortcutEnterFind": "โปรดป้อนข้อความที่จะค้นหา", + "customShortcutInvalidRegexX": "นิพจน์ทั่วไปไม่ถูกต้อง: {0}", + "customShortcutStepsHint": "ขั้นตอนจะทำงานจากบนลงล่าง ขั้นตอนข้อความทำงานกับบรรทัดที่เลือก คำสั่งที่เปิดหน้าต่างจะทำงานต่อหลังจากหน้าต่างปิด", "activeIn": "ใช้งานได้ใน", "activeInEverywhere": "ทุกที่", - "generalSetupLikeSe4": "ตั้งค่าเหมือน Subtitle Edit 4 (ธีม, แป้นลัด, กฎการแทนที่)", - "generalMergeSelectedLines": "รวมบรรทัดที่เลือก", - "generalMergeWithPrevious": "รวมกับบรรทัดก่อนหน้า", - "generalMergeWithNext": "รวมกับบรรทัดถัดไป", - "generalMergeWithPreviousAndUnbreak": "รวมกับบรรทัดก่อนหน้าและยกเลิกการตัดบรรทัด", - "generalMergeWithNextAndUnbreak": "รวมกับบรรทัดถัดไปและยกเลิกการตัดบรรทัด", - "generalMergeWithPreviousAndAutoBreak": "รวมกับบรรทัดก่อนหน้าและตัดบรรทัดอัตโนมัติ", - "generalMergeWithNextAndAutoBreak": "รวมกับบรรทัดถัดไปและตัดบรรทัดอัตโนมัติ", - "generalMergeSelectedLinesAndAutoBreak": "รวมบรรทัดที่เลือกและตัดบรรทัดอัตโนมัติ", "generalMergeSelectedLinesAndUnbreak": "รวมบรรทัดที่เลือกและยกเลิกการตัดบรรทัด", "generalMergeSelectedLinesAndUnbreakCjk": "รวมบรรทัดที่เลือกและยกเลิกการตัดบรรทัดโดยไม่มีช่องว่าง (CJK)", "generalUnbreakNoSpaceCjk": "ยกเลิกการตัดบรรทัดโดยไม่มีช่องว่าง (CJK)", - "generalMergeSelectedLinesOnlyFirstText": "รวมบรรทัดที่เลือกเฉพาะข้อความแรก", + "generalToggleBreak": "สลับตัดบรรทัด/รวมบรรทัด", "generalMergeSelectedLinesBilingual": "รวมบรรทัดที่เลือกแบบสองภาษา", - "generalMergeWithPreviousBilingual": "รวมกับบรรทัดก่อนหน้าแบบสองภาษา", - "generalMergeWithNextBilingual": "รวมกับบรรทัดถัดไปแบบสองภาษา", - "generalMergeOriginalAndTranslation": "รวมต้นฉบับและคำแปล", "generalToggleTranslationMode": "สลับโหมดการแปล", - "generalSwitchOriginalAndTranslation": "สลับต้นฉบับและคำแปล", - "generalSwitchOriginalAndTranslationTextBoxes": "สลับกล่องข้อความต้นฉบับและคำแปล", "generalToggleTranslationAndOriginalInPreviews": "สลับคำแปลและต้นฉบับในตัวอย่างวิดีโอ/เสียง", "generalChooseLayout": "เลือกเลย์เอาต์", - "generalLayoutChooseX": "เลย์เอาต์ {0}", - "generalPlayFirstSelected": "เล่นบรรทัดแรกที่เลือก", - "generalGoToFirstSelectedLine": "ไปยังบรรทัดแรกที่เลือก", - "generalGoToNextEmptyLine": "ไปยังบรรทัดว่างถัดไป", "generalGoToNextSubtitle": "ไปยังคำบรรยายถัดไป", "generalGoToNextSubtitlePlayTranslate": "ไปยังคำบรรยายถัดไป (เล่นขณะแปล)", "generalGoToNextSubtitleCursorAtEnd": "ไปยังคำบรรยายถัดไป (เคอร์เซอร์ที่ท้าย)", "generalGoToPrevSubtitle": "ไปยังคำบรรยายก่อนหน้า", "generalGoToPrevSubtitlePlayTranslate": "ไปยังคำบรรยายก่อนหน้า (เล่นขณะแปล)", - "generalGoToStartOfCurrentSubtitle": "ไปยังจุดเริ่มต้นของคำบรรยายปัจจุบัน", - "generalGoToEndOfCurrentSubtitle": "ไปยังจุดสิ้นสุดของคำบรรยายปัจจุบัน", - "generalGoToPreviousSubtitleAndFocusVideo": "ไปยังคำบรรยายก่อนหน้าและโฟกัสวิดีโอ", - "generalGoToNextSubtitleAndFocusVideo": "ไปยังคำบรรยายถัดไปและโฟกัสวิดีโอ", - "generalGoToPrevSubtitleAndPlay": "ไปยังคำบรรยายก่อนหน้าและเล่น", - "generalGoToNextSubtitleAndPlay": "ไปยังคำบรรยายถัดไปและเล่น", - "generalGoToPreviousSubtitleAndFocusWaveform": "ไปยังคำบรรยายก่อนหน้าและโฟกัสรูปคลื่นเสียง", - "generalGoToNextSubtitleAndFocusWaveform": "ไปยังคำบรรยายถัดไปและโฟกัสรูปคลื่นเสียง", - "generalGoToLineNumber": "ไปยังหมายเลขบรรทัด", "generalGoToFirstLine": "ไปที่บรรทัดแรก", "generalGoToLastLine": "ไปที่บรรทัดสุดท้าย", "alsoSetVideoPosition": "กำหนดตำแหน่งวิดีโอด้วย", "generalGoToVideoPosition": "ไปยังตำแหน่งวิดีโอ", "generalToggleItalic": "สลับตัวเอียง", "generalToggleBold": "สลับตัวหนา", - "generalToggleBookmarks": "สลับบุ๊กมาร์ก", - "generalFocusTextBox": "โฟกัสกล่องข้อความ", - "generalToggleBookmarksWithText": "สลับบุ๊กมาร์กพร้อมข้อความ", - "generalEditBookmarks": "แก้ไขบุ๊กมาร์ก", - "fileNew": "ใหม่", "generalToggleUnderline": "สลับขีดเส้นใต้", + "generalToggleBox": "สลับกล่อง (EBU STL)", "fileOpen": "เปิด", "fileOpenKeepVideo": "เปิด (คงวิดีโอไว้)", "fileSave": "บันทึก", "fileSaveAs": "บันทึกเป็น", - "fileSaveAll": "บันทึกทั้งหมด", "fileSaveOriginal": "บันทึกต้นฉบับ", - "fileSaveOriginalAs": "บันทึกต้นฉบับเป็น", - "fileOpenOriginalSubtitle": "เปิดคำบรรยายต้นฉบับ", - "fileCloseOriginalSubtitle": "ปิดคำบรรยายต้นฉบับ", - "fileTranslatedSubtitle": "คำบรรยายที่แปลแล้ว", "fileCompare": "เปรียบเทียบ", "fileStatistics": "สถิติ", "fileImportPlainText": "นำเข้าข้อความธรรมดา", - "fileImportBluRaySupForOcr": "นำเข้า Blu-ray SUP สำหรับ OCR", - "fileImportBluRaySupForEdit": "นำเข้า Blu-ray SUP สำหรับแก้ไข", - "fileImportTimeCodes": "นำเข้ารหัสเวลา", "fileExportEbuStl": "ส่งออก EBU STL", "fileExportPac": "ส่งออก PAC", - "fileExportEdlClipName": "ส่งออกชื่อคลิป EDL", - "fileExportPlainText": "ส่งออกข้อความธรรมดา", - "fileExportCustomTextFormat1": "ส่งออกรูปแบบข้อความกำหนดเอง 1", - "fileExportCustomTextFormat2": "ส่งออกรูปแบบข้อความกำหนดเอง 2", - "fileExportCustomTextFormat3": "ส่งออกรูปแบบข้อความกำหนดเอง 3", "fileExit": "ออก", "openSeDataFolder": "เปิดโฟลเดอร์ Subtitle Edit", - "editFind": "ค้นหา", - "editFindNext": "ค้นหาถัดไป", "editFindPrevious": "ค้นหาก่อนหน้า", - "editReplace": "แทนที่", - "editMultipleReplace": "แทนที่หลายรายการ", "fillSelectedLinesWithClipboard": "เติมบรรทัดที่เลือกด้วยข้อความจากคลิปบอร์ด", - "editModifySelection": "ปรับเปลี่ยนการเลือก", - "listSelectAll": "เลือกทั้งหมด", - "listSelectFirst": "เลือกรายการแรก", - "listSelectLast": "เลือกรายการสุดท้าย", "listInverseSelection": "กลับการเลือก", "listDeleteSelection": "ลบส่วนที่เลือก", + "deleteSelectionEverywhere": "ลบส่วนที่เลือก (ทุกที่)", "rippleDeleteSelection": "ลบส่วนที่เลือกแบบริปเปิล", - "settings": "การตั้งค่า", "assigned": "กำหนดแล้ว", "unassigned": "ยังไม่กำหนด", "pressedKeyX": "ปุ่มที่กด: {0}", @@ -3443,6 +3812,7 @@ "detectKey": "ตรวจจับปุ่ม", "control": "Control", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Shift", "controlMac": "⌃", @@ -3453,11 +3823,14 @@ "resetShortcutsDetail": "คุณต้องการรีเซ็ตแป้นลัดทั้งหมดเป็นค่าเริ่มต้นหรือไม่?", "togglePlayPause": "สลับเล่น/หยุดชั่วคราว", "toggleLockTimeCodes": "สลับการล็อกรหัสเวลา", + "toggleTimeCodeMode": "สลับโหมดไทม์โค้ด (เวลา/เฟรม/หมายเลขเฟรม)", + "toggleScreenPrivacy": "สลับความเป็นส่วนตัวของหน้าจอ (ซ่อนชื่อไฟล์ แล้วซ่อนข้อความด้วย)", + "screenPrivacyFileNamesHidden": "ความเป็นส่วนตัวของหน้าจอ: ซ่อนชื่อไฟล์แล้ว", + "screenPrivacyFileNamesAndTextsHidden": "ความเป็นส่วนตัวของหน้าจอ: ซ่อนชื่อไฟล์และข้อความแล้ว", + "screenPrivacyOff": "ความเป็นส่วนตัวของหน้าจอ: ปิด", "duplicateSelectedLines": "ทำสำเนาบรรทัดที่เลือก", "sourceView": "มุมมองซอร์ส", - "showAlignmentPicker": "การจัดตำแหน่ง", "addOrEditBookmark": "เพิ่มหรือแก้ไขบุ๊กมาร์ก", - "listBookmarks": "แสดงรายการบุ๊กมาร์ก", "toggleBookmark": "สลับบุ๊กมาร์ก (บรรทัดที่เลือก, ไม่มีข้อความ)", "toggleForcedSelectedLines": "สลับบังคับแสดง (บรรทัดที่เลือก)", "goToNextBookmark": "ไปยังบุ๊กมาร์กถัดไป", @@ -3468,12 +3841,12 @@ "waveformSetStartAndSetEndOfPreviousMinusGap": "ตั้งจุดเริ่มต้นและตั้งจุดสิ้นสุดของบรรทัดก่อนหน้าลบช่องว่าง", "waveformSetEndAndStartOfNextAfterGap": "ตั้งจุดสิ้นสุดและจุดเริ่มต้นของบรรทัดถัดไปบวกช่องว่าง", "waveformSetEndAndStartOfNextAfterGapAndGoToNext": "ตั้งจุดสิ้นสุดและจุดเริ่มต้นของบรรทัดถัดไปบวกช่องว่างแล้วไปยังบรรทัดถัดไป", - "fetchFirstWordFromNextSubtitle": "ดึงคำแรกจากคำบรรยายถัดไป", "moveLastWordToNextSubtitle": "ย้ายคำสุดท้ายไปยังคำบรรยายถัดไป", "moveLastWordFromFirstLineDownCurrentSubtitle": "ย้ายคำสุดท้ายจากบรรทัดแรกลง (คำบรรยายปัจจุบัน)", "moveFirstWordFromNextLineUpCurrentSubtitle": "ย้ายคำแรกจากบรรทัดถัดไปขึ้น (คำบรรยายปัจจุบัน)", "moveTextFromCursorToNextAndGoToNext": "ย้ายข้อความหลังตำแหน่งเคอร์เซอร์ไปยังคำบรรยายถัดไปและไปยังบรรทัดถัดไป", "moveTextFromCursorToNextAndGoToNextAndPlay": "ย้ายข้อความหลังตำแหน่งเคอร์เซอร์ไปยังคำบรรยายถัดไป ไปยังบรรทัดถัดไปแล้วเล่น", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "ย้ายข้อความหลังตำแหน่งเคอร์เซอร์ไปยังคำบรรยายถัดไป ไปยังคำบรรยายถัดไป เล่น และหยุดชั่วคราวเมื่อจบ", "breakAtFirstSpaceFromCursor": "ตัดบรรทัดที่ช่องว่างแรกจากตำแหน่งเคอร์เซอร์", "breakAtFirstSpaceFromCursorAndGoToNext": "ตัดบรรทัดที่ช่องว่างแรกจากตำแหน่งเคอร์เซอร์แล้วไปบรรทัดถัดไป", "toggleFocusGridAndWaveform": "สลับโฟกัสระหว่างตารางคำบรรยายและรูปคลื่นเสียง/สเปกโตรแกรม", @@ -3485,7 +3858,6 @@ "videoGoToPreviousTimeCode": "ไปยังไทม์โค้ดก่อนหน้า", "videoGoToNextTimeCode": "ไปยังไทม์โค้ดถัดไป", "goToNextLineAndSetVideoPosition": "ไปยังคำบรรยายถัดไปและตั้งตำแหน่งวิดีโอ", - "textBoxDeleteSelectionNoClipboard": "กล่องข้อความ: ลบส่วนที่เลือก (ไม่ใช้คลิปบอร์ด)", "textBoxDeleteForward": "กล่องข้อความ: ลบส่วนที่เลือกหรืออักขระถัดไป (ลบไปข้างหน้า)", "textBoxCut": "กล่องข้อความ: ตัด", "textBoxCut2": "กล่องข้อความ: ตัด (ทางเลือก)", @@ -3504,6 +3876,7 @@ "listViewColumnTextUp": "คอลัมน์, เลื่อนข้อความขึ้น", "listViewColumnTextDown": "คอลัมน์, เลื่อนข้อความลง", "autoTranslateSelectedLines": "แปลอัตโนมัติบรรทัดที่เลือก...", + "autoTranslateSelectedLinesNoPrompt": "แปลอัตโนมัติบรรทัดที่เลือก (ไม่ถาม ใช้เอนจิน/ภาษาล่าสุด)", "setAssaResolution": "ตั้งความละเอียด ASSA (PlayResX/PlayResY)", "setShortcutForX": "ตั้งปุ่มลัดสำหรับ \"{0}\"", "commandFileNewKeepVideo": "ใหม่ (คงวิดีโอไว้)", @@ -3511,29 +3884,22 @@ "fileCloseOriginal": "ปิดต้นฉบับ", "fileCloseTranslation": "ปิดคำแปล", "restoreAutoBackup": "กู้คืนข้อมูลสำรองอัตโนมัติ", - "openContainingFolder": "เปิดโฟลเดอร์ที่เก็บไฟล์", "importTimeCodes": "นำเข้าไทม์โค้ด", "importSubtitleWithManuallyChosenEncoding": "นำเข้าคำบรรยายโดยเลือกการเข้ารหัสด้วยตนเอง", "exportBluRaySup": "ส่งออก Blu-ray SUP", "exportCustomTextFormat": "ส่งออกรูปแบบข้อความกำหนดเอง", "exportPlainText": "ส่งออกข้อความธรรมดา", - "showHistory": "แสดงประวัติ", "toggleRightToLeft": "สลับขวาไปซ้าย", "modifySelection": "ปรับเปลี่ยนส่วนที่เลือก", "adjustDurations": "ปรับระยะเวลา", "applyDurationLimits": "ใช้ขีดจำกัดระยะเวลา", "batchConvert": "แปลงเป็นชุด", - "bridgeGaps": "เชื่อมช่องว่าง", "applyMinGap": "ใช้ช่องว่างต่ำสุด", - "fixCommonErrors": "แก้ไขข้อผิดพลาดทั่วไป", "makeEmptyTranslationFromCurrentSubtitle": "สร้างคำแปลว่างจากคำบรรยายปัจจุบัน", - "mergeLinesWithSameText": "รวมบรรทัดที่มีข้อความเหมือนกัน", - "mergeLinesWithSameTimeCodes": "รวมบรรทัดที่มีไทม์โค้ดเหมือนกัน", "splitBreakLongLines": "แยก/จัดสมดุลบรรทัดยาว", "mergeShortLines": "รวมบรรทัดสั้น", "mergeContinuationLines": "รวมบรรทัดต่อเนื่อง", "snapAllTimesToFrames": "ปรับเวลาทั้งหมดให้ตรงเฟรม", - "removeTextForHearingImpaired": "ลบข้อความสำหรับผู้บกพร่องทางการได้ยิน", "joinSubtitles": "รวมไฟล์คำบรรยาย", "splitSubtitle": "แยกคำบรรยาย", "spellCheck": "ตรวจการสะกด", @@ -3555,7 +3921,6 @@ "adjustAllTimes": "ปรับเวลาทั้งหมด", "visualSync": "ซิงก์ด้วยภาพ", "translateViaCopyPaste": "แปลผ่านการคัดลอก-วาง", - "shortcuts": "ปุ่มลัด", "wordLists": "รายการคำ", "chooseUiLanguage": "เลือกภาษาส่วนติดต่อผู้ใช้", "chooseRuleProfile": "เลือกโปรไฟล์กฎ", @@ -3566,6 +3931,7 @@ "textBoxItalic": "กล่องข้อความ ตัวเอียง", "textBoxBold": "กล่องข้อความ ตัวหนา", "textBoxUnderline": "กล่องข้อความ ขีดเส้นใต้", + "textBoxBox": "กล่องในกล่องข้อความ (EBU STL)", "resetWaveformZoomAndSpeed": "รีเซ็ตการซูมรูปคลื่นเสียงและความเร็วการเล่น", "togglePlaybackSpeed": "สลับความเร็วการเล่น", "playbackSpeedSlower": "ลดความเร็วการเล่น", @@ -3577,22 +3943,28 @@ "seekSilenceForward": "ค้นหาช่วงเงียบไปข้างหน้า", "waveformGuessStart": "เดาเวลาเริ่มต้นจากคลื่นเสียง", "waveformGuessEnd": "เดาเวลาสิ้นสุดจากคลื่นเสียง", + "waveformGuessStartAndEnd": "เดาเวลาเริ่มต้นและสิ้นสุดจากรูปคลื่นเสียง", "setVideoPositionCurrentSubtitleStart": "ตั้งตำแหน่งวิดีโอไปที่จุดเริ่มต้นของบรรทัดปัจจุบัน", "goToSubtitlePositionAndPause": "ไปที่ตำแหน่งคำบรรยายและหยุดชั่วคราว", "setVideoPositionCurrentSubtitleEnd": "ตั้งตำแหน่งวิดีโอไปที่จุดสิ้นสุดของบรรทัดปัจจุบัน", "toggleAudioTracks": "สลับแทร็กเสียง", - "listErrors": "แสดงรายการข้อผิดพลาด", "goToNextError": "ไปยังข้อผิดพลาดถัดไป", "goToPreviousError": "ไปยังข้อผิดพลาดก่อนหน้า", "addNameToNameList": "เพิ่มชื่อลงในรายการชื่อ", "findDoubleWords": "ค้นหาคำซ้ำ", "findDoubleLines": "ค้นหาบรรทัดซ้ำ", "colorX": "สี {0}", - "removeColor": "ลบสี", "surroundWith": "ครอบด้วย...", "surroundWithXY": "ครอบด้วย {0}/{1}", - "repeatLine": "เล่นบรรทัดซ้ำ", "surroundWithNumberX": "ครอบด้วย #{0}", + "surroundWithBehavior": "พฤติกรรม", + "surroundWithBehaviorToggle": "สลับ (เพิ่ม หรือลบหากมีอยู่)", + "surroundWithBehaviorAdd": "เพิ่ม (ทุกครั้ง)", + "surroundWithBehaviorRemove": "ลบ (ทั้งหมด)", + "surroundWithBehaviorRemoveOnce": "ลบ (ครั้งละหนึ่ง)", + "surroundWithWorksOn": "ทำงานกับ", + "surroundWithScopeSelectionOrText": "ส่วนที่เลือก หรือทั้งข้อความ", + "surroundWithScopeEachLine": "แต่ละบรรทัด", "searchVia": "ค้นหาผ่าน", "searchViaX": "ค้นหาผ่าน {0}", "searchViaNumberX": "ค้นหาผ่าน #{0}", @@ -3620,6 +3992,11 @@ "copySubtitlePathToClipboard": "คัดลอกเส้นทางไฟล์คำบรรยายไปยังคลิปบอร์ด", "copySubtitleOriginalPathToClipboard": "คัดลอกเส้นทางไฟล์คำบรรยายต้นฉบับไปยังคลิปบอร์ด", "focusTextBox": "โฟกัสกล่องข้อความ", + "focusSubtitleListView": "โฟกัสมุมมองรายการคำบรรยาย", + "focusWaveform": "โฟกัสรูปคลื่นเสียง", + "focusOriginalTextBox": "โฟกัสกล่องข้อความต้นฉบับ", + "textBoxGoToStart": "กล่องข้อความ ไปที่จุดเริ่มต้น", + "textBoxGoToEnd": "กล่องข้อความ ไปที่จุดสิ้นสุด", "sortByNumber": "เรียงตามหมายเลข", "sortByStartTime": "เรียงตามเวลา \"แสดง\"", "sortByEndTime": "เรียงตามเวลา \"ซ่อน\"", @@ -3644,7 +4021,6 @@ "assaStyles": "สไตล์ ASSA", "assaProperties": "คุณสมบัติ ASSA", "assaAttachments": "ไฟล์แนบ ASSA", - "assaVideoColorPicker": "ตัวเลือกสีจากวิดีโอ ASSA", "recalculateDurationSelectedLines": "คำนวณระยะเวลาใหม่ (บรรทัดที่เลือก)", "setDurationMaxCpsSelectedLines": "ตั้งระยะเวลาเป็น CPS สูงสุด (บรรทัดที่เลือก)", "toggleWaveformAndSpectrogramHeight": "สลับการแบ่งความสูงรูปคลื่นเสียง/สเปกโตรแกรม", @@ -3658,9 +4034,9 @@ "selectionToSentenceCase": "กล่องข้อความ: ส่วนที่เลือกเป็นตัวพิมพ์แบบประโยค", "selectionToggleCasing": "กล่องข้อความ: สลับตัวพิมพ์ (UPPER -> lower -> Title Case)", "googleIt": "ค้นหาด้วย Google (ข้อความที่เลือก)", - "setActorXY": "ตั้งนักแสดง {0}: {1}", + "setActorX": "กำหนดนักแสดง: {0}", "setNewActor": "ตั้งนักแสดงใหม่...", - "setActorSlotXTitle": "ช่องนักแสดง {0}", + "setStyleX": "กำหนดสไตล์: {0}", "toggleDialogDashes": "สลับขีดบทสนทนา", "mergeWithLineBeforeAsDialog": "รวมกับบรรทัดก่อนหน้าเป็นบทสนทนา", "mergeWithLineAfterAsDialog": "รวมกับบรรทัดถัดไปเป็นบทสนทนา", @@ -3671,13 +4047,27 @@ "moveStartOneFrameBackKeepGapPrev": "เลื่อนจุดเริ่มต้นถอยหลังหนึ่งเฟรม (คงช่องว่างกับบรรทัดก่อนหน้าหากอยู่ใกล้)", "moveStartOneFrameForwardKeepGapPrev": "เลื่อนจุดเริ่มต้นไปข้างหน้าหนึ่งเฟรม (คงช่องว่างกับบรรทัดก่อนหน้าหากอยู่ใกล้)", "moveEndOneFrameBackKeepGapNext": "เลื่อนจุดสิ้นสุดถอยหลังหนึ่งเฟรม (คงช่องว่างกับบรรทัดถัดไปหากอยู่ใกล้)", - "moveEndOneFrameForwardKeepGapNext": "เลื่อนจุดสิ้นสุดไปข้างหน้าหนึ่งเฟรม (คงช่องว่างกับบรรทัดถัดไปหากอยู่ใกล้)" + "moveEndOneFrameForwardKeepGapNext": "เลื่อนจุดสิ้นสุดไปข้างหน้าหนึ่งเฟรม (คงช่องว่างกับบรรทัดถัดไปหากอยู่ใกล้)", + "moveStartXMsBack": "ย้ายเวลาเริ่มต้นถอยหลัง X ms (กำหนด X ในการตั้งค่า ใช้ในซิงค์ด้วยภาพด้วย)", + "moveStartXMsForward": "ย้ายเวลาเริ่มต้นเดินหน้า X ms (กำหนด X ในการตั้งค่า ใช้ในซิงค์ด้วยภาพด้วย)", + "moveEndXMsBack": "ย้ายเวลาสิ้นสุดถอยหลัง X ms (กำหนด X ในการตั้งค่า ใช้ในซิงค์ด้วยภาพด้วย)", + "moveEndXMsForward": "ย้ายเวลาสิ้นสุดเดินหน้า X ms (กำหนด X ในการตั้งค่า ใช้ในซิงค์ด้วยภาพด้วย)", + "moveSelectedLinesXMsBack": "ย้ายบรรทัดที่เลือกถอยหลัง X ms (กำหนด X ในการตั้งค่า)", + "moveSelectedLinesXMsForward": "ย้ายบรรทัดที่เลือกเดินหน้า X ms (กำหนด X ในการตั้งค่า)", + "moveSelectedLinesAndForwardXMsBack": "ย้ายบรรทัดที่เลือกและบรรทัดถัดไปทั้งหมดถอยหลัง X ms (กำหนด X ในการตั้งค่า)", + "moveSelectedLinesAndForwardXMsForward": "ย้ายบรรทัดที่เลือกและบรรทัดถัดไปทั้งหมดเดินหน้า X ms (กำหนด X ในการตั้งค่า)", + "moveAllLinesXMsBack": "ย้ายทุกบรรทัดถอยหลัง X ms (กำหนด X ในการตั้งค่า)", + "moveAllLinesXMsForward": "ย้ายทุกบรรทัดเดินหน้า X ms (กำหนด X ในการตั้งค่า)", + "moveSelectedLinesCustomMsBack": "ย้ายบรรทัดที่เลือก ถอยหลังตามมิลลิวินาทีที่กำหนดเอง ({0:#,###,##0}), {1}", + "moveSelectedLinesCustomMsForward": "ย้ายบรรทัดที่เลือก เดินหน้าตามมิลลิวินาทีที่กำหนดเอง ({0:#,###,##0}), {1}", + "moveSelectedLinesAndForwardCustomMsBack": "ย้ายบรรทัดที่เลือกและบรรทัดถัดไปทั้งหมด ถอยหลังตามมิลลิวินาทีที่กำหนดเอง ({0:#,###,##0}), {1}", + "moveSelectedLinesAndForwardCustomMsForward": "ย้ายบรรทัดที่เลือกและบรรทัดถัดไปทั้งหมด เดินหน้าตามมิลลิวินาทีที่กำหนดเอง ({0:#,###,##0}), {1}", + "moveAllLinesCustomMsBack": "ย้ายทุกบรรทัด ถอยหลังตามมิลลิวินาทีที่กำหนดเอง ({0:#,###,##0}), {1}", + "moveAllLinesCustomMsForward": "ย้ายทุกบรรทัด เดินหน้าตามมิลลิวินาทีที่กำหนดเอง ({0:#,###,##0}), {1}" }, "wordLists": { "title": "รายการคำ", "addName": "เพิ่มชื่อ", - "addWord": "เพิ่มคำ", - "addPair": "เพิ่มคู่คำ", "nameAndIgnoreList": "รายการชื่อ/คำที่ละเว้น", "userWords": "รายการคำของผู้ใช้", "ocrFixList": "รายการแก้ไข OCR", @@ -3694,7 +4084,6 @@ "noPluginsInstalled": "ไม่มีปลั๊กอินติดตั้งอยู่", "getPluginsOnline": "ดาวน์โหลดปลั๊กอินออนไลน์...", "getPluginsTitle": "ดาวน์โหลดปลั๊กอิน", - "enabled": "เปิดใช้งาน", "disabled": "ปิดใช้งาน", "notSupportedOnThisOs": "ไม่รองรับบนระบบปฏิบัติการนี้", "removePluginXConfirm": "ลบปลั๊กอิน '{0}' หรือไม่? การดำเนินการนี้จะลบโฟลเดอร์ปลั๊กอิน:{1}", @@ -3711,17 +4100,19 @@ "downloadingXPercent": "กำลังดาวน์โหลด {0}%...", "pluginXInstalled": "ติดตั้ง '{0}' แล้ว", "couldNotInstallPluginX": "ไม่สามารถติดตั้ง '{0}': {1}", - "notInstalled": "ยังไม่ได้ติดตั้ง", "install": "ติดตั้ง", "reinstall": "ติดตั้งใหม่", - "update": "อัปเดต", "installedX": "ติดตั้งแล้ว ({0})", "updateAvailableXToY": "มีอัปเดต ({0} → {1})", "applyPluginToWhichLinesX": "ใช้ '{0}' กับ:", "applyToSelectedLinesX": "บรรทัดที่เลือก ({0})", "applyToAllLinesX": "ทุกบรรทัด ({0})", "updateAllXAvailable": "อัปเดตทั้งหมด ({0})", - "updatingXOfY": "กำลังอัปเดต {0}/{1}..." + "updatingXOfY": "กำลังอัปเดต {0}/{1}...", + "doNotAskAgain": "ไม่ต้องถามอีก (เปลี่ยนได้ในจัดการปลั๊กอิน)", + "applyPluginsTo": "ใช้ปลั๊กอินกับ", + "askEachTime": "ถามทุกครั้ง", + "allLines": "ทุกบรรทัด" }, "help": { "aboutSubtitleEdit": "เกี่ยวกับ Subtitle Edit", @@ -3765,6 +4156,8 @@ "nOcrDatabase": "ฐานข้อมูล nOCR", "drawMode": "โหมดวาด:", "addNewCharcter": "เพิ่มอักขระใหม่", + "addNOcrCharacterTitle": "เพิ่มอักขระ nOCR สำหรับบรรทัด {0} อักขระที่ {1} จาก {2} โดยใช้ฐานข้อมูล \"{3}\"", + "addBinaryOcrCharacterTitle": "เพิ่มอักขระ Binary OCR สำหรับบรรทัด {0} อักขระที่ {1} จาก {2} โดยใช้ฐานข้อมูล \"{3}\"", "lineIndexX": "บรรทัด {0}", "inspectNOcrAdditions": "ตรวจสอบรายการ nOCR ที่เพิ่มใหม่", "ocrSelectedLines": "OCR บรรทัดที่เลือก", @@ -3813,6 +4206,8 @@ "binaryImageCompareInspectImageMatches": "\"Binary image compare\" - ตรวจสอบภาพที่ตรงกัน", "saveBlankTextTitle": "บันทึกข้อความว่างหรือไม่?", "saveBlankTextPrompt": "บันทึกข้อความว่างสำหรับภาพนี้หรือไม่?", + "drawnLinesDoNotMatchTitle": "เส้นไม่ตรงกับภาพ", + "drawnLinesDoNotMatchPrompt": "เส้นที่วาดบางเส้นไม่ตรงกับภาพ (เส้นสีเขียวต้องอยู่บนอักขระ เส้นสีแดงต้องอยู่นอกอักขระ) ดังนั้นอักขระนี้จะไม่ถูกจดจำ\n\nบันทึกต่อหรือไม่?", "yesAndNeverAskAgain": "ใช่ และไม่ต้องถามอีก", "importTextFromSubtitleDotDotDot": "นำเข้าข้อความจากคำบรรยาย...", "importTextFromSubtitleOverwritePrompt": "บางบรรทัดมีข้อความ OCR อยู่แล้ว เขียนทับข้อความเดิมหรือไม่?", @@ -3838,7 +4233,6 @@ "vobSubColorsTitle": "สี VobSub/DVD", "vobSubColorsHeader": "ปรับแต่งสี VobSub ทั้งสี่สี", "vobSubColorsDescription": "คำบรรยาย VobSub/DVD ใช้สีดัชนีสี่สี: พื้นหลัง แพตเทิร์น เน้น 1 และเน้น 2 เลือกแต่ละสีด้านล่างเพื่อแทนที่จานสีที่ฝังมา - มีประโยชน์เมื่อสีดั้งเดิมให้ความคมชัดไม่ดีสำหรับ OCR", - "vobSubColorBackground": "พื้นหลัง", "vobSubColorPattern": "แพตเทิร์น", "vobSubColorEmphasis1": "เน้น 1", "vobSubColorEmphasis2": "เน้น 2", @@ -3872,9 +4266,26 @@ "crispEmbedSettingsTitle": "การตั้งค่า CrispEmbed", "crispEmbedDescription": "เอนจิน OCR แบบโลคัลที่มีแบ็กเอนด์โมเดลหลายแบบ - ดาวน์โหลดเอนจินและโมเดลได้ที่นี่", "trainNOcrDatabase": "ฝึกฐานข้อมูล nOCR...", + "optimizeNOcrDatabase": "ปรับฐานข้อมูล nOCR ให้เหมาะสม...", + "optimizeNOcrDatabaseQuestionXY": "ลบเส้นที่ไม่ช่วยแยกอักขระออกจากอักขระที่คล้ายกันในฐานข้อมูล nOCR \"{0}\" หรือไม่?\n\nจะทำให้ฐานข้อมูลเล็กลงและ OCR เร็วขึ้น ปกติจะมีข้อผิดพลาดน้อยลงด้วย ใช้เวลาไม่เกินหนึ่งนาที\n\nข้อมูลสำรองจะถูกบันทึกเป็น \"{1}\"", + "optimizingNOcrDatabaseXY": "กำลังปรับฐานข้อมูล nOCR ให้เหมาะสม... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "ปรับฐานข้อมูล nOCR \"{0}\" ให้เหมาะสมแล้ว: {1:#,##0} -> {2:#,##0} เส้น", "startTraining": "เริ่มการฝึก", "abortTraining": "ยกเลิกการฝึก", "trainingOptions": "ตัวเลือกการฝึก", + "trainNOcrSubtitle": "เรนเดอร์อักขระด้วยฟอนต์ที่ติดตั้งไว้และสอนรูปร่างให้ nOCR เลือกฟอนต์ที่คำบรรยายของคุณใช้", + "xFontsSelected": "เลือกแล้ว {0:#,##0}", + "subtitleFonts": "ฟอนต์คำบรรยาย", + "emptyDatabase": "ฐานข้อมูลว่าง", + "startFromDatabase": "เริ่มจาก", + "startFromDatabaseHint": "เพิ่มอักขระที่ฝึกแล้วลงในสำเนาของฐานข้อมูลที่มีอยู่ (แนะนำ) หรือเริ่มจากฐานข้อมูลว่าง", + "fontSizes": "ขนาดฟอนต์", + "fontSizesHint": "ขนาดฟอนต์เป็นพิกเซลที่จะเรนเดอร์ คั่นด้วยจุลภาค เช่น \"30, 40\"", + "numberOfLineSegmentsHint": "จำนวนเส้นที่ตรวจสอบต่ออักขระ - ยิ่งมากยิ่งเข้มงวดแต่ช้าลง", + "enterDatabaseName": "ป้อนชื่อสำหรับฐานข้อมูล", + "trainingFontXSizeYCharacterZ": "กำลังฝึก \"{0}\" ที่ {1} px: {2}", + "xLearned": "เรียนรู้แล้ว {0:#,##0}", + "xSkipped": "ข้ามแล้ว {0:#,##0}", "charactersToTrain": "อักขระที่จะฝึก", "letterCombinationsToTrain": "ชุดตัวอักษรที่อาจถูกแยกเป็นภาพเดียว", "importCharactersFromSubtitleFile": "นำเข้าอักขระจากไฟล์คำบรรยาย...", @@ -3901,6 +4312,8 @@ "drawZoomOut": "ซูมออก (Ctrl+-)", "drawResetView": "รีเซ็ตมุมมอง (Ctrl+0)", "drawToggleGrid": "สลับเส้นตาราง (Ctrl+G)", + "drawTogglePreview": "สลับตัวอย่าง (F9)", + "drawPreviewFailed": "แสดงตัวอย่างไม่สำเร็จ - ต้องใช้ ffmpeg ที่มี libass (subtitles filter)", "drawCopyToClipboard": "คัดลอกไปยังคลิปบอร์ด (Ctrl+C)", "drawShapes": "รูปทรง", "drawSelectedPoint": "จุดที่เลือก", @@ -3908,16 +4321,86 @@ "drawSelectedLayer": "เลเยอร์ที่เลือก", "drawToolX": "เครื่องมือ: {0}", "drawHelpText": "คลิกเพื่อเพิ่มจุด • Enter/F8 เพื่อปิดรูปทรง • Shift+ลาก เพื่อเลื่อนมุมมอง • Ctrl+เลื่อนล้อ เพื่อซูม", + "drawMoveToLayer": "ย้ายไปยังเลเยอร์", + "drawFlipHorizontal": "พลิกแนวนอน", + "drawFlipVertical": "พลิกแนวตั้ง", + "drawHideShape": "ซ่อนรูปทรง", + "drawShowShape": "แสดงรูปทรง", + "drawHideLayer": "ซ่อนเลเยอร์", + "drawShowLayer": "แสดงเลเยอร์", + "drawDeleteLayer": "ลบเลเยอร์", + "drawDeletePoint": "ลบจุด", + "drawCancelDrawing": "ยกเลิกการวาด", + "drawLayerX": "เลเยอร์ {0}", + "drawImportSvg": "นำเข้าภาพ SVG...", + "drawRotateClockwise": "หมุน 90° ตามเข็มนาฬิกา", + "drawConvertToCurve": "แปลงส่วนเป็นเส้นโค้ง", + "drawBackground": "พื้นหลัง", + "drawPosition": "ตำแหน่ง", + "drawZoom": "ซูม", + "drawShapeTool": "เครื่องมือรูปทรง", + "drawColorPickerTool": "เลือกสีจากรูปทรงหรือพื้นหลัง", + "drawShapeLibrary": "คลังรูปทรง", + "drawShapeLibraryHint": "ลากบนพื้นที่วาดเพื่อวางรูปทรง หรือคลิกเพื่อใช้ขนาดเริ่มต้น Shift จะคงสัดส่วนไว้", + "drawAddToLibrary": "เพิ่มลงในคลังรูปทรง...", + "drawRemoveFromLibrary": "ลบออกจากคลังรูปทรง", + "drawShapeName": "ชื่อรูปทรง", + "drawCategorySpeechBubbles": "กรอบคำพูด", + "drawCategoryArrows": "ลูกศร", + "drawCategoryBasicShapes": "รูปทรงพื้นฐาน", + "drawCategorySymbols": "สัญลักษณ์", + "drawCategoryMyShapes": "รูปทรงของฉัน", + "drawShapeSpeechBubble": "กรอบคำพูด", + "drawShapeSpeechBubbleRight": "กรอบคำพูด หางขวา", + "drawShapeSpeechBubbleUp": "กรอบคำพูด หางขึ้น", + "drawShapeOvalBubble": "กรอบคำพูดวงรี", + "drawShapeBoxBubble": "กรอบคำพูดสี่เหลี่ยม", + "drawShapeThoughtBubble": "กรอบความคิด", + "drawShapeShoutBubble": "กรอบตะโกน", + "drawShapeCaptionBox": "กล่องคำบรรยาย", + "drawShapeArrow": "ลูกศร", + "drawShapeDoubleArrow": "ลูกศรสองหัว", + "drawShapeChevron": "บั้ง", + "drawShapeCurvedArrow": "ลูกศรโค้ง", + "drawShapeRoundedRectangle": "สี่เหลี่ยมมุมมน", + "drawShapeTriangle": "สามเหลี่ยม", + "drawShapeDiamond": "ข้าวหลามตัด", + "drawShapePentagon": "ห้าเหลี่ยม", + "drawShapeHexagon": "หกเหลี่ยม", + "drawShapeOctagon": "แปดเหลี่ยม", + "drawShapeStar": "ดาว", + "drawShapeRing": "วงแหวน", + "drawShapePlus": "เครื่องหมายบวก", + "drawShapeBanner": "แบนเนอร์", + "drawShapeHeart": "หัวใจ", + "drawShapeCheck": "เครื่องหมายถูก", + "drawShapeMusicNote": "ตัวโน้ตดนตรี", + "drawShapeMusicNotes": "ตัวโน้ตดนตรีหลายตัว", + "drawShapeLightning": "สายฟ้า", + "drawShapeCloud": "เมฆ", + "drawShapeMoon": "พระจันทร์", + "drawShapeBadge": "เหรียญตรา", + "drawSize": "ขนาด", + "drawLayer": "เลเยอร์", + "drawBackgroundVideoFrame": "เฟรมวิดีโอ (ตำแหน่งปัจจุบัน)", + "drawBackgroundVideoFrameAt": "เฟรมวิดีโอที่...", + "drawBackgroundImage": "ไฟล์ภาพ...", + "drawBackgroundNone": "ไม่มีพื้นหลัง", + "drawBackgroundStretch": "ยืดภาพให้เต็มพื้นที่วาด", + "drawBackgroundOpacity": "ความทึบของพื้นหลัง", + "drawBackgroundVideoFrameFailed": "ไม่สามารถรับเฟรมวิดีโอที่ {0}", + "drawImages": "ภาพ", + "drawConvertToLine": "แปลงส่วนเป็นเส้นตรง", + "drawConvertShapeToCurves": "แปลงเส้นตรงทั้งหมดเป็นเส้นโค้ง", + "drawConvertShapeToLines": "แปลงเส้นโค้งทั้งหมดเป็นเส้นตรง", + "drawRotateCounterClockwise": "หมุน 90° ทวนเข็มนาฬิกา", + "drawSvgImages": "ภาพ SVG", + "drawSvgNoShapes": "ไม่พบรูปทรงที่มีการเติมสีหรือเส้นในไฟล์ SVG", "progressBarTitle": "แถบความคืบหน้า ASSA", "progressBarSettings": "แถบความคืบหน้า", - "progressBarPosition": "ตำแหน่ง", - "progressBarBottom": "ด้านล่าง", - "progressBarTop": "ด้านบน", "mouseOverColor": "สีเมื่อชี้เมาส์", "clickedColor": "สีเมื่อคลิก", "progressBarForeColor": "สีพื้นหน้า", - "progressBarBackColor": "สีพื้นหลัง", - "progressBarStyle": "สไตล์", "progressBarSquareCorners": "มุมเหลี่ยม", "progressBarRoundedCorners": "มุมโค้งมน", "progressBarChapters": "ตอน", @@ -3926,8 +4409,6 @@ "progressBarXAdjustment": "การปรับแกน X", "progressBarYAdjustment": "การปรับแกน Y", "progressBarTextAlignment": "การจัดตำแหน่งข้อความ", - "progressBarTakePosFromVideo": "ใช้ตำแหน่งจากวิดีโอ", - "progressBarPreview": "ดูตัวอย่าง", "fontCollectorTitle": "ตัวรวบรวมฟอนต์", "fontCollectorUsedIn": "ใช้ใน", "fontCollectorFontFiles": "ไฟล์ฟอนต์", @@ -3974,9 +4455,7 @@ "resolutionResamplerVideoDiffers": "ความละเอียดของคำบรรยาย ({0}x{1}) ต่างจากความละเอียดของวิดีโอ ({2}x{3})\nต้องการเปลี่ยนคำบรรยายให้ตรงกับวิดีโอหรือไม่?", "resolutionResamplerAskOnVideoOpen": "ถามเมื่อเปิดวิดีโอที่มีความละเอียดต่างกัน", "backgroundBoxGenerator": "สร้างกล่องพื้นหลัง", - "backgroundBoxPadding": "ระยะห่างภายใน", "backgroundBoxFillWidth": "เติมเต็มความกว้าง", - "backgroundBoxBoxColor": "สีกล่อง", "backgroundBoxRadius": "รัศมี", "backgroundBoxCircle": "วงกลม", "backgroundBoxSpikes": "หนามแหลม", @@ -3988,12 +4467,9 @@ "backgroundBoxTornPaperDouble": "กระดาษฉีก (บนและล่าง)", "backgroundBoxStarburst": "ประกายดาว", "backgroundBoxScroll": "ม้วนกระดาษ / หนังสัตว์", - "stylesTitle": "สไตล์ Advanced Sub Station Alpha", "stylesInFile": "สไตล์ในไฟล์", "stylesSaved": "สไตล์ที่บันทึกไว้", - "category": "หมวดหมู่", "allCategories": "[ทั้งหมด]", - "defaultCategory": "ค่าเริ่มต้น", "newCategory": "หมวดหมู่ใหม่...", "renameCategory": "เปลี่ยนชื่อหมวดหมู่...", "deleteCategory": "ลบหมวดหมู่", @@ -4016,13 +4492,26 @@ "graphics": "กราฟิก", "copyToStorageStyles": "คัดลอกไปยังสไตล์ที่จัดเก็บ", "copyToFileStyles": "คัดลอกไปยังสไตล์ในไฟล์", + "styleXAlreadyExistsInStorage": "มีสไตล์ชื่อ \"{0}\" อยู่แล้วในที่เก็บ\n\nเขียนทับ หรือเก็บไว้ทั้งสอง (สำเนาจะได้ชื่อใหม่)?", + "styleXAlreadyExistsInFile": "มีสไตล์ชื่อ \"{0}\" อยู่แล้วในไฟล์\n\nเขียนทับ หรือเก็บไว้ทั้งสอง (สำเนาจะได้ชื่อใหม่)?", + "styleNameCannotBeEmpty": "ชื่อสไตล์ต้องไม่ว่างเปล่า", + "styleNameXIsUsedMoreThanOnce": "ชื่อสไตล์ \"{0}\" ถูกใช้โดยมากกว่าหนึ่งสไตล์ในไฟล์", + "overwrite": "เขียนทับ", + "keepBoth": "เก็บไว้ทั้งสอง", + "doThisForAllConflictingStyles": "ทำเช่นนี้กับสไตล์ที่ขัดแย้งกันทั้งหมด", "setStyleAsDefault": "ตั้งสไตล์เป็นค่าเริ่มต้น", "takeUsagesFromDotDotDot": "นำการใช้งานมาจาก...", "replaceStyleWithDotDotDot": "แทนที่สไตล์ด้วย...", "noAttachmentsFound": "ไม่พบไฟล์แนบในไฟล์ ASSA ที่เลือก", "deleteStyleQuestion": "ลบสไตล์หรือไม่?", "deleteStylesQuestion": "ลบสไตล์หลายรายการหรือไม่?", + "deleteXStylesQuestion": "คุณต้องการลบ {0} สไตล์หรือไม่?", + "deleteXStylesFromStorageQuestion": "คุณต้องการลบ {0} สไตล์ออกจากที่เก็บหรือไม่?", + "deleteStyleXFromStorageQuestion": "คุณต้องการลบสไตล์ \"{0}\" ออกจากที่เก็บหรือไม่?", + "deleteStyleXFromFileQuestion": "คุณต้องการลบสไตล์ \"{0}\" ออกจากไฟล์ปัจจุบันหรือไม่?", "openStyleImportFile": "เปิดไฟล์คำบรรยายเพื่อนำเข้าสไตล์", + "styleImportFiles": "ไฟล์สไตล์ (.ass, .sty, หมวดหมู่ Subtitle Edit 4 .template)", + "ssaStyleImportFiles": "ไฟล์สไตล์ (.ssa, .ass, .sty)", "primary": "หลัก", "secondary": "รอง", "applyOverrideTags": "ใช้แท็กแทนที่", @@ -4037,7 +4526,6 @@ "spaceIncrease": "เพิ่มระยะห่าง", "popIn": "เด้งเข้า", "spinIn": "หมุนเข้า", - "playCurrent": "เล่นบรรทัดปัจจุบัน", "setPosition": "ตั้งตำแหน่ง", "rotation": "การหมุน", "scaleX": "สเกล X", @@ -4081,10 +4569,8 @@ "advancedEffectOldMovieDescription": "จำลองเครื่องฉายฟิล์ม 35 มม. ยุคเก่า พร้อมสัญญาณรบกวน ขอบมืด และรอยขีดข่วน", "advancedEffectNeonBurst": "นีออนระเบิด", "advancedEffectNeonBurstDescription": "คำบรรยายสไตล์ 'Shorts' พลังสูง พร้อมแสงนีออนเรืองรองและแอนิเมชัน 'เด้ง' ขยายเข้า", - "advancedEffectSettings": "การตั้งค่า", "advancedEffectSnowFlakeCount": "จำนวนเกล็ดหิมะ", "advancedEffectStarfieldStarCount": "จำนวนดาว", - "advancedEffectStarfieldSpeed": "ความเร็ว", "advancedEffectGlitch": "กลิตช์", "advancedEffectGlitchDescription": "กลิตช์ดิจิทัลพร้อมความคลาดสี แสงแฟลชสีขาว และภาพซ้อนบิดเบือน", "advancedEffectBounceIn": "เด้งเข้า", @@ -4093,8 +4579,6 @@ "advancedEffectFirefliesDescription": "จุดเรืองแสงสีเหลืองอำพันอบอุ่นลอยไปมาอย่างเป็นธรรมชาติทั่วหน้าจอพร้อมแสงกะพริบ", "advancedEffectMatrix": "Matrix", "advancedEffectMatrixDescription": "คอลัมน์อักขระสีเขียวตกลงมา โดยข้อความคำบรรยายค่อย ๆ ก่อตัวทีละตัวอักษรจากสายฝน", - "advancedEffectAudioBars": "แถบเสียง (รูปคลื่นเสียง)", - "advancedEffectAudioBarsDescription": "แถบอีควอไลเซอร์เคลื่อนไหวตามรูปคลื่นเสียง — แถบเลื่อนไปทางซ้ายเป็นรูปคลื่นและเต้นตามจังหวะเสียง", "advancedEffectAudioPulse": "ข้อความเต้นตามเสียง", "advancedEffectAudioPulseDescription": "ข้อความคำบรรยายเรืองแสงและเต้นตามระดับเสียง — ช่วงเงียบแสดงข้อความปกติ ช่วงเสียงดังเพิ่มรัศมีสีและขยายขึ้นเล็กน้อย", "advancedEffectConfetti": "คอนเฟตตีระเบิด", @@ -4108,7 +4592,6 @@ "advancedEffectFancyKaraokeGlow": "แสงเรืองของคำที่กำลังร้อง", "advancedEffectFancyKaraokeActiveColor": "สีคำที่กำลังร้อง", "advancedEffectFancyKaraokeInactiveColor": "สีคำอื่น", - "advancedEffectFancyKaraokeInactiveOpacity": "ความทึบของคำอื่น (0-255)", "advancedEffectWordSpacingPixels": "ระยะห่าง (พิกเซล)", "advancedEffectSlowZoomOut": "ซูมออกช้า ๆ", "advancedEffectSlowZoomOutDescription": "ข้อความเริ่มต้นใหญ่กว่าเล็กน้อยแล้วค่อย ๆ หดลงเป็นขนาดปกติตลอดระยะเวลาของคำบรรยาย", @@ -4124,7 +4607,6 @@ "advancedEffectSlideInLeftDescription": "ข้อความเลื่อนเข้าจากนอกจอด้านซ้าย ค้างไว้ แล้วออกกลับไปทางซ้าย", "advancedEffectSlideInRight": "เลื่อนเข้าจากขวา", "advancedEffectSlideInRightDescription": "ข้อความเลื่อนเข้าจากนอกจอด้านขวา ค้างไว้ แล้วออกกลับไปทางขวา", - "advancedEffectFadeInOut": "เฟดเข้า/ออก", "advancedEffectFadeInOutDescription": "ข้อความเฟดเข้าตอนเริ่มต้นและเฟดออกตอนท้ายของแต่ละคำบรรยาย", "advancedEffectWordFlip3D": "พลิกคำสามมิติ", "advancedEffectWordFlip3DDescription": "แต่ละคำพับเข้ามาด้วยการพลิกสามมิติและเด้งแบบยืดหยุ่นขณะถูกพูด — สไตล์คำบรรยายแบบ 'Shorts' สมัยใหม่", diff --git a/src/ui/Assets/Languages/Turkish.json b/src/ui/Assets/Languages/Turkish.json index 3f96ce7d23b..2aa4046d878 100644 --- a/src/ui/Assets/Languages/Turkish.json +++ b/src/ui/Assets/Languages/Turkish.json @@ -1,18 +1,71 @@ { "title": "Subtitle Edit", - "version": "v5.3.0-beta19", - "translatedBy": "Utku Gogus; Son güncelleme: Ahmet Murat Özhan (02.10.2026)", + "version": "v5.3.0", + "translatedBy": "Utku Gogus; Son güncelleme: Ahmet Murat Özhan (11.10.2026)", "cultureName": "tr-TR", "general": { + "prompt": "Komut istemi", + "temperature": "Sıcaklık (Temperature)", + "preset": "Hazır ayar", + "output": "Çıktı", + "outputFormat": "Çıktı biçimi", + "other": "Diğer", + "timeCodeFormat": "Zaman kodu biçimi", + "topBottomMargin": "Üst/alt kenar boşluğu", + "theme": "Tema", + "brightness": "Parlaklık", + "chooseColor": "Renk seç", + "lineX": "Satır {0}", + "playLine": "Satırı oynat", + "maxLineLength": "Maks. satır uzunluğu", + "maxCharsPerSec": "Maks Kar/sn", + "maxNumberOfLines": "Maksimum satır sayısı", + "subtitles": "Alt yazılar", + "shotChanges": "Çekim değişimleri", + "chapters": "Bölümler", + "audio": "Ses", + "interjections": "Ünlemler / Tepki sözcükleri", + "blankLines": "Boş satırlar", + "editWholeText": "Tüm metni düzenle", + "noTextInClipboard": "Panoda metin yok", + "noSubtitlesFoundTitle": "Alt yazı bulunamadı", + "replacedXOccurrences": "{0} eşleşme değiştirildi", + "invalidRegularExpressionX": "Geçersiz düzenli ifade: {0}", + "discardChangesTitle": "Değişiklikler yok sayılsın mı?", + "downloadingXDotDotDot": "{0} indiriliyor...", + "importTimeCodesDotDotDot": "Zaman kodlarını içe aktar...", + "original": "Orijinal", + "nextChange": "Sonraki değişiklik", + "previousChange": "Önceki değişiklik", + "changeXOfY": "Değişiklik: {0} / {1}", + "tooLong": "Çok uzun", + "tooShort": "Çok kısa", + "overlapping": "Çakışan", + "detail": "Ayrıntı", + "fixOcrErrors": "OCR hatalarını düzelt", + "runningOcrXY": "OCR çalışıyor... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp, llama-server motorunun indirilmesini gerektiriyor. Şimdi indirilsin mi?", "abort": "İptal", "actor": "Aktör", "actors": "Aktörler", - "setActorDotDotDot": "Aktör belirle...", + "setActorDotDotDot": "Aktör belirle...", "actorPickerTitle": "Aktör belirle", "actorPickerFilterHint": "Filtrelemek için yazın veya yeni bir aktör adı yazın", "actorPickerKeysHint": "Aktörü belirlemek için bir sayıya veya Enter tuşuna basın. Alt+Yukarı/Aşağı sırayı değiştirir, Delete aktörü kaldırır.", "actorPickerNewActorX": "Yeni aktör \"{0}\"", "actorPickerLinesSelectedX": "Seçilen satır sayısı: {0}", + "setStyleDotDotDot": "Biçem ayarla...", + "stylePickerTitle": "Biçem ayarla", + "stylePickerFilterHint": "Filtrelemek için yazın veya yeni bir biçem adı girin", + "stylePickerKeysHint": "Seçili tüm satırlara biçemi uygulamak için bir sayıya (1-9, 0) basın.", + "stylePickerNewStyleX": "Yeni biçem \"{0}\"", + "stylePickerNewStyleInfo": "Bu biçemi varsayılan ayarlarla eklemek ve seçili satırlara uygulamak için Enter tuşuna basın. Yazı tipini, renkleri ve konumu daha sonra değiştirmek için \"Biçemleri yönet...\" seçeneğini kullanın.", + "stylePickerCurrentStyleX": "Mevcut biçem: {0}", + "stylePickerLinesUsingStyleX": "Bu biçemi kullanan satırlar: {0}", + "stylePickerMarginsXYZ": "Sol {0}, sağ {1}, dikey {2}", + "stylePickerSetStyle": "Biçemi _ayarla", + "stylePickerManageStyles": "Biçemleri yönet...", + "stylePickerManageStylesHint": "Yazı tiplerini, renkleri, konumu ve daha fazlasını düzenlemek için bu pencereyi kapatın ve biçem yöneticisini açın", "add": "Ekle", "addDotDotDot": "Ekle...", "addToNamesListCaseSensitive": "İsim listesine ekle (büyük/küçük harf duyarlı)", @@ -31,24 +84,24 @@ "alphaAdjustment": "Alfa ayarı", "alphaThreshold": "Alfa eşiği", "apiKey": "API anahtarı", - "formality": "Resmiyet seviyesi", + "formality": "Resmiyet seviyesi", "apiSecret": "Gizli", "appearance": "Görünüm", "append": "Sona ekle", "apply": "Uygula", "applyTo": "Şuna uygula", "ascending": "Artan", - "assistedMove": "Yardımlı taşıma", - "assistedMoveChooseMove": "Kelimeleri taşımak için bir seçeneğe tıklayın veya numarasına basın", - "assistedMoveDotDotDot": "Yardımlı taşıma...", - "assistedMoveNoSuggestions": "Taşıma önerisi yok - cümle önceki/sonraki alt yazıda devam etmiyor", - "assistedSplitNoSuggestions": "Bu satır için bölme önerisi yok", - "assistedSplit": "Yardımlı bölme", - "assistedSplitChooseSplitPoint": "Satırı bölmek için bir seçeneğe tıklayın veya numarasına basın", - "assistedSplitDotDotDot": "Yardımlı bölme...", + "assistedMove": "Yardımlı taşıma", + "assistedMoveChooseMove": "Kelimeleri taşımak için bir seçeneğe tıklayın veya numarasına basın", + "assistedMoveDotDotDot": "Yardımlı taşıma...", + "assistedMoveNoSuggestions": "Taşıma önerisi yok - cümle önceki/sonraki alt yazıda devam etmiyor", + "assistedSplitNoSuggestions": "Bu satır için bölme önerisi yok", + "assistedSplit": "Yardımlı bölme", + "assistedSplitChooseSplitPoint": "Satırı bölmek için bir seçeneğe tıklayın veya numarasına basın", + "assistedSplitDotDotDot": "Yardımlı bölme...", "descending": "Azalan", "attachDotDotDot": "Ekle...", - "audioFileSaved": "Ses dosyası kaydedildi", + "audioFileSaved": "Ses dosyası kaydedildi", "audioFiles": "Ses dosyaları", "audioVisualizer": "Ses görselleştirici", "auto": "Otomatik", @@ -63,7 +116,7 @@ "backward": "Geri", "batchMode": "Toplu mod", "bdnXml": "BDN/xml", - "bdnXml8Bit": "BDN/XML 8 bit", + "bdnXml8Bit": "BDN/XML 8 bit", "before": "Önce", "beginning": "Başlangıç", "bluRaySup": "Blu-ray (sup)", @@ -87,12 +140,12 @@ "boxPadding": "Kutu iç boşluğu", "boxPerLine": "Satır başına kutu", "bridgeGaps": "Boşlukları köprüle", - "bytes": "bayt", + "bytes": "bayt", "cancel": "İ_ptal", "cancelled": "İptal edildi", "caseInsensitive": "Büyük/küçük harf duyarsız", "caseSensitive": "Büyük/küçük harf duyarlı", - "casing": "Harf durumu", + "casing": "Harf durumu", "category": "Kategori", "center": "Orta", "centerHorizontally": "Yatay ortala", @@ -116,25 +169,25 @@ "codec": "Kodek", "collapse": "Daralt", "color": "Renk", - "colorBlack": "Siyah", + "colorBlack": "Siyah", "colorBlue": "Mavi", "colorCyan": "Camgöbeği", "colorDotDotDot": "Renk...", - "colorGray": "Gri", - "colorGreen": "Yeşil", - "colorHalfBlue": "Yarı mavi", - "colorHalfCyan": "Yarı siyan", - "colorHalfGreen": "Yarı yeşil", - "colorHalfMagenta": "Yarı eflatun", - "colorHalfRed": "Yarı kırmızı", - "colorHalfYellow": "Yarı sarı", + "colorGray": "Gri", + "colorGreen": "Yeşil", + "colorHalfBlue": "Yarı mavi", + "colorHalfCyan": "Yarı siyan", + "colorHalfGreen": "Yarı yeşil", + "colorHalfMagenta": "Yarı eflatun", + "colorHalfRed": "Yarı kırmızı", + "colorHalfYellow": "Yarı sarı", "colorMagenta": "Eflatun", "colorRed": "Kırmızı", "colorWhite": "Beyaz", "colorYellow": "Sarı", "column": "Sütun", - "columns": "Sütunlar", - "columnsDotDotDot": "Sütunlar...", + "columns": "Sütunlar", + "columnsDotDotDot": "Sütunlar...", "consoleLog": "Konsol günlüğü", "contentAlignment": "İçerik hizalaması", "continueFindTitle": "Aramaya devam edilsin mi?", @@ -146,14 +199,14 @@ "convertingXofYDotDoDot": "Dönüştürülüyor {0:#,###,##0}/{1:#,###,##0}...", "copy": "Kopyala", "copyImageToClipboard": "Resmi panoya kopyala", - "copySubtitle": "Alt yazıyı kopyala", + "copySubtitle": "Alt yazıyı kopyala", "copyTextOnly": "Kopyala (yalnızca metin)", "copyTextToClipboard": "Metni panoya kopyala", "couldNotSaveFileXErrorY": "\"{0}\" dosyası kaydedilemedi. Hata: {1}", - "couldNotOpenFileXErrorY": "\"{0}\" dosyası açılamadı. Hata: {1}", + "couldNotOpenFileXErrorY": "\"{0}\" dosyası açılamadı. Hata: {1}", "count": "Sayım", "cps": "Kar/sn", - "cudaRuntime": "CUDA çalışma zamanı", + "cudaRuntime": "CUDA çalışma zamanı", "currentVideoPosition": "Mevcut video konumu", "custom": "Özel", "cut": "Kes", @@ -180,7 +233,7 @@ "downloadX": "{0} İndir", "downloadingX": "{0} indiriliyor", "downloadingXPercent": "%{0} indiriliyor", - "downloadFailed": "İndirme başarısız oldu", + "downloadFailed": "İndirme başarısız oldu", "downloadCanceled": "İndirme iptal edildi", "unpackFailed": "Paket açılamadı: {0}", "unpackingFailed": "Paket çıkarma başarısız oldu", @@ -203,9 +256,9 @@ "engine": "Motor", "enterProfileName": "Profil adı girin", "error": "Hata", - "start": "Başlat", - "vobSub": "VobSub", - "outputFileCannotBeTheInputFile": "Çıktı dosyası, girdi dosyası ile aynı olamaz.", + "start": "Başlat", + "vobSub": "VobSub", + "outputFileCannotBeTheInputFile": "Çıktı dosyası, girdi dosyası ile aynı olamaz.", "errorX": "Hata; {0}", "example": "Örnek", "exampleX": "Örnek: {0}", @@ -218,8 +271,8 @@ "extendSelectedLinesToPreviousShotChange": "Seçili satırları önceki sahne değişimine (veya önceki alt yazıya) kadar uzat", "extendSelectedToNext": "Seçili olanı sonrakine uzat", "extendSelectedToPrevious": "Seçili olanı öncekine uzat", - "extendPreviousEndToSelectedStart": "Önceki satırın bitişini seçilenin başlangıcına uzat", - "extendNextStartToSelectedEnd": "Sonraki satırın başlangıcını seçilenin bitişine uzat", + "extendPreviousEndToSelectedStart": "Önceki satırın bitişini seçilenin başlangıcına uzat", + "extendNextStartToSelectedEnd": "Sonraki satırın başlangıcını seçilenin bitişine uzat", "extractingAudioClips": "Ses klipleri çıkarılıyor...", "exitFullScreen": "Tam ekrandan çık", "fade": "Kararma", @@ -270,7 +323,7 @@ "generateImportShotChanges": "Sahne değişimlerini oluştur/içe aktar", "generating": "Oluşturuluyor...", "generatingImageXofY": "Resim oluşturuluyor {0:#,##0} / {1:#,##0}...", - "generatingAudioFile": "Ses dosyası oluşturuluyor...", + "generatingAudioFile": "Ses dosyası oluşturuluyor...", "getAudioClips": "Ses kliplerini al", "goTo": "Git", "goToLineNumber": "Satır numarasına git", @@ -290,7 +343,7 @@ "imageSaved": "Resim kaydedildi", "imageBasedSubtitles": "Resim tabanlı alt yazılar", "images": "Resimler", - "imagesWithHtmlIndex": "HTML indeksli resimler", + "imagesWithHtmlIndex": "HTML indeksli resimler", "imagesWithTimeCode": "Zaman kodlu resimler", "import": "İçe Aktar", "importDotDotDot": "İçe aktar...", @@ -304,7 +357,7 @@ "insertNewSelection": "Yeni seçim ekle", "insertSubtitleAfterCurrentLine": "Mevcut satırdan sonra alt yazı ekle...", "insertSubtitleFileAtVideoPositionDotDotDot": "Video konumuna alt yazı dosyası ekle...", - "invalidSize": "Geçersiz boyut", + "invalidSize": "Geçersiz boyut", "inspectAdditions": "Eklemeleri incele...", "installFolder": "Kurulum klasörü", "invertSelection": "Seçimi tersine çevir", @@ -329,7 +382,7 @@ "loadDefaults": "Varsayılanları yükle", "lockTimeCodes": "Zaman kodlarını kilitle", "logo": "Logo", - "lookUpX": "\"{0}\" ögesini ara", + "lookUpX": "\"{0}\" ögesini ara", "margin": "Kenar boşluğu", "match": "Eşleşme", "maxCharactersPerSecond": "Maksimum karakter/saniye", @@ -345,7 +398,7 @@ "mergeSelectedLinesDialog": "Seçili satırları diyalog olarak birleştir", "mergeWithLineAfterAndAutoBreak": "Sonraki satırla birleştir ve otomatik böl", "mergeWithLineAfterKeepBreaks": "Sonraki satırla birleştir (satır sonlarını koru)", - "mergeWithLineAfterAndUnbreak": "Sonraki satırla birleştir ve satır sonunu kaldır", + "mergeWithLineAfterAndUnbreak": "Sonraki satırla birleştir ve satır sonunu kaldır", "mergeWithLineBeforeAndAutoBreak": "Önceki satırla birleştir ve otomatik böl", "mergeWithLineBeforeKeepBreaks": "Önceki satırla birleştir (satır sonlarını koru)", "middleCenter": "Orta-Merkez", @@ -360,21 +413,21 @@ "moveAllShotChangeOneFrameForward": "Tüm sahne değişimlerini bir kare ileri taşı", "multiMode": "Çoklu mod", "moveDown": "Aşağı taşı", - "increase": "Artır", + "increase": "Artır", "decrease": "Azalt", "moveUp": "Yukarı taşı", - "moveToTop": "En üste taşı", + "moveToTop": "En üste taşı", "moveToBottom": "En alta taşı", "multipleReplace": "Çoklu değiştir", "name": "Ad", "new": "Yeni", "newDotDotDot": "Yeni...", "newProfile": "Yeni profil", - "next": "Sonraki", + "next": "Sonraki", "newSubtitleStartKeyDownSetEndKeyUp": "Alt yazı ekle: Tuşa basınca başlat, bırakınca bitir", "setSubtitleStartAtVideoPositionSetEndAtKeyUpAndGoToNext": "Başlangıcı video konumuna, bitişi tuş bırakmaya ayarla ve sonrakine geç", "no": "Hayır", - "noColor": "Renk yok", + "noColor": "Renk yok", "noFilesToConvert": "Dönüştürülecek dosya yok", "noLanguageCode": "Dil kodu yok", "noSubtitleLoaded": "Alt yazı yüklenmedi", @@ -385,7 +438,7 @@ "normalCasing": "Normal yazım", "notAvailable": "Yok", "notInstalled": "Yüklü değil", - "nothingSelected": "Hiçbir şey seçilmedi", + "nothingSelected": "Hiçbir şey seçilmedi", "number": "Numara", "numberSymbol": "#", "ocrDotDotDot": "OCR...", @@ -411,8 +464,8 @@ "openVideoFileTitle": "Video dosyası aç", "optimalCharactersPerSecond": "Optimal karakter/saniye", "options": "Seçenekler", - "originalSubtitleClosed": "Orijinal alt yazı kapatıldı", - "originalSubtitleLoadedX": "Orijinal alt yazı yüklendi: {0}", + "originalSubtitleClosed": "Orijinal alt yazı kapatıldı", + "originalSubtitleLoadedX": "Orijinal alt yazı yüklendi: {0}", "originalText": "Orijinal metin", "outline": "Dış hat", "outlineColor": "Dış hat rengi", @@ -431,13 +484,14 @@ "percent": "Yüzde", "pickLayer": "Katman ayarla", "pickOllamaModel": "Ollama modelini seç", - "llamaCppUseRemoteServer": "Harici sunucu kullan (URL)", - "llamaCppEngineSettings": "llama.cpp motoru ayarları", + "pickModel": "Model seçin", + "llamaCppUseRemoteServer": "Harici sunucu kullan (URL)", + "llamaCppEngineSettings": "llama.cpp motoru ayarları", "llamaCppEngineSettingsSubtitle": "Yerel llama.cpp sunucu sürümü", - "startServer": "Sunucuyu başlat", + "startServer": "Sunucuyu başlat", "stopServer": "Sunucuyu durdur", "pickOutputFolder": "Çıkış klasörünü seç", - "pleaseSelectOutputFolder": "Lütfen bir çıktı klasörü seçin", + "pleaseSelectOutputFolder": "Lütfen bir çıktı klasörü seçin", "pickResolutionFromCurrentVideo": "Mevcut videodan çözünürlüğü al", "pickResolutionFromVideoDotDotDot": "Videodan çözünürlüğü al...", "pickSubtitleFile": "Alt yazı dosyası seç...", @@ -445,13 +499,13 @@ "pickVideoPosition": "Video konumu seç", "play": "Oynat", "playFromStartOfVideo": "Videonun başından oynat", - "playFromJustBeforeText": "Metinden hemen önce oynat", + "playFromJustBeforeText": "Metinden hemen önce oynat", "playNext": "Sonrakini oynat", - "playNextAndStop": "Sonrakini oynat (ve dur)", - "playNextAndLoop": "Sonrakini oynat (ve döngüye al)", - "playPrevious": "Öncekini oynat", - "playPreviousAndStop": "Öncekini oynat (ve dur)", - "playPreviousAndLoop": "Öncekini oynat (ve döngüye al)", + "playNextAndStop": "Sonrakini oynat (ve dur)", + "playNextAndLoop": "Sonrakini oynat (ve döngüye al)", + "playPrevious": "Öncekini oynat", + "playPreviousAndStop": "Öncekini oynat (ve dur)", + "playPreviousAndLoop": "Öncekini oynat (ve döngüye al)", "playSelectedLines": "Seçili satırları oynat", "playSelectedLinesWithLoop": "Seçili satırları döngüde oynat", "playSelectedLinesAndFocusWaveform": "Seçili satırları oynat ve ses dalgasına odaklan", @@ -464,10 +518,10 @@ "poweredBy": "Destekleyen", "prefix": "Ön ek", "preview": "Ön izleme", - "previewAlignmentInListView": "Liste görünümünde hizalamayı ön izle", - "previous": "Önceki", + "previewAlignmentInListView": "Liste görünümünde hizalamayı ön izle", + "previous": "Önceki", "profile": "Profil", - "quality": "Kalite", + "quality": "Kalite", "profileName": "Profil adı", "profiles": "Profiller", "property": "Özellik", @@ -475,7 +529,7 @@ "reDownloadX": "{0} ögesini tekrar indir", "reason": "Sebep", "recentFiles": "Son dosyalar", - "recentlyUsedVideoOffsets": "Son kullanılan video zaman kaydırmaları", + "recentlyUsedVideoOffsets": "Son kullanılan video zaman kaydırmaları", "redo": "Yinele", "redownload": "Yeniden indir...", "release": "Sürüm", @@ -495,18 +549,19 @@ "removeItalic": "İtalik yazıyı kaldır", "removeRightToLeftUnicodeTags": "RTL Unicode etiketlerini kaldır", "removeSelectedFile": "Seçili dosya kaldırılsın mı?", - "removeSelectedFilesX": "Seçili {0} dosya kaldırılsın mı?", + "removeSelectedFilesX": "Seçili {0} dosya kaldırılsın mı?", "removeStyling": "Stili kaldır", "removeTextForHearingImpaired": "İşitme engelliler için metni kaldır", "removeUnderline": "Alt çizgiyi kaldır", "rename": "Yeniden adlandır", "replace": "Değiştir", - "replaceLine": "Satırı değiştir", + "replaceLine": "Satırı değiştir", "replaceWith": "Şununla değiştir", "requiresRestart": "Yeniden başlatma gerektirir", "reset": "Sıfırla", - "resizePanels": "Panelleri yeniden boyutlandır", + "resizePanels": "Panelleri yeniden boyutlandır", "resolution": "Çözünürlük", + "retry": "Yeniden dene", "reverseRightToLeftStartEnd": "RTL başlangıç/bitişini tersine çevir", "right": "Sağ", "rightToLeft": "Sağdan sola", @@ -533,13 +588,13 @@ "seconds": "Saniye", "selectAll": "Tümünü seç", "selectFilesToConvert": "Dönüştürülecek dosyaları seç", - "selectForcedLines": "Zorunlu satırları seç", + "selectForcedLines": "Zorunlu satırları seç", "selectNone": "Hiçbirini seçme", - "selectNonForcedLines": "Zorunlu olmayan satırları seç", + "selectNonForcedLines": "Zorunlu olmayan satırları seç", "selectSaveFolder": "Kaydetmek için bir klasör seçin", "selectSubtitle": "Alt yazı seç", "selectedAFolderToSaveTo": "Kaydetmek için bir klasör seçildi", - "selectionToLowercase": "Seçimi küçük harfe dönüştür", + "selectionToLowercase": "Seçimi küçük harfe dönüştür", "selectionToSentenceCase": "Seçimi cümle düzenine dönüştür", "selectionToUppercase": "Seçimi büyük harfe dönüştür", "selectedLines": "Seçili satırlar", @@ -548,8 +603,8 @@ "separator": "Ayırıcı", "setEnd": "Bitiş ayarla", "setEndAndGoToNext": "Bitişi ayarla ve sonrakine git", - "setEndAddNewAndGoToNew": "Bitişi ayarla, yeni ekle ve yeniye git", - "setEndAddNewAndGoToNewNoFocusTextBox": "Bitişi ayarla, yeni ekle ve yeniye git (metin kutusuna odaklanma)", + "setEndAddNewAndGoToNew": "Bitişi ayarla, yeni ekle ve yeniye git", + "setEndAddNewAndGoToNewNoFocusTextBox": "Bitişi ayarla, yeni ekle ve yeniye git (metin kutusuna odaklanma)", "setEndAndOffsetTheRest": "Bitişi ayarla ve geri kalanını kaydır", "setFontDotDotDot": "Yazı tipini ayarla...", "setInCueToClosestShotChangeLeftGreenZone": "Giriş zamanını en yakın sahne değişimine ayarla (sol yeşil bölgeye hizala)", @@ -557,17 +612,19 @@ "setOutCueToClosestShotChangeLeftGreenZone": "Bitiş zamanını en yakın sahne değişimine ayarla (sol yeşil bölgeye hizala)", "setOutCueToClosestShotChangeRightGreenZone": "Bitiş zamanını en yakın sahne değişimine ayarla (sağ yeşil bölgeye hizala)", "setStart": "Başlangıç ayarla", - "setStartAndGoToNext": "Başlangıcı ayarla ve sonrakine git", - "setStartAndKeepDuration": "Başlangıcı ayarla ve süreyi koru", + "setStartAndGoToNext": "Başlangıcı ayarla ve sonrakine git", + "setStartAndKeepDuration": "Başlangıcı ayarla ve süreyi koru", "setStartAndOffsetTheRest": "Başlangıcı ayarla ve geri kalanını kaydır", - "setUpLikeSubtitleEdit4": "Subtitle Edit 4 gibi kur (tema, kısayollar, değiştirme kuralları)", - "imageBackgroundColorDotDotDot": "Görüntü arka plan rengi...", + "setUpLikeSubtitleEdit4": "Subtitle Edit 4 gibi kur (tema, kısayollar, değiştirme kuralları)", + "imageBackgroundColorDotDotDot": "Görüntü arka plan rengi...", "setVideoOffset": "Video farkını ayarla", "settings": "Ayarlar", "shadow": "Gölge", "shadowColor": "Gölge rengi", "shadowWidth": "Gölge genişliği", - "shiftLineBy": "Satırı şu kadar kaydır", + "shiftLineBy": "Satırı şu kadar kaydır", + "shotIn": "Sahne girişi", + "shotOut": "Sahne çıkışı", "shortcut": "Kısayol", "shortcuts": "Kısayollar", "show": "Göster", @@ -575,21 +632,25 @@ "showCpsColumn": "\"Kar/sn\" sütununu göster", "showDurationColumn": "\"Süre\" sütununu göster", "showGapColumn": "\"Boşluk\" sütununu göster", - "showForcedColumn": "\"Zorunlu\" sütununu göster", + "showForcedColumn": "\"Zorunlu\" sütununu göster", "showStartColumn": "\"Başlangıç\" sütununu göster", "showHideColumn": "\"Gizle\" sütununu göster", "showHistory": "Geçmişi göster", + "clearHistory": "Geçmişi temizle", + "removeFromHistory": "Geçmişten kaldır", "showLayerColumn": "\"Katman\" sütununu göster", "showPreview": "Ön izlemeyi göster", "showShotChangesList": "Sahne değişimleri listesini göster", + "showShotInColumn": "\"Sahne girişi\" sütununu göster", + "showShotOutColumn": "\"Sahne çıkışı\" sütununu göster", "showStyleColumn": "\"Stil\" sütununu göster", - "showTeletext": "Liste görünümünde teletext sütununu göster", + "showTeletext": "Liste görünümünde teletext sütununu göster", "showTimeCodes": "Zaman kodlarını göster", "showWpmColumn": "\"Kelime/dk\" sütununu göster", "showPixelWidthColumn": "\"Piksel genişliği\" sütununu göster", "shrink": "Küçült", "singleMode": "Tekli mod", - "textTotalLength": "Metin - toplam uzunluk", + "textTotalLength": "Metin - toplam uzunluk", "textSingleLineMaxLength": "Metin - tek satır maks. uzunluk", "size": "Boyut", "sizeX": "Boyut: {0}", @@ -607,21 +668,21 @@ "speechToTextSelectedLinesPromptAlways": "Seçili satırlar için sesten metne (her zaman motor/dil sor)", "speechToTextSelectedLinesPromptFirstTime": "Seçili satırlar için sesten metne (motor/dil sadece ilk seferde sor)", "speed": "Hız", - "balanceWithNextSubtitle": "Sonraki alt yazı ile dengele", - "balanceWithPreviousSubtitle": "Önceki alt yazı ile dengele", - "fetchLastWordFromPreviousSubtitle": "Önceki alt yazıdan son kelimeyi al", - "fetchRestOfSentenceFromNextSubtitle": "Sonraki alt yazıdan cümlenin kalanını al", - "fetchUnfinishedSentenceFromPreviousSubtitle": "Önceki alt yazıdan tamamlanmamış cümleyi al", - "moveFirstWordToPreviousSubtitle": "İlk kelimeyi önceki alt yazıya taşı", - "moveRestOfSentenceToPreviousSubtitle": "Cümlenin kalanını önceki alt yazıya taşı", - "moveUnfinishedSentenceToNextSubtitle": "Tamamlanmamış cümleyi sonraki alt yazıya taşı", - "splitAtComma": "Virgülden böl", - "splitAtDialogDash": "Diyalog tire işaretinden böl", - "splitAtLineBreak": "Satır sonundan böl", - "splitAtSentenceEnd": "Cümle sonundan böl", + "balanceWithNextSubtitle": "Sonraki alt yazı ile dengele", + "balanceWithPreviousSubtitle": "Önceki alt yazı ile dengele", + "fetchLastWordFromPreviousSubtitle": "Önceki alt yazıdan son kelimeyi al", + "fetchRestOfSentenceFromNextSubtitle": "Sonraki alt yazıdan cümlenin kalanını al", + "fetchUnfinishedSentenceFromPreviousSubtitle": "Önceki alt yazıdan tamamlanmamış cümleyi al", + "moveFirstWordToPreviousSubtitle": "İlk kelimeyi önceki alt yazıya taşı", + "moveRestOfSentenceToPreviousSubtitle": "Cümlenin kalanını önceki alt yazıya taşı", + "moveUnfinishedSentenceToNextSubtitle": "Tamamlanmamış cümleyi sonraki alt yazıya taşı", + "splitAtComma": "Virgülden böl", + "splitAtDialogDash": "Diyalog tire işaretinden böl", + "splitAtLineBreak": "Satır sonundan böl", + "splitAtSentenceEnd": "Cümle sonundan böl", "splitAtTextBoxCursorPosition": "İmleç konumundan böl", "splitLine": "Satırı böl", - "splitNearMiddle": "Ortaya en yakın boşluktan böl", + "splitNearMiddle": "Ortaya en yakın boşluktan böl", "splitLineAtTextBoxCursorPosition": "Satırı imleç konumundan böl", "splitLineAtVideoAndTextBoxPosition": "Satırı video ve metin kutusu konumundan böl", "splitLineAtVideoPosition": "Satırı video konumundan böl", @@ -631,19 +692,21 @@ "startingDotDotDot": "Başlatılıyor...", "status": "Durum", "stereo": "Stereo", - "spreadsheetFiles": "Hesap tablosu dosyaları", + "spreadsheetFiles": "Hesap tablosu dosyaları", "stop": "Durdur", "strikeout": "Üstü çizili", "style": "Stil", "styleExaggeration": "Stil abartısı", "styles": "Stiller", "subtitleFile": "Alt yazı dosyası", + "subtitleFileChangedOutsideX": "\"{0}\" dosyası Subtitle Edit haricinde değiştirildi.\n\nYeniden yüklensin mi? Değişiklikleriniz kaybolacaktır.", "subtitleFileName": "Alt yazı dosya adı", "subtitleFileSaved": "Alt yazı dosyası kaydedildi", "subtitleFileSavedToX": "Alt yazı dosyası {0} konumuna kaydedildi", "subtitleFiles": "Alt yazı dosyaları", "subtitleFormats": "Alt yazı formatları", "subtitleLoadedX": "Alt yazı yüklendi: {0}", + "subtitleReloadedChangedOutsideX": "Alt yazı yeniden yüklendi (Subtitle Edit haricinde değiştirildi): {0}", "suffix": "Son ek", "suggestions": "Öneriler", "sync": "Senkronizasyon", @@ -651,8 +714,8 @@ "system": "Sistem", "targetEncoding": "Hedef kodlama", "targetFormat": "Hedef format", - "teletextAlignment": "Teletext hizalaması", - "teletextColor": "Teletext rengi", + "teletextAlignment": "Teletext hizalaması", + "teletextColor": "Teletext rengi", "teletextLine": "Teletext satırı", "tenHours": "10 saat", "text": "Metin", @@ -669,10 +732,10 @@ "toggleCasing": "Büyük/küçük harf değiştir", "toggleDirection": "Yönü değiştir", "toggleForced": "Zorunluyu aç/kapat", - "markedXLinesAsForced": "{0} satır zorunlu olarak işaretlendi", - "unmarkedXLinesAsForced": "{0} satırın zorunlu işareti kaldırıldı", - "noForcedLinesFound": "Zorunlu satır bulunamadı", - "saveForcedLinesAs": "Zorunlu satırları farklı kaydet...", + "markedXLinesAsForced": "{0} satır zorunlu olarak işaretlendi", + "unmarkedXLinesAsForced": "{0} satırın zorunlu işareti kaldırıldı", + "noForcedLinesFound": "Zorunlu satır bulunamadı", + "saveForcedLinesAs": "Zorunlu satırları farklı kaydet...", "toggleShotChangesAtVideoPosition": "Video konumunda sahne değişimlerini aç/kapat", "toolbar": "Araç çubuğu", "tools": "Araçlar", @@ -682,14 +745,14 @@ "top": "Üst", "totalAdjustmentX": "Toplam düzeltme: {0}", "translate": "Çevir", - "translatePercentX": "Çevriliyor: %{0}", + "translatePercentX": "Çevriliyor: %{0}", "translateRow": "Satırı çevir", "translation": "Çeviri", "twoLetterLanguageCode": "İki harfli dil kodu", "type": "Tür", "unbreak": "Metni birleştir", "unbreakLines": "Satırları birleştir", - "undelete": "Silmeyi geri al", + "undelete": "Silmeyi geri al", "underline": "Altı çizili", "undo": "Geri al", "unknown": "Bilinmiyor", @@ -702,7 +765,7 @@ "updateAndClose": "Güncelle ve kapat", "updateAvailable": "Güncelleme mevcut", "updateDetails": "Güncelleme detayları", - "updateX": "{0} güncelle", + "updateX": "{0} güncelle", "updatedBy": "Güncelleyen", "upToDate": "Güncel", "url": "URL", @@ -723,20 +786,33 @@ "videoCustom1ForwardX": "Video, özel milisaniye ({0:#,###,##0}) ileri, 1", "videoCustom2BackX": "Video, özel milisaniye ({0:#,###,##0}) geri, 2", "videoCustom2ForwardX": "Video, özel milisaniye ({0:#,###,##0}) ileri, 2", - "videoCustom3BackX": "Video, özel milisaniye ({0:#,###,##0}) geri, 3", - "videoCustom3ForwardX": "Video, özel milisaniye ({0:#,###,##0}) ileri, 3", - "videoCustom4BackX": "Video, özel milisaniye ({0:#,###,##0}) geri, 4", - "videoCustom4ForwardX": "Video, özel milisaniye ({0:#,###,##0}) ileri, 4", + "videoCustom3BackX": "Video, özel milisaniye ({0:#,###,##0}) geri, 3", + "videoCustom3ForwardX": "Video, özel milisaniye ({0:#,###,##0}) ileri, 3", + "videoCustom4BackX": "Video, özel milisaniye ({0:#,###,##0}) geri, 4", + "videoCustom4ForwardX": "Video, özel milisaniye ({0:#,###,##0}) ileri, 4", + "videoCustom1BackAndPauseX": "Video, özel milisaniye ({0:#,###,##0}) geri ve duraklat, 1", + "videoCustom1ForwardAndPauseX": "Video, özel milisaniye ({0:#,###,##0}) ileri ve duraklat, 1", + "videoCustom2BackAndPauseX": "Video, özel milisaniye ({0:#,###,##0}) geri ve duraklat, 2", + "videoCustom2ForwardAndPauseX": "Video, özel milisaniye ({0:#,###,##0}) ileri ve duraklat, 2", + "videoCustom3BackAndPauseX": "Video, özel milisaniye ({0:#,###,##0}) geri ve duraklat, 3", + "videoCustom3ForwardAndPauseX": "Video, özel milisaniye ({0:#,###,##0}) ileri ve duraklat, 3", + "videoCustom4BackAndPauseX": "Video, özel milisaniye ({0:#,###,##0}) geri ve duraklat, 4", + "videoCustom4ForwardAndPauseX": "Video, özel milisaniye ({0:#,###,##0}) ileri ve duraklat, 4", "videoExtension": "Video dosyası uzantısı", "videoFile": "Video dosyası", - "videoFileGenerated": "Video dosyası oluşturuldu", - "videoFileGeneratedX": "Video dosyası oluşturuldu: \"{0}\"", + "videoFileGenerated": "Video dosyası oluşturuldu", + "videoFileGeneratedX": "Video dosyası oluşturuldu: \"{0}\"", + "videoFilesGenerated": "Video dosyaları oluşturuldu", + "xVideosGenerated": "{0} video oluşturuldu", + "xOfYVideosGenerated": "{0} / {1} video oluşturuldu", + "savedInX": "{0} konumuna kaydedildi", + "savedInXFolders": "{0} klasöre kaydedildi", "videoFiles": "Video dosyaları", - "videoAndAudioFiles": "Video ve ses dosyaları", + "videoAndAudioFiles": "Video ve ses dosyaları", "videoOffset": "Video farkı", "videoOneFrameBack": "Video, bir kare geri", "videoOneFrameForward": "Video, bir kare ileri", - "videoOneFrameBackWithPlay": "Video, oynatarak bir kare geri", + "videoOneFrameBackWithPlay": "Video, oynatarak bir kare geri", "videoOneFrameForwardWithPlay": "Video, oynatarak bir kare ileri", "videoOneSecondBack": "Video, bir saniye geri", "videoOneSecondForward": "Video, bir saniye ileri", @@ -745,9 +821,9 @@ "videoResolution": "Video çözünürlüğü", "visible": "Görünür", "voice": "Ses", - "volume": "Ses düzeyi", + "volume": "Ses düzeyi", "warning": "Uyarı", - "waveform": "Ses dalgası", + "waveform": "Ses dalgası", "waveformCenterOnVideoPosition": "Dalga formunu video konumuna ortala", "waveformPasteFromClipboard": "Panodan yapıştır", "waveformSpectrogram": "Dalga formu/Spektrogram", @@ -756,7 +832,7 @@ "pixelWidth": "Piksel genişliği", "wpm": "Kelime/dak", "xFiles": "{0:#,###,##0} dosya", - "xOfYFiles": "{0:#,###,##0} / {1:#,###,##0} dosya", + "xOfYFiles": "{0:#,###,##0} / {1:#,###,##0} dosya", "xFilesConvertedInY": "{0:#,###,##0} dosya {1} içinde dönüştürüldü", "xNoLinesUpdated": "{0}: Hiçbir satır güncellenmedi", "xNotFound": "\"{0}\" bulunamadı", @@ -764,11 +840,11 @@ "xOfYLinesUpdatedAndZNeighborsAdjusted": "{0}: {2} satırdan {1} tanesi güncellendi, {3} komşu satır ayarlandı", "noBookmarksFound": "Başka yer imi bulunamadı", "xRequiresAnApiKey": "{0} bir API anahtarı gerektirir", - "xRequiresAValidUrl": "{0} geçerli bir URL gerektirir (örn. \"http://...\" veya \"https://...\")", + "xRequiresAValidUrl": "{0} geçerli bir URL gerektirir (örn. \"http://...\" veya \"https://...\")", "yes": "Evet", - "zeroBytes": "0 bayt", + "zeroBytes": "0 bayt", "copyToClipboard": "Panoya kopyala", - "copiedToClipboard": "Panoya kopyalandı", + "copiedToClipboard": "Panoya kopyalandı", "playCurrent": "Mevcut olanı oynat", "leftMargin": "Sol kenar boşluğu", "rightMargin": "Sağ kenar boşluğu", @@ -793,14 +869,14 @@ "openAiCompatibleSttLanguage": "Dil İpucu", "openAiCompatibleSttTemperature": "Sıcaklık", "openAiCompatibleSttPrompt": "Komut istemi", - "openAiCompatibleSttModelRejectedHint": "Sunucu model adını reddetti. Her OpenAI uyumlu uç nokta model adı kabul etmez; örneğin xAI'ın https://api.x.ai/v1/stt adresi hiç 'model' parametresi almaz. Model alanını temizlemeyi deneyin.", - "dashScopeSttRegion": "Bölge", - "dashScopeSttEnableWords": "Kelime düzeyinde zaman damgaları", - "dashScopeSttRegionKeyHint": "Not: Alibaba Cloud Model Studio API anahtarları bölgeye özeldir; seçilen bölgenin, API anahtarının oluşturulduğu bölgeyle (Çin veya Uluslararası) eşleştiğinden emin olun.", - "googleCloudSttProjectId": "Proje Kimliği (yalnızca Uygulama Varsayılan Kimlik Bilgileri için)", - "googleCloudSttBucketName": "Depolama kovası (boş = otomatik)", - "googleCloudSttDynamicBatching": "Dinamik toplu işleme (yaklaşık 5 kat daha ucuz, gecikme süresi garantisi yok)", - "onlineSttApiKeyMissing": "Bir API anahtarı gereklidir. Lütfen API anahtarınızı girip tekrar deneyin.", + "openAiCompatibleSttModelRejectedHint": "Sunucu model adını reddetti. Her OpenAI uyumlu uç nokta model adı kabul etmez; örneğin xAI'ın https://api.x.ai/v1/stt adresi hiç 'model' parametresi almaz. Model alanını temizlemeyi deneyin.", + "dashScopeSttRegion": "Bölge", + "dashScopeSttEnableWords": "Kelime düzeyinde zaman damgaları", + "dashScopeSttRegionKeyHint": "Not: Alibaba Cloud Model Studio API anahtarları bölgeye özeldir; seçilen bölgenin, API anahtarının oluşturulduğu bölgeyle (Çin veya Uluslararası) eşleştiğinden emin olun.", + "googleCloudSttProjectId": "Proje Kimliği (yalnızca Uygulama Varsayılan Kimlik Bilgileri için)", + "googleCloudSttBucketName": "Depolama kovası (boş = otomatik)", + "googleCloudSttDynamicBatching": "Dinamik toplu işleme (yaklaşık 5 kat daha ucuz, gecikme süresi garantisi yok)", + "onlineSttApiKeyMissing": "Bir API anahtarı gereklidir. Lütfen API anahtarınızı girip tekrar deneyin.", "openAiCompatibleSttAutoTranscribeOnAudioSelection": "Ses dalgası üzerindeki yeni seçimi ses tanıma ile otomatik yazıya dök", "openAiCompatibleSttStream": "Yanıtı akış olarak al", "openAiCompatibleSttStreamHint": "Canlı metin parçacıkları (SSE) almak için 'stream=true' gönderir. 'stream' parametresini reddeden sunucular (örn. Groq) için bunu devre dışı bırakın.", @@ -825,15 +901,15 @@ "file": "_Dosya", "new": "_Yeni", "newKeepVideo": "Yeni (_videoyu koru)", - "newWindow": "Yeni _pencere", + "newWindow": "Yeni _pencere", "windowTitle": "Pencere", - "windowMinimize": "Simge durumuna küçült", + "windowMinimize": "Simge durumuna küçült", "windowZoom": "Yakınlaştır", "closeWindow": "Pencereyi kapat", "open": "_Aç...", "openKeepVideo": "Aç (_videoyu koru)...", "openOriginal": "_Orijinali aç...", - "editOriginalSubtitle": "Orijinal alt yazıyı düzenle", + "editOriginalSubtitle": "Orijinal alt yazıyı düzenle", "closeOriginal": "Orijinali _kapat", "closeTranslation": "Çeviriyi _kapat", "reopen": "Yeniden _aç...", @@ -857,6 +933,7 @@ "multipleReplace": "Ç_oklu değiştir...", "fillSelectedLinesWithClipboard": "Seçili satırları panodaki metinle doldur", "goToLineNumber": "_Satır numarasına git...", + "commandPalette": "Komut _paleti...", "rightToLeftMode": "S_ağdan sola modu", "modifySelectionDotDotDot": "Seçimi _değiştir...", "tools": "_Araçlar", @@ -864,32 +941,32 @@ "applyDurationLimits": "Süre _limitlerini uygula...", "batchConvert": "_Toplu dönüştür...", "beautifyTimeCodes": "Zaman kodlarını optimize et...", - "improveTimeCodes": "Zaman kodlarını iyileştir (zorlamalı hizalama)...", + "improveTimeCodes": "Zaman kodlarını iyileştir (zorlamalı hizalama)...", "bridgeGaps": "Boşlukları köp_rüle...", "applyMinGap": "Alt yazılar arası min. boşluğu uygula...", "changeCasing": "_Büyük/küçük harf değiştir...", "changeFormatting": "Biçimlendirmeyi değiştir...", - "aiReview": "Yapay zekâ incelemesi...", + "aiReview": "Yapay zekâ incelemesi...", "fixCommonErrors": "Yaygın hataları _düzelt...", "checkAndFixNetflixErrors": "Netfli_x hatalarını kontrol et ve düzelt...", - "listErrors": "Hataları l_istele...", + "listErrors": "Hataları l_istele...", "makeEmptyTranslationFromCurrentSubtitle": "Mevcut alt yazıdan yeni _boş çeviri yap", "mergeLinesWithSameText": "Aynı metne sahip satırları bir_leştir...", "mergeLinesWithSameTimeCodes": "Aynı zaman kodlu satırları birleştir...", "splitBreakLongLines": "Uzun satırları böl/dengele...", - "evenlyDistributeLines": "Satırları dengeli dağıt (CPS'ye göre)", + "evenlyDistributeLines": "Satırları dengeli dağıt (CPS'ye göre)", "mergeShortLines": "Kısa satırları birleştir...", "mergeContinuationLines": "Devam eden satırları birleştir...", "snapAllTimesToFrames": "Tüm zamanları karelere yasla", "renumber": "Yeniden numaralandır...", "removeTextForHearingImpaired": "İşitme engelliler için metni _kaldır...", - "removeUnicodeCharacters": "_Unicode karakterleri kaldır/değiştir...", + "removeUnicodeCharacters": "_Unicode karakterleri kaldır/değiştir...", "convertActors": "Aktörleri dönüştür...", "joinSubtitles": "Alt yazıları _birleştir...", "splitSubtitle": "Alt yazıyı _böl...", "mergeTwoSubtitles": "İki alt yazıyı birleştir...", "assaTools": "_ASSA araçları", - "ssaTools": "_SSA araçları", + "ssaTools": "_SSA araçları", "assaProgressBar": "İ_lerleme çubuğu oluştur...", "assaChangeResolution": "Çözünürlüğü _değiştir...", "assaGenerateBackground": "Arka plan _kutuları oluştur...", @@ -901,7 +978,7 @@ "assaStyles": "S_tiller...", "assaProperties": "Ö_zellikler...", "assaAttachments": "_Ekler...", - "assaFontCollector": "_Yazı tipi toplayıcı...", + "assaFontCollector": "_Yazı tipi toplayıcı...", "spellCheckTitle": "_Yazım denetimi", "spellCheck": "_Yazım denetimi...", "findDoubleWords": "Çift kelimeleri _bul...", @@ -915,11 +992,11 @@ "audioTracks": "Ses _izleri", "speechToText": "Sesten _metne...", "textToSpeech": "_Metinden sese...", - "videoOcr": "Gömülü alt yazıyı _OCR ile tara...", + "videoOcr": "Gömülü alt yazıyı _OCR ile tara...", "setVideoOffset": "Video farkını ayarla...", "updateVideoOffsetX": "Video farkını {0} değerinden güncelle...", "smpteTiming": "SMPTE zamanlaması (tam sayı olmayan kare hızı)", - "waveformToolbar": "Ses dalgası araç çubuğu", + "waveformToolbar": "Ses dalgası araç çubuğu", "generateBurnIn": "Gömülü alt yazılı video _oluştur...", "generateTransparent": "_Alt yazılı şeffaf video oluştur...", "generateImportShotChanges": "Sahne deği_şimlerini oluştur/içe aktar...", @@ -928,7 +1005,7 @@ "dockVideoControls": "Video kontrollerini sa_bitle", "synchronization": "S_enkronizasyon", "adjustAllTimes": "_Tüm zamanları ayarla...", - "showSelectedLinesEarlierLater": "Seçili _alt yazı satırlarını erkene/sonraya al...", + "showSelectedLinesEarlierLater": "Seçili _alt yazı satırlarını erkene/sonraya al...", "changeFrameRate": "Kare _hızını değiştir...", "changeSpeed": "_Hızı değiştir...", "visualSync": "_Görsel senkronizasyon...", @@ -954,7 +1031,7 @@ "filterLayersForDisplayDotDotDot": "Görüntülenecek katmanları filtrele...", "toggleSelectSubtitleWhilePlayingCurrentlyOn": "Oynatırken alt yazıyı seçmeyi aç/kapat (şu anda: açık)", "toggleSelectSubtitleWhilePlayingCurrentlyOff": "Oynatırken alt yazıyı seçmeyi aç/kapat (şu anda: kapalı)", - "selectSubtitleWhilePlaying": "Oynatılırken geçerli alt yazıyı seç" + "selectSubtitleWhilePlaying": "Oynatılırken geçerli alt yazıyı seç" }, "toolbar": { "newHint": "Yeni bir alt yazı dosyası başlat {0}", @@ -964,15 +1041,15 @@ "saveAsHint": "Alt yazıyı yeni bir adla kaydet {0}", "findHint": "Alt yazılarda metin bul {0}", "replaceHint": "Metni bul ve değiştir {0}", - "multipleReplaceHint": "Çoklu değiştirme {0}", + "multipleReplaceHint": "Çoklu değiştirme {0}", "spellCheckHint": "Alt yazıları yazım hataları için kontrol et {0}", "fixCommonErrorsHint": "Yaygın alt yazı hatalarını düzelt {0}", "removeTextForHiHint": "İşitme engelliler için metni kaldır {0}", "visualSyncHint": "Görsel eşitleme {0}", - "pointSyncHint": "Başka bir alt yazı üzerinden nokta senkronizasyonu: {0}", + "pointSyncHint": "Başka bir alt yazı üzerinden nokta senkronizasyonu: {0}", "beautifyTimeCodesHint": "Zaman kodlarını optimize et {0}", "burnInHint": "Alt yazıları video dosyasına göm {0}", - "autoTranslateHint": "Otomatik çeviri: {0}", + "autoTranslateHint": "Otomatik çeviri: {0}", "speechToTextHint": "Sesten metne dönüştürme: {0}", "settingsHint": "Program ayarlarını ve tercihlerini düzenle {0}", "layoutHint": "Araç çubuğu ve panel düzenini değiştir {0}", @@ -983,11 +1060,11 @@ "assaPropertiesHint": "Advanced Sub Station Alpha özellikleri", "assaAttachmentsHint": "Advanced Sub Station Alpha ekleri", "assaDrawHint": "Advanced Sub Station Alpha şekil çizimi", - "ssaStylesHint": "Sub Station Alpha stilleri", - "webVttStylesHint": "WebVTT stil yöneticisi", - "ssaPropertiesHint": "Sub Station Alpha özellikleri", - "ssaAttachmentsHint": "Sub Station Alpha ekleri", - "getFrameRateFromVideoFileHint": "Kare hızını video dosyasından al" + "ssaStylesHint": "Sub Station Alpha stilleri", + "webVttStylesHint": "WebVTT stil yöneticisi", + "ssaPropertiesHint": "Sub Station Alpha özellikleri", + "ssaAttachmentsHint": "Sub Station Alpha ekleri", + "getFrameRateFromVideoFileHint": "Kare hızını video dosyasından al" }, "waveform": { "playPauseHint": "Oynat / Duraklat {0}", @@ -1002,24 +1079,24 @@ "zoomVerticalHint": "Dikey yakınlaştırma {0}", "selectCurrentLineWhilePlayingHint": "Oynatırken mevcut alt yazıyı seç {0}", "videoPosition": "Video konumu {0}", - "videoPositionTextBox": "Video konumu metin kutusu {0}", - "toolbarLineBreakX": "Satır sonu {0} (araç çubuğunun kalanı yeni satırda devam eder)", - "initialText": "Seçili satırın ilk metni", + "videoPositionTextBox": "Video konumu metin kutusu {0}", + "toolbarLineBreakX": "Satır sonu {0} (araç çubuğunun kalanı yeni satırda devam eder)", + "initialText": "Seçili satırın ilk metni", "initialTextHint": "Seçili satırın seçildiği andaki metni", "hideWaveformToolbar": "Araç çubuğunu gizle {0}", "resetZoomAndSpeed": "Yakınlaştırmayı ve oynatma hızını sıfırla {0}", "removeBlankLines": "Boş satırları kaldır {0}", "playSelectedRepeatHint": "Seçili alt yazıları tekrar modunda oynat {0}", - "seekBackHint": "Videoyu {0} geri sar", - "seekForwardHint": "Videoyu {0} ileri sar", - "seekAmountHint": "Sarılacak süre/kare: {0}", - "seekVideo": "Videoyu sar (<< >>)", - "configureToolbarItems": "Araç çubuğu ögelerini yapılandır...", - "textPreviousHint": "Önceki alt yazıyı oynat ve sonunda dur {0}", + "seekBackHint": "Videoyu {0} geri sar", + "seekForwardHint": "Videoyu {0} ileri sar", + "seekAmountHint": "Sarılacak süre/kare: {0}", + "seekVideo": "Videoyu sar (<< >>)", + "configureToolbarItems": "Araç çubuğu ögelerini yapılandır...", + "textPreviousHint": "Önceki alt yazıyı oynat ve sonunda dur {0}", "textPlayHint": "Mevcut alt yazıyı oynat ve sonunda dur {0}", "textPauseHint": "Oynatmayı duraklat {0}", "textNextHint": "Sonraki alt yazıyı oynat ve sonunda dur {0}", - "moveSelectedLines": "Seçili satırları taşı (geri/ileri düğmeleri)", + "moveSelectedLines": "Seçili satırları taşı (geri/ileri düğmeleri)", "moveSelectedLinesAndFollowing": "Seçili satırları ve sonraki tümünü taşı (geri/ileri düğmeleri)", "moveAllLines": "Tüm satırları taşı (geri/ileri düğmeleri)", "moveSelectedLinesBackHint": "Seçili satırları {0} ms geri taşı {1}", @@ -1028,20 +1105,20 @@ "moveSelectedLinesAndFollowingForwardHint": "Seçili satırları ve sonraki tümünü {0} ms ileri taşı {1}", "moveAllLinesBackHint": "Tüm satırları {0} ms geri taşı {1}", "moveAllLinesForwardHint": "Tüm satırları {0} ms ileri taşı {1}", - "guessStartNoLineSelected": "Başlangıcı tahmin et: Satır seçilmedi", - "guessStartTimeCodesLocked": "Başlangıcı tahmin et: Zaman kodları kilitli", - "guessStartNoWaveform": "Başlangıcı tahmin et: Ses dalgası yok", - "guessStartNoRoomBeforePreviousLineX": "Başlangıcı tahmin et: {0}. satır ile önceki satır arasında boşluk yok", - "guessStartLineXAlreadyAtBoundary": "Başlangıcı tahmin et: {0}. satır zaten konuşmanın başladığı yerde duruyor", - "guessStartNoSilenceFoundNearLineX": "Başlangıcı tahmin et: {0}. satırın yakınında sessizlik bulunamadı", - "guessStartMovedLineXByYMs": "Başlangıcı tahmin et: {0}. satırın başlangıcı {1} ms kaydırıldı", - "guessEndNoLineSelected": "Bitişi tahmin et: Satır seçilmedi", - "guessEndTimeCodesLocked": "Bitişi tahmin et: Zaman kodları kilitli", - "guessEndNoWaveform": "Bitişi tahmin et: Ses dalgası yok", - "guessEndNoRoomBeforeNextLineX": "Bitişi tahmin et: {0}. satır ile sonraki satır arasında boşluk yok", - "guessEndLineXAlreadyAtBoundary": "Bitişi tahmin et: {0}. satır zaten konuşmanın bittiği yerde duruyor", - "guessEndNoSilenceFoundNearLineX": "Bitişi tahmin et: {0}. satırın yakınında sessizlik bulunamadı", - "guessEndMovedLineXByYMs": "Bitişi tahmin et: {0}. satırın bitişi {1} ms kaydırıldı" + "guessStartNoLineSelected": "Başlangıcı tahmin et: Satır seçilmedi", + "guessStartTimeCodesLocked": "Başlangıcı tahmin et: Zaman kodları kilitli", + "guessStartNoWaveform": "Başlangıcı tahmin et: Ses dalgası yok", + "guessStartNoRoomBeforePreviousLineX": "Başlangıcı tahmin et: {0}. satır ile önceki satır arasında boşluk yok", + "guessStartLineXAlreadyAtBoundary": "Başlangıcı tahmin et: {0}. satır zaten konuşmanın başladığı yerde duruyor", + "guessStartNoSilenceFoundNearLineX": "Başlangıcı tahmin et: {0}. satırın yakınında sessizlik bulunamadı", + "guessStartMovedLineXByYMs": "Başlangıcı tahmin et: {0}. satırın başlangıcı {1} ms kaydırıldı", + "guessEndNoLineSelected": "Bitişi tahmin et: Satır seçilmedi", + "guessEndTimeCodesLocked": "Bitişi tahmin et: Zaman kodları kilitli", + "guessEndNoWaveform": "Bitişi tahmin et: Ses dalgası yok", + "guessEndNoRoomBeforeNextLineX": "Bitişi tahmin et: {0}. satır ile sonraki satır arasında boşluk yok", + "guessEndLineXAlreadyAtBoundary": "Bitişi tahmin et: {0}. satır zaten konuşmanın bittiği yerde duruyor", + "guessEndNoSilenceFoundNearLineX": "Bitişi tahmin et: {0}. satırın yakınında sessizlik bulunamadı", + "guessEndMovedLineXByYMs": "Bitişi tahmin et: {0}. satırın bitişi {1} ms kaydırıldı" }, "audioTrackIsNowX": "Ses izi artık \"{0}\"", "audioTrackX": "Ses izi {0}", @@ -1049,6 +1126,9 @@ "charactersPerSecond": "Kar/saniye: {0}", "chooseColumn": "Sütun seç", "columnPaste": "Sütun yapıştır", + "commandPaletteTitle": "Komut paleti", + "commandPaletteSearchPlaceholder": "Komut aramak için yazın...", + "commandPaletteNoCommandsFound": "Eşleşen komut bulunamadı", "createdEmptyTranslation": "Mevcut alt yazıdan boş çeviri oluşturuldu", "deleteText": "Metni sil", "deleteTextAndShiftCellsUp": "Metni sil ve hücreleri yukarı kaydır", @@ -1061,7 +1141,7 @@ "errorLoadJpg": "Bu dosya bir JPG resim dosyası gibi görünüyor.\n\nSubtitle Edit resim dosyalarını açamaz.", "errorLoadPng": "Bu dosya bir PNG resim dosyası gibi görünüyor.\n\nSubtitle Edit resim dosyalarını açamaz.", "errorLoadRar": "Bu dosya sıkıştırılmış bir RAR dosyası gibi görünüyor.\n\nSubtitle Edit sıkıştırılmış dosyaları açamaz.", - "errorLoadRawPgsPrompt": "Bu dosya, Blu-ray SUP \"PG\" üst bilgilerini içermeyen ham bir PGS akışı gibi görünüyor; bu nedenle zaman damgası barındırmıyor.\n\nBu durum genellikle bir Matroska PGS izi \"ham\" (raw) modda dışa aktarıldığında gerçekleşir. Doğru zamanlamalar için izi normal modda tekrar dışa aktarın (ör. --raw parametresi olmadan \"mkvextract tracks\" kullanarak) veya orijinal Matroska dosyasını doğrudan Subtitle Edit ile açın.\n\nYine de alt yazı görsellerini, manuel olarak düzeltilmesi gereken otomatik üretilmiş geçici zamanlamalarla içe aktarmak istiyor musunuz?", + "errorLoadRawPgsPrompt": "Bu dosya, Blu-ray SUP \"PG\" üst bilgilerini içermeyen ham bir PGS akışı gibi görünüyor; bu nedenle zaman damgası barındırmıyor.\n\nBu durum genellikle bir Matroska PGS izi \"ham\" (raw) modda dışa aktarıldığında gerçekleşir. Doğru zamanlamalar için izi normal modda tekrar dışa aktarın (ör. --raw parametresi olmadan \"mkvextract tracks\" kullanarak) veya orijinal Matroska dosyasını doğrudan Subtitle Edit ile açın.\n\nYine de alt yazı görsellerini, manuel olarak düzeltilmesi gereken otomatik üretilmiş geçici zamanlamalarla içe aktarmak istiyor musunuz?", "errorLoadSrr": "Bu dosya bir ReScene SRR dosyası gibi görünüyor.\n\nSubtitle Edit SRR dosyalarını açamaz.", "errorLoadTorrent": "Bu dosya bir BitTorrent dosyası gibi görünüyor.\n\nSubtitle Edit torrent dosyalarını açamaz.", "errorLoadZip": "Bu dosya sıkıştırılmış bir ZIP dosyası gibi görünüyor.\n\nSubtitle Edit sıkıştırılmış dosyaları açamaz.", @@ -1081,20 +1161,20 @@ "lineXTextChangedFromYToZ": "Satır {0}: Metin \"{1}\" değerinden \"{2}\" değerine değişti", "lineXTimingChanged": "Satır {0}: Zamanlama değişti", "loadingWaveInfoFromCache": "Dalga bilgisi önbellekten yükleniyor...", - "clickToGenerateWaveform": "Ses dalgası oluşturmak için tıklayın", - "waveformFfmpegNotFoundClickToSetUp": "FFmpeg bulunamadı - FFmpeg kurmak ve ses dalga şeklini oluşturmak için buraya tıklayın", + "clickToGenerateWaveform": "Ses dalgası oluşturmak için tıklayın", + "waveformFfmpegNotFoundClickToSetUp": "FFmpeg bulunamadı - FFmpeg kurmak ve ses dalga şeklini oluşturmak için buraya tıklayın", "noTextInClipboard": "Panoda metin yok", - "numberOfLinesEvenlyDistributedX": "{0} satır dengeli şekilde dağıtıldı", + "numberOfLinesEvenlyDistributedX": "{0} satır dengeli şekilde dağıtıldı", "oneLineCopiedFromOriginal": "Orijinal alt yazıdan bir satır kopyalandı", - "oneLineCopiedToOriginal": "Orijinal alt yazıya bir satır kopyalandı", - "onlineOnlyVideo": "Yalnızca çevrim içi video", + "oneLineCopiedToOriginal": "Orijinal alt yazıya bir satır kopyalandı", + "onlineOnlyVideo": "Yalnızca çevrim içi video", "onlineOnlyVideoXSizeYDownloadAndOpen": "\"{0}\" ({1}) video dosyası yalnızca çevrim içi olarak (örneğin Dropbox veya iCloud Drive üzerinde) depolanıyor ve açılabilmesi için önce indirilmesi gerekiyor.\n\nŞimdi indirilip açılsın mı?", "oneLineMerged": "Bir satır birleştirildi", "oneLineSwitched": "Bir satır değiştirildi", "overwriteExistingCells": "Mevcut hücrelerin üzerine yaz", "overwriteOrShiftCellsDown": "Üzerine yaz/hücreleri aşağı kaydır", "parsingMatroskaFile": "Matroska dosyası ayrıştırılıyor...", - "readingDvdSubtitles": "DVD alt yazıları okunuyor...", + "readingDvdSubtitles": "DVD alt yazıları okunuyor...", "pasteFromClipboardDotDotDot": "Panodan yapıştır...", "redoPerformed": "Yineleme yapıldı", "redoPerformedXActionLeft": "Yineleme yapıldı (kalan işlem: {0})", @@ -1108,7 +1188,7 @@ "shiftTextCellsDown": "Metin hücrelerini aşağı kaydır", "singleLineLength": "Satır uzunluğu: ", "speedIsNowX": "Hız artık \"{0}\"", - "subtitleGridFormattingX": "Izgara biçimlendirmesi: {0}", + "subtitleGridFormattingX": "Izgara biçimlendirmesi: {0}", "subtitleImportedFromMatroskaFile": "Alt yazı Matroska dosyasından içe aktarıldı", "textDown": "Metin aşağı", "textOnly": "Sadece metin", @@ -1119,33 +1199,35 @@ "unbreakHint": "Seçili satırları birleştir", "undoPerformed": "Geri alma yapıldı", "undoPerformedXActionLeft": "Geri alma yapıldı (kalan işlem: {0})", - "videoAndWaveformPreviewTextX": "Video/ses dalgası ön izleme: {0}", + "videoAndWaveformPreviewTextX": "Video/ses dalgası ön izleme: {0}", "xLinesCopiedFromOriginal": "Orijinal alt yazıdan {0} satır kopyalandı", - "xLinesCopiedToOriginal": "Orijinal alt yazıya {0} satır kopyalandı", + "xLinesCopiedToOriginal": "Orijinal alt yazıya {0} satır kopyalandı", "xLinesMerged": "{0} satır birleştirildi", "xLinesSelectedOfY": "{0} / {1} satır seçildi", "xLinesSwitched": "{0} satır değiştirildi", "xShotChangedLoaded": "{0} sahne değişimi yüklendi", "youtubeDlDownloadedSuccessfully": "\"yt-dlp\" başarıyla indirildi.", "youtubeDlNotInstalledDownloadNow": "\"yt-dlp\" yüklü değil ve çevrim içi videoları oynatmak için gerekli.\n\nŞimdi indirilsin mi?", - "promptInsertSubtitleOverlap": "Eklenen satırlar mevcut satırlarla çakışacak.\n\nYine de eklensin mi?", + "promptInsertSubtitleOverlap": "Eklenen satırlar mevcut satırlarla çakışacak.\n\nYine de eklensin mi?", "youtubeDlOutdatedDownloadNow": "\"yt-dlp\" sürümü güncel değil ve çevrimiçi videolarla çalışmayabilir.\n\nGüncel sürüm şimdi indirilsin mi?", "insertUnicodeSymbol": "Unicode sembolü ekle", "trimmedXLines": "{0} alt yazı satırı kırpıldı", - "pastedXLinesOverSelectedLines": "Seçilen satırların üzerine {0} satır yapıştırıldı", + "pastedXLinesOverSelectedLines": "Seçilen satırların üzerine {0} satır yapıştırıldı", "pastedXOfYLinesOverSelectedLines": "Seçilen satırların üzerine {0} / {1} satır yapıştırıldı - geri kalanı seçime sığmadı", + "insertedXLinesFromClipboard": "Pano içerisinden {0} satır eklendi", "openOriginalDifferentNumberOfSubtitlesXY": "Orijinal alt yazı dosyası mevcut alt yazı dosyasıyla aynı sayıda alt yazıya sahip değil.\n\n• Orijinal alt yazılar: {0}\n• Mevcut alt yazılar: {1}", - "originalTextReadOnly": "Orijinal metin (salt okunur)", - "originalTextEditMode": "Orijinal metin (düzenleme modu)", + "originalTextReadOnly": "Orijinal metin (salt okunur)", + "originalTextEditMode": "Orijinal metin (düzenleme modu)", "originalIsReadOnlyNotSaved": "Orijinal alt yazı salt okunur bir referanstır ve kaydedilmedi", - "originalIsEmptyNotSaved": "Orijinal alt yazıda hiç metin yok ve kaydedilmedi", + "originalIsEmptyNotSaved": "Orijinal alt yazıda hiç metin yok ve kaydedilmedi", "originalIsReadOnlyReference": "Orijinal alt yazı salt okunur bir referans olarak açık", + "closeTranslationQuestionXY": "\"{0}\" çevirisi kapatılsın mı?\n\nOrijinal alt yazı \"{1}\", düzenlediğiniz alt yazı haline gelir. Çeviri dosyasının kendisi değiştirilmez.", "allowEditOfOriginalSubtitle": "Orijinal alt yazının düzenlenmesine izin ver", "showAllOriginalLinesX": "Tüm orijinal satırları göster (burada {0} tanesinin eşleşmesi yok)", "showAllOriginalLinesHint": "Çeviride neyin eksik olduğunu görebilmeniz için eşleşmesi olmayan satırlar ekstra satır olarak gösterilir.", "showAllOriginalLinesNote": "O satırı alt yazınıza eklemek için ekstra satıra yazın", - "showMatchingOriginalLinesX": "Yalnızca eşleşen {0} orijinal satırı göster", - "showMatchingOriginalLinesHint": "Diğer {0} orijinal satır hiçbir yerde gösterilmiyor.", + "showMatchingOriginalLinesX": "Yalnızca eşleşen {0} orijinal satırı göster", + "showMatchingOriginalLinesHint": "Diğer {0} orijinal satır hiçbir yerde gösterilmiyor.", "showMatchingOriginalLinesNote": "Siz orijinali kaydetmediğiniz sürece dosyada kalmaya devam ederler", "allowEditHintReadOnly": "Orijinal dosya salt okunur olarak gösterilir ve asla kaydedilmez; bu nedenle dosyası değişemez.", "allowEditHintAllLines": "Orijinalin tamamı ekrandadır; bu nedenle kaydetmek tüm satırları korur.", @@ -1154,7 +1236,7 @@ "sortedByStartTime": "\"Göster\" zamanına göre sıralandı", "sortedByEndTime": "\"Gizle\" zamanına göre sıralandı", "sortedByNumber": "Numaraya göre sıralandı", - "sortedByDuration": "Süreye göre sıralandı", + "sortedByDuration": "Süreye göre sıralandı", "sortedByGap": "Boşluğa göre sıralandı", "sortedByText": "Metne göre sıralandı", "sortedByTextTotalLength": "Metin toplam uzunluğuna göre sıralandı", @@ -1165,7 +1247,7 @@ "sortedByActor": "Oyuncuya göre sıralandı", "sortedByStyle": "Stile göre sıralandı", "videoBrightnessSetTo": "Parlaklık: {0}", - "videoContrastSetTo": "Karşıtlık: {0}", + "videoContrastSetTo": "Karşıtlık: {0}", "colorHint": "Seçili satırları renklendir", "removeFormattingHint": "Seçili satırlardan biçimlendirmeyi kaldır", "assaResolutionResamplerDone": "ASSA çözünürlüğü değiştirildi.", @@ -1174,12 +1256,13 @@ "fileExportedInFormatXToY": "Dosya {0} formatında {1} konumuna aktarıldı", "fileExportedInFormatXToFileY": "Dosya \"{0}\" formatında \"{1}\" dosyasına aktarıldı", "fixedXLines": "{0} satır düzeltildi", + "toolXChangedYLines": "{0}: {1} satır değiştirildi", "transcriptionCompletedWithXLines": "Transkripsiyon {0} satır ile tamamlandı", "openSubtitleFileX": "\"{0}\" alt yazı dosyası açılsın mı?", "replacedXOccurrences": "{0} eşleşme değiştirildi", "ffmpegDownloadedAndInstalledToX": "ffmpeg indirildi ve {0} konumuna kuruldu", "nothingToSave": "Kaydedilecek bir şey yok", - "formatLimitWarningTitle": "Biçim sınırları aşıldı", + "formatLimitWarningTitle": "Biçim sınırları aşıldı", "formatLimitWarningXLinesExceedLimitsOfY": "{0} alt yazı \"{1}\" biçiminin sınırlarını aşıyor:", "formatLimitWarningMaxXCharactersPerLine": "Satır başına en fazla {0} karakter", "formatLimitWarningMaxXLines": "Alt yazı başına en fazla {0} satır", @@ -1191,16 +1274,16 @@ "liveSpellCheckLanguageXLoaded": "Canlı yazım denetimi dili {0} yüklendi", "downloadFfmpegTitle": "FFmpeg indirilsin mi?", "downloadFfmpegQuestion": "Çevrim içi videoları oynatmak ve bazı video düzenleme özellikleri için FFmpeg gereklidir.\n\nŞimdi FFmpeg indirilsin mi?", - "ffmpegNotFoundInstallHint": "FFmpeg bulunamadı.\n\nLütfen PATH değişkeninde erişilebilir olacak şekilde FFmpeg kurun (ör. paket yöneticiniz aracılığıyla) veya FFmpeg yolunu Seçenekler -> Ayarlar menüsünden belirleyin.", + "ffmpegNotFoundInstallHint": "FFmpeg bulunamadı.\n\nLütfen PATH değişkeninde erişilebilir olacak şekilde FFmpeg kurun (ör. paket yöneticiniz aracılığıyla) veya FFmpeg yolunu Seçenekler -> Ayarlar menüsünden belirleyin.", "selectCurrentSubtitleWhilePlayingOn": "Oynatırken geçerli alt yazıyı seç: AÇIK", "selectCurrentSubtitleWhilePlayingOff": "Oynatırken geçerli alt yazıyı seç: KAPALI", - "setUpLikeSe4Question": "Bu işlem Subtitle Edit 4 kısayollarını ve değiştirme kurallarını içe aktaracak; Subtitle Edit 4 temasını, araç çubuğunu ve ses dalgası görünümünü uygulayacaktır.\n\nDevam etmek istiyor musunuz?", - "setUpLikeSe4ImportedSettingsX": "Subtitle Edit 4 sürümünden içe aktarılan ayarlar:\n{0}", - "setUpLikeSe4NoSettingsXmlFound": "Subtitle Edit 4 Settings.xml dosyası bulunamadı - Subtitle Edit 4 varsayılan değerleri uygulandı.", - "setUpLikeSe4ShortcutsAddedX": "Eklenen/güncellenen kısayollar: {0}", - "setUpLikeSe4ShortcutsSkippedX": "Atlanan kısayollar (eşleşme yok): {0}", - "setUpLikeSe4ReplaceRulesAddedXY": "Eklenen değiştirme kuralları: {0} ({1} yeni kategori içinde)", - "setUpLikeSe4ThemeSet": "Tema, araç çubuğu simgeleri ve ses dalgası Subtitle Edit 4 görünümüne ayarlandı." + "setUpLikeSe4Question": "Bu işlem Subtitle Edit 4 kısayollarını ve değiştirme kurallarını içe aktaracak; Subtitle Edit 4 temasını, araç çubuğunu ve ses dalgası görünümünü uygulayacaktır.\n\nDevam etmek istiyor musunuz?", + "setUpLikeSe4ImportedSettingsX": "Subtitle Edit 4 sürümünden içe aktarılan ayarlar:\n{0}", + "setUpLikeSe4NoSettingsXmlFound": "Subtitle Edit 4 Settings.xml dosyası bulunamadı - Subtitle Edit 4 varsayılan değerleri uygulandı.", + "setUpLikeSe4ShortcutsAddedX": "Eklenen/güncellenen kısayollar: {0}", + "setUpLikeSe4ShortcutsSkippedX": "Atlanan kısayollar (eşleşme yok): {0}", + "setUpLikeSe4ReplaceRulesAddedXY": "Eklenen değiştirme kuralları: {0} ({1} yeni kategori içinde)", + "setUpLikeSe4ThemeSet": "Tema, araç çubuğu simgeleri ve ses dalgası Subtitle Edit 4 görünümüne ayarlandı." }, "file": { "ebuSaveOptions": { @@ -1233,19 +1316,19 @@ "teletext": "Teletekst", "useBox": "Metin etrafında kutu kullan", "doubleHeight": "Metin için çift yükseklik kullan", - "videoPreview": "Video ön izleme", - "previewFont": "Özel yazı tipi", - "previewFontDefault": "(video ön izleme yazı tipini kullan)", - "previewFontSample": "Pijamalı hasta yağız şoföre çabucak güvendi - 0123456789", + "videoPreview": "Video ön izleme", + "previewFont": "Özel yazı tipi", + "previewFontDefault": "(video ön izleme yazı tipini kullan)", + "previewFontSample": "Pijamalı hasta yağız şoföre çabucak güvendi - 0123456789", "errors": "Hatalar", "errorsX": "Hatalar: {0}", "maxLengthError": "Satır {0}, maksimum uzunluğu ({1}) {2} karakter aşıyor: {3}", - "maxLengthErrorTeletextColored": "Satır {0}-{1}: Çift yükseklikteki renkli metin için en fazla karakter sayısı 36 ({2} değil) olmalıdır", + "maxLengthErrorTeletextColored": "Satır {0}-{1}: Çift yükseklikteki renkli metin için en fazla karakter sayısı 36 ({2} değil) olmalıdır", "maxLengthErrorTeletextWhite": "Satır {0}-{1}: Çift yükseklikteki beyaz metin için en fazla karakter sayısı 37 ({2} değil) olmalıdır", "maxLengthErrorTeletextSingleHeight": "Satır {0}: Tek yükseklikteki beyaz metin için en fazla karakter sayısı 38 ({1} değil) olmalıdır", "discSequenceNumber": "Disk sıra numarası" }, - "import": { + "import": { "importTimeCodes": "Zaman kodlarını içe aktar...", "plainTextDotDotDot": "Düz metin...", "titleImportPlainText": "Düz metin içe aktar", @@ -1264,7 +1347,7 @@ "formattingDotDotDot": "Biçimlendiriliyor...", "imageBasedSubtitleForEditDotDotDot": "Düzenleme için resim tabanlı alt yazı...", "imageBasedSubtitleForOcrDotDotDot": "OCR için resim tabanlı alt yazı...", - "dvdSubtitlesDotDotDot": "DVD'den alt yazılar (IFO/VOB)...", + "dvdSubtitlesDotDotDot": "DVD'den alt yazılar (IFO/VOB)...", "titleImportDvd": "DVD'den alt yazıları içe aktar", "dvdIfoFile": "IFO dosyası", "dvdVobFiles": "VOB dosyaları", @@ -1289,21 +1372,22 @@ "mergeShortLines": "Kısa satırları birleştir", "fixed": "Sabit", "numberOfSubtitlesX": "Alt yazı sayısı: {0}", - "numberOfSubtitlesXForcedY": "Alt yazı sayısı: {0} ({1} zorunlu)", + "numberOfSubtitlesXForcedY": "Alt yazı sayısı: {0} ({1} zorunlu)", "gapMs": "Boşluk (ms)", "useFixedDuration": "Sabit süre kullan", "fixedDurationMs": "Sabit süre (ms)", - "alignViaSpeechToText": "Zaman kodlarını \"Sesten metne\" ile hizala...", + "alignViaSpeechToText": "Zaman kodlarını \"Sesten metne\" ile hizala...", "alignViaForcedAligner": "Zaman kodlarını zorunlu hizalayıcı ile hizala...", "forcedAlignerProgress": "Hizalanıyor... pencere {0} / {1}, {2} / {3} satır", "forcedAlignerSetupTitle": "Zaman kodlarını zorunlu hizalayıcı ile hizala", "forcedAlignerSetupIntro": "Zaman kodlarını zorunlu hizalayıcı, önceden deşifre etmeden elinizdeki alt yazı metnini doğrudan sesle eşleştirir. Uzun videolar parçalar hâlinde hizalandığı için her uzunluktaki dosyada çalışır.", - "forcedAlignerEndsFromSpeech": "Bitiş zamanlarını ayrıştırılmış konuşmaya göre ayarla (yavaş)", + "forcedAlignerEndsFromSpeech": "Bitiş zamanlarını ayrıştırılmış konuşmaya göre ayarla (yavaş)", "forcedAlignerEndsFromSpeechHint": "Zorlamalı hizalayıcı bir satırın nerede başladığını bulur, nerede bittiğini değil; bu nedenle bitiş zamanları normalde okuma süresinden alınır. Bu seçenek açık olduğunda, ses dosyasındaki müzik ve ses efektleri önceden temizlenir ve her satır konuşmanın sessizleştiği yerde biter. Ekran kartı (GPU) ile yaklaşık video süresi kadar sürer - GPU olmadan ise çok daha uzun zaman alır.", "forcedAlignerIsolatingSpeech": "Konuşma ayrıştırılıyor... {0}", "forcedAlignerIsolatingSpeechFailed": "Konuşma ayrıştırılamadı - bitiş zamanları bunun yerine okuma süresine göre ayarlandı.", "forcedAlignerModel": "Hizalayıcı modeli", - "forcedAlignerDownloadEngine": "Motoru indir / güncelle..." + "forcedAlignerDownloadEngine": "Motoru indir / güncelle...", + "forcedAlignerEstimatedXOfY": "{1} satırdan {0} tanesi hizalanamadı ve okuma süresine göre yerleştirildi - zaman kodları yalnızca tahminidir. Metin büyük olasılıkla videoda konuşulandan daha uzun." }, "export": { "exportImagesProfiles": "Resim dışa aktarma profilleri", @@ -1313,9 +1397,9 @@ "paddingLeftRight": "Sol/sağ iç boşluk", "paddingTopBottom": "Üst/alt iç boşluk", "previewTitle": "Ön izleme - mevcut boyut: {0}x{1}, hedef boyut: {2}x{3}, yakınlaştırma: %{4}", - "titleExportDvdSup": "DVD sup alt yazısını dışa aktar (MuxMan/Scenarist)", + "titleExportDvdSup": "DVD sup alt yazısını dışa aktar (MuxMan/Scenarist)", "titleExportVobSub": "VobSub (sub/idx)", - "titleExportImscImage": "IMSC 1.1 görüntü profili", + "titleExportImscImage": "IMSC 1.1 görüntü profili", "titleExportDostPng": "DOST/png", "titleExportFcpImage": "Final Cut Pro + görüntü", "titleExportWebVttThumbnails": "WebVTT png", @@ -1325,9 +1409,9 @@ "exportCavenaTranslator": "Çevirmen", "exportCavenaComment": "Yorum", "exportCavenaStartOfProgramme": "Program başlangıcı", - "titleExportDvbTeletext": "DVB teletext (Manzanita)", + "titleExportDvbTeletext": "DVB teletext (Manzanita)", "exportDvbTeletextPageNumber": "Teletext sayfa numarası", - "exportDvbTeletextSubtitleType": "Alt yazı türü", + "exportDvbTeletextSubtitleType": "Alt yazı türü", "exportDvbTeletextSubtitleTypeNormal": "Normal", "exportDvbTeletextSubtitleTypeHearingImpaired": "İşitme engelli", "customTextFormatsDotDotDot": "_Özel metin formatları...", @@ -1350,9 +1434,9 @@ "titleExportDCinemaInteropPng": "D-Cinema interop/png", "titleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", "imageBasedSubtitleSaved": "Resim tabanlı alt yazı kaydedildi", - "fullFrameImage": "Tam kare görsel", + "fullFrameImage": "Tam kare görsel", "fullFrameImageHint": "Her bir görseli, alt yazı kendi konumunda olacak şekilde video karesi boyutunda yap", - "stereo3D": "3D", + "stereo3D": "3D", "stereo3DHint": "3D video için: Alt yazıyı kare alanının her iki göz yarısına ayrı ayrı çizer", "halfSideBySide": "Yarım yan yana (Half SBS)", "halfTopBottom": "Yarım üst/alt (Half TAB)", @@ -1364,7 +1448,7 @@ "unableToLoadPlane3DX": "3D-Düzlem yüklenemedi: {0}", "plane3DXDepthYToZ": "{0} (derinlik {1} - {2})", "plane3DXNoDepth": "{0} (derinlik değeri yok)", - "textEffect": "Metin efekti", + "textEffect": "Metin efekti", "textEffectSettingsTitle": "Metin efekti ayarları", "textEffectPreset": "Ön ayar", "textEffectStrength": "Şiddet", @@ -1463,15 +1547,15 @@ }, "restoreAutoBackup": { "title": "Otomatik yedekten geri yükle", - "xBackups": "{0} yedek", + "xBackups": "{0} yedek", "openAutoBackupFolder": "Otomatik yedek klasörünü aç", "restoreAutoBackupFile": "Otomatik yedek dosyasını geri yükle", - "restoreXFromY": "\"{0}\" dosyasını {1} tarihinden geri yüklemek ister misiniz?", + "restoreXFromY": "\"{0}\" dosyasını {1} tarihinden geri yüklemek ister misiniz?", "deleteAllSubtitleBackups": "Tüm alt yazı yedek dosyalarını silmek istiyor musunuz?", "deleteAll": "Tümünü sil", - "subtitles": "Alt yazılar", + "subtitles": "Alt yazılar", "settingsBackupInfo": "Settings.json dosyası Subtitle Edit başladığında, en fazla {0} günde bir ve yalnızca ayarlar değişmişse yedeklenir. En yeni {1} yedek saklanır.", - "settingsBackupInfoEveryStart": "Settings.json dosyası ayarlar değişmişse Subtitle Edit her başladığında yedeklenir. En yeni {0} yedek saklanır.", + "settingsBackupInfoEveryStart": "Settings.json dosyası ayarlar değişmişse Subtitle Edit her başladığında yedeklenir. En yeni {0} yedek saklanır.", "settingsBackupOff": "Otomatik ayar yedekleme kapalı (Seçenekler → Ayarlar → Dosya).", "lastSettingsBackupX": "Son yedekleme: {0}", "noSettingsBackupsYet": "Henüz ayar yedeği yok", @@ -1482,7 +1566,7 @@ "restoreSettingsFromX": "Mevcut ayarlarınızı {0} tarihli yedekle değiştirmek istiyor musunuz?\n\nÖncelikle mevcut ayarlarınız yedeklenecektir. Bazı değişiklikler yalnızca Subtitle Edit yeniden başlatıldıktan sonra geçerli olur.", "settingsRestored": "Ayarlar geri yüklendi. Tüm değişikliklerin geçerli olması için lütfen Subtitle Edit yazılımını yeniden başlatın.", "settingsRestoreFailed": "Ayarlar geri yüklenemedi: {0}", - "settingsBackupNotValid": "Yedek geçerli bir ayar dosyası olmadığından mevcut ayarlarınız korundu", + "settingsBackupNotValid": "Yedek geçerli bir ayar dosyası olmadığından mevcut ayarlarınız korundu", "deleteAllSettingsBackups": "Tüm ayar yedekleme dosyalarını silmek istiyor musunuz?" }, "propertiesDCinema": { @@ -1505,12 +1589,12 @@ "topBottomMargin": "Üst/alt kenar boşluğu", "fadeUpTime": "Belirme süresi", "fadeDownTime": "Kaybolma süresi", - "zPosition": "Z konumu", + "zPosition": "Z konumu", "zPositionHelp": "Pozitif sayılar metni uzaklaştırır, negatif sayılar metni yakınlaştırır, Z konumu sıfır ise metin 2B olur" }, - "webVtt": { + "webVtt": { "setStylesForSelectedLinesTitle": "Seçilen satırlar için WebVTT stillerini ayarla", - "voice": "Ses", + "voice": "Ses", "showVoiceColumn": "\"Ses\" sütununu göster", "voices": "Sesler", "newVoiceDotDotDot": "Yeni ses...", @@ -1522,7 +1606,7 @@ "openStyleFileTitle": "Stillerin içe aktarılacağı WebVTT dosyasını aç", "noStylesToImport": "Seçilen dosyada stil bulunamadı", "duplicateStyleNamesX": "Yinelenen stil adları: {0}", - "Settings": "Hizalama için satır ayarları", + "cueSettings": "Hizalama için satır ayarları", "cueSettingsHint": "Bir satır hizalandığında yazılan satır ayarları, örn. üst-orta için \"line:20%\"", "useXTimeStamp": "X-TIMESTAMP-MAP üst bilgi değerini kullan", "mergeLines": "Yükleme sırasında aynı metne sahip satırları birleştir", @@ -1540,30 +1624,78 @@ "compareTextOrTimeDifference": "Metin/zaman farkı", "compareNumberDifference": "Numara farkı", "ignoreWhitespace": "Boşlukları yok say", - "ignoreWhitespaceHint": "Yalnızca boşluk, sekme veya satır sonu bakımından farklılık gösteren satırlar farklı kabul edilmez", + "ignoreWhitespaceHint": "Yalnızca boşluk, sekme veya satır sonu bakımından farklılık gösteren satırlar farklı kabul edilmez", "ignoreFormatting": "Biçimlendirmeyi yok say", - "ignoreFormattingHint": "Yalnızca veya {\\an8} gibi biçimlendirme etiketleri bakımından farklılık gösteren satırlar farklı kabul edilmez", + "ignoreFormattingHint": "Yalnızca veya {\\an8} gibi biçimlendirme etiketleri bakımından farklılık gösteren satırlar farklı kabul edilmez", "showOnlyDifferencesInText": "Sadece metindeki farklar", + "ignoreNumbering": "Numaralandırmayı yok say", + "ignoreNumberingHint": "Yalnızca numarası farklı olan satırlar farklı kabul edilmez", + "ignoreTimeDifferenceMs": "Zaman toleransı (ms)", + "ignoreTimeDifferenceMsHint": "Başlangıç ve bitiş zamanları bu kadar milisaniye veya daha az farklı olan satırlar farklı kabul edilmez", + "compareDifferences": "Farklar", + "compareTextDifferences": "Metin farkları", + "compareCurrent": "Mevcut", + "compareReference": "Referans", + "compareEditable": "Düzenlenebilir", + "compareEditableHint": "Burada yapılan değişiklikler Uygula seçeneğine tıklandığında alt yazıya yansıtılır", + "compareReadOnly": "Salt okunur", + "compareTakeFromReference": "Metni ve zamanlamayı referanstan al", + "compareInsertFromReference": "Bu satırı mevcut alt yazıya ekle", + "compareDeleteFromCurrent": "Bu satırı mevcut alt yazıdan sil", + "compareTakeText": "Metni al", + "compareTakeTiming": "Zamanlamayı al", + "compareEditLine": "Satırı düzenle", + "compareEditHint": "Kaydetmek için Ctrl+Enter, iptal etmek için Esc", + "compareEdited": "Düzenlendi", + "compareOnePendingChange": "1 bekleyen değişiklik", + "compareXPendingChanges": "{0} bekleyen değişiklik", + "compareDiscardXChanges": "Karşılaştır aracında yapılan {0} değişiklik gözden çıkarılsın mı?", + "compareXChangesApplied": "Karşılaştır: {0} değişiklik uygulandı", + "compareChangeTextX": "#{0} referanstan metin", + "compareChangeTimingX": "#{0} referanstan zamanlama", + "compareChangeTextAndTimingX": "#{0} referanstan metin ve zamanlama", + "compareChangeEditedX": "#{0} düzenlendi", + "compareChangeInsertedX": "#{0} eklendi", + "compareChangeDeletedX": "#{0} silindi", + "compareSyncPoint": "Eşitleme noktası", + "compareSyncPointHint": "Eşitleme noktası - bu iki satır her zaman bir çift olarak gösterilir; üstteki ve alttaki satırlar kendi içlerinde hizalanır", + "compareSyncPickCurrent": "Eşitleme noktası: bu mevcut satırı kullan", + "compareSyncPickReference": "Eşitleme noktası: bu referans satırı kullan", + "compareSyncRemove": "Eşitleme noktasını kaldır", + "compareClearXSyncPoints": "Eşitleme noktalarını temizle ({0})", + "compareSyncCurrentPickedX": "Mevcut #{0} eşitleme noktası olarak seçildi - eşleşen referans satırı seçin ve Eşitle seçeneğine tıklayın", + "compareSyncReferencePickedX": "Referans #{0} eşitleme noktası olarak seçildi - eşleşen mevcut satırı seçin ve Eşitle seçeneğine tıklayın", + "compareSyncWithCurrentX": "Mevcut #{0} ile eşitle", + "compareSyncWithReferenceX": "Referans #{0} ile eşitle", + "compareSyncApply": "Eşitle", + "compareSyncPointSetXY": "Eşitleme noktası ayarlandı: mevcut #{0} ve referans #{1} artık bir çift olarak gösteriliyor", + "compareSyncAlreadyPairedXY": "Mevcut #{0} ve referans #{1} zaten aynı başlangıçla bir çift olarak gösteriliyor - eşitlenecek bir şey yok", + "compareSyncPointShiftedXYZW": "Eşitleme noktası ayarlandı: mevcut #{0}-#{1}, referans #{3} ile başlayacak şekilde {2} kaydırıldı", + "compareChangeSyncShiftXYZ": "#{0}-#{1} {2} kaydırıldı (eşitleme noktası)", + "compareTimingDeltaHint": "Referansın mevcut satırdan ne kadar sonra (+) veya daha önce (−) başlayıp bittiğini gösterir", "loadXFromFile": "\"{0}\" dosyasından yükle", + "compareLoadSavedFile": "Kaydedilen dosyayı yükle", "saveCompareHtmlTitle": "Karşılaştırma HTML dosyasını kaydet", "pickMatroskaTrackX": "Matroska izi seç - {0}", - "pickTransportStreamTrackX": "Taşıma akışı izini seç - {0}", - "chapters": "Bölümler", + "pickTransportStreamTrackX": "Taşıma akışı izini seç - {0}", + "chapters": "Bölümler", "dvdVobFilesMissingX": "VOB dosyaları eksik (%{0} bulundu)", - "pickMp4TrackX": "MP4 izi seç - {0}", + "pickMp4TrackX": "MP4 izi seç - {0}", + "pickMxfTrackX": "MXF izini seç - {0}", + "pickMpegTrackX": "MPEG izini seç - {0}", "rosettaProperties": "Timed Text Rosetta IMSC özellikleri", "rosettaFontSize": "Yazı tipi boyutu (satır yüksekliği)", - "propertyTimeBase": "Zaman tabanı", - "propertyFrameRateMultiplier": "Kare hızı çarpanı", - "propertyDropMode": "Kare atlama modu", - "propertyDefaultStyle": "Varsayılan stil", - "propertyDefaultRegion": "Varsayılan bölge", - "propertyStyleAttributeName": "Stil özniteliği adı", - "propertyTimeCodeFormat": "Zaman kodu biçimi", - "propertyTopOrigin": "Üst başlangıç noktası", - "propertyTopExtent": "Üst genişleme alanı", - "propertyBottomOrigin": "Alt başlangıç noktası", - "propertyBottomExtent": "Alt genişleme alanı", + "propertyTimeBase": "Zaman tabanı", + "propertyFrameRateMultiplier": "Kare hızı çarpanı", + "propertyDropMode": "Kare atlama modu", + "propertyDefaultStyle": "Varsayılan stil", + "propertyDefaultRegion": "Varsayılan bölge", + "propertyStyleAttributeName": "Stil özniteliği adı", + "propertyTimeCodeFormat": "Zaman kodu biçimi", + "propertyTopOrigin": "Üst başlangıç noktası", + "propertyTopExtent": "Üst genişleme alanı", + "propertyBottomOrigin": "Alt başlangıç noktası", + "propertyBottomExtent": "Alt genişleme alanı", "xProperties": "{0} özellikleri" }, "edit": { @@ -1589,10 +1721,10 @@ "exactlyTwoLines": "Tam olarak iki satır", "moreThanTwoLines": "İkiden fazla satır", "bookmarked": "Yer imli", - "forced": "Zorunlu", + "forced": "Zorunlu", "bookmarkContains": "Yer imi içeriği", "blankLines": "Boş satırlar", - "hearingImpaired": "İşitme engelli (SDH)", + "hearingImpaired": "İşitme engelli (SDH)", "hearingImpairedBrackets": "Köşeli parantezler [...]", "hearingImpairedCurlyBrackets": "Süslü parantezler {...}", "hearingImpairedParentheses": "Parantezler (...)", @@ -1615,7 +1747,7 @@ "newCategory": "Yeni kategori", "categoryName": "Kategori adı", "exportReplaceRules": "Kuralları dışa aktar", - "importReplaceRules": "Kuralları içe aktar", + "importReplaceRules": "Kuralları içe aktar", "noCategoriesSelected": "Hiçbir kural kategorisi seçilmedi", "appliedRules": "Uygulanan kurallar", "findRule": "Kural bul", @@ -1624,8 +1756,9 @@ "deleteRuleConfirm": "'{0}' kuralı silinsin mi?", "findWhat": "Aranan", "descriptionOptional": "Açıklama (isteğe bağlı)", - "invalidRegularExpressionX": "Geçersiz düzenli ifade: {0}", - "regularExpressionTooSlowX": "Regular expression gave up after {0} seconds - the rule is skipped, try a simpler pattern" + "invalidRegularExpressionX": "Geçersiz düzenli ifade: {0}", + "regularExpressionTooSlowX": "Regular expression gave up after {0} seconds - the rule is skipped, try a simpler pattern", + "moveToCategory": "Kategoriye taşı" }, "find": { "searchTextWatermark": "Aranacak metin...", @@ -1635,14 +1768,14 @@ "replaceAndFindNext": "_Değiştir ve sonrakini bul", "replaceAll": "_Tümünü değiştir", "replaceTextWatermark": "Şununla değiştir...", - "replaceIn": "Şurada değiştir/ara", + "replaceIn": "Şurada değiştir/ara", "replaceInTextAndOriginal": "Metin ve orijinal metin", "replaceInTextOnly": "Yalnızca metin", "replaceInOriginalOnly": "Yalnızca orijinal metin", - "replacedOneOccurrence": "1 eşleşme değiştirildi", + "replacedOneOccurrence": "1 eşleşme değiştirildi", "replacedXOccurrences": "{0} eşleşme değiştirildi" }, - "regularExpressionContextMenu": { + "regularExpressionContextMenu": { "wordBoundary": "Kelime sınırı (\\b)", "nonWordBoundary": "Kelime sınırı olmayan (\\B)", "newLine": "Yeni satır (\\r\\n)", @@ -1659,7 +1792,7 @@ }, "showHistory": "Geri alma geçmişi", "restoreSelected": "Seçilenleri geri yükle", - "noSubtitleSelected": "Hiçbir alt yazı seçilmedi", + "noSubtitleSelected": "Hiçbir alt yazı seçilmedi", "pleaseSelectExactlyOneSubtitle": "Lütfen yalnızca bir alt yazı seçin." }, "sourceView": { @@ -1668,11 +1801,11 @@ "xLinesYSubtitles": "{0} satır, {1} alt yazı", "xLinesYSubtitlesZErrors": "{0} satır, {1} alt yazı, {2} hata", "couldNotParseAsX": "{0} olarak ayrıştırılamadı", - "readAsXUseAsY": "Kaynak {1} olarak okunamadı fakat {0} olarak okunabildi.\nSatırlar kullanılsın ve {1} olarak kaydedilmeye devam edilsin mi?", + "readAsXUseAsY": "Kaynak {1} olarak okunamadı fakat {0} olarak okunabildi.\nSatırlar kullanılsın ve {1} olarak kaydedilmeye devam edilsin mi?", "selectedXCharactersYLines": "Seçilen: {1} satırda {0} karakter", "replacedXOccurrences": "{0} eşleşme değiştirildi", "invalidRegularExpression": "Geçersiz düzenli ifade", - "regularExpressionTooSlowX": "Düzenli ifade {0} saniye sonra zaman aşımına uğradı - daha basit bir desen deneyin", + "regularExpressionTooSlowX": "Düzenli ifade {0} saniye sonra zaman aşımına uğradı - daha basit bir desen deneyin", "moveLineUp": "Satırı yukarı taşı", "moveLineDown": "Satırı aşağı taşı", "duplicateLine": "Satırı çoğalt", @@ -1680,32 +1813,47 @@ "closeSearch": "Aramayı kapat" }, "tools": { - "aiReview": { - "title": "Yapay zekâ incelemesi", - "review": "İncele", - "editPrompt": "Komut istemini düzenle...", - "editPromptTitle": "İnceleme komut istemini düzenle", - "promptInfo": "Modele gönderilen talimatlar - {language} ifadesi alt yazı dili ile değiştirilir.", - "protocolInfo": "Subtitle Edit, komut istemine katı bir JSON protokolü ekler: Satırlar numaralandırılmış JSON olarak gönderilir ve model yalnızca değiştirilen satırları içeren geçerli bir JSON ile yanıt vermelidir. Protokolü bozan yanıtlar yeniden denenir, ardından atlanır.", - "resetToDefault": "Varsayılana sıfırla", - "applyXFixes": "{0} düzeltmeyi uygula", - "xSuggestionsYSelected": "{0} öneri - {1} seçildi", - "reviewingLineXOfY": "Satır {0} / {1} inceleniyor...", - "reviewDone": "İnceleme tamamlandı - {1} satırda {0} öneri", - "noIssuesFound": "Hiçbir sorun bulunamadı", - "categorySpelling": "Yazım", - "categoryGrammar": "Dil Bilgisi", - "categoryPunctuation": "Noktalama", - "categoryCasing": "Büyük/Küçük Harf", - "categoryOther": "Diğer", - "xNeedACloserLook": "{0} önerinin daha yakından incelenmesi gerekiyor", - "lineX": "Satır {0}", - "linesXToY": "Satır {0}-{1}", - "largeChangeWarning": "Büyük değişiklik - yeniden yazılmış gibi görünüyor, dikkatlice inceleyin", - "mismatchWarning": "Orijinaline benzemiyor - farklı bir satıra ait olabilir", - "engineError": "Yapay zekâ motoruna ulaşılamadı: {0}", - "playCurrentLineHint": "Seçili satırı video oynatıcıda oynatır ve sonunda duraklatır (ayrıca bir satıra çift tıklayın)", - "editAfterHint": "Uygulamadan önce düzeltmeyi düzenlemek için seçili satırın metnine tıklayın (Enter kaydeder, Escape iptal eder)" + "aiReview": { + "title": "Yapay zekâ incelemesi", + "review": "İncele", + "editPrompt": "Komut istemini düzenle...", + "editPromptTitle": "İnceleme komut istemini düzenle", + "promptInfo": "Modele gönderilen talimatlar - {language} ifadesi alt yazı dili ile değiştirilir.", + "protocolInfo": "Subtitle Edit, komut istemine katı bir JSON protokolü ekler: Satırlar numaralandırılmış JSON olarak gönderilir ve model yalnızca değiştirilen satırları içeren geçerli bir JSON ile yanıt vermelidir. Protokolü bozan yanıtlar yeniden denenir, ardından atlanır.", + "resetToDefault": "Varsayılana sıfırla", + "applyXFixes": "{0} düzeltmeyi uygula", + "xSuggestionsYSelected": "{0} öneri - {1} seçildi", + "reviewingLineXOfY": "Satır {0} / {1} inceleniyor...", + "reviewDone": "İnceleme tamamlandı - {1} satırda {0} öneri", + "noIssuesFound": "Hiçbir sorun bulunamadı", + "categorySpelling": "Yazım", + "categoryGrammar": "Dil Bilgisi", + "categoryPunctuation": "Noktalama", + "categoryCasing": "Büyük/Küçük Harf", + "categoryOther": "Diğer", + "xNeedACloserLook": "{0} önerinin daha yakından incelenmesi gerekiyor", + "lineX": "Satır {0}", + "linesXToY": "Satır {0}-{1}", + "largeChangeWarning": "Büyük değişiklik - yeniden yazılmış gibi görünüyor, dikkatlice inceleyin", + "mismatchWarning": "Orijinaline benzemiyor - farklı bir satıra ait olabilir", + "engineError": "Yapay zekâ motoruna ulaşılamadı: {0}", + "playCurrentLineHint": "Seçili satırı video oynatıcıda oynatır ve sonunda duraklatır (ayrıca bir satıra çift tıklayın)", + "editAfterHint": "Uygulamadan önce düzeltmeyi düzenlemek için seçili satırın metnine tıklayın (Enter kaydeder, Escape iptal eder)", + "template": "Şablon", + "templatePlaceholder": "Komut isteminin yerini alacak bir şablon seçin", + "templateStandard": "Standart düzelti", + "templateSpeechToText": "Sesten metne dönüştürme temizliği", + "templateMachineTranslation": "Makine çevirisi düzeltme", + "templateSdh": "SDH / işitme engelli", + "referenceContext": "Referans bağlamı", + "referenceContextInfo": "İsteğe bağlı. İsimler, karakterler, terimler sözlüğü, özet veya biçem notları - model bunu isimler ve terimler için yetkili kaynak kabul eder. Her toplu işlemle birlikte gönderilir.", + "referenceContextPlaceholder": "İsimler: Kaito, Mei Teyze, Dr. Hollis\nTerimler: Shinkansen, ışınlanma çekirdeği\nÖzet: Kaito, kayıp babasını bulmak için Tokyo'ya seyahat eder.", + "generateContext": "Yapay zeka ile oluştur", + "generateContextHint": "Seçilen yapay zeka motorunun alt yazıyı okuyarak isimleri, terimleri ve bir özeti taslak haline getirmesine izin verin - kullanmadan önce sonucu kontrol edin", + "generatingContextPartXOfY": "Bölüm {0} / {1} okunuyor...", + "generatingContextSynopsis": "Özet yazılıyor...", + "replaceContextQuestion": "Mevcut referans bağlamının yeri değiştirilsin mi?", + "noContextGenerated": "Yapay zeka motoru kullanılabilir bir referans bilgisi döndürmedi." }, "aiAssistant": { "title": "Yapay zekâ asistanı", @@ -1720,14 +1868,14 @@ "result": "Öneri", "apply": "Satıra uygula", "hint": "Bu satır için yapay zekâ asistanı", - "showReasoning": "Modelin akıl yürütmesini göster" + "showReasoning": "Modelin akıl yürütmesini göster" }, "fixCommonErrors": { "back": "< &Geri", "next": "&İleri >", "fixes": "Düzeltmeler", "removedEmptyLine": "Boş satırı kaldır", - "ruleDetailsDotDotDot": "Kural ayrıntıları...", + "ruleDetailsDotDotDot": "Kural ayrıntıları...", "showOnlyThisRule": "Yalnızca bu kuralın düzeltmelerini göster", "appliedRulesForLineX": "{0}. satır için uygulanan kural", "ruleX": "Kural: {0}", @@ -1739,7 +1887,7 @@ "fixShortDisplayTimes": "Kısa görüntüleme zamanlarını düzelt", "fixLongDisplayTimes": "Uzun görüntüleme zamanlarını düzelt", "fixShortGaps": "Kısa boşlukları düzelt", - "fixShortGap": "Kısa boşluğu düzelt", + "fixShortGap": "Kısa boşluğu düzelt", "fixInvalidItalicTags": "Geçersiz italik etiketlerini düzelt", "removeUnneededSpaces": "Gereksiz boşlukları kaldır", "removeUnneededPeriods": "Gereksiz noktaları kaldır", @@ -1751,6 +1899,7 @@ "removeLineBreaksPixelWidth": "Tek satıra sığabilecek alt yazıları birleştir (piksel genişliği)", "fixUppercaseIInsideLowercaseWords": "Küçük harfli kelimelerin içindeki büyük 'I' harflerini düzelt (OCR hatası)", "fixDoubleApostrophes": "Çift kesme işaretlerini ('') tek tırnağa (\") dönüştür", + "fixMisreadQuotes": "Çift tırnak olarak yanlış okunan kesme işaretlerini düzelt (OCR, İngilizce)", "addPeriods": "Sonraki satırın büyük harfle başladığı satırların sonuna nokta ekle", "startWithUppercaseLetterAfterParagraph": "Paragraftan sonra büyük harfle başla", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Paragraf içindeki noktadan sonra büyük harfle başla", @@ -1773,6 +1922,7 @@ "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Merhaba
dünya! -> Merhaba dünya!", "fixDoubleApostrophesExample": "''Çift tekli tırnak var'' -> \"Tek bir çift tırnak var\"", + "fixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "addPeriodsExample": "Merhaba dünya -> Merhaba dünya.", "startWithUppercaseLetterAfterParagraphExample": "p1: Merhaba! || p2: merhaba! -> p1: Merhaba! || p2: Merhaba!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Nasılsın? iyi misin? -> Nasılsın? İyi misin?", @@ -1783,14 +1933,14 @@ "fix3PlusLines": "İkiden fazla satırı olan alt yazıları düzelt", "analysing": "Analiz ediliyor...", "nothingToFix": "Düzeltilecek bir şey yok :)", - "log": "Günlük", + "log": "Günlük", "nothingFixableBut": "Otomatik olarak hiçbir şey düzeltilemedi. Alt yazı hatalar içeriyor - ayrıntılar için günlüğe bakın", "xFixedBut": "{0} sorun düzeltildi ancak alt yazı hâlâ hatalar içeriyor - ayrıntılar için günlüğe bakın", "xCouldBeFixedBut": "{0} sorun düzeltilebilir ancak alt yazı yine de hatalar içerecektir - ayrıntılar için günlüğe bakın", "numberOfImportantLogMessages": "{0} önemli günlük mesajı!", "fixedOkXY": "Düzeltildi ve Tamam - '{0}': {1}", "xFixesApplied": "Uygulanan düzeltmeler: {0}", - "xFixesYSelected": "{0} düzeltme - {1} seçildi", + "xFixesYSelected": "{0} düzeltme - {1} seçildi", "fixFirstLetterToUppercaseAfterParagraph": "Paragraftan sonraki ilk harfi büyük harf yap", "mergeShortLine": "Kısa satırı birleştir (tek cümle)", "mergeShortLineAll": "Kısa satırı birleştir (diyaloglar hariç tümü)", @@ -1855,14 +2005,16 @@ "note": "Not: Görüntüleme süresi sonraki metnin başlangıç zamanıyla çakışmayacaktır", "fixed": "Sabit", "extendOnly": "Sadece uzat", - "recalculateRequiresOcrNote": "Yeniden hesaplama kullanılamıyor — bir veya daha fazla alt yazıda OCR metni yok. Önce OCR işlemini çalıştırın." + "recalculateRequiresOcrNote": "Yeniden hesaplama kullanılamıyor — bir veya daha fazla alt yazıda OCR metni yok. Önce OCR işlemini çalıştırın." }, "applyDurationLimits": { "title": "Süre limitlerini uygula", "fixMinDurationMs": "Minimum süreyi düzelt (ms)", "doNotGoPastShotChange": "Sahne değişimini geçme", "fixMaxDurationMs": "Maksimum süreyi düzelt (ms)", - "minimumDurationMilliseconds": "En az süre (milisaniye):", + "fixMinDurationFrames": "En az süreyi düzelt (kare)", + "fixMaxDurationFrames": "En çok süreyi düzelt (kare)", + "minimumDurationMilliseconds": "En az süre (milisaniye):", "maximumDurationMilliseconds": "En çok süre (milisaniye):", "maxDurationShouldBeHigherThanMinDuration": "Maksimum süre minimum süreden daha yüksek olmalıdır", "changedDurationFromXToYCommentZ": "Süre {0} değerinden {1} değerine değiştirildi {2}", @@ -1899,11 +2051,11 @@ "previousChange": "Önceki değişiklik", "nextChange": "Sonraki değişiklik", "editProfile": "Profili düzenle...", - "batchSnapToShotChanges": "İşaretçileri sahne değişimlerine yapıştır (varsa)", + "batchSnapToShotChanges": "İşaretçileri sahne değişimlerine yapıştır (varsa)", "batchFrameRateFromVideo": "Alt yazı dosyasıyla aynı ada sahip video dosyasının kare hızını kullan", "batchFrameRateFixed": "Sabit kare hızı kullan", "batchInfo": "Sahne değişimleri, bulunması durumunda alt yazı dosyasıyla aynı ada sahip video dosyasından okunur.", - "useExactTimeCodes": "Videodan tam zaman kodlarını kullan", + "useExactTimeCodes": "Videodan tam zaman kodlarını kullan", "extractTimeCodes": "Zaman kodlarını çıkar", "extractingTimeCodes": "Zaman kodları çıkarılıyor...", "noTimeCodesLoaded": "Zaman kodu yüklenmedi", @@ -1911,7 +2063,7 @@ "timeCodesExtractFailed": "Videodan zaman kodları okunamadı", "timeCodesHint": "Sabit bir kare hızı varsaymak yerine işaretçileri videonun gerçek kare zamanlarına hizalayın. Bütün videonun bir kez okunmasını gerektirir; sonuç önbelleğe alınır." }, - "improveTimeCodes": { + "improveTimeCodes": { "title": "Zaman kodlarını iyileştir (zorlamalı hizalama)", "aligner": "Hizalayıcı", "alignerHint": "Sesteki her bir satırı dinleyen model. Alt yazının dili için en uygun seçenekler en başta listelenir.", @@ -1923,6 +2075,20 @@ "isolateSpeechHint": "Hizalamadan önce müzik ve ses efektlerini temizler, böylece hizalayıcı yalnızca diyalogları duyar. Yüksek sesli müzik veya aksiyon üzerindeki satırlarda yardımcı olur, ancak ekran kartı (GPU) ile yaklaşık ses süresi kadar sürer - GPU olmadan ise çok daha uzun zaman alır.", "isolatingSpeech": "Konuşma ayrıştırılıyor... (bu işlem biraz zaman alır)", "isolateSpeechFailed": "Konuşma ayrıştırılamadı - bunun yerine orijinal sese göre hizalandı.", + "checkWithSpeechToText": "Sesten metne dönüştürme ile denetle", + "checkWithSpeechToTextHint": "Sesi de yazıya döker ve her hareketi sözcüklerin gerçekten duyulduğu konuma göre denetler. Konuşmanın doğruladığı büyük hareketler sizin için işaretlenir, bir satırın duyulduğu yerden uzaklaşan hareketler ise denetlemeniz için işaretlenmeden bırakılır. Ayrıca her satırın ne kadarının duyulduğunu gösterir; düşük bir oran, metnin söylenenlerden farklı olduğu anlamına gelir. Maksimum kaydırmadan daha fazla senkronizasyon dışı olan bir alt yazı (sabit bir kayma, kare hızı uyumsuzluğundan kaynaklanan sapma veya sahnelerin kesildiği yerlerdeki atlamalar) önce duyulan sözcüklere göre eşitlenir. GPU ile uzun bir sinema filmi için birkaç dakika süren Crisp ASR Parakeet sistemini kullanır.", + "checkWithSpeechToTextNotAvailableX": "Sesten metne dönüştürme denetimi {0} için kullanılamıyor", + "transcribingToCheck": "Hizalamayı denetlemek için yazıya dökülüyor...", + "speechToTextFailed": "Sesten metne dönüştürme başarısız oldu - zaman kodları buna göre denetlenmedi.", + "speechToTextX": "Sesten metne dönüştürme: {0}", + "speechToTextConfirmedXDisputedY": "Konuşma: {0} doğrulandı, {1} çelişkili", + "hardlyHeardX": "Sesten metne dönüştürme sistemi alt yazının yalnızca %{0} kadarlık sözcüğünü duydu. Alt yazı konuşulan dilde mi? Hizalayıcı bir çeviriyi yerleştiremez.", + "heard": "Duyulan", + "heardHint": "Sesten metne dönüştürme sisteminin satırın ne kadarını duyduğu. Düşük bir oran, metnin söylenenlerden farklı olduğunu gösterir - hizalayıcının yanılma olasılığının en yüksek olduğu yer burasıdır.", + "statusConfirmedBySpeech": "Konuşma ile doğrulandı", + "statusDisputedBySpeech": "Olduğu yerde duyuldu", + "statusMovedWithSync": "Eşitleme ile taşındı", + "syncedFirstXY": "Önce eşitlenen: başlangıçta {0} sn, bitişte {1} sn", "showSpeechOnly": "Yalnızca konuşmayı göster", "showSpeechOnlyHint": "Müzik ve ses efektleri temizlenmiş sesten hizalanmış dalga şeklini çizer; karşılaştırma için orijinal dalga şekli olduğu gibi kalır. Konuşma ayrıştırıldıktan sonra kullanılabilir - burada veya ana pencerenin dalga şeklinde \"Yalnızca konuşmayı göster\" ile.", "align": "Hizala", @@ -1935,35 +2101,38 @@ "modelWillBeDownloaded": "{0} indirilecek", "summaryXRetimedYKeptZSkipped": "Yeniden zamanlandı: {0} · Korundu: {1} · Konuşma yok: {2}", "meanShiftX": "Ortalama kayma: {0} ms", - "toCheckX": "Kontrol edilecek: {0}", - "largeMovesToCheckX": "{0} satır kendi başına çok fazla kayacaktı ve işareti kaldırılmış olarak bırakıldı - Orijinal / Hizalanmış seçeneğini oynatın ve doğru olanları işaretleyin.", + "toCheckX": "Kontrol edilecek: {0}", + "largeMovesToCheckX": "{0} satır kendi başına uzun bir mesafe kaydırılacak ve işaretlenmeden bırakıldı - bunları dinleyin (F5 hizalanmış satırı, Shift+F5 orijinal satırı çalar) ve doğru olanları işaretleyin.", + "linesToCheckX": "Denetlenmesi için {0} satır işaretlenmeden bırakıldı - bunları dinleyin (F5 hizalanmış satırı, Shift+F5 orijinal satırı çalar) ve doğru olanları işaretleyin.", "changeXOfY": "Değişiklik {0} / {1}", "previousChange": "Önceki değişiklik", "nextChange": "Sonraki değişiklik", "startShift": "Başlangıç", "endShift": "Bitiş", "statusRetimed": "Yeniden zamanlandı", - "statusMovedWithNeighbours": "Komşularıyla birlikte taşındı", + "statusMovedWithNeighbours": "Komşularıyla birlikte taşındı", "statusLargeMoveUnconfirmed": "Büyük kayma - dinleyin, uygulamak için işaretleyin", "statusUnchanged": "Zaten yerinde", "statusNoSpeech": "Konuşma yok", "statusShiftTooLarge": "Korundu - kayma çok büyük", "statusFailed": "Korundu - hizalayıcı başarısız oldu", + "statusAdjustedByHand": "Elle ayarlandı", + "alignedWaveformHint": "Bir satırı taşımak için sürükleyin ya da başlangıcını veya bitişini değiştirmek için kenarlarından sürükleyin", + "playLine": "Satırı oynat", + "undoAdjustment": "Ayarlamayı geri al", "playPause": "Oynat / duraklat", - "playOriginal": "Orijinal", "playAligned": "Hizalanmış", - "playOriginalHint": "Seçili satırı orijinal zaman kodlarıyla oynatır", "playAlignedHint": "Seçili satırı hizalanmış zaman kodlarıyla oynatır", "apply": "Uygula", - "applyHint": "Orijinal zaman kodlarını korumak için satırın işaretini kaldırın. Oynatmak için bir satıra çift tıklayın." - }, + "applyHint": "Orijinal zaman kodlarını korumak için bir satırın işaretini kaldırın. Oynatmak için bir satıra çift tıklayın. Satırlar ayrıca hizalanmış ses dalgasında taşınabilir veya yeniden boyutlandırılabilir." + }, "beautifyTimeCodesProfile": { "title": "Zaman kodlarını optimize etme profilini düzenle", "loadPreset": "Hazır ayar yükle", "presetDefault": "Varsayılan", "presetNetflix": "Netflix", "presetSdi": "SDI", - "saveAsProfile": "Profil olarak kaydet...", + "saveAsProfile": "Profil olarak kaydet...", "deleteProfile": "Profili sil", "profileName": "Profil adı", "overwriteProfileX": "\"{0}\" adında bir profil zaten var. Üzerine yazılsın mı?", @@ -1998,7 +2167,7 @@ "bridgeGaps": { "bridgeGapsSmallerThan": "Şundan küçük boşlukları köprüle (ms)", "minGap": "Minimum boşluk (ms)", - "bridgeGapsSmallerThanFrames": "Şundan küçük boşlukları birleştir (kare):", + "bridgeGapsSmallerThanFrames": "Şundan küçük boşlukları birleştir (kare):", "minGapFrames": "En az boşluk (kare)", "calculateBridgeGapsSmallerThanDotDotDot": "Birleştirilecek boşluk sınırını kare hızından hesapla...", "useXMsAsBridgeGapsSmallerThan": "Şundan küçük boşluklar birleştirilsin mi: \"{0}\" ms?", @@ -2026,7 +2195,7 @@ "fileNameContainsDotDotDot": "Dosya adı şunları içerir...", "trackLanguageContainsDotDotDot": "İz dili şunları içerir...", "batchConvertSettings": "Toplu dönüştürme ayarları", - "assaSource": "ASSA kaynağı", + "assaSource": "ASSA kaynağı", "addFormatting": "Biçimlendirme ekle", "addItalic": "İtalik ekle", "addBold": "Kalın ekle", @@ -2035,6 +2204,7 @@ "addColor": "Renk ekle", "deleteLinesWithSpecificActorsOrStyles": "Belirli aktör veya stillere sahip satırları sil (virgülle ayırın)", "useSourceStylesIfPossible": "Mümkünse kaynak stillerini kullan", + "keepSourceEmbeddedFonts": "Kaynak gömülü yazı tiplerini koru (alt bilgi)", "editStyles": "Stilleri düzenle", "editProperties": "Özellikleri düzenle", "editAttachments": "Ekleri düzenle", @@ -2048,47 +2218,72 @@ "fontSizeBounceIn": "Yazı boyutu zıplayarak giriş", "assaChangeResolutionOnlyAppliesToAssa": "Yalnızca Advanced Sub Station Alpha (ASSA) alt yazılarına uygulanır", "assaChangeStyleTitle": "Stili Değiştir", - "assaEmbedFontsTitle": "Yazı tiplerini göm", + "assaEmbedFontsTitle": "Yazı tiplerini göm", "assaEmbedFontsInfo": "Alt yazının kullandığı yazı tipi dosyalarını (stiller ve satır içi yazı tipi etiketleri) çıktı dosyasının [Fonts] bölümüne gömer. Yazı tipleri Subtitle Edit yazı tipi klasöründe ve sistem yazı tipi klasörlerinde aranır; önceden gömülmüş yazı tipleri korunur. Yalnızca hedef biçim Advanced Sub Station Alpha olduğunda geçerlidir.", - "adjustImageColorsTitle": "Görsel parlaklığını/alfasını/rengini ayarla", + "adjustImageColorsTitle": "Görsel parlaklığını/alfasını/rengini ayarla", "adjustImageColorsInfo": "Yalnızca görsel tabanlı alt yazılar yine görsel tabanlı bir biçime dönüştürülürken uygulanır (ör. Blu-ray SUP dosyasından Blu-ray SUP dosyasına).", "assaChangeStyleFromStyle": "Şu stili değiştir:", "assaChangeStyleToStyle": "şununla:", "assaChangeStyleImportStyle": "Stil içe aktar...", "assaChangeStyleTrimUnusedStyles": "Kullanılmayan stilleri kırp", - "assaChangeStylePropertiesTitle": "Stil özelliklerini değiştir", + "assaChangeStylePropertiesTitle": "Stil özelliklerini değiştir", "assaChangeStylePropertiesInfo": "Stillerin kendilerine dokunmadan, dosyadaki tüm stillerde seçilen alanları değiştirir.", "assaChangeStylePropertiesSetSpacing": "Karakter aralığını ayarla:", "assaChangeStylePropertiesSetAlignment": "Hizalamayı ayarla:", - "convertColorsToDialogTitle": "Renkleri diyaloğa dönüştür", + "convertColorsToDialogTitle": "Renkleri diyaloğa dönüştür", "convertColorsToDialogRemoveColorTags": "Renk etiketlerini kaldır", "convertColorsToDialogAddNewLines": "Yeni satırlar ekle", "convertColorsToDialogReBreakLines": "Satırları yeniden böl", "snapTimeCodesToFramesInfo": "Her başlangıç ve bitiş zamanını en yakın kareye yuvarlar. Sabit bir kare hızı seçilmediği sürece kare hızı, alt yazı dosyasıyla aynı ada sahip video dosyasından okunur.", "addFolderDotDotDot": "Klasör ekle...", - "addFolderRecursiveDotDotDot": "Özyinelemeli klasör ekle...", + "addFolderRecursiveDotDotDot": "Özyinelemeli klasör ekle...", "selectFolderToConvert": "Dönüştürülecek dosyaları içeren klasörü seçin", "includeSubfolders": "Klasör eklerken alt klasörleri dahil et", - "keepSourceFileTimestamp": "Çıktı dosyalarında kaynak dosya tarihini/saatini koru", - "preventSleepWhileConverting": "Dönüştürme sırasında bilgisayarın uyku moduna geçmesini önle", + "videoFilesWhenAddingFolder": "Klasör eklerken video dosyaları (mkv, mp4, ts...)", + "videoFilesAsk": "Sor", + "videoFilesInclude": "Alt yazı izlerini ekle", + "videoFilesSkip": "Atla", + "folderContainsXVideoFiles": "Klasör {0} video dosyası (mkv, mp4, ts...) içeriyor.\n\nBunların gömülü alt yazı izleri de eklensin mi, yoksa yalnızca alt yazı dosyaları mı eklensin?", + "addVideoFiles": "Video dosyalarını ekle", + "skipVideoFiles": "Yalnızca alt yazı dosyaları", + "doNotAskAgainVideoFiles": "Bir daha sorma (Toplu dönüştürme ayarlarından değiştirin)", + "settingsSectionOutput": "Çıktı", + "settingsSectionAddingFiles": "Dosya ekleme", + "settingsSectionImageBasedSubtitles": "Resim tabanlı alt yazılar (OCR)", + "settingsSectionOther": "Diğer", + "keepSourceFileTimestamp": "Çıktı dosyalarında kaynak dosya tarihini/saatini koru", + "preventSleepWhileConverting": "Dönüştürme sırasında bilgisayarın uyku moduna geçmesini önle", "scanningFolderX": "{0} taranıyor...", - "transportStreamSettings": "Taşıma Akışı ayarları", - "transportStreamSettingsDotDotDot": "Taşıma Akışı ayarları...", - "transportStreamSettingsInfo": "Taşıma Akışı dosyalarından (.ts/.m2ts) çıkarılan alt yazı izlerine uygulanır. Konum ve video boyutu yalnızca görüntü tabanlı bir biçime dışa aktarılan DVB görüntü izlerini etkiler.", - "transportStreamOverrideXPosition": "Orijinal X konumunu geçersiz kıl", - "transportStreamOverrideYPosition": "Orijinal Y konumunu geçersiz kıl", - "transportStreamOverrideVideoSize": "Orijinal video boyutunu geçersiz kıl", - "transportStreamBottomMargin": "Alt kenar boşluğu", - "transportStreamFileNameEnding": "Dosya adı son eki", - "transportStreamFileNameEndingInfo": "Çıkarılan her iz için uzantıdan önce eklenir. Standart dil son ekini kullanmak için boş bırakın.", - "transportStreamOnlyTeletext": "Yalnızca teletekst", - "transportStreamGetSizeFromVideo": "Boyutu videodan al...", - "twoLetterLanguageCodeUppercase": "İki harfli dil kodu (büyük harf)", - "threeLetterLanguageCodeUppercase": "Üç harfli dil kodu (büyük harf)" + "transportStreamSettings": "Taşıma Akışı ayarları", + "transportStreamSettingsDotDotDot": "Taşıma Akışı ayarları...", + "transportStreamSettingsInfo": "Taşıma Akışı dosyalarından (.ts/.m2ts) çıkarılan alt yazı izlerine uygulanır. Konum ve video boyutu yalnızca görüntü tabanlı bir biçime dışa aktarılan DVB görüntü izlerini etkiler.", + "transportStreamOverrideXPosition": "Orijinal X konumunu geçersiz kıl", + "transportStreamOverrideYPosition": "Orijinal Y konumunu geçersiz kıl", + "transportStreamOverrideVideoSize": "Orijinal video boyutunu geçersiz kıl", + "transportStreamBottomMargin": "Alt kenar boşluğu", + "transportStreamFileNameEnding": "Dosya adı son eki", + "transportStreamFileNameEndingInfo": "Çıkarılan her iz için uzantıdan önce eklenir. Standart dil son ekini kullanmak için boş bırakın.", + "transportStreamOnlyTeletext": "Yalnızca teletekst", + "transportStreamGetSizeFromVideo": "Boyutu videodan al...", + "twoLetterLanguageCodeUppercase": "İki harfli dil kodu (büyük harf)", + "threeLetterLanguageCodeUppercase": "Üç harfli dil kodu (büyük harf)", + "formatContainsDotDotDot": "Biçim şunu içeriyor...", + "extensionIsDotDotDot": "Uzantı şudur...", + "statusIsError": "Durum hata gösteriyor", + "forcedTracksOnly": "Yalnızca zorunlu izler", + "xConvertedYFailedInZ": "{0:#,###,##0} dönüştürüldü, {1:#,###,##0} başarısız oldu ({2})", + "xNotProcessed": "{0:#,###,##0} işlenmedi", + "removeUnicodeControlCharactersTitle": "Unicode denetim karakterlerini kaldır", + "removeUnicodeControlCharactersInfo": "Görünmeyen Unicode yön denetim karakterlerini (LRM, RLM, LRE, RLE, PDF, LRO ve RLO) metinden kaldırır ve bölünmeyen boşlukları normal boşluklarla değiştirir.", + "preset": "Ön ayar", + "savePresetDotDotDot": "Ön ayarı kaydet...", + "deletePreset": "Ön ayarı sil", + "presetName": "Ön ayar adı", + "deletePresetX": "\"{0}\" ön ayarı silinsin mi?" }, "changeCasing": { "fixNames": "İsimleri düzelt", - "namesX": "İsimler: {0:#,##0}", + "namesX": "İsimler: {0:#,##0}", "hitsX": "Eşleşmeler: {0:#,##0}", "extraNames": "Ek isimler", "enterExtraNamesHint": "Düzeltilecek ek isimleri virgülle ayırarak girin", @@ -2114,19 +2309,19 @@ "addMsAfterEachFile": "Her dosyadan sonra milisaniye ekle", "join": "_Birleştir" }, - "mergeTwoSubtitles": { - "title": "İki alt yazıyı birleştir", - "subtitle1": "Alt yazı 1", - "subtitle2": "Alt yazı 2", - "loadFromCurrentText": "Mevcut olandan yükle (metin)", - "loadFromCurrentTranslation": "Mevcut olandan yükle (çeviri)", - "loadFromFile": "Dosyadan yükle...", - "outputFormat": "Çıkış formatı", - "outputFormatSubRip": "SubRip (.srt)", - "outputFormatAssa": "Advanced Sub Station Alpha (.ass)", - "style1": "Stil 1", - "style2": "Stil 2", - "merge": "_Birleştir" + "mergeTwoSubtitles": { + "title": "İki alt yazıyı birleştir", + "subtitle1": "Alt yazı 1", + "subtitle2": "Alt yazı 2", + "loadFromCurrentText": "Mevcut olandan yükle (metin)", + "loadFromCurrentTranslation": "Mevcut olandan yükle (çeviri)", + "loadFromFile": "Dosyadan yükle...", + "outputFormat": "Çıkış formatı", + "outputFormatSubRip": "SubRip (.srt)", + "outputFormatAssa": "Advanced Sub Station Alpha (.ass)", + "style1": "Stil 1", + "style2": "Stil 2", + "merge": "_Birleştir" }, "splitSubtitle": { "title": "Alt yazıyı böl", @@ -2138,13 +2333,13 @@ "title": "Uzun satırları böl/dengele", "splitLongLines": "Uzun satırları böl (birden fazla satıra)", "rebalanceLongLines": "Uzun satırları dengele", - "rebalanceOnlyLinesTooLong": "Yalnızca çok uzun satırı olan alt yazılar", + "rebalanceOnlyLinesTooLong": "Yalnızca çok uzun satırı olan alt yazılar", "rebalanceOnlyLinesTooLongHint": "Tüm satırlar zaten tek satır azami uzunluk sınırları dahilindeyse mevcut satır sonlarını değiştirmeyin - kasıtlı olarak dengelenmemiş bir alt yazı editoryal olarak doğru olabilir", "splitLongLine": "Uzun satırı böl", "rebalanceLongLine": "Uzun satırı dengele", "splitIntoXLines": "{0} satıra böl: '{1}' → '{2}...'", "linesSplitX": "Bölünen satırlar: {0}", - "linesSplitXLinesRebalancedY": "Bölünen satırlar: {0}, yeniden dengelenen satırlar: {1}", + "linesSplitXLinesRebalancedY": "Bölünen satırlar: {0}, yeniden dengelenen satırlar: {1}", "unbreakLinesShorterThanHint": "Bu değerden kısa metinler tek satırda kalır (veya tek satırda birleştirilir) - tek satıra sığabilecek her metnin bölünmeden kalmasını sağlamak için bu değeri tek satır en fazla uzunluğuna ayarlayın" }, "mergeShortLines": { @@ -2169,11 +2364,13 @@ }, "mergeLinesWithSameText": { "maxMsBetweenLines": "Satırlar arası maksimum milisaniye", + "maxFramesBetweenLines": "Satırlar arasındaki en çok kare sayısı", "includeIncrementingLines": "Artan metne sahip satırları dahil et", - "includeRollUpCaptions": "Kayar (yukarı doğru kayan) alt yazıları dahil et" + "includeRollUpCaptions": "Kayar (yukarı doğru kayan) alt yazıları dahil et" }, "mergeLinesWithSameTimeCodes": { "maxMsDifference": "Maksimum fark (milisaniye)", + "maxFramesDifference": "En çok fark (kare)", "makeDialog": "Diyalog yap" }, "netflixCheckAndFix": { @@ -2198,7 +2395,7 @@ "textforHiUseBrackets": "İşitme engelli (HI) metni, köşeli parantez kullan", "twoFrameGrap": "İki kare boşluk", "whiteSpace": "Boşluk karakteri", - "childrensProgram": "Çocuk programı", + "childrensProgram": "Çocuk programı", "sdh": "SDH (işitme engelliler için)", "glyphCheckReport": "Sütun {1} üzerinde geçersiz karakter {0} bulundu", "whiteSpaceCheckForXReport": "Sütun {1} üzerinde boşluk karakteri sorunu ({0}) bulundu.", @@ -2243,7 +2440,7 @@ "adjustAlphaDotDotDot": "Alfayı ayarla...", "cropImages": "Resimleri kırp", "importTimeCodes": "Zaman kodlarını içe aktar...", - "setText": "Metni ayarla", + "setText": "Metni ayarla", "screenWidth": "Ekran genişliği", "screenHeight": "Ekran yüksekliği", "alphaThresholdInfo": "Alfa değeri eşiğin altındaki pikseller tam şeffaf olur", @@ -2257,23 +2454,23 @@ "resizeImages": "Resimleri yeniden boyutlandır", "percentage": "Yüzde", "resizeImagesInfo": "Resimleri yeniden boyutlandırmak için yüzdeyi girin.\nÖn izleme otomatik güncellenir.", - "originalSizeXNewSizeY": "Orijinal: {0} × {1} px\nYeni: {2} × {3} px", - "adjustColorDotDotDot": "Rengi ayarla...", - "adjustColor": "Rengi ayarla", - "colorAdjustmentInfo": "Renk seçmek için renk kutucuğuna tıklayın. Parlak alt yazı pikselleri seçilen renk tonuna kaydırılır; koyu dış hatlar ve gölgeler korunur.\nÖn izleme, seçilen ilk alt yazıyı gösterir.", - "topAlignLines": "Üste hizala", - "bottomAlignLines": "Alta hizala", - "appendSubtitleDotDotDot": "Alt yazı ekle...", - "shiftTimeCodes": "Zaman kodlarını şu kadar kaydır:", - "sortByStartTime": "Başlangıç zamanına göre sırala", - "videoPreview": "Video", + "originalSizeXNewSizeY": "Orijinal: {0} × {1} px\nYeni: {2} × {3} px", + "adjustColorDotDotDot": "Rengi ayarla...", + "adjustColor": "Rengi ayarla", + "colorAdjustmentInfo": "Renk seçmek için renk kutucuğuna tıklayın. Parlak alt yazı pikselleri seçilen renk tonuna kaydırılır; koyu dış hatlar ve gölgeler korunur.\nÖn izleme, seçilen ilk alt yazıyı gösterir.", + "topAlignLines": "Üste hizala", + "bottomAlignLines": "Alta hizala", + "appendSubtitleDotDotDot": "Alt yazı ekle...", + "shiftTimeCodes": "Zaman kodlarını şu kadar kaydır:", + "sortByStartTime": "Başlangıç zamanına göre sırala", + "videoPreview": "Video", "positionMap": "Konum haritası", "letterbox": "Sinematik şerit (Letterbox)", "letterboxOff": "Kapalı (sinematik şerit yok)", "letterboxCustom": "Özel şerit yüksekliği", "barHeightPx": "Şerit yüksekliği (px)", "titleSafePercent": "Güvenli alan oranı (%)", - "moveCaptions": "Alt yazıları taşı", + "moveCaptions": "Alt yazıları taşı", "moveCaptionsDotDotDot": "Alt yazıları taşı...", "moveCaptionsTo": "Alt yazıları taşı", "moveCaptionsIntoBars": "Letterbox siyah bantlarına (görüntünün dışına)", @@ -2288,7 +2485,14 @@ "xInTopBar": "Üst şeritte: {0}", "xInBottomBar": "Alt şeritte: {0}", "noImageSubtitlesLoaded": "Hiçbir görüntü tabanlı alt yazı yüklenmedi", - "imageBasedFormatNotSupported": "Görüntü tabanlı alt yazı biçimi bulunamadı/desteklenmiyor." + "imageBasedFormatNotSupported": "Görüntü tabanlı alt yazı biçimi bulunamadı/desteklenmiyor.", + "frameRateDeclaredInFile": "Blu-ray sup dosyasında bildirilen kare hızı", + "frameRateDetectedFromTimeCodesX": "Blu-ray sup zaman kodlarından algılanan kare hızı (dosya {0} bildiriyor)", + "frameRateFromVideo": "Videonun kare hızı", + "frameRateCurrent": "Mevcut kare hızı", + "frameRateSetManually": "Elle ayarlanan kare hızı", + "frameRateUsageInfo": "Blu-ray sup, BDN XML, DOST ve FCP dışa aktarımları bu kare hızıyla yazılır. Bu işlem hiçbir zamanlamayı değiştirmez - bunun için \"Kare hızını değiştir\" işlevini kullanın.", + "useVideoFrameRateXInsteadOfY": "Videonun kare hızı {0}, ancak alt yazı {1} olarak ayarlanmış.\n\nVideonun kare hızı ({0}) kullanılsın mı?" }, "removeTextForHearingImpaired": { "interjections": "Ünlemler / Tepki sözcükleri", @@ -2303,29 +2507,30 @@ "onlyIfTextIsUppercase": "Yalnızca metin büyük harfliyse", "onlyOnSeparateLine": "Yalnızca ayrı satırdaysa", "ifLineIsUppercase": "Satır büyük harfliyse", - "keepUppercaseWords": "Bu kelimeleri büyük harfli koru (virgülle ayrılmış)", + "keepUppercaseWords": "Bu kelimeleri büyük harfli koru (virgülle ayrılmış)", "ifLineContains": "Satır şunu içeriyorsa:", "ifLineOnlyContainsMusicSymbols": "Satır yalnızca müzik sembolleri içeriyorsa", "removeInterjections": "Ünlemleri/Tepki sözcüklerini kaldır", - "linesFoundX": "Bulunan satır sayısı: {0}" + "linesFoundX": "Bulunan satır sayısı: {0}" }, - "removeUnicodeCharacters": { + "removeUnicodeCharacters": { "title": "Unicode karakterleri kaldır/değiştir", "charactersFoundX": "Bulunan Unicode karakterleri: {0}", "noCharactersFound": "Unicode karakteri bulunamadı" }, "pickFontNameTitle": "Yazı tipi seçin", - "pickFontNameInstalledFonts": "Yüklü yazı tipleri", + "pickFontNameInstalledFonts": "Yüklü yazı tipleri", "pickFontNameCollectedFonts": "Toplanan yazı tipleri", "colorPickerTitle": "Renk seçin", + "colorPickerBrightness": "Parlaklık", "filterLayersTitle": "Görüntülenecek katmanları filtrele", "filterLayersHideFromWaveform": "Ses dalgası/spektrogram üzerinde gizle", "filterLayersHideFromSubtitleGrid": "Alt yazı ızgarasında gizle", "filterLayersHideFromVideoPreview": "Video ön izlemesinde gizle", "pickSubtitleFormat": "Alt yazı formatı seçin", - "pickSubtitleFormatImageBasedNoPreview": "Resim tabanlı alt yazı biçimi.\nDönüştürme sırasında bit eşlemler (bitmap) oluşturulur; metin ön izlemesi yoktur.", + "pickSubtitleFormatImageBasedNoPreview": "Resim tabanlı alt yazı biçimi.\nDönüştürme sırasında bit eşlemler (bitmap) oluşturulur; metin ön izlemesi yoktur.", "recentColors": "Son kullanılan renkler", - "fixCommonErrorsSettingsTitle": "Yaygın hataları düzelt ayarları" + "fixCommonErrorsSettingsTitle": "Yaygın hataları düzelt ayarları" }, "spellCheck": { "spellCheck": "Yazım denetimi", @@ -2341,7 +2546,7 @@ "xOfYNamesImported": "{1} isimden {0} tanesi içe aktarıldı (geri kalanlar zaten mevcut olabilir).", "noDictionariesFound": "Sözlük bulunamadı", "wordNotFound": "Kelime bulunamadı", - "loadSourceImage": "Kaynak resimleri de göster...", + "loadSourceImage": "Kaynak resimleri de göster...", "lineXofY": "Yazım denetimi - satır {0} / {1}", "changeWordFromXToY": "Kelimeyi '{0}' yerine '{1}' olarak değiştir", "changeAllWordsFromXToY": "Tüm '{0}' kelimelerini '{1}' olarak değiştir", @@ -2356,32 +2561,46 @@ "pickSpellCheckDictionaryDotDotDot": "Yazım denetimi sözlüğü seç...", "chooseSpellCheckDictionary": "Yazım denetimi sözlüğü seç", "pickLiveSpellCheckDictionary": "Canlı yazım denetimi sözlüğü seç", - "undoX": "Geri al: {0}", - "playCurrentLineHint": "Geçerli satırı video oynatıcıda oynatır ve sonunda duraklatır", - "editWholeText": "Tüm metni düzenle", - "editWholeTextTitle": "Yazım denetimi - Tüm metni düzenle", - "continueFromCurrentLine": "Yazım denetimine bulunulan satırdan mı devam edilsin?\n\nEvet = Bulunulan satırdan devam et\nHayır = Baştan başla", - "continueFromTop": "Yazım denetimi alt yazının sonuna ulaştı.\n\nBaştan devam edilsin mi?", - "spellCheckCompleted": "Yazım denetimi tamamlandı", - "changedWordsX": "Değiştirilen kelime sayısı: {0}", - "skippedWordsX": "Atlanan kelime sayısı: {0}", - "correctWordsX": "Doğru kelime sayısı: {0}", - "namesX": "Özel ad sayısı: {0}", - "addedToDictionaryX": "Sözlüğe eklenen sayı: {0}", - "doNotShowThisAgain": "Bu mesajı bir daha gösterme" + "undoX": "Geri al: {0}", + "playCurrentLineHint": "Geçerli satırı video oynatıcıda oynatır ve sonunda duraklatır", + "editWholeText": "Tüm metni düzenle", + "editWholeTextTitle": "Yazım denetimi - Tüm metni düzenle", + "continueFromCurrentLine": "Yazım denetimine bulunulan satırdan mı devam edilsin?\n\nEvet = Bulunulan satırdan devam et\nHayır = Baştan başla", + "continueFromTop": "Yazım denetimi alt yazının sonuna ulaştı.\n\nBaştan devam edilsin mi?", + "spellCheckCompleted": "Yazım denetimi tamamlandı", + "changedWordsX": "Değiştirilen kelime sayısı: {0}", + "skippedWordsX": "Atlanan kelime sayısı: {0}", + "correctWordsX": "Doğru kelime sayısı: {0}", + "namesX": "Özel ad sayısı: {0}", + "addedToDictionaryX": "Sözlüğe eklenen sayı: {0}", + "doNotShowThisAgain": "Bu mesajı bir daha gösterme", + "editUseAlwaysList": "\"Her zaman kullan\" listesini düzenle...", + "useAlwaysListTitle": "Yazım denetimi - \"Her zaman kullan\" listesi", + "useAlwaysListHeader": "\"Her zaman kullan\" listesi", + "useAlwaysListDescription": "Yazım denetiminin otomatik olarak değiştirdiği, \"Tümünü değiştir\" ve \"Her zaman kullan\" ile kaydedilen sözcükler. Bir çift yalnızca sözcük yanlış yazıldığında kullanılır.", + "useAlwaysWord": "Yanlış yazılmış sözcük", + "xPairs": "{0:#,##0} çift", + "xUnusedPairs": "{0:#,##0} hiç kullanılmadı", + "useAlwaysUnusedHint": "Hiç kullanılmadı - bu sözcük doğru yazılmış (veya bir ad ya da kullanıcı sözcüğü), bu nedenle yazım denetimi bunu hiçbir zaman işaretlemez", + "removeUnused": "Kullanılmayanları kaldır", + "useAlwaysEmpty": "Bu dil için henüz \"Her zaman kullan\" çifti yok", + "useAlwaysEmptyHint": "Çiftler, yazım denetiminde \"Tümünü değiştir\" veya \"Her zaman kullan\" seçeneğine tıkladığınızda eklenir.", + "useAlwaysNoMatch": "Aramayla eşleşen çift yok", + "useAlwaysSameWord": "Düzeltme sözcüğün kendisinden farklı olmalıdır.", + "useAlwaysRememberOff": "Ayarlar'da \"'Her zaman kullan' listesini hatırla\" kapatılmış, bu nedenle yazım denetimi bu listeyi kullanmaz veya kaydetmez." }, "video": { "burnIn": { "title": "Gömülü alt yazılı video oluştur", "targetFileSize": "Hedef dosya boyutu (2 geçişli kodlama gerektirir)", "fileSizeMb": "MB cinsinden dosya boyutu", - "matchSourceVideoSize": "Kaynak video boyutuyla eşitle", + "matchSourceVideoSize": "Kaynak video boyutuyla eşitle", "bitRate": "Bit hızı", "totalBitRateX": "Toplam bit hızı: {0}", "sampleRate": "Örnekleme hızı", "audio": "Ses", "preset": "Hazır ayar", - "tune": "İnce ayar yap", + "tune": "İnce ayar yap", "pixelFormat": "Piksel formatı", "crf": "CRF", "useSource": "Kaynağı kullan", @@ -2394,7 +2613,7 @@ "videoFileSize": "Video dosya boyutu", "oneBox": "Tek kutu", "logoInfo": "Bir PNG resmi seçin ve video üzerindeki konumunu ayarlamak için sürükleyin.", - "noSubtitlesGenerateAnyway": "Gömülecek alt yazı satırı yok.\n\nVideo alt yazısız olarak oluşturulsun mu?", + "noSubtitlesGenerateAnyway": "Gömülecek alt yazı satırı yok.\n\nVideo alt yazısız olarak oluşturulsun mu?", "noSubtitlesInXItemsGenerateAnyway": "{0} toplu işlem ögesinde gömülecek alt yazı satırı yok.\n\nBu videolar alt yazısız olarak oluşturulsun mu?" }, "videoTransparent": { @@ -2406,13 +2625,21 @@ "translateToEnglish": "İngilizceye çevir", "transcribing": "Metne dökülüyor...", "transcribingXOfY": "Metne dökülüyor {0} / {1}...", - "isolateSpeech": "Konuşmayı ayrıştır (yavaş)", + "linesTranscribedXOfYFailedZ": "{1} satırın {0} tanesi yazıya döküldü - {2} satır başarısız oldu veya konuşma içermiyordu.\n\nBaşarısız satırlar mevcut metinlerini korur. Yazıya dökülen satırlar uygulansın mı, yoksa başarısız olanlar yeniden mi denensin (önce motoru veya ayarları değiştirebilirsiniz)?", + "linesTranscribedXOfYCancelled": "Yazıya dökme işlemi {1} satırın {0} tanesinden sonra iptal edildi.\n\nYazıya dökülen satırlar uygulansın mı? Diğer satırlar mevcut metinlerini korur.", + "noLinesTranscribed": "{0} satırın hiçbiri yazıya dökülemedi.\nAyrıntılar için lütfen araçlar günlüğünü denetleyin.", + "applyTranscribedLines": "Yazıya dökülenleri uygula", + "retryFailedLines": "Başarısızları yeniden dene", + "isolateSpeech": "Konuşmayı ayrıştır (yavaş)", "isolateSpeechHint": "Döküm çıkarmadan önce müzik ve ses efektlerini temizler. Yüksek sesli müzik içeren seslerde daha az kaçırılan satır ve daha iyi zamanlama sağlar, ancak ekran kartı (GPU) ile yaklaşık ses süresi kadar sürer - GPU olmadan ise çok daha uzun zaman alır.", "isolatingSpeech": "Konuşma ayrıştırılıyor...", "isolateSpeechFailed": "Konuşma ayrıştırılamadı - bunun yerine orijinal sesin dökümü çıkarılıyor.", - "detectSpeakers": "Konuşmacıları algıla", + "detectSpeakers": "Konuşmacıları algıla", "detectSpeakersHint": "NVIDIA Sortformer konuşmacı ayrıştırma (diarization - 8 konuşmacıya kadar) özelliğini kullanarak her satırın başına \"(konuşmacı 0)\" gibi konuşmacıyı ekler. Parakeet ve Cohere gibi konuşmacının değiştiği yerlerde satırları bölen altyapılarla en iyi şekilde çalışır.", "detectSpeakersNeedsNewerCrispAsr": "\"Konuşmacıları algıla\" özelliği Crisp ASR v{0} veya üzerini gerektirir, ancak v{1} sürümü yüklü.\n\nCrisp ASR'yi güncelleyin (motorun yanındaki dişli çark düğmesi) veya \"Konuşmacıları algıla\" seçeneğini kapatın.", + "xNeedsNewerCrispAsr": "{0}, Crisp ASR v{1} veya daha yeni bir sürümü gerektiriyor ancak v{2} yüklü.\n\nGüncelleme şimdi indirilip yüklensin mi?", + "vad": "VAD", + "vadHint": "Ses etkinliği algılama: yalnızca konuşmalar yazıya dökülür, konuşmacının durakladığı yerlerde kesilir.\nOtomatik: Silero kullanılır ve yalnızca ihtiyaç duyan motorlar içindir (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, WebRTC: Her Crisp ASR motoru için her zaman açıktır. FireRedVAD en doğru olandır.\nIndex-Echo her zaman Silero kullanır. Gelişmiş ayarlardaki --vad, --vad-model veya --chunk-seconds komutları önceliklidir.", "inputLanguage": "Giriş dili", "advancedWhisperSettings": "Gelişmiş sesten metne dönüştürme parametreleri", "downloadingSpeechToTextEngine": "Sesten metne dönüştürme motoru indiriliyor", @@ -2424,8 +2651,8 @@ "whisperXxlSingleWords": "Tek kelimeler", "whisperXxlHighlightWord": "Kelime vurgula", "selectModel": "Model seç", - "addCustomModelDotDotDot": "Özel model ekle...", - "customModelHelp": "Kendi modelinizi kullanabilirsiniz: Model dosyasını (whisper.cpp ggml '.bin') veya model klasörünü (içinde 'model.bin' bulunan faster-whisper klasörü) seçin. Seçtiğiniz model, modeller klasörüne kopyalanacak ve yukarıdaki listeye eklenecektir.", + "addCustomModelDotDotDot": "Özel model ekle...", + "customModelHelp": "Kendi modelinizi kullanabilirsiniz: Model dosyasını (whisper.cpp ggml '.bin') veya model klasörünü (içinde 'model.bin' bulunan faster-whisper klasörü) seçin. Seçtiğiniz model, modeller klasörüne kopyalanacak ve yukarıdaki listeye eklenecektir.", "viewToolsLogFile": "Whisper günlüğünü görüntüle", "updateXTitle": "{0} Güncellensin mi?", "updateXMessage": "{0} yazılımının daha yeni bir sürümü mevcut.{1}{1}Güncelleme şimdi indirilip kurulsun mu?", @@ -2438,7 +2665,7 @@ "fixCasing": "Büyük/küçük harf kullanımını düzelt", "addPeriods": "Nokta ekle", "changeUnderlineToColor": "Alt çizgiyi renge dönüştür", - "removeNonSpeechLines": "Konuşma dışı satırları kaldır", + "removeNonSpeechLines": "Konuşma dışı satırları kaldır", "removeNonSpeechLinesHint": "\"\"[Müzik]\"\" veya \"\"(dalga sesleri)\"\" gibi yalnızca sesi tanımlayan satırları çıkarın", "removeRepeatedLines": "Yinelenen satırları kaldır", "removeRepeatedLinesHint": "Önceki satırı kelimesi kelimesine yineleyen satırları çıkarın (motor döngüleri)", @@ -2468,7 +2695,7 @@ "engineSettings": "Ses tanıma motoru ayarları", "engineSettingsSubtitle": "Ses tanıma motoru", "backendAndUpdateStatus": "Arka uç ve güncelleme durumu", - "addLanguageCodeToFileName": "Dosya adına dil kodu ekle", + "addLanguageCodeToFileName": "Dosya adına dil kodu ekle", "addLanguageCodeToFileNameHint": "Oluşturulan alt yazıları \"video.srt\" yerine \"video.en.srt\" şeklinde adlandırır" }, "textToSpeech": { @@ -2481,22 +2708,22 @@ "generateSpeechFromText": "Metinden ses oluştur", "testVoice": "Sesi test et", "addAudioToVideoFile": "Videoya ses ekle", - "engineAndVoice": "Motor ve ses", - "output": "Çıktı", - "xLinesFromY": "{1} satırdan {0} satır", - "xLines": "{0} satır", - "xVoices": "{0} ses", - "reviewAudioSegmentsHint": "Son karışımdan (mix) önce her satırı kontrol edin", - "addAudioToVideoFileHint": "Sonucu yeni bir video dosyasına göm (Mux)", - "xElapsedYLeft": "{0} geçen süre · ~{1} kaldı", - "xElapsed": "{0} geçen süre", + "engineAndVoice": "Motor ve ses", + "output": "Çıktı", + "xLinesFromY": "{1} satırdan {0} satır", + "xLines": "{0} satır", + "xVoices": "{0} ses", + "reviewAudioSegmentsHint": "Son karışımdan (mix) önce her satırı kontrol edin", + "addAudioToVideoFileHint": "Sonucu yeni bir video dosyasına göm (Mux)", + "xElapsedYLeft": "{0} geçen süre · ~{1} kaldı", + "xElapsed": "{0} geçen süre", "voiceSettings": "TTS - Ses ayarları", "voiceSampleText": "Ses örnek metni", "refreshVoices": "Sesleri yenile", "videoEncodingSettings": "TTS - Video kodlama ayarları", "elevenLabsSettings": "TTS - ElevenLabs ayarları", "elevenLabsSettingsResetHint": "ElevenLabs ayarlarını varsayılana sıfırla", - "provider": "Sağlayıcı", + "provider": "Sağlayıcı", "openAiCompatibleSettings": "TTS - OpenAI uyumlu ayarlar", "customServerUrl": "Özel sunucu URL'si", "customServerUrlHint": "Sağlayıcı \"Özel\" olduğunda kullanılan, OpenAI uyumlu bir sunucunun tam konuşma uç noktası (ör. http://localhost:8880/v1/audio/speech)", @@ -2507,15 +2734,17 @@ "instructions": "Talimatlar", "instructionsHint": "İsteğe bağlı konuşma biçemi, ör. \"Sakin ve sıcak bir ses tonuyla konuş\". Yalnızca bunu destekleyen modellere gönderilir (tts-1/tts-1-hd hariç)", "openAiSpeedHint": "0,25 ile 4,0 arasında konuşma hızı (1,0 normaldir). Her model bunu desteklemez", + "outputFormat": "Çıktı biçimi", + "outputFormatHint": "Sunucudan istenen ses biçimi. \"Otomatik\", MP3 ister ve yalnızca PCM döndüren modeller için (ör. Gemini TTS) PCM biçimine geçer", "regenerateAudio": "Sesi yeniden oluştur", "autoContinuePlaying": "Oynatmaya otomatik devam et", - "playLine": "Satırı oynat", + "playLine": "Satırı oynat", "fitDurationToGeneratedAudio": "Süreyi oluşturulan sese sığdır", "resetTiming": "Zamanlamayı sıfırla", "addingAudioToVideoFileDotDotDot": "Videoya ses ekleniyor...", "preparingMergeDotDotDot": "Birleştirme hazırlanıyor...", "importVoiceDotDotDot": "Ses içe aktar...", - "renameVoiceDotDotDot": "Sesi yeniden adlandır...", + "renameVoiceDotDotDot": "Sesi yeniden adlandır...", "renameVoiceTitle": "Sesi yeniden adlandır", "voiceXCouldNotBeRenamedX": "'{0}' sesi yeniden adlandırılamadı: {1}", "deleteVoiceDotDotDot": "Sesi sil...", @@ -2524,16 +2753,27 @@ "voiceXCouldNotBeDeletedX": "'{0}' sesi silinemedi: {1}", "voiceImportSuccessTitle": "Ses içe aktarıldı", "voiceXImported": "'{0}' sesi başarıyla içe aktarıldı", - "voiceXCouldNotBeImported": "'{0}' sesi içe aktarılamadı - ayrıntılar için günlüğe bakın", - "importPiperVoiceTitle": "Piper ses modelini aç (.onnx)", + "voiceXCouldNotBeImported": "'{0}' sesi içe aktarılamadı - ayrıntılar için günlüğe bakın", + "importPiperVoiceTitle": "Piper ses modelini aç (.onnx)", "piperVoiceConfigMissingTitle": "Yapılandırma dosyası eksik", "piperVoiceConfigMissingMessage": "Bir Piper ses modelinin yapılandırma dosyası, model dosyasının yanında bulunmalıdır: {0}", "dropAudioFileHereToImportVoice": "Ses içe aktarmak için ses dosyasını buraya bırakın", "dropAudioFileHereHint": ".wav veya .mp3", "voiceCloneTranscriptTitle": "Ses kaydının metnini (deşifresini) girin (ses klonlama için gereklidir)", - "voiceManagerTitle": "TTS - Ses yöneticisi", + "voiceManagerTitle": "TTS - Ses yöneticisi", "voiceManagerDotDotDot": "Ses yöneticisi...", "voiceManagerMenuItem": "TTS ses yöneticisi...", + "speakFromCurrentLineTitle": "Mevcut satırdan itibaren seslendir", + "speakFromCurrentLineDotDotDot": "Mevcut satırdan itibaren seslendir...", + "speakFromCurrentLineHint": "Mevcut satırdan başlayarak satırları sırayla yüksek sesle okur. Durdurmak için Escape tuşuna basın veya başka bir satıra tıklayın.", + "stopSpeaking": "Seslendirmeyi durdur", + "speakingLineX": "{0}. satır seslendiriliyor... (Durdurmak için Escape)", + "playWithSpeechTitle": "Seslendirmeyle oynat", + "playWithSpeechDotDotDot": "Seslendirmeyle oynat...", + "playWithSpeechHint": "Videoyu oynatır ve video ilgili satıra ulaştığında her satırı seslendirir. Her zamanki gibi duraklatın ve sarın; durdurmak için Escape tuşuna basın.", + "lowerVideoVolumeWhileSpeaking": "Konuşurken video sesini kıs", + "pauseVideoWhenSpeechRunsLate": "Konuşma bir sonraki satıra taştığında videoyu duraklat", + "waitingForSpeechLineX": "{0}. satır için konuşma oluşturuluyor... (Durdurmak için Escape)", "voiceKindClone": "Klonlanmış ses", "voiceKindPreset": "Yerleşik", "voiceKindModel": "Ses modeli", @@ -2564,7 +2804,7 @@ "installingXDotDotDot": "{0} kuruluyor...", "xVoicesInstalledYSkipped": "{0} ses kuruldu ({1} zaten mevcut)", "useSpeechToTextDotDotDot": "Ses tanımayı kullan...", - "autoCastMenuItem": "Videodaki sesleri bul ve klonla...", + "autoCastMenuItem": "Videodaki sesleri bul ve klonla...", "autoCastSpeakersTitle": "Videoda bulunan sesler", "autoCastSpeakersSubtitle": "Her konuşmacıyı adlandırın - bu ad, alt yazıda konuşmacı ve klonlanan sesin adı olur. İki konuşmacıyı tek bir seste birleştirmek için aynı adı verin.", "autoCastFoundXSpeakersInYLines": "{1} satırda {0} konuşmacı", @@ -2581,8 +2821,8 @@ "cloneVoicePerLinePreparing": "Her satırın sesi videodan alınıyor...", "cloneVoicePerLineNeedsVideo": "Her satırın sesini klonlamak için alt yazının ait olduğu video gereklidir. Videoyu açıp tekrar deneyin.", "cloneVoicePerLineNoClips": "Videodan hiçbir ses alınamadı, bu nedenle klonlanacak bir şey yok. Videonun bir ses izine sahip olduğunu kontrol edin.", - "cloneVoicePerLineTranscribeClipsXYZ": "{0}, yalnızca ilgili satırda videoda ne söylendiğini bildiğinde o satırın sesini klonlayabilir. {2} satırdan {1} tanesi için bu bilgi mevcut değil - bu bilgi normalde orijinal dildeki alt yazıdan alınır (Dosya > Orijinal aç...).\n\nBu satırların dökümü videodan metne dönüştürme (STT) ile şimdi çıkarılsın mı?\n\nEvet: Motoru ve videoda konuşulan dili seçin; ses üretilmeden önce referans kliplerin dökümü çıkarılır.\nHayır: Yine de üret - bu satırlar videodaki ses yerine sıradan bir sesle seslendirilir.", - "voiceCloneConsentTitle": "Ses klonlama - başlamadan önce", + "cloneVoicePerLineTranscribeClipsXYZ": "{0}, yalnızca ilgili satırda videoda ne söylendiğini bildiğinde o satırın sesini klonlayabilir. {2} satırdan {1} tanesi için bu bilgi mevcut değil - bu bilgi normalde orijinal dildeki alt yazıdan alınır (Dosya > Orijinal aç...).\n\nBu satırların dökümü videodan metne dönüştürme (STT) ile şimdi çıkarılsın mı?\n\nEvet: Motoru ve videoda konuşulan dili seçin; ses üretilmeden önce referans kliplerin dökümü çıkarılır.\nHayır: Yine de üret - bu satırlar videodaki ses yerine sıradan bir sesle seslendirilir.", + "voiceCloneConsentTitle": "Ses klonlama - başlamadan önce", "voiceCloneConsentHeader": "Bir sesi klonlamak üzeresiniz", "voiceCloneConsentIntro": "Klonlama, gerçek bir kişinin sesini kopyalar. Bu durum çoğu yerde kuralları ve AB'de Subtitle Edit'e değil size düşen yasal yükümlülükleri beraberinde getirir. Lütfen bunu bir kez okuyun.", "voiceCloneConsentPointPermission": "Yalnızca kullanma hakkına sahip olduğunuz bir sesi klonlayın - kendinizin veya konuşmacının izin verdiği bir sesi. Ses, kişisel bir veri ve kişilik hakkıdır; bu nedenle izin olmadan klonlamak hukuka aykırı olabilir.", @@ -2596,31 +2836,46 @@ "voiceCloneConsentAccept": "Kabul et ve devam et", "voiceCloneConsentDeclined": "Bu şartlar kabul edilene kadar ses klonlama kullanılamaz.", "advancedTtsSettings": "Gelişmiş TTS ayarları", - "advancedTtsAudioProcessing": "Ses işleme", - "advancedTtsOutput": "Çıktı", + "advancedTtsAudioProcessing": "Ses işleme", + "advancedTtsOutput": "Çıktı", + "advancedTtsVoiceCloning": "Ses klonlama", + "cleanCloneReferences": "Ses klonlama referanslarını temizle (Sidon)", + "cleanCloneReferencesDescription": "Sesin klonlandığı sesteki müziği, gürültüyü ve çınlamayı (yankıyı) kaldırır: videodan alınan klipler ve ses yöneticisine aktarılan kayıtlar. audio.cpp üzerindeki Sidon konuşma onarım modelini kullanır (940 MB indirme). Klonlanan ses artık arka planı kopyalamaz, ancak çok kısık veya üst üste binen konuşmalar boğuk çıkabilir.", + "cleaningCloneReferencesDotDotDot": "Ses klonlama referansları temizleniyor...", + "downloadSidonTitle": "Sidon indirilsin mi?", + "downloadSidonQuestionX": "Ses klonlama referanslarını temizlemek için Sidon konuşma onarım modeli ({0}) gereklidir.\n\nŞimdi indirilsin mi? O olmadan referanslar olduğu gibi kullanılır.", "proAudioPostProcessing": "Profesyonel ses son işlemesi", "proAudioPostProcessingDescription": "Her klip için EQ, gürültü kapısı, sıkıştırma, ses yüksekliği normalleştirmesi (-16 LUFS) ve kısa bir baş/son solması ekler.", + "generatingSpeechSegmentXOfY": "Konuşma oluşturuluyor: {1} bölümün {0}. bölümü", + "adjustingSpeedSegmentXOfY": "Hız ayarlanıyor: {1} bölümün {0}. bölümü", + "mergingAudioSegmentXOfY": "Ses birleştiriliyor: {1} bölümün {0}. bölümü", + "postProcessingSegmentXOfY": "Son işleme: {1} bölümün {0}. bölümü", "audioDucking": "Ses kısma", "audioDuckingDescription": "Orijinal parçanın hafifçe duyulabilir kalması için orijinal video sesini kısıp konuşmayı üzerine karıştırır. Yalnızca konuşma video dosyasına eklendiğinde uygulanır.", - "removeOriginalSpeech": "Orijinal konuşmayı kaldır (yavaş)", + "removeOriginalSpeech": "Orijinal konuşmayı kaldır (yavaş)", "removeOriginalSpeechDescription": "Orijinal videonun müzik ve ses efektlerini korur ancak konuşmasını kaldırır ve yeni konuşmayı bunun üzerine miksler. Ekran kartı (GPU) ile yaklaşık video süresi kadar sürer - GPU olmadan ise çok daha uzun zaman alır. Ses kısma (ducking) açık olduğunda, ses seviyesi müziğe ve efektlere uygulanır. Yalnızca konuşma video dosyasına eklendiğinde geçerlidir.", "removingOriginalSpeech": "Orijinal konuşma kaldırılıyor...", "removeOriginalSpeechFailed": "Orijinal konuşma kaldırılamadı - konuşma video dosyasına orijinal konuşma temizlenmeden eklendi.", + "speechRemovalModel": "Model", + "speechRemovalModelDescription": "En iyi kalite, müziğin ve ses efektlerinin çoğunu korur. Hızlı seçenek yaklaşık üç kat daha hızlıdır ancak müziğin biraz daha fazlası kaybolur.", + "speechRemovalBestQuality": "En iyi kalite (Mel-Band RoFormer)", + "speechRemovalFast": "Hızlı (HTDemucs)", + "videoTruncatedWarning": "Yeni video dosyasındaki görüntü {0} süresinden sonra duruyor, ancak orijinal video {1} uzunluğunda - ses devam ederken görüntü donacaktır.\n\nDosya tutuldu. ffmpeg çıktısı için Subtitle Edit veri klasöründeki error-log.txt dosyasına bakın.", "originalVolumePercent": "Orijinal ses düzeyi %", "vadSilenceCompression": "VAD sessizlik sıkıştırması", "vadSilenceCompressionDescription": "Bir klibin kalite kaybı olmadan sığması için konuşmayı hızlandırmak yerine kelimeler arasındaki duraklamaları kısaltır.", "maxSilenceMs": "Maksimum sessizlik (ms)", "highQualityTimeStretch": "Yüksek kaliteli zaman esnetme", - "highQualityTimeStretchDescription": "Varsayılana kıyasla daha doğal duyulan rubberband algoritması ile konuşmayı hızlandırır. FFmpeg içinde librubberband gerektirir; aksi takdirde varsayılan kullanılır.", - "rubberbandInstalled": "(yüklü)", - "rubberbandNotFound": "(FFmpeg içinde bulunamadı)", + "highQualityTimeStretchDescription": "Varsayılana kıyasla daha doğal duyulan rubberband algoritması ile konuşmayı hızlandırır. FFmpeg içinde librubberband gerektirir; aksi takdirde varsayılan kullanılır.", + "rubberbandInstalled": "(yüklü)", + "rubberbandNotFound": "(FFmpeg içinde bulunamadı)", "silencePaddingMs": "Sessizlik payı (ms)", "silencePaddingMsDescription": "Cümleler arasında boşluk bırakmak için her klibin sonuna fazladan sessizlik ekler.", - "outputSampleRate": "Çıktı örnekleme hızı", - "outputSampleRateDescription": "Her klibi yeniden örnekler (örneğin 44100 veya 48000). Orijinal hızı korumak için 0 kullanın.", + "outputSampleRate": "Çıktı örnekleme hızı", + "outputSampleRateDescription": "Her klibi yeniden örnekler (örneğin 44100 veya 48000). Orijinal hızı korumak için 0 kullanın.", "generationFolder": "Oluşturma klasörü", "generationFolderDescription": "Oluşturma sırasında kliplerin yazılacağı yer. Sistem geçici klasörü için boş bırakın. Her çalıştırma kendi alt klasörünü alır.", - "deleteTempFiles": "Kapatırken oluşturulan klipleri sil", + "deleteTempFiles": "Kapatırken oluşturulan klipleri sil", "deleteTempFilesDescription": "Metinden sese penceresi kapandığında oluşturma klasörünü siler. Kaydedilen ses ve video dosyaları korunur.", "edgeTtsRate": "Edge-TTS hızı", "edgeTtsRateDescription": "Konuşma hızı, örneğin \"+50%\" veya \"-30%\". Varsayılan için \"+0%\" kullanın.", @@ -2638,7 +2893,7 @@ "qwen3TtsSettings": "Qwen3 TTS ayarları", "kokoroTtsSettings": "Kokoro TTS ayarları", "chatterboxTtsSettings": "Chatterbox TTS ayarları", - "piperSettings": "Piper ayarları", + "piperSettings": "Piper ayarları", "voiceInstruction": "Ses tasarımı (Karakterizasyon)", "voiceInstructionHint": "İsteğe bağlı - örn. \"Sakin ve dost canlısı bir tonda konuş\"", "voiceGender": "Cinsiyet", @@ -2662,7 +2917,7 @@ "noWebVttVoicesFoundMessage": "WebVTT dosyasında hiçbir (ses) etiketi bulunamadı.", "mergeContinuationLinesPromptTitle": "Ardışık satırlar birleştirilsin mi?", "mergeContinuationLinesPromptMessage": "Bazı satırlar, birden fazla alt yazıya bölünmüş tek bir cümle gibi görünüyor.\n\nSes üretiminden önce bunları birleştirmek, TTS motorunun her bir düşünceyi tek bir nefes grubu olarak seslendirmesini sağlar ve bu da genellikle daha doğal duyulur.\n\nBirleştirmeleri şimdi gözden geçirip uygulamak ister misiniz?", - "skipNoiseLinesPromptTitle": "Ses ve müzik satırları atlansın mı?", + "skipNoiseLinesPromptTitle": "Ses ve müzik satırları atlansın mı?", "skipNoiseLinesPromptMessage": "Bazı satırlar yalnızca ses veya müzik içeriyor - ♪ veya [kapı çarpar] gibi.\n\nKonuşma motorları bu tür satırları yüksek sesle okumaya çalışır ve genellikle kelimeler uydurur.\n\nBu satırları gözden geçirip sessiz bırakmak ister misiniz?", "skipNoiseLinesTitle": "Yalnızca ses veya müzik içeren satırlar", "skipNoiseLinesFoundX": "{0} satır yalnızca ses veya müzik içeriyor - işaretlenen satırlar sessiz bırakılır", @@ -2673,9 +2928,9 @@ "detectSpeakersFoundX": "{0} konuşmacı etiketi bulundu ({1} konuşmacı) - işaretlenen adlar oyuncu olur ve yüksek sesle okunmaz", "detectSpeakersColumnUse": "Kullan", "detectSpeakersSticky": "Adı olmayan satırlar önceki konuşmacıyı devam ettirir", - "subtitleUpdatedFromReviewSingular": "Ses incelemesindeki değişikliklere göre bir satır güncellendi", - "subtitleUpdatedFromReviewPlural": "Ses incelemesindeki değişikliklere göre {0} satır güncellendi", - "subtitleMergedLinesAppliedSingular": "Metinden sese dönüşümdeki bir satır birleştirmesi uygulandı", + "subtitleUpdatedFromReviewSingular": "Ses incelemesindeki değişikliklere göre bir satır güncellendi", + "subtitleUpdatedFromReviewPlural": "Ses incelemesindeki değişikliklere göre {0} satır güncellendi", + "subtitleMergedLinesAppliedSingular": "Metinden sese dönüşümdeki bir satır birleştirmesi uygulandı", "subtitleMergedLinesAppliedPlural": "Metinden sese dönüşümdeki {0} satır birleştirmesi uygulandı" }, "shotChanges": { @@ -2688,9 +2943,11 @@ "timeCodeFormatColon": "Zaman kodu formatı:", "shotChangesList": "Sahne değişimleri listesi", "shotChangesClearQuestion": "Tüm sahne değişimlerini temizlemek istediğinize emin misiniz?", - "deleteSelectedShotChangeQuestion": "Seçili sahne değişimini silmek istediğinize emin misiniz?" + "deleteSelectedShotChangeQuestion": "Seçili sahne değişimini silmek istediğinize emin misiniz?", + "shotChanges": "Çekim değişimleri", + "exportShotChanges": "Çekim değişimlerini dışa aktar" }, - "chapters": { + "chapters": { "title": "Bölümler", "chaptersDotDotDot": "Bölümler...", "chapters": "Bölümler", @@ -2729,7 +2986,7 @@ "chaptersSavedToX": "Bölümler şuraya kaydedildi: {0}", "emptyListCallToAction": "Henüz bölüm yok - video konumunda bir tane ekleyin veya bir videodan ya da dosyadan içe aktarın." }, - "videoOcr": { + "videoOcr": { "title": "Gömülü alt yazıyı OCR ile tara", "scanArea": "Tarama alanı", "scanAreaInfo": "Alt yazıların bulunduğu yeri seçmek için video karesi üzerinde sürükleyin", @@ -2751,17 +3008,18 @@ "runningOcrXY": "OCR çalıştırılıyor... {0}/{1}", "noLinesFoundTitle": "Alt yazı bulunamadı", "noLinesFoundMessage": "Tarama alanında metin bulunamadı; tarama alanını, motoru veya minimum parlaklığı ayarlamayı deneyin.", + "ocrStoppedEarlyMessage": "OCR motoru tüm kareler okunmadan önce durdu, bu nedenle şimdiye kadar bulunan satırlar korundu ve geri kalanı eksik.{0}{0}{1}", "linesFoundX": "{0} satır bulundu", - "refiningTimingXY": "Zamanlama iyileştiriliyor... {0}/{1}", - "fixOcrErrors": "OCR hatalarını düzelt", - "editLineX": "{0}. satırı düzenle", - "downloadDictionaryHint": "Yazım denetimi sözlüğü indir...", - "framesPerSecondHint": "Taranacak saniye başına kare sayısı. 5 değeri normal alt yazıları kapsar; daha yüksek değerler çok kısa satırları yakalar ve gruplamayı sıkılaştırır, ancak OCR süresini artırır.", - "textBrightnessMinimumHint": "Bu değerden daha koyu pikseller alt yazı metni olarak sayılmaz: Kare gruplaması parlak metni takip eder, parlak piksel içermeyen kareler atlanır ve Paddle motoru bu değerden koyu olan her şeyi karartarak kareleri okur. Koyu renkli alt yazı metinleri için 0 olarak ayarlayın.", - "textSimilarityPercentHint": "Ardışık iki OCR sonucunun aynı alt yazı olarak kabul edilip tek bir satırda birleştirilmesi için ne kadar benzer (yüzde olarak) olması gerektiği.", - "maxGapHint": "İki benzer OCR sonucunun hâlâ tek bir alt yazıda birleştirilmesini sağlayan en uzun duraklama süresi - tek karelik kırpmaların önüne geçer. Çok yüksek bir değer, üst üste iki kez gösterilen bir satırı birleştirebilir.", - "minDurationHint": "Ekranda bundan daha kısa süre kalan satırlar OCR hatası/paraziti olarak silinir.", - "dictionaryHint": "OCR düzeltme motoru ve kelime renklendirmesi tarafından kullanılan yazım denetimi sözlüğü: Bilinen kelimeler yeşil, bilinmeyen kelimeler kırmızı görünür.", + "refiningTimingXY": "Zamanlama iyileştiriliyor... {0}/{1}", + "fixOcrErrors": "OCR hatalarını düzelt", + "editLineX": "{0}. satırı düzenle", + "downloadDictionaryHint": "Yazım denetimi sözlüğü indir...", + "framesPerSecondHint": "Taranacak saniye başına kare sayısı. 5 değeri normal alt yazıları kapsar; daha yüksek değerler çok kısa satırları yakalar ve gruplamayı sıkılaştırır, ancak OCR süresini artırır.", + "textBrightnessMinimumHint": "Bu değerden daha koyu pikseller alt yazı metni olarak sayılmaz: Kare gruplaması parlak metni takip eder, parlak piksel içermeyen kareler atlanır ve Paddle motoru bu değerden koyu olan her şeyi karartarak kareleri okur. Koyu renkli alt yazı metinleri için 0 olarak ayarlayın.", + "textSimilarityPercentHint": "Ardışık iki OCR sonucunun aynı alt yazı olarak kabul edilip tek bir satırda birleştirilmesi için ne kadar benzer (yüzde olarak) olması gerektiği.", + "maxGapHint": "İki benzer OCR sonucunun hâlâ tek bir alt yazıda birleştirilmesini sağlayan en uzun duraklama süresi - tek karelik kırpmaların önüne geçer. Çok yüksek bir değer, üst üste iki kez gösterilen bir satırı birleştirebilir.", + "minDurationHint": "Ekranda bundan daha kısa süre kalan satırlar OCR hatası/paraziti olarak silinir.", + "dictionaryHint": "OCR düzeltme motoru ve kelime renklendirmesi tarafından kullanılan yazım denetimi sözlüğü: Bilinen kelimeler yeşil, bilinmeyen kelimeler kırmızı görünür.", "previewPosition": "Ön izleme konumu", "unableToReadVideoTitle": "Video okunamıyor", "unableToReadVideoMessage": "Şuradan video bilgisi okunamadı: {0}", @@ -2771,7 +3029,7 @@ "testOcrRunning": "Geçerli karede OCR test ediliyor...", "testOcrResultX": "Test sonucu: {0}", "testOcrNoTextFound": "Test: Tarama alanında metin bulunamadı", - "engineSettings": "OCR motoru ayarları", + "engineSettings": "OCR motoru ayarları", "engineBuiltIn": "İşletim sistemine yerleşik", "engineExternalServer": "Harici sunucu (Subtitle Edit dışında kurulur ve yönetilir)", "engineCloudApi": "Bulut API'si (API anahtarı gerektirir)", @@ -2779,7 +3037,7 @@ "engineModelsMissing": "Motor yüklendi, modeller eksik", "website": "Web sitesi" }, - "backgroundMusic": { + "backgroundMusic": { "title": "Arka plan müziği oluştur", "generateBackgroundMusicDotDotDot": "Arka plan müziği oluştur...", "preset": "Ön ayar", @@ -2824,7 +3082,7 @@ "mixingBackgroundMusicDotDotDot": "Arka plan müziği karıştırılıyor..." }, "goToVideoPosition": "Video konumuna git", - "goToVideoPositionDotDotDot": "Video konumuna git...", + "goToVideoPositionDotDotDot": "Video konumuna git...", "generateBlankVideoDotDotDot": "Boş video oluştur...", "generateBlankVideoTitle": "Boş video oluştur", "reEncodeVideoForBetterSubtitlingTitle": "Daha iyi alt yazı işlemi için videoyu yeniden kodla", @@ -2832,27 +3090,34 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "İkinci alt yazı dosyasını aç...", "openSecondarySubtitleOnVideoPlayer": "İkinci alt yazı dosyası (video oynatıcıda)", "removeSecondarySubtitleOnVideoPlayer": "İkinci alt yazı dosyasını kaldır", - "editSecondarySubtitleSettings": "İkinci alt yazı ayarlarını düzenle", + "editSecondarySubtitleSettings": "İkinci alt yazı ayarlarını düzenle", "editSecondarySubtitleSettingsDotDotDot": "İkinci alt yazı ayarlarını düzenle...", - "secondarySubtitleRememberSettings": "Bu ayarları hatırla", + "secondarySubtitleRememberSettings": "Bu ayarları hatırla", "secondarySubtitleDoNotShowAgain": "Bu pencereyi bir daha gösterme", - "secondarySubtitleJustifyLines": "Satırları iki yana yasla", - "openRecentVideo": "Son kullanılan videoyu aç", + "secondarySubtitleJustifyLines": "Satırları iki yana yasla", + "openRecentVideo": "Son kullanılan videoyu aç", "clearRecentVideos": "Son kullanılan videoları temizle", "cutVideoTitle": "Videoyu kes", "cutVideoDotDotDot": "Videoyu kes...", - "remuxVideoTitle": "Videoyu remux yap", + "remuxVideoTitle": "Videoyu remux yap", "remuxVideoDotDotDot": "Videoyu remux yap...", "remuxVideoInputVideo": "Girdi videosu:", "remuxVideoMultipleTracksRequiresMkv": "Birden fazla ses veya alt yazı izi MKV kapsayıcısı gerektirir. Çıktı biçimi otomatik olarak .mkv olarak değiştirildi.", "remuxVideoOutputFormat": "Çıktı biçimi:", "remuxVideoOutputFile": "Çıktı dosyası:", "remuxVideoRemuxing": "Video ve ses remux ediliyor...", - "remuxVideoFinalizing": "Çıktı dosyası tamamlanıyor (dizin başa taşınıyor)...", + "remuxVideoFinalizing": "Çıktı dosyası tamamlanıyor (dizin başa taşınıyor)...", "remuxVideoCompleted": "Video başarıyla remux edildi.", "remuxVideoFailed": "Video remux edilemedi.", "remuxVideoPleaseSelectBoth": "Lütfen hem video hem de ses dosyalarını seçin.", "remuxVideoAssRequiresMkv": "ASS/SSA alt yazıları tüm biçimlendirme ve stilleri korumak için MKV kapsayıcısı gerektirir.", + "remuxVideoSccRequiresMov": "Scenarist (.scc) alt yazıları, MOV veya MPG kapsayıcısı gerektiren CEA-608 kapalı alt yazıları (CC) olarak gömülür. Çıktı biçimi otomatik olarak .mov olarak değiştirildi.", + "remuxVideoSccNotWithWebM": "Scenarist (.scc) kapalı alt yazıları (CC), bir .webm dosyasının VP9/AV1 videosunu barındıramayan MOV kapsayıcısına ihtiyaç duyar. .scc dosyasını çıkarın veya başka bir alt yazı biçimine dönüştürün.", + "remuxVideoMpgMaxTwoCaptionTracks": "Bir .mpg dosyası en fazla iki kapalı alt yazı izi (CC1 ve CC3) barındırabilir - geriye bir veya iki tane kalacak şekilde alt yazı dosyalarını çıkarın.", + "remuxVideoMccRequiresMpg": "MacCaption (.mcc) alt yazıları, MPEG-2 videosunda MPG kapsayıcısı gerektiren CEA-608/708 kapalı alt yazıları (CC) olarak gömülür. Çıktı biçimi otomatik olarak .mpg olarak değiştirildi.", + "remuxVideoMpgReencodeVideoX": "Bir .mpg dosyasındaki kapalı alt yazılar (CC) MPEG-2 videosuna ihtiyaç duyuyor, ancak video {0}. Video MPEG-2 olarak yeniden kodlansın mı? Bu işlem daha uzun sürer ve kaliteyi biraz düşürür.", + "remuxVideoFileHasNoAudioX": "\"{0}\" bir ses izi içermediğinden ses kaynağı olarak kullanılamaz.", + "remuxVideoAddingClosedCaptions": "Kapalı alt yazılar (CC) ekleniyor...", "remuxVideoSelectAudioTrack": "Ses izini seç", "remuxVideoSelectAudioTrackFor": "{0} için ses izini seç", "remuxVideoSelectAudioTrackPrompt": "'{0}' dosyası {1} ses izi içeriyor. Lütfen remux edilecek ses izini seçin:", @@ -2862,9 +3127,10 @@ "remuxVideoSubtitleFiles": "Alt yazı dosyaları (isteğe bağlı, gömülü alt yazılar):", "remuxVideoSelectAudioTrackDotDotDot": "Ses izini seç...", "remuxVideoFilesX": "{0} dosya", - "remuxVideoMixAudio": "Sesleri tek bir izde birleştir", + "remuxVideoMixAudio": "Sesleri tek bir izde birleştir", "remuxVideoVolumePercent": "Ses düzeyi %:", "remuxVideoVolumeX": "Ses düzeyi %{0}", + "remuxVideoFastStart": "Web akışı için optimize et (dizini başa taşı - daha yavaş)", "embedSubtitlesDotDotDot": "Gömülü alt yazıları ekle/kaldır...", "generateTimeCodes": "Zaman kodları oluştur", "checkeredImage": "Damalı resim", @@ -2872,9 +3138,9 @@ "cutVideoCutSegments": "Segmentleri kes", "cutVideoMergeSegments": "Segmentleri birleştir", "cutVideoSplitSegments": "Segmentleri ayrı ayrı kaydet", - "cutVideoAlsoCutSubtitle": "Alt yazıyı da kes", + "cutVideoAlsoCutSubtitle": "Alt yazıyı da kes", "cutVideoSubtitleFileGeneratedX": "Alt yazı dosyası oluşturuldu: {0}", - "cutVideoTransition": "Bölümler arası geçiş", + "cutVideoTransition": "Bölümler arası geçiş", "cutVideoTransitionDurationSeconds": "Süre (saniye)", "cutVideoFadeInSeconds": "Başlangıçta siyahtan belirme (saniye)", "cutVideoFadeOutSeconds": "Sonda siyaha kararma (saniye)", @@ -2917,7 +3183,7 @@ "embeddedTrackGeneratingVideoXY": "Video oluşturuluyor... {0}% {1}", "embeddedTrackGeneratingVideo": "Video oluşturuluyor...", "mp4FilesFilter": "MP4 dosyaları", - "embeddedTracksPickVideoHint": "Alt yazı izlerini görmek için bir video dosyası seçin veya buraya bırakın.", + "embeddedTracksPickVideoHint": "Alt yazı izlerini görmek için bir video dosyası seçin veya buraya bırakın.", "viewMatroskaTrackX": "Matroska izini görüntüle - {0}", "resolutionSeparator": "x", "openFromUrlTitle": "Bağlantıdan (URL) video dosyası aç", @@ -2928,15 +3194,15 @@ "openFromUrlDownloadAndOpenDescription": "Videoyu yerel olarak kaydeder ve ardından açar.", "openFromUrlDownloadAndOpenNote": "Ses tanıma ve ses dalgası grafikleri için bu mod gereklidir.", "openFromUrlDownloadingTitle": "Video indiriliyor", - "openFromUrlDownloadSubtitles": "Alt yazıları indir", + "openFromUrlDownloadSubtitles": "Alt yazıları indir", "openFromUrlDownloadVideo": "Videoyu indir", "openFromUrlIncludeAutoGeneratedSubtitles": "Otomatik oluşturulan alt yazıları dahil et (orijinal dil)", - "assaStyleWillBeUsed": "Mevcut ASSA stili kullanılacak\n\nStilleri buradan ayarlamak istiyorsanız\nalt yazı biçimini değiştirin", + "assaStyleWillBeUsed": "Mevcut ASSA stili kullanılacak\n\nStilleri buradan ayarlamak istiyorsanız\nalt yazı biçimini değiştirin", "pickOnlineSubtitleTitle": "İndirilecek alt yazıyı seçin", - "outputSettingsTitle": "Çıktı ayarları", + "outputSettingsTitle": "Çıktı ayarları", "ttsCrispAsrSettingsTitle": "{0} (CrispASR) ayarları", "ttsDownloadEngineTitle": "TTS - Motoru indir", - "indexTts25LicenseTitle": "IndexTTS 2.5 - model lisansı", + "indexTts25LicenseTitle": "IndexTTS 2.5 - model lisansı", "indexTts25LicenseHeader": "IndexTTS 2.5 modeli kendi lisansına sahiptir", "indexTts25LicenseIntro": "audio.cpp motoru Apache-2.0 lisanslıdır, ancak IndexTTS 2.5 model ağırlıkları bilibili tarafından açık kaynak olmayan şartlar altında lisanslanmıştır. Lütfen indirmeden önce ana maddeleri okuyun.", "indexTts25LicenseReadFullText": "Lisansın tamamını oku", @@ -2949,10 +3215,10 @@ "indexTts25EmotionStrength": "Duygu yoğunluğu", "pickOnlineSubtitleFetching": "Alt yazılar indiriliyor...", "pickOnlineSubtitleNoneFound": "Bu bağlantı için alt yazı bulunamadı.", - "forcedAligner": "Zorunlu hizalayıcı", + "forcedAligner": "Zorunlu hizalayıcı", "postProcessing": "Son işleme...", "toggleCurrentSubtitleWhilePlaying": "Oynatma sırasında mevcut alt yazıyı aç/kapat", - "toggleSubtitlesOnVideoPlayer": "Video oynatıcıda alt yazıları aç/kapat", + "toggleSubtitlesOnVideoPlayer": "Video oynatıcıda alt yazıları aç/kapat", "subtitlesOnVideoPlayerOn": "Video oynatıcıda alt yazılar: Açık", "subtitlesOnVideoPlayerOff": "Video oynatıcıda alt yazılar: Kapalı", "onlyMkvCanSupportEmbeddedSubtitleEditing": "Gömülü alt yazıların düzenlenmesi yalnızca Matroska (.mkv, .webm) dosyalarında desteklenmektedir.", @@ -2964,7 +3230,11 @@ "reEncodeGeneratingDone": "Oluşturma işlemi tamamlandı", "reEncodeGeneratedFilesX": "Oluşturulan dosyalar ({0}):", "reEncodeFfmpegParameters": "ffmpeg parametreleri", - "voices": "Sesler", + "analyzingVideoX": "Video analiz ediliyor... %{0} {1}", + "analyzingVideoXofY": "Video analiz ediliyor {0}/{1}... %{2} {3}", + "backgroundImageFileNotSelected": "Arka plan görseli dosyası seçilmedi", + "backgroundImageFileDoesNotExistX": "Arka plan görseli dosyası mevcut değil: {0}", + "voices": "Sesler", "presets": "Ön ayarlar", "talkerX": "Konuşmacı {0}", "baseModel": "Temel model", @@ -2988,17 +3258,17 @@ "guessTimeCodesDotDotDot": "Zaman kodlarını tahmin et...", "seekSilenceDotDotDot": "Sessizlik ara...", "extractAudioDotDotDot": "Sesi dışa aktar...", - "cloneVoiceTo": "Sesi şuraya klonla", + "cloneVoiceTo": "Sesi şuraya klonla", "cloneVoiceNameTitle": "Yeni sesin adı", "cloneVoiceExtractFailed": "Seçili satır için ses çıkarılamadı.", - "lineXHasNoDuration": "{0}. satırın süresi yok (bitiş zamanı başlangıç zamanından sonra değil), bu nedenle çıkarılacak ses yok.", + "lineXHasNoDuration": "{0}. satırın süresi yok (bitiş zamanı başlangıç zamanından sonra değil), bu nedenle çıkarılacak ses yok.", "audioClipsSkippedLinesX": "Bu satırlar için ses çıkarılamadı, bu yüzden atlandı: {0}", "toggleShotChange": "Sahne değişimini aç/kapat", "resetWaveformZoomAndSpeed": "Ses dalgası yakınlaştırmasını ve hızını sıfırla", - "showOriginalSubtitle": "Orijinal alt yazıyı göster", - "timelineGroupTracksBy": "Alt yazı izlerini şuna göre grupla", + "showOriginalSubtitle": "Orijinal alt yazıyı göster", + "timelineGroupTracksBy": "Alt yazı izlerini şuna göre grupla", "timelineShowThumbnails": "Video küçük resimlerini göster", - "showSpeechOnly": "Yalnızca konuşmayı göster (oluşturması yavaş)", + "showSpeechOnly": "Yalnızca konuşmayı göster (oluşturması yavaş)", "isolatingSpeechForWaveformX": "Ses dalgası için konuşma ayrıştırılıyor... {0}", "isolatingSpeechForWaveformFailed": "Ses dalgası için konuşma ayrıştırılamadı - araçlar günlüğüne bakın", "speechOnlyWaveformReady": "Ses dalgası artık yalnızca konuşmayı gösteriyor", @@ -3034,22 +3304,23 @@ "adjustSelectedLinesAndForward": "Seçili satırları ve sonrasını ayarla", "toFrameRate": "Hedef kare hızı", "fromFrameRate": "Kaynak kare hızı", - "videoXFrameRateY": "{0} - {1} fps", + "videoXFrameRateY": "{0} - {1} fps", "adjustAllTimes": "Tüm zamanları ayarla (erken/geç göster)", "showEarlier": "Daha erken göster", "showLater": "Daha geç göster", "setSyncPoint": "Senkronizasyon noktası ayarla", - "setSyncPointViaVideo": "Video üzerinden senkronizasyon noktası ayarla...", + "setSyncPointViaVideo": "Video üzerinden senkronizasyon noktası ayarla...", "syncPointTimeCode": "Senkronizasyon noktası zaman kodu", "syncPoints": "Senkronizasyon noktaları", "pointSync": "Nokta senkronizasyonu", "pointSyncViaOther": "Diğer alt yazı üzerinden nokta senkronizasyonu", - "syncPointCandidateInfo": "Sessizlik süresi {0} saniyeyi geçen satırlar vurgulanır - bunlar genellikle güvenilir eşitleme noktaları oluşturur", + "syncPointCandidateAfterInfo": "{0}+ saniye sessizlik içeren satırlar vurgulanır - bunlar genellikle güvenilir eşitleme noktaları oluşturur", + "gapAfter": "Sonraki boşluk", "adjustAllShortcuts": "Klavye kısayolları:\n\n• Shift + Sol/Sağ: 10 ms taşı\n• Ctrl + Sol/Sağ: 100 ms taşı\n• Alt + Sol/Sağ: 500 ms taşı", - "adjustAllShortcutsFrames": "Klavye kısayolları:\n\n• Shift + Sol/Sağ: 1 kare taşı\n• Ctrl + Sol/Sağ: 10 kare taşı\n• Alt + Sol/Sağ: 1 saniye taşı", + "adjustAllShortcutsFrames": "Klavye kısayolları:\n\n• Shift + Sol/Sağ: 1 kare taşı\n• Ctrl + Sol/Sağ: 10 kare taşı\n• Alt + Sol/Sağ: 1 saniye taşı", "offsetInSeconds": "Saniye cinsinden fark", "speedFactor": "Hız faktörü", - "showEarlierLaterDotDotDot": "Öncekileri/sonrakileri göster..." + "showEarlierLaterDotDotDot": "Öncekileri/sonrakileri göster..." }, "translate": { "translateViaCopyPaste": "Kopyala/yapıştır ile otomatik çeviri", @@ -3064,9 +3335,9 @@ "lineMerge": "Satır birleştirme", "delayInSecondsBetweenRequests": "İstekler arasındaki saniye cinsinden gecikme", "maxBytesPerRequest": "İstek başına maksimum bayt (byte)", - "keepMusicLinesUntranslated": "Müzik simgeleri içindeki satırları çevirme (♪ ... ♪)", + "keepMusicLinesUntranslated": "Müzik simgeleri içindeki satırları çevirme (♪ ... ♪)", "promptText": "Sistem yönergesi (Prompt)", - "resetPromptToDefault": "İstemi varsayılana sıfırla", + "resetPromptToDefault": "İstemi varsayılana sıfırla", "translateEachLineSeparately": "Her satırı ayrı ayrı çevir", "translationError": "Çeviri hatası", "translationFailedMessage": "{0} çevirisi başarısız oldu.", @@ -3078,7 +3349,7 @@ "readyToTranslate": "Çeviriye hazır", "translating": "Çevriliyor...", "translationComplete": "Çeviri tamamlandı", - "translateInPlaceNoOriginal": "Yerinde çevir (özgün metin oluşturulmaz)", + "translateInPlaceNoOriginal": "Yerinde çevir (özgün metin oluşturulmaz)", "translationCancelled": "Çeviri iptal edildi", "swapLanguages": "Kaynak ve hedef dilleri yer değiştir", "xIsAlreadyDownloadedReDownload": "{0} zaten indirilmiş durumda. Yeniden indirilsin mi?", @@ -3099,14 +3370,14 @@ "repeatPenalty": "Tekrar cezası (Repeat penalty)", "maxTokensPerReply": "Yanıt başına en fazla jeton (tokens)", "serverContextSizeTokens": "Sunucu bağlam boyutu (jeton)", - "extraServerParameters": "Ek sunucu parametreleri", + "extraServerParameters": "Ek sunucu parametreleri", "extraServerParametersHint": "Ek llama-server komut satırı bağımsız değişkenleri, örn. \"-ngl 30 --no-mmap\" - yerel sunucu başlatıldığında uygulanır", - "useOnlyExtraServerParameters": "Yalnızca bu parametreleri kullan", + "useOnlyExtraServerParameters": "Yalnızca bu parametreleri kullan", "useOnlyExtraServerParametersHint": "llama-server yazılımını Subtitle Edit'in kendi ince ayarları yerine yukarıdaki parametrelerle başlatın - yalnızca model, ana bilgisayar ve bağlantı noktası ayarlanmaya devam eder", "serverRunningAtX": "Sunucu şurada çalışıyor: {0}", "customPromptHint": "Özel talimatlar ({0} = kaynak dil, {1} = hedef dil); boş = yerleşik komut istemi", - "editTranslationHint": "Düzenlemek için seçili satırın çevirisine tıklayın (Enter kaydeder, Escape iptal eder)", - "llamaCppDownloadEngineAndModelPrompt": "llama.cpp, llama-server motorunun ve bir çeviri modelinin indirilmesini gerektiriyor. Şimdi indirilsin mi?", + "editTranslationHint": "Düzenlemek için seçili satırın çevirisine tıklayın (Enter kaydeder, Escape iptal eder)", + "llamaCppDownloadEngineAndModelPrompt": "llama.cpp, llama-server motorunun ve bir çeviri modelinin indirilmesini gerektiriyor. Şimdi indirilsin mi?", "llamaCppDownloadEnginePrompt": "llama.cpp, llama-server motorunun indirilmesini gerektiriyor. Şimdi indirilsin mi?", "llamaCppDownloadModelPrompt": "llama.cpp, seçilen çeviri modelinin indirilmesini gerektiriyor. Şimdi indirilsin mi?" }, @@ -3151,13 +3422,13 @@ "subtitleTextBoxAndGridFontName": "Alt yazı metin kutusu ve ızgarasında UI yazı tipi", "subtitleGridFontSize": "Alt yazı ızgarasında yazı tipi boyutu", "subtitleGridTextSingleLine": "Izgarada alt yazı metnini tek satır göster", - "subtitleGridTextSingleLineSeparator": "Tek satır ayırıcı (ör.
)", + "subtitleGridTextSingleLineSeparator": "Tek satır ayırıcı (ör.
)", "subtitleGridTextDisplay": "Alt yazı metninin tabloya sığdırılması", "subtitleGridTextDisplayClip": "Kırp (tek satır)", "subtitleGridTextDisplayWrap": "Pencereye sığacak şekilde kaydır", "subtitleGridTextDisplayEllipsis": "Üç nokta ile tek satır", "subtitleGridLiveSpellCheck": "Alt yazı ızgarasında canlı yazım denetimi", - "subtitleGridCenterText": "Alt yazı ızgarasında metni ortala", + "subtitleGridCenterText": "Alt yazı ızgarasında metni ortala", "subtitleGridShowFormatting": "Alt yazı ızgarasında biçimlendirilmiş (HTML/ASSA) metni göster", "showUpDownStartTime": "\"Göster\" için yukarı/aşağı kontrolünü göster", "showUpDownEndTime": "\"Gizle\" için yukarı/aşağı kontrolünü göster", @@ -3165,9 +3436,9 @@ "showUpDownLabels": "Yukarı/aşağı kontrolleri için etiketleri göster (Göster/Gizle/Süre)", "showButtonHints": "Buton ipuçlarını göster", "gridCompactMode": "Izgaralar için kompakt mod kullan", - "gridAlternatingRows": "Izgarada ardışık satır renkleri kullan", - "gridAlternatingRowColor": "Ardışık satır rengi (açık tema)", - "gridAlternatingRowColorDark": "Ardışık satır rengi (koyu tema)", + "gridAlternatingRows": "Izgarada ardışık satır renkleri kullan", + "gridAlternatingRowColor": "Ardışık satır rengi (açık tema)", + "gridAlternatingRowColorDark": "Ardışık satır rengi (koyu tema)", "uiFont": "Arayüz (UI) yazı tipi", "theme": "Tema", "iconTheme": "Simge teması", @@ -3176,7 +3447,7 @@ "showGridLines": "Izgara çizgilerini göster", "showHorizontalLineAboveToolbar": "Araç çubuğunun üzerinde yatay çizgi göster", "bookmarkColor": "Yer imi rengi", - "spellCheckHighlightColor": "Yazım denetimi vurgu rengi", + "spellCheckHighlightColor": "Yazım denetimi vurgu rengi", "singleLineMaxLength": "Tek satır maksimum uzunluğu", "optimalCharsPerSec": "Optimal Kar/sn", "maxCharsPerSec": "Maks Kar/sn", @@ -3185,55 +3456,60 @@ "maxDurationMs": "Maks süre (ms)", "minGapMs": "Min boşluk (ms)", "minGapFrames": "Asgari boşluk (kare sayısı)", - "minGapCalculateDotDotDot": "Kare hızından en küçük boşluğu hesapla...", + "minGapCalculateDotDotDot": "Kare hızından en küçük boşluğu hesapla...", "minGapCalculateTitle": "Alt yazılar arasındaki en küçük boşluk (ms)", "minGapCalculateFrames": "Kare cinsinden en küçük boşluk", "minGapCalculateXFramesAtYGivesZMs": "{1} kare hızında {0} kare {2} milisaniye verir.", "minGapCalculateUseXAsNewGap": "Yeni en küçük boşluk olarak \"{0}\" milisaniye kullanılsın mı?", "maxLines": "Maksimum satır sayısı", "unbreakSubtitlesShortThan": "Şundan kısa alt yazıları birleştir", - "autoBreakLineEndingEarly": "Cümle sonlarında erken otomatik satır böl (.!?)", + "autoBreakLineEndingEarly": "Cümle sonlarında erken otomatik satır böl (.!?)", "autoBreakCommaBreakEarly": "Virgülde erken otomatik satır böl", "autoBreakDashEarly": "Tire işaretinde erken otomatik satır böl (diyaloglar)", "autoBreakUsePixelWidth": "Piksel genişliğine göre otomatik satır böl", "autoBreakPreferBottomHeavy": "Otomatik satır bölmede alt satırı daha uzun tut", - "autoBreakPreferBottomPercent": "Otomatik bölmede alt satır ağırlık yüzdesi", + "autoBreakPreferBottomPercent": "Otomatik bölmede alt satır ağırlık yüzdesi", "useDoNotBreakAfterList": "Sonrasında bölünmeyecekler listesini kullan", "newEmptyDefaultMs": "Varsayılan yeni alt yazı süresi (ms)", - "timeCodeUpDownStepMs": "Zaman artırma/azaltma kademesi (ms)", - "moveSelectedLinesStepMs": "Seçili satırları taşıma kısayol adımı (ms)", - "moveLinesShortenNeighbor": "Satırları taşı: çakışma olmaması için önceki/sonraki satırı kısalt", - "promptBeforeDelete": "Silmeden önce sor", + "timeCodeUpDownStepMs": "Zaman artırma/azaltma kademesi (ms)", + "moveSelectedLinesStepMs": "Seçili satırları taşıma kısayol adımı (ms)", + "moveStartEndStepMs": "Başlangıç/bitiş taşıma kısayolu adımı (ms)", + "moveLinesShortenNeighbor": "Satırları taşı: çakışma olmaması için önceki/sonraki satırı kısalt", + "promptBeforeDelete": "Silmeden önce sor", "rememberPositionAndSize": "Pencere konumunu ve boyutunu hatırla", + "titleBarFullFileName": "Başlık çubuğunda tam dosya yolunu göster", + "showRecentFiles": "Son kullanılan dosyaları göster (yeniden açmak için)", "openLastFileOnStart": "Başlangıçta son kullanılan dosyayı aç", - "autoSave": "Otomatik kaydet (düzenlerken açık olan dosyayı kaydeder)", + "autoSave": "Otomatik kaydet (düzenlerken açık olan dosyayı kaydeder)", "autoBackupOn": "Otomatik yedekleme", "autoBackupIntervalMinutes": "Otomatik yedekleme aralığı (dakika)", "autoBackupDeleteAfterDays": "Otomatik yedek saklama süresi (gün)", - "settingsBackupOn": "Ayarları otomatik yedekle", + "settingsBackupOn": "Ayarları otomatik yedekle", "settingsBackupIntervalDays": "Ayarlar yedekleme aralığı (gün, 0 = her başlangıçta)", "settingsBackupMaxCount": "Saklanacak ayar yedeği sayısı", "autoConvertToUtf8": "Açarken otomatik UTF-8'e dönüştür", "autoTrimWhiteSpace": "Otomatik boşlukları kırp", - "removeBlankLinesWhenOpening": "Bir alt yazı açılırken boş satırları kaldır", + "removeBlankLinesWhenOpening": "Bir alt yazı açılırken boş satırları kaldır", "defaultEncoding": "Varsayılan kodlama", "colorDurationTooShort": "Süre çok kısaysa renklendir", "colorDurationTooLong": "Süre çok uzunsa renklendir", "colorTextTooLong": "Metin çok uzunsa renklendir", "colorTextTooWide": "Metin çok genişse renklendir (piksel)", "colorTextTooManyLines": "2 satırdan fazlaysa renklendir", - "colorTextTooManyLinesX": "{0} satırdan fazlaysa metni renklendir", - "colorCharactersPerSecond": "Çok yüksekse saniyeyi/karakteri renklendir", - "colorWordsPerMinute": "Çok yüksekse dakikayı/kelimeyi renklendir", + "colorTextTooManyLinesX": "{0} satırdan fazlaysa metni renklendir", + "colorCharactersPerSecond": "Çok yüksekse saniyeyi/karakteri renklendir", + "colorWordsPerMinute": "Çok yüksekse dakikayı/kelimeyi renklendir", "colorOverlap": "Zaman kodu çakışmasını renklendir", "colorGapTooShort": "Boşluk çok kısaysa renklendir", "errorBackgroundColor": "Hata arka plan rengi", "waveformDrawGridLines": "Izgara çizgilerini çiz", - "waveformUseSkiaRenderer": "Deneysel hızlı işleyiciyi kullan", - "waveformCenterVideoPositionAlsoWhenPaused": "Duraklatıldığında da video konumunu merkezde tut", + "waveformUseSkiaRenderer": "Deneysel hızlı işleyiciyi kullan", + "waveformCenterVideoPositionAlsoWhenPaused": "Duraklatıldığında da video konumunu merkezde tut", + "waveformSelectCurrentSubtitleWhilePaused": "Duraklatıldığında da mevcut alt yazıyı seç", + "waveformRememberZoom": "Yakınlaştırmayı hatırla (yatay ve dikey)", "waveformShowToolbar": "Araç çubuğunu göster", "waveformShowToolbarEdit": "Araç çubuğunu düzenle...", - "waveformShowToolbarEditLabel": "Araç çubuğu ögeleri", + "waveformShowToolbarEditLabel": "Araç çubuğu ögeleri", "waveformSpectrogramCombinedWaveformHeight": "Ses dalgası/spektrogram birleşik, ses dalgası yüksekliği %", "waveformFocusTextboxAfterInsertNew": "Yeni ekledikten sonra metin kutusuna odaklan", "waveformInvertMouseWheel": "Fare tekerleğini tersine çevir", @@ -3244,11 +3520,11 @@ "waveformMouseWheelStepMilliseconds": "{0} ms", "waveformSnapToShotChanges": "Sahne değişimlerine yasla", "waveformSnapToFrames": "Karelere hizala", - "waveformSnapToShotChangesPixels": "Sürüklerken hizalama uzaklığı (piksel)", + "waveformSnapToShotChangesPixels": "Sürüklerken hizalama uzaklığı (piksel)", "waveformSnapToShotChangeStartMaxSeconds": "En yakın sahne değişimine hizala: en fazla başlangıç uzaklığı (saniye)", "waveformSnapToShotChangeEndMaxSeconds": "En yakın sahne değişimine hizala: en fazla bitiş uzaklığı (saniye)", "waveformSnapToShotChangeSameShotEndMaxSeconds": "En yakın sahne değişimine hizala: başlangıç ve bitiş aynı kesmeyi paylaştığında en fazla bitiş uzaklığı (saniye)", - "waveformGuessStartOffsetMs": "Ses dalga şeklinden başlangıç zamanını tahmin et: başlangıcı şu kadar önceye koy (ms)", + "waveformGuessStartOffsetMs": "Ses dalga şeklinden başlangıç zamanını tahmin et: başlangıcı şu kadar önceye koy (ms)", "waveformGuessEndOffsetMs": "Ses dalga şeklinden bitiş zamanını tahmin et: bitişi şu kadar sonraya koy (ms)", "waveformShotChangesAutoGenerate": "Sahne değişimlerini otomatik oluştur", "waveformTextFontSize": "Ses dalgası metin yazı tipi boyutu", @@ -3258,15 +3534,15 @@ "waveformBackgroundColor": "Ses dalgası arka plan rengi", "waveformSelectedColor": "Ses dalgası seçim rengi", "downloadFfmpeg": "ffmpeg indir", - "fixCommonErrorsSkipStep1": "Ortak hataları düzelt: 1. adımı atla (düzeltmeleri seç)", + "fixCommonErrorsSkipStep1": "Ortak hataları düzelt: 1. adımı atla (düzeltmeleri seç)", "showPluginsMenu": "Eklentiler menüsünü göster", "proxyAddress": "Proxy adresi", "password": "Şifre", - "proxyDomain": "Etki alanı", + "proxyDomain": "Etki alanı", "proxyUseSystemCredentials": "Sistem kimlik bilgilerini kullan", "proxyBypassList": "Vekil sunucuyu şu adresler için devre dışı bırak", "proxyBypassListHint": "Doğrudan bağlanacak noktalı virgülle ayrılmış ana bilgisayar adları, örn. \"dahili.sirket.com;ornek.org\"", - "updates": "Güncellemeler", + "updates": "Güncellemeler", "checkForUpdatesOnStartup": "Uygulama başladığında güncellemeleri kontrol et", "checkForUpdatesChannel": "Bildirilecek sürümler", "checkForUpdatesChannelStable": "Yalnızca kararlı sürümler", @@ -3274,28 +3550,29 @@ "defaultFormat": "Varsayılan format", "defaultSaveAsFormat": "Varsayılan \"Farklı kaydet\" formatı", "favoriteSubtitleFormats": "Favori alt yazı formatları", - "favoriteLanguages": "Favori diller", - "webVttUseXTimestampMap": "WebVTT: X-TIMESTAMP-MAP kullan (yükleme sırasında zaman kodlarını ötele)", - "assaAutoSetResolution": "ASSA: Bir video açıldığında çözünürlüğü (PlayResX/PlayResY) videodan ayarla", + "favoriteLanguages": "Favori diller", + "webVttUseXTimestampMap": "WebVTT: X-TIMESTAMP-MAP kullan (yükleme sırasında zaman kodlarını ötele)", + "assaAutoSetResolution": "ASSA: Bir video açıldığında çözünürlüğü (PlayResX/PlayResY) videodan ayarla", "assaAutoSetResolutionPrompt": "ASSA: Çözünürlüğü videoya uyarlamak için değiştirmeden önce sor (aksi takdirde otomatik olarak yeniden ölçeklendir)", "videoControls": "Video denetimleri", - "videoControlsEdit": "Video denetimlerini düzenle...", + "videoControlsEdit": "Video denetimlerini düzenle...", "videoControlsPositionText": "Konum / süre metni", - "videoControlsVideoFileName": "Video dosyası adı", + "videoControlsVideoFileName": "Video dosyası adı", "videoControlsPlayerName": "Video oynatıcı adı", "fullscreenHideControls": "Tam ekranda video kontrollerini gizle", - "showSecondarySubtitleDialog": "İkinci bir alt yazı dosyası açılırken biçem penceresini göster", - "rememberSecondarySubtitleFile": "İkinci alt yazı dosyasını hatırla", + "showSecondarySubtitleDialog": "İkinci bir alt yazı dosyası açılırken biçem penceresini göster", + "rememberSecondarySubtitleFile": "İkinci alt yazı dosyasını hatırla", "autoOpenVideoFile": "Alt yazı açıldığında video dosyasını otomatik aç", "downloadMpv": "mpv indir", "downloadVlc": "VLC indir", "allowSingleLetterShortcutsInTextbox": "Metin kutusunda tek harfli kısayollara izin ver", - "allowTextNavigationShortcutsInTextbox": "Metin kutusunda metin gezinme kısayollarına (Ctrl+Sol/Sağ, Home/End) izin ver", - "spellCheckEnglishTreatInApostropheAsIng": "Yazım denetimi: 'in'' ile biten kelimeleri 'ing' olarak işle (Yalnızca İngilizce)", + "allowTextNavigationShortcutsInTextbox": "Metin kutusunda metin gezinme kısayollarına (Ctrl+Sol/Sağ, Home/End) izin ver", + "spellCheckEnglishTreatInApostropheAsIng": "Yazım denetimi: 'in'' ile biten kelimeleri 'ing' olarak işle (Yalnızca İngilizce)", "goToLineNumberSetsVideoPosition": "Satır numarasına git video konumunu da ayarlar", "adjustAllTimesRememberLineSelectionChoice": "Tüm zamanları ayarla, satır seçim tercihini hatırla", - "mergeKeepEndTime": "Satırları birleştir: Bitiş zamanını koru (sonraki alt yazıyla üst üste binmeye izin ver)", + "mergeKeepEndTime": "Satırları birleştir: Bitiş zamanını koru (sonraki alt yazıyla üst üste binmeye izin ver)", "mergeKeepEndTimeOnlyAssa": "Satırları birleştir: Bitiş zamanını yalnızca \"Advanced Sub Station Alpha\" için koru", + "mergeAutoBreak": "Satırları birleştir: birleştirilen metni otomatik satırla (kapalı, satırların kendi satır sonlarını korur)", "filesAndLogs": "Dosyalar ve günlükler", "showErrorLogFile": "Hata günlüğünü göster", "showToolsLogFile": "Whisper günlüğünü göster", @@ -3304,6 +3581,7 @@ "showAssaLayer": "ASSA katman kutusunu göster", "waveformCursorColor": "Ses dalgası imleç/kafa rengi", "waveformShotChangeColor": "Ses dalgası sahne değişimi rengi", + "waveformGridColor": "Ses dalgası ızgara rengi", "waveformParagraphLeftColor": "Ses dalgası sol kenarlık rengi", "waveformParagraphRightColor": "Ses dalgası sağ kenarlık rengi", "waveformFancyHighColor": "Ses dalgası süslü yüksek rengi", @@ -3331,32 +3609,37 @@ "resetSyntaxColoring": "Söz dizimi renklendirmeyi sıfırla", "resetWaveform": "Ses dalgasını sıfırla", "resetRules": "Kuralları sıfırla", - "useFrameMode": "Kare modunu kullan (ss.dd.sn.kk)", + "timeCodeMode": "Zaman kodu modu", + "timeCodeModeTime": "Zaman (ss:dd:sn,ms)", + "timeCodeModeFrames": "Kareler (ss:dd:sn:kk)", + "timeCodeModeFrameNumbers": "Kare numaraları", + "frameModeSnapToVideoFrames": "Zamanları video karelerine göre kaydet (her saniyedeki karelere göre değil)", "textBoxLimitNewLines": "Alt yazı metin kutusundaki satır sayısını sınırla", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - Yazılımsal oluşturma (yavaş)", + "mpvMetalRendering": "libmpv - Metal (deneysel, yeniden başlatma gerekir)", "mpvWidRendering": "libmpv - Yerel Pencere ID oluşturma (Windows/Linux'ta daha hızlı)", "waveFormsAndSpectrogramFoldersContainsX": "\"Ses dalgaları\" ve \"spektrogram\" klasörleri {0} içeriyor", "deleteWaveformAndSpectrogramFoldersQuestion": "\"Ses dalgaları\" ve \"Spektrogram\" dosyaları silinsin mi?", "waveformGenerateSpectrogram": "Spektrogram oluştur", - "waveformAutoGenerate": "Bir video açıldığında ses dalgasını otomatik oluştur", + "waveformAutoGenerate": "Bir video açıldığında ses dalgasını otomatik oluştur", "waveformSpectrogramMode": "Spektrogram modu", "waveformRightClickSelectsSubtitle": "Sağ tıklamada alt yazıyı seç", "waveformDrawStyle": "Ses dalgası çizim stili", - "waveformExtractAudioFormat": "Ses çıkarma biçimi", + "waveformExtractAudioFormat": "Ses çıkarma biçimi", "waveformExtractAudioSampleRate": "Ses çıkarma örnekleme hızı", "waveformExtractAudioSampleRateOriginal": "Orijinal (kaynağı koru)", "waveformExtractAudioBitRate": "Ses çıkarma bit hızı (MP3/M4A)", - "ffmpegUseCenterChannelOnly": "5.1 ses için yalnızca ön orta kanalı kullan (FFmpeg)", + "ffmpegUseCenterChannelOnly": "5.1 ses için yalnızca ön orta kanalı kullan (FFmpeg)", "vlcWidRendering": "libVLC - Yerel Pencere ID oluşturma", - "ffmpegSoftwareRendering": "FFmpeg", + "ffmpegSoftwareRendering": "FFmpeg", "downloadFfmpegLibs": "FFmpeg kitaplıklarını indir (FFmpeg video oynatıcısı için)", "subtitleGridEnterKeyAction": "Alt yazı ızgarası Enter tuşu eylemi", "subtitleSingleClickAction": "Alt yazı ızgarası tek tıklama eylemi", "subtitleDoubleClickAction": "Alt yazı ızgarası çift tıklama eylemi", "subtitleGridCenterSelectedRow": "Alt yazı tablosunda öncekine/sonrakine geçerken satırı ortala", "saveAsBehavior": "\"Farklı kaydet\" davranışı", - "defaultSaveLocation": "Varsayılan kaydetme konumu", + "defaultSaveLocation": "Varsayılan kaydetme konumu", "defaultSaveLocationSourceFileFolder": "Alt yazı/video dosyasının klasörü", "defaultSaveLocationLastUsedFolder": "Son kullanılan klasör", "defaultSaveLocationVideoFileFolder": "Video dosyası klasörü", @@ -3369,16 +3652,16 @@ "gridGoToSubtitleAndPause": "Alt yazıya git ve duraklat", "gridGoToSubtitleAndPlay": "Alt yazıya git ve oynat", "gridGoToSubtitleAndPauseAndFocusTextBox": "Alt yazıya git, duraklat ve metin kutusuna odaklan", - "gridGoToSubtitleAndPlayAndFocusTextBox": "Alt yazıya git, oynat ve metin kutusuna odaklan", - "subtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "Video konumuna git, geçerliyi oynat ve duraklat", + "gridGoToSubtitleAndPlayAndFocusTextBox": "Alt yazıya git, oynat ve metin kutusuna odaklan", + "subtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "Video konumuna git, geçerliyi oynat ve duraklat", "subtitleListActionVideoGoToPositionMinus1SecAndPause": "Video konumuna git - 1 sn ve duraklat", "subtitleListActionVideoGoToPositionMinusHalfSecAndPause": "Video konumuna git - 0,5 sn ve duraklat", "subtitleListActionVideoGoToPositionMinus1SecAndPlay": "Video konumuna git - 1 sn ve oynat", "subtitleGridFormattingNone": "Biçimlendirme yok", "subtitleGridFormattingShowFormatting": "Biçimlendirmeyi göster", "subtitleGridFormattingShowTags": "Etiketleri göster", - "subtitleGridFormattingHideTags": "Etiketleri gizle", - "subtitleGridFormattingShowFormattingKeepTags": "Biçimlendirmeyi göster, görsel olmayan etiketleri koru", + "subtitleGridFormattingHideTags": "Etiketleri gizle", + "subtitleGridFormattingShowFormattingKeepTags": "Biçimlendirmeyi göster, görsel olmayan etiketleri koru", "waveformParagraphBackgroundColor": "Ses dalgası alt yazı arka plan rengi", "waveformParagraphSelectedBackgroundColor": "Ses dalgası seçili alt yazı arka plan rengi", "waveformAllowOverlap": "Çakışmaya izin ver (taşırken/boyutlandırırken)", @@ -3393,39 +3676,45 @@ "splitOddLineActionWeightBottom": "Alta ağırlık ver", "splitOddLinesAction": "Tek sayılı satırları bölme eylemi", "ocrUseWordSplitList": "OCR: Kelime bölme listesini kullan", - "ocrGuessUnknownWords": "OCR: Bilinmeyen kelimeleri tahmin etmeye çalış", - "spellCheckRememberUseAlwaysList": "Yazım denetimi: \"Her zaman kullan\" listesini hatırla", + "ocrGuessUnknownWords": "OCR: Bilinmeyen kelimeleri tahmin etmeye çalış", + "spellCheckRememberUseAlwaysList": "Yazım denetimi: \"Her zaman kullan\" listesini hatırla", "fixShortDisplayTimesAllowMoveStartTime": "Ortak hataları düzelt: Kısa görüntülenme sürelerini düzeltmek başlangıç zamanını kaydırabilir", "speechToTextSelectedLinesPromptFirstTimeOnly": "Sesten metne: Seçili satırlar için dil/motor tercihini yalnızca ilk seferde sor", "multipleReplaceShowDotDotDotButtons": "Çoklu değiştir: Bağlam menüsü butonlarını göster", "gridFocusTextboxAfterInsertNew": "Izgara: Yeni alt yazı ekledikten sonra metin kutusuna odaklan", - "undoRedoGoToChangedLine": "Geri al/yinele: Değiştirilen satıra (ve video konumuna) git", - "musicSymbol": "Müzik sembolü", - "musicSymbolsToReplace": "Değiştirilecek müzik sembolleri (virgülle ayrılmış)", + "undoRedoGoToChangedLine": "Geri al/yinele: Değiştirilen satıra (ve video konumuna) git", + "musicSymbol": "Müzik sembolü", + "musicSymbolsToReplace": "Değiştirilecek müzik sembolleri (virgülle ayrılmış)", "textToSpeechPromptMergeContinuationLines": "Metinden sese: Devam eden satırları birleştirmek için sor", - "textToSpeechPromptSkipNoiseLines": "Metinden konuşmaya: Ses/müzik satırlarını atlama istemi", + "textToSpeechPromptSkipNoiseLines": "Metinden konuşmaya: Ses/müzik satırlarını atlama istemi", "textToSpeechPromptDetectSpeakers": "Metinden konuşmaya: Metindeki konuşmacı adlarını algılama istemi", "useFocusedButtonBackgroundColor": "Odaklanmış buton arka plan rengini kullan", "focusedButtonBackgroundColor": "Odaklanmış buton arka plan rengi", "forceCrLfOnSave": "Kaydederken CR+LF zorla (metin al yazı dosyaları)", - "showFormatLimitWarning": "Satırlar biçim sınırlarını aştığında kaydederken uyar (ör. SCC satır başına 32 karakter)", + "linuxClipboardUseExternalTool": "Metni xclip/wl-copy ile kopyala (aksanlı karakterleri korur)", + "showFormatLimitWarning": "Satırlar biçim sınırlarını aştığında kaydederken uyar (ör. SCC satır başına 32 karakter)", "textBoxButtonShowAutoBreak": "Metin kutusu: Otomatik bölme butonunu göster", "textBoxButtonShowUnbreak": "Metin kutusu: Birleştirme butonunu göster", "textBoxButtonShowItalic": "Metin kutusu: İtalik butonunu göster", "textBoxButtonShowColor": "Metin kutusu: Renk butonunu göster", "textBoxButtonShowRemoveFormatting": "Metin kutusu: Biçimlendirmeyi kaldır butonunu göster", - "textBoxButtonShowAiAssistant": "Metin kutusu: Yapay zekâ asistanı butonunu göster", + "textBoxButtonShowAiAssistant": "Metin kutusu: Yapay zekâ asistanı butonunu göster", "waveformSingleClickAction": "Ses dalgası tek tıklama eylemi", "waveformDoubleClickAction": "Ses dalgası çift tıklama eylemi (tek tıklama eyleminden sonra)", "allSettings": "Tüm ayarlar", "uiScale": "Arayüz ölçeği (%)", - "fontScale": "Yazı tipi ölçeği (%)", + "fontScale": "Yazı tipi ölçeği (%)", + "textSelectionOpacity": "Metin seçimi matlığı (%)", "waveformToolbarItems": "Ses dalgası araç çubuğu ögeleri", "matchIconColorToDarkTheme": "Simge rengini koyu tema ön plan rengiyle eşleştir", "subtitlePreviewProperties": "Alt yazı ön izleme özellikleri", - "usePositionFromSubtitleFile": "Alt yazı dosyasındaki konumu kullan (TTML/PAC/EBU STL)", - "marginIsPartOfSubtitleArea": "Kenar boşluğu alt yazı alanına dahildir", - "textJustify": "Satırları iki yana yasla", + "usePositionFromSubtitleFile": "Alt yazı dosyasındaki konumu kullan (TTML/PAC/EBU STL)", + "marginIsPartOfSubtitleArea": "Kenar boşluğu alt yazı alanına dahildir", + "textJustify": "Satırları iki yana yasla", + "deinterlace": "Videodaki taramayı kaldır (Deinterlace)", + "deinterlaceOff": "Kapalı", + "deinterlaceAuto": "Otomatik (yalnızca taranmış kareler)", + "deinterlaceAlways": "Her zaman", "pixelWidthInfo": "Yeşil çizgiler = maks. genişlik sınırı | Kırmızı alan = metin sınırı aşıyor", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3435,7 +3724,7 @@ "waveformSaveAsCustomTheme": "Özel tema olarak kaydet...", "waveformLoadThemeDotDotDot": "Tema yükle...", "waveformExportThemeDotDotDot": "Temayı dışa aktar...", - "waveformSaveCustomThemeTitle": "Özel temayı kaydet", + "waveformSaveCustomThemeTitle": "Özel temayı kaydet", "waveformThemeFileType": "Subtitle Edit ses dalgası teması", "waveformThemeHighContrast": "Yüksek karşıtlık", "waveformThemeOceanBlue": "Okyanus mavisı", @@ -3449,37 +3738,61 @@ "searchShortcuts": "Kısayollarda ara...", "categorySubtitleGridAndTextBox": "Alt yazı listesi ve metin kutusu", "categorySubtitleGrid": "Alt yazı listesi", - "categoryTextBox": "Metin kutusu", - "categoryFile": "Dosya", + "categoryTextBox": "Metin kutusu", + "categoryFile": "Dosya", "categoryVideo": "Video", "categorySync": "Senkronizasyon", "categoryAi": "Yapay Zekâ", + "categoryCustom": "Özel", + "editCustomShortcut": "Özel kısayolu düzenle", + "customShortcutTextBoxKeyHint": "Burada Ctrl/Alt ile bir tuş kullanın - sade bir tuş artık metin kutusuna yazı yazmaz.", + "customShortcutNumberX": "Özel kısayol #{0}", + "customShortcutNumberXY": "Özel kısayol #{0}: {1}", + "customShortcutStep": "Adım", + "customShortcutSteps": "Adımlar", + "customShortcutStepRunCommand": "Komut çalıştır", + "customShortcutStepInsertText": "Metin ekle", + "customShortcutStepReplace": "Bul ve değiştir", + "customShortcutInsertAtCursor": "Imleç konumunda", + "customShortcutInsertAtStart": "Metin başlangıcında", + "customShortcutInsertAtEnd": "Metin sonunda", + "customShortcutSummaryRunCommandX": "Çalıştır: {0}", + "customShortcutSummaryInsertXY": "\"{0}\" ekle ({1})", + "customShortcutSummaryReplaceXY": "\"{0}\" metnini \"{1}\" ile değiştir", + "customShortcutSummaryReplaceRegexXY": "Düzenli ifade (regex) \"{0}\" metnini \"{1}\" ile değiştir", + "customShortcutPickCommand": "Lütfen çalıştırılacak bir komut seçin.", + "customShortcutEnterText": "Lütfen eklenecek metni girin.", + "customShortcutEnterFind": "Lütfen aranacak metni girin.", + "customShortcutInvalidRegexX": "Geçersiz düzenli ifade (regex): {0}", + "customShortcutStepsHint": "Adımlar yukarıdan aşağıya doğru çalışır. Metin adımları seçili satırlarda çalışır; pencere açan komutlar ise pencere kapandıktan sonra devam eder.", "activeIn": "Etkin olduğu yer", "activeInEverywhere": "Her yer", "generalMergeSelectedLinesAndUnbreak": "Seçili satırları birleştir ve tek satır yap", "generalMergeSelectedLinesAndUnbreakCjk": "Seçili satırları birleştir ve boşluksuz tek satır yap (CJK)", - "generalUnbreakNoSpaceCjk": "Boşluksuz birleştir (CJK)", + "generalUnbreakNoSpaceCjk": "Boşluksuz birleştir (CJK)", + "generalToggleBreak": "Satır bölmeyi/birleştirmeyi değiştir", "generalMergeSelectedLinesBilingual": "Seçili satırları iki dilli birleştir", "generalToggleTranslationMode": "Çeviri modunu aç/kapat", - "generalToggleTranslationAndOriginalInPreviews": "Video/ses ön izlemesinde çeviri ve orijinali değiştir", + "generalToggleTranslationAndOriginalInPreviews": "Video/ses ön izlemesinde çeviri ve orijinali değiştir", "generalChooseLayout": "Düzen seç", "generalGoToNextSubtitle": "Sonraki alt yazıya git", - "generalGoToNextSubtitlePlayTranslate": "Sonraki alt yazıya git (çeviriyi oynat)", - "generalGoToNextSubtitleCursorAtEnd": "Sonraki alt yazıya git ve imleci sona yerleştir", + "generalGoToNextSubtitlePlayTranslate": "Sonraki alt yazıya git (çeviriyi oynat)", + "generalGoToNextSubtitleCursorAtEnd": "Sonraki alt yazıya git ve imleci sona yerleştir", "generalGoToPrevSubtitle": "Önceki alt yazıya git", - "generalGoToPrevSubtitlePlayTranslate": "Önceki alt yazıya git (çeviriyi oynat)", - "generalGoToFirstLine": "İlk satıra git", + "generalGoToPrevSubtitlePlayTranslate": "Önceki alt yazıya git (çeviriyi oynat)", + "generalGoToFirstLine": "İlk satıra git", "generalGoToLastLine": "Son satıra git", "alsoSetVideoPosition": "Video konumunu da ayarla", "generalGoToVideoPosition": "Video konumuna git", "generalToggleItalic": "İtaliği aç/kapat", "generalToggleBold": "Kalını aç/kapat", - "generalToggleUnderline": "Altı çizili durumunu değiştir", - "generalToggleBox": "Kutu durumunu değiştir (EBU STL)", + "generalToggleUnderline": "Altı çizili durumunu değiştir", + "generalToggleBox": "Kutu durumunu değiştir (EBU STL)", "fileOpen": "Aç", "fileOpenKeepVideo": "Aç (videoyu koru)", "fileSave": "Kaydet", "fileSaveAs": "Farklı kaydet", + "fileSaveOriginal": "Orijinalini kaydet", "fileCompare": "Karşılaştır", "fileStatistics": "İstatistikler", "fileImportPlainText": "Düz metin içe aktar", @@ -3491,7 +3804,7 @@ "fillSelectedLinesWithClipboard": "Seçili satırları panodaki metinle doldur", "listInverseSelection": "Seçimi tersine çevir", "listDeleteSelection": "Seçimi sil", - "deleteSelectionEverywhere": "Seçimi sil (her yerden)", + "deleteSelectionEverywhere": "Seçimi sil (her yerden)", "rippleDeleteSelection": "Seçimi sil ve boşluğu kapat (Ripple delete)", "assigned": "Atanmış", "unassigned": "Atanmamış", @@ -3500,6 +3813,7 @@ "detectKey": "Tuşu algıla", "control": "Kontrol", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Shift", "controlMac": "⌃", @@ -3510,26 +3824,31 @@ "resetShortcutsDetail": "Tüm kısayolları varsayılan değerlere sıfırlamak istiyor musunuz?", "togglePlayPause": "Oynat/Duraklat aç/kapat", "toggleLockTimeCodes": "Zaman kodlarını kilitlemeyi aç/kapat", + "toggleTimeCodeMode": "Zaman kodu modunu değiştir (zaman/kareler/kare numaraları)", + "toggleScreenPrivacy": "Ekran gizliliğini değiştir (dosya adlarını gizle, ardından metinleri de gizle)", + "screenPrivacyFileNamesHidden": "Ekran gizliliği: dosya adları gizlendi", + "screenPrivacyFileNamesAndTextsHidden": "Ekran gizliliği: dosya adları ve metinler gizlendi", + "screenPrivacyOff": "Ekran gizliliği: kapalı", "duplicateSelectedLines": "Seçili satırları çoğalt", "sourceView": "Kaynak görünümü", "addOrEditBookmark": "Yer imi ekle veya düzenle", "toggleBookmark": "Yer imini aç/kapat (seçili satırlar, metin yok)", - "toggleForcedSelectedLines": "Zorunlu durumunu değiştir (seçili satırlar)", + "toggleForcedSelectedLines": "Zorunlu durumunu değiştir (seçili satırlar)", "goToNextBookmark": "Sonraki yer imine git", - "clearBookmarks": "Yer imlerini temizle", - "goToNextEmptyLine": "Sonraki boş satıra git", + "clearBookmarks": "Yer imlerini temizle", + "goToNextEmptyLine": "Sonraki boş satıra git", "toggleWaveformToolbar": "Ses dalgası araç çubuğunu aç/kapat", - "toggleSubtitleGridFormatting": "Izgara biçimlendirmesini değiştir (biçimlendirmeyi göster/etiketleri göster/biçimlendirme yok)", + "toggleSubtitleGridFormatting": "Izgara biçimlendirmesini değiştir (biçimlendirmeyi göster/etiketleri göster/biçimlendirme yok)", "waveformSetStartAndSetEndOfPreviousMinusGap": "Başlangıcı ayarla ve öncekini boşluk kadar geri çek", "waveformSetEndAndStartOfNextAfterGap": "Bitişi ayarla ve sonrakini boşluk kadar ileri taşı", "waveformSetEndAndStartOfNextAfterGapAndGoToNext": "Bitişi ayarla, sonrakini boşluk kadar ileri taşı ve sonrakine git", "moveLastWordToNextSubtitle": "Son kelimeyi sonraki alt yazıya taşı", "moveLastWordFromFirstLineDownCurrentSubtitle": "Son kelimeyi ilk satırdan aşağı taşı (mevcut alt yazı)", - "moveFirstWordFromNextLineUpCurrentSubtitle": "İlk kelimeyi sonraki satırdan yukarı taşı (mevcut alt yazı)", - "moveTextFromCursorToNextAndGoToNext": "İmleçten sonraki metni sonraki alt yazıya taşı ve sonrakine geç", - "moveTextFromCursorToNextAndGoToNextAndPlay": "İmleçten sonraki metni sonraki alt yazıya taşı, sonrakine geç ve oynat", - "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "İmleç konumundan sonraki metni sonraki alt yazıya taşı, sonrakine git, oynat ve sonunda duraklat", - "breakAtFirstSpaceFromCursor": "Imleç konumundan sonraki ilk boşluktan böl", + "moveFirstWordFromNextLineUpCurrentSubtitle": "İlk kelimeyi sonraki satırdan yukarı taşı (mevcut alt yazı)", + "moveTextFromCursorToNextAndGoToNext": "İmleçten sonraki metni sonraki alt yazıya taşı ve sonrakine geç", + "moveTextFromCursorToNextAndGoToNextAndPlay": "İmleçten sonraki metni sonraki alt yazıya taşı, sonrakine geç ve oynat", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "İmleç konumundan sonraki metni sonraki alt yazıya taşı, sonrakine git, oynat ve sonunda duraklat", + "breakAtFirstSpaceFromCursor": "Imleç konumundan sonraki ilk boşluktan böl", "breakAtFirstSpaceFromCursorAndGoToNext": "Imleç konumundan sonraki ilk boşluktan böl ve sonrakine geç", "toggleFocusGridAndWaveform": "Alt yazı ızgarası ve ses dalgası arasında odak değiştir", "toggleFocusTextBoxAndWaveform": "Metin kutusu ve ses dalgası arasında odak değiştir", @@ -3537,28 +3856,29 @@ "goToPreviousLineAndSetVideoPosition": "Önceki alt yazıya git ve video konumunu ayarla", "goToPreviousLineFromVideoPosition": "Önceki alt yazıya git (mevcut video konumundan)", "goToNextLineFromVideoPosition": "Sonraki alt yazıya git (mevcut video konumundan)", - "videoGoToPreviousTimeCode": "Önceki zaman koduna git", - "videoGoToNextTimeCode": "Sonraki zaman koduna git", + "videoGoToPreviousTimeCode": "Önceki zaman koduna git", + "videoGoToNextTimeCode": "Sonraki zaman koduna git", "goToNextLineAndSetVideoPosition": "Sonraki alt yazıya git ve video konumunu ayarla", "textBoxDeleteForward": "Metin kutusu: Seçimi veya sonraki karakteri sil (ileri silme)", "textBoxCut": "Metin kutusu: Kes", "textBoxCut2": "Metin kutusu: Kes (alternatif)", "textBoxPaste": "Metin kutusu: Yapıştır", - "textBoxPaste2": "Metin kutusu: Yapıştır (alternatif)", + "textBoxPaste2": "Metin kutusu: Yapıştır (alternatif)", "textBoxCopy": "Metin kutusu: Kopyala", - "textBoxCopy2": "Metin kutusu: Kopyala (alternatif)", + "textBoxCopy2": "Metin kutusu: Kopyala (alternatif)", "textBoxSelectAll": "Metin kutusu: Tümünü seç", "subtitleGridCut": "Alt yazı ızgarası: Kes", "subtitleGridCopy": "Alt yazı ızgarası: Kopyala", "subtitleGridPaste": "Alt yazı ızgarası: Yapıştır", - "listViewColumnDeleteText": "Sütun, metni sil", - "listViewColumnDeleteTextAndShiftUp": "Sütun, metni sil ve yukarı kaydır", - "listViewColumnInsertText": "Sütun, metin ekle", - "listViewColumnPaste": "Sütun, yapıştır", - "listViewColumnTextUp": "Sütun, metni yukarı taşı", - "listViewColumnTextDown": "Sütun, metni aşağı taşı", - "autoTranslateSelectedLines": "Seçili satırları otomatik çevir...", - "setAssaResolution": "ASSA çözünürlüğünü ayarla (PlayResX/PlayResY)", + "listViewColumnDeleteText": "Sütun, metni sil", + "listViewColumnDeleteTextAndShiftUp": "Sütun, metni sil ve yukarı kaydır", + "listViewColumnInsertText": "Sütun, metin ekle", + "listViewColumnPaste": "Sütun, yapıştır", + "listViewColumnTextUp": "Sütun, metni yukarı taşı", + "listViewColumnTextDown": "Sütun, metni aşağı taşı", + "autoTranslateSelectedLines": "Seçili satırları otomatik çevir...", + "autoTranslateSelectedLinesNoPrompt": "Seçili satırları otomatik çevir (istem olmadan, son motoru/dilleri kullan)", + "setAssaResolution": "ASSA çözünürlüğünü ayarla (PlayResX/PlayResY)", "setShortcutForX": "\"{0}\" için kısayol ayarla", "commandFileNewKeepVideo": "Yeni (videoyu koru)", "fileOpenOriginal": "Orijinali aç", @@ -3590,7 +3910,7 @@ "closeVideo": "Videoyu kapat", "speechToText": "Sesten metne (Whisper)", "textToSpeech": "Metinden sese", - "videoOcr": "Gömülü alt yazıyı OCR ile tara", + "videoOcr": "Gömülü alt yazıyı OCR ile tara", "burnIn": "Gömülü alt yazılı video oluştur", "generateTransparent": "Alt yazılı şeffaf video oluştur", "undockVideoControls": "Video kontrollerini ayır", @@ -3607,12 +3927,12 @@ "chooseRuleProfile": "Kural profilini seç", "videoFullScreen": "Video tam ekran", "copyTextFromOriginalSelectedLines": "Metni orijinalden kopyala (seçili satırlar)", - "copyTextToOriginalSelectedLines": "Metni orijinale kopyala (seçili satırlar)", + "copyTextToOriginalSelectedLines": "Metni orijinale kopyala (seçili satırlar)", "textBoxRemoveAllFormatting": "Metin kutusu, tüm biçimlendirmeyi kaldır", "textBoxItalic": "Metin kutusu italik", - "textBoxBold": "Metin kutusunu kalın yap", + "textBoxBold": "Metin kutusunu kalın yap", "textBoxUnderline": "Metin kutusunu altı çizili yap", - "textBoxBox": "Metin kutusu kutusu (EBU STL)", + "textBoxBox": "Metin kutusu kutusu (EBU STL)", "resetWaveformZoomAndSpeed": "Ses dalgası yakınlaştırmayı ve oynatma hızını sıfırla", "togglePlaybackSpeed": "Oynatma hızını aç/kapat", "playbackSpeedSlower": "Oynatma hızı daha yavaş", @@ -3622,11 +3942,11 @@ "seekSilence": "Sessizlik ara", "seekSilenceBack": "Geriye doğru sessizlik ara", "seekSilenceForward": "İleriye doğru sessizlik ara", - "waveformGuessStart": "Ses dalgasından başlangıç zamanını tahmin et", - "waveformGuessEnd": "Ses dalga şeklinden bitiş zamanını tahmin et", - "waveformGuessStartAndEnd": "Başlangıç ve bitiş süresini ses dalgasından tahmin et", + "waveformGuessStart": "Ses dalgasından başlangıç zamanını tahmin et", + "waveformGuessEnd": "Ses dalga şeklinden bitiş zamanını tahmin et", + "waveformGuessStartAndEnd": "Başlangıç ve bitiş süresini ses dalgasından tahmin et", "setVideoPositionCurrentSubtitleStart": "Video konumunu mevcut satır başına ayarla", - "goToSubtitlePositionAndPause": "Alt yazı konumuna git ve duraklat", + "goToSubtitlePositionAndPause": "Alt yazı konumuna git ve duraklat", "setVideoPositionCurrentSubtitleEnd": "Video konumunu mevcut satır sonuna ayarla", "toggleAudioTracks": "Ses izlerini aç/kapat", "goToNextError": "Sonraki hataya git", @@ -3637,11 +3957,19 @@ "colorX": "Renk {0}", "surroundWith": "Şununla çevrele...", "surroundWithXY": "{0}/{1} ile çevrele", - "surroundWithNumberX": "#{0} ile çevrele", - "searchVia": "Şununla ara:", - "searchViaX": "{0} ile ara", - "searchViaNumberX": "#{0} ile ara", - "searchViaUrlHint": "Aranan metin URL içindeki {0} parametresinin yerini alır", + "surroundWithNumberX": "#{0} ile çevrele", + "surroundWithBehavior": "Davranış", + "surroundWithBehaviorToggle": "Değiştir (ekle veya varsa kaldır)", + "surroundWithBehaviorAdd": "Ekle (her zaman)", + "surroundWithBehaviorRemove": "Kaldır (tümünü)", + "surroundWithBehaviorRemoveOnce": "Kaldır (her seferinde bir tane)", + "surroundWithWorksOn": "Uygulama alanı", + "surroundWithScopeSelectionOrText": "Seçim, yoksa tüm metin", + "surroundWithScopeEachLine": "Her satır", + "searchVia": "Şununla ara:", + "searchViaX": "{0} ile ara", + "searchViaNumberX": "#{0} ile ara", + "searchViaUrlHint": "Aranan metin URL içindeki {0} parametresinin yerini alır", "moveVideoPositionMilliseconds": "Video konumunu milisaniye olarak taşı", "importShortcutsTitle": "Kısayolları içe aktar", "exportShortcutsTitle": "Kısayolları dışa aktar", @@ -3656,8 +3984,8 @@ "showMediaInformation": "Medya bilgisini göster", "chooseSubtitleFormat": "Alt yazı formatı seç", "trimWhitespaceSelectedLines": "Boşlukları kırp (seçili satırlar)", - "waveformInsertNewSelection": "Ses dalgasına yeni seçim ekle", - "waveformNewSelectionPasteFromClipboard": "Ses dalgası panodaki metni yeni seçime yapıştırır", + "waveformInsertNewSelection": "Ses dalgasına yeni seçim ekle", + "waveformNewSelectionPasteFromClipboard": "Ses dalgası panodaki metni yeni seçime yapıştırır", "waveformHorizontalZoomInCommand": "Ses dalgası yatay yakınlaştır", "waveformHorizontalZoomOutCommand": "Ses dalgası yatay uzaklaştır", "waveformVerticalZoomInCommand": "Ses dalgası dikey yakınlaştır", @@ -3665,10 +3993,15 @@ "copySubtitlePathToClipboard": "Alt yazı yolunu panoya kopyala", "copySubtitleOriginalPathToClipboard": "Orijinal alt yazı yolunu panoya kopyala", "focusTextBox": "Metin kutusuna odaklan", + "focusSubtitleListView": "Alt yazı liste görünümüne odaklan", + "focusWaveform": "Dalga şekline odaklan", + "focusOriginalTextBox": "Orijinal metin kutusuna odaklan", + "textBoxGoToStart": "Metin kutusu, başa git", + "textBoxGoToEnd": "Metin kutusu, sona git", "sortByNumber": "Numaraya göre sırala", "sortByStartTime": "\"Göster\" zamanına göre sırala", "sortByEndTime": "\"Gizle\" zamanına göre sırala", - "sortByDuration": "Süreye göre sırala", + "sortByDuration": "Süreye göre sırala", "sortByGap": "Boşluğa göre sırala", "sortByText": "Metne göre sırala - alfabetik", "sortByTextTotalLength": "Metne göre sırala - toplam uzunluk", @@ -3679,7 +4012,7 @@ "sortByActor": "Oyuncuya göre sırala", "sortByStyle": "Stile göre sırala", "videoToggleBrightness": "Video: parlaklığı aç/kapat (yalnızca mpv)", - "videoToggleContrast": "Video: karşıtlığı aç/kapat (yalnızca mpv)", + "videoToggleContrast": "Video: karşıtlığı aç/kapat (yalnızca mpv)", "duplicatesFound": "Aşağıdaki çakışan kısayollar bulundu:", "copyTextToClipboard": "Metni panoya kopyala (seçili satırlar)", "copyTextFromOriginalToClipboard": "Orijinal metni panoya kopyala (seçili satırlar)", @@ -3699,11 +4032,12 @@ "goToPreviousBookmark": "Önceki yer imine git", "selectionToLower": "Metin kutusu: Seçimi küçük harf yap", "selectionToUpper": "Metin kutusu: Seçimi büyük harf yap", - "selectionToSentenceCase": "Metin kutusu: Seçimi cümle düzenine dönüştür", + "selectionToSentenceCase": "Metin kutusu: Seçimi cümle düzenine dönüştür", "selectionToggleCasing": "Metin kutusu: Harf düzenini değiştir (BÜYÜK -> küçük -> Baş Harfleri Büyük)", "googleIt": "Google'da ara (seçili metin)", "setActorX": "Aktörü ayarla: {0}", "setNewActor": "Yeni konuşmacı ayarla...", + "setStyleX": "Stili ayarla: {0}", "toggleDialogDashes": "Diyalog çizgilerini aç/kapat", "mergeWithLineBeforeAsDialog": "Önceki satırla diyalog olarak birleştir", "mergeWithLineAfterAsDialog": "Sonraki satırla diyalog olarak birleştir", @@ -3711,15 +4045,19 @@ "moveStartOneFrameForward": "Başlangıcı bir kare ileri taşı", "moveEndOneFrameBack": "Bitişi bir kare geri taşı", "moveEndOneFrameForward": "Bitişi bir kare ileri taşı", - "moveStartOneFrameBackKeepGapPrev": "Başlangıcı bir kare geri taşı (yakınsa öncekiyle boşluğu koru)", + "moveStartOneFrameBackKeepGapPrev": "Başlangıcı bir kare geri taşı (yakınsa öncekiyle boşluğu koru)", "moveStartOneFrameForwardKeepGapPrev": "Başlangıcı bir kare ileri taşı (yakınsa öncekiyle boşluğu koru)", "moveEndOneFrameBackKeepGapNext": "Bitişi bir kare geri taşı (yakınsa sonrakiyle boşluğu koru)", "moveEndOneFrameForwardKeepGapNext": "Bitişi bir kare ileri taşı (yakınsa sonrakiyle boşluğu koru)", - "moveSelectedLinesXMsBack": "Seçili satırları X ms geriye taşı (X Ayarlarda belirlenir)", + "moveStartXMsBack": "Başlangıcı X ms geriye taşı (X Ayarlar'da ve Görsel Eşleme'de belirlenir)", + "moveStartXMsForward": "Başlangıcı X ms ileriye taşı (X Ayarlar'da ve Görsel Eşleme'de belirlenir)", + "moveEndXMsBack": "Bitişi X ms geriye taşı (X Ayarlar'da ve Görsel Eşleme'de belirlenir)", + "moveEndXMsForward": "Bitişi X ms ileriye taşı (X Ayarlar'da ve Görsel Eşleme'de belirlenir)", + "moveSelectedLinesXMsBack": "Seçili satırları X ms geriye taşı (X Ayarlarda belirlenir)", "moveSelectedLinesXMsForward": "Seçili satırları X ms ileriye taşı (X Ayarlarda belirlenir)", "moveSelectedLinesAndForwardXMsBack": "Seçili satırları ve sonraki tümünü X ms geriye taşı (X Ayarlarda belirlenir)", "moveSelectedLinesAndForwardXMsForward": "Seçili satırları ve sonraki tümünü X ms ileriye taşı (X Ayarlarda belirlenir)", - "moveAllLinesXMsBack": "Tüm satırları X ms geriye taşı (X ayarı Ayarlar'dan yapılır)", + "moveAllLinesXMsBack": "Tüm satırları X ms geriye taşı (X ayarı Ayarlar'dan yapılır)", "moveAllLinesXMsForward": "Tüm satırları X ms ileriye taşı (X ayarı Ayarlar'dan yapılır)", "moveSelectedLinesCustomMsBack": "Seçili satırları özel ms kadar ({0:#,###,##0}) geriye taşı, {1}", "moveSelectedLinesCustomMsForward": "Seçili satırları özel ms kadar ({0:#,###,##0}) ileriye taşı, {1}", @@ -3772,7 +4110,7 @@ "applyToAllLinesX": "Tüm satırlar ({0})", "updateAllXAvailable": "Tümünü güncelle ({0})", "updatingXOfY": "{0}/{1} güncelleniyor...", - "doNotAskAgain": "Tekrar sorma (Eklentileri yönet kısmından değiştirin)", + "doNotAskAgain": "Tekrar sorma (Eklentileri yönet kısmından değiştirin)", "applyPluginsTo": "Eklentileri şuna uygula", "askEachTime": "Her defasında sor", "allLines": "Tüm satırlar" @@ -3794,11 +4132,11 @@ "pauseOcr": "OCR _duraklat", "inspectLine": "Satırı incele...", "ocrEngine": "OCR Motoru", - "tesseractEngineMode": "Motor modu", - "tesseractEngineModeLegacy": "Yalnızca özgün Tesseract (italik algılayabilir)", - "tesseractEngineModeNeural": "Yalnızca LSTM sinir ağları", - "tesseractEngineModeBoth": "Tesseract + LSTM", - "tesseractEngineModeDefault": "Varsayılan (kullanılabilir olana göre)", + "tesseractEngineMode": "Motor modu", + "tesseractEngineModeLegacy": "Yalnızca özgün Tesseract (italik algılayabilir)", + "tesseractEngineModeNeural": "Yalnızca LSTM sinir ağları", + "tesseractEngineModeBoth": "Tesseract + LSTM", + "tesseractEngineModeDefault": "Varsayılan (kullanılabilir olana göre)", "database": "Veritabanı", "maxWrongPixels": "Maksimum hatalı piksel", "maxErrorPct": "Maksimum hata %", @@ -3813,13 +4151,13 @@ "expandInfoX": "Genişleme sayısı: {0}", "editNOcrDatabaseXWithYItems": "nOCR veritabanı {0} düzenleniyor, {1:#,###,##0} öge var", "newNOcrDatabase": "Yeni nOCR veritabanı", - "newBinaryImageCompareDatabase": "Yeni İkili Görüntü Karşılaştırma veritabanı", + "newBinaryImageCompareDatabase": "Yeni İkili Görüntü Karşılaştırma veritabanı", "renameNOcrDatabase": "nOCR veritabanını yeniden adlandır", - "renameBinaryImageCompareDatabase": "İkili Görüntü Karşılaştırma veritabanını yeniden adlandır", + "renameBinaryImageCompareDatabase": "İkili Görüntü Karşılaştırma veritabanını yeniden adlandır", "nOcrDatabase": "nOCR veritabanı", "drawMode": "Çizim modu:", "addNewCharcter": "Yeni karakter ekle", - "addNOcrCharacterTitle": "Satır {0}, karakter {1} / {2} için \"{3}\" veritabanı kullanılarak nOCR karakteri ekle", + "addNOcrCharacterTitle": "Satır {0}, karakter {1} / {2} için \"{3}\" veritabanı kullanılarak nOCR karakteri ekle", "addBinaryOcrCharacterTitle": "Satır {0}, karakter {1} / {2} için \"{3}\" veritabanı kullanılarak ikili OCR karakteri ekle", "lineIndexX": "Satır {0}", "inspectNOcrAdditions": "Yeni nOCR eklemelerini incele", @@ -3855,7 +4193,7 @@ "binarize": "Siyah beyaz yap (Binarize)", "borderSize": "Kenarlık boyutu", "captureTopAlign": "ASSA hizalamasını otomatik algıla", - "showOnlyForcedSubtitles": "Yalnızca zorunlu alt yazıları göster", + "showOnlyForcedSubtitles": "Yalnızca zorunlu alt yazıları göster", "ocrImage": "OCR resmi", "oneColor": "Tek renk (beyaz)", "darknessThreshold": "Karanlık eşiği", @@ -3869,6 +4207,8 @@ "binaryImageCompareInspectImageMatches": "\"İkili resim karşılaştırma\" - Resim eşleşmelerini incele", "saveBlankTextTitle": "Boş metin kaydedilsin mi?", "saveBlankTextPrompt": "Resim için boş metin kaydedilsin mi?", + "drawnLinesDoNotMatchTitle": "Çizilen çizgiler görselle eşleşmiyor", + "drawnLinesDoNotMatchPrompt": "Çizilen çizgilerin bazıları görselle eşleşmiyor (yeşil çizgiler karakterin üzerinde, kırmızı çizgiler karakterin dışında olmalıdır); bu nedenle bu karakter tanınmayacak.\n\nYine de kaydedilsin mi?", "yesAndNeverAskAgain": "Evet ve bir daha sorma", "importTextFromSubtitleDotDotDot": "Alt yazıdan metin aktar...", "importTextFromSubtitleOverwritePrompt": "Bazı satırlarda zaten OCR metni var. Mevcut metnin üzerine yazılsın mı?", @@ -3876,7 +4216,7 @@ "importTextFromSubtitleXLinesImported": "{0} satır için metin aktarıldı.", "exportTextAsSubtitleDotDotDot": "Metni alt yazı olarak dışa aktar...", "exportTextAsSubtitleNoText": "Dışa aktarılacak OCR metni yok. Önce OCR işlemini çalıştırın veya metin aktarın.", - "saveAllImagesWithHtmlIndexDotDotDot": "Tüm görselleri HTML dizini ile kaydet...", + "saveAllImagesWithHtmlIndexDotDotDot": "Tüm görselleri HTML dizini ile kaydet...", "saveAllImagesWithHtmlIndexPickFolder": "Görseller ve HTML dizini için bir klasör seçin", "saveAllImagesWithHtmlIndexSaved": "{0} görsel bir HTML dizini ile kaydedildi", "savingImagesDotDotDot": "Görseller kaydediliyor...", @@ -3898,10 +4238,10 @@ "vobSubColorEmphasis1": "Vurgu 1", "vobSubColorEmphasis2": "Vurgu 2", "vobSubColorsInvert": "Arka planı / vurgu 1'i ters çevir", - "vobSubIsolateColors": "OCR için VobSub renklerini ayrıştır", + "vobSubIsolateColors": "OCR için VobSub renklerini ayrıştır", "vobSubIsolateColorsHint": "En sık kullanılan rengi (metin) tutup dış hat/yumuşatma renklerini atarak her bir VobSub görüntüsünü OCR öncesinde net bir siyah-beyaz olarak yeniden oluşturur. Gri dış hatların karakterleri birbirine bağladığı disklerde doğruluğu artırır.", "llamaCppOcrSettingsTitle": "llama.cpp OCR ayarları", - "selectTesseractDictionary": "Tesseract sözlüğünü seçin:", + "selectTesseractDictionary": "Tesseract sözlüğünü seçin:", "inspectBinaryOcrAdditionsTitle": "İkili OCR Eklemlerini İncele", "llamaCppOcr": "llama.cpp OCR", "llamaCppOcrDescription": "OCR için kullanılan yerel llama.cpp sunucusu (çok modlu model).", @@ -3916,20 +4256,37 @@ "fallbackOcrDatabase": "Alternatif OCR veritabanı", "showAllOllamaModels": "Tüm modelleri göster (yalnızca görme yeteneği olanları değil)", "ollamaModelLikelyWrong": "Ollama hiç metin döndürmedi - seçilen model OCR veya görme (vision) özelliğini desteklemiyor olabilir", - "llamaCppNotDownloaded": "llama.cpp motoru/modeli indirilmemiş - toplu dönüştürme ayarlarından indirin", + "llamaCppNotDownloaded": "llama.cpp motoru/modeli indirilmemiş - toplu dönüştürme ayarlarından indirin", "llamaCppReturnedNoText": "llama.cpp metin döndürmedi - sunucuyu ve modeli kontrol edin", - "llamaCppDownloadEngineAndModelPrompt": "llama.cpp, llama-server motorunun ve seçilen OCR modelinin indirilmesini gerektiriyor. Şimdi indirilsin mi?", + "llamaCppDownloadEngineAndModelPrompt": "llama.cpp, llama-server motorunun ve seçilen OCR modelinin indirilmesini gerektiriyor. Şimdi indirilsin mi?", "llamaCppDownloadEnginePrompt": "llama.cpp, llama-server motorunun indirilmesini gerektiriyor. Şimdi indirilsin mi?", "llamaCppDownloadModelPrompt": "llama.cpp, seçilen OCR modelinin indirilmesini gerektiriyor. Şimdi indirilsin mi?", - "crispEmbedNotDownloaded": "CrispEmbed motoru/modeli indirilmedi - toplu dönüştürme ayarlarından indirin", + "crispEmbedNotDownloaded": "CrispEmbed motoru/modeli indirilmedi - toplu dönüştürme ayarlarından indirin", "crispEmbedReturnedNoText": "CrispEmbed hiç metin döndürmedi - modeli kontrol edin", - "appleVisionReturnedNoText": "Apple Vision metin döndürmedi - dili kontrol edin", - "crispEmbedSettingsTitle": "CrispEmbed ayarları", + "appleVisionReturnedNoText": "Apple Vision metin döndürmedi - dili kontrol edin", + "crispEmbedSettingsTitle": "CrispEmbed ayarları", "crispEmbedDescription": "Birden fazla model arka ucu içeren yerel OCR motoru - motoru ve modelleri buradan indirin.", - "trainNOcrDatabase": "nOCR veritabanını eğit...", + "trainNOcrDatabase": "nOCR veritabanını eğit...", + "optimizeNOcrDatabase": "nOCR veritabanını iyileştir...", + "optimizeNOcrDatabaseQuestionXY": "\"{0}\" nOCR veritabanından, karakterleri benzer karakterlerden ayırt etmeye yaramayan satırlar kaldırılsın mı?\n\nBu, veritabanını küçültür ve OCR'yi hızlandırır; genellikle hatalar da azalır. Bir dakikaya kadar sürebilir.\n\nYedek \"{1}\" olarak kaydedilir.", + "optimizingNOcrDatabaseXY": "nOCR veritabanı iyileştiriliyor... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "\"{0}\" nOCR veritabanı iyileştirildi: {1:#,##0} -> {2:#,##0} satır.", "startTraining": "Eğitimi başlat", "abortTraining": "Eğitimi iptal et", "trainingOptions": "Eğitim seçenekleri", + "trainNOcrSubtitle": "Yüklü yazı tiplerindeki karakterleri oluşturur ve nOCR'ye bunların şekillerini öğretir. Alt yazılarınızın kullandığı yazı tiplerini seçin.", + "xFontsSelected": "{0:#,##0} seçildi", + "subtitleFonts": "Alt yazı yazı tipleri", + "emptyDatabase": "Boş veritabanı", + "startFromDatabase": "Şuradan başlat", + "startFromDatabaseHint": "Eğitilen karakterleri mevcut bir veritabanının kopyasına ekleyin (önerilir) veya boş bir veritabanıyla başlayın", + "fontSizes": "Yazı tipi boyutları", + "fontSizesHint": "Piksel cinsinden oluşturulacak yazı tipi boyutları, virgülle ayrılmış şekilde, örn. \"30, 40\"", + "numberOfLineSegmentsHint": "Karakter başına kontrol edilen çizgi sayısı - sayı arttıkça doğruluk artar ancak işlem yavaşlar", + "enterDatabaseName": "Veritabanı için bir ad girin", + "trainingFontXSizeYCharacterZ": "\"{0}\", {1} piksel boyutunda eğitiliyor: {2}", + "xLearned": "{0:#,##0} öğrenildi", + "xSkipped": "{0:#,##0} atlandı", "charactersToTrain": "Eğitilecek karakterler", "letterCombinationsToTrain": "Tek bir görsele bölünebilecek harf kombinasyonları", "importCharactersFromSubtitleFile": "Alt yazı dosyasından karakter içe aktar...", @@ -3943,7 +4300,7 @@ "assa": { "assaDraw": "ASSA Çizim", "drawSelectTool": "Seç (noktaları taşı)", - "drawUseShapeForErase": "Silme için şekil kullan (iclip)", + "drawUseShapeForErase": "Silme için şekil kullan (iclip)", "drawLineTool": "Çizgi Aracı (F4)", "drawBezierTool": "Bezier Eğrisi (F5)", "drawRectangleTool": "Dikdörtgen (F6)", @@ -3956,16 +4313,93 @@ "drawZoomOut": "Uzaklaştır (Ctrl+-)", "drawResetView": "Görünümü Sıfırla (Ctrl+0)", "drawToggleGrid": "Izgarayı Aç/Kapat (Ctrl+G)", + "drawTogglePreview": "Ön izlemeyi değiştir (F9)", + "drawPreviewFailed": "Ön izleme başarısız oldu - libass (subtitles filtresi) içeren ffmpeg gereklidir", "drawCopyToClipboard": "Panoya Kopyala (Ctrl+C)", "drawShapes": "Şekiller", "drawSelectedPoint": "Seçili nokta", "drawSelectedShape": "Seçili şekil", "drawSelectedLayer": "Seçili katman", "drawToolX": "Araç: {0}", - "drawHelpText": "Nokta eklemek için tıklayın • Şekli kapatmak için Enter/F8 • Kaydırmak için Shift+Sürükle • Yakınlaştırmak için Ctrl+Tekerlek", + "drawHelpText": "Nokta eklemek için tıklayın • Seçenekler için sağ tıklayın • Seçim aracı: boyutlandırmak/döndürmek için tutamaçları sürükleyin (Shift = oranı/15°'yi koru) • Şekli kapatmak için Enter/F8 • Kaydırmak için Shift+sürükle veya orta fare tuşu • Yakınlaştırmak/uzaklaştırmak için Ctrl+Fare Tekerleği", + "drawMoveToLayer": "Katmana taşı", + "drawFlipHorizontal": "Yatay olarak çevir", + "drawFlipVertical": "Dikey olarak çevir", + "drawHideShape": "Şekli gizle", + "drawShowShape": "Şekli göster", + "drawHideLayer": "Katmanı gizle", + "drawShowLayer": "Katmanı göster", + "drawDeleteLayer": "Katmanı sil", + "drawDeletePoint": "Noktayı sil", + "drawCancelDrawing": "Çizimi iptal et", + "drawLayerX": "Katman {0}", + "drawImportSvg": "SVG görseli içe aktar...", + "drawRotateClockwise": "Saat yönünde 90° döndür", + "drawConvertToCurve": "Segmenti eğriye dönüştür", + "drawBackground": "Arka plan", + "drawPosition": "Konum", + "drawZoom": "Yakınlaştırma", + "drawShapeTool": "Şekil aracı", + "drawColorPickerTool": "Bir şekilden veya arka plandan renk seç", + "drawShapeLibrary": "Şekil kitaplığı", + "drawShapeLibraryHint": "Bir şekil yerleştirmek için tuval üzerine sürükleyin veya varsayılan boyut için tıklayın. Shift tuşu oranlarını korur.", + "drawAddToLibrary": "Şekil kitaplığına ekle...", + "drawRemoveFromLibrary": "Şekil kitaplığından kaldır", + "drawShapeName": "Şekil adı", + "drawCategorySpeechBubbles": "Konuşma baloncukları", + "drawCategoryArrows": "Oklar", + "drawCategoryBasicShapes": "Temel şekiller", + "drawCategorySymbols": "Semboller", + "drawCategoryMyShapes": "Şekillerim", + "drawShapeSpeechBubble": "Konuşma baloncuğu", + "drawShapeSpeechBubbleRight": "Konuşma baloncuğu, kuyruk sağda", + "drawShapeSpeechBubbleUp": "Konuşma baloncuğu, kuyruk yukarıda", + "drawShapeOvalBubble": "Oval konuşma baloncuğu", + "drawShapeBoxBubble": "Kutu konuşma baloncuğu", + "drawShapeThoughtBubble": "Düşünce baloncuğu", + "drawShapeShoutBubble": "Haykırış baloncuğu", + "drawShapeCaptionBox": "Alt yazı kutusu", + "drawShapeArrow": "Ok", + "drawShapeDoubleArrow": "Çift ok", + "drawShapeChevron": "Chevron", + "drawShapeCurvedArrow": "Kavisli ok", + "drawShapeRoundedRectangle": "Yuvarlatılmış dikdörtgen", + "drawShapeTriangle": "Üçgen", + "drawShapeDiamond": "Eşkenar dörtgen", + "drawShapePentagon": "Beşgen", + "drawShapeHexagon": "Altıgen", + "drawShapeOctagon": "Sekizgen", + "drawShapeStar": "Yıldız", + "drawShapeRing": "Halka", + "drawShapePlus": "Artı", + "drawShapeBanner": "Pankart", + "drawShapeHeart": "Kalp", + "drawShapeCheck": "Onay işareti", + "drawShapeMusicNote": "Müzik notası", + "drawShapeMusicNotes": "Müzik notaları", + "drawShapeLightning": "Yıldırım", + "drawShapeCloud": "Bulut", + "drawShapeMoon": "Ay", + "drawShapeBadge": "Rozet", + "drawSize": "Boyut", + "drawLayer": "Katman", + "drawBackgroundVideoFrame": "Video karesi (mevcut konum)", + "drawBackgroundVideoFrameAt": "Belirli konumdaki video karesi...", + "drawBackgroundImage": "Görsel dosyası...", + "drawBackgroundNone": "Arka plan yok", + "drawBackgroundStretch": "Görseli tuvale esnet", + "drawBackgroundOpacity": "Arka plan opaklığı", + "drawBackgroundVideoFrameFailed": "{0} konumunda bir video karesi alınamadı.", + "drawImages": "Görseller", + "drawConvertToLine": "Segmenti düz çizgiye dönüştür", + "drawConvertShapeToCurves": "Tüm çizgileri eğrilere dönüştür", + "drawConvertShapeToLines": "Tüm eğrileri çizgilere dönüştür", + "drawRotateCounterClockwise": "Saat yönünün tersine 90° döndür", + "drawSvgImages": "SVG görselleri", + "drawSvgNoShapes": "SVG dosyasında doldurulmuş şekil veya kontur bulunamadı.", "progressBarTitle": "ASSA ilerleme çubuğu", "progressBarSettings": "İlerleme çubuğu", - "mouseOverColor": "Fareyle üzerine gelme rengi", + "mouseOverColor": "Fareyle üzerine gelme rengi", "clickedColor": "Tıklama rengi", "progressBarForeColor": "Ön plan rengi", "progressBarSquareCorners": "Kare köşeler", @@ -3994,12 +4428,12 @@ "attachments": "Eklentiler", "fontCollectorNoFontsToCopy": "Kopyalanacak yazı tipi dosyası bulunamadı.", "fontCollectorXFontFilesCopiedToY": "{0} yazı tipi dosyası {1} konumuna kopyalandı", - "fontCollectorEmbedFontsDotDotDot": "Yazı tiplerini alt yazıya göm...", + "fontCollectorEmbedFontsDotDotDot": "Yazı tiplerini alt yazıya göm...", "fontCollectorEmbedXFontsSizeYZPrompt": "{0} yazı tipi dosyası alt yazıya gömülsün mü?\n\nToplam yazı tipi boyutu: {1} - ASSA dosyasında metin olarak yaklaşık {2}.\n\n{3}", "fontCollectorAndXMoreFonts": "...ve {0} tane daha", "fontCollectorNoFontsToEmbed": "Gömülecek yeni yazı tipi yok - gerekli yazı tipleri zaten gömülü veya bulunamadı.", "fontCollectorXFontFilesEmbedded": "{0} yazı tipi dosyası alt yazıya gömüldü.", - "fontCollectorTrimFonts": "Yalnızca kullanılan karakterleri göm (yazı tiplerini kırp)", + "fontCollectorTrimFonts": "Yalnızca kullanılan karakterleri göm (yazı tiplerini kırp)", "trimFontsDotDotDot": "Yazı tiplerini kullanılan karakterlere kırp...", "trimFontsPromptX": "{0} gömülü yazı tipi yalnızca şu anda kullanılan karakterlere kırpılsın mı?\n\nAlt yazıya daha sonra eklenecek metinlerde eksik karakterler görünebilir, bu nedenle kırpma işlemini son adım olarak yapın.", "trimFontsNoFontsToTrim": "Kırpılacak gömülü yazı tipi yok.", @@ -4019,7 +4453,7 @@ "resolutionResamplerFromVideo": "Videodan...", "resolutionResamplerSourceAndTargetEqual": "Kaynak ve hedef çözünürlük aynı - yapılacak bir şey yok.", "resolutionResamplerNothingSelected": "Lütfen değiştirmek için en az bir seçenek belirleyin.", - "resolutionResamplerVideoDiffers": "Alt yazı çözünürlüğü ({0}x{1}), video çözünürlüğünden ({2}x{3}) farklı.\nAlt yazı çözünürlüğü videoya uyarlanacak şekilde değiştirilsin mi?", + "resolutionResamplerVideoDiffers": "Alt yazı çözünürlüğü ({0}x{1}), video çözünürlüğünden ({2}x{3}) farklı.\nAlt yazı çözünürlüğü videoya uyarlanacak şekilde değiştirilsin mi?", "resolutionResamplerAskOnVideoOpen": "Farklı çözünürlükte bir video açıldığında sor", "backgroundBoxGenerator": "Arka plan kutusu oluştur", "backgroundBoxFillWidth": "Genişliği doldur", @@ -4036,12 +4470,12 @@ "backgroundBoxScroll": "Parşömen / Kaydırma", "stylesInFile": "Dosyadaki stiller", "stylesSaved": "Stiller kaydedildi", - "allCategories": "[Tümü]", - "newCategory": "Yeni kategori...", - "renameCategory": "Kategoriyi yeniden adlandır...", - "deleteCategory": "Kategoriyi sil", - "moveToCategoryDotDotDot": "Kategoriye taşı...", - "deleteCategoryQuestion": "\"{0}\" kategorisi silinsin mi? İçindeki stiller varsayılan kategoriye taşınacaktır.", + "allCategories": "[Tümü]", + "newCategory": "Yeni kategori...", + "renameCategory": "Kategoriyi yeniden adlandır...", + "deleteCategory": "Kategoriyi sil", + "moveToCategoryDotDotDot": "Kategoriye taşı...", + "deleteCategoryQuestion": "\"{0}\" kategorisi silinsin mi? İçindeki stiller varsayılan kategoriye taşınacaktır.", "stylesTitleX": "Stiller - {0}", "propertiesTitleX": "Özellikler - {0}", "attachmentsTitleX": "Ekler - {0}", @@ -4052,20 +4486,33 @@ "fontsAndGraphics": "Yazı tipleri ve grafikler", "wrapStyle": "Sarma stili", "borderAndShadowScaling": "Kenarlık ve gölge ölçeklendirme", - "collisions": "Çakışmalar", + "collisions": "Çakışmalar", "playDepth": "Oynatma derinliği", "timer": "Zamanlayıcı", "originalScript": "Orijinal betik", "graphics": "Grafikler", "copyToStorageStyles": "Depo stillerine kopyala", "copyToFileStyles": "Dosya stillerine kopyala", + "styleXAlreadyExistsInStorage": "\"{0}\" adında bir stil depolamada zaten var.\n\nÜzerine yazılsın mı yoksa ikisi de korunsun mu (kopyaya yeni bir ad verilir)?", + "styleXAlreadyExistsInFile": "\"{0}\" adında bir stil dosyada zaten var.\n\nÜzerine yazılsın mı yoksa ikisi de korunsun mu (kopyaya yeni bir ad verilir)?", + "styleNameCannotBeEmpty": "Stil adı boş bırakılamaz.", + "styleNameXIsUsedMoreThanOnce": "\"{0}\" stil adı dosyada birden fazla stil tarafından kullanılıyor.", + "overwrite": "Üzerine yaz", + "keepBoth": "İkisini de koru", + "doThisForAllConflictingStyles": "Bunu çakışan tüm stiller için yap", "setStyleAsDefault": "Stili varsayılan yap", "takeUsagesFromDotDotDot": "Kullanımları şuradan al...", - "replaceStyleWithDotDotDot": "Stili şununla değiştir...", + "replaceStyleWithDotDotDot": "Stili şununla değiştir...", "noAttachmentsFound": "Seçili ASSA dosyasında ek bulunamadı.", "deleteStyleQuestion": "Stil silinsin mi?", "deleteStylesQuestion": "Stiller silinsin mi?", + "deleteXStylesQuestion": "{0} stil silinsin mi?", + "deleteXStylesFromStorageQuestion": "Depolamadan {0} stil silinsin mi?", + "deleteStyleXFromStorageQuestion": "\"{0}\" stili depolamadan silinsin mi?", + "deleteStyleXFromFileQuestion": "\"{0}\" stili mevcut dosyadan silinsin mi?", "openStyleImportFile": "Stilleri içe aktarmak için alt yazı dosyası aç", + "styleImportFiles": "Stil dosyaları (.ass, .sty, Subtitle Edit 4 kategorisi .template)", + "ssaStyleImportFiles": "Stil dosyaları (.ssa, .ass, .sty)", "primary": "Birincil", "secondary": "İkincil", "applyOverrideTags": "Özel etiketleri uygula", @@ -4081,8 +4528,8 @@ "popIn": "Aniden belirme", "spinIn": "Dönerek belirme", "setPosition": "Konumu ayarla", - "rotation": "Döndürme", - "scaleX": "Ölçek X", + "rotation": "Döndürme", + "scaleX": "Ölçek X", "scaleY": "Ölçek Y", "spacing": "Aralık", "angle": "Açı", @@ -4141,7 +4588,7 @@ "advancedEffectHeartsDescription": "Üç farklı şekildeki kalpler ekranın üstünden nazikçe yağar, her alt yazı boyunca takla atarak solar", "advancedEffectWordSpacing": "Kelime aralığı", "advancedEffectWordSpacingDescription": "Daha iyi okunabilirlik için \\fsp etiketi kullanarak kelimeler arasındaki boşluğu artırır", - "advancedEffectKaraokeRightToLeft": "Sağdan sola", + "advancedEffectKaraokeRightToLeft": "Sağdan sola", "advancedEffectFancyKaraokeAutoDetectActiveWord": "Aktif kelimeyi otomatik algıla", "advancedEffectFancyKaraokeGlow": "Aktif kelime parlaması", "advancedEffectFancyKaraokeActiveColor": "Aktif renk", @@ -4162,7 +4609,7 @@ "advancedEffectSlideInRight": "Sağdan kayarak giriş", "advancedEffectSlideInRightDescription": "Metin ekranın sağ dışından içeri kayar, bekler, sonra tekrar sağa çıkar", "advancedEffectFadeInOutDescription": "Metin her alt yazının başında belirir ve sonunda kararır", - "advancedEffectWordFlip3D": "3D kelime çevirme", + "advancedEffectWordFlip3D": "3D kelime çevirme", "advancedEffectWordFlip3DDescription": "Her kelime konuşulurken 3D çevirme ve esnek sıçrama ile katlanarak girer — modern \"Shorts\" alt yazı stili", "advancedEffectCinematicTitle": "Sinematik başlık", "advancedEffectCinematicTitleDescription": "Harfler yumuşak bir bulanıklıktan netleşirken geniş aralıktan normale doğru yaklaşır — klasik film başlığı ortaya çıkarma", @@ -4213,7 +4660,7 @@ "detailGapToNext": "sonrakine: {0} < {1} ms", "detail": "Ayrıntı", "tip": "Bir satıra gitmek için üzerine çift tıklayın (veya Enter tuşuna basın). Hangi denetimlerin çalışacağı ve sınırları Ayarlar > Genel bölümünden ayarlanır.", - "exportAsText": "Metin dosyası (.txt)...", + "exportAsText": "Metin dosyası (.txt)...", "exportAsExcel": "Excel dosyası (.xlsx)...", "exportAsHtml": "Web sayfası (.html)...", "exportFileX": "Dosya: {0}", diff --git a/src/ui/Assets/Languages/Ukrainian.json b/src/ui/Assets/Languages/Ukrainian.json index 72e8ab6c268..8a1597582f5 100644 --- a/src/ui/Assets/Languages/Ukrainian.json +++ b/src/ui/Assets/Languages/Ukrainian.json @@ -1,9 +1,50 @@ { "title": "Subtitle Edit", - "version": "v5.2.0-rc7", + "version": "v5.3.0", "translatedBy": "Kilo Code", "cultureName": "uk-UA", "general": { + "prompt": "Підказка", + "temperature": "Температура", + "preset": "Попередньо встановлено", + "output": "Вивід", + "outputFormat": "Вихідний формат", + "other": "Інше", + "timeCodeFormat": "Формат коду часу", + "topBottomMargin": "Верхнє/нижнє поле", + "theme": "Тема", + "brightness": "Яскравість", + "chooseColor": "Вибрати колір", + "lineX": "Рядок {0}", + "playLine": "Відтворити рядок", + "maxLineLength": "Макс. довжина рядка", + "maxCharsPerSec": "Максимальні символи/с", + "maxNumberOfLines": "Максимальна кількість рядків", + "subtitles": "Субтитри", + "shotChanges": "Зміни кадрів", + "chapters": "Розділи", + "audio": "Аудіо", + "interjections": "Вигуки", + "blankLines": "Порожні рядки", + "editWholeText": "Редагувати весь текст", + "noTextInClipboard": "Немає тексту в буфері обміну", + "noSubtitlesFoundTitle": "Субтитри не знайдено", + "replacedXOccurrences": "Замінено входжень: {0}", + "invalidRegularExpressionX": "Неприпустимий регулярний вираз: {0}", + "discardChangesTitle": "Відхилити зміни?", + "downloadingXDotDotDot": "Завантаження {0}...", + "importTimeCodesDotDotDot": "Імпорт кодів часу...", + "original": "Оригінал", + "nextChange": "Наступна зміна", + "previousChange": "Попередня зміна", + "changeXOfY": "Зміна {0} з {1}", + "tooLong": "Задовго", + "tooShort": "Закоротко", + "overlapping": "Перекриття", + "detail": "Подробиці", + "fixOcrErrors": "Виправляти помилки OCR", + "runningOcrXY": "Виконання OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp потребує завантаження двигуна llama-server. Завантажити зараз?", "assistedMove": "Кероване переміщення", "assistedMoveChooseMove": "Клацніть варіант або натисніть його номер, щоб перемістити слова", "assistedMoveDotDotDot": "Кероване переміщення...", @@ -71,6 +112,24 @@ "abort": "Перервати", "actor": "Актор", "actors": "Актори", + "SetActorDotDotDot": "Встановити актора...", + "ActorPickerTitle": "Встановити актора", + "ActorPickerFilterHint": "Введіть текст для фільтрування або ім'я нового актора", + "ActorPickerKeysHint": "Натисніть цифру або Enter, щоб встановити актора. Alt+Вгору/Вниз змінює порядок, Delete видаляє актора.", + "ActorPickerNewActorX": "Новий актор \"{0}\"", + "ActorPickerLinesSelectedX": "Виділено рядків: {0}", + "SetStyleDotDotDot": "Встановити стиль...", + "StylePickerTitle": "Встановити стиль", + "StylePickerFilterHint": "Введіть текст для фільтрування або назву нового стилю", + "StylePickerKeysHint": "Натисніть цифру (1-9, 0), щоб встановити стиль для всіх виділених рядків.", + "StylePickerNewStyleX": "Новий стиль \"{0}\"", + "StylePickerNewStyleInfo": "Натисніть Enter, щоб додати цей стиль із типовими параметрами та встановити його для виділених рядків. Пізніше змінити шрифт, кольори та позицію можна через \"Керування стилями...\".", + "StylePickerCurrentStyleX": "Поточний стиль: {0}", + "StylePickerLinesUsingStyleX": "Рядків із цим стилем: {0}", + "StylePickerMarginsXYZ": "Ліве {0}, праве {1}, вертикальне {2}", + "StylePickerSetStyle": "_Встановити стиль", + "StylePickerManageStyles": "Керування стилями...", + "StylePickerManageStylesHint": "Закрити це вікно та відкрити керування стилями для редагування шрифтів, кольорів, позиції тощо", "add": "Додати", "addDotDotDot": "Додати...", "addToNamesListCaseSensitive": "Додати до списку імен (з урахуванням регістру)", @@ -79,7 +138,6 @@ "adjustAlpha": "Налаштувати прозорість", "adjustDisplayDuration": "Налаштувати тривалість показу", "adjustment": "Коригування", - "advanced": "Розширені", "advancedSettings": "Розширені налаштування", "after": "Після", "alignment": "Вирівнювання", @@ -112,7 +170,6 @@ "batchMode": "Пакетний режим", "bdnXml": "BDN/xml", "before": "До", - "beforeX": "До \"{0}\"", "beginning": "Початок", "bluRaySup": "Blu-ray (sup)", "bold": "Жирний", @@ -124,7 +181,6 @@ "bookmarkEdit": "Редагувати закладку", "bookmarkEditForSelectedLinesX": "Редагувати закладку для {0} виділених рядків", "bookmarksList": "Список закладок", - "borderColor": "Колір рамки", "borderStyle": "Стиль рамки", "bottomCenter": "Знизу-по центру", "bottomLeft": "Знизу-ліворуч", @@ -147,7 +203,6 @@ "changeCasing": "Змінити регістр", "changeFormatting": "Змінити форматування", "changeFrameRate": "Змінити частоту кадрів", - "changeLanguageFilter": "Змінити фільтр мови...", "changeOnce": "Змінити один раз", "changeSpeed": "Змінити швидкість", "character": "Символ", @@ -169,7 +224,6 @@ "conversionCancelledByUser": "Перетворення скасовано користувачем", "convert": "Перетворити", "converted": "Перетворено", - "convertingDotDotDot": "Перетворення...", "convertingXofYDotDoDot": "Перетворення {0:#,###,##0}/{1:#,###,##0}...", "copy": "Копіювати", "copyImageToClipboard": "Копіювати зображення в буфер обміну", @@ -177,7 +231,6 @@ "couldNotSaveFileXErrorY": "Не вдалося зберегти файл \"{0}\". Помилка: {1}", "count": "Кількість", "cps": "Символів/с", - "currentSubtitle": "Поточні субтитри", "currentVideoPosition": "Поточна позиція відео", "cut": "Вирізати", "dark": "Темна", @@ -222,7 +275,6 @@ "expand": "Розгорнути", "export": "Експорт", "exportDotDotDot": "Експорт...", - "exportToX": "Експортувати в {0}", "extendAfter": "Розширити/скоротити до наступного рядка", "extendBefore": "Розширити/скоротити до попереднього рядка", "extendSelectedLinesToNextShotChangeOrNextSubtitle": "Розширити виділені рядки до наступного зміни кадру (або наступних субтитрів)", @@ -237,7 +289,6 @@ "fileExtension": "Розширення файлу", "fileName": "Ім'я файлу", "fileNameX": "Ім'я файлу: {0}", - "fileNameXAndSize": "Ім'я файлу: {0} ({1})", "fileSaved": "Файл збережено", "fileSavedToX": "Файл збережено в {0}", "fileXAlreadyExists": "Файл \"{0}\" вже існує.", @@ -247,8 +298,6 @@ "find": "Знайти", "findNext": "Знайти далі", "findTextX": "Знайти текст - {0}", - "fiveHundredMilliseconds": "500 мілісекунд", - "fiveSeconds": "П'ять секунд", "fix": "Виправити", "fixCommonErrors": "Виправити загальні помилки", "fixRightToLeft": "Виправити з правого на ліве", @@ -272,13 +321,11 @@ "foundXInLineYZ": "Знайдено \"{0}\" в рядку {1}, позиція {2}", "foundXMatches": "Знайдено {0} збігів", "frameRate": "Частота кадрів", - "frameRateX": "Частота кадрів: {0:0.0###}", "frames": "Кадри", "from": "Від", "fromCurrentVideoPosition": "від поточної позиції відео", "gap": "Прогалина", "general": "Загальне", - "generalText": "Загальне", "generate": "Створити", "generateImportShotChanges": "Створити/імпортувати зміни кадрів", "generating": "Створення...", @@ -295,12 +342,8 @@ "help": "Допомога", "hex": "Шістнадцятковий", "hide": "Приховати", - "hidePreview": "Приховати попередній перегляд", "history": "Історія", "horizontal": "Горизонтально", - "hourMinutesSecondsDecimalSeparatorMilliseconds": "Год:хв:с{0}мс", - "hourMinutesSecondsFrames": "Год:хв:с:кадри", - "ip": "IP", "id": "ID", "image": "Зображення", "imageSaved": "Зображення збережено", @@ -357,6 +400,7 @@ "mergeSelectedLinesDialog": "Об'єднати виділені рядки як діалог", "mergeWithLineAfterAndAutoBreak": "Об'єднати з наступним і автоматично розбити", "mergeWithLineAfterKeepBreaks": "Об'єднати з наступним (зберегти розбиття)", + "MergeWithLineAfterAndUnbreak": "Об'єднати з наступним і прибрати розриви рядків", "mergeWithLineBeforeAndAutoBreak": "Об'єднати з попереднім і автоматично розбити", "mergeWithLineBeforeKeepBreaks": "Об'єднати з попереднім (зберегти розбиття)", "middleCenter": "Посередині-по центру", @@ -370,10 +414,11 @@ "moveAllShotChangeOneFrameBack": "Перемістити всі зміни кадрів на один кадр назад", "moveAllShotChangeOneFrameForward": "Перемістити всі зміни кадрів на один кадр вперед", "moveDown": "Перемістити вниз", + "Increase": "Збільшити", + "Decrease": "Зменшити", "moveUp": "Перемістити вгору", "multipleReplace": "Множинна заміна", "name": "Ім'я", - "negative": "Негатив", "new": "Новий", "newDotDotDot": "Новий...", "newProfile": "Новий профіль", @@ -400,20 +445,15 @@ "offsetY": "Зсув Y", "ok": "_Гаразд", "oneFile": "Один файл", - "oneHundredMilliseconds": "100 мілісекунд", - "oneSecond": "Одна секунда", "oneSecondBack": "Одна секунда назад", "oneSecondForward": "Одна секунда", - "onlineVideoFeatureNotAvailable": "Функція недоступна для онлайн відео", "openContainingFolder": "Відкрити теку, що містить", "openDictionaryFolder": "Відкрити теку словника", "openFile": "Відкрити файл", "openImageBasedSubtitle": "Відкрити субтитри на основі зображень", "openImageFile": "Відкрити файл зображення", - "openOriginalSubtitleFile": "Відкрити оригінальний файл субтитрів...", "openOriginalSubtitleFileTitle": "Відкрити оригінальний файл субтитрів", "openOutputFolder": "Відкрити теку виводу", - "openSubtitle": "Відкрити субтитри...", "openSubtitleFileTitle": "Відкрити файл субтитрів", "openSubtitles": "Відкрити субтитри...", "openVideoFile": "Відкрити відеофайл...", @@ -426,11 +466,6 @@ "outlineWidth": "Ширина контуру", "outputFolder": "Тека виводу", "outputProperties": "Властивості виводу", - "overlap": "Перекриття", - "overlapNextX": "Перекриття наступного ({0:#;##0.###})", - "overlapPreviousLineX": "Перекриття попереднього рядка ({0:#;##0.###})", - "overlapStartAndEnd": "Перекриття початку і кінця", - "overlapX": "Перекриття ({0:#;##0.###})", "overwriteExistingFiles": "Перезаписати існуючі файли", "overwriteFilesInFolderX": "Перезаписати файли в теці: \"{0}\"", "overwriteQuestion": "Перезаписати?", @@ -443,6 +478,7 @@ "percent": "Відсоток", "pickLayer": "Встановити шар", "pickOllamaModel": "Вибрати модель Ollama", + "PickModel": "Вибрати модель", "llamaCppUseRemoteServer": "Використовувати зовнішній сервер (URL)", "pickOutputFolder": "Вибрати теку виводу", "pickResolutionFromCurrentVideo": "Вибрати роздільну здатність з поточного відео", @@ -482,7 +518,6 @@ "refresh": "Оновити", "region": "Регіон", "regularExpression": "Регулярний вираз", - "regularExpressionIsNotValid": "Регулярний вираз недійсний!", "relativeToCurrentVideoPosition": "Відносно поточної позиції відео", "remove": "Видалити", "removeAlignment": "Видалити вирівнювання", @@ -507,7 +542,7 @@ "reset": "Скинути", "resizePanels": "Змінити розмір панелей", "resolution": "Роздільна здатність", - "resolutionX": "Роздільна здатність: {0}", + "Retry": "Повторити", "reverseRightToLeftStartEnd": "Зворотній RTL початок/кінець", "right": "Праворуч", "rightToLeft": "Справа наліво", @@ -545,8 +580,6 @@ "selectedlinesX": "Виділені рядки: {0}", "sensitivity": "Чутливість", "separator": "Роздільник", - "sessionKey": "Ключ сесії", - "sessionKeyGenerate": "Створити новий ключ", "setEnd": "Встановити кінець", "setEndAndGoToNext": "Встановити кінець і перейти до наступного", "setEndAddNewAndGoToNew": "Встановити кінець, додати новий і перейти до нового", @@ -565,8 +598,9 @@ "shadowColor": "Колір тіні", "shadowWidth": "Ширина тіні", "shiftLineBy": "Зсунути рядок на", + "ShotIn": "Початок кадру", + "ShotOut": "Кінець кадру", "shortcut": "Ярлик", - "shortcutX": "Ярлик: {0}", "shortcuts": "Ярлики", "show": "Показати", "showActorColumn": "Показати стовпець \"Актор\"", @@ -577,17 +611,19 @@ "showStartColumn": "Показати стовпець \"Початок\"", "showHideColumn": "Показати стовпець \"Приховати\"", "showHistory": "Показати історію", + "ClearHistory": "Очистити історію", + "RemoveFromHistory": "Видалити з історії", "showLayerColumn": "Показати стовпець \"Шар\"", "showPreview": "Показати попередній перегляд", "showShotChangesList": "Показати список змін кадрів", + "ShowShotInColumn": "Показати стовпець \"Початок кадру\"", + "ShowShotOutColumn": "Показати стовпець \"Кінець кадру\"", "showStyleColumn": "Показати стовпець \"Стиль\"", "showTeletext": "Показати стовпець телетексту в списку", "showTimeCodes": "Показати коди часу", "showWpmColumn": "Показати стовпець \"Слів/хв\"", "showPixelWidthColumn": "Показати стовпець \"Ширина в пікселях\"", "shrink": "Зменшити", - "singleBox": "Одна коробка", - "singleLineLengths": "Довжина одного рядка:", "singleMode": "Один режим", "textTotalLength": "Текст - загальна довжина", "textSingleLineMaxLength": "Текст - максимальна довжина одного рядка", @@ -633,16 +669,16 @@ "strikeout": "Закреслення", "style": "Стиль", "styleExaggeration": "Переоцінка стилю", - "styleLanguage": "Стиль / Мова", "styles": "Стилі", "subtitleFile": "Файл субтитрів", + "SubtitleFileChangedOutsideX": "Файл \"{0}\" було змінено поза Subtitle Edit.\n\nПерезавантажити його і втратити ваші зміни?", "subtitleFileName": "Ім'я файлу субтитрів", "subtitleFileSaved": "Файл субтитрів збережено", "subtitleFileSavedToX": "Файл субтитрів збережено в {0}", "subtitleFiles": "Файли субтитрів", "subtitleFormats": "Формати субтитрів", "subtitleLoadedX": "Субтитри завантажено: {0}", - "subtitleXOfY": "Субтитри {0} з {1}", + "SubtitleReloadedChangedOutsideX": "Субтитри перезавантажено (змінено поза Subtitle Edit): {0}", "suffix": "Суфікс", "suggestions": "Пропозиції", "sync": "Синхронізація", @@ -654,7 +690,6 @@ "teletextColor": "Колір телетексту", "teletextLine": "Рядок телетексту", "tenHours": "10 годин", - "tenMilliseconds": "10 мілісекунд", "text": "Текст", "textColor": "Колір тексту", "textFiles": "Текстові файли", @@ -679,9 +714,6 @@ "topLeft": "Зверху-ліворуч", "topRight": "Зверху-праворуч", "totalAdjustmentX": "Загальне коригування: {0}", - "totalFramesX": "Всього кадрів: {0:#;##0.##}", - "totalLengthX": "Загальна довжина: {0}", - "totalLengthXSplitLine": "Загальна довжина: {0} (розділити рядок!)", "translate": "Перекласти", "translatePercentX": "Переклад: {0}%", "translateRow": "Перекласти рядок", @@ -690,6 +722,7 @@ "type": "Тип", "unbreak": "Розбити текст", "unbreakLines": "Розбити рядки", + "Undelete": "Відновити видалене", "underline": "Підкреслення", "undo": "Скасувати", "unknown": "Невідомо", @@ -706,13 +739,11 @@ "usages": "Використання", "use": "Використовувати", "useAlways": "Використовувати завжди", - "useLargerFontForThisWindow": "Використовувати більший шрифт для цього вікна", "useOnce": "Використовувати один раз", "useOutputFolder": "Використовувати теку виводу", "useSourceFolder": "Використовувати вихідну теку", "useSourceResolution": "Використовувати вихідну роздільну здатність", "userName": "Ім'я користувача", - "userNameAlreadyInUse": "Ім'я користувача вже використовується", "vertical": "Вертикально", "video100MsBack": "Відео, 100 мілісекунд назад", "video100MsForward": "Відео, 100 мілісекунд вперед", @@ -726,14 +757,25 @@ "videoCustom3ForwardX": "Відео, користувацькі мілісекунди ({0:#,###,##0}) вперед, 3", "videoCustom4BackX": "Відео, користувацькі мілісекунди ({0:#,###,##0}) назад, 4", "videoCustom4ForwardX": "Відео, користувацькі мілісекунди ({0:#,###,##0}) вперед, 4", - "videoEncodingX": "Кодування відео: {0}", + "VideoCustom1BackAndPauseX": "Відео, користувацькі мілісекунди ({0:#,###,##0}) назад і пауза, 1", + "VideoCustom1ForwardAndPauseX": "Відео, користувацькі мілісекунди ({0:#,###,##0}) вперед і пауза, 1", + "VideoCustom2BackAndPauseX": "Відео, користувацькі мілісекунди ({0:#,###,##0}) назад і пауза, 2", + "VideoCustom2ForwardAndPauseX": "Відео, користувацькі мілісекунди ({0:#,###,##0}) вперед і пауза, 2", + "VideoCustom3BackAndPauseX": "Відео, користувацькі мілісекунди ({0:#,###,##0}) назад і пауза, 3", + "VideoCustom3ForwardAndPauseX": "Відео, користувацькі мілісекунди ({0:#,###,##0}) вперед і пауза, 3", + "VideoCustom4BackAndPauseX": "Відео, користувацькі мілісекунди ({0:#,###,##0}) назад і пауза, 4", + "VideoCustom4ForwardAndPauseX": "Відео, користувацькі мілісекунди ({0:#,###,##0}) вперед і пауза, 4", "videoExtension": "Розширення відеофайлу", "videoFile": "Відеофайл", "videoFileGenerated": "Відеофайл створено", "videoFileGeneratedX": "Відеофайл створено: \"{0}\"", + "VideoFilesGenerated": "Відеофайли створено", + "XVideosGenerated": "Створено відео: {0}", + "XOfYVideosGenerated": "Створено {0} з {1} відео", + "SavedInX": "Збережено в {0}", + "SavedInXFolders": "Збережено в {0} теках", "videoFiles": "Відеофайли", "videoAndAudioFiles": "Відео- та аудіофайли", - "videoInformation": "Інформація про відео", "videoOffset": "Зсув відео", "videoOneFrameBack": "Відео, один кадр назад", "videoOneFrameForward": "Відео, один кадр вперед", @@ -744,7 +786,6 @@ "videoPlayer": "Відеопрогравач", "videoPosition": "Позиція відео", "videoResolution": "Роздільна здатність відео", - "viewX": "Перегляд {0}", "visible": "Видимий", "voice": "Голос", "warning": "Попередження", @@ -752,9 +793,7 @@ "waveformCenterOnVideoPosition": "Центр хвильової форми на позиції відео", "waveformPasteFromClipboard": "Вставити з буфера обміну", "waveformSpectrogram": "Хвильова форма/спектрограма", - "webServiceUrl": "URL веб-сервісу", "width": "Ширина", - "windowPositionAndSize": "Позиція і розмір вікна", "wordsPerMin": "Слів/хв", "pixelWidth": "Ширина в пікселях", "wpm": "Слів/хв", @@ -764,8 +803,6 @@ "xNotFound": "\"{0}\" не знайдено", "xRequiresAnApiKey": "{0} потребує ключ API", "xRequiresAValidUrl": "{0} вимагає дійсний URL (напр. \"http://...\" або \"https://...\")", - "xSeconds": "{0:0.0##} секунд", - "xSubtitles": "{0:#,###,##0} субтитрів", "yes": "Так", "zeroBytes": "0 байт", "copyToClipboard": "Копіювати в буфер обміну", @@ -789,7 +826,6 @@ "installFolder": "Тека встановлення", "lineHeight": "Висота рядка", "multiMode": "Мультирежим", - "mute": "Без звуку", "setSubtitleStartAtVideoPositionSetEndAtKeyUpAndGoToNext": "Встановити початок у позиції відео, встановити кінець при відпусканні клавіші і перейти до наступного", "playSelectedLinesAndFocusWaveform": "Відтворити виділені рядки і сфокусувати хвильову форму", "playSelectedLinesWithLoopAndFocusWaveform": "Відтворити виділені рядки з циклом і сфокусувати хвильову форму", @@ -826,10 +862,8 @@ "playbackSpeed": "Швидкість відтворення", "hoursMinutesSecondsMilliseconds": "ГГ:ХХ:СС.МММ", "imageFiles": "Файли зображень", - "openAiCompatibleStt": "OpenAI-сумісний STT", "openAiCompatibleSttEndpoint": "URL кінцевої точки STT", "openAiCompatibleSttApiKey": "Ключ API", - "openAiCompatibleSttModel": "Модель", "openAiCompatibleSttExtraHeaders": "Додаткові заголовки", "openAiCompatibleSttTimeout": "Тайм-аут (секунди)", "openAiCompatibleSttLanguage": "Підказка мови", @@ -839,6 +873,9 @@ "dashScopeSttRegion": "Регіон", "dashScopeSttEnableWords": "Часові мітки на рівні слів", "dashScopeSttRegionKeyHint": "Примітка: ключі API Alibaba Cloud Model Studio прив'язані до регіону - переконайтеся, що вибраний регіон відповідає регіону, де було створено ключ API (Китай чи Міжнародний).", + "GoogleCloudSttProjectId": "ID проєкту (лише для Application Default Credentials)", + "GoogleCloudSttBucketName": "Сховище bucket (порожньо = авто)", + "GoogleCloudSttDynamicBatching": "Динамічне пакетування (приблизно в 5 разів дешевше, без гарантії затримки)", "onlineSttApiKeyMissing": "Потрібен ключ API. Будь ласка, введіть свій ключ API і спробуйте ще раз.", "openAiCompatibleSttAutoTranscribeOnAudioSelection": "Автоматично транскрибувати новий вибір хвильової форми через розпізнавання мови", "openAiCompatibleSttStream": "Потокова відповідь", @@ -848,11 +885,9 @@ "configurationRequired": "Потрібне налаштування", "transcriptionError": "Помилка транскрипції", "transcriptionComplete": "Транскрипцію завершено", - "transcribingWithOpenAi": "Транскрибування за допомогою сервісу OpenAI...", "processingResponse": "Обробка відповіді...", "unauthorizedApiKey": "Неавторизовано: недійсний ключ API або недостатньо дозволів.", "requestTimeout": "Тайм-аут запиту: сервер відповідав занадто довго.", - "noSegmentsReturned": "Сервіс транскрипції не повернув жодного сегмента.", "openAiCompatibleSttUrlMissing": "Потрібен URL кінцевої точки OpenAI-сумісного STT. Будь ласка, введіть URL і спробуйте ще раз.", "openAiCompatibleSttUrlNotResponding": "Кінцева точка OpenAI-сумісного STT не відповіла:\n{0}\n\nБудь ласка, перевірте URL і чи запущено сервер.", "transcriptionFailed": "Транскрипція не вдалася", @@ -896,10 +931,10 @@ "replace": "_Замінити...", "multipleReplace": "_Множинна заміна...", "goToLineNumber": "_Перейти до номера рядка...", + "commandPalette": "_Палітра команд...", "rightToLeftMode": "Режим справа наліво", "modifySelectionDotDotDot": "Змінити _вибір...", "tools": "_Інструменти", - "toolsSelectedLines": "_Інструменти (виділені рядки)", "adjustDurations": "_Налаштувати тривалість...", "applyDurationLimits": "Застосувати обмеження тривалості...", "batchConvert": "_Пакетне перетворення...", @@ -986,6 +1021,7 @@ "closeTranslation": "Закрити _переклад", "fillSelectedLinesWithClipboard": "Заповнити виділені рядки текстом з буфера обміну", "beautifyTimeCodes": "Покращити коди часу...", + "improveTimeCodes": "Уточнити коди часу (примусове вирівнювання)...", "evenlyDistributeLines": "Рівномірно розподілити рядки (за CPS)", "mergeContinuationLines": "Об'єднати рядки продовження...", "snapAllTimesToFrames": "Прив'язати усі часи до кадрів", @@ -1044,6 +1080,9 @@ "selectCurrentLineWhilePlayingHint": "Вибрати поточні субтитри під час відтворення {0}", "videoPosition": "Позиція відео {0}", "videoPositionTextBox": "Текстове поле позиції відео {0}", + "toolbarLineBreakX": "Розрив рядка {0} (решта панелі інструментів продовжується в новому ряду)", + "initialText": "Початковий текст виділеного рядка", + "initialTextHint": "Текст виділеного рядка в тому вигляді, яким він був у момент виділення", "hideWaveformToolbar": "Приховати панель інструментів {0}", "resetZoomAndSpeed": "Скинути масштабування та швидкість відтворення {0}", "removeBlankLines": "Видалити порожні рядки {0}", @@ -1057,6 +1096,15 @@ "textPlayHint": "Відтворити поточні субтитри і зупинитися в кінці {0}", "textPauseHint": "Призупинити відтворення {0}", "textNextHint": "Відтворити наступні субтитри і зупинитися в кінці {0}", + "moveSelectedLines": "Перемістити виділені рядки (кнопки назад/вперед)", + "moveSelectedLinesAndFollowing": "Перемістити виділені рядки та всі наступні (кнопки назад/вперед)", + "moveAllLines": "Перемістити всі рядки (кнопки назад/вперед)", + "moveSelectedLinesBackHint": "Перемістити виділені рядки на {0} ms назад {1}", + "moveSelectedLinesForwardHint": "Перемістити виділені рядки на {0} ms вперед {1}", + "moveSelectedLinesAndFollowingBackHint": "Перемістити виділені рядки та всі наступні на {0} ms назад {1}", + "moveSelectedLinesAndFollowingForwardHint": "Перемістити виділені рядки та всі наступні на {0} ms вперед {1}", + "moveAllLinesBackHint": "Перемістити всі рядки на {0} ms назад {1}", + "moveAllLinesForwardHint": "Перемістити всі рядки на {0} ms вперед {1}", "guessStartNoLineSelected": "Вгадати початок: рядок не вибрано", "guessStartTimeCodesLocked": "Вгадати початок: коди часу заблоковано", "guessStartNoWaveform": "Вгадати початок: немає хвильової форми", @@ -1078,6 +1126,9 @@ "charactersPerSecond": "Символів/секунду: {0}", "chooseColumn": "Вибрати стовпець", "columnPaste": "Вставити в стовпець", + "commandPaletteTitle": "Палітра команд", + "commandPaletteSearchPlaceholder": "Введіть текст для пошуку команд...", + "commandPaletteNoCommandsFound": "Немає відповідних команд", "createdEmptyTranslation": "Створено порожній переклад з поточних субтитрів", "deleteText": "Видалити текст", "deleteTextAndShiftCellsUp": "Видалити текст і зсунути комірки вгору", @@ -1113,18 +1164,20 @@ "noTextInClipboard": "Немає тексту в буфері обміну", "oneLineCopiedFromOriginal": "Один рядок скопійовано з оригінальних субтитрів", "oneLineCopiedToOriginal": "Один рядок скопійовано в оригінальні субтитри", + "onlineOnlyVideo": "Відео лише в мережі", + "onlineOnlyVideoXSizeYDownloadAndOpen": "Відеофайл \"{0}\" ({1}) зберігається лише в мережі, наприклад у Dropbox або iCloud Drive, і його потрібно завантажити, перш ніж відкрити.\n\nЗавантажити та відкрити його зараз?", "oneLineMerged": "Один рядок об'єднано", "oneLineSwitched": "Один рядок перемкнено", "overwriteExistingCells": "Перезаписати існуючі комірки", "overwriteOrShiftCellsDown": "Перезаписати/зсунути комірки вниз", "parsingMatroskaFile": "Аналіз файлу Matroska...", + "readingDvdSubtitles": "Читання субтитрів DVD...", "pasteFromClipboardDotDotDot": "Вставити з буфера обміну...", "redoPerformed": "Повторено", "redoPerformedXActionLeft": "Повторено (дій залишилося: {0})", "removedUnicodeControlCharactersX": "Видалено символи керування Unicode з {0} рядків", "removedXBlankLines": "Видалено {0} порожніх рядків", "replacedXWithYCountZ": "Замінено \"{0}\" на \"{1}\" ({2} входжень)", - "replacedXWithYInLineZ": "Замінено \"{0}\" на \"{1}\" в рядку {2}", "reversedStartAndEndingsForRightToLeftX": "Зворотній початок і кінці для RTL в {0} рядках", "ruleProfileIsX": "Профіль правил тепер \"{0}\"", "saveLanguageFile": "Зберегти файл мови", @@ -1132,7 +1185,6 @@ "shiftTextCellsDown": "Зсунути текстові комірки вниз", "singleLineLength": "Довжина рядка: ", "speedIsNowX": "Швидкість тепер \"{0}\"", - "spellCheckResult": "Перевірку орфографії завершено. \n\n• Змінені слова: {0}\n• Пропущені слова: {1}", "subtitleGridFormattingX": "Форматування таблиці: {0}", "subtitleImportedFromMatroskaFile": "Субтитри імпортовано з файлу Matroska", "textDown": "Текст вниз", @@ -1158,13 +1210,14 @@ "trimmedXLines": "Обрізано {0} рядків субтитрів", "pastedXLinesOverSelectedLines": "Вставлено {0} рядок(ів) поверх виділених рядків", "pastedXOfYLinesOverSelectedLines": "Вставлено {0} з {1} рядка(ів) поверх виділених рядків - решта не вмістилася у виділення", + "insertedXLinesFromClipboard": "Вставлено рядків із буфера обміну: {0}", "openOriginalDifferentNumberOfSubtitlesXY": "Оригінальний файл субтитрів не має такої ж кількості субтитрів, як поточний файл субтитрів.\n\n• Оригінальні субтитри: {0}\n• Поточні субтитри: {1}", - "importXMatchingOriginalLines": "Імпортувати {0} відповідних оригінальних субтитрів?", "originalTextReadOnly": "Оригінальний текст (лише читання)", "originalTextEditMode": "Оригінальний текст (режим редагування)", "originalIsReadOnlyNotSaved": "Оригінальні субтитри є довідкою лише для читання і не були збережені", "originalIsEmptyNotSaved": "Оригінальні субтитри взагалі не містять тексту і не були збережені", "originalIsReadOnlyReference": "Оригінальні субтитри відкрито як довідку лише для читання", + "closeTranslationQuestionXY": "Закрити переклад \"{0}\"?\n\nОригінальні субтитри \"{1}\" стануть субтитрами, які ви редагуєте. Сам файл перекладу не змінюється.", "allowEditOfOriginalSubtitle": "Дозволити редагування оригінальних субтитрів", "showAllOriginalLinesX": "Показати всі оригінальні рядки ({0} не мають тут відповідника)", "showAllOriginalLinesHint": "Рядки без відповідника показані як додаткові рядки, щоб ви бачили, чого бракує в перекладі.", @@ -1186,6 +1239,7 @@ "fileExportedInFormatXToY": "Файл експортовано у форматі {0} до {1}", "fileExportedInFormatXToFileY": "Файл експортовано у форматі \"{0}\" до файлу \"{1}\"", "fixedXLines": "Виправлено {0} рядків", + "toolXChangedYLines": "{0}: змінено рядків: {1}", "transcriptionCompletedWithXLines": "Транскрипцію завершено з {0} рядками", "replacedXOccurrences": "Замінено {0} входжень", "ffmpegDownloadedAndInstalledToX": "ffmpeg завантажено і встановлено в {0}", @@ -1234,13 +1288,9 @@ "file": { "ebuSaveOptions": { "title": "Параметри збереження EBU", - "generalSubtitleInformation": "Загальна інформація про субтитри", "codePageNumber": "Номер кодової сторінки", "diskFormatCode": "Код формату диска", "displayStandardCode": "Код стандарту відображення", - "colorRequiresTeletext": "Кольори вимагають телетексту!", - "alignmentRequiresTeletext": "Вирівнювання вимагає телетексту!", - "teletextCharsShouldBe38": "'Макс. кількість символів на рядок' для телетексту має бути 38!", "characterCodeTable": "Таблиця символів", "languageCode": "Код мови", "originalProgramTitle": "Назва оригінальної програми", @@ -1257,7 +1307,6 @@ "maxNumberOfDisplayableRows": "Макс. кількість рядків", "diskSequenceNumber": "Номер диска", "totalNumberOfDisks": "Загальна кількість дисків", - "import": "Імпорт...", "textAndTimingInformation": "Інформація про текст і таймінг", "justificationCode": "Код вирівнювання", "verticalPosition": "Вертикальна позиція", @@ -1274,11 +1323,6 @@ "errors": "Помилки", "errorsX": "Помилки: {0}", "maxLengthError": "Рядок {0} перевищує максимальну довжину ({1}) на {2}: {3}", - "textUnchangedPresentation": "Незмінне представлення", - "textLeftJustifiedText": "Текст зліва", - "textCenteredText": "Текст по центру", - "textRightJustifiedText": "Текст справа", - "useBoxForOneNewLine": "Позначте 'Використовувати коробку навколо тексту' лише для одного нового рядка", "maxLengthErrorTeletextColored": "Рядок {0}-{1}: 36 (а не {2}) має бути максимумом символів для кольорового тексту подвійної висоти", "maxLengthErrorTeletextWhite": "Рядок {0}-{1}: 37 (а не {2}) має бути максимумом символів для білого тексту подвійної висоти", "maxLengthErrorTeletextSingleHeight": "Рядок {0}: 38 (а не {1}) має бути максимумом символів для білого тексту одинарної висоти", @@ -1297,22 +1341,29 @@ "formattingDotDotDot": "Форматування...", "imageBasedSubtitleForEditDotDotDot": "Субтитри на основі зображень для редагування...", "imageBasedSubtitleForOcrDotDotDot": "Субтитри на основі зображень для OCR...", + "dvdSubtitlesDotDotDot": "Субтитри з DVD (IFO/VOB)...", + "titleImportDvd": "Імпорт субтитрів із DVD", + "dvdIfoFile": "Файл IFO", + "dvdVobFiles": "Файли VOB", + "dvdVideoStandard": "Стандарт відео", + "dvdStartRipping": "Почати вилучення", + "dvdRippingAborted": "Вилучення перервано", + "dvdOpenIfoFile": "Відкрити файл DVD IFO", + "dvdAddVobFiles": "Додати файли VOB", + "dvdIfoFiles": "Файли DVD IFO", + "dvdVobFileType": "Файли DVD VOB", + "dvdDropHint": "Відкрийте файл IFO (VIDEO_TS\\VTS_01_0.IFO) або додайте файли VOB - чи перетягніть їх сюди", + "dvdNotAnIfoFileX": "{0} не є файлом DVD IFO", + "dvdMenuIfoNoTitleSetsX": "Поруч із {0} не знайдено наборів розділів (VTS_xx_0.IFO)", + "dvdEncryptedXOfY": "{0} з {1} пакетів субтитрів досі зашифровані CSS - ці файли VOB скопійовано без дешифрування, тому деякі зображення субтитрів будуть спотворені.\n\nДля чистого результату спершу дешифруйте DVD інструментом для вилучення DVD.\n\nВсе одно продовжити?", "splitTextAt": "Розділити текст на", "blankLines": "Порожні рядки", "oneLineIsOneSubtitle": "Один рядок - один субтитр", "twoLinesAreOneSubtitle": "Два рядки - один субтитр", "importFilesDotDotDot": "Імпорт файлів...", "multipleFiles": "Імпорт з кількох текстових файлів (один файл - один субтитр)", - "importOptions": "Параметри імпорту", - "autoSplitText": "Автоматичне розділення тексту", - "lineMode": "Режим рядка", "maxLineLength": "Максимальна довжина рядка", - "maxLinesPerSubtitle": "Максимальна кількість рядків на субтитр", - "minGapBetweenSubtitles": "Мінімальна прогалина між субтитрами", "mergeShortLines": "Об'єднати короткі рядки", - "removeLinesWithoutLetters": "Видалити рядки без літер", - "splitAtEndCharsSetting": "Розділити в кінцевих символах", - "takeTimeFromCurrentFile": "Взяти час з поточного файлу", "fixed": "Фіксовано", "numberOfSubtitlesX": "Кількість субтитрів: {0}", "numberOfSubtitlesXForcedY": "Кількість субтитрів: {0} ({1} примусових)", @@ -1330,14 +1381,18 @@ "forcedAlignerProgress": "Вирівнювання... вікно {0} з {1}, {2} з {3} рядків", "forcedAlignerSetupTitle": "Вирівняти коди часу через примусовий вирівнювач", "forcedAlignerSetupIntro": "Примусовий вирівнювач зіставляє наявний текст субтитрів зі звуком, не транскрибуючи його спочатку. Довгі відео вирівнюються частинами, тож підходить будь-яка тривалість.", + "forcedAlignerEndsFromSpeech": "Встановити час кінця за ізольованим мовленням (повільно)", + "forcedAlignerEndsFromSpeechHint": "Примусовий вирівнювач знаходить, де рядок починається, але не де закінчується, тому час кінця зазвичай визначається часом читання. Якщо це увімкнено, спершу з аудіо видаляються музика та звукові ефекти, і кожен рядок закінчується там, де стихає його мовлення. З GPU це триває приблизно стільки ж, скільки саме відео, - а без нього в багато разів довше.", + "forcedAlignerIsolatingSpeech": "Ізоляція мовлення... {0}", + "forcedAlignerIsolatingSpeechFailed": "Не вдалося ізолювати мовлення - час кінця встановлено за часом читання.", "forcedAlignerModel": "Модель вирівнювача", - "forcedAlignerDownloadEngine": "Завантажити / оновити двигун..." + "forcedAlignerDownloadEngine": "Завантажити / оновити двигун...", + "forcedAlignerEstimatedXOfY": "{0} з {1} рядків не вдалося вирівняти, тому їх розміщено за часом читання - їхні коди часу лише приблизні. Ймовірно, сценарій довший за те, що звучить у відео." }, "export": { "exportImagesProfiles": "Експорт профілів зображень", "leftRightMargin": "Ліве/праве поле", "topBottomMargin": "Верхнє/нижнє поле", - "titleExportBluRaySup": "Експорт Blu-ray (sup)", "lineSpacingPercent": "Відстань між рядками %", "paddingLeftRight": "Внутрішній відступ ліворуч/праворуч", "paddingTopBottom": "Внутрішній відступ зверху/знизу", @@ -1378,10 +1433,21 @@ "titleExportDCinemaInteropPng": "D-Cinema interop/png", "titleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", "imageBasedSubtitleSaved": "Субтитри на основі зображень збережено", - "titleExportBdnXml": "Експорт BDN/xml", "titleExportWebVttThumbnails": "Експорт WebVTT (мініатюри)", "fullFrameImage": "Зображення на весь кадр", "fullFrameImageHint": "Робити кожне зображення розміром з кадр відео, із субтитрами на своєму місці", + "stereo3D": "3D", + "stereo3DHint": "Для 3D-відео: малювати субтитри по одному разу в половині кадру для кожного ока", + "halfSideBySide": "Половина поруч (side-by-side)", + "halfTopBottom": "Половина зверху/знизу", + "depth3D": "Глибина", + "depth3DHint": "Наскільки субтитри виступають з екрана - додатне значення наближає їх, від'ємне відсуває назад", + "plane3D": "3D-Plane", + "plane3DHint": "Задати кожним субтитрам глибину, яку для них зберігає 3D Blu-ray, з файлу 3D-Plane (.ofs), створеного BD3D2MK3D або OFSExtractor. Глибина використовується там, де 3D-Plane її не має", + "openPlane3DTitle": "Відкрити файл 3D-Plane", + "unableToLoadPlane3DX": "Не вдалося завантажити 3D-Plane: {0}", + "plane3DXDepthYToZ": "{0} (глибина від {1} до {2})", + "plane3DXNoDepth": "{0} (немає значень глибини)", "textEffect": "Текстовий ефект", "textEffectSettingsTitle": "Налаштування текстового ефекту", "textEffectPreset": "Пресет", @@ -1413,13 +1479,10 @@ "statistics": { "title": "Статистика", "titleWithFileName": "Статистика - {0}", - "generalStatistics": "Загальна статистика", - "mostUsed": "Найбільш використовувані...", "mostUsedLines": "Найбільш використовувані рядки", "mostUsedWords": "Найбільш використовувані слова", "nothingFound": "Нічого не знайдено", "numberOfLinesX": "Кількість рядків субтитрів: {0:#,##0}", - "numberOfFilesX": "Кількість файлів субтитрів: {0:#,##0}", "lengthInFormatXinCharactersY": "Кількість символів як {0}: {1:#,###,##0}", "numberOfCharactersInTextOnly": "Кількість символів в тексті: {0:#,###,##0}", "totalDuration": "Загальна тривалість всіх субтитрів: {0:#,##0}", @@ -1460,7 +1523,6 @@ "gapMaximum": "Прогалина - максимум: {0:#,##0} мс", "gapAverage": "Прогалина - середня: {0:#,##0.##} мс", "gapExceedingMinimum": "Прогалина - нижче мінімуму ({0:#,##0} мс): {1} ({2:0.00}%)", - "export": "Експорт...", "subtitles": "Субтитри", "words": "Слова", "totalDurationShort": "Загальна тривалість", @@ -1490,6 +1552,21 @@ "restoreAutoBackupFile": "Відновити файл автозбереження", "deleteAllSubtitleBackups": "Бажаєте видалити всі файли резервних копій субтитрів?", "deleteAll": "Видалити все", + "subtitles": "Субтитри", + "settingsBackupInfo": "Резервна копія Settings.json створюється під час запуску Subtitle Edit, не частіше ніж раз на {0} дн. і лише якщо налаштування змінилися. Зберігаються {1} найновіших резервних копій.", + "settingsBackupInfoEveryStart": "Резервна копія Settings.json створюється під час кожного запуску Subtitle Edit, якщо налаштування змінилися. Зберігаються {0} найновіших резервних копій.", + "settingsBackupOff": "Автоматичне резервне копіювання налаштувань вимкнено (Опції → Налаштування → Файл).", + "lastSettingsBackupX": "Остання резервна копія: {0}", + "noSettingsBackupsYet": "Резервних копій налаштувань ще немає", + "openSettingsBackupFolder": "Відкрити теку резервних копій налаштувань", + "backUpSettingsNow": "Створити резервну копію зараз", + "settingsBackedUp": "Резервну копію поточних налаштувань створено.", + "restoreSettings": "Відновити налаштування", + "restoreSettingsFromX": "Замінити ваші поточні налаштування резервною копією від {0}?\n\nСпершу буде створено резервну копію поточних налаштувань. Деякі зміни набудуть чинності лише після перезапуску Subtitle Edit.", + "settingsRestored": "Налаштування відновлено. Перезапустіть Subtitle Edit, щоб усі зміни набули чинності.", + "settingsRestoreFailed": "Не вдалося відновити налаштування: {0}", + "settingsBackupNotValid": "резервна копія не є дійсним файлом налаштувань, тому поточні налаштування збережено", + "deleteAllSettingsBackups": "Видалити всі файли резервних копій налаштувань?", "restoreXFromY": "Бажаєте відновити \"{0}\" з {1}?" }, "propertiesDCinema": { @@ -1504,22 +1581,16 @@ "editRate": "Частота редагування", "timeCodeRate": "Частота коду часу", "startTime": "Час початку", - "font": "Шрифт", "fontId": "ID шрифту", "fontUri": "URI шрифту", - "generate": "Створити", - "fontColor": "Колір шрифту", "chooseColor": "Вибрати колір", "fontEffect": "Ефект шрифту", "effectColor": "Колір ефекту", - "fontSize": "Розмір шрифту", "topBottomMargin": "Верхнє/нижнє поле", "fadeUpTime": "Час затухання вгору", "fadeDownTime": "Час затухання вниз", - "frames": "Кадри", "zPosition": "Z-позиція", - "zPositionHelp": "Додатні числа віддаляють текст, від'ємні наближають; якщо z-позиція дорівнює нулю, то це 2D", - "export": "Експорт..." + "zPositionHelp": "Додатні числа віддаляють текст, від'ємні наближають; якщо z-позиція дорівнює нулю, то це 2D" }, "webVtt": { "setStylesForSelectedLinesTitle": "Встановити стилі WebVTT для виділених рядків", @@ -1552,20 +1623,66 @@ "compareOnlyInOneFile": "Лише в одному файлі", "compareTextOrTimeDifference": "Різниця тексту/часу", "compareNumberDifference": "Різниця номерів", - "ignoreLineBreaks": "Ігнорувати розбиття рядків", "ignoreWhitespace": "Ігнорувати пробіли", "ignoreWhitespaceHint": "Рядки, які відрізняються лише пробілами, табуляціями чи розривами рядків, не вважаються різними", "ignoreFormatting": "Ігнорувати форматування", - "onlyLookForDifferencesInText": "Шукати відмінності тільки в тексті", - "cannotCompareWithImageBasedSubtitles": "Не можна порівняти з субтитрами на основі зображень", - "statisticsTitle": "Статистика", "ignoreFormattingHint": "Рядки, які відрізняються лише тегами форматування, як-от чи {\\an8}, не вважаються різними", "showOnlyDifferencesInText": "Тільки відмінності в тексті", + "ignoreNumbering": "Ігнорувати нумерацію", + "ignoreNumberingHint": "Рядки, які відрізняються лише номером, не вважаються різними", + "ignoreTimeDifferenceMs": "Допуск часу (ms)", + "ignoreTimeDifferenceMsHint": "Час початку та кінця, що відрізняється на цю кількість мілісекунд або менше, не вважається різним", + "compareDifferences": "Відмінності", + "compareTextDifferences": "Відмінності тексту", + "compareCurrent": "Поточні", + "compareReference": "Еталон", + "compareEditable": "Редаговані", + "compareEditableHint": "Зміни, зроблені тут, переносяться в субтитри, коли ви натискаєте Застосувати", + "compareReadOnly": "Лише читання", + "compareTakeFromReference": "Взяти текст і час з еталона", + "compareInsertFromReference": "Вставити цей рядок у поточні субтитри", + "compareDeleteFromCurrent": "Видалити цей рядок із поточних субтитрів", + "compareTakeText": "Взяти текст", + "compareTakeTiming": "Взяти час", + "compareEditLine": "Редагувати рядок", + "compareEditHint": "Ctrl+Enter - зберегти, Esc - скасувати", + "compareEdited": "Відредаговано", + "compareOnePendingChange": "1 незастосована зміна", + "compareXPendingChanges": "Незастосованих змін: {0}", + "compareDiscardXChanges": "Скасувати зміни ({0}), зроблені в Порівнянні?", + "compareXChangesApplied": "Порівняння: застосовано змін: {0}", + "compareChangeTextX": "#{0} текст з еталона", + "compareChangeTimingX": "#{0} час з еталона", + "compareChangeTextAndTimingX": "#{0} текст і час з еталона", + "compareChangeEditedX": "#{0} відредаговано", + "compareChangeInsertedX": "#{0} вставлено", + "compareChangeDeletedX": "#{0} видалено", + "compareSyncPoint": "Точка синхронізації", + "compareSyncPointHint": "Точка синхронізації - ці два рядки завжди показуються парою, а рядки вище та нижче вирівнюються окремо", + "compareSyncPickCurrent": "Точка синхронізації: використати цей поточний рядок", + "compareSyncPickReference": "Точка синхронізації: використати цей еталонний рядок", + "compareSyncRemove": "Видалити точку синхронізації", + "compareClearXSyncPoints": "Очистити точки синхронізації ({0})", + "compareSyncCurrentPickedX": "Поточний #{0} вибрано як точку синхронізації - виділіть відповідний еталонний рядок і натисніть Синхронізація", + "compareSyncReferencePickedX": "Еталонний #{0} вибрано як точку синхронізації - виділіть відповідний поточний рядок і натисніть Синхронізація", + "compareSyncWithCurrentX": "Синхронізувати з поточним #{0}", + "compareSyncWithReferenceX": "Синхронізувати з еталонним #{0}", + "compareSyncApply": "Синхронізація", + "compareSyncPointSetXY": "Точку синхронізації встановлено: поточний #{0} і еталонний #{1} тепер показуються парою", + "compareSyncAlreadyPairedXY": "Поточний #{0} і еталонний #{1} вже показуються парою з однаковим початком - нічого синхронізувати", + "compareSyncPointShiftedXYZW": "Точку синхронізації встановлено: поточні #{0}-#{1} зсунуто на {2}, щоб почати з еталонним #{3}", + "compareChangeSyncShiftXYZ": "#{0}-#{1} зсунуто на {2} (точка синхронізації)", + "compareTimingDeltaHint": "Наскільки пізніше (+) або раніше (−) еталон починається та закінчується порівняно з поточним рядком", "loadXFromFile": "Завантажити \"{0}\" з файлу", + "compareLoadSavedFile": "Завантажити збережений файл", "saveCompareHtmlTitle": "Зберегти файл порівняння HTML", "pickMatroskaTrackX": "Вибрати доріжку Matroska - {0}", "pickTransportStreamTrackX": "Виберіть доріжку транспортного потоку - {0}", + "chapters": "Розділи", + "dvdVobFilesMissingX": "Бракує файлів VOB (знайдено {0}%)", "pickMp4TrackX": "Виберіть доріжку MP4 - {0}", + "pickMxfTrackX": "Виберіть доріжку MXF - {0}", + "pickMpegTrackX": "Виберіть доріжку MPEG - {0}", "rosettaProperties": "Властивості Timed Text Rosetta IMSC", "rosettaFontSize": "Розмір шрифту (висота рядка)", "propertyTimeBase": "База часу", @@ -1575,7 +1692,6 @@ "propertyDefaultRegion": "Типова область", "propertyStyleAttributeName": "Назва атрибута стилю", "propertyTimeCodeFormat": "Формат коду часу", - "propertyFileExtension": "Розширення файлу", "propertyTopOrigin": "Верхній початок", "propertyTopExtent": "Верхній розмір", "propertyBottomOrigin": "Нижній початок", @@ -1625,7 +1741,6 @@ "gapGreaterThan": "Прогалина в мс >" }, "multipleReplace": { - "title": "Множинна заміна", "editRule": "Редагувати правило", "newRule": "Нове правило", "editCategory": "Редагувати категорію", @@ -1642,24 +1757,23 @@ "findWhat": "Що знайти", "descriptionOptional": "Опис (необов'язково)", "invalidRegularExpressionX": "Неприпустимий регулярний вираз: {0}", - "regularExpressionTooSlowX": "Регулярний вираз припинив роботу через {0} с - правило пропущено, спробуйте простіший шаблон" + "regularExpressionTooSlowX": "Регулярний вираз припинив роботу через {0} с - правило пропущено, спробуйте простіший шаблон", + "moveToCategory": "Перемістити до категорії" }, "find": { "searchTextWatermark": "Пошук тексту...", "wholeWord": "Ціле слово", - "caseSensitive": "З урахуванням регістру", - "caseInsensitive": "Без урахування регістру", "findPrevious": "Знайти _попереднє", "findNext": "_Знайти далі", "replaceAndFindNext": "_Замінити і знайти далі", "replaceAll": "Замінити _все", - "replaceTitle": "Замінити", - "replaceWith": "Замінити на", "replaceTextWatermark": "Замінити на...", "replaceIn": "Замінювати/шукати в", "replaceInTextAndOriginal": "Тексті й оригінальному тексті", "replaceInTextOnly": "Лише тексті", - "replaceInOriginalOnly": "Лише оригінальному тексті" + "replaceInOriginalOnly": "Лише оригінальному тексті", + "replacedOneOccurrence": "Замінено одне входження", + "replacedXOccurrences": "Замінено входжень: {0}" }, "regularExpressionContextMenu": { "wordBoundary": "Межа слова (\\b)", @@ -1687,6 +1801,7 @@ "xLinesYSubtitles": "{0} рядків, {1} субтитрів", "xLinesYSubtitlesZErrors": "{0} рядків, {1} субтитрів, {2} помилок", "couldNotParseAsX": "Не вдалося розібрати як {0}", + "readAsXUseAsY": "Джерело не вдалося прочитати як {1}, але вдалося прочитати як {0}.\nВикористати рядки та й далі зберігати як {1}?", "selectedXCharactersYLines": "Виділено: {0} символів у {1} рядку(ах)", "replacedXOccurrences": "Замінено {0} збіг(ів)", "invalidRegularExpression": "Неприпустимий регулярний вираз", @@ -1701,7 +1816,6 @@ "aiReview": { "title": "Рецензія ШІ", "review": "Рецензувати", - "stop": "Зупинити", "editPrompt": "Редагувати запит...", "editPromptTitle": "Редагувати запит рецензії", "promptInfo": "Інструкції, що надсилаються моделі - {language} замінюється мовою субтитрів.", @@ -1712,7 +1826,6 @@ "reviewingLineXOfY": "Рецензування рядка {0} з {1}...", "reviewDone": "Рецензію завершено - {0} пропозицій у {1} рядках", "noIssuesFound": "Проблем не знайдено", - "categoryAll": "Всі", "categorySpelling": "Орфографія", "categoryGrammar": "Граматика", "categoryPunctuation": "Пунктуація", @@ -1724,8 +1837,23 @@ "largeChangeWarning": "Велика зміна - схоже на переписування, перевірте уважно", "mismatchWarning": "Не схоже на оригінал - можливо, належить до іншого рядка", "engineError": "Не вдалося зв'язатися з двигуном ШІ: {0}", - "setupHint": "Будь ласка, спочатку виберіть двигун і модель в Інструменти -> Рецензія ШІ.", - "playCurrentLineHint": "Відтворити виділений рядок у програвачі та зупинитися в його кінці (також подвійне клацання по рядку)" + "playCurrentLineHint": "Відтворити виділений рядок у програвачі та зупинитися в його кінці (також подвійне клацання по рядку)", + "editAfterHint": "Клацніть текст виділеного рядка, щоб відредагувати виправлення перед застосуванням (Enter зберігає, Escape скасовує)", + "template": "Шаблон", + "templatePlaceholder": "Виберіть шаблон, щоб замінити запит", + "templateStandard": "Стандартна вичитка", + "templateSpeechToText": "Очищення розпізнаного мовлення", + "templateMachineTranslation": "Виправлення машинного перекладу", + "templateSdh": "SDH / для людей із вадами слуху", + "referenceContext": "Довідковий контекст", + "referenceContextInfo": "Необов'язково. Імена, персонажі, глосарій, синопсис або примітки щодо стилю - модель вважає це авторитетним джерелом для імен і термінів. Надсилається з кожним пакетом.", + "referenceContextPlaceholder": "Імена: Кайто, тітка Мей, д-р Голліс\nТерміни: Сінкансен, варп-ядро\nСинопсис: Кайто їде до Токіо, щоб знайти зниклого батька.", + "generateContext": "Створити за допомогою ШІ", + "generateContextHint": "Дозволити вибраному двигуну ШІ прочитати субтитри та підготувати імена, терміни й синопсис - перевірте результат перед використанням", + "generatingContextPartXOfY": "Читання частини {0} з {1}...", + "generatingContextSynopsis": "Написання синопсису...", + "replaceContextQuestion": "Замінити поточний довідковий контекст?", + "noContextGenerated": "Двигун ШІ не повернув придатної довідкової інформації." }, "aiAssistant": { "title": "Помічник ШІ", @@ -1743,22 +1871,14 @@ "showReasoning": "Показати міркування моделі" }, "fixCommonErrors": { - "title": "Виправити загальні помилки", - "step1": "Крок 1/2 - Виберіть, які помилки виправляти", - "whatToFix": "Що виправляти", - "example": "Приклад", - "selectAll": "Вибрати все", - "inverseSelection": "Інвертувати вибір", "back": "< &Назад", "next": "&Далі >", - "step2": "Крок 2/2 - Перевірте виправлення", "fixes": "Виправлення", "ruleDetailsDotDotDot": "Подробиці правила...", "showOnlyThisRule": "Показати лише виправлення цього правила", "appliedRulesForLineX": "Застосовані правила для рядка {0}", "ruleX": "Правило: {0}", "log": "Журнал", - "function": "Функція", "removedEmptyLine": "Видалити порожній рядок", "removedEmptyLineAtTop": "Видалити порожній рядок зверху", "removedEmptyLineAtBottom": "Видалити порожній рядок знизу", @@ -1779,13 +1899,13 @@ "removeLineBreaksPixelWidth": "Розбити субтитри, які можуть поміститися в один рядок (ширина в пікселях)", "fixUppercaseIInsideLowercaseWords": "Виправити велику 'i' всередині малих слів (помилка OCR)", "fixDoubleApostrophes": "Виправити подвійні лапки ('') на одну лапку (\")", + "fixMisreadQuotes": "Виправити апострофи, хибно розпізнані як подвійні лапки (OCR, англійська)", "addPeriods": "Додати крапку після рядків, де наступний рядок починається з великої літери", "startWithUppercaseLetterAfterParagraph": "Починати з великої літери після абзацу", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Починати з великої літери після крапки всередині абзацу", "startWithUppercaseLetterAfterColon": "Починати з великої літери після двокрапки/крапки з комою", "fixLowercaseIToUppercaseI": "Виправити окрему малу 'i' на 'I' (англійська)", "fixCommonOcrErrors": "Виправити загальні помилки OCR (використовуючи список заміни OCR)", - "commonOcrErrorsFixed": "Загальні помилки OCR виправлено (використано файл OcrReplaceList): {0}", "removeSpaceBetweenNumber": "Видалити пробіл між числами", "breakDialogsOnOneLine": "Розділити діалоги в одному рядку", "removeDialogFirstInNonDialogs": "Видалити початковий тире в першому рядку для не-діалогів", @@ -1798,12 +1918,10 @@ "removeHyphensSingleLine": "Видалити тире діалогів в одному рядку", "fixHyphensInDialogs": "Виправити тире в діалогах через стиль: {0}", "addMissingQuotesExample": "\"Як справи? -> \"Як справи?\"", - "xMissingQuotesAdded": "Додано відсутні лапки: {0}", "fix3PlusLine": "Виправити субтитри з більш ніж двома рядками", "fix3PlusLines": "Виправити субтитри з більш ніж двома рядками", "analysing": "Аналіз...", "nothingToFix": "Нічого виправляти :)", - "fixesFoundX": "Знайдено виправлень: {0}", "xFixesApplied": "Застосовано виправлень: {0}", "xFixesYSelected": "{0} виправлень - {1} вибрано", "nothingFixableBut": "Нічого не можна виправити автоматично. Субтитри містять помилки - див. журнал для деталей", @@ -1812,7 +1930,6 @@ "fixFirstLetterToUppercaseAfterParagraph": "Виправити першу літеру на велику після абзацу", "mergeShortLine": "Об'єднати короткий рядок (одне речення)", "mergeShortLineAll": "Об'єднати короткий рядок (все, крім діалогів)", - "unbreakShortLinePixelWidth": "Розбити короткий рядок (ширина в пікселях)", "breakLongLine": "Розбити довгий рядок", "fixLongDisplayTime": "Виправити довгий час відображення", "fixInvalidItalicTag": "Виправити недійсний тег курсиву", @@ -1835,7 +1952,6 @@ "fixUppercaseIInsideLowercaseWord": "Виправити велику 'i' всередині малого слова", "fixMissingPeriodAtEndOfLine": "Додати відсутню крапку в кінці рядка", "refreshFixes": "Оновити доступні виправлення", - "applyFixes": "Застосувати вибрані виправлення та закрити", "autoBreak": "Авто &розділити", "unbreak": "&Розбити", "fixDoubleDash": "Виправити '--' -> '...'", @@ -1854,8 +1970,6 @@ "fixSpaceBetweenNumbersExample": "1 100 -> 1100", "fixDialogsOneLineExample": "Привіт Джон! - Привіт Іда! -> Привіт Джон!
- Привіт Іда!", "removeDialogFirstInNonDialogsExample": "- Як справи? -> Як справи?", - "selectDefault": "Вибрати типове", - "setDefault": "Встановити поточні виправлення як типові", "fixContinuationStyleX": "Виправити стиль продовження: {0}", "fixUnnecessaryLeadingDots": "Видалити непотрібні початкові крапки", "fixCommonErrorsProfiles": "Профілі виправлення загальних помилок", @@ -1863,13 +1977,13 @@ "searchRulesDotDotDot": "Пошук правил...", "goToApplyFixes": "Перейти до застосування виправлень", "backToFixList": "Назад до списку виправлень", - "applyFixesAndClose": "Застосувати виправлення та закрити", "fixCommonOcrErrorsStep2": "Виправити загальні помилки, крок 2 (застосування виправлень)", "fixCommonOcrErrorsStep2FixesFoundX": "Виправити загальні помилки, крок 2 - Виправлення знайдено: {0}", "removedEmptyLinesUnusedLineBreaksExample": "Has only one valid line!
-> Has only one valid line!", "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Foo
bar! -> Foo bar!", "fixDoubleApostrophesExample": "''Has double single quotes'' -> \"Has single double quote\"", + "fixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "addPeriodsExample": "Hello world -> Hello world.", "startWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: Foobar!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Hello there! how are you? -> Hello there! How are you?", @@ -1886,18 +2000,11 @@ "adjustDurations": { "title": "Налаштувати тривалість", "adjustVia": "Налаштувати через", - "seconds": "Секунди", - "percent": "Відсоток", "recalculate": "Перерахувати", "addSeconds": "Додати секунди", - "setAsPercent": "Встановити як відсоток від тривалості", "note": "Примітка: Час відображення не буде перекривати час початку наступного тексту", "fixed": "Фіксовано", - "milliseconds": "Мілісекунди", "extendOnly": "Тільки розширити", - "enforceDurationLimits": "Застосувати мінімальну та максимальну тривалість", - "checkShotChanges": "Не розширювати після змін кадрів", - "batchCheckShotChanges": "Дотримуватися змін кадрів (якщо доступно)", "recalculateRequiresOcrNote": "Перерахунок недоступний — один або більше субтитрів не мають тексту OCR. Спочатку запустіть OCR." }, "applyDurationLimits": { @@ -1905,6 +2012,8 @@ "fixMinDurationMs": "Виправити мінімальну тривалість (мс)", "doNotGoPastShotChange": "Не переходити через зміну кадру", "fixMaxDurationMs": "Виправити максимальну тривалість (мс)", + "fixMinDurationFrames": "Виправити мінімальну тривалість (кадри)", + "fixMaxDurationFrames": "Виправити максимальну тривалість (кадри)", "minimumDurationMilliseconds": "Мінімальна тривалість (мілісекунди):", "maximumDurationMilliseconds": "Максимальна тривалість (мілісекунди):", "maxDurationShouldBeHigherThanMinDuration": "Максимальна тривалість має бути більшою за мінімальну тривалість", @@ -1924,12 +2033,8 @@ }, "beautifyTimeCodes": { "title": "Покращити коди часу", - "beautifySettings": "Параметри покращення", "snapToFrames": "Прив'язати до кадрів", - "frameGap": "Прогалина між кадрами", "minDuration": "Мінімальна тривалість (мс)", - "shotChangeThreshold": "Поріг зміни кадру (мс)", - "shotChangeOffset": "Зсув зміни кадру (кадри)", "original": "Оригінал", "beautified": "Покращено", "subtitlesCount": "Субтитри", @@ -1958,10 +2063,76 @@ "timeCodesExtractFailed": "Не вдалося зчитати коди часу з відео", "timeCodesHint": "Прив'язувати точки до реального часу кадрів відео замість припущення про сталу частоту кадрів. Потребує одноразового читання всього відео; результат кешується." }, + "improveTimeCodes": { + "title": "Уточнити коди часу (примусове вирівнювання)", + "aligner": "Вирівнювач", + "alignerHint": "Модель, яка шукає кожен рядок в аудіо. Найкращі варіанти для мови субтитрів наведено першими.", + "maxShift": "Макс. зсув (секунди)", + "maxShiftHint": "Наскільки субтитри можуть бути розсинхронізовані. Рядок, початок якого мав би зсунутися далі, залишається без змін і позначається. За будь-якого значення окремий рядок, який хоче зсунутися більш ніж на пів секунди далі, ніж сусідні рядки, не зсувається наосліп: він слідує за сусідами, якщо всі вони зсунулися, а інакше пропонується без позначки для вашої перевірки.", + "adjustStartTimes": "Коригувати час початку", + "adjustEndTimes": "Коригувати час кінця", + "isolateSpeech": "Спершу ізолювати мовлення (повільно)", + "isolateSpeechHint": "Видаляє музику та звукові ефекти перед вирівнюванням, щоб вирівнювач чув лише діалог. Допомагає для рядків, промовлених на тлі гучної музики чи екшну, але з GPU триває приблизно стільки ж, скільки саме аудіо, - а без нього в багато разів довше.", + "isolatingSpeech": "Ізоляція мовлення... (це триває деякий час)", + "isolateSpeechFailed": "Не вдалося ізолювати мовлення - натомість вирівняно за оригінальним аудіо.", + "checkWithSpeechToText": "Перевірити розпізнаванням мови", + "checkWithSpeechToTextHint": "Також транскрибує аудіо та перевіряє кожне переміщення відносно того, де слова насправді прозвучали. Великі переміщення, які підтверджує мовлення, позначаються автоматично, а переміщення від місця, де рядок чути, залишаються без позначки для вашої перевірки. Також показує, яку частку кожного рядка було почуто - низька частка означає, що текст відрізняється від сказаного. Субтитри, розсинхронізовані сильніше за макс. зсув - постійне зміщення, дрейф через невідповідність частоти кадрів або стрибки там, де вирізано сцени, - спершу синхронізуються за почутими словами. Використовує Crisp ASR Parakeet, що з GPU займає кілька хвилин для повнометражного фільму.", + "checkWithSpeechToTextNotAvailableX": "Перевірка розпізнаванням мови недоступна для {0}", + "transcribingToCheck": "Транскрибування для перевірки вирівнювання...", + "speechToTextFailed": "Розпізнавання мови не вдалося - коди часу не перевірено.", + "speechToTextX": "Розпізнавання мови: {0}", + "speechToTextConfirmedXDisputedY": "Мовлення: підтверджено {0}, сумнівних {1}", + "hardlyHeardX": "Розпізнавання мови почуло лише {0}% слів субтитрів. Чи субтитри мовою, якою говорять? Вирівнювач не може розмістити переклад.", + "heard": "Почуто", + "heardHint": "Яку частку рядка почуло розпізнавання мови. Низька частка означає, що текст відрізняється від сказаного - саме там вирівнювач найімовірніше помиляється.", + "statusConfirmedBySpeech": "Підтверджено мовленням", + "statusDisputedBySpeech": "Почуто там, де був", + "statusMovedWithSync": "Зсунуто разом із синхронізацією", + "syncedFirstXY": "Спершу синхронізовано: {0} с на початку, {1} с у кінці", + "showSpeechOnly": "Показати лише мовлення", + "showSpeechOnlyHint": "Малювати вирівняну хвильову форму з аудіо без музики та звукових ефектів; оригінальна хвильова форма залишається як є, для порівняння. Доступно після ізоляції мовлення - тут або через \"Показати лише мовлення\" у хвильовій формі головного вікна.", + "align": "Вирівняти", + "original": "Оригінал", + "aligned": "Вирівняно", + "intro": "Виберіть вирівнювач і натисніть \"Вирівняти\", щоб знайти кожен рядок в аудіо та уточнити його коди часу.", + "extractingAudio": "Вилучення аудіо...", + "aligningBatchXOfY": "Вирівнювання... пакет {0} з {1}", + "extractAudioFailed": "Не вдалося вилучити аудіо за допомогою ffmpeg.", + "modelWillBeDownloaded": "{0} буде завантажено", + "summaryXRetimedYKeptZSkipped": "Змінено час: {0} · Залишено: {1} · Без мовлення: {2}", + "meanShiftX": "Середній зсув: {0} ms", + "toCheckX": "Для перевірки: {0}", + "largeMovesToCheckX": "Рядків, які самі по собі зсунулися б дуже далеко і залишені без позначки: {0} - прослухайте їх (F5 відтворює вирівняний рядок, Shift+F5 - оригінал) і позначте правильні.", + "linesToCheckX": "Рядків, залишених без позначки для перевірки: {0} - прослухайте їх (F5 відтворює вирівняний рядок, Shift+F5 - оригінал) і позначте правильні.", + "changeXOfY": "Зміна {0} з {1}", + "previousChange": "Попередня зміна", + "nextChange": "Наступна зміна", + "startShift": "Початок", + "endShift": "Кінець", + "statusRetimed": "Час змінено", + "statusMovedWithNeighbours": "Зсунуто разом із сусідами", + "statusLargeMoveUnconfirmed": "Великий зсув - прослухайте, позначте для застосування", + "statusUnchanged": "Вже на місці", + "statusNoSpeech": "Без мовлення", + "statusShiftTooLarge": "Залишено - завеликий зсув", + "statusFailed": "Залишено - помилка вирівнювача", + "statusAdjustedByHand": "Скориговано вручну", + "alignedWaveformHint": "Перетягніть рядок, щоб перемістити його, або перетягніть його краї, щоб змінити початок чи кінець.", + "playLine": "Відтворити рядок", + "undoAdjustment": "Скасувати коригування", + "playPause": "Відтворити / пауза", + "playAligned": "Вирівняно", + "playAlignedHint": "Відтворити виділений рядок із його вирівняними кодами часу", + "apply": "Застосувати", + "applyHint": "Зніміть позначку з рядка, щоб зберегти його оригінальні коди часу. Двічі клацніть рядок, щоб відтворити його. Рядки також можна переміщувати чи змінювати їхній розмір у вирівняній хвильовій формі." + }, "bridgeGaps": { - "title": "Замкнути прогалини", "bridgeGapsSmallerThan": "Замкнути прогалини менші за (мс)", "minGap": "Мінімальна прогалина (мс)", + "bridgeGapsSmallerThanFrames": "Замкнути прогалини, менші за (кадри)", + "minGapFrames": "Мінімальна прогалина (кадри)", + "calculateBridgeGapsSmallerThanDotDotDot": "Обчислити межу замикання прогалин за частотою кадрів...", + "useXMsAsBridgeGapsSmallerThan": "Замкнути прогалини, менші за \"{0}\" мілісекунд?", "numberOfSmallGapsBridgedX": "Кількість замкнутих малих прогалин: {0}", "percentFoPrevious": "Прогалина для попереднього (%)", "gapChange": "Зміна прогалини" @@ -1973,8 +2144,6 @@ "sortBy": { "title": "Сортувати субтитри", "sortOrder": "Порядок сортування", - "sortByNumber": "Номер", - "sortByStartTime": "Час початку", "sortByEndTime": "Час завершення" }, "batchConvert": { @@ -1997,6 +2166,7 @@ "addColor": "Додати колір", "deleteLinesWithSpecificActorsOrStyles": "Видалити рядки з акторами або стилями (окремі значення через кому)", "useSourceStylesIfPossible": "Використовувати вихідні стилі, якщо можливо", + "keepSourceEmbeddedFonts": "Зберегти вбудовані шрифти джерела (footer)", "editStyles": "Редагувати стилі", "editProperties": "Редагувати властивості", "editAttachments": "Редагувати вкладення", @@ -2017,7 +2187,6 @@ "assaChangeStyleFromStyle": "Змінити стиль з", "assaChangeStyleToStyle": "на", "assaChangeStyleImportStyle": "Імпортувати стиль...", - "assaChangeStyleImportedX": "Імпортовано: {0}", "assaChangeStyleTrimUnusedStyles": "Обрізати невикористані стилі", "assaChangeStylePropertiesTitle": "Змінити властивості стилю", "assaChangeStylePropertiesInfo": "Змінює вибрані поля в кожному стилі файлу, не чіпаючи самі стилі.", @@ -2029,13 +2198,52 @@ "convertColorsToDialogReBreakLines": "Перерозбити рядки", "snapTimeCodesToFramesInfo": "Округлює кожен час початку і кінця до найближчого кадру. Частота кадрів зчитується з відеофайлу з такою самою назвою, як файл субтитрів, якщо не вибрано фіксовану частоту кадрів.", "addFolderDotDotDot": "Додати папку...", + "addFolderRecursiveDotDotDot": "Додати теку рекурсивно...", "selectFolderToConvert": "Виберіть папку з файлами для конвертування", "includeSubfolders": "Включати підпапки під час додавання папки", + "videoFilesWhenAddingFolder": "Відеофайли (mkv, mp4, ts...) під час додавання теки", + "videoFilesAsk": "Запитувати", + "videoFilesInclude": "Додавати їхні доріжки субтитрів", + "videoFilesSkip": "Пропускати", + "folderContainsXVideoFiles": "Тека містить відеофайлів (mkv, mp4, ts...): {0}.\n\nДодати також їхні вбудовані доріжки субтитрів чи лише файли субтитрів?", + "addVideoFiles": "Додати відеофайли", + "skipVideoFiles": "Лише файли субтитрів", + "doNotAskAgainVideoFiles": "Більше не запитувати (змінюється в параметрах пакетного перетворення)", + "settingsSectionOutput": "Вивід", + "settingsSectionAddingFiles": "Додавання файлів", + "settingsSectionImageBasedSubtitles": "Субтитри на основі зображень (OCR)", + "settingsSectionOther": "Інше", "keepSourceFileTimestamp": "Зберігати дату/час вихідного файлу на створених файлах", - "scanningFolderX": "Сканування {0}..." + "preventSleepWhileConverting": "Не давати комп'ютеру переходити в режим сну під час перетворення", + "scanningFolderX": "Сканування {0}...", + "transportStreamSettings": "Налаштування Transport Stream", + "transportStreamSettingsDotDotDot": "Налаштування Transport Stream...", + "transportStreamSettingsInfo": "Застосовується до доріжок субтитрів, вилучених із файлів Transport Stream (.ts/.m2ts). Позиція та розмір відео впливають лише на графічні доріжки DVB, експортовані у формат на основі зображень.", + "transportStreamOverrideXPosition": "Перевизначити оригінальну позицію X", + "transportStreamOverrideYPosition": "Перевизначити оригінальну позицію Y", + "transportStreamOverrideVideoSize": "Перевизначити оригінальний розмір відео", + "transportStreamBottomMargin": "Нижній відступ", + "transportStreamFileNameEnding": "Закінчення імені файлу", + "transportStreamFileNameEndingInfo": "Додається перед розширенням для кожної вилученої доріжки. Залиште порожнім, щоб використати звичайний постфікс мови.", + "transportStreamOnlyTeletext": "Лише телетекст", + "transportStreamGetSizeFromVideo": "Отримати розмір із відео...", + "twoLetterLanguageCodeUppercase": "Дволітерний код мови (великими літерами)", + "threeLetterLanguageCodeUppercase": "Трилітерний код мови (великими літерами)", + "formatContainsDotDotDot": "Формат містить...", + "extensionIsDotDotDot": "Розширення...", + "statusIsError": "Статус - помилка", + "forcedTracksOnly": "Лише примусові доріжки", + "xConvertedYFailedInZ": "Перетворено {0:#,###,##0}, з помилкою {1:#,###,##0} за {2}", + "xNotProcessed": "Не оброблено: {0:#,###,##0}", + "removeUnicodeControlCharactersTitle": "Видалити символи керування Unicode", + "removeUnicodeControlCharactersInfo": "Видаляє з тексту невидимі символи керування напрямком Unicode (LRM, RLM, LRE, RLE, PDF, LRO і RLO) та замінює нерозривні пробіли звичайними.", + "preset": "Пресет", + "savePresetDotDotDot": "Зберегти пресет...", + "deletePreset": "Видалити пресет", + "presetName": "Назва пресету", + "deletePresetX": "Видалити пресет \"{0}\"?" }, "changeCasing": { - "title": "Змінити регістр", "fixNames": "Виправити імена", "namesX": "Імена: {0:#,##0}", "hitsX": "Збіги: {0:#,##0}", @@ -2046,9 +2254,7 @@ "allUppercase": "Всі великі літери", "allLowercase": "Всі малі літери" }, - "changeFormatting": { - "title": "Змінити форматування" - }, + "changeFormatting": {}, "convertActors": { "title": "Конвертувати акторів", "convertActorFrom": "Конвертувати актора з", @@ -2069,7 +2275,6 @@ "title": "Розділити субтитри", "numberOfEqualParts": "Кількість рівних частин", "saveSplitParts": "_Зберегти розділені частини", - "subtitleSplitIntoXParts": "Субтитри розділено на {0} частин.", "xPartsSavedInFormatYToFolder": "{0} частин збережено у форматі {1} в теку:" }, "splitBreakLongLines": { @@ -2095,13 +2300,14 @@ "onlyContinuationLines": "Лише рядки продовження" }, "mergeLinesWithSameText": { - "title": "Об'єднати рядки з однаковим текстом", "maxMsBetweenLines": "Макс. мілісекунд між рядками", - "includeIncrementingLines": "Включити рядки з інкрементним текстом" + "maxFramesBetweenLines": "Макс. кадрів між рядками", + "includeIncrementingLines": "Включити рядки з інкрементним текстом", + "includeRollUpCaptions": "Включати прокручувані (roll-up) титри" }, "mergeLinesWithSameTimeCodes": { - "title": "Об'єднати рядки з однаковими кодами часу", "maxMsDifference": "Макс. різниця (мілісекунди)", + "maxFramesDifference": "Макс. різниця (кадри)", "makeDialog": "Створити діалог" }, "netflixCheckAndFix": { @@ -2124,7 +2330,6 @@ "shotChanges": "Зміни кадрів", "startNumberSpellOut": "Число на початку прописом", "textforHiUseBrackets": "Текст для HI, використовувати дужки", - "frameRate": "Частота кадрів", "twoFrameGrap": "Прогалина у два кадри", "whiteSpace": "Пробіл", "childrensProgram": "Дитяча програма", @@ -2162,7 +2367,6 @@ "italicsFixed": "Виправлено курсив", "italicsNotAllowed": "Курсив не дозволено", "bridgeGapsXToYFrames": "прогалина 3-{0} кадрів => прогалина 2 кадри", - "startNumberSpellOutComment": "Коли число починає речення, його завжди слід писати прописом", "maximumXCharactersPerSecond": "Максимум {0} символів на секунду" }, "imageBasedEdit": { @@ -2172,10 +2376,8 @@ "resizeImagesDotDotDot": "Змінити розмір зображень...", "adjustBrightnessDotDotDot": "Налаштувати яскравість...", "adjustAlphaDotDotDot": "Налаштувати прозорість...", - "centerHorizontally": "Центрувати горизонтально", "cropImages": "Обрізати зображення", "importTimeCodes": "Імпорт кодів часу...", - "setTextForSubtitle": "Встановити текст для субтитрів", "screenWidth": "Ширина екрану", "screenHeight": "Висота екрану", "alphaThresholdInfo": "Пікселі з прозорістю нижче порогу стають повністю прозорими", @@ -2205,14 +2407,30 @@ "letterboxCustom": "Користувацька висота смуги", "barHeightPx": "Висота смуги (px)", "titleSafePercent": "Безпечна зона заголовка (%)", + "moveCaptions": "Перемістити титри", + "moveCaptionsDotDotDot": "Перемістити титри...", + "moveCaptionsTo": "Перемістити титри", + "moveCaptionsIntoBars": "У чорні смуги letterbox (поза зображенням)", + "moveCaptionsIntoPicture": "Всередину зображення (зі смуг)", + "moveCaptionsOffset": "Відступ від краю (px)", + "letterboxBarHeightXPxYOfZCaptionsWillMove": "Висота смуги: {0} px - буде переміщено {1} з {2} титрів", + "removeFadeInOut": "Видалити появу/зникнення", + "removeFadeInOutXLinesRemoved": "Рядків затухання, об'єднаних із рядками, до яких вони належать: {0}", + "removeFadeInOutNothingFound": "Рядків появи/зникнення не знайдено", "positionSummary": "{0}×{1} - {2} субтитрів - висота смуги: {3} px", "xInActivePicture": "{0} у кадрі", "xInTopBar": "{0} у верхній смузі", "xInBottomBar": "{0} у нижній смузі", "noImageSubtitlesLoaded": "Субтитри-зображення не завантажено", - "imageBasedFormatNotSupported": "Формат субтитрів на основі зображень не знайдено/не підтримується." + "imageBasedFormatNotSupported": "Формат субтитрів на основі зображень не знайдено/не підтримується.", + "frameRateDeclaredInFile": "Частота кадрів, указана у файлі Blu-ray sup", + "frameRateDetectedFromTimeCodesX": "Частоту кадрів визначено за кодами часу Blu-ray sup (у файлі вказано {0})", + "frameRateFromVideo": "Частота кадрів відео", + "frameRateCurrent": "Поточна частота кадрів", + "frameRateSetManually": "Частоту кадрів задано вручну", + "frameRateUsageInfo": "Експорт у Blu-ray sup, BDN XML, DOST і FCP записується з цією частотою кадрів. Це не змінює жодного часу - для цього використовуйте \"Змінити частоту кадрів\".", + "useVideoFrameRateXInsteadOfY": "Частота кадрів відео - {0}, але для субтитрів встановлено {1}.\n\nВикористати частоту кадрів відео ({0})?" }, - "pickAlignmentTitle": "Вибрати вирівнювання", "removeUnicodeCharacters": { "title": "Видалити/замінити символи Unicode", "charactersFoundX": "Знайдено символів Unicode: {0}", @@ -2222,13 +2440,13 @@ "pickFontNameInstalledFonts": "Встановлені шрифти", "pickFontNameCollectedFonts": "Зібрані шрифти", "colorPickerTitle": "Вибрати колір", + "colorPickerBrightness": "Яскравість", "filterLayersTitle": "Фільтр шарів для відображення", "filterLayersHideFromWaveform": "Приховати з хвильової форми/спектрограми", "filterLayersHideFromSubtitleGrid": "Приховати з таблиці субтитрів", "filterLayersHideFromVideoPreview": "Приховати з попереднього перегляду відео", "pickSubtitleFormat": "Вибрати формат субтитрів", "pickSubtitleFormatImageBasedNoPreview": "Формат субтитрів на основі зображень.\nРастрові зображення створюються під час перетворення - без попереднього перегляду тексту.", - "pickLayerTitle": "Встановити шар", "recentColors": "Останні кольори", "beautifyTimeCodesProfile": { "title": "Редагувати профіль покращення кодів часу", @@ -2236,7 +2454,11 @@ "presetDefault": "За замовчуванням", "presetNetflix": "Netflix", "presetSdi": "SDI", - "general": "Загальне", + "saveAsProfile": "Зберегти як профіль...", + "deleteProfile": "Видалити профіль", + "profileName": "Назва профілю", + "overwriteProfileX": "Профіль із назвою \"{0}\" вже існує. Перезаписати його?", + "deleteProfileX": "Видалити профіль \"{0}\"?", "gap": "Прогалина", "gapSuffix": "кадрів (також оновлює ненульові поля прогалин нижче)", "milliseconds": "мс", @@ -2276,12 +2498,7 @@ "outputFormatAssa": "Advanced Sub Station Alpha (.ass)", "style1": "Стиль 1", "style2": "Стиль 2", - "outlineWidth": "Ширина контуру", - "shadowWidth": "Ширина тіні", - "alignTop": "Зверху", - "alignBottom": "Знизу", - "merge": "_Об'єднати", - "pleaseLoadTwoSubtitles": "Будь ласка, завантажте двоє субтитрів" + "merge": "_Об'єднати" }, "mergeContinuationLines": { "title": "Об'єднати рядки продовження", @@ -2292,12 +2509,9 @@ "columnMerge": "Об'єднати", "columnFirst": "Перший рядок", "columnSecond": "Другий рядок", - "columnMerged": "Об'єднано", - "selectAll": "Вибрати все", - "inverseSelection": "Інвертувати вибір" + "columnMerged": "Об'єднано" }, "removeTextForHearingImpaired": { - "title": "Видалити текст для людей з втратою слуху", "interjections": "Вигуки", "skipIfStartWith": "Пропустити, якщо починається з", "removeTextBetween": "Видалити текст між", @@ -2359,59 +2573,51 @@ "correctWordsX": "Правильні слова: {0}", "namesX": "Імена: {0}", "addedToDictionaryX": "Додано до словника: {0}", - "doNotShowThisAgain": "Більше не показувати це повідомлення" + "doNotShowThisAgain": "Більше не показувати це повідомлення", + "editUseAlwaysList": "Редагувати список \"Використовувати завжди\"...", + "useAlwaysListTitle": "Перевірка орфографії - список \"Використовувати завжди\"", + "useAlwaysListHeader": "Список \"Використовувати завжди\"", + "useAlwaysListDescription": "Слова, які перевірка орфографії замінює автоматично, збережені через \"Змінити все\" та \"Використовувати завжди\". Пара використовується лише тоді, коли слово написано з помилкою.", + "useAlwaysWord": "Слово з помилкою", + "xPairs": "Пар: {0:#,##0}", + "xUnusedPairs": "Жодного разу не використано: {0:#,##0}", + "useAlwaysUnusedHint": "Жодного разу не використано - це слово написано правильно (або це ім'я чи слово користувача), тому перевірка орфографії ніколи його не позначає", + "removeUnused": "Видалити невикористані", + "useAlwaysEmpty": "Для цієї мови ще немає пар \"Використовувати завжди\"", + "useAlwaysEmptyHint": "Пари додаються, коли ви натискаєте \"Змінити все\" або \"Використовувати завжди\" під час перевірки орфографії.", + "useAlwaysNoMatch": "Немає пар, що відповідають пошуку", + "useAlwaysSameWord": "Заміна має відрізнятися від слова.", + "useAlwaysRememberOff": "\"Запам'ятовувати список 'Використовувати завжди'\" вимкнено в Налаштуваннях, тому перевірка орфографії не використовує і не зберігає цей список." }, "video": { "burnIn": { "title": "Створити відео з вбудованими субтитрами", - "infoAssaOff": "Примітка: Підтримка стилю Advanced SubStation Alpha.", - "infoAssaOn": "Примітка: Буде використано Advanced SubStation Alpha стилі :)", - "xGeneratedWithBurnedInSubsInX": "\"{0}\" створено з вбудованими субтитрами в {1}.", - "timeRemainingMinutes": "Час, що залишився: {0} хвилин", - "timeRemainingOneMinute": "Час, що залишився: Одна хвилина", - "timeRemainingSeconds": "Час, що залишився: {0} секунд", - "timeRemainingAFewSeconds": "Час, що залишився: Кілька секунд", - "timeRemainingMinutesAndSeconds": "Час, що залишився: {0} хвилин і {1} секунд", - "timeRemainingOneMinuteAndSeconds": "Час, що залишився: Одна хвилина і {0} секунд", - "targetFileName": "Назва цільового файлу: {0}", "targetFileSize": "Цільовий розмір файлу (потрібне двократне кодування)", "fileSizeMb": "Розмір файлу в МБ", "matchSourceVideoSize": "Відповідати розміру вихідного відео", - "passX": "Прохід {0}", - "encoding": "Кодування", "bitRate": "Бітрейт", "totalBitRateX": "Загальний бітрейт: {0}", "sampleRate": "Частота дискретизації", "audio": "Аудіо", - "stereo": "Стерео", "preset": "Попередньо встановлено", + "tune": "Tune", "pixelFormat": "Формат пікселів", "crf": "CRF", - "tuneFor": "Тюнінг для", - "alignRight": "Вирівняти праворуч", - "getStartPosition": "Отримати початкову позицію", - "getEndPosition": "Отримати кінцеву позицію", "useSource": "Використовувати джерело", - "useSourceFolder": "Використовувати вихідну теку", - "useSourceResolution": "Використовувати вихідну роздільну здатність", - "outputSettings": "Вихідний файл/тека...", "fontSizeFactor": "Коефіцієнт розміру шрифту", "boxType": "Тип коробки", - "fixRightToLeft": "Виправити з правого на ліве", - "cut": "Вирізати", "fromTime": "З часу", "toTime": "До часу", "audioEncoding": "Кодування аудіо", "outputProperties": "Властивості виводу...", "videoFileSize": "Розмір відеофайлу", "oneBox": "Одна коробка", - "boxPerLine": "Коробка на рядок", - "logoInfo": "Виберіть зображення PNG і перетягніть його, щоб розташувати на відео." + "logoInfo": "Виберіть зображення PNG і перетягніть його, щоб розташувати на відео.", + "noSubtitlesGenerateAnyway": "Немає рядків субтитрів для вбудовування.\n\nСтворити відео без субтитрів?", + "noSubtitlesInXItemsGenerateAnyway": "Елементів пакета без рядків субтитрів для вбудовування: {0}.\n\nСтворити ці відео без субтитрів?" }, "videoTransparent": { - "title": "Створити прозоре відео з субтитрами", - "infoAssaOff": "Примітка: Підтримка стилю Advanced SubStation Alpha.", - "infoAssaOn": "Примітка: Буде використано Advanced SubStation Alpha стилі :)" + "title": "Створити прозоре відео з субтитрами" }, "audioToText": { "title": "Розпізнавання мови", @@ -2419,6 +2625,21 @@ "translateToEnglish": "Перекласти на англійську", "transcribing": "Транскрибування...", "transcribingXOfY": "Транскрибування {0} з {1}...", + "linesTranscribedXOfYFailedZ": "Транскрибовано {0} з {1} рядків - {2} з помилкою або без мовлення.\n\nРядки з помилкою зберігають поточний текст. Застосувати транскрибовані рядки чи повторити невдалі (спершу можна змінити двигун або налаштування)?", + "linesTranscribedXOfYCancelled": "Транскрибування скасовано після {0} з {1} рядків.\n\nЗастосувати транскрибовані рядки? Інші рядки зберігають поточний текст.", + "noLinesTranscribed": "Жоден із {0} рядків не вдалося транскрибувати.\nПодробиці дивіться в журналі інструментів.", + "applyTranscribedLines": "Застосувати транскрибовані", + "retryFailedLines": "Повторити невдалі", + "isolateSpeech": "Ізолювати мовлення (повільно)", + "isolateSpeechHint": "Видаляє музику та звукові ефекти перед транскрибуванням. Дає менше пропущених рядків і кращий таймінг для аудіо з гучною музикою, але з GPU триває приблизно стільки ж, скільки саме аудіо, - а без нього в багато разів довше.", + "isolatingSpeech": "Ізоляція мовлення...", + "isolateSpeechFailed": "Не вдалося ізолювати мовлення - транскрибується оригінальне аудіо.", + "detectSpeakers": "Визначати мовців", + "detectSpeakersHint": "Починає кожен рядок із мовця, наприклад \"(speaker 0)\", за допомогою діаризації NVIDIA Sortformer (до 8 мовців). Найкраще працює з двигунами, які розділяють рядки там, де змінюється мовець, як-от Parakeet і Cohere.", + "detectSpeakersNeedsNewerCrispAsr": "\"Визначати мовців\" потребує Crisp ASR v{0} або новішої, але встановлено v{1}.\n\nОновіть Crisp ASR (кнопка з шестернею поруч із двигуном) або вимкніть \"Визначати мовців\".", + "xNeedsNewerCrispAsr": "{0} потребує Crisp ASR v{1} або новішої, але встановлено v{2}.\n\nЗавантажити та встановити оновлення зараз?", + "vad": "VAD", + "vadHint": "Визначення голосової активності: транскрибується лише мовлення, розрізане там, де мовець робить паузу.\nАвто: Silero, і лише для двигунів, яким це потрібно (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: завжди увімкнено, для кожного двигуна Crisp ASR. FireRedVAD найточніший, Whisper-VAD дає найменше та найчистіших розрізів, але найповільніший.\nIndex-Echo завжди використовує Silero. --vad, --vad-model або --chunk-seconds у розширених налаштуваннях мають пріоритет.", "inputLanguage": "Мова вводу", "advancedWhisperSettings": "Розширені налаштування Whisper", "enableVad": "Увімкнути VAD", @@ -2431,11 +2652,9 @@ "addCustomModelDotDotDot": "Додати користувацьку модель...", "customModelHelp": "Ви можете використовувати власну модель: виберіть файл моделі (whisper.cpp ggml '.bin') або теку моделі (тека faster-whisper з 'model.bin' всередині). Її буде скопійовано до теки моделей і додано до списку вище.", "viewToolsLogFile": "Переглянути файл журналу Whisper", - "reDownloadX": "Перезавантажити {0}", "downloadingSpeechToTextModel": "Завантаження моделі розпізнавання мови", "downloadingSpeechToTextEngine": "Завантаження двигуна розпізнавання мови", "unpackingSpeechToTextEngine": "Розпакування двигуна розпізнавання мови", - "downloadX": "Завантажити {0}", "updateXTitle": "Оновити {0}?", "updateXMessage": "Доступна новіша версія {0}.{1}{1}Завантажити і встановити оновлення зараз?", "whisperPostProcessingTitle": "Постобробка Whisper", @@ -2446,14 +2665,6 @@ "fixCasing": "Виправити регістр", "addPeriods": "Додати крапки", "changeUnderlineToColor": "Змінити підкреслення на колір", - "cueBuilding": "Побудова реплік (MLX Whisper)", - "cueRebuild": "Перебудувати репліки з часових міток слів", - "cueMaxChars": "Макс. символів на репліку", - "cueMaxSeconds": "Макс. секунд на репліку", - "cueMaxCps": "Макс. символів на секунду", - "vocabularyPrompt": "Словниковий запит (імена, місця, терміни)", - "beamSize": "Розмір променя (beam)", - "beamSizeNote": "0 декодує найшвидше. 5 дає найкращу точність (як Faster Whisper) приблизно на 20-30% довше. Значення понад 5 рідко допомагають.", "removeNonSpeechLines": "Видаляти немовленнєві рядки", "removeNonSpeechLinesHint": "Відкидати рядки, які лише описують звук, як-от \"[Музика]\" чи \"(шум хвиль)\"", "removeRepeatedLines": "Видаляти повторювані рядки", @@ -2512,7 +2723,7 @@ "cloneVoicePerLinePreparing": "Отримання голосу кожного рядка з відео...", "cloneVoicePerLineNeedsVideo": "Клонування голосу кожного рядка потребує відео, до якого належать субтитри. Відкрийте відео і спробуйте ще раз.", "cloneVoicePerLineNoClips": "З відео не вдалося отримати аудіо, тож немає з чого клонувати. Перевірте, чи має відео звукову доріжку.", - "cloneVoicePerLineNeedsOriginalSubtitleX": "{0} може клонувати рядок лише тоді, коли знає, що сказано у відео в цьому рядку, а це береться із субтитрів мовою оригіналу. Оригінальні субтитри не завантажено, тож кожен рядок озвучував би перший імпортований голос замість голосу з відео.\n\nВідкрийте оригінальні субтитри (Файл > Відкрити оригінал...) поруч із перекладом, а потім створіть знову.", + "cloneVoicePerLineTranscribeClipsXYZ": "{0} може клонувати рядок, лише коли відомо, що говорять у відео в цьому рядку. Це невідомо для {1} з {2} рядків - зазвичай це береться з субтитрів мовою оригіналу (Файл > Відкрити оригінал...).\n\nТранскрибувати ці рядки з відео за допомогою розпізнавання мови зараз?\n\nТак: виберіть двигун і мову, якою говорять у відео, і еталонні фрагменти буде транскрибовано перед створенням мовлення.\nНі: все одно створити - ці рядки буде озвучено звичайним голосом замість голосу з відео.", "voiceCloneConsentTitle": "Клонування голосу - перед початком", "voiceCloneConsentHeader": "Ви збираєтеся клонувати голос", "voiceCloneConsentIntro": "Клонування копіює голос реальної людини. У більшості місць це супроводжується правилами, а в ЄС - юридичними обов'язками, які лягають на вас, а не на Subtitle Edit. Прочитайте це один раз.", @@ -2528,6 +2739,12 @@ "voiceCloneConsentDeclined": "Клонування голосу недоступне, доки ці умови не прийнято.", "advancedTtsAudioProcessing": "Обробка аудіо", "advancedTtsOutput": "Вихід", + "advancedTtsVoiceCloning": "Клонування голосу", + "cleanCloneReferences": "Очищати еталони для клонування голосу (Sidon)", + "cleanCloneReferencesDescription": "Видаляє музику, шум і реверберацію з аудіо, з якого клонується голос: фрагментів, узятих із відео, і записів, імпортованих у керуванні голосами. Використовує модель відновлення мовлення Sidon на audio.cpp (завантаження 940 MB). Клонований голос більше не копіює фон, але дуже тихе мовлення або мовлення, що накладається, може звучати приглушено.", + "cleaningCloneReferencesDotDotDot": "Очищення еталонів для клонування голосу...", + "downloadSidonTitle": "Завантажити Sidon?", + "downloadSidonQuestionX": "Для очищення еталонів клонування голосу потрібна модель відновлення мовлення Sidon ({0}).\n\nЗавантажити її зараз? Без неї еталони використовуються як є.", "rubberbandInstalled": "(встановлено)", "rubberbandNotFound": "(не знайдено у FFmpeg)", "generationFolder": "Папка генерації", @@ -2536,14 +2753,11 @@ "deleteTempFilesDescription": "Видаляє папку генерації при закритті вікна Синтез мовлення. Збережені аудіо- та відеофайли залишаються.", "piperSettings": "Налаштування Piper", "title": "Синтез мовлення", - "textToSpeechEngine": "Двигун синтезу мовлення", "reviewAudioSegments": "TTS - Переглянути аудіо сегменти", "reviewAudioSegmentsHistory": "TTS - Переглянути історію аудіо", "stability": "Стабільність", "similarity": "Схожість", "speakerBoost": "Підсилення спікерів", - "styleExaggeration": "Переоцінка стилю", - "regenerateAudioSelectedLine": "Перестворити аудіо для виділеного рядка", "generateSpeechFromText": "Створити мовлення з тексту", "testVoice": "Тест голосу", "addAudioToVideoFile": "Додати аудіо до відеофайлу", @@ -2562,22 +2776,98 @@ "videoEncodingSettings": "TTS - Налаштування кодування відео", "elevenLabsSettings": "TTS - Налаштування ElevenLabs", "elevenLabsSettingsResetHint": "Скинути налаштування ElevenLabs до типових значень", + "provider": "Постачальник", + "openAiCompatibleSettings": "TTS - налаштування, сумісні з OpenAI", + "customServerUrl": "URL власного сервера", + "customServerUrlHint": "Повна кінцева точка мовлення сервера, сумісного з OpenAI, яка використовується, коли постачальник \"Custom\", наприклад http://localhost:8880/v1/audio/speech", + "customModels": "Власні моделі", + "customModelsHint": "Назви моделей через кому, що пропонуються, коли постачальник \"Custom\"", + "customVoices": "Власні голоси", + "customVoicesHint": "Назви голосів через кому, що використовуються постачальником \"Custom\" і моделями OpenRouter, які не публікують список голосів", + "instructions": "Інструкції", + "instructionsHint": "Необов'язковий стиль мовлення, наприклад \"Говори спокійним, теплим голосом\". Надсилається лише моделям, які це підтримують (не tts-1/tts-1-hd)", + "openAiSpeedHint": "Швидкість мовлення від 0.25 до 4.0 (1.0 - звичайна). Підтримується не всіма моделями", + "outputFormat": "Вихідний формат", + "outputFormatHint": "Аудіоформат, що запитується в сервера. \"Auto\" запитує MP3 і перемикається на PCM для моделей, які повертають лише PCM (наприклад, Gemini TTS)", "regenerateAudio": "Перестворити аудіо", "autoContinuePlaying": "Автоперехід відтворення", "addingAudioToVideoFileDotDotDot": "Додавання аудіо до відеофайлу...", "preparingMergeDotDotDot": "Підготовка об'єднання...", "importVoiceDotDotDot": "Імпортувати голос...", + "renameVoiceDotDotDot": "Перейменувати голос...", + "renameVoiceTitle": "Перейменувати голос", + "voiceXCouldNotBeRenamedX": "Не вдалося перейменувати голос '{0}': {1}", + "deleteVoiceDotDotDot": "Видалити голос...", + "deleteVoiceTitle": "Видалити голос", + "deleteVoiceXQuestion": "Видалити голос '{0}'?\n\nЕталонний запис і його файли буде видалено з диска.", + "voiceXCouldNotBeDeletedX": "Не вдалося видалити голос '{0}': {1}", "voiceImportSuccessTitle": "Голос імпортовано", "voiceXImported": "Голос '{0}' успішно імпортовано", "dropAudioFileHereToImportVoice": "Перетягніть аудіофайл сюди, щоб імпортувати голос", "dropAudioFileHereHint": ".wav або .mp3", "voiceCloneTranscriptTitle": "Введіть транскрипцію аудіо (потрібно для клонування голосу)", + "voiceManagerTitle": "TTS - Керування голосами", + "voiceManagerDotDotDot": "Керування голосами...", + "voiceManagerMenuItem": "Керування голосами TTS...", + "speakFromCurrentLineTitle": "Читати вголос від поточного рядка", + "speakFromCurrentLineDotDotDot": "Читати вголос від поточного рядка...", + "speakFromCurrentLineHint": "Читає рядки вголос один за одним, починаючи з поточного рядка. Натисніть Escape або клацніть інший рядок, щоб зупинити.", + "stopSpeaking": "Зупинити читання", + "speakingLineX": "Читання рядка {0}... (Escape - зупинити)", + "playWithSpeechTitle": "Відтворити з мовленням", + "playWithSpeechDotDotDot": "Відтворити з мовленням...", + "playWithSpeechHint": "Відтворює відео та промовляє кожен рядок, коли відео доходить до нього. Пауза та перемотування як зазвичай; натисніть Escape, щоб зупинити.", + "lowerVideoVolumeWhileSpeaking": "Зменшувати гучність відео під час мовлення", + "pauseVideoWhenSpeechRunsLate": "Призупиняти відео, коли мовлення заходить на наступний рядок", + "waitingForSpeechLineX": "Створення мовлення для рядка {0}... (Escape - зупинити)", + "voiceKindClone": "Клонований голос", + "voiceKindPreset": "Вбудований", + "voiceKindModel": "Модель голосу", + "voiceKindOnline": "Онлайн", + "transcript": "Транскрипт", + "transcriptRequiredHint": "Обов'язково - під час клонування двигун читає цей транскрипт запису (ref-text)", + "transcriptOptionalHint": "Необов'язково - точний транскрипт запису покращує клонування", + "saveTranscript": "Зберегти транскрипт", + "searchVoices": "Пошук голосів", + "loadingVoicesDotDotDot": "Завантаження голосів...", + "noVoicesForEngine": "Немає голосів - імпортуйте запис або завантажте пакет голосів", + "noVoicesMatchFilter": "Немає голосів, що відповідають пошуку", + "copyVoiceTo": "Копіювати голос до", + "copyVoiceToDotDotDot": "Копіювати голос до двигуна...", + "copyingVoiceXToYDotDotDot": "Копіювання голосу '{0}' до {1}...", + "voiceXCopiedToY": "Голос '{0}' скопійовано до {1}", + "voiceXCouldNotBeCopiedToY": "Не вдалося скопіювати голос '{0}' до {1} - подробиці в журналі", + "voiceXAlreadyExistsInYContinue": "Голос із назвою '{0}' вже існує в {1}.\n\nВсе одно копіювати?", + "openVoicesFolder": "Відкрити теку голосів", + "downloadVoicePacksDotDotDot": "Завантажити пакети голосів...", + "downloadVoicePacksTitle": "TTS - Завантаження пакетів голосів", + "voicePackIntro": "Пакети голосів - це набори коротких чистих записів із транскриптами, готових до клонування. Кожен пакет імпортується у вибраний двигун (наявні голоси пропускаються) і містить ATTRIBUTION.txt із ліцензією та джерелами.", + "voicePackDetailsXVoicesYSizeZLicense": "Голосів: {0} · {1} · {2}", + "installToEngine": "Встановити до двигуна", + "downloadAndInstall": "Завантажити та встановити", + "selectAtLeastOneVoicePack": "Виберіть принаймні один пакет голосів", + "downloadingXDotDotDot": "Завантаження {0}...", + "installingXDotDotDot": "Встановлення {0}...", + "xVoicesInstalledYSkipped": "Встановлено голосів: {0} (вже наявних: {1})", "useSpeechToTextDotDotDot": "Використати розпізнавання мови...", "advancedTtsSettings": "Розширені налаштування TTS", "proAudioPostProcessing": "Професійна постобробка аудіо", "proAudioPostProcessingDescription": "Застосовує теплоту еквалайзера, шумовий гейт, компресію, нормалізацію гучності (-16 LUFS) і появу/зникнення до кожного сегмента.", + "generatingSpeechSegmentXOfY": "Створення мовлення: сегмент {0} з {1}", + "adjustingSpeedSegmentXOfY": "Коригування швидкості: сегмент {0} з {1}", + "mergingAudioSegmentXOfY": "Об'єднання аудіо: сегмент {0} з {1}", + "postProcessingSegmentXOfY": "Постобробка: сегмент {0} з {1}", "audioDucking": "Приглушення аудіо", "audioDuckingDescription": "Зменшує гучність оригінального аудіо відео і змішує його з аудіо TTS, тому оригінальна звукова доріжка все ще ледь чутна.", + "removeOriginalSpeech": "Видалити оригінальне мовлення (повільно)", + "removeOriginalSpeechDescription": "Зберігає музику та звукові ефекти оригінального відео, але видаляє з нього мовлення і накладає поверх нове мовлення. З GPU триває приблизно стільки ж, скільки саме відео, а без нього в багато разів довше. Якщо приглушення аудіо увімкнено, його гучність застосовується до музики та ефектів. Діє лише тоді, коли мовлення додається до відеофайлу.", + "removingOriginalSpeech": "Видалення оригінального мовлення...", + "removeOriginalSpeechFailed": "Не вдалося видалити оригінальне мовлення - мовлення додано до відео без цього.", + "speechRemovalModel": "Модель", + "speechRemovalModelDescription": "Найкраща якість зберігає найбільше музики та звукових ефектів. Швидкий варіант приблизно втричі швидший, але трохи більше музики втрачається.", + "speechRemovalBestQuality": "Найкраща якість (Mel-Band RoFormer)", + "speechRemovalFast": "Швидко (HTDemucs)", + "videoTruncatedWarning": "Зображення в новому відеофайлі зупиняється після {0}, але оригінальне відео триває {1} - зображення застигне, поки звук продовжуватиметься.\n\nФайл збережено. Вивід ffmpeg дивіться в error-log.txt у теці даних Subtitle Edit.", "originalVolumePercent": "Оригінальна гучність %", "vadSilenceCompression": "VAD-стиснення тиші", "vadSilenceCompressionDescription": "Скорочує паузи між словами перед зміною темпу. Використовує виявлення голосової активності (VAD) для стиснення лише проміжків тиші, залишаючи мовлення недоторканим. Це бажаний перший крок — він зменшує тривалість без жодної втрати якості.", @@ -2644,7 +2934,6 @@ "subtitleMergedLinesAppliedPlural": "Застосовано {0} об'єднань рядків з перетворення тексту в мовлення" }, "shotChanges": { - "titleGenerateOrImport": "Створити/імпортувати зміни кадрів", "generateShotChanges": "Створити зміни кадрів", "importShotChanges": "Імпортувати зміни кадрів", "generateShotChangesWithFfmpeg": "Створити зміни кадрів з ffmpeg", @@ -2654,7 +2943,9 @@ "timeCodeFormatColon": "Формат коду часу:", "shotChangesList": "Список змін кадрів", "shotChangesClearQuestion": "Ви впевнені, що хочете очистити всі зміни кадрів?", - "deleteSelectedShotChangeQuestion": "Ви впевнені, що хочете видалити обрану зміну кадру?" + "deleteSelectedShotChangeQuestion": "Ви впевнені, що хочете видалити обрану зміну кадру?", + "shotChanges": "Зміни кадрів", + "exportShotChanges": "Експортувати зміни кадрів" }, "chapters": { "title": "Розділи", @@ -2684,7 +2975,6 @@ "scaleTimesDescription": "Масштабувати час кожного розділу з однієї частоти кадрів на іншу.", "fromFrameRate": "З", "toFrameRate": "На", - "apply": "Застосувати", "writeToVideo": "Записати у відео...", "writeToVideoTitle": "Записати розділи у відео", "writeToVideoDescription": "Розділи записуються в копію відеофайлу. Нічого не перекодовується, тож це швидко і без втрат.", @@ -2694,7 +2984,6 @@ "writtenToX": "Розділи записано в {0}", "unableToWriteChapters": "Не вдалося записати розділи у відеофайл.", "chaptersSavedToX": "Розділи збережено в {0}", - "noVideoLoaded": "Відео не завантажено", "emptyListCallToAction": "Розділів ще немає - додайте розділ у позиції відео або імпортуйте їх з відео чи файлу." }, "videoOcr": { @@ -2705,10 +2994,6 @@ "bottomHalf": "Нижня половина", "fullFrame": "Весь кадр", "engine": "Двигун OCR", - "language": "Мова", - "url": "URL", - "model": "Модель", - "apiKey": "Ключ API", "scan": "Сканувати", "framesPerSecond": "Кадрів на секунду", "textBrightnessMinimum": "Мінімальна яскравість тексту (0=вимк.)", @@ -2723,10 +3008,10 @@ "runningOcrXY": "Виконання OCR... {0}/{1}", "noLinesFoundTitle": "Субтитрів не знайдено", "noLinesFoundMessage": "В області сканування не знайдено тексту - спробуйте налаштувати область сканування, двигун або мінімальну яскравість.", + "ocrStoppedEarlyMessage": "Двигун OCR зупинився до того, як було прочитано всі кадри, тому знайдені рядки збережено, а решти бракує.{0}{0}{1}", "linesFoundX": "Знайдено {0} рядків", "refiningTimingXY": "Уточнення таймінгу... {0}/{1}", "fixOcrErrors": "Виправляти помилки OCR", - "dictionary": "Словник", "editLineX": "Редагувати рядок {0}", "downloadDictionaryHint": "Завантажити словник для перевірки орфографії...", "framesPerSecondHint": "Скільки кадрів за секунду сканується. 5 покриває звичайні субтитри; більше значення вловлює дуже короткі рядки і покращує групування, але потребує більше часу на OCR.", @@ -2743,7 +3028,58 @@ "testOcr": "Тестувати поточний кадр", "testOcrRunning": "Тестування OCR на поточному кадрі...", "testOcrResultX": "Результат тесту: {0}", - "testOcrNoTextFound": "Тест: в області сканування текст не знайдено" + "testOcrNoTextFound": "Тест: в області сканування текст не знайдено", + "engineSettings": "Налаштування двигуна OCR", + "engineBuiltIn": "Вбудований в операційну систему", + "engineExternalServer": "Зовнішній сервер (встановлюється та керується поза Subtitle Edit)", + "engineCloudApi": "Хмарний API (потрібен ключ API)", + "engineNothingToInstall": "Нічого встановлювати", + "engineModelsMissing": "Двигун встановлено, моделей бракує", + "website": "Вебсайт" + }, + "backgroundMusic": { + "title": "Створити фонову музику", + "generateBackgroundMusicDotDotDot": "Створити фонову музику...", + "preset": "Пресет", + "prompt": "Запит", + "tempoBpm": "Темп (BPM)", + "generateSeconds": "Створити (секунди)", + "seed": "Seed", + "randomSeed": "Випадковий", + "outputLength": "Тривалість результату", + "outputLengthVideoX": "{0} (тривалість відео - музика безшовно зациклюється)", + "musicVolumePercent": "Гучність музики (%)", + "removeExistingAudioTracks": "Видалити наявні аудіодоріжки", + "originalAudioVolumePercent": "Гучність оригінального аудіо (%)", + "saveAudioDotDotDot": "Зберегти аудіо...", + "addToVideoDotDotDot": "Додати до відео...", + "engineInfo": "ACE-Step 1.5 Turbo через audio.cpp (ліцензія MIT) - працює локально", + "presetCooking": "Кулінарія / випічка", + "presetTech": "Огляд техніки / гаджетів", + "presetForest": "Ліс / природа", + "presetRelaxingPiano": "Розслаблююче фортепіано", + "presetLofiVlog": "Lo-fi влог", + "presetCorporate": "Корпоративне / пояснювальне відео", + "loadingModel": "Завантаження моделі...", + "composing": "Компонування...", + "generatingAudio": "Створення аудіо...", + "decodingAudio": "Декодування аудіо...", + "creatingLoop": "Створення безшовного циклу...", + "resultLoopXYZ": "Цикл: {0} при {1} BPM, збіг шва {2}%", + "resultNoLoopX": "Музика готова: {0}", + "addingMusicToVideo": "Додавання музики до відео...", + "downloadModelTitle": "Завантажити музичну модель?", + "downloadModelQuestionX": "Для створення музики потрібна модель ACE-Step 1.5 ({0}).\n\nЗавантажити модель?", + "downloadingModel": "Завантаження моделі ACE-Step 1.5...", + "saveAudioTitle": "Зберегти фонову музику", + "audioFileSavedX": "Аудіофайл збережено: {0}", + "unableToGenerateMusic": "Не вдалося створити музику", + "unableToAddMusicToVideo": "Не вдалося додати музику до відео", + "outputLengthTextToSpeech": "Відповідає створеному мовленню - музика безшовно зациклюється і стихає, коли хтось говорить", + "addBackgroundMusic": "Додати фонову музику", + "addBackgroundMusicHint": "Створити музику локально за допомогою ACE-Step 1.5 і змікшувати її під мовленням - вона стихає, коли хтось говорить", + "generatingBackgroundMusicDotDotDot": "Створення фонової музики...", + "mixingBackgroundMusicDotDotDot": "Мікшування фонової музики..." }, "goToVideoPosition": "Перейти до позиції відео", "goToVideoPositionDotDotDot": "Перейти до позиції відео...", @@ -2754,32 +3090,89 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "Додаткові субтитри на відеопрогравачі, відкрити...", "openSecondarySubtitleOnVideoPlayer": "Додаткові субтитри (на відеопрогравачі)", "removeSecondarySubtitleOnVideoPlayer": "Додаткові субтитри на відеопрогравачі, видалити", + "editSecondarySubtitleSettings": "Редагувати налаштування додаткових субтитрів", + "editSecondarySubtitleSettingsDotDotDot": "Редагувати налаштування додаткових субтитрів...", + "secondarySubtitleRememberSettings": "Запам'ятати ці налаштування", + "secondarySubtitleDoNotShowAgain": "Більше не показувати це вікно", + "secondarySubtitleJustifyLines": "Вирівнювати рядки по ширині", "openRecentVideo": "Відкрити недавнє відео", "clearRecentVideos": "Очистити недавні відео", "cutVideoTitle": "Вирізати відео", "cutVideoDotDotDot": "Вирізати відео...", + "remuxVideoTitle": "Перепакувати відео", + "remuxVideoDotDotDot": "Перепакувати відео...", + "remuxVideoInputVideo": "Вхідне відео:", + "remuxVideoMultipleTracksRequiresMkv": "Кілька аудіодоріжок або доріжок субтитрів потребують контейнера MKV. Вихідний формат автоматично змінено на .mkv.", + "remuxVideoOutputFormat": "Вихідний формат:", + "remuxVideoOutputFile": "Вихідний файл:", + "remuxVideoRemuxing": "Перепакування відео та аудіо...", + "remuxVideoFinalizing": "Завершення вихідного файлу (переміщення індексу на початок)...", + "remuxVideoCompleted": "Відео успішно перепаковано.", + "remuxVideoFailed": "Не вдалося перепакувати відео.", + "remuxVideoPleaseSelectBoth": "Виберіть і відеофайл, і аудіофайли.", + "remuxVideoAssRequiresMkv": "Субтитри ASS/SSA потребують контейнера MKV, щоб зберегти все форматування та стилі.", + "remuxVideoSccRequiresMov": "Субтитри Scenarist (.scc) вбудовуються як приховані субтитри CEA-608, які потребують контейнера MOV або MPG. Вихідний формат автоматично змінено на .mov.", + "remuxVideoSccNotWithWebM": "Приховані субтитри Scenarist (.scc) потребують контейнера MOV, який не може містити відео VP9/AV1 з файлу .webm. Видаліть файл .scc або перетворіть його в інший формат субтитрів.", + "remuxVideoMpgMaxTwoCaptionTracks": "Файл .mpg містить щонайбільше дві доріжки прихованих субтитрів (CC1 і CC3) - видаліть файли субтитрів, щоб залишилося один або два.", + "remuxVideoMccRequiresMpg": "Субтитри MacCaption (.mcc) вбудовуються як приховані субтитри CEA-608/708 у відео MPEG-2, що потребує контейнера MPG. Вихідний формат автоматично змінено на .mpg.", + "remuxVideoMpgReencodeVideoX": "Приховані субтитри у файлі .mpg потребують відео MPEG-2, а відео - {0}. Перекодувати відео в MPEG-2? Це триває довше і трохи знижує якість.", + "remuxVideoFileHasNoAudioX": "\"{0}\" не має аудіодоріжки, тому його не можна використати як джерело аудіо.", + "remuxVideoAddingClosedCaptions": "Додавання прихованих субтитрів...", + "remuxVideoSelectAudioTrack": "Вибрати аудіодоріжку", + "remuxVideoSelectAudioTrackFor": "Вибрати аудіодоріжку для {0}", + "remuxVideoSelectAudioTrackPrompt": "Файл '{0}' містить аудіодоріжок: {1}. Виберіть аудіодоріжку для перепакування:", + "remuxVideoVideoFile": "відео", + "remuxVideoAudioFile": "аудіо", + "remuxVideoAudioFiles": "Аудіофайли:", + "remuxVideoSubtitleFiles": "Файли субтитрів (необов'язково, м'які субтитри):", + "remuxVideoSelectAudioTrackDotDotDot": "Вибрати аудіодоріжку...", + "remuxVideoFilesX": "Файлів: {0}", + "remuxVideoMixAudio": "Змікшувати аудіо в одну доріжку", + "remuxVideoVolumePercent": "Гучність %:", + "remuxVideoVolumeX": "Гучність {0}%", + "remuxVideoFastStart": "Оптимізувати для веб-потокового передавання (індекс на початок - повільніше)", "embedSubtitlesDotDotDot": "Додати/видалити вбудовані субтитри...", "generateTimeCodes": "Створити коди часу", "checkeredImage": "Шахова картинка", - "saveVideoAsTitle": "Зберегти відео як", "promptForFfmpegParamsAndGenerate": "Запитати параметри ffmpeg і створити", "cutVideoCutSegments": "Вирізати сегменти", "cutVideoMergeSegments": "Об'єднати сегменти", "cutVideoSplitSegments": "Зберегти сегменти окремо", - "cutVideoType": "Тип вирізання", - "mpvRenderAuto": "Авто", - "mpvRenderNative": "Нативний", - "mpvRenderOpenGl": "OpenGL", - "mpvRenderSoftware": "Програмне (повільно)", "cutVideoAlsoCutSubtitle": "Також обрізати субтитри", "cutVideoSubtitleFileGeneratedX": "Створено файл субтитрів: {0}", + "cutVideoTransition": "Перехід між сегментами", + "cutVideoTransitionDurationSeconds": "Тривалість (секунди)", + "cutVideoFadeInSeconds": "Поява з чорного на початку (секунди)", + "cutVideoFadeOutSeconds": "Затухання в чорне в кінці (секунди)", + "cutVideoPreviewTransition": "Попередній перегляд переходу", + "cutVideoPreviewTransitionTitle": "Попередній перегляд переходу", + "cutVideoPreviewNeedsJoin": "Немає з'єднання для попереднього перегляду - додайте принаймні два сегменти для об'єднання або сегмент, який треба вирізати з середини.", + "cutVideoTransitionInfoX": "Кожен перехід перекриває частини, які він з'єднує, тому результат стає коротшим на {0} секунд за кожне з'єднання. Час вирізаних субтитрів коригується відповідно.", + "cutVideoTransitionFade": "Затухання", + "cutVideoTransitionFadeBlack": "Затухання через чорне", + "cutVideoTransitionFadeWhite": "Затухання через біле", + "cutVideoTransitionFadeGrays": "Затухання через сіре", + "cutVideoTransitionDissolve": "Розчинення", + "cutVideoTransitionWipeLeft": "Витирання вліво", + "cutVideoTransitionWipeRight": "Витирання вправо", + "cutVideoTransitionWipeUp": "Витирання вгору", + "cutVideoTransitionWipeDown": "Витирання вниз", + "cutVideoTransitionSlideLeft": "Зсув вліво", + "cutVideoTransitionSlideRight": "Зсув вправо", + "cutVideoTransitionSlideUp": "Зсув вгору", + "cutVideoTransitionSlideDown": "Зсув вниз", + "cutVideoTransitionSmoothLeft": "Плавно вліво", + "cutVideoTransitionSmoothRight": "Плавно вправо", + "cutVideoTransitionCircleOpen": "Коло відкриття", + "cutVideoTransitionCircleClose": "Коло закриття", + "cutVideoTransitionRadial": "Радіальний", + "cutVideoTransitionPixelize": "Пікселізація", + "cutVideoTransitionBlur": "Розмиття", "importCurrentSubtitle": "Імпортувати поточні субтитри", "addRemoveEmbeddedSubtitlesTitle": "Додати/видалити вбудовані субтитри", "addCurrentSubtitle": "Додати поточні субтитри", - "titleOrLanguage": "Назва/мова", "viewMatroskaTrackX": "Переглянути доріжку Matroska - {0}", "addRemoveEmbeddedSubtitlesMp4Title": "Додати/видалити вбудовані субтитри (MP4)", - "embeddedTrackColumnNew": "Новий", "embeddedTrackNoSubtitlesFoundTitle": "Субтитри не знайдено", "embeddedTrackNoSubtitlesFoundMessage": "Вибраний файл субтитрів не містить жодних субтитрів.", "embeddedTrackNoTracksTitle": "Доріжки не додано", @@ -2791,6 +3184,7 @@ "embeddedTrackGeneratingVideoXY": "Створення відео... {0}% {1}", "embeddedTrackGeneratingVideo": "Створення відео...", "mp4FilesFilter": "Файли MP4", + "embeddedTracksPickVideoHint": "Виберіть відеофайл або перетягніть його сюди, щоб побачити його доріжки субтитрів.", "resolutionSeparator": "x", "openFromUrlTitle": "Відкрити відеофайл з URL", "openFromUrlOpenOnline": "Відкрити онлайн", @@ -2799,9 +3193,7 @@ "openFromUrlDownloadAndOpen": "Завантажити і відкрити", "openFromUrlDownloadAndOpenDescription": "Зберегти відео локально, потім відкрити його.", "openFromUrlDownloadAndOpenNote": "Потрібно для розпізнавання мови і піків хвильової форми.", - "openFromUrlMissing": "Будь ласка, спочатку введіть URL відео.", "openFromUrlDownloadingTitle": "Завантаження відео", - "openFromUrlSaveAs": "Зберегти відео як", "openFromUrlDownloadSubtitles": "Також завантажити субтитри", "openFromUrlDownloadVideo": "Завантажити відео", "openFromUrlIncludeAutoGeneratedSubtitles": "Включати автоматично створені субтитри (мовою оригіналу)", @@ -2838,12 +3230,15 @@ "reEncodeGeneratingDone": "Створення завершено", "reEncodeGeneratedFilesX": "Створені файли ({0}):", "reEncodeFfmpegParameters": "Параметри ffmpeg", + "analyzingVideoX": "Аналіз відео... {0}% {1}", + "analyzingVideoXofY": "Аналіз відео {0}/{1}... {2}% {3}", + "backgroundImageFileNotSelected": "Файл фонового зображення не вибрано", + "backgroundImageFileDoesNotExistX": "Файл фонового зображення не існує: {0}", "voices": "Голоси", "presets": "Пресети", "talkerX": "Мовець {0}", "baseModel": "Базова модель", "turboModel": "Модель Turbo", - "ttsUpdateX": "Оновити {0}", "ttsEngineNotInstalled": "{0} не встановлено", "ttsEngineUpdateAvailable": "{0} - доступне оновлення", "ttsEngineTooOldUpdateRequired": "{0} застарілий - потрібне оновлення", @@ -2864,19 +3259,25 @@ "cloneVoiceTo": "Клонувати голос у", "cloneVoiceNameTitle": "Назва нового голосу", "cloneVoiceExtractFailed": "Не вдалося видобути аудіо для вибраного рядка.", + "lineXHasNoDuration": "Рядок {0} не має тривалості (час кінця не пізніше за час початку), тому немає аудіо для вилучення.", + "audioClipsSkippedLinesX": "Для цих рядків не вдалося вилучити аудіо, тому їх пропущено: {0}", "toggleShotChange": "Перемкнути зміну кадру", "resetWaveformZoomAndSpeed": "Скинути масштабування та швидкість хвильової форми", "showOriginalSubtitle": "Показати оригінальні субтитри", + "timelineGroupTracksBy": "Групувати доріжки субтитрів за", + "timelineShowThumbnails": "Показувати мініатюри відео", + "showSpeechOnly": "Показати лише мовлення (повільне створення)", + "isolatingSpeechForWaveformX": "Ізоляція мовлення для хвильової форми... {0}", + "isolatingSpeechForWaveformFailed": "Не вдалося ізолювати мовлення для хвильової форми - дивіться журнал інструментів", + "speechOnlyWaveformReady": "Хвильова форма тепер показує лише мовлення", "showOnlyWaveform": "Показати тільки хвильову форму", "showOnlySpectrogram": "Показати тільки спектрограму", "showWaveformAndSpectrogram": "Показати хвильову форму і спектрограму", - "spectrogramClassic": "Класична", "spectrogramClassicViridis": "Viridis", "spectrogramClassicPlasma": "Plasma", "spectrogramClassicInferno": "Inferno", "spectrogramClassicTurbo": "Turbo", "spectrogramNeon": "Неон", - "waveformDrawStyleClassic": "Класична", "waveformDrawStyleFancy": "Красива", "setVideoPositionAndPauseAndSelectSubtitle": "Встановити позицію відео, паузу і вибрати субтитри", "setVideopositionAndPauseAndSelectSubtitleAndCenter": "Встановити позицію відео, паузу, вибрати субтитри і центрувати", @@ -2888,7 +3289,6 @@ }, "sync": { "visualSync": "Візуальна синхронізація", - "sync": "Синхронізація", "startScene": "Початкова сцена", "endScene": "Кінцева сцена", "playTwoSecondsAndBack": "Відтворити 2 сек і назад", @@ -2904,24 +3304,23 @@ "adjustSelectedLinesAndForward": "Налаштувати виділені рядки і вперед", "toFrameRate": "До частоти кадрів", "fromFrameRate": "З частоти кадрів", + "videoXFrameRateY": "{0} - {1} fps", "adjustAllTimes": "Налаштувати всі часи (показати раніше/пізніше)", "showEarlier": "Показати раніше", "showLater": "Показати пізніше", - "changeFrameRate": "Змінити частоту кадрів", "setSyncPoint": "Встановити точку синхронізації", "setSyncPointViaVideo": "Встановити точку синхронізації через відео...", "syncPointTimeCode": "Код часу точки синхронізації", "syncPoints": "Точки синхронізації", "pointSync": "Синхронізація точок", "pointSyncViaOther": "Синхронізація точок через інші субтитри", - "adjustmentX": "Коригування: {0}", - "syncPointCandidateInfo": "Рядки, що починаються після {0}+ секунд тиші, підсвічено - вони часто дають надійні точки синхронізації", + "syncPointCandidateAfterInfo": "Рядки, після яких іде {0}+ секунд тиші, підсвічено - вони часто є надійними точками синхронізації", + "gapAfter": "Прогалина після", "adjustAllShortcuts": "Клавіатурні скорочення:\r\n\r\n• Shift + Ліворуч/Праворуч: Перемістити на 10 мс\r\n• Ctrl + Ліворуч/Праворуч: Перемістити на 100 мс\r\n• Alt + Ліворуч/Праворуч: Перемістити на 500 мс", "adjustAllShortcutsFrames": "Ярлики клавіатури:\r\n\r\n• Shift + Вліво/Вправо: Пересунути на 1 кадр\r\n• Ctrl + Вліво/Вправо: Пересунути на 10 кадрів\r\n• Alt + Вліво/Вправо: Пересунути на 1 секунду", "offsetInSeconds": "Зсув в секундах", "speedFactor": "Коефіцієнт швидкості", - "showEarlierLaterDotDotDot": "Показати раніше/пізніше...", - "totalAdjustmentX": "Загальне коригування: {0}" + "showEarlierLaterDotDotDot": "Показати раніше/пізніше..." }, "translate": { "translateViaCopyPaste": "Автоматичний переклад через копіювання/вставку", @@ -2936,6 +3335,7 @@ "lineMerge": "Об'єднання рядків", "delayInSecondsBetweenRequests": "Затримка в секундах між запитами", "maxBytesPerRequest": "Макс. байтів на запит", + "keepMusicLinesUntranslated": "Не перекладати рядки в музичних символах (♪ ... ♪)", "promptText": "Текст підказки", "resetPromptToDefault": "Скинути підказку до типової", "translateEachLineSeparately": "Перекладати кожен рядок окремо", @@ -2949,11 +3349,10 @@ "readyToTranslate": "Готово до перекладу", "translating": "Переклад...", "translationComplete": "Переклад завершено", + "translateInPlaceNoOriginal": "Перекладати на місці (не створювати оригінал)", "translationCancelled": "Переклад скасовано", "swapLanguages": "Поміняти місцями вихідну і цільову мови", "xIsAlreadyDownloadedReDownload": "{0} вже завантажено. Перезавантажити?", - "advancedDotDotDot": "Додатково...", - "advancedSettings": "Додаткові налаштування", "advancedSettingsSubtitle": "Параметри пакетів, контексту і семплювання для розширеного двигуна llama.cpp", "context": "Контекст", "synopsis": "Синопсис", @@ -2977,6 +3376,7 @@ "useOnlyExtraServerParametersHint": "Запускати llama-server із наведеними вище параметрами замість власного налаштування Subtitle Edit - встановлюються лише модель, хост і порт", "serverRunningAtX": "Сервер працює за адресою {0}", "customPromptHint": "Власні інструкції ({0} = мова оригіналу, {1} = цільова мова); порожнє = вбудована підказка", + "editTranslationHint": "Клацніть переклад виділеного рядка, щоб відредагувати його (Enter зберігає, Escape скасовує)", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp потребує завантаження двигуна llama-server і моделі перекладу. Завантажити зараз?", "llamaCppDownloadEnginePrompt": "llama.cpp потребує завантаження двигуна llama-server. Завантажити зараз?", "llamaCppDownloadModelPrompt": "llama.cpp потребує завантаження вибраної моделі перекладу. Завантажити зараз?" @@ -3014,8 +3414,14 @@ "checkForUpdatesChannelStableAndBeta": "Стабільні й бета-версії", "assaAutoSetResolution": "ASSA: встановлювати роздільну здатність (PlayResX/PlayResY) з відео під час його відкриття", "assaAutoSetResolutionPrompt": "ASSA: питати перед зміною роздільної здатності відповідно до відео (інакше перераховувати автоматично)", + "videoControls": "Елементи керування відео", + "videoControlsEdit": "Редагувати елементи керування відео...", + "videoControlsPositionText": "Текст позиції / тривалості", + "videoControlsVideoFileName": "Ім'я відеофайлу", + "videoControlsPlayerName": "Назва відеопрогравача", "mergeKeepEndTime": "Об'єднання рядків: зберігати час кінця (дозволити перекриття з наступними субтитрами)", "mergeKeepEndTimeOnlyAssa": "Об'єднання рядків: зберігати час кінця лише для \"Advanced Sub Station Alpha\"", + "mergeAutoBreak": "Об'єднання рядків: автоматично розбивати об'єднаний текст (якщо вимкнено, зберігаються власні розриви рядків)", "defaultSaveLocation": "Типове розташування збереження", "defaultSaveLocationSourceFileFolder": "Папка файлу субтитрів/відео", "defaultSaveLocationLastUsedFolder": "Остання використана папка", @@ -3023,6 +3429,7 @@ "defaultSaveLocationSubtitleFileFolder": "Папка файлу субтитрів", "defaultSaveLocationCustomFolder": "Власна папка", "subtitleGridFormattingHideTags": "Приховати теги", + "subtitleGridFormattingShowFormattingKeepTags": "Показувати форматування, зберігати невізуальні теги", "musicSymbolsToReplace": "Музичні символи для заміни (розділені комою)", "musicSymbol": "Музичний символ", "colorWordsPerMinute": "Підсвічувати слів/хв, якщо завелико", @@ -3033,7 +3440,6 @@ "dialogStyleDashBothLinesWithSpace": "Тире обох рядків з пробілом", "dialogStyleDashBothLinesWithoutSpace": "Тире обох рядків без пробілу", "continuationStyle": "Стиль продовження", - "continuationStyleNone": "Немає", "continuationStyleNoneTrailingDots": "Немає, крапки для пауз (тільки в кінці)", "continuationStyleNoneLeadingTrailingDots": "Немає, крапки для пауз", "continuationStyleNoneTrailingEllipsis": "Немає, еліпс для пауз (тільки в кінці)", @@ -3044,7 +3450,6 @@ "continuationStyleLeadingTrailingEllipsis": "Еліпс", "continuationStyleLeadingTrailingDash": "Тире", "continuationStyleLeadingTrailingDashDots": "Тире, але крапки для пауз", - "continuationStyleCustom": "Користувацький", "cpsLineLengthStyle": "Cps/довжина рядка", "cpsLineLengthStyleCalcAll": "Порахувати всі символи", "cpsLineLengthStyleCalcNoSpaceCpsOnly": "Порахувати всі, крім пробілу, тільки cps", @@ -3057,26 +3462,10 @@ "cpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly": "Без пробілу або пунктуації, тільки cps", "cpsLineLengthStyleCalcIgnoreArabicDiacritics": "Ігнорувати арабські діакритики", "cpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "Ігнорувати арабські діакритики, без пробілу", - "timeCodeModeHhMmSsMs": "ГГ:ХХ:СС:МС", - "timeCodeModeHhMmSsFf": "ГГ:ХХ:СС:ФФ", - "splitBehaviorPrevious": "Додати прогалину ліворуч від точки розділення (фокус праворуч)", - "splitBehaviorHalf": "Додати прогалину в центрі точки розділення (фокус ліворуч)", - "splitBehaviorNext": "Додати прогалину праворуч від точки розділення (фокус ліворуч)", - "subtitleListActionNothing": "Нічого", - "subtitleListActionVideoGoToPositionAndPause": "Перейти до позиції відео і пауза", - "subtitleListActionVideoGoToPositionAndPlay": "Перейти до позиції відео і відтворити", "subtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "Перейти до позиції відео, відтворити поточний і пауза", - "subtitleListActionEditText": "Перейти до поля редагування тексту", "subtitleListActionVideoGoToPositionMinus1SecAndPause": "Перейти до позиції відео - 1 с і пауза", "subtitleListActionVideoGoToPositionMinusHalfSecAndPause": "Перейти до позиції відео - 0.5 с і пауза", "subtitleListActionVideoGoToPositionMinus1SecAndPlay": "Перейти до позиції відео - 1 с і відтворити", - "subtitleListActionEditTextAndPause": "Перейти до поля редагування тексту і пауза на позиції відео", - "autoBackupEveryMinute": "Кожну хвилину", - "autoBackupEveryXthMinute": "Кожні {0} хвилин", - "profiles": "Профілі", - "autoBackupDeleteAfterXMonths": "Видалити автозбереження після {0} місяців", - "syntaxColoring": "Кольорове підсвічування синтаксису", - "waveformSpectrogram": "Хвильова форма/спектрограма", "network": "Мережа", "fileTypeAssociations": "Асоціації типів файлів", "textBoxColorTags": "Кольорові теги (HTML/ASSA) в полі тексту субтитрів", @@ -3109,10 +3498,9 @@ "darkThemeForegroundColor": "Колір переднього плану темної теми", "darkThemeBackgroundColor": "Колір фону темної теми", "showGridLines": "Показати лінії таблиці", - "resetSettings": "Скинути налаштування?", - "resetSettingsDetail": "Це скине всі налаштування до типових значень.\n\nПродовжити?", "showHorizontalLineAboveToolbar": "Показати горизонтальну лінію над панеллю інструментів", "bookmarkColor": "Колір закладки", + "spellCheckHighlightColor": "Колір підсвічування перевірки орфографії", "singleLineMaxLength": "Максимальна довжина одного рядка", "optimalCharsPerSec": "Оптимальні символи/с", "maxCharsPerSec": "Максимальні символи/с", @@ -3124,10 +3512,18 @@ "unbreakSubtitlesShortThan": "Розбити субтитри коротші за", "newEmptyDefaultMs": "Типова тривалість нового субтитра (мс)", "timeCodeUpDownStepMs": "Крок часу вгору/вниз (мс)", + "moveSelectedLinesStepMs": "Крок ярлика переміщення виділених рядків (ms)", + "moveStartEndStepMs": "Крок ярлика переміщення початку/кінця (ms)", + "moveLinesShortenNeighbor": "Переміщення рядків: скорочувати попередній/наступний рядок замість перекриття", "rememberPositionAndSize": "Запам'ятати позицію і розмір вікна", + "titleBarFullFileName": "Показувати повний шлях до файлу в заголовку вікна", + "showRecentFiles": "Показувати останні файли (для повторного відкриття)", "autoBackupOn": "Автозбереження", "autoBackupIntervalMinutes": "Інтервал автозбереження (хвилини)", "autoBackupDeleteAfterDays": "Тривалість зберігання автозбережень (дні)", + "settingsBackupOn": "Автоматичне резервне копіювання налаштувань", + "settingsBackupIntervalDays": "Інтервал резервного копіювання налаштувань (дні, 0 = кожен запуск)", + "settingsBackupMaxCount": "Кількість резервних копій налаштувань для зберігання", "autoConvertToUtf8": "Автоматично конвертувати в UTF-8 при відкритті", "autoTrimWhiteSpace": "Автоматично обрізати пробіли", "defaultEncoding": "Типове кодування", @@ -3141,23 +3537,14 @@ "colorGapTooShort": "Колір, якщо прогалина занадто коротка", "errorBackgroundColor": "Колір фону помилки", "waveformDrawGridLines": "Малювати лінії сітки", - "waveformCenterVideoPosition": "Центрувати позицію відео", + "waveformUseSkiaRenderer": "Використовувати експериментальний швидкий рендерер", "waveformCenterVideoPositionAlsoWhenPaused": "Центрувати позицію відео також під час паузи", + "waveformSelectCurrentSubtitleWhilePaused": "Виділяти поточні субтитри також під час паузи", + "waveformRememberZoom": "Запам'ятовувати масштаб (горизонтальний і вертикальний)", "waveformShowToolbar": "Показати панель інструментів", "waveformShowToolbarEdit": "Редагувати панель інструментів...", "waveformShowToolbarEditLabel": "Елементи панелі інструментів", "waveformSpectrogramCombinedWaveformHeight": "Хвильова форма/спектрограма об'єднані, висота хвильової форми %", - "showWaveformToolbarPlay": "Панель: показати кнопку відтворення", - "showWaveformToolbarRepeat": "Панель: показати кнопку повтору", - "showWaveformToolbarRemoveBlankLines": "Панель: показати кнопку видалення порожніх рядків", - "showWaveformToolbarNew": "Панель: показати кнопку нового субтитра", - "showWaveformToolbarSetStart": "Панель: показати кнопку встановлення початку", - "showWaveformToolbarSetEnd": "Панель: показати кнопку встановлення кінця", - "showWaveformToolbarStartAndOffsetTheRest": "Панель: показати кнопку встановлення початку і зсуву решти", - "showWaveformToolbarHorizontalZoom": "Панель: показати повзунок горизонтального масштабування", - "showWaveformToolbarVerticalZoom": "Панель: показати повзунок вертикального масштабування", - "showWaveformToolbarVideoPositionSlider": "Панель: показати повзунок позиції відео", - "showWaveformToolbarPlaybackSpeed": "Панель: показати швидкість відтворення", "waveformFocusTextboxAfterInsertNew": "Фокусувати поле тексту після вставки", "waveformInvertMouseWheel": "Інвертувати коліщатко миші", "waveformMouseWheelSetsVideoPosition": "Коліщатко миші встановлює позицію відео", @@ -3175,15 +3562,12 @@ "waveformSelectedColor": "Колір виділеної хвильової форми", "downloadFfmpeg": "Завантажити ffmpeg", "proxyAddress": "Адреса проксі", - "username": "Ім'я користувача", "password": "Пароль", "defaultFormat": "Типовий формат", "defaultSaveAsFormat": "Типовий формат \"Зберегти як\"", "favoriteSubtitleFormats": "Улюблені формати субтитрів", "favoriteLanguages": "Улюблені мови", "webVttUseXTimestampMap": "WebVTT: використовувати X-TIMESTAMP-MAP (зсув кодів часу при завантаженні)", - "showStopButton": "Показати кнопку зупинки", - "showFullscreenButton": "Показати кнопку повноекранного режиму", "autoOpenVideoFile": "Автоматично відкривати відеофайл при відкритті субтитрів", "downloadMpv": "Завантажити mpv", "downloadVlc": "Завантажити VLC", @@ -3222,23 +3606,26 @@ "resetSyntaxColoring": "Скинути кольорове підсвічування синтаксису", "resetWaveform": "Скинути хвильову форму", "resetRules": "Скинути правила", - "useFrameMode": "Використовувати режим кадрів (hh.mm.ss.ff)", + "timeCodeMode": "Режим коду часу", + "timeCodeModeTime": "Час (hh:mm:ss,zzz)", + "timeCodeModeFrames": "Кадри (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "Номери кадрів", + "frameModeSnapToVideoFrames": "Зберігати час на кадрах відео (не кадрах у межах кожної секунди)", "textBoxLimitNewLines": "Обмежити кількість рядків в полі тексту субтитрів", - "mpvVideoOutput": "Вивід відео (mpv)", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - Програмне відображення (повільно)", + "mpvMetalRendering": "libmpv - Metal (експериментально, потрібен перезапуск)", "mpvWidRendering": "libmpv - Відображення ID вікна", "waveFormsAndSpectrogramFoldersContainsX": "Теки \"Хвильові форми\" і \"Спектрограми\" містять {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "Видалити файли \"Хвильових форм\" і \"Спектрограм\"?", "waveformGenerateSpectrogram": "Створити спектрограму", "waveformAutoGenerate": "Автоматично створювати хвильову форму при відкритті відео", "waveformSpectrogramMode": "Режим спектрограми", - "waveformCenterOnSingleClick": "Центрувати при одинарному кліку", - "waveformSingleClickSelectsSubtitle": "Вибирати субтитри при одинарному кліку", "waveformRightClickSelectsSubtitle": "Вибирати субтитри при кліку правою кнопкою", - "waveformPauseOnSingleClick": "Пауза при одинарному кліку", "waveformDrawStyle": "Стиль малювання хвильової форми", "vlcWidRendering": "libVLC - Відображення ID вікна", + "ffmpegSoftwareRendering": "FFmpeg", + "downloadFfmpegLibs": "Завантажити бібліотеки FFmpeg (для відеопрогравача FFmpeg)", "subtitleGridEnterKeyAction": "Дія клавіші Enter в таблиці субтитрів", "subtitleSingleClickAction": "Дія одинарного кліку в таблиці субтитрів", "subtitleDoubleClickAction": "Дія подвійного кліку в таблиці субтитрів", @@ -3262,22 +3649,23 @@ "saveAsBehaviorUseVideoFileName": "Використовувати ім'я файлу відео", "saveAsBehaviorUseSubtitleFileName": "Використовувати ім'я файлу субтитрів", "saveAsAppendLanguageCodeTwoLetter": "Двобуквений", - "saveAsAppendLanguageCodeThreeLetter": "Трибуквений", "saveAsAppendLanguageCodeLanguageName": "Назва мови", "splitOddLineActionWeightTop": "Вага зверху", "splitOddLineActionWeightBottom": "Вага знизу", "splitOddLinesAction": "Дія розділення непарних рядків", "ocrUseWordSplitList": "OCR: використовувати список розділення слів", "ocrGuessUnknownWords": "OCR: намагатися вгадати невідомі слова", + "spellCheckRememberUseAlwaysList": "Перевірка орфографії: запам'ятовувати список \"Використовувати завжди\"", + "fixShortDisplayTimesAllowMoveStartTime": "Виправлення загальних помилок: виправлення короткого часу показу може зсувати час початку", "multipleReplaceShowDotDotDotButtons": "Множинна заміна: показати кнопки контекстного меню", "gridFocusTextboxAfterInsertNew": "Таблиця: фокусувати поле тексту після вставки нового субтитра", + "undoRedoGoToChangedLine": "Скасування/повтор: переходити до зміненого рядка (і позиції відео)", "textToSpeechPromptSkipNoiseLines": "Синтез мовлення: пропонувати пропускати рядки зі звуками/музикою", "textToSpeechPromptDetectSpeakers": "Синтез мовлення: пропонувати виявляти імена мовців у тексті", "useFocusedButtonBackgroundColor": "Використовувати колір фону активної кнопки", "focusedButtonBackgroundColor": "Колір фону активної кнопки", "forceCrLfOnSave": "Примусово CR+LF при збереженні (текстові файли субтитрів)", - "showWaveformToolbarPlayNext": "Панель: показати кнопку відтворення наступного", - "showWaveformToolbarPlaySelection": "Панель: показати кнопку відтворення вибору", + "linuxClipboardUseExternalTool": "Копіювати текст через xclip/wl-copy (зберігає символи з діакритикою)", "showFormatLimitWarning": "Попереджати під час збереження, коли рядки перевищують обмеження формату (напр. SCC 32 символи/рядок)", "textBoxButtonShowAutoBreak": "Поле тексту: показати кнопку автоматичного розбиття", "textBoxButtonShowUnbreak": "Поле тексту: показати кнопку розбиття", @@ -3289,6 +3677,8 @@ "waveformDoubleClickAction": "Дія подвійного кліку хвильової форми (після дії одинарного кліку)", "allSettings": "Всі налаштування", "uiScale": "Масштаб інтерфейсу (%)", + "fontScale": "Масштаб шрифту (%)", + "textSelectionOpacity": "Непрозорість виділення тексту (%)", "waveformToolbarItems": "Елементи панелі інструментів хвильової форми", "matchIconColorToDarkTheme": "Збіг кольору іконки з кольором переднього плану темної теми", "searchSettingsDotDotDot": "Пошук налаштувань...", @@ -3300,23 +3690,31 @@ "fixCommonErrorsSkipStep1": "Виправити загальні помилки: пропустити крок 1 (вибір виправлень)", "showPluginsMenu": "Показати меню плагінів", "fullscreenHideControls": "Приховати елементи керування відео в повноекранному режимі", + "showSecondarySubtitleDialog": "Показувати вікно стилю під час відкриття додаткового файлу субтитрів", + "rememberSecondarySubtitleFile": "Запам'ятовувати додатковий файл субтитрів", "allowSingleLetterShortcutsInTextbox": "Дозволити однолітерні ярлики в текстовому полі", + "allowTextNavigationShortcutsInTextbox": "Дозволити ярлики на клавішах навігації по тексту (Ctrl+Left/Right, Home/End) у полі тексту", "spellCheckEnglishTreatInApostropheAsIng": "Перевірка орфографії: трактувати слова, що закінчуються на 'in'', як 'ing' (лише англійська)", "writeToolsLog": "Записувати журнал інструментів", "waveformShotChangeColor": "Колір зміни кадру хвильової форми", + "waveformGridColor": "Колір сітки хвильової форми", "waveformExtractAudioFormat": "Формат видобутого аудіо", "waveformExtractAudioSampleRate": "Частота дискретизації видобутого аудіо", "waveformExtractAudioSampleRateOriginal": "Оригінальна (зберегти джерело)", "waveformExtractAudioBitRate": "Бітрейт видобутого аудіо (MP3/M4A)", + "ffmpegUseCenterChannelOnly": "Використовувати лише передній центральний канал для аудіо 5.1 (FFmpeg)", "subtitleGridCenterSelectedRow": "Таблиця субтитрів, центрувати при виборі попереднього/наступного рядка", "waveformSetVideoPositionOnMoveStartEnd": "Встановлювати позицію відео при переміщенні початку/кінця", - "saveAsAppendLanguageCodeThreeLetterBibliographic": "Трибуквений (ISO 639-2/B)", "speechToTextSelectedLinesPromptFirstTimeOnly": "Розпізнавання мови: виділені рядки, запитувати мову/двигун лише перший раз", "textToSpeechPromptMergeContinuationLines": "Синтез мовлення: запитувати про об'єднання рядків продовження", "subtitlePreviewProperties": "Властивості попереднього перегляду субтитрів", "usePositionFromSubtitleFile": "Використовувати позицію з файлу субтитрів (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "Поле є частиною області субтитрів", "textJustify": "Вирівнювати рядки по ширині", + "deinterlace": "Деінтерлейсинг відео", + "deinterlaceOff": "Вимк.", + "deinterlaceAuto": "Авто (лише черезрядкові кадри)", + "deinterlaceAlways": "Завжди", "pixelWidthInfo": "Зелені лінії = обмеження макс. ширини | Червона область = текст перевищує обмеження", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3325,116 +3723,88 @@ "waveformColorTheme": "Колірна тема:", "waveformSaveAsCustomTheme": "Зберегти як користувацьку тему...", "waveformLoadThemeDotDotDot": "Завантажити тему...", - "waveformExportThemeDotDotDot": "Експортувати тему..." + "waveformExportThemeDotDotDot": "Експортувати тему...", + "waveformSaveCustomThemeTitle": "Зберегти власну тему", + "waveformThemeFileType": "Тема хвильової форми Subtitle Edit", + "waveformThemeHighContrast": "Висока контрастність", + "waveformThemeOceanBlue": "Океанська синь", + "waveformThemeWarmSunset": "Теплий захід сонця", + "waveformThemeForest": "Ліс", + "waveformThemeMidnightPurple": "Опівнічний фіолетовий", + "waveformThemeRetroAmber": "Ретро-бурштин", + "waveformThemeIce": "Лід" }, "shortcuts": { "generalUnbreakNoSpaceCjk": "Об'єднати без пробілу (CJK)", - "title": "Ярлики", + "generalToggleBreak": "Перемкнути розрив/прибрання розриву", "searchShortcuts": "Пошук ярликів...", - "filter": "Фільтр", - "categoryGeneral": "Загальне", "categorySubtitleGridAndTextBox": "Таблиця субтитрів і поле тексту", "categorySubtitleGrid": "Таблиця субтитрів", - "categoryWaveform": "Хвильова форма", "categoryTextBox": "Поле тексту", "categoryFile": "Файл", "categoryVideo": "Відео", "categorySync": "Синхронізація", - "categoryTranslate": "Переклад", - "categorySearch": "Пошук", - "categoryTools": "Інструменти", "categoryAi": "ШІ", + "categoryCustom": "Користувацький", + "editCustomShortcut": "Редагувати користувацький ярлик", + "customShortcutTextBoxKeyHint": "Використовуйте тут клавішу з Ctrl/Alt - звичайна клавіша більше не вводитиме текст у поле тексту.", + "customShortcutNumberX": "Користувацький ярлик #{0}", + "customShortcutNumberXY": "Користувацький ярлик #{0}: {1}", + "customShortcutStep": "Крок", + "customShortcutSteps": "Кроки", + "customShortcutStepRunCommand": "Виконати команду", + "customShortcutStepInsertText": "Вставити текст", + "customShortcutStepReplace": "Знайти та замінити", + "customShortcutInsertAtCursor": "У позиції курсора", + "customShortcutInsertAtStart": "На початку тексту", + "customShortcutInsertAtEnd": "У кінці тексту", + "customShortcutSummaryRunCommandX": "Виконати: {0}", + "customShortcutSummaryInsertXY": "Вставити \"{0}\" ({1})", + "customShortcutSummaryReplaceXY": "Замінити \"{0}\" на \"{1}\"", + "customShortcutSummaryReplaceRegexXY": "Замінити регулярний вираз \"{0}\" на \"{1}\"", + "customShortcutPickCommand": "Виберіть команду для виконання.", + "customShortcutEnterText": "Введіть текст для вставлення.", + "customShortcutEnterFind": "Введіть текст для пошуку.", + "customShortcutInvalidRegexX": "Неприпустимий регулярний вираз: {0}", + "customShortcutStepsHint": "Кроки виконуються згори донизу. Текстові кроки працюють із виділеними рядками; команди, які відкривають вікно, продовжуються після його закриття.", "activeIn": "Активний у", "activeInEverywhere": "Всюди", - "generalSetupLikeSe4": "Налаштувати як Subtitle Edit 4 (тема, ярлики, правила заміни)", - "generalMergeSelectedLines": "Об'єднати виділені рядки", - "generalMergeWithPrevious": "Об'єднати з попереднім", - "generalMergeWithNext": "Об'єднати з наступним", - "generalMergeWithPreviousAndUnbreak": "Об'єднати з попереднім і розбити", - "generalMergeWithNextAndUnbreak": "Об'єднати з наступним і розбити", - "generalMergeWithPreviousAndAutoBreak": "Об'єднати з попереднім і автоматично розбити", - "generalMergeWithNextAndAutoBreak": "Об'єднати з наступним і автоматично розбити", - "generalMergeSelectedLinesAndAutoBreak": "Об'єднати виділені рядки і автоматично розбити", "generalMergeSelectedLinesAndUnbreak": "Об'єднати виділені рядки і розбити", "generalMergeSelectedLinesAndUnbreakCjk": "Об'єднати виділені рядки і розбити CJK", - "generalMergeSelectedLinesOnlyFirstText": "Об'єднати виділені рядки тільки перший текст", "generalMergeSelectedLinesBilingual": "Об'єднати виділені рядки двомовно", - "generalMergeWithPreviousBilingual": "Об'єднати з попереднім двомовно", - "generalMergeWithNextBilingual": "Об'єднати з наступним двомовно", - "generalMergeOriginalAndTranslation": "Об'єднати оригінал і переклад", "generalToggleTranslationMode": "Перемкнути режим перекладу", - "generalSwitchOriginalAndTranslation": "Перемкнути оригінал і переклад", - "generalSwitchOriginalAndTranslationTextBoxes": "Перемкнути оригінал і переклад поля тексту", "generalToggleTranslationAndOriginalInPreviews": "Перемкнути переклад і оригінал у перегляді відео/аудіо", "generalChooseLayout": "Вибрати розкладку", - "generalLayoutChooseX": "Розкладка {0}", - "generalPlayFirstSelected": "Відтворити перший виділений", - "generalGoToFirstSelectedLine": "Перейти до першого виділеного рядка", - "generalGoToNextEmptyLine": "Перейти до наступного порожнього рядка", "generalGoToNextSubtitle": "Перейти до наступного субтитра", "generalGoToNextSubtitlePlayTranslate": "Перейти до наступного субтитра (відтворити переклад)", "generalGoToNextSubtitleCursorAtEnd": "Перейти до наступного субтитра (курсор в кінці)", "generalGoToPrevSubtitle": "Перейти до попереднього субтитра", "generalGoToPrevSubtitlePlayTranslate": "Перейти до попереднього субтитра (відтворити переклад)", - "generalGoToStartOfCurrentSubtitle": "Перейти до початку поточного субтитра", - "generalGoToEndOfCurrentSubtitle": "Перейти до кінця поточного субтитра", - "generalGoToPreviousSubtitleAndFocusVideo": "Перейти до попереднього субтитра і фокусувати відео", - "generalGoToNextSubtitleAndFocusVideo": "Перейти до наступного субтитра і фокусувати відео", - "generalGoToPrevSubtitleAndPlay": "Перейти до попереднього субтитра і відтворити", - "generalGoToNextSubtitleAndPlay": "Перейти до наступного субтитра і відтворити", - "generalGoToPreviousSubtitleAndFocusWaveform": "Перейти до попереднього субтитра і фокусувати хвильову форму", - "generalGoToNextSubtitleAndFocusWaveform": "Перейти до наступного субтитра і фокусувати хвильову форму", - "generalGoToLineNumber": "Перейти до номера рядка", "generalGoToFirstLine": "Перейти до першого рядка", "generalGoToLastLine": "Перейти до останнього рядка", "alsoSetVideoPosition": "Також встановлювати позицію відео", "generalGoToVideoPosition": "Перейти до позиції відео", "generalToggleItalic": "Перемкнути курсив", "generalToggleBold": "Перемкнути жирний", - "generalToggleBookmarks": "Перемкнути закладки", - "generalFocusTextBox": "Фокусувати поле тексту", - "generalToggleBookmarksWithText": "Перемкнути закладки з текстом", - "generalEditBookmarks": "Редагувати закладки", - "fileNew": "Новий", "generalToggleUnderline": "Перемкнути підкреслення", + "generalToggleBox": "Перемкнути коробку (EBU STL)", "fileOpen": "Відкрити", "fileOpenKeepVideo": "Відкрити (зберегти відео)", "fileSave": "Зберегти", "fileSaveAs": "Зберегти як", - "fileSaveAll": "Зберегти все", "fileSaveOriginal": "Зберегти оригінал", - "fileSaveOriginalAs": "Зберегти оригінал як", - "fileOpenOriginalSubtitle": "Відкрити оригінал субтитрів", - "fileCloseOriginalSubtitle": "Закрити оригінал субтитрів", - "fileTranslatedSubtitle": "Перекладені субтитри", "fileCompare": "Порівняти", "fileStatistics": "Статистика", "fileImportPlainText": "Імпорт простого тексту", - "fileImportBluRaySupForOcr": "Імпорт Blu-ray SUP для OCR", - "fileImportBluRaySupForEdit": "Імпорт Blu-ray SUP для редагування", - "fileImportTimeCodes": "Імпорт кодів часу", "fileExportEbuStl": "Експорт EBU STL", "fileExportPac": "Експорт PAC", - "fileExportEdlClipName": "Експорт EDL імені кліпу", - "fileExportPlainText": "Експорт простого тексту", - "fileExportCustomTextFormat1": "Експорт користувацького текстового формату 1", - "fileExportCustomTextFormat2": "Експорт користувацького текстового формату 2", - "fileExportCustomTextFormat3": "Експорт користувацького текстового формату 3", "fileExit": "Вийти", "openSeDataFolder": "Відкрити теку Subtitle Edit", - "editFind": "Знайти", - "editFindNext": "Знайти далі", "editFindPrevious": "Знайти попереднє", - "editReplace": "Замінити", - "editMultipleReplace": "Множинна заміна", - "editModifySelection": "Змінити вибір", - "listSelectAll": "Вибрати все", - "listSelectFirst": "Вибрати перший", - "listSelectLast": "Вибрати останній", "listInverseSelection": "Інвертувати вибір", "listDeleteSelection": "Видалити вибір", + "deleteSelectionEverywhere": "Видалити виділення (всюди)", "rippleDeleteSelection": "Видалити вибір з розповсюдженням", - "settings": "Налаштування", "assigned": "Призначено", "unassigned": "Не призначено", "pressedKeyX": "Натиснута клавіша: {0}", @@ -3442,6 +3812,7 @@ "detectKey": "Визначити клавішу", "control": "Контроль", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Shift", "controlMac": "⌃", @@ -3452,11 +3823,14 @@ "resetShortcutsDetail": "Бажаєте скинути всі ярлики до типових значень?", "togglePlayPause": "Перемкнути відтворення/паузу", "toggleLockTimeCodes": "Перемкнути блокування кодів часу", + "toggleTimeCodeMode": "Перемкнути режим коду часу (час/кадри/номери кадрів)", + "toggleScreenPrivacy": "Перемкнути приватність екрана (приховати імена файлів, потім і тексти)", + "screenPrivacyFileNamesHidden": "Приватність екрана: імена файлів приховано", + "screenPrivacyFileNamesAndTextsHidden": "Приватність екрана: імена файлів і тексти приховано", + "screenPrivacyOff": "Приватність екрана: вимк.", "duplicateSelectedLines": "Дублювати виділені рядки", "sourceView": "Вихідний вигляд", - "showAlignmentPicker": "Вирівнювання", "addOrEditBookmark": "Додати або редагувати закладку", - "listBookmarks": "Список закладок", "toggleBookmark": "Перемкнути закладку (виділені рядки, без тексту)", "toggleForcedSelectedLines": "Перемкнути примусово (виділені рядки)", "goToNextBookmark": "Перейти до наступної закладки", @@ -3467,12 +3841,12 @@ "waveformSetStartAndSetEndOfPreviousMinusGap": "Встановити початок і встановити кінець попереднього мінус прогалина", "waveformSetEndAndStartOfNextAfterGap": "Встановити кінець і початок наступного плюс прогалина", "waveformSetEndAndStartOfNextAfterGapAndGoToNext": "Встановити кінець і початок наступного плюс прогалина і перейти до наступного", - "fetchFirstWordFromNextSubtitle": "Отримати перше слово з наступних субтитрів", "moveLastWordToNextSubtitle": "Перемістити останнє слово до наступного субтитра", "moveLastWordFromFirstLineDownCurrentSubtitle": "Перемістити останнє слово з першого рядка вниз (поточний субтитр)", "moveFirstWordFromNextLineUpCurrentSubtitle": "Перемістити перше слово з наступного рядка вгору (поточний субтитр)", "moveTextFromCursorToNextAndGoToNext": "Перемістити текст після курсора до наступних субтитрів і перейти до наступного", "moveTextFromCursorToNextAndGoToNextAndPlay": "Перемістити текст після курсора до наступних субтитрів, перейти до наступного і відтворити", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "Перемістити текст після позиції курсора до наступних субтитрів, перейти до наступних, відтворити їх і призупинити в кінці", "breakAtFirstSpaceFromCursor": "Розбити на першому пробілі від позиції курсора", "breakAtFirstSpaceFromCursorAndGoToNext": "Розбити на першому пробілі від позиції курсора і перейти до наступного", "toggleFocusGridAndWaveform": "Перемкнути фокус між таблицею субтитрів і хвильовою формою/спектрограмою", @@ -3484,7 +3858,6 @@ "videoGoToPreviousTimeCode": "Перейти до попереднього коду часу", "videoGoToNextTimeCode": "Перейти до наступного коду часу", "goToNextLineAndSetVideoPosition": "Перейти до наступного субтитра і встановити позицію відео", - "textBoxDeleteSelectionNoClipboard": "Поле тексту: Видалити вибір (без буфера обміну)", "textBoxDeleteForward": "Текстове поле: видалити виділене або наступний символ (видалення вперед)", "textBoxCut": "Поле тексту: Вирізати", "textBoxCut2": "Поле тексту: Вирізати (альтернатива)", @@ -3503,33 +3876,27 @@ "listViewColumnTextUp": "Стовпець, текст вгору", "listViewColumnTextDown": "Стовпець, текст вниз", "autoTranslateSelectedLines": "Автоматичний переклад виділених рядків...", + "autoTranslateSelectedLinesNoPrompt": "Автоматичний переклад виділених рядків (без запиту, останній двигун/мови)", "setAssaResolution": "Встановити роздільну здатність ASSA (PlayResX/PlayResY)", "setShortcutForX": "Встановити ярлик для \"{0}\"", "commandFileNewKeepVideo": "Новий (зберегти відео)", "fileOpenOriginal": "Відкрити оригінал", "fileCloseOriginal": "Закрити оригінал", "restoreAutoBackup": "Відновити автозбереження", - "openContainingFolder": "Відкрити теку, що містить", "importTimeCodes": "Імпорт кодів часу", "importSubtitleWithManuallyChosenEncoding": "Імпорт субтитрів з вручну обраним кодуванням", "exportBluRaySup": "Експорт Blu-ray SUP", "exportCustomTextFormat": "Експорт користувацького текстового формату", "exportPlainText": "Експорт простого тексту", - "showHistory": "Показати історію", "toggleRightToLeft": "Перемкнути з правого на ліве", "modifySelection": "Змінити вибір", "adjustDurations": "Налаштувати тривалість", "applyDurationLimits": "Застосувати обмеження тривалості", "batchConvert": "Пакетне перетворення", - "bridgeGaps": "Замкнути прогалини", "applyMinGap": "Застосувати мінімальну прогалину", - "fixCommonErrors": "Виправити загальні помилки", "makeEmptyTranslationFromCurrentSubtitle": "Створити порожній переклад з поточних субтитрів", - "mergeLinesWithSameText": "Об'єднати рядки з однаковим текстом", - "mergeLinesWithSameTimeCodes": "Об'єднати рядки з однаковими кодами часу", "splitBreakLongLines": "Розділити/перебалансувати довгі рядки", "mergeShortLines": "Об'єднати короткі рядки", - "removeTextForHearingImpaired": "Видалити текст для людей з втратою слуху", "joinSubtitles": "Об'єднати субтитри", "splitSubtitle": "Розділити субтитри", "spellCheck": "Перевірка орфографії", @@ -3551,7 +3918,6 @@ "adjustAllTimes": "Налаштувати всі часи", "visualSync": "Візуальна синхронізація", "translateViaCopyPaste": "Переклад через копіювання/вставку", - "shortcuts": "Ярлики", "wordLists": "Списки слів", "chooseUiLanguage": "Вибрати мову інтерфейсу", "chooseRuleProfile": "Вибрати профіль правил", @@ -3562,6 +3928,7 @@ "textBoxItalic": "Поле тексту курсив", "textBoxBold": "Текстове поле: жирний", "textBoxUnderline": "Текстове поле: підкреслений", + "textBoxBox": "Коробка поля тексту (EBU STL)", "resetWaveformZoomAndSpeed": "Скинути масштабування хвильової форми і швидкість відтворення (швидкість)", "togglePlaybackSpeed": "Перемкнути швидкість відтворення (швидкість)", "playbackSpeedSlower": "Швидкість відтворення повільніше (швидкість)", @@ -3571,22 +3938,28 @@ "seekSilence": "Шукати тишу", "waveformGuessStart": "Вгадати час початку з хвильової форми", "waveformGuessEnd": "Вгадати час кінця з хвильової форми", + "waveformGuessStartAndEnd": "Вгадати час початку та кінця за хвильовою формою", "setVideoPositionCurrentSubtitleStart": "Встановити позицію відео на початок поточного рядка", "goToSubtitlePositionAndPause": "Перейти до позиції субтитрів і призупинити", "setVideoPositionCurrentSubtitleEnd": "Встановити позицію відео на кінець поточного рядка", "toggleAudioTracks": "Перемкнути аудіодоріжки", - "listErrors": "Список помилок", "goToNextError": "Перейти до наступної помилки", "goToPreviousError": "Перейти до попередньої помилки", "addNameToNameList": "Додати ім'я до списку імен", "findDoubleWords": "Знайти подвійні слова", "findDoubleLines": "Знайти подвійні рядки", "colorX": "Колір {0}", - "removeColor": "Видалити колір", "surroundWith": "Обгорнути...", "surroundWithXY": "Обгорнути {0}/{1}", - "repeatLine": "Повторити рядок", "surroundWithNumberX": "Оточити #{0}", + "surroundWithBehavior": "Поведінка", + "surroundWithBehaviorToggle": "Перемикати (додати або видалити, якщо є)", + "surroundWithBehaviorAdd": "Додавати (щоразу)", + "surroundWithBehaviorRemove": "Видаляти (усі)", + "surroundWithBehaviorRemoveOnce": "Видаляти (по одному щоразу)", + "surroundWithWorksOn": "Діє на", + "surroundWithScopeSelectionOrText": "Виділення, інакше весь текст", + "surroundWithScopeEachLine": "Кожен рядок", "searchVia": "Шукати через", "searchViaX": "Шукати через {0}", "searchViaNumberX": "Шукати через #{0}", @@ -3611,6 +3984,11 @@ "copySubtitlePathToClipboard": "Копіювати шлях субтитрів в буфер обміну", "copySubtitleOriginalPathToClipboard": "Копіювати шлях оригіналу субтитрів в буфер обміну", "focusTextBox": "Фокусувати поле тексту", + "focusSubtitleListView": "Фокус на таблиці субтитрів", + "focusWaveform": "Фокус на хвильовій формі", + "focusOriginalTextBox": "Фокус на полі оригінального тексту", + "textBoxGoToStart": "Поле тексту, перейти на початок", + "textBoxGoToEnd": "Поле тексту, перейти в кінець", "sortByStartTime": "Сортувати за часом \"Показати\"", "sortByEndTime": "Сортувати за часом \"Приховати\"", "sortByDuration": "Сортувати за тривалістю", @@ -3633,7 +4011,6 @@ "assaStyles": "Стилі ASSA", "assaProperties": "Властивості ASSA", "assaAttachments": "Вкладення ASSA", - "assaVideoColorPicker": "Вибір кольору відео ASSA", "recalculateDurationSelectedLines": "Перерахувати тривалість (виділені рядки)", "toggleWaveformAndSpectrogramHeight": "Перемкнути розділену висоту хвильової форми/спектрограми", "toggleSpectrogramStyle": "Перемкнути стиль спектрограми", @@ -3658,9 +4035,9 @@ "selectionToSentenceCase": "Текстове поле: виділене в Регістр речень", "selectionToggleCasing": "Текстове поле: перемкнути регістр (ВЕРХНІЙ -> нижній -> Регістр Заголовка)", "googleIt": "Шукати в Google (вибраний текст)", - "setActorXY": "Встановити актора {0}: {1}", + "setActorX": "Встановити актора: {0}", "setNewActor": "Встановити нового актора...", - "setActorSlotXTitle": "Слот актора {0}", + "setStyleX": "Встановити стиль: {0}", "toggleDialogDashes": "Перемкнути дефіси діалогу", "mergeWithLineBeforeAsDialog": "Об'єднати з попереднім рядком як діалог", "mergeWithLineAfterAsDialog": "Об'єднати з наступним рядком як діалог", @@ -3671,13 +4048,27 @@ "moveStartOneFrameBackKeepGapPrev": "Перемістити початок на один кадр назад (зберегти прогалину до попереднього, якщо близько)", "moveStartOneFrameForwardKeepGapPrev": "Перемістити початок на один кадр вперед (зберегти прогалину до попереднього, якщо близько)", "moveEndOneFrameBackKeepGapNext": "Перемістити кінець на один кадр назад (зберегти прогалину до наступного, якщо близько)", - "moveEndOneFrameForwardKeepGapNext": "Перемістити кінець на один кадр вперед (зберегти прогалину до наступного, якщо близько)" + "moveEndOneFrameForwardKeepGapNext": "Перемістити кінець на один кадр вперед (зберегти прогалину до наступного, якщо близько)", + "moveStartXMsBack": "Зсунути початок на X ms назад (X задається в Налаштуваннях, також у Візуальній синхронізації)", + "moveStartXMsForward": "Зсунути початок на X ms вперед (X задається в Налаштуваннях, також у Візуальній синхронізації)", + "moveEndXMsBack": "Зсунути кінець на X ms назад (X задається в Налаштуваннях, також у Візуальній синхронізації)", + "moveEndXMsForward": "Зсунути кінець на X ms вперед (X задається в Налаштуваннях, також у Візуальній синхронізації)", + "moveSelectedLinesXMsBack": "Перемістити виділені рядки на X ms назад (X задається в Налаштуваннях)", + "moveSelectedLinesXMsForward": "Перемістити виділені рядки на X ms вперед (X задається в Налаштуваннях)", + "moveSelectedLinesAndForwardXMsBack": "Перемістити виділені рядки та всі наступні на X ms назад (X задається в Налаштуваннях)", + "moveSelectedLinesAndForwardXMsForward": "Перемістити виділені рядки та всі наступні на X ms вперед (X задається в Налаштуваннях)", + "moveAllLinesXMsBack": "Перемістити всі рядки на X ms назад (X задається в Налаштуваннях)", + "moveAllLinesXMsForward": "Перемістити всі рядки на X ms вперед (X задається в Налаштуваннях)", + "moveSelectedLinesCustomMsBack": "Перемістити виділені рядки, користувацькі мілісекунди ({0:#,###,##0}) назад, {1}", + "moveSelectedLinesCustomMsForward": "Перемістити виділені рядки, користувацькі мілісекунди ({0:#,###,##0}) вперед, {1}", + "moveSelectedLinesAndForwardCustomMsBack": "Перемістити виділені рядки та всі наступні, користувацькі мілісекунди ({0:#,###,##0}) назад, {1}", + "moveSelectedLinesAndForwardCustomMsForward": "Перемістити виділені рядки та всі наступні, користувацькі мілісекунди ({0:#,###,##0}) вперед, {1}", + "moveAllLinesCustomMsBack": "Перемістити всі рядки, користувацькі мілісекунди ({0:#,###,##0}) назад, {1}", + "moveAllLinesCustomMsForward": "Перемістити всі рядки, користувацькі мілісекунди ({0:#,###,##0}) вперед, {1}" }, "wordLists": { "title": "Списки слів", "addName": "Додати ім'я", - "addWord": "Додати слово", - "addPair": "Додати пару", "nameAndIgnoreList": "Список імен/ігнорування", "userWords": "Список користувацьких слів", "ocrFixList": "Список виправлень OCR", @@ -3730,6 +4121,8 @@ "nOcrDatabase": "База даних nOCR", "drawMode": "Режим малювання:", "addNewCharcter": "Додати новий символ", + "addNOcrCharacterTitle": "Додати символ nOCR для рядка {0}, символ {1} з {2}, база даних \"{3}\"", + "addBinaryOcrCharacterTitle": "Додати символ бінарного OCR для рядка {0}, символ {1} з {2}, база даних \"{3}\"", "lineIndexX": "Рядок {0}", "inspectNOcrAdditions": "Перевірити нові додавання nOCR", "ocrSelectedLines": "OCR виділених рядків", @@ -3778,6 +4171,8 @@ "fillSelectedLinesWithClipboard": "Заповнити виділені рядки текстом з буфера обміну", "saveBlankTextTitle": "Зберегти порожній текст?", "saveBlankTextPrompt": "Зберегти порожній текст для зображення?", + "drawnLinesDoNotMatchTitle": "Лінії не відповідають зображенню", + "drawnLinesDoNotMatchPrompt": "Деякі намальовані лінії не відповідають зображенню (зелені лінії мають бути на символі, червоні - поза ним), тому цей символ не буде розпізнано.\n\nВсе одно зберегти?", "yesAndNeverAskAgain": "Так і більше не запитувати", "importTextFromSubtitleDotDotDot": "Імпортувати текст із субтитрів...", "importTextFromSubtitleOverwritePrompt": "Деякі рядки вже мають текст OCR. Перезаписати існуючий текст?", @@ -3803,7 +4198,6 @@ "vobSubColorsTitle": "Кольори VobSub/DVD", "vobSubColorsHeader": "Налаштувати чотири кольори VobSub", "vobSubColorsDescription": "Субтитри VobSub/DVD використовують чотири індексовані кольори: фон, візерунок, акцент 1 і акцент 2. Виберіть кожен колір нижче, щоб перевизначити вбудовану палітру - корисно, коли оригінальні кольори дають поганий контраст для OCR.", - "vobSubColorBackground": "Фон", "vobSubColorPattern": "Візерунок", "vobSubColorEmphasis1": "Акцент 1", "vobSubColorEmphasis2": "Акцент 2", @@ -3837,9 +4231,26 @@ "crispEmbedSettingsTitle": "Налаштування CrispEmbed", "crispEmbedDescription": "Локальний двигун OCR з кількома бекендами моделей - завантажте двигун і моделі тут.", "trainNOcrDatabase": "Навчити базу даних nOCR...", + "optimizeNOcrDatabase": "Оптимізувати базу даних nOCR...", + "optimizeNOcrDatabaseQuestionXY": "Видалити з бази даних nOCR \"{0}\" лінії, які не допомагають відрізнити символи від схожих?\n\nЦе зменшує базу даних і пришвидшує OCR, зазвичай із меншою кількістю помилок. Триває до хвилини.\n\nРезервну копію буде збережено як \"{1}\".", + "optimizingNOcrDatabaseXY": "Оптимізація бази даних nOCR... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "Базу даних nOCR \"{0}\" оптимізовано: {1:#,##0} -> {2:#,##0} ліній.", "startTraining": "Почати навчання", "abortTraining": "Перервати навчання", "trainingOptions": "Параметри навчання", + "trainNOcrSubtitle": "Рендерить символи встановленими шрифтами та навчає nOCR їхніх форм. Виберіть шрифти, які використовують ваші субтитри.", + "xFontsSelected": "Вибрано: {0:#,##0}", + "subtitleFonts": "Шрифти субтитрів", + "emptyDatabase": "Порожня база даних", + "startFromDatabase": "Почати з", + "startFromDatabaseHint": "Додати навчені символи до копії наявної бази даних (рекомендовано) або почати з порожньої", + "fontSizes": "Розміри шрифту", + "fontSizesHint": "Розміри шрифту в пікселях для рендерингу, через кому, наприклад \"30, 40\"", + "numberOfLineSegmentsHint": "Ліній, що перевіряються на символ - більше означає суворіше, але повільніше", + "enterDatabaseName": "Введіть назву бази даних", + "trainingFontXSizeYCharacterZ": "Навчання \"{0}\" при {1} px: {2}", + "xLearned": "Вивчено: {0:#,##0}", + "xSkipped": "Пропущено: {0:#,##0}", "charactersToTrain": "Символи для навчання", "letterCombinationsToTrain": "Комбінації літер, які можуть бути розділені на одне зображення", "importCharactersFromSubtitleFile": "Імпортувати символи з файлу субтитрів...", @@ -3866,6 +4277,8 @@ "drawZoomOut": "Зменшити (Ctrl+-)", "drawResetView": "Скинути вигляд (Ctrl+0)", "drawToggleGrid": "Перемкнути сітку (Ctrl+G)", + "drawTogglePreview": "Перемкнути попередній перегляд (F9)", + "drawPreviewFailed": "Помилка попереднього перегляду - потрібен ffmpeg із libass (фільтр subtitles)", "drawCopyToClipboard": "Копіювати в буфер обміну (Ctrl+C)", "drawShapes": "Форми", "drawSelectedPoint": "Вибрана точка", @@ -3873,16 +4286,86 @@ "drawSelectedLayer": "Вибраний шар", "drawToolX": "Інструмент: {0}", "drawHelpText": "Клацніть, щоб додати точки • Enter/F8 щоб закрити форму • Shift+Перетягування для панорамування • Ctrl+Прокрутка для масштабування", + "drawMoveToLayer": "Перемістити на шар", + "drawFlipHorizontal": "Віддзеркалити по горизонталі", + "drawFlipVertical": "Віддзеркалити по вертикалі", + "drawHideShape": "Приховати фігуру", + "drawShowShape": "Показати фігуру", + "drawHideLayer": "Приховати шар", + "drawShowLayer": "Показати шар", + "drawDeleteLayer": "Видалити шар", + "drawDeletePoint": "Видалити точку", + "drawCancelDrawing": "Скасувати малювання", + "drawLayerX": "Шар {0}", + "drawImportSvg": "Імпортувати зображення SVG...", + "drawRotateClockwise": "Повернути на 90° за годинниковою стрілкою", + "drawConvertToCurve": "Перетворити сегмент на криву", + "drawBackground": "Фон", + "drawPosition": "Позиція", + "drawZoom": "Масштаб", + "drawShapeTool": "Інструмент фігур", + "drawColorPickerTool": "Взяти колір із фігури або фону", + "drawShapeLibrary": "Бібліотека фігур", + "drawShapeLibraryHint": "Перетягніть на полотні, щоб розмістити фігуру, або клацніть для типового розміру. Shift зберігає пропорції.", + "drawAddToLibrary": "Додати до бібліотеки фігур...", + "drawRemoveFromLibrary": "Видалити з бібліотеки фігур", + "drawShapeName": "Назва фігури", + "drawCategorySpeechBubbles": "Бульбашки мовлення", + "drawCategoryArrows": "Стрілки", + "drawCategoryBasicShapes": "Основні фігури", + "drawCategorySymbols": "Символи", + "drawCategoryMyShapes": "Мої фігури", + "drawShapeSpeechBubble": "Бульбашка мовлення", + "drawShapeSpeechBubbleRight": "Бульбашка мовлення, хвіст праворуч", + "drawShapeSpeechBubbleUp": "Бульбашка мовлення, хвіст угору", + "drawShapeOvalBubble": "Овальна бульбашка мовлення", + "drawShapeBoxBubble": "Прямокутна бульбашка мовлення", + "drawShapeThoughtBubble": "Бульбашка думок", + "drawShapeShoutBubble": "Бульбашка крику", + "drawShapeCaptionBox": "Рамка підпису", + "drawShapeArrow": "Стрілка", + "drawShapeDoubleArrow": "Подвійна стрілка", + "drawShapeChevron": "Шеврон", + "drawShapeCurvedArrow": "Вигнута стрілка", + "drawShapeRoundedRectangle": "Заокруглений прямокутник", + "drawShapeTriangle": "Трикутник", + "drawShapeDiamond": "Ромб", + "drawShapePentagon": "П'ятикутник", + "drawShapeHexagon": "Шестикутник", + "drawShapeOctagon": "Восьмикутник", + "drawShapeStar": "Зірка", + "drawShapeRing": "Кільце", + "drawShapePlus": "Плюс", + "drawShapeBanner": "Банер", + "drawShapeHeart": "Серце", + "drawShapeCheck": "Галочка", + "drawShapeMusicNote": "Нота", + "drawShapeMusicNotes": "Ноти", + "drawShapeLightning": "Блискавка", + "drawShapeCloud": "Хмара", + "drawShapeMoon": "Місяць", + "drawShapeBadge": "Значок", + "drawSize": "Розмір", + "drawLayer": "Шар", + "drawBackgroundVideoFrame": "Кадр відео (поточна позиція)", + "drawBackgroundVideoFrameAt": "Кадр відео в...", + "drawBackgroundImage": "Файл зображення...", + "drawBackgroundNone": "Без фону", + "drawBackgroundStretch": "Розтягнути зображення на полотно", + "drawBackgroundOpacity": "Непрозорість фону", + "drawBackgroundVideoFrameFailed": "Не вдалося отримати кадр відео в {0}.", + "drawImages": "Зображення", + "drawConvertToLine": "Перетворити сегмент на лінію", + "drawConvertShapeToCurves": "Перетворити всі лінії на криві", + "drawConvertShapeToLines": "Перетворити всі криві на лінії", + "drawRotateCounterClockwise": "Повернути на 90° проти годинникової стрілки", + "drawSvgImages": "Зображення SVG", + "drawSvgNoShapes": "У файлі SVG не знайдено заповнених фігур або контурів.", "progressBarTitle": "Індикатор прогресу ASSA", "progressBarSettings": "Індикатор прогресу", - "progressBarPosition": "Позиція", - "progressBarBottom": "Знизу", - "progressBarTop": "Зверху", "mouseOverColor": "Колір при наведенні", "clickedColor": "Колір при натисканні", "progressBarForeColor": "Колір переднього плану", - "progressBarBackColor": "Колір фону", - "progressBarStyle": "Стиль", "progressBarSquareCorners": "Квадратні кути", "progressBarRoundedCorners": "Закруглені кути", "progressBarChapters": "Глави", @@ -3891,8 +4374,6 @@ "progressBarXAdjustment": "Коригування X", "progressBarYAdjustment": "Коригування Y", "progressBarTextAlignment": "Вирівнювання тексту", - "progressBarTakePosFromVideo": "Взяти позицію з відео", - "progressBarPreview": "Попередній перегляд", "fontCollectorTitle": "Збирач шрифтів", "fontCollectorUsedIn": "Використано в", "fontCollectorFontFiles": "Файл(и) шрифтів", @@ -3939,19 +4420,14 @@ "resolutionResamplerVideoDiffers": "Роздільна здатність субтитрів ({0}x{1}) відрізняється від роздільної здатності відео ({2}x{3}).\nЗмінити субтитри відповідно до відео?", "resolutionResamplerAskOnVideoOpen": "Питати при відкритті відео з іншою роздільною здатністю", "backgroundBoxGenerator": "Створити фонову коробку", - "backgroundBoxPadding": "Внутрішній відступ", "backgroundBoxFillWidth": "Ширина заповнення", - "backgroundBoxBoxColor": "Колір коробки", "backgroundBoxRadius": "Радіус", "backgroundBoxCircle": "Коло", "backgroundBoxSpikes": "Шипи", "backgroundBoxBubbles": "Бульбашки", - "stylesTitle": "Розширені стилі Sub Station Alpha", "stylesInFile": "Стилі в файлі", "stylesSaved": "Стилі збережено", - "category": "Категорія", "allCategories": "[Всі]", - "defaultCategory": "Типова", "newCategory": "Нова категорія...", "renameCategory": "Перейменувати категорію...", "deleteCategory": "Видалити категорію", @@ -3971,13 +4447,26 @@ "graphics": "Графіка", "copyToStorageStyles": "Копіювати до стилів сховища", "copyToFileStyles": "Копіювати до файлових стилів", + "styleXAlreadyExistsInStorage": "Стиль із назвою \"{0}\" вже існує в сховищі.\n\nПерезаписати його чи зберегти обидва (копія отримає нову назву)?", + "styleXAlreadyExistsInFile": "Стиль із назвою \"{0}\" вже існує у файлі.\n\nПерезаписати його чи зберегти обидва (копія отримає нову назву)?", + "styleNameCannotBeEmpty": "Назва стилю не може бути порожньою.", + "styleNameXIsUsedMoreThanOnce": "Назва стилю \"{0}\" використовується кількома стилями у файлі.", + "overwrite": "Перезаписати", + "keepBoth": "Зберегти обидва", + "doThisForAllConflictingStyles": "Зробити це для всіх конфліктних стилів", "setStyleAsDefault": "Встановити стиль як типовий", "takeUsagesFromDotDotDot": "Взяти використання з...", "replaceStyleWithDotDotDot": "Замінити стиль на...", "noAttachmentsFound": "В обраному файлі ASSA не знайдено вкладень.", "deleteStyleQuestion": "Видалити стиль?", "deleteStylesQuestion": "Видалити стилі?", + "deleteXStylesQuestion": "Видалити стилі ({0})?", + "deleteXStylesFromStorageQuestion": "Видалити стилі ({0}) зі сховища?", + "deleteStyleXFromStorageQuestion": "Видалити стиль \"{0}\" зі сховища?", + "deleteStyleXFromFileQuestion": "Видалити стиль \"{0}\" з поточного файлу?", "openStyleImportFile": "Відкрити файл субтитрів для імпорту стилів", + "styleImportFiles": "Файли стилів (.ass, .sty, категорії Subtitle Edit 4 .template)", + "ssaStyleImportFiles": "Файли стилів (.ssa, .ass, .sty)", "primary": "Основний", "secondary": "Додатковий", "applyOverrideTags": "Застосувати теги перевизначення", @@ -3992,7 +4481,6 @@ "spaceIncrease": "Збільшення простору", "popIn": "Поява", "spinIn": "Обертання", - "playCurrent": "Відтворити поточний", "setPosition": "Встановити позицію", "rotation": "Обертання", "scaleX": "Масштаб X", @@ -4036,10 +4524,8 @@ "advancedEffectOldMovieDescription": "Симулює старий 35мм проектор з шумом, відтінком і царапинами", "advancedEffectNeonBurst": "Неоновий вибух", "advancedEffectNeonBurstDescription": "Висока енергія 'Shorts' стилі з неоновим світлом і анімацією виходу", - "advancedEffectSettings": "Налаштування", "advancedEffectSnowFlakeCount": "Кількість сніжинок", "advancedEffectStarfieldStarCount": "Кількість зір", - "advancedEffectStarfieldSpeed": "Швидкість", "advancedEffectGlitch": "Гліч", "advancedEffectGlitchDescription": "Цифровий гліч з хроматичною аберацією, білими вспливи та накладанням спотворень", "advancedEffectBounceIn": "Відскок", @@ -4048,8 +4534,6 @@ "advancedEffectFirefliesDescription": "Теплі жовто-амберні крапки, що плавають органічно по екрану з пульсаючим світлом", "advancedEffectMatrix": "Матриця", "advancedEffectMatrixDescription": "Падіння зелених стовпців символів з текстом субтитрів, що будується літера за літерою з дощу", - "advancedEffectAudioBars": "Аудіо смуги (хвильова форма)", - "advancedEffectAudioBarsDescription": "Анімовані смуги еквалайзера, що керуються аудіо хвильовою формою — смуги прокручуються вліво як хвильова форма і пульсують з аудіо", "advancedEffectAudioPulse": "Пульсація тексту", "advancedEffectAudioPulseDescription": "Текст субтитрів світиться і пульсує з аудіо об'ємом — тихі секції показують нормальний текст, гучні піки додають кольорове облямування і легке збільшення", "advancedEffectConfetti": "Конфеті", @@ -4063,7 +4547,6 @@ "advancedEffectFancyKaraokeGlow": "Виділіть активне слово", "advancedEffectFancyKaraokeActiveColor": "Активний колір", "advancedEffectFancyKaraokeInactiveColor": "Неактивний колір", - "advancedEffectFancyKaraokeInactiveOpacity": "Непрозорість неактивного (0-255)", "advancedEffectWordSpacingPixels": "Пропуск (пікселі)", "advancedEffectSlowZoomOut": "Повільне зменшення", "advancedEffectSlowZoomOutDescription": "Текст починається трохи більшим і повільно зменшується до нормального розміру протягом тривалості субтитрів", @@ -4097,7 +4580,6 @@ "advancedEffectSlideInLeftDescription": "Текст виїжджає з-за лівого краю екрана, затримується, потім виходить назад ліворуч", "advancedEffectSlideInRight": "Виїзд справа", "advancedEffectSlideInRightDescription": "Текст виїжджає з-за правого краю екрана, затримується, потім виходить назад праворуч", - "advancedEffectFadeInOut": "Поява/зникнення", "advancedEffectFadeInOutDescription": "Текст з'являється на початку і зникає в кінці кожного субтитру" }, "about": { @@ -4118,7 +4600,6 @@ "noPluginsInstalled": "Плагіни не встановлено", "getPluginsOnline": "Отримати плагіни онлайн...", "getPluginsTitle": "Отримати плагіни", - "enabled": "Увімкнено", "disabled": "Вимкнено", "notSupportedOnThisOs": "Не підтримується в цій операційній системі", "removePluginXConfirm": "Видалити плагін '{0}'? Це видалить теку плагіна:{1}", @@ -4135,17 +4616,19 @@ "downloadingXPercent": "Завантаження {0}%...", "pluginXInstalled": "'{0}' встановлено.", "couldNotInstallPluginX": "Не вдалося встановити '{0}': {1}", - "notInstalled": "Не встановлено", "install": "Встановити", "reinstall": "Перевстановити", - "update": "Оновити", "installedX": "Встановлено ({0})", "updateAvailableXToY": "Доступне оновлення ({0} → {1})", "applyPluginToWhichLinesX": "Застосувати '{0}' до:", "applyToSelectedLinesX": "Виділені рядки ({0})", "applyToAllLinesX": "Усі рядки ({0})", "updateAllXAvailable": "Оновити все ({0})", - "updatingXOfY": "Оновлення {0}/{1}..." + "updatingXOfY": "Оновлення {0}/{1}...", + "doNotAskAgain": "Більше не запитувати (змінюється в Керуванні плагінами)", + "applyPluginsTo": "Застосовувати плагіни до", + "askEachTime": "Запитувати щоразу", + "allLines": "Усі рядки" }, "errorList": { "title": "Список помилок", diff --git a/src/ui/Assets/Languages/Vietnamese.json b/src/ui/Assets/Languages/Vietnamese.json index ace98b231b3..5855f2328fa 100644 --- a/src/ui/Assets/Languages/Vietnamese.json +++ b/src/ui/Assets/Languages/Vietnamese.json @@ -1,12 +1,70 @@ { "title": "Subtitle Edit", - "version": "v5.2.0-rc7", + "version": "v5.3.0", "translatedBy": "Claude (Anthropic)", "cultureName": "vi-VN", "general": { + "prompt": "Lời nhắc", + "preset": "Cấu hình sẵn", + "output": "Đầu ra", + "outputFormat": "Định dạng đầu ra", + "other": "Khác", + "timeCodeFormat": "Định dạng mã thời gian", + "topBottomMargin": "Lề trên/dưới", + "theme": "Chủ đề", + "brightness": "Độ sáng", + "chooseColor": "Chọn màu", + "lineX": "Dòng {0}", + "playLine": "Phát dòng", + "maxLineLength": "Độ dài dòng tối đa", + "maxCharsPerSec": "Số ký tự/giây tối đa", + "maxNumberOfLines": "Số dòng tối đa", + "subtitles": "Phụ đề", + "shotChanges": "Điểm chuyển cảnh", + "chapters": "Chương", + "audio": "Âm thanh", + "interjections": "Thán từ", + "blankLines": "Dòng trống", + "editWholeText": "Chỉnh sửa toàn bộ văn bản", + "noTextInClipboard": "Không có văn bản trong bộ nhớ tạm", + "noSubtitlesFoundTitle": "Không tìm thấy phụ đề", + "replacedXOccurrences": "Đã thay thế {0} lần xuất hiện", + "invalidRegularExpressionX": "Biểu thức chính quy không hợp lệ: {0}", + "discardChangesTitle": "Bỏ các thay đổi?", + "downloadingXDotDotDot": "Đang tải xuống {0}...", + "importTimeCodesDotDotDot": "Nhập mã thời gian...", + "original": "Gốc", + "nextChange": "Thay đổi tiếp theo", + "previousChange": "Thay đổi trước", + "changeXOfY": "Thay đổi {0} trên {1}", + "tooLong": "Quá dài", + "tooShort": "Quá ngắn", + "overlapping": "Chồng lấn", + "detail": "Chi tiết", + "fixOcrErrors": "Sửa lỗi OCR", + "runningOcrXY": "Đang chạy OCR... {0}/{1}", + "llamaCppDownloadEnginePrompt": "llama.cpp cần tải xuống công cụ llama-server. Tải xuống ngay?", "abort": "Hủy bỏ", "actor": "Diễn viên", "actors": "Diễn viên", + "setActorDotDotDot": "Đặt diễn viên...", + "actorPickerTitle": "Đặt diễn viên", + "actorPickerFilterHint": "Gõ để lọc, hoặc gõ tên diễn viên mới", + "actorPickerKeysHint": "Nhấn một số hoặc Enter để đặt diễn viên. Alt+Lên/Xuống thay đổi thứ tự, Delete xóa diễn viên.", + "actorPickerNewActorX": "Diễn viên mới \"{0}\"", + "actorPickerLinesSelectedX": "Số dòng đã chọn: {0}", + "setStyleDotDotDot": "Đặt kiểu...", + "stylePickerTitle": "Đặt kiểu", + "stylePickerFilterHint": "Gõ để lọc, hoặc gõ tên kiểu mới", + "stylePickerKeysHint": "Nhấn một số (1-9, 0) để đặt kiểu cho tất cả các dòng đã chọn.", + "stylePickerNewStyleX": "Kiểu mới \"{0}\"", + "stylePickerNewStyleInfo": "Nhấn Enter để thêm kiểu này với cài đặt mặc định và đặt nó cho các dòng đã chọn. Dùng \"Quản lý kiểu...\" để thay đổi phông chữ, màu sắc và vị trí sau.", + "stylePickerCurrentStyleX": "Kiểu hiện tại: {0}", + "stylePickerLinesUsingStyleX": "Số dòng dùng kiểu này: {0}", + "stylePickerMarginsXYZ": "Trái {0}, phải {1}, dọc {2}", + "stylePickerSetStyle": "Đặt _kiểu", + "stylePickerManageStyles": "Quản lý kiểu...", + "stylePickerManageStylesHint": "Đóng cửa sổ này và mở trình quản lý kiểu để chỉnh sửa phông chữ, màu sắc, vị trí và hơn thế nữa", "add": "Thêm", "addDotDotDot": "Thêm...", "addToNamesListCaseSensitive": "Thêm vào danh sách tên (phân biệt chữ hoa/thường)", @@ -15,7 +73,6 @@ "adjustAlpha": "Điều chỉnh alpha (độ trong suốt)", "adjustDisplayDuration": "Điều chỉnh thời lượng hiển thị", "adjustment": "Điều chỉnh", - "advanced": "Nâng cao", "advancedSettings": "Cài đặt nâng cao", "after": "Sau", "alignment": "Căn chỉnh", @@ -60,7 +117,6 @@ "bdnXml": "BDN/xml", "bdnXml8Bit": "BDN/xml 8-bit", "before": "Trước", - "beforeX": "Trước \"{0}\"", "beginning": "Bắt đầu", "bluRaySup": "Blu-ray (sup)", "bold": "Đậm", @@ -72,7 +128,6 @@ "bookmarkEdit": "Chỉnh sửa dấu trang", "bookmarkEditForSelectedLinesX": "Chỉnh sửa dấu trang cho {0} dòng đã chọn", "bookmarksList": "Danh sách dấu trang", - "borderColor": "Màu viền", "borderStyle": "Kiểu viền", "bottomCenter": "Dưới-Giữa", "bottomLeft": "Dưới-Trái", @@ -99,7 +154,6 @@ "changeCasing": "Thay đổi chữ hoa/thường", "changeFormatting": "Thay đổi định dạng", "changeFrameRate": "Thay đổi tốc độ khung hình", - "changeLanguageFilter": "Thay đổi bộ lọc ngôn ngữ...", "changeOnce": "Thay đổi một lần", "changeSpeed": "Thay đổi tốc độ", "character": "Ký tự", @@ -141,7 +195,6 @@ "conversionCancelledByUser": "Chuyển đổi đã bị người dùng hủy", "convert": "Chuyển đổi", "converted": "Đã chuyển đổi", - "convertingDotDotDot": "Đang chuyển đổi...", "convertingXofYDotDoDot": "Đang chuyển đổi {0:#,###,##0}/{1:#,###,##0}...", "copy": "Sao chép", "copyImageToClipboard": "Sao chép hình ảnh vào clipboard", @@ -152,7 +205,6 @@ "couldNotOpenFileXErrorY": "Không thể mở tệp \"{0}\". Lỗi: {1}", "count": "Số lượng", "cps": "Ký tự/giây", - "currentSubtitle": "Phụ đề hiện tại", "cudaRuntime": "CUDA runtime", "currentVideoPosition": "Vị trí video hiện tại", "custom": "Tùy chỉnh", @@ -212,7 +264,6 @@ "expand": "Mở rộng", "export": "Xuất", "exportDotDotDot": "Xuất...", - "exportToX": "Xuất sang {0}", "extendAfter": "Kéo dài/rút ngắn đến dòng sau", "extendBefore": "Kéo dài/rút ngắn đến dòng trước", "extendSelectedLinesToNextShotChangeOrNextSubtitle": "Kéo dài các dòng đã chọn đến điểm chuyển cảnh tiếp theo (hoặc phụ đề tiếp theo)", @@ -229,7 +280,6 @@ "fileExtension": "Phần mở rộng tệp", "fileName": "Tên tệp", "fileNameX": "Tên tệp: {0}", - "fileNameXAndSize": "Tên tệp: {0} ({1})", "fileSaved": "Đã lưu tệp", "fileSavedToX": "Đã lưu tệp vào {0}", "fileXAlreadyExists": "Tệp \"{0}\" đã tồn tại.", @@ -239,8 +289,6 @@ "find": "Tìm", "findNext": "Tìm tiếp", "findTextX": "Tìm văn bản - {0}", - "fiveHundredMilliseconds": "500 mili giây", - "fiveSeconds": "Năm giây", "fix": "Sửa", "fixCommonErrors": "Sửa lỗi thông thường", "fixRightToLeft": "Sửa văn bản phải-sang-trái", @@ -264,14 +312,12 @@ "foundXInLineYZ": "Tìm thấy \"{0}\" ở dòng {1}, vị trí {2}", "foundXMatches": "Tìm thấy {0} kết quả", "frameRate": "Tốc độ khung hình", - "frameRateX": "Tốc độ khung hình: {0:0.0###}", "frames": "Khung hình", "from": "Từ", "fromCurrentVideoPosition": "từ vị trí video hiện tại", "fullScreen": "Toàn màn hình", "gap": "Khoảng cách", "general": "Chung", - "generalText": "Chung", "generate": "Tạo", "generateImportShotChanges": "Tạo/nhập điểm chuyển cảnh", "generating": "Đang tạo...", @@ -289,12 +335,8 @@ "help": "Trợ giúp", "hex": "Hex", "hide": "Ẩn", - "hidePreview": "Ẩn xem trước", "history": "Lịch sử", "horizontal": "Ngang", - "hourMinutesSecondsDecimalSeparatorMilliseconds": "Giờ:phút:giây{0}ms", - "hourMinutesSecondsFrames": "Giờ:phút:giây:khung hình", - "ip": "IP", "id": "ID", "image": "Hình ảnh", "imageSaved": "Đã lưu hình ảnh", @@ -355,6 +397,7 @@ "mergeSelectedLinesDialog": "Gộp các dòng đã chọn thành hội thoại", "mergeWithLineAfterAndAutoBreak": "Gộp với dòng sau và tự động ngắt dòng", "mergeWithLineAfterKeepBreaks": "Gộp với dòng sau (giữ ngắt dòng)", + "mergeWithLineAfterAndUnbreak": "Gộp với dòng sau và bỏ ngắt dòng", "mergeWithLineBeforeAndAutoBreak": "Gộp với dòng trước và tự động ngắt dòng", "mergeWithLineBeforeKeepBreaks": "Gộp với dòng trước (giữ ngắt dòng)", "middleCenter": "Giữa-Giữa", @@ -369,13 +412,13 @@ "moveAllShotChangeOneFrameForward": "Di chuyển tất cả điểm chuyển cảnh tiến một khung hình", "multiMode": "Chế độ đa dòng", "moveDown": "Di chuyển xuống", + "increase": "Tăng", + "decrease": "Giảm", "moveUp": "Di chuyển lên", "moveToTop": "Chuyển lên đầu", "moveToBottom": "Chuyển xuống cuối", "multipleReplace": "Thay thế nhiều", - "mute": "Tắt tiếng", "name": "Tên", - "negative": "Âm", "new": "Mới", "newDotDotDot": "Mới...", "newProfile": "Hồ sơ mới", @@ -405,20 +448,15 @@ "offsetY": "Độ lệch Y", "ok": "_OK", "oneFile": "Một tệp", - "oneHundredMilliseconds": "100 mili giây", - "oneSecond": "Một giây", "oneSecondBack": "Lùi một giây", "oneSecondForward": "Tiến một giây", - "onlineVideoFeatureNotAvailable": "Tính năng không khả dụng cho video trực tuyến", "openContainingFolder": "Mở thư mục chứa tệp", "openDictionaryFolder": "Mở thư mục từ điển", "openFile": "Mở tệp", "openImageBasedSubtitle": "Mở phụ đề dạng hình ảnh", "openImageFile": "Mở tệp hình ảnh", - "openOriginalSubtitleFile": "Mở tệp phụ đề gốc...", "openOriginalSubtitleFileTitle": "Mở tệp phụ đề gốc", "openOutputFolder": "Mở thư mục đầu ra", - "openSubtitle": "Mở phụ đề...", "openSubtitleFileTitle": "Mở tệp phụ đề", "openSubtitles": "Mở phụ đề...", "openVideoFile": "Mở tệp video...", @@ -433,11 +471,6 @@ "outlineWidth": "Độ rộng viền chữ", "outputFolder": "Thư mục đầu ra", "outputProperties": "Thuộc tính đầu ra", - "overlap": "Chồng lấp", - "overlapNextX": "Chồng lấp dòng sau ({0:#;##0.###})", - "overlapPreviousLineX": "Chồng lấp dòng trước ({0:#;##0.###})", - "overlapStartAndEnd": "Chồng lấp đầu và cuối", - "overlapX": "Chồng lấp ({0:#;##0.###})", "overwriteExistingFiles": "Ghi đè các tệp hiện có", "overwriteFilesInFolderX": "Ghi đè các tệp trong thư mục: \"{0}\"", "overwriteQuestion": "Ghi đè?", @@ -450,6 +483,7 @@ "percent": "Phần trăm", "pickLayer": "Đặt lớp", "pickOllamaModel": "Chọn mô hình Ollama", + "pickModel": "Chọn mô hình", "llamaCppUseRemoteServer": "Sử dụng máy chủ bên ngoài (URL)", "llamaCppEngineSettings": "Cài đặt công cụ llama.cpp", "llamaCppEngineSettingsSubtitle": "Bản dựng máy chủ llama.cpp cục bộ", @@ -501,7 +535,6 @@ "refresh": "Làm mới", "region": "Vùng", "regularExpression": "Biểu thức chính quy", - "regularExpressionIsNotValid": "Biểu thức chính quy không hợp lệ!", "relativeToCurrentVideoPosition": "Tương đối so với vị trí video hiện tại", "remove": "Xóa", "removeAlignment": "Xóa căn chỉnh", @@ -527,7 +560,7 @@ "reset": "Đặt lại", "resizePanels": "Thay đổi kích thước bảng", "resolution": "Độ phân giải", - "resolutionX": "Độ phân giải: {0}", + "retry": "Thử lại", "reverseRightToLeftStartEnd": "Đảo ngược đầu/cuối RTL", "right": "Phải", "rightToLeft": "Phải sang trái", @@ -567,8 +600,6 @@ "selectedlinesX": "Dòng đã chọn: {0}", "sensitivity": "Độ nhạy", "separator": "Dấu phân cách", - "sessionKey": "Khóa phiên", - "sessionKeyGenerate": "Tạo khóa mới", "setEnd": "Đặt điểm kết thúc", "setEndAndGoToNext": "Đặt điểm kết thúc và chuyển đến dòng tiếp theo", "setEndAddNewAndGoToNew": "Đặt điểm kết thúc, thêm dòng mới và chuyển đến dòng mới", @@ -591,8 +622,9 @@ "shadowColor": "Màu bóng đổ", "shadowWidth": "Độ rộng bóng đổ", "shiftLineBy": "Dịch chuyển dòng đi", + "shotIn": "Cảnh vào", + "shotOut": "Cảnh ra", "shortcut": "Phím tắt", - "shortcutX": "Phím tắt: {0}", "shortcuts": "Phím tắt", "show": "Hiển thị", "showActorColumn": "Hiển thị cột \"Diễn viên\"", @@ -603,17 +635,19 @@ "showStartColumn": "Hiển thị cột \"Bắt đầu\"", "showHideColumn": "Hiển thị cột \"Ẩn\"", "showHistory": "Hiển thị lịch sử", + "clearHistory": "Xóa lịch sử", + "removeFromHistory": "Xóa khỏi lịch sử", "showLayerColumn": "Hiển thị cột \"Lớp\"", "showPreview": "Hiển thị xem trước", "showShotChangesList": "Hiển thị danh sách thay đổi cảnh", + "showShotInColumn": "Hiển thị cột \"Cảnh vào\"", + "showShotOutColumn": "Hiển thị cột \"Cảnh ra\"", "showStyleColumn": "Hiển thị cột \"Kiểu\"", "showTeletext": "Hiển thị cột teletext trong danh sách", "showTimeCodes": "Hiển thị mã thời gian", "showWpmColumn": "Hiển thị cột \"Từ/phút\"", "showPixelWidthColumn": "Hiển thị cột \"Độ rộng điểm ảnh\"", "shrink": "Thu nhỏ", - "singleBox": "Hộp đơn", - "singleLineLengths": "Độ dài dòng đơn:", "singleMode": "Chế độ đơn", "textTotalLength": "Văn bản - tổng độ dài", "textSingleLineMaxLength": "Văn bản - độ dài tối đa mỗi dòng", @@ -662,16 +696,16 @@ "strikeout": "Gạch ngang", "style": "Kiểu", "styleExaggeration": "Cường điệu phong cách", - "styleLanguage": "Kiểu / Ngôn ngữ", "styles": "Kiểu", "subtitleFile": "Tệp phụ đề", + "subtitleFileChangedOutsideX": "Tệp \"{0}\" đã bị thay đổi bên ngoài Subtitle Edit.\n\nTải lại tệp và mất các thay đổi của bạn?", "subtitleFileName": "Tên tệp phụ đề", "subtitleFileSaved": "Đã lưu tệp phụ đề", "subtitleFileSavedToX": "Đã lưu tệp phụ đề vào {0}", "subtitleFiles": "Tệp phụ đề", "subtitleFormats": "Định dạng phụ đề", "subtitleLoadedX": "Đã tải phụ đề: {0}", - "subtitleXOfY": "Phụ đề {0} trên {1}", + "subtitleReloadedChangedOutsideX": "Đã tải lại phụ đề (bị thay đổi bên ngoài Subtitle Edit): {0}", "suffix": "Hậu tố", "suggestions": "Gợi ý", "sync": "Đồng bộ", @@ -683,7 +717,6 @@ "teletextColor": "Màu teletext", "teletextLine": "Dòng teletext", "tenHours": "10 giờ", - "tenMilliseconds": "10 mili giây", "text": "Văn bản", "textColor": "Màu chữ", "textFiles": "Tệp văn bản", @@ -710,9 +743,6 @@ "topRight": "Trên-Phải", "top": "Trên", "totalAdjustmentX": "Tổng điều chỉnh: {0}", - "totalFramesX": "Tổng số khung hình: {0:#;##0.##}", - "totalLengthX": "Tổng độ dài: {0}", - "totalLengthXSplitLine": "Tổng độ dài: {0} (hãy tách dòng!)", "translate": "Dịch", "translatePercentX": "Đang dịch: {0}%", "translateRow": "Dịch hàng", @@ -721,6 +751,7 @@ "type": "Loại", "unbreak": "Gộp dòng văn bản", "unbreakLines": "Gộp các dòng", + "undelete": "Khôi phục đã xóa", "underline": "Gạch chân", "undo": "Hoàn tác", "unknown": "Không xác định", @@ -740,13 +771,11 @@ "usages": "Cách dùng", "use": "Dùng", "useAlways": "Luôn dùng", - "useLargerFontForThisWindow": "Dùng phông chữ lớn hơn cho cửa sổ này", "useOnce": "Dùng một lần", "useOutputFolder": "Dùng thư mục xuất", "useSourceFolder": "Dùng thư mục nguồn", "useSourceResolution": "Dùng độ phân giải nguồn", "userName": "Tên người dùng", - "userNameAlreadyInUse": "Tên người dùng đã được sử dụng", "vertical": "Dọc", "video100MsBack": "Video, lùi 100 mili giây", "video100MsForward": "Video, tiến 100 mili giây", @@ -760,14 +789,25 @@ "videoCustom3ForwardX": "Video, tiến số mili giây tùy chỉnh ({0:#,###,##0}), 3", "videoCustom4BackX": "Video, lùi số mili giây tùy chỉnh ({0:#,###,##0}), 4", "videoCustom4ForwardX": "Video, tiến số mili giây tùy chỉnh ({0:#,###,##0}), 4", - "videoEncodingX": "Mã hóa video: {0}", + "videoCustom1BackAndPauseX": "Video, lùi số mili giây tùy chỉnh ({0:#,###,##0}) và tạm dừng, 1", + "videoCustom1ForwardAndPauseX": "Video, tiến số mili giây tùy chỉnh ({0:#,###,##0}) và tạm dừng, 1", + "videoCustom2BackAndPauseX": "Video, lùi số mili giây tùy chỉnh ({0:#,###,##0}) và tạm dừng, 2", + "videoCustom2ForwardAndPauseX": "Video, tiến số mili giây tùy chỉnh ({0:#,###,##0}) và tạm dừng, 2", + "videoCustom3BackAndPauseX": "Video, lùi số mili giây tùy chỉnh ({0:#,###,##0}) và tạm dừng, 3", + "videoCustom3ForwardAndPauseX": "Video, tiến số mili giây tùy chỉnh ({0:#,###,##0}) và tạm dừng, 3", + "videoCustom4BackAndPauseX": "Video, lùi số mili giây tùy chỉnh ({0:#,###,##0}) và tạm dừng, 4", + "videoCustom4ForwardAndPauseX": "Video, tiến số mili giây tùy chỉnh ({0:#,###,##0}) và tạm dừng, 4", "videoExtension": "Phần mở rộng tệp video", "videoFile": "Tệp video", "videoFileGenerated": "Đã tạo tệp video", "videoFileGeneratedX": "Đã tạo tệp video: \"{0}\"", + "videoFilesGenerated": "Đã tạo tệp video", + "xVideosGenerated": "Đã tạo {0} video", + "xOfYVideosGenerated": "Đã tạo {0}/{1} video", + "savedInX": "Đã lưu trong {0}", + "savedInXFolders": "Đã lưu trong {0} thư mục", "videoFiles": "Tệp video", "videoAndAudioFiles": "Tệp video và âm thanh", - "videoInformation": "Thông tin video", "videoOffset": "Độ lệch video", "videoOneFrameBack": "Video, lùi một khung hình", "videoOneFrameForward": "Video, tiến một khung hình", @@ -778,7 +818,6 @@ "videoPlayer": "Trình phát video", "videoPosition": "Vị trí video", "videoResolution": "Độ phân giải video", - "viewX": "Xem {0}", "visible": "Hiển thị", "voice": "Giọng nói", "volume": "Âm lượng", @@ -787,9 +826,7 @@ "waveformCenterOnVideoPosition": "Căn giữa dạng sóng theo vị trí video", "waveformPasteFromClipboard": "Dán từ khay nhớ tạm", "waveformSpectrogram": "Dạng sóng/quang phổ", - "webServiceUrl": "URL dịch vụ web", "width": "Chiều rộng", - "windowPositionAndSize": "Vị trí và kích thước cửa sổ", "wordsPerMin": "Từ/phút", "pixelWidth": "Độ rộng điểm ảnh", "wpm": "Từ/phút", @@ -803,8 +840,6 @@ "noBookmarksFound": "Không tìm thấy dấu trang nào nữa", "xRequiresAnApiKey": "{0} yêu cầu khóa API", "xRequiresAValidUrl": "{0} yêu cầu một URL hợp lệ (ví dụ: \"http://...\" hoặc \"https://...\")", - "xSeconds": "{0:0.0##} giây", - "xSubtitles": "{0:#,###,##0} phụ đề", "yes": "Có", "zeroBytes": "0 byte", "copyToClipboard": "Sao chép vào khay nhớ tạm", @@ -826,10 +861,8 @@ "playbackSpeed": "Tốc độ phát", "hoursMinutesSecondsMilliseconds": "HH:MM:SS.FFF", "imageFiles": "Tệp hình ảnh", - "openAiCompatibleStt": "STT tương thích OpenAI", "openAiCompatibleSttEndpoint": "URL điểm cuối STT", "openAiCompatibleSttApiKey": "Khóa API", - "openAiCompatibleSttModel": "Mô hình", "openAiCompatibleSttExtraHeaders": "Header bổ sung", "openAiCompatibleSttTimeout": "Thời gian chờ (giây)", "openAiCompatibleSttLanguage": "Gợi ý ngôn ngữ", @@ -839,6 +872,9 @@ "dashScopeSttRegion": "Khu vực", "dashScopeSttEnableWords": "Dấu thời gian theo từng từ", "dashScopeSttRegionKeyHint": "Lưu ý: Khóa API của Alibaba Cloud Model Studio phụ thuộc vào khu vực - hãy đảm bảo khu vực đã chọn khớp với khu vực nơi khóa API được tạo (Trung Quốc so với Quốc tế).", + "googleCloudSttProjectId": "ID dự án (chỉ dành cho Application Default Credentials)", + "googleCloudSttBucketName": "Bucket lưu trữ (trống = tự động)", + "googleCloudSttDynamicBatching": "Xử lý lô động (rẻ hơn khoảng 5 lần, không đảm bảo độ trễ)", "onlineSttApiKeyMissing": "Cần có khóa API. Vui lòng nhập khóa API và thử lại.", "openAiCompatibleSttAutoTranscribeOnAudioSelection": "Tự động chuyển vùng chọn dạng sóng mới thành văn bản qua giọng nói-thành-văn bản", "openAiCompatibleSttStream": "Truyền phản hồi trực tiếp", @@ -848,11 +884,9 @@ "configurationRequired": "Yêu cầu cấu hình", "transcriptionError": "Lỗi phiên âm", "transcriptionComplete": "Phiên âm hoàn tất", - "transcribingWithOpenAi": "Đang phiên âm bằng dịch vụ OpenAI...", "processingResponse": "Đang xử lý phản hồi...", "unauthorizedApiKey": "Không được phép: Khóa API không hợp lệ hoặc không đủ quyền.", "requestTimeout": "Hết thời gian yêu cầu: Máy chủ phản hồi quá lâu.", - "noSegmentsReturned": "Dịch vụ phiên âm không trả về phân đoạn nào.", "openAiCompatibleSttUrlMissing": "Cần có URL điểm cuối STT tương thích OpenAI. Vui lòng nhập URL và thử lại.", "openAiCompatibleSttUrlNotResponding": "Điểm cuối STT tương thích OpenAI không phản hồi:\n{0}\n\nVui lòng kiểm tra URL và đảm bảo máy chủ đang chạy.", "transcriptionFailed": "Phiên âm thất bại", @@ -898,14 +932,15 @@ "multipleReplace": "Thay thế hàng l_oạt...", "fillSelectedLinesWithClipboard": "Điền các dòng đã chọn bằng văn bản trong khay nhớ tạm", "goToLineNumber": "Đi đến số dòn_g...", + "commandPalette": "Bảng _lệnh...", "rightToLeftMode": "Chế độ phả_i-sang-trái", "modifySelectionDotDotDot": "Sửa đổi vùng chọ_n...", "tools": "Công c_ụ", - "toolsSelectedLines": "Công c_ụ (các dòng đã chọn)", "adjustDurations": "Điều chỉnh thời lượn_g...", "applyDurationLimits": "Áp dụng giới hạn thời _lượng...", "batchConvert": "Chuyển đổi hàng l_oạt...", "beautifyTimeCodes": "Làm đẹp mã thời gian...", + "improveTimeCodes": "Cải thiện mã thời gian (căn chỉnh cưỡng bức)...", "bridgeGaps": "Nối các khoản_g trống...", "applyMinGap": "Áp dụng khoảng cách tối thiểu giữa các phụ đề...", "changeCasing": "Đổi _chữ hoa/thường...", @@ -1044,6 +1079,9 @@ "selectCurrentLineWhilePlayingHint": "Chọn phụ đề hiện tại khi đang phát {0}", "videoPosition": "Vị trí video {0}", "videoPositionTextBox": "Ô nhập vị trí video {0}", + "toolbarLineBreakX": "Ngắt dòng {0} (phần còn lại của thanh công cụ tiếp tục ở hàng mới)", + "initialText": "Văn bản ban đầu của dòng đã chọn", + "initialTextHint": "Văn bản của dòng đã chọn như lúc dòng được chọn", "hideWaveformToolbar": "Ẩn thanh công cụ {0}", "resetZoomAndSpeed": "Đặt lại thu phóng & tốc độ phát {0}", "removeBlankLines": "Xóa các dòng trống {0}", @@ -1057,6 +1095,15 @@ "textPlayHint": "Phát phụ đề hiện tại và dừng ở cuối {0}", "textPauseHint": "Tạm dừng phát {0}", "textNextHint": "Phát phụ đề tiếp theo và dừng ở cuối {0}", + "moveSelectedLines": "Di chuyển các dòng đã chọn (nút lùi/tiến)", + "moveSelectedLinesAndFollowing": "Di chuyển các dòng đã chọn và tất cả các dòng sau (nút lùi/tiến)", + "moveAllLines": "Di chuyển tất cả các dòng (nút lùi/tiến)", + "moveSelectedLinesBackHint": "Lùi các dòng đã chọn {0} ms {1}", + "moveSelectedLinesForwardHint": "Tiến các dòng đã chọn {0} ms {1}", + "moveSelectedLinesAndFollowingBackHint": "Lùi các dòng đã chọn và tất cả các dòng sau {0} ms {1}", + "moveSelectedLinesAndFollowingForwardHint": "Tiến các dòng đã chọn và tất cả các dòng sau {0} ms {1}", + "moveAllLinesBackHint": "Lùi tất cả các dòng {0} ms {1}", + "moveAllLinesForwardHint": "Tiến tất cả các dòng {0} ms {1}", "guessStartNoLineSelected": "Đoán điểm bắt đầu: chưa chọn dòng nào", "guessStartTimeCodesLocked": "Đoán điểm bắt đầu: mã thời gian đang bị khóa", "guessStartNoWaveform": "Đoán điểm bắt đầu: không có dạng sóng", @@ -1078,12 +1125,15 @@ "charactersPerSecond": "Ký tự/giây: {0}", "chooseColumn": "Chọn cột", "columnPaste": "Dán cột", + "commandPaletteTitle": "Bảng lệnh", + "commandPaletteSearchPlaceholder": "Gõ để tìm lệnh...", + "commandPaletteNoCommandsFound": "Không có lệnh phù hợp", "createdEmptyTranslation": "Đã tạo bản dịch trống từ phụ đề hiện tại", "deleteText": "Xóa văn bản", "deleteTextAndShiftCellsUp": "Xóa văn bản và dịch các ô lên trên", "endTimeMustBeAfterStartTime": "Thời gian kết thúc phải sau thời gian bắt đầu.", "errorLoad7Zip": "Tệp này có vẻ là tệp nén 7-Zip.\n\nSubtitle Edit không thể mở tệp nén.", - "errorLoadBinaryZeroes": "Rất tiếc, tệp này chỉ chứa toàn số 0 nhị phân!\n\nNếu bạn đã chỉnh sửa tệp này bằng Subtitle Edit, bạn có thể tìm bản sao lưu qua mục menu Tệp -> Khôi phục bản sao lưu tự động...", + "errorLoadBinaryZeroes": "Rất tiếc, tệp này chỉ chứa toàn số 0 nhị phân!\n\nNếu bạn đã chỉnh sửa tệp này bằng Subtitle Edit, bạn có thể tìm bản sao lưu qua mục menu Tệp -> Khôi phục bản sao lưu tự động...", "errorLoadGZip": "Tệp này có vẻ là tệp nén GZip.\n\nSubtitle Edit không thể mở tệp nén.", "errorLoadLargeFile": "Tệp này quá lớn để mở dưới dạng tệp phụ đề.", "errorLoadVideoFilePrompt": "Tệp này có vẻ là tệp video:\n{0}\n\nBạn có thể mở video qua \"Video -> Mở video\" hoặc kéo và thả video vào trình phát video.\n\nBạn có muốn mở nó dưới dạng tệp video không?", @@ -1116,18 +1166,20 @@ "numberOfLinesEvenlyDistributedX": "Đã phân bổ đều {0} dòng", "oneLineCopiedFromOriginal": "Đã sao chép một dòng từ phụ đề gốc", "oneLineCopiedToOriginal": "Đã sao chép một dòng sang phụ đề gốc", + "onlineOnlyVideo": "Video chỉ lưu trực tuyến", + "onlineOnlyVideoXSizeYDownloadAndOpen": "Tệp video \"{0}\" ({1}) chỉ được lưu trữ trực tuyến, ví dụ trong Dropbox hoặc iCloud Drive, và phải được tải xuống trước khi có thể mở.\n\nTải xuống và mở ngay bây giờ?", "oneLineMerged": "Đã gộp một dòng", "oneLineSwitched": "Đã hoán đổi một dòng", "overwriteExistingCells": "Ghi đè các ô hiện có", "overwriteOrShiftCellsDown": "Ghi đè/dịch các ô xuống dưới", "parsingMatroskaFile": "Đang phân tích tệp Matroska...", + "readingDvdSubtitles": "Đang đọc phụ đề DVD...", "pasteFromClipboardDotDotDot": "Dán từ bộ nhớ tạm...", "redoPerformed": "Đã thực hiện làm lại", "redoPerformedXActionLeft": "Đã thực hiện làm lại (thao tác còn lại: {0})", "removedUnicodeControlCharactersX": "Đã xóa ký tự điều khiển Unicode khỏi {0} dòng", "removedXBlankLines": "Đã xóa {0} dòng trống", "replacedXWithYCountZ": "Đã thay thế \"{0}\" bằng \"{1}\" ({2} lần xuất hiện)", - "replacedXWithYInLineZ": "Đã thay thế \"{0}\" bằng \"{1}\" trong dòng {2}", "reversedStartAndEndingsForRightToLeftX": "Đã đảo đầu và cuối cho hướng phải-sang-trái trong {0} dòng", "ruleProfileIsX": "Hồ sơ quy tắc hiện là \"{0}\"", "saveLanguageFile": "Lưu tệp ngôn ngữ", @@ -1135,7 +1187,6 @@ "shiftTextCellsDown": "Dịch các ô văn bản xuống dưới", "singleLineLength": "Độ dài dòng: ", "speedIsNowX": "Tốc độ hiện là \"{0}\"", - "spellCheckResult": "Kiểm tra chính tả hoàn tất. \n\n• Từ đã thay đổi: {0}\n• Từ đã bỏ qua: {1}", "subtitleGridFormattingX": "Định dạng lưới: {0}", "subtitleImportedFromMatroskaFile": "Đã nhập phụ đề từ tệp Matroska", "textDown": "Chuyển văn bản xuống", @@ -1162,13 +1213,14 @@ "trimmedXLines": "Đã cắt gọn {0} dòng phụ đề", "pastedXLinesOverSelectedLines": "Đã dán {0} dòng đè lên các dòng đã chọn", "pastedXOfYLinesOverSelectedLines": "Đã dán {0} trong số {1} dòng đè lên các dòng đã chọn - phần còn lại không vừa với vùng chọn", + "insertedXLinesFromClipboard": "Đã chèn {0} dòng từ clipboard", "openOriginalDifferentNumberOfSubtitlesXY": "Tệp phụ đề gốc không có cùng số lượng phụ đề với tệp phụ đề hiện tại.\n\n• Phụ đề gốc: {0}\n• Phụ đề hiện tại: {1}", - "importXMatchingOriginalLines": "Nhập {0} phụ đề gốc khớp nhau?", "originalTextReadOnly": "Văn bản gốc (chỉ đọc)", "originalTextEditMode": "Văn bản gốc (chế độ chỉnh sửa)", "originalIsReadOnlyNotSaved": "Phụ đề gốc là tài liệu tham chiếu chỉ đọc nên không được lưu", "originalIsEmptyNotSaved": "Phụ đề gốc hoàn toàn không có văn bản nên không được lưu", "originalIsReadOnlyReference": "Phụ đề gốc được mở dưới dạng tham chiếu chỉ đọc", + "closeTranslationQuestionXY": "Đóng bản dịch \"{0}\"?\n\nPhụ đề gốc \"{1}\" sẽ trở thành phụ đề bạn chỉnh sửa. Bản thân tệp bản dịch không bị thay đổi.", "allowEditOfOriginalSubtitle": "Cho phép chỉnh sửa phụ đề gốc", "showAllOriginalLinesX": "Hiển thị tất cả các dòng gốc ({0} dòng không khớp với dòng nào ở đây)", "showAllOriginalLinesHint": "Các dòng không khớp được hiển thị dưới dạng hàng bổ sung, để bạn thấy bản dịch còn thiếu gì.", @@ -1203,6 +1255,7 @@ "fileExportedInFormatXToY": "Đã xuất tệp ở định dạng {0} sang {1}", "fileExportedInFormatXToFileY": "Đã xuất tệp ở định dạng \"{0}\" sang tệp \"{1}\"", "fixedXLines": "Đã sửa {0} dòng", + "toolXChangedYLines": "{0}: đã thay đổi {1} dòng", "transcriptionCompletedWithXLines": "Phiên âm hoàn tất với {0} dòng", "openSubtitleFileX": "Mở tệp phụ đề \"{0}\"?", "replacedXOccurrences": "Đã thay thế {0} lần xuất hiện", @@ -1234,13 +1287,9 @@ "file": { "ebuSaveOptions": { "title": "Tùy chọn lưu EBU", - "generalSubtitleInformation": "Thông tin phụ đề chung", "codePageNumber": "Số trang mã", "diskFormatCode": "Mã định dạng đĩa", "displayStandardCode": "Mã chuẩn hiển thị", - "colorRequiresTeletext": "Màu sắc yêu cầu teletext!", - "alignmentRequiresTeletext": "Căn chỉnh yêu cầu teletext!", - "teletextCharsShouldBe38": "'Số ký tự tối đa mỗi hàng' cho teletext phải là 38!", "characterCodeTable": "Bảng ký tự", "languageCode": "Mã ngôn ngữ", "originalProgramTitle": "Tên chương trình gốc", @@ -1257,7 +1306,6 @@ "maxNumberOfDisplayableRows": "Số hàng tối đa", "diskSequenceNumber": "Số thứ tự đĩa", "totalNumberOfDisks": "Tổng số đĩa", - "import": "Nhập...", "textAndTimingInformation": "Thông tin văn bản và thời gian", "justificationCode": "Mã căn lề", "verticalPosition": "Vị trí dọc", @@ -1274,11 +1322,6 @@ "errors": "Lỗi", "errorsX": "Lỗi: {0}", "maxLengthError": "Dòng {0} vượt quá độ dài tối đa ({1}) là {2}: {3}", - "textUnchangedPresentation": "Trình bày không thay đổi", - "textLeftJustifiedText": "Văn bản căn trái", - "textCenteredText": "Văn bản căn giữa", - "textRightJustifiedText": "Văn bản căn phải", - "useBoxForOneNewLine": "Chọn 'Dùng hộp bao quanh văn bản' cho chỉ một dòng mới", "maxLengthErrorTeletextColored": "Dòng {0}-{1}: số ký tự tối đa cho văn bản màu chiều cao đôi phải là 36 (không phải {2})", "maxLengthErrorTeletextWhite": "Dòng {0}-{1}: số ký tự tối đa cho văn bản trắng chiều cao đôi phải là 37 (không phải {2})", "maxLengthErrorTeletextSingleHeight": "Dòng {0}: số ký tự tối đa cho văn bản trắng chiều cao đơn phải là 38 (không phải {1})", @@ -1303,22 +1346,29 @@ "formattingDotDotDot": "Định dạng...", "imageBasedSubtitleForEditDotDotDot": "Phụ đề dạng hình ảnh để chỉnh sửa...", "imageBasedSubtitleForOcrDotDotDot": "Phụ đề dạng hình ảnh cho OCR...", + "dvdSubtitlesDotDotDot": "Phụ đề từ DVD (IFO/VOB)...", + "titleImportDvd": "Nhập phụ đề từ DVD", + "dvdIfoFile": "Tệp IFO", + "dvdVobFiles": "Tệp VOB", + "dvdVideoStandard": "Chuẩn video", + "dvdStartRipping": "Bắt đầu trích xuất", + "dvdRippingAborted": "Đã hủy trích xuất", + "dvdOpenIfoFile": "Mở tệp DVD IFO", + "dvdAddVobFiles": "Thêm tệp VOB", + "dvdIfoFiles": "Tệp DVD IFO", + "dvdVobFileType": "Tệp DVD VOB", + "dvdDropHint": "Mở tệp IFO (VIDEO_TS\\VTS_01_0.IFO) hoặc thêm tệp VOB - hoặc thả chúng vào đây", + "dvdNotAnIfoFileX": "{0} không phải là tệp DVD IFO", + "dvdMenuIfoNoTitleSetsX": "Không tìm thấy title set (VTS_xx_0.IFO) nào cạnh {0}", + "dvdEncryptedXOfY": "{0} trong số {1} gói phụ đề vẫn bị mã hóa CSS - các tệp VOB này đã được sao chép mà không giải mã, nên một số hình ảnh phụ đề sẽ bị lỗi.\n\nHãy giải mã DVD bằng công cụ trích xuất DVD trước để có kết quả sạch.\n\nVẫn tiếp tục?", "splitTextAt": "Tách văn bản tại", "blankLines": "Dòng trống", "oneLineIsOneSubtitle": "Một dòng là một phụ đề", "twoLinesAreOneSubtitle": "Hai dòng là một phụ đề", "importFilesDotDotDot": "Nhập tệp...", "multipleFiles": "Nhập từ nhiều tệp văn bản (một tệp là một phụ đề)", - "importOptions": "Tùy chọn nhập", - "autoSplitText": "Tự động tách văn bản", - "lineMode": "Chế độ dòng", "maxLineLength": "Độ dài dòng tối đa", - "maxLinesPerSubtitle": "Số dòng tối đa mỗi phụ đề", - "minGapBetweenSubtitles": "Khoảng cách tối thiểu giữa các phụ đề", "mergeShortLines": "Gộp các dòng ngắn", - "removeLinesWithoutLetters": "Xóa các dòng không có chữ cái", - "splitAtEndCharsSetting": "Tách tại ký tự kết thúc", - "takeTimeFromCurrentFile": "Lấy thời gian từ tệp hiện tại", "fixed": "Cố định", "numberOfSubtitlesX": "Số lượng phụ đề: {0}", "numberOfSubtitlesXForcedY": "Số lượng phụ đề: {0} ({1} bắt buộc)", @@ -1330,14 +1380,18 @@ "forcedAlignerProgress": "Đang căn chỉnh... khung {0}/{1}, {2}/{3} dòng", "forcedAlignerSetupTitle": "Căn chỉnh mã thời gian bằng bộ căn chỉnh cưỡng bức", "forcedAlignerSetupIntro": "Bộ căn chỉnh cưỡng bức đối chiếu văn bản phụ đề bạn đã có với âm thanh mà không cần phiên âm trước. Video dài được căn chỉnh theo từng đoạn, nên độ dài nào cũng được.", + "forcedAlignerEndsFromSpeech": "Đặt thời gian kết thúc từ giọng nói đã tách riêng (chậm)", + "forcedAlignerEndsFromSpeechHint": "Bộ căn chỉnh cưỡng bức tìm nơi một dòng bắt đầu, không phải nơi nó kết thúc, nên thời gian kết thúc thường dựa trên thời gian đọc. Khi bật tùy chọn này, nhạc và hiệu ứng âm thanh được loại bỏ khỏi âm thanh trước và mỗi dòng kết thúc khi giọng nói của nó lặng đi. Mất khoảng thời gian bằng chính video nếu có GPU - và lâu hơn nhiều lần nếu không có.", + "forcedAlignerIsolatingSpeech": "Đang tách riêng giọng nói... {0}", + "forcedAlignerIsolatingSpeechFailed": "Không thể tách riêng giọng nói - thời gian kết thúc đã được đặt theo thời gian đọc.", "forcedAlignerModel": "Mô hình căn chỉnh", - "forcedAlignerDownloadEngine": "Tải xuống / cập nhật công cụ..." + "forcedAlignerDownloadEngine": "Tải xuống / cập nhật công cụ...", + "forcedAlignerEstimatedXOfY": "{0} trong số {1} dòng không thể căn chỉnh và đã được đặt theo thời gian đọc - mã thời gian của chúng chỉ là ước tính. Kịch bản có lẽ dài hơn những gì được nói trong video." }, "export": { "exportImagesProfiles": "Hồ sơ xuất hình ảnh", "leftRightMargin": "Lề trái/phải", "topBottomMargin": "Lề trên/dưới", - "titleExportBluRaySup": "Xuất Blu-ray (sup)", "lineSpacingPercent": "Giãn dòng %", "paddingLeftRight": "Đệm trái/phải", "paddingTopBottom": "Đệm trên/dưới", @@ -1378,10 +1432,21 @@ "titleExportDCinemaInteropPng": "D-Cinema interop/png", "titleExportDCinemaSmpte2014Png": "D-Cinema SMPTE 2014/png", "imageBasedSubtitleSaved": "Đã lưu phụ đề dạng hình ảnh", - "titleExportBdnXml": "Xuất BDN/xml", "titleExportWebVttThumbnails": "Xuất WebVTT (hình thu nhỏ)", "fullFrameImage": "Hình ảnh toàn khung", "fullFrameImageHint": "Tạo mỗi hình ảnh có kích thước bằng khung hình video, với phụ đề nằm đúng vị trí", + "stereo3D": "3D", + "stereo3DHint": "Cho video 3D: vẽ phụ đề một lần trong mỗi nửa khung hình dành cho từng mắt", + "halfSideBySide": "Nửa cạnh nhau (side-by-side)", + "halfTopBottom": "Nửa trên/dưới", + "depth3D": "Độ sâu", + "depth3DHint": "Mức phụ đề nổi ra khỏi màn hình - dương đưa nó lại gần hơn, âm đẩy nó ra xa", + "plane3D": "3D-Plane", + "plane3DHint": "Gán cho mỗi phụ đề độ sâu mà đĩa Blu-ray 3D lưu cho nó, từ tệp 3D-Plane (.ofs) tạo bởi BD3D2MK3D hoặc OFSExtractor. Độ sâu được dùng ở những chỗ 3D-Plane không có", + "openPlane3DTitle": "Mở tệp 3D-Plane", + "unableToLoadPlane3DX": "Không thể tải 3D-Plane: {0}", + "plane3DXDepthYToZ": "{0} (độ sâu {1} đến {2})", + "plane3DXNoDepth": "{0} (không có giá trị độ sâu)", "textEffect": "Hiệu ứng văn bản", "textEffectSettingsTitle": "Cài đặt hiệu ứng văn bản", "textEffectPreset": "Mẫu dựng sẵn", @@ -1413,13 +1478,10 @@ "statistics": { "title": "Thống kê", "titleWithFileName": "Thống kê - {0}", - "generalStatistics": "Thống kê chung", - "mostUsed": "Dùng nhiều nhất...", "mostUsedLines": "Các dòng dùng nhiều nhất", "mostUsedWords": "Các từ dùng nhiều nhất", "nothingFound": "Không tìm thấy gì", "numberOfLinesX": "Số dòng phụ đề: {0:#,##0}", - "numberOfFilesX": "Số tệp phụ đề: {0:#,##0}", "lengthInFormatXinCharactersY": "Số ký tự theo {0}: {1:#,###,##0}", "numberOfCharactersInTextOnly": "Số ký tự chỉ trong văn bản: {0:#,###,##0}", "totalDuration": "Tổng thời lượng của tất cả phụ đề: {0:#,##0}", @@ -1460,7 +1522,6 @@ "gapMaximum": "Khoảng cách - tối đa: {0:#,##0} ms", "gapAverage": "Khoảng cách - trung bình: {0:#,##0.##} ms", "gapExceedingMinimum": "Khoảng cách - dưới tối thiểu ({0:#,##0} ms): {1} ({2:0.00}%)", - "export": "Xuất...", "subtitles": "Phụ đề", "words": "Từ", "totalDurationShort": "Tổng thời lượng", @@ -1490,7 +1551,22 @@ "restoreAutoBackupFile": "Khôi phục tệp sao lưu tự động", "restoreXFromY": "Bạn có muốn khôi phục \"{0}\" từ {1} không?", "deleteAllSubtitleBackups": "Bạn có muốn xóa tất cả các tệp sao lưu phụ đề không?", - "deleteAll": "Xóa tất cả" + "deleteAll": "Xóa tất cả", + "subtitles": "Phụ đề", + "settingsBackupInfo": "Settings.json được sao lưu khi Subtitle Edit khởi động, tối đa một lần mỗi {0} ngày và chỉ khi cài đặt đã thay đổi. {1} bản sao lưu mới nhất được giữ lại.", + "settingsBackupInfoEveryStart": "Settings.json được sao lưu mỗi lần Subtitle Edit khởi động, nếu cài đặt đã thay đổi. {0} bản sao lưu mới nhất được giữ lại.", + "settingsBackupOff": "Sao lưu cài đặt tự động đang tắt (Tùy chọn → Cài đặt → Tệp).", + "lastSettingsBackupX": "Lần sao lưu cuối: {0}", + "noSettingsBackupsYet": "Chưa có bản sao lưu cài đặt nào", + "openSettingsBackupFolder": "Mở thư mục sao lưu cài đặt", + "backUpSettingsNow": "Sao lưu ngay", + "settingsBackedUp": "Cài đặt hiện tại đã được sao lưu.", + "restoreSettings": "Khôi phục cài đặt", + "restoreSettingsFromX": "Bạn có muốn thay thế cài đặt hiện tại bằng bản sao lưu từ {0} không?\n\nCài đặt hiện tại của bạn sẽ được sao lưu trước. Một số thay đổi chỉ có hiệu lực sau khi khởi động lại Subtitle Edit.", + "settingsRestored": "Cài đặt đã được khôi phục. Vui lòng khởi động lại Subtitle Edit để mọi thay đổi có hiệu lực.", + "settingsRestoreFailed": "Không thể khôi phục cài đặt: {0}", + "settingsBackupNotValid": "bản sao lưu không phải là tệp cài đặt hợp lệ, nên cài đặt hiện tại của bạn được giữ nguyên", + "deleteAllSettingsBackups": "Bạn có muốn xóa tất cả các tệp sao lưu cài đặt không?" }, "propertiesDCinema": { "title": "Thuộc tính D-Cinema SMPTE", @@ -1504,22 +1580,16 @@ "editRate": "Tốc độ chỉnh sửa", "timeCodeRate": "Tốc độ mã thời gian", "startTime": "Thời gian bắt đầu", - "font": "Phông chữ", "fontId": "ID phông chữ", "fontUri": "URI phông chữ", - "generate": "Tạo", - "fontColor": "Màu phông chữ", "chooseColor": "Chọn màu", "fontEffect": "Hiệu ứng phông chữ", "effectColor": "Màu hiệu ứng", - "fontSize": "Cỡ phông chữ", "topBottomMargin": "Lề trên/dưới", "fadeUpTime": "Thời gian hiện dần", "fadeDownTime": "Thời gian mờ dần", - "frames": "Khung hình", "zPosition": "Vị trí Z", - "zPositionHelp": "Số dương đẩy văn bản ra xa, số âm đưa văn bản lại gần, nếu vị trí Z bằng không thì là 2D", - "export": "Xuất..." + "zPositionHelp": "Số dương đẩy văn bản ra xa, số âm đưa văn bản lại gần, nếu vị trí Z bằng không thì là 2D" }, "webVtt": { "setStylesForSelectedLinesTitle": "Đặt kiểu WebVTT cho các dòng đã chọn", @@ -1552,20 +1622,66 @@ "compareOnlyInOneFile": "Chỉ có trong một tệp", "compareTextOrTimeDifference": "Khác biệt văn bản/thời gian", "compareNumberDifference": "Khác biệt số thứ tự", - "ignoreLineBreaks": "Bỏ qua ngắt dòng", "ignoreWhitespace": "Bỏ qua khoảng trắng", "ignoreWhitespaceHint": "Các dòng chỉ khác nhau ở khoảng trắng, tab hoặc ngắt dòng thì không tính là khác nhau", "ignoreFormatting": "Bỏ qua định dạng", - "onlyLookForDifferencesInText": "Chỉ tìm khác biệt trong văn bản", - "cannotCompareWithImageBasedSubtitles": "Không thể so sánh với phụ đề dạng hình ảnh", - "statisticsTitle": "Thống kê", "ignoreFormattingHint": "Các dòng chỉ khác nhau ở thẻ định dạng, như hoặc {\\an8}, thì không tính là khác nhau", "showOnlyDifferencesInText": "Chỉ các khác biệt trong văn bản", + "ignoreNumbering": "Bỏ qua đánh số", + "ignoreNumberingHint": "Các dòng chỉ khác nhau ở số thứ tự không được tính là khác nhau", + "ignoreTimeDifferenceMs": "Dung sai thời gian (ms)", + "ignoreTimeDifferenceMsHint": "Thời gian bắt đầu và kết thúc chênh lệch bằng hoặc ít hơn số mili giây này không được tính là khác nhau", + "compareDifferences": "Khác biệt", + "compareTextDifferences": "Khác biệt văn bản", + "compareCurrent": "Hiện tại", + "compareReference": "Tham chiếu", + "compareEditable": "Có thể chỉnh sửa", + "compareEditableHint": "Các thay đổi thực hiện ở đây sẽ được đưa về phụ đề khi bạn nhấn Áp dụng", + "compareReadOnly": "Chỉ đọc", + "compareTakeFromReference": "Lấy văn bản và thời gian từ tham chiếu", + "compareInsertFromReference": "Chèn dòng này vào phụ đề hiện tại", + "compareDeleteFromCurrent": "Xóa dòng này khỏi phụ đề hiện tại", + "compareTakeText": "Lấy văn bản", + "compareTakeTiming": "Lấy thời gian", + "compareEditLine": "Chỉnh sửa dòng", + "compareEditHint": "Ctrl+Enter để lưu, Esc để hủy", + "compareEdited": "Đã chỉnh sửa", + "compareOnePendingChange": "1 thay đổi đang chờ", + "compareXPendingChanges": "{0} thay đổi đang chờ", + "compareDiscardXChanges": "Hủy bỏ {0} thay đổi đã thực hiện trong So sánh?", + "compareXChangesApplied": "So sánh: đã áp dụng {0} thay đổi", + "compareChangeTextX": "#{0} văn bản từ tham chiếu", + "compareChangeTimingX": "#{0} thời gian từ tham chiếu", + "compareChangeTextAndTimingX": "#{0} văn bản và thời gian từ tham chiếu", + "compareChangeEditedX": "#{0} đã chỉnh sửa", + "compareChangeInsertedX": "#{0} đã chèn", + "compareChangeDeletedX": "#{0} đã xóa", + "compareSyncPoint": "Điểm đồng bộ", + "compareSyncPointHint": "Điểm đồng bộ - hai dòng này luôn được hiển thị thành một cặp, và các dòng phía trên và phía dưới được căn hàng riêng", + "compareSyncPickCurrent": "Điểm đồng bộ: dùng dòng hiện tại này", + "compareSyncPickReference": "Điểm đồng bộ: dùng dòng tham chiếu này", + "compareSyncRemove": "Xóa điểm đồng bộ", + "compareClearXSyncPoints": "Xóa các điểm đồng bộ ({0})", + "compareSyncCurrentPickedX": "Đã chọn dòng hiện tại #{0} làm điểm đồng bộ - chọn dòng tham chiếu tương ứng và nhấn Đồng bộ", + "compareSyncReferencePickedX": "Đã chọn dòng tham chiếu #{0} làm điểm đồng bộ - chọn dòng hiện tại tương ứng và nhấn Đồng bộ", + "compareSyncWithCurrentX": "Đồng bộ với dòng hiện tại #{0}", + "compareSyncWithReferenceX": "Đồng bộ với dòng tham chiếu #{0}", + "compareSyncApply": "Đồng bộ", + "compareSyncPointSetXY": "Đã đặt điểm đồng bộ: dòng hiện tại #{0} và dòng tham chiếu #{1} giờ được hiển thị thành một cặp", + "compareSyncAlreadyPairedXY": "Dòng hiện tại #{0} và dòng tham chiếu #{1} đã được hiển thị thành một cặp với cùng thời điểm bắt đầu - không có gì để đồng bộ", + "compareSyncPointShiftedXYZW": "Đã đặt điểm đồng bộ: dòng hiện tại #{0}-#{1} được dịch {2} để bắt đầu cùng dòng tham chiếu #{3}", + "compareChangeSyncShiftXYZ": "#{0}-#{1} được dịch {2} (điểm đồng bộ)", + "compareTimingDeltaHint": "Tham chiếu bắt đầu và kết thúc muộn hơn (+) hoặc sớm hơn (−) bao nhiêu so với dòng hiện tại", "loadXFromFile": "Tải \"{0}\" từ tệp", + "compareLoadSavedFile": "Tải tệp đã lưu", "saveCompareHtmlTitle": "Lưu tệp HTML so sánh", "pickMatroskaTrackX": "Chọn bản Matroska - {0}", "pickTransportStreamTrackX": "Chọn rãnh transport stream - {0}", + "chapters": "Chương", + "dvdVobFilesMissingX": "Thiếu tệp VOB (tìm thấy {0}%)", "pickMp4TrackX": "Chọn rãnh MP4 - {0}", + "pickMxfTrackX": "Chọn rãnh MXF - {0}", + "pickMpegTrackX": "Chọn rãnh MPEG - {0}", "rosettaProperties": "Thuộc tính Timed Text Rosetta IMSC", "rosettaFontSize": "Cỡ phông chữ (chiều cao hàng)", "propertyTimeBase": "Cơ sở thời gian", @@ -1575,7 +1691,6 @@ "propertyDefaultRegion": "Vùng mặc định", "propertyStyleAttributeName": "Tên thuộc tính kiểu", "propertyTimeCodeFormat": "Định dạng mã thời gian", - "propertyFileExtension": "Phần mở rộng tệp", "propertyTopOrigin": "Gốc phía trên", "propertyTopExtent": "Phạm vi phía trên", "propertyBottomOrigin": "Gốc phía dưới", @@ -1625,7 +1740,6 @@ "selectionIntersect": "Giao với vùng chọn" }, "multipleReplace": { - "title": "Thay thế hàng loạt", "editRule": "Chỉnh sửa quy tắc", "newRule": "Quy tắc mới", "editCategory": "Chỉnh sửa danh mục", @@ -1642,24 +1756,23 @@ "findWhat": "Tìm gì", "descriptionOptional": "Mô tả (tùy chọn)", "invalidRegularExpressionX": "Biểu thức chính quy không hợp lệ: {0}", - "regularExpressionTooSlowX": "Biểu thức chính quy đã dừng sau {0} giây - quy tắc bị bỏ qua, hãy thử mẫu đơn giản hơn" + "regularExpressionTooSlowX": "Biểu thức chính quy đã dừng sau {0} giây - quy tắc bị bỏ qua, hãy thử mẫu đơn giản hơn", + "moveToCategory": "Chuyển sang danh mục" }, "find": { "searchTextWatermark": "Tìm kiếm văn bản...", "wholeWord": "Cả từ", - "caseSensitive": "Phân biệt chữ hoa/thường", - "caseInsensitive": "Không phân biệt chữ hoa/thường", "findPrevious": "Tìm _trước", "findNext": "_Tìm tiếp", "replaceAndFindNext": "_Thay thế & tìm tiếp", "replaceAll": "Thay thế tất _cả", - "replaceTitle": "Thay thế", - "replaceWith": "Thay thế bằng", "replaceTextWatermark": "Thay thế bằng...", "replaceIn": "Thay thế/tìm trong", "replaceInTextAndOriginal": "Văn bản và văn bản gốc", "replaceInTextOnly": "Chỉ văn bản", - "replaceInOriginalOnly": "Chỉ văn bản gốc" + "replaceInOriginalOnly": "Chỉ văn bản gốc", + "replacedOneOccurrence": "Đã thay thế một lần xuất hiện", + "replacedXOccurrences": "Đã thay thế {0} lần xuất hiện" }, "regularExpressionContextMenu": { "wordBoundary": "Ranh giới từ (\\b)", @@ -1687,6 +1800,7 @@ "xLinesYSubtitles": "{0} dòng, {1} phụ đề", "xLinesYSubtitlesZErrors": "{0} dòng, {1} phụ đề, {2} lỗi", "couldNotParseAsX": "Không thể phân tích dưới dạng {0}", + "readAsXUseAsY": "Không thể đọc nguồn dưới dạng {1}, nhưng có thể đọc dưới dạng {0}.\nDùng các dòng này và tiếp tục lưu dưới dạng {1}?", "selectedXCharactersYLines": "Đã chọn: {0} ký tự trong {1} dòng", "replacedXOccurrences": "Đã thay thế {0} lần xuất hiện", "invalidRegularExpression": "Biểu thức chính quy không hợp lệ", @@ -1701,7 +1815,6 @@ "aiReview": { "title": "Duyệt bằng AI", "review": "Duyệt", - "stop": "Dừng", "editPrompt": "Chỉnh sửa lời nhắc...", "editPromptTitle": "Chỉnh sửa lời nhắc duyệt", "promptInfo": "Hướng dẫn gửi đến mô hình - {language} được thay bằng ngôn ngữ của phụ đề.", @@ -1712,7 +1825,6 @@ "reviewingLineXOfY": "Đang duyệt dòng {0} trên {1}...", "reviewDone": "Duyệt xong - {0} đề xuất trong {1} dòng", "noIssuesFound": "Không tìm thấy vấn đề nào", - "categoryAll": "Tất cả", "categorySpelling": "Chính tả", "categoryGrammar": "Ngữ pháp", "categoryPunctuation": "Dấu câu", @@ -1724,8 +1836,23 @@ "largeChangeWarning": "Thay đổi lớn - có vẻ như viết lại, hãy xem xét cẩn thận", "mismatchWarning": "Không giống bản gốc - có thể thuộc về một dòng khác", "engineError": "Không thể kết nối đến công cụ AI: {0}", - "setupHint": "Vui lòng chọn công cụ và mô hình trong Công cụ -> Duyệt bằng AI trước.", - "playCurrentLineHint": "Phát dòng đã chọn trong trình phát video và tạm dừng ở cuối dòng (cũng có thể nhấp đúp vào một dòng)" + "playCurrentLineHint": "Phát dòng đã chọn trong trình phát video và tạm dừng ở cuối dòng (cũng có thể nhấp đúp vào một dòng)", + "editAfterHint": "Nhấn vào văn bản của hàng đã chọn để chỉnh sửa bản sửa trước khi áp dụng (Enter để lưu, Escape để hủy)", + "template": "Mẫu", + "templatePlaceholder": "Chọn một mẫu để thay thế lời nhắc", + "templateStandard": "Hiệu đính tiêu chuẩn", + "templateSpeechToText": "Dọn dẹp kết quả chuyển giọng nói thành văn bản", + "templateMachineTranslation": "Sửa bản dịch máy", + "templateSdh": "SDH / người khiếm thính", + "referenceContext": "Ngữ cảnh tham chiếu", + "referenceContextInfo": "Tùy chọn. Tên, nhân vật, bảng thuật ngữ, tóm tắt hoặc ghi chú văn phong - mô hình coi đây là căn cứ chuẩn cho tên và thuật ngữ. Được gửi kèm mỗi lô.", + "referenceContextPlaceholder": "Tên: Kaito, dì Mei, Tiến sĩ Hollis\nThuật ngữ: Shinkansen, lõi warp\nTóm tắt: Kaito đến Tokyo để tìm người cha mất tích.", + "generateContext": "Tạo bằng AI", + "generateContextHint": "Để công cụ AI đã chọn đọc phụ đề và soạn thảo tên, thuật ngữ và tóm tắt - hãy kiểm tra kết quả trước khi dùng", + "generatingContextPartXOfY": "Đang đọc phần {0}/{1}...", + "generatingContextSynopsis": "Đang viết tóm tắt...", + "replaceContextQuestion": "Thay thế ngữ cảnh tham chiếu hiện tại?", + "noContextGenerated": "Công cụ AI không trả về thông tin tham chiếu nào dùng được." }, "aiAssistant": { "title": "Trợ lý AI", @@ -1743,22 +1870,14 @@ "showReasoning": "Hiển thị lập luận của mô hình" }, "fixCommonErrors": { - "title": "Sửa lỗi thường gặp", - "step1": "Bước 1/2 - Chọn lỗi cần sửa", - "whatToFix": "Nội dung cần sửa", - "example": "Ví dụ", - "selectAll": "Chọn tất cả", - "inverseSelection": "Đảo vùng chọn", "back": "< &Quay lại", "next": "&Tiếp >", - "step2": "Bước 2/2 - Xác nhận các sửa lỗi", "fixes": "Sửa lỗi", "ruleDetailsDotDotDot": "Chi tiết quy tắc...", "showOnlyThisRule": "Chỉ hiển thị các sửa lỗi của quy tắc này", "appliedRulesForLineX": "Quy tắc đã áp dụng cho dòng {0}", "ruleX": "Quy tắc: {0}", "log": "Nhật ký", - "function": "Chức năng", "removedEmptyLine": "Xóa dòng trống", "removedEmptyLineAtTop": "Xóa dòng trống ở đầu", "removedEmptyLineAtBottom": "Xóa dòng trống ở cuối", @@ -1779,13 +1898,13 @@ "removeLineBreaksPixelWidth": "Gộp phụ đề có thể vừa một dòng (độ rộng pixel)", "fixUppercaseIInsideLowercaseWords": "Sửa chữ 'i' hoa trong từ viết thường (lỗi OCR)", "fixDoubleApostrophes": "Sửa hai dấu nháy đơn ('') thành một dấu nháy kép (\")", + "fixMisreadQuotes": "Sửa dấu nháy đơn bị đọc nhầm thành dấu nháy kép (OCR, tiếng Anh)", "addPeriods": "Thêm dấu chấm sau dòng khi dòng kế tiếp bắt đầu bằng chữ hoa", "startWithUppercaseLetterAfterParagraph": "Bắt đầu bằng chữ hoa sau đoạn", "startWithUppercaseLetterAfterPeriodInsideParagraph": "Bắt đầu bằng chữ hoa sau dấu chấm trong đoạn", "startWithUppercaseLetterAfterColon": "Bắt đầu bằng chữ hoa sau dấu hai chấm/chấm phẩy", "fixLowercaseIToUppercaseI": "Sửa chữ 'i' thường đứng riêng thành 'I' (tiếng Anh)", "fixCommonOcrErrors": "Sửa lỗi OCR thường gặp (dùng danh sách thay thế OCR)", - "commonOcrErrorsFixed": "Lỗi OCR thường gặp đã sửa (dùng tệp OcrReplaceList): {0}", "removeSpaceBetweenNumber": "Xóa khoảng trắng giữa các số", "breakDialogsOnOneLine": "Tách hội thoại trên một dòng", "removeDialogFirstInNonDialogs": "Xóa gạch đầu dòng ở dòng đầu cho câu không phải hội thoại", @@ -1802,18 +1921,17 @@ "fixCommasExample": ",, -> ,", "removeLineBreaksExample": "Foo
bar! -> Foo bar!", "fixDoubleApostrophesExample": "''Has double single quotes'' -> \"Has single double quote\"", + "fixMisreadQuotesExample": "\"Hello' -> \"Hello\"", "addPeriodsExample": "Hello world -> Hello world.", "startWithUppercaseLetterAfterParagraphExample": "p1: Foobar! || p2: foobar! -> p1: Foobar! || p2: Foobar!", "startWithUppercaseLetterAfterPeriodInsideParagraphExample": "Hello there! how are you? -> Hello there! How are you?", "startWithUppercaseLetterAfterColonExample": "Speaker: hello world! -> Speaker: Hello world!", "removeHyphensSingleLineExample": "- Foobar. -> Foobar.", "fix3PlusLinesExample": "Foo
bar
baz! -> Foo bar baz!", - "xMissingQuotesAdded": "Số dấu nháy kép bị thiếu đã thêm: {0}", "fix3PlusLine": "Sửa phụ đề có hơn hai dòng", "fix3PlusLines": "Sửa các phụ đề có hơn hai dòng", "analysing": "Đang phân tích...", "nothingToFix": "Không có gì cần sửa :)", - "fixesFoundX": "Số sửa lỗi tìm thấy: {0}", "xFixesApplied": "Số sửa lỗi đã áp dụng: {0}", "xFixesYSelected": "{0} sửa lỗi - {1} đã chọn", "nothingFixableBut": "Không thể tự động sửa gì. Phụ đề vẫn có lỗi - xem nhật ký để biết chi tiết", @@ -1822,7 +1940,6 @@ "fixFirstLetterToUppercaseAfterParagraph": "Sửa chữ đầu thành chữ hoa sau đoạn", "mergeShortLine": "Gộp dòng ngắn (một câu)", "mergeShortLineAll": "Gộp dòng ngắn (tất cả trừ hội thoại)", - "unbreakShortLinePixelWidth": "Gộp dòng ngắn (độ rộng pixel)", "breakLongLine": "Ngắt dòng dài", "fixLongDisplayTime": "Sửa thời gian hiển thị quá dài", "fixInvalidItalicTag": "Sửa thẻ in nghiêng không hợp lệ", @@ -1845,7 +1962,6 @@ "fixUppercaseIInsideLowercaseWord": "Sửa chữ 'i' hoa trong từ viết thường", "fixMissingPeriodAtEndOfLine": "Thêm dấu chấm bị thiếu ở cuối dòng", "refreshFixes": "Làm mới các sửa lỗi khả dụng", - "applyFixes": "Áp dụng các sửa lỗi đã chọn & đóng", "autoBreak": "Ngắt dòng tự &động", "unbreak": "&Gộp dòng", "fixDoubleDash": "Sửa '--' -> '...'", @@ -1864,8 +1980,6 @@ "fixSpaceBetweenNumbersExample": "1 100 -> 1100", "fixDialogsOneLineExample": "Hi John! - Hi Ida! -> Hi John!
- Hi Ida!", "removeDialogFirstInNonDialogsExample": "- How are you? -> How are you?", - "selectDefault": "Chọn mặc định", - "setDefault": "Đặt các sửa lỗi hiện tại làm mặc định", "fixContinuationStyleX": "Sửa kiểu câu nối tiếp: {0}", "fixUnnecessaryLeadingDots": "Xóa các dấu chấm thừa ở đầu", "fixCommonErrorsProfiles": "Hồ sơ sửa lỗi thường gặp", @@ -1873,7 +1987,6 @@ "searchRulesDotDotDot": "Tìm quy tắc...", "goToApplyFixes": "Đến bước áp dụng sửa lỗi", "backToFixList": "Quay lại danh sách sửa lỗi", - "applyFixesAndClose": "Áp dụng sửa lỗi & đóng", "fixCommonOcrErrorsStep2": "Sửa lỗi thường gặp, bước 2 (áp dụng sửa lỗi)", "fixCommonOcrErrorsStep2FixesFoundX": "Sửa lỗi thường gặp, bước 2 - Số sửa lỗi tìm thấy: {0}", "action": "Hành động", @@ -1886,18 +1999,11 @@ "adjustDurations": { "title": "Điều chỉnh thời lượng", "adjustVia": "Điều chỉnh theo", - "seconds": "Giây", - "percent": "Phần trăm", "recalculate": "Tính lại", "addSeconds": "Thêm giây", - "setAsPercent": "Đặt theo phần trăm của thời lượng", "note": "Lưu ý: Thời gian hiển thị sẽ không chồng lấn thời gian bắt đầu của văn bản kế tiếp", "fixed": "Cố định", - "milliseconds": "Mili giây", "extendOnly": "Chỉ kéo dài", - "enforceDurationLimits": "Bắt buộc thời lượng tối thiểu và tối đa", - "checkShotChanges": "Không kéo dài qua điểm chuyển cảnh", - "batchCheckShotChanges": "Tôn trọng điểm chuyển cảnh (nếu có)", "recalculateRequiresOcrNote": "Không thể tính lại — một hoặc nhiều phụ đề không có văn bản OCR. Hãy chạy OCR trước." }, "applyDurationLimits": { @@ -1905,6 +2011,8 @@ "fixMinDurationMs": "Sửa thời lượng tối thiểu (ms)", "doNotGoPastShotChange": "Không vượt qua điểm chuyển cảnh", "fixMaxDurationMs": "Sửa thời lượng tối đa (ms)", + "fixMinDurationFrames": "Sửa thời lượng tối thiểu (khung hình)", + "fixMaxDurationFrames": "Sửa thời lượng tối đa (khung hình)", "minimumDurationMilliseconds": "Thời lượng tối thiểu (mili giây):", "maximumDurationMilliseconds": "Thời lượng tối đa (mili giây):", "maxDurationShouldBeHigherThanMinDuration": "Thời lượng tối đa phải lớn hơn thời lượng tối thiểu", @@ -1924,12 +2032,8 @@ }, "beautifyTimeCodes": { "title": "Làm đẹp mã thời gian", - "beautifySettings": "Cài đặt làm đẹp", "snapToFrames": "Bám theo khung hình", - "frameGap": "Khoảng cách khung hình", "minDuration": "Thời lượng tối thiểu (ms)", - "shotChangeThreshold": "Ngưỡng chuyển cảnh (ms)", - "shotChangeOffset": "Độ lệch chuyển cảnh (khung hình)", "original": "Gốc", "beautified": "Đã làm đẹp", "subtitlesCount": "Phụ đề", @@ -1958,13 +2062,80 @@ "timeCodesExtractFailed": "Không thể đọc mã thời gian từ video", "timeCodesHint": "Bám cue vào thời điểm khung hình thực của video thay vì giả định tốc độ khung hình không đổi. Cần đọc toàn bộ video một lần; kết quả được lưu vào bộ nhớ đệm." }, + "improveTimeCodes": { + "title": "Cải thiện mã thời gian (căn chỉnh cưỡng bức)", + "aligner": "Bộ căn chỉnh", + "alignerHint": "Mô hình lắng nghe từng dòng trong âm thanh. Các lựa chọn tốt nhất cho ngôn ngữ của phụ đề được liệt kê đầu tiên.", + "maxShift": "Độ dịch tối đa (giây)", + "maxShiftHint": "Mức phụ đề có thể bị lệch đồng bộ. Dòng nào có thời điểm bắt đầu phải dịch xa hơn mức này sẽ được giữ nguyên và đánh dấu. Dù giá trị là bao nhiêu, một dòng đơn lẻ muốn dịch xa hơn nửa giây so với các dòng xung quanh sẽ không bị dịch một cách mù quáng: nó đi theo các dòng lân cận khi tất cả chúng đều dịch, nếu không nó được đưa ra ở trạng thái bỏ chọn để bạn kiểm tra.", + "adjustStartTimes": "Điều chỉnh thời gian bắt đầu", + "adjustEndTimes": "Điều chỉnh thời gian kết thúc", + "isolateSpeech": "Tách riêng giọng nói trước (chậm)", + "isolateSpeechHint": "Loại bỏ nhạc và hiệu ứng âm thanh trước khi căn chỉnh, để bộ căn chỉnh chỉ nghe thấy lời thoại. Hữu ích với các dòng được nói trên nền nhạc lớn hoặc cảnh hành động, nhưng mất khoảng thời gian bằng chính âm thanh nếu có GPU - và lâu hơn nhiều lần nếu không có.", + "isolatingSpeech": "Đang tách riêng giọng nói... (việc này mất một lúc)", + "isolateSpeechFailed": "Không thể tách riêng giọng nói - đã căn chỉnh theo âm thanh gốc thay thế.", + "checkWithSpeechToText": "Kiểm tra bằng chuyển giọng nói thành văn bản", + "checkWithSpeechToTextHint": "Đồng thời phiên âm âm thanh và kiểm tra mọi lần dịch chuyển so với nơi các từ thực sự được nghe thấy. Các dịch chuyển lớn được giọng nói xác nhận sẽ được đánh dấu chọn sẵn, còn các dịch chuyển rời xa nơi dòng được nghe thấy sẽ để bỏ chọn để bạn kiểm tra. Cũng hiển thị tỷ lệ mỗi dòng được nghe thấy - tỷ lệ thấp nghĩa là văn bản khác với lời nói. Phụ đề bị lệch đồng bộ nhiều hơn độ dịch tối đa - lệch cố định, trôi do sai tốc độ khung hình, hoặc nhảy ở chỗ cắt cảnh - sẽ được đồng bộ theo các từ nghe được trước. Dùng Crisp ASR Parakeet, mất vài phút cho một bộ phim dài nếu có GPU.", + "checkWithSpeechToTextNotAvailableX": "Không có kiểm tra chuyển giọng nói thành văn bản cho {0}", + "transcribingToCheck": "Đang phiên âm để kiểm tra căn chỉnh...", + "speechToTextFailed": "Chuyển giọng nói thành văn bản thất bại - mã thời gian không được kiểm tra đối chiếu.", + "speechToTextX": "Chuyển giọng nói thành văn bản: {0}", + "speechToTextConfirmedXDisputedY": "Giọng nói: {0} xác nhận, {1} không khớp", + "hardlyHeardX": "Chuyển giọng nói thành văn bản chỉ nghe được {0}% số từ của phụ đề. Phụ đề có đúng ngôn ngữ được nói không? Bộ căn chỉnh không thể đặt một bản dịch.", + "heard": "Nghe được", + "heardHint": "Tỷ lệ dòng mà chuyển giọng nói thành văn bản nghe được. Tỷ lệ thấp nghĩa là văn bản khác với lời nói - nơi bộ căn chỉnh dễ sai nhất.", + "statusConfirmedBySpeech": "Được giọng nói xác nhận", + "statusDisputedBySpeech": "Nghe thấy ở vị trí cũ", + "statusMovedWithSync": "Dịch theo đồng bộ", + "syncedFirstXY": "Đồng bộ trước: {0} giây ở đầu, {1} giây ở cuối", + "showSpeechOnly": "Chỉ hiện giọng nói", + "showSpeechOnlyHint": "Vẽ dạng sóng đã căn chỉnh từ âm thanh đã loại bỏ nhạc và hiệu ứng âm thanh; dạng sóng gốc giữ nguyên để so sánh. Có sẵn khi giọng nói đã được tách riêng - tại đây, hoặc bằng \"Chỉ hiện giọng nói\" trong dạng sóng của cửa sổ chính.", + "align": "Căn chỉnh", + "original": "Gốc", + "aligned": "Đã căn chỉnh", + "intro": "Chọn bộ căn chỉnh và nhấn \"Căn chỉnh\" để lắng nghe từng dòng trong âm thanh và làm chính xác mã thời gian của nó.", + "extractingAudio": "Đang trích xuất âm thanh...", + "aligningBatchXOfY": "Đang căn chỉnh... lô {0}/{1}", + "extractAudioFailed": "Không thể trích xuất âm thanh bằng ffmpeg.", + "modelWillBeDownloaded": "{0} sẽ được tải xuống", + "summaryXRetimedYKeptZSkipped": "Đã chỉnh thời gian: {0} · Giữ nguyên: {1} · Không có giọng nói: {2}", + "meanShiftX": "Độ dịch trung bình: {0} ms", + "toCheckX": "Cần kiểm tra: {0}", + "largeMovesToCheckX": "{0} dòng sẽ tự dịch chuyển rất xa và được để bỏ chọn - hãy nghe chúng (F5 phát dòng đã căn chỉnh, Shift+F5 phát bản gốc) và đánh dấu những dòng đúng.", + "linesToCheckX": "{0} dòng được để bỏ chọn để kiểm tra - hãy nghe chúng (F5 phát dòng đã căn chỉnh, Shift+F5 phát bản gốc) và đánh dấu những dòng đúng.", + "changeXOfY": "Thay đổi {0}/{1}", + "previousChange": "Thay đổi trước", + "nextChange": "Thay đổi tiếp theo", + "startShift": "Bắt đầu", + "endShift": "Kết thúc", + "statusRetimed": "Đã chỉnh thời gian", + "statusMovedWithNeighbours": "Dịch theo các dòng lân cận", + "statusLargeMoveUnconfirmed": "Dịch chuyển lớn - hãy nghe, đánh dấu để áp dụng", + "statusUnchanged": "Đã đúng vị trí", + "statusNoSpeech": "Không có giọng nói", + "statusShiftTooLarge": "Giữ nguyên - độ dịch quá lớn", + "statusFailed": "Giữ nguyên - bộ căn chỉnh thất bại", + "statusAdjustedByHand": "Điều chỉnh thủ công", + "alignedWaveformHint": "Kéo một dòng để di chuyển nó, hoặc kéo các cạnh để thay đổi thời điểm bắt đầu hoặc kết thúc.", + "playLine": "Phát dòng", + "undoAdjustment": "Hoàn tác điều chỉnh", + "playPause": "Phát / tạm dừng", + "playAligned": "Đã căn chỉnh", + "playAlignedHint": "Phát dòng đã chọn với mã thời gian đã căn chỉnh", + "apply": "Áp dụng", + "applyHint": "Bỏ chọn một dòng để giữ mã thời gian gốc. Nhấp đúp vào một dòng để phát nó. Các dòng cũng có thể được di chuyển hoặc thay đổi kích thước trong dạng sóng đã căn chỉnh." + }, "beautifyTimeCodesProfile": { "title": "Chỉnh sửa hồ sơ làm đẹp mã thời gian", "loadPreset": "Tải cài đặt sẵn", "presetDefault": "Mặc định", "presetNetflix": "Netflix", "presetSdi": "SDI", - "general": "Chung", + "saveAsProfile": "Lưu thành hồ sơ...", + "deleteProfile": "Xóa hồ sơ", + "profileName": "Tên hồ sơ", + "overwriteProfileX": "Đã tồn tại hồ sơ tên \"{0}\". Ghi đè?", + "deleteProfileX": "Xóa hồ sơ \"{0}\"?", "gap": "Khoảng cách", "gapSuffix": "khung hình (cũng cập nhật các trường khoảng cách khác 0 bên dưới)", "milliseconds": "ms", @@ -1993,9 +2164,12 @@ "hintChaining": "Cách xử lý các phụ đề gần chạm nhau — kéo dài chúng lại với nhau, hoặc đẩy ra xa, tùy có điểm chuyển cảnh nằm giữa hay không." }, "bridgeGaps": { - "title": "Nối khoảng trống", "bridgeGapsSmallerThan": "Nối khoảng trống nhỏ hơn (ms)", "minGap": "Khoảng cách tối thiểu (ms)", + "bridgeGapsSmallerThanFrames": "Nối khoảng trống nhỏ hơn (khung hình)", + "minGapFrames": "Khoảng cách tối thiểu (khung hình)", + "calculateBridgeGapsSmallerThanDotDotDot": "Tính giới hạn nối khoảng trống từ tốc độ khung hình...", + "useXMsAsBridgeGapsSmallerThan": "Nối các khoảng trống nhỏ hơn \"{0}\" mili giây?", "numberOfSmallGapsBridgedX": "Số khoảng trống nhỏ đã nối: {0}", "percentFoPrevious": "Khoảng cách cho phụ đề trước (%)", "gapChange": "Thay đổi khoảng cách" @@ -2007,8 +2181,6 @@ "sortBy": { "title": "Sắp xếp phụ đề", "sortOrder": "Thứ tự sắp xếp", - "sortByNumber": "Số", - "sortByStartTime": "Thời gian bắt đầu", "sortByEndTime": "Thời gian kết thúc" }, "batchConvert": { @@ -2031,6 +2203,7 @@ "addColor": "Thêm màu", "deleteLinesWithSpecificActorsOrStyles": "Xóa các dòng có diễn viên hoặc kiểu (ngăn cách nhiều mục bằng dấu phẩy)", "useSourceStylesIfPossible": "Dùng kiểu của nguồn nếu có thể", + "keepSourceEmbeddedFonts": "Giữ phông chữ nhúng của nguồn (phần cuối)", "editStyles": "Chỉnh sửa kiểu", "editProperties": "Chỉnh sửa thuộc tính", "editAttachments": "Chỉnh sửa tệp đính kèm", @@ -2051,7 +2224,6 @@ "assaChangeStyleFromStyle": "Đổi kiểu từ", "assaChangeStyleToStyle": "thành", "assaChangeStyleImportStyle": "Nhập kiểu...", - "assaChangeStyleImportedX": "Đã nhập: {0}", "assaChangeStyleTrimUnusedStyles": "Loại bỏ kiểu không dùng", "assaChangeStylePropertiesTitle": "Thay đổi thuộc tính kiểu", "assaChangeStylePropertiesInfo": "Thay đổi các trường đã chọn trong mọi kiểu của tệp, không đụng đến bản thân các kiểu.", @@ -2063,13 +2235,52 @@ "convertColorsToDialogReBreakLines": "Ngắt dòng lại", "snapTimeCodesToFramesInfo": "Làm tròn mọi thời điểm bắt đầu và kết thúc về khung hình gần nhất. Tốc độ khung hình được đọc từ tệp video cùng tên với tệp phụ đề, trừ khi chọn tốc độ khung hình cố định.", "addFolderDotDotDot": "Thêm thư mục...", + "addFolderRecursiveDotDotDot": "Thêm thư mục (đệ quy)...", "selectFolderToConvert": "Chọn thư mục chứa các tệp cần chuyển đổi", "includeSubfolders": "Bao gồm thư mục con khi thêm một thư mục", + "videoFilesWhenAddingFolder": "Tệp video (mkv, mp4, ts...) khi thêm thư mục", + "videoFilesAsk": "Hỏi", + "videoFilesInclude": "Thêm các rãnh phụ đề của chúng", + "videoFilesSkip": "Bỏ qua", + "folderContainsXVideoFiles": "Thư mục chứa {0} tệp video (mkv, mp4, ts...).\n\nThêm cả các rãnh phụ đề nhúng của chúng, hay chỉ các tệp phụ đề?", + "addVideoFiles": "Thêm tệp video", + "skipVideoFiles": "Chỉ tệp phụ đề", + "doNotAskAgainVideoFiles": "Không hỏi lại (thay đổi trong Cài đặt chuyển đổi hàng loạt)", + "settingsSectionOutput": "Đầu ra", + "settingsSectionAddingFiles": "Thêm tệp", + "settingsSectionImageBasedSubtitles": "Phụ đề dạng hình ảnh (OCR)", + "settingsSectionOther": "Khác", "keepSourceFileTimestamp": "Giữ ngày/giờ của tệp nguồn cho tệp đầu ra", - "scanningFolderX": "Đang quét {0}..." + "preventSleepWhileConverting": "Ngăn máy tính chuyển sang chế độ ngủ khi đang chuyển đổi", + "scanningFolderX": "Đang quét {0}...", + "transportStreamSettings": "Cài đặt Transport Stream", + "transportStreamSettingsDotDotDot": "Cài đặt Transport Stream...", + "transportStreamSettingsInfo": "Áp dụng cho các rãnh phụ đề trích xuất từ tệp Transport Stream (.ts/.m2ts). Vị trí và kích thước video chỉ ảnh hưởng đến các rãnh hình ảnh DVB được xuất sang định dạng dựa trên hình ảnh.", + "transportStreamOverrideXPosition": "Ghi đè vị trí X gốc", + "transportStreamOverrideYPosition": "Ghi đè vị trí Y gốc", + "transportStreamOverrideVideoSize": "Ghi đè kích thước video gốc", + "transportStreamBottomMargin": "Lề dưới", + "transportStreamFileNameEnding": "Phần cuối tên tệp", + "transportStreamFileNameEndingInfo": "Được thêm trước phần mở rộng cho mỗi rãnh được trích xuất. Để trống để dùng hậu tố ngôn ngữ thông thường.", + "transportStreamOnlyTeletext": "Chỉ teletext", + "transportStreamGetSizeFromVideo": "Lấy kích thước từ video...", + "twoLetterLanguageCodeUppercase": "Mã ngôn ngữ hai chữ cái (viết hoa)", + "threeLetterLanguageCodeUppercase": "Mã ngôn ngữ ba chữ cái (viết hoa)", + "formatContainsDotDotDot": "Định dạng chứa...", + "extensionIsDotDotDot": "Phần mở rộng là...", + "statusIsError": "Trạng thái là lỗi", + "forcedTracksOnly": "Chỉ các rãnh bắt buộc (forced)", + "xConvertedYFailedInZ": "Đã chuyển đổi {0:#,###,##0}, thất bại {1:#,###,##0} trong {2}", + "xNotProcessed": "{0:#,###,##0} chưa được xử lý", + "removeUnicodeControlCharactersTitle": "Xóa ký tự điều khiển Unicode", + "removeUnicodeControlCharactersInfo": "Xóa các ký tự điều khiển hướng Unicode vô hình (LRM, RLM, LRE, RLE, PDF, LRO và RLO) khỏi văn bản, và thay thế dấu cách không ngắt bằng dấu cách thông thường.", + "preset": "Cấu hình sẵn", + "savePresetDotDotDot": "Lưu cấu hình sẵn...", + "deletePreset": "Xóa cấu hình sẵn", + "presetName": "Tên cấu hình sẵn", + "deletePresetX": "Xóa cấu hình sẵn \"{0}\"?" }, "changeCasing": { - "title": "Đổi chữ hoa/thường", "fixNames": "Sửa tên riêng", "namesX": "Tên: {0:#,##0}", "hitsX": "Kết quả khớp: {0:#,##0}", @@ -2080,9 +2291,7 @@ "allUppercase": "Tất cả chữ hoa", "allLowercase": "Tất cả chữ thường" }, - "changeFormatting": { - "title": "Đổi định dạng" - }, + "changeFormatting": {}, "convertActors": { "title": "Chuyển đổi diễn viên", "convertActorFrom": "Chuyển diễn viên từ", @@ -2111,18 +2320,12 @@ "outputFormatAssa": "Advanced Sub Station Alpha (.ass)", "style1": "Kiểu 1", "style2": "Kiểu 2", - "outlineWidth": "Độ rộng viền", - "shadowWidth": "Độ rộng bóng", - "alignTop": "Trên", - "alignBottom": "Dưới", - "merge": "_Gộp", - "pleaseLoadTwoSubtitles": "Vui lòng tải hai phụ đề" + "merge": "_Gộp" }, "splitSubtitle": { "title": "Chia phụ đề", "numberOfEqualParts": "Số phần bằng nhau", "saveSplitParts": "_Lưu các phần đã chia", - "subtitleSplitIntoXParts": "Phụ đề đã được chia thành {0} phần.", "xPartsSavedInFormatYToFolder": "{0} phần đã lưu ở định dạng {1} vào thư mục:" }, "splitBreakLongLines": { @@ -2156,18 +2359,17 @@ "columnMerge": "Gộp", "columnFirst": "Dòng thứ nhất", "columnSecond": "Dòng thứ hai", - "columnMerged": "Đã gộp", - "selectAll": "Chọn tất cả", - "inverseSelection": "Đảo vùng chọn" + "columnMerged": "Đã gộp" }, "mergeLinesWithSameText": { - "title": "Gộp các dòng có cùng văn bản", "maxMsBetweenLines": "Số mili giây tối đa giữa các dòng", - "includeIncrementingLines": "Bao gồm các dòng có văn bản tăng dần" + "maxFramesBetweenLines": "Số khung hình tối đa giữa các dòng", + "includeIncrementingLines": "Bao gồm các dòng có văn bản tăng dần", + "includeRollUpCaptions": "Bao gồm phụ đề cuộn lên (roll-up)" }, "mergeLinesWithSameTimeCodes": { - "title": "Gộp các dòng có cùng mã thời gian", "maxMsDifference": "Chênh lệch tối đa (mili giây)", + "maxFramesDifference": "Chênh lệch tối đa (khung hình)", "makeDialog": "Tạo hội thoại" }, "netflixCheckAndFix": { @@ -2190,7 +2392,6 @@ "shotChanges": "Chuyển cảnh", "startNumberSpellOut": "Viết chữ số ở đầu câu", "textforHiUseBrackets": "Văn bản cho HI, dùng ngoặc vuông", - "frameRate": "Tốc độ khung hình", "twoFrameGrap": "Khoảng cách hai khung hình", "whiteSpace": "Khoảng trắng", "childrensProgram": "Chương trình thiếu nhi", @@ -2228,7 +2429,6 @@ "italicsFixed": "Đã sửa chữ nghiêng", "italicsNotAllowed": "Không cho phép chữ nghiêng", "bridgeGapsXToYFrames": "Khoảng cách 3-{0} khung hình => khoảng cách 2 khung hình", - "startNumberSpellOutComment": "Khi một số bắt đầu câu, nó luôn phải được viết bằng chữ", "maximumXCharactersPerSecond": "Tối đa {0} ký tự mỗi giây" }, "imageBasedEdit": { @@ -2237,10 +2437,8 @@ "resizeImagesDotDotDot": "Đổi kích thước ảnh...", "adjustBrightnessDotDotDot": "Điều chỉnh độ sáng...", "adjustAlphaDotDotDot": "Điều chỉnh alpha...", - "centerHorizontally": "Căn giữa theo chiều ngang", "cropImages": "Cắt ảnh", "importTimeCodes": "Nhập mã thời gian...", - "setTextForSubtitle": "Đặt văn bản cho phụ đề", "setText": "Đặt văn bản", "screenWidth": "Chiều rộng màn hình", "screenHeight": "Chiều cao màn hình", @@ -2271,15 +2469,31 @@ "letterboxCustom": "Chiều cao thanh tùy chỉnh", "barHeightPx": "Chiều cao thanh (px)", "titleSafePercent": "Vùng an toàn tiêu đề (%)", + "moveCaptions": "Di chuyển phụ đề", + "moveCaptionsDotDotDot": "Di chuyển phụ đề...", + "moveCaptionsTo": "Di chuyển phụ đề", + "moveCaptionsIntoBars": "Vào các dải đen letterbox (bên ngoài hình ảnh)", + "moveCaptionsIntoPicture": "Vào trong hình ảnh (ra khỏi các dải đen)", + "moveCaptionsOffset": "Khoảng cách từ cạnh (px)", + "letterboxBarHeightXPxYOfZCaptionsWillMove": "Chiều cao dải đen: {0} px - {1}/{2} phụ đề sẽ được di chuyển", + "removeFadeInOut": "Xóa mờ dần vào/ra", + "removeFadeInOutXLinesRemoved": "Đã gộp {0} dòng mờ dần vào các dòng chúng thuộc về", + "removeFadeInOutNothingFound": "Không tìm thấy dòng mờ dần vào/ra nào", "positionSummary": "{0}×{1} - {2} phụ đề - chiều cao thanh: {3} px", "xInActivePicture": "{0} trong hình", "xInTopBar": "{0} trong thanh trên", "xInBottomBar": "{0} trong thanh dưới", "noImageSubtitlesLoaded": "Chưa nạp phụ đề dạng ảnh nào", - "imageBasedFormatNotSupported": "Không tìm thấy/không hỗ trợ định dạng phụ đề dạng hình ảnh." + "imageBasedFormatNotSupported": "Không tìm thấy/không hỗ trợ định dạng phụ đề dạng hình ảnh.", + "frameRateDeclaredInFile": "Tốc độ khung hình khai báo trong tệp Blu-ray sup", + "frameRateDetectedFromTimeCodesX": "Tốc độ khung hình phát hiện từ mã thời gian Blu-ray sup (tệp khai báo {0})", + "frameRateFromVideo": "Tốc độ khung hình của video", + "frameRateCurrent": "Tốc độ khung hình hiện tại", + "frameRateSetManually": "Tốc độ khung hình đặt thủ công", + "frameRateUsageInfo": "Các bản xuất Blu-ray sup, BDN XML, DOST và FCP được ghi ở tốc độ khung hình này. Nó không thay đổi bất kỳ thời gian nào - dùng \"Thay đổi tốc độ khung hình\" cho việc đó.", + "useVideoFrameRateXInsteadOfY": "Tốc độ khung hình của video là {0}, nhưng phụ đề được đặt là {1}.\n\nDùng tốc độ khung hình của video ({0})?" }, "removeTextForHearingImpaired": { - "title": "Xóa văn bản dành cho người khiếm thính", "interjections": "Thán từ", "skipIfStartWith": "Bỏ qua nếu bắt đầu bằng", "removeTextBetween": "Xóa văn bản giữa", @@ -2298,7 +2512,6 @@ "removeInterjections": "Xóa thán từ", "linesFoundX": "Số dòng tìm thấy: {0}" }, - "pickAlignmentTitle": "Chọn căn chỉnh", "removeUnicodeCharacters": { "title": "Xóa/thay thế ký tự Unicode", "charactersFoundX": "Số ký tự Unicode tìm thấy: {0}", @@ -2308,13 +2521,13 @@ "pickFontNameInstalledFonts": "Phông chữ đã cài đặt", "pickFontNameCollectedFonts": "Phông chữ đã thu thập", "colorPickerTitle": "Chọn màu", + "colorPickerBrightness": "Độ sáng", "filterLayersTitle": "Lọc lớp để hiển thị", "filterLayersHideFromWaveform": "Ẩn khỏi dạng sóng/phổ âm", "filterLayersHideFromSubtitleGrid": "Ẩn khỏi lưới phụ đề", "filterLayersHideFromVideoPreview": "Ẩn khỏi xem trước video", "pickSubtitleFormat": "Chọn định dạng phụ đề", "pickSubtitleFormatImageBasedNoPreview": "Định dạng phụ đề dạng ảnh.\nBitmap được tạo trong quá trình chuyển đổi - không có xem trước văn bản.", - "pickLayerTitle": "Đặt lớp", "recentColors": "Màu gần đây", "fixCommonErrorsSettingsTitle": "Cài đặt sửa lỗi thường gặp" }, @@ -2359,59 +2572,51 @@ "correctWordsX": "Số từ đúng: {0}", "namesX": "Số tên: {0}", "addedToDictionaryX": "Đã thêm vào từ điển: {0}", - "doNotShowThisAgain": "Không hiển thị thông báo này nữa" + "doNotShowThisAgain": "Không hiển thị thông báo này nữa", + "editUseAlwaysList": "Chỉnh sửa danh sách \"Luôn dùng\"...", + "useAlwaysListTitle": "Kiểm tra chính tả - danh sách \"Luôn dùng\"", + "useAlwaysListHeader": "Danh sách \"Luôn dùng\"", + "useAlwaysListDescription": "Các từ mà kiểm tra chính tả tự động thay thế, được lưu bởi \"Thay đổi tất cả\" và \"Luôn dùng\". Một cặp chỉ được dùng khi từ đó bị sai chính tả.", + "useAlwaysWord": "Từ sai chính tả", + "xPairs": "{0:#,##0} cặp", + "xUnusedPairs": "{0:#,##0} chưa từng dùng", + "useAlwaysUnusedHint": "Chưa từng dùng - từ này được viết đúng chính tả (hoặc là tên hay từ của người dùng), nên kiểm tra chính tả không bao giờ đánh dấu nó", + "removeUnused": "Xóa mục không dùng", + "useAlwaysEmpty": "Chưa có cặp \"Luôn dùng\" nào cho ngôn ngữ này", + "useAlwaysEmptyHint": "Các cặp được thêm khi bạn nhấn \"Thay đổi tất cả\" hoặc \"Luôn dùng\" trong kiểm tra chính tả.", + "useAlwaysNoMatch": "Không có cặp nào khớp với tìm kiếm", + "useAlwaysSameWord": "Từ thay thế phải khác với từ gốc.", + "useAlwaysRememberOff": "\"Nhớ danh sách 'Luôn dùng'\" đang tắt trong Cài đặt, nên kiểm tra chính tả không dùng hoặc lưu danh sách này." }, "video": { "burnIn": { "title": "Tạo video với phụ đề ghi cứng", - "infoAssaOff": "Lưu ý: Hỗ trợ định kiểu Advanced SubStation Alpha.", - "infoAssaOn": "Lưu ý: Định kiểu Advanced SubStation Alpha sẽ được sử dụng :)", - "xGeneratedWithBurnedInSubsInX": "Đã tạo \"{0}\" với phụ đề ghi cứng trong {1}.", - "timeRemainingMinutes": "Thời gian còn lại: {0} phút", - "timeRemainingOneMinute": "Thời gian còn lại: Một phút", - "timeRemainingSeconds": "Thời gian còn lại: {0} giây", - "timeRemainingAFewSeconds": "Thời gian còn lại: Vài giây", - "timeRemainingMinutesAndSeconds": "Thời gian còn lại: {0} phút {1} giây", - "timeRemainingOneMinuteAndSeconds": "Thời gian còn lại: Một phút {0} giây", - "targetFileName": "Tên tệp đích: {0}", "targetFileSize": "Kích thước tệp đích (yêu cầu mã hóa 2 lượt)", "fileSizeMb": "Kích thước tệp tính bằng MB", "matchSourceVideoSize": "Khớp kích thước video nguồn", - "passX": "Lượt {0}", - "encoding": "Mã hóa", "bitRate": "Tốc độ bit", "totalBitRateX": "Tổng tốc độ bit: {0}", "sampleRate": "Tần số lấy mẫu", "audio": "Âm thanh", - "stereo": "Stereo", "preset": "Cấu hình sẵn", + "tune": "Tinh chỉnh (tune)", "pixelFormat": "Định dạng điểm ảnh", "crf": "CRF", - "tuneFor": "Tinh chỉnh cho", - "alignRight": "Căn phải", - "getStartPosition": "Lấy vị trí bắt đầu", - "getEndPosition": "Lấy vị trí kết thúc", "useSource": "Dùng nguồn", - "useSourceFolder": "Dùng thư mục nguồn", - "useSourceResolution": "Dùng độ phân giải nguồn", - "outputSettings": "Tệp/thư mục đầu ra...", "fontSizeFactor": "Hệ số cỡ chữ", "boxType": "Kiểu hộp", - "fixRightToLeft": "Sửa phải-sang-trái", - "cut": "Cắt", "fromTime": "Từ thời điểm", "toTime": "Đến thời điểm", "audioEncoding": "Mã hóa âm thanh", "outputProperties": "Thuộc tính đầu ra...", "videoFileSize": "Kích thước tệp video", "oneBox": "Một hộp", - "boxPerLine": "Hộp cho mỗi dòng", - "logoInfo": "Chọn một ảnh PNG và kéo để đặt vị trí trên video." + "logoInfo": "Chọn một ảnh PNG và kéo để đặt vị trí trên video.", + "noSubtitlesGenerateAnyway": "Không có dòng phụ đề nào để ghi vào video.\n\nTạo video không có phụ đề?", + "noSubtitlesInXItemsGenerateAnyway": "{0} mục trong lô không có dòng phụ đề nào để ghi vào video.\n\nTạo các video đó không có phụ đề?" }, "videoTransparent": { - "title": "Tạo video trong suốt với phụ đề", - "infoAssaOff": "Lưu ý: Hỗ trợ định kiểu Advanced SubStation Alpha.", - "infoAssaOn": "Lưu ý: Định kiểu Advanced SubStation Alpha sẽ được sử dụng :)" + "title": "Tạo video trong suốt với phụ đề" }, "audioToText": { "title": "Chuyển giọng nói thành văn bản", @@ -2419,6 +2624,21 @@ "translateToEnglish": "Dịch sang tiếng Anh", "transcribing": "Đang phiên âm...", "transcribingXOfY": "Đang phiên âm {0} trên {1}...", + "linesTranscribedXOfYFailedZ": "Đã phiên âm {0}/{1} dòng - {2} dòng thất bại hoặc không có giọng nói.\n\nCác dòng thất bại giữ nguyên văn bản hiện tại. Áp dụng các dòng đã phiên âm, hay thử lại các dòng thất bại (bạn có thể đổi công cụ hoặc cài đặt trước)?", + "linesTranscribedXOfYCancelled": "Đã hủy phiên âm sau {0}/{1} dòng.\n\nÁp dụng các dòng đã phiên âm? Các dòng khác giữ nguyên văn bản hiện tại.", + "noLinesTranscribed": "Không phiên âm được dòng nào trong số {0} dòng.\nVui lòng kiểm tra nhật ký công cụ để biết chi tiết.", + "applyTranscribedLines": "Áp dụng phần đã phiên âm", + "retryFailedLines": "Thử lại phần thất bại", + "isolateSpeech": "Tách riêng giọng nói (chậm)", + "isolateSpeechHint": "Loại bỏ nhạc và hiệu ứng âm thanh trước khi phiên âm. Ít bỏ sót dòng hơn và thời gian chính xác hơn với âm thanh có nhạc lớn, nhưng mất khoảng thời gian bằng chính âm thanh nếu có GPU - và lâu hơn nhiều lần nếu không có.", + "isolatingSpeech": "Đang tách riêng giọng nói...", + "isolateSpeechFailed": "Không thể tách riêng giọng nói - đang phiên âm âm thanh gốc thay thế.", + "detectSpeakers": "Phát hiện người nói", + "detectSpeakersHint": "Bắt đầu mỗi dòng bằng người nói, như \"(speaker 0)\", dùng tính năng phân biệt người nói Sortformer của NVIDIA (tối đa 8 người nói). Hoạt động tốt nhất với các backend tách dòng khi người nói thay đổi, như Parakeet và Cohere.", + "detectSpeakersNeedsNewerCrispAsr": "\"Phát hiện người nói\" cần Crisp ASR v{0} trở lên, nhưng đã cài v{1}.\n\nCập nhật Crisp ASR (nút bánh răng cạnh công cụ) hoặc tắt \"Phát hiện người nói\".", + "xNeedsNewerCrispAsr": "{0} cần Crisp ASR v{1} trở lên, nhưng đã cài v{2}.\n\nTải xuống và cài đặt bản cập nhật ngay?", + "vad": "VAD", + "vadHint": "Phát hiện hoạt động giọng nói: chỉ phần giọng nói được phiên âm, cắt ở chỗ người nói ngừng.\nTự động: Silero, và chỉ cho các công cụ cần nó (Cohere, Mega, Index-Echo).\nSilero, FireRedVAD, Whisper-VAD, WebRTC: luôn bật, cho mọi công cụ Crisp ASR. FireRedVAD chính xác nhất, Whisper-VAD cho ít đoạn cắt nhất và gọn nhất nhưng chậm nhất.\nIndex-Echo luôn dùng Silero. --vad, --vad-model hoặc --chunk-seconds trong cài đặt nâng cao được ưu tiên.", "inputLanguage": "Ngôn ngữ đầu vào", "advancedWhisperSettings": "Tham số chuyển giọng nói thành văn bản nâng cao", "downloadingSpeechToTextEngine": "Đang tải xuống công cụ chuyển giọng nói thành văn bản", @@ -2433,8 +2653,6 @@ "addCustomModelDotDotDot": "Thêm mô hình tùy chỉnh...", "customModelHelp": "Bạn có thể dùng mô hình của riêng mình: chọn tệp mô hình (whisper.cpp ggml '.bin') hoặc thư mục mô hình (thư mục faster-whisper có 'model.bin' bên trong). Nó sẽ được sao chép vào thư mục mô hình và thêm vào danh sách ở trên.", "viewToolsLogFile": "Xem tệp nhật ký công cụ", - "reDownloadX": "Tải lại {0}", - "downloadX": "Tải xuống {0}", "updateXTitle": "Cập nhật {0}?", "updateXMessage": "Đã có phiên bản mới hơn của {0}.{1}{1}Tải xuống và cài đặt bản cập nhật ngay?", "downloadingSpeechToTextModel": "Đang tải xuống mô hình chuyển giọng nói thành văn bản", @@ -2446,14 +2664,6 @@ "fixCasing": "Sửa chữ hoa/thường", "addPeriods": "Thêm dấu chấm", "changeUnderlineToColor": "Đổi gạch chân thành màu", - "cueBuilding": "Dựng cue (MLX Whisper)", - "cueRebuild": "Dựng lại cue từ dấu thời gian của từ", - "cueMaxChars": "Số ký tự tối đa mỗi cue", - "cueMaxSeconds": "Số giây tối đa mỗi cue", - "cueMaxCps": "Số ký tự tối đa mỗi giây", - "vocabularyPrompt": "Gợi ý từ vựng (tên, địa danh, thuật ngữ)", - "beamSize": "Beam size", - "beamSizeNote": "0 giải mã nhanh nhất. 5 cho độ chính xác tốt nhất (như Faster Whisper) với thời gian nhiều hơn khoảng 20-30%. Giá trị trên 5 hiếm khi hữu ích.", "removeNonSpeechLines": "Xóa các dòng không phải lời nói", "removeNonSpeechLinesHint": "Bỏ các dòng chỉ mô tả âm thanh, như \"[Music]\" hoặc \"(waves crashing)\"", "removeRepeatedLines": "Xóa các dòng lặp lại", @@ -2489,14 +2699,11 @@ }, "textToSpeech": { "title": "Chuyển văn bản thành giọng nói", - "textToSpeechEngine": "Công cụ chuyển văn bản thành giọng nói", "reviewAudioSegments": "TTS - Duyệt các đoạn âm thanh", "reviewAudioSegmentsHistory": "TTS - Duyệt lịch sử âm thanh", "stability": "Độ ổn định", "similarity": "Độ tương đồng", "speakerBoost": "Tăng cường người nói", - "styleExaggeration": "Cường điệu phong cách", - "regenerateAudioSelectedLine": "Tạo lại âm thanh cho dòng đã chọn", "generateSpeechFromText": "Tạo giọng nói từ văn bản", "testVoice": "Thử giọng", "addAudioToVideoFile": "Thêm âm thanh vào tệp video", @@ -2515,6 +2722,19 @@ "videoEncodingSettings": "TTS - Cài đặt mã hóa video", "elevenLabsSettings": "TTS - Cài đặt ElevenLabs", "elevenLabsSettingsResetHint": "Đặt lại cài đặt ElevenLabs về giá trị mặc định", + "provider": "Nhà cung cấp", + "openAiCompatibleSettings": "TTS - Cài đặt tương thích OpenAI", + "customServerUrl": "URL máy chủ tùy chỉnh", + "customServerUrlHint": "Endpoint giọng nói đầy đủ của máy chủ tương thích OpenAI, dùng khi nhà cung cấp là \"Tùy chỉnh\", ví dụ http://localhost:8880/v1/audio/speech", + "customModels": "Mô hình tùy chỉnh", + "customModelsHint": "Tên các mô hình, phân cách bằng dấu phẩy, được đưa ra khi nhà cung cấp là \"Tùy chỉnh\"", + "customVoices": "Giọng tùy chỉnh", + "customVoicesHint": "Tên các giọng, phân cách bằng dấu phẩy, dùng bởi nhà cung cấp \"Tùy chỉnh\" và các mô hình OpenRouter không công bố danh sách giọng", + "instructions": "Hướng dẫn", + "instructionsHint": "Phong cách nói tùy chọn, ví dụ \"Nói bằng giọng điềm tĩnh, ấm áp\". Chỉ gửi đến các mô hình hỗ trợ (không phải tts-1/tts-1-hd)", + "openAiSpeedHint": "Tốc độ nói từ 0.25 đến 4.0 (1.0 là bình thường). Không phải mô hình nào cũng hỗ trợ", + "outputFormat": "Định dạng đầu ra", + "outputFormatHint": "Định dạng âm thanh yêu cầu từ máy chủ. \"Tự động\" yêu cầu MP3 và chuyển sang PCM cho các mô hình chỉ trả về PCM (ví dụ Gemini TTS)", "regenerateAudio": "Tạo lại âm thanh", "autoContinuePlaying": "Tự động phát tiếp", "playLine": "Phát dòng", @@ -2523,6 +2743,13 @@ "addingAudioToVideoFileDotDotDot": "Đang thêm âm thanh vào tệp video...", "preparingMergeDotDotDot": "Đang chuẩn bị gộp...", "importVoiceDotDotDot": "Nhập giọng nói...", + "renameVoiceDotDotDot": "Đổi tên giọng...", + "renameVoiceTitle": "Đổi tên giọng", + "voiceXCouldNotBeRenamedX": "Không thể đổi tên giọng '{0}': {1}", + "deleteVoiceDotDotDot": "Xóa giọng...", + "deleteVoiceTitle": "Xóa giọng", + "deleteVoiceXQuestion": "Xóa giọng '{0}'?\n\nBản ghi tham chiếu và các tệp của nó sẽ bị xóa khỏi ổ đĩa.", + "voiceXCouldNotBeDeletedX": "Không thể xóa giọng '{0}': {1}", "voiceImportSuccessTitle": "Đã nhập giọng nói", "voiceXImported": "Đã nhập giọng nói '{0}' thành công", "voiceXCouldNotBeImported": "Không thể nhập giọng '{0}' - xem nhật ký để biết chi tiết", @@ -2532,6 +2759,49 @@ "dropAudioFileHereToImportVoice": "Thả tệp âm thanh vào đây để nhập giọng nói", "dropAudioFileHereHint": ".wav hoặc .mp3", "voiceCloneTranscriptTitle": "Nhập bản chép lời của âm thanh (bắt buộc để nhân bản giọng nói)", + "voiceManagerTitle": "TTS - Trình quản lý giọng", + "voiceManagerDotDotDot": "Trình quản lý giọng...", + "voiceManagerMenuItem": "Trình quản lý giọng TTS...", + "speakFromCurrentLineTitle": "Đọc từ dòng hiện tại", + "speakFromCurrentLineDotDotDot": "Đọc từ dòng hiện tại...", + "speakFromCurrentLineHint": "Đọc to lần lượt từng dòng, bắt đầu từ dòng hiện tại. Nhấn Escape hoặc nhấp vào dòng khác để dừng.", + "stopSpeaking": "Dừng đọc", + "speakingLineX": "Đang đọc dòng {0}... (Escape để dừng)", + "playWithSpeechTitle": "Phát kèm giọng nói", + "playWithSpeechDotDotDot": "Phát kèm giọng nói...", + "playWithSpeechHint": "Phát video và đọc từng dòng khi video đến dòng đó. Tạm dừng và tua như bình thường; nhấn Escape để dừng.", + "lowerVideoVolumeWhileSpeaking": "Giảm âm lượng video khi đang đọc", + "pauseVideoWhenSpeechRunsLate": "Tạm dừng video khi giọng nói kéo sang dòng tiếp theo", + "waitingForSpeechLineX": "Đang tạo giọng nói cho dòng {0}... (Escape để dừng)", + "voiceKindClone": "Giọng nhân bản", + "voiceKindPreset": "Tích hợp sẵn", + "voiceKindModel": "Mô hình giọng", + "voiceKindOnline": "Trực tuyến", + "transcript": "Bản ghi lời", + "transcriptRequiredHint": "Bắt buộc - công cụ đọc bản ghi lời này của bản ghi âm (ref-text) khi nhân bản", + "transcriptOptionalHint": "Tùy chọn - bản ghi lời chính xác của bản ghi âm giúp nhân bản tốt hơn", + "saveTranscript": "Lưu bản ghi lời", + "searchVoices": "Tìm giọng", + "loadingVoicesDotDotDot": "Đang tải giọng...", + "noVoicesForEngine": "Không có giọng - hãy nhập một bản ghi âm hoặc tải xuống gói giọng", + "noVoicesMatchFilter": "Không có giọng nào khớp với tìm kiếm", + "copyVoiceTo": "Sao chép giọng sang", + "copyVoiceToDotDotDot": "Sao chép giọng sang công cụ...", + "copyingVoiceXToYDotDotDot": "Đang sao chép giọng '{0}' sang {1}...", + "voiceXCopiedToY": "Đã sao chép giọng '{0}' sang {1}", + "voiceXCouldNotBeCopiedToY": "Không thể sao chép giọng '{0}' sang {1} - xem nhật ký để biết chi tiết", + "voiceXAlreadyExistsInYContinue": "Đã tồn tại giọng tên '{0}' trong {1}.\n\nVẫn sao chép?", + "openVoicesFolder": "Mở thư mục giọng", + "downloadVoicePacksDotDotDot": "Tải xuống gói giọng...", + "downloadVoicePacksTitle": "TTS - Tải xuống gói giọng", + "voicePackIntro": "Gói giọng là tập hợp các bản ghi âm ngắn, sạch kèm bản ghi lời, sẵn sàng để nhân bản. Mỗi gói được nhập vào công cụ đã chọn (các giọng đã có sẽ bị bỏ qua) và kèm tệp ATTRIBUTION.txt với giấy phép và nguồn của nó.", + "voicePackDetailsXVoicesYSizeZLicense": "{0} giọng · {1} · {2}", + "installToEngine": "Cài đặt vào công cụ", + "downloadAndInstall": "Tải xuống và cài đặt", + "selectAtLeastOneVoicePack": "Chọn ít nhất một gói giọng", + "downloadingXDotDotDot": "Đang tải xuống {0}...", + "installingXDotDotDot": "Đang cài đặt {0}...", + "xVoicesInstalledYSkipped": "Đã cài đặt {0} giọng ({1} đã có sẵn)", "useSpeechToTextDotDotDot": "Dùng chuyển giọng nói thành văn bản...", "autoCastMenuItem": "Tìm giọng nói trong video và nhân bản...", "autoCastSpeakersTitle": "Các giọng nói tìm thấy trong video", @@ -2550,7 +2820,7 @@ "cloneVoicePerLinePreparing": "Đang lấy giọng của từng dòng từ video...", "cloneVoicePerLineNeedsVideo": "Việc nhân bản giọng của từng dòng cần video mà phụ đề thuộc về. Hãy mở video và thử lại.", "cloneVoicePerLineNoClips": "Không lấy được âm thanh nào từ video, nên không có gì để nhân bản. Hãy kiểm tra xem video có rãnh âm thanh không.", - "cloneVoicePerLineNeedsOriginalSubtitleX": "{0} chỉ có thể nhân bản một dòng khi biết trong video nói gì ở dòng đó, điều này lấy từ phụ đề ngôn ngữ gốc. Chưa tải phụ đề gốc nào, nên mọi dòng sẽ được đọc bằng giọng nhập đầu tiên thay vì giọng trong video.\n\nHãy mở phụ đề gốc (Tệp > Mở bản gốc...) bên cạnh bản dịch, rồi tạo lại.", + "cloneVoicePerLineTranscribeClipsXYZ": "{0} chỉ có thể nhân bản một dòng khi biết những gì được nói trong video tại dòng đó. Điều này chưa biết đối với {1}/{2} dòng - thông thường nó đến từ phụ đề ngôn ngữ gốc (Tệp > Mở bản gốc...).\n\nPhiên âm các dòng đó từ video bằng chuyển giọng nói thành văn bản ngay bây giờ?\n\nCó: chọn công cụ và ngôn ngữ được nói trong video, các đoạn tham chiếu sẽ được phiên âm trước khi tạo giọng nói.\nKhông: vẫn tạo - các dòng đó sẽ được đọc bằng giọng thông thường thay vì giọng trong video.", "voiceCloneConsentTitle": "Nhân bản giọng nói - trước khi bạn bắt đầu", "voiceCloneConsentHeader": "Bạn sắp nhân bản một giọng nói", "voiceCloneConsentIntro": "Nhân bản là sao chép giọng của một người thật. Điều đó đi kèm quy định ở hầu hết các nơi, và ở EU là các nghĩa vụ pháp lý thuộc về bạn, không phải Subtitle Edit. Vui lòng đọc phần này một lần.", @@ -2567,10 +2837,29 @@ "advancedTtsSettings": "Cài đặt TTS nâng cao", "advancedTtsAudioProcessing": "Xử lý âm thanh", "advancedTtsOutput": "Đầu ra", + "advancedTtsVoiceCloning": "Nhân bản giọng", + "cleanCloneReferences": "Làm sạch tham chiếu nhân bản giọng (Sidon)", + "cleanCloneReferencesDescription": "Loại bỏ nhạc, tiếng ồn và tiếng vang khỏi âm thanh dùng để nhân bản giọng: các đoạn lấy từ video và các bản ghi âm được nhập trong trình quản lý giọng. Dùng mô hình phục hồi giọng nói Sidon trên audio.cpp (tải xuống 940 MB). Giọng nhân bản không còn sao chép âm nền, nhưng giọng nói rất nhỏ hoặc chồng lấn có thể bị nghẹt.", + "cleaningCloneReferencesDotDotDot": "Đang làm sạch tham chiếu nhân bản giọng...", + "downloadSidonTitle": "Tải xuống Sidon?", + "downloadSidonQuestionX": "Làm sạch tham chiếu nhân bản giọng cần mô hình phục hồi giọng nói Sidon ({0}).\n\nTải xuống ngay? Nếu không có nó, các tham chiếu sẽ được dùng nguyên trạng.", "proAudioPostProcessing": "Hậu xử lý âm thanh chuyên nghiệp", "proAudioPostProcessingDescription": "Áp dụng EQ làm ấm, cổng chống ồn, nén, chuẩn hóa độ lớn (-16 LUFS) và fade in/out cho từng đoạn.", + "generatingSpeechSegmentXOfY": "Đang tạo giọng nói: đoạn {0}/{1}", + "adjustingSpeedSegmentXOfY": "Đang điều chỉnh tốc độ: đoạn {0}/{1}", + "mergingAudioSegmentXOfY": "Đang gộp âm thanh: đoạn {0}/{1}", + "postProcessingSegmentXOfY": "Đang hậu xử lý: đoạn {0}/{1}", "audioDucking": "Giảm nền âm thanh (ducking)", "audioDuckingDescription": "Giảm âm lượng âm thanh gốc của video và trộn với âm thanh TTS, để nhạc nền gốc vẫn nghe được thoang thoảng.", + "removeOriginalSpeech": "Loại bỏ giọng nói gốc (chậm)", + "removeOriginalSpeechDescription": "Giữ nhạc và hiệu ứng âm thanh của video gốc nhưng loại bỏ giọng nói, rồi trộn giọng nói mới lên trên. Mất khoảng thời gian bằng chính video nếu có GPU, và lâu hơn nhiều lần nếu không có. Khi bật giảm nền âm thanh (ducking), âm lượng của nó áp dụng cho nhạc và hiệu ứng. Chỉ áp dụng khi giọng nói được thêm vào tệp video.", + "removingOriginalSpeech": "Đang loại bỏ giọng nói gốc...", + "removeOriginalSpeechFailed": "Không thể loại bỏ giọng nói gốc - giọng nói đã được thêm vào video mà không loại bỏ.", + "speechRemovalModel": "Mô hình", + "speechRemovalModelDescription": "Chất lượng tốt nhất giữ lại nhiều nhạc và hiệu ứng âm thanh nhất. Nhanh thì nhanh hơn khoảng ba lần, nhưng mất thêm một chút nhạc.", + "speechRemovalBestQuality": "Chất lượng tốt nhất (Mel-Band RoFormer)", + "speechRemovalFast": "Nhanh (HTDemucs)", + "videoTruncatedWarning": "Hình ảnh trong tệp video mới dừng sau {0}, nhưng video gốc dài {1} - hình ảnh sẽ đứng yên trong khi âm thanh tiếp tục.\n\nTệp đã được giữ lại. Xem error-log.txt trong thư mục dữ liệu Subtitle Edit để biết kết quả ffmpeg.", "originalVolumePercent": "% âm lượng gốc", "vadSilenceCompression": "Nén khoảng lặng bằng VAD", "vadSilenceCompressionDescription": "Rút ngắn khoảng dừng giữa các từ trước khi thay đổi nhịp độ. Dùng Voice Activity Detection để chỉ nén các khoảng lặng trong khi giữ nguyên phần giọng nói. Đây là bước đầu tiên nên dùng — nó giảm thời lượng mà không mất chất lượng.", @@ -2644,7 +2933,6 @@ "subtitleMergedLinesAppliedPlural": "Đã áp dụng {0} lần gộp dòng từ chuyển văn bản thành giọng nói" }, "shotChanges": { - "titleGenerateOrImport": "Tạo/nhập chuyển cảnh", "generateShotChanges": "Tạo chuyển cảnh", "importShotChanges": "Nhập chuyển cảnh", "generateShotChangesWithFfmpeg": "Tạo chuyển cảnh bằng ffmpeg", @@ -2654,7 +2942,9 @@ "timeCodeFormatColon": "Định dạng mã thời gian:", "shotChangesList": "Danh sách chuyển cảnh", "shotChangesClearQuestion": "Bạn có chắc muốn xóa tất cả chuyển cảnh?", - "deleteSelectedShotChangeQuestion": "Bạn có chắc muốn xóa chuyển cảnh đã chọn?" + "deleteSelectedShotChangeQuestion": "Bạn có chắc muốn xóa chuyển cảnh đã chọn?", + "shotChanges": "Điểm chuyển cảnh", + "exportShotChanges": "Xuất điểm chuyển cảnh" }, "chapters": { "title": "Chương", @@ -2684,7 +2974,6 @@ "scaleTimesDescription": "Quy đổi thời gian của mọi chương từ tốc độ khung hình này sang tốc độ khung hình khác.", "fromFrameRate": "Từ", "toFrameRate": "Sang", - "apply": "Áp dụng", "writeToVideo": "Ghi vào video...", "writeToVideoTitle": "Ghi chương vào video", "writeToVideoDescription": "Các chương được ghi vào một bản sao của tệp video. Không có gì bị mã hóa lại, nên thao tác này nhanh và không mất chất lượng.", @@ -2694,7 +2983,6 @@ "writtenToX": "Đã ghi chương vào {0}", "unableToWriteChapters": "Không thể ghi chương vào tệp video.", "chaptersSavedToX": "Đã lưu chương vào {0}", - "noVideoLoaded": "Chưa tải video nào", "emptyListCallToAction": "Chưa có chương nào - hãy thêm một chương tại vị trí video, hoặc nhập chúng từ video hay tệp." }, "videoOcr": { @@ -2705,10 +2993,6 @@ "bottomHalf": "Nửa dưới", "fullFrame": "Toàn khung hình", "engine": "Công cụ OCR", - "language": "Ngôn ngữ", - "url": "URL", - "model": "Mô hình", - "apiKey": "Khóa API", "scan": "Quét", "framesPerSecond": "Khung hình mỗi giây", "textBrightnessMinimum": "Độ sáng văn bản tối thiểu (0=tắt)", @@ -2723,10 +3007,10 @@ "runningOcrXY": "Đang chạy OCR... {0}/{1}", "noLinesFoundTitle": "Không tìm thấy phụ đề", "noLinesFoundMessage": "Không tìm thấy văn bản trong vùng quét - hãy thử điều chỉnh vùng quét, công cụ hoặc độ sáng tối thiểu.", + "ocrStoppedEarlyMessage": "Công cụ OCR đã dừng trước khi đọc hết các khung hình, nên các dòng tìm được cho đến nay được giữ lại và phần còn lại bị thiếu.{0}{0}{1}", "linesFoundX": "Tìm thấy {0} dòng", "refiningTimingXY": "Đang tinh chỉnh thời gian... {0}/{1}", "fixOcrErrors": "Sửa lỗi OCR", - "dictionary": "Từ điển", "editLineX": "Chỉnh sửa dòng {0}", "downloadDictionaryHint": "Tải xuống từ điển kiểm tra chính tả...", "framesPerSecondHint": "Số khung hình được quét mỗi giây. Mức 5 đủ cho phụ đề thông thường; mức cao hơn bắt được các dòng rất ngắn và gom nhóm chặt hơn, nhưng tốn thêm thời gian OCR.", @@ -2743,7 +3027,58 @@ "testOcr": "Thử khung hình hiện tại", "testOcrRunning": "Đang thử OCR trên khung hình hiện tại...", "testOcrResultX": "Kết quả thử: {0}", - "testOcrNoTextFound": "Thử: không tìm thấy văn bản trong vùng quét" + "testOcrNoTextFound": "Thử: không tìm thấy văn bản trong vùng quét", + "engineSettings": "Cài đặt công cụ OCR", + "engineBuiltIn": "Tích hợp sẵn trong hệ điều hành", + "engineExternalServer": "Máy chủ bên ngoài (được cài đặt và quản lý bên ngoài Subtitle Edit)", + "engineCloudApi": "API đám mây (cần khóa API)", + "engineNothingToInstall": "Không cần cài đặt gì", + "engineModelsMissing": "Đã cài công cụ, thiếu mô hình", + "website": "Trang web" + }, + "backgroundMusic": { + "title": "Tạo nhạc nền", + "generateBackgroundMusicDotDotDot": "Tạo nhạc nền...", + "preset": "Cấu hình sẵn", + "prompt": "Lời nhắc", + "tempoBpm": "Nhịp độ (BPM)", + "generateSeconds": "Tạo (giây)", + "seed": "Seed", + "randomSeed": "Ngẫu nhiên", + "outputLength": "Độ dài đầu ra", + "outputLengthVideoX": "{0} (độ dài video - nhạc lặp liền mạch)", + "musicVolumePercent": "Âm lượng nhạc (%)", + "removeExistingAudioTracks": "Xóa các rãnh âm thanh hiện có", + "originalAudioVolumePercent": "Âm lượng âm thanh gốc (%)", + "saveAudioDotDotDot": "Lưu âm thanh...", + "addToVideoDotDotDot": "Thêm vào video...", + "engineInfo": "ACE-Step 1.5 Turbo qua audio.cpp (giấy phép MIT) - chạy cục bộ", + "presetCooking": "Nấu ăn / làm bánh", + "presetTech": "Công nghệ / đánh giá thiết bị", + "presetForest": "Rừng / thiên nhiên", + "presetRelaxingPiano": "Piano thư giãn", + "presetLofiVlog": "Vlog lo-fi", + "presetCorporate": "Doanh nghiệp / giải thích", + "loadingModel": "Đang tải mô hình...", + "composing": "Đang sáng tác...", + "generatingAudio": "Đang tạo âm thanh...", + "decodingAudio": "Đang giải mã âm thanh...", + "creatingLoop": "Đang tạo vòng lặp liền mạch...", + "resultLoopXYZ": "Vòng lặp: {0} ở {1} BPM, độ khớp mối nối {2}%", + "resultNoLoopX": "Nhạc đã sẵn sàng: {0}", + "addingMusicToVideo": "Đang thêm nhạc vào video...", + "downloadModelTitle": "Tải xuống mô hình nhạc?", + "downloadModelQuestionX": "Tạo nhạc cần mô hình ACE-Step 1.5 ({0}).\n\nTải xuống mô hình?", + "downloadingModel": "Đang tải xuống mô hình ACE-Step 1.5...", + "saveAudioTitle": "Lưu nhạc nền", + "audioFileSavedX": "Đã lưu tệp âm thanh: {0}", + "unableToGenerateMusic": "Không thể tạo nhạc", + "unableToAddMusicToVideo": "Không thể thêm nhạc vào video", + "outputLengthTextToSpeech": "Theo giọng nói được tạo - nhạc lặp liền mạch và nhỏ đi khi có người nói", + "addBackgroundMusic": "Thêm nhạc nền", + "addBackgroundMusicHint": "Tạo nhạc cục bộ bằng ACE-Step 1.5 và trộn dưới giọng nói - nhạc nhỏ đi khi có người nói", + "generatingBackgroundMusicDotDotDot": "Đang tạo nhạc nền...", + "mixingBackgroundMusicDotDotDot": "Đang trộn nhạc nền..." }, "goToVideoPosition": "Đi đến vị trí video", "goToVideoPositionDotDotDot": "Đi tới vị trí video...", @@ -2754,6 +3089,11 @@ "openSecondarySubtitleOnVideoPlayerDotDotDot": "Phụ đề phụ trên trình phát video, mở...", "openSecondarySubtitleOnVideoPlayer": "Phụ đề phụ (trên trình phát video)", "removeSecondarySubtitleOnVideoPlayer": "Phụ đề phụ trên trình phát video, xóa", + "editSecondarySubtitleSettings": "Chỉnh sửa cài đặt phụ đề phụ", + "editSecondarySubtitleSettingsDotDotDot": "Chỉnh sửa cài đặt phụ đề phụ...", + "secondarySubtitleRememberSettings": "Nhớ các cài đặt này", + "secondarySubtitleDoNotShowAgain": "Không hiển thị lại hộp thoại này", + "secondarySubtitleJustifyLines": "Canh đều các dòng", "openRecentVideo": "Mở video gần đây", "clearRecentVideos": "Xóa danh sách video gần đây", "cutVideoTitle": "Cắt video", @@ -2765,10 +3105,18 @@ "remuxVideoOutputFormat": "Định dạng xuất:", "remuxVideoOutputFile": "Tập tin xuất:", "remuxVideoRemuxing": "Đang remux video và audio...", + "remuxVideoFinalizing": "Đang hoàn tất tệp đầu ra (di chuyển chỉ mục lên đầu)...", "remuxVideoCompleted": "Remux video thành công.", "remuxVideoFailed": "Lỗi khi remux video.", "remuxVideoPleaseSelectBoth": "Vui lòng chọn cả tập tin video và audio.", "remuxVideoAssRequiresMkv": "Phụ đề ASS/SSA yêu cầu container MKV để bảo toàn kiểu dáng và định dạng.", + "remuxVideoSccRequiresMov": "Phụ đề Scenarist (.scc) được nhúng dưới dạng phụ đề CEA-608 (closed captions), yêu cầu container MOV hoặc MPG. Định dạng đầu ra đã được tự động chuyển sang .mov.", + "remuxVideoSccNotWithWebM": "Phụ đề Scenarist (.scc) cần container MOV, vốn không chứa được video VP9/AV1 của tệp .webm. Hãy xóa tệp .scc hoặc chuyển đổi nó sang định dạng phụ đề khác.", + "remuxVideoMpgMaxTwoCaptionTracks": "Tệp .mpg chứa tối đa hai rãnh closed caption (CC1 và CC3) - hãy xóa bớt tệp phụ đề để chỉ còn một hoặc hai.", + "remuxVideoMccRequiresMpg": "Phụ đề MacCaption (.mcc) được nhúng dưới dạng closed captions CEA-608/708 trong video MPEG-2, yêu cầu container MPG. Định dạng đầu ra đã được tự động chuyển sang .mpg.", + "remuxVideoMpgReencodeVideoX": "Closed captions trong tệp .mpg cần video MPEG-2, còn video hiện là {0}. Mã hóa lại video sang MPEG-2? Việc này mất nhiều thời gian hơn và giảm chất lượng một chút.", + "remuxVideoFileHasNoAudioX": "\"{0}\" không có rãnh âm thanh, nên không thể dùng làm nguồn âm thanh.", + "remuxVideoAddingClosedCaptions": "Đang thêm closed captions...", "remuxVideoSelectAudioTrack": "Chọn track audio", "remuxVideoSelectAudioTrackFor": "Chọn track audio cho {0}", "remuxVideoSelectAudioTrackPrompt": "Tệp '{0}' có chứa {1} track audio. Vui lòng chọn track audio bạn muốn remux:", @@ -2778,26 +3126,51 @@ "remuxVideoSubtitleFiles": "Tập tin phụ đề (tùy chọn, phụ đề mềm):", "remuxVideoSelectAudioTrackDotDotDot": "Chọn track audio...", "remuxVideoFilesX": "{0} tập tin", + "remuxVideoMixAudio": "Trộn âm thanh thành một rãnh", + "remuxVideoVolumePercent": "Âm lượng %:", + "remuxVideoVolumeX": "Âm lượng {0}%", + "remuxVideoFastStart": "Tối ưu cho phát trực tuyến trên web (đưa chỉ mục lên đầu - chậm hơn)", "embedSubtitlesDotDotDot": "Thêm/xóa phụ đề nhúng...", "generateTimeCodes": "Tạo mã thời gian", "checkeredImage": "Ảnh ca-rô", - "saveVideoAsTitle": "Lưu video thành", "promptForFfmpegParamsAndGenerate": "Hỏi tham số ffmpeg và tạo", "cutVideoCutSegments": "Cắt các đoạn", "cutVideoMergeSegments": "Gộp các đoạn", "cutVideoSplitSegments": "Lưu các đoạn riêng lẻ", - "cutVideoType": "Kiểu cắt", - "mpvRenderAuto": "Tự động", - "mpvRenderNative": "Gốc", - "mpvRenderOpenGl": "OpenGL", - "mpvRenderSoftware": "Phần mềm (chậm)", "cutVideoAlsoCutSubtitle": "Cắt cả phụ đề", "cutVideoSubtitleFileGeneratedX": "Đã tạo tệp phụ đề: {0}", + "cutVideoTransition": "Hiệu ứng chuyển tiếp giữa các đoạn", + "cutVideoTransitionDurationSeconds": "Thời lượng (giây)", + "cutVideoFadeInSeconds": "Hiện dần từ màu đen ở đầu (giây)", + "cutVideoFadeOutSeconds": "Mờ dần sang màu đen ở cuối (giây)", + "cutVideoPreviewTransition": "Xem trước hiệu ứng chuyển tiếp", + "cutVideoPreviewTransitionTitle": "Xem trước hiệu ứng chuyển tiếp", + "cutVideoPreviewNeedsJoin": "Không có mối nối nào để xem trước - hãy thêm ít nhất hai đoạn để gộp, hoặc một đoạn để cắt bỏ ở giữa.", + "cutVideoTransitionInfoX": "Mỗi hiệu ứng chuyển tiếp chồng lên các phần nó nối, nên đầu ra ngắn đi {0} giây cho mỗi mối nối. Phụ đề đã cắt được chỉnh lại thời gian cho khớp.", + "cutVideoTransitionFade": "Mờ dần", + "cutVideoTransitionFadeBlack": "Mờ dần qua màu đen", + "cutVideoTransitionFadeWhite": "Mờ dần qua màu trắng", + "cutVideoTransitionFadeGrays": "Mờ dần qua màu xám", + "cutVideoTransitionDissolve": "Hòa tan", + "cutVideoTransitionWipeLeft": "Quét sang trái", + "cutVideoTransitionWipeRight": "Quét sang phải", + "cutVideoTransitionWipeUp": "Quét lên", + "cutVideoTransitionWipeDown": "Quét xuống", + "cutVideoTransitionSlideLeft": "Trượt sang trái", + "cutVideoTransitionSlideRight": "Trượt sang phải", + "cutVideoTransitionSlideUp": "Trượt lên", + "cutVideoTransitionSlideDown": "Trượt xuống", + "cutVideoTransitionSmoothLeft": "Mượt sang trái", + "cutVideoTransitionSmoothRight": "Mượt sang phải", + "cutVideoTransitionCircleOpen": "Mở vòng tròn", + "cutVideoTransitionCircleClose": "Đóng vòng tròn", + "cutVideoTransitionRadial": "Xoay tròn", + "cutVideoTransitionPixelize": "Điểm ảnh hóa", + "cutVideoTransitionBlur": "Làm mờ", "importCurrentSubtitle": "Nhập phụ đề hiện tại", "addRemoveEmbeddedSubtitlesTitle": "Thêm/xóa phụ đề nhúng", "addRemoveEmbeddedSubtitlesMp4Title": "Thêm/xóa phụ đề nhúng (MP4)", "addCurrentSubtitle": "Thêm phụ đề hiện tại", - "embeddedTrackColumnNew": "Mới", "embeddedTrackNoSubtitlesFoundTitle": "Không tìm thấy phụ đề", "embeddedTrackNoSubtitlesFoundMessage": "Tệp phụ đề đã chọn không chứa phụ đề nào.", "embeddedTrackNoTracksTitle": "Chưa thêm luồng nào", @@ -2809,7 +3182,7 @@ "embeddedTrackGeneratingVideoXY": "Đang tạo video... {0}% {1}", "embeddedTrackGeneratingVideo": "Đang tạo video...", "mp4FilesFilter": "Tệp MP4", - "titleOrLanguage": "Tiêu đề/ngôn ngữ", + "embeddedTracksPickVideoHint": "Chọn một tệp video, hoặc thả vào đây, để xem các rãnh phụ đề của nó.", "viewMatroskaTrackX": "Xem luồng Matroska - {0}", "resolutionSeparator": "x", "openFromUrlTitle": "Mở tệp video từ URL", @@ -2819,9 +3192,7 @@ "openFromUrlDownloadAndOpen": "Tải xuống và mở", "openFromUrlDownloadAndOpenDescription": "Lưu video vào máy, sau đó mở nó.", "openFromUrlDownloadAndOpenNote": "Bắt buộc cho chuyển giọng nói thành văn bản và các đỉnh sóng âm.", - "openFromUrlMissing": "Vui lòng nhập URL video trước.", "openFromUrlDownloadingTitle": "Đang tải video xuống", - "openFromUrlSaveAs": "Lưu video thành", "openFromUrlDownloadSubtitles": "Đồng thời tải phụ đề xuống", "openFromUrlDownloadVideo": "Tải video xuống", "openFromUrlIncludeAutoGeneratedSubtitles": "Bao gồm phụ đề tự động tạo (ngôn ngữ gốc)", @@ -2858,12 +3229,15 @@ "reEncodeGeneratingDone": "Đã tạo xong", "reEncodeGeneratedFilesX": "Các tệp đã tạo ({0}):", "reEncodeFfmpegParameters": "Tham số ffmpeg", + "analyzingVideoX": "Đang phân tích video... {0}% {1}", + "analyzingVideoXofY": "Đang phân tích video {0}/{1}... {2}% {3}", + "backgroundImageFileNotSelected": "Chưa chọn tệp hình nền", + "backgroundImageFileDoesNotExistX": "Tệp hình nền không tồn tại: {0}", "voices": "Giọng", "presets": "Mẫu dựng sẵn", "talkerX": "Người nói {0}", "baseModel": "Mô hình cơ bản", "turboModel": "Mô hình turbo", - "ttsUpdateX": "Cập nhật {0}", "ttsEngineNotInstalled": "Chưa cài đặt {0}", "ttsEngineUpdateAvailable": "{0} - có bản cập nhật", "ttsEngineTooOldUpdateRequired": "{0} quá cũ - cần cập nhật", @@ -2886,19 +3260,25 @@ "cloneVoiceTo": "Nhân bản giọng thành", "cloneVoiceNameTitle": "Tên của giọng mới", "cloneVoiceExtractFailed": "Không thể trích xuất âm thanh cho dòng đã chọn.", + "lineXHasNoDuration": "Dòng {0} không có thời lượng (thời gian kết thúc không sau thời gian bắt đầu), nên không có âm thanh để trích xuất.", + "audioClipsSkippedLinesX": "Không trích xuất được âm thanh cho các dòng này, nên chúng đã bị bỏ qua: {0}", "toggleShotChange": "Bật/tắt chuyển cảnh", "resetWaveformZoomAndSpeed": "Đặt lại thu phóng và tốc độ sóng âm", "showOriginalSubtitle": "Hiển thị phụ đề gốc", + "timelineGroupTracksBy": "Nhóm các rãnh phụ đề theo", + "timelineShowThumbnails": "Hiển thị hình thu nhỏ video", + "showSpeechOnly": "Chỉ hiện giọng nói (tạo chậm)", + "isolatingSpeechForWaveformX": "Đang tách riêng giọng nói cho dạng sóng... {0}", + "isolatingSpeechForWaveformFailed": "Không thể tách riêng giọng nói cho dạng sóng - xem nhật ký công cụ", + "speechOnlyWaveformReady": "Dạng sóng giờ chỉ hiển thị giọng nói", "showOnlyWaveform": "Chỉ hiện sóng âm", "showOnlySpectrogram": "Chỉ hiện phổ âm", "showWaveformAndSpectrogram": "Hiện sóng âm và phổ âm", - "spectrogramClassic": "Cổ điển", "spectrogramClassicViridis": "Viridis", "spectrogramClassicPlasma": "Plasma", "spectrogramClassicInferno": "Inferno", "spectrogramClassicTurbo": "Turbo", "spectrogramNeon": "Neon", - "waveformDrawStyleClassic": "Cổ điển", "waveformDrawStyleFancy": "Cầu kỳ", "setVideoPositionAndPauseAndSelectSubtitle": "Đặt vị trí video, tạm dừng và chọn phụ đề", "setVideopositionAndPauseAndSelectSubtitleAndCenter": "Đặt vị trí video, tạm dừng, chọn phụ đề và căn giữa", @@ -2908,7 +3288,6 @@ }, "sync": { "visualSync": "Đồng bộ trực quan", - "sync": "Đồng bộ", "startScene": "Cảnh bắt đầu", "endScene": "Cảnh kết thúc", "playTwoSecondsAndBack": "Phát 2 giây rồi quay lại", @@ -2924,19 +3303,18 @@ "adjustSelectedLinesAndForward": "Điều chỉnh các dòng đã chọn và về sau", "toFrameRate": "Đến tốc độ khung hình", "fromFrameRate": "Từ tốc độ khung hình", + "videoXFrameRateY": "{0} - {1} fps", "adjustAllTimes": "Điều chỉnh tất cả thời gian (hiện sớm hơn/muộn hơn)", "showEarlier": "Hiện sớm hơn", "showLater": "Hiện muộn hơn", - "changeFrameRate": "Đổi tốc độ khung hình", "setSyncPoint": "Đặt điểm đồng bộ", "setSyncPointViaVideo": "Đặt điểm đồng bộ qua video...", "syncPointTimeCode": "Mã thời gian của điểm đồng bộ", "syncPoints": "Các điểm đồng bộ", "pointSync": "Đồng bộ theo điểm", "pointSyncViaOther": "Đồng bộ theo điểm qua phụ đề khác", - "adjustmentX": "Điều chỉnh: {0}", - "totalAdjustmentX": "Tổng điều chỉnh: {0}", - "syncPointCandidateInfo": "Các dòng bắt đầu sau {0}+ giây im lặng được làm nổi bật - chúng thường là điểm đồng bộ đáng tin cậy", + "syncPointCandidateAfterInfo": "Các dòng theo sau là {0}+ giây im lặng được làm nổi bật - chúng thường là điểm đồng bộ đáng tin cậy", + "gapAfter": "Khoảng cách sau", "adjustAllShortcuts": "Phím tắt:\r\n\r\n• Shift + Trái/Phải: Dịch 10 ms\r\n• Ctrl + Trái/Phải: Dịch 100 ms\r\n• Alt + Trái/Phải: Dịch 500 ms", "adjustAllShortcutsFrames": "Phím tắt:\r\n\r\n• Shift + Trái/Phải: Dịch 1 khung hình\r\n• Ctrl + Trái/Phải: Dịch 10 khung hình\r\n• Alt + Trái/Phải: Dịch 1 giây", "offsetInSeconds": "Độ lệch theo giây", @@ -2956,6 +3334,7 @@ "lineMerge": "Gộp dòng", "delayInSecondsBetweenRequests": "Độ trễ tính bằng giây giữa các yêu cầu", "maxBytesPerRequest": "Số byte tối đa mỗi yêu cầu", + "keepMusicLinesUntranslated": "Không dịch các dòng nằm trong ký hiệu nhạc (♪ ... ♪)", "promptText": "Văn bản prompt", "resetPromptToDefault": "Đặt lại prompt về mặc định", "translateEachLineSeparately": "Dịch từng dòng riêng biệt", @@ -2969,11 +3348,10 @@ "readyToTranslate": "Sẵn sàng dịch", "translating": "Đang dịch...", "translationComplete": "Dịch hoàn tất", + "translateInPlaceNoOriginal": "Dịch tại chỗ (không tạo bản gốc)", "translationCancelled": "Đã hủy dịch", "swapLanguages": "Hoán đổi ngôn ngữ nguồn và đích", "xIsAlreadyDownloadedReDownload": "{0} đã được tải xuống. Tải lại?", - "advancedDotDotDot": "Nâng cao...", - "advancedSettings": "Cài đặt nâng cao", "advancedSettingsSubtitle": "Tùy chọn lô, ngữ cảnh và lấy mẫu cho công cụ llama.cpp nâng cao", "context": "Ngữ cảnh", "synopsis": "Tóm tắt nội dung", @@ -2997,6 +3375,7 @@ "useOnlyExtraServerParametersHint": "Khởi động llama-server với các tham số ở trên thay vì thiết lập riêng của Subtitle Edit - chỉ mô hình, host và cổng vẫn được đặt", "serverRunningAtX": "Máy chủ đang chạy tại {0}", "customPromptHint": "Hướng dẫn tùy chỉnh ({0} = ngôn ngữ nguồn, {1} = ngôn ngữ đích); để trống = dùng prompt tích hợp", + "editTranslationHint": "Nhấn vào bản dịch của hàng đã chọn để chỉnh sửa (Enter để lưu, Escape để hủy)", "llamaCppDownloadEngineAndModelPrompt": "llama.cpp cần tải xuống công cụ llama-server và một mô hình dịch. Tải xuống ngay?", "llamaCppDownloadEnginePrompt": "llama.cpp cần tải xuống công cụ llama-server. Tải xuống ngay?", "llamaCppDownloadModelPrompt": "llama.cpp cần tải xuống mô hình dịch đã chọn. Tải xuống ngay?" @@ -3009,7 +3388,6 @@ "dialogStyleDashBothLinesWithSpace": "Gạch đầu cả hai dòng có khoảng trắng", "dialogStyleDashBothLinesWithoutSpace": "Gạch đầu cả hai dòng không có khoảng trắng", "continuationStyle": "Kiểu nối tiếp", - "continuationStyleNone": "Không", "continuationStyleNoneTrailingDots": "Không, dấu chấm cho khoảng ngắt (chỉ ở cuối)", "continuationStyleNoneLeadingTrailingDots": "Không, dấu chấm cho khoảng ngắt", "continuationStyleNoneTrailingEllipsis": "Không, dấu ba chấm cho khoảng ngắt (chỉ ở cuối)", @@ -3020,7 +3398,6 @@ "continuationStyleLeadingTrailingEllipsis": "Dấu ba chấm", "continuationStyleLeadingTrailingDash": "Gạch ngang", "continuationStyleLeadingTrailingDashDots": "Gạch ngang, nhưng dấu chấm cho khoảng ngắt", - "continuationStyleCustom": "Tùy chỉnh", "cpsLineLengthStyle": "CPS/độ dài dòng", "cpsLineLengthStyleCalcAll": "Đếm tất cả ký tự", "cpsLineLengthStyleCalcNoSpaceCpsOnly": "Đếm tất cả trừ khoảng trắng, chỉ CPS", @@ -3033,14 +3410,6 @@ "cpsLineLengthStyleCalcNoSpaceOrPunctuationCpsOnly": "Không khoảng trắng hoặc dấu câu, chỉ CPS", "cpsLineLengthStyleCalcIgnoreArabicDiacritics": "Bỏ qua dấu phụ tiếng Ả Rập", "cpsLineLengthStyleCalcIgnoreArabicDiacriticsNoSpace": "Bỏ qua dấu phụ tiếng Ả Rập, không khoảng trắng", - "timeCodeModeHhMmSsMs": "HH:MM:SS:MS", - "timeCodeModeHhMmSsFf": "HH:MM:SS:FF", - "splitBehaviorPrevious": "Thêm khoảng cách bên trái điểm chia (chọn bên phải)", - "splitBehaviorHalf": "Thêm khoảng cách ở giữa điểm chia (chọn bên trái)", - "splitBehaviorNext": "Thêm khoảng cách bên phải điểm chia (chọn bên trái)", - "subtitleListActionNothing": "Không làm gì", - "subtitleListActionVideoGoToPositionAndPause": "Đến vị trí video và tạm dừng", - "subtitleListActionVideoGoToPositionAndPlay": "Đến vị trí video và phát", "subtitleGridCenterText": "Căn giữa văn bản trong lưới phụ đề", "minGapCalculateDotDotDot": "Tính khoảng cách tối thiểu từ tốc độ khung hình...", "minGapCalculateTitle": "Khoảng cách tối thiểu giữa các phụ đề tính bằng ms", @@ -3072,8 +3441,14 @@ "checkForUpdatesChannelStableAndBeta": "Phiên bản ổn định và beta", "assaAutoSetResolution": "ASSA: đặt độ phân giải (PlayResX/PlayResY) theo video khi mở video", "assaAutoSetResolutionPrompt": "ASSA: hỏi trước khi đổi độ phân giải cho khớp video (nếu không sẽ tự động lấy mẫu lại)", + "videoControls": "Điều khiển video", + "videoControlsEdit": "Chỉnh sửa điều khiển video...", + "videoControlsPositionText": "Văn bản vị trí / thời lượng", + "videoControlsVideoFileName": "Tên tệp video", + "videoControlsPlayerName": "Tên trình phát video", "mergeKeepEndTime": "Gộp dòng: giữ thời điểm kết thúc (cho phép chồng lấn với phụ đề tiếp theo)", "mergeKeepEndTimeOnlyAssa": "Gộp dòng: chỉ giữ thời điểm kết thúc với \"Advanced Sub Station Alpha\"", + "mergeAutoBreak": "Gộp dòng: tự động ngắt dòng văn bản đã gộp (tắt thì giữ ngắt dòng riêng của các dòng)", "defaultSaveLocation": "Vị trí lưu mặc định", "defaultSaveLocationSourceFileFolder": "Thư mục của tệp phụ đề/video", "defaultSaveLocationLastUsedFolder": "Thư mục dùng lần cuối", @@ -3081,18 +3456,10 @@ "defaultSaveLocationSubtitleFileFolder": "Thư mục tệp phụ đề", "defaultSaveLocationCustomFolder": "Thư mục tùy chỉnh", "subtitleListActionVideoGoToPositionAndPlayCurrentAndPause": "Đến vị trí video, phát dòng hiện tại và tạm dừng", - "subtitleListActionEditText": "Đến ô soạn văn bản", "subtitleListActionVideoGoToPositionMinus1SecAndPause": "Đến vị trí video - 1 giây và tạm dừng", "subtitleListActionVideoGoToPositionMinusHalfSecAndPause": "Đến vị trí video - 0.5 giây và tạm dừng", "subtitleListActionVideoGoToPositionMinus1SecAndPlay": "Đến vị trí video - 1 giây và phát", - "subtitleListActionEditTextAndPause": "Đến ô soạn văn bản và tạm dừng tại vị trí video", - "autoBackupEveryMinute": "Mỗi phút", - "autoBackupEveryXthMinute": "Mỗi {0} phút", - "profiles": "Hồ sơ", - "autoBackupDeleteAfterXMonths": "Xóa bản sao lưu tự động sau {0} tháng", "searchSettingsDotDotDot": "Tìm kiếm cài đặt...", - "syntaxColoring": "Tô màu cú pháp", - "waveformSpectrogram": "Sóng âm/phổ âm", "network": "Mạng", "fileTypeAssociations": "Liên kết loại tệp", "textBoxColorTags": "Tô màu thẻ (HTML/ASSA) trong ô văn bản phụ đề", @@ -3125,10 +3492,9 @@ "darkThemeForegroundColor": "Màu chữ giao diện tối", "darkThemeBackgroundColor": "Màu nền giao diện tối", "showGridLines": "Hiện đường kẻ lưới", - "resetSettings": "Đặt lại cài đặt?", - "resetSettingsDetail": "Thao tác này sẽ đặt lại tất cả cài đặt về giá trị mặc định.\n\nTiếp tục?", "showHorizontalLineAboveToolbar": "Hiện đường kẻ ngang phía trên thanh công cụ", "bookmarkColor": "Màu dấu trang", + "spellCheckHighlightColor": "Màu tô sáng kiểm tra chính tả", "singleLineMaxLength": "Độ dài tối đa một dòng", "optimalCharsPerSec": "Số ký tự/giây tối ưu", "maxCharsPerSec": "Số ký tự/giây tối đa", @@ -3141,13 +3507,21 @@ "unbreakSubtitlesShortThan": "Bỏ ngắt dòng phụ đề ngắn hơn", "newEmptyDefaultMs": "Thời lượng mặc định của phụ đề mới (ms)", "timeCodeUpDownStepMs": "Bước tăng/giảm thời gian (ms)", + "moveSelectedLinesStepMs": "Bước phím tắt di chuyển các dòng đã chọn (ms)", + "moveStartEndStepMs": "Bước phím tắt di chuyển bắt đầu/kết thúc (ms)", + "moveLinesShortenNeighbor": "Di chuyển dòng: rút ngắn dòng trước/sau thay vì chồng lên nó", "promptBeforeDelete": "Hỏi trước khi xóa", "rememberPositionAndSize": "Nhớ vị trí và kích thước cửa sổ", + "titleBarFullFileName": "Hiển thị đường dẫn tệp đầy đủ trên thanh tiêu đề", + "showRecentFiles": "Hiển thị tệp gần đây (để mở lại)", "openLastFileOnStart": "Mở tệp gần đây nhất khi khởi động", "autoSave": "Tự động lưu (lưu tệp đang mở trong khi chỉnh sửa)", "autoBackupOn": "Tự động sao lưu", "autoBackupIntervalMinutes": "Khoảng thời gian tự động sao lưu (phút)", "autoBackupDeleteAfterDays": "Thời gian giữ bản sao lưu tự động (ngày)", + "settingsBackupOn": "Tự động sao lưu cài đặt", + "settingsBackupIntervalDays": "Chu kỳ sao lưu cài đặt (ngày, 0 = mỗi lần khởi động)", + "settingsBackupMaxCount": "Số bản sao lưu cài đặt cần giữ", "autoConvertToUtf8": "Tự động chuyển mã hóa sang UTF-8 khi mở", "autoTrimWhiteSpace": "Tự động cắt khoảng trắng", "defaultEncoding": "Mã hóa mặc định", @@ -3163,23 +3537,14 @@ "colorGapTooShort": "Tô màu nếu khoảng cách quá ngắn", "errorBackgroundColor": "Màu nền lỗi", "waveformDrawGridLines": "Vẽ đường kẻ lưới", - "waveformCenterVideoPosition": "Căn giữa vị trí video", + "waveformUseSkiaRenderer": "Dùng trình kết xuất nhanh thử nghiệm", "waveformCenterVideoPositionAlsoWhenPaused": "Căn giữa vị trí video cả khi tạm dừng", + "waveformSelectCurrentSubtitleWhilePaused": "Chọn phụ đề hiện tại cả khi tạm dừng", + "waveformRememberZoom": "Nhớ mức thu phóng (ngang và dọc)", "waveformShowToolbar": "Hiện thanh công cụ", "waveformShowToolbarEdit": "Chỉnh sửa thanh công cụ...", "waveformShowToolbarEditLabel": "Mục trên thanh công cụ", "waveformSpectrogramCombinedWaveformHeight": "Kết hợp sóng âm/phổ âm, % chiều cao sóng âm", - "showWaveformToolbarPlay": "Thanh công cụ: hiện nút phát", - "showWaveformToolbarRepeat": "Thanh công cụ: hiện nút lặp lại", - "showWaveformToolbarRemoveBlankLines": "Thanh công cụ: hiện nút xóa dòng trống", - "showWaveformToolbarNew": "Thanh công cụ: hiện nút phụ đề mới", - "showWaveformToolbarSetStart": "Thanh công cụ: hiện nút đặt điểm bắt đầu", - "showWaveformToolbarSetEnd": "Thanh công cụ: hiện nút đặt điểm kết thúc", - "showWaveformToolbarStartAndOffsetTheRest": "Thanh công cụ: hiện nút đặt điểm bắt đầu và dịch phần còn lại", - "showWaveformToolbarHorizontalZoom": "Thanh công cụ: hiện thanh trượt thu phóng ngang", - "showWaveformToolbarVerticalZoom": "Thanh công cụ: hiện thanh trượt thu phóng dọc", - "showWaveformToolbarVideoPositionSlider": "Thanh công cụ: hiện thanh trượt vị trí video", - "showWaveformToolbarPlaybackSpeed": "Thanh công cụ: hiện tốc độ phát", "waveformFocusTextboxAfterInsertNew": "Chuyển tiêu điểm vào ô văn bản sau khi chèn", "waveformInvertMouseWheel": "Đảo ngược bánh xe chuột", "waveformMouseWheelSetsVideoPosition": "Bánh xe chuột đặt vị trí video", @@ -3200,20 +3565,20 @@ "fixCommonErrorsSkipStep1": "Sửa lỗi thường gặp: bỏ qua bước 1 (chọn mục sửa)", "showPluginsMenu": "Hiện menu Plugin", "proxyAddress": "Địa chỉ proxy", - "username": "Tên người dùng", "password": "Mật khẩu", "defaultFormat": "Định dạng mặc định", "defaultSaveAsFormat": "Định dạng \"Lưu thành\" mặc định", "favoriteSubtitleFormats": "Định dạng phụ đề yêu thích", "favoriteLanguages": "Ngôn ngữ yêu thích", "webVttUseXTimestampMap": "WebVTT: dùng X-TIMESTAMP-MAP (dịch mã thời gian khi tải)", - "showStopButton": "Hiện nút dừng", - "showFullscreenButton": "Hiện nút toàn màn hình", "fullscreenHideControls": "Ẩn điều khiển video khi toàn màn hình", + "showSecondarySubtitleDialog": "Hiển thị hộp thoại kiểu khi mở tệp phụ đề phụ", + "rememberSecondarySubtitleFile": "Nhớ tệp phụ đề phụ", "autoOpenVideoFile": "Tự động mở tệp video khi mở phụ đề", "downloadMpv": "Tải mpv xuống", "downloadVlc": "Tải VLC xuống", "allowSingleLetterShortcutsInTextbox": "Cho phép phím tắt một chữ cái trong ô văn bản", + "allowTextNavigationShortcutsInTextbox": "Cho phép phím tắt trên các phím điều hướng văn bản (Ctrl+Left/Right, Home/End) trong ô văn bản", "spellCheckEnglishTreatInApostropheAsIng": "Kiểm tra chính tả: Xem các từ kết thúc bằng 'in'' là 'ing' (chỉ tiếng Anh)", "goToLineNumberSetsVideoPosition": "Đi đến số dòng cũng đặt vị trí video", "adjustAllTimesRememberLineSelectionChoice": "Điều chỉnh tất cả thời gian, nhớ lựa chọn dòng", @@ -3225,6 +3590,7 @@ "showAssaLayer": "Hiện ô lớp ASSA", "waveformCursorColor": "Màu con trỏ/đầu đọc sóng âm", "waveformShotChangeColor": "Màu điểm chuyển cảnh sóng âm", + "waveformGridColor": "Màu lưới dạng sóng", "waveformParagraphLeftColor": "Màu viền trái sóng âm", "waveformParagraphRightColor": "Màu viền phải sóng âm", "waveformFancyHighColor": "Màu cao kiểu cầu kỳ của sóng âm", @@ -3252,27 +3618,31 @@ "resetSyntaxColoring": "Đặt lại tô màu cú pháp", "resetWaveform": "Đặt lại sóng âm", "resetRules": "Đặt lại quy tắc", - "useFrameMode": "Dùng chế độ khung hình (hh.mm.ss.ff)", + "timeCodeMode": "Chế độ mã thời gian", + "timeCodeModeTime": "Thời gian (hh:mm:ss,zzz)", + "timeCodeModeFrames": "Khung hình (hh:mm:ss:ff)", + "timeCodeModeFrameNumbers": "Số khung hình", + "frameModeSnapToVideoFrames": "Lưu thời gian theo khung hình video (không theo khung hình trong mỗi giây)", "textBoxLimitNewLines": "Giới hạn số dòng trong ô văn bản phụ đề", - "mpvVideoOutput": "Đầu ra video (mpv)", "mpvOpenGl": "libmpv - OpenGL", "mpvSoftwareRendering": "libmpv - Kết xuất phần mềm (chậm)", + "mpvMetalRendering": "libmpv - Metal (thử nghiệm, cần khởi động lại)", "mpvWidRendering": "libmpv - Kết xuất Window ID gốc", "waveFormsAndSpectrogramFoldersContainsX": "Thư mục \"Waveforms\" và \"spectrogram\" chứa {0}", "deleteWaveformAndSpectrogramFoldersQuestion": "Xóa các tệp \"Waveforms\" và \"Spectrogram\"?", "waveformGenerateSpectrogram": "Tạo phổ âm", "waveformAutoGenerate": "Tự động tạo sóng âm khi mở video", "waveformSpectrogramMode": "Chế độ phổ âm", - "waveformCenterOnSingleClick": "Căn giữa khi nhấp đơn", - "waveformSingleClickSelectsSubtitle": "Chọn phụ đề khi nhấp đơn", "waveformRightClickSelectsSubtitle": "Chọn phụ đề khi nhấp chuột phải", - "waveformPauseOnSingleClick": "Tạm dừng khi nhấp đơn", "waveformDrawStyle": "Kiểu vẽ sóng âm", "waveformExtractAudioFormat": "Định dạng trích xuất âm thanh", "waveformExtractAudioSampleRate": "Tần số lấy mẫu trích xuất âm thanh", "waveformExtractAudioSampleRateOriginal": "Gốc (giữ nguyên nguồn)", "waveformExtractAudioBitRate": "Bitrate trích xuất âm thanh (MP3/M4A)", + "ffmpegUseCenterChannelOnly": "Chỉ dùng kênh giữa phía trước cho âm thanh 5.1 (FFmpeg)", "vlcWidRendering": "libVLC - Kết xuất Window ID gốc", + "ffmpegSoftwareRendering": "FFmpeg", + "downloadFfmpegLibs": "Tải xuống thư viện FFmpeg (cho trình phát video FFmpeg)", "subtitleGridEnterKeyAction": "Hành động phím Enter trong lưới phụ đề", "subtitleSingleClickAction": "Hành động nhấp đơn trong lưới phụ đề", "subtitleDoubleClickAction": "Hành động nhấp đúp trong lưới phụ đề", @@ -3290,6 +3660,7 @@ "subtitleGridFormattingShowFormatting": "Hiện định dạng", "subtitleGridFormattingShowTags": "Hiện thẻ", "subtitleGridFormattingHideTags": "Ẩn thẻ", + "subtitleGridFormattingShowFormattingKeepTags": "Hiển thị định dạng, giữ các thẻ không hiển thị", "waveformParagraphBackgroundColor": "Màu nền phụ đề sóng âm", "waveformParagraphSelectedBackgroundColor": "Màu nền phụ đề được chọn trên sóng âm", "waveformAllowOverlap": "Cho phép chồng lấn (khi di chuyển/thay đổi kích thước)", @@ -3299,17 +3670,18 @@ "saveAsBehaviorUseVideoFileName": "Dùng tên tệp video", "saveAsBehaviorUseSubtitleFileName": "Dùng tên tệp phụ đề", "saveAsAppendLanguageCodeTwoLetter": "Hai chữ cái", - "saveAsAppendLanguageCodeThreeLetter": "Ba chữ cái (ISO 639-2/T)", - "saveAsAppendLanguageCodeThreeLetterBibliographic": "Ba chữ cái (ISO 639-2/B)", "saveAsAppendLanguageCodeLanguageName": "Tên ngôn ngữ", "splitOddLineActionWeightTop": "Ưu tiên dòng trên", "splitOddLineActionWeightBottom": "Ưu tiên dòng dưới", "splitOddLinesAction": "Hành động chia dòng lẻ", "ocrUseWordSplitList": "OCR: dùng danh sách tách từ", "ocrGuessUnknownWords": "OCR: thử đoán các từ không xác định", + "spellCheckRememberUseAlwaysList": "Kiểm tra chính tả: nhớ danh sách \"Luôn dùng\"", + "fixShortDisplayTimesAllowMoveStartTime": "Sửa lỗi thường gặp: sửa thời gian hiển thị ngắn có thể di chuyển thời gian bắt đầu", "speechToTextSelectedLinesPromptFirstTimeOnly": "Chuyển giọng nói thành văn bản: các dòng đã chọn, chỉ hỏi ngôn ngữ/công cụ lần đầu", "multipleReplaceShowDotDotDotButtons": "Thay thế hàng loạt: hiện nút menu ngữ cảnh", "gridFocusTextboxAfterInsertNew": "Lưới: chuyển tiêu điểm vào ô văn bản sau khi chèn phụ đề mới", + "undoRedoGoToChangedLine": "Hoàn tác/làm lại: đi tới dòng đã thay đổi (và vị trí video)", "musicSymbol": "Ký hiệu âm nhạc", "musicSymbolsToReplace": "Các ký hiệu âm nhạc cần thay thế (phân cách bằng dấu phẩy)", "textToSpeechPromptMergeContinuationLines": "Chuyển văn bản thành giọng nói: hỏi gộp các dòng nối tiếp", @@ -3318,8 +3690,7 @@ "useFocusedButtonBackgroundColor": "Dùng màu nền cho nút đang có tiêu điểm", "focusedButtonBackgroundColor": "Màu nền nút đang có tiêu điểm", "forceCrLfOnSave": "Buộc CR+LF khi lưu (tệp phụ đề văn bản)", - "showWaveformToolbarPlayNext": "Thanh công cụ: hiện nút phát tiếp theo", - "showWaveformToolbarPlaySelection": "Thanh công cụ: hiện nút phát vùng chọn", + "linuxClipboardUseExternalTool": "Sao chép văn bản qua xclip/wl-copy (giữ ký tự có dấu)", "showFormatLimitWarning": "Cảnh báo khi lưu nếu các dòng vượt quá giới hạn của định dạng (ví dụ SCC 32 ký tự/dòng)", "textBoxButtonShowAutoBreak": "Ô văn bản: hiện nút tự động ngắt dòng", "textBoxButtonShowUnbreak": "Ô văn bản: hiện nút bỏ ngắt dòng", @@ -3331,12 +3702,18 @@ "waveformDoubleClickAction": "Hành động nhấp đúp trên sóng âm (sau hành động nhấp đơn)", "allSettings": "Tất cả cài đặt", "uiScale": "Tỷ lệ giao diện (%)", + "fontScale": "Tỷ lệ phông chữ (%)", + "textSelectionOpacity": "Độ mờ đục vùng chọn văn bản (%)", "waveformToolbarItems": "Mục trên thanh công cụ sóng âm", "matchIconColorToDarkTheme": "Khớp màu biểu tượng với màu chữ giao diện tối", "subtitlePreviewProperties": "Thuộc tính xem trước phụ đề", "usePositionFromSubtitleFile": "Dùng vị trí từ tệp phụ đề (TTML/PAC/EBU STL)", "marginIsPartOfSubtitleArea": "Lề là một phần của vùng phụ đề", "textJustify": "Canh đều các dòng", + "deinterlace": "Khử xen kẽ video", + "deinterlaceOff": "Tắt", + "deinterlaceAuto": "Tự động (chỉ khung hình xen kẽ)", + "deinterlaceAlways": "Luôn luôn", "pixelWidthInfo": "Đường màu xanh lá = giới hạn chiều rộng tối đa | Vùng màu đỏ = văn bản vượt quá giới hạn", "spellCheckEngineHunSpelll": "Hunspell", "spellCheckEngineMsWord": "MS Word", @@ -3345,117 +3722,89 @@ "waveformColorTheme": "Chủ đề màu:", "waveformSaveAsCustomTheme": "Lưu thành chủ đề tùy chỉnh...", "waveformLoadThemeDotDotDot": "Tải chủ đề...", - "waveformExportThemeDotDotDot": "Xuất chủ đề..." + "waveformExportThemeDotDotDot": "Xuất chủ đề...", + "waveformSaveCustomThemeTitle": "Lưu chủ đề tùy chỉnh", + "waveformThemeFileType": "Chủ đề dạng sóng Subtitle Edit", + "waveformThemeHighContrast": "Tương phản cao", + "waveformThemeOceanBlue": "Xanh đại dương", + "waveformThemeWarmSunset": "Hoàng hôn ấm", + "waveformThemeForest": "Rừng xanh", + "waveformThemeMidnightPurple": "Tím nửa đêm", + "waveformThemeRetroAmber": "Hổ phách cổ điển", + "waveformThemeIce": "Băng giá" }, "shortcuts": { - "title": "Phím tắt", "searchShortcuts": "Tìm phím tắt...", - "filter": "Lọc", - "categoryGeneral": "Chung", "categorySubtitleGridAndTextBox": "Danh sách phụ đề & ô văn bản", "categorySubtitleGrid": "Danh sách phụ đề", - "categoryWaveform": "Dạng sóng", "categoryTextBox": "Ô văn bản", "categoryFile": "Tệp", "categoryVideo": "Video", "categorySync": "Đồng bộ hóa", - "categoryTranslate": "Dịch", - "categorySearch": "Tìm kiếm", - "categoryTools": "Công cụ", "categoryAi": "AI", + "categoryCustom": "Tùy chỉnh", + "editCustomShortcut": "Chỉnh sửa phím tắt tùy chỉnh", + "customShortcutTextBoxKeyHint": "Hãy dùng phím kèm Ctrl/Alt ở đây - một phím đơn sẽ không còn gõ được trong ô văn bản.", + "customShortcutNumberX": "Phím tắt tùy chỉnh #{0}", + "customShortcutNumberXY": "Phím tắt tùy chỉnh #{0}: {1}", + "customShortcutStep": "Bước", + "customShortcutSteps": "Các bước", + "customShortcutStepRunCommand": "Chạy lệnh", + "customShortcutStepInsertText": "Chèn văn bản", + "customShortcutStepReplace": "Tìm và thay thế", + "customShortcutInsertAtCursor": "Tại con trỏ", + "customShortcutInsertAtStart": "Ở đầu văn bản", + "customShortcutInsertAtEnd": "Ở cuối văn bản", + "customShortcutSummaryRunCommandX": "Chạy: {0}", + "customShortcutSummaryInsertXY": "Chèn \"{0}\" ({1})", + "customShortcutSummaryReplaceXY": "Thay \"{0}\" bằng \"{1}\"", + "customShortcutSummaryReplaceRegexXY": "Thay biểu thức chính quy \"{0}\" bằng \"{1}\"", + "customShortcutPickCommand": "Vui lòng chọn lệnh để chạy.", + "customShortcutEnterText": "Vui lòng nhập văn bản cần chèn.", + "customShortcutEnterFind": "Vui lòng nhập văn bản cần tìm.", + "customShortcutInvalidRegexX": "Biểu thức chính quy không hợp lệ: {0}", + "customShortcutStepsHint": "Các bước chạy từ trên xuống dưới. Các bước văn bản tác động lên các dòng đã chọn; các lệnh mở cửa sổ sẽ tiếp tục sau khi cửa sổ đóng.", "activeIn": "Hoạt động trong", "activeInEverywhere": "Mọi nơi", - "generalSetupLikeSe4": "Thiết lập giống Subtitle Edit 4 (chủ đề, phím tắt, quy tắc thay thế)", - "generalMergeSelectedLines": "Gộp các dòng đã chọn", - "generalMergeWithPrevious": "Gộp với dòng trước", - "generalMergeWithNext": "Gộp với dòng sau", - "generalMergeWithPreviousAndUnbreak": "Gộp với dòng trước và bỏ ngắt dòng", - "generalMergeWithNextAndUnbreak": "Gộp với dòng sau và bỏ ngắt dòng", - "generalMergeWithPreviousAndAutoBreak": "Gộp với dòng trước và tự động ngắt dòng", - "generalMergeWithNextAndAutoBreak": "Gộp với dòng sau và tự động ngắt dòng", - "generalMergeSelectedLinesAndAutoBreak": "Gộp các dòng đã chọn và tự động ngắt dòng", "generalMergeSelectedLinesAndUnbreak": "Gộp các dòng đã chọn và bỏ ngắt dòng", "generalMergeSelectedLinesAndUnbreakCjk": "Gộp các dòng đã chọn và bỏ ngắt dòng không có khoảng trắng (CJK)", "generalUnbreakNoSpaceCjk": "Bỏ ngắt dòng không có khoảng trắng (CJK)", - "generalMergeSelectedLinesOnlyFirstText": "Gộp các dòng đã chọn, chỉ giữ văn bản đầu tiên", + "generalToggleBreak": "Bật/tắt ngắt dòng", "generalMergeSelectedLinesBilingual": "Gộp các dòng đã chọn dạng song ngữ", - "generalMergeWithPreviousBilingual": "Gộp với dòng trước dạng song ngữ", - "generalMergeWithNextBilingual": "Gộp với dòng sau dạng song ngữ", - "generalMergeOriginalAndTranslation": "Gộp bản gốc và bản dịch", "generalToggleTranslationMode": "Bật/tắt chế độ dịch", - "generalSwitchOriginalAndTranslation": "Hoán đổi bản gốc và bản dịch", - "generalSwitchOriginalAndTranslationTextBoxes": "Hoán đổi ô văn bản bản gốc và bản dịch", "generalToggleTranslationAndOriginalInPreviews": "Chuyển đổi bản dịch và bản gốc trong xem trước video/âm thanh", "generalChooseLayout": "Chọn bố cục", - "generalLayoutChooseX": "Bố cục {0}", - "generalPlayFirstSelected": "Phát dòng được chọn đầu tiên", - "generalGoToFirstSelectedLine": "Đi tới dòng được chọn đầu tiên", - "generalGoToNextEmptyLine": "Đi tới dòng trống tiếp theo", "generalGoToNextSubtitle": "Đi tới phụ đề tiếp theo", "generalGoToNextSubtitlePlayTranslate": "Đi tới phụ đề tiếp theo (phát khi dịch)", "generalGoToNextSubtitleCursorAtEnd": "Đi tới phụ đề tiếp theo (con trỏ ở cuối)", "generalGoToPrevSubtitle": "Đi tới phụ đề trước", "generalGoToPrevSubtitlePlayTranslate": "Đi tới phụ đề trước (phát khi dịch)", - "generalGoToStartOfCurrentSubtitle": "Đi tới đầu phụ đề hiện tại", - "generalGoToEndOfCurrentSubtitle": "Đi tới cuối phụ đề hiện tại", - "generalGoToPreviousSubtitleAndFocusVideo": "Đi tới phụ đề trước và chuyển tiêu điểm sang video", - "generalGoToNextSubtitleAndFocusVideo": "Đi tới phụ đề tiếp theo và chuyển tiêu điểm sang video", - "generalGoToPrevSubtitleAndPlay": "Đi tới phụ đề trước và phát", - "generalGoToNextSubtitleAndPlay": "Đi tới phụ đề tiếp theo và phát", - "generalGoToPreviousSubtitleAndFocusWaveform": "Đi tới phụ đề trước và chuyển tiêu điểm sang dạng sóng", - "generalGoToNextSubtitleAndFocusWaveform": "Đi tới phụ đề tiếp theo và chuyển tiêu điểm sang dạng sóng", - "generalGoToLineNumber": "Đi tới số dòng", "generalGoToFirstLine": "Đi tới dòng đầu tiên", "generalGoToLastLine": "Đi tới dòng cuối cùng", "alsoSetVideoPosition": "Đồng thời đặt vị trí video", "generalGoToVideoPosition": "Đi tới vị trí video", "generalToggleItalic": "Bật/tắt in nghiêng", "generalToggleBold": "Bật/tắt in đậm", - "generalToggleBookmarks": "Bật/tắt dấu trang", - "generalFocusTextBox": "Chuyển tiêu điểm sang ô văn bản", - "generalToggleBookmarksWithText": "Bật/tắt dấu trang kèm văn bản", - "generalEditBookmarks": "Chỉnh sửa dấu trang", - "fileNew": "Mới", "generalToggleUnderline": "Bật/tắt gạch chân", + "generalToggleBox": "Bật/tắt hộp (EBU STL)", "fileOpen": "Mở", "fileOpenKeepVideo": "Mở (giữ video)", "fileSave": "Lưu", "fileSaveAs": "Lưu thành", - "fileSaveAll": "Lưu tất cả", "fileSaveOriginal": "Lưu bản gốc", - "fileSaveOriginalAs": "Lưu bản gốc thành", - "fileOpenOriginalSubtitle": "Mở phụ đề gốc", - "fileCloseOriginalSubtitle": "Đóng phụ đề gốc", - "fileTranslatedSubtitle": "Phụ đề đã dịch", "fileCompare": "So sánh", "fileStatistics": "Thống kê", "fileImportPlainText": "Nhập văn bản thuần", - "fileImportBluRaySupForOcr": "Nhập Blu-ray SUP để OCR", - "fileImportBluRaySupForEdit": "Nhập Blu-ray SUP để chỉnh sửa", - "fileImportTimeCodes": "Nhập mã thời gian", "fileExportEbuStl": "Xuất EBU STL", "fileExportPac": "Xuất PAC", - "fileExportEdlClipName": "Xuất tên clip EDL", - "fileExportPlainText": "Xuất văn bản thuần", - "fileExportCustomTextFormat1": "Xuất định dạng văn bản tùy chỉnh 1", - "fileExportCustomTextFormat2": "Xuất định dạng văn bản tùy chỉnh 2", - "fileExportCustomTextFormat3": "Xuất định dạng văn bản tùy chỉnh 3", "fileExit": "Thoát", "openSeDataFolder": "Mở thư mục Subtitle Edit", - "editFind": "Tìm", - "editFindNext": "Tìm tiếp", "editFindPrevious": "Tìm trước", - "editReplace": "Thay thế", - "editMultipleReplace": "Thay thế nhiều lần", "fillSelectedLinesWithClipboard": "Điền các dòng đã chọn bằng văn bản trong bộ nhớ tạm", - "editModifySelection": "Sửa đổi vùng chọn", - "listSelectAll": "Chọn tất cả", - "listSelectFirst": "Chọn dòng đầu", - "listSelectLast": "Chọn dòng cuối", "listInverseSelection": "Đảo ngược vùng chọn", "listDeleteSelection": "Xóa vùng chọn", + "deleteSelectionEverywhere": "Xóa vùng chọn (mọi nơi)", "rippleDeleteSelection": "Xóa vùng chọn kiểu dồn (ripple)", - "settings": "Cài đặt", "assigned": "Đã gán", "unassigned": "Chưa gán", "pressedKeyX": "Phím đã nhấn: {0}", @@ -3463,6 +3812,7 @@ "detectKey": "Phát hiện phím", "control": "Control", "alt": "Alt", + "altGr": "AltGr", "win": "Win", "shift": "Shift", "controlMac": "⌃", @@ -3473,11 +3823,14 @@ "resetShortcutsDetail": "Bạn có muốn đặt lại tất cả phím tắt về giá trị mặc định không?", "togglePlayPause": "Bật/tắt phát/tạm dừng", "toggleLockTimeCodes": "Bật/tắt khóa mã thời gian", + "toggleTimeCodeMode": "Chuyển chế độ mã thời gian (thời gian/khung hình/số khung hình)", + "toggleScreenPrivacy": "Bật/tắt riêng tư màn hình (ẩn tên tệp, rồi ẩn cả văn bản)", + "screenPrivacyFileNamesHidden": "Riêng tư màn hình: đã ẩn tên tệp", + "screenPrivacyFileNamesAndTextsHidden": "Riêng tư màn hình: đã ẩn tên tệp và văn bản", + "screenPrivacyOff": "Riêng tư màn hình: tắt", "duplicateSelectedLines": "Nhân đôi các dòng đã chọn", "sourceView": "Xem mã nguồn", - "showAlignmentPicker": "Căn chỉnh", "addOrEditBookmark": "Thêm hoặc chỉnh sửa dấu trang", - "listBookmarks": "Liệt kê dấu trang", "toggleBookmark": "Bật/tắt dấu trang (các dòng đã chọn, không có văn bản)", "toggleForcedSelectedLines": "Bật/tắt bắt buộc (các dòng đã chọn)", "goToNextBookmark": "Đi tới dấu trang tiếp theo", @@ -3488,12 +3841,12 @@ "waveformSetStartAndSetEndOfPreviousMinusGap": "Đặt điểm bắt đầu và đặt điểm kết thúc của dòng trước trừ khoảng cách", "waveformSetEndAndStartOfNextAfterGap": "Đặt điểm kết thúc và điểm bắt đầu của dòng sau cộng khoảng cách", "waveformSetEndAndStartOfNextAfterGapAndGoToNext": "Đặt điểm kết thúc và điểm bắt đầu của dòng sau cộng khoảng cách rồi đi tới dòng sau", - "fetchFirstWordFromNextSubtitle": "Lấy từ đầu tiên từ phụ đề tiếp theo", "moveLastWordToNextSubtitle": "Chuyển từ cuối cùng sang phụ đề tiếp theo", "moveLastWordFromFirstLineDownCurrentSubtitle": "Chuyển từ cuối của dòng đầu xuống dưới (phụ đề hiện tại)", "moveFirstWordFromNextLineUpCurrentSubtitle": "Chuyển từ đầu của dòng sau lên trên (phụ đề hiện tại)", "moveTextFromCursorToNextAndGoToNext": "Chuyển văn bản sau vị trí con trỏ sang phụ đề tiếp theo và đi tới phụ đề đó", "moveTextFromCursorToNextAndGoToNextAndPlay": "Chuyển văn bản sau vị trí con trỏ sang phụ đề tiếp theo, đi tới phụ đề đó và phát", + "moveTextFromCursorToNextAndGoToNextAndPlayAndPause": "Chuyển văn bản sau vị trí con trỏ sang phụ đề tiếp theo, đi tới phụ đề đó, phát và tạm dừng ở cuối", "breakAtFirstSpaceFromCursor": "Ngắt tại khoảng trắng đầu tiên từ vị trí con trỏ", "breakAtFirstSpaceFromCursorAndGoToNext": "Ngắt tại khoảng trắng đầu tiên từ vị trí con trỏ và đi tới dòng tiếp theo", "toggleFocusGridAndWaveform": "Chuyển tiêu điểm giữa lưới phụ đề và dạng sóng/phổ âm", @@ -3505,7 +3858,6 @@ "videoGoToPreviousTimeCode": "Đi tới mã thời gian trước", "videoGoToNextTimeCode": "Đi tới mã thời gian tiếp theo", "goToNextLineAndSetVideoPosition": "Đi tới phụ đề tiếp theo và đặt vị trí video", - "textBoxDeleteSelectionNoClipboard": "Ô văn bản: Xóa vùng chọn (không dùng bộ nhớ tạm)", "textBoxDeleteForward": "Ô văn bản: Xóa vùng chọn hoặc ký tự kế tiếp (xóa tới trước)", "textBoxCut": "Ô văn bản: Cắt", "textBoxCut2": "Ô văn bản: Cắt (thay thế)", @@ -3524,6 +3876,7 @@ "listViewColumnTextUp": "Cột, chuyển văn bản lên", "listViewColumnTextDown": "Cột, chuyển văn bản xuống", "autoTranslateSelectedLines": "Tự động dịch các dòng đã chọn...", + "autoTranslateSelectedLinesNoPrompt": "Tự động dịch các dòng đã chọn (không hỏi, dùng công cụ/ngôn ngữ lần trước)", "setAssaResolution": "Đặt độ phân giải ASSA (PlayResX/PlayResY)", "setShortcutForX": "Đặt phím tắt cho \"{0}\"", "commandFileNewKeepVideo": "Mới (giữ video)", @@ -3531,29 +3884,22 @@ "fileCloseOriginal": "Đóng bản gốc", "fileCloseTranslation": "Đóng bản dịch", "restoreAutoBackup": "Khôi phục sao lưu tự động", - "openContainingFolder": "Mở thư mục chứa tệp", "importTimeCodes": "Nhập mã thời gian", "importSubtitleWithManuallyChosenEncoding": "Nhập phụ đề với bảng mã chọn thủ công", "exportBluRaySup": "Xuất Blu-ray SUP", "exportCustomTextFormat": "Xuất định dạng văn bản tùy chỉnh", "exportPlainText": "Xuất văn bản thuần", - "showHistory": "Hiện lịch sử", "toggleRightToLeft": "Bật/tắt phải sang trái", "modifySelection": "Sửa đổi vùng chọn", "adjustDurations": "Điều chỉnh thời lượng", "applyDurationLimits": "Áp dụng giới hạn thời lượng", "batchConvert": "Chuyển đổi hàng loạt", - "bridgeGaps": "Nối khoảng cách", "applyMinGap": "Áp dụng khoảng cách tối thiểu", - "fixCommonErrors": "Sửa lỗi thường gặp", "makeEmptyTranslationFromCurrentSubtitle": "Tạo bản dịch trống từ phụ đề hiện tại", - "mergeLinesWithSameText": "Gộp các dòng có cùng văn bản", - "mergeLinesWithSameTimeCodes": "Gộp các dòng có cùng mã thời gian", "splitBreakLongLines": "Tách/cân bằng lại các dòng dài", "mergeShortLines": "Gộp các dòng ngắn", "mergeContinuationLines": "Gộp các dòng nối tiếp", "snapAllTimesToFrames": "Căn tất cả thời gian theo khung hình", - "removeTextForHearingImpaired": "Xóa văn bản dành cho người khiếm thính", "joinSubtitles": "Ghép các phụ đề", "splitSubtitle": "Tách phụ đề", "spellCheck": "Kiểm tra chính tả", @@ -3575,7 +3921,6 @@ "adjustAllTimes": "Điều chỉnh tất cả thời gian", "visualSync": "Đồng bộ trực quan", "translateViaCopyPaste": "Dịch qua sao chép-dán", - "shortcuts": "Phím tắt", "wordLists": "Danh sách từ", "chooseUiLanguage": "Chọn ngôn ngữ giao diện", "chooseRuleProfile": "Chọn hồ sơ quy tắc", @@ -3586,6 +3931,7 @@ "textBoxItalic": "Ô văn bản in nghiêng", "textBoxBold": "Ô văn bản in đậm", "textBoxUnderline": "Ô văn bản gạch chân", + "textBoxBox": "Hộp trong ô văn bản (EBU STL)", "resetWaveformZoomAndSpeed": "Đặt lại thu phóng dạng sóng và tốc độ phát (play rate)", "togglePlaybackSpeed": "Bật/tắt tốc độ phát (play rate)", "playbackSpeedSlower": "Giảm tốc độ phát (play rate)", @@ -3597,22 +3943,28 @@ "seekSilenceForward": "Tìm khoảng lặng tiến tới", "waveformGuessStart": "Đoán thời điểm bắt đầu từ dạng sóng", "waveformGuessEnd": "Đoán thời điểm kết thúc từ dạng sóng", + "waveformGuessStartAndEnd": "Đoán thời gian bắt đầu và kết thúc từ dạng sóng", "setVideoPositionCurrentSubtitleStart": "Đặt vị trí video tại điểm bắt đầu dòng hiện tại", "goToSubtitlePositionAndPause": "Đi tới vị trí phụ đề và tạm dừng", "setVideoPositionCurrentSubtitleEnd": "Đặt vị trí video tại điểm kết thúc dòng hiện tại", "toggleAudioTracks": "Chuyển đổi các luồng âm thanh", - "listErrors": "Liệt kê lỗi", "goToNextError": "Đi tới lỗi tiếp theo", "goToPreviousError": "Đi tới lỗi trước", "addNameToNameList": "Thêm tên vào danh sách tên", "findDoubleWords": "Tìm từ bị lặp", "findDoubleLines": "Tìm dòng bị lặp", "colorX": "Màu {0}", - "removeColor": "Xóa màu", "surroundWith": "Bao quanh bằng...", "surroundWithXY": "Bao quanh bằng {0}/{1}", - "repeatLine": "Lặp lại dòng", "surroundWithNumberX": "Bao quanh bằng #{0}", + "surroundWithBehavior": "Hành vi", + "surroundWithBehaviorToggle": "Bật/tắt (thêm, hoặc xóa nếu đã có)", + "surroundWithBehaviorAdd": "Thêm (mỗi lần)", + "surroundWithBehaviorRemove": "Xóa (tất cả)", + "surroundWithBehaviorRemoveOnce": "Xóa (mỗi lần một)", + "surroundWithWorksOn": "Tác động lên", + "surroundWithScopeSelectionOrText": "Vùng chọn, nếu không thì toàn bộ văn bản", + "surroundWithScopeEachLine": "Từng dòng", "searchVia": "Tìm kiếm qua", "searchViaX": "Tìm kiếm qua {0}", "searchViaNumberX": "Tìm kiếm qua #{0}", @@ -3640,6 +3992,11 @@ "copySubtitlePathToClipboard": "Sao chép đường dẫn phụ đề vào bộ nhớ tạm", "copySubtitleOriginalPathToClipboard": "Sao chép đường dẫn phụ đề gốc vào bộ nhớ tạm", "focusTextBox": "Chuyển tiêu điểm sang ô văn bản", + "focusSubtitleListView": "Tập trung vào danh sách phụ đề", + "focusWaveform": "Tập trung vào dạng sóng", + "focusOriginalTextBox": "Tập trung vào ô văn bản gốc", + "textBoxGoToStart": "Ô văn bản, đi tới đầu", + "textBoxGoToEnd": "Ô văn bản, đi tới cuối", "sortByNumber": "Sắp xếp theo số", "sortByStartTime": "Sắp xếp theo thời gian \"Hiện\"", "sortByEndTime": "Sắp xếp theo thời gian \"Ẩn\"", @@ -3664,7 +4021,6 @@ "assaStyles": "Kiểu ASSA", "assaProperties": "Thuộc tính ASSA", "assaAttachments": "Tệp đính kèm ASSA", - "assaVideoColorPicker": "ASSA Chọn màu từ video", "recalculateDurationSelectedLines": "Tính lại thời lượng (các dòng đã chọn)", "setDurationMaxCpsSelectedLines": "Đặt thời lượng theo CPS tối đa (các dòng đã chọn)", "toggleWaveformAndSpectrogramHeight": "Bật/tắt chia chiều cao dạng sóng/phổ âm", @@ -3678,9 +4034,9 @@ "selectionToSentenceCase": "Ô văn bản: Phần đã chọn thành Kiểu câu", "selectionToggleCasing": "Ô văn bản: Chuyển đổi kiểu chữ (HOA -> thường -> Kiểu Tiêu Đề)", "googleIt": "Tìm trên Google (văn bản đã chọn)", - "setActorXY": "Đặt diễn viên {0}: {1}", + "setActorX": "Đặt diễn viên: {0}", "setNewActor": "Đặt diễn viên mới...", - "setActorSlotXTitle": "Ô diễn viên {0}", + "setStyleX": "Đặt kiểu: {0}", "toggleDialogDashes": "Bật/tắt gạch đầu dòng hội thoại", "mergeWithLineBeforeAsDialog": "Gộp với dòng trước thành hội thoại", "mergeWithLineAfterAsDialog": "Gộp với dòng sau thành hội thoại", @@ -3691,13 +4047,27 @@ "moveStartOneFrameBackKeepGapPrev": "Lùi điểm bắt đầu một khung hình (giữ khoảng cách với dòng trước nếu gần)", "moveStartOneFrameForwardKeepGapPrev": "Tiến điểm bắt đầu một khung hình (giữ khoảng cách với dòng trước nếu gần)", "moveEndOneFrameBackKeepGapNext": "Lùi điểm kết thúc một khung hình (giữ khoảng cách với dòng sau nếu gần)", - "moveEndOneFrameForwardKeepGapNext": "Tiến điểm kết thúc một khung hình (giữ khoảng cách với dòng sau nếu gần)" + "moveEndOneFrameForwardKeepGapNext": "Tiến điểm kết thúc một khung hình (giữ khoảng cách với dòng sau nếu gần)", + "moveStartXMsBack": "Lùi thời điểm bắt đầu X ms (X đặt trong Cài đặt, cũng dùng trong Đồng bộ trực quan)", + "moveStartXMsForward": "Tiến thời điểm bắt đầu X ms (X đặt trong Cài đặt, cũng dùng trong Đồng bộ trực quan)", + "moveEndXMsBack": "Lùi thời điểm kết thúc X ms (X đặt trong Cài đặt, cũng dùng trong Đồng bộ trực quan)", + "moveEndXMsForward": "Tiến thời điểm kết thúc X ms (X đặt trong Cài đặt, cũng dùng trong Đồng bộ trực quan)", + "moveSelectedLinesXMsBack": "Lùi các dòng đã chọn X ms (X đặt trong Cài đặt)", + "moveSelectedLinesXMsForward": "Tiến các dòng đã chọn X ms (X đặt trong Cài đặt)", + "moveSelectedLinesAndForwardXMsBack": "Lùi các dòng đã chọn và tất cả các dòng sau X ms (X đặt trong Cài đặt)", + "moveSelectedLinesAndForwardXMsForward": "Tiến các dòng đã chọn và tất cả các dòng sau X ms (X đặt trong Cài đặt)", + "moveAllLinesXMsBack": "Lùi tất cả các dòng X ms (X đặt trong Cài đặt)", + "moveAllLinesXMsForward": "Tiến tất cả các dòng X ms (X đặt trong Cài đặt)", + "moveSelectedLinesCustomMsBack": "Di chuyển các dòng đã chọn, lùi số mili giây tùy chỉnh ({0:#,###,##0}), {1}", + "moveSelectedLinesCustomMsForward": "Di chuyển các dòng đã chọn, tiến số mili giây tùy chỉnh ({0:#,###,##0}), {1}", + "moveSelectedLinesAndForwardCustomMsBack": "Di chuyển các dòng đã chọn và tất cả các dòng sau, lùi số mili giây tùy chỉnh ({0:#,###,##0}), {1}", + "moveSelectedLinesAndForwardCustomMsForward": "Di chuyển các dòng đã chọn và tất cả các dòng sau, tiến số mili giây tùy chỉnh ({0:#,###,##0}), {1}", + "moveAllLinesCustomMsBack": "Di chuyển tất cả các dòng, lùi số mili giây tùy chỉnh ({0:#,###,##0}), {1}", + "moveAllLinesCustomMsForward": "Di chuyển tất cả các dòng, tiến số mili giây tùy chỉnh ({0:#,###,##0}), {1}" }, "wordLists": { "title": "Danh sách từ", "addName": "Thêm tên", - "addWord": "Thêm từ", - "addPair": "Thêm cặp", "nameAndIgnoreList": "Danh sách tên/bỏ qua", "userWords": "Danh sách từ của người dùng", "ocrFixList": "Danh sách sửa lỗi OCR", @@ -3714,7 +4084,6 @@ "noPluginsInstalled": "Chưa cài đặt phần mở rộng nào", "getPluginsOnline": "Tải phần mở rộng trực tuyến...", "getPluginsTitle": "Tải phần mở rộng", - "enabled": "Đã bật", "disabled": "Đã tắt", "notSupportedOnThisOs": "Không được hỗ trợ trên hệ điều hành này", "removePluginXConfirm": "Xóa phần mở rộng '{0}'? Thao tác này sẽ xóa thư mục phần mở rộng:{1}", @@ -3731,17 +4100,19 @@ "downloadingXPercent": "Đang tải xuống {0}%...", "pluginXInstalled": "Đã cài đặt '{0}'.", "couldNotInstallPluginX": "Không thể cài đặt '{0}': {1}", - "notInstalled": "Chưa cài đặt", "install": "Cài đặt", "reinstall": "Cài đặt lại", - "update": "Cập nhật", "installedX": "Đã cài đặt ({0})", "updateAvailableXToY": "Có bản cập nhật ({0} → {1})", "applyPluginToWhichLinesX": "Áp dụng '{0}' cho:", "applyToSelectedLinesX": "Các dòng đã chọn ({0})", "applyToAllLinesX": "Tất cả các dòng ({0})", "updateAllXAvailable": "Cập nhật tất cả ({0})", - "updatingXOfY": "Đang cập nhật {0}/{1}..." + "updatingXOfY": "Đang cập nhật {0}/{1}...", + "doNotAskAgain": "Không hỏi lại (thay đổi trong Quản lý phần mở rộng)", + "applyPluginsTo": "Áp dụng phần mở rộng cho", + "askEachTime": "Hỏi mỗi lần", + "allLines": "Tất cả các dòng" }, "help": { "aboutSubtitleEdit": "Giới thiệu Subtitle Edit", @@ -3785,6 +4156,8 @@ "nOcrDatabase": "Cơ sở dữ liệu nOCR", "drawMode": "Chế độ vẽ:", "addNewCharcter": "Thêm ký tự mới", + "addNOcrCharacterTitle": "Thêm ký tự nOCR cho dòng {0}, ký tự {1}/{2} dùng cơ sở dữ liệu \"{3}\"", + "addBinaryOcrCharacterTitle": "Thêm ký tự OCR nhị phân cho dòng {0}, ký tự {1}/{2} dùng cơ sở dữ liệu \"{3}\"", "lineIndexX": "Dòng {0}", "inspectNOcrAdditions": "Kiểm tra các bổ sung nOCR mới", "ocrSelectedLines": "OCR các dòng đã chọn", @@ -3833,6 +4206,8 @@ "binaryImageCompareInspectImageMatches": "\"So sánh hình ảnh nhị phân\" - Kiểm tra các kết quả khớp hình ảnh", "saveBlankTextTitle": "Lưu văn bản trống?", "saveBlankTextPrompt": "Lưu văn bản trống cho hình ảnh?", + "drawnLinesDoNotMatchTitle": "Các đường không khớp với hình ảnh", + "drawnLinesDoNotMatchPrompt": "Một số đường đã vẽ không khớp với hình ảnh (đường xanh lá phải nằm trên ký tự, đường đỏ phải nằm ngoài ký tự), nên ký tự này sẽ không được nhận dạng.\n\nVẫn lưu?", "yesAndNeverAskAgain": "Có và không bao giờ hỏi lại", "importTextFromSubtitleDotDotDot": "Nhập văn bản từ phụ đề...", "importTextFromSubtitleOverwritePrompt": "Một số dòng đã có văn bản OCR. Ghi đè văn bản hiện có?", @@ -3858,7 +4233,6 @@ "vobSubColorsTitle": "Màu VobSub/DVD", "vobSubColorsHeader": "Tùy chỉnh bốn màu VobSub", "vobSubColorsDescription": "Phụ đề VobSub/DVD sử dụng bốn màu được lập chỉ mục: nền, hoa văn, nhấn mạnh 1 và nhấn mạnh 2. Chọn từng màu bên dưới để ghi đè bảng màu nhúng - hữu ích khi màu gốc cho độ tương phản OCR kém.", - "vobSubColorBackground": "Nền", "vobSubColorPattern": "Hoa văn", "vobSubColorEmphasis1": "Nhấn mạnh 1", "vobSubColorEmphasis2": "Nhấn mạnh 2", @@ -3892,9 +4266,26 @@ "crispEmbedSettingsTitle": "Cài đặt CrispEmbed", "crispEmbedDescription": "Công cụ OCR cục bộ với nhiều backend mô hình - tải công cụ và các mô hình tại đây.", "trainNOcrDatabase": "Huấn luyện cơ sở dữ liệu nOCR...", + "optimizeNOcrDatabase": "Tối ưu cơ sở dữ liệu nOCR...", + "optimizeNOcrDatabaseQuestionXY": "Xóa các đường không giúp phân biệt ký tự với các ký tự tương tự trong cơ sở dữ liệu nOCR \"{0}\"?\n\nViệc này làm cơ sở dữ liệu nhỏ hơn và OCR nhanh hơn, thường ít lỗi hơn. Mất tối đa một phút.\n\nBản sao lưu được lưu thành \"{1}\".", + "optimizingNOcrDatabaseXY": "Đang tối ưu cơ sở dữ liệu nOCR... {0}/{1}", + "nOcrDatabaseOptimizedXYZ": "Đã tối ưu cơ sở dữ liệu nOCR \"{0}\": {1:#,##0} -> {2:#,##0} đường.", "startTraining": "Bắt đầu huấn luyện", "abortTraining": "Hủy huấn luyện", "trainingOptions": "Tùy chọn huấn luyện", + "trainNOcrSubtitle": "Kết xuất ký tự bằng các phông chữ đã cài đặt và dạy nOCR hình dạng của chúng. Chọn các phông chữ mà phụ đề của bạn dùng.", + "xFontsSelected": "Đã chọn {0:#,##0}", + "subtitleFonts": "Phông chữ phụ đề", + "emptyDatabase": "Cơ sở dữ liệu trống", + "startFromDatabase": "Bắt đầu từ", + "startFromDatabaseHint": "Thêm các ký tự đã huấn luyện vào bản sao của cơ sở dữ liệu hiện có (khuyến nghị) hoặc bắt đầu từ cơ sở dữ liệu trống", + "fontSizes": "Cỡ phông chữ", + "fontSizesHint": "Các cỡ phông chữ tính bằng pixel để kết xuất, phân cách bằng dấu phẩy, ví dụ \"30, 40\"", + "numberOfLineSegmentsHint": "Số đường kiểm tra cho mỗi ký tự - càng nhiều càng chặt chẽ nhưng chậm hơn", + "enterDatabaseName": "Nhập tên cho cơ sở dữ liệu", + "trainingFontXSizeYCharacterZ": "Đang huấn luyện \"{0}\" ở {1} px: {2}", + "xLearned": "Đã học {0:#,##0}", + "xSkipped": "Đã bỏ qua {0:#,##0}", "charactersToTrain": "Các ký tự cần huấn luyện", "letterCombinationsToTrain": "Các tổ hợp chữ cái có thể bị tách thành một hình ảnh", "importCharactersFromSubtitleFile": "Nhập ký tự từ tệp phụ đề...", @@ -3921,6 +4312,8 @@ "drawZoomOut": "Thu nhỏ (Ctrl+-)", "drawResetView": "Đặt lại chế độ xem (Ctrl+0)", "drawToggleGrid": "Bật/tắt lưới (Ctrl+G)", + "drawTogglePreview": "Bật/tắt xem trước (F9)", + "drawPreviewFailed": "Xem trước thất bại - cần ffmpeg với libass (bộ lọc subtitles)", "drawCopyToClipboard": "Sao chép vào bộ nhớ tạm (Ctrl+C)", "drawShapes": "Hình", "drawSelectedPoint": "Điểm đã chọn", @@ -3928,16 +4321,86 @@ "drawSelectedLayer": "Lớp đã chọn", "drawToolX": "Công cụ: {0}", "drawHelpText": "Nhấp để thêm điểm • Enter/F8 để đóng hình • Shift+Kéo để di chuyển • Ctrl+Cuộn để thu phóng", + "drawMoveToLayer": "Chuyển sang lớp", + "drawFlipHorizontal": "Lật ngang", + "drawFlipVertical": "Lật dọc", + "drawHideShape": "Ẩn hình", + "drawShowShape": "Hiện hình", + "drawHideLayer": "Ẩn lớp", + "drawShowLayer": "Hiện lớp", + "drawDeleteLayer": "Xóa lớp", + "drawDeletePoint": "Xóa điểm", + "drawCancelDrawing": "Hủy vẽ", + "drawLayerX": "Lớp {0}", + "drawImportSvg": "Nhập hình ảnh SVG...", + "drawRotateClockwise": "Xoay 90° theo chiều kim đồng hồ", + "drawConvertToCurve": "Chuyển đoạn thành đường cong", + "drawBackground": "Nền", + "drawPosition": "Vị trí", + "drawZoom": "Thu phóng", + "drawShapeTool": "Công cụ hình", + "drawColorPickerTool": "Lấy màu từ một hình hoặc nền", + "drawShapeLibrary": "Thư viện hình", + "drawShapeLibraryHint": "Kéo trên khung vẽ để đặt một hình, hoặc nhấp để dùng kích thước mặc định. Shift giữ nguyên tỷ lệ.", + "drawAddToLibrary": "Thêm vào thư viện hình...", + "drawRemoveFromLibrary": "Xóa khỏi thư viện hình", + "drawShapeName": "Tên hình", + "drawCategorySpeechBubbles": "Bong bóng thoại", + "drawCategoryArrows": "Mũi tên", + "drawCategoryBasicShapes": "Hình cơ bản", + "drawCategorySymbols": "Ký hiệu", + "drawCategoryMyShapes": "Hình của tôi", + "drawShapeSpeechBubble": "Bong bóng thoại", + "drawShapeSpeechBubbleRight": "Bong bóng thoại, đuôi bên phải", + "drawShapeSpeechBubbleUp": "Bong bóng thoại, đuôi hướng lên", + "drawShapeOvalBubble": "Bong bóng thoại hình bầu dục", + "drawShapeBoxBubble": "Bong bóng thoại hình hộp", + "drawShapeThoughtBubble": "Bong bóng suy nghĩ", + "drawShapeShoutBubble": "Bong bóng hét", + "drawShapeCaptionBox": "Hộp chú thích", + "drawShapeArrow": "Mũi tên", + "drawShapeDoubleArrow": "Mũi tên hai chiều", + "drawShapeChevron": "Chevron", + "drawShapeCurvedArrow": "Mũi tên cong", + "drawShapeRoundedRectangle": "Hình chữ nhật bo góc", + "drawShapeTriangle": "Tam giác", + "drawShapeDiamond": "Hình thoi", + "drawShapePentagon": "Ngũ giác", + "drawShapeHexagon": "Lục giác", + "drawShapeOctagon": "Bát giác", + "drawShapeStar": "Ngôi sao", + "drawShapeRing": "Vòng tròn", + "drawShapePlus": "Dấu cộng", + "drawShapeBanner": "Băng rôn", + "drawShapeHeart": "Trái tim", + "drawShapeCheck": "Dấu kiểm", + "drawShapeMusicNote": "Nốt nhạc", + "drawShapeMusicNotes": "Các nốt nhạc", + "drawShapeLightning": "Tia sét", + "drawShapeCloud": "Đám mây", + "drawShapeMoon": "Mặt trăng", + "drawShapeBadge": "Huy hiệu", + "drawSize": "Kích thước", + "drawLayer": "Lớp", + "drawBackgroundVideoFrame": "Khung hình video (vị trí hiện tại)", + "drawBackgroundVideoFrameAt": "Khung hình video tại...", + "drawBackgroundImage": "Tệp hình ảnh...", + "drawBackgroundNone": "Không có nền", + "drawBackgroundStretch": "Kéo giãn hình ảnh theo khung vẽ", + "drawBackgroundOpacity": "Độ mờ đục nền", + "drawBackgroundVideoFrameFailed": "Không thể lấy khung hình video tại {0}.", + "drawImages": "Hình ảnh", + "drawConvertToLine": "Chuyển đoạn thành đường thẳng", + "drawConvertShapeToCurves": "Chuyển tất cả đường thẳng thành đường cong", + "drawConvertShapeToLines": "Chuyển tất cả đường cong thành đường thẳng", + "drawRotateCounterClockwise": "Xoay 90° ngược chiều kim đồng hồ", + "drawSvgImages": "Hình ảnh SVG", + "drawSvgNoShapes": "Không tìm thấy hình tô màu hoặc nét vẽ nào trong tệp SVG.", "progressBarTitle": "Thanh tiến trình ASSA", "progressBarSettings": "Thanh tiến trình", - "progressBarPosition": "Vị trí", - "progressBarBottom": "Dưới cùng", - "progressBarTop": "Trên cùng", "mouseOverColor": "Màu khi rê chuột", "clickedColor": "Màu khi nhấp", "progressBarForeColor": "Màu tiền cảnh", - "progressBarBackColor": "Màu nền", - "progressBarStyle": "Kiểu", "progressBarSquareCorners": "Góc vuông", "progressBarRoundedCorners": "Góc bo tròn", "progressBarChapters": "Chương", @@ -3946,8 +4409,6 @@ "progressBarXAdjustment": "Điều chỉnh X", "progressBarYAdjustment": "Điều chỉnh Y", "progressBarTextAlignment": "Căn chỉnh văn bản", - "progressBarTakePosFromVideo": "Lấy vị trí từ video", - "progressBarPreview": "Xem trước", "fontCollectorTitle": "Trình thu thập phông chữ", "fontCollectorUsedIn": "Dùng trong", "fontCollectorFontFiles": "Tệp phông chữ", @@ -3994,9 +4455,7 @@ "resolutionResamplerVideoDiffers": "Độ phân giải phụ đề ({0}x{1}) khác với độ phân giải video ({2}x{3}).\nĐổi phụ đề cho khớp với video?", "resolutionResamplerAskOnVideoOpen": "Hỏi khi mở video có độ phân giải khác", "backgroundBoxGenerator": "Tạo hộp nền", - "backgroundBoxPadding": "Đệm", "backgroundBoxFillWidth": "Lấp đầy chiều rộng", - "backgroundBoxBoxColor": "Màu hộp", "backgroundBoxRadius": "Bán kính", "backgroundBoxCircle": "Hình tròn", "backgroundBoxSpikes": "Gai nhọn", @@ -4008,12 +4467,9 @@ "backgroundBoxTornPaperDouble": "Giấy rách (trên & dưới)", "backgroundBoxStarburst": "Tia sáng hình sao", "backgroundBoxScroll": "Cuộn giấy / Giấy da", - "stylesTitle": "Kiểu Advanced Sub Station Alpha", "stylesInFile": "Kiểu trong tệp", "stylesSaved": "Kiểu đã lưu", - "category": "Danh mục", "allCategories": "[Tất cả]", - "defaultCategory": "Mặc định", "newCategory": "Danh mục mới...", "renameCategory": "Đổi tên danh mục...", "deleteCategory": "Xóa danh mục", @@ -4036,13 +4492,26 @@ "graphics": "Đồ họa", "copyToStorageStyles": "Sao chép vào kiểu lưu trữ", "copyToFileStyles": "Sao chép vào kiểu của tệp", + "styleXAlreadyExistsInStorage": "Đã tồn tại kiểu tên \"{0}\" trong kho lưu trữ.\n\nGhi đè, hay giữ cả hai (bản sao sẽ có tên mới)?", + "styleXAlreadyExistsInFile": "Đã tồn tại kiểu tên \"{0}\" trong tệp.\n\nGhi đè, hay giữ cả hai (bản sao sẽ có tên mới)?", + "styleNameCannotBeEmpty": "Tên kiểu không được để trống.", + "styleNameXIsUsedMoreThanOnce": "Tên kiểu \"{0}\" được dùng bởi nhiều hơn một kiểu trong tệp.", + "overwrite": "Ghi đè", + "keepBoth": "Giữ cả hai", + "doThisForAllConflictingStyles": "Làm như vậy cho tất cả các kiểu bị trùng", "setStyleAsDefault": "Đặt kiểu làm mặc định", "takeUsagesFromDotDotDot": "Lấy các lượt sử dụng từ...", "replaceStyleWithDotDotDot": "Thay thế kiểu bằng...", "noAttachmentsFound": "Không tìm thấy tệp đính kèm trong tệp ASSA đã chọn.", "deleteStyleQuestion": "Xóa kiểu?", "deleteStylesQuestion": "Xóa các kiểu?", + "deleteXStylesQuestion": "Bạn có muốn xóa {0} kiểu không?", + "deleteXStylesFromStorageQuestion": "Bạn có muốn xóa {0} kiểu khỏi kho lưu trữ không?", + "deleteStyleXFromStorageQuestion": "Bạn có muốn xóa kiểu \"{0}\" khỏi kho lưu trữ không?", + "deleteStyleXFromFileQuestion": "Bạn có muốn xóa kiểu \"{0}\" khỏi tệp hiện tại không?", "openStyleImportFile": "Mở tệp phụ đề để nhập kiểu từ đó", + "styleImportFiles": "Tệp kiểu (.ass, .sty, danh mục Subtitle Edit 4 .template)", + "ssaStyleImportFiles": "Tệp kiểu (.ssa, .ass, .sty)", "primary": "Chính", "secondary": "Phụ", "applyOverrideTags": "Áp dụng thẻ ghi đè", @@ -4057,7 +4526,6 @@ "spaceIncrease": "Tăng khoảng cách", "popIn": "Bật vào", "spinIn": "Xoay vào", - "playCurrent": "Phát dòng hiện tại", "setPosition": "Đặt vị trí", "rotation": "Xoay", "scaleX": "Tỷ lệ X", @@ -4101,10 +4569,8 @@ "advancedEffectOldMovieDescription": "Mô phỏng máy chiếu phim 35mm cổ điển với nhiễu, tối góc và vết xước", "advancedEffectNeonBurst": "Bùng nổ neon", "advancedEffectNeonBurstDescription": "Phụ đề kiểu 'Shorts' năng lượng cao với ánh sáng neon rực rỡ và hoạt ảnh 'bật' phóng to vào", - "advancedEffectSettings": "Cài đặt", "advancedEffectSnowFlakeCount": "Số bông tuyết", "advancedEffectStarfieldStarCount": "Số ngôi sao", - "advancedEffectStarfieldSpeed": "Tốc độ", "advancedEffectGlitch": "Nhiễu số", "advancedEffectGlitchDescription": "Nhiễu kỹ thuật số với quang sai màu, chớp trắng và lớp phủ méo hình", "advancedEffectBounceIn": "Nảy vào", @@ -4113,8 +4579,6 @@ "advancedEffectFirefliesDescription": "Các chấm vàng hổ phách phát sáng ấm áp trôi tự nhiên trên màn hình với ánh sáng nhấp nháy", "advancedEffectMatrix": "Matrix", "advancedEffectMatrixDescription": "Các cột ký tự xanh lá rơi xuống với văn bản phụ đề hiện dần từng chữ từ cơn mưa ký tự", - "advancedEffectAudioBars": "Thanh âm thanh (dạng sóng)", - "advancedEffectAudioBarsDescription": "Các thanh cân bằng hoạt hình theo dạng sóng âm thanh — các thanh cuộn sang trái như dạng sóng và nhấp nhô theo âm thanh", "advancedEffectAudioPulse": "Nhịp văn bản theo âm thanh", "advancedEffectAudioPulseDescription": "Văn bản phụ đề phát sáng và nhấp nhô theo âm lượng — đoạn yên tĩnh hiển thị văn bản bình thường, đỉnh âm lớn thêm quầng sáng màu và phóng to nhẹ", "advancedEffectConfetti": "Bùng nổ pháo giấy", @@ -4128,7 +4592,6 @@ "advancedEffectFancyKaraokeGlow": "Phát sáng từ đang hát", "advancedEffectFancyKaraokeActiveColor": "Màu từ đang hát", "advancedEffectFancyKaraokeInactiveColor": "Màu từ không hoạt động", - "advancedEffectFancyKaraokeInactiveOpacity": "Độ mờ từ không hoạt động (0-255)", "advancedEffectWordSpacingPixels": "Khoảng cách (điểm ảnh)", "advancedEffectSlowZoomOut": "Thu nhỏ chậm", "advancedEffectSlowZoomOutDescription": "Văn bản bắt đầu hơi lớn hơn và thu nhỏ nhẹ nhàng về kích thước bình thường trong suốt thời lượng phụ đề", @@ -4144,7 +4607,6 @@ "advancedEffectSlideInLeftDescription": "Văn bản trượt vào từ ngoài màn hình bên trái, dừng lại, rồi thoát ra lại bên trái", "advancedEffectSlideInRight": "Trượt vào từ bên phải", "advancedEffectSlideInRightDescription": "Văn bản trượt vào từ ngoài màn hình bên phải, dừng lại, rồi thoát ra lại bên phải", - "advancedEffectFadeInOut": "Hiện dần/mờ dần", "advancedEffectFadeInOutDescription": "Văn bản hiện dần ở đầu và mờ dần ở cuối mỗi phụ đề", "advancedEffectWordFlip3D": "Lật chữ 3D", "advancedEffectWordFlip3DDescription": "Mỗi từ gập vào với hiệu ứng lật 3D và bật đàn hồi khi được nói ra — kiểu phụ đề 'Shorts' hiện đại", diff --git a/src/ui/Controls/AudioVisualizerControl/AudioVisualizer.cs b/src/ui/Controls/AudioVisualizerControl/AudioVisualizer.cs index e26227db852..024c236c173 100644 --- a/src/ui/Controls/AudioVisualizerControl/AudioVisualizer.cs +++ b/src/ui/Controls/AudioVisualizerControl/AudioVisualizer.cs @@ -330,12 +330,13 @@ public Color ParagraphSelectedBackground private List _shotChanges = new List(); /// - /// Shot changes (seconds) + /// Shot changes (seconds), kept sorted - snapping, drawing and the extend-to-shot-change + /// commands binary-search them, while imported lists can come in any order. /// public List ShotChanges { get => _shotChanges; - set { _shotChanges = value; } + set => _shotChanges = ShotChangesHelper.EnsureSorted(value ?? new List()); } /// @@ -379,8 +380,15 @@ private int FindNeighborIndex(List paragraphs, int index, var isSameTrack = IsSameTrack; var paragraph = paragraphs[index]; + var stack = _dragStack; for (var i = index + step; i >= 0 && i < paragraphs.Count; i += step) { + // Lines dragged along are not neighbours to stop at + if (stack != null && stack.Contains(paragraphs[i])) + { + continue; + } + if (isSameTrack == null || isSameTrack(paragraph, paragraphs[i])) { return i; @@ -530,6 +538,10 @@ private double MaxStartPositionSeconds private readonly List _displayableParagraphs = new(); private protected IReadOnlyList DisplayableParagraphs => _displayableParagraphs; + // The whole list the last LoadParagraphs got, unthinned - a dense section drops lines from + // _displayableParagraphs, and a same-time drag must not leave those layers behind. + private IReadOnlyList _allParagraphs = Array.Empty(); + // The paragraph sets as they stood before the current LoadParagraphs, so it can tell whether // anything it draws actually changed. Reused across calls, so the check allocates nothing. private readonly List _previousDisplayableParagraphs = new(); @@ -844,6 +856,8 @@ private void OnTapped(object? sender, TappedEventArgs e) } _activeParagraph = null; + + _dragStack = null; return; } @@ -1113,6 +1127,7 @@ private void OnPointerReleased(object? sender, PointerReleasedEventArgs e) _interactionMode = InteractionMode.None; _activeParagraph = null; + _dragStack = null; } var showContextMenu = false; @@ -1157,6 +1172,7 @@ private void OnPointerReleased(object? sender, PointerReleasedEventArgs e) { _interactionMode = InteractionMode.None; _activeParagraph = null; + _dragStack = null; return; } } @@ -1171,6 +1187,8 @@ private void OnPointerReleased(object? sender, PointerReleasedEventArgs e) // } _activeParagraph = null; + + _dragStack = null; return; } @@ -1203,6 +1221,8 @@ private void OnPointerReleased(object? sender, PointerReleasedEventArgs e) } _activeParagraph = null; + + _dragStack = null; return; } } @@ -1218,6 +1238,7 @@ private void OnPointerReleased(object? sender, PointerReleasedEventArgs e) _interactionMode = InteractionMode.None; _activeParagraph = null; + _dragStack = null; return; } @@ -1244,6 +1265,7 @@ InteractionMode.ResizeLeftAnd or _interactionMode = InteractionMode.None; _activeParagraph = null; + _dragStack = null; _selectionMoveSnapshot.Clear(); InvalidateVisual(); @@ -1313,6 +1335,7 @@ private void OnPointerPressed(object? sender, PointerPressedEventArgs e) _originalStartSeconds = p.StartTime.TotalSeconds; _originalEndSeconds = p.EndTime.TotalSeconds; _originalDurationSeconds = p.Duration.TotalSeconds; + _dragStack = GetSameTimeStack(p); var displayableParagraphs = _displayableParagraphs; if (displayableParagraphs.Count == 0) @@ -1403,15 +1426,18 @@ private void OnPointerPressed(object? sender, PointerPressedEventArgs e) if (AllSelectedParagraphs is { Count: > 1 } && AllSelectedParagraphs.Contains(p)) { _selectionMoveSnapshot.Clear(); - foreach (var selected in AllSelectedParagraphs) + foreach (var line in GetSelectionWithSameTimeStacks(AllSelectedParagraphs)) { - _selectionMoveSnapshot.Add((selected, selected.StartTime.TotalSeconds, selected.Duration.TotalSeconds)); + _selectionMoveSnapshot.Add((line, line.StartTime.TotalSeconds, line.Duration.TotalSeconds)); } _interactionMode = InteractionMode.MovingSelection; } else { + // A same-time stack (ASSA: a drawing is one line per layer) moves as the grabbed + // line does - clamped against the lines around the stack and snapped like any + // single-line move - and the rest of the stack follows (see _dragStack) _interactionMode = InteractionMode.Moving; } } @@ -1423,6 +1449,90 @@ private void OnPointerPressed(object? sender, PointerPressedEventArgs e) } } + /// + /// True when lines with exactly the same times belong together (ASSA: a drawing is one line + /// per layer, a sign often several lines) - a drag on one then moves or resizes all of them. + /// + internal Func? MovesSameTimeLinesTogether { get; set; } + + /// + /// The lines dragged along with the active one: the lines with exactly its times, itself + /// included; null for a drag of one line. + /// + private List? _dragStack; + + private List? GetSameTimeStack(SubtitleLineViewModel paragraph) + { + if (MovesSameTimeLinesTogether?.Invoke() != true) + { + return null; + } + + // The full list, not _displayableParagraphs: thinning drops same-start lines. Lines in + // another layout-14 track are not part of the stack. Drag start only, so a linear scan. + var isSameTrack = IsSameTrack; + var stack = new List(); + foreach (var p in _allParagraphs) + { + if (p.StartTime == paragraph.StartTime && p.EndTime == paragraph.EndTime && + (p == paragraph || isSameTrack == null || isSameTrack(paragraph, p))) + { + stack.Add(p); + } + } + + return stack.Count > 1 ? stack : null; + } + + /// + /// The selected lines plus, when same-time lines move together, every line in the same + /// track with exactly the times of a selected one - so dragging a selection that holds one + /// layer of a drawing does not split the drawing. One pass over the full list. + /// + private List GetSelectionWithSameTimeStacks(List selection) + { + var result = new List(selection); + if (MovesSameTimeLinesTogether?.Invoke() != true) + { + return result; + } + + var added = new HashSet(selection); + var selectedByTimes = new Dictionary<(TimeSpan Start, TimeSpan End), List>(); + foreach (var selected in selection) + { + var key = (selected.StartTime, selected.EndTime); + if (!selectedByTimes.TryGetValue(key, out var list)) + { + list = new List(); + selectedByTimes[key] = list; + } + + list.Add(selected); + } + + var isSameTrack = IsSameTrack; + foreach (var p in _allParagraphs) + { + if (added.Contains(p) || !selectedByTimes.TryGetValue((p.StartTime, p.EndTime), out var sameTimes)) + { + continue; + } + + foreach (var selected in sameTimes) + { + if (isSameTrack == null || isSameTrack(selected, p)) + { + added.Add(p); + result.Add(p); + break; + } + } + } + + return result; + } + /// /// A drag can end without a PointerReleased - the window loses activation, a flyout grabs the /// pointer, the device disappears. Undo change detection must not stay suppressed afterwards, @@ -1595,6 +1705,8 @@ private void OnPointerMoved(object? sender, PointerEventArgs e) _activeParagraph = _activeParagraphPrevious; _originalStartSeconds = _activeParagraph.StartTime.TotalSeconds; _originalEndSeconds = _activeParagraph.EndTime.TotalSeconds; + // The stack dragged along is now the other paragraph's + _dragStack = GetSameTimeStack(_activeParagraph); // The originals were just re-captured from the other paragraph, so the drag // anchor must restart from the current pointer position too. _startPointerSeconds = RelativeXPositionToSeconds(point.X); @@ -1618,6 +1730,7 @@ private void OnPointerMoved(object? sender, PointerEventArgs e) _activeParagraph = _activeParagraphNext; _originalStartSeconds = _activeParagraph.StartTime.TotalSeconds; _originalEndSeconds = _activeParagraph.EndTime.TotalSeconds; + _dragStack = GetSameTimeStack(_activeParagraph); // See the ResizingLeftOr branch above. _startPointerSeconds = RelativeXPositionToSeconds(point.X); dragDeltaSeconds = 0; @@ -1883,6 +1996,22 @@ private void OnPointerMoved(object? sender, PointerEventArgs e) break; } + // A move or edge drag takes the lines with the same times along with it. They started + // with the active line's times, so copying its clamped and snapped times keeps the stack + // together; the neighbours it was clamped against already skip the stack members. + if (_dragStack != null && _activeParagraph != null && _dragStack.Contains(_activeParagraph) && + _interactionMode is InteractionMode.Moving or InteractionMode.ResizingLeft or InteractionMode.ResizingRight or + InteractionMode.ResizeLeftAnd or InteractionMode.ResizeRightAnd) + { + foreach (var line in _dragStack) + { + if (line != _activeParagraph) + { + line.SetTimes(_activeParagraph.StartTime, _activeParagraph.EndTime); + } + } + } + // Past the early returns above, every remaining interaction mode has just rewritten // the active paragraph's times - see IsEditingWithPointer. _lastPointerEditMs = Environment.TickCount64; @@ -4412,6 +4541,7 @@ private static bool SameParagraphs(List a, List subtitle, int primarySelectedIndex, List selectedIndexes) { _displayableParagraphs.Clear(); + _allParagraphs = subtitle; SelectedParagraph = null; AllSelectedParagraphs.Clear(); diff --git a/src/ui/Controls/AudioVisualizerControl/TimelineThumbnailCache.cs b/src/ui/Controls/AudioVisualizerControl/TimelineThumbnailCache.cs index 6e417e4dbac..83ce5a1761d 100644 --- a/src/ui/Controls/AudioVisualizerControl/TimelineThumbnailCache.cs +++ b/src/ui/Controls/AudioVisualizerControl/TimelineThumbnailCache.cs @@ -5,6 +5,7 @@ using System.Diagnostics; using System.Globalization; using System.IO; +using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; @@ -14,6 +15,18 @@ namespace Nikse.SubtitleEdit.Controls.AudioVisualizerControl; /// Small video frames for the filmstrip row of . Frames are pulled /// out one at a time by ffmpeg on a background task, newest request first, so scrolling past a /// stretch of the video costs nothing once the view has moved on. +/// +/// A frame is first taken from the keyframe before it, decoding nothing else. An exact seek +/// decodes every frame from that keyframe on, with all cores, which starved video playback +/// (#15956). Only when the keyframe is too far away for the tile is the exact frame decoded, +/// on one thread. ffmpeg runs at below normal priority either way. +/// +/// +/// No ffmpeg is started while is set (the video playing): on macOS .NET +/// starts a process with a full fork(), and malloc is locked for every thread meanwhile - mpv's +/// included - which still gave jitter and crackling audio with an idle CPU (#15956). Frames +/// asked for meanwhile wait in the queue. +/// /// internal sealed class TimelineThumbnailCache { @@ -24,23 +37,50 @@ internal sealed class TimelineThumbnailCache private const int MaxConsecutiveFailures = 5; private const int FfmpegTimeoutMs = 15_000; + private static readonly Regex PtsTimeRegex = new(@"pts_time:\s*(-?[0-9.]+)", RegexOptions.CultureInvariant); + private readonly Lock _lock = new(); private readonly Dictionary _thumbnails = new(); - private readonly List _pending = new(); + private readonly List<(long Milliseconds, long ToleranceMilliseconds)> _pending = new(); private string _videoFileName = string.Empty; private int _generation; private int _consecutiveFailures; private bool _workerRunning; + private bool _paused; /// Raised on a background thread when a requested frame has arrived. public event Action? ThumbnailReady; + /// + /// While set, no new frames are extracted (a run already going finishes). Clearing it works + /// off the frames asked for meanwhile, newest first. + /// + public bool Paused + { + get + { + lock (_lock) + { + return _paused; + } + } + set + { + lock (_lock) + { + _paused = value; + StartWorkerIfNeeded(); + } + } + } + /// /// The frame at , or null while it is not there yet (it is /// then queued). Null as well for a file ffmpeg cannot read - after a few failures in a row - /// the file is left alone. + /// the file is left alone. A keyframe up to before + /// the spot is good enough. /// - public Bitmap? Get(string? videoFileName, long milliseconds) + public Bitmap? Get(string? videoFileName, long milliseconds, long toleranceMilliseconds) { if (string.IsNullOrEmpty(videoFileName)) { @@ -70,45 +110,54 @@ internal sealed class TimelineThumbnailCache return null; } - _pending.Remove(milliseconds); - _pending.Add(milliseconds); + _pending.RemoveAll(p => p.Milliseconds == milliseconds); + _pending.Add((milliseconds, toleranceMilliseconds)); if (_pending.Count > MaxPendingRequests) { _pending.RemoveAt(0); } - if (!_workerRunning) - { - _workerRunning = true; - _ = Task.Run(Work); - } + StartWorkerIfNeeded(); } return null; } + // Called with _lock held + private void StartWorkerIfNeeded() + { + if (!_workerRunning && !_paused && _pending.Count > 0) + { + _workerRunning = true; + _ = Task.Run(Work); + } + } + private void Work() { while (true) { string videoFileName; long milliseconds; + long toleranceMilliseconds; int generation; lock (_lock) { - if (_pending.Count == 0) + if (_pending.Count == 0 || _paused) { _workerRunning = false; return; } - milliseconds = _pending[^1]; + (milliseconds, toleranceMilliseconds) = _pending[^1]; _pending.RemoveAt(_pending.Count - 1); videoFileName = _videoFileName; generation = _generation; } - var bitmap = ExtractFrame(videoFileName, milliseconds, out var failed); + var failed = false; + var bitmap = ExtractKeyframe(videoFileName, milliseconds, toleranceMilliseconds) ?? + ExtractFrame(videoFileName, milliseconds, out failed); lock (_lock) { @@ -149,30 +198,77 @@ private void Work() } } + /// + /// The keyframe at or before , decoding keyframes only. Null + /// when ffmpeg gives nothing, or the keyframe is more than + /// away. + /// + private static Bitmap? ExtractKeyframe(string videoFileName, long milliseconds, long toleranceMilliseconds) + { + if (!File.Exists(videoFileName)) + { + return null; + } + + // "-noaccurate_seek" keeps the frames before the seek point and "-skip_frame nokey" + // decodes keyframes only, so the first frame out is the keyframe the seek landed on. + // showinfo logs its time relative to the seek point (negative when before it). + var arguments = $"-hide_banner -nostats -noaccurate_seek -skip_frame nokey -threads 1 -ss {ToSeconds(milliseconds)} " + + $"-i \"{videoFileName}\" -frames:v 1 -an -sn -dn " + + $"-vf showinfo,scale=-2:{ThumbnailHeight} -f image2pipe -c:v png -"; + var bitmap = RunFfmpeg(arguments, readLog: true, out _, out var log); + if (bitmap == null) + { + return null; + } + + var match = PtsTimeRegex.Match(log); + if (match.Success && + double.TryParse(match.Groups[1].Value, NumberStyles.Float, CultureInfo.InvariantCulture, out var offsetSeconds) && + Math.Abs(offsetSeconds * 1000.0) <= toleranceMilliseconds) + { + return bitmap; + } + + return null; + } + + /// The exact frame at , decoded on one thread. private static Bitmap? ExtractFrame(string videoFileName, long milliseconds, out bool failed) { failed = true; - try + if (!File.Exists(videoFileName)) { - if (!File.Exists(videoFileName)) - { - return null; - } + return null; + } - var seconds = (milliseconds / 1000.0).ToString("0.###", CultureInfo.InvariantCulture); + // stderr is silenced rather than redirected, so only one pipe has to be drained + var arguments = $"-v quiet -threads 1 -ss {ToSeconds(milliseconds)} -i \"{videoFileName}\" -frames:v 1 -an -sn -dn " + + $"-vf scale=-2:{ThumbnailHeight} -f image2pipe -c:v png -"; + return RunFfmpeg(arguments, readLog: false, out failed, out _); + } + + private static string ToSeconds(long milliseconds) + { + return (milliseconds / 1000.0).ToString("0.###", CultureInfo.InvariantCulture); + } + + private static Bitmap? RunFfmpeg(string arguments, bool readLog, out bool failed, out string log) + { + failed = true; + log = string.Empty; + try + { using var process = new Process { StartInfo = { FileName = FfmpegHelper.GetFfmpegLocation(), - // Input seeking ("-ss" before "-i") lands on a nearby keyframe, which is - // both fast and plenty for a thumbnail. stderr is silenced rather than - // redirected, so only one pipe has to be drained. - Arguments = $"-v quiet -ss {seconds} -i \"{videoFileName}\" -frames:v 1 -an -sn " + - $"-vf scale=-2:{ThumbnailHeight} -f image2pipe -c:v png -", + Arguments = arguments, UseShellExecute = false, CreateNoWindow = true, RedirectStandardOutput = true, + RedirectStandardError = readLog, } }; @@ -180,6 +276,19 @@ private void Work() process.Start(); #pragma warning restore CA1416 + try + { + // Thumbnails are a nice-to-have - the video player comes first + process.PriorityClass = ProcessPriorityClass.BelowNormal; + } + catch + { + // not allowed, or already gone + } + + // stderr is drained alongside stdout, or a full pipe would block ffmpeg + var logTask = readLog ? process.StandardError.ReadToEndAsync() : Task.FromResult(string.Empty); + using var timeout = new CancellationTokenSource(FfmpegTimeoutMs); using var registration = timeout.Token.Register(() => { @@ -196,6 +305,7 @@ private void Work() using var stream = new MemoryStream(); process.StandardOutput.BaseStream.CopyTo(stream); process.WaitForExit(); + log = logTask.GetAwaiter().GetResult(); if (stream.Length == 0) { // ffmpeg exits with 0 and writes nothing when the seek is past the last frame diff --git a/src/ui/Controls/AudioVisualizerControl/TimelineTracks.cs b/src/ui/Controls/AudioVisualizerControl/TimelineTracks.cs index edabad19f61..4d45566f671 100644 --- a/src/ui/Controls/AudioVisualizerControl/TimelineTracks.cs +++ b/src/ui/Controls/AudioVisualizerControl/TimelineTracks.cs @@ -139,7 +139,14 @@ public TimelineTracks() // nothing announces. Looking twice a second is far cheaper than looking per frame, and // unlike Render it is allowed to change the control's height. _trackTimer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(500) }; - _trackTimer.Tick += (_, _) => UpdateTracks(); + _trackTimer.Tick += (_, _) => + { + UpdateTracks(); + + // Nothing may be drawn right after playback stops, and the frames queued while it + // played should still come. + UpdateThumbnailsPaused(); + }; PointerEntered += (_, e) => Forward(e, e.GetPosition(this)); PointerMoved += (_, e) => Forward(e, e.GetPosition(this)); @@ -561,6 +568,10 @@ private void DrawFilmstrip(DrawingContext context, AudioVisualizer source, Rect var tileWidth = step * pixelsPerSecond; var firstTile = Math.Max(0, (long)Math.Floor(startSeconds / step)); + // A keyframe within half a tile is the right picture for it, and much cheaper to get + var toleranceMilliseconds = (long)Math.Round(step * 500.0); + var isPlaying = UpdateThumbnailsPaused(); + // No tiles past the end of the media (as far as the waveform knows it): there is no // picture there, only an ffmpeg run per tile to find that out. var lastTileSeconds = endSeconds; @@ -569,13 +580,29 @@ private void DrawFilmstrip(DrawingContext context, AudioVisualizer source, Rect lastTileSeconds = Math.Min(endSeconds, wavePeaks.LengthInSeconds); } + // While paused, the next screen is fetched too, so playback finds its frames there. It is + // asked for first: the newest request is served first, so the visible tiles go before it. + if (!isPlaying) + { + var aheadEndSeconds = endSeconds + (endSeconds - startSeconds); + if (source.WavePeaks is { LengthInSeconds: > 0 } peaks) + { + aheadEndSeconds = Math.Min(aheadEndSeconds, peaks.LengthInSeconds); + } + + for (var tile = Math.Max(firstTile, (long)Math.Ceiling(endSeconds / step)); tile * step < aheadEndSeconds; tile++) + { + _thumbnails.Get(videoFileName, GetFilmstripFrameMilliseconds(tile, step), toleranceMilliseconds); + } + } + for (var tile = firstTile; tile * step < lastTileSeconds; tile++) { var x = Math.Round((tile * step - startSeconds) * pixelsPerSecond); var tileRect = new Rect(x, row.Y, Math.Max(1, tileWidth - 1), row.Height); context.DrawRectangle(_tileBrush, null, tileRect); - var bitmap = _thumbnails.Get(videoFileName, GetFilmstripFrameMilliseconds(tile, step)); + var bitmap = _thumbnails.Get(videoFileName, GetFilmstripFrameMilliseconds(tile, step), toleranceMilliseconds); if (bitmap == null || bitmap.Size.Height <= 0) { continue; @@ -600,6 +627,21 @@ private void DrawFilmstrip(DrawingContext context, AudioVisualizer source, Rect } } + /// + /// No frames are extracted while the video plays (see ). + /// Returns whether it plays. + /// + private bool UpdateThumbnailsPaused() + { + var isPlaying = _source?.GetIsVideoPlaying?.Invoke() == true; + if (_thumbnails.Paused != isPlaying) + { + _thumbnails.Paused = isPlaying; + } + + return isPlaying; + } + private void DrawSubtitles(DrawingContext context, AudioVisualizer source, double width, double startSeconds, double pixelsPerSecond) { source.CopyDisplayableParagraphs(_paragraphs); diff --git a/src/ui/Controls/ButtonPairPanel.cs b/src/ui/Controls/ButtonPairPanel.cs new file mode 100644 index 00000000000..76ba7f88757 --- /dev/null +++ b/src/ui/Controls/ButtonPairPanel.cs @@ -0,0 +1,104 @@ +using System; +using Avalonia; +using Avalonia.Controls; + +namespace Nikse.SubtitleEdit.Controls; + +/// +/// Lays out its children side by side in equal-width columns when all of them fit on one row at +/// their natural width, and otherwise stacks them full width - so a long translation (e.g. +/// Ukrainian "Використовувати один раз") gets its own row instead of running past the window edge +/// or breaking mid-word (#15901). +/// +public class ButtonPairPanel : Panel +{ + public static readonly StyledProperty SpacingProperty = + AvaloniaProperty.Register(nameof(Spacing), 5); + + public double Spacing + { + get => GetValue(SpacingProperty); + set => SetValue(SpacingProperty, value); + } + + private bool _stacked; + + protected override Size MeasureOverride(Size availableSize) + { + var count = 0; + var maxWidth = 0.0; + var maxHeight = 0.0; + foreach (var child in Children) + { + if (!child.IsVisible) + { + continue; + } + + child.Measure(Size.Infinity); + maxWidth = Math.Max(maxWidth, child.DesiredSize.Width); + maxHeight = Math.Max(maxHeight, child.DesiredSize.Height); + count++; + } + + if (count == 0) + { + return default; + } + + // Equal columns, so each one must fit the widest child. + var rowWidth = maxWidth * count + Spacing * (count - 1); + _stacked = count > 1 && !double.IsInfinity(availableSize.Width) && rowWidth > availableSize.Width; + if (_stacked) + { + return new Size(Math.Min(maxWidth, availableSize.Width), maxHeight * count + Spacing * (count - 1)); + } + + return new Size(rowWidth, maxHeight); + } + + protected override Size ArrangeOverride(Size finalSize) + { + var visible = 0; + foreach (var child in Children) + { + if (child.IsVisible) + { + visible++; + } + } + + if (visible == 0) + { + return finalSize; + } + + var index = 0; + if (_stacked) + { + var height = (finalSize.Height - Spacing * (visible - 1)) / visible; + foreach (var child in Children) + { + if (child.IsVisible) + { + child.Arrange(new Rect(0, index * (height + Spacing), finalSize.Width, height)); + index++; + } + } + } + else + { + var width = (finalSize.Width - Spacing * (visible - 1)) / visible; + foreach (var child in Children) + { + if (child.IsVisible) + { + child.Arrange(new Rect(index * (width + Spacing), 0, width, finalSize.Height)); + index++; + } + } + } + + return finalSize; + } +} diff --git a/src/ui/Controls/CompactSpinner.cs b/src/ui/Controls/CompactSpinner.cs new file mode 100644 index 00000000000..6a2a7bb33f8 --- /dev/null +++ b/src/ui/Controls/CompactSpinner.cs @@ -0,0 +1,76 @@ +using Avalonia.Controls; +using Avalonia.Input; +using Avalonia.Controls.Primitives; +using Avalonia.Layout; +using Avalonia.Media; +using Nikse.SubtitleEdit.Logic; + +namespace Nikse.SubtitleEdit.Controls; + +/// +/// Gives TimeCodeUpDown and SecondsUpDown the editor field look (as in the ASSA editors): a soft +/// field background with a subtle border, and a narrow stacked up/down pair with no divider +/// instead of the two wide side-by-side buttons. The pair only shows while the pointer is over +/// the field or it has keyboard focus (it keeps its space, so the field never changes width); +/// Up/Down and the mouse wheel step the value either way. +/// The theme sets the panel orientation and button sizes inside its template, where they beat +/// any style, so they are changed here once the template is applied. +/// +internal static class CompactSpinner +{ + private const double ButtonWidth = 22; + + internal static void Attach(ButtonSpinner spinner) + { + spinner.Background = EditorChrome.FieldBrush; + spinner.BorderBrush = EditorChrome.FieldBorderBrush; + spinner.MinHeight = 28; + spinner.TemplateApplied -= OnTemplateApplied; + spinner.TemplateApplied += OnTemplateApplied; + } + + private static void OnTemplateApplied(object? sender, TemplateAppliedEventArgs e) + { + if (e.NameScope.Find("PART_SpinnerPanel") is { } panel) + { + panel.Orientation = Orientation.Vertical; + panel.VerticalAlignment = VerticalAlignment.Center; + + if (sender is ButtonSpinner spinner) + { + void Update() + { + var active = spinner.IsPointerOver || spinner.IsKeyboardFocusWithin; + panel.Opacity = active ? 1 : 0; + spinner.BorderBrush = active ? EditorChrome.SeparatorBrush : EditorChrome.FieldBorderBrush; + } + + Update(); + spinner.PropertyChanged += (_, change) => + { + if (change.Property == InputElement.IsPointerOverProperty || + change.Property == InputElement.IsKeyboardFocusWithinProperty) + { + Update(); + } + }; + } + } + + foreach (var name in new[] { "PART_IncreaseButton", "PART_DecreaseButton" }) + { + if (e.NameScope.Find(name) is { } button) + { + button.Width = ButtonWidth; + button.MinWidth = 0; + button.Height = 13; + button.MinHeight = 0; + button.Padding = new Avalonia.Thickness(0); + button.BorderThickness = new Avalonia.Thickness(0); + button.Background = Brushes.Transparent; + button.Foreground = EditorChrome.IconBrush; + button.RenderTransform = new ScaleTransform(0.8, 0.8); + } + } + } +} diff --git a/src/ui/Controls/NonSpaceToggleButton.cs b/src/ui/Controls/NonSpaceToggleButton.cs new file mode 100644 index 00000000000..4a921f73ce0 --- /dev/null +++ b/src/ui/Controls/NonSpaceToggleButton.cs @@ -0,0 +1,43 @@ +using Avalonia.Controls.Primitives; +using Avalonia.Input; +using System; + +namespace Nikse.SubtitleEdit.Controls; + +/// +/// A that never reacts to the Space key (see ) +/// and does not flip itself when clicked: the owner sets it +/// from the state the click's command changed, so a command that does nothing (e.g. a player +/// without subtitle support) leaves the button as it was. +/// +public class NonSpaceToggleButton : ToggleButton +{ + // Keep the default ToggleButton styling instead of looking for a NonSpaceToggleButton style. + protected override Type StyleKeyOverride => typeof(ToggleButton); + + protected override void Toggle() + { + } + + protected override void OnKeyDown(KeyEventArgs e) + { + if (e.Key == Key.Space) + { + e.Handled = true; + return; + } + + base.OnKeyDown(e); + } + + protected override void OnKeyUp(KeyEventArgs e) + { + if (e.Key == Key.Space) + { + e.Handled = true; + return; + } + + base.OnKeyUp(e); + } +} diff --git a/src/ui/Controls/SecondsUpDown.cs b/src/ui/Controls/SecondsUpDown.cs index 4a75c2b2d0f..822b7ecf896 100644 --- a/src/ui/Controls/SecondsUpDown.cs +++ b/src/ui/Controls/SecondsUpDown.cs @@ -55,28 +55,23 @@ protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs chang } else if (change.Property == BackgroundProperty) { - ApplyBackgroundToTextBox(change.NewValue as IBrush); + ApplyBackgroundToField(change.NewValue as IBrush); } } - // The templated control's Background isn't drawn behind the inner TextBox — - // propagate it explicitly so bindings (e.g. duration min/max warning color) - // become visible. Transparent / null means "use default TextBox style". - private void ApplyBackgroundToTextBox(IBrush? brush) + // The templated control's Background isn't drawn by the template - propagate it to the whole + // field (the spinner, so the up/down area is colored too) so bindings such as the duration + // min/max warning color become visible. Transparent / null means the normal field color. + private void ApplyBackgroundToField(IBrush? brush) { - if (_textBox == null) + if (_spinner == null) { return; } - if (brush is null || (brush is SolidColorBrush solid && solid.Color == Colors.Transparent)) - { - _textBox.ClearValue(TextBox.BackgroundProperty); - } - else - { - _textBox.Background = brush; - } + _spinner.Background = brush is null || (brush is ISolidColorBrush solid && solid.Color.A == 0) + ? EditorChrome.FieldBrush + : brush; } private static TimeSpan CoerceValue(AvaloniaObject sender, TimeSpan value) @@ -92,13 +87,15 @@ private static FuncControlTemplate CreateTemplate() { Name = "PART_TextBox", IsReadOnly = false, - Padding = new Thickness(9, 2, 2, 2), + Padding = new Thickness(10, 2, 4, 2), Margin = new Thickness(0), VerticalContentAlignment = VerticalAlignment.Center, HorizontalContentAlignment = HorizontalAlignment.Left, HorizontalAlignment = HorizontalAlignment.Stretch, Width = double.NaN, BorderBrush = Brushes.Transparent, + BorderThickness = new Thickness(0), + Background = Brushes.Transparent, }; var grid = new Grid @@ -125,6 +122,7 @@ private static FuncControlTemplate CreateTemplate() Width = double.NaN, Margin = new Thickness(0), Padding = new Thickness(0), + CornerRadius = new CornerRadius(6), }; scope.Register("PART_Spinner", spinner); @@ -140,6 +138,10 @@ protected override void OnApplyTemplate(TemplateAppliedEventArgs e) _textBox = e.NameScope.Find("PART_TextBox"); _spinner = e.NameScope.Find("PART_Spinner"); + if (_spinner != null) + { + CompactSpinner.Attach(_spinner); + } if (_spinner != null) { @@ -169,7 +171,7 @@ protected override void OnApplyTemplate(TemplateAppliedEventArgs e) args.Handled = true; }; - ApplyBackgroundToTextBox(Background); + ApplyBackgroundToField(Background); } } diff --git a/src/ui/Controls/TimeCodeUpDown.cs b/src/ui/Controls/TimeCodeUpDown.cs index 799a4986ae5..af03b81ab08 100644 --- a/src/ui/Controls/TimeCodeUpDown.cs +++ b/src/ui/Controls/TimeCodeUpDown.cs @@ -97,6 +97,10 @@ protected override void OnApplyTemplate(TemplateAppliedEventArgs e) _textBox = e.NameScope.Find("PART_TextBox"); _spinner = e.NameScope.Find("PART_Spinner"); + if (_spinner != null) + { + CompactSpinner.Attach(_spinner); + } if (_spinner != null) { @@ -171,8 +175,8 @@ private void UpdateMinWidth() if (spinnerButtonsWidth <= 0) { // Conservative estimate for spinner buttons (varies by platform) - // macOS: ~84px, Windows/Linux: ~50-60px - spinnerButtonsWidth = 84; + // The narrow stacked up/down pair (CompactSpinner) + spinnerButtonsWidth = 24; } // Account for textbox internal padding (9 left, 2 right from template) @@ -219,13 +223,15 @@ private static FuncControlTemplate CreateTemplate() { Name = "PART_TextBox", IsReadOnly = false, - Padding = new Thickness(9, 2, 2, 2), + Padding = new Thickness(10, 2, 4, 2), Margin = new Thickness(0), VerticalContentAlignment = VerticalAlignment.Center, HorizontalContentAlignment = HorizontalAlignment.Left, HorizontalAlignment = HorizontalAlignment.Stretch, Width = double.NaN, BorderBrush = Brushes.Transparent, + BorderThickness = new Thickness(0), + Background = Brushes.Transparent, CaretIndex = control.LastPartCaretIndex, }; @@ -253,6 +259,7 @@ private static FuncControlTemplate CreateTemplate() Width = double.NaN, Margin = new Thickness(0), Padding = new Thickness(0), + CornerRadius = new CornerRadius(6), }; scope.Register("PART_Spinner", spinner); @@ -540,7 +547,7 @@ private bool TryParsePastedValue(string? clipboardText, out TimeSpan value) try { ms = useFrameMode - ? TimeCode.ParseHHMMSSFFToMilliseconds(text) + ? FrameModeTimeSnapper.ToVideoFrame(TimeSpan.FromMilliseconds(TimeCode.ParseHHMMSSFFToMilliseconds(text))).TotalMilliseconds : TimeCode.ParseToMilliseconds(text); } catch (Exception exception) when (exception is OverflowException or ArgumentOutOfRangeException) @@ -585,7 +592,7 @@ private static TimeSpan ParseUnsignedTime(string text) int.TryParse(frameParts[3], out var frames)) { var frameMs = SubtitleFormat.FramesToMillisecondsMax999(frames); - return new TimeSpan(0, frameHours, frameMinutes, frameSeconds, frameMs); + return FrameModeTimeSnapper.ToVideoFrame(new TimeSpan(0, frameHours, frameMinutes, frameSeconds, frameMs)); } return TimeSpan.Zero; diff --git a/src/ui/Controls/VideoPlayer/VideoPlayerControl.cs b/src/ui/Controls/VideoPlayer/VideoPlayerControl.cs index bbd53cbfddc..b11329899f9 100644 --- a/src/ui/Controls/VideoPlayer/VideoPlayerControl.cs +++ b/src/ui/Controls/VideoPlayer/VideoPlayerControl.cs @@ -53,6 +53,21 @@ public class VideoPlayerControl : UserControl public static readonly StyledProperty FullScreenCommandProperty = AvaloniaProperty.Register(nameof(FullScreenCommand)); + public static readonly StyledProperty PreviousSubtitleCommandProperty = + AvaloniaProperty.Register(nameof(PreviousSubtitleCommand)); + + public static readonly StyledProperty NextSubtitleCommandProperty = + AvaloniaProperty.Register(nameof(NextSubtitleCommand)); + + public static readonly StyledProperty ToggleSubtitlesCommandProperty = + AvaloniaProperty.Register(nameof(ToggleSubtitlesCommand)); + + public static readonly StyledProperty SubtitlesOnVideoIsVisibleProperty = + AvaloniaProperty.Register(nameof(SubtitlesOnVideoIsVisible), true); + + public static readonly StyledProperty SubtitleButtonsIsVisibleProperty = + AvaloniaProperty.Register(nameof(SubtitleButtonsIsVisible)); + public static readonly StyledProperty StopIsVisibleProperty = AvaloniaProperty.Register(nameof(StopIsVisible)); @@ -127,6 +142,45 @@ public ICommand FullScreenCommand set => SetValue(FullScreenCommandProperty, value); } + public ICommand? PreviousSubtitleCommand + { + get => GetValue(PreviousSubtitleCommandProperty); + set => SetValue(PreviousSubtitleCommandProperty, value); + } + + public ICommand? NextSubtitleCommand + { + get => GetValue(NextSubtitleCommandProperty); + set => SetValue(NextSubtitleCommandProperty, value); + } + + public ICommand? ToggleSubtitlesCommand + { + get => GetValue(ToggleSubtitlesCommandProperty); + set => SetValue(ToggleSubtitlesCommandProperty, value); + } + + /// + /// Whether the subtitles are shown on the video - the checked state of the toggle + /// subtitles button. Set by the owner after runs. + /// + public bool SubtitlesOnVideoIsVisible + { + get => GetValue(SubtitlesOnVideoIsVisibleProperty); + set => SetValue(SubtitlesOnVideoIsVisibleProperty, value); + } + + /// + /// The previous/next subtitle and toggle subtitles buttons need the main window's + /// subtitle, so only its players (and the controls preview) show them - when the + /// controls layout does (#16047). + /// + public bool SubtitleButtonsIsVisible + { + get => GetValue(SubtitleButtonsIsVisibleProperty); + set => SetValue(SubtitleButtonsIsVisibleProperty, value); + } + public bool StopIsVisible { get => GetValue(StopIsVisibleProperty); @@ -183,6 +237,9 @@ public bool IsFullScreen private readonly Button _buttonFullScreen; private readonly Button _buttonFullScreenCollapse; private readonly Button _buttonStop; + private readonly Button _buttonPreviousSubtitle; + private readonly Button _buttonNextSubtitle; + private readonly NonSpaceToggleButton _buttonToggleSubtitles; private readonly StackPanel _panelFullScreen; private readonly Slider _sliderPosition; private readonly StackPanel _panelVolume; @@ -525,6 +582,30 @@ public VideoPlayerControl(IVideoPlayer videoPlayerInstance) Source = this }); + // Previous/next subtitle and toggle subtitles on the video (#16047) + _buttonPreviousSubtitle = MakeSubtitleButton( + new NonSpaceButton(), + Se.Language.Options.Settings.VideoControlsPreviousSubtitle, + "fa-solid fa-backward-step", + nameof(PreviousSubtitleCommand)); + _buttonNextSubtitle = MakeSubtitleButton( + new NonSpaceButton(), + Se.Language.Options.Settings.VideoControlsNextSubtitle, + "fa-solid fa-forward-step", + nameof(NextSubtitleCommand)); + // Checked (and a filled icon) while the subtitles are shown on the video. + _buttonToggleSubtitles = MakeSubtitleButton( + new NonSpaceToggleButton(), + Se.Language.Video.ToggleSubtitlesOnVideoPlayer, + "fa-solid fa-closed-captioning", + nameof(ToggleSubtitlesCommand)); + _buttonToggleSubtitles.Bind(ToggleButton.IsCheckedProperty, new Binding + { + Path = nameof(SubtitlesOnVideoIsVisible), + Source = this, + Mode = BindingMode.OneWay, + }); + // Fullscreen _buttonFullScreen = new NonSpaceButton { @@ -753,6 +834,9 @@ public VideoPlayerControl(IVideoPlayer videoPlayerInstance) // Enable/disable click-to-toggle behavior (default on) public bool ClickToTogglePlay { get; set; } = true; + + // Mouse wheel / trackpad scroll over the video seeks (default on) + public bool WheelToSeek { get; set; } = true; public bool IsSmpteTimingEnabled { get; set; } private bool _surfaceLeftButtonDown; @@ -822,6 +906,11 @@ private void OnMainGridPointerReleased(object? sender, PointerReleasedEventArgs private void OnVideoWheelChanged(object? sender, PointerWheelEventArgs e) { + if (!WheelToSeek) + { + return; + } + // Ignore wheel events over the controls row (sliders, buttons). try { @@ -1022,6 +1111,9 @@ public void ApplyControlsLayout(IEnumerable? items) { SeVideoControlsItemType.Play => _buttonPlay, SeVideoControlsItemType.Stop => _buttonStop, + SeVideoControlsItemType.PreviousSubtitle => _buttonPreviousSubtitle, + SeVideoControlsItemType.NextSubtitle => _buttonNextSubtitle, + SeVideoControlsItemType.ToggleSubtitles => _buttonToggleSubtitles, SeVideoControlsItemType.FullScreen => _panelFullScreen, SeVideoControlsItemType.PositionSlider => _sliderPosition, SeVideoControlsItemType.Volume => _panelVolume, @@ -1108,10 +1200,47 @@ public void ApplyControlsLayout(IEnumerable? items) UpdateVideoFileNameMaxWidth(); } + private T MakeSubtitleButton(T button, string name, string iconName, string commandPropertyName) where T : Button + { + button.VerticalAlignment = VerticalAlignment.Center; + AutomationProperties.SetName(button, name); + button.Bind(IsVisibleProperty, new Binding + { + Path = nameof(SubtitleButtonsIsVisible), + Source = this + }); + Attached.SetIcon(button, iconName); + if (Se.Settings.Appearance.ShowHints) + { + ToolTip.SetTip(button, name); + } + + button.Bind(Button.CommandProperty, new Binding + { + Path = commandPropertyName, + Source = this + }); + return button; + } + + protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) + { + base.OnPropertyChanged(change); + + if (change.Property == SubtitlesOnVideoIsVisibleProperty) + { + Attached.SetIcon(_buttonToggleSubtitles, SubtitlesOnVideoIsVisible + ? "fa-solid fa-closed-captioning" + : "fa-regular fa-closed-captioning"); + } + } + private static double GetControlsSpacing(SeVideoControlsItemType left, SeVideoControlsItemType right) { static bool IsButton(SeVideoControlsItemType type) => - type is SeVideoControlsItemType.Play or SeVideoControlsItemType.Stop or SeVideoControlsItemType.FullScreen; + type is SeVideoControlsItemType.Play or SeVideoControlsItemType.Stop or SeVideoControlsItemType.FullScreen or + SeVideoControlsItemType.PreviousSubtitle or SeVideoControlsItemType.NextSubtitle or + SeVideoControlsItemType.ToggleSubtitles; if (IsButton(left) && IsButton(right)) { diff --git a/src/ui/DependencyInjectionExtensions.cs b/src/ui/DependencyInjectionExtensions.cs index 90c61a90043..084bf4e3b3e 100644 --- a/src/ui/DependencyInjectionExtensions.cs +++ b/src/ui/DependencyInjectionExtensions.cs @@ -21,6 +21,8 @@ using Nikse.SubtitleEdit.Features.Files.ExportCustomTextFormat; using Nikse.SubtitleEdit.Features.Files.ExportImageBased; using Nikse.SubtitleEdit.Features.Files.ExportPac; +using Nikse.SubtitleEdit.Features.Files.ExportDialogueList; +using Nikse.SubtitleEdit.Features.Video.SyncAudioTrack; using Nikse.SubtitleEdit.Features.Files.ExportPlainText; using Nikse.SubtitleEdit.Features.Files.FormatProperties.DCinemaInteropProperties; using Nikse.SubtitleEdit.Features.Files.FormatProperties.DCinemaSmpteProperties; @@ -53,6 +55,7 @@ using Nikse.SubtitleEdit.Features.Ocr.FixEngine; using Nikse.SubtitleEdit.Features.Ocr.NOcr; using Nikse.SubtitleEdit.Features.Ocr.VobSubColorChooser; +using Nikse.SubtitleEdit.Features.Options.CustomErrorRules; using Nikse.SubtitleEdit.Features.Options.DoNotBreakAfterList; using Nikse.SubtitleEdit.Features.Options.Language; using Nikse.SubtitleEdit.Features.Options.Plugins; @@ -91,6 +94,7 @@ using Nikse.SubtitleEdit.Features.Shared.ErrorList; using Nikse.SubtitleEdit.Features.Shared.FindText; using Nikse.SubtitleEdit.Features.Shared.FormatLimitWarning; +using Nikse.SubtitleEdit.Features.Shared.CommandPalette; using Nikse.SubtitleEdit.Features.Shared.GoToLineNumber; using Nikse.SubtitleEdit.Features.Shared.PickAlignment; using Nikse.SubtitleEdit.Features.Shared.PickTeletextAlignment; @@ -310,6 +314,7 @@ public static void AddSubtitleEditServices(this IServiceCollection collection) collection.AddHttpClientWithProxy(); collection.AddHttpClientWithProxy(); collection.AddHttpClientWithProxy(); + collection.AddHttpClientWithProxy(); collection.AddHttpClientWithProxy(); collection.AddHttpClientWithProxy(); collection.AddHttpClientWithProxy(); @@ -326,6 +331,8 @@ public static void AddSubtitleEditServices(this IServiceCollection collection) collection.AddHttpClientWithProxy(); collection.AddHttpClientWithProxy(); collection.AddHttpClientWithProxy(); + collection.AddHttpClientWithProxy(); + collection.AddHttpClientWithProxy(); collection.AddHttpClientWithProxy(); collection.AddHttpClientWithProxy(); collection.AddHttpClientWithProxy(); @@ -361,7 +368,6 @@ public static void AddSubtitleEditServices(this IServiceCollection collection) collection.AddTransient(); collection.AddTransient(); collection.AddTransient(); - collection.AddTransient(); collection.AddTransient(); collection.AddTransient(); collection.AddTransient(); @@ -465,6 +471,8 @@ public static void AddSubtitleEditServices(this IServiceCollection collection) collection.AddTransient(); collection.AddTransient(); collection.AddTransient(); + collection.AddTransient(); + collection.AddTransient(); collection.AddTransient(); collection.AddTransient(); collection.AddTransient(); @@ -482,6 +490,7 @@ public static void AddSubtitleEditServices(this IServiceCollection collection) collection.AddTransient(); collection.AddTransient(); collection.AddTransient(); + collection.AddTransient(); collection.AddTransient(); collection.AddTransient(); collection.AddTransient(); @@ -623,6 +632,7 @@ public static void AddSubtitleEditServices(this IServiceCollection collection) collection.AddTransient(); collection.AddTransient(); collection.AddTransient(); + collection.AddTransient(); collection.AddTransient(); collection.AddTransient(); collection.AddTransient(); diff --git a/src/ui/Features/Assa/AssaApplyAdvancedEffect/AdvancedEffectCatalog.cs b/src/ui/Features/Assa/AssaApplyAdvancedEffect/AdvancedEffectCatalog.cs new file mode 100644 index 00000000000..9036ee0f22c --- /dev/null +++ b/src/ui/Features/Assa/AssaApplyAdvancedEffect/AdvancedEffectCatalog.cs @@ -0,0 +1,172 @@ +using Avalonia.Media; +using Nikse.SubtitleEdit.Features.Assa.AssaApplyAdvancedEffect.Effects; +using Nikse.SubtitleEdit.Logic; +using Nikse.SubtitleEdit.Logic.Config; + +namespace Nikse.SubtitleEdit.Features.Assa.AssaApplyAdvancedEffect; + +public enum AdvancedEffectCategory +{ + All, + Words, + InOut, + TextFx, + Scenes, + Titles, +} + +/// +/// How the gallery tile and the no-video preview animate an effect. The preview is a quick +/// Avalonia approximation of the look - the real libass rendering is shown on the video. +/// +public enum EffectPreviewKind +{ + None, + ScreenFadeIn, + ScreenFadeOut, + FadeInOut, + SlideInLeft, + SlideInRight, + BounceIn, + ZoomIn, + ZoomOut, + TvClose, + Typewriter, + TypewriterHighlight, + WordByWord, + Karaoke, + WordPop, + HighlightBox, + SingleWordPop, + BoldCaptions, + SmoothFill, + BlurInWords, + RollingCaptions, + ScrambleReveal, + WordFlip3D, + WordSpacing, + RainbowPulse, + Wave, + WaveBlue, + Glitch, + NeonBurst, + AudioPulse, + Snow, + Rain, + Starfield, + Fireflies, + Confetti, + Hearts, + Matrix, + OldMovie, + CinematicTitle, + LowerThird, + StarWarsScroll, + CreditsScroll, +} + +public class AdvancedEffectCategoryItem +{ + public AdvancedEffectCategory Category { get; } + public string Name { get; } + public string IconName { get; } + public int Count { get; set; } + public IBrush Brush { get; } + + public AdvancedEffectCategoryItem(AdvancedEffectCategory category, string name, string iconName, Color color) + { + Category = category; + Name = name; + IconName = iconName; + Brush = new SolidColorBrush(color); + } + + public override string ToString() => Name; +} + +public static class AdvancedEffectCatalog +{ + public static AdvancedEffectCategory GetCategory(IAdvancedEffectDisplay effect) + { + return effect switch + { + AdvancedEffectKaraoke or AdvancedEffectFancyKaraoke or AdvancedEffectWordByWord or + AdvancedEffectTypewriter or AdvancedEffectTypewriterWithHighlight or AdvancedEffectWordFlip3D or + AdvancedEffectScrambleReveal or AdvancedEffectWordSpacing or AdvancedEffectHighlightBox or + AdvancedEffectSingleWordPop or AdvancedEffectBoldCaptions or AdvancedEffectSmoothFill or + AdvancedEffectBlurInWords => AdvancedEffectCategory.Words, + AdvancedEffectFadeIn or AdvancedEffectFadeOut or AdvancedEffectFadeInOut or AdvancedEffectSlideInLeft or + AdvancedEffectSlideInRight or AdvancedEffectBounceIn or AdvancedEffectSlowZoomIn or + AdvancedEffectSlowZoomOut or AdvancedEffectTvClose or AdvancedEffectRollingCaptions => AdvancedEffectCategory.InOut, + AdvancedEffectSnow or AdvancedEffectRain or AdvancedEffectStarfield or AdvancedEffectFireflies or + AdvancedEffectConfetti or AdvancedEffectHearts or AdvancedEffectMatrix or + AdvancedEffectOldMovie => AdvancedEffectCategory.Scenes, + AdvancedEffectCinematicTitle or AdvancedEffectLowerThird or AdvancedEffectStarWarsScroll or + AdvancedEffectEndCreditsScroll => AdvancedEffectCategory.Titles, + _ => AdvancedEffectCategory.TextFx, + }; + } + + public static EffectPreviewKind GetPreviewKind(IAdvancedEffectDisplay? effect) + { + return effect switch + { + AdvancedEffectFadeIn => EffectPreviewKind.ScreenFadeIn, + AdvancedEffectFadeOut => EffectPreviewKind.ScreenFadeOut, + AdvancedEffectFadeInOut => EffectPreviewKind.FadeInOut, + AdvancedEffectSlideInLeft => EffectPreviewKind.SlideInLeft, + AdvancedEffectSlideInRight => EffectPreviewKind.SlideInRight, + AdvancedEffectBounceIn => EffectPreviewKind.BounceIn, + AdvancedEffectSlowZoomIn => EffectPreviewKind.ZoomIn, + AdvancedEffectSlowZoomOut => EffectPreviewKind.ZoomOut, + AdvancedEffectTvClose => EffectPreviewKind.TvClose, + AdvancedEffectTypewriter => EffectPreviewKind.Typewriter, + AdvancedEffectTypewriterWithHighlight => EffectPreviewKind.TypewriterHighlight, + AdvancedEffectWordByWord => EffectPreviewKind.WordByWord, + AdvancedEffectKaraoke => EffectPreviewKind.Karaoke, + AdvancedEffectFancyKaraoke => EffectPreviewKind.WordPop, + AdvancedEffectHighlightBox => EffectPreviewKind.HighlightBox, + AdvancedEffectSingleWordPop => EffectPreviewKind.SingleWordPop, + AdvancedEffectBoldCaptions => EffectPreviewKind.BoldCaptions, + AdvancedEffectSmoothFill => EffectPreviewKind.SmoothFill, + AdvancedEffectBlurInWords => EffectPreviewKind.BlurInWords, + AdvancedEffectRollingCaptions => EffectPreviewKind.RollingCaptions, + AdvancedEffectScrambleReveal => EffectPreviewKind.ScrambleReveal, + AdvancedEffectWordFlip3D => EffectPreviewKind.WordFlip3D, + AdvancedEffectWordSpacing => EffectPreviewKind.WordSpacing, + AdvancedEffectRainbowPulse => EffectPreviewKind.RainbowPulse, + AdvancedEffectWave => EffectPreviewKind.Wave, + AdvancedEffectWaveBlue => EffectPreviewKind.WaveBlue, + AdvancedEffectGlitch => EffectPreviewKind.Glitch, + AdvancedEffectNeonBurst => EffectPreviewKind.NeonBurst, + AdvancedEffectAudioTextPulse => EffectPreviewKind.AudioPulse, + AdvancedEffectSnow => EffectPreviewKind.Snow, + AdvancedEffectRain => EffectPreviewKind.Rain, + AdvancedEffectStarfield => EffectPreviewKind.Starfield, + AdvancedEffectFireflies => EffectPreviewKind.Fireflies, + AdvancedEffectConfetti => EffectPreviewKind.Confetti, + AdvancedEffectHearts => EffectPreviewKind.Hearts, + AdvancedEffectMatrix => EffectPreviewKind.Matrix, + AdvancedEffectOldMovie => EffectPreviewKind.OldMovie, + AdvancedEffectCinematicTitle => EffectPreviewKind.CinematicTitle, + AdvancedEffectLowerThird => EffectPreviewKind.LowerThird, + AdvancedEffectStarWarsScroll => EffectPreviewKind.StarWarsScroll, + AdvancedEffectEndCreditsScroll => EffectPreviewKind.CreditsScroll, + _ => EffectPreviewKind.None, + }; + } + + public static AdvancedEffectCategoryItem[] MakeCategories() + { + var l = Se.Language.Assa; + return + [ + new AdvancedEffectCategoryItem(AdvancedEffectCategory.All, Se.Language.General.All, IconNames.ViewGrid, Color.FromRgb(0x60, 0x6B, 0x7D)), + new AdvancedEffectCategoryItem(AdvancedEffectCategory.Words, l.AdvancedEffectCategoryWords, IconNames.MusicNote, Color.FromRgb(0xE0, 0x4F, 0x8B)), + new AdvancedEffectCategoryItem(AdvancedEffectCategory.InOut, l.AdvancedEffectCategoryInOut, IconNames.AnimationPlay, Color.FromRgb(0x2F, 0x8F, 0xE0)), + new AdvancedEffectCategoryItem(AdvancedEffectCategory.TextFx, l.AdvancedEffectCategoryTextFx, IconNames.Creation, Color.FromRgb(0x9B, 0x59, 0xD6)), + new AdvancedEffectCategoryItem(AdvancedEffectCategory.Scenes, l.AdvancedEffectCategoryScenes, IconNames.Image, Color.FromRgb(0x1F, 0xA8, 0x7A)), + new AdvancedEffectCategoryItem(AdvancedEffectCategory.Titles, l.AdvancedEffectCategoryTitles, IconNames.MovieOpenOutline, Color.FromRgb(0xE6, 0x8A, 0x1E)), + ]; + } +} diff --git a/src/ui/Features/Assa/AssaApplyAdvancedEffect/AdvancedEffectDisplay.cs b/src/ui/Features/Assa/AssaApplyAdvancedEffect/AdvancedEffectDisplay.cs index 0192e2de9ee..0ef1ea9eacc 100644 --- a/src/ui/Features/Assa/AssaApplyAdvancedEffect/AdvancedEffectDisplay.cs +++ b/src/ui/Features/Assa/AssaApplyAdvancedEffect/AdvancedEffectDisplay.cs @@ -14,6 +14,14 @@ public interface IAdvancedEffectDisplay List ApplyEffect(string header, List subtitles, int width, int height, WavePeakData2? wavePeaks); } +/// +/// An effect that needs extra styles in the script header (e.g. an opaque-box style). +/// +public interface IAdvancedEffectHeaderUpdater +{ + string UpdateHeader(string header, List subtitles); +} + public static class AdvancedEffectDisplayFactory { public static List List() @@ -21,6 +29,8 @@ public static List List() return new List { new AdvancedEffectAudioTextPulse(), + new AdvancedEffectBlurInWords(), + new AdvancedEffectBoldCaptions(), new AdvancedEffectBounceIn(), new AdvancedEffectCinematicTitle(), new AdvancedEffectConfetti(), @@ -32,6 +42,7 @@ public static List List() new AdvancedEffectFireflies(), new AdvancedEffectGlitch(), new AdvancedEffectHearts(), + new AdvancedEffectHighlightBox(), new AdvancedEffectKaraoke(), new AdvancedEffectLowerThird(), new AdvancedEffectMatrix(), @@ -39,10 +50,13 @@ public static List List() new AdvancedEffectOldMovie(), new AdvancedEffectRain(), new AdvancedEffectRainbowPulse(), + new AdvancedEffectRollingCaptions(), new AdvancedEffectScrambleReveal(), + new AdvancedEffectSingleWordPop(), new AdvancedEffectSlideInLeft(), new AdvancedEffectSlideInRight(), new AdvancedEffectSlowZoomIn(), + new AdvancedEffectSmoothFill(), new AdvancedEffectSlowZoomOut(), new AdvancedEffectSnow(), new AdvancedEffectStarWarsScroll(), diff --git a/src/ui/Features/Assa/AssaApplyAdvancedEffect/AssaApplyAdvancedEffectViewModel.cs b/src/ui/Features/Assa/AssaApplyAdvancedEffect/AssaApplyAdvancedEffectViewModel.cs index cb5c8308c75..37f2e84bb13 100644 --- a/src/ui/Features/Assa/AssaApplyAdvancedEffect/AssaApplyAdvancedEffectViewModel.cs +++ b/src/ui/Features/Assa/AssaApplyAdvancedEffect/AssaApplyAdvancedEffectViewModel.cs @@ -34,6 +34,14 @@ public partial class AssaApplyAdvancedEffectViewModel : ObservableObject [ObservableProperty] private bool _adjustSelectedLines; [ObservableProperty] private bool _adjustSelectedLinesAndForward; [ObservableProperty] private string _selectionInfo; + [ObservableProperty] private ObservableCollection _filteredEffects; + [ObservableProperty] private IAdvancedEffectDisplay? _selectedGalleryEffect; + [ObservableProperty] private ObservableCollection _categories; + [ObservableProperty] private AdvancedEffectCategoryItem? _selectedCategory; + [ObservableProperty] private string _searchText; + [ObservableProperty] private bool _hasNoMatches; + [ObservableProperty] private bool _hasVideo; + [ObservableProperty] private string _previewText; public Window? Window { get; set; } public bool OkPressed { get; private set; } @@ -50,6 +58,8 @@ public partial class AssaApplyAdvancedEffectViewModel : ObservableObject private Subtitle _subtitle; private string? _videoFileName; private bool _closed; // set by OnClosing; stops the posted half of Initialize from starting a pump on a disposed player + private const string SamplePreviewText = "Subtitle Edit"; + private bool _isFiltering; private UiTickPump _positionTimer = new(TimeSpan.FromMilliseconds(750)); // posted ticks, not a DispatcherTimer - see UiTickPump private List _subtitleLines = new List(); private List _selectedSubtitleLines = new List(); @@ -75,7 +85,12 @@ public AssaApplyAdvancedEffectViewModel() // Toggle play/pause on surface click VideoPlayerControl.SurfacePointerPressed += (_, __) => VideoPlayerControl.TogglePlayPause(); - SelectedOverrideTag = OverrideTags[0]; + _searchText = string.Empty; + _previewText = SamplePreviewText; + FilteredEffects = new ObservableCollection(); + Categories = new ObservableCollection(); + RebuildCategories(); + SelectedOverrideTag = FilteredEffects.FirstOrDefault() ?? OverrideTags[0]; _tempSubtitleFileName = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + ".ass"); } @@ -118,6 +133,18 @@ public void Initialize( } } + // Without pre-marked active words the "word pop" effect would only dim the lines - sequence + // the words automatically instead, like the gallery preview shows. + if (!paragraphs.Any(p => p.Text.Contains("\\u1") || p.Text.Contains("\\1c") || p.Text.Contains("\\c&"))) + { + foreach (var effect in OverrideTags.OfType()) + { + effect.AutoDetectActiveWord = true; + } + } + + HasVideo = !string.IsNullOrEmpty(videoFileName); + if (audioVisualizer == null || audioVisualizer.WavePeaks == null || audioVisualizer.WavePeaks.Peaks.Count == 0) { // remove audio visualizer related effects if no audio visualizer data is available @@ -132,10 +159,11 @@ public void Initialize( i--; } + RebuildCategories(); if (SelectedOverrideTag == null || !OverrideTags.Contains(SelectedOverrideTag)) { // The constructor's default selection may just have been removed - SelectedOverrideTag = OverrideTags.FirstOrDefault(); + SelectedOverrideTag = FilteredEffects.FirstOrDefault() ?? OverrideTags.FirstOrDefault(); } } @@ -173,6 +201,94 @@ public void Initialize( }); } + private void RebuildCategories() + { + var selected = SelectedCategory?.Category ?? AdvancedEffectCategory.All; + var items = AdvancedEffectCatalog.MakeCategories(); + foreach (var item in items) + { + item.Count = item.Category == AdvancedEffectCategory.All + ? OverrideTags.Count + : OverrideTags.Count(e => AdvancedEffectCatalog.GetCategory(e) == item.Category); + } + + Categories = new ObservableCollection(items.Where(c => c.Count > 0)); + SelectedCategory = Categories.FirstOrDefault(c => c.Category == selected) ?? Categories.FirstOrDefault(); + ApplyFilter(); + } + + private void ApplyFilter() + { + var category = SelectedCategory?.Category ?? AdvancedEffectCategory.All; + var search = SearchText.Trim(); + var matches = OverrideTags + .Where(e => category == AdvancedEffectCategory.All || AdvancedEffectCatalog.GetCategory(e) == category) + .Where(e => search.Length == 0 || + e.Name.Contains(search, StringComparison.CurrentCultureIgnoreCase) || + e.Description.Contains(search, StringComparison.CurrentCultureIgnoreCase)) + .OrderBy(e => AdvancedEffectCatalog.GetCategory(e)) + .ThenBy(e => e.Name) + .ToList(); + + _isFiltering = true; + try + { + FilteredEffects = new ObservableCollection(matches); + SelectedGalleryEffect = SelectedOverrideTag != null && matches.Contains(SelectedOverrideTag) ? SelectedOverrideTag : null; + } + finally + { + _isFiltering = false; + } + + HasNoMatches = matches.Count == 0; + } + + partial void OnSearchTextChanged(string value) => ApplyFilter(); + + partial void OnSelectedCategoryChanged(AdvancedEffectCategoryItem? value) + { + if (value != null) + { + ApplyFilter(); + } + } + + partial void OnSelectedGalleryEffectChanged(IAdvancedEffectDisplay? value) + { + // A filter that hides the chosen effect clears the gallery selection - keep the effect + if (value != null && !_isFiltering) + { + SelectedOverrideTag = value; + } + } + + partial void OnSelectedOverrideTagChanged(IAdvancedEffectDisplay? value) + { + if (value != null && SelectedGalleryEffect != value && FilteredEffects.Contains(value)) + { + SelectedGalleryEffect = value; + } + } + + partial void OnSelectedParagraphIndexChanged(int value) + { + PreviewText = SamplePreviewText; + if (value < 0 || value >= Paragraphs.Count) + { + return; + } + + var text = HtmlUtil.RemoveHtmlTags(Utilities.RemoveSsaTags(Paragraphs[value].Subtitle.Text), true) + .Replace("\\N", " ").Replace("\r\n", " ").Replace('\n', ' ').Trim(); + + // the preview lays out letters one by one, which would break joined (Arabic) and RTL scripts + if (text.Length > 0 && !LanguageAutoDetect.ContainsRightToLeftLetter(text)) + { + PreviewText = text; + } + } + private void StartTitleTimer() { _positionTimer = new UiTickPump(TimeSpan.FromMilliseconds(750)); @@ -254,8 +370,13 @@ private Subtitle BuildPreviewSubtitle() idx++; } + if (effect is IAdvancedEffectHeaderUpdater headerUpdater) + { + result.Header = headerUpdater.UpdateHeader(result.Header, toAffect); + } + var transformed = effect.ApplyEffect( - _subtitle.Header, + result.Header, toAffect, _mediaInfo?.Dimension.Width ?? 1920, _mediaInfo?.Dimension.Height ?? 1080, @@ -288,6 +409,7 @@ private Subtitle BuildPreviewSubtitle() private void Ok() { UpdatedSubtitle = BuildPreviewSubtitle(); + _subtitle.Header = UpdatedSubtitle.Header; // effects may add styles (the main window keeps this subtitle's header) OkPressed = true; Window?.Close(); } diff --git a/src/ui/Features/Assa/AssaApplyAdvancedEffect/AssaApplyAdvancedEffectWindow.cs b/src/ui/Features/Assa/AssaApplyAdvancedEffect/AssaApplyAdvancedEffectWindow.cs index bcdf0944513..449646e7417 100644 --- a/src/ui/Features/Assa/AssaApplyAdvancedEffect/AssaApplyAdvancedEffectWindow.cs +++ b/src/ui/Features/Assa/AssaApplyAdvancedEffect/AssaApplyAdvancedEffectWindow.cs @@ -1,200 +1,173 @@ using Avalonia; +using Avalonia.Automation; using Avalonia.Controls; +using Avalonia.Controls.Primitives; using Avalonia.Controls.Templates; using Avalonia.Data; +using Avalonia.Data.Converters; +using Avalonia.Input; using Avalonia.Interactivity; using Avalonia.Layout; using Avalonia.Media; +using Avalonia.Styling; using Nikse.SubtitleEdit.Features.Assa.AssaApplyAdvancedEffect.Effects; using Nikse.SubtitleEdit.Features.Main.Layout; using Nikse.SubtitleEdit.Features.Sync.VisualSync; using Nikse.SubtitleEdit.Logic; using Nikse.SubtitleEdit.Logic.Config; +using Optris.Icons.Avalonia; namespace Nikse.SubtitleEdit.Features.Assa.AssaApplyAdvancedEffect; public class AssaApplyAdvancedEffectWindow : Window { + private const double TileWidth = 136; + private const double TileHeight = 77; + public AssaApplyAdvancedEffectWindow(AssaApplyAdvancedEffectViewModel vm) { UiUtil.InitializeWindow(this, GetType().Name); Title = Se.Language.Assa.ApplyAdvancedEffectTitle; CanResize = true; - Width = 1100; - Height = 700; - MinWidth = 900; - MinHeight = 600; + Width = 1280; + Height = 820; + MinWidth = 1000; + MinHeight = 640; vm.Window = this; DataContext = vm; - // ── Left panel ──────────────────────────────────────────────────────── - var chooseLabel = UiUtil.MakeLabel(Se.Language.Assa.ChooseEffect).WithBold(); + var accent = GetAccentColor(); - var effectListBox = new ListBox + // ── Left: search, categories, effect gallery ────────────────────────── + var searchBox = new TextBox { - ItemsSource = vm.OverrideTags, - [!ListBox.SelectedItemProperty] = new Binding(nameof(vm.SelectedOverrideTag)) + Watermark = Se.Language.Assa.AdvancedEffectSearchWatermark, + InnerLeftContent = new Icon { - Mode = BindingMode.TwoWay, + Value = IconNames.Find, + FontSize = 16, + Opacity = 0.6, + Margin = new Thickness(8, 0, 0, 0), + VerticalAlignment = VerticalAlignment.Center, }, - ItemTemplate = new FuncDataTemplate((item, _) => - { - var panel = new StackPanel { Margin = new Thickness(4, 6, 4, 6), Spacing = 3 }; + [!TextBox.TextProperty] = new Binding(nameof(vm.SearchText)) { Mode = BindingMode.TwoWay }, + }.WithAccessibleName(Se.Language.General.Search); - var nameBlock = new TextBlock { FontWeight = FontWeight.SemiBold, FontSize = UiUtil.ScaledFontSize(13) }; - nameBlock.Bind(TextBlock.TextProperty, new Binding(nameof(IAdvancedEffectDisplay.Name))); + var categoryList = MakeCategoryList(vm).WithAccessibleName(Se.Language.General.Category); + var gallery = MakeGallery(vm).WithAccessibleName(Se.Language.Assa.ChooseEffect); + gallery.AddHandler(KeyDownEvent, (_, e) => MoveGallerySelectionVertically(gallery, e), RoutingStrategies.Tunnel); - var descBlock = new TextBlock - { - FontSize = UiUtil.ScaledFontSize(11), - Opacity = 0.65, - TextWrapping = TextWrapping.Wrap, - }; - descBlock.Bind(TextBlock.TextProperty, new Binding(nameof(IAdvancedEffectDisplay.Description))); + var noMatches = new TextBlock + { + Text = Se.Language.Assa.AdvancedEffectNoMatches, + Opacity = 0.6, + HorizontalAlignment = HorizontalAlignment.Center, + VerticalAlignment = VerticalAlignment.Center, + [!TextBlock.IsVisibleProperty] = new Binding(nameof(vm.HasNoMatches)), + }; - panel.Children.Add(nameBlock); - panel.Children.Add(descBlock); + var galleryHost = new Grid(); + galleryHost.Children.Add(gallery); + galleryHost.Children.Add(noMatches); - if (item is AdvancedEffectSnow snowItem) - { - var row = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8, Margin = new Thickness(0, 6, 0, 0) }; - row.Children.Add(new TextBlock { Text = Se.Language.Assa.AdvancedEffectSnowFlakeCount, VerticalAlignment = VerticalAlignment.Center, FontSize = UiUtil.ScaledFontSize(12) }); - row.Children.Add(UiUtil.MakeNumericUpDownInt(10, 3000, 200, 130, snowItem, nameof(AdvancedEffectSnow.FlakeCount))); - panel.Children.Add(row); - } - else if (item is AdvancedEffectStarfield starfieldItem) - { - var starCountRow = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8, Margin = new Thickness(0, 6, 0, 0) }; - starCountRow.Children.Add(new TextBlock { Text = Se.Language.Assa.AdvancedEffectStarfieldStarCount, VerticalAlignment = VerticalAlignment.Center, FontSize = UiUtil.ScaledFontSize(12) }); - starCountRow.Children.Add(UiUtil.MakeNumericUpDownInt(50, 3000, 650, 130, starfieldItem, nameof(AdvancedEffectStarfield.StarCount))); - var speedRow = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8 }; - speedRow.Children.Add(new TextBlock { Text = Se.Language.General.Speed, VerticalAlignment = VerticalAlignment.Center, FontSize = UiUtil.ScaledFontSize(12) }); - speedRow.Children.Add(UiUtil.MakeNumericUpDownOneDecimal(0.1m, 10.0m, 130, starfieldItem, nameof(AdvancedEffectStarfield.SpeedMultiplier))); - var settingsStack = new StackPanel { Spacing = 4 }; - settingsStack.Children.Add(starCountRow); - settingsStack.Children.Add(speedRow); - panel.Children.Add(settingsStack); - } - else if (item is AdvancedEffectKaraoke karaokeItem) - { - var rightToLeftRow = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8, Margin = new Thickness(0, 6, 0, 0) }; - rightToLeftRow.Children.Add(new TextBlock { Text = Se.Language.Assa.AdvancedEffectKaraokeRightToLeft, VerticalAlignment = VerticalAlignment.Center, FontSize = UiUtil.ScaledFontSize(12) }); - rightToLeftRow.Children.Add(UiUtil.MakeCheckBox(karaokeItem, nameof(AdvancedEffectKaraoke.RightToLeft))); - panel.Children.Add(rightToLeftRow); - } - else if (item is AdvancedEffectFancyKaraoke fancyKaraokeItem) - { - var autoDetectActiveWordRow = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8, Margin = new Thickness(0, 6, 0, 0) }; - autoDetectActiveWordRow.Children.Add(new TextBlock { Text = Se.Language.Assa.AdvancedEffectFancyKaraokeAutoDetectActiveWord, VerticalAlignment = VerticalAlignment.Center, FontSize = UiUtil.ScaledFontSize(12) }); - autoDetectActiveWordRow.Children.Add(UiUtil.MakeCheckBox(fancyKaraokeItem, nameof(AdvancedEffectFancyKaraoke.AutoDetectActiveWord))); - - var rightToLeftRow = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8, Margin = new Thickness(0, 4, 0, 0) }; - rightToLeftRow.Children.Add(new TextBlock { Text = Se.Language.Assa.AdvancedEffectKaraokeRightToLeft, VerticalAlignment = VerticalAlignment.Center, FontSize = UiUtil.ScaledFontSize(12) }); - rightToLeftRow.Children.Add(UiUtil.MakeCheckBox(fancyKaraokeItem, nameof(AdvancedEffectFancyKaraoke.RightToLeft))); - - var activeGlowRow = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8, Margin = new Thickness(0, 4, 0, 0) }; - activeGlowRow.Children.Add(new TextBlock { Text = Se.Language.Assa.AdvancedEffectFancyKaraokeGlow, VerticalAlignment = VerticalAlignment.Center, FontSize = UiUtil.ScaledFontSize(12) }); - var applyGlowCheckBox = UiUtil.MakeCheckBox(fancyKaraokeItem, nameof(AdvancedEffectFancyKaraoke.ApplyGlow)); - activeGlowRow.Children.Add(applyGlowCheckBox); - var activeGlowColorButton = UiUtil.MakeColorPickerButton(fancyKaraokeItem, nameof(AdvancedEffectFancyKaraoke.GlowColor), false); - // Show/hide the row based on the checkbox state - activeGlowColorButton.Bind(Button.IsVisibleProperty, new Binding(nameof(CheckBox.IsChecked)) { Source = applyGlowCheckBox, Mode = BindingMode.OneWay }); - activeGlowRow.Children.Add(activeGlowColorButton); - - var activeColorRow = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8, Margin = new Thickness(0, 4, 0, 0) }; - activeColorRow.Children.Add(new TextBlock { Text = Se.Language.Assa.AdvancedEffectFancyKaraokeActiveColor, VerticalAlignment = VerticalAlignment.Center, FontSize = UiUtil.ScaledFontSize(12) }); - activeColorRow.Children.Add(UiUtil.MakeColorPickerButton(fancyKaraokeItem, nameof(AdvancedEffectFancyKaraoke.ActiveWordColor), false)); - - var inactiveColorRow = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8, Margin = new Thickness(0, 4, 0, 0) }; - inactiveColorRow.Children.Add(new TextBlock { Text = Se.Language.Assa.AdvancedEffectFancyKaraokeInactiveColor, VerticalAlignment = VerticalAlignment.Center, FontSize = UiUtil.ScaledFontSize(12) }); - inactiveColorRow.Children.Add(UiUtil.MakeColorPickerButton(fancyKaraokeItem, nameof(AdvancedEffectFancyKaraoke.InactiveWordColor), true)); - - var settingsStack = new StackPanel { Spacing = 2 }; - settingsStack.Children.Add(autoDetectActiveWordRow); - settingsStack.Children.Add(rightToLeftRow); - settingsStack.Children.Add(activeGlowRow); - settingsStack.Children.Add(activeColorRow); - settingsStack.Children.Add(inactiveColorRow); - panel.Children.Add(settingsStack); - } - else if (item is AdvancedEffectLowerThird lowerThirdItem) - { - var row = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8, Margin = new Thickness(0, 6, 0, 0) }; - row.Children.Add(new TextBlock { Text = Se.Language.Assa.AdvancedEffectLowerThirdAccentColor, VerticalAlignment = VerticalAlignment.Center, FontSize = UiUtil.ScaledFontSize(12) }); - row.Children.Add(UiUtil.MakeColorPickerButton(lowerThirdItem, nameof(AdvancedEffectLowerThird.AccentColor), false)); - panel.Children.Add(row); - } - else if (item is AdvancedEffectWordSpacing wordSpacingItem) - { - var row = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8, Margin = new Thickness(0, 6, 0, 0) }; - row.Children.Add(new TextBlock { Text = Se.Language.Assa.AdvancedEffectWordSpacingPixels, VerticalAlignment = VerticalAlignment.Center, FontSize = UiUtil.ScaledFontSize(12) }); - row.Children.Add(UiUtil.MakeNumericUpDownOneDecimal(0m, 100m, 130, wordSpacingItem, nameof(AdvancedEffectWordSpacing.SpacingPixels))); - panel.Children.Add(row); - } - - return panel; - }), + var leftGrid = new Grid + { + RowDefinitions = new RowDefinitions("Auto,Auto,*"), + RowSpacing = 8, }; + leftGrid.Add(searchBox, 0); + leftGrid.Add(categoryList, 1); + leftGrid.Add(MakeCard(galleryHost, new Thickness(4)), 2); - var scopePanel = new StackPanel + // ── Right: preview, customize, apply to ─────────────────────────────── + vm.VideoPlayerControl = InitVideoPlayer.MakeVideoPlayer(); + vm.VideoPlayerControl.FullScreenIsVisible = false; + vm.VideoPlayerControl.Bind(IsVisibleProperty, new Binding(nameof(vm.HasVideo))); + + var samplePreview = new EffectPreviewControl { - Spacing = 5, - Margin = new Thickness(0, 8, 0, 0), - Children = + IsPlaying = true, + [!EffectPreviewControl.AdvancedEffectProperty] = new Binding(nameof(vm.SelectedOverrideTag)), + [!EffectPreviewControl.PreviewTextProperty] = new Binding(nameof(vm.PreviewText)), + }; + var sampleCaption = new Border + { + Background = new SolidColorBrush(Color.FromArgb(0x99, 0, 0, 0)), + CornerRadius = new CornerRadius(6), + Padding = new Thickness(8, 3), + Margin = new Thickness(10), + HorizontalAlignment = HorizontalAlignment.Left, + VerticalAlignment = VerticalAlignment.Top, + Child = new TextBlock { - UiUtil.MakeLabel(Se.Language.General.ApplyTo).WithBold(), - new RadioButton - { - Content = Se.Language.Sync.AdjustAll, - [!RadioButton.IsCheckedProperty] = new Binding(nameof(vm.AdjustAll)), - }, - new RadioButton - { - Content = Se.Language.Sync.AdjustSelectedLines, - [!RadioButton.IsCheckedProperty] = new Binding(nameof(vm.AdjustSelectedLines)), - }, - new RadioButton - { - Content = Se.Language.Sync.AdjustSelectedLinesAndForward, - [!RadioButton.IsCheckedProperty] = new Binding(nameof(vm.AdjustSelectedLinesAndForward)), - }, - UiUtil.MakeLabel().WithBindText(vm, nameof(vm.SelectionInfo)).WithOpacity(0.6), + Text = Se.Language.Assa.AdvancedEffectPreviewNoVideo, + Foreground = Brushes.White, + FontSize = UiUtil.ScaledFontSize(11), }, }; - - var leftGrid = new Grid + var samplePreviewHost = new Border { - RowDefinitions = new RowDefinitions("Auto,*,Auto"), - RowSpacing = 8, + CornerRadius = new CornerRadius(8), + ClipToBounds = true, + Child = new Grid { Children = { samplePreview, sampleCaption } }, + [!Border.IsVisibleProperty] = new Binding(nameof(vm.HasVideo)) { Converter = BoolConverters.Not }, }; - leftGrid.Add(chooseLabel, 0); - leftGrid.Add(UiUtil.MakeBorderForControlNoPadding(effectListBox), 1); - leftGrid.Add(scopePanel, 2); - // ── Right panel (video + subtitle navigation) ───────────────────────── - vm.VideoPlayerControl = InitVideoPlayer.MakeVideoPlayer(); - vm.VideoPlayerControl.FullScreenIsVisible = false; + var previewArea = new Grid { MinHeight = 240 }; + previewArea.Children.Add(vm.VideoPlayerControl); + previewArea.Children.Add(samplePreviewHost); var comboBoxLeft = UiUtil.MakeComboBoxBindText( vm.Paragraphs, vm, nameof(SubtitleDisplayItem.Text), nameof(vm.SelectedParagraphIndex)); comboBoxLeft.Width = double.NaN; - comboBoxLeft.MinHeight = 50; comboBoxLeft.HorizontalAlignment = HorizontalAlignment.Stretch; comboBoxLeft.WithAccessibleName(Se.Language.General.Lines); // subtitle line picker under the video, no visible label (#12087) vm.ComboBoxLeft = comboBoxLeft; comboBoxLeft.SelectionChanged += vm.ComboBoxParagraphsChanged; - var buttonPlay = UiUtil.MakeButton(Se.Language.General.PlayCurrent, vm.PlayAndBackCommand) - .WithLeftAlignment(); + var buttonPlay = UiUtil.MakeButton(Se.Language.General.PlayCurrent, vm.PlayAndBackCommand); + buttonPlay.Bind(IsVisibleProperty, new Binding(nameof(vm.HasVideo))); + + var lineRow = new Grid + { + ColumnDefinitions = new ColumnDefinitions("*,Auto"), + ColumnSpacing = 8, + }; + lineRow.Add(comboBoxLeft, 0, 0); + lineRow.Add(buttonPlay, 0, 1); - var videoGrid = new Grid + var previewGrid = new Grid { - RowDefinitions = new RowDefinitions("*,Auto,Auto"), + RowDefinitions = new RowDefinitions("*,Auto"), RowSpacing = 8, }; - videoGrid.Add(vm.VideoPlayerControl, 0); - videoGrid.Add(comboBoxLeft, 1); - videoGrid.Add(buttonPlay, 2); + previewGrid.Add(previewArea, 0); + previewGrid.Add(lineRow, 1); + + var settingsHost = new ContentControl(); + var customizeCard = MakeCard(MakeCustomizeSection(vm, accent, settingsHost), new Thickness(16, 12)); + var applyToCard = MakeCard(MakeApplyToSection(vm, accent), new Thickness(16, 12)); + + // Customize + Apply to scroll when they would squeeze the video (and its controls) + var optionsScrollViewer = new ScrollViewer + { + HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled, + VerticalScrollBarVisibility = ScrollBarVisibility.Auto, + Content = new StackPanel + { + Spacing = 10, + Children = { customizeCard, applyToCard }, + }, + }; + + var rightGrid = new Grid + { + RowDefinitions = new RowDefinitions("*,Auto"), + RowSpacing = 10, + }; + rightGrid.Add(MakeCard(previewGrid, new Thickness(8)), 0); + rightGrid.Add(optionsScrollViewer, 1); + rightGrid.SizeChanged += (_, e) => optionsScrollViewer.MaxHeight = e.NewSize.Height * 0.45; // ── Main layout ─────────────────────────────────────────────────────── var buttonOk = UiUtil.MakeButtonOk(vm.OkCommand); @@ -204,22 +177,458 @@ public AssaApplyAdvancedEffectWindow(AssaApplyAdvancedEffectViewModel vm) var mainGrid = new Grid { RowDefinitions = new RowDefinitions("*,Auto"), - ColumnDefinitions = new ColumnDefinitions("260,*"), + ColumnDefinitions = new ColumnDefinitions("5*,4*"), Margin = UiUtil.MakeWindowMargin(), - ColumnSpacing = 12, - RowSpacing = 10, + ColumnSpacing = 14, + RowSpacing = 12, }; mainGrid.Add(leftGrid, 0, 0); - mainGrid.Add(UiUtil.MakeBorderForControl(videoGrid), 0, 1); + mainGrid.Add(rightGrid, 0, 1); mainGrid.Add(buttonPanel, 1, 0, 1, 2); Content = mainGrid; + settingsHost.Content = MakeSettings(vm.SelectedOverrideTag); + vm.PropertyChanged += (_, e) => + { + if (e.PropertyName == nameof(vm.SelectedOverrideTag)) + { + settingsHost.Content = MakeSettings(vm.SelectedOverrideTag); + } + }; + // initial focus on an input, not an action button - a focused button clicks on bare Space - UiUtil.FocusOnFirstActivation(this, effectListBox); + UiUtil.FocusOnFirstActivation(this, gallery); AddHandler(KeyDownEvent, vm.OnKeyDownHandler, RoutingStrategies.Tunnel | RoutingStrategies.Bubble, handledEventsToo: false); Loaded += (_, _) => vm.OnLoaded(); Closing += (_, e) => vm.OnClosing(); } + + private static Color GetAccentColor() + { + return Application.Current != null && + Application.Current.TryGetResource("SystemAccentColor", Application.Current.ActualThemeVariant, out var value) && + value is Color color + ? color + : Color.FromRgb(0x00, 0x78, 0xD4); + } + + private static ListBox MakeCategoryList(AssaApplyAdvancedEffectViewModel vm) + { + return new ListBox + { + Background = Brushes.Transparent, + [!ItemsControl.ItemsSourceProperty] = new Binding(nameof(vm.Categories)), + [!SelectingItemsControl.SelectedItemProperty] = new Binding(nameof(vm.SelectedCategory)) { Mode = BindingMode.TwoWay }, + ItemsPanel = new FuncTemplate(() => new WrapPanel { Orientation = Orientation.Horizontal }), + ItemContainerTheme = new ControlTheme(typeof(ListBoxItem)) + { + BasedOn = Application.Current?.FindResource(typeof(ListBoxItem)) as ControlTheme, + Setters = + { + new Setter(ListBoxItem.PaddingProperty, new Thickness(10, 5)), + new Setter(ListBoxItem.MarginProperty, new Thickness(0, 0, 6, 6)), + new Setter(ListBoxItem.CornerRadiusProperty, new CornerRadius(14)), + new Setter(AutomationProperties.NameProperty, new Binding(nameof(AdvancedEffectCategoryItem.Name))), + }, + }, + ItemTemplate = new FuncDataTemplate((_, _) => + { + var dot = new Border + { + Width = 22, + Height = 22, + CornerRadius = new CornerRadius(11), + VerticalAlignment = VerticalAlignment.Center, + [!Border.BackgroundProperty] = new Binding(nameof(AdvancedEffectCategoryItem.Brush)), + }; + var icon = new ContentControl + { + FontSize = 13, + Foreground = Brushes.White, + HorizontalAlignment = HorizontalAlignment.Center, + VerticalAlignment = VerticalAlignment.Center, + }; + icon.Bind(Attached.IconProperty, new Binding(nameof(AdvancedEffectCategoryItem.IconName))); + icon.Classes.Add(UiTheme.IconOnAccentClassName); + dot.Child = icon; + + return new StackPanel + { + Orientation = Orientation.Horizontal, + Spacing = 6, + Children = + { + dot, + new TextBlock + { + VerticalAlignment = VerticalAlignment.Center, + FontWeight = FontWeight.SemiBold, + [!TextBlock.TextProperty] = new Binding(nameof(AdvancedEffectCategoryItem.Name)), + }, + new TextBlock + { + VerticalAlignment = VerticalAlignment.Center, + Opacity = 0.55, + FontSize = UiUtil.ScaledFontSize(11), + [!TextBlock.TextProperty] = new Binding(nameof(AdvancedEffectCategoryItem.Count)), + }, + }, + }; + }), + }; + } + + private static ListBox MakeGallery(AssaApplyAdvancedEffectViewModel vm) + { + return new ListBox + { + Background = Brushes.Transparent, + [!ItemsControl.ItemsSourceProperty] = new Binding(nameof(vm.FilteredEffects)), + [!SelectingItemsControl.SelectedItemProperty] = new Binding(nameof(vm.SelectedGalleryEffect)) { Mode = BindingMode.TwoWay }, + ItemsPanel = new FuncTemplate(() => new WrapPanel { Orientation = Orientation.Horizontal, HorizontalAlignment = HorizontalAlignment.Center }), + ItemContainerTheme = new ControlTheme(typeof(ListBoxItem)) + { + BasedOn = Application.Current?.FindResource(typeof(ListBoxItem)) as ControlTheme, + Setters = + { + new Setter(ListBoxItem.PaddingProperty, new Thickness(5)), + new Setter(ListBoxItem.MarginProperty, new Thickness(3)), + new Setter(ListBoxItem.CornerRadiusProperty, new CornerRadius(10)), + new Setter(AutomationProperties.NameProperty, new Binding(nameof(IAdvancedEffectDisplay.Name))), + }, + }, + ItemTemplate = new FuncDataTemplate((effect, _) => + { + var preview = new EffectPreviewControl + { + [!EffectPreviewControl.AdvancedEffectProperty] = new Binding("."), + // Animate only the tile under the mouse and the chosen one + [!EffectPreviewControl.IsPlayingProperty] = new MultiBinding + { + Converter = BoolConverters.Or, + Bindings = + { + new Binding(nameof(ListBoxItem.IsPointerOver)) { RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor) { AncestorType = typeof(ListBoxItem) } }, + new Binding(nameof(ListBoxItem.IsSelected)) { RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor) { AncestorType = typeof(ListBoxItem) } }, + }, + }, + }; + + var frame = new Border + { + Width = TileWidth, + Height = TileHeight, + CornerRadius = new CornerRadius(8), + ClipToBounds = true, + Child = preview, + }; + + var name = new TextBlock + { + Width = TileWidth, + FontSize = UiUtil.ScaledFontSize(12), + TextAlignment = TextAlignment.Center, + TextWrapping = TextWrapping.Wrap, + MaxLines = 2, + TextTrimming = TextTrimming.CharacterEllipsis, + Margin = new Thickness(0, 5, 0, 1), + [!TextBlock.TextProperty] = new Binding(nameof(IAdvancedEffectDisplay.Name)), + }; + + var tile = new StackPanel { Children = { frame, name } }; + if (Se.Settings.Appearance.ShowHints) + { + tile.Bind(ToolTip.TipProperty, new Binding(nameof(IAdvancedEffectDisplay.Description))); + } + + return tile; + }), + }; + } + + /// + /// Up/Down in the wrapped tile grid: jump to the nearest tile in the row above/below + /// (the list box itself treats the wrap panel as one long row). + /// + private static void MoveGallerySelectionVertically(ListBox gallery, KeyEventArgs e) + { + if (e.KeyModifiers != KeyModifiers.None || (e.Key != Key.Up && e.Key != Key.Down)) + { + return; + } + + var count = gallery.ItemCount; + var currentIndex = gallery.SelectedIndex; + if (count == 0) + { + return; + } + + if (currentIndex < 0 || gallery.ContainerFromIndex(currentIndex) is not { } current) + { + gallery.SelectedIndex = 0; + e.Handled = true; + return; + } + + var down = e.Key == Key.Down; + var currentTop = current.Bounds.Top; + var currentCenter = current.Bounds.Center.X; + var bestIndex = -1; + var bestRowDistance = double.MaxValue; + var bestColumnDistance = double.MaxValue; + for (var i = 0; i < count; i++) + { + if (gallery.ContainerFromIndex(i) is not { } candidate) + { + continue; + } + + var rowDistance = down ? candidate.Bounds.Top - currentTop : currentTop - candidate.Bounds.Top; + if (rowDistance < 1) + { + continue; + } + + var columnDistance = System.Math.Abs(candidate.Bounds.Center.X - currentCenter); + if (rowDistance < bestRowDistance - 1 || + (System.Math.Abs(rowDistance - bestRowDistance) <= 1 && columnDistance < bestColumnDistance)) + { + bestIndex = i; + bestRowDistance = rowDistance; + bestColumnDistance = columnDistance; + } + } + + e.Handled = true; + if (bestIndex < 0) + { + return; + } + + gallery.SelectedIndex = bestIndex; + gallery.ScrollIntoView(bestIndex); + gallery.ContainerFromIndex(bestIndex)?.Focus(NavigationMethod.Directional); + } + + private static Control MakeCustomizeSection(AssaApplyAdvancedEffectViewModel vm, Color accent, ContentControl settingsHost) + { + var sectionTitle = new StackPanel + { + Orientation = Orientation.Horizontal, + Spacing = 6, + Children = + { + new Icon { Value = IconNames.Tune, FontSize = 16, Foreground = new SolidColorBrush(accent) }, + new TextBlock + { + Text = Se.Language.Assa.AdvancedEffectCustomize.ToUpperInvariant(), + FontSize = UiUtil.ScaledFontSize(11), + FontWeight = FontWeight.SemiBold, + Foreground = new SolidColorBrush(accent), + VerticalAlignment = VerticalAlignment.Center, + }, + }, + }; + + var name = new TextBlock + { + FontSize = UiUtil.ScaledFontSize(16), + FontWeight = FontWeight.SemiBold, + [!TextBlock.TextProperty] = new Binding($"{nameof(vm.SelectedOverrideTag)}.{nameof(IAdvancedEffectDisplay.Name)}"), + }; + + var description = new TextBlock + { + Opacity = 0.7, + TextWrapping = TextWrapping.Wrap, + FontSize = UiUtil.ScaledFontSize(12), + [!TextBlock.TextProperty] = new Binding($"{nameof(vm.SelectedOverrideTag)}.{nameof(IAdvancedEffectDisplay.Description)}"), + }; + + settingsHost.Margin = new Thickness(0, 6, 0, 0); + + return new StackPanel + { + Spacing = 4, + Children = { sectionTitle, name, description, settingsHost }, + }; + } + + private static Control MakeApplyToSection(AssaApplyAdvancedEffectViewModel vm, Color accent) + { + var title = new StackPanel + { + Orientation = Orientation.Horizontal, + Spacing = 6, + Children = + { + new Icon { Value = IconNames.FormatListChecks, FontSize = 16, Foreground = new SolidColorBrush(accent) }, + new TextBlock + { + Text = Se.Language.General.ApplyTo.ToUpperInvariant(), + FontSize = UiUtil.ScaledFontSize(11), + FontWeight = FontWeight.SemiBold, + Foreground = new SolidColorBrush(accent), + VerticalAlignment = VerticalAlignment.Center, + }, + }, + }; + + var segments = new WrapPanel + { + Orientation = Orientation.Horizontal, + ItemSpacing = 4, + LineSpacing = 4, + Children = + { + MakeSegment(Se.Language.Sync.AdjustAll, nameof(vm.AdjustAll)), + MakeSegment(Se.Language.Sync.AdjustSelectedLines, nameof(vm.AdjustSelectedLines)), + MakeSegment(Se.Language.Sync.AdjustSelectedLinesAndForward, nameof(vm.AdjustSelectedLinesAndForward)), + }, + }; + + return new StackPanel + { + Spacing = 8, + Children = + { + title, + segments, + UiUtil.MakeLabel().WithBindText(vm, nameof(vm.SelectionInfo)).WithOpacity(0.6), + }, + }; + } + + private static RadioButton MakeSegment(string text, string isCheckedPath) + { + // A radio button wearing the toggle button look - a segmented control + var radioButton = new RadioButton + { + Content = text, + GroupName = "AdvancedEffectApplyTo", + Padding = new Thickness(12, 5), + CornerRadius = new CornerRadius(14), + [!ToggleButton.IsCheckedProperty] = new Binding(isCheckedPath) { Mode = BindingMode.TwoWay }, + }; + + if (Application.Current?.FindResource(typeof(ToggleButton)) is ControlTheme toggleTheme) + { + radioButton.Theme = toggleTheme; + } + + return radioButton; + } + + private static Control MakeSettings(IAdvancedEffectDisplay? effect) + { + var grid = new Grid + { + ColumnDefinitions = new ColumnDefinitions("Auto,*"), + ColumnSpacing = 12, + RowSpacing = 6, + }; + + void AddRow(string label, Control control) + { + grid.RowDefinitions.Add(new RowDefinition(GridLength.Auto)); + var row = grid.RowDefinitions.Count - 1; + grid.Add(new TextBlock { Text = label, VerticalAlignment = VerticalAlignment.Center }, row, 0); + control.HorizontalAlignment = HorizontalAlignment.Left; + grid.Add(control.WithAccessibleName(label), row, 1); + } + + var l = Se.Language.Assa; + switch (effect) + { + case AdvancedEffectSnow snow: + AddRow(l.AdvancedEffectSnowFlakeCount, UiUtil.MakeNumericUpDownInt(10, 3000, 200, 140, snow, nameof(AdvancedEffectSnow.FlakeCount))); + break; + case AdvancedEffectStarfield starfield: + AddRow(l.AdvancedEffectStarfieldStarCount, UiUtil.MakeNumericUpDownInt(50, 3000, 650, 140, starfield, nameof(AdvancedEffectStarfield.StarCount))); + AddRow(Se.Language.General.Speed, UiUtil.MakeNumericUpDownOneDecimal(0.1m, 10.0m, 140, starfield, nameof(AdvancedEffectStarfield.SpeedMultiplier))); + break; + case AdvancedEffectConfetti confetti: + AddRow(l.AdvancedEffectAmount, UiUtil.MakeNumericUpDownInt(10, 1000, 150, 140, confetti, nameof(AdvancedEffectConfetti.PieceCount))); + break; + case AdvancedEffectFireflies fireflies: + AddRow(l.AdvancedEffectAmount, UiUtil.MakeNumericUpDownInt(5, 500, 60, 140, fireflies, nameof(AdvancedEffectFireflies.FireflyCount))); + break; + case AdvancedEffectHearts hearts: + AddRow(l.AdvancedEffectAmount, UiUtil.MakeNumericUpDownInt(10, 1000, 120, 140, hearts, nameof(AdvancedEffectHearts.HeartCount))); + break; + case AdvancedEffectMatrix matrix: + AddRow(l.AdvancedEffectAmount, UiUtil.MakeNumericUpDownInt(5, 200, 55, 140, matrix, nameof(AdvancedEffectMatrix.ColumnCount))); + break; + case AdvancedEffectKaraoke karaoke: + AddRow(l.AdvancedEffectKaraokeRightToLeft, UiUtil.MakeCheckBox(karaoke, nameof(AdvancedEffectKaraoke.RightToLeft))); + break; + case AdvancedEffectFancyKaraoke fancyKaraoke: + { + AddRow(l.AdvancedEffectFancyKaraokeAutoDetectActiveWord, UiUtil.MakeCheckBox(fancyKaraoke, nameof(AdvancedEffectFancyKaraoke.AutoDetectActiveWord))); + AddRow(l.AdvancedEffectKaraokeRightToLeft, UiUtil.MakeCheckBox(fancyKaraoke, nameof(AdvancedEffectFancyKaraoke.RightToLeft))); + var applyGlow = UiUtil.MakeCheckBox(fancyKaraoke, nameof(AdvancedEffectFancyKaraoke.ApplyGlow)); + var glowColor = UiUtil.MakeColorPickerButton(fancyKaraoke, nameof(AdvancedEffectFancyKaraoke.GlowColor), false); + glowColor.Bind(IsVisibleProperty, new Binding(nameof(CheckBox.IsChecked)) { Source = applyGlow, Mode = BindingMode.OneWay }); + AddRow(l.AdvancedEffectFancyKaraokeGlow, new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8, Children = { applyGlow, glowColor } }); + AddRow(l.AdvancedEffectFancyKaraokeActiveColor, UiUtil.MakeColorPickerButton(fancyKaraoke, nameof(AdvancedEffectFancyKaraoke.ActiveWordColor), false)); + AddRow(l.AdvancedEffectFancyKaraokeInactiveColor, UiUtil.MakeColorPickerButton(fancyKaraoke, nameof(AdvancedEffectFancyKaraoke.InactiveWordColor), true)); + break; + } + case AdvancedEffectHighlightBox highlightBox: + AddRow(Se.Language.General.BoxColor, UiUtil.MakeColorPickerButton(highlightBox, nameof(AdvancedEffectHighlightBox.BoxColor), false)); + AddRow(l.AdvancedEffectFancyKaraokeActiveColor, UiUtil.MakeColorPickerButton(highlightBox, nameof(AdvancedEffectHighlightBox.ActiveTextColor), false)); + AddRow(l.AdvancedEffectUpperCase, UiUtil.MakeCheckBox(highlightBox, nameof(AdvancedEffectHighlightBox.UpperCase))); + break; + case AdvancedEffectSingleWordPop singleWordPop: + AddRow(Se.Language.General.TextColor, UiUtil.MakeColorPickerButton(singleWordPop, nameof(AdvancedEffectSingleWordPop.TextColor), false)); + AddRow(l.AdvancedEffectTextSizePercent, UiUtil.MakeNumericUpDownInt(50, 500, 150, 140, singleWordPop, nameof(AdvancedEffectSingleWordPop.TextSizePercent))); + AddRow(l.AdvancedEffectUpperCase, UiUtil.MakeCheckBox(singleWordPop, nameof(AdvancedEffectSingleWordPop.UpperCase))); + break; + case AdvancedEffectBoldCaptions boldCaptions: + AddRow(l.AdvancedEffectHighlightColor, UiUtil.MakeColorPickerButton(boldCaptions, nameof(AdvancedEffectBoldCaptions.HighlightColor), false)); + AddRow(l.AdvancedEffectUpperCase, UiUtil.MakeCheckBox(boldCaptions, nameof(AdvancedEffectBoldCaptions.UpperCase))); + break; + case AdvancedEffectSmoothFill smoothFill: + AddRow(l.AdvancedEffectFillColor, UiUtil.MakeColorPickerButton(smoothFill, nameof(AdvancedEffectSmoothFill.FillColor), false)); + AddRow(Se.Language.General.TextColor, UiUtil.MakeColorPickerButton(smoothFill, nameof(AdvancedEffectSmoothFill.BaseColor), false)); + AddRow(l.AdvancedEffectUpperCase, UiUtil.MakeCheckBox(smoothFill, nameof(AdvancedEffectSmoothFill.UpperCase))); + break; + case AdvancedEffectBlurInWords blurInWords: + AddRow(l.AdvancedEffectRise, UiUtil.MakeCheckBox(blurInWords, nameof(AdvancedEffectBlurInWords.Rise))); + AddRow(l.AdvancedEffectUpperCase, UiUtil.MakeCheckBox(blurInWords, nameof(AdvancedEffectBlurInWords.UpperCase))); + break; + case AdvancedEffectLowerThird lowerThird: + AddRow(l.AdvancedEffectLowerThirdAccentColor, UiUtil.MakeColorPickerButton(lowerThird, nameof(AdvancedEffectLowerThird.AccentColor), false)); + break; + case AdvancedEffectWordSpacing wordSpacing: + AddRow(l.AdvancedEffectWordSpacingPixels, UiUtil.MakeNumericUpDownOneDecimal(0m, 100m, 140, wordSpacing, nameof(AdvancedEffectWordSpacing.SpacingPixels))); + break; + default: + return new TextBlock + { + Text = l.AdvancedEffectNoSettings, + Opacity = 0.55, + FontStyle = FontStyle.Italic, + TextWrapping = TextWrapping.Wrap, + }; + } + + return grid; + } + + private static Border MakeCard(Control child, Thickness padding) + { + return new Border + { + Child = child, + Padding = padding, + CornerRadius = new CornerRadius(10), + BorderThickness = new Thickness(1), + BorderBrush = new SolidColorBrush(Color.FromArgb(0x40, 0x80, 0x80, 0x80)), + Background = new SolidColorBrush(Color.FromArgb(0x0A, 0x80, 0x80, 0x80)), + }; + } } diff --git a/src/ui/Features/Assa/AssaApplyAdvancedEffect/EffectPreviewControl.cs b/src/ui/Features/Assa/AssaApplyAdvancedEffect/EffectPreviewControl.cs new file mode 100644 index 00000000000..a64e09d2497 --- /dev/null +++ b/src/ui/Features/Assa/AssaApplyAdvancedEffect/EffectPreviewControl.cs @@ -0,0 +1,101 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Media; +using System.Diagnostics; + +namespace Nikse.SubtitleEdit.Features.Assa.AssaApplyAdvancedEffect; + +/// +/// Animated effect preview (see ). While not animating it +/// shows a still "poster" frame, so a gallery full of tiles costs nothing until hovered. +/// +public class EffectPreviewControl : Control +{ + public static readonly StyledProperty AdvancedEffectProperty = + AvaloniaProperty.Register(nameof(AdvancedEffect)); + + public static readonly StyledProperty PreviewTextProperty = + AvaloniaProperty.Register(nameof(PreviewText), "Subtitle Edit"); + + public static readonly StyledProperty IsPlayingProperty = + AvaloniaProperty.Register(nameof(IsPlaying)); + + private readonly Stopwatch _clock = new(); + private bool _frameRequested; + + static EffectPreviewControl() + { + AffectsRender(AdvancedEffectProperty, PreviewTextProperty, IsPlayingProperty); + ClipToBoundsProperty.OverrideDefaultValue(true); + } + + public IAdvancedEffectDisplay? AdvancedEffect + { + get => GetValue(AdvancedEffectProperty); + set => SetValue(AdvancedEffectProperty, value); + } + + public string PreviewText + { + get => GetValue(PreviewTextProperty); + set => SetValue(PreviewTextProperty, value); + } + + public bool IsPlaying + { + get => GetValue(IsPlayingProperty); + set => SetValue(IsPlayingProperty, value); + } + + protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) + { + base.OnPropertyChanged(change); + if (change.Property == IsPlayingProperty || change.Property == AdvancedEffectProperty) + { + _clock.Restart(); + RequestFrame(); + } + } + + protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) + { + base.OnAttachedToVisualTree(e); + RequestFrame(); + } + + private void RequestFrame() + { + if (_frameRequested || !IsPlaying) + { + return; + } + + var topLevel = TopLevel.GetTopLevel(this); + if (topLevel == null) + { + return; + } + + _frameRequested = true; + topLevel.RequestAnimationFrame(_ => + { + _frameRequested = false; + if (!IsPlaying || VisualRoot == null) + { + return; + } + + InvalidateVisual(); + RequestFrame(); + }); + } + + public override void Render(DrawingContext context) + { + var effect = AdvancedEffect; + var time = IsPlaying + ? _clock.Elapsed.TotalSeconds + : EffectPreviewRenderer.GetPosterTime(AdvancedEffectCatalog.GetPreviewKind(effect)); + EffectPreviewRenderer.Render(context, new Rect(Bounds.Size), effect, time, PreviewText); + } +} diff --git a/src/ui/Features/Assa/AssaApplyAdvancedEffect/EffectPreviewRenderer.cs b/src/ui/Features/Assa/AssaApplyAdvancedEffect/EffectPreviewRenderer.cs new file mode 100644 index 00000000000..f4f6dd45d45 --- /dev/null +++ b/src/ui/Features/Assa/AssaApplyAdvancedEffect/EffectPreviewRenderer.cs @@ -0,0 +1,1288 @@ +using Avalonia; +using Avalonia.Media; +using Nikse.SubtitleEdit.Features.Assa.AssaApplyAdvancedEffect.Effects; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; + +namespace Nikse.SubtitleEdit.Features.Assa.AssaApplyAdvancedEffect; + +/// +/// Draws a looping, stylised approximation of an advanced effect with plain Avalonia drawing, +/// for the gallery tiles and for the preview when no video is loaded. Text is laid out per +/// text element so each letter/word can be animated on its own. +/// +public static class EffectPreviewRenderer +{ + public const double CycleSeconds = 3.6; + + private const string ScrambleChars = "ABCDEFGHJKLMNPQRSTUVWXYZ0123456789#$%&@"; + private const string MatrixChars = "01アイウエオカキクケコサシスセソタチツテト"; + + private static readonly Typeface BoldTypeface = new(FontFamily.Default, FontStyle.Normal, FontWeight.Bold); + private static readonly IBrush OutlineBrush = new SolidColorBrush(Color.FromArgb(0xE6, 0x10, 0x10, 0x14)); + private static readonly Dictionary<(string Text, double Size), (Geometry? Geometry, double Width, double Height)> GlyphCache = new(); + private static readonly Dictionary<(string Text, double Size, double MaxWidth, int MaxLines), PreviewTextLayout> LayoutCache = new(); + private static Geometry? _heartGeometry; + + private sealed class PreviewGlyph + { + public required string Text { get; init; } + public Geometry? Geometry { get; init; } + public double X { get; set; } + public double Y { get; set; } + public double Width { get; init; } + public double Height { get; init; } + public int Index { get; init; } + public int Word { get; init; } + public int Line { get; set; } + public int WordInLine { get; set; } + public int WordsInLine { get; set; } + public bool IsSpace { get; init; } + } + + private sealed class PreviewTextLayout + { + public List Glyphs { get; } = new(); + public int WordCount { get; set; } + public int VisibleCount { get; set; } + public double Width { get; set; } + public double Height { get; set; } + public double LineHeight { get; set; } + public double FontSize { get; init; } + } + + private readonly struct GlyphStyle + { + public IBrush Fill { get; init; } + public double Opacity { get; init; } + public double ScaleX { get; init; } + public double ScaleY { get; init; } + public double Dx { get; init; } + public double Dy { get; init; } + public Color? Glow { get; init; } + public string? Replacement { get; init; } + + public static GlyphStyle Default(IBrush fill) => new() { Fill = fill, Opacity = 1, ScaleX = 1, ScaleY = 1 }; + } + + /// + /// A representative moment of the loop for a still (non-animating) tile. + /// + public static double GetPosterTime(EffectPreviewKind kind) + { + var p = kind switch + { + EffectPreviewKind.ScreenFadeIn => 0.3, + EffectPreviewKind.ScreenFadeOut => 0.75, + EffectPreviewKind.TvClose => 0.35, + EffectPreviewKind.Typewriter or EffectPreviewKind.TypewriterHighlight => 0.42, + EffectPreviewKind.Karaoke or EffectPreviewKind.WordPop or EffectPreviewKind.ScrambleReveal => 0.45, + EffectPreviewKind.HighlightBox or EffectPreviewKind.BoldCaptions => 0.35, + EffectPreviewKind.SingleWordPop => 0.3, + EffectPreviewKind.SmoothFill => 0.42, + EffectPreviewKind.BlurInWords => 0.32, + EffectPreviewKind.RollingCaptions => 0.7, + EffectPreviewKind.WordByWord => 0.4, + EffectPreviewKind.SlideInLeft or EffectPreviewKind.SlideInRight => 0.13, + EffectPreviewKind.BounceIn => 0.13, + EffectPreviewKind.WordFlip3D => 0.17, + EffectPreviewKind.CinematicTitle => 0.3, + EffectPreviewKind.StarWarsScroll or EffectPreviewKind.CreditsScroll => 0.45, + EffectPreviewKind.Confetti => 0.16, + EffectPreviewKind.Glitch => 0.08, + _ => 0.6, + }; + return p * CycleSeconds; + } + + public static void Render(DrawingContext ctx, Rect bounds, IAdvancedEffectDisplay? effect, double time, string text) + { + if (bounds.Width < 4 || bounds.Height < 4) + { + return; + } + + var kind = AdvancedEffectCatalog.GetPreviewKind(effect); + var t = time % CycleSeconds; + var p = t / CycleSeconds; + + DrawBackground(ctx, bounds, kind, time); + + // tiles get relatively big text so it reads at thumbnail size; the large preview uses subtitle-like proportions + var small = bounds.Height < 120; + var fontSize = Math.Clamp(Math.Min(bounds.Height * (small ? 0.19 : 0.11), bounds.Width * (small ? 0.1 : 0.06)), 8, 64); + var maxLines = bounds.Height > 150 ? 3 : 2; + if (kind is EffectPreviewKind.LowerThird or EffectPreviewKind.CreditsScroll) + { + fontSize *= 0.8; + } + + if (effect is AdvancedEffectHighlightBox { UpperCase: true } or AdvancedEffectSingleWordPop { UpperCase: true } or + AdvancedEffectBoldCaptions { UpperCase: true } or AdvancedEffectSmoothFill { UpperCase: true } or AdvancedEffectBlurInWords { UpperCase: true }) + { + text = text.ToUpper(CultureInfo.CurrentCulture); + } + + var layout = GetLayout(text, fontSize, bounds.Width * 0.86, maxLines); + if (layout.Glyphs.Count == 0) + { + return; + } + + var origin = new Point( + bounds.X + (bounds.Width - layout.Width) / 2, + bounds.Bottom - layout.Height - bounds.Height * 0.1); + + switch (kind) + { + case EffectPreviewKind.ScreenFadeIn: + DrawText(ctx, layout, origin, g => GlyphStyle.Default(Brushes.White)); + FillRect(ctx, bounds, Colors.Black, 1 - EaseOutCubic(Clamp01(p / 0.6))); + break; + case EffectPreviewKind.ScreenFadeOut: + DrawText(ctx, layout, origin, g => GlyphStyle.Default(Brushes.White)); + FillRect(ctx, bounds, Colors.Black, EaseInCubic(Clamp01((p - 0.35) / 0.55))); + break; + case EffectPreviewKind.TvClose: + DrawTvClose(ctx, bounds, layout, origin, p); + break; + case EffectPreviewKind.FadeInOut: + { + var opacity = Math.Min(Clamp01(p / 0.2), Clamp01((1 - p) / 0.2)); + DrawText(ctx, layout, origin, g => GlyphStyle.Default(Brushes.White) with { Opacity = opacity }); + break; + } + case EffectPreviewKind.SlideInLeft: + case EffectPreviewKind.SlideInRight: + { + var direction = kind == EffectPreviewKind.SlideInLeft ? -1 : 1; + var into = EaseOutCubic(Clamp01(p / 0.25)); + var away = EaseInCubic(Clamp01((p - 0.8) / 0.18)); + var dx = direction * ((1 - into) + away) * (bounds.Width * 0.5 + layout.Width / 2); + DrawText(ctx, layout, origin, g => GlyphStyle.Default(Brushes.White) with { Dx = dx }); + break; + } + case EffectPreviewKind.BounceIn: + DrawText(ctx, layout, origin, g => + { + var local = Clamp01((p - g.Index * 0.03) / 0.2); + var s = EaseOutBack(local, 2.6); + return GlyphStyle.Default(Brushes.White) with { ScaleX = s, ScaleY = s, Opacity = local > 0 ? 1 : 0 }; + }); + break; + case EffectPreviewKind.ZoomIn: + case EffectPreviewKind.ZoomOut: + { + var e = EaseInOutSine(p); + var s = kind == EffectPreviewKind.ZoomIn ? 1 + 0.12 * e : 1.12 - 0.12 * e; + var center = new Point(origin.X + layout.Width / 2, origin.Y + layout.Height / 2); + using (ctx.PushTransform(ScaleAbout(center, s, s))) + { + DrawText(ctx, layout, origin, g => GlyphStyle.Default(Brushes.White)); + } + break; + } + case EffectPreviewKind.Typewriter: + case EffectPreviewKind.TypewriterHighlight: + { + var visible = Clamp01(p / 0.7) * layout.VisibleCount; + var highlight = kind == EffectPreviewKind.TypewriterHighlight; + var yellow = new SolidColorBrush(Color.FromRgb(0xFF, 0xE0, 0x5A)); + DrawText(ctx, layout, origin, g => + { + if (g.Index >= visible) + { + return GlyphStyle.Default(Brushes.White) with { Opacity = 0 }; + } + + var isCurrent = highlight && g.Index >= visible - 1 && p < 0.72; + return isCurrent + ? GlyphStyle.Default(yellow) with { Glow = Color.FromRgb(0xFF, 0xC4, 0x00), ScaleX = 1.15, ScaleY = 1.15 } + : GlyphStyle.Default(Brushes.White); + }); + break; + } + case EffectPreviewKind.WordByWord: + { + var progress = Clamp01(p / 0.7) * layout.WordCount; + DrawText(ctx, layout, origin, g => + { + var local = Clamp01((progress - g.Word) * 2.5); + return GlyphStyle.Default(Brushes.White) with + { + Opacity = local, + Dy = (1 - EaseOutCubic(local)) * layout.FontSize * 0.35, + }; + }); + break; + } + case EffectPreviewKind.Karaoke: + { + var rightToLeft = effect is AdvancedEffectKaraoke { RightToLeft: true }; + var progress = Clamp01(p / 0.8) * layout.VisibleCount; + var sung = new SolidColorBrush(Color.FromRgb(0xFF, 0xD6, 0x0A)); + var unsung = new SolidColorBrush(Color.FromRgb(0xF2, 0xF2, 0xF2)); + DrawText(ctx, layout, origin, g => + { + var index = rightToLeft ? layout.VisibleCount - 1 - g.Index : g.Index; + return GlyphStyle.Default(index < progress ? sung : unsung); + }); + break; + } + case EffectPreviewKind.WordPop: + DrawWordPop(ctx, layout, origin, p, effect as AdvancedEffectFancyKaraoke); + break; + case EffectPreviewKind.HighlightBox: + DrawHighlightBox(ctx, layout, origin, p, effect as AdvancedEffectHighlightBox); + break; + case EffectPreviewKind.SingleWordPop: + DrawSingleWordPop(ctx, bounds, text, fontSize, p, effect as AdvancedEffectSingleWordPop); + break; + case EffectPreviewKind.BoldCaptions: + DrawBoldCaptions(ctx, layout, origin, p, effect as AdvancedEffectBoldCaptions); + break; + case EffectPreviewKind.SmoothFill: + DrawSmoothFill(ctx, layout, origin, p, effect as AdvancedEffectSmoothFill); + break; + case EffectPreviewKind.BlurInWords: + DrawBlurInWords(ctx, layout, origin, p, effect as AdvancedEffectBlurInWords); + break; + case EffectPreviewKind.RollingCaptions: + DrawRollingCaptions(ctx, bounds, text, fontSize, p); + break; + case EffectPreviewKind.ScrambleReveal: + { + var reveal = Clamp01(p / 0.7) * layout.VisibleCount; + var frame = (int)(time * 14); + var green = new SolidColorBrush(Color.FromRgb(0x7C, 0xFF, 0xB2)); + DrawText(ctx, layout, origin, g => + { + if (g.Index < reveal) + { + return GlyphStyle.Default(Brushes.White); + } + + var c = ScrambleChars[(frame * 31 + g.Index * 17) % ScrambleChars.Length]; + return GlyphStyle.Default(green) with { Replacement = c.ToString(), Opacity = 0.85 }; + }); + break; + } + case EffectPreviewKind.WordFlip3D: + DrawText(ctx, layout, origin, g => + { + var local = Clamp01((p - g.Word * 0.12) / 0.16); + return GlyphStyle.Default(Brushes.White) with + { + ScaleY = EaseOutBack(local, 2.2), + ScaleX = 0.85 + 0.15 * local, + Opacity = local > 0 ? 1 : 0, + }; + }); + break; + case EffectPreviewKind.WordSpacing: + { + var extra = layout.FontSize * 0.3 * EaseInOutSine(Clamp01(p / 0.45)); + DrawText(ctx, layout, origin, g => GlyphStyle.Default(Brushes.White) with + { + Dx = (g.WordInLine - (g.WordsInLine - 1) / 2.0) * extra, + }); + break; + } + case EffectPreviewKind.RainbowPulse: + DrawText(ctx, layout, origin, g => + { + var hue = (time * 0.35 + g.Index * 0.07) % 1.0; + var s = 1 + 0.07 * Math.Sin(time * 5 + g.Index * 0.6); + return GlyphStyle.Default(new SolidColorBrush(FromHsv(hue, 0.75, 1))) with { ScaleX = s, ScaleY = s }; + }); + break; + case EffectPreviewKind.Wave: + case EffectPreviewKind.WaveBlue: + { + var blue = kind == EffectPreviewKind.WaveBlue; + DrawText(ctx, layout, origin, g => + { + var wave = Math.Sin(time * 5 - g.Index * 0.55); + var fill = blue + ? new SolidColorBrush(Lerp(Color.FromRgb(0x3A, 0x7B, 0xFF), Color.FromRgb(0x5C, 0xF2, 0xFF), (wave + 1) / 2)) + : (IBrush)Brushes.White; + return GlyphStyle.Default(fill) with { Dy = -wave * layout.FontSize * 0.22 }; + }); + break; + } + case EffectPreviewKind.Glitch: + DrawGlitch(ctx, bounds, layout, origin, time); + break; + case EffectPreviewKind.NeonBurst: + { + var pop = p < 0.25 ? EaseOutBack(p / 0.25, 3) : 1; + var s = 0.6 + 0.4 * pop; + var pulse = 0.5 + 0.5 * Math.Sin(time * 6); + var glow = Lerp(Color.FromRgb(0xFF, 0x2B, 0xD6), Color.FromRgb(0x2B, 0xE4, 0xFF), pulse); + var center = new Point(origin.X + layout.Width / 2, origin.Y + layout.Height / 2); + using (ctx.PushTransform(ScaleAbout(center, s, s))) + { + DrawText(ctx, layout, origin, g => GlyphStyle.Default(new SolidColorBrush(Color.FromRgb(0xFF, 0xF0, 0xFF))) with { Glow = glow }); + } + break; + } + case EffectPreviewKind.AudioPulse: + { + var beat = Math.Pow(Math.Max(0, Math.Sin(time * Math.PI * 2 * 1.4)), 4); + var s = 1 + 0.12 * beat; + var center = new Point(origin.X + layout.Width / 2, origin.Y + layout.Height / 2); + using (ctx.PushTransform(ScaleAbout(center, s, s))) + { + DrawText(ctx, layout, origin, g => GlyphStyle.Default(Brushes.White) with + { + Glow = beat > 0.1 ? Color.FromArgb((byte)(255 * beat), 0x30, 0xE0, 0xFF) : null, + }); + } + break; + } + case EffectPreviewKind.Matrix: + { + DrawMatrixRain(ctx, bounds, time, layout.FontSize * 0.7); + var visible = Clamp01(p / 0.6) * layout.VisibleCount; + var green = new SolidColorBrush(Color.FromRgb(0xC8, 0xFF, 0xD0)); + DrawText(ctx, layout, origin, g => GlyphStyle.Default(green) with + { + Opacity = g.Index < visible ? 1 : 0, + Glow = Color.FromRgb(0x00, 0xFF, 0x46), + }); + break; + } + case EffectPreviewKind.OldMovie: + { + var frame = (int)(time * 12); + var flicker = 0.85 + 0.15 * Hash(frame, 3); + var cream = new SolidColorBrush(Color.FromRgb(0xF4, 0xE6, 0xC8)); + DrawText(ctx, layout, origin, g => GlyphStyle.Default(cream) with { Opacity = flicker }); + DrawOldMovieOverlay(ctx, bounds, frame); + break; + } + case EffectPreviewKind.CinematicTitle: + DrawCinematicTitle(ctx, bounds, layout, p); + break; + case EffectPreviewKind.LowerThird: + DrawLowerThird(ctx, bounds, layout, p, effect as AdvancedEffectLowerThird); + break; + case EffectPreviewKind.StarWarsScroll: + DrawStarWars(ctx, bounds, layout, p); + break; + case EffectPreviewKind.CreditsScroll: + { + var travel = bounds.Height + layout.Height; + var y = bounds.Bottom - p * travel; + DrawText(ctx, layout, new Point(origin.X, y), g => GlyphStyle.Default(Brushes.White)); + break; + } + default: + // Scenes: the particles are part of the background, the text stays put + DrawText(ctx, layout, origin, g => GlyphStyle.Default(Brushes.White)); + DrawSceneForeground(ctx, bounds, kind, time, effect); + break; + } + } + + private static void DrawBackground(DrawingContext ctx, Rect bounds, EffectPreviewKind kind, double time) + { + (Color Top, Color Bottom) colors = kind switch + { + EffectPreviewKind.Matrix => (Color.FromRgb(0x01, 0x0B, 0x04), Color.FromRgb(0x00, 0x14, 0x06)), + EffectPreviewKind.OldMovie => (Color.FromRgb(0x6B, 0x4E, 0x31), Color.FromRgb(0x2E, 0x20, 0x12)), + EffectPreviewKind.Starfield or EffectPreviewKind.StarWarsScroll => (Color.FromRgb(0x02, 0x03, 0x0A), Color.FromRgb(0x08, 0x0A, 0x1C)), + EffectPreviewKind.Snow => (Color.FromRgb(0x1D, 0x2B, 0x45), Color.FromRgb(0x3E, 0x52, 0x70)), + EffectPreviewKind.Rain => (Color.FromRgb(0x14, 0x1C, 0x26), Color.FromRgb(0x27, 0x33, 0x40)), + EffectPreviewKind.Fireflies => (Color.FromRgb(0x08, 0x14, 0x12), Color.FromRgb(0x14, 0x2A, 0x1E)), + EffectPreviewKind.Hearts => (Color.FromRgb(0x3A, 0x10, 0x2A), Color.FromRgb(0x6A, 0x1F, 0x45)), + EffectPreviewKind.Confetti => (Color.FromRgb(0x1C, 0x14, 0x3A), Color.FromRgb(0x38, 0x22, 0x5E)), + _ => (Color.FromRgb(0x24, 0x2C, 0x48), Color.FromRgb(0x0D, 0x10, 0x1C)), + }; + + ctx.FillRectangle(new LinearGradientBrush + { + StartPoint = new RelativePoint(0, 0, RelativeUnit.Relative), + EndPoint = new RelativePoint(0.3, 1, RelativeUnit.Relative), + GradientStops = + { + new GradientStop(colors.Top, 0), + new GradientStop(colors.Bottom, 1), + }, + }, bounds); + + switch (kind) + { + case EffectPreviewKind.Starfield: + DrawStarfield(ctx, bounds, time); + break; + case EffectPreviewKind.StarWarsScroll: + DrawStaticStars(ctx, bounds, 60); + break; + case EffectPreviewKind.Rain: + DrawRain(ctx, bounds, time); + break; + default: + if (kind is not (EffectPreviewKind.Matrix or EffectPreviewKind.OldMovie or EffectPreviewKind.Snow or + EffectPreviewKind.Fireflies or EffectPreviewKind.Hearts or EffectPreviewKind.Confetti)) + { + // a soft "scene" - a sun glow and a horizon - so it reads as video, not as a flat card + var glow = new RadialGradientBrush + { + Center = new RelativePoint(0.75, 0.3, RelativeUnit.Relative), + GradientOrigin = new RelativePoint(0.75, 0.3, RelativeUnit.Relative), + RadiusX = new RelativeScalar(0.6, RelativeUnit.Relative), + RadiusY = new RelativeScalar(0.6, RelativeUnit.Relative), + GradientStops = + { + new GradientStop(Color.FromArgb(0x55, 0xFF, 0x9A, 0x6B), 0), + new GradientStop(Color.FromArgb(0x00, 0xFF, 0x9A, 0x6B), 1), + }, + }; + ctx.FillRectangle(glow, bounds); + var hill = new StreamGeometry(); + using (var g = hill.Open()) + { + g.BeginFigure(new Point(bounds.Left, bounds.Bottom), true); + g.LineTo(new Point(bounds.Left, bounds.Top + bounds.Height * 0.72)); + g.CubicBezierTo( + new Point(bounds.Left + bounds.Width * 0.3, bounds.Top + bounds.Height * 0.6), + new Point(bounds.Left + bounds.Width * 0.6, bounds.Top + bounds.Height * 0.82), + new Point(bounds.Right, bounds.Top + bounds.Height * 0.66)); + g.LineTo(new Point(bounds.Right, bounds.Bottom)); + g.EndFigure(true); + } + + ctx.DrawGeometry(new SolidColorBrush(Color.FromArgb(0x70, 0x05, 0x07, 0x10)), null, hill); + } + break; + } + } + + private static void DrawSceneForeground(DrawingContext ctx, Rect bounds, EffectPreviewKind kind, double time, IAdvancedEffectDisplay? effect) + { + var area = bounds.Width * bounds.Height; + var density = Math.Clamp(area / (128.0 * 72.0), 1, 12); + switch (kind) + { + case EffectPreviewKind.Snow: + { + var count = (int)(30 * Math.Sqrt(density) * Math.Clamp((effect as AdvancedEffectSnow)?.FlakeCount / 200.0 ?? 1, 0.3, 4)); + for (var i = 0; i < count; i++) + { + var depth = 0.4 + 0.6 * Hash(i, 2); + var y = Wrap(Hash(i, 1) + time * 0.08 * depth, -0.05, 1.05); + var x = Hash(i, 0) + Math.Sin(time * 1.2 + i) * 0.02; + var r = Math.Max(0.8, bounds.Height * 0.012 * depth); + ctx.DrawEllipse(new SolidColorBrush(Colors.White, 0.35 + 0.55 * depth), null, + new Point(bounds.X + x * bounds.Width, bounds.Y + y * bounds.Height), r, r); + } + break; + } + case EffectPreviewKind.Fireflies: + { + var count = (int)(12 * Math.Sqrt(density)); + for (var i = 0; i < count; i++) + { + var x = Hash(i, 0) + Math.Sin(time * 0.6 + i * 1.7) * 0.05; + var y = Hash(i, 1) + Math.Cos(time * 0.5 + i * 2.3) * 0.05; + var pulse = 0.35 + 0.65 * Math.Pow(Math.Abs(Math.Sin(time * 1.5 + i)), 2); + var center = new Point(bounds.X + Wrap(x, 0, 1) * bounds.Width, bounds.Y + Wrap(y, 0, 1) * bounds.Height * 0.8); + var r = bounds.Height * 0.05; + var brush = new RadialGradientBrush + { + GradientStops = + { + new GradientStop(Color.FromArgb((byte)(230 * pulse), 0xFF, 0xE0, 0x6A), 0), + new GradientStop(Color.FromArgb((byte)(90 * pulse), 0xFF, 0xB0, 0x20), 0.25), + new GradientStop(Color.FromArgb(0, 0xFF, 0xA0, 0x10), 1), + }, + }; + ctx.DrawEllipse(brush, null, center, r, r); + } + break; + } + case EffectPreviewKind.Confetti: + DrawConfetti(ctx, bounds, time, density); + break; + case EffectPreviewKind.Hearts: + DrawHearts(ctx, bounds, time, density); + break; + } + } + + private static void DrawStarfield(DrawingContext ctx, Rect bounds, double time) + { + var center = bounds.Center; + var maxR = Math.Sqrt(bounds.Width * bounds.Width + bounds.Height * bounds.Height) / 2; + var count = (int)Math.Clamp(bounds.Width * bounds.Height / 150, 40, 400); + for (var i = 0; i < count; i++) + { + var angle = Hash(i, 0) * Math.PI * 2; + var phase = Wrap(Hash(i, 1) + time * 0.25, 0, 1); + var d = phase * phase * maxR; + var d0 = Math.Max(0, d - maxR * 0.06 * phase); + var dir = new Vector(Math.Cos(angle), Math.Sin(angle)); + var pen = new Pen(new SolidColorBrush(Colors.White, Math.Min(1, phase * 1.6)), Math.Max(0.6, phase * 2.2), lineCap: PenLineCap.Round); + ctx.DrawLine(pen, center + dir * d0, center + dir * d); + } + } + + private static void DrawStaticStars(DrawingContext ctx, Rect bounds, int count) + { + for (var i = 0; i < count; i++) + { + var r = 0.5 + Hash(i, 2) * 0.9; + ctx.DrawEllipse(new SolidColorBrush(Colors.White, 0.3 + 0.6 * Hash(i, 3)), null, + new Point(bounds.X + Hash(i, 0) * bounds.Width, bounds.Y + Hash(i, 1) * bounds.Height), r, r); + } + } + + private static void DrawRain(DrawingContext ctx, Rect bounds, double time) + { + var count = (int)Math.Clamp(bounds.Width * bounds.Height / 300, 30, 300); + for (var i = 0; i < count; i++) + { + var depth = 0.3 + 0.7 * Hash(i, 2); + var y = Wrap(Hash(i, 1) + time * 1.1 * depth, -0.1, 1.1); + var x = Hash(i, 0); + var length = bounds.Height * 0.08 * depth; + var start = new Point(bounds.X + x * bounds.Width, bounds.Y + y * bounds.Height); + var pen = new Pen(new SolidColorBrush(Color.FromRgb(0xAE, 0xC8, 0xE8), 0.25 + 0.45 * depth), Math.Max(0.6, depth * 1.4)); + ctx.DrawLine(pen, start, start + new Vector(-length * 0.15, length)); + } + } + + private static void DrawMatrixRain(DrawingContext ctx, Rect bounds, double time, double size) + { + size = Math.Max(5, size); + var columns = (int)(bounds.Width / (size * 0.9)); + var trail = 7; + for (var c = 0; c < columns; c++) + { + var speed = 0.25 + 0.35 * Hash(c, 1); + var head = Wrap(Hash(c, 0) + time * speed, 0, 1.4) * bounds.Height; + for (var k = 0; k < trail; k++) + { + var y = head - k * size * 1.05; + if (y < bounds.Top - size || y > bounds.Bottom) + { + continue; + } + + var ch = MatrixChars[(int)(Hash(c * 31 + k, (int)(time * 6)) * MatrixChars.Length) % MatrixChars.Length].ToString(); + var glyph = GetGlyph(ch, size); + if (glyph.Geometry == null) + { + continue; + } + + var color = k == 0 ? Color.FromRgb(0xD8, 0xFF, 0xE0) : Color.FromRgb(0x00, 0xE0, 0x41); + using (ctx.PushTransform(Matrix.CreateTranslation(bounds.X + c * size * 0.9 + size * 0.2, y))) + using (ctx.PushOpacity(0.85 * (1 - k / (double)trail))) + { + ctx.DrawGeometry(new SolidColorBrush(color), null, glyph.Geometry); + } + } + } + } + + private static void DrawConfetti(DrawingContext ctx, Rect bounds, double time, double density) + { + var t = time % CycleSeconds; + var count = (int)(36 * Math.Sqrt(density)); + Color[] palette = + [ + Color.FromRgb(0xFF, 0x4D, 0x6D), Color.FromRgb(0xFF, 0xC4, 0x3D), Color.FromRgb(0x3D, 0xD6, 0xFF), + Color.FromRgb(0x7C, 0xFF, 0x6B), Color.FromRgb(0xB3, 0x6B, 0xFF), + ]; + var gravity = bounds.Height * 0.9; + for (var i = 0; i < count; i++) + { + var fromLeft = i % 2 == 0; + var angle = (fromLeft ? -70 : -110) + (Hash(i, 0) - 0.5) * 50; + var speed = bounds.Height * (0.9 + Hash(i, 1) * 0.8); + var rad = angle * Math.PI / 180; + var x = (fromLeft ? bounds.Left : bounds.Right) + Math.Cos(rad) * speed * t; + var y = bounds.Bottom + Math.Sin(rad) * speed * t + 0.5 * gravity * t * t; + if (y > bounds.Bottom + 10) + { + continue; + } + + var w = Math.Max(2, bounds.Height * 0.035); + var spin = t * (4 + Hash(i, 2) * 6) + i; + var m = Matrix.CreateTranslation(-w / 2, -w / 4) * + Matrix.CreateScale(1, Math.Abs(Math.Cos(spin * 1.3)) + 0.15) * + Matrix.CreateRotation(spin) * + Matrix.CreateTranslation(x, y); + using (ctx.PushTransform(m)) + { + ctx.FillRectangle(new SolidColorBrush(palette[i % palette.Length]), new Rect(0, 0, w, w / 2)); + } + } + } + + private static void DrawHearts(DrawingContext ctx, Rect bounds, double time, double density) + { + var heart = GetHeartGeometry(); + var count = (int)(14 * Math.Sqrt(density)); + for (var i = 0; i < count; i++) + { + var depth = 0.5 + 0.5 * Hash(i, 2); + var y = Wrap(Hash(i, 1) + time * 0.09 * depth, -0.1, 1.1); + var x = Hash(i, 0) + Math.Sin(time + i) * 0.03; + var size = bounds.Height * 0.08 * depth; + var color = i % 3 == 0 ? Color.FromRgb(0xFF, 0x8F, 0xB8) : i % 3 == 1 ? Color.FromRgb(0xFF, 0x3D, 0x6E) : Color.FromRgb(0xE0, 0x1E, 0x55); + var m = Matrix.CreateTranslation(-0.5, -0.5) * + Matrix.CreateRotation(Math.Sin(time * 1.5 + i) * 0.4) * + Matrix.CreateScale(size, size) * + Matrix.CreateTranslation(bounds.X + x * bounds.Width, bounds.Y + y * bounds.Height); + using (ctx.PushTransform(m)) + { + ctx.DrawGeometry(new SolidColorBrush(color, 0.85), null, heart); + } + } + } + + private static Geometry GetHeartGeometry() + { + if (_heartGeometry != null) + { + return _heartGeometry; + } + + var g = new StreamGeometry(); + using (var c = g.Open()) + { + c.BeginFigure(new Point(0.5, 0.95), true); + c.CubicBezierTo(new Point(0.1, 0.65), new Point(-0.05, 0.35), new Point(0.2, 0.15)); + c.CubicBezierTo(new Point(0.35, 0.03), new Point(0.48, 0.12), new Point(0.5, 0.25)); + c.CubicBezierTo(new Point(0.52, 0.12), new Point(0.65, 0.03), new Point(0.8, 0.15)); + c.CubicBezierTo(new Point(1.05, 0.35), new Point(0.9, 0.65), new Point(0.5, 0.95)); + c.EndFigure(true); + } + + _heartGeometry = g; + return g; + } + + private static void DrawOldMovieOverlay(DrawingContext ctx, Rect bounds, int frame) + { + // scratches + dust, then a vignette + for (var i = 0; i < 2; i++) + { + if (Hash(frame, 10 + i) < 0.55) + { + var x = bounds.X + Hash(frame, 20 + i) * bounds.Width; + ctx.DrawLine(new Pen(new SolidColorBrush(Color.FromRgb(0xF0, 0xE6, 0xD2), 0.45), 1), new Point(x, bounds.Top), new Point(x + 2, bounds.Bottom)); + } + } + + for (var i = 0; i < 6; i++) + { + var r = Math.Max(0.7, Hash(frame * 7 + i, 4) * bounds.Height * 0.012); + ctx.DrawEllipse(new SolidColorBrush(Colors.Black, 0.6), null, + new Point(bounds.X + Hash(frame * 7 + i, 5) * bounds.Width, bounds.Y + Hash(frame * 7 + i, 6) * bounds.Height), r, r); + } + + ctx.FillRectangle(new RadialGradientBrush + { + RadiusX = new RelativeScalar(0.75, RelativeUnit.Relative), + RadiusY = new RelativeScalar(0.75, RelativeUnit.Relative), + GradientStops = + { + new GradientStop(Color.FromArgb(0, 0, 0, 0), 0.55), + new GradientStop(Color.FromArgb(0xD0, 0x10, 0x08, 0x02), 1), + }, + }, bounds); + } + + private static void DrawTvClose(DrawingContext ctx, Rect bounds, PreviewTextLayout layout, Point origin, double p) + { + DrawText(ctx, layout, origin, g => GlyphStyle.Default(Brushes.White)); + if (p > 0.62) + { + FillRect(ctx, bounds, Colors.Black, 1); + return; + } + + var q = EaseInCubic(Clamp01(p / 0.6)); + FillRect(ctx, bounds, Colors.White, q * 0.9); + var bar = q * bounds.Height / 2; + ctx.FillRectangle(Brushes.Black, new Rect(bounds.X, bounds.Y, bounds.Width, bar)); + ctx.FillRectangle(Brushes.Black, new Rect(bounds.X, bounds.Bottom - bar, bounds.Width, bar)); + } + + private static void DrawWordPop(DrawingContext ctx, PreviewTextLayout layout, Point origin, double p, AdvancedEffectFancyKaraoke? effect) + { + var activeColor = effect?.ActiveWordColor ?? Colors.White; + var inactiveColor = effect?.InactiveWordColor ?? Color.FromArgb(0xEE, 0xEE, 0xEE, 0xEE); + var glow = effect == null || effect.ApplyGlow ? effect?.GlowColor ?? Color.FromRgb(0xFF, 0xDD, 0x00) : (Color?)null; + var active = Math.Min(layout.WordCount - 1, (int)(Clamp01(p / 0.9) * layout.WordCount)); + var local = Clamp01(p / 0.9 * layout.WordCount - active); + var pop = 1 + 0.18 * EaseOutBack(Clamp01(local * 4), 2.5) - 0.06 * Clamp01(local * 4 - 1); + var activeBrush = new SolidColorBrush(activeColor); + var inactiveBrush = new SolidColorBrush(Color.FromRgb(inactiveColor.R, inactiveColor.G, inactiveColor.B)); + var inactiveOpacity = Math.Max(0.35, inactiveColor.A / 255.0 * 0.7); + DrawText(ctx, layout, origin, g => g.Word == active + ? GlyphStyle.Default(activeBrush) with { ScaleX = pop, ScaleY = pop, Glow = glow } + : GlyphStyle.Default(inactiveBrush) with { Opacity = inactiveOpacity }); + } + + private static (int Active, double SecondsIntoWord) GetActiveWord(PreviewTextLayout layout, double p) + { + var progress = Clamp01(p / 0.9) * layout.WordCount; + var active = Math.Min(layout.WordCount - 1, (int)progress); + return (active, (progress - active) * CycleSeconds * 0.9 / layout.WordCount); + } + + private static (double Left, double Right, double Top, double Height) GetWordBounds(PreviewTextLayout layout, int word) + { + double left = double.MaxValue, right = double.MinValue, top = 0, height = 0; + foreach (var g in layout.Glyphs) + { + if (g.Word == word && !g.IsSpace) + { + left = Math.Min(left, g.X); + right = Math.Max(right, g.X + g.Width); + top = g.Y; + height = g.Height; + } + } + + return left > right ? (0, 0, 0, 0) : (left, right, top, height); + } + + /// + /// Horizontal shift for a glyph when word is scaled by : + /// the word grows around its center and pushes the rest of its line aside, like libass lays it out. + /// + private static double ScaledWordShift(PreviewGlyph g, int active, int activeLine, double wordLeft, double wordRight, double scale) + { + if (g.Line != activeLine) + { + return 0; + } + + var extra = (scale - 1) * (wordRight - wordLeft) / 2; + if (g.Word < active) + { + return -extra; + } + + return g.Word > active ? extra : (g.X + g.Width / 2 - (wordLeft + wordRight) / 2) * (scale - 1); + } + + private static int GetWordLine(PreviewTextLayout layout, int word) + { + foreach (var g in layout.Glyphs) + { + if (g.Word == word && !g.IsSpace) + { + return g.Line; + } + } + + return 0; + } + + // a quick overshoot when a word becomes active: 1.12 -> 1 over ~0.12 s + private static double WordPopScale(double secondsIntoWord, double from = 1.12) => + secondsIntoWord >= 0.12 ? 1 : from + (1 - from) * EaseOutCubic(secondsIntoWord / 0.12); + + private static void DrawHighlightBox(DrawingContext ctx, PreviewTextLayout layout, Point origin, double p, AdvancedEffectHighlightBox? effect) + { + var boxColor = effect?.BoxColor ?? Color.FromRgb(0x7C, 0x3A, 0xED); + var activeBrush = new SolidColorBrush(effect?.ActiveTextColor ?? Colors.White); + var (active, seconds) = GetActiveWord(layout, p); + var (left, right, top, height) = GetWordBounds(layout, active); + var s = WordPopScale(seconds, 1.1); + var center = new Point(origin.X + (left + right) / 2, origin.Y + top + height / 2); + var pad = layout.FontSize * 0.16; + var line = GetWordLine(layout, active); + using (ctx.PushTransform(ScaleAbout(center, s, s))) + { + var box = new Rect(origin.X + left - pad, origin.Y + top + height * 0.08, right - left + pad * 2, height * 0.92); + ctx.DrawRectangle(new SolidColorBrush(boxColor), null, box, layout.FontSize * 0.06, layout.FontSize * 0.06); + } + + DrawText(ctx, layout, origin, g => g.Word == active + ? GlyphStyle.Default(activeBrush) with { ScaleX = s, ScaleY = s, Dx = ScaledWordShift(g, active, line, left, right, s) } + : GlyphStyle.Default(Brushes.White) with { Dx = ScaledWordShift(g, active, line, left, right, s) }); + } + + private static void DrawSingleWordPop(DrawingContext ctx, Rect bounds, string text, double fontSize, double p, AdvancedEffectSingleWordPop? effect) + { + var words = text.Split(' ', StringSplitOptions.RemoveEmptyEntries); + if (words.Length == 0) + { + return; + } + + var progress = Clamp01(p / 0.9) * words.Length; + var active = Math.Min(words.Length - 1, (int)progress); + var seconds = (progress - active) * CycleSeconds * 0.9 / words.Length; + var size = Math.Clamp((effect?.TextSizePercent ?? 150) / 100.0, 0.5, 2.2); + var layout = GetLayout(words[active], fontSize * size, bounds.Width * 0.9, 1); + var origin = new Point(bounds.X + (bounds.Width - layout.Width) / 2, bounds.Bottom - layout.Height - bounds.Height * 0.1); + var center = new Point(origin.X + layout.Width / 2, origin.Y + layout.Height / 2); + var s = seconds < 0.09 + ? 0.55 + (1.12 - 0.55) * EaseOutCubic(seconds / 0.09) + : WordPopScale(seconds - 0.09); + var fill = new SolidColorBrush(effect?.TextColor ?? Colors.White); + using (ctx.PushTransform(ScaleAbout(center, s, s))) + { + DrawText(ctx, layout, origin, g => GlyphStyle.Default(fill)); + } + } + + private static void DrawBoldCaptions(DrawingContext ctx, PreviewTextLayout layout, Point origin, double p, AdvancedEffectBoldCaptions? effect) + { + var highlight = new SolidColorBrush(effect?.HighlightColor ?? Color.FromRgb(0xFF, 0xD6, 0x0A)); + var (active, seconds) = GetActiveWord(layout, p); + var (left, right, _, _) = GetWordBounds(layout, active); + var line = GetWordLine(layout, active); + var s = 1.15 * WordPopScale(seconds, 1.09); + DrawText(ctx, layout, origin, g => g.Word == active + ? GlyphStyle.Default(highlight) with { ScaleX = s, ScaleY = s, Dx = ScaledWordShift(g, active, line, left, right, s) } + : GlyphStyle.Default(Brushes.White) with { Dx = ScaledWordShift(g, active, line, left, right, s) }, outlineScale: 1.6); + } + + private static void DrawSmoothFill(DrawingContext ctx, PreviewTextLayout layout, Point origin, double p, AdvancedEffectSmoothFill? effect) + { + var fill = new SolidColorBrush(effect?.FillColor ?? Color.FromRgb(0xFF, 0xD6, 0x0A)); + var baseBrush = new SolidColorBrush(effect?.BaseColor ?? Colors.White); + var progress = Clamp01(p / 0.9) * layout.WordCount; + var active = Math.Min(layout.WordCount - 1, (int)progress); + var fraction = progress - active; + DrawText(ctx, layout, origin, g => GlyphStyle.Default(g.Word < active ? fill : baseBrush)); + + // the active word: the fill sweeps across it left to right + var (left, right, top, height) = GetWordBounds(layout, active); + using (ctx.PushClip(new Rect(origin.X + left - layout.FontSize * 0.2, origin.Y + top - layout.FontSize * 0.2, (right - left) * fraction + layout.FontSize * 0.2, height + layout.FontSize * 0.4))) + { + DrawText(ctx, layout, origin, g => GlyphStyle.Default(fill) with { Opacity = g.Word == active ? 1 : 0 }); + } + } + + private static void DrawBlurInWords(DrawingContext ctx, PreviewTextLayout layout, Point origin, double p, AdvancedEffectBlurInWords? effect) + { + var rise = effect?.Rise ?? true; + var seconds = p * CycleSeconds; + var perWord = CycleSeconds * 0.8 / layout.WordCount; + DrawText(ctx, layout, origin, g => + { + var local = seconds - g.Word * perWord; + if (local <= 0) + { + return GlyphStyle.Default(Brushes.White) with { Opacity = 0 }; + } + + var reveal = Clamp01(local / 0.25); + var sy = !rise ? 1 : local < 0.25 ? 0.4 + (1.12 - 0.4) * EaseOutCubic(reveal) : WordPopScale(local - 0.25); + return GlyphStyle.Default(Brushes.White) with + { + Opacity = reveal, + ScaleY = sy, + Dy = (1 - sy) * g.Height * 0.25, // grow from the baseline, not the middle + Glow = reveal < 1 ? Color.FromArgb((byte)(200 * (1 - reveal)), 0xFF, 0xFF, 0xFF) : null, + }; + }); + } + + private static void DrawRollingCaptions(DrawingContext ctx, Rect bounds, string text, double fontSize, double p) + { + var words = text.Split(' ', StringSplitOptions.RemoveEmptyEntries); + var half = Math.Max(1, (words.Length + 1) / 2); + var first = GetLayout(string.Join(' ', words.Take(half)), fontSize, bounds.Width * 0.9, 1); + var second = GetLayout(words.Length > half ? string.Join(' ', words.Skip(half)) : string.Join(' ', words), fontSize, bounds.Width * 0.9, 1); + var bottom = bounds.Bottom - bounds.Height * 0.1; + var slide = first.LineHeight * 0.8; + + // first line slides in, then the second slides in and pushes it up + var firstIn = EaseOutCubic(Clamp01(p / 0.08)); + var secondIn = EaseOutCubic(Clamp01((p - 0.45) / 0.08)); + var fadeOut = Clamp01((1 - p) / 0.06); + var firstY = bottom - first.Height + (1 - firstIn) * slide - secondIn * second.LineHeight; + var firstOpacity = Math.Min(firstIn, 1 - 0.45 * secondIn) * fadeOut; + DrawText(ctx, first, new Point(bounds.X + (bounds.Width - first.Width) / 2, firstY), g => GlyphStyle.Default(Brushes.White) with { Opacity = firstOpacity }); + if (p >= 0.45) + { + var secondY = bottom - second.Height + (1 - secondIn) * slide; + DrawText(ctx, second, new Point(bounds.X + (bounds.Width - second.Width) / 2, secondY), g => GlyphStyle.Default(Brushes.White) with { Opacity = secondIn * fadeOut }); + } + } + + private static void DrawGlitch(DrawingContext ctx, Rect bounds, PreviewTextLayout layout, Point origin, double time) + { + var frame = (int)(time * 12); + var glitching = Hash(frame, 1) < 0.4; + var offset = glitching ? layout.FontSize * (0.06 + 0.1 * Hash(frame, 2)) : layout.FontSize * 0.02; + var red = new SolidColorBrush(Color.FromRgb(0xFF, 0x20, 0x50)); + var cyan = new SolidColorBrush(Color.FromRgb(0x20, 0xF0, 0xFF)); + DrawText(ctx, layout, origin, g => GlyphStyle.Default(red) with { Dx = -offset, Opacity = 0.75 }, outline: false); + DrawText(ctx, layout, origin, g => GlyphStyle.Default(cyan) with { Dx = offset, Opacity = 0.75 }, outline: false); + DrawText(ctx, layout, origin, g => GlyphStyle.Default(Brushes.White) with + { + Dx = glitching && Hash(frame * 13 + g.Line, 3) < 0.5 ? (Hash(frame, g.Line + 5) - 0.5) * layout.FontSize * 0.5 : 0, + }); + + if (glitching && Hash(frame, 4) < 0.4) + { + var y = bounds.Y + Hash(frame, 6) * bounds.Height; + FillRect(ctx, new Rect(bounds.X, y, bounds.Width, bounds.Height * 0.04), Colors.White, 0.5); + } + + if (Hash(frame, 7) < 0.06) + { + FillRect(ctx, bounds, Colors.White, 0.35); + } + } + + private static void DrawCinematicTitle(DrawingContext ctx, Rect bounds, PreviewTextLayout layout, double p) + { + var bar = bounds.Height * 0.12; + var origin = new Point(bounds.X + (bounds.Width - layout.Width) / 2, bounds.Y + (bounds.Height - layout.Height) / 2); + var e = EaseOutCubic(Clamp01(p / 0.65)); + var opacity = Math.Min(Clamp01(p / 0.35), Clamp01((1 - p) / 0.12)); + var tracking = layout.FontSize * 0.45 * (1 - e); + var gold = new SolidColorBrush(Color.FromRgb(0xF6, 0xEB, 0xD0)); + DrawText(ctx, layout, origin, g => GlyphStyle.Default(gold) with + { + Dx = (g.Index - (layout.VisibleCount - 1) / 2.0) * tracking, + Opacity = opacity, + Glow = e < 0.95 ? Color.FromArgb((byte)(160 * (1 - e)), 0xFF, 0xF4, 0xDC) : null, + }, outline: false); + ctx.FillRectangle(Brushes.Black, new Rect(bounds.X, bounds.Y, bounds.Width, bar)); + ctx.FillRectangle(Brushes.Black, new Rect(bounds.X, bounds.Bottom - bar, bounds.Width, bar)); + } + + private static void DrawLowerThird(DrawingContext ctx, Rect bounds, PreviewTextLayout layout, double p, AdvancedEffectLowerThird? effect) + { + var accent = effect?.AccentColor ?? Color.FromRgb(0x00, 0xB4, 0xFF); + var x = bounds.X + bounds.Width * 0.06; + var y = bounds.Bottom - bounds.Height * 0.14 - layout.Height; + var barIn = EaseOutCubic(Clamp01(p / 0.18)); + var panelIn = EaseOutCubic(Clamp01((p - 0.1) / 0.25)); + var textIn = Clamp01((p - 0.2) / 0.2); + var outFade = Clamp01((1 - p) / 0.1); + var pad = layout.FontSize * 0.4; + var barWidth = Math.Max(2, layout.FontSize * 0.22); + + using (ctx.PushOpacity(outFade)) + { + var panelWidth = (layout.Width + pad * 2) * panelIn; + ctx.FillRectangle(new SolidColorBrush(Color.FromArgb(0xB8, 0x0C, 0x10, 0x18)), new Rect(x + barWidth, y - pad, panelWidth, layout.Height + pad * 2)); + ctx.FillRectangle(new SolidColorBrush(accent), new Rect(x - (1 - barIn) * bounds.Width * 0.2, y - pad, barWidth, layout.Height + pad * 2)); + using (ctx.PushClip(new Rect(x + barWidth, bounds.Y, panelWidth, bounds.Height))) + { + DrawText(ctx, layout, new Point(x + barWidth + pad, y), g => GlyphStyle.Default(Brushes.White) with + { + Opacity = textIn, + Dx = (1 - textIn) * -layout.FontSize, + }, outline: false); + } + } + } + + private static void DrawStarWars(DrawingContext ctx, Rect bounds, PreviewTextLayout layout, double p) + { + var yellow = new SolidColorBrush(Color.FromRgb(0xFF, 0xE8, 0x1F)); + var centerX = bounds.X + bounds.Width / 2; + var top = bounds.Bottom - p * (bounds.Height + layout.Height) * 1.1; + var textOrigin = new Point(centerX - layout.Width / 2, top); + DrawText(ctx, layout, textOrigin, g => + { + var y = top + g.Y + g.Height / 2; + var depth = Clamp01((y - bounds.Y) / bounds.Height); // 1 near bottom, 0 at top + var s = 0.25 + 0.85 * depth; + var glyphCenterX = textOrigin.X + g.X + g.Width / 2; + return GlyphStyle.Default(yellow) with + { + ScaleX = s, + ScaleY = s, + Dx = (glyphCenterX - centerX) * (s - 1), + Opacity = Clamp01(depth * 2.5), + }; + }, outline: false); + } + + private static void DrawText(DrawingContext ctx, PreviewTextLayout layout, Point origin, Func styleFor, bool outline = true, double outlineScale = 1) + { + var outlineWidth = Math.Max(1, layout.FontSize * 0.12 * outlineScale); + foreach (var glyph in layout.Glyphs) + { + if (glyph.IsSpace) + { + continue; + } + + var style = styleFor(glyph); + if (style.Opacity <= 0.01 || Math.Abs(style.ScaleX) < 0.01 || Math.Abs(style.ScaleY) < 0.01) + { + continue; + } + + var geometry = glyph.Geometry; + var width = glyph.Width; + if (style.Replacement != null) + { + var replacement = GetGlyph(style.Replacement, layout.FontSize); + geometry = replacement.Geometry; + width = replacement.Width; + } + + if (geometry == null) + { + continue; + } + + var cx = glyph.Width / 2; + var cy = glyph.Height / 2; + var m = Matrix.CreateTranslation(-cx + (glyph.Width - width) / 2, -cy) * + Matrix.CreateScale(style.ScaleX, style.ScaleY) * + Matrix.CreateTranslation(origin.X + glyph.X + cx + style.Dx, origin.Y + glyph.Y + cy + style.Dy); + + using (ctx.PushTransform(m)) + using (ctx.PushOpacity(Math.Min(1, style.Opacity))) + { + if (style.Glow is { } glow) + { + for (var k = 0; k < 3; k++) + { + var pen = new Pen(new SolidColorBrush(glow, glow.A / 255.0 * 0.16), layout.FontSize * (0.28 - k * 0.08), lineJoin: PenLineJoin.Round); + ctx.DrawGeometry(null, pen, geometry); + } + } + + if (outline) + { + ctx.DrawGeometry(null, new Pen(OutlineBrush, outlineWidth, lineJoin: PenLineJoin.Round), geometry); + } + + ctx.DrawGeometry(style.Fill, null, geometry); + } + } + } + + private static PreviewTextLayout GetLayout(string text, double fontSize, double maxWidth, int maxLines) + { + fontSize = Math.Round(fontSize * 2) / 2; + maxWidth = Math.Round(maxWidth); + var key = (text, fontSize, maxWidth, maxLines); + if (LayoutCache.TryGetValue(key, out var cached)) + { + return cached; + } + + if (LayoutCache.Count > 200) + { + LayoutCache.Clear(); + } + + var layout = BuildLayout(text, fontSize, maxWidth, maxLines); + LayoutCache[key] = layout; + return layout; + } + + private static PreviewTextLayout BuildLayout(string text, double fontSize, double maxWidth, int maxLines) + { + var layout = new PreviewTextLayout { FontSize = fontSize }; + var words = text.Split(' ', StringSplitOptions.RemoveEmptyEntries); + var spaceWidth = GetGlyph(" ", fontSize).Width; + var lineHeight = GetGlyph("Hg", fontSize).Height; + layout.LineHeight = lineHeight; + + // greedy word wrap into lines of (word, width) + var lines = new List>(); + var current = new List<(string Word, double Width)>(); + var currentWidth = 0.0; + foreach (var word in words) + { + var w = MeasureWord(word, fontSize); + var needed = current.Count == 0 ? w : currentWidth + spaceWidth + w; + if (current.Count > 0 && needed > maxWidth) + { + lines.Add(current); + current = new List<(string Word, double Width)>(); + needed = w; + } + + current.Add((word, w)); + currentWidth = needed; + } + + if (current.Count > 0) + { + lines.Add(current); + } + + if (lines.Count > maxLines) + { + lines.RemoveRange(maxLines, lines.Count - maxLines); + var last = lines[^1]; + last[^1] = (last[^1].Word + "…", MeasureWord(last[^1].Word + "…", fontSize)); + } + + var index = 0; + var wordIndex = 0; + var maxLineWidth = 0.0; + var lineWidths = new List(); + foreach (var line in lines) + { + var width = 0.0; + for (var i = 0; i < line.Count; i++) + { + width += line[i].Width + (i > 0 ? spaceWidth : 0); + } + + lineWidths.Add(width); + maxLineWidth = Math.Max(maxLineWidth, width); + } + + for (var lineIndex = 0; lineIndex < lines.Count; lineIndex++) + { + var line = lines[lineIndex]; + var x = (maxLineWidth - lineWidths[lineIndex]) / 2; + var y = lineIndex * lineHeight; + for (var w = 0; w < line.Count; w++) + { + if (w > 0) + { + layout.Glyphs.Add(new PreviewGlyph { Text = " ", X = x, Y = y, Width = spaceWidth, Height = lineHeight, Index = -1, Word = wordIndex, IsSpace = true, Line = lineIndex }); + x += spaceWidth; + } + + var enumerator = StringInfo.GetTextElementEnumerator(line[w].Word); + while (enumerator.MoveNext()) + { + var element = enumerator.GetTextElement(); + var glyph = GetGlyph(element, fontSize); + layout.Glyphs.Add(new PreviewGlyph + { + Text = element, + Geometry = glyph.Geometry, + X = x, + Y = y, + Width = glyph.Width, + Height = lineHeight, + Index = index++, + Word = wordIndex, + Line = lineIndex, + WordInLine = w, + WordsInLine = line.Count, + }); + x += glyph.Width; + } + + wordIndex++; + } + } + + layout.WordCount = Math.Max(1, wordIndex); + layout.VisibleCount = Math.Max(1, index); + layout.Width = maxLineWidth; + layout.Height = lines.Count * lineHeight; + return layout; + } + + private static double MeasureWord(string word, double fontSize) + { + var width = 0.0; + var enumerator = StringInfo.GetTextElementEnumerator(word); + while (enumerator.MoveNext()) + { + width += GetGlyph(enumerator.GetTextElement(), fontSize).Width; + } + + return width; + } + + private static (Geometry? Geometry, double Width, double Height) GetGlyph(string text, double fontSize) + { + var key = (text, fontSize); + if (GlyphCache.TryGetValue(key, out var cached)) + { + return cached; + } + + if (GlyphCache.Count > 4000) + { + GlyphCache.Clear(); + } + + var formatted = new FormattedText(text, CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, BoldTypeface, fontSize, Brushes.White); + var result = (string.IsNullOrWhiteSpace(text) ? null : formatted.BuildGeometry(new Point(0, 0)), + formatted.WidthIncludingTrailingWhitespace, formatted.Height); + GlyphCache[key] = result; + return result; + } + + private static void FillRect(DrawingContext ctx, Rect rect, Color color, double opacity) + { + if (opacity > 0.005) + { + ctx.FillRectangle(new SolidColorBrush(color, Math.Min(1, opacity)), rect); + } + } + + private static Matrix ScaleAbout(Point center, double sx, double sy) => + Matrix.CreateTranslation(-center.X, -center.Y) * Matrix.CreateScale(sx, sy) * Matrix.CreateTranslation(center.X, center.Y); + + private static double Hash(int i, int salt) + { + unchecked + { + var h = (uint)(i * 374761393 + salt * 668265263); + h = (h ^ (h >> 13)) * 1274126177; + h ^= h >> 16; + return (h & 0xFFFFFF) / (double)0x1000000; + } + } + + private static double Wrap(double value, double min, double max) + { + var range = max - min; + var v = (value - min) % range; + return (v < 0 ? v + range : v) + min; + } + + private static double Clamp01(double v) => v < 0 ? 0 : v > 1 ? 1 : v; + private static double EaseOutCubic(double x) => 1 - Math.Pow(1 - x, 3); + private static double EaseInCubic(double x) => x * x * x; + private static double EaseInOutSine(double x) => -(Math.Cos(Math.PI * x) - 1) / 2; + + private static double EaseOutBack(double x, double overshoot = 1.70158) + { + var c3 = overshoot + 1; + return 1 + c3 * Math.Pow(x - 1, 3) + overshoot * Math.Pow(x - 1, 2); + } + + private static Color Lerp(Color a, Color b, double t) => Color.FromArgb( + (byte)(a.A + (b.A - a.A) * t), + (byte)(a.R + (b.R - a.R) * t), + (byte)(a.G + (b.G - a.G) * t), + (byte)(a.B + (b.B - a.B) * t)); + + private static Color FromHsv(double h, double s, double v) + { + var i = (int)(h * 6) % 6; + var f = h * 6 - Math.Floor(h * 6); + var p = v * (1 - s); + var q = v * (1 - f * s); + var t = v * (1 - (1 - f) * s); + var (r, g, b) = i switch + { + 0 => (v, t, p), + 1 => (q, v, p), + 2 => (p, v, t), + 3 => (p, q, v), + 4 => (t, p, v), + _ => (v, p, q), + }; + return Color.FromRgb((byte)(r * 255), (byte)(g * 255), (byte)(b * 255)); + } +} diff --git a/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectBlurInWords.cs b/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectBlurInWords.cs new file mode 100644 index 00000000000..d721aeb7dd1 --- /dev/null +++ b/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectBlurInWords.cs @@ -0,0 +1,74 @@ +using Nikse.SubtitleEdit.Features.Main; +using Nikse.SubtitleEdit.Logic.Config; +using Nikse.SubtitleEdit.Logic.Media; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Nikse.SubtitleEdit.Features.Assa.AssaApplyAdvancedEffect.Effects; + +/// +/// Words appear one after another as they are spoken: each starts transparent and blurred, +/// then sharpens and rises from the baseline with a small overshoot. One event per line - the +/// per-word \t times are relative to the line start. +/// +public class AdvancedEffectBlurInWords : IAdvancedEffectDisplay +{ + public string Name => Se.Language.Assa.AdvancedEffectBlurInWords; + public string Description => Se.Language.Assa.AdvancedEffectBlurInWordsDescription; + public bool UsesAudio => false; + + public bool Rise { get; set; } = true; + public bool UpperCase { get; set; } + + public override string ToString() => Name; + + public List ApplyEffect(string header, List subtitles, int width, int height, WavePeakData2? wavePeaks) + { + var result = new List(); + var sb = new StringBuilder(); + foreach (var sub in subtitles) + { + var words = CaptionWords.Parse(sub, UpperCase); + if (words == null) + { + result.Add(AdvancedEffectUtil.PassThrough(sub)); + continue; + } + + var style = CaptionWords.GetStyle(header, sub); + var blur = AdvancedEffectUtil.Tag(Math.Max(3, (double)style.FontSize * 0.12)); + sb.Clear(); + sb.Append(AdvancedEffectUtil.ExtractPositionalTags(sub.Text)); + foreach (var token in words.Tokens) + { + if (token.IsWord) + { + var start = (int)Math.Round(words.WordStartMs[token.WordIndex]); + var length = (int)Math.Clamp(words.WordStartMs[token.WordIndex + 1] - start, 120, 280); + sb.Append("{\\alpha&HFF&\\blur").Append(blur); + if (Rise) + { + sb.Append("\\fscy").Append(AdvancedEffectUtil.Tag((double)style.ScaleY * 0.4)) + .Append("\\t(").Append(start).Append(',').Append(start + length).Append(",\\alpha&H00&\\blur0\\fscy").Append(AdvancedEffectUtil.Tag((double)style.ScaleY * 1.12)).Append(')') + .Append("\\t(").Append(start + length).Append(',').Append(start + length + 100).Append(",\\fscy").Append(AdvancedEffectUtil.Tag((double)style.ScaleY)).Append(')'); + } + else + { + sb.Append("\\t(").Append(start).Append(',').Append(start + length).Append(",\\alpha&H00&\\blur0)"); + } + + sb.Append('}'); + } + + sb.Append(token.Text); + } + + var line = AdvancedEffectUtil.PassThrough(sub); + line.Text = sb.ToString(); + result.Add(line); + } + + return result; + } +} diff --git a/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectBoldCaptions.cs b/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectBoldCaptions.cs new file mode 100644 index 00000000000..3d4f1a59f8e --- /dev/null +++ b/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectBoldCaptions.cs @@ -0,0 +1,75 @@ +using Avalonia.Media; +using Nikse.SubtitleEdit.Features.Main; +using Nikse.SubtitleEdit.Logic.Config; +using Nikse.SubtitleEdit.Logic.Media; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Nikse.SubtitleEdit.Features.Assa.AssaApplyAdvancedEffect.Effects; + +/// +/// CapCut/short-video "bold" captions: upper case, thick outline and shadow, and the spoken +/// word lights up in a highlight color and grows. +/// +public class AdvancedEffectBoldCaptions : IAdvancedEffectDisplay +{ + public string Name => Se.Language.Assa.AdvancedEffectBoldCaptions; + public string Description => Se.Language.Assa.AdvancedEffectBoldCaptionsDescription; + public bool UsesAudio => false; + + public Color HighlightColor { get; set; } = Color.FromRgb(0xFF, 0xD6, 0x0A); + public bool UpperCase { get; set; } = true; + + public override string ToString() => Name; + + public List ApplyEffect(string header, List subtitles, int width, int height, WavePeakData2? wavePeaks) + { + var result = new List(); + var highlight = AdvancedEffectUtil.ToAssColor(HighlightColor); + var sb = new StringBuilder(); + foreach (var sub in subtitles) + { + var words = CaptionWords.Parse(sub, UpperCase); + if (words == null) + { + result.Add(AdvancedEffectUtil.PassThrough(sub)); + continue; + } + + var style = CaptionWords.GetStyle(header, sub); + var primary = CaptionWords.ToAssColor(style.Primary); + var outline = AdvancedEffectUtil.Tag(Math.Max((double)style.OutlineWidth, (double)style.FontSize * 0.09)); + var shadow = AdvancedEffectUtil.Tag((double)style.FontSize * 0.05); + var normalScale = CaptionWords.Scale(style, 100); + var posTags = AdvancedEffectUtil.ExtractPositionalTags(sub.Text); + for (var w = 0; w < words.Words.Count; w++) + { + var slice = words.MakeSlice(sub, w, posTags, out var slicePosTags); + sb.Clear(); + sb.Append(slicePosTags) + .Append("{\\b1\\3c&H000000&\\4c&H000000&\\4a&H60&\\bord").Append(outline) + .Append("\\shad").Append(shadow).Append('}'); + foreach (var token in words.Tokens) + { + if (token.WordIndex == w) + { + sb.Append("{\\1c").Append(highlight) + .Append(CaptionWords.Scale(style, 125)).Append("\\t(0,110,").Append(CaptionWords.Scale(style, 115)).Append(")}") + .Append(token.Text) + .Append("{\\1c").Append(primary).Append(normalScale).Append('}'); + } + else + { + sb.Append(token.Text); + } + } + + slice.Text = sb.ToString(); + result.Add(slice); + } + } + + return result; + } +} diff --git a/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectHighlightBox.cs b/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectHighlightBox.cs new file mode 100644 index 00000000000..68ceb957695 --- /dev/null +++ b/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectHighlightBox.cs @@ -0,0 +1,130 @@ +using Avalonia.Media; +using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.SubtitleFormats; +using Nikse.SubtitleEdit.Features.Main; +using Nikse.SubtitleEdit.Logic.Config; +using Nikse.SubtitleEdit.Logic.Media; +using SkiaSharp; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Nikse.SubtitleEdit.Features.Assa.AssaApplyAdvancedEffect.Effects; + +/// +/// CapCut-style "highlight" captions: a solid colored box jumps from word to word as the line +/// is spoken. Each word slice is two events - a box layer in an opaque-box style +/// (BorderStyle 3, where libass draws one box per glyph with the glyph's own \3a, so only the +/// active word's box shows) under the normal text layer. Different layers never collide, so +/// both lay out identically. +/// +public class AdvancedEffectHighlightBox : IAdvancedEffectDisplay, IAdvancedEffectHeaderUpdater +{ + public string Name => Se.Language.Assa.AdvancedEffectHighlightBox; + public string Description => Se.Language.Assa.AdvancedEffectHighlightBoxDescription; + public bool UsesAudio => false; + + public Color BoxColor { get; set; } = Color.FromRgb(0x7C, 0x3A, 0xED); + public Color ActiveTextColor { get; set; } = Color.FromRgb(0xFF, 0xFF, 0xFF); + public bool UpperCase { get; set; } + + public override string ToString() => Name; + + public static string GetBoxStyleName(string styleName) => styleName + " - highlight box"; + + public string UpdateHeader(string header, List subtitles) + { + if (string.IsNullOrEmpty(header)) + { + header = AdvancedSubStationAlpha.DefaultHeader; + } + + var boxColor = new SKColor(BoxColor.R, BoxColor.G, BoxColor.B); + foreach (var styleName in subtitles.Select(CaptionWords.GetStyleName).Distinct()) + { + var style = AdvancedSubStationAlpha.GetSsaStyle(styleName, header); + var box = new SsaStyle(style) + { + Name = GetBoxStyleName(styleName), + BorderStyle = "3", + OutlineWidth = Math.Max(1, Math.Round(style.FontSize * 0.14m, 1)), + ShadowWidth = 0, + Outline = boxColor, + Background = boxColor, + }; + header = AdvancedSubStationAlpha.UpdateOrAddStyle(header, box); + } + + return header; + } + + public List ApplyEffect(string header, List subtitles, int width, int height, WavePeakData2? wavePeaks) + { + var result = new List(); + var sb = new StringBuilder(); + var boxColor = AdvancedEffectUtil.ToAssColor(BoxColor); + var activeColor = AdvancedEffectUtil.ToAssColor(ActiveTextColor); + foreach (var sub in subtitles) + { + var words = CaptionWords.Parse(sub, UpperCase); + if (words == null) + { + result.Add(AdvancedEffectUtil.PassThrough(sub)); + continue; + } + + var style = CaptionWords.GetStyle(header, sub); + var primary = CaptionWords.ToAssColor(style.Primary); + var pop = CaptionWords.Scale(style, 110) + "\\t(0,120," + CaptionWords.Scale(style, 100) + ")"; + var normalScale = CaptionWords.Scale(style, 100); + var posTags = AdvancedEffectUtil.ExtractPositionalTags(sub.Text); + var boxStyle = GetBoxStyleName(CaptionWords.GetStyleName(sub)); + + for (var w = 0; w < words.Words.Count; w++) + { + var box = words.MakeSlice(sub, w, posTags, out var slicePosTags); + box.Style = boxStyle; + box.Layer = sub.Layer; + sb.Clear(); + sb.Append(slicePosTags).Append("{\\1a&HFF&\\3a&HFF&\\4a&HFF&\\3c").Append(boxColor).Append('}'); + foreach (var token in words.Tokens) + { + if (token.WordIndex == w) + { + sb.Append("{\\3a&H00&").Append(pop).Append('}').Append(token.Text).Append("{\\3a&HFF&").Append(normalScale).Append('}'); + } + else + { + sb.Append(token.Text); + } + } + + box.Text = sb.ToString(); + result.Add(box); + + var text = words.MakeSlice(sub, w, posTags, out _); + text.Layer = sub.Layer + 1; + sb.Clear(); + sb.Append(slicePosTags); + foreach (var token in words.Tokens) + { + if (token.WordIndex == w) + { + sb.Append("{\\1c").Append(activeColor).Append(pop).Append('}').Append(token.Text) + .Append("{\\1c").Append(primary).Append(normalScale).Append('}'); + } + else + { + sb.Append(token.Text); + } + } + + text.Text = sb.ToString(); + result.Add(text); + } + } + + return result; + } +} diff --git a/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectRollingCaptions.cs b/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectRollingCaptions.cs new file mode 100644 index 00000000000..6731dcd6066 --- /dev/null +++ b/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectRollingCaptions.cs @@ -0,0 +1,83 @@ +using Nikse.SubtitleEdit.Features.Main; +using Nikse.SubtitleEdit.Logic.Config; +using Nikse.SubtitleEdit.Logic.Media; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Nikse.SubtitleEdit.Features.Assa.AssaApplyAdvancedEffect.Effects; + +/// +/// Rolling captions, like a live chat or a teleprompter: each line slides up into place from +/// below, and when the next line arrives the previous one moves up above it and dims. Lines +/// that follow each other closely roll; after a pause the captions start fresh. +/// +public class AdvancedEffectRollingCaptions : IAdvancedEffectDisplay +{ + public string Name => Se.Language.Assa.AdvancedEffectRollingCaptions; + public string Description => Se.Language.Assa.AdvancedEffectRollingCaptionsDescription; + public bool UsesAudio => false; + + /// Lines closer than this roll into each other; a longer pause starts fresh. + private const double MaxRollGapMs = 1000; + private const int SlideMs = 220; + + public override string ToString() => Name; + + public List ApplyEffect(string header, List subtitles, int width, int height, WavePeakData2? wavePeaks) + { + var result = new List(); + var lines = subtitles.OrderBy(s => s.StartTime).ToList(); + var (scriptWidth, scriptHeight) = AdvancedEffectUtil.GetScriptResolution(header, width, height); + var x = scriptWidth / 2; + + // a line rolls into the next when that starts soon after; it is then shown at the bottom + // only until the next line arrives + var rolls = new bool[lines.Count]; + for (var i = 0; i + 1 < lines.Count; i++) + { + rolls[i] = lines[i + 1].StartTime > lines[i].StartTime && + lines[i + 1].StartTime.TotalMilliseconds <= lines[i].EndTime.TotalMilliseconds + MaxRollGapMs; + } + + TimeSpan BottomEnd(int index) => rolls[index] ? lines[index + 1].StartTime : lines[index].EndTime; + + for (var i = 0; i < lines.Count; i++) + { + var sub = lines[i]; + var style = CaptionWords.GetStyle(header, sub); + var marginV = int.TryParse(sub.MarginV, out var lineMarginV) && lineMarginV > 0 ? lineMarginV : style.MarginVertical; + var baseY = scriptHeight - marginV; + var lineHeight = (double)style.FontSize * 1.2 * Math.Max(1, (double)style.ScaleY / 100); + var text = AdvancedEffectUtil.RemovePositionTags(sub.Text); + var slide = (int)Math.Round(lineHeight * 0.8); + + // 1) the current line: slides up from below into the bottom position + var current = AdvancedEffectUtil.PassThrough(sub); + current.EndTime = BottomEnd(i); + current.Text = $"{{\\an2\\move({x},{baseY + slide},{x},{baseY},0,{SlideMs})\\fad(150,{(rolls[i] ? 0 : 150)})}}" + text; + result.Add(current); + + // 2) pushed up by the next line: moves up by the next line's height, dimmed, and leaves + // when the next line itself is pushed up (or ends) + if (rolls[i]) + { + var next = lines[i + 1]; + var upY = baseY - (int)Math.Round(lineHeight * CountLines(next.Text)); + var previous = AdvancedEffectUtil.PassThrough(sub); + previous.StartTime = next.StartTime; + previous.EndTime = BottomEnd(i + 1); + previous.Text = $"{{\\an2\\move({x},{baseY},{x},{upY},0,{SlideMs})\\t(0,{SlideMs},\\alpha&H70&)\\fad(0,150)}}" + text; + result.Add(previous); + } + } + + return result; + } + + private static int CountLines(string text) + { + var normalized = text.Replace("\\N", "\n").Replace("\\n", "\n").Replace("\r\n", "\n"); + return normalized.Split('\n').Length; + } +} diff --git a/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectSingleWordPop.cs b/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectSingleWordPop.cs new file mode 100644 index 00000000000..7382a30b901 --- /dev/null +++ b/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectSingleWordPop.cs @@ -0,0 +1,57 @@ +using Avalonia.Media; +using Nikse.SubtitleEdit.Features.Main; +using Nikse.SubtitleEdit.Logic.Config; +using Nikse.SubtitleEdit.Logic.Media; +using System.Collections.Generic; + +namespace Nikse.SubtitleEdit.Features.Assa.AssaApplyAdvancedEffect.Effects; + +/// +/// CapCut-style single word captions: one big word at a time, popping in (scale overshoot) +/// as it is spoken. +/// +public class AdvancedEffectSingleWordPop : IAdvancedEffectDisplay +{ + public string Name => Se.Language.Assa.AdvancedEffectSingleWordPop; + public string Description => Se.Language.Assa.AdvancedEffectSingleWordPopDescription; + public bool UsesAudio => false; + + public Color TextColor { get; set; } = Color.FromRgb(0xFF, 0xFF, 0xFF); + public bool UpperCase { get; set; } = true; + public int TextSizePercent { get; set; } = 150; + + public override string ToString() => Name; + + public List ApplyEffect(string header, List subtitles, int width, int height, WavePeakData2? wavePeaks) + { + var result = new List(); + var color = AdvancedEffectUtil.ToAssColor(TextColor); + var size = TextSizePercent is >= 50 and <= 500 ? TextSizePercent : 150; // transient spinner values + foreach (var sub in subtitles) + { + var words = CaptionWords.Parse(sub, UpperCase); + if (words == null) + { + result.Add(AdvancedEffectUtil.PassThrough(sub)); + continue; + } + + var style = CaptionWords.GetStyle(header, sub); + var posTags = AdvancedEffectUtil.ExtractPositionalTags(sub.Text); + for (var w = 0; w < words.Words.Count; w++) + { + var slice = words.MakeSlice(sub, w, posTags, out var slicePosTags); + var word = words.Tokens.Find(t => t.WordIndex == w)!.Text; + slice.Text = slicePosTags + + "{\\1c" + color + + CaptionWords.Scale(style, size * 0.55) + + "\\t(0,90," + CaptionWords.Scale(style, size * 1.12) + ")" + + "\\t(90,180," + CaptionWords.Scale(style, size) + ")}" + + word; + result.Add(slice); + } + } + + return result; + } +} diff --git a/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectSmoothFill.cs b/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectSmoothFill.cs new file mode 100644 index 00000000000..71e63a7ebbf --- /dev/null +++ b/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/AdvancedEffectSmoothFill.cs @@ -0,0 +1,66 @@ +using Avalonia.Media; +using Nikse.SubtitleEdit.Features.Main; +using Nikse.SubtitleEdit.Logic.Config; +using Nikse.SubtitleEdit.Logic.Media; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Nikse.SubtitleEdit.Features.Assa.AssaApplyAdvancedEffect.Effects; + +/// +/// Smooth karaoke fill: a highlight color sweeps through each word as it is spoken (\kf, +/// where the primary color is the "sung" part and the secondary color the rest). +/// +public class AdvancedEffectSmoothFill : IAdvancedEffectDisplay +{ + public string Name => Se.Language.Assa.AdvancedEffectSmoothFill; + public string Description => Se.Language.Assa.AdvancedEffectSmoothFillDescription; + public bool UsesAudio => false; + + public Color FillColor { get; set; } = Color.FromRgb(0xFF, 0xD6, 0x0A); + public Color BaseColor { get; set; } = Color.FromRgb(0xFF, 0xFF, 0xFF); + public bool UpperCase { get; set; } + + public override string ToString() => Name; + + public List ApplyEffect(string header, List subtitles, int width, int height, WavePeakData2? wavePeaks) + { + var result = new List(); + var sb = new StringBuilder(); + foreach (var sub in subtitles) + { + var words = CaptionWords.Parse(sub, UpperCase); + if (words == null) + { + result.Add(AdvancedEffectUtil.PassThrough(sub)); + continue; + } + + sb.Clear(); + sb.Append(AdvancedEffectUtil.ExtractPositionalTags(sub.Text)) + .Append("{\\1c").Append(AdvancedEffectUtil.ToAssColor(FillColor)) + .Append("\\2c").Append(AdvancedEffectUtil.ToAssColor(BaseColor)).Append('}'); + + // \kf durations are centiseconds; round the running total so the sweep ends with the line + var doneCs = 0; + foreach (var token in words.Tokens) + { + if (token.IsWord) + { + var endCs = (int)Math.Round(words.WordStartMs[token.WordIndex + 1] / 10.0); + sb.Append("{\\kf").Append(Math.Max(0, endCs - doneCs)).Append('}'); + doneCs = Math.Max(doneCs, endCs); + } + + sb.Append(token.Text); + } + + var line = AdvancedEffectUtil.PassThrough(sub); + line.Text = sb.ToString(); + result.Add(line); + } + + return result; + } +} diff --git a/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/CaptionWords.cs b/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/CaptionWords.cs new file mode 100644 index 00000000000..87572315fc8 --- /dev/null +++ b/src/ui/Features/Assa/AssaApplyAdvancedEffect/Effects/CaptionWords.cs @@ -0,0 +1,122 @@ +using Nikse.SubtitleEdit.Core.Common; +using Nikse.SubtitleEdit.Core.SubtitleFormats; +using Nikse.SubtitleEdit.Features.Main; +using SkiaSharp; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Text.RegularExpressions; + +namespace Nikse.SubtitleEdit.Features.Assa.AssaApplyAdvancedEffect.Effects; + +/// +/// Splits a line into words and line breaks for the word-by-word caption styles (highlight +/// box, single word pop, bold captions), and times each word by its length - a long word is +/// spoken longer than "a", which an even split ignores. +/// +internal sealed class CaptionWords +{ + private static readonly Regex TokenRegex = new(@"\n|[^\S\n]+|\S+", RegexOptions.Compiled); + + public sealed class Token + { + public required string Text { get; init; } + public bool IsWord { get; init; } + public bool IsLineBreak { get; init; } + public int WordIndex { get; init; } = -1; + } + + public List Tokens { get; } = new(); + public List Words { get; } = new(); + + /// Word i is active from WordStartMs[i] to WordStartMs[i + 1] (ms from the line start). + public double[] WordStartMs { get; private set; } = []; + + public static CaptionWords? Parse(SubtitleLineViewModel line, bool upperCase) + { + var text = HtmlUtil.RemoveHtmlTags(Utilities.RemoveSsaTags(line.Text), true) + .Replace("\\N", "\n").Replace("\\n", "\n").Replace("\r\n", "\n").Replace('\r', '\n').Trim(); + if (upperCase) + { + text = text.ToUpper(CultureInfo.CurrentCulture); + } + + var result = new CaptionWords(); + foreach (Match m in TokenRegex.Matches(text)) + { + if (m.Value == "\n") + { + result.Tokens.Add(new Token { Text = "\\N", IsLineBreak = true }); + } + else if (string.IsNullOrWhiteSpace(m.Value)) + { + result.Tokens.Add(new Token { Text = " " }); + } + else + { + result.Tokens.Add(new Token { Text = EscapeBraces(m.Value), IsWord = true, WordIndex = result.Words.Count }); + result.Words.Add(m.Value); + } + } + + if (result.Words.Count == 0) + { + return null; + } + + result.WordStartMs = MakeTiming(result.Words, line.Duration.TotalMilliseconds); + return result; + } + + private static double[] MakeTiming(List words, double totalMs) + { + // weight = letters + a constant, so short words still get a readable slice + var weights = new double[words.Count]; + var sum = 0.0; + for (var i = 0; i < words.Count; i++) + { + weights[i] = words[i].Length + 2.0; + sum += weights[i]; + } + + var starts = new double[words.Count + 1]; + for (var i = 0; i < words.Count; i++) + { + starts[i + 1] = starts[i] + Math.Max(0, totalMs) * weights[i] / sum; + } + + starts[words.Count] = Math.Max(0, totalMs); + return starts; + } + + /// + /// A copy of the line covering only word 's time slice, with the + /// line's positioning tags (a \move continues across the slices). + /// + public SubtitleLineViewModel MakeSlice(SubtitleLineViewModel line, int wordIndex, string posTags, out string slicePosTags) + { + var slice = new SubtitleLineViewModel(line, generateNewId: true); + var startMs = WordStartMs[wordIndex]; + var endMs = WordStartMs[wordIndex + 1]; + slice.StartTime = line.StartTime.Add(TimeSpan.FromMilliseconds(startMs)); + slice.EndTime = wordIndex == Words.Count - 1 ? line.EndTime : line.StartTime.Add(TimeSpan.FromMilliseconds(endMs)); + slicePosTags = string.IsNullOrEmpty(posTags) + ? string.Empty + : AdvancedEffectUtil.AdjustMoveForSegment(posTags, startMs, endMs - startMs, line.Duration.TotalMilliseconds); + return slice; + } + + public static string GetStyleName(SubtitleLineViewModel line) => string.IsNullOrWhiteSpace(line.Style) ? "Default" : line.Style; + + public static SsaStyle GetStyle(string header, SubtitleLineViewModel line) => + AdvancedSubStationAlpha.GetSsaStyle(GetStyleName(line), string.IsNullOrEmpty(header) ? AdvancedSubStationAlpha.DefaultHeader : header); + + /// \fscx/\fscy for a percentage of the style's own scale. + public static string Scale(SsaStyle style, double percent) => + $"\\fscx{AdvancedEffectUtil.Tag((double)style.ScaleX * percent / 100)}\\fscy{AdvancedEffectUtil.Tag((double)style.ScaleY * percent / 100)}"; + + public static string ToAssColor(SKColor color) => $"&H{color.Blue:X2}{color.Green:X2}{color.Red:X2}&"; + + // a literal brace would open/close an override block + private static string EscapeBraces(string s) => s.Replace("{", "(").Replace("}", ")"); +} diff --git a/src/ui/Features/Assa/AssaApplyCustomOverrideTags/AssaApplyCustomOverrideTagsWindow.cs b/src/ui/Features/Assa/AssaApplyCustomOverrideTags/AssaApplyCustomOverrideTagsWindow.cs index 96e750fe153..16c4033478f 100644 --- a/src/ui/Features/Assa/AssaApplyCustomOverrideTags/AssaApplyCustomOverrideTagsWindow.cs +++ b/src/ui/Features/Assa/AssaApplyCustomOverrideTags/AssaApplyCustomOverrideTagsWindow.cs @@ -1,8 +1,14 @@ using Avalonia; +using Avalonia.Automation; using Avalonia.Controls; +using Avalonia.Controls.Primitives; +using Avalonia.Controls.Templates; using Avalonia.Data; +using Avalonia.Input; using Avalonia.Interactivity; using Avalonia.Layout; +using Avalonia.Media; +using Avalonia.Styling; using Nikse.SubtitleEdit.Features.Main.Layout; using Nikse.SubtitleEdit.Features.Sync.VisualSync; using Nikse.SubtitleEdit.Logic; @@ -10,150 +16,280 @@ namespace Nikse.SubtitleEdit.Features.Assa.AssaApplyCustomOverrideTags; +/// +/// Applies override tags to lines, styled like ASSA draw: presets, the tags and what to apply +/// them to on the left, the video preview with a line picker on the right. +/// public class AssaApplyCustomOverrideTagsWindow : Window { + private static readonly FontFamily MonoFont = new("Menlo, Consolas, Cascadia Mono, DejaVu Sans Mono, monospace"); + public AssaApplyCustomOverrideTagsWindow(AssaApplyCustomOverrideTagsViewModel vm) { UiUtil.InitializeWindow(this, GetType().Name); Title = Se.Language.Assa.ApplyOverrideTags; CanResize = true; - Width = 1100; - Height = 700; - MinWidth = 900; - MinHeight = 650; + Width = 1200; + Height = 780; + MinWidth = 950; + MinHeight = 600; + Background = EditorChrome.WindowBrush; + EditorChrome.AddEditorStyles(Styles); vm.Window = this; DataContext = vm; - var labelOverrideTag = UiUtil.MakeLabel(Se.Language.Assa.ChooseOverrideTagToAdd); - var comboBoxOverrideTags = UiUtil.MakeComboBox(vm.OverrideTags, vm, nameof(vm.SelectedOverrideTag)); - var buttonUseOverrideTag = UiUtil.MakeButton(Se.Language.General.Use, vm.UseCommand); - var buttonAppendOverrideTag = UiUtil.MakeButton(Se.Language.General.Append, vm.AppendCommand); - var buttonClear = UiUtil.MakeButton(Se.Language.General.Clear, vm.ClearCommand); - var buttonHistory = UiUtil.MakeButton(Se.Language.General.History, vm.ShowHistoryCommand).WithBindIsVisible(nameof(vm.IsHistoryVisible)); - var panelOverrideTags = new StackPanel + var content = new Grid { - Orientation = Orientation.Horizontal, - Children = + ColumnDefinitions = { - comboBoxOverrideTags, - buttonUseOverrideTag, - buttonAppendOverrideTag, - buttonClear, - buttonHistory, - } + new ColumnDefinition(new GridLength(380)), + new ColumnDefinition(new GridLength(1, GridUnitType.Star)), + }, }; + content.Add(MakeSettingsPanel(vm, out var firstInput), 0, 0); + content.Add(MakePreview(vm), 0, 1); - var textBoxCurrent = new TextBox + var mainGrid = new Grid { - AcceptsReturn = true, - Height = 60, - Width = double.NaN, - HorizontalAlignment = HorizontalAlignment.Stretch, + RowDefinitions = + { + new RowDefinition(new GridLength(1, GridUnitType.Star)), + new RowDefinition(GridLength.Auto), + }, + }; + mainGrid.Add(content, 0, 0); + mainGrid.Add(MakeButtonBar(vm), 1, 0); + Content = mainGrid; + + // initial focus on an input, not an action button - a focused button clicks on bare Space + UiUtil.FocusOnFirstActivation(this, firstInput); + + AddHandler(KeyDownEvent, vm.OnKeyDownHandler, RoutingStrategies.Tunnel | RoutingStrategies.Bubble, handledEventsToo: false); + Loaded += (_, _) => vm.OnLoaded(); + Closing += (_, e) => vm.OnClosing(); + } + + private static Border MakeSettingsPanel(AssaApplyCustomOverrideTagsViewModel vm, out Control firstInput) + { + var tags = MakeTagsSection(vm, out firstInput); + var grid = new Grid + { + RowDefinitions = + { + new RowDefinition(new GridLength(1, GridUnitType.Star)), + new RowDefinition(GridLength.Auto), + new RowDefinition(GridLength.Auto), + }, + }; + grid.Add(MakePresetsSection(vm), 0, 0); + grid.Add(tags, 1, 0); + grid.Add(MakeApplyToSection(vm), 2, 0); + + return new Border + { + Child = grid, + Background = EditorChrome.PanelBrush, + BorderBrush = EditorChrome.LineBrush, + BorderThickness = new Thickness(0, 0, 1, 0), }; - textBoxCurrent.Bind(TextBox.TextProperty, new Binding(nameof(vm.CurrentTag))); - textBoxCurrent.WithAccessibleName(Se.Language.Assa.ApplyOverrideTags); // the chosen tags, no visible label (#12087) - comboBoxOverrideTags.WithLabeledBy(labelOverrideTag); - - var panelRadioButtons = new StackPanel + } + + /// + /// The stock tags as a list: name and tag code, a click uses it, "+" appends it. + /// + private static Control MakePresetsSection(AssaApplyCustomOverrideTagsViewModel vm) + { + var list = new ItemsControl { - Orientation = Orientation.Vertical, - Margin = new Thickness(10, 10, 0, 0), - Children = + ItemsSource = vm.OverrideTags, + ItemTemplate = new FuncDataTemplate((preset, _) => { - new RadioButton + if (preset == null) + { + return new Panel(); + } + + var use = EditorChrome.CreateToolButton("fa-solid fa-check", Se.Language.General.Use + ": " + preset.Name, null, 24); + use.Click += (_, _) => { - Content = Se.Language.Sync.AdjustAll, - [!RadioButton.IsCheckedProperty] = new Binding(nameof(vm.AdjustAll)) - }, - new RadioButton + vm.SelectedOverrideTag = preset; + vm.UseCommand.Execute(null); + }; + var append = EditorChrome.CreateToolButton("fa-solid fa-plus", Se.Language.General.Append + ": " + preset.Name, null, 24); + append.Click += (_, _) => { - Content = Se.Language.Sync.AdjustSelectedLines, - [!RadioButton.IsCheckedProperty] = new Binding(nameof(vm.AdjustSelectedLines)) - }, - new RadioButton + vm.SelectedOverrideTag = preset; + vm.AppendCommand.Execute(null); + }; + + var text = new StackPanel { Spacing = 2, VerticalAlignment = VerticalAlignment.Center }; + text.Children.Add(new TextBlock { Text = preset.Name, FontSize = 12.5, TextTrimming = TextTrimming.CharacterEllipsis }); + text.Children.Add(new TextBlock { - Content = Se.Language.Sync.AdjustSelectedLinesAndForward, - [!RadioButton.IsCheckedProperty] = new Binding(nameof(vm.AdjustSelectedLinesAndForward)) - }, - UiUtil.MakeLabel().WithBindText(vm, nameof(vm.SelectionInfo)).WithOpacity(0.6), - }, + Text = preset.Tag, + FontFamily = MonoFont, + FontSize = 11, + Foreground = EditorChrome.FaintTextBrush, + TextTrimming = TextTrimming.CharacterEllipsis, + }); + + var row = new Grid + { + ColumnSpacing = 4, + ColumnDefinitions = { new ColumnDefinition(new GridLength(1, GridUnitType.Star)), new ColumnDefinition(GridLength.Auto), new ColumnDefinition(GridLength.Auto) }, + }; + row.Add(text, 0, 0); + row.Add(use, 0, 1); + row.Add(append, 0, 2); + + var border = new Border + { + Child = row, + Padding = new Thickness(10, 6, 6, 6), + CornerRadius = new CornerRadius(7), + Background = Brushes.Transparent, + }; + if (Se.Settings.Appearance.ShowHints) + { + ToolTip.SetTip(border, preset.Tag); + } + + // A click on the row (not on its buttons) uses the preset + border.PointerPressed += (_, e) => + { + if (e.Source is Visual visual && Avalonia.VisualTree.VisualExtensions.FindAncestorOfType